commit 0bce7df913dcc488f59055e5e57ceb2241553d4b Author: Auric Vente Date: Fri Aug 2 03:03:03 2024 -0600 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2dba305 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +venv/* +output/* +*.pyc +__pycache__/ +.mypy_cache/ +Gifmaker.egg-info/ +build/ \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..4dcc2ef --- /dev/null +++ b/LICENSE @@ -0,0 +1 @@ +Use this under good humor \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..10d7228 --- /dev/null +++ b/README.md @@ -0,0 +1,972 @@ + + +This is a Python program to produce images or videos. + +It extracts random (or sequential) frames from a video or image. + +It (optionally) places words somewhere on each frame. + +Then joins all frames into an animation or image. + +You can use many arguments to produce different kinds of results. + +--- + +## Why? + +It might be useful in the realm of human verification. + + + +And memes. + +--- + +## Index +1. [Installation](#installation) +1. [Usage](#usage) +1. [Arguments](#arguments) +1. [More](#more) + +--- + + + +--- + +## Installation + +### Using pipx + +```sh +pipx install git+this_repo_url --force +``` + +Now you should have the `gifmaker` command available. + +--- + +### Manual + +Clone this repo, and get inside the directory: + +```shell +git clone --depth 1 this_repo_url + +cd gifmaker +``` + +Then create the virtual env: + +```shell +python -m venv venv +``` + +Then install the dependencies: + +```shell +venv/bin/pip install -r requirements.txt +``` + +Or simply run `scripts/venv.sh` to create the virtual env and install the dependencies. + +There's a `scripts/test.sh` file that runs the program with some arguments to test if things are working properly. + +--- + + + +--- + +## Usage + +Use the installed `gifmaker` command if you used `pipx`. + +--- + +Or run `gifmaker/main.py` using the Python in the virtual env: + +```shell +venv/bin/python -m gifmaker.main +``` + +There's a `run.sh` that does this. + +--- + +You can provide a video or image path using the `--input` argument. + +You also need to provide an output path: + +```shell +gifmaker --input /path/to/video.webm --output /tmp/gifmaker +gifmaker --input /path/to/animated.gif --output /tmp/gifmaker +gifmaker --input /path/to/image.png --output /tmp/gifmaker +``` + +`webm`, `mp4`, `gif`, `jpg`, and `png` should work, and maybe other formats. + +You can pass it a string of lines to use on each frame. + +They are separated by `;` (semicolons). + +```shell +gifmaker --words "Hello Brother ; Construct Additional Pylons" +``` + +It will make 2 frames, one per line. + +If you want to use words and have some frames without them simply use more `;`. + +--- + +You can use random words with `[random]`: + +```shell +gifmaker --words "I Like [random] and [random]" +``` + +It will pick random words from a list of English words. + +There are 4 kinds of random formats: `[random]`, `[RANDOM]`, `[Random]`, `[RanDom]`, and `[randomx]`. + +The replaced word will use the case of those. + +With `[random]` you get lower case, like `water`. + +With `[RANDOM]` you get all caps, like `PLANET`. + +With `[Random]` you get the first letter capitalized, like `The garden`. + +With `[RanDom]` you get title case, like `The Machine`. + +With `[randomx]` you get the exact item from the random list. + +You can specify how many random words to generate by using a number: + +For example `[Random 3]` might generate `Drivers Say Stories`. + +--- + +You can multiply random commands by using numbers like `[x2]`. + +For example: + +```shell +--words "Buy [Random] [x2]" +``` + +This might produce: `Buy Sink ; Buy Plane`. + +The multipliers need to be at the end of the line. + +--- + +You can also generate random numbers with `[number]`. + +This is a single digit from `0` to `9`. + +For example, `[number]` might result in `3`. + +You can specify the length of the number. + +For example, `[number 3]` might result in `128`. + +You can also use a number range by using two numbers. + +For example, `[number 0 10]` will pick a random number from `0` to `10`. + +```shell +--words "I rate it [number 0 10] out of 10" +``` + +--- + +If you want to repeat the previous line, use `[repeat]`: + +For example: `--words "Buy Buttcoin ; [repeat]"`. + +It will use that text in the first two frames. + +You can also provide a number to specify how many times to repeat: + +For example: `--words "Buy Buttcoin ; [repeat 2]"`. + +The line will be shown in 3 frames (the original plus the 2 repeats). + +A shortcut is also available: `[rep]` or `[rep 3]`. + +--- + +You can use linebreaks with `\n`. + +For example: `--words "Hello \n World"`. + +Will place `Hello` where a normal line would be. + +And then place `World` underneath it. + +--- + +Another way to define an empty line is using `[empty]`. + +For example: `hello ; world ; [empty]`. + +This could be useful in `wordfile` to add empty lines at the end. + +Else you can just add more `;` to `words`. + +You can also use numbers like `[empty 3]`. + +That would add 3 empty frames. + +--- + +There's also `[date]` which can be used to print dates. + +You can define any date format in it. + +For example `[date %Y-%m-%d]` would print year-month-day. + +You can see all format codes here: [datetime docs](https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes). + +If no format is used it defaults to `%H:%M:%S`. + +--- + +There's also `[count]`. + +The count starts at `0` and is increased on every `[count]`. + +For example `--words "Match: [count] ; Nothing ; Match [count]"`. + +It would print `Match: 1`, `Nothing`, and `Match: 2`. + +You might want to print the count on every frame: + +```shell +--words "[count]" --fillgen --frames 10 +``` + +--- + +You can run `main.py` from anywhere in your system using its virtual env. + +Relative paths should work fine. + +--- + +If you provide an argument without flags, it will be used for `words`: + +```sh +gifmaker --input image.png "What is that? ; AAAAA?" +``` + +It's a shortcut to avoid having to type `--words`. + +--- + +Here's a fuller example: + +```shell +gifmaker --input /videos/stuff.webm --fontsize 18 --delay 300 --width 600 --words "I want to eat ;; [Random] ; [repeat 2] ;" --format mp4 --bgcolor 0,0,0 --output stuff/videos +``` + +--- + + + +--- + +## Arguments + +You can use arguments like: `--delay 350 --width 500 --order normal`. + +These modify how the file is going to be generated. + +--- + +> **input** (Type: str | Default: None) + +Path to a video or image to use as the source of the frames. + +`webm`, `mp4`, `gif`, and even `jpg` or `png` should work. + +For example: `--input stuff/cow.webm`. + +`-i` is a shorter alias for this. + +--- + +> **output** (Type: str | Default: None) + +Directory path to save the generated file. + +For example: `stuff/videos`. + +It will use a random file name. + +Using `gif`, `webm`, `mp4`, `jpg`, or `png` depending on the `format` argument. + +Or you can enter the path plus the file name. + +For example: `stuff/videos/cat.gif`. + +The format is deduced by the extension (`gif`, `webm`, `mp4`, `jpg`, or `png`). + +`-o` is a shorter alias for this. + +--- + +> **words** (Type: str | Default: Empty) + +The words string to use. + +Lines are separated by `;`. + +Each line is a frame. + +Special words include `[random]` and `[repeat]`. + +As described in [Usage](#usage). + +--- + +> **wordfile** (Type: str | Default: None) + +File to use as the source of word lines. + +For example, a file can be like: + +``` +This is a line +I am a [random] + +This is a line after an empty line +[repeat] +[empty] +``` + +Then you can point to it like: + +```shell +--wordfile "/path/to/words.txt" +``` + +It will use word lines the same as with `--words`. + +--- + +> **fillwords** (Type: flag | Default: False) + +Fill the rest of the frames with the last word line. + +If there are no more lines to use, it will re-use the last line. + +For example: + +```shell +--words "First Line; Last Line" --frames 5 --fillwords +``` + +First frame says "First Line". + +Then it will use "Last Line" for the rest of the frames. + +--- + +> **fillgen** (Type: flag | Default: False) + +If this is enabled, the first line of words will be generated till the end of the frames. + +For example: + +```shell +gifmaker --words "[random] takes [count] at [date]" --fillgen --frames 5 +``` + +--- + +> **separator** (Type: str | Default: ";") + +The character to use as the line separator in `words`. + +This also affects `randomlist`. + +--- + +> **delay** (Type: int | Default: 700) + +The delay between frames. In milliseconds. + +A smaller `delay` = A faster animation. + +--- + +> **frames** (Type: int | Default: 3) + +The amount of frames to use. + +This value has a higher priority than the other frame count methods. + +--- + +> **framelist** (Type: str | Default: Empty) + +The specific list of frame indices to use. + +The first frame starts at `0`. + +For example `--framelist "2,5,2,0,3"`. + +It will use those specific frames. + +It also defines how long the animation is. + +--- + +> **frameopts** (Type: str | Default: Empty) + +Define the pool of frame indices when picking randomly. + +For example: `--frameopts 0,11,22`. + +--- + +> **left** (Type: int | Default: None) + +Padding from the left edge to position the text. + +--- + +> **right** (Type: int | Default: None) + +Padding from the right edge to position the text. + +--- + +> **top** (Type: int | Default: None) + +Padding from the top edge to position the text. + +--- + +> **bottom** (Type: int | Default: None) + +Padding from the bottom edge to position the text. + +--- + +You only need to set `left` or `right`, not both. + +You only need to set `top` or `bottom`, not both. + +If those are not set then the text is placed at the center. + +If any of those is set to a negative value like `-100`, it will apply it from the center. + +For example: `--top -100` would pull it a bit to the top from the center. + +And `--right -100` would pull it a bit to the right from the center. + +--- + +> **width** (Type: int | Default: None) + +Fixed width of every frame. + +If the height is not defined it will use an automatic one. + +--- + +> **height** (Type: int | Default: None) + +Fixed height of every frame. + +If the width is not defined it will use an automatic one. + +--- + +> **nogrow** (Type: flag | Default: False) + +If this is enabled, the frames won't be resized if they'd be bigger than the original. + +For instance, if the original has a width of `500` and you set `--width 600`. + +It's a way to limit the values of `--width` and `--height`. + +--- + +> **format** (Type: str | Default: "gif") + +The format of the output file. Either `gif`, `webm`, `mp4`, `jpg`, or `png`. + +This is only used when the output is not a direct file path. + +For instance, if the output ends with `cat.gif` it will use `gif`. + +If the output is a directory it will use a random name with the appropriate format. + +--- + +> **order** (Type: str | Default: "random") + +The order used to extract the frames. + +Either `random` or `normal`. + +`random` picks frames randomly. + +`normal` picks frames in order starting from the first one. + +`normal` loops back to the first frame if needed. + +--- + +> **font** (Type: str | Default "sans") + +The font to use for the text. + +Either: `sans`, `serif`, `mono`, `bold`, `italic`, `cursive`, `comic`, or `nova`. + +There is also `random` and `random2`. + +First one is a random font, the other one is a random font on each frame. + +You can also specify a path to a `ttf` file. + +--- + +> **fontsize** (Type: int | Default: 60) + +The size of the text. + +--- + +> **fontcolor** (Type: str | Default: "255,255,255") + +The color of the text. + +This is a [color](#colors). + +--- + +> **bgcolor** (Type: str | Default: None) + +Add a background rectangle below the text. + +This is a [color](#colors). + +--- + +> **opacity** (Type: float | Default: 0.66) + +From `0` to `1`. + +The opacity level of the background rectangle. + +The closer it is to `0` the more transparent it is. + +--- + +> **padding** (Type: int | Default: 20) + +The padding of the background rectangle. + +This gives some spacing around the text. + +--- + +> **radius** (Type: int | Default: 0) + +The border radius of the background rectangle. + +This is to give the rectangle rounded corners. + +--- + +> **outline** (Type: str | Default: None) + +Add an outline around the text. + +In case you want to give the text more contrast. + +This is a [color](#colors). + +--- + +> **outlinewidth** (Type: int | Default: 2) + +Width of the outline. It must be a number divisible by 2. + +If it's not divisible by 2 it will pick the next number automatically. + +--- + +> **no-outline-top** (Type: flag | Default: False) + +> **no-outline-bottom** (Type: flag | Default: False) + +> **no-outline-left** (Type: flag | Default: False) + +> **no-outline-right** (Type: flag | Default: False) + +Don't show specific lines from the outline. + +--- + +> **align** (Type: str | Default: "center") + +How to align the center when there are multiple lines. + +Either `left`, `center`, or `right`. + +--- + +> **wrap** (Type: int | Default: 35) + +Split lines if they exceed this char length. + +It creates new lines. Makes text bigger vertically. + +--- + +> **nowrap** (Type: flag | Default: False) + +Don't wrap the lines of words. + +--- + +> **randomlist** (Type: str | Default: Empty) + +Random words are selected from this list. + +If the list is empty it will be filled with a long list of nouns. + +You can specify the words to consider, separated by semicolons. + +For example: `--randomlist "cat ; dog ; nice cow ; big horse"`. + +--- + +> **randomfile** (Type: str | Default: List of nouns) + +Path to a text file with the random words to use. + +This is a simple text file with each word or phrase in its own line. + +For example: + +``` +dog +a cow +horse +``` + +Then you point to it: `--randomfile "/path/to/animals.txt"`. + +--- + +> **repeatrandom** (Type: flag | Default: False) + +If this is enabled, random words can be repeated at any time. + +Else it will cycle through them randomly without repetitions. + +--- + +> **loop** (Type: int | Default 0) + +How to loop gif renders. + +`-1` = No loop + +`0` = Infinite loop + +`1 or more` = Specific number of loops + +--- + +> **filter** (Type: str | Default: "none") + +A color filter that is applied to each frame. + +The filters are: `hue1`, `hue2` .. up to `hue8`, and `anyhue`, `anyhue2`. + +And also: `gray`, `blur`, `invert`, `random`, `random2`, `none`. + +`random` picks a random filter for all frames. + +`random2` picks a random filter on every frame. + +`anyhue` is like `random` but limited to the hue effects. + +`anyhue2` is like `random2` but is limited to the hue effects. + +--- + +> **filteropts** (Type: str | Default: Empty) + +This defines the pool of available filters to pick randomly. + +This applies when `filter` is `random` or `random2`. + +For example: `--filteropts hue1,hue2,hue3,gray`. + +--- + +> **repeatfilter** (Type: flag | Default: False) + +If this is enabled, random filters can be repeated at any time. + +Else it will cycle through them randomly without repetitions. + +--- + +> **remake** (Type: flag | Default: False) + +Use this if you only want to re-render the frames. + +It re-uses all the frames, resizes, and renders again. + +It doesn't do the rest of the operations. + +For example: `--input /path/to/file.gif --remake --width 500 --delay 300`. + +For instance, you can use this to change the `width` or `delay` of a rendered file. + +--- + +> **descender** (Type: flag | Default: False) + +If enabled, the descender height will add extra space to the bottom of text. + +This is relevant when adding a background or an outline. + +This means words like `Ayyy` get covered completely, top of `A` and bottom of `y`. + +The default is to ignore the descender to ensure consistent placement of text. + +--- + +> **seed** (Type: int | Default: None) + +> **frameseed** (Type: int | Default: None) + +> **wordseed** (Type: int | Default: None) + +> **filterseed** (Type: int | Default: None) + +> **colorseed** (Type: int | Default: None) + +The random component can be seeded. + +This means that if you give it a value, it will always act the same. + +This can be useful if you want to replicate results. + +There are multiple random generators: + +One takes care of picking frames and is controlled by `frameseed`. + +One takes care of picking words and numbers and is controlled by `wordseed`. + +One takes care of picking filters and is controlled by `filterseed`. + +One takes care of picking colors and is controlled by `colorseed`. + +If those are not defined, then it will assign the generic `seed` (if defined). + +If no seed is defined then it won't use seeds and be truly random (the default). + +--- + +> **deepfry** (Type: flag | Default: False) + +Apply heavy `jpeg` compression to all frames. + +Use to distort the result for whatever reason. + +--- + +> **word-color-mode** (Type: str | Default: "normal") + +Either `normal` or `random`. + +In `normal` it will avoid fetching random colors on the same lines. + +For instance if the words are `First line [x2] ; Second line [x2]`. + +And the colors are set to `--fontcolor light2 --bgcolor darkfont2`. + +It will use the same colors for the first 2 frames, and then other colors for the rest. + +Instead of picking random colors on each frame. + +This is to avoid the text being too aggresive visually. + +This can be disabled with `random`, which will fetch random colors on each frame. + +--- + +If a number argument has a default you can use `p` and `m` operators. + +`p` means `plus` while `m` means `minus`. + +For example, since `fontsize` has a default of `20`. + +You can do `--fontsize p1` or `--fontsize m1`. + +To get `21` or `19`. + +--- + +### Colors + +Some arguments use the color format. + +This can be 3 numbers from `0` to `255`, separated by commas. + +It uses the `RGB` format. + +`0,0,0` would be black, for instance. + +The value can also be `light` or `dark`. + +These will get a random light or dark color. + +The value can also be `light2` or `dark2`. + +These will get a random light or dark color on each frame. + +Names are also supported, like `green`, `black`, `red`. + +It can also be `font` to use the same color as the font. + +It can also be `lightfont` and `darkfont`. + +These pick contrasts based on the current font color. + +For example if the font color is light red, the contrast would be dark redish. + +`lightfont2` and `darkfont2` do the same but on each frame. + +--- + + + +--- + +## More Information + +### Scripts + +You can make `TOML` files that define the arguments to use. + +Provide the path of a script like this: `--script "/path/to/script.toml"`. + +For example, a script can look like this: + +```toml +words = "Disregard [Random] ; [repeat] ; Acquire [Random] ; [repeat] ;" +fontcolor = "44,80,200" +fontsize = 80 +bgcolor = "0,0,0" +bottom = 0 +right = 0 +``` + +--- + +### Functions + +You can write shell functions to make things faster by using templates. + +For example here's a `fish` function: + +```js +function funstuff + gifmaker \ + --input /path/to/some/file.png --words "$argv is [Random] [x5]" \ + --bgcolor random_dark2 --fontcolor random_light2 \ + --top 0 --fontsize 22 --filter random2 --width 600 +end +``` + +This is added in `~/.config/fish/config.fish`. + +Source the config after adding the function: + +```shell +source ~/.config/fish/config.fish +``` + +Then you can run: `funstuff Grog`. + +In this case it will do `Grogg is [Random]` 5 times. + +Using all the other arguments that are specific to look good on that image. + +--- + +### Python + +You might want to interface through another Python program. + +Here's some snippets that might help: + +```python +import asyncio +from pathlib import Path + +# Arguments shared by all functions +gifmaker_common = [ + "/usr/bin/gifmaker", + "--width", 350, + "--output", "/tmp/gifmaker", + "--nogrow", +] + +# Add quotes around everything and join +def join_command(command): + return " ".join(f'"{arg}"' for arg in command) + +# Get the command list and turn it into a string +def gifmaker_command(args): + command = gifmaker_common.copy() + command.extend(args) + return join_command(command) + +# You can have multiple functions like this +def generate_something(who): + command = gifmaker_command([ + "--input", get_path("describe.jpg"), + "--words", f"{who} is\\n[Random] [x5]", + "--filter", "anyhue2", + "--opacity", 0.8, + "--fontsize", 66, + "--delay", 700, + "--padding", 50, + "--fontcolor", "light2", + "--bgcolor", "black", + ]) + + run_gifmaker(command) + +# This is an async example +async def run_gifmaker(command): + process = await asyncio.create_subprocess_shell( + command, + stdout=asyncio.subprocess.PIPE, + stderr=asyncio.subprocess.PIPE, + shell=True, + ) + + stdout, stderr = await process.communicate() + + if process.returncode != 0: + print(f"Error: {stderr.decode()}") + return + + await upload(Path(stdout.decode().strip())) +``` \ No newline at end of file diff --git a/gifmaker/__init__.py b/gifmaker/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/gifmaker/argparser.py b/gifmaker/argparser.py new file mode 100644 index 0000000..c9e0e72 --- /dev/null +++ b/gifmaker/argparser.py @@ -0,0 +1,164 @@ +# Standard +import re +import sys +import argparse +from typing import List, Any, Dict, Union +from pathlib import Path + + +class ArgParser: + # Generic class to get arguments from the terminal + def __init__(self, title: str, argdefs: Dict[str, Any], aliases: Dict[str, List[str]], obj: Any): + parser = argparse.ArgumentParser(description=title) + argdefs["string_arg"] = {"nargs": "*"} + + for key in argdefs: + item = argdefs[key] + + if key == "string_arg": + names = [key] + else: + name = ArgParser.under_to_dash(key) + + # Add -- and - formats + names = [f"--{name}", f"-{name}"] + name2 = key.replace("-", "") + + # Check without dashes + if name2 != name: + names.extend([f"--{name2}", f"-{name2}"]) + + if key in aliases: + names += aliases[key] + + tail = {key: value for key, + value in item.items() if value is not None} + parser.add_argument(*names, **tail) + + self.args = parser.parse_args() + self.obj = obj + + def string_arg(self) -> str: + return " ".join(self.args.string_arg) + + def get_list(self, attr: str, value: str, vtype: Any, separator: str) -> List[Any]: + try: + lst = list(map(vtype, map(str.strip, value.split(separator)))) + except BaseException: + sys.exit(f"Failed to parse '--{attr}'") + + return lst + + def normal(self, attr: str) -> None: + value = getattr(self.args, attr) + + if value is not None: + self.set(attr, value) + + def commas(self, attr: str, vtype: Any, allow_string: bool = False, is_tuple: bool = False) -> None: + value = getattr(self.args, attr) + + if value is not None: + if ("," in value) or (not allow_string): + lst = self.get_list(attr, value, vtype, ",") + + if is_tuple: + self.set(attr, tuple(lst)) + else: + self.set(attr, lst) + else: + self.set(attr, value) + + def path(self, attr: str) -> None: + value = getattr(self.args, attr) + + if value is not None: + self.set(attr, ArgParser.resolve_path(value)) + + # Allow p1 and m1 formats + def number(self, attr: str, vtype: Any, allow_zero: bool = False, duration: bool = False) -> None: + value = getattr(self.args, attr) + + if value is None: + return + + value = str(value) + num = value + op = "" + + if value.startswith("p") or value.startswith("m"): + op = value[0] + num = value[1:] + + if duration: + num = self.parse_duration(num) + + try: + if vtype == int: + num = int(num) + elif vtype == float: + num = float(num) + except BaseException: + sys.exit(f"Failed to parse '{attr}'") + + default = self.get(attr) + + if op == "p": + num = default + num + elif op == "m": + num = default - num + + err = f"Value for '{attr}' is too low" + + if num == 0: + if not allow_zero: + sys.exit(err) + elif num < 0: + sys.exit(err) + + self.set(attr, num) + + def get(self, attr: str) -> Any: + return getattr(self.obj, attr) + + def set(self, attr: str, value: Any) -> None: + setattr(self.obj, attr, value) + + def parse_duration(self, time_string: str) -> str: + match = re.match(r"(\d+(\.\d+)?)([smh]+)", time_string) + + if match: + value, _, unit = match.groups() + value = float(value) + + if unit == "ms": + time_string = str(int(value)) + elif unit == "s": + time_string = str(int(value * 1000)) + elif unit == "m": + time_string = str(int(value * 60 * 1000)) + elif unit == "h": + time_string = str(int(value * 60 * 60 * 1000)) + + return time_string + + @staticmethod + def dash_to_under(s: str) -> str: + return s.replace("-", "_") + + @staticmethod + def under_to_dash(s: str) -> str: + return s.replace("_", "-") + + @staticmethod + def full_path(path: Union[Path, str]) -> Path: + return Path(path).expanduser().resolve() + + @staticmethod + def resolve_path(path: Union[Path, str]) -> Path: + path = ArgParser.full_path(path) + + if path.is_absolute(): + return ArgParser.full_path(path) + else: + return ArgParser.full_path(Path(Path.cwd(), path)) diff --git a/gifmaker/config.py b/gifmaker/config.py new file mode 100644 index 0000000..5928e87 --- /dev/null +++ b/gifmaker/config.py @@ -0,0 +1,457 @@ +# Modules +from . import utils +from .argparser import ArgParser + +# Standard +import json +import codecs +import textwrap +import random +from argparse import Namespace +from typing import List, Union, Dict, Tuple, Any +from PIL import ImageFont # type: ignore +from pathlib import Path + + +class Configuration: + # Class to hold all the configuration of the program + # It also interfaces with ArgParser and processes further + + def __init__(self) -> None: + self.delay = 700 + self.input: Union[Path, None] = None + self.output: Union[Path, None] = None + self.randomfile: Union[Path, None] = None + self.frames: Union[int, None] = None + self.left: Union[int, None] = None + self.right: Union[int, None] = None + self.top: Union[int, None] = None + self.bottom: Union[int, None] = None + self.width: Union[int, None] = None + self.height: Union[int, None] = None + self.words: List[str] = [] + self.wordfile: Union[Path, None] = None + self.randomlist: List[str] = [] + self.separator = ";" + self.format = "gif" + self.order = "random" + self.font = "sans" + self.fontsize = 60 + self.fontcolor: Union[Tuple[int, int, int], str] = (255, 255, 255) + self.bgcolor: Union[Tuple[int, int, int], str, None] = None + self.outline: Union[Tuple[int, int, int], str, None] = None + self.outlinewidth = 2 + self.no_outline_left = False + self.no_outline_right = False + self.no_outline_top = False + self.no_outline_bottom = False + self.opacity = 0.66 + self.padding = 20 + self.radius = 0 + self.align = "center" + self.script: Union[Path, None] = None + self.loop = 0 + self.remake = False + self.filterlist: List[str] = [] + self.filteropts: List[str] = [] + self.filter = "none" + self.framelist: List[str] = [] + self.frameopts: List[str] = [] + self.repeatrandom = False + self.repeatfilter = False + self.fillwords = False + self.fillgen = False + self.nogrow = False + self.wrap = 35 + self.nowrap = False + self.verbose = False + self.descender = False + self.seed: Union[int, None] = None + self.frameseed: Union[int, None] = None + self.wordseed: Union[int, None] = None + self.filterseed: Union[int, None] = None + self.colorseed: Union[int, None] = None + self.deepfry = False + self.vertical = False + self.horizontal = False + self.word_color_mode = "normal" + + class Internal: + # The path where the main file is located + root: Union[Path, None] = None + + # The path where the fonts are located + fontspath: Union[Path, None] = None + + # List to keep track of used random words + randwords: List[str] = [] + + # Counter for [count] + wordcount = 0 + + # Last font color used + last_fontcolor: Union[Tuple[int, int, int], None] = None + + # Random generators + random_frames: Union[random.Random, None] = None + random_words: Union[random.Random, None] = None + random_filters: Union[random.Random, None] = None + random_colors: Union[random.Random, None] = None + + # Last word printed + last_words = "" + + # Last colors used + last_colors: List[Tuple[int, int, int]] = [] + + # Response string + response = "" + + # Strings for info + rgbstr = "3 numbers from 0 to 255, separated by commas. Names like 'yellow' are also supported" + commastr = "Separated by commas" + + # Information about the program + manifest: Dict[str, str] + + # Argument definitions + arguments: Dict[str, Any] = { + "input": {"type": str, "help": "Path to a video or image file. Separated by commas"}, + "words": {"type": str, "help": "Lines of words to use on the frames"}, + "wordfile": {"type": str, "help": "Path of file with word lines"}, + "delay": {"type": str, "help": "The delay in ms between frames"}, + "left": {"type": int, "help": "Left padding"}, + "right": {"type": int, "help": "Right padding"}, + "top": {"type": int, "help": "Top padding"}, + "bottom": {"type": int, "help": "Bottom padding"}, + "width": {"type": int, "help": "Width to resize the frames"}, + "height": {"type": int, "help": "Height to resize the frames"}, + "frames": {"type": int, "help": "Number of frames to use if no words are provided"}, + "output": {"type": str, "help": "Output directory to save the file"}, + "format": {"type": str, "choices": ["gif", "webm", "mp4", "jpg", "png"], "help": "The format of the output file"}, + "separator": {"type": str, "help": "Character to use as the separator"}, + "order": {"type": str, "choices": ["random", "normal"], "help": "The order to use when extracting the frames"}, + "font": {"type": str, "help": "The font to use for the text"}, + "fontsize": {"type": str, "help": "The size of the font"}, + "fontcolor": {"type": str, "help": f"Text color. {rgbstr}"}, + "bgcolor": {"type": str, "help": f"Add a background rectangle for the text with this color. {rgbstr}"}, + "outline": {"type": str, "help": f"Add an outline around the text with this color. {rgbstr}"}, + "outlinewidth": {"type": str, "help": "The width of the outline"}, + "opacity": {"type": str, "help": "The opacity of the background rectangle"}, + "padding": {"type": str, "help": "The padding of the background rectangle"}, + "radius": {"type": str, "help": "The border radius of the background"}, + "align": {"type": str, "choices": ["left", "center", "right"], "help": "How to align the center when there are multiple lines"}, + "randomlist": {"type": str, "help": "List of words to consider for random words"}, + "randomfile": {"type": str, "help": "Path to a list of words to consider for random words"}, + "script": {"type": str, "help": "Path to a TOML file that defines the arguments to use"}, + "loop": {"type": int, "help": "How to loop a gif render"}, + "remake": {"action": "store_true", "help": "Re-render the frames to change the width or delay"}, + "filter": {"type": str, + "help": "Color filter to apply to frames", + "choices": ["hue1", "hue2", "hue3", "hue4", "hue5", "hue6", "hue7", "hue8", + "anyhue", "anyhue2", "gray", "grey", "blur", "invert", "random", "random2", "none"]}, + "filterlist": {"type": str, "help": f"Filters to use per frame. {commastr}"}, + "filteropts": {"type": str, "help": f"The list of allowed filters when picking randomly. {commastr}"}, + "framelist": {"type": str, "help": f"List of frame indices to use. {commastr}"}, + "frameopts": {"type": str, "help": f"The list of allowed frame indices when picking randomly. {commastr}"}, + "repeatrandom": {"action": "store_true", "help": "Repeating random words is ok"}, + "repeatfilter": {"action": "store_true", "help": "Repeating random filters is ok"}, + "fillwords": {"action": "store_true", "help": "Fill the rest of the frames with the last word line"}, + "fillgen": {"action": "store_true", "help": "Generate the first line of words till the end of frames"}, + "nogrow": {"action": "store_true", "help": "Don't resize if the frames are going to be bigger than the original"}, + "wrap": {"type": str, "help": "Split line if it exceeds this char length"}, + "nowrap": {"action": "store_true", "help": "Don't wrap lines"}, + "no_outline_left": {"action": "store_true", "help": "Don't draw the left outline"}, + "no_outline_right": {"action": "store_true", "help": "Don't draw the right outline"}, + "no_outline_top": {"action": "store_true", "help": "Don't draw the top outline"}, + "no_outline_bottom": {"action": "store_true", "help": "Don't draw the bottom outline"}, + "verbose": {"action": "store_true", "help": "Print more information like time performance"}, + "descender": {"action": "store_true", "help": "Apply the height of the descender to the bottom padding of the text"}, + "seed": {"type": int, "help": "Seed to use when using any random value"}, + "frameseed": {"type": int, "help": "Seed to use when picking frames"}, + "wordseed": {"type": int, "help": "Seed to use when picking words"}, + "filterseed": {"type": int, "help": "Seed to use when picking filters"}, + "colorseed": {"type": int, "help": "Seed to use when picking colors"}, + "deepfry": {"action": "store_true", "help": "Compress the frames heavily"}, + "vertical": {"action": "store_true", "help": "Append images vertically"}, + "horizontal": {"action": "store_true", "help": "Append images horizontally"}, + "arguments": {"action": "store_true", "help": "Print argument information"}, + "word-color-mode": {"type": str, "choices": ["normal", "random"], "help": "Color mode for words"}, + } + + aliases = { + "input": ["--i", "-i"], + "output": ["--o", "-o"], + } + + def parse_args(self) -> None: + v_title = self.Internal.manifest["title"] + v_version = self.Internal.manifest["version"] + v_info = f"{v_title} {v_version}" + + self.Internal.arguments["version"] = {"action": "version", + "help": "Check the version of the program", "version": v_info} + + ap = ArgParser(self.Internal.manifest["title"], self.Internal.arguments, self.Internal.aliases, self) + + # --- + + if getattr(ap.args, "arguments"): + self.Internal.response = self.arguments_json() + return + + # --- + + ap.path("script") + self.check_script(ap.args) + + # --- + + string_arg = ap.string_arg() + + if string_arg: + ap.args.words = string_arg + + # --- + + ap.number("fontsize", int) + ap.number("delay", int, duration=True) + ap.number("opacity", float, allow_zero=True) + ap.number("padding", int, allow_zero=True) + ap.number("radius", int, allow_zero=True) + ap.number("outlinewidth", int) + ap.number("wrap", int) + + # --- + + ap.commas("framelist", int) + ap.commas("frameopts", int) + ap.commas("filterlist", str) + ap.commas("filteropts", str) + ap.commas("fontcolor", int, allow_string=True, is_tuple=True) + ap.commas("bgcolor", int, allow_string=True, is_tuple=True) + ap.commas("outline", int, allow_string=True, is_tuple=True) + + # --- + + normals = ["left", "right", "top", "bottom", "width", "height", "format", "order", + "font", "frames", "loop", "separator", "filter", "remake", "repeatrandom", + "repeatfilter", "fillwords", "nogrow", "align", "nowrap", "no_outline_left", + "no_outline_right", "no_outline_top", "no_outline_bottom", "verbose", "fillgen", + "descender", "seed", "frameseed", "wordseed", "filterseed", "colorseed", + "deepfry", "vertical", "horizontal", "word_color_mode"] + + for normal in normals: + ap.normal(normal) + + # --- + + paths = ["input", "output", "wordfile", "randomfile"] + + for path in paths: + ap.path(path) + + # --- + + self.fill_paths() + self.check_config(ap.args) + + def check_config(self, args: Namespace) -> None: + def separate(value: str) -> List[str]: + return [codecs.decode(utils.clean_lines(item), "unicode-escape") + for item in value.split(self.separator)] + + if not self.input: + utils.exit("You need to provide an input file") + return + + if not self.output: + utils.exit("You need to provide an output path") + return + + if (not self.input.exists()) or (not self.input.is_file()): + utils.exit("Input file does not exist") + return + + if self.wordfile: + if not self.wordfile.exists() or not self.wordfile.is_file(): + utils.exit("Word file does not exist") + return + + self.read_wordfile() + elif args.words: + self.words = separate(args.words) + + if args.randomlist: + self.randomlist = separate(args.randomlist) + + assert isinstance(self.randomfile, Path) + + if not self.randomfile.exists() or not self.randomfile.is_file(): + utils.exit("Word file does not exist") + return + + if not self.nowrap: + self.wrap_text("words") + + if self.vertical or self.horizontal: + if self.format not in ["jpg", "png"]: + self.format = "png" + + self.set_random() + + def wrap_text(self, attr: str) -> None: + lines = getattr(self, attr) + + if not lines: + return + + new_lines = [] + + for line in lines: + lines = line.split("\n") + wrapped = [textwrap.fill(x, self.wrap) for x in lines] + new_lines.append("\n".join(wrapped)) + + setattr(self, attr, new_lines) + + def check_script(self, args: Namespace) -> None: + if self.script is None: + return + + data = utils.read_toml(Path(self.script)) + + if data: + for key in data: + k = ArgParser.dash_to_under(key) + setattr(args, k, data[key]) + + def read_wordfile(self) -> None: + if self.wordfile: + self.words = self.wordfile.read_text().splitlines() + + def fill_root(self, main_file: str) -> None: + self.Internal.root = Path(main_file).parent + self.Internal.fontspath = ArgParser.full_path(Path(self.Internal.root, "fonts")) + + def get_manifest(self): + with open(Path(self.Internal.root, "manifest.json"), "r") as file: + self.Internal.manifest = json.load(file) + + def fill_paths(self) -> None: + assert isinstance(self.Internal.root, Path) + + if not self.randomfile: + self.randomfile = ArgParser.full_path(Path(self.Internal.root, "nouns.txt")) + + def get_color(self, attr: str) -> Tuple[int, int, int]: + value = getattr(self, attr) + rgb: Union[Tuple[int, int, int], None] = None + set_config = False + + if isinstance(value, str): + if value == "light": + rgb = utils.random_light() + set_config = True + elif value == "light2": + rgb = utils.random_light() + elif value == "dark": + rgb = utils.random_dark() + set_config = True + elif value == "dark2": + rgb = utils.random_dark() + elif (value == "font") and isinstance(self.Internal.last_fontcolor, tuple): + rgb = self.Internal.last_fontcolor + elif value == "lightfont" and isinstance(self.Internal.last_fontcolor, tuple): + rgb = utils.light_contrast(self.Internal.last_fontcolor) + set_config = True + elif value == "lightfont2" and isinstance(self.Internal.last_fontcolor, tuple): + rgb = utils.light_contrast(self.Internal.last_fontcolor) + elif value == "darkfont" and isinstance(self.Internal.last_fontcolor, tuple): + rgb = utils.dark_contrast(self.Internal.last_fontcolor) + set_config = True + elif value == "darkfont2" and isinstance(self.Internal.last_fontcolor, tuple): + rgb = utils.dark_contrast(self.Internal.last_fontcolor) + else: + rgb = utils.color_name(value) + elif isinstance(value, (list, tuple)) and len(value) >= 3: + rgb = (value[0], value[1], value[2]) + + ans = rgb or (100, 100, 100) + + if attr == "fontcolor": + self.Internal.last_fontcolor = ans + + if set_config: + setattr(self, attr, rgb) + + return ans + + def set_random(self) -> None: + def set_rng(attr: str, rng_name: str) -> None: + value = getattr(self, attr) + + if value is not None: + rand = random.Random(value) + elif self.seed is not None: + rand = random.Random(self.seed) + else: + rand = random.Random() + + setattr(self.Internal, rng_name, rand) + + set_rng("frameseed", "random_frames") + set_rng("wordseed", "random_words") + set_rng("filterseed", "random_filters") + set_rng("colorseed", "random_colors") + + def get_font(self) -> ImageFont.FreeTypeFont: + fonts = { + "sans": "Roboto-Regular.ttf", + "serif": "RobotoSerif-Regular.ttf", + "mono": "RobotoMono-Regular.ttf", + "italic": "Roboto-Italic.ttf", + "bold": "Roboto-Bold.ttf", + "cursive": "Pacifico-Regular.ttf", + "comic": "ComicNeue-Regular.ttf", + "nova": "NovaSquare-Regular.ttf", + } + + def random_font() -> str: + return random.choice(list(fonts.keys())) + + if self.font == "random": + font = random_font() + font_file = fonts[font] + self.font = font + elif self.font == "random2": + font = random_font() + font_file = fonts[font] + elif ".ttf" in self.font: + font_file = str(ArgParser.resolve_path(Path(self.font))) + elif self.font in fonts: + font_file = fonts[self.font] + else: + font_file = fonts["sans"] + + assert isinstance(self.Internal.fontspath, Path) + path = Path(self.Internal.fontspath, font_file) + return ImageFont.truetype(path, size=self.fontsize) + + def arguments_json(self) -> str: + filter_out = ["string_arg", "arguments"] + + new_dict = { + key: {k: v for k, v in value.items() if (k != "type" and k != "action")} + for key, value in self.Internal.arguments.items() if key not in filter_out + } + + for key in new_dict: + if hasattr(self, key): + new_dict[key]["value"] = getattr(self, key) + + return json.dumps(new_dict) + + +# Main configuration object +config = Configuration() diff --git a/gifmaker/fonts/ComicNeue-Regular.ttf b/gifmaker/fonts/ComicNeue-Regular.ttf new file mode 100644 index 0000000..d454f46 Binary files /dev/null and b/gifmaker/fonts/ComicNeue-Regular.ttf differ diff --git a/gifmaker/fonts/NovaSquare-Regular.ttf b/gifmaker/fonts/NovaSquare-Regular.ttf new file mode 100644 index 0000000..3b0f838 Binary files /dev/null and b/gifmaker/fonts/NovaSquare-Regular.ttf differ diff --git a/gifmaker/fonts/Pacifico-Regular.ttf b/gifmaker/fonts/Pacifico-Regular.ttf new file mode 100644 index 0000000..e7def95 Binary files /dev/null and b/gifmaker/fonts/Pacifico-Regular.ttf differ diff --git a/gifmaker/fonts/Roboto-Bold.ttf b/gifmaker/fonts/Roboto-Bold.ttf new file mode 100644 index 0000000..43da14d Binary files /dev/null and b/gifmaker/fonts/Roboto-Bold.ttf differ diff --git a/gifmaker/fonts/Roboto-Italic.ttf b/gifmaker/fonts/Roboto-Italic.ttf new file mode 100644 index 0000000..1b5eaa3 Binary files /dev/null and b/gifmaker/fonts/Roboto-Italic.ttf differ diff --git a/gifmaker/fonts/Roboto-Regular.ttf b/gifmaker/fonts/Roboto-Regular.ttf new file mode 100644 index 0000000..ddf4bfa Binary files /dev/null and b/gifmaker/fonts/Roboto-Regular.ttf differ diff --git a/gifmaker/fonts/RobotoMono-Regular.ttf b/gifmaker/fonts/RobotoMono-Regular.ttf new file mode 100644 index 0000000..6df2b25 Binary files /dev/null and b/gifmaker/fonts/RobotoMono-Regular.ttf differ diff --git a/gifmaker/fonts/RobotoSerif-Regular.ttf b/gifmaker/fonts/RobotoSerif-Regular.ttf new file mode 100644 index 0000000..48773ae Binary files /dev/null and b/gifmaker/fonts/RobotoSerif-Regular.ttf differ diff --git a/gifmaker/main.py b/gifmaker/main.py new file mode 100644 index 0000000..46d5352 --- /dev/null +++ b/gifmaker/main.py @@ -0,0 +1,102 @@ +# Modules +from .config import config +from . import words +from . import media +from . import utils + +# Standard +import time + +# Performance +last_time = 0.0 + + +def get_time() -> float: + return time.time() + + +def show_seconds(name: str, start: float, end: float) -> None: + num = round(start - end, 3) + label = utils.colortext("blue", name) + utils.msg(f"{label}: {num} seconds") + + +def check_time(name: str) -> None: + if not config.verbose: + return + + global last_time + now = get_time() + show_seconds(name, now, last_time) + last_time = now + + +def main() -> None: + global last_time + start_time = get_time() + last_time = start_time + + # Fill some paths based on root path + config.fill_root(__file__) + config.get_manifest() + + # Check the provided arguments + config.parse_args() + check_time("Parse Args") + + # Print response if not empty then exit + if config.Internal.response: + utils.respond(config.Internal.response) + return + + # Process words + words.process_words() + check_time("Process Words") + + # Extract the required frames from the file + frames = media.get_frames() + check_time("Get Frames") + + if not frames: + utils.msg("No frames") + return + + if config.remake: + # Only resize the frames + frames = media.resize_frames(frames) + check_time("Resize Frames") + else: + # Apply filters to all the frames + frames = media.apply_filters(frames) + check_time("Apply Filters") + + # Deep Fry frames if enabled + frames = media.deep_fry(frames) + check_time("Deep Fry") + + # Add the words to the frames + frames = media.word_frames(frames) + check_time("Word Frames") + + # Resize the frames based on width + frames = media.resize_frames(frames) + check_time("Resize Frames") + + # Render and save the output + output = media.render(frames) + check_time("Render") + + # End stats + if config.verbose: + utils.msg("") + label = utils.colortext("blue", "Frames") + utils.msg(f"{label}: {len(frames)}") + show_seconds("Total", get_time(), start_time) + utils.msg("") + + # Print the output path as the response + utils.respond(str(output)) + + +if __name__ == "__main__": + main() diff --git a/gifmaker/manifest.json b/gifmaker/manifest.json new file mode 100644 index 0000000..49caaed --- /dev/null +++ b/gifmaker/manifest.json @@ -0,0 +1,7 @@ +{ + "version": "1.0.0", + "title": "Gifmaker", + "program": "gifmaker", + "license": "Custom", + "author": "madprops" +} \ No newline at end of file diff --git a/gifmaker/media.py b/gifmaker/media.py new file mode 100644 index 0000000..aacf0e5 --- /dev/null +++ b/gifmaker/media.py @@ -0,0 +1,511 @@ +# Modules +from .config import config +from . import utils +from . import words + +# Libraries +import imageio # type: ignore +import numpy as np +import numpy.typing as npt +from PIL import Image, ImageFilter, ImageOps, ImageDraw, ImageFont # type: ignore + +# Standard +import random +from io import BytesIO +from pathlib import Path +from typing import List, Dict, Union + + +def get_frames() -> List[Image.Image]: + count_frames() + + assert isinstance(config.frames, int) + assert isinstance(config.input, Path) + + frames = [] + path = config.input + ext = utils.get_extension(path) + + if (ext == "jpg") or (ext == "jpeg") or (ext == "png"): + reader = imageio.imread(path) + max_frames = 1 + mode = "image" + elif ext == "gif": + reader = imageio.mimread(path) + max_frames = len(reader) + mode = "gif" + else: + reader = imageio.get_reader(path) + max_frames = reader.count_frames() + mode = "video" + + num_frames = max_frames if config.remake else config.frames + order = "normal" if (config.remake or config.framelist) else config.order + framelist = config.framelist if config.framelist else range(max_frames) + current = 0 + + # Sometimes it fails to read the frames so it needs more tries + for _ in range(0, num_frames * 25): + if order == "normal": + index = framelist[current] + elif order == "random": + if config.frameopts: + index = random.choice(config.frameopts) + else: + assert isinstance(config.Internal.random_frames, random.Random) + index = config.Internal.random_frames.randint(0, len(framelist)) + + try: + if mode == "image": + img = reader + elif mode == "video": + img = reader.get_data(index) + elif mode == "gif": + img = reader[index] + + frames.append(to_pillow(img)) + except Exception as e: + pass + + if len(frames) == num_frames: + break + + if order == "normal": + current += 1 + + if current >= len(framelist): + current = 0 + + if mode == "video": + reader.close() + + return frames + + +def draw_text(frame: Image.Image, line: str) -> Image.Image: + draw = ImageDraw.Draw(frame, "RGBA") + font = config.get_font() + data = get_text_data(frame, line, font) + get_colors = True + + if line == config.Internal.last_words: + if config.word_color_mode == "normal": + get_colors = False + + if not config.Internal.last_colors: + get_colors = True + + if get_colors: + fontcolor = config.get_color("fontcolor") + bgcolor = config.get_color("bgcolor") + ocolor = config.get_color("outline") + else: + fontcolor = config.Internal.last_colors[0] + bgcolor = config.Internal.last_colors[1] + ocolor = config.Internal.last_colors[2] + + config.Internal.last_colors = [fontcolor, bgcolor, ocolor] + config.Internal.last_words = line + + min_x = data["min_x"] + min_y = data["min_y"] + max_x = data["max_x"] + max_y = data["max_y"] + + min_x_p = min_x - config.padding + min_y_p = min_y - config.padding + data["ascender"] + max_x_p = max_x + config.padding + max_y_p = max_y + config.padding + + if not config.descender: + max_y_p -= data["descender"] + + if config.bgcolor: + alpha = utils.add_alpha(bgcolor, config.opacity) + rect_pos = (min_x_p, min_y_p), (max_x_p, max_y_p) + draw.rounded_rectangle(rect_pos, fill=alpha, radius=config.radius) + + if config.outline: + owidth = config.outlinewidth + owidth = utils.divisible(owidth, 2) + halfwidth = owidth / 2 + + if not config.no_outline_top: + draw.line([(min_x_p, min_y_p - halfwidth), + (max_x_p, min_y_p - halfwidth)], fill=ocolor, width=owidth) + + if not config.no_outline_left: + draw.line([(min_x_p - halfwidth, min_y_p - owidth + 1), + (min_x_p - halfwidth, max_y_p + owidth)], fill=ocolor, width=owidth) + + if not config.no_outline_bottom: + draw.line([(min_x_p, max_y_p + halfwidth), + (max_x_p, max_y_p + halfwidth)], fill=ocolor, width=owidth) + + if not config.no_outline_right: + draw.line([(max_x_p + halfwidth, min_y_p - owidth + 1), + (max_x_p + halfwidth, max_y_p + owidth)], fill=ocolor, width=owidth) + + draw.multiline_text((min_x, min_y), line, fill=fontcolor, font=font, align=config.align) + + return frame + + +def get_text_data(frame: Image.Image, line: str, font: ImageFont.FreeTypeFont) -> Dict[str, int]: + draw = ImageDraw.Draw(frame) + width, height = frame.size + + p_top = config.top + p_bottom = config.bottom + p_left = config.left + p_right = config.right + + b_left, b_top, b_right, b_bottom = draw.multiline_textbbox((0, 0), line, font=font) + ascender = font.getbbox(line.split("\n")[0])[1] + descender = font.getbbox(line.split("\n")[-1], anchor="ls")[3] + + # Left + if (p_left is not None) and (p_left >= 0): + text_x = p_left + # Right + elif (p_right is not None) and (p_right >= 0): + text_x = width - b_right - p_right + else: + # Center Horizontal + text_x = (width - b_right) // 2 + + # Negatives Horizontal + if (p_left is not None) and (p_left < 0): + text_x += p_left + elif (p_right is not None) and (p_right < 0): + text_x -= p_right + + # Top + if (p_top is not None) and (p_top >= 0): + text_y = p_top - ascender + # Bottom + elif (p_bottom is not None) and (p_bottom >= 0): + if not config.descender: + text_y = height - b_bottom + descender - p_bottom + else: + text_y = height - b_bottom - p_bottom + else: + # Center Vertical + if not config.descender: + text_y = (height - b_bottom + descender - ascender - (config.padding / 2)) // 2 + else: + text_y = (height - b_bottom - ascender) // 2 + + # Negatives Vertical + if (p_top is not None) and (p_top < 0): + text_y += p_top + elif (p_bottom is not None) and (p_bottom < 0): + text_y -= p_bottom + + ans = { + "min_x": text_x, + "min_y": text_y, + "max_x": text_x + b_right, + "max_y": text_y + b_bottom, + "ascender": ascender, + "descender": descender, + } + + return ans + + +def word_frames(frames: List[Image.Image]) -> List[Image.Image]: + if not config.words: + return frames + + worded = [] + num_words = len(config.words) + + for i, frame in enumerate(frames): + if config.fillgen: + line = words.generate(config.words[0], False)[0] + else: + index = i + + if index >= num_words: + if config.fillwords: + index = num_words - 1 + else: + worded.append(frame) + continue + + line = config.words[index] + + if line: + frame = draw_text(frame, line) + + worded.append(frame) + + return worded + + +def resize_frames(frames: List[Image.Image]) -> List[Image.Image]: + if (not config.width) and (not config.height): + return frames + + new_frames = [] + new_width = config.width + new_height = config.height + w, h = frames[0].size + ratio = w / h + + if new_width and (not new_height): + new_height = int(new_width / ratio) + elif new_height and (not new_width): + new_width = int(new_height * ratio) + + assert isinstance(new_width, int) + assert isinstance(new_height, int) + + if (new_width <= 0) or (new_height <= 0): + return frames + + if config.nogrow: + if (new_width > w) or (new_height > h): + return frames + + size = (new_width, new_height) + + for frame in frames: + new_frames.append(frame.resize(size)) + + return new_frames + + +def render(frames: List[Image.Image]) -> Union[Path, None]: + assert isinstance(config.output, Path) + ext = utils.get_extension(config.output) + fmt = ext if ext else config.format + + if config.vertical or config.horizontal: + if fmt not in ["jpg", "png"]: + fmt = "png" + + def makedir(path: Path) -> None: + try: + path.mkdir(parents=False, exist_ok=True) + except BaseException: + utils.exit("Failed to make output directory") + return + + if ext: + makedir(config.output.parent) + output = config.output + else: + makedir(config.output) + rand = utils.random_string() + file_name = f"{rand}.{config.format}" + output = Path(config.output, file_name) + + if config.vertical: + frames = [append_frames(frames, "vertical")] + + if config.horizontal: + frames = [append_frames(frames, "horizontal")] + + if fmt == "gif": + frames = to_array_all(frames) + loop = None if config.loop <= -1 else config.loop + imageio.mimsave(output, frames, format="GIF", duration=config.delay, loop=loop) + elif fmt == "png": + frame = frames[0] + frame = to_array(frame) + imageio.imsave(output, frame, format="PNG") + elif fmt == "jpg": + frame = frames[0] + frame = frame.convert("RGB") + frame = to_array(frame) + imageio.imsave(output, frame, format="JPEG") + elif fmt == "mp4" or fmt == "webm": + frames = to_array_all(frames) + fps = 1000 / config.delay + + if fmt == "mp4": + codec = "libx264" + elif fmt == "webm": + codec = "libvpx" + + writer = imageio.get_writer(output, fps=fps, codec=codec) + + for frame in frames: + writer.append_data(frame) + + writer.close() + else: + utils.exit("Invalid format") + return None + + return output + + +def apply_filters(frames: List[Image.Image]) -> List[Image.Image]: + if (config.filter == "none") and (not config.filterlist): + return frames + + new_frames = [] + + min_hue = 1 + max_hue = 8 + hue_step = 20 + + hue_filters = [f"hue{i}" for i in range(min_hue, max_hue + 1)] + all_filters = hue_filters + ["gray", "blur", "invert", "none"] + filters = [] + + def get_filters() -> None: + nonlocal filters + + if config.filteropts: + filters = config.filteropts.copy() + elif config.filter.startswith("anyhue"): + filters = hue_filters.copy() + else: + filters = all_filters.copy() + + def random_filter() -> str: + assert isinstance(config.Internal.random_filters, random.Random) + filtr = config.Internal.random_filters.choice(filters) + + if not config.repeatfilter: + remove_filter(filtr) + + return filtr + + def remove_filter(filtr: str) -> None: + if filtr in filters: + filters.remove(filtr) + + if not filters: + get_filters() + + def change_hue(frame: Image.Image, n: int) -> Image.Image: + hsv = frame.convert("HSV") + h, s, v = hsv.split() + h = h.point(lambda i: (i + hue_step * n) % 180) + new_frame = Image.merge("HSV", (h, s, v)) + + if frame.mode in ["RGBA", "LA"]: + new_frame = Image.merge("RGBA", (new_frame.split() + (frame.split()[3],))) + else: + new_frame = new_frame.convert("RGB") + + return new_frame + + get_filters() + filtr = config.filter + + if not config.filterlist: + if config.filter == "random" or config.filter == "anyhue": + filtr = random_filter() + + for frame in frames: + if config.filterlist: + filtr = config.filterlist.pop(0) + elif config.filter == "random2" or config.filter == "anyhue2": + filtr = random_filter() + + new_frame = None + + if filtr.startswith("hue"): + for n in range(min_hue, max_hue + 1): + if filtr == f"hue{n}": + new_frame = change_hue(frame, n) + break + + if new_frame is None: + if filtr in ["gray", "grey"]: + if frame.mode in ["RGBA", "LA"]: + r, g, b, a = frame.split() + gray_img = ImageOps.grayscale(frame.convert("RGB")) + rgb_gray = ImageOps.colorize(gray_img, "black", "white") + new_frame = Image.merge("RGBA", (rgb_gray.split() + (a,))) + else: + new_frame = ImageOps.colorize(frame.convert("L"), "black", "white") + elif filtr == "blur": + new_frame = frame.filter(ImageFilter.BLUR) + elif filtr == "invert": + new_frame = ImageOps.invert(frame.convert("RGB")) + else: + new_frame = frame + + new_frames.append(new_frame) + + return new_frames + + +def count_frames() -> None: + if config.frames is not None: + return + + if config.framelist: + config.frames = len(config.framelist) + elif config.words: + num_words = len(config.words) + config.frames = num_words if num_words > 0 else config.frames + else: + config.frames = 3 + + +def rgb_or_rgba(array: npt.NDArray[np.float64]) -> str: + if array.shape[2] == 4: + return "RGBA" + else: + return "RGB" + + +def to_pillow(array: npt.NDArray[np.float64]) -> Image.Image: + mode = rgb_or_rgba(array) + return Image.fromarray(array, mode=mode) + + +def to_array(frame: Image.Image) -> npt.NDArray[np.float64]: + return np.array(frame) + + +def to_array_all(frames: List[Image.Image]) -> List[npt.NDArray[np.float64]]: + return [to_array(frame) for frame in frames] + + +def deep_fry(frames: List[Image.Image]) -> List[Image.Image]: + if not config.deepfry: + return frames + + quality = 3 + new_frames = [] + + for frame in frames: + stream = BytesIO() + frame = frame.convert("RGB") + frame.save(stream, format="JPEG", quality=quality) + new_frames.append(Image.open(stream)) + + return new_frames + + +def append_frames(frames: List[Image.Image], mode: str) -> Image.Image: + widths, heights = zip(*(i.size for i in frames)) + + if mode == "vertical": + total_width = max(widths) + total_height = sum(heights) + elif mode == "horizontal": + total_width = sum(widths) + total_height = max(heights) + + new_frame = Image.new("RGB", (total_width, total_height)) + offset = 0 + + for frame in frames: + if mode == "vertical": + new_frame.paste(frame, (0, offset)) + offset += frame.size[1] + elif mode == "horizontal": + new_frame.paste(frame, (offset, 0)) + offset += frame.size[0] + + return new_frame diff --git a/gifmaker/nouns.txt b/gifmaker/nouns.txt new file mode 100644 index 0000000..5e43bf2 --- /dev/null +++ b/gifmaker/nouns.txt @@ -0,0 +1,20000 @@ +time +people +way +life +years +world +man +state +work +system +new +part +number +case +government +day +states +men +children +women +example +power +information +development +order +j. +group +place +use +data +law +god +water +university +war +point +year +figure +process +fact +york +family +school +form +house +a. +others +end +chapter +research +history +home +table +control +hand +value +course +study +area +united +book +things +period +press +times +society +country +problem +something +nature +level +person +body +business +education +company +city +john +m. +court +problems +effect +words +policy +section +days +name +child +interest +service +side +action +analysis +line +rate +head +terms +question +members +land +age +party +view +position +c. +sense +type +london +nothing +cases +studies +father +death +community +health +r. +groups +results +language +conditions +act +production +u.s. +model +change +students +mother +knowledge +century +theory +church +field +s. +program +role +class +systems +room +changes +experience +woman +mind +structure +money +result +kind +matter +management +air +eyes +areas +evidence +function +word +b. +growth +d. +office +market +services +e. +c +method +energy +percent +h. +art +values +countries +night +reason +population +treatment +effects +ii +thing +force +rights +mr. +science +trade +food +situation +king +care +support +x +activity +face +relationship +material +idea +movement +means +p. +president +patients +love +source +america +b +basis +surface +s +paper +l. +heart +w. +culture +space +light +activities +story +practice +amount +property +approach +national +size +organization +questions +report +union +department +income +g. +books +behavior +plan +ways +capital +addition +price +series +anything +response +workers +blood +cells +today +journal +factors +design +account +attention +methods +hands +industry +moment +cost +need +performance +committee +relations +months +fig +types +decision +son +test +forms +pressure +levels +job +purpose +term +center +range +issues +quality +letter +hours +parts +lines +south +association +difference +project +distribution +lord +character +college +disease +resources +parents +river +wife +england +product +labor +text +tax +board +general +region +loss +stage +security +right +authority +ground +music +town +patient +india +council +influence +f. +subject +solution +products +army +door +points +issue +william +feet +review +rule +elements +discussion +bank +forces +training +cell +respect +species +importance +friends +works +rules +everything +application +degree +events +washington +environment +voice +north +street +differences +europe +member +schools +west +march +condition +materials +volume +cent +object +one +ideas +sea +truth +costs +individuals +may +earth +presence +june +status +james +p +building +persons +programs +road +vol +unit +literature +american +administration +direction +temperature +spirit +list +technology +image +morning +operation +extent +m +factor +statement +oil +set +e +economy +concept +reference +ability +george +expression +page +risk +rates +july +student +congress +success +increase +staff +france +numbers +agreement +j +fire +author +t +china +friend +rest +peace +laws +commission +length +pattern +sources +someone +april +manner +task +date +interests +site +minutes +computer +functions +flow +st. +freedom +processes +politics +t. +cause +relation +choice +sir +note +principle +context +library +understanding +communication +existence +dr. +future +justice +principles +meaning +reasons +construction +phase +article +wall +failure +parties +step +strength +plant +opinion +instance +box +needs +nation +week +companies +weight +code +paul +robert +lot +police +car +distance +religion +exchange +news +reality +meeting +n +thomas +base +access +teachers +pain +front +effort +k. +middle +goods +memory +units +output +picture +october +january +variety +sample +december +september +families +faith +features +miles +division +speech +characteristics +film +examples +east +minister +procedure +teacher +stock +investment +africa +david +nations +marriage +equipment +germany +efforts +aspects +d +capacity +return +august +impact +girl +district +letters +thought +charles +institutions +public +leaders +models +demand +protection +network +style +animals +figures +christ +mrs. +operations +record +reaction +properties +international +husband +boy +r +circumstances +v +techniques +arms +jesus +lack +relationships +county +employment +paris +contact +ones +majority +collection +opportunity +none +sex +help +california +requirements +conference +sun +japan +november +description +measures +n. +revolution +objects +notes +formation +planning +standards +iii +conflict +bill +answer +organizations +summer +village +actions +lives +weeks +island +gas +hospital +past +henry +patterns +event +responsibility +introduction +philosophy +progress +scale +names +i. +eye +color +everyone +sales +plants +frequency +decisions +purposes +policies +places +argument +supply +mass +title +brother +soil +english +definition +powers +hall +resistance +contrast +co +heat +media +subjects +sort +structures +prices +a +smith +tradition +floor +institute +f +charge +britain +balance +self +papers +february +hair +skills +turn +element +contract +mary +affairs +identity +game +labour +attempt +connection +equation +command +reports +team +anyone +san +concentration +race +beginning +benefits +index +secretary +classes +credit +master +steps +tree +l +hour +inc. +window +motion +possibility +survey +social +bed +play +will +co. +la +interpretation +fear +strategy +concern +h +records +chicago +items +message +employees +director +skin +americans +van +officers +drug +g +tests +content +ratio +evaluation +doubt +chance +fields +file +half +plans +components +desire +month +richard +procedures +facts +hill +daughter +canada +corporation +soul +variables +top +measure +stone +trees +spring +individual +stories +k +brain +details +advantage +machine +cambridge +officer +constitution +girls +agency +cities +comparison +error +location +path +selection +i.e. +peter +piece +views +birth +search +matters +leadership +evening +feeling +glass +background +insurance +scene +boys +assessment +practices +post +attitude +technique +mouth +professor +trial +aid +deal +fish +feelings +park +appearance +therapy +leader +absence +transfer +sector +iron +lady +generation +duty +oxford +rise +kinds +origin +perspective +battle +de +defense +goal +back +applications +wood +shape +mark +version +winter +safety +vision +examination +station +conclusion +protein +violence +agent +bodies +regard +significance +etc. +doctor +creation +assistance +houses +images +belief +consideration +detail +psychology +funds +pages +attack +reader +hope +speed +user +communities +references +regions +reduction +goals +projects +chief +foundation +career +standard +sites +competition +sequence +lake +bit +judgment +trust +crisis +ship +experiences +address +interaction +cross +acts +cancer +concepts +courts +reform +medicine +assembly +firm +passage +input +share +sound +radio +mexico +mode +learning +sections +television +claim +layer +v. +forest +central +statements +combination +orders +difficulty +stress +emphasis +israel +exercise +movements +situations +consciousness +farm +personality +firms +cycle +sign +agents +jews +bar +mission +white +rock +museum +independence +edge +positions +citizens +composition +election +enemy +republic +recognition +accounts +consequences +walls +officials +resolution +arm +edition +participation +baby +sides +campaign +portion +poetry +authors +cash +centre +acid +struggle +indians +governor +opposition +crime +banks +signs +explanation +facilities +authorities +component +articles +manager +valley +von +tissue +writer +representation +horse +intelligence +steel +aspect +audience +client +density +engineering +responses +agriculture +estate +teaching +focus +characters +provisions +software +writers +drugs +experiments +sister +russia +garden +thoughts +markets +opportunities +difficulties +symptoms +damage +publication +youth +kingdom +johnson +feature +coast +transport +housing +fall +trouble +captain +brown +percentage +proportion +arts +michael +medium +joseph +tools +sentence +strategies +look +claims +convention +industries +plane +benefit +documents +troops +attitudes +periods +couple +no. +expansion +observations +categories +document +jobs +empire +mechanism +camp +column +determination +scheme +notice +mountain +confidence +living +block +welfare +evolution +governments +limits +entry +judge +relief +danger +sight +miss +agencies +investigation +ministry +buildings +experiment +pieces +foot +economic +call +personnel +curve +gold +efficiency +bone +soldiers +consumption +sale +wind +notion +increases +black +criticism +findings +institution +democracy +framework +latter +target +total +wave +probability +transition +contribution +permission +reading +distinction +asia +settlement +band +boston +stages +improvement +payment +editor +solutions +wealth +provision +theories +o +martin +queen +zone +device +show +pleasure +motor +establishment +preparation +causes +hotel +advice +legislation +web +sum +regulation +objectives +cm +regulations +assets +club +reactions +category +criteria +maintenance +animal +doctrine +beauty +guide +italy +circuit +sciences +proceedings +budget +map +demands +parameters +key +windows +plate +song +core +treaty +employee +unity +edward +season +conversation +variation +french +measurement +instruction +taxes +behaviour +dog +tasks +extension +statistics +height +territory +store +circle +identification +dollars +frame +chair +societies +temple +observation +angle +conduct +branch +debt +corner +gender +louis +rome +british +bottom +interview +prince +owner +samples +storage +poverty +milk +sons +fund +occasion +economics +depression +salt +resource +summary +federal +virginia +substance +poet +languages +phone +copy +signal +implications +tendency +human +parliament +quantity +exposure +assumption +adults +noise +mr +centuries +poem +depth +soviet +marketing +readers +injury +profit +eds +integration +tone +processing +ice +consumer +intensity +farmers +texas +novel +channel +chain +diagnosis +duties +arguments +logic +heaven +dream +thousands +potential +tool +ball +australia +threat +pictures +pair +users +era +debate +wilson +telephone +cooperation +tables +consequence +writing +approaches +meetings +ages +session +infection +intervention +stability +contents +chapters +roles +instrument +scope +bridge +bay +translation +supreme +load +velocity +sugar +carbon +options +managers +w +household +devices +perception +dinner +lands +jack +exception +degrees +muscle +birds +appeal +atmosphere +visit +dna +parent +option +heads +communications +implementation +radiation +particles +transformation +mountains +instructions +oxygen +separation +laboratory +instruments +revenue +worker +star +spain +regime +jones +request +root +grounds +route +boat +mechanisms +screen +texts +necessity +customer +islands +enterprise +representatives +neck +attempts +traffic +host +ships +concerns +theme +royal +clothes +artist +formula +fashion +programme +grace +card +afternoon +files +brothers +participants +silence +release +equations +frank +amounts +flowers +magazine +customers +bible +classification +lee +errors +fruit +diseases +challenge +commitment +great +grant +domain +ring +st +legs +while +tube +shift +involvement +proof +partner +bond +measurements +rooms +directions +discovery +leaves +iv +flight +wages +recovery +prayer +commerce +newspaper +phenomenon +sky +wine +awareness +considerations +seat +train +drive +theatre +sheet +outcome +stream +start +matrix +trip +answers +publications +beings +limit +pacific +high +internet +arrangement +payments +architecture +contributions +anxiety +testing +row +illness +beliefs +ireland +spite +comments +journey +variations +gift +acceptance +advance +hypothesis +boundary +dimensions +coffee +instances +williams +waves +tension +delivery +y +destruction +films +membership +amendment +gene +advantages +childhood +transportation +chairman +disorders +border +equilibrium +satisfaction +philadelphia +horses +streets +rain +developments +cultures +weather +prison +universe +alcohol +conclusions +setting +towns +u +berlin +wage +homes +skill +minority +christian +presentation +transmission +fig. +mail +tom +cup +los +print +weapons +victory +metal +port +survival +spot +breath +abuse +teeth +cover +thanks +bureau +waters +networks +syndrome +item +mixture +kitchen +executive +ca +elizabeth +impression +sin +wisdom +sets +ann +discourse +rice +liberty +expenses +decline +link +foreign +churches +decades +surgery +charges +roots +virtue +chamber +usa +whole +sunday +moon +arrangements +poems +clients +second +vessels +achievement +rev. +imagination +possession +courses +conception +expectations +scientists +shares +province +egypt +coal +branches +stars +shop +decade +travel +alexander +scholars +run +compensation +discipline +el +vice +limitations +symbol +finance +defendant +fingers +being +fuel +bishop +francisco +requirement +unions +phrase +games +cotton +proposal +smile +intention +qualities +peoples +losses +advertising +liability +climate +slave +ownership +possibilities +voltage +waste +database +sand +correlation +profits +disorder +bonds +loan +dance +faculty +fort +diet +productivity +estimates +discrimination +league +joy +beach +al +quarter +paragraph +expense +centers +rocks +controls +manufacturing +snow +jr. +phenomena +kids +electron +engine +scores +defence +shoulder +conversion +mothers +anger +supplies +artists +inches +square +boundaries +interactions +gain +minute +aircraft +arthur +bell +indian +writings +sleep +offices +meat +clause +fluid +saint +fiction +orientation +minds +silver +owners +assumptions +emergency +essay +chest +average +jurisdiction +trend +miller +nerve +lips +mm +beam +lewis +academy +slaves +talk +machines +populations +trends +reflection +occupation +elections +ma +duration +grain +tears +tea +effectiveness +ear +factory +vehicle +diameter +appendix +associations +spectrum +ends +server +schedule +employer +cars +chemical +present +dose +membrane +o. +taylor +nurse +incident +accounting +removal +publishing +contracts +jean +moments +strain +senate +gap +gun +taste +civil +ed +molecules +first +emperor +score +accordance +discussions +aim +crown +gods +adjustment +punishment +topic +diversity +export +carolina +scott +speaker +attorney +purchase +trans +hole +harvard +cards +moscow +songs +traditions +medical +reserve +promise +transactions +painting +confusion +up +tv +proteins +synthesis +clay +hills +crowd +columbia +critics +plot +christianity +equality +temperatures +gate +uncle +compounds +villages +move +thinking +copper +track +males +christians +burden +colonel +narrative +newspapers +opinions +liver +representative +approval +classroom +sports +symbols +murder +jackson +bread +fate +darkness +concentrations +uses +blocks +researchers +accident +dependence +making +hundreds +ethics +cattle +accuracy +copyright +muscles +dimension +arrival +grass +drama +partners +touch +green +choices +essence +entrance +favor +landscape +bird +sentences +ocean +colleagues +bus +walter +securities +happiness +d.c. +dreams +string +interface +davis +nobody +unemployment +connections +breast +conservation +utility +shock +vessel +duke +surprise +cabinet +guy +physician +residents +humans +absorption +loans +virus +leg +diagram +pregnancy +old +plasma +panel +expenditure +guidance +sensitivity +messages +cit +cat +universities +layers +declaration +vote +korea +display +hearing +earnings +acquisition +customs +guard +pride +curriculum +dress +colour +ministers +navy +coverage +masses +red +migration +re +negotiations +count +magnitude +victim +everybody +agreements +priest +slavery +enterprises +nose +button +camera +pennsylvania +roads +computers +doors +passion +conflicts +sake +pay +complexity +pounds +directors +objective +fault +alternative +physics +sphere +departments +stores +millions +exports +reputation +blacks +alliance +responsibilities +essays +emotions +copies +angeles +daniel +cf +harry +players +guidelines +format +circulation +theology +dogs +ad +pool +inquiry +hell +attacks +tongue +check +machinery +quantities +restrictions +ideology +lawyer +expressions +ml +crops +statute +commander +civilization +wars +dynamics +samuel +candidate +behalf +stations +joe +hero +columns +profession +eggs +clothing +palace +consent +channels +prevention +signals +ohio +seed +pressures +witness +execution +faces +surfaces +wire +estimate +constraints +victims +massachusetts +risks +philip +eastern +roof +partnership +lincoln +equity +organisation +coefficient +sam +sounds +delay +railway +pope +correspondence +validity +testimony +acids +mill +females +currency +inflation +foods +candidates +francis +transaction +desk +mean +mining +driver +doctors +suit +deposits +grade +fun +judges +florida +corporations +friendship +christmas +latin +dc +obligation +experts +chart +lawrence +analyses +origins +dust +profile +savings +mirror +volumes +shell +consumers +honor +fraction +promotion +michigan +appointment +mathematics +inventory +shoulders +axis +humanity +links +occasions +districts +illinois +seconds +enemies +generations +mood +prisoners +colors +curves +modes +crop +flesh +segment +menu +germans +don +operator +evil +nursing +mine +priority +uk +publishers +bag +substances +suggestion +comment +hydrogen +allen +parameter +dialogue +lesson +ears +residence +bush +custom +avenue +sec +shadow +trading +lights +topics +pollution +array +proposals +verse +vietnam +bones +recommendations +particle +ray +grand +actors +stephen +hat +tape +returns +clark +settings +servants +railroad +citizen +pupils +reasoning +colonies +jury +le +ritual +shakespeare +player +designs +tomorrow +mortality +outcomes +genes +rank +divisions +employers +technologies +canal +jim +draft +u. +adam +opening +courage +desert +preference +offer +stones +incidence +isolation +lead +jerusalem +marks +simon +compound +worship +q +influences +corps +obligations +rivers +voices +ford +young +atoms +configuration +plates +aids +motivation +vector +woods +colony +fight +inhabitants +finger +libraries +minimum +decrease +pakistan +roosevelt +availability +trials +behaviors +suggestions +definitions +mistake +thesis +following +fathers +detection +shows +tons +glory +theater +jane +habits +anderson +kennedy +assistant +disk +entity +y. +dollar +alternatives +facility +guns +enforcement +eq +perspectives +storm +fees +tip +male +movie +organs +conviction +spirits +plaintiff +santa +maria +plays +counsel +z +apartment +myth +phases +catholic +manuscript +slope +castle +maps +vi +headquarters +tower +western +chemistry +interviews +industrial +lessons +engineers +scenes +imports +kings +free +lunch +investments +pairs +reply +maximum +max +whites +attributes +poland +ion +tissues +yield +hitler +steam +dad +soldier +retirement +reforms +protocol +trail +remarks +meal +adams +lesions +adult +memories +dispute +coat +d' +see +rs +habit +locations +calculation +dr +cable +uncertainty +themes +creek +investigations +fortune +scotland +relatives +invasion +diffusion +res +corn +seeds +da +circles +adoption +calculations +gifts +insight +professionals +peak +fee +wheel +drop +occurrence +initiative +sisters +indication +pocket +stuff +intervals +anne +photographs +organisms +liberation +loop +margaret +cloth +comfort +neighborhood +capitalism +sodium +shore +emotion +crew +mid +howard +lists +visitors +register +lieutenant +princeton +stimulus +discharge +marx +tribes +fever +award +morality +pulse +log +wives +pipe +descriptions +census +contacts +sectors +ben +ms +weakness +strike +divorce +sci +shoes +committees +programming +mystery +farmer +l' +joint +businesses +freud +russell +schemes +gulf +norms +acres +ions +hospitals +households +filter +advances +integrity +platform +intent +pilot +opera +bob +provinces +improvements +sociology +margin +meanings +immigrants +package +quarters +criterion +frontier +ltd. +andrew +controversy +assignment +hearts +innovation +ladies +infants +vols +roman +physicians +reconstruction +colleges +gains +realm +cape +calcium +spaces +tale +algorithm +prime +georgia +complex +major +departure +commissioner +servant +rose +inspection +legislature +archives +highway +serum +albert +bias +publisher +restaurant +challenges +tract +tour +electrons +wheat +military +completion +replacement +proposition +forests +patent +carrier +usage +throat +apparatus +artery +banking +autonomy +fleet +interior +brazil +marshall +styles +ward +lung +douglas +harmony +stimulation +producers +sheep +breakfast +phys +basin +economies +printing +bottle +peasants +bacteria +saturday +cook +aunt +vehicles +metals +guilt +programmes +furniture +scales +monitoring +gospel +dozen +teams +mobility +foundations +dates +un +affair +enthusiasm +biology +allies +federation +illustration +politicians +praise +ties +registration +delhi +somebody +feedback +admission +portrait +novels +moore +exercises +mrs +bases +sessions +respondents +default +folk +lawyers +suicide +masters +rubber +titles +holes +associates +interference +senses +supervision +jersey +leaf +manufacturers +immigration +mouse +watch +testament +gallery +boards +bands +conscience +fragments +operating +electricity +mile +km +paintings +harm +crimes +deficiency +import +drink +fellow +collections +sacrifice +modern +daughters +mount +hierarchy +mg +privilege +expenditures +chinese +bills +priests +lots +left +exceptions +wright +socialism +pace +turkey +treasury +mankind +netherlands +egg +photograph +greece +segments +passages +versions +environments +codes +stomach +gordon +engineer +walk +threshold +tobacco +fibers +salvation +rotation +succession +emergence +cream +franklin +variance +fears +rejection +exploration +truck +cut +wisconsin +excess +interval +grants +wing +defects +organ +nitrogen +yards +tail +pan +reproduction +tank +hong +farms +heritage +favour +continuity +simulation +damages +secret +injection +nurses +sizes +historians +urban +edges +coefficients +wales +consensus +cap +poets +cloud +allocation +sarah +break +thompson +actor +zones +bulletin +revelation +sympathy +specimens +ease +rays +regression +gentleman +negro +elite +receptor +senator +loyalty +plenty +wedding +merchants +clock +flexibility +appreciation +differentiation +mineral +justification +mills +bath +bars +territories +ego +renaissance +clouds +guests +dignity +warning +rent +shot +editors +third +injuries +nationalism +photo +soils +wings +berkeley +votes +asset +lens +calls +ideal +tragedy +sheets +frederick +fox +adaptation +pa +infant +demonstration +reserves +earl +beer +wells +morgan +zealand +deviation +compliance +genius +sequences +prospect +modification +expedition +abilities +pursuit +hopes +aristotle +hebrew +fruits +bulk +accumulation +nucleus +yesterday +appeals +surveys +gravity +repair +courtesy +salary +seats +continent +cord +investors +harris +tales +boxes +brand +sport +merchant +therapist +bibliography +powder +excitement +commonwealth +directory +taxation +witnesses +islam +kong +sweden +peasant +restoration +gardens +width +reliability +cycles +disaster +financing +bits +walker +verb +hamilton +charter +perceptions +belt +barrier +followers +counter +wonder +graph +rats +mayor +ceremony +infections +agenda +combinations +frequencies +tolerance +defeat +spread +benjamin +attachment +formulation +devil +shirt +baltimore +barriers +mississippi +metabolism +knife +bowl +remainder +centres +boats +female +carter +non +valve +enzyme +violation +ph +technical +hardware +lifetime +terror +campus +smoke +mines +ridge +video +varieties +susan +capabilities +explanations +studio +handbook +ignorance +toronto +preferences +rhythm +knees +barbara +withdrawal +souls +entertainment +visits +pass +coordination +nodes +sorts +preservation +muslims +blue +scientific +communists +prophet +yard +morris +close +activation +traits +anna +neighbors +flag +interpretations +critique +organism +complaint +tokyo +targets +representations +harper +operators +norman +stroke +fiber +observer +main +inputs +label +sword +current +beds +shapes +alfred +principal +ranks +ny +chains +upper +certificate +makers +con +paths +protest +grammar +ratios +nutrition +disposal +robinson +complications +moses +disputes +molecule +reign +drawings +competence +long +stem +planes +prospects +dean +aggression +requests +abraham +jefferson +ct +baker +roger +respects +chemicals +historian +nelson +cluster +flower +propaganda +lover +talent +vegetables +stocks +creatures +victoria +grades +festival +les +stop +motives +judgments +corruption +iraq +thickness +bull +deaths +realization +angel +atlantic +luck +complaints +bargaining +cd +craft +companion +sexuality +herbert +limitation +bear +disability +piano +healing +shops +hunter +entities +rows +premises +dawn +holy +jacob +contexts +pension +correction +dictionary +horizon +gates +honour +commodity +silk +weapon +clerk +outline +mercy +node +pot +privacy +cuba +matthew +macmillan +chances +autumn +script +colorado +corp. +inability +distress +portions +chapel +anybody +precision +deck +methodology +rhetoric +cultivation +exclusion +notions +creature +tribe +vienna +buyer +reception +keys +mechanics +deposit +sovereignty +campbell +specification +nights +lakes +trace +ross +timber +compromise +official +capability +inspiration +dialog +scholarship +japanese +angles +likelihood +iran +distributions +lecture +revenues +exhibition +invention +funding +affection +planet +guest +comparisons +prediction +butter +exploitation +bedroom +plato +drawing +tel +rebellion +inch +warfare +illustrations +rehabilitation +voters +petition +shri +fabric +intentions +paint +pump +mice +alice +lane +similarity +biol +missouri +helen +vii +stairs +mention +mom +treatments +mike +placement +farming +holland +die +ex +prosperity +producer +coalition +desires +eve +switch +speakers +donald +collaboration +suffering +hold +chicken +specimen +kansas +midst +flood +timing +gaze +prize +vacuum +expertise +tumor +conventions +southern +juan +reward +impulse +glance +churchill +maturity +proportions +friday +manufacturer +factories +escape +bernard +journals +throne +readings +utilization +vocabulary +carl +hormone +glucose +airport +settlements +mass. +emission +onset +stanford +se +infrastructure +manufacture +worlds +singapore +cry +anthony +indicators +collapse +petroleum +vein +lectures +minerals +disposition +stranger +geography +philippines +phrases +magazines +relevance +entries +shelter +deputy +trauma +cousin +streams +tumors +ambassador +buffer +deficit +laughter +fertility +indiana +jordan +episode +preparations +energies +madison +documentation +stand +harold +communism +momentum +expectation +projection +kid +grief +drinking +clubs +austria +arnold +pen +threats +installation +races +aims +camps +inclusion +assault +educational +ceiling +stimuli +ideals +statutes +roy +karl +harbor +negroes +spending +prose +philosophers +rod +radius +democrats +arrest +spouse +conjunction +ff +pound +football +european +distances +environmental +springs +yale +legend +merit +tubes +cheese +pole +currents +triumph +warren +luke +penalty +feed +suspicion +nerves +jan. +privileges +estimation +minnesota +du +match +license +cave +administrators +min +alan +flux +vitamin +moisture +sensation +reviews +metaphor +grid +chiefs +blow +biography +leisure +literacy +outlook +mix +monday +borders +compression +p.m. +defect +pupil +displacement +destination +commands +charity +diary +seller +consistency +abortion +insects +plains +commodities +majesty +commentary +b.c. +anthropology +am +pierre +restriction +wiley +strip +strains +religions +marie +scholar +ports +administrator +receptors +dec. +gentlemen +inheritance +roll +psychiatry +revision +certainty +assurance +brick +heating +turner +intake +knee +amsterdam +fur +flame +dear +analogy +despair +citizenship +vegetation +simplicity +guards +rating +boss +singh +wolf +manual +doses +induction +functioning +relaxation +guys +cavity +armies +working +shifts +speeches +enzymes +posts +palm +ruler +breakdown +routes +rings +diabetes +mortgage +gesture +talks +prisoner +glasses +mistakes +evans +circuits +receiver +murray +haven +babies +ft +fame +meals +academic +grandfather +supporters +apple +battery +urine +saints +needle +prayers +rulers +organisations +victor +delight +engagement +settlers +preface +discretion +abundance +cooper +failures +tourism +antonio +critic +venture +maryland +automobile +liquid +consultation +geometry +prejudice +hunt +coach +arrow +graham +poles +indonesia +dangers +russians +horror +ruth +fred +prestige +nixon +objection +juice +approximation +tactics +inside +refusal +refugees +shame +incentives +patience +philosopher +wishes +wound +thread +decay +holiday +stanley +destiny +achievements +patrick +scientist +arch +drainage +florence +mud +conquest +mercury +couples +opponents +gray +gases +engines +shadows +tide +smell +encouragement +counties +palestine +ussr +virtues +jan +painter +specifications +rail +infantry +tin +nov. +motive +knight +daily +cortex +worth +movies +regiment +little +grandmother +ralph +retention +erosion +bomb +tracks +winds +oct. +popularity +forum +princess +weights +spots +inequality +voyage +junction +bruce +nigeria +trunk +workshop +romance +humor +hostility +tennessee +ancestors +passengers +stalin +span +hypotheses +calendar +monopoly +willingness +performances +joints +lloyd +lamp +pitch +missions +wish +angels +deposition +diamond +insights +debates +substitution +cohen +dan +tanks +cultural +nancy +memorial +denial +sins +assertion +hunger +descent +volunteers +instant +interventions +portfolio +mask +jail +devotion +antibody +stewart +fishing +round +combat +chloride +europeans +occupations +attraction +scenario +eds. +shopping +neurons +cir +mitchell +creativity +horn +at +taiwan +parks +architect +cabin +switzerland +inhibition +carriers +newton +practitioners +estates +invitation +lion +chambers +lords +rope +spectra +sept. +printer +flash +grains +natives +parker +container +observers +esteem +overview +illusion +napoleon +crystals +realities +attendance +seal +bow +austin +adventure +louisiana +priorities +elimination +ontario +proceeds +dilemma +catherine +oak +perfection +conversations +recreation +arizona +catholics +suspension +termination +squares +scripture +fracture +specialists +conferences +indicator +lie +quest +pc +milton +communist +repetition +guinea +kidney +trap +incomes +elevation +meters +reflections +signature +accommodation +tendencies +shareholders +frames +buddha +specialist +reporter +orange +fair +dioxide +degradation +nicholas +revolt +fusion +ph.d. +clusters +reliance +puerto +kant +microsoft +com +realism +widow +passenger +charlie +khan +sydney +orleans +birthday +butler +arbitration +caution +histories +n.y. +editions +adolescents +ghost +dominance +trips +fantasy +chaos +disciples +graduate +cult +encounter +minorities +atom +artillery +admiral +imagery +extraction +wilderness +reagan +commons +iowa +campaigns +modifications +christopher +countryside +sentiment +disclosure +curiosity +connecticut +paradigm +efficacy +incidents +cold +clinton +variability +bench +stuart +successor +ss +delegates +caste +chairs +attribute +hungary +insulin +doubts +clergy +plots +hollywood +debts +sri +edinburgh +pity +bride +singer +friction +designer +frustration +eric +amplitude +romans +dissertation +harvest +disturbance +landing +peers +marine +counseling +globe +accidents +depths +antibodies +flows +obstacles +sage +fe +feb. +cathedral +severity +moves +hans +flour +expert +deeds +carriage +medication +roberts +publicity +hatred +domination +concert +founder +congregation +oregon +jew +ranges +aluminum +shade +manifestations +tips +kentucky +profiles +executives +hopkins +political +adjustments +recommendation +regards +good +cylinder +fatigue +athens +cow +fragment +surgeon +exile +gandhi +billy +si +heights +ecology +indications +luther +i +checks +oxidation +sub +breeding +thirds +anatomy +leather +manipulation +depreciation +heroes +out +bridges +harrison +allowance +greeks +fool +missionaries +stick +leave +clinic +rewards +agricultural +governance +historical +neighbor +collins +geneva +purity +jose +verses +stresses +loads +northern +viii +baseball +rna +recording +low +constraint +visitor +exit +auto +shaw +lungs +fluctuations +councils +researcher +alarm +narrator +qualifications +pine +cigarette +amendments +surplus +delegation +tony +traders +lease +supervisor +chin +dick +characterization +maker +resonance +fisher +distinctions +jacket +contradiction +reach +stake +implication +manners +detroit +audiences +initiation +salaries +negotiation +suite +kelly +transfers +gear +fraud +oliver +texture +decree +financial +charts +merits +remark +seas +reinforcement +resident +comedy +veins +rio +carcinoma +objections +blade +corners +finding +quebec +goodness +domains +bombay +economists +kate +deer +disturbances +husbands +wallace +strings +norway +catalogue +midnight +electric +versus +superiority +jet +bass +ingredients +convenience +cents +shaft +belgium +sculpture +graphics +solidarity +instability +legacy +dublin +physiology +symposium +dynasty +sketch +questionnaire +gen. +jonathan +cast +navigation +prosecution +virgin +madame +retreat +contractor +beans +hughes +fan +hudson +clauses +cargo +fence +peninsula +lodge +phillips +terminology +nm +purchases +participant +rage +dirt +pit +membranes +cups +tensions +treaties +tunnel +clin +sergeant +hugh +strengths +gregory +by +bengal +lesion +rape +creator +exchanges +clarity +lab +tooth +cinema +remedy +similarities +laboratories +deduction +initiatives +java +celebration +steve +hiv +watson +orchestra +miracle +resort +triangle +tourist +viewpoint +fires +warmth +intellectuals +memorandum +bacon +diego +equivalent +rogers +republicans +cuts +presidency +bishops +wool +taxpayer +audit +alabama +forehead +disabilities +renewal +meditation +predictions +spin +shells +suppliers +arc +tariff +aug. +denmark +seasons +revival +wounds +wheels +rat +canadian +potatoes +pile +boots +pause +investigators +intercourse +identities +manuscripts +pack +sorrow +litigation +edwards +racism +inference +rush +marriages +• +manchester +peaks +drivers +stay +annual +nuclei +constants +covenant +explosion +wildlife +propositions +supper +myths +breach +guardian +summit +guarantee +processor +comprehension +competitors +contraction +golf +tent +porter +coins +thumb +envelope +special +secrets +ec +refuge +meter +regional +honey +panic +norm +bags +contempt +gang +prohibition +cake +nest +yields +defendants +aspirations +weber +imaging +bureaucracy +module +hypertension +hay +nj +symmetry +univ +dam +conditioning +dutch +paradise +intellect +disciplines +kim +ltd +noon +liabilities +holdings +shipping +brian +das +rituals +bankruptcy +nationalist +offence +transit +chile +truths +goddess +ambition +delta +z. +natural +inn +li +alaska +impressions +pepper +joan +burial +in +collector +lip +closure +oppression +capita +complexes +capture +subsection +shortage +loading +canvas +gilbert +laura +hip +acceleration +dishes +computation +lengths +monitor +margins +counts +leo +confirmation +strangers +penetration +musicians +mason +ali +gdp +struggles +outside +cavalry +charlotte +advancement +obedience +foreigners +plantation +tribunal +cleveland +judgement +isaac +prey +pastor +hormones +lower +cheek +admiration +blessing +solomon +tomb +lighting +argentina +dissolution +plain +colours +laugh +common +promises +imperialism +neglect +africans +lovers +ride +restraint +rationale +weekend +speculation +disc +beef +gradient +arabs +kenneth +contest +hotels +ed. +statue +fit +snake +gratitude +wake +traces +vegetable +episodes +propagation +battles +confession +holder +applied +confrontation +fighting +secretion +awards +parish +motions +restaurants +examinations +prevalence +accord +ratings +shelf +buddhism +trustee +doctrines +well +careers +query +remains +segregation +psychologists +standpoint +cats +pioneer +suppression +immunity +addresses +temples +small +odds +excellence +basket +orbit +reservation +figs +professors +manifestation +skull +deals +turns +vicinity +portugal +appraisal +terrorism +ticket +gland +habitat +cottage +burns +stance +judaism +jacques +handling +mapping +trustees +laser +partition +arena +dish +pathology +mcgraw +martha +houston +wagon +narratives +proc +capacities +misery +custody +sp +mac +venice +algorithms +charm +transitions +raymond +breathing +golden +opponent +verbs +pathway +parking +incorporation +lenin +quotation +atlanta +precipitation +brigade +med +shots +ronald +deed +spheres +packet +commissioners +treasure +assignments +bathroom +wagner +soup +commitments +oath +glands +troubles +alex +surroundings +companions +regimes +luxury +arrows +educators +pricing +electronics +want +bind +chromosome +correlations +slip +cliffs +composer +legitimacy +labels +superintendent +discount +cure +eliot +photography +crack +reservoir +balls +grip +german +sunlight +controller +innovations +providers +mama +potassium +spanish +fax +dependency +talents +sa +imitation +consultant +constituents +instinct +mao +ellen +formulas +disadvantage +impulses +teachings +resurrection +brush +peru +ha +dividends +socialist +notation +produce +turnover +sentiments +holmes +quarterly +dining +patch +pains +catalog +substitute +wang +genesis +tribute +altar +workplace +coin +coordinates +u.s.a. +lucy +ceremonies +tenure +weaknesses +spine +graduates +receipt +panels +obstruction +sanctions +tones +buyers +memoirs +chancellor +ordinance +drum +voting +inspector +chris +paragraphs +real +folks +disadvantages +kg +rifle +fitness +kent +faults +buffalo +big +soap +gary +slopes +syria +sampling +irrigation +genre +jimmy +pencil +modeling +stack +falls +incentive +progression +mistress +ram +leonard +conspiracy +excuse +enjoyment +assessments +limbs +pottery +irony +harvey +indifference +slide +magic +tenants +rear +cemetery +enlightenment +syntax +southeast +compassion +toxicity +chase +circumstance +abnormalities +calcutta +constituent +columbus +vectors +broadcasting +vacation +proliferation +wit +layout +mental +shield +plaintiffs +paradox +veterans +archaeology +liberals +applicant +boom +ms. +richmond +funeral +visions +joke +sauce +augustine +professional +instructor +monks +oklahoma +kenya +polymer +murphy +conceptions +meantime +journalists +pat +posture +sickness +translations +ibm +submission +mess +guides +reynolds +elders +reservations +fluids +cheeks +folder +affinity +oxide +treatise +wavelength +pigs +descendants +offense +cal +advocates +derivatives +projections +proximity +photos +off +physiol +analyst +transformations +distortion +silicon +monument +ambiguity +ventricular +subsidies +textile +es +canon +hawaii +cholesterol +offering +credits +bennett +commissions +hazard +impacts +generator +nato +autobiography +lock +hut +recruitment +conformity +mt +feast +barry +merchandise +caesar +maine +temper +chocolate +kindness +utilities +consolidation +prophets +fatty +drops +joyce +passions +beams +dispersion +stevens +diagrams +pathways +tie +ink +handle +rites +crises +norton +substrate +possessions +cornell +cows +convergence +finland +waist +arteries +remedies +rescue +schedules +ernest +concessions +foster +der +discoveries +provider +ruling +larry +presidents +battalion +criminal +lamb +corpus +debtor +reconciliation +deformation +scattering +messenger +pm +cognition +nick +jerry +popular +avoidance +hint +trains +reverse +viruses +hearings +phosphate +dairy +theorists +temptation +supplement +princes +eisenhower +solids +na +fans +architects +blanket +insect +express +packages +detector +linda +breasts +tune +announcement +hunting +counterparts +governors +dealer +injustice +zinc +ch +spencer +sediments +hull +alterations +nutrients +volunteer +contention +emissions +limb +gaps +gross +beast +md +archbishop +premium +hegel +rainfall +embassy +poison +pin +outset +merger +mate +malaysia +vincent +exposition +fellows +violations +freight +resolutions +salmon +valuation +porch +ladder +bottles +carol +surrender +electrode +continuation +handful +rabbi +survivors +contamination +anti +filters +powell +displays +reactor +pro +axes +lightning +sermon +hazards +tion +conductor +strikes +eagle +offspring +cardinal +chorus +quantum +herald +acquaintance +pittsburgh +hook +uniform +ash +trades +impairment +canyon +specificity +imprisonment +robin +trick +truman +darwin +fractions +continuum +burke +reed +clearance +surveillance +providence +revenge +disappointment +fifth +liquor +mammals +dead +closing +ruins +eugene +buttons +markers +richardson +johnny +rachel +thrust +learners +monarchy +trucks +verlag +rolls +trinity +hemisphere +offenders +indices +cement +down +a.d. +routine +insertion +complement +warriors +drift +psychologist +deviations +me +creditors +ins +professions +beginnings +tim +standing +probabilities +drinks +marker +accountability +cole +pipes +contradictions +metropolitan +rebels +pond +straw +dorothy +pp. +antiquity +vs. +marble +pearl +pp +genus +leon +fisheries +tab +appearances +feeding +sums +doorway +graves +terminal +probe +tennis +sherman +emily +floors +winston +brass +contemporaries +exemption +owen +sediment +utah +excitation +fractures +ranch +drives +repression +reversal +ellis +compositions +fellowship +scriptures +beard +noun +potentials +motors +maurice +soviets +morphology +advisory +hart +colonial +eu +baron +muhammad +bearing +julia +prentice +shah +p.o. +personalities +rationality +imperial +applicants +protocols +fixation +genetics +ventilation +liberalism +schooling +alteration +legal +stretch +tender +jay +private +radicals +demonstrations +jaw +crystal +yugoslavia +microscope +innocence +combustion +advanced +suits +monastery +inflammation +reporters +sheriff +diplomacy +indies +phil +advocate +strips +parallel +arabia +kinship +manpower +supra +tuesday +ps +attainment +inscription +adventures +flames +plateau +potato +redemption +clan +cane +chronicle +wires +chem +basement +adolescence +credibility +curtain +va +brooks +usefulness +jungle +garrison +nationality +bladder +intuition +bark +receipts +deficits +pleasures +resentment +telecommunications +negligence +theorem +monk +resignation +lifestyle +lap +plea +collision +blake +conservatives +montreal +hood +feminism +shoe +tenant +associate +psychotherapy +gathering +medications +freeman +migrants +oils +villagers +resemblance +carlos +runs +collar +holidays +sexes +intersection +obstacle +advent +investor +emma +super +pockets +ethnicity +trait +activists +believers +net +evaluations +miners +dealers +prints +elbow +satellite +successes +scrutiny +holders +intimacy +socrates +hamlet +cone +tuberculosis +las +deterioration +maid +decoration +alignment +productions +meyer +decomposition +persistence +tourists +chip +recipient +reorganization +salts +spray +criticisms +travels +editorial +agitation +portraits +practitioner +sullivan +mi +counselor +jazz +railways +northwest +journalist +percentages +clarke +wayne +pig +ix +coil +montgomery +databases +cage +uptake +headache +hosts +coup +perry +industrialization +nuts +appointments +viscosity +fulfillment +modernity +locke +bunch +geology +multitude +sally +valleys +spelling +mar. +quotations +smoking +nobility +limestone +altitude +champion +communion +missile +mediation +subsistence +gestures +terry +barrel +afghanistan +alpha +analysts +baptism +neighbours +deity +thursday +ton +journalism +pi +blues +barn +linguistics +grove +museums +supplier +satan +mastery +abolition +wrist +verdict +reformation +textbook +marsh +insistence +kiss +modernization +mediterranean +discomfort +chromosomes +mars +hr +recipients +appetite +marrow +prof. +villa +penalties +elasticity +wax +cairo +saddle +anniversary +readiness +respondent +beijing +twins +southwest +robertson +designers +pie +colon +missionary +seminar +additions +hon +webster +shower +aviation +reporting +emerson +vitro +coding +shanghai +dysfunction +mandate +thailand +emancipation +outlet +tours +disagreement +sierra +heavens +criminals +northeast +offerings +split +siege +reductions +edmund +conduction +generals +marcus +rep. +symphony +furnace +ryan +gel +monster +consultants +newman +sultan +abstraction +bundle +all +wednesday +viz +drill +corridor +karen +containers +johns +outbreak +cooling +certification +telegraph +bounds +gauge +designation +heir +vibration +ab +booth +munich +counterpart +otto +saturation +annie +gerald +alienation +palmer +amino +beat +ups +seattle +madrid +establishments +grave +prescription +pointer +proclamation +hammer +experimental +anchor +basic +pact +versa +fast +persecution +far +conductivity +terrain +entrepreneurs +symptom +determinants +caribbean +premise +earthquake +breaks +landlord +marshal +inverse +fibres +swing +backgrounds +politician +militia +brussels +workshops +baptist +accent +chips +towers +alloys +dennis +cia +planets +louise +duncan +mann +tag +carpenter +knights +homer +greek +bloom +m.d. +holt +procession +extinction +col. +ban +screening +birmingham +deficiencies +concrete +il +batch +arkansas +patron +verification +railroads +keith +liberties +lebanon +patronage +coupling +crash +livestock +rico +locus +cliff +bin +supervisors +colleague +dallas +daddy +ac +fly +dedication +attorneys +convictions +schizophrenia +elites +papa +eternity +hunters +speeds +debris +warrant +elder +fbi +monuments +thinkers +davies +businessmen +prototype +tribune +poor +doc +bc +a.m. +betty +transcription +hampshire +parade +backs +mobilization +open +anticipation +pants +bid +breeze +saving +glow +ass +morale +flora +keyboard +roses +x. +ian +q. +setup +vapor +strategic +dave +reformers +dividend +precedent +tiger +inclination +nursery +metaphysics +ore +artifacts +feathers +repairs +nietzsche +seizure +flies +assimilation +elephant +einstein +grey +corrections +milan +nebraska +residues +sidney +senior +jake +friedrich +chap +dominion +daylight +crowds +simpson +undertaking +contemporary +miami +detachment +bailey +detective +reich +glimpse +rural +embryo +encyclopedia +turks +warner +extracts +allegiance +contractors +corrosion +easter +ave +tickets +infancy +pulses +spell +melbourne +toys +gabriel +discourses +jump +macdonald +sensations +bodily +polarization +supp +painters +gazette +symbolism +prophecy +acre +delaware +disruption +warrior +carpet +levy +deprivation +lift +mutations +bombs +ventures +malcolm +lawn +abstract +drain +socialization +radar +modulation +lime +dakota +brethren +enhancement +lies +certificates +madness +reluctance +thunder +sacrifices +graphs +steven +hume +listing +panama +antibiotics +constructions +gasoline +generalization +wesley +formations +interfaces +icon +vulnerability +flavor +caroline +bourgeoisie +fortunes +ted +morals +digital +outputs +honesty +quo +planners +stops +illumination +extremes +edwin +delays +sketches +assistants +po +darling +rousseau +naval +edgar +warsaw +echo +melody +locality +nails +wastes +dances +patches +optimization +dragon +fog +denver +mob +spaniards +donor +budgets +burma +sailors +n.j. +beta +terminals +sticks +catalyst +globalization +magnesium +torture +di +maxwell +ip +integer +short +metres +pilots +johnston +ken +beads +balances +cues +lamps +mysteries +surg +thomson +para +miracles +venus +cameras +henderson +configurations +fork +sperm +higher +random +textbooks +token +bullet +go +jamaica +cox +couch +brains +psychoanalysis +tastes +antigen +strata +magistrate +fury +heels +dock +herd +regeneration +variants +preacher +calories +par +plantations +irs +extensions +commanders +early +rim +forgiveness +pub +frances +grasp +ammunition +pulp +dozens +mixtures +killer +patents +missiles +polymers +native +threads +theft +leslie +spectacle +oscar +resin +laborers +dosage +marxism +methodist +routledge +rounds +arthritis +densities +breadth +sensor +amy +vitality +clues +phosphorus +diana +coincidence +institutes +replication +glasgow +universal +neutrality +covers +michel +clue +stein +klein +brooklyn +toy +petersburg +craig +lisa +specialization +alliances +ally +reverend +filing +pet +wash +jason +logs +mutation +linkage +fertilizer +toilet +coherence +transverse +schema +chapman +disappearance +precautions +economist +mythology +modules +junior +pull +allowances +faculties +fighter +commercial +pools +baldwin +pad +alexandria +tray +homeland +duct +tracts +predecessors +greatness +stockholm +toes +judith +bells +buck +persuasion +variant +validation +arctic +yeast +eden +dickens +westminster +janet +prairie +calif. +dewey +witch +purification +pedro +airplane +catch +exhibit +costa +kin +minor +cart +abc +pradesh +athletes +fr +shores +garage +exam +futures +abbey +cigarettes +gm +crest +socialists +novelist +id +jar +colombia +uniformity +spirituality +winner +belly +nathan +epa +defenses +patrol +joshua +manhattan +qualification +read +variable +refugee +czechoslovakia +annals +suffrage +neighborhoods +hoover +penny +lattice +frankfurt +cafe +crane +apprehension +casualties +aaron +armstrong +maize +lid +nickel +andrews +dome +strand +make +righteousness +latitude +sanctuary +experimentation +squadron +greene +lobby +cruelty +individuality +forestry +evils +inquiries +stove +gravel +internal +depletion +ballet +comrades +interpreter +henri +julian +terrace +conrad +cab +template +embarrassment +dante +pots +respiration +sovereign +plague +recordings +no +courtyard +lenses +valves +ambitions +reflex +nevada +gamma +barnes +statistical +particulars +candle +wear +cannon +portland +hannah +crust +inland +temperament +bradley +jealousy +catheter +peer +horace +aspiration +cutting +aging +bee +servers +pr +stamp +warehouse +revolutions +click +granite +humidity +scenarios +bowel +albany +motif +xi +dismissal +lumber +limited +optimism +clearing +marketplace +cincinnati +licence +apples +indexes +mit +judiciary +lobe +claude +fairness +advisers +periodicals +album +pamphlet +balloon +cs +luis +associated +sql +finish +kevin +contributors +f.2d +stabilization +republican +broker +herbs +shrine +residue +timothy +manila +nephew +anesthesia +calvin +permeability +nonsense +dame +flights +sect +sara +veil +zeal +fountain +screw +monetary +deductions +selling +blast +minneapolis +irradiation +births +folklore +adsorption +hygiene +aristocracy +famine +adviser +shepherd +sigh +chamberlain +individualism +apostles +jr +cries +rabbit +airlines +math +update +homosexuality +cracks +notices +ferry +calibration +rods +unification +bubble +suburbs +textiles +costume +elevator +supremacy +adherence +beneficiaries +clara +therapists +presentations +halls +sadness +beasts +gloves +susceptibility +franchise +advocacy +moss +emigration +senators +harbour +dot +seizures +montana +antigens +recall +bankers +legends +burton +julius +protests +madras +jeff +dialect +hague +sulfur +bonus +sunshine +ra +davidson +kit +monkeys +pearson +lymph +sellers +plaza +electrodes +accomplishment +mccarthy +herman +successors +spectator +wilhelm +jo +tyranny +nomination +inhibitors +simulations +ads +urge +boulder +basketball +liverpool +recession +castro +appropriation +pledge +ashes +shareholder +irving +sterling +presumption +infusion +fed +rents +semantics +franco +mo +local +intra +directive +schmidt +piety +monkey +bristol +gardner +climax +addiction +impedance +wrath +lymphocytes +hardy +linen +skeleton +advertisements +guarantees +enlargement +stereotypes +sc +familiarity +developers +permit +specialty +classrooms +listener +tariffs +manuel +nuclear +allan +ref +single +velocities +outsiders +blessings +articulation +pete +colonists +ga +tenderness +andy +heirs +investigator +ottawa +leipzig +encounters +sudan +formats +byron +deception +african +ira +amplifier +advertisement +shelley +cp +siblings +plaster +vendor +pumps +metaphors +trusts +drag +scandal +fortress +peterson +purchaser +abandonment +restructuring +concession +subsidiary +censorship +maggie +kashmir +purse +protestants +ethiopia +stevenson +monarch +diffraction +dwelling +monroe +ivan +fishes +listeners +enquiry +jewish +recourse +ivory +clinical +accomplishments +allah +batteries +treasurer +quartz +pt +frontiers +inscriptions +derivation +classics +youths +automation +recorder +mantle +deputies +telegram +dictatorship +shades +detention +township +ghana +stems +subsidy +ernst +binding +asthma +masks +objectivity +bobby +fantasies +strauss +hepatitis +gibson +franz +bonding +crafts +assemblies +apr. +heidegger +felix +hindu +him +utterance +transplantation +parallels +admissions +horns +beth +morton +tops +harassment +atlas +fl +blackwell +viewer +cooking +sunset +jerome +ser +finances +fighters +ribs +labourers +larvae +subscription +tapes +bees +palms +commentators +loneliness +authorization +creditor +penguin +prognosis +routines +justices +drought +mansion +ruin +rocket +closet +candy +venezuela +evaporation +notification +italians +bandwidth +performers +tablespoons +hate +ministries +julie +violet +garcia +jenny +liquids +reminder +edema +descartes +travelers +eleanor +dept. +retardation +blades +pop +learner +examiner +matt +taxi +frost +raid +inmates +openings +tenth +builders +rev +republics +colonization +buses +bargain +irritation +blame +do +festivals +discrepancy +sweat +printers +rupture +correspondent +hindus +vowel +instincts +abdomen +divinity +dissatisfaction +linear +selections +springer +lucas +epithelium +banner +lag +ho +saunders +trigger +pistol +contemplation +matrices +civilians +urgency +affiliation +pa. +tens +storms +compass +pyramid +clarendon +hurry +tricks +uranium +pensions +harriet +subdivision +hospitality +bean +astronomy +patricia +contingency +dancers +workforce +sail +riots +sermons +strands +partnerships +vaccine +mold +anemia +memo +registers +nausea +averages +broadcast +graduation +berry +monte +edn +fetus +sixties +bloc +garbage +skirt +guru +gossip +inversion +injunction +weeds +prisons +slaughter +prosecutor +cousins +imposition +russian +generosity +rand +guatemala +hips +pasture +app +policeman +colonialism +baseline +patriotism +multiplication +kilometers +nasa +tuition +rivalry +compartment +clerks +legislators +robot +carroll +condemnation +predecessor +delinquency +vermont +licensing +offers +fischer +deployment +preoccupation +basil +primary +toe +bleeding +toll +onion +stockholders +richards +prejudices +friedman +enrollment +satellites +fragmentation +cruise +slides +procurement +ballot +prussia +enactment +theodore +bliss +potter +anomalies +vitamins +nazis +soc +millennium +mainland +technicians +tablets +visibility +xiv +donors +tommy +curse +fishermen +wonders +guess +webb +semiconductor +garment +sensors +oven +fat +cc +cr +fuels +grams +offender +colin +hats +idealism +parsons +flags +vis +goat +assay +morrison +amusement +abuses +bitterness +evenings +subjectivity +farewell +hesitation +canals +agony +screens +ap +chemotherapy +dec +brow +apartments +monthly +accession +creed +dislocation +pneumonia +secrecy +aesthetics +impetus +ideologies +notebook +trademark +profitability +bicycle +workmen +prominence +marion +carbonate +chi +dale +doll +patrons +alcoholism +headings +fletcher +nouns +er +twist +folds +ancient +breed +spacing +sands +pioneers +catholicism +reid +ether +jokes +localization +charleston +punch +francois +rosa +bombing +fist +humanities +aggregate +pork +seals +shortcomings +excretion +shirts +thirties +rd +consulting +lynn +vomiting +occurrences +scan +chen +recipe +characteristic +rhythms +cameron +ammonia +warnings +curtis +landscapes +mound +candles +cables +jesse +telescope +schwartz +bile +drums +alphabet +browser +constantinople +castes +guitar +hemorrhage +openness +democrat +recurrence +singers +fluorescence +stature +parity +foam +infarction +factions +congo +trails +fare +atp +pollen +riches +proceeding +spark +clinics +medicines +salvador +pilgrimage +newsletter +ft. +corpse +librarian +gown +chromatography +twenties +feasibility +trout +slot +proletariat +incision +fidelity +composers +vanity +jung +patterson +blair +beck +confederation +humility +cartilage +lineage +eddie +offences +loops +flock +dissent +biopsy +nail +scent +rivals +gnp +phoenix +photographer +pl +pre +coats +augustus +tech +scarcity +foliage +giant +rabbits +motifs +stern +salad +nobles +paralysis +founders +alloy +regret +ferdinand +bronze +independent +bulb +choir +prostitution +proofs +personal +giovanni +orthodox +mol +authenticity +englewood +medicare +superior +hints +goethe +houghton +brace +assassination +arbor +soda +localities +illnesses +rider +transparency +heel +prague +mole +rebel +garments +teenagers +bulgaria +mcdonald +cohesion +peking +sanction +digestion +isbn +faction +brotherhood +highlands +co2 +ethic +beaches +kinetics +gambling +coleman +fancy +explorer +bushes +hayes +omission +os +ag +ghosts +launch +highways +drawer +vendors +pillars +grievances +presses +dealings +rebecca +continental +violin +pillow +shelves +airline +slice +global +insulation +col +snakes +digits +ba +complication +scenery +sabbath +pigment +taxpayers +heath +packaging +silica +nightmare +uganda +collectors +inferences +chester +electronic +aggregation +crow +bangladesh +builder +dark +heap +subset +morocco +demons +carlo +musician +reverence +mouths +peters +ware +strokes +edith +refinement +elaboration +statues +chronology +anguish +theologians +password +bend +exhaustion +mss +physical +ci +jupiter +surgeons +humour +inner +stool +quota +secretariat +calf +nut +durham +coke +auction +nicaragua +wines +excavation +massacre +mirrors +dis +dwellings +magistrates +lad +bucket +microscopy +automobiles +poultry +crews +messiah +facade +secretaries +brands +aftermath +grin +bryan +fuller +ce +holocaust +homework +sensibility +developer +exodus +curtains +ghetto +beneficiary +diets +todd +interdependence +uterus +gay +puzzle +affirmation +trousers +endurance +burdens +inertia +lending +tibet +morrow +footsteps +expectancy +shear +envy +intestine +ibid +barley +rhode +push +poll +crawford +wills +howe +diarrhea +dots +landlords +processors +fraser +bricks +landowners +seriousness +cong +installations +totality +carnegie +borrowing +sewage +jeffrey +paste +inequalities +rumors +mc +tyler +cocaine +queries +oceans +hugo +dread +scheduling +classifications +abu +ron +duck +slices +administrative +can +pins +statesman +traps +whitman +transistor +piles +canoe +victories +capsule +subordinates +foucault +ethanol +psalm +sink +mist +apollo +swift +americas +fungi +periphery +caves +solitude +cruz +sofa +te +digest +coercion +neighbourhood +aa +ecosystem +spectators +provincial +vengeance +jewelry +naples +premier +viewers +dresses +packets +skins +sincerity +db +rom +disks +bachelor +inventories +tracking +sandwich +geoffrey +slab +coffin +giants +hamburg +rochester +worms +vivo +nepal +broadway +melting +degeneration +fabrics +lust +seminary +fourth +maturation +nationalists +abstracts +constituency +microorganisms +parcel +groundwater +lang +aliens +bach +scripts +boot +incubation +supports +becker +odor +solubility +immortality +animation +religious +goodwill +alley +sue +robe +interruption +watts +obesity +cherry +trench +excavations +joel +treasures +royalty +asylum +dissociation +looks +fascism +del +jenkins +substitutes +pipeline +materialism +grandparents +spouses +crusade +turbulence +grandson +beethoven +unrest +laundry +jennifer +claire +feminists +ar +barber +revolutionary +halt +cicero +privatization +nehru +bullets +randolph +negation +cecil +redistribution +marc +enclosure +disciple +walks +payroll +kay +garlic +krishna +singing +diversion +jeans +bolt +katherine +vancouver +integral +mat +uncertainties +sandstone +plight +formulations +polls +psychiatrist +determinations +tomatoes +cyprus +cu +brightness +contours +brackets +m.a. +ribbon +harcourt +o'brien +orientations +hz +dissemination +computing +metabolic +psyche +biomass +ferguson +forecasts +grande +divergence +misunderstanding +capitol +saul +op +disgust +intrusion +ridges +adolescent +header +generalizations +misfortune +rifles +commencement +fundamentals +dilution +outlets +travellers +refrigerator +switches +compilation +danny +presents +goats +vatican +gateway +translator +olds +plastic +buenos +dementia +starch +inventions +molly +malaria +actress +outlines +hairs +impossibility +genome +wordsworth +caps +diamonds +instructors +synagogue +horizons +marines +cooperatives +satire +worm +addison +troop +lecturer +saudi +persia +sixth +counselors +drilling +lanka +goodman +auditor +banker +catastrophe +principals +canadians +clash +knot +collagen +fibre +proponents +constructs +bat +arab +carbohydrate +norfolk +disasters +jurisdictions +transmitter +offenses +wagons +sharon +methyl +fitzgerald +pits +youngsters +liaison +penis +liberalization +starvation +predicate +rhodes +elliott +myers +voter +kingdoms +tense +backup +torah +ozone +vibrations +contrasts +capitalists +thigh +whale +wellington +chickens +website +thief +biochemistry +makeup +mead +nashville +ecosystems +neil +rite +tongues +ultrasound +plastics +cleavage +polity +disintegration +blankets +concerts +kaplan +spectroscopy +driving +estrogen +isaiah +nova +hoffman +legislatures +lexington +constitutional +gut +moral +platforms +quarrel +brunswick +ionization +milwaukee +discontent +hymn +bud +raids +monograph +reprint +ventricle +strife +stratification +indignation +clifford +englishman +sweep +defiance +uprising +lever +remnants +blows +habitats +johann +awe +twentieth +mosaic +battlefield +imbalance +pesticides +charcoal +meadow +hawk +rich +brook +towel +retrieval +epoch +kidneys +tap +umbrella +attractions +xii +the +bite +essex +cathode +humiliation +believer +confinement +barracks +mall +barrels +mobile +kaiser +hegemony +linkages +ordination +rapids +stands +seminars +lions +grapes +plug +serpent +ending +fats +den +idaho +consul +cans +springfield +sack +aires +multiple +muslim +illusions +ada +extremity +adequacy +passing +medal +magnet +cessation +citation +tile +allied +romania +clip +dos +apology +ngos +fascination +tire +genera +groupings +coating +cytoplasm +galleries +algeria +mentality +blockade +interviewer +keynes +imf +ceo +matches +rockefeller +trajectory +repertoire +grocery +ham +dough +allegations +yoga +unesco +weiss +municipality +subcommittee +cough +pluralism +fireplace +needles +ounces +eighth +leads +champagne +functionality +pillar +mn +blindness +des +rival +treason +precursor +esther +vernon +acquisitions +leverage +queue +sulfate +putnam +convent +terrorists +diaphragm +pierce +sights +gum +ieee +roofs +defenders +dancer +compatibility +ppm +viability +arrays +roland +totals +longing +conn. +o'connor +melville +regiments +complexities +sleeve +matching +stamps +retailers +applicability +contour +constitutions +necrosis +irish +accusations +ceylon +mexican +engels +appl +crossing +blend +nets +salisbury +apex +recollection +knots +roar +electorate +adhesion +demise +supplements +adaptations +acetate +novelty +egyptians +hymns +shocks +bearings +delegate +hit +carson +surge +founding +tendon +workings +bubbles +neutron +clarification +u.k. +penn +hi +int +necessities +rack +expiration +equivalence +yeats +lowell +syllables +wedge +tucker +kirk +mackenzie +flank +shortages +directives +teens +infiltration +municipalities +hardship +turmoil +epic +influx +scots +bytes +annum +wheeler +semester +brahman +acknowledgments +transcript +cleaning +etiology +uniforms +helicopter +motivations +rigidity +ingredient +competitiveness +frog +parasites +cl +epidemic +wavelengths +costumes +baths +stat +eyebrows +declarations +cosmos +santiago +richness +robbery +rocky +indictment +glue +fauna +mp +tails +trader +arches +opium +assertions +cop +utterances +basins +businessman +aperture +buchanan +tanzania +pavement +ludwig +boyd +editing +grasses +appropriations +conservatism +mucosa +gould +substrates +brake +vs +lace +implements +determinant +burst +parentheses +masculinity +anthology +calculus +premiums +ornaments +onions +deflection +lipid +demon +beverly +mexicans +flap +greater +accountant +distrust +mosque +edit +fifties +coordinator +leukemia +diversification +foil +herb +heinrich +gen +doubleday +staircase +friendships +anthropologists +hostilities +rick +canterbury +guild +pilgrims +appliances +shipment +embryos +bike +clement +checklist +cloak +legion +fines +municipal +simple +reef +condensation +cache +petitioner +gospels +cue +roller +modelling +nationals +derivative +incarnation +kernel +ceramics +walsh +retina +shirley +eqs +apostle +butt +deities +proton +congestion +schneider +logan +inlet +coaches +ne +leap +boiler +fringe +ditch +grandchildren +filtration +rainbow +alberta +isle +shrubs +competitor +ligament +searches +pamphlets +lancaster +barker +mozart +endowment +hen +buying +tents +algebra +lb +rains +coleridge +exhibitions +salesman +approximate +mast +katz +spy +spider +feel +lender +exterior +sailor +marcel +chord +constable +belts +floods +revisions +causation +enrichment +bears +librarians +pitt +worksheet +lynch +manifesto +kuwait +perkins +wants +dial +nitrate +tombs +heroine +summers +neighbour +hectares +questionnaires +insecurity +awakening +divide +percy +judy +velvet +mentor +signatures +petitions +pills +weekly +commentaries +yearbook +stain +might +protagonist +miguel +urbanization +sufferings +knox +macro +expulsion +willie +cellulose +armor +integrated +dixon +stenosis +drake +cork +locks +lou +sharing +restraints +citations +curvature +straits +adversary +orthodoxy +quotas +propensity +piston +tiles +solvents +airway +heterogeneity +rotor +eva +murderer +understandings +hawthorne +punjab +registry +vocation +ancestor +informants +aide +adulthood +hansen +griffin +ind. +hardness +meadows +monsieur +mayer +suspicions +folly +applause +holding +lyrics +relativity +athlete +hastings +probes +protons +studios +disney +wizard +sociologists +spp +superiors +firing +killing +stiffness +freeze +insult +eligibility +rectangle +genres +wade +weekends +barrett +hallway +controversies +u.n. +masonry +freedoms +niche +modulus +activism +roth +spear +capitals +instrumentation +nobel +italics +peasantry +liquidity +observance +deadline +murders +distortions +filling +mysticism +werner +hydrocarbons +christine +haste +promoter +skies +aggregates +troy +livelihood +aluminium +performer +plaque +hutchinson +fanny +subsidiaries +poster +regularity +clarence +australian +ankle +syllable +merrill +cromwell +splitting +accessibility +plenum +selves +flats +cambodia +spokesman +oaks +trash +accusation +antenna +endeavor +eec +yarn +fronts +sophistication +tan +knives +squad +andre +countrymen +therapies +worry +capt. +williamson +galaxy +humanism +scholarships +duchess +medieval +chiang +ukraine +adjectives +writ +forbes +fabrication +atomic +hemoglobin +resection +commandments +levine +artisans +holiness +differential +mar +spoon +injections +wise +cohort +nam +facets +fulfilment +obsession +carbohydrates +steering +expeditions +acknowledgment +evacuation +wolves +countenance +georges +bundles +psalms +civilisation +paulo +passport +agnes +brokers +dent +proprietor +prudence +changing +oecd +muller +insanity +optics +doctoral +bosom +beacon +greed +diaries +mare +dans +algae +wolfe +lt. +schuster +playing +forecast +upwards +ns +congregations +accommodations +lump +sanders +topography +barcelona +jacobs +academics +nuns +evelyn +amplification +ja +to +smiles +willis +wto +andrea +baskets +memoir +dissection +ratification +buddy +coll +abbreviations +capacitor +essentials +credentials +revolutionaries +weaver +sylvia +dickinson +feather +cod +causality +greg +footing +currencies +cedar +endorsement +dialectic +wa +photon +stakeholders +graft +attenuation +diane +outsider +occlusion +hydrolysis +skinner +khrushchev +berger +humphrey +astonishment +gradients +comrade +judah +equivalents +cookies +stakes +cube +macarthur +hermann +backing +jeremy +mediator +intensities +nt +modernism +embodiment +infinity +widows +scanning +infringement +pollutants +reflexes +passes +double +democracies +honors +disarmament +marquis +jaws +carr +chang +anxieties +taft +pursuits +herds +licenses +jon +tort +vowels +policemen +celebrations +elementary +nash +emptiness +empowerment +tractor +swords +chaucer +hedge +programmer +pardon +peel +chess +recombination +whereas +captains +birch +walt +outer +copenhagen +angela +morbidity +pronoun +gill +litter +fda +continents +computations +responsiveness +poisoning +boulevard +commune +bondage +precedence +mrna +sanitation +levi +originality +oscillations +marijuana +teresa +epidemiology +tags +authentication +dusk +collisions +clayton +planters +interplay +exposures +visualization +bolts +former +acad +hare +slogan +likeness +chlorine +cakes +nests +nos +ambivalence +entrepreneur +jessica +permits +gale +sidewalk +electrical +gallons +converts +ammonium +ropes +poe +fore +denominator +hyde +milieu +francs +thighs +aquinas +peptides +rhodesia +posters +derrida +oxides +onwards +uniqueness +confines +huntington +attendant +bernstein +noises +ants +liturgy +chalk +jewels +gentry +seventies +peas +equals +granules +accountants +clinicians +whitney +elephants +din +potency +headaches +protestant +ginger +recruits +bp +fights +moonlight +annuity +faulkner +manhood +sinclair +balcony +bastard +sponsor +empathy +sartre +rica +syndromes +burning +eng +steroids +sustainability +cereal +echoes +nazi +vagina +ai +overlap +moods +dip +prizes +barton +dialects +benson +lambert +superstition +nc +pier +ulcer +thieves +visa +fertilizers +mme +cursor +desktop +us +leakage +dawson +depot +clinician +traveller +decrees +consolation +liquidation +lyons +transference +growers +recipes +disparity +select +compulsion +lyon +billions +dilemmas +justin +benedict +bowls +zurich +audio +riders +inadequacy +downs +epilepsy +prerequisite +rapid +miranda +torque +oracle +tub +ithaca +neutrons +grandma +conductors +skepticism +vigor +donna +countess +mussolini +pueblo +subordination +galaxies +armed +detectors +gloria +compiler +dogma +leagues +dm +bureaucrats +ace +queens +predators +rao +craftsmen +tutor +xiii +conf +rails +maiden +fritz +canopy +sitting +drafts +ingenuity +sedimentation +hobbes +automatic +kurt +polish +prostitutes +bombers +jensen +propriety +cops +breakthrough +strait +theatres +massage +glenn +basics +multiplicity +ta +manuals +wild +mifflin +dentist +traveler +neuron +realms +engl +geol +kathleen +advisor +bitch +windsor +matthews +monica +bang +whisper +inhibitor +stadium +rosenberg +gloom +confessions +frameworks +arrests +virgil +betrayal +bet +alzheimer +sheath +accessories +pronunciation +lopez +hale +memphis +bradford +piaget +dancing +triangles +gangs +ponds +sen +dams +standardization +wittgenstein +preston +fermentation +lester +offshore +pascal +womb +shields +disapproval +turtle +journeys +harding +wording +reciprocity +vine +stratum +pixels +witches +warranty +dover +subscribers +abbot +primacy +glen +chandler +dispositions +isabel +registrar +hawkins +metropolis +insurer +cpu +unix +sicily +preachers +rides +recollections +inspectors +philosophies +positioning +brief +peril +as +stanza +grouping +referendum +civilizations +contractions +scroll +foreman +sao +ti +casting +cylinders +constantine +budapest +xv +congressional +trailer +banquet +dash +releases +hurricane +veto +trunks +cellar +newcomers +capacitance +backbone +rob +packing +siberia +salem +beatrice +manor +ancestry +lipids +thirst +replies +allusion +via +maple +modem +undertakings +peptide +toast +lima +nuisance +buds +polarity +binary +cunningham +affections +baggage +galileo +wyoming +correlates +dry +fertilization +homicide +guardians +shrimp +twin +gladstone +antagonism +steamer +pines +exp +issuance +highland +menace +correctness +pas +pancreas +cancers +knopf +earthquakes +huts +tires +seedlings +microwave +j.m. +ethos +secondary +dues +sects +wards +griffith +casey +mainstream +biological +bruno +judicial +bihar +raja +ascent +say +haiti +archive +han +urea +tonnes +burn +glossary +inception +erection +mesh +tonight +raising +avenues +dichotomy +ox +o'neill +reunion +comprehensive +grandeur +guise +va. +rama +vintage +proficiency +contracting +safeguards +build +vesicles +gram +gratification +sulphur +heidelberg +priesthood +monasteries +confidentiality +biographies +plymouth +molar +hal +ge +retrospect +keeper +romanticism +kilometres +dialogues +adler +attachments +almighty +inventor +pharmacy +vegas +amanda +forecasting +pike +increment +cores +lien +veteran +extremities +assam +mergers +greens +institut +chores +uv +ordering +liu +sweet +icons +shoots +impurities +sean +gatt +prelude +bolivia +vera +proverbs +analog +portrayal +perimeter +courtroom +fools +congressman +robes +issuer +berg +pill +sufficiency +tides +jurisprudence +platinum +narration +flying +repentance +jurors +fossils +steward +pe +transformer +kinase +dharma +ambulance +downstairs +sandy +stripes +swan +tr +manure +beats +relics +shit +adherents +greenwood +transplant +rf +rt +sac +lordship +pratt +georg +helmet +winners +insufficiency +microphone +coconut +gaulle +witchcraft +paradigms +excerpts +shoot +adultery +vault +carotid +inferiority +outfit +deborah +segmentation +indianapolis +helium +vines +stanton +mint +pronouns +viceroy +belle +leopold +thinker +biophys +sr +embrace +mitochondria +fleming +sandra +outrage +harness +biases +verge +rum +ornament +educator +exhaust +diode +purchasing +whiskey +appellant +maya +generators +soccer +im +cbs +whip +pitcher +circus +iq +turbine +pests +nile +pores +hatch +fishery +fibrosis +trinidad +ducts +babylon +flexion +aorta +thames +claimant +float +handwriting +trenches +hearth +interrogation +rental +mutants +coasts +fernando +borrower +specific +hose +ducks +canton +palette +leases +lin +axe +reactivity +mushrooms +girlfriend +handkerchief +cock +garland +defender +counters +protector +zimbabwe +sioux +abnormality +apprenticeship +dana +syracuse +enamel +parlor +cologne +doe +queensland +volts +ecstasy +shipments +cascade +directories +saw +brandy +ahmad +punishments +ordinances +distributor +fry +whales +tx +rib +hub +versailles +cowboy +dunn +lounge +hardships +baking +winters +macrophages +vladimir +spores +judgements +bloomington +baghdad +torch +tenor +homage +waiter +acting +randall +isotope +cam +motherhood +deletion +irene +wilkins +faber +shooting +gerard +ulcers +hammond +lydia +convection +amazement +tablet +excel +fm +gorbachev +notre +chuck +moderation +maze +borough +downtown +jackie +reconnaissance +sludge +discrepancies +authorship +climates +socks +presbyterian +riley +goldberg +planting +gore +so +amos +carey +coatings +pizza +mario +payne +havana +playwright +distributors +tensile +crores +constituencies +sponsors +bbc +jesuits +completeness +literary +ezra +malaya +disgrace +scar +admiralty +dislike +disobedience +nacional +donations +alien +pentagon +coils +sleeves +euro +fowler +pirates +invaders +u.s.s.r. +decentralization +selectivity +mourning +actuality +flute +indulgence +a2 +bug +formulae +ignition +scars +sophie +sinus +indebtedness +exaggeration +sophia +phenomenology +lorenzo +oscillation +arrogance +voltaire +auspices +primer +ir +exemptions +feminist +precepts +hurt +iceland +tactic +hinduism +hampton +libya +handles +aversion +lost +yang +regulator +diocese +trough +cysts +coastal +atrophy +josh +shuttle +resolve +mohammed +wide +keller +theaters +apartheid +reactors +sacrament +eruption +dodge +browning +maritime +cricket +probation +bates +impatience +spectral +foe +clare +solvent +cns +inconsistency +ida +scratch +voltages +dispatch +depiction +isles +morse +is +scouts +pelvis +prescriptions +corinthians +lore +br +dyes +groom +remembrance +junk +greenhouse +thanksgiving +empires +crosses +governing +ounce +vinegar +screws +bracket +sinai +excesses +universality +trumpet +zoo +deference +sculptures +sundays +aisle +malnutrition +revelations +twain +reservoirs +ibn +dwarf +niece +endings +orlando +germ +assent +paula +confederacy +attendants +collier +horrors +malice +fraternity +sess +ledger +activist +escort +phones +empress +plurality +manganese +locals +attribution +acquaintances +tavern +butterfly +emperors +owl +lance +phd +neurol +runner +seymour +chimney +volatility +patriarch +asymmetry +desirability +mb +occupants +logistics +filaments +cation +calling +summons +valence +decedent +contests +cartoon +rouge +berries +fits +hg +federalism +spleen +laurence +shillings +quinn +bedford +cor +cocoa +bryant +nationalities +leonardo +worries +router +palaces +gertrude +next +puberty +monographs +sculptor +occupational +lindsay +polymerization +cereals +emergencies +tar +jars +oversight +nutrient +hierarchies +hooks +toxin +captivity +solo +decorations +boyfriend +kingston +olson +desperation +lu +lc +overtime +helena +utopia +photons +bonn +creep +anthropologist +homogeneity +smithsonian +seq +unwin +dye +palestinians +ds +biotechnology +sr. +chronicles +researches +nina +madam +groove +traction +sparks +rita +viewpoints +elegance +eloquence +absolute +irwin +perfume +genet +mortgages +boarding +discs +juvenile +sails +palate +denis +grievance +rene +perfusion +hysteria +lanes +accompaniment +concord +closeness +acknowledgements +marco +administrations +bismarck +woodland +johannes +cords +medicaid +anarchy +lieu +grease +insurrection +beverages +supporter +persian +femininity +suez +nun +suction +simplification +hartford +proprietors +spacecraft +epstein +iris +forts +pets +abel +epistemology +cigar +markings +elaine +raphael +flask +winchester +retaliation +deliberation +curricula +repayment +sharp +cones +bearer +edison +harlem +intolerance +hospitalization +methodologies +fences +dove +atm +redundancy +rations +jill +th +ulster +scalp +zeus +predictor +interchange +wu +handicap +ordeal +blind +ana +statistic +marilyn +shapiro +modesty +resume +cynthia +bangkok +dialysis +yen +solute +reinforcements +jeremiah +parable +angola +mhz +explorations +pixel +maxim +midwest +ensemble +goldman +mischief +nomenclature +rhyme +drew +oscillator +lo +martyr +sclerosis +shale +voyages +sheridan +psychiatrists +herr +chan +briefly +skirts +hits +discounts +stuttgart +cutter +dow +denominations +goldstein +platelet +transcendence +sebastian +realist +regulators +whitehead +marina +fullness +serbia +staffs +immigrant +technician +cancellation +speaking +parishes +yahweh +headlines +importation +divers +motto +menus +circumference +cabbage +outward +vase +tumours +two +isabella +resistor +coma +eminence +dolls +pediatrics +gentiles +katie +behavioral +bugs +doom +on +wilde +aura +managing +ni +ax +fa +planner +situ +spies +tions +excellency +walton +hemingway +dwellers +ames +ski +coagulation +pastures +boredom +median +bidding +shannon +remuneration +av +p.2d +kerr +lawsuit +snyder +predicament +donation +diagnoses +koch +realisation +flaws +mayo +pickup +nora +genocide +newport +browne +statesmen +stephens +contingent +classmates +disbelief +pathogenesis +ts +url +assemblage +belfast +sensing +picasso +peggy +allegory +allison +lobes +speculations +sweetness +stagnation +intermediate +disguise +populace +teenager +elliot +outflow +lasers +protestantism +allergy +salinity +rug +barth +entirety +cherokee +pretext +wilkinson +inc +feb +summaries +kerala +fission +duplication +gupta +aspirin +sacramento +heroin +vernacular +analogies +rex +pathogens +regent +dictator +vacancy +marvin +respiratory +brady +nathaniel +martyrs +archer +giles +pearls +seventh +legislative +complexion +consortium +saviour +mates +psychol +dismay +norris +photographers +hue +entropy +pseudo +steele +helper +bomber +guerrilla +tsar +amenities +rm +rebirth +meredith +acta +compliment +containment +greenwich +disagreements +scotia +seamen +observatory +honolulu +contributor +cooperative +doyle +pcr +arithmetic +vices +coli +cavities +tropics +benches +ischemia +sinners +luggage +differentials +photosynthesis +championship +slate +heredity +analytical +jamie +receivers +nodules +competencies +rhine +cadres +arousal +halifax +kyoto +landmark +dwight +miriam +glare +hank +booklet +noah +titanium +rector +clyde +groves +dissipation +flint +rubin +testosterone +whistle +valentine +toolbar +an +pilgrim +salon +organizers +discharges +regimen +levin +tracy +taking +deformity +brutality +assays +psychological +savior +bologna +nichols +lantern +englishmen +pads +heresy +methane +monsters +mutual +chromium +abbott +asbestos +annexation +logos +brooke +cumberland +preaching +compartments +passim +deterrence +generality +mich. +nostalgia +alps +gibbs +precursors +capillaries +antony +backwards +resins +ingestion +lining +scissors +sap +misconduct +tunes +rue +immersion +au +scout +pony +distraction +thatcher +forties +starts +parole +cradle +tempo +miner +lenders +equator +occupancy +camel +madonna +devils +asian +helsinki +geological +favorite +interpreters +patriot +diploma +pigments +phillip +masterpiece +sussex +iteration +jm +rehearsal +calves +prologue +diesel +creations +martinez +lithium +bulbs +karma +armour +ashley +smart +damascus +kissinger +scaling +exhibits +steels +carnival +pedagogy +treatises +casualty +joys +francesco +worcester +petals +chaplain +stella +louisville +dislocations +deutsche +continuance +casino +disregard +uruguay +furnishings +ricardo +typology +oz +rosen +stigma +hooker +penicillin +adjective +diligence +psi +auditors +elbows +comp +gatherings +oakland +broadcasts +jennings +shorts +solicitor +metastases +syrup +encoding +anton +huxley +rally +washing +rc +bosses +elsevier +ganglion +vertex +halves +hubert +motel +zambia +console +stokes +alcoholics +promotions +fallacy +reagent +fcc +newcastle +clocks +hybridization +lbs +fold +dudley +precedents +oct +doug +metro +gait +pornography +ontology +israelites +radiology +oedipus +transfusion +homestead +conciliation +burgess +kane +waiver +jessie +orissa +constellation +fists +everett +jules +shelters +longevity +sabha +elevations +parody +highlights +saline +airways +pick +boris +radioactivity +increments +noel +celebrity +imprint +xx +seoul +wreck +allocations +emulsion +mounds +seniority +driveway +lesbians +holly +relocation +survivor +lotus +wares +raven +sheffield +lily +parkinson +operatives +pane +peculiarities +ethylene +crystallization +charms +summation +leone +playground +converter +gage +kick +magnification +em +zion +folders +savages +excursion +shafts +iodine +bi +brink +carlyle +xvi +teller +kegan +metabolites +modalities +ruby +mules +lan +tc +seniors +keywords +simmons +paddy +philippe +submarines +korean +staining +monopolies +bananas +robots +tenets +primates +corridors +abscess +cholera +fine +forster +battalions +np +tamil +laos +synod +secretions +basel +rupees +hussein +ceilings +facet +rodriguez +boil +aides +maneuver +recycling +erie +boycott +secession +mornings +hybrids +idiom +impurity +clergyman +sears +orchard +aptitude +proxy +canons +abdul +pantheon +taxonomy +cooke +centralization +competency +clans +eeg +boyle +deliberations +delusion +monitors +messengers +excuses +templates +coping +determinism +orbits +breeds +frogs +spindle +arbitrator +consultations +suburb +spices +assurances +leigh +hide +s.a. +lava +erasmus +savage +amber +visual +deserts +somerset +prism +sages +eliza +savannah +aug +sigma +platelets +emigrants +gi +advisors +ulysses +sm +atkinson +artifact +stereotype +sway +quarry +annihilation +dessert +reins +rumor +turf +ambassadors +leeds +goose +en +hydroxide +treat +poetics +loyalties +butcher +wm +frenchman +m2 +devaluation +royalties +sender +ned +genealogy +ecuador +misuse +droplets +chemist +programmers +helplessness +dualism +cio +mould +manning +dl +trio +sugars +slabs +yours +fisherman +sd +caregivers +chords +forearm +hp +outskirts +placenta +molecular +spike +socket +dramas +hollow +childbirth +aborigines +ark +implantation +kitty +jewel +bluff +rh +bids +vigilance +sayings +lea +controllers +theses +contingencies +syphilis +als +runners +mae +douglass +semitism +juncture +deliveries +tunnels +glacier +subdivisions +leningrad +anglo +concerto +libel +exertion +restitution +lawson +oats +kahn +stall +csf +thrill +achilles +heater +trance +sandwiches +elijah +opposites +wolfgang +sympathies +sutton +ivy +courtship +garrett +connexion +gamble +greenberg +sunrise +horseback +hanson +luxembourg +bois +rinehart +tate +flocks +vista +permanence +historia +adrian +geographic +macbeth +gonzalez +phenotype +seekers +arrivals +convoy +tomography +hard +steiner +neurology +plus +sung +surprises +dice +micro +dalton +lapse +synchronization +bust +allusions +hector +ration +ballad +yacht +tomato +ae +vogue +yearning +ramp +mack +diaspora +fasting +polly +take +extreme +vortex +acreage +diplomats +filament +intoxication +volcano +bursts +defences +networking +yellow +hypnosis +approximations +repository +nostrils +sterilization +takeover +vantage +exams +slit +baxter +pens +annex +derek +fill +physicist +contraception +hire +woodward +reminiscences +bosnia +scribner +abode +keats +dehydration +variances +eddy +dunes +carrie +sociologist +gardener +pharmacol +jeanne +bl +hebrews +subsystem +r.a. +pasta +met +typewriter +vaccination +constance +lear +engagements +explosions +j.c. +spur +diameters +reclamation +truce +chariot +phosphorylation +foreigner +budgeting +rag +molten +rudolf +toil +waveform +roe +cola +nw +lisbon +flanders +rl +md. +font +kelley +seth +feat +showers +fluctuation +fixtures +asians +displacements +distillation +initials +correspondents +magnitudes +pans +pavilion +lymphoma +spruce +tolstoy +hillside +climb +purple +absurdity +operas +nicholson +repeal +augusta +carolyn +pharaoh +bombardment +nov +trainer +hancock +bauer +leicester +fungus +explosives +meridian +roma +castles +sutherland +collateral +thermometer +promoters +viet +coalitions +courier +benzene +courthouse +runoff +inflow +gin +organizer +saloon +niger +refining +byte +supposition +parasite +kramer +drawers +deterrent +autism +sol +questioning +vow +welch +broth +explorers +vacancies +santo +saga +gestation +swiss +botany +wastewater +lumen +shark +bulls +yoke +attractiveness +coward +supermarket +thrombosis +heroism +sinner +hypocrisy +armistice +psychosis +bait +reagents +tyrant +streak +rift +persona +brakes +div +infra +progesterone +newfoundland +ranger +corollary +gujarat +reimbursement +var +antagonists +ls +attic +venue +reptiles +companionship +doris +wrap +flashes +kai +southerners +packs +saturn +trainees +bats +connotations +discontinuity +zen +reel +porosity +spreadsheet +helm +divine +gloucester +influenza +oxen +cocktail +epistle +foodstuffs +bows +historiography +tachycardia +suture +eagerness +perez +honduras +purchasers +prefix +duality +large +thornton +staging +ills +paints +sumner +bedrooms +videos +wetlands +spinoza +cults +tenancy +bowen +c02 +kuhn +foreground +carmen +hypothalamus +caldwell +flakes +cabinets +lagos +blossoms +l2 +heinemann +hypotension +footnote +subscriptions +teddy +emblem +refraction +natures +pd +inst +watt +diplomat +scorn +raj +vows +cain +spectacles +malta +dom +full +pb +pamela +macintosh +scream +footnotes +spears +physicists +antecedents +kathy +picnic +hanover +beaver +archaeologists +thresholds +vigour +unionism +follower +oh +anecdotes +reformer +methanol +cobb +comte +slots +dictionaries +viking +apparel +jam +submarine +analogue +optimum +exponent +lyric +saddam +rags +suspects +offs +burger +interruptions +pigeon +composites +durkheim +novelists +ka +janeiro +predominance +annoyance +pendulum +invitations +coexistence +switching +salvage +shrinkage +platoon +gardening +microbiol +telephones +rabbis +lottery +headline +willard +cations +woolf +hobby +quotes +nicolas +johannesburg +touches +mev +seneca +delicacy +su +maternity +s.c. +composite +dominions +ses +paine +bert +sheila +labeling +staple +mecca +radicalism +subgroups +updates +guerrillas +subunits +eighties +immunization +vanguard +topology +outdoors +clips +catalysts +derby +rosemary +pastors +airports +melt +transducer +liz +toledo +petrol +beirut +portfolios +experimenter +benevolence +squire +um +nmr +husserl +bail +landmarks +jargon +calculator +eating +daisy +liking +eyelids +tournament +elias +irregularities +oslo +inconvenience +mailing +repercussions +perturbation +behaviours +tragedies +best +constancy +elk +jets +dist +immunol +capitalist +finds +dell +gallon +embargo +stains +pregnancies +hicks +ransom +alto +endeavour +badge +grape +nylon +policymakers +renunciation +nozzle +longman +deliverance +pleas +pharmacology +relay +pitfalls +brilliance +cas +butterflies +wendy +fieldwork +incest +l.a. +ester +tubing +breaking +peg +integers +eclipse +toxins +airplanes +newark +michelangelo +canoes +prostitute +predictors +freezing +christina +saliva +backdrop +remission +electors +tribunals +ores +chandra +ramifications +raft +listings +flaw +adobe +austen +timer +oranges +walnut +repeat +stockings +auditorium +additives +excision +recess +isotopes +germination +buckingham +yorkshire +claws +bartlett +engraving +serving +electrolyte +bolsheviks +rises +robbins +decreases +suzanne +ottoman +murmur +nod +piers +baton +amer +charters +cobalt +concentrate +overthrow +informant +vapour +miscellaneous +sanctity +vinyl +dressing +majors +inconsistencies +coals +permanent +assaults +reviewers +atrocities +inspections +merton +slogans +pesticide +zoning +docks +partisans +retailer +serotonin +warrants +schiller +rationalization +dryden +kaufman +corporate +herpes +raleigh +doppler +punctuation +psychiatric +mechanic +seam +carrots +mickey +thai +trajectories +patriots +brennan +ballads +terraces +fin +welsh +calhoun +canberra +praeger +sacks +chill +yankee +lessee +wolff +shouts +handler +regulatory +carts +rye +impotence +rem +coca +nairobi +cons +hail +shrines +professionalism +moody +pergamon +mozambique +obscurity +banana +rot +consonants +andersen +modality +destinations +wits +greenland +r2 +ankles +theologian +townsend +selfishness +adversaries +liberal +ganglia +deregulation +scottish +assortment +stan +frustrations +chateau +natal +pulpit +favorites +mattress +biodiversity +cyst +diaz +belongings +briggs +afl +c2 +philosophical +transcripts +remnant +ment +permissions +dulles +denomination +pauline +junctions +amazon +adelaide +histoire +ma'am +domingo +quarrels +meningitis +jeep +ca2 +lithuania +jl +apron +tanner +cottages +peat +p2 +dental +cornwall +manitoba +pius +cookie +sat +descendant +ethnic +stitch +rulings +esophagus +hallucinations +trotsky +wrongs +suspense +cushion +nbc +b.a. +suspect +balkans +rapport +goldsmith +juliet +puppet +tudor +tumour +mansfield +dinners +reviewer +nat +emile +clutch +inquisition +ancients +lafayette +parsley +excursions +rep +notch +mps +favors +chung +suitability +greetings +portal +firearms +whigs +brewer +advertisers +glove +latency +n.c. +traitor +warehouses +logo +sacraments +dependencies +stark +thermodynamics +gym +beckett +crossroads +stillness +reefs +reassurance +vertebrates +ethnography +coronation +smokers +yuan +endeavors +ea +counting +charities +stacks +protagonists +champions +howell +barbarians +progeny +abstractions +rectum +lett +scrap +bright +crater +labors +daniels +comb +pres +laurel +trent +oswald +mri +wong +accreditation +j.r. +nineteenth +gears +ces +bs +suitcase +publ +scatter +neumann +fashions +appropriateness +zhang +elongation +reaches +parallelism +ella +dopamine +inclusions +enumeration +italian +christie +crowns +grafts +intermediaries +vaccines +be +episcopal +alkali +exporters +normal +sweater +nickname +chick +vaughan +hydrocarbon +idols +czech +contaminants +conjecture +tokens +ia +abyss +homosexuals +antiquities +dee +martyrdom +ethel +vent +donne +drawbacks +payoff +josef +axioms +commandment +psychopathology +higgins +rapidity +constipation +legality +intelligentsia +transistors +andhra +latitudes +livingstone +hum +plank +postage +poker +yankees +remorse +cb +prerogative +baba +blackness +hartley +imperfections +precaution +bucks +michelle +implant +sanchez +towels +connector +rockets +detriment +kettle +israelis +subunit +interpolation +incense +dynamic +introductions +spells +cervix +inefficiency +polyethylene +meats +sponsorship +raw +forefront +marshes +fringes +siva +covariance +snack +gustav +borrowers +mis +peacock +floyd +necks +cos +macedonia +subway +tucson +signing +rupert +vertices +spines +insider +insert +bibliographies +pragmatism +clones +amelia +vicar +angelo +brochure +heather +anomaly +harrington +pesos +swami +kisses +diminution +riddle +congressmen +hostess +downfall +weed +repetitions +plexus +amnesty +postmodernism +apathy +culmination +mosquitoes +brushes +warming +albania +fortifications +chemists +omissions +septum +unionists +finn +bonaparte +honours +commentator +comm +democratic +centimeters +privy +wiring +fragrance +j.d. +cove +idiot +visitation +plasticity +cubes +saxon +maharashtra +marian +arsenal +eli +exiles +directorate +pont +scepticism +axons +encryption +entitlement +pros +downwards +rj +trademarks +i960 +ribbons +cabins +habermas +furnaces +captives +domestic +comet +subsystems +write +disparities +discord +tensor +cuttings +clays +conceptualization +meg +liner +debut +woodrow +etal +frederic +amplitudes +sucrose +predicates +warden +condenser +josephine +swings +stump +carriages +lahore +lai +apprentice +durability +loaf +m.s. +corpses +kendall +roberto +mustard +wrists +erik +casa +entrepreneurship +titus +upheaval +implants +foreword +conversions +bays +toleration +resorts +atrium +measles +connie +stride +sep +idol +r.j. +narcotics +expanse +binder +connectivity +rust +splendor +morley +html +residences +solid +rationalism +cleanliness +marty +lucia +converse +juveniles +biographer +based +fir +spa +caravan +quartet +exploits +abbreviation +lexicon +chat +glycogen +bypass +dominican +ruskin +deviance +democratization +frenzy +depressions +potentialities +nourishment +adjunct +qur'an +koreans +tunisia +conveyance +steak +adolf +barnett +stud +affiliates +eighteenth +mister +quilt +conduit +necklace +mediators +dictates +slums +aviv +barney +lp +sutures +tm +val +moth +luncheon +prohibitions +resistivity +bourgeois +romances +mats +aberdeen +dipole +imperatives +stationery +peck +guideline +middleton +tl +online +temptations +warwick +tigers +surrey +ligand +bearers +abortions +dehydrogenase +alumni +ledge +leibniz +sip +lionel +metamorphosis +stare +kumar +nasser +drawback +athletics +lowe +nr +homo +hyperplasia +arcs +underground +bo +acknowledgement +felony +kierkegaard +cds +calamity +crab +covenants +rig +greeting +lama +reg +mathematician +louisa +portsmouth +external +workman +geese +urbana +bentley +tilt +marcos +migrations +orgasm +fascia +agendas +quincy +convulsions +brecht +mj +billing +utensils +livingston +pouch +puritans +indemnity +announcements +v2 +noses +weavers +decks +syringe +babe +phyllis +ambiguities +saigon +pointers +spontaneity +wharton +passivity +incompetence +commercials +intrigue +papua +sentencing +treachery +bonnie +parliamentary +pessimism +harley +late +mesa +parting +disdain +invocation +boulders +backyard +hess +ah +decency +fluxes +ethyl +deacon +dillon +mum +lagoon +hanoi +four +formalism +lyndon +conductance +biologists +neurosis +grandpa +osborne +born +camels +parcels +compact +talmud +refuse +hilton +pasha +cortes +sw +know +conway +suffolk +inoculation +maneuvers +mandible +cassette +runway +alma +axiom +ans +donkey +centrality +melodies +sorrows +arlington +benton +tennyson +critiques +zip +draw +compromises +weimar +chu +portuguese +cass +swedish +trek +housewife +delusions +alison +mutiny +antoine +patton +retribution +jorge +conqueror +angus +pigeons +restatement +hides +chad +revolver +dispersal +manchuria +shepherds +lutheran +sikhs +islanders +jackets +bead +vat +contra +addicts +willow +beetles +sequel +cartoons +abstinence +subgroup +coworkers +randy +microbiology +edict +plumbing +bravery +eaton +helpers +villain +sloan +glaciers +bethlehem +lettuce +bunker +devon +yorker +curls +blouse +burr +alleles +provocation +mckinley +dp +intensification +moles +ambrose +carlson +fairs +bent +fares +inhalation +debtors +electrophoresis +fernandez +barr +ib +naturalism +mesopotamia +biosynthesis +collaborators +rowe +sahara +piper +turning +a.c. +crude +phi +affinities +specialties +consolidated +andreas +formality +breton +mw +marianne +pathol +swamps +jasper +affidavit +caller +pronouncements +pablo +outs +spectrometer +orbitals +textures +devotees +mania +stalls +bohemia +preview +respectability +esq +slips +amplifiers +menopause +sheldon +dependents +pianist +morphine +drosophila +repose +evidences +silva +evasion +bloch +proverb +pebbles +youngster +eagles +plywood +epidemics +overseas +circumcision +lillian +upset +fray +cadmium +cuff +theorist +j.l. +partitions +antwerp +novice +shout +bounty +je +mon +peanut +rajasthan +beverage +penance +cyrus +orphans +servitude +destroyer +foes +accents +leaks +rutherford +adjudication +burials +copying +advertiser +posterity +melissa +marjorie +antioch +chomsky +aurora +liar +est +gorge +crucifixion +exchequer +s2 +mercer +plo +midday +laurie +mosquito +beetle +ridicule +ligaments +scandinavia +liberia +mule +juices +zionism +bertrand +ezekiel +magician +cornelius +capitalization +normalization +senegal +comedies +lazarus +overhead +esters +hypersensitivity +residuals +mel +sewer +duel +pillows +sachs +indoors +crete +weston +anita +sweetheart +blueprint +lh +artwork +charley +persians +amateur +nielsen +fable +cuisine +istanbul +cruiser +haze +communes +richter +flat +intel +joanna +razor +comforts +palsy +magnetism +riot +hybrid +jc +workload +sulphate +indexing +worldview +chef +edifice +wallet +ep +notebooks +orator +sailing +spiral +gr +escalation +mongolia +schultz +selected +yu +insomnia +fright +lakhs +chunks +travis +salesmen +staffing +happenings +rubble +erich +barge +lancet +insults +triumphs +hockey +prophecies +dylan +lemon +briefing +methuen +conformation +inclinations +detectives +labs +triad +relativism +tito +industrialists +northwestern +tack +pink +rudolph +knock +pivot +j.a. +armaments +appliance +preponderance +rendering +fao +mckay +contrary +gem +pretensions +signaling +exeter +estimator +councillors +wardrobe +syndicate +perseverance +espionage +clover +brighton +planter +lay +olivia +stephanie +polk +talbot +brigades +barbados +revue +baptists +m.j. +asphalt +carpets +lighthouse +sera +balfour +void +rangers +wait +fins +ev +seafood +infertility +romeo +landowner +beggar +tuning +bd +spikes +try +cirrhosis +dive +mph +chastity +bentham +tonnage +dj +georgetown +shoreline +c.a. +poisson +desks +cosmology +cooks +banners +immunodeficiency +upbringing +vineyard +ranking +barrow +hercules +fonts +medici +mater +murderers +futility +rumours +niagara +machiavelli +quakers +dora +cutoff +petitioners +categorization +ill +workstation +surveyor +semen +clientele +acidity +temperance +apes +sharks +comma +plaques +agar +lorraine +mai +sacred +concentrates +behind +glaze +samson +robbers +estuary +outbreaks +cornea +subversion +departures +daly +compressor +facies +tractors +anecdote +incontinence +inauguration +asean +stupidity +transgression +glances +auckland +stalk +rafael +fodder +bottoms +sigmund +brad +patel +appears +congratulations +invasions +deportation +tug +croatia +buddhists +jonson +mini +coinage +lt +etiquette +solar +plum +cellular +munitions +muse +motorcycle +jameson +neville +trim +housekeeper +blanks +pyramids +jp +stables +mpa +christendom +convert +belgrade +safe +confederates +somalia +prowess +hypertrophy +dilatation +win +fumes +cummings +outburst +patio +brandon +armenia +cynicism +tungsten +fdi +licences +deceit +bites +josiah +australians +edna +chelsea +surpluses +admirers +bedding +hu +naturalist +wickedness +antithesis +kb +declines +powders +beauties +mercedes +rutgers +bowman +opec +excerpt +healthcare +utilisation +leaflets +canning +tuna +anc +buddhist +nave +burlington +bicarbonate +goodwin +lois +herring +fielding +lifestyles +hostages +mcclellan +mechanical +displeasure +marches +aerospace +hitchcock +spenser +fluoride +judas +paso +cn +thoreau +paperwork +metre +protectorate +chant +subtraction +buildup +kremlin +watkins +hirsch +mccormick +xml +leak +pam +astronomers +pcs +cyril +cleopatra +conquests +cupboard +feeder +faraday +desegregation +ramsey +labyrinth +peabody +tremor +eucharist +placebo +helix +falsehood +millet +cloning +sonata +lange +kluwer +malpractice +viewing +telling +westport +ventral +coastline +s.j. +coupon +funnel +habitation +twigs +scarf +rendezvous +seaman +vertebrae +indochina +dayton +vacations +caption +intern +gail +mural +jaundice +barium +scraps +commandant +semiconductors +deep +suffix +swamp +kindergarten +dagger +redress +archipelago +naacp +peirce +affiliate +h2 +moor +ordnance +wi +strengthening +gaas +fiji +rosenthal +fuss +hedges +probate +capsules +symp +chicks +catalogues +twenty +stafford +censure +medina +cis +pinch +showing +curb +mating +juxtaposition +pollock +buffers +caregiver +aj +ahmed +gaza +maids +donovan +puppy +wyatt +relative +elisabeth +ccp +brahma +hispanics +documentary +tina +sanity +herod +stalks +larson +seams +neal +suites +regina +efficiencies +flavour +whisky +or +fittings +scans +malignancy +starter +lowlands +altitudes +shunt +orient +cathy +nap +mo. +cosmetics +ic +positivism +unhappiness +vp +ovary +propulsion +satin +astrology +manipulations +interiors +paperback +camden +titration +avery +linux +starr +dodd +hoffmann +doctorate +phosphatase +shrub +sl +ku +gil +dowry +fu +serenity +stead +metrics +mixer +contentment +fulton +rodents +ale +marguerite +owens +brokerage +barnard +separations +appendices +walters +catalogs +minors +enquiries +drills +walpole +confucius +glaucoma +translators +welding +ching +grooves +a.j. +uneasiness +bourbon +parenthood +melanoma +brandt +kingship +prospectus +elect +pathos +sequencing +birthplace +proust +cares +ramsay +citrus +acceptability +cohorts +housekeeping +analyzer +apache +medals +boyhood +jewry +spasm +hypoxia +campuses +loci +relapse +delegations +tendons +assemblages +intermediary +interstate +theresa +demarcation +sept +locker +kosovo +sas +shaman +bedside +surf +warships +specifics +philippine +colt +cataloging +kerry +maynard +quote +refinery +clashes +feldman +southampton +guts +connor +scrub +dresden +labours +dramatist +galilee +ramon +executor +barons +overtones +drains +brenda +semblance +vocational +acuity +aneurysm +hanna +crook +foresight +hem +predator +betsy +bordeaux +dermatitis +trays +jonas +replica +alec +disclosures +wholeness +juries +pol +avail +lm +mores +shotgun +franks +monsoon +destroyers +sb +preliminary +longitude +restlessness +autopsy +citadel +blanche +preamble +gels +abduction +widths +forums +laborer +skeletons +seward +archaeological +hubbard +transports +despotism +boon +omaha +workbook +keepers +underwear +lawsuits +husbandry +jacobson +alfonso +rodney +sarcoma +subscriber +connotation +himself +spiders +mandates +unison +stanzas +nationalization +patrols +knob +sparrow +fossa +cad +sherry +mikhail +parenting +reds +rr +nightingale +odyssey +sawyer +m.p. +tubules +lambs +smallpox +tabs +oblivion +mellitus +splendour +numerals +marxists +assoc +heinz +bolton +kafka +helicopters +mechanization +vance +envoy +biscuits +ovaries +plasmid +envelopes +historic +xix +viral +havoc +spectrometry +fifths +burner +parry +josephus +afternoons +t2 +toby +contraceptives +attire +archibald +harp +sheikh +brows +carpenters +sausage +osaka +signification +navigator +crescent +cafeteria +sociological +usda +sabotage +mockery +lookout +sh +saskatchewan +abe +packard +horton +nucleotides +boost +prosecutors +serbs +ming +kiev +oratory +watches +gardiner +earners +residency +honeymoon +alvin +dubois +southwestern +anchorage +claudia +wharf +perils +sonnet +diction +implementations +rp +indus +jeopardy +botswana +quantification +cheers +buckley +strap +stools +anonymity +carbide +gal +salesperson +interim +resilience +underworld +burt +benny +kenny +nothingness +pg +bad +capillary +drafting +lippincott +jubilee +barlow +pore +firmness +alexandra +pest +rpm +bavaria +convicts +fingertips +lateral +jj +dutton +monoxide +elena +shipbuilding +trafficking +seawater +sutra +servings +tories +impeachment +chrysler +insurers +killers +lancashire +zero +emitter +antarctica +embroidery +corticosteroids +apprentices +ras +brute +invoice +affliction +grill +shovel +fistula +amp +» +waterways +waterloo +referrals +routing +accelerator +gems +peppers +claimants +seduction +scanner +mabel +flashlight +nightmares +wilmington +oaths +rugs +synonyms +j.b. +baden +braun +llc +lao +empiricism +anode +adversity +huang +scrolls +quadrant +papacy +affiliations +spokesmen +kyle +albumin +cockpit +guilford +vanilla +eastman +subjection +pharisees +reticulum +misunderstandings +auxiliary +hydration +furs +hug +colombo +twilight +motility +mag +sharma +turk +retail +incapacity +andes +referent +misfortunes +friars +pj +j.h. +labourer +polo +oysters +legislator +recruiting +nicole +ks +monterey +shortcut +chestnut +executions +nigger +forage +boone +rhymes +westerners +trainers +phantom +prototypes +dreamer +fountains +magnetization +trevor +heparin +mathematicians +enmity +gideon +menstruation +spinach +jehovah +char +otis +outlay +undergraduates +fictions +licensee +suzuki +popper +bookstore +immediacy +pac +bragg +soybean +laity +cv +stitches +brock +torment +hrs +horsemen +strikers +abby +originals +patriarchy +lib +bonnet +equal +radios +devastation +shake +n2 +naomi +criminology +intimidation +brookings +filler +feudalism +losers +goddesses +compliments +natl +paradoxes +remote +blaze +cures +provisional +reproach +blossom +exegesis +ninth +flush +schlesinger +praises +tact +sole +negatives +klaus +caries +downstream +tara +jug +walking +brigadier +mueller +exponents +olives +ptolemy +mucus +santos +nationale +imam +messrs. +adoration +maximization +piazza +better +palo +protections +acidosis +antagonist +sustenance +fluency +muir +gynecol +synonym +orchards +dissonance +videotape +freedman +guilds +turin +erythrocytes +mahogany +supplementation +insecticides +whereabouts +riverside +pal +namibia +monarchs +epidermis +refund +carlisle +lacan +forrest +subsets +erikson +j.e. +revocation +moran +moors +schubert +glimpses +gp +pirate +pietro +lund +vale +bermuda +strides +jade +elvis +listening +urethra +hogan +farce +settler +cot +alberto +entire +falcon +j.w. +marathon +newcomer +repertory +paraguay +yes +unwillingness +tributaries +caffeine +captive +misrepresentation +albuquerque +wilbur +blessed +intonation +mclean +electrolytes +printed +tailor +delirium +reasonableness +sonnets +throughput +feasts +inactivation +cf. +interrelationships +adaptability +bamboo +antiques +carry +coloring +pursuant +dump +philo +classic +carrot +heller +rwanda +alternation +cultivators +stretches +layman +commodore +tang +semi +boron +natalie +illus +screams +lobster +melanie +genoa +loom +lure +misgivings +sphincter +toughness +suppl +hiroshima +silt +tracer +minn. +taxa +craftsman +norwich +harlan +cultivars +dentistry +taipei +teen +intellectual +madagascar +frenchmen +shepard +c.e. +facie +elmer +sweets +paces +kemp +sem +mileage +scribe +colitis +flaps +hayden +nexus +grips +vineyards +institutional +dictum +godfrey +dissenters +beating +fla. +attrition +plume +slater +nice +bake +architectures +forks +hazel +regents +eros +pituitary +dissenting +replacements +anion +flynn +reno +cataract +effluent +chatter +mart +continue +weddings +yates +theorems +eradication +ascension +normality +radiance +turtles +chaps +poisons +femur +siegel +fireworks +stefan +festivities +torres +landings +orifice +ascendancy +stronghold +yemen +heretics +rg +thorn +beggars +cracking +maxima +encyclopaedia +reflux +lads +commun +quotient +pharmaceuticals +adapter +kitchens +uplift +tick +batter +confederate +mather +af +wheelchair +victimization +viola +resurgence +elm +anal +nuremberg +surname +searching +peach +rawls +flanks +hawks +prehistory +bedrock +fix +fervor +filipinos +holds +datum +oneness +prescott +prasad +footage +gaming +pellets +parson +swell +sn +byrd +hopper +forwards +r.m. +irritability +nero +incompatibility +dew +hectare +dizziness +handel +abigail +foci +covering +cornerstone +chou +ri +philips +framing +caucus +ecg +caucasus +tristan +hester +latex +tex. +impairments +d.a. +xviii +lizzie +ape +dietrich +drunkenness +sensibilities +dolly +clamp +arsenic +renovation +danube +deng +seventeenth +bender +cycling +competitions +pearce +conscription +hyderabad +ulrich +compton +j.s. +recitation +osteoporosis +ovulation +crabs +arrhythmias +housework +geophys +meditations +buzz +tranquillity +mitigation +pencils +tapestry +equilibria +aerosol +buttocks +sibling +pleistocene +epilogue +tropical +multiplier +miiller +hindrance +praxis +hop +marlowe +iconography +dyer +ga. +wendell +deafness +simone +archie +emmanuel +brett +eileen +utmost +megan +sting +breaths +ala +adorno +barrage +sf +athenians +estonia +phelps +interviewers +reeds +cages +malformations +gomez +gloss +artefacts +scribes +cowboys +evan +other +celery +foley +facilitation +perforation +janice +lauren +demolition +squash +vases +panorama +esp +pure +entrances +fourier +argumentation +ailments +rb +becky +oxidase +insurgents +varies +stairway +dresser +balloons +escherichia +farmhouse +humboldt +paolo +aba +boiling +watershed +bern +giving +reinhold +rn +concealment +tandem +mahatma +dar +atonement +acculturation +thorns +waitress +electoral +delights +mcnamara +inductance +paz +larsen +fi +resuscitation +fibroblasts +overload +malone +spence +zeros +endowments +custer +kirby +neoplasms +geologists +balancing +auschwitz +bantam +fixture +womanhood +cardinals +sims +bridegroom +prophylaxis +mortals +gibraltar +ovid +sieve +pistols +props +jumps +westward +zimmerman +allegation +immorality +ditches +viscount +granada +olympics +kodak +zoology +chlorophyll +volcanoes +appleton +propeller +penal +isa +postal +squadrons +weir +lena +broad +plutarch +illiteracy +bart +apocalypse +d.j. +near +paterson +prerequisites +molds +planks +designations +altruism +leroy +bribery +sherwood +pretoria +gis +freshness +caricature +casts +gaul +wash. +cartridge +skulls +royce +joachim +astm +deadlines +forceps +acetone +abrams +hens +sterility +mas +squeeze +planned +joey +dynamism +ligands +reminders +sharpe +rv +mug +potomac +cheer +graces +laymen +f.3d +disillusionment +likes +khz +evangelist +conquerors +thrift +codex +pbs +beaumont +injunctions +x2 +hodgkin +polygon +fleets +vet +griffiths +afferent +nucleation +carver +radii +bunk +nuances +affluence +neptune +clergymen +buckets +germs +dinosaurs +cruisers +liter +panchayat +blvd +linguists +allotment +iso +caleb +vita +niches +hermeneutics +hallmark +final +rivera +oral +o'connell +serv +examiners +gc +shack +conspirators +chesapeake +trifle +websites +aroma +faiths +audits +crc +davenport +rossi +peroxide +gypsum +cerebellum +dolphin +refrigeration +fowl +graphite +jesuit +quick +swallow +snap +pliny +genotype +killings +cytochrome +gus +dynasties +detergent +celia +radiotherapy +corinth +faust +peanuts +generating +uttar +counsellor +bella +flowering +projector +madeleine +bicycles +apa +selenium +buy +idolatry +outlays +sanskrit +bureaucracies +friar +gerry +tyrosine +r.e. +pulmonary +lyman +monomer +anaesthesia +bales +save +orwell +uncles +aristocrats +pastry +fibrillation +salute +angiography +nipple +holden +shutter +r.l. +feces +invertebrates +nacl +aberration +mortar +gdr +put +histogram +mistrust +raman +rap +politeness +lids +parliaments +gallagher +expediency +imbalances +kellogg +bakery +cleanup +subroutine +mildred +terminus +graders +pedal +gibbons +waterfront +valerie +crosby +slovakia +puzzles +bonuses +upland +burrows +ucla +kuala +dartmouth +suspensions +lodgings +klan +nottingham +farmland +thyroid +magnets +corona +firewood +circuitry +dragons +amortization +roughness +s.s. +naturalization +emil +chloroform +hinge +atherosclerosis +reliefs +tutors +corp +mantra +spotlight +spoils +wilder +lemma +decisionmaking +naming +finch +r.c. +ftc +hogarth +jakarta +poole +belmont +bas +avon +bancroft +mus +inevitability +bard +granddaughter +pretense +mosby +reuse +fremont +midwife +microprocessor +guthrie +beyond +malawi +vascular +most +jonah +nominee +metallurgy +phenol +groceries +sexism +rca +particulate +transvaal +groundwork +armenians +vedas +conglomerate +tempest +frown +teaspoons +stipulation +j.j. +prc +subtlety +cheng +hardening +arenas +curry +coyote +heaps +proviso +schism +testator +calcification +constructor +desolation +readership +egyptian +bureaus +stressors +pint +fidel +vt +nervousness +brent +chancery +warp +nobleman +karachi +slang +organizational +pathogen +utrecht +asa +institutionalization +aphasia +cdc +weakening +iterations +parachute +rufus +enthusiasts +seville +mica +rotations +dole +kerosene +chichester +precondition +debit +xvii +cubans +neuropathy +seclusion +nigel +predisposition +grating +lament +housewives +embolism +saucepan +acquiescence +denise +quentin +pedestal +decor +lilies +heartbeat +hounds +js +antarctic +welles +carlton +hahn +herder +resistances +cj +universals +iroquois +kingsley +grids +hogs +farrell +constriction +referral +olga +railing +hernia +hassan +colo. +terra +racing +staples +ferns +monologue +resumption +yolk +az +boswell +vc +vic +flip +ogden +repudiation +stair +cary +maud +antidepressants +timetable +dona +calm +technol +monies +nucl +complicity +irons +cms +five +junta +midline +organizing +rollers +midland +woe +cushions +sedation +traitors +curator +creeks +impediment +sandals +extermination +gentleness +composure +original +chivalry +hartmann +collusion +denunciation +garde +argon +hermit +pudding +unanimity +sparta +handicaps +popes +prop +sj +independents +medulla +plough +healer +chunk +rehearsals +tao +n.w. +hash +wafer +heavy +tibia +slippers +linearity +onslaught +impasse +kits +s.d. +arrears +faithfulness +aeronautics +transposition +hays +rationing +presuppositions +craving +provenance +strawberries +fourths +raiders +favourite +stripe +desertion +mismatch +jacqueline +carole +picket +phoebe +winnipeg +algiers +creators +enigma +prerogatives +nell +antecedent +et +herodotus +aggressiveness +academia +amherst +leasing +obstet +tangle +vampire +venom +alain +obstetrics +fables +halo +effusion +partitioning +cheque +antennas +ellison +collective +mcgill +travelling +extrapolation +proto +blockers +trachea +bon +api +bronx +beak +corporal +cameroon +blum +timbers +preparedness +transmissions +lerner +leah +felicity +polymerase +microcomputer +boxer +lodging +gauze +casing +lilly +softness +commotion +sentinel +tu +physique +odysseus +lactation +hmso +swine +midwives +chests +wadsworth +stereo +beecher +fuse +gibbon +rowland +intestines +ftp +admirer +bartholomew +gall +jude +othello +claudius +melodrama +comptroller +rake +rentals +uss +geographers +charlemagne +allele +workmanship +normandy +townships +biochem +boilers +torso +sherds +ddt +locale +tocqueville +resale +trumpets +parrot +brevity +acth +perpetrators +c.b. +speculators +baudelaire +negotiators +improvisation +waldo +cortisol +neo +bouquet +confluence +magnus +taboo +hinges +structuring +crumbs +rivalries +gandhiji +pravda +facilitator +refutation +astronomer +hamburger +bullock +shiva +mamma +pipelines +omar +phage +beers +seeker +predation +aunts +nineties +puncture +solace +splash +stout +larva +grassland +h.r. +basalt +cohn +lawns +hilda +superstructure +melvin +submissions +usages +leiden +bessie +masturbation +perch +godwin +montaigne +cushing +axon +funerals +academies +chatham +distaste +theological +weld +blooms +molybdenum +translocation +vanderbilt +throttle +reginald +finality +® +tow +koran +swap +adventurers +luxuries +mir +dolphins +garfield +rodgers +hemispheres +della +schooner +constitutionality +cardboard +bowling +cloves +reuben +stephenson +pharmaceutical +peaches +typing +perth +fairy +clifton +keyword +paranoia +salespeople +bali +predictability +prosecutions +mali +tn +vishnu +torrent +eyebrow +siam +wartime +stays +recital +sampson +brill +acm +aaa +despatch +vogel +amalgamation +follicles +gpa +snacks +globalisation +cease +cartel +c.j. +mackay +dostoevsky +hobbies +marcia +norma +middlesex +jute +cullen +scandals +gerhard +congresses +innervation +incarceration +hernandez +soft +bromide +lone +nazareth +slag +tb +rearrangement +flare +byrne +leach +ode +graveyard +philanthropy +locomotion +abdullah +sargent +conveyor +reeves +merlin +gleam +albums +engravings +glycerol +inns +vivian +xavier +almanac +tai +carthage +austerity +dir +rolling +mentors +cadre +plugs +fondness +veneration +superstitions +dentists +borneo +pears +hopelessness +c3 +jurists +interconnection +safeguard +augmentation +odors +courtiers +bidder +wei +l.j. +bohr +connectors +lansing +storey +radiographs +lamina +beautiful +jd +resistors +crusades +singles +akbar +minh +postulate +ballots +ness +bros. +installment +endocrinology +mysore +foothills +briefcase +coaching +etudes +rosie +phytoplankton +amnesia +breeders +equalization +fairfax +sammy +coolidge +evergreen +testes +email +appetites +concurrence +trilogy +lodges +rarity +confrontations +branching +playwrights +nellie +eigenvalues +exporter +lizards +wholesalers +animosity +industrialisation +roche +brittany +mommy +rees +shutters +peculiarity +extravagance +pies +waterfall +stew +liters +marvel +sepsis +s.e. +subculture +pretence +attacker +simeon +mails +alvarez +antidote +ravine +patty +castration +dispensation +allergies +intruder +leukocytes +proportionality +wilcox +dysplasia +petersen +bandits +giuseppe +habeas +combatants +masons +fay +setback +bowers +lifting +cytokines +kgb +perturbations +gs +© +citizenry +mathews +masterpieces +veda +chairmen +injustices +poly +imperialists +haydn +deconstruction +skipper +trespass +simulator +complacency +sanford +repatriation +alexis +tanaka +soles +n.d. +vol. +inadequacies +abatement +dev +formatting +blends +spans +phonology +finale +zaire +forefathers +lizard +etching +editorials +jb +gl +pathophysiology +loser +thumbs +shawl +boar +sinuses +brood +misconceptions +bifurcation +barter +mont +worldwide +pauses +kathryn +axle +consummation +frankfurter +molasses +disraeli +reproductive +fatherland +substitutions +lok +frau +b2 +distractions +ethnology +identifications +catechism +has +rein +eternal +gunpowder +che +nafta +perspiration +jh +lupus +multimedia +stocking +nd +ems +alarms +filth +endeavours +maxims +atheism +mounts +externalities +redevelopment +elevators +legions +reflector +bertha +sesame +parte +mu +milner +diodes +straps +postures +malaise +valencia +gavin +strasbourg +compost +epistles +carcinomas +intuitions +brochures +vicissitudes +ethan +gypsies +eleventh +markup +clair +comics +taboos +euler +meade +authoritarianism +coming +turbines +burgundy +socio +dvd +canaan +octave +broom +minimization +brigham +justifications +garb +postscript +ant +federalists +alumina +kappa +alcohols +rembrandt +maharaja +rotterdam +projectile +boldness +mona +cloths +intermediates +abolitionists +zenith +weariness +obscenity +chopin +enclosures +sumatra +multiples +fdr +severance +throats +harmonics +dorset +kensington +demonstrators +doings +piracy +lewin +universidad +grossman +irregularity +bacterium +ibrahim +catchment +sill +barthes +virginity +urdu +reserved +rumania +farrar +gymnasium +bower +hypoglycemia +amines +hutton +plunder +kepler +jess +nadu +dordrecht +lesbian +quixote +pairing +r.s. +jewellery +intrigues +consulate +desmond +progressives +carleton +capacitors +regulars +cigars +enoch +breakers +refinements +cadence +cemeteries +brutus +idleness +silicone +convict +foxes +puppets +quiz +sulfide +christensen +oasis +clustering +moths +hinterland +bloodshed +connolly +reunification +locomotives +carcass +bandage +ablation +flavors +demographics +resonances +kabul +carvings +delineation +ashton +instituto +elsie +sic +vie +bowels +luce +winthrop +blank +baird +hot +under +terence +berman +makes +paddle +singularity +latvia +riding +primaries +vena +paucity +recorders +eruptions +percentile +bushels +wis. +pancreatitis +freezer +dickson +elasticities +loam +tess +thermal +iliac +teamwork +prefecture +nomads +profusion +friendliness +katharine +orphan +pineapple +gallup +spill +telecommunication +prosthesis +ultraviolet +reproductions +sofia +robins +delinquents +cleaner +exigencies +moose +parenteral +f2 +filtering +draper +ilo +syllabus +stockholder +crows +waller +clumps +telegrams +ejection +ki +veronica +intersections +mystics +fractionation +urn +haas +galen +gettysburg +criminality +precinct +broadcasters +imaginations +irvine +maureen +collecting +fundamentalism +rubbish +dies +sarcasm +millionaire +tanker +brig +vargas +doubles +arbitrators +rapture +breakup +sixteenth +lumps +amateurs +mortimer +quart +premiere +kill +henrietta +lumpur +macaulay +addict +aberrations +respite +pastoral +steamship +ppp +kiln +mummy +toyota +dataset +consecration +freshmen +barns +inmate +refrain +drummond +credence +cindy +extrusion +columnist +dupont +schumann +outbursts +fellowships +beech +a.2d +sing +hermes +stratton +veneer +skillet +d2 +erickson +impediments +hertz +palazzo +ie +nicotine +wireless +rash +upstairs +zhou +gita +vindication +humanist +postulates +solicitation +mitch +reparations +cinnamon +m3 +donaldson +mongols +repulsion +schmitt +goa +celebrities +forerunner +spurs +j.p. +forfeiture +maori +retailing +luminosity +nolan +emery +weil +impartiality +torsion +loch +finishes +clive +moslems +b.s. +mohammad +altars +straus +mercenaries +nguyen +memorials +defamation +diss +sonny +regressions +gallbladder +prob +leopard +consort +parchment +hearers +torts +kraft +curses +fissure +briefs +crossings +mahler +gregg +armature +olsen +fs +icc +encroachment +militants +cowardice +admonition +hometown +outgrowth +ventricles +comer +breaker +million +pilate +synapses +bourdieu +benchmark +epinephrine +alert +acceptor +mach +formalities +literatures +mccoy +smear +madhya +joaquin +piedmont +halle +microstructure +rubles +trophy +conceit +engel +volition +sid +brahmins +streaks +nirvana +info +inflection +chaplin +palmerston +grasslands +undergraduate +toxicology +beginner +processions +inflows +gums +and +warranties +strawberry +tehran +paramount +fern +scheduled +crackers +beatles +thicknesses +demeanor +mv +inventors +olivier +ageing +preoccupations +lineages +integrals +headmaster +mil +entrants +overall +euthanasia +magma +consternation +elector +pitches +lorenz +feats +mansions +dai +ee +veterinary +a1 +pluto +mk +isolates +ernie +compaction +modifiers +genitals +aquarium +beginners +flax +monotony +whitehall +tse +goddard +annotations +flange +cody +robber +brisbane +neuroscience +kipling +quaker +weathering +trimester +mosques +insiders +complete +memoranda +audrey +girdle +counterpoint +libido +radiograph +aragon +confiscation +alms +josé +clean +prefect +exchanger +prometheus +clot +plow +aspen +yogurt +glamour +amir +bb +backwardness +jihad +polyester +deuteronomy +diuretics +finder +burroughs +verdi +architectural +synopsis +margarine +sds +prairies +balzac +forge +collected +murdoch +tj +const +neutralization +jun +percussion +parables +kitten +peacetime +ursula +cecilia +maj. +damping +bulletins +tyre +crossover +tiers +prostate +bahamas +macromolecules +utilitarianism +crusaders +debbie +dunbar +testis +amputation +blanc +related +schoolmaster +gaiety +dekker +haynes +prussian +pomp +brahms +brahmin +custodian +toad +euripides +p.j. +moderates +bose +politburo +webs +tabernacle +rigor +congruence +ibsen +hostel +cw +reconsideration +ewing +alter +ballroom +ito +disappointments +c.c. +attentions +nipples +montagu +grammars +ache +langley +intercept +angina +candidacy +helene +samoa +darcy +wallis +transmitters +polynomial +latino +lubrication +burglary +luigi +societe +chalmers +dilation +ng +polytechnic +crucible +shan +paw +patterning +approbation +indra +rms +christi +devotee +cantor +analogues +supermarkets +paraffin +potentiality +whispers +clique +majorities +anchors +hardwood +cafes +glories +tory +dart +rahman +regionalism +lj +emulation +bingham +aquifer +crib +cato +toilets +stewards +ritchie +marketers +pellet +cactus +vagueness +wren +racket +checking +superintendents +swimming +lucien +cheyenne +basilica +marlborough +pisa +bess +descriptors +structural +footprints +toni +fries +breaches +villas +chavez +galley +notations +exhortation +steinberg +whim +cpa +squirrels +athena +microbes +c.r. +brewster +telescopes +armchair +gays +etienne +racks +ignatius +mos +dime +saxony +adverbs +kilograms +metastasis +annealing +jammu +microfilm +panther +hike +swanson +mormons +byzantium +routers +mer +sockets +o2 +meta +rattle +dung +towards +calorie +polymorphism +gardeners +ebb +mcdowell +constellations +dt +parishioners +inducement +horowitz +sculptors +acute +arendt +bm +moderate +camus +diver +oriental +turnout +apologies +interviewees +analgesia +appraisals +exclamation +mod +mover +reprints +ak +petty +samantha +howells +marbles +e2 +maimonides +laplace +compendium +gelatin +technological +functionaries +mafia +wrinkles +genotypes +transplants +lashes +let +malik +siegfried +foramen +zola +discontinuities +r.h. +pic +bis +airfield +possessor +coughing +mustache +smuggling +widening +cadets +extremists +oppenheimer +immunology +arabic +radioactive +gladys +tcp +alicia +ecole +ulceration +filename +beet +annette +himalayas +clemens +insolvency +freedmen +napkin +hues +stewardship +browsers +bloodstream +inactivity +freeway +hesse +verde +harlow +nassau +saxons +pedigree +wig +dormitory +nos. +deforestation +ephesians +pareto +transformers +calgary +guillaume +khmer +harvests +duplex +jerk +herbicides +hasan +pdf +boyer +mick +domes +eras +errand +yi +sorghum +cutters +militarism +yin +gowns +modernisation +silverman +airs +merry +kite +confucianism +nutritional +charisma +mayors +per +r.w. +mademoiselle +schwarz +lightness +thickening +fluidity +gran +meier +shane +decadence +nikolai +plutonium +receivables +inter +hewitt +direct +bye +wallpaper +evangelism +pays +anisotropy +chromatin +barbarism +ariel +raise +hearer +wreath +exertions +burnett +ld +autoimmune +bronchitis +cisco +carelessness +midlands +fuchs +brandeis +penelope +pv +assassin +reputations +tolerances +magnificence +gh +heroines +everyday +thebes +jennie +silhouette +introspection +strictures +bruises +sell +porters +tt +fried +pall +munro +uproar +hydrochloride +solder +perversion +methodists +bergson +sponge +superposition +infidelity +teaspoon +materialist +passports +ellipse +roadway +snails +claus +reversion +mites +downing +else +inaction +troupe +anions +boring +deformities +cardiol +zionist +caretaker +dns +primitives +woodlands +giver +maidens +entourage +vodka +multiculturalism +asp +fiat +pvc +tampa +anesthetic +legitimation +preserve +pharmacist +leprosy +freddie +pseudonym +philology +joanne +dexter +bedtime +chapels +apportionment +circular +backlash +spade +caliber +navajo +toddler +blight +borrowings +baruch +phosphates +anonymous +radiator +decimal +ellie +hobson +platter +throng +defaults +cranes +racial +shoemaker +logarithm +resorption +dukes +aubrey +milling +nazism +transduction +sprays +alchemy +delphi +sojourn +panzer +ely +glycol +curzon +mellon +tenacity +belize +amin +gps +eco +sores +candida +kaufmann +bellows +abnormal +dg +cora +rudder +weinberg +impunity +newbury +scotch +setbacks +mclaughlin +fuck +gilman +garvey +midsummer +sufferers +pledges +oman +emerald +caterpillar +silent +xerox +schopenhauer +michele +billings +tomas +heron +p.c. +acetylcholine +ibid. +caracas +sire +plausibility +sheds +reelection +slurry +duffy +scand +cleaners +challenger +parenchyma +centrifugation +mauritius +pageant +bourne +loyalists +precept +dystrophy +prep +pritchard +detente +said +darius +hydro +defeats +buren +sandstones +a3 +dressings +pediatr +camille +expansions +precipitate +ambush +republicanism +fairies +acheson +myocardium +matilda +chadwick +worshippers +flores +satisfactions +carton +dolores +berne +eg +weiner +hyperactivity +deutsch +proctor +hs +olympic +numerator +silas +roadside +acupuncture +libby +oars +maclean +sony +slander +tyrants +bazaar +cheryl +scoring +loadings +m.e. +burnham +petit +ointment +massey +r.d. +neutrophils +nervosa +destinies +timers +auctions +gaston +uppsala +davy +plankton +pacemaker +archetype +opacity +wilkes +ultimatum +exaltation +pasteur +boer +hilary +dummies +immobilization +civ +atmospheres +iliad +participle +mckenzie +devolution +danes +flattery +jawaharlal +schemas +piping +vaults +terrors +illustrator +simons +marin +brewing +torches +outreach +guido +pus +erwin +grassroots +relic +xp +chimneys +keeping +cartwright +divination +nostrand +minnie +quiet +doubling +owing +seer +shi +devi +guyana +osha +recesses +hodges +nhs +lieutenants +rothschild +ricans +stowe +pf +eduardo +granville +bergen +slump +grantor +rankings +bethesda +caliph +bets +sensuality +nana +earrings +delia +auguste +decorum +attributions +coulomb +bereavement +cassie +drip +aurobindo +homeostasis +diarrhoea +cleansing +theodor +coventry +accretion +chekhov +innocent +workstations +environs +nectar +edmonton +from +rul +pursuance +sensitivities +ives +duodenum +preposition +passwords +genitalia +honda +epithet +guardianship +flooding +personages +stench +cargoes +bergman +frescoes +oppositions +padre +failings +lucius +falsity +centennial +visas +sustainable +accords +creeds +cardiff +louvre +sidewalks +casket +savoy +polypeptide +synagogues +militancy +testimonies +powerlessness +interlude +rectangles +la. +gravitation +batches +toulouse +dummy +legumes +madman +phonemes +macleod +vestiges +czar +diderot +eyre +anaemia +gunn +troopers +yrs +keel +russ +defoe +clear +pollard +migraine +americana +garner +identifier +heine +selector +blackburn +cabot +buoyancy +horatio +padua +salmonella +milestone +castile +mcguire +helmets +kern +trappings +nh +euphoria +sta +carla +fanaticism +employ +nih +kernels +multitudes +comets +asceticism +mains +partridge +dane +aldrich +flaubert +gina +cheshire +boeing +slovenia +cervantes +nicolson +df +virgins +sovereigns +castillo +hyman +descriptor +moons +erlbaum +aqueous +mendelssohn +bribes +salads +a.b. +nymphs +huber +mineralization +mariner +braces +cps +sts +pap +clone +europa +tee +n.e.2d +pods +presbyterians +nominations +jinnah +haig +glover +franc +gauges +loeb +tunic +chronicler +redox +withdrawals +govt +regrets +tenn. +cpr +duff +serfs +latinos +doorstep +scramble +£ +forward +coupons +deadlock +annuities +ukrainian +pars +mcclelland +bathing +feud +trainee +moshe +dun +earle +loft +evangelicals +grenada +emphases +pickering +regimens +moder +lifetimes +landau +abs +hordes +commas +reflectance +tanganyika +clutter +clerics +booty +ty +drying +versatility +coolness +hindsight +nan +w.h. +irishman +virulence +tufts +absolutism +drinkers +glutamate +hc +yellowstone +humanists +pandit +frye +indigo +plethora +fortitude +ama +debentures +timor +steroid +dept +pushkin +constant +alleys +toddlers +malays +soundness +gillespie +aisles +evanston +emphysema +pagans +footwear +blur +domicile +culprit +thorpe +isthmus +biologist +arte +statehood +ei +deformations +moderator +cramps +hindi +telecom +l.ed.2d +claw +bumper +hb +residual +trolley +rubens +brezhnev +shelby +ponies +contraindications +waltz +foothold +attackers +bryce +rai +j.f. +consuls +knuckles +endocrinol +wb +bra +bowles +breeches +less +granny +danish +ph. +albrecht +chimpanzees +canine +mendel +newsletters +anthem +importers +reese +hooper +dexterity +haemorrhage +mba +dyke +hf +expropriation +cool +cava +tacitus +underside +retraction +framers +dryer +blacksmith +refs +ul +jw +erin +vietnamese +binoculars +bacilli +creatinine +petri +timeline +receptacle +bastards +annotation +polar +pennies +pharynx +olympia +ste +amalgam +ladders +depolarization +sedan +fran +soy +cavern +steamers +homology +d.m. +appellate +embankment +lv +dialectics +karnataka +durations +drummer +wakefield +antipathy +eccentricity +broadening +ments +coral +dissidents +milestones +decompression +psycho +bran +siena +mara +breeder +hm +phobia +ut +gao +passover +oyster +victorian +chasm +startup +vest +martial +miniature +bakhtin +indira +apoptosis +northampton +redeemer +apparition +bathrooms +bends +vega +dahl +felipe +antitrust +ji +sox +vesicle +jails +hungarians +follicle +voids +blending +zest +paws +landfill +due +adrenaline +wentworth +montague +sergei +complementarity +radium +environmentalists +dorothea +dishonesty +ornamentation +envoys +barron +subtypes +bout +fingerprints +sato +abbe +sion +austrians +bilirubin +agonists +snapshot +pronouncement +tumult +tasmania +groin +roster +temp +triggers +pompey +bewilderment +swarm +mitosis +sewers +moustache +britons +ll +stimson +sharpness +cadet +camping +intrusions +barclay +lr +bangalore +sedition +ganges +misconception +grimm +daphne +barges +sugarcane +intubation +julio +kr +wrongdoing +mendoza +catheterization +italia +lehman +bray +yarns +legacies +provence +proponent +stravinsky +maslow +tester +steamboat +sinking +narrowing +kw +ky +s.m. +suicides +tribal +mau +kazakhstan +headway +h.m. +acclaim +subsections +soybeans +dearth +longmans +adhesive +eyelid +practical +personage +atkins +o'donnell +bison +tableau +mott +various +fascists +leaflet +ovens +collage +paternity +fragility +narcissism +freshman +coldness +frigate +revolts +subsidence +councillor +govemment +hannibal +waiters +hoop +frankie +ritter +fissures +pod +imitations +gogh +outcry +mh +importer +chairmanship +spice +vanessa +huron +cherries +turret +schroeder +lecturers +tp +biliary +shopkeepers +priscilla +pastime +pla +eb +occupant +veranda +remittances +judd +fundamental +kinsmen +conservatory +conjugation +ike +measuring +arafat +vapors +pence +ticks +login +ruiz +underwood +inserts +phrasing +thalamus +condoms +facsimile +depictions +p.a. +liszt +shin +younger +beaker +greeley +dominic +kev +internationalism +owls +helmut +periodicity +auditory +dreyfus +blanchard +siren +dogmas +cheney +sahib +absenteeism +tackle +origen +postcard +referee +murals +latch +ribosomes +storyteller +distinctiveness +sick +brunner +allahabad +hippocampus +armament +cliche +gb +steppe +leland +papyrus +catches +lymphocyte +haley +federalist +coloration +wellesley +ehrlich +regularities +liners +anthropological +blot +spiritual +bins +brewery +cch +hemp +moneys +taps +bertram +gwen +ghz +regan +bosch +molding +sans +dissension +brine +hound +vigil +flicker +larkin +contagion +hagen +dill +placements +levies +lowland +booker +auxiliaries +hodgson +entertainments +catheters +tramp +ingram +vm +aneurysms +coroner +fates +gills +underwriters +etc +barbiturates +cartridges +bridget +venues +carmichael +isis +withholding +igg +guadalupe +sash +que +rumour +jain +supplementary +flannel +booths +marta +shoppers +privatisation +musculature +centrifuge +reactants +lucknow +rossetti +ramakrishna +gambler +subspecies +rad +bouts +windshield +gutter +gunther +kali +p.s. +microcosm +gulls +avalanche +pn +benefactor +lice +sch +o'hara +totalitarianism +healers +newborns +nurseries +winslow +absorbance +ldcs +dalai +cypress +s3 +andrei +spoons +cretaceous +t4 +epitome +macros +chronic +cyclone +villains +tenths +flotation +cowan +adjutant +outpost +serials +booster +highlight +dosages +grange +logging +cashier +sen. +fresco +roberta +craftsmanship +slavs +cubs +cochrane +benin +mystique +jiang +copernicus +lsd +personification +zanzibar +organic +interrelationship +combs +dd +correspondences +emblems +multinationals +draught +vouchers +highness +pers +bulge +puritanism +mormon +desai +flea +shales +tidings +rowan +brenner +whiskers +ldl +anarchists +stepmother +susie +hartman +prolongation +ucc +radcliffe +swedes +crocodile +haul +accumulations +pleadings +calcite +buggy +ptsd +filmmakers +pun +courtney +ctrl +invoices +drs +frauds +crux +bahadur +admittance +chevalier +amphibians +apr +fugitives +complements +ber +monde +boers +waveforms +fitzpatrick +ferment +num +gramsci +spins +revulsion +brunt +gauss +mirth +lire +storytelling +wins +remarriage +roast +hiss +buber +rendition +postponement +maximilian +hearst +noodles +hungarian +regency +cg +bt +particular +postmaster +bolivar +alexandre +stallion +subjugation +beau +ers +flurry +civility +saturdays +giorgio +pasadena +sobs +lethargy +boroughs +westview +stimulants +diagnostics +neural +progressive +refineries +marseilles +meyers +loaves +cesar +kidnapping +m.c. +swim +luna +feeders +ankara +communique +puppies +blaine +acc +perpetrator +vince +slash +ht +ureter +minima +tsp +homelessness +p.l. +celibacy +mcpherson +excise +merchandising +homeowners +colouring +this +montesquieu +twelfth +carmel +tibetan +gunner +resettlement +willy +flair +ala. +crank +shyness +pinnacle +markham +galbraith +collars +rogue +disruptions +cucumber +midpoint +drury +studs +hypothyroidism +edta +enrolment +fc +mutant +bungalow +estrangement +elucidation +gout +bacillus +mailbox +pulley +spaniard +windings +skiing +separator +parnell +insignia +disequilibrium +francaise +pseudomonas +limestones +n.e. +unknowns +ugliness +dignitaries +exits +lehmann +mammal +asterisk +cnn +rey +ortega +paternalism +mace +farley +wan +foregoing +tenet +tripoli +puff +czechs +lesser +hayek +commercialization +northumberland +vinci +raisins +myriad +surveyors +flu +j.g. +ballard +slant +archaeologist +aeration +cloister +realty +rel +snail +materiality +reigns +chassis +blush +malthus +rockwell +fra +thorax +conn +r.g. +lapses +tiffany +nec +museo +cataloguing +cairns +embassies +« +cadillac +darwinism +alertness +susanna +gasp +inroads +calamities +miseries +christology +afterwards +codification +d.l. +neurotransmitter +lactose +barbecue +solemnity +boas +waveguide +cyanide +counselling +matron +reilly +disorganization +apprehensions +compatriots +reversals +adverb +temps +lettres +artifice +autocorrelation +betterment +dumas +microns +estrogens +dh +bump +counsels +phalanx +astor +liberalisation +notables +headlights +auden +millimeters +hewlett +misc +slits +stratford +precincts +rae +astronauts +queues +procreation +vicente +mite +prolactin +denny +upheavals +omnipotence +bk +calendars +gunfire +nil +lyle +cathedrals +ko +stockton +remediation +auditing +mosaics +langer +particularity +asquith +mutilation +hamiltonian +vaudeville +intentionality +alt +sophocles +ve +ronnie +abroad +workout +tightness +discernment +polystyrene +aggressor +blinds +a.s. +sod +redwood +dyspnea +imperfection +segal +ws +trenton +enrique +souvenir +extra +arbiter +weighting +nematodes +screenplay +ripples +plumage +lander +cdna +orbital +tankers +hoe +justinian +thicket +euclid +molars +sameness +newell +nate +serial +minus +environ +roommate +krsna +overtures +specter +sentimentality +twists +diphtheria +e.d. +censor +epochs +knowles +thymus +pea +upsurge +clarissa +insurgency +dramatists +hiram +qi +hind +ansi +ramirez +waterway +essences +kohler +palpation +posterior +eel +laird +photoshop +walden +metadata +pear +preconditions +smyth +bartender +obstructions +tzu +puritan +hacienda +wasp +alonso +evolutionary +commemoration +salience +disbursements +it +u.p. +ro +depository +brim +overture +paraphrase +churchyard +primers +nye +fiddle +secularism +miscarriage +molotov +greer +emanuel +slew +porto +acronym +guesses +headers +noble +souvenirs +barrio +prof +augsburg +quay +memberships +gottingen +histology +gifford +zionists +inhibitions +ferocity +kibbutz +dysentery +layouts +feng +fingernails +ortiz +intelligibility +metabolite +relays +castings +biscuit +sylvester +loves +mcleod +battleship +stimulant +aries +mgm +paganism +curie +realists +extradition +rabies +wiener +handbooks +g.a. +kl +rubric +minerva +pty +linden +fetuses +tillage +weinstein +vistas +reprisals +buddies +knoxville +johan +frieze +wally +hadley +welcome +massacres +vane +tubercle +adp +quran +moreno +ngo +epics +floats +bn +meteorology +geo +d.r. +chs +enactments +romero +abscesses +gastroenterology +estradiol +reyes +depositions +drifts +hurricanes +cider +eaters +chrome +regurgitation +rushes +zn +levers +sedimentary +oracles +virtual +identifiers +rallies +analgesics +naturalists +periodical +hundred +ado +tung +mathematical +hayward +raison +antelope +ravages +patriarchs +bustle +westinghouse +payload +earnestness +dispatches +nl +rebellions +thayer +xxiii +guam +bandages +overcoat +std +wreckage +lynne +banco +presupposition +dinosaur +suffixes +zoe +seating +jf +mouthpiece +trump +gower +solutes +millennia +guiana +reincarnation +ophthalmol +boca +muriel +rover +williamsburg +orr +unionist +blocs +ryder +fink +eugenics +salomon +amusements +glee +doves +outlaw +forefinger +rw +superpowers +monomers +stretcher +shine +true +formosa +sensitization +estuaries +lac +complainant +clippings +anselm +absences +reparation +mcgee +stepfather +dod +duchy +truss +evangelical +trusteeship +strangeness +superpower +galatians +dixie +hiring +mortars +diem +liens +musee +frege +deg +ballast +veracity +hematoma +muses +audacity +triplet +xxx +hodge +folio +overseer +pedestrians +foote +concordance +interferon +seine +tetanus +rebuilding +evangelists +idioms +sprouts +inhabitant +tobias +simplex +adhesives +jena +sheppard +transgressions +pater +agility +mirage +flutter +geometries +immunities +predilection +defection +dorsal +cochran +detergents +structuralism +wedges +anastomosis +fiona +wt +verso +transducers +r.r. +pleasant +communicator +yeltsin +educ +macon +groan +lunches +s.w. +harbors +bldg +grover +rosalind +soot +mane +mannheim +hanging +eskimos +federations +theorizing +sherlock +clarinet +signifier +religiosity +spasms +annapolis +perpetuation +woes +leaps +abrasion +flares +scare +immanuel +willows +edmond +inequities +harriman +ginsberg +miocene +foremen +e.r. +pulitzer +protectionism +sunflower +kimball +hl +pigmentation +perjury +israeli +rafters +clements +fairbanks +o'reilly +omen +masts +searle +bronte +slack +lipstick +frazer +sighs +handlers +heyday +ripple +rapprochement +bey +beloved +mohr +actresses +pk +substratum +purge +mainframe +h2o +romano +artistry +hud +mallory +tranquility +relish +internationale +polling +chili +bel +tenement +kessler +euphrates +executors +neurotransmitters +sardar +kraus +etymology +cassava +heuristics +morales +granger +wanderings +locomotive +oration +seaboard +beaufort +pacing +almond +okinawa +stoves +firemen +solidity +effector +canyons +purcell +kelvin +fiske +catalysis +ranchers +censuses +consumerism +fallout +subcontinent +provost +incumbents +hypothermia +precipitates +l0 +individuation +sheriffs +ky. +formaldehyde +spawning +egoism +almonds +governess +hc1 +agatha +scruples +harmon +vertebra +reductase +carp +blasphemy +mists +speck +jarvis +fibrin +duane +telex +faa +tubule +gmbh +follies +manu +damnation +muzzle +campground +aeneas +specie +tundra +stumps +vb +fortresses +milano +harmonies +cliches +condominium +plunge +deleuze +frey +torpedo +vestibule +intruders +immunoglobulin +craters +metz +nativity +renown +skip +buffet +erythema +baptiste +appellants +crap +clump +crates +tagore +hurst +reconstructions +tribesmen +khartoum +ole +petrarch +harvester +lobbying +sitter +osborn +stirling +sar +nagasaki +tubers +damon +dei +phenotypes +indoctrination +laurent +recoil +addis +sirens +stroll +racine +berth +mcmahon +planck +catecholamines +stratigraphy +gilmore +masson +uprisings +c4 +ism +warburg +levinas +xxi +lanterns +photocopying +gallop +tentacles +pons +caveat +chloe +bargains +traditional +hobart +gaba +duma +wicker +bernhard +thucydides +gop +mediums +frazier +moines +anatolia +shilling +angie +butts +tradesmen +compilers +iniquity +baum +britannica +aristocrat +ferris +hamlets +goldwater +h20 +artificial +bilingualism +lew +hiding +over +bogota +esophageal +varnish +chairperson +alias +admin +nanny +orion +linguist +konrad +knapp +parlour +sobriety +centro +sorcery +penchant +bushel +schumpeter +roper +tiberius +subparagraph +omega +offensive +rommel +bede +appendages +dolomite +fsh +pale +zeitung +horizontal +spec +internationalization +portico +holloway +levinson +polyps +browns +sonia +mf +lobbyists +hillary +incisors +rationalist +parentage +reorganisation +gymnastics +lindsey +sur +aden +tabulation +gustave +bodhisattva +firewall +ob +milne +consciences +dia +camouflage +undp +juror +installments +parades +bengali +foreclosure +emulsions +semiotics +sublimation +cezanne +anthologies +ensign +laguna +cote +solicitors +sykes +foyer +spiegel +wl +nominees +intricacies +gonna +tram +harpercollins +clams +syllogism +clown +salle +admixture +urol +curl +stalemate +desserts +classicism +ccc +jared +deluge +glycine +lysis +nsc +cutler +playback +porcelain +last +figurines +initialization +brody +lausanne +biopsies +bumps +geologist +lash +reorientation +e.g. +dw +bale +lactate +lent +shih +broccoli +null +reabsorption +elizabethan +wand +serpents +internship +rockies +dope +vagaries +doorways +legation +acoustics +cooley +wasps +kittens +intermarriage +sputum +corals +andres +garrisons +desorption +wellbeing +glencoe +cao +tunis +chauffeur +cowley +atheist +matisse +rare +mishnah +e.j. +emilio +polemic +gag +emory +cho +abusers +pharmacists +jericho +shortcuts +bun +gov. +heathen +unknown +lull +heaters +armand +emeritus +hearsay +ligation +consultancy +w.j. +valor +estimators +washer +verona +citrate +mia +fenton +roderick +rorty +bernardo +subpoena +iodide +victors +yucatan +phospholipids +explication +conglomerates +pci +enslavement +barometer +lettering +priestley +pathologist +shortness +clout +dictation +spreads +mcclure +demography +adenocarcinoma +plumes +serge +climbers +yukon +martini +odour +pu +pueblos +fad +valuations +babel +airborne +blockage +encephalitis +miss. +infestation +breakdowns +alfalfa +dal +sunglasses +anesthetics +kurds +mouton +nebula +francesca +encampment +aquaculture +polygamy +reassessment +breakage +calais +myrtle +linn +hog +edo +badger +cassandra +e.a. +hua +conjugate +gallows +rebuke +jacksonville +h.j. +retreats +lowry +durban +nervous +lark +a.r. +postcards +crowley +bribe +vickers +portals +shroud +robotics +chieftain +triple +gamut +maude +croix +favours +domestication +robustness +gutierrez +tg +petrograd +moratorium +abbas +deletions +arson +yvonne +sufferer +policymaking +ao +roi +elegy +bikes +lam +stomachs +redefinition +churchmen +hurley +bracelet +msec +guineas +hadrian +estoppel +lacey +scot +trapping +himmler +gottfried +grower +isomers +refreshment +townspeople +ethernet +subtleties +publics +exasperation +adipose +horticulture +poona +squads +ephesus +stray +chants +antonia +prostaglandins +bernie +shoals +canteen +schemata +mad +m.l. +gottlieb +schoolboy +beatty +flagship +lipoprotein +dissertations +hq +detachments +galloway +aziz +reckoning +corral +pang +incisions +sweeney +filipino +novices +lex +prefixes +grenades +heck +soups +itinerary +secularization +polynomials +methionine +sponges +paget +orpheus +spermatozoa +ecol +protesters +a.g. +kv +mobilisation +erisa +receptionist +napier +watchman +micrograph +steaks +kinsey +transfusions +alderman +b.c.e. +plating +kenyon +endothelium +romantics +livres +jaguar +mink +macpherson +calvert +pew +malay +deaf +slowness +mem +watchers +sind +nighttime +dryness +elisha +supernatant +potters +pawn +bylaws +certiorari +ante +raf +volt +mainstay +purdue +ephraim +payoffs +grail +organelles +anders +chute +greenfield +whiting +manoeuvre +sq +earlier +eduard +whitaker +nurture +nothin +fortran +fawcett +audubon +bridle +pri +aria +del. +musket +radiography +developmental +autocad +reactance +kilogram +anova +crests +sequelae +intercession +slum +elution +maitland +capitulation +luc +obsolescence +tripod +machining +bog +blackstone +fang +orchids +reconstitution +cyberspace +mourners +insecticide +auburn +wink +zoom +lessor +aphrodite +bigotry +crofts +alba +frankness +brunei +sarawak +migrant +christy +stipulations +vv +proximal +bunny +breastfeeding +a.h. +palermo +gerontology +strachey +gypsy +josie +hacker +bot +savagery +autocracy +franchises +hooves +fancies +depots +ataxia +apnea +brainstem +atlantis +pacifist +floating +traverse +riddles +meiosis +netscape +mooney +shingles +brides +stamina +mainz +cassidy +worksheets +longfellow +landslide +schweitzer +antichrist +trucking +quezon +nfl +wanderer +buddhas +newsweek +raoul +dobson +penitentiary +chao +modems +xxiv +mailer +indecision +sternberg +mcgregor +scourge +endocarditis +gurion +lesotho +internalization +trailers +ibadan +tyson +purview +harshness +balconies +braid +running +pos +slacks +ramos +mohan +territorial +pharmacokinetics +slime +discouragement +erp +headman +ranches +poise +antique +constables +r.b. +hogg +gull +ishmael +bold +tobin +tolls +muskets +enclave +gunners +arcade +tint +deflation +cpi +grady +paras +disarray +allyn +afterlife +manfred +gametes +kruger +relatedness +servicemen +pail +asparagus +spd +graf +negotiator +myosin +popcorn +whaling +bradshaw +schizophrenics +benito +hplc +plasmids +buckle +elisa +hive +bullion +hermitage +nu +b.p. +shamans +vial +opposite +saucer +gable +coa +autograph +jt +symphonies +stasis +collaborator +heisenberg +julien +aeroplane +enthalpy +ambient +hist +ill. +candor +freak +woollen +decker +wick +ig +hath +hindustan +executioner +enchantment +beauvoir +schoenberg +antoinette +patna +elsa +kitchener +certain +invariance +foundry +confessor +arbitrage +lev +chisel +clutches +smoothness +calder +maxillary +kaye +negativity +immobility +conjectures +lieberman +cipher +rouen +turbidity +marino +interconnections +raul +nihilism +hcl +mandela +halliday +billie +smears +handicrafts +boughs +malformation +d.e. +arias +sk +ef +avarice +auntie +admissibility +characterisation +workplaces +stag +funk +patchwork +surgical +lavender +crimea +purgatory +solidification +softening +shortening +m.m. +voucher +casas +adolph +takers +exuberance +bookseller +acne +eaves +ultra +horde +yardstick +grit +spaghetti +nakedness +basal +borden +parkway +d.w. +aec +deputation +dwarfs +ui +warts +olive +fitch +counsellors +outfits +fleas +io +kirkpatrick +convex +godhead +bombings +humphreys +mutton +upton +n.s. +conjunctions +clotting +sonora +giddens +eyesight +crt +fundamentalists +bequest +hardin +baer +packer +sanctuaries +shippers +panes +catcher +elton +dong +bastion +hammers +smoker +chloroplasts +fecundity +bully +permutations +polio +trypsin +silks +readjustment +glaser +sg +exclusions +odessa +radial +albright +subclass +adventurer +m.r. +drowsiness +cavendish +osiris +pericles +pavlov +chariots +antics +bristles +reverie +polygons +distal +lockwood +keep +usher +vicksburg +ejaculation +humus +ohms +alleviation +verbal +malt +depravity +fatalities +turkeys +pinto +bowie +lucifer +abram +arbitral +choosing +gee +roscoe +stacey +initiator +rusk +tinker +lockheed +prod +fifteenth +durand +cremation +canto +practicality +mohawk +unconsciousness +casein +financiers +volley +veal +wanda +pembroke +mismanagement +agamemnon +memos +fervour +spills +civic +truthfulness +cruises +harmonization +niebuhr +podium +brasil +adele +sympathizers +launching +tillich +protectors +extras +booksellers +nueva +colds +laziness +shrug +qaeda +bum +fevers +cascades +originator +fontana +litres +crush +cobra +bolshevik +n.a. +evocation +juarez +cuffs +moliere +existentialism +renee +chills +troughs +midway +armada +perl +oocytes +sanctification +malady +agrarian +ur +easton +dropout +surrogate +handshake +potsdam +droplet +lawmakers +xxii +clipboard +taxis +turnbull +beets +middlemen +disrespect +weaving +speciation +horsepower +berkshire +soaps +d.f. +rims +comedian +agra +graphic +shaker +latina +maximus +metamorphism +rams +kara +carbonyl +galveston +mcbride +entitlements +creole +a4 +richelieu +gynecology +signatories +melancholy +livery +crohn +mehta +converters +populism +captions +enter +carbonates +slap +rosary +turnaround +scapegoat +galicia +dynamite +manley +otter +skyline +hurdle +won +heats +quine +marsden +blunder +lori +haifa +horseman +a.l. +artisan +thrombocytopenia +quarries +battleships +copyrights +namespace +oda +monmouth +lila +pullman +orphanage +devlin +cohesiveness +evaluator +stroma +tulsa +hospice +chore +stereotyping +stephan +parti +norwood +bonner +comparative +crashes +domesticity +enhancements +hydrology +alignments +oppressors +postpartum +crate +commoners +rankin +symbiosis +glitter +proper +twig +surrealism +methylene +oedema +toluene +cuticle +smelting +paraphernalia +growths +alkaloids +bruner +g.m. +fossil +uplands +humerus +rasmussen +jakob +tobago +placing +radiations +plotinus +butterworth +lara +hla +kinsman +boolean +mina +gorilla +valle +cheeses +yeasts +clint +splint +sadie +persecutions +vandalism +promulgation +gamblers +totem +classmate +rugby +movers +una +sync +trollope +subtitle +lute +bracelets +fromm +pyruvate +intakes +oas +drinker +takeoff +fours +pip +unified +neonates +available +cellars +electro +palatine +primate +slumber +wechsler +myra +functional +receptivity +assyria +pharm +whims +adv +weaponry +mussels +geiger +recruit +jacks +tubingen +referents +epitaph +microcomputers +homeless +biographers +outposts +ire +ling +protozoa +harvesting +nlrb +universalism +sedgwick +troubleshooting +schulz +cybernetics +lndia +faire +squatters +nigerian +davison +cornwallis +subcontractors +rectification +copolymers +spirals +siemens +midi +healy +bucharest +disjunction +borges +loc +eton +sup +prepositions +ids +colby +politico +erskine +ramparts +pretreatment +onlookers +porte +lb. +cognitions +bending +labrador +bunches +shellfish +wichita +assn +jest +tryptophan +playboy +refrigerators +synergy +carrington +hiatus +banishment +indeterminacy +germanium +reproducibility +lucille +typescript +len +denton +tor +ordinates +ashram +dorsey +humankind +zhao +c.s. +jungles +crunch +sexual +jin +neoplasm +hari +commonality +bremen +eskimo +pup +disclaimer +merle +attainments +surfactants +spiritualism +herzog +haworth +yamamoto +approx +pentecost +addressee +keystone +summa +cope +silesia +ordinary +moiety +clearinghouse +shipyard +bookstores +bahrain +w.b. +calle +violins +e.m. +goebbels +http +sita +apaches +rheumatism +nea +t3 +guggenheim +electrification +parma +chattanooga +emf +mustafa +dionysus +shutdown +stator +bury +interviewee +waugh +scanners +scintillation +pegs +perplexity +critical +harem +orchestras +tuscany +mcconnell +sinn +bathtub +reddy +haryana +corbett +stepwise +fortification +frankel +drapery +attache +ej +outlaws +marius +cahiers +mobs +tweed +subcultures +w.a. +phonograph +mccall +gui +flexor +vo +partisanship +polis +garth +denture +macgregor +microtubules +notoriety +tres +juniper +dendrites +debacle +lubricant +centimeter +lal +asher +grouse +samaritan +horner +dermatol +transylvania +summits +ackerman +posner +morphemes +derision +eusebius +allende +tread +charlottesville +kline +enclaves +sanderson +booklets +t.j. +dirk +desensitization +eschatology +vulnerabilities +dieter +seashore +robson +chops +shelton +playhouse +nath +seaweed +disengagement +condom +casserole +breezes +chopper +piero +blender +ars +hops +thackeray +mahmud +pantry +castor +haemoglobin +angioplasty +grenville +deacons +appointees +arcadia +swans +polysaccharides +barrister +fugue +encephalopathy +cossacks +myeloma +d.h. +aegis +archetypes +vents +sentry +lacquer +innovators +scratches +tortoise +overdose +liberator +mortgagee +vassals +crutches +novak +badges +hitch +wadi +bloomfield +endpoint +keating +vans +dix +dundee +dumont +darby +duo +matthias +classifier +monocytes +jurassic +jg +brendan +jn +nippon +coverings +stony +hydroxyl +sapiens +ascites +facades +lancelot +cannons +ke +arjuna +benchmarks +bce +cd4 +assertiveness +caribou +livy +maxilla +sociability +merritt +resemblances +numbness +bahia +agonist +reminiscence +gestapo +spire +slade +thorndike +linnaeus +intents +ziegler +gpo +lola +fitting +blackboard +diner +dying +dreiser +yr +busch +gables +decoder +fife +heartland +mcnally +interrelations +hysteresis +bayard +stint +philharmonic +disqualification +microphones +anus +clockwise +pensioners +rout +errands +oxygenation +irrationality +azerbaijan +aztecs +picks +hj +adj +bibles +polypeptides +pleading +bantu +progenitor +lysine +swimmer +smuts +shu +analogs +blasts +cannibalism +indentation +roofing +lucky +fallacies +furrow +bindings +neuroses +moulds +ghent +entente +narayan +diversions +priory +hobbs +chim +donnelly +bethel +retainer +clamps +suitor +veblen +pantomime +tectonics +partiality +rainwater +collectivity +accomplice +motorola +glutathione +tinge +cramer +elgin +adenauer +monet +bandit +cont +baja +honourable +machinations +coda +litre +whistler +suitors +judea +rebound +bj +schoolhouse +magdalene +freshwater +steinbeck +chinatown +lorry +antibiotic +h.c. +pubs +runtime +nephews +phoneme +pendleton +tournaments +ernesto +adhd +algebraic +corey +stub +cert +forebears +depositors +slovak +tome +proclamations +tenements +mcmillan +delimitation +dieu +storehouse +sling +shen +thi +sys +winnie +ferrara +looms +kathmandu +radon +silences +remington +cardiac +detour +swinburne +potash +melon +o'malley +convoys +specialisation +quilts +sleeper +nitrates +copolymer +automaton +herbicide +mckenna +d.d. +champaign +w.w. +lytton +carcinogens +panchayats +schoolchildren +courtier +deane +vaughn +harmonic +vedanta +rayon +equities +bulwark +epiphany +overseers +northerners +kohl +tutoring +pragmatics +pythagoras +klux +principalities +glorification +crusader +ellington +cinderella +libretto +freddy +alta +girard +ley +mitsubishi +assassins +emu +mushroom +willoughby +unease +cfr +kicks +characterizations +robbie +ry +usury +though +acton +litany +polym +meir +marcuse +toynbee +testaments +beards +bodyguard +sheen +endometrium +chartres +gatherers +sparrows +mhc +rooster +wight +readability +perfumes +bottleneck +erica +dearborn +repute +watanabe +vr +alas +nagel +mcgrath +reformed +ot +gaol +hui +irrespective +edouard +isabelle +accra +bookkeeping +genomes +gambia +reminiscent +liber +centenary +j.t. +gillian +nb +trophies +currie +raton +pancakes +bain +ploy +butte +veterinarian +champlain +murmurs +pagan +tremors +quorum +lessing +sal +idealization +cataracts +dionysius +mallet +wrapper +momma +marston +chagrin +lawton +sanitary +moat +servicing +monotheism +mimi +locales +lees +flowchart +protease +polities +davey +censors +neale +championships +rump +slider +mariners +regular +cytology +gestalt +antioxidants +conservancy +diabetics +selfhood +venous +marvels +flutes +pups +lars +insemination +announcer +chuckle +emg +om +daytime +rocker +reticence +cupid +adhesions +ghettos +yell +bernardino +wrench +nutr +aronson +trickle +albion +tex +verandah +elinor +gorky +mcintosh +salinas +noblemen +gust +comparability +pca +nakamura +actin +philistines +blackwood +ruse +chevrolet +cbc +functionalism +shea +noncompliance +r.n. +accumulator +aerosols +tutelage +arbitrariness +jaime +falk +epithets +trot +mes +pangs +bolus +nawab +quartermaster +ventilator +surety +ghosh +orators +anarchism +patsy +sauces +directness +monty +fibrinogen +marlene +canvases +calvinism +toolbox +sardinia +hades +hackett +hollis +contentions +hurdles +tombstone +aristophanes +psychoses +therapeutics +overflow +vers +luminescence +p53 +a.e. +corbusier +www +lockhart +monolayer +odes +liang +couplet +valour +nystagmus +brandenburg +sinks +tau +hd +upkeep +alimony +fell +altman +siding +underdevelopment +retinue +sadat +squirrel +plebiscite +nagy +malfunction +meteorites +conseil +filtrate +seaside +spectre +schlegel +backpack +thorne +incursions +hauser +furtherance +tins +serine +sorcerer +b12 +ventura +harms +metab +observances +benzodiazepines +lister +schuyler +forbearance +lacy +shaftesbury +ridley +sloane +oscillators +dictators +mumford +frontispiece +appellation +suns +costello +dawes +garrick +tablespoon +retainers +autonomous +covent +vikings +kano +my +closets +sphinx +vasoconstriction +dungeon +volta +celts +dea +nearness +fontaine +retort +alessandro +krebs +remoteness +underwriting +preschool +croce +aw +aphids +nsw +delaney +lovell +uc +paige +ics +rudiments +sinha +loudness +malls +musa +coordinating +loyola +matt. +boast +thoroughness +immaturity +guaranty +hunts +miniatures +duress +hosp +organist +gide +labelling +synthase +plc +neurones +titian +slug +tomlinson +fichte +vasopressin +ahmedabad +callahan +resistant +a.a. +cusp +km2 +irc +feminine +escrow +sinatra +canes +insensitivity +flooring +denials +lombard +astrophys +ing +lambda +boxing +s.r. +passageway +mediocrity +sleeping +temporality +opportunism +sausages +tahiti +tris +sewing +jaffe +wretch +hysterectomy +bluffs +malacca +jul +panacea +methylation +cornelia +polemics +civilian +pavements +flue +teammates +sgt +tally +nonfiction +colloid +sulcus +outwards +percival +logics +fisk +operand +shank +bayer +nord +milo +rea +harlequin +simms +hollows +mori +valet +modulator +liza +propensities +abdication +mutuality +rana +reset +ville +mcculloch +adrienne +bundy +needham +carnage +litigants +buster +grazing +clicks +standstill +gunnar +kohn +optical +histamine +margot +brew +comstock +arno +roc +limousine +burgers +athletic +guarantor +palais +messaging +scoop +mistresses +coe +donkeys +experimenters +nymph +snout +woodstock +shudder +dada +antilles +alveoli +writs +artemis +bayonets +wrestling +b.j. +serena +alger +absorber +copeland +manoeuvres +guidebook +knoll +morgenthau +crocker +extortion +franciscans +timidity +radiol +hines +sterne +botanical +bayonet +zack +nationhood +resonator +giroux +burrow +mausoleum +mcgovern +horst +lemons +magnates +tanya +madeline +subscripts +fein +ami +crucifix +enrollments +realignment +macrophage +spurt +voluntary +mccann +tavistock +amends +cession +rupee +activator +blisters +oat +carers +clearness +bunyan +glycoprotein +exxon +millie +doublet +stuttering +catastrophes +coates +solicitude +finley +taurus +knack +vanadium +cohabitation +gangster +jap +homelands +assignee +corresponds +sim +grimes +mens +breads +pcb +propane +ensembles +lading +setae +trieste +blizzard +minstrel +cavalier +disorientation +sexton +o'leary +s.w.2d +fructose +cognizance +cleft +anson +hms +calculators +alden +retirees +sorption +inca +xl +cherokees +krause +afflictions +corpora +reinterpretation +crockett +rec +bradycardia +deb +eulogy +bounce +lubricants +quail +vivekananda +enron +kt +nrc +henley +mares +creoles +swann +jovanovich +palladium +manslaughter +multi +requisition +latham +revitalization +refreshments +fleece +alfredo +reinstatement +ascii +agitators +spindles +malignancies +roach +blanco +workspace +triglycerides +squid +oaxaca +madden +waterman +oceanography +starters +touchstone +crowell +gourmet +wc +liege +biceps +fasb +sprague +curran +rockville +dune +ovum +akron +d.s. +atmospheric +neon +tornado +simile +airfields +trna +goodrich +carotene +ismail +liquors +catfish +osgood +quantization +ricky +xxv +uranus +bandura +menon +biddle +galleys +confusions +transferor +serra +symptomatology +inducements +stupor +viscera +divorces +oates +caterpillars +layoffs +subcontractor +mandy +chicano +takahashi +stab +trujillo +mirza +swimmers +n.h. +hew +synapse +nsf +shipwreck +soma +dim +carcasses +shipper +assigns +mattie +tem +kohlberg +soto +trope +lawlessness +devonshire +bolshevism +bradbury +lipoproteins +commute +islets +inaccuracies +chieftains +selma +lnc +flyer +bound +perusal +singleton +hidalgo +samurai +promenade +zhu +samaria +mora +binge +bu +chert +cooler +whirlwind +ripley +leech +whittaker +uzbekistan +ebony +swarms +gyrus +spatial +surfactant +montage +snare +janis +trooper +sis +moe +degeneracy +hyperthyroidism +khomeini +phraseology +str +wilfred +rumble +thrusts +thy +reels +kidd +rangoon +ganga +eviction +derrick +archangel +esau +talking +tribals +gully +classical +gallantry +rilke +vas +dworkin +haldane +tsh +lignin +tutorial +jig +crypt +meiji +whyte +jurist +gilles +helms +lindbergh +understatement +atresia +holman +egan +l5 +getty +agr +salzburg +caprice +pedersen +css +encapsulation +saratoga +adjuvant +shorthand +affront +craven +limbo +tod +hepburn +transients +swain +tithes +halloween +gong +warheads +arturo +revivals +cub +mercantile +jock +poses +goings +n.w.2d +pacifism +plagues +nara +dbms +stoics +volga +infrastructures +pestilence +savanna +adenoma +linton +sampler +trier +separatism +flanagan +marti +gonzales +unbelief +cartons +cuban +dormitories +automata +bidders +elderly +colonisation +kurtz +requisites +bea +forgetfulness +stamford +genevieve +taverns +pauli +gateways +avignon +idealist +archers +contestants +este +tailors +cheques +dyslexia +grocer +r.f. +econ +nba +profiling +coles +tilly +naivete +sanger +pitchers +w.d. +hump +schofield +ju +samuelson +federico +martian +aeschylus +ombudsman +walther +leninism +fingerprint +rubinstein +chand +streptococci +valuables +methadone +mountbatten +zagreb +daybreak +kuomintang +hatfield +snows +priming +fiasco +dumps +violinist +meteor +hidden +elise +elation +exemplar +trudeau +casinos +laval +underpinnings +equanimity +pollination +woodwork +cilia +plantings +lamar +embers +oscilloscope +checklists +antimony +typhus +acquittal +landlady +oncology +sternum +obituary +lifts +cassius +above +fanatics +plunger +pw +essential +honorable +aqueduct +inquirer +estes +nino +langston +thor +cardiomyopathy +optimality +fairfield +schoolteacher +allotments +peritonitis +benediction +catharine +zach +aiken +insides +dunlap +droughts +fibrils +ark. +woolen +breakthroughs +teamsters +g.r. +operational +transpiration +mencken +printout +s1 +kato +valera +alamos +mca +ellsworth +bellamy +reflectivity +c1 +contravention +teas +shinto +clarkson +johanna +jamestown +deans +universite +johnstone +sutras +dermis +lukacs +androgens +milliseconds +imputation +slates +anglia +expressionism +reichstag +leighton +ponty +cassettes +ailment +transferee +cartels +nadir +unicef +recapitulation +cy +maier +montenegro +instrumentality +hemlock +rowley +xenophon +vidal +ua +magicians +pes +affidavits +antisemitism +erudition +scm +mari +loveliness +dandy +d.c +fireman +loot +forsyth +comers +ababa +ramus +ahab +bio +policing +helmholtz +scaffolding +huston +ophthalmology +webber +alibi +flasks +travail +freiburg +brodie +veils +murdock +applet +bassett +micrographs +hodder +brahmans +woodruff +mays +lutherans +shire +spellings +methodism +jasmine +termites +appeasement +lennon +marietta +heme +bretton +croft +canary +gorman +ist +hyper +attlee +falstaff +pis +schrodinger +herrera +nationalisation +incongruity +cowper +xyz +auger +cpsu +simmel +fillmore +mayonnaise +drudgery +rearmament +gaines +butchers +harrisburg +householder +seven +buys +eh +rochelle +lotion +superman +strickland +chun +yorkers +rectifier +warship +conde +saws +financier +bureaucrat +affirmations +craze +captors +firth +he +ambience +how +pow +waterfalls +belinda +woody +blackmail +diving +jong +commissar +debussy +plums +chaplains +fillers +germain +librarianship +grandmothers +deutschland +gurney +electrocardiogram +positives +parapet +unreality +palma +bethany +callers +fanon +spades +fargo +fascist +mira +garnet +starting +interception +ukrainians +newness +rodin +prolapse +ecological +motherland +downside +diskette +mandarin +airflow +drucker +hepatocytes +grenade +huey +duet +iceberg +myron +lymphomas +yoshida +transient +sarajevo +preconceptions +sacs +schwab +chisholm +vertigo +gourd +devotions +whistles +pickles +mouthful +mindset +senor +nilsson +grayson +kj +spore +macy +alligator +cobol +issuers +commuter +commando +texans +subtype +saddles +acumen +aldosterone +sig +biblioteca +moreau +p3 +glucagon +multipliers +convolution +burnet +beale +allegheny +tattoo +apostolic +intimation +chakra +bland +suitcases +glimmer +bhutan +ufo +detractors +batavia +luminance +riga +mx +tenses +scarecrow +carpentry +gravy +predestination +mineralogy +bari +beveridge +agglomeration +punches +pacification +gleason +pere +epoxy +streetcar +merck +chicanos +pajamas +joshi +previous +gregor +skis +p.r. +sucker +alder +diaper +dogmatism +calligraphy +workpiece +compare +lim +eocene +igor +c.h. +think +quill +jockey +antiserum +collectivism +convocation +winding +cid +moan +dura +deceleration +tapestries +clatter +bateson +entrapment +oa +turnpike +plata +decentralisation +cracow +earls +embryology +causeway +tonga +elgar +alton +preliminaries +sawdust +instigation +brothel +titan +hoard +codon +phobias +potts +slowdown +creams +baal +galway +tertiary +warm +childbearing +hoyt +conveniences +madeira +emilia +quadrangle +eeoc +inorganic +hydrocephalus +haines +impoverishment +isaacs +fol +hallucination +dropouts +parlance +ballantine +insolence +coups +reinforcers +egalitarianism +magnolia +miscellany +phallus +guzman +own +rudy +rabin +f2d +volkswagen +menzies +crisp +grandchild +crustaceans +fairchild +sancho +wilberforce +mackinnon +filmmaker +lass +kc +isdn +chesterton +ach +hutchins +campaigning +hooke +promiscuity +babylonia +grafton +gemini +highlanders +interferences +fetters +soprano +widower +vulgarity +wald +pandora +preschoolers +carcinogenesis +eisenstein +inferno +calmness +liberality +daley +oc +longstreet +colbert +precipice +nonviolence +psoriasis +geographical +finns +biosphere +dominique +aol +pediatric +fo +continuities +hillsides +pvt +catalonia +malinowski +rolf +infirmary +derivations +torpedoes +shreds +diffusivity +tibetans +darts +casablanca +docket +arden +rafts +preparatory +jansen +fas +herschel +abingdon +expatriates +pao +westmoreland +redmond +outpouring +downturn +bulimia +glycoproteins +rosenfeld +ww +sob +thud +botanist +underwriter +hammock +skim +pico +mordecai +portrayals +tribulation +drunk +chihuahua +consultative +historicity +shiver +inwards +katy +protege +burnout +dsm +navel +thunderstorm +wesleyan +if +heavenly +overhaul +reeve +ramayana +smiths +msc +prisms +furrows +habituation +chien +dhcp +separateness +tristram +clowns +ringing +beatings +oceania +mappings +boyce +estimations +pta +presidium +shortfall +harbours +tributes +facilitators +umpire +diapers +gruyter +lind +navarre +permutation +kazan +eroticism +vorticity +childs +sasha +stoppage +caravans +blueprints +td +vertical +poplar +replicas +kennan +asses +cheerfulness +dn +freemen +crevices +kpa +infusions +swaziland +python +necessaries +g.e. +pyrenees +baltic +bevin +eddies +pitman +mixes +virology +discoloration +mahoney +littlefield +erythematosus +lutz +langdon +clamor +turban +instalments +sangh +cant +eerdmans +staphylococcus +stunt +nanking +dragoons +newsprint +bering +shortcoming +detonation +snell +broken +kristeva +goblet +amygdala +conflagration +schaefer +phagocytosis +antennae +caverns +mimicry +dorchester +heterosexuality +ch'ing +grate +bertie +booking +entomology +oskar +fireplaces +hosea +pneumothorax +rime +nn +thickets +cm2 +crowe +broadside +hawley +kiel +undergrowth +monopolist +postman +acropolis +corning +assessors +proxies +nightclub +insulator +fluorine +parenthesis +byrnes +rhys +chow +sybil +eucalyptus +esl +matrimony +titer +fillet +operate +peri +cleavages +moser +pumpkin +hippocrates +outing +winkler +locusts +vultures +hoof +xu +tyrone +ln +connell +sumter +calibre +r.p. +amelioration +entertainers +ardor +girlfriends +notary +gauguin +reindeer +griswold +cocks +stances +seligman +gw +geraldine +mortification +aetiology +neoplasia +outcrops +glide +ignacio +gadgets +easement +goggles +differs +bogs +polypropylene +usurpation +schelling +alberti +blunt +bibliotheque +scala +louie +hereford +vcr +dracula +cinemas +abundances +auerbach +manet +purpura +vicki +windmill +marriott +enlistment +interns +jed +ya +packers +decoding +anesthesiology +cuckoo +loudspeaker +hh +cols +longings +domenico +rediscovery +lf +picard +evaluators +opus +checker +nkrumah +presley +birthright +pompeii +moynihan +echocardiography +fiesta +logarithms +atwood +howl +huck +creating +zachary +celeste +yam +barnabas +agglutination +haskell +aryans +bellies +manipulator +coop +cortisone +digression +casework +forester +birthdays +taos +vehemence +mts +nucleotide +bal +juana +emir +millar +pickett +esa +dinah +thugs +dentition +doorbell +titanic +javascript +marshals +throes +tubs +mckee +laying +ict +ministerial +combine +strongholds +muster +lucian +l4 +filings +s.l. +leviticus +infatuation +detainees +moving +hdl +holstein +q2 +kung +emissaries +w.r. +midrash +geographer +geophysics +calvary +closures +bayes +stevie +upshot +ecologists +industrialism +mort +bro +gulliver +kuo +bakers +togo +ductility +rubella +syrians +prelates +constitutionalism +axel +solver +violets +gainesville +juniors +vaporization +luxemburg +cucumbers +fannie +peek +sunderland +geertz +governorship +immunoglobulins +chop +braves +fabian +puck +heresies +assessor +burners +godfather +detritus +osteoarthritis +plagioclase +incline +nouveau +bookshop +eritrea +bottlenecks +rashid +amman +aurelius +flyers +hilbert +schafer +mosses +dentures +wager +washburn +taper +psa +beryllium +deuterium +radical +leviathan +reps +delano +hamster +coachman +augustin +darmstadt +middletown +pals +actualization +gradations +amine +wheaton +shrewsbury +d.g. +snapshots +bystanders +prolog +ass'n +wh +glaciation +hofmann +ldp +salons +occidental +cochin +cleverness +fiancee +mackintosh +masque +consignment +b.m. +platt +gangrene +verdicts +barrie +g.w. +privation +everest +cassell +berlioz +edicts +misinterpretation +historicism +smes +eczema +mckinney +stacy +frankenstein +crusoe +wj +lagoons +reinhardt +faye +ginny +royalists +maguire +adenosine +zooplankton +highs +pate +adage +scorpion +audition +jumper +appendage +annales +lennox +homme +storia +interact +cesare +p1 +ingrid +worthington +heywood +grudge +schmid +specials +agnew +lemonade +nicola +muslin +lulu +genealogies +ossification +myanmar +retraining +loader +ping +iaea +dodgers +recoveries +credo +autobiographies +antigua +hinton +exclusivity +eccles +grading +bleaching +mathew +iraqis +fatality +personhood +rutter +laundering +dasein +jolt +obstinacy +elle +medea +mahabharata +excommunication +hostels +corbin +promontory +infallibility +skirmish +p.d. +conspiracies +hung +vignettes +pollutant +incandescent +princesses +guerrero +luzon +jumping +stahl +visnu +analgesic +t.s. +cadiz +margery +christoph +superego +cannula +disaffection +niggers +addams +limerick +manson +robespierre +fathoms +anthrax +sheaths +genders +luftwaffe +ind +inks +l3 +g.s. +scarring +dominicans +rearing +gabe +fridge +fiance +vries +guevara +galerie +consents +serfdom +enrico +mons +cather +viktor +afterthought +realizations +mei +shaikh +perrin +swallows +obsessions +gadamer +gilligan +barricades +dimensionality +eels +agric +duplicity +boccaccio +sprawl +visuals +winery +salutation +warhol +mohamed +exchangers +phenytoin +rhone +conditioner +cocoon +booze +climbing +alum +knobs +victorians +ludlow +dorm +proprietorship +chattel +troilus +boomers +angelica +barbie +cory +disuse +kagan +méxico +naturalness +weldon +conjunctiva +seers +idiots +cpm +stearns +fatherhood +endpoints +kimberley +fulbright +indonesian +disinfection +dig +argus +budd +c.w. +scarborough +susannah +joao +smoothing +anvil +ophelia +novella +syncope +bennet +nps +governmental +pollack +gig +exhortations +hsu +prospero +thelma +neighbourhoods +harrow +butterfield +toss +hazlitt +exportation +mcdonnell +nikki +apertures +sukarno +lippmann +sending +registrant +conifers +vials +weave +herbivores +instabilities +moslem +sergeants +commendation +bela +bios +fri +steed +robberies +loathing +burney +idealists +quarts +feuds +cardenas +chiapas +mega +jolly +villiers +aldermen +meteorological +cha +crease +ceos +vestige +bovine +campo +propranolol +hilt +gorges +lyotard +signalling +restorations +finney +photographic +connectedness +transform +normals +ncaa +weizmann +danielle +reappraisal +lathe +theism +fuselage +weekdays +morison +recombinant +w.c. +deserters +cauldron +unionization +pereira +made +gt +h0 +petrochemical +eisenberg +informer +unbelievers +a5 +nozzles +kilometer +metric +behest +corpuscles +iga +greenville +dunlop +invisibility +myelin +wafers +lit +saloons +begin +debra +lk +splinter +imp +bane +kobayashi +shooter +cmv +aches +morpheme +schiff +laden +vogt +goto +interviewing +awkwardness +ies +silicates +portraiture +sloop +principality +austrian +pickets +thesaurus +torre +discoverer +silicate +claudio +hillman +mncs +prostaglandin +atropine +embedding +heiress +moll +disloyalty +dailies +judson +cordelia +rip +mixed +jai +priestess +smugglers +condescension +bai +kang +vico +wastage +ours +dykes +iranians +vygotsky +deflections +incumbent +sawmill +signor +voyager +veracruz +kilns +panthers +cuzco +dimer +dutchman +biofeedback +laptop +jacobi +suarez +fulness +symposia +mash +hoc +blau +perpetuity +neurosurg +coaster +southeastern +resultant +lenny +fresh +■ +locust +vocabularies +distention +systematics +chefs +halley +pilgrimages +poincare +shackles +mccabe +h.a. +belgians +sv +renoir +striving +cautions +peritoneum +c.l. +mannerisms +cookery +magnetic +vacuoles +overalls +wail +cyanosis +vertebral +crocodiles +ringer +aldershot +trustworthiness +borehole +bernoulli +moderns +whipple +collectives +payee +jen +bhakti +rebuttal +pedicle +sweaters +choline +rickets +methotrexate +informatics +ambedkar +rk +monaco +campfire +boniface +comeback +inexperience +quelques +laing +emoluments +thermostat +certified +insertions +narrowness +fp +enthusiast +emissary +conjunctivitis +topeka +easy +damper +solon +stent +proposed +irresponsibility +pagoda +asiatic +ferrari +allport +dio +stipend +ileum +lipase +fowls +perfect +reb +pieter +blunders +loins +infirmity +friendly +prix +dakar +wen +bachelors +splits +chimpanzee +clemency +fanfare +cropping +styrene +garry +bailiff +tri +transporter +interoperability +antagonisms +abd +cantilever +operands +tiller +landon +eps +caro +tva +paulus +r.k. +ug +fitz +seminaries +echelons +dikes +babcock +forman +loomis +walnuts +micelles +vl +trajan +cornice +mumps +magdalen +cupboards +sidelines +herrick +glucocorticoids +jumble +ottomans +mani +merriam +benn +campers +esr +toothpaste +recursion +couplings +puffs +ebenezer +sergio +juno +quito +winning +skirmishes +buckling +tropes +tempers +condyle +alsace +motorcycles +triangulation +revaluation +oakley +pak +zeno +innovator +spate +pinus +joists +mech +inaccuracy +wholes +smog +cracker +palestinian +newcomb +gradation +belknap +technologists +frailty +lineup +bauxite +maastricht +pepys +documentaries +waals +decolonization +videotapes +discipleship +outcrop +bruges +seepage +peroxidase +petra +notches +wr +diplomas +ol +s.p. +checkpoint +drapes +millionaires +pianos +vulva +whips +ferries +rationales +faeces +margarita +dk +manufactures +int'l +jaipur +bolan +herzegovina +molina +hamid +drugstore +depredations +belles +johnnie +backward +toxicol +misdeeds +enormity +laughs +rainer +frankfort +marching +bernice +subclasses +maltreatment +puebla +waistcoat +sssr +ter +invader +musicals +estelle +behaviorism +pussy +recapture +midwifery +peron +cavitation +lifespan +schumacher +ricoeur +eichmann +byzantine +neurosci +indigestion +pooling +caring +surges +metternich +goffman +subsoil +porta +parrots +wiltshire +tompkins +arterioles +unctad +maxine +bibliobazaar +emmett +exemplars +adder +plagiarism +honorary +sporting +tellers +herzl +streptomycin +peep +narrators +procter +adjournment +whirlpool +ewes +yuri +nas +egotism +ariz. +parr +coincidences +laps +tat +icu +vastness +enema +discriminations +berliner +allegro +blonde +ashby +clipper +ladd +gurus +cummins +cline +yves +mattresses +footprint +rational +pfeiffer +settling +parkes +m.h. +samaj +repositories +motorists +ru +caledonia +alamo +copulation +bravo +dunne +outliers +montevideo +noyes +sorting +buff +kinases +sabine +affirmative +scoundrel +bracken +phenylalanine +shears +guangdong +camilla +foodgrains +calico +centerpiece +haunts +acs +mateo +magellan +insignificance +collectivization +vital +coffins +transparencies +adair +tenders +gretchen +encroachments +leanings +shriek +curt +wad +speciality +octopus +pinter +bevan +stoicism +knower +h.e. +collingwood +sorensen +hunch +infidels +oligarchy +katrina +domino +coon +otc +serve +kearney +jacobsen +rehnquist +hollander +orb +arthropods +rests +masquerade +speculum +archdeacon +incompleteness +gough +riggs +torrents +nodule +virol +anarchist +sow +excitability +protective +illegality +pallet +infanticide +uml +ges +clubhouse +satyagraha +l.m. +marginalization +ayres +platte +quarks +strategists +albanians +subroutines +nez +pediatrician +lyre +prog +linens +skeptics +b.r. +snr +m.g. +effluents +choreography +dem +fangs +britannia +rancher +crawl +divinities +monsignor +hulls +wiseman +bund +rabelais +shawn +swaps +barb +munster +tribulations +subscript +yom +stiles +guerra +pavel +stopper +quartets +michaels +ebay +liam +truncation +ica +patti +mcdermott +ultimate +lhasa +burgesses +traditionalists +buffaloes +roebuck +garlands +breech +acetylene +sneakers +psalter +dens +e.c. +barre +emptying +porridge +gabrielle +magi +lichens +cookbook +galton +yogi +meister +frock +forgery +metcalf +diazepam +wyndham +hawai'i +galactose +motorist +glomerulonephritis +rosario +sequestration +basingstoke +duc +absalom +colonels +presumptions +cardiology \ No newline at end of file diff --git a/gifmaker/utils.py b/gifmaker/utils.py new file mode 100644 index 0000000..9187d17 --- /dev/null +++ b/gifmaker/utils.py @@ -0,0 +1,148 @@ +# Standard +import re +import sys +import random +import string +import colorsys +from pathlib import Path +from datetime import datetime +from typing import Dict, Union, Tuple + +# Libraries +import webcolors # type: ignore + + +def random_string() -> str: + vowels = "aeiou" + consonants = "".join(set(string.ascii_lowercase) - set(vowels)) + + def con() -> str: + return random.choice(consonants) + + def vow() -> str: + return random.choice(vowels) + + return con() + vow() + con() + vow() + con() + vow() + + +def get_extension(path: Path) -> str: + return Path(path).suffix.lower().lstrip(".") + + +def exit(message: str) -> None: + msg(f"\nExit: {message}\n") + sys.exit(1) + + +def read_toml(path: Path) -> Union[Dict[str, str], None]: + import tomllib + + if (not path.exists()) or (not path.is_file()): + exit("TOML file does not exist") + return None + + try: + return tomllib.load(open(path, "rb")) + except Exception as e: + msg(f"Error: {e}") + exit("Failed to read TOML file") + return None + + +def random_color() -> Tuple[int, int, int]: + from .config import config + assert isinstance(config.Internal.random_colors, random.Random) + + def component(): + return config.Internal.random_colors.randint(0, 255) + + return component(), component(), component() + + +def random_light() -> Tuple[int, int, int]: + color = random_color() + return change_lightness(color, 255 - 20) + + +def random_dark() -> Tuple[int, int, int]: + color = random_color() + return change_lightness(color, 40) + + +def change_lightness(color: Tuple[int, int, int], lightness: int) -> Tuple[int, int, int]: + hsv = list(colorsys.rgb_to_hsv(*color)) + hsv[2] = lightness + rgb = colorsys.hsv_to_rgb(*hsv) + return (int(rgb[0]), int(rgb[1]), int(rgb[2])) + + +def light_contrast(color: Tuple[int, int, int]) -> Tuple[int, int, int]: + return change_lightness(color, 200) + + +def dark_contrast(color: Tuple[int, int, int]) -> Tuple[int, int, int]: + return change_lightness(color, 55) + + +def random_digit(allow_zero: bool) -> int: + if allow_zero: + return random.randint(0, 9) + else: + return random.randint(1, 9) + + +def get_date(fmt: str) -> str: + if fmt: + return datetime.now().strftime(fmt) + else: + return str(int(datetime.now().timestamp())) + + +def add_alpha(rgb: Tuple[int, int, int], alpha: float) -> Tuple[int, int, int, int]: + return int(rgb[0]), int(rgb[1]), int(rgb[2]), int(255 * alpha) + + +def color_name(name: str) -> Union[Tuple[int, int, int], None]: + try: + return tuple(webcolors.name_to_rgb(name)) + except BaseException: + return None + + +def clean_lines(s: str) -> str: + cleaned = s + cleaned = re.sub(r" *(\n|\\n) *", "\n", cleaned) + cleaned = re.sub(r" +", " ", cleaned) + return cleaned.strip() + + +def divisible(number: int, by: int) -> int: + while number % by != 0: + number += 1 + + return number + + +def msg(message: str) -> None: + print(message, file=sys.stderr) + + +def respond(message: str) -> None: + print(message, file=sys.stdout) + + +def colortext(color: str, text: str) -> str: + codes = { + "red": "\x1b[31m", + "green": "\x1b[32m", + "yellow": "\x1b[33m", + "blue": "\x1b[34m", + "magenta": "\x1b[35m", + "cyan": "\x1b[36m", + } + + if color in codes: + code = codes[color] + text = f"{code}{text}\x1b[0m" + + return text diff --git a/gifmaker/words.py b/gifmaker/words.py new file mode 100644 index 0000000..6d3c582 --- /dev/null +++ b/gifmaker/words.py @@ -0,0 +1,195 @@ +# Modules +from .config import config +from . import utils + +# Standard +import re +import random +from typing import List, Any +from pathlib import Path + + +def process_words() -> None: + if config.remake or config.fillgen: + return + + check_empty() + check_generators() + check_repeat() + + +def check_generators() -> None: + if not config.words: + return + + new_lines: List[str] = [] + + for line in config.words: + new_lines.extend(generate(line)) + + config.words = new_lines + + +def generate(line: str, multiple: bool = True) -> List[str]: + def randgen(word: str, num: int) -> List[str]: + items: List[str] = [] + + for _ in range(num): + allow_zero = True + + if num > 1: + if len(items) == 0: + allow_zero = False + + items.append(get_random(word, allow_zero)) + + return items + + def replace_random(match: re.Match[Any]) -> str: + num = None + + if match["number"]: + num = int(match["number"]) + + if (num is None) or (num < 1): + num = 1 + + return " ".join(randgen(match["word"], num)) + + def replace_number(match: re.Match[Any]) -> str: + num1 = None + num2 = None + + if match["number1"]: + num1 = int(match["number1"]) + + if match["number2"]: + num2 = int(match["number2"]) + + if (num1 is not None) and (num2 is not None): + if num1 >= num2: + return "" + + assert isinstance(config.Internal.random_words, random.Random) + return str(config.Internal.random_words.randint(num1, num2)) + + if (num1 is None) or (num1 < 1): + num1 = 1 + + return "".join(randgen("number", num1)) + + def replace_count(match: re.Match[Any]) -> str: + config.Internal.wordcount += 1 + return str(config.Internal.wordcount) + + def replace_date(match: re.Match[Any]) -> str: + fmt = match["format"] or "%H:%M:%S" + return utils.get_date(fmt) + + multi = 1 + new_lines: List[str] = [] + pattern_multi = re.compile(r"\[\s*(?:x(?P\d+))?\s*\]$", re.IGNORECASE) + + if multiple: + match_multi = re.search(pattern_multi, line) + + if match_multi: + multi = max(1, int(match_multi["number"])) + line = re.sub(pattern_multi, "", line).strip() + + pattern_random = re.compile(r"\[\s*(?Prandomx?)(?:\s+(?P\d+))?\s*\]", re.IGNORECASE) + pattern_number = re.compile(r"\[\s*(?Pnumber)(?:\s+(?P-?\d+)(?:\s+(?P-?\d+))?)?\s*\]", re.IGNORECASE) + pattern_count = re.compile(r"\[(?Pcount)\]", re.IGNORECASE) + pattern_date = re.compile(r"\[\s*(?Pdate)(?:\s+(?P.*))?\s*\]", re.IGNORECASE) + + for _ in range(multi): + new_line = line + new_line = re.sub(pattern_random, replace_random, new_line) + new_line = re.sub(pattern_number, replace_number, new_line) + new_line = re.sub(pattern_count, replace_count, new_line) + new_line = re.sub(pattern_date, replace_date, new_line) + new_lines.append(new_line) + + return new_lines + + +def check_repeat() -> None: + if not config.words: + return + + new_lines: List[str] = [] + pattern = re.compile( + r"^\[\s*(?Prep(?:eat)?)\s*(?P\d+)?\s*\]$", re.IGNORECASE) + + for line in config.words: + match = re.match(pattern, line) + + if match: + num = match["number"] + number = int(num) if num is not None else 1 + new_lines.extend([new_lines[-1]] * number) + else: + new_lines.append(line) + + config.words = new_lines + + +def check_empty() -> None: + if not config.words: + return + + new_lines: List[str] = [] + pattern = re.compile( + r"^\[\s*(?Pempty)(?:\s+(?P\d+))?\s*\]$", re.IGNORECASE) + + for line in config.words: + match = re.match(pattern, line) + + if match: + num = match["number"] + number = int(num) if num is not None else 1 + + for _ in range(number): + new_lines.append("") + else: + new_lines.append(line) + + config.words = new_lines + + +def random_word() -> str: + if not config.randomlist: + assert isinstance(config.randomfile, Path) + lines = config.randomfile.read_text().splitlines() + config.randomlist = [line.strip() for line in lines] + + if not config.Internal.randwords: + config.Internal.randwords = config.randomlist.copy() + + if not config.Internal.randwords: + return "" + + assert isinstance(config.Internal.random_words, random.Random) + w = config.Internal.random_words.choice(config.Internal.randwords) + + if not config.repeatrandom: + config.Internal.randwords.remove(w) + + return w + + +def get_random(rand: str, allow_zero: bool) -> str: + if rand == "random": + return random_word().lower() + elif rand == "RANDOM": + return random_word().upper() + elif rand == "Random": + return random_word().capitalize() + elif rand == "RanDom": + return random_word().title() + elif rand == "randomx": + return random_word() + elif rand == "number": + return str(utils.random_digit(allow_zero)) + else: + return "" diff --git a/media/arguments.gif b/media/arguments.gif new file mode 100644 index 0000000..70a2a08 Binary files /dev/null and b/media/arguments.gif differ diff --git a/media/image.jpg b/media/image.jpg new file mode 100644 index 0000000..d5e0b42 Binary files /dev/null and b/media/image.jpg differ diff --git a/media/installation.gif b/media/installation.gif new file mode 100644 index 0000000..47039d6 Binary files /dev/null and b/media/installation.gif differ diff --git a/media/mean.gif b/media/mean.gif new file mode 100644 index 0000000..93da21a Binary files /dev/null and b/media/mean.gif differ diff --git a/media/more.gif b/media/more.gif new file mode 100644 index 0000000..4305cca Binary files /dev/null and b/media/more.gif differ diff --git a/media/usage.gif b/media/usage.gif new file mode 100644 index 0000000..3121b34 Binary files /dev/null and b/media/usage.gif differ diff --git a/media/video.webm b/media/video.webm new file mode 100644 index 0000000..84e46e2 Binary files /dev/null and b/media/video.webm differ diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..833e38e --- /dev/null +++ b/requirements.txt @@ -0,0 +1,5 @@ +imageio ~= 2.34.0 +imageio-ffmpeg ~= 0.4.9 +pillow ~= 10.2.0 +numpy ~= 1.26.4 +webcolors ~= 1.13 \ No newline at end of file diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..ab132f2 --- /dev/null +++ b/run.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +root="$(dirname "$(readlink -f "$0")")" +cd "$root" +venv/bin/python -m gifmaker.main "$@" \ No newline at end of file diff --git a/scripts/format.sh b/scripts/format.sh new file mode 100755 index 0000000..15fbf2c --- /dev/null +++ b/scripts/format.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +root="$(dirname "$(readlink -f "$0")")" +parent="$(dirname "$root")" +autopep8 --in-place --recursive --aggressive --max-line-length=140 "$parent/gifmaker" \ No newline at end of file diff --git a/scripts/tag.py b/scripts/tag.py new file mode 100755 index 0000000..b276fd3 --- /dev/null +++ b/scripts/tag.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python + +# This is used to create a tag in the git repo +# You probably don't want to run this + +# pacman: python-gitpython +import os +import git +import time +from pathlib import Path + +here = Path(__file__).resolve() +parent = here.parent.parent +os.chdir(parent) + +name = int(time.time()) +repo = git.Repo(".") +repo.create_tag(name) +repo.remotes.origin.push(name) +print(f"Created tag: {name}") \ No newline at end of file diff --git a/scripts/test.sh b/scripts/test.sh new file mode 100755 index 0000000..56aa02d --- /dev/null +++ b/scripts/test.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +# This is used to test if the program is working properly + +root="$(dirname "$(readlink -f "$0")")" +parent="$(dirname "$root")" +cd "$parent" + +venv/bin/python -m gifmaker.main --script "scripts/test.toml" \ No newline at end of file diff --git a/scripts/test.toml b/scripts/test.toml new file mode 100644 index 0000000..4357042 --- /dev/null +++ b/scripts/test.toml @@ -0,0 +1,13 @@ +input = "media/video.webm" +output = "/tmp/gifmaker_test.gif" +words = "Disregard [Random] ; Acquire [Random] ; [date] ; [number 0 999];" +fontsize = 80 +fontcolor = "light2" +bgcolor = "darkfont2" +outline = "font" +filter = "random2" +width = 700 +bottom = 30 +right = 30 +delay = "p100" +verbose = true \ No newline at end of file diff --git a/scripts/venv.sh b/scripts/venv.sh new file mode 100755 index 0000000..18f6c16 --- /dev/null +++ b/scripts/venv.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +# This is used to install the python virtual env + +root="$(dirname "$(readlink -f "$0")")" +parent="$(dirname "$root")" +cd "$parent" + +python -m venv venv && +venv/bin/pip install -r requirements.txt \ No newline at end of file diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..f223c89 --- /dev/null +++ b/setup.py @@ -0,0 +1,29 @@ +from setuptools import setup, find_packages +import json + +with open("gifmaker/manifest.json", "r") as file: + manifest = json.load(file) + +title = manifest["title"] +program = manifest["program"] +version = manifest["version"] + +with open("requirements.txt") as f: + requirements = f.read().splitlines() + +package_data = {} +package_data[program] = ["fonts/*.ttf", "*.txt", "*.json"] + +setup( + name = title, + version = version, + install_requires=requirements, + packages = find_packages(where="."), + package_dir = {"": "."}, + package_data = package_data, + entry_points = { + "console_scripts": [ + f"{program}={program}.main:main", + ], + }, +)