diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..fb20f97
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,11 @@
+on: push
+
+jobs:
+  build-linux:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v1
+      - run: sudo apt-get install --assume-yes libpcre3-dev libfuse-dev fuse libxml2-dev attr
+      - run: make
+      - run: ./test.sh
+
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
new file mode 100644
index 0000000..68a1c4c
--- /dev/null
+++ b/.github/workflows/codeql-analysis.yml
@@ -0,0 +1,71 @@
+# For most projects, this workflow file will not need changing; you simply need
+# to commit it to your repository.
+#
+# You may wish to alter this file to override the set of languages analyzed,
+# or to provide custom queries or build logic.
+#
+# ******** NOTE ********
+# We have attempted to detect the languages in your repository. Please check
+# the `language` matrix defined below to confirm you have the correct set of
+# supported CodeQL languages.
+#
+name: "CodeQL"
+
+on:
+  push:
+    branches: [ master ]
+  pull_request:
+    # The branches below must be a subset of the branches above
+    branches: [ master ]
+  schedule:
+    - cron: '18 20 * * 0'
+
+jobs:
+  analyze:
+    name: Analyze
+    runs-on: ubuntu-latest
+    permissions:
+      actions: read
+      contents: read
+      security-events: write
+
+    strategy:
+      fail-fast: false
+      matrix:
+        language: [ 'cpp' ]
+        # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
+        # Learn more about CodeQL language support at https://git.io/codeql-language-support
+
+    steps:
+    - run: sudo apt-get install --assume-yes libpcre3-dev libfuse-dev fuse libxml2-dev attr
+    - name: Checkout repository
+      uses: actions/checkout@v2
+
+    # Initializes the CodeQL tools for scanning.
+    - name: Initialize CodeQL
+      uses: github/codeql-action/init@v1
+      with:
+        languages: ${{ matrix.language }}
+        # If you wish to specify custom queries, you can do so here or in a config file.
+        # By default, queries listed here will override any specified in a config file.
+        # Prefix the list here with "+" to use these queries and those in the config file.
+        # queries: ./path/to/local/query, your-org/your-repo/queries@main
+
+    # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java).
+    # If this step fails, then you should remove it and run the build manually (see below)
+    - name: Autobuild
+      uses: github/codeql-action/autobuild@v1
+
+    # ℹ️ Command-line programs to run using the OS shell.
+    # 📚 https://git.io/JvXDl
+
+    # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
+    #    and modify them (or add more) to build your code if your project
+    #    uses a compiled language
+
+    #- run: |
+    #   make bootstrap
+    #   make release
+
+    - name: Perform CodeQL Analysis
+      uses: github/codeql-action/analyze@v1
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 11dbb72..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-language: cpp
-
-matrix:
-  include:
-    - os: linux
-      compiler: gcc
-      dist: trusty
-      sudo: required
-      addons:
-        apt:
-          sources:
-            - ubuntu-toolchain-r-test
-          packages:
-            - attr
-            - fuse
-            - libfuse-dev
-            - libpcre3-dev
-            - libxml2-dev
-
-script:
-  - make
diff --git a/Makefile b/Makefile
index 23d91f0..a89d044 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
-CC=g++
-CFLAGS=-Wall -ansi -D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=26 -DELPP_SYSLOG -DELPP_NO_DEFAULT_LOG_FILE -DELPP_THREAD_SAFE -std=c++11 `xml2-config --cflags` 
-LDFLAGS=-Wall -ansi -lpcre -lfuse `xml2-config --libs` -lpthread
+CXX?=g++
+CXXFLAGS+=-Wall -ansi -D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=26 -DELPP_SYSLOG -DELPP_NO_DEFAULT_LOG_FILE -DELPP_THREAD_SAFE -std=c++11 `xml2-config --cflags`
+LDFLAGS+=-Wall -ansi -lpcre -lfuse `xml2-config --libs` -lpthread
 srcdir=src
 easyloggingdir=vendor/github.com/muflihun/easyloggingpp/src
 builddir=build
@@ -11,33 +11,32 @@ $(builddir):
 	mkdir $(builddir)
 
 loggedfs: $(builddir)/loggedfs.o $(builddir)/Config.o $(builddir)/Filter.o $(builddir)/easylogging.o
-	$(CC) -o loggedfs $(builddir)/loggedfs.o $(builddir)/Config.o $(builddir)/Filter.o $(builddir)/easylogging.o $(LDFLAGS)
+	$(CXX) $(CPPFLAGS) -o loggedfs $(builddir)/loggedfs.o $(builddir)/Config.o $(builddir)/Filter.o $(builddir)/easylogging.o $(LDFLAGS)
 
 $(builddir)/loggedfs.o: $(builddir)/Config.o $(builddir)/Filter.o $(srcdir)/loggedfs.cpp
-	$(CC) -o $(builddir)/loggedfs.o -c $(srcdir)/loggedfs.cpp $(CFLAGS) -Ivendor/github.com/muflihun/easyloggingpp/src
+	$(CXX) $(CPPFLAGS) -o $(builddir)/loggedfs.o -c $(srcdir)/loggedfs.cpp $(CXXFLAGS) -I$(easyloggingdir)
 
 $(builddir)/Config.o: $(builddir)/Filter.o $(srcdir)/Config.cpp $(srcdir)/Config.h
-	$(CC) -o $(builddir)/Config.o -c $(srcdir)/Config.cpp $(CFLAGS)
+	$(CXX) $(CPPFLAGS) -o $(builddir)/Config.o -c $(srcdir)/Config.cpp $(CXXFLAGS)
 
 $(builddir)/Filter.o: $(srcdir)/Filter.cpp $(srcdir)/Filter.h
-	$(CC) -o $(builddir)/Filter.o -c $(srcdir)/Filter.cpp $(CFLAGS)
+	$(CXX) $(CPPFLAGS) -o $(builddir)/Filter.o -c $(srcdir)/Filter.cpp $(CXXFLAGS)
 
 $(builddir)/easylogging.o: $(easyloggingdir)/easylogging++.cc $(easyloggingdir)/easylogging++.h
-	$(CC) -o $(builddir)/easylogging.o -c $(easyloggingdir)/easylogging++.cc $(CFLAGS)	
+	$(CXX) $(CPPFLAGS) -o $(builddir)/easylogging.o -c $(easyloggingdir)/easylogging++.cc $(CXXFLAGS)
 
 clean:
 	rm -rf $(builddir)/
-	
+
 install:
-	gzip --keep loggedfs.1
-	cp loggedfs.1.gz /usr/share/man/man1/
-	cp loggedfs /usr/bin/
-	cp loggedfs.xml /etc/
+	mkdir -p $(DESTDIR)/usr/share/man/man1 $(DESTDIR)/usr/bin $(DESTDIR)/etc
+	gzip < loggedfs.1 > $(DESTDIR)/usr/share/man/man1/loggedfs.1.gz
+	cp loggedfs $(DESTDIR)/usr/bin/
+	cp loggedfs.xml $(DESTDIR)/etc/
 
 
 mrproper: clean
 	rm -rf loggedfs
-			
+
 release:
 	tar -c --exclude="CVS" $(srcdir)/ loggedfs.xml LICENSE loggedfs.1.gz Makefile | bzip2 - > loggedfs.tar.bz2
-
diff --git a/README.md b/README.md
index c41da90..387d236 100644
--- a/README.md
+++ b/README.md
@@ -2,50 +2,51 @@
 
 [![Build Status](https://travis-ci.org/rflament/loggedfs.svg?branch=feature%2Feasylogging%2B%2B)](https://travis-ci.org/rflament/loggedfs)
 
-Donate Ethereum: 0x83FBC94FBca4e2f10Bede63e16C5b0Bb31a1Fed1
+Donate Ethereum: 0xd13338639d2d3eCeBea0B53C8E4C9085aa21Ccb2
 
 ## Description
 
-LoggedFS is a fuse-based filesystem which can log every operations that happens in it. 
+LoggedFS is a [FUSE](https://en.wikipedia.org/wiki/Filesystem_in_Userspace)-based filesystem which can log every operations that happens in it.
 
-How does it work ?
+### How does it work ?
 
-Fuse does almost everything. LoggedFS only sends a message to syslog when called by fuse and then let the real filesystem do the rest of the job.
+FUSE does almost everything. LoggedFS only sends a message to syslog when called by FUSE and then let the real filesystem do the rest of the job.
 
 ## Installation
 
-If loggedfs is included in your distribution you can just install with your package manager :
+If LoggedFS 0.9 is included in your distribution you can just install with your package manager:
 
-    sudo apt-get install loggedfs   
+    sudo apt-get install loggedfs
 
 ## Simplest usage
 
-To record access to /tmp/TEST into ~/log.txt, just do:
+To record access to `/tmp/TEST` into `~/log.txt`, just do:
 
-    loggedfs -l ~/log.txt /tmp/TEST 
+    loggedfs -l ~/log.txt /tmp/TEST
 
-To stop recording, just unmount as usual:
+To stop recording, just `unmount` as usual:
 
     sudo umount /tmp/TEST
-    
-~/log.txt will need to be changed to readable by setting permissions:
-    
+
+The `~/log.txt` file will need to be changed to readable by setting permissions:
+
     chmod 0666 ~/log.txt
-    
+
 ## Installation from source
 
-First you have to make sure that fuse is installed on your computer. 
-If you have a recent distribution it should be. Fuse can be downloaded here : https://github.com/libfuse/libfuse.
+First you have to make sure that FUSE is installed on your computer.
+If you have a recent distribution it should be. FUSE can be downloaded here: [github.com/libfuse/libfuse](https://github.com/libfuse/libfuse).
 
-Then you should download the loggedfs archive and install it with the make command :
+Then you should download the LoggedFS source code archive and install it with the `make` command:
 
     sudo apt-get install libfuse-dev libxml2-dev libpcre3-dev
-    tar xfj loggedfs-X.Y.tar.bz2
-    cd loggedfs-X.Y
+    wget https://github.com/rflament/loggedfs/archive/loggedfs-0.X.tar.gz
+    tar xfz loggedfs-0.X.tar.gz
+    cd loggedfs-loggedfs-0.X
     make
     make install
-    
-LoggedFS has the following dependencies :
+
+LoggedFS has the following dependencies:
 
     fuse
     pcre
@@ -58,7 +59,7 @@ LoggedFS can use an XML configuration file if you want it to log operations only
 Here is a sample configuration file :
 
     <?xml version="1.0" encoding="UTF-8"?>
-    
+
     <loggedFS logEnabled="true" printProcessName="true">
       <includes>
         <include extension=".*" uid="*" action=".*" retname=".*"/>
@@ -70,13 +71,13 @@ Here is a sample configuration file :
       </excludes>
     </loggedFS>
 
-This configuration can be used to log everything except it if concerns a *.bak file, or if the uid is 1000, or if the operation is getattr.
+This configuration can be used to log everything except it if concerns a `*.bak` file, or if the uid is 1000, or if the operation is `getattr`.
 
 ## Launching LoggedFS
 
 If you just want to test LoggedFS you don't need any configuration file.
- 
-Just use that command :
+
+Just use that command:
 
     loggedfs -f -p /var
 
@@ -103,10 +104,10 @@ You should see logs like these :
     2018-03-21 15:32:15,892 INFO [default] getattr /var/lib/apt/lists/partial {SUCCESS} [ pid = 1539 update-notifier uid = 1000 ]
     2018-03-21 15:32:17,873 INFO [default] LoggedFS closing.
 
-If you have a configuration file to use you should use this command :
+If you have a configuration file to use you should use this command:
 
     ./loggedfs -c loggedfs.xml -p /var
 
-If you want to log what other users do on your filesystem, you should use the -p option to allow them to see your mounted files. For a complete documentation see the manual page
+If you want to log what other users do on your filesystem, you should use the `-p` option to allow them to see your mounted files. For a complete documentation see the manual page.
 
-Rémi Flament - remipouak at gmail.com
\ No newline at end of file
+Rémi Flament - remipouak at gmail.com
diff --git a/debian/changelog b/debian/changelog
index 6c1fd97..fab2b87 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,10 @@
-loggedfs (0.9+ds-4) UNRELEASED; urgency=medium
+loggedfs (0.9+git20220429.1.680e1cc-1) UNRELEASED; urgency=medium
 
   * Set upstream metadata fields: Bug-Database, Bug-Submit.
+  * New upstream snapshot.
+  * Drop patch build-fixes.patch, present upstream.
 
- -- Debian Janitor <janitor@jelmer.uk>  Fri, 24 Sep 2021 04:58:15 -0000
+ -- Debian Janitor <janitor@jelmer.uk>  Sat, 07 May 2022 04:35:08 -0000
 
 loggedfs (0.9+ds-3) unstable; urgency=medium
 
diff --git a/debian/patches/build-fixes.patch b/debian/patches/build-fixes.patch
deleted file mode 100644
index c9f24ea..0000000
--- a/debian/patches/build-fixes.patch
+++ /dev/null
@@ -1,97 +0,0 @@
-commit 67fc01b0f5591e67498799c6eb953fe4fe20e9b7
-Author: Stephen Kitt <steve@sk2.org>
-Date:   Fri Jan 8 14:19:45 2021 +0100
-
-    Build system improvements (#20)
-    
-    * Clean up whitespace in Makefile
-    
-    Signed-off-by: Stephen Kitt <steve@sk2.org>
-    
-    * Use $(easyloggingdir) as the include directory
-    
-    Signed-off-by: Stephen Kitt <steve@sk2.org>
-    
-    * Install to $(DESTDIR)
-    
-    Common practice for installation targets is to install to $(DESTDIR),
-    if it's defined. This is used by most packaging systems to install for
-    packaging purposes (instead of the final destination directories).
-    
-    Signed-off-by: Stephen Kitt <steve@sk2.org>
-    
-    * Use CXX instead of CC
-    
-    Since the build uses C++, use $(CXX) and $(CXXFLAGS) instead of $(CC)
-    and $(CFLAGS); the latter are used for the C compiler.
-    
-    Signed-off-by: Stephen Kitt <steve@sk2.org>
-    
-    * Allow the build flags to be overridden
-    
-    Packaging systems use CXX, CXXFLAGS, LDFLAGS etc. to define standard
-    flags used for package builds. This patch changes the build to
-    preserve the values of those externally-defined flags, augmenting them
-    if necessary.
-    
-    Signed-off-by: Stephen Kitt <steve@sk2.org>
-
-diff --git a/Makefile b/Makefile
-index 23d91f0..a89d044 100644
---- a/Makefile
-+++ b/Makefile
-@@ -1,6 +1,6 @@
--CC=g++
--CFLAGS=-Wall -ansi -D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=26 -DELPP_SYSLOG -DELPP_NO_DEFAULT_LOG_FILE -DELPP_THREAD_SAFE -std=c++11 `xml2-config --cflags` 
--LDFLAGS=-Wall -ansi -lpcre -lfuse `xml2-config --libs` -lpthread
-+CXX?=g++
-+CXXFLAGS+=-Wall -ansi -D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=26 -DELPP_SYSLOG -DELPP_NO_DEFAULT_LOG_FILE -DELPP_THREAD_SAFE -std=c++11 `xml2-config --cflags`
-+LDFLAGS+=-Wall -ansi -lpcre -lfuse `xml2-config --libs` -lpthread
- srcdir=src
- easyloggingdir=vendor/github.com/muflihun/easyloggingpp/src
- builddir=build
-@@ -11,33 +11,32 @@ $(builddir):
- 	mkdir $(builddir)
- 
- loggedfs: $(builddir)/loggedfs.o $(builddir)/Config.o $(builddir)/Filter.o $(builddir)/easylogging.o
--	$(CC) -o loggedfs $(builddir)/loggedfs.o $(builddir)/Config.o $(builddir)/Filter.o $(builddir)/easylogging.o $(LDFLAGS)
-+	$(CXX) $(CPPFLAGS) -o loggedfs $(builddir)/loggedfs.o $(builddir)/Config.o $(builddir)/Filter.o $(builddir)/easylogging.o $(LDFLAGS)
- 
- $(builddir)/loggedfs.o: $(builddir)/Config.o $(builddir)/Filter.o $(srcdir)/loggedfs.cpp
--	$(CC) -o $(builddir)/loggedfs.o -c $(srcdir)/loggedfs.cpp $(CFLAGS) -Ivendor/github.com/muflihun/easyloggingpp/src
-+	$(CXX) $(CPPFLAGS) -o $(builddir)/loggedfs.o -c $(srcdir)/loggedfs.cpp $(CXXFLAGS) -I$(easyloggingdir)
- 
- $(builddir)/Config.o: $(builddir)/Filter.o $(srcdir)/Config.cpp $(srcdir)/Config.h
--	$(CC) -o $(builddir)/Config.o -c $(srcdir)/Config.cpp $(CFLAGS)
-+	$(CXX) $(CPPFLAGS) -o $(builddir)/Config.o -c $(srcdir)/Config.cpp $(CXXFLAGS)
- 
- $(builddir)/Filter.o: $(srcdir)/Filter.cpp $(srcdir)/Filter.h
--	$(CC) -o $(builddir)/Filter.o -c $(srcdir)/Filter.cpp $(CFLAGS)
-+	$(CXX) $(CPPFLAGS) -o $(builddir)/Filter.o -c $(srcdir)/Filter.cpp $(CXXFLAGS)
- 
- $(builddir)/easylogging.o: $(easyloggingdir)/easylogging++.cc $(easyloggingdir)/easylogging++.h
--	$(CC) -o $(builddir)/easylogging.o -c $(easyloggingdir)/easylogging++.cc $(CFLAGS)	
-+	$(CXX) $(CPPFLAGS) -o $(builddir)/easylogging.o -c $(easyloggingdir)/easylogging++.cc $(CXXFLAGS)
- 
- clean:
- 	rm -rf $(builddir)/
--	
-+
- install:
--	gzip --keep loggedfs.1
--	cp loggedfs.1.gz /usr/share/man/man1/
--	cp loggedfs /usr/bin/
--	cp loggedfs.xml /etc/
-+	mkdir -p $(DESTDIR)/usr/share/man/man1 $(DESTDIR)/usr/bin $(DESTDIR)/etc
-+	gzip < loggedfs.1 > $(DESTDIR)/usr/share/man/man1/loggedfs.1.gz
-+	cp loggedfs $(DESTDIR)/usr/bin/
-+	cp loggedfs.xml $(DESTDIR)/etc/
- 
- 
- mrproper: clean
- 	rm -rf loggedfs
--			
-+
- release:
- 	tar -c --exclude="CVS" $(srcdir)/ loggedfs.xml LICENSE loggedfs.1.gz Makefile | bzip2 - > loggedfs.tar.bz2
--
diff --git a/debian/patches/series b/debian/patches/series
index 5ad4f77..e69de29 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +0,0 @@
-build-fixes.patch
diff --git a/src/loggedfs.cpp b/src/loggedfs.cpp
index 55a2dc6..dfab611 100644
--- a/src/loggedfs.cpp
+++ b/src/loggedfs.cpp
@@ -1,7 +1,7 @@
 /*****************************************************************************
  * Author:   Remi Flament <remipouak at gmail dot com>
  *****************************************************************************
- * Copyright (c) 2005 - 2018, Remi Flament
+ * Copyright (c) 2005 - 2022, Remi Flament and contributors
  *
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -78,7 +78,8 @@ struct LoggedFS_Args
 {
     char *mountPoint; // where the users read files
     char *configFilename;
-    bool isDaemon; // true == spawn in background, log to syslog
+    bool isDaemon; // true == spawn in background, log to syslog except if log file parameter is set
+    bool logToSyslog;
     const char *fuseArgv[MaxFuseArgs];
     int fuseArgc;
 };
@@ -737,6 +738,7 @@ static bool processArgs(int argc, char *argv[], LoggedFS_Args *out)
 {
     // set defaults
     out->isDaemon = true;
+    out->logToSyslog = true;
 
     out->fuseArgc = 0;
     out->configFilename = NULL;
@@ -774,6 +776,7 @@ static bool processArgs(int argc, char *argv[], LoggedFS_Args *out)
             return false;
         case 'f':
             out->isDaemon = false;
+            out->logToSyslog = false;
             // this option was added in fuse 2.x
             PUSHARG("-f");
             defaultLogger->info("LoggedFS not running as a daemon");
@@ -795,7 +798,8 @@ static bool processArgs(int argc, char *argv[], LoggedFS_Args *out)
             break;
         case 'l':
         {
-            defaultLogger->info("LoggedFS log file : %v", optarg);
+            defaultLogger->info("LoggedFS log file : %v, no syslog logs", optarg);
+            out->logToSyslog = false;
             el::Configurations defaultConf;
             defaultConf.setToDefault();
             defaultConf.setGlobally(el::ConfigurationType::ToFile, std::string("true"));
@@ -909,7 +913,7 @@ int main(int argc, char *argv[])
     if (processArgs(argc, argv, loggedfsArgs))
     {
 
-        if (loggedfsArgs->isDaemon)
+        if (loggedfsArgs->logToSyslog)
         {
             dispatchAction = el::base::DispatchAction::SysLog;
             loggerId = "syslog";
diff --git a/test.sh b/test.sh
new file mode 100755
index 0000000..71707e9
--- /dev/null
+++ b/test.sh
@@ -0,0 +1,49 @@
+#!/bin/bash
+
+TEST_DIR=/tmp/test-loggedfs
+mkdir $TEST_DIR
+
+####################################################################
+## Test 1: log actions in a file
+####################################################################
+
+# launch loggedfs
+./loggedfs -l ~/log.txt $TEST_DIR
+
+# create file
+echo "bar" >> $TEST_DIR/foo && ls $TEST_DIR
+sudo umount $TEST_DIR
+
+# make sure the actions have been logged in the log file
+COUNT=$(grep -c "write 4 bytes to $TEST_DIR/foo at offset 0" ~/log.txt)
+if [ "$COUNT" -ne "1" ]; then
+  echo "write should have been logged in file"
+  exit 1
+fi
+
+# make sure the actions have not been logged in syslog
+COUNT=$(grep -c "write 4 bytes to $TEST_DIR/foo at offset 0" /var/log/syslog)
+if [ "$COUNT" -ne "0" ]; then
+  echo "nothing should have been logged in syslog"
+  exit 1
+fi
+
+rm ~/log.txt
+
+####################################################################
+## Test 2: log actions to syslog
+####################################################################
+
+# launch loggedfs
+./loggedfs $TEST_DIR
+
+# create file
+echo "bar" >> $TEST_DIR/foo2 && ls $TEST_DIR
+sudo umount $TEST_DIR
+
+# make sure the actions have been logged in syslog
+COUNT=$(grep -c "write 4 bytes to $TEST_DIR/foo2 at offset 0" /var/log/syslog)
+if [ "$COUNT" -ne "1" ]; then
+  echo "write should have been logged in syslog"
+  exit 1
+fi
\ No newline at end of file
diff --git a/vendor/github.com/muflihun/easyloggingpp/.gitignore b/vendor/github.com/muflihun/easyloggingpp/.gitignore
new file mode 100644
index 0000000..925782b
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/.gitignore
@@ -0,0 +1,9 @@
+build/*
+build-*
+*.pro.user
+.DS_Store
+release.info
+bin/*
+logs/*
+experiments/*
+CMakeLists.txt.user
diff --git a/vendor/github.com/muflihun/easyloggingpp/.travis.yml b/vendor/github.com/muflihun/easyloggingpp/.travis.yml
new file mode 100644
index 0000000..33569cf
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/.travis.yml
@@ -0,0 +1,35 @@
+language: cpp
+compiler:
+  - gcc
+os: linux
+dist: trusty
+before_install:
+ - sudo apt-get -qq update
+ - sudo apt-get install -y libgtest-dev valgrind
+ - sudo wget https://github.com/google/googletest/archive/release-1.7.0.tar.gz
+ - sudo tar xf release-1.7.0.tar.gz
+ - cd googletest-release-1.7.0
+ - sudo cmake -DBUILD_SHARED_LIBS=ON .
+ - sudo make
+ - sudo cp -a include/gtest /usr/include
+ - sudo cp -a libgtest_main.so libgtest.so /usr/lib/
+ - which valgrind
+ - cd "${TRAVIS_BUILD_DIR}"
+before_script:
+ - cd test/
+ - cmake -Dtest=ON ../
+ - make
+ - ls -l
+script: "./easyloggingpp-unit-tests -v && cd ../samples/STL && pwd && sh ./.travis_build.sh && valgrind ./bin/very-basic.cpp.bin"
+branches:
+  only:
+    - master
+    - develop
+notifications:
+  recipients:
+    - mkhan3189@gmail.com
+  email:
+    on_success: never
+    on_failure: change
+rvm:
+  - 9.00
diff --git a/vendor/github.com/muflihun/easyloggingpp/CHANGELOG.md b/vendor/github.com/muflihun/easyloggingpp/CHANGELOG.md
new file mode 100644
index 0000000..ca09e2d
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/CHANGELOG.md
@@ -0,0 +1,45 @@
+# Change Log
+
+## [9.95.0] - 02-08-2017
+### Added
+ - Added NetBSD as unix [coypoop](https://github.com/muflihun/easyloggingpp/pull/548/commits)
+ - Ignore `NDEBUG` or `_DEBUG` to determine whether debug logs should be enabled or not. Use `ELPP_DISABLE_DEBUG_LOGS`
+
+### Fixes
+ - Fix compile when `_USE_32_BIT_TIME_T` defined [gggin](https://github.com/muflihun/easyloggingpp/pull/542/files)
+ - Fix invalid usage of safeDelete which can cause an error with valgrind [Touyote](https://github.com/muflihun/easyloggingpp/pull/544/files)
+ - Add code to ensure no nullptr references [tepperly](https://github.com/muflihun/easyloggingpp/pull/512/files)
+
+## [9.94.2] - 12-04-2017
+### Added
+ - CMake option to create static lib (thanks to @romariorios)
+ - Ability to use UTC time using `ELPP_UTC_DATETIME` (thanks to @romariorios)
+ - CMake module updated to support static lib
+
+### Changes
+ - Renamed long format specifiers to full names with padding for readbility
+
+### Fixes
+ - Fixed Android NDK build (thanks to @MoroccanMalinois)
+ - Fix `ELPP_DISABLE_LOGS` not working in VS (thanks to @goloap) #365
+
+## [9.94.1] - 25-02-2017
+### Fixed
+ - Fixes for `/W4` level warnings generated in MSVC compile (Thanks to [Falconne](https://github.com/Falconne))
+ - Fixed links
+ - Fixes removing default logger if other than `default`
+
+### Changes
+ - Changed documentation to mention `easylogging++.cc` in introduction and added links to features
+
+## [9.94.0] - 14-02-2017
+### Fixed
+ - Fixed performance tracking time unit and calculations
+
+### Added
+ - Restored `ELPP_DEFAULT_LOGGER` and `ELPP_DEFAULT_PERFORMANCE_LOGGER`
+ - `Helpers::getThreadName` for reading current thread name
+ - Custom format specifier now has to return `std::string` instead
+ - Merged `thread_name` with `thread` if thread name is available it's used otherwise ID is displayed
+
+For older versions please refer to [https://github.com/muflihun/easyloggingpp/tree/master/doc](https://github.com/muflihun/easyloggingpp/tree/master/doc)
diff --git a/vendor/github.com/muflihun/easyloggingpp/CMakeLists.txt b/vendor/github.com/muflihun/easyloggingpp/CMakeLists.txt
new file mode 100644
index 0000000..1f7244b
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/CMakeLists.txt
@@ -0,0 +1,87 @@
+cmake_minimum_required(VERSION 2.8.12)
+
+project(Easyloggingpp CXX)
+
+macro(require_cpp11)
+        if (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 3.0)
+                # CMake 3.1 has built-in CXX standard checks.
+                message("-- Setting C++11")
+                set(CMAKE_CXX_STANDARD 11)
+                set(CMAKE_CXX_STANDARD_REQUIRED on)
+        else()
+                if (CMAKE_CXX_COMPILER_ID MATCHES "GCC")
+                    message ("-- GNU CXX (-std=c++11)")
+                    list(APPEND CMAKE_CXX_FLAGS "-std=c++11")
+                elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+                    message ("-- CLang CXX (-std=c++11)")
+                    list(APPEND CMAKE_CXX_FLAGS "-std=c++11")
+                else()
+                    message ("-- Easylogging++ requires C++11. Your compiler does not support it.")
+                endif()
+        endif()
+endmacro()
+
+option(test "Build all tests" OFF)
+option(build_static_lib "Build easyloggingpp as a static library" OFF)
+option(lib_utc_datetime "Build library with UTC date/time logging" OFF)
+
+set(ELPP_MAJOR_VERSION "9")
+set(ELPP_MINOR_VERSION "95")
+set(ELPP_PATCH_VERSION "0")
+set(ELPP_VERSION_STRING "${ELPP_MAJOR_VERSION}.${ELPP_MINOR_VERSION}.${ELPP_PATCH_VERSION}")
+
+set(ELPP_INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "The directory the headers are installed in")
+
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
+
+install(FILES
+    src/easylogging++.h
+    src/easylogging++.cc
+    DESTINATION "${ELPP_INCLUDE_INSTALL_DIR}"
+    COMPONENT dev)
+
+if (build_static_lib)
+        if (lib_utc_datetime)
+                add_definitions(-DELPP_UTC_DATETIME)
+        endif()
+
+        require_cpp11()
+        add_library(easyloggingpp STATIC src/easylogging++.cc)
+
+        install(TARGETS
+            easyloggingpp
+            ARCHIVE DESTINATION lib)
+endif()
+
+export(PACKAGE ${PROJECT_NAME})
+
+
+########################################## Unit Testing ###################################
+if (test)
+    # We need C++11
+    require_cpp11()
+    set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
+
+    find_package (gtest REQUIRED)
+
+    include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR})
+
+    enable_testing()
+
+    add_executable(easyloggingpp-unit-tests
+        src/easylogging++.cc
+        test/main.cc
+    )
+
+    target_compile_definitions(easyloggingpp-unit-tests PUBLIC
+        ELPP_FEATURE_ALL
+        ELPP_LOGGING_FLAGS_FROM_ARG
+        ELPP_NO_DEFAULT_LOG_FILE
+        ELPP_FRESH_LOG_FILE
+    )
+
+    # Standard linking to gtest stuff.
+    target_link_libraries(easyloggingpp-unit-tests gtest gtest_main)
+
+    add_test(NAME easyloggingppUnitTests COMMAND easyloggingpp-unit-tests -v)
+endif()
diff --git a/vendor/github.com/muflihun/easyloggingpp/LICENCE b/vendor/github.com/muflihun/easyloggingpp/LICENCE
new file mode 100644
index 0000000..2c8998d
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/LICENCE
@@ -0,0 +1,24 @@
+The MIT License (MIT)
+
+Copyright (c) 2017 muflihun.com
+
+https://github.com/muflihun/
+https://muflihun.github.io
+https://muflihun.com
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/vendor/github.com/muflihun/easyloggingpp/PULL_REQUEST_TEMPLATE.md b/vendor/github.com/muflihun/easyloggingpp/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 0000000..d0d2774
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,12 @@
+### This is a
+
+- [ ] Breaking change
+- [ ] New feature
+- [ ] Bugfix
+
+### I have
+
+- [ ] Merged in the latest upstream changes
+- [ ] Updated [`CHANGELOG.md`](CHANGELOG.md)
+- [ ] Updated [`README.md`](README.md)
+- [ ] [Run the tests](README.md#install-optional)
diff --git a/vendor/github.com/muflihun/easyloggingpp/README.md b/vendor/github.com/muflihun/easyloggingpp/README.md
new file mode 100644
index 0000000..84bef0c
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/README.md
@@ -0,0 +1,1435 @@
+                                       ‫بسم الله الرَّحْمَنِ الرَّحِيمِ
+
+
+![banner]
+
+> **Manual For v9.95.0**
+
+[![Build Status (Develop)](https://img.shields.io/travis/muflihun/easyloggingpp/develop.svg)](https://travis-ci.org/muflihun/easyloggingpp) (`develop`)
+
+[![Build Status (Master)](https://img.shields.io/travis/muflihun/easyloggingpp/master.svg)](https://travis-ci.org/muflihun/easyloggingpp) (`master`)
+
+[![Version](https://img.shields.io/github/release/muflihun/easyloggingpp.svg)](https://github.com/muflihun/easyloggingpp/releases/latest)
+
+[![Canon.io](https://img.shields.io/badge/conan.io-easyloggingpp%2F9.95.0-green.svg?logo=data:image/png;base64%2CiVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAA1VBMVEUAAABhlctjlstkl8tlmMtlmMxlmcxmmcxnmsxpnMxpnM1qnc1sn85voM91oM11oc1xotB2oc56pNF6pNJ2ptJ8ptJ8ptN9ptN8p9N5qNJ9p9N9p9R8qtOBqdSAqtOAqtR%2BrNSCrNJ/rdWDrNWCsNWCsNaJs9eLs9iRvNuVvdyVv9yXwd2Zwt6axN6dxt%2Bfx%2BChyeGiyuGjyuCjyuGly%2BGlzOKmzOGozuKoz%2BKqz%2BOq0OOv1OWw1OWw1eWx1eWy1uay1%2Baz1%2Baz1%2Bez2Oe02Oe12ee22ujUGwH3AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfgBQkREyOxFIh/AAAAiklEQVQI12NgAAMbOwY4sLZ2NtQ1coVKWNvoc/Eq8XDr2wB5Ig62ekza9vaOqpK2TpoMzOxaFtwqZua2Bm4makIM7OzMAjoaCqYuxooSUqJALjs7o4yVpbowvzSUy87KqSwmxQfnsrPISyFzWeWAXCkpMaBVIC4bmCsOdgiUKwh3JojLgAQ4ZCE0AMm2D29tZwe6AAAAAElFTkSuQmCC)](http://www.conan.io/source/easyloggingpp/9.95.0/memsharded/testing)
+
+[![Try online](https://img.shields.io/badge/try-online-blue.svg)](http://melpon.org/wandbox/permlink/rwDXGcnP1IoCKXrJ)
+
+[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/muflihun/easyloggingpp/blob/master/LICENCE)
+
+[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.me/MuflihunDotCom/25)
+
+[![Downloads](https://img.shields.io/github/downloads/muflihun/easyloggingpp/total.svg)](https://github.com/muflihun/easyloggingpp/releases/latest)
+
+### Quick Links
+
+  [![download] Latest Release](https://github.com/muflihun/easyloggingpp/releases/latest)
+  
+  [![notes] Changelog](/CHANGELOG.md)
+ 
+  [![samples] Samples](/samples)
+
+---
+
+### Table of Contents
+<pre>
+<a href="#introduction">Introduction</a>
+    <a href="#why-yet-another-library">Why yet another library</a>
+    <a href="#features-at-a-glance">Features at a glance</a>
+<a href="#getting-started">Getting Started</a>
+    <a href="#download">Download</a>
+    <a href="#quick-start">Quick Start</a>
+    <a href="#install-optional">Install (Optional)</a>
+    <a href="#setting-application-arguments">Setting Application Arguments</a>
+<a href="#configuration">Configuration</a>
+    <a href="#level">Level</a>
+    <a href="#configure">Configure</a>
+        <a href="#using-configuration-file">Using Configuration File</a>
+        <a href="#using-elconfigurations-class">Using el::Configurations Class</a>
+        <a href="#using-in-line-configurations">Using In line Configurations</a>
+    <a href="#default-configurations">Default Configurations</a>
+    <a href="#global-configurations">Global Configurations</a>
+    <a href="#logging-format-specifiers">Logging Format Specifiers</a>
+    <a href="#datetime-format-specifiers">Date/Time Format Specifiers</a>
+    <a href="#custom-format-specifiers">Custom Format Specifiers</a>
+    <a href="#logging-flags">Logging Flags</a>
+    <a href="#application-arguments">Application Arguments</a>
+    <a href="#configuration-macros">Configuration Macros</a>
+    <a href="#reading-configurations">Reading Configurations</a>
+<a href="#logging">Logging</a>
+    <a href="#basic">Basic</a>
+    <a href="#conditional-logging">Conditional Logging</a>
+    <a href="#occasional-logging">Occasional Logging</a>
+    <a href="#printf-like-logging">printf Like Logging</a>
+    <a href="#network-logging">Network Logging</a>
+    <a href="#verbose-logging">Verbose Logging</a>
+        <a href="#basic-1">Basic</a>
+        <a href="#conditional-and-occasional">Conditional and Occasional</a>
+        <a href="#verbose-level">Verbose Level</a>
+        <a href="#check-if-verbose-logging-is-on">Check If Verbose Logging Is On</a>
+        <a href="#vmodule">VModule</a>
+    <a href="#registering-new-loggers">Registering New Loggers</a>
+    <a href="#unregister-loggers">Unregister Loggers</a>
+    <a href="#populating-existing-logger-ids">Populating Existing Logger IDs</a>
+    <a href="#sharing-logging-repository">Sharing Logging Repository</a>
+<a href="#extra-features">Extra Features</a>
+    <a href="#performance-tracking">Performance Tracking</a>
+        <a href="#conditional-performance-tracking">Conditional Performance Tracking</a>
+        <a href="#make-use-of-performance-tracking-data">Make Use of Performance Tracking Data</a>
+    <a href="#log-file-rotating">Log File Rotating</a>
+    <a href="#crash-handling">Crash Handling</a>
+        <a href="#installing-custom-crash-handlers">Installing Custom Crash Handlers</a>
+    <a href="#stacktrace">Stacktrace</a>
+    <a href="#multi-threading">Multi-threading</a>
+    <a href="#check-macros">CHECK Macros</a>
+    <a href="#logging-perror">Logging perror()</a>
+    <a href="#syslog">Using Syslog</a>
+    <a href="#stl-logging">STL Logging</a>
+        <a href="#supported-templates">Supported Templates</a>
+    <a href="#qt-logging">Qt Logging</a>
+    <a href="#boost-logging">Boost Logging</a>
+    <a href="#wxwidgets-logging">wxWidgets Logging</a>
+    <a href="#extending-library">Extending Library</a>
+        <a href="#logging-your-own-class">Logging Your Own Class</a>
+        <a href="#logging-third-party-class">Logging Third-party Class</a>
+    <a href="#manually-flushing-and-rolling-log-files">Manually Flushing and Rolling Log Files</a>
+    <a href="#log-dispatch-callback">Log Dispatch Callback</a>
+    <a href="#logger-registration-callback">Logger Registration Callback</a>
+    <a href="#asynchronous-logging">Asynchronous Logging</a>
+    <a href="#helper-classes">Helper Classes</a>
+<a href="#contribution">Contribution</a>
+    <a href="#submitting-patches">Submitting Patches</a>
+    <a href="#reporting-a-bug">Reporting a Bug</a>
+<a href="#compatibility">Compatibility</a>
+<a href="#licence">Licence</a>
+<a href="#disclaimer">Disclaimer</a>
+</pre>
+
+# Introduction
+Easylogging++ is single header efficient logging library for C++ applications. It is extremely powerful, highly extendable and configurable to user's requirements. It provides ability to [write your own sinks](https://github.com/muflihun/easyloggingpp/tree/master/samples/send-to-network) (referred to as `LogDispatchCallback`). Currently used by hundreds of open-source projects.
+
+This manual is for Easylogging++ v9.95.0. For other versions please refer to corresponding [release](https://github.com/muflihun/easyloggingpp/releases) on github.
+
+ [![top] Goto Top](#table-of-contents)
+ 
+### Why yet another library
+If you are working on a small utility or large project in C++, this library can be handy. Its based on single header and only requires to link to single source file. (Originally it was header-only and was changed to use source file in [issue #445](https://github.com/muflihun/easyloggingpp/issues/445). You can still use header-only in [v9.89](https://github.com/muflihun/easyloggingpp/releases/tag/9.89)). 
+
+This library has been designed with various thoughts in mind (i.e, portability, performance, usability, features and easy to setup).
+
+Why yet another library? Well, answer is pretty straight forward, use it as you wrote it so you can fix issues (if any) as you go or raise them on github. In addition to that, I personally have not seen any logging library based on single-header with such a design where you can configure on the go, extend it to your needs and get fast performance. I have seen other single-header logging libraries for C++ but either they use external libraries, e.g, boost or Qt to support certain features like threading, regular expression or date etc. This library has everything built-in to prevent usage of external libraries, not that I don't like those libraries, in fact I love them, but because not all projects use these libraries, I couldn't take risk of depending on them.
+
+ [![top] Goto Top](#table-of-contents)
+ 
+### Features at a glance
+Easylogging++ is feature-rich containing many features that both typical and advanced developer will require while writing a software;
+ * [Highly configurable](#configuration)
+ * [Extendable](#log-dispatch-callback)
+ * Extremely fast
+ * [Thread](#multi-threading) and type safe
+ * [Cross-platform](#compatibility)
+ * [Custom log patterns](#logging-format-specifiers)
+ * [Conditional and occasional logging](#conditional-logging)
+ * [Performance tracking](#performance-tracking)
+ * [Verbose logging](#verbose-logging)
+ * [Crash handling](#crash-handling)
+ * [Helper CHECK macros](#check-macros)
+ * [STL logging](#stl-logging)
+ * [Send to Syslog](#syslog)
+ * [Third-party library logging (Qt, boost, wxWidgets etc)](#logging-third-party-class)
+ * [Extensible (Logging your own class or third-party class)](#logging-your-own-class)
+ * [And many more...](#extra-features)
+
+ [![top] Goto Top](#table-of-contents)
+ 
+# Getting Started
+### Download
+Download latest version from [Latest Release](https://github.com/muflihun/easyloggingpp/releases/latest)
+
+For other releases, please visit [releases page](https://github.com/muflihun/easyloggingpp/releases). If you application does not support C++11, please consider using [v8.91](https://github.com/muflihun/easyloggingpp/tree/v8.91). This is stable version for C++98 and C++03, just lack some features.
+
+ [![top] Goto Top](#table-of-contents)
+ 
+### Quick Start
+In order to get started with Easylogging++, you can follow three easy steps:
+* Download latest version
+* Include into your project (`easylogging++.h` and `easylogging++.cc`)
+* Initialize using single macro... and off you go!
+
+```c++
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(int argc, char* argv[]) {
+   LOG(INFO) << "My first info log using default logger";
+   return 0;
+}
+```
+
+Now compile using
+
+```
+g++ main.cc easylogging++.cc -o prog -std=c++11
+```
+
+That simple! Please note that `INITIALIZE_EASYLOGGINGPP` should be used once and once-only otherwise you will end up getting compilation errors. This is definiting several `extern` variables. This means it can be defined only once per application. Best place to put this initialization statement is in file where `int main(int, char**)` function is defined, right after last include statement.
+
+### Install (Optional)
+If you want to install this header system-wide, you can do so via:
+```
+mkdir build
+cd build
+cmake -Dtest=ON ../
+make
+make test
+make install
+```
+
+Following options are supported by Easylogging++ cmake and you can turn these options on using `-D<option>=ON`
+
+ * `lib_utc_datetime` - Defines `ELPP_UTC_DATETIME`
+ * `build_static_lib` - Builds static library for Easylogging++ 
+
+With that said, you will still need `easylogging++.cc` file in order to compile. For header only, please check [v9.89](https://github.com/muflihun/easyloggingpp/releases/tag/9.89) and lower.
+
+ [![top] Goto Top](#table-of-contents)
+ 
+### Setting Application Arguments
+It is always recommended to pass application arguments to Easylogging++. Some features of Easylogging++ require you to set application arguments, e.g, verbose logging to set verbose level or vmodules (explained later). In order to do that you can use helper macro or helper class;
+
+```c++
+int main(int argc, char* argv[]) {
+   START_EASYLOGGINGPP(argc, argv);
+   ...
+}
+```
+ [![top] Goto Top](#table-of-contents)
+ 
+# Configuration
+### Level
+In order to start configuring your logging library, you must understand severity levels. Easylogging++ deliberately does not use hierarchical logging in order to fully control what's enabled and what's not. That being said, there is still option to use hierarchical logging using `LoggingFlag::HierarchicalLogging`. Easylogging++ has following levels (ordered for hierarchical levels)
+
+|   Level  |                 Description                                                                                                                                   |
+|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Global   | Generic level that represents all levels. Useful when setting global configuration for all levels.                                                            |
+| Trace    | Information that can be useful to back-trace certain events - mostly useful than debug logs.                                                                  |
+| Debug    | Informational events most useful for developers to debug application. Only applicable if NDEBUG is not defined (for non-VC++) or _DEBUG is defined (for VC++).|
+| Fatal    | Very severe error event that will presumably lead the application to abort.                                                                                   |
+| Error    | Error information but will continue application to keep running.                                                                                              |
+| Warning  | Information representing errors in application but application will keep running.                                                                             |
+| Info     | Mainly useful to represent current progress of application.                                                                                                   |
+| Verbose  | Information that can be highly useful and vary with verbose logging level. Verbose logging is not applicable to hierarchical logging.                         |
+| Unknown  | Only applicable to hierarchical logging and is used to turn off logging completely.                                                                           |
+
+ [![top] Goto Top](#table-of-contents)
+ 
+### Configure
+Easylogging++ is easy to configure. There are three possible ways to do so,
+* Using configuration file
+* Using el::Configurations class
+* Using inline configuration
+
+#### Using Configuration File
+Configuration can be done by file that is loaded at runtime by `Configurations` class. This file has following format;
+```
+* LEVEL:
+  CONFIGURATION NAME  = "VALUE" ## Comment
+  ANOTHER CONFIG NAME = "VALUE"
+```
+
+Level name starts with a star (*) and ends with colon (:). It is highly recommended to start your configuration file with `Global` level so that any configuration not specified in the file will automatically use configuration from `Global`. For example, if you set `Filename` in `Global` and you want all the levels to use same filename, do not set it explicitly for each level, library will use configuration value from `Global` automatically.
+Following table contains configurations supported by configuration file.
+
+|   Configuration Name  |   Type   |                 Description                                                                                                                                                 |
+|-----------------------|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `Enabled`               |   bool   | Determines whether or not corresponding level for logger is enabled. You may disable all logs by using `el::Level::Global`                                                |
+| `To_File`               |   bool   | Whether or not to write corresponding log to log file                                                                                                                     |
+| `To_Standard_Output`    |   bool   | Whether or not to write logs to standard output e.g, terminal or command prompt                                                                                           |
+| `Format`                |   char*  | Determines format/pattern of logging for corresponding level and logger.                                                                                                  |
+| `Filename`              |   char*  | Determines log file (full path) to write logs to for corresponding level and logger                                                                                       |
+| `Subsecond_Precision`   |   uint   | Specifies subsecond precision (previously called 'milliseconds width'). Width can be within range (1-6)                                                                   |
+| `Performance_Tracking`  |   bool   | Determines whether or not performance tracking is enabled. This does not depend on logger or level. Performance tracking always uses 'performance' logger unless specified|
+| `Max_Log_File_Size`     |   size_t | If log file size of corresponding level is >= specified size, log file will be truncated.                                                                                 |
+| `Log_Flush_Threshold`   |  size_t  | Specifies number of log entries to hold until we flush pending log data                                                                                                   |
+	
+
+Please do not use double-quotes anywhere in comment, you might end up in unexpected behaviour.
+
+Sample Configuration File
+```
+* GLOBAL:
+   FORMAT               =  "%datetime %msg"
+   FILENAME             =  "/tmp/logs/my.log"
+   ENABLED              =  true
+   TO_FILE              =  true
+   TO_STANDARD_OUTPUT   =  true
+   SUBSECOND_PRECISION  =  6
+   PERFORMANCE_TRACKING =  true
+   MAX_LOG_FILE_SIZE    =  2097152 ## 2MB - Comment starts with two hashes (##)
+   LOG_FLUSH_THRESHOLD  =  100 ## Flush after every 100 logs
+* DEBUG:
+   FORMAT               = "%datetime{%d/%M} %func %msg"
+```
+
+##### Explanation 
+Configuration file contents in above sample is straightforward. We start with `GLOBAL` level in order to override all the levels. Any explicitly defined subsequent level will override configuration from `GLOBAL`. For example, all the levels except for `DEBUG` have the same format, i.e, datetime and log message. For `DEBUG` level, we have only date (with day and month), source function and log message. The rest of configurations for `DEBUG` are used from `GLOBAL`. Also, notice `{%d/%M}` in `DEBUG` format above, if you do not specify date format, default format is used. Default values of date/time is `%d/%M/%Y %h:%m:%s,%g` For more information on these format specifiers, please refer to [Date/Time Format Specifier](#datetime-format-specifiers) section below
+
+##### Usage
+```c++
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(int argc, const char** argv) {
+    // Load configuration from file
+    el::Configurations conf("/path/to/my-conf.conf");
+    // Reconfigure single logger
+    el::Loggers::reconfigureLogger("default", conf);
+    // Actually reconfigure all loggers instead
+    el::Loggers::reconfigureAllLoggers(conf);
+    // Now all the loggers will use configuration from file
+}
+```
+
+ > Your configuration file can be converted to `el::Configurations` object (using constructor) that can be used where ever it is needed (like in above example).
+
+ [![top] Goto Top](#table-of-contents)
+ 
+#### Using el::Configurations Class
+You can set configurations or reset configurations;
+```c++
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(int argc, const char** argv) {
+   el::Configurations defaultConf;
+   defaultConf.setToDefault();
+    // Values are always std::string
+   defaultConf.set(el::Level::Info, 
+            el::ConfigurationType::Format, "%datetime %level %msg");
+    // default logger uses default configurations
+    el::Loggers::reconfigureLogger("default", defaultConf);
+    LOG(INFO) << "Log using default file";
+    // To set GLOBAL configurations you may use
+   defaultConf.setGlobally(
+            el::ConfigurationType::Format, "%date %msg");
+   el::Loggers::reconfigureLogger("default", defaultConf);
+    return 0;
+}
+```
+
+ > Configuration just needs to be set once. If you are happy with default configuration, you may use it as well.
+
+ [![top] Goto Top](#table-of-contents)
+ 
+#### Using In line Configurations
+Inline configuration means you can set configurations in `std::string` but make sure you add all the new line characters etc. This is not recommended because it's always messy.
+```c++
+el::Configurations c;
+c.setToDefault();
+c.parseFromText("*GLOBAL:\n FORMAT = %level %msg");
+```
+
+ > Above code only sets Configurations object, you still need to re-configure logger/s using this configurations.
+
+ [![top] Goto Top](#table-of-contents)
+ 
+### Default Configurations
+If you wish to have a configuration for existing and future loggers, you can use `el::Loggers::setDefaultConfigurations(el::Configurations& configurations, bool configureExistingLoggers = false)`. This is useful when you are working on fairly large scale, or using a third-party library that is already using Easylogging++. Any newly created logger will use default configurations. If you wish to configure existing loggers as well, you can set second argument to `true` (it defaults to `false`).
+
+ [![top] Goto Top](#table-of-contents)
+ 
+### Global Configurations
+`Level::Global` is nothing to do with global configurations, it is concept where you can register configurations for all/or some loggers and even register new loggers using configuration file. Syntax of configuration file is:
+```
+-- LOGGER ID ## Case sensitive
+  ## Everything else is same as configuration file
+
+
+-- ANOTHER LOGGER ID
+  ## Configuration for this logger
+```
+
+Logger ID starts with two dashes. Once you have written your global configuration file you can configure your all loggers (and register new ones) using single function;
+```c++
+int main(void) {
+   // Registers new and configures it or
+   // configures existing logger - everything in global.conf
+   el::Loggers::configureFromGlobal("global.conf");
+   // .. Your prog
+   return 0;
+}
+```
+Please note, it is not possible to register new logger using global configuration without defining its configuration. You must define at least single configuration. Other ways to register loggers are discussed in [Logging](#logging) section below.
+
+ [![top] Goto Top](#table-of-contents)
+ 
+### Logging Format Specifiers
+You can customize format of logging using following specifiers:
+
+|     Specifier   |                 Replaced By                                                                 |
+|-----------------|---------------------------------------------------------------------------------------------|
+| `%logger`       | Logger ID                                                                                   |
+| `%thread`       | Thread ID - Uses std::thread if available, otherwise GetCurrentThreadId() on windows        |
+| `%thread_name`  | Use `Helpers::setThreadName` to set name of current thread (where you run `setThreadName` from). See [Thread Names sample](/samples/STL/thread-names.cpp)|
+| `%level`        | Severity level (Info, Debug, Error, Warning, Fatal, Verbose, Trace)                         |
+| `%levshort`     | Severity level (Short version i.e, I for Info and respectively D, E, W, F, V, T)            |
+| `%vlevel`       | Verbosity level (Applicable to verbose logging)                                             |
+| `%datetime`     | Date and/or time - Pattern is customizable - see Date/Time Format Specifiers below          |
+| `%user`         | User currently running application                                                          |
+| `%host`         | Computer name application is running on                                                     |
+| `%file`*         | File name of source file (Full path) - This feature is subject to availability of `__FILE__` macro of compiler                                                        |
+| `%fbase`*        | File name of source file (Only base name)                                                   |
+| `%line`*         | Source line number - This feature is subject to availability of `__LINE__` macro of compile |
+| `%func`*         | Logging function                                                                            |
+| `%loc`*          | Source filename and line number of logging (separated by colon)                             |
+| `%msg`          | Actual log message                                                                          |
+| `%`             | Escape character (e.g, %%level will write %level)                                           |
+
+* Subject to compiler's availability of certain macros, e.g, `__LINE__`, `__FILE__` etc 
+
+ [![top] Goto Top](#table-of-contents)
+ 
+### Date/Time Format Specifiers
+You can customize date/time format using following specifiers
+
+|    Specifier    |                 Replaced By                                                                                      |
+|-----------------|------------------------------------------------------------------------------------------------------------------|
+| `%d`            | Day of month (zero-padded)                                                                                       |
+| `%a`            | Day of the week - short (Mon, Tue, Wed, Thu, Fri, Sat, Sun)                                                      |
+| `%A`            | Day of the week - long (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)                          |
+| `%M`            | Month (zero-padded)                                                                                              |
+| `%b`            | Month - short (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)                                       |
+| `%B`            | Month - Long (January, February, March, April, May, June, July, August, September, October, November, December)  |
+| `%y`            | Year - Two digit (13, 14 etc)                                                                                    |
+| `%Y`            | Year - Four digit (2013, 2014 etc)                                                                               |
+| `%h`            | Hour (12-hour format)                                                                                            |
+| `%H`            | Hour (24-hour format)                                                                                            |
+| `%m`            | Minute (zero-padded)                                                                                             |
+| `%s`            | Second (zero-padded)                                                                                             |
+| `%g`            | Subsecond part (precision is configured by ConfigurationType::SubsecondPrecision)                               |
+| `%F`            | AM/PM designation                                                                                                |
+| `%`             | Escape character                                                                                                 |
+
+Please note, date/time is limited to `30` characters at most.
+
+ [![top] Goto Top](#table-of-contents)
+
+### Custom Format Specifiers
+
+You can also specify your own format specifiers. In order to do that you can use `el::Helpers::installCustomFormatSpecifier`. A perfect example is `%ip_addr` for TCP server application;
+
+```C++
+const char* getIp(void) {
+    return "192.168.1.1";
+}
+
+int main(void) {
+    el::Helpers::installCustomFormatSpecifier(el::CustomFormatSpecifier("%ip_addr", getIp));
+    el::Loggers::reconfigureAllLoggers(el::ConfigurationType::Format, "%datetime %level %ip_addr : %msg");
+    LOG(INFO) << "This is request from client";
+    return 0;
+}
+```
+
+ [![top] Goto Top](#table-of-contents)
+ 
+###Logging Flags
+Form some parts of logging you can set logging flags; here are flags supported:
+
+|     Flag                                               |                 Description                                                                                                                   |
+|--------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|
+| `NewLineForContainer (1)`                              | Makes sure we have new line for each container log entry                                                                                      |
+| `AllowVerboseIfModuleNotSpecified (2)`                 | Makes sure if -vmodule is used and does not specifies a module, then verbose logging is allowed via that module. Say param was -vmodule=main*=3 and a verbose log is being written from a file called something.cpp then if this flag is enabled, log will be written otherwise it will be disallowed. Note: having this defeats purpose of -vmodule                                 |
+| `LogDetailedCrashReason (4)`                           | When handling crashes by default, detailed crash reason will be logged as well (Disabled by default) ([issue #90](https://github.com/muflihun/easyloggingpp/issues/90))                                                                                                                                                                                |
+| `DisableApplicationAbortOnFatalLog (8)`                | Allows to disable application abortion when logged using FATAL level. Note that this does not apply to default crash handlers as application should be aborted after crash signal is handled. (Not added by default) ([issue #119](https://github.com/muflihun/easyloggingpp/issues/119))                                                                                                                                                                               |
+| `ImmediateFlush (16)`                                  | Flushes log with every log-entry (performance sensative) - Disabled by default                                                                |
+| `StrictLogFileSizeCheck (32)`                          | Makes sure log file size is checked with every log                                                                                            |
+| `ColoredTerminalOutput (64)`                           | Terminal output will be colorful if supported by terminal.                                                                                            |
+| `MultiLoggerSupport (128)`                             | Enables support for using multiple loggers to log single message. (E.g, `CLOG(INFO, "default", "network") << This will be logged using default and network loggers;`) |
+| `DisablePerformanceTrackingCheckpointComparison (256)` | Disables checkpoint comparison |
+| `DisableVModules (512)`                               | Disables usage of vmodules
+| `DisableVModulesExtensions (1024)`                     | Disables vmodules extension. This means if you have a vmodule -vmodule=main*=4 it will cover everything starting with main, where as if you do not have this defined you will be covered for any file starting with main and ending with one of the following extensions; .h .c .cpp .cc .cxx .-inl-.h .hxx .hpp. Please note following vmodule is not correct -vmodule=main.=4 with this macro not defined because this will check for main..c, notice double dots. If you want this to be valid, have a look at logging flag above: AllowVerboseIfModuleNotSpecified '?' and '' wildcards are supported |
+| `HierarchicalLogging (2048)`                          | Enables hierarchical logging. This is not applicable to verbose logging.|
+| `CreateLoggerAutomatically (4096)`                          | Creates logger automatically when not available. |
+| `AutoSpacing (8192)`                          | Automatically adds spaces. E.g, `LOG(INFO) << "DODGE" << "THIS!";` will output "DODGE THIS!"|
+| `FixedTimeFormat (16384)`                          | Applicable to performace tracking only - this prevents formatting time. E.g, `1001 ms` will be logged as is, instead of formatting it as `1.01 sec`|
+
+You can set/unset these flags by using static `el::Loggers::addFlag` and `el::Loggers::removeFlag`. You can check to see if certain flag is available by using `el::Loggers::hasFlag`, all these functions take strongly-typed enum `el::LoggingFlag`
+
+ > You can set these flags by using `--logging-flags` command line arg. You need to enable this functionality by defining macro `ELPP_LOGGING_FLAGS_FROM_ARG` (You will need to make sure to use `START_EASYLOGGINGPP(argc, argv)` to configure arguments).
+
+ > You can also set default (initial) flags using `ELPP_DEFAULT_LOGGING_FLAGS` and set numerical value for initial flags
+
+ [![top] Goto Top](#table-of-contents)
+
+### Application Arguments
+Following table will explain all command line arguments that you may use to define certain behaviour; You will need to initialize application arguments by using `START_EASYLOGGINGPP(argc, argv)` in your `main(int, char**)` function.
+
+|        Argument            |                                      Description                                        |
+|----------------------------|-----------------------------------------------------------------------------------------|
+| `-v`                       | Activates maximum verbosity                                                             |
+| `--v=2`                    | Activates verbosity upto verbose level 2 (valid range: 0-9)                             |
+| `--verbose`                | Activates maximum verbosity                                                             |
+| `-vmodule=MODULE_NAME`     | Activates verbosity for files starting with main to level 1, the rest of the files depend on logging flag `AllowVerboseIfModuleNotSpecified` Please see Logging Flags section above. Two modules can be separated by comma. Please note vmodules are last in order of precedence of checking arguments for verbose logging, e.g, if we have -v in application arguments before vmodules, vmodules will be ignored.                                                                                                               |
+| `--logging-flags=3`        | Sets logging flag. In example `i.e, 3`, it sets logging flag to `NewLineForContainer` and `AllowVerboseIfModuleNotSpecified`. See logging flags section above for further details and values. See macros section to disable this function.                                                                   |
+| `--default-log-file=FILE`  |Sets default log file for existing and future loggers. You may want to consider defining `ELPP_NO_DEFAULT_LOG_FILE` to prevent creation of default empty log file during pre-processing. See macros section to disable this function.                                                                           |
+
+ [![top] Goto Top](#table-of-contents)
+
+### Configuration Macros
+Some of logging options can be set by macros, this is a thoughtful decision, for example if we have `ELPP_THREAD_SAFE` defined, all the thread-safe functionalities are enabled otherwise disabled (making sure over-head of thread-safety goes with it). To make it easy to remember and prevent possible conflicts, all the macros start with `ELPP_`
+
+NOTE: All the macros either need to be defined before `#include "easylogging++"` - but this gets hard and unreadable if project is getting bigger so we recommend you define all these macros using `-D` option of compiler, for example in case of `g++` you will do `g++ source.cpp ... -DELPP_SYSLOG -DELPP_THREAD_SAFE ...`
+
+|   Macro Name                             |                 Description                                                                                                                        |
+|------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|
+| `ELPP_DEBUG_ASSERT_FAILURE`             | Aborts application on first assertion failure. This assertion is due to invalid input e.g, invalid configuration file etc.                         |
+| `ELPP_UNICODE`                          | Enables Unicode support when logging. Requires `START_EASYLOGGINGPP`                 |
+| `ELPP_THREAD_SAFE`                      | Enables thread-safety - make sure -lpthread linking for linux.                                                                                     |
+| `ELPP_FORCE_USE_STD_THREAD`             | Forces to use C++ standard library for threading (Only useful when using `ELPP_THREAD_SAFE`            |
+| `ELPP_FEATURE_CRASH_LOG`              | Applicable to GCC only. Enables stacktrace on application crash                                                                                    |
+| `ELPP_DISABLE_DEFAULT_CRASH_HANDLING`   | Disables default crash handling. You can use el::Helpers::setCrashHandler to use your own handler.                                                 |
+| `ELPP_DISABLE_LOGS`                     | Disables all logs - (preprocessing)                                                                                                                |
+| `ELPP_DISABLE_DEBUG_LOGS`               | Disables debug logs - (preprocessing)                                                                                                              |
+| `ELPP_DISABLE_INFO_LOGS`                | Disables info logs - (preprocessing)                                                                                                               |
+| `ELPP_DISABLE_WARNING_LOGS`             | Disables warning logs - (preprocessing)                                                                                                            |
+| `ELPP_DISABLE_ERROR_LOGS`               | Disables error logs - (preprocessing)                                                                                                              |
+| `ELPP_DISABLE_FATAL_LOGS`               | Disables fatal logs - (preprocessing)                                                                                                              |
+| `ELPP_DISABLE_VERBOSE_LOGS`             | Disables verbose logs - (preprocessing)                                                                                                            |
+| `ELPP_DISABLE_TRACE_LOGS`               | Disables trace logs - (preprocessing)                                                                                                              |
+| `ELPP_FORCE_ENV_VAR_FROM_BASH`          | If environment variable could not be found, force using alternative bash command to find value, e.g, `whoami` for username. (DO NOT USE THIS MACRO WITH `LD_PRELOAD` FOR LIBRARIES THAT ARE ALREADY USING Easylogging++ OR YOU WILL END UP IN STACK OVERFLOW FOR PROCESSES (`popen`) (see [issue #87](https://github.com/muflihun/easyloggingpp/issues/87) for details))                                                                                                                                                                                       |
+| `ELPP_DEFAULT_LOG_FILE`                 | Full filename where you want initial files to be created. You need to embed value of this macro with quotes, e.g, `-DELPP_DEFAULT_LOG_FILE='"logs/el.gtest.log"'` Note the double quotes inside single quotes, double quotes are the values for `const char*` and single quotes specifies value of macro                                                                                 |
+| `ELPP_NO_LOG_TO_FILE`                 | Disable logging to file initially|
+| `ELPP_NO_DEFAULT_LOG_FILE`              | If you dont want to initialize library with default log file, define this macro. But be sure to configure your logger with propery log filename or you will end up getting heaps of errors when trying to log to file (and `TO_FILE` is configured to `true`)                                                                                                              |
+| `ELPP_FRESH_LOG_FILE`              | Never appends log file whenever log file is created (Use with care as it may cause some unexpected result for some users)                                                  |
+| `ELPP_DEBUG_ERRORS`                    | If you wish to find out internal errors raised by Easylogging++ that can be because of configuration or something else, you can enable them by defining this macro. You will get your errors on standard output i.e, terminal or command prompt.                                                                                                                                             |
+| `ELPP_DISABLE_CUSTOM_FORMAT_SPECIFIERS` | Forcefully disables custom format specifiers                                                                                                       |
+| `ELPP_DISABLE_LOGGING_FLAGS_FROM_ARG`   | Forcefully disables ability to set logging flags using command-line arguments                                                                      |
+| `ELPP_DISABLE_LOG_FILE_FROM_ARG`        | Forcefully disables ability to set default log file from command-line arguments                                                                    |
+| `ELPP_WINSOCK2`        | On windows system force to use `winsock2.h` instead of `winsock.h` when `WIN32_LEAN_AND_MEAN` is defined                                                                    |
+| `ELPP_CUSTOM_COUT` (advanced)     | Resolves to a value e.g, `#define ELPP_CUSTOM_COUT qDebug()` or `#define ELPP_CUSTOM_COUT std::cerr`. This will use the value for standard output (instead of using `std::cout`|
+| `ELPP_CUSTOM_COUT_LINE` (advanced) | Used with `ELPP_CUSTOM_COUT` to define how to write a log line with custom cout. e.g, `#define ELPP_CUSTOM_COUT_LINE(msg) QString::fromStdString(msg).trimmed()` |
+| `ELPP_NO_CHECK_MACROS`             | Do not define the *CHECK* macros                                                                                                                  |
+| `ELPP_NO_DEBUG_MACROS`             | Do not define the *DEBUG* macros                                                                                                                  |
+| `ELPP_UTC_DATETIME`                | Uses UTC time instead of local time (essentially uses `gmtime` instead of `localtime` and family functions)
+
+ [![top] Goto Top](#table-of-contents)
+ 
+### Reading Configurations
+If you wish to read configurations of certain logger, you can do so by using `typedConfigurations()` function in Logger class.
+```c++
+el::Logger* l = el::Loggers::getLogger("default");
+bool enabled = l->typedConfigurations()->enabled(el::Level::Info);
+// Or to read log format/pattern
+std::string format = 
+        l->typedConfigurations()->logFormat(el::Level::Info).format();
+```
+
+ [![top] Goto Top](#table-of-contents)
+ 
+# Logging
+Logging in easylogging++ is done using collection of macros. This is to make it easier for user and to prevent them knowing about unnecessary greater details of how things are done.
+
+### Basic
+You are provided with two basic macros that you can use in order to write logs:
+* `LOG(LEVEL)`
+* `CLOG(LEVEL, logger ID)`
+
+`LOG` uses 'default' logger while in CLOG (Custom LOG) you specify the logger ID. For LEVELs please refer to Configurations - Levels section above. Different loggers might have different configurations depending on your need, you may as well write custom macro to access custom logger. You also have different macros for verbose logging that is explained in section below.
+Here is very simple example of using these macros after you have initialized easylogging++.
+```c++
+LOG(INFO) << "This is info log";
+CLOG(ERROR, "performance") << "This is info log using performance logger";
+```
+
+There is another way to use same macro i.e, `LOG` (and associated macros). This is that you define macro `ELPP_DEFAULT_LOGGER` and `ELPP_DEFAULT_PERFORMANCE_LOGGER` with logger ID that is already registered, and now when you use `LOG` macro, it automatically will use specified logger instead of `default` logger. Please note that this should be defined in source file instead of header file. This is so that when we include header we dont accidently use invalid logger.
+
+A quick example is here
+```c++
+#ifndef ELPP_DEFAULT_LOGGER
+#   define ELPP_DEFAULT_LOGGER "update_manager"
+#endif
+#ifndef ELPP_DEFAULT_PERFORMANCE_LOGGER
+#   define ELPP_DEFAULT_PERFORMANCE_LOGGER ELPP_DEFAULT_LOGGER
+#endif
+#include "easylogging++.h"
+UpdateManager::UpdateManager {
+    _TRACE; // Logs using LOG(TRACE) provided logger is already registered - i.e, update_manager
+    LOG(INFO) << "This will log using update_manager logger as well";
+}
+```
+
+```c++
+#include "easylogging++.h"
+UpdateManager::UpdateManager {
+    _TRACE; // Logs using LOG(TRACE) using default logger because no `ELPP_DEFAULT_LOGGER` is defined unless you have it in makefile
+}
+```
+
+ > You can also write logs by using `Logger` class directly. This feature is available on compilers that support variadic templates. You can explore more by looking at `samples/STL/logger-log-functions.cpp`.
+
+ [![top] Goto Top](#table-of-contents)
+ 
+### Conditional Logging
+Easylogging++ provides certain aspects of logging, one these aspects is conditional logging, i.e, log will be written only if certain condition fulfils. This comes very handy in some situations. 
+Helper macros end with _IF;
+* `LOG_IF(condition, LEVEL)`
+* `CLOG_IF(condition, LEVEL, logger ID)`
+
+
+#### Some examples:
+```c++
+LOG_IF(condition, INFO) << "Logged if condition is true";
+
+LOG_IF(false, WARNING) << "Never logged";
+CLOG_IF(true, INFO, "performance") << "Always logged (performance logger)"
+```
+
+Same macros are available for verbose logging with `V` in the beginning, i.e, `VLOG_IF` and `CVLOG_IF`. see verbose logging section below for further information. You may have as complicated conditions as you want depending on your need.
+
+ [![top] Goto Top](#table-of-contents)
+ 
+### Occasional Logging
+Occasional logging is another useful aspect of logging with Easylogging++. This means a log will be written if it's hit certain times or part of certain times, e.g, every 10th hit or 100th hit or 2nd hit.
+Helper macros end with `_EVERY_N`;
+* `LOG_EVERY_N(n, LEVEL)`
+* `CLOG_EVERY_N(n, LEVEL, logger ID)`
+
+#### Other Hit Counts Based Logging
+There are some other ways of logging as well based on hit counts. These useful macros are
+* `LOG_AFTER_N(n, LEVEL)`; Only logs when we have reached hit counts of `n`
+* `LOG_N_TIMES(n, LEVEL)`; Logs n times
+
+#### Some examples:
+```c++
+for (int i = 1; i <= 10; ++i) {
+   LOG_EVERY_N(2, INFO) << "Logged every second iter";
+}
+// 5 logs written; 2, 4, 6, 7, 10
+
+for (int i = 1; i <= 10; ++i) {
+   LOG_AFTER_N(2, INFO) << "Log after 2 hits; " << i;
+}
+// 8 logs written; 3, 4, 5, 6, 7, 8, 9, 10
+
+for (int i = 1; i <= 100; ++i) {
+   LOG_N_TIMES(3, INFO) << "Log only 3 times; " << i;
+}
+// 3 logs writter; 1, 2, 3
+```
+
+ > Same versions of macros are available for `DEBUG` only mode, these macros start with `D` (for debug) followed by the same name. e.g, `DLOG` to log only in debug mode (i.e, when `_DEBUG` is defined or `NDEBUG` is undefined)
+
+ [![top] Goto Top](#table-of-contents)
+ 
+### `printf` Like Logging
+For compilers that support C++11's variadic templates, ability to log like "printf" is available. This is done by using `Logger` class. This feature is thread and type safe (as we do not use any macros like `LOG(INFO)` etc)
+
+This is done in two steps:
+ 1. Pulling registered logger using `el::Loggers::getLogger(<logger_id>);`
+ 2. Using one of logging functions
+ 
+The only difference from `printf` is that logging using these functions require `%v` for each arg (This is for type-safety); instead of custom format specifiers. You can escape this by `%%v`
+
+Following are various function signatures:
+ * `info(const char*, const T&, const Args&...)`
+ * `warn(const char*, const T&, const Args&...)`
+ * `error(const char*, const T&, const Args&...)`
+ * `debug(const char*, const T&, const Args&...)`
+ * `fatal(const char*, const T&, const Args&...)`
+ * `trace(const char*, const T&, const Args&...)`
+ * `verbose(int vlevel, const char*, const T&, const Args&...)`
+ 
+#### Simple example:
+
+```c++
+// Use default logger
+el::Logger* defaultLogger = el::Loggers::getLogger("default");
+
+// STL logging (`ELPP_STL_LOGGING` should be defined)
+std::vector<int> i;
+i.push_back(1);
+defaultLogger->warn("My first ultimate log message %v %v %v", 123, 222, i);
+
+// Escaping
+defaultLogger->info("My first ultimate log message %% %%v %v %v", 123, 222);
+
+```
+
+ > `%file`, `%func` `%line` and `%loc` format specifiers will not work with `printf` like logging.
+
+ [![top] Goto Top](#table-of-contents)
+
+### Network Logging
+
+You can send your messages to network. But you will have to implement your own way using log dispatcher API. We have written fully working sample for this purpose. Please see [Send to Network sample](/samples/send-to-network)
+
+ [![top] Goto Top](#table-of-contents)
+
+### Verbose Logging
+#### Basic
+Verbose logging is useful in every software to record more information than usual. Very useful for troubleshooting. Following are verbose logging specific macros;
+* `VLOG(verbose-level)`
+* `CVLOG(verbose-level, logger ID)`
+
+ [![top] Goto Top](#table-of-contents)
+ 
+#### Conditional and Occasional Logging
+Verbose logging also has conditional and occasional logging aspects i.e,
+* `VLOG_IF(condition, verbose-level)`
+* `CVLOG_IF(condition, verbose-level, loggerID)`
+* `VLOG_EVERY_N(n, verbose-level)`
+* `CVLOG_EVERY_N(n, verbose-level, loggerID)`
+* `VLOG_AFTER_N(n, verbose-level)`
+* `CVLOG_AFTER_N(n, verbose-level, loggerID)`
+* `VLOG_N_TIMES(n, verbose-level)`
+* `CVLOG_N_TIMES(n, verbose-level, loggerID)`
+
+ [![top] Goto Top](#table-of-contents)
+
+ 
+#### Verbose-Level
+Verbose level is level of verbosity that can have range of 1-9. Verbose level will not be active unless you either set application arguments for it. Please read through [Application Arguments](#application-arguments) section to understand more about verbose logging.
+
+In order to change verbose level on the fly, please use `Loggers::setVerboseLevel(base::type::VerboseLevel)` aka `Loggers::setVerboseLevel(int)` function. (You can check current verbose level by `Loggers::verboseLevel()`
+
+ [![top] Goto Top](#table-of-contents)
+ 
+#### Check If Verbose Logging Is On
+You can use a macro `VLOG_IS_ON(verbose-level)` to check to see if certain logging is on for source file for specified verbose level. This returns boolean that you can embed into if condition.
+```c++
+if (VLOG_IS_ON(2)) {
+   // Verbosity level 2 is on for this file
+}
+```
+
+ [![top] Goto Top](#table-of-contents)
+ 
+#### VModule
+VModule is functionality for verbose logging (as mentioned in above table) where you can specify verbosity by modules/source file. Following are some examples with explanation; Any of vmodule below starts with `-vmodule=` and `LoggingFlag::DisableVModulesExtensions` flag not set. Vmodule can completely be disabled by adding flag `LoggingFlag::DisableVModules`
+
+Example with `LoggingFlag::AllowVerboseIfModuleNotSpecified` flag;
+
+`main=3,parser*=4`:
+ * A bad example but good enough for explanation;
+ * Verbosity for any following file will be allowed;
+    `main{.h, .c, .cpp, .cc, .cxx, -inl.h, .hxx, .hpp}`
+    `parser{.h, .c, .cpp, .cc, .cxx, -inl.h, .hxx, .hpp}`
+ * No other file will be logged for verbose level
+
+Example with no `LoggingFlag::AllowVerboseIfModuleNotSpecified` flag;
+
+`main=3,parser*=4`:
+ Same explanation but any other file that does not fall under specified modules will have verbose logging enabled.
+
+In order to change vmodules on the fly (instead of via command line args) - use `Loggers::setVModules(const char*)` where `const char*` represents the modules e.g, `main=3,parser*=4` (as per above example)
+
+ [![top] Goto Top](#table-of-contents)
+ 
+### Registering New Loggers
+Loggers are unique in logger repository by ID. You can register new logger the same way as you would get logger. Using `getLogger(.., ..)` from `el::Loggers` helper class. This function takes two params, first being ID and second being boolean (optional) to whether or not to register new logger if does not already exist and returns pointer to existing (or newly created) el::Logger class. This second param is optional and defaults to true. If you set it to false and logger does not exist already, it will return nullptr.
+
+By default, Easylogging++ registers three loggers (+ an internal logger);
+* Default logger (ID: `default`)
+* Performance logger (ID: `performance`)
+* Syslog logger (if `ELPP_SYSLOG` macro is defined) (ID: `syslog`)
+
+If you wish to register a new logger, say e.g, with ID `business`
+```c++
+el::Logger* businessLogger = el::Loggers::getLogger("business");
+```	
+
+This will register a new logger if it does not already exist otherwise it will get an existing one. But if you have passed in `false` to the second param and logger does not already exist, `businessLogger` will be nullptr.
+
+When you register a new logger, default configurations are used (see Default Configurations section above). Also worth noticing, logger IDs are case sensitive.
+
+ [![top] Goto Top](#table-of-contents)
+
+### Unregister Loggers
+You may unregister loggers; any logger except for `default`. You should be really careful with this function, only unregister loggers that you have created yourself otherwise you may end up in unexpected errors. For example, you dont want to unregister logger that is used or initialized by a third-party library and it may be using it.
+
+To unregister logger, use `el::Loggers::unregisterLogger("logger-id")`
+
+ [![top] Goto Top](#table-of-contents)
+
+### Populating Existing Logger IDs
+Although this is a rare situation but if you wish to get list of all the logger IDs currently in repository, you may use `el::Loggers::populateAllLoggerIds(std::vector<std::string>&)` function to do that. The list passed in is cleared and filled up with all existing logger IDs.
+
+ [![top] Goto Top](#table-of-contents)
+
+### Sharing Logging Repository
+For advance logging, you can share your logging repositories to shared or static libraries, or even from library to application. This is rare case but a very good example is as follows;
+
+Let's say we have an application that uses easylogging++ and has it's own configuration, now you are importing library that uses easylogging++ and wants to access logging repository of main application. You can do this using two ways;
+
+ * Instead of using `INITIALIZE_EASYLOGGINGPP` you use `SHARE_EASYLOGGINGPP(access-function-to-repository)`
+ * Instead of using `INITIALIZE_EASYLOGGINGPP` you use `INITIALIZE_NULL_EASYLOGGINGPP` and then `el::Helpers::setStorage(el::base::type::StoragePointer)`
+ 
+After you share repository, you can reconfigure the only repository (i.e, the one that is used by application and library both), and use both to write logs.
+
+ [![top] Goto Top](#table-of-contents)
+
+# Extra Features
+Easylogging++ is feature-rich logging library. Apart from features already mentioned above, here are some extra features. If code snippets don't make sense and further sample is needed, there are many samples available at github repository (samples). Feel free to browse around.
+
+Some features require you to define macros (marked as prerequisite in each section) to enable them. This is to reduce compile time. If you want to enable all features you can define `ELPP_FEATURE_ALL`.
+
+### Performance Tracking
+Prerequisite: Define macro `ELPP_FEATURE_PERFORMANCE_TRACKING`
+
+One of the most notable features of Easylogging++ is its ability to track performance of your function or block of function. 
+Please note, this is not backward compatible as previously we had macros that user must had defined in order to track performance and I am sure many users had avoided in doing so. (Read v8.91 ReadMe for older way of doing it)
+The new way of tracking performance is much easier and reliable. All you need to do is use one of two macros from where you want to start tracking.
+* `TIMED_FUNC(obj-name)`
+* `TIMED_SCOPE(obj-name, block-name)`
+* `TIMED_BLOCK(obj-name, block-name)`
+
+An example that just uses usleep 
+```c++
+void performHeavyTask(int iter) {
+   TIMED_FUNC(timerObj);
+   // Some initializations
+   // Some more heavy tasks
+   usleep(5000);
+   while (iter-- > 0) {
+       TIMED_SCOPE(timerBlkObj, "heavy-iter");
+       // Perform some heavy task in each iter
+       usleep(10000);
+   }
+}
+```
+	 
+The result of above execution for iter = 10, is as following
+```
+06:22:31,368 INFO Executed [heavy-iter] in [10 ms]
+06:22:31,379 INFO Executed [heavy-iter] in [10 ms]
+06:22:31,389 INFO Executed [heavy-iter] in [10 ms]
+06:22:31,399 INFO Executed [heavy-iter] in [10 ms]
+06:22:31,409 INFO Executed [heavy-iter] in [10 ms]
+06:22:31,419 INFO Executed [heavy-iter] in [10 ms]
+06:22:31,429 INFO Executed [heavy-iter] in [10 ms]
+06:22:31,440 INFO Executed [heavy-iter] in [10 ms]
+06:22:31,450 INFO Executed [heavy-iter] in [10 ms]
+06:22:31,460 INFO Executed [heavy-iter] in [10 ms]
+06:22:31,460 INFO Executed [void performHeavyTask(int)] in [106 ms]
+```
+
+In the above example, we have used both the macros. In line-2 we have `TIMED_FUNC` with object pointer name timerObj and line-7 we have TIMED_SCOPE with object pointer name `timerBlkObj` and block name `heavy-iter`. Notice how block name is thrown out to the logs with every hit.  (Note: `TIMED_FUNC` is `TIMED_SCOPE` with block name = function name)
+
+You might wonder why do we need object name. Well easylogging++ performance tracking feature takes it further and provides ability to add, what's called checkpoints. 
+Checkpoints have two macros:
+* `PERFORMANCE_CHECKPOINT(timed-block-obj-name)`
+* `PERFORMANCE_CHECKPOINT_WITH_ID(timed-block-obj-name, id)`
+
+Take a look at following example
+```c++
+void performHeavyTask(int iter) {
+   TIMED_FUNC(timerObj);
+   // Some initializations
+   // Some more heavy tasks
+   usleep(5000);
+   while (iter-- > 0) {
+       TIMED_SCOPE(timerBlkObj, "heavy-iter");
+       // Perform some heavy task in each iter
+       // Notice following sleep varies with each iter
+       usleep(iter * 1000);
+       if (iter % 3) {
+           PERFORMANCE_CHECKPOINT(timerBlkObj);
+       }
+   }
+}
+```
+
+Notice macro on line-11 (also note comment on line-8). It's checkpoint for heavy-iter block. Now notice following output
+```
+06:33:07,558 INFO Executed [heavy-iter] in [9 ms]
+06:33:07,566 INFO Performance checkpoint for block [heavy-iter] : [8 ms]
+06:33:07,566 INFO Executed [heavy-iter] in [8 ms]
+06:33:07,573 INFO Performance checkpoint for block [heavy-iter] : [7 ms]
+06:33:07,573 INFO Executed [heavy-iter] in [7 ms]
+06:33:07,579 INFO Executed [heavy-iter] in [6 ms]
+06:33:07,584 INFO Performance checkpoint for block [heavy-iter] : [5 ms]
+06:33:07,584 INFO Executed [heavy-iter] in [5 ms]
+06:33:07,589 INFO Performance checkpoint for block [heavy-iter] : [4 ms]
+06:33:07,589 INFO Executed [heavy-iter] in [4 ms]
+06:33:07,592 INFO Executed [heavy-iter] in [3 ms]
+06:33:07,594 INFO Performance checkpoint for block [heavy-iter] : [2 ms]
+06:33:07,594 INFO Executed [heavy-iter] in [2 ms]
+06:33:07,595 INFO Performance checkpoint for block [heavy-iter] : [1 ms]
+06:33:07,595 INFO Executed [heavy-iter] in [1 ms]
+06:33:07,595 INFO Executed [heavy-iter] in [0 ms]
+06:33:07,595 INFO Executed [void performHeavyTask(int)] in [51 ms]
+```
+
+You can also compare two checkpoints if they are in sub-blocks e.g, changing from `PERFORMANCE_CHECKPOINT(timerBlkObj)` to `PERFORMANCE_CHECKPOINT(timerObj)` will result in following output
+```
+06:40:35,522 INFO Performance checkpoint for block [void performHeavyTask(int)] : [51 ms ([1 ms] from last checkpoint)]
+```
+
+If you had used `PERFORMANCE_CHECKPOINT_WITH_ID(timerObj, "mychkpnt");` instead, you will get
+```
+06:44:37,979 INFO Performance checkpoint [mychkpnt] for block [void performHeavyTask(int)] : [51 ms ([1 ms] from checkpoint 'mychkpnt')]
+```
+
+Following are some useful macros that you can define to change the behaviour
+
+|   Macro Name                                        |                 Description                                                                                                    |
+|-----------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------|
+| `ELPP_DISABLE_PERFORMANCE_TRACKING`                | Disables performance tracking                                                                                                  |
+| `ELPP_PERFORMANCE_MICROSECONDS`                    | Track up-to microseconds (this includes initializing of el::base::PerformanceTracker as well so might time not be 100% accurate)        |
+
+Notes:
+
+1. Performance tracking uses `performance` logger (INFO level) by default unless `el::base::PerformanceTracker` is constructed manually (not using macro - not recommended). When configuring other loggers, make sure you configure this one as well.
+
+2. In above examples, `timerObj` and `timerBlkObj` is of type `el::base::type::PerformanceTrackerPtr`. The `checkpoint()` routine of the `el::base::PerformanceTracker` can be accessed by `timerObj->checkpoint()` but not recommended as this will override behaviour of using macros, behaviour like location of checkpoint.
+
+3. In order to access `el::base::type::PerformanceTrackerPtr` while in `TIMED_BLOCK`, you can use `timerObj.timer`
+
+4. `TIMED_BLOCK` macro resolves to a single-looped for-loop, so be careful where you define `TIMED_BLOCK`, if for-loop is allowed in the line where you use it, you should have no errors.
+
+ > You may be interested in [python script to parse performance logs](https://github.com/muflihun/easyloggingpp/issues/206)
+
+ [![top] Goto Top](#table-of-contents)
+ 
+#### Conditional Performance Tracking
+If you want to enable performance tracking for certain conditions only, e.g. based on a certain verbosity level, you can use the variants `TIMED_FUNC_IF` or `TIMED_SCOPE_IF`.
+ 
+ A verbosity level example is given below
+ 
+```c++
+ void performHeavyTask(int iter) {
+    // enable performance tracking for verbosity level 4 or higher
+    TIMED_FUNC_IF( timerObj, VLOG_IS_ON(4) );
+    // Some more heavy tasks
+ }
+```
+
+ [![top] Goto Top](#table-of-contents)
+ 
+#### Make Use of Performance Tracking Data
+If you wish to capture performance tracking data right after it is finished, you can do so by extending `el::PerformanceTrackingCallback`.
+
+In order to install this handler, use `void Helpers::installPerformanceTrackingCallback<T>(const std::string& id)`. Where `T` is type of your handler. If you wish to uninstall a callback, you can do so by using `Helpers::uninstallPerformanceTrackingCallback<T>(const std::string& id)`. See samples for details
+
+ > DO NOT TRACK PERFORMANCE IN THIS HANDLER OR YOU WILL END UP IN INFINITE-LOOP
+
+ [![top] Goto Top](#table-of-contents)
+
+### Log File Rotating
+Easylogging++ has ability to roll out (or throw away / rotate) log files if they reach certain limit. You can configure this by setting `Max_Log_File_Size`. See Configuration section above.
+
+If you are having failure in log-rollout, you may have failed to add flag i.e, `el::LoggingFlags::StrictLogFileSizeCheck`.
+
+This feature has it's own section in this reference manual because you can do stuffs with the file being thrown away. This is useful, for example if you wish to back this file up etc.
+This can be done by using `el::Helpers::installPreRollOutCallback(const PreRollOutCallback& handler)` where `PreRollOutCallback` is typedef of type `std::function<void(const char*, std::size_t)>`. Please note following if you are using this feature
+
+There is a [sample](/samples/STL/logrotate.cpp) available that you can use as basis.
+
+> You should not log anything in this function. This is because logger would already be locked in multi-threaded application and you can run into dead lock conditions. If you are sure that you are not going to log to same file and not using same logger, feel free to give it a try.
+
+ [![top] Goto Top](#table-of-contents)
+
+### Crash Handling
+Prerequisite: Define macro `ELPP_FEATURE_CRASH_LOG`
+
+Easylogging++ provides ability to handle unexpected crashes for GCC compilers. This is active by default and can be disabled by defining macro `ELPP_DISABLE_DEFAULT_CRASH_HANDLING`. By doing so you are telling library not to handle any crashes. Later on if you wish to handle crash yourself, you can assign crash handler of type void func(int) where int is signal caught. 
+
+Following signals are handled;
+* SIGABRT (If `ELPP_HANDLE_SIGABRT` macro is defined)
+* SIGFPE
+* SIGILL
+* SIGSEGV
+* SIGINT
+
+Stacktraces are not printed by default, in order to do so define macro `ELPP_FEATURE_CRASH_LOG`. Remember, stack trace is only available for GCC compiler.
+
+> Default handler and stack trace uses `default` logger.
+
+Following are some useful macros that you can define to change the behaviour
+
+|   Macro Name                                        |                 Description                                                                                                    |
+|-----------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------|
+| `ELPP_DISABLE_DEFAULT_CRASH_HANDLING`              | Disables default crash handling.                                                                                               |
+| `ELPP_HANDLE_SIGABRT`                              | Enables handling `SIGABRT`. This is disabled by default to prevent annoying `CTRL + C` behaviour when you wish to abort.       |
+
+ [![top] Goto Top](#table-of-contents)
+
+#### Installing Custom Crash Handlers
+You can use your own crash handler by using `el::Helpers::setCrashHandler(const el::base::debug::CrashHandler::Handler&);`. 
+
+> Make sure to abort application at the end of your crash handler using `el::Helpers::crashAbort(int)`. If you fail to do so, you will get into endless loop of crashes.
+
+Here is a good example of your own handler
+```c++
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+void myCrashHandler(int sig) {
+    LOG(ERROR) << "Woops! Crashed!";     
+    // FOLLOWING LINE IS ABSOLUTELY NEEDED AT THE END IN ORDER TO ABORT APPLICATION
+    el::Helpers::crashAbort(sig);
+}
+int main(void) {
+    el::Helpers::setCrashHandler(myCrashHandler);
+
+    LOG(INFO) << "My crash handler!";
+
+    int* i;
+    *i = 0; // Crash!
+
+    return 0;
+}
+```
+
+> If you wish to log reason for crash you can do so by using `el::Helpers::logCrashReason(int, bool, const el::Level&, const char*)`. Following are default parameters for this function:
+```c++
+>  bool stackTraceIfAvailable = false
+>  const el::Level& level = el::Level::Fatal
+>  const char* logger = "default"
+```
+
+ [![top] Goto Top](#table-of-contents)
+
+### Stacktrace
+Prerequisite: Define macro `ELPP_FEATURE_CRASH_LOG`
+
+Easylogging++ supports stack trace printing for GCC compilers. You can print stack trace at anytime by calling `el::base::debug::StackTrace()`, formatting will be done automatically. Note, if you are using non-GCC compiler, you will end-up getting empty output.
+
+ [![top] Goto Top](#table-of-contents)
+ 
+### Multi-threading
+Prerequisite: Define macro `ELPP_THREAD_SAFE`
+
+Easylogging++ is thread-safe. By default thread-safety is disabled. You can enable it by defining `ELPP_THREAD_SAFE` otherwise you will see unexpected results. This is intentional to make library efficient for single threaded application.
+
+ [![top] Goto Top](#table-of-contents)
+ 
+### CHECK Macros
+Easylogging++ supports CHECK macros, with these macros you can quickly check whether certain condition fulfills or not. If not Easylogging++ writes FATAL log, causing application to stop (unless defined macro to prevent stopping application on fatal).
+
+|                     CHECK Name              |                 Notes + Example                                                                                                 |
+|---------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------|
+| `CHECK(condition)`                          | Checks for condition e.g, `CHECK(isLoggedIn()) << "Not logged in";`                                                             |
+| `CHECK_EQ(a, b)`                            | Equality check e.g, `CHECK_EQ(getId(), getLoggedOnId()) << "Invalid user logged in";`                                           |
+| `CHECK_NE(a, b)`                            | Inequality check e.g, `CHECK_NE(isUserBlocked(userId), false) << "User is blocked";`                                            |
+| `CHECK_LT(a, b)`                            | Less than e.g, `CHECK_LT(1, 2) << "How 1 is not less than 2";`                                                                  |
+| `CHECK_GT(a, b)`                            | Greater than e.g, `CHECK_GT(2, 1) << "How 2 is not greater than 1?";`                                                           |
+| `CHECK_LE(a, b)`                            | Less than or equal e.g, `CHECK_LE(1, 1) << "1 is not equal or less than 1";`                                                    |
+| `CHECK_GE(a, b)`                            | Greater than or equal e.g, `CHECK_GE(1, 1) << "1 is not equal or greater than 1";`                                              |
+| `CHECK_NOTNULL(pointer)`                    | Ensures pointer is not null - if OK returns pointer e.g, `explicit MyClass(Obj* obj) : m_obj(CHECK_NOT_NULL(obj)) {}`           |
+| `CHECK_STREQ(str1, str2)`                   | C-string equality (case-sensitive) e.g, `CHECK_STREQ(argv[1], "0") << "First arg cannot be 0";`                                 |
+| `CHECK_STRNE(str1, str2)`                   | C-string inequality (case-sensitive) e.g, `CHECK_STRNE(username1, username2) << "Usernames cannot be same";`                    |
+| `CHECK_STRCASEEQ(str1, str2)`               | C-string inequality (*case-insensitive*) e.g, `CHECK_CASESTREQ(argv[1], "Z") << "First arg cannot be 'z' or 'Z'";`              |
+| `CHECK_STRCASENE(str1, str2)`               | C-string inequality (*case-insensitive*) e.g, `CHECK_STRCASENE(username1, username2) << "Same username not allowed";`           |
+| `CHECK_BOUNDS(val, min, max)`               | Checks that `val` falls under the `min` and `max` range e.g, `CHECK_BOUNDS(i, 0, list.size() - 1) << "Index out of bounds";`    |
+
+> Same versions of macros are available for `DEBUG` only mode, these macros start with `D` (for debug) followed by the same name. e.g, `DCHECK` to check only in debug mode (i.e, when `_DEBUG` is defined or `NDEBUG` is undefined)
+
+ [![top] Goto Top](#table-of-contents)
+ 
+### Logging perror()
+Easylogging++ supports `perror()` styled logging using `PLOG(LEVEL)`, `PLOG_IF(Condition, LEVEL)`, and `PCHECK()` using `default` logger; and for custom logger use `CPLOG(LEVEL, LoggerId)`, `CPLOG_IF(Condition, LEVEL, LoggerId)`. This will append `: log-error [errno]` in the end of log line.
+
+ [![top] Goto Top](#table-of-contents)
+
+### Syslog
+Prerequisite: Define macro `ELPP_SYSLOG`
+
+Easylogging++ supports syslog for platforms that have `syslog.h` header. If your platform does not have `syslog.h`, make sure you do not define this macro or you will end up in errors. Once you are ready to use syslog, you can do so by using one of `SYSLOG(LEVEL)`, `SYSLOG_IF(Condition, LEVEL)`, `SYSLOG_EVERY_N(n, LEVEL)` and uses logger ID: `syslog`. If you want to use custom logger you can do so by using `CSYSLOG(LEVEL, loggerId)` or `CSYSLOG_IF(Condition, LEVEL, loggerId)` or `CSYSLOG_EVERY_N(n, LEVEL, loggerId)`
+
+Syslog in Easylogging++ supports C++ styled streams logging, following example;
+```c++
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+int main(void) {
+    ELPP_INITIALIZE_SYSLOG("my_proc", LOG_PID | LOG_CONS | LOG_PERROR, LOG_USER) // This is optional, you may not add it if you dont want to specify options
+    // Alternatively you may do
+    // el::SysLogInitializer elSyslogInit("my_proc", LOG_PID | LOG_CONS | LOG_PERROR, LOG_USER);
+    SYSLOG(INFO) << "This is syslog - read it from /var/log/syslog"
+    return 0;
+}
+```
+
+Syslog support for Easylogging++ only supports following levels; each level is corresponded with syslog priority as following
+
+ * INFO (LOG_INFO)
+ * DEBUG (LOG_DEBUG)
+ * WARNING (LOG_WARNING)
+ * ERROR (LOG_ERR)
+ * FATAL (LOG_EMERG)
+
+Following levels are not supported and correspond to `LOG_NOTICE`: TRACE, whereas VERBOSE level is completely not supported
+
+ [![top] Goto Top](#table-of-contents)
+ 
+### STL Logging
+Prerequisite: Define macro `ELPP_STL_LOGGING`
+
+As mentioned earlier, with easylogging++, you can log your STL templates including most containers. In order to do so you will need to define `ELPP_STL_LOGGING` macro. This enables including all the necessary headers and defines all necessary functions.
+For performance, containers are limited to log maximum of 100 entries. This behaviour can be changed by changed header file (base::consts::kMaxLogPerContainer) but not recommended as in order to log, writer has to go through each entry causing potential delays. But if you are not really concerned with performance, you may change this value.
+
+ [![top] Goto Top](#table-of-contents)
+
+#### Supported Templates
+Following templates are supported as part of STL Logging; note: basic and primitive types e.g, std::string or long are not listed as they is supported anyway, following list only contains non-basic types e.g, containers or bitset etc.
+
+|     *       |          *              |       *          |       *          |
+|-------------|-------------------------|------------------|------------------|
+| std::vector |  std::list              |  std::deque      |    std::queue    |
+| std::stack  |  std::priority_queue    |  std::set        |    std::multiset |
+| std::pair   |  std::bitset            |  std::map        |    std::multimap |
+
+Some C++11 specific templates are supported by further explicit macro definitions; note these also need `ELPP_STL_LOGGING`
+
+|   Template              |     Macro Needed            |
+|-------------------------|-----------------------------|
+| std::array              | `ELPP_LOG_STD_ARRAY`       |
+| std::unordered_map      | `ELPP_LOG_UNORDERED_MAP`   |
+| std::unordered_multimap | `ELPP_LOG_UNORDERED_MAP`   |
+| std::unordered_set      | `ELPP_LOG_UNORDERED_SET`   |
+| std::unordered_multiset | `ELPP_LOG_UNORDERED_SET`   |
+
+Standard manipulators are also supported, in addition std::stringstream is also supported.
+
+[![top] Goto Top](#table-of-contents)
+ 
+### Qt Logging
+Prerequisite: Define macro `ELPP_QT_LOGGING`
+
+Easylogging++ has complete logging support for Qt core library. When enabled, this will include all the headers supported Qt logging. Once you did that, you should be good to go.
+
+Following Qt classes and containers are supported by Easylogging++ v9.0+
+
+|     *         |          *                |       *            |         *          |         *          |         *          |
+|---------------|---------------------------|--------------------|--------------------|--------------------|--------------------|
+| `QString`     |  `QByteArray`             |  `QLatin`          |    `QList`         |    `QVector`       |    `QQueue`        |
+| `QSet`        |  `QPair`                  |  `QMap`            |    `QMultiMap`     |    `QHash`         |    `QMultiHash`    |
+| `QLinkedList` |  `QStack`                 |  `QChar`           |    `q[u]int[64]`   |                    |                    |
+
+Similar to STL logging, Qt containers are also limit to log 100 entries per log, you can change this behaviour by changing base::consts::kMaxLogPerContainer from header but this is not recommended as this was done for performance purposes.
+
+Also note, if you are logging a container that contains custom class, make sure you have read Extending Library section below.
+
+ [![top] Goto Top](#table-of-contents)
+
+### Boost Logging
+Prerequisite: Define macro `ELPP_BOOST_LOGGING`
+
+Easylogging++ supports some of boost templates. Following table shows the templates supported.
+
+|     *                               |          *                               |
+|-------------------------------------|------------------------------------------|
+| `boost::container::vector`          |  `boost::container::stable_vector`       |
+| `boost::container::map`             |  `boost::container::flat_map`            |
+| `boost::container::set`             |  `boost::container::flat_set`            |
+| `boost::container::deque`           |  `boost::container::list`                |
+| `boost::container::string`          |                                          |
+
+ [![top] Goto Top](#table-of-contents)
+
+### wxWidgets Logging
+Prerequisite: Define macro `ELPP_WXWIDGETS_LOGGING`
+
+Easylogging++ supports some of wxWidgets templates.
+
+Following table shows the templates supported.
+
+|     *               |          *        |      *                    |      *                    |      *              |      *               |
+|---------------------|-------------------|---------------------------|---------------------------|---------------------|----------------------|
+| `wxString`          |  `wxVector`       |  `wxList`                 |  `wxString`               | `wxHashSet`         |  `wxHashMap`         |
+
+wxWidgets has its own way of declaring and defining some templates e.g, `wxList` where  you use `WX_DECLARE_LIST` macro to declare a list.
+
+In order to setup a container for logging that holds pointers to object, use `ELPP_WX_PTR_ENABLED`, otherwise if container holds actual object e.g, wxHashSet use `ELPP_WX_ENABLED`. For containers like `wxHashMap` because it contains value and pair, use `ELPP_WX_HASH_MAP_ENABLED` macro.
+
+```c++
+// wxList example
+WX_DECLARE_LIST(int, MyList);
+WX_DEFINE_LIST(MyList);
+// Following line does the trick
+ELPP_WX_PTR_ENABLED(MyList);
+
+// wxHashSet example
+WX_DECLARE_HASH_SET(int, wxIntegerHash, wxIntegerEqual, IntHashSet);
+// Following line does the trick!
+ELPP_WX_ENABLED(IntHashSet)
+
+// wxHashMap example
+WX_DECLARE_STRING_HASH_MAP(wxString, MyHashMap);
+// Following line does the trick
+ELPP_WX_HASH_MAP_ENABLED(MyHashMap)
+```
+You may also have a look at wxWidgets sample
+
+ [![top] Goto Top](#table-of-contents)
+
+### Extending Library
+#### Logging Your Own Class
+
+You can log your own classes by extending `el::Loggable` class and implementing pure-virtual function `void log(std::ostream& os) const`. Following example shows a good way to extend a class.
+```c++
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+class Integer : public el::Loggable {
+public:
+    Integer(int i) : m_underlyingInt(i) {
+    }
+    Integer& operator=(const Integer& integer) {
+        m_underlyingInt = integer.m_underlyingInt;
+        return *this;
+    }
+    // Following line does the trick!
+    // Note: el::base::type::ostream_t is either std::wostream or std::ostream depending on unicode enabled or not
+    virtual void log(el::base::type::ostream_t& os) const {
+        os << m_underlyingInt;
+    }
+private:
+    int m_underlyingInt;
+};
+
+int main(void) {
+    Integer count = 5;
+    LOG(INFO) << count;
+    return 0;
+}
+```
+
+ [![top] Goto Top](#table-of-contents)
+
+#### Logging Third-party Class
+Let's say you have third-party class that you don't have access to make changes to, and it's not yet loggable. In order to make it loggable, you can use `MAKE_LOGGABLE(ClassType, ClassInstance, OutputStreamInstance)` to make it Easylogging++ friendly.
+
+Following sample shows a good usage:
+```c++
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+class Integer {
+public:
+    Integer(int i) : m_underlyingInt(i) {
+    }
+    Integer& operator=(const Integer& integer) {
+        m_underlyingInt = integer.m_underlyingInt;
+        return *this;
+    }
+    int getInt(void) const { return m_underlyingInt; }
+private:
+    int m_underlyingInt;
+};
+
+// Following line does the trick!
+inline MAKE_LOGGABLE(Integer, integer, os) {
+    os << integer.getInt();
+    return os;
+}
+int main(void) {
+    Integer count = 5;
+    LOG(INFO) << count;
+    return 0;
+}
+```
+
+Another very nice example (to log `std::chrono::system_clock::time_point`)
+
+```c++
+inline MAKE_LOGGABLE(std::chrono::system_clock::time_point, when, os) {
+    time_t t = std::chrono::system_clock::to_time_t(when);
+    auto tm = std::localtime(&t);
+    char buf[1024];
+    strftime(buf,sizeof(buf), "%F %T (%Z)", tm);
+    os << buf;
+    return os;
+}
+```
+
+This may not be practically best implementation but you get the point.
+
+ > Just be careful with this as having a time-consuming overloading of `log(el::base::type::ostream_t& os)` and `MAKE_LOGGABLE`, they get called everytime class is being logged.
+
+ [![top] Goto Top](#table-of-contents)
+
+### Manually Flushing and Rolling Log Files
+You can manually flush log files using `el::Logger::flush()` (to flush single logger with all referencing log files) or `el::Loggers::flushAll()` (to flush all log files for all levels).
+
+If you have not set flag `LoggingFlag::StrictLogFileSizeCheck` for some reason, you can manually check for log files that need rolling; by using `el::Helpers::validateFileRolling(el::Logger*, const el::Level&)`. 
+
+ [![top] Goto Top](#table-of-contents)
+
+### Log Dispatch Callback
+If you wish to capture log message right after it is dispatched, you can do so by having a class that extends `el::LogDispatchCallback` and implement the pure-virtual functions, then install it at anytime using `el::Helpers::installLogDispatchCallback<T>(const std::string&)`. If you wish to uninstall a pre-installed handler with same ID, you can do so by using `el::Helpers::uninstallLogDispatchCallback<T>(const std::string&)`
+
+ > DO NOT LOG ANYTHING IN THIS HANDLER OR YOU WILL END UP IN INFINITE-LOOP
+
+ [![top] Goto Top](#table-of-contents)
+
+### Logger Registration Callback
+If you wish to capture event of logger registration (and potentially want to reconfigure this logger without changing default configuration) you can use `el::LoggerRegistrationCallback`. The syntax is similar to [other callbacks](#log-dispatch-callback). You can use [this sample](https://github.com/muflihun/easyloggingpp/blob/master/samples/STL/new-logger-registration-callback.cpp) as basis.
+
+ > DO NOT LOG ANYTHING IN THIS HANDLER
+
+ [![top] Goto Top](#table-of-contents)
+ 
+### Asynchronous Logging
+Prerequisite: Define macro `ELPP_EXPERIMENTAL_ASYNC`
+
+Asynchronous logging is in experimental stages and they are not widely promoted. You may enable and test this feature by defining macro `ELPP_EXPERIMENTAL_ASYNC` and if you find some issue with the feature please report in [this issue](https://github.com/muflihun/easyloggingpp/issues/202). Reporting issues always help for constant improvements.
+
+Please note:
+* Asynchronous will only work with few compilers (it purely uses `std::thread`)
+* Compiler should support `std::this_thread::sleep_for`. This restriction may (or may not) be removed in future (stable) version of asynchronous logging.
+* You should not rely on asynchronous logging in production, this is because feature is in experiemental stages.
+
+ [![top] Goto Top](#table-of-contents)
+ 
+### Helper Classes
+There are static helper classes available to make it easy to do stuffs;
+
+ * `el::Helpers`
+ * `el::Loggers`
+
+You can do various cool stuffs using functions in these classes, see [this issue](https://github.com/muflihun/easyloggingpp/issues/210) for instance.
+
+ [![top] Goto Top](#table-of-contents)
+ 
+# Contribution
+### Submitting Patches
+You can submit patches to `develop` branch and we will try and merge them. Since it's based on single header, it can be sometimes difficult to merge without having merge conflicts.
+
+ [![top] Goto Top](#table-of-contents)
+ 
+### Reporting a Bug
+If you have found a bug and wish to report it, feel free to do so at [github issue tracker](https://github.com/muflihun/easyloggingpp/issues?state=open). I will try to look at it as soon as possible. Some information should be provided to make it easy to reproduce;
+* Platform (OS, Compiler)
+* Log file location
+* Macros defined (on compilation) OR simple compilation 
+* Please assign issue label.
+
+Try to provide as much information as possible. Any bug with no clear information will be ignored and closed.
+
+ [![top] Goto Top](#table-of-contents)
+
+# Compatibility
+
+Easylogging++ requires a decent C++0x complient compiler. Some compilers known to work with v9.0+ are shown in table below, for older versions please refer to readme on corresponding release at github
+
+| *****   |     Compiler/Platform     |      Notes                                                                                                                                               |
+|---------|---------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------|
+|![gcc]   | GCC 4.7+                  | Stack trace logging. Very close to support GCC 4.6 if it had supported strong enum types casting to underlying type. It causes internal compiler error.  |
+|![llvm]  | Clang++ 3.1+              | Stack trace logging only with gcc compliant.                                                                                                             |
+|![intel] | Intel C++ 13.0+           | Workarounds to support: Use if instead of switch on strong enum type. No `final` keyword etc. Stack trace logging only with gcc compliant                |
+|![vcpp]  | Visual C++ 11.0+          | Tested with VS2012, VS2013; Use of argument templates instead of variadic templates. CRT warnings control. No stack trace logging.                       |
+|![mingw] | MinGW                     | (gcc version 4.7+) Workarounds to support: Mutex wrapper, no stack trace logging. No thread ID on windows                                                |
+|![tdm]   | TDM-GCC 4.7.1             | Tested with TDM-GCC 4.7.1 32 and 64 bit compilers                                                                                                        |
+|![cygwin]| Cygwin                    | Tested with gcc version 4.8+                                                                                                                             |
+|![devcpp]| Dev C++ 5.4+              | Tested with Dev-C++ 5.4.2 using TDM-GCC 4.7.1 32 & 64-bit compilers                                                                                      |
+
+Operating systems that have been tested are shown in table below. Easylogging++ should work on other major operating systems that are not in the list.
+
+| *****         | Operating System       |   Notes                                                                             |
+|---------------|------------------------|-------------------------------------------------------------------------------------|
+|![win10]        | Windows 10            | Tested on 64-bit, should also work on 32-bit                                        |
+|![win8]        | Windows 8              | Tested on 64-bit, should also work on 32-bit                                        |
+|![win7]        | Windows 7              | Tested on 64-bit, should also work on 32-bit                                        |
+|![winxp]       | Windows XP             | Tested on 32-bit, should also work on 64-bit                                        |
+|![mac]         | Mac OSX                | Clang++ 3.1, g++ (You need `-std=c++11 -stdlib=libc++` to successfully compile)     |
+|![sl]          | Scientific Linux 6.2   | Tested using Intel C++ 13.1.3 (gcc version 4.4.6 compatibility)                     |
+|![mint]        | Linux Mint 14          | 64-bit, mainly developed on this machine using all compatible linux compilers       |
+|![fedora]      | Fedora 19              | 64-bit, using g++ 4.8.1                                                             |
+|![ubuntu]      | Ubuntu 13.04           | 64-bit, using g++ 4.7.3 (libstdc++6-4.7-dev)                                        |
+|![freebsd]     | FreeBSD                | (from github user)                                                                  |
+|![android]     | Android                | Tested with C4droid (g++) on Galaxy Tab 2                                           |
+|![raspberrypi] | RaspberryPi 7.6        | Tested with 7.6.2-1.1 (gcc version 4.9.1 (Raspbian 4.9.1-1)) by contributor         |
+|![solaris]     | Solaris i86            | Tested by contributor                                                               |
+
+Easylogging++ has also been tested with following C++ libraries;
+
+| *****       | Library                |    Notes                                                                            |
+|-------------|------------------------|-------------------------------------------------------------------------------------|
+|![qt]        | Qt                     | Tested with Qt 4.6.2, Qt 5 and Qt 5.5 (with C++0x and C++11)                        |
+|![boost]     | Boost                  | Tested with boost 1.51                                                              |
+|![wxwidgets] | wxWidgets              | Tested with wxWidgets 2.9.4                                                         |
+|![gtkmm]     | gtkmm                  | Tested with gtkmm 2.4                                                               |
+
+ [![top] Goto Top](#table-of-contents)
+ 
+# Licence
+```
+The MIT License (MIT)
+
+Copyright (c) 2017 muflihun.com
+
+https://github.com/muflihun/easyloggingpp
+https://labs.muflihun.com
+https://muflihun.com
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+```
+
+ [![top] Goto Top](#table-of-contents)
+ 
+# Disclaimer
+Icons used in this manual (in compatibility section) are solely for information readability purposes. I do not own these icons. If anyone has issues with usage of these icon, please feel free to contact me via company's email and I will look for an alternative. Company's email address is required so that I can verify the ownership, any other email address for this purpose will be ignored.
+
+"Pencil +" icon is Easylogging++ logo and should only be used where giving credit to Easylogging++ library.
+
+
+ [![top] Goto Top](#table-of-contents)
+ 
+  [banner]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/banner.png?v=4
+  [ubuntu]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/icons/ubuntu.png?v=2
+  [mint]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/icons/linux-mint.png?v=2
+  [freebsd]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/icons/free-bsd.png?v=2
+  [sl]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/icons/scientific-linux.png?v=2
+  [fedora]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/icons/fedora.png?v=3
+  [mac]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/icons/mac-osx.png?v=2
+  [winxp]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/icons/windowsxp.png?v=2
+  [win7]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/icons/windows7.png?v=2
+  [win8]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/icons/windows8.png?v=2
+  [win10]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/icons/windows10.png?v=2
+  [qt]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/icons/qt.png?v=3
+  [boost]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/icons/boost.png?v=3
+  [wxwidgets]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/icons/wxwidgets.png?v=3
+  [devcpp]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/icons/devcpp.png?v=3
+  [gtkmm]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/icons/gtkmm.png?v=3
+  [tdm]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/icons/tdm.png?v=3
+  [raspberrypi]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/icons/raspberry-pi.png?v=3
+  [solaris]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/icons/solaris.png?v=3
+
+
+  [gcc]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/icons/gcc.png?v=4
+  [mingw]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/icons/mingw.png?v=2
+  [cygwin]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/icons/cygwin.png?v=2
+  [vcpp]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/icons/vcpp.png?v=2
+  [llvm]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/icons/llvm.png?v=2
+  [intel]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/icons/intel.png?v=2
+  [android]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/icons/android.png?v=2
+  [manual]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/help.png?v=3
+  [download]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/download.png?v=2
+  [samples]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/sample.png?v=2
+  [notes]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/notes.png?v=4
+  [top]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/up.png?v=4
+  [www]: https://raw.githubusercontent.com/muflihun/easyloggingpp.muflihun.com/master/images/logo-www.png?v=6
+  
diff --git a/vendor/github.com/muflihun/easyloggingpp/cmake/FindEASYLOGGINGPP.cmake b/vendor/github.com/muflihun/easyloggingpp/cmake/FindEASYLOGGINGPP.cmake
new file mode 100644
index 0000000..c15226f
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/cmake/FindEASYLOGGINGPP.cmake
@@ -0,0 +1,38 @@
+#
+# CMake module for Easylogging++ logging library
+#
+# Defines ${EASYLOGGINGPP_INCLUDE_DIR}
+#
+# If ${EASYLOGGINGPP_USE_STATIC_LIBS} is ON then static libs are searched.
+# In these cases ${EASYLOGGINGPP_LIBRARY} is also defined
+#
+# (c) 2017 Muflihun Labs
+#
+# https://github.com/muflihun/easyloggingpp
+# https://muflihun.com
+#
+
+message ("-- Easylogging++: Searching...")
+set(EASYLOGGINGPP_PATHS ${EASYLOGGINGPP_ROOT} $ENV{EASYLOGGINGPP_ROOT})
+
+find_path(EASYLOGGINGPP_INCLUDE_DIR
+        easylogging++.h
+        PATH_SUFFIXES include
+        PATHS ${EASYLOGGINGPP_PATHS}
+)
+
+if (EASYLOGGINGPP_USE_STATIC_LIBS)
+    message ("-- Easylogging++: Static linking is preferred")
+    find_library(EASYLOGGINGPP_LIBRARY
+        NAMES libeasyloggingpp.a libeasyloggingpp.dylib libeasyloggingpp
+        HINTS "${CMAKE_PREFIX_PATH}/lib"
+    )
+elseif (EASYLOGGINGPP_USE_SHARED_LIBS)
+    message ("-- Easylogging++: Dynamic linking is preferred")
+    find_library(EASYLOGGINGPP_LIBRARY
+        NAMES libeasyloggingpp.dylib libeasyloggingpp libeasyloggingpp.a
+        HINTS "${CMAKE_PREFIX_PATH}/lib"
+    )
+endif()
+
+find_package_handle_standard_args(EASYLOGGINGPP REQUIRED_VARS EASYLOGGINGPP_INCLUDE_DIR)
diff --git a/vendor/github.com/muflihun/easyloggingpp/cmake/Findgtest.cmake b/vendor/github.com/muflihun/easyloggingpp/cmake/Findgtest.cmake
new file mode 100644
index 0000000..cd443f4
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/cmake/Findgtest.cmake
@@ -0,0 +1,159 @@
+# Locate the Google C++ Testing Framework.
+#
+# Defines the following variables:
+#
+#   GTEST_FOUND - Found the Google Testing framework
+#   GTEST_INCLUDE_DIRS - Include directories
+#
+# Also defines the library variables below as normal
+# variables.  These contain debug/optimized keywords when
+# a debugging library is found.
+#
+#   GTEST_BOTH_LIBRARIES - Both libgtest & libgtest-main
+#   GTEST_LIBRARIES - libgtest
+#   GTEST_MAIN_LIBRARIES - libgtest-main
+#
+# Accepts the following variables as input:
+#
+#   GTEST_ROOT - (as a CMake or environment variable)
+#                The root directory of the gtest install prefix
+#
+#   GTEST_MSVC_SEARCH - If compiling with MSVC, this variable can be set to
+#                       "MD" or "MT" to enable searching a GTest build tree
+#                       (defaults: "MD")
+#
+#-----------------------
+# Example Usage:
+#
+#    enable_testing()
+#    find_package(GTest REQUIRED)
+#    include_directories(${GTEST_INCLUDE_DIRS})
+#
+#    add_executable(foo foo.cc)
+#    target_link_libraries(foo ${GTEST_BOTH_LIBRARIES})
+#
+#    add_test(AllTestsInFoo foo)
+#
+#-----------------------
+#
+# If you would like each Google test to show up in CTest as
+# a test you may use the following macro.
+# NOTE: It will slow down your tests by running an executable
+# for each test and test fixture.  You will also have to rerun
+# CMake after adding or removing tests or test fixtures.
+#
+# GTEST_ADD_TESTS(executable extra_args ARGN)
+#    executable = The path to the test executable
+#    extra_args = Pass a list of extra arguments to be passed to
+#                 executable enclosed in quotes (or "" for none)
+#    ARGN =       A list of source files to search for tests & test
+#                 fixtures.
+#
+#  Example:
+#     set(FooTestArgs --foo 1 --bar 2)
+#     add_executable(FooTest FooUnitTest.cc)
+#     GTEST_ADD_TESTS(FooTest "${FooTestArgs}" FooUnitTest.cc)
+
+#=============================================================================
+# Copyright 2009 Kitware, Inc.
+# Copyright 2009 Philip Lowman <philip@yhbt.com>
+# Copyright 2009 Daniel Blezek <blezek@gmail.com>
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distributed this file outside of CMake, substitute the full
+#  License text for the above reference.)
+#
+# Thanks to Daniel Blezek <blezek@gmail.com> for the GTEST_ADD_TESTS code
+
+function(GTEST_ADD_TESTS executable extra_args)
+    if(NOT ARGN)
+        message(FATAL_ERROR "Missing ARGN: Read the documentation for GTEST_ADD_TESTS")
+    endif()
+    foreach(source ${ARGN})
+        file(READ "${source}" contents)
+        string(REGEX MATCHALL "TEST_?F?\\(([A-Za-z_0-9 ,]+)\\)" found_tests ${contents})
+        foreach(hit ${found_tests})
+            string(REGEX REPLACE ".*\\( *([A-Za-z_0-9]+), *([A-Za-z_0-9]+) *\\).*" "\\1.\\2" test_name ${hit})
+            add_test(${test_name} ${executable} --gtest_filter=${test_name} ${extra_args})
+            list(APPEND _test_names ${test_name})
+        endforeach()
+    endforeach()    
+    set(GTEST_ADD_TEST_NAMES ${_test_names} PARENT_SCOPE)
+endfunction()
+
+function(_gtest_append_debugs _endvar _library)
+    if(${_library} AND ${_library}_DEBUG)
+        set(_output optimized ${${_library}} debug ${${_library}_DEBUG})
+    else()
+        set(_output ${${_library}})
+    endif()
+    set(${_endvar} ${_output} PARENT_SCOPE)
+endfunction()
+
+function(_gtest_find_library _name)
+    find_library(${_name}
+        NAMES ${ARGN}
+        HINTS
+            $ENV{GTEST_ROOT}
+            ${GTEST_ROOT}
+        PATH_SUFFIXES ${_gtest_libpath_suffixes}
+    )
+    mark_as_advanced(${_name})
+endfunction()
+
+#
+
+if(NOT DEFINED GTEST_MSVC_SEARCH)
+    set(GTEST_MSVC_SEARCH MD)
+endif()
+
+set(_gtest_libpath_suffixes lib)
+if(MSVC)
+    if(GTEST_MSVC_SEARCH STREQUAL "MD")
+        list(APPEND _gtest_libpath_suffixes
+            msvc/gtest-md/Debug
+            msvc/gtest-md/Release)
+    elseif(GTEST_MSVC_SEARCH STREQUAL "MT")
+        list(APPEND _gtest_libpath_suffixes
+            msvc/gtest/Debug
+            msvc/gtest/Release)
+    endif()
+endif()
+
+
+find_path(GTEST_INCLUDE_DIR gtest/gtest.h
+    HINTS
+        $ENV{GTEST_ROOT}/include
+        ${GTEST_ROOT}/include
+)
+mark_as_advanced(GTEST_INCLUDE_DIR)
+
+if(MSVC AND GTEST_MSVC_SEARCH STREQUAL "MD")
+    # The provided /MD project files for Google Test add -md suffixes to the
+    # library names.
+    _gtest_find_library(GTEST_LIBRARY            gtest-md  gtest)
+    _gtest_find_library(GTEST_LIBRARY_DEBUG      gtest-mdd gtestd)
+    _gtest_find_library(GTEST_MAIN_LIBRARY       gtest_main-md  gtest_main)
+    _gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_main-mdd gtest_maind)
+else()
+    _gtest_find_library(GTEST_LIBRARY            gtest)
+    _gtest_find_library(GTEST_LIBRARY_DEBUG      gtestd)
+    _gtest_find_library(GTEST_MAIN_LIBRARY       gtest_main)
+    _gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_maind)
+endif()
+
+include(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest DEFAULT_MSG GTEST_LIBRARY GTEST_INCLUDE_DIR GTEST_MAIN_LIBRARY)
+
+if(GTEST_FOUND)
+    set(GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR})
+    _gtest_append_debugs(GTEST_LIBRARIES      GTEST_LIBRARY)
+    _gtest_append_debugs(GTEST_MAIN_LIBRARIES GTEST_MAIN_LIBRARY)
+    set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES})
+endif()
\ No newline at end of file
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.00 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.00
new file mode 100644
index 0000000..0889455
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.00
@@ -0,0 +1,58 @@
+
+Easylogging++ v9.00 RELEASE NOTES
+---------------------------------
+
+==========================
+=  DEPRECATED COMPONENTS =
+==========================
+
+ - Support for C++98 and C++03 is dropped in favour of performance improvements
+ - Dropped QA Level
+ - Dropped support for checking whitespaces within level/configuration name from configuration file
+ - Replaced escape character from 'E' to '%' 
+ - Renamed namespaces (easyloggingpp => el, internal => base, utilities => utils)
+ - Renamed internal classes (StringUtils => Str, OSUtils => OS, DateUtils => DateTime)
+ - Avoid direct copy/assignment for classes, i.e, Configurations c2 = c is incorrect; Configurations c2; c2 = c; is correct
+ - Changed comment style for configuration from // to ##
+ - Some Loggers static functions have been moved to new el::Helpers e.g, setApplicationArguments
+ - Renamed RollOutSize -> MaxLogFileSize (MAX_LOG_FILE_SIZE for configuration file)
+ - Renamed Level::All -> Level::Global
+ 
+===========================
+=       NEW FEATURES      =
+===========================
+
+ - Added support for milliseconds width for VC++
+ - Crash handling
+ - Stacktrace printing
+ - Customizable date/time format (issue #48)
+ - Support for Qt/QByteArray logging
+ - Introduced vmodule support to specify verbose logging levels by modules
+ - Introduced el::LoggingFlag
+ - Introduced global configurations (Configuring all loggers and registering new loggers right from configuration file)
+ - Changed licence to MIT to support any type of project
+ - Dedicated website (easylogging.org)
+ - Dedicated support email (support@easy..) 
+ - Support for Visual C++ 2013 (Tested with preview)
+
+============================
+=      DROPPED SUPPORT     =
+============================
+
+ - Dropped support for Android NDK (Code not deleted as it is on to-do list to fix it for future version)
+
+============================
+=       BUG FIXES          = 
+============================
+
+ - Issue with creating 1000+ loggers (issue #66)
+ - Issue with occasional logging offset
+ - Fixed clang++ extra warnings
+
+==========================
+=         NOTES          =
+==========================
+
+ - If you have any confusions refer to reference manual (github readme)
+ - If you still have confusions please feel free to email 
+ - There is very less backward compatibility because of major design improvements - since now library is on better track future versions will be made backward compatible (with minimum v9.00 compatible).
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.01 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.01
new file mode 100644
index 0000000..00d9d43
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.01
@@ -0,0 +1,22 @@
+
+Easylogging++ v9.01 RELEASE NOTES
+---------------------------------
+
+===========================
+=       NEW FEATURES      =
+===========================
+ 
+ - Failed check should be embedded in square brackets (issue #86)
+ - Default log file using macro `_ELPP_DEFAULT_LOG_FILE` (if available)
+
+============================
+=       BUG FIXES          = 
+============================
+
+ - Issue with creating shared library that uses easylogging++ (issue #85)
+
+==========================
+=         NOTES          =
+==========================
+
+ - Default log location for *nix is in project location logs/ directory
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.02 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.02
new file mode 100644
index 0000000..2b9122a
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.02
@@ -0,0 +1,15 @@
+
+Easylogging++ v9.02 RELEASE NOTES
+---------------------------------
+
+============================
+=       BUG FIXES          = 
+============================
+
+ - Minor warning fix with clang++
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.03 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.03
new file mode 100644
index 0000000..ae740ff
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.03
@@ -0,0 +1,15 @@
+
+Easylogging++ v9.03 RELEASE NOTES
+---------------------------------
+
+============================
+=       BUG FIXES          = 
+============================
+
+ - Issue with preloading library that uses easylogging++ (issue #87)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.04 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.04
new file mode 100644
index 0000000..35b5663
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.04
@@ -0,0 +1,10 @@
+
+Easylogging++ v9.04 RELEASE NOTES
+---------------------------------
+
+==========================
+=         NOTES          =
+==========================
+
+ - Minor refactoring
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.05 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.05
new file mode 100644
index 0000000..22a3b00
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.05
@@ -0,0 +1,22 @@
+
+Easylogging++ v9.05 RELEASE NOTES
+---------------------------------
+
+==========================
+=      BUG FIXES         =
+==========================
+
+ - Error while generating stack trace on crash when stacktrace is active (issue #88)
+
+==========================
+=     NEW FEATURES       =
+==========================
+
+ - Ability to choose detailed crash reason (issue #90)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.06 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.06
new file mode 100644
index 0000000..95b025a
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.06
@@ -0,0 +1,22 @@
+
+Easylogging++ v9.06 RELEASE NOTES
+---------------------------------
+
+==========================
+=      BUG FIXES         =
+==========================
+
+ - std::unordered_set error (issue #91)
+
+==========================
+=     NEW FEATURES       =
+==========================
+
+ - Add support for missing boost::container templates (issue #89)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.07 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.07
new file mode 100644
index 0000000..153e8e5
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.07
@@ -0,0 +1,20 @@
+
+Easylogging++ v9.07 RELEASE NOTES
+---------------------------------
+
+==========================
+=      BUG FIXES         =
+==========================
+
+==========================
+=     NEW FEATURES       =
+==========================
+
+ - Added Cygwin Compatibility (issue #93)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.08 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.08
new file mode 100644
index 0000000..1cce159
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.08
@@ -0,0 +1,16 @@
+
+Easylogging++ v9.08 RELEASE NOTES
+---------------------------------
+
+==========================
+=      BUG FIXES         =
+==========================
+
+ - Issue with fatal log being disabled (issue #94)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.09 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.09
new file mode 100644
index 0000000..1c16108
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.09
@@ -0,0 +1,28 @@
+
+Easylogging++ v9.09 RELEASE NOTES
+---------------------------------
+
+==========================
+=       NEW FEATURES     =
+==========================
+
+ - Support for wxWidgets containers (issue #60)
+
+==========================
+=        BUG FIXES       =
+==========================
+
+ - NewLineForContainer does not work for Qt containers that dont use writeIterator (isue #96)
+
+==========================
+=       REFACTORING      =
+==========================
+
+ - Seperated writer from dispatcher + log class
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.10 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.10
new file mode 100644
index 0000000..903aa90
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.10
@@ -0,0 +1,16 @@
+
+Easylogging++ v9.10 RELEASE NOTES
+---------------------------------
+
+==========================
+=        BUG FIXES       =
+==========================
+
+ - Some issues with timeval not declared being struct caused issues with some libs
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.11 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.11
new file mode 100644
index 0000000..f634b9b
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.11
@@ -0,0 +1,25 @@
+
+Easylogging++ v9.11 RELEASE NOTES
+---------------------------------
+
+==========================
+=      BUG FIXES         =
+==========================
+
+ - Fix for TDM GCC date/time issue
+
+==========================
+=      NEW FEATURES      =
+==========================
+
+ - Logger not registered error now uses 'default' logger
+ - Android support added
+ - Support for TDM GCC compilers
+ - Qt logging does not need QT_CORE_LIB macro anymore for necessities support
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.12 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.12
new file mode 100644
index 0000000..dc1659a
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.12
@@ -0,0 +1,25 @@
+
+Easylogging++ v9.12 RELEASE NOTES
+---------------------------------
+
+==========================
+=     NEW FEATURES       =
+==========================
+
+ - Ability to log third-party classes (issue #97)
+ - Class to extend to make class loggable (issue #98)
+
+==========================
+=     IMPROVEMENTS       =
+==========================
+
+ - CHECK_NOTNULL() to expand to fully qualified function name
+ - CHECK_EQ and CHECK_NE expands to use CHECK
+ - Inlined some methods for performance improvements
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.13 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.13
new file mode 100644
index 0000000..c89da79
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.13
@@ -0,0 +1,22 @@
+
+Easylogging++ v9.13 RELEASE NOTES
+---------------------------------
+
+=====================
+=    NEW FEATURES   =
+=====================
+
+ - 'logs' directory is made automatically (issue #99)
+
+==========================
+=       INTERNALS        =
+==========================
+
+ - Easylogging++ internal errors are enabled on defining macro `_ELPP_ENABLE_ERRORS`
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.14 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.14
new file mode 100644
index 0000000..5c49bf6
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.14
@@ -0,0 +1,16 @@
+
+Easylogging++ v9.14 RELEASE NOTES
+---------------------------------
+
+==========================
+=     BUG FIXES          =
+==========================
+
+ - Fixes issues with valgrind when no default file is used (issue #100)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.15 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.15
new file mode 100644
index 0000000..c74f29b
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.15
@@ -0,0 +1,16 @@
+
+Easylogging++ v9.15 RELEASE NOTES
+---------------------------------
+
+=============================
+=     IMPROVEMENTS          =
+=============================
+
+ - Warnings fixes (issue #101)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.16 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.16
new file mode 100644
index 0000000..5d0dff4
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.16
@@ -0,0 +1,17 @@
+
+Easylogging++ v9.16 RELEASE NOTES
+---------------------------------
+
+=============================
+=     IMPROVEMENTS          =
+=============================
+
+ - Suppressed unused warning for default filename constant (only clang)
+ - Some serious steps taken for future release to have less warnings - made all samples -pedantic-errors + -Wfatal-errors (note: samples are part of build-tests) 
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.17 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.17
new file mode 100644
index 0000000..a534c98
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.17
@@ -0,0 +1,22 @@
+
+Easylogging++ v9.17 RELEASE NOTES
+---------------------------------
+
+=============================
+=     NEW FEATURES          =
+=============================
+
+ - Add a format specifier to log filename and line number (issue #103)
+
+=============================
+=     IMPROVEMENTS          =
+=============================
+
+ - Assertion failure and does not process when configuratoin file does not exist
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.18 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.18
new file mode 100644
index 0000000..b434be9
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.18
@@ -0,0 +1,27 @@
+
+Easylogging++ v9.18 RELEASE NOTES
+---------------------------------
+
+==========================
+=           FIXES        =
+==========================
+
+ - Completely dithced away QA logging even macros unusable
+ - Fixed some of verbose logging macro expansions
+
+==========================
+=       NEW FEATURES     =
+==========================
+
+ - Only allow aplha-numeric (+ some symbols) for logger names (issue #105)
+ - Case insensitive app args (issue #106)
+ - Helper to reconfigure specific level for all loggers (issue #107)
+ - DCHECK macros for debug mode checks (issue #108)
+ - Added `bool Loggers::hasLogger(const std::string&)`
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.19 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.19
new file mode 100644
index 0000000..6e4abdf
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.19
@@ -0,0 +1,17 @@
+
+Easylogging++ v9.19 RELEASE NOTES
+---------------------------------
+
+==========================
+=         FIXES          =
+==========================
+
+ - Some internal code refactor
+ - Issue with clang++ on mac fixes (issue #111)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.20 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.20
new file mode 100644
index 0000000..a2c046c
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.20
@@ -0,0 +1,18 @@
+Easylogging++ v9.20 RELEASE NOTES
+---------------------------------
+
+==========================
+=      NEW FEATURES      =
+==========================
+
+ - Introduced `el::Helpers::convertTemplateToStdString` for loggable classes (and other classes) to return `std::string` from easylogging++ friendly templates (issue #114)
+ - Introduced `el::Helpers::commandLineArgs` for reading command line arguments provided
+ - Quoted values in configurations can have double quotes by escaping them using `\` (issue #113)
+ - Helper to configure easylogging++ loggers (global conf) from command line argument (issue #115)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.21 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.21
new file mode 100644
index 0000000..b7fd3d6
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.21
@@ -0,0 +1,29 @@
+Easylogging++ v9.21 RELEASE NOTES
+---------------------------------
+
+==========================
+=       REFACTORING      =
+==========================
+
+ - Removed some unnecessary code
+ - Removed licence full detail, instead added link to it
+ - Removed unnecessary methods from VersionInfo static class, just left `version()` and `releaseDate()`
+
+==========================
+=       BUG FIXES        =
+==========================
+
+ - Configuring same logger twice loses some information (issue #116)
+
+==========================
+=     NEW FEATRUES       =
+==========================
+
+ - Added base configurations pointer to `parseFromText` same as `parseFromFile`
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.22 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.22
new file mode 100644
index 0000000..653b1ec
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.22
@@ -0,0 +1,15 @@
+Easylogging++ v9.22 RELEASE NOTES
+---------------------------------
+
+==========================
+=       REFACTORING      =
+==========================
+
+ - Declared licence as the MIT licence in top comments to avoid confusions for open-source projects
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.23 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.23
new file mode 100644
index 0000000..e0d678d
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.23
@@ -0,0 +1,27 @@
+Easylogging++ v9.23 RELEASE NOTES
+---------------------------------
+
+==========================
+=      DEPRECATED        =
+==========================
+
+ - `_ELPP_PREVENT_FATAL_ABORT` is replaced with `el::LoggingFlag::DisableApplicationAbortOnFatalLog` (issue #119)
+
+==========================
+=      NEW FEATURES      =
+==========================
+
+ - Custom installable format specifiers (issue #118)
+ - Ability to uninstall pre-rollout handler
+ - New check macros
+     - CHECK_LT (less-than)
+     - CHECK_GT (greater-than)
+     - CHECK_LE (less-than or equal)
+     - CHECK_GE (greater-than or equal)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.24 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.24
new file mode 100644
index 0000000..4280e5b
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.24
@@ -0,0 +1,23 @@
+Easylogging++ v9.24 RELEASE NOTES
+---------------------------------
+
+==========================
+=         FIXES          =
+==========================
+
+ - `strerror` CRT warning fix for VC++ when using PLOG() or any equivalent (issue# 123)
+ - Fixed `CVERBOSE_EVERY_N` resolution from `VLOG_IF` to custom logger verbose log
+
+==========================
+=       NEW FEATURES     =
+==========================
+
+ - New helper `reconfigureLogger(const std::string&, const ConfigurationType&, const std::string&)`
+ - Support for syslog (issue #120)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.25 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.25
new file mode 100644
index 0000000..9478c55
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.25
@@ -0,0 +1,39 @@
+Easylogging++ v9.25 RELEASE NOTES
+---------------------------------
+
+==========================
+=          FIXES         =
+==========================
+
+ - Month (numeric) is not correct in %datetime (issue #125)
+ - Massive improvement for each log entry (issue #124)
+ - Fix to log format like `%%logger %logger %%logger %msg`
+
+==========================
+=      NEW FEATURES      =
+==========================
+
+ - Default log file using command line args (issue #122)
+ - Introduced `LoggingFlag::ImmediateFlush` for performance imporvement (issue #127)
+ - Introduced `ConfigurationType::LogFlushThreshold` to manually specify log flush threshold (issue #126)
+ - Introduced `Logger::flush` family and `Loggers::flushAll` family of function to manually flush log files (issue #128)
+ - Introduced command line arg to enable/disable logging flag using `--logging-flags` param (issue #129)
+ - Abort warning on fatal log
+ - Renamed `TIMED_BLOCK` to `TIMED_SCOPE` and introduced new `TIMED_BLOCK` that can be used like `TIMED_BLOCK(obj, "blk") { ... }`
+ - Now aborts application on crashes etc (as opposed to `exit(status)`) and contains `status` and `reason` params to make it easy to debug using IDE like VS
+ - Introduced mor params in `el::Helpers::crashAbort` to specify the location and be helpful while debugging
+
+==========================
+=       DEPRECATED       =
+==========================
+
+ - Replaced format specifier `%log` with `%msg` (issue #131)
+ - Replaced `_ELPP_STRICT_SIZE_CHECK` macro with `LoggingFlag::StrictLogFileSizeCheck` (issue #130)
+
+==========================
+=         NOTES          =
+==========================
+
+ - As soon as you upgrade, you will want to replace existing `TIMED_BLOCK` with `TIMED_SCOPE` to prevent any undefined behaviour
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.26 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.26
new file mode 100644
index 0000000..6ee909b
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.26
@@ -0,0 +1,25 @@
+Easylogging++ v9.26 RELEASE NOTES
+---------------------------------
+
+==========================
+=      NEW FEATURES      =
+==========================
+
+ - Debug version of PLOG (issue #133)
+ - Debug version of SYSLOG
+ - Introduced `PostLogDispatchHandler` to write your own handler for any action after log is dispatched
+ - Introduced `LoggingFlag::ColoredTerminalOutput` to support colorful output if supported by terminal
+
+===========================
+=      API CHANGES        =
+===========================
+
+ - `el::base::PreRollOutHandler` has moved to `el::PreRollOutHandler`
+ - `el::base::LogMessage` has moved to `el::LogMessage`
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.27 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.27
new file mode 100644
index 0000000..441a0c8
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.27
@@ -0,0 +1,15 @@
+Easylogging++ v9.27 RELEASE NOTES
+---------------------------------
+
+=======================
+=      FIXES          =
+=======================
+
+ - Emergency fix for multiple-definition bug caused by v9.26
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.28 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.28
new file mode 100644
index 0000000..054c645
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.28
@@ -0,0 +1,15 @@
+Easylogging++ v9.28 RELEASE NOTES
+---------------------------------
+
+==========================
+=      IMPROVEMENTS      =
+==========================
+
+ - One time resolution for currentUser, currentHost and terminalSupportsColor for performance improvement
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.29 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.29
new file mode 100644
index 0000000..01ac28a
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.29
@@ -0,0 +1,15 @@
+Easylogging++ v9.29 RELEASE NOTES
+---------------------------------
+
+==========================
+=      IMPROVEMENTS      =
+==========================
+
+ - Better way to deal with PLOG and perror using PErrorWriter
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.30 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.30
new file mode 100644
index 0000000..687c1f3
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.30
@@ -0,0 +1,21 @@
+Easylogging++ v9.30 RELEASE NOTES
+---------------------------------
+
+=========================
+=        FIXES          =
+=========================
+
+ - Fixes to clang++ 3.4+
+
+=========================
+=      REFACTORING      =
+=========================
+
+ - Removed unused variable m_postStream
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.31 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.31
new file mode 100644
index 0000000..a737cb6
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.31
@@ -0,0 +1,15 @@
+Easylogging++ v9.31 RELEASE NOTES
+---------------------------------
+
+=========================
+=        FIXES          =
+=========================
+
+ - Fixes for Intel C++ after updated to g++ 4.8
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.32 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.32
new file mode 100644
index 0000000..cec373f
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.32
@@ -0,0 +1,21 @@
+Easylogging++ v9.32 RELEASE NOTES
+---------------------------------
+
+=========================
+=      NEW FEATURES     =
+=========================
+
+ - Unicode support (enabled when `_ELPP_UNICODE` is defined)
+
+=========================
+=        API CHANGES    =
+=========================
+
+ - It is recommended to use `el::base::types::ostream_t` in `el::Loggable` to make it happier with unicode
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.33 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.33
new file mode 100644
index 0000000..17fb64c
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.33
@@ -0,0 +1,15 @@
+Easylogging++ v9.33 RELEASE NOTES
+---------------------------------
+
+=========================
+=        REFACTORING    =
+=========================
+
+ - Includes <locale> only when UNICODE is enabled
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.34 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.34
new file mode 100644
index 0000000..ee48455
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.34
@@ -0,0 +1,16 @@
+Easylogging++ v9.34 RELEASE NOTES
+---------------------------------
+
+=========================
+=      FIXES            =
+=========================
+
+ - Fixes to Trackable after Unicode (this also fixes VC++ 2013 compilation)
+ - Fixes MAKE_CONTAINER_ELPP_FRIENDLY to be generic for UNICODE
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.35 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.35
new file mode 100644
index 0000000..08f4209
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.35
@@ -0,0 +1,15 @@
+Easylogging++ v9.35 RELEASE NOTES
+---------------------------------
+
+=========================
+=      FIXES            =
+=========================
+
+ - UNICODE fix for wstring operator
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.36 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.36
new file mode 100644
index 0000000..ff2c4ca
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.36
@@ -0,0 +1,22 @@
+Easylogging++ v9.36 RELEASE NOTES
+---------------------------------
+
+============================
+=      REFACTOR            =
+============================
+
+ - Happy Google C++ style guide (cpplint.py) - Lambda semi-colon and line length is left as-is
+ - API changes to use pointers instead of reference e.g, `populateAllLoggerIds(std::vector<std::string>&)` to `populateAllLoggerIds(std::vector<std::string>*)`
+
+==========================
+=        FIXES           =
+==========================
+
+ - Fixed `TIMED_BLOCK` to reflect `_ELPP_PERFORMANCE_MICROSECONDS`
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.37 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.37
new file mode 100644
index 0000000..9fce362
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.37
@@ -0,0 +1,15 @@
+Easylogging++ v9.37 RELEASE NOTES
+---------------------------------
+
+==========================
+=        FIXES           =
+==========================
+
+ - Fixed issue with EnumType and unicode (issue 137)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.38 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.38
new file mode 100644
index 0000000..4589496
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.38
@@ -0,0 +1,15 @@
+Easylogging++ v9.38 RELEASE NOTES
+---------------------------------
+
+=================================
+=        NEW FEATURES           =
+=================================
+
+ - Define `_LOGGER` before include to use specified logger, e.g, `#define _LOGGER "my_logger"`
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.39 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.39
new file mode 100644
index 0000000..e50140f
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.39
@@ -0,0 +1,15 @@
+Easylogging++ v9.39 RELEASE NOTES
+---------------------------------
+
+==============================
+=        BUG FIXES           =
+==============================
+
+ - Issue with disabling logs when using manipulators e.g, `std::endl`
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.40 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.40
new file mode 100644
index 0000000..c1cd43e
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.40
@@ -0,0 +1,23 @@
+Easylogging++ v9.40 RELEASE NOTES
+---------------------------------
+
+==============================
+=       NEW FEATURES         =
+==============================
+
+ - Default configuration getter
+ - Default typed-configuration getter
+ - Log streams reference (constant) getter for public-use
+
+==============================
+=        BUG FIXES           =
+==============================
+
+ - Issue with TIMED_FUNC (issue #139)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.41 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.41
new file mode 100644
index 0000000..b73079f
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.41
@@ -0,0 +1,15 @@
+Easylogging++ v9.41 RELEASE NOTES
+---------------------------------
+
+==============================
+=        BUG FIXES           =
+==============================
+
+ - Issue with g++ raised from version 9.4 release
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.42 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.42
new file mode 100644
index 0000000..d83caca
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.42
@@ -0,0 +1,16 @@
+Easylogging++ v9.42 RELEASE NOTES
+---------------------------------
+
+==============================
+=        BUG FIXES           =
+==============================
+
+ - Registry<>::get for VC++ does not have exception catch anymore that caused problems with CDB
+ - Issue with Visual C++ and `_ELPP_NO_DEFAULT_LOG_FILE` macro
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.43 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.43
new file mode 100644
index 0000000..3945961
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.43
@@ -0,0 +1,21 @@
+Easylogging++ v9.43 RELEASE NOTES
+---------------------------------
+
+==============================
+=       NEW FEATURES         =
+==============================
+
+ - Introduced `LOG_AFTER_N` and `LOG_N_TIMES` that works pretty much same as `LOG_EVERY_N`
+
+==============================
+=        BUG FIXES           =
+==============================
+
+ - Issue with Visual C++ and `_ELPP_NO_DEFAULT_LOG_FILE` in reconfiguring logger and flushing
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.44 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.44
new file mode 100644
index 0000000..58ab82d
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.44
@@ -0,0 +1,15 @@
+Easylogging++ v9.44 RELEASE NOTES
+---------------------------------
+
+==============================
+=        BUG FIXES           =
+==============================
+
+ - DCCHECK_NULLPTR bug fix (issue #141)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.45 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.45
new file mode 100644
index 0000000..86e5b09
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.45
@@ -0,0 +1,15 @@
+Easylogging++ v9.45 RELEASE NOTES
+---------------------------------
+
+==============================
+=        BUG FIXES           =
+==============================
+
+ - PCHECK macro bug fixes
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.46 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.46
new file mode 100644
index 0000000..21c95b3
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.46
@@ -0,0 +1,15 @@
+Easylogging++ v9.46 RELEASE NOTES
+---------------------------------
+
+==============================
+=        BUG FIXES           =
+==============================
+
+ - CHECK_EQ and CHECK_STRCASEEQ macro fixes (issue #142)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.47 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.47
new file mode 100644
index 0000000..3402f6f
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.47
@@ -0,0 +1,22 @@
+Easylogging++ v9.47 RELEASE NOTES
+---------------------------------
+
+==============================
+=        BUG FIXES           =
+==============================
+
+ - July month abbreviation fix
+ - Default date/time fix for 'PM' times
+
+========================
+=       CHANGES        =
+========================
+
+ - `Logger not registered` message now uses debug level instead of error
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.48 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.48
new file mode 100644
index 0000000..bafda12
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.48
@@ -0,0 +1,11 @@
+Easylogging++ v9.48 RELEASE NOTES
+---------------------------------
+
+==========================
+=         NOTES          =
+==========================
+
+ - Licence and copyright info update to start from 2012 to 2014
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.49 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.49
new file mode 100644
index 0000000..55d4240
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.49
@@ -0,0 +1,15 @@
+Easylogging++ v9.49 RELEASE NOTES
+---------------------------------
+
+==========================
+=     NEW FEATURES       =
+==========================
+
+ - Unregisterable loggers using Loggers::unregisterLogger(id)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.50 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.50
new file mode 100644
index 0000000..d08901d
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.50
@@ -0,0 +1,15 @@
+Easylogging++ v9.50 RELEASE NOTES
+---------------------------------
+
+=======================
+=     BUG FIXES       =
+=======================
+
+ - Issue with datetime format (%y and %Y having same behaviour) (issue #144)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.51 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.51
new file mode 100644
index 0000000..39420af
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.51
@@ -0,0 +1,15 @@
+Easylogging++ v9.51 RELEASE NOTES
+---------------------------------
+
+==========================
+=     NEW FEATURES       =
+==========================
+
+ - Add timestamp to file names in the configuration file (issue #145)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.52 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.52
new file mode 100644
index 0000000..065d993
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.52
@@ -0,0 +1,15 @@
+Easylogging++ v9.52 RELEASE NOTES
+---------------------------------
+
+=======================
+=     BUG FIXES       =
+=======================
+
+ - Bug fix from ver. 9.51 with unicode support - introduced `_ELPP_FILENAME_TIMESTAMP`
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.53 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.53
new file mode 100644
index 0000000..e24c026
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.53
@@ -0,0 +1,15 @@
+Easylogging++ v9.53 RELEASE NOTES
+---------------------------------
+
+=========================
+=     NEW FEATURES      =
+=========================
+
+ - Removed need of `_ELPP_FILENAME_TIMESTAMP` for filename timestamp
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.54 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.54
new file mode 100644
index 0000000..c3ba458
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.54
@@ -0,0 +1,15 @@
+Easylogging++ v9.54 RELEASE NOTES
+---------------------------------
+
+=========================
+=     NEW FEATURES      =
+=========================
+
+ - Ability to capture performance tracking data when performance tracking is finished (issue #148)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.55 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.55
new file mode 100644
index 0000000..711fa3f
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.55
@@ -0,0 +1,15 @@
+Easylogging++ v9.55 RELEASE NOTES
+---------------------------------
+
+=========================
+=     NEW FEATURES      =
+=========================
+
+ - FreeBSD build fix (Thanks to Yawning @ Github)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.56 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.56
new file mode 100644
index 0000000..2375100
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.56
@@ -0,0 +1,24 @@
+Easylogging++ v9.56 RELEASE NOTES
+---------------------------------
+
+=========================
+=       BUG FIXES       =
+=========================
+
+ - Issue with writing unicode characters to file (issue #151)
+ - Issue with syslog along with unicode support (issue #152)
+
+=========================
+=     NEW FEATURES      =
+=========================
+
+ - Ability to export symbols for DLL (issue #150)
+ - Ability to share logging repository (issue #153)
+ - Ability to force using standard C++ thread using `_ELPP_FORCE_USE_STD_THREAD`
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.57 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.57
new file mode 100644
index 0000000..02066ed
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.57
@@ -0,0 +1,15 @@
+Easylogging++ v9.57 RELEASE NOTES
+---------------------------------
+
+=========================
+=       BUG FIXES       =
+=========================
+
+ - Issue with multithreading and disabled logging levels (issue #155)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.58 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.58
new file mode 100644
index 0000000..b56cedf
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.58
@@ -0,0 +1,24 @@
+Easylogging++ v9.58 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: No
+
+=========================
+=       REFACTORING     =
+=========================
+
+ - Use `std::string` instead of `const char*` where it does not affect performance.
+
+=========================
+=       BUG FIXES       =
+=========================
+
+ - Thread ID resolution function returns `std::string` instead of `const char*` to prevent invalid pointers return
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.59 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.59
new file mode 100644
index 0000000..a412bf9
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.59
@@ -0,0 +1,33 @@
+Easylogging++ v9.59 RELEASE NOTES
+---------------------------------
+
+Release type: Major
+API changes: No
+
+=========================
+=       REFACTORING     =
+=========================
+
+ - Removing trailing spaces and reorder Trackable members class to avoid warning on gcc (issue 158)
+
+
+==========================
+=      NEW FEATURES      =
+==========================
+
+ - Ability to use multiple loggers to log single message (needs `_ELPP_MULTI_LOGGER_SUPPORT`) (issue #157)
+
+
+==========================
+=       BUG FIXES        =
+==========================
+
+ - Segmentation fault when running shared lib apps (issue #160)
+
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.60 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.60
new file mode 100644
index 0000000..cf6d6b6
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.60
@@ -0,0 +1,32 @@
+Easylogging++ v9.60 RELEASE NOTES
+---------------------------------
+
+Release type: Major
+API changes: No
+
+==========================
+=       NEW FEATURES     =
+==========================
+
+ - Support logging from Logger class for compilers with support for variadic templates (issue #162)
+
+==========================
+=       REFACTORING      =
+==========================
+
+ - File size cut down
+ - Changed `inline static` to `static inline` for better readability
+
+==========================
+=       BUG FIXES        =
+==========================
+
+ - Double free corrpution when sharing storage
+ - Unused variable warning on Windows regarding "nextTok_" (issue #161)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.61 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.61
new file mode 100644
index 0000000..a5cbc5a
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.61
@@ -0,0 +1,24 @@
+Easylogging++ v9.61 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: No
+
+==========================
+=          FIXES         =
+==========================
+
+ - Log functions now uses `%v` instead of `%`
+
+==========================
+=       NEW FEATURES     =
+==========================
+
+ - Type safe internal checks
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.62 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.62
new file mode 100644
index 0000000..208dba9
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.62
@@ -0,0 +1,18 @@
+Easylogging++ v9.62 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: No
+
+==========================
+=      BUG FIXES         =
+==========================
+
+ - Fix to `Logger::verbose` checking whether verbosity is on or not
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.63 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.63
new file mode 100644
index 0000000..156844a
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.63
@@ -0,0 +1,18 @@
+Easylogging++ v9.63 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: No
+
+==========================
+=      BUG FIXES         =
+==========================
+
+ - Issue with multi-threading fixed for verbose logging not on (multi-threaded applications only)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.64 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.64
new file mode 100644
index 0000000..1a4d29c
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.64
@@ -0,0 +1,56 @@
+Easylogging++ v9.64 RELEASE NOTES
+---------------------------------
+
+Release type: Major
+API changes: Yes
+
+==========================
+=      BUG FIXES         =
+==========================
+
+ - Fixes for some STL containers for unicode
+ - Sample fixes for unicode 
+ - Made `log()` private because some stuffs do not work properly (e.g, `_ELPP_{level}_LOGS` macros)
+ - Fix line number to zero when using `log()` and friend functions
+ - Fix log enabled/disabled for `_ELPP_INFO_LOG` and friends for `log()` and friends
+ - Made `Loggers::getLogger`, `Loggers::hasLogger` and `Loggers::unregisterLogger` thread-safe
+
+==========================
+=      NEW FEATURES      =
+==========================
+
+ - Ability to enable / disable hierarchical logging using `LoggingFlag::HierarchicalLogging` and `Loggers::setLoggingLevel` (issue #167)
+ - Ability to disable performance tracking dispatch by using flag `LoggingFlag::DisablePerformanceTrackingDispatch' (issue #164)
+ - Ability to check datatype for PostPerformanceTrackingData (using `PostPerformanceTrackingData::dataType()`)
+ - Added `LoggingFlag::MultiLoggerSupport` and removed `_ELPP_MULTI_LOGGER_SUPPORT` macro (issue #166)
+ - Added `LoggingFlag::PerformanceTrackingCallback` and removed need to define `_ELPP_HANDLE_POST_PERFORMANCE_TRACKING` macro (issue #166)
+ - Replaced macro `_ELPP_HANDLE_POST_LOG_DISPATCH` with `LoggingFlag::EnableLogDispatchCallback` (issue #166)
+
+==========================
+=       REFACTORING      =
+==========================
+
+ - Changed `_ELPP_DISABLE_LOGGING_FLAGS_FROM_ARG` to `_ELPP_LOGGING_FLAGS_FROM_ARG` and inverted the logic (issue #163)
+ - Renamed `Trackable` class to `PerformanceTracker` (issue #163)
+ - A lot of internal refactoring for performance and size (issue #163)
+ - Added internal error when too many arguments provided in `log()` and friends
+ - Moved `addFlag(LoggingFlag)`, `removeFlag(LoggingFlag)` and `hasFlag(LoggingFlag)` to `el::Loggers` (issue #163)
+ - Renamed following macros: (issue #163)
+     - `_ELPP_STOP_ON_FIRST_ASSERTION` to `_ELPP_DEBUG_ASSERT_FAILURE`
+     - `_ELPP_ENABLE_ERRORS` to `_ELPP_DEBUG_ERRORS`
+     - `_ELPP_ENABLE_INFO` to `_ELPP_DEBUG_INFO`
+ - Removed `_ELPP_STRICT_SIZE_CHECK` macro and left it on user to add flag `LoggingFlag::StrictLogFileSizeCheck` (issue #166)
+ - Removed `_ELPP_PERFORMANCE_DISABLE_COMPARE_CHECKPOINTS` macro and left it on user to add flag `LoggingFlag::DisablePerformanceTrackingCheckpointComparison` (issue #166)
+ - Changed handlers name: (issue #165)
+     - `PreRollOutHandler` to `PreRollOutCallback`
+     - `PostLogDispatchHandler` to `LogDispatchCallback`
+     - `PostPerformanceTrackingHandler` to `PerformanceTrackingCallback`
+ - Moved `el::api::*` to `el::*`
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.64/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.65 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.65
new file mode 100644
index 0000000..d6b599c
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.65
@@ -0,0 +1,19 @@
+Easylogging++ v9.65 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: No
+
+==========================
+=      NEW FEATURES      =
+==========================
+
+ - Ability to create loggers on the fly `LoggingFlag::CreateLoggerAutomatically`
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.65/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.66 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.66
new file mode 100644
index 0000000..762dee3
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.66
@@ -0,0 +1,25 @@
+Easylogging++ v9.66 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: No
+
+========================
+=      BUG FIXES       =
+========================
+
+ - Verbose fix when using `Logger::verbose`
+
+==========================
+=      IMPROVEMENTS      =
+==========================
+
+ - Changed `func` and `file` to `FUNCTION` and `FILE` respectively
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.66/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.67 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.67
new file mode 100644
index 0000000..a52eca0
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.67
@@ -0,0 +1,20 @@
+Easylogging++ v9.67 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: No
+
+===========================
+=      IMPROVEMENTS       =
+===========================
+
+ - Fix to file stream handling if unable to create file stream
+ - Fixed android (NDK) build warnings
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.67/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.68 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.68
new file mode 100644
index 0000000..c814b02
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.68
@@ -0,0 +1,19 @@
+Easylogging++ v9.68 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: No
+
+===========================
+=      IMPROVEMENTS       =
+===========================
+
+ - Ability to change internal debugging macro
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.68/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.69 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.69
new file mode 100644
index 0000000..5f52625
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.69
@@ -0,0 +1,20 @@
+Easylogging++ v9.69 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: Yes
+
+===========================
+=      IMPROVEMENTS       =
+===========================
+
+ - Multiple log dispatch call backs by extending `el::LogDispatchCallback`
+ - Ability to log from `el::LogDispatchCallback` with no problems with recursive calls
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.69/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.70 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.70
new file mode 100644
index 0000000..26956a4
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.70
@@ -0,0 +1,28 @@
+Easylogging++ v9.70 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: Yes
+
+===========================
+=      IMPROVEMENTS       =
+===========================
+
+ - Improvements to `PerformanceTrackingCallback` - multiple callbacks
+ - Removed ability to log from log dispatch and performance tracking callbacks since it causes issue in multi-threaded applications
+
+============================
+=        REMOVED           =
+============================
+
+ - Removed `el::LoggingFlag::EnableLogDispatchCallback` as it is always enabled now since its used internally
+ - Removed `el::LoggingFlag::DisablePerformanceTrackingDispatch` as you can do it other way (see samples)
+ - Removed `el::LoggingFlag::PerformanceTrackingCallback` as it is always enabled now since its used internally
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.70/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.71 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.71
new file mode 100644
index 0000000..2f365a6
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.71
@@ -0,0 +1,19 @@
+Easylogging++ v9.71 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: No
+
+========================
+=      BUG FIXES       =
+========================
+
+ - Fix to `PERFORMANCE_CHECKPOINT`
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.71/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.72 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.72
new file mode 100644
index 0000000..01bbb0e
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.72
@@ -0,0 +1,19 @@
+Easylogging++ v9.72 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: No
+
+========================
+=      BUG FIXES       =
+========================
+
+ - Using easylogging++ fails in conjunction with WIN32_LEAN_AND_MEAN (issue #171)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.72/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.73 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.73
new file mode 100644
index 0000000..5a7cd78
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.73
@@ -0,0 +1,19 @@
+Easylogging++ v9.73 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: No
+
+===========================
+=      NEW FEATURES       =
+===========================
+
+ - Ability to add spaces automatically (issue #179)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.73/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.74 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.74
new file mode 100644
index 0000000..86297b2
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.74
@@ -0,0 +1,27 @@
+Easylogging++ v9.74 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: No
+
+===========================
+=      NEW FEATURES       =
+===========================
+
+ - `fbase` format specifier
+ - VModule clear module function
+ - `levshort` format specifier
+
+==========================
+=      BUG FIXES         =
+==========================
+
+ - Fixes issue with `AutoSpacing` with timing facilities
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.74/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.75 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.75
new file mode 100644
index 0000000..bfc6a6b
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.75
@@ -0,0 +1,22 @@
+Easylogging++ v9.75 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: No
+
+==========================
+=      BUG FIXES         =
+==========================
+
+ - Makes Mutex non-copyable (issue #191)
+ - Fixes issue with `DefaultPerformanceTrackingCallback` (issue #190)
+ - Fix build for VS2013 under high warnings [warning level 4] (issue #194)
+ - Fixes a lot of reference to temporary warnings
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.75/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.76 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.76
new file mode 100644
index 0000000..83b19e1
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.76
@@ -0,0 +1,27 @@
+Easylogging++ v9.76 RELEASE NOTES
+---------------------------------
+
+Release type: Major
+API changes: No
+
+==========================
+=     NEW FEATURES       =
+==========================
+
+ - Experimental asynchronous logging using `_ELPP_EXPERIMENTAL_ASYNC_LOGGING` (issue #202)
+ - `CHECK_BOUNDS` macro to check boundaries (issue #204)
+
+==========================
+=     API CHANGES        =
+==========================
+
+ - `Logger::flush(Level, base::type::fstream_t)` and `Logger::isFlushNeeded(Level)` made public 
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.76/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
+ - Removed references to `easylogging.org` as site will no longer service.
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.77 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.77
new file mode 100644
index 0000000..39f41b1
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.77
@@ -0,0 +1,33 @@
+Easylogging++ v9.77 RELEASE NOTES
+---------------------------------
+
+Release type: Major
+API changes: No
+
+==========================
+=      BUG FIXES         =
+==========================
+
+ - Using _ELPP_DISABLE_ASSERT breaks config file parsing (issue #218)
+
+==========================
+=     NEW FEATURES       =
+==========================
+
+ - Support for unique unit of measure in performance tracking (issue #208)
+ - Changing default format from a more localized %d/%M/%Y to ISO 8601 standard (issue #200)
+
+==========================
+=         BUILD FIX      =
+==========================
+
+ - Warning fix for `sleep`
+
+==========================
+=         NOTES          =
+==========================
+
+ - Changed donation policy
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.77/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.78 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.78
new file mode 100644
index 0000000..51f0b22
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.78
@@ -0,0 +1,36 @@
+Easylogging++ v9.78 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: No
+
+==========================
+=     NEW FEATURES       =
+==========================
+
+ - Ability to add, clear verbose modules on the fly (issue #219)
+ - Ability to set verbose logging level on the fly (issue #238)
+ - Solaris support added
+
+==========================
+=       BUILD FIX        =
+==========================
+
+ - Warning for `nextTok_` in VS2013 (issue #237)
+
+==========================
+=        BUG FIX         =
+==========================
+
+ - `LoggingFlag::AutoSpacing` does not work with some types (issue #220)
+
+==========================
+=         NOTES          =
+==========================
+
+ - Experimental async logging only for specific compilers
+ - Removed `easyloggingpp` as namespace
+ - Changed support email address
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.78/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.79 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.79
new file mode 100644
index 0000000..3b8dcc3
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.79
@@ -0,0 +1,71 @@
+Easylogging++ v9.79 RELEASE NOTES
+---------------------------------
+
+Release type: Major
+API changes: Yes
+
+==========================
+=      NEW FEATURES      =
+==========================
+
+ - Ability to use `winsock2.h` when `ELPP_WINSOCK2` defined
+
+==========================
+=       API CHANGES      =
+==========================
+
+ - All the names starting with underscore (_) are updated to not use underscore in the beginning (issue #239)
+     - `_START_EASYLOGGINGPP` => `START_EASYLOGGINGPP`
+     - `_INITIALIZE_EASYLOGGINGPP` => `INITIALIZE_EASYLOGGINGPP`
+     - `_INITIALIZE_NULL_EASYLOGGINGPP` => `INITIALIZE_NULL_EASYLOGGINGPP`
+     - `_SHARE_EASYLOGGINGPP` => `SHARE_EASYLOGGINGPP`
+     - `_ELPP_INITI_BASIC_DECLR` => `ELPP_INITI_BASIC_DECLR`
+     - `_ELPP_INIT_EASYLOGGINGPP` => `ELPP_INIT_EASYLOGGINGPP`
+     - `_ELPP_DISABLE_DEFAULT_CRASH_HANDLING` => `ELPP_DISABLE_DEFAULT_CRASH_HANDLING`
+     - `_ELPP_DISABLE_ASSERT` => `ELPP_DISABLE_ASSERT`
+     - `_ELPP_DEBUG_ASSERT_FAILURE` => `ELPP_DEBUG_ASSERT_FAILURE`
+     - `_ELPP_STACKTRACE_ON_CRASH` => `ELPP_STACKTRACE_ON_CRASH`
+     - `_ELPP_EXPORT_SYMBOLS` => `ELPP_EXPORT_SYMBOLS`
+     - `_ELPP_AS_DLL` => `ELPP_AS_DLL`
+     - `_ELPP_FORCE_USE_STD_THREAD` => `ELPP_FORCE_USE_STD_THREAD`
+     - `_ELPP_LOGGING_FLAGS_FROM_ARG` => `ELPP_LOGGING_FLAGS_FROM_ARG`
+     - `_ELPP_DISABLE_LOGS` => `ELPP_DISABLE_LOGS`
+     - `_ELPP_DISABLE_DEBUG_LOGS` => `ELPP_DISABLE_DEBUG_LOGS`
+     - `_ELPP_DISABLE_INFO_LOGS` => `ELPP_DISABLE_INFO_LOGS`
+     - `_ELPP_DISABLE_WARNING_LOGS` => `ELPP_DISABLE_WARNING_LOGS`
+     - `_ELPP_DISABLE_ERROR_LOGS` => `ELPP_DISABLE_ERROR_LOGS`
+     - `_ELPP_DISABLE_FATAL_LOGS` => `ELPP_DISABLE_FATAL_LOGS`
+     - `_ELPP_DISABLE_TRACE_LOGS` => `ELPP_DISABLE_TRACE_LOGS`
+     - `_ELPP_DISABLE_VERBOSE_LOGS` => `ELPP_DISABLE_VERBOSE_LOGS`
+     - `_ELPP_SYSLOG` => `ELPP_SYSLOG`
+     - `_INIT_SYSLOG` => `ELPP_INITIALIZE_SYSLOG`
+     - `_ELPP_UNICODE` => `ELPP_UNICODE`
+     - `_ELPP_EXPERIMENTAL_ASYNC` => `ELPP_EXPERIMENTAL_ASYNC`
+     - `_ELPP_THREAD_SAFE` => `ELPP_THREAD_SAFE`
+     - `_ELPP_STL_LOGGING` => `ELPP_STL_LOGGING`
+     - `_ELPP_LOG_STD_ARRAY` => `ELPP_LOG_STD_ARRAY`
+     - `_ELPP_LOG_UNORDERED_MAP` => `ELPP_LOG_UNORDERED_MAP`
+     - `_ELPP_LOG_UNORDERED_MAP` => `ELPP_LOG_UNORDERED_SET`
+     - `_ELPP_QT_LOGGING` => `ELPP_QT_LOGGING`
+     - `_ELPP_BOOST_LOGGING` => `ELPP_BOOST_LOGGING`
+     - `_ELPP_WXWIDGETS_LOGGING` => `ELPP_WXWIDGETS_LOGGING`
+     - `_ELPP_DEFAULT_LOG_FILE` => `ELPP_DEFAULT_LOG_FILE`
+     - `_ELPP_DISABLE_LOG_FILE_FROM_ARG` => `ELPP_DISABLE_LOG_FILE_FROM_ARG`
+     - `_ELPP_DEFAULT_LOG_FILE` => `ELPP_DEFAULT_LOG_FILE`
+     - `_ELPP_DISABLE_PERFORMANCE_TRACKING` => `ELPP_DISABLE_PERFORMANCE_TRACKING`
+     - `_CURRENT_FILE_PERFORMANCE_LOGGER_ID` => `ELPP_CURR_FILE_PERFORMANCE_LOGGER`
+     - `_ELPP_DISABLE_CONFIGURATION_FROM_PROGRAM_ARGS` => `ELPP_DISABLE_CONFIGURATION_FROM_PROGRAM_ARGS`
+     - `_ELPP_PERFORMANCE_MICROSECONDS` => `ELPP_PERFORMANCE_MICROSECONDS`
+     - `_CURRENT_FILE_LOGGER_ID` => `ELPP_DEFAULT_LOGGER`
+     - `_ELPP_NO_DEFAULT_LOG_FILE` => `ELPP_NO_DEFAULT_LOG_FILE`
+     - `_ELPP_FORCE_ENV_VAR_FROM_BASH` => `ELPP_FORCE_ENV_VAR_FROM_BASH`
+     - `_ELPP_DISABLE_CUSTOM_FORMAT_SPECIFIERS` => `ELPP_DISABLE_CUSTOM_FORMAT_SPECIFIERS`
+     - `_ELPP_HANDLE_SIGABRT` => `ELPP_HANDLE_SIGABRT`
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.79/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.80 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.80
new file mode 100644
index 0000000..d937812
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.80
@@ -0,0 +1,15 @@
+Easylogging++ v9.80 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: No
+
+==========================
+=         NOTES          =
+==========================
+
+ - Licence update
+ - Email update
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.80/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.81 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.81
new file mode 100644
index 0000000..e03dd20
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.81
@@ -0,0 +1,37 @@
+Easylogging++ v9.81 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: No
+
+==========================
+=      BUILD FIX         =
+==========================
+
+ - Fix with `-Wundef` compiler flag (issue #221)
+ - Fix with `-Wswitch-default` compiler flag (issue #221)
+ - Warning fix for some unused variables
+ - syslog constant is no longer defined unless `ELPP_SYSLOG` is defined
+ - use unistd.h -> usleep for async if `std::this_thread::sleep_for` not available by defining `ELPP_NO_SLEEP_FOR` (Only async logging)
+ - Fixes `std::move` obsolete warning for clang++ 3.7 (issue #315)
+ - Crash on exit for some platforms when CTRL+C pressed (issue #261)
+ - Warning fix with clang3.7 (issue #335)
+
+==========================
+=      NEW FEATURES      =
+==========================
+
+ - `ELPP_CUSTOM_COUT` to define custom standard output (e.g, `std::cerr`) (issue #201)`
+ - More terminal colors (for INFO, DEBUG and TRACE logs)
+ - CHECK_NOTNULL for smart pointers (issue #334)
+ - ELPP_FRESH_LOG_FILE to always start new log file (issue #384)
+
+==========================
+=         NOTES          =
+==========================
+
+ - CHECK_NOTNULL does not return pointer anymore instead a simple check
+ - New sample for log rotation added
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.81/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.82 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.82
new file mode 100644
index 0000000..e581d01
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.82
@@ -0,0 +1,19 @@
+Easylogging++ v9.82 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: No
+
+==========================
+=      BUILD FIX         =
+==========================
+
+ - Crash fix with visual C++ (issue #391)
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.82/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.83 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.83
new file mode 100644
index 0000000..29e7cd4
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.83
@@ -0,0 +1,14 @@
+Easylogging++ v9.83 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: No
+
+==========================
+=         NOTES          =
+==========================
+
+ - Fixes version number. Please see previous release notes for actual releases
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.83/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.84 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.84
new file mode 100644
index 0000000..91dac75
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.84
@@ -0,0 +1,14 @@
+Easylogging++ v9.84 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: No
+
+==========================
+=         NOTES          =
+==========================
+
+ - Fixes build for xcode
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.84/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.85 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.85
new file mode 100644
index 0000000..b7d35ae
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.85
@@ -0,0 +1,32 @@
+Easylogging++ v9.85 RELEASE NOTES
+---------------------------------
+
+Release type: Major
+API changes: No
+Breaking Change: Yes
+  - Performance tracker changed from object to pointer
+
+==========================
+=         FIXES          =
+==========================
+
+ - C++17 Build fix
+ - Initialize uninitialized variables (cppcheck)
+ - Do not create any file when using `ELPP_NO_LOG_TO_FILE`
+ - Fix bad memory access before opening any files
+ - Documentation updated and fixed typos
+ 
+==========================
+=      NEW FEATURES      =
+==========================
+
+ - Added conditional performance tracking via TIMED_FUNC_IF and TIMED_SCOPE_IF (#415)
+
+==========================
+=         NOTES          =
+==========================
+
+ - Licence update
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.85/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.86 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.86
new file mode 100644
index 0000000..1023ecc
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.86
@@ -0,0 +1,29 @@
+Easylogging++ v9.86 RELEASE NOTES
+---------------------------------
+
+Release type: Major
+API changes: No
+Breaking Change: Yes
+
+==========================
+=      NEW FEATURES      =
+==========================
+
+ - Stack trace and crash report now requires `ELPP_FEATURE_CRASH_LOG` macro (#409)
+ - Performance tracking now requires `ELPP_PERFORMANCE_TRACKING` macro defined (#409)
+ - do(something) || LOG(DEBUG) idiom (#426)
+
+==========================
+=         FIXES          =
+==========================
+
+ - Do not create default file when using `ELPP_NO_LOG_TO_FILE` (completely fixed)
+ 
+==========================
+=         NOTES          =
+==========================
+
+ - Licence now included in releases
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.86/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.87 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.87
new file mode 100644
index 0000000..ac67e67
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.87
@@ -0,0 +1,20 @@
+Easylogging++ v9.87 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: No
+Breaking Change: No
+
+==========================
+=      NEW FEATURES      =
+==========================
+
+ - do(something) || LOG(LEVEL) idiom for `LOG_EVERY_N`, `LOG_AFTER_N` and family
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.87/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.88 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.88
new file mode 100644
index 0000000..f27a5e2
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.88
@@ -0,0 +1,21 @@
+Easylogging++ v9.88 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: No
+Breaking Change: No
+
+==========================
+=        INTERNAL        =
+==========================
+
+ - Some type refactors for better results
+ - Exposing some functions for external use
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.88/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.89 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.89
new file mode 100644
index 0000000..01f3ad2
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.89
@@ -0,0 +1,20 @@
+Easylogging++ v9.89 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: Yes
+Breaking Change: No
+
+==========================
+=      NEW FEATURES      =
+==========================
+
+ - New `LoggerRegistrationCallback` API to view / update newly registered loggers
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.89/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.90 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.90
new file mode 100644
index 0000000..86e8798
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.90
@@ -0,0 +1,34 @@
+Easylogging++ v9.90 RELEASE NOTES
+---------------------------------
+
+Release type: Major
+API changes: Yes
+Breaking Change: Yes
+
+This is a major release. We have separated header file in to `easylogging++.h` and `easylogging++.cc`. Source file (`easylogging++.cc`) encompass source to speed up compile time. Thanks to @aparajita.
+
+==========================
+=         FIXES          =
+==========================
+
+ - Fix to custom datetime format in Unicode mode
+
+==========================
+=      NEW FEATURES      =
+==========================
+
+ - The `FormatSpecifierValueResolver` function passed to the `CustomFormatSpecifier` constructor
+   now receives `const LogMessage&` as an argument. This allows you to access message-specific context
+   (such as the verbose level) within your custom formatting function. For an example, see
+   samples/STL/custom-format-spec.cpp.
+ - Separated header and source file (`easylogging++.h` and `easylogging++.cc`) (issue #445)
+ - New `ELPP_DEFAULT_LOGGING_FLAGS` macro for setting initial logging flags
+ - C++11 detection is improved, and Clang uses `std::thread` by default if it is available
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.90/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.91 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.91
new file mode 100644
index 0000000..6990962
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.91
@@ -0,0 +1,21 @@
+Easylogging++ v9.91 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: No
+Breaking Change: No
+
+==========================
+=       NEW FEATURES     =
+==========================
+
+ - Deprecated MILLISECONDS_WIDTH and introduced SUBSECOND_PRECISION
+
+==========================
+=         NOTES          =
+==========================
+
+ - Eased some internal locks around callbacks
+ - See https://github.com/easylogging/easyloggingpp/blob/v9.91/README.md for manual for this release
+ - See https://github.com/easylogging/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/easylogging/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.92 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.92
new file mode 100644
index 0000000..3ed165d
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.92
@@ -0,0 +1,15 @@
+Easylogging++ v9.92 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: No
+Breaking Change: No
+
+==========================
+=         NOTES          =
+==========================
+
+ - Updated github repo
+ - See https://github.com/muflihun/easyloggingpp/blob/v9.92/README.md for manual for this release
+ - See https://github.com/muflihun/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/muflihun/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.93 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.93
new file mode 100644
index 0000000..00494e0
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.93
@@ -0,0 +1,28 @@
+Easylogging++ v9.93 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: No
+Breaking Change: No
+
+==========================
+=         FIXES          =
+==========================
+
+ - Multithread storage lock fix
+ - Dead lock fixes (#417) Thanks to @aparajita for tip
+
+==========================
+=        FEATURES        =
+==========================
+
+ - Set thread names using new helper `Helpers::setThreadName` and print using new format specifier `%thread_name`
+ - A lot of sample clean up and fixed
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/muflihun/easyloggingpp/blob/9.93/README.md for manual for this release
+ - See https://github.com/muflihun/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/muflihun/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.94 b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.94
new file mode 100644
index 0000000..f47ec92
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/doc/RELEASE-NOTES-v9.94
@@ -0,0 +1,29 @@
+Easylogging++ v9.94 RELEASE NOTES
+---------------------------------
+
+Release type: Minor
+API changes: No
+Breaking Change: No
+
+==========================
+=         FIXES          =
+==========================
+
+ - Fixed performance tracking time unit and calculations
+
+==========================
+=        FEATURES        =
+==========================
+
+ - Restored `ELPP_DEFAULT_LOGGER` and `ELPP_DEFAULT_PERFORMANCE_LOGGER`
+ - Helpers::getThreadName for reading current thread's name
+ - Custom format specifier now has to return `std::string` instead
+ - Merged `thread_name` with `thread` if thread name is available it's used otherwise ID is displayed
+
+==========================
+=         NOTES          =
+==========================
+
+ - See https://github.com/muflihun/easyloggingpp/blob/9.93/README.md for manual for this release
+ - See https://github.com/muflihun/easyloggingpp/tree/master/doc for other release notes
+ - Closed issues: https://github.com/muflihun/easyloggingpp/issues?page=1&state=closed
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/.gitignore b/vendor/github.com/muflihun/easyloggingpp/samples/.gitignore
new file mode 100644
index 0000000..36f971e
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/.gitignore
@@ -0,0 +1 @@
+bin/*
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/API/.gitignore b/vendor/github.com/muflihun/easyloggingpp/samples/API/.gitignore
new file mode 100644
index 0000000..6a88a81
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/API/.gitignore
@@ -0,0 +1,2 @@
+bin/*
+logs/*
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/API/build_all.sh b/vendor/github.com/muflihun/easyloggingpp/samples/API/build_all.sh
new file mode 100755
index 0000000..54552e8
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/API/build_all.sh
@@ -0,0 +1,15 @@
+
+# Builds all files into bin/
+
+[ -d "bin" ] || mkdir "bin"
+rm -rf bin/*
+
+find . -maxdepth 1 -type f -name '*.cpp' -exec sh compile.sh {} $1 \;
+echo "Completed!"
+
+files=$(ls -l bin/)
+if [ "$files" = "total 0" ];then
+  exit 1
+else
+  exit 0
+fi
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/API/compile.sh b/vendor/github.com/muflihun/easyloggingpp/samples/API/compile.sh
new file mode 100755
index 0000000..c3dfd6b
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/API/compile.sh
@@ -0,0 +1,35 @@
+## Helper script for build_all.sh
+
+FILE=$1
+
+macro="$macro -DELPP_THREAD_SAFE"
+macro="$macro -DELPP_STL_LOGGING"
+macro="$macro -DELPP_LOG_UNORDERED_SET"
+macro="$macro -DELPP_LOG_UNORDERED_MAP"
+macro="$macro -DELPP_FEATURE_CRASH_LOG"
+macro="$macro -DELPP_FEATURE_ALL"
+
+if [ "$2" = "" ];then
+  COMPILER=g++
+else
+  COMPILER=$2
+fi
+
+CXX_STD='-std=c++0x -pthread'
+
+if [ "$FILE" = "" ]; then
+  echo "Please provide filename to compile"
+  exit
+fi
+
+echo "Compiling... [$FILE]"
+
+COMPILE_LINE="$COMPILER $FILE easylogging++.cc -o bin/$FILE.bin $macro $CXX_STD -Wall -Wextra -pedantic -pedantic-errors -Werror -Wfatal-errors"
+
+echo "    $COMPILE_LINE"
+
+$($COMPILE_LINE)
+
+echo "    DONE! [./bin/$FILE.bin]"
+echo
+echo
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/API/easylogging++.cc b/vendor/github.com/muflihun/easyloggingpp/samples/API/easylogging++.cc
new file mode 100644
index 0000000..2386848
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/API/easylogging++.cc
@@ -0,0 +1 @@
+#include "../../src/easylogging++.cc"
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/API/easylogging++.h b/vendor/github.com/muflihun/easyloggingpp/samples/API/easylogging++.h
new file mode 100644
index 0000000..a2c8ee8
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/API/easylogging++.h
@@ -0,0 +1,5 @@
+// Header for sample that sub-includes original header from src/ folder
+#ifndef EASYLOGGING_FOR_SAMPLES_H
+#define EASYLOGGING_FOR_SAMPLES_H
+#include "../../src/easylogging++.h"
+#endif // EASYLOGGING_FOR_SAMPLES_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/API/logbuilder.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/API/logbuilder.cpp
new file mode 100644
index 0000000..8e26342
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/API/logbuilder.cpp
@@ -0,0 +1,33 @@
+ //
+ // This file is part of Easylogging++ samples
+ // Simple custom log builder
+ //
+ // Revision 1.0
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+/// @brief Not a very fast log builder but good enough for sample
+class MyLogBuilder : public el::LogBuilder {
+public:
+    std::string build(const el::LogMessage* logMessage, bool appendNewLine) const {
+        std::stringstream str;
+        str << logMessage->message();
+        if (appendNewLine) str << "\n";
+        return str.str().c_str();
+    }
+};
+
+int main(void) {
+    el::LogBuilderPtr myLogBuilder = el::LogBuilderPtr(new MyLogBuilder());
+    el::Loggers::getLogger("default")->setLogBuilder(myLogBuilder);
+    LOG(INFO) << "message from default logger";
+
+    el::Loggers::getLogger("new_logger");
+    CLOG(INFO, "new_logger") << "message from new_logger logger";
+
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/API/run.sh b/vendor/github.com/muflihun/easyloggingpp/samples/API/run.sh
new file mode 100755
index 0000000..9d58af1
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/API/run.sh
@@ -0,0 +1,4 @@
+echo "Running '$1'..."
+./$1
+echo "Finished '$1'"
+echo
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/API/run_all.sh b/vendor/github.com/muflihun/easyloggingpp/samples/API/run_all.sh
new file mode 100755
index 0000000..282b11a
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/API/run_all.sh
@@ -0,0 +1,3 @@
+## Runs all the build binaries from bin/ folder
+
+find bin/ -name '*.cpp.bin' -exec sh ./run.sh ./{} \;
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/MinGW/.gitignore b/vendor/github.com/muflihun/easyloggingpp/samples/MinGW/.gitignore
new file mode 100644
index 0000000..ea67ead
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/MinGW/.gitignore
@@ -0,0 +1,2 @@
+logs/*
+*.exe
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/MinGW/compile.bat b/vendor/github.com/muflihun/easyloggingpp/samples/MinGW/compile.bat
new file mode 100644
index 0000000..cf9103e
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/MinGW/compile.bat
@@ -0,0 +1,5 @@
+echo Assuming C:\MinGW for MinGW
+
+set path=%path%;C:\MinGW\bin\
+
+"C:\MinGW\bin\g++.exe" -o prog.exe prog.cpp easylogging++.cc -std=c++11 -DELPP_FEATURE_ALL
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/MinGW/easylogging++.cc b/vendor/github.com/muflihun/easyloggingpp/samples/MinGW/easylogging++.cc
new file mode 100644
index 0000000..2386848
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/MinGW/easylogging++.cc
@@ -0,0 +1 @@
+#include "../../src/easylogging++.cc"
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/MinGW/easylogging++.h b/vendor/github.com/muflihun/easyloggingpp/samples/MinGW/easylogging++.h
new file mode 100644
index 0000000..a2c8ee8
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/MinGW/easylogging++.h
@@ -0,0 +1,5 @@
+// Header for sample that sub-includes original header from src/ folder
+#ifndef EASYLOGGING_FOR_SAMPLES_H
+#define EASYLOGGING_FOR_SAMPLES_H
+#include "../../src/easylogging++.h"
+#endif // EASYLOGGING_FOR_SAMPLES_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/MinGW/prog.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/MinGW/prog.cpp
new file mode 100644
index 0000000..e75d0df
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/MinGW/prog.cpp
@@ -0,0 +1,21 @@
+#define ELPP_STL_LOGGING
+// #define ELPP_FEATURE_CRASH_LOG -- Stack trace not available for MinGW GCC
+#define ELPP_PERFORMANCE_MICROSECONDS
+#define ELPP_LOG_STD_ARRAY
+#define ELPP_LOG_UNORDERED_MAP
+#define ELPP_UNORDERED_SET
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+TIMED_SCOPE(appTimer, "myapplication");
+
+
+int main(int argc, const char* argv[]) {
+    el::Loggers::removeFlag(el::LoggingFlag::AllowVerboseIfModuleNotSpecified);
+
+    TIMED_BLOCK(itr, "write-simple") {
+        LOG(INFO) << "Test " << __FILE__;
+    }
+    VLOG(3) << "Test";
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/.gitignore b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/.gitignore
new file mode 100644
index 0000000..6a88a81
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/.gitignore
@@ -0,0 +1,2 @@
+bin/*
+logs/*
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/Cube/.gitignore b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/Cube/.gitignore
new file mode 100644
index 0000000..6a88a81
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/Cube/.gitignore
@@ -0,0 +1,2 @@
+bin/*
+logs/*
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/Cube/LICENCE b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/Cube/LICENCE
new file mode 100644
index 0000000..6e21d24
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/Cube/LICENCE
@@ -0,0 +1,21 @@
+  Permission is hereby granted, free of charge, to any person obtaining a copy
+  of this software and associated documentation files (the "Software"), to deal
+  in the Software without restriction, including without limitation the rights
+  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+  copies of the Software, and to permit persons to whom the Software is
+  furnished to do so, subject to the following conditions:
+  
+  The above notice and this permission notice shall be included in all copies
+  or substantial portions of the Software.
+  
+  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+  SOFTWARE.
+ 
+ File for "Putting It All Together" lesson of the OpenGL tutorial on
+  www.videotutorialsrock.com
+ 
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/Cube/Makefile b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/Cube/Makefile
new file mode 100644
index 0000000..32c8cac
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/Cube/Makefile
@@ -0,0 +1,19 @@
+CC = g++
+CFLAGS = -Wall -std=c++11
+PROG = cube
+
+SRCS = main.cpp imageloader.cpp
+
+ifeq ($(shell uname),Darwin)
+	LIBS = -framework OpenGL -framework GLUT
+else
+	LIBS = -lglut -lGLU -lGL
+endif
+
+all: $(PROG)
+
+$(PROG):	$(SRCS)
+	$(CC) $(CFLAGS) -o bin/$(PROG) $(SRCS) $(LIBS)
+
+clean:
+	rm -f $(PROG)
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/Cube/imageloader.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/Cube/imageloader.cpp
new file mode 100644
index 0000000..96bb458
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/Cube/imageloader.cpp
@@ -0,0 +1,188 @@
+#include <assert.h>
+#include <fstream>
+
+#include "imageloader.h"
+#include "../easylogging++.h"
+
+using namespace std;
+
+Image::Image(char* ps, int w, int h) : pixels(ps), width(w), height(h) {
+    VLOG(2) << "Constructing Image object [" << w << " x " << h << "]";
+}
+
+Image::~Image() {
+    VLOG(2) << "Destroying image object...";
+    delete[] pixels;
+}
+
+namespace {
+    //Converts a four-character array to an integer, using little-endian form
+    int toInt(const char* bytes) {
+        VLOG(2) << "Converting bytes to int";
+        return (int)(((unsigned char)bytes[3] << 24) |
+                     ((unsigned char)bytes[2] << 16) |
+                     ((unsigned char)bytes[1] << 8) |
+                     (unsigned char)bytes[0]);
+    }
+    
+    //Converts a two-character array to a short, using little-endian form
+    short toShort(const char* bytes) {
+        VLOG(2) << "Converting bytes to short";
+        return (short)(((unsigned char)bytes[1] << 8) |
+                       (unsigned char)bytes[0]);
+    }
+    
+    //Reads the next four bytes as an integer, using little-endian form
+    int readInt(ifstream &input) {
+        VLOG(2) << "Reading input as int...";
+        char buffer[4];
+        input.read(buffer, 4);
+        return toInt(buffer);
+    }
+    
+    //Reads the next two bytes as a short, using little-endian form
+    short readShort(ifstream &input) {
+        VLOG(2) << "Reading input as short...";
+        char buffer[2];
+        input.read(buffer, 2);
+        return toShort(buffer);
+    }
+    
+    //Just like auto_ptr, but for arrays
+    template<class T>
+    class auto_array {
+        private:
+            T* array;
+            mutable bool isReleased;
+        public:
+            explicit auto_array(T* array_ = NULL) :
+                array(array_), isReleased(false) {
+                VLOG(2) << "Creating auto_array";
+            }
+            
+            auto_array(const auto_array<T> &aarray) {
+                VLOG(2) << "Copying auto_array";
+                array = aarray.array;
+                isReleased = aarray.isReleased;
+                aarray.isReleased = true;
+            }
+            
+            ~auto_array() {
+                VLOG(2) << "Destroying auto_array";
+                if (!isReleased && array != NULL) {
+                    delete[] array;
+                }
+            }
+            
+            T* get() const {
+                return array;
+            }
+            
+            T &operator*() const {
+                return *array;
+            }
+            
+            void operator=(const auto_array<T> &aarray) {
+                if (!isReleased && array != NULL) {
+                    delete[] array;
+                }
+                array = aarray.array;
+                isReleased = aarray.isReleased;
+                aarray.isReleased = true;
+            }
+            
+            T* operator->() const {
+                return array;
+            }
+            
+            T* release() {
+                isReleased = true;
+                return array;
+            }
+            
+            void reset(T* array_ = NULL) {
+                if (!isReleased && array != NULL) {
+                    delete[] array;
+                }
+                array = array_;
+            }
+            
+            T* operator+(int i) {
+                return array + i;
+            }
+            
+            T &operator[](int i) {
+                return array[i];
+            }
+    };
+}
+
+Image* loadBMP(const char* filename) {
+    VLOG(1) << "Loading bitmap [" << filename << "]";
+    ifstream input;
+    input.open(filename, ifstream::binary);
+    CHECK(!input.fail()) << "Could not find file";
+    char buffer[2];
+    input.read(buffer, 2);
+    CHECK(buffer[0] == 'B' && buffer[1] == 'M') << "Not a bitmap file";
+    input.ignore(8);
+    int dataOffset = readInt(input);
+    
+    //Read the header
+    int headerSize = readInt(input);
+    int width;
+    int height;
+    switch(headerSize) {
+        case 40:
+            //V3
+            width = readInt(input);
+            height = readInt(input);
+            input.ignore(2);
+            CHECK_EQ(readShort(input), 24) << "Image is not 24 bits per pixel";
+            CHECK_EQ(readShort(input), 0) << "Image is compressed";
+            break;
+        case 12:
+            //OS/2 V1
+            width = readShort(input);
+            height = readShort(input);
+            input.ignore(2);
+            CHECK_EQ(readShort(input), 24) << "Image is not 24 bits per pixel";
+            break;
+        case 64:
+            //OS/2 V2
+            LOG(FATAL) << "Can't load OS/2 V2 bitmaps";
+            break;
+        case 108:
+            //Windows V4
+            LOG(FATAL) << "Can't load Windows V4 bitmaps";
+            break;
+        case 124:
+            //Windows V5
+            LOG(FATAL) << "Can't load Windows V5 bitmaps";
+            break;
+        default:
+            LOG(FATAL) << "Unknown bitmap format";
+    }
+    //Read the data
+    VLOG(1) << "Reading bitmap data";
+    int bytesPerRow = ((width * 3 + 3) / 4) * 4 - (width * 3 % 4);
+    int size = bytesPerRow * height;
+    VLOG(1) << "Size of bitmap is [" << bytesPerRow << " x " << height << " = " << size;
+    auto_array<char> pixels(new char[size]);
+    input.seekg(dataOffset, ios_base::beg);
+    input.read(pixels.get(), size);
+    
+    //Get the data into the right format
+    auto_array<char> pixels2(new char[width * height * 3]);
+    for(int y = 0; y < height; y++) {
+        for(int x = 0; x < width; x++) {
+            for(int c = 0; c < 3; c++) {
+                pixels2[3 * (width * y + x) + c] =
+                    pixels[bytesPerRow * y + 3 * x + (2 - c)];
+            }
+        }
+    }
+    
+    input.close();
+    return new Image(pixels2.release(), width, height);
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/Cube/imageloader.h b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/Cube/imageloader.h
new file mode 100644
index 0000000..2752c72
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/Cube/imageloader.h
@@ -0,0 +1,23 @@
+#ifndef IMAGE_LOADER_H_INCLUDED
+#define IMAGE_LOADER_H_INCLUDED
+
+//Represents an image
+class Image {
+    public:
+        Image(char* ps, int w, int h);
+        ~Image();
+        
+        /* An array of the form (R1, G1, B1, R2, G2, B2, ...) indicating the
+         * color of each pixel in image.  Color components range from 0 to 255.
+         * The array starts the bottom-left pixel, then moves right to the end
+         * of the row, then moves up to the next column, and so on.  This is the
+         * format in which OpenGL likes images.
+         */
+        char* pixels;
+        int width;
+        int height;
+};
+
+//Reads a bitmap image from file.
+Image* loadBMP(const char* filename);
+#endif
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/Cube/main.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/Cube/main.cpp
new file mode 100644
index 0000000..f926045
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/Cube/main.cpp
@@ -0,0 +1,193 @@
+
+#include <iostream>
+#include <stdlib.h>
+
+#ifdef __APPLE__
+#   include <OpenGL/OpenGL.h>
+#   include <GLUT/glut.h>
+#else
+#   include <GL/glut.h>
+#endif
+#include "../easylogging++.h"
+
+#include "imageloader.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+using namespace std;
+
+const float BOX_SIZE = 7.0f; //The length of each side of the cube
+float _angle = 0;            //The rotation of the box
+GLuint _textureId;           //The OpenGL id of the texture
+
+void handleKeypress(unsigned char key, int x, int y) {
+    switch (key) {
+        case 27: //Escape key
+            exit(0);
+    }
+}
+
+//Makes the image into a texture, and returns the id of the texture
+GLuint loadTexture(Image* image) {
+    VLOG(1) << "Loading texture from image...";
+    GLuint textureId;
+    glGenTextures(1, &textureId);
+    glBindTexture(GL_TEXTURE_2D, textureId);
+    glTexImage2D(GL_TEXTURE_2D,
+                 0,
+                 GL_RGB,
+                 image->width, image->height,
+                 0,
+                 GL_RGB,
+                 GL_UNSIGNED_BYTE,
+                 image->pixels);
+    return textureId;
+}
+
+void initRendering() {
+    VLOG(1) << "Initializing rendering";
+    glEnable(GL_DEPTH_TEST);
+    glEnable(GL_LIGHTING);
+    glEnable(GL_LIGHT0);
+    glEnable(GL_NORMALIZE);
+    glEnable(GL_COLOR_MATERIAL);
+    
+    Image* image = loadBMP("vtr.bmp");
+    _textureId = loadTexture(image);
+    delete image;
+}
+
+void handleResize(int w, int h) {
+    VLOG(1) << "Resizing to [" << w << " x " << h << "]";
+    glViewport(0, 0, w, h);
+    glMatrixMode(GL_PROJECTION);
+    glLoadIdentity();
+    gluPerspective(45.0, (float)w / (float)h, 1.0, 200.0);
+}
+
+void drawScene() {
+    VLOG(3) << "Drawing scene...";
+    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+    
+    glMatrixMode(GL_MODELVIEW);
+    glLoadIdentity();
+    
+    glTranslatef(0.0f, 0.0f, -20.0f);
+    
+    GLfloat ambientLight[] = {0.3f, 0.3f, 0.3f, 1.0f};
+    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight);
+    
+    GLfloat lightColor[] = {0.7f, 0.7f, 0.7f, 1.0f};
+    GLfloat lightPos[] = {-2 * BOX_SIZE, BOX_SIZE, 4 * BOX_SIZE, 1.0f};
+    glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor);
+    glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
+    
+    glRotatef(-_angle, 1.0f, 1.0f, 0.0f);
+    
+    glBegin(GL_QUADS);
+    
+    //Top face
+    glColor3f(1.0f, 1.0f, 0.0f);
+    glNormal3f(0.0, 1.0f, 0.0f);
+    glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
+    glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
+    glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
+    glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
+    
+    //Bottom face
+    glColor3f(1.0f, 0.0f, 1.0f);
+    glNormal3f(0.0, -1.0f, 0.0f);
+    glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
+    glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
+    glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
+    glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
+    
+    //Left face
+    glNormal3f(-1.0, 0.0f, 0.0f);
+    glColor3f(0.0f, 1.0f, 1.0f);
+    glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
+    glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
+    glColor3f(0.0f, 0.0f, 1.0f);
+    glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
+    glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
+    
+    //Right face
+    glNormal3f(1.0, 0.0f, 0.0f);
+    glColor3f(1.0f, 0.0f, 0.0f);
+    glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
+    glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
+    glColor3f(0.0f, 1.0f, 0.0f);
+    glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
+    glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
+    
+    glEnd();
+    
+    glEnable(GL_TEXTURE_2D);
+    glBindTexture(GL_TEXTURE_2D, _textureId);
+    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+    glColor3f(1.0f, 1.0f, 1.0f);
+    glBegin(GL_QUADS);
+    
+    //Front face
+    glNormal3f(0.0, 0.0f, 1.0f);
+    glTexCoord2f(0.0f, 0.0f);
+    glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
+    glTexCoord2f(1.0f, 0.0f);
+    glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
+    glTexCoord2f(1.0f, 1.0f);
+    glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
+    glTexCoord2f(0.0f, 1.0f);
+    glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
+    
+    //Back face
+    glNormal3f(0.0, 0.0f, -1.0f);
+    glTexCoord2f(0.0f, 0.0f);
+    glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
+    glTexCoord2f(1.0f, 0.0f);
+    glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
+    glTexCoord2f(1.0f, 1.0f);
+    glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
+    glTexCoord2f(0.0f, 1.0f);
+    glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
+    
+    glEnd();
+    glDisable(GL_TEXTURE_2D);
+    
+    glutSwapBuffers();
+}
+
+//Called every 25 milliseconds
+void update(int value) {
+    _angle += 1.0f;
+    if (_angle > 360) {
+        _angle -= 360;
+    }
+    VLOG(3) << "Updating ... [angle: " << _angle << "]";
+    glutPostRedisplay();
+    glutTimerFunc(25, update, 0);
+}
+
+int main(int argc, char** argv) {
+
+    START_EASYLOGGINGPP(argc, argv);
+
+    LOG(INFO) << "Source base taken from http://www.muflihun.com";
+
+    LOG_IF(!VLOG_IS_ON(1), INFO) << "Try using --v=1 or --v=2 or --verbose command line arguments as well";
+
+    glutInit(&argc, argv);
+    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
+    glutInitWindowSize(400, 400);
+    
+    glutCreateWindow("Great Cube Sample");
+    initRendering();
+    
+    glutDisplayFunc(drawScene);
+    glutKeyboardFunc(handleKeypress);
+    glutReshapeFunc(handleResize);
+    glutTimerFunc(25, update, 0);
+    
+    glutMainLoop();
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/Cube/vtr.bmp b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/Cube/vtr.bmp
new file mode 100644
index 0000000..e567731
Binary files /dev/null and b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/Cube/vtr.bmp differ
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/basic.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/basic.cpp
new file mode 100644
index 0000000..02229e7
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/basic.cpp
@@ -0,0 +1,12 @@
+#include <GL/gl.h>
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(void) {
+
+    GLfloat f = 0.1f;
+    LOG(INFO) << f;
+
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/build_all.sh b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/build_all.sh
new file mode 100755
index 0000000..4e697ee
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/build_all.sh
@@ -0,0 +1,15 @@
+
+# Builds all files into bin/
+
+[ -d "bin" ] || mkdir "bin"
+rm -rf bin/*
+
+find -maxdepth 1 -type f -name '*.cpp' -exec sh compile.sh {} $1 \;
+echo "Completed!"
+
+files=$(ls -l bin/)
+if [ "$files" = "total 0" ];then
+  exit 1
+else
+  exit 0
+fi
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/compile.sh b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/compile.sh
new file mode 100755
index 0000000..8957ba8
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/compile.sh
@@ -0,0 +1,36 @@
+## Helper script for build_all.sh
+
+FILE=$1
+
+macro="$macro -DELPP_THREAD_SAFE"
+macro="$macro -DELPP_STL_LOGGING"
+macro="$macro -DELPP_LOG_STD_ARRAY"
+macro="$macro -DELPP_LOG_UNORDERED_SET"
+macro="$macro -DELPP_LOG_UNORDERED_MAP"
+macro="$macro -DELPP_FEATURE_CRASH_LOG"
+macro="$macro -DELPP_FEATURE_ALL"
+
+if [ "$2" = "" ];then
+  COMPILER=g++
+else
+  COMPILER=$2
+fi
+
+CXX_STD='-std=c++0x -pthread'
+
+if [ "$FILE" = "" ]; then
+  echo "Please provide filename to compile"
+  exit
+fi
+
+echo "Compiling... [$FILE]"
+
+COMPILE_LINE="$COMPILER $FILE easylogging++.cc -o bin/$FILE.bin $macro $CXX_STD -Wall -Wextra -lglut -lGLU -lGL -I/usr/include/x86_64-linux-gnu/c++/4.7/"
+
+echo "    $COMPILE_LINE"
+
+$($COMPILE_LINE)
+
+echo "    DONE! [./bin/$FILE.bin]"
+echo
+echo
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/easylogging++.cc b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/easylogging++.cc
new file mode 100644
index 0000000..2386848
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/easylogging++.cc
@@ -0,0 +1 @@
+#include "../../src/easylogging++.cc"
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/easylogging++.h b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/easylogging++.h
new file mode 100644
index 0000000..a2c8ee8
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/easylogging++.h
@@ -0,0 +1,5 @@
+// Header for sample that sub-includes original header from src/ folder
+#ifndef EASYLOGGING_FOR_SAMPLES_H
+#define EASYLOGGING_FOR_SAMPLES_H
+#include "../../src/easylogging++.h"
+#endif // EASYLOGGING_FOR_SAMPLES_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/run.sh b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/run.sh
new file mode 100755
index 0000000..9d58af1
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/run.sh
@@ -0,0 +1,4 @@
+echo "Running '$1'..."
+./$1
+echo "Finished '$1'"
+echo
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/run_all.sh b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/run_all.sh
new file mode 100755
index 0000000..282b11a
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/OpenGL/run_all.sh
@@ -0,0 +1,3 @@
+## Runs all the build binaries from bin/ folder
+
+find bin/ -name '*.cpp.bin' -exec sh ./run.sh ./{} \;
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/.gitignore b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/.gitignore
new file mode 100644
index 0000000..fc23ba2
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/.gitignore
@@ -0,0 +1,2 @@
+Makefile
+build-*
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/basic/README.md b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/basic/README.md
new file mode 100644
index 0000000..9856073
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/basic/README.md
@@ -0,0 +1,5 @@
+###### Easylogging++ Qt Samples
+
+This sample contains:
+ * Qt containers
+ * QThread based multi-threading
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/basic/easylogging++.h b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/basic/easylogging++.h
new file mode 100644
index 0000000..77a0013
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/basic/easylogging++.h
@@ -0,0 +1,5 @@
+// Header for sample that sub-includes original header from src/ folder
+#ifndef EASYLOGGING_FOR_SAMPLES_H
+#define EASYLOGGING_FOR_SAMPLES_H
+#include "../../../src/easylogging++.h"
+#endif // EASYLOGGING_FOR_SAMPLES_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/basic/main.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/basic/main.cpp
new file mode 100644
index 0000000..bafe218
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/basic/main.cpp
@@ -0,0 +1,120 @@
+/**
+ * This file is part of EasyLogging++ samples
+ * Demonstration of multithreaded application in C++ (Qt)
+ *
+ * Compile this program using Qt
+ *    qmake qt-sample.pro && make
+ *
+ * Revision: 1.1
+ * @author mkhan3189
+ */
+
+#include "mythread.h"
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+class LogHandler : public el::LogDispatchCallback {
+public:
+    void handle(const el::LogDispatchData* data) {
+        // NEVER LOG ANYTHING HERE! NOT HAPPY WITH MULTI_THREADING
+        ELPP_COUT << "Test this " << data << std::endl;
+    }
+};
+
+class HtmlHandler : public el::LogDispatchCallback {
+public:
+    HtmlHandler() {
+        el::Loggers::getLogger("html");
+    }
+    void handle(const el::LogDispatchData* data) {
+        // NEVER LOG ANYTHING HERE! NOT HAPPY WITH MULTI_THREADING
+        ELPP_COUT << "<b>" << data->logMessage()->message() << "</b>" << std::endl;
+    }
+};
+
+    
+int main(int argc, char* argv[]) {
+    START_EASYLOGGINGPP(argc, argv);
+
+    el::Loggers::removeFlag(el::LoggingFlag::NewLineForContainer);
+    el::Helpers::installLogDispatchCallback<LogHandler>("LogHandler");
+    el::Helpers::installLogDispatchCallback<HtmlHandler>("HtmlHandler");
+    LOG(INFO) << "First log";
+    LogHandler* logHandler = el::Helpers::logDispatchCallback<LogHandler>("LogHandler");
+    logHandler->setEnabled(false);
+
+    LOG(INFO) << "Second log";
+#if 1
+    bool runThreads = true;
+
+    if (runThreads) {
+        for (int i = 1; i <= 10; ++i) {
+            MyThread t(i);
+            t.start();
+            t.wait();
+        }
+    }
+
+     TIMED_BLOCK(t, "whole-block") {
+        t.timer->checkpoint();
+
+        LOG(WARNING) << "Starting Qt Logging";
+
+        QVector<QString> stringList;
+        stringList.push_back (QString("Test"));
+        stringList.push_back (QString("Test 2"));
+        int i = 0;
+        while (++i != 2)
+            LOG(INFO) << stringList;
+
+        QPair<QString, int> qpair_;
+        qpair_.first = "test";
+        qpair_.second = 2;
+        LOG(INFO) << qpair_;
+
+        QMap<QString, int> qmap_;
+        qmap_.insert ("john", 100);
+        qmap_.insert ("michael", 101);
+        LOG(INFO) << qmap_;
+
+        QMultiMap<QString, int> qmmap_;
+        qmmap_.insert ("john", 100);
+        qmmap_.insert ("michael", 101);
+        LOG(INFO) << qmmap_;
+
+        QSet<QString> qset_;
+        qset_.insert ("test");
+        qset_.insert ("second");
+        LOG(INFO) << qset_;
+
+        QVector<QString*> ptrList;
+        ptrList.push_back (new QString("Test"));
+        LOG(INFO) << ptrList;
+        qDeleteAll(ptrList);
+
+        QHash<QString, QString> qhash_;
+        qhash_.insert ("john", "101fa");
+        qhash_.insert ("michael", "102mf");
+        LOG(INFO) << qhash_;
+
+        QLinkedList<QString> qllist_;
+        qllist_.push_back ("test");
+        qllist_.push_back ("test 2");
+        LOG(INFO) << qllist_ ;
+
+        QStack<QString> qstack_;
+        qstack_.push ("100");
+        qstack_.push ("200");
+        qstack_.push ("100");
+        LOG(DEBUG) << "Printing qstack " << qstack_;
+
+
+        DCHECK(2 > 1) << "What????";
+    }
+    
+    LOG(INFO) << "This is not unicode";
+    LOG(INFO) << "This is unicode: " << L"世界,你好";
+#endif
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/basic/mythread.h b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/basic/mythread.h
new file mode 100644
index 0000000..5ab5857
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/basic/mythread.h
@@ -0,0 +1,41 @@
+#ifndef MYTHREAD_H
+#define MYTHREAD_H
+
+#include <QThread>
+#include "easylogging++.h"
+
+class MyThread : public QThread {
+    Q_OBJECT
+public:
+    MyThread(int id) : threadId(id) {}
+private:
+    int threadId;
+    
+protected:
+    void run() {
+        LOG(INFO) <<"Writing from a thread " << threadId;
+        
+        VLOG(2) << "This is verbose level 2 logging from thread #" << threadId;
+        
+        // Following line will be logged only once from second running thread (which every runs second into
+        // this line because of interval 2)
+        LOG_EVERY_N(2, WARNING) << "This will be logged only once from thread who every reaches this line first. Currently running from thread #" << threadId;
+        
+        for (int i = 1; i <= 10; ++i) {
+            VLOG_EVERY_N(2, 3) << "Verbose level 3 log every two times. This is at " << i << " from thread #" << threadId;
+        }
+        
+        // Following line will be logged once with every thread because of interval 1 
+        LOG_EVERY_N(1, INFO) << "This interval log will be logged with every thread, this one is from thread #" << threadId;
+        
+        LOG_IF(threadId == 2, INFO) << "This log is only for thread 2 and is ran by thread #" << threadId;
+
+        el::Logger* logger = el::Loggers::getLogger("default");
+        logger->info("Info log from [Thread #%v]", threadId);
+        logger->info("Info log");
+        logger->verbose(1, "test");
+        logger->verbose(1, "test %v", 123);
+        logger->verbose(1, "test");
+    }
+};
+#endif
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/basic/qt-sample.pro b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/basic/qt-sample.pro
new file mode 100644
index 0000000..352259d
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/basic/qt-sample.pro
@@ -0,0 +1,21 @@
+QT       += core
+greaterThan(QT_MAJOR_VERSION, 4)
+
+CONFIG += static
+DEFINES += ELPP_QT_LOGGING    \
+          ELPP_FEATURE_ALL \
+          ELPP_STL_LOGGING   \
+          ELPP_STRICT_SIZE_CHECK ELPP_UNICODE \
+          ELPP_MULTI_LOGGER_SUPPORT \
+          ELPP_THREAD_SAFE
+
+TARGET = main.cpp.bin
+TEMPLATE = app
+QMAKE_CXXFLAGS += -std=c++11
+SOURCES += main.cpp ../../../src/easylogging++.cc
+HEADERS += \
+           mythread.h \
+    easylogging++.h
+
+OTHER_FILES += \
+    test_conf.conf
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/basic/test_conf.conf b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/basic/test_conf.conf
new file mode 100644
index 0000000..4f47310
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/basic/test_conf.conf
@@ -0,0 +1,13 @@
+// Set configurations for all format
+* GLOBAL:
+    FORMAT                      =       "%level: %log"
+    FILENAME                    =       "/tmp/logs/qt.log"
+    ENABLED                     =       true
+    TO_FILE                     =       true
+    TO_STANDARD_OUTPUT          =       true
+    SUBSECOND_PRECISION         =       6
+    PERFORMANCE_TRACKING        =       false
+    MAX_LOG_FILE_SIZE               =       1024
+* WARNING:
+    FILENAME                    =       "/tmp/logs/warnings.log"
+    MAX_LOG_FILE_SIZE               =       100
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/.gitignore b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/.gitignore
new file mode 100644
index 0000000..fc089c2
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/.gitignore
@@ -0,0 +1,4 @@
+logs/*
+fast-dictionary
+*.o
+ui_mainwindow.h
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/README.md b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/README.md
new file mode 100644
index 0000000..d802a57
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/README.md
@@ -0,0 +1,5 @@
+Here is a quick sample on what you can (and how you can do) several stuffs in easylogging++ (and Qt)
+
+Please ignore any crashes (if you observe) as we have not build this sample to handle crashes
+
+![Sample screenshot](sample.gif)
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/fast-dictionary.pro b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/fast-dictionary.pro
new file mode 100644
index 0000000..0fefdf9
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/fast-dictionary.pro
@@ -0,0 +1,30 @@
+QT       += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+TARGET = fast-dictionary
+TEMPLATE = app
+
+COMPILER = g++
+QMAKE_CC = $$COMPILER
+QMAKE_CXX = $$COMPILER
+QMAKE_LINK = $$COMPILER
+
+QMAKE_CXXFLAGS += -std=c++11
+DEFINES += ELPP_FEATURE_ALL \
+    ELPP_MULTI_LOGGER_SUPPORT \
+    ELPP_THREAD_SAFE
+
+SOURCES += main.cc\
+        mainwindow.cc \
+    listwithsearch.cc \
+    ../../../src/easylogging++.cc
+
+HEADERS  += mainwindow.hh \
+    listwithsearch.hh \
+    ../../../src/easylogging++.h
+
+FORMS    += mainwindow.ui
+
+DISTFILES += \
+    words.txt
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/listwithsearch.cc b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/listwithsearch.cc
new file mode 100644
index 0000000..f62c40b
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/listwithsearch.cc
@@ -0,0 +1,98 @@
+#include "listwithsearch.hh"
+#include "../../../src/easylogging++.h"
+#include <QtConcurrent/QtConcurrentRun>
+
+int ListWithSearch::kSearchBarHeight = 22;
+
+ListWithSearch::ListWithSearch(int searchBehaviour_, QWidget *parent) :
+    QWidget(parent),
+    searchBehaviour_(searchBehaviour_),
+    parent_(parent)
+{
+    setup(parent);
+}
+
+
+void ListWithSearch::setup(QWidget *parent)
+{
+    setObjectName(QString::fromUtf8("ListWithSearch"));
+    resize(400, 300);
+    list = new QListWidget(parent);
+    list->setObjectName(QString::fromUtf8("list"));
+    list->setGeometry(QRect(20, 60, 256, 192));
+    txtSearchCriteria = new QLineEdit(parent);
+    txtSearchCriteria->setObjectName(QString::fromUtf8("txtSearchCriteria"));
+    txtSearchCriteria->setGeometry(QRect(20, 20, 251, 25));
+    connect(txtSearchCriteria, SIGNAL(textChanged(QString)), this, SLOT(on_txtSearchCriteria_textChanged(QString)));
+    connect(txtSearchCriteria, SIGNAL(returnPressed()), this, SLOT(selected()));
+    QObject::connect(&watcher, SIGNAL(finished()), this, SLOT(selected()));
+}
+
+void ListWithSearch::resizeEvent(QResizeEvent*)
+{
+    txtSearchCriteria->setGeometry (0, 0, width(), kSearchBarHeight);
+    list->setGeometry(0, txtSearchCriteria->height(), width(), height() - txtSearchCriteria->height());
+}
+
+void ListWithSearch::setFocus()
+{
+    txtSearchCriteria->setFocus();
+}
+
+ListWithSearch::~ListWithSearch()
+{
+    TIMED_SCOPE(cleaner, "cleaner");
+    LOG(TRACE) << "Cleaning memory...";
+    for (int i = items.count() - 1; i >= 0; --i) {
+        delete items.at(i);
+    }
+    list->clear();
+    delete list;
+    delete txtSearchCriteria;
+    LOG(TRACE) << "Memory cleaned from list";
+}
+
+void ListWithSearch::add(const QString &item)
+{
+    QListWidgetItem* widgetItem = new QListWidgetItem(item, list);
+    items.push_back(widgetItem);
+    list->insertItem(0, widgetItem);
+}
+
+void ListWithSearch::on_txtSearchCriteria_textChanged(const QString&)
+{
+    if (future_.isRunning()) {
+        future_.cancel();
+    } else {
+        future_ = QtConcurrent::run(this, &ListWithSearch::performSearch);
+        watcher.setFuture(future_);
+    }
+}
+
+void ListWithSearch::selected(void)
+{
+    if (list->count() != 0) {
+        emit selectionMade(list->item(0)->text());
+    }
+}
+
+void ListWithSearch::performSearch(void)
+{
+    while(list->count() > 0) {
+        list->takeItem(0);
+    }
+    if (txtSearchCriteria->text() == "") {
+        for (int i = items.count() - 1; i >= 0; --i) {
+            QListWidgetItem* widgetItem = items.at(i);
+            list->insertItem(0, widgetItem);
+        }
+    } else {
+        LOG(INFO) << "Performing search... [" << txtSearchCriteria->text().toStdString() << "]";
+        for (int i = items.count() - 1; i >= 0; --i) {
+            if (items.at(i)->text().startsWith(txtSearchCriteria->text(), searchBehaviour_ == kCaseSensative ?
+                                               Qt::CaseSensitive : Qt::CaseInsensitive)) {
+                list->insertItem(i, items.at(i));
+            }
+        }
+    }
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/listwithsearch.hh b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/listwithsearch.hh
new file mode 100644
index 0000000..af99745
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/listwithsearch.hh
@@ -0,0 +1,51 @@
+#ifndef LISTWITHSEARCH_HH
+#define LISTWITHSEARCH_HH
+
+#include <QWidget>
+#include <QLineEdit>
+#include <QListWidget>
+#include <QtCore/QList>
+#include <QFuture>
+#include <QFutureWatcher>
+
+class QResizeEvent;
+class QListWidgetItem;
+template <typename T>
+class QFuture;
+
+class ListWithSearch : public QWidget
+{
+    Q_OBJECT
+
+public:
+    static int kSearchBarHeight;
+    enum kBehaviour { kCaseInsensative, kCaseSensative };
+
+    explicit ListWithSearch(int searchBehaviour_ = kCaseSensative, QWidget *parent = 0);
+    virtual ~ListWithSearch();
+    void add(const QString& item);
+    void resizeEvent(QResizeEvent *);
+    void setFocus(void);
+
+private slots:
+    void on_txtSearchCriteria_textChanged(const QString&);
+    void selected(void);
+
+signals:
+    void selectionMade(const QString& selection);
+
+private:
+    QWidget* parent_;
+    QListWidget* list;
+    QLineEdit* txtSearchCriteria;
+    QList<QListWidgetItem*> items;
+    QFuture<void> future_;
+    QFutureWatcher<void> watcher;
+    int searchBehaviour_;
+
+    void setup(QWidget *parent = 0);
+    void performSearch(void);
+
+};
+
+#endif // LISTWITHSEARCH_HH
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/main.cc b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/main.cc
new file mode 100644
index 0000000..bd7078d
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/main.cc
@@ -0,0 +1,20 @@
+#include "mainwindow.hh"
+#include <QApplication>
+#include "../../../src/easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+TIMED_SCOPE(app, "app");
+
+int main(int argc, char *argv[])
+{
+    START_EASYLOGGINGPP(argc, argv);
+    el::Loggers::reconfigureAllLoggers(el::ConfigurationType::Format, "%datetime{%H:%m:%s} [%level] %msg");
+    QApplication a(argc, argv);
+    MainWindow w;
+    w.show();
+    for (int i = 1; i <= 10; ++i) {
+        CLOG_EVERY_N(2, INFO, "default", "performance") << ELPP_COUNTER_POS;
+    }
+    return a.exec();
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/mainwindow.cc b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/mainwindow.cc
new file mode 100644
index 0000000..5e3f7af
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/mainwindow.cc
@@ -0,0 +1,98 @@
+#include "mainwindow.hh"
+#include "ui_mainwindow.h"
+#include "listwithsearch.hh"
+#include "../../../src/easylogging++.h"
+
+#include <QFile>
+#include <QTextStream>
+#include <QMessageBox>
+
+class LogTerminal : public el::LogDispatchCallback {
+public:
+    void setTerminalBox(QPlainTextEdit* t)
+    {
+        m_terminalBox = t;
+    }
+protected:
+    void handle(const el::LogDispatchData* data) noexcept override
+      {
+          dispatch(data->logMessage()->logger()->logBuilder()->build(data->logMessage(), false));
+      }
+private:
+    QPlainTextEdit* m_terminalBox;
+
+    void dispatch(el::base::type::string_t&& logLine) noexcept
+    {
+        m_terminalBox->appendPlainText(QString::fromStdString(logLine));
+        m_terminalBox->ensureCursorVisible();
+    }
+};
+
+MainWindow::MainWindow(QWidget *parent) :
+    QMainWindow(parent),
+    ui(new Ui::MainWindow)
+{
+    ui->setupUi(this);
+    this->setWindowTitle("Fast Dictionary Sample - Easylogging++");
+    list = new ListWithSearch(ListWithSearch::kCaseInsensative, this);
+    this->setGeometry(0, 0, 800, 600);
+    initializeDictionary("words.txt");
+    list->setFocus();
+    connect(list, SIGNAL(selectionMade(QString)), this, SLOT(onSelectionMade(QString)));
+    ui->labelAbout->setText("Easylogging++ v" + QString::fromStdString(el::VersionInfo::version()));
+
+    el::Helpers::installLogDispatchCallback<LogTerminal>("LogTerminal");
+    LogTerminal* logTerminal = el::Helpers::logDispatchCallback<LogTerminal>("LogTerminal");
+    logTerminal->setTerminalBox(ui->plainTextEdit);
+}
+
+MainWindow::~MainWindow()
+{
+    el::Helpers::uninstallLogDispatchCallback<LogTerminal>("LogTerminal");
+    delete list;
+    delete ui;
+}
+
+void MainWindow::resizeEvent(QResizeEvent *)
+{
+    list->setGeometry(0, 0, 300, height() - 100);
+    int contentsX = list->geometry().x() + list->geometry().width() + 10;
+    ui->wordLabel->setGeometry(contentsX, 0, width() - list->width(), height());
+    ui->labelAbout->setGeometry(contentsX, height() - 150, width(), 50);
+    ui->plainTextEdit->setGeometry(0, height() - 100, width(), 100);
+    ui->buttonInfo->setGeometry (width() - ui->buttonInfo->width() - 5, height() - ui->buttonInfo->height() - 105, ui->buttonInfo->width(), ui->buttonInfo->height());
+}
+
+void MainWindow::onSelectionMade(const QString &word)
+{
+    ui->wordLabel->setText(word);
+}
+
+void MainWindow::initializeDictionary(const QString& wordsFile) {
+    TIMED_FUNC(initializeDictionaryTimer);
+
+    QFile file("<Words_file_path>/easyloggingpp/samples/Qt/fast-dictionary/" + wordsFile);
+    if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+        QTextStream inStream(&file);
+        while (!file.atEnd()) {
+            VLOG_EVERY_N(10000, 1) << "Still loading dictionary, this is iteration #" <<  ELPP_COUNTER_POS ;
+            list->add(inStream.readLine());
+        }
+    } else {
+        LOG(ERROR) << "Unable to open words.txt";
+    }
+
+}
+
+void MainWindow::on_buttonInfo_clicked()
+{
+    QString infoText = QString("") +
+            QString("This sample is to demonstrate a some usage of Easylogging++ and other possibilities.") +
+            QString("You may use this sample as starting point of how you may log your Qt/C++ application.") +
+            QString("Dictionary application has nothing to do with what happens internally in Easylogging++, in fact") +
+            QString("this is just another application made for sample purpose.\n\n") +
+            QString("This sample was originally made on 16G ram and 3.9GHz processor running Linux Mint 14 (Cinnamon) so it might") +
+            QString("perform slow on your machine. But regardless of performance of this sample, Easylogging++") +
+            QString(" itself should perform pretty good.");
+    QMessageBox::information(this, "Information about this sample", infoText);
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/mainwindow.hh b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/mainwindow.hh
new file mode 100644
index 0000000..e5211f1
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/mainwindow.hh
@@ -0,0 +1,37 @@
+#ifndef MAINWINDOW_HH
+#define MAINWINDOW_HH
+
+#include <QMainWindow>
+
+namespace Ui {
+class MainWindow;
+}
+
+class ListWithSearch;
+
+class MainWindow : public QMainWindow
+{
+    Q_OBJECT
+    
+public:
+    explicit MainWindow(QWidget *parent = 0);
+    ~MainWindow();
+
+    /**
+     * Loads memory from list of words provided as param.
+     * Note, in the source file, this function has performance tracking on.
+     */
+    void initializeDictionary(const QString& wordsFile);
+    void resizeEvent(QResizeEvent *);
+public slots:
+    void onSelectionMade(const QString& word);
+
+private slots:
+    void on_buttonInfo_clicked();
+
+private:
+    Ui::MainWindow* ui;
+    ListWithSearch* list;
+};
+
+#endif // MAINWINDOW_HH
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/mainwindow.ui b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/mainwindow.ui
new file mode 100644
index 0000000..5c94634
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/mainwindow.ui
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>732</width>
+    <height>463</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>MainWindow</string>
+  </property>
+  <widget class="QWidget" name="centralWidget">
+   <widget class="QLabel" name="wordLabel">
+    <property name="geometry">
+     <rect>
+      <x>80</x>
+      <y>50</y>
+      <width>531</width>
+      <height>61</height>
+     </rect>
+    </property>
+    <property name="sizePolicy">
+     <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+      <horstretch>0</horstretch>
+      <verstretch>0</verstretch>
+     </sizepolicy>
+    </property>
+    <property name="font">
+     <font>
+      <family>Abyssinica SIL</family>
+      <pointsize>28</pointsize>
+     </font>
+    </property>
+    <property name="text">
+     <string>(search and press enter)</string>
+    </property>
+    <property name="alignment">
+     <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+    </property>
+   </widget>
+   <widget class="QLabel" name="labelAbout">
+    <property name="geometry">
+     <rect>
+      <x>290</x>
+      <y>210</y>
+      <width>58</width>
+      <height>15</height>
+     </rect>
+    </property>
+    <property name="font">
+     <font>
+      <family>Abyssinica SIL</family>
+      <pointsize>12</pointsize>
+     </font>
+    </property>
+    <property name="text">
+     <string>About This sample</string>
+    </property>
+   </widget>
+   <widget class="QPushButton" name="buttonInfo">
+    <property name="geometry">
+     <rect>
+      <x>190</x>
+      <y>250</y>
+      <width>87</width>
+      <height>27</height>
+     </rect>
+    </property>
+    <property name="text">
+     <string>Info</string>
+    </property>
+   </widget>
+   <widget class="QPlainTextEdit" name="plainTextEdit">
+    <property name="enabled">
+     <bool>true</bool>
+    </property>
+    <property name="geometry">
+     <rect>
+      <x>0</x>
+      <y>361</y>
+      <width>256</width>
+      <height>101</height>
+     </rect>
+    </property>
+    <property name="readOnly">
+     <bool>true</bool>
+    </property>
+   </widget>
+  </widget>
+ </widget>
+ <layoutdefault spacing="6" margin="11"/>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/moc_listwithsearch.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/moc_listwithsearch.cpp
new file mode 100644
index 0000000..2213a0f
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/moc_listwithsearch.cpp
@@ -0,0 +1,95 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'listwithsearch.hh'
+**
+** Created: Wed Mar 20 10:59:30 2013
+**      by: The Qt Meta Object Compiler version 62 (Qt 4.6.2)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "listwithsearch.hh"
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'listwithsearch.hh' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 62
+#error "This file was generated using the moc from 4.6.2. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+static const uint qt_meta_data_ListWithSearch[] = {
+
+ // content:
+       4,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       3,   14, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       1,       // signalCount
+
+ // signals: signature, parameters, type, tag, flags
+      26,   16,   15,   15, 0x05,
+
+ // slots: signature, parameters, type, tag, flags
+      49,   15,   15,   15, 0x08,
+      91,   15,   15,   15, 0x08,
+
+       0        // eod
+};
+
+static const char qt_meta_stringdata_ListWithSearch[] = {
+    "ListWithSearch\0\0selection\0"
+    "selectionMade(QString)\0"
+    "on_txtSearchCriteria_textChanged(QString)\0"
+    "selected()\0"
+};
+
+const QMetaObject ListWithSearch::staticMetaObject = {
+    { &QWidget::staticMetaObject, qt_meta_stringdata_ListWithSearch,
+      qt_meta_data_ListWithSearch, 0 }
+};
+
+#ifdef Q_NO_DATA_RELOCATION
+const QMetaObject &ListWithSearch::getStaticMetaObject() { return staticMetaObject; }
+#endif //Q_NO_DATA_RELOCATION
+
+const QMetaObject *ListWithSearch::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;
+}
+
+void *ListWithSearch::qt_metacast(const char *_clname)
+{
+    if (!_clname) return 0;
+    if (!strcmp(_clname, qt_meta_stringdata_ListWithSearch))
+        return static_cast<void*>(const_cast< ListWithSearch*>(this));
+    return QWidget::qt_metacast(_clname);
+}
+
+int ListWithSearch::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QWidget::qt_metacall(_c, _id, _a);
+    if (_id < 0)
+        return _id;
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        switch (_id) {
+        case 0: selectionMade((*reinterpret_cast< const QString(*)>(_a[1]))); break;
+        case 1: on_txtSearchCriteria_textChanged((*reinterpret_cast< const QString(*)>(_a[1]))); break;
+        case 2: selected(); break;
+        default: ;
+        }
+        _id -= 3;
+    }
+    return _id;
+}
+
+// SIGNAL 0
+void ListWithSearch::selectionMade(const QString & _t1)
+{
+    void *_a[] = { 0, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
+    QMetaObject::activate(this, &staticMetaObject, 0, _a);
+}
+QT_END_MOC_NAMESPACE
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/moc_mainwindow.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/moc_mainwindow.cpp
new file mode 100644
index 0000000..2f10a04
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/moc_mainwindow.cpp
@@ -0,0 +1,82 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'mainwindow.hh'
+**
+** Created: Wed Mar 20 10:59:29 2013
+**      by: The Qt Meta Object Compiler version 62 (Qt 4.6.2)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "mainwindow.hh"
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'mainwindow.hh' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 62
+#error "This file was generated using the moc from 4.6.2. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+static const uint qt_meta_data_MainWindow[] = {
+
+ // content:
+       4,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       2,   14, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       0,       // signalCount
+
+ // slots: signature, parameters, type, tag, flags
+      17,   12,   11,   11, 0x0a,
+      42,   11,   11,   11, 0x08,
+
+       0        // eod
+};
+
+static const char qt_meta_stringdata_MainWindow[] = {
+    "MainWindow\0\0word\0onSelectionMade(QString)\0"
+    "on_buttonInfo_clicked()\0"
+};
+
+const QMetaObject MainWindow::staticMetaObject = {
+    { &QMainWindow::staticMetaObject, qt_meta_stringdata_MainWindow,
+      qt_meta_data_MainWindow, 0 }
+};
+
+#ifdef Q_NO_DATA_RELOCATION
+const QMetaObject &MainWindow::getStaticMetaObject() { return staticMetaObject; }
+#endif //Q_NO_DATA_RELOCATION
+
+const QMetaObject *MainWindow::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;
+}
+
+void *MainWindow::qt_metacast(const char *_clname)
+{
+    if (!_clname) return 0;
+    if (!strcmp(_clname, qt_meta_stringdata_MainWindow))
+        return static_cast<void*>(const_cast< MainWindow*>(this));
+    return QMainWindow::qt_metacast(_clname);
+}
+
+int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = QMainWindow::qt_metacall(_c, _id, _a);
+    if (_id < 0)
+        return _id;
+    if (_c == QMetaObject::InvokeMetaMethod) {
+        switch (_id) {
+        case 0: onSelectionMade((*reinterpret_cast< const QString(*)>(_a[1]))); break;
+        case 1: on_buttonInfo_clicked(); break;
+        default: ;
+        }
+        _id -= 2;
+    }
+    return _id;
+}
+QT_END_MOC_NAMESPACE
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/sample.gif b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/sample.gif
new file mode 100644
index 0000000..6fd2e61
Binary files /dev/null and b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/sample.gif differ
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/ui_mainwindow.h b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/ui_mainwindow.h
new file mode 100644
index 0000000..d10b356
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/ui_mainwindow.h
@@ -0,0 +1,91 @@
+/********************************************************************************
+** Form generated from reading UI file 'mainwindow.ui'
+**
+** Created: Wed Mar 20 10:59:26 2013
+**      by: Qt User Interface Compiler version 4.6.2
+**
+** WARNING! All changes made in this file will be lost when recompiling UI file!
+********************************************************************************/
+
+#ifndef UI_MAINWINDOW_H
+#define UI_MAINWINDOW_H
+
+#include <QtCore/QVariant>
+#include <QAction>
+#include <QApplication>
+#include <QButtonGroup>
+#include <QHeaderView>
+#include <QLabel>
+#include <QMainWindow>
+#include <QPushButton>
+#include <QWidget>
+#include <QPlainTextEdit>
+
+QT_BEGIN_NAMESPACE
+
+class Ui_MainWindow
+{
+public:
+    QWidget *centralWidget;
+    QLabel *wordLabel;
+    QLabel *labelAbout;
+    QPushButton *buttonInfo;
+    QPlainTextEdit *plainTextEdit;
+
+    void setupUi(QMainWindow *MainWindow)
+    {
+        if (MainWindow->objectName().isEmpty())
+            MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
+        MainWindow->resize(400, 300);
+        centralWidget = new QWidget(MainWindow);
+        centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
+        wordLabel = new QLabel(centralWidget);
+        wordLabel->setObjectName(QString::fromUtf8("wordLabel"));
+        wordLabel->setGeometry(QRect(260, 70, 58, 15));
+        QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+        sizePolicy.setHorizontalStretch(0);
+        sizePolicy.setVerticalStretch(0);
+        sizePolicy.setHeightForWidth(wordLabel->sizePolicy().hasHeightForWidth());
+        wordLabel->setSizePolicy(sizePolicy);
+        QFont font;
+        font.setFamily(QString::fromUtf8("Abyssinica SIL"));
+        font.setPointSize(28);
+        wordLabel->setFont(font);
+        wordLabel->setAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop);
+        labelAbout = new QLabel(centralWidget);
+        labelAbout->setObjectName(QString::fromUtf8("labelAbout"));
+        labelAbout->setGeometry(QRect(290, 210, 58, 15));
+        QFont font1;
+        font1.setFamily(QString::fromUtf8("Abyssinica SIL"));
+        font1.setPointSize(12);
+        labelAbout->setFont(font1);
+        buttonInfo = new QPushButton(centralWidget);
+        buttonInfo->setObjectName(QString::fromUtf8("buttonInfo"));
+        buttonInfo->setGeometry(QRect(190, 250, 87, 27));
+
+        plainTextEdit = new QPlainTextEdit(centralWidget);
+
+        MainWindow->setCentralWidget(centralWidget);
+
+        retranslateUi(MainWindow);
+
+        QMetaObject::connectSlotsByName(MainWindow);
+    } // setupUi
+
+    void retranslateUi(QMainWindow *MainWindow)
+    {
+        MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow"));
+        wordLabel->setText(QApplication::translate("MainWindow", "Word"));
+        labelAbout->setText(QApplication::translate("MainWindow", "About This sample"));
+        buttonInfo->setText(QApplication::translate("MainWindow", "Info"));
+    } // retranslateUi
+
+};
+
+namespace Ui {
+    class MainWindow: public Ui_MainWindow {};
+} // namespace Ui
+
+QT_END_NAMESPACE
+
+#endif // UI_MAINWINDOW_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/words.txt b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/words.txt
new file mode 100644
index 0000000..b9e8169
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/fast-dictionary/words.txt
@@ -0,0 +1,79768 @@
+aardvark
+aardvarks
+aardvark's
+aardwolf
+ab
+abaca
+aback
+abacus
+abacuses
+abaft
+abalone
+abalones
+abalone's
+abandon
+abandoned
+abandonee
+abandoner
+abandoning
+abandonment
+abandons
+abase
+abased
+abasement
+abasements
+abases
+abash
+abashed
+abashes
+abashing
+abashment
+abasing
+abate
+abated
+abatement
+abatements
+abates
+abating
+abattoir
+abbacy
+abbatial
+abbess
+abbey
+abbeys
+abbey's
+abbot
+abbots
+abbot's
+abbreviate
+abbreviated
+abbreviates
+abbreviating
+abbreviation
+abbreviations
+abbreviator
+abdicable
+abdicate
+abdicated
+abdicates
+abdicating
+abdication
+abdicator
+abdomen
+abdomens
+abdomen's
+abdominal
+abdominally
+abducing
+abduct
+abducted
+abducting
+abduction
+abductions
+abduction's
+abductor
+abductors
+abductor's
+abducts
+abeam
+abecedarian
+abed
+aberrance
+aberrancy
+aberrant
+aberrantly
+aberration
+aberrational
+aberrations
+abet
+abetment
+abets
+abetted
+abetter
+abetting
+abettor
+abeyance
+abeyant
+abhor
+abhorred
+abhorrence
+abhorrent
+abhorrently
+abhorrer
+abhorring
+abhors
+abidance
+abide
+abided
+abider
+abides
+abiding
+abidingly
+abilities
+ability
+ability's
+abiogenetically
+abiogenist
+abject
+abjection
+abjections
+abjectly
+abjectness
+abjuration
+abjure
+abjured
+abjurer
+abjures
+abjuring
+ablate
+ablated
+ablates
+ablating
+ablation
+ablative
+ablator
+ablaut
+ablaze
+able
+abler
+ablest
+abloom
+ablution
+ablutionary
+ablutions
+ably
+abnegate
+abnegates
+abnegation
+abnegator
+abnormal
+abnormalities
+abnormality
+abnormally
+aboard
+abode
+abodes
+abode's
+abolish
+abolishable
+abolished
+abolisher
+abolishers
+abolishes
+abolishing
+abolishment
+abolishment's
+abolition
+abolitionary
+abolitionism
+abolitionist
+abolitionists
+abominable
+abominably
+abominate
+abominated
+abominates
+abominating
+abomination
+abominations
+abominator
+abominators
+aboriginal
+aborigine
+aborigines
+aborigine's
+abort
+aborted
+aborting
+abortion
+abortionist
+abortionists
+abortions
+abortion's
+abortive
+abortively
+abortiveness
+aborts
+aboulia
+abound
+abounded
+abounding
+abounds
+about
+above
+aboveboard
+aboveground
+abovementioned
+abracadabra
+abrade
+abraded
+abrader
+abrades
+abrading
+abrasion
+abrasions
+abrasion's
+abrasive
+abrasively
+abrasiveness
+abrasives
+abreact
+abreaction
+abreactions
+abreaction's
+abreast
+abridge
+abridged
+abridgement
+abridger
+abridges
+abridging
+abridgment
+abroad
+abrogate
+abrogated
+abrogates
+abrogating
+abrogation
+abrupt
+abruption
+abruptly
+abruptness
+abscess
+abscessed
+abscesses
+abscise
+abscised
+abscising
+abscissa
+abscission
+abscond
+absconded
+absconder
+absconding
+absconds
+abseil
+absence
+absences
+absence's
+absent
+absented
+absentee
+absenteeism
+absentees
+absentee's
+absentia
+absenting
+absently
+absentminded
+absentmindedly
+absentmindedness
+absents
+absinth
+absinthe
+absolute
+absolutely
+absoluteness
+absolutes
+absolution
+absolutism
+absolutist
+absolutistic
+absolve
+absolved
+absolver
+absolves
+absolving
+absorb
+absorbability
+absorbable
+absorbance
+absorbed
+absorbency
+absorbent
+absorbents
+absorbent's
+absorber
+absorbing
+absorbingly
+absorbs
+absorption
+absorptions
+absorption's
+absorptive
+abstain
+abstained
+abstainer
+abstaining
+abstains
+abstemious
+abstemiously
+abstention
+abstentions
+abstentious
+abstergent
+abstinence
+abstinent
+abstinently
+abstract
+abstracted
+abstractedly
+abstractedness
+abstracter
+abstracting
+abstraction
+abstractionism
+abstractionist
+abstractionists
+abstractions
+abstraction's
+abstractive
+abstractly
+abstractness
+abstractor
+abstractors
+abstractor's
+abstracts
+abstrictions
+abstruse
+abstrusely
+abstruseness
+absurd
+absurdist
+absurdities
+absurdity
+absurdity's
+absurdly
+absurdness
+absurdum
+abundance
+abundances
+abundant
+abundantly
+abuse
+abused
+abuser
+abusers
+abuses
+abusing
+abusive
+abusively
+abusiveness
+abut
+abutilon
+abutment
+abutments
+abuts
+abutted
+abutter
+abutters
+abutter's
+abutting
+abuzz
+abysm
+abysmal
+abysmally
+abyss
+abyssal
+abysses
+abyss's
+acacia
+academe
+academia
+academic
+academically
+academician
+academicism
+academics
+academies
+academism
+academy
+academy's
+acajou
+acanthine
+acanthocephalan
+acanthous
+acanthus
+acanthuses
+acatalectic
+accede
+acceded
+accedes
+acceding
+accelerando
+accelerate
+accelerated
+accelerates
+accelerating
+acceleration
+accelerations
+accelerative
+accelerator
+accelerators
+accelerometer
+accelerometers
+accelerometer's
+accent
+accented
+accenting
+accentless
+accentor
+accents
+accentual
+accentually
+accentuate
+accentuated
+accentuates
+accentuating
+accentuation
+accept
+acceptability
+acceptable
+acceptableness
+acceptably
+acceptance
+acceptances
+acceptance's
+acceptant
+acceptation
+accepted
+accepter
+accepters
+accepting
+acceptingly
+acceptor
+acceptors
+acceptor's
+accepts
+access
+accessed
+accesses
+accessibility
+accessible
+accessibly
+accessing
+accession
+accessional
+accessions
+accession's
+accessorial
+accessories
+accessorise
+accessory
+accessory's
+acciaccatura
+accidence
+accident
+accidental
+accidentally
+accidentalness
+accidents
+accident's
+accipiter
+acclaim
+acclaimed
+acclaimer
+acclaiming
+acclaims
+acclamation
+acclimate
+acclimated
+acclimates
+acclimating
+acclimation
+acclimatisable
+acclimatisation
+acclimatise
+acclimatised
+acclimatiser
+acclimatisers
+acclimatises
+acclimatising
+acclivity
+accolade
+accolades
+accommodate
+accommodated
+accommodates
+accommodating
+accommodatingly
+accommodation
+accommodations
+accommodative
+accommodativeness
+accommodator
+accommodators
+accompanied
+accompanier
+accompanies
+accompaniment
+accompaniments
+accompaniment's
+accompanist
+accompanists
+accompanist's
+accompany
+accompanying
+accomplice
+accomplices
+accomplish
+accomplishable
+accomplished
+accomplisher
+accomplishers
+accomplishes
+accomplishing
+accomplishment
+accomplishments
+accomplishment's
+accord
+accordance
+accordant
+accordantly
+accorded
+accorder
+accorders
+according
+accordingly
+accordion
+accordionist
+accordionists
+accordions
+accordion's
+accords
+accost
+accosted
+accosting
+accosts
+account
+accountabilities
+accountability
+accountable
+accountableness
+accountably
+accountancy
+accountant
+accountants
+accountant's
+accountantship
+accounted
+accounting
+accountings
+accounts
+accoutre
+accoutred
+accoutrement
+accoutrements
+accoutrement's
+accoutres
+accoutring
+accredit
+accreditation
+accreditations
+accredited
+accrete
+accreted
+accreting
+accretion
+accretionary
+accretions
+accretion's
+accretive
+accruable
+accrual
+accruals
+accrue
+accrued
+accruement
+accrues
+accruing
+acculturate
+acculturated
+acculturates
+acculturating
+acculturation
+acculturative
+accumbency
+accumulate
+accumulated
+accumulates
+accumulating
+accumulation
+accumulations
+accumulative
+accumulatively
+accumulativeness
+accumulator
+accumulators
+accumulator's
+accuracies
+accuracy
+accurate
+accurately
+accurateness
+accursed
+accursedly
+accursedness
+accurst
+accusation
+accusations
+accusation's
+accusative
+accusatory
+accuse
+accused
+accuser
+accusers
+accuses
+accusing
+accusingly
+accustom
+accustomed
+accustomedness
+accustoming
+accustoms
+ace
+aced
+acerb
+acerbate
+acerbic
+acerbically
+acerbity
+aces
+ace's
+acetaldehyde
+acetaminophen
+acetanilide
+acetate
+acetic
+acetifier
+acetify
+acetone
+acetous
+acetum
+acetyl
+acetylcholine
+acetylene
+acetylsalicylic
+ache
+ached
+aches
+achier
+achiest
+achievable
+achieve
+achieved
+achievement
+achievements
+achievement's
+achiever
+achievers
+achieves
+achieving
+aching
+achingly
+achromatic
+achromatically
+achromatise
+achromatised
+achromatises
+achromatising
+achy
+aciculate
+acid
+acidhead
+acidic
+acidification
+acidifier
+acidify
+acidimetric
+acidities
+acidity
+acidly
+acidometer
+acidophil
+acidophilus
+acidosis
+acids
+acidulate
+acidulation
+acidulous
+acierate
+acing
+acknowledge
+acknowledgeable
+acknowledged
+acknowledgement
+acknowledgements
+acknowledgement's
+acknowledger
+acknowledgers
+acknowledges
+acknowledging
+acme
+acne
+acolyte
+acolytes
+aconite
+acorn
+acorns
+acorn's
+acoustic
+acoustical
+acoustically
+acoustician
+acoustics
+acquaint
+acquaintance
+acquaintances
+acquaintance's
+acquaintanceship
+acquainted
+acquainting
+acquaints
+acquiesce
+acquiesced
+acquiescence
+acquiescent
+acquiescently
+acquiesces
+acquiescing
+acquirable
+acquire
+acquired
+acquirement
+acquires
+acquiring
+acquisition
+acquisitionist
+acquisitions
+acquisition's
+acquisitive
+acquisitively
+acquisitiveness
+acquit
+acquits
+acquittal
+acquittals
+acquitted
+acquitter
+acquitting
+acre
+acreage
+acres
+acre's
+acrid
+acridity
+acridly
+acridness
+acrimonious
+acrimoniously
+acrimony
+acrobat
+acrobatic
+acrobatically
+acrobatics
+acrobats
+acrobat's
+acrolith
+acronym
+acronymic
+acronyms
+acronym's
+acrophobia
+acrophobic
+acropolis
+across
+acrostic
+acrostically
+acrylic
+act
+actability
+actable
+acted
+acting
+actinic
+actinide
+actinium
+actinozoan
+action
+actionable
+actionably
+actions
+action's
+activate
+activated
+activates
+activating
+activation
+activations
+activator
+activators
+activator's
+active
+actively
+activeness
+activism
+activist
+activists
+activist's
+activities
+activity
+activity's
+actor
+actors
+actor's
+actress
+actresses
+actress's
+acts
+actual
+actualisation
+actualisations
+actualisation's
+actualise
+actualised
+actualises
+actualising
+actualities
+actuality
+actually
+actuarial
+actuarially
+actuaries
+actuary
+actuate
+actuated
+actuates
+actuating
+actuation
+actuator
+actuators
+actuator's
+acuity
+aculeate
+acumen
+acuminate
+acumination
+acupuncture
+acutance
+acute
+acutely
+acuteness
+acuter
+acutest
+acyclic
+ad
+adage
+adages
+adagio
+adagios
+adamant
+adamantine
+adamantly
+adapt
+adaptability
+adaptable
+adaptation
+adaptations
+adaptation's
+adapted
+adapter
+adapters
+adapting
+adaptive
+adaptively
+adaptor
+adaptors
+adapts
+add
+addable
+addax
+added
+addend
+addenda
+addendum
+adder
+adders
+addible
+addict
+addicted
+addicting
+addiction
+addictions
+addiction's
+addictive
+addicts
+adding
+addition
+additional
+additionally
+additions
+addition's
+additive
+additively
+additives
+additive's
+addle
+addled
+addles
+addling
+address
+addressability
+addressable
+addressed
+addressee
+addressees
+addressee's
+addresser
+addressers
+addresses
+addressing
+addressor
+adds
+adduce
+adduced
+adducer
+adduces
+adducible
+adducing
+adduct
+adducted
+adducting
+adduction
+adductive
+adductor
+adducts
+adenine
+adenitis
+adenoid
+adenoidal
+adenoidectomy
+adenoids
+adenoma
+adenosine
+adenovirus
+adept
+adeptly
+adeptness
+adepts
+adequacies
+adequacy
+adequate
+adequately
+adequateness
+adhere
+adhered
+adherence
+adherences
+adherent
+adherently
+adherents
+adherent's
+adherer
+adherers
+adheres
+adhering
+adhesion
+adhesions
+adhesive
+adhesively
+adhesiveness
+adhesives
+adhesive's
+adiabatic
+adiabatically
+adiaphorous
+adieu
+adieux
+adios
+adipose
+adiposity
+adjacency
+adjacent
+adjacently
+adjectival
+adjectivally
+adjective
+adjectively
+adjectives
+adjective's
+adjoin
+adjoined
+adjoining
+adjoins
+adjourn
+adjourned
+adjourning
+adjournment
+adjourns
+adjudge
+adjudged
+adjudges
+adjudging
+adjudicate
+adjudicated
+adjudicates
+adjudicating
+adjudication
+adjudications
+adjudication's
+adjudicative
+adjudicator
+adjudicatory
+adjunct
+adjunction
+adjunctive
+adjuncts
+adjunct's
+adjuration
+adjuratory
+adjure
+adjured
+adjures
+adjuring
+adjust
+adjustability
+adjustable
+adjustably
+adjusted
+adjuster
+adjusters
+adjusting
+adjustment
+adjustments
+adjustment's
+adjustor
+adjustors
+adjustor's
+adjusts
+adjutancy
+adjutant
+adjutants
+adjuvant
+adman
+admass
+admeasure
+administer
+administered
+administering
+administers
+administrable
+administrant
+administrate
+administrated
+administrates
+administrating
+administration
+administrational
+administrations
+administration's
+administrative
+administratively
+administrator
+administrators
+administrator's
+admirable
+admirableness
+admirably
+admiral
+admirals
+admiral's
+admiralty
+admiration
+admirations
+admire
+admired
+admirer
+admirers
+admires
+admiring
+admiringly
+admissibility
+admissible
+admission
+admissions
+admission's
+admissive
+admit
+admits
+admittance
+admitted
+admittedly
+admitter
+admitters
+admitting
+admix
+admixed
+admixes
+admixture
+admonish
+admonished
+admonisher
+admonishes
+admonishing
+admonishingly
+admonishment
+admonishments
+admonishment's
+admonition
+admonitions
+admonition's
+admonitory
+adnominal
+adnoun
+ado
+adobe
+adolescence
+adolescent
+adolescently
+adolescents
+adolescent's
+adopt
+adoptability
+adoptable
+adopted
+adoptee
+adopter
+adopters
+adopting
+adoption
+adoptions
+adoption's
+adoptive
+adoptively
+adopts
+adorability
+adorable
+adorableness
+adorably
+adoration
+adore
+adored
+adorer
+adores
+adoring
+adorn
+adorned
+adorning
+adornment
+adornments
+adornment's
+adorns
+adrenal
+adrenalin
+adrenaline
+adrenergic
+adrift
+adroit
+adroitly
+adroitness
+ads
+adscription
+adsorb
+adsorbed
+adsorbent
+adsorbing
+adsorbs
+adsorption
+adsorptive
+adularia
+adulate
+adulating
+adulation
+adulations
+adulator
+adulatory
+adult
+adulterant
+adulterate
+adulterated
+adulterates
+adulterating
+adulteration
+adulterator
+adulterer
+adulterers
+adulterer's
+adulteress
+adulteresses
+adulterine
+adulterous
+adulterously
+adultery
+adulthood
+adultness
+adults
+adult's
+adumbral
+adumbrate
+adumbrated
+adumbrates
+adumbrating
+adumbration
+adumbrative
+adumbratively
+advance
+advanced
+advancement
+advancements
+advancement's
+advancer
+advancers
+advances
+advancing
+advantage
+advantaged
+advantageous
+advantageously
+advantageousness
+advantages
+advantaging
+advection
+advections
+advent
+adventitia
+adventitious
+adventitiously
+adventitiousness
+adventure
+adventured
+adventurer
+adventurers
+adventures
+adventuresome
+adventuress
+adventuresses
+adventuring
+adventurism
+adventurous
+adventurously
+adventurousness
+adverb
+adverbial
+adverbially
+adverbs
+adverb's
+adversarial
+adversaries
+adversary
+adversary's
+adversative
+adversatively
+adverse
+adversely
+adversities
+adversity
+advert
+adverted
+advertence
+advertency
+advertent
+advertently
+adverting
+advertise
+advertised
+advertisement
+advertisements
+advertisement's
+advertiser
+advertisers
+advertises
+advertising
+adverts
+advice
+advisability
+advisable
+advisableness
+advisably
+advise
+advised
+advisedly
+advisee
+advisees
+advisee's
+advisement
+advisements
+adviser
+advisers
+adviser's
+advises
+advising
+advisor
+advisors
+advisor's
+advisory
+advocacy
+advocate
+advocated
+advocates
+advocating
+advocator
+adytum
+adze
+adzuki
+aegis
+aeon
+aeonian
+aeons
+aeon's
+aerate
+aerated
+aerates
+aerating
+aeration
+aerator
+aerators
+aerial
+aerialist
+aerially
+aerials
+aerial's
+aerie
+aero
+aeroballistics
+aerobatic
+aerobatics
+aerobe
+aerobic
+aerobically
+aerobics
+aerobiological
+aerobiology
+aerodonetics
+aerodrome
+aerodynamic
+aerodynamically
+aerodynamicist
+aerodynamics
+aerodyne
+aeroembolism
+aerofoil
+aerogram
+aerographer
+aerologist
+aeromagnetic
+aeromechanic
+aeromechanics
+aeromedicine
+aerometeorograph
+aerometer
+aerometry
+aeronaut
+aeronautic
+aeronautical
+aeronautically
+aeronautics
+aeroneurosis
+aeropause
+aerophobia
+aeroplane
+aeroplanes
+aeroplane's
+aerosol
+aerosolise
+aerosolised
+aerosols
+aerospace
+aerosphere
+aerostat
+aerostatics
+aerostation
+aerothermodynamics
+aesthesia
+aesthesis
+aesthete
+aesthetes
+aesthetic
+aesthetical
+aesthetically
+aesthetician
+aestheticism
+aesthetics
+aestival
+aestivate
+aestivation
+aetiologies
+aetiology
+aetiology's
+afar
+afeard
+affability
+affable
+affably
+affair
+affaire
+affaires
+affairs
+affair's
+affect
+affectability
+affectation
+affectations
+affectation's
+affected
+affectedly
+affectedness
+affecter
+affecting
+affectingly
+affection
+affectionate
+affectionately
+affectionless
+affections
+affection's
+affective
+affectively
+affectivity
+affects
+afferent
+affiance
+affianced
+affiant
+affidavit
+affidavits
+affidavit's
+affiliate
+affiliated
+affiliates
+affiliating
+affiliation
+affiliations
+affine
+affined
+affinities
+affinity
+affinity's
+affirm
+affirmable
+affirmation
+affirmations
+affirmation's
+affirmative
+affirmatively
+affirmed
+affirming
+affirms
+affix
+affixation
+affixed
+affixes
+affixing
+afflatus
+afflict
+afflicted
+afflicting
+affliction
+afflictions
+affliction's
+afflictive
+afflictively
+afflicts
+affluence
+affluent
+affluently
+afflux
+afford
+affordable
+afforded
+affording
+affords
+afforest
+affray
+affricate
+affricates
+affrication
+affricative
+affright
+affront
+affronted
+affronting
+affronts
+afghan
+afghani
+afghans
+aficionado
+aficionados
+afire
+aflame
+afloat
+aflutter
+afoot
+afore
+aforementioned
+aforesaid
+aforethought
+afoul
+afraid
+afresh
+afro
+aft
+after
+afterbirth
+afterburner
+afterburners
+afterburning
+aftercare
+afterdamp
+afterdeck
+afterglow
+afterheat
+afterimage
+afterlife
+aftermath
+aftermost
+afternoon
+afternoons
+afternoon's
+afterpiece
+afters
+aftershave
+aftershock
+aftershocks
+aftershock's
+aftertaste
+afterthought
+afterthoughts
+aftertime
+afterward
+afterwards
+aga
+again
+against
+agape
+agar
+agate
+agates
+agateware
+age
+aged
+agedly
+agedness
+ageing
+ageless
+agelessly
+agelessness
+agencies
+agency
+agency's
+agenda
+agendas
+agenda's
+agendum
+agene
+agenesis
+agenise
+agent
+agentive
+agents
+agent's
+ages
+aggie
+agglomerate
+agglomerated
+agglomerates
+agglomeration
+agglomerative
+agglutinate
+agglutinated
+agglutinates
+agglutinating
+agglutination
+agglutinative
+agglutinin
+agglutinins
+aggrandise
+aggrandised
+aggrandisement
+aggrandisements
+aggrandisement's
+aggrandiser
+aggrandisers
+aggrandises
+aggrandising
+aggravate
+aggravated
+aggravates
+aggravating
+aggravation
+aggravations
+aggregate
+aggregated
+aggregately
+aggregates
+aggregating
+aggregation
+aggregations
+aggregative
+aggress
+aggression
+aggressions
+aggression's
+aggressive
+aggressively
+aggressiveness
+aggressor
+aggressors
+aggrieve
+aggrieved
+aggrievedly
+aggrieves
+aggrieving
+aggro
+aghast
+agile
+agilely
+agility
+aging
+agitate
+agitated
+agitatedly
+agitates
+agitating
+agitation
+agitations
+agitator
+agitators
+agitator's
+agitprop
+agleam
+aglet
+agley
+aglitter
+aglow
+agnail
+agnate
+agnatic
+agnation
+agnomen
+agnostic
+agnosticism
+agnostics
+agnostic's
+ago
+agog
+agonic
+agonies
+agonise
+agonised
+agonises
+agonising
+agonisingly
+agonist
+agonistic
+agonistically
+agonists
+agony
+agora
+agoraphobia
+agoraphobic
+agouti
+agrarian
+agrarianism
+agree
+agreeability
+agreeable
+agreeableness
+agreeably
+agreed
+agreeing
+agreement
+agreements
+agreement's
+agrees
+agribusiness
+agricultural
+agriculturalist
+agriculturalists
+agriculturally
+agriculture
+agriculturist
+agrologic
+agrological
+agrology
+agronomic
+agronomical
+agronomics
+agronomist
+agronomy
+aground
+ague
+aguish
+aguishly
+ah
+aha
+ahead
+ahem
+ahimsa
+ahoy
+aid
+aide
+aided
+aides
+aiding
+aids
+aigrette
+aiguillette
+aikido
+ail
+ailanthus
+ailed
+aileron
+ailerons
+ailing
+ailment
+ailments
+ailment's
+ails
+ailurophile
+ailurophobe
+aim
+aimed
+aimer
+aimers
+aiming
+aimless
+aimlessly
+aimlessness
+aims
+ain
+ain't
+air
+airbag
+airbags
+airbag's
+airboat
+airborne
+airbrick
+airbrush
+airburst
+airbus
+aircraft
+aircraftman
+aircrafts
+aircrew
+airdrome
+airdrop
+airdrops
+aired
+airfare
+airfield
+airfields
+airfield's
+airflow
+airframe
+airframes
+airframe's
+airfreight
+airglow
+airgun
+airhead
+airier
+airiest
+airily
+airiness
+airing
+airings
+airless
+airlessness
+airlift
+airlifts
+airlift's
+airline
+airliner
+airliners
+airliner's
+airlines
+airline's
+airlock
+airlocks
+airlock's
+airmail
+airmails
+airman
+airmanship
+airmen
+airmobile
+airpark
+airplay
+airport
+airports
+airport's
+airs
+airscrew
+airship
+airships
+airship's
+airsick
+airsickness
+airspace
+airspeed
+airspeeds
+airstrip
+airstrips
+airstrip's
+airtight
+airwave
+airwaves
+airway
+airways
+airway's
+airworthiness
+airworthy
+airy
+aisle
+aisles
+aitch
+aitchbone
+ajar
+akimbo
+akin
+ala
+alabaster
+alack
+alacritous
+alacrity
+alai
+alamode
+alarm
+alarmed
+alarming
+alarmingly
+alarmism
+alarmist
+alarms
+alarum
+alary
+alas
+alb
+alba
+albacore
+albatross
+albeit
+albinism
+albino
+album
+albumen
+albumenise
+albumenised
+albumenises
+albumenising
+albumin
+albums
+alchemic
+alchemical
+alchemically
+alchemise
+alchemist
+alchemistic
+alchemistical
+alchemy
+alcidine
+alcohol
+alcoholic
+alcoholically
+alcoholicity
+alcoholics
+alcoholic's
+alcoholise
+alcoholises
+alcoholism
+alcoholisms
+alcoholometry
+alcohols
+alcohol's
+alcove
+alcoves
+alcove's
+alder
+alderman
+aldermanic
+alderman's
+aldermen
+ale
+alee
+alehouse
+alembic
+alembicated
+aleph
+alert
+alerted
+alerter
+alerting
+alertly
+alertness
+alerts
+alewife
+alexandrine
+alexandrite
+alexia
+alexipharmic
+alfalfa
+alfresco
+alga
+algae
+algaecide
+algal
+algarroba
+algebra
+algebraic
+algebraically
+algebraist
+algebras
+algebra's
+algid
+algidity
+alginate
+alginates
+algoid
+algorism
+algorithm
+algorithmic
+algorithmically
+algorithms
+algorithm's
+alias
+aliased
+aliases
+aliasing
+alibi
+alibis
+alibi's
+alidade
+alien
+alienability
+alienable
+alienate
+alienated
+alienates
+alienating
+alienation
+alienator
+alienist
+aliens
+alien's
+alight
+alighted
+alighting
+align
+aligned
+aligner
+aligning
+alignment
+alignments
+aligns
+alike
+alikeness
+aliment
+alimentary
+alimentation
+alimentative
+aliments
+alimony
+aliped
+aliphatic
+aliquot
+aliquots
+aliquot's
+alit
+alive
+aliveness
+alizarin
+alkahest
+alkali
+alkalify
+alkalimeter
+alkaline
+alkalinise
+alkalinises
+alkalinity
+alkalis
+alkali's
+alkalisation
+alkalise
+alkalised
+alkalises
+alkalising
+alkaloid
+alkaloids
+alkaloid's
+alkalosis
+alky
+alkyd
+alkyl
+all
+allargando
+allay
+allayed
+allaying
+allays
+allegation
+allegations
+allegation's
+allege
+alleged
+allegedly
+alleges
+allegiance
+allegiances
+allegiance's
+allegiant
+alleging
+allegoric
+allegorical
+allegorically
+allegories
+allegorise
+allegorised
+allegorises
+allegorising
+allegorist
+allegory
+allegory's
+allegretto
+allegrettos
+allegretto's
+allegro
+allegros
+allegro's
+allele
+alleles
+allelic
+alleluia
+allemande
+allergen
+allergenic
+allergic
+allergies
+allergist
+allergy
+allergy's
+alleviate
+alleviated
+alleviates
+alleviating
+alleviation
+alleviative
+alleviator
+alleviators
+alleviator's
+alleviatory
+alley
+alleys
+alley's
+alleyway
+alleyways
+alleyway's
+alliaceous
+alliance
+alliances
+alliance's
+allied
+allies
+alligator
+alligators
+alligator's
+alliterate
+alliterated
+alliterates
+alliterating
+alliteration
+alliterations
+alliteration's
+alliterative
+alliteratively
+allocable
+allocate
+allocated
+allocates
+allocating
+allocation
+allocations
+allocation's
+allocution
+allodium
+allograft
+allograph
+allomorph
+allomorphic
+allonym
+allopath
+allopathic
+allopathically
+allophone
+allophones
+allophonic
+allot
+allotment
+allotments
+allotment's
+allotransplant
+allotrope
+allotropic
+allotropically
+allotropy
+allots
+allotted
+allotter
+allotting
+allow
+allowable
+allowableness
+allowably
+allowance
+allowanced
+allowances
+allowance's
+allowancing
+allowed
+allowedly
+allowing
+allows
+alloy
+alloyed
+alloying
+alloys
+alloy's
+allseed
+allspice
+allude
+alluded
+alludes
+alluding
+allure
+allured
+allurement
+allures
+alluring
+allusion
+allusions
+allusion's
+allusive
+allusively
+allusiveness
+alluvial
+alluvium
+ally
+allying
+alma
+almagest
+almanac
+almanacs
+almanac's
+almandine
+almightiness
+almighty
+almond
+almonds
+almond's
+almoner
+almonry
+almost
+alms
+almsgiver
+almsgiving
+almshouse
+almshouses
+almsman
+alnico
+aloe
+aloes
+aloft
+aloha
+alone
+aloneness
+along
+alongshore
+alongside
+aloof
+aloofly
+aloofness
+alopecia
+aloud
+alp
+alpaca
+alpenglow
+alpenhorn
+alpenstock
+alpha
+alphabet
+alphabetic
+alphabetical
+alphabetically
+alphabetisation
+alphabetisations
+alphabetisation's
+alphabetise
+alphabetised
+alphabetiser
+alphabetisers
+alphabetises
+alphabetising
+alphabets
+alphabet's
+alphanumeric
+alphanumerical
+alphanumerically
+alphorn
+alpine
+alpinism
+alpinist
+alps
+already
+alright
+alsike
+also
+alt
+altar
+altarpiece
+altars
+altar's
+alter
+alterability
+alterable
+alterably
+alteration
+alterations
+alteration's
+alterative
+altercate
+altercation
+altercations
+altercation's
+altered
+altering
+alternant
+alternate
+alternated
+alternately
+alternates
+alternating
+alternation
+alternations
+alternative
+alternatively
+alternativeness
+alternatives
+alternator
+alternators
+alternator's
+alters
+althea
+althorn
+although
+altimeter
+altimeters
+altimeter's
+altimetry
+altissimo
+altitude
+altitudes
+altitudinal
+altitudinous
+alto
+altocumulus
+altogether
+altos
+alto's
+altostratus
+altruism
+altruist
+altruistic
+altruistically
+altruists
+alum
+alumina
+aluminiferous
+aluminise
+aluminised
+aluminises
+aluminising
+aluminium
+aluminium's
+aluminothermy
+aluminous
+alumna
+alumnae
+alumna's
+alumni
+alumnus
+alumroot
+alveolar
+alveoli
+alveolus
+always
+alyssum
+am
+amah
+amalgam
+amalgamate
+amalgamated
+amalgamates
+amalgamating
+amalgamation
+amalgamations
+amalgamative
+amalgamator
+amalgams
+amalgam's
+amanita
+amanuenses
+amanuensis
+amaranth
+amaranthaceous
+amaranthine
+amarelle
+amaryllidaceous
+amass
+amassed
+amasser
+amasses
+amassing
+amassment
+amateur
+amateurish
+amateurishly
+amateurishness
+amateurism
+amateurs
+amateur's
+amative
+amatively
+amativeness
+amatol
+amatory
+amaze
+amazed
+amazedly
+amazement
+amazes
+amazing
+amazingly
+amazonite
+amazons
+ambary
+ambassador
+ambassadorial
+ambassadors
+ambassador's
+ambassadorship
+ambassadress
+amber
+ambergris
+amberjack
+amberoid
+ambiance
+ambiances
+ambidexterity
+ambidextrous
+ambidextrously
+ambience
+ambiences
+ambient
+ambiguities
+ambiguity
+ambiguity's
+ambiguous
+ambiguously
+ambiguousness
+ambit
+ambition
+ambitionless
+ambitions
+ambition's
+ambitious
+ambitiously
+ambitiousness
+ambivalence
+ambivalent
+ambivalently
+amble
+ambled
+ambler
+ambles
+ambling
+amblygonite
+ambo
+ambrosia
+ambrosial
+ambrosially
+ambry
+ambulance
+ambulances
+ambulance's
+ambulant
+ambulate
+ambulation
+ambulatory
+ambuscade
+ambuscader
+ambush
+ambushed
+ambusher
+ambushes
+ameliorate
+ameliorated
+ameliorating
+amelioration
+ameliorative
+ameliorator
+amen
+amenabilities
+amenability
+amenable
+amenably
+amend
+amendable
+amendatory
+amended
+amender
+amending
+amendment
+amendments
+amendment's
+amends
+amenities
+amenity
+amenorrhoea
+amentia
+amerce
+amercing
+americium
+amethyst
+amethystine
+amiability
+amiable
+amiableness
+amiably
+amicability
+amicable
+amicableness
+amicably
+amice
+amicus
+amid
+amide
+amidships
+amidst
+amigo
+amine
+amino
+aminophenol
+amiss
+amitosis
+amitotic
+amity
+ammeter
+ammeters
+ammeter's
+ammine
+ammo
+ammonal
+ammonia
+ammoniac
+ammonias
+ammoniate
+ammonic
+ammonite
+ammonites
+ammonium
+ammunition
+ammunitions
+amnesia
+amnesiac
+amnesic
+amnesty
+amniocentesis
+amnion
+amniotic
+amoeba
+amoebae
+amoebaean
+amoebas
+amoeba's
+amoebic
+amoeboid
+amok
+among
+amongst
+amontillado
+amoral
+amorality
+amorally
+amoretto
+amorist
+amorists
+amorist's
+amoroso
+amorous
+amorously
+amorousness
+amorphous
+amorphously
+amorphousness
+amortisable
+amortisation
+amortisation's
+amortise
+amortised
+amortisement
+amortisements
+amortisement's
+amortises
+amortising
+amount
+amounted
+amounting
+amounts
+amour
+amours
+amour's
+amp
+amperage
+amperages
+ampere
+amperes
+ampersand
+ampersands
+ampersand's
+amphetamine
+amphetamines
+amphibian
+amphibians
+amphibian's
+amphibiotic
+amphibious
+amphibiously
+amphibiousness
+amphibole
+amphibology
+amphibrach
+amphichroic
+amphigory
+amphimacer
+amphioxus
+amphipod
+amphiprostyle
+amphisbaena
+amphitheatre
+amphitheatres
+amphitheatre's
+amphitheatric
+amphitheatrically
+amphitricha
+amphora
+ample
+ampleness
+ampler
+amplest
+amplification
+amplifications
+amplified
+amplifier
+amplifiers
+amplifies
+amplify
+amplifying
+amplitude
+amplitudes
+amplitude's
+amply
+ampoule
+ampoules
+ampoule's
+amps
+amputate
+amputated
+amputates
+amputating
+amputation
+amputee
+amrita
+amuck
+amulet
+amulets
+amuse
+amused
+amusedly
+amusement
+amusements
+amusement's
+amuser
+amusers
+amuses
+amusing
+amusingly
+amusingness
+amygdalate
+amygdale
+amygdaline
+amygdaloidal
+amyl
+amylase
+amylopsin
+an
+anabantid
+anabasis
+anabatic
+anabolic
+anabolism
+anabranch
+anacardiaceous
+anachronism
+anachronisms
+anachronism's
+anachronistic
+anachronistically
+anachronous
+anachronously
+anacoluthia
+anacoluthic
+anacoluthon
+anaconda
+anacondas
+anacrusis
+anadiplosis
+anaemia
+anaemia's
+anaemic
+anaemically
+anaerobe
+anaerobic
+anaesthesia
+anaesthesias
+anaesthesia's
+anaesthesiologist
+anaesthesiology
+anaesthetic
+anaesthetically
+anaesthetics
+anaesthetic's
+anaesthetisation
+anaesthetisations
+anaesthetisation's
+anaesthetise
+anaesthetised
+anaesthetises
+anaesthetising
+anaesthetist
+anaesthetization
+anaesthetizations
+anaesthetization's
+anaglyph
+anaglyphic
+anagram
+anagrammatic
+anagrammatically
+anagrammatise
+anagrams
+anagram's
+anal
+analects
+analeptic
+analgesia
+analgesic
+analogical
+analogically
+analogies
+analogise
+analogises
+analogist
+analogous
+analogously
+analogousness
+analogue
+analogues
+analogue's
+analogy
+analogy's
+analphabetic
+analysable
+analyse
+analysed
+analyser
+analysers
+analyses
+analysing
+analysis
+analyst
+analysts
+analyst's
+analytic
+analytical
+analytically
+analyticities
+analyticity
+analytics
+anamnesis
+anamorphoscope
+anapaest
+anaphase
+anaphora
+anaphoric
+anaphylaxis
+anarchic
+anarchical
+anarchise
+anarchises
+anarchism
+anarchist
+anarchistic
+anarchists
+anarchist's
+anarchy
+anastigmatic
+anastrophe
+anathema
+anathematisation
+anathematise
+anathematised
+anathematises
+anathematising
+anatomic
+anatomical
+anatomically
+anatomise
+anatomist
+anatomy
+anatropous
+ancestor
+ancestors
+ancestor's
+ancestral
+ancestrally
+ancestress
+ancestry
+anchor
+anchorage
+anchorages
+anchorage's
+anchored
+anchoress
+anchoret
+anchoring
+anchorite
+anchoritic
+anchorless
+anchorman
+anchors
+anchovies
+anchovy
+ancient
+anciently
+ancientness
+ancients
+ancillaries
+ancillary
+ancon
+and
+andante
+andantino
+andesine
+andiron
+andradite
+androgen
+androgenic
+androgynous
+androgyny
+android
+androsphinx
+ands
+anecdotage
+anecdotal
+anecdotally
+anecdote
+anecdotes
+anecdote's
+anecdotic
+anecdotist
+anechoic
+anemograph
+anemographic
+anemography
+anemology
+anemometer
+anemometers
+anemometer's
+anemometric
+anemometrical
+anemometry
+anemone
+anemoscope
+anent
+aneroid
+aneurism
+aneurysm
+anew
+anfractuous
+angel
+angelfish
+angelic
+angelical
+angelically
+angelology
+angels
+angel's
+anger
+angered
+angering
+angers
+angina
+angiography
+angiosperm
+angle
+angled
+angler
+anglers
+angles
+anglesite
+angleworm
+anglicise
+anglicised
+anglicises
+angling
+angora
+angostura
+angrier
+angriest
+angrily
+angriness
+angry
+angst
+angstrom
+angstroms
+anguish
+anguished
+angular
+angularity
+angularly
+anhinga
+anhydride
+anhydrite
+anhydrous
+anhydrously
+anile
+aniline
+anima
+animadversion
+animadvert
+animal
+animalcular
+animalcule
+animalisation
+animalise
+animalised
+animalises
+animalising
+animalism
+animalist
+animalistic
+animally
+animals
+animal's
+animate
+animated
+animatedly
+animates
+animating
+animation
+animations
+animato
+animator
+animators
+animator's
+animism
+animist
+animistic
+animosity
+animus
+anion
+anionic
+anions
+anion's
+anise
+aniseed
+anisette
+anisole
+anisotropic
+anisotropies
+anisotropy
+anisotropy's
+ankh
+ankle
+anklebone
+anklebones
+ankles
+ankle's
+anklet
+annals
+annatto
+anneal
+annealed
+annealing
+anneals
+annelid
+annex
+annexation
+annexationist
+annexations
+annexe
+annexed
+annexes
+annexing
+annihilate
+annihilated
+annihilates
+annihilating
+annihilation
+annihilator
+anniversaries
+anniversary
+anniversary's
+annotate
+annotated
+annotates
+annotating
+annotation
+annotations
+annotative
+annotator
+annotators
+announce
+announced
+announcement
+announcements
+announcement's
+announcer
+announcers
+announces
+announcing
+annoy
+annoyance
+annoyances
+annoyance's
+annoyed
+annoyer
+annoyers
+annoying
+annoyingly
+annoys
+annual
+annualise
+annualised
+annualises
+annualising
+annually
+annuals
+annuitant
+annuities
+annuity
+annul
+annular
+annularity
+annularly
+annulated
+annulet
+annuli
+annulled
+annulling
+annulment
+annulments
+annulment's
+annuls
+annulus
+annum
+annunciate
+annunciates
+annunciating
+annunciation
+anodal
+anode
+anodes
+anode's
+anodic
+anodise
+anodised
+anodises
+anodising
+anodyne
+anoestrus
+anoint
+anointed
+anointer
+anointing
+anointment
+anoints
+anole
+anomalies
+anomalistic
+anomalous
+anomalously
+anomalousness
+anomaly
+anomaly's
+anomic
+anomie
+anon
+anonym
+anonymity
+anonymous
+anonymously
+anonymousness
+anorak
+anorectic
+anorexia
+anorthic
+another
+another's
+anoxia
+anoxic
+anserine
+answer
+answerable
+answered
+answerer
+answerers
+answering
+answers
+ant
+antacid
+antagonise
+antagonised
+antagonises
+antagonising
+antagonism
+antagonisms
+antagonist
+antagonistic
+antagonistically
+antagonists
+antagonist's
+ante
+anteater
+anteaters
+anteater's
+antebellum
+antecedence
+antecedent
+antecedents
+antecedent's
+antechamber
+antechambers
+antechoir
+anted
+antedate
+antedated
+antedates
+antedating
+antediluvian
+antefix
+antefixal
+anteing
+antelope
+antelopes
+antelope's
+antemeridian
+antenatal
+antenna
+antennae
+antennal
+antennas
+antenna's
+antependium
+antepenultimate
+anterior
+anteroom
+anterooms
+anthem
+anthemion
+anthems
+anthem's
+anther
+anthill
+anthologies
+anthologise
+anthologised
+anthologises
+anthologising
+anthologist
+anthology
+anthracite
+anthracitic
+anthracnose
+anthrax
+anthrop
+anthropocentric
+anthropocentrically
+anthropocentricity
+anthropogenesis
+anthropogenic
+anthropography
+anthropoid
+anthropological
+anthropologically
+anthropologist
+anthropologists
+anthropologist's
+anthropology
+anthropometric
+anthropometrical
+anthropometrically
+anthropometrics
+anthropometry
+anthropomorphic
+anthropomorphically
+anthropomorphise
+anthropomorphised
+anthropomorphises
+anthropomorphising
+anthropomorphism
+anthropomorphist
+anthropomorphosis
+anthropopathy
+anthropophagi
+anthropophagite
+anthropophagous
+anthropophagus
+anthroposophy
+anti
+antiaircraft
+antibacterial
+antibiosis
+antibiotic
+antibiotics
+antibodies
+antibody
+antic
+anticancer
+anticathode
+antichlor
+antichrist
+anticipant
+anticipants
+anticipatable
+anticipate
+anticipated
+anticipates
+anticipating
+anticipation
+anticipations
+anticipative
+anticipatively
+anticipator
+anticipatory
+anticlastic
+anticlerical
+anticlericalism
+anticlimactic
+anticlimactically
+anticlimax
+anticlimaxes
+anticline
+anticlockwise
+anticoagulant
+anticoagulation
+anticompetitive
+anticonvulsant
+anticonvulsive
+antics
+antic's
+anticyclone
+anticyclones
+antidepressant
+antidisestablishmentarianism
+antidote
+antidotes
+antidote's
+antiestablishment
+antifouling
+antifreeze
+antifriction
+antifundamentalist
+antifungal
+antigen
+antigenic
+antigens
+antigen's
+antigravity
+antihelices
+antihero
+antiheros
+antihistamine
+antihistaminic
+antihypertensive
+antiknock
+antilitter
+antilog
+antilogarithm
+antilogarithms
+antilogism
+antimacassar
+antimacassars
+antimagnetic
+antimasque
+antimatter
+antimatter's
+antimicrobial
+antimilitarist
+antimilitarists
+antimissile
+antimissiles
+antineutrino
+antineutron
+antinomian
+antinomy
+antinovel
+antioxidant
+antiparticle
+antipasto
+antipathetic
+antipathetically
+antipathy
+antipersonnel
+antiperspirant
+antiphon
+antiphonal
+antiphonally
+antiphonary
+antiphony
+antiphrasis
+antipodal
+antipode
+antipodes
+antipode's
+antipoetic
+antipollution
+antipope
+antiproton
+antipyretic
+antiquarian
+antiquarianism
+antiquarians
+antiquarian's
+antiquary
+antiquate
+antiquated
+antiquation
+antique
+antiques
+antique's
+antiquities
+antiquity
+antirrhinum
+antisepsis
+antiseptic
+antiseptically
+antisepticise
+antisepticises
+antiserum
+antislavery
+antisocial
+antispasmodic
+antistatic
+antistrophe
+antistrophic
+antisubmarine
+antitank
+antithesis
+antithetic
+antithetical
+antithetically
+antitoxic
+antitoxin
+antitoxins
+antitoxin's
+antitrades
+antitrust
+antitype
+antivenin
+antiviral
+antler
+antlered
+antonomasia
+antonym
+antonymic
+antonymous
+antonyms
+ants
+ant's
+anuran
+anus
+anvil
+anvils
+anvil's
+anxieties
+anxiety
+anxious
+anxiously
+anxiousness
+any
+anybodies
+anybody
+anyhow
+anymore
+anyone
+anyone's
+anyplace
+anything
+anytime
+anyway
+anyways
+anywhere
+anywise
+aorta
+aortal
+aortic
+aoudad
+apace
+apache
+apaches
+apagoge
+apart
+apartheid
+apartment
+apartments
+apartment's
+apartness
+apathetic
+apathetically
+apathy
+apatite
+ape
+aped
+apelike
+aperitif
+aperture
+apery
+apes
+apex
+apexes
+aphaeresis
+aphaeretic
+aphasia
+aphasiac
+aphasic
+aphelion
+apheliotropic
+aphesis
+aphetic
+aphetically
+aphid
+aphides
+aphids
+aphid's
+aphonic
+aphorise
+aphorised
+aphorises
+aphorising
+aphorism
+aphorisms
+aphorism's
+aphorist
+aphoristic
+aphoristically
+aphrodisiac
+aphrodisiacal
+aphylly
+apian
+apiarian
+apiaries
+apiarist
+apiary
+apical
+apices
+apicultural
+apiculture
+apiculturist
+apiece
+aping
+apish
+apishly
+apishness
+apivorous
+aplenty
+aplomb
+apnoea
+apocalypse
+apocalyptic
+apocalyptical
+apocalyptically
+apocopate
+apocrypha
+apocryphal
+apocryphally
+apocryphalness
+apocynthion
+apodictic
+apodictically
+apodosis
+apogamic
+apogee
+apogees
+apolitical
+apolitically
+apologetic
+apologetically
+apologetics
+apologia
+apologies
+apologise
+apologised
+apologiser
+apologisers
+apologises
+apologising
+apologist
+apologists
+apologist's
+apologue
+apology
+apology's
+apophasis
+apophthegm
+apophyge
+apoplectic
+apoplectically
+apoplexy
+aposiopesis
+apostasy
+apostate
+apostates
+apostatise
+apostatised
+apostatises
+apostatising
+apostil
+apostle
+apostles
+apostle's
+apostleship
+apostolate
+apostolic
+apostolicity
+apostrophe
+apostrophes
+apostrophic
+apostrophise
+apostrophised
+apostrophises
+apostrophising
+apothecary
+apothecial
+apothegm
+apothegmatic
+apothegmatical
+apothem
+apotheoses
+apotheosis
+apotheosise
+appal
+appalled
+appalling
+appallingly
+appaloosa
+appaloosas
+appals
+apparatus
+apparatuses
+apparel
+apparelled
+apparelling
+apparels
+apparent
+apparently
+apparentness
+apparition
+apparitional
+apparitions
+apparition's
+appassionato
+appeal
+appealed
+appealer
+appealers
+appealing
+appealingly
+appeals
+appear
+appearance
+appearances
+appeared
+appearing
+appears
+appease
+appeased
+appeasement
+appeaser
+appeases
+appeasing
+appellant
+appellants
+appellant's
+appellate
+appellation
+appellative
+appellatively
+append
+appendage
+appendages
+appendage's
+appendectomy
+appended
+appendices
+appendicitis
+appendicle
+appending
+appendix
+appendixes
+appendix's
+appends
+apperceive
+apperception
+appertain
+appertained
+appertaining
+appertains
+appestat
+appetence
+appetency
+appetent
+appetiser
+appetisers
+appetising
+appetisingly
+appetite
+appetites
+appetite's
+appetitive
+applaud
+applauded
+applauder
+applauding
+applauds
+applause
+apple
+applecart
+applejack
+apples
+apple's
+applesauce
+appliance
+appliances
+appliance's
+applicability
+applicable
+applicant
+applicants
+applicant's
+application
+applications
+application's
+applicative
+applicator
+applicators
+applicator's
+applicatory
+applied
+applier
+appliers
+applies
+appliqu�
+apply
+applying
+appoint
+appointed
+appointee
+appointees
+appointee's
+appointer
+appointers
+appointing
+appointive
+appointment
+appointments
+appointment's
+appoints
+apportion
+apportioned
+apportioning
+apportionment
+apportionments
+apportions
+appose
+apposed
+apposing
+apposite
+appositely
+appositeness
+apposition
+appositional
+appositionally
+appositive
+appositively
+appraisal
+appraisals
+appraisal's
+appraise
+appraised
+appraisement
+appraiser
+appraisers
+appraises
+appraising
+appraisingly
+appreciable
+appreciably
+appreciate
+appreciated
+appreciates
+appreciating
+appreciation
+appreciations
+appreciative
+appreciatively
+appreciator
+appreciatory
+apprehend
+apprehended
+apprehender
+apprehending
+apprehends
+apprehensible
+apprehension
+apprehensions
+apprehension's
+apprehensive
+apprehensively
+apprehensiveness
+apprentice
+apprenticed
+apprentices
+apprenticeship
+apprenticeships
+apprise
+apprised
+apprises
+apprising
+approach
+approachability
+approachable
+approached
+approaches
+approaching
+approbate
+approbation
+approbatory
+appropriable
+appropriate
+appropriated
+appropriately
+appropriateness
+appropriates
+appropriating
+appropriation
+appropriations
+appropriative
+appropriator
+appropriators
+appropriator's
+approvable
+approval
+approvals
+approval's
+approve
+approved
+approver
+approvers
+approves
+approving
+approvingly
+approx
+approximant
+approximate
+approximated
+approximately
+approximates
+approximating
+approximation
+approximations
+appurtenance
+appurtenances
+appurtenant
+apricot
+apricots
+apricot's
+apriority
+apron
+aprons
+apron's
+apropos
+apse
+apses
+apsidal
+apt
+apteral
+apterygial
+apteryx
+aptitude
+aptitudes
+aptly
+aptness
+aqua
+aquacade
+aquaculture
+aqualung
+aquamarine
+aquanaut
+aquaplane
+aquarelle
+aquarellist
+aquaria
+aquarist
+aquarium
+aquatic
+aquatically
+aquatics
+aquatint
+aquatinter
+aquavit
+aqueduct
+aqueducts
+aqueduct's
+aqueous
+aquiculture
+aquifer
+aquifers
+aquilegia
+aquiline
+aquiver
+arabesque
+arability
+arable
+arachnid
+arachnids
+arachnid's
+aragonite
+araldite
+araliaceous
+arapaima
+arbalest
+arbiter
+arbiters
+arbiter's
+arbitrage
+arbitrager
+arbitrageur
+arbitral
+arbitrarily
+arbitrariness
+arbitrary
+arbitrate
+arbitrated
+arbitrates
+arbitrating
+arbitration
+arbitrational
+arbitrative
+arbitrator
+arbitrators
+arbitrator's
+arbitress
+arboreal
+arborescence
+arboretum
+arboriculture
+arborisation
+arborvitae
+arbour
+arbours
+arbour's
+arbutus
+arc
+arcade
+arcaded
+arcades
+arcade's
+arcading
+arcane
+arccosine
+arced
+arch
+archaeological
+archaeologically
+archaeologist
+archaeologists
+archaeologist's
+archaeology
+archaic
+archaically
+archaise
+archaised
+archaiser
+archaisers
+archaises
+archaising
+archaism
+archaist
+archaistic
+archangel
+archangelic
+archangels
+archangel's
+archbishop
+archbishopric
+archdeacon
+archdeaconate
+archdeaconry
+archdiocesan
+archdiocese
+archdioceses
+archducal
+archduchess
+archduchy
+archduke
+archdukedom
+arched
+archenemy
+archenteron
+archer
+archerfish
+archers
+archery
+arches
+archetypal
+archetype
+archetypes
+archetypical
+archetypically
+archfiend
+archidiaconal
+archidiaconate
+archiepiscopal
+archiepiscopate
+archimandrite
+arching
+archipelagic
+archipelago
+archiphoneme
+architect
+architectonic
+architectonically
+architectonics
+architects
+architect's
+architectural
+architecturally
+architecture
+architectures
+architecture's
+architrave
+archival
+archive
+archived
+archives
+archiving
+archivist
+archivists
+archivolt
+archly
+archon
+archpriest
+archway
+arcing
+arcograph
+arcs
+arcsine
+arctangent
+arctic
+ardency
+ardent
+ardently
+ardour
+ardour's
+arduous
+arduously
+arduousness
+are
+area
+areas
+area's
+areaway
+arena
+arenas
+arena's
+aren't
+areola
+areolation
+areole
+argali
+argand
+argent
+argentine
+argentite
+argentous
+argil
+argillaceous
+argilliferous
+argillite
+argon
+argot
+arguable
+arguably
+argue
+argued
+arguer
+arguers
+argues
+argufy
+arguing
+argument
+argumentation
+argumentative
+argumentatively
+arguments
+argument's
+argumentum
+argyle
+aria
+arid
+aridity
+aridness
+arietta
+aright
+aril
+arioso
+arise
+arisen
+arises
+arising
+aristocracy
+aristocrat
+aristocratic
+aristocratically
+aristocrats
+aristocrat's
+arithmetic
+arithmetical
+arithmetically
+arithmetician
+ark
+arm
+armada
+armadillo
+armadillos
+armament
+armamentarium
+armaments
+armament's
+armature
+armatures
+armband
+armchair
+armchairs
+armchair's
+armed
+armful
+armfuls
+armhole
+armies
+armiger
+armillary
+arming
+armistice
+armless
+armlet
+armload
+armoire
+armorial
+armour
+armoured
+armourer
+armourers
+armourer's
+armouries
+armouring
+armours
+armour's
+armoury
+armoury's
+armpit
+armpits
+armpit's
+armrest
+arms
+arm's
+army
+army's
+arnica
+aroid
+aroma
+aromas
+aromatic
+aromatically
+aromatisation
+aromatise
+aromatised
+aromatises
+aromatising
+arose
+around
+arousal
+arouse
+aroused
+arouses
+arousing
+arpeggio
+arpeggios
+arpeggio's
+arrack
+arraign
+arraigned
+arraigning
+arraignment
+arraignments
+arraignment's
+arraigns
+arrange
+arranged
+arrangement
+arrangements
+arrangement's
+arranger
+arrangers
+arranges
+arranging
+arrant
+arrantly
+arras
+array
+arrayed
+arraying
+arrays
+arrear
+arrearage
+arrears
+arrest
+arrestable
+arrested
+arrestee
+arrestees
+arrestee's
+arrester
+arresters
+arresting
+arrestingly
+arrestment
+arrestor
+arrestors
+arrestor's
+arrests
+arrhythmia
+arrhythmic
+arrival
+arrivals
+arrival's
+arrive
+arrived
+arrives
+arriving
+arrivisme
+arriviste
+arroba
+arrogance
+arrogant
+arrogantly
+arrogate
+arrogated
+arrogates
+arrogating
+arrogation
+arrondissement
+arrow
+arrowed
+arrowhead
+arrowheads
+arrowhead's
+arrowroot
+arrows
+arroyo
+arroyos
+arse
+arsehole
+arseholes
+arsehole's
+arsenal
+arsenals
+arsenal's
+arsenate
+arsenic
+arsenical
+arsenide
+arsine
+arsines
+arsis
+arson
+arsonist
+art
+arte
+artefact
+artefacts
+arterial
+arterialisation
+arterialisations
+arterialisation's
+arterialise
+arterialised
+arterialises
+arterialising
+arterially
+arteries
+arteriogram
+arteriolar
+arteriole
+arterioles
+arteriole's
+arteriolosclerosis
+arteriosclerosis
+artery
+artery's
+artesian
+artful
+artfully
+artfulness
+arthritic
+arthritically
+arthritis
+arthropod
+arthropods
+arthropod's
+artic
+artichoke
+artichokes
+artichoke's
+article
+articled
+articles
+article's
+articling
+articular
+articulate
+articulated
+articulately
+articulates
+articulating
+articulation
+articulations
+articulator
+articulators
+artier
+artifice
+artificer
+artifices
+artificial
+artificialities
+artificiality
+artificially
+artificialness
+artilleries
+artillerist
+artillery
+artilleryman
+artily
+artiness
+artisan
+artisans
+artisan's
+artist
+artiste
+artistic
+artistically
+artistry
+artists
+artist's
+artless
+artlessly
+arts
+art's
+artwork
+arty
+arum
+arundinaceous
+aryl
+as
+asafoetida
+asbestos
+asbestosis
+ascend
+ascendable
+ascendance
+ascendancy
+ascendant
+ascended
+ascender
+ascenders
+ascendible
+ascending
+ascends
+ascension
+ascensions
+ascent
+ascertain
+ascertainable
+ascertained
+ascertaining
+ascertainment
+ascertains
+ascetic
+ascetical
+ascetically
+asceticism
+ascetics
+ascetic's
+asclepiadaceous
+ascorbic
+ascosporic
+ascosporous
+ascot
+ascribable
+ascribe
+ascribed
+ascribes
+ascribing
+ascription
+asdic
+asepsis
+aseptic
+aseptically
+asexual
+asexually
+ash
+ashamed
+ashamedly
+ashcan
+ashen
+ashes
+ashier
+ashlars
+ashore
+ashram
+ashtray
+ashtrays
+ashtray's
+ashy
+aside
+asides
+asinine
+asininely
+asininity
+ask
+askance
+asked
+askers
+askew
+asking
+asks
+aslant
+asleep
+aslope
+asocial
+asp
+asparagus
+aspartic
+aspect
+aspects
+aspect's
+aspectual
+aspen
+asperity
+asperse
+aspersed
+aspersing
+aspersion
+aspersions
+aspersion's
+asphalt
+asphalted
+aspheric
+asphodel
+asphyxia
+asphyxiate
+asphyxiation
+aspic
+aspidistra
+aspirant
+aspirants
+aspirant's
+aspirate
+aspirated
+aspirates
+aspirating
+aspiration
+aspirations
+aspiration's
+aspirator
+aspirators
+aspire
+aspired
+aspirer
+aspires
+aspirin
+aspiring
+aspirins
+asquint
+ass
+assai
+assail
+assailable
+assailant
+assailants
+assailant's
+assailed
+assailing
+assails
+assassin
+assassinate
+assassinated
+assassinates
+assassinating
+assassination
+assassinations
+assassinator
+assassins
+assassin's
+assault
+assaulted
+assaulter
+assaulting
+assaults
+assay
+assayed
+assayer
+assayers
+assaying
+assegai
+assemblage
+assemblages
+assemblage's
+assemble
+assembled
+assembler
+assemblers
+assembles
+assemblies
+assembling
+assembly
+assemblyman
+assembly's
+assemblywoman
+assent
+assented
+assenter
+assenting
+assents
+assert
+asserted
+asserter
+asserters
+asserting
+assertion
+assertions
+assertion's
+assertive
+assertively
+assertiveness
+asserts
+asses
+assess
+assessable
+assessed
+assesses
+assessing
+assessment
+assessments
+assessment's
+assessor
+assessors
+assessor's
+asset
+assets
+asset's
+asseverate
+asseveration
+assibilate
+assiduity
+assiduous
+assiduously
+assiduousness
+assign
+assignable
+assignation
+assignations
+assigned
+assignee
+assignees
+assignee's
+assigner
+assigners
+assigning
+assignment
+assignments
+assignment's
+assignor
+assigns
+assimilability
+assimilate
+assimilated
+assimilates
+assimilating
+assimilation
+assimilations
+assimilative
+assimilator
+assimilatory
+assist
+assistance
+assistances
+assistant
+assistants
+assistant's
+assistantship
+assistantships
+assisted
+assister
+assisting
+assists
+assize
+assizes
+assn
+associable
+associate
+associated
+associates
+associating
+association
+associational
+associations
+association's
+associative
+associatively
+assoil
+assonance
+assonant
+assort
+assorted
+assorting
+assortment
+assortments
+assortment's
+assorts
+ass's
+assuage
+assuaged
+assuagement
+assuages
+assuaging
+assuasive
+assumable
+assume
+assumed
+assumer
+assumes
+assuming
+assumption
+assumptions
+assumption's
+assumptive
+assurance
+assurances
+assurance's
+assure
+assured
+assuredly
+assuredness
+assures
+assurgent
+assuring
+assuror
+astatically
+astaticism
+astatine
+aster
+asteriated
+asterisk
+asterisks
+asterisk's
+asterism
+asterisms
+astern
+asteroid
+asteroids
+asteroid's
+asters
+aster's
+asthenia
+asthma
+asthmatic
+asthmatically
+astigmatic
+astigmatism
+astir
+astonish
+astonished
+astonishes
+astonishing
+astonishingly
+astonishment
+astound
+astounded
+astounding
+astoundingly
+astounds
+astraddle
+astragal
+astrakhan
+astral
+astraphobia
+astray
+astride
+astringency
+astringent
+astringently
+astrobiology
+astrobotany
+astrocompass
+astrodome
+astrolabe
+astrologer
+astrologers
+astrologer's
+astrological
+astrologically
+astrology
+astrometry
+astron
+astronaut
+astronautic
+astronautically
+astronautics
+astronauts
+astronaut's
+astronavigation
+astronomer
+astronomers
+astronomer's
+astronomic
+astronomical
+astronomically
+astronomy
+astrophotography
+astrophysical
+astrophysicist
+astrophysicists
+astrophysicist's
+astrophysics
+astrosphere
+astute
+astutely
+astuteness
+asunder
+asylum
+asylums
+asymmetric
+asymmetrical
+asymmetrically
+asymmetries
+asymmetry
+asymptomatic
+asymptomatically
+asymptote
+asymptotes
+asymptote's
+asymptotic
+asymptotical
+asymptotically
+async
+asynchronise
+asynchronised
+asynchronises
+asynchronising
+asynchronism
+asynchronous
+asynchronously
+asynchrony
+asyndetically
+asyndeton
+at
+ataman
+ataractic
+atavism
+atavist
+atavistic
+atavistically
+ataxia
+ataxic
+ate
+atelier
+atheism
+atheist
+atheistic
+atheistically
+atheists
+atheist's
+athenaeum
+athermanous
+atherosclerosis
+athirst
+athlete
+athletes
+athlete's
+athletic
+athletically
+athleticism
+athletics
+athodyd
+athwart
+athwartships
+atilt
+atlantes
+atlas
+atman
+atmosphere
+atmospheres
+atmosphere's
+atmospheric
+atmospherically
+atmospherics
+atoll
+atolls
+atoll's
+atom
+atomic
+atomically
+atomicity
+atomics
+atomisation
+atomisation's
+atomise
+atomised
+atomiser
+atomisers
+atomises
+atomising
+atomism
+atomist
+atomistic
+atoms
+atom's
+atomy
+atonal
+atonalism
+atonalistic
+atonality
+atonally
+atone
+atoned
+atonement
+atones
+atoning
+atop
+atrabilious
+atremble
+atrium
+atriums
+atrocious
+atrociously
+atrociousness
+atrocities
+atrocity
+atrocity's
+atrophic
+atrophied
+atrophies
+atrophy
+atrophying
+atropine
+attach
+attachable
+attached
+attaches
+attaching
+attachment
+attachments
+attachment's
+attack
+attackable
+attacked
+attacker
+attackers
+attacker's
+attacking
+attacks
+attain
+attainability
+attainable
+attainableness
+attainably
+attainder
+attained
+attaining
+attainment
+attainments
+attainment's
+attains
+attaint
+attar
+attempt
+attemptable
+attempted
+attempter
+attempters
+attempting
+attempts
+attend
+attendance
+attendances
+attendance's
+attendant
+attendants
+attendant's
+attended
+attendee
+attendees
+attendee's
+attending
+attends
+attention
+attentions
+attention's
+attentive
+attentively
+attentiveness
+attenuate
+attenuated
+attenuates
+attenuating
+attenuation
+attenuator
+attenuators
+attenuator's
+attest
+attestation
+attested
+attester
+attesting
+attests
+attic
+attics
+attic's
+attire
+attired
+attires
+attiring
+attitude
+attitudes
+attitude's
+attitudinal
+attitudinally
+attitudinise
+attitudinised
+attitudinises
+attitudinising
+attorney
+attorneys
+attorney's
+attract
+attractable
+attractant
+attracted
+attracting
+attraction
+attractions
+attraction's
+attractive
+attractively
+attractiveness
+attractor
+attractors
+attractor's
+attracts
+attributable
+attribute
+attributed
+attributer
+attributes
+attributing
+attribution
+attributions
+attributive
+attributively
+attrition
+attune
+attuned
+attunes
+attuning
+atwitter
+atypical
+atypically
+auburn
+auction
+auctioned
+auctioneer
+auctioneers
+auctioneer's
+auctioning
+auctorial
+audacious
+audaciously
+audaciousness
+audacity
+audibility
+audible
+audibly
+audience
+audiences
+audience's
+audient
+audio
+audiogram
+audiograms
+audiogram's
+audiologist
+audiologists
+audiologist's
+audiometer
+audiometers
+audiometer's
+audiometric
+audiophile
+audiotape
+audiovisual
+audiovisuals
+audit
+auditable
+audited
+auditing
+audition
+auditioned
+auditioning
+auditions
+audition's
+auditor
+auditorium
+auditoriums
+auditors
+auditor's
+auditory
+audits
+auger
+augers
+auger's
+aught
+augment
+augmentable
+augmentation
+augmentations
+augmentative
+augmented
+augmenter
+augmenting
+augments
+augur
+augurs
+augury
+august
+augustly
+augustness
+auk
+auklet
+auld
+aunt
+auntie
+aunts
+aunt's
+aura
+aural
+aurally
+auras
+aura's
+aureate
+aureole
+auricle
+auricular
+auriferous
+aurochs
+aurora
+aurous
+auscultation
+auscultations
+auspicate
+auspice
+auspices
+auspicious
+auspiciously
+auspiciousness
+austenite
+austenitic
+austere
+austerely
+austereness
+austerity
+austral
+australopithecine
+autarchy
+autarky
+auteur
+authentic
+authentically
+authenticate
+authenticated
+authenticates
+authenticating
+authentication
+authentications
+authenticator
+authenticators
+authenticity
+author
+authored
+authoress
+authorial
+authoring
+authorisation
+authorisations
+authorisation's
+authorise
+authorised
+authoriser
+authorisers
+authorises
+authorising
+authoritarian
+authoritarianism
+authoritative
+authoritatively
+authoritativeness
+authorities
+authority
+authority's
+authors
+author's
+authorship
+autism
+autistic
+auto
+autoantibody
+autobahn
+autobiographic
+autobiographical
+autobiographically
+autobiographies
+autobiography
+autobiography's
+autocatalysis
+autocatalytic
+autocephalous
+autochthon
+autochthonous
+autoclave
+autoclaved
+autocollimator
+autocorrelate
+autocorrelated
+autocorrelates
+autocorrelating
+autocorrelation
+autocorrelations
+autocracies
+autocracy
+autocrat
+autocratic
+autocratically
+autocrats
+autocrat's
+autocross
+autocue
+autodial
+autodidact
+autodidactic
+autodyne
+autoerotic
+autoeroticism
+autoerotism
+autogenesis
+autogenetic
+autogenic
+autogenously
+autogiro
+autograph
+autographed
+autographic
+autographically
+autographing
+autographs
+autography
+autogyro
+autohypnosis
+autoimmune
+autoimmunisation
+autoimmunity
+autoinfection
+autoinoculation
+autointoxication
+autoloader
+autolysin
+autolysis
+automaker
+automat
+automata
+automate
+automated
+automates
+automatic
+automatically
+automatics
+automating
+automation
+automatism
+automatist
+automaton
+automatons
+automobile
+automobiles
+automobile's
+automotive
+autonomic
+autonomist
+autonomous
+autonomously
+autonomy
+autopilot
+autopilots
+autopilot's
+autoplastic
+autopsied
+autopsies
+autopsy
+autoradiogram
+autoradiograph
+autoradiography
+autoregressive
+autorotation
+autos
+auto's
+autosuggest
+autosuggestibility
+autosuggestible
+autosuggestion
+autotimer
+autotoxaemia
+autotoxin
+autotransformer
+autotrophic
+autotrophy
+autotype
+autumn
+autumnal
+autumnally
+autumns
+autumn's
+aux
+auxanometer
+auxiliaries
+auxiliary
+auxotroph
+avadavat
+avail
+availabilities
+availability
+available
+availableness
+availably
+availed
+availing
+avails
+avalanche
+avalanched
+avalanches
+avalanching
+avarice
+avaricious
+avariciously
+avariciousness
+avatar
+avec
+avenge
+avenged
+avenger
+avenges
+avenging
+avenue
+avenues
+avenue's
+aver
+average
+averaged
+averagely
+averages
+averaging
+averment
+averred
+averring
+avers
+averse
+aversely
+averseness
+aversion
+aversions
+aversion's
+aversive
+avert
+averted
+averting
+averts
+avian
+aviaries
+aviary
+aviation
+aviations
+aviator
+aviators
+aviator's
+aviatress
+aviatrix
+aviculture
+aviculturist
+avid
+avidity
+avidly
+avidness
+avifauna
+avifaunal
+avionic
+avionics
+avocado
+avocados
+avocation
+avocations
+avocation's
+avocet
+avoid
+avoidable
+avoidably
+avoidance
+avoided
+avoider
+avoiders
+avoiding
+avoids
+avoirdupois
+avouch
+avouchment
+avow
+avowal
+avowed
+avowedly
+avower
+avows
+avulse
+avulsing
+avulsion
+avuncular
+await
+awaited
+awaiting
+awaits
+awake
+awaked
+awaken
+awakened
+awakener
+awakening
+awakens
+awakes
+awaking
+award
+awardable
+awarded
+awarder
+awarders
+awarding
+awards
+aware
+awareness
+awash
+away
+awe
+aweather
+awed
+aweigh
+awesome
+awesomely
+awesomeness
+awestricken
+awestruck
+awful
+awfully
+awfulness
+awheel
+awhile
+awhirl
+awing
+awkward
+awkwardly
+awkwardness
+awl
+awls
+awl's
+awn
+awning
+awnings
+awning's
+awoke
+awoken
+awry
+axe
+axed
+axel
+axes
+axial
+axially
+axing
+axiological
+axiology
+axiom
+axiomatic
+axiomatically
+axioms
+axiom's
+axis
+axle
+axles
+axle's
+axletree
+axolotl
+axolotls
+axolotl's
+axon
+axons
+axon's
+ayah
+aye
+ayes
+azalea
+azaleas
+azalea's
+azan
+azimuth
+azimuthally
+azimuths
+azimuth's
+azoth
+azotise
+azotised
+azotises
+azotising
+azure
+azurite
+baa
+baas
+babble
+babbled
+babbler
+babbles
+babbling
+babe
+babes
+babe's
+babied
+babies
+baboon
+baboonish
+babul
+babushka
+baby
+babyhood
+babying
+babyish
+baby's
+babysat
+babysitter
+babysitters
+babysitting
+baccalaureate
+baccarat
+bacchanal
+bacchanalia
+bacchanalian
+bacchant
+bacchante
+bacchantes
+bacchantic
+bacchius
+bachelor
+bachelorhood
+bachelorise
+bachelors
+bachelor's
+bacillary
+bacilli
+bacillus
+back
+backache
+backaches
+backache's
+backbench
+backbencher
+backbenchers
+backbite
+backbiter
+backblocks
+backboard
+backbone
+backbones
+backbone's
+backbreaker
+backbreaking
+backchat
+backcloth
+backcomb
+backcountry
+backcourt
+backcross
+backdate
+backdated
+backdates
+backdating
+backdrop
+backdrops
+backdrop's
+backed
+backend
+backer
+backers
+backfield
+backfill
+backfilled
+backfilling
+backfills
+backfire
+backfired
+backfires
+backfiring
+backgammon
+backgammon's
+background
+backgrounds
+background's
+backhand
+backhanded
+backhandedly
+backhander
+backhoe
+backhouse
+backing
+backlash
+backlasher
+backless
+backlog
+backlogs
+backlog's
+backmost
+backorder
+backpack
+backpacker
+backpackers
+backpacks
+backpack's
+backplane
+backplanes
+backplane's
+backrest
+backs
+backsaw
+backscatter
+backscattered
+backscattering
+backscatters
+backscratcher
+backseat
+backside
+backslap
+backslapper
+backslash
+backslashes
+backslide
+backslider
+backspace
+backspaced
+backspaces
+backspacing
+backspin
+backstabber
+backstabbing
+backstage
+backstairs
+backstay
+backstitch
+backstitched
+backstitches
+backstitching
+backstop
+backstreet
+backstretch
+backstroke
+backswept
+backswing
+backsword
+backtrack
+backtracked
+backtracker
+backtrackers
+backtracking
+backtracks
+backup
+backups
+backward
+backwardation
+backwardly
+backwardness
+backwards
+backwash
+backwater
+backwaters
+backwater's
+backwoods
+backwoodsman
+backyard
+backyards
+backyard's
+bacon
+bacteraemia
+bacteria
+bacterial
+bacterially
+bactericidal
+bactericide
+bacteriological
+bacteriology
+bacterium
+baculiform
+bad
+baddie
+bade
+badge
+badger
+badgered
+badgering
+badgers
+badger's
+badges
+badinage
+badlands
+badly
+badminton
+badness
+baffle
+baffled
+bafflement
+baffler
+bafflers
+baffles
+baffling
+bafflingly
+bag
+bagatelle
+bagatelles
+bagatelle's
+bagel
+bagels
+bagel's
+bagful
+baggage
+bagged
+bagger
+baggers
+bagger's
+baggier
+baggies
+baggily
+bagginess
+bagging
+baggy
+bagman
+bagnio
+bagpipe
+bagpiper
+bagpipes
+bagpipe's
+bags
+bag's
+baguette
+bagwig
+bagworm
+bah
+baht
+bail
+bailer
+bailie
+bailiff
+bailiffs
+bailiff's
+bailing
+bailiwick
+bailment
+bailsman
+bait
+baited
+baiter
+baiting
+baits
+baize
+bake
+baked
+baker
+bakeries
+bakers
+bakery
+bakery's
+bakes
+bakeshop
+baking
+baklava
+baksheesh
+balaclava
+balalaika
+balalaikas
+balalaika's
+balance
+balanced
+balancer
+balancers
+balances
+balancing
+balas
+balata
+balbriggan
+balconied
+balconies
+balcony
+balcony's
+bald
+balder
+balderdash
+baldhead
+balding
+baldish
+baldly
+baldness
+baldpate
+baldric
+baldy
+bale
+baled
+baleen
+balefire
+baleful
+balefully
+balefulness
+baler
+balers
+bales
+baling
+balk
+balkanisation
+balkanise
+balkanised
+balkanising
+balked
+balkier
+balkiness
+balking
+balks
+balky
+ball
+ballad
+ballade
+balladeer
+balladry
+ballads
+ballad's
+ballast
+ballasts
+ballast's
+balled
+ballerina
+ballerinas
+ballerina's
+ballet
+balletomane
+balletomania
+ballets
+ballet's
+ballflower
+balling
+ballista
+ballistic
+ballistics
+ballonet
+balloon
+ballooned
+ballooner
+ballooners
+ballooning
+balloonist
+balloons
+ballot
+balloted
+balloting
+ballots
+ballot's
+ballottement
+ballplayer
+ballplayers
+ballplayer's
+ballroom
+ballrooms
+ballroom's
+balls
+ballyhoo
+balm
+balmier
+balmily
+balminess
+balms
+balm's
+balmy
+balneal
+balneology
+baloney
+balsa
+balsam
+balsamic
+balsamiferous
+balsams
+baluster
+balustrade
+balustrades
+balustrade's
+bam
+bambino
+bamboo
+bamboos
+bamboozle
+bamboozled
+bamboozlement
+bamboozles
+bamboozling
+ban
+banal
+banality
+banally
+banana
+bananas
+banana's
+banc
+band
+bandage
+bandaged
+bandager
+bandages
+bandaging
+bandana
+bandanna
+bandbox
+bandeau
+bandeaux
+banded
+bandicoot
+bandied
+bandies
+banding
+bandit
+banditry
+bandits
+bandit's
+banditti
+bandleader
+bandmaster
+bandoleer
+bandoleers
+bandolier
+bandore
+bands
+bandsman
+bandstand
+bandstands
+bandstand's
+bandwagon
+bandwagons
+bandwagon's
+bandwidth
+bandwidths
+bandy
+bandying
+bane
+baneberry
+baneful
+banefully
+bang
+banged
+banger
+banging
+bangle
+bangles
+bangle's
+bangs
+bangtail
+banish
+banished
+banisher
+banishes
+banishing
+banishment
+banister
+banisters
+banister's
+banjo
+banjoist
+banjos
+banjo's
+bank
+bankable
+bankbook
+bankbooks
+banked
+banker
+bankers
+banking
+banknote
+banknotes
+bankroll
+bankroller
+bankrupt
+bankruptcies
+bankruptcy
+bankruptcy's
+bankrupted
+bankrupting
+bankrupts
+banks
+banned
+banner
+bannerette
+banners
+banner's
+banning
+bannock
+banns
+banquet
+banqueted
+banqueter
+banqueting
+banquets
+banquette
+bans
+ban's
+banshee
+banshees
+banshee's
+bantam
+bantamweight
+banter
+bantered
+banterer
+bantering
+banteringly
+banters
+bantling
+banyan
+banzai
+baobab
+baptise
+baptised
+baptiser
+baptisers
+baptises
+baptising
+baptism
+baptismal
+baptismally
+baptisms
+baptism's
+baptistery
+bar
+barb
+barbarian
+barbarianism
+barbarians
+barbarian's
+barbaric
+barbarically
+barbarisation
+barbarise
+barbarised
+barbarises
+barbarising
+barbarism
+barbarities
+barbarity
+barbarous
+barbarously
+barbate
+barbecue
+barbecued
+barbecues
+barbecuing
+barbed
+barbell
+barbells
+barbell's
+barber
+barbered
+barbering
+barberry
+barbers
+barbershop
+barbet
+barbette
+barbican
+barbital
+barbiturate
+barbiturates
+barbs
+barbwire
+barcarole
+bard
+bards
+bard's
+bare
+bareback
+bared
+barefaced
+barefacedly
+barefacedness
+barefoot
+barefooted
+barehanded
+bareheaded
+barely
+bareness
+barer
+bares
+baresark
+barest
+barflies
+barfly
+barfly's
+bargain
+bargained
+bargaining
+bargains
+barge
+bargeboard
+barged
+bargee
+bargeman
+bargepole
+barges
+barging
+baric
+barilla
+baring
+barite
+baritone
+baritones
+baritone's
+barium
+bark
+barked
+barkeep
+barkeeper
+barker
+barkers
+barkier
+barking
+barks
+barky
+barley
+barleycorn
+barmaid
+barman
+barmier
+barmy
+barn
+barnacle
+barnacled
+barns
+barn's
+barnstorm
+barnstormed
+barnstormer
+barnstorming
+barnstorms
+barnyard
+barnyards
+barnyard's
+barograms
+barogram's
+barograph
+barometer
+barometers
+barometer's
+barometric
+barometrical
+barometrically
+barometry
+baron
+baronage
+baroness
+baronet
+baronetage
+baronetcy
+barong
+baronial
+baronies
+barons
+baron's
+barony
+barony's
+baroque
+baroquely
+barouche
+barque
+barrack
+barracker
+barracks
+barracuda
+barracudas
+barracuda's
+barrage
+barraged
+barrages
+barrage's
+barraging
+barramundi
+barrater
+barratry
+barred
+barrel
+barrelful
+barrelhouse
+barrelled
+barrelling
+barrels
+barrel's
+barrelsful
+barren
+barrenness
+barrens
+barrette
+barrettes
+barrette's
+barricade
+barricades
+barricade's
+barrier
+barriers
+barrier's
+barring
+barrio
+barrister
+barristers
+barroom
+barrooms
+barrow
+barrows
+bars
+bar's
+barstool
+barstools
+barstool's
+bartend
+bartender
+bartenders
+bartender's
+barter
+bartered
+barterer
+bartering
+barters
+bartizan
+barware
+barycentre
+baryon
+baryonic
+baryons
+baryon's
+bas
+basal
+basally
+basalt
+basaltic
+bascule
+base
+baseball
+baseballs
+baseball's
+baseband
+baseboard
+baseboards
+baseboard's
+baseborn
+baseburner
+based
+baseless
+baseline
+baselines
+baseline's
+basely
+baseman
+basemen
+basement
+basements
+basement's
+baseness
+basenji
+baser
+bases
+basest
+bash
+bashed
+basher
+bashes
+bashful
+bashfully
+bashfulness
+bashibazouk
+bashing
+basic
+basically
+basics
+basification
+basify
+basil
+basilar
+basilica
+basilisk
+basin
+basined
+basinet
+basing
+basins
+basin's
+basis
+bask
+basked
+basket
+basketball
+basketballs
+basketball's
+basketful
+basketlike
+basketry
+baskets
+basket's
+basketwork
+basking
+basophile
+basophilic
+bass
+basses
+basset
+bassinet
+bassinets
+bassinet's
+bassist
+basso
+bassoon
+bassoonist
+bassoonists
+bassoonist's
+bassoons
+bassoon's
+bass's
+basswood
+bastard
+bastardisation
+bastardisations
+bastardisation's
+bastardise
+bastardised
+bastardises
+bastardising
+bastardly
+bastardry
+bastards
+bastard's
+baste
+basted
+bastes
+bastinado
+basting
+bastion
+bastioned
+bastions
+bastion's
+bat
+batboy
+batch
+batched
+batcher
+batches
+batching
+bate
+bateau
+bated
+bates
+batfish
+batfowl
+bath
+bathe
+bathed
+bather
+bathers
+bathes
+bathetic
+bathhouse
+bathhouses
+bathing
+bathometer
+bathometers
+bathometer's
+bathos
+bathrobe
+bathrobes
+bathrobe's
+bathroom
+bathrooms
+bathroom's
+baths
+bathtub
+bathtubs
+bathtub's
+bathwater
+bathymetry
+bathyscaph
+bathysphere
+batik
+bating
+batiste
+batman
+baton
+batons
+baton's
+bats
+bat's
+batsman
+battalion
+battalions
+battalion's
+batted
+battement
+batten
+battened
+battening
+battens
+batter
+battered
+batteries
+battering
+batters
+battery
+battery's
+battier
+battiness
+batting
+battle
+battled
+battledore
+battlefield
+battlefields
+battlefield's
+battlefront
+battlefronts
+battlefront's
+battleground
+battlegrounds
+battleground's
+battlement
+battlemented
+battlements
+battlement's
+battler
+battlers
+battles
+battleship
+battleships
+battleship's
+battlewagon
+battling
+battue
+batty
+batwing
+batwings
+bauble
+baubles
+bauble's
+baud
+bauds
+baulk
+baulked
+baulking
+baulks
+bauxite
+bawd
+bawdier
+bawdily
+bawdiness
+bawdry
+bawdy
+bawdyhouse
+bawdyhouses
+bawl
+bawled
+bawler
+bawling
+bawls
+bay
+bayberries
+bayberry
+bayed
+baying
+bayonet
+bayoneted
+bayoneting
+bayonets
+bayonet's
+bayou
+bayous
+bayou's
+bays
+bazaar
+bazaars
+bazaar's
+bazooka
+bazookas
+bdellium
+be
+beach
+beachcomber
+beachcombers
+beached
+beaches
+beachfront
+beachhead
+beachheads
+beachhead's
+beaching
+beachside
+beachwear
+beacon
+beaconed
+beaconing
+beacons
+beacon's
+bead
+beaded
+beading
+beadle
+beadledom
+beadles
+beadle's
+beadroll
+beads
+beadsman
+beadwork
+beady
+beagle
+beagles
+beagle's
+beak
+beaked
+beaker
+beakers
+beaks
+beam
+beamed
+beamer
+beamers
+beaming
+beamish
+beamishly
+beams
+beamy
+bean
+beanbag
+beanbags
+beanbag's
+beanery
+beanie
+beano
+beanpole
+beans
+bear
+bearable
+bearably
+bearbaiting
+bearberry
+beard
+bearded
+beardedness
+beardless
+beards
+bearer
+bearers
+bearing
+bearings
+bearish
+bearishly
+bearishness
+bears
+bearskin
+beast
+beastie
+beasties
+beastlier
+beastliness
+beastly
+beasts
+beat
+beatable
+beaten
+beater
+beaters
+beatific
+beatifically
+beatification
+beatify
+beating
+beatings
+beatitude
+beatitudes
+beatitude's
+beatnik
+beatniks
+beatnik's
+beats
+beau
+beaus
+beau's
+beauteous
+beauteously
+beauteousness
+beautician
+beauticians
+beauties
+beautification
+beautifications
+beautified
+beautifier
+beautifiers
+beautifies
+beautiful
+beautifully
+beautifulness
+beautify
+beautifying
+beauty
+beauty's
+beaux
+beaver
+beaverboard
+beavers
+beaver's
+bebop
+bebopper
+becalm
+becalmed
+becalming
+becalms
+became
+because
+beccafico
+bechance
+beck
+beckon
+beckoned
+beckoning
+beckons
+becloud
+become
+becomes
+becoming
+becomingly
+bed
+bedaub
+bedaubing
+bedazzle
+bedazzled
+bedazzlement
+bedazzles
+bedazzling
+bedbug
+bedbugs
+bedbug's
+bedchamber
+bedclothes
+beddable
+bedded
+bedding
+bedeck
+bedevil
+bedevilled
+bedevilling
+bedevilment
+bedevils
+bedew
+bedfast
+bedfellow
+bedight
+bedim
+bedimmed
+bedimming
+bedizen
+bedlam
+bedlamite
+bedpan
+bedpans
+bedpan's
+bedplate
+bedpost
+bedposts
+bedpost's
+bedraggle
+bedraggled
+bedrail
+bedridden
+bedrock
+bedrock's
+bedroll
+bedroom
+bedrooms
+bedroom's
+beds
+bed's
+bedside
+bedsore
+bedspread
+bedspreads
+bedspread's
+bedspring
+bedsprings
+bedspring's
+bedstead
+bedsteads
+bedstead's
+bedstraw
+bedtime
+bedwetting
+bee
+beebread
+beech
+beechen
+beechnut
+beef
+beefcake
+beefeater
+beefed
+beefier
+beefing
+beefs
+beefsteak
+beefwood
+beefy
+beehive
+beehives
+beehive's
+beekeeper
+beekeeping
+beelike
+beeline
+been
+beep
+beeped
+beeper
+beeping
+beeps
+beer
+beerier
+beers
+beery
+bees
+beestings
+beeswax
+beeswing
+beet
+beetle
+beetled
+beetles
+beetle's
+beetling
+beetroot
+beetroots
+beets
+beet's
+beeves
+befall
+befallen
+befalling
+befalls
+befell
+befit
+befits
+befitted
+befitting
+befittingly
+befog
+befogged
+befogging
+befogs
+befool
+before
+beforehand
+beforetime
+befoul
+befouled
+befouling
+befouls
+befriend
+befriended
+befriending
+befriends
+befuddle
+befuddled
+befuddlement
+befuddles
+befuddling
+beg
+began
+begat
+beget
+begets
+begetter
+begetting
+beggar
+beggared
+beggaring
+beggarliness
+beggarly
+beggars
+beggary
+begged
+begging
+begin
+beginner
+beginners
+beginner's
+beginning
+beginnings
+beginning's
+begins
+begird
+begonia
+begot
+begotten
+begrime
+begrimed
+begriming
+begrudge
+begrudged
+begrudges
+begrudging
+begrudgingly
+begs
+beguile
+beguiled
+beguilement
+beguiler
+beguiles
+beguiling
+beguilingly
+beguine
+begum
+begun
+behalf
+behave
+behaved
+behaves
+behaving
+behaviour
+behavioural
+behaviourally
+behaviourism
+behaviourisms
+behaviourism's
+behaviouristic
+behaviours
+behaviour's
+behead
+beheading
+beheld
+behemoth
+behemoths
+behest
+behind
+behindhand
+behold
+beholden
+beholder
+beholders
+beholding
+beholds
+behove
+behoved
+behoves
+behoving
+beige
+being
+beings
+bejewel
+bejewelled
+bejewelling
+belabour
+belaboured
+belabouring
+belabours
+belated
+belatedly
+belatedness
+belay
+belayed
+belaying
+belays
+belch
+belched
+belches
+belching
+beldam
+beleaguer
+belemnite
+belfries
+belfry
+belfry's
+belie
+belied
+belief
+beliefs
+belief's
+belier
+belies
+believability
+believable
+believably
+believe
+believed
+believer
+believers
+believes
+believing
+belike
+belittle
+belittled
+belittlement
+belittler
+belittles
+belittling
+bell
+belladonna
+bellbird
+bellboy
+bellboys
+bellboy's
+belle
+belles
+belle's
+belletrist
+bellflower
+bellhop
+bellhops
+bellhop's
+bellicose
+bellicosely
+bellicosity
+bellied
+bellies
+belligerence
+belligerency
+belligerent
+belligerently
+belligerents
+belligerent's
+bellman
+bellmen
+bellow
+bellowed
+bellowing
+bellows
+bells
+bell's
+bellum
+bellwether
+bellwethers
+bellwether's
+bellwort
+belly
+bellyache
+bellyacher
+bellyaching
+bellyband
+bellybutton
+bellyful
+bellying
+belly's
+belong
+belonged
+belonging
+belongingness
+belongings
+belongs
+beloved
+below
+belowground
+belt
+belted
+belting
+belts
+beltway
+beluga
+beluga's
+belvedere
+belying
+bemire
+bemoan
+bemoaned
+bemoaning
+bemoans
+bemuse
+bemused
+bemusedly
+bemusement
+bench
+benched
+bencher
+benches
+benching
+benchmark
+benchmarking
+benchmarks
+benchmark's
+bend
+bendable
+bended
+bender
+benders
+bending
+bends
+bendy
+beneath
+benediction
+benedictions
+benediction's
+benedictory
+benefaction
+benefactor
+benefactors
+benefactor's
+benefactress
+benefice
+beneficence
+beneficences
+beneficent
+beneficently
+beneficial
+beneficially
+beneficiaries
+beneficiary
+beneficiate
+beneficiation
+benefit
+benefited
+benefiting
+benefits
+benevolence
+benevolent
+benevolently
+benevolentness
+bengaline
+benighted
+benightedly
+benign
+benignancy
+benignant
+benignantly
+benignity
+benignly
+bent
+benthic
+benthonic
+benthos
+bents
+bentwood
+benumb
+benzene
+benzoate
+benzoic
+benzyl
+bequeath
+bequeathed
+bequeathing
+bequest
+bequests
+bequest's
+berate
+berated
+berates
+berating
+berceuse
+berceuses
+bereave
+bereaved
+bereavement
+bereavements
+bereaves
+bereaving
+bereft
+beret
+berets
+beret's
+berg
+bergamot
+bergs
+beribboned
+beriberi
+berk
+berkelium
+berks
+berretta
+berried
+berries
+berry
+berrylike
+berry's
+berserk
+berserker
+berth
+berthed
+berthing
+berths
+beryl
+beryllium
+beseech
+beseeches
+beseeching
+beseechingly
+beseem
+beset
+besetment
+besets
+besetting
+beside
+besides
+besiege
+besieged
+besieger
+besiegers
+besieging
+besmear
+besmirch
+besmirched
+besmirches
+besmirching
+besom
+besot
+besotted
+besotting
+besought
+bespangle
+bespatter
+bespeak
+bespeaks
+bespectacled
+bespoke
+bespoken
+besprent
+besprinkle
+best
+bestead
+besteaded
+besteading
+bested
+bester
+bestial
+bestialise
+bestialised
+bestialises
+bestialising
+bestiality
+bestially
+bestiary
+besting
+bestir
+bestirring
+bestow
+bestowal
+bestowed
+bestrew
+bestride
+bestrides
+bestriding
+bestrode
+bests
+bestseller
+bestsellers
+bestseller's
+bestselling
+bet
+beta
+betake
+betas
+betel
+bethel
+bethink
+bethought
+betide
+betimes
+betoken
+betokened
+betokening
+betony
+betook
+betray
+betrayal
+betrayed
+betrayer
+betraying
+betrays
+betroth
+betrothal
+betrothals
+betrothed
+bets
+bet's
+betted
+better
+bettered
+bettering
+betterment
+betterments
+betters
+betting
+bettor
+between
+betweenwhiles
+betwixt
+bevel
+bevelled
+beveller
+bevellers
+bevelling
+bevels
+beverage
+beverages
+beverage's
+bevies
+bevy
+bewail
+bewailed
+bewailing
+bewails
+beware
+bewigged
+bewilder
+bewildered
+bewilderedly
+bewilderedness
+bewildering
+bewilderingly
+bewilderment
+bewilders
+bewitch
+bewitched
+bewitchery
+bewitches
+bewitching
+bewitchingly
+bewitchment
+beyond
+bezel
+bezique
+bhang
+biannual
+biannulate
+bias
+biased
+biases
+biasing
+biasness
+biathlon
+biauriculate
+biaxial
+bib
+bibbed
+bibber
+bibbing
+bibcock
+bibelot
+bibelots
+bible
+bibles
+bible's
+biblical
+biblically
+bibliographer
+bibliographic
+bibliographical
+bibliographically
+bibliographies
+bibliography
+bibliography's
+bibliolater
+bibliolatrous
+bibliolatry
+bibliomancy
+bibliomania
+bibliomaniac
+bibliomaniacal
+bibliopegy
+bibliophile
+bibliophiles
+bibliophilic
+bibliophilism
+bibliophilist
+bibliopole
+bibliopolic
+bibliotheca
+bibs
+bib's
+bibulous
+bibulously
+bibulousness
+bicameral
+bicameralism
+bicarbonate
+bicentenary
+bicentennial
+bicep
+biceps
+bicker
+bickered
+bickerer
+bickering
+bickers
+bicolour
+bicoloured
+biconcave
+biconcavity
+biconvex
+biconvexity
+bicorn
+bicultural
+biculturalism
+bicuspid
+bicuspidate
+bicycle
+bicycled
+bicycler
+bicyclers
+bicycles
+bicycling
+bicyclist
+bid
+biddable
+biddably
+bidden
+bidder
+bidders
+bidder's
+biddies
+bidding
+biddy
+bide
+bided
+bides
+bidet
+biding
+bidirectional
+bids
+bid's
+biennial
+biennially
+biennium
+bier
+bifacial
+biff
+bifid
+bifidity
+bifidly
+bifilar
+bifilarly
+biflagellate
+bifocal
+bifocals
+biform
+bifurcate
+bifurcated
+bifurcates
+bifurcating
+bifurcation
+bifurcations
+big
+bigamist
+bigamous
+bigamously
+bigamy
+bigger
+biggest
+bighead
+bigheaded
+bighearted
+bigheartedly
+bigheartedness
+bighorn
+bighorns
+bighorn's
+bight
+bights
+bight's
+bigly
+bigmouth
+bigmouthed
+bigness
+bignonia
+bignoniaceous
+bigot
+bigoted
+bigotedly
+bigotry
+bigots
+bigot's
+bigwig
+bijou
+bijouterie
+bike
+biked
+biker
+bikers
+biker's
+bikes
+bike's
+bikeway
+biking
+bikini
+bikinied
+bikinis
+bikini's
+bilabial
+bilateral
+bilateralism
+bilaterally
+bilateralness
+bilberry
+bile
+bilge
+bilged
+bilges
+bilge's
+bilging
+bilgy
+bilinear
+bilingual
+bilingualism
+bilingually
+bilinguals
+bilious
+biliously
+biliousness
+bilk
+bilked
+bilker
+bilking
+bilks
+bill
+billable
+billabong
+billboard
+billboards
+billboard's
+billed
+billet
+billeted
+billeting
+billets
+billfish
+billfold
+billfolds
+billfold's
+billhead
+billhook
+billiard
+billiards
+billing
+billings
+billion
+billionaire
+billions
+billionth
+billon
+billow
+billowed
+billowing
+billows
+billowy
+billposter
+billposting
+bills
+billycock
+biltong
+bimanous
+bimanual
+bimanually
+bimbo
+bimestrial
+bimetal
+bimetallic
+bimetallism
+bimetallist
+bimetallistic
+bimodal
+bimodality
+bimolecular
+bimonthlies
+bimonthly
+bimorph
+bin
+binaries
+binary
+binate
+binaural
+binaurally
+bind
+binder
+binders
+bindery
+binding
+bindingly
+bindings
+bindle
+binds
+bindweed
+binge
+binges
+bingo
+bingos
+binnacle
+binned
+binning
+binocular
+binocularity
+binocularly
+binoculars
+binomial
+binomially
+binominal
+bins
+bin's
+bint
+binturong
+binuclear
+bio
+bioactive
+bioassay
+bioastronautics
+biocatalyst
+biocenology
+biochemical
+biochemist
+biochemistry
+biochemists
+biochip
+biochips
+biocide
+bioclimatic
+bioclimatology
+biodegradability
+biodegradable
+biodegradation
+biodegrade
+bioelectric
+bioelectrical
+bioelectricity
+bioenergetics
+bioengineering
+bioenvironmental
+biofeedback
+bioflavonoid
+biog
+biogenesis
+biogenetic
+biogenetically
+biogenic
+biogeochemical
+biogeochemistry
+biogeography
+biographer
+biographers
+biographer's
+biographic
+biographical
+biographically
+biographies
+biography
+biography's
+bioinstrumentation
+biologic
+biological
+biologically
+biologist
+biologists
+biologist's
+biology
+bioluminescence
+bioluminescent
+biolysis
+biomass
+biomaterial
+biome
+biomedical
+biomedicine
+biometric
+biometrical
+biometrically
+biometrics
+biometry
+bionic
+bionics
+bionomic
+bionomical
+bionomically
+bionomics
+biophysical
+biophysically
+biophysicist
+biophysicists
+biophysics
+biopolymer
+biopolymers
+biopsies
+biopsy
+biosatellite
+bioscience
+biosciences
+bioscope
+bioscopy
+biosphere
+biostatics
+biostatistics
+biosynthesis
+biosynthesised
+biosynthetic
+biosynthetically
+biota
+biotechnological
+biotechnology
+biotelemetry
+biotic
+biotin
+biotitic
+biotope
+biotransformation
+biotype
+bipartisan
+bipartisanism
+bipartisanship
+bipartite
+bipartitely
+bipartition
+biped
+bipedal
+bipeds
+bipetalous
+biphenyl
+biplane
+biplanes
+biplane's
+bipod
+bipolar
+bipolarisation
+bipolarise
+bipolarises
+bipolarity
+bipropellant
+biquadrate
+biracial
+biracialism
+birch
+birchen
+birches
+bird
+birdbath
+birdbaths
+birdbath's
+birdbrain
+birdcage
+birdcages
+birdcage's
+birdcall
+birder
+birdhouse
+birdie
+birdied
+birdies
+birdlike
+birdlime
+birdman
+birds
+bird's
+birdseed
+birefringence
+bireme
+biretta
+biro
+biros
+birr
+birth
+birthday
+birthdays
+birthday's
+birthed
+birthmark
+birthplace
+birthplaces
+birthright
+birthrights
+birthright's
+birthroot
+births
+birth's
+birthstone
+birthwort
+biscuit
+biscuits
+biscuit's
+bisect
+bisected
+bisecting
+bisection
+bisectional
+bisectionally
+bisections
+bisection's
+bisector
+bisectors
+bisector's
+bisects
+bisexual
+bisexuality
+bisexually
+bisexuals
+bisexual's
+bishop
+bishopric
+bishops
+bishop's
+bismuth
+bismuthic
+bison
+bisons
+bison's
+bisque
+bisques
+bissextile
+bistort
+bistre
+bistro
+bistros
+bisulphate
+bisulphide
+bisulphite
+bisymmetric
+bit
+bitch
+bitchery
+bitches
+bitchier
+bitchily
+bitchiness
+bitch's
+bitchy
+bite
+biter
+biters
+bites
+biting
+bitingly
+bitmap
+bitmaps
+bitmap's
+bits
+bit's
+bitstock
+bitted
+bitten
+bitter
+bitterer
+bitterest
+bitterly
+bittern
+bitterness
+bitternut
+bitterroot
+bitters
+bittersweet
+bitty
+bitumen
+bituminisation
+bituminise
+bituminised
+bituminises
+bituminising
+bituminoid
+bituminous
+bitwise
+bivalent
+bivalve
+bivalves
+bivalve's
+bivouac
+bivouacs
+biweekly
+biyearly
+biz
+bizarre
+bizarrely
+bizarreness
+blab
+blabbed
+blabber
+blabbered
+blabbering
+blabbermouth
+blabbermouths
+blabbing
+blabby
+blabs
+black
+blackball
+blackballed
+blackballing
+blackballs
+blackberries
+blackberry
+blackberry's
+blackbird
+blackbirder
+blackbirds
+blackbird's
+blackboard
+blackboards
+blackboard's
+blackbodies
+blackbody
+blackbuck
+blackcap
+blackcock
+blackcurrant
+blackdamp
+blacked
+blacken
+blackened
+blackener
+blackening
+blackens
+blacker
+blackest
+blackface
+blackfish
+blackguard
+blackguardism
+blackguardly
+blackguards
+blackguard's
+blackhead
+blackheart
+blacking
+blackish
+blackjack
+blackjacks
+blackjack's
+blackleg
+blacklist
+blacklisted
+blacklisting
+blacklists
+blackly
+blackmail
+blackmailed
+blackmailer
+blackmailers
+blackmailing
+blackmails
+blackness
+blackout
+blackouts
+blackout's
+blackpoll
+blacks
+blacksmith
+blacksmithing
+blacksmiths
+blacksmith's
+blacksnake
+blackstrap
+blackthorn
+blacktop
+blacktops
+blacktop's
+blackwash
+bladder
+bladdernose
+bladdernut
+bladders
+bladder's
+bladderwort
+blade
+bladed
+blades
+blade's
+blah
+blain
+blamably
+blame
+blamed
+blameful
+blamefully
+blameless
+blamelessly
+blamelessness
+blamer
+blamers
+blames
+blameworthiness
+blameworthy
+blaming
+blanc
+blanch
+blanched
+blancher
+blanches
+blanching
+blancmange
+bland
+blandish
+blandisher
+blandishment
+blandishments
+blandly
+blandness
+blank
+blanked
+blanker
+blankest
+blanket
+blanketed
+blanketing
+blankets
+blanking
+blankly
+blankness
+blanks
+blare
+blared
+blares
+blaring
+blarney
+blaspheme
+blasphemed
+blasphemer
+blasphemes
+blasphemies
+blaspheming
+blasphemous
+blasphemously
+blasphemousness
+blasphemy
+blast
+blasted
+blaster
+blasters
+blasting
+blastoff
+blasts
+blastula
+blastulas
+blastula's
+blatancy
+blatant
+blatantly
+blather
+blathered
+blathering
+blaze
+blazed
+blazer
+blazers
+blazes
+blazing
+blazingly
+blazon
+blazoned
+blazoner
+blazoning
+blazonry
+bldg
+bleach
+bleachable
+bleached
+bleacher
+bleachers
+bleaches
+bleaching
+bleak
+bleakish
+bleakly
+bleakness
+blear
+blearily
+bleariness
+bleary
+bleat
+bleater
+bleating
+bleats
+bleb
+bled
+bleed
+bleeder
+bleeders
+bleeding
+bleedings
+bleeds
+bleep
+bleeped
+bleeper
+bleeping
+bleeps
+blemish
+blemished
+blemishes
+blemishing
+blemish's
+blench
+blend
+blended
+blender
+blenders
+blending
+blends
+blennioid
+blenny
+bless
+blessed
+blessedly
+blessedness
+blesses
+blessing
+blessings
+blest
+blether
+blew
+blight
+blighted
+blighter
+blimey
+blimp
+blimps
+blimp's
+blind
+blinded
+blinder
+blinders
+blindfish
+blindfold
+blindfolded
+blindfolding
+blindfolds
+blinding
+blindingly
+blindly
+blindness
+blinds
+blindside
+blindsided
+blindsides
+blindsiding
+blindstorey
+blindworm
+blink
+blinked
+blinker
+blinkered
+blinkers
+blinking
+blinks
+blintz
+blip
+blipping
+blips
+blip's
+bliss
+blissful
+blissfully
+blissfulness
+blister
+blistered
+blistering
+blisteringly
+blisters
+blistery
+blithe
+blithely
+blither
+blithesome
+blithesomely
+blithest
+blitz
+blitzed
+blitzes
+blitzkrieg
+blitz's
+blizzard
+blizzards
+blizzard's
+bloat
+bloated
+bloater
+bloaters
+bloating
+bloats
+blob
+blobbing
+blobs
+blob's
+bloc
+block
+blockade
+blockaded
+blockader
+blockades
+blockading
+blockage
+blockages
+blockage's
+blockbuster
+blockbusters
+blockbusting
+blocked
+blocker
+blockers
+blockhead
+blockheads
+blockhouse
+blockhouses
+blockier
+blocking
+blockish
+blockishly
+blocks
+block's
+blocky
+blocs
+bloc's
+bloke
+blokes
+bloke's
+blond
+blonde
+blondes
+blonde's
+blondish
+blonds
+blood
+bloodbath
+bloodbaths
+bloodcurdling
+bloodcurdlingly
+blooded
+bloodguilt
+bloodhound
+bloodhounds
+bloodhound's
+bloodied
+bloodiest
+bloodily
+bloodiness
+bloodless
+bloodlessly
+bloodlessness
+bloodletting
+bloodline
+bloodlines
+bloodline's
+bloodmobile
+bloodroot
+bloods
+bloodshed
+bloodshot
+bloodstain
+bloodstained
+bloodstains
+bloodstain's
+bloodstock
+bloodstone
+bloodstream
+bloodsucker
+bloodsucking
+bloodthirstily
+bloodthirstiness
+bloodthirsty
+bloodworm
+bloody
+bloodying
+bloom
+bloomed
+bloomer
+bloomers
+blooming
+blooms
+bloomy
+blooper
+blossom
+blossomed
+blossoms
+blossomy
+blot
+blotch
+blotchily
+blotchy
+blots
+blot's
+blotted
+blotter
+blotting
+blotto
+blouse
+blouses
+blouse's
+blousing
+blouson
+blow
+blowback
+blower
+blowers
+blowfish
+blowfly
+blowgun
+blowhard
+blowhole
+blowing
+blowlamp
+blown
+blowpipe
+blows
+blowsy
+blowtorch
+blowzy
+blubber
+blubbered
+blubbering
+blubbery
+blucher
+bludgeon
+bludgeoned
+bludgeoning
+bludgeons
+blue
+bluebeard
+bluebell
+blueberries
+blueberry
+blueberry's
+bluebill
+bluebird
+bluebirds
+bluebird's
+bluebonnet
+bluebonnets
+bluebonnet's
+bluebook
+bluebottle
+bluecoat
+blued
+bluefish
+bluegill
+bluegrass
+blueing
+bluejacket
+bluely
+blueness
+bluenose
+blueprint
+blueprinted
+blueprinting
+blueprints
+blueprint's
+bluer
+blues
+bluesman
+bluest
+bluestem
+bluestocking
+bluestone
+bluesy
+bluetongue
+blueweed
+bluff
+bluffed
+bluffer
+bluffing
+bluffly
+bluffness
+bluffs
+bluing
+bluish
+bluishness
+blunder
+blunderbuss
+blundered
+blunderer
+blundering
+blunderingly
+blunderings
+blunders
+blunt
+blunted
+blunter
+bluntest
+blunting
+bluntly
+bluntness
+blunts
+blur
+blurb
+blurred
+blurredly
+blurrier
+blurrily
+blurriness
+blurring
+blurry
+blurs
+blur's
+blurt
+blurted
+blurter
+blurting
+blurts
+blush
+blushed
+blusher
+blushes
+blushful
+blushing
+blushingly
+bluster
+blustered
+blusterer
+blustering
+blusteringly
+blusterous
+blusters
+blustery
+boa
+boar
+board
+boarded
+boarder
+boarders
+boarding
+boardroom
+boards
+boardwalk
+boarfish
+boarhound
+boas
+boast
+boasted
+boaster
+boasters
+boastful
+boastfully
+boastfulness
+boasting
+boastings
+boasts
+boat
+boatbill
+boated
+boatel
+boatels
+boater
+boaters
+boathook
+boathouse
+boathouses
+boathouse's
+boating
+boatload
+boatloads
+boatload's
+boatman
+boatmanship
+boatmen
+boats
+boatswain
+boatswains
+boatswain's
+boatyard
+boatyards
+boatyard's
+bob
+bobbed
+bobber
+bobbies
+bobbin
+bobbinet
+bobbing
+bobbins
+bobbin's
+bobble
+bobbled
+bobbles
+bobbling
+bobby
+bobbysoxer
+bobcat
+bobolink
+bobolinks
+bobolink's
+bobs
+bob's
+bobsled
+bobsledder
+bobsledding
+bobsleigh
+bobstay
+bobtail
+bobtailed
+bobwhite
+bobwhites
+bobwhite's
+bock
+bodacious
+bode
+boded
+bodega
+bodes
+bodge
+bodhisattva
+bodice
+bodied
+bodies
+bodiless
+bodily
+boding
+bodkin
+body
+bodybuilder
+bodybuilders
+bodybuilder's
+bodybuilding
+bodyguard
+bodyguards
+bodyguard's
+bodying
+bodysurf
+bodysurfer
+bodyweight
+bodywork
+boffin
+bog
+bogey
+bogeyed
+bogeying
+bogeyman
+bogeyman's
+bogeymen
+bogeys
+bogged
+bogging
+boggle
+boggled
+boggles
+boggling
+boggy
+bogie
+bogies
+bogs
+bog's
+bogtrotter
+bogus
+bogwood
+bogy
+boil
+boiled
+boiler
+boilermaker
+boilermakers
+boilermaker's
+boilerplate
+boilers
+boiling
+boils
+boisterous
+boisterously
+boisterousness
+bola
+bolas
+bold
+bolder
+boldest
+boldface
+boldfaced
+boldfaces
+boldfacing
+boldly
+boldness
+bole
+bolection
+bolero
+boletus
+boliviano
+boll
+bollard
+bollix
+bollocks
+bollworm
+bolo
+bolometer
+bolometric
+boloney
+bolos
+bolshevise
+bolster
+bolstered
+bolsterer
+bolstering
+bolsters
+bolt
+bolted
+bolter
+bolting
+boltrope
+bolts
+bolus
+bomb
+bombard
+bombarded
+bombardier
+bombardiers
+bombarding
+bombardment
+bombardments
+bombardon
+bombards
+bombast
+bombastic
+bombastically
+bombazine
+bombe
+bombed
+bomber
+bombers
+bombing
+bombings
+bombproof
+bombs
+bombshell
+bombsight
+bombycid
+bon
+bona
+bonanza
+bonanzas
+bonanza's
+bonbon
+bond
+bondable
+bondage
+bonded
+bonder
+bonders
+bondholder
+bonding
+bondmaid
+bondman
+bonds
+bondservant
+bondsman
+bondsmen
+bondwoman
+bone
+boneblack
+boned
+bonefish
+bonehead
+boneheaded
+boneless
+boner
+boners
+bones
+boneset
+bonesetter
+boneshaker
+bonfire
+bonfires
+bonfire's
+bong
+bongo
+bonhomie
+bonier
+boning
+bonito
+bonjour
+bonkers
+bonnet
+bonneted
+bonnets
+bonnier
+bonnily
+bonny
+bonsai
+bonspiel
+bonus
+bonuses
+bonus's
+bony
+bonze
+bonzes
+boo
+boob
+boobies
+booboo
+booby
+boodle
+booger
+boogie
+boohoo
+book
+bookbinder
+bookbinders
+bookbindery
+bookbinding
+bookcase
+bookcases
+bookcase's
+booked
+bookend
+bookends
+booker
+bookers
+bookie
+bookies
+bookie's
+booking
+bookings
+bookish
+bookishly
+bookishness
+bookkeeper
+bookkeepers
+bookkeeper's
+bookkeeping
+booklet
+booklets
+booklet's
+booklist
+booklouse
+bookmaker
+bookmakers
+bookmaking
+bookman
+bookmark
+bookmarker
+bookmarkers
+bookmarks
+bookmark's
+bookmobile
+bookmobiles
+bookplate
+bookplates
+books
+bookseller
+booksellers
+bookseller's
+bookselling
+bookshelf
+bookshelf's
+bookshelves
+bookstall
+bookstore
+bookstores
+bookstore's
+bookworm
+bookworms
+bookworm's
+boolean
+boom
+boomed
+boomer
+boomerang
+boomerangs
+boomerang's
+booming
+booms
+boomtown
+boomtowns
+boon
+boondocks
+boondoggle
+boondoggling
+boor
+boorish
+boorishly
+boorishness
+boors
+boor's
+boos
+boost
+boosted
+booster
+boosting
+boosts
+boot
+bootblack
+bootblacks
+booted
+bootee
+booth
+booths
+bootie
+booties
+booting
+bootjack
+bootlace
+bootleg
+bootlegged
+bootlegger
+bootleggers
+bootlegger's
+bootlegging
+bootlegs
+bootless
+bootlessly
+bootlessness
+bootlick
+bootlicker
+boots
+bootstrap
+bootstrapped
+bootstrapping
+bootstraps
+bootstrap's
+booty
+booze
+boozer
+boozing
+boozy
+bop
+bopper
+bopping
+borage
+boraginaceous
+borate
+borated
+borates
+borax
+borazon
+bordello
+bordellos
+bordello's
+border
+bordereau
+bordered
+borderer
+bordering
+borderland
+borderlands
+borderland's
+borderline
+borders
+bordure
+bore
+boreal
+borecole
+bored
+boredom
+borehole
+boreholes
+borer
+borers
+bores
+boric
+boride
+boring
+boringly
+boringness
+born
+borne
+boron
+borosilicate
+borough
+boroughs
+borrow
+borrowed
+borrower
+borrowers
+borrowing
+borrowings
+borrows
+borstal
+borzoi
+bosh
+bosom
+bosoms
+bosom's
+bosomy
+boson
+boss
+bossed
+bosses
+bossier
+bossiness
+bossism
+bossy
+botanic
+botanical
+botanically
+botanise
+botanised
+botanises
+botanising
+botanist
+botanists
+botanist's
+botany
+botch
+botched
+botchers
+botches
+botching
+botchy
+botfly
+both
+bother
+botheration
+bothered
+bothering
+bothers
+bothersome
+bots
+bottle
+bottlebrush
+bottled
+bottleful
+bottleneck
+bottlenecks
+bottleneck's
+bottlenose
+bottler
+bottlers
+bottles
+bottling
+bottom
+bottomed
+bottoming
+bottomland
+bottomless
+bottommost
+bottoms
+botulism
+boucle
+boudoir
+bouffant
+bougainvillaea
+bougainvillea
+bough
+boughs
+bough's
+bought
+bouillabaisse
+bouillon
+boulder
+boulders
+boulder's
+boulevard
+boulevardier
+boulevards
+boulevard's
+bouleversement
+bounce
+bounced
+bouncer
+bouncers
+bounces
+bouncier
+bouncily
+bouncing
+bouncingly
+bouncy
+bound
+boundaries
+boundary
+boundary's
+bounded
+bounden
+bounder
+bounding
+boundless
+boundlessly
+boundlessness
+bounds
+bounteous
+bounteously
+bounteousness
+bounties
+bountiful
+bountifully
+bountifulness
+bounty
+bounty's
+bouquet
+bouquets
+bouquet's
+bourbon
+bourbons
+bourdon
+bourgeois
+bourgeoisie
+bourgeon
+bourn
+bourse
+boustrophedon
+bout
+boutique
+boutiques
+boutonniere
+bouts
+bout's
+bouzouki
+bovid
+bovine
+bovines
+bovver
+bow
+bowdlerisation
+bowdlerise
+bowdlerised
+bowdleriser
+bowdlerises
+bowdlerising
+bowed
+bowel
+bowelled
+bowels
+bowel's
+bower
+bowerbird
+bowerbirds
+bowerbird's
+bowers
+bowery
+bowfin
+bowhead
+bowie
+bowing
+bowknot
+bowl
+bowled
+bowleg
+bowlegged
+bowler
+bowlers
+bowlful
+bowline
+bowlines
+bowline's
+bowling
+bowls
+bowman
+bowmen
+bows
+bowser
+bowshot
+bowsprit
+bowstring
+bowstrings
+bowstring's
+bowyer
+box
+boxboard
+boxcar
+boxcars
+boxcar's
+boxed
+boxer
+boxers
+boxes
+boxfish
+boxful
+boxhaul
+boxier
+boxing
+boxlike
+boxthorn
+boxwood
+boxy
+boy
+boyar
+boyars
+boycott
+boycotted
+boycotter
+boycotting
+boycotts
+boyfriend
+boyfriends
+boyfriend's
+boyhood
+boyish
+boyishly
+boyishness
+boys
+boy's
+boysenberry
+bozo
+bozos
+bpi
+bra
+brace
+braced
+bracelet
+bracelets
+bracelet's
+bracer
+braces
+brachia
+brachial
+brachiopod
+brachium
+brachylogy
+brachyuran
+bracing
+bracken
+bracket
+bracketed
+bracketing
+brackets
+brackish
+brackishness
+bract
+bracteole
+brad
+bradawl
+brae
+braes
+brae's
+brag
+braggadocio
+braggart
+bragged
+bragger
+bragging
+brags
+braid
+braided
+braider
+braiding
+braids
+brail
+braille
+braillewriter
+brain
+braincase
+brainchild
+brainchildren
+brainchild's
+brained
+brainier
+braininess
+braining
+brainless
+brainlessly
+brainlessness
+brainpan
+brainpower
+brains
+brainsick
+brainsickly
+brainstem
+brainstems
+brainstem's
+brainstorm
+brainstorming
+brainstorms
+brainstorm's
+brainteaser
+brainwash
+brainwashed
+brainwasher
+brainwashes
+brainwashing
+brainy
+braise
+braised
+braises
+braising
+brake
+braked
+brakeless
+brakeman
+brakemen
+brakemen's
+brakes
+braking
+bramble
+brambles
+bramble's
+brambling
+brambly
+bramley
+bran
+branch
+branched
+branches
+branchiate
+branching
+branchiopod
+branchless
+branchy
+brand
+branded
+brander
+brandied
+brandies
+branding
+brandish
+brandishes
+brandishing
+brandling
+brands
+brandy
+brandying
+bras
+bra's
+brash
+brashly
+brashness
+brass
+brassard
+brassbound
+brasses
+brassier
+brassiere
+brassily
+brassiness
+brassy
+brat
+brats
+brat's
+brattice
+brattle
+brattled
+brattling
+bratty
+bratwurst
+bravado
+brave
+braved
+bravely
+braveness
+braver
+bravery
+braves
+bravest
+braving
+bravo
+bravoes
+bravos
+bravura
+braw
+brawl
+brawled
+brawler
+brawlier
+brawling
+brawls
+brawly
+brawn
+brawnier
+brawniness
+brawny
+braxy
+bray
+brayed
+brayer
+braying
+brays
+braze
+brazed
+brazen
+brazened
+brazening
+brazenly
+brazenness
+brazes
+brazier
+braziers
+brazier's
+brazils
+brazing
+breach
+breached
+breaches
+breaching
+bread
+breadbasket
+breadbaskets
+breadboard
+breadboards
+breadboard's
+breaded
+breadfruit
+breadfruits
+breading
+breadline
+breadnut
+breadnuts
+breadroot
+breads
+breadstuff
+breadth
+breadthways
+breadwinner
+breadwinners
+breadwinner's
+breadwinning
+break
+breakable
+breakables
+breakage
+breakaway
+breakdown
+breakdowns
+breakdown's
+breaker
+breakers
+breakeven
+breakfast
+breakfasted
+breakfaster
+breakfasters
+breakfasting
+breakfasts
+breakfront
+breaking
+breakneck
+breakout
+breakpoint
+breakpoints
+breakpoint's
+breaks
+breakthrough
+breakthroughs
+breakthrough's
+breakwater
+breakwaters
+breakwater's
+bream
+breams
+breast
+breastbone
+breasted
+breastfed
+breastfeed
+breastfeeding
+breasting
+breastpin
+breastplate
+breasts
+breaststroke
+breaststroker
+breastwork
+breastworks
+breastwork's
+breath
+breathable
+breathalyse
+breathalyzer
+breathe
+breathed
+breather
+breathers
+breathes
+breathier
+breathing
+breathless
+breathlessly
+breathlessness
+breaths
+breathtaking
+breathtakingly
+breathy
+breccias
+brecciate
+bred
+breech
+breechblock
+breechcloth
+breechclout
+breeches
+breeching
+breechloader
+breech's
+breed
+breeder
+breeding
+breeds
+breeze
+breezed
+breezeless
+breezes
+breeze's
+breezeway
+breezier
+breezily
+breeziness
+breezing
+breezy
+brethren
+brevet
+breveted
+breveting
+brevets
+breviaries
+breviary
+brevier
+brevity
+brew
+brewage
+brewed
+brewer
+breweries
+brewers
+brewery
+brewery's
+brewing
+brews
+briar
+briarroot
+briars
+briar's
+bribe
+bribed
+briber
+bribers
+bribery
+bribes
+bribing
+brick
+brickbat
+bricked
+bricking
+bricklayer
+bricklayers
+bricklayer's
+bricklaying
+bricks
+brickwork
+brickyard
+bridal
+bride
+bridegroom
+brides
+bride's
+bridesmaid
+bridesmaids
+bridesmaid's
+bridge
+bridgeable
+bridgeboard
+bridged
+bridgehead
+bridgeheads
+bridgehead's
+bridgeless
+bridges
+bridgework
+bridgework's
+bridging
+bridle
+bridled
+bridles
+bridling
+brie
+brief
+briefcase
+briefcases
+briefcase's
+briefed
+briefer
+briefest
+briefing
+briefings
+briefing's
+briefly
+briefness
+briefs
+brier
+brig
+brigade
+brigaded
+brigades
+brigade's
+brigadier
+brigadiers
+brigadier's
+brigading
+brigand
+brigandage
+brigandine
+brigands
+brigand's
+brigantine
+bright
+brighten
+brightened
+brightener
+brighteners
+brightening
+brightens
+brighter
+brightest
+brightly
+brightness
+brigs
+brig's
+brilliance
+brilliancy
+brilliant
+brilliantine
+brilliantly
+brilliantness
+brim
+brimful
+brimless
+brimmed
+brimming
+brimstone
+brindle
+brindled
+brine
+bring
+bringer
+bringers
+bringing
+brings
+brinier
+brininess
+brining
+brink
+brinkmanship
+brinksmanship
+briny
+brio
+brioche
+briolette
+briquette
+brisance
+brisk
+brisker
+brisket
+briskly
+briskness
+brisling
+bristle
+bristlecone
+bristled
+bristles
+bristletail
+bristlier
+bristling
+bristly
+britches
+brittle
+brittleness
+britzka
+broach
+broached
+broacher
+broaches
+broaching
+broad
+broadband
+broadbill
+broadcast
+broadcasted
+broadcaster
+broadcasters
+broadcasting
+broadcastings
+broadcasts
+broadcloth
+broaden
+broadened
+broadening
+broadenings
+broadens
+broader
+broadest
+broadleaf
+broadloom
+broadly
+broadminded
+broadness
+broads
+broadsheet
+broadside
+broadsword
+broadtail
+brocade
+brocaded
+brocatelle
+broccoli
+brochette
+brochure
+brochures
+brochure's
+brocket
+brogan
+brogue
+broider
+broidery
+broil
+broiled
+broiler
+broilers
+broiling
+broils
+broke
+broken
+brokenly
+brokenness
+broker
+brokerage
+brokers
+brollies
+brolly
+bromated
+bromating
+brome
+bromeliad
+bromide
+bromides
+bromide's
+bromidic
+bromine
+bromines
+bronchi
+bronchia
+bronchial
+bronchiolar
+bronchiole
+bronchioles
+bronchiole's
+bronchitis
+bronchopneumonia
+bronchoscope
+bronchus
+bronco
+broncobuster
+broncos
+brontosaur
+brontosaurus
+bronze
+bronzed
+bronzer
+bronzes
+bronzing
+bronzy
+brooch
+brooches
+brooch's
+brood
+brooder
+broodiness
+brooding
+broodingly
+broods
+broody
+brook
+brooked
+brooklime
+brooks
+broom
+broomball
+broomcorn
+broomrape
+brooms
+broom's
+broomstick
+broomsticks
+broomstick's
+brose
+broth
+brothel
+brothels
+brothel's
+brother
+brotherhood
+brotherliness
+brotherly
+brothers
+brother's
+broths
+brougham
+broughams
+brought
+brouhaha
+brow
+browbeat
+browbeaten
+browbeating
+browbeats
+brown
+browned
+browner
+brownest
+brownie
+brownies
+brownie's
+browning
+brownish
+brownness
+brownnose
+brownnoser
+brownout
+browns
+brownstone
+brownstones
+brows
+brow's
+browse
+browsed
+browser
+browsers
+browses
+browsing
+brucellosis
+bruin
+bruise
+bruised
+bruiser
+bruisers
+bruises
+bruising
+bruit
+brumal
+brumby
+brume
+brunch
+brunches
+brunet
+brunette
+brunettes
+brunt
+brush
+brushed
+brusher
+brushes
+brushfire
+brushfires
+brushfire's
+brushier
+brushing
+brushless
+brushstroke
+brushstrokes
+brushstroke's
+brushwood
+brushwork
+brushy
+brusque
+brusquely
+brusqueness
+brut
+brutal
+brutalisation
+brutalise
+brutalised
+brutalises
+brutalising
+brutalities
+brutality
+brutally
+brute
+brutes
+brute's
+brutish
+brutishly
+brutishness
+bryony
+bryophyte
+bubal
+bubaline
+bubble
+bubbled
+bubbler
+bubbles
+bubblier
+bubbling
+bubbly
+bubby
+bubonic
+buccaneer
+buccaneers
+buccaneer's
+buck
+buckaroo
+buckaroos
+buckbean
+buckboard
+buckboards
+buckboard's
+bucked
+bucker
+bucket
+bucketed
+bucketful
+bucketful's
+bucketing
+buckets
+bucket's
+bucketsful
+buckeye
+buckhorn
+buckhound
+bucking
+buckish
+buckle
+buckled
+buckler
+buckles
+buckling
+bucko
+buckra
+buckram
+bucks
+bucksaw
+buckshee
+buckshot
+buckskin
+buckskins
+buckthorn
+bucktooth
+buckwheat
+bucolic
+bucolically
+bud
+budded
+buddies
+budding
+buddle
+buddy
+buddy's
+budge
+budged
+budgerigar
+budges
+budget
+budgetary
+budgeted
+budgeter
+budgeters
+budgeting
+budgets
+budgie
+budging
+buds
+bud's
+buff
+buffalo
+buffaloes
+buffer
+buffered
+buffering
+buffers
+buffer's
+buffet
+buffeted
+buffeting
+buffetings
+buffets
+buffing
+bufflehead
+buffo
+buffoon
+buffoonery
+buffoonish
+buffoons
+buffoon's
+buffs
+buff's
+bug
+bugaboo
+bugbane
+bugbear
+bugbears
+bugged
+bugger
+buggered
+buggering
+buggers
+bugger's
+buggery
+buggies
+bugging
+buggy
+buggy's
+bughouse
+bugle
+bugled
+bugler
+bugles
+bugleweed
+bugling
+bugloss
+bugs
+bug's
+build
+builder
+builders
+building
+buildings
+building's
+builds
+built
+bulb
+bulbaceous
+bulbar
+bulbiferous
+bulbous
+bulbously
+bulbs
+bulb's
+bulbul
+bulge
+bulged
+bulges
+bulginess
+bulging
+bulgur
+bulgy
+bulimia
+bulk
+bulked
+bulkhead
+bulkheads
+bulkhead's
+bulkier
+bulkily
+bulkiness
+bulks
+bulky
+bull
+bulla
+bullbat
+bulldog
+bulldogger
+bulldogs
+bulldog's
+bulldoze
+bulldozed
+bulldozer
+bulldozers
+bulldozes
+bulldozing
+bulled
+bullet
+bulletin
+bulletins
+bulletin's
+bullets
+bullet's
+bullfight
+bullfighter
+bullfighting
+bullfinch
+bullfrog
+bullhead
+bullheadedness
+bullhorn
+bullied
+bullies
+bulling
+bullion
+bullish
+bullishness
+bullnecked
+bullock
+bullpen
+bullring
+bullroarer
+bulls
+bullshit
+bullterrier
+bullwhackers
+bullwhip
+bully
+bullyboy
+bullyboys
+bullying
+bullyrag
+bulrush
+bulwark
+bum
+bumbershoot
+bumble
+bumblebee
+bumblebees
+bumblebee's
+bumbled
+bumbles
+bumbling
+bumboat
+bumf
+bummed
+bummer
+bummers
+bumming
+bump
+bumped
+bumper
+bumpers
+bumph
+bumpier
+bumpily
+bumpiness
+bumping
+bumpkin
+bumpkins
+bumpkin's
+bumps
+bumptious
+bumptiousness
+bumpy
+bums
+bum's
+bun
+bunch
+bunched
+bunches
+bunching
+bunchy
+buncombe
+bund
+bundle
+bundled
+bundler
+bundles
+bundling
+bung
+bungalow
+bungalows
+bungalow's
+bunger
+bunghole
+bungle
+bungled
+bungler
+bunglers
+bungles
+bungling
+bunglingly
+bunion
+bunions
+bunion's
+bunk
+bunked
+bunker
+bunkered
+bunkering
+bunkers
+bunker's
+bunkhouse
+bunkhouses
+bunkhouse's
+bunking
+bunkmate
+bunkmates
+bunkmate's
+bunko
+bunks
+bunkum
+bunnies
+bunny
+bunny's
+buns
+bun's
+bunt
+bunted
+bunter
+bunters
+bunting
+buntline
+bunts
+buoy
+buoyancy
+buoyant
+buoyantly
+buoyed
+buoying
+buoys
+buprestid
+bur
+burble
+burbled
+burbler
+burbles
+burbling
+burden
+burdened
+burdening
+burdens
+burden's
+burdensome
+burdensomely
+burdensomeness
+burdock
+bureau
+bureaucracies
+bureaucracy
+bureaucracy's
+bureaucrat
+bureaucratic
+bureaucratically
+bureaucratisation
+bureaucratisation's
+bureaucratise
+bureaucratised
+bureaucratises
+bureaucrats
+bureaucrat's
+bureaus
+bureau's
+bureaux
+burette
+burettes
+burg
+burgee
+burgeon
+burgeoned
+burgeoning
+burgeons
+burger
+burgers
+burgess
+burgesses
+burgess's
+burgher
+burghers
+burgher's
+burglar
+burglaries
+burglarious
+burglars
+burglar's
+burglary
+burglary's
+burgle
+burgled
+burgles
+burgling
+burgomaster
+burgomasters
+burgonet
+burgoo
+burgoos
+burial
+buried
+burier
+buries
+burin
+burking
+burl
+burlap
+burled
+burlesque
+burlesqued
+burlesquer
+burlesques
+burlesquing
+burley
+burlier
+burliness
+burly
+burn
+burnable
+burned
+burner
+burners
+burnet
+burning
+burningly
+burnings
+burnish
+burnished
+burnishes
+burnishing
+burnoose
+burnout
+burns
+burnt
+burp
+burped
+burping
+burps
+burr
+burred
+burrier
+burro
+burros
+burro's
+burrow
+burrowed
+burrower
+burrowing
+burrows
+burrs
+burr's
+burrstone
+burry
+bursa
+bursar
+bursarial
+bursary
+bursas
+burse
+bursiform
+bursitis
+burst
+bursting
+bursts
+burthen
+bury
+burying
+bus
+busbies
+busboy
+busboys
+busboy's
+buses
+bush
+bushbuck
+bushbucks
+bushed
+bushel
+bushels
+bushel's
+bushes
+bushfire
+bushido
+bushier
+bushiness
+bushing
+bushings
+bushman
+bushmaster
+bushranger
+bushtit
+bushwhack
+bushwhacked
+bushwhacker
+bushwhacking
+bushwhacks
+bushy
+busied
+busier
+busies
+busiest
+busily
+business
+businesses
+businesslike
+businessman
+businessmen
+business's
+businesswoman
+businesswoman's
+businesswomen
+busker
+buskin
+busload
+busloads
+busload's
+buss
+bussed
+busses
+bussing
+bust
+bustard
+bustards
+bustard's
+busted
+buster
+busting
+bustle
+bustled
+bustling
+bustlingly
+busts
+busty
+busy
+busybody
+busying
+busyness
+busywork
+but
+butadiene
+butane
+butanone
+butch
+butcher
+butcherbird
+butchered
+butchering
+butcherly
+butchers
+butcher's
+butchery
+butler
+butlers
+butler's
+butt
+butte
+butted
+butter
+butterball
+butterbur
+buttercup
+buttered
+butterfat
+butterfingered
+butterfingers
+butterfish
+butterflies
+butterfly
+butterfly's
+buttering
+buttermilk
+butternut
+butters
+butterscotch
+butterweed
+butterwort
+buttery
+buttes
+butting
+buttinski
+buttock
+buttocks
+buttock's
+button
+buttonball
+buttonbush
+buttoned
+buttoner
+buttonhole
+buttonholer
+buttonholes
+buttonhole's
+buttonhook
+buttoning
+buttonmould
+buttons
+buttonwood
+buttress
+buttressed
+buttresses
+buttressing
+butts
+butt's
+butut
+butyl
+butyrate
+butyric
+buxom
+buxomly
+buxomness
+buy
+buyer
+buyers
+buyer's
+buying
+buys
+buzz
+buzzard
+buzzards
+buzzard's
+buzzed
+buzzer
+buzzes
+buzzing
+buzzword
+buzzwords
+buzzword's
+bwana
+by
+bye
+byelaw
+byelaws
+byes
+bygone
+bygones
+bylaw
+bylaws
+bylaw's
+byname
+bypass
+bypassed
+bypasses
+bypassing
+bypath
+byplay
+byre
+byroad
+bystander
+bystanders
+bystander's
+bystreet
+byte
+bytes
+byte's
+byway
+byways
+byword
+bywords
+byword's
+cab
+cabal
+cabala
+cabalism
+cabalist
+cabalistic
+caballed
+caballero
+caballing
+cabals
+cabana
+cabanas
+cabaret
+cabarets
+cabbage
+cabbaged
+cabbages
+cabbage's
+cabbageworm
+cabbaging
+cabbala
+cabbie
+cabbies
+cabby
+cabdriver
+cabdrivers
+caber
+cabin
+cabinet
+cabinetmaker
+cabinetmakers
+cabinetmaker's
+cabinetry
+cabinets
+cabinet's
+cabinetwork
+cabins
+cabin's
+cable
+cabled
+cablegram
+cablegrams
+cablegram's
+cables
+cableway
+cabling
+cabman
+cabob
+cabochon
+caboodle
+caboose
+cabriole
+cabriolet
+cabs
+cab's
+cabstand
+cacao
+cacciatore
+cachalot
+cache
+cached
+cachepot
+caches
+cache's
+cachet
+caching
+cachinnate
+cachou
+cachucha
+cacique
+cackle
+cackled
+cackler
+cackles
+cackling
+cacodemon
+cacoethes
+cacogenic
+cacogenics
+cacographical
+cacography
+cacomistle
+cacophonous
+cacophonously
+cacophony
+cacti
+cactus
+cactuses
+cacuminal
+cad
+cadastral
+cadastre
+cadaver
+cadaverous
+cadaverously
+caddie
+caddies
+caddis
+caddish
+caddishly
+caddishness
+caddy
+cadence
+cadenced
+cadences
+cadent
+cadenza
+cadet
+cadetship
+cadge
+cadged
+cadger
+cadges
+cadging
+cadmium
+cadre
+caducean
+caduceus
+caducity
+caecilian
+caesalpiniaceous
+caesium
+caespitose
+caesura
+cafe
+cafes
+cafe's
+cafeteria
+cafeterias
+cafeteria's
+caffeine
+caffeine's
+caftan
+cage
+caged
+cageling
+cages
+cagey
+cagier
+cagily
+caginess
+caging
+cagoule
+cagoules
+cagy
+cahier
+cahoots
+caiman
+cairn
+cairned
+cairngorm
+cairns
+caisson
+caitiff
+cajole
+cajoled
+cajolement
+cajoler
+cajolery
+cajoles
+cajoling
+cajuput
+cake
+caked
+cakes
+cakewalk
+cakewalker
+caking
+calabash
+calaboose
+calamanco
+calamine
+calamite
+calamities
+calamitous
+calamitously
+calamitousness
+calamity
+calamity's
+calash
+calcareous
+calcareousness
+calcariferous
+calceiform
+calcification
+calcified
+calcify
+calcimine
+calcite
+calcium
+calculability
+calculable
+calculably
+calculate
+calculated
+calculatedly
+calculates
+calculating
+calculatingly
+calculation
+calculations
+calculative
+calculator
+calculators
+calculator's
+calculi
+calculus
+caldarium
+caldera
+caldron
+calefactory
+calendar
+calendared
+calendaring
+calendars
+calendar's
+calenderer
+calends
+calendula
+calenture
+calf
+calfskin
+calibrate
+calibrated
+calibrates
+calibrating
+calibration
+calibrations
+calibrator
+calibrators
+calibre
+calibres
+calices
+calicle
+calico
+californium
+caliginous
+calipash
+calipee
+caliph
+caliphate
+caliphs
+calisaya
+calk
+call
+calla
+callable
+callboy
+called
+caller
+callers
+caller's
+calligrapher
+calligraphers
+calligraphic
+calligraphically
+calligraphist
+calligraphy
+calling
+calliope
+calliper
+callipers
+callipygian
+callisthenics
+callosity
+callous
+calloused
+callously
+callousness
+callow
+callowness
+calls
+callus
+calluses
+calm
+calmative
+calmed
+calmer
+calmest
+calming
+calmingly
+calmly
+calmness
+calms
+calomel
+caloric
+calorie
+calories
+calorie's
+calorific
+calorimeter
+calorimeters
+calorimeter's
+calorimetric
+calorimetrically
+calotte
+caltrop
+caltrops
+calumniate
+calumniated
+calumniation
+calumniator
+calumnious
+calumniously
+calumny
+calve
+calves
+calving
+calyces
+calycle
+calypso
+calyx
+cam
+camaraderie
+camarilla
+camass
+camber
+cambered
+cambering
+cambial
+cambium
+cambric
+came
+camel
+camelback
+cameleer
+camellia
+camellias
+camelopard
+camels
+camel's
+cameo
+cameos
+camera
+cameral
+cameraman
+cameramen
+cameras
+camera's
+camion
+camisole
+camlet
+camomile
+camorra
+camouflage
+camouflaged
+camouflages
+camouflaging
+camp
+campaign
+campaigned
+campaigner
+campaigners
+campaigning
+campaigns
+campanile
+campanologist
+campanology
+campanula
+camped
+camper
+campers
+campfire
+campground
+campgrounds
+camphene
+camphor
+camphorate
+camphorated
+camphoric
+camping
+campo
+camps
+campsite
+campsites
+campstool
+campus
+campuses
+campus's
+campy
+cams
+camshaft
+camshafts
+can
+canal
+canalisation
+canalisations
+canalisation's
+canalise
+canalised
+canalises
+canalising
+canalled
+canalling
+canals
+canal's
+canard
+canaries
+canary
+canary's
+canasta
+cancan
+cancel
+cancellable
+cancellation
+cancellations
+cancellation's
+cancelled
+canceller
+cancelling
+cancels
+cancer
+cancerous
+cancerously
+cancers
+cancer's
+candela
+candelabra
+candelabrum
+candent
+candescence
+candescent
+candid
+candidacy
+candidate
+candidates
+candidate's
+candidature
+candidly
+candidness
+candied
+candies
+candle
+candleberry
+candled
+candlefish
+candleholder
+candlelight
+candlelit
+candlenut
+candlepin
+candlepins
+candlepower
+candles
+candlesnuffer
+candlestick
+candlesticks
+candlestick's
+candlewick
+candlewood
+candling
+candour
+candours
+candour's
+candy
+candyfloss
+candying
+candytuft
+cane
+canebrake
+caned
+canella
+caner
+canes
+cangue
+canine
+canines
+caning
+canister
+canisters
+canker
+cankered
+cankering
+cankerous
+cankerworm
+cannabin
+cannabis
+canned
+cannel
+cannelloni
+canner
+canneries
+canners
+canner's
+cannery
+cannibal
+cannibalisation
+cannibalisations
+cannibalisation's
+cannibalise
+cannibalised
+cannibalises
+cannibalising
+cannibalism
+cannibalism's
+cannibalistic
+cannibals
+cannibal's
+cannier
+cannily
+canniness
+canning
+cannon
+cannonade
+cannonball
+cannoned
+cannoning
+cannonry
+cannons
+cannon's
+cannot
+canny
+canoe
+canoed
+canoeing
+canoeist
+canoeists
+canoeist's
+canoes
+canoe's
+canon
+canoness
+canonical
+canonically
+canonicals
+canonicate
+canonicity
+canonisation
+canonisations
+canonisation's
+canonise
+canonised
+canonises
+canonising
+canonist
+canonry
+canons
+canon's
+canoodle
+canopy
+canorous
+canorously
+canorousness
+cans
+can's
+canst
+cant
+can't
+cantabile
+cantaloupe
+cantaloupes
+cantaloupe's
+cantankerous
+cantankerously
+cantankerousness
+cantata
+cantatas
+cantatrice
+canted
+canteen
+canteens
+canter
+cantered
+cantharides
+canticle
+cantilena
+cantilever
+cantilevers
+cantina
+canting
+cantle
+cantles
+canto
+canton
+cantonal
+cantonment
+cantons
+canton's
+cantor
+cantors
+cantor's
+cantos
+cantus
+canvas
+canvasback
+canvases
+canvass
+canvas's
+canvassed
+canvasser
+canvassers
+canvasses
+canvassing
+canyon
+canyons
+canyon's
+canzone
+canzonet
+cap
+capabilities
+capability
+capability's
+capable
+capably
+capacious
+capaciously
+capaciousness
+capacitance
+capacitances
+capacitate
+capacities
+capacitive
+capacitor
+capacitors
+capacitor's
+capacity
+caparison
+cape
+capelin
+caper
+capered
+capering
+capers
+capes
+capeskin
+capful
+capillaceous
+capillarity
+capillary
+capita
+capital
+capitalisation
+capitalisations
+capitalisation's
+capitalise
+capitalised
+capitalises
+capitalising
+capitalism
+capitalist
+capitalistic
+capitalistically
+capitalists
+capitalist's
+capitally
+capitals
+capitates
+capitation
+capitol
+capitols
+capitol's
+capitulary
+capitulate
+capitulated
+capitulates
+capitulation
+capo
+capon
+caponise
+caponised
+caponises
+caponising
+caporal
+capote
+capped
+capper
+cappers
+capping
+cappuccino
+capriccio
+capriccioso
+caprice
+capricious
+capriciously
+capriciousness
+caprifoliaceous
+capriole
+caps
+cap's
+capsaicin
+capsize
+capsized
+capsizes
+capsizing
+capstan
+capstans
+capstone
+capsular
+capsulate
+capsulated
+capsule
+capsules
+captain
+captaincy
+captained
+captaining
+captains
+captainship
+caption
+captioned
+captioning
+captions
+caption's
+captious
+captiously
+captiousness
+captivate
+captivated
+captivates
+captivating
+captivation
+captivator
+captive
+captives
+captive's
+captivity
+captor
+captors
+captor's
+capture
+captured
+capturer
+capturers
+captures
+capturing
+capuche
+capuchin
+caput
+capybara
+car
+carabineer
+caracal
+caracara
+caracole
+carafe
+caramel
+caramelise
+caramelised
+caramelises
+caramelising
+carangid
+carapace
+carapaces
+carapace's
+carat
+caravan
+caravans
+caravan's
+caravansary
+caravanserai
+caravel
+caraway
+carbide
+carbine
+carbineer
+carbines
+carbohydrate
+carbohydrates
+carbohydrate's
+carbolated
+carbolic
+carbon
+carbonaceous
+carbonate
+carbonated
+carbonates
+carbonation
+carbonic
+carboniferous
+carbonisation
+carbonisations
+carbonisation's
+carbonise
+carbonised
+carbonises
+carbonising
+carbonless
+carbons
+carbon's
+carbonyl
+carboxyl
+carboxylic
+carboy
+carbuncle
+carbuncled
+carbuncular
+carburet
+carburetion
+carburettor
+carburisation
+carburise
+carburised
+carburises
+carburising
+carcajou
+carcase
+carcass
+carcasses
+carcass's
+carcinogen
+carcinogenesis
+carcinogenic
+carcinogenicity
+carcinogens
+carcinoma
+card
+cardamom
+cardboard
+cardboards
+carded
+carder
+cardiac
+cardigan
+cardigans
+cardigan's
+cardinal
+cardinalities
+cardinality
+cardinality's
+cardinally
+cardinals
+cardinalship
+carding
+cardiogram
+cardiograms
+cardiogram's
+cardiograph
+cardiographer
+cardiographs
+cardioids
+cardioid's
+cardiologist
+cardiology
+cardiopulmonary
+cardiovascular
+cardoon
+cards
+card's
+cardsharp
+cardsharper
+care
+cared
+careen
+careened
+careening
+career
+careered
+careering
+careerism
+careerist
+careerists
+careers
+career's
+carefree
+careful
+carefully
+carefulness
+careless
+carelessly
+carelessness
+carer
+carers
+cares
+caress
+caressed
+caresser
+caresses
+caressing
+caressingly
+caret
+caretaker
+caretakers
+caretaking
+carets
+careworn
+carfare
+cargo
+cargoes
+cargos
+carhop
+caribou
+caribous
+caricature
+caricatured
+caricatures
+caricaturist
+caries
+carillon
+carina
+caring
+carioca
+cariole
+carious
+carline
+carling
+carload
+carloads
+carmagnole
+carmaker
+carminative
+carmine
+carnage
+carnal
+carnality
+carnally
+carnation
+carnations
+carnauba
+carne
+carnelian
+carnet
+carnival
+carnivals
+carnival's
+carnivore
+carnivorous
+carnivorously
+carnivorousness
+carob
+caroche
+carol
+carolled
+caroller
+carollers
+carolling
+carols
+carol's
+carom
+carotene
+carotid
+carousal
+carouse
+caroused
+carousel
+carousels
+carousel's
+carouser
+carousing
+carp
+carpal
+carped
+carpel
+carpenter
+carpentered
+carpentering
+carpenters
+carpenter's
+carpentry
+carpet
+carpetbag
+carpetbagger
+carpetbags
+carpetbag's
+carpeted
+carpeting
+carpets
+carping
+carpingly
+carpology
+carport
+carps
+carrack
+carrageen
+carrel
+carrels
+carriage
+carriages
+carriage's
+carriageway
+carriageways
+carried
+carrier
+carriers
+carries
+carrion
+carronade
+carrot
+carrots
+carrot's
+carroty
+carrousel
+carry
+carryall
+carrycot
+carrying
+carryon
+carryout
+carryover
+carryovers
+cars
+car's
+carsick
+cart
+cartage
+carte
+carted
+cartel
+cartelisation
+cartelise
+cartelises
+cartels
+carter
+carters
+cartful
+carthorse
+cartilage
+cartilaginous
+carting
+cartload
+cartloads
+cartogram
+cartograms
+cartogram's
+cartographer
+cartographers
+cartographic
+cartographical
+cartography
+carton
+cartons
+carton's
+cartoon
+cartoonist
+cartoonists
+cartoons
+cartoon's
+cartouche
+cartridge
+cartridges
+cartridge's
+carts
+cartulary
+cartwheel
+cartwheels
+carve
+carved
+carvel
+carven
+carver
+carvers
+carves
+carving
+carvings
+caryatid
+caryophyllaceous
+caryopsis
+casa
+casaba
+casabas
+casaba's
+cascade
+cascaded
+cascades
+cascading
+cascara
+cascarilla
+case
+casebook
+casebooks
+cased
+casein
+caseload
+caseloads
+casemate
+casement
+casements
+casement's
+casern
+cases
+casework
+caseworker
+caseworkers
+caseworm
+cash
+cashable
+cashbook
+cashed
+casher
+cashers
+cashes
+cashew
+cashews
+cashier
+cashiers
+cashier's
+cashing
+cashless
+cashmere
+casing
+casings
+casino
+casinos
+cask
+casket
+caskets
+casket's
+casks
+cask's
+cassata
+cassation
+cassava
+casserole
+casseroles
+casserole's
+cassette
+cassettes
+cassimere
+cassock
+cassocked
+cassowary
+cast
+castanet
+castanets
+castaway
+caste
+castellan
+castellany
+castellated
+caster
+casters
+castes
+caste's
+castigate
+castigated
+castigates
+castigation
+castigator
+castigators
+castile
+casting
+castings
+castle
+castled
+castles
+castling
+castor
+castrate
+castrated
+castrates
+castrating
+castration
+castrato
+castrator
+castrators
+casts
+cast's
+casual
+casually
+casualness
+casuals
+casualties
+casualty
+casualty's
+casuist
+casuistic
+casuistry
+cat
+catabolic
+catabolically
+catabolism
+catachresis
+catachrestic
+catachrestical
+cataclinal
+cataclysm
+cataclysmal
+cataclysmic
+catacomb
+catafalque
+catalectic
+catalepsy
+cataleptic
+cataleptically
+catalo
+catalogue
+catalogued
+cataloguer
+cataloguers
+catalogues
+catalogue's
+cataloguing
+catalpa
+catalyse
+catalyser
+catalysers
+catalyser's
+catalyses
+catalysis
+catalyst
+catalysts
+catalyst's
+catalytic
+catalytically
+catalyzed
+catamaran
+catamite
+catamount
+cataphyll
+cataplasm
+cataplexy
+catapult
+catapulted
+catapulting
+catapults
+cataract
+cataracts
+catarrh
+catarrhal
+catarrhally
+catastasis
+catastrophe
+catastrophes
+catastrophe's
+catastrophic
+catastrophically
+catatonia
+catatonic
+catbird
+catboat
+catcall
+catch
+catchall
+catcher
+catchers
+catcher's
+catches
+catchfly
+catchier
+catching
+catchpenny
+catchpole
+catchpoll
+catchword
+catchwords
+catchy
+catechesis
+catechetical
+catechisation
+catechisations
+catechisation's
+catechise
+catechised
+catechiser
+catechisers
+catechises
+catechising
+catechism
+catechist
+catechistic
+catecholamine
+catechu
+catechumen
+categorical
+categorically
+categories
+categorisation
+categorisations
+categorisation's
+categorise
+categorised
+categoriser
+categorisers
+categorises
+categorising
+category
+category's
+catena
+catenation
+catenulate
+cater
+catered
+caterer
+cateress
+catering
+caterpillar
+caterpillars
+caterpillar's
+caters
+caterwaul
+catfish
+catgut
+catharses
+catharsis
+cathartic
+cathead
+cathedra
+cathedral
+cathedrals
+cathedral's
+catheter
+catheterisation
+catheterisations
+catheterisation's
+catheterise
+catheterises
+catheters
+cathode
+cathodes
+cathode's
+catholic
+catholically
+catholicise
+catholicises
+catholicity
+catholicon
+cathouse
+cationic
+catkin
+catlike
+catmint
+catnap
+catnaps
+catnip
+catoptrics
+cats
+cat's
+catsup
+cattail
+cattalo
+cattery
+cattier
+catties
+cattily
+cattiness
+cattle
+cattleman
+cattlemen
+catty
+catwalk
+catwalks
+catwalk's
+caucus
+caucuses
+caucusing
+caudal
+caudally
+caudate
+caudated
+caudation
+caudillo
+caudle
+caught
+cauldron
+cauldrons
+caulicle
+caulicles
+cauliflower
+cauliflowers
+caulis
+caulk
+caulker
+caulks
+causal
+causality
+causally
+causation
+causations
+causation's
+causative
+causatively
+cause
+caused
+causeless
+causer
+causerie
+causes
+causeway
+causeways
+causeway's
+causey
+causeys
+causing
+caustic
+caustically
+causticity
+caustics
+cauterisation
+cauterisations
+cauterisation's
+cauterise
+cauterised
+cauterises
+cauterising
+caution
+cautionary
+cautioned
+cautioner
+cautioners
+cautioning
+cautions
+cautious
+cautiously
+cautiousness
+cavalcade
+cavalcades
+cavalier
+cavalierly
+cavalla
+cavalry
+cavalryman
+cavalrymen
+cavatina
+cave
+caveat
+caveats
+caveat's
+caved
+cavefish
+caveman
+cavemen
+caver
+cavern
+cavernous
+cavernously
+caverns
+cavern's
+caves
+caviar
+cavicorn
+cavies
+cavil
+cavilled
+caviller
+cavillers
+cavilling
+caving
+cavities
+cavity
+cavity's
+cavort
+cavorted
+cavorting
+cavy
+caw
+cawed
+cawing
+caws
+cay
+cayenne
+cc
+cease
+ceased
+ceasefire
+ceasefire's
+ceaseless
+ceaselessly
+ceaselessness
+ceases
+ceasing
+cedar
+cedarn
+cede
+ceded
+cedi
+cedilla
+ceding
+ceil
+ceilidh
+ceiling
+ceilings
+ceiling's
+ceilometers
+ceilometer's
+celandine
+celebrant
+celebrants
+celebrate
+celebrated
+celebrates
+celebrating
+celebration
+celebrations
+celebrator
+celebrators
+celebratory
+celebrities
+celebrity
+celebrity's
+celeriac
+celerity
+celery
+celesta
+celestial
+celestially
+celiac
+celibacy
+celibate
+celibates
+cell
+cellar
+cellarage
+cellared
+cellarer
+cellaret
+cellarets
+cellaring
+cellars
+cellar's
+celled
+cellist
+cellists
+cellist's
+cello
+cellophane
+cellos
+cells
+cellular
+cellule
+celluloid
+celluloid's
+cellulose
+celluloses
+cellulous
+cembalo
+cement
+cementation
+cemented
+cementer
+cementing
+cements
+cemeteries
+cemetery
+cemetery's
+cenacle
+cenospecies
+cenotaph
+cense
+censer
+censing
+censor
+censored
+censorial
+censoring
+censorious
+censoriously
+censoriousness
+censors
+censorship
+censurable
+censure
+censured
+censurer
+censures
+censuring
+census
+censuses
+census's
+cent
+centaur
+centaurs
+centaury
+centavo
+centenarian
+centenary
+centennial
+centennially
+centesimal
+centesimo
+centigrade
+centilitre
+centime
+centimetre
+centimetres
+centimetre's
+centipede
+centipedes
+centipede's
+cento
+central
+centralisation
+centralisations
+centralisation's
+centralise
+centralised
+centraliser
+centralisers
+centralises
+centralising
+centralism
+centralist
+centralistic
+centralists
+centrality
+centrally
+centrals
+centre
+centreboard
+centred
+centrefold
+centreline
+centrelines
+centrepiece
+centrepieces
+centrepiece's
+centres
+centre's
+centric
+centrically
+centricity
+centrifugal
+centrifugalise
+centrifugally
+centrifugals
+centrifugation
+centrifuge
+centrifuged
+centrifuges
+centrifuge's
+centrifuging
+centring
+centripetal
+centripetally
+centrism
+centrist
+centroclinal
+cents
+centum
+centurial
+centuries
+centurion
+century
+century's
+cephalic
+cephalically
+cephalisation
+cephalochordate
+cephalopod
+ceramal
+ceramic
+ceramicist
+ceramics
+ceramist
+cerate
+ceratoid
+cereal
+cereals
+cereal's
+cerebellum
+cerebral
+cerebrally
+cerebrate
+cerebrated
+cerebrates
+cerebrating
+cerebration
+cerebrations
+cerebrospinal
+cerebrum
+cerecloth
+cerement
+ceremonial
+ceremonialism
+ceremonialist
+ceremonialists
+ceremonially
+ceremonies
+ceremonious
+ceremoniously
+ceremoniousness
+ceremony
+ceremony's
+ceresin
+cereus
+ceria
+cerise
+cerium
+cernuous
+cero
+cerography
+ceroplastic
+ceroplastics
+cerotic
+cerotype
+cert
+certain
+certainly
+certainties
+certainty
+certes
+certifiable
+certifiably
+certificate
+certificated
+certificates
+certificating
+certification
+certifications
+certificatory
+certified
+certifier
+certifiers
+certifies
+certify
+certifying
+certiorari
+certitude
+certitudes
+cerulean
+ceruse
+cervical
+cervices
+cervix
+cervixes
+cess
+cessation
+cessations
+cessation's
+cession
+cessionary
+cesspit
+cesspool
+cetacean
+cetaceans
+cetacean's
+cetera
+ceteris
+chaconne
+chaetopod
+chafe
+chafer
+chaff
+chaffer
+chaffered
+chafferer
+chaffering
+chaffinch
+chaffing
+chaffy
+chafing
+chagrin
+chagrined
+chagrining
+chagrins
+chain
+chained
+chaining
+chainlike
+chainman
+chains
+chair
+chaired
+chairing
+chairlady
+chairman
+chairmanship
+chairmanships
+chairmen
+chairperson
+chairpersons
+chairperson's
+chairs
+chairwoman
+chairwomen
+chaise
+chalcedonic
+chalcedony
+chalcography
+chalcopyrite
+chalet
+chalice
+chaliced
+chalices
+chalice's
+chalk
+chalkboard
+chalked
+chalking
+chalks
+chalkstone
+chalky
+challenge
+challenged
+challenger
+challengers
+challenges
+challenging
+challengingly
+challis
+chalybeate
+chamber
+chambered
+chambering
+chamberlain
+chamberlains
+chamberlain's
+chambermaid
+chambermaids
+chambers
+chambray
+chambrays
+chameleon
+chameleonic
+chameleons
+chamfer
+chamfered
+chamfering
+chamfers
+chamois
+chamomile
+champ
+champagne
+champak
+champers
+champignon
+champion
+championed
+championing
+champions
+championship
+championships
+championship's
+champs
+chance
+chanced
+chanceful
+chancel
+chancellery
+chancellor
+chancellors
+chancellorship
+chancellorships
+chancels
+chanceries
+chancery
+chances
+chancier
+chanciness
+chancing
+chancre
+chancres
+chancrous
+chancy
+chandelier
+chandeliers
+chandelier's
+chandelle
+chandler
+chandlery
+change
+changeability
+changeable
+changeableness
+changeably
+changed
+changeful
+changefully
+changefulness
+changeless
+changelessly
+changelessness
+changeling
+changeover
+changeovers
+changeover's
+changer
+changers
+changes
+changing
+channel
+channelled
+channelling
+channels
+chanson
+chant
+chanted
+chanter
+chanteuse
+chanteuses
+chantey
+chanticleer
+chanticleers
+chanticleer's
+chanting
+chants
+chaos
+chaotic
+chaotically
+chap
+chaparral
+chapatti
+chapbook
+chapeau
+chapeaus
+chapeaux
+chapel
+chapels
+chapel's
+chaperon
+chaperonage
+chaperone
+chaperoned
+chaperones
+chaplain
+chaplaincies
+chaplaincy
+chaplains
+chaplain's
+chaplet
+chapleted
+chaplets
+chapping
+chaps
+chap's
+chapter
+chaptered
+chapterhouse
+chaptering
+chapters
+chapter's
+char
+charabanc
+characin
+character
+charactering
+characterisation
+characterisations
+characterisation's
+characterise
+characterised
+characteriser
+characterisers
+characterises
+characterising
+characteristic
+characteristically
+characteristics
+characteristic's
+characterless
+characters
+character's
+charade
+charades
+charcoal
+charcoaled
+charcoals
+charcuterie
+chard
+chare
+charge
+chargeable
+charged
+charger
+chargers
+charges
+charging
+charier
+charily
+chariness
+chariot
+charioteer
+charioteers
+chariots
+chariot's
+charisma
+charismata
+charismatic
+charitable
+charitableness
+charitably
+charities
+charity
+charity's
+charivari
+charladies
+charlady
+charlatan
+charlatanism
+charlatanry
+charlatans
+charlock
+charm
+charmed
+charmer
+charmers
+charming
+charmingly
+charms
+charnel
+charpoy
+charqui
+charred
+charring
+chars
+chart
+chartable
+charted
+charter
+chartered
+charterhouse
+chartering
+charters
+charting
+chartings
+chartist
+chartists
+chartless
+chartreuse
+chartroom
+chartrooms
+charts
+chartularies
+chartulary
+charwoman
+charwomen
+chary
+chase
+chased
+chaser
+chasers
+chases
+chasing
+chasm
+chasms
+chasm's
+chassepot
+chasseur
+chassis
+chaste
+chastely
+chasten
+chastened
+chastener
+chasteness
+chastening
+chastise
+chastised
+chastisement
+chastisements
+chastiser
+chastisers
+chastises
+chastising
+chastity
+chasuble
+chat
+chateau
+chateaubriand
+chateaus
+chateau's
+chateaux
+chatelaine
+chatelaines
+chatoyant
+chats
+chatted
+chattel
+chattels
+chatter
+chatterbox
+chatterboxes
+chattered
+chatterer
+chatterers
+chattering
+chatters
+chattier
+chattily
+chattiness
+chatting
+chatty
+chauffeur
+chauffeured
+chauffeuring
+chauffeurs
+chaulmoogra
+chausses
+chauvinism
+chauvinism's
+chauvinist
+chauvinistic
+chauvinistically
+chauvinists
+chauvinist's
+chayote
+cheap
+cheapen
+cheapened
+cheapening
+cheapens
+cheaper
+cheapest
+cheapie
+cheapish
+cheaply
+cheapness
+cheapskate
+cheapskates
+cheat
+cheated
+cheater
+cheaters
+cheating
+cheats
+check
+checkable
+checked
+checker
+checkerberry
+checkerbloom
+checkerboard
+checkerboards
+checkering
+checkers
+checking
+checklist
+checklists
+checkmark
+checkmarks
+checkmate
+checkmated
+checkmates
+checkmating
+checkout
+checkouts
+checkpoint
+checkpoints
+checkpoint's
+checkroom
+checkrooms
+checkrow
+checks
+checksum
+checksums
+checksum's
+cheddar
+cheek
+cheekbone
+cheekbones
+cheekier
+cheekily
+cheekiness
+cheeks
+cheek's
+cheeky
+cheep
+cheeps
+cheer
+cheered
+cheerer
+cheerers
+cheerful
+cheerfully
+cheerfulness
+cheerier
+cheerily
+cheeriness
+cheering
+cheerio
+cheerlead
+cheerleader
+cheerleaders
+cheerless
+cheerlessly
+cheerlessness
+cheers
+cheery
+cheese
+cheeseboard
+cheeseburger
+cheeseburgers
+cheesecake
+cheesecakes
+cheesecake's
+cheesecloth
+cheesed
+cheesemonger
+cheeseparing
+cheeseparings
+cheeses
+cheese's
+cheesewood
+cheesier
+cheesiness
+cheesing
+cheesy
+cheetah
+cheetahs
+chef
+chefs
+chef's
+chelonian
+chemic
+chemical
+chemically
+chemicals
+chemise
+chemises
+chemisette
+chemist
+chemistries
+chemistry
+chemists
+chemist's
+chemoautotrophic
+chemoautotrophy
+chemoprophylaxis
+chemoreception
+chemoreceptive
+chemoreceptor
+chemosphere
+chemosynthesis
+chemotherapy
+chemotherapy's
+chemotropism
+chenille
+chenopod
+cheque
+chequebook
+chequebooks
+chequebook's
+chequer
+chequerboard
+chequered
+chequers
+cheques
+cheque's
+cherish
+cherished
+cherisher
+cherishes
+cherishing
+cheroot
+cherries
+cherry
+cherry's
+cherrystone
+chersonese
+chert
+cherub
+cherubic
+cherubically
+cherubim
+cherubs
+cherub's
+chervil
+chervils
+chess
+chessboard
+chessboards
+chessman
+chessmen
+chest
+chestier
+chestnut
+chestnuts
+chestnut's
+chests
+chesty
+chevalier
+cheviot
+chevron
+chevrotain
+chew
+chewable
+chewed
+chewer
+chewers
+chewing
+chews
+chewy
+chi
+chiaroscurist
+chiaroscuro
+chiasmus
+chiastic
+chibouk
+chic
+chicane
+chicanery
+chicaning
+chichi
+chick
+chickadee
+chickadees
+chickadee's
+chicken
+chickened
+chickenhearted
+chickening
+chickenpox
+chickens
+chickpea
+chickpeas
+chickpea's
+chicks
+chickweed
+chickweeds
+chicly
+chicory
+chidden
+chide
+chided
+chides
+chiding
+chief
+chiefdom
+chiefdoms
+chiefly
+chiefs
+chief's
+chieftain
+chieftaincies
+chieftaincy
+chieftains
+chieftain's
+chieftainship
+chiffchaff
+chiffon
+chiffonier
+chigger
+chiggers
+chignon
+chilblain
+chilblains
+child
+childbearing
+childbed
+childbirth
+childbirths
+childcare
+childhood
+childhoods
+childish
+childishly
+childishness
+childless
+childlessness
+childlike
+childlikeness
+childminder
+childminders
+childminding
+childrearing
+children
+children's
+child's
+chiliad
+chiliasm
+chill
+chilled
+chillers
+chilli
+chillier
+chillies
+chillily
+chilliness
+chilling
+chillingly
+chillness
+chills
+chillum
+chilly
+chime
+chimed
+chimer
+chimera
+chimerical
+chimerically
+chimes
+chime's
+chiming
+chimney
+chimneypiece
+chimneypot
+chimneys
+chimney's
+chimp
+chimpanzee
+chimpanzees
+chimps
+chin
+china
+chinaberry
+chinaware
+chinbone
+chinch
+chincherinchee
+chinchilla
+chine
+chink
+chinked
+chinks
+chinless
+chinned
+chinning
+chino
+chinos
+chinquapin
+chins
+chin's
+chintz
+chintzier
+chintzy
+chinwag
+chip
+chipboard
+chipmunk
+chipmunks
+chipmunk's
+chipolata
+chipped
+chipper
+chipping
+chips
+chip's
+chirm
+chirographer
+chirographic
+chirographical
+chiromancer
+chiromancy
+chiropodist
+chiropodists
+chiropody
+chiropractic
+chiropractor
+chiropractors
+chiropteran
+chirp
+chirped
+chirpily
+chirping
+chirps
+chirpy
+chirrup
+chirruped
+chirruping
+chirrups
+chisel
+chiselled
+chiseller
+chisellers
+chiselling
+chisels
+chit
+chital
+chitchat
+chitin
+chits
+chitterlings
+chivalric
+chivalrous
+chivalrously
+chivalrousness
+chivalry
+chive
+chives
+chivvied
+chivvy
+chivvying
+chlamydeous
+chloral
+chlorate
+chlordane
+chloride
+chlorides
+chlorinate
+chlorinated
+chlorinates
+chlorination
+chlorine
+chlorite
+chloroform
+chlorophyll
+chloropicrin
+chloroplast
+chloroplasts
+chloroplast's
+chloroprene
+chlorpromazine
+chlortetracycline
+chock
+chocked
+chocker
+chocking
+chocks
+chock's
+chocolate
+chocolates
+chocolate's
+chocolaty
+choice
+choicely
+choiceness
+choicer
+choices
+choicest
+choir
+choirboy
+choirmaster
+choirs
+choir's
+choke
+chokeberry
+chokebore
+chokecherry
+choked
+chokedamp
+choker
+chokers
+chokes
+choking
+chokingly
+choky
+choler
+cholera
+choleric
+cholesterol
+cholinergic
+cholinesterase
+chomp
+chon
+chook
+choom
+choose
+chooser
+choosers
+chooses
+choosey
+choosier
+choosing
+choosy
+chop
+chopfallen
+chophouse
+choplogic
+chopped
+chopper
+choppers
+chopper's
+choppier
+choppily
+choppiness
+chopping
+choppy
+chops
+chopstick
+chopsticks
+choragus
+choral
+chorale
+chorales
+chorally
+chord
+chordate
+chorded
+chording
+chordophone
+chords
+chord's
+chore
+chorea
+choreograph
+choreographed
+choreographer
+choreographers
+choreographic
+choreographically
+choreography
+chores
+choriamb
+choric
+chorine
+chorines
+chorister
+chorizo
+chorographic
+chorography
+chorology
+chortle
+chortled
+chortles
+chortling
+chorus
+chorused
+choruses
+chose
+chosen
+chough
+choux
+chow
+chowder
+chowders
+chowhound
+chowtime
+chrematistic
+chrestomathy
+chrism
+chrismatory
+chrisom
+christen
+christened
+christening
+christens
+chromate
+chromatic
+chromatically
+chromaticity
+chromatics
+chromatin
+chromatogram
+chromatograms
+chromatogram's
+chromatograph
+chromatographic
+chromatographically
+chromatography
+chrome
+chromed
+chromes
+chromic
+chrominance
+chroming
+chromium
+chromo
+chromolithograph
+chromolithography
+chromosomal
+chromosome
+chromosomes
+chromosome's
+chromyl
+chronic
+chronically
+chronicle
+chronicled
+chronicler
+chroniclers
+chronicles
+chronogram
+chronogrammatic
+chronograms
+chronograph
+chronographic
+chronographs
+chronologic
+chronological
+chronologically
+chronologies
+chronologist
+chronologists
+chronology
+chronology's
+chronometer
+chronometers
+chronometer's
+chronometric
+chronometrically
+chronometry
+chronoscope
+chronoscopes
+chrysalis
+chrysanthemum
+chrysanthemums
+chrysanthemum's
+chryselephantine
+chthonian
+chub
+chubbier
+chubbiest
+chubbiness
+chubby
+chubs
+chuck
+chucked
+chuckhole
+chucking
+chuckle
+chuckled
+chucklehead
+chuckleheaded
+chuckleheads
+chuckles
+chuckling
+chucks
+chuck's
+chuckwalla
+chufa
+chuff
+chuffed
+chuffing
+chug
+chugalug
+chugging
+chugs
+chukka
+chum
+chummier
+chummily
+chumminess
+chumming
+chummy
+chump
+chumps
+chump's
+chums
+chunk
+chunkier
+chunkily
+chunks
+chunk's
+chunky
+chunter
+church
+churched
+churches
+churchgoer
+churchgoers
+churchgoing
+churching
+churchless
+churchliness
+churchly
+churchman
+churchmanship
+churchmen
+churchwarden
+churchwardens
+churchwoman
+churchwomen
+churchy
+churchyard
+churchyards
+churchyard's
+churl
+churlish
+churlishly
+churlishness
+churls
+churn
+churned
+churner
+churners
+churning
+churns
+chute
+chutes
+chute's
+chutney
+chutneys
+chutzpah
+ciao
+ciborium
+cicada
+cicadas
+cicatricle
+cicatrix
+cicerone
+cichlid
+cichlids
+cider
+ciders
+cig
+cigar
+cigarette
+cigarettes
+cigarette's
+cigarillo
+cigarillos
+cigars
+cigar's
+cilia
+ciliate
+ciliated
+ciliates
+cilice
+ciliolate
+cilium
+cinch
+cinches
+cincture
+cinder
+cinders
+cinder's
+cindery
+cine
+cineaste
+cinema
+cinemagoer
+cinemagoers
+cinemas
+cinematic
+cinematically
+cinematise
+cinematograph
+cinematographer
+cinematographic
+cinematographically
+cinematographs
+cinematography
+cineol
+cinerarium
+cinereous
+cinnabar
+cinnamon
+cinque
+cinquecento
+cinquefoil
+cipher
+ciphered
+ciphering
+ciphers
+cipher's
+ciphertext
+cipolin
+circa
+circadian
+circle
+circled
+circler
+circles
+circlet
+circling
+circuit
+circuital
+circuited
+circuiting
+circuitous
+circuitously
+circuitousness
+circuitry
+circuits
+circuit's
+circuity
+circular
+circularisation
+circularise
+circularised
+circulariser
+circularisers
+circularises
+circularising
+circularities
+circularity
+circularly
+circulars
+circular's
+circulate
+circulated
+circulates
+circulating
+circulation
+circulations
+circulator
+circulators
+circulatory
+circumambient
+circumbendibus
+circumcise
+circumcised
+circumciser
+circumcises
+circumcising
+circumcision
+circumcisions
+circumference
+circumferences
+circumferential
+circumferentially
+circumflex
+circumflexes
+circumfluent
+circumfluous
+circumfuse
+circumfused
+circumfusing
+circumfusion
+circumjacent
+circumlocution
+circumlocutions
+circumlocution's
+circumlocutory
+circumlunar
+circumnavigate
+circumnavigated
+circumnavigates
+circumnavigating
+circumnavigation
+circumnavigations
+circumnavigator
+circumnavigators
+circumpolar
+circumscribe
+circumscribed
+circumscribes
+circumscribing
+circumscription
+circumscriptions
+circumsolar
+circumspect
+circumspection
+circumspections
+circumspectly
+circumstance
+circumstanced
+circumstances
+circumstance's
+circumstancing
+circumstantial
+circumstantially
+circumstantiate
+circumstantiated
+circumstantiates
+circumstantiating
+circumvallated
+circumvallates
+circumvallating
+circumvallation
+circumvent
+circumvented
+circumventing
+circumvention
+circumventions
+circumvents
+circumvolution
+circumvolutions
+circus
+circuses
+circus's
+cirque
+cirques
+cirrhoses
+cirrhosis
+cirrhotic
+cirri
+cirrocumulus
+cirrostratus
+cirrus
+cist
+cistern
+cisterns
+cistern's
+cit
+citable
+citadel
+citadels
+citadel's
+citation
+citations
+citation's
+cite
+cited
+cites
+cithara
+cither
+citied
+cities
+citified
+citify
+citing
+citizen
+citizenly
+citizenry
+citizens
+citizen's
+citizenship
+citole
+citrate
+citrated
+citreous
+citric
+citron
+citronella
+citrus
+citruses
+cittern
+citterns
+city
+city's
+cityscape
+cityscapes
+citywide
+ciudad
+civet
+civic
+civically
+civics
+civil
+civilian
+civilianisation
+civilianise
+civilianised
+civilianises
+civilianising
+civilians
+civilian's
+civilisable
+civilisation
+civilisations
+civilisation's
+civilise
+civilised
+civiliser
+civilisers
+civilises
+civilising
+civilities
+civility
+civilly
+civvies
+clabber
+clachan
+clack
+clacker
+clackers
+clacks
+clad
+cladding
+cladode
+claim
+claimable
+claimant
+claimants
+claimant's
+claimed
+claimer
+claiming
+claims
+clairaudience
+clairvoyance
+clairvoyant
+clairvoyantly
+clairvoyants
+clam
+clamant
+clambake
+clambakes
+clamber
+clambered
+clamberer
+clambering
+clambers
+clammier
+clammily
+clamminess
+clamming
+clammy
+clamorous
+clamour
+clamoured
+clamourer
+clamourers
+clamourer's
+clamouring
+clamours
+clamp
+clampdown
+clamped
+clamper
+clamping
+clamps
+clams
+clam's
+clamshell
+clamshells
+clamworm
+clamworms
+clan
+clandestine
+clandestinely
+clandestineness
+clang
+clanged
+clanger
+clangers
+clanging
+clangour
+clangoured
+clangouring
+clangours
+clangour's
+clangs
+clank
+clanked
+clanking
+clankingly
+clannish
+clannishly
+clannishness
+clans
+clansman
+clansmen
+clap
+clapboard
+clapboards
+clapped
+clapper
+clapperboard
+clapperboards
+clappers
+clapping
+claps
+claptrap
+claque
+claques
+claret
+clarets
+clarification
+clarifications
+clarified
+clarifier
+clarifies
+clarify
+clarifying
+clarinet
+clarinets
+clarinettist
+clarion
+clarity
+clash
+clashed
+clasher
+clashes
+clashing
+clasp
+clasped
+clasping
+clasps
+class
+classed
+classer
+classes
+classic
+classical
+classicalism
+classicalist
+classicality
+classically
+classicisation
+classicise
+classicised
+classicises
+classicising
+classicism
+classicist
+classicistic
+classics
+classier
+classiest
+classifiable
+classification
+classifications
+classificatory
+classified
+classifieds
+classifier
+classifiers
+classifies
+classify
+classifying
+classiness
+classing
+classis
+classless
+classlessness
+classmate
+classmates
+classmate's
+classroom
+classrooms
+classroom's
+classy
+clatter
+clattered
+clatterer
+clattering
+clatteringly
+clatters
+clausal
+clause
+clauses
+clause's
+claustrophobia
+claustrophobic
+clave
+claver
+clavichord
+clavichordist
+clavicle
+clavicles
+clavicle's
+clavicorn
+clavier
+claw
+clawed
+clawer
+clawing
+claws
+clay
+clayed
+clayey
+claying
+clayish
+claymore
+clays
+clay's
+clean
+cleanable
+cleaned
+cleaner
+cleaners
+cleaner's
+cleanest
+cleaning
+cleanlier
+cleanliness
+cleanly
+cleanness
+cleans
+cleanse
+cleansed
+cleanser
+cleansers
+cleanses
+cleansing
+cleanup
+cleanups
+cleanup's
+clear
+clearable
+clearance
+clearances
+clearance's
+cleared
+clearer
+clearest
+clearheaded
+clearheadedly
+clearing
+clearinghouse
+clearings
+clearing's
+clearly
+clearness
+clears
+clearstory
+clearway
+clearways
+clearwing
+cleat
+cleats
+cleavage
+cleavages
+cleave
+cleaved
+cleaver
+cleavers
+cleaves
+cleaving
+cleek
+clef
+clefs
+clef's
+cleft
+clefts
+cleft's
+clemency
+clement
+clemently
+clench
+clenched
+clenches
+clenching
+clepsydra
+clerestory
+clergy
+clergyman
+clergymen
+cleric
+clerical
+clericalism
+clericalist
+clerically
+clericals
+clerics
+clerihew
+clerk
+clerked
+clerking
+clerkly
+clerks
+clerk's
+clerkship
+cleveite
+clever
+cleverer
+cleverest
+cleverish
+cleverly
+cleverness
+clevis
+clianthus
+clich�
+clich�s
+click
+clicked
+clicker
+clickers
+clicking
+clicks
+client
+cliental
+clientele
+clients
+client's
+cliff
+cliffhanging
+cliffs
+cliff's
+cliffy
+climacteric
+climactic
+climactically
+climate
+climates
+climate's
+climatic
+climatically
+climatologically
+climatologist
+climatologists
+climatology
+climax
+climaxed
+climaxes
+climaxing
+climb
+climbable
+climbed
+climber
+climbers
+climbing
+climbs
+clime
+climes
+clime's
+clinch
+clinched
+clincher
+clinches
+clinching
+cline
+clines
+cling
+clingfish
+clinging
+clings
+clingy
+clinic
+clinical
+clinically
+clinician
+clinicians
+clinics
+clinic's
+clink
+clinked
+clinker
+clinkered
+clinkering
+clinkers
+clinkstone
+clinometers
+clinometer's
+clinometric
+clinostat
+clinquant
+clip
+clipboard
+clipboards
+clipped
+clipper
+clippers
+clipper's
+clippie
+clipping
+clippings
+clipping's
+clips
+clip's
+clipsheet
+clique
+cliques
+clique's
+cliquey
+cliquish
+cliquishly
+cliquishness
+clitoral
+clitoris
+cloak
+cloaked
+cloaking
+cloakroom
+cloakrooms
+cloaks
+cloak's
+clobber
+clobbered
+clobbering
+clobbers
+cloche
+clock
+clocked
+clocker
+clocking
+clocklike
+clockmaker
+clocks
+clockwise
+clockwork
+clod
+cloddish
+cloddishness
+cloddy
+clodhopper
+clodhoppers
+clodhopper's
+clodhopping
+clods
+clod's
+clog
+clogged
+clogging
+clogs
+clog's
+cloister
+cloistered
+cloistering
+cloisters
+cloister's
+cloistral
+clomp
+clomped
+clomping
+clomps
+clonally
+clone
+cloned
+clones
+cloning
+clonk
+clonked
+clonking
+clonks
+clop
+clopped
+clopping
+clops
+closable
+close
+closed
+closedown
+closefisted
+closely
+closemouthed
+closeness
+closeout
+closer
+closers
+closes
+closest
+closet
+closeted
+closets
+closing
+closings
+closure
+closured
+closures
+closure's
+closuring
+clot
+cloth
+clothbound
+clothe
+clothed
+clothes
+clotheshorse
+clothesline
+clotheslines
+clothespin
+clothespress
+clothier
+clothing
+cloths
+clotted
+clotting
+cloture
+cloud
+cloudberry
+cloudburst
+cloudbursts
+clouded
+cloudier
+cloudiest
+cloudily
+cloudiness
+clouding
+cloudland
+cloudless
+cloudlessly
+cloudlessness
+cloudlet
+cloudlets
+clouds
+cloudscape
+cloudy
+clough
+clout
+clove
+cloven
+clover
+cloverleaf
+cloverleaves
+cloves
+clown
+clownery
+clowning
+clownish
+clownishly
+clownishness
+clowns
+cloy
+cloying
+cloyingly
+club
+clubbable
+clubbed
+clubber
+clubbier
+clubbing
+clubby
+clubfoot
+clubfooted
+clubhaul
+clubhouse
+clubman
+clubroom
+clubrooms
+clubs
+club's
+cluck
+clucked
+clucking
+clucks
+clucky
+clue
+clueing
+clueless
+clues
+clue's
+cluing
+clumber
+clump
+clumped
+clumping
+clumps
+clumpy
+clumsier
+clumsiest
+clumsily
+clumsiness
+clumsy
+clung
+clunk
+clunked
+clunker
+clunking
+clunks
+clunky
+clupeid
+cluster
+clustered
+clustering
+clusters
+clustery
+clutch
+clutched
+clutches
+clutching
+clutter
+cluttered
+cluttering
+clutters
+cm
+coach
+coached
+coacher
+coaches
+coaching
+coachman
+coachmen
+coach's
+coachwork
+coactive
+coadjutant
+coadjutor
+coadunate
+coadunation
+coagulant
+coagulants
+coagulate
+coagulated
+coagulates
+coagulating
+coagulation
+coagulum
+coal
+coaled
+coaler
+coalesce
+coalesced
+coalescence
+coalescent
+coalesces
+coalescing
+coalface
+coalfield
+coalfields
+coalfish
+coaling
+coalition
+coalitionist
+coalmine
+coalmines
+coals
+coarse
+coarsely
+coarsen
+coarsened
+coarseness
+coarsening
+coarser
+coarsest
+coast
+coastal
+coasted
+coaster
+coasters
+coastguard
+coastguardsman
+coasting
+coastland
+coastline
+coasts
+coastward
+coastwise
+coat
+coated
+coater
+coaters
+coati
+coating
+coatings
+coatroom
+coats
+coattail
+coattails
+coax
+coaxed
+coaxer
+coaxes
+coaxial
+coaxially
+coaxing
+cob
+cobalt
+cobaltite
+cobber
+cobble
+cobbled
+cobbler
+cobblers
+cobbler's
+cobbles
+cobblestone
+cobblestones
+cobbling
+cobelligerent
+cobia
+coble
+cobnut
+cobra
+cobs
+cob's
+cobweb
+cobwebbed
+cobwebby
+cobwebs
+cobweb's
+coca
+cocaine
+cocainisation
+cocainise
+cocainises
+coccid
+coccyx
+cochineal
+cochlea
+cock
+cockade
+cockaded
+cockamamie
+cockatiel
+cockatoo
+cockatrice
+cockboat
+cockchafer
+cockcrow
+cocked
+cocker
+cockerel
+cockeye
+cockeyed
+cockfight
+cockfighting
+cockfights
+cockfight's
+cockhorse
+cockier
+cockily
+cockiness
+cocking
+cockle
+cockleboat
+cocklebur
+cockleshell
+cockloft
+cockney
+cockneyfy
+cockneyish
+cockneyism
+cockneys
+cockpit
+cockpits
+cockroach
+cockroaches
+cocks
+cockscomb
+cocksfoot
+cockshy
+cockspur
+cocksure
+cocktail
+cocktails
+cocktail's
+cocky
+coco
+cocoa
+coconscious
+coconsciousness
+coconut
+coconuts
+coconut's
+cocoon
+cocoons
+cocoon's
+cocotte
+cocoyam
+cod
+coda
+coddle
+coddled
+coddler
+coddles
+coddling
+code
+codebook
+codebooks
+coded
+codeine
+codeless
+coder
+coders
+coder's
+codes
+codetermination
+codetermine
+codetermines
+codeword
+codewords
+codex
+codfish
+codger
+codices
+codicil
+codicillary
+codification
+codifications
+codification's
+codified
+codifier
+codifiers
+codifier's
+codifies
+codify
+codifying
+coding
+codling
+codpiece
+codpieces
+cods
+codswallop
+coeducation
+coeducational
+coeducationally
+coefficient
+coefficients
+coefficient's
+coelacanth
+coelenterate
+coenobite
+coenzyme
+coequal
+coequality
+coequally
+coerce
+coerced
+coerces
+coercible
+coercing
+coercion
+coercions
+coercive
+coercively
+coerciveness
+coessential
+coetaneous
+coeternal
+coeternally
+coeternity
+coeval
+coexist
+coexisted
+coexistence
+coexistent
+coexisting
+coexists
+coextend
+coextensive
+coextensively
+cofactor
+cofactors
+coffee
+coffeehouse
+coffeepot
+coffees
+coffee's
+coffer
+cofferdam
+coffers
+coffer's
+coffin
+coffins
+coffin's
+coffle
+coffles
+cog
+cogency
+cogent
+cogently
+cogged
+cogging
+cogitate
+cogitated
+cogitates
+cogitating
+cogitation
+cogitative
+cogito
+cognac
+cognate
+cognately
+cognates
+cognation
+cognations
+cognisable
+cognisably
+cognisance
+cognisant
+cognise
+cognised
+cognises
+cognising
+cognition
+cognitional
+cognitions
+cognitive
+cognitively
+cognomen
+cognoscenti
+cogon
+cogs
+cogwheel
+cogwheels
+cohabit
+cohabitant
+cohabitants
+cohabitation
+cohabitations
+cohabited
+cohabiting
+cohabits
+coheir
+cohere
+cohered
+coherence
+coherency
+coherent
+coherently
+coherer
+coheres
+cohering
+cohesion
+cohesive
+cohesively
+cohesiveness
+cohobate
+cohort
+cohorts
+cohort's
+cohune
+coif
+coiffeur
+coiffeuse
+coiffing
+coiffure
+coil
+coiled
+coiling
+coils
+coin
+coinage
+coincide
+coincided
+coincidence
+coincidences
+coincidence's
+coincident
+coincidental
+coincidentally
+coincidently
+coincides
+coinciding
+coined
+coining
+coins
+coinsurance
+coir
+coital
+coition
+coitus
+coke
+cokes
+coking
+col
+cola
+colander
+colanders
+colatitudes
+colcannon
+colcothar
+cold
+colder
+coldest
+coldheartedly
+coldish
+coldly
+coldness
+colds
+coleopteran
+coleslaw
+coleus
+colewort
+coley
+coli
+colic
+colicky
+colicroot
+coliseum
+colitis
+collaborate
+collaborated
+collaborates
+collaborating
+collaboration
+collaborationism
+collaborationist
+collaborationists
+collaborations
+collaborative
+collaboratively
+collaborator
+collaborators
+collaborator's
+collage
+collagen
+collages
+collagist
+collagists
+collapse
+collapsed
+collapses
+collapsibility
+collapsible
+collapsing
+collar
+collarbone
+collard
+collared
+collaring
+collarless
+collars
+collate
+collated
+collateral
+collateralise
+collaterally
+collates
+collating
+collation
+collations
+collative
+collator
+collators
+colleague
+colleagues
+colleague's
+colleagueship
+collect
+collectable
+collected
+collectedly
+collectedness
+collectible
+collecting
+collection
+collections
+collection's
+collective
+collectively
+collectives
+collectivisation
+collectivisations
+collectivisation's
+collectivise
+collectivised
+collectivises
+collectivism
+collectivist
+collectivistic
+collectivists
+collector
+collectors
+collector's
+collectorship
+collects
+college
+colleges
+college's
+collegial
+collegiality
+collegially
+collegian
+collegians
+collegiate
+collembolan
+collide
+collided
+collides
+colliding
+collie
+collier
+collieries
+colliery
+collies
+colligate
+colligation
+collimate
+collimated
+collimates
+collimating
+collimation
+collimator
+collinear
+collision
+collisions
+collision's
+collocate
+collocates
+collocation
+collocutor
+colloid
+colloidal
+colloq
+colloquia
+colloquial
+colloquialism
+colloquialisms
+colloquialism's
+colloquially
+colloquist
+colloquium
+colloquy
+collotype
+collude
+colluded
+colludes
+colluding
+collusion
+collusions
+collusive
+collusively
+collywobbles
+colocynth
+cologne
+colon
+colonel
+colonelcy
+colonels
+colonel's
+colonial
+colonialism
+colonialist
+colonially
+colonials
+colonic
+colonies
+colonisable
+colonisation
+colonisations
+colonisation's
+colonise
+colonised
+coloniser
+colonisers
+colonises
+colonising
+colonist
+colonists
+colonist's
+colonnade
+colonnaded
+colonnades
+colons
+colon's
+colony
+colony's
+colophon
+colophony
+coloration
+coloratura
+colossal
+colossally
+colossi
+colossus
+colossuses
+colostomy
+colour
+colourability
+colourable
+colourableness
+colourably
+colouration
+colourcast
+coloured
+coloureds
+colourer
+colourers
+colourer's
+colourfast
+colourfastness
+colourful
+colourfully
+colourfulness
+colouring
+colourings
+colourisation
+colourisations
+colourisation's
+colourise
+colourises
+colourist
+colouristic
+colourists
+colourist's
+colourless
+colourlessly
+colourlessness
+colours
+colour's
+colporteur
+colt
+coltish
+coltishly
+coltishness
+colts
+colt's
+coltsfoot
+colubrine
+colugo
+columbarium
+columbic
+columbine
+columbines
+columbium
+column
+columnar
+columned
+columnists
+columns
+column's
+colure
+colza
+com
+coma
+comas
+comate
+comatose
+comatulid
+comb
+combat
+combatant
+combatants
+combatant's
+combated
+combating
+combative
+combatively
+combativeness
+combats
+combed
+comber
+combers
+combinability
+combinable
+combination
+combinational
+combinations
+combination's
+combinative
+combinatorial
+combinatory
+combine
+combined
+combiner
+combiners
+combines
+combing
+combings
+combining
+combo
+combos
+combs
+combust
+combustibility
+combustible
+combustibles
+combusting
+combustion
+combustions
+combustive
+combustor
+combustors
+come
+comeback
+comedian
+comedians
+comedian's
+comedic
+comedienne
+comediennes
+comedies
+comedown
+comedy
+comedy's
+comelier
+comeliness
+comely
+comer
+comers
+comes
+comestible
+comestibles
+comet
+cometh
+comets
+comet's
+comeuppance
+comfier
+comfit
+comfits
+comfort
+comfortable
+comfortableness
+comfortably
+comforted
+comforter
+comforters
+comforting
+comfortingly
+comfortless
+comforts
+comfrey
+comfy
+comic
+comical
+comicality
+comically
+comics
+comic's
+coming
+comings
+comitia
+comity
+comma
+command
+commandant
+commandants
+commandant's
+commanded
+commandeer
+commandeered
+commandeering
+commandeers
+commander
+commanders
+commandership
+commanding
+commandingly
+commandment
+commandments
+commandment's
+commando
+commandos
+commands
+command's
+commas
+comma's
+commeasure
+commedia
+commemorate
+commemorated
+commemorates
+commemorating
+commemoration
+commemorations
+commemorative
+commemoratively
+commemoratives
+commemorator
+commemorators
+commence
+commenced
+commencement
+commencements
+commencement's
+commencer
+commences
+commencing
+commend
+commendable
+commendably
+commendation
+commendations
+commendation's
+commendatory
+commended
+commending
+commends
+commensally
+commensurability
+commensurable
+commensurably
+commensurate
+commensurately
+commensuration
+commensurations
+comment
+commentaries
+commentary
+commentary's
+commentate
+commentates
+commentator
+commentators
+commentator's
+commented
+commenter
+commenting
+comments
+comment's
+commerce
+commercial
+commercialisation
+commercialisations
+commercialisation's
+commercialise
+commercialised
+commercialises
+commercialising
+commercialism
+commercialist
+commercialistic
+commercially
+commercials
+commie
+commies
+comminatory
+commingle
+commingled
+comminute
+commiserate
+commiserated
+commiserates
+commiserating
+commiseration
+commiserative
+commissar
+commissariat
+commissary
+commission
+commissionaire
+commissioned
+commissioner
+commissioners
+commissionership
+commissioning
+commissions
+commissural
+commit
+commitment
+commitments
+commitment's
+commits
+committable
+committal
+committed
+committee
+committeeman
+committeemen
+committees
+committee's
+committeewoman
+committeewomen
+committing
+commix
+commixture
+commode
+commodes
+commodious
+commodiously
+commodiousness
+commodities
+commodity
+commodity's
+commodore
+commodores
+commodore's
+common
+commonage
+commonalities
+commonality
+commonalty
+commoner
+commoners
+commoner's
+commonest
+commonly
+commonness
+commonplace
+commonplaceness
+commonplaces
+commons
+commonsense
+commonsensible
+commonsensical
+commonweal
+commonwealth
+commonwealths
+commotion
+commotions
+commove
+commoved
+commoves
+commoving
+communal
+communalisation
+communalisations
+communalisation's
+communalise
+communalised
+communaliser
+communalisers
+communalises
+communalising
+communalism
+communalist
+communalists
+communalities
+communality
+communally
+communard
+communards
+commune
+communed
+communes
+communicability
+communicable
+communicableness
+communicably
+communicant
+communicants
+communicant's
+communicate
+communicated
+communicates
+communicating
+communication
+communicational
+communications
+communicative
+communicatively
+communicativeness
+communicator
+communicators
+communicator's
+communicatory
+communing
+communion
+communiqu�
+communiqu�s
+communisation
+communisations
+communisation's
+communise
+communised
+communises
+communising
+communism
+communist
+communistic
+communistically
+communists
+communist's
+communitarian
+communities
+community
+community's
+commutable
+commutate
+commutated
+commutates
+commutating
+commutation
+commutations
+commutative
+commutatively
+commute
+commuted
+commuter
+commuters
+commutes
+commuting
+comp
+compact
+compacted
+compacter
+compacters
+compacting
+compaction
+compactly
+compactness
+compactor
+compactors
+compactor's
+compacts
+companies
+companion
+companionable
+companionableness
+companionably
+companionate
+companions
+companion's
+companionship
+companionway
+companionways
+company
+company's
+comparability
+comparable
+comparableness
+comparably
+comparative
+comparatively
+comparativeness
+comparatives
+comparator
+comparators
+comparator's
+compare
+compared
+comparer
+compares
+comparing
+comparison
+comparisons
+comparison's
+compartment
+compartmental
+compartmentalisation
+compartmentalisations
+compartmentalisation's
+compartmentalise
+compartmentalised
+compartmentalises
+compartmentalising
+compartmented
+compartmenting
+compartments
+compass
+compassable
+compassed
+compasses
+compassing
+compassion
+compassionate
+compassionately
+compassionateness
+compassionless
+compatibilities
+compatibility
+compatibility's
+compatible
+compatibleness
+compatibles
+compatibly
+compatriot
+compatriotic
+compatriots
+compeer
+compel
+compellable
+compelled
+compeller
+compelling
+compellingly
+compels
+compendia
+compendious
+compendiously
+compendiousness
+compendium
+compensability
+compensable
+compensate
+compensated
+compensates
+compensating
+compensation
+compensational
+compensations
+compensative
+compensator
+compensators
+compensatory
+compete
+competed
+competence
+competences
+competencies
+competency
+competent
+competently
+competes
+competing
+competition
+competitions
+competition's
+competitive
+competitively
+competitiveness
+competitor
+competitors
+competitor's
+compilation
+compilations
+compilation's
+compile
+compiled
+compiler
+compilers
+compiler's
+compiles
+compiling
+complacence
+complacency
+complacent
+complain
+complainant
+complainants
+complained
+complainer
+complainers
+complaining
+complainingly
+complains
+complaint
+complaints
+complaint's
+complaisance
+complaisant
+complaisantly
+complement
+complementarily
+complementariness
+complementary
+complementation
+complemented
+complementing
+complements
+complete
+completed
+completely
+completeness
+completer
+completes
+completing
+completion
+completions
+completive
+complex
+complexes
+complexion
+complexional
+complexioned
+complexities
+complexity
+complexly
+complexness
+compliance
+compliances
+compliancy
+compliant
+compliantly
+complicacy
+complicate
+complicated
+complicatedly
+complicatedness
+complicates
+complicating
+complication
+complications
+complicity
+complied
+complier
+compliers
+complies
+compliment
+complimentarily
+complimentary
+complimented
+complimenting
+compliments
+complot
+comply
+complying
+compo
+component
+componential
+components
+component's
+comport
+comported
+comportment
+compos
+compose
+composed
+composedly
+composedness
+composer
+composers
+composer's
+composes
+composing
+composite
+compositely
+composites
+composition
+compositional
+compositionally
+compositions
+compositor
+compositors
+compost
+composure
+compotation
+compote
+compound
+compoundable
+compounded
+compounding
+compounds
+comprador
+comprehend
+comprehended
+comprehendible
+comprehending
+comprehends
+comprehensibility
+comprehensible
+comprehensibleness
+comprehensibly
+comprehension
+comprehensive
+comprehensively
+comprehensiveness
+compress
+compressed
+compresses
+compressibility
+compressible
+compressing
+compression
+compressions
+compressive
+compressively
+compressor
+compressors
+comprisable
+comprisal
+comprisals
+comprise
+comprised
+comprises
+comprising
+compromise
+compromised
+compromiser
+compromisers
+compromises
+compromising
+compromisingly
+comptroller
+comptrollers
+comptroller's
+comptrollership
+compulsion
+compulsions
+compulsion's
+compulsive
+compulsively
+compulsiveness
+compulsives
+compulsivity
+compulsorily
+compulsory
+compunction
+compunctions
+compunctious
+compurgation
+compurgator
+computability
+computable
+computation
+computational
+computationally
+computations
+computation's
+compute
+computed
+computer
+computerisation
+computerise
+computerised
+computerises
+computerising
+computers
+computer's
+computes
+computing
+comrade
+comradely
+comrades
+comradeship
+con
+conation
+conatus
+concatenate
+concatenated
+concatenates
+concatenating
+concatenation
+concatenations
+concave
+concavity
+conceal
+concealable
+concealed
+concealing
+concealment
+conceals
+concede
+conceded
+concededly
+conceder
+concedes
+conceding
+conceit
+conceited
+conceitedly
+conceitedness
+conceits
+conceivability
+conceivable
+conceivableness
+conceivably
+conceive
+conceived
+conceiver
+conceives
+conceiving
+concelebrate
+concentrate
+concentrated
+concentrates
+concentrating
+concentration
+concentrations
+concentrative
+concentrator
+concentrators
+concentre
+concentric
+concentrically
+concentricity
+concept
+conceptacle
+conception
+conceptions
+conception's
+conceptive
+concepts
+concept's
+conceptual
+conceptualisation
+conceptualisations
+conceptualisation's
+conceptualise
+conceptualised
+conceptualises
+conceptualising
+conceptualism
+conceptualist
+conceptualistic
+conceptuality
+conceptually
+concern
+concerned
+concernedly
+concerning
+concernment
+concerns
+concert
+concerted
+concertedly
+concertgoer
+concerti
+concertina
+concertino
+concertmaster
+concerto
+concertos
+concerts
+concession
+concessionaire
+concessionaires
+concessionary
+concessions
+concession's
+concessive
+conch
+conches
+conchie
+conchiferous
+concierge
+concierges
+conciliate
+conciliated
+conciliates
+conciliation
+conciliations
+conciliator
+conciliatory
+concise
+concisely
+conciseness
+concision
+concisions
+conclave
+conclaves
+conclude
+concluded
+concluder
+concludes
+concluding
+conclusion
+conclusions
+conclusion's
+conclusive
+conclusively
+conclusiveness
+concoct
+concocted
+concocter
+concoction
+concoctive
+concocts
+concomitance
+concomitant
+concomitantly
+concomitants
+concord
+concordance
+concordant
+concordantly
+concordat
+concourse
+concourses
+concrescence
+concrescences
+concrete
+concreted
+concretely
+concreteness
+concretes
+concreting
+concretion
+concretionary
+concretisation
+concretisations
+concretise
+concretised
+concretises
+concretising
+concubine
+concubines
+concupiscence
+concupiscent
+concur
+concurred
+concurrence
+concurrencies
+concurrency
+concurrent
+concurrently
+concurring
+concurs
+concuss
+concussed
+concusses
+concussing
+concussion
+concussions
+concussive
+concussively
+condemn
+condemnable
+condemnation
+condemnations
+condemnatory
+condemned
+condemner
+condemners
+condemning
+condemns
+condensable
+condensate
+condensates
+condensation
+condensational
+condensations
+condense
+condensed
+condenser
+condensers
+condenses
+condensing
+condescend
+condescendence
+condescending
+condescendingly
+condescends
+condescension
+condign
+condignly
+condiment
+condimental
+condiments
+condition
+conditional
+conditionality
+conditionally
+conditionals
+conditioned
+conditioner
+conditioners
+conditioning
+conditions
+condo
+condolatory
+condole
+condoled
+condolence
+condolences
+condoling
+condom
+condominium
+condominiums
+condominium's
+condoms
+condonable
+condone
+condoned
+condoner
+condones
+condoning
+condor
+condos
+condo's
+condottiere
+conduce
+conduced
+conduces
+conducing
+conducive
+conduciveness
+conduct
+conductance
+conducted
+conductibility
+conductible
+conducting
+conduction
+conductive
+conductively
+conductivities
+conductivity
+conductor
+conductors
+conductor's
+conductress
+conducts
+conduit
+conduits
+cone
+coned
+coneflower
+cones
+cone's
+confab
+confabbed
+confabbing
+confabulate
+confabulated
+confabulates
+confabulation
+confabulations
+confabulator
+confabulatory
+confect
+confection
+confectionary
+confectioner
+confectioners
+confectionery
+confections
+confects
+confederacy
+confederate
+confederates
+confederation
+confederations
+confederative
+confer
+conferee
+conferees
+conference
+conferences
+conference's
+conferencing
+conferential
+conferment
+conferrable
+conferral
+conferrals
+conferred
+conferrer
+conferrers
+conferrer's
+conferring
+confers
+confess
+confessable
+confessant
+confessed
+confessedly
+confesses
+confessing
+confession
+confessional
+confessionals
+confessions
+confession's
+confessor
+confessors
+confessor's
+confetti
+confidant
+confidante
+confidantes
+confidants
+confidant's
+confide
+confided
+confidence
+confidences
+confident
+confidential
+confidentiality
+confidentially
+confidentialness
+confidently
+confider
+confides
+confiding
+confidingly
+confidingness
+configurable
+configuration
+configurationally
+configurations
+configuration's
+configurative
+configure
+configured
+configures
+configuring
+confine
+confined
+confinement
+confinements
+confinement's
+confiner
+confines
+confining
+confirm
+confirmable
+confirmation
+confirmations
+confirmation's
+confirmatory
+confirmed
+confirmedly
+confirmedness
+confirming
+confirms
+confiscate
+confiscated
+confiscates
+confiscating
+confiscation
+confiscations
+confiscator
+confiscators
+confiscatory
+conflagrant
+conflagrate
+conflagrated
+conflagrates
+conflagration
+conflagrations
+conflate
+conflated
+conflates
+conflating
+conflation
+conflations
+conflict
+conflicted
+conflicting
+conflictingly
+confliction
+conflictions
+conflictive
+conflicts
+confluence
+confluences
+confluent
+confluents
+conflux
+confluxes
+conform
+conformability
+conformable
+conformably
+conformal
+conformance
+conformation
+conformational
+conformations
+conformation's
+conformed
+conformer
+conformers
+conforming
+conformism
+conformist
+conformists
+conformity
+conforms
+confound
+confounded
+confoundedly
+confounder
+confounding
+confounds
+confraternities
+confraternity
+confrere
+confreres
+confront
+confrontation
+confrontational
+confrontationist
+confrontations
+confrontation's
+confronted
+confronter
+confronters
+confronting
+confronts
+confuse
+confused
+confusedly
+confusedness
+confuses
+confusing
+confusingly
+confusion
+confusions
+confutation
+confutations
+confutative
+confute
+confuted
+confuter
+confutes
+confuting
+cong
+conga
+congeal
+congealed
+congealing
+congealment
+congeals
+congener
+congenial
+congeniality
+congenially
+congenital
+congenitally
+conger
+congeries
+congest
+congested
+congesting
+congestion
+congestive
+congests
+conglomerate
+conglomerated
+conglomerates
+conglomeratic
+conglomeration
+conglomerations
+conglutinate
+conglutinated
+conglutinates
+conglutinating
+conglutination
+congou
+congrats
+congratulate
+congratulated
+congratulates
+congratulation
+congratulations
+congratulator
+congratulatory
+congregant
+congregate
+congregated
+congregates
+congregating
+congregation
+congregational
+congregationalism
+congregations
+congregator
+congress
+congressed
+congresses
+congressing
+congressional
+congressionally
+congressman
+congressmen
+congress's
+congresswoman
+congresswomen
+congruence
+congruency
+congruent
+congruently
+congruity
+congruous
+congruously
+congruousness
+conic
+conical
+conically
+conics
+conifer
+coniferous
+conifers
+coniine
+coning
+conjectural
+conjecturally
+conjecture
+conjectured
+conjecturer
+conjectures
+conjecturing
+conjoin
+conjoined
+conjoining
+conjoins
+conjoint
+conjointly
+conjugal
+conjugality
+conjugally
+conjugant
+conjugate
+conjugated
+conjugates
+conjugating
+conjugation
+conjugational
+conjugationally
+conjugations
+conjugative
+conjunct
+conjunction
+conjunctional
+conjunctionally
+conjunctions
+conjunction's
+conjunctiva
+conjunctive
+conjunctively
+conjunctivitis
+conjuncts
+conjuncture
+conjunctures
+conjuration
+conjurations
+conjure
+conjured
+conjurer
+conjurers
+conjures
+conjuring
+conjuror
+conk
+conked
+conker
+conkers
+conking
+conks
+connate
+connately
+connatural
+connaturally
+connect
+connectable
+connected
+connectedly
+connectedness
+connecter
+connecters
+connectible
+connecting
+connection
+connectional
+connections
+connection's
+connective
+connectively
+connectives
+connective's
+connectivity
+connector
+connectors
+connector's
+connects
+conned
+connexion
+connexions
+conning
+conniption
+connivance
+connive
+connived
+conniver
+connives
+conniving
+connoisseur
+connoisseurs
+connoisseur's
+connoisseurship
+connotation
+connotations
+connotative
+connotatively
+connote
+connoted
+connotes
+connoting
+connubial
+connubiality
+connubially
+conquer
+conquerable
+conquered
+conquering
+conqueror
+conquerors
+conqueror's
+conquers
+conquest
+conquests
+conquest's
+conquistador
+conquistadores
+conquistadors
+cons
+consanguine
+consanguineous
+consanguineously
+consanguinity
+conscience
+conscienceless
+consciences
+conscience's
+conscientious
+conscientiously
+conscientiousness
+conscionable
+conscionably
+conscious
+consciously
+consciousness
+conscribe
+conscribed
+conscribes
+conscribing
+conscript
+conscripted
+conscripting
+conscription
+conscriptions
+conscripts
+consecrate
+consecrated
+consecrates
+consecrating
+consecration
+consecrations
+consecrator
+consecratory
+consecution
+consecutive
+consecutively
+consecutiveness
+consensual
+consensually
+consensus
+consent
+consentaneous
+consentaneously
+consented
+consenter
+consenters
+consentient
+consenting
+consentingly
+consents
+consequence
+consequences
+consequence's
+consequent
+consequential
+consequentiality
+consequentially
+consequentialness
+consequently
+consequents
+conservancy
+conservation
+conservational
+conservationist
+conservationists
+conservationist's
+conservations
+conservation's
+conservatism
+conservative
+conservatively
+conservativeness
+conservatives
+conservatoire
+conservator
+conservatorium
+conservatory
+conserve
+conserved
+conserver
+conserves
+conserving
+consider
+considerable
+considerably
+considerate
+considerately
+considerateness
+consideration
+considerations
+considered
+considerer
+considering
+considers
+consign
+consignable
+consignation
+consigned
+consignee
+consigning
+consignment
+consignor
+consigns
+consist
+consisted
+consistence
+consistencies
+consistency
+consistent
+consistently
+consisting
+consistorial
+consistory
+consists
+consociate
+consociation
+consol
+consolable
+consolation
+consolations
+consolation's
+consolatory
+console
+consoled
+consoler
+consolers
+consoles
+consolidate
+consolidated
+consolidates
+consolidating
+consolidation
+consolidations
+consolidator
+consolidators
+consoling
+consolingly
+consonance
+consonant
+consonantal
+consonantly
+consonants
+consonant's
+consort
+consorted
+consorting
+consortium
+consorts
+conspectus
+conspectuses
+conspicuous
+conspicuously
+conspicuousness
+conspiracies
+conspiracy
+conspiracy's
+conspirator
+conspiratorial
+conspiratorially
+conspirators
+conspirator's
+conspire
+conspired
+conspires
+conspiring
+constable
+constables
+constable's
+constabulary
+constancy
+constant
+constantan
+constantly
+constants
+constellate
+constellation
+constellations
+constellation's
+consternate
+consternated
+consternates
+consternating
+consternation
+constipate
+constipated
+constipates
+constipating
+constipation
+constituencies
+constituency
+constituency's
+constituent
+constituently
+constituents
+constituent's
+constitute
+constituted
+constitutes
+constituting
+constitution
+constitutional
+constitutionalism
+constitutionalist
+constitutionality
+constitutionally
+constitutions
+constitutive
+constitutively
+constrain
+constrained
+constrainedly
+constraining
+constrains
+constraint
+constraints
+constraint's
+constrict
+constricted
+constricting
+constriction
+constrictions
+constrictive
+constrictor
+constrictors
+constricts
+constringe
+constringed
+constringent
+constringes
+constringing
+construable
+construal
+construct
+constructed
+constructible
+constructing
+construction
+constructional
+constructionist
+constructions
+construction's
+constructive
+constructively
+constructiveness
+constructivism
+constructivist
+constructor
+constructors
+constructor's
+constructs
+construe
+construed
+construes
+construing
+consubstantial
+consubstantiate
+consubstantiation
+consuetude
+consuetudinary
+consul
+consular
+consulate
+consulates
+consulate's
+consuls
+consul's
+consulship
+consult
+consultancies
+consultancy
+consultant
+consultants
+consultant's
+consultation
+consultations
+consultation's
+consultative
+consulted
+consulter
+consulting
+consults
+consumable
+consumables
+consume
+consumed
+consumedly
+consumer
+consumerism
+consumerist
+consumers
+consumer's
+consumes
+consuming
+consummate
+consummated
+consummately
+consummates
+consummating
+consummation
+consummations
+consummative
+consummator
+consumption
+consumptions
+consumption's
+consumptive
+consumptively
+contact
+contacted
+contacting
+contactor
+contacts
+contagion
+contagious
+contagiously
+contagiousness
+contain
+containable
+contained
+container
+containerboard
+containerisation
+containerise
+containerised
+containerises
+containerising
+containers
+containing
+containment
+containments
+containment's
+contains
+contaminant
+contaminants
+contaminate
+contaminated
+contaminates
+contaminating
+contamination
+contaminations
+contaminative
+contaminator
+cont'd
+contemn
+contemplate
+contemplated
+contemplates
+contemplating
+contemplation
+contemplations
+contemplative
+contemplatively
+contemplativeness
+contemplator
+contemporaneous
+contemporaneously
+contemporaneousness
+contemporaries
+contemporarily
+contemporariness
+contemporary
+contemporise
+contemporised
+contemporises
+contemporising
+contempt
+contemptible
+contemptibleness
+contemptibly
+contemptuous
+contemptuously
+contemptuousness
+contend
+contended
+contender
+contenders
+contending
+contends
+content
+contented
+contentedly
+contentedness
+contenting
+contention
+contentions
+contention's
+contentious
+contentiously
+contentiousness
+contently
+contentment
+contents
+conterminous
+conterminously
+contest
+contestable
+contestant
+contestants
+contestation
+contested
+contester
+contesters
+contesting
+contests
+context
+contexts
+context's
+contextual
+contextually
+contexture
+contiguity
+contiguous
+contiguously
+contiguousness
+continence
+continent
+continental
+continentally
+continently
+continents
+continent's
+contingence
+contingencies
+contingency
+contingency's
+contingent
+contingently
+contingents
+contingent's
+continua
+continual
+continually
+continuance
+continuances
+continuance's
+continuant
+continuation
+continuations
+continuation's
+continuative
+continuatively
+continuator
+continue
+continued
+continuer
+continues
+continuing
+continuities
+continuity
+continuo
+continuous
+continuously
+continuousness
+continuum
+contort
+contorted
+contorting
+contortion
+contortionist
+contortionists
+contortions
+contorts
+contour
+contoured
+contouring
+contours
+contour's
+contraband
+contrabandist
+contrabass
+contrabassist
+contrabassoon
+contraception
+contraceptive
+contraceptives
+contract
+contracted
+contractibility
+contractible
+contractile
+contractility
+contracting
+contraction
+contractions
+contraction's
+contractive
+contractor
+contractors
+contractor's
+contracts
+contractual
+contractually
+contracture
+contradict
+contradictable
+contradicted
+contradicting
+contradiction
+contradictions
+contradiction's
+contradictious
+contradictor
+contradictorily
+contradictoriness
+contradictory
+contradicts
+contradistinction
+contradistinctions
+contradistinctive
+contradistinctively
+contradistinguish
+contrail
+contraindicate
+contraindicated
+contraindicates
+contraindicating
+contraindication
+contraindications
+contraindication's
+contraindicative
+contralto
+contraposition
+contraption
+contraptions
+contraption's
+contrapuntal
+contrapuntally
+contrapuntist
+contrarieties
+contrariety
+contrarily
+contrariness
+contrariwise
+contrary
+contrast
+contrastable
+contrasted
+contrasting
+contrastingly
+contrastive
+contrastively
+contrasts
+contrasuggestible
+contravallation
+contravene
+contravened
+contravener
+contravenes
+contravening
+contravention
+contretemps
+contribute
+contributed
+contributes
+contributing
+contribution
+contributions
+contributively
+contributor
+contributors
+contributor's
+contributory
+contrite
+contritely
+contriteness
+contrition
+contrivance
+contrivances
+contrivance's
+contrive
+contrived
+contriver
+contrives
+contriving
+control
+controllability
+controllable
+controllably
+controlled
+controller
+controllers
+controller's
+controllership
+controllerships
+controlling
+controls
+control's
+controversial
+controversialist
+controversialists
+controversially
+controversies
+controversy
+controversy's
+controvert
+controverter
+controvertible
+controverts
+contumacious
+contumaciously
+contumacy
+contumelious
+contumeliously
+contumely
+contuse
+contused
+contuses
+contusing
+contusion
+contusions
+conundrum
+conundrums
+conundrum's
+conurbation
+conurbations
+convalesce
+convalescence
+convalescent
+convalescing
+convection
+convectional
+convections
+convective
+convector
+convectors
+convene
+convened
+convener
+conveners
+convenes
+convenience
+conveniences
+convenience's
+convenient
+conveniently
+convening
+convent
+conventicler
+convention
+conventional
+conventionalisation
+conventionalise
+conventionalised
+conventionalises
+conventionalising
+conventionalism
+conventionalist
+conventionality
+conventionally
+conventioneer
+conventions
+convention's
+convents
+convent's
+converge
+converged
+convergence
+convergences
+convergent
+converges
+converging
+conversable
+conversance
+conversancy
+conversant
+conversantly
+conversation
+conversational
+conversationalist
+conversationally
+conversations
+conversation's
+converse
+conversed
+conversely
+converses
+conversing
+conversion
+conversional
+conversions
+convert
+converted
+converter
+converters
+convertibility
+convertible
+convertibleness
+convertibly
+converting
+convertiplane
+converts
+convex
+convexity
+convey
+conveyance
+conveyances
+conveyance's
+conveyed
+conveyer
+conveyers
+conveying
+conveyor
+conveyors
+conveys
+convict
+convicted
+convicting
+conviction
+convictions
+conviction's
+convictive
+convicts
+convince
+convinced
+convincer
+convincers
+convinces
+convincing
+convincingly
+convincingness
+convivial
+conviviality
+convivially
+convocation
+convocational
+convocations
+convoke
+convoked
+convokes
+convoking
+convolute
+convoluted
+convolution
+convolutions
+convolve
+convolved
+convolves
+convolving
+convoy
+convoyed
+convoying
+convoys
+convulse
+convulsed
+convulses
+convulsing
+convulsion
+convulsionary
+convulsions
+convulsion's
+convulsive
+convulsively
+convulsiveness
+coo
+cooing
+cook
+cookbook
+cookbooks
+cooked
+cooker
+cookers
+cookery
+cookhouse
+cookie
+cookies
+cookie's
+cooking
+cookout
+cookouts
+cooks
+cook's
+cookware
+cool
+coolant
+coolants
+cooled
+cooler
+coolers
+cooler's
+coolest
+coolheaded
+coolie
+coolies
+coolie's
+cooling
+coolly
+coolness
+cools
+coomb
+coon
+cooncan
+coons
+coon's
+coonskin
+coop
+cooped
+cooper
+cooperage
+cooperate
+cooperated
+cooperates
+cooperating
+cooperation
+cooperationist
+cooperative
+cooperatively
+cooperativeness
+cooperatives
+coopered
+coopering
+coopers
+coops
+coordinal
+coordinate
+coordinated
+coordinateness
+coordinates
+coordinating
+coordination
+coordinative
+coordinator
+coordinators
+coordinator's
+coot
+cootie
+cop
+copaiba
+copal
+coparcener
+cope
+coped
+copepod
+copes
+copestone
+copied
+copier
+copiers
+copies
+coping
+copings
+copious
+copiously
+copiousness
+coplanar
+copolymer
+copolymerisation
+copolymerise
+copolymerised
+copolymerises
+copolymerising
+copolymers
+copper
+copperas
+coppered
+copperhead
+coppering
+copperplate
+coppers
+copper's
+coppersmith
+coppersmiths
+coppery
+coppice
+copping
+copra
+coprocessor
+coprocessors
+coprocessor's
+coprolite
+coprology
+cops
+cop's
+copse
+copses
+copter
+copters
+copula
+copulas
+copulate
+copulated
+copulates
+copulating
+copulation
+copulative
+copulatively
+copy
+copybook
+copybooks
+copyboy
+copycat
+copycats
+copycatted
+copycatting
+copydesk
+copyhold
+copyholder
+copying
+copyist
+copyreader
+copyright
+copyrighted
+copyrighter
+copyrighters
+copyrighting
+copyrights
+copyright's
+copywriter
+coquet
+coquetry
+coquette
+coquetted
+coquetting
+coquettish
+coquettishly
+coquettishness
+coquina
+coquito
+coraciiform
+coracle
+coral
+coralberry
+coralline
+coralloid
+coralroot
+corbel
+corbelled
+corbelling
+corbellings
+corbie
+cord
+cordage
+cordately
+corded
+cordial
+cordiality
+cordially
+cordialness
+cordierite
+cordillera
+cordilleras
+cording
+cordite
+cordless
+cordon
+cords
+corduroy
+corduroys
+cordwood
+core
+cored
+coreligionist
+corer
+corers
+cores
+corf
+corgi
+coriander
+coring
+corium
+cork
+corkage
+corkboard
+corkboards
+corked
+corker
+corkers
+corkier
+corking
+corks
+corkscrew
+corkscrews
+corkwood
+corky
+cormorant
+cormorants
+corn
+cornball
+cornbread
+corncob
+corncrake
+corncrib
+cornea
+corneal
+corned
+cornel
+cornelian
+corneous
+corner
+cornered
+cornering
+corners
+cornerstone
+cornerstones
+cornerstone's
+cornerwise
+cornet
+cornfield
+cornfields
+cornfield's
+cornflakes
+cornflower
+cornhusk
+cornice
+corniced
+cornices
+cornicing
+cornier
+corniest
+corniness
+corning
+cornmeal
+corns
+cornstalk
+cornstarch
+cornucopia
+cornucopian
+corny
+corolla
+corollaceous
+corollaries
+corollary
+corollary's
+corona
+coronach
+coronagraph
+coronal
+coronaries
+coronary
+coronate
+coronation
+coroner
+coroners
+coronet
+coroneted
+coronets
+coronet's
+corpora
+corporal
+corporality
+corporally
+corporals
+corporal's
+corporate
+corporately
+corporation
+corporations
+corporation's
+corporatism
+corporatist
+corporative
+corporeal
+corporeality
+corporeally
+corporealness
+corporeity
+corposant
+corps
+corpse
+corpses
+corpse's
+corpsman
+corpsmen
+corpulence
+corpulent
+corpulently
+corpus
+corpuscle
+corpuscles
+corpuscle's
+corpuscular
+corral
+corralled
+corralling
+corrals
+correct
+correctable
+corrected
+correcting
+correction
+correctional
+corrections
+correctitude
+corrective
+correctively
+correctives
+correctly
+correctness
+corrector
+corrects
+correlate
+correlated
+correlates
+correlating
+correlation
+correlations
+correlative
+correlatively
+correspond
+corresponded
+correspondence
+correspondences
+correspondence's
+correspondent
+correspondents
+correspondent's
+corresponding
+correspondingly
+corresponds
+corresponsive
+corridor
+corridors
+corridor's
+corrigenda
+corrigendum
+corrigibility
+corrigible
+corrigibly
+corroborant
+corroborate
+corroborated
+corroborates
+corroborating
+corroboration
+corroborations
+corroborative
+corroboratively
+corroborator
+corroborators
+corroboratory
+corroboree
+corrode
+corroded
+corrodes
+corrodible
+corroding
+corrosion
+corrosions
+corrosive
+corrosively
+corrosiveness
+corrosives
+corrugate
+corrugated
+corrugates
+corrugating
+corrugation
+corrugations
+corrupt
+corrupted
+corrupter
+corruptibility
+corruptible
+corruptibly
+corrupting
+corruption
+corruptive
+corruptively
+corruptly
+corrupts
+corsage
+corsages
+corsair
+corselet
+corset
+corsetry
+corsets
+cortege
+corteges
+cortex
+cortical
+cortically
+corticated
+cortices
+corticoid
+corticosteroid
+corticosteroids
+corticotrophin
+cortisone
+corundum
+coruscate
+coruscated
+coruscates
+coruscating
+coruscation
+coruscations
+corves
+corvette
+corvine
+coryphaeus
+cosec
+cosecant
+coseismal
+cosh
+cosignatory
+cosily
+cosine
+cosines
+cosmetic
+cosmetician
+cosmeticians
+cosmetics
+cosmetologist
+cosmetologists
+cosmetology
+cosmic
+cosmically
+cosmogonist
+cosmogony
+cosmographer
+cosmographic
+cosmographical
+cosmography
+cosmologic
+cosmological
+cosmologically
+cosmologist
+cosmologists
+cosmologist's
+cosmology
+cosmonaut
+cosmopolitan
+cosmopolitanism
+cosmopolite
+cosmopolitism
+cosmos
+cosmoses
+cosmotron
+cosponsor
+cosponsored
+cosponsors
+cosset
+cosseted
+cosseting
+cossets
+cost
+costal
+costermonger
+costing
+costive
+costively
+costiveness
+costless
+costlier
+costliness
+costly
+costmary
+costrel
+costs
+costume
+costumed
+costumer
+costumers
+costumes
+costumier
+costuming
+cosy
+cot
+cotangent
+cote
+cotemporary
+cotenant
+coterie
+coteries
+coterminous
+cotillion
+cotoneaster
+cots
+cot's
+cotta
+cottage
+cottager
+cottagers
+cottages
+cotter
+cotters
+cotton
+cottoned
+cottoning
+cottonmouth
+cottons
+cottonseed
+cottontail
+cottontails
+cottontail's
+cottonweed
+cottonwood
+cottony
+cotyledon
+cotyledons
+cotyledon's
+couch
+couchant
+couched
+couches
+couchette
+couching
+cougar
+cougars
+cough
+coughed
+cougher
+coughing
+coughs
+could
+couldn't
+couldst
+could've
+coulee
+coulomb
+coulometer
+coumarone
+council
+councillor
+councillors
+councillor's
+councillorship
+councilman
+councilmen
+councils
+council's
+councilwoman
+councilwomen
+counsel
+counselled
+counselling
+counsellor
+counsellors
+counsellor's
+counsellorship
+counsels
+counsel's
+count
+countable
+countdown
+countdowns
+countdown's
+counted
+countenance
+countenancer
+counter
+counteract
+counteracted
+counteracting
+counteraction
+counteractive
+counteracts
+counterargument
+counterarguments
+counterattack
+counterattraction
+counterbalance
+counterbalanced
+counterbalances
+counterbalancing
+counterblast
+counterblow
+counterchallenge
+countercheck
+counterclaim
+counterculture
+countercyclical
+countered
+counterespionage
+counterexample
+counterexamples
+counterfactual
+counterfeit
+counterfeited
+counterfeiter
+counterfeiting
+counterfeits
+counterfoil
+counterforce
+countering
+counterinsurgency
+counterintelligence
+counterintuitive
+counterirritant
+counterman
+countermand
+countermanded
+countermanding
+countermands
+countermeasure
+countermeasures
+countermeasure's
+countermen
+countermove
+countermovement
+counteroffensive
+counteroffer
+counterpane
+counterpart
+counterparts
+counterpart's
+counterplea
+counterplot
+counterpoint
+counterpoise
+counterproductive
+counterproof
+counterproposal
+counterpunch
+counterreformation
+counterrevolution
+counterrevolutionaries
+counterrevolutionary
+counterrevolutionary's
+counters
+countershaft
+countershafts
+countersign
+countersignature
+countersink
+countersinking
+countersinks
+counterspy
+counterstatement
+countersubject
+countersunk
+countertenor
+countertenors
+counterterrorism
+counterterrorist
+countertrend
+countertype
+countervail
+countervailed
+countervailing
+countervails
+counterview
+counterweight
+counterweighted
+counterweights
+counterweight's
+counterword
+counterwork
+countess
+counties
+counting
+countless
+countries
+countrified
+country
+countryman
+countrymen
+country's
+countryseat
+countryside
+countrywide
+countrywoman
+counts
+county
+county's
+countywide
+coup
+coupe
+couple
+coupled
+coupler
+couplers
+couples
+couple's
+couplet
+couplets
+couplet's
+coupling
+couplings
+coupon
+coupons
+coupon's
+coups
+courage
+courageous
+courageously
+courageousness
+courante
+courgette
+courier
+couriers
+courier's
+course
+coursed
+courser
+courses
+coursework
+coursing
+court
+courted
+courteous
+courteously
+courteousness
+courtesan
+courtesies
+courtesy
+courtesy's
+courthouse
+courthouses
+courthouse's
+courtier
+courtiers
+courtier's
+courting
+courtliness
+courtly
+courtroom
+courtrooms
+courtroom's
+courts
+courtship
+courtyard
+courtyards
+courtyard's
+couscous
+cousin
+cousinhood
+cousins
+cousin's
+cousinship
+couth
+couture
+couturier
+couturiere
+covalence
+covalent
+covalently
+covariance
+covariant
+covariate
+covariates
+cove
+coven
+covenant
+covenantal
+covenanted
+covenanter
+covenanting
+covenants
+covenant's
+cover
+coverable
+coverage
+coverall
+coveralls
+covered
+coverer
+covering
+coverings
+coverless
+coverlet
+coverlets
+coverlet's
+covers
+covert
+covertly
+covertness
+covertures
+coves
+covet
+covetable
+coveted
+coveter
+coveting
+covetous
+covetously
+covetousness
+covets
+covey
+coveys
+coving
+cow
+cowage
+coward
+cowardice
+cowardliness
+cowardly
+cowards
+cowbane
+cowbell
+cowberry
+cowbird
+cowbirds
+cowboy
+cowboys
+cowboy's
+cowcatcher
+cowed
+cower
+cowered
+cowering
+cowers
+cowfish
+cowgirl
+cowgirls
+cowgirl's
+cowhand
+cowhands
+cowherb
+cowherd
+cowhide
+cowhided
+cowhiding
+cowing
+cowl
+cowlick
+cowling
+cowls
+cowman
+cowmen
+cowpat
+cowpea
+cowpoke
+cowpony
+cowpox
+cowpuncher
+cowry
+cows
+cowslip
+cowslips
+cowslip's
+cox
+coxcomb
+coxcombry
+coxcombs
+coxswain
+coy
+coyly
+coyness
+coyote
+coyotes
+coyote's
+coypu
+coz
+cozen
+crab
+crabbed
+crabbedly
+crabbedness
+crabber
+crabbier
+crabbing
+crabby
+crabmeat
+crabs
+crab's
+crabstick
+crabwise
+crack
+crackbrain
+crackbrained
+crackdown
+cracked
+cracker
+crackerjack
+crackers
+cracking
+crackle
+crackled
+crackles
+crackling
+crackly
+cracknel
+crackpot
+crackpots
+cracks
+cracksman
+cradle
+cradled
+cradler
+cradles
+cradling
+craft
+crafted
+crafter
+craftier
+craftily
+craftiness
+crafting
+crafts
+craftsman
+craftsmanship
+craftsmen
+craftspeople
+craftsperson
+craftswoman
+craftswomen
+crafty
+crag
+cragged
+craggier
+craggily
+cragginess
+craggy
+crags
+crag's
+cragsman
+crake
+cram
+crambo
+crammed
+crammer
+cramming
+cramoisy
+cramp
+cramped
+crampon
+crampons
+crampon's
+cramps
+cramp's
+crams
+cranberries
+cranberry
+cranberry's
+crane
+craned
+cranes
+crane's
+crania
+cranial
+cranially
+craning
+craniotomy
+cranium
+crank
+crankcase
+cranked
+crankier
+crankiest
+crankily
+crankiness
+cranking
+crankpin
+cranks
+crankshaft
+cranky
+crannied
+crannies
+crannog
+cranny
+crap
+crape
+crapper
+crappie
+crappier
+crapping
+crappy
+craps
+crapshooter
+crapulent
+crapulous
+crash
+crashed
+crasher
+crashers
+crashes
+crashing
+crashworthiness
+crashworthy
+crass
+crassest
+crassly
+crassness
+crate
+crater
+cratered
+craters
+crates
+crating
+cravat
+cravats
+cravat's
+crave
+craved
+craven
+cravenly
+cravenness
+craver
+craves
+craving
+craw
+crawl
+crawled
+crawler
+crawlers
+crawling
+crawls
+crawlspace
+crawly
+crayfish
+crayon
+crayonist
+crayons
+craze
+crazed
+crazes
+crazier
+craziest
+crazily
+craziness
+crazing
+crazy
+creak
+creaked
+creakier
+creakily
+creaking
+creaks
+creaky
+cream
+creamed
+creamer
+creamers
+creamery
+creamily
+creaminess
+creaming
+creams
+creamy
+crease
+creased
+creaseless
+creaser
+creases
+creasing
+create
+created
+creates
+creating
+creation
+creationism
+creationism's
+creations
+creative
+creatively
+creativeness
+creativity
+creator
+creators
+creator's
+creatural
+creature
+creaturely
+creatures
+creature's
+cr�che
+cr�ches
+credence
+credendum
+credent
+credential
+credentials
+credenza
+credibility
+credible
+credibly
+credit
+creditability
+creditable
+creditableness
+creditably
+credited
+crediting
+creditor
+creditors
+creditor's
+credits
+credo
+credos
+credulity
+credulous
+credulously
+credulousness
+creed
+creedal
+creeds
+creed's
+creek
+creeks
+creek's
+creel
+creels
+creep
+creeper
+creepers
+creepier
+creepiness
+creeping
+creeps
+creepy
+cremate
+cremated
+cremates
+cremating
+cremation
+cremations
+cremator
+crematorium
+crematory
+crenate
+crenel
+creodont
+creosol
+creosote
+crepe
+crepitate
+crept
+crepuscular
+crepuscule
+crescendo
+crescent
+crescents
+crescent's
+cresol
+cress
+cresset
+crest
+crested
+crestfallen
+crestfallenly
+crestfallenness
+cresting
+crestless
+crests
+cretin
+cretins
+cretonne
+crevasse
+crevice
+crevices
+crevice's
+crew
+crewed
+crewel
+crewelwork
+crewing
+crewless
+crewman
+crewmember
+crewmembers
+crewmen
+crews
+crib
+cribbage
+cribbage's
+cribber
+cribbing
+cribs
+crib's
+crick
+cricket
+cricketer
+cricketing
+crickets
+cricket's
+cried
+crier
+criers
+cries
+crikey
+crime
+crimes
+crime's
+criminal
+criminalisation
+criminalise
+criminality
+criminally
+criminals
+criminate
+criminating
+crimination
+criminological
+criminologist
+criminology
+crimp
+crimped
+crimpier
+crimping
+crimple
+crimps
+crimpy
+crimson
+crimsoning
+cringe
+cringed
+cringer
+cringes
+cringing
+cringle
+crinite
+crinkle
+crinkled
+crinkleroot
+crinkles
+crinkling
+crinkly
+crinoline
+cripes
+cripple
+crippled
+crippler
+cripples
+crippling
+crises
+crisis
+crisp
+crispate
+crisper
+crispier
+crispiness
+crisply
+crispness
+crisps
+crispy
+crisscross
+crisscrossed
+criteria
+criterion
+critic
+critical
+criticality
+critically
+criticalness
+criticaster
+criticisable
+criticise
+criticised
+criticiser
+criticisers
+criticises
+criticising
+criticism
+criticisms
+criticism's
+critics
+critic's
+critique
+critiqued
+critiques
+critiquing
+critter
+critters
+critter's
+croak
+croaked
+croakers
+croaking
+croaks
+croaky
+crochet
+crocheted
+crocheting
+crochets
+crock
+crocked
+crockery
+crocket
+crocks
+crocodile
+crocodiles
+crocodilian
+crocus
+crocuses
+croft
+crofter
+crofters
+croissant
+croissants
+cromlech
+crone
+crones
+cronies
+crony
+cronyism
+crook
+crookback
+crookbacked
+crooked
+crookedly
+crookedness
+crooks
+croon
+crooned
+crooner
+crooners
+crooning
+croons
+crop
+cropland
+croplands
+cropland's
+cropped
+cropper
+croppers
+cropper's
+cropping
+crops
+crop's
+croquet
+croquette
+crosier
+cross
+crossable
+crossbar
+crossbars
+crossbar's
+crossbeam
+crossbill
+crossbones
+crossbow
+crossbowman
+crossbred
+crossbreed
+crosscheck
+crosscurrent
+crosscurrents
+crosscut
+crossed
+crosser
+crossers
+crosses
+crossfire
+crosshatch
+crosshatched
+crosshatches
+crosshatching
+crosshead
+crossing
+crossings
+crossjack
+crosslet
+crosslink
+crosslink's
+crossly
+crossopterygian
+crossover
+crossovers
+crossover's
+crosspatch
+crosspiece
+crossroad
+crossroads
+crossruff
+crosstalk
+crosstie
+crossties
+crosstree
+crosswalk
+crossway
+crossways
+crosswind
+crosswise
+crossword
+crosswords
+crossword's
+crotch
+crotched
+crotches
+crotchet
+crotchetiness
+crotchets
+crotchety
+croton
+crouch
+crouched
+crouches
+crouching
+croup
+croupier
+croupy
+crouton
+croutons
+crow
+crowbar
+crowbars
+crowbar's
+crowberry
+crowd
+crowded
+crowdedness
+crowding
+crowds
+crowed
+crowfeet
+crowfoot
+crowfoots
+crowing
+crown
+crowned
+crowner
+crowning
+crownpiece
+crowns
+crownwork
+crows
+cru
+cruces
+crucial
+crucially
+crucible
+crucifer
+cruciferous
+crucified
+crucifies
+crucifix
+crucifixion
+cruciform
+cruciformly
+crucify
+crucifying
+crud
+cruddy
+crude
+crudely
+crudeness
+cruder
+crudest
+crudities
+crudity
+cruel
+crueller
+cruellest
+cruelly
+cruelness
+cruelty
+cruet
+cruise
+cruised
+cruiser
+cruisers
+cruiserweight
+cruises
+cruising
+cruller
+crumb
+crumbier
+crumble
+crumbled
+crumbles
+crumblier
+crumbliness
+crumbling
+crumbly
+crumbs
+crumby
+crumhorn
+crummier
+crummy
+crump
+crumpet
+crumple
+crumpled
+crumples
+crumpling
+crunch
+crunched
+cruncher
+crunchers
+crunches
+crunchier
+crunchiest
+crunchiness
+crunching
+crunchy
+crupper
+crusade
+crusaded
+crusader
+crusaders
+crusades
+crusading
+cruse
+crush
+crushable
+crushed
+crusher
+crushers
+crushes
+crushing
+crushingly
+crushproof
+crust
+crustacean
+crustaceans
+crustacean's
+crustaceous
+crusted
+crustier
+crustily
+crustiness
+crusting
+crusts
+crust's
+crusty
+crutch
+crutched
+crutches
+crutch's
+crux
+crux's
+cry
+crying
+cryobiology
+cryogen
+cryogenic
+cryogenically
+cryogenics
+cryohydrate
+cryonic
+cryonics
+cryophilic
+cryophyte
+cryoscopy
+cryostat
+cryosurgery
+cryotron
+crypt
+cryptal
+cryptanalysis
+cryptanalyst
+cryptanalytic
+cryptic
+cryptically
+crypto
+cryptoclastic
+cryptocrystalline
+cryptogam
+cryptogenic
+cryptogram
+cryptogrammic
+cryptograms
+cryptogram's
+cryptograph
+cryptographer
+cryptographic
+cryptographically
+cryptography
+cryptologist
+cryptology
+cryptozoic
+crypts
+crystal
+crystalline
+crystallisable
+crystallisation
+crystallisations
+crystallisation's
+crystallise
+crystallised
+crystalliser
+crystallisers
+crystallises
+crystallising
+crystallite
+crystallites
+crystallographer
+crystallographers
+crystallographic
+crystallography
+crystals
+crystal's
+ctenophore
+cub
+cubage
+cubature
+cubbies
+cubby
+cube
+cubeb
+cubed
+cubes
+cubic
+cubical
+cubically
+cubicle
+cubicles
+cubiculum
+cubing
+cubism
+cubist
+cubistic
+cubists
+cubit
+cubs
+cub's
+cuckold
+cuckoldry
+cuckoo
+cuckooflower
+cuckoopint
+cuckoos
+cuckoo's
+cuculiform
+cucumber
+cucumbers
+cucumber's
+cucurbit
+cud
+cudbear
+cuddle
+cuddled
+cuddles
+cuddlesome
+cuddlier
+cuddling
+cuddly
+cuddy
+cudgel
+cudgelled
+cudgeller
+cudgellers
+cudgelling
+cudgels
+cudgel's
+cudweed
+cue
+cued
+cueing
+cues
+cuff
+cuffed
+cuffing
+cufflink
+cufflinks
+cuffs
+cuff's
+cuing
+cuirass
+cuirassier
+cuisine
+cuisse
+culet
+culicid
+culinary
+cull
+culled
+culler
+cullet
+culling
+culls
+cully
+culmiferous
+culminant
+culminate
+culminated
+culminates
+culminating
+culmination
+culottes
+culpa
+culpability
+culpable
+culpableness
+culpably
+culprit
+culprits
+culprit's
+cult
+cultch
+cultic
+cultism
+cultist
+cultists
+cultivability
+cultivable
+cultivar
+cultivars
+cultivatable
+cultivate
+cultivated
+cultivates
+cultivating
+cultivation
+cultivations
+cultivator
+cultivators
+cultivator's
+cultrate
+cults
+cult's
+cultural
+culturally
+culture
+cultured
+cultures
+culturing
+culverin
+culvert
+cum
+cumber
+cumbersome
+cumbersomely
+cumbersomeness
+cumbrous
+cumbrously
+cumbrousness
+cumin
+cummerbund
+cumquat
+cumshaw
+cumulate
+cumulated
+cumulates
+cumulating
+cumulative
+cumulatively
+cumuliform
+cumulonimbus
+cumulous
+cumulus
+cuneal
+cuneiform
+cunnilingus
+cunning
+cunningly
+cunningness
+cup
+cupbearer
+cupboard
+cupboards
+cupboard's
+cupcake
+cupcakes
+cupellation
+cupful
+cupfuls
+cupidity
+cuplike
+cupola
+cuppa
+cupped
+cupping
+cupreous
+cupric
+cupriferous
+cuprous
+cuprum
+cups
+cup's
+cur
+curability
+curable
+curableness
+curably
+curacy
+curare
+curassow
+curate
+curative
+curatively
+curator
+curatorial
+curators
+curb
+curbed
+curbing
+curbs
+curd
+curdle
+curdled
+curdles
+curdling
+curds
+cure
+cured
+cureless
+curer
+cures
+curettage
+curette
+curetted
+curetting
+curfew
+curfews
+curfew's
+curia
+curiae
+curie
+curing
+curio
+curios
+curiosa
+curiosities
+curiosity
+curiosity's
+curious
+curiously
+curiousness
+curium
+curl
+curled
+curler
+curlers
+curlew
+curlicue
+curlier
+curliness
+curling
+curlpaper
+curls
+curly
+curmudgeon
+curmudgeonly
+currant
+currants
+currant's
+currencies
+currency
+currency's
+current
+currently
+currents
+curricle
+curricula
+curricular
+curriculum
+curriculum's
+curried
+currier
+curries
+currish
+currishly
+curry
+currycomb
+currying
+curs
+curse
+cursed
+cursedly
+cursedness
+curses
+cursing
+cursive
+cursively
+cursor
+cursorily
+cursoriness
+cursors
+cursor's
+cursory
+curst
+curt
+curtail
+curtailed
+curtailer
+curtailing
+curtailment
+curtails
+curtain
+curtained
+curtaining
+curtains
+curtly
+curtness
+curtsey
+curtseyed
+curtseying
+curtseys
+curtsied
+curtsies
+curtsy
+curtsying
+curtsy's
+curvaceous
+curvaceously
+curvature
+curvatures
+curve
+curveball
+curved
+curves
+curvilinear
+curving
+curvy
+cusec
+cushiest
+cushion
+cushioned
+cushioning
+cushions
+cushiony
+cushy
+cusp
+cuspate
+cuspidate
+cuspidation
+cuspidor
+cusps
+cusp's
+cuss
+cussed
+cussedly
+cussedness
+cusses
+custard
+custodial
+custodian
+custodians
+custodian's
+custodianship
+custodianships
+custodies
+custody
+custom
+customable
+customarily
+customariness
+customary
+customer
+customers
+customer's
+customhouse
+customhouses
+customisable
+customisation
+customisations
+customisation's
+customise
+customised
+customises
+customising
+customs
+cut
+cutaway
+cutback
+cutbacks
+cutch
+cute
+cutely
+cuteness
+cuter
+cutes
+cutest
+cutesy
+cuticle
+cuticles
+cutie
+cutinise
+cutinised
+cutinises
+cutinising
+cutis
+cutlass
+cutler
+cutlery
+cutlet
+cutlets
+cutover
+cutpurse
+cuts
+cut's
+cutter
+cutters
+cutter's
+cutthroat
+cutting
+cuttingly
+cuttings
+cuttlebone
+cuttlebones
+cuttlefish
+cuttlefishes
+cutup
+cutups
+cutwater
+cutwork
+cutworm
+cyan
+cyanic
+cyanide
+cyanine
+cyanosis
+cyanotype
+cyber
+cybernation
+cybernetic
+cyberneticist
+cybernetics
+cycad
+cyclamate
+cyclamen
+cycle
+cycled
+cycles
+cyclic
+cyclical
+cyclically
+cycling
+cyclist
+cyclists
+cyclograph
+cycloid
+cycloids
+cyclometer
+cyclometers
+cyclometer's
+cyclone
+cyclones
+cyclone's
+cyclonic
+cyclonically
+cyclonite
+cyclopean
+cyclorama
+cyclostyle
+cyclotron
+cygnet
+cygnets
+cygnet's
+cylinder
+cylindered
+cylindering
+cylinders
+cylinder's
+cylindrical
+cylindrically
+cylix
+cyma
+cymatium
+cymbal
+cymbalist
+cymbalists
+cymbals
+cymbal's
+cymene
+cynic
+cynical
+cynically
+cynicism
+cynics
+cynosure
+cyperaceous
+cypress
+cyprinid
+cyprinodont
+cypsela
+cyst
+cystic
+cystitis
+cysts
+cytogenesis
+cytological
+cytologist
+cytology
+cytolysis
+cytoplasm
+cytoplast
+cytosine
+czar
+czardas
+dab
+dabbed
+dabber
+dabbers
+dabbing
+dabble
+dabbled
+dabbler
+dabblers
+dabbles
+dabbling
+dabchick
+dabs
+dace
+dacha
+dachshund
+dachshund
+dacoit
+dacron
+dactyl
+dactylic
+dactylology
+dactyls
+dad
+daddies
+daddy
+dado
+dads
+dad's
+daedal
+daemon
+daemons
+daemon's
+daff
+daffier
+daffodil
+daffodils
+daffodil's
+daffy
+daft
+dafter
+daftest
+daftly
+daftness
+dagger
+daggers
+daguerreotype
+daguerreotypes
+daguerreotype's
+dahlia
+dahlias
+dailies
+daily
+daimyo
+daintier
+dainties
+daintily
+daintiness
+dainty
+daiquiri
+daiquiris
+dairies
+dairy
+dairying
+dairymaid
+dairyman
+dairymen
+dais
+daises
+daisies
+daisy
+daisy's
+dalai
+dalasi
+dale
+dales
+dale's
+dalliance
+dallied
+dallier
+dally
+dallying
+dalmatic
+dam
+damage
+damaged
+damager
+damagers
+damages
+damaging
+damagingly
+damask
+dame
+dammed
+damming
+damn
+damnable
+damnableness
+damnably
+damnation
+damnatory
+damned
+damnedest
+damning
+damningly
+damns
+damp
+damped
+dampen
+dampened
+dampener
+dampening
+dampens
+damper
+dampers
+damping
+dampish
+damply
+dampness
+damps
+dams
+dam's
+damsel
+damselfish
+damselflies
+damselfly
+damsels
+damsel's
+dance
+danceable
+danced
+dancer
+dancers
+dances
+dancing
+dandelion
+dandelions
+dandelion's
+dander
+dandier
+dandies
+dandification
+dandify
+dandily
+dandle
+dandled
+dandling
+dandruff
+dandy
+dandyish
+dandyism
+dang
+danger
+dangerous
+dangerously
+dangerousness
+dangers
+danger's
+dangle
+dangled
+dangler
+danglers
+dangler's
+dangles
+dangling
+dank
+dankly
+dankness
+danseur
+daphnia
+dapper
+dapperly
+dapperness
+dapple
+dappled
+dapples
+dappling
+dare
+dared
+daredevil
+daredevilry
+daredevils
+darer
+darers
+dares
+daresay
+daring
+daringly
+daringness
+dark
+darken
+darkened
+darkener
+darkeners
+darkening
+darker
+darkest
+darkish
+darkle
+darkly
+darkness
+darkroom
+darkrooms
+darks
+darksome
+darling
+darlingness
+darlings
+darling's
+darn
+darned
+darnel
+darner
+darning
+darns
+dart
+d'art
+dartboard
+darted
+darter
+darting
+darts
+dash
+dashboard
+dashboards
+dashed
+dasheen
+dasher
+dashers
+dashes
+dashiki
+dashing
+dashingly
+dashpot
+dastard
+dastardliness
+dastardly
+dasyure
+data
+databank
+databanks
+database
+databases
+database's
+datable
+datagram
+datagram's
+datary
+dataset
+datasets
+date
+dateable
+dated
+datedness
+dateless
+dateline
+datelined
+datelines
+dater
+dates
+dating
+dative
+datum
+daub
+daubed
+dauber
+daubery
+daubs
+daughter
+daughterless
+daughterly
+daughters
+daughter's
+daunt
+daunted
+daunting
+dauntless
+dauntlessly
+dauntlessness
+daunts
+dauphin
+dauphine
+davenport
+davit
+davits
+dawdle
+dawdled
+dawdler
+dawdlers
+dawdles
+dawdling
+dawn
+dawned
+dawning
+dawns
+day
+daybed
+daybook
+dayboy
+daybreak
+daybreaks
+daydream
+daydreamed
+daydreamer
+daydreamers
+daydreaming
+daydreams
+dayflower
+dayfly
+daylight
+daylights
+daylight's
+daylong
+dayroom
+dayrooms
+days
+day's
+dayspring
+daystar
+daytime
+daytimes
+daze
+dazed
+dazedness
+dazes
+dazing
+dazzle
+dazzled
+dazzler
+dazzlers
+dazzles
+dazzling
+dazzlingly
+db
+de
+deacon
+deaconess
+deaconry
+deacons
+deacon's
+deactivate
+deactivated
+deactivates
+deactivating
+deactivation
+deactivator
+dead
+deadbeat
+deaden
+deadened
+deadener
+deadening
+deadens
+deadeye
+deadfall
+deadhead
+deadheads
+deadlier
+deadliest
+deadlight
+deadline
+deadlines
+deadline's
+deadliness
+deadlock
+deadlocked
+deadlocking
+deadlocks
+deadly
+deadness
+deadpan
+deadweight
+deadwood
+deaf
+deafen
+deafened
+deafening
+deafeningly
+deafens
+deafer
+deafest
+deafly
+deafness
+deal
+dealer
+dealers
+dealership
+dealerships
+dealfish
+dealing
+dealings
+deals
+dealt
+dean
+deanery
+deans
+dean's
+deanship
+dear
+dearer
+dearest
+dearly
+dearness
+dears
+dearth
+death
+deathbed
+deathblow
+deathless
+deathlessly
+deathlessness
+deathly
+deaths
+deathward
+debacle
+debacles
+debag
+debar
+debark
+debarkation
+debarks
+debarment
+debarred
+debarring
+debars
+debase
+debased
+debasement
+debaser
+debases
+debasing
+debatable
+debate
+debated
+debater
+debaters
+debates
+debating
+debauch
+debauched
+debauchedly
+debauchedness
+debauchee
+debaucher
+debauchery
+debauches
+debenture
+debentures
+debilitate
+debilitated
+debilitates
+debilitating
+debilitation
+debility
+debit
+debited
+debiting
+debits
+debonair
+debonairly
+debonairness
+debouch
+debrief
+debriefed
+debriefing
+debriefs
+debris
+debs
+debt
+debtless
+debtor
+debtors
+debts
+debt's
+debug
+debugged
+debugger
+debuggers
+debugger's
+debugging
+debugs
+debunk
+debunker
+debunking
+debunks
+debus
+debut
+debutant
+debutante
+debutantes
+debutante's
+debuting
+debuts
+decade
+decadence
+decadency
+decadent
+decadently
+decades
+decade's
+decaffeinate
+decaffeinated
+decaffeinates
+decaffeinating
+decagon
+decagram
+decahedron
+decal
+decalcification
+decalcify
+decalcomania
+decalescence
+decametre
+decametres
+decametre's
+decamp
+decampment
+decamps
+decanal
+decant
+decantation
+decanted
+decanter
+decanters
+decanting
+decants
+decapitate
+decapitated
+decapitates
+decapitating
+decapitation
+decapitator
+decapods
+decarbonisation
+decarbonise
+decarbonised
+decarbonises
+decarbonising
+decarburisation
+decarburise
+decarburised
+decarburises
+decarburising
+decasualisation
+decasyllabic
+decasyllable
+decathlon
+decathlons
+decay
+decayed
+decaying
+decays
+decease
+deceased
+deceases
+deceasing
+decedent
+deceit
+deceitful
+deceitfully
+deceitfulness
+deceivable
+deceivableness
+deceive
+deceived
+deceiver
+deceivers
+deceives
+deceiving
+deceivingly
+decelerate
+decelerated
+decelerates
+decelerating
+deceleration
+decelerations
+decelerator
+decemvirate
+decencies
+decency
+decency's
+decennial
+decennially
+decennium
+decent
+decently
+decentralisation
+decentralisations
+decentralisation's
+decentralise
+decentralised
+decentralises
+decentralising
+decentralist
+deception
+deceptions
+deception's
+deceptive
+deceptively
+deceptiveness
+decertification
+decertify
+decibel
+decibels
+decidability
+decidable
+decide
+decided
+decidedly
+decidedness
+decider
+decides
+deciding
+deciduous
+deciduously
+deciduousness
+decilitre
+decilitres
+decimal
+decimalisation
+decimalisations
+decimalisation's
+decimalise
+decimalised
+decimalises
+decimalising
+decimally
+decimals
+decimate
+decimated
+decimates
+decimating
+decimation
+decimetre
+decimetres
+decimetre's
+decipher
+decipherable
+deciphered
+decipherer
+decipherers
+deciphering
+decipherment
+deciphers
+decision
+decisional
+decisions
+decision's
+decisive
+decisively
+decisiveness
+deck
+decked
+deckhand
+deckhouse
+decking
+deckle
+decks
+declaim
+declaimed
+declaimer
+declaiming
+declaims
+declamation
+declamations
+declamatory
+declarable
+declaration
+declarations
+declaration's
+declarative
+declaratively
+declaratives
+declaratory
+declare
+declared
+declarer
+declarers
+declares
+declaring
+declass
+declassification
+declassifications
+declassify
+declension
+declensional
+declensions
+declinable
+declination
+declinational
+declinations
+declination's
+decline
+declined
+decliner
+decliners
+declines
+declining
+declinometer
+declivitous
+declivity
+declutch
+declutched
+declutches
+declutching
+decoct
+decocted
+decocting
+decoction
+decoctions
+decocts
+decode
+decoded
+decoder
+decoders
+decodes
+decoding
+decollate
+decollated
+decollates
+decollating
+decollation
+decollations
+d�colletage
+decolonisation
+decolonise
+decolonised
+decolonises
+decolonising
+decolour
+decolourant
+decolourants
+decoloured
+decolouring
+decolourisation
+decolourise
+decolourised
+decolouriser
+decolourises
+decolours
+decommission
+decompensate
+decompile
+decompiled
+decompiler
+decompilers
+decompiles
+decompiling
+decomposability
+decomposable
+decompose
+decomposed
+decomposer
+decomposes
+decomposing
+decomposition
+decompositions
+decomposition's
+decompress
+decompressed
+decompresser
+decompresses
+decompressing
+decompression
+decongest
+decongestant
+decongestion
+decongestive
+deconsecrate
+deconsecration
+deconstruct
+decontaminate
+decontaminated
+decontaminates
+decontaminating
+decontamination
+decontaminations
+decontrol
+decontrolled
+decontrolling
+deconvolution
+deconvolve
+decor
+decorate
+decorated
+decorates
+decorating
+decoration
+decorations
+decorative
+decoratively
+decorativeness
+decorator
+decorators
+decorous
+decorously
+decorousness
+decorticate
+decorticated
+decorticates
+decorticating
+decorticator
+decorticators
+decorum
+decoupage
+decoupages
+decouple
+decoupled
+decouples
+decoupling
+decoy
+decoys
+decoy's
+decrease
+decreased
+decreases
+decreasing
+decreasingly
+decree
+decreed
+decreeing
+decrees
+decrement
+decremental
+decremented
+decrementing
+decrements
+decrepit
+decrepitly
+decrepitude
+decrescendo
+decretive
+decretory
+decrial
+decrials
+decried
+decrier
+decries
+decriminalisation
+decriminalisation's
+decriminalise
+decry
+decrying
+decrypt
+decrypted
+decrypting
+decryption
+decrypts
+decumbent
+decuple
+decussate
+decussately
+dedicate
+dedicated
+dedicatedly
+dedicates
+dedicating
+dedication
+dedications
+dedicative
+dedicator
+dedicatory
+dedifferentiate
+dedifferentiated
+dedifferentiation
+deduce
+deduced
+deduces
+deducible
+deducing
+deduct
+deducted
+deductibility
+deductible
+deductibles
+deducting
+deduction
+deductions
+deduction's
+deductive
+deductively
+deducts
+deed
+deeded
+deeding
+deedless
+deeds
+deejay
+deem
+deemed
+deeming
+deemphasise
+deemphasised
+deemphasises
+deemphasising
+deems
+deenergise
+deep
+deepen
+deepened
+deepening
+deepens
+deeper
+deepest
+deeply
+deepness
+deeps
+deer
+deerhound
+deerskin
+deerskins
+deerstalker
+deface
+defacement
+defacer
+defaces
+defacing
+defalcate
+defalcation
+defalcator
+defamation
+defamatory
+defame
+defamed
+defamer
+defames
+defaming
+default
+defaulted
+defaulter
+defaulting
+defaults
+defeasance
+defeasibility
+defeat
+defeated
+defeating
+defeatism
+defeatist
+defeatists
+defeats
+defecate
+defecated
+defecates
+defecating
+defecation
+defecations
+defect
+defected
+defecting
+defection
+defections
+defection's
+defective
+defectively
+defectiveness
+defectives
+defector
+defectors
+defector's
+defects
+defence
+defenceless
+defencelessly
+defencelessness
+defences
+defence's
+defend
+defendable
+defendant
+defendants
+defendant's
+defended
+defender
+defenders
+defending
+defends
+defenestrate
+defenestrated
+defenestrates
+defenestrating
+defenestration
+defensibility
+defensible
+defensibly
+defensive
+defensively
+defensiveness
+defer
+deference
+deferent
+deferential
+deferentially
+deferment
+deferments
+deferment's
+deferrable
+deferral
+deferred
+deferrer
+deferrers
+deferrer's
+deferring
+defers
+defiance
+defiant
+defiantly
+defibrillation
+defibrillator
+deficiencies
+deficiency
+deficient
+deficiently
+deficit
+deficits
+deficit's
+defied
+defies
+defilade
+defile
+defiled
+defilement
+defiler
+defiles
+defiling
+definable
+definably
+define
+defined
+definer
+definers
+defines
+definiendum
+defining
+definite
+definitely
+definiteness
+definition
+definitional
+definitions
+definition's
+definitive
+definitively
+definitiveness
+definitude
+deflagrate
+deflagrated
+deflagrates
+deflagrating
+deflagration
+deflate
+deflated
+deflates
+deflating
+deflation
+deflationary
+deflator
+deflect
+deflected
+deflecting
+deflection
+deflections
+deflective
+deflector
+deflects
+deflexed
+defloration
+deflorations
+deflower
+defocus
+defocusing
+defoliant
+defoliate
+defoliated
+defoliates
+defoliating
+defoliation
+defoliator
+deforest
+deforestation
+deforester
+deform
+deformation
+deformational
+deformations
+deformation's
+deformed
+deforming
+deformities
+deformity
+deformity's
+deforms
+defraud
+defrauded
+defrauder
+defrauding
+defrauds
+defray
+defrayable
+defrayal
+defrayals
+defrayed
+defraying
+defrays
+defrock
+defrost
+defrosted
+defroster
+defrosting
+defrosts
+deft
+defter
+deftest
+deftly
+deftness
+defunct
+defuse
+defused
+defusing
+defy
+defying
+degas
+degassed
+degasses
+degassing
+degauss
+degaussed
+degausses
+degaussing
+degeneracy
+degenerate
+degenerated
+degenerately
+degenerateness
+degenerates
+degenerating
+degeneration
+degenerative
+deglutinate
+deglutition
+deglycerolised
+degradable
+degradation
+degradations
+degradation's
+degrade
+degraded
+degradedly
+degradedness
+degrader
+degrades
+degrading
+degradingly
+degrease
+degree
+degrees
+degree's
+degust
+dehisce
+dehiscent
+dehorn
+dehumanisation
+dehumanisations
+dehumanisation's
+dehumanise
+dehumanised
+dehumanises
+dehumanising
+dehumidification
+dehumidified
+dehumidifier
+dehumidify
+dehydrate
+dehydrated
+dehydrates
+dehydrating
+dehydration
+dehydrator
+dehydrogenate
+dehypnotise
+dehypnotised
+dehypnotises
+dehypnotising
+deicide
+deictic
+deific
+deification
+deiform
+deify
+deign
+deigned
+deigning
+deigns
+deil
+deindustrialisation
+deionisation
+deionise
+deionises
+deism
+deist
+deistic
+deistical
+deistically
+deities
+deity
+deity's
+d�j�
+deject
+dejected
+dejectedly
+dejectedness
+dejection
+dejeuner
+dejeuners
+dekalitre
+dekko
+delaine
+delaminate
+delay
+delayed
+delayer
+delayers
+delaying
+delays
+dele
+delectability
+delectable
+delectableness
+delectably
+delectate
+delectation
+delegable
+delegacy
+delegate
+delegated
+delegates
+delegating
+delegation
+delegations
+delete
+deleted
+deleterious
+deleteriously
+deleteriousness
+deletes
+deleting
+deletion
+deletions
+delft
+deli
+deliberate
+deliberated
+deliberately
+deliberateness
+deliberates
+deliberating
+deliberation
+deliberations
+deliberative
+deliberatively
+deliberativeness
+deliberator
+deliberators
+deliberator's
+delicacies
+delicacy
+delicacy's
+delicate
+delicately
+delicateness
+delicates
+delicatessen
+delicious
+deliciously
+deliciousness
+delicto
+delight
+delighted
+delightedly
+delightedness
+delighter
+delightful
+delightfully
+delightfulness
+delighting
+delights
+delightsome
+delightsomely
+delimeter
+delimeters
+delimit
+delimitate
+delimitation
+delimitative
+delimited
+delimiter
+delimiters
+delimiting
+delimits
+delineate
+delineated
+delineates
+delineating
+delineation
+delineations
+delineative
+delineator
+delinquency
+delinquent
+delinquently
+delinquents
+delinquent's
+deliquesce
+deliquescence
+deliquescent
+delirious
+deliriously
+deliriousness
+delirium
+deliriums
+delis
+deli's
+delitescence
+deliver
+deliverability
+deliverable
+deliverables
+deliverance
+delivered
+deliverer
+deliverers
+deliveries
+delivering
+delivers
+delivery
+deliveryman
+deliveryman's
+deliverymen
+deliverymen's
+delivery's
+dell
+dells
+dell's
+delocalisation
+delocalise
+delouse
+deloused
+delouses
+delousing
+delphinium
+delta
+deltaic
+deltas
+delta's
+deltiology
+deltoid
+deltoids
+delude
+deluded
+deluder
+deludes
+deluding
+deludingly
+deluge
+deluged
+deluges
+deluging
+delusion
+delusional
+delusions
+delusion's
+delusive
+delusively
+delusiveness
+delusory
+deluxe
+delve
+delved
+delver
+delves
+delving
+demagnetisation
+demagnetisations
+demagnetisation's
+demagnetise
+demagnetised
+demagnetiser
+demagnetisers
+demagnetises
+demagnetising
+demagnification
+demagogic
+demagogical
+demagogically
+demagogue
+demagoguery
+demagogues
+demagogy
+demand
+demandable
+demanded
+demander
+demanding
+demandingly
+demands
+demarcate
+demarcated
+demarcates
+demarcating
+demarcation
+demark
+dematerialisation
+dematerialise
+dematerialised
+dematerialises
+dematerialising
+demean
+demeaned
+demeaning
+demeanour
+demeanours
+demeanour's
+demeans
+dement
+demented
+dementedly
+dementedness
+dementia
+demerara
+demerit
+demerits
+demesne
+demi
+demigod
+demigoddess
+demijohn
+demilitarisation
+demilitarise
+demilitarised
+demilitarises
+demilitarising
+demimondaine
+demimonde
+demineralisation
+demineralisations
+demineralisation's
+demineralise
+demineralised
+demineralises
+demineralising
+demirep
+demise
+demised
+demisemiquaver
+demises
+demising
+demission
+demist
+demit
+demitasse
+demitted
+demitting
+demiurge
+demo
+demob
+demobilisation
+demobilise
+demobilised
+demobilises
+demobilising
+democracies
+democracy
+democracy's
+democrat
+democratic
+democratically
+democratisation
+democratisations
+democratisation's
+democratise
+democratised
+democratises
+democratising
+democrats
+democrat's
+demodulate
+demodulated
+demodulates
+demodulating
+demodulation
+demodulations
+demodulation's
+demodulator
+demodulators
+demodulator's
+demographer
+demographers
+demographer's
+demographic
+demographical
+demographically
+demographics
+demography
+demoiselle
+demolish
+demolished
+demolisher
+demolishes
+demolishing
+demolishment
+demolition
+demolitionist
+demolitions
+demon
+demonetisation
+demonetise
+demonetised
+demonetises
+demonetising
+demoniac
+demoniacal
+demoniacally
+demonian
+demonic
+demonical
+demonically
+demonise
+demonised
+demonises
+demonising
+demonism
+demonolater
+demonolatry
+demonology
+demons
+demon's
+demonstrability
+demonstrable
+demonstrableness
+demonstrably
+demonstrate
+demonstrated
+demonstrates
+demonstrating
+demonstration
+demonstrational
+demonstrationist
+demonstrations
+demonstrative
+demonstratively
+demonstrativeness
+demonstrator
+demonstrators
+demonstrator's
+demoralisation
+demoralisations
+demoralisation's
+demoralise
+demoralised
+demoraliser
+demoralisers
+demoralises
+demoralising
+demos
+demote
+demoted
+demotes
+demotic
+demoting
+demotion
+demount
+demountable
+demounted
+demounting
+demounts
+demulcent
+demulsify
+demultiplex
+demur
+demure
+demurely
+demureness
+demurrage
+demurral
+demurred
+demurrer
+demurring
+demurs
+demy
+demystified
+demystifies
+demystify
+demystifying
+demythologisation
+demythologise
+demythologised
+demythologises
+demythologising
+den
+denary
+denationalisation
+denationalise
+denationalised
+denationalises
+denationalising
+denaturalisation
+denaturalise
+denaturalised
+denaturalises
+denaturalising
+denaturant
+denature
+denatured
+denatures
+denaturing
+denaturisation
+denaturise
+denaturises
+dendrite
+dendrites
+dendrite's
+dendrologist
+dendrology
+denegation
+dengue
+deniable
+denial
+denials
+denial's
+denied
+denier
+denies
+denigrate
+denigrated
+denigrates
+denigrating
+denigration
+denigrator
+denim
+denims
+denitrify
+denizen
+denizens
+denominate
+denominated
+denomination
+denominational
+denominationalism
+denominationalist
+denominationally
+denominations
+denomination's
+denominative
+denominator
+denominators
+denominator's
+denotable
+denotation
+denotations
+denotation's
+denotative
+denote
+denoted
+denotes
+denoting
+denouement
+denounce
+denounced
+denouncement
+denouncer
+denouncers
+denounces
+denouncing
+dens
+den's
+dense
+densely
+denseness
+denser
+densest
+densification
+densities
+densitometer
+densitometers
+densitometer's
+densitometry
+density
+density's
+dent
+dental
+dentally
+dentals
+dentate
+dented
+denticulate
+denticulation
+dentifrice
+dentil
+dentilabial
+dentilingual
+dentin
+dentinal
+dentine
+denting
+dentist
+dentistry
+dentists
+dentist's
+dentition
+dents
+denture
+dentures
+denuclearisation
+denuclearise
+denuclearised
+denuclearises
+denuclearising
+denudate
+denudation
+denude
+denuded
+denuder
+denudes
+denuding
+denumerable
+denunciate
+denunciated
+denunciates
+denunciating
+denunciation
+denunciations
+denunciative
+denunciatory
+deny
+denying
+deodar
+deodorant
+deodorants
+deodorant's
+deodorise
+deodorised
+deodorises
+deodorising
+deontological
+deontologist
+deontology
+deoxidiser
+deoxygenate
+deoxyribonucleic
+depart
+departed
+departing
+department
+departmental
+departmentalisation
+departmentalisations
+departmentalisation's
+departmentalise
+departmentalises
+departmentalism
+departmentally
+departmentise
+departments
+department's
+departs
+departure
+departures
+departure's
+depend
+dependability
+dependable
+dependableness
+dependably
+dependant
+dependants
+depended
+dependence
+dependences
+dependencies
+dependency
+dependent
+dependently
+dependents
+depending
+depends
+depersonalisation
+depersonalisations
+depersonalisation's
+depersonalise
+depersonalised
+depersonalises
+depersonalising
+depict
+depicted
+depicter
+depicting
+depiction
+depictions
+depicts
+depicture
+depilate
+depilated
+depilates
+depilating
+depilation
+depilatory
+deplane
+deplaned
+deplanes
+deplaning
+deplete
+depleted
+depletes
+depleting
+depletion
+depletions
+depletive
+deplorable
+deplorableness
+deplorably
+deplore
+deplored
+deplorer
+deplores
+deploring
+deploringly
+deploy
+deployable
+deployed
+deploying
+deployment
+deployments
+deployment's
+deploys
+deplume
+depolarisation
+depolarisations
+depolarisation's
+depolarise
+depolarised
+depolariser
+depolarisers
+depolarises
+depolarising
+depoliticise
+depoliticised
+depoliticises
+depoliticising
+depolymerise
+depolymerised
+depolymerises
+depolymerising
+deponent
+depopulate
+depopulation
+depopulator
+deport
+deportable
+deportation
+deported
+deportee
+deportees
+deportee's
+deporting
+deportment
+deports
+depose
+deposed
+deposes
+deposing
+deposit
+depositary
+deposited
+depositing
+deposition
+depositional
+depositions
+deposition's
+depositor
+depositors
+depositor's
+depository
+deposits
+depot
+depots
+depot's
+depravation
+depravations
+deprave
+depraved
+depravedly
+depravedness
+depraver
+depraves
+depraving
+depravities
+depravity
+deprecate
+deprecated
+deprecates
+deprecating
+deprecatingly
+deprecation
+deprecations
+deprecatorily
+deprecatory
+depreciable
+depreciate
+depreciated
+depreciates
+depreciating
+depreciatingly
+depreciation
+depreciations
+depreciative
+depreciatively
+depreciator
+depreciators
+depreciatory
+depredate
+depredated
+depredates
+depredating
+depredation
+depredations
+depredator
+depredators
+depredatory
+depress
+depressant
+depressants
+depressed
+depresses
+depressible
+depressing
+depressingly
+depression
+depressions
+depression's
+depressive
+depressively
+depressomotor
+depressor
+depressors
+depressurisation
+depressurise
+depressurised
+depressurises
+depressurising
+deprivation
+deprivations
+deprivation's
+deprive
+deprived
+deprives
+depriving
+depth
+depthless
+depths
+depurative
+deputation
+deputations
+depute
+deputed
+deputes
+deputies
+deputing
+deputise
+deputised
+deputises
+deputising
+deputy
+deputy's
+derail
+derailed
+derailing
+derailleur
+derailment
+derails
+derange
+deranged
+derangement
+deranges
+deranging
+derbies
+derby
+dereference
+dereferences
+dereferencing
+deregister
+deregulate
+deregulatory
+derelict
+dereliction
+derelicts
+deride
+derided
+derider
+derides
+deriding
+deridingly
+derisible
+derision
+derisive
+derisively
+derisiveness
+derisory
+derivable
+derivate
+derivation
+derivational
+derivations
+derivation's
+derivative
+derivatively
+derivativeness
+derivatives
+derivative's
+derive
+derived
+deriver
+derives
+deriving
+derma
+dermal
+dermatitis
+dermatoid
+dermatologic
+dermatological
+dermatologist
+dermatology
+dermatome
+dermis
+derogate
+derogated
+derogates
+derogating
+derogation
+derogative
+derogatorily
+derogatory
+derrick
+derricked
+derricking
+derricks
+derriere
+derringer
+derv
+dervish
+dervishes
+desalinate
+desalination
+desalinisation
+desalinise
+desalting
+descant
+descend
+descendant
+descendants
+descendant's
+descended
+descendent
+descendents
+descendible
+descending
+descends
+descent
+descents
+descent's
+describable
+describe
+described
+describer
+describers
+describes
+describing
+descried
+description
+descriptions
+description's
+descriptive
+descriptively
+descriptiveness
+descriptivism
+descriptor
+descriptors
+descriptor's
+descry
+descrying
+desecrate
+desecrated
+desecrater
+desecrates
+desecration
+desecrator
+desegregate
+desegregated
+desegregates
+desegregating
+desegregation
+deselect
+deselected
+deselecting
+deselects
+desensitisation
+desensitisations
+desensitisation's
+desensitise
+desensitised
+desensitiser
+desensitisers
+desensitises
+desensitising
+desert
+deserted
+deserter
+deserters
+deserting
+desertion
+desertions
+deserts
+deserve
+deserved
+deservedly
+deservedness
+deserver
+deserves
+deserving
+deservingly
+desexualise
+desexualised
+desexualises
+desexualising
+desiccant
+desiccate
+desiccated
+desiccates
+desiccation
+desiccative
+desiccator
+desiderata
+desiderate
+desideration
+desiderative
+desideratum
+design
+designate
+designated
+designates
+designating
+designation
+designations
+designative
+designator
+designators
+designator's
+designed
+designedly
+designee
+designer
+designers
+designer's
+designing
+designs
+desirability
+desirable
+desirableness
+desirably
+desire
+desired
+desirer
+desires
+desiring
+desirous
+desirously
+desirousness
+desist
+desistance
+desk
+deskill
+deskilled
+deskilling
+deskman
+desks
+desk's
+desktop
+desman
+desolate
+desolated
+desolately
+desolateness
+desolater
+desolates
+desolating
+desolation
+desolations
+desolator
+desorbed
+despair
+despaired
+despairing
+despairingly
+despairs
+despatch
+despatched
+desperado
+desperadoes
+desperate
+desperately
+desperateness
+desperation
+despicable
+despicableness
+despicably
+despise
+despised
+despiser
+despises
+despising
+despite
+despiteful
+despitefully
+despitefulness
+despoil
+despoiled
+despoiler
+despoilers
+despoiling
+despoilment
+despoils
+despoliation
+despond
+despondence
+despondences
+despondency
+despondent
+despondently
+despot
+despotic
+despotically
+despotise
+despotises
+despotism
+despots
+despot's
+desquamate
+dessert
+desserts
+dessert's
+dessertspoon
+destabilisation
+destabilise
+destabilised
+destabilises
+destabilising
+desterilise
+destination
+destinations
+destination's
+destine
+destined
+destinies
+destining
+destiny
+destiny's
+destitute
+destituteness
+destitution
+destroy
+destroyed
+destroyer
+destroyers
+destroyer's
+destroying
+destroys
+destruct
+destructibility
+destructible
+destruction
+destructionist
+destructions
+destruction's
+destructive
+destructively
+destructiveness
+destructivity
+destructor
+destructs
+desuetude
+desulphurisation
+desultorily
+desultoriness
+desultory
+desynchronisation
+desynchronise
+desynchronised
+desynchronises
+desynchronising
+detach
+detachability
+detachable
+detachably
+detached
+detachedly
+detachedness
+detacher
+detaches
+detaching
+detachment
+detachments
+detachment's
+detail
+detailed
+detailer
+detailing
+details
+detain
+detained
+detainee
+detaining
+detainment
+detains
+d'�tat
+detect
+detectable
+detectably
+detectaphone
+detected
+detecting
+detection
+detections
+detection's
+detective
+detectives
+detector
+detectors
+detector's
+detects
+detent
+detente
+detention
+detentions
+deter
+deterge
+detergency
+detergent
+detergents
+deteriorate
+deteriorated
+deteriorates
+deteriorating
+deterioration
+deteriorative
+determent
+determents
+determinability
+determinable
+determinably
+determinacy
+determinant
+determinants
+determinant's
+determinate
+determinately
+determinateness
+determination
+determinations
+determinative
+determinatively
+determinativeness
+determine
+determined
+determinedly
+determinedness
+determiner
+determiners
+determines
+determining
+determinism
+determinist
+deterministic
+deterministically
+deterred
+deterrence
+deterrent
+deterrents
+deterring
+deters
+detersive
+detersives
+detest
+detestable
+detestableness
+detestably
+detestation
+detestations
+detested
+detesting
+detests
+dethrone
+dethronement
+detonable
+detonate
+detonated
+detonates
+detonating
+detonation
+detonative
+detonator
+detonators
+detonator's
+detour
+detoured
+detouring
+detours
+detoxification
+detoxified
+detoxifies
+detoxify
+detoxifying
+detract
+detracted
+detracting
+detraction
+detractions
+detractive
+detractively
+detractor
+detractors
+detractor's
+detracts
+detrain
+detrained
+detraining
+detrainment
+detrains
+d'�tre
+detribalisation
+detribalise
+detribalised
+detribalises
+detribalising
+detriment
+detrimental
+detrimentally
+detriments
+detritus
+detrude
+detruncate
+detune
+detuned
+detunes
+detuning
+deuce
+deuced
+deucedly
+deuces
+deuterium
+deuteron
+deuteron's
+devaluate
+devaluation
+devaluations
+devalue
+devalued
+devalues
+devaluing
+devastate
+devastated
+devastates
+devastating
+devastatingly
+devastation
+devastations
+devastative
+devastator
+devastators
+develop
+developable
+developed
+developer
+developers
+developer's
+developing
+development
+developmental
+developmentally
+developments
+development's
+develops
+deviance
+deviances
+deviancies
+deviancy
+deviant
+deviants
+deviant's
+deviate
+deviated
+deviates
+deviating
+deviation
+deviationism
+deviationist
+deviations
+deviator
+deviators
+device
+devices
+device's
+devil
+devilfish
+devilish
+devilishly
+devilishness
+devilkin
+devilled
+devilling
+devilment
+devilments
+devilry
+devils
+devil's
+deviltry
+devious
+deviously
+deviousness
+devisable
+devisal
+devise
+devised
+devisee
+deviser
+devises
+devising
+devisor
+devitalisation
+devitalise
+devitalised
+devitalises
+devitalising
+devocalise
+devoice
+devoiced
+devoices
+devoicing
+devoid
+devoir
+devoirs
+devolution
+devolutionary
+devolutionist
+devolve
+devolved
+devolves
+devolving
+devote
+devoted
+devotedly
+devotee
+devotees
+devotee's
+devotement
+devotes
+devoting
+devotion
+devotional
+devotionally
+devotions
+devour
+devoured
+devourer
+devouring
+devours
+devout
+devoutly
+devoutness
+dew
+dewater
+dewatered
+dewatering
+dewaters
+dewberry
+dewclaw
+dewdrop
+dewdrops
+dewdrop's
+dewed
+dewier
+dewily
+dewiness
+dewing
+dews
+dewy
+dexterity
+dexterous
+dexterously
+dexterousness
+dextral
+dextrally
+dextrin
+dextroglucose
+dextrose
+dextrose's
+dextrous
+dharma
+dhobi
+dhoti
+dhow
+diabetes
+diabetic
+diabetics
+diabolic
+diabolical
+diabolically
+diabolicalness
+diabolise
+diabolised
+diabolises
+diabolising
+diabolism
+diabolist
+diacaustic
+diacetylmorphine
+diachronic
+diachronically
+diaconal
+diacritic
+diacritical
+diacritically
+diacriticals
+diacritics
+diacritic's
+diadem
+diagnosable
+diagnose
+diagnosed
+diagnoses
+diagnosing
+diagnosis
+diagnostic
+diagnostically
+diagnostician
+diagnosticians
+diagnostics
+diagnostic's
+diagonal
+diagonalisable
+diagonally
+diagonals
+diagram
+diagrammatic
+diagrammatical
+diagrammatically
+diagrammed
+diagramming
+diagrams
+diagram's
+diagraph
+dial
+dialect
+dialectal
+dialectally
+dialectic
+dialectical
+dialectically
+dialectician
+dialecticians
+dialectics
+dialectological
+dialectologist
+dialectology
+dialects
+dialect's
+dialled
+dialler
+diallers
+dialling
+dialog
+dialogic
+dialogical
+dialogically
+dialogism
+dialogist
+dialogistic
+dialogs
+dialog's
+dialogue
+dialogues
+dialogue's
+dials
+dial's
+dialup
+dialups
+dialup's
+dialyse
+dialysed
+dialyser
+dialysers
+dialyser's
+dialyses
+dialysis
+diamagnetic
+diamagnetism
+diamantine
+diameter
+diameters
+diameter's
+diametric
+diametrical
+diametrically
+diamond
+diamondback
+diamonds
+diamond's
+dianoetic
+diapason
+diaper
+diapered
+diapering
+diapers
+diaper's
+diaphaneity
+diaphanous
+diaphanously
+diaphanousness
+diaphone
+diaphoresis
+diaphoretic
+diaphragm
+diaphragmatic
+diaphragmatically
+diaphragms
+diaphragm's
+diarchy
+diaries
+diarist
+diarrhoea
+diarrhoeal
+diarrhoeas
+diarrhoea's
+diarrhoeic
+diary
+diary's
+diastalsis
+diastase
+diastole
+diastolic
+diastrophic
+diastrophism
+diathermancy
+diathermy
+diathesis
+diatom
+diatomaceous
+diatomic
+diatomite
+diatoms
+diatonic
+diatonically
+diatribe
+diatribes
+diatribe's
+diazole
+diazomethane
+dibasic
+dibble
+dibranchiate
+dibs
+dice
+dicer
+dices
+dicey
+dichloride
+dichotic
+dichotomies
+dichotomisation
+dichotomise
+dichotomised
+dichotomises
+dichotomising
+dichotomist
+dichotomous
+dichotomously
+dichotomy
+dichromate
+dichromatic
+dichromaticism
+dichroscope
+dicier
+dicing
+dick
+dickens
+dicker
+dickered
+dickering
+dickers
+dickey
+dicks
+diclinous
+dicta
+dictate
+dictated
+dictates
+dictating
+dictation
+dictations
+dictator
+dictatorial
+dictatorially
+dictatorialness
+dictators
+dictator's
+dictatorship
+dictatorships
+diction
+dictionaries
+dictionary
+dictionary's
+dictions
+dictum
+dictums
+dictum's
+did
+didactic
+didactical
+didactically
+didacticism
+didactics
+diddle
+diddled
+diddling
+didgeridoo
+didn't
+didymium
+die
+dieback
+died
+diehard
+diehards
+dieing
+dielectric
+dielectrics
+dielectric's
+diem
+dieresis
+dies
+diesel
+dieselisation
+dieselise
+dieselises
+diesels
+diesis
+diestock
+diet
+dietaries
+dietary
+dieter
+dieters
+dietetic
+dietetically
+dietetics
+diethylstilbestrol
+dietician
+dieticians
+diets
+differ
+differed
+difference
+differenced
+differences
+difference's
+differencing
+different
+differentia
+differentiability
+differentiable
+differential
+differentially
+differentials
+differential's
+differentiate
+differentiated
+differentiates
+differentiating
+differentiation
+differentiations
+differentiator
+differentiators
+differently
+differing
+differs
+difficult
+difficulties
+difficultly
+difficulty
+difficulty's
+diffidence
+diffident
+diffidently
+diffract
+diffracted
+diffracting
+diffraction
+diffractions
+diffracts
+diffuse
+diffused
+diffusely
+diffuseness
+diffuser
+diffusers
+diffuses
+diffusible
+diffusing
+diffusion
+diffusions
+diffusive
+diffusively
+diffusiveness
+diffusivity
+dig
+digamma
+digenesis
+digenetic
+digest
+digested
+digester
+digestibility
+digestible
+digesting
+digestion
+digestions
+digestive
+digestively
+digests
+digger
+diggers
+digger's
+digging
+diggings
+digit
+digital
+digitalis
+digitalisation
+digitalisations
+digitalisation's
+digitalise
+digitalised
+digitalises
+digitalising
+digitalism
+digitally
+digitisation
+digitise
+digitised
+digitiser
+digitisers
+digitiser's
+digitises
+digitising
+digits
+digit's
+dignified
+dignify
+dignitaries
+dignitary
+dignities
+dignity
+digress
+digressed
+digresses
+digressing
+digression
+digressional
+digressions
+digression's
+digressive
+digressively
+digressiveness
+digs
+dihedral
+dike
+dikes
+dike's
+diktat
+dilapidate
+dilapidated
+dilapidates
+dilapidating
+dilapidation
+dilatability
+dilatable
+dilatation
+dilatational
+dilate
+dilated
+dilates
+dilating
+dilation
+dilative
+dilatometer
+dilatometers
+dilatometer's
+dilator
+dilatorily
+dilatoriness
+dilatory
+dildo
+dildos
+dilemma
+dilemmas
+dilemma's
+dilemmatic
+dilettante
+dilettantes
+dilettanti
+dilettantish
+dilettantism
+diligence
+diligences
+diligent
+diligently
+dill
+dilly
+dillydally
+dilute
+diluted
+diluteness
+diluter
+dilutes
+diluting
+dilution
+dilutions
+dilutor
+dim
+dime
+dimension
+dimensional
+dimensionality
+dimensionally
+dimensioned
+dimensioning
+dimensionless
+dimensions
+dimerism
+dimes
+dime's
+dimethoxymethane
+diminish
+diminishable
+diminished
+diminishes
+diminishing
+diminishment
+diminuendo
+diminuendos
+diminuendo's
+diminution
+diminutive
+diminutively
+diminutiveness
+dimity
+dimly
+dimmable
+dimmed
+dimmer
+dimmers
+dimmer's
+dimmest
+dimming
+dimness
+dimorph
+dimorphic
+dimorphism
+dimple
+dimpled
+dimples
+dimpling
+dimply
+dims
+dimwit
+dimwits
+din
+dine
+dined
+diner
+diners
+dines
+dinette
+ding
+dingbat
+dingbats
+dingdong
+dinghies
+dinghy
+dingier
+dingily
+dinginess
+dingle
+dingo
+dingy
+dining
+dinitrobenzene
+dink
+dinky
+dinner
+dinnerless
+dinners
+dinner's
+dinnertime
+dinnerware
+dinning
+dinosaur
+dinosaurian
+dinosaurs
+dinothere
+dint
+diocesan
+diocese
+diode
+diodes
+diode's
+dioptre
+diorama
+dioramas
+dioramic
+diorite
+dioxide
+dioxides
+dip
+dipetalous
+diphase
+diphenylamine
+diphosgene
+diphtheria
+diphtheritic
+diphthong
+diphthongal
+diphthongisation
+diphthongise
+diphthongises
+diphthongs
+diplex
+diploid
+diploids
+diploma
+diplomacy
+diplomas
+diploma's
+diplomat
+diplomatic
+diplomatically
+diplomatist
+diplomats
+diplomat's
+diplopod
+diplostemonous
+dipnoan
+dipodic
+dipody
+dipolar
+dipole
+dipoles
+dipole's
+dipped
+dipper
+dipperful
+dippers
+dipper's
+dipping
+dippy
+dips
+dipsomania
+dipsomaniac
+dipsomaniacal
+dipstick
+dipteral
+dipterous
+diptych
+dire
+direct
+directed
+directing
+direction
+directional
+directionality
+directionally
+directionless
+directions
+direction's
+directive
+directives
+directive's
+directivity
+directly
+directness
+director
+directorate
+directorial
+directories
+directors
+director's
+directorship
+directory
+directory's
+directs
+direful
+direfully
+direly
+direness
+direr
+direst
+dirge
+dirges
+dirge's
+dirigible
+dirigibles
+diriment
+dirk
+dirndl
+dirt
+dirtied
+dirtier
+dirties
+dirtiest
+dirtily
+dirtiness
+dirt's
+dirty
+dirtying
+disabilities
+disability
+disability's
+disable
+disabled
+disablement
+disabler
+disablers
+disables
+disabling
+disabuse
+disaccharide
+disaccharides
+disaccord
+disaccredit
+disaccustom
+disadvantage
+disadvantaged
+disadvantageous
+disadvantageously
+disadvantageousness
+disadvantages
+disadvantage's
+disadvantaging
+disaffect
+disaffected
+disaffectedly
+disaffectedness
+disaffection
+disaffiliate
+disaffiliated
+disaffiliates
+disaffiliating
+disaffiliation
+disaffirm
+disaffirmation
+disaggregate
+disaggregated
+disaggregating
+disagree
+disagreeability
+disagreeable
+disagreeableness
+disagreeably
+disagreed
+disagreeing
+disagreement
+disagreements
+disagreement's
+disagrees
+disallow
+disallowance
+disallowed
+disallowing
+disallows
+disambiguate
+disambiguated
+disambiguates
+disambiguating
+disambiguation
+disannul
+disappear
+disappearance
+disappearances
+disappearance's
+disappeared
+disappearing
+disappears
+disappoint
+disappointed
+disappointedly
+disappointing
+disappointingly
+disappointment
+disappointments
+disappointment's
+disappoints
+disapprobation
+disapproval
+disapprove
+disapproved
+disapprover
+disapproves
+disapproving
+disapprovingly
+disarm
+disarmament
+disarmed
+disarmer
+disarmers
+disarming
+disarmingly
+disarms
+disarrange
+disarranged
+disarrangement
+disarranges
+disarray
+disarrays
+disarticulate
+disarticulated
+disarticulation
+disassemble
+disassembled
+disassembler
+disassembles
+disassembling
+disassembly
+disassociate
+disassociated
+disassociates
+disassociating
+disassociation
+disaster
+disasters
+disaster's
+disastrous
+disastrously
+disavow
+disavowal
+disavowals
+disavowed
+disavowing
+disavows
+disband
+disbanded
+disbanding
+disbandment
+disbands
+disbar
+disbarment
+disbars
+disbelief
+disbelieve
+disbelieved
+disbeliever
+disbelievers
+disbelieves
+disbelieving
+disbranch
+disbud
+disburden
+disburdenment
+disburse
+disbursed
+disbursement
+disbursements
+disbursement's
+disburser
+disburses
+disbursing
+disc
+discalced
+discard
+discarded
+discarder
+discarding
+discards
+discern
+discernable
+discerned
+discerner
+discernible
+discernibly
+discerning
+discerningly
+discernment
+discerns
+discharge
+dischargeable
+discharged
+discharger
+discharges
+discharging
+disciple
+disciples
+disciple's
+discipleship
+disciplinable
+disciplinal
+disciplinant
+disciplinarian
+disciplinarily
+disciplinary
+discipline
+disciplined
+discipliner
+disciplines
+disciplining
+disclaim
+disclaimed
+disclaimer
+disclaimers
+disclaiming
+disclaims
+disclamation
+disclose
+disclosed
+discloser
+discloses
+disclosing
+disclosure
+disclosures
+disclosure's
+disco
+discographer
+discography
+discoid
+discolour
+discolouration
+discoloured
+discolouring
+discolours
+discombobulate
+discomfit
+discomfited
+discomfiting
+discomfits
+discomfiture
+discomfitures
+discomfort
+discomforting
+discomfortingly
+discommend
+discommendable
+discommendation
+discommode
+discommodes
+discommoding
+discommodity
+discompose
+discomposed
+discomposedly
+discomposure
+disconcert
+disconcerted
+disconcerting
+disconcertingly
+disconcerts
+disconfirm
+disconfirmation
+disconnect
+disconnected
+disconnectedly
+disconnectedness
+disconnecting
+disconnection
+disconnections
+disconnects
+disconsolate
+disconsolately
+disconsolateness
+disconsolation
+discontent
+discontented
+discontentedly
+discontentment
+discontinuance
+discontinuation
+discontinue
+discontinued
+discontinues
+discontinuing
+discontinuities
+discontinuity
+discontinuity's
+discontinuous
+discontinuously
+discophile
+discord
+discordance
+discordances
+discordant
+discordantly
+discords
+discorporate
+discos
+disco's
+discotheque
+discount
+discounted
+discountenance
+discounter
+discounting
+discounts
+discourage
+discouraged
+discouragement
+discourager
+discourages
+discouraging
+discouragingly
+discourse
+discoursed
+discourser
+discourses
+discourse's
+discoursing
+discourteous
+discourteously
+discourteousness
+discourtesy
+discover
+discoverable
+discovered
+discoverer
+discoverers
+discoveries
+discovering
+discovers
+discovery
+discovery's
+discredit
+discreditable
+discreditably
+discredited
+discrediting
+discredits
+discreet
+discreetly
+discreetness
+discrepancies
+discrepancy
+discrepancy's
+discrepant
+discrepantly
+discrete
+discretely
+discreteness
+discretion
+discretionary
+discretions
+discriminate
+discriminated
+discriminates
+discriminating
+discriminatingly
+discrimination
+discriminations
+discriminative
+discriminator
+discriminatorily
+discriminators
+discriminatory
+discs
+disc's
+discursive
+discursively
+discursiveness
+discus
+discuses
+discuss
+discussable
+discussant
+discussants
+discussed
+discusser
+discusses
+discussible
+discussing
+discussion
+discussions
+discussion's
+disdain
+disdainful
+disdainfully
+disdainfulness
+disdaining
+disdains
+disease
+diseased
+diseases
+diseasing
+disembark
+disembarkation
+disembarrass
+disembodied
+disembodiment
+disembody
+disembogue
+disembowel
+disembowelled
+disembowelling
+disembowelment
+disembowels
+disembroil
+disenable
+disenchant
+disenchanter
+disenchanting
+disenchantment
+disencumber
+disenfranchise
+disenfranchised
+disenfranchisement
+disenfranchisements
+disenfranchisement's
+disenfranchises
+disenfranchising
+disengage
+disengaged
+disengagement
+disengages
+disengaging
+disentail
+disentangle
+disentangled
+disentanglement
+disentangles
+disentangling
+disenthralled
+disenthralling
+disentitle
+disentomb
+disentwine
+disequilibrium
+disestablish
+disestablished
+disestablishment
+disestablishmentarian
+disesteem
+disfavour
+disfavoured
+disfavouring
+disfavours
+disfeature
+disfeaturement
+disfigure
+disfigured
+disfigurement
+disfigurements
+disfigures
+disfiguring
+disforest
+disfranchise
+disfranchised
+disfranchisement
+disfranchises
+disfranchising
+disfrock
+disfurnish
+disfurnishment
+disgorge
+disgorgement
+disgorger
+disgrace
+disgraced
+disgraceful
+disgracefully
+disgracefulness
+disgracer
+disgraces
+disgracing
+disgruntle
+disgruntled
+disgruntlement
+disgruntles
+disgruntling
+disguise
+disguised
+disguisedly
+disguiser
+disguises
+disguising
+disgust
+disgusted
+disgustedly
+disgustful
+disgustfully
+disgusting
+disgustingly
+disgusts
+dish
+dishabille
+disharmonic
+disharmonious
+disharmonise
+disharmonises
+disharmony
+dishcloth
+dishearten
+disheartening
+dishearteningly
+disheartenment
+disheartenments
+dished
+dishes
+dishevel
+dishevelled
+dishevelling
+dishevels
+dishing
+dishonest
+dishonestly
+dishonesty
+dishonour
+dishonourable
+dishonourableness
+dishonourably
+dishonoured
+dishonourer
+dishonourers
+dishonourer's
+dishonouring
+dishonours
+dishpan
+dishtowel
+dishwasher
+dishwashers
+dishwater
+dishy
+disillusion
+disillusioned
+disillusioning
+disillusionment
+disillusionments
+disillusionment's
+disincentive
+disincentives
+disinclination
+disincline
+disinclined
+disinclines
+disinclining
+disinfect
+disinfectant
+disinfectants
+disinfected
+disinfecting
+disinfection
+disinfects
+disinfest
+disinfested
+disinfesting
+disinfests
+disinflation
+disingenuous
+disingenuously
+disingenuousness
+disinherit
+disinheritance
+disinherited
+disinheriting
+disinherits
+disintegrate
+disintegrated
+disintegrates
+disintegrating
+disintegration
+disintegrations
+disintegrative
+disintegrator
+disintegrators
+disinter
+disinterest
+disinterested
+disinterestedly
+disinterestedness
+disinterment
+disinterred
+disinters
+disinvest
+disinvestment
+disjoin
+disjoint
+disjointed
+disjointedly
+disjointedness
+disjunction
+disjunctions
+disjunctive
+disjunctively
+disjuncture
+disk
+disked
+diskette
+diskettes
+disking
+disks
+disk's
+dislike
+dislikeable
+disliked
+dislikes
+disliking
+dislocate
+dislocated
+dislocates
+dislocating
+dislocation
+dislocations
+dislodge
+dislodged
+dislodgement
+dislodges
+dislodging
+disloyal
+disloyally
+disloyalty
+dismal
+dismally
+dismalness
+dismantle
+dismantled
+dismantlement
+dismantles
+dismantling
+dismast
+dismay
+dismayed
+dismaying
+dismayingly
+dismays
+dismember
+dismembered
+dismembering
+dismemberment
+dismiss
+dismissal
+dismissals
+dismissal's
+dismissed
+dismisses
+dismissing
+dismissive
+dismount
+dismounted
+dismounting
+dismounts
+disobedience
+disobedient
+disobediently
+disobey
+disobeyed
+disobeyer
+disobeying
+disobeys
+disoblige
+disoperation
+disorder
+disordered
+disorderedly
+disorderliness
+disorderly
+disorders
+disorganization
+disorganizations
+disorganization's
+disorganize
+disorganized
+disorganizer
+disorganizers
+disorganizes
+disorganizing
+disorient
+disorientate
+disorientated
+disorientates
+disorientating
+disorientation
+disoriented
+disown
+disowned
+disowning
+disownment
+disowns
+disparage
+disparaged
+disparagement
+disparager
+disparages
+disparaging
+disparagingly
+disparate
+disparately
+disparateness
+disparities
+disparity
+disparity's
+dispassion
+dispassionate
+dispassionately
+dispassionateness
+dispatch
+dispatched
+dispatcher
+dispatchers
+dispatches
+dispatching
+dispel
+dispelled
+dispelling
+dispels
+dispend
+dispensability
+dispensable
+dispensary
+dispensation
+dispensational
+dispensatory
+dispense
+dispensed
+dispenser
+dispensers
+dispenses
+dispensing
+dispersal
+dispersant
+disperse
+dispersed
+dispersedly
+disperser
+disperses
+dispersible
+dispersing
+dispersion
+dispersions
+dispersive
+dispirit
+dispirited
+dispiritedly
+dispiritedness
+dispiriting
+dispirits
+displace
+displaceable
+displaced
+displacement
+displacements
+displacement's
+displacer
+displaces
+displacing
+display
+displayable
+displayed
+displayer
+displaying
+displays
+displease
+displeased
+displeases
+displeasing
+displeasure
+disport
+disposability
+disposable
+disposal
+disposals
+disposal's
+dispose
+disposed
+disposer
+disposes
+disposing
+disposition
+dispositional
+dispositions
+disposition's
+dispossess
+dispossessed
+dispossesses
+dispossessing
+dispossession
+dispossessor
+disposure
+dispraise
+dispraiser
+dispraisingly
+dispread
+disprize
+disproof
+disproportion
+disproportional
+disproportionate
+disproportionately
+disprovable
+disprove
+disproved
+disproven
+disproves
+disproving
+disputable
+disputant
+disputation
+disputatious
+disputatiously
+disputatiousness
+dispute
+disputed
+disputer
+disputers
+disputes
+disputing
+disqualification
+disqualified
+disqualifies
+disqualify
+disqualifying
+disquiet
+disquieting
+disquietingly
+disquietly
+disquietude
+disquisition
+disregard
+disregarded
+disregardful
+disregarding
+disregards
+disrelish
+disremember
+disrepair
+disreputability
+disreputable
+disreputableness
+disreputably
+disrepute
+disrespect
+disrespectability
+disrespectable
+disrespectful
+disrespectfully
+disrespectfulness
+disrobe
+disrupt
+disrupted
+disrupter
+disrupting
+disruption
+disruptions
+disruption's
+disruptive
+disruptively
+disruptiveness
+disrupts
+dissatisfaction
+dissatisfactions
+dissatisfaction's
+dissatisfactory
+dissatisfied
+dissatisfies
+dissatisfy
+dissatisfying
+dissect
+dissected
+dissecting
+dissection
+dissector
+dissects
+dissemble
+dissembled
+dissembler
+dissembling
+disseminate
+disseminated
+disseminates
+disseminating
+dissemination
+disseminator
+disseminators
+dissension
+dissensions
+dissension's
+dissent
+dissented
+dissenter
+dissenters
+dissentient
+dissenting
+dissention
+dissentious
+dissents
+dissert
+dissertate
+dissertation
+dissertations
+dissertation's
+dissertator
+disserve
+disservice
+dissever
+disseverance
+disseverment
+dissidence
+dissident
+dissidents
+dissident's
+dissimilar
+dissimilarities
+dissimilarity
+dissimilarity's
+dissimilarly
+dissimilate
+dissimilated
+dissimilates
+dissimilating
+dissimilation
+dissimilative
+dissimilitude
+dissimulate
+dissimulation
+dissimulator
+dissipate
+dissipated
+dissipatedly
+dissipatedness
+dissipater
+dissipates
+dissipating
+dissipation
+dissipations
+dissipative
+dissociable
+dissocial
+dissocialise
+dissociate
+dissociated
+dissociates
+dissociating
+dissociation
+dissolubility
+dissoluble
+dissolute
+dissolutely
+dissoluteness
+dissolution
+dissolutions
+dissolution's
+dissolvable
+dissolve
+dissolved
+dissolvent
+dissolver
+dissolves
+dissolving
+dissonance
+dissonances
+dissonance's
+dissonant
+dissonantly
+dissuade
+dissuaded
+dissuader
+dissuades
+dissuading
+dissuasion
+dissuasive
+dissuasively
+dissuasiveness
+dissyllable
+dissymmetric
+dissymmetry
+distaff
+distaffs
+distal
+distally
+distance
+distanced
+distances
+distancing
+distant
+distantly
+distantness
+distaste
+distasteful
+distastefully
+distastefulness
+distastes
+distemper
+distend
+distended
+distensible
+distension
+distich
+distil
+distillate
+distillates
+distillation
+distillations
+distilled
+distiller
+distilleries
+distillers
+distillery
+distilling
+distinct
+distinction
+distinctions
+distinction's
+distinctive
+distinctively
+distinctiveness
+distinctly
+distinctness
+distinguish
+distinguishable
+distinguishably
+distinguished
+distinguisher
+distinguishes
+distinguishing
+distort
+distortable
+distorted
+distorter
+distorting
+distortion
+distortional
+distortions
+distortion's
+distorts
+distract
+distracted
+distractedly
+distractibility
+distractible
+distracting
+distractingly
+distraction
+distractions
+distraction's
+distractive
+distracts
+distrainable
+distrait
+distraught
+distraughtly
+distress
+distressed
+distresses
+distressful
+distressfully
+distressfulness
+distressing
+distressingly
+distribute
+distributed
+distributes
+distributing
+distribution
+distributional
+distributions
+distribution's
+distributive
+distributiveness
+distributor
+distributors
+distributor's
+distributorship
+district
+districted
+districting
+districts
+district's
+distrust
+distrusted
+distrustful
+distrustfully
+distrustfulness
+distrusts
+disturb
+disturbance
+disturbances
+disturbance's
+disturbed
+disturber
+disturbing
+disturbingly
+disturbs
+disulfide
+disulphate
+disulphide
+disulphuric
+disunion
+disunite
+disunited
+disunity
+disuse
+disused
+disutility
+disvalue
+disvalues
+disyllabic
+disyllable
+ditch
+ditched
+ditcher
+ditches
+ditching
+ditch's
+ditheism
+dither
+dithered
+ditherer
+dithering
+dithery
+dithionite
+dithyramb
+dithyrambic
+dittander
+dittany
+ditties
+ditto
+dittography
+dittos
+ditty
+diuretic
+diurnal
+div
+diva
+divagate
+divagation
+divalent
+divan
+divans
+divan's
+divaricator
+dive
+dived
+diver
+diverge
+diverged
+divergence
+divergences
+divergence's
+divergent
+divergently
+diverges
+diverging
+divers
+diverse
+diversely
+diverseness
+diversification
+diversified
+diversifier
+diversifies
+diversiform
+diversify
+diversifying
+diversion
+diversionary
+diversionist
+diversions
+diversities
+diversity
+divert
+diverted
+divertimento
+diverting
+divertissement
+divertissements
+diverts
+dives
+divest
+divested
+divesting
+divestiture
+divestment
+divests
+dividable
+divide
+divided
+dividend
+dividends
+dividend's
+divider
+dividers
+divides
+dividing
+divination
+divinatory
+divine
+divined
+divinely
+diviner
+divines
+diving
+divining
+divinisation
+divinise
+divinised
+divinises
+divinising
+divinities
+divinity
+divinity's
+divisibility
+divisible
+divisibly
+division
+divisional
+divisionism
+divisions
+division's
+divisive
+divisively
+divisiveness
+divisor
+divisors
+divisor's
+divorce
+divorced
+divorcee
+divorcees
+divorcement
+divorces
+divorcing
+divot
+divulgate
+divulge
+divulged
+divulgence
+divulges
+divulging
+divvied
+divvies
+divvy
+divvying
+dizzied
+dizzier
+dizzily
+dizziness
+dizzy
+dizzying
+dizzyingly
+do
+doable
+dobbin
+dobby
+dobsonfly
+doc
+docent
+docile
+docilely
+docility
+dock
+dockage
+docked
+docker
+docket
+docketed
+docketing
+dockets
+dockhand
+docking
+dockland
+docklands
+docks
+dockside
+dockworker
+dockyard
+doctor
+doctoral
+doctorate
+doctorates
+doctorate's
+doctored
+doctoring
+doctors
+doctor's
+doctrinaire
+doctrinal
+doctrinally
+doctrine
+doctrines
+doctrine's
+document
+documental
+documentaries
+documentarily
+documentary
+documentary's
+documentation
+documentations
+documentation's
+documented
+documenter
+documenters
+documenting
+documents
+document's
+dodder
+doddered
+dodderer
+doddering
+dodders
+doddery
+doddle
+dodecagon
+dodecahedra
+dodecahedral
+dodecahedron
+dodecaphonic
+dodge
+dodged
+dodgem
+dodger
+dodgers
+dodges
+dodging
+dodgy
+dodo
+dodos
+dodo's
+doe
+doer
+doers
+does
+doeskin
+doesn't
+d'oeuvre
+doff
+doffing
+doffs
+dog
+dogbane
+dogberry
+dogcart
+dogcatcher
+doge
+dogface
+dogfight
+dogfights
+dogfish
+dogged
+doggedly
+doggedness
+doggerel
+doggie
+doggies
+dogging
+doggish
+doggishly
+doggishness
+doggo
+doggone
+doggy
+doghouse
+dogleg
+doglike
+dogma
+dogman
+dogmas
+dogma's
+dogmatic
+dogmatically
+dogmatisation
+dogmatise
+dogmatiser
+dogmatism
+dogmatist
+dogmatists
+dogmatist's
+dogs
+dog's
+dogsbody
+dogtooth
+dogtrot
+dogvane
+dogwatch
+dogwood
+doilies
+doily
+doing
+doings
+dojo
+dolabriform
+dolce
+doldrums
+dole
+doled
+doleful
+dolefully
+dolefulness
+dolerite
+doles
+doling
+doll
+dollar
+dollarfish
+dollars
+dollhouse
+dollied
+dollies
+dollish
+dollishly
+dollop
+dollops
+dollop's
+dolls
+doll's
+dolly
+dolly's
+dolman
+dolmen
+dolomite
+dolomites
+dolomitise
+doloroso
+dolorous
+dolorously
+dolorousness
+dolour
+dolphin
+dolphins
+dolphin's
+dolt
+doltish
+doltishly
+doltishness
+domain
+domains
+domain's
+dome
+domed
+domes
+domestic
+domestically
+domesticate
+domesticated
+domesticates
+domesticating
+domestication
+domesticity
+domical
+domicile
+domiciled
+domiciliary
+domiciliation
+dominance
+dominant
+dominantly
+dominate
+dominated
+dominates
+dominating
+domination
+dominations
+dominative
+dominator
+domineer
+domineering
+domineeringly
+domineeringness
+doming
+dominical
+dominie
+dominion
+dominions
+dominium
+domino
+dominoes
+don
+donate
+donated
+donates
+donating
+donation
+donations
+donator
+done
+doneness
+dong
+donga
+donjon
+donkey
+donkeys
+donkey's
+donned
+donning
+donnish
+donnishly
+donnishness
+donnybrook
+donor
+donors
+dons
+don't
+donut
+donuts
+doodad
+doodah
+doodle
+doodlebug
+doodled
+doodler
+doodles
+doodling
+doom
+doomed
+dooming
+dooms
+doomsayer
+doomsday
+doomster
+door
+doorbell
+doorframe
+doorjamb
+doorkeeper
+doorkeepers
+doorknob
+doorknobs
+doorman
+doormat
+doormen
+doornail
+doorplate
+doorpost
+doors
+door's
+doorsill
+doorstep
+doorsteps
+doorstep's
+doorstop
+doorway
+doorways
+doorway's
+dooryard
+dope
+doped
+doper
+dopers
+dopes
+dopey
+dopier
+dopiness
+doping
+doppelganger
+dopy
+dorm
+dormancy
+dormant
+dormer
+dormice
+dormitories
+dormitory
+dormitory's
+dormobile
+dormouse
+dormouse's
+dorsal
+dorsally
+dorsum
+dory
+dosage
+dosages
+dose
+dosed
+doses
+dosimeter
+dosimeters
+dosimeter's
+dosing
+doss
+dossal
+dosser
+dossier
+dossiers
+dost
+dot
+dotage
+dotard
+dote
+doted
+doter
+dotes
+doth
+doting
+dotingly
+dots
+dot's
+dotted
+dotter
+dotterel
+dottier
+dottily
+dottiness
+dotting
+dotty
+double
+doubled
+doubleheader
+doubler
+doublers
+doubles
+doublespeak
+doublet
+doublethink
+doubleton
+doubletree
+doublets
+doublet's
+doubling
+doubloon
+doubly
+doubt
+doubtable
+doubted
+doubter
+doubters
+doubtful
+doubtfully
+doubtfulness
+doubting
+doubtingly
+doubtless
+doubtlessly
+doubtlessness
+doubts
+douceur
+douche
+dough
+doughboy
+doughier
+doughnut
+doughnuts
+doughnut's
+doughtier
+doughtily
+doughtiness
+doughty
+doughy
+dour
+dourine
+dourly
+dourness
+douse
+doused
+douser
+douses
+dousing
+dove
+dovecot
+dovecote
+dovekie
+doves
+dovetail
+dovish
+dowager
+dowagers
+dowdier
+dowdies
+dowdily
+dowdiness
+dowdy
+dowdyish
+dowel
+dowelled
+dowelling
+dower
+down
+downbeat
+downcast
+downdraught
+downed
+downer
+downers
+downfall
+downfallen
+downgrade
+downgraded
+downgrades
+downgrading
+downhaul
+downhearted
+downheartedly
+downheartedness
+downhill
+downier
+downing
+download
+downloaded
+downloading
+downloads
+downplay
+downplayed
+downplaying
+downplays
+downpour
+downrange
+downright
+downrightly
+downrightness
+downriver
+downs
+downshift
+downside
+downspout
+downstage
+downstairs
+downstate
+downstream
+downswing
+downswings
+downtime
+downtown
+downtowns
+downtrend
+downtrodden
+downturn
+downturns
+downward
+downwardly
+downwardness
+downwards
+downwash
+downwind
+downy
+dowries
+dowry
+dowse
+dowser
+dowses
+dowsing
+doxology
+doxy
+doyen
+doyley
+doze
+dozed
+dozen
+dozens
+dozer
+dozes
+dozier
+doziness
+dozing
+dozy
+drab
+drabber
+drabbest
+drabbet
+drabbing
+drabble
+drabbled
+drabbling
+drably
+drabness
+drabs
+draft
+drafted
+draftee
+draftees
+drafter
+drafters
+drafting
+drafts
+draft's
+draftsmen
+drag
+dragged
+dragger
+dragging
+draggle
+draggled
+draggletailed
+draggling
+dragline
+dragnet
+dragoman
+dragon
+dragonet
+dragonfly
+dragonhead
+dragonish
+dragonroot
+dragons
+dragon's
+dragoon
+dragooned
+dragoons
+dragrope
+drags
+dragster
+drain
+drainage
+drainages
+drained
+drainer
+drainers
+draining
+drainpipe
+drainpipes
+drains
+drake
+dram
+drama
+dramas
+drama's
+dramatic
+dramatically
+dramatics
+dramatis
+dramatisation
+dramatisations
+dramatisation's
+dramatise
+dramatised
+dramatiser
+dramatisers
+dramatises
+dramatising
+dramatist
+dramatists
+dramatist's
+dramaturge
+dramaturgic
+dramaturgical
+dramaturgically
+dramaturgy
+drank
+drape
+draped
+draper
+draperies
+drapers
+drapery
+drapery's
+drapes
+draping
+drastic
+drastically
+drat
+dratted
+draught
+draughtboard
+draughtier
+draughtily
+draughtiness
+draughts
+draught's
+draughtsman
+draughtsmanship
+draughtsperson
+draughty
+draw
+drawback
+drawbacks
+drawback's
+drawbar
+drawbridge
+drawbridges
+drawbridge's
+drawdown
+drawer
+drawers
+drawing
+drawings
+drawknife
+drawl
+drawled
+drawler
+drawling
+drawlingly
+drawls
+drawly
+drawn
+drawplate
+draws
+drawstring
+drawstrings
+drawstring's
+drawtube
+dray
+drayage
+drayman
+drayman's
+draymen
+draymen's
+dread
+dreaded
+dreadful
+dreadfully
+dreadfulness
+dreading
+dreadnought
+dreads
+dream
+dreamboat
+dreamed
+dreamer
+dreamers
+dreamful
+dreamier
+dreamily
+dreaminess
+dreaming
+dreamingly
+dreamland
+dreamless
+dreamlessly
+dreamlessness
+dreamlike
+dreams
+dreamt
+dreamy
+drear
+drearier
+drearily
+dreariness
+dreary
+dredge
+dredged
+dredger
+dredgers
+dredges
+dredge's
+dredging
+dreg
+dreggy
+dregs
+drench
+drenched
+drencher
+drenches
+drenching
+dress
+dressage
+dressed
+dresser
+dressers
+dresses
+dressier
+dressiness
+dressing
+dressings
+dressmaker
+dressmakers
+dressmaker's
+dressmaking
+dressy
+drew
+drib
+dribble
+dribbled
+dribbler
+dribbles
+dribbling
+driblet
+dribs
+dried
+drier
+driers
+drier's
+dries
+driest
+drift
+driftage
+drifted
+drifter
+drifters
+drifting
+drifts
+driftwood
+driftwood's
+drifty
+drill
+drillable
+drilled
+driller
+drilling
+drillmaster
+drills
+drillstock
+drink
+drinkable
+drinker
+drinkers
+drinking
+drinks
+drip
+dripped
+dripper
+drippier
+dripping
+drippy
+drips
+drip's
+dripstone
+drivable
+drive
+driveable
+drivel
+driveline
+drivelled
+driveller
+drivellers
+drivelling
+driven
+driver
+driverless
+drivers
+driver's
+drives
+driveway
+driveways
+driveway's
+driving
+drizzle
+drizzled
+drizzles
+drizzling
+drizzly
+drogue
+droll
+drolleries
+drollery
+drollness
+drolly
+dromedary
+drone
+drones
+drone's
+droning
+droningly
+drool
+drooled
+drooling
+drools
+droop
+drooped
+droopier
+drooping
+droopingly
+droops
+droopy
+drop
+dropkick
+droplet
+droplets
+droplight
+dropout
+dropouts
+dropped
+dropper
+droppers
+dropper's
+dropping
+droppings
+dropping's
+drops
+drop's
+dropsy
+droshky
+drosophila
+dross
+drossy
+drought
+droughts
+drought's
+droughty
+drove
+drover
+drovers
+droves
+drown
+drowned
+drowning
+drowns
+drowse
+drowsed
+drowses
+drowsier
+drowsiest
+drowsily
+drowsiness
+drowsing
+drowsy
+drub
+drubber
+drubbing
+drudge
+drudger
+drudgery
+drudges
+drudging
+drudgingly
+drug
+drugged
+drugging
+druggist
+druggists
+druggist's
+drugless
+drugs
+drug's
+drugstore
+drugstores
+druid
+druidic
+druidical
+druidism
+drum
+drumbeat
+drumbeater
+drumbeating
+drumfire
+drumhead
+drumlin
+drummed
+drummer
+drummers
+drummer's
+drumming
+drums
+drum's
+drumstick
+drumsticks
+drunk
+drunkard
+drunkards
+drunkard's
+drunken
+drunkenly
+drunkenness
+drunker
+drunks
+drunk's
+drupe
+dry
+dryable
+dryad
+dryer
+dryers
+drying
+dryly
+dryness
+drywall
+dual
+dualism
+dualist
+dualistic
+dualistically
+dualities
+duality
+duality's
+dually
+duals
+dub
+dubbed
+dubbing
+dubiety
+dubious
+dubiously
+dubiousness
+dubitable
+dubitation
+dubs
+ducal
+ducally
+ducat
+duchess
+duchesses
+duchess's
+duchies
+duchy
+duck
+duckbill
+duckbilled
+duckboard
+ducked
+ducker
+duckier
+ducking
+duckling
+duckpin
+ducks
+duckweed
+duckweeds
+duckweed's
+ducky
+duct
+ducted
+ductile
+ductility
+ducting
+ductless
+ducts
+ductwork
+dud
+dude
+dudeen
+dudgeon
+duds
+due
+duel
+duelled
+dueller
+duellers
+duelling
+duellist
+duellists
+duello
+duels
+duenna
+dues
+duet
+duets
+duff
+duffel
+duffer
+duffers
+duffle
+dug
+dugong
+dugout
+duiker
+duke
+dukedom
+dukes
+duke's
+dulcet
+dulcetly
+dulcify
+dulcimer
+dulia
+dull
+dullard
+dulled
+duller
+dullest
+dulling
+dullish
+dullness
+dulls
+dullsville
+dully
+duly
+dumb
+dumbbell
+dumbbells
+dumbbell's
+dumber
+dumbest
+dumbfound
+dumbfounded
+dumbfounder
+dumbfounds
+dumbly
+dumbness
+dumbstruck
+dumbwaiter
+dumbwaiters
+dumdum
+dummied
+dummies
+dummy
+dummying
+dummy's
+dump
+dumped
+dumper
+dumpers
+dumpier
+dumpily
+dumpiness
+dumping
+dumpish
+dumpling
+dumplings
+dumpling's
+dumps
+dumpster
+dumpsters
+dumpster's
+dumpy
+dun
+dunce
+dunces
+dunce's
+dunderhead
+dunderheaded
+dune
+dunes
+dune's
+dung
+dungaree
+dungeon
+dungeons
+dungeon's
+dunghill
+dungy
+dunk
+dunker
+dunlin
+duo
+duodecimal
+duodecimo
+duodenal
+duodenary
+duodenum
+duologue
+duopolistic
+duopoly
+duos
+duotone
+dup
+dupe
+duped
+duper
+dupery
+dupes
+duping
+duple
+duplet
+duplex
+duplexer
+duplicable
+duplicate
+duplicated
+duplicates
+duplicating
+duplication
+duplications
+duplicative
+duplicator
+duplicators
+duplicator's
+duplicitous
+duplicitously
+duplicity
+durability
+durable
+durableness
+durables
+durably
+durance
+duration
+durational
+durations
+duration's
+durative
+durbar
+duress
+durex
+durian
+during
+durmast
+durra
+durst
+durum
+dusk
+duskier
+duskily
+duskiness
+dusky
+dust
+dustbin
+dustbins
+dustcart
+dustcarts
+dustcover
+dusted
+duster
+dusters
+dustier
+dustiest
+dustily
+dustiness
+dusting
+dustless
+dustman
+dustmen
+dustpan
+dustpans
+dusts
+dustsheet
+dustsheets
+dustup
+dusty
+duteous
+dutiable
+duties
+dutiful
+dutifully
+dutifulness
+duty
+duty's
+duumvir
+duumvirate
+duvet
+duvets
+dux
+dwarf
+dwarfed
+dwarfishly
+dwarfishness
+dwarfism
+dwarfs
+dwarves
+dwell
+dwelled
+dweller
+dwellers
+dwelling
+dwellings
+dwells
+dwelt
+dwindle
+dwindled
+dwindles
+dwindling
+dyad
+dyadic
+dyads
+dye
+dyed
+dyeing
+dyer
+dyers
+dyes
+dyestuff
+dyewood
+dying
+dykes
+dynamic
+dynamical
+dynamically
+dynamics
+dynamism
+dynamist
+dynamistic
+dynamite
+dynamited
+dynamiter
+dynamites
+dynamitic
+dynamiting
+dynamo
+dynamoelectric
+dynamometer
+dynamometers
+dynamometer's
+dynamometric
+dynamometry
+dynamos
+dynamotor
+dynast
+dynastic
+dynastically
+dynasties
+dynasts
+dynasty
+dynasty's
+dynatron
+dyne
+dynode
+dynodes
+dysenteric
+dysentery
+dysfunction
+dysfunctional
+dysgenic
+dysgenics
+dyslexia
+dyslexic
+dyslogistic
+dyslogistically
+dysmenorrhoea
+dyspepsia
+dyspeptic
+dyspeptically
+dysphasia
+dysphasic
+dysphemism
+dysphonic
+dyspnoea
+dysprosium
+dystrophic
+dystrophy
+e's 
+each
+eager
+eagerly
+eagerness
+eagle
+eagles
+eagle's
+eaglet
+ealdorman
+ear
+earache
+eardrop
+eardrops
+eardrum
+eardrums
+eared
+earflap
+earful
+earl
+earlap
+earldom
+earless
+earlier
+earliest
+earliness
+earlobe
+earls
+earl's
+early
+earmark
+earmarked
+earmarking
+earmarks
+earmuff
+earmuffs
+earn
+earned
+earner
+earners
+earner's
+earnest
+earnestly
+earnestness
+earning
+earnings
+earns
+earphone
+earphones
+earpiece
+earplug
+earring
+earrings
+earring's
+ears
+earshot
+earth
+earthborn
+earthbound
+earthed
+earthen
+earthenware
+earthier
+earthily
+earthiness
+earthlight
+earthliness
+earthling
+earthly
+earthman
+earthmen
+earthmover
+earthmoving
+earthnut
+earthquake
+earthquakes
+earthquake's
+earthrise
+earths
+earth's
+earthshaking
+earthshakingly
+earthshine
+earthstar
+earthward
+earthwards
+earthwork
+earthworks
+earthworm
+earthworms
+earthworm's
+earthy
+earwax
+earwig
+ease
+eased
+easeful
+easefully
+easel
+easement
+easements
+easement's
+easer
+eases
+easier
+easiest
+easily
+easiness
+easing
+east
+eastbound
+easterly
+eastern
+easterner
+easterners
+easternmost
+easting
+eastward
+eastwards
+easy
+easygoing
+easygoingness
+eat
+eatable
+eatables
+eaten
+eater
+eaters
+eatery
+eating
+eats
+eave
+eaves
+eavesdrop
+eavesdropped
+eavesdropper
+eavesdroppers
+eavesdropper's
+eavesdropping
+eavesdrops
+ebb
+ebbed
+ebbing
+ebbs
+ebon
+ebonise
+ebonised
+ebonises
+ebonising
+ebonite
+ebony
+ebullience
+ebullient
+ebulliently
+ebullioscopy
+ebullition
+ecce
+eccentric
+eccentrically
+eccentricities
+eccentricity
+eccentrics
+eccentric's
+ecclesia
+ecclesial
+ecclesiastic
+ecclesiastical
+ecclesiastically
+ecclesiasticism
+ecclesiolatry
+ecclesiological
+ecclesiology
+eccrinology
+ecdysiast
+echelon
+echelons
+echidna
+echinoderm
+echinoid
+echinus
+echo
+echoed
+echoes
+echoic
+echoing
+echoism
+echolalia
+echolocation
+echovirus
+eclectic
+eclectically
+eclecticism
+eclipse
+eclipsed
+eclipses
+eclipsing
+ecliptic
+eclogue
+ecocide
+ecol
+ecologic
+ecological
+ecologically
+ecologist
+ecologists
+ecology
+econometric
+econometrically
+econometrician
+econometricians
+econometrics
+econometrist
+economic
+economical
+economically
+economics
+economies
+economisation
+economisations
+economisation's
+economise
+economised
+economiser
+economisers
+economises
+economising
+economist
+economists
+economist's
+economy
+economy's
+ecospecies
+ecosphere
+ecosystem
+ecosystems
+ecotype
+ecru
+ecstasy
+ecstatic
+ecstatically
+ectoblastic
+ectoderm
+ectodermic
+ectoplasm
+ectype
+ecumenical
+ecumenicalism
+ecumenically
+ecumenicist
+ecumenicists
+ecumenicist's
+ecumenicity
+ecumenism
+ecumenist
+ecumenists
+ecumenist's
+eczema
+eczematous
+ed
+edacious
+edacity
+edam
+edaphically
+eddied
+eddies
+eddo
+eddy
+eddying
+eddy's
+edelweiss
+edentate
+edentulous
+edge
+edged
+edgeless
+edger
+edges
+edgeways
+edgewise
+edgier
+edgily
+edginess
+edging
+edgy
+edibility
+edible
+edibleness
+edibles
+edict
+edictal
+edicts
+edict's
+edification
+edificatory
+edifice
+edifices
+edifice's
+edified
+edifies
+edify
+edifying
+edit
+editable
+edited
+editing
+edition
+editions
+edition's
+editor
+editorial
+editorialise
+editorialised
+editorialises
+editorialising
+editorialist
+editorially
+editorials
+editors
+editor's
+editorship
+edits
+educability
+educable
+educate
+educated
+educates
+educating
+education
+educational
+educationalist
+educationalists
+educationally
+educationist
+educations
+education's
+educative
+educator
+educators
+educator's
+educatory
+educe
+educible
+educing
+eel
+eelgrass
+eelpout
+eels
+eel's
+eelworm
+eely
+e'er
+eerie
+eerier
+eerily
+eeriness
+effable
+efface
+effaceable
+effaced
+effacement
+effacer
+effaces
+effacing
+effect
+effected
+effecting
+effective
+effectively
+effectiveness
+effectives
+effectors
+effector's
+effects
+effectual
+effectuality
+effectually
+effectualness
+effectuate
+effectuated
+effectuates
+effectuating
+effectuation
+effeminacy
+effeminate
+effendi
+efferent
+effervesce
+effervescence
+effervescent
+effervescently
+effete
+effetely
+effeteness
+efficacious
+efficaciously
+efficaciousness
+efficacy
+efficiencies
+efficiency
+efficient
+efficiently
+effigy
+effloresce
+efflorescence
+efflorescent
+effluence
+effluent
+effluents
+effluvia
+effluvium
+efflux
+effort
+effortful
+effortless
+effortlessly
+effortlessness
+efforts
+effort's
+effrontery
+effulgence
+effulgent
+effuse
+effused
+effuses
+effusing
+effusion
+effusive
+effusively
+effusiveness
+egad
+egalitarian
+egalitarianism
+egg
+eggbeater
+eggcup
+egged
+egger
+egghead
+egging
+eggnog
+eggplant
+eggs
+eggshell
+eglantine
+ego
+egocentric
+egocentrically
+egocentricity
+egocentrism
+egoism
+egoist
+egoistic
+egoistical
+egoistically
+egoists
+egomania
+egomaniac
+egomaniacal
+egomaniacally
+egomaniacs
+egos
+egotism
+egotist
+egotistic
+egotistical
+egotistically
+egotists
+egregious
+egregiously
+egregiousness
+egress
+egression
+egret
+egrets
+eh
+eider
+eiderdown
+eidetic
+eidolon
+eigenvector
+eigenvectors
+eight
+eighteen
+eighteens
+eighteenth
+eightfold
+eighth
+eighths
+eighth's
+eighties
+eightieth
+eights
+eighty
+einsteinium
+either
+ejaculate
+ejaculated
+ejaculates
+ejaculating
+ejaculation
+ejaculations
+ejaculatory
+eject
+ejected
+ejecting
+ejection
+ejective
+ejector
+ejectors
+ejects
+eke
+eked
+ekes
+eking
+ekistics
+el
+elaborate
+elaborated
+elaborately
+elaborateness
+elaborates
+elaborating
+elaboration
+elaborations
+elaborative
+elaborators
+eland
+elapid
+elapse
+elapsed
+elapses
+elapsing
+elastic
+elastically
+elasticise
+elasticised
+elasticises
+elasticising
+elasticity
+elastics
+elate
+elated
+elatedly
+elatedness
+elaterid
+elaterium
+elates
+elating
+elation
+elbow
+elbowed
+elbowing
+elbowroom
+elbows
+elder
+elderberry
+elderliness
+elderly
+elders
+eldership
+eldest
+eldritch
+elecampane
+elect
+elected
+electing
+election
+electioneer
+electioneerer
+elections
+election's
+elective
+electively
+electiveness
+electives
+elector
+electoral
+electorate
+electors
+elector's
+electric
+electrical
+electrically
+electrician
+electricians
+electricity
+electrics
+electrification
+electrified
+electrify
+electrifying
+electro
+electrocardiogram
+electrocardiograms
+electrocardiogram's
+electrocardiograph
+electrocardiographically
+electrocardiography
+electrochemical
+electrochemically
+electrochemist
+electrochemistry
+electrochemists
+electroconvulsive
+electrocute
+electrocuted
+electrocutes
+electrocuting
+electrocution
+electrocutions
+electrode
+electrodes
+electrode's
+electrodynamics
+electrodynamometer
+electrodynamometers
+electrodynamometer's
+electroencephalogram
+electroencephalograms
+electroencephalogram's
+electroencephalograph
+electroencephalography
+electroform
+electrograph
+electroluminescence
+electroluminescent
+electrolyse
+electrolysed
+electrolyses
+electrolysing
+electrolysis
+electrolyte
+electrolytes
+electrolyte's
+electrolytic
+electromagnet
+electromagnetic
+electromagnetically
+electromagnetism
+electromagnetisms
+electromagnets
+electromechanical
+electromechanically
+electrometallurgy
+electrometer
+electrometers
+electrometer's
+electromotive
+electromyography
+electron
+electronegative
+electronic
+electronically
+electronics
+electrons
+electron's
+electrophone
+electrophoresis
+electrophorus
+electrophysiological
+electrophysiology
+electroplate
+electroplater
+electropositive
+electroscope
+electroshock
+electroshocks
+electrostatic
+electrostatics
+electrostriction
+electrosurgical
+electrotherapist
+electrotype
+electrotyper
+electrotypers
+electrovalence
+electrovalent
+electroweak
+electrum
+elects
+electuary
+eleemosynary
+elegance
+elegances
+elegancy
+elegant
+elegantly
+elegiac
+elegies
+elegise
+elegised
+elegises
+elegising
+elegy
+element
+elemental
+elementally
+elementals
+elementarily
+elementariness
+elementary
+elements
+element's
+elemi
+elenchus
+elephant
+elephantiasis
+elephantine
+elephants
+elephant's
+elevate
+elevated
+elevates
+elevating
+elevation
+elevations
+elevator
+elevators
+elevator's
+eleven
+elevens
+elevenses
+eleventh
+elf
+elfin
+elfish
+elfishly
+elflock
+elicit
+elicitation
+elicited
+eliciting
+elicitor
+elicits
+elide
+elided
+elides
+eliding
+eligibilities
+eligibility
+eligible
+eligibly
+eliminable
+eliminate
+eliminated
+eliminates
+eliminating
+elimination
+eliminations
+eliminative
+eliminator
+eliminators
+elision
+elisions
+elite
+elites
+elitism
+elitist
+elitists
+elixir
+elk
+elkhound
+elks
+elk's
+ell
+ellipse
+ellipses
+ellipse's
+ellipsis
+ellipsoid
+ellipsoidal
+ellipsoids
+ellipsoid's
+elliptic
+elliptical
+elliptically
+elm
+elms
+elocution
+elocutionary
+elocutionist
+elocutionists
+eloign
+elongate
+elongated
+elongates
+elongating
+elongation
+elope
+eloped
+elopement
+eloper
+elopes
+eloping
+eloquence
+eloquent
+eloquently
+else
+else's
+elsewhere
+elucidate
+elucidated
+elucidates
+elucidating
+elucidation
+elucidative
+elucidator
+elude
+eluded
+eludes
+eluding
+elusion
+elusive
+elusively
+elusiveness
+elute
+eluted
+eluting
+elution
+elutriate
+elutriator
+elves
+elysian
+emaciate
+emaciated
+emaciates
+emaciating
+emaciation
+email
+emanate
+emanated
+emanates
+emanating
+emanation
+emanations
+emanative
+emancipate
+emancipated
+emancipates
+emancipating
+emancipation
+emancipationist
+emancipator
+emarginated
+emasculate
+emasculated
+emasculates
+emasculating
+emasculation
+emasculator
+embalm
+embalmer
+embalmers
+embalming
+embalmment
+embalms
+embank
+embanked
+embanking
+embankment
+embankments
+embanks
+embarcadero
+embargo
+embargoed
+embargoes
+embargoing
+embark
+embarkation
+embarked
+embarking
+embarks
+embarrass
+embarrassed
+embarrassedly
+embarrasses
+embarrassing
+embarrassingly
+embarrassment
+embassies
+embassy
+embassy's
+embattle
+embattled
+embattlement
+embattles
+embattling
+embay
+embayment
+embed
+embeddable
+embedded
+embedding
+embedment
+embeds
+embellish
+embellished
+embellisher
+embellishes
+embellishing
+embellishment
+embellishments
+embellishment's
+ember
+embers
+embezzle
+embezzled
+embezzlement
+embezzler
+embezzlers
+embezzler's
+embezzles
+embezzling
+embitter
+embittered
+embitterment
+embitters
+emblaze
+emblazed
+emblazes
+emblazing
+emblazon
+emblazoned
+emblazoner
+emblazoning
+emblazonment
+emblazonry
+emblazons
+emblem
+emblematic
+emblematical
+emblematically
+emblematise
+emblematised
+emblematises
+emblematising
+emblemise
+emblemises
+emblems
+embodied
+embodies
+embodiment
+embodiments
+embodiment's
+embody
+embodying
+embolden
+emboldened
+emboldens
+embolic
+embolism
+embolismic
+embolus
+embosom
+emboss
+embossed
+embosser
+embossers
+embosses
+embossing
+embossment
+embouchure
+embowel
+embowelled
+embowelling
+embower
+embrace
+embraceable
+embraced
+embracement
+embraceor
+embracer
+embraces
+embracing
+embracive
+embranchment
+embrangle
+embranglement
+embrasure
+embrocate
+embrocated
+embrocates
+embrocating
+embroider
+embroidered
+embroiderer
+embroideries
+embroiders
+embroidery
+embroil
+embroiled
+embroiling
+embroilment
+embroils
+embrown
+embryo
+embryogenesis
+embryologic
+embryological
+embryologist
+embryology
+embryonic
+embryos
+embryo's
+emcee
+emceed
+emceeing
+emend
+emendable
+emendate
+emendation
+emendator
+emendatory
+emerald
+emeralds
+emerald's
+emerge
+emerged
+emergence
+emergencies
+emergency
+emergency's
+emergent
+emerges
+emerging
+emeriti
+emeritus
+emersion
+emery
+emesis
+emetic
+emetine
+emigrant
+emigrants
+emigrant's
+emigrate
+emigrated
+emigrates
+emigrating
+emigration
+�migr�
+eminence
+eminency
+eminent
+eminently
+emir
+emirate
+emissaries
+emissary
+emission
+emissions
+emission's
+emissive
+emit
+emits
+emitted
+emitter
+emitters
+emitting
+emmer
+emollient
+emollients
+emolument
+emoluments
+emote
+emoted
+emotes
+emoting
+emotion
+emotional
+emotionalise
+emotionalised
+emotionalises
+emotionalising
+emotionalism
+emotionalist
+emotionality
+emotionally
+emotionless
+emotions
+emotion's
+emotive
+emotively
+empanel
+empanelled
+empanelling
+empanels
+empathetic
+empathetically
+empathic
+empathise
+empathised
+empathises
+empathising
+empathy
+empennage
+emperies
+emperor
+emperors
+emperor's
+emperorship
+empery
+emphases
+emphasis
+emphasise
+emphasised
+emphasises
+emphasising
+emphatic
+emphatically
+emphysema
+emphysematous
+empire
+empires
+empire's
+empiric
+empirical
+empirically
+empiricism
+empiricist
+empiricists
+empiricist's
+emplace
+emplacement
+emplane
+employ
+employability
+employable
+employed
+employee
+employees
+employee's
+employer
+employers
+employer's
+employing
+employment
+employments
+employment's
+employs
+empoison
+emporium
+emporiums
+empower
+empowered
+empowering
+empowerment
+empowers
+empress
+emprise
+emptied
+emptier
+empties
+emptiest
+emptily
+emptiness
+empty
+emptying
+empurple
+empurpled
+empurpling
+empyrean
+emulate
+emulated
+emulates
+emulating
+emulation
+emulations
+emulative
+emulator
+emulators
+emulator's
+emulous
+emulously
+emulousness
+emulsification
+emulsified
+emulsifier
+emulsifies
+emulsify
+emulsion
+emulsions
+en
+enable
+enabled
+enabler
+enablers
+enables
+enabling
+enact
+enacted
+enacting
+enactment
+enactments
+enactor
+enacts
+enamel
+enamelled
+enameller
+enamellers
+enamelling
+enamellings
+enamellist
+enamellists
+enamels
+enamelware
+enamour
+enamoured
+enamouring
+enamours
+encaenia
+encage
+encamp
+encamped
+encamping
+encampment
+encamps
+encapsulate
+encapsulated
+encapsulates
+encapsulating
+encapsulation
+encarnalise
+encarnalised
+encarnalises
+encarnalising
+encase
+encased
+encasement
+encashment
+encaustic
+enceinte
+encephalic
+encephalin
+encephalitic
+encephalitis
+encephalogram
+encephalograms
+encephalogram's
+encephalograph
+encephalographic
+encephalography
+encephalomyelitis
+encephalon
+enchain
+enchained
+enchainment
+enchant
+enchanted
+enchanter
+enchanting
+enchantingly
+enchantment
+enchantress
+enchants
+enchase
+enchased
+enchasing
+enchilada
+enchiladas
+enchiridion
+enchorial
+encipher
+enciphered
+enciphering
+encipherment
+enciphers
+encircle
+encircled
+encirclement
+encircles
+encircling
+enclave
+enclaves
+enclitic
+enclose
+enclosed
+encloses
+enclosing
+enclosure
+enclosures
+enclosure's
+encode
+encoded
+encoder
+encoders
+encodes
+encoding
+encodings
+encomia
+encomiast
+encomium
+encomiums
+encompass
+encompassed
+encompasses
+encompassing
+encompassment
+encore
+encored
+encores
+encoring
+encounter
+encountered
+encountering
+encounters
+encourage
+encouraged
+encouragement
+encouragements
+encourager
+encourages
+encouraging
+encouragingly
+encroach
+encroached
+encroacher
+encroaches
+encroaching
+encroachment
+encrust
+encrustation
+encrusted
+encrusting
+encrusts
+encrypt
+encrypted
+encrypting
+encryption
+encryptions
+encryption's
+encrypts
+enculturation
+encumber
+encumbered
+encumbering
+encumbers
+encumbrance
+encumbrances
+encyclical
+encyclopaedia
+encyclopaedias
+encyclopaedia's
+encyclopaedic
+encyclopaedically
+encyclopaedism
+encyclopaedist
+end
+endanger
+endangered
+endangering
+endangerment
+endangers
+endbrain
+endear
+endeared
+endearing
+endearingly
+endearment
+endearments
+endears
+endeavour
+endeavoured
+endeavourer
+endeavourers
+endeavourer's
+endeavouring
+endeavours
+ended
+endemic
+endemically
+ender
+enders
+endgame
+ending
+endings
+endive
+endless
+endlessly
+endlessness
+endmost
+endnote
+endnotes
+endnote's
+endoblast
+endocarp
+endocentric
+endocrine
+endocrinologist
+endocrinology
+endoderm
+endodermis
+endoergic
+endogamous
+endogamy
+endogen
+endogenous
+endogenously
+endometrial
+endometriosis
+endomorph
+endomorphic
+endomorphism
+endoplasm
+endoplasmic
+endorse
+endorsed
+endorsee
+endorsement
+endorsements
+endorsement's
+endorser
+endorses
+endorsing
+endoscope
+endoskeleton
+endosmosis
+endosmotically
+endosperm
+endospermic
+endothelial
+endothelium
+endothermic
+endow
+endowed
+endowing
+endowment
+endowments
+endowment's
+endows
+endpaper
+endplate
+endplay
+endpoint
+endpoints
+ends
+endue
+endued
+enduing
+endurable
+endurably
+endurance
+endure
+endured
+endures
+enduring
+enduringly
+enduringness
+endways
+endwise
+enema
+enemas
+enema's
+enemata
+enemies
+enemy
+enemy's
+energetic
+energetically
+energies
+energise
+energised
+energiser
+energisers
+energises
+energising
+energumen
+energy
+enervate
+enervated
+enervates
+enervating
+enervation
+enervative
+enface
+enfant
+enfeeble
+enfeebled
+enfeeblement
+enfeebles
+enfeebling
+enfetter
+enfilade
+enflame
+enflamed
+enflames
+enflaming
+enfold
+enforce
+enforceability
+enforceable
+enforced
+enforcedly
+enforcement
+enforcer
+enforcers
+enforces
+enforcing
+enfranchise
+enfranchised
+enfranchisement
+enfranchiser
+enfranchises
+enfranchising
+engage
+engaged
+engagement
+engagements
+engagement's
+engages
+engaging
+engagingly
+engender
+engendered
+engendering
+engenders
+engine
+engineer
+engineered
+engineering
+engineers
+engineer's
+enginery
+engines
+engine's
+engird
+engirdle
+engorge
+engorged
+engorgement
+engorges
+engorging
+engraft
+engrail
+engrailed
+engrain
+engrave
+engraved
+engraver
+engravers
+engraves
+engraving
+engravings
+engross
+engrossed
+engrossing
+engrossingly
+engrossment
+engulf
+engulfed
+engulfing
+engulfment
+engulfs
+enhance
+enhanced
+enhancement
+enhancements
+enhancement's
+enhances
+enhancing
+enharmonic
+enharmonically
+enigma
+enigmatic
+enigmatical
+enigmatically
+enjambment
+enjoin
+enjoinder
+enjoined
+enjoining
+enjoins
+enjoy
+enjoyable
+enjoyableness
+enjoyably
+enjoyed
+enjoying
+enjoyment
+enjoys
+enkindle
+enlace
+enlacement
+enlarge
+enlargeable
+enlarged
+enlargement
+enlargements
+enlargement's
+enlarger
+enlargers
+enlarges
+enlarging
+enlighten
+enlightened
+enlightening
+enlightenment
+enlightens
+enlist
+enlisted
+enlistee
+enlister
+enlisting
+enlistment
+enlistments
+enlists
+enliven
+enlivened
+enlivening
+enlivens
+enmesh
+enmeshed
+enmeshment
+enmities
+enmity
+ennead
+enneagon
+ennoble
+ennobled
+ennoblement
+ennobler
+ennobles
+ennobling
+ennui
+enormities
+enormity
+enormous
+enormously
+enormousness
+enosis
+enough
+enounce
+enplane
+enquire
+enquired
+enquirer
+enquirers
+enquires
+enquiries
+enquiring
+enquiry
+enrage
+enraged
+enrages
+enraging
+enrapt
+enrapture
+enraptured
+enraptures
+enrapturing
+enrich
+enriched
+enriches
+enriching
+enrichment
+enrobe
+enrol
+enrolled
+enrolling
+enrolment
+enrolments
+enrolment's
+enrols
+enroot
+ensample
+ensanguine
+ensconce
+ensconced
+ensconces
+ensconcing
+ensemble
+ensembles
+ensemble's
+enshrine
+enshrined
+enshrinement
+enshrines
+enshroud
+ensign
+ensigns
+ensign's
+ensilage
+ensile
+ensiled
+ensiling
+enslave
+enslaved
+enslavement
+enslaver
+enslavers
+enslaves
+enslaving
+ensnare
+ensnared
+ensnares
+ensnaring
+ensnarl
+ensorcelled
+ensue
+ensued
+ensues
+ensuing
+ensure
+ensured
+ensures
+ensuring
+enswathe
+entablature
+entail
+entailed
+entailer
+entailing
+entailment
+entails
+entangle
+entangled
+entanglement
+entangler
+entangles
+entangling
+entelechy
+entellus
+entendre
+entente
+enter
+enterable
+entered
+enterer
+enteric
+entering
+enteritis
+enterprise
+enterpriser
+enterprises
+enterprising
+enterprisingly
+enters
+entertain
+entertained
+entertainer
+entertainers
+entertaining
+entertainingly
+entertainment
+entertainments
+entertainment's
+entertains
+enthalpy
+enthral
+enthralled
+enthralling
+enthralment
+enthralments
+enthralment's
+enthrals
+enthrone
+enthroned
+enthronement
+enthrones
+enthroning
+enthronisation
+enthronisations
+enthronisation's
+enthuse
+enthused
+enthuses
+enthusiasm
+enthusiasms
+enthusiast
+enthusiastic
+enthusiastically
+enthusiasts
+enthusiast's
+enthusing
+enthymeme
+entice
+enticed
+enticement
+enticements
+enticer
+enticers
+entices
+enticing
+entire
+entirely
+entireties
+entirety
+entities
+entitle
+entitled
+entitlement
+entitlements
+entitles
+entitling
+entity
+entity's
+entomb
+entombed
+entombment
+entomic
+entomological
+entomologise
+entomologised
+entomologises
+entomologising
+entomologist
+entomology
+entomostracan
+entophyte
+entopic
+entourage
+entourages
+entrails
+entrain
+entrained
+entraining
+entrainment
+entrains
+entrance
+entranced
+entrancement
+entrances
+entranceway
+entrancing
+entrant
+entrants
+entrap
+entrapment
+entrapments
+entrapped
+entraps
+entreat
+entreated
+entreaties
+entreating
+entreatingly
+entreats
+entreaty
+entrechat
+entree
+entrees
+entremets
+entrench
+entrenched
+entrenches
+entrenching
+entrenchment
+entrenchments
+entrepreneur
+entrepreneurial
+entrepreneurs
+entrepreneur's
+entrepreneurship
+entresol
+entries
+entropies
+entropy
+entrust
+entrusted
+entrusting
+entrustment
+entrusts
+entry
+entry's
+entryway
+entwine
+entwined
+entwinement
+entwines
+entwining
+entwist
+enucleate
+enucleated
+enucleating
+enumerable
+enumerate
+enumerated
+enumerates
+enumerating
+enumeration
+enumerations
+enumerative
+enumerator
+enumerators
+enumerator's
+enunciable
+enunciate
+enunciated
+enunciates
+enunciating
+enunciation
+enunciator
+enunciators
+enuresis
+envelop
+envelope
+enveloped
+enveloper
+envelopes
+enveloping
+envelopment
+envelopments
+envelops
+envenom
+envenomed
+envenoming
+envenoms
+enviable
+enviableness
+enviably
+envied
+envier
+envies
+envious
+enviously
+enviousness
+environ
+environed
+environing
+environment
+environmental
+environmentalism
+environmentalist
+environmentalists
+environmentally
+environments
+environment's
+environs
+envisage
+envisaged
+envisages
+envisaging
+envision
+envisioned
+envisioning
+envisions
+envoi
+envois
+envoy
+envoys
+envoy's
+envy
+envying
+envyingly
+enwind
+enwinding
+enwomb
+enwrap
+enwreathe
+enzootic
+enzymatic
+enzyme
+enzymes
+enzymologist
+eohippus
+eolith
+eon
+eons
+eon's
+eosin
+epact
+eparch
+eparchy
+epaulet
+epaulets
+epaulet's
+epaulette
+epencephalon
+epenthesis
+epergne
+epexegesis
+ephemeral
+ephemerally
+ephemerals
+ephemeris
+ephemeron
+ephod
+epic
+epical
+epically
+epicedium
+epicene
+epicentre
+epicentres
+epicentre's
+epiclesis
+epics
+epic's
+epicure
+epicurean
+epicycle
+epicycles
+epicyclical
+epicyclically
+epideictic
+epidemic
+epidemical
+epidemically
+epidemics
+epidemic's
+epidemiologic
+epidemiological
+epidemiologically
+epidemiologist
+epidemiology
+epidermal
+epidermis
+epidiascope
+epidural
+epifocal
+epigenetic
+epigenous
+epigeous
+epiglottis
+epigone
+epigram
+epigrammatic
+epigrammatically
+epigrammatise
+epigrammatised
+epigrammatises
+epigrammatising
+epigrammatism
+epigrammatist
+epigrams
+epigraph
+epigrapher
+epigraphic
+epigraphically
+epigraphist
+epigraphy
+epilate
+epilepsy
+epileptic
+epileptically
+epileptics
+epilogue
+epilogues
+epimorphosis
+epinephrine
+epiphany
+epiphenomena
+epiphenomenal
+epiphenomenalism
+epiphenomenally
+epiphenomenon
+epiphysis
+epiphyte
+epiphytic
+episcopacy
+episcopate
+episcope
+episiotomy
+episode
+episodes
+episode's
+episodic
+episodically
+epistemic
+epistemological
+epistemologically
+epistemologist
+epistemology
+epistle
+epistler
+epistles
+epistle's
+epistolary
+epitaph
+epitaphic
+epitaphs
+epithalamium
+epithelial
+epithelium
+epithet
+epithetic
+epithetical
+epithets
+epithet's
+epitome
+epitomes
+epitomise
+epitomised
+epitomiser
+epitomisers
+epitomises
+epitomising
+epizootic
+epoch
+epochal
+epochs
+epode
+epodes
+eponym
+eponymous
+eponymy
+epos
+epoxy
+epsilon
+epsilons
+equability
+equable
+equableness
+equably
+equal
+equalisation
+equalisations
+equalisation's
+equalise
+equalised
+equaliser
+equalisers
+equaliser's
+equalises
+equalising
+equalitarian
+equalitarianism
+equalities
+equality
+equality's
+equalled
+equalling
+equally
+equals
+equanimities
+equanimity
+equate
+equated
+equates
+equating
+equation
+equations
+equator
+equatorial
+equators
+equator's
+equerries
+equerry
+equestrian
+equestrians
+equestrienne
+equiangular
+equidistant
+equidistantly
+equilateral
+equilaterals
+equilibrant
+equilibrate
+equilibrated
+equilibrates
+equilibrating
+equilibration
+equilibrator
+equilibrators
+equilibrist
+equilibristic
+equilibrium
+equilibriums
+equimolecular
+equine
+equines
+equinoctial
+equinox
+equip
+equipage
+equipment
+equipments
+equipoise
+equipollence
+equipollent
+equiponderant
+equiponderate
+equipotent
+equipped
+equipping
+equips
+equitability
+equitable
+equitableness
+equitably
+equitant
+equitation
+equities
+equity
+equivalence
+equivalences
+equivalency
+equivalent
+equivalently
+equivalents
+equivocal
+equivocally
+equivocalness
+equivocate
+equivocated
+equivocates
+equivocating
+equivocation
+equivocator
+equivoque
+era
+eradiate
+eradicable
+eradicate
+eradicated
+eradicates
+eradicating
+eradication
+eradicative
+eradicator
+eradicators
+eras
+era's
+erasable
+erase
+erased
+eraser
+erasers
+erases
+erasing
+erasure
+erbium
+ere
+erect
+erectable
+erected
+erectile
+erectility
+erecting
+erection
+erections
+erection's
+erectly
+erectness
+erector
+erectors
+erector's
+erects
+erelong
+eremite
+erenow
+erewhile
+erg
+ergative
+ergo
+ergonomic
+ergonomics
+ergot
+ergotamine
+ericaceous
+erinaceous
+eristic
+ermine
+ermined
+ermines
+ermine's
+erne
+erode
+eroded
+erodes
+eroding
+erogenous
+erosion
+erosive
+erotic
+erotica
+erotically
+eroticisation
+eroticise
+eroticised
+eroticises
+eroticising
+eroticism
+eroticist
+erotology
+err
+errand
+errands
+errant
+errantly
+errantry
+errata
+erratic
+erratically
+erratum
+erred
+erring
+erringly
+erroneous
+erroneously
+erroneousness
+error
+errorless
+errors
+error's
+errs
+ersatz
+erstwhile
+eruct
+erudite
+eruditely
+erudition
+erumpent
+erupt
+erupted
+eruptible
+erupting
+eruption
+eruptions
+eruptive
+erupts
+eryngo
+erysipelas
+erythrism
+erythroblast
+erythrocyte
+erythromycin
+escadrille
+escalade
+escalader
+escalades
+escalate
+escalated
+escalates
+escalating
+escalation
+escalator
+escalators
+escalatory
+escallop
+escallops
+escalope
+escapable
+escapade
+escapades
+escapade's
+escape
+escaped
+escapee
+escapees
+escapee's
+escapement
+escapements
+escaper
+escapes
+escaping
+escapism
+escapist
+escapologist
+escapology
+escargot
+escarp
+escarpment
+escarpments
+escarpment's
+eschatology
+escheat
+eschew
+eschewal
+eschewed
+eschewing
+eschews
+escort
+escorted
+escorting
+escorts
+escritoire
+escrow
+escudo
+esculent
+escutcheon
+escutcheons
+esker
+esoteric
+esoterically
+esotericism
+espadrille
+espalier
+esparto
+especial
+especially
+espial
+espied
+espies
+espionage
+esplanade
+espousal
+espousals
+espouse
+espoused
+espouser
+espouses
+espousing
+espresso
+espressos
+esprit
+espy
+espying
+esquire
+esquires
+essay
+essayed
+essayer
+essayist
+essayistic
+essayists
+essays
+essence
+essences
+essence's
+essential
+essentialism
+essentialist
+essentiality
+essentially
+essentialness
+essentials
+essonite
+establish
+established
+establisher
+establishes
+establishing
+establishment
+establishmentarian
+establishmentarianism
+establishments
+establishment's
+estancia
+estate
+estates
+estate's
+esteem
+esteemed
+esteeming
+esteems
+ester
+esterase
+esters
+estimable
+estimableness
+estimate
+estimated
+estimates
+estimating
+estimation
+estimations
+estimative
+estimator
+estimators
+estipulate
+estragon
+estrange
+estranged
+estrangement
+estranger
+estranges
+estranging
+estrogenic
+estrogenically
+estrum
+estuarial
+estuaries
+estuarine
+estuary
+esurience
+esuriency
+esurient
+esuriently
+et
+etalon
+etas
+etc
+etcetera
+etceteras
+etch
+etched
+etcher
+etches
+etching
+eternal
+eternalise
+eternalised
+eternalises
+eternalising
+eternally
+eternalness
+eterne
+eternise
+eternised
+eternises
+eternising
+eternities
+eternity
+etesian
+ethane
+ethanol
+ether
+ethereal
+etherealise
+etherealised
+etherealises
+etherealising
+ethereality
+ethereally
+etherealness
+etherify
+etherisation
+etherise
+etherised
+etheriser
+etherisers
+etherises
+etherising
+ethers
+ether's
+ethic
+ethical
+ethicality
+ethically
+ethicalness
+ethicise
+ethicised
+ethicises
+ethicising
+ethicist
+ethicists
+ethics
+ethnic
+ethnical
+ethnically
+ethnicities
+ethnicity
+ethnocentric
+ethnocentrically
+ethnocentricity
+ethnocentrism
+ethnogeny
+ethnographer
+ethnographers
+ethnographic
+ethnographical
+ethnographically
+ethnography
+ethnologic
+ethnological
+ethnologically
+ethnologist
+ethnology
+ethnomusicology
+ethological
+ethos
+ethyl
+ethylene
+ethylic
+etiolate
+etiquette
+etude
+etudes
+etui
+etymological
+etymologically
+etymologies
+etymologise
+etymologised
+etymologises
+etymologising
+etymologist
+etymologists
+etymology
+etymon
+eucalyptol
+eucalyptus
+euchre
+eudemon
+eudemonia
+eudemonics
+eudiometer
+eugenic
+eugenically
+eugenicist
+eugenics
+euglena
+euhemerise
+euhemerism
+euhemerist
+euhemeristic
+euhemeristically
+eukaryote
+eukaryotic
+eulachon
+eulogia
+eulogies
+eulogise
+eulogised
+eulogiser
+eulogisers
+eulogises
+eulogising
+eulogist
+eulogistic
+eulogistically
+eulogium
+eulogy
+eunuch
+eunuchs
+eupatrid
+eupepsia
+euphemise
+euphemised
+euphemises
+euphemising
+euphemism
+euphemisms
+euphemism's
+euphemist
+euphemistic
+euphemistically
+euphonic
+euphonically
+euphonious
+euphoniously
+euphoniousness
+euphonise
+euphonised
+euphonises
+euphonising
+euphonium
+euphony
+euphorbia
+euphorbiaceous
+euphoria
+euphoric
+euphorically
+euphrasy
+euphuism
+euphuist
+euphuistic
+euphuistically
+euplastic
+eupnoea
+eureka
+eurhythmic
+eurhythmics
+eurhythmy
+euripus
+europium
+eurypterid
+eusporangiate
+eutectic
+eutectoid
+euthanasia
+euthenics
+euxenite
+eV
+evacuate
+evacuated
+evacuates
+evacuating
+evacuation
+evacuations
+evacuative
+evacuator
+evacuee
+evacuees
+evadable
+evade
+evaded
+evader
+evades
+evading
+evaluate
+evaluated
+evaluates
+evaluating
+evaluation
+evaluations
+evaluative
+evaluator
+evaluators
+evaluator's
+evanesce
+evanesced
+evanescence
+evanescent
+evanesces
+evanescing
+evangel
+evangelic
+evangelical
+evangelicalism
+evangelically
+evangelisation
+evangelisations
+evangelisation's
+evangelise
+evangelised
+evangeliser
+evangelisers
+evangelises
+evangelising
+evangelism
+evangelist
+evangelistic
+evangelistically
+evangelists
+evanish
+evanishment
+evaporable
+evaporate
+evaporated
+evaporates
+evaporating
+evaporation
+evaporations
+evaporative
+evaporator
+evaporators
+evasion
+evasions
+evasive
+evasively
+evasiveness
+eve
+evection
+even
+evened
+evener
+evenfall
+evening
+evenings
+evening's
+evenly
+evenness
+evens
+evensong
+event
+eventful
+eventfully
+eventfulness
+eventide
+eventides
+eventless
+events
+event's
+eventual
+eventualities
+eventuality
+eventually
+eventuate
+eventuated
+eventuates
+eventuating
+ever
+evergreen
+everlasting
+everlastingly
+everlastingness
+evermore
+eversible
+every
+everybody
+everybody's
+everyday
+everydayness
+everyman
+everyone
+everyone's
+everyplace
+everything
+everywhere
+eves
+evict
+evicted
+evictee
+evictees
+evicting
+eviction
+evictions
+eviction's
+evictor
+evictors
+evicts
+evidence
+evidenced
+evidences
+evidencing
+evident
+evidential
+evidentially
+evidentiary
+evidently
+evil
+evildoer
+evildoers
+evildoing
+eviller
+evillest
+evilly
+evilness
+evils
+evince
+evinced
+evinces
+evincible
+evincing
+eviscerate
+eviscerated
+eviscerates
+eviscerating
+evisceration
+evitable
+evocable
+evocate
+evocation
+evocations
+evocative
+evocatively
+evocativeness
+evoke
+evoked
+evokes
+evoking
+evolutes
+evolute's
+evolution
+evolutionarily
+evolutionary
+evolutionism
+evolutionist
+evolutionists
+evolutions
+evolution's
+evolvable
+evolve
+evolved
+evolvement
+evolves
+evolving
+evulsions
+ewe
+ewer
+ewes
+ewe's
+ex
+exacerbate
+exacerbated
+exacerbates
+exacerbating
+exacerbation
+exacerbations
+exact
+exacta
+exactable
+exacted
+exacter
+exacting
+exactingly
+exactingness
+exaction
+exactions
+exaction's
+exactitude
+exactly
+exactness
+exactor
+exactors
+exacts
+exaggerate
+exaggerated
+exaggeratedly
+exaggerates
+exaggerating
+exaggeration
+exaggerations
+exaggerative
+exaggerator
+exaggerators
+exalt
+exaltation
+exaltations
+exalted
+exaltedly
+exalter
+exalters
+exalting
+exalts
+exam
+examinable
+examinant
+examinants
+examination
+examinational
+examinations
+examination's
+examine
+examined
+examinee
+examinees
+examiner
+examiners
+examines
+examining
+example
+exampled
+examples
+example's
+exampling
+exams
+exam's
+exanimate
+exanthema
+exarchate
+exasperate
+exasperated
+exasperatedly
+exasperates
+exasperating
+exasperatingly
+exasperation
+exasperations
+excaudate
+excavate
+excavated
+excavates
+excavating
+excavation
+excavations
+excavator
+excavators
+exceed
+exceeded
+exceeder
+exceeding
+exceedingly
+exceeds
+excel
+excelled
+excellence
+excellences
+excellent
+excellently
+excelling
+excels
+excelsior
+except
+excepted
+excepting
+exception
+exceptionable
+exceptionably
+exceptional
+exceptionality
+exceptionally
+exceptionalness
+exceptions
+exception's
+exceptive
+excepts
+excerpt
+excerpted
+excerpter
+excerption
+excerptions
+excerptor
+excerptors
+excerpts
+excess
+excesses
+excessive
+excessively
+excessiveness
+exchange
+exchangeability
+exchangeable
+exchanged
+exchanger
+exchangers
+exchanges
+exchanging
+exchequer
+exchequers
+exchequer's
+excide
+excided
+excides
+exciding
+excisable
+excise
+excised
+excises
+excising
+excision
+excisions
+excitability
+excitable
+excitableness
+excitant
+excitants
+excitation
+excitations
+excitation's
+excitatory
+excite
+excited
+excitedly
+excitement
+exciter
+excites
+exciting
+excitingly
+exclaim
+exclaimed
+exclaimer
+exclaimers
+exclaiming
+exclaims
+exclamation
+exclamations
+exclamation's
+exclamatory
+exclave
+exclaves
+excludability
+excludable
+exclude
+excluded
+excluder
+excludes
+excludible
+excluding
+exclusion
+exclusionary
+exclusionist
+exclusionists
+exclusions
+exclusive
+exclusively
+exclusiveness
+exclusivity
+excogitate
+excogitation
+excogitative
+excommunicate
+excommunicated
+excommunicates
+excommunicating
+excommunication
+excommunicative
+excommunicator
+excoriate
+excoriated
+excoriates
+excoriating
+excoriation
+excoriations
+excrement
+excremental
+excrements
+excrement's
+excrescence
+excrescences
+excrescency
+excrescent
+excreta
+excretal
+excrete
+excreted
+excretes
+excreting
+excretion
+excretions
+excretory
+excruciate
+excruciated
+excruciates
+excruciating
+excruciatingly
+excruciation
+exculpate
+exculpated
+exculpates
+exculpating
+exculpation
+exculpations
+exculpatory
+excursion
+excursionist
+excursionists
+excursions
+excursion's
+excursive
+excursively
+excursiveness
+excursus
+excursuses
+excusable
+excusableness
+excusably
+excusatory
+excuse
+excused
+excuser
+excuses
+excusing
+exec
+execrable
+execrableness
+execrably
+execrate
+execrated
+execrates
+execrating
+execration
+execrative
+execrator
+execrators
+executable
+executables
+executable's
+execute
+executed
+executer
+executers
+executes
+executing
+execution
+executioner
+executions
+executive
+executives
+executive's
+executor
+executorial
+executors
+executor's
+executrices
+executrix
+executrixes
+exedra
+exegesis
+exegete
+exegetic
+exegetical
+exegetically
+exegetics
+exemplar
+exemplarily
+exemplariness
+exemplarity
+exemplars
+exemplary
+exemplification
+exemplified
+exemplifier
+exemplifiers
+exemplifies
+exemplify
+exemplifying
+exemplum
+exempt
+exempted
+exempting
+exemption
+exemptions
+exempts
+exenterate
+exenterated
+exenterates
+exenterating
+exequatur
+exercisable
+exercise
+exercised
+exerciser
+exercisers
+exercises
+exercising
+exercitation
+exergue
+exert
+exerted
+exerting
+exertion
+exertions
+exertion's
+exerts
+exeunt
+exfoliate
+exfoliated
+exfoliates
+exfoliating
+exfoliation
+exhalant
+exhalants
+exhalation
+exhalations
+exhale
+exhaled
+exhalent
+exhalents
+exhales
+exhaling
+exhaust
+exhausted
+exhaustedly
+exhauster
+exhaustibility
+exhaustible
+exhausting
+exhaustingly
+exhaustion
+exhaustive
+exhaustively
+exhaustiveness
+exhaustless
+exhaustlessly
+exhaustlessness
+exhausts
+exhibit
+exhibited
+exhibiting
+exhibition
+exhibitioner
+exhibitionism
+exhibitionist
+exhibitionistic
+exhibitions
+exhibition's
+exhibitive
+exhibitor
+exhibitors
+exhibitor's
+exhibitory
+exhibits
+exhilarant
+exhilarate
+exhilarated
+exhilarates
+exhilarating
+exhilaratingly
+exhilaration
+exhilarative
+exhort
+exhortation
+exhortations
+exhortation's
+exhortative
+exhortatory
+exhorted
+exhorter
+exhorting
+exhorts
+exhumation
+exhumations
+exhume
+exhumed
+exhumer
+exhumes
+exhuming
+exigencies
+exigency
+exigent
+exigently
+exiguity
+exiguous
+exiguously
+exiguousness
+exile
+exiled
+exiles
+exilic
+exiling
+exist
+existed
+existence
+existences
+existent
+existential
+existentialism
+existentialist
+existentialistic
+existentialistically
+existentialists
+existentialist's
+existentially
+existing
+exists
+exit
+exited
+exiting
+exits
+exobiological
+exobiology
+exocentric
+exocrine
+exodus
+exogamic
+exogamous
+exogamy
+exogenous
+exogenously
+exonerate
+exonerated
+exonerates
+exonerating
+exoneration
+exonerative
+exorable
+exorbitance
+exorbitances
+exorbitant
+exorbitantly
+exorcise
+exorcised
+exorcises
+exorcising
+exorcism
+exorcist
+exordial
+exordium
+exoskeleton
+exoskeletons
+exosphere
+exospheric
+exoteric
+exothermal
+exothermic
+exothermically
+exotic
+exotica
+exotically
+exoticism
+exoticness
+expand
+expandable
+expanded
+expander
+expanders
+expander's
+expanding
+expands
+expanse
+expanses
+expansibility
+expansible
+expansion
+expansionary
+expansionism
+expansionist
+expansionistic
+expansions
+expansive
+expansively
+expansiveness
+expatiate
+expatiated
+expatiates
+expatiating
+expatiation
+expatriate
+expatriated
+expatriates
+expatriating
+expatriation
+expect
+expectable
+expectably
+expectance
+expectancies
+expectancy
+expectant
+expectantly
+expectation
+expectations
+expectation's
+expectative
+expected
+expectedly
+expectedness
+expecting
+expectorant
+expectorate
+expectoration
+expects
+expedience
+expediency
+expedient
+expediential
+expediently
+expedite
+expedited
+expediter
+expedites
+expediting
+expedition
+expeditionary
+expeditions
+expedition's
+expeditious
+expeditiously
+expeditiousness
+expeditor
+expel
+expellable
+expellant
+expelled
+expellee
+expeller
+expellers
+expelling
+expels
+expend
+expendability
+expendable
+expended
+expender
+expending
+expenditure
+expenditures
+expenditure's
+expends
+expense
+expensed
+expenses
+expensing
+expensive
+expensively
+expensiveness
+experience
+experienced
+experiences
+experiencing
+experiential
+experientialism
+experientially
+experiment
+experimental
+experimentalism
+experimentalist
+experimentalists
+experimentalist's
+experimentally
+experimentation
+experimentations
+experimentation's
+experimented
+experimenter
+experimenters
+experimenting
+experiments
+expert
+expertise
+expertly
+expertness
+experts
+expiable
+expiate
+expiated
+expiates
+expiating
+expiation
+expiator
+expiatory
+expiration
+expirations
+expiration's
+expiratory
+expire
+expired
+expires
+expiring
+expiry
+explain
+explainable
+explained
+explainer
+explainers
+explaining
+explains
+explanation
+explanations
+explanation's
+explanative
+explanatively
+explanatorily
+explanatory
+explants
+expletive
+expletives
+expletory
+explicable
+explicably
+explicate
+explicated
+explicates
+explicating
+explication
+explicative
+explicatively
+explicator
+explicatory
+explicit
+explicitly
+explicitness
+explode
+exploded
+exploder
+explodes
+exploding
+exploit
+exploitable
+exploitation
+exploitations
+exploitation's
+exploitative
+exploitatively
+exploited
+exploiter
+exploiters
+exploiting
+exploitive
+exploits
+exploration
+explorations
+exploration's
+explorative
+exploratory
+explore
+explored
+explorer
+explorers
+explores
+exploring
+explosion
+explosions
+explosion's
+explosive
+explosively
+explosiveness
+explosives
+expo
+exponent
+exponential
+exponentially
+exponentials
+exponentiation
+exponentiations
+exponentiation's
+exponents
+exponent's
+exponible
+export
+exportability
+exportable
+exportation
+exported
+exporter
+exporters
+exporting
+exports
+expos
+expose
+exposed
+exposes
+exposing
+exposit
+exposited
+exposition
+expositional
+expositions
+exposition's
+expositor
+expository
+expostulate
+expostulation
+expostulatory
+exposure
+exposures
+exposure's
+expound
+expounded
+expounder
+expounding
+expounds
+express
+expressage
+expressed
+expresser
+expresses
+expressible
+expressing
+expression
+expressional
+expressionism
+expressionist
+expressionistic
+expressionistically
+expressionists
+expressionless
+expressionlessly
+expressions
+expression's
+expressive
+expressively
+expressiveness
+expressivity
+expressly
+expressway
+expressways
+expropriate
+expropriated
+expropriates
+expropriating
+expropriation
+expropriations
+expropriator
+expropriators
+expulsion
+expulsive
+expunction
+expunge
+expunged
+expunger
+expunges
+expunging
+expurgate
+expurgated
+expurgates
+expurgating
+expurgation
+expurgator
+expurgatorial
+expurgatory
+exquisite
+exquisitely
+exquisiteness
+exscind
+exsiccate
+exsiccation
+ext
+extant
+extemporal
+extemporaneity
+extemporaneous
+extemporaneously
+extemporaneousness
+extemporarily
+extemporary
+extempore
+extemporisation
+extemporisations
+extemporisation's
+extemporise
+extemporised
+extemporiser
+extemporisers
+extemporises
+extemporising
+extend
+extendable
+extended
+extendedly
+extendedness
+extender
+extendibility
+extendible
+extending
+extends
+extensibility
+extensible
+extensile
+extension
+extensional
+extensionality
+extensionally
+extensions
+extension's
+extensity
+extensive
+extensively
+extensiveness
+extensometer
+extensometers
+extensometer's
+extensor
+extent
+extents
+extent's
+extenuate
+extenuated
+extenuating
+extenuation
+extenuator
+extenuatory
+exterior
+exteriorisation
+exteriorisations
+exteriorisation's
+exteriorise
+exteriorised
+exteriorises
+exteriorising
+exteriority
+exteriorly
+exteriors
+exterior's
+exterminate
+exterminated
+exterminates
+exterminating
+extermination
+exterminations
+exterminator
+exterminators
+exterminator's
+exterminatory
+extern
+external
+externalisation
+externalisations
+externalisation's
+externalise
+externalised
+externalises
+externalising
+externalism
+externalities
+externality
+externally
+externals
+externship
+exterritorial
+extinct
+extinction
+extinctive
+extinguish
+extinguishable
+extinguished
+extinguisher
+extinguishers
+extinguishes
+extinguishing
+extinguishment
+extirpate
+extirpated
+extirpating
+extirpation
+extirpative
+extol
+extoll
+extolled
+extoller
+extolling
+extolment
+extols
+extort
+extorted
+extorter
+extorting
+extortion
+extortionate
+extortionately
+extortionist
+extortionists
+extortionist's
+extortive
+extorts
+extra
+extracanonical
+extracorporeal
+extract
+extractability
+extractable
+extracted
+extractible
+extracting
+extraction
+extractions
+extraction's
+extractive
+extractor
+extractors
+extractor's
+extracts
+extracurricular
+extraditable
+extradite
+extradites
+extradition
+extrados
+extradoses
+extragalactic
+extrajudicial
+extralegal
+extramarital
+extramundane
+extramural
+extramurally
+extraneous
+extraneously
+extraneousness
+extraordinarily
+extraordinariness
+extraordinary
+extrapolate
+extrapolated
+extrapolates
+extrapolating
+extrapolation
+extrapolations
+extrapolative
+extrapolator
+extras
+extrasensory
+extraterrestrial
+extraterritorial
+extraterritoriality
+extravagance
+extravagancy
+extravagant
+extravagantly
+extravaganza
+extravaganzas
+extravagate
+extravehicular
+extraversion
+extravert
+extraverted
+extreme
+extremely
+extremeness
+extremer
+extremes
+extremis
+extremism
+extremist
+extremists
+extremist's
+extremities
+extremity
+extremity's
+extricable
+extricate
+extricated
+extricates
+extricating
+extrication
+extrinsic
+extrinsically
+extrorsely
+extroversion
+extrovert
+extroverted
+extroverts
+extrude
+extruded
+extruder
+extrudes
+extruding
+extrusion
+extrusive
+exuberance
+exuberant
+exuberantly
+exuberate
+exudation
+exude
+exuded
+exudes
+exuding
+exult
+exultance
+exultancy
+exultant
+exultantly
+exultation
+exulted
+exulting
+exultingly
+exults
+exurban
+exurbanite
+exurbia
+exuviate
+eye
+eyeball
+eyeballs
+eyebath
+eyebolt
+eyebright
+eyebrow
+eyebrows
+eyebrow's
+eyecup
+eyed
+eyedropper
+eyeful
+eyeglass
+eyeglasses
+eyehole
+eyehook
+eyeing
+eyelash
+eyelashes
+eyeless
+eyelet
+eyeleteer
+eyelets
+eyelid
+eyelids
+eyelid's
+eyelike
+eyeliner
+eyepiece
+eyepieces
+eyepiece's
+eyes
+eyeshade
+eyeshot
+eyesight
+eyesore
+eyesores
+eyesore's
+eyespot
+eyestalk
+eyestrain
+eyetie
+eyewash
+eyewink
+eyewitness
+eyewitnesses
+eyewitness's
+eying
+eyrie
+eyrir
+f's 
+fab
+fable
+fabled
+fabler
+fables
+fabliau
+fabling
+fabric
+fabricant
+fabricate
+fabricated
+fabricates
+fabricating
+fabrication
+fabrications
+fabricator
+fabricators
+fabrics
+fabric's
+fabulist
+fabulous
+fabulously
+fabulousness
+facade
+facades
+face
+faced
+facedown
+faceless
+facelessness
+faceplate
+facer
+faces
+facet
+faceted
+facetiae
+faceting
+facetious
+facetiously
+facetiousness
+facets
+facetted
+facia
+facial
+facially
+facile
+facilely
+facileness
+facilitate
+facilitated
+facilitates
+facilitating
+facilitation
+facilitative
+facilitator
+facilitators
+facilities
+facility
+facility's
+facing
+facings
+facsimile
+facsimiled
+facsimiles
+facsimile's
+fact
+faction
+factional
+factionalism
+factions
+faction's
+factious
+factiously
+factiousness
+factitious
+factitiously
+factitiousness
+factitive
+factitively
+facto
+factor
+factorable
+factored
+factorial
+factories
+factoring
+factorings
+factorisation
+factorisations
+factorisation's
+factorise
+factorised
+factorises
+factorising
+factors
+factory
+factory's
+factotum
+facts
+fact's
+factual
+factualism
+factualist
+factualists
+factuality
+factually
+factualness
+facture
+factures
+faculae
+facultative
+faculties
+faculty
+faculty's
+fad
+faddish
+faddishness
+faddism
+faddist
+faddists
+fade
+faded
+fadeless
+fadelessly
+fadeout
+fader
+faders
+fades
+fading
+fads
+faecal
+faeces
+faerie
+fag
+fagging
+faggot
+faggoting
+faggots
+fags
+faience
+fail
+failed
+failing
+failingly
+failings
+faille
+fails
+failsafe
+failure
+failures
+failure's
+fain
+faint
+fainted
+fainter
+faintest
+fainthearted
+faintheartedness
+fainting
+faintish
+faintly
+faintness
+faints
+fair
+faired
+fairer
+fairest
+fairgoer
+fairgoers
+fairground
+fairgrounds
+fairies
+fairing
+fairish
+fairlead
+fairleader
+fairly
+fairness
+fairs
+fairway
+fairways
+fairy
+fairyland
+fairylike
+fairy's
+faith
+faithful
+faithfully
+faithfulness
+faithless
+faithlessly
+faithlessness
+faiths
+fake
+faked
+faker
+fakery
+fakes
+faking
+fakir
+falafel
+falcate
+falchion
+falcon
+falconer
+falconine
+falconry
+falcons
+falderal
+fall
+fallacies
+fallacious
+fallaciously
+fallaciousness
+fallacy
+fallacy's
+fallback
+fallen
+faller
+fallfish
+fallibility
+fallible
+fallibly
+falling
+falloff
+fallout
+fallouts
+fallow
+fallowness
+falls
+false
+falsehood
+falsehoods
+falsehood's
+falsely
+falseness
+falser
+falsest
+falsetto
+falsettos
+falsies
+falsification
+falsified
+falsifier
+falsifies
+falsify
+falsifying
+falsity
+faltboat
+falter
+faltered
+falterer
+faltering
+falteringly
+falters
+fame
+famed
+fames
+familial
+familiar
+familiarisation
+familiarisations
+familiarisation's
+familiarise
+familiarised
+familiarises
+familiarising
+familiarities
+familiarity
+familiarly
+familiars
+families
+family
+family's
+famine
+famines
+famine's
+faming
+famish
+famished
+famishes
+famishing
+famishment
+famous
+famously
+famousness
+fan
+fanatic
+fanatical
+fanatically
+fanaticise
+fanaticised
+fanaticises
+fanaticising
+fanaticism
+fanatics
+fanatic's
+fancied
+fancier
+fanciers
+fancier's
+fancies
+fanciest
+fanciful
+fancifully
+fancifulness
+fancily
+fanciness
+fancy
+fancying
+fancywork
+fandangle
+fandango
+fane
+fanfare
+fanfaronade
+fanfold
+fang
+fanged
+fangled
+fangs
+fang's
+fanlight
+fanlike
+fanned
+fanner
+fanning
+fanon
+fans
+fan's
+fantail
+fantasia
+fantasies
+fantasise
+fantasised
+fantasises
+fantasising
+fantasist
+fantast
+fantastic
+fantastical
+fantasticality
+fantastically
+fantasticalness
+fantasy
+fantasy's
+fantod
+fanwise
+far
+farad
+faradic
+faradisation
+faradisations
+faradisation's
+faradise
+faradised
+faradiser
+faradisers
+faradises
+faradising
+faradism
+farandole
+faraway
+farce
+farces
+farce's
+farceur
+farcical
+farcicality
+farcically
+farcing
+fare
+fared
+farer
+fares
+farewell
+farewells
+farfetched
+farfetchedness
+farina
+farinaceous
+faring
+farinose
+farm
+farmed
+farmer
+farmers
+farmer's
+farmhand
+farmhands
+farmhouse
+farmhouses
+farmhouse's
+farming
+farmland
+farmlands
+farms
+farmstead
+farmyard
+farmyards
+farmyard's
+faro
+farrier
+farriery
+farrow
+farseeing
+farsighted
+farsightedness
+fart
+farther
+farthermost
+farthest
+farthing
+fasces
+fascia
+fascicle
+fascicled
+fascicles
+fascicular
+fasciculate
+fasciculation
+fascicule
+fascinate
+fascinated
+fascinates
+fascinating
+fascinatingly
+fascination
+fascinations
+fascinator
+fascinators
+fascine
+fascism
+fascist
+fascistic
+fascistically
+fascists
+fashion
+fashionable
+fashionableness
+fashionably
+fashioned
+fashioner
+fashioners
+fashioning
+fashionmonger
+fashions
+fast
+fastback
+fastball
+fastballs
+fastball's
+fasted
+fasten
+fastened
+fastener
+fasteners
+fastening
+fastenings
+fastens
+faster
+fastest
+fastidious
+fastidiously
+fastidiousness
+fasting
+fastness
+fasts
+fat
+fatal
+fatalism
+fatalist
+fatalistic
+fatalistically
+fatalists
+fatalities
+fatality
+fatality's
+fatally
+fatback
+fate
+fated
+fateful
+fatefully
+fatefulness
+fates
+fathead
+fatheaded
+father
+fathered
+fatherhood
+fathering
+fatherland
+fatherless
+fatherliness
+fatherly
+fathers
+father's
+fathom
+fathomable
+fathomed
+fathoming
+fathomless
+fathomlessly
+fathoms
+fatidic
+fatigability
+fatigable
+fatigue
+fatigued
+fatigues
+fatiguing
+fating
+fatling
+fatly
+fatness
+fats
+fatso
+fatted
+fatten
+fattened
+fattener
+fatteners
+fattening
+fattens
+fatter
+fattest
+fattier
+fatties
+fattiness
+fatting
+fattish
+fatty
+fatuity
+fatuous
+fatuously
+fatuousness
+faucal
+faucet
+faucets
+faugh
+fault
+faulted
+faultfinder
+faultfinding
+faultier
+faultiness
+faulting
+faultless
+faultlessly
+faultlessness
+faults
+faulty
+faun
+fauna
+faunal
+faunally
+fauteuil
+fauve
+fauvism
+fauvist
+faux
+favonian
+favour
+favourable
+favourableness
+favourably
+favoured
+favourer
+favourers
+favourer's
+favouring
+favouringly
+favourite
+favourites
+favourite's
+favouritism
+favouritisms
+favouritism's
+favourless
+favours
+fawn
+fawned
+fawner
+fawning
+fawningly
+fawns
+fax
+faxes
+fax's
+faze
+fazed
+fazes
+fazing
+fealty
+fear
+feared
+fearer
+fearful
+fearfully
+fearfulness
+fearing
+fearless
+fearlessly
+fearlessness
+fears
+fearsome
+fearsomely
+fearsomeness
+feasibility
+feasible
+feasibleness
+feasibly
+feast
+feasted
+feaster
+feasting
+feasts
+feat
+feather
+featherbed
+featherbedding
+featherbrain
+featherbrained
+feathered
+featheredge
+featherhead
+featherheaded
+feathering
+featherless
+feathers
+featherstitch
+featherweight
+feathery
+featly
+feats
+feat's
+feature
+featured
+featureless
+features
+featuring
+febricity
+febrifuge
+febrile
+feckless
+fecklessly
+fecklessness
+feculence
+feculent
+fecund
+fecundity
+fed
+federal
+federalisation
+federalisations
+federalisation's
+federalise
+federalised
+federalises
+federalising
+federalism
+federalist
+federalists
+federally
+federals
+federate
+federated
+federates
+federating
+federation
+federations
+federative
+federatively
+fedora
+feds
+fee
+feeble
+feebleminded
+feeblemindedly
+feeblemindedness
+feebleness
+feebler
+feeblest
+feebly
+feed
+feedback
+feedbacks
+feedbag
+feeder
+feeders
+feeding
+feedings
+feedlot
+feeds
+feedstock
+feedstuff
+feeing
+feel
+feeler
+feelers
+feeling
+feelingly
+feelings
+feels
+fees
+feet
+feign
+feigned
+feigner
+feigning
+feigns
+feint
+feinted
+feinting
+feints
+feisty
+feldspar
+felicific
+felicitate
+felicitated
+felicitates
+felicitating
+felicitation
+felicitator
+felicities
+felicitous
+felicitously
+felicitousness
+felicity
+feline
+felinely
+felines
+felinity
+fell
+fellable
+fellah
+fellatio
+felled
+feller
+fellers
+felling
+fellmonger
+fellness
+felloe
+fellow
+fellowman
+fellows
+fellow's
+fellowship
+fellowships
+fellowship's
+fells
+felon
+felonious
+feloniously
+feloniousness
+felonry
+felons
+felony
+felsitic
+felt
+felted
+felting
+felts
+felucca
+female
+femaleness
+females
+female's
+feminine
+femininely
+feminineness
+femininity
+feminisation
+feminisations
+feminise
+feminised
+feminises
+feminising
+feminism
+feminist
+feministic
+feminists
+feminist's
+femme
+femmes
+femoral
+femur
+femurs
+femur's
+fen
+fence
+fenced
+fenceless
+fencelessness
+fencepost
+fencer
+fencers
+fences
+fencing
+fend
+fender
+fenders
+fenestrate
+fenestrated
+fenestration
+fennec
+fennel
+fennelflower
+fenny
+fenugreek
+feoff
+feral
+ferbam
+feretory
+ferial
+ferity
+ferment
+fermentable
+fermentation
+fermentations
+fermentation's
+fermentative
+fermented
+fermenting
+ferments
+fermions
+fermion's
+fermium
+fern
+fernery
+fernlike
+ferns
+fern's
+ferny
+ferocious
+ferociously
+ferociousness
+ferocity
+ferrate
+ferret
+ferreted
+ferreter
+ferreting
+ferrets
+ferrety
+ferriage
+ferric
+ferried
+ferries
+ferriferous
+ferrite
+ferrochromium
+ferroelectric
+ferromagnesian
+ferromagnetic
+ferromagnetism
+ferromanganese
+ferrosilicon
+ferrotype
+ferrous
+ferruginous
+ferrule
+ferry
+ferryboat
+ferrying
+ferryman
+fertile
+fertilely
+fertileness
+fertilisable
+fertilisation
+fertilisations
+fertilisation's
+fertilise
+fertilised
+fertiliser
+fertilisers
+fertilises
+fertilising
+fertilities
+fertility
+ferula
+ferule
+fervency
+fervent
+fervently
+fervid
+fervidly
+fervidness
+fervour
+fervours
+fervour's
+fescue
+fess
+fest
+festal
+fester
+festered
+festering
+festers
+festinate
+festival
+festivals
+festival's
+festive
+festively
+festiveness
+festivities
+festivity
+festoon
+festoonery
+festoons
+festschrift
+feta
+fetch
+fetched
+fetcher
+fetches
+fetching
+fetchingly
+fete
+feted
+fetes
+feticide
+fetish
+fetishes
+fetishism
+fetishist
+fetlock
+fetlocks
+fetor
+fetter
+fettered
+fettering
+fetters
+fettle
+fettled
+fettles
+fettling
+fettuccine
+feud
+feudal
+feudalisation
+feudalisations
+feudalisation's
+feudalise
+feudalised
+feudalises
+feudalising
+feudalism
+feudalist
+feudalistic
+feudality
+feudally
+feudatory
+feudist
+feuds
+feud's
+fever
+fevered
+feverfew
+fevering
+feverish
+feverishly
+feverishness
+feverous
+feverously
+fevers
+feverwort
+few
+fewer
+fewest
+fewness
+fey
+feyness
+fez
+fezzes
+fiacre
+fianc�
+fianc�e
+fiasco
+fiat
+fiats
+fib
+fibber
+fibbing
+fibre
+fibreboard
+fibred
+fibrefill
+fibreglass
+fibreless
+fibres
+fibre's
+fibril
+fibrillate
+fibrillated
+fibrillates
+fibrillation
+fibrilliform
+fibrillose
+fibrils
+fibrin
+fibrinogen
+fibro
+fibroblast
+fibrocement
+fibroid
+fibroin
+fibrosis
+fibrositis
+fibrous
+fibrously
+fibula
+fibular
+fiche
+fickle
+fickleness
+fictile
+fiction
+fictional
+fictionalisation
+fictionalise
+fictionalised
+fictionalises
+fictionalising
+fictionally
+fictionist
+fictions
+fiction's
+fictitious
+fictitiously
+fictitiousness
+fictive
+fictively
+fid
+fiddle
+fiddled
+fiddlehead
+fiddler
+fiddles
+fiddlestick
+fiddlesticks
+fiddlewood
+fiddling
+fide
+fideism
+fidelity
+fidget
+fidgeted
+fidgetiness
+fidgeting
+fidgets
+fidgety
+fiducially
+fiduciary
+fie
+fief
+fiefdom
+field
+fielded
+fielder
+fielders
+fieldfare
+fielding
+fieldpiece
+fields
+fieldsman
+fieldstone
+fieldstrip
+fieldwork
+fieldworker
+fieldworkers
+fiend
+fiendish
+fiendishly
+fiendishness
+fiends
+fierce
+fiercely
+fierceness
+fiercer
+fiercest
+fierily
+fieriness
+fiery
+fiesta
+fife
+fifteen
+fifteens
+fifteenth
+fifth
+fifthly
+fifths
+fifties
+fiftieth
+fifty
+fig
+fight
+fighter
+fighters
+fighting
+fights
+figment
+figs
+fig's
+figural
+figurant
+figurate
+figuration
+figurations
+figurative
+figuratively
+figurativeness
+figure
+figured
+figurehead
+figurer
+figurers
+figures
+figurine
+figurines
+figuring
+figwort
+filament
+filamentary
+filamentous
+filaments
+filament's
+filarial
+filature
+filbert
+filberts
+filch
+filched
+filches
+file
+filed
+filefish
+filename
+filenames
+filename's
+filer
+filers
+files
+file's
+filet
+filets
+filial
+filially
+filibuster
+filibustered
+filibusterer
+filibustering
+filibusters
+filicide
+filigree
+filigreed
+filigreeing
+filing
+filings
+fill
+filled
+filler
+fillers
+fillet
+filleted
+filleting
+fillets
+fillies
+filling
+fillings
+fillip
+fillips
+fills
+filly
+film
+filmcard
+filmdom
+filmed
+filmic
+filmier
+filmily
+filminess
+filming
+filmmaker
+filmmakers
+filmmaking
+films
+filmsetting
+filmstrip
+filmstrips
+filmy
+filose
+filter
+filterability
+filterable
+filtered
+filterer
+filtering
+filters
+filter's
+filth
+filthier
+filthiest
+filthily
+filthiness
+filthy
+filtrate
+filtrated
+filtrates
+filtrating
+filtration
+filtration's
+fimbriation
+fin
+finable
+finagle
+finagled
+finagler
+finagles
+finagling
+final
+finale
+finales
+finale's
+finalisation
+finalisations
+finalise
+finalised
+finalises
+finalising
+finalism
+finalist
+finalists
+finality
+finally
+finals
+finance
+financed
+finances
+financial
+financially
+financier
+financiers
+financier's
+financing
+finback
+finch
+find
+findable
+finder
+finders
+finding
+findings
+finds
+fine
+fineable
+fined
+finely
+fineness
+finer
+finery
+fines
+finesse
+finessed
+finessing
+finest
+finger
+fingerboard
+fingerbreadth
+fingered
+fingerer
+fingering
+fingerings
+fingerling
+fingernail
+fingernails
+fingerpost
+fingerprint
+fingerprinted
+fingerprinting
+fingerprints
+fingers
+fingerstall
+fingerstalls
+fingertip
+fingertips
+finial
+finical
+finically
+finicalness
+finicky
+fining
+finis
+finish
+finished
+finisher
+finishers
+finishes
+finishing
+finite
+finitely
+finiteness
+finites
+finitude
+fink
+finlike
+finned
+finny
+fins
+fin's
+fiord
+fipple
+fir
+fire
+firearm
+firearms
+firearm's
+fireback
+fireball
+fireballs
+firebird
+fireboat
+firebomb
+firebox
+firebrand
+firebrat
+firebreak
+firebreaks
+firebrick
+firebug
+fireclay
+firecracker
+firecrackers
+fired
+firedamp
+firedog
+firedrake
+fireflies
+firefly
+firefly's
+fireguard
+firehouse
+firehouses
+fireless
+firelight
+firelock
+fireman
+firemen
+fireplace
+fireplaces
+fireplace's
+fireplug
+fireplugs
+firepower
+fireproof
+firer
+firers
+fires
+fireside
+firestorm
+firethorn
+firetrap
+firewall
+firewater
+firewood
+firework
+fireworks
+firing
+firings
+firkin
+firm
+firma
+firmament
+firmamental
+firmed
+firmer
+firmest
+firming
+firmly
+firmness
+firms
+firm's
+firmware
+firry
+first
+firstborn
+firsthand
+firstling
+firstlings
+firstly
+firsts
+firth
+fiscal
+fiscally
+fiscals
+fish
+fishable
+fishbowl
+fished
+fisher
+fisheries
+fisherman
+fisherman's
+fishermen
+fishermen's
+fishers
+fishery
+fishes
+fishgig
+fishhook
+fishier
+fishing
+fishmeal
+fishmonger
+fishmongers
+fishnet
+fishplate
+fishplates
+fishpond
+fishtail
+fishwife
+fishy
+fissile
+fission
+fissionability
+fissionable
+fissional
+fissions
+fissiparous
+fissirostral
+fissure
+fissured
+fissures
+fissuring
+fist
+fisted
+fistfight
+fistful
+fistic
+fisticuff
+fisticuffs
+fists
+fistula
+fistulous
+fit
+fitful
+fitfully
+fitfulness
+fitly
+fitment
+fitness
+fits
+fitted
+fitter
+fitters
+fitter's
+fittest
+fitting
+fittingly
+fittingness
+fittings
+five
+fivefold
+fiver
+fives
+fix
+fixable
+fixate
+fixated
+fixates
+fixating
+fixation
+fixations
+fixative
+fixed
+fixedly
+fixedness
+fixer
+fixers
+fixes
+fixing
+fixings
+fixity
+fixture
+fixtures
+fixture's
+fizz
+fizzer
+fizzle
+fizzled
+fizzles
+fizzling
+fizzy
+fjord
+fjords
+flab
+flabbergast
+flabbergasted
+flabbergasts
+flabbier
+flabbily
+flabbiness
+flabby
+flabellate
+flabellum
+flaccid
+flaccidity
+flaccidly
+flack
+flacon
+flag
+flagellant
+flagellants
+flagellate
+flagellated
+flagellates
+flagellating
+flagellation
+flagellum
+flageolet
+flagged
+flagging
+flaggingly
+flaggy
+flagitious
+flagitiously
+flagitiousness
+flagman
+flagon
+flagpole
+flagpoles
+flagrance
+flagrancies
+flagrancy
+flagrant
+flagrante
+flagrantly
+flags
+flag's
+flagship
+flagships
+flagship's
+flagstaff
+flagstone
+flail
+flailed
+flailing
+flails
+flair
+flak
+flake
+flaked
+flakes
+flakier
+flakiness
+flaking
+flaky
+flam
+flambeau
+flamboyance
+flamboyancy
+flamboyant
+flamboyantly
+flame
+flamed
+flamenco
+flameout
+flameproof
+flamer
+flamers
+flames
+flamethrower
+flaming
+flamingly
+flamingo
+flammability
+flammable
+flammables
+flan
+flange
+flanged
+flanges
+flank
+flanked
+flanker
+flankers
+flanking
+flanks
+flannel
+flannelette
+flannelled
+flannelling
+flannels
+flannel's
+flap
+flapdoodle
+flapjack
+flapped
+flapper
+flappers
+flapping
+flaps
+flap's
+flare
+flareback
+flared
+flares
+flaring
+flaringly
+flash
+flashback
+flashbacks
+flashboard
+flashbulb
+flashbulbs
+flashcube
+flashcubes
+flashed
+flasher
+flashers
+flashes
+flashgun
+flashguns
+flashier
+flashily
+flashiness
+flashing
+flashlight
+flashlights
+flashlight's
+flashover
+flashovers
+flashtube
+flashy
+flask
+flasket
+flat
+flatbed
+flatboat
+flatcar
+flatfeet
+flatfish
+flatfishes
+flatfoot
+flatfooted
+flatfoots
+flathead
+flatiron
+flatirons
+flatland
+flatlander
+flatlands
+flatlet
+flatlets
+flatling
+flatly
+flatmate
+flatmates
+flatness
+flats
+flatted
+flatten
+flattened
+flattener
+flattening
+flattens
+flatter
+flattered
+flatterer
+flattering
+flatteringly
+flatters
+flattery
+flattest
+flatting
+flattish
+flattop
+flatulence
+flatulency
+flatulent
+flatulently
+flatus
+flatware
+flatways
+flatwork
+flatworm
+flaunt
+flaunted
+flaunting
+flauntingly
+flaunts
+flaunty
+flautist
+flavescent
+flavopurpurin
+flavorous
+flavour
+flavoured
+flavourer
+flavourers
+flavourer's
+flavourful
+flavourfully
+flavouring
+flavourings
+flavourless
+flavours
+flavour's
+flavoursome
+flaw
+flawed
+flawing
+flawless
+flawlessly
+flawlessness
+flaws
+flax
+flaxen
+flaxier
+flaxseed
+flaxy
+flay
+flea
+fleabag
+fleabane
+fleabite
+fleabites
+fleapit
+fleapits
+fleas
+flea's
+fleawort
+fleck
+flecked
+flecking
+flecks
+fled
+fledge
+fledged
+fledges
+fledging
+fledgling
+fledglings
+fledgling's
+fledgy
+flee
+fleece
+fleeced
+fleeces
+fleece's
+fleecier
+fleecy
+fleeing
+fleer
+fleeringly
+flees
+fleet
+fleetest
+fleeting
+fleetingly
+fleetingness
+fleetly
+fleetness
+fleets
+flense
+flesh
+fleshed
+flesher
+fleshes
+fleshier
+fleshiness
+fleshing
+fleshly
+fleshpot
+fleshpots
+fleshy
+fletch
+fletched
+fletcher
+fletches
+fletching
+flew
+flews
+flex
+flexed
+flexibilities
+flexibility
+flexible
+flexibly
+flexile
+flexing
+flexion
+flexitime
+flexography
+flexor
+flexuous
+flexuously
+flexural
+flexure
+flibbertigibbet
+flick
+flicked
+flicker
+flickered
+flickering
+flickeringly
+flicking
+flicks
+flier
+fliers
+flies
+flight
+flightier
+flightily
+flightiness
+flightless
+flights
+flight's
+flighty
+flimflam
+flimflammed
+flimflammer
+flimflamming
+flimsier
+flimsies
+flimsily
+flimsiness
+flimsy
+flinch
+flinched
+flincher
+flinches
+flinching
+flinders
+fling
+flinger
+flinging
+flings
+fling's
+flint
+flintier
+flintily
+flintiness
+flintlock
+flints
+flinty
+flip
+flippancy
+flippant
+flippantly
+flipped
+flipper
+flippers
+flipping
+flips
+flirt
+flirtation
+flirtations
+flirtatious
+flirtatiously
+flirtatiousness
+flirted
+flirter
+flirting
+flirts
+flirty
+flit
+flitch
+flits
+flitted
+flitter
+flitting
+flivver
+float
+floatation
+floated
+floater
+floaters
+floating
+floatplane
+floats
+floccose
+flocculants
+flocculate
+flocculated
+flocculates
+flocculating
+flocculation
+flocculent
+floccus
+flock
+flocked
+flocking
+flocks
+floe
+floes
+flog
+flogged
+flogger
+flogging
+flogs
+flood
+flooded
+flooder
+floodgate
+flooding
+floodlight
+floodlit
+floodplain
+floods
+floodwall
+floodwater
+floodwaters
+floodwater's
+floodway
+floor
+floorage
+floorboard
+floorboards
+floored
+floorer
+flooring
+floorings
+floors
+floorwalker
+floozie
+floozies
+floozy
+flop
+flophouse
+flophouses
+flopped
+flopper
+floppers
+floppier
+floppies
+floppily
+floppiness
+flopping
+floppy
+floppy's
+flops
+flop's
+flora
+floral
+florally
+florescence
+florescent
+floret
+floriated
+floribunda
+floricultural
+floriculture
+floriculturist
+florid
+floridity
+floridly
+floridness
+floriferous
+florin
+florist
+floristic
+floristically
+floristry
+florists
+floss
+flossed
+flosses
+flossier
+flossing
+flossy
+flotation
+flotilla
+flotillas
+flotsam
+flounce
+flounced
+flounces
+flouncing
+flounder
+floundered
+floundering
+flounders
+flour
+floured
+flourish
+flourished
+flourisher
+flourishes
+flourishing
+flourishingly
+flours
+floury
+flout
+flouted
+flouter
+flouting
+flouts
+flow
+flowage
+flowchart
+flowcharting
+flowcharts
+flowed
+flower
+flowerage
+flowerbed
+flowered
+flowerer
+floweret
+floweriness
+flowering
+flowerless
+flowerlike
+flowerpot
+flowers
+flowery
+flowing
+flowingly
+flown
+flows
+flowstone
+flu
+flub
+flubbed
+flubbing
+flubs
+fluctuant
+fluctuate
+fluctuated
+fluctuates
+fluctuating
+fluctuation
+fluctuations
+flue
+fluency
+fluent
+fluently
+flues
+fluff
+fluffier
+fluffiest
+fluffiness
+fluffs
+fluffy
+flugelhorn
+fluid
+fluidal
+fluidextract
+fluidic
+fluidics
+fluidisation
+fluidisations
+fluidisation's
+fluidise
+fluidised
+fluidiser
+fluidises
+fluidising
+fluidity
+fluidly
+fluidness
+fluidounce
+fluidram
+fluids
+fluke
+flukier
+fluky
+flume
+flumed
+flumes
+fluming
+flummery
+flummox
+flump
+flumped
+flumping
+flumps
+flung
+flunk
+flunked
+flunkeys
+flunking
+flunks
+flunky
+fluoresce
+fluorescence
+fluorescent
+fluoresces
+fluoric
+fluoridate
+fluoridated
+fluoridates
+fluoridating
+fluoridation
+fluoridations
+fluoride
+fluorides
+fluorinate
+fluorinated
+fluorinates
+fluorinating
+fluorination
+fluorinations
+fluorine
+fluorite
+fluorocarbon
+fluoroscope
+fluoroscopic
+fluoroscopy
+fluorspar
+flurried
+flurries
+flurry
+flurrying
+flush
+flushable
+flushed
+flushes
+flushing
+flushness
+fluster
+flustered
+flustering
+flusters
+flute
+fluted
+flutelike
+flutes
+flute's
+fluting
+flutist
+flutter
+fluttered
+flutterer
+fluttering
+flutters
+fluttery
+fluvial
+flux
+fluxed
+fluxes
+fluxion
+fluxional
+fly
+flyable
+flyaway
+flyblow
+flyblown
+flyboat
+flyboats
+flyby
+flybys
+flycatcher
+flycatchers
+flyer
+flyers
+flyer's
+flying
+flyleaf
+flyleaves
+flyover
+flyovers
+flypaper
+flypast
+flypasts
+flyspeck
+flyswatter
+flytrap
+flytraps
+flyway
+flyweight
+flywheel
+flywheels
+foal
+foals
+foam
+foamed
+foamflower
+foamier
+foaminess
+foaming
+foamless
+foams
+foamy
+fob
+fobbing
+focal
+focalisation
+focalisations
+focalisation's
+focalise
+focalised
+focalises
+focalising
+focally
+foci
+focus
+focusable
+focused
+focuser
+focuses
+focusing
+fodder
+foe
+foeman
+foes
+foe's
+foetal
+foetation
+foeticide
+foetid
+foetidly
+foetidness
+foetor
+foetus
+foetuses
+foetus's
+fog
+fogbound
+fogbow
+fogbows
+fogdog
+fogey
+fogeys
+fogged
+foggier
+foggiest
+foggily
+fogginess
+fogging
+foggy
+foghorn
+foghorns
+fogies
+fogless
+fogs
+fog's
+fogy
+foible
+foibles
+foil
+foiled
+foiling
+foils
+foilsman
+foist
+foisted
+foisting
+foists
+fold
+foldable
+foldaway
+foldboat
+folded
+folder
+folderol
+folders
+folding
+foldout
+foldouts
+folds
+folia
+foliage
+foliaged
+foliages
+foliar
+foliate
+foliated
+foliates
+foliating
+foliation
+foliations
+folic
+folio
+folios
+foliose
+folium
+folk
+folklore
+folkloric
+folklorist
+folkloristic
+folkmoot
+folks
+folk's
+folksier
+folksiness
+folksinger
+folksingers
+folksinger's
+folksong
+folksongs
+folksy
+folktale
+folktales
+folktale's
+folkway
+folkways
+follicle
+follicles
+follicular
+folliculate
+folliculated
+follies
+follow
+followed
+follower
+followers
+following
+followings
+follows
+folly
+foment
+fomentation
+fomentations
+fomented
+fomenter
+fomenting
+foments
+fond
+fondant
+fondants
+fonder
+fondest
+fondle
+fondled
+fondler
+fondles
+fondling
+fondly
+fondness
+fondue
+fondues
+font
+fontal
+fonts
+font's
+food
+foodless
+foodlessness
+foods
+food's
+foodstuff
+foodstuffs
+foodstuff's
+fool
+fooled
+foolery
+foolhardily
+foolhardiness
+foolhardy
+fooling
+foolish
+foolishly
+foolishness
+foolproof
+fools
+foolscap
+foolscap's
+foot
+footage
+footages
+football
+footballer
+footballers
+footballs
+football's
+footboard
+footboards
+footboy
+footboys
+footbridge
+footbridges
+footcloth
+footed
+footer
+footers
+footfall
+footfalls
+footgear
+foothill
+foothills
+foothold
+footholds
+footie
+footing
+footings
+footle
+footled
+footles
+footless
+footlessly
+footlessness
+footlight
+footlights
+footling
+footlocker
+footloose
+footman
+footmark
+footmen
+footnote
+footnotes
+footnote's
+footpace
+footpad
+footpads
+footpath
+footpaths
+footplate
+footplates
+footprint
+footprints
+footprint's
+footrace
+footrest
+footrests
+footrope
+footropes
+foots
+footsie
+footslog
+footslogged
+footslogger
+footslogging
+footslogs
+footsore
+footsoreness
+footstalk
+footstall
+footstep
+footsteps
+footstock
+footstool
+footstools
+footwall
+footway
+footways
+footwear
+footwork
+footy
+foozle
+foozled
+fop
+foppery
+foppish
+foppishly
+foppishness
+fops
+for
+forage
+foraged
+forager
+forages
+foraging
+foramen
+foraminifer
+foraminifera
+forasmuch
+foray
+forayer
+forays
+foray's
+forbade
+forbear
+forbearance
+forbearer
+forbearing
+forbears
+forbear's
+forbid
+forbiddance
+forbidden
+forbidder
+forbidding
+forbiddingly
+forbiddingness
+forbids
+forbode
+forbore
+forborne
+force
+forced
+forcedly
+forceful
+forcefully
+forcefulness
+forceless
+forcemeat
+forceps
+forcer
+forces
+force's
+forcible
+forcibleness
+forcibly
+forcing
+ford
+fordable
+fordo
+fordone
+fords
+fore
+forearm
+forearmed
+forearms
+forearm's
+forebear
+forebears
+forebode
+foreboded
+foreboder
+forebodes
+foreboding
+foreboding
+forebodingly
+forebodingness
+forebodings
+forebrain
+forecast
+forecasted
+forecaster
+forecasters
+forecasting
+forecastle
+forecastles
+forecasts
+foreclose
+foreclosed
+forecloses
+foreclosing
+foreclosure
+forecourt
+forecourts
+foredeck
+foredoom
+foredoomed
+forefather
+forefathers
+forefather's
+forefeel
+forefeet
+forefend
+forefinger
+forefingers
+forefinger's
+forefoot
+forefront
+foregather
+forego
+foregoer
+foregoes
+foregoing
+foregone
+foreground
+foregrounds
+foregut
+forehand
+forehanded
+forehandedness
+forehead
+foreheads
+forehead's
+foreign
+foreigner
+foreigners
+foreignism
+foreignness
+forejudge
+foreknow
+foreknowledge
+foreknown
+forelady
+foreland
+foreleg
+forelimb
+forelock
+foreman
+foremanship
+foremast
+foremasts
+foremen
+foremost
+foremother
+forename
+forenamed
+forenames
+forenoon
+forensic
+forensically
+forensics
+foreordain
+foreordained
+foreordaining
+foreordains
+foreordination
+forepart
+forepaw
+forepaws
+forepeak
+foreplay
+forequarter
+forequarters
+forereach
+forerun
+forerunner
+forerunners
+foresaid
+foresail
+foresaw
+foresee
+foreseeable
+foreseeing
+foreseen
+foreseer
+foresees
+foreshadow
+foreshadowed
+foreshadower
+foreshadowing
+foreshadows
+foresheet
+foreshock
+foreshore
+foreshorten
+foreshortened
+foreshortening
+foreshortens
+foreshow
+foreside
+foresight
+foresighted
+foresightedly
+foresightedness
+foreskin
+forespeak
+forest
+forestage
+forestall
+forestalled
+forestaller
+forestalling
+forestalls
+forestation
+forestay
+forestaysail
+forested
+forester
+foresters
+forestry
+forests
+foreswear
+foresworn
+foretaste
+foretell
+foreteller
+foretelling
+foretells
+forethought
+forethoughtfully
+forethoughtfulness
+forethought's
+foretime
+foretoken
+foretold
+foretop
+forever
+forevermore
+forewarn
+forewarned
+forewarning
+forewarnings
+forewarns
+forewent
+forewing
+forewoman
+foreword
+foreworn
+foreyard
+forfeit
+forfeitable
+forfeited
+forfeiter
+forfeiters
+forfeiting
+forfeits
+forfeiture
+forfeitures
+forficate
+forgather
+forgave
+forge
+forgeable
+forged
+forger
+forgeries
+forgers
+forgery
+forgery's
+forges
+forget
+forgetful
+forgetfully
+forgetfulness
+forgets
+forgettable
+forgetter
+forgetting
+forging
+forgivable
+forgivably
+forgive
+forgiven
+forgiveness
+forgiver
+forgives
+forgiving
+forgivingly
+forgivingness
+forgo
+forgoer
+forgoes
+forgoing
+forgone
+forgot
+forgotten
+forint
+fork
+forked
+forkful
+forking
+forklift
+forklike
+forks
+forlorn
+forlornly
+forlornness
+form
+forma
+formability
+formable
+formal
+formaldehyde
+formalin
+formalisation
+formalisations
+formalisation's
+formalise
+formalised
+formaliser
+formalisers
+formalises
+formalising
+formalism
+formalisms
+formalism's
+formalist
+formalistic
+formalistically
+formalities
+formality
+formally
+formalness
+formals
+formant
+formants
+format
+formation
+formational
+formations
+formation's
+formative
+formatively
+formativeness
+formats
+formatted
+formatter
+formatters
+formatter's
+formatting
+formed
+former
+formerly
+formers
+formfitting
+formic
+formicary
+formicate
+formidability
+formidable
+formidableness
+formidably
+forming
+formless
+formlessly
+formlessness
+forms
+formula
+formulae
+formulaic
+formulaically
+formularisation
+formularisations
+formularise
+formularised
+formulariser
+formularises
+formularising
+formulary
+formulas
+formula's
+formulate
+formulated
+formulates
+formulating
+formulation
+formulations
+formulator
+formulators
+formulator's
+formulisation
+formulisations
+formulise
+formulised
+formulises
+formulising
+formulism
+formwork
+fornicate
+fornicated
+fornicates
+fornicating
+fornication
+fornications
+fornicator
+fornicators
+forsake
+forsaken
+forsakes
+forsaking
+forsook
+forsooth
+forswear
+forswears
+forswore
+forsworn
+fort
+fortalice
+forte
+fortepiano
+fortes
+forth
+forthcoming
+forthright
+forthrightly
+forthrightness
+forthwith
+forties
+fortieth
+fortification
+fortifications
+fortified
+fortifier
+fortifies
+fortify
+fortifying
+fortiori
+fortissimo
+fortitude
+fortnight
+fortnightly
+fortress
+fortresses
+fortress's
+forts
+fort's
+fortuitism
+fortuitous
+fortuitously
+fortuitousness
+fortuity
+fortunate
+fortunately
+fortunateness
+fortune
+fortuned
+fortunes
+fortune's
+fortuning
+forty
+forum
+forums
+forum's
+forward
+forwarded
+forwarder
+forwarders
+forwarding
+forwardly
+forwardness
+forwards
+forwent
+forwhy
+forzando
+fosse
+fossil
+fossilisation
+fossilisations
+fossilisation's
+fossilise
+fossilised
+fossilises
+fossilising
+fossils
+foster
+fosterage
+fostered
+fosterer
+fostering
+fosterling
+fosterlings
+fosters
+fought
+foul
+foulard
+fouled
+fouler
+foulest
+fouling
+foully
+foulmouthed
+foulness
+fouls
+found
+foundation
+foundational
+foundationally
+foundations
+foundation's
+founded
+founder
+foundered
+foundering
+founders
+founding
+foundling
+foundlings
+foundries
+foundry
+foundry's
+founds
+fount
+fountain
+fountainhead
+fountains
+fountain's
+founts
+fount's
+four
+fourfold
+fourpence
+fourpenny
+fours
+fourscore
+foursome
+foursomes
+foursquare
+fourteen
+fourteens
+fourteenth
+fourth
+fourthly
+fourths
+fovea
+fowl
+fowler
+fowling
+fowls
+fox
+foxed
+foxes
+foxfire
+foxglove
+foxhole
+foxholes
+foxhound
+foxier
+foxily
+foxiness
+foxing
+fox's
+foxtail
+foxtrot
+foxtrots
+foxtrot's
+foxy
+foyer
+fracas
+fracases
+fractal
+fractals
+fractal's
+fraction
+fractional
+fractionalisation
+fractionalise
+fractionalised
+fractionalises
+fractionalising
+fractionally
+fractionate
+fractionated
+fractionates
+fractionating
+fractionation
+fractionations
+fractionators
+fractioned
+fractioning
+fractionise
+fractionises
+fractions
+fraction's
+fractious
+fractiously
+fractiousness
+fractocumulus
+fractostratus
+fracture
+fractured
+fractures
+fracturing
+frae
+fraenum
+fragile
+fragilely
+fragility
+fragment
+fragmental
+fragmentally
+fragmentarily
+fragmentariness
+fragmentary
+fragmentation
+fragmentations
+fragmented
+fragmenting
+fragmentise
+fragmentised
+fragmentises
+fragmentising
+fragments
+fragrance
+fragrances
+fragrance's
+fragrant
+fragrantly
+frail
+frailer
+frailest
+frailly
+frailness
+frailties
+frailty
+framboesia
+frame
+framed
+framer
+framers
+frames
+frame's
+framework
+frameworks
+framework's
+framing
+framings
+franc
+franca
+franchise
+franchised
+franchisee
+franchiser
+franchises
+franchise's
+franchising
+franchisor
+francium
+francolin
+francs
+frangibility
+frangible
+frangipane
+frangipani
+frank
+franked
+franker
+frankest
+frankfurter
+frankfurters
+frankincense
+franking
+frankly
+frankness
+frankpledge
+franks
+frantic
+frantically
+franticly
+franticness
+frap
+frappe
+frapping
+frat
+fraternal
+fraternalism
+fraternally
+fraternisation
+fraternisations
+fraternisation's
+fraternise
+fraternised
+fraterniser
+fraternisers
+fraternises
+fraternising
+fraternities
+fraternity
+fraternity's
+fratricidal
+fratricide
+fraud
+frauds
+fraud's
+fraudulence
+fraudulent
+fraudulently
+fraught
+fraxinella
+fray
+frayed
+fraying
+frays
+frazzle
+frazzled
+frazzles
+frazzling
+freak
+freakier
+freakish
+freakishly
+freakishness
+freaks
+freak's
+freaky
+freckle
+freckled
+freckles
+freckling
+freckly
+free
+freebie
+freeboard
+freeboot
+freebooter
+freebooters
+freeborn
+freed
+freedman
+freedmen
+freedom
+freedoms
+freedom's
+freedwoman
+freehand
+freehanded
+freehandedly
+freehearted
+freehold
+freeholder
+freeholders
+freeing
+freelance
+freeload
+freeloader
+freely
+freeman
+freemartin
+freemason
+freemasonry
+freemen
+freeness
+freer
+frees
+freest
+freestanding
+freestone
+freestyle
+freethinker
+freethinkers
+freethinking
+freeway
+freeways
+freeway's
+freewheel
+freewheeled
+freewheeler
+freewheelers
+freewheeling
+freewheels
+freewill
+freeze
+freezer
+freezers
+freezes
+freezing
+freight
+freightage
+freighted
+freighter
+freighters
+freighting
+freightliner
+freights
+frenetic
+frenetically
+frenzied
+frenziedly
+frenzies
+frenzy
+frenzying
+frequencies
+frequency
+frequent
+frequentation
+frequentations
+frequentative
+frequentatives
+frequented
+frequenter
+frequenters
+frequenting
+frequently
+frequentness
+frequents
+fresco
+frescoed
+frescoes
+frescoing
+frescos
+fresh
+freshen
+freshened
+freshener
+fresheners
+freshening
+freshens
+fresher
+freshest
+freshet
+freshly
+freshman
+freshmen
+freshness
+freshwater
+fret
+fretful
+fretfully
+fretfulness
+frets
+fretted
+fretting
+fretwork
+friability
+friable
+friableness
+friar
+friarbird
+friars
+friar's
+friary
+fricassee
+frication
+fricative
+fricatives
+friction
+frictional
+frictionally
+frictionless
+frictions
+friction's
+fridge
+fridges
+fridge's
+fried
+friend
+friendless
+friendlessness
+friendlier
+friendliest
+friendlily
+friendliness
+friendly
+friends
+friend's
+friendship
+friendships
+friendship's
+fries
+frieze
+friezes
+frieze's
+frig
+frigate
+frigates
+frigate's
+frigging
+fright
+frighten
+frightened
+frightening
+frighteningly
+frightens
+frightful
+frightfully
+frightfulness
+frigid
+frigidity
+frigidly
+frigidness
+frigorific
+frill
+frilled
+frills
+frill's
+frilly
+fringe
+fringed
+fringes
+fringier
+fringing
+fringy
+frippery
+frisk
+frisked
+frisker
+friskier
+friskily
+friskiness
+frisking
+frisks
+frisky
+frisson
+frissons
+frit
+fritillary
+fritted
+fritter
+fritterer
+fritters
+fritting
+frivol
+frivolity
+frivolled
+frivoller
+frivolling
+frivolous
+frivolously
+frivolousness
+frizz
+frizzier
+frizzle
+frizzled
+frizzles
+frizzling
+frizzy
+fro
+frock
+frocked
+frocking
+frocks
+frock's
+froe
+frog
+frogfish
+froghopper
+frogman
+frogmarch
+frogmen
+frogmouth
+frogs
+frog's
+frogspawn
+frolic
+frolicked
+frolicking
+frolics
+frolicsome
+frolicsomely
+frolicsomeness
+from
+frond
+fronded
+frondescence
+fronds
+frond's
+front
+frontage
+frontal
+frontally
+fronted
+frontier
+frontiers
+frontier's
+frontiersman
+frontiersmen
+fronting
+frontispiece
+frontispieces
+frontless
+frontlet
+fronton
+frontrunner
+fronts
+frost
+frostbite
+frostbiting
+frostbitten
+frosted
+frostier
+frostily
+frostiness
+frosting
+frosts
+frostwork
+frosty
+froth
+frothier
+frothily
+frothiness
+frothing
+froths
+frothy
+frottage
+froufrou
+frown
+frowned
+frowner
+frowning
+frowningly
+frowns
+frowsier
+frowstier
+frowsty
+frowsy
+frowzier
+frowzy
+froze
+frozen
+frozenly
+frozenness
+fructiferous
+fructification
+fructifications
+fructify
+fructose
+fructose's
+fructuous
+fructuously
+frugal
+frugality
+frugally
+fruit
+fruitage
+fruitarian
+fruitcake
+fruited
+fruiter
+fruiterer
+fruitful
+fruitfully
+fruitfulness
+fruitier
+fruition
+fruitless
+fruitlessly
+fruitlessness
+fruits
+fruit's
+fruity
+frumenty
+frump
+frumpier
+frumpish
+frumps
+frumpy
+frustrate
+frustrated
+frustrates
+frustrating
+frustratingly
+frustration
+frustrations
+frustum
+frutescent
+fry
+fryer
+frying
+ft
+ftp
+fubsy
+fuchsia
+fuck
+fucked
+fucker
+fuckers
+fucker's
+fucking
+fucks
+fuck's
+fuckwit
+fuddle
+fuddled
+fuddles
+fuddling
+fudge
+fudged
+fudges
+fudging
+fuel
+fuelled
+fuelling
+fuels
+fugacious
+fugacity
+fugal
+fugally
+fugato
+fugitive
+fugitively
+fugitiveness
+fugitives
+fugitive's
+fugue
+fulcra
+fulcrum
+fulfil
+fulfilled
+fulfiller
+fulfilling
+fulfilment
+fulfilments
+fulfilment's
+fulfils
+fulgent
+fulgently
+fulgurate
+fulgurated
+fulgurates
+fulgurating
+fulguration
+fulgurations
+fulgurous
+fuliginous
+full
+fullback
+fuller
+fullest
+fullness
+fully
+fulmar
+fulminate
+fulminated
+fulminates
+fulminating
+fulmination
+fulminations
+fulminator
+fulminators
+fulminous
+fulsome
+fulsomely
+fulsomeness
+fulvous
+fumble
+fumbled
+fumbler
+fumbles
+fumbling
+fumblingly
+fume
+fumed
+fumes
+fumigant
+fumigate
+fumigated
+fumigates
+fumigation
+fumigations
+fumigator
+fumigators
+fuming
+fumitory
+fumy
+fun
+funambulist
+function
+functional
+functionalise
+functionalises
+functionalism
+functionalist
+functionalistic
+functionalists
+functionalities
+functionality
+functionally
+functionary
+functioned
+functioning
+functionless
+functions
+function's
+fund
+fundament
+fundamental
+fundamentalism
+fundamentalist
+fundamentalists
+fundamentalist's
+fundamentally
+fundamentals
+funded
+funding
+fundraiser
+fundraisers
+fundraiser's
+fundraising
+funds
+funeral
+funerals
+funeral's
+funerary
+funereal
+funereally
+funfair
+fungal
+fungi
+fungible
+fungicidal
+fungicidally
+fungicide
+fungicides
+fungous
+fungus
+funguses
+funicular
+funk
+funkier
+funkiness
+funky
+funnel
+funnelled
+funnelling
+funnels
+funnier
+funnies
+funniest
+funnily
+funniness
+funning
+funny
+fur
+furan
+furbearer
+furbelow
+furbish
+furbisher
+furbishes
+furbishing
+furcating
+furfural
+furfuran
+furies
+furious
+furiously
+furiousness
+furl
+furled
+furless
+furlong
+furlongs
+furlough
+furloughed
+furloughs
+furmenty
+furnace
+furnaces
+furnace's
+furnish
+furnished
+furnisher
+furnishers
+furnishes
+furnishing
+furnishings
+furniture
+furore
+furores
+furore's
+furred
+furrier
+furriers
+furriery
+furring
+furrow
+furrowed
+furrowing
+furrows
+furry
+furs
+fur's
+further
+furtherance
+furthered
+furtherer
+furthering
+furthermore
+furthermost
+furthers
+furthest
+furtive
+furtively
+furtiveness
+furuncle
+furunculous
+fury
+fury's
+furze
+fuscous
+fuse
+fused
+fuselage
+fuselages
+fuses
+fusibility
+fusible
+fusil
+fusilier
+fusillade
+fusillades
+fusing
+fusion
+fusionism
+fusionist
+fusions
+fuss
+fussbudget
+fusser
+fussier
+fussily
+fussiness
+fussing
+fusspot
+fussy
+fustian
+fustians
+fustic
+fustigate
+fustigated
+fustigates
+fustigating
+fustigation
+fustigations
+fustily
+fustiness
+fusty
+futile
+futilely
+futileness
+futilitarian
+futility
+futtock
+future
+futureless
+futures
+future's
+futurism
+futurist
+futuristic
+futuristically
+futurists
+futurity
+futurology
+fuzz
+fuzzed
+fuzzier
+fuzziest
+fuzzily
+fuzziness
+fuzzy
+fylfot
+g's
+gab
+gabardine
+gabardines
+gabber
+gabbier
+gabbing
+gabble
+gabbled
+gabbler
+gabbles
+gabbling
+gabby
+gabfest
+gabfests
+gabion
+gabionade
+gable
+gabled
+gables
+gad
+gadabout
+gadabouts
+gadded
+gadding
+gadfly
+gadget
+gadgetry
+gadgets
+gadget's
+gadoid
+gadolinite
+gadolinium
+gadroon
+gadwall
+gaff
+gaffe
+gaffer
+gaffes
+gaffs
+gag
+gaga
+gage
+gages
+gagged
+gagger
+gagging
+gaggle
+gagman
+gagmen
+gags
+gagster
+gagsters
+gahnite
+gaieties
+gaiety
+gaillardia
+gaily
+gain
+gained
+gainer
+gainers
+gainful
+gainfully
+gainfulness
+gaining
+gains
+gainsay
+gainsayer
+gait
+gaited
+gaiter
+gaiters
+gaits
+gal
+gala
+galactic
+galangal
+galantine
+galaxies
+galaxy
+galaxy's
+galbanum
+gale
+galena
+gales
+galingale
+galipot
+gall
+gallant
+gallantly
+gallantry
+gallants
+gallbladder
+galleass
+galled
+galleon
+galleons
+galleried
+galleries
+gallery
+galley
+galleys
+galley's
+gallfly
+galliard
+galligaskins
+gallimaufry
+gallinacean
+gallinaceous
+galling
+gallingly
+gallinule
+gallium
+gallivant
+gallivanted
+gallivanting
+gallivants
+gallnut
+galloglass
+gallon
+gallons
+gallon's
+galloon
+gallop
+gallopade
+galloped
+galloper
+gallopers
+galloping
+gallops
+gallous
+gallows
+gallowses
+galls
+gallstone
+gallstones
+galoot
+galore
+galosh
+galoshes
+gals
+galumph
+galvanic
+galvanisation
+galvanisations
+galvanisation's
+galvanise
+galvanised
+galvaniser
+galvanisers
+galvanises
+galvanising
+galvanism
+galvanometer
+galvanometers
+galvanometer's
+galvanometric
+galvanoscope
+galyak
+gambado
+gambit
+gambits
+gamble
+gambled
+gambler
+gamblers
+gambles
+gambling
+gambol
+gambolled
+gambolling
+gambols
+gambrel
+game
+gamecock
+gamed
+gamekeeper
+gamekeepers
+gamelan
+gamely
+gameness
+games
+gamesman
+gamesmanship
+gamesome
+gamesomely
+gamesomeness
+gamester
+gamete
+gametes
+gamete's
+gametocyte
+gamier
+gamily
+gamin
+gamine
+gaminess
+gaming
+gamma
+gammadion
+gammas
+gamming
+gammon
+gamogenesis
+gamp
+gamut
+gamy
+gander
+gang
+gangbang
+ganger
+gangland
+ganglier
+gangling
+ganglion
+gangly
+gangplank
+gangplow
+gangrene
+gangrened
+gangrenes
+gangrening
+gangrenous
+gangs
+gang's
+gangster
+gangsters
+gangster's
+gangue
+gangway
+gangways
+ganister
+gannet
+gantlet
+gantries
+gantry
+gaol
+gap
+gape
+gaped
+gaper
+gapes
+gapeworm
+gaping
+gapingly
+gapped
+gapping
+gaps
+gap's
+gar
+garage
+garaged
+garages
+garaging
+garb
+garbage
+garbage's
+garbanzo
+garbed
+garble
+garbled
+garbler
+garbles
+garbling
+garboard
+garden
+gardened
+gardener
+gardeners
+gardenia
+gardenias
+gardening
+gardens
+garderobe
+garfish
+gargantuan
+garget
+gargle
+gargled
+gargles
+gargling
+gargoyle
+gargoyles
+garish
+garishly
+garishness
+garland
+garlanded
+garlands
+garlic
+garlicky
+garment
+garmented
+garmenting
+garments
+garment's
+garner
+garnered
+garnering
+garners
+garnet
+garnierite
+garnish
+garnished
+garnishee
+garnishees
+garnishes
+garnishment
+garnishments
+garniture
+garnitures
+garpike
+garret
+garrets
+garrison
+garrisoned
+garrisoning
+garrisons
+garrotte
+garrotted
+garrotter
+garrottes
+garrottes
+garrotting
+garrulity
+garrulous
+garrulously
+garrulousness
+garter
+gartered
+gartering
+garters
+garter's
+garth
+gas
+gasbag
+gaseous
+gaseousness
+gases
+gash
+gashed
+gashes
+gashing
+gasholder
+gashouse
+gash's
+gasification
+gasiform
+gasket
+gaskets
+gaskin
+gaslight
+gaslights
+gaslit
+gasman
+gasohol
+gasoliers
+gasoline
+gasometer
+gasp
+gasped
+gasper
+gaspers
+gasping
+gaspingly
+gasps
+gas's
+gassed
+gasser
+gassers
+gasses
+gassiness
+gassing
+gassings
+gassy
+gastight
+gastric
+gastritis
+gastroenteritis
+gastrointestinal
+gastronome
+gastronomes
+gastronomic
+gastronomically
+gastronomist
+gastronomy
+gastropod
+gastrotrich
+gastrula
+gasworker
+gasworks
+gat
+gate
+gated
+gatefold
+gatehouse
+gatekeeper
+gatekeepers
+gatekeeper's
+gatepost
+gates
+gateway
+gateways
+gateway's
+gather
+gathered
+gatherer
+gatherers
+gathering
+gatherings
+gathers
+gating
+gatling
+gator
+gauche
+gauchely
+gaucheness
+gaucherie
+gaucheries
+gaud
+gaudery
+gaudier
+gaudies
+gaudily
+gaudiness
+gauds
+gaudy
+gauge
+gaugeable
+gauged
+gauges
+gauging
+gaunt
+gauntlet
+gauntleted
+gauntly
+gauntness
+gaur
+gauss
+gausses
+gauze
+gauzed
+gauzelike
+gauzes
+gauzily
+gauziness
+gauzing
+gauzy
+gave
+gavel
+gavelled
+gavelling
+gavial
+gavotte
+gavottes
+gawk
+gawkier
+gawkily
+gawks
+gawky
+gawp
+gay
+gayer
+gayest
+gayety
+gayness
+gaze
+gazebo
+gazebos
+gazebo's
+gazed
+gazehound
+gazelle
+gazelles
+gazer
+gazers
+gazes
+gazette
+gazetted
+gazetteer
+gazetteers
+gazettes
+gazetting
+gazing
+gear
+gearbox
+geared
+gearing
+gearless
+gears
+gearshift
+gearwheel
+gecko
+gee
+geek
+geeks
+geek's
+geese
+geezer
+gefilte
+geisha
+geishas
+gel
+gelada
+gelatine
+gelatinisation
+gelatinise
+gelatinised
+gelatinises
+gelatinising
+gelatinous
+gelatinously
+gelatinousness
+geld
+gelding
+geldings
+gelid
+gelidity
+gelidly
+gelled
+gelling
+gels
+gel's
+gelt
+gem
+geminate
+geminately
+gemlike
+gemmated
+gemmates
+gemmating
+gemming
+gems
+gem's
+gemsbok
+gemstone
+gemstones
+gemstone's
+gendarme
+gendarmerie
+gender
+gendered
+gendering
+genders
+gender's
+gene
+genealogical
+genealogically
+genealogies
+genealogist
+genealogists
+genealogy
+genera
+generable
+general
+generalisation
+generalisations
+generalisation's
+generalise
+generalised
+generalises
+generalising
+generalissimo
+generalist
+generalists
+generalist's
+generalities
+generality
+generally
+generalness
+generals
+general's
+generate
+generated
+generates
+generating
+generation
+generational
+generations
+generative
+generatively
+generator
+generators
+generator's
+generic
+generically
+generosities
+generosity
+generosity's
+generous
+generously
+generousness
+genes
+gene's
+genesis
+genet
+genetic
+genetically
+geneticist
+geneticists
+geneticist's
+genetics
+genial
+geniality
+genially
+genialness
+genie
+genies
+genie's
+genii
+genipap
+genital
+genitalia
+genitally
+genitals
+genitive
+genitives
+genitive's
+genitor
+genitourinary
+genius
+geniuses
+genius's
+genocide
+genocides
+genome
+genomes
+genome's
+genotype
+genotypes
+genotype's
+genotypic
+genre
+genres
+genre's
+gent
+genteel
+genteelism
+genteelly
+genteelness
+gentian
+gentians
+gentile
+gentiles
+gentility
+gentle
+gentled
+gentlefolk
+gentleman
+gentlemanlike
+gentlemanliness
+gentlemanly
+gentlemen
+gentleness
+gentler
+gentlest
+gentlewoman
+gentlewomen
+gentlewomen's
+gentling
+gently
+gentries
+gentrification
+gentry
+gents
+genuflect
+genuflected
+genuflecting
+genuflection
+genuflects
+genuine
+genuinely
+genuineness
+genus
+geocentric
+geocentrically
+geocentricism
+geochemist
+geochemistry
+geochronologist
+geochronology
+geode
+geodes
+geode's
+geodesic
+geodesics
+geodesist
+geodesy
+geodetic
+geodetically
+geodynamics
+geognosy
+geographer
+geographers
+geographer's
+geographic
+geographical
+geographically
+geographies
+geography
+geoid
+geologic
+geological
+geologise
+geologised
+geologises
+geologising
+geologist
+geologists
+geologist's
+geology
+geomagnetic
+geomagnetism
+geomancy
+geomantic
+geomechanics
+geometer
+geometers
+geometer's
+geometric
+geometrical
+geometrically
+geometrician
+geometrid
+geometries
+geometrise
+geometrised
+geometrises
+geometrising
+geometry
+geomorphic
+geomorphology
+geophysical
+geophysicist
+geophysicists
+geophysics
+geopolitical
+geopolitically
+geopolitics
+geoponic
+geoponics
+georgic
+geostatic
+geosynchronous
+geotaxis
+geotectonic
+geothermal
+geothermic
+geotropic
+geotropically
+geotropism
+geranial
+geranium
+gerbil
+gerent
+gerenuk
+gerfalcon
+geriatric
+geriatrician
+geriatricians
+geriatrics
+geriatrist
+germ
+germander
+germane
+germanise
+germanised
+germanises
+germanising
+germanium
+germanous
+germen
+germfree
+germicidal
+germicide
+germicides
+germinal
+germinant
+germinate
+germinated
+germinates
+germinating
+germination
+germinations
+germproof
+germs
+germ's
+gerontocracy
+gerontologist
+gerontologists
+gerontology
+gerrymander
+gerrymandered
+gerrymandering
+gerund
+gerundial
+gerundive
+gesso
+gestalt
+gestate
+gestated
+gestates
+gestating
+gestation
+gestational
+gestations
+gestation's
+gesticulate
+gesticulated
+gesticulates
+gesticulating
+gesticulation
+gesticulations
+gesticulator
+gesticulators
+gesticulatory
+gesture
+gestured
+gestures
+gesturing
+get
+getaway
+getaways
+gets
+getter
+getting
+getup
+getups
+gewgaw
+geyser
+geysers
+ghastlier
+ghastliness
+ghastly
+ghee
+gherkin
+gherkins
+ghetto
+ghettoise
+ghettoised
+ghettoises
+ghettoising
+ghettos
+ghost
+ghosted
+ghosting
+ghostlier
+ghostlike
+ghostliness
+ghostly
+ghosts
+ghoul
+ghoulish
+ghoulishly
+ghoulishness
+ghouls
+giant
+giantess
+giants
+giant's
+gibber
+gibbered
+gibbering
+gibberish
+gibbers
+gibbet
+gibbeted
+gibbeting
+gibbets
+gibbon
+gibbons
+gibbous
+gibbously
+gibbousness
+gibbsite
+gibe
+giber
+gibes
+gibing
+giblet
+giblets
+giddied
+giddier
+giddily
+giddiness
+giddy
+giddying
+gift
+gifted
+giftedly
+giftedness
+gifts
+gig
+gigabit
+gigabyte
+gigabytes
+gigahertz
+gigantesque
+gigantic
+gigantically
+giganticness
+gigantism
+gigantisms
+gigantomachy
+gigging
+giggle
+giggled
+giggler
+giggles
+giggling
+giggly
+gigolo
+gigot
+gigots
+gigs
+gig's
+gigue
+gild
+gilded
+gilder
+gilding
+gilds
+gill
+gilled
+gills
+gill's
+gillyflower
+gilt
+gilthead
+gimballed
+gimbals
+gimcrack
+gimlet
+gimlets
+gimlet's
+gimmick
+gimmickry
+gimmicks
+gimmick's
+gimmicky
+gimp
+gimpy
+gin
+ginger
+gingerbread
+gingered
+gingering
+gingerliness
+gingerly
+gingersnap
+gingery
+gingham
+ginghams
+gingivitis
+gingko
+gink
+ginkgo
+ginning
+gins
+gin's
+ginseng
+gip
+giraffe
+giraffes
+giraffe's
+girandole
+gird
+girded
+girder
+girders
+girder's
+girding
+girdle
+girdled
+girdler
+girdles
+girdling
+girds
+girl
+girlfriend
+girlfriends
+girlfriend's
+girlhood
+girlhoods
+girlie
+girlish
+girlishly
+girlishness
+girls
+girl's
+girly
+giro
+girt
+girth
+gisarme
+gismo
+gismos
+gist
+git
+give
+giveaway
+giveaways
+given
+givens
+giver
+givers
+gives
+giveth
+giving
+gizmo
+gizmos
+gizmo's
+gizzard
+gizzards
+gizzard's
+glacial
+glacially
+glaciate
+glaciated
+glaciates
+glaciating
+glaciation
+glacier
+glaciers
+glacier's
+glaciological
+glaciologist
+glaciology
+glacis
+glad
+gladded
+gladden
+gladdened
+gladdening
+gladdens
+gladder
+gladdest
+gladding
+glade
+glades
+gladiate
+gladiator
+gladiatorial
+gladiators
+gladiola
+gladiolus
+gladly
+gladness
+gladsome
+gladsomely
+gladsomeness
+glair
+glaive
+glamorisation
+glamorisations
+glamorise
+glamorised
+glamorises
+glamorising
+glamorous
+glamorously
+glamorousness
+glamour
+glance
+glanced
+glances
+glancing
+gland
+glandered
+glandless
+glands
+gland's
+glandular
+glandule
+glare
+glared
+glares
+glarier
+glaring
+glaringly
+glaringness
+glary
+glass
+glassblower
+glassblowing
+glassed
+glasses
+glassful
+glasshouse
+glassier
+glassily
+glassine
+glassiness
+glassless
+glassmaker
+glassmaking
+glassware
+glasswork
+glassworker
+glassworks
+glasswort
+glassy
+glaucoma
+glaze
+glazed
+glazer
+glazers
+glazes
+glazier
+glaziers
+glazing
+gleam
+gleamed
+gleaming
+gleams
+glean
+gleaned
+gleaner
+gleaning
+gleanings
+gleans
+glebe
+glee
+gleeful
+gleefully
+gleefulness
+gleeman
+glees
+gleesome
+glen
+glens
+glen's
+glib
+glibber
+glibbest
+glibly
+glibness
+glide
+glided
+glider
+gliders
+glides
+gliding
+glimmer
+glimmered
+glimmering
+glimmers
+glimpse
+glimpsed
+glimpser
+glimpsers
+glimpses
+glimpsing
+glint
+glinted
+glinting
+glints
+glissade
+glissando
+glisten
+glistened
+glistening
+glistens
+glister
+glitch
+glitches
+glitch's
+glitter
+glittered
+glittering
+glitteringly
+glitters
+glittery
+gloaming
+gloat
+gloated
+gloater
+gloats
+glob
+global
+globalisation
+globalisations
+globalise
+globalised
+globalises
+globally
+globate
+globe
+globeflower
+globes
+globe's
+globetrotter
+globing
+globoid
+globular
+globularity
+globularly
+globule
+globulin
+globulins
+glockenspiel
+glom
+glomeration
+glommed
+glomming
+gloms
+gloom
+gloomier
+gloomily
+gloominess
+glooms
+gloomy
+gloried
+glories
+glorification
+glorifications
+glorified
+glorifier
+glorifiers
+glorifies
+glorify
+glorious
+gloriously
+gloriousness
+glory
+glorying
+gloss
+glossarial
+glossaries
+glossarist
+glossary
+glossary's
+glossator
+glossed
+glosses
+glossier
+glossies
+glossily
+glossiness
+glossing
+glossy
+glottal
+glottis
+glottochronology
+glove
+gloved
+gloveless
+glover
+glovers
+gloves
+gloving
+glow
+glowed
+glower
+glowered
+glowering
+glowers
+glowing
+glowingly
+glows
+gloze
+glue
+glued
+glueing
+gluer
+gluers
+glues
+gluey
+gluing
+glum
+glumly
+glummer
+glummest
+glumness
+gluon
+glut
+glutamate
+glutamine
+gluten
+gluteus
+glutinous
+glutinously
+glutinousness
+gluts
+glutted
+glutting
+glutton
+gluttonise
+gluttonises
+gluttonous
+gluttonously
+gluttonousness
+gluttons
+glutton's
+gluttony
+glycerinate
+glycerinated
+glycerine
+glycerol
+glycerolise
+glycerolised
+glycerolises
+glycogen
+glycol
+glycolic
+glycols
+glycopeptides
+glycosidase
+glycoside
+glyph
+glyptic
+glyptodont
+glyptography
+gnarl
+gnarled
+gnarls
+gnarly
+gnash
+gnashes
+gnashing
+gnat
+gnatcatcher
+gnats
+gnat's
+gnaw
+gnawed
+gnawer
+gnawing
+gnaws
+gneiss
+gneissic
+gnocchi
+gnome
+gnomes
+gnomic
+gnomish
+gnomon
+gnomonic
+gnosis
+gnostic
+gnosticism
+gnu
+gnus
+go
+goad
+goaded
+goading
+goads
+goal
+goalie
+goalkeeper
+goalmouth
+goalpost
+goals
+goal's
+goaltender
+goaltending
+goanna
+goat
+goatee
+goatees
+goatee's
+goatfish
+goatherd
+goatish
+goats
+goat's
+goatskin
+goatsucker
+gob
+gobbet
+gobble
+gobbled
+gobbledegook
+gobbledygook
+gobbler
+gobblers
+gobbles
+gobbling
+goblet
+goblets
+goblet's
+goblin
+goblins
+goblin's
+gobo
+gobstopper
+goby
+god
+godchild
+goddamn
+goddamned
+goddaughter
+goddess
+goddesses
+goddess's
+godfather
+godforsaken
+godhead
+godhood
+godless
+godlessness
+godlier
+godlike
+godlikeness
+godliness
+godly
+godmother
+godmothers
+godmother's
+godparent
+gods
+god's
+godsend
+godsends
+godson
+godwit
+goer
+goes
+goethite
+goggle
+gogglebox
+goggled
+goggles
+goggling
+going
+goings
+goitre
+goitres
+gold
+goldbeater
+goldbeating
+goldbrick
+golden
+goldenly
+goldenness
+goldenrod
+goldenseal
+goldfinch
+goldfish
+goldilocks
+goldsmith
+goldsmiths
+goldthread
+golem
+golf
+golfer
+golfers
+golfing
+goliard
+goliardery
+golliwog
+golly
+gomuti
+gonad
+gonads
+gonad's
+gondola
+gondolas
+gondolier
+gondoliers
+gone
+goner
+gonfalon
+gong
+gongs
+gong's
+gonococcus
+gonorrhoea
+gonorrhoeal
+goober
+good
+goodbye
+goodbyes
+goodbye's
+goodie
+goodies
+goodie's
+goodish
+goodly
+goodness
+goodnight
+goods
+goodwife
+goodwill
+goody
+gooey
+goof
+goofball
+goofed
+goofier
+goofily
+goofiness
+goofing
+goofs
+goofy
+googly
+googol
+googolplex
+gook
+goon
+gooney
+goosander
+goose
+gooseberry
+gooseflesh
+goosefoot
+goosegrass
+gooseneck
+goosenecked
+gooses
+goosing
+goosy
+gopher
+gophers
+goral
+gorblimey
+gore
+gored
+gores
+gorge
+gorgeous
+gorgeously
+gorgeousness
+gorger
+gorgerin
+gorges
+gorging
+gorgon
+gorgonian
+gorier
+gorilla
+gorillas
+gorilla's
+goring
+gormandise
+gormandised
+gormandiser
+gormandises
+gormandising
+gormless
+gorse
+gory
+gosh
+goshawk
+gosling
+gospel
+gospeller
+gospellers
+gospels
+gossamer
+gossip
+gossiper
+gossipers
+gossipmonger
+gossipmongers
+gossips
+gossipy
+gossoon
+got
+gotcha
+gotten
+gouache
+gouda
+gouge
+gouged
+gouger
+gouges
+gouging
+goulash
+gourd
+gourmand
+gourmandise
+gourmandised
+gourmandises
+gourmandising
+gourmands
+gourmand's
+gourmet
+gourmets
+gout
+goutweed
+gouty
+govern
+governable
+governance
+governed
+governess
+governesses
+governing
+government
+governmental
+governmentally
+governments
+government's
+governor
+governors
+governor's
+governorship
+governs
+gown
+gowned
+gowns
+goy
+goys
+grab
+grabbed
+grabber
+grabbers
+grabber's
+grabbier
+grabbing
+grabble
+grabbled
+grabbles
+grabbling
+grabby
+grabs
+grace
+graced
+graceful
+gracefully
+gracefulness
+graceless
+gracelessly
+gracelessness
+graces
+gracility
+gracing
+gracious
+graciously
+graciousness
+grackle
+grad
+gradable
+gradate
+gradated
+gradates
+gradating
+gradation
+gradational
+gradationally
+gradations
+gradation's
+grade
+graded
+grader
+graders
+grades
+gradient
+gradients
+gradient's
+grading
+gradiometer
+gradiometers
+gradiometer's
+grads
+gradual
+gradualism
+gradualist
+gradualists
+gradually
+gradualness
+graduate
+graduated
+graduates
+graduating
+graduation
+graduations
+graduator
+graffiti
+graffito
+graft
+grafted
+grafter
+grafting
+grafts
+graham
+grahams
+graham's
+grail
+grails
+grain
+grained
+grainer
+grainier
+graininess
+graining
+grains
+grainy
+grallatorial
+gramercy
+gramicidin
+grammar
+grammarian
+grammarians
+grammars
+grammar's
+grammatical
+grammaticality
+grammatically
+grammaticalness
+grammatology
+gramme
+grammes
+gramophone
+gramophones
+gramophone's
+gramps
+grampus
+granadilla
+granaries
+granary
+granary's
+grand
+grandad
+grandaddy
+grandam
+grandame
+grandaunt
+grandchild
+grandchildren
+granddad
+granddaughter
+granddaughters
+grandee
+grander
+grandest
+grandeur
+grandfather
+grandfatherly
+grandfathers
+grandfather's
+grandiloquence
+grandiloquent
+grandiloquently
+grandiose
+grandiosely
+grandiosity
+grandioso
+grandkid
+grandkids
+grandkid's
+grandly
+grandma
+grandma's
+grandmaster
+grandmasters
+grandmother
+grandmotherly
+grandmothers
+grandmother's
+grandnephew
+grandnephews
+grandness
+grandniece
+grandnieces
+grandpa
+grandparent
+grandparental
+grandparenthood
+grandparents
+grandpas
+grandpa's
+grandsire
+grandsires
+grandson
+grandsons
+grandson's
+grandstand
+grandstanded
+grandstander
+grandstanding
+grandstands
+granduncle
+granduncles
+grange
+granger
+grangerise
+grangerised
+grangeriser
+grangerises
+grangerising
+granges
+granite
+graniteware
+granitite
+grannies
+granny
+granola
+granolith
+grant
+grantable
+granted
+grantee
+granter
+granting
+grantor
+grants
+grant's
+granular
+granularity
+granularly
+granulate
+granulated
+granulates
+granulating
+granulation
+granulations
+granulator
+granule
+granules
+granulise
+granulises
+granulose
+grape
+grapefruit
+grapes
+grape's
+grapeshot
+grapevine
+grapevines
+grapevine's
+graph
+graphed
+grapheme
+graphic
+graphical
+graphically
+graphicness
+graphics
+graphing
+graphite
+graphitic
+graphitisation
+graphitise
+graphitises
+graphologist
+graphology
+graphs
+graph's
+grapier
+grapnel
+grappa
+grapple
+grappled
+grappler
+grapples
+grappling
+graptolite
+grapy
+grasp
+graspable
+grasped
+grasper
+grasping
+graspingly
+graspingness
+grasps
+grass
+grassed
+grassers
+grasses
+grasshopper
+grasshoppers
+grasshopper's
+grassier
+grassiest
+grassing
+grassland
+grasslands
+grassroots
+grassy
+grate
+grated
+grateful
+gratefully
+gratefulness
+grater
+grates
+graticule
+gratification
+gratifications
+gratified
+gratify
+gratifying
+gratifyingly
+gratin
+grating
+gratingly
+gratings
+gratis
+gratitude
+gratuities
+gratuitous
+gratuitously
+gratuitousness
+gratuity
+gratuity's
+grave
+gravel
+gravelled
+gravelling
+gravels
+gravely
+graven
+graveness
+graver
+gravers
+graves
+gravest
+gravestone
+gravestones
+graveyard
+graveyards
+gravid
+gravidity
+gravies
+gravimeter
+gravimeters
+gravimeter's
+gravimetric
+gravimetrical
+gravimetrically
+graving
+gravitate
+gravitated
+gravitates
+gravitating
+gravitation
+gravitational
+gravitationally
+gravitations
+gravities
+graviton
+gravitons
+graviton's
+gravity
+gravure
+gravy
+grayling
+graylings
+graze
+grazed
+grazer
+grazes
+grazier
+graziers
+grazing
+grease
+greased
+greaseless
+greasepaint
+greasepaints
+greaseproof
+greaser
+greasers
+greases
+greasewood
+greasier
+greasily
+greasiness
+greasing
+greasy
+great
+greatcoat
+greatcoats
+greaten
+greatened
+greatening
+greater
+greatest
+greatly
+greatness
+greats
+greave
+greaves
+grebe
+greed
+greedier
+greedily
+greediness
+greedy
+green
+greenback
+greenbelt
+greenbrier
+greened
+greener
+greenery
+greenest
+greenfinch
+greenfly
+greengage
+greengrocer
+greengrocery
+greenhead
+greenheart
+greenhorn
+greenhouse
+greenhouses
+greenhouse's
+greening
+greenish
+greenling
+greenly
+greenness
+greenroom
+greens
+greensand
+greenshank
+greensickness
+greenstick
+greenstone
+greensward
+greenwood
+greet
+greeted
+greeter
+greeting
+greetings
+greets
+gregarious
+gregariously
+gregariousness
+gremial
+gremlin
+gremlins
+gremlin's
+gremmie
+gremmies
+grenade
+grenades
+grenade's
+grenadier
+grenadine
+gressorial
+grew
+grey
+greybeard
+greyest
+greyhen
+greyhound
+greying
+greylag
+greywacke
+gribble
+grid
+griddle
+griddlecake
+gridiron
+gridlock
+gridlock's
+grids
+grid's
+grief
+griefless
+grief's
+grievance
+grievances
+grievance's
+grievant
+grieve
+grieved
+griever
+grievers
+grieves
+grieving
+grievingly
+grievous
+grievously
+grievousness
+griffin
+grill
+grillage
+grille
+grilled
+griller
+grilling
+grillroom
+grills
+grillwork
+grilse
+grim
+grimace
+grimaced
+grimacer
+grimaces
+grimacing
+grimalkin
+grime
+grimed
+grimes
+grimier
+griming
+grimly
+grimmer
+grimmest
+grimness
+grimy
+grin
+grind
+grinder
+grinders
+grindery
+grinding
+grindingly
+grindings
+grinds
+grindstone
+grindstones
+grindstone's
+gringo
+gringos
+grinned
+grinner
+grinning
+grinningly
+grins
+grip
+gripe
+griped
+griper
+gripes
+griping
+grippe
+gripped
+gripper
+grippers
+gripper's
+gripping
+grippingly
+grips
+grisaille
+griseous
+grisliness
+grisly
+grist
+gristle
+gristlier
+gristliness
+gristly
+gristmill
+grit
+grits
+grit's
+gritted
+grittier
+grittily
+grittiness
+gritting
+gritty
+grivet
+grizzle
+grizzled
+grizzles
+grizzlier
+grizzling
+grizzly
+groan
+groaned
+groaner
+groaners
+groaning
+groans
+groat
+grocer
+groceries
+grocers
+grocer's
+grocery
+grockle
+grog
+groggier
+groggily
+grogginess
+groggy
+grogram
+grogshop
+groin
+grommet
+groom
+groomed
+grooming
+grooms
+groom's
+groomsman
+groomsmen
+groove
+grooved
+groover
+grooves
+groovier
+grooving
+groovy
+grope
+groped
+groper
+gropes
+groping
+grosbeak
+grosgrain
+gross
+grossed
+grosser
+grosses
+grossest
+grossing
+grossly
+grossness
+grossularite
+grot
+grotesque
+grotesquely
+grotesqueness
+grotesquery
+grotto
+grottoes
+grottos
+grotto's
+grouch
+grouched
+grouches
+grouchier
+grouchily
+grouchiness
+grouching
+grouch's
+grouchy
+ground
+groundage
+grounded
+grounder
+grounders
+groundhog
+groundhogs
+groundhog's
+grounding
+groundless
+groundlessly
+groundlessness
+groundling
+groundmass
+groundnut
+groundout
+grounds
+groundsel
+groundsheet
+groundskeepers
+groundsman
+groundspeed
+groundswell
+groundwater
+groundwork
+group
+grouped
+grouper
+groupie
+groupies
+groupie's
+grouping
+groupings
+groups
+group's
+grouse
+groused
+grouser
+grouses
+grousing
+grout
+grouted
+grouter
+grouting
+grouts
+grove
+grovel
+grovelled
+groveller
+grovellers
+grovelling
+grovellingly
+grovels
+grover
+grovers
+groves
+grow
+grower
+growers
+growing
+growingly
+growl
+growled
+growler
+growling
+growlingly
+growls
+grown
+grownup
+grownups
+grownup's
+grows
+growth
+growths
+grub
+grubber
+grubbier
+grubbily
+grubbiness
+grubbing
+grubby
+grubs
+grub's
+grubstake
+grudge
+grudged
+grudger
+grudges
+grudge's
+grudging
+grudgingly
+gruel
+gruelling
+gruellingly
+gruesome
+gruesomely
+gruesomeness
+gruff
+gruffly
+gruffness
+grugru
+grumble
+grumbled
+grumbler
+grumbles
+grumbling
+grumblingly
+grummet
+grump
+grumped
+grumpier
+grumpily
+grumpiness
+grumping
+grumps
+grumpy
+grunion
+grunt
+grunted
+grunter
+grunting
+grunts
+grysbok
+guacamole
+guacharo
+guaiacum
+guan
+guanaco
+guanidine
+guanine
+guano
+guarantee
+guaranteed
+guaranteeing
+guarantees
+guarantor
+guaranty
+guard
+guardant
+guarded
+guardedly
+guardedness
+guarder
+guardhouse
+guardian
+guardians
+guardian's
+guardianship
+guarding
+guardrail
+guardroom
+guards
+guardsman
+guava
+guayule
+gubbins
+gubernatorial
+guck
+gudgeon
+guenon
+guerdon
+guerrilla
+guerrillas
+guerrilla's
+guess
+guessed
+guesser
+guesses
+guessing
+guesstimate
+guesswork
+guest
+guesthouse
+guests
+guest's
+guff
+guffaw
+guffaws
+guidable
+guidance
+guide
+guidebook
+guidebooks
+guidebook's
+guided
+guideline
+guidelines
+guideline's
+guidepost
+guideposts
+guider
+guides
+guiding
+guild
+guilder
+guildhall
+guildsman
+guile
+guileful
+guilefully
+guilefulness
+guileless
+guilelessly
+guillemot
+guilloche
+guillotine
+guillotined
+guillotines
+guillotine's
+guillotining
+guilt
+guiltier
+guiltiest
+guiltily
+guiltiness
+guiltless
+guiltlessly
+guiltlessness
+guilty
+guinea
+guineas
+guipure
+guise
+guised
+guises
+guise's
+guising
+guitar
+guitarfish
+guitarist
+guitarists
+guitars
+guitar's
+gulag
+gulags
+gulch
+gulches
+gulch's
+gulden
+gules
+gulf
+gulfs
+gulf's
+gulfweed
+gull
+gulled
+gullet
+gullets
+gullibility
+gullible
+gullibly
+gullied
+gullies
+gulling
+gulls
+gully
+gully's
+gulp
+gulped
+gulper
+gulps
+gum
+gumbo
+gumboil
+gumdrop
+gumdrops
+gumdrop's
+gummed
+gummer
+gummier
+gumminess
+gumming
+gummite
+gummosis
+gummous
+gummy
+gumption
+gums
+gum's
+gumshoe
+gun
+gunboat
+guncotton
+gundog
+gunfight
+gunfighter
+gunfights
+gunfire
+gunflint
+gunge
+gunk
+gunlock
+gunman
+gunmen
+gunmetal
+gunned
+gunnel
+gunner
+gunners
+gunner's
+gunnery
+gunning
+gunny
+gunnysack
+gunpaper
+gunplay
+gunpoint
+gunpowder
+gunrunner
+gunrunning
+guns
+gun's
+gunship
+gunshot
+gunslinger
+gunsmith
+gunstock
+gunter
+gunwale
+guppies
+guppy
+gurgitation
+gurgle
+gurgled
+gurgles
+gurgling
+gurnard
+gurney
+gurneys
+guru
+gurus
+guru's
+gush
+gushed
+gusher
+gushes
+gushier
+gushiness
+gushing
+gushy
+gusset
+gussets
+gust
+gustative
+gustatory
+gustily
+gustiness
+gusto
+gustoes
+gusts
+gust's
+gusty
+gut
+gutbucket
+gutless
+gutlessness
+guts
+gutsier
+gutsy
+gutta
+gutted
+gutter
+guttered
+guttering
+gutters
+guttersnipe
+gutting
+guttural
+gutturalness
+guv
+guy
+guyed
+guying
+guys
+guy's
+guzzle
+guzzled
+guzzler
+guzzles
+guzzling
+gym
+gymkhana
+gymnasiarch
+gymnasium
+gymnasiums
+gymnasium's
+gymnast
+gymnastic
+gymnastically
+gymnastics
+gymnasts
+gymnast's
+gymnosperm
+gyms
+gymslip
+gynaecocracy
+gynaecologic
+gynaecological
+gynaecologist
+gynaecologists
+gynaecologist's
+gynaecology
+gynaecology's
+gyniatrics
+gyp
+gypping
+gypsies
+gypsum
+gypsy
+gypsy's
+gyrate
+gyrated
+gyrates
+gyrating
+gyration
+gyrations
+gyrator
+gyrators
+gyratory
+gyre
+gyrfalcon
+gyro
+gyrocompass
+gyroplane
+gyros
+gyroscope
+gyroscopes
+gyroscope's
+gyroscopic
+gyroscopically
+gyrostabiliser
+gyrostat
+gyrostatic
+gyrostatics
+h's
+ha
+habeas
+haberdasher
+haberdasheries
+haberdashery
+habiliment
+habilitate
+habilitated
+habilitates
+habilitating
+habit
+habitability
+habitable
+habitableness
+habitably
+habitant
+habitants
+habitat
+habitation
+habitations
+habitation's
+habitats
+habitat's
+habits
+habit's
+habitual
+habitually
+habitualness
+habituate
+habituated
+habituates
+habituating
+habituation
+habitude
+habitudes
+hachure
+hacienda
+haciendas
+hack
+hackamore
+hackberry
+hackbut
+hacked
+hacker
+hackers
+hacker's
+hacking
+hackle
+hackled
+hackler
+hackles
+hackling
+hackmatack
+hackney
+hackneyed
+hackneying
+hackneys
+hacks
+hacksaw
+hacksaws
+hackwork
+had
+haddock
+haddocks
+hade
+hadn't
+haemachrome
+haemal
+haematic
+haematin
+haematinic
+haematite
+haematocele
+haematocryal
+haematogenous
+haematoid
+haematological
+haematology
+haematoma
+haematopoiesis
+haematosis
+haematothermal
+haematoxylin
+haemic
+haemin
+haemocyte
+haemocytometer
+haemodialysis
+haemoglobin
+haemoid
+haemolysin
+haemolysis
+haemophilia
+haemophiliac
+haemophilic
+haemoptysis
+haemorrhage
+haemorrhagic
+haemorrhoidectomy
+haemorrhoids
+haemostasis
+haemostat
+haemostatic
+hafiz
+hafnium
+haft
+hag
+hagfish
+haggadic
+haggadist
+haggadistic
+haggard
+haggardly
+haggardness
+haggis
+haggish
+haggle
+haggled
+haggler
+haggles
+haggling
+hagiocracy
+hagiographer
+hagiographies
+hagiography
+hagiography's
+hagiolatry
+hagiology
+hagioscope
+hah
+haiku
+hail
+hailed
+hailer
+hailing
+hails
+hailstone
+hailstorm
+hair
+hairball
+hairbreadth
+hairbrush
+haircloth
+haircut
+haircuts
+haircut's
+haircutter
+haircutting
+hairdo
+hairdos
+hairdresser
+hairdressers
+hairdresser's
+hairdressing
+haired
+hairgrip
+hairier
+hairiness
+hairless
+hairlessness
+hairline
+hairnet
+hairpiece
+hairpin
+hairs
+hair's
+hairsbreadth
+hairspring
+hairsprings
+hairspring's
+hairstreak
+hairstyle
+hairstyles
+hairstyle's
+hairstyling
+hairstylist
+hairworm
+hairy
+hajj
+hake
+halation
+halberd
+halberdier
+halcyon
+hale
+haler
+half
+halfback
+halfbacks
+halfbeak
+halfpennies
+halfpenny
+halftime
+halftone
+halfway
+halfwit
+halibut
+halibuts
+halide
+halides
+haling
+halite
+halitosis
+hall
+hallelujah
+hallelujahs
+halliards
+hallmark
+hallmarked
+hallmarking
+hallmarks
+hallmark's
+hallo
+halloo
+halloos
+hallow
+hallowed
+hallowing
+hallows
+halls
+hall's
+hallucinate
+hallucinated
+hallucinates
+hallucinating
+hallucination
+hallucinations
+hallucinatory
+hallucinogen
+hallucinogenic
+hallucinogens
+hallway
+hallways
+hallway's
+halo
+halocarbon
+halocline
+haloes
+halogen
+halogens
+halophyte
+halos
+halothane
+halt
+halted
+halter
+haltered
+haltering
+halters
+halting
+haltingly
+halts
+halvah
+halve
+halved
+halves
+halving
+halyard
+ham
+hamburger
+hamburgers
+hamburger's
+hamlet
+hamlets
+hamlet's
+hammer
+hammered
+hammerer
+hammerhead
+hammering
+hammerless
+hammerlock
+hammers
+hammertoe
+hammier
+hamming
+hammock
+hammocks
+hammock's
+hammy
+hamper
+hampered
+hampering
+hampers
+hams
+ham's
+hamster
+hamsters
+hamstring
+hamstrung
+hanaper
+hand
+handbag
+handbags
+handbag's
+handball
+handbill
+handbook
+handbooks
+handbook's
+handbrake
+handbreadth
+handcar
+handcart
+handclasp
+handcraft
+handcuff
+handcuffed
+handcuffing
+handcuffs
+handed
+handedness
+handful
+handfuls
+handgrip
+handgun
+handguns
+handhold
+handicap
+handicapped
+handicapper
+handicapping
+handicaps
+handicap's
+handicraft
+handicrafts
+handicraftsman
+handicraftsmen
+handier
+handiest
+handily
+handiness
+handing
+handiwork
+handkerchief
+handkerchiefs
+handkerchief's
+handle
+handlebar
+handlebars
+handled
+handler
+handlers
+handles
+handless
+handling
+handmade
+handmaid
+handmaiden
+handout
+handouts
+handpick
+handpicked
+handprint
+handprints
+handprint's
+handrail
+hands
+handsaw
+handset
+handsets
+handshake
+handshakes
+handshake's
+handshaking
+handsome
+handsomely
+handsomeness
+handsomer
+handsomest
+handspike
+handspikes
+handspring
+handsprings
+handstand
+handstands
+handwork
+handwrite
+handwrites
+handwriting
+handwritings
+handwritten
+handy
+handyman
+handymen
+hang
+hangar
+hangars
+hangar's
+hangbird
+hangdog
+hanged
+hanger
+hangers
+hanging
+hangman
+hangman's
+hangmen
+hangnail
+hangnails
+hangnail's
+hangout
+hangouts
+hangover
+hangovers
+hangover's
+hangs
+hangtag
+hank
+hanker
+hankered
+hankerer
+hankering
+hankers
+hankie
+hankies
+hanky
+hansom
+hap
+haphazard
+haphazardly
+haphazardness
+haphtarah
+hapless
+haplessly
+haplessness
+haplite
+haplography
+haploid
+haplology
+haply
+happen
+happenchance
+happened
+happening
+happenings
+happens
+happenstance
+happier
+happiest
+happily
+happiness
+happing
+happy
+harangue
+harangued
+haranguer
+harangues
+haranguing
+harass
+harassed
+harasser
+harasses
+harassing
+harassment
+harassments
+harbinger
+harbingers
+harbour
+harbourage
+harbourages
+harboured
+harbourer
+harbourers
+harbourer's
+harbouring
+harbourless
+harbours
+harbour's
+hard
+hardback
+hardball
+hardboard
+hardboiled
+hardbound
+hardcopies
+hardcopy
+hardcover
+harden
+hardened
+hardener
+hardening
+hardens
+harder
+hardest
+hardhack
+hardhat
+hardhead
+hardhearted
+hardheartedly
+hardheartedness
+hardier
+hardihood
+hardily
+hardiness
+hardly
+hardness
+hardpan
+hardscrabble
+hardship
+hardships
+hardship's
+hardstand
+hardtack
+hardtop
+hardtops
+hardware
+hardwire
+hardwired
+hardwires
+hardwiring
+hardwood
+hardwoods
+hardworking
+hardy
+hare
+harebell
+harebrained
+harelip
+harelips
+harem
+hares
+hare's
+haricot
+hark
+harked
+harken
+harking
+harks
+harlequin
+harlequinade
+harlot
+harlotry
+harlots
+harlot's
+harm
+harmed
+harmer
+harmful
+harmfully
+harmfulness
+harming
+harmless
+harmlessly
+harmlessness
+harmonic
+harmonica
+harmonically
+harmonicas
+harmonica's
+harmonics
+harmonies
+harmonious
+harmoniously
+harmoniousness
+harmonisation
+harmonisations
+harmonisation's
+harmonise
+harmonised
+harmoniser
+harmonisers
+harmonises
+harmonising
+harmonist
+harmonium
+harmony
+harms
+harness
+harnessed
+harnesser
+harnesses
+harnessing
+harp
+harped
+harpers
+harpies
+harping
+harpings
+harpist
+harpoon
+harpooned
+harpooner
+harpooning
+harpoons
+harpoon's
+harps
+harpsichord
+harpsichordist
+harpsichords
+harpy
+harpy's
+harquebus
+harquebusier
+harridan
+harried
+harrier
+harrow
+harrowed
+harrower
+harrowing
+harrows
+harrumph
+harrumphed
+harrumphing
+harrumphs
+harrying
+harsh
+harshening
+harsher
+harshest
+harshly
+harshness
+hart
+hartebeest
+harvest
+harvestable
+harvested
+harvester
+harvesters
+harvesting
+harvestman
+harvestmen
+harvests
+has
+hash
+hashed
+hasher
+hashes
+hashing
+hashish
+hasn't
+hasp
+hasps
+hassle
+hassled
+hassles
+hassling
+hassock
+hassocks
+hast
+hastate
+haste
+hasted
+hasten
+hastened
+hastener
+hastening
+hastens
+hastier
+hastiest
+hastily
+hastiness
+hasting
+hasty
+hat
+hatband
+hatbox
+hatch
+hatchability
+hatchback
+hatcheck
+hatched
+hatchelled
+hatchelling
+hatcheries
+hatchery
+hatchery's
+hatches
+hatchet
+hatchets
+hatchet's
+hatching
+hatchling
+hatchment
+hatchments
+hatchway
+hate
+hated
+hateful
+hatefully
+hatefulness
+hater
+hates
+hath
+hating
+hatless
+hatpin
+hatred
+hats
+hat's
+hatter
+hatters
+hauberk
+haughtier
+haughtily
+haughtiness
+haughty
+haul
+haulage
+hauled
+hauler
+haulers
+haulier
+hauling
+haulm
+hauls
+haunch
+haunches
+haunch's
+haunt
+haunted
+haunting
+hauntingly
+haunts
+hausfrau
+hautboy
+haute
+hauteur
+have
+haven
+havens
+haven's
+haven't
+haversack
+haversacks
+haversack's
+haves
+having
+havoc
+havocked
+havocking
+havocs
+haw
+hawfinch
+hawing
+hawk
+hawked
+hawker
+hawkers
+hawking
+hawkish
+hawks
+hawksbill
+hawkweed
+hawse
+hawsehole
+hawser
+hawthorn
+hay
+haycock
+hayfield
+hayfields
+hayfork
+haying
+hayloft
+haylofts
+hayloft's
+haymaker
+haymaking
+haymow
+hayrack
+hayrick
+hayride
+hays
+hayseed
+hayseeds
+haystack
+haystacks
+haywire
+hazard
+hazarded
+hazarding
+hazardous
+hazardously
+hazardousness
+hazards
+hazard's
+haze
+hazed
+hazel
+hazelnut
+hazelnuts
+hazer
+hazes
+haze's
+hazier
+haziest
+hazily
+haziness
+hazing
+hazy
+he
+head
+headache
+headaches
+headache's
+headachy
+headband
+headboard
+headboards
+headcount
+headdress
+headed
+header
+headers
+headfirst
+headforemost
+headgear
+headier
+headily
+headiness
+heading
+headings
+heading's
+headlamp
+headland
+headlands
+headland's
+headless
+headlight
+headlights
+headline
+headlined
+headliner
+headlines
+headlining
+headlock
+headlong
+headman
+headman's
+headmaster
+headmastership
+headmen
+headmen's
+headmistress
+headmost
+headphone
+headphones
+headphone's
+headpiece
+headpin
+headquarter
+headquartered
+headquarters
+headrace
+headrest
+headroom
+heads
+head's
+headsail
+headscarf
+headset
+headsets
+headship
+headshrinker
+headsman
+headsmen
+headspring
+headstall
+headstand
+headstands
+headstock
+headstone
+headstones
+headstream
+headstrong
+headwaiter
+headwall
+headwalls
+headwater
+headwaters
+headway
+headwind
+headwinds
+headwind's
+headword
+headwork
+heady
+heal
+healed
+healer
+healers
+healing
+heals
+health
+healthful
+healthfully
+healthfulness
+healthier
+healthiest
+healthily
+healthiness
+healthy
+heap
+heaped
+heaping
+heaps
+hear
+heard
+hearer
+hearers
+hearing
+hearings
+hearken
+hearkened
+hearkening
+hears
+hearsay
+hearse
+hearses
+heart
+heartache
+heartaches
+heartache's
+heartbeat
+heartbeats
+heartbreak
+heartbreaking
+heartbreakingly
+heartbroken
+heartburn
+heartburning
+hearted
+heartedly
+hearten
+heartened
+heartening
+heartens
+heartfelt
+hearth
+hearths
+hearthstone
+heartier
+hearties
+heartiest
+heartily
+heartiness
+heartland
+heartland's
+heartless
+heartlessly
+heartlessness
+heartrending
+heartrendingly
+hearts
+heart's
+heartsease
+heartsick
+heartsickness
+heartstring
+heartstrings
+heartthrob
+heartthrobs
+heartthrob's
+heartwood
+heartworm
+hearty
+heat
+heated
+heatedly
+heater
+heaters
+heath
+heathen
+heathendom
+heathenise
+heathenised
+heathenises
+heathenish
+heathenishly
+heathenising
+heathenism
+heathenry
+heather
+heathery
+heating
+heatless
+heats
+heatstroke
+heave
+heaved
+heaven
+heavenliness
+heavenly
+heavens
+heaven's
+heavenward
+heavenwards
+heaver
+heavers
+heaves
+heavier
+heavies
+heaviest
+heavily
+heaviness
+heaving
+heavy
+heavyhearted
+heavyset
+heavyweight
+hebdomad
+hebdomadal
+hebdomadally
+hebephrenic
+hebetation
+hebetudinous
+hecatomb
+heck
+heckle
+heckled
+heckler
+hecklers
+heckles
+heckling
+hectare
+hectares
+hectic
+hectically
+hectograph
+hectolitre
+hectometre
+hectometres
+hectometre's
+hector
+he'd
+heddle
+hedge
+hedged
+hedgehog
+hedgehogs
+hedgehog's
+hedgehop
+hedgehopper
+hedger
+hedgerow
+hedges
+hedging
+hedonic
+hedonically
+hedonics
+hedonism
+hedonist
+hedonistic
+hedonistically
+hedonists
+heed
+heeded
+heedful
+heedfully
+heedfulness
+heeding
+heedless
+heedlessly
+heedlessness
+heeds
+heehaw
+heel
+heelball
+heeled
+heeler
+heelers
+heeling
+heelless
+heelpiece
+heelpost
+heels
+heeltap
+heft
+hefted
+heftier
+heftily
+heftiness
+hefts
+hefty
+hegemonic
+hegemonies
+hegemony
+hegira
+heifer
+height
+heighten
+heightened
+heightening
+heightens
+heights
+heinous
+heinously
+heinousness
+heir
+heiress
+heiresses
+heiress's
+heirless
+heirloom
+heirs
+heir's
+heist
+heisted
+heisting
+heists
+heist's
+held
+heldentenor
+heliacal
+heliacally
+helical
+helically
+helices
+helicograph
+helicon
+helicopter
+helicopters
+heliocentric
+heliogram
+heliograms
+heliogram's
+heliograph
+heliographer
+heliographic
+heliography
+heliolatrous
+heliolatry
+heliolithic
+heliometers
+heliometer's
+heliostat
+heliotherapy
+heliotrope
+heliotropically
+heliotropism
+heliotype
+heliozoan
+helipad
+heliport
+helium
+helix
+helixes
+hell
+he'll
+hellbender
+hellbox
+hellcat
+hellebore
+hellfire
+hellgrammite
+hellhole
+hellhound
+hellion
+hellish
+hellishly
+hellishness
+hello
+hellos
+hells
+hell's
+helm
+helmet
+helmeted
+helmets
+helmet's
+helmsman
+helmsmen
+helot
+helotism
+help
+helped
+helper
+helpers
+helpful
+helpfully
+helpfulness
+helping
+helpless
+helplessly
+helplessness
+helpmate
+helpmeet
+helps
+helve
+helved
+helves
+helving
+hem
+hematite
+hemelytron
+hemichordate
+hemicycle
+hemidemisemiquaver
+hemisphere
+hemispheres
+hemisphere's
+hemispheric
+hemispherical
+hemispheroid
+hemistich
+hemiterpene
+hemline
+hemlock
+hemlocks
+hemlock's
+hemmed
+hemmer
+hemming
+hemorrhagic
+hemp
+hempen
+hems
+hem's
+hemstitch
+hen
+henbane
+henbit
+hence
+henceforth
+henceforward
+henchman
+henchmen
+hencoop
+hendecagon
+hendecahedron
+hendecasyllabic
+hendecasyllable
+hendiadys
+henequen
+henge
+henhouse
+henna
+hennery
+henotheism
+henotheist
+henotheistic
+henpeck
+henpecked
+hens
+hen's
+hep
+heparin
+hepatic
+hepatica
+hepatise
+hepatised
+hepatises
+hepatising
+hepatitis
+hepcat
+heptagon
+heptagonal
+heptahedron
+heptameter
+heptameters
+heptameter's
+heptangular
+heptastich
+heptavalent
+her
+herald
+heralded
+heraldic
+heraldically
+heralding
+heraldry
+heralds
+herb
+herbaceous
+herbage
+herbal
+herbalist
+herbarium
+herbicidal
+herbicide
+herbicides
+herbicide's
+herbivore
+herbivorous
+herblike
+herbs
+herb's
+herby
+herd
+herded
+herder
+herding
+herds
+herdsman
+herdsmen
+here
+hereabout
+hereabouts
+hereafter
+hereby
+hereditable
+hereditarianism
+hereditarily
+hereditary
+hereditist
+heredity
+herein
+hereinabove
+hereinafter
+hereinbefore
+hereinto
+hereof
+hereon
+here's
+heresiarch
+heresy
+heretic
+heretical
+heretically
+heretics
+heretic's
+hereto
+heretofore
+hereunder
+hereunto
+hereupon
+herewith
+heritable
+heritage
+heritages
+heritor
+herm
+hermaphrodite
+hermaphrodites
+hermaphrodite's
+hermaphroditic
+hermaphroditically
+hermeneutic
+hermeneutical
+hermeneutically
+hermeneutics
+hermetic
+hermetical
+hermetically
+hermit
+hermitage
+hermitages
+hermitage's
+hermits
+hermit's
+hernia
+hernias
+hernia's
+herniated
+hero
+heroes
+heroic
+heroically
+heroics
+heroin
+heroine
+heroines
+heroine's
+heroism
+heron
+heronry
+herons
+heron's
+hero's
+herpes
+herpetic
+herpetological
+herpetologically
+herpetologist
+herpetologists
+herpetology
+herring
+herringbone
+herrings
+herring's
+hers
+herself
+hertz
+he's
+hesitance
+hesitancy
+hesitant
+hesitantly
+hesitate
+hesitated
+hesitates
+hesitating
+hesitatingly
+hesitation
+hesitations
+hest
+hetaerism
+hetero
+heteroclite
+heterodox
+heterodoxy
+heterodyne
+heteroecism
+heterogamous
+heterogeneity
+heterogeneous
+heterogeneously
+heterogeneousness
+heterogynous
+heteronomy
+heteronym
+heterophony
+heterosexual
+heterosexuality
+heterosexually
+heterosexuals
+heterozygous
+heuristic
+heuristically
+heuristics
+heuristic's
+hew
+hewed
+hewing
+hewn
+hews
+hex
+hexachlorophene
+hexachord
+hexadecane
+hexadecimal
+hexadecimals
+hexagon
+hexagonal
+hexagonally
+hexagons
+hexagram
+hexahedron
+hexameter
+hexane
+hexangular
+hexapod
+hexapody
+hexastich
+hey
+heyday
+hi
+hiatus
+hiatuses
+hibachi
+hibernal
+hibernate
+hibernated
+hibernates
+hibernating
+hibernation
+hibernator
+hibiscus
+hic
+hiccough
+hiccoughed
+hiccoughing
+hick
+hickories
+hickory
+hicks
+hid
+hidalgo
+hidden
+hide
+hideaway
+hidebound
+hided
+hideous
+hideously
+hideousness
+hideout
+hideouts
+hideout's
+hider
+hides
+hiding
+hierarch
+hierarchal
+hierarchic
+hierarchical
+hierarchically
+hierarchies
+hierarchy
+hierarchy's
+hieratic
+hieratically
+hierocracy
+hierodule
+hieroglyph
+hieroglyphic
+hieroglyphically
+hieroglyphics
+hierogram
+hierology
+hierophant
+high
+highball
+highbinder
+highborn
+highboy
+highbred
+highbrow
+highbrowed
+highchair
+higher
+highest
+highfalutin
+highhanded
+highjack
+highland
+highlander
+highlands
+highlife
+highlight
+highlighted
+highlighting
+highlights
+highline
+highly
+highness
+highnesses
+highness's
+highroad
+highs
+hightail
+highway
+highwayman
+highwaymen
+highways
+highway's
+hijack
+hijacked
+hijacker
+hijackers
+hijacking
+hijacks
+hijinks
+hike
+hiked
+hiker
+hikers
+hikes
+hiking
+hilarious
+hilariously
+hilariousness
+hilarity
+hill
+hillbilly
+hilled
+hillier
+hilling
+hillock
+hillocks
+hillocky
+hills
+hill's
+hillside
+hilltop
+hilltops
+hilltop's
+hilly
+hilt
+hilts
+hilt's
+him
+himself
+hind
+hindbrain
+hinder
+hindered
+hinderer
+hindering
+hinders
+hindgut
+hindmost
+hindquarter
+hindquarters
+hindrance
+hindrances
+hinds
+hindsight
+hinge
+hinged
+hinges
+hinging
+hint
+hinted
+hinterland
+hinterlands
+hinting
+hints
+hip
+hipbone
+hipped
+hipper
+hippest
+hippie
+hippies
+hipping
+hippo
+hippocampus
+hippocras
+hippodrome
+hippogriff
+hippopotamus
+hippos
+hippy
+hips
+hip's
+hipster
+hipsters
+hiragana
+hircine
+hire
+hired
+hireling
+hirelings
+hirer
+hirers
+hires
+hiring
+hirsute
+hirsuteness
+his
+hispid
+hiss
+hissed
+hisser
+hisses
+hissing
+histamine
+histaminic
+histogram
+histograms
+histogram's
+histological
+histologist
+histology
+histolysis
+histolytic
+historian
+historians
+historian's
+historic
+historical
+historically
+historicalness
+historicism
+historicist
+historicity
+histories
+historiographer
+historiography
+history
+history's
+histrionic
+histrionically
+histrionics
+hit
+hitch
+hitched
+hitcher
+hitches
+hitchhike
+hitchhiked
+hitchhiker
+hitchhikers
+hitchhikes
+hitchhiking
+hitching
+hither
+hithermost
+hitherto
+hitherward
+hitless
+hits
+hit's
+hitter
+hitters
+hitter's
+hitting
+hive
+hiveless
+hives
+hiving
+hmm
+ho
+hoagie
+hoagies
+hoar
+hoard
+hoarded
+hoarder
+hoarding
+hoards
+hoarfrost
+hoarier
+hoariness
+hoarse
+hoarsely
+hoarsen
+hoarsened
+hoarseness
+hoarsening
+hoarser
+hoarsest
+hoary
+hoatzin
+hoax
+hoaxed
+hoaxer
+hoaxes
+hoaxing
+hoax's
+hob
+hobbies
+hobble
+hobbled
+hobbledehoy
+hobbler
+hobbles
+hobbling
+hobby
+hobbyhorse
+hobbyist
+hobbyists
+hobbyist's
+hobby's
+hobgoblin
+hobnail
+hobnailed
+hobnob
+hobnobbed
+hobnobbing
+hobnobs
+hobo
+hobos
+hoc
+hock
+hockey
+hocking
+hocks
+hocus
+hocused
+hocusing
+hod
+hodgepodge
+hoe
+hoecake
+hoedown
+hoeing
+hoer
+hoes
+hoe's
+hog
+hogback
+hogged
+hogging
+hoggish
+hoggishly
+hoggishness
+hogmanay
+hogs
+hog's
+hogshead
+hogtie
+hogwash
+hogweed
+hoi
+hoicks
+hoist
+hoisted
+hoister
+hoisting
+hoists
+hokum
+hold
+holdall
+holdalls
+holdback
+holder
+holders
+holdfast
+holding
+holdings
+holdout
+holdouts
+holdover
+holdovers
+holds
+hole
+holed
+holes
+hole's
+holey
+holiday
+holidaymaker
+holidays
+holiday's
+holier
+holies
+holily
+holiness
+holing
+holism
+holistic
+holistically
+hollandaise
+holler
+hollered
+hollering
+hollers
+hollies
+hollow
+hollowed
+hollowing
+hollowly
+hollowness
+hollows
+hollowware
+holly
+hollyhock
+hollyhocks
+holmic
+holmium
+holocaust
+hologram
+holograms
+hologram's
+holograph
+holographic
+holography
+holophrastic
+hols
+holster
+holstered
+holstering
+holsters
+holt
+holy
+holystone
+holystones
+holytide
+homage
+hombre
+homburg
+home
+homebody
+homebound
+homebred
+homebuilder
+homebuilders
+homebuilding
+homebuilt
+homecoming
+homecomings
+homed
+homeland
+homeless
+homelessness
+homelier
+homelike
+homeliness
+homely
+homemade
+homemaker
+homemakers
+homemaker's
+homemaking
+homeopaths
+homeowner
+homeowners
+homeownership
+homer
+homeroom
+homers
+homes
+homesick
+homesickness
+homespun
+homestead
+homesteader
+homesteaders
+homesteads
+homestretch
+hometown
+homeward
+homewards
+homework
+homey
+homicidal
+homicidally
+homicide
+homicides
+homier
+homiletic
+homiletically
+homiletics
+homily
+hominess
+homing
+hominid
+hominoid
+hominy
+homo
+homocentric
+homochromatic
+homodont
+homoeopath
+homoeopathic
+homoeopathically
+homoeopathy
+homoeostasis
+homoeostatic
+homoerotic
+homoeroticism
+homogenate
+homogenates
+homogeneities
+homogeneity
+homogeneity's
+homogeneous
+homogeneously
+homogeneousness
+homogenisation
+homogenisations
+homogenisation's
+homogenise
+homogenised
+homogeniser
+homogenisers
+homogenises
+homogenising
+homogenous
+homogeny
+homograph
+homographic
+homologate
+homologation
+homological
+homologically
+homologise
+homologised
+homologises
+homologising
+homologous
+homologue
+homology
+homomorphism
+homonym
+homonymic
+homonymous
+homonyms
+homonym's
+homonymy
+homophile
+homophobe
+homophobes
+homophobia
+homophone
+homophonic
+homophonous
+homophony
+homopterous
+homorganic
+homos
+homosexual
+homosexuality
+homosexually
+homosexuals
+homunculi
+homunculus
+honcho
+honchos
+hone
+honed
+hones
+honest
+honestly
+honesty
+honey
+honeybee
+honeybees
+honeycomb
+honeycombed
+honeydew
+honeyed
+honeying
+honeymoon
+honeymooned
+honeymooner
+honeymooners
+honeymooning
+honeymoons
+honeys
+honeysuckle
+honing
+honk
+honked
+honker
+honkers
+honkies
+honking
+honks
+honky
+honoraria
+honorarium
+honorary
+honorific
+honour
+honourable
+honourables
+honourably
+honoured
+honouree
+honourer
+honourers
+honourer's
+honouring
+honourless
+honours
+hooch
+hood
+hooded
+hooding
+hoodlum
+hoodlumism
+hoodlums
+hoodoo
+hoodoos
+hoods
+hood's
+hoodwink
+hoodwinked
+hoodwinker
+hoodwinking
+hoodwinks
+hooey
+hoof
+hoofbound
+hoofed
+hoofer
+hoofs
+hoof's
+hook
+hookah
+hooked
+hooker
+hookers
+hooking
+hooknose
+hooks
+hookworm
+hooky
+hooligan
+hooliganism
+hooligans
+hoop
+hoopla
+hoopoe
+hoopoes
+hoops
+hooray
+hoorays
+hooray's
+hoosegow
+hoosegows
+hoot
+hootch
+hooted
+hootenanny
+hooter
+hooters
+hooting
+hoots
+hoover
+hooves
+hop
+hope
+hoped
+hopeful
+hopefully
+hopefulness
+hopefuls
+hopeless
+hopelessly
+hopelessness
+hoper
+hopes
+hophead
+hoping
+hoplite
+hopped
+hopper
+hoppers
+hopper's
+hopping
+hopple
+hoppled
+hopples
+hops
+hopsack
+hopscotch
+horal
+horary
+horde
+hordes
+horde's
+horehound
+horizon
+horizons
+horizon's
+horizontal
+horizontally
+hormonal
+hormonally
+hormone
+hormones
+hormone's
+horn
+hornbeam
+hornbeams
+hornbill
+hornbills
+hornblende
+hornbook
+horned
+hornet
+hornets
+hornet's
+hornier
+horniness
+hornless
+hornlike
+hornpipe
+hornpipes
+hornpipe's
+horns
+hornstone
+horntail
+hornwort
+horny
+horologe
+horologer
+horologic
+horologist
+horologists
+horology
+horoscope
+horoscopes
+horoscopy
+horrendous
+horrendously
+horrent
+horrible
+horribleness
+horribly
+horrid
+horridly
+horridness
+horrific
+horrifically
+horrified
+horrifies
+horrify
+horrifying
+horrifyingly
+horror
+horrors
+horror's
+hors
+horse
+horseback
+horsebox
+horseflesh
+horseflies
+horsefly
+horsehair
+horsehide
+horselaugh
+horseleech
+horseleeches
+horseman
+horsemanship
+horsemen
+horsemint
+horseplay
+horseplayer
+horsepower
+horseradish
+horseradishes
+horses
+horse's
+horseshit
+horseshoe
+horseshoes
+horsetail
+horsewhip
+horsewoman
+horsewomen
+horsier
+horsiness
+horsing
+horst
+horsy
+hortative
+hortatively
+hortatory
+horticultural
+horticulturalist
+horticulture
+horticulturist
+hosanna
+hose
+hosed
+hoses
+hose's
+hosier
+hosiery
+hosing
+hospice
+hospices
+hospitable
+hospitably
+hospital
+hospitalisation
+hospitalisations
+hospitalisation's
+hospitalise
+hospitalised
+hospitalises
+hospitalising
+hospitality
+hospitals
+hospital's
+host
+hostage
+hostages
+hostage's
+hosted
+hostel
+hosteller
+hostelling
+hostelries
+hostelry
+hostels
+hostess
+hostesses
+hostess's
+hostile
+hostilely
+hostilities
+hostility
+hosting
+hosts
+host's
+hot
+hotbed
+hotbox
+hotchpotch
+hotdogs
+hotel
+hotelier
+hotelman
+hotels
+hotel's
+hotfoot
+hotfoots
+hothead
+hotheadedness
+hothouse
+hotly
+hotness
+hotplate
+hotpot
+hotrod
+hotshot
+hotter
+hottest
+hound
+hounded
+hounding
+hounds
+hour
+hourdes
+hourdings
+hourglass
+hourly
+hours
+hour's
+house
+houseboat
+houseboats
+housebound
+houseboy
+houseboys
+housebreak
+housebreaker
+housebreakers
+housebreaking
+housebroken
+houseclean
+housecleaner
+housecleaning
+housecoat
+housed
+housedress
+housefather
+housefathers
+houseflies
+housefly
+housefly's
+houseful
+houseguest
+household
+householder
+householders
+households
+household's
+housekeep
+housekeeper
+housekeepers
+housekeeper's
+housekeeping
+housel
+houseleek
+houseleeks
+houseless
+houselights
+houseline
+housemaid
+housemaids
+houseman
+housemaster
+housemasters
+housemate
+housemates
+housemate's
+housemother
+housemothers
+houseplant
+houseroom
+houses
+house's
+housetop
+housetops
+housetop's
+housewarming
+housewife
+housewifeliness
+housewifely
+housewifery
+housewife's
+housewives
+housework
+housing
+housings
+hove
+hovel
+hovelled
+hovelling
+hovels
+hovel's
+hover
+hovercraft
+hovered
+hoverer
+hovering
+hovers
+how
+howbeit
+howdah
+howdy
+however
+howitzer
+howl
+howled
+howler
+howling
+howls
+how's
+howsoever
+hoyden
+hoydenish
+hrs
+html
+hub
+hubbies
+hubbub
+hubby
+hubcap
+hubcaps
+hubcap's
+hubris
+hubristic
+hubristically
+hubs
+hub's
+huckaback
+huckleberry
+hucklebone
+huckster
+huckstered
+huckstering
+hucksters
+huddle
+huddled
+huddler
+huddles
+huddling
+hue
+hued
+hues
+hue's
+huff
+huffier
+huffiness
+huffish
+huffy
+hug
+huge
+hugely
+hugeness
+huger
+hugest
+huggable
+hugged
+hugger
+huggermugger
+huggers
+hugging
+hugs
+huh
+hula
+hulk
+hulked
+hulking
+hulks
+hull
+hullabaloo
+hullabaloos
+hulled
+huller
+hulling
+hullo
+hulls
+hull's
+hum
+human
+humane
+humanely
+humaneness
+humanisation
+humanisations
+humanisation's
+humanise
+humanised
+humaniser
+humanisers
+humanises
+humanising
+humanism
+humanist
+humanistic
+humanists
+humanitarian
+humanitarianism
+humanitarians
+humanities
+humanity
+humanity's
+humankind
+humanlike
+humanly
+humanness
+humanoid
+humans
+humble
+humblebee
+humbled
+humbleness
+humbler
+humbles
+humblest
+humbling
+humbly
+humbug
+humbugged
+humbuggery
+humbugging
+humdinger
+humdrum
+humeral
+humid
+humidification
+humidified
+humidifier
+humidifiers
+humidifies
+humidify
+humidifying
+humidistat
+humidity
+humidly
+humidor
+humiliate
+humiliated
+humiliates
+humiliating
+humiliatingly
+humiliation
+humiliations
+humility
+hummed
+hummer
+humming
+hummingbird
+hummingbirds
+hummock
+hummocks
+hummocky
+humoresque
+humorist
+humoristic
+humorists
+humorist's
+humorous
+humorously
+humorousness
+humour
+humoured
+humouring
+humourless
+humourlessness
+humours
+humour's
+hump
+humpback
+humpbacked
+humpbacks
+humped
+humph
+humpier
+humping
+humps
+humpty
+humpy
+hums
+humus
+hunch
+hunchback
+hunchbacked
+hunchbacks
+hunchback's
+hunched
+hunches
+hundred
+hundredfold
+hundreds
+hundredth
+hundredweight
+hundredweights
+hung
+hunger
+hungered
+hungering
+hungers
+hungrier
+hungriest
+hungrily
+hungriness
+hungry
+hunk
+hunker
+hunkered
+hunkering
+hunkers
+hunks
+hunk's
+hunt
+hunted
+hunter
+hunters
+hunting
+huntress
+hunts
+huntsman
+hurdle
+hurdled
+hurdler
+hurdles
+hurdling
+hurl
+hurled
+hurler
+hurlers
+hurling
+hurly
+hurrah
+hurray
+hurricane
+hurricanes
+hurricane's
+hurried
+hurriedly
+hurriedness
+hurries
+hurry
+hurrying
+hurt
+hurter
+hurtful
+hurtfully
+hurtfulness
+hurting
+hurtle
+hurtled
+hurtles
+hurtling
+hurts
+husband
+husbandly
+husbandman
+husbandmen
+husbandry
+husbands
+husband's
+hush
+hushaby
+hushed
+hushes
+hushing
+husk
+husked
+husker
+huskier
+huskies
+huskily
+huskiness
+husking
+husks
+husky
+hussar
+hussies
+hussy
+hustings
+hustle
+hustled
+hustler
+hustlers
+hustles
+hustling
+hut
+hutch
+hutchie
+hutment
+huts
+hut's
+huzzah
+huzzahs
+hyacinth
+hyacinthine
+hyacinths
+hyaline
+hyalinisation
+hyalinisation's
+hyalite
+hybrid
+hybridisable
+hybridisation
+hybridisations
+hybridisation's
+hybridise
+hybridised
+hybridiser
+hybridisers
+hybridises
+hybridising
+hybridism
+hybrids
+hydnocarpate
+hydra
+hydrangea
+hydrant
+hydranth
+hydrants
+hydrastinine
+hydrate
+hydrated
+hydrates
+hydrating
+hydration
+hydrations
+hydrator
+hydraulic
+hydraulically
+hydraulics
+hydrazine
+hydria
+hydride
+hydrides
+hydro
+hydrobiology
+hydrocarbon
+hydrocarbons
+hydrocellulose
+hydrocephalic
+hydrocephalus
+hydrochemistry
+hydrochloric
+hydrochloride
+hydrocoral
+hydrocortisone
+hydrodynamic
+hydrodynamics
+hydroelectric
+hydroelectrically
+hydroelectricity
+hydrofluoric
+hydrofoil
+hydrogen
+hydrogenate
+hydrogenation
+hydrogenise
+hydrogenised
+hydrogenising
+hydrogenous
+hydrogen's
+hydrograph
+hydrographer
+hydrographic
+hydrographically
+hydrography
+hydroid
+hydrokinetic
+hydrokinetics
+hydrologic
+hydrological
+hydrologically
+hydrologist
+hydrology
+hydrolyse
+hydrolysed
+hydrolyses
+hydrolysis
+hydrolyte
+hydrolytic
+hydrolytically
+hydromancy
+hydromechanics
+hydromedusa
+hydromel
+hydrometallurgy
+hydrometeor
+hydrometer
+hydrometers
+hydrometer's
+hydrometric
+hydrometrical
+hydrophane
+hydrophilic
+hydrophobia
+hydrophobic
+hydrophone
+hydroplane
+hydroponics
+hydropower
+hydroscope
+hydrosol
+hydrospace
+hydrosphere
+hydrostat
+hydrostatic
+hydrostatical
+hydrostatically
+hydrostatics
+hydrosulphate
+hydrosulphide
+hydrosulphurous
+hydrotherapeutics
+hydrotherapy
+hydrothermal
+hydrothorax
+hydrotropic
+hydrotropism
+hydrous
+hydroxide
+hydroxides
+hydroxonium
+hydroxyl
+hydroxylamine
+hydroxylation
+hydroxyls
+hydroxyl's
+hyena
+hyetograph
+hygiene
+hygienic
+hygienically
+hygienist
+hygienists
+hygrograph
+hygrometer
+hygrometers
+hygrometer's
+hygrometric
+hygrometry
+hygrophilous
+hygrophyte
+hygroscope
+hygroscopic
+hygrostat
+hylozoism
+hymen
+hymeneal
+hymens
+hymn
+hymnal
+hymnbook
+hymning
+hymnist
+hymnody
+hymnology
+hymns
+hymn's
+hyoid
+hypaesthesia
+hypaethral
+hype
+hyped
+hyper
+hyperacid
+hyperacidity
+hyperactive
+hyperactivity
+hyperaemia
+hyperaesthesia
+hyperaesthetic
+hyperbaton
+hyperbola
+hyperbole
+hyperbolic
+hyperbolical
+hyperbolically
+hyperbolise
+hyperbolised
+hyperbolises
+hyperbolising
+hyperboloid
+hyperborean
+hypercharge
+hypercorrect
+hypercorrection
+hypercritic
+hypercritical
+hypercritically
+hypercriticise
+hypercriticises
+hypercriticism
+hypercube
+hyperdulia
+hypereutectic
+hyperextension
+hyperfine
+hyperglycaemia
+hyperirritability
+hyperirritable
+hypermarket
+hypermeter
+hypermeters
+hypermeter's
+hypermetric
+hypermetrical
+hyperopic
+hyperphysical
+hyperpnoea
+hypersensitive
+hypersensitiveness
+hypersensitivity
+hypersonic
+hypersonically
+hyperspace
+hypertension
+hypertext
+hypertext's
+hyperthyroid
+hyperthyroidism
+hypertrophied
+hypertrophy
+hypervelocity
+hyperventilation
+hypes
+hype's
+hyphen
+hyphenate
+hyphenated
+hyphenates
+hyphenating
+hyphenation
+hyphenations
+hyphened
+hyphening
+hyphenise
+hyphens
+hyphen's
+hypnology
+hypnopaedia
+hypnoses
+hypnosis
+hypnotherapy
+hypnotic
+hypnotically
+hypnotics
+hypnotisability
+hypnotisable
+hypnotisation
+hypnotise
+hypnotised
+hypnotiser
+hypnotisers
+hypnotises
+hypnotising
+hypnotism
+hypnotist
+hypnotists
+hypo
+hypoactive
+hypoblast
+hypocaust
+hypocentre
+hypochondria
+hypochondriac
+hypochondriacally
+hypocoristic
+hypocoristically
+hypocrisies
+hypocrisy
+hypocrite
+hypocrites
+hypocrite's
+hypocritical
+hypocritically
+hypocycloid
+hypoderm
+hypodermic
+hypodermically
+hypodermics
+hypodermis
+hypoeutectic
+hypogeal
+hypogenous
+hypogeum
+hypoglycaemia
+hypognathous
+hypoid
+hyponasty
+hyponitrite
+hypophosphate
+hypopnoea
+hypos
+hypostatisation
+hypostatisation's
+hypostatise
+hypostatises
+hypostyle
+hyposulphite
+hyposulphurous
+hypotenuse
+hypotenuses
+hypothalamic
+hypothalamus
+hypothec
+hypothecate
+hypothecation
+hypothecator
+hypothermal
+hypothermia
+hypothermic
+hypotheses
+hypothesis
+hypothesise
+hypothesised
+hypothesiser
+hypothesisers
+hypothesises
+hypothesising
+hypothetic
+hypothetical
+hypothetically
+hypothyroid
+hypothyroidism
+hypoxemia
+hypoxemic
+hypoxia
+hypoxic
+hypsography
+hypsometer
+hypsometers
+hypsometer's
+hypsometric
+hypsometry
+hyracoid
+hyrax
+hyssop
+hysterectomy
+hysteresis
+hysteretic
+hysteria
+hysteric
+hysterical
+hysterically
+hysterics
+hysteron
+i's
+iamb
+iambic
+iambus
+iambuses
+iatric
+ibex
+ibid
+ibis
+ibises
+ice
+iceberg
+icebergs
+iceberg's
+iceblink
+icebound
+icebox
+icebreaker
+icecap
+icecaps
+icecap's
+iced
+icefall
+icehouse
+iceless
+iceman
+iceman's
+ices
+ichneumon
+ichnography
+ichthyic
+ichthyology
+ichthyosaur
+icicle
+icicles
+icier
+iciest
+icily
+iciness
+icing
+icings
+ickier
+icky
+icon
+iconic
+iconicity
+iconoclasm
+iconoclast
+iconoclastic
+iconoclastically
+iconographer
+iconographic
+iconographical
+iconography
+iconolatry
+iconological
+iconology
+iconoscope
+iconostasis
+icons
+icon's
+icosahedra
+ictus
+icy
+id
+ide
+idea
+ideal
+idealess
+idealisation
+idealisations
+idealisation's
+idealise
+idealised
+idealiser
+idealisers
+idealises
+idealising
+idealism
+idealist
+idealistic
+idealistically
+ideally
+ideals
+ideas
+idea's
+ideate
+ideates
+ideation
+ideational
+ideationally
+idem
+identical
+identically
+identicalness
+identifiable
+identifiably
+identification
+identifications
+identified
+identifier
+identifiers
+identifies
+identify
+identifying
+identikit
+identities
+identity
+identity's
+ideogram
+ideograms
+ideogram's
+ideograph
+ideographic
+ideographically
+ideography
+ideological
+ideologically
+ideologies
+ideologist
+ideologists
+ideologue
+ideologues
+ideology
+ides
+idiocies
+idiocy
+idiographic
+idiolect
+idiom
+idiomatic
+idiomatically
+idiomorphic
+idiomorphically
+idioms
+idiopathic
+idiophone
+idioplasmatic
+idioplasmic
+idiosyncrasies
+idiosyncrasy
+idiosyncrasy's
+idiosyncratic
+idiosyncratically
+idiot
+idiotic
+idiotically
+idiotism
+idiots
+idiot's
+idle
+idled
+idleness
+idler
+idlers
+idles
+idlest
+idling
+idly
+idol
+idolater
+idolatrise
+idolatrised
+idolatrises
+idolatrising
+idolatrous
+idolatrously
+idolatrousness
+idolatry
+idolisation
+idolisations
+idolisation's
+idolise
+idolised
+idoliser
+idolisers
+idolises
+idolising
+idols
+idol's
+id's
+idyll
+idyllic
+idyllically
+idyllist
+ie
+if
+iffy
+igloo
+igloos
+igneous
+ignescent
+ignitability
+ignitable
+ignite
+ignited
+ignites
+igniting
+ignition
+ignitions
+ignitron
+ignobility
+ignoble
+ignobleness
+ignobly
+ignominious
+ignominiously
+ignominy
+ignorable
+ignoramus
+ignorance
+ignorant
+ignorantly
+ignore
+ignored
+ignorer
+ignores
+ignoring
+iguana
+ihram
+ii
+iii
+ikebana
+ilea
+ileac
+ileitis
+ileum
+ilex
+iliac
+ilk
+ilk's
+ill
+illation
+illative
+illatively
+illaudable
+illaudably
+illegal
+illegalise
+illegalised
+illegalises
+illegalising
+illegalities
+illegality
+illegally
+illegibility
+illegible
+illegibly
+illegitimacy
+illegitimate
+illegitimately
+illegitimatise
+illegitimatises
+illiberal
+illiberally
+illiberalness
+illicit
+illicitly
+illimitability
+illimitable
+illimitableness
+illimitably
+illiquid
+illiteracy
+illiterate
+illiterately
+illiterateness
+illiterates
+illness
+illnesses
+illness's
+illocution
+illogic
+illogical
+illogically
+illogicalness
+ills
+illume
+illumed
+illuminable
+illuminate
+illuminated
+illuminates
+illuminating
+illuminatingly
+illumination
+illuminations
+illuminative
+illuminator
+illuminators
+illumine
+illumined
+illumines
+illuming
+illuminist
+illus
+illusion
+illusionary
+illusionism
+illusionist
+illusions
+illusion's
+illusive
+illusively
+illusiveness
+illusorily
+illusoriness
+illusory
+illustrate
+illustrated
+illustrates
+illustrating
+illustration
+illustrational
+illustrations
+illustrative
+illustratively
+illustrator
+illustrators
+illustrator's
+illustrious
+illustriously
+illustriousness
+image
+imaged
+imagery
+images
+imaginable
+imaginableness
+imaginably
+imaginarily
+imaginariness
+imaginary
+imagination
+imaginations
+imagination's
+imaginative
+imaginatively
+imaginativeness
+imagine
+imagined
+imaginer
+imagines
+imaging
+imagining
+imaginings
+imagism
+imagist
+imagistic
+imago
+imam
+imamate
+imaret
+imbalance
+imbalances
+imbecile
+imbecilely
+imbecilic
+imbecility
+imbed
+imbibe
+imbibed
+imbiber
+imbibing
+imbricate
+imbroglio
+imbrue
+imbrued
+imbruing
+imbrute
+imbruted
+imbruting
+imbue
+imbued
+imbuing
+imitable
+imitate
+imitated
+imitates
+imitating
+imitation
+imitational
+imitations
+imitative
+imitatively
+imitativeness
+imitator
+imitators
+immaculacy
+immaculate
+immaculately
+immanence
+immanency
+immanent
+immanently
+immaterial
+immaterialise
+immaterialised
+immaterialises
+immaterialising
+immaterialism
+immaterialist
+immateriality
+immaterially
+immaterialness
+immature
+immaturely
+immatureness
+immaturity
+immeasurable
+immeasurableness
+immeasurably
+immediacies
+immediacy
+immediate
+immediately
+immediateness
+immedicable
+immemorial
+immemorially
+immense
+immensely
+immenseness
+immensities
+immensity
+immensurable
+immerge
+immerged
+immergence
+immerging
+immerse
+immersed
+immerses
+immersing
+immersion
+immersionism
+immersions
+immethodical
+immethodically
+immigrant
+immigrants
+immigrant's
+immigrate
+immigrated
+immigrates
+immigrating
+immigration
+imminence
+imminent
+imminently
+immingle
+immiscibility
+immiscible
+immiscibly
+immitigable
+immitigably
+immix
+immixture
+immobile
+immobilisation
+immobilisations
+immobilisation's
+immobilise
+immobilised
+immobiliser
+immobilises
+immobilising
+immobility
+immoderate
+immoderately
+immoderateness
+immoderation
+immodest
+immodestly
+immodesty
+immolate
+immolation
+immolator
+immoral
+immoralities
+immorality
+immorally
+immortal
+immortalisation
+immortalisations
+immortalisation's
+immortalise
+immortalised
+immortaliser
+immortalisers
+immortalises
+immortalising
+immortality
+immortally
+immortals
+immortelle
+immotile
+immovability
+immovable
+immovableness
+immovably
+immune
+immunisation
+immunisations
+immunisation's
+immunise
+immunised
+immunises
+immunising
+immunities
+immunity
+immunity's
+immunoassay
+immunochemical
+immunochemically
+immunologist
+immunology
+immunosuppressive
+immure
+immured
+immurement
+immures
+immuring
+immutability
+immutable
+immutableness
+immutably
+imp
+impact
+impacted
+impacting
+impaction
+impactions
+impacts
+impair
+impaired
+impairer
+impairing
+impairment
+impairs
+impala
+impale
+impaled
+impalement
+impales
+impaling
+impalpability
+impalpable
+impalpably
+impanation
+imparadised
+imparity
+impart
+impartation
+imparted
+impartial
+impartiality
+impartially
+impartibly
+imparting
+impartment
+imparts
+impassability
+impassable
+impassableness
+impassably
+impasse
+impasses
+impassibility
+impassibly
+impassion
+impassioned
+impassioning
+impassions
+impassive
+impassively
+impassiveness
+impassivity
+impasto
+impatience
+impatient
+impatiently
+impeach
+impeachable
+impeached
+impeaches
+impeaching
+impeachment
+impearl
+impeccable
+impeccably
+impeccant
+impecunious
+impecuniously
+impecuniousness
+impedance
+impedances
+impedance's
+impede
+impeded
+impeder
+impedes
+impediment
+impedimenta
+impediments
+impediment's
+impeding
+impel
+impelled
+impeller
+impellers
+impelling
+impellor
+impels
+impend
+impendent
+impending
+impenetrability
+impenetrable
+impenetrableness
+impenetrably
+impenitence
+impenitent
+impenitently
+imperative
+imperatively
+imperativeness
+imperatives
+imperator
+imperatorial
+imperceptibility
+imperceptible
+imperceptibly
+imperceptive
+imperceptiveness
+imperceptivity
+imperfect
+imperfectability
+imperfection
+imperfections
+imperfection's
+imperfective
+imperfectly
+imperfectness
+imperforate
+imperforated
+imperforates
+imperial
+imperialise
+imperialises
+imperialism
+imperialist
+imperialistic
+imperialistically
+imperialists
+imperialist's
+imperially
+imperil
+imperilled
+imperilling
+imperilment
+imperious
+imperiously
+imperiousness
+imperishable
+imperishableness
+imperishably
+impermanence
+impermanency
+impermanent
+impermeable
+impermeableness
+impermeably
+impermissibility
+impermissible
+impermissibly
+impersonal
+impersonalise
+impersonalised
+impersonalises
+impersonalising
+impersonality
+impersonally
+impersonate
+impersonated
+impersonates
+impersonating
+impersonation
+impersonations
+impersonator
+impertinence
+impertinency
+impertinent
+impertinently
+imperturbability
+imperturbable
+imperturbably
+impervious
+imperviously
+imperviousness
+impetigo
+impetrate
+impetrated
+impetrates
+impetrating
+impetration
+impetrations
+impetuosity
+impetuous
+impetuously
+impetuousness
+impetus
+impi
+impiety
+impinge
+impinged
+impingement
+impinges
+impinging
+impious
+impiously
+impish
+impishly
+impishness
+implacability
+implacable
+implacableness
+implacably
+implacental
+implant
+implantation
+implanted
+implanter
+implanting
+implants
+implausibility
+implausible
+implausibly
+implement
+implemental
+implementation
+implementations
+implementation's
+implemented
+implementer
+implementers
+implementing
+implements
+implicate
+implicated
+implicates
+implicating
+implication
+implications
+implicative
+implicatively
+implicit
+implicitly
+implicitness
+implied
+implies
+implode
+imploded
+implodes
+imploding
+implore
+implored
+implores
+imploring
+implosion
+implosions
+implosive
+implosively
+imply
+implying
+impolite
+impolitely
+impoliteness
+impolitic
+impoliticly
+impoliticness
+imponderability
+imponderable
+imponderableness
+imponderables
+imponderably
+import
+importable
+importance
+important
+importantly
+importation
+importations
+imported
+importer
+importers
+importing
+imports
+importunate
+importunately
+importunateness
+importune
+importunely
+importuner
+importuners
+importunities
+importunity
+imposable
+impose
+imposed
+imposer
+imposes
+imposing
+imposingly
+imposition
+impositions
+imposition's
+impossibilities
+impossibility
+impossible
+impossibly
+impost
+impostor
+impostors
+impostor's
+imposts
+imposture
+impotence
+impotency
+impotent
+impotently
+impound
+impounded
+impounding
+impoundment
+impoundments
+impounds
+impoverish
+impoverished
+impoverisher
+impoverishes
+impoverishing
+impoverishment
+impracticability
+impracticable
+impracticableness
+impracticably
+impractical
+impracticality
+impractically
+impracticalness
+imprecate
+imprecated
+imprecates
+imprecating
+imprecation
+imprecations
+imprecatory
+imprecise
+imprecisely
+impreciseness
+imprecision
+impregnability
+impregnable
+impregnably
+impregnate
+impregnated
+impregnates
+impregnating
+impregnation
+impregnations
+impregnator
+impregnators
+impresario
+impress
+impressed
+impresser
+impresses
+impressible
+impressing
+impression
+impressionability
+impressionable
+impressionableness
+impressionably
+impressionism
+impressionist
+impressionistic
+impressionistically
+impressionists
+impressions
+impression's
+impressive
+impressively
+impressiveness
+imprimatur
+imprint
+imprinted
+imprinting
+imprints
+imprison
+imprisoned
+imprisoning
+imprisonment
+imprisonments
+imprisonment's
+imprisons
+improbability
+improbable
+improbably
+improbity
+impromptu
+improper
+improperly
+improperness
+impropriety
+improvability
+improvable
+improvably
+improve
+improved
+improvement
+improvements
+improver
+improves
+improvidence
+improvident
+improvidently
+improving
+improvisation
+improvisational
+improvisations
+improvisation's
+improvisator
+improvisatorial
+improvisatory
+improvise
+improvised
+improviser
+improvisers
+improvises
+improvising
+imprudence
+imprudent
+imprudently
+imps
+imp's
+impudence
+impudent
+impudently
+impudicity
+impugn
+impugned
+impugner
+impugning
+impugns
+impuissance
+impuissant
+impulse
+impulses
+impulsion
+impulsions
+impulsive
+impulsively
+impulsiveness
+impunity
+impure
+impurely
+impureness
+impurities
+impurity
+impurity's
+imputable
+imputation
+imputations
+imputative
+imputatively
+impute
+imputed
+imputes
+imputing
+in
+inabilities
+inability
+inaccessibility
+inaccessible
+inaccessibly
+inaccuracies
+inaccuracy
+inaccurate
+inaccurately
+inaction
+inactions
+inactivate
+inactivation
+inactive
+inactively
+inactivity
+inadequacies
+inadequacy
+inadequate
+inadequately
+inadequateness
+inadmissibility
+inadmissible
+inadmissibly
+inadvertence
+inadvertency
+inadvertent
+inadvertently
+inadvisability
+inadvisable
+inalienability
+inalienable
+inalienably
+inalterability
+inalterable
+inalterably
+inane
+inanely
+inaner
+inanest
+inanimate
+inanimately
+inanimateness
+inanition
+inanity
+inappeasable
+inapplicability
+inapplicable
+inapplicably
+inapposite
+inappositely
+inappositeness
+inappreciable
+inappreciably
+inapprehensive
+inapproachable
+inappropriate
+inappropriately
+inappropriateness
+inapt
+inaptitude
+inaptly
+inaptness
+inarch
+inarguable
+inarguably
+inarticulate
+inarticulately
+inarticulateness
+inartificial
+inartistic
+inartistically
+inasmuch
+inattention
+inattentive
+inattentively
+inattentiveness
+inaudibility
+inaudible
+inaudibly
+inaugural
+inaugurate
+inaugurated
+inaugurating
+inauguration
+inaugurations
+inaugurator
+inaugurators
+inauspicious
+inauspiciously
+inauspiciousness
+inauthentic
+inbeing
+inboard
+inboards
+inborn
+inbound
+inbounds
+inbreathe
+inbred
+inbreed
+inbreeding
+inbuilt
+incalculability
+incalculable
+incalculableness
+incalculably
+incalescence
+incalescences
+incalescent
+incandesce
+incandesced
+incandescence
+incandescent
+incandescently
+incandesces
+incandescing
+incant
+incantation
+incantations
+incanted
+incapability
+incapable
+incapableness
+incapably
+incapacitate
+incapacitated
+incapacitates
+incapacitating
+incapacitation
+incapacity
+incarcerate
+incarcerated
+incarcerates
+incarcerating
+incarceration
+incardinate
+incardination
+incarnadine
+incarnate
+incarnation
+incarnations
+incarnation's
+incaution
+incautious
+incautiously
+incautiousness
+incendiaries
+incendiary
+incense
+incensed
+incenses
+incensing
+incensory
+incentive
+incentives
+incentive's
+incept
+incepted
+incepting
+inception
+inceptions
+inceptive
+inceptively
+inceptor
+incepts
+incertitude
+incessancy
+incessant
+incessantly
+incest
+incestuous
+incestuously
+inch
+inched
+inches
+inching
+inchmeal
+inchoate
+inchoately
+inchoateness
+inchoative
+inchworm
+inchworms
+inchworm's
+incidence
+incidences
+incident
+incidental
+incidentally
+incidentals
+incidents
+incident's
+incinerate
+incinerated
+incinerates
+incinerating
+incineration
+incinerations
+incinerator
+incinerators
+incipience
+incipiency
+incipient
+incipiently
+incipit
+incise
+incised
+incises
+incising
+incision
+incisions
+incision's
+incisive
+incisively
+incisiveness
+incisor
+incisors
+incisor's
+incitation
+incite
+incited
+incitement
+incitements
+inciter
+incites
+inciting
+incivility
+inclemency
+inclement
+inclemently
+inclinable
+inclination
+inclinational
+inclinations
+inclination's
+incline
+inclined
+incliner
+inclines
+inclining
+inclinometer
+inclinometers
+inclinometer's
+inclosing
+includable
+include
+included
+includes
+includible
+including
+inclusion
+inclusions
+inclusion's
+inclusive
+inclusively
+inclusiveness
+incoercible
+incogitable
+incogitant
+incognisance
+incognisant
+incognita
+incognito
+incoherence
+incoherent
+incoherently
+incombustibility
+incombustible
+income
+incomer
+incomers
+incomes
+incoming
+incommensurability
+incommensurable
+incommensurably
+incommensurate
+incommode
+incommodious
+incommodiously
+incommodiousness
+incommodity
+incommunicability
+incommunicable
+incommunicably
+incommunicado
+incommunicative
+incommutably
+incomparability
+incomparable
+incomparably
+incompatibilities
+incompatibility
+incompatibility's
+incompatible
+incompatibly
+incompetence
+incompetent
+incompetently
+incompetents
+incompetent's
+incomplete
+incompletely
+incompleteness
+incompletion
+incompliant
+incomprehensibility
+incomprehensible
+incomprehensibleness
+incomprehensibly
+incomprehension
+incomprehensive
+incompressibility
+incompressible
+incomputable
+inconceivability
+inconceivable
+inconceivableness
+inconceivably
+inconclusive
+inconclusively
+inconclusiveness
+incondensable
+incondite
+inconformity
+incongruence
+incongruent
+incongruently
+incongruities
+incongruity
+incongruous
+incongruously
+incongruousness
+inconsecutive
+inconsequence
+inconsequent
+inconsequential
+inconsequentiality
+inconsequentially
+inconsequently
+inconsiderable
+inconsiderableness
+inconsiderably
+inconsiderate
+inconsiderately
+inconsiderateness
+inconsideration
+inconsistence
+inconsistencies
+inconsistency
+inconsistency's
+inconsistent
+inconsistently
+inconsolable
+inconsolableness
+inconsolably
+inconsonance
+inconsonant
+inconspicuous
+inconspicuously
+inconspicuousness
+inconstancy
+inconstant
+inconstantly
+inconsumable
+incontestability
+incontestable
+incontestably
+incontinence
+incontinency
+incontinent
+incontinently
+incontrollable
+incontrovertible
+incontrovertibly
+inconvenience
+inconvenienced
+inconveniences
+inconveniencing
+inconveniency
+inconvenient
+inconveniently
+inconvertibility
+inconvertible
+inconvertibly
+inconvincible
+incorporable
+incorporate
+incorporated
+incorporates
+incorporating
+incorporation
+incorporative
+incorporator
+incorporeal
+incorporeally
+incorporeity
+incorrect
+incorrectly
+incorrectness
+incorrigibility
+incorrigible
+incorrigibleness
+incorrigibly
+incorrupt
+incorruptibility
+incorruptible
+incorruptibly
+incorruptly
+incorruptness
+increasable
+increase
+increased
+increaser
+increases
+increasing
+increasingly
+increate
+incredibility
+incredible
+incredibleness
+incredibly
+incredulity
+incredulous
+incredulously
+increment
+incremental
+incrementally
+incremented
+incrementing
+increments
+increscent
+incriminate
+incriminated
+incriminates
+incriminating
+incrimination
+incriminatory
+incrust
+incrustation
+incubate
+incubated
+incubates
+incubating
+incubation
+incubational
+incubator
+incubators
+incubator's
+incubatory
+incubi
+incubus
+inculcate
+inculcated
+inculcates
+inculcation
+inculcator
+inculpate
+inculpation
+incumbency
+incumbent
+incumbents
+incunabula
+incunabulum
+incur
+incurability
+incurable
+incurableness
+incurables
+incurably
+incuriosity
+incurious
+incuriously
+incuriousness
+incurred
+incurrence
+incurrent
+incurring
+incurs
+incursion
+incursions
+incurvature
+incurve
+incuse
+indaba
+indebted
+indebtedness
+indecency
+indecent
+indecently
+indecipherable
+indecision
+indecisive
+indecisively
+indecisiveness
+indeclinable
+indecomposable
+indecorous
+indecorously
+indecorum
+indeed
+indefatigability
+indefatigable
+indefatigably
+indefeasibility
+indefeasible
+indefeasibly
+indefectibility
+indefectible
+indefectibly
+indefensibility
+indefensible
+indefensibly
+indefinable
+indefinableness
+indefinably
+indefinite
+indefinitely
+indefiniteness
+indehiscence
+indehiscent
+indelibility
+indelible
+indelibly
+indelicacy
+indelicate
+indelicately
+indemnification
+indemnifier
+indemnify
+indemnity
+indemonstrable
+indemonstrably
+indene
+indent
+indentation
+indentations
+indentation's
+indented
+indenter
+indenting
+indention
+indents
+indenture
+indentured
+indentures
+indenturing
+independence
+independency
+independent
+independently
+independents
+indescribable
+indescribably
+indestructibility
+indestructible
+indestructibleness
+indestructibly
+indeterminable
+indeterminably
+indeterminacies
+indeterminacy
+indeterminacy's
+indeterminate
+indeterminately
+indeterminateness
+indeterminism
+indeterminist
+index
+indexation
+indexed
+indexer
+indexers
+indexes
+indexical
+indexing
+indicant
+indicants
+indicate
+indicated
+indicates
+indicating
+indication
+indications
+indicative
+indicatively
+indicatives
+indicator
+indicators
+indicator's
+indicatory
+indices
+indicia
+indict
+indictable
+indicted
+indicter
+indictment
+indictments
+indictment's
+indictor
+indifference
+indifferent
+indifferentism
+indifferentist
+indifferently
+indigence
+indigene
+indigenes
+indigenous
+indigenously
+indigenousness
+indigent
+indigested
+indigestibility
+indigestible
+indigestion
+indigestive
+indignant
+indignantly
+indignation
+indignities
+indignity
+indigo
+indigoid
+indirect
+indirection
+indirections
+indirectly
+indirectness
+indiscernible
+indiscipline
+indiscoverable
+indiscreet
+indiscreetly
+indiscreetness
+indiscrete
+indiscretion
+indiscriminate
+indiscriminately
+indiscriminateness
+indiscriminating
+indiscriminatingly
+indiscrimination
+indispensability
+indispensable
+indispensably
+indispose
+indisposed
+indisposes
+indisposing
+indisposition
+indisputable
+indisputableness
+indisputably
+indissolubility
+indissoluble
+indissolubleness
+indissolubly
+indistinct
+indistinctive
+indistinctly
+indistinctness
+indistinguishable
+indistinguishableness
+indistinguishably
+indium
+indivertible
+indivertibly
+individual
+individualisation
+individualisations
+individualisation's
+individualise
+individualised
+individualiser
+individualisers
+individualises
+individualising
+individualism
+individualist
+individualistic
+individualistically
+individualists
+individuality
+individually
+individuals
+individual's
+individuate
+individuated
+individuates
+individuating
+individuation
+indivisibility
+indivisible
+indivisibleness
+indivisibly
+indo
+indocility
+indoctrinate
+indoctrinated
+indoctrinates
+indoctrinating
+indoctrination
+indoctrinator
+indolence
+indolent
+indolently
+indomitable
+indomitableness
+indomitably
+indoor
+indoors
+indrawn
+indubitable
+indubitableness
+indubitably
+induce
+induced
+inducement
+inducements
+inducement's
+induces
+inducible
+inducing
+induct
+inductance
+inductances
+inducted
+inductee
+inductees
+inductile
+inducting
+induction
+inductions
+induction's
+inductive
+inductively
+inductiveness
+inductor
+inductors
+inductor's
+inducts
+indulge
+indulged
+indulgence
+indulgences
+indulgence's
+indulgent
+indulgently
+indulger
+indulges
+indulging
+indult
+induplicate
+indurate
+industrial
+industrialisation
+industrialisations
+industrialisation's
+industrialise
+industrialised
+industrialises
+industrialising
+industrialism
+industrialist
+industrialists
+industrialist's
+industrially
+industrials
+industries
+industrious
+industriously
+industriousness
+industry
+industry's
+indwell
+indwelling
+inebriant
+inebriate
+inebriated
+inebriates
+inebriating
+inebriation
+inebriety
+inedible
+inedited
+ineffability
+ineffable
+ineffableness
+ineffably
+ineffaceability
+ineffaceable
+ineffaceably
+ineffective
+ineffectively
+ineffectiveness
+ineffectual
+ineffectuality
+ineffectually
+ineffectualness
+inefficacious
+inefficaciously
+inefficaciousness
+inefficacy
+inefficiencies
+inefficiency
+inefficient
+inefficiently
+inelastic
+inelasticity
+inelegance
+inelegant
+inelegantly
+ineligibility
+ineligible
+ineloquent
+ineloquently
+ineluctability
+ineluctable
+ineluctably
+inenarrable
+inept
+ineptitude
+ineptly
+ineptness
+inequalities
+inequality
+inequitable
+inequitably
+inequities
+inequity
+ineradicably
+inerrable
+inerrancy
+inerrant
+inert
+inertia
+inertial
+inertias
+inertly
+inertness
+inescapable
+inescapably
+inessential
+inestimable
+inestimably
+inevitabilities
+inevitability
+inevitable
+inevitably
+inexact
+inexactitude
+inexactly
+inexactness
+inexcusable
+inexcusableness
+inexcusably
+inexhaustibility
+inexhaustible
+inexhaustibleness
+inexhaustibly
+inexistence
+inexistent
+inexorable
+inexorably
+inexpedience
+inexpediency
+inexpedient
+inexpediently
+inexpensive
+inexpensively
+inexpensiveness
+inexperience
+inexperienced
+inexpert
+inexpertly
+inexpertness
+inexpiable
+inexpiably
+inexplicability
+inexplicable
+inexplicableness
+inexplicably
+inexplicit
+inexpressibility
+inexpressible
+inexpressibleness
+inexpressibly
+inexpressive
+inexpressively
+inexpressiveness
+inexpugnableness
+inexpugnably
+inextensible
+inextinguishable
+inextinguishably
+inextirpable
+inextricability
+inextricable
+inextricably
+infallibility
+infallible
+infallibly
+infamous
+infamously
+infamy
+infancy
+infant
+infanticide
+infanticide's
+infantile
+infantilism
+infantry
+infantryman
+infantrymen
+infants
+infant's
+infarct
+infarction
+infatuate
+infatuated
+infatuation
+infatuations
+infeasible
+infect
+infected
+infecting
+infection
+infections
+infection's
+infectious
+infectiously
+infectiousness
+infective
+infectivity
+infector
+infects
+infelicitous
+infelicitously
+infelicity
+infer
+inferable
+inference
+inferences
+inference's
+inferential
+inferentially
+inferior
+inferiority
+inferiorly
+inferiors
+inferior's
+infernal
+infernally
+inferno
+infernos
+inferno's
+inferred
+inferring
+infers
+infertile
+infertility
+infest
+infestation
+infestations
+infested
+infester
+infesting
+infests
+infibulate
+infidel
+infidelity
+infidels
+infidel's
+infield
+infielder
+infielders
+infielder's
+infields
+infield's
+infighter
+infighters
+infighter's
+infighting
+infill
+infiltrate
+infiltrated
+infiltrates
+infiltrating
+infiltration
+infiltrative
+infiltrator
+infiltrators
+infinite
+infinitely
+infiniteness
+infinitesimal
+infinitesimally
+infinities
+infinitival
+infinitive
+infinitively
+infinitives
+infinitive's
+infinitude
+infinitum
+infinity
+infirm
+infirmary
+infirmed
+infirmity
+infirmly
+infix
+infixes
+infix's
+inflame
+inflamed
+inflaming
+inflammable
+inflammableness
+inflammably
+inflammation
+inflammatorily
+inflammatory
+inflatable
+inflate
+inflated
+inflates
+inflating
+inflation
+inflationary
+inflationism
+inflationist
+inflator
+inflect
+inflected
+inflecting
+inflection
+inflectional
+inflectionally
+inflections
+inflective
+inflects
+inflexed
+inflexibility
+inflexible
+inflexibleness
+inflexibly
+inflexion
+inflict
+inflicted
+inflicting
+infliction
+inflictive
+inflictor
+inflicts
+inflorescence
+inflorescences
+inflorescent
+inflow
+inflows
+influence
+influenced
+influencer
+influences
+influencing
+influent
+influential
+influentially
+influenza
+influx
+info
+inform
+informal
+informality
+informally
+informant
+informants
+informant's
+informatics
+information
+informational
+informative
+informatively
+informed
+informer
+informers
+informing
+informs
+infra
+infract
+infraction
+infractions
+infrahuman
+infralapsarian
+infrangibility
+infrangibleness
+infrangibly
+infrared
+infrasonic
+infrastructure
+infrastructures
+infrequence
+infrequency
+infrequent
+infrequently
+infringe
+infringed
+infringement
+infringements
+infringement's
+infringes
+infringing
+infundibulate
+infuriate
+infuriated
+infuriately
+infuriates
+infuriating
+infuriatingly
+infuriation
+infuscate
+infuse
+infused
+infuser
+infuses
+infusibility
+infusible
+infusibleness
+infusing
+infusion
+infusionism
+infusions
+ingather
+ingathering
+ingeminate
+ingenerate
+ingenious
+ingeniously
+ingeniousness
+ingenuity
+ingenuous
+ingenuously
+ingenuousness
+ingest
+ingested
+ingestible
+ingestion
+ingle
+inglenook
+inglorious
+ingloriously
+ingloriousness
+ingoing
+ingot
+ingrain
+ingrained
+ingrains
+ingrate
+ingratiate
+ingratiating
+ingratiatingly
+ingratiation
+ingratiatory
+ingratitude
+ingredient
+ingredients
+ingredient's
+ingress
+ingression
+ingressive
+ingressiveness
+ingrown
+ingrowths
+inguinal
+ingurgitation
+inhabit
+inhabitable
+inhabitancy
+inhabitant
+inhabitants
+inhabitant's
+inhabitation
+inhabited
+inhabiting
+inhabits
+inhalant
+inhalation
+inhalator
+inhale
+inhaled
+inhaler
+inhales
+inhaling
+inharmonious
+inharmoniously
+inharmoniousness
+inhaul
+inhere
+inhered
+inherence
+inherent
+inherently
+inheres
+inhering
+inherit
+inheritability
+inheritable
+inheritableness
+inheritance
+inheritances
+inheritance's
+inherited
+inheriting
+inheritor
+inheritors
+inheritor's
+inheritress
+inheritresses
+inherits
+inhesion
+inhibit
+inhibited
+inhibiter
+inhibiting
+inhibition
+inhibitions
+inhibition's
+inhibitive
+inhibitor
+inhibitors
+inhibitory
+inhibits
+inhomogeneous
+inhospitable
+inhospitableness
+inhospitably
+inhospitality
+inhuman
+inhumane
+inhumanely
+inhumanities
+inhumanity
+inhumanly
+inhumanness
+inhumation
+inhume
+inhumed
+inhumes
+inhuming
+inimical
+inimically
+inimitable
+inimitableness
+inimitably
+iniquities
+iniquitous
+iniquitously
+iniquitousness
+iniquity
+iniquity's
+initial
+initialisation
+initialisations
+initialisation's
+initialise
+initialised
+initialises
+initialising
+initialled
+initialling
+initially
+initials
+initiate
+initiated
+initiates
+initiating
+initiation
+initiations
+initiative
+initiatives
+initiative's
+initiator
+initiators
+initiator's
+initiatory
+inject
+injected
+injecting
+injection
+injections
+injection's
+injector
+injectors
+injects
+injudicious
+injudiciously
+injudiciousness
+injunction
+injunctions
+injunction's
+injunctive
+injure
+injured
+injurer
+injures
+injuries
+injuring
+injurious
+injuriously
+injuriousness
+injury
+injury's
+injustice
+injustices
+injustice's
+ink
+inkberry
+inkblot
+inked
+inker
+inkers
+inkhorn
+inkiness
+inking
+inkle
+inkling
+inklings
+inkling's
+inks
+inkstand
+inkwell
+inky
+inlaid
+inland
+inlay
+inlayer
+inlaying
+inlet
+inlets
+inlet's
+inmate
+inmates
+inmate's
+inmost
+inn
+innards
+innate
+innately
+innateness
+inner
+innermost
+innersole
+innerspring
+innervate
+innervated
+innervates
+innervating
+innerve
+inning
+innings
+innkeeper
+innkeepers
+innkeeper's
+innocence
+innocent
+innocently
+innocents
+innocuous
+innocuously
+innocuousness
+innovate
+innovated
+innovates
+innovating
+innovation
+innovations
+innovation's
+innovative
+innovativeness
+innovator
+innovators
+innovatory
+inns
+innuendo
+innuendoes
+innuendos
+innumerability
+innumerable
+innumerableness
+innumerably
+innumerate
+innutrition
+inobservance
+inobservant
+inoculate
+inoculated
+inoculates
+inoculating
+inoculation
+inoculations
+inodorous
+inoffensive
+inoffensively
+inoffensiveness
+inoperable
+inoperative
+inoperativeness
+inopportune
+inopportunely
+inopportuneness
+inordinate
+inordinately
+inordinateness
+inorganic
+inorganically
+inosculate
+inosculated
+inosculates
+inosculating
+inosculation
+inpatient
+input
+inputs
+input's
+inputted
+inputting
+inquest
+inquire
+inquired
+inquirer
+inquirers
+inquires
+inquiries
+inquiring
+inquiringly
+inquiry
+inquiry's
+inquisition
+inquisitional
+inquisitions
+inquisition's
+inquisitive
+inquisitively
+inquisitiveness
+inquisitor
+inquisitorial
+inquisitorially
+inroad
+inroads
+inrush
+ins
+insalubrious
+insane
+insanely
+insaneness
+insanitary
+insanity
+insatiability
+insatiable
+insatiableness
+insatiably
+insatiate
+insatiately
+insatiateness
+inscape
+inscribe
+inscribed
+inscriber
+inscribes
+inscribing
+inscription
+inscriptional
+inscriptions
+inscription's
+inscriptive
+inscriptively
+inscroll
+inscrutability
+inscrutable
+inscrutableness
+inscrutably
+inseam
+insect
+insecticide
+insecticides
+insectivore
+insectivores
+insectivore's
+insectivorous
+insects
+insect's
+insecure
+insecurely
+insecurity
+inseminate
+insemination
+inseminator
+insensate
+insensately
+insensateness
+insensibility
+insensible
+insensibly
+insensitive
+insensitively
+insensitiveness
+insensitivity
+insentience
+insentient
+inseparability
+inseparable
+inseparableness
+inseparably
+insert
+inserted
+inserter
+inserting
+insertion
+insertions
+insertion's
+inserts
+inset
+insets
+insetting
+inshore
+inside
+insider
+insiders
+insides
+insidious
+insidiously
+insidiousness
+insight
+insightful
+insightfully
+insights
+insight's
+insignia
+insignias
+insignificance
+insignificances
+insignificancy
+insignificant
+insignificantly
+insincere
+insincerely
+insincerity
+insinuate
+insinuated
+insinuates
+insinuating
+insinuatingly
+insinuation
+insinuations
+insinuator
+insipid
+insipidity
+insipidly
+insipience
+insist
+insisted
+insistence
+insistency
+insistent
+insistently
+insisting
+insists
+insobriety
+insofar
+insolate
+insole
+insolence
+insolent
+insolently
+insolubility
+insoluble
+insolubleness
+insolubly
+insolvable
+insolvably
+insolvency
+insolvent
+insomnia
+insomniac
+insomniacs
+insomuch
+insouciance
+insouciant
+insouciantly
+inspect
+inspected
+inspecting
+inspection
+inspections
+inspection's
+inspective
+inspector
+inspectorate
+inspectors
+inspector's
+inspects
+inspiration
+inspirational
+inspirationally
+inspirations
+inspiration's
+inspire
+inspired
+inspirer
+inspires
+inspiring
+inspirit
+instabilities
+instability
+instable
+install
+installation
+installations
+installation's
+installed
+installer
+installers
+installing
+installs
+instalment
+instalments
+instance
+instanced
+instances
+instancing
+instant
+instantaneity
+instantaneous
+instantaneously
+instantaneousness
+instanter
+instantiate
+instantiated
+instantiates
+instantiating
+instantiation
+instantiations
+instantiation's
+instantly
+instants
+instate
+instated
+instates
+instating
+instauration
+instead
+instep
+insteps
+instigate
+instigated
+instigates
+instigating
+instigation
+instigative
+instigator
+instigators
+instigator's
+instil
+instillation
+instilled
+instiller
+instilling
+instils
+instinct
+instinctive
+instinctively
+instincts
+instinct's
+instinctual
+institute
+instituted
+institutes
+instituting
+institution
+institutional
+institutionalisation
+institutionalisations
+institutionalisation's
+institutionalise
+institutionalised
+institutionalises
+institutionalising
+institutionalism
+institutionally
+institutions
+institution's
+institutive
+institutor
+instruct
+instructed
+instructing
+instruction
+instructional
+instructions
+instruction's
+instructive
+instructively
+instructiveness
+instructor
+instructors
+instructor's
+instructorship
+instructress
+instructs
+instrument
+instrumental
+instrumentalism
+instrumentalist
+instrumentalists
+instrumentalist's
+instrumentalities
+instrumentality
+instrumentally
+instrumentals
+instrumentation
+instrumented
+instruments
+insubordinate
+insubordinately
+insubordination
+insubstantial
+insubstantiality
+insufferable
+insufferableness
+insufferably
+insufficiencies
+insufficiency
+insufficient
+insufficiently
+insufflate
+insufflates
+insufflating
+insular
+insularism
+insularity
+insularly
+insulate
+insulated
+insulates
+insulating
+insulation
+insulations
+insulator
+insulators
+insulator's
+insulin
+insult
+insulted
+insulter
+insulting
+insultingly
+insults
+insuperable
+insuperably
+insupportable
+insupportableness
+insupportably
+insuppressibly
+insurability
+insurable
+insurance
+insurances
+insure
+insured
+insurer
+insurers
+insures
+insurgence
+insurgency
+insurgent
+insurgents
+insurgent's
+insuring
+insurmountable
+insurmountably
+insurrection
+insurrectional
+insurrectionary
+insurrectionist
+insurrections
+insurrection's
+insusceptibility
+insusceptible
+intact
+intactness
+intaglio
+intake
+intakes
+intangibility
+intangible
+intangibleness
+intangibles
+intangible's
+intangibly
+intarsia
+integer
+integers
+integer's
+integral
+integrally
+integrals
+integral's
+integrand
+integrant
+integrate
+integrated
+integrates
+integrating
+integration
+integrationist
+integrations
+integrative
+integrator
+integrity
+integument
+intellect
+intellection
+intellective
+intellectively
+intellects
+intellect's
+intellectual
+intellectualisation
+intellectualisations
+intellectualisation's
+intellectualise
+intellectualised
+intellectualises
+intellectualising
+intellectualism
+intellectualist
+intellectualistic
+intellectuality
+intellectually
+intellectualness
+intellectuals
+intelligence
+intelligencer
+intelligences
+intelligent
+intelligential
+intelligently
+intelligentsia
+intelligibility
+intelligible
+intelligibleness
+intelligibly
+intemperance
+intemperate
+intemperately
+intemperateness
+intend
+intendancy
+intended
+intender
+intending
+intendment
+intends
+intense
+intensely
+intenseness
+intensification
+intensified
+intensifier
+intensifiers
+intensifies
+intensify
+intensifying
+intension
+intensities
+intensity
+intensive
+intensively
+intensiveness
+intent
+intention
+intentional
+intentionally
+intentioned
+intentions
+intently
+intentness
+intents
+inter
+interact
+interacted
+interacting
+interaction
+interactions
+interaction's
+interactive
+interactively
+interactivity
+interacts
+interagency
+interbrain
+interbreed
+intercalary
+intercalate
+intercalated
+intercalates
+intercalating
+intercalation
+intercalative
+intercede
+intercedes
+intercellular
+intercept
+intercepted
+intercepting
+interception
+interceptor
+intercepts
+intercession
+intercessional
+intercessor
+intercessory
+interchange
+interchangeability
+interchangeable
+interchangeableness
+interchangeably
+interchanged
+interchanger
+interchanges
+interchanging
+intercity
+intercollegiate
+intercolumniation
+intercom
+intercommunicate
+intercommunicated
+intercommunicates
+intercommunicating
+intercommunication
+intercommunion
+interconnect
+interconnected
+interconnectedness
+interconnecting
+interconnection
+interconnections
+interconnection's
+interconnectivity
+interconnects
+intercontinental
+intercooler
+intercourse
+intercrop
+intercultural
+interdenominational
+interdentally
+interdepartmental
+interdepartmentally
+interdependence
+interdependencies
+interdependency
+interdependent
+interdependently
+interdict
+interdiction
+interdictor
+interdictory
+interdisciplinary
+interest
+interested
+interestedly
+interesting
+interestingly
+interestingness
+interests
+interface
+interfaced
+interfaces
+interfacial
+interfacing
+interfaith
+interfere
+interfered
+interference
+interferences
+interferential
+interferer
+interferes
+interfering
+interferingly
+interferometer
+interferometers
+interferometer's
+interferon
+interfile
+interflow
+interfluent
+interfusion
+intergalactic
+intergeneration
+intergenerational
+interglacial
+intergovernmental
+intergrowth
+interim
+interior
+interiorise
+interiorised
+interiorising
+interiority
+interiorly
+interiors
+interior's
+interject
+interjected
+interjecting
+interjection
+interjectional
+interjectionally
+interjector
+interjectory
+interjects
+interlace
+interlaced
+interlacement
+interlaces
+interlacing
+interlaminate
+interlamination
+interlard
+interlay
+interlayer
+interleaf
+interleave
+interleaved
+interleaves
+interleaving
+interlibrary
+interline
+interlinear
+interlining
+interlink
+interlinked
+interlinking
+interlinks
+interlobular
+interlock
+interlocked
+interlocker
+interlocking
+interlocks
+interlocution
+interlocutor
+interlocutory
+interlope
+interloped
+interloper
+interlopes
+interloping
+interlude
+interludes
+interlunar
+interlunation
+intermarriage
+intermarry
+intermeddle
+intermediaries
+intermediary
+intermediate
+intermediated
+intermediately
+intermediateness
+intermediates
+intermediate's
+intermediating
+intermediation
+interment
+intermesh
+intermeshed
+intermezzo
+intermigration
+interminable
+interminableness
+interminably
+intermingle
+intermingled
+intermingles
+intermingling
+intermission
+intermissions
+intermit
+intermittence
+intermittency
+intermittent
+intermittently
+intermix
+intermixed
+intermixes
+intermixing
+intermixture
+intermolecular
+intern
+internal
+internalisation
+internalisations
+internalisation's
+internalise
+internalised
+internalises
+internalising
+internality
+internally
+internals
+international
+internationalisation
+internationalisations
+internationalisation's
+internationalise
+internationalised
+internationalises
+internationalising
+internationalism
+internationalist
+internationalists
+internationality
+internationally
+internationals
+interne
+internecine
+interned
+internee
+internet
+interning
+internist
+internment
+interns
+internship
+interoffice
+interpellant
+interpellation
+interpellator
+interpenetrate
+interpenetrates
+interpenetration
+interpersonal
+interpersonally
+interphone
+interplanetary
+interplant
+interplay
+interplead
+interpolate
+interpolated
+interpolates
+interpolating
+interpolation
+interpolations
+interpolative
+interpolator
+interpose
+interposed
+interposer
+interposes
+interposing
+interposition
+interpret
+interpretability
+interpretable
+interpretation
+interpretational
+interpretations
+interpretation's
+interpretative
+interpretatively
+interpreted
+interpreter
+interpreters
+interpreting
+interpretive
+interpretively
+interprets
+interracial
+interred
+interregional
+interregnum
+interrelate
+interrelated
+interrelatedness
+interrelates
+interrelating
+interrelation
+interrelations
+interrelationship
+interrelationships
+interrelationship's
+interrex
+interring
+interrogate
+interrogated
+interrogates
+interrogating
+interrogation
+interrogational
+interrogations
+interrogative
+interrogatively
+interrogatives
+interrogator
+interrogatories
+interrogators
+interrogatory
+interrupt
+interrupted
+interrupter
+interrupters
+interruptible
+interrupting
+interruption
+interruptions
+interruption's
+interruptive
+interrupts
+interscholastic
+intersect
+intersected
+intersecting
+intersection
+intersections
+intersection's
+intersects
+intersession
+interspecies
+intersperse
+interspersed
+intersperses
+interspersing
+interspersion
+interspersions
+interstate
+interstellar
+interstice
+interstices
+interstitial
+interstitially
+intersystem
+intertexture
+intertwine
+intertwined
+intertwinement
+intertwines
+intertwining
+interurban
+interval
+intervals
+interval's
+intervene
+intervened
+intervener
+intervenes
+intervening
+intervention
+interventionism
+interventionist
+interventions
+intervention's
+interview
+interviewed
+interviewee
+interviewees
+interviewee's
+interviewer
+interviewers
+interviewer's
+interviewing
+interviews
+intervocalic
+interwar
+interweave
+interweaves
+interweaving
+interwoven
+intestacy
+intestate
+intestinal
+intestinally
+intestine
+intestines
+intestine's
+intimacy
+intimate
+intimated
+intimately
+intimateness
+intimates
+intimating
+intimation
+intimations
+intimidate
+intimidated
+intimidates
+intimidating
+intimidation
+intimidator
+into
+intolerability
+intolerable
+intolerableness
+intolerably
+intolerance
+intolerant
+intolerantly
+intonate
+intonation
+intonations
+intonation's
+intone
+intoned
+intoner
+intoning
+intoxicant
+intoxicate
+intoxicated
+intoxicating
+intoxication
+intra
+intracellular
+intractability
+intractable
+intractableness
+intractably
+intradepartmental
+intrados
+intraepithelial
+intramural
+intramuscularly
+intranasal
+intrans
+intransigence
+intransigent
+intransigently
+intransigents
+intransitive
+intransitively
+intrapulmonary
+intrastate
+intrauterine
+intravenous
+intravenously
+intrench
+intrepid
+intrepidity
+intrepidly
+intrepidness
+intricacies
+intricacy
+intricate
+intricately
+intricateness
+intrigue
+intrigued
+intriguer
+intrigues
+intriguing
+intriguingly
+intrinsic
+intrinsically
+intro
+introduce
+introduced
+introducer
+introduces
+introducing
+introduction
+introductions
+introduction's
+introductorily
+introductory
+introit
+intromission
+introrsely
+introspect
+introspection
+introspections
+introspective
+introspectively
+introspectiveness
+introversion
+introvert
+introverted
+intrude
+intruded
+intruder
+intruders
+intruder's
+intrudes
+intruding
+intrusion
+intrusions
+intrusion's
+intrusive
+intrusively
+intrusiveness
+intuit
+intuiting
+intuition
+intuitional
+intuitionism
+intuitionist
+intuitions
+intuition's
+intuitive
+intuitively
+intuitiveness
+intuitivism
+intumesce
+inundate
+inundated
+inundates
+inundating
+inundation
+inundations
+inundator
+inurbane
+inure
+inured
+inuring
+inutile
+inv
+invade
+invaded
+invader
+invaders
+invades
+invading
+invalid
+invalidate
+invalidated
+invalidates
+invalidating
+invalidation
+invalidations
+invalidator
+invalidism
+invalidities
+invalidity
+invalidly
+invalids
+invaluable
+invaluableness
+invaluably
+invariability
+invariable
+invariableness
+invariably
+invariance
+invariant
+invariantly
+invariants
+invasion
+invasions
+invasion's
+invasive
+invasiveness
+invective
+invectively
+invectiveness
+inveigh
+inveigher
+inveigle
+inveigled
+inveiglement
+inveigler
+inveigling
+invent
+invented
+inventing
+invention
+inventions
+invention's
+inventive
+inventively
+inventiveness
+inventor
+inventorial
+inventorially
+inventories
+inventors
+inventor's
+inventory
+inventory's
+invents
+inveracity
+inverse
+inversely
+inverses
+inversion
+inversions
+invert
+invertebrate
+invertebrates
+invertebrate's
+inverted
+inverter
+inverters
+invertible
+inverting
+inverts
+invest
+invested
+investigate
+investigated
+investigates
+investigating
+investigation
+investigational
+investigations
+investigative
+investigator
+investigators
+investigator's
+investing
+investiture
+investment
+investments
+investment's
+investor
+investors
+investor's
+invests
+inveteracy
+inveterate
+inveterately
+invidious
+invidiously
+invidiousness
+invigorate
+invigorated
+invigorates
+invigorating
+invigoratingly
+invigoration
+invigorator
+invincibility
+invincible
+invincibleness
+invincibly
+inviolability
+inviolable
+inviolableness
+inviolably
+inviolacy
+inviolate
+inviolately
+inviolateness
+invisibility
+invisible
+invisibleness
+invisibly
+invitation
+invitational
+invitations
+invitation's
+invitatory
+invite
+invited
+invitee
+invitees
+inviter
+invites
+inviting
+invitingly
+invocate
+invocation
+invocations
+invocation's
+invocatory
+invoice
+invoiced
+invoices
+invoicing
+invoke
+invoked
+invoker
+invokers
+invokes
+invoking
+involucel
+involucrate
+involuntarily
+involuntariness
+involuntary
+involution
+involutions
+involve
+involved
+involvement
+involvements
+involvement's
+involver
+involves
+involving
+invulnerability
+invulnerable
+invulnerableness
+invulnerably
+inward
+inwardly
+inwardness
+inwards
+inwrought
+iodated
+iodating
+iodide
+iodinate
+iodinated
+iodinating
+iodination
+iodine
+iodisation
+iodise
+iodised
+iodiser
+iodisers
+iodises
+iodising
+iolite
+ion
+ionic
+ionisable
+ionisation
+ionisations
+ionisation's
+ionise
+ionised
+ioniser
+ionisers
+ionises
+ionising
+ionone
+ionosphere
+ionospheric
+ions
+iota
+iotacism
+ipecac
+ipso
+irascibility
+irascible
+irascibleness
+irascibly
+irate
+irately
+ire
+ireful
+irenic
+irenics
+ire's
+iridaceous
+iridescence
+iridescent
+iridescently
+iridium
+iridosmine
+iris
+irises
+iritis
+irk
+irked
+irking
+irks
+irksome
+irksomely
+irksomeness
+iron
+ironbark
+ironbound
+ironclad
+ironed
+ironer
+ironhanded
+ironhandedness
+ironic
+ironical
+ironically
+ironicalness
+ironies
+ironing
+ironings
+ironist
+ironmaster
+ironmonger
+ironmongery
+irons
+ironsides
+ironstone
+ironware
+ironweed
+ironwood
+ironwork
+ironworker
+ironworks
+ironwork's
+irony
+irradiance
+irradiate
+irradiated
+irradiation
+irradiative
+irradiator
+irrational
+irrationalise
+irrationalises
+irrationalism
+irrationality
+irrationally
+irrationalness
+irrationals
+irreclaimable
+irreclaimably
+irreconcilability
+irreconcilable
+irreconcilableness
+irreconcilably
+irrecoverable
+irrecoverableness
+irrecoverably
+irrecusably
+irredeemable
+irredeemably
+irredentism
+irredentist
+irreducibility
+irreducible
+irreducibly
+irrefragability
+irrefragable
+irrefragably
+irrefutability
+irrefutable
+irrefutably
+irregardless
+irregular
+irregularities
+irregularity
+irregularly
+irregulars
+irrelative
+irrelatively
+irrelevance
+irrelevances
+irrelevancies
+irrelevancy
+irrelevant
+irrelevantly
+irreligion
+irreligionist
+irreligious
+irreligiously
+irremediable
+irremediableness
+irremediably
+irremovable
+irremovably
+irreparable
+irreparableness
+irreparably
+irreplaceable
+irreplaceably
+irrepressibility
+irrepressible
+irrepressibly
+irreproachability
+irreproachable
+irreproachableness
+irreproachably
+irreproducibility
+irreproducible
+irresistibility
+irresistible
+irresistibleness
+irresistibly
+irresolute
+irresolutely
+irresoluteness
+irresolution
+irresolvable
+irrespective
+irrespectively
+irrespirable
+irresponsibility
+irresponsible
+irresponsibleness
+irresponsibly
+irresponsive
+irresponsiveness
+irretentive
+irretrievability
+irretrievable
+irretrievably
+irreverence
+irreverent
+irreverently
+irreversibility
+irreversible
+irreversibly
+irrevocability
+irrevocable
+irrevocableness
+irrevocably
+irrigate
+irrigated
+irrigates
+irrigating
+irrigation
+irrigational
+irrigations
+irrigator
+irrigators
+irritability
+irritable
+irritableness
+irritably
+irritant
+irritants
+irritate
+irritated
+irritates
+irritating
+irritatingly
+irritation
+irritations
+irrupt
+irrupted
+irrupting
+irruption
+irruptions
+irruptive
+irrupts
+is
+isagogics
+isentropic
+isinglass
+island
+islander
+islanders
+islands
+isle
+isles
+isle's
+islet
+islets
+islet's
+ism
+isn't
+isobar
+isobaric
+isobutylene
+isochronal
+isochronally
+isochronise
+isochronised
+isochronises
+isochronising
+isochronous
+isochronously
+isochroous
+isocline
+isoclinic
+isocracy
+isodiaphere
+isodimorphism
+isogamete
+isogloss
+isograms
+isogram's
+isolate
+isolated
+isolates
+isolating
+isolation
+isolationism
+isolationist
+isolationistic
+isolations
+isolator
+isomer
+isomeric
+isomerise
+isomerised
+isomerises
+isomerising
+isomerism
+isomers
+isometric
+isometrics
+isomorphic
+isomorphism
+isomorphism's
+isonomy
+isooctane
+isopiestic
+isopleths
+isopod
+isoprene
+isopropyl
+isosceles
+isothere
+isotherm
+isothermal
+isothermally
+isotherms
+isotonic
+isotope
+isotopes
+isotope's
+isotopic
+isotropic
+isotropy
+issuance
+issuant
+issue
+issued
+issueless
+issuer
+issuers
+issues
+issuing
+isthmian
+isthmus
+istle
+it
+italianate
+italic
+italicisation
+italicisations
+italicisation's
+italicise
+italicised
+italicises
+italicising
+italics
+itch
+itches
+itchiness
+itching
+itchy
+it'd
+item
+itemisation
+itemisations
+itemisation's
+itemise
+itemised
+itemiser
+itemisers
+itemises
+itemising
+items
+item's
+iterance
+iterant
+iterate
+iterated
+iterates
+iterating
+iteration
+iterations
+iterative
+iteratively
+ithyphallic
+itinerancy
+itinerant
+itinerantly
+itineraries
+itinerary
+itinerate
+itinerated
+itinerates
+itinerating
+itineration
+it'll
+its
+it's
+itself
+itsy
+iv
+ivied
+ivies
+ivories
+ivory
+ivy
+ivy's
+ix
+j's
+jab
+jabbed
+jabber
+jabbered
+jabberer
+jabbering
+jabbers
+jabberwocky
+jabbing
+jabot
+jabs
+jab's
+jacamar
+jack
+jackal
+jackals
+jackal's
+jackanapes
+jackass
+jackboot
+jackbooted
+jackboots
+jackdaw
+jackdaws
+jacked
+jacket
+jacketed
+jackets
+jackfish
+jackfruit
+jackhammer
+jacking
+jackpot
+jackpots
+jacks
+jackscrew
+jackshaft
+jacksnipe
+jackstay
+jackstraws
+jaconet
+jade
+jaded
+jadedly
+jadedness
+jadeite
+jades
+jading
+jag
+jagged
+jaggedly
+jaggedness
+jagging
+jaggy
+jaguar
+jaguarondi
+jai
+jail
+jailbait
+jailbird
+jailbreak
+jailed
+jailer
+jailers
+jailhouse
+jailing
+jailor
+jails
+jalap
+jalopies
+jalopy
+jalousie
+jam
+jamb
+jambalaya
+jambeau
+jamboree
+jammed
+jammer
+jamming
+jammy
+jams
+jangle
+jangled
+jangler
+jangles
+jangling
+janissaries
+janissary
+janitor
+janitorial
+janitors
+janitor's
+janitress
+japanned
+japanning
+jape
+japer
+japery
+japes
+japing
+japonica
+jar
+jardini�re
+jarful
+jargon
+jargonise
+jargonised
+jargonises
+jargonising
+jarl
+jarred
+jarring
+jarringly
+jars
+jar's
+jasmine
+jasper
+jaspers
+jaundice
+jaundiced
+jaundices
+jaundicing
+jaunt
+jaunted
+jauntier
+jauntily
+jauntiness
+jaunting
+jaunts
+jaunt's
+jaunty
+java
+javelin
+javelins
+javelin's
+jaw
+jawbone
+jawbreaker
+jawed
+jaws
+jaw's
+jay
+jaybird
+jaywalk
+jazz
+jazzier
+jazzily
+jazziness
+jazzman
+jazzmen
+jazzy
+jealous
+jealousies
+jealously
+jealousness
+jealousy
+jean
+jeans
+jeep
+jeepers
+jeeps
+jeep's
+jeer
+jeerer
+jeeringly
+jeers
+jeer's
+jejune
+jejunely
+jejuneness
+jejunum
+jell
+jelled
+jellied
+jellies
+jells
+jelly
+jellybean
+jellyfish
+jellying
+jellylike
+jelly's
+jenny
+jeopardise
+jeopardised
+jeopardises
+jeopardising
+jeopardy
+jequirity
+jerboa
+jerk
+jerked
+jerker
+jerkier
+jerkily
+jerkin
+jerkiness
+jerking
+jerks
+jerkwater
+jerky
+jeroboam
+jerry
+jersey
+jerseys
+jersey's
+jess
+jest
+jested
+jester
+jesting
+jests
+jet
+jetliner
+jetliners
+jetport
+jets
+jet's
+jetsam
+jetted
+jetties
+jetting
+jettison
+jetty
+jewel
+jewelfish
+jewelled
+jeweller
+jewelleries
+jewellers
+jewellery
+jewelling
+jewels
+jewfish
+jib
+jibber
+jibbers
+jibbing
+jibe
+jibed
+jibes
+jibing
+jiff
+jiffies
+jiffy
+jig
+jigged
+jigger
+jiggered
+jiggermast
+jigging
+jiggle
+jiggled
+jiggles
+jiggling
+jigs
+jig's
+jigsaw
+jihad
+jillaroo
+jillion
+jilt
+jilted
+jilter
+jilts
+jimjams
+jimmied
+jimmies
+jimmy
+jimmying
+jingle
+jingled
+jingles
+jingling
+jingly
+jingo
+jingoes
+jingoish
+jingoism
+jingoist
+jingoistic
+jink
+jinks
+jinn
+jinni
+jinx
+jitney
+jitneys
+jitter
+jitterbug
+jitterbugging
+jitters
+jittery
+jiujutsu
+jive
+jived
+jives
+jiving
+job
+jobbed
+jobber
+jobbers
+jobbery
+jobbing
+jobcentre
+jobcentres
+jobholder
+jobholders
+jobless
+joblessness
+jobs
+job's
+jock
+jockey
+jockeyed
+jockeying
+jockeys
+jocko
+jocks
+jockstrap
+jockstraps
+jocose
+jocosely
+jocoseness
+jocosity
+jocular
+jocularity
+jocularly
+jocund
+jocundity
+jocundly
+jodhpur
+jodhpurs
+joey
+jog
+jogged
+jogger
+joggers
+jogging
+joggle
+joggled
+joggles
+joggling
+jogs
+john
+johns
+john's
+join
+joinable
+joined
+joiner
+joiners
+joinery
+joining
+joins
+joint
+jointed
+jointer
+jointing
+jointly
+joints
+joint's
+jointure
+jointures
+jointworm
+joist
+joists
+joke
+joked
+joker
+jokers
+jokes
+joking
+jokingly
+jollied
+jollier
+jollies
+jollification
+jollifications
+jollify
+jollities
+jollity
+jolly
+jollying
+jolt
+jolted
+jolter
+jolting
+jolts
+jolty
+jonquil
+jonquils
+jorum
+josh
+joshed
+josher
+joshes
+joshing
+joss
+jostle
+jostled
+jostles
+jostling
+jot
+jota
+jots
+jotted
+jotter
+jotting
+joule
+jounce
+jounced
+jounces
+jouncing
+jour
+journal
+journalese
+journalise
+journalised
+journalises
+journalising
+journalism
+journalist
+journalistic
+journalistically
+journalists
+journalist's
+journals
+journal's
+journey
+journeyed
+journeying
+journeyman
+journeymen
+journeys
+journeywork
+joust
+jousted
+jouster
+jousting
+jousts
+jovial
+joviality
+jovially
+jowl
+jowls
+joy
+joyful
+joyfully
+joyfulness
+joyless
+joylessly
+joylessness
+joyous
+joyously
+joyousness
+joypop
+joyride
+joyriding
+joys
+joy's
+joystick
+joysticks
+juba
+jubbah
+jubilant
+jubilantly
+jubilation
+jubilations
+jubilee
+judge
+judged
+judgement
+judgemental
+judgements
+judgement's
+judger
+judges
+judgeship
+judging
+judicable
+judicative
+judicator
+judicatory
+judicature
+judicatures
+judicial
+judicially
+judiciaries
+judiciary
+judicious
+judiciously
+judiciousness
+judo
+judoka
+jug
+jugged
+juggernaut
+juggernauted
+juggernauting
+juggernauts
+juggernaut's
+jugging
+juggins
+juggle
+juggled
+juggler
+jugglers
+jugglery
+juggles
+juggling
+jugs
+jug's
+jugular
+jugulate
+juice
+juiced
+juiceless
+juicer
+juicers
+juices
+juice's
+juicier
+juiciest
+juicily
+juiciness
+juicing
+juicy
+jujitsu
+juju
+jujube
+jujutsu
+juke
+jukebox
+jukes
+julep
+juleps
+julienne
+jumble
+jumbled
+jumbles
+jumbling
+jumbo
+jumbos
+jumbuck
+jump
+jumped
+jumper
+jumpers
+jumpier
+jumpiness
+jumping
+jumps
+jumpy
+juncaceous
+junco
+junction
+junctions
+junction's
+juncture
+junctures
+juncture's
+jungle
+jungles
+jungle's
+junior
+juniors
+junior's
+juniper
+junk
+junket
+junketed
+junketeer
+junketeering
+junketer
+junketing
+junkets
+junkie
+junkies
+junkman
+junks
+junky
+junkyard
+junta
+jupon
+jurally
+juridical
+juries
+jurisdiction
+jurisdictional
+jurisdictionally
+jurisdictions
+jurisdiction's
+jurisprudence
+jurisprudent
+jurisprudential
+jurisprudentially
+jurist
+juristic
+juristically
+jurists
+juror
+jurors
+juror's
+jury
+juryman
+jury's
+jus
+jussive
+jussives
+just
+justice
+justices
+justice's
+justifiability
+justifiable
+justifiably
+justification
+justifications
+justificatory
+justified
+justifier
+justifiers
+justifier's
+justifies
+justify
+justifying
+justly
+justness
+jut
+jute
+jutes
+jutted
+jutties
+jutting
+juttying
+juvenal
+juvenescence
+juvenescent
+juvenile
+juveniles
+juvenile's
+juvenilia
+juvenility
+juxtapose
+juxtaposed
+juxtaposes
+juxtaposing
+juxtaposition
+k's
+kabob
+kaka
+kakapo
+kakemono
+kaki
+kale
+kaleidoscope
+kaleidoscopes
+kaleidoscopic
+kaleidoscopically
+kali
+kalian
+kalmia
+kalong
+kalpak
+kalsomine
+kamala
+kamikaze
+kampong
+kana
+kanga
+kangaroo
+kangaroos
+kantar
+kaoliang
+kaolin
+kapellmeister
+kapok
+kappa
+kaput
+karabiner
+karat
+karate
+karma
+karmic
+kart
+karyotin
+kasbah
+katakana
+katydid
+kauri
+kava
+kayak
+kayaks
+kayo
+kayoed
+kayoing
+kazoo
+kazoos
+kcal
+kea
+kebab
+kebabs
+kebob
+ked
+kedge
+kedgeree
+keel
+keelboat
+keeled
+keelhaul
+keeling
+keels
+keelson
+keen
+keener
+keenest
+keening
+keenly
+keenness
+keep
+keeper
+keepers
+keeping
+keeps
+keepsake
+keepsakes
+keeshond
+kef
+keg
+kegs
+kelp
+kelpie
+kempt
+ken
+kendo
+kennel
+kennelled
+kennelling
+kennels
+kennel's
+keno
+kenosis
+kept
+keratin
+keratinisation
+keratinise
+keratinised
+keratinises
+keratinising
+kerb
+kerbing
+kerbstone
+kerchief
+kerchiefs
+kerchief's
+kermes
+kermis
+kern
+kernel
+kernelled
+kernelling
+kernels
+kernel's
+kerosene
+kersey
+kerseymere
+kestrel
+ketch
+ketches
+ketchup
+ketene
+ketosis
+kettle
+kettledrum
+kettles
+kettle's
+kevel
+kewpie
+key
+keyboard
+keyboarder
+keyboarding
+keyboards
+keyboard's
+keyed
+keyhole
+keyholes
+keying
+keyless
+keynote
+keynoter
+keynotes
+keypad
+keypads
+keypad's
+keypunch
+keypunched
+keypuncher
+keypunches
+keypunching
+keys
+keystone
+keystones
+keystroke
+keystrokes
+keystroke's
+keyway
+keyways
+keyword
+keywords
+keyword's
+khaki
+khan
+kHz
+kibble
+kibbled
+kibbles
+kibbling
+kibbutz
+kibbutzim
+kibitz
+kibitzer
+kibosh
+kick
+kickback
+kickbacks
+kicked
+kicker
+kickers
+kicking
+kicks
+kickshaw
+kickshaws
+kickstand
+kid
+kidded
+kidder
+kiddie
+kiddies
+kidding
+kiddush
+kidnap
+kidnapped
+kidnapper
+kidnappers
+kidnapper's
+kidnapping
+kidnappings
+kidnapping's
+kidnaps
+kidney
+kidneys
+kidney's
+kids
+kid's
+kidskin
+kielbasa
+kike
+kill
+killable
+killdeer
+killed
+killer
+killers
+killing
+killingly
+killings
+killjoy
+kills
+kiln
+kilo
+kilobit
+kilobits
+kilobyte
+kilobytes
+kilocalorie
+kilocalories
+kilocurie
+kilocycle
+kilocycles
+kilogauss
+kilogram
+kilohertz
+kilolitre
+kilolitres
+kilolitre's
+kilometre
+kilometres
+kilometre's
+kilos
+kiloton
+kilotons
+kilovolt
+kilovolts
+kilowatt
+kilowatts
+kilt
+kilter
+kilts
+kimono
+kin
+kina
+kinaesthesia
+kinaesthetic
+kinaesthetically
+kind
+kinder
+kindergarten
+kindergartner
+kindest
+kindle
+kindled
+kindler
+kindles
+kindlier
+kindliness
+kindling
+kindly
+kindness
+kindnesses
+kindred
+kinds
+kinematical
+kinematics
+kinescope
+kinescoped
+kinescopes
+kinesics
+kinesis
+kinetic
+kinetics
+kinfolk
+kinfolks
+king
+kingbird
+kingbolt
+kingcraft
+kingcup
+kingdom
+kingdoms
+kingdom's
+kingfish
+kingfisher
+kinglet
+kinglier
+kingliness
+kingly
+kingmaker
+kingpin
+kings
+kingship
+kingside
+kingwood
+kink
+kinkajou
+kinkajou's
+kinkier
+kinkiness
+kinky
+kinsfolk
+kinship
+kinsman
+kinsmen
+kinsmen's
+kinswoman
+kiosk
+kiosks
+kip
+kipper
+kippered
+kippering
+kippers
+kips
+kirsch
+kirtle
+kismet
+kiss
+kissable
+kissed
+kisser
+kissers
+kisses
+kissing
+kit
+kitbag
+kitbags
+kitchen
+kitchenette
+kitchenettes
+kitchens
+kitchen's
+kitchenware
+kite
+kited
+kites
+kith
+kithara
+kiting
+kits
+kit's
+kitsch
+kitschy
+kitten
+kittened
+kittening
+kittenish
+kittenishly
+kittenishness
+kittens
+kitten's
+kitties
+kittiwake
+kittle
+kittled
+kittler
+kittles
+kittling
+kitty
+kiwi
+kiwis
+kiwi's
+klatch
+klaxon
+kleptomania
+kleptomaniac
+klieg
+kludge
+kludged
+kludges
+kludge's
+kludging
+klutz
+klutzes
+klutziness
+klutz's
+klystron
+klystrons
+km
+knack
+knacker
+knackery
+knacks
+knackwurst
+knag
+knap
+knapsack
+knapsacks
+knapsack's
+knar
+knave
+knavery
+knaves
+knave's
+knavish
+knavishly
+knawel
+knead
+kneaded
+kneader
+kneading
+kneads
+knee
+kneecap
+kneecaps
+kneed
+kneehole
+kneeholes
+kneeing
+kneel
+kneeled
+kneeler
+kneeling
+kneels
+kneepad
+kneepads
+knees
+knell
+knells
+knell's
+knelt
+knew
+knick
+knickers
+knickknack
+knife
+knifed
+knifelike
+knifes
+knifing
+knight
+knighted
+knighthood
+knighting
+knightliness
+knightly
+knights
+knish
+knit
+knits
+knitted
+knitter
+knitting
+knitwear
+knives
+knob
+knobbed
+knobs
+knob's
+knock
+knockabout
+knockabouts
+knockdown
+knockdowns
+knocked
+knocker
+knockers
+knocking
+knockout
+knockouts
+knocks
+knockwurst
+knoll
+knolls
+knoll's
+knot
+knotgrass
+knothole
+knots
+knot's
+knotted
+knottier
+knottiness
+knotting
+knotty
+knotweed
+knout
+know
+knowable
+knower
+knowing
+knowingly
+knowledge
+knowledgeable
+knowledgeableness
+knowledgeably
+known
+knows
+knuckle
+knuckleball
+knucklebone
+knucklebones
+knuckled
+knucklehead
+knuckleheaded
+knuckles
+knuckling
+knurl
+koala
+kobold
+kohlrabi
+kola
+kolkhoz
+kook
+kookaburra
+kookier
+kookiness
+kooks
+kooky
+kopeck
+kopek
+kosher
+koshered
+koshering
+kowtow
+kraken
+kraut
+krauts
+kremlinologist
+krill
+krypton
+kudos
+kudu
+kudzu
+kulak
+kumquat
+kurtosis
+kwashiorkor
+kymograph
+l's
+la
+lab
+labarum
+labdanum
+labefaction
+label
+labelled
+labeller
+labellers
+labeller's
+labelling
+labels
+label's
+labia
+labial
+labialisation
+labialisations
+labialisation's
+labialise
+labialised
+labialises
+labialising
+labile
+labiovelar
+labium
+lablab
+laboratories
+laboratory
+laboratory's
+laborious
+laboriously
+laboriousness
+labour
+laboured
+labouredly
+labourer
+labourers
+labourer's
+labouring
+labouringly
+labourite
+labourites
+labourite's
+labours
+labret
+labroid
+labs
+lab's
+labyrinth
+labyrinthine
+labyrinths
+lace
+laced
+lacelike
+lacer
+lacerate
+lacerated
+lacerates
+lacerating
+laceration
+lacerations
+lacerative
+lacertilian
+laces
+lacewing
+lacework
+lachrymal
+lachrymator
+lachrymatory
+lachrymose
+lachrymosely
+lacier
+lacing
+lack
+lackadaisical
+lackadaisically
+lackaday
+lacked
+lackey
+lackeyed
+lackeying
+lackeys
+lacking
+lacklustre
+lacks
+laconic
+laconically
+laconism
+lacquer
+lacquered
+lacquerer
+lacquerers
+lacquering
+lacquers
+lacrosse
+lactase
+lactate
+lactated
+lactates
+lactating
+lactation
+lacteal
+lactic
+lactiferous
+lactometer
+lactose
+lacuna
+lacunae
+lacunaria
+lacunas
+lacy
+lad
+ladder
+ladders
+laddie
+lade
+laded
+laden
+ladies
+lading
+ladle
+ladled
+ladles
+ladling
+lads
+lady
+ladybird
+ladybirds
+ladybird's
+ladybug
+ladybugs
+ladybug's
+ladyfinger
+ladylike
+ladylove
+lady's
+ladyship
+laevogyrate
+laevorotatory
+laevulin
+laevulose
+lag
+lagan
+lager
+lagers
+laggard
+laggardness
+laggards
+lagged
+lagging
+lagniappe
+lagoon
+lagoons
+lagoon's
+lags
+laic
+laically
+laicisation
+laicise
+laicised
+laicises
+laicising
+laicism
+laid
+lain
+lair
+laird
+lairs
+lair's
+laissez
+laitance
+laity
+lake
+lakefront
+lakes
+lake's
+lakeshore
+lakeside
+laky
+lam
+lama
+lamas
+lamasery
+lamb
+lambaste
+lambda
+lambdas
+lambda's
+lambency
+lambent
+lambently
+lambkill
+lambkin
+lambrequin
+lambs
+lamb's
+lambskin
+lame
+lamebrain
+lamed
+lamella
+lamellae
+lamellar
+lamellas
+lamellate
+lamellicorn
+lamellirostral
+lamely
+lameness
+lament
+lamentable
+lamentableness
+lamentably
+lamentation
+lamentations
+lamentation's
+lamented
+lamenting
+laments
+lamer
+lames
+lamest
+lamina
+laminar
+laminate
+laminated
+laminates
+laminating
+lamination
+laminations
+laminator
+laming
+laminitis
+lamming
+lamp
+lampas
+lampblack
+lampion
+lamplight
+lamplighter
+lampoon
+lampooned
+lampooner
+lampoonery
+lampooning
+lampoons
+lamppost
+lampposts
+lamprey
+lampreys
+lamprophyre
+lamps
+lamp's
+lampshade
+lampshades
+lanai
+lance
+lanced
+lancelet
+lancer
+lancers
+lances
+lancet
+lanceted
+lancewood
+lancination
+lancinations
+lancing
+land
+landau
+landaulet
+landed
+lander
+landfall
+landfill
+landform
+landgrave
+landgraviate
+landgravine
+landholder
+landholders
+landholding
+landholdings
+landing
+landings
+landladies
+landlady
+landlady's
+landless
+landlocked
+landlord
+landlordism
+landlords
+landlord's
+landlubber
+landlubberly
+landmark
+landmarks
+landmark's
+landmass
+landmasses
+landowner
+landowners
+landowner's
+landownership
+landowning
+landrace
+lands
+landscape
+landscaped
+landscaper
+landscapes
+landscaping
+landscapist
+landscapists
+landside
+landsknecht
+landslide
+landslides
+landslip
+landslips
+landsman
+landward
+landwards
+lane
+lanes
+lane's
+langlauf
+langouste
+langrage
+langsyne
+language
+languages
+language's
+langue
+languet
+languid
+languidly
+languidness
+languish
+languished
+languisher
+languishes
+languishing
+languishingly
+languishment
+languor
+languorous
+languorously
+laniary
+lank
+lankier
+lankily
+lankiness
+lankly
+lankness
+lanky
+lanner
+lanneret
+lanolin
+lansquenet
+lantern
+lanterns
+lantern's
+lanthanide
+lanthanum
+lanyard
+lap
+lapboard
+lapdog
+lapel
+lapelled
+lapels
+lapel's
+lapful
+lapidarian
+lapidary
+lapidate
+lapillus
+lapis
+lapped
+lapper
+lappet
+lapping
+laps
+lap's
+lapse
+lapsed
+lapser
+lapses
+lapsing
+lapstreak
+laptop
+laptops
+laptop's
+lapwing
+larcener
+larcenist
+larcenous
+larcenously
+larceny
+larch
+lard
+larded
+larder
+larding
+lards
+lardy
+large
+largely
+largemouth
+largeness
+larger
+largess
+largesse
+largest
+larghetto
+largish
+largo
+largos
+lariat
+larine
+lark
+larker
+larks
+lark's
+larkspur
+larrikin
+larrup
+larva
+larvae
+larval
+laryngeal
+larynges
+laryngitis
+laryngoscope
+larynx
+larynxes
+lasagne
+lascar
+lascivious
+lasciviously
+lasciviousness
+laser
+lasers
+laser's
+lash
+lashed
+lasher
+lashes
+lashing
+lashings
+lasing
+lass
+lasses
+lassie
+lassies
+lassitude
+lasso
+lassoed
+lassoer
+lassoes
+lass's
+last
+lasted
+lasting
+lastingly
+lastingness
+lastly
+lasts
+lat
+latch
+latched
+latches
+latchet
+latching
+latchkey
+latchstring
+late
+latecomer
+latecomers
+lateen
+lately
+latencies
+latency
+latency's
+lateness
+latent
+latently
+later
+lateral
+laterally
+latest
+latex
+latexes
+latex's
+lath
+lathe
+lather
+lathered
+latherer
+lathering
+lathery
+lathes
+lathing
+lathy
+latish
+latitude
+latitudes
+latitude's
+latitudinal
+latitudinarian
+latitudinarianism
+latria
+latrine
+latrines
+latrine's
+latten
+latter
+latterly
+lattermost
+latter's
+lattice
+latticed
+lattices
+lattice's
+latticework
+latticing
+laud
+laudability
+laudable
+laudableness
+laudably
+laudanum
+laudation
+laudations
+laudatory
+lauder
+lauds
+laugh
+laughable
+laughableness
+laughably
+laughed
+laugher
+laughers
+laughing
+laughingly
+laughingstock
+laughingstocks
+laughs
+laughter
+launch
+launched
+launcher
+launchers
+launches
+launching
+launchings
+launder
+laundered
+launderer
+launderette
+launderettes
+laundering
+launderings
+launders
+laundress
+laundresses
+laundries
+laundry
+laundryman
+laundrymen
+laundrywoman
+lauraceous
+laureate
+laureates
+laureateship
+laurel
+laurelled
+laurelling
+laurels
+laurel's
+laurustinus
+lava
+lavabo
+lavaliere
+lavation
+lavational
+lavatories
+lavatory
+lavatory's
+lave
+lavender
+laver
+laving
+lavish
+lavished
+lavishing
+lavishly
+lavishness
+lavolta
+law
+lawbreaker
+lawbreakers
+lawbreaking
+lawful
+lawfully
+lawfulness
+lawgiver
+lawgivers
+lawgiving
+lawks
+lawless
+lawlessly
+lawlessness
+lawmaker
+lawmakers
+lawmaking
+lawman
+lawmen
+lawn
+lawns
+lawn's
+lawny
+lawrencium
+laws
+law's
+lawsuit
+lawsuits
+lawsuit's
+lawyer
+lawyerly
+lawyers
+lawyer's
+lax
+laxative
+laxatives
+laxity
+laxly
+laxness
+lay
+layabout
+layabouts
+layaway
+layer
+layered
+layering
+layers
+layette
+laying
+layman
+laymen
+layoff
+layoffs
+layout
+layouts
+layout's
+layover
+layovers
+laypeople
+layperson
+lays
+laywoman
+laywomen
+lazaretto
+laze
+lazed
+lazes
+lazier
+laziest
+lazily
+laziness
+lazing
+lazuli
+lazy
+lazybones
+lb
+lbs
+lea
+leach
+leaches
+leaching
+lead
+leaded
+leaden
+leadenly
+leadenness
+leader
+leaderless
+leaders
+leader's
+leadership
+leaderships
+leadership's
+leading
+leadings
+leadless
+leadoff
+leads
+leadsman
+leadsmen
+leady
+leaf
+leafage
+leafcutter
+leafed
+leafhopper
+leafier
+leafiest
+leafing
+leafless
+leaflet
+leaflets
+leaflet's
+leafs
+leafstalk
+leafstalks
+leafy
+league
+leagued
+leaguer
+leaguers
+leagues
+leaguing
+leak
+leakage
+leakages
+leakage's
+leaked
+leakier
+leakiness
+leaking
+leaks
+leaky
+lean
+leaned
+leaner
+leanest
+leaning
+leanings
+leanly
+leanness
+leans
+leant
+leap
+leaped
+leaper
+leapfrog
+leapfrogged
+leapfrogging
+leaping
+leaps
+leapt
+learn
+learnable
+learned
+learnedly
+learnedness
+learner
+learners
+learning
+learns
+learnt
+lease
+leaseback
+leased
+leasehold
+leaseholder
+leases
+leash
+leashes
+leash's
+leasing
+least
+leastways
+leastwise
+leather
+leatherback
+leathered
+leatherhead
+leathering
+leatherjacket
+leathern
+leatherneck
+leathers
+leatherwood
+leatherwork
+leathery
+leave
+leaved
+leaven
+leavened
+leavening
+leaver
+leavers
+leaves
+leaving
+leavings
+lebensraum
+lecher
+lecherous
+lecherously
+lecherousness
+lechery
+lecithin
+lectern
+lecterns
+lectern's
+lection
+lectionary
+lector
+lecture
+lectured
+lecturer
+lecturers
+lectures
+lectureship
+lecturing
+led
+lederhosen
+ledge
+ledger
+ledgers
+ledges
+lee
+leeboard
+leech
+leeches
+leech's
+leek
+leer
+leered
+leering
+leers
+leery
+lees
+leeward
+leeway
+left
+lefties
+leftist
+leftists
+leftist's
+leftmost
+leftover
+leftovers
+leftover's
+lefts
+leftward
+leftwards
+leftwing
+lefty
+leg
+legacies
+legacy
+legacy's
+legal
+legalese
+legalisation
+legalisations
+legalisation's
+legalise
+legalised
+legalises
+legalising
+legalism
+legalist
+legalistic
+legalistically
+legalities
+legality
+legally
+legate
+legated
+legatee
+legates
+legateship
+legatine
+legating
+legation
+legations
+legato
+legend
+legendarily
+legendary
+legendry
+legends
+legend's
+legerdemain
+legged
+leggier
+legging
+leggings
+leggy
+leghorn
+legibility
+legible
+legibly
+legion
+legionary
+legionnaire
+legionnaires
+legions
+legion's
+legislate
+legislated
+legislates
+legislating
+legislation
+legislations
+legislative
+legislatively
+legislator
+legislatorial
+legislators
+legislator's
+legislatress
+legislature
+legislatures
+legislature's
+legist
+legit
+legitimacy
+legitimate
+legitimated
+legitimately
+legitimates
+legitimating
+legitimatise
+legitimatised
+legitimatising
+legitimisation
+legitimisations
+legitimisation's
+legitimise
+legitimised
+legitimises
+legitimising
+legitimism
+legitimist
+legless
+legman
+legroom
+legs
+legume
+legumes
+leguminous
+legwork
+lei
+leister
+leisure
+leisured
+leisureliness
+leisurely
+leitmotif
+leitmotiv
+leman
+lemma
+lemmas
+lemma's
+lemming
+lemmings
+lemon
+lemonade
+lemons
+lemon's
+lemony
+lemur
+lemuroid
+lend
+lender
+lenders
+lending
+lends
+length
+lengthen
+lengthened
+lengthener
+lengthening
+lengthens
+lengthier
+lengthily
+lengthiness
+lengths
+lengthways
+lengthwise
+lengthy
+lenience
+leniency
+lenient
+leniently
+lenis
+lenitive
+lenity
+lens
+lenses
+lens's
+lent
+lentamente
+lentil
+lentils
+lentil's
+lentissimo
+lento
+leonine
+leopard
+leopardess
+leopards
+leopard's
+leotard
+leotards
+leper
+lepers
+lepidopterist
+leporine
+leprechaun
+leprechauns
+leprosarium
+leprosy
+leprous
+leprously
+lepton
+leptons
+lepton's
+leptophyllous
+leptosome
+les
+lesbian
+lesbianism
+lesbians
+lesion
+lesions
+less
+lessee
+lessen
+lessened
+lessening
+lessens
+lesser
+lesson
+lessoned
+lessoning
+lessons
+lesson's
+lest
+let
+letch
+letdown
+letdowns
+lethal
+lethality
+lethally
+lethargic
+lethargically
+lethargies
+lethargy
+lets
+let's
+letter
+lettered
+letterer
+letterhead
+letterheads
+lettering
+letterman
+lettermen
+letterpress
+letters
+letterset
+letting
+lettuce
+letup
+leucocratic
+leucoplast
+leucopoiesis
+leucorrhoea
+leucotomy
+leukaemia
+leukocyte
+levanter
+levee
+levees
+levee's
+level
+levelled
+leveller
+levellers
+levelling
+levelly
+levels
+lever
+leverage
+leveraged
+leverages
+leveraging
+levered
+leveret
+levering
+levers
+lever's
+leviathan
+leviathan's
+levied
+levier
+levies
+levirate
+leviratic
+levitate
+levitated
+levitates
+levitating
+levitation
+levities
+levity
+levy
+levying
+lewd
+lewdly
+lewdness
+lewisite
+lexeme
+lexical
+lexically
+lexicographer
+lexicographers
+lexicographer's
+lexicographic
+lexicographical
+lexicographically
+lexicography
+lexicology
+lexicon
+lexicons
+lexicon's
+lexicostatistic
+lexicostatistics
+lexis
+liabilities
+liability
+liability's
+liable
+liableness
+liaise
+liaised
+liaises
+liaising
+liaison
+liaisons
+liaison's
+liana
+liar
+liars
+liar's
+lib
+libation
+libations
+libel
+libellant
+libellants
+libelled
+libellee
+libellees
+libeller
+libellers
+libelling
+libellous
+libellously
+libels
+liberal
+liberalisation
+liberalisations
+liberalisation's
+liberalise
+liberalised
+liberaliser
+liberalisers
+liberalises
+liberalising
+liberalism
+liberalist
+liberalistic
+liberality
+liberally
+liberalness
+liberals
+liberate
+liberated
+liberates
+liberating
+liberation
+liberationist
+liberationists
+liberator
+liberators
+liberator's
+libertarian
+libertarianism
+libertarians
+liberties
+libertinage
+libertine
+libertines
+libertinism
+liberty
+liberty's
+libidinal
+libidinous
+libidinously
+libidinousness
+libido
+librarian
+librarians
+librarian's
+librarianship
+libraries
+library
+library's
+libratory
+libretti
+librettist
+librettists
+libretto
+librettos
+libretto's
+lice
+licence
+licences
+licence's
+license
+licensed
+licensee
+licensees
+licensee's
+licenser
+licenses
+licensing
+licensor
+licensure
+licentiate
+licentiateship
+licentious
+licentiously
+licentiousness
+lichen
+lichenin
+lichens
+lichen's
+licit
+lick
+licked
+licker
+lickerish
+licking
+licks
+lickspittle
+lid
+lidded
+lidless
+lido
+lidos
+lids
+lid's
+lie
+lied
+lieder
+liege
+liegeman
+lien
+liens
+lien's
+lierne
+lies
+lieu
+lieutenancy
+lieutenant
+lieutenants
+lieutenant's
+life
+lifeblood
+lifeboat
+lifeboats
+lifeguard
+lifeguards
+lifeless
+lifelessly
+lifelessness
+lifelike
+lifelikeness
+lifeline
+lifelines
+lifelong
+lifer
+lifers
+life's
+lifesaver
+lifesaving
+lifespan
+lifestyle
+lifestyles
+lifetime
+lifetimes
+lifetime's
+lifework
+lift
+liftboy
+lifted
+lifter
+lifters
+lifting
+liftman
+lifts
+ligament
+ligaments
+ligature
+ligatured
+ligatures
+ligaturing
+liger
+light
+lighted
+lighten
+lightened
+lightener
+lightening
+lightens
+lighter
+lighters
+lighter's
+lightest
+lightface
+lighthouse
+lighthouses
+lighthouse's
+lighting
+lightless
+lightly
+lightness
+lightning
+lightning's
+lightproof
+lights
+lightship
+lightships
+lightsome
+lightsomely
+lightsomeness
+lightweight
+lightweights
+ligneous
+lignified
+lignifies
+lignifying
+lignin
+lignite
+lignum
+ligroin
+likable
+like
+likeable
+liked
+likelier
+likeliest
+likelihood
+likeliness
+likely
+liken
+likened
+likeness
+likenesses
+likeness's
+likening
+likens
+liker
+likes
+likewise
+liking
+likings
+lilac
+lilacs
+lilac's
+liliaceous
+lilied
+lilies
+lilt
+lilting
+liltingly
+lily
+lily's
+limacine
+limb
+limbed
+limber
+limbered
+limbering
+limberly
+limberness
+limbers
+limbic
+limbless
+limbo
+limbos
+limbs
+lime
+limeade
+limed
+limekiln
+limelight
+limerick
+limericks
+limerick's
+limes
+lime's
+limestone
+limewater
+limey
+limier
+liming
+limit
+limitability
+limitable
+limitary
+limitation
+limitations
+limitation's
+limitative
+limited
+limitedly
+limitedness
+limiter
+limiters
+limiting
+limitless
+limitlessly
+limitlessness
+limits
+limn
+limner
+limning
+limnologist
+limnology
+limo
+limonene
+limonite
+limonitic
+limos
+limo's
+limousine
+limousines
+limp
+limped
+limper
+limpet
+limpid
+limpidity
+limpidly
+limpidness
+limping
+limpkin
+limply
+limpness
+limps
+limulus
+limy
+linage
+linalool
+linchpin
+linchpins
+linchpin's
+linden
+line
+lineage
+lineages
+lineal
+lineally
+lineament
+linear
+linearity
+linearly
+lineate
+lineation
+linebacker
+linebackers
+lined
+linefeed
+linefeeds
+lineman
+linemen
+linen
+linens
+linen's
+liner
+liners
+lines
+line's
+linesman
+lingam
+lingcod
+linger
+lingered
+lingerie
+lingering
+lingeringly
+lingers
+lingo
+lingoes
+lingua
+lingual
+linguine
+linguini
+linguist
+linguistic
+linguistically
+linguistics
+linguists
+linguist's
+liniment
+liniments
+lining
+linings
+link
+linkage
+linkages
+linkage's
+linkboy
+linked
+linker
+linkers
+linking
+linkman
+links
+linkup
+linkwork
+linnet
+lino
+linocut
+linoleum
+linseed
+lint
+lintel
+linter
+lintwhite
+linty
+lion
+lioness
+lionesses
+lioness's
+lionfish
+lionhearted
+lionisation
+lionisations
+lionisation's
+lionise
+lionised
+lioniser
+lionisers
+lionises
+lionising
+lions
+lion's
+lip
+lipase
+lipid
+lipids
+lipid's
+lipless
+liplike
+lipoid
+lipoprotein
+lipped
+lippie
+lippy
+lips
+lip's
+lipstick
+liquate
+liquated
+liquates
+liquating
+liquation
+liquefaction
+liquefiable
+liquefied
+liquefier
+liquefiers
+liquefies
+liquefy
+liquefying
+liqueur
+liquid
+liquidate
+liquidated
+liquidates
+liquidating
+liquidation
+liquidations
+liquidation's
+liquidator
+liquidise
+liquidised
+liquidiser
+liquidisers
+liquidises
+liquidising
+liquidity
+liquidly
+liquidness
+liquids
+liquid's
+liquor
+liquored
+liquorice
+liquoring
+liquorish
+liquors
+liquor's
+lira
+liras
+lire
+lisle
+lisp
+lisped
+lisper
+lisping
+lisps
+lisp's
+lissom
+list
+listed
+listen
+listened
+listener
+listeners
+listening
+listens
+listing
+listings
+listing's
+listless
+listlessly
+listlessness
+lists
+lit
+litanies
+litany
+literacy
+literal
+literalise
+literalised
+literaliser
+literalisers
+literalises
+literalism
+literalist
+literalistic
+literality
+literally
+literalness
+literals
+literarily
+literariness
+literary
+literate
+literately
+literati
+literature
+literatures
+literature's
+litharge
+lithe
+lithely
+litheness
+lithesome
+lithium
+litho
+lithograph
+lithographer
+lithographers
+lithographic
+lithographically
+lithographs
+lithography
+lithomarge
+lithopone
+lithosphere
+litigable
+litigant
+litigants
+litigate
+litigated
+litigates
+litigating
+litigation
+litigious
+litigiously
+litmus
+litotes
+litre
+litres
+litter
+litterateur
+litterbag
+litterbug
+littered
+littering
+littermate
+littermates
+littermate's
+litters
+little
+littleneck
+littleness
+littler
+littlest
+littoral
+liturgical
+liturgically
+liturgics
+liturgist
+liturgy
+livableness
+live
+liveability
+liveable
+lived
+livelier
+liveliest
+livelihood
+livelily
+liveliness
+livelong
+lively
+liven
+livened
+livening
+liver
+liveried
+liverish
+liverishness
+livers
+liverwort
+livery
+liveryman
+lives
+livestock
+livid
+lividness
+living
+livingly
+livingness
+livings
+lixiviate
+lixiviated
+lixiviates
+lixiviating
+lixiviation
+lixivium
+lizard
+lizards
+lizard's
+lizzy
+llama
+llamas
+llama's
+llano
+llanos
+lo
+loach
+loaches
+load
+loadable
+loaded
+loader
+loaders
+loading
+loadings
+loads
+loadstar
+loadstone
+loaf
+loafed
+loafer
+loafers
+loafing
+loafs
+loam
+loamy
+loan
+loaned
+loaner
+loaning
+loans
+loanword
+loanwords
+loanword's
+loath
+loathe
+loathed
+loather
+loathes
+loathing
+loathly
+loathsome
+loathsomely
+loathsomeness
+loaves
+lob
+lobar
+lobately
+lobbied
+lobbies
+lobbing
+lobby
+lobbyer
+lobbying
+lobbyism
+lobbyist
+lobe
+lobed
+lobelia
+lobes
+lobe's
+loblolly
+lobo
+lobos
+lobotomy
+lobscouse
+lobster
+lobsterman
+lobstermen
+lobsters
+lobster's
+lobular
+lobule
+lobules
+lobworm
+local
+locale
+locales
+localisable
+localisation
+localisations
+localisation's
+localise
+localised
+localiser
+localisers
+localises
+localising
+localism
+localisms
+localities
+locality
+locality's
+locally
+locals
+locatable
+locate
+located
+locater
+locates
+locating
+location
+locations
+locative
+locatives
+locator
+locators
+locator's
+loch
+loci
+lock
+lockable
+lockage
+lockbox
+locked
+locker
+lockers
+locket
+locking
+lockjaw
+locknut
+lockout
+lockouts
+lockout's
+locks
+locksmith
+lockstep
+lockstitch
+lockup
+lockups
+lockup's
+loco
+locomotion
+locomotive
+locomotives
+locomotive's
+locoweed
+locum
+locus
+locus's
+locust
+locusts
+locust's
+locution
+lode
+lodestar
+lodestone
+lodge
+lodged
+lodgement
+lodger
+lodgers
+lodger's
+lodges
+lodging
+lodgings
+loess
+loft
+loftier
+loftily
+loftiness
+lofts
+loft's
+lofty
+log
+loganberry
+loganiaceous
+logaoedic
+logarithm
+logarithmic
+logarithmically
+logarithms
+logarithm's
+logbook
+loge
+logged
+logger
+loggerhead
+loggers
+logger's
+loggia
+logging
+logia
+logic
+logical
+logicality
+logically
+logicalness
+logician
+logicians
+logician's
+logics
+logic's
+login
+logins
+logion
+logistic
+logistical
+logistically
+logistician
+logistics
+logjam
+lognormal
+logo
+logoff
+logogram
+logogrammatic
+logograms
+logogram's
+logograph
+logographic
+logographically
+logography
+logogriph
+logorrhoea
+logorrhoea's
+logos
+logotype
+logout
+logroll
+logroller
+logrolling
+logs
+log's
+logwood
+logy
+loin
+loincloth
+loins
+loin's
+loiter
+loitered
+loiterer
+loitering
+loiters
+loll
+lollapalooza
+lolling
+lollipop
+lollop
+lolly
+lollygag
+lollypop
+lone
+lonelier
+loneliest
+loneliness
+lonely
+loner
+loners
+lonesome
+lonesomeness
+long
+longboat
+longboats
+longbow
+longed
+longer
+longest
+longevity
+longhair
+longhaired
+longhand
+longhead
+longheaded
+longhorn
+longhorns
+longhouse
+longing
+longingly
+longings
+longish
+longitude
+longitudes
+longitude's
+longitudinal
+longitudinally
+longleaf
+longlegs
+longs
+longshoreman
+longshoremen
+longsome
+longspur
+longstanding
+longwinded
+loo
+look
+looked
+lookers
+looking
+lookout
+lookouts
+looks
+lookup
+lookups
+lookup's
+loom
+loomed
+looming
+looms
+loon
+loonier
+loony
+loop
+looped
+loophole
+loopholes
+loophole's
+looping
+loops
+loopy
+loose
+loosebox
+loosed
+loosely
+loosen
+loosened
+looseness
+loosening
+loosens
+looser
+looses
+loosest
+loosestrife
+loosing
+loot
+looted
+looter
+looting
+loots
+lop
+lope
+loped
+loping
+lopped
+lopper
+lopping
+lops
+lopsided
+lopsidedly
+lopsidedness
+loquacious
+loquaciously
+loquaciousness
+loquacity
+loquat
+loran
+lord
+lording
+lordlier
+lordliness
+lordly
+lords
+lord's
+lordship
+lore
+lorgnette
+lorgnettes
+lorikeet
+lorries
+lorry
+losable
+lose
+loser
+losers
+loses
+losing
+loss
+losses
+loss's
+lossy
+lost
+lot
+lotion
+lotions
+lots
+lot's
+lotteries
+lottery
+lotto
+lotus
+loud
+loudening
+louder
+loudest
+loudly
+loudmouth
+loudmouthed
+loudness
+loudspeaker
+loudspeakers
+loudspeaker's
+lough
+lounge
+lounged
+lounges
+lounging
+loupe
+louse
+loused
+louses
+lousier
+lousily
+lousiness
+lousing
+lousy
+lout
+loutish
+loutishly
+loutishness
+louts
+louvre
+louvred
+lovable
+lovably
+love
+loveable
+lovebird
+lovebirds
+loved
+loveless
+lovelier
+lovelies
+loveliest
+loveliness
+lovelock
+lovelocks
+lovelorn
+lovely
+lovemaking
+lover
+lovers
+lover's
+loves
+love's
+lovesick
+lovesickness
+loving
+lovingly
+lovingness
+low
+lowborn
+lowboy
+lowbred
+lowbrow
+lower
+lowercase
+lowercased
+lowercases
+lowercasing
+lowered
+lowering
+lowermost
+lowers
+lowest
+lowing
+lowland
+lowlander
+lowlands
+lowlier
+lowliest
+lowlight
+lowlights
+lowliness
+lowly
+lowness
+lows
+lox
+loyal
+loyalist
+loyalists
+loyally
+loyalties
+loyalty
+loyalty's
+lozenge
+lozenges
+luau
+lubber
+lubberly
+lubbers
+lube
+lubricant
+lubricants
+lubricant's
+lubricate
+lubricated
+lubricates
+lubricating
+lubrication
+lubrications
+lubricator
+lubricious
+lubricous
+lucent
+lucid
+lucidity
+lucidly
+lucidness
+luck
+lucked
+luckier
+luckiest
+luckily
+luckiness
+luckless
+lucks
+lucky
+lucrative
+lucratively
+lucre
+lucubrate
+lucubrated
+lucubrates
+lucubrating
+lucubration
+luculent
+ludicrous
+ludicrously
+ludicrousness
+luff
+luffed
+luffing
+luffs
+lug
+luge
+luggage
+lugged
+lugger
+lugging
+lugs
+lugsail
+lugubrious
+lugubriously
+lugworm
+lukewarm
+lukewarmly
+lull
+lullaby
+lulled
+lulls
+lulu
+lumbago
+lumbar
+lumber
+lumbered
+lumbering
+lumberjack
+lumberjacks
+lumberjack's
+lumberman
+lumbermen
+lumbers
+lumberyard
+lumen
+lumens
+luminance
+luminaries
+luminary
+luminescence
+luminescent
+luminosity
+luminous
+luminously
+luminousness
+lummox
+lump
+lumped
+lumpier
+lumpiness
+lumping
+lumpish
+lumps
+lumpy
+lunacy
+lunar
+lunatic
+lunatics
+lunation
+lunch
+lunched
+luncheon
+luncheonette
+luncheons
+luncheon's
+lunches
+lunching
+lunchroom
+lunchrooms
+lunchtime
+lunette
+lung
+lunge
+lunged
+lungfish
+lunging
+lungs
+lungworm
+lupine
+lupus
+lurch
+lurched
+lurcher
+lurches
+lurching
+lure
+lured
+lures
+lurid
+luridly
+luridness
+luring
+lurk
+lurked
+lurking
+lurks
+luscious
+lusciously
+lusciousness
+lush
+lushes
+lushly
+lushness
+lust
+lustful
+lustfully
+lustfulness
+lustier
+lustily
+lustiness
+lusting
+lustrate
+lustrated
+lustrates
+lustrating
+lustration
+lustrations
+lustre
+lustreless
+lustrous
+lustrously
+lustrum
+lusts
+lusty
+lute
+lutes
+lute's
+lutetium
+lux
+luxuriance
+luxuriant
+luxuriantly
+luxuriate
+luxuriated
+luxuriating
+luxuries
+luxurious
+luxuriously
+luxury
+luxury's
+lvi
+lvii
+lxi
+lxii
+lxiv
+lxix
+lxvi
+lxvii
+lycanthrope
+lycanthropic
+lyceum
+lye
+lying
+lymph
+lymphatic
+lymphocyte
+lymphocytes
+lymphoid
+lymphoma
+lynch
+lynched
+lynches
+lynx
+lynxes
+lynx's
+lyophilise
+lyophilised
+lyre
+lyrebird
+lyrebirds
+lyrebird's
+lyres
+lyre's
+lyric
+lyrical
+lyrically
+lyricism
+lyricist
+lyricists
+lyrics
+lyrist
+lysergic
+lyses
+lysine
+m's
+ma
+ma'am
+macabre
+macadam
+macadamise
+macadamised
+macadamises
+macadamising
+macaque
+macaroni
+macaroni's
+macaroon
+macaw
+macaws
+macaw's
+mace
+macebearer
+macerate
+macerated
+macerates
+macerating
+maceration
+macerations
+macerator
+macerators
+maces
+machete
+machicolation
+machinate
+machinated
+machinates
+machinating
+machination
+machinations
+machination's
+machine
+machined
+machinelike
+machineries
+machinery
+machines
+machine's
+machining
+machinist
+machinists
+machismo
+macho
+mackerel
+mackerels
+mackinaw
+mackintosh
+macram�
+macro
+macrobiotic
+macrobiotics
+macroclimate
+macrocosm
+macrocosmic
+macrocosmically
+macroeconomic
+macroeconomics
+macroevolution
+macrofossil
+macrograph
+macroinstruction
+macromolecular
+macromolecule
+macromolecules
+macromolecule's
+macron
+macronucleus
+macronutrient
+macrophage
+macrophages
+macrophysics
+macros
+macro's
+macroscopic
+macroscopically
+macrosporangium
+macrospore
+macrostructure
+macrostructure's
+macula
+maculate
+maculated
+maculates
+maculating
+maculation
+mad
+madam
+madams
+madcap
+madden
+maddened
+maddening
+maddeningly
+madder
+maddest
+madding
+made
+mademoiselle
+mademoiselles
+madhouse
+madly
+madman
+madmen
+madness
+madras
+madrigal
+madrigals
+madwoman
+madwomen
+maelstrom
+maelstroms
+maelstrom's
+maenad
+maestro
+mafia
+magazine
+magazines
+magazine's
+mage
+magenta
+maggot
+maggots
+maggot's
+maggoty
+magi
+magic
+magical
+magically
+magician
+magicians
+magician's
+magisterial
+magisterially
+magistracy
+magistrate
+magistrates
+magistrate's
+magma
+magna
+magnanimity
+magnanimous
+magnanimously
+magnanimousness
+magnate
+magnates
+magnesia
+magnesium
+magnet
+magnetic
+magnetically
+magnetisation
+magnetisations
+magnetisation's
+magnetise
+magnetised
+magnetiser
+magnetisers
+magnetises
+magnetising
+magnetism
+magnetisms
+magnetism's
+magnetite
+magneto
+magnetoelectricity
+magnetograph
+magnetometer
+magnetometers
+magnetometer's
+magnetopause
+magnetos
+magnetosphere
+magnetron
+magnetrons
+magnets
+magnet's
+magnification
+magnifications
+magnificence
+magnificent
+magnificently
+magnified
+magnifier
+magnifiers
+magnifies
+magnify
+magnifying
+magniloquence
+magniloquent
+magnitude
+magnitudes
+magnitude's
+magnolia
+magnolias
+magnum
+magnums
+magpie
+magpies
+maguey
+magus
+maharaja
+maharajah
+maharaja's
+maharani
+mahatma
+mahogany
+mahout
+maid
+maiden
+maidenhair
+maidenhead
+maidenhood
+maidenly
+maidens
+maids
+maid's
+maidservant
+mail
+mailbag
+mailbags
+mailbox
+mailboxes
+mailbox's
+mailed
+mailer
+mailers
+mailer's
+mailing
+mailings
+maillot
+mailman
+mailmen
+mails
+maim
+maimed
+maiming
+maims
+main
+mainframe
+mainframes
+mainframe's
+mainland
+mainlander
+mainlanders
+mainline
+mainlined
+mainliner
+mainliners
+mainlines
+mainlining
+mainly
+mainmast
+mains
+mainsail
+mainsheet
+mainspring
+mainstay
+mainstream
+maintain
+maintainability
+maintainable
+maintained
+maintainer
+maintainers
+maintainer's
+maintaining
+maintains
+maintenance
+maintenances
+maintenance's
+maintop
+maisonette
+maisonettes
+maitre
+maize
+majestic
+majestically
+majesties
+majesty
+majesty's
+majolica
+major
+majored
+majorette
+majorettes
+majoring
+majorities
+majority
+majority's
+majors
+majuscule
+make
+makefast
+maker
+makers
+makes
+makeshift
+makeshifts
+makeup
+makeweight
+making
+makings
+mal
+malachite
+maladapted
+maladaptive
+maladies
+maladjusted
+maladjustment
+maladjustments
+maladministration
+maladroit
+maladroitly
+malady
+malady's
+malaise
+malamute
+malapert
+malapropism
+malapropos
+malaria
+malarial
+malarkey
+malcontent
+malcontents
+malcontent's
+male
+malediction
+malefaction
+malefactor
+malefactors
+malefactor's
+malefic
+maleficent
+maleness
+males
+male's
+malevolence
+malevolencies
+malevolent
+malevolently
+malfeasance
+malfeasant
+malformation
+malformations
+malformed
+malfunction
+malfunctioned
+malfunctioning
+malfunctions
+malice
+malicious
+maliciously
+maliciousness
+malign
+malignance
+malignancies
+malignancy
+malignant
+malignantly
+maligned
+malignity
+malignly
+malinger
+malingered
+malingerer
+malingering
+mall
+mallard
+mallards
+malleability
+malleable
+mallet
+mallets
+mallet's
+mallow
+malls
+mall's
+malmsey
+malnourished
+malnutrition
+malocclusion
+malodorous
+malodorously
+malodour
+malpractice
+malt
+maltase
+malted
+malthus
+malting
+maltose
+maltreat
+maltreatment
+malts
+mama
+mamba
+mambo
+mambos
+mamma
+mammal
+mammalian
+mammals
+mammal's
+mammary
+mammas
+mamma's
+mammies
+mammography
+mammon
+mammoth
+mammy
+man
+manacle
+manacled
+manacles
+manacling
+manage
+manageability
+manageable
+manageably
+managed
+management
+managements
+management's
+manager
+manageress
+managerial
+managerially
+managers
+manager's
+manages
+managing
+manatee
+mandamus
+mandamuses
+mandarin
+mandarins
+mandate
+mandated
+mandates
+mandating
+mandatory
+mandible
+mandolin
+mandolins
+mandolin's
+mandrake
+mandrakes
+mandrel
+mandrill
+mane
+manes
+mane's
+manful
+manfully
+manganese
+mange
+manger
+mangers
+manger's
+mangier
+mangle
+mangled
+mangles
+mangling
+mango
+mangos
+mango's
+mangrove
+mangy
+manhandle
+manhandled
+manhandles
+manhandling
+manhole
+manholes
+manhood
+manhunt
+manhunts
+mania
+maniac
+maniacal
+maniacally
+maniacs
+maniac's
+manic
+manically
+manicotti
+manicure
+manicured
+manicures
+manicuring
+manicurist
+manicurists
+manifest
+manifestation
+manifestations
+manifestation's
+manifested
+manifesting
+manifestly
+manifesto
+manifestoes
+manifestos
+manifesto's
+manifests
+manifold
+manifoldness
+manifolds
+manifold's
+manikin
+manikins
+manilla
+manioc
+maniple
+manipulability
+manipulate
+manipulated
+manipulates
+manipulating
+manipulation
+manipulations
+manipulative
+manipulator
+manipulators
+manipulator's
+mankind
+manlier
+manliest
+manlike
+manliness
+manly
+manna
+manned
+mannequin
+mannequins
+manner
+mannered
+mannerism
+mannerisms
+mannerist
+mannerly
+manners
+manning
+mannish
+mannishly
+mannishness
+manoeuvrability
+manoeuvrable
+manoeuvre
+manoeuvred
+manoeuvres
+manoeuvring
+manometer
+manometers
+manometer's
+manor
+manorial
+manors
+manor's
+manpower
+manqu�
+manrope
+manropes
+mans
+man's
+mansard
+manse
+manservant
+mansion
+mansions
+mansion's
+manslaughter
+manslayer
+mantel
+mantelpiece
+mantels
+mantel's
+mantelshelf
+manteltree
+mantic
+mantilla
+mantis
+mantises
+mantissa
+mantissas
+mantissa's
+mantle
+mantled
+mantles
+mantle's
+mantling
+mantra
+mantrap
+manual
+manually
+manuals
+manual's
+manufactory
+manufacture
+manufactured
+manufacturer
+manufacturers
+manufacturer's
+manufactures
+manufacturing
+manumission
+manumit
+manumitted
+manumitting
+manure
+manures
+manus
+manuscript
+manuscripts
+manuscript's
+many
+map
+maple
+maples
+maple's
+mapmaker
+mapmakers
+mapmaking
+mapped
+mapping
+mappings
+mapping's
+maps
+map's
+mar
+marabou
+maraca
+maraschino
+marathon
+marathons
+maraud
+marauder
+marauders
+marauding
+marauds
+marble
+marbled
+marbleise
+marbleised
+marbleises
+marbleising
+marbles
+marbling
+march
+marched
+marcher
+marches
+marching
+marchioness
+mare
+mares
+mare's
+margarine
+margarita
+margin
+marginal
+marginalia
+marginality
+marginalize
+marginally
+margined
+margining
+margins
+margin's
+margrave
+mariachi
+marigold
+marigolds
+marigold's
+marijuana
+marijuana's
+marimba
+marina
+marinade
+marinades
+marinas
+marinate
+marinated
+marinates
+marinating
+marine
+mariner
+marines
+marionette
+marionettes
+mariposa
+marital
+maritime
+marjoram
+mark
+markdown
+marked
+markedly
+marker
+markers
+market
+marketability
+marketable
+marketed
+marketer
+marketing
+marketplace
+marketplaces
+marketplace's
+markets
+marketwise
+marking
+markings
+marks
+marksman
+marksmanship
+marksmen
+markswoman
+markswomen
+marl
+marlin
+marline
+marmalade
+marmalades
+marmite
+marmoreal
+marmoset
+marmosets
+marmoset's
+marmot
+maroon
+marooned
+marplot
+marquee
+marquees
+marquis
+marquisate
+marquise
+marquises
+marquisette
+marred
+marriage
+marriageable
+marriages
+marriage's
+married
+marries
+marring
+marrow
+marrowbone
+marrowbones
+marrowfat
+marrows
+marry
+marrying
+mars
+marsh
+marshal
+marshals
+marshes
+marshier
+marshland
+marshlands
+marshmallow
+marshmallows
+marsh's
+marshy
+marsupial
+marsupials
+marsupial's
+mart
+marten
+martens
+martial
+martially
+martin
+martinet
+martingale
+martini
+martinis
+marts
+martyr
+martyrdom
+martyrs
+martyr's
+marvel
+marvelled
+marvelling
+marvellous
+marvellously
+marvels
+marzipan
+mascara
+mascaras
+mascot
+mascots
+mascot's
+masculine
+masculinity
+maser
+mash
+mashed
+masher
+mashers
+mashes
+mashie
+mashing
+mask
+masked
+masker
+masking
+masks
+masochism
+masochist
+masochistic
+masochistically
+masochists
+masochist's
+mason
+masonry
+masons
+mason's
+masque
+masquerade
+masquerades
+masquerading
+masques
+mass
+massacre
+massacred
+massacres
+massacring
+massage
+massaged
+massager
+massages
+massaging
+massed
+masses
+masseur
+masseurs
+masseuse
+massif
+massifs
+massing
+massive
+massively
+massiveness
+massy
+mast
+mastectomies
+mastectomy
+masted
+master
+mastered
+masterful
+masterfully
+mastering
+masterly
+mastermind
+masterminded
+masterminding
+masterminds
+masterpiece
+masterpieces
+masterpiece's
+masters
+master's
+mastersinger
+mastersingers
+masterstroke
+masterstrokes
+masterwork
+mastery
+masthead
+mastic
+masticate
+masticated
+masticates
+masticating
+mastication
+masticator
+masticators
+mastiff
+mastitis
+mastodon
+mastodons
+mastoid
+masts
+masturbate
+masturbated
+masturbates
+masturbating
+masturbation
+masturbatory
+mat
+matador
+match
+matchboard
+matchbook
+matchbox
+matched
+matcher
+matchers
+matches
+matching
+matchless
+matchlessly
+matchlock
+matchmaker
+matchmakers
+matchmaker's
+matchmaking
+matchmaking's
+matchstick
+matchwood
+mate
+mated
+matelot
+mater
+material
+materialisation
+materialisations
+materialisation's
+materialise
+materialised
+materialises
+materialising
+materialism
+materialism's
+materialist
+materialistic
+materialistically
+materiality
+materially
+materials
+materiel
+maternal
+maternally
+maternity
+mates
+mate's
+matey
+math
+mathematic
+mathematical
+mathematically
+mathematician
+mathematicians
+mathematician's
+mathematics
+maths
+matinee
+mating
+matins
+matriarch
+matriarchal
+matriarchy
+matrices
+matricidal
+matricide
+matriculate
+matriculated
+matriculates
+matriculating
+matriculation
+matrilineal
+matrimonial
+matrimonially
+matrimony
+matrix
+matrixes
+matron
+matronly
+mats
+mat's
+matt
+matte
+matted
+matter
+mattered
+mattering
+matters
+matting
+mattock
+mattress
+mattresses
+mattress's
+maturate
+maturated
+maturates
+maturating
+maturation
+maturational
+maturations
+mature
+matured
+maturely
+matures
+maturing
+maturities
+maturity
+matzo
+matzos
+maudlin
+maul
+mauler
+maulers
+mauling
+mauls
+maulstick
+maunder
+mausoleum
+mausoleums
+mauve
+maverick
+mavericks
+maw
+mawkish
+mawkishly
+mawkishness
+max
+maxi
+maxilla
+maxillae
+maxillary
+maxillas
+maxim
+maximal
+maximally
+maximisation
+maximisations
+maximisation's
+maximise
+maximised
+maximises
+maximising
+maxims
+maxim's
+maximum
+maximums
+may
+maybe
+mayday
+mayflower
+mayfly
+mayhap
+mayhem
+mayonnaise
+mayor
+mayoral
+mayoralty
+mayoress
+mayors
+mayor's
+maypole
+maze
+mazes
+maze's
+mazy
+me
+mead
+meadow
+meadowland
+meadowlark
+meadowlarks
+meadowlark's
+meadows
+meadow's
+meadowsweet
+meads
+meagre
+meal
+mealier
+meals
+meal's
+mealtime
+mealworm
+mealy
+mean
+meander
+meandered
+meandering
+meanderings
+meanders
+meaner
+meanest
+meaning
+meaningful
+meaningfully
+meaningfulness
+meaningless
+meaninglessly
+meaninglessness
+meanings
+meaning's
+meanly
+meanness
+means
+meant
+meantime
+meanwhile
+measles
+measly
+measurability
+measurable
+measurably
+measure
+measured
+measureless
+measurement
+measurements
+measurement's
+measurer
+measures
+measuring
+meat
+meatball
+meatballs
+meatier
+meatiest
+meatiness
+meats
+meat's
+meaty
+mecca
+mechanic
+mechanical
+mechanically
+mechanicals
+mechanics
+mechanic's
+mechanisation
+mechanisations
+mechanisation's
+mechanise
+mechanised
+mechanises
+mechanising
+mechanism
+mechanisms
+mechanism's
+mechanist
+mechanistic
+mechanistically
+mechanoreceptor
+mecum
+med
+medal
+medalled
+medalling
+medallion
+medallions
+medallion's
+medallist
+medallists
+medals
+medal's
+meddle
+meddled
+meddler
+meddles
+meddlesome
+meddling
+media
+mediaeval
+mediaevalist
+mediaevalists
+mediaevalist's
+medial
+medially
+median
+medians
+median's
+medias
+mediate
+mediated
+mediates
+mediating
+mediation
+mediations
+mediator
+mediators
+medic
+medical
+medically
+medicament
+medicaments
+medicate
+medicated
+medicates
+medicating
+medication
+medications
+medicinal
+medicinally
+medicine
+medicines
+medicine's
+medico
+medicos
+medics
+medic's
+medieval
+medievalism
+medievalist
+medievalists
+medievalist's
+mediocre
+mediocrities
+mediocrity
+meditate
+meditated
+meditates
+meditating
+meditation
+meditations
+meditative
+meditatively
+medium
+mediumistic
+mediums
+medium's
+medley
+medleys
+medulla
+meek
+meeker
+meekest
+meekly
+meekness
+meerschaum
+meet
+meeting
+meetinghouse
+meetings
+meets
+mega
+megabit
+megabits
+megabuck
+megabyte
+megabytes
+megacycle
+megaflop
+megaflops
+megahertz
+megakaryocytic
+megalith
+megalithic
+megalomania
+megalomaniac
+megalopolis
+megalopolises
+megaphone
+megaspore
+megaton
+megatons
+megavolt
+megawatt
+megohm
+megohms
+megrim
+megrims
+meiosis
+meiotic
+melamine
+melancholia
+melancholic
+melancholically
+melancholy
+melange
+melanin
+melanoma
+melba
+meld
+melding
+melds
+melee
+meliorate
+meliorated
+meliorates
+meliorating
+melioration
+meliorations
+mellifluent
+mellifluous
+mellifluously
+mellifluousness
+mellow
+mellowed
+mellowing
+mellowness
+mellows
+melodeon
+melodic
+melodically
+melodies
+melodious
+melodiously
+melodrama
+melodramas
+melodrama's
+melodramatic
+melodramatically
+melodramatics
+melody
+melody's
+melon
+melons
+melon's
+melt
+meltdown
+meltdown's
+melted
+melting
+meltingly
+melts
+member
+members
+member's
+membership
+memberships
+membership's
+membrane
+membranes
+membrane's
+membranous
+memento
+mementoes
+mementos
+memo
+memoir
+memoirs
+memorabilia
+memorable
+memorably
+memoranda
+memorandum
+memorandums
+memorial
+memorialise
+memorialised
+memorialises
+memorialising
+memorials
+memoriam
+memories
+memorisation
+memorisations
+memorisation's
+memorise
+memorised
+memorises
+memorising
+memory
+memory's
+memos
+memo's
+men
+menace
+menaced
+menaces
+menacing
+menacingly
+menagerie
+menageries
+menarche
+mend
+mendacious
+mendaciously
+mendaciousness
+mendacity
+mended
+mendelevium
+mender
+mendicancy
+mendicant
+mendicants
+mending
+mends
+menhaden
+menhir
+menial
+menially
+menials
+meningitis
+menisci
+meniscus
+meniscuses
+menopausal
+menopause
+menorah
+men's
+mensal
+menservants
+menses
+menstrual
+menstruate
+menstruated
+menstruates
+menstruating
+menstruation
+menstruations
+mensuration
+menswear
+mental
+mentalist
+mentalities
+mentality
+mentally
+menthol
+mentholated
+mention
+mentionable
+mentioned
+mentioning
+mentions
+mentor
+mentors
+mentor's
+mentorship
+menu
+menus
+menu's
+meow
+meowed
+meowing
+meows
+meow's
+mephitic
+mephitis
+mercantile
+mercantilism
+mercantilist
+mercenaries
+mercenarily
+mercenary
+mercenary's
+mercer
+mercerisation
+mercerisation's
+mercerise
+mercerised
+mercerises
+mercerising
+mercers
+merchandise
+merchandised
+merchandiser
+merchandises
+merchandising
+merchant
+merchantability
+merchantable
+merchantman
+merchantmen
+merchants
+merchant's
+mercies
+merciful
+mercifully
+mercifulness
+merciless
+mercilessly
+mercilessness
+mercurial
+mercurially
+mercurialness
+mercuric
+mercury
+mercy
+mere
+merely
+merest
+meretricious
+meretriciously
+merganser
+merge
+merged
+mergence
+merger
+mergers
+merges
+merging
+meridian
+meridians
+meringue
+meringues
+merino
+merit
+merited
+meriting
+meritocracy
+meritorious
+meritoriously
+merits
+merlon
+mermaid
+mermaids
+mermaid's
+merman
+merman's
+mermen
+merrier
+merriest
+merrily
+merriment
+merriments
+merriness
+merry
+merrymaker
+merrymaking
+mesa
+mescal
+mescaline
+mesenteric
+mesentery
+mesh
+meshed
+meshes
+meshing
+meshwork
+mesmeric
+mesmerism
+mesmerisms
+mesmerist
+mesmerists
+mesmerize
+mesmerized
+mesmerizes
+mesmerizing
+mesoderm
+meson
+mesosphere
+mesospheric
+mesquite
+mess
+message
+messaged
+messages
+message's
+messaging
+messed
+messenger
+messengers
+messenger's
+messes
+messiah
+messiahs
+messianic
+messier
+messiest
+messieurs
+messily
+messiness
+messing
+messmate
+messmates
+messy
+met
+meta
+metabolic
+metabolically
+metabolise
+metabolised
+metabolises
+metabolising
+metabolism
+metabolisms
+metabolite
+metabolites
+metacarpal
+metacarpus
+metal
+metalled
+metallic
+metallically
+metalloid
+metallurgic
+metallurgical
+metallurgist
+metallurgists
+metallurgy
+metals
+metal's
+metalwork
+metalworker
+metalworking
+metamorphic
+metamorphism
+metamorphose
+metamorphosed
+metamorphosis
+metaphase
+metaphor
+metaphoric
+metaphorical
+metaphorically
+metaphors
+metaphor's
+metaphysic
+metaphysical
+metaphysically
+metaphysician
+metaphysics
+metastasis
+metastasise
+metastasised
+metastasises
+metastasising
+metatarsal
+metatarsus
+metathesis
+metazoan
+mete
+meted
+metempsychosis
+meteor
+meteoric
+meteorically
+meteorite
+meteorites
+meteoritic
+meteoroid
+meteoroids
+meteoroid's
+meteorological
+meteorologist
+meteorology
+meteors
+meteor's
+meter
+metered
+metering
+meters
+meter's
+metes
+methadone
+methane
+methanol
+methinks
+method
+methodical
+methodically
+methodise
+methodised
+methodises
+methodising
+methodological
+methodologically
+methodologies
+methodologist
+methodologists
+methodology
+methodology's
+methods
+method's
+meths
+methyl
+methylamine
+methylene
+methylnaphthalene
+methylphenidate
+meticulous
+meticulously
+meticulousness
+metier
+meting
+metonym
+metonymic
+metonymical
+metonymically
+metonymy
+metre
+metres
+metre's
+metric
+metrical
+metrically
+metrication
+metrics
+metric's
+metro
+metrological
+metrology
+metronome
+metronomes
+metropolis
+metropolitan
+metros
+mettle
+mettles
+mettlesome
+mew
+mewed
+mewl
+mews
+mezuzah
+mezzanine
+mezzanines
+mezzo
+mezzos
+mezzotint
+mho
+miasma
+miasmal
+miasmic
+mica
+mice
+micelle
+micelles
+micelle's
+mickle
+micro
+microamp
+microampere
+microamperes
+microanalysis
+microanatomy
+microbalance
+microbalances
+microbarograph
+microbarographs
+microbe
+microbes
+microbe's
+microbial
+microbiologic
+microbiological
+microbiologically
+microbiologist
+microbiology
+microbus
+microchemistry
+microchip
+microchips
+microcircuit
+microcircuits
+microcirculation
+microcirculatory
+microclimate
+microclimates
+microclimatic
+microclimatological
+microclimatology
+microcline
+microclines
+microcode
+microcoded
+microcodes
+microcoding
+microcomputer
+microcomputers
+microcomputer's
+microcosm
+microcosmic
+microcosmically
+microcrystalline
+microdot
+microeconomic
+microeconomics
+microelectrode
+microelectronic
+microelectronics
+microelement
+microencapsulate
+microenvironment
+microevolution
+microfarad
+microfarads
+microfiche
+microfiches
+microfilm
+microfilmed
+microfilms
+microfilm's
+microform
+microfossil
+microfossils
+micrograph
+micrographs
+microgroove
+microhabitat
+microinjection
+microinstruction
+microinstructions
+microinstruction's
+micromanipulation
+micromanipulator
+micromere
+micrometeorite
+micrometeorites
+micrometeoroid
+micrometeorological
+micrometeorologist
+micrometeorology
+micrometer
+micrometers
+micrometer's
+micrometre
+micrometric
+micrometry
+micromicrofarad
+microminiature
+microminiaturisation
+microminiaturize
+microminiaturized
+micron
+microns
+micronucleus
+micronutrient
+micronutrients
+micropaleontology
+microphage
+microphone
+microphones
+microphotograph
+microphotography
+microphysical
+microphysics
+micropipette
+micropore
+microprint
+microprobe
+microprocessor
+microprocessors
+microprocessor's
+microprogramming
+microradiograph
+microreader
+micros
+microscope
+microscopes
+microscope's
+microscopic
+microscopically
+microscopy
+microsecond
+microseconds
+microsecond's
+microsporangium
+microspore
+microstate
+microstructure
+microstructures
+microsurgery
+microsurgical
+microtonal
+microtone
+microtones
+microtubule
+microtubules
+microvolt
+microwatt
+microwatts
+microwave
+microwaves
+microwave's
+mid
+midair
+midbrain
+midcourse
+midday
+midden
+middies
+middle
+middlebrow
+middlebrows
+middleman
+middlemen
+middlemost
+middles
+middleweight
+middleweights
+middling
+middy
+midfield
+midfielder
+midge
+midges
+midget
+midi
+midiron
+midland
+midlands
+midlife
+midline
+midmorning
+midmost
+midnight
+midnights
+midpoint
+midpoints
+midpoint's
+midrange
+midrib
+midriff
+midriffs
+midsection
+midshipman
+midshipmen
+midships
+midst
+midstream
+midsummer
+midterm
+midterms
+midterm's
+midtown
+midway
+midways
+midweek
+midweekly
+midwife
+midwifery
+midwinter
+midwives
+midyear
+mien
+miens
+miff
+miffed
+miffing
+miffs
+might
+mightier
+mightiest
+mightily
+mightiness
+mighty
+mignon
+mignonette
+migraine
+migraines
+migrant
+migrants
+migrant's
+migrate
+migrated
+migrates
+migrating
+migration
+migrations
+migratory
+mike
+mil
+milady
+milch
+mild
+milder
+mildest
+mildew
+mildews
+mildewy
+mildly
+mildness
+mile
+mileage
+mileages
+mileometer
+milepost
+miler
+miles
+mile's
+milestone
+milestones
+milestone's
+milfoil
+milfoils
+milieu
+milieus
+militancy
+militant
+militantly
+militants
+militaries
+militarily
+militarisation
+militarisations
+militarise
+militarised
+militarises
+militarising
+militarism
+militarisms
+militarist
+militaristic
+militaristically
+military
+militate
+militated
+militates
+militating
+militia
+militiaman
+militiamen
+militias
+milk
+milked
+milker
+milkfish
+milkier
+milking
+milkmaid
+milkmaids
+milkmaid's
+milkman
+milkmen
+milks
+milksop
+milkweed
+milkwort
+milky
+mill
+millboard
+milldam
+milled
+millenarian
+millenarianism
+millenaries
+millenary
+millennia
+millennial
+millennialism
+millennium
+miller
+millers
+millet
+milli
+milliammeter
+milliamp
+milliampere
+milliamperes
+milliard
+millibar
+millicurie
+millihenry
+millihertz
+millilitre
+millilitres
+millilitre's
+millimetre
+millimetres
+millimetre's
+milliner
+milliners
+millinery
+milling
+million
+millionaire
+millionaires
+millionaire's
+millionairess
+millions
+millionth
+millipede
+millipedes
+millipede's
+millirad
+milliroentgen
+millisecond
+milliseconds
+millivolt
+millivoltmeter
+millivolts
+milliwatt
+milliwatts
+millpond
+millponds
+millrace
+millraces
+millrun
+mills
+millstone
+millstones
+millstone's
+millstream
+millstreams
+millwheel
+millwheels
+millwork
+millwright
+millwrights
+milord
+milquetoast
+milquetoasts
+milt
+mime
+mimeograph
+mimeographed
+mimeographing
+mimesis
+mimetic
+mimetically
+mimic
+mimicked
+mimicking
+mimicry
+mimics
+miming
+mimosa
+min
+minaret
+minarets
+minas
+minatory
+mince
+minced
+mincemeat
+minces
+mincing
+mincingly
+mind
+minded
+mindedness
+minder
+minders
+mindful
+mindfully
+mindfulness
+minding
+mindless
+mindlessly
+mindlessness
+minds
+mine
+mined
+minefield
+minelayer
+miner
+mineral
+mineralise
+mineralised
+mineralises
+mineralising
+mineralogical
+mineralogist
+mineralogists
+mineralogy
+minerals
+mineral's
+miners
+mines
+minestrone
+minesweeper
+minesweepers
+minesweeping
+mineworker
+mineworkers
+mingle
+mingled
+mingles
+mingling
+mingy
+mini
+miniature
+miniatures
+miniature's
+miniaturisation
+miniaturisations
+miniaturise
+miniaturised
+miniaturises
+miniaturising
+miniaturist
+miniaturists
+minibus
+minibuses
+minicab
+minicabs
+minicar
+minicomputer
+minicomputers
+minicomputer's
+minidress
+minified
+minifies
+minify
+minifying
+minim
+minima
+minimal
+minimalism
+minimalist
+minimalists
+minimalist's
+minimally
+minimisation
+minimisations
+minimisation's
+minimise
+minimised
+minimises
+minimising
+minimum
+minimums
+mining
+minion
+minions
+minis
+miniscule
+miniskirt
+minister
+ministered
+ministerial
+ministering
+ministers
+minister's
+ministrant
+ministration
+ministrations
+ministries
+ministry
+ministry's
+mink
+minks
+mink's
+minnow
+minnows
+minnow's
+minor
+minored
+minorities
+minority
+minority's
+minors
+minor's
+minstrel
+minstrels
+minstrel's
+minstrelsy
+mint
+mintage
+minted
+minter
+minting
+mints
+minuend
+minuends
+minuet
+minus
+minuscule
+minuses
+minute
+minuted
+minutely
+minuteman
+minutemen
+minuteness
+minutes
+minutia
+minutiae
+minx
+minxes
+miracle
+miracles
+miracle's
+miraculous
+miraculously
+mirage
+mirages
+mire
+mired
+mires
+miring
+mirror
+mirrored
+mirroring
+mirrors
+mirth
+mirthful
+mirthfully
+mirthfulness
+mirthless
+mirthlessly
+miry
+misaddress
+misaddressed
+misadventure
+misadventures
+misadvise
+misaim
+misalign
+misaligned
+misaligning
+misalignment
+misalignments
+misalignment's
+misaligns
+misalliance
+misallocate
+misallocated
+misallocates
+misallocating
+misallocation
+misanthrope
+misanthropic
+misanthropically
+misanthropist
+misanthropists
+misanthropy
+misapplication
+misapplied
+misapplies
+misapply
+misapplying
+misapprehend
+misapprehended
+misapprehending
+misapprehends
+misapprehension
+misapprehensions
+misappropriate
+misappropriates
+misappropriation
+misarranged
+misattribution
+misbegotten
+misbehave
+misbehaved
+misbehaver
+misbehaves
+misbehaving
+misbehaviour
+misbehaviours
+misbehaviour's
+misbelieve
+misbeliever
+misbelieving
+misbrand
+misbranded
+misbranding
+misbrands
+miscalculate
+miscalculated
+miscalculates
+miscalculating
+miscalculation
+miscalculations
+miscalculation's
+miscall
+miscarriage
+miscarriages
+miscarried
+miscarries
+miscarry
+miscarrying
+miscast
+miscasting
+miscasts
+miscegenation
+miscellaneous
+miscellaneously
+miscellanies
+miscellany
+mischance
+mischief
+mischievous
+mischievously
+mischievousness
+miscibility
+miscible
+misclassification
+misclassifications
+misclassified
+misclassify
+misclassifying
+miscode
+miscoded
+miscodes
+miscoding
+miscommunication
+miscomprehension
+misconceive
+misconceived
+misconceiver
+misconceives
+misconceiving
+misconception
+misconceptions
+misconception's
+misconduct
+misconducts
+misconstruction
+misconstructions
+misconstrue
+misconstrued
+misconstrues
+misconstruing
+miscopy
+miscount
+miscounted
+miscounting
+miscounts
+miscreant
+miscreants
+miscue
+miscues
+miscue's
+misdate
+misdeal
+misdealing
+misdeed
+misdeeds
+misdemeanant
+misdemeanants
+misdemeanour
+misdemeanours
+misdemeanour's
+misdirect
+misdirected
+misdirection
+misdirects
+misdoing
+misdoubt
+misemploy
+misemployment
+miser
+miserable
+miserably
+misericord
+miseries
+miserliness
+miserly
+misers
+misery
+misery's
+misesteem
+misestimate
+misfeasance
+misfeasor
+misfile
+misfiled
+misfiles
+misfiling
+misfire
+misfired
+misfires
+misfiring
+misfit
+misfits
+misfit's
+misfortune
+misfortunes
+misfortune's
+misgauge
+misgauged
+misgauges
+misgauging
+misgiving
+misgivings
+misgovern
+misgovernment
+misguidance
+misguide
+misguided
+misguidedly
+misguides
+misguiding
+mishandle
+mishandled
+mishandles
+mishandling
+mishap
+mishaps
+mishap's
+mishear
+mishmash
+misidentification
+misidentified
+misidentifies
+misidentify
+misidentifying
+misimpression
+misinform
+misinformation
+misinformed
+misinforming
+misinforms
+misinterpret
+misinterpretation
+misinterpretations
+misinterpreted
+misinterpreting
+misinterprets
+misjudge
+misjudged
+misjudgement
+misjudges
+misjudging
+mislabel
+mislabelled
+mislabelling
+mislaid
+mislay
+mislaying
+mislays
+mislead
+misleading
+misleadingly
+misleads
+misled
+mismanage
+mismanaged
+mismanagement
+mismanages
+mismanaging
+mismatch
+mismatched
+mismatches
+mismatching
+misname
+misnamed
+misnames
+misnaming
+misnomer
+misogamist
+misogamists
+misogamy
+misogynist
+misogynistic
+misogynists
+misogynist's
+misogyny
+misperceive
+misperceived
+misperceives
+misperception
+misperceptions
+misplace
+misplaced
+misplacement
+misplacements
+misplaces
+misplacing
+misplay
+misprint
+misprision
+misprisions
+mispronounce
+mispronounced
+mispronounces
+mispronouncing
+mispronunciation
+misquotation
+misquote
+misquoted
+misquotes
+misread
+misreading
+misreads
+misreckon
+misrelated
+misremember
+misreport
+misreporting
+misrepresent
+misrepresentation
+misrepresentations
+misrepresentation's
+misrepresentative
+misrepresented
+misrepresenting
+misrepresents
+misroute
+misrouted
+misroutes
+misrule
+misruled
+misrules
+misruling
+miss
+missal
+missals
+missed
+misses
+misshape
+misshapen
+misshapenness
+misshapes
+missile
+missilery
+missiles
+missile's
+missing
+mission
+missionaries
+missionary
+missionary's
+missions
+missive
+missives
+misspeak
+misspecification
+misspell
+misspelled
+misspelling
+misspellings
+misspells
+misspelt
+misspend
+misspending
+misspends
+misstate
+misstated
+misstatement
+misstatements
+misstates
+misstating
+misstep
+missus
+mist
+mistakable
+mistake
+mistaken
+mistakenly
+mistakes
+mistaking
+misted
+mister
+misters
+mistier
+mistiest
+mistily
+mistimed
+mistiness
+misting
+mistletoe
+mistook
+mistral
+mistrals
+mistranslate
+mistranslation
+mistreat
+mistreated
+mistreating
+mistreatment
+mistreats
+mistress
+mistrial
+mistrust
+mistrusted
+mistrustful
+mistrustfully
+mistrustfulness
+mistrusting
+mistrusts
+mists
+misty
+mistype
+mistyped
+mistypes
+mistyping
+misunderstand
+misunderstanding
+misunderstandings
+misunderstanding's
+misunderstands
+misunderstood
+misuse
+misused
+misuses
+misusing
+miswrite
+miswrites
+miswriting
+miswritten
+mite
+mites
+mitigate
+mitigated
+mitigates
+mitigating
+mitigation
+mitigations
+mitochondria
+mitochondrion
+mitosis
+mitotic
+mitre
+mitred
+mitring
+mitt
+mitten
+mittens
+mitten's
+mitts
+mitzvah
+mitzvahs
+mitzvah's
+mix
+mixable
+mixed
+mixer
+mixers
+mixes
+mixing
+mixture
+mixtures
+mixture's
+mizzen
+mizzenmast
+mizzle
+mizzled
+mizzles
+mizzling
+ml
+mm
+mnemonic
+mnemonically
+mnemonics
+mnemonic's
+moa
+moan
+moaned
+moaning
+moans
+moat
+moated
+moats
+moat's
+mob
+mobbed
+mobbing
+mobcap
+mobcaps
+mobile
+mobiles
+mobilisation
+mobilisations
+mobilisation's
+mobilise
+mobilised
+mobilises
+mobilising
+mobility
+mobs
+mob's
+mobster
+mobsters
+moccasin
+moccasins
+moccasin's
+mocha
+mock
+mocked
+mocker
+mockers
+mockery
+mocking
+mockingbird
+mockingly
+mocks
+mod
+modal
+modalities
+modality
+modality's
+modally
+mode
+model
+modelled
+modeller
+modellers
+modelling
+models
+model's
+modem
+modems
+moderate
+moderated
+moderately
+moderateness
+moderates
+moderating
+moderation
+moderations
+moderato
+moderator
+moderators
+moderator's
+modern
+modernisation
+modernisations
+modernisation's
+modernise
+modernised
+modernises
+modernising
+modernism
+modernist
+modernistic
+modernists
+modernity
+moderns
+modes
+modest
+modestly
+modesty
+modicum
+modifiability
+modifiable
+modification
+modifications
+modified
+modifier
+modifiers
+modifies
+modify
+modifying
+modillion
+modish
+modishly
+modishness
+modular
+modularisation
+modularise
+modularised
+modularises
+modularising
+modularity
+modularly
+modulate
+modulated
+modulates
+modulating
+modulation
+modulations
+modulator
+modulators
+modulator's
+module
+modules
+module's
+modulo
+modulus
+modus
+mogul
+mohair
+moieties
+moiety
+moil
+moiling
+moir�
+moist
+moisten
+moistened
+moistener
+moistening
+moistly
+moistness
+moisture
+moistures
+moisturise
+moisturised
+moisturiser
+moisturisers
+moisturises
+moisturising
+molar
+molars
+molasses
+mole
+molecular
+molecularly
+molecule
+molecules
+molecule's
+molehill
+moles
+moleskin
+moleskins
+molest
+molestation
+molestations
+molested
+molester
+molesters
+molesting
+molests
+moll
+mollification
+mollifications
+mollified
+mollifies
+mollify
+mollifying
+mollusc
+molluscs
+mollycoddle
+mollycoddled
+mollycoddles
+mollycoddling
+molten
+molybdenum
+mom
+moment
+momentarily
+momentary
+momentous
+momentously
+momentousness
+moments
+moment's
+momentum
+momentums
+momma
+mommy
+moms
+mom's
+monad
+monadic
+monads
+monarch
+monarchic
+monarchical
+monarchies
+monarchism
+monarchist
+monarchists
+monarchs
+monarchy
+monarchy's
+monasteries
+monastery
+monastery's
+monastic
+monastically
+monasticism
+monatomic
+monaural
+monaurally
+monazite
+monetarily
+monetarism
+monetarist
+monetary
+money
+moneybags
+moneychanger
+moneyed
+moneylender
+moneylenders
+moneylending
+moneyless
+moneymaker
+moneymaking
+moneys
+money's
+monger
+mongered
+mongering
+mongers
+mongolism
+mongoloid
+mongoose
+mongooses
+mongrel
+mongrelise
+mongrelised
+mongrelises
+mongrelising
+monied
+monies
+moniker
+monism
+monist
+monistic
+monition
+monitions
+monitor
+monitored
+monitoring
+monitors
+monitory
+monk
+monkey
+monkeys
+monkfish
+monkish
+monks
+monk's
+monkshood
+mono
+monoacid
+monoamine
+monocarp
+monochord
+monochromatic
+monochromatically
+monochrome
+monochromes
+monochromic
+monocle
+monocled
+monocles
+monocline
+monoclinic
+monocoque
+monocracy
+monocular
+monoculture
+monocycle
+monocyclic
+monodrama
+monody
+monoester
+monofilament
+monogamist
+monogamists
+monogamous
+monogamously
+monogamy
+monogenesis
+monogenetic
+monogram
+monograms
+monogram's
+monograph
+monographic
+monographs
+monograph's
+monogyny
+monohull
+monohybrid
+monohydrate
+monolingual
+monolinguals
+monolith
+monolithic
+monolithically
+monoliths
+monologist
+monologists
+monologue
+monologues
+monomania
+monomaniac
+monomer
+monomers
+monomer's
+monometallic
+monometer
+monometers
+monometer's
+monomial
+monomolecular
+mononuclear
+mononucleosis
+monophobia
+monophonic
+monophonically
+monophony
+monoplane
+monopodium
+monopolies
+monopolisation
+monopolisations
+monopolisation's
+monopolise
+monopolised
+monopolises
+monopolising
+monopolist
+monopolistic
+monopolistically
+monopolists
+monopoly
+monopoly's
+monopropellant
+monopulse
+monorail
+monorails
+monorail's
+monosodium
+monosyllabic
+monosyllabically
+monosyllable
+monosyllables
+monosymmetry
+monosynaptic
+monotheism
+monotheist
+monotheistic
+monotint
+monotone
+monotonic
+monotonically
+monotonicity
+monotonous
+monotonously
+monotonousness
+monotony
+monotype
+monotypic
+monovalent
+monoxide
+monsieur
+monsignor
+monsoon
+monsoons
+monster
+monsters
+monster's
+monstrance
+monstrosities
+monstrosity
+monstrous
+monstrously
+monstrousness
+montage
+montages
+month
+monthlies
+monthly
+months
+month's
+monticule
+monument
+monumental
+monumentalise
+monumentalised
+monumentalises
+monumentalising
+monumentality
+monumentally
+monuments
+monument's
+moo
+mooch
+moocher
+mooches
+mooching
+mood
+moodier
+moodily
+moodiness
+moods
+mood's
+moody
+mooed
+moon
+moonbeam
+moonbeams
+moonbeam's
+mooncalf
+mooned
+mooneye
+moonfish
+moonflower
+mooning
+moonless
+moonlet
+moonlight
+moonlighted
+moonlighter
+moonlighting
+moonlights
+moonlit
+moonquake
+moonrise
+moons
+moonscape
+moonseed
+moonset
+moonshine
+moonstone
+moonstruck
+moonward
+moony
+moor
+moorage
+moored
+moorfowl
+moorhen
+mooring
+moorings
+moors
+moor's
+moos
+moose
+moot
+mooted
+mop
+mopboard
+mope
+moped
+mopes
+moping
+mopped
+moppet
+mopping
+mops
+moraine
+moral
+morale
+moralisation
+moralisations
+moralisation's
+moralise
+moralised
+moraliser
+moralisers
+moralises
+moralising
+moralist
+moralistic
+moralistically
+moralities
+morality
+morally
+morals
+moral's
+morass
+morasses
+moratorium
+moratoriums
+moray
+morbid
+morbidity
+morbidly
+mordacious
+mordacity
+mordancy
+mordant
+mordantly
+mordent
+more
+morel
+moreover
+mores
+morganatic
+morgue
+morgues
+moribund
+morn
+morning
+mornings
+morocco
+moron
+moronic
+moronically
+morose
+morosely
+moroseness
+morph
+morpheme
+morphemic
+morphine
+morphologic
+morphological
+morphologically
+morphology
+morphophonemic
+morphophonemics
+morrow
+morsel
+morsels
+morsel's
+mort
+mortal
+mortality
+mortally
+mortals
+mortar
+mortarboard
+mortared
+mortaring
+mortars
+mortem
+mortgage
+mortgaged
+mortgager
+mortgages
+mortgage's
+mortgaging
+mortgagor
+mortgagors
+mortician
+morticians
+mortification
+mortifications
+mortified
+mortifies
+mortify
+mortifying
+mortise
+mortising
+mortuaries
+mortuary
+mortuary's
+mosaic
+mosaics
+mosaic's
+mosey
+moseyed
+moseying
+mosque
+mosques
+mosquito
+mosquitoes
+moss
+mossback
+mossbunker
+mosses
+mossier
+moss's
+mossy
+most
+mostly
+mot
+mote
+motel
+motels
+motel's
+motet
+moth
+mothball
+mother
+motherboard
+motherboards
+motherboard's
+mothered
+motherhood
+motherhouse
+mothering
+motherland
+motherless
+motherliness
+motherly
+mothers
+mother's
+mothproof
+moths
+motif
+motifs
+motif's
+motile
+motility
+motion
+motional
+motioned
+motioning
+motionless
+motionlessly
+motionlessness
+motions
+motivate
+motivated
+motivates
+motivating
+motivation
+motivational
+motivationally
+motivations
+motivator
+motive
+motives
+motley
+motocross
+motor
+motorbike
+motorboat
+motorbus
+motorcade
+motorcades
+motorcade's
+motorcar
+motorcars
+motorcar's
+motorcycle
+motorcycles
+motorcycle's
+motorcyclist
+motored
+motoring
+motorisation
+motorisations
+motorisation's
+motorise
+motorised
+motorises
+motorising
+motorist
+motorists
+motorist's
+motorman
+motormen
+motors
+motorway
+motown
+motte
+mottle
+mottled
+mottles
+mottling
+motto
+mottoes
+mottos
+mould
+mouldboard
+moulded
+moulder
+mouldering
+moulding
+moulds
+mouldy
+moult
+mound
+mounded
+mounds
+mount
+mountable
+mountain
+mountaineer
+mountaineering
+mountaineers
+mountainous
+mountainously
+mountains
+mountain's
+mountainside
+mountainsides
+mountaintop
+mountaintops
+mountaintop's
+mountebank
+mounted
+mounting
+mountings
+mounts
+mourn
+mourned
+mourner
+mourners
+mournful
+mournfully
+mournfulness
+mourning
+mourns
+mouse
+mouser
+mousetrap
+mousier
+mousiness
+moussaka
+mousse
+moustache
+moustached
+moustaches
+mousy
+mouth
+mouthed
+mouthful
+mouthier
+mouthing
+mouthpart
+mouthpiece
+mouthpieces
+mouths
+mouthwash
+mouthy
+movable
+movably
+move
+moved
+movement
+movements
+movement's
+mover
+movers
+moves
+movie
+moviegoer
+moviemaker
+movies
+movie's
+moving
+movingly
+mow
+mowed
+mower
+mowers
+mowing
+mown
+mows
+moxie
+mozzarella
+much
+mucilage
+mucilaginous
+muck
+mucked
+mucking
+muckle
+muckrake
+muckraker
+muckraking
+mucks
+muckworm
+mucky
+mucous
+mucus
+mud
+mudded
+muddied
+muddier
+muddily
+muddiness
+mudding
+muddle
+muddled
+muddleheaded
+muddles
+muddling
+muddy
+muddying
+mudfish
+mudguard
+mudpack
+mudsill
+mudskipper
+mudskippers
+mudsling
+mudslinger
+mudslingers
+mudslinging
+mudstone
+mudstones
+muenster
+muesli
+muezzin
+muff
+muffin
+muffins
+muffin's
+muffle
+muffled
+muffler
+mufflers
+muffles
+muffling
+muffs
+muff's
+mufti
+muftis
+mug
+mugged
+mugger
+muggers
+muggier
+mugginess
+mugging
+muggings
+muggins
+muggy
+mugs
+mug's
+mukluk
+mulatto
+mulattoes
+mulattos
+mulberries
+mulberry
+mulberry's
+mulch
+mulched
+mulches
+mulching
+mulct
+mule
+mules
+mule's
+muleteer
+mulish
+mulishly
+mulishness
+mull
+mullah
+mullein
+mullet
+mullets
+mulligan
+mulligatawny
+mulling
+mullion
+multi
+multicellular
+multichannel
+multichip
+multicolour
+multicoloured
+multicolumn
+multicoupler
+multidimensional
+multidimensionality
+multidisciplinary
+multiengine
+multifaceted
+multifarious
+multifariously
+multifibred
+multiform
+multihop
+multihued
+multihull
+multilane
+multilateral
+multilateralist
+multilaterally
+multilayer
+multilevel
+multilevelled
+multilingual
+multilingualism
+multilingually
+multimedia
+multimegaton
+multimeter
+multimillionaire
+multinational
+multinomial
+multinuclear
+multinucleate
+multinucleated
+multipacket
+multipartite
+multiphase
+multiple
+multiples
+multiple's
+multiplex
+multiplexed
+multiplexer
+multiplexers
+multiplexes
+multiplexing
+multiplexor
+multiplexors
+multiplexor's
+multipliable
+multiplicand
+multiplicands
+multiplicand's
+multiplication
+multiplications
+multiplicative
+multiplicatively
+multiplicity
+multiplied
+multiplier
+multipliers
+multiplies
+multiply
+multiplying
+multipolar
+multiprocess
+multiprocessing
+multiprocessor
+multiprocessors
+multiprocessor's
+multiprogramming
+multipronged
+multipurpose
+multiracial
+multiracialism
+multirole
+multistage
+multitasking
+multitude
+multitudes
+multitude's
+multitudinous
+multitudinously
+multivalent
+multivariable
+multivariate
+multiversity
+multiword
+mum
+mumble
+mumbled
+mumbler
+mumbles
+mumbling
+mumblings
+mumbo
+mummer
+mummery
+mummies
+mummification
+mummifications
+mummified
+mummify
+mummy
+mummy's
+mumps
+munch
+munched
+munches
+munching
+mundane
+mundanely
+municipal
+municipalities
+municipality
+municipality's
+municipally
+munificence
+munificent
+munificently
+munitions
+mural
+muralist
+murals
+murder
+murdered
+murderer
+murderers
+murderess
+murdering
+murderous
+murderously
+murders
+murex
+murk
+murkier
+murkily
+murkiness
+murky
+murmur
+murmured
+murmuring
+murmurs
+murrain
+muscatel
+muscle
+muscled
+muscleman
+musclemen
+muscles
+muscling
+muscovite
+muscular
+muscularity
+muscularly
+musculature
+muse
+mused
+museum
+museums
+museum's
+mush
+mushier
+mushily
+mushiness
+mushroom
+mushroomed
+mushrooming
+mushrooms
+mushy
+music
+musical
+musicale
+musicality
+musically
+musicals
+musician
+musicians
+musicianship
+musicological
+musicologist
+musicologists
+musicology
+musing
+musingly
+musings
+musk
+muskeg
+muskellunge
+musket
+musketeer
+musketry
+muskets
+musket's
+muskier
+muskiness
+muskmelon
+muskrat
+muskrats
+muskrat's
+musky
+muslin
+muss
+mussed
+mussel
+mussels
+mussel's
+musses
+mussing
+must
+mustachio
+mustachios
+mustang
+mustangs
+mustard
+mustards
+muster
+mustered
+mustering
+musters
+mustier
+mustiness
+mustn't
+musts
+must've
+musty
+mutability
+mutable
+mutably
+mutant
+mutants
+mutate
+mutated
+mutates
+mutating
+mutation
+mutational
+mutations
+mutative
+mute
+muted
+mutedly
+mutely
+muteness
+muter
+mutes
+mutest
+mutilate
+mutilated
+mutilates
+mutilating
+mutilation
+mutilations
+mutilator
+mutineer
+muting
+mutinies
+mutinous
+mutinously
+mutiny
+mutiny's
+mutt
+mutter
+muttered
+mutterer
+mutterers
+muttering
+mutters
+mutton
+muttonhead
+mutual
+mutualisation
+mutualisation's
+mutualism
+mutuality
+mutually
+muumuu
+muzzier
+muzzle
+muzzled
+muzzles
+muzzle's
+muzzling
+muzzy
+my
+myalgia
+myasthenia
+mycelium
+mycin
+mycology
+mycosis
+myelin
+myeloid
+mylar
+mylonite
+mynah
+myocardial
+myocardium
+myofibril
+myopia
+myopic
+myopically
+myosin
+myriad
+myrrh
+myrtle
+myself
+mysteries
+mysterious
+mysteriously
+mysteriousness
+mystery
+mystery's
+mystic
+mystical
+mystically
+mysticism
+mysticisms
+mystics
+mystic's
+mystification
+mystified
+mystifies
+mystify
+mystifying
+mystifyingly
+mystique
+myth
+mythic
+mythical
+mythically
+mythmaker
+mythmaking
+mythological
+mythologies
+mythologist
+mythology
+mythology's
+myths
+myth's
+mzungu
+n's
+nab
+nabbed
+nabbing
+nabob
+nacelle
+nacre
+nacreous
+nadir
+nag
+nagged
+nagger
+nagging
+nags
+nag's
+naiad
+nail
+nailbrush
+nailed
+nailing
+nails
+naive
+naively
+naivety
+naked
+nakedly
+nakedness
+name
+nameable
+named
+nameless
+namelessly
+namelessness
+namely
+nameplate
+nameplates
+names
+name's
+namesake
+namesakes
+namesake's
+nametape
+naming
+nankeen
+nannies
+nanny
+nanogramme
+nanogrammes
+nanometre
+nanometres
+nanometric
+nanoplankton
+nanosecond
+nanoseconds
+nap
+napalm
+nape
+napery
+napes
+naphtha
+naphthalene
+napkin
+napkins
+napkin's
+napped
+nappies
+napping
+nappy
+naps
+nap's
+narcissi
+narcissism
+narcissist
+narcissistic
+narcissus
+narcissuses
+narcolepsy
+narcoleptic
+narcosis
+narcotic
+narcotics
+narcotise
+narcotised
+narcotises
+narcotising
+nark
+narrate
+narrated
+narrates
+narrating
+narration
+narrations
+narrative
+narratives
+narrative's
+narrator
+narrators
+narrow
+narrowed
+narrower
+narrowest
+narrowing
+narrowly
+narrowness
+narrows
+narthex
+narwhal
+narwhals
+narwhal's
+nary
+nasal
+nasality
+nasally
+nascence
+nascent
+nastier
+nastiest
+nastily
+nastiness
+nasturtium
+nasty
+natal
+natatorium
+nation
+national
+nationalisation
+nationalisations
+nationalisation's
+nationalise
+nationalised
+nationalises
+nationalising
+nationalism
+nationalisms
+nationalist
+nationalistic
+nationalistically
+nationalists
+nationalist's
+nationalities
+nationality
+nationality's
+nationally
+nationals
+nationhood
+nations
+nation's
+nationwide
+native
+natively
+natives
+nativity
+natter
+natterjack
+nattier
+nattily
+nattiness
+natty
+natural
+naturalisation
+naturalisations
+naturalisation's
+naturalise
+naturalised
+naturalises
+naturalising
+naturalism
+naturalist
+naturalistic
+naturalistically
+naturally
+naturalness
+naturals
+nature
+natured
+natures
+nature's
+naturism
+naturopath
+naturopathy
+naught
+naughtier
+naughtily
+naughtiness
+naughty
+nausea
+nauseas
+nauseate
+nauseated
+nauseates
+nauseating
+nauseatingly
+nauseous
+nauseously
+nautical
+nautically
+nautilus
+naval
+nave
+navel
+navels
+naves
+navies
+navigability
+navigable
+navigate
+navigated
+navigates
+navigating
+navigation
+navigational
+navigationally
+navigations
+navigator
+navigators
+navigator's
+navvy
+navy
+navy's
+nay
+neap
+near
+nearby
+neared
+nearer
+nearest
+nearing
+nearly
+nearness
+nears
+nearside
+nearsighted
+nearsightedly
+nearsightedness
+neat
+neaten
+neater
+neatest
+neatly
+neatness
+nebbish
+nebula
+nebulae
+nebular
+nebulosity
+nebulous
+nebulously
+nebulousness
+necessaries
+necessarily
+necessary
+necessitate
+necessitated
+necessitates
+necessitating
+necessitation
+necessities
+necessitous
+necessitousness
+necessity
+neck
+neckband
+necked
+neckerchief
+necking
+necklace
+necklaces
+necklace's
+neckline
+neckpiece
+necks
+necktie
+neckties
+necktie's
+neckwear
+necrology
+necromancer
+necromancers
+necromancy
+necromantic
+necrophilia
+necrophobia
+necropolis
+necropsy
+necroses
+necrosis
+necrotic
+nectar
+nectarine
+nee
+need
+needed
+needful
+needfulness
+needier
+neediness
+needing
+needle
+needlecord
+needlecraft
+needled
+needlefish
+needlepoint
+needles
+needless
+needlessly
+needlessness
+needlewoman
+needlewomen
+needlework
+needling
+needn't
+needs
+needy
+nefarious
+nefariously
+nefariousness
+negate
+negated
+negates
+negating
+negation
+negations
+negative
+negatively
+negatives
+negativism
+negativisms
+negativist
+negativistic
+negativists
+negativity
+negatron
+neglect
+neglected
+neglecter
+neglectful
+neglectfully
+neglecting
+neglects
+negligee
+negligees
+negligence
+negligent
+negligently
+negligibility
+negligible
+negligibly
+negotiability
+negotiable
+negotiate
+negotiated
+negotiates
+negotiating
+negotiation
+negotiations
+negotiator
+negotiators
+negritude
+neigh
+neighbour
+neighboured
+neighbourhood
+neighbourhoods
+neighbourhood's
+neighbouring
+neighbourliness
+neighbourly
+neighbours
+neighbour's
+neither
+nekton
+nelson
+nematocyst
+nematode
+nematodes
+nemeses
+nemesis
+neo
+neoclassic
+neoclassical
+neoclassicism
+neodymium
+neolith
+neologism
+neologisms
+neologism's
+neology
+neomycin
+neon
+neonatal
+neonate
+neophyte
+neophytes
+neoplasm
+neoprene
+nepenthe
+neper
+nephew
+nephews
+nephew's
+nephrite
+nephritic
+nephritis
+nepotism
+nepotistic
+neptunium
+nerve
+nerved
+nerveless
+nerves
+nerve's
+nervier
+nerviness
+nerving
+nervous
+nervously
+nervousness
+nervure
+nervy
+nest
+nested
+nester
+nesting
+nestle
+nestled
+nestles
+nestling
+nests
+net
+netball
+nether
+nethermost
+netherworld
+netkeeper
+netlike
+nets
+net's
+netsuke
+nett
+netted
+netter
+netting
+nettle
+nettled
+nettles
+nettlesome
+nettling
+network
+networked
+networking
+networks
+network's
+neural
+neuralgia
+neuralgic
+neurasthenia
+neurasthenic
+neuritis
+neuro
+neurobiology
+neurobiology's
+neurochemistry
+neurological
+neurologically
+neurologist
+neurologists
+neurology
+neuromuscular
+neuron
+neuronal
+neurons
+neuron's
+neuropath
+neuropathology
+neuropathy
+neurophysiology
+neuropsychiatric
+neuropsychiatry
+neuropteran
+neuroses
+neurosis
+neurosurgeon
+neurosurgery
+neurotic
+neurotically
+neuroticism
+neurotoxin
+neurotransmitter
+neurotransmitters
+neuter
+neutered
+neutering
+neuters
+neutral
+neutralisation
+neutralisations
+neutralisation's
+neutralise
+neutralised
+neutraliser
+neutralisers
+neutralises
+neutralising
+neutralism
+neutralist
+neutralists
+neutralities
+neutrality
+neutrally
+neutrals
+neutrino
+neutrinos
+neutrino's
+neutron
+neutrons
+never
+nevermore
+nevertheless
+nevus
+new
+newborn
+newborns
+newcomer
+newcomers
+newcomer's
+newel
+newer
+newest
+newfangled
+newfound
+newly
+newlywed
+newlyweds
+newness
+news
+newsagent
+newsagents
+newsboy
+newsboys
+newsbreak
+newscast
+newscaster
+newscasters
+newscasts
+newsgroup
+newsgroups
+newsgroup's
+newsier
+newsletter
+newsletters
+newsletter's
+newsmagazine
+newsman
+newsmen
+newsmonger
+newspaper
+newspaperman
+newspapermen
+newspapers
+newspaper's
+newspeak
+newsprint
+newsreel
+newsroom
+newsstand
+newswire
+newsworthiness
+newsworthy
+newsy
+newt
+newts
+next
+nexus
+nexuses
+niacin
+nib
+nibble
+nibbled
+nibbler
+nibblers
+nibbles
+nibbling
+nibs
+nice
+nicely
+niceness
+nicer
+nicest
+niceties
+nicety
+niche
+niches
+nick
+nicked
+nickel
+nickelodeon
+nickels
+nickel's
+nickered
+nickering
+nicking
+nickname
+nicknamed
+nicknames
+nicks
+nicotine
+nicotinic
+nictitate
+nictitating
+niece
+nieces
+niece's
+niff
+niftier
+nifty
+niggard
+niggardliness
+niggardly
+nigger
+niggled
+niggles
+niggling
+nigh
+night
+nightcap
+nightclothes
+nightclub
+nightclubs
+nightdress
+nightfall
+nightglow
+nightgown
+nighthawk
+nightie
+nightingale
+nightingales
+nightingale's
+nightlife
+nightlong
+nightly
+nightmare
+nightmares
+nightmare's
+nightmarish
+nightmarishly
+nightrider
+nights
+night's
+nightshade
+nightshirt
+nightspot
+nightstand
+nightstick
+nightwalker
+nightwear
+nihilism
+nihilisms
+nihilist
+nihilistic
+nihilistically
+nil
+nilpotent
+nimble
+nimbleness
+nimbler
+nimblest
+nimbly
+nimbostratus
+nimbus
+nimbuses
+nimiety
+nincompoop
+nine
+ninebark
+ninepin
+ninepins
+nines
+nineteen
+nineteenth
+nineties
+ninetieth
+ninety
+ninnies
+ninny
+ninth
+niobium
+nip
+nipped
+nipper
+nippers
+nippier
+nippiness
+nipping
+nipple
+nipples
+nippy
+nips
+nirvana
+nisei
+nisus
+nit
+nitpick
+nitrate
+nitrated
+nitrates
+nitrating
+nitration
+nitre
+nitric
+nitride
+nitrification
+nitrifications
+nitrify
+nitrite
+nitro
+nitrobacteria
+nitrobenzene
+nitrocellulose
+nitrogen
+nitrogenous
+nitrous
+nitwit
+nix
+nixed
+nixes
+nixing
+nm
+no
+nobble
+nobelium
+nobilities
+nobility
+noble
+nobleman
+noblemen
+nobleness
+nobler
+nobles
+noblesse
+noblest
+noblewoman
+nobly
+nobodies
+nobody
+nobody's
+nock
+nocturnal
+nocturnally
+nocturne
+nocuous
+nod
+nodal
+nodded
+nodding
+node
+nodes
+node's
+nods
+nod's
+nodular
+nodulation
+nodule
+nodules
+noggin
+noise
+noised
+noiseless
+noiselessly
+noisemaker
+noisemakers
+noisemaking
+noises
+noisier
+noisily
+noisiness
+noising
+noisome
+noisy
+nomad
+nomadic
+nomads
+nomenclature
+nomenclatures
+nominal
+nominalise
+nominally
+nominate
+nominated
+nominates
+nominating
+nomination
+nominations
+nomination's
+nominative
+nominator
+nominators
+nominee
+nominees
+non
+nonadjacent
+nonagenarian
+nonagon
+nonblank
+nonce
+nonchalance
+nonchalant
+nonchalantly
+noncommittal
+noncommittally
+nonconforming
+nonconformist
+nonconformists
+nonconformity
+nondescript
+nondescriptly
+nondirective
+nondisclosure
+nondisclosures
+none
+nonempty
+nonentities
+nonentity
+nonessential
+nonesuch
+nonetheless
+nonexistent
+nonfeasance
+nonferrous
+nongovernmental
+nonhuman
+nonillion
+nonintersecting
+noninvertible
+nonlinearly
+nonnegative
+nonnumeric
+nono
+nonparallel
+nonparametric
+nonpareil
+nonplus
+nonporous
+nonprinting
+nonprocedural
+nonprogrammer
+nonreligious
+nonsense
+nonsensical
+nonsensically
+nonsensicalness
+nonsuch
+nontrivial
+nonuser
+nonverbal
+nonverbally
+nonviable
+nonvoting
+nonzero
+noodle
+noodles
+nook
+nooks
+nook's
+noon
+noonday
+noontide
+noontime
+noose
+nooses
+noosing
+nope
+nor
+norm
+normal
+normalcy
+normalisation
+normalisations
+normalisation's
+normalise
+normalised
+normalises
+normalising
+normality
+normally
+normative
+normatively
+norms
+norm's
+north
+northbound
+northeast
+northeaster
+northerly
+northern
+northerner
+northerners
+northernmost
+northing
+northland
+north's
+northward
+northwards
+northwest
+northwester
+nose
+nosebag
+nosebags
+nosebag's
+noseband
+nosebleed
+nosebleeds
+nosebleed's
+nosed
+nosegay
+nosepiece
+noses
+nosey
+nosh
+nosier
+nosily
+nosiness
+nosing
+nostalgia
+nostalgic
+nostalgically
+nostril
+nostrils
+nostril's
+nostrum
+nosy
+not
+notability
+notable
+notables
+notably
+notarisation
+notarisations
+notarise
+notarised
+notarises
+notarising
+notary
+notate
+notated
+notates
+notating
+notation
+notational
+notations
+notation's
+notch
+notched
+notches
+notching
+note
+notebook
+notebooks
+notebook's
+notecase
+noted
+notelet
+notepaper
+notes
+noteworthiness
+noteworthy
+nothing
+nothingness
+nothings
+notice
+noticeable
+noticeably
+noticed
+notices
+noticing
+notifiable
+notification
+notifications
+notified
+notifies
+notify
+notifying
+noting
+notion
+notional
+notionally
+notions
+notochord
+notoriety
+notorious
+notoriously
+notoriousness
+notwithstanding
+nougat
+nought
+noughts
+noun
+nouns
+noun's
+nourish
+nourished
+nourishes
+nourishing
+nourishment
+nouveau
+nouvelle
+nova
+novae
+novas
+nova's
+novel
+novelette
+novelise
+novelised
+novelises
+novelising
+novelist
+novelistic
+novelists
+novelist's
+novella
+novels
+novel's
+novelties
+novelty
+novelty's
+novena
+novice
+novices
+novice's
+novitiate
+novitiates
+novocaine
+now
+nowadays
+nowhere
+nowhither
+nowise
+nowt
+noxious
+noxiously
+noxiousness
+nozzle
+nozzles
+nth
+nuance
+nuances
+nub
+nubbin
+nubile
+nuclear
+nuclease
+nucleate
+nucleated
+nucleation
+nuclei
+nucleic
+nucleoli
+nucleolus
+nucleon
+nucleonic
+nucleons
+nucleon's
+nucleoprotein
+nucleoside
+nucleotide
+nucleotides
+nucleotide's
+nucleus
+nucleuses
+nuclide
+nude
+nudeness
+nudes
+nudge
+nudged
+nudges
+nudging
+nudism
+nudist
+nudists
+nudity
+nugatory
+nugget
+nuggets
+nuisance
+nuisances
+nuisance's
+nuke
+null
+nulled
+nullification
+nullified
+nullifier
+nullifiers
+nullifies
+nullify
+nullifying
+nullity
+nulls
+numb
+numbed
+number
+numbered
+numbering
+numberless
+numbers
+numbing
+numbingly
+numbly
+numbness
+numbs
+numbskull
+numerable
+numeral
+numerals
+numeral's
+numerate
+numerated
+numerates
+numerating
+numeration
+numerations
+numerator
+numerators
+numerator's
+numeric
+numerical
+numerically
+numerological
+numerology
+numerous
+numerously
+numerousness
+numinous
+numismatic
+numismatics
+numismatist
+nummular
+numskull
+nun
+nuncio
+nuncupative
+nunnery
+nuns
+nun's
+nuptial
+nuptials
+nurse
+nursed
+nursemaid
+nurseries
+nursery
+nurseryman
+nursery's
+nurses
+nurse's
+nursing
+nursling
+nurture
+nurtured
+nurturer
+nurtures
+nurturing
+nut
+nutcase
+nutcracker
+nutgall
+nuthatch
+nuthouse
+nutlet
+nutlike
+nutmeg
+nutria
+nutrient
+nutrients
+nutriment
+nutrition
+nutritional
+nutritionally
+nutritionist
+nutritionists
+nutrition's
+nutritious
+nutritiously
+nutritive
+nuts
+nut's
+nutshell
+nutter
+nuttier
+nuttiness
+nutty
+nuzzle
+nuzzled
+nuzzles
+nuzzling
+nylon
+nylons
+nymph
+nymphet
+nympho
+nymphomania
+nymphomaniac
+nymphomaniacs
+nymphs
+o'clock
+o'er
+o's
+oaf
+oafish
+oafishly
+oafishness
+oafs
+oak
+oaken
+oaks
+oakum
+oar
+oared
+oarfish
+oaring
+oarlock
+oars
+oar's
+oarsman
+oases
+oasis
+oast
+oat
+oatcake
+oatcakes
+oatcake's
+oaten
+oath
+oaths
+oatmeal
+oats
+obduracy
+obdurate
+obdurately
+obedience
+obedient
+obediently
+obeisance
+obeisant
+obelisk
+obese
+obesity
+obey
+obeyed
+obeying
+obeys
+obfuscate
+obfuscated
+obfuscates
+obfuscating
+obfuscation
+obfuscations
+obi
+obit
+obiter
+obituaries
+obituary
+object
+objected
+objectification
+objectifications
+objectified
+objectifies
+objectify
+objectifying
+objecting
+objection
+objectionable
+objectionably
+objections
+objection's
+objective
+objectively
+objectiveness
+objectives
+objectivism
+objectivist
+objectivistic
+objectivity
+objectless
+objector
+objectors
+objector's
+objects
+object's
+objurgate
+objurgated
+objurgates
+objurgating
+oblast
+oblate
+oblation
+oblations
+obligate
+obligated
+obligates
+obligating
+obligation
+obligations
+obligation's
+obligator
+obligatorily
+obligatory
+oblige
+obliged
+obliges
+obliging
+obligingly
+obligor
+obligors
+oblique
+obliquely
+obliqueness
+obliquity
+obliterate
+obliterated
+obliterates
+obliterating
+obliteration
+obliterations
+obliterator
+oblivion
+oblivions
+oblivious
+obliviously
+obliviousness
+oblong
+obloquy
+obnoxious
+obnoxiously
+obnoxiousness
+oboe
+oboes
+oboist
+obscene
+obscenely
+obscenities
+obscenity
+obscurant
+obscurantism
+obscurantist
+obscuration
+obscure
+obscured
+obscurely
+obscurer
+obscures
+obscuring
+obscurities
+obscurity
+obsequies
+obsequious
+obsequiously
+obsequiousness
+obsequy
+observable
+observably
+observance
+observances
+observance's
+observant
+observantly
+observation
+observational
+observationally
+observations
+observation's
+observatories
+observatory
+observe
+observed
+observer
+observers
+observes
+observing
+obsess
+obsessed
+obsesses
+obsession
+obsessions
+obsession's
+obsessive
+obsessively
+obsidian
+obsolesce
+obsolescence
+obsolescent
+obsolete
+obsoleteness
+obsoletes
+obstacle
+obstacles
+obstacle's
+obstetric
+obstetrical
+obstetrically
+obstetrician
+obstetricians
+obstetrician's
+obstetrics
+obstinacy
+obstinate
+obstinately
+obstreperous
+obstreperously
+obstreperousness
+obstruct
+obstructed
+obstructer
+obstructing
+obstruction
+obstructionism
+obstructionist
+obstructions
+obstruction's
+obstructive
+obstructively
+obstructs
+obtain
+obtainable
+obtained
+obtaining
+obtainment
+obtains
+obtrude
+obtruded
+obtrudes
+obtruding
+obtrusion
+obtrusive
+obtrusively
+obtrusiveness
+obtund
+obtuse
+obtusely
+obtuseness
+obverse
+obvert
+obviate
+obviated
+obviates
+obviating
+obviation
+obviations
+obvious
+obviously
+obviousness
+ocarina
+occasion
+occasional
+occasionally
+occasioned
+occasioning
+occasions
+occident
+occidental
+occipital
+occlude
+occluded
+occludes
+occluding
+occlusion
+occlusions
+occlusion's
+occlusive
+occult
+occultation
+occultism
+occultist
+occupancies
+occupancy
+occupant
+occupants
+occupant's
+occupation
+occupational
+occupationally
+occupations
+occupation's
+occupied
+occupier
+occupiers
+occupies
+occupy
+occupying
+occur
+occurred
+occurrence
+occurrences
+occurrence's
+occurring
+occurs
+ocean
+oceanfront
+oceanic
+oceanographer
+oceanographers
+oceanographer's
+oceanographic
+oceanographically
+oceanography
+oceans
+ocean's
+ocelot
+ochre
+ochre's
+ocotillo
+octagon
+octagonal
+octagons
+octahedral
+octahedron
+octal
+octane
+octant
+octants
+octant's
+octave
+octaves
+octavo
+octet
+octillion
+octogenarian
+octopus
+octoroon
+ocular
+oculist
+odalisque
+odd
+oddball
+oddballs
+oddball's
+odder
+oddest
+oddities
+oddity
+oddity's
+oddly
+oddment
+oddness
+odds
+ode
+odes
+ode's
+odious
+odiously
+odiousness
+odium
+odometer
+odometers
+odometer's
+odorant
+odoriferous
+odorise
+odorised
+odorises
+odorising
+odorous
+odorously
+odour
+odourless
+odours
+odour's
+odyssey
+oedema
+oedemas
+oedema's
+oedematous
+oedipal
+oesophagus
+oestrogen
+oestrous
+oestrus
+oeuvre
+oeuvres
+of
+off
+offal
+offbeat
+offence
+offences
+offence's
+offend
+offended
+offender
+offenders
+offending
+offends
+offensive
+offensively
+offensiveness
+offensives
+offer
+offered
+offering
+offerings
+offers
+offertories
+offertory
+offhand
+offhanded
+offhandedly
+offhandedness
+office
+officeholder
+officeholders
+officemate
+officemates
+officer
+officered
+officers
+officer's
+offices
+office's
+official
+officialdom
+officially
+officials
+official's
+officiate
+officiated
+officiates
+officiating
+officinal
+officio
+officious
+officiously
+officiousness
+offing
+offish
+offline
+offload
+offloaded
+offloading
+offloads
+offprint
+offs
+offset
+offsets
+offset's
+offsetting
+offshoot
+offshore
+offside
+offspring
+offstage
+oft
+often
+oftener
+oftentimes
+ogee
+ogle
+ogled
+ogles
+ogling
+ogre
+ogress
+oh
+ohm
+ohmmeter
+ohmmeters
+ohmmeter's
+ohms
+oho
+oil
+oilcan
+oilcloth
+oiled
+oilfield
+oilier
+oiliest
+oiliness
+oiling
+oilman
+oilmen
+oils
+oilseed
+oilseeds
+oilskin
+oilstone
+oily
+ointment
+ointments
+okapi
+okay
+okays
+okay's
+okra
+old
+olden
+older
+oldest
+oldie
+oldies
+oldness
+oldster
+oldsters
+oldwife
+oleaginous
+oleander
+oleanders
+olefin
+oleic
+oleograph
+oleomargarine
+oleoresin
+olfaction
+olfactory
+oligarch
+oligarchic
+oligarchy
+oligopoly
+olio
+olive
+olives
+olive's
+olivine
+olla
+ombudsman
+ombudsman's
+ombudsperson
+omega
+omegas
+omelette
+omen
+omens
+omen's
+omicron
+ominous
+ominously
+omissible
+omission
+omissions
+omission's
+omit
+omits
+omitted
+omitting
+omni
+omnibus
+omnificence
+omnificent
+omnipotence
+omnipotent
+omnipresence
+omnipresent
+omniscience
+omniscient
+omnisciently
+omnivore
+omnivorous
+omnivorously
+on
+once
+oncology
+oncoming
+one
+oneness
+onerous
+onerously
+ones
+one's
+oneself
+onetime
+ongoing
+onion
+onions
+onionskin
+online
+onlooker
+onlookers
+only
+onomatopoeia
+onomatopoeia's
+onomatopoeic
+onrush
+onrushing
+onset
+onsets
+onset's
+onshore
+onside
+onslaught
+onslaughts
+onstage
+onto
+ontogenesis
+ontogenetic
+ontogenetically
+ontogeny
+ontological
+ontologically
+ontology
+onus
+onward
+onwards
+onyx
+oodles
+ooh
+oolong
+oomph
+oops
+ooze
+oozed
+oozes
+oozier
+oozing
+oozy
+op
+opacities
+opacity
+opal
+opalescence
+opalescent
+opals
+opal's
+opaque
+opaquely
+opaqueness
+opcode
+open
+opencast
+opened
+opener
+openers
+openhandedly
+openhearted
+openheartedly
+openheartedness
+opening
+openings
+opening's
+openly
+openness
+opens
+openwork
+opera
+operability
+operable
+operand
+operandi
+operands
+operand's
+operant
+operas
+opera's
+operate
+operated
+operates
+operatic
+operatically
+operating
+operation
+operational
+operationally
+operations
+operative
+operatively
+operatives
+operator
+operators
+operator's
+operculum
+operetta
+ophidian
+ophthalmic
+ophthalmologic
+ophthalmologist
+ophthalmology
+ophthalmoscope
+opiate
+opiates
+opine
+opined
+opines
+opining
+opinion
+opinionated
+opinionatedly
+opinionative
+opinions
+opinion's
+opium
+opossum
+opponent
+opponents
+opponent's
+opportune
+opportunely
+opportunism
+opportunist
+opportunistic
+opportunistically
+opportunities
+opportunity
+opportunity's
+opposability
+opposable
+oppose
+opposed
+opposes
+opposing
+opposite
+oppositely
+oppositeness
+opposites
+opposition
+oppositional
+oppositions
+oppress
+oppressed
+oppresses
+oppressing
+oppression
+oppressive
+oppressively
+oppressiveness
+oppressor
+oppressors
+oppressor's
+opprobrious
+opprobrium
+oppugn
+oppugner
+ops
+opt
+opted
+optic
+optical
+optically
+optician
+opticians
+optics
+optima
+optimal
+optimality
+optimally
+optimisation
+optimisations
+optimisation's
+optimise
+optimised
+optimiser
+optimisers
+optimiser's
+optimises
+optimising
+optimism
+optimist
+optimistic
+optimistically
+optimists
+optimum
+opting
+option
+optional
+optionally
+options
+option's
+optometric
+optometrist
+optometrists
+optometry
+opts
+opulence
+opulent
+opulently
+opus
+opuses
+or
+oracle
+oracles
+oracle's
+oracular
+oral
+orally
+orals
+orange
+orangeade
+orangeroot
+orangery
+oranges
+orange's
+orangewood
+orangey
+orate
+orated
+orates
+orating
+oration
+orations
+oration's
+orator
+oratorical
+oratories
+oratorio
+oratorios
+orators
+orator's
+oratory
+oratory's
+orb
+orbicular
+orbit
+orbital
+orbited
+orbiter
+orbiting
+orbits
+orca
+orchard
+orchards
+orchard's
+orchestra
+orchestral
+orchestras
+orchestra's
+orchestrate
+orchestrated
+orchestrates
+orchestrating
+orchestration
+orchestrations
+orchid
+orchidaceous
+orchids
+orchid's
+ordain
+ordained
+ordaining
+ordainment
+ordains
+ordeal
+ordeals
+order
+ordered
+ordering
+orderings
+orderlies
+orderliness
+orderly
+orders
+ordinal
+ordinance
+ordinances
+ordinance's
+ordinand
+ordinaries
+ordinarily
+ordinariness
+ordinary
+ordinate
+ordinates
+ordination
+ordinations
+ordnance
+ordnances
+ordure
+ore
+oregano
+ores
+ore's
+organ
+organdie
+organelle
+organic
+organically
+organics
+organism
+organisms
+organism's
+organist
+organists
+organist's
+organization
+organizational
+organizationally
+organizations
+organization's
+organize
+organized
+organizer
+organizers
+organizes
+organizing
+organs
+organ's
+organza
+orgasm
+orgasmic
+orgasms
+orgiastic
+orgies
+orgy
+orgy's
+oriel
+orient
+oriental
+orientate
+orientated
+orientates
+orientating
+orientation
+orientations
+orientation's
+oriented
+orienteering
+orienting
+orients
+orifice
+orifices
+orifice's
+origami
+origin
+original
+originality
+originally
+originals
+originate
+originated
+originates
+originating
+origination
+originations
+originator
+originators
+originator's
+origins
+origin's
+oriole
+orioles
+orison
+orlop
+ormolu
+ornament
+ornamental
+ornamentally
+ornamentation
+ornamentations
+ornamented
+ornamenting
+ornaments
+ornate
+ornately
+ornery
+ornithology
+ornithology's
+orotund
+orphan
+orphanage
+orphanages
+orphaned
+orphaning
+orphans
+orpiment
+orrery
+ort
+orthicon
+ortho
+orthoclase
+orthodontia
+orthodontic
+orthodontics
+orthodontist
+orthodontists
+orthodox
+orthodoxy
+orthogonal
+orthographic
+orthographical
+orthographically
+orthographies
+orthography
+orthopaedic
+orthopaedics
+orthopaedist
+orthophosphate
+orthophosphates
+orthorhombic
+orts
+oscillate
+oscillated
+oscillates
+oscillating
+oscillation
+oscillations
+oscillation's
+oscillator
+oscillators
+oscillator's
+oscillatory
+oscilloscope
+oscilloscopes
+oscilloscope's
+oscilloscopic
+oscine
+osculate
+osculated
+osculates
+osculating
+osculation
+osier
+osmium
+osmosis
+osmotic
+osprey
+ospreys
+osseous
+ossification
+ossifications
+ossified
+ossify
+ossuary
+ostensible
+ostensibly
+ostensive
+ostentation
+ostentations
+ostentatious
+ostentatiously
+osteopath
+osteopathic
+osteopaths
+osteopathy
+osteoporosis
+ostracise
+ostracised
+ostracises
+ostracising
+ostracism
+ostrich
+ostriches
+ostrich's
+other
+otherness
+others
+other's
+otherwise
+otherworldliness
+otherworldly
+otiose
+otolaryngology
+otology
+otter
+otters
+otter's
+oubliette
+ouch
+ought
+oughtn't
+ounce
+ounces
+our
+ours
+ourselves
+oust
+ousted
+ouster
+ousting
+out
+outage
+outages
+outage's
+outback
+outbalance
+outbid
+outboard
+outboards
+outbound
+outbrave
+outbreak
+outbreaks
+outbreak's
+outbreed
+outbuilding
+outburst
+outbursts
+outburst's
+outcast
+outcaste
+outcasts
+outcast's
+outclass
+outclassed
+outcome
+outcomes
+outcome's
+outcries
+outcrop
+outcrops
+outcross
+outcry
+outdate
+outdated
+outdistance
+outdistanced
+outdistancing
+outdo
+outdoor
+outdoors
+outdoorsman
+outdoorsy
+outdraw
+outdrew
+outer
+outermost
+outface
+outfall
+outfield
+outfielder
+outfielders
+outfight
+outfighting
+outfit
+outfits
+outfit's
+outfitted
+outfitter
+outfitting
+outflank
+outflow
+outflows
+outfought
+outfox
+outgas
+outgiving
+outgo
+outgoes
+outgoing
+outgoingness
+outgoings
+outgrew
+outgrip
+outgrow
+outgrowing
+outgrown
+outgrows
+outgrowth
+outguess
+outgun
+outhaul
+outhouse
+outing
+outings
+outing's
+outland
+outlander
+outlanders
+outlandish
+outlandishly
+outlandishness
+outlast
+outlasts
+outlaw
+outlawed
+outlawing
+outlawry
+outlaws
+outlay
+outlays
+outlay's
+outlet
+outlets
+outlet's
+outlier
+outliers
+outline
+outlined
+outlines
+outlining
+outlive
+outlived
+outlives
+outliving
+outlook
+outlying
+outman
+outmanoeuvre
+outmanoeuvred
+outmanoeuvres
+outmanoeuvring
+outmatch
+outmatched
+outmode
+outmoded
+outmoding
+outmost
+outnumber
+outnumbered
+outnumbering
+outnumbers
+outpace
+outpaced
+outpatient
+outpatients
+outperform
+outperformed
+outperforming
+outperforms
+outplay
+outplayed
+outpoint
+outpost
+outposts
+outpost's
+outpour
+outpouring
+outpourings
+output
+outputs
+output's
+outputted
+outputting
+outrace
+outrage
+outraged
+outrageous
+outrageously
+outrageousness
+outrages
+outraging
+outrange
+outrank
+outreach
+outride
+outrider
+outrigger
+outriggers
+outright
+outrival
+outrun
+outruns
+outs
+outscore
+outscoring
+outsell
+outset
+outshine
+outshone
+outshoot
+outside
+outsider
+outsiders
+outsider's
+outsight
+outsize
+outsized
+outskirt
+outskirts
+outsmart
+outsmarted
+outsmarting
+outsmarts
+outsoar
+outsole
+outspend
+outspent
+outspoken
+outspokenly
+outspokenness
+outspread
+outstand
+outstanding
+outstandingly
+outstare
+outstation
+outstay
+outstretch
+outstretched
+outstrip
+outstripped
+outstripping
+outstrips
+outtake
+outtalk
+outthink
+outturn
+outvote
+outvoted
+outvotes
+outvoting
+outward
+outwardly
+outwards
+outwash
+outwear
+outweigh
+outweighed
+outweighing
+outweighs
+outwit
+outwith
+outwits
+outwitted
+outwitting
+outwork
+outworn
+ouzel
+ouzo
+ova
+oval
+ovals
+oval's
+ovarian
+ovaries
+ovary
+ovary's
+ovate
+ovation
+ovations
+oven
+ovenbird
+ovenbirds
+ovenproof
+ovens
+oven's
+ovenware
+over
+overabundance
+overabundant
+overachieve
+overachieved
+overachiever
+overachieves
+overachieving
+overact
+overactive
+overage
+overaggressive
+overall
+overalls
+overall's
+overarch
+overarching
+overawe
+overbalance
+overbear
+overbearing
+overbearingly
+overbid
+overbite
+overblown
+overboard
+overbought
+overbuild
+overburden
+overburdened
+overburdening
+overburdens
+overbuy
+overcall
+overcalled
+overcalling
+overcalls
+overcame
+overcapacity
+overcapitalisation
+overcapitalisations
+overcapitalisation's
+overcapitalise
+overcapitalised
+overcapitalises
+overcapitalising
+overcast
+overcautious
+overcharge
+overcoat
+overcoats
+overcoat's
+overcome
+overcomes
+overcoming
+overcompensate
+overcompensation
+overconfidence
+overconfident
+overconfidently
+overcooked
+overcooled
+overcrowd
+overcrowded
+overcrowding
+overcrowds
+overcurious
+overdevelop
+overdeveloped
+overdo
+overdoing
+overdone
+overdose
+overdosed
+overdoses
+overdose's
+overdosing
+overdraft
+overdrafts
+overdraft's
+overdraw
+overdrawing
+overdrawn
+overdraws
+overdress
+overdrew
+overdrive
+overdriving
+overdue
+overeager
+overeagerly
+overeat
+overeaten
+overeater
+overeating
+overeducated
+overemphasis
+overemphasise
+overemphasised
+overemphasises
+overemphasising
+overestimate
+overestimated
+overestimates
+overestimating
+overestimation
+overestimations
+overexcite
+overexcited
+overexcitement
+overexploitation
+overexploited
+overexpose
+overexposure
+overextend
+overextended
+overextending
+overextends
+overextension
+overfed
+overfeed
+overfill
+overfilled
+overfilling
+overfills
+overflow
+overflowed
+overflowing
+overflows
+overgenerous
+overgraze
+overgrazing
+overgrow
+overgrown
+overgrowth
+overhand
+overhang
+overhanging
+overhangs
+overhaul
+overhauled
+overhauling
+overhauls
+overhead
+overheads
+overhear
+overheard
+overhearing
+overhears
+overheat
+overheated
+overheating
+overheats
+overindulge
+overindulged
+overindulgence
+overindulgent
+overjoyed
+overkill
+overkill's
+overlabour
+overlabours
+overlaid
+overland
+overlap
+overlapped
+overlapping
+overlaps
+overlap's
+overlay
+overlaying
+overlays
+overleaf
+overleap
+overlie
+overload
+overloaded
+overloading
+overloads
+overlong
+overlook
+overlooked
+overlooking
+overlooks
+overlord
+overlords
+overloud
+overly
+overlying
+overmaster
+overmatch
+overmuch
+overnice
+overnight
+overnighter
+overnighters
+overnights
+overoptimistic
+overoptimistically
+overpaid
+overpass
+overpay
+overpayment
+overplay
+overplayed
+overplaying
+overpopulate
+overpopulated
+overpopulation
+overpower
+overpowered
+overpowering
+overpoweringly
+overpowers
+overpressure
+overprice
+overpriced
+overprint
+overprinted
+overprinting
+overprints
+overprize
+overproduce
+overproduced
+overproduces
+overproducing
+overproduction
+overprotect
+overprotection
+overprotective
+overran
+overrate
+overrated
+overreach
+overreached
+overreaches
+overreact
+overreaction
+overridden
+override
+overrides
+overriding
+overripe
+overrode
+overrule
+overruled
+overrules
+overruling
+overrun
+overrunning
+overruns
+overseas
+oversee
+overseeing
+overseen
+overseer
+overseers
+oversees
+oversell
+overselling
+oversells
+oversensitive
+overset
+oversexed
+overshadow
+overshadowed
+overshadowing
+overshadows
+overshoe
+overshoes
+overshoot
+overshooting
+overshoots
+overshot
+oversight
+oversights
+oversight's
+oversimplification
+oversimplifications
+oversimplified
+oversimplifies
+oversimplify
+oversimplifying
+oversize
+oversized
+overskirt
+oversleep
+oversold
+overspecialisation
+overspecialisations
+overspecialisation's
+overspecialise
+overspecialised
+overspecialises
+overspend
+overspending
+overspends
+overspent
+overspill
+overspread
+overstaff
+overstaffed
+overstaffing
+overstate
+overstated
+overstatement
+overstatements
+overstatement's
+overstates
+overstating
+overstay
+oversteer
+overstep
+overstepped
+overstepping
+oversteps
+overstock
+overstocks
+overstrain
+overstraining
+overstress
+overstressed
+overstrike
+overstrikes
+overstuff
+overstuffed
+overstuffing
+overstuffs
+oversubscribe
+oversubscribed
+oversubscribes
+oversubscribing
+oversupply
+overt
+overtake
+overtaken
+overtakes
+overtaking
+overtax
+overtaxed
+overthrew
+overthrow
+overthrowing
+overthrown
+overthrows
+overtime
+overtly
+overtone
+overtones
+overtone's
+overtook
+overtop
+overtrade
+overtrick
+overtrump
+overture
+overtures
+overture's
+overturn
+overturned
+overturning
+overturns
+overtype
+overtyping
+overuse
+overvalue
+overview
+overviews
+overview's
+overweening
+overweigh
+overweight
+overwhelm
+overwhelmed
+overwhelming
+overwhelmingly
+overwhelms
+overwork
+overworked
+overworking
+overworks
+overwrite
+overwrites
+overwriting
+overwritten
+overwrote
+overwrought
+overzealous
+oviduct
+oviform
+ovine
+oviparous
+ovipositor
+ovoid
+ovoviviparous
+ovular
+ovulate
+ovulated
+ovulates
+ovulating
+ovulation
+ovulations
+ovule
+ovum
+owe
+owed
+owes
+owing
+owl
+owlet
+owlish
+owlishly
+owls
+owl's
+own
+owned
+owner
+owners
+owner's
+ownership
+ownerships
+owning
+owns
+ox
+oxalate
+oxalic
+oxalis
+oxblood
+oxbow
+oxcart
+oxen
+oxeye
+oxidant
+oxidation
+oxidations
+oxidative
+oxide
+oxides
+oxide's
+oxidisation
+oxidisations
+oxidisation's
+oxidise
+oxidised
+oxidiser
+oxidisers
+oxidises
+oxidising
+oxtail
+oxyacetylene
+oxygen
+oxygenate
+oxygenated
+oxygenates
+oxygenating
+oxygenation
+oxygenations
+oxygenic
+oxygenise
+oxygenises
+oxymoron
+oyez
+oyster
+oystercatcher
+oysterman
+oystermen
+oysters
+oyster's
+oz
+ozone
+ozonosphere
+p's
+pH
+pa
+pabulum
+pace
+paced
+pacemaker
+pacer
+pacers
+paces
+pace's
+pacesetter
+pacesetting
+pachyderm
+pachydermatous
+pachysandra
+pacific
+pacifically
+pacification
+pacifications
+pacificator
+pacificators
+pacified
+pacifier
+pacifies
+pacifism
+pacifist
+pacifistic
+pacifistically
+pacify
+pacifying
+pacing
+pack
+package
+packaged
+packager
+packagers
+packages
+packaging
+packed
+packer
+packers
+packet
+packets
+packet's
+packhorse
+packing
+packinghouse
+packman
+packs
+packsack
+packsaddle
+packthread
+pact
+pacts
+pact's
+pad
+padded
+paddies
+padding
+paddle
+paddleboard
+paddled
+paddlefish
+paddles
+paddling
+paddock
+paddy
+padlock
+padlocked
+padlocks
+padre
+pads
+pad's
+padsaw
+paean
+paeans
+paediatrician
+paediatrics
+paedophilia
+paella
+pagan
+paganism
+pagans
+pagan's
+page
+pageant
+pageantry
+pageants
+pageant's
+pageboy
+paged
+pager
+pagers
+pager's
+pages
+page's
+paginate
+paginated
+paginates
+paginating
+pagination
+paginations
+paging
+pagoda
+pagodas
+paid
+pail
+pails
+pail's
+pain
+pained
+painful
+painfully
+painfulness
+paining
+painkiller
+painless
+painlessly
+painlessness
+pains
+painstaking
+painstakingly
+paint
+paintbrush
+painted
+painter
+painterly
+painters
+painting
+paintings
+paints
+pair
+paired
+pairing
+pairings
+pairs
+paisley
+pal
+palace
+palaces
+palace's
+paladin
+palaeography
+palaeontology
+palaeontology's
+palanquin
+palatability
+palatable
+palatably
+palatal
+palatalise
+palatalised
+palatalises
+palatalising
+palate
+palates
+palate's
+palatial
+palatinate
+palaver
+palavered
+palavering
+palazzo
+palazzos
+pale
+paled
+paleface
+palefaces
+palely
+paleness
+paler
+pales
+palest
+palette
+palfrey
+palimpsest
+palindrome
+palindromes
+paling
+palinode
+palisade
+palisades
+pall
+palladium
+pallbearer
+pallet
+palletise
+palletised
+palletises
+palletising
+palliate
+palliation
+palliative
+palliatives
+pallid
+palling
+pallor
+pallor's
+palm
+palmate
+palmed
+palmer
+palmetto
+palming
+palmist
+palmistry
+palms
+palomino
+palpability
+palpable
+palpably
+palpate
+palpated
+palpates
+palpating
+palpation
+palpations
+palpitate
+palpitated
+palpitates
+palpitating
+pals
+pal's
+palsied
+palsies
+palsy
+palter
+paltered
+paltering
+paltrier
+paltriness
+paltry
+pampas
+pamper
+pampered
+pampering
+pampers
+pamphlet
+pamphleteer
+pamphleteers
+pamphlets
+pamphlet's
+pan
+panacea
+panaceas
+panacea's
+panache
+panama
+panatela
+pancake
+pancakes
+pancake's
+panchromatic
+pancreas
+pancreatic
+panda
+pandas
+panda's
+pandect
+pandemic
+pandemonium
+pander
+pandered
+panderer
+pandering
+panders
+pandowdy
+pane
+panegyric
+panegyrist
+panel
+panelled
+panelling
+panellist
+panellists
+panels
+panes
+pane's
+pang
+panga
+pangenesis
+pangenetic
+pangolin
+pangs
+pang's
+panhandle
+panhandled
+panhandler
+panhandles
+panhandling
+panhuman
+panic
+panicked
+panicking
+panicky
+panicle
+panics
+panic's
+panjandrum
+panned
+pannier
+panning
+panoply
+panoptic
+panorama
+panoramas
+panoramic
+panoramically
+panpipe
+panpipes
+pans
+pan's
+pansies
+pansy
+pansy's
+pant
+pantalets
+pantaloon
+pantaloons
+pantechnicon
+panted
+pantheism
+pantheist
+pantheistic
+pantheon
+panther
+panthers
+panther's
+panties
+panting
+pantograph
+pantographic
+pantomime
+pantomimed
+pantomimic
+pantries
+pantry
+pantry's
+pants
+pantsuit
+panty
+pantywaist
+panzer
+pap
+papa
+papacy
+papal
+papaw
+papaya
+paper
+paperback
+paperbacks
+paperback's
+paperboard
+paperbound
+paperboy
+paperboys
+paperclip
+paperclips
+papered
+paperhanger
+paperhangers
+paperhanging
+papering
+paperknife
+paperknives
+paperless
+papermaker
+papermakers
+papermaking
+papers
+paper's
+paperweight
+paperweights
+paperwork
+papery
+papilla
+papillae
+papillary
+papist
+papoose
+pappies
+pappy
+paprika
+papule
+papyri
+papyrus
+papyruses
+par
+parable
+parables
+parabola
+parabolic
+parachute
+parachuted
+parachutes
+parachute's
+parachuting
+parachutist
+parade
+paraded
+parades
+paradigm
+paradigmatic
+paradigms
+paradigm's
+parading
+paradise
+paradisiacal
+paradox
+paradoxes
+paradoxical
+paradoxically
+paradox's
+paraffin
+paragon
+paragons
+paragon's
+paragraph
+paragraphed
+paragraphing
+paragraphs
+parakeet
+parakeets
+paralanguage
+paraldehyde
+paralinguistic
+parallax
+parallax's
+parallel
+parallelepiped
+parallelepipeds
+parallelogram
+parallelograms
+parallelogram's
+parallels
+paralyse
+paralysed
+paralyses
+paralysing
+paralysis
+paralytic
+paramagnet
+paramagnetic
+paramecium
+paramedic
+paramedical
+parameter
+parameterisation
+parameterisations
+parameterisation's
+parameterise
+parameterised
+parameterises
+parameters
+parameter's
+parametric
+parametrical
+parametrically
+paramilitary
+paramount
+paramour
+parang
+paranoia
+paranoiac
+paranoiacs
+paranoid
+paranormal
+paranormally
+parapet
+parapets
+parapet's
+paraphernalia
+paraphrase
+paraphrased
+paraphrases
+paraphrasing
+paraplegia
+paraplegic
+paraprofessional
+paraprofessionals
+parapsychology
+parasite
+parasites
+parasite's
+parasitic
+parasitical
+parasitically
+parasitism
+parasol
+parasols
+parasympathetic
+paratactic
+parataxis
+parathion
+parathyroid
+paratrooper
+paratroopers
+paratroops
+paratyphoid
+paraxial
+parboil
+parboiled
+parcel
+parcelled
+parcelling
+parcels
+parch
+parched
+parchment
+pardon
+pardonable
+pardonably
+pardoned
+pardoner
+pardoners
+pardoning
+pardons
+pare
+paregoric
+parenchyma
+parent
+parentage
+parental
+parentally
+parentheses
+parenthesis
+parenthesise
+parenthesised
+parenthesises
+parenthesising
+parenthetic
+parenthetical
+parenthetically
+parenthood
+parenting
+parents
+parent's
+pares
+paresis
+parfait
+pariah
+parietal
+paring
+parings
+parish
+parishes
+parishioner
+parishioners
+parish's
+parities
+parity
+park
+parka
+parkas
+parka's
+parked
+parker
+parkers
+parking
+parkland
+parks
+parkway
+parlance
+parlay
+parlayed
+parley
+parleys
+parliament
+parliamentarian
+parliamentarians
+parliamentary
+parliaments
+parliament's
+parlour
+parlours
+parlour's
+parlous
+parochial
+parochialism
+parochialisms
+parochialism's
+parochially
+parodied
+parodies
+parody
+parole
+paroled
+parolee
+parolees
+paroles
+paroling
+paronomasia
+parotid
+paroxysm
+paroxysmal
+parquet
+parquetry
+parricidal
+parricide
+parried
+parrot
+parrotfish
+parroting
+parrots
+parry
+parrying
+pars
+parse
+parsec
+parsecs
+parsed
+parser
+parsers
+parser's
+parses
+parsimonious
+parsimoniously
+parsimony
+parsing
+parsley
+parsnip
+parson
+parsonage
+parsons
+parson's
+part
+partake
+partaker
+partakes
+partaking
+parted
+parterre
+parthenogenesis
+partial
+partiality
+partially
+partials
+participant
+participants
+participant's
+participate
+participated
+participates
+participating
+participation
+participations
+participative
+participator
+participatory
+participial
+participle
+participles
+particle
+particles
+particle's
+particular
+particularisation
+particularisations
+particularisation's
+particularise
+particularised
+particularises
+particularising
+particularistic
+particularity
+particularly
+particulars
+particulate
+particulates
+partied
+parties
+parting
+partings
+partisan
+partisans
+partisan's
+partisanship
+partite
+partition
+partitioned
+partitioning
+partitions
+partly
+partner
+partnered
+partnering
+partners
+partner's
+partnership
+partnerships
+partook
+partridge
+partridges
+partridge's
+parts
+parturient
+parturition
+partway
+party
+partying
+party's
+parvenu
+pas
+paschal
+pasha
+pass
+passable
+passably
+passage
+passages
+passage's
+passageway
+passant
+passbook
+passbooks
+passbook's
+pass�
+passed
+passenger
+passengers
+passenger's
+passer
+passerby
+passerine
+passers
+passersby
+passes
+passim
+passing
+passion
+passionate
+passionately
+passionflower
+passionless
+passions
+passive
+passively
+passiveness
+passives
+passivity
+passkey
+passport
+passports
+passport's
+password
+passwords
+password's
+past
+pasta
+paste
+pasteboard
+pasted
+pastel
+pastels
+pastern
+pasterns
+pastes
+pasteurisation
+pasteurisations
+pasteurise
+pasteurised
+pasteurises
+pasteurising
+pastiche
+pastier
+pasties
+pastilles
+pastime
+pastimes
+pastime's
+pastiness
+pasting
+pastor
+pastoral
+pastorate
+pastors
+pastor's
+pastrami
+pastries
+pastry
+pasts
+past's
+pasturage
+pasture
+pastured
+pastureland
+pastures
+pasture's
+pasturing
+pasty
+pat
+patch
+patched
+patches
+patchier
+patchily
+patchiness
+patching
+patchouli
+patchwork
+patchy
+pate
+patella
+patellae
+patellar
+paten
+patent
+patented
+patentee
+patentees
+patenting
+patently
+patents
+paterfamilias
+paternal
+paternalism
+paternalist
+paternalistic
+paternally
+paternity
+paternoster
+path
+pathetic
+pathetically
+pathfinder
+pathless
+pathname
+pathnames
+pathname's
+pathogen
+pathogenesis
+pathogenic
+pathogenically
+pathogens
+pathologic
+pathological
+pathologically
+pathologies
+pathologist
+pathologists
+pathologist's
+pathology
+pathos
+paths
+pathway
+pathways
+pathway's
+patience
+patient
+patiently
+patients
+patient's
+patina
+patinas
+patio
+patios
+patisserie
+patisseries
+patois
+patriarch
+patriarchal
+patriarchies
+patriarchs
+patriarchy
+patrician
+patricians
+patrician's
+patricidal
+patricide
+patrimonial
+patrimony
+patriot
+patriotic
+patriotically
+patriotism
+patriots
+patriot's
+patristic
+patrol
+patrolled
+patroller
+patrolling
+patrolman
+patrolmen
+patrols
+patrol's
+patron
+patronage
+patroness
+patronisation
+patronisations
+patronisation's
+patronise
+patronised
+patronises
+patronising
+patronisingly
+patrons
+patron's
+patronymic
+pats
+pat's
+patted
+patter
+pattered
+pattering
+pattern
+patterned
+patterning
+patterns
+patters
+patties
+patting
+patty
+patty's
+patulous
+paucity
+paunch
+paunchier
+paunchiness
+paunchy
+pauper
+pauperisation
+pauperisations
+pauperisation's
+pauperise
+pauperised
+pauperises
+pauperising
+pauperism
+pause
+paused
+pauses
+pausing
+pavane
+pave
+paved
+pavement
+pavements
+pavement's
+paves
+pavilion
+pavilions
+pavilion's
+paving
+paw
+pawed
+pawing
+pawl
+pawn
+pawnbroker
+pawnbrokers
+pawnbroker's
+pawned
+pawning
+pawns
+pawn's
+pawnshop
+pawnshops
+pawnshop's
+paws
+pay
+payable
+payday
+payee
+payer
+payers
+payer's
+paying
+payload
+payloads
+payload's
+paymaster
+paymasters
+payment
+payments
+payment's
+payoff
+payoffs
+payoff's
+payola
+payroll
+payrolls
+pays
+pea
+peace
+peaceable
+peaceably
+peaceful
+peacefully
+peacefulness
+peacekeeper
+peacekeeping
+peacemaker
+peacemaking
+peaces
+peacetime
+peacetimes
+peach
+peaches
+peachier
+peach's
+peachy
+peacock
+peacocks
+peacock's
+peafowl
+peahen
+peak
+peaked
+peaking
+peaks
+peaky
+peal
+pealed
+pealing
+peals
+peanut
+peanuts
+peanut's
+pear
+pearl
+pearlier
+pearls
+pearl's
+pearly
+pears
+peas
+pea's
+peasant
+peasantry
+peasants
+peasant's
+peashooter
+peat
+peaty
+peavey
+pebble
+pebbled
+pebbles
+pebble's
+pebbling
+pebbly
+pecan
+pecans
+peccadillo
+peccadilloes
+peccary
+peck
+pecked
+pecker
+pecking
+peckish
+pecks
+pectin
+pectoral
+pectorals
+peculate
+peculated
+peculates
+peculating
+peculation
+peculator
+peculiar
+peculiarities
+peculiarity
+peculiarity's
+peculiarly
+peculiars
+pecuniary
+pedagogic
+pedagogical
+pedagogically
+pedagogue
+pedagogy
+pedal
+pedalled
+pedalling
+pedalo
+pedals
+pedant
+pedantic
+pedantically
+pedantry
+peddle
+peddled
+peddler
+peddlers
+peddler's
+peddles
+peddling
+pederast
+pederasts
+pederasty
+pedestal
+pedestals
+pedestrian
+pedestrians
+pedestrian's
+pedicel
+pedicle
+pedicure
+pedicurist
+pedigree
+pedigreed
+pediment
+pedometer
+pedometers
+pedometer's
+pee
+peek
+peeked
+peeking
+peeks
+peel
+peeled
+peeler
+peeler's
+peeling
+peels
+peen
+peens
+peep
+peeped
+peepers
+peephole
+peeping
+peeps
+peepshow
+peer
+peerage
+peered
+peeress
+peering
+peerless
+peerlessly
+peers
+peeve
+peeved
+peeves
+peeve's
+peeving
+peevish
+peevishly
+peevishness
+peewee
+peg
+pegboard
+pegboards
+pegged
+pegging
+pegmatite
+pegs
+peg's
+peignoir
+pejorative
+pejoratively
+pejoratives
+pekoe
+pelage
+pelagic
+pelerine
+pelf
+pelican
+pelicans
+pelisse
+pellagra
+pellagrous
+pellet
+pellets
+pellet's
+pellicle
+pellucid
+pelmet
+pelt
+pelting
+pelts
+pelvic
+pelvis
+pelvises
+pemmican
+pen
+penal
+penalisation
+penalisations
+penalisation's
+penalise
+penalised
+penalises
+penalising
+penalties
+penalty
+penalty's
+penance
+penances
+pence
+penchant
+pencil
+pencilled
+pencilling
+pencils
+pendant
+pended
+pendent
+pending
+pendulous
+pendulum
+pendulums
+pendulum's
+penetrability
+penetrable
+penetrably
+penetrate
+penetrated
+penetrates
+penetrating
+penetratingly
+penetration
+penetrations
+penetrative
+penguin
+penguins
+penguin's
+penholder
+penicillin
+penile
+peninsula
+peninsular
+peninsulas
+peninsula's
+penis
+penises
+penitence
+penitent
+penitential
+penitentiary
+penitently
+penknife
+penknife's
+penknives
+penlight
+penman
+penmanship
+penmen
+pennant
+pennants
+penned
+pennies
+penniless
+penning
+pennon
+penny
+pennycress
+pennyroyal
+penny's
+pennyweight
+pennywort
+pennyworth
+penologist
+penology
+pens
+pensile
+pension
+pensioned
+pensioner
+pensioners
+pensioning
+pensions
+pensive
+pensively
+pensiveness
+penstock
+pent
+penta
+pentacle
+pentacles
+pentad
+pentagon
+pentagonal
+pentagons
+pentagon's
+pentagram
+pentagrams
+pentagram's
+pentameter
+pentane
+pentangle
+pentangles
+pentathlon
+pentatonic
+penthouse
+penthouses
+penthouse's
+pentobarbital
+pentode
+penuche
+penult
+penultimate
+penumbra
+penumbral
+penurious
+penury
+peon
+peonage
+peonies
+peony
+people
+peopled
+peoples
+people's
+peopling
+pep
+peplum
+pepper
+peppercorn
+peppercorns
+peppercorn's
+peppered
+peppergrass
+peppering
+peppermint
+peppermints
+pepperoni
+peppers
+peppertree
+peppery
+peppier
+peppiness
+pepping
+peppy
+pepsin
+peptic
+peptidase
+peptidases
+peptide
+peptides
+peptise
+peptised
+peptises
+peptising
+peptone
+per
+peradventure
+perambulate
+perambulated
+perambulates
+perambulating
+perambulation
+perambulations
+perambulator
+perambulatory
+percale
+perceivable
+perceivably
+perceive
+perceived
+perceiver
+perceivers
+perceives
+perceiving
+percent
+percentage
+percentages
+percentile
+percentiles
+percents
+percept
+perceptibility
+perceptible
+perceptibly
+perception
+perceptions
+perceptive
+perceptively
+perceptiveness
+perceptivity
+perceptual
+perceptually
+perch
+perchance
+perched
+perches
+perching
+percipience
+percipient
+percolate
+percolated
+percolates
+percolating
+percolation
+percolator
+percolators
+percussion
+percussionist
+percussions
+percussive
+perdition
+perditions
+perdurable
+peregrinate
+peregrinated
+peregrinates
+peregrinating
+peregrination
+peregrinations
+peregrine
+peremptorily
+peremptoriness
+peremptory
+perennial
+perennially
+perennials
+perfect
+perfecta
+perfected
+perfectibility
+perfectible
+perfecting
+perfection
+perfectionism
+perfectionist
+perfectionists
+perfectionist's
+perfections
+perfectly
+perfecto
+perfects
+perfervid
+perfidious
+perfidiously
+perfidiousness
+perfidy
+perforate
+perforated
+perforates
+perforating
+perforation
+perforations
+perforator
+perforce
+perform
+performable
+performance
+performances
+performance's
+performed
+performer
+performers
+performing
+performs
+perfume
+perfumed
+perfumer
+perfumery
+perfumes
+perfuming
+perfunctorily
+perfunctory
+perfuse
+perfusion
+pergola
+perhaps
+periapt
+pericardial
+pericardium
+perigee
+perigee's
+perihelion
+peril
+perilous
+perilously
+perils
+peril's
+perimeter
+perineum
+period
+periodic
+periodical
+periodically
+periodicals
+periodicities
+periodicity
+periodontal
+periods
+period's
+peripatetic
+peripheral
+peripherally
+peripherals
+peripheries
+periphery
+periphery's
+periphrasis
+periphrastic
+periphrastically
+periscope
+periscopes
+perish
+perishable
+perishables
+perishable's
+perished
+perishes
+perishing
+peristalsis
+peritoneum
+peritonitis
+periwig
+periwinkle
+periwinkles
+perjure
+perjured
+perjurer
+perjures
+perjuring
+perjury
+perk
+perked
+perkier
+perkily
+perkiness
+perking
+perks
+perky
+perm
+permafrost
+permanence
+permanency
+permanent
+permanently
+permanents
+permanganate
+permeability
+permeable
+permeably
+permeate
+permeated
+permeates
+permeating
+permeation
+permeations
+permissibility
+permissible
+permissibly
+permission
+permissions
+permissive
+permissively
+permissiveness
+permit
+permits
+permit's
+permitted
+permitting
+permutation
+permutations
+permutation's
+permute
+permuted
+permutes
+permuting
+pernicious
+perniciously
+perniciousness
+pernickety
+perorate
+peroration
+peroxide
+perpendicular
+perpendicularly
+perpendiculars
+perpetrate
+perpetrated
+perpetrates
+perpetrating
+perpetration
+perpetrations
+perpetrator
+perpetrators
+perpetrator's
+perpetual
+perpetually
+perpetuate
+perpetuated
+perpetuates
+perpetuating
+perpetuation
+perpetuator
+perpetuity
+perplex
+perplexed
+perplexedly
+perplexes
+perplexing
+perplexities
+perplexity
+perquisite
+perquisites
+persecute
+persecuted
+persecutes
+persecuting
+persecution
+persecutor
+persecutors
+persecutor's
+persecutory
+perseverance
+perseverant
+persevere
+persevered
+perseveres
+persevering
+persiflage
+persimmon
+persimmons
+persist
+persisted
+persistence
+persistency
+persistent
+persistently
+persisting
+persists
+person
+persona
+personable
+personae
+personage
+personages
+personage's
+personal
+personalisation
+personalisation's
+personalise
+personalised
+personalises
+personalising
+personalities
+personality
+personality's
+personally
+personals
+personate
+personated
+personates
+personating
+personhood
+personification
+personifications
+personified
+personifies
+personify
+personifying
+personnel
+persons
+person's
+perspective
+perspectives
+perspective's
+perspicacious
+perspicaciously
+perspicacity
+perspicuity
+perspicuous
+perspicuously
+perspiration
+perspirations
+perspire
+perspired
+perspires
+perspiring
+persuadable
+persuade
+persuaded
+persuader
+persuaders
+persuades
+persuading
+persuasion
+persuasions
+persuasion's
+persuasive
+persuasively
+persuasiveness
+pert
+pertain
+pertained
+pertaining
+pertains
+pertinacious
+pertinacity
+pertinence
+pertinent
+pertinently
+pertly
+pertness
+perturb
+perturbation
+perturbations
+perturbation's
+perturbed
+perturbing
+perusal
+peruse
+perused
+peruses
+perusing
+pervade
+pervaded
+pervades
+pervading
+pervasion
+pervasive
+pervasively
+pervasiveness
+perverse
+perversely
+perverseness
+perversion
+perversions
+perversity
+pervert
+perverted
+perverting
+perverts
+pervious
+peseta
+peskier
+pesky
+peso
+pesos
+pessimism
+pessimist
+pessimistic
+pessimistically
+pessimists
+pest
+pester
+pestered
+pestering
+pesters
+pesthole
+pesticide
+pesticides
+pestiferous
+pestilence
+pestilences
+pestilent
+pestilential
+pestle
+pestles
+pests
+pet
+petal
+petals
+petal's
+petard
+peter
+petered
+peters
+petiole
+petit
+petite
+petition
+petitioned
+petitioner
+petitioning
+petitions
+petrel
+petri
+petrifaction
+petrified
+petrify
+petrochemical
+petrodollar
+petrography
+petrol
+petrolatum
+petroleum
+petrologic
+petrology
+pets
+petted
+petticoat
+petticoats
+petticoat's
+pettier
+pettiest
+pettifog
+pettifogger
+pettifogging
+pettily
+pettiness
+petting
+pettish
+pettishly
+pettishness
+petty
+petulance
+petulancy
+petulant
+petulantly
+petunia
+pew
+pewee
+pewit
+pews
+pew's
+pewter
+peyote
+pfennig
+ph
+phaeton
+phage
+phagocyte
+phagocytes
+phalanges
+phalanx
+phalanxes
+phalarope
+phalli
+phallic
+phallus
+phalluses
+phantasm
+phantasmagoria
+phantasmal
+phantom
+phantoms
+phantom's
+pharaoh
+pharaonic
+pharisaic
+pharmaceutical
+pharmaceutically
+pharmaceuticals
+pharmaceutics
+pharmacies
+pharmacist
+pharmacists
+pharmacological
+pharmacologically
+pharmacology
+pharmacopoeia
+pharmacy
+pharos
+pharyngeal
+pharyngitis
+pharynx
+pharynxes
+phase
+phased
+phases
+phasing
+pheasant
+pheasants
+pheasant's
+phenol
+phenolphthalein
+phenomena
+phenomenal
+phenomenally
+phenomenological
+phenomenology
+phenomenon
+phenotype
+phenotypic
+phenyl
+pheromone
+pheromones
+pheromone's
+phew
+phi
+phial
+philander
+philandered
+philanderer
+philanderers
+philanderer's
+philandering
+philanders
+philanthropic
+philanthropically
+philanthropies
+philanthropist
+philanthropists
+philanthropy
+philatelic
+philatelist
+philately
+philharmonic
+philippics
+philistines
+philodendron
+philological
+philologically
+philologist
+philologists
+philology
+philosopher
+philosophers
+philosopher's
+philosophic
+philosophical
+philosophically
+philosophies
+philosophise
+philosophised
+philosophiser
+philosophisers
+philosophises
+philosophising
+philosophy
+philosophy's
+philtre
+phlebitis
+phlebotomise
+phlebotomised
+phlebotomises
+phlebotomising
+phlebotomy
+phlegm
+phlegmatic
+phlegmatically
+phloem
+phlogiston
+phlox
+phobia
+phobic
+phoebe
+phoenix
+phonate
+phonated
+phonates
+phonating
+phonation
+phone
+phoned
+phoneme
+phonemes
+phoneme's
+phonemic
+phonemically
+phonemics
+phones
+phone's
+phonetic
+phonetically
+phonetician
+phonetics
+phoney
+phoneys
+phonic
+phonically
+phonics
+phonier
+phoniness
+phoning
+phonogram
+phonograms
+phonogram's
+phonograph
+phonographic
+phonographically
+phonographs
+phonologic
+phonological
+phonologically
+phonology
+phonon
+phonons
+phooey
+phosgene
+phosphate
+phosphates
+phosphate's
+phosphor
+phosphoresce
+phosphorescence
+phosphorescent
+phosphorescently
+phosphoric
+phosphorous
+phosphors
+phosphorus
+photo
+photoactive
+photobiology
+photobiotic
+photocell
+photochemical
+photochemistry
+photocoagulation
+photocompose
+photocomposition
+photoconduction
+photoconductive
+photoconductivity
+photocopied
+photocopier
+photocopies
+photocopy
+photocopying
+photocurrent
+photodecomposition
+photodiode
+photodiodes
+photodisintegration
+photodrama
+photoduplicate
+photodynamic
+photoelectric
+photoelectron
+photoelectrons
+photoemission
+photoengrave
+photoengraver
+photoengravers
+photoengraving
+photoflash
+photoflood
+photogene
+photogenic
+photograph
+photographed
+photographer
+photographers
+photographic
+photographically
+photographing
+photographs
+photography
+photogravure
+photoheliograph
+photojournalism
+photojournalist
+photojournalistic
+photojournalists
+photojournalist's
+photolithograph
+photolithographic
+photolithography
+photoluminescence
+photomap
+photomechanical
+photometer
+photometers
+photometer's
+photometric
+photometry
+photomicrograph
+photomicrography
+photomicroscope
+photomontage
+photomural
+photon
+photonegative
+photonic
+photons
+photon's
+photonuclear
+photoperiod
+photoperiodic
+photophobia
+photophobic
+photopolymer
+photopositive
+photoproduct
+photoreaction
+photoreception
+photoreceptive
+photoreceptor
+photoreconnaissance
+photorespiration
+photos
+photo's
+photosensitise
+photosensitised
+photosensitises
+photosensitising
+photosensitive
+photosensitivity
+photoset
+photosphere
+photosynthesis
+photosynthesise
+photosynthesised
+photosynthesises
+photosynthesising
+photosynthetic
+phototonus
+phototransistor
+phototropic
+phototropism
+phototube
+phototypeset
+phototypesetter
+phototypesetting
+phototypographic
+phototypography
+photovoltaic
+phrasal
+phrase
+phrased
+phrasemaker
+phrasemaking
+phrasemonger
+phraseologies
+phraseology
+phraseology's
+phrases
+phrasing
+phrasings
+phrenologist
+phrenology
+phthalate
+phthisis
+phyla
+phylactery
+phylogeny
+phylum
+physiatrist
+physic
+physical
+physicality
+physically
+physicals
+physician
+physicians
+physician's
+physicist
+physicists
+physicist's
+physicochemical
+physics
+physiochemical
+physiognomic
+physiognomy
+physiologic
+physiological
+physiologically
+physiologist
+physiology
+physiotherapist
+physiotherapy
+physique
+phytoplankton
+pi
+pianism
+pianissimo
+pianist
+pianists
+piano
+pianoforte
+pianofortes
+pianoforte's
+pianos
+piano's
+piazza
+piazzas
+piazza's
+pica
+picador
+picaresque
+picaroon
+picayune
+piccalilli
+piccolo
+pick
+pickaxe
+picked
+picker
+pickerel
+pickerels
+pickerelweed
+pickers
+picket
+picketed
+picketers
+picketing
+pickets
+pickier
+picking
+pickings
+pickle
+pickled
+pickles
+pickling
+picklock
+pickoff
+pickoffs
+pickpocket
+pickproof
+picks
+pickup
+pickups
+pickup's
+picky
+picnic
+picnicked
+picnicker
+picnickers
+picnicking
+picnics
+picnic's
+pico
+picofarad
+picosecond
+picoseconds
+picot
+picric
+pictogram
+pictograph
+pictographic
+pictography
+pictorial
+pictorially
+picts
+picture
+pictured
+pictures
+picturesque
+picturesquely
+picturing
+piddle
+piddling
+pie
+piebald
+piece
+pieced
+piecemeal
+pieces
+piecewise
+piecework
+pieceworker
+piecing
+piecrust
+pied
+piedmont
+pier
+pierce
+pierced
+pierces
+piercing
+piercingly
+piers
+pies
+pieta
+pieties
+pietism
+pietistic
+piety
+piezo
+piezoelectric
+piezoelectricity
+piffle
+piffled
+piffles
+piffling
+pig
+pigboat
+pigeon
+pigeonhole
+pigeonholed
+pigeonholes
+pigeonholing
+pigeons
+pigeon's
+pigfish
+pigged
+pigging
+piggish
+piggy
+piggyback
+piggybacked
+piggybacking
+pigheaded
+pigheadedness
+piglet
+piglets
+pigment
+pigmentation
+pigmentations
+pigmented
+pigments
+pigmy
+pignut
+pigpen
+pigpens
+pigs
+pig's
+pigskin
+pigsty
+pigswill
+pigtail
+pigtailed
+pigweed
+pike
+pikeperch
+piker
+pikes
+pike's
+pikestaff
+pilaf
+pilaff
+pilaster
+pilchard
+pile
+piled
+piles
+pileup
+pilfer
+pilferage
+pilfered
+pilferer
+pilfering
+pilfers
+pilgrim
+pilgrimage
+pilgrimages
+pilgrimage's
+pilgrims
+pilgrim's
+piling
+pilings
+pill
+pillage
+pillaged
+pillages
+pillaging
+pillar
+pillared
+pillars
+pillbox
+pillboxes
+pillion
+pillions
+pilloried
+pillories
+pillory
+pillorying
+pillow
+pillowcase
+pillowcases
+pillows
+pillow's
+pills
+pill's
+pilot
+pilotage
+piloted
+pilothouse
+piloting
+pilots
+pilot's
+pilsner
+pimento
+pimiento
+pimp
+pimpernel
+pimping
+pimple
+pimpled
+pimples
+pimply
+pimps
+pin
+pinafore
+pinafores
+pinball
+pincer
+pincers
+pincer's
+pinch
+pinchbeck
+pinched
+pincher
+pinches
+pinching
+pinchpenny
+pincushion
+pine
+pineal
+pineapple
+pineapples
+pineapple's
+pinecone
+pined
+pines
+pinesap
+pinewood
+pinfeather
+pinfish
+pinfold
+ping
+pinging
+pinhead
+pinheaded
+pinheads
+pinhole
+pinholes
+pining
+pinion
+pinioned
+pinions
+pink
+pinked
+pinker
+pinkest
+pinkeye
+pinkie
+pinkies
+pinking
+pinkish
+pinkly
+pinkness
+pinkroot
+pinks
+pinnace
+pinnacle
+pinnacles
+pinnacle's
+pinnate
+pinned
+pinning
+pinochle
+pinpoint
+pinpointed
+pinpointing
+pinpoints
+pinprick
+pinpricks
+pins
+pin's
+pinscher
+pinsetter
+pinstripe
+pint
+pintail
+pintails
+pinto
+pints
+pint's
+pinup
+pinwheel
+pinwork
+pinworm
+piny
+pioneer
+pioneered
+pioneering
+pioneers
+pious
+piously
+pip
+pipe
+piped
+pipefish
+pipefitting
+pipeline
+pipelined
+pipelines
+pipelining
+piper
+pipers
+pipes
+pipestone
+pipette
+piping
+pipit
+pippin
+pipsqueak
+piquancy
+piquant
+piquantly
+pique
+piqued
+piquet
+piquing
+piracy
+piranha
+pirate
+pirated
+pirates
+pirate's
+piratical
+pirating
+pirogue
+pirouette
+pirouetting
+piscatorial
+piscine
+pismire
+piss
+pissed
+pisser
+pisses
+pissing
+pistachio
+piste
+pistil
+pistils
+pistil's
+pistol
+pistols
+pistol's
+piston
+pistons
+piston's
+pit
+pita
+pitch
+pitchblende
+pitched
+pitcher
+pitchers
+pitches
+pitchfork
+pitchforks
+pitchfork's
+pitching
+pitchman
+pitchout
+pitchstone
+pitchy
+piteous
+piteously
+pitfall
+pitfalls
+pitfall's
+pith
+pithead
+pithier
+pithiest
+pithily
+pithiness
+pithy
+pitiable
+pitiably
+pitied
+pities
+pitiful
+pitifully
+pitiless
+pitilessly
+pitilessness
+pitman
+piton
+pitons
+piton's
+pitot
+pits
+pit's
+pitsaw
+pittance
+pittances
+pittance's
+pitted
+pitting
+pituitary
+pity
+pitying
+pityingly
+pivot
+pivotal
+pivotally
+pivoted
+pivoting
+pivots
+pixel
+pixels
+pixel's
+pixie
+pixies
+pixy
+pizza
+pizzazz
+pizzeria
+pizzicato
+placard
+placards
+placard's
+placate
+placated
+placates
+placating
+placation
+placatory
+place
+placebo
+placed
+placeholder
+placeless
+placeman
+placemat
+placemats
+placemat's
+placement
+placements
+placement's
+placenta
+placental
+placer
+places
+placid
+placidity
+placidly
+placing
+placket
+plafond
+plagiarise
+plagiarised
+plagiariser
+plagiarisers
+plagiarises
+plagiarising
+plagiarism
+plagiarist
+plagiaristic
+plagiary
+plagioclase
+plague
+plagued
+plagues
+plaguing
+plaice
+plaid
+plaids
+plaid's
+plain
+plainchant
+plainclothes
+plainclothesman
+plainer
+plainest
+plainly
+plainness
+plains
+plainsman
+plainsong
+plainspoken
+plaint
+plaintext
+plaintiff
+plaintiffs
+plaintiff's
+plaintive
+plaintively
+plait
+plaiting
+plaits
+plait's
+plan
+planar
+planarian
+planarity
+planchette
+plane
+planed
+planeload
+planer
+planers
+planes
+plane's
+planet
+planetarium
+planetary
+planetoid
+planetoids
+planets
+planet's
+plangent
+plank
+planking
+planks
+plankton
+planned
+planner
+planners
+planner's
+planning
+plano
+plans
+plan's
+plant
+plantain
+plantar
+plantation
+plantations
+plantation's
+planted
+planter
+planters
+planting
+plantings
+plants
+plaque
+plaques
+plash
+plasma
+plasmatic
+plasmodium
+plaster
+plasterboard
+plastered
+plasterer
+plasterers
+plastering
+plasters
+plasterwork
+plastic
+plastically
+plasticity
+plasticize
+plasticizer
+plastics
+plastid
+plastron
+plat
+plate
+plateau
+plateaus
+plateau's
+plateaux
+plated
+plateful
+platelayer
+platelayers
+platelet
+platelets
+platelet's
+platen
+platens
+platen's
+plates
+platform
+platforms
+platform's
+plating
+platinum
+platitude
+platitudes
+platitudinous
+platonic
+platonically
+platoon
+platoons
+platted
+platter
+platters
+platter's
+platting
+platy
+platypus
+platypuses
+platypus's
+plaudit
+plausibility
+plausible
+plausibly
+play
+playa
+playability
+playable
+playact
+playback
+playbacks
+playbill
+playbills
+playbook
+playboy
+playboys
+played
+player
+players
+player's
+playful
+playfully
+playfulness
+playgirl
+playgoer
+playgoers
+playground
+playgrounds
+playground's
+playgroup
+playgroups
+playhouse
+playhouses
+playing
+playmaker
+playmate
+playmates
+playmate's
+playoff
+playpen
+playpens
+playpen's
+playroom
+plays
+playschool
+playsuit
+plaything
+playthings
+plaything's
+playtime
+playwright
+playwrights
+playwright's
+playwriting
+plaza
+plazas
+plea
+plead
+pleaded
+pleader
+pleading
+pleadingly
+pleadings
+pleads
+pleas
+plea's
+pleasance
+pleasant
+pleasantly
+pleasantness
+pleasantry
+please
+pleased
+pleaser
+pleases
+pleasing
+pleasingly
+pleasurable
+pleasurably
+pleasure
+pleasured
+pleasures
+pleasuring
+pleat
+pleated
+pleats
+plebe
+plebeian
+plebes
+plebiscite
+plebiscites
+plebiscite's
+plebs
+plectrum
+plectrums
+plectrum's
+pled
+pledge
+pledged
+pledges
+pledging
+plenary
+plenipotentiary
+plenitude
+plenteous
+plenteously
+plenteousness
+plentiful
+plentifully
+plenty
+plenum
+pleonasm
+plesiosaur
+plethora
+plethoric
+pleura
+pleurae
+pleural
+pleurisy
+plexus
+pliability
+pliable
+pliancy
+pliant
+plicate
+plied
+pliers
+plies
+plight
+plimsoll
+plink
+plinked
+plinking
+plinks
+plinth
+plod
+plodded
+plodder
+plodding
+ploddingly
+plods
+plonk
+plop
+plopped
+plopping
+plosive
+plot
+plots
+plot's
+plotted
+plotter
+plotters
+plotter's
+plotting
+plough
+ploughboy
+ploughboys
+ploughed
+ploughing
+ploughman
+ploughmen
+ploughs
+ploughshare
+ploughshares
+ploughshare's
+plover
+plovers
+ploy
+ploys
+ploy's
+pluck
+plucked
+pluckier
+pluckily
+pluckiness
+plucking
+plucky
+plug
+plugged
+plugging
+plugs
+plug's
+plum
+plumage
+plumaged
+plumages
+plumb
+plumbed
+plumber
+plumbers
+plumbic
+plumbing
+plumbs
+plumb's
+plume
+plumed
+plumes
+plumier
+pluming
+plummet
+plummeted
+plummeting
+plummets
+plumose
+plump
+plumped
+plumper
+plumpness
+plums
+plum's
+plumy
+plunder
+plundered
+plunderer
+plunderers
+plundering
+plunders
+plunge
+plunged
+plunger
+plungers
+plunges
+plunging
+plunk
+plunking
+pluperfect
+plural
+pluralism
+pluralist
+pluralistic
+pluralistically
+pluralists
+plurality
+plurals
+plus
+pluses
+plush
+plusses
+plutocracy
+plutocrat
+plutocratic
+plutonian
+plutonic
+plutonium
+pluvial
+ply
+plying
+plywood
+pneuma
+pneumatic
+pneumatically
+pneumatics
+pneumoconiosis
+pneumonia
+pneumonic
+poach
+poached
+poacher
+poachers
+poaches
+poaching
+pock
+pocket
+pocketbook
+pocketbooks
+pocketbook's
+pocketed
+pocketful
+pocketing
+pockets
+pockmark
+pod
+podgier
+podgy
+podia
+podiatric
+podiatrist
+podiatry
+podium
+pods
+pod's
+poem
+poems
+poem's
+poesies
+poesy
+poet
+poetaster
+poetess
+poetic
+poetical
+poetically
+poeticise
+poeticised
+poeticises
+poeticising
+poeticism
+poetics
+poetise
+poetised
+poetises
+poetising
+poetries
+poetry
+poetry's
+poets
+poet's
+pogo
+pogrom
+pogroms
+poi
+poignancy
+poignant
+poignantly
+poinsettia
+point
+pointed
+pointedly
+pointer
+pointers
+pointier
+pointiest
+pointillism
+pointillist
+pointing
+pointless
+pointlessly
+pointlessness
+points
+pointy
+poise
+poised
+poises
+poising
+poison
+poisoned
+poisoning
+poisonous
+poisonously
+poisons
+poke
+pokeberry
+poked
+poker
+pokerfaced
+pokes
+pokeweed
+pokey
+pokier
+pokily
+pokiness
+poking
+poky
+polar
+polarisation
+polarisations
+polarisation's
+polarise
+polarised
+polarises
+polarising
+polarities
+polarity
+polarity's
+polder
+pole
+poleaxe
+polecat
+poled
+polemic
+polemical
+polemically
+polemicist
+polemics
+polemist
+poles
+polestar
+police
+policed
+policeman
+policeman's
+policemen
+policemen's
+polices
+police's
+policewoman
+policewoman's
+policewomen
+policies
+policing
+policy
+policyholder
+policyholders
+policymaker
+policymakers
+policymaking
+policy's
+poling
+polio
+poliomyelitis
+poliovirus
+polis
+polish
+polished
+polisher
+polishers
+polishes
+polishing
+politburo
+polite
+politely
+politeness
+politer
+politest
+politic
+political
+politically
+politician
+politicians
+politician's
+politicisation
+politicise
+politicised
+politicises
+politicising
+politicking
+politico
+politicos
+politics
+polities
+polity
+polka
+polkas
+polka's
+poll
+polled
+pollen
+pollex
+pollinate
+pollinated
+pollinates
+pollinating
+pollination
+pollinator
+polling
+polliwog
+polloi
+polls
+pollster
+pollutant
+pollutants
+pollute
+polluted
+polluter
+pollutes
+polluting
+pollution
+pollywog
+pollywogs
+pollywog's
+polo
+polonaise
+polonium
+poltergeist
+poltroon
+poltroonery
+poly
+polyamide
+polyandrous
+polyandry
+polycarbonate
+polycentrism
+polychromatic
+polychrome
+polyclinic
+polycrystalline
+polyester
+polyesters
+polyethylene
+polygamist
+polygamous
+polygamy
+polygenetic
+polyglot
+polygon
+polygonal
+polygons
+polygon's
+polygraph
+polyhedral
+polyhedron
+polymath
+polymer
+polymeric
+polymerisation
+polymerisations
+polymerisation's
+polymerise
+polymerises
+polymers
+polymer's
+polymorph
+polymorphism
+polymorphous
+polynomial
+polynomials
+polynomial's
+polyp
+polypeptide
+polyphone
+polyphonic
+polyphonically
+polyphony
+polyphosphate
+polyphosphates
+polypropylene
+polyrhythmic
+polysaccharide
+polysaccharides
+polystyrene
+polysyllabic
+polysyllabically
+polysyllable
+polytechnic
+polytheism
+polytheist
+polytheistic
+polythene
+polytonal
+polytonality
+polytonally
+polyunsaturated
+polyurethane
+polyvalence
+polyvalent
+polyvinyl
+pomade
+pomaded
+pomades
+pomander
+pomegranate
+pommel
+pomp
+pompadour
+pompano
+pompon
+pompons
+pomposity
+pompous
+pompously
+pompousness
+poncho
+pond
+ponder
+pondered
+pondering
+ponderosa
+ponderosas
+ponderosa's
+ponderous
+ponderously
+ponderousness
+ponders
+ponds
+pondweed
+pone
+pong
+pongee
+poniard
+ponies
+pontiff
+pontifical
+pontificate
+pontificated
+pontificates
+pontificating
+pontificator
+pontoon
+pony
+pony's
+ponytail
+pooch
+poodle
+poof
+pooh
+pool
+pooled
+pooling
+poolroom
+pools
+poop
+poor
+poorer
+poorest
+poorhouse
+poorly
+poorness
+pop
+popcorn
+pope
+popery
+popes
+pope's
+popeyed
+popgun
+popinjay
+popish
+poplar
+poplin
+popover
+poppa
+popped
+popper
+poppies
+popping
+poppy
+poppycock
+poppy's
+pops
+pop's
+populace
+popular
+popularisation
+popularisations
+popularisation's
+popularise
+popularised
+popularises
+popularising
+popularity
+popularly
+populate
+populated
+populates
+populating
+population
+populations
+populism
+populist
+populous
+populously
+porcelain
+porch
+porches
+porch's
+porcine
+porcupine
+porcupines
+porcupine's
+pore
+pored
+pores
+porgy
+poring
+pork
+porker
+porkpie
+porky
+porn
+pornographer
+pornographic
+pornographically
+pornography
+porosity
+porous
+porously
+porphyry
+porpoise
+porpoises
+porridge
+porringer
+port
+portability
+portable
+portables
+portably
+portage
+portaged
+portaging
+portal
+portals
+portal's
+portative
+portcullis
+ported
+portend
+portended
+portending
+portends
+portent
+portentous
+portentously
+portentousness
+portents
+porter
+porterhouse
+porters
+portfolio
+portfolios
+porthole
+portico
+portiere
+porting
+portion
+portioned
+portioning
+portions
+portion's
+portlier
+portliness
+portly
+portmanteau
+portmanteaus
+portrait
+portraitist
+portraits
+portrait's
+portraiture
+portray
+portrayal
+portrayals
+portrayed
+portrayer
+portraying
+portrays
+ports
+pose
+posed
+poser
+posers
+poses
+poseur
+poseurs
+posh
+posies
+posing
+posit
+posited
+positing
+position
+positional
+positioned
+positioning
+positions
+positive
+positively
+positives
+positivism
+positivist
+positivistic
+positivists
+positron
+posits
+posse
+posses
+possess
+possessed
+possesses
+possessing
+possession
+possessions
+possession's
+possessive
+possessively
+possessiveness
+possessives
+possessive's
+possessor
+possessors
+possessor's
+possibilities
+possibility
+possibility's
+possible
+possibly
+possum
+possums
+possum's
+post
+postage
+postal
+postbag
+postbags
+postcard
+postcards
+postcard's
+postclassical
+postcode
+postcodes
+postcolonial
+postdate
+postdates
+postdating
+postdiluvian
+postdoctoral
+posted
+poster
+posterior
+posterity
+postern
+posters
+poster's
+postexilic
+postfix
+postfixes
+postglacial
+postgraduate
+posthole
+posthumous
+posthumously
+posthypnotic
+postimpressionism
+posting
+postings
+postlude
+postludes
+postman
+postmark
+postmarked
+postmarks
+postmaster
+postmasters
+postmaster's
+postmen
+postmenopausal
+postmeridian
+postmillenarian
+postmillenarianism
+postmillennial
+postmillennialism
+postmillennialist
+postmistress
+postnasal
+postnatal
+postnuptial
+postnuptially
+postoperative
+postoperatively
+postorbital
+postpartum
+postpone
+postponed
+postponement
+postpones
+postponing
+postposition
+postpositional
+postpositionally
+postpositions
+postpositive
+postpositively
+postprocessor
+postprocessors
+posts
+postscript
+postscripts
+postscript's
+postsecondary
+postsynaptic
+posttraumatic
+postulant
+postulate
+postulated
+postulates
+postulating
+postulation
+postulations
+postulator
+postural
+posture
+postured
+postures
+posture's
+posturing
+postvocalic
+posy
+pot
+potable
+potage
+potash
+potassium
+potation
+potato
+potatoes
+potbellied
+potbelly
+potboil
+potboilers
+potboy
+poteen
+potency
+potent
+potentate
+potentates
+potentate's
+potential
+potentialities
+potentiality
+potentially
+potentials
+potentiate
+potentiometer
+potentiometers
+potentiometer's
+potently
+pothead
+potherb
+pothole
+potholed
+potholing
+pothook
+pothouse
+pothunter
+potion
+potions
+potlatch
+potlatches
+potluck
+potpie
+potpourri
+pots
+pot's
+potsherd
+potstone
+pottage
+potted
+potter
+potteries
+potters
+potter's
+pottery
+potties
+potting
+potty
+pouch
+pouched
+pouches
+pouch's
+pouf
+poulterer
+poultice
+poultices
+poultry
+poultryman
+pounce
+pounced
+pounces
+pouncing
+pound
+poundage
+poundal
+pounded
+pounder
+pounding
+pounds
+pour
+pourboire
+poured
+pourer
+pourers
+pouring
+pours
+pout
+pouted
+pouter
+pouting
+pouts
+poverty
+powder
+powdered
+powdering
+powders
+powdery
+power
+powerboat
+powered
+powerful
+powerfully
+powerfulness
+powerhouse
+powerhouses
+powerhouse's
+powering
+powerless
+powerlessly
+powerlessness
+powers
+powwow
+pox
+poxes
+poxvirus
+practicability
+practicable
+practicably
+practical
+practicalities
+practicality
+practically
+practice
+practices
+practice's
+practicum
+practise
+practised
+practises
+practising
+practitioner
+practitioners
+practitioner's
+praecox
+praetor
+pragmatic
+pragmatically
+pragmatics
+pragmatism
+pragmatist
+pragmatists
+prairie
+prairies
+praise
+praised
+praises
+praiseworthily
+praiseworthiness
+praiseworthy
+praising
+praline
+pram
+prams
+prance
+pranced
+prances
+prancing
+prang
+prank
+prankish
+prankishness
+pranks
+prank's
+prankster
+pranksters
+praseodymium
+prate
+prated
+prates
+pratfall
+prating
+prattle
+prattled
+prattler
+prattles
+prattling
+prawn
+prawns
+praxes
+praxis
+pray
+prayed
+prayer
+prayerful
+prayerfully
+prayerfulness
+prayers
+prayer's
+praying
+prays
+pre
+preach
+preached
+preacher
+preachers
+preaches
+preaching
+preachment
+preachy
+preadolescence
+preadolescent
+preamble
+preambles
+preamplifier
+preamplifiers
+prearrange
+prearranged
+prearrangement
+prebend
+prebendary
+precarious
+precariously
+precariousness
+precast
+precaution
+precautionary
+precautions
+precaution's
+precautious
+precede
+preceded
+precedence
+precedence's
+precedent
+precedents
+precedes
+preceding
+precept
+preceptor
+precepts
+precept's
+precession
+precinct
+precincts
+precinct's
+precious
+preciously
+preciousness
+precipice
+precipitance
+precipitancy
+precipitant
+precipitate
+precipitated
+precipitately
+precipitates
+precipitating
+precipitation
+precipitator
+precipitin
+precipitous
+precipitously
+pr�cis
+precise
+precisely
+preciseness
+precision
+precisionist
+precisions
+preclude
+precluded
+precludes
+precluding
+preclusion
+preclusive
+precocious
+precociously
+precocity
+precognition
+precognitive
+precompiled
+preconceive
+preconceived
+preconception
+preconceptions
+preconception's
+precondition
+preconditioned
+preconditions
+preconscious
+precook
+precooked
+precursor
+precursors
+precursor's
+precursory
+predaceous
+predacious
+predate
+predated
+predates
+predating
+predation
+predator
+predatorily
+predators
+predator's
+predatory
+predawn
+predecease
+predecessor
+predecessors
+predecessor's
+predefine
+predefined
+predefines
+predefining
+predefinition
+predefinitions
+predefinition's
+predestination
+predestine
+predestined
+predetermination
+predetermine
+predetermined
+predetermines
+predetermining
+predicable
+predicament
+predicate
+predicated
+predicates
+predicating
+predication
+predications
+predicative
+predicator
+predict
+predictability
+predictable
+predictably
+predicted
+predicting
+prediction
+predictions
+prediction's
+predictive
+predictor
+predictors
+predicts
+predigest
+predilection
+predilections
+predispose
+predisposed
+predisposes
+predisposition
+predispositions
+predominance
+predominant
+predominantly
+predominate
+predominated
+predominately
+predominates
+predominating
+predomination
+predrilled
+preemie
+preen
+preening
+prefab
+prefabricate
+prefabricated
+prefabrication
+preface
+prefaced
+prefacer
+prefaces
+prefacing
+prefatorily
+prefatory
+prefect
+prefects
+prefecture
+prefectures
+prefer
+preferable
+preferably
+preference
+preferences
+preference's
+preferential
+preferentially
+preferment
+preferred
+preferring
+prefers
+prefigure
+prefigured
+prefigures
+prefiguring
+prefix
+prefixed
+prefixes
+prefixing
+preformed
+prefrontal
+pregnable
+pregnancies
+pregnancy
+pregnant
+preheat
+preheated
+prehensile
+prehistoric
+prehistorically
+prehistory
+prejudge
+prejudged
+prejudgement
+prejudice
+prejudiced
+prejudices
+prejudicial
+prejudicially
+prejudicing
+prelacy
+prelate
+prelature
+preliminaries
+preliminarily
+preliminary
+prelims
+preliterate
+prelude
+preludes
+prelude's
+premarital
+premature
+prematurely
+premed
+premedical
+premeditate
+premeditated
+premeditatedly
+premeditation
+premeditative
+premeditator
+premenstrual
+premier
+premiere
+premiered
+premieres
+premiering
+premiers
+premier's
+premiership
+premise
+premised
+premises
+premise's
+premising
+premium
+premiums
+premium's
+premix
+premixed
+premolar
+premonition
+premonitions
+premonitory
+prenatal
+preoccupancy
+preoccupation
+preoccupations
+preoccupied
+preoccupies
+preoccupy
+preoperative
+preoperatively
+preordain
+preordained
+preordaining
+preordainment
+preordains
+preordination
+prep
+preparation
+preparations
+preparation's
+preparative
+preparatory
+prepare
+prepared
+preparedly
+preparedness
+prepares
+preparing
+prepay
+prepayment
+preponderance
+preponderances
+preponderant
+preponderantly
+preponderate
+preponderating
+preposition
+prepositional
+prepositions
+preposition's
+prepossess
+prepossessing
+prepossession
+preposterous
+preposterously
+preposterousness
+preppie
+prepping
+preprint
+preprints
+prepubescent
+prepublication
+prepuce
+prerecord
+prerequisite
+prerequisites
+prerequisite's
+prerogative
+prerogatives
+prerogative's
+presage
+presaged
+presages
+presaging
+presbyopia
+presbyter
+presbytery
+preschool
+preschooler
+prescience
+prescience's
+prescient
+presciently
+prescribe
+prescribed
+prescribes
+prescribing
+prescript
+prescription
+prescriptions
+prescription's
+prescriptive
+prescriptively
+presence
+presences
+presence's
+present
+presentable
+presentably
+presentation
+presentational
+presentations
+presentation's
+presented
+presenter
+presenters
+presentiment
+presenting
+presently
+presentment
+presentments
+presents
+preservation
+preservationist
+preservations
+preservative
+preservatives
+preservative's
+preserve
+preserved
+preserver
+preservers
+preserves
+preserving
+preset
+presets
+presetting
+preside
+presided
+presidency
+president
+presidential
+presidents
+president's
+presides
+presiding
+presidium
+press
+pressboard
+pressed
+presser
+presses
+pressing
+pressingly
+pressings
+pressman
+pressmark
+pressmen
+pressroom
+pressrun
+pressure
+pressured
+pressures
+pressuring
+pressurisation
+pressurise
+pressurised
+pressurises
+pressurising
+presswork
+prestidigitation
+prestidigitator
+prestige
+prestigious
+prestigiously
+presto
+prestos
+presumable
+presumably
+presume
+presumed
+presumes
+presuming
+presumption
+presumptions
+presumption's
+presumptive
+presumptively
+presumptuous
+presumptuously
+presumptuousness
+presuppose
+presupposed
+presupposes
+presupposing
+presupposition
+presuppositions
+preteen
+pretence
+pretences
+pretend
+pretended
+pretender
+pretenders
+pretending
+pretends
+pretentious
+pretentiously
+pretentiousness
+preterit
+pretermission
+preternatural
+preternaturally
+preternaturalness
+pretext
+pretexts
+pretext's
+prettied
+prettier
+pretties
+prettiest
+prettification
+prettify
+prettily
+prettiness
+pretty
+prettying
+pretzel
+pretzels
+prevail
+prevailed
+prevailing
+prevailingly
+prevails
+prevalence
+prevalent
+prevalently
+prevaricate
+prevaricated
+prevaricates
+prevaricating
+prevarication
+prevaricator
+prevent
+preventability
+preventable
+preventative
+prevented
+preventing
+prevention
+preventions
+preventive
+preventively
+preventives
+prevents
+preverbal
+preview
+previewed
+previewing
+previews
+previous
+previously
+prevision
+previsions
+prevocalic
+prevocational
+prey
+preyed
+preying
+preys
+price
+priced
+priceless
+prices
+pricey
+pricier
+pricing
+prick
+pricked
+pricking
+prickle
+prickled
+pricklier
+prickliness
+prickling
+prickly
+pricks
+pride
+prided
+prideful
+prides
+priding
+pried
+prier
+pries
+priest
+priestess
+priestesses
+priesthood
+priestly
+priests
+prig
+priggish
+priggishly
+priggishness
+prim
+prima
+primacy
+primal
+primaries
+primarily
+primary
+primary's
+primate
+primates
+prime
+primed
+primer
+primers
+primes
+primeval
+priming
+primitive
+primitively
+primitiveness
+primitives
+primitivism
+primly
+primmer
+primmest
+primness
+primo
+primogenitor
+primogeniture
+primordial
+primordially
+primp
+primping
+primrose
+primus
+prince
+princedom
+princely
+princes
+princess
+princesses
+princess's
+principal
+principalities
+principality
+principality's
+principally
+principals
+principium
+principle
+principled
+principles
+prink
+print
+printability
+printable
+printed
+printer
+printers
+printing
+printmaker
+printmakers
+printmaking
+printout
+printouts
+prints
+prior
+prioress
+prioresses
+priori
+priorities
+prioritisation
+prioritise
+prioritised
+prioritises
+prioritising
+priority
+priority's
+priors
+priory
+prise
+prism
+prismatic
+prisms
+prism's
+prison
+prisoner
+prisoners
+prisoner's
+prisons
+prissier
+prissily
+prissiness
+prissy
+pristine
+pristinely
+privacies
+privacy
+private
+privateer
+privateers
+privateer's
+privately
+privates
+privation
+privations
+privatisation
+privatise
+privatised
+privatising
+privet
+privies
+privilege
+privileged
+privileges
+privy
+privy's
+prix
+prize
+prized
+prizes
+prizing
+pro
+proactive
+probabilistic
+probabilistically
+probabilities
+probability
+probable
+probably
+probate
+probated
+probates
+probating
+probation
+probationary
+probationer
+probationers
+probative
+probe
+probed
+probes
+probing
+probity
+problem
+problematic
+problematical
+problematically
+problems
+problem's
+proboscis
+proc
+procaine
+procedural
+procedurally
+procedure
+procedures
+procedure's
+proceed
+proceeded
+proceeding
+proceedings
+proceeds
+process
+processed
+processes
+processing
+procession
+processional
+processor
+processors
+processor's
+process's
+proclaim
+proclaimed
+proclaiming
+proclaims
+proclamation
+proclamations
+proclamation's
+proclivities
+proclivity
+proclivity's
+proconsul
+procrastinate
+procrastinated
+procrastinates
+procrastinating
+procrastination
+procrastinator
+procrastinators
+procrastinator's
+procreant
+procreate
+procreation
+procreative
+procreativity
+procreator
+procrustean
+proctologic
+proctologist
+proctology
+proctor
+proctored
+proctoring
+proctors
+proctor's
+proctorship
+procumbent
+procurable
+procurator
+procure
+procured
+procurement
+procurements
+procurement's
+procurer
+procurers
+procures
+procuress
+procuring
+prod
+prodded
+prodder
+prodding
+prodigal
+prodigality
+prodigally
+prodigies
+prodigious
+prodigiously
+prodigy
+produce
+produced
+producer
+producers
+produces
+producible
+producing
+product
+production
+productions
+production's
+productive
+productively
+productiveness
+productivities
+productivity
+products
+product's
+proem
+profanation
+profane
+profaned
+profanely
+profaneness
+profaner
+profaning
+profanity
+profess
+professed
+professedly
+professes
+professing
+profession
+professional
+professionalism
+professionalisms
+professionally
+professionals
+professions
+profession's
+professor
+professorial
+professorially
+professors
+professor's
+professorship
+proffer
+proffered
+proffering
+proffers
+proficiencies
+proficiency
+proficient
+proficiently
+profile
+profiled
+profiler
+profilers
+profiler's
+profiles
+profiling
+profit
+profitability
+profitable
+profitableness
+profitably
+profited
+profiteer
+profiteers
+profiteer's
+profiting
+profitless
+profits
+profit's
+profligacy
+profligate
+profligately
+profligates
+profound
+profoundest
+profoundly
+profoundness
+profundity
+profuse
+profusely
+profuseness
+profusion
+progenitor
+progeny
+progesterone
+prognoses
+prognosis
+prognostic
+prognosticate
+prognostication
+prognosticator
+program
+programmability
+programmable
+programmatic
+programmatically
+programme
+programmed
+programmer
+programmers
+programmer's
+programmes
+programme's
+programming
+programs
+program's
+progress
+progressed
+progresses
+progressing
+progression
+progressions
+progression's
+progressive
+progressively
+progressiveness
+progressivism
+prohibit
+prohibited
+prohibiting
+prohibition
+prohibitionist
+prohibitions
+prohibition's
+prohibitive
+prohibitively
+prohibits
+project
+projected
+projectile
+projectiles
+projecting
+projection
+projectionist
+projectionists
+projections
+projection's
+projective
+projector
+projectors
+projector's
+projects
+project's
+prokaryote
+prokaryotic
+prolapsed
+prolegomena
+prolegomenon
+prolepsis
+proletarian
+proletariat
+proliferate
+proliferated
+proliferates
+proliferating
+proliferation
+prolific
+prolificacy
+prolifically
+prolix
+prolixity
+prolocutor
+prolog
+prologue
+prologues
+prologue's
+prolong
+prolongation
+prolonged
+prolonging
+prolongs
+prolusion
+prolusions
+prom
+promenade
+promenades
+promenade's
+promenading
+promethium
+prominence
+prominent
+prominently
+promiscuity
+promiscuity's
+promiscuous
+promiscuously
+promiscuousness
+promise
+promised
+promises
+promising
+promisingly
+promissory
+promontories
+promontory
+promote
+promoted
+promoter
+promoters
+promotes
+promoting
+promotion
+promotional
+promotions
+prompt
+promptbook
+promptbooks
+prompted
+prompter
+prompters
+promptest
+prompting
+promptings
+promptitude
+promptly
+promptness
+prompts
+promulgate
+promulgated
+promulgates
+promulgating
+promulgation
+promulgations
+promulgator
+promulgators
+prone
+proneness
+prong
+pronged
+pronghorn
+pronghorns
+prongs
+pronominal
+pronominally
+pronoun
+pronounce
+pronounceable
+pronounced
+pronouncedly
+pronouncement
+pronouncements
+pronouncement's
+pronounces
+pronouncing
+pronouns
+pronoun's
+pronto
+pronunciation
+pronunciations
+pronunciation's
+proof
+proofed
+proofing
+proofread
+proofreading
+proofreads
+proofs
+proof's
+prop
+propaganda
+propagandise
+propagandised
+propagandises
+propagandising
+propagandist
+propagandistic
+propagandistically
+propagandists
+propagate
+propagated
+propagates
+propagating
+propagation
+propagations
+propagator
+propane
+propel
+propellant
+propellants
+propelled
+propeller
+propellers
+propeller's
+propelling
+propels
+propend
+propensities
+propensity
+proper
+properly
+propertied
+properties
+property
+prophase
+prophecies
+prophecy
+prophecy's
+prophesied
+prophesier
+prophesies
+prophesy
+prophesying
+prophet
+prophetess
+prophetic
+prophetical
+prophetically
+prophets
+prophet's
+prophylactic
+prophylaxis
+propinquity
+propionate
+propitiate
+propitiation
+propitiator
+propitiatory
+propitious
+propitiously
+propjet
+proponent
+proponents
+proponent's
+proportion
+proportional
+proportionality
+proportionally
+proportionate
+proportionately
+proportioned
+proportioning
+proportions
+propos
+proposal
+proposals
+proposal's
+propose
+proposed
+proposes
+proposing
+proposition
+propositioned
+propositioning
+propositions
+propound
+propounded
+propounding
+propounds
+propped
+propping
+proprietary
+proprietor
+proprietors
+proprietor's
+proprietorship
+proprietorships
+proprietress
+propriety
+props
+propulsion
+propulsions
+propulsion's
+propulsive
+propylene
+prorate
+prorated
+prorating
+prorogation
+prorogue
+prorogued
+proroguing
+pros
+pro's
+prosaic
+prosaically
+proscenium
+prosceniums
+proscribe
+proscribed
+proscribes
+proscribing
+proscription
+proscriptive
+proscriptively
+prose
+prosecutable
+prosecute
+prosecuted
+prosecutes
+prosecuting
+prosecution
+prosecutions
+prosecutor
+prosecutors
+proselyte
+proselytise
+proselytised
+proselytiser
+proselytisers
+proselytises
+proselytising
+prosier
+prosily
+prosing
+prosodic
+prosodies
+prosody
+prospect
+prospected
+prospecting
+prospective
+prospectively
+prospector
+prospectors
+prospector's
+prospects
+prospectus
+prosper
+prospered
+prospering
+prosperity
+prosperous
+prosperously
+prosperousness
+prospers
+prostaglandin
+prostate
+prostheses
+prosthesis
+prosthetic
+prosthetics
+prostitute
+prostitutes
+prostitution
+prostrate
+prostrated
+prostration
+prosy
+protactinium
+protagonist
+protagonists
+protean
+protease
+proteases
+protect
+protected
+protecting
+protection
+protectionism
+protectionist
+protections
+protection's
+protective
+protectively
+protectiveness
+protector
+protectoral
+protectorate
+protectors
+protector's
+protects
+protein
+proteins
+protein's
+proteolysis
+protest
+protestant
+protestants
+protestation
+protestations
+protested
+protester
+protesters
+protester's
+protesting
+protestor
+protests
+protest's
+proto
+protocol
+protocols
+protocol's
+proton
+protons
+proton's
+protoplasm
+protoplasmic
+protoplast
+prototypal
+prototype
+prototyped
+prototypes
+prototype's
+prototypic
+prototypical
+prototypically
+prototyping
+protozoa
+protozoan
+protozoon
+protract
+protracted
+protractile
+protraction
+protractor
+protrude
+protruded
+protrudes
+protruding
+protrusion
+protrusions
+protrusion's
+protrusive
+protuberance
+protuberant
+proud
+prouder
+proudest
+proudly
+provability
+provable
+provably
+prove
+proved
+proven
+provenance
+provender
+provenience
+proverb
+proverbial
+proverbially
+proverbs
+proverb's
+proves
+provide
+provided
+providence
+provident
+providential
+providentially
+providently
+provider
+providers
+provides
+providing
+province
+provinces
+province's
+provincial
+provincialism
+provinciality
+provincially
+proving
+provirus
+provision
+provisional
+provisionally
+provisioned
+provisioning
+provisions
+proviso
+provisory
+provocateur
+provocateurs
+provocation
+provocations
+provocative
+provocatively
+provoke
+provoked
+provokes
+provoking
+provokingly
+provolone
+provost
+prow
+prowess
+prowl
+prowled
+prowler
+prowlers
+prowling
+prowls
+prows
+prow's
+proxies
+proximal
+proximally
+proximate
+proximately
+proximity
+proxy
+prude
+prudence
+prudent
+prudential
+prudentially
+prudently
+prudery
+prudes
+prude's
+prudish
+prudishly
+prudishness
+prune
+pruned
+prunes
+pruning
+prurience
+prurient
+prussic
+pry
+prying
+pryingly
+psalm
+psalmist
+psalmody
+psalms
+psalm's
+psaltery
+pseud
+pseudo
+pseudonym
+pseudonymous
+pseudonyms
+pseudonym's
+pseudopodium
+pseudorandom
+pseudoscientific
+pshaw
+psittacosis
+psoriasis
+psych
+psyche
+psychedelic
+psychedelically
+psyches
+psyche's
+psychiatric
+psychiatrically
+psychiatrist
+psychiatrists
+psychiatrist's
+psychiatry
+psychic
+psychical
+psychically
+psychics
+psychic's
+psycho
+psychoacoustics
+psychoactive
+psychoanalyse
+psychoanalyses
+psychoanalysis
+psychoanalyst
+psychoanalytic
+psychoanalytical
+psychoanalytically
+psychobiography
+psychobiologic
+psychobiological
+psychobiology
+psychochemical
+psychodrama
+psychodynamic
+psychodynamics
+psychogenesis
+psychogenetic
+psychograph
+psychohistory
+psychokinetic
+psycholinguist
+psycholinguistic
+psycholinguistics
+psychological
+psychologically
+psychologist
+psychologists
+psychologist's
+psychology
+psychometric
+psychometrically
+psychometrics
+psychomotor
+psychoneurosis
+psychoneurotic
+psychopath
+psychopathic
+psychopathically
+psychopathologic
+psychopathological
+psychopathologist
+psychopathology
+psychopharmacologic
+psychopharmacological
+psychopharmacology
+psychophysical
+psychophysically
+psychophysicist
+psychophysics
+psychophysiology
+psychos
+psychoses
+psychosexual
+psychosexuality
+psychosexually
+psychosis
+psychosocial
+psychosocially
+psychosomatic
+psychosomatically
+psychosomatics
+psychosurgery
+psychosurgical
+psychotherapeutic
+psychotherapeutically
+psychotherapeutics
+psychotherapist
+psychotherapists
+psychotherapy
+psychotic
+psychotically
+psychotropic
+ptarmigan
+pterodactyl
+pterodactyls
+pterodactyl's
+pterosaur
+ptomaine
+ptyalin
+pub
+pubertal
+puberty
+pubes
+pubescence
+pubescent
+pubic
+pubis
+public
+publican
+publicans
+publication
+publications
+publication's
+publicise
+publicised
+publicises
+publicising
+publicist
+publicists
+publicity
+publicly
+publics
+publish
+publishable
+published
+publisher
+publishers
+publishes
+publishing
+pubs
+pub's
+puce
+puck
+pucker
+puckered
+puckering
+puckers
+puckish
+puckishly
+pudding
+puddings
+pudding's
+puddingstone
+puddle
+puddles
+pudendum
+pudgier
+pudginess
+pueblo
+pueblos
+puerile
+puerperal
+puff
+puffball
+puffballs
+puffed
+puffer
+puffers
+puffery
+puffin
+puffiness
+puffing
+puffins
+puffs
+puffy
+pug
+pugilism
+pugilist
+pugilistic
+pugmark
+pugnacious
+pugnaciously
+pugnacity
+puissance
+puissant
+puke
+puked
+pukes
+puking
+pukka
+pulchritude
+pulchritudinous
+puling
+pull
+pullback
+pulled
+puller
+pullet
+pulley
+pulleys
+pulley's
+pulling
+pullout
+pullover
+pulls
+pullulate
+pulmonary
+pulp
+pulpiness
+pulping
+pulpit
+pulpits
+pulpit's
+pulpwood
+pulpy
+pulsar
+pulsars
+pulsar's
+pulsate
+pulsated
+pulsates
+pulsating
+pulsation
+pulsations
+pulse
+pulsed
+pulsejet
+pulses
+pulsing
+pulverisation
+pulverisations
+pulverisation's
+pulverise
+pulverised
+pulverises
+pulverising
+puma
+puma's
+pumice
+pumiced
+pumicing
+pummel
+pummelled
+pummelling
+pummels
+pump
+pumped
+pumpernickel
+pumping
+pumpkin
+pumpkins
+pumpkin's
+pumpkinseed
+pumpkinseeds
+pumps
+pun
+punch
+punchboard
+punchbowl
+punchbowls
+punched
+puncheon
+puncher
+punchers
+puncher's
+punches
+punchier
+punchinello
+punching
+punchy
+punctilio
+punctilious
+punctiliously
+punctiliousness
+punctual
+punctuality
+punctually
+punctuate
+punctuated
+punctuates
+punctuating
+punctuation
+punctuator
+puncture
+punctured
+punctures
+puncture's
+puncturing
+pundit
+punditry
+pundits
+pungency
+pungent
+pungently
+punier
+puniness
+punish
+punishable
+punished
+punisher
+punishes
+punishing
+punishment
+punishments
+punishment's
+punitive
+punitively
+punk
+punkah
+punks
+punning
+puns
+pun's
+punster
+punsters
+punt
+punted
+punter
+punters
+punting
+punts
+puny
+pup
+pupa
+pupae
+pupas
+pupate
+pupated
+pupates
+pupating
+pupation
+pupfish
+pupil
+pupils
+pupil's
+puppet
+puppeteer
+puppeteers
+puppetry
+puppets
+puppet's
+puppies
+puppy
+puppyish
+puppy's
+pups
+pup's
+purblind
+purchasable
+purchase
+purchased
+purchaser
+purchasers
+purchases
+purchasing
+purdah
+pure
+pureblood
+purebred
+puree
+pureed
+pureeing
+purees
+puree's
+purely
+pureness
+purer
+purest
+purgation
+purgative
+purgatorial
+purgatory
+purge
+purged
+purges
+purging
+purification
+purifications
+purified
+purifier
+purifiers
+purifies
+purify
+purifying
+purism
+purist
+purists
+puritan
+puritanical
+puritanically
+puritans
+purity
+purl
+purled
+purler
+purlieu
+purlin
+purling
+purloin
+purloined
+purloiner
+purloining
+purloins
+purple
+purpled
+purples
+purpling
+purplish
+purport
+purported
+purportedly
+purporting
+purports
+purpose
+purposed
+purposeful
+purposefully
+purposefulness
+purposeless
+purposelessly
+purposelessness
+purposely
+purposes
+purposing
+purposive
+purposively
+purr
+purred
+purring
+purrs
+purse
+pursed
+purser
+pursers
+purses
+pursier
+pursiness
+pursing
+pursuance
+pursuant
+pursue
+pursued
+pursuer
+pursuers
+pursues
+pursuing
+pursuit
+pursuits
+pursuit's
+pursuivant
+pursy
+purulence
+purulent
+purvey
+purveyance
+purveyed
+purveying
+purveyor
+purveyors
+purveys
+purview
+pus
+push
+pushball
+pushbutton
+pushbuttons
+pushcart
+pushchair
+pushchairs
+pushdown
+pushed
+pusher
+pushers
+pushes
+pushier
+pushily
+pushiness
+pushing
+pushover
+pushovers
+pushover's
+pushpin
+pushpins
+pushpin's
+pushrod
+pushrods
+pushy
+pusillanimity
+pusillanimous
+pusillanimously
+puss
+pussies
+pussy
+pussycat
+pussyfoot
+pussyfooter
+pussyfooting
+pustule
+pustules
+put
+putative
+putatively
+putdown
+putdowns
+putdown's
+putlog
+putout
+putrefaction
+putrefactive
+putrefy
+putrescence
+putrescent
+putrid
+putridity
+putridly
+puts
+putsch
+putt
+putted
+puttee
+puttees
+putter
+puttering
+putters
+puttied
+putties
+putting
+putty
+puttying
+puttyroot
+puzzle
+puzzled
+puzzlement
+puzzler
+puzzlers
+puzzles
+puzzling
+pygmies
+pygmy
+pygmy's
+pyjama
+pyjamas
+pyjama's
+pylon
+pylons
+pylori
+pyloric
+pylorus
+pyorrhoea
+pyorrhoea's
+pyramid
+pyramidal
+pyramids
+pyramid's
+pyre
+pyrethrum
+pyretic
+pyrexia
+pyridine
+pyridoxine
+pyrite
+pyrites
+pyromania
+pyromaniac
+pyromaniacs
+pyromaniac's
+pyrometer
+pyrometers
+pyrometer's
+pyrophosphate
+pyrotechnic
+pyrotechnical
+pyrotechnically
+pyrotechnics
+pyroxene
+Pyrrhic
+python
+pythons
+q's
+qua
+quack
+quacked
+quackery
+quacking
+quacks
+quad
+quadrangle
+quadrangles
+quadrangular
+quadrant
+quadrants
+quadrant's
+quadraphonic
+quadrate
+quadrates
+quadratic
+quadratics
+quadrennial
+quadric
+quadriceps
+quadrilateral
+quadrilaterals
+quadrille
+quadrilles
+quadrillion
+quadrillionth
+quadripartite
+quadriplegia
+quadriplegic
+quadroon
+quadroons
+quadruped
+quadrupeds
+quadruple
+quadrupled
+quadruples
+quadruplet
+quadruplets
+quadruplicate
+quadruplicated
+quadruplicates
+quadruplicating
+quadrupling
+quaff
+quagmire
+quagmires
+quagmire's
+quahog
+quail
+quails
+quail's
+quaint
+quaintly
+quaintness
+quake
+quaked
+Quaker
+quakes
+quaking
+quaky
+qualification
+qualifications
+qualified
+qualifiedly
+qualifier
+qualifiers
+qualifies
+qualify
+qualifying
+qualitative
+qualitatively
+qualities
+quality
+quality's
+qualm
+qualmishness
+qualms
+quandaries
+quandary
+quandary's
+quango
+quanta
+quantifiable
+quantifiably
+quantification
+quantificational
+quantifications
+quantified
+quantifier
+quantifiers
+quantifies
+quantify
+quantifying
+quantise
+quantitative
+quantitatively
+quantities
+quantity
+quantity's
+quantum
+quarantine
+quarantined
+quarantines
+quarantine's
+quarantining
+quark
+quarks
+quarrel
+quarrelled
+quarreller
+quarrellers
+quarrelling
+quarrels
+quarrelsome
+quarrelsomeness
+quarried
+quarries
+quarry
+quarrying
+quarryman
+quarrymen
+quarry's
+quart
+quarter
+quarterback
+quarterbacks
+quarterdeck
+quarterdecks
+quartered
+quarterfinal
+quarterfinalist
+quartering
+quarterlies
+quarterly
+quartermaster
+quartermasters
+quarters
+quarterstaff
+quartet
+quartets
+quartet's
+quartile
+quartiles
+quarto
+quartos
+quarts
+quartz
+quartzite
+quasar
+quasars
+quasar's
+quash
+quashed
+quashes
+quashing
+quasi
+quaternaries
+quaternary
+quaternion
+quatrain
+quatrefoil
+quaver
+quavered
+quavering
+quavers
+quay
+quays
+quayside
+quean
+queasier
+queasily
+queasiness
+queasy
+queen
+queenly
+queens
+queen's
+queer
+queerer
+queerest
+queerly
+queerness
+queers
+quell
+quelled
+quelling
+quells
+quench
+quenchable
+quenched
+quencher
+quenches
+quenching
+quenchless
+quenelle
+queried
+queries
+quern
+querns
+querulous
+querulously
+query
+querying
+quest
+quested
+questing
+question
+questionable
+questionably
+questioned
+questioner
+questioners
+questioning
+questioningly
+questionings
+questionnaire
+questionnaires
+questionnaire's
+questions
+quests
+quetzal
+queue
+queued
+queueing
+queues
+queue's
+quibble
+quibbled
+quibbler
+quibbles
+quibbling
+quiche
+quiches
+quick
+quicken
+quickened
+quickening
+quickens
+quicker
+quickest
+quickie
+quickies
+quicklime
+quickly
+quickness
+quicksand
+quickset
+quicksilver
+quickstep
+quicksteps
+quid
+quidnunc
+quid's
+quiescence
+quiescent
+quiescently
+quiet
+quieted
+quieten
+quietened
+quietening
+quietens
+quieter
+quietest
+quieting
+quietist
+quietly
+quietness
+quiets
+quietude
+quietus
+quiff
+quill
+quills
+quilt
+quilted
+quilting
+quilts
+quince
+quinces
+quincunx
+quincunxes
+quinine
+quinsy
+quintal
+quintessence
+quintessential
+quintet
+quintets
+quintile
+quintiles
+quintillion
+quintillionth
+quintuple
+quintupled
+quintuples
+quintuplet
+quintuplets
+quintuplet's
+quintupling
+quip
+quipped
+quipping
+quips
+quipster
+quire
+quirk
+quirkily
+quirkiness
+quirking
+quirks
+quirky
+quirt
+quisling
+quit
+quitclaim
+quite
+quitrent
+quits
+quittance
+quitted
+quitter
+quitters
+quitter's
+quitting
+quiver
+quivered
+quivering
+quivers
+quixotic
+quixotically
+quiz
+quizmaster
+quizzed
+quizzer
+quizzes
+quizzical
+quizzicality
+quizzically
+quizzing
+quo
+quoin
+quoit
+quoits
+quondam
+quorum
+quota
+quotable
+quotas
+quota's
+quotation
+quotations
+quotation's
+quote
+quoted
+quotes
+quotidian
+quotient
+quotients
+quoting
+r's
+rRNA
+rabbet
+rabbets
+rabbi
+rabbinate
+rabbinic
+rabbinical
+rabbit
+rabbit's
+rabbits
+rabble
+rabid
+rabidity
+rabidly
+rabies
+raccoon
+raccoon's
+raccoons
+race
+racecourse
+racecourses
+raced
+racehorse
+racehorse's
+racehorses
+raceme
+racer
+racers
+races
+racetrack
+raceway
+rachides
+rachis
+rachises
+rachitic
+racial
+racialism
+racialist
+racially
+racier
+raciness
+racing
+racism
+racist
+racists
+rack
+racked
+racket
+racket's
+racketeer
+racketeering
+racketeers
+rackets
+rackety
+racking
+racks
+raconteur
+racoon
+racquet
+racquets
+racy
+radar
+radar's
+radars
+radarscope
+radarscopes
+raddled
+radial
+radian
+radiance
+radians
+radiant
+radiantly
+radiate
+radiated
+radiates
+radiating
+radiation
+radiations
+radiator
+radiator's
+radiators
+radical
+radicalisation
+radicalisation's
+radicalisations
+radicalise
+radicalised
+radicalises
+radicalising
+radicalism
+radically
+radicals
+radicand
+radices
+radii
+radio
+radioactive
+radioactively
+radioactivity
+radiobiological
+radiobiologist
+radiobiology
+radiobroadcast
+radiobroadcaster
+radiocarbon
+radiochemical
+radiochemistry
+radioecology
+radioed
+radiogram
+radiogram's
+radiograms
+radiograph
+radiographic
+radiography
+radioing
+radioisotope
+radiolarian
+radiolocation
+radiological
+radiologist
+radiology
+radioman
+radiomen
+radiometer
+radiometer's
+radiometers
+radiometric
+radiometry
+radiophone
+radiophonic
+radiophoto
+radiophotograph
+radios
+radioscopic
+radioscopy
+radiosensitive
+radiosonde
+radiotelegraph
+radiotelegraphic
+radiotelegraphy
+radiotelephone
+radiotelephony
+radiotherapist
+radiotherapy
+radiothorium
+radiotoxic
+radiotracer
+radish
+radish's
+radishes
+radium
+radius
+radiuses
+radix
+radixes
+radome
+radon
+raff
+raffia
+raffish
+raffle
+raffled
+raffles
+raffling
+raft
+rafter
+raftered
+rafters
+rafts
+rag
+rag's
+raga
+ragamuffin
+ragbag
+rage
+raged
+rages
+ragged
+raggedly
+raggedness
+raggedy
+ragging
+raging
+raglan
+ragman
+ragout
+rags
+ragtag
+ragtime
+ragweed
+ragworm
+ragwort
+rah
+raid
+raided
+raider
+raiders
+raiding
+raids
+rail
+railbird
+railbirds
+railcar
+railcars
+railed
+railhead
+railheads
+railing
+railings
+raillery
+railroad
+railroaded
+railroader
+railroaders
+railroading
+railroads
+rails
+railway
+railway's
+railwayman
+railways
+raiment
+rain
+rain's
+rainband
+rainbird
+rainbow
+rainbows
+raincheck
+raincoat
+raincoat's
+raincoats
+raindrop
+raindrop's
+raindrops
+rained
+rainfall
+rainforest
+rainier
+rainiest
+raining
+rainless
+rainmaker
+rainmaking
+rainout
+rainproof
+rains
+rainspout
+rainsquall
+rainstorm
+rainwater
+rainwear
+rainy
+raise
+raised
+raiser
+raisers
+raises
+raisin
+raising
+raisins
+raison
+raja
+rajah
+rajahs
+rake
+raked
+rakehell
+rakes
+raking
+rakish
+rakishly
+rakishness
+rallied
+rallies
+rally
+rallying
+ram
+ram's
+ramble
+rambled
+rambler
+ramblers
+rambles
+rambling
+ramblingly
+ramblings
+rambunctious
+rambunctiously
+ramekin
+ramie
+ramification
+ramification's
+ramifications
+ramified
+ramifies
+ramify
+ramifying
+ramjet
+ramjets
+rammed
+rammer
+ramming
+ramose
+ramous
+ramp
+ramp's
+rampage
+rampaged
+rampageous
+rampages
+rampaging
+rampancy
+rampant
+rampantly
+rampart
+ramparts
+ramped
+ramping
+ramps
+ramrod
+ramrods
+rams
+ramshackle
+ran
+ranch
+ranched
+rancher
+ranchero
+ranchers
+ranches
+ranching
+ranchman
+rancho
+ranchos
+rancid
+rancidity
+rancidness
+rancorous
+rancorously
+rancour
+rancour's
+random
+randomisation
+randomisation's
+randomisations
+randomise
+randomised
+randomiser
+randomises
+randomising
+randomly
+randomness
+randy
+rang
+range
+ranged
+rangefinder
+rangeland
+rangelands
+ranger
+rangers
+ranges
+rangier
+ranging
+rangy
+rank
+ranked
+ranker
+ranker's
+rankers
+rankest
+ranking
+ranking's
+rankings
+rankle
+rankled
+rankles
+rankling
+rankly
+rankness
+ranks
+ransack
+ransacked
+ransacking
+ransacks
+ransom
+ransoming
+ransoms
+rant
+ranted
+ranting
+rants
+rap
+rap's
+rapacious
+rapaciously
+rapaciousness
+rapacity
+rape
+raped
+rapes
+rapeseed
+rapid
+rapidity
+rapidly
+rapids
+rapier
+rapine
+raping
+rapist
+rapists
+rapped
+rappel
+rapper
+rapper's
+rappers
+rapping
+rapport
+rapporteur
+rapprochement
+raps
+rapscallion
+rapt
+raptly
+raptness
+raptor
+raptorial
+rapture
+raptures
+rapturous
+rapturously
+rare
+rarebit
+rarefaction
+rarefied
+rarefy
+rarely
+rareness
+rarer
+rarest
+raring
+rarities
+rarity
+rarity's
+rascal
+rascality
+rascally
+rascals
+rash
+rasher
+rashes
+rashly
+rashness
+rasp
+raspberry
+rasped
+rasping
+rasps
+raspy
+raster
+rat
+rat's
+rata
+ratatouille
+ratchet
+ratcheted
+ratchets
+rate
+rateable
+rated
+ratepayer
+ratepayers
+rates
+ratfink
+ratfish
+rather
+ratification
+ratifications
+ratified
+ratifies
+ratify
+ratifying
+rating
+ratings
+ratio
+ratio's
+ratiocinate
+ratiocinated
+ratiocinates
+ratiocinating
+ratiocination
+ratiocinator
+ration
+rational
+rationale
+rationale's
+rationales
+rationalisation
+rationalisation's
+rationalisations
+rationalise
+rationalised
+rationalises
+rationalising
+rationalism
+rationalist
+rationalistic
+rationalistically
+rationalists
+rationalities
+rationality
+rationally
+rationed
+rationing
+rations
+ratios
+ratite
+ratline
+rats
+rattail
+rattan
+ratted
+ratter
+rattier
+ratting
+rattle
+rattlebox
+rattled
+rattler
+rattlers
+rattles
+rattlesnake
+rattlesnake's
+rattlesnakes
+rattletrap
+rattling
+rattrap
+ratty
+raucous
+raucously
+raucousness
+raunchier
+raunchily
+raunchiness
+raunchy
+ravage
+ravaged
+ravagers
+ravages
+ravaging
+rave
+raved
+ravel
+ravelled
+ravelling
+ravels
+raven
+ravened
+ravening
+ravenous
+ravenously
+ravenousness
+ravens
+raves
+ravine
+ravine's
+ravines
+raving
+ravings
+ravioli
+ravish
+ravisher
+ravishes
+ravishing
+ravishingly
+ravishment
+raw
+rawer
+rawest
+rawhide
+rawness
+ray
+ray's
+rayed
+rayon
+rays
+raze
+razed
+razes
+razing
+razor
+razor's
+razorback
+razorbill
+razors
+razz
+razzle
+razzmatazz
+rd
+re
+reabsorb
+reach
+reachable
+reached
+reaches
+reaching
+reacquaint
+reacquainted
+reacquire
+reacquisition
+react
+reactance
+reactant
+reactants
+reacted
+reacting
+reaction
+reaction's
+reactionaries
+reactionary
+reactionary's
+reactions
+reactivate
+reactivated
+reactivates
+reactivating
+reactivation
+reactive
+reactively
+reactivity
+reactor
+reactor's
+reactors
+reacts
+read
+readability
+readable
+readably
+readapting
+reader
+reader's
+readers
+readership
+readership's
+readied
+readier
+readies
+readiest
+readily
+readiness
+reading
+readings
+readjust
+readjusted
+readjusting
+readjustment
+readjustments
+readjusts
+readout
+readout's
+readouts
+reads
+ready
+readying
+reaffirm
+reaffirmation
+reaffirmed
+reaffirming
+reaffirms
+reagent
+reagents
+real
+realest
+realign
+realigned
+realigning
+realignment
+realignments
+realigns
+realisable
+realisably
+realisation
+realisation's
+realisations
+realise
+realised
+realises
+realising
+realism
+realist
+realist's
+realistic
+realistically
+realists
+realities
+reality
+realizable
+realizably
+realization
+realization's
+realizations
+realize
+realized
+realizes
+realizing
+reallocate
+reallocated
+reallocates
+reallocating
+reallocation
+reallocation's
+reallocations
+really
+realm
+realm's
+realms
+realness
+realpolitik
+realtor
+realtors
+realty
+ream
+ream's
+reamed
+reamer
+reaming
+reams
+reanalyse
+reanalysed
+reanalyses
+reanalysing
+reanalysis
+reap
+reaped
+reaper
+reaping
+reappear
+reappearance
+reappeared
+reappearing
+reappears
+reapplication
+reapplied
+reapplies
+reapply
+reapplying
+reapportion
+reapportioned
+reapportionment
+reappraisal
+reappraisals
+reappraise
+reappraised
+reappraises
+reappraising
+reaps
+rear
+reared
+rearguard
+rearguards
+rearing
+rearm
+rearmament
+rearmed
+rearming
+rearmost
+rearms
+rearrange
+rearranged
+rearrangement
+rearrangement's
+rearrangements
+rearranges
+rearranging
+rearrested
+rears
+rearward
+rearwards
+reason
+reasonability
+reasonable
+reasonableness
+reasonably
+reasoned
+reasoning
+reasonless
+reasons
+reassemble
+reassembled
+reassembles
+reassembling
+reassembly
+reassert
+reasserted
+reasserting
+reassertion
+reasserts
+reassess
+reassessed
+reassesses
+reassessing
+reassessment
+reassessment's
+reassessments
+reassign
+reassigned
+reassigning
+reassignment
+reassignment's
+reassignments
+reassigns
+reassurance
+reassurances
+reassure
+reassured
+reassures
+reassuring
+reassuringly
+reauthorisation
+reauthorisation's
+reave
+reaver
+reawaken
+reawakened
+reawakening
+reawakens
+rebate
+rebate's
+rebated
+rebates
+rebating
+rebel
+rebel's
+rebelled
+rebelling
+rebellion
+rebellion's
+rebellions
+rebellious
+rebelliously
+rebelliousness
+rebels
+rebirth
+rebirth's
+reboot
+rebooted
+rebooting
+reboots
+reborn
+rebound
+rebounded
+rebounding
+rebounds
+rebroadcast
+rebroadcasts
+rebuff
+rebuffed
+rebuffing
+rebuffs
+rebuild
+rebuilding
+rebuilds
+rebuilt
+rebuke
+rebuked
+rebukes
+rebuking
+rebus
+rebut
+rebuttal
+rebuttals
+rebutted
+rebutter
+rebutting
+recalcitrance
+recalcitrant
+recalculate
+recalculated
+recalculates
+recalculating
+recalculation
+recalculations
+recall
+recallable
+recalled
+recalling
+recalls
+recant
+recantation
+recanted
+recap
+recapitulate
+recapitulated
+recapitulates
+recapitulating
+recapitulation
+recapped
+recapping
+recapture
+recaptured
+recaptures
+recapturing
+recast
+recasting
+recasts
+recede
+receded
+recedes
+receding
+receipt
+receipt's
+receipted
+receipting
+receipts
+receivable
+receivables
+receive
+received
+receiver
+receiver's
+receivers
+receivership
+receives
+receiving
+recent
+recently
+recentness
+receptacle
+receptacle's
+receptacles
+reception
+reception's
+receptionist
+receptionists
+receptions
+receptive
+receptively
+receptiveness
+receptivity
+receptor
+receptor's
+receptors
+recess
+recessed
+recesses
+recessing
+recession
+recession's
+recessional
+recessions
+recessive
+recessively
+recharge
+rechargeable
+recharged
+recharges
+recharging
+recheck
+rechecked
+rechecking
+rechecks
+recherch�
+recidivism
+recidivist
+recidivistic
+recipe
+recipe's
+recipes
+recipient
+recipient's
+recipients
+reciprocal
+reciprocally
+reciprocals
+reciprocate
+reciprocated
+reciprocates
+reciprocating
+reciprocation
+reciprocator
+reciprocity
+recital
+recital's
+recitalist
+recitals
+recitation
+recitation's
+recitations
+recitative
+recite
+recited
+recites
+reciting
+reckless
+recklessly
+recklessness
+reckon
+reckoned
+reckoning
+reckonings
+reckons
+reclaim
+reclaimable
+reclaimed
+reclaiming
+reclaims
+reclamation
+reclamations
+reclassification
+reclassified
+reclassifies
+reclassify
+reclassifying
+recline
+reclined
+reclines
+reclining
+recluse
+recluse's
+recluses
+reclusion
+reclusive
+recode
+recoded
+recodes
+recoding
+recognisable
+recognisably
+recognisance
+recognise
+recognised
+recogniser
+recognisers
+recognises
+recognising
+recognition
+recognition's
+recognitions
+recoil
+recoiled
+recoiling
+recoilless
+recoils
+recollect
+recollected
+recollecting
+recollection
+recollection's
+recollections
+recollects
+recombinant
+recombination
+recombination's
+recombine
+recombined
+recombines
+recombining
+recommence
+recommenced
+recommences
+recommencing
+recommend
+recommendable
+recommendation
+recommendation's
+recommendations
+recommendatory
+recommended
+recommending
+recommends
+recommit
+recommitment
+recompense
+recompilation
+recompilations
+recompile
+recompiled
+recompiles
+recompiling
+recompose
+recomputed
+reconcilability
+reconcilable
+reconcile
+reconciled
+reconcilement
+reconciler
+reconciles
+reconciliation
+reconciliation's
+reconciliatory
+reconciling
+recondite
+recondition
+reconditioned
+reconditioning
+reconditions
+reconfiguration
+reconfiguration's
+reconfigurations
+reconfigure
+reconfigured
+reconfigures
+reconfiguring
+reconfirm
+reconfirmation
+reconnaissance
+reconnect
+reconnected
+reconnecting
+reconnection
+reconnects
+reconnoitre
+reconnoitred
+reconnoitres
+reconnoitring
+reconsider
+reconsideration
+reconsidered
+reconsidering
+reconsiders
+reconsolidate
+reconsolidated
+reconsolidates
+reconsolidating
+reconstitute
+reconstituted
+reconstitutes
+reconstitution
+reconstruct
+reconstructed
+reconstructing
+reconstruction
+reconstructions
+reconstructive
+reconstructs
+recontamination
+reconvene
+reconvened
+reconvenes
+reconvening
+reconvention
+reconvert
+reconverted
+reconverting
+reconverts
+recopied
+recopies
+recopy
+record
+recordation
+recorded
+recorder
+recorders
+recording
+recordings
+records
+recount
+recounted
+recounting
+recounts
+recoup
+recoupable
+recouped
+recouping
+recoups
+recourse
+recourses
+recover
+recoverability
+recoverable
+recovered
+recoveries
+recovering
+recovers
+recovery
+recovery's
+recreant
+recreate
+recreated
+recreates
+recreating
+recreation
+recreational
+recreations
+recriminate
+recriminated
+recriminates
+recriminating
+recrimination
+recriminations
+recriminatory
+recrudesce
+recrudescence
+recrudescent
+recruit
+recruit's
+recruited
+recruiter
+recruiter's
+recruiters
+recruiting
+recruitment
+recruits
+recta
+rectal
+rectally
+rectangle
+rectangle's
+rectangles
+rectangular
+rectangularity
+rectifiable
+rectification
+rectifications
+rectified
+rectifier
+rectifiers
+rectify
+rectilinear
+rectilinearly
+rectitude
+recto
+rector
+rector's
+rectors
+rectory
+rectos
+rectum
+rectum's
+rectums
+recumbent
+recumbently
+recuperate
+recuperated
+recuperates
+recuperating
+recuperation
+recuperative
+recur
+recurred
+recurrence
+recurrence's
+recurrences
+recurrent
+recurrently
+recurring
+recurs
+recursion
+recursion's
+recursions
+recursive
+recursively
+recusant
+recyclable
+recycle
+recycled
+recycles
+recycling
+red
+redact
+redaction
+redactions
+redactor
+redbird
+redbirds
+redbone
+redbreast
+redbrick
+redbud
+redbug
+redcap
+redcoat
+redcoats
+redcurrant
+redden
+reddened
+reddening
+redder
+reddest
+reddish
+reddishness
+redecorate
+redecorated
+redecorates
+redecorating
+redecoration
+redecorator
+rededicate
+redeem
+redeemable
+redeemed
+redeemer
+redeemers
+redeeming
+redeems
+redefine
+redefined
+redefines
+redefining
+redefinition
+redefinition's
+redefinitions
+redemption
+redemptive
+redemptory
+redeploy
+redeployed
+redeployment
+redeploys
+redeposit
+redesign
+redesigned
+redesigning
+redesigns
+redevelop
+redeveloped
+redeveloper
+redevelopers
+redeveloping
+redevelopment
+redevelops
+redeye
+redhead
+redheaded
+redheads
+redial
+redialled
+redialling
+redials
+redingote
+redirect
+redirected
+redirecting
+redirection
+redirections
+redirector
+redirector's
+redirectors
+redirects
+rediscount
+rediscover
+rediscovered
+rediscovering
+rediscovers
+rediscovery
+redisplay
+redisplayed
+redisplaying
+redisplays
+redistribute
+redistributed
+redistributes
+redistributing
+redistribution
+redistribution's
+redistributions
+redistrict
+redistricting
+redneck
+rednecks
+redness
+redo
+redoing
+redolence
+redolent
+redolently
+redone
+redouble
+redoubled
+redoubles
+redoubling
+redoubt
+redoubtable
+redoubtably
+redound
+redpoll
+redraw
+redrawing
+redrawn
+redraws
+redress
+redressed
+redresser
+redresses
+redressing
+redroot
+reds
+redshank
+redstart
+redtop
+reduce
+reduced
+reducer
+reducers
+reduces
+reducibility
+reducible
+reducibly
+reducing
+reduction
+reduction's
+reductionism
+reductions
+reductive
+redundancies
+redundancy
+redundant
+redundantly
+reduplicate
+reduplicated
+reduplication
+reduplicative
+redwing
+redwood
+redwoods
+reed
+reed's
+reedbuck
+reedier
+reeds
+reedy
+reef
+reefer
+reefing
+reefs
+reek
+reeked
+reeking
+reeks
+reel
+reeled
+reeling
+reels
+re-emphasise
+
+reemploy
+reemployment
+re-enact
+re-enactment
+re-enter
+re-entered
+re-entering
+re-enters
+re-entrance
+re-entrant
+re-entry
+re-establish
+re-established
+re-establishes
+re-establishing
+reestablishment
+re-evaluate
+re-evaluated
+re-evaluates
+re-evaluating
+re-evaluation
+reeve
+reeves
+re-examination
+re-examine
+re-examined
+re-examines
+re-examining
+ref
+reface
+refaced
+refashion
+refection
+refectories
+refectory
+refer
+referable
+referee
+referee's
+refereed
+refereeing
+referees
+reference
+referenced
+references
+referencing
+referenda
+referendum
+referent
+referent's
+referential
+referentially
+referents
+referral
+referral's
+referrals
+referred
+referrer
+referring
+refers
+refill
+refillable
+refilled
+refilling
+refills
+refinance
+refine
+refined
+refinement
+refinement's
+refinements
+refiner
+refineries
+refinery
+refines
+refining
+refinish
+refinished
+refinisher
+refinishes
+refinishing
+refit
+reflate
+reflation
+reflationary
+reflect
+reflectance
+reflected
+reflecting
+reflection
+reflection's
+reflections
+reflective
+reflectively
+reflectivity
+reflector
+reflector's
+reflectors
+reflects
+reflex
+reflex's
+reflexes
+reflexive
+reflexively
+reflexivity
+reflexology
+reflux
+refluxed
+refluxes
+refluxing
+refocus
+refocused
+refocuses
+refocusing
+refolded
+reforest
+reforestation
+reform
+reformat
+reformation
+reformative
+reformatories
+reformatory
+reformats
+reformatted
+reformatting
+reformed
+reformer
+reformers
+reforming
+reformism
+reformist
+reformists
+reforms
+reformulate
+reformulated
+reformulates
+reformulating
+reformulation
+refract
+refracted
+refracting
+refraction
+refractive
+refractivity
+refractor
+refractoriness
+refractory
+refrain
+refrained
+refraining
+refrains
+refresh
+refreshed
+refresher
+refreshers
+refreshes
+refreshing
+refreshingly
+refreshment
+refreshment's
+refreshments
+refried
+refries
+refrigerant
+refrigerate
+refrigerated
+refrigeration
+refrigerator
+refrigerator's
+refrigerators
+refry
+refrying
+refuel
+refuelled
+refuelling
+refuels
+refuge
+refugee
+refugee's
+refugees
+refuges
+refulgence
+refulgent
+refund
+refund's
+refundable
+refunded
+refunding
+refunds
+refurbish
+refurbished
+refurbishing
+refurbishment
+refusal
+refusals
+refuse
+refused
+refuses
+refusing
+refutable
+refutably
+refutation
+refute
+refuted
+refuter
+refutes
+refuting
+regain
+regained
+regaining
+regains
+regal
+regale
+regaled
+regalia
+regaling
+regally
+regard
+regarded
+regardful
+regarding
+regardless
+regards
+regatta
+regattas
+regency
+regenerate
+regenerated
+regenerates
+regenerating
+regeneration
+regenerative
+regenerator
+regenerators
+regent
+regent's
+regents
+reggae
+regicidal
+regicide
+regime
+regime's
+regimen
+regiment
+regimental
+regimentally
+regimentals
+regimentation
+regimented
+regiments
+regimes
+region
+region's
+regional
+regionalism
+regionalist
+regionally
+regions
+register
+registered
+registering
+registers
+registrant
+registrants
+registrar
+registrars
+registration
+registration's
+registrations
+registries
+registry
+regna
+regnant
+regnum
+regress
+regressed
+regresses
+regressing
+regression
+regression's
+regressions
+regressive
+regressively
+regret
+regretful
+regretfully
+regrets
+regrettable
+regrettably
+regretted
+regretting
+reground
+regroup
+regrouped
+regrouping
+regular
+regularisation
+regularisation's
+regularisations
+regularise
+regularised
+regularises
+regularising
+regularities
+regularity
+regularly
+regulars
+regulate
+regulated
+regulates
+regulating
+regulation
+regulations
+regulative
+regulator
+regulator's
+regulators
+regulatory
+regurgitate
+regurgitated
+regurgitates
+regurgitating
+regurgitation
+rehabilitant
+rehabilitate
+rehabilitated
+rehabilitates
+rehabilitating
+rehabilitation
+rehabilitations
+rehabilitative
+rehash
+rehashed
+rehashes
+rehashing
+rehear
+rehearing
+rehearsal
+rehearsal's
+rehearsals
+rehearse
+rehearsed
+rehearses
+rehearsing
+reification
+reified
+reify
+reifying
+reign
+reigned
+reigning
+reigns
+reimbursable
+reimburse
+reimbursed
+reimbursement
+reimbursement's
+reimbursements
+reimburses
+reimbursing
+rein
+reincarnate
+reincarnated
+reincarnation
+reincorporating
+reindeer
+reined
+reinforce
+reinforced
+reinforcement
+reinforcement's
+reinforcements
+reinforces
+reinforcing
+reining
+reinitialise
+reinitialised
+reinitialises
+reinitialising
+reins
+reinsert
+reinserted
+reinserting
+reinsertion
+reinsertions
+reinserts
+reinstall
+reinstalled
+reinstalling
+reinstalls
+reinstate
+reinstated
+reinstatement
+reinstates
+reinstating
+reinstitution
+reinsurance
+reinsure
+reintegrate
+reintegrated
+reintegration
+reinterpret
+reinterpretation
+reinterpretations
+reinterpreted
+reinterpreting
+reinterprets
+reintroduce
+reintroduced
+reintroduces
+reintroducing
+reintroduction
+reinvent
+reinvented
+reinventing
+reinvention
+reinvents
+reinvest
+reinvested
+reinvestigation
+reinvestment
+reinvigorate
+reinvigoration
+reissue
+reissued
+reissues
+reissuing
+reiterate
+reiterated
+reiterates
+reiterating
+reiteration
+reiterations
+reiterative
+reiteratively
+reive
+reiver
+reiving
+reject
+rejected
+rejecter
+rejecting
+rejection
+rejection's
+rejections
+rejects
+rejig
+rejoice
+rejoiced
+rejoices
+rejoicing
+rejoin
+rejoinder
+rejoined
+rejoining
+rejoins
+rejuvenate
+rejuvenated
+rejuvenates
+rejuvenating
+rejuvenation
+rejuvenator
+rekindle
+rekindled
+rekindles
+rekindling
+relabelled
+relapse
+relapsed
+relapses
+relapsing
+relatable
+relate
+related
+relatedness
+relater
+relates
+relating
+relation
+relational
+relationally
+relations
+relationship
+relationship's
+relationships
+relative
+relatively
+relatives
+relativism
+relativist
+relativistic
+relativity
+relativity's
+relax
+relaxant
+relaxation
+relaxation's
+relaxations
+relaxed
+relaxedness
+relaxes
+relaxing
+relay
+relayed
+relaying
+relays
+relearn
+relearns
+releasable
+release
+released
+releaser
+releases
+releasing
+relegate
+relegated
+relegates
+relegating
+relegation
+relent
+relented
+relenting
+relentless
+relentlessly
+relentlessness
+relents
+relevance
+relevancy
+relevant
+relevantly
+reliabilities
+reliability
+reliable
+reliably
+reliance
+reliant
+reliantly
+relic
+relic's
+relics
+relict
+relied
+relief
+relies
+relievable
+relieve
+relieved
+reliever
+relievers
+relieves
+relieving
+religion
+religion's
+religionist
+religionists
+religions
+religiosity
+religious
+religiously
+religiousness
+reline
+relinquish
+relinquished
+relinquishes
+relinquishing
+relinquishment
+reliquary
+relish
+relished
+relishes
+relishing
+relive
+relives
+reliving
+reload
+reloaded
+reloading
+reloads
+relocate
+relocated
+relocates
+relocating
+relocation
+relocations
+reluctance
+reluctances
+reluctant
+reluctantly
+rely
+relying
+remade
+remain
+remainder
+remainder's
+remaindered
+remaindering
+remainders
+remained
+remaining
+remains
+remake
+remaking
+remand
+remanded
+remanding
+remanence
+remanufacture
+remark
+remarkable
+remarkableness
+remarkably
+remarked
+remarking
+remarks
+remarriage
+remarriages
+remarried
+remarry
+remarrying
+rematch
+remediable
+remediably
+remedial
+remedially
+remediation
+remedied
+remedies
+remediless
+remedy
+remedying
+remember
+remembered
+remembering
+remembers
+remembrance
+remembrance's
+remembrances
+remilitarisation
+remilitarise
+remind
+reminded
+reminder
+reminders
+remindful
+reminding
+reminds
+reminisce
+reminisced
+reminiscence
+reminiscence's
+reminiscences
+reminiscent
+reminiscently
+reminisces
+reminiscing
+remise
+remised
+remising
+remiss
+remissible
+remissibly
+remission
+remissions
+remissness
+remit
+remits
+remittal
+remittance
+remittances
+remitted
+remittent
+remitter
+remitting
+remix
+remixed
+remixes
+remixing
+remnant
+remnant's
+remnants
+remobilisation
+remobilise
+remobilises
+remodel
+remodelled
+remodelling
+remodels
+remonstrance
+remonstrant
+remonstrate
+remonstrated
+remonstrates
+remonstrating
+remonstration
+remonstrative
+remonstratively
+remonstrator
+remora
+remorse
+remorseful
+remorsefully
+remorsefulness
+remorseless
+remorselessly
+remorselessness
+remote
+remotely
+remoteness
+remotest
+remould
+remoulded
+remoulding
+remoulds
+remount
+remounting
+removable
+removal
+removal's
+removals
+remove
+removed
+remover
+removes
+removing
+remunerate
+remunerated
+remunerates
+remunerating
+remuneration
+remunerations
+remunerative
+remuneratively
+remunerator
+renaissance
+renal
+rename
+renamed
+renames
+renaming
+renascence
+renascent
+renationalise
+renationalised
+renationalises
+renationalising
+rend
+render
+rendered
+rendering
+renderings
+renders
+rendezvous
+rendezvoused
+rendezvousing
+rending
+rendition
+rendition's
+renditions
+rends
+renegade
+renegades
+renege
+reneged
+reneges
+reneging
+renegotiable
+renegotiate
+renegotiated
+renegotiates
+renegotiation
+renew
+renewable
+renewably
+renewal
+renewals
+renewed
+renewing
+renews
+renitent
+rennet
+rennin
+renounce
+renounced
+renouncement
+renounces
+renouncing
+renovate
+renovated
+renovates
+renovation
+renovator
+renown
+renowned
+rent
+rental
+rental's
+rentals
+rented
+renter
+renter's
+renters
+renting
+rents
+renumber
+renumbered
+renumbering
+renumbers
+renunciation
+renunciations
+reoccupy
+reoccur
+reoccurrence
+reopen
+reopened
+reopening
+reopens
+reorder
+reordered
+reordering
+reorders
+reorganization
+reorganization's
+reorganizations
+reorganize
+reorganized
+reorganizer
+reorganizers
+reorganizes
+reorganizing
+reorient
+reorientation
+reoriented
+rep
+repack
+repackage
+repackaged
+repackages
+repackaging
+repacked
+repacking
+repacks
+repaid
+repaint
+repainted
+repainting
+repaints
+repair
+repairable
+repaired
+repairer
+repairers
+repairing
+repairman
+repairmen
+repairs
+reparable
+reparation
+reparation's
+reparations
+reparative
+repartee
+repartition
+repartitioned
+repartitioning
+repartitions
+repast
+repast's
+repasts
+repatriate
+repatriated
+repatriates
+repatriating
+repatriation
+repatriations
+repaving
+repay
+repayable
+repaying
+repayment
+repayments
+repays
+repeal
+repealed
+repealing
+repeals
+repeat
+repeatability
+repeatable
+repeated
+repeatedly
+repeater
+repeaters
+repeating
+repeats
+repel
+repelled
+repellent
+repellently
+repelling
+repels
+repent
+repentance
+repentant
+repentantly
+repented
+repenting
+repents
+repercussion
+repercussion's
+repercussions
+repercussive
+repertoire
+repertory
+repetition
+repetition's
+repetitions
+repetitious
+repetitiously
+repetitiousness
+repetitive
+repetitively
+repetitiveness
+rephrase
+rephrased
+rephrases
+rephrasing
+repine
+repined
+repining
+replace
+replaceable
+replaced
+replacement
+replacement's
+replacements
+replaces
+replacing
+replant
+replanted
+replay
+replayed
+replaying
+replays
+replenish
+replenished
+replenishes
+replenishing
+replenishment
+replenishments
+replete
+repletion
+replica
+replica's
+replicable
+replicas
+replicate
+replicated
+replicates
+replicating
+replication
+replications
+replied
+replier
+replies
+reply
+replying
+report
+reportable
+reportage
+reported
+reportedly
+reporter
+reporters
+reporting
+reportorial
+reports
+repose
+reposed
+reposeful
+reposefulness
+reposes
+reposing
+reposition
+repositioned
+repositioning
+repositions
+repositories
+repository
+repository's
+repossess
+repossession
+repost
+reposted
+reposting
+reposts
+reprehend
+reprehensibility
+reprehensible
+reprehensibly
+reprehension
+reprehensive
+represent
+representation
+representation's
+representational
+representations
+representative
+representatively
+representatives
+represented
+representing
+represents
+repress
+repressed
+represses
+repressible
+repressing
+repression
+repression's
+repressions
+repressive
+repressively
+repressor
+reprieve
+reprieved
+reprieves
+reprieving
+reprimand
+reprimanded
+reprint
+reprinted
+reprinting
+reprints
+reprisal
+reprisal's
+reprisals
+reprise
+reprised
+reprising
+repro
+reproach
+reproachable
+reproached
+reproaches
+reproachful
+reproachfully
+reproaching
+reprobate
+reprobates
+reprobating
+reprobation
+reprocess
+reprocessed
+reprocesses
+reproduce
+reproduced
+reproducer
+reproducers
+reproduces
+reproducibility
+reproducible
+reproducibly
+reproducing
+reproduction
+reproduction's
+reproductions
+reproductive
+reproductively
+reprogrammed
+reprogramming
+reprography
+reproof
+reprove
+reproved
+reproving
+reprovingly
+reps
+reptile
+reptile's
+reptiles
+reptilian
+republic
+republic's
+republican
+republican's
+republicanism
+republicans
+republication
+republics
+republish
+republished
+republishes
+republishing
+repudiate
+repudiated
+repudiates
+repudiating
+repudiation
+repudiations
+repudiator
+repugnance
+repugnancy
+repugnant
+repugnantly
+repulse
+repulsed
+repulses
+repulsing
+repulsion
+repulsions
+repulsive
+repulsively
+repulsiveness
+reputability
+reputable
+reputably
+reputation
+reputation's
+reputations
+repute
+reputed
+reputedly
+reputes
+reputing
+request
+requested
+requester
+requesters
+requesting
+requestor
+requests
+requiem
+requiem's
+requiems
+require
+required
+requirement
+requirement's
+requirements
+requires
+requiring
+requisite
+requisites
+requisition
+requisitioned
+requisitioning
+requisitions
+requital
+requite
+requited
+requiting
+reradiate
+reran
+reread
+rereading
+rereads
+reroute
+rerouted
+reroutes
+rerun
+rerunning
+reruns
+resalable
+resale
+resample
+rescale
+rescaled
+rescaling
+rescan
+rescanned
+rescanning
+rescans
+reschedule
+rescheduled
+reschedules
+rescheduling
+rescind
+rescinded
+rescission
+rescue
+rescued
+rescuer
+rescuers
+rescues
+rescuing
+resealed
+research
+researchable
+researched
+researcher
+researcher's
+researchers
+researches
+researching
+reseat
+reseau
+resection
+reseed
+reselect
+reselected
+reselecting
+reselection
+reselects
+resell
+reseller
+resellers
+reselling
+resells
+resemblance
+resemblance's
+resemblances
+resemble
+resembled
+resembles
+resembling
+resend
+resending
+resends
+resent
+resented
+resentful
+resentfully
+resentfulness
+resenting
+resentment
+resents
+reservation
+reservation's
+reservations
+reserve
+reserved
+reservedly
+reserves
+reserving
+reservist
+reservists
+reservoir
+reservoir's
+reservoirs
+reset
+resets
+resetting
+resettle
+resettled
+resettlement
+resettles
+resettling
+reshape
+reshaped
+reshapes
+reshaping
+reship
+reshipment
+reshuffle
+reside
+resided
+residence
+residence's
+residences
+residency
+resident
+resident's
+residential
+residentially
+residents
+resides
+residing
+residua
+residual
+residually
+residuals
+residuary
+residue
+residue's
+residues
+residuum
+resifted
+resign
+resignation
+resignation's
+resignations
+resigned
+resignedly
+resigning
+resigns
+resilience
+resiliency
+resilient
+resiliently
+resin
+resin's
+resinous
+resins
+resist
+resistance
+resistances
+resistant
+resisted
+resister
+resistibility
+resistible
+resistibly
+resisting
+resistive
+resistively
+resistivity
+resistless
+resistor
+resistor's
+resistors
+resists
+resize
+resized
+resizes
+resizing
+resold
+resole
+resoluble
+resolute
+resolutely
+resoluteness
+resolution
+resolutions
+resolvable
+resolve
+resolved
+resolves
+resolving
+resonance
+resonant
+resonantly
+resonate
+resonated
+resonates
+resonating
+resonator
+resonators
+resorcinol
+resort
+resorted
+resorting
+resorts
+resound
+resounding
+resoundingly
+resounds
+resource
+resource's
+resourced
+resourceful
+resourcefully
+resourcefulness
+resources
+respect
+respectability
+respectable
+respectably
+respected
+respecter
+respectful
+respectfully
+respectfulness
+respecting
+respective
+respectively
+respects
+respell
+respiration
+respirations
+respirator
+respirators
+respiratory
+respire
+respired
+respires
+respiring
+respite
+resplendence
+resplendent
+resplendently
+respond
+responded
+respondent
+respondent's
+respondents
+responder
+responders
+responding
+responds
+response
+responses
+responsibilities
+responsibility
+responsible
+responsibly
+responsive
+responsively
+responsiveness
+rest
+restage
+restart
+restarted
+restarting
+restarts
+restate
+restated
+restatement
+restates
+restating
+restaurant
+restaurant's
+restaurants
+restaurateur
+rested
+restful
+restfully
+restfulness
+resting
+restitution
+restive
+restively
+restiveness
+restless
+restlessly
+restlessness
+restock
+restorability
+restorable
+restoration
+restoration's
+restorations
+restorative
+restoratively
+restore
+restored
+restorer
+restorers
+restores
+restoring
+restrain
+restrained
+restrainedly
+restrainers
+restraining
+restrains
+restraint
+restraint's
+restraints
+restrict
+restricted
+restrictedly
+restricting
+restriction
+restriction's
+restrictions
+restrictive
+restrictively
+restricts
+restroom
+restroom's
+restrooms
+restructure
+restructured
+restructures
+restructuring
+rests
+restudy
+resubmission
+resubmit
+resubmits
+resubmitted
+resubmitting
+result
+resultant
+resultantly
+resultants
+resulted
+resulting
+results
+resume
+resumed
+resumes
+resuming
+resumption
+resumption's
+resumptions
+resurface
+resurfaced
+resurfaces
+resurfacing
+resurge
+resurged
+resurgence
+resurgent
+resurges
+resurging
+resurrect
+resurrected
+resurrecting
+resurrection
+resurrection's
+resurrections
+resurrects
+resuscitate
+resuscitated
+resuscitates
+resuscitating
+resuscitation
+resuscitative
+resuscitator
+resuscitators
+resynchronisation
+resynchronisations
+resynchronise
+resynchronised
+resynchronises
+ret
+retail
+retailed
+retailer
+retailers
+retailing
+retails
+retain
+retained
+retainer
+retainers
+retaining
+retains
+retake
+retaliate
+retaliated
+retaliates
+retaliating
+retaliation
+retaliatory
+retard
+retardant
+retardation
+retarded
+retarding
+retch
+retching
+retell
+retelling
+retention
+retentions
+retentive
+retentively
+retentiveness
+retest
+rethink
+rethinking
+rethinks
+rethought
+rethreading
+reticence
+reticent
+reticently
+reticular
+reticulate
+reticulated
+reticulates
+reticulating
+reticulation
+reticule
+retied
+retina
+retina's
+retinae
+retinal
+retinas
+retinopathy
+retinue
+retinues
+retire
+retired
+retiree
+retirement
+retirement's
+retirements
+retires
+retiring
+retiringly
+retold
+retool
+retort
+retorted
+retorting
+retorts
+retouch
+retouching
+retrace
+retraced
+retraces
+retracing
+retract
+retractable
+retracted
+retractile
+retracting
+retraction
+retractions
+retractor
+retractor's
+retractors
+retracts
+retrain
+retrained
+retraining
+retrains
+retranslated
+retransmission
+retransmission's
+retransmissions
+retransmit
+retransmits
+retransmitted
+retransmitting
+retread
+retreat
+retreated
+retreating
+retreats
+retrench
+retrenching
+retrenchment
+retrial
+retribution
+retributive
+retributively
+retried
+retries
+retrievable
+retrieval
+retrieval's
+retrievals
+retrieve
+retrieved
+retriever
+retrievers
+retrieves
+retrieving
+retro
+retroact
+retroaction
+retroactive
+retroactively
+retroactivity
+retrocede
+retrocession
+retrofire
+retrofit
+retrofitted
+retrofitting
+retroflex
+retroflexed
+retrograde
+retrograding
+retrogress
+retrogression
+retrogressive
+retrogressively
+retrorocket
+retrospect
+retrospection
+retrospective
+retrospectively
+retry
+retrying
+retted
+retting
+return
+returnable
+returned
+returnee
+returnee's
+returnees
+returning
+returns
+retype
+retyped
+retypes
+retyping
+reunification
+reunify
+reunion
+reunion's
+reunions
+reunite
+reunited
+reuniting
+reupholstering
+reusable
+reuse
+reused
+reuses
+reusing
+reutilise
+reutilises
+rev
+revalidate
+revalidated
+revalidates
+revalidating
+revalidation
+revalorisation
+revalorisation's
+revalorisations
+revalorise
+revalorised
+revalorises
+revalorising
+revaluate
+revaluation
+revalue
+revamp
+revamped
+revamping
+revamps
+reveal
+revealed
+revealing
+reveals
+reveille
+reveilles
+revel
+revelation
+revelation's
+revelations
+revelatory
+revelled
+reveller
+revellers
+revelling
+revelry
+revels
+revenant
+revenge
+revenge's
+revenged
+revengeful
+revengefully
+revengefulness
+revenges
+revenging
+revenue
+revenuer
+revenuers
+revenues
+reverb
+reverberant
+reverberate
+reverberated
+reverberation
+reverberations
+revere
+revered
+reverence
+reverend
+reverend's
+reverends
+reverent
+reverential
+reverentially
+reverently
+reveres
+reverie
+reveries
+revering
+reversal
+reversal's
+reversals
+reverse
+reversed
+reverses
+reversibility
+reversible
+reversibly
+reversing
+reversion
+reversionary
+reversions
+revert
+reverted
+revertible
+reverting
+reverts
+revet
+revetment
+revetments
+review
+reviewed
+reviewer
+reviewers
+reviewing
+reviews
+revile
+reviled
+revilement
+reviling
+revisable
+revise
+revised
+reviser
+revises
+revising
+revision
+revision's
+revisionary
+revisionism
+revisionist
+revisionists
+revisions
+revisit
+revisited
+revisiting
+revisits
+revitalisation
+revitalisation's
+revitalise
+revitalised
+revitalises
+revitalising
+revivable
+revival
+revival's
+revivalism
+revivalist
+revivalists
+revivals
+revive
+revived
+reviver
+revives
+revivification
+revivified
+revivify
+reviving
+revocable
+revocation
+revocations
+revoke
+revoked
+revokes
+revoking
+revolt
+revolted
+revolting
+revoltingly
+revolts
+revolute
+revolution
+revolution's
+revolutionaries
+revolutionarily
+revolutionary
+revolutionary's
+revolutionise
+revolutionised
+revolutionises
+revolutionising
+revolutionist
+revolutionists
+revolutions
+revolve
+revolved
+revolver
+revolvers
+revolves
+revolving
+revs
+revue
+revues
+revulsion
+revved
+revving
+reward
+rewarded
+rewarding
+rewardingly
+rewards
+rewind
+rewinding
+rewinds
+rewire
+rewired
+rewires
+rewiring
+reword
+reworded
+rewording
+rewording's
+rewordings
+rewords
+rework
+reworked
+reworking
+reworks
+rewound
+rewrite
+rewriter
+rewrites
+rewriting
+rewritings
+rewritten
+rewrote
+rezone
+rhapsodic
+rhapsodically
+rhapsodise
+rhapsodised
+rhapsodises
+rhapsodising
+rhapsodist
+rhapsody
+rhenium
+rheostat
+rheostats
+rhesus
+rhetoric
+rhetorical
+rhetorically
+rhetorician
+rhetoricians
+rheum
+rheumatic
+rheumatics
+rheumatism
+rheumatoid
+rheumatologist
+rheumatology
+rheumy
+rhinestone
+rhinestones
+rhinitis
+rhino
+rhinoceros
+rhinos
+rhinovirus
+rhizoid
+rhizome
+rhodium
+rhododendron
+rhododendrons
+rhomb
+rhombi
+rhombic
+rhomboid
+rhomboidal
+rhombus
+rhombuses
+rhubarb
+rhumb
+rhyme
+rhymed
+rhymes
+rhymester
+rhyming
+rhythm
+rhythm's
+rhythmic
+rhythmical
+rhythmically
+rial
+rialto
+rib
+rib's
+ribald
+ribaldry
+riband
+ribband
+ribbed
+ribbing
+ribbon
+ribbon's
+ribbonfish
+ribbons
+ribgrass
+riboflavin
+ribonucleic
+ribose
+ribosomal
+ribosome
+ribs
+rice
+ricebird
+ricer
+rich
+richer
+riches
+richest
+richly
+richness
+ricin
+rickets
+rickety
+rickrack
+rickshaw
+rickshaw's
+rickshaws
+ricochet
+ricocheted
+ricocheting
+ricochets
+ricotta
+rictus
+rid
+riddance
+ridded
+ridden
+ridding
+riddle
+riddled
+riddles
+riddling
+ride
+rider
+rider's
+riders
+rides
+ridge
+ridge's
+ridged
+ridgepole
+ridges
+ridgeway
+ridging
+ridicule
+ridiculed
+ridiculer
+ridicules
+ridiculing
+ridiculous
+ridiculously
+ridiculousness
+riding
+ridings
+rids
+rife
+riff
+riffle
+riffled
+riffles
+riffling
+riffraff
+rifle
+riflebird
+rifled
+rifleman
+riflemen
+rifles
+riflescope
+rifling
+rift
+rifts
+rig
+rig's
+rigatoni
+rigged
+rigger
+riggers
+rigging
+right
+righted
+righteous
+righteously
+righteousness
+righter
+rightful
+rightfully
+rightfulness
+righting
+rightist
+rightly
+rightmost
+rightness
+rights
+rightward
+rightwards
+rigid
+rigidify
+rigidities
+rigidity
+rigidly
+rigmarole
+rigmaroles
+rigorist
+rigorists
+rigorous
+rigorously
+rigorousness
+rigour
+rigour's
+rigours
+rigs
+rile
+riling
+rill
+rim
+rim's
+rime
+riming
+rimless
+rimmed
+rimming
+rims
+rimy
+rind
+rind's
+rinds
+ring
+ringbolt
+ringbolts
+ringbone
+ringdove
+ringed
+ringer
+ringers
+ringing
+ringleader
+ringleaders
+ringlet
+ringlets
+ringmaster
+ringmasters
+rings
+ringside
+ringsiders
+ringtail
+ringworm
+ringworms
+rink
+rinse
+rinsed
+rinses
+rinsing
+riot
+rioted
+rioter
+rioters
+rioting
+riotous
+riotously
+riotousness
+riots
+rip
+riparian
+ripcord
+ripe
+ripen
+ripened
+ripeness
+ripening
+ripens
+riper
+ripest
+riposte
+ripped
+ripper
+ripping
+ripple
+rippled
+ripples
+rippling
+riprap
+rips
+ripsaw
+ripsnorter
+riptide
+rise
+risen
+riser
+risers
+rises
+risibility
+risible
+rising
+risings
+risk
+risked
+riskier
+risking
+risks
+risky
+risotto
+rissole
+rite
+rite's
+rites
+ritual
+ritualise
+ritualised
+ritualises
+ritualising
+ritualism
+ritualist
+ritualistic
+ritualistically
+ritually
+rituals
+ritzier
+ritziness
+ritzy
+rival
+rivalled
+rivalling
+rivalries
+rivalry
+rivalry's
+rivals
+rive
+rived
+river
+river's
+riverbank
+riverbanks
+riverbed
+riverboat
+riverfront
+rivers
+riverside
+riverward
+riverwards
+riverweed
+rivet
+riveted
+riveter
+riveting
+rivets
+riving
+rivulet
+rivulet's
+rivulets
+riyal
+roach
+roaches
+road
+road's
+roadbed
+roadbeds
+roadblock
+roadblocks
+roadhouse
+roadhouses
+roadrunner
+roadrunners
+roads
+roadside
+roadsides
+roadstead
+roadster
+roadster's
+roadsters
+roadway
+roadway's
+roadways
+roadwork
+roadworthiness
+roadworthy
+roam
+roamed
+roaming
+roams
+roan
+roar
+roared
+roaring
+roars
+roast
+roasted
+roaster
+roasting
+roasts
+rob
+robbed
+robber
+robber's
+robberies
+robbers
+robbery
+robbery's
+robbing
+robe
+robed
+robes
+robin
+robin's
+robins
+robot
+robot's
+robotic
+robotics
+robots
+robs
+robust
+robustly
+robustness
+roc
+rock
+rockabilly
+rockaway
+rockbound
+rocked
+rocker
+rockers
+rockery
+rocket
+rocket's
+rocketed
+rocketing
+rocketry
+rockets
+rockfish
+rockier
+rockiness
+rocking
+rocklike
+rockrose
+rocks
+rockshaft
+rockweed
+rocky
+rococo
+rod
+rod's
+rode
+rodent
+rodents
+rodeo
+rodeos
+rodomontade
+rods
+roe
+roebuck
+roebucks
+roentgen
+roentgenogram
+roentgenogram's
+roentgenograms
+roes
+rogation
+rogatory
+rogue
+rogue's
+roguery
+rogues
+roguish
+roguishly
+roguishness
+roil
+roiling
+roily
+roister
+roistered
+roisterer
+roistering
+role
+role's
+roles
+roll
+rollaway
+rollback
+rolled
+roller
+rollers
+rollick
+rollicking
+rollickingly
+rolling
+rollout
+rollover
+rolls
+rollway
+romaine
+romance
+romanced
+romancer
+romancers
+romances
+romancing
+romantic
+romantic's
+romantically
+romanticise
+romanticises
+romanticising
+romanticism
+romanticist
+romantics
+romp
+romped
+romper
+rompers
+romping
+romps
+rondo
+rondos
+rood
+roof
+roofed
+roofer
+roofers
+roofing
+roofless
+roofline
+roofs
+rooftop
+rooftops
+rooftree
+rook
+rookery
+rookie
+rookies
+rooks
+room
+roomed
+roomer
+roomers
+roomette
+roomful
+roomier
+roominess
+rooming
+roommate
+roommate's
+roommates
+rooms
+roomy
+roost
+rooster
+roosters
+root
+root's
+rooted
+rooter
+roothold
+rooting
+rootless
+rootlet
+roots
+rootstalk
+rootstock
+rope
+roped
+ropedancer
+roper
+ropers
+ropes
+ropewalk
+ropewalker
+ropeway
+ropier
+roping
+ropy
+rosaries
+rosary
+roscoe
+rose
+rose's
+roseate
+rosebay
+rosebud
+rosebud's
+rosebuds
+rosebush
+rosefish
+rosehip
+rosemary
+roses
+rosette
+rosettes
+rosewater
+rosewood
+rosier
+rosily
+rosin
+rosined
+rosining
+rosinweed
+roster
+rostra
+rostrum
+rosy
+rot
+rotary
+rotate
+rotated
+rotates
+rotating
+rotation
+rotational
+rotationally
+rotations
+rotator
+rotator's
+rotators
+rote
+rotenone
+rotgut
+rotifer
+rotisserie
+rotogravure
+rotogravures
+rotor
+rotorcraft
+rotors
+rots
+rotted
+rotten
+rottenly
+rottenness
+rottenstone
+rotting
+rotund
+rotunda
+rotundity
+rouble
+rouble's
+roubles
+rouge
+rough
+roughage
+roughcast
+roughed
+roughen
+roughened
+roughening
+roughens
+rougher
+roughest
+roughhouse
+roughhoused
+roughhousing
+roughish
+roughly
+roughneck
+roughness
+roughrider
+roughriders
+roughshod
+rouging
+roulade
+roulette
+roulettes
+round
+roundabout
+rounded
+roundedness
+roundel
+roundelay
+rounder
+roundest
+roundhead
+roundhouse
+rounding
+roundly
+roundness
+rounds
+roundsman
+roundtable
+roundup
+roundup's
+roundups
+roundworm
+rouse
+rouseabout
+roused
+rouses
+rousing
+roust
+roustabout
+rout
+route
+routed
+routeing
+router
+routers
+routes
+routine
+routinely
+routines
+routing
+routings
+roux
+rove
+roved
+rover
+roves
+roving
+row
+rowboat
+rowboats
+rowdier
+rowdies
+rowdily
+rowdiness
+rowdy
+rowed
+rowel
+rower
+rowers
+rowing
+rowlock
+rows
+royal
+royalist
+royalist's
+royalists
+royally
+royalties
+royalty
+royalty's
+rozzer
+rpt
+rub
+rubbed
+rubber
+rubber's
+rubberise
+rubberised
+rubberises
+rubberising
+rubberneck
+rubbers
+rubbery
+rubbing
+rubbish
+rubbishes
+rubbishy
+rubble
+rubblework
+rubdown
+rube
+rubella
+rubes
+rubicund
+rubidium
+rubies
+rubout
+rubric
+rubs
+rubstone
+ruby
+ruby's
+ruche
+ruck
+rucksack
+ruckus
+ruction
+rudder
+rudder's
+rudderless
+rudderpost
+rudders
+rudderstock
+ruddier
+ruddily
+ruddiness
+ruddle
+ruddy
+rude
+rudely
+rudeness
+ruder
+rudest
+rudiment
+rudiment's
+rudimental
+rudimentarily
+rudimentary
+rudiments
+rue
+rueful
+ruefully
+ruefulness
+rues
+ruff
+ruffed
+ruffian
+ruffians
+ruffle
+ruffled
+ruffles
+ruffling
+rug
+rug's
+rugby
+rugged
+ruggedise
+ruggedly
+ruggedness
+rugger
+rugs
+ruin
+ruination
+ruination's
+ruinations
+ruined
+ruing
+ruining
+ruinous
+ruinously
+ruins
+rule
+ruled
+ruler
+rulers
+rules
+ruling
+rulings
+rum
+rumba
+rumble
+rumbled
+rumbles
+rumbling
+rumen
+rumens
+ruminant
+ruminants
+ruminate
+rumination
+ruminative
+ruminatively
+ruminator
+rummage
+rummaged
+rummaging
+rummies
+rummy
+rumour
+rumour's
+rumoured
+rumouring
+rumourmonger
+rumourmonger's
+rumourmongers
+rumours
+rump
+rumple
+rumpled
+rumples
+rumpling
+rumps
+rumpus
+rumrunner
+run
+runabout
+runabouts
+runaway
+runaways
+runback
+rundle
+rundown
+rune
+runes
+rung
+rung's
+rungs
+runic
+runlet
+runnel
+runnels
+runner
+runner's
+runners
+running
+runny
+runoff
+runoffs
+runs
+runt
+runtime
+runts
+runty
+runway
+runways
+rupee
+rupees
+rupture
+ruptured
+ruptures
+rupturing
+rural
+rurally
+ruse
+rush
+rushed
+rusher
+rushes
+rushing
+rusk
+russet
+russets
+rust
+rusted
+rustic
+rustically
+rusticate
+rusticated
+rusticates
+rusticating
+rustication
+rusticator
+rusticity
+rustier
+rustiness
+rusting
+rustle
+rustled
+rustler
+rustlers
+rustles
+rustling
+rustproof
+rusts
+rusty
+rut
+rut's
+rutabaga
+rutabagas
+ruthenium
+ruthful
+ruthless
+ruthlessly
+ruthlessness
+ruts
+rutted
+ruttier
+rutting
+rutty
+rye
+rye's
+ryegrass
+ryot
+s's
+sabbatical
+sable
+sable's
+sables
+sabot
+sabotage
+sabotaged
+sabotages
+sabotaging
+saboteur
+saboteurs
+sabre
+sabre's
+sabres
+sac
+saccade
+saccadic
+saccharin
+saccharine
+sacerdotal
+sachem
+sachems
+sachet
+sack
+sackbut
+sackcloth
+sacked
+sacker
+sacking
+sacks
+saclike
+sacra
+sacral
+sacrament
+sacramental
+sacraments
+sacred
+sacredly
+sacredness
+sacrifice
+sacrificed
+sacrifices
+sacrificial
+sacrificially
+sacrificing
+sacrilege
+sacrilegious
+sacrilegiously
+sacristan
+sacristy
+sacroiliac
+sacrosanct
+sacrum
+sad
+sadden
+saddened
+saddening
+saddens
+sadder
+saddest
+saddle
+saddlebag
+saddlebags
+saddlebow
+saddlecloth
+saddled
+saddler
+saddlery
+saddles
+saddletree
+saddling
+sadiron
+sadism
+sadist
+sadist's
+sadistic
+sadistically
+sadists
+sadly
+sadness
+sadomasochism
+sadomasochist
+sadomasochistic
+safari
+safe
+safecracker
+safecracking
+safeguard
+safeguarded
+safeguarding
+safeguards
+safekeeping
+safelight
+safely
+safeness
+safer
+safes
+safest
+safetied
+safeties
+safety
+safetyman
+safflower
+saffron
+sag
+saga
+sagacious
+sagaciously
+sagaciousness
+sagacity
+sage
+sagebrush
+sagely
+sages
+sagged
+sagging
+sago
+sags
+saguaro
+sahib
+said
+sail
+sailable
+sailboard
+sailboat
+sailboats
+sailcloth
+sailed
+sailfish
+sailing
+sailor
+sailors
+sailplane
+sailplaner
+sails
+saint
+sainted
+sainthood
+saintliness
+saintly
+saints
+sake
+sakes
+salaam
+salacious
+salaciously
+salaciousness
+salad
+salad's
+salads
+salamander
+salami
+salamis
+salaried
+salaries
+salary
+sale
+sale's
+saleable
+saleroom
+sales
+salesclerk
+salesgirl
+saleslady
+salesman
+salesmanship
+salesmen
+salespeople
+salespeople's
+salesperson
+salesperson's
+salesroom
+saleswoman
+saleswomen
+salicylic
+salience
+saliency
+salient
+saliently
+saline
+salinity
+saliva
+salivary
+salivate
+salivated
+salivates
+salivating
+salivation
+sallied
+sallies
+sallow
+sally
+sallying
+salmagundi
+salmon
+salmonberries
+salmonberry
+salmonella
+salmons
+salon
+salon's
+salons
+saloon
+saloon's
+saloonkeeper
+saloons
+salsa
+salsa's
+salsas
+salt
+saltbox
+saltbush
+saltcellar
+salted
+saltier
+saltiest
+saltine
+saltiness
+salting
+saltpan
+saltpetre
+saltpetre's
+salts
+saltshaker
+saltwater
+salty
+salubrious
+salubriously
+salubriousness
+saluki
+salutary
+salutation
+salutation's
+salutations
+salutatorian
+salutatory
+salute
+saluted
+salutes
+saluting
+salvable
+salvage
+salvageable
+salvaged
+salvager
+salvages
+salvaging
+salvation
+salve
+salver
+salves
+salving
+salvo
+salvoes
+salvos
+samara
+samarium
+samba
+same
+sameness
+samovar
+sampan
+sample
+sample's
+sampled
+sampler
+samplers
+samples
+sampling
+samplings
+samurai
+samurai's
+samurais
+sanative
+sanatoria
+sanatorium
+sancta
+sanctification
+sanctified
+sanctifier
+sanctify
+sanctimonious
+sanctimoniously
+sanctimony
+sanction
+sanctioned
+sanctioning
+sanctions
+sanctities
+sanctity
+sanctuaries
+sanctuary
+sanctuary's
+sanctum
+sand
+sandal
+sandal's
+sandals
+sandalwood
+sandarac
+sandbag
+sandbagger
+sandbank
+sandbar
+sandbars
+sandblast
+sandblaster
+sandbox
+sandbur
+sanded
+sander
+sanders
+sandglass
+sandhog
+sandier
+sandiness
+sanding
+sandlot
+sandman
+sandpaper
+sandpapery
+sandpiper
+sandpit
+sands
+sandstone
+sandstones
+sandstorm
+sandstorms
+sandwich
+sandwiched
+sandwiches
+sandwiching
+sandworm
+sandworms
+sandy
+sane
+sanely
+saneness
+saner
+sanest
+sang
+sangfroid
+sangria
+sanguinary
+sanguine
+sanguinely
+sanguineness
+sanguineous
+sanguinity
+sanitarian
+sanitarily
+sanitary
+sanitation
+sanitations
+sanitise
+sanitised
+sanitises
+sanitising
+sanity
+sank
+sans
+sansei
+sap
+sap's
+saphead
+sapid
+sapience
+sapiens
+sapient
+sapless
+sapling
+sapling's
+saplings
+sapodilla
+saponaceous
+sapped
+sapper
+sapphire
+sappier
+sappiness
+sapping
+sappy
+saprobe
+saprophyte
+saprophytic
+saps
+sapsago
+sapsucker
+sapwood
+sarcasm
+sarcasm's
+sarcasms
+sarcastic
+sarcastically
+sarcoma
+sarcophagus
+sardine
+sardines
+sardonic
+sardonically
+sari
+sarong
+sarong's
+sarongs
+sarsaparilla
+sartorial
+sartorially
+sash
+sashay
+sashayed
+sashes
+sashimi
+sass
+sassafras
+sassier
+sassing
+sasswood
+sassy
+sat
+satanic
+satanically
+satchel
+satchel's
+satchels
+sate
+sated
+sateen
+satellite
+satellite's
+satellites
+sates
+sati
+satiable
+satiate
+satiated
+satiates
+satiating
+satiation
+satiety
+satin
+sating
+satinwood
+satiny
+satire
+satire's
+satires
+satiric
+satirical
+satirically
+satirise
+satirised
+satirises
+satirising
+satirist
+satirist's
+satirists
+satisfaction
+satisfaction's
+satisfactions
+satisfactorily
+satisfactoriness
+satisfactory
+satisfied
+satisfier
+satisfiers
+satisfies
+satisfy
+satisfying
+satisfyingly
+satrap
+satrapy
+saturate
+saturated
+saturates
+saturating
+saturation
+saturations
+saturator
+saturnalia
+saturnine
+satyr
+satyriasis
+sauce
+saucepan
+saucepan's
+saucepans
+saucer
+saucers
+sauces
+saucier
+saucily
+sauciness
+saucing
+saucy
+sauerbraten
+sauerkraut
+sauna
+sauna's
+saunas
+saunter
+sauntered
+sauntering
+saunters
+saurian
+sausage
+sausage's
+sausages
+sauterne
+sauternes
+savage
+savaged
+savagely
+savageness
+savagery
+savages
+savaging
+savanna
+savannah
+savant
+savants
+save
+saveable
+saved
+saver
+savers
+saves
+saving
+savings
+saviour
+saviour's
+saviours
+savoir
+savour
+savoured
+savouries
+savouring
+savours
+savoury
+savoury's
+savvied
+savvy
+saw
+sawbones
+sawboneses
+sawbuck
+sawdust
+sawed
+sawfish
+sawfly
+sawhorse
+sawing
+sawmill
+sawmill's
+sawmills
+sawn
+saws
+sawyer
+sax
+saxhorn
+saxifrage
+saxophone
+saxophone's
+saxophones
+saxophonist
+say
+saying
+sayings
+says
+scab
+scabbard
+scabbard's
+scabbards
+scabbed
+scabbier
+scabbing
+scabby
+scabies
+scabrous
+scabs
+scads
+scaffold
+scaffolding
+scaffoldings
+scaffolds
+scalability
+scalable
+scalar
+scalar's
+scalars
+scald
+scalded
+scalding
+scalds
+scale
+scaled
+scalene
+scales
+scalier
+scaling
+scallion
+scallop
+scalloped
+scalloping
+scallops
+scallywag
+scallywags
+scalp
+scalp's
+scalpel
+scalper
+scalping
+scalps
+scaly
+scam
+scam's
+scammed
+scamming
+scamp
+scamper
+scampered
+scampering
+scampers
+scampi
+scams
+scan
+scandal
+scandal's
+scandalise
+scandalised
+scandalises
+scandalising
+scandalmonger
+scandalous
+scandalously
+scandals
+scandium
+scanned
+scanner
+scanner's
+scanners
+scanning
+scans
+scansion
+scant
+scantier
+scantiest
+scantily
+scantiness
+scantling
+scantly
+scanty
+scapegoat
+scapegoats
+scapegrace
+scapula
+scapular
+scapulars
+scar
+scar's
+scarab
+scarce
+scarcely
+scarceness
+scarcer
+scarcest
+scarcity
+scare
+scarecrow
+scared
+scaremonger
+scares
+scarf
+scarfskin
+scarier
+scarification
+scarify
+scaring
+scarlet
+scarp
+scarped
+scarper
+scarpers
+scarping
+scarps
+scarred
+scarring
+scars
+scarves
+scary
+scat
+scathe
+scathed
+scathes
+scathing
+scathingly
+scatological
+scatology
+scatted
+scatter
+scatterbrain
+scatterbrained
+scattered
+scattergun
+scattering
+scatters
+scattershot
+scatting
+scavenge
+scavenged
+scavenger
+scavenger's
+scavengers
+scavenges
+scavenging
+scenario
+scenario's
+scenarios
+scene
+scene's
+sceneries
+scenery
+scenes
+scenic
+scenically
+scent
+scented
+scentless
+scents
+sceptic
+sceptical
+scepticism
+sceptre
+sceptre's
+sceptres
+schedule
+schedule's
+scheduled
+scheduler
+scheduler's
+schedulers
+schedules
+scheduling
+schema
+schema's
+schemas
+schemata
+schematic
+schematically
+schematics
+schematisation
+schematisation's
+schematisations
+schematise
+schematised
+schematises
+schematising
+scheme
+scheme's
+schemed
+schemer
+schemers
+schemes
+scheming
+scherzo
+schilling
+schism
+schismatic
+schismatically
+schist
+schistose
+schizocarp
+schizoid
+schizophrenia
+schizophrenic
+schizophrenically
+schlemiel
+schlock
+schmaltz
+schmaltzy
+schmooze
+schmuck
+schnapps
+schnauzer
+schnitzel
+schnook
+schnozzle
+scholar
+scholarly
+scholars
+scholarship
+scholarship's
+scholarships
+scholastic
+scholastically
+scholasticism
+scholastics
+scholiast
+school
+schoolbag
+schoolbook
+schoolbooks
+schoolboy
+schoolboy's
+schoolboys
+schoolchild
+schooled
+schoolfellow
+schoolgirl
+schoolgirls
+schoolhouse
+schoolhouse's
+schoolhouses
+schooling
+schoolman
+schoolmarm
+schoolmaster
+schoolmaster's
+schoolmasters
+schoolmate
+schoolmates
+schoolmistress
+schoolroom
+schoolroom's
+schoolrooms
+schools
+schoolteacher
+schoolwork
+schoolyard
+schoolyard's
+schoolyards
+schooner
+schottische
+schwa
+sciatic
+sciatica
+science
+science's
+sciences
+scientific
+scientifically
+scientism
+scientist
+scientist's
+scientists
+scientologist
+scientology
+scilicet
+scimitar
+scimitars
+scintilla
+scintillate
+scintillated
+scintillates
+scintillating
+scintillation
+scion
+scions
+scissile
+scission
+scissor
+scissoring
+scissors
+sclera
+sclerosis
+sclerotic
+scoff
+scoffed
+scoffer
+scoffing
+scofflaw
+scofflaw's
+scofflaws
+scoffs
+scold
+scolded
+scolding
+scolds
+scoliosis
+sconce
+scone
+scoop
+scooped
+scooping
+scoops
+scoot
+scooted
+scooter
+scooting
+scoots
+scope
+scoped
+scopes
+scopolamine
+scorbutic
+scorch
+scorched
+scorcher
+scorches
+scorching
+score
+score's
+scoreboard
+scoreboards
+scorecard
+scored
+scorekeeper
+scoreless
+scorer
+scorers
+scores
+scoria
+scoring
+scorings
+scorn
+scorned
+scorner
+scornful
+scornfully
+scornfulness
+scorning
+scorns
+scorpion
+scorpion's
+scorpions
+scotch
+scoter
+scoundrel
+scoundrel's
+scoundrels
+scour
+scoured
+scourge
+scourging
+scouring
+scours
+scout
+scouted
+scouting
+scoutmaster
+scouts
+scow
+scowl
+scowled
+scowling
+scowls
+scrabble
+scrabbled
+scrabbles
+scrabbling
+scraggier
+scraggly
+scraggy
+scram
+scramble
+scrambled
+scrambler
+scrambles
+scrambling
+scramming
+scrap
+scrap's
+scrapbook
+scrapbooks
+scrape
+scraped
+scraper
+scraperboard
+scraperboards
+scrapers
+scrapes
+scraping
+scrapings
+scrapped
+scrapper
+scrappier
+scrappiness
+scrapping
+scrapple
+scrappy
+scraps
+scratch
+scratched
+scratches
+scratchier
+scratchiness
+scratching
+scratchy
+scrawl
+scrawled
+scrawling
+scrawls
+scrawnier
+scrawniness
+scrawny
+scream
+screamed
+screamer
+screamers
+screaming
+screams
+scree
+screech
+screeched
+screeches
+screeching
+screechy
+screed
+screen
+screened
+screener
+screening
+screenings
+screenplay
+screens
+screenwriter
+screenwriter's
+screenwriters
+screw
+screwball
+screwdriver
+screwdrivers
+screwed
+screwier
+screwing
+screws
+screwworm
+screwy
+scribble
+scribbled
+scribbler
+scribbles
+scribbling
+scribe
+scriber
+scribes
+scribing
+scrim
+scrimmage
+scrimmaged
+scrimmages
+scrimmaging
+scrimp
+scrimped
+scrimping
+scrimps
+scrimshank
+scrimshaw
+scrip
+script
+script's
+scripted
+scripting
+scriptorium
+scripts
+scriptural
+scripture
+scriptures
+scriptwriter
+scriptwriter's
+scriptwriters
+scrivener
+scrod
+scrofula
+scrofulous
+scroll
+scrollbar
+scrollbar's
+scrollbars
+scrolled
+scrolling
+scrolls
+scrollwork
+scrooge
+scrooge's
+scrooges
+scrota
+scrotal
+scrotum
+scrotum's
+scrotums
+scrounge
+scrounged
+scrounger
+scroungers
+scrounges
+scrounging
+scrub
+scrubbed
+scrubber
+scrubbier
+scrubbing
+scrubby
+scrubland
+scrubs
+scrubwoman
+scruff
+scruffier
+scruffiness
+scruffy
+scrum
+scrumptious
+scrumptiously
+scrumpy
+scrunch
+scruple
+scrupled
+scruples
+scrupling
+scrupulosity
+scrupulous
+scrupulously
+scrupulousness
+scrutinise
+scrutinised
+scrutiniser
+scrutinisers
+scrutinises
+scrutinising
+scrutiny
+scuba
+scud
+scudded
+scudding
+scuds
+scuff
+scuffed
+scuffing
+scuffle
+scuffled
+scuffles
+scuffling
+scuffs
+scull
+sculled
+sculleries
+scullery
+sculling
+scullion
+scullions
+sculls
+sculpt
+sculpted
+sculpting
+sculptor
+sculptor's
+sculptors
+sculptress
+sculpts
+sculptural
+sculpturally
+sculpture
+sculptured
+sculptures
+sculpturing
+scum
+scum's
+scummy
+scup
+scupper
+scuppernong
+scuppers
+scups
+scurf
+scurfy
+scurried
+scurrile
+scurrility
+scurrilous
+scurrilously
+scurry
+scurrying
+scurvy
+scuttle
+scuttlebutt
+scuttled
+scuttles
+scuttling
+scythe
+scythe's
+scythes
+scything
+sea
+seabed
+seabed's
+seabird
+seaboard
+seacoast
+seacoast's
+seacoasts
+seadog
+seafarer
+seafarers
+seafaring
+seafloor
+seafood
+seafowl
+seafront
+seagoing
+seagull
+seagulls
+seahorse
+seakale
+seal
+sealant
+sealants
+sealed
+sealer
+sealing
+seals
+sealskin
+seam
+seaman
+seamanlike
+seamanship
+seamark
+seamed
+seamen
+seamier
+seaming
+seamless
+seamlessly
+seamount
+seams
+seamstress
+seamstresses
+seamy
+seaplane
+seaport
+seaport's
+seaports
+seaquake
+sear
+search
+searchable
+searched
+searcher
+searcher's
+searchers
+searches
+searching
+searchingly
+searchlight
+searchlights
+seared
+searing
+sears
+seas
+seascape
+seashell
+seashell's
+seashells
+seashore
+seashore's
+seashores
+seasick
+seasickness
+seaside
+season
+season's
+seasonable
+seasonably
+seasonal
+seasonality
+seasonally
+seasoned
+seasoning
+seasonings
+seasons
+seastrand
+seat
+seated
+seating
+seatmate
+seatmate's
+seatmates
+seats
+seawall
+seaward
+seawards
+seaware
+seawater
+seawater's
+seaway
+seaweed
+seaweeds
+seaworthiness
+seaworthy
+sebaceous
+seborrhoea
+sebum
+sec
+secant
+secants
+secateurs
+secede
+seceded
+secedes
+seceding
+secession
+secessionism
+secessionist
+seclude
+secluded
+secludes
+secluding
+seclusion
+second
+secondarily
+secondary
+seconded
+seconding
+secondly
+seconds
+secrecy
+secret
+secretarial
+secretariat
+secretaries
+secretary
+secretary's
+secrete
+secreted
+secretes
+secreting
+secretion
+secretions
+secretive
+secretively
+secretiveness
+secretly
+secretor
+secrets
+sect
+sect's
+sectarian
+sectarianism
+sectary
+section
+sectional
+sectionalise
+sectionalised
+sectionalises
+sectionalising
+sectionalism
+sectioned
+sectioning
+sections
+sector
+sector's
+sectored
+sectoring
+sectors
+sects
+secular
+secularisation
+secularisation's
+secularisations
+secularise
+secularised
+seculariser
+secularisers
+secularises
+secularising
+secularism
+secularist
+secularists
+secularity
+secularly
+secure
+secured
+securely
+securer
+secures
+securing
+securities
+security
+sedan
+sedans
+sedate
+sedated
+sedately
+sedateness
+sedates
+sedating
+sedation
+sedative
+sedentary
+seder
+sedge
+sediment
+sediment's
+sedimentary
+sedimentation
+sediments
+sedition
+seditious
+seditiousness
+seduce
+seduced
+seducer
+seducers
+seduces
+seducing
+seduction
+seductions
+seductive
+seductively
+seductiveness
+seductress
+sedulity
+sedulous
+sedulously
+sedulousness
+sedum
+see
+seed
+seedbed
+seedbeds
+seedcake
+seedcakes
+seeded
+seeders
+seedier
+seedily
+seediness
+seeding
+seedless
+seedling
+seedling's
+seedlings
+seedpod
+seeds
+seedtime
+seedy
+seeing
+seek
+seeker
+seekers
+seeking
+seeks
+seem
+seemed
+seeming
+seemingly
+seemlier
+seemliness
+seemly
+seems
+seen
+seep
+seepage
+seeped
+seeping
+seeps
+seer
+seers
+seersucker
+sees
+seesaw
+seesawed
+seesawing
+seesaws
+seethe
+seethed
+seethes
+seething
+segment
+segmental
+segmentation
+segmentation's
+segmentations
+segmented
+segmenting
+segments
+segregate
+segregated
+segregates
+segregating
+segregation
+segregationist
+segue
+segue's
+segued
+segueing
+segues
+seigneur
+seignior
+seine
+seining
+seism
+seismic
+seismogram
+seismogram's
+seismograms
+seismograph
+seismographer
+seismographic
+seismographs
+seismography
+seismological
+seismologist
+seismology
+seismometer
+seize
+seized
+seizers
+seizes
+seizing
+seizure
+seizure's
+seizures
+seldom
+select
+selectable
+selected
+selecting
+selection
+selection's
+selections
+selective
+selectively
+selectiveness
+selectivity
+selectman
+selectmen
+selector
+selector's
+selectors
+selects
+selenium
+self
+selfdom
+selfhood
+selfish
+selfishly
+selfishness
+selfless
+selflessly
+selflessness
+selfsame
+selfsameness
+sell
+sellable
+seller
+sellers
+selling
+sells
+seltzer
+selvage
+selvedge
+selves
+semantic
+semantically
+semanticist
+semanticist's
+semanticists
+semantics
+semaphore
+semaphore's
+semaphores
+semblance
+semen
+semester
+semester's
+semesters
+semi
+semiabstract
+semiarid
+semiautomatic
+semiautonomous
+semibreve
+semicircle
+semicircles
+semicircular
+semicolon
+semicolon's
+semicolons
+semiconductor
+semiconductor's
+semiconductors
+semiconscious
+semiconsciously
+semidarkness
+semidetached
+semidiurnal
+semidry
+semidrying
+semiformal
+semiliterate
+semimetal
+seminal
+seminally
+seminar
+seminar's
+seminarian
+seminarians
+seminaries
+seminars
+seminary
+seminary's
+semiofficially
+semiotic
+semiotics
+semiprecious
+semiprivate
+semipro
+semiretirement
+semiskilled
+semisolid
+semisweet
+semitone
+semitransparent
+semitropical
+semivowel
+semolina
+senate
+senate's
+senates
+senator
+senator's
+senatorial
+senators
+send
+sender
+senders
+sending
+sends
+senescence
+senescent
+seneschal
+senile
+senility
+senior
+senior's
+seniority
+seniors
+senor
+senorita
+sensate
+sensation
+sensation's
+sensational
+sensationalise
+sensationalised
+sensationalises
+sensationalising
+sensationalism
+sensationalist
+sensationalistic
+sensationally
+sensations
+sense
+sensed
+senseless
+senselessly
+senselessness
+senses
+sensibilities
+sensibility
+sensible
+sensibleness
+sensibly
+sensing
+sensitisation
+sensitisation's
+sensitisations
+sensitise
+sensitised
+sensitises
+sensitising
+sensitive
+sensitively
+sensitiveness
+sensitivities
+sensitivity
+sensor
+sensor's
+sensorial
+sensors
+sensory
+sensual
+sensualist
+sensualistic
+sensuality
+sensually
+sensuous
+sensuously
+sensuousness
+sent
+sentence
+sentenced
+sentences
+sentencing
+sentential
+sententious
+sententiously
+sententiousness
+sentience
+sentient
+sentiment
+sentiment's
+sentimental
+sentimentalise
+sentimentalised
+sentimentalises
+sentimentalising
+sentimentalism
+sentimentalist
+sentimentalists
+sentimentality
+sentimentally
+sentiments
+sentinel
+sentinel's
+sentinels
+sentries
+sentry
+sentry's
+sepal
+separate
+separated
+separately
+separateness
+separates
+separating
+separation
+separations
+separatism
+separatist
+separator
+separator's
+separators
+sepia
+sepses
+sepsis
+septa
+septennial
+septet
+septic
+septicaemia
+septillion
+septuagenarian
+septum
+septuplet
+sepulchral
+sepulchre
+sepulchre's
+sepulchred
+sepulchres
+sequel
+sequel's
+sequels
+sequence
+sequenced
+sequencer
+sequencers
+sequences
+sequencing
+sequencings
+sequent
+sequential
+sequentially
+sequester
+sequestered
+sequestering
+sequestrate
+sequestration
+sequin
+sequined
+sequinned
+sequins
+sequitur
+sequoia
+ser
+sera
+seraglio
+serape
+seraph
+seraphic
+seraphim
+seraphs
+sere
+serenade
+serenaded
+serenades
+serendipitous
+serendipitously
+serendipity
+serene
+serenely
+sereneness
+serenity
+serf
+serf's
+serfdom
+serfs
+serge
+sergeant
+sergeant's
+sergeants
+serial
+serialisation
+serialisation's
+serialisations
+serialise
+serialised
+serialises
+serialising
+serially
+serials
+seriatim
+sericulture
+series
+serif
+serigraph
+serigraphy
+serine
+seriocomic
+seriocomically
+serious
+seriously
+seriousness
+sermon
+sermon's
+sermonic
+sermonise
+sermonised
+sermoniser
+sermonisers
+sermonises
+sermonising
+sermons
+serologic
+serological
+serologically
+serologist
+serology
+serous
+serpent
+serpent's
+serpentine
+serpents
+serrate
+serrated
+serration
+serried
+serum
+serum's
+serums
+servant
+servant's
+servants
+serve
+served
+server
+server's
+servers
+serves
+service
+serviceability
+serviceable
+serviceableness
+serviceably
+serviceberry
+serviced
+serviceman
+servicemen
+services
+servicewoman
+servicewomen
+servicing
+serviette
+serviettes
+servile
+servility
+serving
+servings
+servitor
+servitors
+servitude
+servo
+servomechanism
+servomechanisms
+servomotor
+servos
+sesame
+sesquicentennial
+sesquipedalian
+sessile
+session
+session's
+sessions
+sestet
+sestina
+set
+set's
+seta
+setaceous
+setae
+setback
+setbacks
+setline
+setoff
+sets
+setscrew
+setscrews
+settable
+settee
+settees
+setter
+setter's
+setters
+setting
+settings
+settle
+settled
+settlement
+settlement's
+settlements
+settler
+settlers
+settles
+settling
+settlings
+seven
+sevenfold
+sevens
+seventeen
+seventeenth
+seventh
+sevenths
+seventies
+seventieth
+seventy
+sever
+several
+severally
+severalty
+severance
+severe
+severed
+severely
+severer
+severest
+severing
+severities
+severity
+severity's
+severs
+sew
+sewage
+sewed
+sewer
+sewerage
+sewers
+sewing
+sewn
+sews
+sex
+sexagenarian
+sexed
+sexes
+sexier
+sexily
+sexiness
+sexism
+sexism's
+sexist
+sexist's
+sexists
+sexless
+sexology
+sextant
+sextet
+sextillion
+sexton
+sextuple
+sextupled
+sextuplet
+sextupling
+sexual
+sexualise
+sexualised
+sexualises
+sexuality
+sexually
+sexy
+shabbier
+shabbily
+shabbiness
+shabby
+shack
+shacked
+shackle
+shackled
+shackler
+shackles
+shackling
+shacks
+shad
+shadberry
+shadblow
+shadbush
+shaddock
+shade
+shaded
+shades
+shadier
+shadiest
+shadily
+shadiness
+shading
+shadings
+shadoof
+shadow
+shadowbox
+shadowed
+shadowgraph
+shadowiness
+shadowing
+shadowlike
+shadows
+shadowy
+shaduf
+shady
+shaft
+shaft's
+shafted
+shafting
+shafts
+shag
+shagbark
+shaggier
+shaggily
+shagginess
+shagging
+shaggy
+shaggymane
+shags
+shah
+shake
+shakeable
+shakedown
+shaken
+shakeout
+shaker
+shakers
+shakes
+shakier
+shakily
+shakiness
+shaking
+shako
+shakoes
+shaky
+shale
+shall
+shallot
+shallow
+shallower
+shallowly
+shallowness
+shallows
+shalom
+sham
+sham's
+shaman
+shamanism
+shamble
+shambled
+shambles
+shambling
+shame
+shamed
+shamefaced
+shamefacedly
+shamefacedness
+shameful
+shamefully
+shamefulness
+shameless
+shamelessly
+shamelessness
+shames
+shaming
+shamming
+shampoo
+shampoos
+shamrock
+shams
+shamus
+shan't
+shanghaied
+shank
+shankpiece
+shanties
+shanty
+shanty's
+shantytown
+shape
+shaped
+shapeless
+shapelessly
+shapelessness
+shapelier
+shapeliness
+shapely
+shaper
+shapers
+shapes
+shaping
+sharable
+shard
+shards
+share
+shareable
+sharecrop
+sharecropper
+sharecropper's
+sharecroppers
+sharecropping
+shared
+shareholder
+shareholder's
+shareholders
+sharer
+sharers
+shares
+sharing
+shark
+shark's
+sharks
+sharkskin
+sharp
+sharpen
+sharpened
+sharpener
+sharpening
+sharpens
+sharper
+sharpest
+sharpie
+sharpies
+sharply
+sharpness
+sharps
+sharpshooter
+sharpshooters
+shatter
+shattered
+shattering
+shatteringly
+shatterproof
+shatters
+shave
+shaved
+shaven
+shaver
+shaves
+shaving
+shavings
+shawl
+shawl's
+shawls
+shawm
+shay
+shays
+she
+she'd
+she'll
+she's
+sheaf
+shear
+sheared
+shearing
+shearlegs
+shears
+shearwater
+sheath
+sheathbill
+sheathe
+sheathing
+sheaths
+sheave
+sheaves
+sheaving
+shebang
+shed
+shedder
+shedding
+sheds
+sheen
+sheep
+sheepcote
+sheepdog
+sheepfold
+sheepherder
+sheepish
+sheepishly
+sheepishness
+sheepshank
+sheepshearer
+sheepskin
+sheer
+sheered
+sheerlegs
+sheerness
+sheet
+sheeted
+sheeting
+sheets
+sheik
+sheikdom
+sheikh
+sheikhdom
+shekel
+shelf
+shell
+shell's
+shellac
+shellacked
+shellacking
+shellback
+shellback's
+shellbacks
+shellbark
+shelled
+shellfire
+shellfish
+shelling
+shellproof
+shells
+shelly
+shelter
+shelterbelt
+sheltered
+sheltering
+shelters
+sheltie
+shelties
+shelve
+shelved
+shelves
+shelving
+shenanigan
+shenanigans
+shepherd
+shepherd's
+shepherded
+shepherdess
+shepherding
+shepherds
+sherbet
+sheriff
+sheriff's
+sheriffs
+sherries
+sherry
+shibboleth
+shibboleths
+shied
+shield
+shielded
+shielding
+shields
+shier
+shies
+shiest
+shift
+shifted
+shifter
+shifters
+shiftier
+shiftiest
+shiftily
+shiftiness
+shifting
+shiftless
+shiftlessness
+shifts
+shifty
+shih
+shill
+shillelagh
+shilling
+shillings
+shills
+shim
+shimmer
+shimmered
+shimmering
+shimmied
+shimmies
+shimming
+shimmy
+shimmying
+shims
+shin
+shinbone
+shindig
+shindig's
+shindigs
+shine
+shined
+shiner
+shiners
+shines
+shingle
+shingle's
+shingled
+shingles
+shingling
+shinier
+shininess
+shining
+shiningly
+shinleaf
+shinnied
+shinning
+shinny
+shinnying
+shinplaster
+shiny
+ship
+ship's
+shipboard
+shipboards
+shipbuilder
+shipbuilding
+shiplap
+shipload
+shipman
+shipmaster
+shipmate
+shipmates
+shipmen
+shipment
+shipment's
+shipments
+shippable
+shipped
+shipper
+shipper's
+shippers
+shipping
+ships
+shipshape
+shipside
+shipway
+shipworm
+shipwreck
+shipwrecked
+shipwrecks
+shipwright
+shipyard
+shipyards
+shire
+shires
+shirk
+shirking
+shirks
+shirr
+shirring
+shirt
+shirting
+shirts
+shirtsleeve
+shirttail
+shirtwaist
+shish
+shit
+shiver
+shivered
+shivering
+shivers
+shivery
+shoal
+shoal's
+shoals
+shoat
+shock
+shocked
+shocker
+shockers
+shocking
+shockingly
+shockproof
+shocks
+shod
+shoddier
+shoddily
+shoddiness
+shoddy
+shoe
+shoebill
+shoeblack
+shoed
+shoehorn
+shoeing
+shoelace
+shoelaces
+shoemaker
+shoemakers
+shoepack
+shoes
+shoeshine
+shoestring
+shoestrings
+shoetree
+shogun
+shone
+shoo
+shoofly
+shooing
+shook
+shoot
+shooter
+shooters
+shooting
+shootings
+shootout
+shootout's
+shootouts
+shoots
+shop
+shop's
+shopkeeper
+shopkeeper's
+shopkeepers
+shoplift
+shoplifter
+shoplifters
+shoplifting
+shopped
+shopper
+shopper's
+shoppers
+shopping
+shops
+shoptalk
+shoran
+shore
+shore's
+shorebird
+shorebird's
+shorebirds
+shored
+shorefront
+shoreline
+shorelines
+shores
+shoreward
+shoring
+shorn
+short
+shortage
+shortage's
+shortages
+shortbread
+shortcake
+shortcoming
+shortcoming's
+shortcomings
+shortcut
+shortcut's
+shortcuts
+shorted
+shorten
+shortened
+shortening
+shortens
+shorter
+shortest
+shortfall
+shortfalls
+shorthand
+shorthanded
+shorthorn
+shorting
+shortlist
+shortlists
+shortly
+shortness
+shorts
+shortstop
+shot
+shot's
+shotgun
+shotgun's
+shotguns
+shots
+should
+shoulder
+shouldered
+shouldering
+shoulders
+shouldn't
+shout
+shouted
+shouter
+shouters
+shouting
+shouts
+shove
+shoved
+shovel
+shovelhead
+shovelled
+shovelling
+shovelnose
+shovels
+shoves
+shoving
+show
+showboat
+showbread
+showcase
+showcase's
+showcased
+showcases
+showcasing
+showdown
+showed
+shower
+showered
+showering
+showers
+showery
+showgirl
+showier
+showily
+showiness
+showing
+showings
+showman
+showmanship
+showmen
+shown
+showpiece
+showplace
+showroom
+shows
+showstopper
+showy
+shrank
+shrapnel
+shred
+shred's
+shredded
+shredder
+shredder's
+shredders
+shredding
+shreds
+shrew
+shrew's
+shrewd
+shrewdest
+shrewdly
+shrewdness
+shrewish
+shrewmouse
+shrews
+shriek
+shrieked
+shrieking
+shrieks
+shrift
+shrike
+shrill
+shrilled
+shrilling
+shrillness
+shrilly
+shrimp
+shrine
+shrine's
+shrines
+shrink
+shrinkable
+shrinkage
+shrinking
+shrinks
+shrive
+shrived
+shrivel
+shrivelled
+shrivelling
+shrivels
+shriven
+shroud
+shrouded
+shrouding
+shrouds
+shrove
+shrub
+shrub's
+shrubbery
+shrubbier
+shrubby
+shrubs
+shrug
+shrugged
+shrugging
+shrugs
+shrunk
+shrunken
+shtick
+shuck
+shucks
+shudder
+shuddered
+shuddering
+shudders
+shuddery
+shuffle
+shuffleboard
+shuffled
+shuffler
+shuffles
+shuffling
+shun
+shunned
+shunning
+shunpike
+shuns
+shunt
+shunted
+shunting
+shunts
+shush
+shut
+shutdown
+shutdown's
+shutdowns
+shuteye
+shutoff
+shutout
+shuts
+shutter
+shutterbug
+shuttered
+shuttering
+shutters
+shutting
+shuttle
+shuttlecock
+shuttlecocks
+shuttled
+shuttles
+shuttling
+shy
+shyer
+shyest
+shying
+shyly
+shyness
+shyster
+sib
+sibilant
+sibilantly
+sibilate
+sibling
+sibling's
+siblings
+sibyl
+sibylline
+sibyls
+sic
+sick
+sickbay
+sickbed
+sickbed's
+sickbeds
+sicken
+sickened
+sickening
+sickeningly
+sicker
+sickest
+sickish
+sickle
+sicklebill
+sickliness
+sickly
+sickness
+sicknesses
+sickroom
+side
+sidearm
+sideband
+sidebands
+sideboard
+sideboard's
+sideboards
+sideburns
+sidecar
+sidecars
+sided
+sidedness
+sidekick
+sidekicks
+sidelight
+sidelight's
+sidelights
+sideline
+sideliner
+sidelines
+sideling
+sidelong
+sideman
+sidemen
+sidepiece
+sidereal
+siderite
+sides
+sideshow
+sideshows
+sideslip
+sideslips
+sidespin
+sidestep
+sidestepped
+sidestepper
+sidestepping
+sidesteps
+sidestroke
+sideswipe
+sidetrack
+sidetracked
+sidetracking
+sidetracks
+sidewalk
+sidewalk's
+sidewalks
+sidewall
+sideward
+sideway
+sideways
+sidewinder
+sidewise
+siding
+sidings
+sidle
+sidled
+sidles
+sidling
+siege
+siege's
+sieges
+sienna
+sierra
+sierras
+siesta
+sieve
+sieve's
+sieves
+sieving
+sift
+sifted
+sifter
+sifting
+siftings
+sifts
+sigh
+sighed
+sighing
+sighs
+sight
+sighted
+sighting
+sightings
+sightless
+sightlessness
+sights
+sightscreen
+sightsee
+sightseeing
+sightseer
+sightseers
+sigma
+sigmoid
+sign
+signal
+signalisation
+signalise
+signalised
+signalises
+signalising
+signalled
+signaller
+signallers
+signalling
+signally
+signalman
+signalmen
+signals
+signatory
+signature
+signature's
+signatures
+signboard
+signed
+signer
+signers
+signet
+significance
+significances
+significant
+significantly
+signification
+signified
+signifier
+signifies
+signify
+signifying
+signing
+signpost
+signposted
+signposting
+signposts
+signs
+silage
+silence
+silenced
+silencer
+silencers
+silences
+silencing
+silent
+silently
+silhouette
+silhouetted
+silhouettes
+silica
+silicate
+silicates
+siliceous
+silicon
+silicone
+silicosis
+silk
+silken
+silkier
+silkiest
+silkily
+silkiness
+silks
+silkweed
+silkworm
+silkworms
+silky
+sill
+sill's
+sillier
+silliest
+silliness
+sills
+silly
+silo
+silos
+silt
+silted
+silting
+silts
+siltstone
+siltstones
+silver
+silvered
+silverfish
+silvering
+silverpoint
+silvers
+silverside
+silversides
+silversmith
+silversmiths
+silverware
+silverweed
+silvery
+simian
+similar
+similarities
+similarity
+similarly
+simile
+similitude
+simmer
+simmered
+simmering
+simmers
+simonise
+simony
+simoom
+simpatico
+simper
+simpered
+simpering
+simpers
+simple
+simpleminded
+simplemindedly
+simpler
+simples
+simplest
+simpleton
+simplex
+simplexes
+simplicities
+simplicity
+simplicity's
+simplification
+simplifications
+simplified
+simplifier
+simplifiers
+simplifies
+simplify
+simplifying
+simplistic
+simplistically
+simply
+simulacrum
+simulate
+simulated
+simulates
+simulating
+simulation
+simulations
+simulative
+simulator
+simulator's
+simulators
+simulcast
+simultaneity
+simultaneous
+simultaneously
+simultaneousness
+sin
+sin's
+since
+sincere
+sincerely
+sincerest
+sincerity
+sine
+sinecure
+sinew
+sinew's
+sinews
+sinewy
+sinful
+sinfully
+sinfulness
+sing
+singe
+singed
+singeing
+singer
+singer's
+singers
+singing
+single
+singled
+singleness
+singles
+singlestick
+singleton
+singleton's
+singletons
+singletree
+singling
+singly
+sings
+singsong
+singspiel
+singular
+singularise
+singularises
+singularities
+singularity
+singularity's
+singularly
+sinister
+sinisterly
+sink
+sinkable
+sinker
+sinkers
+sinkhole
+sinkholes
+sinking
+sinks
+sinless
+sinned
+sinner
+sinner's
+sinners
+sinning
+sinologist
+sinology
+sins
+sinter
+sintered
+sinuate
+sinuosity
+sinuous
+sinuously
+sinuousness
+sinus
+sinuses
+sinusitis
+sinusoid
+sinusoidal
+sinusoids
+sip
+sipped
+sipper
+sippers
+sipping
+sips
+sir
+sire
+sired
+siren
+sirens
+sires
+siring
+sirloin
+sirocco
+sirs
+sis
+sisal
+sissies
+sissified
+sissy
+sister
+sister's
+sisterhood
+sisterly
+sisters
+sit
+sitar
+sitcom
+site
+site's
+sited
+sites
+sits
+sitter
+sitter's
+sitters
+sitting
+sittings
+situate
+situated
+situates
+situating
+situation
+situational
+situations
+six
+sixes
+sixpence
+sixpences
+sixpenny
+sixteen
+sixteenth
+sixth
+sixthly
+sixths
+sixties
+sixtieth
+sixty
+sizable
+sizably
+size
+sizeable
+sized
+sizes
+sizing
+sizzle
+sizzled
+sizzling
+skaldic
+skate
+skateboard
+skateboard's
+skateboarder
+skateboarding
+skateboards
+skated
+skater
+skater's
+skaters
+skates
+skating
+skeet
+skein
+skein's
+skeins
+skeletal
+skeletally
+skeleton
+skeleton's
+skeletons
+sketch
+sketchbook
+sketched
+sketcher
+sketches
+sketchier
+sketchily
+sketchiness
+sketching
+sketchpad
+sketchy
+skew
+skewback
+skewbald
+skewed
+skewer
+skewered
+skewering
+skewers
+skewing
+skews
+ski
+skibob
+skid
+skidded
+skidder
+skidding
+skidlid
+skidoo
+skidpan
+skids
+skied
+skier
+skies
+skiff
+skiffle
+skiffs
+skiing
+skilful
+skilfully
+skill
+skilled
+skillet
+skills
+skim
+skim's
+skimmed
+skimmer
+skimmer's
+skimmers
+skimming
+skimobile
+skimp
+skimped
+skimpier
+skimpily
+skimpiness
+skimping
+skimps
+skimpy
+skims
+skin
+skin's
+skinflint
+skinflint's
+skinflints
+skinhead
+skink
+skinless
+skinned
+skinner
+skinner's
+skinners
+skinnier
+skinniness
+skinning
+skinny
+skins
+skip
+skipjack
+skipped
+skipper
+skipper's
+skippers
+skipping
+skips
+skirl
+skirmish
+skirmished
+skirmisher
+skirmishers
+skirmishes
+skirmishing
+skirt
+skirted
+skirting
+skirts
+skis
+skit
+skits
+skitter
+skittish
+skittishly
+skittishness
+skittle
+skive
+skiving
+skivvies
+skivvy
+skiwear
+skulduggery
+skulk
+skulked
+skulking
+skulks
+skull
+skull's
+skullcap
+skulls
+skunk
+skunk's
+skunks
+sky
+sky's
+skycap
+skydive
+skydiving
+skyhook
+skyjack
+skyjacked
+skyjacker
+skyjackers
+skyjacking
+skylark
+skylarking
+skylarks
+skylight
+skylight's
+skylights
+skyline
+skyrocket
+skysail
+skyscraper
+skyscraper's
+skyscrapers
+skyward
+skyway
+skywrite
+skywriter
+skywriting
+slab
+slabs
+slack
+slacked
+slacken
+slackened
+slackening
+slackens
+slacker
+slackest
+slacking
+slackly
+slackness
+slacks
+slag
+slain
+slake
+slaked
+slaking
+slalom
+slaloms
+slam
+slammed
+slamming
+slams
+slander
+slandered
+slanderer
+slandering
+slanderous
+slanderously
+slanders
+slang
+slanginess
+slanging
+slangy
+slant
+slanted
+slanting
+slants
+slantwise
+slap
+slapdash
+slaphappy
+slapjack
+slapped
+slapping
+slaps
+slapstick
+slash
+slashed
+slashes
+slashing
+slat
+slat's
+slate
+slated
+slates
+slather
+slathered
+slathering
+slathers
+slating
+slats
+slatted
+slattern
+slatternly
+slaughter
+slaughtered
+slaughterer
+slaughterhouse
+slaughterhouses
+slaughtering
+slaughterman
+slaughtermen
+slaughters
+slave
+slaved
+slaveholder
+slaveholders
+slaveholding
+slaver
+slavered
+slavering
+slavery
+slaves
+slaving
+slavish
+slavishly
+slavishness
+slaw
+slay
+slayer
+slayers
+slaying
+slays
+sleazier
+sleazily
+sleaziness
+sleazy
+sled
+sled's
+sledded
+sledding
+sledge
+sledge's
+sledgehammer
+sledges
+sledging
+sleds
+sleek
+sleekly
+sleekness
+sleep
+sleeper
+sleepers
+sleepier
+sleepily
+sleepiness
+sleeping
+sleepless
+sleeplessly
+sleeplessness
+sleeps
+sleepwalk
+sleepwalker
+sleepy
+sleepyhead
+sleet
+sleety
+sleeve
+sleeve's
+sleeved
+sleeveless
+sleeves
+sleigh
+sleighs
+sleight
+slender
+slenderer
+slenderise
+slenderised
+slenderises
+slenderising
+slenderness
+slept
+sleuth
+sleuthhound
+sleuthing
+slew
+slewed
+slewing
+slice
+sliced
+slices
+slicing
+slick
+slicker
+slickers
+slickly
+slickness
+slicks
+slid
+slide
+slider
+sliders
+slides
+sliding
+slier
+sliest
+slight
+slighted
+slighter
+slightest
+slighting
+slightly
+slightness
+slights
+slim
+slime
+slimed
+slimes
+slimier
+slimily
+sliminess
+sliming
+slimly
+slimmed
+slimmer
+slimmest
+slimming
+slimness
+slimy
+sling
+slinging
+slings
+slingshot
+slink
+slinked
+slinkier
+slinkiness
+slinking
+slinks
+slinky
+slip
+slip's
+slipcase
+slipcover
+slipknot
+slipover
+slippage
+slipped
+slipper
+slipper's
+slipperier
+slipperiness
+slippers
+slippery
+slipping
+slips
+slipshod
+slipslop
+slipstream
+slipway
+slit
+slit's
+slither
+slithered
+slithering
+slithers
+slithery
+slits
+slitter
+slitters
+slitting
+sliver
+slivered
+slivering
+slivers
+slivery
+slivovitz
+slob
+slobber
+slobbered
+slobbering
+slobbers
+slobbery
+sloe
+slog
+slogan
+slogan's
+sloganeer
+sloganeering
+slogans
+slogging
+sloop
+sloops
+slop
+slope
+sloped
+slopes
+sloping
+slopped
+sloppier
+sloppily
+sloppiness
+slopping
+sloppy
+slops
+slopwork
+slosh
+sloshed
+slot
+slot's
+sloth
+slothful
+slothfully
+slothfulness
+slots
+slotted
+slotting
+slouch
+slouched
+slouches
+slouchier
+slouching
+slouchy
+slough
+sloughed
+sloughing
+sloughs
+slovenliness
+slovenly
+slow
+slowcoach
+slowdown
+slowed
+slower
+slowest
+slowing
+slowly
+slowness
+slowpoke
+slows
+slowworm
+sludge
+sludgy
+slue
+slug
+slugabed
+slugfest
+sluggard
+slugged
+slugger
+sluggers
+slugging
+sluggish
+sluggishly
+sluggishness
+slugs
+sluice
+sluiced
+sluices
+sluiceway
+sluicing
+sluing
+slum
+slum's
+slumber
+slumber's
+slumbered
+slumbering
+slumberous
+slumbers
+slumlord
+slummier
+slumming
+slummy
+slump
+slumped
+slumps
+slums
+slung
+slunk
+slur
+slur's
+slurp
+slurped
+slurping
+slurps
+slurries
+slurring
+slurry
+slurs
+slush
+slushier
+slushiness
+slushy
+slut
+sluttish
+sly
+slyer
+slyest
+slyly
+slyness
+smack
+smacked
+smacker
+smacking
+smacks
+small
+smallclothes
+smaller
+smallest
+smallholding
+smallish
+smallness
+smallpox
+smarmy
+smart
+smarted
+smarten
+smartened
+smartening
+smarter
+smartest
+smarting
+smartly
+smartness
+smarts
+smartweed
+smarty
+smash
+smashed
+smashes
+smashing
+smashingly
+smatter
+smattering
+smatterings
+smear
+smearcase
+smeared
+smearing
+smears
+smeary
+smell
+smelled
+smellier
+smelling
+smells
+smelly
+smelt
+smelter
+smelts
+smidgen
+smidgeon
+smile
+smiled
+smiles
+smiley
+smiling
+smilingly
+smirch
+smirk
+smirked
+smite
+smith
+smith's
+smithereens
+smithies
+smiths
+smithy
+smiting
+smitten
+smock
+smocking
+smocks
+smog
+smoggier
+smoggy
+smoke
+smoked
+smokehouse
+smokeless
+smoker
+smoker's
+smokers
+smokes
+smokescreen
+smokestack
+smokier
+smokiness
+smoking
+smoky
+smooch
+smooching
+smooth
+smoothbore
+smoothed
+smoothen
+smoothened
+smoothening
+smoother
+smoothers
+smoothes
+smoothest
+smoothie
+smoothing
+smoothly
+smoothness
+smoothy
+smorgasbord
+smote
+smother
+smothered
+smothering
+smothers
+smothery
+smoulder
+smudge
+smudged
+smudginess
+smudging
+smudgy
+smug
+smugger
+smuggest
+smuggle
+smuggled
+smuggler
+smugglers
+smuggles
+smuggling
+smugly
+smugness
+smut
+smutch
+smuts
+smutted
+smuttier
+smuttiness
+smutting
+smutty
+snack
+snacks
+snaffle
+snaffled
+snaffling
+snafu
+snag
+snagged
+snagging
+snaggletooth
+snags
+snail
+snail's
+snails
+snake
+snakebird
+snakebite
+snakebite's
+snakebites
+snaked
+snakelike
+snakemouth
+snakeroot
+snakes
+snakeskin
+snakeweed
+snaking
+snaky
+snap
+snapback
+snapdragon
+snapdragons
+snapped
+snapper
+snapper's
+snappers
+snappier
+snappiest
+snappily
+snappiness
+snapping
+snappish
+snappishly
+snappishness
+snappy
+snaps
+snapshot
+snapshot's
+snapshots
+snare
+snared
+snares
+snaring
+snarl
+snarled
+snarling
+snarls
+snatch
+snatched
+snatcher
+snatches
+snatching
+snazzier
+snazzy
+sneak
+sneaked
+sneaker
+sneakers
+sneakier
+sneakiest
+sneakily
+sneakiness
+sneaking
+sneaks
+sneaky
+sneer
+sneered
+sneering
+sneers
+sneeze
+sneezed
+sneezes
+sneezeweed
+sneezing
+sneezy
+snick
+snicker
+snickered
+snickering
+snide
+snidely
+snider
+snidest
+sniff
+sniffed
+sniffing
+sniffle
+sniffled
+sniffles
+sniffling
+sniffs
+sniffy
+snifter
+snigger
+sniggered
+sniggering
+snip
+snipe
+sniped
+snipefish
+sniper
+sniper's
+snipers
+snipes
+sniping
+snipped
+snippet
+snippety
+snippier
+snipping
+snippy
+snips
+snit
+snitch
+snitcher
+snivel
+snivelled
+sniveller
+snivelling
+snob
+snobbery
+snobbish
+snobbishly
+snobbishness
+snobbism
+snobby
+snobs
+snog
+snood
+snooker
+snookers
+snoop
+snooped
+snoopily
+snooping
+snoops
+snoopy
+snoot
+snootier
+snootily
+snootiness
+snooty
+snooze
+snoozes
+snoozing
+snore
+snored
+snores
+snoring
+snorkel
+snorkelling
+snort
+snorted
+snorting
+snorts
+snot
+snotty
+snout
+snout's
+snouts
+snow
+snowball
+snowballed
+snowballing
+snowballs
+snowberry
+snowbird
+snowblink
+snowblower
+snowbound
+snowbrush
+snowcap
+snowcapped
+snowdrift
+snowdrop
+snowed
+snowfall
+snowfield
+snowflake
+snowflakes
+snowier
+snowiest
+snowiness
+snowing
+snowmaker
+snowmaking
+snowman
+snowmelt
+snowmen
+snowmobile
+snowplough
+snows
+snowshoe
+snowshoes
+snowstorm
+snowsuit
+snowy
+snub
+snubbed
+snubbing
+snubs
+snuck
+snuff
+snuffbox
+snuffboxes
+snuffed
+snuffer
+snuffing
+snuffle
+snuffled
+snuffling
+snuffs
+snug
+snugger
+snuggery
+snuggest
+snuggle
+snuggled
+snuggles
+snuggling
+snugly
+snugness
+so
+soak
+soakage
+soakaway
+soaked
+soaker
+soaking
+soaks
+soap
+soapbark
+soapberry
+soapbox
+soapboxes
+soaped
+soapier
+soapiness
+soaping
+soaps
+soapstone
+soapsuds
+soapwort
+soapy
+soar
+soared
+soaring
+soars
+sob
+soba
+sobbed
+sobbing
+sobbingly
+sober
+sobered
+soberer
+soberest
+sobering
+soberly
+soberness
+sobers
+sobriety
+sobriquet
+sobs
+soccer
+sociability
+sociable
+sociably
+social
+socialisation
+socialisation's
+socialisations
+socialise
+socialised
+socialises
+socialising
+socialism
+socialist
+socialist's
+socialistic
+socialistically
+socialists
+socialite
+sociality
+socially
+societal
+societies
+society
+society's
+socio
+sociologic
+sociological
+sociologically
+sociologist
+sociologists
+sociology
+sociopath
+sock
+socked
+socket
+socket's
+sockets
+sockeye
+socking
+socks
+sod
+sod's
+soda
+sodalist
+sodality
+sodbuster
+sodden
+sodium
+sodomite
+sodomy
+sods
+sofa
+sofa's
+sofas
+soffit
+soft
+softball
+soften
+softened
+softener
+softening
+softens
+softer
+softest
+softhead
+softheaded
+softie
+softies
+softly
+softness
+software
+software's
+softwood
+softy
+soggier
+sogginess
+soggy
+soil
+soiled
+soiling
+soils
+soiree
+soirees
+sojourn
+sojourner
+sojourners
+solace
+solaced
+solacing
+solar
+solarium
+sold
+solder
+soldered
+soldering
+solders
+soldier
+soldiered
+soldiering
+soldierly
+soldiers
+soldiery
+sole
+solecism
+soled
+solely
+solemn
+solemnisation
+solemnisation's
+solemnisations
+solemnise
+solemnised
+solemnises
+solemnising
+solemnity
+solemnly
+solenoid
+solenoids
+soleplate
+soleprint
+soles
+solicit
+solicitation
+solicited
+soliciting
+solicitor
+solicitors
+solicitous
+solicitously
+solicitousness
+solicits
+solicitude
+solid
+solidarity
+solidification
+solidified
+solidifies
+solidify
+solidifying
+solidity
+solidly
+solidness
+solids
+soliloquise
+soliloquised
+soliloquises
+soliloquising
+soliloquist
+soliloquy
+soling
+solipsism
+solipsist
+solipsistic
+solitaire
+solitarily
+solitariness
+solitary
+solitude
+solitude's
+solitudes
+solo
+solo's
+soloed
+soloing
+soloist
+soloists
+solos
+solstice
+solubility
+soluble
+solute
+solution
+solution's
+solutions
+solvability
+solvable
+solvate
+solvated
+solvating
+solve
+solved
+solvency
+solvent
+solvent's
+solvents
+solver
+solvers
+solves
+solving
+soma
+somatic
+somatically
+sombre
+sombrero
+some
+somebody
+somebody's
+someday
+somehow
+someone
+someone's
+someplace
+somersault
+somersaulting
+somersaults
+something
+sometime
+sometimes
+someway
+somewhat
+somewhere
+sommelier
+sommeliers
+somnambulant
+somnambular
+somnambulate
+somnambulism
+somnambulist
+somnambulistic
+somniferous
+somnolence
+somnolent
+somnolently
+son
+son's
+sonant
+sonar
+sonata
+sonatas
+song
+song's
+songbird
+songbook
+songfest
+songs
+songster
+songwriter
+sonic
+sonically
+sonless
+sonly
+sonnet
+sonnet's
+sonneteer
+sonnets
+sonny
+sonogram
+sonogram's
+sonograms
+sonorities
+sonority
+sonorous
+sonorously
+sons
+soon
+sooner
+soonest
+soot
+sooth
+soothe
+soothed
+soothes
+soothing
+soothingly
+soothsay
+soothsayer
+soothsayers
+soothsaying
+sootier
+sootiness
+sooty
+sop
+sophism
+sophist
+sophistic
+sophistically
+sophisticate
+sophisticated
+sophisticatedly
+sophisticates
+sophistication
+sophistry
+sophomore
+sophomore's
+sophomores
+sophomoric
+soporiferous
+soporific
+soporific's
+soporifics
+soppier
+sopping
+soppy
+soprano
+sopranos
+sops
+sorcerer
+sorcerer's
+sorcerers
+sorceress
+sorcery
+sordid
+sordidly
+sordidness
+sore
+sorehead
+sorely
+soreness
+sorer
+sores
+sorest
+sorghum
+sororities
+sorority
+sorption
+sorrel
+sorrier
+sorriest
+sorrow
+sorrow's
+sorrowful
+sorrowfully
+sorrowfulness
+sorrows
+sorry
+sort
+sorted
+sorter
+sorters
+sortie
+sortilege
+sorting
+sorts
+sot
+sotto
+soubrette
+soubriquet
+souffl�
+sough
+sought
+soul
+soul's
+soulful
+soulfully
+soulless
+soullessly
+souls
+sound
+soundboard
+sounded
+sounder
+soundest
+sounding
+sounding's
+soundings
+soundless
+soundlessly
+soundly
+soundness
+soundproof
+soundproofed
+soundproofing
+soundproofs
+sounds
+soup
+soup's
+soupier
+soups
+soupspoon
+soupy
+sour
+source
+source's
+sources
+sourdough
+soured
+sourer
+sourest
+souring
+sourly
+sourness
+sourpuss
+sours
+sourwood
+sousaphone
+souse
+sousing
+south
+southbound
+southeast
+southeaster
+southerly
+southern
+southerner
+southerners
+southernisms
+southernmost
+southing
+southland
+southpaw
+southpaws
+southward
+southwards
+southwest
+southwester
+souvenir
+souvenirs
+sovereign
+sovereign's
+sovereigns
+sovereignty
+soviet
+soviet's
+sovietisation
+sovietisation's
+sovietisations
+sovietise
+sovietises
+sovietism
+soviets
+sovkhoz
+sovkhozes
+sovran
+sovranty
+sow
+sowbelly
+sowbug
+sowbug's
+sowbugs
+sowens
+sower
+sowered
+sowing
+sown
+sox
+soxhlet
+soy
+soya
+soybean
+soybeans
+spa
+space
+spacecraft
+spaced
+spaceman
+spaceport
+spacer
+spacers
+spaces
+spaceship
+spaceship's
+spaceships
+spacesuit
+spacesuits
+spacing
+spacious
+spaciously
+spaciousness
+spackle
+spackled
+spade
+spaded
+spadefish
+spades
+spadework
+spading
+spaghetti
+spam
+span
+span's
+spandrel
+spandrels
+spangle
+spangled
+spangles
+spangling
+spaniel
+spank
+spanked
+spanker
+spanking
+spanks
+spanned
+spanner
+spanner's
+spanners
+spanning
+spans
+spanworm
+spar
+spare
+spared
+sparely
+sparer
+sparerib
+spareribs
+spares
+sparest
+sparing
+sparingly
+spark
+sparked
+sparking
+sparkle
+sparkled
+sparkler
+sparkles
+sparkling
+sparkplug
+sparks
+sparred
+sparring
+sparrow
+sparrow's
+sparrowgrass
+sparrows
+spars
+sparse
+sparsely
+sparseness
+sparser
+sparsest
+spas
+spasm
+spasmodic
+spasmodically
+spasms
+spastic
+spastically
+spat
+spate
+spate's
+spates
+spatial
+spatiality
+spatially
+spats
+spatter
+spatterdock
+spattered
+spatula
+spavin
+spavined
+spawn
+spawned
+spawning
+spawns
+spay
+spayed
+spaying
+speak
+speakeasy
+speaker
+speaker's
+speakers
+speaking
+speaks
+spear
+speared
+spearfish
+spearhead
+spearing
+spearman
+spearmint
+spears
+spec
+special
+specialization
+specialization's
+specializations
+specialize
+specialized
+specializes
+specializing
+specialist
+specialist's
+specialists
+specialities
+speciality
+speciality's
+specially
+specials
+speciation
+specie
+species
+specifiable
+specific
+specifically
+specification
+specifications
+specificities
+specificity
+specifics
+specified
+specifies
+specify
+specifying
+specimen
+specimen's
+specimens
+specious
+speciously
+speciousness
+speck
+speck's
+speckle
+speckled
+speckles
+speckling
+specks
+specs
+spectacle
+spectacled
+spectacles
+spectacular
+spectacularly
+spectator
+spectator's
+spectators
+spectra
+spectral
+spectrally
+spectre
+spectre's
+spectres
+spectrogram
+spectrogram's
+spectrograms
+spectrograph
+spectrographic
+spectrographically
+spectrometer
+spectrometer's
+spectrometers
+spectrometric
+spectrometry
+spectrophotometer
+spectrophotometer's
+spectrophotometers
+spectroscope
+spectroscopic
+spectroscopy
+spectrum
+spectrums
+speculate
+speculated
+speculates
+speculating
+speculation
+speculations
+speculative
+speculatively
+speculator
+speculator's
+speculators
+speculum
+sped
+speech
+speech's
+speeches
+speechless
+speechlessly
+speechlessness
+speed
+speedball
+speedboat
+speedboater
+speeded
+speeder
+speeders
+speedier
+speedily
+speediness
+speeding
+speedometer
+speedometer's
+speedometers
+speeds
+speedster
+speedup
+speedup's
+speedups
+speedway
+speedwell
+speedwriting
+speedy
+spell
+spellbind
+spellbinder
+spellbound
+spelldown
+spelled
+speller
+spellers
+spelling
+spellings
+spells
+spelt
+spelunker
+spelunking
+spend
+spender
+spenders
+spending
+spends
+spendthrift
+spent
+sperm
+spermaceti
+spermatic
+spermatogenesis
+spermatogenetic
+spermatophyte
+spermatozoa
+spermatozoid
+spermatozoon
+spermicidal
+sperms
+spew
+spewing
+sphagnum
+sphenoid
+sphere
+sphere's
+spheres
+spherical
+spherically
+spheroid
+spherule
+spherules
+sphincter
+sphinx
+sphinxes
+sphygmomanometer
+sphygmomanometer's
+sphygmomanometers
+spic
+spice
+spiceberry
+spicebush
+spiced
+spices
+spicier
+spicily
+spiciness
+spicing
+spicy
+spider
+spider's
+spiders
+spiderwort
+spidery
+spied
+spiel
+spies
+spiffier
+spiffy
+spigot
+spigots
+spike
+spiked
+spikenard
+spikes
+spikier
+spiking
+spiky
+spill
+spillage
+spillage's
+spillages
+spilled
+spiller
+spilling
+spills
+spillway
+spilt
+spin
+spinach
+spinal
+spinally
+spindle
+spindled
+spindles
+spindling
+spindly
+spindrift
+spine
+spineless
+spinelessly
+spinelessness
+spines
+spinet
+spinier
+spinnaker
+spinner
+spinner's
+spinneret
+spinners
+spinney
+spinning
+spinout
+spins
+spinster
+spinsterhood
+spinsterish
+spiny
+spiracle
+spiral
+spiralled
+spiralling
+spirally
+spirals
+spirant
+spire
+spire's
+spires
+spirit
+spirited
+spiritedly
+spiritedness
+spiriting
+spiritless
+spiritlessly
+spirits
+spiritual
+spiritualise
+spiritualised
+spiritualises
+spiritualising
+spiritualism
+spiritualist
+spiritualistic
+spirituality
+spiritually
+spirituals
+spirituous
+spirogyra
+spit
+spite
+spited
+spiteful
+spitefully
+spitefulness
+spites
+spitfire
+spiting
+spits
+spitted
+spitting
+spittle
+spittoon
+spittoons
+spiv
+splash
+splashback
+splashboard
+splashdown
+splashdowns
+splashed
+splashes
+splashier
+splashily
+splashing
+splashy
+splat
+splatter
+splattered
+splay
+splayed
+splayfoot
+splayfooted
+spleen
+spleenful
+spleeny
+splendid
+splendidly
+splendiferous
+splendorous
+splendour
+splendour's
+splendours
+splenetic
+splice
+spliced
+splices
+splicing
+spline
+splint
+splinted
+splinter
+splintered
+splintering
+splinters
+splintery
+splinting
+splints
+split
+split's
+splits
+splitter
+splitter's
+splitters
+splitting
+splodge
+splotch
+splotched
+splotches
+splotchy
+splurge
+splurges
+splurging
+splutter
+spoil
+spoilable
+spoilage
+spoiled
+spoiler
+spoilers
+spoiling
+spoils
+spoilsport
+spoilt
+spoke
+spoken
+spokes
+spokeshave
+spokesman
+spokesmen
+spokespeople
+spokesperson
+spokesperson's
+spokespersons
+spokeswoman
+spoliation
+spoliator
+spondaic
+spondee
+sponge
+sponged
+sponger
+spongers
+sponges
+spongier
+sponginess
+sponging
+spongy
+sponsor
+sponsored
+sponsoring
+sponsors
+sponsorship
+spontaneity
+spontaneous
+spontaneously
+spoof
+spook
+spookier
+spookily
+spookiness
+spooky
+spool
+spooled
+spooler
+spoolers
+spooling
+spools
+spoon
+spoonbill
+spoondrift
+spooned
+spoonerism
+spoonful
+spoonfuls
+spooning
+spoons
+spoor
+sporadic
+sporadically
+sporangial
+sporangium
+spore
+spore's
+spores
+sporran
+sport
+sported
+sportier
+sportiest
+sportily
+sporting
+sportingly
+sportive
+sports
+sportscast
+sportsman
+sportsmanlike
+sportsmanship
+sportsmen
+sportswear
+sportswoman
+sportswriter
+sporty
+spot
+spot's
+spotless
+spotlessly
+spotlessness
+spotlight
+spotlight's
+spotlighted
+spotlighting
+spotlights
+spots
+spotted
+spotter
+spotter's
+spotters
+spottier
+spottily
+spottiness
+spotting
+spotty
+spousal
+spouse
+spouse's
+spouses
+spout
+spouted
+spouting
+spouts
+sprain
+sprained
+sprains
+sprang
+sprat
+sprawl
+sprawled
+sprawling
+sprawls
+spray
+sprayed
+sprayer
+spraying
+sprays
+spread
+spreader
+spreaders
+spreading
+spreads
+spreadsheet
+spreadsheets
+spree
+spree's
+sprees
+sprier
+spriest
+sprig
+sprigging
+sprightlier
+sprightliness
+sprightly
+sprigtail
+spring
+springboard
+springbok
+springboks
+springhead
+springhouse
+springier
+springiest
+springiness
+springing
+springs
+springtail
+springtails
+springtide
+springtime
+springwood
+springy
+sprinkle
+sprinkled
+sprinkler
+sprinkles
+sprinkling
+sprint
+sprinted
+sprinter
+sprinters
+sprinting
+sprints
+sprit
+sprite
+spritsail
+sprocket
+sprockets
+sprout
+sprouted
+sprouting
+sprouts
+spruce
+spruced
+sprucely
+sprucing
+sprung
+spry
+spryer
+spryest
+spryly
+spryness
+spud
+spume
+spumoni
+spun
+spunk
+spunkier
+spunkiness
+spunky
+spur
+spur's
+spurge
+spurious
+spuriously
+spuriousness
+spurn
+spurned
+spurning
+spurns
+spurred
+spurring
+spurs
+spurt
+spurted
+spurting
+spurts
+sputa
+sputnik
+sputniks
+sputter
+sputtered
+sputum
+spy
+spyglass
+spying
+squab
+squabble
+squabbled
+squabbles
+squabbling
+squabs
+squad
+squad's
+squadron
+squadron's
+squadrons
+squads
+squalid
+squalidly
+squall
+squall's
+squallier
+squalls
+squally
+squalor
+squander
+squandered
+squandering
+squanders
+square
+squared
+squarely
+squarer
+squares
+squarest
+squaring
+squash
+squashed
+squashes
+squashier
+squashing
+squashy
+squat
+squatness
+squats
+squatted
+squatter
+squatters
+squattest
+squattier
+squatting
+squatty
+squaw
+squawk
+squawked
+squawker
+squawking
+squawks
+squawroot
+squeak
+squeaked
+squeaker
+squeaking
+squeaks
+squeaky
+squeal
+squealed
+squealer
+squealing
+squeals
+squeamish
+squeamishly
+squeamishness
+squeegee
+squeegees
+squeezable
+squeeze
+squeezed
+squeezer
+squeezes
+squeezing
+squelch
+squelched
+squelcher
+squelches
+squelching
+squib
+squibs
+squid
+squids
+squiggle
+squiggled
+squiggles
+squiggling
+squiggly
+squint
+squinted
+squinter
+squinting
+squints
+squinty
+squire
+squire's
+squires
+squiring
+squirm
+squirmed
+squirming
+squirms
+squirmy
+squirrel
+squirrelfish
+squirrelly
+squirrels
+squirt
+squirted
+squirting
+squirts
+squish
+squished
+squishes
+squishier
+squishiest
+squishiness
+squishing
+squishy
+stab
+stabbed
+stabber
+stabbing
+stabile
+stabilisation
+stabilisation's
+stabilisations
+stabilise
+stabilised
+stabiliser
+stabilisers
+stabilises
+stabilising
+stabilities
+stability
+stability's
+stable
+stabled
+stableman
+stablemen
+stableness
+stables
+stabling
+stably
+stabs
+staccato
+staccatos
+stack
+stack's
+stackable
+stacked
+stacker
+stacking
+stacks
+stadium
+stadium's
+stadiums
+staff
+staff's
+staffed
+staffers
+staffing
+staffs
+stag
+stag's
+stage
+stagecoach
+stagecraft
+staged
+stagehand
+stager
+stagers
+stages
+stagflation
+stagger
+staggerbush
+staggered
+staggering
+staggeringly
+staggers
+staghound
+stagier
+staginess
+staging
+stagnancy
+stagnant
+stagnantly
+stagnate
+stagnated
+stagnates
+stagnating
+stagnation
+stags
+stagy
+staid
+staidly
+staidness
+stain
+stainable
+stained
+staining
+stainless
+stains
+stair
+stair's
+staircase
+staircase's
+staircases
+stairs
+stairway
+stairway's
+stairways
+stairwell
+stairwells
+stake
+staked
+stakeholder
+stakeout
+stakes
+staking
+stalactite
+stalactite's
+stalactites
+stalagmite
+stalagmite's
+stalagmites
+stale
+staled
+stalemate
+staleness
+staler
+stales
+stalest
+staling
+stalk
+stalked
+stalker
+stalking
+stalks
+stall
+stalled
+stalling
+stallion
+stalls
+stalwart
+stalwartly
+stalwartness
+stamen
+stamen's
+stamens
+stamina
+stammer
+stammered
+stammering
+stammers
+stamp
+stamped
+stampede
+stampeded
+stampedes
+stampeding
+stamping
+stamps
+stance
+stance's
+stances
+stanch
+stanchion
+stanchions
+stand
+standalone
+standard
+standardisation
+standardisation's
+standardisations
+standardise
+standardised
+standardises
+standardising
+standards
+standby
+standbys
+standee
+standing
+standings
+standoff
+standoffish
+standoffishly
+standoffishness
+standout
+standpipe
+standpoint
+standpoint's
+standpoints
+stands
+standstill
+stank
+stannic
+stannous
+stanza
+stanza's
+stanzas
+stapes
+staphylococcal
+staphylococcus
+staple
+stapled
+stapler
+staplers
+staples
+stapling
+star
+star's
+starboard
+starboards
+starch
+starched
+starches
+starchier
+starchiness
+starching
+starchy
+stardom
+stardust
+stare
+stared
+stares
+starfish
+starflower
+stargaze
+stargazer
+stargazes
+stargazing
+staring
+stark
+starkest
+starkly
+starkness
+starless
+starlet
+starlet's
+starlets
+starlight
+starling
+starlings
+starlit
+starred
+starrier
+starring
+starry
+stars
+start
+started
+starter
+starters
+starting
+startle
+startled
+startles
+startling
+startlingly
+starts
+starvation
+starve
+starved
+starveling
+starves
+starving
+stases
+stash
+stashed
+stashes
+stashing
+stasis
+state
+state's
+statecraft
+stated
+statehood
+statehouse
+stateless
+statelessness
+statelier
+stateliness
+stately
+statement
+statement's
+statements
+stateroom
+states
+stateside
+statesman
+statesman's
+statesmanlike
+statesmanship
+statesmen
+static
+statically
+stating
+station
+stationary
+stationed
+stationer
+stationeries
+stationery
+stationing
+stationmaster
+stations
+statistic
+statistic's
+statistical
+statistically
+statistician
+statistician's
+statisticians
+statistics
+stator
+stators
+statuary
+statue
+statue's
+statues
+statuesque
+statuesquely
+statuette
+stature
+status
+statuses
+statute
+statute's
+statutes
+statutorily
+statutory
+staunch
+staunchest
+staunchly
+staunchness
+stave
+staved
+staves
+staving
+stay
+stayed
+staying
+stays
+staysail
+stead
+steadfast
+steadfastly
+steadfastness
+steadied
+steadier
+steadies
+steadiest
+steadily
+steadiness
+steady
+steadying
+steak
+steak's
+steakhouse
+steaks
+steal
+stealer
+stealing
+steals
+stealth
+stealthier
+stealthily
+stealthy
+steam
+steamboat
+steamboat's
+steamboats
+steamed
+steamer
+steamers
+steamier
+steamily
+steaminess
+steaming
+steamroll
+steamroller
+steams
+steamship
+steamship's
+steamships
+steamy
+steatite
+steed
+steeds
+steel
+steeled
+steelhead
+steelier
+steeliness
+steeling
+steels
+steelwork
+steelworker
+steelworks
+steely
+steelyard
+steenbok
+steep
+steeped
+steeper
+steepest
+steeping
+steeple
+steeple's
+steeplebush
+steeplechase
+steeplechaser
+steeplejack
+steeples
+steeply
+steepness
+steeps
+steer
+steerage
+steerageway
+steered
+steering
+steers
+steersman
+stegosaur
+stegosaurus
+stein
+stele
+stellar
+stem
+stem's
+stemma
+stemmata
+stemmed
+stemming
+stems
+stemson
+stemware
+stench
+stench's
+stenches
+stencil
+stencil's
+stencilled
+stencilling
+stencils
+steno
+stenograph
+stenographer
+stenographer's
+stenographers
+stenographic
+stenography
+stenos
+stenotype
+stentorian
+step
+step's
+stepbrother
+stepchild
+stepchildren
+stepdaughter
+stepfather
+stephanotis
+stepladder
+stepladders
+stepmother
+stepmother's
+stepmothers
+stepparent
+steppe
+stepped
+stepper
+steppes
+stepping
+steps
+stepsister
+stepson
+stepwise
+steradian
+stereo
+stereo's
+stereochemistry
+stereograph
+stereographic
+stereographically
+stereography
+stereological
+stereomicroscope
+stereomicroscopic
+stereophonic
+stereophonically
+stereophony
+stereopticon
+stereos
+stereoscope
+stereoscopic
+stereoscopically
+stereoscopy
+stereotype
+stereotyped
+stereotypes
+stereotypic
+stereotypical
+stereotypically
+stereotyping
+stereotypy
+stereovision
+sterile
+sterilisation
+sterilisation's
+sterilisations
+sterilise
+sterilised
+sterilises
+sterilising
+sterility
+sterling
+stern
+sterna
+sternforemost
+sternly
+sternness
+sternpost
+sterns
+sternson
+sternum
+sternward
+sternwards
+sternway
+steroid
+steroidal
+steroids
+sterol
+stet
+stethoscope
+stetted
+stetting
+stevedore
+stevedores
+stew
+steward
+steward's
+stewardess
+stewardesses
+stewards
+stewardship
+stewed
+stewing
+stews
+stibnite
+stichomythia
+stichomythic
+stick
+stickball
+sticker
+stickers
+stickier
+stickiest
+stickiness
+sticking
+stickle
+stickleback
+stickled
+stickler
+stickling
+stickpin
+sticks
+stickseed
+stickup
+stickweed
+sticky
+stiff
+stiffen
+stiffened
+stiffener
+stiffeners
+stiffening
+stiffens
+stiffer
+stiffest
+stiffly
+stiffness
+stiffs
+stifle
+stifled
+stifles
+stifling
+stiflingly
+stigma
+stigmas
+stigmata
+stigmatic
+stigmatically
+stigmatisation
+stigmatisation's
+stigmatisations
+stigmatise
+stigmatised
+stigmatises
+stigmatising
+stigmatism
+stile
+stile's
+stiles
+stiletto
+still
+stillbirth
+stillbirths
+stillborn
+stilled
+stiller
+stillest
+stilling
+stillness
+stillroom
+stills
+stilly
+stilt
+stilted
+stiltedly
+stiltedness
+stilts
+stimulant
+stimulant's
+stimulants
+stimulate
+stimulated
+stimulates
+stimulating
+stimulation
+stimulations
+stimulator
+stimulators
+stimulatory
+stimuli
+stimulus
+sting
+stinger
+stingier
+stingily
+stinginess
+stinging
+stingingly
+stingray
+stingray's
+stingrays
+stings
+stingy
+stink
+stinkbug
+stinkbug's
+stinkbugs
+stinker
+stinkers
+stinkhorn
+stinking
+stinkpot
+stinks
+stinkstone
+stinkweed
+stinkwood
+stinky
+stint
+stint's
+stinted
+stinting
+stints
+stipend
+stipend's
+stipendiary
+stipends
+stipple
+stippled
+stipples
+stippling
+stipulate
+stipulated
+stipulates
+stipulating
+stipulation
+stipulations
+stipulator
+stipule
+stir
+stirred
+stirrer
+stirrer's
+stirrers
+stirring
+stirringly
+stirrings
+stirrup
+stirrups
+stirs
+stitch
+stitched
+stitches
+stitching
+stoat
+stoat's
+stoats
+stochastic
+stochastically
+stock
+stockade
+stockade's
+stockades
+stockbreeder
+stockbroker
+stockbrokerage
+stockcar
+stocked
+stocker
+stockers
+stockfish
+stockholder
+stockholder's
+stockholders
+stockier
+stockiness
+stockinet
+stocking
+stockings
+stockist
+stockjobber
+stockman
+stockpile
+stockpiling
+stockpot
+stockroom
+stocks
+stocktaking
+stocky
+stockyard
+stodgier
+stodgily
+stodginess
+stodgy
+stoic
+stoical
+stoically
+stoicism
+stoics
+stoke
+stoked
+stokehold
+stoker
+stokes
+stoking
+stole
+stole's
+stolen
+stoles
+stolid
+stolidity
+stolidly
+stoma
+stomach
+stomached
+stomacher
+stomaching
+stomachs
+stomas
+stomata
+stomp
+stomped
+stomping
+stomps
+stone
+stone's
+stonechat
+stonecrop
+stonecutter
+stonecutters
+stonecutting
+stoned
+stonefish
+stonefly
+stonemason
+stonemasonry
+stonemasons
+stoner
+stones
+stonewall
+stoneware
+stonework
+stoneworker
+stonier
+stonily
+stoniness
+stoning
+stony
+stonyhearted
+stood
+stooge
+stooges
+stool
+stools
+stoop
+stoopball
+stooped
+stooping
+stoops
+stop
+stop's
+stopcock
+stopcocks
+stopgap
+stopgap's
+stopgaps
+stoplight
+stoplights
+stopover
+stopovers
+stoppable
+stoppage
+stoppages
+stopped
+stopper
+stopper's
+stoppers
+stopping
+stopple
+stops
+stopwatch
+stopwatches
+storable
+storage
+storage's
+storages
+store
+stored
+storefront
+storefront's
+storefronts
+storehouse
+storehouse's
+storehouses
+storekeeper
+storekeepers
+storeroom
+stores
+storewide
+storey
+storied
+stories
+storing
+stork
+stork's
+storks
+storm
+stormbound
+stormed
+stormier
+stormiest
+stormily
+storminess
+storming
+storms
+stormy
+story
+story's
+storyboard
+storyboards
+storybook
+storybooks
+storyteller
+storytellers
+storytelling
+storywriter
+stoup
+stout
+stouten
+stouter
+stoutest
+stoutly
+stoutness
+stove
+stove's
+stovepipe
+stovepipes
+stoves
+stow
+stowage
+stowaway
+stowaway's
+stowaways
+stowed
+stowing
+stows
+strabismus
+straddle
+straddled
+straddles
+straddling
+strafe
+strafes
+strafing
+straggle
+straggled
+straggler
+stragglers
+straggles
+stragglier
+straggling
+straggly
+straight
+straightaway
+straightedge
+straighten
+straightened
+straightening
+straightens
+straighter
+straightest
+straightforward
+straightforwardly
+straightforwardness
+straightjacket
+straightness
+straightway
+strain
+strained
+strainer
+strainers
+straining
+strains
+strait
+straiten
+straitened
+straitening
+straitjacket
+strait-laced
+straits
+strake
+strand
+stranded
+stranding
+strandline
+strands
+strange
+strangely
+strangeness
+stranger
+stranger's
+strangers
+strangest
+strangle
+strangled
+stranglehold
+strangler
+stranglers
+strangles
+strangling
+strangulate
+strangulated
+strangulation
+strangulation's
+strangulations
+strap
+strap's
+straphang
+straphanger
+strapless
+strapped
+strapping
+straps
+strata
+stratagem
+stratagem's
+stratagems
+strategic
+strategically
+strategies
+strategist
+strategists
+strategy
+strategy's
+stratification
+stratifications
+stratified
+stratifies
+stratify
+stratifying
+stratocumulus
+stratosphere
+stratospheric
+stratum
+straw
+straw's
+strawberries
+strawberry
+strawberry's
+strawboard
+strawflower
+strawflowers
+straws
+strawworm
+stray
+stray's
+strayed
+straying
+strays
+streak
+streaked
+streakier
+streakiness
+streaking
+streaks
+streaky
+stream
+streambed
+streamed
+streamer
+streamers
+streaming
+streamlet
+streamline
+streamlined
+streamliner
+streamlines
+streamlining
+streams
+streamside
+street
+streetcar
+streetcar's
+streetcars
+streetlight
+streets
+streetwalker
+streetwalking
+strength
+strengthen
+strengthened
+strengthening
+strengthens
+strengths
+strenuous
+strenuously
+strenuousness
+streptococcal
+streptococcus
+streptomycin
+stress
+stressed
+stresses
+stressful
+stressfully
+stressing
+stressor
+stretch
+stretchable
+stretched
+stretcher
+stretchers
+stretches
+stretching
+stretchy
+strew
+strewing
+strewn
+strews
+striate
+striated
+striates
+striating
+striation
+stricken
+strict
+stricter
+strictest
+strictly
+strictness
+stricture
+strictures
+stridden
+stride
+stridence
+stridency
+strident
+stridently
+strider
+strides
+striding
+stridulate
+strife
+strike
+strikebound
+strikebreaking
+strikeout
+strikeover
+striker
+strikers
+strikes
+striking
+strikingly
+string
+string's
+stringboard
+stringcourse
+stringed
+stringency
+stringent
+stringently
+stringer
+stringers
+stringhalt
+stringier
+stringiest
+stringiness
+stringing
+strings
+stringy
+strip
+strip's
+stripe
+striped
+striper
+stripes
+stripfilm
+striping
+stripling
+strippable
+stripped
+stripper
+stripper's
+strippers
+stripping
+strips
+striptease
+stripy
+strive
+striven
+strives
+striving
+strivings
+strobe
+strobe's
+strobes
+stroboscope
+stroboscopic
+strode
+stroganoff
+stroke
+stroked
+strokes
+stroking
+stroll
+strolled
+stroller
+strolling
+strolls
+strong
+strongbox
+stronger
+strongest
+stronghold
+strongly
+strongman
+strontium
+strop
+strophe
+strophes
+strophic
+stropped
+stropping
+stroppy
+strops
+strove
+strow
+struck
+structural
+structuralism
+structurally
+structure
+structured
+structures
+structuring
+strudel
+struggle
+struggled
+struggler
+struggles
+struggling
+strum
+strummer
+strumming
+strumpet
+strung
+strut
+struts
+strutted
+strutting
+strychnine
+stub
+stub's
+stubbed
+stubbing
+stubble
+stubbly
+stubborn
+stubbornly
+stubbornness
+stubby
+stubs
+stucco
+stuccoes
+stuccowork
+stuck
+stud
+stud's
+studbook
+studbooks
+studded
+studding
+studdingsail
+student
+student's
+students
+studentship
+studentships
+studhorse
+studied
+studiedly
+studier
+studies
+studio
+studio's
+studios
+studious
+studiously
+studiousness
+studs
+studwork
+study
+studying
+stuff
+stuffed
+stuffier
+stuffiest
+stuffily
+stuffiness
+stuffing
+stuffs
+stuffy
+stultification
+stultify
+stultifying
+stumble
+stumblebum
+stumbled
+stumbles
+stumbling
+stumblingly
+stump
+stumpage
+stumped
+stumping
+stumps
+stumpy
+stun
+stung
+stunk
+stunned
+stunner
+stunning
+stunningly
+stuns
+stunt
+stunt's
+stunted
+stunting
+stunts
+stupefacient
+stupefaction
+stupefy
+stupefying
+stupendous
+stupendously
+stupid
+stupider
+stupidest
+stupidities
+stupidity
+stupidly
+stupor
+sturdier
+sturdily
+sturdiness
+sturdy
+sturgeon
+stutter
+stuttered
+stuttering
+stutters
+sty
+stye
+style
+stylebook
+styled
+styles
+styli
+styling
+stylisation
+stylisation's
+stylisations
+stylise
+stylised
+stylises
+stylish
+stylishly
+stylishness
+stylising
+stylist
+stylistic
+stylistically
+stylistics
+stylus
+styluses
+stymie
+stymied
+stymieing
+stymies
+styptic
+styrene
+suability
+suasion
+suave
+suavely
+suaveness
+suavity
+sub
+subagent
+subaltern
+subassembly
+subatomic
+subbasement
+subbing
+subcategorising
+subclass
+subclass's
+subclasses
+subcommand
+subcommands
+subcommittee
+subcommittee's
+subcommittees
+subcompact
+subcomponent
+subcomponent's
+subcomponents
+subconscious
+subconsciously
+subcontinent
+subcontract
+subcontracting
+subcontractor
+subculture
+subculture's
+subcultures
+subcutaneous
+subdirectories
+subdirectory
+subdivide
+subdivided
+subdivides
+subdividing
+subdivision
+subdivision's
+subdivisions
+subdominant
+subdue
+subdued
+subdues
+subduing
+subentries
+subentry
+subequatorial
+subfamilies
+subfamily
+subfreezing
+subgenus
+subgroup
+subgroup's
+subgroups
+subhead
+subheading
+subhuman
+subinterval
+subinterval's
+subintervals
+subjacent
+subject
+subject's
+subjected
+subjecting
+subjection
+subjective
+subjectively
+subjectivism
+subjectivist
+subjectivists
+subjectivity
+subjects
+subjoin
+subjugate
+subjugated
+subjugates
+subjugating
+subjugation
+subjugator
+subjunctive
+subkingdom
+sublease
+sublet
+sublevel
+sublicense
+sublicensed
+sublicenses
+sublicensing
+sublimate
+sublimated
+sublimates
+sublimating
+sublimation
+sublimations
+sublime
+sublimed
+sublimely
+subliminal
+subliminally
+subliming
+sublingual
+sublunary
+submachine
+submarine
+submariner
+submariners
+submarines
+submerge
+submerged
+submergence
+submerges
+submergible
+submerging
+submerse
+submersed
+submersible
+submersing
+submersion
+submission
+submission's
+submissions
+submissive
+submissively
+submissiveness
+submit
+submits
+submittal
+submitted
+submitter
+submitters
+submitting
+subnet
+subnets
+subnormal
+suborder
+subordinate
+subordinated
+subordinately
+subordinates
+subordinating
+subordination
+subordinator
+suborn
+subornation
+suborned
+suborning
+suborns
+subparagraph
+subpart
+subparts
+subphylum
+subplot
+subplots
+subpoena
+subpoenaed
+subpoenas
+subpopulation
+subpopulations
+subprogram
+subprogram's
+subprograms
+subproject
+subrogate
+subrogation
+subroutine
+subroutine's
+subroutines
+subs
+subschema
+subschema's
+subscribe
+subscribed
+subscriber
+subscribers
+subscribes
+subscribing
+subscript
+subscripted
+subscripting
+subscription
+subscription's
+subscriptions
+subscripts
+subsection
+subsection's
+subsections
+subsequence
+subsequence's
+subsequent
+subsequently
+subservience
+subservient
+subserviently
+subset
+subset's
+subsets
+subside
+subsided
+subsidence
+subsides
+subsidiaries
+subsidiary
+subsidiary's
+subsidies
+subsiding
+subsidisation
+subsidisation's
+subsidisations
+subsidise
+subsidised
+subsidiser
+subsidisers
+subsidises
+subsidising
+subsidy
+subsidy's
+subsist
+subsisted
+subsistence
+subsistent
+subsisting
+subsists
+subsoil
+subsonic
+subspace
+subspace's
+subspaces
+subspecies
+substance
+substance's
+substances
+substandard
+substantial
+substantiality
+substantially
+substantiate
+substantiated
+substantiates
+substantiating
+substantiation
+substantiations
+substantive
+substantively
+substation
+substations
+substitutability
+substitutable
+substitute
+substituted
+substitutes
+substituting
+substitution
+substitutions
+substitutive
+substrate
+substrate's
+substrates
+substratum
+substructure
+substructure's
+substructures
+subsume
+subsumed
+subsumes
+subsuming
+subsurface
+subsystem
+subsystem's
+subsystems
+subtask
+subtask's
+subtasks
+subtenant
+subtend
+subtended
+subtends
+subterfuge
+subterfuges
+subterranean
+subterraneous
+subtest
+subtitle
+subtitle's
+subtitled
+subtitles
+subtitling
+subtle
+subtleness
+subtler
+subtlest
+subtleties
+subtlety
+subtly
+subtonic
+subtopic
+subtopic's
+subtopics
+subtotal
+subtotalled
+subtotalling
+subtotals
+subtract
+subtracted
+subtracting
+subtraction
+subtractions
+subtractive
+subtracts
+subtrahend
+subtrahend's
+subtrahends
+subtropical
+subtropics
+subtype
+subtypes
+subunit
+subunit's
+subunits
+suburb
+suburb's
+suburban
+suburbanise
+suburbanised
+suburbanises
+suburbanising
+suburbanite
+suburbanites
+suburbia
+suburbs
+subvention
+subversion
+subversive
+subversively
+subversives
+subvert
+subverted
+subverting
+subverts
+subway
+subway's
+subways
+subzero
+succedaneum
+succeed
+succeeded
+succeeding
+succeeds
+success
+successes
+successful
+successfully
+successfulness
+succession
+succession's
+successions
+successive
+successively
+successiveness
+successor
+successor's
+successors
+succinct
+succinctly
+succinctness
+succotash
+succour
+succoured
+succouring
+succours
+succubus
+succulence
+succulent
+succulently
+succumb
+succumbed
+succumbing
+succumbs
+such
+suchlike
+suck
+sucked
+sucker
+suckered
+suckerfish
+suckering
+suckers
+sucking
+suckle
+suckled
+suckles
+suckling
+sucks
+sucrose
+suction
+sudden
+suddenly
+suddenness
+suds
+sudsier
+sudsy
+sue
+sued
+suede
+sues
+suet
+suffer
+sufferable
+sufferance
+suffered
+sufferer
+sufferers
+suffering
+sufferings
+suffers
+suffice
+sufficed
+suffices
+sufficiency
+sufficient
+sufficiently
+sufficing
+suffix
+suffixation
+suffixed
+suffixes
+suffixing
+suffocate
+suffocated
+suffocates
+suffocating
+suffocation
+suffocative
+suffragan
+suffrage
+suffragette
+suffragettes
+suffragist
+suffragists
+suffuse
+suffused
+suffuses
+suffusing
+suffusion
+sugar
+sugarcane
+sugared
+sugarhouse
+sugaring
+sugarloaf
+sugarplum
+sugars
+sugary
+suggest
+suggested
+suggestibility
+suggestible
+suggesting
+suggestion
+suggestion's
+suggestions
+suggestive
+suggestively
+suggestiveness
+suggests
+suicidal
+suicide
+suicide's
+suicides
+suing
+suit
+suit's
+suitability
+suitable
+suitableness
+suitably
+suitcase
+suitcase's
+suitcases
+suite
+suited
+suites
+suiting
+suitor
+suitor's
+suitors
+suits
+sukiyaki
+sulk
+sulked
+sulkies
+sulkily
+sulkiness
+sulking
+sulks
+sulky
+sullage
+sullen
+sullenly
+sullenness
+sullied
+sullies
+sully
+sullying
+sulphanilamide
+sulphate
+sulphates
+sulphide
+sulphite
+sulphonamide
+sulphur
+sulphured
+sulphuric
+sulphurous
+sultan
+sultan's
+sultana
+sultanate
+sultans
+sultrier
+sultrily
+sultriness
+sultry
+sum
+sum's
+sumac
+summa
+summand
+summand's
+summands
+summaries
+summarily
+summarisation
+summarisation's
+summarisations
+summarise
+summarised
+summariser
+summarisers
+summarises
+summarising
+summary
+summary's
+summated
+summates
+summating
+summation
+summation's
+summations
+summed
+summer
+summer's
+summered
+summerhouse
+summering
+summers
+summersault
+summertime
+summerweight
+summerwood
+summery
+summing
+summit
+summitry
+summon
+summoned
+summoning
+summons
+summonses
+sump
+sumptuary
+sumptuous
+sumptuously
+sumptuousness
+sums
+sun
+sun's
+sunbaked
+sunbath
+sunbathe
+sunbather
+sunbeam
+sunbeam's
+sunbeams
+sunbird
+sunbonnet
+sunbow
+sunburn
+sunburnt
+sunburst
+sunbursts
+sundae
+sundaes
+sunder
+sundered
+sundering
+sunders
+sundew
+sundial
+sundials
+sundog
+sundown
+sundowner
+sundowners
+sundress
+sundresses
+sundries
+sundry
+sunfish
+sunflower
+sung
+sunglass
+sunglasses
+sunglow
+sunhat
+sunk
+sunken
+sunlamp
+sunless
+sunlight
+sunlit
+sunned
+sunnier
+sunning
+sunny
+sunray
+sunrise
+sunrises
+sunroof
+suns
+sunscald
+sunscreen
+sunscreen's
+sunscreens
+sunset
+sunsets
+sunshade
+sunshades
+sunshine
+sunshiny
+sunspot
+sunstroke
+suntan
+suntanned
+suntrap
+sunup
+sunward
+sunwards
+sup
+super
+superabundance
+superabundant
+superabundantly
+superannuate
+superannuated
+superb
+superbly
+supercargo
+supercharge
+supercharger
+supercilious
+superciliously
+superciliousness
+supercomputer
+supercomputer's
+supercomputers
+supercomputing
+superconductivity
+superconductor
+superconductors
+supercritical
+superego
+superego's
+superegos
+supererogation
+supererogatory
+superficial
+superficiality
+superficially
+superficies
+superfine
+superfluities
+superfluity
+superfluity's
+superfluous
+superfluously
+superheat
+superheats
+superhero
+superhet
+superheterodyne
+superhighway
+superhighways
+superhuman
+superhumanly
+superimpose
+superimposed
+superimposes
+superimposing
+superimposition
+superintend
+superintendence
+superintendent
+superintendent's
+superintendents
+superior
+superior's
+superiority
+superiorly
+superiors
+superlative
+superlatively
+superlatives
+superlunary
+superman
+supermarket
+supermarket's
+supermarkets
+supermodel
+supermodels
+supernal
+supernatant
+supernatural
+supernaturalism
+supernaturally
+supernormal
+supernova
+supernova's
+supernovae
+supernovas
+supernumerary
+superpose
+superposed
+superposes
+superposing
+superposition
+superpower
+superpowers
+supersaturate
+supersaturated
+superscript
+superscripted
+superscripting
+superscription
+superscripts
+supersede
+superseded
+supersedes
+superseding
+supersensitive
+superset
+superset's
+supersets
+supersonic
+supersonically
+supersonics
+superstar
+superstition
+superstition's
+superstitions
+superstitious
+superstitiously
+superstructure
+superstructures
+supertonic
+supervene
+supervened
+supervise
+supervised
+supervisee
+supervises
+supervising
+supervision
+supervisions
+supervisor
+supervisor's
+supervisors
+supervisory
+supine
+supinely
+supper
+supper's
+suppers
+supping
+supplant
+supplanted
+supplanting
+supplants
+supple
+supplely
+supplement
+supplemental
+supplementary
+supplementation
+supplemented
+supplementing
+supplements
+suppleness
+suppler
+suppliant
+suppliantly
+supplicant
+supplicant's
+supplicants
+supplicate
+supplicating
+supplication
+supplied
+supplier
+supplier's
+suppliers
+supplies
+supply
+supply's
+supplying
+support
+supportability
+supportable
+supportably
+supported
+supporter
+supporters
+supporting
+supportive
+supportively
+supports
+supposable
+suppose
+supposed
+supposedly
+supposes
+supposing
+supposition
+supposition's
+suppositional
+suppositions
+suppositious
+supposititious
+suppositories
+suppository
+suppress
+suppressant
+suppressed
+suppresses
+suppressible
+suppressing
+suppression
+suppressions
+suppressive
+suppressor
+suppressors
+suppurate
+suppuration
+supra
+supraliminal
+supranational
+suprarenal
+supremacist
+supremacy
+supreme
+supremely
+supremo
+surcease
+surcharge
+surcharged
+surcharges
+surcharging
+surd
+sure
+sure-fire
+surefooted
+surefootedness
+surely
+sureness
+surer
+surest
+sureties
+surety
+surf
+surface
+surfaced
+surfaces
+surfacing
+surfactant
+surfactants
+surfbird
+surfbirds
+surfboard
+surfboarder
+surfboards
+surfboat
+surfboats
+surfcasting
+surfeit
+surfeited
+surfeits
+surfer
+surfer's
+surfers
+surfing
+surfperch
+surge
+surged
+surgeon
+surgeon's
+surgeonfish
+surgeons
+surgeries
+surgery
+surges
+surgical
+surgically
+surging
+surlier
+surliness
+surly
+surmise
+surmised
+surmises
+surmising
+surmount
+surmountable
+surmounted
+surmounting
+surmounts
+surname
+surname's
+surnamed
+surnames
+surpass
+surpassed
+surpasses
+surpassing
+surpassingly
+surplice
+surplus
+surplus's
+surpluses
+surprise
+surprise's
+surprised
+surprises
+surprising
+surprisingly
+surreal
+surrealism
+surrealist
+surrealistic
+surrealistically
+surrealists
+surrender
+surrendered
+surrendering
+surrenders
+surreptitious
+surreptitiously
+surreptitiousness
+surrey
+surreys
+surrogate
+surrogate's
+surrogates
+surround
+surrounded
+surrounding
+surroundings
+surrounds
+surtax
+surveillance
+surveillances
+survey
+surveyed
+surveying
+surveyor
+surveyor's
+surveyors
+surveys
+survivability
+survivable
+survival
+survivalist
+survivalists
+survivals
+survive
+survived
+survives
+surviving
+survivor
+survivor's
+survivors
+survivorship
+susceptance
+susceptibility
+susceptible
+susceptive
+sushi
+suspect
+suspected
+suspecting
+suspects
+suspend
+suspended
+suspender
+suspender's
+suspenders
+suspending
+suspends
+suspense
+suspenseful
+suspension
+suspensions
+suspensor
+suspicion
+suspicion's
+suspicions
+suspicious
+suspiciously
+suspiciousness
+suspiration
+suspire
+suspired
+suspiring
+suss
+sustain
+sustainable
+sustained
+sustaining
+sustains
+sustenance
+sustentation
+sustentative
+sustention
+susurration
+susurrus
+sutra
+suttee
+suture
+sutured
+sutures
+suturing
+suzerain
+suzerainty
+svelte
+sveltely
+swab
+swabbed
+swabbing
+swabs
+swaddle
+swaddled
+swaddling
+swag
+swage
+swagger
+swaggered
+swaggering
+swaging
+swagman
+swain
+swain's
+swains
+swale
+swallow
+swallowed
+swallowing
+swallows
+swallowtail
+swam
+swami
+swamp
+swamped
+swampier
+swamping
+swampland
+swampland's
+swamplands
+swamps
+swampy
+swan
+swan's
+swank
+swanker
+swankier
+swanky
+swanlike
+swans
+swansdown
+swanskin
+swap
+swappable
+swapped
+swapper
+swapper's
+swappers
+swapping
+swaps
+sward
+swarf
+swarm
+swarmed
+swarming
+swarms
+swart
+swarthier
+swarthiness
+swarthy
+swash
+swashbuckler
+swashbuckling
+swastika
+swat
+swatch
+swatches
+swath
+swath's
+swathe
+swathed
+swathes
+swathing
+swats
+swatted
+swatter
+swatting
+sway
+swayback
+swaybacked
+swayed
+swaying
+sways
+swear
+swearing
+swears
+swearword
+sweat
+sweatband
+sweatbox
+sweated
+sweater
+sweaters
+sweatier
+sweatiness
+sweating
+sweatpants
+sweats
+sweatshirt
+sweatshop
+sweatshop's
+sweatshops
+sweaty
+sweep
+sweepback
+sweeper
+sweepers
+sweeping
+sweepingly
+sweepings
+sweeps
+sweepstake
+sweepstakes
+sweet
+sweetbread
+sweetbread's
+sweetbreads
+sweetbrier
+sweeten
+sweetened
+sweetener
+sweeteners
+sweetening
+sweetens
+sweeter
+sweetest
+sweetheart
+sweetheart's
+sweethearts
+sweetie
+sweetie's
+sweeties
+sweetish
+sweetly
+sweetmeat
+sweetness
+sweets
+sweetshop
+sweetsop
+swell
+swelled
+swellhead
+swellheaded
+swelling
+swellings
+swells
+swelter
+sweltered
+sweltering
+swelteringly
+swept
+sweptback
+swerve
+swerved
+swerves
+swerving
+swift
+swifter
+swiftest
+swiftly
+swiftness
+swig
+swigging
+swill
+swim
+swimmer
+swimmer's
+swimmeret
+swimmers
+swimming
+swimmingly
+swims
+swimsuit
+swimsuit's
+swimsuits
+swindle
+swindled
+swindler
+swindles
+swindling
+swine
+swineherd
+swinepox
+swing
+swingeing
+swinger
+swingers
+swingier
+swinging
+swings
+swingy
+swinish
+swinishly
+swinishness
+swipe
+swiped
+swipes
+swiping
+swirl
+swirled
+swirling
+swirls
+swish
+swished
+swishier
+swishy
+switch
+switch's
+switchback
+switchback's
+switchbacks
+switchblade
+switchboard
+switchboard's
+switchboards
+switched
+switcher
+switchers
+switches
+switchgear
+switching
+switchman
+switchmen
+switchmen's
+switchyard
+swivel
+swivelled
+swivelling
+swivels
+swizzle
+swollen
+swoon
+swooned
+swooning
+swoons
+swoop
+swooped
+swooping
+swoops
+swoosh
+sword
+sword's
+swordbill
+swordfight
+swordfight's
+swordfights
+swordfish
+swordplay
+swords
+swordsman
+swordsmanship
+swordsmen
+swordstick
+swordsticks
+swordtail
+swore
+sworn
+swot
+swots
+swotted
+swotting
+swum
+swung
+sybarite
+sycamore
+sycophancy
+sycophant
+sycophantic
+sycophantically
+sycophantism
+sycophants
+syllabi
+syllabic
+syllabically
+syllabicate
+syllabication
+syllabicity
+syllabification
+syllabify
+syllable
+syllable's
+syllables
+syllabub
+syllabus
+syllogism
+syllogism's
+syllogisms
+syllogistic
+syllogistically
+sylph
+sylphlike
+sylvan
+sym
+symbiosis
+symbiotic
+symbiotically
+symbol
+symbol's
+symbolic
+symbolical
+symbolically
+symbolisation
+symbolisation's
+symbolisations
+symbolise
+symbolised
+symbolises
+symbolising
+symbolism
+symbolisms
+symbolist
+symbolists
+symbols
+symmetric
+symmetrical
+symmetrically
+symmetries
+symmetry
+symmetry's
+sympathetic
+sympathetically
+sympathies
+sympathise
+sympathised
+sympathiser
+sympathisers
+sympathises
+sympathising
+sympathy
+sympathy's
+sympatric
+symphonic
+symphonies
+symphony
+symphony's
+symposia
+symposium
+symposiums
+symptom
+symptom's
+symptomatic
+symptomatically
+symptoms
+synagogue
+synagogues
+synapse
+synapse's
+synapses
+synaptic
+sync
+synch
+synching
+synchrocyclotron
+synchroflash
+synchromesh
+synchronic
+synchronically
+synchronisation
+synchronisation's
+synchronisations
+synchronise
+synchronised
+synchroniser
+synchronisers
+synchronises
+synchronising
+synchronism
+synchronistic
+synchronous
+synchronously
+synchrony
+synchrotron
+syncing
+synclinal
+syncline
+syncopate
+syncopated
+syncopation
+syncope
+syncretism
+syncretistic
+syndic
+syndicalism
+syndicate
+syndicated
+syndicates
+syndicating
+syndication
+syndics
+syndrome
+syndrome's
+syndromes
+synecdoche
+synergetic
+synergic
+synergism
+synergist
+synergistic
+synergistically
+synergy
+synod
+synods
+synonym
+synonym's
+synonymous
+synonymously
+synonyms
+synonymy
+synopses
+synopsis
+synopsise
+synoptic
+synoptically
+syntactic
+syntactical
+syntactically
+syntax
+syntaxes
+syntheses
+synthesis
+synthesise
+synthesised
+synthesiser
+synthesisers
+synthesises
+synthesising
+synthetic
+synthetically
+synthetics
+syphilis
+syphilitic
+syringe
+syringed
+syringes
+syringing
+syrup
+syrupy
+sys
+system
+system's
+systematic
+systematically
+systematisation
+systematisation's
+systematisations
+systematise
+systematised
+systematises
+systematising
+systemic
+systemically
+systemisation
+systemisation's
+systemisations
+systemise
+systemises
+systems
+systole
+systolic
+tab
+tabard
+tabbed
+tabbies
+tabbing
+tabby
+tabernacle
+tabernacle's
+tabernacles
+tablature
+table
+tableau
+tableau's
+tableaux
+tablecloth
+tablecloths
+tabled
+tableland
+tables
+tablespoon
+tablespoon's
+tablespoonful
+tablespoonful's
+tablespoonfuls
+tablespoons
+tablet
+tablet's
+tabletop
+tabletop's
+tabletops
+tablets
+tableware
+tabling
+tabloid
+tabloids
+taboo
+taboo's
+taboos
+tabor
+tabors
+tabs
+tabular
+tabularisation
+tabularisation's
+tabularisations
+tabularise
+tabulate
+tabulated
+tabulates
+tabulating
+tabulation
+tabulations
+tabulator
+tabulator's
+tabulators
+tachograph
+tachometer
+tachometer's
+tachometers
+tachometry
+tacit
+tacitly
+taciturn
+taciturnity
+tack
+tacked
+tackier
+tackily
+tackiness
+tacking
+tackle
+tackle's
+tackled
+tackler
+tackles
+tackling
+tacks
+tacky
+taco
+taconite
+tacos
+tact
+tactful
+tactfully
+tactfulness
+tactic
+tactical
+tactically
+tactician
+tactics
+tactile
+tactilely
+tactility
+tactless
+tactlessly
+tactlessness
+tactual
+tactually
+tad
+tadpole
+tadpoles
+taffeta
+taffies
+taffy
+tag
+tag's
+tagalong
+tagged
+tagging
+tags
+taiga
+tail
+tailback
+tailboard
+tailbone
+tailcoat
+tailed
+tailgate
+tailgated
+tailgater
+tailgating
+tailing
+tailings
+tailless
+taillight
+taillight's
+taillights
+tailor
+tailorbird
+tailored
+tailoring
+tailors
+tailpiece
+tailpipe
+tailplane
+tailrace
+tails
+tailskid
+tailspin
+tailspin's
+tailspins
+tailstock
+tailwind
+tailwind's
+tailwinds
+taint
+tainted
+taintless
+taints
+take
+takeaway
+takedown
+taken
+takeoff
+takeoffs
+takeout
+takeover
+takeovers
+taker
+takers
+takes
+taking
+takings
+talc
+talcum
+tale
+tale's
+talebearer
+talent
+talented
+talents
+tales
+talisman
+talismanic
+talk
+talkative
+talkatively
+talkativeness
+talked
+talker
+talkers
+talkie
+talking
+talks
+talky
+tall
+tallboy
+taller
+tallest
+tallied
+tallies
+tallness
+tallow
+tally
+tallyho
+tallying
+tallyman
+talmudic
+talon
+talons
+talus
+tam
+tamale
+tamarack
+tamarind
+tamarisk
+tambour
+tame
+tameable
+tamed
+tamely
+tameness
+tamer
+tames
+tamest
+taming
+tamp
+tamper
+tampered
+tampering
+tamperproof
+tampers
+tamping
+tampon
+tan
+tanager
+tanbark
+tandem
+tang
+tangelo
+tangency
+tangent
+tangent's
+tangential
+tangentially
+tangents
+tangerine
+tangibility
+tangible
+tangibly
+tangier
+tangle
+tangled
+tangles
+tangling
+tango
+tangos
+tangy
+tank
+tankard
+tanked
+tanker
+tankers
+tanking
+tanks
+tanned
+tanner
+tanner's
+tanners
+tannery
+tannest
+tannic
+tannin
+tanning
+tans
+tansies
+tansy
+tantalisation
+tantalisation's
+tantalisations
+tantalise
+tantalised
+tantaliser
+tantalisers
+tantalises
+tantalising
+tantalisingly
+tantalite
+tantalum
+tantamount
+tantrum
+tantrum's
+tantrums
+tap
+tap's
+tape
+taped
+tapeline
+taper
+tapered
+tapering
+tapers
+tapes
+tapestries
+tapestry
+tapestry's
+tapeworm
+taping
+tapings
+tapioca
+tapir
+tapirs
+tapped
+tappet
+tappets
+tapping
+taproom
+taprooms
+taproot
+taproot's
+taproots
+taps
+tapster
+tapsters
+tar
+tarantella
+tarantula
+tarantulas
+tarbush
+tardier
+tardily
+tardiness
+tardy
+tare
+target
+targeted
+targeting
+targets
+tariff
+tariff's
+tariffs
+tarlatan
+tarmac
+tarmacadam
+tarn
+tarnish
+tarnished
+tarnishes
+tarnishing
+taro
+taros
+tarot
+tarp
+tarpaper
+tarpapered
+tarpaulin
+tarpaulins
+tarpon
+tarpons
+tarragon
+tarred
+tarriance
+tarried
+tarries
+tarring
+tarry
+tarrying
+tars
+tarsal
+tarsi
+tarsier
+tarsus
+tart
+tartan
+tartar
+tartlet
+tartlets
+tartly
+tartness
+tarts
+task
+tasked
+tasking
+taskmaster
+taskmistress
+tasks
+tassel
+tassel's
+tasselled
+taste
+tasted
+tasteful
+tastefully
+tastefulness
+tasteless
+tastelessly
+tastelessness
+tastemaker
+taster
+tasters
+tastes
+tastier
+tastily
+tastiness
+tasting
+tasty
+tat
+tater
+tatted
+tatter
+tatterdemalion
+tattered
+tatting
+tattle
+tattled
+tattler
+tattles
+tattletale
+tattling
+tattoo
+tattooed
+tattoos
+tatty
+taught
+taunt
+taunted
+taunting
+tauntingly
+taunts
+taupe
+taut
+tauten
+tautened
+tautening
+tautly
+tautness
+tautological
+tautologically
+tautologies
+tautology
+tautology's
+tavern
+tavern's
+taverna
+taverns
+taw
+tawdrier
+tawdrily
+tawdriness
+tawdry
+tawnier
+tawny
+taws
+tawse
+tax
+taxability
+taxable
+taxably
+taxation
+taxed
+taxes
+taxi
+taxi's
+taxicab
+taxicab's
+taxicabs
+taxidermist
+taxidermist's
+taxidermists
+taxidermy
+taxied
+taxies
+taxiing
+taximeter
+taximeter's
+taximeters
+taxing
+taxingly
+taxis
+taxiway
+taxiway's
+taxiways
+taxonomic
+taxonomically
+taxonomist
+taxonomist's
+taxonomists
+taxonomy
+taxpayer
+taxpayer's
+taxpayers
+taxpaying
+tea
+teacake
+teacart
+teach
+teachable
+teacher
+teacher's
+teachers
+teaches
+teaching
+teachings
+teacup
+teacupful
+teahouse
+teahouses
+teak
+teak's
+teakettle
+teaks
+teakwood
+teal
+teals
+team
+team's
+teamed
+teaming
+team-mate
+teams
+teamster
+teamsters
+teamwork
+teapot
+teapots
+tear
+tear's
+teardown
+teardrop
+teardrops
+tearful
+tearfully
+tearfulness
+teargas
+tearing
+tearjerker
+tearless
+tearlessly
+tearoom
+tearooms
+tears
+tearstain
+tearstained
+teary
+teas
+tease
+teased
+teasel
+teaselled
+teaselling
+teaser
+teases
+teashop
+teasing
+teasingly
+teaspoon
+teaspoon's
+teaspoonful
+teaspoonful's
+teaspoonfuls
+teaspoons
+teat
+teatime
+teats
+tech
+technetium
+technical
+technicalities
+technicality
+technicality's
+technically
+technician
+technician's
+technicians
+technique
+technique's
+techniques
+technocracy
+technocrat
+technocratic
+technologic
+technological
+technologically
+technologies
+technologist
+technologist's
+technologists
+technology
+technology's
+tectonic
+tectonics
+tedious
+tediously
+tediousness
+tedium
+tee
+teeing
+teem
+teemed
+teeming
+teems
+teen
+teenage
+teenaged
+teenager
+teenagers
+teenier
+teens
+teensier
+teensy
+teeny
+teenybopper
+tees
+teeter
+teeterboard
+teetering
+teeth
+teethe
+teethed
+teethes
+teething
+teetotal
+teetotalism
+teetotaller
+tegument
+tektite
+tektites
+telecast
+telecaster
+telecom
+telecommunicate
+telecommunication
+telecommunications
+teleconference
+teleconference's
+teleconferenced
+teleconferences
+teleconferencing
+telegram
+telegram's
+telegrams
+telegraph
+telegraphed
+telegrapher
+telegraphers
+telegraphic
+telegraphically
+telegraphing
+telegraphs
+telegraphy
+telekinesis
+telekinetic
+telekinetically
+telemeter
+telemeter's
+telemeters
+telemetric
+telemetrically
+telemetry
+teleological
+teleology
+telepathic
+telepathically
+telepathy
+telephone
+telephoned
+telephones
+telephonic
+telephonically
+telephoning
+telephonist
+telephonists
+telephony
+telephoto
+telephotographic
+telephotography
+teleplay
+teleprinter
+teleprocessing
+teleprompter
+telescope
+telescoped
+telescopes
+telescopic
+telescopically
+telescoping
+teletext
+telethon
+teletype
+teletype's
+teletypes
+teletypewriter
+televise
+televised
+televises
+televising
+television
+televisions
+telexed
+telexes
+telexing
+tell
+teller
+tellers
+telling
+tellingly
+tells
+telltale
+telltale's
+telltales
+tellurian
+telluric
+telluride
+tellurium
+telly
+telnet
+telnets
+temblor
+temerarious
+temerariously
+temerity
+temp
+temper
+tempera
+temperament
+temperamental
+temperamentally
+temperaments
+temperance
+temperate
+temperately
+temperateness
+temperature
+temperature's
+temperatures
+tempered
+tempering
+tempers
+tempest
+tempests
+tempestuous
+tempestuously
+tempestuousness
+tempi
+template
+template's
+templates
+temple
+temple's
+temples
+tempo
+temporal
+temporality
+temporally
+temporaries
+temporarily
+temporary
+temporisation
+temporisation's
+temporisations
+temporise
+temporised
+temporiser
+temporiser's
+temporisers
+temporises
+temporising
+tempos
+tempt
+temptation
+temptation's
+temptations
+tempted
+tempter
+tempters
+tempting
+temptingly
+temptress
+tempts
+tempura
+ten
+ten's
+tenability
+tenable
+tenably
+tenacious
+tenaciously
+tenaciousness
+tenacity
+tenancies
+tenancy
+tenant
+tenant's
+tenantable
+tenantless
+tenants
+tend
+tended
+tendencies
+tendency
+tendentious
+tendentiously
+tendentiousness
+tender
+tendered
+tenderfoot
+tendering
+tenderisation
+tenderise
+tenderised
+tenderiser
+tenderises
+tenderising
+tenderloin
+tenderly
+tenderness
+tenders
+tending
+tendon
+tendons
+tendril
+tendrils
+tends
+tenebrous
+tenement
+tenement's
+tenements
+tenet
+tenets
+tenfold
+tennis
+tenor
+tenor's
+tenors
+tenpin
+tenpins
+tens
+tense
+tensed
+tensely
+tenseness
+tenser
+tenses
+tensest
+tensile
+tensing
+tension
+tensional
+tensioned
+tensioning
+tensionless
+tensions
+tensor
+tensor's
+tensors
+tent
+tentacle
+tentacles
+tentative
+tentatively
+tentativeness
+tented
+tenterhook
+tenterhooks
+tenth
+tenths
+tenting
+tentmaker
+tents
+tenuous
+tenuously
+tenuousness
+tenure
+tenured
+tenures
+tepee
+tepees
+tepid
+tepidity
+tepidly
+tepidness
+tequila
+tequila's
+teratology
+terbium
+tercentenary
+tercentennial
+tergiversate
+tergiversation
+teriyaki
+term
+termagant
+termed
+terminable
+terminal
+terminal's
+terminally
+terminals
+terminate
+terminated
+terminates
+terminating
+termination
+terminations
+terminative
+terminator
+terminator's
+terminators
+terming
+termini
+terminological
+terminologically
+terminologies
+terminology
+terminus
+termite
+termites
+terms
+tern
+ternary
+ternate
+terpsichorean
+terrace
+terraced
+terraces
+terracing
+terrain
+terrain's
+terrains
+terrapin
+terrapins
+terrarium
+terrazzo
+terrene
+terrestrial
+terrestrial's
+terrestrially
+terrestrials
+terrible
+terribleness
+terribly
+terrier
+terrier's
+terriers
+terries
+terrific
+terrifically
+terrified
+terrifies
+terrify
+terrifying
+terrifyingly
+terrine
+territorial
+territorialism
+territoriality
+territorially
+territories
+territory
+territory's
+terror
+terror's
+terrorisation
+terrorisation's
+terrorisations
+terrorise
+terrorised
+terrorises
+terrorising
+terrorism
+terrorist
+terrorist's
+terrorists
+terrors
+terry
+terse
+tersely
+terseness
+terser
+tersest
+tertian
+tertiary
+tessellate
+tessellated
+tessellates
+tessellation
+test
+test's
+testability
+testable
+testacy
+testament
+testament's
+testamentary
+testaments
+testate
+testator
+testator's
+testators
+testatrix
+testcross
+tested
+tester
+tester's
+testers
+testes
+testicle
+testicle's
+testicles
+testicular
+testier
+testified
+testifier
+testifiers
+testifies
+testify
+testifying
+testily
+testimonial
+testimonials
+testimonies
+testimony
+testimony's
+testiness
+testing
+testis
+testosterone
+tests
+testy
+tetanus
+tetchier
+tetchy
+tether
+tetherball
+tethered
+tethering
+tethers
+tetra
+tetrachloride
+tetracycline
+tetrad
+tetraethyl
+tetragonal
+tetrahedral
+tetrahedron
+tetrameter
+tetrarch
+tetravalent
+text
+text's
+textbook
+textbook's
+textbooks
+textile
+textile's
+textiles
+texts
+textual
+textually
+textural
+texturally
+texture
+textured
+textures
+texturing
+thalamic
+thalamus
+thalassic
+thalidomide
+thallium
+than
+thane
+thank
+thanked
+thankful
+thankfully
+thankfulness
+thanking
+thankless
+thanklessly
+thanklessness
+thanks
+thanksgiving
+thanksgiving's
+thanksgivings
+thankworthy
+that
+that'd
+that'll
+that's
+thatch
+thatched
+thatches
+thatching
+thaumaturgy
+thaw
+thawed
+thawing
+thaws
+the
+theatre
+theatre's
+theatregoer
+theatregoer's
+theatregoers
+theatregoing
+theatres
+theatrical
+theatricality
+theatrically
+theatricals
+theatrics
+theca
+thecae
+thee
+theft
+theft's
+thefts
+their
+theirs
+theism
+theist
+theist's
+theistic
+theistically
+theists
+them
+thematic
+thematically
+theme
+theme's
+themes
+themselves
+then
+thence
+thenceforth
+thenceforward
+thenceforwards
+theocracy
+theocrat
+theocratic
+theologian
+theologian's
+theologians
+theological
+theologically
+theologies
+theologise
+theologised
+theologises
+theologising
+theology
+theorem
+theorem's
+theorems
+theoretic
+theoretical
+theoretically
+theoretician
+theoreticians
+theories
+theorisation
+theorisation's
+theorisations
+theorise
+theorised
+theoriser
+theorisers
+theorises
+theorising
+theorist
+theorist's
+theorists
+theory
+theory's
+theosophical
+theosophist
+theosophy
+therapeutic
+therapeutically
+therapeutics
+therapies
+therapist
+therapist's
+therapists
+therapy
+therapy's
+there
+there'd
+there'll
+there's
+thereabout
+thereabouts
+thereafter
+thereat
+thereby
+therefore
+therein
+thereinafter
+thereof
+thereon
+thereto
+theretofore
+thereunto
+thereupon
+therewith
+therewithal
+thermal
+thermally
+thermals
+thermion
+thermionic
+thermistor
+thermite
+thermo
+thermochemist
+thermocline
+thermocouple
+thermocouples
+thermodynamic
+thermodynamically
+thermodynamics
+thermoelectric
+thermoelectricity
+thermoform
+thermoformed
+thermoforming
+thermogram
+thermograph
+thermoluminescence
+thermoluminescent
+thermometer
+thermometer's
+thermometers
+thermometric
+thermometry
+thermonuclear
+thermopile
+thermoplastic
+thermoregulation
+thermoregulatory
+thermos
+thermosetting
+thermosphere
+thermostat
+thermostat's
+thermostatic
+thermostatically
+thermostats
+thermosyphon
+thesauri
+thesaurus
+these
+theses
+thesis
+thespian
+thespians
+theta
+thetas
+theurgist
+they
+they'd
+they'll
+they're
+they've
+thiamine
+thick
+thicken
+thickened
+thickener
+thickeners
+thickening
+thickens
+thicker
+thickest
+thicket
+thicket's
+thicketed
+thickets
+thickhead
+thickly
+thickness
+thickset
+thief
+thieve
+thievery
+thieves
+thieving
+thievish
+thievishly
+thievishness
+thigh
+thighbone
+thighs
+thimble
+thimble's
+thimbleberry
+thimbleful
+thimbleful's
+thimblerig
+thimbles
+thimbleweed
+thin
+thing
+thingamabob
+thingamajig
+thingamajig's
+thingamajigs
+things
+think
+thinkable
+thinker
+thinkers
+thinking
+thinks
+thinly
+thinned
+thinner
+thinners
+thinness
+thinnest
+thinning
+thins
+thiopental
+third
+thirdly
+thirds
+thirst
+thirsted
+thirstier
+thirstily
+thirstiness
+thirsts
+thirsty
+thirteen
+thirteenth
+thirties
+thirtieth
+thirty
+this
+this'll
+thistle
+thistledown
+thistly
+thither
+thitherto
+tholepin
+thong
+thoraces
+thoracic
+thorax
+thoraxes
+thorium
+thorn
+thorn's
+thornback
+thornier
+thorniness
+thorns
+thorny
+thorough
+thoroughbred
+thoroughfare
+thoroughfare's
+thoroughfares
+thoroughgoing
+thoroughly
+thoroughness
+thoroughpaced
+thoroughpin
+thorp
+those
+thou
+though
+thought
+thought's
+thoughtful
+thoughtfully
+thoughtfulness
+thoughtless
+thoughtlessly
+thoughtlessness
+thoughts
+thousand
+thousands
+thousandth
+thousandths
+thraldom
+thrall
+thrash
+thrashed
+thrasher
+thrashes
+thrashing
+thread
+threadbare
+threaded
+threadfin
+threading
+threadlike
+threads
+threadworm
+threat
+threaten
+threatened
+threatening
+threateningly
+threatens
+threats
+three
+three's
+threefold
+threes
+threescore
+threesome
+threnody
+thresh
+threshed
+thresher
+threshing
+threshold
+threshold's
+thresholds
+threw
+thrice
+thrift
+thriftier
+thriftily
+thriftiness
+thriftless
+thriftlessly
+thrifty
+thrill
+thrilled
+thriller
+thrillers
+thrilling
+thrillingly
+thrills
+thrive
+thrived
+thriven
+thrives
+thriving
+thro
+throat
+throated
+throatier
+throatily
+throatiness
+throatlatch
+throats
+throaty
+throb
+throbbed
+throbbing
+throbs
+throe
+throes
+thrombi
+thrombin
+thromboses
+thrombosis
+thrombus
+throne
+throne's
+thrones
+throng
+throng's
+thronging
+throngs
+throttle
+throttled
+throttlehold
+throttles
+throttling
+through
+throughout
+throughput
+throughway
+throve
+throw
+throwaway
+throwback
+thrower
+throwing
+thrown
+throws
+thrum
+thrumming
+thrush
+thrushes
+thrust
+thruster
+thrusters
+thrusting
+thrusts
+thud
+thudded
+thudding
+thuds
+thug
+thug's
+thuggee
+thugs
+thulium
+thumb
+thumbed
+thumbhole
+thumbing
+thumbnail
+thumbnut
+thumbprint
+thumbprint's
+thumbprints
+thumbs
+thumbscrew
+thumbtack
+thumbtack's
+thumbtacks
+thump
+thumped
+thumper
+thumping
+thumps
+thunder
+thunderbird
+thunderbolt
+thunderbolt's
+thunderbolts
+thunderclap
+thunderclaps
+thundercloud
+thundercloud's
+thunderclouds
+thundered
+thunderhead
+thundering
+thunderous
+thunderously
+thunders
+thundershower
+thundershower's
+thundershowers
+thunderstone
+thunderstorm
+thunderstorm's
+thunderstorms
+thunderstruck
+thus
+thusly
+thwack
+thwart
+thwarted
+thwarter
+thwarting
+thwarts
+thy
+thyme
+thyme's
+thymes
+thymus
+thyroid
+thyroidal
+thyroids
+thyroxin
+thyself
+tiara
+tibia
+tic
+tick
+ticked
+ticker
+tickers
+ticket
+ticket's
+ticketed
+ticketing
+tickets
+ticking
+tickle
+tickled
+tickler
+tickles
+tickling
+ticklish
+ticklishness
+ticks
+tickseed
+ticktacktoe
+tidal
+tiddler
+tiddly
+tiddlywinks
+tide
+tided
+tideland
+tidelands
+tidemark
+tides
+tidewaiter
+tidewater
+tideway
+tidied
+tidier
+tidies
+tidily
+tidiness
+tiding
+tidings
+tidy
+tidying
+tie
+tieback
+tiebreaker
+tied
+tiepin
+tier
+tierce
+tiered
+tiers
+ties
+tiff
+tiffany
+tiffin
+tiger
+tiger's
+tigers
+tight
+tighten
+tightened
+tightening
+tightens
+tighter
+tightest
+tightly
+tightness
+tightrope
+tights
+tightwad
+tightwad's
+tightwads
+tigress
+tilapia
+tilde
+tildes
+tile
+tiled
+tilefish
+tiles
+tiling
+till
+tillable
+tillage
+tilled
+tiller
+tillers
+tilling
+tills
+tilt
+tilted
+tilters
+tilth
+tilting
+tilts
+tiltyard
+timbale
+timber
+timbered
+timberhead
+timbering
+timberland
+timberlands
+timberline
+timbers
+timberwork
+timbre
+time
+timecard
+timed
+timekeeper
+timekeeping
+timeless
+timelessly
+timelessness
+timelier
+timeliness
+timely
+timeout
+timeouts
+timepiece
+timer
+timers
+times
+timesaving
+timescale
+timescales
+timeserver
+timeservers
+timeserving
+timeshare
+timeshared
+timeshares
+timesharing
+timestamp
+timestamps
+timetable
+timetable's
+timetabled
+timetables
+timetabling
+timework
+timeworn
+timid
+timidity
+timidly
+timing
+timings
+timorous
+timorously
+timorousness
+timothy
+timpani
+timpanist
+tin
+tin's
+tincture
+tinctured
+tincturing
+tinder
+tinderbox
+tine
+tined
+tines
+tinfoil
+ting
+tinge
+tinged
+tingeing
+tingle
+tingled
+tingles
+tingling
+tingly
+tinhorn
+tinier
+tiniest
+tinker
+tinkered
+tinkering
+tinkers
+tinkle
+tinkled
+tinkles
+tinkling
+tinned
+tinnier
+tinniest
+tinning
+tinnitus
+tinny
+tinplate
+tinpot
+tins
+tinsel
+tinselled
+tinselling
+tinselly
+tinsmith
+tinsmiths
+tinstone
+tint
+tinted
+tinting
+tintinnabulation
+tints
+tintype
+tinware
+tinwork
+tinworks
+tiny
+tip
+tip's
+tipcart
+tipi
+tip-off
+tipped
+tipper
+tipper's
+tippers
+tippet
+tipping
+tipple
+tippled
+tippler
+tipples
+tippling
+tips
+tipsier
+tipsily
+tipsiness
+tipstaff
+tipster
+tipsy
+tiptoe
+tiptoed
+tiptoeing
+tiptop
+tirade
+tirades
+tire
+tired
+tiredly
+tiredness
+tireless
+tirelessly
+tirelessness
+tires
+tiresome
+tiresomely
+tiresomeness
+tiring
+tisane
+tissue
+tissue's
+tissues
+tit
+tit's
+titan
+titanic
+titanium
+titans
+titbit
+tithe
+tithe's
+tithes
+tithing
+titian
+titillate
+titillating
+titillation
+titivation
+titlark
+title
+titled
+titleholder
+titleholders
+titles
+titling
+titmice
+titmouse
+titmouse's
+titrate
+titration
+titre
+titres
+tits
+titter
+tittered
+tittering
+titters
+titular
+tizzies
+tizzy
+to
+toad
+toad's
+toadeater
+toadeater's
+toadeaters
+toadfish
+toadfish's
+toadfishes
+toadflax
+toadied
+toadies
+toads
+toadstone
+toadstone's
+toadstones
+toadstool
+toady
+toadying
+toadyism
+toast
+toasted
+toaster
+toasters
+toastier
+toasting
+toastmaster
+toastmaster's
+toastmasters
+toastmistress
+toasts
+toasty
+tobacco
+tobacconist
+tobacconist's
+tobacconists
+toboggan
+toboggan's
+tobogganing
+toboggans
+toccata
+tocsin
+today
+today's
+toddies
+toddle
+toddled
+toddler
+toddlers
+toddles
+toddling
+toddy
+toddy's
+toe
+toe's
+toecap
+toed
+toehold
+toehold's
+toeholds
+toeing
+toeless
+toenail
+toenails
+toes
+toff
+toffee
+toft
+tofu
+tog
+toga
+together
+togetherness
+togging
+toggle
+toggled
+toggles
+toggling
+togs
+toil
+toile
+toiled
+toiler
+toilet
+toilet's
+toiletry
+toilets
+toilette
+toiling
+toils
+toilsome
+token
+token's
+tokenism
+tokens
+told
+tolerability
+tolerable
+tolerably
+tolerance
+tolerances
+tolerant
+tolerantly
+tolerate
+tolerated
+tolerates
+tolerating
+toleration
+toll
+tollbooth
+tollbooth's
+tollbooths
+tolled
+tollgate
+tollhouse
+tolling
+tolls
+toluene
+tom
+tom's
+tomahawk
+tomahawk's
+tomahawks
+tomalley
+tomato
+tomatoes
+tomb
+tomb's
+tomblike
+tomboy
+tomboyish
+tombs
+tombstone
+tombstones
+tomcat
+tomcod
+tome
+tomes
+tomfool
+tomfoolery
+tommy
+tommyrot
+tomogram
+tomogram's
+tomograms
+tomograph
+tomorrow
+tomorrow's
+tomorrows
+tompion
+toms
+tomtit
+ton
+ton's
+tonal
+tonalities
+tonality
+tonally
+tone
+toned
+toneless
+tonelessly
+toner
+tones
+tong
+tongs
+tongue
+tongued
+tongues
+tonguing
+tonic
+tonic's
+tonicity
+tonics
+tonight
+toning
+tonnage
+tonne
+tonneau
+tonnes
+tons
+tonsil
+tonsillectomy
+tonsillitis
+tonsure
+tonsured
+tonsuring
+tontine
+tonus
+too
+took
+tool
+toolbox
+toolboxes
+tooled
+tooling
+toolkit
+toolkit's
+toolkits
+toolmaker
+toolmakers
+toolroom
+tools
+toot
+tooted
+tooth
+toothache
+toothache's
+toothaches
+toothbrush
+toothbrush's
+toothbrushes
+toothed
+toothier
+toothily
+toothless
+toothpaste
+toothpick
+toothpick's
+toothpicks
+toothsome
+toothsomely
+toothy
+tooting
+toots
+tootsies
+top
+topaz
+topcoat
+topcoats
+topdressing
+tope
+toped
+topee
+toper
+topes
+topflight
+topgallant
+top-heavy
+topiary
+topic
+topic's
+topical
+topicality
+topically
+topics
+toping
+topknot
+topless
+toplofty
+topmast
+topminnow
+topmost
+topographer
+topographic
+topographical
+topographically
+topographies
+topography
+topological
+topologically
+topologies
+topologist
+topology
+topped
+topper
+toppers
+topping
+toppings
+topple
+toppled
+topples
+toppling
+tops
+topsail
+topside
+topsides
+topsoil
+topspin
+topstitch
+toque
+torch
+torch's
+torchbearer
+torches
+torchlight
+torchwood
+tore
+toreador
+torero
+toric
+torment
+tormented
+tormenter
+tormenters
+tormenting
+tormentor
+torments
+torn
+tornado
+tornadoes
+tornados
+toroid
+torpedo
+torpedoed
+torpedoes
+torpedoing
+torpid
+torpidity
+torpidly
+torpor
+torque
+torques
+torrent
+torrent's
+torrential
+torrentially
+torrents
+torrid
+torridly
+torridness
+torsi
+torsion
+torso
+torsos
+tort
+torte
+tortellini
+tortes
+tortilla
+tortoise
+tortoise's
+tortoises
+tortoiseshell
+tortuous
+tortuously
+torture
+tortured
+torturer
+torturers
+tortures
+torturing
+torturous
+torturously
+torus
+toss
+tossed
+tosses
+tossing
+tosspot
+tot
+total
+total's
+totalise
+totalised
+totalises
+totalising
+totalitarian
+totalitarianism
+totalities
+totality
+totality's
+totalled
+totalling
+totally
+totals
+tote
+toted
+totem
+totemic
+totes
+toting
+tots
+totted
+totter
+tottered
+tottering
+totters
+tottery
+totting
+toucan
+touch
+touchable
+touchback
+touchdown
+touchdowns
+touched
+touches
+touchhole
+touchier
+touchiest
+touchily
+touchiness
+touching
+touchingly
+touchline
+touchstone
+touchstones
+touchwood
+touchy
+tough
+toughen
+toughened
+toughening
+toughens
+tougher
+toughest
+toughie
+toughies
+toughly
+toughness
+toughs
+toupee
+tour
+tourbillion
+toured
+touring
+tourism
+tourist
+tourist's
+tourists
+touristy
+tourmaline
+tournament
+tournament's
+tournaments
+tournedos
+tourney
+tourneys
+tourniquet
+tourniquets
+tours
+tousle
+tousled
+tousles
+tousling
+tout
+touted
+touting
+touts
+tow
+towage
+toward
+towards
+towboat
+towboats
+towed
+towel
+towel's
+towelled
+towelling
+towels
+tower
+towered
+towering
+toweringly
+towers
+towhead
+towheaded
+towhee
+towing
+towline
+town
+town's
+townhouse
+townies
+towns
+townscape
+townsfolk
+township
+township's
+townships
+townsman
+townsmen
+townspeople
+townswoman
+towpath
+towrope
+tows
+toxaemia
+toxic
+toxicant
+toxicity
+toxicological
+toxicologically
+toxicologist
+toxicology
+toxin
+toxin's
+toxins
+toy
+toyed
+toying
+toys
+trace
+traceable
+traceably
+traced
+traceless
+tracer
+tracers
+tracery
+traces
+trachea
+tracheae
+tracheal
+tracheotomy
+trachoma
+tracing
+tracings
+track
+tracked
+tracker
+trackers
+tracking
+tracklayer
+trackless
+trackman
+tracks
+trackside
+tracksuit
+trackwalker
+tract
+tract's
+tractability
+tractable
+tractably
+tractate
+traction
+tractor
+tractor's
+tractors
+tracts
+tradable
+trade
+traded
+trademark
+trademark's
+trademarks
+tradeoffs
+trader
+traders
+trades
+tradesman
+tradesmen
+trading
+tradition
+tradition's
+traditional
+traditionalise
+traditionalised
+traditionalises
+traditionalism
+traditionalistic
+traditionalists
+traditionally
+traditions
+traduce
+traduced
+traducer
+traducing
+traffic
+traffic's
+trafficable
+trafficked
+trafficker
+trafficker's
+traffickers
+trafficking
+traffics
+tragedian
+tragedians
+tragedienne
+tragedies
+tragedy
+tragedy's
+tragic
+tragically
+tragicomedy
+tragicomic
+trail
+trailblazer
+trailblazer's
+trailblazers
+trailblazing
+trailbreaker
+trailed
+trailer
+trailers
+trailhead
+trailhead's
+trailheads
+trailing
+trails
+trailside
+train
+trainability
+trainable
+trainband
+trainbearer
+trained
+trainee
+trainee's
+trainees
+traineeship
+traineeships
+trainer
+trainers
+training
+trainload
+trainload's
+trainloads
+trainman
+trainman's
+trainmen
+trains
+traipse
+traipsing
+trait
+trait's
+traitor
+traitor's
+traitorous
+traitorously
+traitors
+traits
+trajectories
+trajectory
+trajectory's
+tram
+tramcar
+tramline
+trammel
+trammelled
+trammelling
+trammels
+tramp
+tramped
+tramping
+trample
+trampled
+tramples
+trampling
+trampoline
+tramps
+tramway
+trance
+trance's
+trancelike
+trances
+tranquil
+tranquillisation
+tranquillise
+tranquillised
+tranquilliser
+tranquillisers
+tranquillises
+tranquillising
+tranquillity
+tranquilly
+transact
+transacted
+transacting
+transaction
+transaction's
+transactional
+transactions
+transacts
+transalpine
+transatlantic
+transaxle
+transceiver
+transceiver's
+transceivers
+transcend
+transcended
+transcendence
+transcendent
+transcendental
+transcendentalism
+transcendentalist
+transcendentalists
+transcendentally
+transcendently
+transcending
+transcends
+transcontinental
+transcribe
+transcribed
+transcribers
+transcribes
+transcribing
+transcript
+transcript's
+transcription
+transcription's
+transcriptional
+transcriptions
+transcripts
+transducer
+transducers
+transect
+transecting
+transects
+transept
+transepts
+transfer
+transfer's
+transferability
+transferable
+transferee
+transference
+transferor
+transferors
+transferral
+transferral's
+transferrals
+transferred
+transferring
+transfers
+transfiguration
+transfigure
+transfinite
+transfix
+transfixed
+transfixes
+transfixing
+transfixion
+transform
+transformable
+transformation
+transformation's
+transformational
+transformations
+transformed
+transformer
+transformers
+transforming
+transforms
+transfuse
+transfused
+transfusing
+transfusion
+transfusions
+transgress
+transgressed
+transgresses
+transgressing
+transgression
+transgression's
+transgressions
+transgressor
+transgressors
+tranship
+transhumance
+transience
+transient
+transiently
+transients
+transistor
+transistor's
+transistorise
+transistorised
+transistorises
+transistorising
+transistors
+transit
+transition
+transitional
+transitionally
+transitioned
+transitions
+transitive
+transitively
+transitiveness
+transitivity
+transitorily
+transitory
+translatability
+translatable
+translate
+translated
+translates
+translating
+translation
+translations
+translator
+translator's
+translators
+transliterate
+transliteration
+translocation
+translucence
+translucency
+translucent
+translucently
+transmarine
+transmigrate
+transmigration
+transmissibility
+transmissible
+transmission
+transmission's
+transmissions
+transmit
+transmits
+transmittable
+transmittal
+transmittance
+transmitted
+transmitter
+transmitter's
+transmitters
+transmitting
+transmogrification
+transmogrify
+transmutable
+transmutation
+transmute
+transmuted
+transmutes
+transmuting
+transoceanic
+transom
+transoms
+transonic
+transpacific
+transparencies
+transparency
+transparency's
+transparent
+transparently
+transpersonal
+transpiration
+transpirations
+transpire
+transpired
+transpires
+transpiring
+transplant
+transplantable
+transplantation
+transplanted
+transplanting
+transplants
+transpolar
+transponder
+transponders
+transport
+transportability
+transportable
+transportation
+transportations
+transported
+transporters
+transporting
+transports
+transposable
+transpose
+transposed
+transposes
+transposing
+transposition
+transsexual
+transubstantiate
+transubstantiation
+transudation
+transude
+transuded
+transuding
+transversal
+transversally
+transverse
+transversely
+transverses
+transvestism
+transvestite
+trap
+trap's
+trapdoor
+trapdoors
+trapeze
+trapezium
+trapezoid
+trapezoid's
+trapezoidal
+trapezoids
+trapped
+trapper
+trapper's
+trappers
+trapping
+trappings
+traps
+trapshooting
+trash
+trashed
+trashes
+trashier
+trashiness
+trashing
+trashy
+trauma
+traumas
+traumata
+traumatic
+traumatically
+traumatise
+traumatised
+traumatises
+traumatising
+traumatism
+travail
+travails
+travel
+travelled
+traveller
+traveller's
+travellers
+travelling
+travelogue
+travelogue's
+travelogues
+travels
+traversable
+traversal
+traversal's
+traversals
+traverse
+traversed
+traverses
+traversing
+travertine
+travesties
+travesty
+travesty's
+travois
+trawl
+trawler
+tray
+tray's
+trays
+treacheries
+treacherous
+treacherously
+treacherousness
+treachery
+treachery's
+treacle
+treacly
+tread
+treaded
+treading
+treadle
+treadmill
+treads
+treason
+treasonable
+treasonably
+treasonous
+treasure
+treasured
+treasurer
+treasures
+treasuries
+treasuring
+treasury
+treasury's
+treat
+treatable
+treated
+treaties
+treating
+treatise
+treatise's
+treatises
+treatment
+treatment's
+treatments
+treats
+treaty
+treaty's
+treble
+trebled
+trebles
+trebling
+trebly
+trebuchet
+tree
+tree's
+treed
+treehopper
+treeing
+treeless
+treelike
+treenail
+trees
+treetop
+treetop's
+treetops
+tref
+trefoil
+trek
+trek's
+trekked
+trekker
+trekking
+treks
+trellis
+trellised
+trellises
+trelliswork
+tremble
+trembled
+trembler
+trembles
+trembling
+tremendous
+tremendously
+tremendousness
+tremolo
+tremor
+tremor's
+tremors
+tremulous
+tremulously
+tremulousness
+trench
+trenchancy
+trenchant
+trenchantly
+trenched
+trencher
+trencherman
+trenchermen
+trenchers
+trenches
+trend
+trendier
+trendily
+trending
+trends
+trendy
+trepan
+trepanation
+trepanned
+trepanning
+trepans
+trephination
+trephine
+trepid
+trepidation
+trespass
+trespassed
+trespasser
+trespassers
+trespasses
+tress
+tress's
+tresses
+trestle
+trestles
+trestletree
+trestlework
+trey
+treys
+tri
+triac
+triacetate
+triad
+triadic
+triage
+trial
+trial's
+trials
+triangle
+triangle's
+triangles
+triangular
+triangularly
+triangulate
+triangulated
+triangulation
+tribal
+tribalism
+tribally
+tribe
+tribe's
+tribes
+tribesman
+tribesmen
+triboelectric
+tribology
+tribulation
+tribulation's
+tribulations
+tribunal
+tribunal's
+tribunals
+tribune
+tribune's
+tribunes
+tributary
+tribute
+tribute's
+tributes
+trice
+triceps
+triceratops
+trichina
+trichinosis
+trichinous
+trick
+tricked
+trickeries
+trickery
+trickier
+trickiest
+trickily
+trickiness
+tricking
+trickle
+trickled
+trickles
+trickling
+tricks
+trickster
+tricky
+triclinic
+tricolour
+tricolour's
+tricolours
+tricot
+tricuspid
+tricycle
+tricycles
+tricyclic
+trident
+tridentate
+tridents
+tried
+triennial
+triennially
+triennium
+tries
+triffid
+trifle
+trifled
+trifler
+trifles
+trifling
+trifocal
+trifoliate
+trifurcate
+trifurcation
+trig
+trigger
+triggered
+triggerfish
+triggering
+triggerman
+triggers
+trigging
+trigonometric
+trigonometrically
+trigonometry
+trihedral
+trilateral
+trilaterally
+trilbies
+trilby
+trilingual
+trill
+trilled
+trillion
+trillions
+trillionth
+trillium
+trilobite
+trilogy
+trim
+trimaran
+trimester
+trimly
+trimmed
+trimmer
+trimmest
+trimming
+trimmings
+trimness
+trims
+trine
+trinitrotoluene
+trinity
+trinket
+trinket's
+trinkets
+trinomial
+trio
+triode
+triodes
+trios
+trioxide
+trip
+trip's
+tripartite
+tripe
+triplane
+triple
+tripled
+triples
+triplet
+triplet's
+tripletail
+triplets
+triplex
+triplicate
+triplication
+tripling
+triploid
+triply
+tripod
+tripods
+tripped
+tripper
+tripping
+trippingly
+trips
+triptych
+tripwire
+trireme
+trisect
+trisection
+trite
+tritely
+triteness
+tritium
+tritium's
+triton
+triturate
+triumph
+triumphal
+triumphant
+triumphantly
+triumphed
+triumphing
+triumphs
+triumvir
+triumvirate
+triune
+trivalent
+trivet
+trivia
+trivial
+trivialisation
+trivialise
+trivialised
+trivialises
+trivialising
+trivialities
+triviality
+trivially
+trochaic
+troche
+trochee
+trod
+trodden
+trog
+troglodyte
+troglodytic
+trogon
+troika
+troll
+troll's
+trolley
+trolley's
+trolleybus
+trolleys
+trollop
+trolls
+trombone
+trombone's
+trombones
+trombonist
+tromp
+troop
+trooped
+trooper
+troopers
+trooping
+troops
+troopship
+troopships
+trop
+trope
+trophies
+trophy
+trophy's
+tropic
+tropic's
+tropical
+tropically
+tropicbird
+tropics
+tropism
+tropisms
+troposphere
+trot
+troth
+trothplight
+trotline
+trots
+trotted
+trotter
+trotting
+troubadour
+troubadour's
+troubadours
+trouble
+troubled
+troublemaker
+troublemaker's
+troublemakers
+troubles
+troubleshoot
+troubleshooting
+troubleshoots
+troubleshot
+troublesome
+troublesomely
+troubling
+trough
+troughs
+trounce
+trounced
+trounces
+trouncing
+troupe
+trouper
+troupes
+trouping
+trouser
+trousers
+trousseau
+trousseaus
+trousseaux
+trout
+trove
+trowel
+trowel's
+trowels
+troy
+truancy
+truant
+truant's
+truants
+truce
+truck
+trucked
+trucker
+truckers
+trucking
+truckle
+truckled
+truckler
+truckling
+truckload
+truckload's
+truckloads
+trucks
+truculence
+truculent
+truculently
+trudge
+trudged
+trudges
+trudging
+true
+trueborn
+trued
+truehearted
+truelove
+trueness
+truepenny
+truer
+truest
+truffle
+truffle's
+truffles
+truing
+truism
+truism's
+truisms
+truly
+trump
+trumped
+trumpery
+trumpet
+trumpeted
+trumpeter
+trumpeting
+trumpets
+trumps
+truncate
+truncated
+truncates
+truncating
+truncation
+truncation's
+truncations
+truncheon
+truncheons
+trundle
+trundled
+trundles
+trundling
+trunk
+trunk's
+trunkfish
+trunks
+trunnion
+truss
+trusses
+trussing
+trust
+trustable
+trustbuster
+trusted
+trustee
+trustee's
+trustees
+trusteeship
+trustful
+trustfully
+trustfulness
+trustier
+trusties
+trustiness
+trusting
+trustingly
+trusts
+trustworthily
+trustworthiness
+trustworthy
+trusty
+truth
+truthful
+truthfully
+truthfulness
+truths
+try
+trying
+tryingly
+tryout
+trypanosome
+trysail
+tryst
+tsar
+tsarina
+tsarist
+tsetse
+tsunami
+tuatara
+tub
+tub's
+tuba
+tubbier
+tubby
+tube
+tubeless
+tuber
+tubercle
+tubercular
+tuberculin
+tuberculosis
+tuberose
+tuberous
+tubers
+tubes
+tubing
+tubs
+tubular
+tubule
+tubules
+tuck
+tucked
+tucker
+tuckered
+tuckering
+tucking
+tucks
+tuff
+tuffet
+tuft
+tuft's
+tufted
+tufts
+tug
+tugboat
+tugged
+tugging
+tugs
+tuition
+tuitions
+tularaemia
+tulip
+tulip's
+tulips
+tulipwood
+tulle
+tumble
+tumblebug
+tumbled
+tumbledown
+tumblehome
+tumbler
+tumblerful
+tumblers
+tumbles
+tumbleweed
+tumbling
+tumbrel
+tumbrels
+tumbril
+tumefaction
+tumescence
+tumescent
+tumid
+tummies
+tummy
+tummy's
+tumour
+tumour's
+tumours
+tumult
+tumult's
+tumults
+tumultuous
+tumultuously
+tumultuousness
+tumulus
+tun
+tuna
+tunable
+tunas
+tundra
+tune
+tuneable
+tuned
+tuneful
+tunefully
+tunefulness
+tuneless
+tunelessly
+tuner
+tuners
+tunes
+tunesmith
+tungsten
+tunic
+tunic's
+tunica
+tunicae
+tunicate
+tunics
+tuning
+tuning's
+tunings
+tunnel
+tunnelled
+tunneller
+tunnelling
+tunnels
+tunny
+tupelo
+turban
+turban's
+turbaned
+turbans
+turbary
+turbid
+turbidity
+turbidly
+turbinate
+turbinated
+turbine
+turbines
+turbo
+turbocharged
+turbocharger
+turboelectric
+turbofan
+turbogenerator
+turbojet
+turboprop
+turbot
+turbots
+turbulence
+turbulence's
+turbulent
+turbulently
+tureen
+turf
+turgescent
+turgid
+turgidity
+turgidly
+turkey
+turkey's
+turkeys
+turmeric
+turmoil
+turmoil's
+turn
+turnabout
+turnaround
+turnarounds
+turnbuckle
+turncoat
+turndown
+turned
+turner
+turners
+turnery
+turning
+turnings
+turnip
+turnip's
+turnips
+turnkey
+turnkeys
+turnoff
+turnout
+turnouts
+turnover
+turnovers
+turnpike
+turnpikes
+turns
+turnsole
+turnspit
+turnstile
+turnstone
+turntable
+turpentine
+turpitude
+turquoise
+turret
+turret's
+turreted
+turrets
+turtle
+turtle's
+turtleback
+turtlebacks
+turtledove
+turtlehead
+turtleneck
+turtles
+tusk
+tusker
+tuskers
+tusks
+tussah
+tussle
+tussled
+tussles
+tussling
+tussock
+tussocks
+tutee
+tutees
+tutelage
+tutelary
+tutor
+tutorage
+tutored
+tutorial
+tutorial's
+tutorials
+tutoring
+tutors
+tutorship
+tutu
+tux
+tuxedo
+tuxedo's
+tuxedoed
+tuxedos
+twaddle
+twain
+twang
+twanging
+twat
+tweak
+tweaked
+tweaking
+tweaks
+tweed
+tweedier
+tweediness
+tweedy
+tweet
+tweeter
+tweeze
+tweezed
+tweezers
+tweezing
+twelfth
+twelfths
+twelve
+twelvemonth
+twenties
+twentieth
+twenty
+twerp
+twice
+twiddle
+twiddled
+twiddles
+twiddling
+twig
+twig's
+twigged
+twigging
+twiggy
+twigs
+twilight
+twilight's
+twilights
+twilit
+twill
+twilled
+twilling
+twin
+twin's
+twinberry
+twinborn
+twine
+twined
+twines
+twinflower
+twinge
+twinges
+twining
+twinkle
+twinkled
+twinkles
+twinkling
+twinning
+twins
+twirl
+twirled
+twirler
+twirling
+twirls
+twist
+twisted
+twister
+twisters
+twisting
+twists
+twisty
+twit
+twitch
+twitched
+twitcher
+twitchily
+twitching
+twitchy
+twitted
+twitter
+twittered
+twittering
+twitting
+twixt
+two
+two's
+twofer
+twofold
+twos
+twosome
+tycoon
+tying
+tyke
+tyke's
+tykes
+tympani
+tympanic
+tympanum
+tympanum's
+type
+type's
+typecast
+typed
+typeface
+types
+typescript
+typeset
+typesets
+typesetter
+typesetters
+typesetting
+typewrite
+typewriter
+typewriter's
+typewriters
+typewriting
+typewritten
+typhoid
+typhoon
+typhus
+typical
+typicality
+typically
+typified
+typifies
+typify
+typifying
+typing
+typist
+typist's
+typists
+typo
+typographer
+typographic
+typographical
+typographically
+typography
+typological
+typologically
+typologies
+typology
+typos
+tyrannical
+tyrannically
+tyrannise
+tyrannised
+tyrannises
+tyrannising
+tyrannosaur
+tyrannosaurus
+tyrannous
+tyrannously
+tyranny
+tyrant
+tyrant's
+tyrants
+tyre
+tyre's
+tyres
+tyro
+tyros
+tyrosine
+uPVC
+ubiquitous
+ubiquitously
+ubiquity
+udder
+ugh
+uglier
+ugliest
+ugliness
+ugly
+ukulele
+ulcer
+ulcer's
+ulcerate
+ulcerated
+ulcerates
+ulceration
+ulcerations
+ulcerative
+ulcerous
+ulcers
+ulna
+ulna's
+ulterior
+ultimate
+ultimately
+ultimatum
+ultimo
+ultra
+ultracentrifuge
+ultraconservative
+ultrafashionable
+ultrahigh
+ultramarine
+ultramicroscopic
+ultramodern
+ultrasonic
+ultrasonically
+ultrasonics
+ultrasound
+ultraviolet
+ululate
+ululation
+umbel
+umbellate
+umber
+umbilical
+umbilici
+umbilicus
+umbra
+umbrae
+umbrage
+umbrageous
+umbrella
+umbrella's
+umbrellas
+umlaut
+ump
+umpire
+umpire's
+umpired
+umpires
+umpiring
+umpteen
+umpteenth
+un
+unabashed
+unabashedly
+unabated
+unabatedly
+unabbreviated
+unable
+unabridged
+unacceptability
+unacceptable
+unacceptably
+unaccompanied
+unaccomplished
+unaccountability
+unaccountable
+unaccountably
+unaccounted
+unaccustomed
+unaccustomedly
+unachievable
+unachieved
+unacknowledged
+unacquainted
+unadjusted
+unadopted
+unadorned
+unadulterated
+unadventurous
+unadvised
+unadvisedly
+unaffected
+unaffectedly
+unaffectionate
+unafraid
+unaided
+unalienable
+unaligned
+unallocated
+unalloyed
+unalterable
+unalterably
+unaltered
+unambiguous
+unambiguously
+unanalysed
+unanchored
+unanimity
+unanimous
+unanimously
+unannounced
+unanswerable
+unanswerably
+unanswered
+unanticipated
+unapologetic
+unapologetically
+unappealing
+unappealingly
+unappeasable
+unappeasably
+unappetising
+unappetisingly
+unappreciated
+unapproachable
+unapproachably
+unapt
+unarguable
+unarguably
+unarm
+unarmed
+unarticulated
+unary
+unashamed
+unashamedly
+unasked
+unassailability
+unassailable
+unassailably
+unassembled
+unassertive
+unassigned
+unassisted
+unassuming
+unattached
+unattainable
+unattended
+unattractive
+unattractively
+unattractiveness
+un-attributed
+unauthentic
+unauthenticated
+unauthorised
+unavailability
+unavailable
+unavailing
+unavailingly
+unavoidable
+unavoidably
+unaware
+unawareness
+unawares
+unbalance
+unbalanced
+unbar
+unbarred
+unbearable
+unbearably
+unbeatable
+unbeatably
+unbeaten
+unbeautiful
+unbecoming
+unbecomingly
+unbecomingness
+unbeknown
+unbeknownst
+unbelief
+unbelievable
+unbelievably
+unbeliever
+unbelieving
+unbelievingly
+unbelted
+unbend
+unbending
+unbent
+unbiased
+unbiblical
+unbidden
+unbind
+unblemished
+unblessed
+unblinking
+unblinkingly
+unblock
+unblocked
+unblocking
+unblocks
+unblushing
+unblushingly
+unbolt
+unbolted
+unborn
+unbound
+unbounded
+unbowed
+unbreakable
+unbridle
+unbridled
+unbroken
+unbuckle
+unbundled
+unburden
+unburdened
+unburied
+unburned
+unbuttered
+unbutton
+unbuttoned
+unbuttoning
+unbuttons
+uncalculated
+uncalled
+uncannily
+uncanny
+uncap
+uncared
+uncaring
+uncaught
+uncaused
+unceasing
+unceasingly
+uncelebrated
+uncensored
+unceremonious
+unceremoniously
+uncertain
+uncertainly
+uncertainness
+uncertainties
+uncertainty
+uncertified
+unchain
+unchallengeable
+unchallenged
+unchangeable
+unchangeably
+unchanged
+unchanging
+unchangingly
+uncharacterised
+uncharacteristic
+uncharacteristically
+uncharged
+uncharitable
+uncharitably
+uncharted
+unchaste
+unchastely
+unchecked
+unchristian
+uncial
+uncircumcised
+uncivil
+uncivilised
+uncivilly
+unclad
+unclaimed
+unclamp
+unclasp
+unclasping
+unclassified
+uncle
+uncle's
+unclean
+uncleanness
+unclear
+unclench
+unclenched
+uncles
+unclipped
+uncloak
+unclog
+unclose
+unclosed
+unclothe
+unclothed
+unclouded
+uncluttered
+uncoated
+uncoil
+uncoiled
+uncoiling
+uncoloured
+uncomfortable
+uncomfortably
+uncomforted
+uncomment
+uncommented
+uncomments
+uncommitted
+uncommon
+uncommonly
+uncommonness
+uncommunicative
+uncompassionate
+uncompetitive
+uncomplaining
+uncomplainingly
+uncompleted
+uncomplicated
+uncomplimentary
+uncomprehending
+uncomprehendingly
+uncompress
+uncompressed
+uncompressing
+uncompromising
+uncompromisingly
+unconceivable
+unconcern
+unconcerned
+unconcernedly
+unconditional
+unconditionally
+unconditioned
+unconfined
+unconfirmed
+unconformable
+unconformity
+uncongenial
+unconnected
+unconquerable
+unconquerably
+unconscionable
+unconscionably
+unconscious
+unconsciously
+unconsciousness
+unconsidered
+unconsolidated
+unconstitutional
+unconstitutionality
+unconstitutionally
+unconstrained
+unconstraint
+uncontaminated
+uncontested
+uncontrollability
+uncontrollable
+uncontrollably
+uncontrolled
+uncontroversial
+unconventional
+unconventionality
+unconventionally
+unconvertible
+unconvinced
+unconvincing
+unconvincingly
+uncooperative
+uncoordinated
+uncork
+uncorked
+uncorrected
+uncorrelated
+uncountable
+uncounted
+uncouple
+uncourageous
+uncouth
+uncouthly
+uncouthness
+uncover
+uncovered
+uncovering
+uncovers
+uncreated
+uncritical
+uncritically
+uncross
+uncrown
+uncrowned
+unction
+unctuous
+unctuously
+unctuousness
+uncured
+uncurl
+uncurled
+uncut
+undamaged
+undated
+undaunted
+undauntedly
+undeceive
+undecided
+undeclared
+undecorated
+undedicated
+undefended
+undefined
+undelete
+undeleted
+undeliverable
+undemocratic
+undemocratically
+undemonstrative
+undemonstratively
+undeniable
+undeniably
+undependable
+under
+underachieve
+underachievers
+underage
+underarm
+underbelly
+underbid
+underbody
+underbracing
+underbrush
+undercapitalise
+undercapitalised
+undercapitalises
+undercapitalising
+undercarriage
+undercharge
+underclass
+underclassman
+underclassmen
+underclothes
+underclothing
+undercoat
+undercoating
+undercook
+undercooked
+undercount
+undercounts
+undercover
+undercroft
+undercurrent
+undercut
+undercutting
+underdeveloped
+underdevelopment
+underdog
+underdone
+underdressed
+undereducated
+underemployed
+underemployment
+underestimate
+underestimated
+underestimates
+underestimating
+underestimation
+underestimations
+underexpose
+underexposure
+underfeed
+underflow
+underflows
+underfoot
+undergarment
+undergarments
+undergo
+undergoes
+undergoing
+undergone
+undergrad
+undergrad's
+undergrads
+undergraduate
+undergraduate's
+undergraduates
+underground
+undergrowth
+underhand
+underhanded
+underhandedly
+underhandedness
+underinsurance
+underlay
+underlet
+underlie
+underlies
+underline
+underlined
+underlines
+underling
+underling's
+underlings
+underlining
+underlying
+undermanned
+undermine
+undermined
+undermines
+undermining
+underneath
+undernourished
+underpaid
+underpants
+underpass
+underpasses
+underpay
+underpayment
+underpayment's
+underpayments
+underpin
+underpinned
+underpinning
+underpinnings
+underpins
+underplay
+underplayed
+underplaying
+underplays
+underpowered
+underprivileged
+underproduction
+underrate
+underrated
+underreport
+underreported
+underreporting
+underrepresented
+underscore
+underscored
+underscores
+undersea
+undersecretaries
+undersecretary
+undersecretary's
+undersell
+undersexed
+undershirt
+undershirt's
+undershirts
+undershoot
+undershooting
+undershoots
+undershot
+underside
+underside's
+undersides
+undersigned
+undersize
+undersized
+underskirt
+understaffed
+understand
+understandable
+understandably
+understanding
+understandingly
+understandings
+understands
+understate
+understated
+understatement
+understatements
+understates
+understating
+understood
+understudies
+understudy
+understudy's
+undersupply
+undertake
+undertaken
+undertaker
+undertaker's
+undertakers
+undertakes
+undertaking
+undertakings
+undertone
+undertook
+undertow
+undertow's
+undertows
+underused
+undervalue
+undervalued
+undervaluing
+underwater
+underway
+underwear
+underweight
+underwent
+underworld
+underwrite
+underwriter
+underwriters
+underwrites
+underwriting
+undeserved
+undesigning
+undesirability
+undesirable
+undesirably
+undesired
+undetectable
+undetected
+undetermined
+undeveloped
+undeviating
+undid
+undies
+undifferentiated
+undigested
+undignified
+undiluted
+undiminished
+undimmed
+undine
+undiplomatically
+undirected
+undisciplined
+undisclosed
+undiscovered
+undisguised
+undismayed
+undisputed
+undisrupted
+undistinguished
+undistorted
+undistributed
+undisturbed
+undivided
+undo
+undock
+undocumented
+undoes
+undoing
+undomesticated
+undone
+undoubted
+undoubtedly
+undrape
+undreamed
+undreamt
+undress
+undressed
+undresses
+undressing
+undrinkable
+undue
+undulant
+undulate
+undulated
+undulates
+undulating
+undulation
+undulations
+unduly
+undutiful
+undying
+unearned
+unearth
+unearthed
+unearthing
+unearthliness
+unearthly
+unease
+uneasily
+uneasiness
+uneasy
+uneconomic
+uneconomical
+unedited
+uneducated
+unembellished
+unemotional
+unemotionally
+unemployable
+unemployed
+unemployment
+unencumbered
+unending
+unendingly
+unendurable
+unendurably
+unenforceable
+unenlightening
+unenthusiastic
+unenthusiastically
+unenviable
+unenvied
+unequal
+unequalled
+unequally
+unequivocal
+unequivocally
+unerring
+unerringly
+unessential
+unethically
+unevaluated
+uneven
+unevenly
+unevenness
+uneventful
+uneventfully
+unexamined
+unexampled
+unexceptionable
+unexceptionably
+unexceptional
+unexceptionally
+unexcited
+unexcused
+unexpanded
+unexpected
+unexpectedly
+unexpectedness
+unexpended
+unexplainable
+unexplained
+unexploited
+unexplored
+unexpressed
+unfading
+unfailing
+unfailingly
+unfair
+unfairly
+unfairness
+unfaith
+unfaithful
+unfaithfully
+unfaithfulness
+unfaltering
+unfalteringly
+unfamiliar
+unfamiliarity
+unfamiliarly
+unfashionable
+unfashionably
+unfasten
+unfastened
+unfathomable
+unfavourable
+unfavourably
+unfeeling
+unfeelingly
+unfeigned
+unfelt
+unfenced
+unfertile
+unfertilised
+unfetter
+unfettered
+unfilled
+unfinished
+unfired
+unfit
+unfitness
+unfitted
+unfitting
+unfix
+unfixable
+unfixed
+unflagging
+unflaggingly
+unflappability
+unflappable
+unflattering
+unflatteringly
+unflavoured
+unfledged
+unflinching
+unflinchingly
+unfocused
+unfold
+unfolded
+unfolding
+unfolds
+unforced
+unforeseen
+unforgettable
+unforgettably
+unforgivable
+unforgiving
+unformatted
+unformed
+unforthcoming
+unfortunate
+unfortunately
+unfortunates
+unfounded
+unfreeze
+unfrequented
+unfriendliness
+unfriendly
+unfrock
+unfrocking
+unfrosted
+unfrozen
+unfruitful
+unfruitfulness
+unfulfilled
+unfurl
+unfurled
+unfurnished
+unfussy
+ungainliness
+ungainly
+ungallant
+ungallantly
+ungenerous
+ungenerously
+unglamorous
+unglazed
+unglue
+unglued
+ungodliness
+ungodly
+ungovernable
+ungoverned
+ungraceful
+ungracefully
+ungracious
+ungraciously
+ungrammatical
+ungrammaticality
+ungrateful
+ungratefully
+ungratefulness
+ungratified
+ungrounded
+ungrudging
+unguarded
+unguardedly
+unguent
+unguided
+unguis
+ungula
+ungulate
+unhallowed
+unhampered
+unhand
+unhandsome
+unhandsomely
+unhandy
+unhappier
+unhappiest
+unhappily
+unhappiness
+unhappy
+unharmed
+unhealthily
+unhealthy
+unheard
+unheated
+unheeded
+unheeding
+unhelpful
+unhelpfully
+unheralded
+unhesitant
+unhesitating
+unhesitatingly
+unhinge
+unhinged
+unhitch
+unhitched
+unhitches
+unhitching
+unholy
+unhook
+unhooked
+unhooking
+unhooks
+unhorse
+unhorsed
+unhurried
+unhurriedly
+unhurt
+unicameral
+unicellular
+unicorn
+unicorn's
+unicorns
+unicycle
+unicyclist
+unidentifiable
+unidentified
+unidirectional
+unification
+unifications
+unified
+unifier
+unifiers
+unifies
+uniform
+uniformed
+uniformities
+uniformity
+uniformly
+uniforms
+unify
+unifying
+unilateral
+unilateralist
+unilateralists
+unilaterally
+unimaginable
+unimaginably
+unimaginative
+unimaginatively
+unimpaired
+unimpassioned
+unimpeachable
+unimpeachably
+unimpeded
+unimplemented
+unimportance
+unimportant
+unimposing
+unimpressed
+unimpressive
+unimproved
+unincorporated
+uninfected
+uninfluenced
+uninformative
+uninformed
+uninhabited
+uninhibited
+uninhibitedly
+uninitiated
+uninjured
+uninominal
+uninspired
+uninspiring
+unintelligence
+unintelligent
+unintelligently
+unintelligibility
+unintelligible
+unintelligibly
+unintended
+unintentional
+unintentionally
+uninterested
+uninteresting
+uninterestingly
+uninterrupted
+uninterruptedly
+uninvited
+uninvolved
+union
+union's
+unionisation
+unionisation's
+unionisations
+unionise
+unionised
+unionises
+unionising
+unionism
+unionist
+unionists
+unions
+unique
+uniquely
+uniqueness
+unisex
+unisexual
+unison
+unit
+unit's
+unitarily
+unitary
+unite
+united
+unites
+unities
+uniting
+unitisation
+unitise
+unitised
+unitises
+unitising
+units
+unity
+unity's
+univalent
+univalve
+univalve's
+univalves
+universal
+universalise
+universalised
+universalises
+universalising
+universalism
+universalistic
+universality
+universally
+universals
+universe
+universe's
+universes
+universities
+university
+university's
+univocal
+univocally
+unjacketed
+unjust
+unjustifiable
+unjustified
+unjustly
+unjustness
+unkempt
+unkind
+unkindly
+unkindness
+unknowable
+unknowing
+unknowingly
+unknown
+unknowns
+unlabelled
+unlace
+unlaced
+unlacing
+unlade
+unlamented
+unlash
+unlashed
+unlatch
+unlaundered
+unlawful
+unlawfully
+unlawfulness
+unleaded
+unlearn
+unlearned
+unlearnt
+unleash
+unleashed
+unleashes
+unleashing
+unleavened
+unless
+unlettered
+unlevelled
+unlicensed
+unlike
+unlikelihood
+unlikely
+unlikeness
+unlimber
+unlimbered
+unlimbering
+unlimbers
+unlimited
+unlimitedly
+unlined
+unlink
+unlinked
+unlinking
+unlinks
+unlisted
+unliterary
+unload
+unloaded
+unloading
+unloads
+unlock
+unlocked
+unlocking
+unlocks
+unloose
+unloosen
+unloved
+unlovely
+unluckily
+unluckiness
+unlucky
+unmade
+unmagnified
+unmake
+unman
+unmanageable
+unmanageably
+unmanaged
+unmanliness
+unmanly
+unmanned
+unmannered
+unmannerly
+unmapped
+unmarked
+unmarred
+unmarried
+unmask
+unmasked
+unmatchable
+unmatched
+unmated
+unmeaning
+unmeant
+unmeasured
+unmemorable
+unmentionable
+unmentionables
+unmentioned
+unmerciful
+unmercifully
+unmeritorious
+unmeshed
+unmet
+unmethodical
+unmindful
+unmistakable
+unmistakably
+unmitigated
+unmixed
+unmodified
+unmolested
+unmoor
+unmoral
+unmotivated
+unmoved
+unmoving
+unmurmuring
+unmusical
+unnameable
+unnamed
+unnatural
+unnaturally
+unnaturalness
+unnecessarily
+unnecessary
+unneeded
+unnerve
+unnerved
+unnerves
+unnerving
+unnervingly
+unnoticed
+unnourished
+unnumbered
+unobservable
+unobserved
+unobtainable
+unobtrusive
+unobtrusively
+unobtrusiveness
+unoccupied
+unofficial
+unofficially
+unopened
+unordered
+unorthodox
+unorthodoxly
+unorthodoxy
+unpack
+unpackaged
+unpacked
+unpacking
+unpacks
+unpadded
+unpaged
+unpaid
+unpainted
+unpaired
+unpalatable
+unparsed
+unpartisan
+unpatriotic
+unpaved
+unperceived
+unperformed
+unperturbed
+unperturbedly
+unphysical
+unpick
+unpin
+unplaced
+unplanned
+unpleasant
+unpleasantly
+unpleasantness
+unpleased
+unplug
+unplugged
+unplugging
+unplugs
+unplumbed
+unpolluted
+unpopular
+unpopularity
+unpractised
+unprecedented
+unpredictability
+unpredictable
+unpredictably
+unpredicted
+unprejudiced
+unpremeditated
+unprepared
+unprepossessing
+unpreserved
+unpretending
+unpretentious
+unpretentiously
+unpretentiousness
+unprincipled
+unprintable
+unprinted
+unprivileged
+unproblematic
+unprocessed
+unprocurable
+unproductive
+unprofessed
+unprofessional
+unprofitable
+unprofitably
+unpromising
+unpromisingly
+unprompted
+unpronounceable
+unpronounced
+unprotected
+unproved
+unproven
+unpublished
+unpunished
+unqualified
+unqualifiedly
+unquenched
+unquestionable
+unquestionably
+unquestioned
+unquestioning
+unquestioningly
+unquiet
+unquote
+unquoted
+unranked
+unravel
+unravelled
+unravelling
+unravels
+unreachable
+unread
+unreadable
+unready
+unreal
+unrealisable
+unrealised
+unrealism
+unrealistic
+unrealistically
+unreality
+unreason
+unreasonable
+unreasonableness
+unreasonably
+unreasoning
+unreasoningly
+unreassuringly
+unreceptive
+unrecognisable
+unrecognised
+unrecognising
+unreconstructed
+unrecorded
+unrecoverable
+unredeemable
+unredeemed
+unreel
+unreeling
+unrefined
+unreflective
+unregenerate
+unregistered
+unregulated
+unrehearsed
+unrelated
+unreleased
+unrelenting
+unrelentingly
+unreliability
+unreliable
+unreliably
+unrelieved
+unreligious
+unremarkable
+unremitting
+unremittingly
+unremunerated
+unrepentant
+unreported
+unrepresentative
+unrequited
+unreserved
+unreservedly
+unreservedness
+unresisting
+unresolved
+unresponsive
+unresponsively
+unresponsiveness
+unrest
+unrestrained
+unrestrainedly
+unrestricted
+unrestrictedly
+unrestrictive
+unreturned
+unrevealing
+unrewarding
+unrifled
+unrig
+unrighteous
+unrighteousness
+unripe
+unrivalled
+unroll
+unrolled
+unrolling
+unrolls
+unromantic
+unromantically
+unruffled
+unruliness
+unruly
+unsaddle
+unsafe
+unsafely
+unsaid
+unsalted
+unsanitary
+unsatisfactorily
+unsatisfactory
+unsatisfied
+unsatisfying
+unsaturated
+unsaved
+unsavourily
+unsavoury
+unsay
+unscathed
+unscheduled
+unschooled
+unscientific
+unscientifically
+unscramble
+unscrambled
+unscrambles
+unscrambling
+unscratched
+unscreened
+unscrew
+unscrewed
+unscrewing
+unscrews
+unscripted
+unscrupulous
+unscrupulously
+unscrupulousness
+unseal
+unsealed
+unsealing
+unseals
+unseasonable
+unseasonably
+unseasoned
+unseat
+unsecured
+unseeing
+unseemly
+unseen
+unselected
+unselective
+unselfconscious
+unselfconsciousness
+unselfish
+unselfishly
+unselfishness
+unsent
+unserviceable
+unset
+unsettle
+unsettled
+unsettledness
+unsettlement
+unsettling
+unsettlingly
+unsex
+unshackle
+unshakable
+unshakeable
+unshaken
+unshared
+unsharpened
+unshaved
+unshaven
+unsheathe
+unsheathing
+unshed
+unshelled
+unsheltered
+unshielded
+unship
+unshod
+unsighted
+unsightly
+unsigned
+unsinkable
+unskilful
+unskilled
+unsmiling
+unsmilingly
+unsnap
+unsnapped
+unsnapping
+unsnaps
+unsnarl
+unsociability
+unsociable
+unsociably
+unsocial
+unsold
+unsolder
+unsolicited
+unsolvable
+unsolved
+unsophisticated
+unsorted
+unsought
+unsound
+unsoundly
+unsoundness
+unsparing
+unsparingly
+unspeakable
+unspeakably
+unspeaking
+unspecialised
+unspecific
+unspecified
+unspectacular
+unspent
+unspoiled
+unspoken
+unspotted
+unsprayed
+unstable
+unstableness
+unstably
+unstained
+unstapled
+unstaring
+unsteadily
+unsteadiness
+unsteady
+unstilted
+unstinting
+unstintingly
+unstop
+unstoppable
+unstoppably
+unstopped
+unstrained
+unstressed
+unstring
+unstructured
+unstrung
+unstuck
+unstudied
+unstuffy
+unsubsidised
+unsubstantial
+unsubstantiated
+unsubtle
+unsuccessful
+unsuccessfully
+unsuitability
+unsuitable
+unsuitably
+unsuited
+unsung
+unsupportable
+unsupported
+unsupportive
+unsure
+unsurpassed
+unsurprised
+unsurprising
+unsurprisingly
+unsuspected
+unsuspecting
+unsuspended
+unswerving
+unsymmetrical
+unsympathetic
+unsynchronised
+unsystematic
+untamed
+untangle
+untapped
+untaught
+untellable
+untenable
+untenanted
+untested
+unthaw
+unthinkable
+unthinkably
+unthinking
+unthinkingly
+unthread
+untidily
+untidiness
+untidy
+untie
+untied
+unties
+until
+untimely
+untitled
+unto
+untold
+untouchable
+untouchable's
+untouchables
+untouched
+untoward
+untowardly
+untraceable
+untraced
+untracked
+untraditional
+untrained
+untrammelled
+untransformed
+untreated
+untried
+untroubled
+untrue
+untruly
+untrustworthiness
+untruth
+untruthful
+untruthfully
+untruthfulness
+untutored
+untwine
+untwist
+untwisted
+untying
+untypical
+unusable
+unused
+unusual
+unusually
+unusualness
+unutterable
+unutterably
+unuttered
+unvalued
+unvarnished
+unvarying
+unveil
+unveiled
+unveiling
+unveils
+unventilated
+unverified
+unvisited
+unvocal
+unvoiced
+unwaged
+unwanted
+unwarily
+unwariness
+unwarrantable
+unwarrantably
+unwarranted
+unwary
+unwashed
+unwatched
+unwavering
+unwaveringly
+unwearied
+unwed
+unwelcome
+unwell
+unwept
+unwholesome
+unwholesomely
+unwieldiness
+unwieldy
+unwilled
+unwilling
+unwillingly
+unwillingness
+unwind
+unwinding
+unwinds
+unwire
+unwired
+unwise
+unwisely
+unwished
+unwitting
+unwittingly
+unwomanly
+unwonted
+unwontedly
+unworkable
+unworldly
+unworn
+unworthily
+unworthiness
+unworthy
+unwound
+unwounded
+unwoven
+unwrap
+unwrapped
+unwrapping
+unwraps
+unwrinkled
+unwritten
+unyielding
+unyieldingly
+unyoke
+unzip
+up
+upbeat
+upbraid
+upbringing
+upchuck
+upcoming
+upcountry
+update
+updated
+updater
+updates
+updating
+upend
+upgrade
+upgraded
+upgrades
+upgrading
+upheaval
+upheavals
+upheld
+uphill
+uphold
+upholder
+upholders
+upholding
+upholds
+upholster
+upholstered
+upholsterer
+upholsterers
+upholstering
+upholsters
+upholstery
+upkeep
+upland
+uplands
+uplift
+uplifted
+uplifting
+uplifts
+upload
+uploaded
+uploading
+uploads
+upon
+upped
+upper
+uppercase
+uppercased
+uppercases
+uppercasing
+upperclassman
+upperclassmen
+uppercut
+uppermost
+uppers
+upping
+uppish
+uppity
+upraise
+upraised
+upright
+uprightly
+uprightness
+uprising
+uprising's
+uprisings
+upriver
+uproar
+uproarious
+uproariously
+uproot
+uprooted
+uprooting
+uproots
+ups
+upset
+upsets
+upsetting
+upshot
+upshot's
+upshots
+upside
+upsides
+upsilon
+upslope
+upspring
+upstage
+upstaged
+upstages
+upstaging
+upstairs
+upstanding
+upstart
+upstate
+upstream
+upstroke
+upsurge
+upsweep
+upswept
+upswing
+upswings
+uptake
+uptight
+uptime
+uptown
+upturn
+upturned
+upturning
+upturns
+upward
+upwardly
+upwards
+upwind
+uraemia
+uranium
+urban
+urbane
+urbanely
+urbanisation
+urbanisation's
+urbanisations
+urbanise
+urbanised
+urbanises
+urbanising
+urbanism
+urbanite
+urbanites
+urbanity
+urchin
+urchin's
+urchins
+urea
+urethane
+urethanes
+urethra
+urethral
+urge
+urged
+urgencies
+urgency
+urgent
+urgently
+urges
+urging
+urgings
+uric
+urinal
+urinals
+urinalysis
+urinary
+urinate
+urinated
+urinates
+urinating
+urination
+urine
+urn
+urn's
+urns
+urologist
+urology
+ursine
+us
+usability
+usable
+usage
+usages
+use
+useably
+used
+useful
+usefully
+usefulness
+useless
+uselessly
+uselessness
+user
+user's
+username
+usernames
+users
+uses
+usher
+ushered
+usherette
+ushering
+ushers
+using
+usual
+usually
+usualness
+usufruct
+usurer
+usurious
+usuriously
+usurp
+usurpation
+usurped
+usurper
+usury
+utensil
+utensil's
+utensils
+uterine
+uterus
+uteruses
+utile
+utilisable
+utilisation
+utilise
+utilised
+utilises
+utilising
+utilitarian
+utilitarianism
+utilities
+utility
+utility's
+utmost
+utopia
+utopian
+utopian's
+utopianism
+utopians
+utopias
+utricle
+utter
+utterance
+utterance's
+utterances
+uttered
+uttering
+utterly
+uttermost
+utters
+uveitis
+uvula
+uvular
+uxorial
+uxorious
+uxoriously
+vacancies
+vacancy
+vacancy's
+vacant
+vacantly
+vacate
+vacated
+vacates
+vacating
+vacation
+vacationed
+vacationer
+vacationers
+vacationing
+vacationland
+vacations
+vaccinate
+vaccinated
+vaccinates
+vaccinating
+vaccination
+vaccinations
+vaccinator
+vaccinators
+vaccine
+vaccines
+vacillate
+vacillated
+vacillates
+vacillating
+vacillatingly
+vacillation
+vacillations
+vacillator
+vacillator's
+vacillators
+vacuity
+vacuolated
+vacuole
+vacuoles
+vacuolisation
+vacuolisation's
+vacuolisations
+vacuous
+vacuously
+vacuum
+vacuumed
+vacuuming
+vacuums
+vagabond
+vagabond's
+vagabondage
+vagabonds
+vagaries
+vagarious
+vagary
+vagary's
+vagina
+vagina's
+vaginal
+vaginally
+vaginas
+vagrancy
+vagrant
+vagrantly
+vagrants
+vague
+vaguely
+vagueness
+vaguer
+vaguest
+vain
+vainglorious
+vaingloriously
+vainglory
+vainly
+vainness
+valance
+valances
+vale
+vale's
+valediction
+valedictorian
+valedictorian's
+valedictory
+valence
+valence's
+valences
+valentine
+valentine's
+valentines
+valerian
+vales
+valet
+valet's
+valets
+valetudinarian
+valetudinarianism
+valiant
+valiantly
+valid
+validate
+validated
+validates
+validating
+validation
+validations
+validity
+validly
+valise
+valises
+valley
+valley's
+valleys
+valorisation
+valorisation's
+valorisations
+valorise
+valorised
+valorises
+valorising
+valorous
+valorously
+valour
+valour's
+valuable
+valuables
+valuably
+valuate
+valuated
+valuates
+valuating
+valuation
+valuation's
+valuations
+valuator
+valuators
+value
+valued
+valueless
+values
+valuing
+valve
+valve's
+valves
+vamoose
+vamoosed
+vamooses
+vamoosing
+vamp
+vampire
+vampires
+vampirism
+van
+van's
+vanadium
+vandal
+vandalise
+vandalised
+vandalises
+vandalising
+vandalism
+vandals
+vane
+vane's
+vanes
+vanguard
+vanilla
+vanillin
+vanish
+vanished
+vanishes
+vanishing
+vanities
+vanity
+vanquish
+vanquished
+vanquisher
+vanquishes
+vanquishing
+vans
+vantage
+vantages
+vapid
+vapidity
+vapidly
+vaporetto
+vaporisable
+vaporisation
+vaporisation's
+vaporisations
+vaporise
+vaporised
+vaporiser
+vaporisers
+vaporises
+vaporising
+vaporous
+vaporously
+vapour
+vapour's
+vapours
+vaquero
+variability
+variable
+variable's
+variableness
+variables
+variably
+variac
+variance
+variance's
+variances
+variant
+variants
+variation
+variation's
+variations
+varicoloured
+varicose
+varicosity
+varied
+variedly
+variegate
+variegated
+variegation
+varies
+varieties
+variety
+variety's
+variorum
+various
+variously
+varistor
+varlet
+varmint
+varnish
+varnish's
+varnished
+varnishes
+varnishing
+varsity
+vary
+varying
+varyingly
+vas
+vascular
+vase
+vase's
+vasectomies
+vasectomy
+vases
+vasoconstriction
+vasoconstrictor
+vasodilatation
+vasodilator
+vasomotor
+vasospasm
+vassal
+vassalage
+vassals
+vast
+vaster
+vastest
+vastly
+vastness
+vat
+vat's
+vatic
+vaticinator
+vats
+vaudeville
+vaudevillian
+vault
+vaulted
+vaulting
+vaults
+vaunt
+vaunted
+veal
+vector
+vector's
+vectored
+vectoring
+vectors
+veer
+veered
+veering
+veers
+vegan
+vegetable
+vegetable's
+vegetables
+vegetal
+vegetarian
+vegetarian's
+vegetarianism
+vegetarians
+vegetate
+vegetated
+vegetates
+vegetating
+vegetation
+vegetative
+vehemence
+vehement
+vehemently
+vehicle
+vehicle's
+vehicles
+vehicular
+veil
+veiled
+veiling
+veils
+vein
+veined
+veining
+veins
+veinstone
+vela
+velar
+veldt
+veldt's
+veldts
+vellum
+velocipede
+velocities
+velocity
+velocity's
+velour
+velum
+velvet
+velveteen
+velvety
+vena
+venal
+venality
+venally
+venation
+vend
+vendee
+vender
+vendetta
+vendible
+vending
+vendor
+vendor's
+vendors
+veneer
+veneering
+venerability
+venerable
+venerably
+venerate
+venerated
+venerates
+venerating
+veneration
+venerations
+venerator
+venereal
+venery
+vengeance
+vengeful
+vengefully
+vengefulness
+venial
+venially
+venire
+venison
+venom
+venomous
+venomously
+venomousness
+venous
+vent
+vented
+ventilate
+ventilated
+ventilates
+ventilating
+ventilation
+ventilations
+ventilator
+venting
+ventral
+ventrally
+ventricle
+ventricle's
+ventricles
+ventricular
+ventriloquism
+ventriloquist
+ventriloquist's
+ventriloquists
+vents
+venture
+ventured
+ventures
+venturesome
+venturesomely
+venturi
+venturing
+venturous
+venue
+venue's
+venues
+veracious
+veraciously
+veracity
+veranda
+veranda's
+verandas
+verb
+verb's
+verbal
+verbalisation
+verbalisation's
+verbalisations
+verbalise
+verbalised
+verbalises
+verbalising
+verbalism
+verbally
+verbatim
+verbena
+verbenas
+verbiage
+verbose
+verbosely
+verboseness
+verbosity
+verbs
+verdant
+verdantly
+verderer
+verdict
+verdicts
+verdigris
+verdure
+verdurous
+verge
+verger
+verges
+veridical
+verifiability
+verifiable
+verifiably
+verification
+verifications
+verified
+verifier
+verifier's
+verifiers
+verifies
+verify
+verifying
+verily
+verisimilar
+verisimilarly
+verisimilitude
+veritable
+veritably
+verity
+vermeil
+vermicelli
+vermicide
+vermicular
+vermiculate
+vermiculated
+vermiculite
+vermiform
+vermilion
+vermin
+vermouth
+vernacular
+vernacularism
+vernacularly
+vernal
+vernally
+vernier
+versa
+versant
+versatile
+versatility
+verse
+versed
+verses
+versicle
+versification
+versifier
+versify
+version
+versions
+verso
+versos
+versus
+vertebra
+vertebrae
+vertebral
+vertebrate
+vertebrate's
+vertebrates
+vertex
+vertexes
+vertical
+verticality
+vertically
+verticals
+vertices
+vertiginous
+vertiginously
+vertigo
+verve
+very
+vesicant
+vesicle
+vesicles
+vesicular
+vesper
+vespers
+vessel
+vessel's
+vessels
+vest
+vestal
+vested
+vestibule
+vestige
+vestige's
+vestiges
+vestigial
+vesting
+vestment
+vestments
+vestries
+vestry
+vestryman
+vests
+vesture
+vestured
+vestures
+vesturing
+vet
+vetch
+veteran
+veteran's
+veterans
+veterinarian
+veterinarian's
+veterinarians
+veterinary
+veto
+vetoed
+vetoes
+vetoing
+vetted
+vetting
+vex
+vexation
+vexatious
+vexed
+vexes
+vexing
+vi
+via
+viability
+viable
+viably
+viaduct
+viaducts
+vial
+vial's
+vials
+viand
+viands
+viaticum
+vibes
+vibrancy
+vibrant
+vibrantly
+vibraphone
+vibraphonist
+vibrate
+vibrated
+vibrates
+vibrating
+vibration
+vibrations
+vibrato
+vibrator
+vibratory
+vibrissae
+vicar
+vicarage
+vicariate
+vicarious
+vicariously
+vicariousness
+vice
+vice's
+vicegerent
+viceroy
+viceroyalty
+vices
+vichyssoise
+vicinage
+vicinal
+vicinities
+vicinity
+vicious
+viciously
+viciousness
+vicissitude
+vicissitude's
+vicissitudes
+victim
+victim's
+victimisation
+victimisation's
+victimisations
+victimise
+victimised
+victimiser
+victimisers
+victimises
+victimising
+victims
+victor
+victor's
+victories
+victorious
+victoriously
+victors
+victory
+victory's
+victual
+victualler
+victualling
+victuals
+vicuna
+vide
+video
+videophone
+videos
+videotape
+videotape's
+videotaped
+videotapes
+videotaping
+videotex
+vie
+vied
+vies
+view
+viewable
+viewed
+viewer
+viewers
+viewfinder
+viewfinder's
+viewfinders
+viewgraph
+viewgraph's
+viewing
+viewings
+viewless
+viewpoint
+viewpoint's
+viewpoints
+views
+vigil
+vigilance
+vigilant
+vigilante
+vigilante's
+vigilantes
+vigilantism
+vigilantly
+vignette
+vignette's
+vignettes
+vigorous
+vigorously
+vigorousness
+vigour
+vigour's
+vii
+viii
+vile
+vilely
+vileness
+viler
+vilest
+vilification
+vilifications
+vilified
+vilifies
+vilify
+vilifying
+vilipend
+villa
+villa's
+village
+village's
+villager
+villagers
+villages
+villain
+villain's
+villainous
+villainously
+villains
+villainy
+villanelle
+villas
+villous
+vim
+vinaigrette
+vinculum
+vindicate
+vindicated
+vindicates
+vindicating
+vindication
+vindicator
+vindicators
+vindicatory
+vindictive
+vindictively
+vindictiveness
+vine
+vine's
+vinedresser
+vinedressers
+vinegar
+vinegarish
+vinegars
+vinegary
+vinery
+vines
+vineyard
+vineyard's
+vineyards
+viniculture
+viniferous
+vinous
+vintage
+vintages
+vintner
+vinyl
+viol
+viola
+violability
+violable
+violate
+violated
+violates
+violating
+violation
+violations
+violator
+violator's
+violators
+violence
+violent
+violently
+violet
+violet's
+violets
+violin
+violin's
+violinist
+violinist's
+violinists
+violins
+violist
+violoncello
+viper
+viper's
+viperous
+viperously
+vipers
+virago
+viral
+virally
+vireo
+virgin
+virgin's
+virginal
+virginally
+virginity
+virgins
+virgule
+viridian
+virile
+virility
+virologist
+virology
+virtual
+virtualises
+virtually
+virtue
+virtue's
+virtues
+virtuosi
+virtuosity
+virtuoso
+virtuoso's
+virtuosos
+virtuous
+virtuously
+virtuousness
+virulence
+virulent
+virulently
+virus
+virus's
+viruses
+visa
+visage
+visas
+viscera
+visceral
+viscerally
+viscid
+viscidity
+viscidly
+viscometer
+viscometer's
+viscometers
+viscose
+viscosities
+viscosity
+viscount
+viscount's
+viscounts
+viscous
+viscously
+visibilities
+visibility
+visible
+visibly
+vision
+vision's
+visionary
+visioning
+visionless
+visions
+visit
+visitant
+visitation
+visitation's
+visitations
+visited
+visiting
+visitor
+visitor's
+visitors
+visits
+visor
+visor's
+visors
+vista
+vista's
+vistas
+visual
+visualisation
+visualisation's
+visualisations
+visualise
+visualised
+visualises
+visualising
+visually
+visuals
+vita
+vitae
+vital
+vitalisation
+vitalisation's
+vitalisations
+vitalise
+vitalised
+vitalises
+vitalising
+vitality
+vitally
+vitals
+vitamin
+vitamin's
+vitamins
+vitiate
+vitiated
+vitiates
+vitiating
+vitiation
+viticulture
+viticulturist
+vitreous
+vitrify
+vitriol
+vitriolic
+vitro
+vituperate
+vituperation
+vituperative
+vituperatively
+vituperator
+viva
+vivacious
+vivaciously
+vivaciousness
+vivacity
+vive
+vivid
+vividly
+vividness
+vivification
+vivified
+vivify
+viviparous
+vivisect
+vivisection
+vivisectionist
+vivo
+vixen
+vizier
+vocabularies
+vocabulary
+vocal
+vocalic
+vocalically
+vocalisation
+vocalisation's
+vocalisations
+vocalise
+vocalised
+vocalises
+vocalising
+vocalism
+vocalist
+vocalists
+vocally
+vocals
+vocation
+vocation's
+vocational
+vocationally
+vocations
+vocative
+vocatively
+vociferate
+vociferation
+vociferous
+vociferously
+vociferousness
+vocoded
+vocoder
+vodka
+vodka's
+vogue
+voguish
+voice
+voiceband
+voiced
+voiceless
+voicelessly
+voiceprint
+voices
+voicing
+void
+voidance
+voided
+voiding
+voids
+voila
+voile
+volatile
+volatiles
+volatilisation
+volatilisation's
+volatilisations
+volatilise
+volatilises
+volatilising
+volatilities
+volatility
+volcanic
+volcanically
+volcanism
+volcano
+volcano's
+volcanoes
+vole
+voles
+volition
+volitional
+volitionally
+volley
+volleyball
+volleyball's
+volleyballs
+volleyed
+volleying
+volleys
+volt
+voltage
+voltages
+voltaic
+voltammeter
+voltmeter
+voltmeter's
+voltmeters
+volts
+volubility
+voluble
+volubly
+volume
+volume's
+volumes
+volumetric
+volumetrically
+voluminous
+voluminously
+voluntarily
+voluntarism
+voluntary
+volunteer
+volunteered
+volunteering
+volunteerism
+volunteers
+voluptuary
+voluptuous
+voluptuously
+volute
+vomit
+vomited
+vomiting
+vomits
+von
+voodoo
+voodooist
+voodoos
+voracious
+voraciously
+voraciousness
+voracity
+vortex
+vortexes
+vortices
+votary
+vote
+voted
+voter
+voters
+votes
+voting
+votive
+vouch
+voucher
+vouchers
+vouches
+vouching
+vouchsafe
+vouchsafed
+vouchsafes
+vouchsafing
+vow
+vowed
+vowel
+vowel's
+vowels
+vowing
+vows
+vox
+voyage
+voyaged
+voyager
+voyagers
+voyages
+voyageur
+voyageurs
+voyaging
+voyeur
+voyeurism
+voyeuristic
+voyeuristically
+voyeurs
+vroom
+vulcanisation
+vulcanisation's
+vulcanisations
+vulcanise
+vulcanised
+vulcanises
+vulcanising
+vulcanology
+vulgar
+vulgarisation
+vulgarisation's
+vulgarisations
+vulgarise
+vulgarised
+vulgarises
+vulgarising
+vulgarism
+vulgarity
+vulgarly
+vulgate
+vulnerabilities
+vulnerability
+vulnerable
+vulnerably
+vulnerary
+vulpine
+vulture
+vulture's
+vultures
+vulva
+vulvae
+vying
+wackier
+wackiness
+wacko
+wacky
+wad
+wadded
+wadding
+waddle
+waddled
+waddles
+waddling
+wade
+waded
+wader
+waders
+wades
+wadi
+wading
+wads
+wafer
+wafer's
+wafers
+waffle
+waffle's
+waffled
+waffles
+waffling
+waft
+wag
+wage
+waged
+wager
+wagered
+wagering
+wagers
+wages
+wageworker
+wagged
+wagging
+waggish
+waggishly
+waggishness
+waggle
+waggled
+waggles
+waggling
+waging
+wagon
+wagon's
+wagonload
+wagonload's
+wagonloads
+wagons
+wags
+wagtail
+waif
+wail
+wailed
+wailer
+wailing
+wails
+wainscot
+wainscoted
+wainscoting
+wainscots
+waist
+waist's
+waistband
+waistcloth
+waistcoat
+waistcoat's
+waistcoats
+waistline
+waists
+wait
+waited
+waiter
+waiter's
+waiters
+waiting
+waitress
+waitress's
+waitresses
+waits
+waive
+waived
+waiver
+waivers
+waives
+waiving
+wake
+waked
+wakeful
+wakefully
+wakefulness
+waken
+wakened
+wakening
+wakes
+wakeup
+waking
+wale
+waling
+walk
+walkabout
+walked
+walker
+walkers
+walking
+walkout
+walkover
+walks
+walkway
+walkway's
+walkways
+wall
+wall's
+wallaby
+wallah
+wallboard
+walled
+wallet
+wallet's
+wallets
+walleye
+walleyed
+wallflower
+walling
+wallop
+walloped
+walloping
+wallops
+wallow
+wallowed
+wallowing
+wallows
+wallpaper
+wallpapers
+walls
+wally
+walnut
+walnut's
+walnuts
+walrus
+walrus's
+walruses
+waltz
+waltzed
+waltzes
+waltzing
+wampum
+wan
+wand
+wander
+wandered
+wanderer
+wanderers
+wandering
+wanderings
+wanderlust
+wanders
+wane
+waned
+wanes
+wangle
+wangled
+wangles
+wangling
+waning
+wank
+wankel
+wanly
+want
+wanted
+wanting
+wanton
+wantonly
+wantonness
+wants
+wapiti
+wapitis
+war
+war's
+warble
+warbled
+warbler
+warbles
+warbling
+war bonnet
+ward
+warded
+warden
+wardens
+warder
+warding
+wardress
+wardrobe
+wardrobe's
+wardrobes
+wardroom
+wardrooms
+wards
+wardship
+ware
+warehouse
+warehoused
+warehouseman
+warehousemen
+warehouses
+warehousing
+wareroom
+wares
+warfare
+warhead
+warheads
+warhorse
+warhorses
+warier
+wariest
+warily
+wariness
+warless
+warlike
+warlock
+warlord
+warlords
+warm
+warmed
+warmer
+warmers
+warmest
+warming
+warmish
+warmly
+warmness
+warmonger
+warmongering
+warmongers
+warms
+warmth
+warn
+warned
+warning
+warningly
+warnings
+warns
+warp
+warp's
+warpath
+warped
+warping
+warplane
+warplane's
+warplanes
+warps
+warrant
+warrantable
+warranted
+warrantee
+warrantees
+warranties
+warranting
+warrantor
+warrantors
+warrants
+warranty
+warranty's
+warred
+warren
+warrens
+warring
+warrior
+warrior's
+warriors
+wars
+warship
+warship's
+warships
+wart
+wart's
+wartime
+wartimes
+warts
+warty
+wary
+was
+wash
+washable
+washbasin
+washboard
+washbowl
+washcloth
+washcloths
+washday
+washdays
+washed
+washer
+washers
+washerwoman
+washerwomen
+washes
+washhouse
+washing
+washings
+washout
+washrag
+washroom
+washrooms
+washstand
+washstands
+washtub
+washtubs
+washwoman
+washwomen
+washy
+wasn't
+wasp
+wasp's
+waspish
+waspishly
+waspishness
+wasps
+wassail
+wassailer
+wassailing
+wassails
+wastage
+wastages
+waste
+wastebasket
+wastebaskets
+wasted
+wasteful
+wastefully
+wastefulness
+wasteland
+wastelands
+wastepaper
+waster
+wastes
+wastewater
+wasting
+wastrel
+wastrels
+watch
+watchband
+watchcase
+watchdog
+watched
+watcher
+watchers
+watches
+watcheye
+watchful
+watchfully
+watchfulness
+watching
+watchmaker
+watchmakers
+watchman
+watchmen
+watchstrap
+watchtower
+watchword
+watchword's
+watchwords
+water
+waterborne
+waterbuck
+watercolour
+watercolour's
+watercolours
+watercourse
+watercraft
+watercress
+watered
+waterfall
+waterfall's
+waterfalls
+waterfowl
+waterfowl's
+waterfront
+waterhole
+waterhole's
+waterholes
+wateriness
+watering
+waterish
+waterless
+waterlessness
+waterline
+waterlines
+waterlog
+waterlogged
+waterloo
+waterman
+watermark
+watermelon
+waterpower
+waterproof
+waterproofed
+waterproofing
+waterproofs
+waters
+waterscape
+watershed
+watersheds
+waterside
+waterspout
+watertight
+water tower
+waterway
+waterway's
+waterways
+waterweed
+waterwheel
+waterworks
+watery
+watt
+wattage
+wattages
+wattle
+wattlebird
+wattled
+wattles
+wattmeter
+wattmeter's
+watts
+wave
+waveband
+wavebands
+waved
+waveform
+waveform's
+waveforms
+waveguide
+wavelength
+wavelengths
+wavelet
+wavelets
+wavelike
+waver
+wavered
+wavering
+waveringly
+wavers
+waves
+wavier
+waviness
+waving
+wavy
+wax
+waxberry
+waxbill
+waxed
+waxen
+waxes
+waxier
+waxing
+waxwing
+waxwing's
+waxwings
+waxwork
+waxworks
+waxy
+way
+way's
+waybill
+wayfarer
+wayfaring
+waylaid
+waylay
+ways
+wayside
+waysides
+wayward
+waywardly
+waywardness
+we
+we'd
+we'll
+we're
+we've
+weak
+weaken
+weakened
+weakening
+weakens
+weaker
+weakest
+weakfish
+weakling
+weakly
+weakness
+weaknesses
+weal
+weald
+wealth
+wealthier
+wealthiest
+wealthily
+wealthy
+wean
+weaned
+weaner
+weaning
+weanling
+weapon
+weapon's
+weaponed
+weaponry
+weapons
+wear
+wearable
+wearer
+wearied
+wearier
+wearies
+weariest
+wearily
+weariness
+wearing
+wearingly
+wearisome
+wearisomely
+wears
+weary
+wearying
+weasel
+weasel's
+weaselled
+weaselling
+weasels
+weather
+weather-beaten
+weatherboard
+weatherboarding
+weathercock
+weathercock's
+weathercocks
+weathered
+weatherglass
+weathering
+weatherman
+weatherproof
+weathers
+weather-strip
+weatherworn
+weave
+weaver
+weaverbird
+weavers
+weaves
+weaving
+web
+web's
+webbed
+webbing
+webfoot
+webs
+wed
+wedded
+wedding
+wedding's
+weddings
+wedge
+wedged
+wedges
+wedging
+wedlock
+weds
+wee
+weed
+weeded
+weeding
+weeds
+weedy
+week
+week's
+weekday
+weekday's
+weekdays
+weekend
+weekend's
+weekender
+weekends
+weeklies
+weekly
+weeknight
+weeknights
+weeks
+weep
+weepers
+weeping
+weeps
+weepy
+weever
+weevil
+weevily
+weft
+wefts
+weigh
+weighable
+weighbridge
+weighbridges
+weighed
+weighing
+weighs
+weight
+weighted
+weightier
+weightily
+weightiness
+weighting
+weightings
+weightless
+weightlessly
+weightlessness
+weightlifter
+weightlifting
+weights
+weighty
+weir
+weird
+weirdly
+weirdness
+weirdo
+weirs
+welcome
+welcomed
+welcomes
+welcoming
+weld
+welded
+welder
+welders
+welding
+welds
+welfare
+welkin
+well
+wellbeing
+wellborn
+welled
+wellhead
+wellies
+welling
+wellness
+wells
+well-wisher
+welsh
+welt
+welter
+weltered
+weltering
+welterweight
+welts
+wench
+wench's
+wenches
+wend
+went
+wept
+were
+weren't
+werewolf
+werewolf's
+werewolves
+weskit
+west
+westbound
+westerly
+western
+westerner
+westerners
+westernisation
+westernisation's
+westernisations
+westernise
+westernised
+westernises
+westernising
+westernmost
+westward
+westwards
+wet
+wetback
+wetland
+wetlands
+wetly
+wetness
+wets
+wetted
+wetter
+wettest
+wetting
+whack
+whacked
+whacking
+whacko
+whacks
+whale
+whaleback
+whaleboat
+whalebone
+whalebone's
+whalebones
+whaler
+whales
+whaling
+wham
+whammies
+whamming
+whammy
+whare
+wharf
+wharfage
+wharfs
+wharve
+wharves
+what
+what'd
+what're
+what's
+whatever
+whatnot
+whatsoever
+wheal
+wheat
+wheatear
+wheaten
+wheatworm
+wheedle
+wheedled
+wheedles
+wheedling
+wheel
+wheelbarrow
+wheelbarrow's
+wheelbarrows
+wheelbase
+wheelchair
+wheelchair's
+wheeled
+wheeler
+wheelers
+wheelhouse
+wheelie
+wheeling
+wheelman
+wheels
+wheelwork
+wheelwright
+wheeze
+wheezed
+wheezes
+wheezier
+wheezing
+wheezy
+whelk
+whelm
+whelp
+when
+whence
+whenever
+where
+where'd
+where're
+where's
+whereabouts
+whereas
+whereat
+whereby
+wherefore
+wherefores
+wherefrom
+wherein
+whereof
+whereon
+whereto
+whereunto
+whereupon
+wherever
+wherewith
+wherewithal
+wherries
+wherry
+whet
+whether
+whets
+whetstone
+whetted
+whetting
+whew
+whey
+which
+whichever
+whicker
+whickered
+whickering
+whiff
+whiffletree
+while
+whiled
+whiles
+whiling
+whilom
+whilst
+whim
+whim's
+whimbrel
+whimper
+whimpered
+whimpering
+whimpers
+whims
+whimsey
+whimsical
+whimsicality
+whimsically
+whimsicalness
+whimsies
+whimsy
+whimsy's
+whine
+whined
+whiner
+whines
+whiney
+whinge
+whining
+whiningly
+whinnied
+whinnies
+whinny
+whinnying
+whip
+whip's
+whipcord
+whiplash
+whiplashes
+whipped
+whippersnapper
+whippet
+whippier
+whipping
+whipping's
+whippings
+whippoorwill
+whippy
+whips
+whipsaw
+whipsawed
+whipstall
+whipstitch
+whipstock
+whipworm
+whir
+whirl
+whirled
+whirligig
+whirling
+whirlpool
+whirlpool's
+whirlpools
+whirls
+whirlwind
+whirly
+whirlybird
+whirr
+whirring
+whish
+whisht
+whisk
+whisked
+whisker
+whiskered
+whiskers
+whiskery
+whiskey
+whiskey's
+whiskeys
+whiskies
+whisking
+whisks
+whisky
+whisky's
+whisper
+whispered
+whisperer
+whispering
+whisperingly
+whisperings
+whispers
+whispery
+whist
+whistle
+whistled
+whistler
+whistlers
+whistles
+whistling
+whit
+white
+whitebait
+whitebeard
+whitecap
+whiteface
+whitefish
+whitefly
+whitely
+whiten
+whitened
+whitener
+whiteners
+whiteness
+whitening
+whitens
+whiteout
+whiter
+whites
+whitesmith
+whitest
+whitetail
+whitethorn
+whitethroat
+whitewall
+whitewash
+whitewashed
+whitewasher
+whitewashing
+white water
+whitewood
+whitey
+whither
+whithersoever
+whitherward
+whiting
+whitish
+whittle
+whittled
+whittler
+whittles
+whittling
+whittlings
+whiz
+whizz
+whiz-bang
+whizzed
+whizzes
+whizzing
+who
+who'd
+who'll
+who's
+who've
+whoa
+whodunit
+whodunit's
+whodunits
+whoever
+whole
+wholefood
+wholehearted
+wholeheartedly
+wholemeal
+wholeness
+wholes
+wholesale
+wholesaled
+wholesaler
+wholesalers
+wholesales
+wholesaling
+wholesome
+wholesomely
+wholesomeness
+wholly
+whom
+whomever
+whomsoever
+whoop
+whooped
+whoopee
+whooper
+whooping
+whoopla
+whoops
+whoosh
+whop
+whopper
+whoppers
+whopping
+whore
+whore's
+whoredom
+whorehouse
+whoremonger
+whores
+whoreson
+whoring
+whorish
+whorl
+whorl's
+whorled
+whorls
+whortleberry
+whose
+whosesoever
+whoso
+whosoever
+why
+whydah
+whys
+wick
+wicked
+wickedly
+wickedness
+wicker
+wickerwork
+wicket
+wicketkeeper
+wicketkeepers
+wickets
+wicking
+wicks
+wicopy
+widdershins
+wide
+widely
+widen
+widened
+widener
+wideness
+widening
+widens
+wider
+widespread
+widest
+widgeon
+widgeons
+widget
+widget's
+widgets
+widow
+widowed
+widower
+widowers
+widowhood
+widows
+width
+widths
+widthways
+wield
+wielded
+wielder
+wielding
+wields
+wieldy
+wiener
+wieners
+wienie
+wife
+wife's
+wifehood
+wifeless
+wifeliness
+wifely
+wig
+wig's
+wigged
+wigging
+wiggle
+wiggled
+wiggler
+wiggles
+wiggling
+wiggly
+wigmaker
+wigs
+wigwag
+wigwam
+wild
+wildcard
+wildcarding
+wildcards
+wildcat
+wildcat's
+wildcats
+wildcatted
+wildcatter
+wildcatting
+wildebeest
+wildebeest's
+wilder
+wilderment
+wilderness
+wildest
+wildfire
+wildflower
+wildflower's
+wildflowers
+wildfowl
+wildfowler
+wildfowling
+wilding
+wildish
+wildlife
+wildling
+wildly
+wildness
+wildwood
+wile
+wiled
+wiles
+wilful
+wilfully
+wilier
+wilily
+wiliness
+wiling
+will
+willable
+willed
+willet
+willies
+willing
+willingly
+willingness
+williwaw
+willow
+willow's
+willower
+willows
+willowware
+willowy
+willpower
+wills
+wilt
+wilted
+wilting
+wilts
+wily
+wimble
+wimbled
+wimbles
+wimbling
+wimp
+wimp's
+wimpier
+wimpiest
+wimple
+wimpled
+wimpling
+wimps
+wimpy
+win
+wince
+winced
+winces
+wincey
+winch
+winched
+wincher
+winches
+winchester
+winching
+wincing
+wind
+windage
+windbag
+windbags
+windblown
+windbound
+windbreak
+windbreaks
+windburn
+windburned
+windcheater
+windcheaters
+windchill
+winded
+winder
+winders
+windfall
+windflower
+windgall
+windhover
+windier
+windily
+windiness
+winding
+windjammer
+windlass
+windlassed
+windlasses
+windlassing
+windless
+windmill
+windmill's
+windmills
+window
+window's
+windowed
+windowing
+windowless
+windowpane
+windowpanes
+windows
+windowsill
+windpipe
+windproof
+windrow
+winds
+windsail
+windscreen
+windshield
+windsock
+windstorm
+windsurf
+windsurfed
+windsurfing
+windsurfs
+windswept
+windup
+windward
+windy
+wine
+winebibber
+wined
+wineglass
+winegrower
+winepress
+winery
+wines
+wineskin
+wing
+wingback
+wing beat
+winged
+winger
+wingers
+winging
+wingless
+winglessness
+winglet
+wingman
+wingmen
+wingover
+wings
+wingspan
+wingspread
+wingspread's
+wingspreads
+wingtip
+wining
+wink
+winked
+winker
+winking
+winkle
+winkled
+winkles
+winkling
+winks
+winless
+winnable
+winner
+winner's
+winners
+winning
+winningly
+winnings
+winnow
+winnower
+wino
+winos
+wins
+winsome
+winsomely
+winsomeness
+winter
+wintered
+winterer
+winterfeed
+wintergreen
+wintering
+winterisation
+winterisation's
+winterisations
+winterise
+winterised
+winterises
+winterising
+winterkill
+winters
+wintertime
+winterweight
+wintrier
+wintrily
+wintriness
+wintry
+winy
+winze
+wipe
+wiped
+wiper
+wipers
+wipes
+wiping
+wire
+wired
+wiredraw
+wiredrawer
+wiredrawn
+wirehair
+wirehaired
+wireless
+wireman
+wiremen
+wirer
+wires
+wiretap
+wiretap's
+wiretapping
+wiretaps
+wirewalker
+wirework
+wireworks
+wireworm
+wirier
+wirily
+wiriness
+wiring
+wirings
+wirra
+wiry
+wisdom
+wisdoms
+wise
+wiseacre
+wisecrack
+wisecracked
+wisecracker
+wised
+wisely
+wisenheimer
+wisent
+wiser
+wises
+wisest
+wise woman
+wish
+wishbone
+wished
+wisher
+wishers
+wishes
+wishful
+wishfully
+wishing
+wising
+wisp
+wisp's
+wisps
+wispy
+wisteria
+wistful
+wistfully
+wistfulness
+wit
+wit's
+witan
+witch
+witchcraft
+witchery
+witches
+witching
+witchlike
+witenagemot
+with
+withal
+withdraw
+withdrawal
+withdrawal's
+withdrawals
+withdrawer
+withdrawing
+withdrawn
+withdrawnness
+withdraws
+withdrew
+withe
+wither
+withered
+withering
+witheringly
+withers
+withershins
+withheld
+withhold
+withholder
+withholders
+withholding
+withholdings
+withholds
+withies
+within
+withindoors
+without
+withoutdoors
+withstand
+withstanding
+withstands
+withstood
+withy
+witless
+witling
+witness
+witnessed
+witnesses
+witnessing
+wits
+witted
+witter
+witticism
+wittier
+wittiest
+wittily
+wittiness
+witting
+wittingly
+wittol
+witty
+wives
+wiz
+wizard
+wizard's
+wizardly
+wizardry
+wizards
+wizen
+wizened
+wobble
+wobbled
+wobbles
+wobbliness
+wobbling
+wobbly
+woe
+woebegone
+woeful
+woefully
+wog
+woggle
+wok
+woke
+woken
+wold
+wolf
+wolfhound
+wolfish
+wolfishly
+wolfishness
+wolver
+wolverine
+wolverine's
+wolverines
+wolves
+woman
+woman's
+womanhood
+womanise
+womanised
+womaniser
+womanisers
+womanises
+womanish
+womanishly
+womanising
+womankind
+womanless
+womanlike
+womanliness
+womanly
+womanpower
+womb
+womb's
+wombat
+wombat's
+wombats
+wombs
+women
+women's
+womenfolk
+won
+won't
+wonder
+wondered
+wonderer
+wonderful
+wonderfully
+wonderfulness
+wondering
+wonderingly
+wonderland
+wonderland's
+wonderment
+wonders
+wonderwork
+wondrous
+wondrously
+wondrousness
+wonky
+wont
+wonted
+wontedly
+wontedness
+wonting
+wonton
+woo
+wood
+wood's
+woodborer
+woodcarver
+woodcarving
+woodchat
+woodchopper
+woodchoppers
+woodchuck
+woodchuck's
+woodchucks
+woodcock
+woodcock's
+woodcocks
+woodcraft
+woodcut
+woodcutter
+woodcutters
+woodcutting
+wooded
+wooden
+woodenhead
+woodenheaded
+woodenly
+woodenness
+woodenware
+woodgrouse
+woodhen
+woodier
+woodiness
+wooding
+woodland
+woodlander
+woodlands
+woodlark
+woodlot
+woodlouse
+woodman
+woodnote
+woodpecker
+woodpecker's
+woodpeckers
+woodpile
+woodruff
+woodrush
+woods
+woodscrew
+woodshed
+woodsman
+woodsy
+woodwind
+woodwork
+woodworker
+woodworking
+woodworm
+woody
+woodyard
+wooed
+wooer
+woof
+woofed
+woofer
+woofers
+woofing
+woofs
+wooing
+wool
+woolfell
+woolgatherer
+woolgrower
+woollen
+woollens
+woollier
+woollies
+woolliness
+woolly
+woolpack
+wools
+woolsack
+woolshed
+woolskin
+woops
+woos
+woozier
+woozily
+wooziness
+woozy
+wop
+wops
+word
+word's
+wordage
+wordbook
+worded
+wordier
+wordily
+wordiness
+wording
+wordings
+wordless
+wordlessly
+wordlessness
+wordmonger
+wordplay
+words
+wordy
+wore
+work
+workability
+workable
+workableness
+workably
+workaday
+workaround
+workaround's
+workarounds
+workbag
+workbasket
+workbench
+workbench's
+workbenches
+workboat
+workbook
+workbook's
+workbooks
+workbox
+workday
+worked
+worker
+worker's
+workers
+workfolk
+workfolks
+workforce
+workforce's
+workforces
+workgroup
+workgroups
+workhorse
+workhorse's
+workhorses
+workhouse
+workhouses
+working
+workingman
+workingmen
+workings
+workless
+workload
+workloads
+workman
+workmanlike
+workmanship
+workmate
+workmates
+workmen
+workmen's
+workout
+workouts
+workpeople
+workplace
+workplace's
+workplaces
+workroom
+workrooms
+works
+worksheet
+worksheets
+workshop
+workshop's
+workshops
+workspace
+workspaces
+workstation
+workstation's
+workstations
+worktable
+workweek
+workwoman
+world
+world's
+worldliness
+worldly
+worlds
+worldwide
+worm
+wormed
+wormer
+wormhole
+wormier
+worming
+wormlike
+worms
+wormseed
+wormwood
+wormy
+worn
+worried
+worriedly
+worrier
+worriers
+worries
+worriment
+worrisome
+worrisomely
+worry
+worrying
+worryingly
+worrywart
+worse
+worsen
+worsened
+worsening
+worsens
+worship
+worshipful
+worshipfully
+worshipfulness
+worshipped
+worshipper
+worshipper's
+worshippers
+worshipping
+worships
+worst
+worsted
+wort
+worth
+worthier
+worthies
+worthiest
+worthily
+worthiness
+worthless
+worthlessly
+worthlessness
+worthwhile
+worthy
+would
+would've
+wouldn't
+wouldst
+wound
+wounded
+wounding
+woundless
+wounds
+woundwort
+wove
+woven
+wow
+wrack
+wracked
+wracking
+wracks
+wraith
+wraiths
+wrangle
+wrangled
+wrangler
+wranglers
+wrangles
+wrangling
+wrap
+wrap's
+wraparound
+wrapped
+wrapper
+wrapper's
+wrappers
+wrapping
+wrappings
+wrapround
+wraps
+wrasse
+wrath
+wrathful
+wrathfully
+wrathfulness
+wreak
+wreaks
+wreath
+wreathe
+wreathed
+wreathes
+wreathing
+wreaths
+wreck
+wreckage
+wrecked
+wrecker
+wreckers
+wreckful
+wrecking
+wrecks
+wren
+wren's
+wrench
+wrenched
+wrenches
+wrenching
+wrenchingly
+wrens
+wrest
+wrested
+wrester
+wresting
+wrestle
+wrestled
+wrestler
+wrestles
+wrestling
+wrests
+wretch
+wretched
+wretchedly
+wretchedness
+wretches
+wrier
+wriest
+wriggle
+wriggled
+wriggler
+wriggles
+wriggling
+wriggly
+wright
+wring
+wringer
+wringing
+wrings
+wrinkle
+wrinkled
+wrinkles
+wrinkling
+wrinkly
+wrist
+wrist's
+wristband
+wristlet
+wristlock
+wrists
+wristwatch
+wristwatch's
+wristwatches
+writ
+writ's
+write
+writer
+writer's
+writers
+writes
+writhe
+writhed
+writhen
+writhes
+writhing
+writing
+writings
+writs
+written
+wrong
+wrongdoer
+wrongdoers
+wrongdoing
+wronged
+wrongful
+wrongfully
+wrongfulness
+wrongheaded
+wronging
+wrongly
+wrongness
+wrongs
+wrote
+wroth
+wrought
+wrung
+wry
+wryly
+wryneck
+wulfenite
+wunderkind
+www
+wyvern
+xanthippe
+xanthochroid
+xci
+xcii
+xciv
+xcix
+xcvi
+xcvii
+xenomorphic
+xenon
+xenophile
+xenophobe
+xenophobia
+xenophobic
+xeric
+xerographic
+xerographically
+xerography
+xi
+xii
+xiii
+xiphosuran
+xiv
+xix
+xv
+xvi
+xvii
+xviii
+xx
+xxi
+xxii
+xxiii
+xxiv
+xxix
+xxv
+xxvi
+xxvii
+xxviii
+xxx
+xxxi
+xxxii
+xxxiii
+xxxiv
+xxxix
+xxxv
+xxxvi
+xxxvii
+xxxviii
+xylem
+xylograph
+xylography
+xylophone
+xylophones
+xylophonist
+xylotomous
+xylotomy
+yacht
+yachters
+yachting
+yachts
+yachtsman
+yachtsmen
+yah
+yak
+yakking
+yaks
+yam
+yammer
+yang
+yank
+yanked
+yanking
+yanks
+yap
+yapok
+yapping
+yard
+yard's
+yardage
+yardarm
+yardbird
+yarded
+yardman
+yardmaster
+yards
+yardstick
+yardstick's
+yardsticks
+yare
+yarely
+yarmulke
+yarn
+yarn's
+yarned
+yarning
+yarns
+yarrow
+yataghan
+yaupon
+yaw
+yawed
+yawing
+yawl
+yawn
+yawner
+yawning
+yawningly
+yawns
+yawp
+yaws
+ycleped
+yclept
+ye
+yea
+yeah
+yean
+yeanling
+year
+year's
+yearbook
+yearling
+yearlong
+yearly
+yearn
+yearned
+yearning
+yearningly
+yearnings
+yearns
+years
+yeas
+yeast
+yeast's
+yeastier
+yeastily
+yeastiness
+yeasts
+yeasty
+yecch
+yell
+yelled
+yeller
+yelling
+yellow
+yellowbird
+yellowed
+yellowhammer
+yellowing
+yellowish
+yellowlegs
+yellowness
+yellows
+yellowtail
+yellowweed
+yellowwood
+yells
+yelp
+yelped
+yelper
+yelping
+yelps
+yen
+yeoman
+yeomanly
+yeomanry
+yeomen
+yep
+yes
+yeses
+yeshiva
+yester
+yesterday
+yesterday's
+yesterdays
+yesteryear
+yet
+yeti
+yew
+yield
+yielded
+yielder
+yielding
+yields
+yin
+yip
+yippee
+yipping
+ylem
+yob
+yodel
+yodelled
+yodeller
+yodelling
+yodels
+yoga
+yogh
+yoghurt
+yoghurt's
+yogi
+yogic
+yoicks
+yoke
+yoke's
+yokefellow
+yokel
+yokels
+yokes
+yoking
+yolk
+yolks
+yolky
+yon
+yond
+yonder
+yoni
+yore
+you
+you'd
+you'll
+you're
+you've
+young
+younger
+youngest
+youngish
+youngling
+youngster
+youngster's
+youngsters
+your
+yours
+yourself
+yourselves
+youth
+youth's
+youthful
+youthfully
+youthfulness
+youths
+yow
+yowl
+yr
+ytterbium
+yttrium
+yucca
+yuck
+yuk
+yule
+yuletide
+yummier
+yummy
+yup
+yuppie
+yuppie's
+yuppies
+yurt
+zabaglione
+zanier
+zanies
+zanily
+zaniness
+zany
+zap
+zapped
+zapping
+zaps
+zarf
+zarzuela
+zeal
+zealot
+zealotry
+zealous
+zealously
+zealousness
+zebra
+zebra's
+zebras
+zebrawood
+zebu
+zed
+zedoary
+zee
+zeitgeist
+zener
+zenith
+zeolite
+zeolitic
+zephyr
+zeppelin
+zero
+zeroed
+zeroes
+zeroing
+zeroise
+zeros
+zest
+zestful
+zestfully
+zestfulness
+zestier
+zesty
+zeta
+zetas
+zeugma
+zibeline
+zibet
+ziff
+ziggurat
+zigzag
+zigzagged
+zigzagging
+zilch
+zillion
+zinc
+zinc's
+zincograph
+zincography
+zinfandel
+zing
+zinger
+zingier
+zings
+zingy
+zinnia
+zip
+zipped
+zipper
+zippered
+zippers
+zippier
+zipping
+zippy
+zips
+zircon
+zirconia
+zirconium
+zither
+zitherist
+zithers
+zizith
+zloty
+zlotys
+zodiac
+zodiacal
+zodiacs
+zombie
+zombies
+zonal
+zone
+zoned
+zones
+zoning
+zonked
+zoo
+zoo's
+zoochemistry
+zoogeographer
+zoogeographic
+zoogeography
+zoography
+zooid
+zoolatry
+zoological
+zoologically
+zoologist
+zoologists
+zoology
+zoom
+zoomed
+zoometry
+zooming
+zoomorphic
+zoomorphism
+zooms
+zooparasite
+zoophobia
+zoophyte
+zooplankton
+zoos
+zoosperm
+zoosporangium
+zoospore
+zootomy
+zootoxin
+zootoxins
+zounds
+zucchetto
+zucchini
+zwitterions
+zygote
+zygote's
+zygotes
+zymurgy
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/.gitignore b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/.gitignore
new file mode 100644
index 0000000..81ecd26
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/.gitignore
@@ -0,0 +1,25 @@
+# C++ objects and libs
+
+*.slo
+*.lo
+*.o
+*.a
+*.la
+*.lai
+*.so
+*.dll
+*.dylib
+
+# Qt-es
+
+*.pro.user
+*.pro.user.*
+moc_*.cpp
+qrc_*.cpp
+*-build-*
+ui_*.h
+
+# logs
+logs/*
+# binary
+file-splitter-and-joiner
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/README.md b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/README.md
new file mode 100644
index 0000000..70ee881
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/README.md
@@ -0,0 +1,25 @@
+###### File splitter/joiner sample
+
+**About**
+
+This is multi-threaded application that uses threads in order to split/merge part/s. The idea is not to show how to use threading in Qt, in fact, I might have done it wrong ([this document](http://qt-project.org/wiki/Threads_Events_QObjects) can be helpful to make thread-use better), the idea behind this sample is to show you a possible usage of Easylogging++ is fairly large scale i.e, multiple files project using multi-threading.
+
+**Usage**
+
+Once you successfully compile the project using minimum of Qt 4.6.2, you can use this in two ways;
+
+ * Using command-line
+
+   **Split**: `./file-splitter-joiner split [source_file] [total_parts] [destination_dir]`
+
+   **Join**:  `./file-splitter-joiner join [destination_file] [parts...]`
+
+ * Using GUI
+
+        When you don't provide enough parameters, a GUI based program will be launched
+
+**Screen Shots**
+
+   [![Splitter](http://easylogging.org/images/screenshots/splitter.png)](http://easylogging.org/images/screenshots/splitter.png)
+
+   [![Joiner](http://easylogging.org/images/screenshots/joiner.png)](http://easylogging.org/images/screenshots/joiner.png)
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/about.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/about.cpp
new file mode 100644
index 0000000..9d84660
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/about.cpp
@@ -0,0 +1,20 @@
+#include "about.h"
+#include "ui_about.h"
+#include <QMessageBox>
+#include "easylogging++.h"
+
+About::About(QWidget *parent) :
+    QWidget(parent),
+    ui(new Ui::About) {
+    ui->setupUi(this);
+    ui->el_info->setText(QString("Easylogging++ v") + QString(el::VersionInfo::version().c_str()));
+}
+
+About::~About() {
+    delete ui;
+}
+
+void About::on_pushButton_clicked() {
+    QMessageBox aboutQt;
+    aboutQt.aboutQt(this);
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/about.h b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/about.h
new file mode 100644
index 0000000..53e89bb
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/about.h
@@ -0,0 +1,25 @@
+#ifndef ABOUT_H
+#define ABOUT_H
+
+#include <QWidget>
+
+
+namespace Ui {
+class About;
+}
+
+class About : public QWidget {
+    Q_OBJECT
+    
+public:
+    explicit About(QWidget *parent = 0);
+    ~About();
+    
+private slots:
+    void on_pushButton_clicked();
+
+private:
+    Ui::About *ui;
+};
+
+#endif // ABOUT_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/about.ui b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/about.ui
new file mode 100644
index 0000000..d89cad9
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/about.ui
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>About</class>
+ <widget class="QWidget" name="About">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>523</width>
+    <height>378</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <widget class="QLabel" name="labelTitle">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>0</y>
+     <width>291</width>
+     <height>71</height>
+    </rect>
+   </property>
+   <property name="font">
+    <font>
+     <pointsize>20</pointsize>
+     <weight>75</weight>
+     <bold>true</bold>
+    </font>
+   </property>
+   <property name="text">
+    <string>File Splitter / Joiner</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>300</y>
+     <width>221</width>
+     <height>61</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href=&quot;http://labs.muflihun.com/easyloggingpp&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;Easylogging++&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://muflihun.com&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;Muflihun.com&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_2">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>260</y>
+     <width>61</width>
+     <height>17</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/muflihun/easyloggingpp&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;Github&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_3">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>280</y>
+     <width>71</width>
+     <height>17</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href=&quot;http://qt.io&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;Qt&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_4">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>50</y>
+     <width>471</width>
+     <height>121</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;This simple tool was made possible with Qt framework written for Easylogging++ sample.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+   </property>
+   <property name="wordWrap">
+    <bool>true</bool>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="pushButton">
+   <property name="geometry">
+    <rect>
+     <x>410</x>
+     <y>330</y>
+     <width>101</width>
+     <height>27</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>About Qt</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="el_info">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>150</y>
+     <width>471</width>
+     <height>91</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string/>
+   </property>
+  </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/addsplittedfiledialog.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/addsplittedfiledialog.cpp
new file mode 100644
index 0000000..c37e3e4
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/addsplittedfiledialog.cpp
@@ -0,0 +1,116 @@
+#include "addsplittedfiledialog.h"
+#include "ui_addsplittedfiledialog.h"
+#include <QFileDialog>
+#include <QTreeWidgetItem>
+#include <QMessageBox>
+#include <QListWidgetItem>
+#include <QDialogButtonBox>
+#include <QFileInfo>
+#include <QDebug>
+#include "partprocessor.h"
+#include "easylogging++.h"
+
+AddSplittedFileDialog::AddSplittedFileDialog(QTreeWidget* parentView, QWidget *parent) :
+    QDialog(parent),
+    filePartsPointers(NULL),
+    parentView(parentView),
+    ui(new Ui::AddSplittedFileDialog) {
+    ui->setupUi(this);
+    buttonOkCancel = new QDialogButtonBox(this);
+    buttonOkCancel->setObjectName(QString::fromUtf8("buttonBox"));
+    buttonOkCancel->setGeometry(QRect(10, 200, 531, 32));
+    buttonOkCancel->setOrientation(Qt::Horizontal);
+    buttonOkCancel->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
+    QObject::connect(buttonOkCancel, SIGNAL(accepted()), this, SLOT(on_buttonBox_accepted()));
+    QObject::connect(buttonOkCancel, SIGNAL(rejected()), this, SLOT(reject()));
+
+    filenamePointer = parentView->selectedItems().size() > 0 ? parentView->selectedItems()[0] : NULL;
+    if (filenamePointer && filenamePointer->parent() != NULL) {
+        filenamePointer = filenamePointer->parent();
+    }
+    if (filenamePointer) {
+        ui->textFilename->setText(filenamePointer->text(0));
+        for (int i = 0; i < filenamePointer->childCount(); i++) {
+            filePartsPointers = new QTreeWidgetItem(ui->treeParts,
+                                                    QStringList()
+                                                    << filenamePointer->child(i)->text(0)
+                                                    << filenamePointer->child(i)->text(1)
+                                                    << filenamePointer->child(i)->text(2));
+        }
+    }
+    ui->treeParts->setSelectionMode(QTreeWidget::MultiSelection);
+    this->setWindowTitle("Add Part(s)");
+}
+
+AddSplittedFileDialog::~AddSplittedFileDialog() {
+    for (int i = ui->treeParts->topLevelItemCount(); i >= 0; i--) {
+        delete ui->treeParts->topLevelItem(i);
+    }
+    delete buttonOkCancel;
+    delete ui;
+}
+
+void AddSplittedFileDialog::on_buttonAddPart_clicked() {
+    QFileDialog fileDialog(this, "Choose File(s) to Join", "", "*" + QString(PartProcessor::kPartSuffix) + "*");
+    fileDialog.setFileMode(QFileDialog::ExistingFiles);
+    fileDialog.exec();
+    QStringList filenames = fileDialog.selectedFiles();
+    QFileInfo fileInfo;
+    QString fileSize = "0";
+    Q_FOREACH (QString filename, filenames) {
+        fileInfo.setFile(filename);
+        fileSize = QString::number(fileInfo.size());
+        filePartsPointers = new QTreeWidgetItem(ui->treeParts, QStringList() << filename << fileSize << "Queued");
+        VLOG(1) << "Added part [" << filename << "]";
+    }
+}
+
+void AddSplittedFileDialog::on_buttonBox_accepted() {
+    if (ui->treeParts->topLevelItemCount() > 0) {
+        if (ui->textFilename->text() == "") {
+            QMessageBox messageBox(QMessageBox::Warning, "Filename", "Please enter filename", QMessageBox::NoButton, this);
+            messageBox.exec();
+            ui->textFilename->setFocus();
+            return;
+        }
+        if (!filenamePointer) {
+            filenamePointer = new QTreeWidgetItem(parentView);
+        } else {
+            for (int i = filenamePointer->childCount(); i >= 0; i--) {
+                delete filenamePointer->child(i);
+            }
+            delete filenamePointer;
+            filenamePointer = new QTreeWidgetItem(parentView);
+        }
+        double totalSize = 0;
+        for (int i = 0; i < ui->treeParts->topLevelItemCount(); i++) {
+            filePartsPointers = ui->treeParts->topLevelItem(i);
+            filePartsPointers = new QTreeWidgetItem(filenamePointer,
+                                                    QStringList()
+                                                    << filePartsPointers->text(0)
+                                                    << filePartsPointers->text(1)
+                                                    << filePartsPointers->text(2));
+            totalSize += filePartsPointers->text(1).toDouble();
+        }
+        filenamePointer->setText(0, ui->textFilename->text());
+        filenamePointer->setText(1, QString::number(totalSize));
+        filenamePointer->setText(2, "Queued");
+        this->accept();
+    }
+
+}
+
+void AddSplittedFileDialog::on_pushButton_clicked() {
+    QFileDialog fileDialog(this, "Choose Destination Filename","","All Files (*.*)");
+    fileDialog.setFileMode(QFileDialog::AnyFile);
+    fileDialog.setAcceptMode(QFileDialog::AcceptSave);
+    fileDialog.setDirectory(ui->textFilename->text());
+    fileDialog.exec();
+    if (fileDialog.selectedFiles().size() > 0) {
+        ui->textFilename->setText(fileDialog.selectedFiles()[0]);
+    }
+}
+
+void AddSplittedFileDialog::on_buttonRemove_clicked() {
+    qDeleteAll(ui->treeParts->selectedItems());
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/addsplittedfiledialog.h b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/addsplittedfiledialog.h
new file mode 100644
index 0000000..9bc9c59
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/addsplittedfiledialog.h
@@ -0,0 +1,37 @@
+#ifndef ADDSPLITTEDFILEDIALOG_H
+#define ADDSPLITTEDFILEDIALOG_H
+
+#include <QDialog>
+
+namespace Ui {
+class AddSplittedFileDialog;
+}
+
+class QTreeWidget;
+class QTreeWidgetItem;
+class QDialogButtonBox;
+
+class AddSplittedFileDialog : public QDialog {
+    Q_OBJECT
+    
+public:
+    explicit AddSplittedFileDialog(QTreeWidget* parentView, QWidget *parent = 0);
+    ~AddSplittedFileDialog();
+    
+private slots:
+    void on_buttonAddPart_clicked();
+    void on_buttonBox_accepted();
+
+    void on_pushButton_clicked();
+
+    void on_buttonRemove_clicked();
+
+private:
+    Ui::AddSplittedFileDialog *ui;
+    QTreeWidgetItem* filenamePointer;
+    QTreeWidgetItem* filePartsPointers;
+    QTreeWidget* parentView;
+    QDialogButtonBox* buttonOkCancel;
+};
+
+#endif // ADDSPLITTEDFILEDIALOG_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/addsplittedfiledialog.ui b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/addsplittedfiledialog.ui
new file mode 100644
index 0000000..9ee6e35
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/addsplittedfiledialog.ui
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>AddSplittedFileDialog</class>
+ <widget class="QDialog" name="AddSplittedFileDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>551</width>
+    <height>240</height>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>551</width>
+    <height>240</height>
+   </size>
+  </property>
+  <property name="maximumSize">
+   <size>
+    <width>551</width>
+    <height>240</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>Dialog</string>
+  </property>
+  <widget class="QLineEdit" name="textFilename">
+   <property name="geometry">
+    <rect>
+     <x>82</x>
+     <y>10</y>
+     <width>361</width>
+     <height>27</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string/>
+   </property>
+  </widget>
+  <widget class="QLabel" name="labelFilename">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>15</y>
+     <width>71</width>
+     <height>17</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Filename:</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="labelParts">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>60</y>
+     <width>111</width>
+     <height>17</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Parts (in order)</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="buttonAddPart">
+   <property name="geometry">
+    <rect>
+     <x>510</x>
+     <y>50</y>
+     <width>31</width>
+     <height>27</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>+</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="pushButton">
+   <property name="geometry">
+    <rect>
+     <x>450</x>
+     <y>10</y>
+     <width>91</width>
+     <height>27</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Browse</string>
+   </property>
+  </widget>
+  <widget class="QTreeWidget" name="treeParts">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>80</y>
+     <width>531</width>
+     <height>121</height>
+    </rect>
+   </property>
+   <property name="editTriggers">
+    <set>QAbstractItemView::NoEditTriggers</set>
+   </property>
+   <property name="headerHidden">
+    <bool>true</bool>
+   </property>
+   <property name="columnCount">
+    <number>1</number>
+   </property>
+   <column>
+    <property name="text">
+     <string notr="true">1</string>
+    </property>
+   </column>
+  </widget>
+  <widget class="QPushButton" name="buttonRemove">
+   <property name="geometry">
+    <rect>
+     <x>470</x>
+     <y>50</y>
+     <width>31</width>
+     <height>27</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>-</string>
+   </property>
+  </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/easylogging++.h b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/easylogging++.h
new file mode 100644
index 0000000..77a0013
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/easylogging++.h
@@ -0,0 +1,5 @@
+// Header for sample that sub-includes original header from src/ folder
+#ifndef EASYLOGGING_FOR_SAMPLES_H
+#define EASYLOGGING_FOR_SAMPLES_H
+#include "../../../src/easylogging++.h"
+#endif // EASYLOGGING_FOR_SAMPLES_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/file-splitter-and-joiner.pro b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/file-splitter-and-joiner.pro
new file mode 100644
index 0000000..e87c9a2
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/file-splitter-and-joiner.pro
@@ -0,0 +1,55 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2012-12-12T18:34:35
+#
+#-------------------------------------------------
+
+QT       += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+TARGET = file-splitter-and-joiner
+TEMPLATE = app
+
+DEFINES += ELPP_QT_LOGGING    \
+          ELPP_FEATURE_ALL \
+          ELPP_STL_LOGGING   \
+          ELPP_STRICT_SIZE_CHECK \
+          ELPP_FEATURE_CRASH_LOG \
+          ELPP_THREAD_SAFE
+
+COMPILER = g++
+QMAKE_CC = $$COMPILER
+QMAKE_CXX = $$COMPILER
+QMAKE_LINK = $$COMPILER
+
+QMAKE_CXXFLAGS += -std=c++11
+
+SOURCES += main.cpp\
+        mainwindow.cpp \
+    splitterwidget.cpp \
+    joinerwidget.cpp \
+    splitablefiledelegate.cpp \
+    splittercore.cpp \
+    partprocessor.cpp \
+    addsplittedfiledialog.cpp \
+    joinercore.cpp \
+    about.cpp \
+    ../../../src/easylogging++.cc
+
+HEADERS  += mainwindow.h \
+    easylogging++.h \
+    splitterwidget.h \
+    joinerwidget.h \
+    splitablefiledelegate.h \
+    splittercore.h \
+    partprocessor.h \
+    addsplittedfiledialog.h \
+    joinercore.h \
+    about.h
+
+FORMS += \
+    joinerwidget.ui \
+    splitterwidget.ui \
+    addsplittedfiledialog.ui \
+    about.ui
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/joinercore.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/joinercore.cpp
new file mode 100644
index 0000000..95a3843
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/joinercore.cpp
@@ -0,0 +1,34 @@
+#include "joinercore.h"
+#include <QTreeWidget>
+#include <QModelIndex>
+#include "partprocessor.h"
+
+JoinerCore::JoinerCore(QTreeWidget* widget) {
+    this->widget = widget;
+    core = nullptr;
+}
+
+void JoinerCore::startJoining(void) {
+    QList<QString> parts;
+    QString filename = "";
+    for (int i = 0; i < widget->topLevelItemCount(); i++) {
+        if (core) {
+            delete core;
+            core = nullptr;
+        }
+        QTreeWidgetItem* currentFile = widget->topLevelItem(i);
+        parts.clear();
+        filename = currentFile->text(0);
+        for (int p = 0; p < currentFile->childCount(); p++) {
+            parts.append(currentFile->child(p)->text(0));
+        }
+        core = new PartProcessor(parts, filename, QModelIndex(), PartProcessor::kMerge, this);
+        connect(core, SIGNAL(updated(PartProcessor*)), this, SIGNAL(updated(PartProcessor*)));
+        connect(core, SIGNAL(started(PartProcessor*)), this, SIGNAL(started(PartProcessor*)));
+        connect(core, SIGNAL(finished(PartProcessor*)), this, SIGNAL(finished(PartProcessor*)));
+        core->start();
+        emit started(core);
+        core->wait();
+        emit finished(core);
+    }
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/joinercore.h b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/joinercore.h
new file mode 100644
index 0000000..8dc838d
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/joinercore.h
@@ -0,0 +1,23 @@
+#ifndef JOINERCORE_H
+#define JOINERCORE_H
+
+#include <QObject>
+
+class QTreeWidget;
+class PartProcessor;
+
+class JoinerCore : public QObject {
+    Q_OBJECT
+public:
+    explicit JoinerCore(QTreeWidget* widget);
+    void startJoining(void);
+private:
+    QTreeWidget* widget;
+    PartProcessor* core;
+signals:
+    void updated(PartProcessor*) const;
+    void started(PartProcessor*) const;
+    void finished(PartProcessor*) const;
+};
+
+#endif // JOINERCORE_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/joinerwidget.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/joinerwidget.cpp
new file mode 100644
index 0000000..60b905e
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/joinerwidget.cpp
@@ -0,0 +1,54 @@
+#include "joinerwidget.h"
+#include "ui_joinerwidget.h"
+#include <QTreeWidgetItem>
+#include <QDebug>
+#include "addsplittedfiledialog.h"
+#include "joinercore.h"
+#include "partprocessor.h"
+#include "easylogging++.h"
+
+JoinerWidget::JoinerWidget(QWidget *parent) :
+    QWidget(parent),
+    ui(new Ui::JoinerWidget) {
+    ui->setupUi(this);
+    QStringList headers;
+    headers << "Filename / Parts" << "Size" << "Status";
+    this->ui->treeFiles->setHeaderLabels(headers);
+}
+
+JoinerWidget::~JoinerWidget() {
+    delete ui;
+}
+
+void JoinerWidget::on_buttonAddParts_clicked() {
+    AddSplittedFileDialog addSplittedFileDialog(ui->treeFiles, this);
+    addSplittedFileDialog.exec();
+}
+
+void JoinerWidget::on_buttonUp_clicked() {
+    //TODO: implement this
+    //move up
+}
+
+void JoinerWidget::on_buttonDown_clicked() {
+    //TODO: implement this
+    //move down
+}
+
+void JoinerWidget::on_buttonStart_clicked() {
+    core = new JoinerCore(ui->treeFiles);
+    core->startJoining();
+}
+
+void JoinerWidget::started(PartProcessor* startedFile) {
+    //TODO: Have a pointer for current QTreeWidgetItem under progress
+    //to update UI
+}
+
+void JoinerWidget::finished(PartProcessor* finishedFile) {
+
+}
+
+void JoinerWidget::updated(PartProcessor* updatedFile) {
+
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/joinerwidget.h b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/joinerwidget.h
new file mode 100644
index 0000000..348f305
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/joinerwidget.h
@@ -0,0 +1,34 @@
+#ifndef JOINERWIDGET_H
+#define JOINERWIDGET_H
+
+#include <QWidget>
+namespace Ui {
+class JoinerWidget;
+}
+class PartProcessor;
+class JoinerCore;
+class JoinerWidget : public QWidget {
+    Q_OBJECT
+    
+public:
+    explicit JoinerWidget(QWidget *parent = 0);
+    ~JoinerWidget();
+    
+private slots:
+    void on_buttonAddParts_clicked();
+
+    void on_buttonUp_clicked();
+
+    void on_buttonDown_clicked();
+
+    void on_buttonStart_clicked();
+    void updated(PartProcessor*);
+    void finished(PartProcessor*);
+    void started(PartProcessor*);
+private:
+    Ui::JoinerWidget *ui;
+    JoinerCore* core;
+
+};
+
+#endif // JOINERWIDGET_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/joinerwidget.ui b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/joinerwidget.ui
new file mode 100644
index 0000000..e739e23
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/joinerwidget.ui
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>JoinerWidget</class>
+ <widget class="QWidget" name="JoinerWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>523</width>
+    <height>378</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <widget class="QLabel" name="label">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>10</y>
+     <width>401</width>
+     <height>17</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>You may join parts into a single file. Please add parts here:</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="buttonAddParts">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>50</y>
+     <width>101</width>
+     <height>27</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Add Part(s)</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="buttonStart">
+   <property name="geometry">
+    <rect>
+     <x>380</x>
+     <y>50</y>
+     <width>101</width>
+     <height>27</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Start Join</string>
+   </property>
+  </widget>
+  <widget class="QTreeWidget" name="treeFiles">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>80</y>
+     <width>471</width>
+     <height>271</height>
+    </rect>
+   </property>
+   <column>
+    <property name="text">
+     <string notr="true">1</string>
+    </property>
+   </column>
+  </widget>
+  <widget class="QPushButton" name="buttonUp">
+   <property name="geometry">
+    <rect>
+     <x>488</x>
+     <y>190</y>
+     <width>31</width>
+     <height>27</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>⇧</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="buttonDown">
+   <property name="geometry">
+    <rect>
+     <x>488</x>
+     <y>220</y>
+     <width>31</width>
+     <height>27</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>⇩</string>
+   </property>
+  </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/main.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/main.cpp
new file mode 100644
index 0000000..63058b5
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/main.cpp
@@ -0,0 +1,99 @@
+#include <QApplication>
+#include <QStandardItemModel>
+#include <QFileInfo>
+#include "mainwindow.h"
+#include "easylogging++.h"
+#include "splittercore.h"
+#include "joinercore.h"
+#include "partprocessor.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+void split(int argc, char** argv);
+void merge(int argc, char** argv);
+
+int main(int argc, char** argv) {
+    START_EASYLOGGINGPP(argc, argv);
+
+    // TODO: Use getopt with following params
+    //         -p : process_type
+    //         -s : source_file (for split only)
+    //         -d : destination_dir / destination_file (depending on process_type)
+    //         -t : total_parts (for split only)
+    //       For [parts...] in join we just force user to have last arguments to be all parts
+
+    if (argc > 2) {
+        int status = -1;
+        if (strcmp(argv[1], "split") == 0) {
+            //use splitter core
+            split(argc - 2, argv + 2);
+        } else if ((strcmp(argv[1], "merge") == 0) || (strcmp(argv[1], "join") == 0)) {
+            //use merger core
+            merge(argc - 2, argv + 2);
+        } else {
+            LOG(ERROR) << "Invalid process type!";
+        }
+        return status;
+    } else {
+        QApplication app(argc, argv);
+        MainWindow w;
+        w.show();
+        return app.exec();
+    }
+}
+
+void help(PartProcessor::kProcessType type) {
+    if (type == PartProcessor::kSplit) {
+        LOG(INFO) << "split [source_file] [total_parts] [destination_dir]";
+    } else {
+        LOG(INFO) << "join [destination_file] [parts...]";
+    }
+}
+
+void split(int argc, char** argv) {
+    //Syntax: split [source_file] [total_parts] [destination_dir]
+    if (argc >= 3) {
+        QStandardItemModel* fileModel = new QStandardItemModel(1, 6);
+        fileModel->deleteLater();
+        SplitterCore* core = new SplitterCore(fileModel);
+        core->deleteLater();
+        //TODO: connect signals and implement them to show progress in terminal
+        QString filePath(argv[0]);
+        int parts = QString(argv[1]).toInt();
+        QString destPath(argv[2]);
+        QFileInfo fileinfo(filePath);
+        if (fileinfo.isFile()) {
+            fileModel->setData(fileModel->index(0, 0), filePath);
+            fileModel->setData(fileModel->index(0, 1), destPath);
+            fileModel->setData(fileModel->index(0, 2), 0);
+            fileModel->setData(fileModel->index(0, 3), parts);
+            fileModel->setData(fileModel->index(0, 4), fileinfo.size());
+        }
+        core->start();
+        core->wait();
+    } else {
+        help(PartProcessor::kSplit);
+    }
+}
+
+void merge(int argc, char** argv) {
+    //Syntax: join [destination_file] [parts...]
+    if (argc >= 2) {
+        QString destinationFile(argv[0]);
+        argc--;
+        ++*argv;
+        QList<QString> parts;
+        int index = 0;
+        while (index != argc) {
+            parts << QString(argv[index]);
+            index++;
+        }
+        PartProcessor *core = new PartProcessor(parts, destinationFile, QModelIndex(), PartProcessor::kMerge);
+        core->deleteLater();
+        //TODO: connect signals and implement them to show progress in terminal
+        core->start();
+        core->wait();
+    } else {
+        help(PartProcessor::kMerge);
+    }
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/mainwindow.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/mainwindow.cpp
new file mode 100644
index 0000000..aee5305
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/mainwindow.cpp
@@ -0,0 +1,45 @@
+#include "mainwindow.h"
+#include <QApplication>
+#include <QDesktopWidget>
+#include <QTabWidget>
+#include "easylogging++.h"
+#include "splitterwidget.h"
+#include "joinerwidget.h"
+#include "about.h"
+
+MainWindow::MainWindow(QWidget *parent)
+    : QMainWindow(parent) {
+    this->setupUi();
+}
+
+MainWindow::~MainWindow(void) {
+    delete this->splitterWidget;
+    delete this->joinerWidget;
+    delete this->tabWidget;
+}
+
+void MainWindow::initWidgets(void) {
+    this->tabWidget = new QTabWidget(this);
+    this->splitterWidget = new SplitterWidget(this->tabWidget);
+    this->joinerWidget = new JoinerWidget(this->tabWidget);
+    this->about = new About(this->tabWidget);
+    this->setCentralWidget(this->tabWidget);
+    this->tabWidget->addTab(this->splitterWidget, "File Splitter");
+    this->tabWidget->addTab(this->joinerWidget, "File Joiner");
+    this->tabWidget->addTab(this->about, "About");
+    this->setWindowTitle("File Splitter / Joiner");
+}
+
+void MainWindow::setupUi(void) {
+    //set dimensions
+    this->resize(this->kWidth, this->kHeight);
+    //fix size
+    this->setMinimumSize(this->kWidth, this->kHeight);
+    this->setMaximumSize(this->kWidth, this->kHeight);
+    //move to center of desktop
+    QRect r = this->geometry();
+    r.moveCenter(QApplication::desktop()->availableGeometry().center());
+    this->setGeometry(r);
+    //initialize widgets
+    this->initWidgets();
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/mainwindow.h b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/mainwindow.h
new file mode 100644
index 0000000..68bd058
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/mainwindow.h
@@ -0,0 +1,29 @@
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QMainWindow>
+
+class QTabWidget;
+class SplitterWidget;
+class JoinerWidget;
+class About;
+
+class MainWindow : public QMainWindow {
+    Q_OBJECT
+    
+public:
+    const static int kWidth     =   550;
+    const static int kHeight    =   400;
+    MainWindow(QWidget *parent = 0);
+    QTabWidget* tabWidget;
+    ~MainWindow();
+private:
+    SplitterWidget* splitterWidget;
+    JoinerWidget* joinerWidget;
+    About* about;
+
+    void setupUi(void);
+    void initWidgets(void);
+};
+
+#endif // MAINWINDOW_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/partprocessor.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/partprocessor.cpp
new file mode 100644
index 0000000..89c0123
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/partprocessor.cpp
@@ -0,0 +1,225 @@
+#include "partprocessor.h"
+#include <QFile>
+#include <QDebug>
+#include <QTimer>
+#include <QModelIndex>
+#include "easylogging++.h"
+
+const char* PartProcessor::kPartSuffix = "_split-part_";
+
+PartProcessor::PartProcessor(const QString& source, const QString& destination, qint32 startOffset, qint32 maxPerPart, qint32 originalFileSize_, int part, const QModelIndex& index, kProcessType processType, QObject *parent) :
+    QThread(parent),
+    processType(processType),
+    sourceFilename_(source),
+    destinationFilename_(destination),
+    seekLocation_(startOffset),
+    maxSizePerPart_(maxPerPart),
+    originalFileSize_(originalFileSize_),
+    partIndex_(part),
+    sourceFile_(new QFile(source)),
+    modelIndex_(const_cast<QModelIndex&>(index)) {
+
+    this->openFiles();
+    this->cancelled_ = false;
+    this->resume();
+}
+
+PartProcessor::PartProcessor(const QList<QString>& parts, const QString& destination, const QModelIndex& index, kProcessType processType, QObject *parent) :
+    parts_(parts),
+    processType(processType),
+    destinationFilename_(destination),
+    modelIndex_(const_cast<QModelIndex&>(index)),
+    QThread(parent) {
+    sourceFile_ = NULL;
+    this->cancelled_ = false;
+    this->resume();
+    this->openFiles();
+}
+
+PartProcessor::~PartProcessor(void) {
+    closeFiles();
+    qDeleteAll(errors_);
+}
+
+void PartProcessor::closeFiles(void) {
+    if (sourceFile_ && sourceFile_->isOpen()) {
+        sourceFile_->close();
+    }
+    if (destinationFile_.isOpen()) {
+        destinationFile_.close();
+    }
+    if (sourceFile_ != NULL) {
+        delete sourceFile_;
+        sourceFile_ = NULL;
+    }
+}
+
+void PartProcessor::openFiles(void) {
+    filesOpened = false;
+    if(processType == kSplit && !sourceFile_->open(QIODevice::ReadOnly)) {
+        errors_.push_back(new Error("Error opening source file", kOpenFileError));
+        LOG(ERROR) << "Error opening source file";
+        return;
+    }
+    destinationFile_.setFileName(this->destinationFilename_ + (processType == kSplit ?
+                                                                   (QString(PartProcessor::kPartSuffix) + QString::number(partIndex())) : ""));
+    if(!destinationFile_.open(QIODevice::WriteOnly)) {
+        errors_.push_back(new Error("Error opening source file", kOpenFileError));
+        LOG(ERROR) << "Error opening destination file";
+        return;
+    }
+    filesOpened = true;
+}
+
+int PartProcessor::split(void) {
+    mutex_.lock();
+    LOG(DEBUG) << "Splitting " << this->sourceFilename_.toStdString() << " to " << this->destinationFilename_.toStdString();
+    int nextBuffLength = PartProcessor::kBufferSize;
+    char *data = new char[nextBuffLength];
+    qint32 dataBytes;
+    progress_ = 0;
+    this->sourceFile_->seek(this->seekLocation_);
+    while (!this->sourceFile_->atEnd()) {
+        if (cancelled_) {
+            break;
+        }
+        while (paused()) {
+            msleep(500);
+        }
+        if (data == NULL) {
+            break;
+        }
+
+        nextBuffLength = (progress() + PartProcessor::kBufferSize > this->maxSizePerPart_) ?
+                             this->maxSizePerPart_ - progress() :
+                             PartProcessor::kBufferSize;
+
+        dataBytes = this->sourceFile_->read(data, nextBuffLength);
+        this->destinationFile_.write(data, dataBytes);
+        this->destinationFile_.flush();
+        progress_ += nextBuffLength;
+        VLOG(2) << "Progress (split) = " << progress_ << " bytes";
+        if (progress() % (PartProcessor::kBufferSize * PartProcessor::kUpdateFrequencyBytes) == 0) {
+            emit updated(this);
+        }
+
+        if (progress() == this->maxSizePerPart_) {
+            emit updated(this);
+            emit finished(this);
+            break;
+        }
+    }
+    delete[] data;
+    data = NULL;
+    closeFiles();
+    int status = (progress() != this->maxSizePerPart_);
+    mutex_.unlock();
+    return status;
+}
+
+int PartProcessor::merge(void) {
+    int status = -1;
+    this->progress_ = 0;
+    this->partIndex_ = 0;
+    int progBytes = 0;
+    mutex_.lock();
+    for (int i = 0; i < this->parts_.size(); i++) {
+        this->partIndex_ = i;
+        this->progress_ = i;
+        LOG(INFO) << "Merging data from: " << this->parts_.at(i).toStdString();
+        //TODO: check for source file availability
+        this->sourceFile_ = new QFile(this->parts_.at(i));
+        if (!this->sourceFile_->open(QFile::ReadOnly)) {
+            LOG(ERROR) << "Error opening files!";
+            return status;
+        }
+        char* data = new char[PartProcessor::kBufferSize];
+        qint32 dataBytes;
+        while (!this->sourceFile_->atEnd()) {
+            if (cancelled_) {
+                break;
+            }
+            while (paused()) {
+                msleep(500);
+            }
+            //TODO: check for destination file writable permissions beforehand
+            dataBytes = this->sourceFile_->read(data, PartProcessor::kBufferSize);
+            progBytes += static_cast<int>(dataBytes);
+            VLOG(2) << "Progress (merge) = " << progBytes << " bytes";
+            this->destinationFile_.write(data, dataBytes);
+            this->destinationFile_.flush();
+        }
+        delete[] data;
+        data = NULL;
+        this->sourceFile_->close();
+        delete this->sourceFile_;
+        this->sourceFile_ = NULL;
+        emit updated(this);
+    }
+    mutex_.unlock();
+    status = this->progress_ == this->parts_.size();
+    closeFiles();
+    return status;
+}
+
+bool PartProcessor::paused(void) const {
+    return paused_;
+}
+
+QModelIndex& PartProcessor::modelIndex(void) const {
+    return modelIndex_;
+}
+
+qint32 PartProcessor::progress(void) const {
+    return progress_;
+}
+
+qint32 PartProcessor::originalFileSize(void) const {
+    return originalFileSize_;
+}
+
+int PartProcessor::partIndex(void) const {
+    return partIndex_;
+}
+
+QList<Error*> PartProcessor::errors(void) const {
+    return errors_;
+}
+
+void PartProcessor::pause(void) {
+    paused_ = true;
+}
+
+void PartProcessor::cancel(void) {
+    cancelled_ = true;
+}
+
+void PartProcessor::resume() {
+    paused_ = false;
+}
+
+void PartProcessor::run(void) {
+    if (!filesOpened) {
+        LOG(ERROR) << "Files were not successfully opened. Cannot start " << (processType == kSplit ? "splitting" : "merging");
+                return;
+    }
+    emit started(this);
+    this->resume();
+    int status = -1;
+    if (processType == kSplit) {
+        if (this->sourceFilename_ == "") {
+            LOG(ERROR) << "Source file not specified";
+            return;
+        }
+        status = split();
+    } else if (processType == kMerge) {
+        if (this->parts_.size() == 0) {
+            LOG(ERROR) << "Parts not specified";
+            return;
+        }
+        status = merge();
+    }
+    if (status == -1) {
+        LOG(ERROR) << "Error occured while " << (processType == kSplit ? "splitting" : "merging");
+    }
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/partprocessor.h b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/partprocessor.h
new file mode 100644
index 0000000..9ab3e69
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/partprocessor.h
@@ -0,0 +1,76 @@
+#ifndef SPLITJOINCORE_H
+#define SPLITJOINCORE_H
+
+#include <QThread>
+#include <QFile>
+#include <QList>
+#include <QMutex>
+#include <QModelIndex>
+
+class Error {
+public:
+    explicit Error(const QString& message, int number) : message(message), number(number) {}
+    QString message;
+    int number;
+};
+
+class PartProcessor : public QThread
+{
+    Q_OBJECT
+public:
+    static const char* kPartSuffix;
+    enum kErrorTypes {
+        kOpenFileError = 13
+    };
+    enum kProcessType {
+        kSplit = 0,
+        kMerge = 1
+    };
+
+    explicit PartProcessor(const QString& sourceFilename_, const QString& destination, qint32 startOffset, qint32 maxSizePerPart_, qint32 originalFileSize_, int partIndex, const QModelIndex& index, kProcessType processType, QObject *parent = 0);
+    explicit PartProcessor(const QList<QString>& parts, const QString& destination, const QModelIndex& index, kProcessType processType, QObject *parent = 0);
+    ~PartProcessor(void);
+    virtual void run(void);
+    bool paused(void) const;
+    void pause(void);
+    void resume(void);
+    void cancel(void);
+    QModelIndex& modelIndex(void) const;
+    int partIndex(void) const;
+    qint32 progress(void) const;
+    qint32 originalFileSize(void) const;
+    QList<Error*> errors(void) const;
+private:
+    static const int kBufferSize           = 4096;
+    static const int kUpdateFrequencyBytes = 2000;
+    bool cancelled_;
+    bool paused_;
+    kProcessType processType;
+    QMutex mutex_;
+    QString sourceFilename_;
+    QString destinationFilename_;
+    qint32 seekLocation_;
+    qint32 maxSizePerPart_;
+    qint32 originalFileSize_;
+    QFile *sourceFile_;
+    QFile destinationFile_;
+    QList<Error*> errors_;
+    QList<QString> parts_;
+    QModelIndex& modelIndex_;
+    int partIndex_;
+    qint32 progress_;
+    bool filesOpened;
+
+    void closeFiles(void);
+    void openFiles(void);
+    int split(void);
+    int merge(void);
+signals:
+    void started(PartProcessor* core);
+    void updated(PartProcessor* core);
+    void finished(PartProcessor* core);
+public slots:
+
+};
+
+#endif // SPLITJOINCORE_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/splitablefiledelegate.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/splitablefiledelegate.cpp
new file mode 100644
index 0000000..7907355
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/splitablefiledelegate.cpp
@@ -0,0 +1,72 @@
+#include "splitablefiledelegate.h"
+#include <QSpinBox>
+#include <QStyleOptionProgressBarV2>
+#include <QApplication>
+#include <QDebug>
+#include "splitterwidget.h"
+
+SplitableFileDelegate::SplitableFileDelegate(SplitterWidget *parent)
+    : QItemDelegate(parent),
+      parent(parent) {
+}
+
+void SplitableFileDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const {
+    if (index.column() == 2) {
+        float currProgress = (index.model()->data(index.model()->index(index.row(), 2))).toFloat();
+        QStyleOptionProgressBarV2 progressBar;
+        progressBar.rect = option.rect;
+        progressBar.minimum = 0;
+        progressBar.maximum = 100;
+        progressBar.progress = currProgress;
+        progressBar.text = QString::number(currProgress) + "%";
+        progressBar.textVisible = true;
+
+        QApplication::style()->drawControl(QStyle::CE_ProgressBar,
+                                           &progressBar, painter);
+    } else {
+        QItemDelegate::paint(painter, option, index);
+    }
+}
+
+QWidget* SplitableFileDelegate::createEditor(QWidget *parent,
+                                             const QStyleOptionViewItem&,
+                                             const QModelIndex& index ) const {
+    if (index.column() == 3) {
+        QSpinBox *editor = new QSpinBox(parent);
+        editor->setMinimum(0);
+        editor->setMaximum(SplitterWidget::kMaxSplitPossible);
+        return editor;
+    }
+    return nullptr;
+}
+
+void SplitableFileDelegate::setEditorData(QWidget *editor,
+                                          const QModelIndex &index) const {
+    if (index.column() == 3) {
+        int value = index.model()->data(index, Qt::EditRole).toInt();
+        QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
+        spinBox->setMaximum(SplitterWidget::kMaxSplitPossible);
+        spinBox->setMinimum(1);
+        spinBox->setValue(value);
+    }
+}
+
+void SplitableFileDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
+                                         const QModelIndex &index) const {
+    if (index.column() == 3) {
+        QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
+        spinBox->interpretText();
+        int value = spinBox->value();
+        if (value != 0) {
+            model->setData(index, value, Qt::EditRole);
+            parent->updateSplitInfo(index);
+        }
+    }
+}
+
+void SplitableFileDelegate::updateEditorGeometry(QWidget *editor,
+                                                 const QStyleOptionViewItem &option, const QModelIndex &/* index */) const {
+    QRect rect = option.rect;
+    rect.setHeight(rect.height() + 5);
+    editor->setGeometry(rect);
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/splitablefiledelegate.h b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/splitablefiledelegate.h
new file mode 100644
index 0000000..8ea2e81
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/splitablefiledelegate.h
@@ -0,0 +1,25 @@
+#ifndef SPLITABLEFILEDELEGATE_H
+#define SPLITABLEFILEDELEGATE_H
+
+#include <QItemDelegate>
+class SplitterWidget;
+
+class SplitableFileDelegate : public QItemDelegate {
+    Q_OBJECT
+public:
+    SplitableFileDelegate(SplitterWidget *parent = 0);
+
+    virtual QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &,
+                                  const QModelIndex &index) const;
+
+    virtual void setEditorData(QWidget *editor, const QModelIndex &index) const;
+    virtual void setModelData(QWidget *editor, QAbstractItemModel *model,
+                              const QModelIndex &index) const;
+
+    virtual void updateEditorGeometry(QWidget *editor,
+                                      const QStyleOptionViewItem &option, const QModelIndex &index) const;
+    virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
+private:
+    SplitterWidget* parent;
+};
+#endif // SPLITABLEFILEDELEGATE_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/splittercore.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/splittercore.cpp
new file mode 100644
index 0000000..29d96fe
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/splittercore.cpp
@@ -0,0 +1,95 @@
+#include "splittercore.h"
+#include <QStandardItemModel>
+#include <QDebug>
+#include <QFileInfo>
+#include "splitterwidget.h"
+#include "partprocessor.h"
+#include "easylogging++.h"
+
+SplitterCore::SplitterCore(QStandardItemModel* fileModel, QObject* parent, SplitterWidget* parentWidget)
+    :QThread(parent),
+      fileModel (fileModel),
+      parent(parentWidget){
+}
+
+void SplitterCore::run(void) {
+    QString sourceFilename;
+    QString destinationDir;
+    int parts;
+    qint32 sizeOfFilePart;
+    qint32 sizeOfLastPart;
+    qint32 fileSize = 0;
+    qint32 size = 0;
+    qint32 offset = 0;
+    PartProcessor* core;
+    QFileInfo fileInfo;
+    cancelled = false;
+    for (int i = 0; i < fileModel->rowCount(); i++) {
+        qDeleteAll(this->splitJoinCores.begin(), this->splitJoinCores.end());
+        this->splitJoinCores.clear();
+        if (!cancelled) {
+            sourceFilename =  fileModel->data(fileModel->index(i,0)).toString();
+            fileInfo.setFile(sourceFilename);
+            destinationDir =  fileModel->data(fileModel->index(i,1)).toString() + "/" + fileInfo.fileName();
+            parts = fileModel->data(fileModel->index(i, 3)).toInt();
+            offset = 0;
+            LOG(INFO) << "Splitting " << sourceFilename.toStdString() << " into " << parts << " parts to " << destinationDir.toStdString();
+
+            fileSize = fileModel->index(i, 4).data().toDouble();
+            sizeOfFilePart = fileSize / parts;
+            sizeOfLastPart = sizeOfFilePart * parts == fileSize ? sizeOfFilePart : sizeOfFilePart + 1;
+
+            emit fileStarted(i, sourceFilename, destinationDir, parts);
+
+            for (int p = 1; p <= parts; p++) {
+                offset += p == 1 ? 0 : sizeOfFilePart;
+                size = p < parts ? sizeOfFilePart : sizeOfLastPart;
+
+                QModelIndex index = fileModel->index(i, 2);
+                core = new PartProcessor(sourceFilename, destinationDir, offset, size, fileSize, p, index, PartProcessor::kSplit, this);
+                connect(core, SIGNAL(updated(PartProcessor*)), this, SIGNAL(updated(PartProcessor*)));
+                connect(core, SIGNAL(started(PartProcessor*)), this, SIGNAL(started(PartProcessor*)));
+                connect(core, SIGNAL(finished(PartProcessor*)), this, SIGNAL(finished(PartProcessor*)));
+
+                this->splitJoinCores.push_back(core);
+            }
+            for (int pid = 0; pid < splitJoinCores.size(); pid++) {
+                splitJoinCores.at(pid)->start();
+            }
+            for (int pid = 0; pid < splitJoinCores.size(); pid++) {
+                splitJoinCores.at(pid)->wait();
+            }
+            emit fileCompleted(i);
+        } else {
+            qDeleteAll(this->splitJoinCores.begin(), this->splitJoinCores.end());
+            this->splitJoinCores.clear();
+        }
+    }
+    LOG(INFO) << "Finished splitting all files!";
+}
+
+void SplitterCore::pause(void) {
+    for (int i = 0; i < splitJoinCores.size(); i++) {
+        splitJoinCores.at(i)->pause();
+    }
+}
+
+void SplitterCore::resume(void) {
+    for (int i = 0; i < splitJoinCores.size(); i++) {
+        splitJoinCores.at(i)->resume();
+    }
+}
+
+void SplitterCore::cancel(void) {
+    this->cancelled = true;
+    for (int i = 0; i < splitJoinCores.size(); i++) {
+        splitJoinCores.at(i)->cancel();
+    }
+}
+
+bool SplitterCore::paused(void) const {
+    for (int i = 0; i < splitJoinCores.size(); i++) {
+        if (splitJoinCores.at(i)->paused()) return true;
+    }
+    return false;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/splittercore.h b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/splittercore.h
new file mode 100644
index 0000000..c36fc10
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/splittercore.h
@@ -0,0 +1,35 @@
+#ifndef SPLITTER_H
+#define SPLITTER_H
+
+#include <QThread>
+#include <QList>
+
+class QModelIndex;
+class QStandardItemModel;
+class PartProcessor;
+class SplitterWidget;
+
+class SplitterCore : public QThread {
+    Q_OBJECT
+public:
+    SplitterCore(QStandardItemModel* fileModel, QObject* parent = 0, SplitterWidget* parentWidget = 0);
+    void run(void);
+
+    bool paused(void) const;
+    void cancel(void);
+    void pause(void);
+    void resume(void);
+private:
+    QStandardItemModel* fileModel;
+    QList<PartProcessor*> splitJoinCores;
+    bool cancelled;
+    SplitterWidget* parent;
+signals:
+    void updated(PartProcessor*) const;
+    void started(PartProcessor*) const;
+    void finished(PartProcessor*) const;
+    void fileStarted(int index, const QString& filename, const QString& destinationDir, int totalParts) const;
+    void fileCompleted(int index) const;
+};
+
+#endif // SPLITTER_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/splitterwidget.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/splitterwidget.cpp
new file mode 100644
index 0000000..e057333
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/splitterwidget.cpp
@@ -0,0 +1,243 @@
+#include "splitterwidget.h"
+#include "ui_splitterwidget.h"
+#include <QFileDialog>
+#include <QStandardItemModel>
+#include <QHeaderView>
+#include <QDebug>
+#include <QFont>
+#include <QTabWidget>
+#include <QProgressBar>
+#include "easylogging++.h"
+#include "splittercore.h"
+#include "splitablefiledelegate.h"
+#include "partprocessor.h"
+
+SplitterWidget::SplitterWidget(QWidget *parent) :
+    QWidget(parent),
+    parent(static_cast<QTabWidget*>(parent)),
+    ui(new Ui::SplitterWidget) {
+    ui->setupUi(this);
+    ui->listFiles->setGeometry(10, (ui->buttonChooseFiles->y() + ui->buttonChooseFiles->height()) + 10, this->parent->parentWidget()->width() - 20, this->parent->parentWidget()->height() - (ui->buttonChooseFiles->y() + 150));
+    ui->buttonStartSplit->setGeometry(ui->listFiles->width() - ui->listFiles->x() - 10 - ui->buttonStartSplit->width(), ui->buttonChooseFiles->y(), ui->buttonChooseFiles->width(), ui->buttonChooseFiles->height());
+    buttonRemove = new QPushButton(this);
+    buttonRemove->setGeometry(ui->buttonChooseFiles->x() + ui->buttonChooseFiles->width() + 10, ui->buttonChooseFiles->y(), 30, ui->buttonChooseFiles->height());
+    buttonRemove->setText("-");
+    buttonRemove->setToolTip("Remove Selected Item");
+    connect(buttonRemove, SIGNAL(clicked()), this, SLOT(on_buttonRemove_clicked()));
+    buttonRemove->show();
+    updateRemoveButtonUI();
+    ui->labelFile->setGeometry(0,  this->parent->parentWidget()->height() - 150, this->parent->parentWidget()->width(), 150);
+    fileModel = new QStandardItemModel(0, 6, this);
+    fileModel->setHeaderData(0, Qt::Horizontal, "Filename");
+    fileModel->setHeaderData(1, Qt::Horizontal, "Destination");
+    fileModel->setHeaderData(2, Qt::Horizontal, "Progress");
+    fileModel->setHeaderData(3, Qt::Horizontal, "Parts");
+    fileModel->setHeaderData(4, Qt::Horizontal, "File Size (bytes)");
+    fileModel->setHeaderData(5, Qt::Horizontal, "Size per part (bytes)");
+    splitDelegate = new SplitableFileDelegate(this);
+    ui->listFiles->setItemDelegate(splitDelegate);
+    ui->listFiles->setModel(fileModel);
+    ui->listFiles->setEditTriggers(QTreeView::AllEditTriggers);
+    //TODO: make this QAbstractItemView::MultiSelection and fix on_buttonRemove_clicked()
+    ui->listFiles->setSelectionMode(QAbstractItemView::SingleSelection);
+
+    ui->labelFile->setFont(QFont("Arial",10));
+    splitter = NULL;
+    cancelButton = NULL;
+    pauseResumeButton = NULL;
+}
+
+SplitterWidget::~SplitterWidget() {
+    delete fileModel;
+    fileModel = NULL;
+    delete buttonRemove;
+    buttonRemove = NULL;
+    delete splitDelegate;
+    splitDelegate = NULL;
+    delete ui;
+}
+
+void SplitterWidget::updateSplitInfo(const QModelIndex &index) {
+    int parts = fileModel->index(index.row(), 3).data().toInt();
+    qint32 fileSize = fileModel->index(index.row(), 4).data().toDouble();
+    qint32 sizeOfFilePart = fileSize / parts;
+    qint32 sizeOfLastPart = sizeOfFilePart * parts == fileSize ? sizeOfFilePart : sizeOfFilePart + 1;
+    fileModel->setData(fileModel->index(index.row(), 5), QString::number(sizeOfFilePart) + (sizeOfFilePart != sizeOfLastPart ? " + 1" : ""));
+}
+
+void SplitterWidget::on_buttonChooseFiles_clicked() {
+    QFileDialog fileDialog(this, "Choose File(s) to Split", "", "*");
+    fileDialog.setFileMode(QFileDialog::ExistingFiles);
+    fileDialog.exec();
+    QStringList filenames = fileDialog.selectedFiles();
+    int r = fileModel->rowCount();
+    Q_FOREACH (QString filePath, filenames) {
+        if (filePath.trimmed() != "") {
+            fileModel->insertRows(r, 1);
+            QFileInfo fileinfo(filePath);
+            if (fileinfo.isFile()) {
+                qint32 fileSize = fileinfo.size();
+                fileModel->setData(fileModel->index(r, 0), filePath);
+                fileModel->setData(fileModel->index(r, 1), fileDialog.directory().absolutePath());
+                fileModel->setData(fileModel->index(r, 2), 0);
+                fileModel->setData(fileModel->index(r, 3), SplitterWidget::kDefaultMaxParts);
+                fileModel->setData(fileModel->index(r, 4), fileSize);
+                this->updateSplitInfo(fileModel->index(r, 0));
+                ++r;
+                VLOG(1) << "Added file to split [" << filePath << "]";
+            }
+        }
+    }
+}
+
+void SplitterWidget::on_listFiles_doubleClicked(const QModelIndex &index) {
+    if (index.column() != 3) {
+        QFileDialog fileDialog(this, "Choose Split Destination","","All Files (*.*)");
+        fileDialog.setFileMode(QFileDialog::DirectoryOnly);
+        QString currDest = fileModel->data(index).toString();
+        fileDialog.setDirectory(currDest);
+        fileDialog.exec();
+        //FIXME: Make sure destination changes only if dialog is accepted
+        //see accepted() signal documentation for details
+        if (fileDialog.selectedFiles().size() > 0) {
+            fileModel->setData(fileModel->index(index.row(), 1),fileDialog.selectedFiles()[0]);
+            on_listFiles_clicked(index);
+        }
+    }
+}
+
+void SplitterWidget::updateRemoveButtonUI(void) const {
+    if (ui->listFiles->selectionModel() == NULL) {
+        buttonRemove->setEnabled(false);
+    } else {
+        if (ui->listFiles->selectionModel()->selectedIndexes().size() > 0) {
+            buttonRemove->setEnabled(true);
+        } else {
+            buttonRemove->setEnabled(false);
+        }
+    }
+}
+
+void SplitterWidget::on_listFiles_clicked(const QModelIndex &index) {
+    ui->labelFile->setText(fileModel->data(fileModel->index(index.row(), 0)).toString());
+    ui->labelFile->setText("Split <b>" + ui->labelFile->text() + "</b> to <b>" + fileModel->data(fileModel->index(index.row(), 1)).toString() +
+                           "</b>");
+    updateRemoveButtonUI();
+}
+
+void SplitterWidget::cancelSplit(void) const {
+    ui->listFiles->setEnabled(true);
+    ui->buttonChooseFiles->setEnabled(true);
+    parent->setTabEnabled(1, true);
+    ui->buttonStartSplit->show();
+    splitter->cancel();
+    delete cancelButton;
+    delete pauseResumeButton;
+}
+
+void SplitterWidget::pauseResume(void) const {
+    if (splitter->paused()) {
+        pauseResumeButton->setText("Pause");
+        splitter->resume();
+    } else {
+        pauseResumeButton->setText("Resume");
+        splitter->pause();
+    }
+}
+
+void SplitterWidget::on_buttonStartSplit_clicked() {
+    ui->listFiles->setEnabled(false);
+    ui->buttonChooseFiles->setEnabled(false);
+    parent->setTabEnabled(1, false);
+    ui->buttonStartSplit->hide();
+    cancelButton = new QPushButton(this);
+    cancelButton->setGeometry(ui->buttonStartSplit->geometry());
+    cancelButton->setText("Cancel");
+    cancelButton->show();
+    pauseResumeButton = new QPushButton(this);
+    pauseResumeButton->setGeometry(ui->buttonStartSplit->geometry());
+    pauseResumeButton->move(pauseResumeButton->x() - pauseResumeButton->width() - 10, pauseResumeButton->y());
+    pauseResumeButton->setText("Pause");
+    pauseResumeButton->show();
+
+    connect(cancelButton,SIGNAL(clicked()),this,SLOT(cancelSplit()));
+    connect(pauseResumeButton,SIGNAL(clicked()),this,SLOT(pauseResume()));
+    if (splitter) {
+        delete splitter;
+        splitter = 0;
+    }
+    startSplitting();
+}
+
+void SplitterWidget::startSplitting(void) {
+    splitter = new SplitterCore(fileModel, this, this);
+    connect(splitter, SIGNAL(updated(PartProcessor*)), this, SLOT(updated(PartProcessor*)));
+    connect(splitter, SIGNAL(fileStarted(int, const QString&, const QString&, int)), this, SLOT(fileStarted(int, const QString&, const QString&, int)));
+    connect(splitter, SIGNAL(fileCompleted(int)), this, SLOT(fileCompleted(int)));
+    connect(splitter, SIGNAL(finished(PartProcessor*)), this, SLOT(finished(PartProcessor*)));
+    connect(splitter, SIGNAL(started(PartProcessor*)), this, SLOT(started(PartProcessor*)));
+    splitter->start();
+}
+
+void SplitterWidget::started(PartProcessor* startedPart) {
+    //TODO: need this?
+}
+
+void SplitterWidget::finished(PartProcessor* finishedPart) {
+    //TODO: need this?
+}
+
+void SplitterWidget::updated(PartProcessor* updatedPart) {
+    progressBars.at(updatedPart->partIndex() - 1)->setValue(updatedPart->progress());
+    qint32 totalProgress = 0;
+    //TODO: optimize following
+    for (int i = 0; i < progressBars.size(); i++) {
+        totalProgress += progressBars.at(i)->value();
+    }
+    float progressPerc = (static_cast<float>(totalProgress) / static_cast<float>(updatedPart->originalFileSize())) * 100;
+    fileModel->setData(fileModel->index(updatedPart->modelIndex().row(), 2), progressPerc);
+    if (progressBars.at(updatedPart->partIndex() - 1)->isHidden())
+        progressBars.at(updatedPart->partIndex() - 1)->show();
+}
+
+void SplitterWidget::fileStarted(int index, const QString& filename, const QString& destinationDir, int totalParts) {
+    for (int p = 0; p < totalParts; p++) {
+        int  fileSize = fileModel->index(index, 4).data().toInt();
+        int sizeOfFilePart = fileSize / totalParts;
+        int sizeOfLastPart = sizeOfFilePart * totalParts == fileSize ? sizeOfFilePart : sizeOfFilePart + 1;
+        int size = p < totalParts ? sizeOfFilePart : sizeOfLastPart;
+
+        QProgressBar* progressBarForPart = new QProgressBar(this);
+        progressBarForPart->setMinimum(0);
+        progressBarForPart->setMaximum(size);
+        qDebug() << size;
+        progressBarForPart->move(0, p * 20);
+        progressBarForPart->setWindowTitle("Part " + QString::number(p));
+        progressBars.push_back(progressBarForPart);
+    }
+}
+
+void SplitterWidget::fileCompleted(int index) {
+    for (int prog = 0; prog < progressBars.size(); prog++) {
+        delete progressBars.at(prog);
+    }
+    progressBars.clear();
+    fileModel->setData(fileModel->index(index, 2), 100);
+}
+
+void SplitterWidget::on_buttonRemove_clicked() {
+    if (ui->listFiles->selectionModel() != NULL) {
+        QModelIndexList selectedList = ui->listFiles->selectionModel()->selectedIndexes();
+        QModelIndex index;
+        for (int i = selectedList.size() - 1; i >= 0 ; i--) {
+            index = selectedList.at(i);
+            fileModel->removeRow(index.row());
+            //FIXME: this is ridiculous! selectedList does not have correct number
+            //of items. So it removes multiple items (till end of list) if
+            //we don't break loop here.
+            break;
+        }
+    }
+    updateRemoveButtonUI();
+
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/splitterwidget.h b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/splitterwidget.h
new file mode 100644
index 0000000..3d8e598
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/splitterwidget.h
@@ -0,0 +1,59 @@
+#ifndef SPLITTERWIDGET_H
+#define SPLITTERWIDGET_H
+
+#include <QWidget>
+#include <QModelIndex>
+#include <QList>
+
+namespace Ui {
+class SplitterWidget;
+}
+
+class QStandardItemModel;
+class QTabWidget;
+class QPushButton;
+class SplitterCore;
+class SplitableFileDelegate;
+class PartProcessor;
+class QProgressBar;
+
+class SplitterWidget : public QWidget {
+    Q_OBJECT
+    
+public:
+    static const int kDefaultMaxParts = 5;
+    static const int kMaxSplitPossible = 100;
+    explicit SplitterWidget(QWidget *parent);
+    ~SplitterWidget();
+
+    void updateSplitInfo(const QModelIndex& index);
+
+    QList<QProgressBar*> progressBars;
+private slots:
+    void on_buttonChooseFiles_clicked();
+    void on_listFiles_doubleClicked(const QModelIndex &index);
+    void on_listFiles_clicked(const QModelIndex &index);
+    void on_buttonStartSplit_clicked();
+    void cancelSplit(void) const;
+    void pauseResume(void) const;
+    void updated(PartProcessor*);
+    void finished(PartProcessor*);
+    void started(PartProcessor*);
+    void fileStarted(int index, const QString& filename, const QString& destinationDir, int totalParts);
+    void fileCompleted(int index);
+    void on_buttonRemove_clicked();
+
+private:
+    Ui::SplitterWidget *ui;
+    QPushButton* buttonRemove;
+    QStandardItemModel* fileModel;
+    QTabWidget* parent;
+    QPushButton* cancelButton;
+    QPushButton* pauseResumeButton;
+    SplitterCore* splitter;
+    SplitableFileDelegate* splitDelegate;
+    void startSplitting(void);
+    void updateRemoveButtonUI(void) const;
+};
+
+#endif // SPLITTERWIDGET_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/splitterwidget.ui b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/splitterwidget.ui
new file mode 100644
index 0000000..8d2bc65
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/file-splitter-joiner/splitterwidget.ui
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>SplitterWidget</class>
+ <widget class="QWidget" name="SplitterWidget">
+  <property name="windowModality">
+   <enum>Qt::NonModal</enum>
+  </property>
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>523</width>
+    <height>378</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <widget class="QPushButton" name="buttonChooseFiles">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>20</y>
+     <width>115</width>
+     <height>27</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Choose File(s)</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="labelFile">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+     <y>220</y>
+     <width>441</width>
+     <height>41</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string/>
+   </property>
+   <property name="wordWrap">
+    <bool>true</bool>
+   </property>
+  </widget>
+  <widget class="QTreeView" name="listFiles">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>50</y>
+     <width>431</width>
+     <height>171</height>
+    </rect>
+   </property>
+   <property name="styleSheet">
+    <string notr="true"/>
+   </property>
+   <property name="editTriggers">
+    <set>QAbstractItemView::AllEditTriggers</set>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="buttonStartSplit">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>85</width>
+     <height>27</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Start Split</string>
+   </property>
+  </widget>
+  <zorder>listFiles</zorder>
+  <zorder>buttonChooseFiles</zorder>
+  <zorder>labelFile</zorder>
+  <zorder>buttonStartSplit</zorder>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/README.md b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/README.md
new file mode 100644
index 0000000..1a16d74
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/README.md
@@ -0,0 +1,8 @@
+```
+ A very simple sample demonstrating an app and shared-lib usage that both uses
+ easylogging++ as their logging library.
+
+ @rev    1.0
+ @since  v9.01
+ @author mkhan3189
+```
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/myapp/easylogging++.h b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/myapp/easylogging++.h
new file mode 100644
index 0000000..e7bc5bc
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/myapp/easylogging++.h
@@ -0,0 +1,4 @@
+#ifndef EASYLOGGING_H
+#define EASYLOGGING_H
+#include "../../../../src/easylogging++.h"
+#endif // EASYLOGGING_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/myapp/main.cc b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/myapp/main.cc
new file mode 100644
index 0000000..ed11b69
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/myapp/main.cc
@@ -0,0 +1,21 @@
+#include <QApplication>
+#include "mylib.hh"
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+
+    Mylib l;
+
+    LOG(INFO) << "1 + 2 = " << l.add(1, 2);
+    LOG(INFO) << "1 / 2 = " << l.div(1, 2);
+    LOG(DEBUG) << "1 * 2 = " << l.mul(1, 2);
+
+    // This will cause FATAL error because of division by zero
+    // LOG(INFO) << l.div(1, 0);
+    
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/myapp/myapp.pro b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/myapp/myapp.pro
new file mode 100644
index 0000000..9572932
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/myapp/myapp.pro
@@ -0,0 +1,26 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2013-08-17T01:02:59
+#
+#-------------------------------------------------
+
+QT       += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+TARGET = myapp
+TEMPLATE = app
+
+QMAKE_CXXFLAGS += -std=c++11
+
+DEPENDPATH += . ../mylib
+INCLUDEPATH +=  ../mylib
+LIBS+=  -L../build-mylib -lmylib # try in lib build dir "sudo cp %{buildDir}/libmylib.so* /usr/lib/" to make this work
+
+
+SOURCES += main.cc
+
+HEADERS  += \
+    easylogging++.h
+
+FORMS    +=
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/mylib/easylogging++.h b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/mylib/easylogging++.h
new file mode 100644
index 0000000..e7bc5bc
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/mylib/easylogging++.h
@@ -0,0 +1,4 @@
+#ifndef EASYLOGGING_H
+#define EASYLOGGING_H
+#include "../../../../src/easylogging++.h"
+#endif // EASYLOGGING_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/mylib/mylib.cc b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/mylib/mylib.cc
new file mode 100644
index 0000000..bcf688c
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/mylib/mylib.cc
@@ -0,0 +1,40 @@
+#include "mylib.hh"
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+Mylib::Mylib(void)
+{
+    LOG(INFO) << "Mylib has been constructed";
+}
+
+Mylib::~Mylib()
+{
+    LOG(INFO) << "Destroying Mylib";
+}
+
+float Mylib::add(float x, float y) const
+{
+    LOG(INFO) << "Adding " << x << " and " << y;
+    return x + y;
+}
+
+float Mylib::sub(float x, float y) const
+{
+    LOG(INFO) << "Subtracting " << y << " from " << x;
+    return y - x;
+}
+
+float Mylib::mul(float x, float y) const
+{
+    LOG(INFO) << "Multiplying " << x << " and " << y;
+    return x * y;
+}
+
+float Mylib::div(float x, float y) const
+{
+    CHECK_NE(y, 0) << "Division by zero!";
+    LOG(INFO) << "Dividing " << x << " by " << y;
+    return x / y;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/mylib/mylib.hh b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/mylib/mylib.hh
new file mode 100644
index 0000000..c8457da
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/mylib/mylib.hh
@@ -0,0 +1,18 @@
+#ifndef MYLIB_HH
+#define MYLIB_HH
+
+#include "mylib_global.hh"
+
+class MYLIBSHARED_EXPORT Mylib
+{
+    
+public:
+    Mylib(void);
+    virtual ~Mylib(void);
+    float add(float x, float y) const;
+    float sub(float x, float y) const;
+    float mul(float x, float y) const;
+    float div(float x, float y) const;
+};
+
+#endif // MYLIB_HH
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/mylib/mylib.pro b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/mylib/mylib.pro
new file mode 100644
index 0000000..8b2d2c9
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/mylib/mylib.pro
@@ -0,0 +1,29 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2013-08-17T00:52:43
+#
+#-------------------------------------------------
+
+QT       -= gui
+
+TARGET = mylib
+TEMPLATE = lib
+
+QMAKE_CXXFLAGS += -std=c++11
+
+DEFINES += MYLIB_LIBRARY
+
+SOURCES += mylib.cc
+
+HEADERS += mylib.hh\
+        mylib_global.hh \
+    easylogging++.h
+
+unix:!symbian {
+    maemo5 {
+        target.path = /opt/usr/lib
+    } else {
+        target.path = /usr/lib
+    }
+    INSTALLS += target
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/mylib/mylib_global.hh b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/mylib/mylib_global.hh
new file mode 100644
index 0000000..a820d71
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/Qt/shared-lib/mylib/mylib_global.hh
@@ -0,0 +1,12 @@
+#ifndef MYLIB_GLOBAL_HH
+#define MYLIB_GLOBAL_HH
+
+#include <QtCore/qglobal.h>
+
+#if defined(MYLIB_LIBRARY)
+#  define MYLIBSHARED_EXPORT Q_DECL_EXPORT
+#else
+#  define MYLIBSHARED_EXPORT Q_DECL_IMPORT
+#endif
+
+#endif // MYLIB_GLOBAL_HH
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/.gitignore b/vendor/github.com/muflihun/easyloggingpp/samples/STL/.gitignore
new file mode 100644
index 0000000..6a88a81
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/.gitignore
@@ -0,0 +1,2 @@
+bin/*
+logs/*
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/.travis_build.sh b/vendor/github.com/muflihun/easyloggingpp/samples/STL/.travis_build.sh
new file mode 100755
index 0000000..0933f65
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/.travis_build.sh
@@ -0,0 +1,9 @@
+sh ./build_all.sh clang++
+if [ "$?" = "0" ];then
+  echo "Built successfully"
+  sh ./run_all.sh
+  echo "Successfully ran all samples"
+else
+  echo "Build failed! (code: $?)"
+  exit $?
+fi
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/all-logs.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/all-logs.cpp
new file mode 100644
index 0000000..73d540f
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/all-logs.cpp
@@ -0,0 +1,62 @@
+ //
+ // This file is part of Easylogging++ samples
+ //
+ // Writes all logs (incl. debug version of logs i.e, DLOG etc) using default logger
+ // We add logging flag `DisableApplicationAbortOnFatalLog` that prevents application abort on FATAL log
+ //
+ // Revision 1.2
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(int argc, char** argv) {
+    START_EASYLOGGINGPP(argc, argv);
+    el::Loggers::addFlag(el::LoggingFlag::DisableApplicationAbortOnFatalLog);
+    el::Loggers::addFlag(el::LoggingFlag::ColoredTerminalOutput);
+
+    // You can uncomment following lines to take advantage of hierarchical logging
+    // el::Loggers::addFlag(el::LoggingFlag::HierarchicalLogging);
+    // el::Loggers::setLoggingLevel(el::Level::Global);
+
+    LOG(INFO);
+    LOG(DEBUG);
+    LOG(WARNING);
+    LOG(ERROR);
+    LOG(TRACE);
+    VLOG(1);
+    LOG(FATAL);
+
+    DLOG(INFO);
+    DLOG(DEBUG);
+    DLOG(WARNING);
+    DLOG(ERROR);
+    DLOG(TRACE);
+    DVLOG(1);
+    DLOG(FATAL);
+
+    LOG(INFO) << "Turning off colored output";
+    el::Loggers::removeFlag(el::LoggingFlag::ColoredTerminalOutput);
+    
+    LOG_IF(true, INFO);
+    LOG_IF(true, DEBUG);
+    LOG_IF(true, WARNING);
+    LOG_IF(true, ERROR);
+    LOG_IF(true, TRACE);
+    VLOG_IF(true, 1);
+    LOG_IF(true, FATAL);
+
+    LOG_EVERY_N(1, INFO);
+    LOG_EVERY_N(1, DEBUG);
+    LOG_EVERY_N(1, WARNING);
+    LOG_EVERY_N(1, ERROR);
+    LOG_EVERY_N(1, TRACE);
+    VLOG_EVERY_N(1, 1);
+    LOG_EVERY_N(1, FATAL);
+
+    CHECK(1 == 1);
+    CCHECK(1 == 1, "default");
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/autospace.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/autospace.cpp
new file mode 100644
index 0000000..87e809c
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/autospace.cpp
@@ -0,0 +1,35 @@
+ //
+ // This file is part of Easylogging++ samples
+ // Demonstration of auto spacing functionality
+ //
+ // Revision 1.2
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(void) {
+
+    LOG(INFO) << "this" << "is" << "a" << "message";
+    std::string str = "-sample-";
+    std::wstring wstr = L"-wsample-";
+    const char* chr = "-csample-";
+    const wchar_t* wchr = L"-wcsample-";
+    LOG(INFO) << str << str << str << str;
+    LOG(INFO) << wstr << wstr << wstr << wstr;
+    LOG(INFO) << chr << chr << chr << chr;
+    LOG(INFO) << wchr << wchr << wchr << wchr;
+
+    // ---- THIS IS MAGIC 
+    el::Loggers::addFlag(el::LoggingFlag::AutoSpacing);
+
+    LOG(INFO) << "this" << "is" << "a" << "message";    
+    LOG(INFO) << str << str << str << str;
+    LOG(INFO) << wstr << wstr << wstr << wstr;
+    LOG(INFO) << chr << chr << chr << chr;
+    LOG(INFO) << wchr << wchr << wchr << wchr;
+
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/build_all.sh b/vendor/github.com/muflihun/easyloggingpp/samples/STL/build_all.sh
new file mode 100755
index 0000000..f8b39b5
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/build_all.sh
@@ -0,0 +1,15 @@
+
+# Builds all files into bin/
+
+[ -d "bin" ] || mkdir "bin"
+rm -rf bin/*
+EXCLUDE_LIST="logrotate.cpp"
+find . -maxdepth 1 -type f -name '*.cpp' -not -name $EXCLUDE_LIST -exec sh compile.sh {} $1 \;
+echo "Completed!"
+
+files=$(ls -l bin/)
+if [ "$files" = "total 0" ];then
+  exit 1
+else
+  exit 0
+fi
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/check-macros.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/check-macros.cpp
new file mode 100644
index 0000000..8c7fd9a
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/check-macros.cpp
@@ -0,0 +1,73 @@
+ //
+ // This file is part of Easylogging++ samples
+ //
+ // Check macros (incl. debug versions i.e, DCHECK etc) + PCHECK and DCHECK
+ // We add logging flag `DisableApplicationAbortOnFatalLog` that prevents application abort because CHECK macros always log FATAL
+ //
+ // Revision 1.1
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(void) {
+    el::Loggers::addFlag(el::LoggingFlag::DisableApplicationAbortOnFatalLog);
+    
+    // These checks should fail
+    LOG(INFO) << "----- DONT WORRY ABOUT FOLLOWING CHECKS FAILING - THEY ARE EXPECTED";
+    CHECK(1 > 2) << "1 is not greater than 2";
+    CHECK_EQ(1, 2) << "1 is not equal to 2";
+    CHECK_NE(1, 1) << "Wow, I did not know 1 == 1";
+    CHECK_STREQ("abc", "def") << " :)";
+    CHECK_STRNE("abc", "abc") << " :(";
+    CHECK_STRCASEEQ("abc", "ABCD") << " :p";
+    CHECK_STRCASENE("abc", "ABC") << " B)";
+    int* f = new int;
+    CHECK_NOTNULL(f);
+
+    delete f;
+    f = nullptr;
+    // These checks should pass 
+    LOG(WARNING) << "----- START WORRYING ABOUT CHECKS NOW";
+    CHECK(1 < 2) << " snap -- lib has bug!";
+    CHECK_EQ(1, 1) << " snap -- lib has bug!";
+    CHECK_NE(1, 2) << " snap -- lib has bug!";
+    CHECK_STREQ("abc", "abc") << " snap -- lib has bug!";
+    CHECK_STRNE("abc", "abe") << " snap -- lib has bug!";
+    CHECK_STRCASEEQ("abc", "ABC") << " snap -- lib has bug!";
+    CHECK_STRCASENE("abc", "ABE") << " snap -- lib has bug!";
+    LOG(INFO) << "----- HOPEFULLY NO CHECK FAILED SINCE YOU STARTED WORRYING!";
+
+    // DCHECKs
+    DCHECK(1 > 2) << "1 is not greater than 2";
+    DCHECK_EQ(1, 2) << "1 is not equal to 2";
+    DCHECK_NE(1, 1) << "Wow, I did not know 1 == 1";
+    DCHECK_STREQ("abc", "def") << " :)";
+    DCHECK_STRNE("abc", "abc") << " :(";
+    DCHECK_STRCASEEQ("abc", "ABCD") << " :p";
+    DCHECK_STRCASENE("abc", "ABC") << " B)";
+    
+    // PCHECKs
+    std::fstream fstr("a/file/that/does/not/exist", std::fstream::in);
+    PCHECK(fstr.is_open());
+    DPCHECK(fstr.is_open());
+
+    int min = 1;
+    int max = 5;
+    CHECK_BOUNDS(1, min, max) << "Index out of bounds";
+    CHECK_BOUNDS(2, min, max) << "Index out of bounds";
+    CHECK_BOUNDS(3, min, max) << "Index out of bounds";
+    CHECK_BOUNDS(4, min, max) << "Index out of bounds";
+    CHECK_BOUNDS(5, min, max) << "Index out of bounds";
+    CHECK_BOUNDS(6, min, max) << "Index out of bounds";
+    DCHECK_BOUNDS(1, min, max) << "Index out of bounds";
+    DCHECK_BOUNDS(2, min, max) << "Index out of bounds";
+    DCHECK_BOUNDS(3, min, max) << "Index out of bounds";
+    DCHECK_BOUNDS(4, min, max) << "Index out of bounds";
+    DCHECK_BOUNDS(5, min, max) << "Index out of bounds";
+    DCHECK_BOUNDS(6, min, max) << "Index out of bounds";
+
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/compile.sh b/vendor/github.com/muflihun/easyloggingpp/samples/STL/compile.sh
new file mode 100755
index 0000000..73b0cd4
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/compile.sh
@@ -0,0 +1,38 @@
+## Helper script for build_all.sh
+
+FILE=$1
+
+macro="$macro -DELPP_DEBUG_ERRORS"
+macro="$macro -DELPP_THREAD_SAFE"
+macro="$macro -DELPP_STL_LOGGING"
+macro="$macro -DELPP_LOG_UNORDERED_SET"
+macro="$macro -DELPP_LOG_UNORDERED_MAP"
+macro="$macro -DELPP_FEATURE_CRASH_LOG"
+macro="$macro -DELPP_LOGGING_FLAGS_FROM_ARG"
+macro="$macro -DELPP_FEATURE_ALL"
+# macro="$macro -DELPP_DEFAULT_LOG_FILE=\"/a/path/that/does/not/exist/f.log\""
+
+if [ "$2" = "" ];then
+  COMPILER=g++
+else
+  COMPILER=$2
+fi
+
+CXX_STD='-std=c++0x -pthread'
+
+if [ "$FILE" = "" ]; then
+  echo "Please provide filename to compile"
+  exit
+fi
+
+echo "Compiling... [$FILE]"
+
+COMPILE_LINE="$COMPILER $FILE easylogging++.cc -o bin/$FILE.bin $macro $CXX_STD -Wall -Wextra -pedantic -pedantic-errors -Werror -Wfatal-errors -Wundef -Wunused"
+
+echo "    $COMPILE_LINE"
+
+$($COMPILE_LINE)
+
+echo "    DONE! [./bin/$FILE.bin]"
+echo
+echo
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/conditional.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/conditional.cpp
new file mode 100644
index 0000000..f0ae823
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/conditional.cpp
@@ -0,0 +1,24 @@
+ //
+ // This file is part of EasyLogging++ samples
+ //
+ // Conditional logging using LOG_IF, you can use CLOG_IF(condition, loggerID) macro to use your own logger if you 
+ // don't want to use default logger
+ //
+ // Revision 1.1
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(void) {
+
+  LOG_IF(1 == 1, INFO) << "1 is equal to 1";
+
+  LOG_IF(1 > 2, INFO) << "1 is greater than 2";
+
+  LOG_IF(1 == 2, DEBUG) << "1 is equal to 2";
+
+  return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/configurator.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/configurator.cpp
new file mode 100644
index 0000000..7f61771
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/configurator.cpp
@@ -0,0 +1,29 @@
+ //
+ // This file is part of Easylogging++ samples
+ //
+ // Very basic sample to configure using el::Configuration and configuration file
+ //
+ // Revision 1.1
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(int argc, char** argv) {
+    START_EASYLOGGINGPP(argc, argv);
+    LOG(INFO) << "Info log using 'default' logger before using configuration";
+   
+    el::Configurations confFromFile("../default-logger.conf");
+ 
+    el::Loggers::reconfigureAllLoggers(confFromFile); 
+     
+    LOG(INFO) << "Info log after manually configuring 'default' logger";
+    el::Loggers::getLogger("default")->reconfigure();
+    LOG(ERROR) << "Error log";
+    LOG(WARNING) << "WARNING! log";
+    VLOG(1) << "Verbose log 1";
+    VLOG(2) << "Verbose log 2";
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/containers.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/containers.cpp
new file mode 100644
index 0000000..5ee751b
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/containers.cpp
@@ -0,0 +1,97 @@
+ //
+ // This file is part of Easylogging++ samples
+ //
+ // Logs different STL containers, some containing STL templates and other containing our own class Vehicle
+ //
+ // Revision 1.2
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+#include <sstream>
+INITIALIZE_EASYLOGGINGPP
+
+class Vehicle : public el::Loggable {
+    public:
+        Vehicle(const std::string& make_, const std::string& model_, unsigned int year_ = 2013,
+                    const std::string& version_ = "") :
+            make_(make_), model_(model_), year_(year_), version_(version_) {}
+        virtual ~Vehicle() {}
+
+        std::string toString(void) const {
+            std::stringstream ss;
+            ss << "[" << make_ << " " << model_ << " " << year_ << (version_.size() > 0 ? " " : "") << version_ << "]";
+            return ss.str();
+        }
+        virtual void log(el::base::type::ostream_t& os) const {
+            os << toString().c_str(); 
+        }
+    private:
+        std::string make_;
+        std::string model_;
+        int year_;
+        std::string version_;
+};
+void vectorLogs() {
+  std::vector<std::string> stringVec;
+  std::vector<Vehicle> vehicleVec;
+  stringVec.push_back("stringVec");
+  vehicleVec.push_back(Vehicle("Honda", "Accord", 2013, "vehicleVec")); 
+  LOG(INFO) << "stringVec : " << stringVec; 
+  LOG(INFO) << "vehicleVec : " << vehicleVec; 
+}
+
+void listLogs() {
+  std::list<std::string> stringList;
+  std::vector<std::string*> stringPtrList;
+  std::list<Vehicle> vehicleList;
+  std::vector<Vehicle*> vehiclePtrList;
+  stringList.push_back("stringList");
+  stringPtrList.push_back(new std::string("stringPtrList"));
+  vehicleList.push_back(Vehicle("Honda", "Accord", 2013, "vehicleList"));
+  vehiclePtrList.push_back(new Vehicle("Honda", "Accord", 2013, "vehiclePtrList"));
+  LOG(INFO) << "stringList : " << stringList;
+  LOG(INFO) << "stringPtrList : " << stringPtrList;
+  LOG(INFO) << "vehicleList : " << vehicleList;
+  LOG(INFO) << "vehiclePtrList : " << vehiclePtrList;
+  
+  delete stringPtrList.at(0);
+  delete vehiclePtrList.at(0);
+}
+
+void otherContainerLogs() {
+    std::map<int, std::string> map_;
+    map_.insert (std::pair<int, std::string>(1, "one"));
+    map_.insert (std::pair<int, std::string>(2, "two"));
+    LOG(INFO) << "Map: " << map_;
+
+    std::queue<int> queue_;
+    queue_.push(77);
+    queue_.push(16);
+    LOG(INFO) << queue_;
+
+    std::bitset<10> bitset_ (std::string("10110"));
+    LOG(INFO) << bitset_;
+
+    int pqueueArr_[]= { 10, 60, 50, 20 };
+    std::priority_queue< int, std::vector<int>, std::greater<int> > pqueue (pqueueArr_, pqueueArr_ + 4);
+    LOG(INFO) << pqueue;
+
+    std::deque<int> mydeque_ (3,100);
+    mydeque_.at(1) = 200;
+
+    std::stack<int> stack_ (mydeque_);
+    LOG(INFO) << stack_;
+
+    std::stack<std::string*> stackStr_;
+    stackStr_.push (new std::string("test"));
+    LOG(INFO) << stackStr_;
+    delete stackStr_.top();
+}
+
+int main(void) {
+    vectorLogs();
+    listLogs();
+    otherContainerLogs();
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/crash.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/crash.cpp
new file mode 100644
index 0000000..20418c3
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/crash.cpp
@@ -0,0 +1,48 @@
+ //
+ // This file is part of Easylogging++ samples
+ //
+ // Demonstration on how crashes are handled. You can set second argument of this progam to `y`
+ // and application will not abort before crash is handled
+ //
+ // Revision 1.1
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+class Crasher {
+public:
+    Crasher(void) { 
+        str = nullptr; 
+        call3(); 
+    }
+
+    void call1(void) {
+        LOG(INFO) << "Bye bye!";
+        str->clear(); // Crash!
+    }
+
+    void call2(void) {
+        LOG(INFO) << "Calling call1()";
+        call1();
+    }
+
+    void call3(void) {
+        LOG(INFO) << "Calling call2()";
+        call2();
+    }
+private:
+    std::string* str;
+};
+
+int main(int argc, char** argv) {
+    // If argv[1] == "y" means PREVENT CRASH ABORTION = YES
+    if (argc > 1 && argv[1][0] == 'y') {
+        el::Loggers::addFlag(el::LoggingFlag::DisableApplicationAbortOnFatalLog);
+        LOG(FATAL) << "Before we crash we try to log using FATAL log and make sure app did not crash because we added flag DisableApplicationAbortOnFatalLog";
+    }
+    Crasher c;
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/custom-class.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/custom-class.cpp
new file mode 100644
index 0000000..b18bd6e
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/custom-class.cpp
@@ -0,0 +1,60 @@
+ //
+ // This file is part of EasyLogging++ samples
+ //
+ // Demonstration of logging your own class, a bit similar to containers.cpp but specific to custom class only
+ //
+ // Revision 1.2
+ // @author mkhan3189
+ //
+
+#include <sstream>
+#include <vector>
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+class Vehicle : public el::Loggable {
+    public:
+        Vehicle(const std::string& make_, const std::string& model_, unsigned int year_ = 2013,
+                    const std::string& version_ = "") :
+            make_(make_), model_(model_), year_(year_), version_(version_) {}
+
+        virtual void log(el::base::type::ostream_t& os) const;
+
+    private:
+        std::string make_;
+        std::string model_;
+        int year_;
+        std::string version_;
+};
+
+void Vehicle::log(el::base::type::ostream_t& os) const {
+    os << "(" << make_.c_str() << " " << model_.c_str() << " " << year_ << (version_.size() > 0 ? " " : "") << version_.c_str() << ")";
+}
+
+int main(void) {
+
+    Vehicle vehicle1("Land Rover", "Discovery 4", 2013, "TD HSE");
+    Vehicle vehicle2("Honda", "Accord", 2013, "V6 Luxury");
+    Vehicle vehicle3("Honda", "Accord", 2010);
+
+    LOG(INFO) << "We have vehicles available: " << vehicle1  << " " << vehicle2 << " " << vehicle3;
+
+    std::vector<Vehicle*> vehicles;
+    vehicles.push_back(&vehicle1);
+    vehicles.push_back(&vehicle2);
+    vehicles.push_back(&vehicle3);
+    LOG(INFO) << "Now printing whole vector of pointers";
+    LOG(INFO) << vehicles;
+
+    std::vector<Vehicle> vehiclesStack;
+    vehiclesStack.push_back(vehicle1);
+    vehiclesStack.push_back(vehicle2);
+    vehiclesStack.push_back(vehicle3);
+    LOG(INFO) << "Now printing whole vector of classes";
+    LOG(INFO) << vehiclesStack;
+
+
+    return 0;
+}
+
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/custom-crash-handler.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/custom-crash-handler.cpp
new file mode 100644
index 0000000..cfb3394
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/custom-crash-handler.cpp
@@ -0,0 +1,33 @@
+ //
+ // This file is part of Easylogging++ samples
+ //
+ // Custom crash handler sample to demonstrate el::Helpers::setCrashHandler
+ //
+ // Revision 1.0
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+void myCrashHandler(int sig) {
+    LOG(ERROR) << "Woops! Crashed!";
+    // FOLLOWING LINE IS OPTIONAL
+    el::Helpers::logCrashReason(sig, true);
+    // FOLLOWING LINE IS ABSOLUTELY NEEDED AT THE END IN ORDER TO ABORT APPLICATION
+    el::Helpers::crashAbort(sig);
+}
+
+int main(void) {
+
+    el::Helpers::setCrashHandler(myCrashHandler);
+    
+    LOG(INFO) << "My crash handler!";
+
+    std::string* s = new std::string();
+    delete s;
+    s->clear();; // Crash!
+
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/custom-format-spec.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/custom-format-spec.cpp
new file mode 100644
index 0000000..5af354e
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/custom-format-spec.cpp
@@ -0,0 +1,86 @@
+ //
+ // This file is part of Easylogging++ samples
+ //
+ // Custom format specifier to demonstrate usage of el::Helpers::installCustomFormatSpecifier
+ //
+ // Revision 1.2
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+enum ELogLevel : el::base::type::VerboseLevel {
+    kLogLevel_Off = 0,
+    kLogLevel_Error,
+    kLogLevel_Warning,
+    kLogLevel_Info,
+    kLogLevel_Debug,
+    kLogLevel_Verbose
+    };
+
+static std::map<ELogLevel, std::string> sSeverityMap {
+    { kLogLevel_Error,   "ouch!" },
+    { kLogLevel_Warning, "oops" },
+    { kLogLevel_Info,    "hey" },
+    { kLogLevel_Debug,   "debugging" },
+    { kLogLevel_Verbose, "loquacious" }
+};
+
+std::string
+getSeverity(const el::LogMessage* message) {
+    return sSeverityMap[static_cast<ELogLevel>(message->verboseLevel())].c_str();
+}
+
+class HttpRequest {
+public:
+    std::string getIp(const el::LogMessage*) {
+        return "192.168.1.1";
+    }
+};
+
+int main(void) {
+    using namespace std::placeholders;
+
+    HttpRequest request;
+
+    // Install format specifier
+    el::Helpers::installCustomFormatSpecifier(el::CustomFormatSpecifier("%ip_addr",  std::bind(&HttpRequest::getIp, request, _1)));
+    // Either you can do what's done above (for member function) or if you have static function you can simply say
+    // el::CustomFormatSpecifier("%ip_addr", getIp)
+
+    // Configure loggers
+    el::Loggers::reconfigureAllLoggers(el::ConfigurationType::Format, "%datetime %level %ip_addr : %msg");
+    LOG(INFO) << "This is after installed 'ip_addr' spec";
+
+    // Uninstall custom format specifier
+    el::Helpers::uninstallCustomFormatSpecifier("%ip_addr");
+    LOG(INFO) << "This is after uninstalled";
+
+    // Install format specifier
+    el::Helpers::installCustomFormatSpecifier(el::CustomFormatSpecifier("%severity", getSeverity));
+
+    // Configure loggers
+    el::Loggers::reconfigureAllLoggers(el::ConfigurationType::Format, "%datetime{%b %d %H:%m:%s}: [%severity] %msg");
+    el::Loggers::setVerboseLevel(kLogLevel_Verbose);
+
+    VLOG(kLogLevel_Info) << "Installed 'severity' custom formatter";
+    VLOG(kLogLevel_Error) << "This is an error";
+    VLOG(kLogLevel_Warning) << "This is a warning";
+    VLOG(kLogLevel_Info) << "This is info";
+    VLOG(kLogLevel_Debug) << "This is debug";
+    VLOG(kLogLevel_Verbose) << "This is verbose";
+
+    // Uninstall custom format specifier
+    el::Helpers::uninstallCustomFormatSpecifier("%severity");
+
+    VLOG(kLogLevel_Info) << "Uninstalled 'severity' custom formatter";
+    VLOG(kLogLevel_Error) << "This is an error";
+    VLOG(kLogLevel_Warning) << "This is a warning";
+    VLOG(kLogLevel_Info) << "This is info";
+    VLOG(kLogLevel_Debug) << "This is debug";
+    VLOG(kLogLevel_Verbose) << "This is verbose";
+
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/custom-performance-output.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/custom-performance-output.cpp
new file mode 100644
index 0000000..2c20e89
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/custom-performance-output.cpp
@@ -0,0 +1,58 @@
+ //
+ // This file is part of Easylogging++ samples
+ // PerformanceTrackingCallback sample to customize performance output
+ //
+ // Revision 1.0
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+class MyPerformanceTrackingOutput : public el::PerformanceTrackingCallback {
+public:
+    MyPerformanceTrackingOutput() {
+        el::PerformanceTrackingCallback* defaultCallback = 
+            el::Helpers::performanceTrackingCallback<el::base::DefaultPerformanceTrackingCallback>("DefaultPerformanceTrackingCallback");
+        defaultCallback->setEnabled(false);
+    }
+    virtual ~MyPerformanceTrackingOutput() {
+        el::PerformanceTrackingCallback* defaultCallback = 
+            el::Helpers::performanceTrackingCallback<el::base::DefaultPerformanceTrackingCallback>("DefaultPerformanceTrackingCallback");
+        defaultCallback->setEnabled(true);
+    }
+protected:
+    void handle(const el::PerformanceTrackingData* data) {
+        if (data->firstCheckpoint()) { return; } // ignore first check point
+        el::base::type::stringstream_t ss;
+        ss << data->blockName()->c_str() << " took " <<  *data->formattedTimeTaken() << " to run";
+        if (data->dataType() == el::PerformanceTrackingData::DataType::Checkpoint) {
+            ss << " [CHECKPOINT ONLY] ";
+        }
+        CLOG(INFO, data->loggerId().c_str()) << ss.str();
+    }
+};
+
+int main(void) {
+
+    TIMED_SCOPE(mainBlock, "main");
+
+    el::Helpers::installPerformanceTrackingCallback<MyPerformanceTrackingOutput>("MyPerformanceTrackingOutput");
+
+    {
+        TIMED_SCOPE(timer, "myblock");
+        for (int i = 0; i <= 500; ++i) {
+            // Spend time
+            for (int j = 0; j < 10000; ++j) { std::string tmp; }
+            if (i % 100 == 0) {
+                timer->checkpoint(std::string(std::string("checkpoint at ") + std::to_string(static_cast<unsigned long long>(i))).c_str());
+            }
+        }
+    } 
+    LOG(INFO) << "By now, you should get performance result of above scope";
+    el::Helpers::uninstallPerformanceTrackingCallback<MyPerformanceTrackingOutput>("MyPerformanceTrackingOutput");
+    // You will get "main" block in normal format (default) 
+    // Now that we have uninstalled our custom callback we should get our default call back enabled (see destructor of MyPerformanceTrackingOutput above)
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/default-configurations.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/default-configurations.cpp
new file mode 100644
index 0000000..0bf44e4
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/default-configurations.cpp
@@ -0,0 +1,34 @@
+ //
+ // This file is part of Easylogging++ samples
+ //
+ // Demonstrates setting default configurations for existing and future loggers
+ //
+ // Revision 1.1
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+using namespace el;
+
+int main(void) {
+    
+    Configurations c;
+    c.setGlobally(ConfigurationType::Format, "[%logger] %level: %msg");
+    c.setGlobally(ConfigurationType::Filename, "/tmp/logs/custom.log");
+    // Set default configuration for any future logger - existing logger will not use this configuration unless
+    // either true is passed in second argument or set explicitly using Loggers::reconfigureAllLoggers(c);
+    Loggers::setDefaultConfigurations(c);
+    LOG(INFO) << "Set default configuration but existing loggers not updated yet"; // Logging using trivial logger
+    Loggers::getLogger("testDefaultConf");
+    CLOG(INFO, "testDefaultConf") << "Logging using new logger 1"; // You can also use CINFO << "..."
+    // Now setting default and also resetting existing loggers
+    Loggers::setDefaultConfigurations(c, true);
+    LOG(INFO) << "Existing loggers updated as well";
+    Loggers::getLogger("testDefaultConf2");
+    CLOG(INFO, "testDefaultConf2") << "Logging using new logger 2";
+
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/default-log-file-from-arg.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/default-log-file-from-arg.cpp
new file mode 100644
index 0000000..2d70de0
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/default-log-file-from-arg.cpp
@@ -0,0 +1,20 @@
+ //
+ // This file is part of Easylogging++ samples
+ // Default log file using '--default-log-file' arg
+ //
+ // Revision 1.0
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(int argc, char** argv) {
+    START_EASYLOGGINGPP(argc, argv);
+ 
+    LOG(INFO) << "My log message - hopefully you have reconfigured log file by using"
+        << " --default-log-file=blah.log and defined ELPP_NO_DEFAULT_LOG_FILE";
+
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/del-logger.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/del-logger.cpp
new file mode 100644
index 0000000..0fd2941
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/del-logger.cpp
@@ -0,0 +1,23 @@
+ //
+ // This file is part of Easylogging++ samples
+ // Sample to remove logger
+ //
+ // Revision 1.0
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(void) {
+    
+    LOG(INFO) << "My first ultimate log message";
+    CLOG(INFO, "test") << "Send me error";
+    el::Loggers::getLogger("test");
+    CLOG(INFO, "test") << "Write";
+    el::Loggers::unregisterLogger("test");
+    CLOG(INFO, "test") << "Send me error";
+    DLOG(INFO) << "Wow";
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/different-output.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/different-output.cpp
new file mode 100644
index 0000000..97ee5c9
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/different-output.cpp
@@ -0,0 +1,31 @@
+//
+//  different-output.cpp
+//  v1.0
+//
+//  Multiple loggers to have different output for file and console
+//
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+#define MY_CUSTOM_LOGGER(LEVEL) CLOG(LEVEL, "default", "fileLogger")
+
+int main() {
+    
+    el::Configurations fileConf("../file.conf");
+    el::Configurations consoleConf("../console.conf");
+    
+    
+    el::Loggers::addFlag(el::LoggingFlag::MultiLoggerSupport); // Enables support for multiple loggers
+    el::Logger* fileLogger = el::Loggers::getLogger("fileLogger"); // Register new logger
+    
+    el::Loggers::reconfigureLogger("default", consoleConf);
+    el::Loggers::reconfigureLogger(fileLogger, fileConf);
+    
+    
+    
+    MY_CUSTOM_LOGGER(INFO) << "This is how we do it.";
+    
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/easylogging++.cc b/vendor/github.com/muflihun/easyloggingpp/samples/STL/easylogging++.cc
new file mode 100644
index 0000000..2386848
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/easylogging++.cc
@@ -0,0 +1 @@
+#include "../../src/easylogging++.cc"
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/easylogging++.h b/vendor/github.com/muflihun/easyloggingpp/samples/STL/easylogging++.h
new file mode 100644
index 0000000..a2c8ee8
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/easylogging++.h
@@ -0,0 +1,5 @@
+// Header for sample that sub-includes original header from src/ folder
+#ifndef EASYLOGGING_FOR_SAMPLES_H
+#define EASYLOGGING_FOR_SAMPLES_H
+#include "../../src/easylogging++.h"
+#endif // EASYLOGGING_FOR_SAMPLES_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/flags.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/flags.cpp
new file mode 100644
index 0000000..4b7701c
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/flags.cpp
@@ -0,0 +1,20 @@
+ //
+ // This file is part of Easylogging++ samples
+ // Demonstration of STL flags, e.g, std::boolalpha
+ //
+ // Revision 1.1
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(void) {
+    
+    bool v = true;
+    LOG(INFO) << std::boolalpha << v;
+    LOG(INFO) << std::noboolalpha << v;
+
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/global-configuration.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/global-configuration.cpp
new file mode 100644
index 0000000..1172728
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/global-configuration.cpp
@@ -0,0 +1,24 @@
+ //
+ // This file is part of Easylogging++ samples
+ //
+ // Very basic sample to configure using global configuration (el::Loggers::configureFromGlobal)
+ //
+ // Revision 1.1
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(void) {
+
+    LOG(INFO) << "Info log before using global configuration";
+    
+    el::Loggers::configureFromGlobal("../global.conf"); 
+    
+    LOG(INFO) << "Info log AFTER using global configuration";
+    LOG(ERROR) << "Error log AFTER using global configuration";
+
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/helpers.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/helpers.cpp
new file mode 100644
index 0000000..bfbd627
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/helpers.cpp
@@ -0,0 +1,35 @@
+ //
+ // This file is part of Easylogging++ samples
+ //
+ // Helpers sample - this sample contains methods with explanation in comments on how to use them
+ //
+ // Revision 1.2
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+void configureFromArg() {
+    // Configures globally using "--logging" param value
+    // example: ./prog --logging-conf=/tmp/myglobal.conf
+    el::Loggers::configureFromArg("--logging-conf");
+}
+
+void flush() {
+    // Flush all levels of default logger
+    el::Loggers::getLogger("default")->flush();
+    
+    // Flush all loggers all levels
+    el::Loggers::flushAll();
+}
+
+int main(int argc, char** argv) {
+    START_EASYLOGGINGPP(argc, argv);
+
+    configureFromArg();
+    
+    flush();
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/locale.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/locale.cpp
new file mode 100644
index 0000000..f73ec13
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/locale.cpp
@@ -0,0 +1,22 @@
+ //
+ // This file is part of Easylogging++ samples
+ //
+ // Demonstration on how locale gives output
+ //
+ // Revision 1.1
+ // @author mkhan3189
+ //
+#ifndef ELPP_UNICODE
+#   define ELPP_UNICODE
+#endif
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(int argc, const char** argv) {
+    START_EASYLOGGINGPP(argc, argv);
+
+    LOG(INFO) << L"世界,你好";
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/log-dispatch-callback.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/log-dispatch-callback.cpp
new file mode 100644
index 0000000..97ecb85
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/log-dispatch-callback.cpp
@@ -0,0 +1,42 @@
+ //
+ // This file is part of Easylogging++ samples
+ // Demonstrates how to use log dispatch callback
+ //
+ // Revision 1.0
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+class MyHandler : public el::LogDispatchCallback {
+public:
+    void handle(const el::LogDispatchData*) {
+        // NEVER DO LOG FROM HANDLER!
+        // LOG(INFO) << "Test MyHandler " << msg;
+    }
+};
+
+class MyHtmlHandler : public el::LogDispatchCallback {
+public:
+    MyHtmlHandler() {
+        el::Loggers::getLogger("html"); // register
+    }
+    void handle(const el::LogDispatchData*) {
+        // NEVER DO LOG FROM HANDLER!
+       // CLOG(INFO, "html") << data->logMessage()->message();
+       std::cout << "Test handler" << std::endl;
+    }
+};
+
+int main(void) {
+    
+    el::Helpers::installLogDispatchCallback<MyHandler>("MyHandler");
+    el::Helpers::installLogDispatchCallback<MyHtmlHandler>("MyHtmlHandler");
+
+    LOG(INFO) << "My first log message";
+    LOG(INFO) << "My second log message";
+
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/loggable.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/loggable.cpp
new file mode 100644
index 0000000..1af1e26
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/loggable.cpp
@@ -0,0 +1,32 @@
+ //
+ // This file is part of Easylogging++ samples
+ //
+ // Usage sample of el::Loggable to make class log-friendly
+ //
+ // Revision 1.1
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+class MyClass : public el::Loggable {
+public:
+    MyClass(const std::string& name) : m_name(name) {}
+
+    virtual inline void log(el::base::type::ostream_t& os) const {
+        os << m_name.c_str();
+    }
+
+
+private:
+    std::string m_name;
+};
+
+int main(void) {
+    MyClass c("c"); 
+    MyClass c2("c2"); 
+    LOG(INFO) << "I am " << c << "; and I am " << c2;
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/logger-log-functions.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/logger-log-functions.cpp
new file mode 100644
index 0000000..be2ad4d
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/logger-log-functions.cpp
@@ -0,0 +1,31 @@
+ //
+ // This file is part of Easylogging++ samples
+ // Very basic sample for Logger::info etc
+ //
+ // Revision 1.0
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(int argc, char** argv) {
+
+    START_EASYLOGGINGPP(argc, argv);
+
+    el::Logger* defaultLogger = el::Loggers::getLogger("default");
+
+    std::vector<int> i;
+    i.push_back(1);
+    i.push_back(2);
+    defaultLogger->warn("My first ultimate log message %v %v %v", 123, 222, i);
+
+    // Escaping
+    defaultLogger->info("My first ultimate log message %% %%v %v %v", 123, 222); // My first ultimate log message % %v 123 222
+
+    defaultLogger->verbose(1, "test verbose");
+    defaultLogger->verbose(1, "test verbose with args %v", 2);
+
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/logrotate-pthread.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/logrotate-pthread.cpp
new file mode 100644
index 0000000..7cd697b
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/logrotate-pthread.cpp
@@ -0,0 +1,44 @@
+//
+// This file is part of Easylogging++ samples
+//
+// Sample to show how to implement log rotate using easylogging++ (posix thread version)
+// Thanks to Darren for efforts (http://darrendev.blogspot.com.au/)
+//
+// Compile: g++ -std=c++11 -Wall -Werror logrotate.cpp -lpthread -o logrotate -DELPP_THREAD_SAFE
+//
+// Revision 1.1
+// @author mkhan3189
+//
+
+#define ELPP_NO_DEFAULT_LOG_FILE
+#include "easylogging++.h"
+#include <unistd.h> // for sleep()
+
+INITIALIZE_EASYLOGGINGPP
+
+void* logRotate(void*){
+	// Rotate every 20 seconds
+	while (true){
+		sleep(20);
+		LOG(INFO) << "About to rotate log file!";
+		el::Loggers::getLogger("default")->reconfigure();
+	}
+	return NULL;
+}
+
+int main(int, char**){
+    el::Loggers::configureFromGlobal("logrotate.conf");
+    LOG(INFO) << "The program has started!";
+    
+    pthread_t logRotatorThread;
+	pthread_create(&logRotatorThread, NULL, logRotate, NULL);
+    
+    //Main thread
+    for(int n = 0; n < 60; ++n){
+        LOG(TRACE) << n;
+        sleep(1);
+    }
+    
+    LOG(INFO) << "Shutting down.";
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/logrotate.conf b/vendor/github.com/muflihun/easyloggingpp/samples/STL/logrotate.conf
new file mode 100644
index 0000000..5e81e92
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/logrotate.conf
@@ -0,0 +1,8 @@
+-- default
+* GLOBAL:
+    FORMAT = "%datetime{%Y-%M-%d %H:%m:%s.%g},%level,%thread,%msg"
+    SUBSECOND_PRECISION = 4
+    TO_FILE = true
+    FILENAME = "logs/info.%datetime{%Y%M%d_%H%m%s}.log"
+    LOG_FLUSH_THRESHOLD = 5
+
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/logrotate.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/logrotate.cpp
new file mode 100644
index 0000000..354a6a2
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/logrotate.cpp
@@ -0,0 +1,48 @@
+//
+// This file is part of Easylogging++ samples
+//
+// Sample to show how to implement log rotate using easylogging++
+// Thanks to Darren for efforts (http://darrendev.blogspot.com.au/)
+//
+// Compile: g++ -std=c++11 -Wall -Werror logrotate.cpp -lpthread -o logrotate -DELPP_THREAD_SAFE
+//
+// Revision 1.0
+// @author Darren
+//
+
+#include <thread>
+#define ELPP_NO_DEFAULT_LOG_FILE
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(int,char**){
+    el::Loggers::configureFromGlobal("logrotate.conf");
+    LOG(INFO)<<"The program has started!";
+    
+    std::thread logRotatorThread([](){
+        const std::chrono::seconds wakeUpDelta = std::chrono::seconds(20);
+        auto nextWakeUp = std::chrono::system_clock::now() + wakeUpDelta;
+        
+        while(true){
+            std::this_thread::sleep_until(nextWakeUp);
+            nextWakeUp += wakeUpDelta;
+            LOG(INFO) << "About to rotate log file!";
+            auto L = el::Loggers::getLogger("default");
+            if(L == nullptr)LOG(ERROR)<<"Oops, it is not called default!";
+            else L->reconfigure();
+        }
+        
+    });
+    
+    logRotatorThread.detach();
+    
+    //Main thread
+    for(int n = 0; n < 1000; ++n){
+        LOG(TRACE) << n;
+        std::this_thread::sleep_for(std::chrono::milliseconds(100));
+    }
+    
+    LOG(INFO) << "Shutting down.";
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/make-loggable.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/make-loggable.cpp
new file mode 100644
index 0000000..db379a8
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/make-loggable.cpp
@@ -0,0 +1,41 @@
+ //
+ // This file is part of Easylogging++ samples
+ //
+ // Usage of MAKE_LOGGABLE to make class log-friendly
+ //
+ // Revision 1.1
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+class Integer {
+public:
+    Integer(int i) : m_underlyingInt(i) {}
+    Integer& operator=(const Integer& integer) { m_underlyingInt = integer.m_underlyingInt; return *this; }
+    virtual ~Integer(void) { m_underlyingInt = -1; }
+    int getInt(void) const { return m_underlyingInt; }
+    inline operator int() const { return m_underlyingInt; }
+private:
+    int m_underlyingInt;
+};
+
+// Lets say Integer class is in some third party library
+
+// We use MAKE_LOGGABLE(class, instance, outputStream) to make it loggable
+inline MAKE_LOGGABLE(Integer, integer, os) {
+    os << integer.getInt();
+    return os;
+}
+
+
+int main(void) {
+    
+    Integer count = 5;
+    LOG(INFO) << "Integer count = " << count;
+    int reverse = count;
+    LOG(INFO) << "int reverse = " << reverse;
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/manipulators.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/manipulators.cpp
new file mode 100644
index 0000000..fef56f8
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/manipulators.cpp
@@ -0,0 +1,29 @@
+ //
+ // This file is part of Easylogging++ samples
+ //
+ // Demonstration of manipulators usages and how they behave
+ //
+ // Revision 1.1
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(void) {
+    
+    LOG(INFO) << "std::endl" << std::endl;
+    LOG(INFO) << "std::flush" << std::flush;
+    LOG(INFO) << "std::uppercase ";
+
+    double i = 1.23e100;
+    LOG(INFO) << i;
+    LOG(INFO) << std::uppercase << i;
+
+    int j = 10;
+    LOG(INFO) << std::hex << std::nouppercase << j;
+    LOG(INFO) << std::hex << std::uppercase << j;
+
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/multiple-loggers.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/multiple-loggers.cpp
new file mode 100644
index 0000000..b0a8004
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/multiple-loggers.cpp
@@ -0,0 +1,31 @@
+ //
+ // This file is part of Easylogging++ samples
+ // Very basic sample - log using multiple loggers
+ //
+ // Revision 1.0
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(void) {
+
+    el::Loggers::addFlag(el::LoggingFlag::MultiLoggerSupport); // Enables support for multiple loggers
+
+    el::Loggers::getLogger("network"); // Register 'network' logger
+    
+    CLOG(INFO, "default", "network") << "My first log message that writes with network and default loggers";
+
+
+    // Another way of doing this may be
+    #define _LOGGER "default", "network"
+    CLOG(INFO, _LOGGER) << "This is done by _LOGGER";
+
+    // More practical way of doing this
+    #define NETWORK_LOG(LEVEL) CLOG(LEVEL, _LOGGER)
+    NETWORK_LOG(INFO) << "This is achieved by NETWORK_LOG macro";
+
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/new-logger-registration-callback.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/new-logger-registration-callback.cpp
new file mode 100644
index 0000000..b2f9ba7
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/new-logger-registration-callback.cpp
@@ -0,0 +1,38 @@
+ //
+ // This file is part of Easylogging++ samples
+ // LoggerRegistrationCallback sample
+ //
+ // Revision 1.0
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+class Handler : public el::LoggerRegistrationCallback {
+protected:
+void handle(const el::Logger* logger) {
+    // Never log anything here
+    ELPP_COUT << "(Handler) Registered new logger " << logger->id() << std::endl;
+}
+};
+
+class Handler2 : public el::LoggerRegistrationCallback {
+protected:
+void handle(const el::Logger* logger) {
+    ELPP_COUT << "(Handler2) Registered new logger " << logger->id() << std::endl;
+}
+};
+
+int main(void) {
+
+    el::Loggers::installLoggerRegistrationCallback<Handler>("handler");
+    el::Loggers::installLoggerRegistrationCallback<Handler2>("handler2");
+
+    LOG(INFO) << "Now we will register three loggers";
+
+    el::Loggers::getLogger("logger1");
+    el::Loggers::getLogger("logger2");
+    el::Loggers::getLogger("logger3");
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/no-default-log-file.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/no-default-log-file.cpp
new file mode 100644
index 0000000..fdad62c
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/no-default-log-file.cpp
@@ -0,0 +1,25 @@
+ //
+ // This file is part of Easylogging++ samples
+ //
+ // Very basic sample to configure using configuration and not default log file
+ //
+ // Revision 1.0
+ // @author mkhan3189
+ //
+
+#define ELPP_NO_DEFAULT_LOG_FILE
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(void) {
+
+    // If we log before configuration, we will end up with heaps of internal errors because ELPP_NO_DEFAULT_LOG_FILE is defined before include
+    el::Configurations confFromFile("../default-logger.conf");
+
+    el::Loggers::reconfigureAllLoggers(confFromFile); 
+     
+    LOG(INFO) << "Logging after configured!";
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/occasional.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/occasional.cpp
new file mode 100644
index 0000000..b96c512
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/occasional.cpp
@@ -0,0 +1,27 @@
+ // This file is part of Easylogging++ samples
+ //
+ // Sample to demonstrate using occasionals and other hit counts based logging
+ //
+ // Revision 1.2
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(int argc, char** argv) {
+  START_EASYLOGGINGPP(argc, argv);
+
+  for (int i = 1;i < 1000; ++i) {
+     LOG_EVERY_N(20, INFO) << "LOG_EVERY_N i = " << i;
+     LOG_EVERY_N(100, INFO) << "LOG_EVERY_N Current position is " << ELPP_COUNTER_POS;
+  }
+  for (int i = 1;i <= 10; ++i) {
+     LOG_AFTER_N(6, INFO) << "LOG_AFTER_N i = " << i;
+  }
+  for (int i = 1;i < 100; ++i) {
+     LOG_N_TIMES(50, INFO) << "LOG_N_TIMES i = " << i;
+  }
+  return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/plog.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/plog.cpp
new file mode 100644
index 0000000..b1a43ad
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/plog.cpp
@@ -0,0 +1,25 @@
+ //
+ // This file is part of Easylogging++ samples
+ //
+ // Log using PLOG and family. PLOG is same as perror() with c++-styled stream
+ //
+ // Revision 1.1
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(void) {
+    el::Loggers::addFlag(el::LoggingFlag::DisableApplicationAbortOnFatalLog);
+    std::fstream f("a file that does not exist", std::ifstream::in);    
+    PLOG(INFO) << "A message with plog";
+    PLOG_IF(true, INFO) << "A message with plog";
+    PLOG_IF(false, INFO) << "A message with plog";
+    PCHECK(true) << "This is good";
+    LOG(INFO) << "This is normal info log after plog";
+    DPCHECK(true) << "Wow";
+    DPCHECK(false) << "Wow failed";
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/post-performance-tracking-handler.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/post-performance-tracking-handler.cpp
new file mode 100644
index 0000000..6f7450b
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/post-performance-tracking-handler.cpp
@@ -0,0 +1,46 @@
+ //
+ // This file is part of Easylogging++ samples
+ // PerformanceTrackingCallback sample
+ //
+ // Revision 1.0
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+class Handler : public el::PerformanceTrackingCallback {
+protected:
+void handle(const el::PerformanceTrackingData* data) {
+    // NEVER DO PERFORMANCE TRACKING FROM HANDLER
+    // TIMED_SCOPE(handBlock, "handerBlock");
+    
+    // ELPP_COUT is cout when not using unicode otherwise wcout
+    ELPP_COUT << "I am from handler: " << data->blockName()->c_str() << " in " << *data->formattedTimeTaken();
+    if (data->dataType() == el::PerformanceTrackingData::DataType::Checkpoint) {
+        ELPP_COUT << " [CHECKPOINT ONLY] ";
+    }
+    ELPP_COUT << std::endl;
+    LOG(INFO) << "You can even log from here!";
+}
+};
+
+int main(void) {
+
+    TIMED_SCOPE(mainBlock, "main");
+
+    el::Helpers::installPerformanceTrackingCallback<Handler>("handler");
+
+    TIMED_BLOCK(obj, "my-block") {
+        for (int i = 0; i <= 500; ++i) {
+            // Spend time
+            for (int j = 0; j < 10000; ++j) { std::string tmp; }
+            if (i % 100 == 0) {
+                obj.timer->checkpoint(std::string(std::string("checkpoint at ") + std::to_string(static_cast<unsigned long long>(i))).c_str());
+            }
+        }
+    } 
+    LOG(INFO) << "By now, you should get performance result of above scope";
+
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/pthread.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/pthread.cpp
new file mode 100644
index 0000000..5a44a2e
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/pthread.cpp
@@ -0,0 +1,153 @@
+//
+// This file is part of Easylogging++ samples
+//
+// Demonstration of multithreaded application using pthread
+// 
+// Compile this program using (if using gcc-c++ or intel or clang++):
+//     [icpc | g++ | clang++] ./pthread.cpp -o bin/./pthread.cpp.bin -DELPP_THREAD_SAFE -std=c++0x -pthread -Wall -Wextra
+// 
+// Revision: 1.1
+// @author mkhan3189
+//
+
+#include <pthread.h>
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+class MyHandler : public el::LogDispatchCallback {
+public:
+    void handle(const el::LogDispatchData*) {
+        std::cout << "Test MyHandler " << std::endl;
+    }
+};
+
+
+struct Args {
+  const char* thrId;
+  el::Logger* logger;
+}args;
+
+void* write2(void* args){
+  struct Args* a = (struct Args*)args;
+  
+  char* threadId = (char*)a->thrId;
+  el::Logger* logger = (el::Logger*)a->logger;
+  CLOG(INFO, "default", "network") << "Triggering network log from default and network";
+
+  LOG(INFO) << "Writing from different function using macro [Thread #" << threadId << "]";
+
+  logger->info("Info log from [Thread #%v]", threadId);
+  logger->info("Info log");
+  logger->verbose(2, "Verbose test [Thread #%v]", threadId);
+  logger->verbose(2, "Verbose test");
+
+
+  CLOG(INFO, "default", "network") << "Triggering network log from default and network";
+  return NULL;
+}
+
+void *write(void* thrId){
+  char* threadId = (char*)thrId;
+  // Following line will be logged with every thread
+  LOG(INFO) << "This standard log is written by [Thread #" << threadId << "]";
+  // Following line will be logged with every thread only when --v=2 argument 
+  // is provided, i.e, ./bin/multithread_test.cpp.bin --v=2
+  VLOG(2) << "This is verbose level 2 logging from [Thread #" << threadId << "]";
+
+  // Following line will be logged only once from second running thread (which every runs second into 
+  // this line because of interval 2)
+  LOG_EVERY_N(2, WARNING) << "This will be logged only once from thread who every reaches this line first. Currently running from [Thread #" << threadId << "]";
+
+  for (int i = 1; i <= 10; ++i) {
+     VLOG_IF(true, 2) << "Verbose condition [Thread #" << threadId << "]";
+     VLOG_EVERY_N(2, 3) << "Verbose level 3 log every 4th time. This is at " << i << " from [Thread #" << threadId << "]";
+  }
+
+  // Following line will be logged once with every thread because of interval 1 
+  LOG_EVERY_N(1, INFO) << "This interval log will be logged with every thread, this one is from [Thread #" << threadId << "]";
+
+  LOG_IF(strcmp(threadId, "2") == 0, INFO) << "This log is only for thread 2 and is ran by [Thread #" << threadId << "]";
+  
+  // Register 5 vague loggers
+  for (int i = 1; i <= 5; ++i) {
+     std::stringstream ss;
+     ss << "logger" << i;
+     el::Logger* logger = el::Loggers::getLogger(ss.str());
+     LOG(INFO) << "Registered logger [" << *logger << "] [Thread #" << threadId << "]";
+     CLOG(INFO, "default", "network") << "Triggering network log from default and network";
+  }
+  CLOG(INFO, "logger1") << "Logging using new logger [Thread #" << threadId << "]";
+  CLOG(INFO, "no-logger") << "THIS SHOULD SAY LOGGER NOT REGISTERED YET [Thread #" << threadId << "]"; // << -- NOTE THIS!
+  CLOG(INFO, "default", "network") << "Triggering network log from default and network";
+
+  el::Logger* logger = el::Loggers::getLogger("default");
+  logger->info("Info log from [Thread #%v]", threadId);
+
+  // Check for log counters positions
+  for (int i = 1; i <= 50; ++i) {
+     LOG_EVERY_N(2, INFO) << "Counter pos: " << ELPP_COUNTER_POS << " [Thread #" << threadId << "]";
+  }
+  LOG_EVERY_N(2, INFO) << "Counter pos: " << ELPP_COUNTER_POS << " [Thread #" << threadId << "]";
+  return NULL;
+}
+
+// If you wish you can define your own way to get thread ID
+const char* getThreadId_CustomVersion(const el::LogMessage*) {
+    std::stringstream ss;
+    ss << pthread_self();
+    return ss.str().c_str();
+}
+
+int main(int argc, char** argv)
+{
+     START_EASYLOGGINGPP(argc, argv);
+
+      el::Helpers::installLogDispatchCallback<MyHandler>("MyHandler");
+
+     // Your thread ID specification
+     el::CustomFormatSpecifier myThreadIdSpecifier("%mythreadId", getThreadId_CustomVersion);
+     el::Helpers::installCustomFormatSpecifier(myThreadIdSpecifier);
+
+     el::Loggers::addFlag(el::LoggingFlag::MultiLoggerSupport);
+
+     // Note your %mythreadId or built-in, both are logged
+     el::Loggers::reconfigureAllLoggers(el::ConfigurationType::Format, "%datetime %level (%thread | %mythreadId) [%logger] [%func] [%loc] %msg");
+     el::Loggers::reconfigureAllLoggers(el::Level::Verbose, el::ConfigurationType::Format, "%datetime %level-%vlevel (%thread | %mythreadId) [%logger] [%func] [%loc] %msg");
+     el::Loggers::getLogger("network");
+
+     pthread_t thread1, thread2, thread3, thread4;
+
+     // Create independent threads each of which will execute function 
+     pthread_create( &thread1, NULL, write, (void*)"1");
+     pthread_create( &thread2, NULL, write, (void*)"2");
+     pthread_create( &thread3, NULL, write, (void*)"3");
+     
+     el::Logger* logger = el::Loggers::getLogger("default");
+     args.thrId = "4";
+     args.logger = logger;
+     pthread_create( &thread4, NULL, write2, (void*)&args);
+
+     pthread_join(thread1, NULL);
+     pthread_join(thread2, NULL); 
+     pthread_join(thread3, NULL); 
+     pthread_join(thread4, NULL); 
+
+#if 0 // Change this to 1 for some serious multiple threads
+    int i = 5; // Last one we created was 4 so we dont want to confuse
+    const int max = i + 500;
+    for (; i <= max; ++i) {
+        pthread_t thread;
+        std::string s = std::to_string(static_cast<long long>(i));
+        if (i % 2 == 0)
+            pthread_create( &thread, NULL, write, (void*)s.c_str());
+        else {
+            args.thrId = s.c_str();
+            args.logger = logger;
+            pthread_create( &thread, NULL, write2, (void*)&args);
+        }
+        pthread_join(thread, NULL); 
+    }
+#endif
+
+    exit(0);
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/roll-out.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/roll-out.cpp
new file mode 100644
index 0000000..66b2ef8
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/roll-out.cpp
@@ -0,0 +1,38 @@
+ //
+ // This file is part of Easylogging++ samples 
+ //
+ // Demonstration on possible usage of pre-rollout handler
+ // 
+ // Revision: 1.1
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+static unsigned int idx;
+
+void rolloutHandler(const char* filename, std::size_t size) {
+   // SHOULD NOT LOG ANYTHING HERE BECAUSE LOG FILE IS CLOSED!
+   std::cout << "************** Rolling out [" << filename << "] because it reached [" << size << " bytes]" << std::endl;
+
+   // BACK IT UP
+   std::stringstream ss;
+   ss << "mv " << filename << " bin/log-backup-" << ++idx;
+   system(ss.str().c_str());
+}
+
+int main(int, char**) {
+   idx = 0;
+   el::Loggers::addFlag(el::LoggingFlag::StrictLogFileSizeCheck);
+   el::Loggers::reconfigureAllLoggers(el::ConfigurationType::Filename, "/tmp/logs/max-size.log");
+   el::Loggers::reconfigureAllLoggers(el::ConfigurationType::MaxLogFileSize, "100");
+   el::Helpers::installPreRollOutCallback(rolloutHandler);
+
+   for (int i = 0; i < 100; ++i)
+       LOG(INFO) << "Test";
+       
+   el::Helpers::uninstallPreRollOutCallback();
+   return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/run.sh b/vendor/github.com/muflihun/easyloggingpp/samples/STL/run.sh
new file mode 100755
index 0000000..a04efcc
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/run.sh
@@ -0,0 +1,4 @@
+echo "Running '$1'..."
+./$1 -v
+echo "Finished '$1'"
+echo
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/run_all.sh b/vendor/github.com/muflihun/easyloggingpp/samples/STL/run_all.sh
new file mode 100755
index 0000000..282b11a
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/run_all.sh
@@ -0,0 +1,3 @@
+## Runs all the build binaries from bin/ folder
+
+find bin/ -name '*.cpp.bin' -exec sh ./run.sh ./{} \;
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/.gitignore b/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/.gitignore
new file mode 100644
index 0000000..3a2e1d4
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/.gitignore
@@ -0,0 +1,10 @@
+lib/libmyLib.so
+lib/easylogging++.o
+lib/mylib.o
+lib/myLib.a
+myLib.a
+libmyLib.so
+logs/*
+myapp
+myapp.dSYM/*
+
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/README.md b/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/README.md
new file mode 100644
index 0000000..b3188f5
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/README.md
@@ -0,0 +1,15 @@
+## A Simple example of shared and static compilations
+
+```
+.
+├── compile_shared.sh
+├── compile_static.sh
+├── lib
+│   ├── include
+│   │   ├── easylogging++.h
+│   │   └── mylib.hpp
+│   └── mylib.cpp
+└── myapp.cpp
+
+2 directories, 6 files
+```
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/compile_shared.sh b/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/compile_shared.sh
new file mode 100755
index 0000000..735062e
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/compile_shared.sh
@@ -0,0 +1,13 @@
+rm -rf libmyLib.so lib/libmyLib.so lib/mylib.o lib/myLib.a myLib.a myapp logs ## Clean
+
+compiler=g++
+standard=c++0x ## If this does not work try c++11 (depends on your compiler)
+macros="-DELPP_THREAD_SAFE -DELPP_FEATURE_CRASH_LOG"  ## Macros for library
+
+cd lib/
+$compiler mylib.cpp ../../../../src/easylogging++.cc --std=$standard -pipe -fPIC -g -O0 $macros  -Iinclude  -c
+$compiler -fPIC -g  -shared -o libmyLib.so mylib.o easylogging++.o
+
+cp libmyLib.so ..
+cd ..
+$compiler -g -std=$standard -fPIC -pipe  -L lib myapp.cpp ../../../src/easylogging++.cc -Ilib/include -lmyLib  -o myapp
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/compile_static.sh b/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/compile_static.sh
new file mode 100755
index 0000000..324572a
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/compile_static.sh
@@ -0,0 +1,12 @@
+rm -rf libmyLib.so lib/libmyLib.so lib/mylib.o lib/myLib.a myLib.a myapp logs ## Clean
+
+compiler=g++
+standard=c++0x ## If this does not work try c++11 (depends on your compiler)
+macros="-DELPP_THREAD_SAFE -DELPP_FEATURE_CRASH_LOG"  ## Macros for library
+
+cd lib/
+$compiler --std=$standard -pipe -fPIC -g -O0 $macros -Iinclude  -c mylib.cpp ../../../../src/easylogging++.cc
+ar rvs myLib.a mylib.o easylogging++.o
+cp myLib.a ..
+cd ..
+$compiler -g -std=$standard -o myapp myapp.cpp ../../../src/easylogging++.cc -Ilib/include myLib.a
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/easylogging++.h b/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/easylogging++.h
new file mode 100644
index 0000000..afc17ac
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/easylogging++.h
@@ -0,0 +1,6 @@
+// Header for sample that sub-includes original header from src/ folder
+#ifndef EASYLOGGING_FOR_SAMPLES_H
+#define EASYLOGGING_FOR_SAMPLES_H
+#   include "../../../src/easylogging++.h"
+#endif // EASYLOGGING_FOR_SAMPLES_H
+
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/lib/include/easylogging++.h b/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/lib/include/easylogging++.h
new file mode 100644
index 0000000..76af28c
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/lib/include/easylogging++.h
@@ -0,0 +1,6 @@
+// Header for sample that sub-includes original header from src/ folder
+#ifndef EASYLOGGING_FOR_SAMPLES_H
+#define EASYLOGGING_FOR_SAMPLES_H
+#   include "../../../../../src/easylogging++.h"
+#endif // EASYLOGGING_FOR_SAMPLES_H
+
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/lib/include/mylib.hpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/lib/include/mylib.hpp
new file mode 100644
index 0000000..85c35f5
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/lib/include/mylib.hpp
@@ -0,0 +1,9 @@
+//#include "easylogging++.h"
+
+class MyLib {
+public:
+    MyLib();
+    MyLib(int, char**);
+    ~MyLib();
+    void event(int a);
+};
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/lib/mylib.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/lib/mylib.cpp
new file mode 100644
index 0000000..d1d01b1
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/lib/mylib.cpp
@@ -0,0 +1,24 @@
+#include "mylib.hpp"
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+MyLib::MyLib() {
+    LOG(INFO) << "---MyLib Constructor () ---";
+}
+
+MyLib::MyLib(int argc, char** argv) {
+    START_EASYLOGGINGPP(argc, argv);
+    LOG(INFO) << "---MyLib Constructor(int, char**) ---";
+}
+
+MyLib::~MyLib() {
+    LOG(INFO) << "---MyLib Destructor---";
+}
+
+
+void MyLib::event(int a) {
+    VLOG(1) << "MyLib::event start";
+    LOG(INFO) << "Processing event [" << a << "]";
+    VLOG(1) << "MyLib::event end";
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/myapp.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/myapp.cpp
new file mode 100644
index 0000000..d547cc0
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/shared-static-libs/myapp.cpp
@@ -0,0 +1,17 @@
+#include <mylib.hpp>
+#include "easylogging++.h"
+INITIALIZE_EASYLOGGINGPP
+int main(int argc, char** argv) {
+    int result = 0;
+    LOG(INFO) << "Log from app";
+    //
+    // You can choose MyLib() constructor
+    // but be aware this will cause vlog to not work because Easylogging++
+    // does not know verbose logging level
+    //
+    // For your peace of mind, you may pass on const_cast<const char**>(argv) instead
+    //
+    MyLib lib(argc, argv);
+    lib.event(1);
+    return result;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/smart-pointer-null-check.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/smart-pointer-null-check.cpp
new file mode 100644
index 0000000..5777a27
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/smart-pointer-null-check.cpp
@@ -0,0 +1,22 @@
+ //
+ // This file is part of Easylogging++ samples
+ // Smart pointer null check
+ //
+ // Revision 1.0
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+#include <memory>
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(void) {
+    std::unique_ptr<std::string> test2(new std::string);
+    CHECK_NOTNULL(test2) << "And I didn't expect this to be null anyway";
+
+    std::unique_ptr<int> test3;
+    CHECK_NOTNULL(test3) << "It should crash here";
+    
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/std-array.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/std-array.cpp
new file mode 100644
index 0000000..04d3b50
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/std-array.cpp
@@ -0,0 +1,27 @@
+ //
+ // This file is part of Easylogging++ samples
+ // Demonstration of STL array (std::array) logging, this requires ELPP_LOG_STD_ARRAY macro (recommended to define it in Makefile)
+ //
+ // Revision 1.1
+ // @author mkhan3189
+ //
+
+#define ELPP_LOG_STD_ARRAY
+#include "easylogging++.h"
+#include <array>
+
+INITIALIZE_EASYLOGGINGPP
+
+int main (void) {
+
+  std::array<int, 5> arr;
+  arr[0] = 1;
+  arr[1] = 2;
+  arr[2] = 3;
+  arr[3] = 4;
+  arr[4] = 5;
+
+  LOG(INFO) << arr;
+
+  return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/syslog.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/syslog.cpp
new file mode 100644
index 0000000..34bf382
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/syslog.cpp
@@ -0,0 +1,25 @@
+ //
+ // This file is part of Easylogging++ samples
+ // Syslog sample
+ //
+ // Revision 1.0
+ // @author mkhan3189
+ //
+
+#define ELPP_SYSLOG
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(void) {
+   
+    ELPP_INITIALIZE_SYSLOG("syslog_sample", LOG_PID | LOG_CONS | LOG_PERROR, LOG_USER);
+ 
+    SYSLOG(INFO) << "My first easylogging++ syslog message";
+
+    SYSLOG_IF(true, INFO) << "This is conditional info syslog";
+    for (int i = 1; i <= 10; ++i)
+        SYSLOG_EVERY_N(2, INFO) << "This is [" << i << "] iter of SYSLOG_EVERY_N";
+
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/thread-names.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/thread-names.cpp
new file mode 100644
index 0000000..9c21563
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/thread-names.cpp
@@ -0,0 +1,45 @@
+//
+// This file is part of Easylogging++ samples
+//
+// Demo for thread names
+//
+// Compile: g++ -std=c++11 -Wall -Werror thread-names.cpp -lpthread -o thread-names -DELPP_THREAD_SAFE
+//
+// Revision 1.0
+// @author mkhan3189
+//
+
+#include <thread>
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(int,char**){
+    el::Loggers::reconfigureAllLoggers(el::ConfigurationType::Format, "%datetime [%thread_name] %msg");
+    LOG(INFO)<<"The program has started! (no thread name)";
+    el::Helpers::setThreadName("main-thread");
+    
+    std::thread thread1([](){
+		LOG(INFO) << "Setting thread name for thread1";
+        el::Helpers::setThreadName("thread1");
+		LOG(INFO) << "Done setting thread name for thread1";
+        for (int i = 0; i < 100; ++i) {
+            LOG(INFO) << "Current i = " << i << " from thread1";
+        }
+    });
+
+    std::thread thread2([](){
+		LOG(INFO) << "Setting thread name for thread2";
+        el::Helpers::setThreadName("thread2");
+		LOG(INFO) << "Done setting thread name for thread2";
+        for (int i = 0; i < 100; ++i) {
+            LOG(INFO) << "Current i = " << i << " from thread2";
+        }
+    });
+    
+    thread1.join();
+    thread2.join();
+    
+    LOG(INFO) << "Shutting down.";
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/timed-block.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/timed-block.cpp
new file mode 100644
index 0000000..ff61861
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/timed-block.cpp
@@ -0,0 +1,29 @@
+ //
+ // This file is part of Easylogging++ samples
+ // TIMED_BLOCK sample
+ //
+ // Revision 1.1
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(int argc, char** argv) {
+
+    START_EASYLOGGINGPP(argc, argv);
+   
+    TIMED_BLOCK(t, "my-block") {
+        for (long i = 0; i <= 300; ++i) {
+            LOG(INFO) << "This is for-block 1";
+        }
+        t.timer->checkpoint("checkpoint-1"); // Note t.timer to access el::base::Trackable
+        for (int i = 0; i <= 200; ++i) {
+            LOG(INFO) << "This is for-block 2";
+        }
+    }
+    LOG(INFO) << "You should get performance result of above scope";
+
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/timed-scope.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/timed-scope.cpp
new file mode 100644
index 0000000..5127199
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/timed-scope.cpp
@@ -0,0 +1,24 @@
+ //
+ // This file is part of Easylogging++ samples
+ // TIMED_SCOPE sample
+ //
+ // Revision 1.0
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(void) {
+
+    {
+        TIMED_SCOPE(timer, "my-block");
+        for (int i = 0; i <= 500; ++i) {
+            LOG(INFO) << "This is iter " << i;
+        }
+    } 
+    LOG(INFO) << "By now, you should get performance result of above scope";
+
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/verbose.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/verbose.cpp
new file mode 100644
index 0000000..fdbb0c3
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/verbose.cpp
@@ -0,0 +1,25 @@
+ //
+ // This file is part of EasyLogging++ samples
+ // Demonstration of verbose logging
+ //
+ // Revision 1.0
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(int argc, char** argv) {
+  START_EASYLOGGINGPP(argc, argv);
+  LOG(INFO) << "This is demo for verbose logs";
+  VLOG(1) << "This will be printed when program is started using argument --v=1";
+  VLOG(2) << "This will be printed when program is started using argument --v=2";
+  VLOG(1) << "This will be printed when program is started using argument --v=1";
+  VLOG_IF(true, 1) << "Always verbose for level 1";
+
+  VLOG_EVERY_N(1, 3) << "Verbose every N";
+
+  VLOG(4) << "Command line arguments provided " << *el::Helpers::commandLineArgs();
+  return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/STL/very-basic.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/STL/very-basic.cpp
new file mode 100644
index 0000000..06b3dcc
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/STL/very-basic.cpp
@@ -0,0 +1,21 @@
+ //
+ // This file is part of Easylogging++ samples
+ // Very basic sample
+ //
+ // Revision 1.2
+ // @author mkhan3189
+ //
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(void) {
+    
+    LOG(INFO) << "My first ultimate log message";
+
+    LOG(INFO) << "This" << "is" << "log" << "without" << "spaces";
+    el::Loggers::addFlag(el::LoggingFlag::AutoSpacing);
+    LOG(INFO) << "This" << "is" << "log" << "with" << "spaces";
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32/.vs/VCPP2015_Win32/v14/.suo b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32/.vs/VCPP2015_Win32/v14/.suo
new file mode 100644
index 0000000..450c0bc
Binary files /dev/null and b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32/.vs/VCPP2015_Win32/v14/.suo differ
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32/VCPP2015_Win32.sln b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32/VCPP2015_Win32.sln
new file mode 100644
index 0000000..cc37191
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32/VCPP2015_Win32.sln
@@ -0,0 +1,28 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VCPP2015_Win32", "VCPP2015_Win32\VCPP2015_Win32.vcxproj", "{4C0F17F0-D696-446B-8471-1D94E75C63DC}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|x64 = Debug|x64
+		Debug|x86 = Debug|x86
+		Release|x64 = Release|x64
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{4C0F17F0-D696-446B-8471-1D94E75C63DC}.Debug|x64.ActiveCfg = Debug|x64
+		{4C0F17F0-D696-446B-8471-1D94E75C63DC}.Debug|x64.Build.0 = Debug|x64
+		{4C0F17F0-D696-446B-8471-1D94E75C63DC}.Debug|x86.ActiveCfg = Debug|Win32
+		{4C0F17F0-D696-446B-8471-1D94E75C63DC}.Debug|x86.Build.0 = Debug|Win32
+		{4C0F17F0-D696-446B-8471-1D94E75C63DC}.Release|x64.ActiveCfg = Release|x64
+		{4C0F17F0-D696-446B-8471-1D94E75C63DC}.Release|x64.Build.0 = Release|x64
+		{4C0F17F0-D696-446B-8471-1D94E75C63DC}.Release|x86.ActiveCfg = Release|Win32
+		{4C0F17F0-D696-446B-8471-1D94E75C63DC}.Release|x86.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32/VCPP2015_Win32/VCPP2015_Win32.vcxproj b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32/VCPP2015_Win32/VCPP2015_Win32.vcxproj
new file mode 100644
index 0000000..f4d92d9
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32/VCPP2015_Win32/VCPP2015_Win32.vcxproj
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{4C0F17F0-D696-446B-8471-1D94E75C63DC}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>VCPP2015_Win32</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;ELPP_FEATURE_PERFORMANCE_TRACKING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="easylogging++.cpp" />
+    <ClCompile Include="main.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="easylogging++.h" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32/VCPP2015_Win32/VCPP2015_Win32.vcxproj.filters b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32/VCPP2015_Win32/VCPP2015_Win32.vcxproj.filters
new file mode 100644
index 0000000..fd22c75
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32/VCPP2015_Win32/VCPP2015_Win32.vcxproj.filters
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="easylogging++.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="easylogging++.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32/VCPP2015_Win32/VCPP2015_Win32.vcxproj.user b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32/VCPP2015_Win32/VCPP2015_Win32.vcxproj.user
new file mode 100644
index 0000000..6fb136b
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32/VCPP2015_Win32/VCPP2015_Win32.vcxproj.user
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup />
+</Project>
\ No newline at end of file
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32/VCPP2015_Win32/easylogging++.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32/VCPP2015_Win32/easylogging++.cpp
new file mode 100644
index 0000000..877c276
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32/VCPP2015_Win32/easylogging++.cpp
@@ -0,0 +1 @@
+#include "../../../../src/easylogging++.cc"
\ No newline at end of file
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32/VCPP2015_Win32/easylogging++.h b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32/VCPP2015_Win32/easylogging++.h
new file mode 100644
index 0000000..5c9698c
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32/VCPP2015_Win32/easylogging++.h
@@ -0,0 +1,5 @@
+// Header for sample that sub-includes original header from src/ folder
+#ifndef EASYLOGGING_FOR_SAMPLES_H
+#define EASYLOGGING_FOR_SAMPLES_H
+#include "../../../../src/easylogging++.h"
+#endif // EASYLOGGING_FOR_SAMPLES_H
\ No newline at end of file
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32/VCPP2015_Win32/main.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32/VCPP2015_Win32/main.cpp
new file mode 100644
index 0000000..d226631
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32/VCPP2015_Win32/main.cpp
@@ -0,0 +1,29 @@
+/**
+* This file is part of Easylogging++ samples
+* Demonstration of simple VC++ project.
+*
+* PLEASE NOTE: We have ELPP_FEATURE_PERFORMANCE_TRACKING preprocessor defined in project settings
+* Otherwise we will get linker error
+*
+* Revision: 1.1
+* @author mkhan3189
+*/
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+TIMED_SCOPE(appTimer, "myapplication");
+
+int main() {
+	
+	LOG(INFO) << "Starting...";
+	el::Loggers::removeFlag(el::LoggingFlag::AllowVerboseIfModuleNotSpecified);
+
+	{
+		TIMED_SCOPE(tmr, "write-simple");
+		LOG(INFO) << "Test " << __FILE__;
+	}
+
+	VLOG(3) << "Test verbose";
+	system("pause");
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32_Multithreaded/.vs/VCPP2015_Win32/v14/.suo b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32_Multithreaded/.vs/VCPP2015_Win32/v14/.suo
new file mode 100644
index 0000000..bbd4c98
Binary files /dev/null and b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32_Multithreaded/.vs/VCPP2015_Win32/v14/.suo differ
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32_Multithreaded/VCPP2015_Win32.sln b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32_Multithreaded/VCPP2015_Win32.sln
new file mode 100644
index 0000000..cc37191
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32_Multithreaded/VCPP2015_Win32.sln
@@ -0,0 +1,28 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VCPP2015_Win32", "VCPP2015_Win32\VCPP2015_Win32.vcxproj", "{4C0F17F0-D696-446B-8471-1D94E75C63DC}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|x64 = Debug|x64
+		Debug|x86 = Debug|x86
+		Release|x64 = Release|x64
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{4C0F17F0-D696-446B-8471-1D94E75C63DC}.Debug|x64.ActiveCfg = Debug|x64
+		{4C0F17F0-D696-446B-8471-1D94E75C63DC}.Debug|x64.Build.0 = Debug|x64
+		{4C0F17F0-D696-446B-8471-1D94E75C63DC}.Debug|x86.ActiveCfg = Debug|Win32
+		{4C0F17F0-D696-446B-8471-1D94E75C63DC}.Debug|x86.Build.0 = Debug|Win32
+		{4C0F17F0-D696-446B-8471-1D94E75C63DC}.Release|x64.ActiveCfg = Release|x64
+		{4C0F17F0-D696-446B-8471-1D94E75C63DC}.Release|x64.Build.0 = Release|x64
+		{4C0F17F0-D696-446B-8471-1D94E75C63DC}.Release|x86.ActiveCfg = Release|Win32
+		{4C0F17F0-D696-446B-8471-1D94E75C63DC}.Release|x86.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32_Multithreaded/VCPP2015_Win32/VCPP2015_Win32.vcxproj b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32_Multithreaded/VCPP2015_Win32/VCPP2015_Win32.vcxproj
new file mode 100644
index 0000000..b0a13ba
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32_Multithreaded/VCPP2015_Win32/VCPP2015_Win32.vcxproj
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{4C0F17F0-D696-446B-8471-1D94E75C63DC}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>VCPP2015_Win32</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="easylogging++.cc" />
+    <ClCompile Include="main.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="easylogging++.h" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32_Multithreaded/VCPP2015_Win32/VCPP2015_Win32.vcxproj.filters b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32_Multithreaded/VCPP2015_Win32/VCPP2015_Win32.vcxproj.filters
new file mode 100644
index 0000000..ee974c2
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32_Multithreaded/VCPP2015_Win32/VCPP2015_Win32.vcxproj.filters
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="easylogging++.cc">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="easylogging++.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32_Multithreaded/VCPP2015_Win32/easylogging++.cc b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32_Multithreaded/VCPP2015_Win32/easylogging++.cc
new file mode 100644
index 0000000..877c276
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32_Multithreaded/VCPP2015_Win32/easylogging++.cc
@@ -0,0 +1 @@
+#include "../../../../src/easylogging++.cc"
\ No newline at end of file
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32_Multithreaded/VCPP2015_Win32/easylogging++.h b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32_Multithreaded/VCPP2015_Win32/easylogging++.h
new file mode 100644
index 0000000..5c9698c
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32_Multithreaded/VCPP2015_Win32/easylogging++.h
@@ -0,0 +1,5 @@
+// Header for sample that sub-includes original header from src/ folder
+#ifndef EASYLOGGING_FOR_SAMPLES_H
+#define EASYLOGGING_FOR_SAMPLES_H
+#include "../../../../src/easylogging++.h"
+#endif // EASYLOGGING_FOR_SAMPLES_H
\ No newline at end of file
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32_Multithreaded/VCPP2015_Win32/main.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32_Multithreaded/VCPP2015_Win32/main.cpp
new file mode 100644
index 0000000..c8f1bb5
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/VC++/VCPP2015_Win32_Multithreaded/VCPP2015_Win32/main.cpp
@@ -0,0 +1,63 @@
+/**
+* This file is part of Easylogging++ samples
+* Demonstration of VC++ thread
+* Base code taken from: http://msdn.microsoft.com/en-us/library/12a04hfd(v=vs.80).aspx
+*
+* Revision: 1.2
+* @author mkhan3189
+*/
+
+#define ELPP_STL_LOGGING
+#define ELPP_THREAD_SAFE
+
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+using namespace std;
+
+volatile bool Sentinel = true;
+int CriticalData = 0;
+
+unsigned ThreadFunc1(void* pArguments) {
+	while (Sentinel)
+		Sleep(0);   // volatile spin lock
+					// CriticalData load guaranteed after every load of Sentinel
+	LOG(INFO) << "ThreadFunc1 log - Critical Data = " << CriticalData;
+
+	return 0;
+}
+
+unsigned  ThreadFunc2(void* pArguments) {
+	Sleep(2000);
+	CriticalData++;   // guaranteed to occur before write to Sentinel
+	Sentinel = false; // exit critical section
+	LOG(DEBUG) << "test";
+	return 0;
+}
+
+int main() {
+	HANDLE hThread1, hThread2;
+	DWORD retCode;
+
+	hThread1 = CreateThread(nullptr, 0, (LPTHREAD_START_ROUTINE)&ThreadFunc1, nullptr, 0, nullptr);
+	hThread2 = CreateThread(nullptr, 0, (LPTHREAD_START_ROUTINE)&ThreadFunc2, nullptr, 0, nullptr);
+
+	if (hThread1 == nullptr || hThread2 == nullptr) {
+		LOG(ERROR) << "CreateThread failed - Could not create thread";
+		return 1;
+	}
+
+	retCode = WaitForSingleObject(hThread1, 3000);
+
+	CloseHandle(hThread1);
+	CloseHandle(hThread2);
+
+	if (retCode == WAIT_OBJECT_0 && CriticalData == 1)
+		LOG(INFO) << "Succeeded";
+	else
+		LOG(ERROR) << "Failed";
+
+	system("pause");
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/async/.gitignore b/vendor/github.com/muflihun/easyloggingpp/samples/async/.gitignore
new file mode 100644
index 0000000..dcbf740
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/async/.gitignore
@@ -0,0 +1,2 @@
+prog
+logs/*
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/async/build.sh b/vendor/github.com/muflihun/easyloggingpp/samples/async/build.sh
new file mode 100755
index 0000000..651b741
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/async/build.sh
@@ -0,0 +1,8 @@
+compiler=$1
+macros=""
+macros="$macros -DELPP_FEATURE_ALL"
+if [ "$compiler" = "icpc" ];then
+    macros="$macros -DELPP_NO_SLEEP_FOR"
+fi
+echo "$compiler prog.cpp easylogging++.cc -DELPP_EXPERIMENTAL_ASYNC $macros -std=c++11 -lpthread -o prog"
+$compiler prog.cpp easylogging++.cc -DELPP_EXPERIMENTAL_ASYNC $macros -std=c++11 -lpthread -o prog
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/async/easylogging++.cc b/vendor/github.com/muflihun/easyloggingpp/samples/async/easylogging++.cc
new file mode 100644
index 0000000..2386848
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/async/easylogging++.cc
@@ -0,0 +1 @@
+#include "../../src/easylogging++.cc"
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/async/easylogging++.h b/vendor/github.com/muflihun/easyloggingpp/samples/async/easylogging++.h
new file mode 100644
index 0000000..a2c8ee8
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/async/easylogging++.h
@@ -0,0 +1,5 @@
+// Header for sample that sub-includes original header from src/ folder
+#ifndef EASYLOGGING_FOR_SAMPLES_H
+#define EASYLOGGING_FOR_SAMPLES_H
+#include "../../src/easylogging++.h"
+#endif // EASYLOGGING_FOR_SAMPLES_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/async/mymath.h b/vendor/github.com/muflihun/easyloggingpp/samples/async/mymath.h
new file mode 100644
index 0000000..e45e3c3
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/async/mymath.h
@@ -0,0 +1,9 @@
+#include "easylogging++.h"
+
+class MyMath {
+public:
+    static int sum(int a, int b) {
+        LOG(INFO) << "Adding " << a << " and " << b;
+        return a + b;
+    }
+};
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/async/prog.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/async/prog.cpp
new file mode 100644
index 0000000..6de1fc0
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/async/prog.cpp
@@ -0,0 +1,28 @@
+
+#include "easylogging++.h"
+#include "mymath.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+TIMED_SCOPE(benchmark, "benchmark-program");
+
+int main(int argc, char *argv[])
+{
+    // ELPP_INITIALIZE_SYSLOG("my_proc", LOG_PID | LOG_CONS | LOG_PERROR, LOG_USER);
+    el::Loggers::reconfigureAllLoggers(el::ConfigurationType::ToStandardOutput, "false");
+    TIMED_BLOCK(loggingPerformance, "benchmark-block") {
+        el::base::SubsecondPrecision ssPrec(3);
+        std::cout << "Starting program " << el::base::utils::DateTime::getDateTime("%h:%m:%s", &ssPrec) << std::endl;
+        int MAX_LOOP = 1000000;
+        for (int i = 0; i <= MAX_LOOP; ++i) {
+            LOG(INFO) << "Log message " << i;
+        }
+        int result = MyMath::sum(1, 2);
+        result = MyMath::sum(1, 3);
+
+        std::cout << "Finished program - cleaning! " << el::base::utils::DateTime::getDateTime("%h:%m:%s", &ssPrec) << std::endl;
+    }
+    // SYSLOG(INFO) << "This is syslog - read it from /var/log/syslog";
+
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/boost/.gitignore b/vendor/github.com/muflihun/easyloggingpp/samples/boost/.gitignore
new file mode 100644
index 0000000..6a88a81
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/boost/.gitignore
@@ -0,0 +1,2 @@
+bin/*
+logs/*
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/boost/build_all.sh b/vendor/github.com/muflihun/easyloggingpp/samples/boost/build_all.sh
new file mode 100755
index 0000000..54552e8
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/boost/build_all.sh
@@ -0,0 +1,15 @@
+
+# Builds all files into bin/
+
+[ -d "bin" ] || mkdir "bin"
+rm -rf bin/*
+
+find . -maxdepth 1 -type f -name '*.cpp' -exec sh compile.sh {} $1 \;
+echo "Completed!"
+
+files=$(ls -l bin/)
+if [ "$files" = "total 0" ];then
+  exit 1
+else
+  exit 0
+fi
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/boost/compile.sh b/vendor/github.com/muflihun/easyloggingpp/samples/boost/compile.sh
new file mode 100755
index 0000000..13aa6e9
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/boost/compile.sh
@@ -0,0 +1,34 @@
+## Helper script for build_all.sh
+
+FILE=$1
+
+macro="$macro -DELPP_THREAD_SAFE"
+macro="$macro -DELPP_STL_LOGGING"
+macro="$macro -DELPP_BOOST_LOGGING"
+macro="$macro -DELPP_FEATURE_CRASH_LOG"
+macro="$macro -DELPP_FEATURE_ALL"
+
+if [ "$2" = "" ];then
+  COMPILER=g++
+else
+  COMPILER=$2
+fi
+
+CXX_STD='-std=c++0x -pthread'
+
+if [ "$FILE" = "" ]; then
+  echo "Please provide filename to compile"
+  exit
+fi
+
+echo "Compiling... [$FILE]"
+
+COMPILE_LINE="$COMPILER $FILE easylogging++.cc -o bin/$FILE.bin $macro $CXX_STD -Wall -Wextra"
+
+echo "    $COMPILE_LINE"
+
+$($COMPILE_LINE)
+
+echo "    DONE! [./bin/$FILE.bin]"
+echo
+echo
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/boost/deque.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/boost/deque.cpp
new file mode 100644
index 0000000..bc33755
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/boost/deque.cpp
@@ -0,0 +1,12 @@
+#include <boost/container/deque.hpp>
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(void) {
+   boost::container::deque<int> d(3, 100);
+   d.at(1) = 200;
+   d.at(2) = 20;
+   LOG(INFO) << d;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/boost/easylogging++.cc b/vendor/github.com/muflihun/easyloggingpp/samples/boost/easylogging++.cc
new file mode 100644
index 0000000..2386848
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/boost/easylogging++.cc
@@ -0,0 +1 @@
+#include "../../src/easylogging++.cc"
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/boost/easylogging++.h b/vendor/github.com/muflihun/easyloggingpp/samples/boost/easylogging++.h
new file mode 100644
index 0000000..a2c8ee8
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/boost/easylogging++.h
@@ -0,0 +1,5 @@
+// Header for sample that sub-includes original header from src/ folder
+#ifndef EASYLOGGING_FOR_SAMPLES_H
+#define EASYLOGGING_FOR_SAMPLES_H
+#include "../../src/easylogging++.h"
+#endif // EASYLOGGING_FOR_SAMPLES_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/boost/list.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/boost/list.cpp
new file mode 100644
index 0000000..cb63dab
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/boost/list.cpp
@@ -0,0 +1,11 @@
+#include <boost/container/list.hpp>
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(void) {
+   boost::container::list<int> l;
+   l.insert(l.cbegin(), 3);
+   LOG(INFO) << l;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/boost/map.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/boost/map.cpp
new file mode 100644
index 0000000..37b2204
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/boost/map.cpp
@@ -0,0 +1,18 @@
+#include <boost/container/map.hpp>
+#include <boost/container/flat_map.hpp>
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(void) {
+   boost::container::map<int, float> m;
+   m[0] =  1.0f;
+   m[5] =  3.3f;
+   LOG(INFO) << m;
+
+   boost::container::flat_map<int, float> fm;
+   fm[1] = 2.5f;
+   fm[2] = 5.0f;
+   LOG(INFO) << fm;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/boost/run.sh b/vendor/github.com/muflihun/easyloggingpp/samples/boost/run.sh
new file mode 100755
index 0000000..9d58af1
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/boost/run.sh
@@ -0,0 +1,4 @@
+echo "Running '$1'..."
+./$1
+echo "Finished '$1'"
+echo
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/boost/run_all.sh b/vendor/github.com/muflihun/easyloggingpp/samples/boost/run_all.sh
new file mode 100755
index 0000000..282b11a
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/boost/run_all.sh
@@ -0,0 +1,3 @@
+## Runs all the build binaries from bin/ folder
+
+find bin/ -name '*.cpp.bin' -exec sh ./run.sh ./{} \;
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/boost/set.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/boost/set.cpp
new file mode 100644
index 0000000..8ea2ff1
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/boost/set.cpp
@@ -0,0 +1,18 @@
+#include <boost/container/set.hpp>
+#include <boost/container/flat_set.hpp>
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(void) {
+   boost::container::set<int> s;
+   s.insert(4);
+   s.insert(5);
+   LOG(INFO) << s;
+
+   boost::container::flat_set<int> fs;
+   fs.insert(1);
+   fs.insert(2);
+   LOG(INFO) << fs;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/boost/string.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/boost/string.cpp
new file mode 100644
index 0000000..cb3b884
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/boost/string.cpp
@@ -0,0 +1,10 @@
+#include <boost/container/string.hpp>
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(void) {
+   boost::container::string s = "This is boost::container::string";
+   LOG(INFO) << s;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/boost/vector.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/boost/vector.cpp
new file mode 100644
index 0000000..b5fbdf4
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/boost/vector.cpp
@@ -0,0 +1,16 @@
+#include <boost/container/vector.hpp>
+#include <boost/container/stable_vector.hpp>
+
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main(void) {
+   boost::container::vector<int> v;
+   v.push_back(2);
+   LOG(INFO) << v;
+
+   boost::container::stable_vector<int> sv;
+   sv.push_back(3);
+   LOG(INFO) << sv;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/console.conf b/vendor/github.com/muflihun/easyloggingpp/samples/console.conf
new file mode 100644
index 0000000..ce105f3
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/console.conf
@@ -0,0 +1,9 @@
+* GLOBAL:
+	FORMAT                  =   "%msg"
+	FILENAME                =   "/tmp/logs/file.log"
+	ENABLED                 =   true
+	TO_FILE                 =   false ## Notice this
+	TO_STANDARD_OUTPUT      =   true ## Notice this
+	SUBSECOND_PRECISION     =   3
+	PERFORMANCE_TRACKING    =   false
+	MAX_LOG_FILE_SIZE       =   2097152 ## Throw log files away after 2MB
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/default-logger.conf b/vendor/github.com/muflihun/easyloggingpp/samples/default-logger.conf
new file mode 100644
index 0000000..396a59b
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/default-logger.conf
@@ -0,0 +1,25 @@
+* GLOBAL:
+    FORMAT                  =   "%datetime | %level | %msg"
+    FILENAME                =   "/tmp/logs/myeasylog-configuration.cpp.log"
+    ENABLED                 =   true
+    TO_FILE                 =   true
+    TO_STANDARD_OUTPUT      =   true
+    SUBSECOND_PRECISION     =   3
+    PERFORMANCE_TRACKING    =   false
+    MAX_LOG_FILE_SIZE       =   2097152 ## Throw log files away after 2MB
+* DEBUG:
+    FILENAME                =   "/tmp/logs/myeasylog-configuration.cpp-debug.log"
+    TO_STANDARD_OUTPUT      =   true
+    ENABLED                 =   true ## We will set it to false after development completed
+* WARNING:
+    FILENAME                =   "/tmp/logs/filename-with-time-%datetime{%H:%m}"
+* TRACE:
+    TO_FILE                 =   true ## Unnecessary configuration cuz its already true in GLOBAL but doing it anyway!
+* VERBOSE:
+    FORMAT                  =   "%datetime{%d/%M/%y} | %level-%vlevel | %msg"
+## Error logs
+* ERROR:
+    ENABLED                 =   false
+    FILENAME                =   "/tmp/logs/myeasylog-configuration.cpp-error.log"
+* FATAL:
+    ENABLED                 =   false
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/file.conf b/vendor/github.com/muflihun/easyloggingpp/samples/file.conf
new file mode 100644
index 0000000..c3c9000
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/file.conf
@@ -0,0 +1,9 @@
+* GLOBAL:
+	FORMAT                  =   "%level %datetime %msg"
+	FILENAME                =   "/tmp/logs/file.log"
+	ENABLED                 =   true
+	TO_FILE                 =   true ## Notice this
+	TO_STANDARD_OUTPUT      =   false ## Notice this
+	SUBSECOND_PRECISION     =   3
+	PERFORMANCE_TRACKING    =   false
+	MAX_LOG_FILE_SIZE       =   2097152 ## Throw log files away after 2MB
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/global.conf b/vendor/github.com/muflihun/easyloggingpp/samples/global.conf
new file mode 100644
index 0000000..1f7ce56
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/global.conf
@@ -0,0 +1,7 @@
+## Comment line
+-- default ## Inline Comment
+   *INFO:
+      FORMAT   = "%level %msg"
+      FILENAME = "/tmp/logs/wow.log"
+   *ERROR:
+      FORMAT   = "%levshort %fbase:%line %msg"
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/.gitignore b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/.gitignore
new file mode 100644
index 0000000..6a88a81
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/.gitignore
@@ -0,0 +1,2 @@
+bin/*
+logs/*
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/build_all.sh b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/build_all.sh
new file mode 100755
index 0000000..54552e8
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/build_all.sh
@@ -0,0 +1,15 @@
+
+# Builds all files into bin/
+
+[ -d "bin" ] || mkdir "bin"
+rm -rf bin/*
+
+find . -maxdepth 1 -type f -name '*.cpp' -exec sh compile.sh {} $1 \;
+echo "Completed!"
+
+files=$(ls -l bin/)
+if [ "$files" = "total 0" ];then
+  exit 1
+else
+  exit 0
+fi
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/compile.sh b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/compile.sh
new file mode 100755
index 0000000..a8b0b04
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/compile.sh
@@ -0,0 +1,32 @@
+## Helper script for build_all.sh
+
+FILE=$1
+
+macro="$macro -DELPP_THREAD_SAFE"
+macro="$macro -DELPP_STL_LOGGING"
+macro="$macro -DELPP_FEATURE_CRASH_LOG"
+macro="$macro -DELPP_FEATURE_ALL"
+
+if [ "$2" = "" ];then
+  COMPILER=g++
+else
+  COMPILER=$2
+fi
+
+CXX_STD='-std=c++0x -pthread'
+
+if [ "$FILE" = "" ]; then
+  echo "Please provide filename to compile"
+  exit
+fi
+
+echo "Compiling... [$FILE]"
+
+COMPILE_LINE="$COMPILER $FILE easylogging++.cc `pkg-config --libs --cflags gtkmm-2.4 sigc++-2.0` -o bin/$FILE.bin $macro $CXX_STD -Wall -Wextra -Wundef"
+echo "    $COMPILE_LINE"
+
+$($COMPILE_LINE)
+
+echo "    DONE! [./bin/$FILE.bin]"
+echo
+echo
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/easylogging++.cc b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/easylogging++.cc
new file mode 100644
index 0000000..2386848
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/easylogging++.cc
@@ -0,0 +1 @@
+#include "../../src/easylogging++.cc"
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/easylogging++.h b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/easylogging++.h
new file mode 100644
index 0000000..a2c8ee8
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/easylogging++.h
@@ -0,0 +1,5 @@
+// Header for sample that sub-includes original header from src/ folder
+#ifndef EASYLOGGING_FOR_SAMPLES_H
+#define EASYLOGGING_FOR_SAMPLES_H
+#include "../../src/easylogging++.h"
+#endif // EASYLOGGING_FOR_SAMPLES_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/hello_gtkmm/.gitignore b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/hello_gtkmm/.gitignore
new file mode 100644
index 0000000..f1e48a5
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/hello_gtkmm/.gitignore
@@ -0,0 +1,3 @@
+logs/*
+*.bin
+
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/hello_gtkmm/compile.sh b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/hello_gtkmm/compile.sh
new file mode 100755
index 0000000..3bd3a5e
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/hello_gtkmm/compile.sh
@@ -0,0 +1,21 @@
+## Helper script for build_all.sh
+
+macro="$macro -DELPP_THREAD_SAFE"
+macro="$macro -DELPP_STL_LOGGING"
+macro="$macro -DELPP_FEATURE_CRASH_LOG"
+
+if [ "$1" = "" ];then
+  COMPILER=g++
+else
+  COMPILER=$1
+fi
+
+CXX_STD='-std=c++0x -pthread'
+
+COMPILE_LINE="$COMPILER *.cc `pkg-config --libs --cflags gtkmm-2.4 sigc++-2.0` -o hello.bin $macro $CXX_STD -Wall -Wextra"
+echo "    $COMPILE_LINE"
+
+$($COMPILE_LINE)
+
+echo
+echo
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/hello_gtkmm/easylogging++.h b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/hello_gtkmm/easylogging++.h
new file mode 100644
index 0000000..77a0013
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/hello_gtkmm/easylogging++.h
@@ -0,0 +1,5 @@
+// Header for sample that sub-includes original header from src/ folder
+#ifndef EASYLOGGING_FOR_SAMPLES_H
+#define EASYLOGGING_FOR_SAMPLES_H
+#include "../../../src/easylogging++.h"
+#endif // EASYLOGGING_FOR_SAMPLES_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/hello_gtkmm/main.cc b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/hello_gtkmm/main.cc
new file mode 100644
index 0000000..ae160fe
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/hello_gtkmm/main.cc
@@ -0,0 +1,17 @@
+#include "window.h"
+#include <gtkmm/main.h>
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main (int argc, char** argv) {
+  START_EASYLOGGINGPP(argc, argv);
+  el::Loggers::reconfigureAllLoggers(el::Level::Trace, el::ConfigurationType::Format, "%datetime %level Entering [%func]");
+
+  Gtk::Main kit(argc, argv);
+
+  Window win;
+  Gtk::Main::run(win);
+
+  return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/hello_gtkmm/window.cc b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/hello_gtkmm/window.cc
new file mode 100644
index 0000000..02d77c0
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/hello_gtkmm/window.cc
@@ -0,0 +1,25 @@
+#include "window.h"
+#include <iostream>
+#include "easylogging++.h"
+
+Window::Window() 
+    : m_button("Click Me")   {
+  LOG(TRACE);
+
+  set_border_width(10);
+
+  m_button.signal_clicked().connect(sigc::mem_fun(*this, &Window::on_button_clicked));
+
+  m_button.show();
+  add(m_button);
+}
+
+Window::~Window() {
+    LOG(TRACE);
+}
+
+void Window::on_button_clicked() {
+  LOG(TRACE);
+  LOG(INFO) << "Button has been clicked!";
+}
+
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/hello_gtkmm/window.h b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/hello_gtkmm/window.h
new file mode 100644
index 0000000..0f0e478
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/hello_gtkmm/window.h
@@ -0,0 +1,22 @@
+#ifndef GTKMM_EXAMPLE_Window_H
+#define GTKMM_EXAMPLE_Window_H
+
+#include <gtkmm/button.h>
+#include <gtkmm/window.h>
+
+class Window : public Gtk::Window
+{
+
+public:
+  Window();
+  virtual ~Window();
+
+protected:
+  //Signal handlers:
+  void on_button_clicked();
+
+  //Member widgets:
+  Gtk::Button m_button;
+};
+
+#endif // GTKMM_EXAMPLE_Window_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/run.sh b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/run.sh
new file mode 100755
index 0000000..9d58af1
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/run.sh
@@ -0,0 +1,4 @@
+echo "Running '$1'..."
+./$1
+echo "Finished '$1'"
+echo
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/run_all.sh b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/run_all.sh
new file mode 100755
index 0000000..282b11a
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/run_all.sh
@@ -0,0 +1,3 @@
+## Runs all the build binaries from bin/ folder
+
+find bin/ -name '*.cpp.bin' -exec sh ./run.sh ./{} \;
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/sigc++.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/sigc++.cpp
new file mode 100644
index 0000000..c51c707
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/sigc++.cpp
@@ -0,0 +1,35 @@
+// Easylogging++ sample for libsigc++
+// @author mkhan3189
+// @rev 1.0
+
+#include <unistd.h>
+#include <sigc++/sigc++.h>
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+class AsyncConnector {
+public:
+    AsyncConnector() {}
+    void sendNow(void) { LOG(INFO) << "Sending data..."; sleep(2); sent.emit(); }
+    sigc::signal<void> received;
+    sigc::signal<void> sent;
+};
+
+void dataReceived(void) {
+    LOG(INFO) << "Async data has been received";
+}
+
+void dataSent(void) {
+    LOG(INFO) << "Async data has been sent";
+}
+
+int main(void) {
+    AsyncConnector asyncConnection;
+    asyncConnection.received.connect(sigc::ptr_fun(dataReceived));
+    asyncConnection.sent.connect(sigc::ptr_fun(dataSent));
+
+    asyncConnection.sendNow();
+
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/ustring.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/ustring.cpp
new file mode 100644
index 0000000..efaa8b7
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/gtkmm/ustring.cpp
@@ -0,0 +1,12 @@
+#include "easylogging++.h"
+#include <glibmm/ustring.h>
+
+INITIALIZE_EASYLOGGINGPP
+ 
+int main(int, char**){
+
+    Glib::ustring s("My GTK");
+    LOG(INFO) << s; 
+
+    return 0;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/send-to-network/.gitignore b/vendor/github.com/muflihun/easyloggingpp/samples/send-to-network/.gitignore
new file mode 100644
index 0000000..6a88a81
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/send-to-network/.gitignore
@@ -0,0 +1,2 @@
+bin/*
+logs/*
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/send-to-network/README.md b/vendor/github.com/muflihun/easyloggingpp/samples/send-to-network/README.md
new file mode 100644
index 0000000..1eca285
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/send-to-network/README.md
@@ -0,0 +1,29 @@
+# Send to Network
+
+You can use this sample to send your log messages to network as requested by many users. We are not able to add it to the library as this will require some stuffs to choose what network library to use.
+
+This sample uses `asio` in `boost_system`
+
+## Run
+
+Compile using `compile.sh` file but **make sure you have correct path to boost include and compiled library**
+
+```
+mkdir bin
+sh compile.sh network-logger.sh
+```
+
+Run a server (we are using netcat on mac for test purposes) on a different terminal
+
+```
+nc -l 9090
+```
+
+Now run `./bin/network-logger`
+
+
+## More
+
+You may need `ELPP_NO_LOG_TO_FILE` and `ELPP_NO_DEFAULT_LOG_FILE` depending on your needs.
+
+Please refer to [doc](https://github.com/muflihun/easyloggingpp#configuration-macros) for further details on macros
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/send-to-network/compile.sh b/vendor/github.com/muflihun/easyloggingpp/samples/send-to-network/compile.sh
new file mode 100755
index 0000000..cf2ce80
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/send-to-network/compile.sh
@@ -0,0 +1,28 @@
+## Helper script for build_all.sh
+
+FILE=$1
+
+if [ "$2" = "" ];then
+  COMPILER=g++
+else
+  COMPILER=$2
+fi
+
+CXX_STD='-std=c++11'
+
+if [ "$FILE" = "" ]; then
+  echo "Please provide filename to compile"
+  exit
+fi
+
+echo "Compiling... [$FILE]"
+
+COMPILE_LINE="$COMPILER $FILE easylogging++.cc -o bin/$FILE.bin $CXX_STD -std=c++11 -pthread -I /opt/local/include -L/opt/local/lib -lboost_system -Wno-deprecated-declarations"
+
+echo "    $COMPILE_LINE"
+
+$($COMPILE_LINE)
+
+echo "    DONE! [./bin/$FILE.bin]"
+echo
+echo
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/send-to-network/easylogging++.cc b/vendor/github.com/muflihun/easyloggingpp/samples/send-to-network/easylogging++.cc
new file mode 100644
index 0000000..2386848
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/send-to-network/easylogging++.cc
@@ -0,0 +1 @@
+#include "../../src/easylogging++.cc"
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/send-to-network/easylogging++.h b/vendor/github.com/muflihun/easyloggingpp/samples/send-to-network/easylogging++.h
new file mode 100644
index 0000000..a2c8ee8
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/send-to-network/easylogging++.h
@@ -0,0 +1,5 @@
+// Header for sample that sub-includes original header from src/ folder
+#ifndef EASYLOGGING_FOR_SAMPLES_H
+#define EASYLOGGING_FOR_SAMPLES_H
+#include "../../src/easylogging++.h"
+#endif // EASYLOGGING_FOR_SAMPLES_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/send-to-network/network-logger.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/send-to-network/network-logger.cpp
new file mode 100644
index 0000000..a9d8078
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/send-to-network/network-logger.cpp
@@ -0,0 +1,83 @@
+ //
+ //
+ // This file is part of Easylogging++ samples
+ // Send to network log
+ //
+ // Revision 1.0
+ // @author mkhan3189
+ //
+ // Compile: g++ network-logger.cpp easylogging++.cc -o bin/network-logger.cpp.bin -std=c++11 -pthread -I /opt/local/include -L/opt/local/lib -lboost_system -Wno-deprecated-declarations
+ //
+
+#include "easylogging++.h"
+
+#include <boost/asio.hpp>
+
+INITIALIZE_EASYLOGGINGPP
+
+
+// Following Client struct adapted from http://stackoverflow.com/questions/27672591/boost-asio-send-and-receive-messages
+struct Client
+{
+    boost::asio::io_service& io_service;
+    boost::asio::ip::tcp::socket socket;
+
+    Client(boost::asio::io_service& svc, std::string const& host, std::string const& port) 
+        : io_service(svc), socket(io_service) 
+    {
+        boost::asio::ip::tcp::resolver resolver(io_service);
+        boost::asio::ip::tcp::resolver::iterator endpoint = resolver.resolve(boost::asio::ip::tcp::resolver::query(host, port));
+        boost::asio::connect(this->socket, endpoint);
+    };
+
+    void send(std::string const& message) {
+        socket.send(boost::asio::buffer(message));
+    }
+};
+
+class NetworkDispatcher : public el::LogDispatchCallback
+{
+public:
+	// Setters
+	void setHost(const std::string& host) {
+		m_host = host;
+	}
+	void setPort(int port) {
+		m_port = port;
+	}
+protected:
+  void handle(const el::LogDispatchData* data) noexcept override
+  {
+	  m_data = data;
+	  // Dispatch using default log builder of logger
+	  dispatch(m_data->logMessage()->logger()->logBuilder()->build(m_data->logMessage(),
+	             m_data->dispatchAction() == el::base::DispatchAction::NormalLog));
+  }
+private:
+  const el::LogDispatchData* m_data;
+  std::string m_host;
+  int m_port;
+  
+  void dispatch(el::base::type::string_t&& logLine) noexcept
+  {
+	  boost::asio::io_service svc;
+	  Client client(svc, m_host, std::to_string(m_port));
+
+	  client.send(logLine);
+  }
+};
+
+
+int main() {
+	    el::Helpers::installLogDispatchCallback<NetworkDispatcher>("NetworkDispatcher");
+		// Set server params
+		NetworkDispatcher* dispatcher = el::Helpers::logDispatchCallback<NetworkDispatcher>("NetworkDispatcher");
+		dispatcher->setEnabled(true);
+		dispatcher->setHost("127.0.0.1");
+		dispatcher->setPort(9090);
+		
+		// Start logging and normal program...
+		LOG(INFO) << "First network log";
+		
+		// You can even use a different logger, say "network" and send using a different log pattern
+}
\ No newline at end of file
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/.gitignore b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/.gitignore
new file mode 100644
index 0000000..6a88a81
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/.gitignore
@@ -0,0 +1,2 @@
+bin/*
+logs/*
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/build_all.sh b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/build_all.sh
new file mode 100755
index 0000000..54552e8
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/build_all.sh
@@ -0,0 +1,15 @@
+
+# Builds all files into bin/
+
+[ -d "bin" ] || mkdir "bin"
+rm -rf bin/*
+
+find . -maxdepth 1 -type f -name '*.cpp' -exec sh compile.sh {} $1 \;
+echo "Completed!"
+
+files=$(ls -l bin/)
+if [ "$files" = "total 0" ];then
+  exit 1
+else
+  exit 0
+fi
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/compile.sh b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/compile.sh
new file mode 100755
index 0000000..20d9852
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/compile.sh
@@ -0,0 +1,34 @@
+## Helper script for build_all.sh
+
+FILE=$1
+
+macro="$macro -DELPP_THREAD_SAFE"
+macro="$macro -DELPP_STL_LOGGING"
+macro="$macro -DELPP_WXWIDGETS_LOGGING"
+macro="$macro -DELPP_FEATURE_CRASH_LOG"
+macro="$macro -DELPP_FEATURE_ALL"
+
+if [ "$2" = "" ];then
+  COMPILER=g++
+else
+  COMPILER=$2
+fi
+
+CXX_STD='-std=c++0x -pthread'
+
+if [ "$FILE" = "" ]; then
+  echo "Please provide filename to compile"
+  exit
+fi
+
+echo "Compiling... [$FILE]"
+
+COMPILE_LINE="$COMPILER $FILE easylogging++.cc -o bin/$FILE.bin $macro $CXX_STD -Wall -Wextra `wx-config --cppflags` `wx-config --libs`"
+
+echo "    $COMPILE_LINE"
+
+$($COMPILE_LINE)
+
+echo "    DONE! [./bin/$FILE.bin]"
+echo
+echo
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/easylogging++.cc b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/easylogging++.cc
new file mode 100644
index 0000000..2386848
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/easylogging++.cc
@@ -0,0 +1 @@
+#include "../../src/easylogging++.cc"
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/easylogging++.h b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/easylogging++.h
new file mode 100644
index 0000000..a2c8ee8
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/easylogging++.h
@@ -0,0 +1,5 @@
+// Header for sample that sub-includes original header from src/ folder
+#ifndef EASYLOGGING_FOR_SAMPLES_H
+#define EASYLOGGING_FOR_SAMPLES_H
+#include "../../src/easylogging++.h"
+#endif // EASYLOGGING_FOR_SAMPLES_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/run.sh b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/run.sh
new file mode 100755
index 0000000..9d58af1
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/run.sh
@@ -0,0 +1,4 @@
+echo "Running '$1'..."
+./$1
+echo "Finished '$1'"
+echo
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/run_all.sh b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/run_all.sh
new file mode 100755
index 0000000..282b11a
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/run_all.sh
@@ -0,0 +1,3 @@
+## Runs all the build binaries from bin/ folder
+
+find bin/ -name '*.cpp.bin' -exec sh ./run.sh ./{} \;
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/wxhashmap.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/wxhashmap.cpp
new file mode 100644
index 0000000..e74d951
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/wxhashmap.cpp
@@ -0,0 +1,17 @@
+#include <wx/hashmap.h>
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+WX_DECLARE_STRING_HASH_MAP( wxString, MyHashMap);
+
+ELPP_WX_HASH_MAP_ENABLED(MyHashMap)
+
+int main() {
+
+    MyHashMap h1;
+    h1["Batman"] = "Joker";
+    h1["Spiderman"] = "Venom";
+
+    LOG(INFO) << h1;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/wxhashset.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/wxhashset.cpp
new file mode 100644
index 0000000..f7355a1
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/wxhashset.cpp
@@ -0,0 +1,23 @@
+#include <wx/hashset.h>
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+WX_DECLARE_HASH_SET( int, wxIntegerHash, wxIntegerEqual, IntHashSet );
+WX_DECLARE_HASH_SET( wxString, wxStringHash, wxStringEqual, StringHashSet );
+
+ELPP_WX_ENABLED(IntHashSet)
+ELPP_WX_ENABLED(StringHashSet)
+
+int main() {
+
+    IntHashSet h1;
+    StringHashSet hStr;
+
+    hStr.insert( "foo" );
+    hStr.insert( "bar" );
+    hStr.insert( "baz" );
+    hStr.insert( "bar" ); // Does not add anything!
+
+    LOG(INFO) << hStr;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/wxlist.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/wxlist.cpp
new file mode 100644
index 0000000..e03f285
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/wxlist.cpp
@@ -0,0 +1,19 @@
+#include <wx/list.h>
+#include <wx/listimpl.cpp>
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+WX_DECLARE_LIST(int, MyList);
+
+WX_DEFINE_LIST(MyList);
+
+// Following enables MyList to be log-friendly
+ELPP_WX_PTR_ENABLED(MyList)
+
+int main() {
+    MyList list;
+    for (int i = 1; i < 110; ++i)
+        list.Append(new int (i));
+    LOG(INFO) << list;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/wxlonglong.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/wxlonglong.cpp
new file mode 100644
index 0000000..f18b024
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/wxlonglong.cpp
@@ -0,0 +1,9 @@
+#include <wx/longlong.h>
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main() {
+    wxLongLong l = 264375895;
+    LOG(INFO) << l;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/wxstring.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/wxstring.cpp
new file mode 100644
index 0000000..15283a4
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/wxstring.cpp
@@ -0,0 +1,9 @@
+#include <wx/string.h>
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main() {
+    wxString str = "This is a simple wxString";
+    LOG(INFO) << str;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/wxvector.cpp b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/wxvector.cpp
new file mode 100644
index 0000000..a276af9
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/samples/wxWidgets/wxvector.cpp
@@ -0,0 +1,11 @@
+#include <wx/vector.h>
+#include "easylogging++.h"
+
+INITIALIZE_EASYLOGGINGPP
+
+int main() {
+    wxVector<int> vec;
+    vec.push_back(1);
+    vec.push_back(2);
+    LOG(INFO) << vec;
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/src/easylogging++.cc b/vendor/github.com/muflihun/easyloggingpp/src/easylogging++.cc
new file mode 100644
index 0000000..5faa9a3
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/src/easylogging++.cc
@@ -0,0 +1,2994 @@
+//
+//  Bismillah ar-Rahmaan ar-Raheem
+//
+//  Easylogging++ v9.95.0
+//  Cross-platform logging library for C++ applications
+//
+//  Copyright (c) 2017 muflihun.com
+//
+//  This library is released under the MIT Licence.
+//  http://labs.muflihun.com/easyloggingpp/licence.php
+//
+//  https://github.com/muflihun/easyloggingpp
+//  https://muflihun.github.io/easyloggingpp
+//  http://muflihun.com
+//
+
+#include "easylogging++.h"
+
+#if defined(AUTO_INITIALIZE_EASYLOGGINGPP)
+INITIALIZE_EASYLOGGINGPP
+#endif
+
+namespace el {
+
+// el::base::utils
+namespace base {
+namespace utils {
+
+/// @brief Aborts application due with user-defined status
+static void abort(int status, const std::string& reason) {
+  // Both status and reason params are there for debugging with tools like gdb etc
+  ELPP_UNUSED(status);
+  ELPP_UNUSED(reason);
+#if defined(ELPP_COMPILER_MSVC) && defined(_M_IX86) && defined(_DEBUG)
+  // Ignore msvc critical error dialog - break instead (on debug mode)
+  _asm int 3
+#else
+  ::abort();
+#endif  // defined(ELPP_COMPILER_MSVC) && defined(_M_IX86) && defined(_DEBUG)
+}
+
+} // namespace utils
+} // namespace base
+
+// el
+
+// LevelHelper
+
+const char* LevelHelper::convertToString(Level level) {
+  // Do not use switch over strongly typed enums because Intel C++ compilers dont support them yet.
+  if (level == Level::Global) return "GLOBAL";
+  if (level == Level::Debug) return "DEBUG";
+  if (level == Level::Info) return "INFO";
+  if (level == Level::Warning) return "WARNING";
+  if (level == Level::Error) return "ERROR";
+  if (level == Level::Fatal) return "FATAL";
+  if (level == Level::Verbose) return "VERBOSE";
+  if (level == Level::Trace) return "TRACE";
+  return "UNKNOWN";
+}
+
+struct StringToLevelItem {
+  const char* levelString;
+  Level level;
+};
+
+static struct StringToLevelItem stringToLevelMap[] = {
+  { "global", Level::Global },
+  { "debug", Level::Debug },
+  { "info", Level::Info },
+  { "warning", Level::Warning },
+  { "error", Level::Error },
+  { "fatal", Level::Fatal },
+  { "verbose", Level::Verbose },
+  { "trace", Level::Trace }
+};
+
+Level LevelHelper::convertFromString(const char* levelStr) {
+  for (auto& item : stringToLevelMap) {
+    if (base::utils::Str::cStringCaseEq(levelStr, item.levelString)) {
+      return item.level;
+    }
+  }
+  return Level::Unknown;
+}
+
+void LevelHelper::forEachLevel(base::type::EnumType* startIndex, const std::function<bool(void)>& fn) {
+  base::type::EnumType lIndexMax = LevelHelper::kMaxValid;
+  do {
+    if (fn()) {
+      break;
+    }
+    *startIndex = static_cast<base::type::EnumType>(*startIndex << 1);
+  } while (*startIndex <= lIndexMax);
+}
+
+// ConfigurationTypeHelper
+
+const char* ConfigurationTypeHelper::convertToString(ConfigurationType configurationType) {
+  // Do not use switch over strongly typed enums because Intel C++ compilers dont support them yet.
+  if (configurationType == ConfigurationType::Enabled) return "ENABLED";
+  if (configurationType == ConfigurationType::Filename) return "FILENAME";
+  if (configurationType == ConfigurationType::Format) return "FORMAT";
+  if (configurationType == ConfigurationType::ToFile) return "TO_FILE";
+  if (configurationType == ConfigurationType::ToStandardOutput) return "TO_STANDARD_OUTPUT";
+  if (configurationType == ConfigurationType::SubsecondPrecision) return "SUBSECOND_PRECISION";
+  if (configurationType == ConfigurationType::PerformanceTracking) return "PERFORMANCE_TRACKING";
+  if (configurationType == ConfigurationType::MaxLogFileSize) return "MAX_LOG_FILE_SIZE";
+  if (configurationType == ConfigurationType::LogFlushThreshold) return "LOG_FLUSH_THRESHOLD";
+  return "UNKNOWN";
+}
+
+struct ConfigurationStringToTypeItem {
+  const char* configString;
+  ConfigurationType configType;
+};
+
+static struct ConfigurationStringToTypeItem configStringToTypeMap[] = {
+  { "enabled", ConfigurationType::Enabled },
+  { "to_file", ConfigurationType::ToFile },
+  { "to_standard_output", ConfigurationType::ToStandardOutput },
+  { "format", ConfigurationType::Format },
+  { "filename", ConfigurationType::Filename },
+  { "subsecond_precision", ConfigurationType::SubsecondPrecision },
+  { "milliseconds_width", ConfigurationType::MillisecondsWidth },
+  { "performance_tracking", ConfigurationType::PerformanceTracking },
+  { "max_log_file_size", ConfigurationType::MaxLogFileSize },
+  { "log_flush_threshold", ConfigurationType::LogFlushThreshold },
+};
+
+ConfigurationType ConfigurationTypeHelper::convertFromString(const char* configStr) {
+  for (auto& item : configStringToTypeMap) {
+    if (base::utils::Str::cStringCaseEq(configStr, item.configString)) {
+      return item.configType;
+    }
+  }
+  return ConfigurationType::Unknown;
+}
+
+void ConfigurationTypeHelper::forEachConfigType(base::type::EnumType* startIndex, const std::function<bool(void)>& fn) {
+  base::type::EnumType cIndexMax = ConfigurationTypeHelper::kMaxValid;
+  do {
+    if (fn()) {
+      break;
+    }
+    *startIndex = static_cast<base::type::EnumType>(*startIndex << 1);
+  } while (*startIndex <= cIndexMax);
+}
+
+// Configuration
+
+Configuration::Configuration(const Configuration& c) :
+  m_level(c.m_level),
+  m_configurationType(c.m_configurationType),
+  m_value(c.m_value) {
+}
+
+Configuration& Configuration::operator=(const Configuration& c) {
+  if (&c != this) {
+    m_level = c.m_level;
+    m_configurationType = c.m_configurationType;
+    m_value = c.m_value;
+  }
+  return *this;
+}
+
+/// @brief Full constructor used to sets value of configuration
+Configuration::Configuration(Level level, ConfigurationType configurationType, const std::string& value) :
+  m_level(level),
+  m_configurationType(configurationType),
+  m_value(value) {
+}
+
+void Configuration::log(el::base::type::ostream_t& os) const {
+  os << LevelHelper::convertToString(m_level)
+     << ELPP_LITERAL(" ") << ConfigurationTypeHelper::convertToString(m_configurationType)
+     << ELPP_LITERAL(" = ") << m_value.c_str();
+}
+
+/// @brief Used to find configuration from configuration (pointers) repository. Avoid using it.
+Configuration::Predicate::Predicate(Level level, ConfigurationType configurationType) :
+  m_level(level),
+  m_configurationType(configurationType) {
+}
+
+bool Configuration::Predicate::operator()(const Configuration* conf) const {
+  return ((conf != nullptr) && (conf->level() == m_level) && (conf->configurationType() == m_configurationType));
+}
+
+// Configurations
+
+Configurations::Configurations(void) :
+  m_configurationFile(std::string()),
+  m_isFromFile(false) {
+}
+
+Configurations::Configurations(const std::string& configurationFile, bool useDefaultsForRemaining,
+                               Configurations* base) :
+  m_configurationFile(configurationFile),
+  m_isFromFile(false) {
+  parseFromFile(configurationFile, base);
+  if (useDefaultsForRemaining) {
+    setRemainingToDefault();
+  }
+}
+
+bool Configurations::parseFromFile(const std::string& configurationFile, Configurations* base) {
+  // We initial assertion with true because if we have assertion diabled, we want to pass this
+  // check and if assertion is enabled we will have values re-assigned any way.
+  bool assertionPassed = true;
+  ELPP_ASSERT((assertionPassed = base::utils::File::pathExists(configurationFile.c_str(), true)) == true,
+              "Configuration file [" << configurationFile << "] does not exist!");
+  if (!assertionPassed) {
+    return false;
+  }
+  bool success = Parser::parseFromFile(configurationFile, this, base);
+  m_isFromFile = success;
+  return success;
+}
+
+bool Configurations::parseFromText(const std::string& configurationsString, Configurations* base) {
+  bool success = Parser::parseFromText(configurationsString, this, base);
+  if (success) {
+    m_isFromFile = false;
+  }
+  return success;
+}
+
+void Configurations::setFromBase(Configurations* base) {
+  if (base == nullptr || base == this) {
+    return;
+  }
+  base::threading::ScopedLock scopedLock(base->lock());
+  for (Configuration*& conf : base->list()) {
+    set(conf);
+  }
+}
+
+bool Configurations::hasConfiguration(ConfigurationType configurationType) {
+  base::type::EnumType lIndex = LevelHelper::kMinValid;
+  bool result = false;
+  LevelHelper::forEachLevel(&lIndex, [&](void) -> bool {
+    if (hasConfiguration(LevelHelper::castFromInt(lIndex), configurationType)) {
+      result = true;
+    }
+    return result;
+  });
+  return result;
+}
+
+bool Configurations::hasConfiguration(Level level, ConfigurationType configurationType) {
+  base::threading::ScopedLock scopedLock(lock());
+#if ELPP_COMPILER_INTEL
+  // We cant specify template types here, Intel C++ throws compilation error
+  // "error: type name is not allowed"
+  return RegistryWithPred::get(level, configurationType) != nullptr;
+#else
+  return RegistryWithPred<Configuration, Configuration::Predicate>::get(level, configurationType) != nullptr;
+#endif  // ELPP_COMPILER_INTEL
+}
+
+void Configurations::set(Level level, ConfigurationType configurationType, const std::string& value) {
+  base::threading::ScopedLock scopedLock(lock());
+  unsafeSet(level, configurationType, value);  // This is not unsafe anymore as we have locked mutex
+  if (level == Level::Global) {
+    unsafeSetGlobally(configurationType, value, false);  // Again this is not unsafe either
+  }
+}
+
+void Configurations::set(Configuration* conf) {
+  if (conf == nullptr) {
+    return;
+  }
+  set(conf->level(), conf->configurationType(), conf->value());
+}
+
+void Configurations::setToDefault(void) {
+  setGlobally(ConfigurationType::Enabled, std::string("true"), true);
+#if !defined(ELPP_NO_DEFAULT_LOG_FILE)
+  setGlobally(ConfigurationType::Filename, std::string(base::consts::kDefaultLogFile), true);
+#else
+  ELPP_UNUSED(base::consts::kDefaultLogFile);
+#endif  // !defined(ELPP_NO_DEFAULT_LOG_FILE)
+#if defined(ELPP_NO_LOG_TO_FILE)
+  setGlobally(ConfigurationType::ToFile, std::string("false"), true);
+#else
+  setGlobally(ConfigurationType::ToFile, std::string("true"), true);
+#endif // defined(ELPP_NO_LOG_TO_FILE)
+  setGlobally(ConfigurationType::ToStandardOutput, std::string("true"), true);
+  setGlobally(ConfigurationType::SubsecondPrecision, std::string("3"), true);
+  setGlobally(ConfigurationType::PerformanceTracking, std::string("true"), true);
+  setGlobally(ConfigurationType::MaxLogFileSize, std::string("0"), true);
+  setGlobally(ConfigurationType::LogFlushThreshold, std::string("0"), true);
+
+  setGlobally(ConfigurationType::Format, std::string("%datetime %level [%logger] %msg"), true);
+  set(Level::Debug, ConfigurationType::Format,
+      std::string("%datetime %level [%logger] [%user@%host] [%func] [%loc] %msg"));
+  // INFO and WARNING are set to default by Level::Global
+  set(Level::Error, ConfigurationType::Format, std::string("%datetime %level [%logger] %msg"));
+  set(Level::Fatal, ConfigurationType::Format, std::string("%datetime %level [%logger] %msg"));
+  set(Level::Verbose, ConfigurationType::Format, std::string("%datetime %level-%vlevel [%logger] %msg"));
+  set(Level::Trace, ConfigurationType::Format, std::string("%datetime %level [%logger] [%func] [%loc] %msg"));
+}
+
+void Configurations::setRemainingToDefault(void) {
+  base::threading::ScopedLock scopedLock(lock());
+#if defined(ELPP_NO_LOG_TO_FILE)
+  unsafeSetIfNotExist(Level::Global, ConfigurationType::Enabled, std::string("false"));
+#else
+  unsafeSetIfNotExist(Level::Global, ConfigurationType::Enabled, std::string("true"));
+#endif // defined(ELPP_NO_LOG_TO_FILE)
+#if !defined(ELPP_NO_DEFAULT_LOG_FILE)
+  unsafeSetIfNotExist(Level::Global, ConfigurationType::Filename, std::string(base::consts::kDefaultLogFile));
+#endif  // !defined(ELPP_NO_DEFAULT_LOG_FILE)
+  unsafeSetIfNotExist(Level::Global, ConfigurationType::ToStandardOutput, std::string("true"));
+  unsafeSetIfNotExist(Level::Global, ConfigurationType::SubsecondPrecision, std::string("3"));
+  unsafeSetIfNotExist(Level::Global, ConfigurationType::PerformanceTracking, std::string("true"));
+  unsafeSetIfNotExist(Level::Global, ConfigurationType::MaxLogFileSize, std::string("0"));
+  unsafeSetIfNotExist(Level::Global, ConfigurationType::Format, std::string("%datetime %level [%logger] %msg"));
+  unsafeSetIfNotExist(Level::Debug, ConfigurationType::Format,
+                      std::string("%datetime %level [%logger] [%user@%host] [%func] [%loc] %msg"));
+  // INFO and WARNING are set to default by Level::Global
+  unsafeSetIfNotExist(Level::Error, ConfigurationType::Format, std::string("%datetime %level [%logger] %msg"));
+  unsafeSetIfNotExist(Level::Fatal, ConfigurationType::Format, std::string("%datetime %level [%logger] %msg"));
+  unsafeSetIfNotExist(Level::Verbose, ConfigurationType::Format, std::string("%datetime %level-%vlevel [%logger] %msg"));
+  unsafeSetIfNotExist(Level::Trace, ConfigurationType::Format,
+                      std::string("%datetime %level [%logger] [%func] [%loc] %msg"));
+}
+
+bool Configurations::Parser::parseFromFile(const std::string& configurationFile, Configurations* sender,
+    Configurations* base) {
+  sender->setFromBase(base);
+  std::ifstream fileStream_(configurationFile.c_str(), std::ifstream::in);
+  ELPP_ASSERT(fileStream_.is_open(), "Unable to open configuration file [" << configurationFile << "] for parsing.");
+  bool parsedSuccessfully = false;
+  std::string line = std::string();
+  Level currLevel = Level::Unknown;
+  std::string currConfigStr = std::string();
+  std::string currLevelStr = std::string();
+  while (fileStream_.good()) {
+    std::getline(fileStream_, line);
+    parsedSuccessfully = parseLine(&line, &currConfigStr, &currLevelStr, &currLevel, sender);
+    ELPP_ASSERT(parsedSuccessfully, "Unable to parse configuration line: " << line);
+  }
+  return parsedSuccessfully;
+}
+
+bool Configurations::Parser::parseFromText(const std::string& configurationsString, Configurations* sender,
+    Configurations* base) {
+  sender->setFromBase(base);
+  bool parsedSuccessfully = false;
+  std::stringstream ss(configurationsString);
+  std::string line = std::string();
+  Level currLevel = Level::Unknown;
+  std::string currConfigStr = std::string();
+  std::string currLevelStr = std::string();
+  while (std::getline(ss, line)) {
+    parsedSuccessfully = parseLine(&line, &currConfigStr, &currLevelStr, &currLevel, sender);
+    ELPP_ASSERT(parsedSuccessfully, "Unable to parse configuration line: " << line);
+  }
+  return parsedSuccessfully;
+}
+
+void Configurations::Parser::ignoreComments(std::string* line) {
+  std::size_t foundAt = 0;
+  std::size_t quotesStart = line->find("\"");
+  std::size_t quotesEnd = std::string::npos;
+  if (quotesStart != std::string::npos) {
+    quotesEnd = line->find("\"", quotesStart + 1);
+    while (quotesEnd != std::string::npos && line->at(quotesEnd - 1) == '\\') {
+      // Do not erase slash yet - we will erase it in parseLine(..) while loop
+      quotesEnd = line->find("\"", quotesEnd + 2);
+    }
+  }
+  if ((foundAt = line->find(base::consts::kConfigurationComment)) != std::string::npos) {
+    if (foundAt < quotesEnd) {
+      foundAt = line->find(base::consts::kConfigurationComment, quotesEnd + 1);
+    }
+    *line = line->substr(0, foundAt);
+  }
+}
+
+bool Configurations::Parser::isLevel(const std::string& line) {
+  return base::utils::Str::startsWith(line, std::string(base::consts::kConfigurationLevel));
+}
+
+bool Configurations::Parser::isComment(const std::string& line) {
+  return base::utils::Str::startsWith(line, std::string(base::consts::kConfigurationComment));
+}
+
+bool Configurations::Parser::isConfig(const std::string& line) {
+  std::size_t assignment = line.find('=');
+  return line != "" &&
+         ((line[0] >= 'A' && line[0] <= 'Z') || (line[0] >= 'a' && line[0] <= 'z')) &&
+         (assignment != std::string::npos) &&
+         (line.size() > assignment);
+}
+
+bool Configurations::Parser::parseLine(std::string* line, std::string* currConfigStr, std::string* currLevelStr,
+                                       Level* currLevel,
+                                       Configurations* conf) {
+  ConfigurationType currConfig = ConfigurationType::Unknown;
+  std::string currValue = std::string();
+  *line = base::utils::Str::trim(*line);
+  if (isComment(*line)) return true;
+  ignoreComments(line);
+  *line = base::utils::Str::trim(*line);
+  if (line->empty()) {
+    // Comment ignored
+    return true;
+  }
+  if (isLevel(*line)) {
+    if (line->size() <= 2) {
+      return true;
+    }
+    *currLevelStr = line->substr(1, line->size() - 2);
+    *currLevelStr = base::utils::Str::toUpper(*currLevelStr);
+    *currLevelStr = base::utils::Str::trim(*currLevelStr);
+    *currLevel = LevelHelper::convertFromString(currLevelStr->c_str());
+    return true;
+  }
+  if (isConfig(*line)) {
+    std::size_t assignment = line->find('=');
+    *currConfigStr = line->substr(0, assignment);
+    *currConfigStr = base::utils::Str::toUpper(*currConfigStr);
+    *currConfigStr = base::utils::Str::trim(*currConfigStr);
+    currConfig = ConfigurationTypeHelper::convertFromString(currConfigStr->c_str());
+    currValue = line->substr(assignment + 1);
+    currValue = base::utils::Str::trim(currValue);
+    std::size_t quotesStart = currValue.find("\"", 0);
+    std::size_t quotesEnd = std::string::npos;
+    if (quotesStart != std::string::npos) {
+      quotesEnd = currValue.find("\"", quotesStart + 1);
+      while (quotesEnd != std::string::npos && currValue.at(quotesEnd - 1) == '\\') {
+        currValue = currValue.erase(quotesEnd - 1, 1);
+        quotesEnd = currValue.find("\"", quotesEnd + 2);
+      }
+    }
+    if (quotesStart != std::string::npos && quotesEnd != std::string::npos) {
+      // Quote provided - check and strip if valid
+      ELPP_ASSERT((quotesStart < quotesEnd), "Configuration error - No ending quote found in ["
+                  << currConfigStr << "]");
+      ELPP_ASSERT((quotesStart + 1 != quotesEnd), "Empty configuration value for [" << currConfigStr << "]");
+      if ((quotesStart != quotesEnd) && (quotesStart + 1 != quotesEnd)) {
+        // Explicit check in case if assertion is disabled
+        currValue = currValue.substr(quotesStart + 1, quotesEnd - 1);
+      }
+    }
+  }
+  ELPP_ASSERT(*currLevel != Level::Unknown, "Unrecognized severity level [" << *currLevelStr << "]");
+  ELPP_ASSERT(currConfig != ConfigurationType::Unknown, "Unrecognized configuration [" << *currConfigStr << "]");
+  if (*currLevel == Level::Unknown || currConfig == ConfigurationType::Unknown) {
+    return false;  // unrecognizable level or config
+  }
+  conf->set(*currLevel, currConfig, currValue);
+  return true;
+}
+
+void Configurations::unsafeSetIfNotExist(Level level, ConfigurationType configurationType, const std::string& value) {
+  Configuration* conf = RegistryWithPred<Configuration, Configuration::Predicate>::get(level, configurationType);
+  if (conf == nullptr) {
+    unsafeSet(level, configurationType, value);
+  }
+}
+
+void Configurations::unsafeSet(Level level, ConfigurationType configurationType, const std::string& value) {
+  Configuration* conf = RegistryWithPred<Configuration, Configuration::Predicate>::get(level, configurationType);
+  if (conf == nullptr) {
+    registerNew(new Configuration(level, configurationType, value));
+  } else {
+    conf->setValue(value);
+  }
+  if (level == Level::Global) {
+    unsafeSetGlobally(configurationType, value, false);
+  }
+}
+
+void Configurations::setGlobally(ConfigurationType configurationType, const std::string& value,
+                                 bool includeGlobalLevel) {
+  if (includeGlobalLevel) {
+    set(Level::Global, configurationType, value);
+  }
+  base::type::EnumType lIndex = LevelHelper::kMinValid;
+  LevelHelper::forEachLevel(&lIndex, [&](void) -> bool {
+    set(LevelHelper::castFromInt(lIndex), configurationType, value);
+    return false;  // Do not break lambda function yet as we need to set all levels regardless
+  });
+}
+
+void Configurations::unsafeSetGlobally(ConfigurationType configurationType, const std::string& value,
+                                       bool includeGlobalLevel) {
+  if (includeGlobalLevel) {
+    unsafeSet(Level::Global, configurationType, value);
+  }
+  base::type::EnumType lIndex = LevelHelper::kMinValid;
+  LevelHelper::forEachLevel(&lIndex, [&](void) -> bool  {
+    unsafeSet(LevelHelper::castFromInt(lIndex), configurationType, value);
+    return false;  // Do not break lambda function yet as we need to set all levels regardless
+  });
+}
+
+// LogBuilder
+
+void LogBuilder::convertToColoredOutput(base::type::string_t* logLine, Level level) {
+  if (!m_termSupportsColor) return;
+  const base::type::char_t* resetColor = ELPP_LITERAL("\x1b[0m");
+  if (level == Level::Error || level == Level::Fatal)
+    *logLine = ELPP_LITERAL("\x1b[31m") + *logLine + resetColor;
+  else if (level == Level::Warning)
+    *logLine = ELPP_LITERAL("\x1b[33m") + *logLine + resetColor;
+  else if (level == Level::Debug)
+    *logLine = ELPP_LITERAL("\x1b[32m") + *logLine + resetColor;
+  else if (level == Level::Info)
+    *logLine = ELPP_LITERAL("\x1b[36m") + *logLine + resetColor;
+  else if (level == Level::Trace)
+    *logLine = ELPP_LITERAL("\x1b[35m") + *logLine + resetColor;
+}
+
+// Logger
+
+Logger::Logger(const std::string& id, base::LogStreamsReferenceMap* logStreamsReference) :
+  m_id(id),
+  m_typedConfigurations(nullptr),
+  m_parentApplicationName(std::string()),
+  m_isConfigured(false),
+  m_logStreamsReference(logStreamsReference) {
+  initUnflushedCount();
+}
+
+Logger::Logger(const std::string& id, const Configurations& configurations,
+               base::LogStreamsReferenceMap* logStreamsReference) :
+  m_id(id),
+  m_typedConfigurations(nullptr),
+  m_parentApplicationName(std::string()),
+  m_isConfigured(false),
+  m_logStreamsReference(logStreamsReference) {
+  initUnflushedCount();
+  configure(configurations);
+}
+
+Logger::Logger(const Logger& logger) {
+  base::utils::safeDelete(m_typedConfigurations);
+  m_id = logger.m_id;
+  m_typedConfigurations = logger.m_typedConfigurations;
+  m_parentApplicationName = logger.m_parentApplicationName;
+  m_isConfigured = logger.m_isConfigured;
+  m_configurations = logger.m_configurations;
+  m_unflushedCount = logger.m_unflushedCount;
+  m_logStreamsReference = logger.m_logStreamsReference;
+}
+
+Logger& Logger::operator=(const Logger& logger) {
+  if (&logger != this) {
+    base::utils::safeDelete(m_typedConfigurations);
+    m_id = logger.m_id;
+    m_typedConfigurations = logger.m_typedConfigurations;
+    m_parentApplicationName = logger.m_parentApplicationName;
+    m_isConfigured = logger.m_isConfigured;
+    m_configurations = logger.m_configurations;
+    m_unflushedCount = logger.m_unflushedCount;
+    m_logStreamsReference = logger.m_logStreamsReference;
+  }
+  return *this;
+}
+
+void Logger::configure(const Configurations& configurations) {
+  m_isConfigured = false;  // we set it to false in case if we fail
+  initUnflushedCount();
+  if (m_typedConfigurations != nullptr) {
+    Configurations* c = const_cast<Configurations*>(m_typedConfigurations->configurations());
+    if (c->hasConfiguration(Level::Global, ConfigurationType::Filename)) {
+      // This check is definitely needed for cases like ELPP_NO_DEFAULT_LOG_FILE
+      flush();
+    }
+  }
+  base::threading::ScopedLock scopedLock(lock());
+  if (m_configurations != configurations) {
+    m_configurations.setFromBase(const_cast<Configurations*>(&configurations));
+  }
+  base::utils::safeDelete(m_typedConfigurations);
+  m_typedConfigurations = new base::TypedConfigurations(&m_configurations, m_logStreamsReference);
+  resolveLoggerFormatSpec();
+  m_isConfigured = true;
+}
+
+void Logger::reconfigure(void) {
+  ELPP_INTERNAL_INFO(1, "Reconfiguring logger [" << m_id << "]");
+  configure(m_configurations);
+}
+
+bool Logger::isValidId(const std::string& id) {
+  for (std::string::const_iterator it = id.begin(); it != id.end(); ++it) {
+    if (!base::utils::Str::contains(base::consts::kValidLoggerIdSymbols, *it)) {
+      return false;
+    }
+  }
+  return true;
+}
+
+void Logger::flush(void) {
+  ELPP_INTERNAL_INFO(3, "Flushing logger [" << m_id << "] all levels");
+  base::threading::ScopedLock scopedLock(lock());
+  base::type::EnumType lIndex = LevelHelper::kMinValid;
+  LevelHelper::forEachLevel(&lIndex, [&](void) -> bool {
+    flush(LevelHelper::castFromInt(lIndex), nullptr);
+    return false;
+  });
+}
+
+void Logger::flush(Level level, base::type::fstream_t* fs) {
+  if (fs == nullptr && m_typedConfigurations->toFile(level)) {
+    fs = m_typedConfigurations->fileStream(level);
+  }
+  if (fs != nullptr) {
+    fs->flush();
+    std::map<Level, unsigned int>::iterator iter = m_unflushedCount.find(level);
+    if (iter != m_unflushedCount.end()) {
+      iter->second = 0;
+    }
+  }
+}
+
+void Logger::initUnflushedCount(void) {
+  m_unflushedCount.clear();
+  base::type::EnumType lIndex = LevelHelper::kMinValid;
+  LevelHelper::forEachLevel(&lIndex, [&](void) -> bool {
+    m_unflushedCount.insert(std::make_pair(LevelHelper::castFromInt(lIndex), 0));
+    return false;
+  });
+}
+
+void Logger::resolveLoggerFormatSpec(void) const {
+  base::type::EnumType lIndex = LevelHelper::kMinValid;
+  LevelHelper::forEachLevel(&lIndex, [&](void) -> bool {
+    base::LogFormat* logFormat =
+    const_cast<base::LogFormat*>(&m_typedConfigurations->logFormat(LevelHelper::castFromInt(lIndex)));
+    base::utils::Str::replaceFirstWithEscape(logFormat->m_format, base::consts::kLoggerIdFormatSpecifier, m_id);
+    return false;
+  });
+}
+
+// el::base
+namespace base {
+
+// el::base::utils
+namespace utils {
+
+// File
+
+base::type::fstream_t* File::newFileStream(const std::string& filename) {
+  base::type::fstream_t *fs = new base::type::fstream_t(filename.c_str(),
+      base::type::fstream_t::out
+#if !defined(ELPP_FRESH_LOG_FILE)
+      | base::type::fstream_t::app
+#endif
+                                                       );
+#if defined(ELPP_UNICODE)
+  std::locale elppUnicodeLocale("");
+#  if ELPP_OS_WINDOWS
+  std::locale elppUnicodeLocaleWindows(elppUnicodeLocale, new std::codecvt_utf8_utf16<wchar_t>);
+  elppUnicodeLocale = elppUnicodeLocaleWindows;
+#  endif // ELPP_OS_WINDOWS
+  fs->imbue(elppUnicodeLocale);
+#endif  // defined(ELPP_UNICODE)
+  if (fs->is_open()) {
+    fs->flush();
+  } else {
+    base::utils::safeDelete(fs);
+    ELPP_INTERNAL_ERROR("Bad file [" << filename << "]", true);
+  }
+  return fs;
+}
+
+std::size_t File::getSizeOfFile(base::type::fstream_t* fs) {
+  if (fs == nullptr) {
+    return 0;
+  }
+  std::streampos currPos = fs->tellg();
+  fs->seekg(0, fs->end);
+  std::size_t size = static_cast<std::size_t>(fs->tellg());
+  fs->seekg(currPos);
+  return size;
+}
+
+bool File::pathExists(const char* path, bool considerFile) {
+  if (path == nullptr) {
+    return false;
+  }
+#if ELPP_OS_UNIX
+  ELPP_UNUSED(considerFile);
+  struct stat st;
+  return (stat(path, &st) == 0);
+#elif ELPP_OS_WINDOWS
+  DWORD fileType = GetFileAttributesA(path);
+  if (fileType == INVALID_FILE_ATTRIBUTES) {
+    return false;
+  }
+  return considerFile ? true : ((fileType & FILE_ATTRIBUTE_DIRECTORY) == 0 ? false : true);
+#endif  // ELPP_OS_UNIX
+}
+
+bool File::createPath(const std::string& path) {
+  if (path.empty()) {
+    return false;
+  }
+  if (base::utils::File::pathExists(path.c_str())) {
+    return true;
+  }
+  int status = -1;
+
+  char* currPath = const_cast<char*>(path.c_str());
+  std::string builtPath = std::string();
+#if ELPP_OS_UNIX
+  if (path[0] == '/') {
+    builtPath = "/";
+  }
+  currPath = STRTOK(currPath, base::consts::kFilePathSeperator, 0);
+#elif ELPP_OS_WINDOWS
+  // Use secure functions API
+  char* nextTok_ = nullptr;
+  currPath = STRTOK(currPath, base::consts::kFilePathSeperator, &nextTok_);
+  ELPP_UNUSED(nextTok_);
+#endif  // ELPP_OS_UNIX
+  while (currPath != nullptr) {
+    builtPath.append(currPath);
+    builtPath.append(base::consts::kFilePathSeperator);
+#if ELPP_OS_UNIX
+    status = mkdir(builtPath.c_str(), ELPP_LOG_PERMS);
+    currPath = STRTOK(nullptr, base::consts::kFilePathSeperator, 0);
+#elif ELPP_OS_WINDOWS
+    status = _mkdir(builtPath.c_str());
+    currPath = STRTOK(nullptr, base::consts::kFilePathSeperator, &nextTok_);
+#endif  // ELPP_OS_UNIX
+  }
+  if (status == -1) {
+    ELPP_INTERNAL_ERROR("Error while creating path [" << path << "]", true);
+    return false;
+  }
+  return true;
+}
+
+std::string File::extractPathFromFilename(const std::string& fullPath, const char* separator) {
+  if ((fullPath == "") || (fullPath.find(separator) == std::string::npos)) {
+    return fullPath;
+  }
+  std::size_t lastSlashAt = fullPath.find_last_of(separator);
+  if (lastSlashAt == 0) {
+    return std::string(separator);
+  }
+  return fullPath.substr(0, lastSlashAt + 1);
+}
+
+void File::buildStrippedFilename(const char* filename, char buff[], std::size_t limit) {
+  std::size_t sizeOfFilename = strlen(filename);
+  if (sizeOfFilename >= limit) {
+    filename += (sizeOfFilename - limit);
+    if (filename[0] != '.' && filename[1] != '.') {  // prepend if not already
+      filename += 3;  // 3 = '..'
+      STRCAT(buff, "..", limit);
+    }
+  }
+  STRCAT(buff, filename, limit);
+}
+
+void File::buildBaseFilename(const std::string& fullPath, char buff[], std::size_t limit, const char* separator) {
+  const char *filename = fullPath.c_str();
+  std::size_t lastSlashAt = fullPath.find_last_of(separator);
+  filename += lastSlashAt ? lastSlashAt+1 : 0;
+  std::size_t sizeOfFilename = strlen(filename);
+  if (sizeOfFilename >= limit) {
+    filename += (sizeOfFilename - limit);
+    if (filename[0] != '.' && filename[1] != '.') {  // prepend if not already
+      filename += 3;  // 3 = '..'
+      STRCAT(buff, "..", limit);
+    }
+  }
+  STRCAT(buff, filename, limit);
+}
+
+// Str
+
+bool Str::wildCardMatch(const char* str, const char* pattern) {
+  while (*pattern) {
+    switch (*pattern) {
+    case '?':
+      if (!*str)
+        return false;
+      ++str;
+      ++pattern;
+      break;
+    case '*':
+      if (wildCardMatch(str, pattern + 1))
+        return true;
+      if (*str && wildCardMatch(str + 1, pattern))
+        return true;
+      return false;
+    default:
+      if (*str++ != *pattern++)
+        return false;
+      break;
+    }
+  }
+  return !*str && !*pattern;
+}
+
+std::string& Str::ltrim(std::string& str) {
+  str.erase(str.begin(), std::find_if(str.begin(), str.end(), [](char c) {
+    return !std::isspace(c);
+  } ));
+  return str;
+}
+
+std::string& Str::rtrim(std::string& str) {
+  str.erase(std::find_if(str.rbegin(), str.rend(), [](char c) {
+    return !std::isspace(c);
+  }).base(), str.end());
+  return str;
+}
+
+std::string& Str::trim(std::string& str) {
+  return ltrim(rtrim(str));
+}
+
+bool Str::startsWith(const std::string& str, const std::string& start) {
+  return (str.length() >= start.length()) && (str.compare(0, start.length(), start) == 0);
+}
+
+bool Str::endsWith(const std::string& str, const std::string& end) {
+  return (str.length() >= end.length()) && (str.compare(str.length() - end.length(), end.length(), end) == 0);
+}
+
+std::string& Str::replaceAll(std::string& str, char replaceWhat, char replaceWith) {
+  std::replace(str.begin(), str.end(), replaceWhat, replaceWith);
+  return str;
+}
+
+std::string& Str::replaceAll(std::string& str, const std::string& replaceWhat,
+                             const std::string& replaceWith) {
+  if (replaceWhat == replaceWith)
+    return str;
+  std::size_t foundAt = std::string::npos;
+  while ((foundAt = str.find(replaceWhat, foundAt + 1)) != std::string::npos) {
+    str.replace(foundAt, replaceWhat.length(), replaceWith);
+  }
+  return str;
+}
+
+void Str::replaceFirstWithEscape(base::type::string_t& str, const base::type::string_t& replaceWhat,
+                                 const base::type::string_t& replaceWith) {
+  std::size_t foundAt = base::type::string_t::npos;
+  while ((foundAt = str.find(replaceWhat, foundAt + 1)) != base::type::string_t::npos) {
+    if (foundAt > 0 && str[foundAt - 1] == base::consts::kFormatSpecifierChar) {
+      str.erase(foundAt > 0 ? foundAt - 1 : 0, 1);
+      ++foundAt;
+    } else {
+      str.replace(foundAt, replaceWhat.length(), replaceWith);
+      return;
+    }
+  }
+}
+#if defined(ELPP_UNICODE)
+void Str::replaceFirstWithEscape(base::type::string_t& str, const base::type::string_t& replaceWhat,
+                                 const std::string& replaceWith) {
+  replaceFirstWithEscape(str, replaceWhat, base::type::string_t(replaceWith.begin(), replaceWith.end()));
+}
+#endif  // defined(ELPP_UNICODE)
+
+std::string& Str::toUpper(std::string& str) {
+  std::transform(str.begin(), str.end(), str.begin(),
+  [](char c) {
+    return static_cast<char>(::toupper(c));
+  });
+  return str;
+}
+
+bool Str::cStringEq(const char* s1, const char* s2) {
+  if (s1 == nullptr && s2 == nullptr) return true;
+  if (s1 == nullptr || s2 == nullptr) return false;
+  return strcmp(s1, s2) == 0;
+}
+
+bool Str::cStringCaseEq(const char* s1, const char* s2) {
+  if (s1 == nullptr && s2 == nullptr) return true;
+  if (s1 == nullptr || s2 == nullptr) return false;
+
+  // With thanks to cygwin for this code
+  int d = 0;
+
+  while (true) {
+    const int c1 = toupper(*s1++);
+    const int c2 = toupper(*s2++);
+
+    if (((d = c1 - c2) != 0) || (c2 == '\0')) {
+      break;
+    }
+  }
+
+  return d == 0;
+}
+
+bool Str::contains(const char* str, char c) {
+  for (; *str; ++str) {
+    if (*str == c)
+      return true;
+  }
+  return false;
+}
+
+char* Str::convertAndAddToBuff(std::size_t n, int len, char* buf, const char* bufLim, bool zeroPadded) {
+  char localBuff[10] = "";
+  char* p = localBuff + sizeof(localBuff) - 2;
+  if (n > 0) {
+    for (; n > 0 && p > localBuff && len > 0; n /= 10, --len)
+      *--p = static_cast<char>(n % 10 + '0');
+  } else {
+    *--p = '0';
+    --len;
+  }
+  if (zeroPadded)
+    while (p > localBuff && len-- > 0) *--p = static_cast<char>('0');
+  return addToBuff(p, buf, bufLim);
+}
+
+char* Str::addToBuff(const char* str, char* buf, const char* bufLim) {
+  while ((buf < bufLim) && ((*buf = *str++) != '\0'))
+    ++buf;
+  return buf;
+}
+
+char* Str::clearBuff(char buff[], std::size_t lim) {
+  STRCPY(buff, "", lim);
+  ELPP_UNUSED(lim);  // For *nix we dont have anything using lim in above STRCPY macro
+  return buff;
+}
+
+/// @brief Converst wchar* to char*
+///        NOTE: Need to free return value after use!
+char* Str::wcharPtrToCharPtr(const wchar_t* line) {
+  std::size_t len_ = wcslen(line) + 1;
+  char* buff_ = static_cast<char*>(malloc(len_ + 1));
+#      if ELPP_OS_UNIX || (ELPP_OS_WINDOWS && !ELPP_CRT_DBG_WARNINGS)
+  std::wcstombs(buff_, line, len_);
+#      elif ELPP_OS_WINDOWS
+  std::size_t convCount_ = 0;
+  mbstate_t mbState_;
+  ::memset(static_cast<void*>(&mbState_), 0, sizeof(mbState_));
+  wcsrtombs_s(&convCount_, buff_, len_, &line, len_, &mbState_);
+#      endif  // ELPP_OS_UNIX || (ELPP_OS_WINDOWS && !ELPP_CRT_DBG_WARNINGS)
+  return buff_;
+}
+
+// OS
+
+#if ELPP_OS_WINDOWS
+/// @brief Gets environment variables for Windows based OS.
+///        We are not using <code>getenv(const char*)</code> because of CRT deprecation
+/// @param varname Variable name to get environment variable value for
+/// @return If variable exist the value of it otherwise nullptr
+const char* OS::getWindowsEnvironmentVariable(const char* varname) {
+  const DWORD bufferLen = 50;
+  static char buffer[bufferLen];
+  if (GetEnvironmentVariableA(varname, buffer, bufferLen)) {
+    return buffer;
+  }
+  return nullptr;
+}
+#endif  // ELPP_OS_WINDOWS
+#if ELPP_OS_ANDROID
+std::string OS::getProperty(const char* prop) {
+  char propVal[PROP_VALUE_MAX + 1];
+  int ret = __system_property_get(prop, propVal);
+  return ret == 0 ? std::string() : std::string(propVal);
+}
+
+std::string OS::getDeviceName(void) {
+  std::stringstream ss;
+  std::string manufacturer = getProperty("ro.product.manufacturer");
+  std::string model = getProperty("ro.product.model");
+  if (manufacturer.empty() || model.empty()) {
+    return std::string();
+  }
+  ss << manufacturer << "-" << model;
+  return ss.str();
+}
+#endif  // ELPP_OS_ANDROID
+
+const std::string OS::getBashOutput(const char* command) {
+#if (ELPP_OS_UNIX && !ELPP_OS_ANDROID && !ELPP_CYGWIN)
+  if (command == nullptr) {
+    return std::string();
+  }
+  FILE* proc = nullptr;
+  if ((proc = popen(command, "r")) == nullptr) {
+    ELPP_INTERNAL_ERROR("\nUnable to run command [" << command << "]", true);
+    return std::string();
+  }
+  char hBuff[4096];
+  if (fgets(hBuff, sizeof(hBuff), proc) != nullptr) {
+    pclose(proc);
+    if (hBuff[strlen(hBuff) - 1] == '\n') {
+      hBuff[strlen(hBuff) - 1] = '\0';
+    }
+    return std::string(hBuff);
+  } else {
+    pclose(proc);
+  }
+  return std::string();
+#else
+  ELPP_UNUSED(command);
+  return std::string();
+#endif  // (ELPP_OS_UNIX && !ELPP_OS_ANDROID && !ELPP_CYGWIN)
+}
+
+std::string OS::getEnvironmentVariable(const char* variableName, const char* defaultVal,
+                                       const char* alternativeBashCommand) {
+#if ELPP_OS_UNIX
+  const char* val = getenv(variableName);
+#elif ELPP_OS_WINDOWS
+  const char* val = getWindowsEnvironmentVariable(variableName);
+#endif  // ELPP_OS_UNIX
+  if ((val == nullptr) || ((strcmp(val, "") == 0))) {
+#if ELPP_OS_UNIX && defined(ELPP_FORCE_ENV_VAR_FROM_BASH)
+    // Try harder on unix-based systems
+    std::string valBash = base::utils::OS::getBashOutput(alternativeBashCommand);
+    if (valBash.empty()) {
+      return std::string(defaultVal);
+    } else {
+      return valBash;
+    }
+#elif ELPP_OS_WINDOWS || ELPP_OS_UNIX
+    ELPP_UNUSED(alternativeBashCommand);
+    return std::string(defaultVal);
+#endif  // ELPP_OS_UNIX && defined(ELPP_FORCE_ENV_VAR_FROM_BASH)
+  }
+  return std::string(val);
+}
+
+std::string OS::currentUser(void) {
+#if ELPP_OS_UNIX && !ELPP_OS_ANDROID
+  return getEnvironmentVariable("USER", base::consts::kUnknownUser, "whoami");
+#elif ELPP_OS_WINDOWS
+  return getEnvironmentVariable("USERNAME", base::consts::kUnknownUser);
+#elif ELPP_OS_ANDROID
+  ELPP_UNUSED(base::consts::kUnknownUser);
+  return std::string("android");
+#else
+  return std::string();
+#endif  // ELPP_OS_UNIX && !ELPP_OS_ANDROID
+}
+
+std::string OS::currentHost(void) {
+#if ELPP_OS_UNIX && !ELPP_OS_ANDROID
+  return getEnvironmentVariable("HOSTNAME", base::consts::kUnknownHost, "hostname");
+#elif ELPP_OS_WINDOWS
+  return getEnvironmentVariable("COMPUTERNAME", base::consts::kUnknownHost);
+#elif ELPP_OS_ANDROID
+  ELPP_UNUSED(base::consts::kUnknownHost);
+  return getDeviceName();
+#else
+  return std::string();
+#endif  // ELPP_OS_UNIX && !ELPP_OS_ANDROID
+}
+
+bool OS::termSupportsColor(void) {
+  std::string term = getEnvironmentVariable("TERM", "");
+  return term == "xterm" || term == "xterm-color" || term == "xterm-256color"
+         || term == "screen" || term == "linux" || term == "cygwin"
+         || term == "screen-256color";
+}
+
+// DateTime
+
+void DateTime::gettimeofday(struct timeval* tv) {
+#if ELPP_OS_WINDOWS
+  if (tv != nullptr) {
+#  if ELPP_COMPILER_MSVC || defined(_MSC_EXTENSIONS)
+    const unsigned __int64 delta_ = 11644473600000000Ui64;
+#  else
+    const unsigned __int64 delta_ = 11644473600000000ULL;
+#  endif  // ELPP_COMPILER_MSVC || defined(_MSC_EXTENSIONS)
+    const double secOffSet = 0.000001;
+    const unsigned long usecOffSet = 1000000;
+    FILETIME fileTime;
+    GetSystemTimeAsFileTime(&fileTime);
+    unsigned __int64 present = 0;
+    present |= fileTime.dwHighDateTime;
+    present = present << 32;
+    present |= fileTime.dwLowDateTime;
+    present /= 10;  // mic-sec
+    // Subtract the difference
+    present -= delta_;
+    tv->tv_sec = static_cast<long>(present * secOffSet);
+    tv->tv_usec = static_cast<long>(present % usecOffSet);
+  }
+#else
+  ::gettimeofday(tv, nullptr);
+#endif  // ELPP_OS_WINDOWS
+}
+
+std::string DateTime::getDateTime(const char* format, const base::SubsecondPrecision* ssPrec) {
+  struct timeval currTime;
+  gettimeofday(&currTime);
+  return timevalToString(currTime, format, ssPrec);
+}
+
+std::string DateTime::timevalToString(struct timeval tval, const char* format,
+                                      const el::base::SubsecondPrecision* ssPrec) {
+  struct ::tm timeInfo;
+  buildTimeInfo(&tval, &timeInfo);
+  const int kBuffSize = 30;
+  char buff_[kBuffSize] = "";
+  parseFormat(buff_, kBuffSize, format, &timeInfo, static_cast<std::size_t>(tval.tv_usec / ssPrec->m_offset),
+              ssPrec);
+  return std::string(buff_);
+}
+
+base::type::string_t DateTime::formatTime(unsigned long long time, base::TimestampUnit timestampUnit) {
+  base::type::EnumType start = static_cast<base::type::EnumType>(timestampUnit);
+  const base::type::char_t* unit = base::consts::kTimeFormats[start].unit;
+  for (base::type::EnumType i = start; i < base::consts::kTimeFormatsCount - 1; ++i) {
+    if (time <= base::consts::kTimeFormats[i].value) {
+      break;
+    }
+    if (base::consts::kTimeFormats[i].value == 1000.0f && time / 1000.0f < 1.9f) {
+      break;
+    }
+    time /= static_cast<decltype(time)>(base::consts::kTimeFormats[i].value);
+    unit = base::consts::kTimeFormats[i + 1].unit;
+  }
+  base::type::stringstream_t ss;
+  ss << time << " " << unit;
+  return ss.str();
+}
+
+unsigned long long DateTime::getTimeDifference(const struct timeval& endTime, const struct timeval& startTime,
+    base::TimestampUnit timestampUnit) {
+  if (timestampUnit == base::TimestampUnit::Microsecond) {
+    return static_cast<unsigned long long>(static_cast<unsigned long long>(1000000 * endTime.tv_sec + endTime.tv_usec) -
+                                           static_cast<unsigned long long>(1000000 * startTime.tv_sec + startTime.tv_usec));
+  }
+  // milliseconds
+  auto conv = [](const struct timeval& tim) {
+    return static_cast<unsigned long long>((tim.tv_sec * 1000) + (tim.tv_usec / 1000));
+  };
+  return static_cast<unsigned long long>(conv(endTime) - conv(startTime));
+}
+
+struct ::tm* DateTime::buildTimeInfo(struct timeval* currTime, struct ::tm* timeInfo) {
+#if ELPP_OS_UNIX
+  time_t rawTime = currTime->tv_sec;
+  ::elpptime_r(&rawTime, timeInfo);
+  return timeInfo;
+#else
+#  if ELPP_COMPILER_MSVC
+  ELPP_UNUSED(currTime);
+  time_t t;
+#    if defined(_USE_32BIT_TIME_T)
+  _time32(&t);
+#    else
+  _time64(&t);
+#    endif
+  elpptime_s(timeInfo, &t);
+  return timeInfo;
+#  else
+  // For any other compilers that don't have CRT warnings issue e.g, MinGW or TDM GCC- we use different method
+  time_t rawTime = currTime->tv_sec;
+  struct tm* tmInf = elpptime(&rawTime);
+  *timeInfo = *tmInf;
+  return timeInfo;
+#  endif  // ELPP_COMPILER_MSVC
+#endif  // ELPP_OS_UNIX
+}
+
+char* DateTime::parseFormat(char* buf, std::size_t bufSz, const char* format, const struct tm* tInfo,
+                            std::size_t msec, const base::SubsecondPrecision* ssPrec) {
+  const char* bufLim = buf + bufSz;
+  for (; *format; ++format) {
+    if (*format == base::consts::kFormatSpecifierChar) {
+      switch (*++format) {
+      case base::consts::kFormatSpecifierChar:  // Escape
+        break;
+      case '\0':  // End
+        --format;
+        break;
+      case 'd':  // Day
+        buf = base::utils::Str::convertAndAddToBuff(tInfo->tm_mday, 2, buf, bufLim);
+        continue;
+      case 'a':  // Day of week (short)
+        buf = base::utils::Str::addToBuff(base::consts::kDaysAbbrev[tInfo->tm_wday], buf, bufLim);
+        continue;
+      case 'A':  // Day of week (long)
+        buf = base::utils::Str::addToBuff(base::consts::kDays[tInfo->tm_wday], buf, bufLim);
+        continue;
+      case 'M':  // month
+        buf = base::utils::Str::convertAndAddToBuff(tInfo->tm_mon + 1, 2, buf, bufLim);
+        continue;
+      case 'b':  // month (short)
+        buf = base::utils::Str::addToBuff(base::consts::kMonthsAbbrev[tInfo->tm_mon], buf, bufLim);
+        continue;
+      case 'B':  // month (long)
+        buf = base::utils::Str::addToBuff(base::consts::kMonths[tInfo->tm_mon], buf, bufLim);
+        continue;
+      case 'y':  // year (two digits)
+        buf = base::utils::Str::convertAndAddToBuff(tInfo->tm_year + base::consts::kYearBase, 2, buf, bufLim);
+        continue;
+      case 'Y':  // year (four digits)
+        buf = base::utils::Str::convertAndAddToBuff(tInfo->tm_year + base::consts::kYearBase, 4, buf, bufLim);
+        continue;
+      case 'h':  // hour (12-hour)
+        buf = base::utils::Str::convertAndAddToBuff(tInfo->tm_hour % 12, 2, buf, bufLim);
+        continue;
+      case 'H':  // hour (24-hour)
+        buf = base::utils::Str::convertAndAddToBuff(tInfo->tm_hour, 2, buf, bufLim);
+        continue;
+      case 'm':  // minute
+        buf = base::utils::Str::convertAndAddToBuff(tInfo->tm_min, 2, buf, bufLim);
+        continue;
+      case 's':  // second
+        buf = base::utils::Str::convertAndAddToBuff(tInfo->tm_sec, 2, buf, bufLim);
+        continue;
+      case 'z':  // subsecond part
+      case 'g':
+        buf = base::utils::Str::convertAndAddToBuff(msec, ssPrec->m_width, buf, bufLim);
+        continue;
+      case 'F':  // AM/PM
+        buf = base::utils::Str::addToBuff((tInfo->tm_hour >= 12) ? base::consts::kPm : base::consts::kAm, buf, bufLim);
+        continue;
+      default:
+        continue;
+      }
+    }
+    if (buf == bufLim) break;
+    *buf++ = *format;
+  }
+  return buf;
+}
+
+// CommandLineArgs
+
+void CommandLineArgs::setArgs(int argc, char** argv) {
+  m_params.clear();
+  m_paramsWithValue.clear();
+  if (argc == 0 || argv == nullptr) {
+    return;
+  }
+  m_argc = argc;
+  m_argv = argv;
+  for (int i = 1; i < m_argc; ++i) {
+    const char* v = (strstr(m_argv[i], "="));
+    if (v != nullptr && strlen(v) > 0) {
+      std::string key = std::string(m_argv[i]);
+      key = key.substr(0, key.find_first_of('='));
+      if (hasParamWithValue(key.c_str())) {
+        ELPP_INTERNAL_INFO(1, "Skipping [" << key << "] arg since it already has value ["
+                           << getParamValue(key.c_str()) << "]");
+      } else {
+        m_paramsWithValue.insert(std::make_pair(key, std::string(v + 1)));
+      }
+    }
+    if (v == nullptr) {
+      if (hasParam(m_argv[i])) {
+        ELPP_INTERNAL_INFO(1, "Skipping [" << m_argv[i] << "] arg since it already exists");
+      } else {
+        m_params.push_back(std::string(m_argv[i]));
+      }
+    }
+  }
+}
+
+bool CommandLineArgs::hasParamWithValue(const char* paramKey) const {
+  return m_paramsWithValue.find(std::string(paramKey)) != m_paramsWithValue.end();
+}
+
+const char* CommandLineArgs::getParamValue(const char* paramKey) const {
+  std::map<std::string, std::string>::const_iterator iter = m_paramsWithValue.find(std::string(paramKey));
+  return iter != m_paramsWithValue.end() ? iter->second.c_str() : "";
+}
+
+bool CommandLineArgs::hasParam(const char* paramKey) const {
+  return std::find(m_params.begin(), m_params.end(), std::string(paramKey)) != m_params.end();
+}
+
+bool CommandLineArgs::empty(void) const {
+  return m_params.empty() && m_paramsWithValue.empty();
+}
+
+std::size_t CommandLineArgs::size(void) const {
+  return m_params.size() + m_paramsWithValue.size();
+}
+
+base::type::ostream_t& operator<<(base::type::ostream_t& os, const CommandLineArgs& c) {
+  for (int i = 1; i < c.m_argc; ++i) {
+    os << ELPP_LITERAL("[") << c.m_argv[i] << ELPP_LITERAL("]");
+    if (i < c.m_argc - 1) {
+      os << ELPP_LITERAL(" ");
+    }
+  }
+  return os;
+}
+
+} // namespace utils
+
+// el::base::threading
+namespace threading {
+
+#if ELPP_THREADING_ENABLED
+#  if ELPP_USE_STD_THREADING
+#      if ELPP_ASYNC_LOGGING
+static void msleep(int ms) {
+  // Only when async logging enabled - this is because async is strict on compiler
+#         if defined(ELPP_NO_SLEEP_FOR)
+  usleep(ms * 1000);
+#         else
+  std::this_thread::sleep_for(std::chrono::milliseconds(ms));
+#         endif  // defined(ELPP_NO_SLEEP_FOR)
+}
+#      endif  // ELPP_ASYNC_LOGGING
+#  endif  // !ELPP_USE_STD_THREADING
+#endif  // ELPP_THREADING_ENABLED
+
+} // namespace threading
+
+// el::base
+
+// SubsecondPrecision
+
+void SubsecondPrecision::init(int width) {
+  if (width < 1 || width > 6) {
+    width = base::consts::kDefaultSubsecondPrecision;
+  }
+  m_width = width;
+  switch (m_width) {
+  case 3:
+    m_offset = 1000;
+    break;
+  case 4:
+    m_offset = 100;
+    break;
+  case 5:
+    m_offset = 10;
+    break;
+  case 6:
+    m_offset = 1;
+    break;
+  default:
+    m_offset = 1000;
+    break;
+  }
+}
+
+// LogFormat
+
+LogFormat::LogFormat(void) :
+  m_level(Level::Unknown),
+  m_userFormat(base::type::string_t()),
+  m_format(base::type::string_t()),
+  m_dateTimeFormat(std::string()),
+  m_flags(0x0),
+  m_currentUser(base::utils::OS::currentUser()),
+  m_currentHost(base::utils::OS::currentHost()) {
+}
+
+LogFormat::LogFormat(Level level, const base::type::string_t& format)
+  : m_level(level), m_userFormat(format), m_currentUser(base::utils::OS::currentUser()),
+    m_currentHost(base::utils::OS::currentHost()) {
+  parseFromFormat(m_userFormat);
+}
+
+LogFormat::LogFormat(const LogFormat& logFormat):
+  m_level(logFormat.m_level),
+  m_userFormat(logFormat.m_userFormat),
+  m_format(logFormat.m_format),
+  m_dateTimeFormat(logFormat.m_dateTimeFormat),
+  m_flags(logFormat.m_flags),
+  m_currentUser(logFormat.m_currentUser),
+  m_currentHost(logFormat.m_currentHost) {
+}
+
+LogFormat::LogFormat(LogFormat&& logFormat) {
+  m_level = std::move(logFormat.m_level);
+  m_userFormat = std::move(logFormat.m_userFormat);
+  m_format = std::move(logFormat.m_format);
+  m_dateTimeFormat = std::move(logFormat.m_dateTimeFormat);
+  m_flags = std::move(logFormat.m_flags);
+  m_currentUser = std::move(logFormat.m_currentUser);
+  m_currentHost = std::move(logFormat.m_currentHost);
+}
+
+LogFormat& LogFormat::operator=(const LogFormat& logFormat) {
+  if (&logFormat != this) {
+    m_level = logFormat.m_level;
+    m_userFormat = logFormat.m_userFormat;
+    m_dateTimeFormat = logFormat.m_dateTimeFormat;
+    m_flags = logFormat.m_flags;
+    m_currentUser = logFormat.m_currentUser;
+    m_currentHost = logFormat.m_currentHost;
+  }
+  return *this;
+}
+
+bool LogFormat::operator==(const LogFormat& other) {
+  return m_level == other.m_level && m_userFormat == other.m_userFormat && m_format == other.m_format &&
+         m_dateTimeFormat == other.m_dateTimeFormat && m_flags == other.m_flags;
+}
+
+/// @brief Updates format to be used while logging.
+/// @param userFormat User provided format
+void LogFormat::parseFromFormat(const base::type::string_t& userFormat) {
+  // We make copy because we will be changing the format
+  // i.e, removing user provided date format from original format
+  // and then storing it.
+  base::type::string_t formatCopy = userFormat;
+  m_flags = 0x0;
+  auto conditionalAddFlag = [&](const base::type::char_t* specifier, base::FormatFlags flag) {
+    std::size_t foundAt = base::type::string_t::npos;
+    while ((foundAt = formatCopy.find(specifier, foundAt + 1)) != base::type::string_t::npos) {
+      if (foundAt > 0 && formatCopy[foundAt - 1] == base::consts::kFormatSpecifierChar) {
+        if (hasFlag(flag)) {
+          // If we already have flag we remove the escape chars so that '%%' is turned to '%'
+          // even after specifier resolution - this is because we only replaceFirst specifier
+          formatCopy.erase(foundAt > 0 ? foundAt - 1 : 0, 1);
+          ++foundAt;
+        }
+      } else {
+        if (!hasFlag(flag)) addFlag(flag);
+      }
+    }
+  };
+  conditionalAddFlag(base::consts::kAppNameFormatSpecifier, base::FormatFlags::AppName);
+  conditionalAddFlag(base::consts::kSeverityLevelFormatSpecifier, base::FormatFlags::Level);
+  conditionalAddFlag(base::consts::kSeverityLevelShortFormatSpecifier, base::FormatFlags::LevelShort);
+  conditionalAddFlag(base::consts::kLoggerIdFormatSpecifier, base::FormatFlags::LoggerId);
+  conditionalAddFlag(base::consts::kThreadIdFormatSpecifier, base::FormatFlags::ThreadId);
+  conditionalAddFlag(base::consts::kLogFileFormatSpecifier, base::FormatFlags::File);
+  conditionalAddFlag(base::consts::kLogFileBaseFormatSpecifier, base::FormatFlags::FileBase);
+  conditionalAddFlag(base::consts::kLogLineFormatSpecifier, base::FormatFlags::Line);
+  conditionalAddFlag(base::consts::kLogLocationFormatSpecifier, base::FormatFlags::Location);
+  conditionalAddFlag(base::consts::kLogFunctionFormatSpecifier, base::FormatFlags::Function);
+  conditionalAddFlag(base::consts::kCurrentUserFormatSpecifier, base::FormatFlags::User);
+  conditionalAddFlag(base::consts::kCurrentHostFormatSpecifier, base::FormatFlags::Host);
+  conditionalAddFlag(base::consts::kMessageFormatSpecifier, base::FormatFlags::LogMessage);
+  conditionalAddFlag(base::consts::kVerboseLevelFormatSpecifier, base::FormatFlags::VerboseLevel);
+  // For date/time we need to extract user's date format first
+  std::size_t dateIndex = std::string::npos;
+  if ((dateIndex = formatCopy.find(base::consts::kDateTimeFormatSpecifier)) != std::string::npos) {
+    while (dateIndex > 0 && formatCopy[dateIndex - 1] == base::consts::kFormatSpecifierChar) {
+      dateIndex = formatCopy.find(base::consts::kDateTimeFormatSpecifier, dateIndex + 1);
+    }
+    if (dateIndex != std::string::npos) {
+      addFlag(base::FormatFlags::DateTime);
+      updateDateFormat(dateIndex, formatCopy);
+    }
+  }
+  m_format = formatCopy;
+  updateFormatSpec();
+}
+
+void LogFormat::updateDateFormat(std::size_t index, base::type::string_t& currFormat) {
+  if (hasFlag(base::FormatFlags::DateTime)) {
+    index += ELPP_STRLEN(base::consts::kDateTimeFormatSpecifier);
+  }
+  const base::type::char_t* ptr = currFormat.c_str() + index;
+  if ((currFormat.size() > index) && (ptr[0] == '{')) {
+    // User has provided format for date/time
+    ++ptr;
+    int count = 1;  // Start by 1 in order to remove starting brace
+    std::stringstream ss;
+    for (; *ptr; ++ptr, ++count) {
+      if (*ptr == '}') {
+        ++count;  // In order to remove ending brace
+        break;
+      }
+      ss << static_cast<char>(*ptr);
+    }
+    currFormat.erase(index, count);
+    m_dateTimeFormat = ss.str();
+  } else {
+    // No format provided, use default
+    if (hasFlag(base::FormatFlags::DateTime)) {
+      m_dateTimeFormat = std::string(base::consts::kDefaultDateTimeFormat);
+    }
+  }
+}
+
+void LogFormat::updateFormatSpec(void) {
+  // Do not use switch over strongly typed enums because Intel C++ compilers dont support them yet.
+  if (m_level == Level::Debug) {
+    base::utils::Str::replaceFirstWithEscape(m_format, base::consts::kSeverityLevelFormatSpecifier,
+        base::consts::kDebugLevelLogValue);
+    base::utils::Str::replaceFirstWithEscape(m_format, base::consts::kSeverityLevelShortFormatSpecifier,
+        base::consts::kDebugLevelShortLogValue);
+  } else if (m_level == Level::Info) {
+    base::utils::Str::replaceFirstWithEscape(m_format, base::consts::kSeverityLevelFormatSpecifier,
+        base::consts::kInfoLevelLogValue);
+    base::utils::Str::replaceFirstWithEscape(m_format, base::consts::kSeverityLevelShortFormatSpecifier,
+        base::consts::kInfoLevelShortLogValue);
+  } else if (m_level == Level::Warning) {
+    base::utils::Str::replaceFirstWithEscape(m_format, base::consts::kSeverityLevelFormatSpecifier,
+        base::consts::kWarningLevelLogValue);
+    base::utils::Str::replaceFirstWithEscape(m_format, base::consts::kSeverityLevelShortFormatSpecifier,
+        base::consts::kWarningLevelShortLogValue);
+  } else if (m_level == Level::Error) {
+    base::utils::Str::replaceFirstWithEscape(m_format, base::consts::kSeverityLevelFormatSpecifier,
+        base::consts::kErrorLevelLogValue);
+    base::utils::Str::replaceFirstWithEscape(m_format, base::consts::kSeverityLevelShortFormatSpecifier,
+        base::consts::kErrorLevelShortLogValue);
+  } else if (m_level == Level::Fatal) {
+    base::utils::Str::replaceFirstWithEscape(m_format, base::consts::kSeverityLevelFormatSpecifier,
+        base::consts::kFatalLevelLogValue);
+    base::utils::Str::replaceFirstWithEscape(m_format, base::consts::kSeverityLevelShortFormatSpecifier,
+        base::consts::kFatalLevelShortLogValue);
+  } else if (m_level == Level::Verbose) {
+    base::utils::Str::replaceFirstWithEscape(m_format, base::consts::kSeverityLevelFormatSpecifier,
+        base::consts::kVerboseLevelLogValue);
+    base::utils::Str::replaceFirstWithEscape(m_format, base::consts::kSeverityLevelShortFormatSpecifier,
+        base::consts::kVerboseLevelShortLogValue);
+  } else if (m_level == Level::Trace) {
+    base::utils::Str::replaceFirstWithEscape(m_format, base::consts::kSeverityLevelFormatSpecifier,
+        base::consts::kTraceLevelLogValue);
+    base::utils::Str::replaceFirstWithEscape(m_format, base::consts::kSeverityLevelShortFormatSpecifier,
+        base::consts::kTraceLevelShortLogValue);
+  }
+  if (hasFlag(base::FormatFlags::User)) {
+    base::utils::Str::replaceFirstWithEscape(m_format, base::consts::kCurrentUserFormatSpecifier,
+        m_currentUser);
+  }
+  if (hasFlag(base::FormatFlags::Host)) {
+    base::utils::Str::replaceFirstWithEscape(m_format, base::consts::kCurrentHostFormatSpecifier,
+        m_currentHost);
+  }
+  // Ignore Level::Global and Level::Unknown
+}
+
+// TypedConfigurations
+
+TypedConfigurations::TypedConfigurations(Configurations* configurations,
+    base::LogStreamsReferenceMap* logStreamsReference) {
+  m_configurations = configurations;
+  m_logStreamsReference = logStreamsReference;
+  build(m_configurations);
+}
+
+TypedConfigurations::TypedConfigurations(const TypedConfigurations& other) {
+  this->m_configurations = other.m_configurations;
+  this->m_logStreamsReference = other.m_logStreamsReference;
+  build(m_configurations);
+}
+
+bool TypedConfigurations::enabled(Level level) {
+  return getConfigByVal<bool>(level, &m_enabledMap, "enabled");
+}
+
+bool TypedConfigurations::toFile(Level level) {
+  return getConfigByVal<bool>(level, &m_toFileMap, "toFile");
+}
+
+const std::string& TypedConfigurations::filename(Level level) {
+  return getConfigByRef<std::string>(level, &m_filenameMap, "filename");
+}
+
+bool TypedConfigurations::toStandardOutput(Level level) {
+  return getConfigByVal<bool>(level, &m_toStandardOutputMap, "toStandardOutput");
+}
+
+const base::LogFormat& TypedConfigurations::logFormat(Level level) {
+  return getConfigByRef<base::LogFormat>(level, &m_logFormatMap, "logFormat");
+}
+
+const base::SubsecondPrecision& TypedConfigurations::subsecondPrecision(Level level) {
+  return getConfigByRef<base::SubsecondPrecision>(level, &m_subsecondPrecisionMap, "subsecondPrecision");
+}
+
+const base::MillisecondsWidth& TypedConfigurations::millisecondsWidth(Level level) {
+  return getConfigByRef<base::MillisecondsWidth>(level, &m_subsecondPrecisionMap, "millisecondsWidth");
+}
+
+bool TypedConfigurations::performanceTracking(Level level) {
+  return getConfigByVal<bool>(level, &m_performanceTrackingMap, "performanceTracking");
+}
+
+base::type::fstream_t* TypedConfigurations::fileStream(Level level) {
+  return getConfigByRef<base::FileStreamPtr>(level, &m_fileStreamMap, "fileStream").get();
+}
+
+std::size_t TypedConfigurations::maxLogFileSize(Level level) {
+  return getConfigByVal<std::size_t>(level, &m_maxLogFileSizeMap, "maxLogFileSize");
+}
+
+std::size_t TypedConfigurations::logFlushThreshold(Level level) {
+  return getConfigByVal<std::size_t>(level, &m_logFlushThresholdMap, "logFlushThreshold");
+}
+
+void TypedConfigurations::build(Configurations* configurations) {
+  base::threading::ScopedLock scopedLock(lock());
+  auto getBool = [] (std::string boolStr) -> bool {  // Pass by value for trimming
+    base::utils::Str::trim(boolStr);
+    return (boolStr == "TRUE" || boolStr == "true" || boolStr == "1");
+  };
+  std::vector<Configuration*> withFileSizeLimit;
+  for (Configurations::const_iterator it = configurations->begin(); it != configurations->end(); ++it) {
+    Configuration* conf = *it;
+    // We cannot use switch on strong enums because Intel C++ dont support them yet
+    if (conf->configurationType() == ConfigurationType::Enabled) {
+      setValue(conf->level(), getBool(conf->value()), &m_enabledMap);
+    } else if (conf->configurationType() == ConfigurationType::ToFile) {
+      setValue(conf->level(), getBool(conf->value()), &m_toFileMap);
+    } else if (conf->configurationType() == ConfigurationType::ToStandardOutput) {
+      setValue(conf->level(), getBool(conf->value()), &m_toStandardOutputMap);
+    } else if (conf->configurationType() == ConfigurationType::Filename) {
+      // We do not yet configure filename but we will configure in another
+      // loop. This is because if file cannot be created, we will force ToFile
+      // to be false. Because configuring logger is not necessarily performance
+      // sensative operation, we can live with another loop; (by the way this loop
+      // is not very heavy either)
+    } else if (conf->configurationType() == ConfigurationType::Format) {
+      setValue(conf->level(), base::LogFormat(conf->level(),
+                                              base::type::string_t(conf->value().begin(), conf->value().end())), &m_logFormatMap);
+    } else if (conf->configurationType() == ConfigurationType::SubsecondPrecision) {
+      setValue(Level::Global,
+               base::SubsecondPrecision(static_cast<int>(getULong(conf->value()))), &m_subsecondPrecisionMap);
+    } else if (conf->configurationType() == ConfigurationType::PerformanceTracking) {
+      setValue(Level::Global, getBool(conf->value()), &m_performanceTrackingMap);
+    } else if (conf->configurationType() == ConfigurationType::MaxLogFileSize) {
+      setValue(conf->level(), static_cast<std::size_t>(getULong(conf->value())), &m_maxLogFileSizeMap);
+#if !defined(ELPP_NO_DEFAULT_LOG_FILE)
+      withFileSizeLimit.push_back(conf);
+#endif  // !defined(ELPP_NO_DEFAULT_LOG_FILE)
+    } else if (conf->configurationType() == ConfigurationType::LogFlushThreshold) {
+      setValue(conf->level(), static_cast<std::size_t>(getULong(conf->value())), &m_logFlushThresholdMap);
+    }
+  }
+  // As mentioned earlier, we will now set filename configuration in separate loop to deal with non-existent files
+  for (Configurations::const_iterator it = configurations->begin(); it != configurations->end(); ++it) {
+    Configuration* conf = *it;
+    if (conf->configurationType() == ConfigurationType::Filename) {
+      insertFile(conf->level(), conf->value());
+    }
+  }
+  for (std::vector<Configuration*>::iterator conf = withFileSizeLimit.begin();
+       conf != withFileSizeLimit.end(); ++conf) {
+    // This is not unsafe as mutex is locked in currect scope
+    unsafeValidateFileRolling((*conf)->level(), base::defaultPreRollOutCallback);
+  }
+}
+
+unsigned long TypedConfigurations::getULong(std::string confVal) {
+  bool valid = true;
+  base::utils::Str::trim(confVal);
+  valid = !confVal.empty() && std::find_if(confVal.begin(), confVal.end(),
+  [](char c) {
+    return !base::utils::Str::isDigit(c);
+  }) == confVal.end();
+  if (!valid) {
+    valid = false;
+    ELPP_ASSERT(valid, "Configuration value not a valid integer [" << confVal << "]");
+    return 0;
+  }
+  return atol(confVal.c_str());
+}
+
+std::string TypedConfigurations::resolveFilename(const std::string& filename) {
+  std::string resultingFilename = filename;
+  std::size_t dateIndex = std::string::npos;
+  std::string dateTimeFormatSpecifierStr = std::string(base::consts::kDateTimeFormatSpecifierForFilename);
+  if ((dateIndex = resultingFilename.find(dateTimeFormatSpecifierStr.c_str())) != std::string::npos) {
+    while (dateIndex > 0 && resultingFilename[dateIndex - 1] == base::consts::kFormatSpecifierChar) {
+      dateIndex = resultingFilename.find(dateTimeFormatSpecifierStr.c_str(), dateIndex + 1);
+    }
+    if (dateIndex != std::string::npos) {
+      const char* ptr = resultingFilename.c_str() + dateIndex;
+      // Goto end of specifier
+      ptr += dateTimeFormatSpecifierStr.size();
+      std::string fmt;
+      if ((resultingFilename.size() > dateIndex) && (ptr[0] == '{')) {
+        // User has provided format for date/time
+        ++ptr;
+        int count = 1;  // Start by 1 in order to remove starting brace
+        std::stringstream ss;
+        for (; *ptr; ++ptr, ++count) {
+          if (*ptr == '}') {
+            ++count;  // In order to remove ending brace
+            break;
+          }
+          ss << *ptr;
+        }
+        resultingFilename.erase(dateIndex + dateTimeFormatSpecifierStr.size(), count);
+        fmt = ss.str();
+      } else {
+        fmt = std::string(base::consts::kDefaultDateTimeFormatInFilename);
+      }
+      base::SubsecondPrecision ssPrec(3);
+      std::string now = base::utils::DateTime::getDateTime(fmt.c_str(), &ssPrec);
+      base::utils::Str::replaceAll(now, '/', '-'); // Replace path element since we are dealing with filename
+      base::utils::Str::replaceAll(resultingFilename, dateTimeFormatSpecifierStr, now);
+    }
+  }
+  return resultingFilename;
+}
+
+void TypedConfigurations::insertFile(Level level, const std::string& fullFilename) {
+#if defined(ELPP_NO_LOG_TO_FILE)
+  setValue(level, false, &m_toFileMap);
+  ELPP_UNUSED(fullFilename);
+  m_fileStreamMap.insert(std::make_pair(level, base::FileStreamPtr(nullptr)));
+  return;
+#endif
+  std::string resolvedFilename = resolveFilename(fullFilename);
+  if (resolvedFilename.empty()) {
+    std::cerr << "Could not load empty file for logging, please re-check your configurations for level ["
+              << LevelHelper::convertToString(level) << "]";
+  }
+  std::string filePath = base::utils::File::extractPathFromFilename(resolvedFilename, base::consts::kFilePathSeperator);
+  if (filePath.size() < resolvedFilename.size()) {
+    base::utils::File::createPath(filePath);
+  }
+  auto create = [&](Level level) {
+    base::LogStreamsReferenceMap::iterator filestreamIter = m_logStreamsReference->find(resolvedFilename);
+    base::type::fstream_t* fs = nullptr;
+    if (filestreamIter == m_logStreamsReference->end()) {
+      // We need a completely new stream, nothing to share with
+      fs = base::utils::File::newFileStream(resolvedFilename);
+      m_filenameMap.insert(std::make_pair(level, resolvedFilename));
+      m_fileStreamMap.insert(std::make_pair(level, base::FileStreamPtr(fs)));
+      m_logStreamsReference->insert(std::make_pair(resolvedFilename, base::FileStreamPtr(m_fileStreamMap.at(level))));
+    } else {
+      // Woops! we have an existing one, share it!
+      m_filenameMap.insert(std::make_pair(level, filestreamIter->first));
+      m_fileStreamMap.insert(std::make_pair(level, base::FileStreamPtr(filestreamIter->second)));
+      fs = filestreamIter->second.get();
+    }
+    if (fs == nullptr) {
+      // We display bad file error from newFileStream()
+      ELPP_INTERNAL_ERROR("Setting [TO_FILE] of ["
+                          << LevelHelper::convertToString(level) << "] to FALSE", false);
+      setValue(level, false, &m_toFileMap);
+    }
+  };
+  // If we dont have file conf for any level, create it for Level::Global first
+  // otherwise create for specified level
+  create(m_filenameMap.empty() && m_fileStreamMap.empty() ? Level::Global : level);
+}
+
+bool TypedConfigurations::unsafeValidateFileRolling(Level level, const PreRollOutCallback& preRollOutCallback) {
+  base::type::fstream_t* fs = unsafeGetConfigByRef(level, &m_fileStreamMap, "fileStream").get();
+  if (fs == nullptr) {
+    return true;
+  }
+  std::size_t maxLogFileSize = unsafeGetConfigByVal(level, &m_maxLogFileSizeMap, "maxLogFileSize");
+  std::size_t currFileSize = base::utils::File::getSizeOfFile(fs);
+  if (maxLogFileSize != 0 && currFileSize >= maxLogFileSize) {
+    std::string fname = unsafeGetConfigByRef(level, &m_filenameMap, "filename");
+    ELPP_INTERNAL_INFO(1, "Truncating log file [" << fname << "] as a result of configurations for level ["
+                       << LevelHelper::convertToString(level) << "]");
+    fs->close();
+    preRollOutCallback(fname.c_str(), currFileSize);
+    fs->open(fname, std::fstream::out | std::fstream::trunc);
+    return true;
+  }
+  return false;
+}
+
+// RegisteredHitCounters
+
+bool RegisteredHitCounters::validateEveryN(const char* filename, base::type::LineNumber lineNumber, std::size_t n) {
+  base::threading::ScopedLock scopedLock(lock());
+  base::HitCounter* counter = get(filename, lineNumber);
+  if (counter == nullptr) {
+    registerNew(counter = new base::HitCounter(filename, lineNumber));
+  }
+  counter->validateHitCounts(n);
+  bool result = (n >= 1 && counter->hitCounts() != 0 && counter->hitCounts() % n == 0);
+  return result;
+}
+
+/// @brief Validates counter for hits >= N, i.e, registers new if does not exist otherwise updates original one
+/// @return True if validation resulted in triggering hit. Meaning logs should be written everytime true is returned
+bool RegisteredHitCounters::validateAfterN(const char* filename, base::type::LineNumber lineNumber, std::size_t n) {
+  base::threading::ScopedLock scopedLock(lock());
+  base::HitCounter* counter = get(filename, lineNumber);
+  if (counter == nullptr) {
+    registerNew(counter = new base::HitCounter(filename, lineNumber));
+  }
+  // Do not use validateHitCounts here since we do not want to reset counter here
+  // Note the >= instead of > because we are incrementing
+  // after this check
+  if (counter->hitCounts() >= n)
+    return true;
+  counter->increment();
+  return false;
+}
+
+/// @brief Validates counter for hits are <= n, i.e, registers new if does not exist otherwise updates original one
+/// @return True if validation resulted in triggering hit. Meaning logs should be written everytime true is returned
+bool RegisteredHitCounters::validateNTimes(const char* filename, base::type::LineNumber lineNumber, std::size_t n) {
+  base::threading::ScopedLock scopedLock(lock());
+  base::HitCounter* counter = get(filename, lineNumber);
+  if (counter == nullptr) {
+    registerNew(counter = new base::HitCounter(filename, lineNumber));
+  }
+  counter->increment();
+  // Do not use validateHitCounts here since we do not want to reset counter here
+  if (counter->hitCounts() <= n)
+    return true;
+  return false;
+}
+
+// RegisteredLoggers
+
+RegisteredLoggers::RegisteredLoggers(const LogBuilderPtr& defaultLogBuilder) :
+  m_defaultLogBuilder(defaultLogBuilder) {
+  m_defaultConfigurations.setToDefault();
+}
+
+Logger* RegisteredLoggers::get(const std::string& id, bool forceCreation) {
+  base::threading::ScopedLock scopedLock(lock());
+  Logger* logger_ = base::utils::Registry<Logger, std::string>::get(id);
+  if (logger_ == nullptr && forceCreation) {
+    bool validId = Logger::isValidId(id);
+    if (!validId) {
+      ELPP_ASSERT(validId, "Invalid logger ID [" << id << "]. Not registering this logger.");
+      return nullptr;
+    }
+    logger_ = new Logger(id, m_defaultConfigurations, &m_logStreamsReference);
+    logger_->m_logBuilder = m_defaultLogBuilder;
+    registerNew(id, logger_);
+    LoggerRegistrationCallback* callback = nullptr;
+    for (const std::pair<std::string, base::type::LoggerRegistrationCallbackPtr>& h
+         : m_loggerRegistrationCallbacks) {
+      callback = h.second.get();
+      if (callback != nullptr && callback->enabled()) {
+        callback->handle(logger_);
+      }
+    }
+  }
+  return logger_;
+}
+
+bool RegisteredLoggers::remove(const std::string& id) {
+  if (id == base::consts::kDefaultLoggerId) {
+    return false;
+  }
+  Logger* logger = base::utils::Registry<Logger, std::string>::get(id);
+  if (logger != nullptr) {
+    unregister(logger);
+  }
+  return true;
+}
+
+void RegisteredLoggers::unsafeFlushAll(void) {
+  ELPP_INTERNAL_INFO(1, "Flushing all log files");
+  for (base::LogStreamsReferenceMap::iterator it = m_logStreamsReference.begin();
+       it != m_logStreamsReference.end(); ++it) {
+    if (it->second.get() == nullptr) continue;
+    it->second->flush();
+  }
+}
+
+// VRegistry
+
+VRegistry::VRegistry(base::type::VerboseLevel level, base::type::EnumType* pFlags) : m_level(level), m_pFlags(pFlags) {
+}
+
+/// @brief Sets verbose level. Accepted range is 0-9
+void VRegistry::setLevel(base::type::VerboseLevel level) {
+  base::threading::ScopedLock scopedLock(lock());
+  if (level > 9)
+    m_level = base::consts::kMaxVerboseLevel;
+  else
+    m_level = level;
+}
+
+void VRegistry::setModules(const char* modules) {
+  base::threading::ScopedLock scopedLock(lock());
+  auto addSuffix = [](std::stringstream& ss, const char* sfx, const char* prev) {
+    if (prev != nullptr && base::utils::Str::endsWith(ss.str(), std::string(prev))) {
+      std::string chr(ss.str().substr(0, ss.str().size() - strlen(prev)));
+      ss.str(std::string(""));
+      ss << chr;
+    }
+    if (base::utils::Str::endsWith(ss.str(), std::string(sfx))) {
+      std::string chr(ss.str().substr(0, ss.str().size() - strlen(sfx)));
+      ss.str(std::string(""));
+      ss << chr;
+    }
+    ss << sfx;
+  };
+  auto insert = [&](std::stringstream& ss, base::type::VerboseLevel level) {
+    if (!base::utils::hasFlag(LoggingFlag::DisableVModulesExtensions, *m_pFlags)) {
+      addSuffix(ss, ".h", nullptr);
+      m_modules.insert(std::make_pair(ss.str(), level));
+      addSuffix(ss, ".c", ".h");
+      m_modules.insert(std::make_pair(ss.str(), level));
+      addSuffix(ss, ".cpp", ".c");
+      m_modules.insert(std::make_pair(ss.str(), level));
+      addSuffix(ss, ".cc", ".cpp");
+      m_modules.insert(std::make_pair(ss.str(), level));
+      addSuffix(ss, ".cxx", ".cc");
+      m_modules.insert(std::make_pair(ss.str(), level));
+      addSuffix(ss, ".-inl.h", ".cxx");
+      m_modules.insert(std::make_pair(ss.str(), level));
+      addSuffix(ss, ".hxx", ".-inl.h");
+      m_modules.insert(std::make_pair(ss.str(), level));
+      addSuffix(ss, ".hpp", ".hxx");
+      m_modules.insert(std::make_pair(ss.str(), level));
+      addSuffix(ss, ".hh", ".hpp");
+    }
+    m_modules.insert(std::make_pair(ss.str(), level));
+  };
+  bool isMod = true;
+  bool isLevel = false;
+  std::stringstream ss;
+  int level = -1;
+  for (; *modules; ++modules) {
+    switch (*modules) {
+    case '=':
+      isLevel = true;
+      isMod = false;
+      break;
+    case ',':
+      isLevel = false;
+      isMod = true;
+      if (!ss.str().empty() && level != -1) {
+        insert(ss, static_cast<base::type::VerboseLevel>(level));
+        ss.str(std::string(""));
+        level = -1;
+      }
+      break;
+    default:
+      if (isMod) {
+        ss << *modules;
+      } else if (isLevel) {
+        if (isdigit(*modules)) {
+          level = static_cast<base::type::VerboseLevel>(*modules) - 48;
+        }
+      }
+      break;
+    }
+  }
+  if (!ss.str().empty() && level != -1) {
+    insert(ss, static_cast<base::type::VerboseLevel>(level));
+  }
+}
+
+bool VRegistry::allowed(base::type::VerboseLevel vlevel, const char* file) {
+  base::threading::ScopedLock scopedLock(lock());
+  if (m_modules.empty() || file == nullptr) {
+    return vlevel <= m_level;
+  } else {
+    char baseFilename[base::consts::kSourceFilenameMaxLength] = "";
+    base::utils::File::buildBaseFilename(file, baseFilename);
+    std::map<std::string, base::type::VerboseLevel>::iterator it = m_modules.begin();
+    for (; it != m_modules.end(); ++it) {
+      if (base::utils::Str::wildCardMatch(baseFilename, it->first.c_str())) {
+        return vlevel <= it->second;
+      }
+    }
+    if (base::utils::hasFlag(LoggingFlag::AllowVerboseIfModuleNotSpecified, *m_pFlags)) {
+      return true;
+    }
+    return false;
+  }
+}
+
+void VRegistry::setFromArgs(const base::utils::CommandLineArgs* commandLineArgs) {
+  if (commandLineArgs->hasParam("-v") || commandLineArgs->hasParam("--verbose") ||
+      commandLineArgs->hasParam("-V") || commandLineArgs->hasParam("--VERBOSE")) {
+    setLevel(base::consts::kMaxVerboseLevel);
+  } else if (commandLineArgs->hasParamWithValue("--v")) {
+    setLevel(static_cast<base::type::VerboseLevel>(atoi(commandLineArgs->getParamValue("--v"))));
+  } else if (commandLineArgs->hasParamWithValue("--V")) {
+    setLevel(static_cast<base::type::VerboseLevel>(atoi(commandLineArgs->getParamValue("--V"))));
+  } else if ((commandLineArgs->hasParamWithValue("-vmodule")) && vModulesEnabled()) {
+    setModules(commandLineArgs->getParamValue("-vmodule"));
+  } else if (commandLineArgs->hasParamWithValue("-VMODULE") && vModulesEnabled()) {
+    setModules(commandLineArgs->getParamValue("-VMODULE"));
+  }
+}
+
+#if !defined(ELPP_DEFAULT_LOGGING_FLAGS)
+#   define ELPP_DEFAULT_LOGGING_FLAGS 0x0
+#endif // !defined(ELPP_DEFAULT_LOGGING_FLAGS)
+// Storage
+#if ELPP_ASYNC_LOGGING
+Storage::Storage(const LogBuilderPtr& defaultLogBuilder, base::IWorker* asyncDispatchWorker) :
+#else
+Storage::Storage(const LogBuilderPtr& defaultLogBuilder) :
+#endif  // ELPP_ASYNC_LOGGING
+  m_registeredHitCounters(new base::RegisteredHitCounters()),
+  m_registeredLoggers(new base::RegisteredLoggers(defaultLogBuilder)),
+  m_flags(ELPP_DEFAULT_LOGGING_FLAGS),
+  m_vRegistry(new base::VRegistry(0, &m_flags)),
+#if ELPP_ASYNC_LOGGING
+  m_asyncLogQueue(new base::AsyncLogQueue()),
+  m_asyncDispatchWorker(asyncDispatchWorker),
+#endif  // ELPP_ASYNC_LOGGING
+  m_preRollOutCallback(base::defaultPreRollOutCallback) {
+  // Register default logger
+  m_registeredLoggers->get(std::string(base::consts::kDefaultLoggerId));
+  // We register default logger anyway (worse case it's not going to register) just in case
+  m_registeredLoggers->get("default");
+  // Register performance logger and reconfigure format
+  Logger* performanceLogger = m_registeredLoggers->get(std::string(base::consts::kPerformanceLoggerId));
+  m_registeredLoggers->get("performance");
+  performanceLogger->configurations()->setGlobally(ConfigurationType::Format, std::string("%datetime %level %msg"));
+  performanceLogger->reconfigure();
+#if defined(ELPP_SYSLOG)
+  // Register syslog logger and reconfigure format
+  Logger* sysLogLogger = m_registeredLoggers->get(std::string(base::consts::kSysLogLoggerId));
+  sysLogLogger->configurations()->setGlobally(ConfigurationType::Format, std::string("%level: %msg"));
+  sysLogLogger->reconfigure();
+#endif //  defined(ELPP_SYSLOG)
+  addFlag(LoggingFlag::AllowVerboseIfModuleNotSpecified);
+#if ELPP_ASYNC_LOGGING
+  installLogDispatchCallback<base::AsyncLogDispatchCallback>(std::string("AsyncLogDispatchCallback"));
+#else
+  installLogDispatchCallback<base::DefaultLogDispatchCallback>(std::string("DefaultLogDispatchCallback"));
+#endif  // ELPP_ASYNC_LOGGING
+#if defined(ELPP_FEATURE_ALL) || defined(ELPP_FEATURE_PERFORMANCE_TRACKING)
+  installPerformanceTrackingCallback<base::DefaultPerformanceTrackingCallback>
+  (std::string("DefaultPerformanceTrackingCallback"));
+#endif // defined(ELPP_FEATURE_ALL) || defined(ELPP_FEATURE_PERFORMANCE_TRACKING)
+  ELPP_INTERNAL_INFO(1, "Easylogging++ has been initialized");
+#if ELPP_ASYNC_LOGGING
+  m_asyncDispatchWorker->start();
+#endif  // ELPP_ASYNC_LOGGING
+}
+
+Storage::~Storage(void) {
+  ELPP_INTERNAL_INFO(4, "Destroying storage");
+#if ELPP_ASYNC_LOGGING
+  ELPP_INTERNAL_INFO(5, "Replacing log dispatch callback to synchronous");
+  uninstallLogDispatchCallback<base::AsyncLogDispatchCallback>(std::string("AsyncLogDispatchCallback"));
+  installLogDispatchCallback<base::DefaultLogDispatchCallback>(std::string("DefaultLogDispatchCallback"));
+  ELPP_INTERNAL_INFO(5, "Destroying asyncDispatchWorker");
+  base::utils::safeDelete(m_asyncDispatchWorker);
+  ELPP_INTERNAL_INFO(5, "Destroying asyncLogQueue");
+  base::utils::safeDelete(m_asyncLogQueue);
+#endif  // ELPP_ASYNC_LOGGING
+  ELPP_INTERNAL_INFO(5, "Destroying registeredHitCounters");
+  base::utils::safeDelete(m_registeredHitCounters);
+  ELPP_INTERNAL_INFO(5, "Destroying registeredLoggers");
+  base::utils::safeDelete(m_registeredLoggers);
+  ELPP_INTERNAL_INFO(5, "Destroying vRegistry");
+  base::utils::safeDelete(m_vRegistry);
+}
+
+bool Storage::hasCustomFormatSpecifier(const char* formatSpecifier) {
+  base::threading::ScopedLock scopedLock(lock());
+  return std::find(m_customFormatSpecifiers.begin(), m_customFormatSpecifiers.end(),
+                   formatSpecifier) != m_customFormatSpecifiers.end();
+}
+
+void Storage::installCustomFormatSpecifier(const CustomFormatSpecifier& customFormatSpecifier) {
+  if (hasCustomFormatSpecifier(customFormatSpecifier.formatSpecifier())) {
+    return;
+  }
+  base::threading::ScopedLock scopedLock(lock());
+  m_customFormatSpecifiers.push_back(customFormatSpecifier);
+}
+
+bool Storage::uninstallCustomFormatSpecifier(const char* formatSpecifier) {
+  base::threading::ScopedLock scopedLock(lock());
+  std::vector<CustomFormatSpecifier>::iterator it = std::find(m_customFormatSpecifiers.begin(),
+      m_customFormatSpecifiers.end(), formatSpecifier);
+  if (it != m_customFormatSpecifiers.end() && strcmp(formatSpecifier, it->formatSpecifier()) == 0) {
+    m_customFormatSpecifiers.erase(it);
+    return true;
+  }
+  return false;
+}
+
+void Storage::setApplicationArguments(int argc, char** argv) {
+  m_commandLineArgs.setArgs(argc, argv);
+  m_vRegistry->setFromArgs(commandLineArgs());
+  // default log file
+#if !defined(ELPP_DISABLE_LOG_FILE_FROM_ARG)
+  if (m_commandLineArgs.hasParamWithValue(base::consts::kDefaultLogFileParam)) {
+    Configurations c;
+    c.setGlobally(ConfigurationType::Filename,
+                  std::string(m_commandLineArgs.getParamValue(base::consts::kDefaultLogFileParam)));
+    registeredLoggers()->setDefaultConfigurations(c);
+    for (base::RegisteredLoggers::iterator it = registeredLoggers()->begin();
+         it != registeredLoggers()->end(); ++it) {
+      it->second->configure(c);
+    }
+  }
+#endif  // !defined(ELPP_DISABLE_LOG_FILE_FROM_ARG)
+#if defined(ELPP_LOGGING_FLAGS_FROM_ARG)
+  if (m_commandLineArgs.hasParamWithValue(base::consts::kLoggingFlagsParam)) {
+    int userInput = atoi(m_commandLineArgs.getParamValue(base::consts::kLoggingFlagsParam));
+    if (ELPP_DEFAULT_LOGGING_FLAGS == 0x0) {
+      m_flags = userInput;
+    } else {
+      base::utils::addFlag<base::type::EnumType>(userInput, &m_flags);
+    }
+  }
+#endif  // defined(ELPP_LOGGING_FLAGS_FROM_ARG)
+}
+
+// DefaultLogDispatchCallback
+
+void DefaultLogDispatchCallback::handle(const LogDispatchData* data) {
+  m_data = data;
+  dispatch(m_data->logMessage()->logger()->logBuilder()->build(m_data->logMessage(),
+           m_data->dispatchAction() == base::DispatchAction::NormalLog));
+}
+
+void DefaultLogDispatchCallback::dispatch(base::type::string_t&& logLine) {
+  if (m_data->dispatchAction() == base::DispatchAction::NormalLog) {
+    if (m_data->logMessage()->logger()->m_typedConfigurations->toFile(m_data->logMessage()->level())) {
+      base::type::fstream_t* fs = m_data->logMessage()->logger()->m_typedConfigurations->fileStream(
+                                    m_data->logMessage()->level());
+      if (fs != nullptr) {
+        fs->write(logLine.c_str(), logLine.size());
+        if (fs->fail()) {
+          ELPP_INTERNAL_ERROR("Unable to write log to file ["
+                              << m_data->logMessage()->logger()->m_typedConfigurations->filename(m_data->logMessage()->level()) << "].\n"
+                              << "Few possible reasons (could be something else):\n" << "      * Permission denied\n"
+                              << "      * Disk full\n" << "      * Disk is not writable", true);
+        } else {
+          if (ELPP->hasFlag(LoggingFlag::ImmediateFlush)
+              || (m_data->logMessage()->logger()->isFlushNeeded(m_data->logMessage()->level()))) {
+            m_data->logMessage()->logger()->flush(m_data->logMessage()->level(), fs);
+          }
+        }
+      } else {
+        ELPP_INTERNAL_ERROR("Log file for [" << LevelHelper::convertToString(m_data->logMessage()->level()) << "] "
+                            << "has not been configured but [TO_FILE] is configured to TRUE. [Logger ID: "
+                            << m_data->logMessage()->logger()->id() << "]", false);
+      }
+    }
+    if (m_data->logMessage()->logger()->m_typedConfigurations->toStandardOutput(m_data->logMessage()->level())) {
+      if (ELPP->hasFlag(LoggingFlag::ColoredTerminalOutput))
+        m_data->logMessage()->logger()->logBuilder()->convertToColoredOutput(&logLine, m_data->logMessage()->level());
+      ELPP_COUT << ELPP_COUT_LINE(logLine);
+    }
+  }
+#if defined(ELPP_SYSLOG)
+  else if (m_data->dispatchAction() == base::DispatchAction::SysLog) {
+    // Determine syslog priority
+    int sysLogPriority = 0;
+    if (m_data->logMessage()->level() == Level::Fatal)
+      sysLogPriority = LOG_EMERG;
+    else if (m_data->logMessage()->level() == Level::Error)
+      sysLogPriority = LOG_ERR;
+    else if (m_data->logMessage()->level() == Level::Warning)
+      sysLogPriority = LOG_WARNING;
+    else if (m_data->logMessage()->level() == Level::Info)
+      sysLogPriority = LOG_INFO;
+    else if (m_data->logMessage()->level() == Level::Debug)
+      sysLogPriority = LOG_DEBUG;
+    else
+      sysLogPriority = LOG_NOTICE;
+#  if defined(ELPP_UNICODE)
+    char* line = base::utils::Str::wcharPtrToCharPtr(logLine.c_str());
+    syslog(sysLogPriority, "%s", line);
+    free(line);
+#  else
+    syslog(sysLogPriority, "%s", logLine.c_str());
+#  endif
+  }
+#endif  // defined(ELPP_SYSLOG)
+}
+
+#if ELPP_ASYNC_LOGGING
+
+// AsyncLogDispatchCallback
+
+void AsyncLogDispatchCallback::handle(const LogDispatchData* data) {
+  base::type::string_t logLine = data->logMessage()->logger()->logBuilder()->build(data->logMessage(),
+                                 data->dispatchAction() == base::DispatchAction::NormalLog);
+  if (data->dispatchAction() == base::DispatchAction::NormalLog
+      && data->logMessage()->logger()->typedConfigurations()->toStandardOutput(data->logMessage()->level())) {
+    if (ELPP->hasFlag(LoggingFlag::ColoredTerminalOutput))
+      data->logMessage()->logger()->logBuilder()->convertToColoredOutput(&logLine, data->logMessage()->level());
+    ELPP_COUT << ELPP_COUT_LINE(logLine);
+  }
+  // Save resources and only queue if we want to write to file otherwise just ignore handler
+  if (data->logMessage()->logger()->typedConfigurations()->toFile(data->logMessage()->level())) {
+    ELPP->asyncLogQueue()->push(AsyncLogItem(*(data->logMessage()), *data, logLine));
+  }
+}
+
+// AsyncDispatchWorker
+AsyncDispatchWorker::AsyncDispatchWorker() {
+  setContinueRunning(false);
+}
+
+AsyncDispatchWorker::~AsyncDispatchWorker() {
+  setContinueRunning(false);
+  ELPP_INTERNAL_INFO(6, "Stopping dispatch worker - Cleaning log queue");
+  clean();
+  ELPP_INTERNAL_INFO(6, "Log queue cleaned");
+}
+
+bool AsyncDispatchWorker::clean(void) {
+  std::mutex m;
+  std::unique_lock<std::mutex> lk(m);
+  cv.wait(lk, [] { return !ELPP->asyncLogQueue()->empty(); });
+  emptyQueue();
+  lk.unlock();
+  cv.notify_one();
+  return ELPP->asyncLogQueue()->empty();
+}
+
+void AsyncDispatchWorker::emptyQueue(void) {
+  while (!ELPP->asyncLogQueue()->empty()) {
+    AsyncLogItem data = ELPP->asyncLogQueue()->next();
+    handle(&data);
+    base::threading::msleep(100);
+  }
+}
+
+void AsyncDispatchWorker::start(void) {
+  base::threading::msleep(5000); // 5s (why?)
+  setContinueRunning(true);
+  std::thread t1(&AsyncDispatchWorker::run, this);
+  t1.join();
+}
+
+void AsyncDispatchWorker::handle(AsyncLogItem* logItem) {
+  LogDispatchData* data = logItem->data();
+  LogMessage* logMessage = logItem->logMessage();
+  Logger* logger = logMessage->logger();
+  base::TypedConfigurations* conf = logger->typedConfigurations();
+  base::type::string_t logLine = logItem->logLine();
+  if (data->dispatchAction() == base::DispatchAction::NormalLog) {
+    if (conf->toFile(logMessage->level())) {
+      base::type::fstream_t* fs = conf->fileStream(logMessage->level());
+      if (fs != nullptr) {
+        fs->write(logLine.c_str(), logLine.size());
+        if (fs->fail()) {
+          ELPP_INTERNAL_ERROR("Unable to write log to file ["
+                              << conf->filename(logMessage->level()) << "].\n"
+                              << "Few possible reasons (could be something else):\n" << "      * Permission denied\n"
+                              << "      * Disk full\n" << "      * Disk is not writable", true);
+        } else {
+          if (ELPP->hasFlag(LoggingFlag::ImmediateFlush) || (logger->isFlushNeeded(logMessage->level()))) {
+            logger->flush(logMessage->level(), fs);
+          }
+        }
+      } else {
+        ELPP_INTERNAL_ERROR("Log file for [" << LevelHelper::convertToString(logMessage->level()) << "] "
+                            << "has not been configured but [TO_FILE] is configured to TRUE. [Logger ID: " << logger->id() << "]", false);
+      }
+    }
+  }
+#  if defined(ELPP_SYSLOG)
+  else if (data->dispatchAction() == base::DispatchAction::SysLog) {
+    // Determine syslog priority
+    int sysLogPriority = 0;
+    if (logMessage->level() == Level::Fatal)
+      sysLogPriority = LOG_EMERG;
+    else if (logMessage->level() == Level::Error)
+      sysLogPriority = LOG_ERR;
+    else if (logMessage->level() == Level::Warning)
+      sysLogPriority = LOG_WARNING;
+    else if (logMessage->level() == Level::Info)
+      sysLogPriority = LOG_INFO;
+    else if (logMessage->level() == Level::Debug)
+      sysLogPriority = LOG_DEBUG;
+    else
+      sysLogPriority = LOG_NOTICE;
+#      if defined(ELPP_UNICODE)
+    char* line = base::utils::Str::wcharPtrToCharPtr(logLine.c_str());
+    syslog(sysLogPriority, "%s", line);
+    free(line);
+#      else
+    syslog(sysLogPriority, "%s", logLine.c_str());
+#      endif
+  }
+#  endif  // defined(ELPP_SYSLOG)
+}
+
+void AsyncDispatchWorker::run(void) {
+  while (continueRunning()) {
+    emptyQueue();
+    base::threading::msleep(10); // 10ms
+  }
+}
+#endif  // ELPP_ASYNC_LOGGING
+
+// DefaultLogBuilder
+
+base::type::string_t DefaultLogBuilder::build(const LogMessage* logMessage, bool appendNewLine) const {
+  base::TypedConfigurations* tc = logMessage->logger()->typedConfigurations();
+  const base::LogFormat* logFormat = &tc->logFormat(logMessage->level());
+  base::type::string_t logLine = logFormat->format();
+  char buff[base::consts::kSourceFilenameMaxLength + base::consts::kSourceLineMaxLength] = "";
+  const char* bufLim = buff + sizeof(buff);
+  if (logFormat->hasFlag(base::FormatFlags::AppName)) {
+    // App name
+    base::utils::Str::replaceFirstWithEscape(logLine, base::consts::kAppNameFormatSpecifier,
+        logMessage->logger()->parentApplicationName());
+  }
+  if (logFormat->hasFlag(base::FormatFlags::ThreadId)) {
+    // Thread ID
+    base::utils::Str::replaceFirstWithEscape(logLine, base::consts::kThreadIdFormatSpecifier,
+        ELPP->getThreadName(base::threading::getCurrentThreadId()));
+  }
+  if (logFormat->hasFlag(base::FormatFlags::DateTime)) {
+    // DateTime
+    base::utils::Str::replaceFirstWithEscape(logLine, base::consts::kDateTimeFormatSpecifier,
+        base::utils::DateTime::getDateTime(logFormat->dateTimeFormat().c_str(),
+                                           &tc->subsecondPrecision(logMessage->level())));
+  }
+  if (logFormat->hasFlag(base::FormatFlags::Function)) {
+    // Function
+    base::utils::Str::replaceFirstWithEscape(logLine, base::consts::kLogFunctionFormatSpecifier, logMessage->func());
+  }
+  if (logFormat->hasFlag(base::FormatFlags::File)) {
+    // File
+    base::utils::Str::clearBuff(buff, base::consts::kSourceFilenameMaxLength);
+    base::utils::File::buildStrippedFilename(logMessage->file().c_str(), buff);
+    base::utils::Str::replaceFirstWithEscape(logLine, base::consts::kLogFileFormatSpecifier, std::string(buff));
+  }
+  if (logFormat->hasFlag(base::FormatFlags::FileBase)) {
+    // FileBase
+    base::utils::Str::clearBuff(buff, base::consts::kSourceFilenameMaxLength);
+    base::utils::File::buildBaseFilename(logMessage->file(), buff);
+    base::utils::Str::replaceFirstWithEscape(logLine, base::consts::kLogFileBaseFormatSpecifier, std::string(buff));
+  }
+  if (logFormat->hasFlag(base::FormatFlags::Line)) {
+    // Line
+    char* buf = base::utils::Str::clearBuff(buff, base::consts::kSourceLineMaxLength);
+    buf = base::utils::Str::convertAndAddToBuff(logMessage->line(), base::consts::kSourceLineMaxLength, buf, bufLim, false);
+    base::utils::Str::replaceFirstWithEscape(logLine, base::consts::kLogLineFormatSpecifier, std::string(buff));
+  }
+  if (logFormat->hasFlag(base::FormatFlags::Location)) {
+    // Location
+    char* buf = base::utils::Str::clearBuff(buff,
+                                            base::consts::kSourceFilenameMaxLength + base::consts::kSourceLineMaxLength);
+    base::utils::File::buildStrippedFilename(logMessage->file().c_str(), buff);
+    buf = base::utils::Str::addToBuff(buff, buf, bufLim);
+    buf = base::utils::Str::addToBuff(":", buf, bufLim);
+    buf = base::utils::Str::convertAndAddToBuff(logMessage->line(),  base::consts::kSourceLineMaxLength, buf, bufLim,
+          false);
+    base::utils::Str::replaceFirstWithEscape(logLine, base::consts::kLogLocationFormatSpecifier, std::string(buff));
+  }
+  if (logMessage->level() == Level::Verbose && logFormat->hasFlag(base::FormatFlags::VerboseLevel)) {
+    // Verbose level
+    char* buf = base::utils::Str::clearBuff(buff, 1);
+    buf = base::utils::Str::convertAndAddToBuff(logMessage->verboseLevel(), 1, buf, bufLim, false);
+    base::utils::Str::replaceFirstWithEscape(logLine, base::consts::kVerboseLevelFormatSpecifier, std::string(buff));
+  }
+  if (logFormat->hasFlag(base::FormatFlags::LogMessage)) {
+    // Log message
+    base::utils::Str::replaceFirstWithEscape(logLine, base::consts::kMessageFormatSpecifier, logMessage->message());
+  }
+#if !defined(ELPP_DISABLE_CUSTOM_FORMAT_SPECIFIERS)
+  for (std::vector<CustomFormatSpecifier>::const_iterator it = ELPP->customFormatSpecifiers()->begin();
+       it != ELPP->customFormatSpecifiers()->end(); ++it) {
+    std::string fs(it->formatSpecifier());
+    base::type::string_t wcsFormatSpecifier(fs.begin(), fs.end());
+    base::utils::Str::replaceFirstWithEscape(logLine, wcsFormatSpecifier, it->resolver()(logMessage));
+  }
+#endif  // !defined(ELPP_DISABLE_CUSTOM_FORMAT_SPECIFIERS)
+  if (appendNewLine) logLine += ELPP_LITERAL("\n");
+  return logLine;
+}
+
+// LogDispatcher
+
+void LogDispatcher::dispatch(void) {
+  if (m_proceed && m_dispatchAction == base::DispatchAction::None) {
+    m_proceed = false;
+  }
+  if (!m_proceed) {
+    return;
+  }
+  base::threading::ScopedLock scopedLock(ELPP->lock());
+  base::TypedConfigurations* tc = m_logMessage.logger()->m_typedConfigurations;
+  if (ELPP->hasFlag(LoggingFlag::StrictLogFileSizeCheck)) {
+    tc->validateFileRolling(m_logMessage.level(), ELPP->preRollOutCallback());
+  }
+  LogDispatchCallback* callback = nullptr;
+  LogDispatchData data;
+  for (const std::pair<std::string, base::type::LogDispatchCallbackPtr>& h
+       : ELPP->m_logDispatchCallbacks) {
+    callback = h.second.get();
+    if (callback != nullptr && callback->enabled()) {
+      data.setLogMessage(&m_logMessage);
+      data.setDispatchAction(m_dispatchAction);
+      callback->handle(&data);
+    }
+  }
+}
+
+// MessageBuilder
+
+void MessageBuilder::initialize(Logger* logger) {
+  m_logger = logger;
+  m_containerLogSeperator = ELPP->hasFlag(LoggingFlag::NewLineForContainer) ?
+                            ELPP_LITERAL("\n    ") : ELPP_LITERAL(", ");
+}
+
+MessageBuilder& MessageBuilder::operator<<(const wchar_t* msg) {
+  if (msg == nullptr) {
+    m_logger->stream() << base::consts::kNullPointer;
+    return *this;
+  }
+#  if defined(ELPP_UNICODE)
+  m_logger->stream() << msg;
+#  else
+  char* buff_ = base::utils::Str::wcharPtrToCharPtr(msg);
+  m_logger->stream() << buff_;
+  free(buff_);
+#  endif
+  if (ELPP->hasFlag(LoggingFlag::AutoSpacing)) {
+    m_logger->stream() << " ";
+  }
+  return *this;
+}
+
+// Writer
+
+Writer& Writer::construct(Logger* logger, bool needLock) {
+  m_logger = logger;
+  initializeLogger(logger->id(), false, needLock);
+  m_messageBuilder.initialize(m_logger);
+  return *this;
+}
+
+Writer& Writer::construct(int count, const char* loggerIds, ...) {
+  if (ELPP->hasFlag(LoggingFlag::MultiLoggerSupport)) {
+    va_list loggersList;
+    va_start(loggersList, loggerIds);
+    const char* id = loggerIds;
+    for (int i = 0; i < count; ++i) {
+      m_loggerIds.push_back(std::string(id));
+      id = va_arg(loggersList, const char*);
+    }
+    va_end(loggersList);
+    initializeLogger(m_loggerIds.at(0));
+  } else {
+    initializeLogger(std::string(loggerIds));
+  }
+  m_messageBuilder.initialize(m_logger);
+  return *this;
+}
+
+void Writer::initializeLogger(const std::string& loggerId, bool lookup, bool needLock) {
+  if (lookup) {
+    m_logger = ELPP->registeredLoggers()->get(loggerId, ELPP->hasFlag(LoggingFlag::CreateLoggerAutomatically));
+  }
+  if (m_logger == nullptr) {
+    ELPP->acquireLock();
+    if (!ELPP->registeredLoggers()->has(std::string(base::consts::kDefaultLoggerId))) {
+      // Somehow default logger has been unregistered. Not good! Register again
+      ELPP->registeredLoggers()->get(std::string(base::consts::kDefaultLoggerId));
+    }
+    ELPP->releaseLock();  // Need to unlock it for next writer
+    Writer(Level::Debug, m_file, m_line, m_func).construct(1, base::consts::kDefaultLoggerId)
+        << "Logger [" << loggerId << "] is not registered yet!";
+    m_proceed = false;
+  } else {
+    if (needLock) {
+      m_logger->acquireLock();  // This should not be unlocked by checking m_proceed because
+      // m_proceed can be changed by lines below
+    }
+    if (ELPP->hasFlag(LoggingFlag::HierarchicalLogging)) {
+      m_proceed = m_level == Level::Verbose ? m_logger->enabled(m_level) :
+                  LevelHelper::castToInt(m_level) >= LevelHelper::castToInt(ELPP->m_loggingLevel);
+    } else {
+      m_proceed = m_logger->enabled(m_level);
+    }
+  }
+}
+
+void Writer::processDispatch() {
+#if ELPP_LOGGING_ENABLED
+  if (ELPP->hasFlag(LoggingFlag::MultiLoggerSupport)) {
+    bool firstDispatched = false;
+    base::type::string_t logMessage;
+    std::size_t i = 0;
+    do {
+      if (m_proceed) {
+        if (firstDispatched) {
+          m_logger->stream() << logMessage;
+        } else {
+          firstDispatched = true;
+          if (m_loggerIds.size() > 1) {
+            logMessage = m_logger->stream().str();
+          }
+        }
+        triggerDispatch();
+      } else if (m_logger != nullptr) {
+        m_logger->stream().str(ELPP_LITERAL(""));
+        m_logger->releaseLock();
+      }
+      if (i + 1 < m_loggerIds.size()) {
+        initializeLogger(m_loggerIds.at(i + 1));
+      }
+    } while (++i < m_loggerIds.size());
+  } else {
+    if (m_proceed) {
+      triggerDispatch();
+    } else if (m_logger != nullptr) {
+      m_logger->stream().str(ELPP_LITERAL(""));
+      m_logger->releaseLock();
+    }
+  }
+#else
+  if (m_logger != nullptr) {
+    m_logger->stream().str(ELPP_LITERAL(""));
+    m_logger->releaseLock();
+  }
+#endif // ELPP_LOGGING_ENABLED
+}
+
+void Writer::triggerDispatch(void) {
+  if (m_proceed) {
+    base::LogDispatcher(m_proceed, LogMessage(m_level, m_file, m_line, m_func, m_verboseLevel,
+                        m_logger), m_dispatchAction).dispatch();
+  }
+  if (m_logger != nullptr) {
+    m_logger->stream().str(ELPP_LITERAL(""));
+    m_logger->releaseLock();
+  }
+  if (m_proceed && m_level == Level::Fatal
+      && !ELPP->hasFlag(LoggingFlag::DisableApplicationAbortOnFatalLog)) {
+    base::Writer(Level::Warning, m_file, m_line, m_func).construct(1, base::consts::kDefaultLoggerId)
+        << "Aborting application. Reason: Fatal log at [" << m_file << ":" << m_line << "]";
+    std::stringstream reasonStream;
+    reasonStream << "Fatal log at [" << m_file << ":" << m_line << "]"
+                 << " If you wish to disable 'abort on fatal log' please use "
+                 << "el::Helpers::addFlag(el::LoggingFlag::DisableApplicationAbortOnFatalLog)";
+    base::utils::abort(1, reasonStream.str());
+  }
+  m_proceed = false;
+}
+
+// PErrorWriter
+
+PErrorWriter::~PErrorWriter(void) {
+  if (m_proceed) {
+#if ELPP_COMPILER_MSVC
+    char buff[256];
+    strerror_s(buff, 256, errno);
+    m_logger->stream() << ": " << buff << " [" << errno << "]";
+#else
+    m_logger->stream() << ": " << strerror(errno) << " [" << errno << "]";
+#endif
+  }
+}
+
+// PerformanceTracker
+
+#if defined(ELPP_FEATURE_ALL) || defined(ELPP_FEATURE_PERFORMANCE_TRACKING)
+
+PerformanceTracker::PerformanceTracker(const std::string& blockName,
+                                       base::TimestampUnit timestampUnit,
+                                       const std::string& loggerId,
+                                       bool scopedLog, Level level) :
+  m_blockName(blockName), m_timestampUnit(timestampUnit), m_loggerId(loggerId), m_scopedLog(scopedLog),
+  m_level(level), m_hasChecked(false), m_lastCheckpointId(std::string()), m_enabled(false) {
+#if !defined(ELPP_DISABLE_PERFORMANCE_TRACKING) && ELPP_LOGGING_ENABLED
+  // We store it locally so that if user happen to change configuration by the end of scope
+  // or before calling checkpoint, we still depend on state of configuraton at time of construction
+  el::Logger* loggerPtr = ELPP->registeredLoggers()->get(loggerId, false);
+  m_enabled = loggerPtr != nullptr && loggerPtr->m_typedConfigurations->performanceTracking(m_level);
+  if (m_enabled) {
+    base::utils::DateTime::gettimeofday(&m_startTime);
+  }
+#endif  // !defined(ELPP_DISABLE_PERFORMANCE_TRACKING) && ELPP_LOGGING_ENABLED
+}
+
+PerformanceTracker::~PerformanceTracker(void) {
+#if !defined(ELPP_DISABLE_PERFORMANCE_TRACKING) && ELPP_LOGGING_ENABLED
+  if (m_enabled) {
+    base::threading::ScopedLock scopedLock(lock());
+    if (m_scopedLog) {
+      base::utils::DateTime::gettimeofday(&m_endTime);
+      base::type::string_t formattedTime = getFormattedTimeTaken();
+      PerformanceTrackingData data(PerformanceTrackingData::DataType::Complete);
+      data.init(this);
+      data.m_formattedTimeTaken = formattedTime;
+      PerformanceTrackingCallback* callback = nullptr;
+      for (const std::pair<std::string, base::type::PerformanceTrackingCallbackPtr>& h
+           : ELPP->m_performanceTrackingCallbacks) {
+        callback = h.second.get();
+        if (callback != nullptr && callback->enabled()) {
+          callback->handle(&data);
+        }
+      }
+    }
+  }
+#endif  // !defined(ELPP_DISABLE_PERFORMANCE_TRACKING)
+}
+
+void PerformanceTracker::checkpoint(const std::string& id, const char* file, base::type::LineNumber line,
+                                    const char* func) {
+#if !defined(ELPP_DISABLE_PERFORMANCE_TRACKING) && ELPP_LOGGING_ENABLED
+  if (m_enabled) {
+    base::threading::ScopedLock scopedLock(lock());
+    base::utils::DateTime::gettimeofday(&m_endTime);
+    base::type::string_t formattedTime = m_hasChecked ? getFormattedTimeTaken(m_lastCheckpointTime) : ELPP_LITERAL("");
+    PerformanceTrackingData data(PerformanceTrackingData::DataType::Checkpoint);
+    data.init(this);
+    data.m_checkpointId = id;
+    data.m_file = file;
+    data.m_line = line;
+    data.m_func = func;
+    data.m_formattedTimeTaken = formattedTime;
+    PerformanceTrackingCallback* callback = nullptr;
+    for (const std::pair<std::string, base::type::PerformanceTrackingCallbackPtr>& h
+         : ELPP->m_performanceTrackingCallbacks) {
+      callback = h.second.get();
+      if (callback != nullptr && callback->enabled()) {
+        callback->handle(&data);
+      }
+    }
+    base::utils::DateTime::gettimeofday(&m_lastCheckpointTime);
+    m_hasChecked = true;
+    m_lastCheckpointId = id;
+  }
+#endif  // !defined(ELPP_DISABLE_PERFORMANCE_TRACKING) && ELPP_LOGGING_ENABLED
+  ELPP_UNUSED(id);
+  ELPP_UNUSED(file);
+  ELPP_UNUSED(line);
+  ELPP_UNUSED(func);
+}
+
+const base::type::string_t PerformanceTracker::getFormattedTimeTaken(struct timeval startTime) const {
+  if (ELPP->hasFlag(LoggingFlag::FixedTimeFormat)) {
+    base::type::stringstream_t ss;
+    ss << base::utils::DateTime::getTimeDifference(m_endTime,
+        startTime, m_timestampUnit) << " " << base::consts::kTimeFormats[static_cast<base::type::EnumType>
+            (m_timestampUnit)].unit;
+    return ss.str();
+  }
+  return base::utils::DateTime::formatTime(base::utils::DateTime::getTimeDifference(m_endTime,
+         startTime, m_timestampUnit), m_timestampUnit);
+}
+
+#endif // defined(ELPP_FEATURE_ALL) || defined(ELPP_FEATURE_PERFORMANCE_TRACKING)
+
+namespace debug {
+#if defined(ELPP_FEATURE_ALL) || defined(ELPP_FEATURE_CRASH_LOG)
+
+// StackTrace
+
+StackTrace::StackTraceEntry::StackTraceEntry(std::size_t index, const char* loc, const char* demang, const char* hex,
+    const char* addr) {
+  m_index = index;
+  m_location = std::string(loc);
+  m_demangled = std::string(demang);
+  m_hex = std::string(hex);
+  m_addr = std::string(addr);
+}
+
+std::ostream& operator<<(std::ostream& ss, const StackTrace::StackTraceEntry& si) {
+  ss << "[" << si.m_index << "] " << si.m_location << (si.m_demangled.empty() ? "" : ":") << si.m_demangled
+     << (si.m_hex.empty() ? "" : "+") << si.m_hex << si.m_addr;
+  return ss;
+}
+
+std::ostream& operator<<(std::ostream& os, const StackTrace& st) {
+  std::vector<StackTrace::StackTraceEntry>::const_iterator it = st.m_stack.begin();
+  while (it != st.m_stack.end()) {
+    os << "    " << *it++ << "\n";
+  }
+  return os;
+}
+
+void StackTrace::generateNew(void) {
+#if ELPP_STACKTRACE
+  m_stack.clear();
+  void* stack[kMaxStack];
+  unsigned int size = backtrace(stack, kMaxStack);
+  char** strings = backtrace_symbols(stack, size);
+  if (size > kStackStart) {  // Skip StackTrace c'tor and generateNew
+    for (std::size_t i = kStackStart; i < size; ++i) {
+      char* mangName = nullptr;
+      char* hex = nullptr;
+      char* addr = nullptr;
+      for (char* c = strings[i]; *c; ++c) {
+        switch (*c) {
+        case '(':
+          mangName = c;
+          break;
+        case '+':
+          hex = c;
+          break;
+        case ')':
+          addr = c;
+          break;
+        default:
+          break;
+        }
+      }
+      // Perform demangling if parsed properly
+      if (mangName != nullptr && hex != nullptr && addr != nullptr && mangName < hex) {
+        *mangName++ = '\0';
+        *hex++ = '\0';
+        *addr++ = '\0';
+        int status = 0;
+        char* demangName = abi::__cxa_demangle(mangName, 0, 0, &status);
+        // if demangling is successful, output the demangled function name
+        if (status == 0) {
+          // Success (see http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.3/a01696.html)
+          StackTraceEntry entry(i - 1, strings[i], demangName, hex, addr);
+          m_stack.push_back(entry);
+        } else {
+          // Not successful - we will use mangled name
+          StackTraceEntry entry(i - 1, strings[i], mangName, hex, addr);
+          m_stack.push_back(entry);
+        }
+        free(demangName);
+      } else {
+        StackTraceEntry entry(i - 1, strings[i]);
+        m_stack.push_back(entry);
+      }
+    }
+  }
+  free(strings);
+#else
+  ELPP_INTERNAL_INFO(1, "Stacktrace generation not supported for selected compiler");
+#endif  // ELPP_STACKTRACE
+}
+
+// Static helper functions
+
+static std::string crashReason(int sig) {
+  std::stringstream ss;
+  bool foundReason = false;
+  for (int i = 0; i < base::consts::kCrashSignalsCount; ++i) {
+    if (base::consts::kCrashSignals[i].numb == sig) {
+      ss << "Application has crashed due to [" << base::consts::kCrashSignals[i].name << "] signal";
+      if (ELPP->hasFlag(el::LoggingFlag::LogDetailedCrashReason)) {
+        ss << std::endl <<
+           "    " << base::consts::kCrashSignals[i].brief << std::endl <<
+           "    " << base::consts::kCrashSignals[i].detail;
+      }
+      foundReason = true;
+    }
+  }
+  if (!foundReason) {
+    ss << "Application has crashed due to unknown signal [" << sig << "]";
+  }
+  return ss.str();
+}
+/// @brief Logs reason of crash from sig
+static void logCrashReason(int sig, bool stackTraceIfAvailable, Level level, const char* logger) {
+  std::stringstream ss;
+  ss << "CRASH HANDLED; ";
+  ss << crashReason(sig);
+#if ELPP_STACKTRACE
+  if (stackTraceIfAvailable) {
+    ss << std::endl << "    ======= Backtrace: =========" << std::endl << base::debug::StackTrace();
+  }
+#else
+  ELPP_UNUSED(stackTraceIfAvailable);
+#endif  // ELPP_STACKTRACE
+  ELPP_WRITE_LOG(el::base::Writer, level, base::DispatchAction::NormalLog, logger) << ss.str();
+}
+
+static inline void crashAbort(int sig) {
+  base::utils::abort(sig, std::string());
+}
+
+/// @brief Default application crash handler
+///
+/// @detail This function writes log using 'default' logger, prints stack trace for GCC based compilers and aborts program.
+static inline void defaultCrashHandler(int sig) {
+  base::debug::logCrashReason(sig, true, Level::Fatal, base::consts::kDefaultLoggerId);
+  base::debug::crashAbort(sig);
+}
+
+// CrashHandler
+
+CrashHandler::CrashHandler(bool useDefault) {
+  if (useDefault) {
+    setHandler(defaultCrashHandler);
+  }
+}
+
+void CrashHandler::setHandler(const Handler& cHandler) {
+  m_handler = cHandler;
+#if defined(ELPP_HANDLE_SIGABRT)
+  int i = 0;  // SIGABRT is at base::consts::kCrashSignals[0]
+#else
+  int i = 1;
+#endif  // defined(ELPP_HANDLE_SIGABRT)
+  for (; i < base::consts::kCrashSignalsCount; ++i) {
+    m_handler = signal(base::consts::kCrashSignals[i].numb, cHandler);
+  }
+}
+
+#endif // defined(ELPP_FEATURE_ALL) || defined(ELPP_FEATURE_CRASH_LOG)
+}  // namespace debug
+} // namespace base
+
+// el
+
+// Helpers
+
+#if defined(ELPP_FEATURE_ALL) || defined(ELPP_FEATURE_CRASH_LOG)
+
+void Helpers::crashAbort(int sig, const char* sourceFile, unsigned int long line) {
+  std::stringstream ss;
+  ss << base::debug::crashReason(sig).c_str();
+  ss << " - [Called el::Helpers::crashAbort(" << sig << ")]";
+  if (sourceFile != nullptr && strlen(sourceFile) > 0) {
+    ss << " - Source: " << sourceFile;
+    if (line > 0)
+      ss << ":" << line;
+    else
+      ss << " (line number not specified)";
+  }
+  base::utils::abort(sig, ss.str());
+}
+
+void Helpers::logCrashReason(int sig, bool stackTraceIfAvailable, Level level, const char* logger) {
+  el::base::debug::logCrashReason(sig, stackTraceIfAvailable, level, logger);
+}
+
+#endif // defined(ELPP_FEATURE_ALL) || defined(ELPP_FEATURE_CRASH_LOG)
+
+// Loggers
+
+Logger* Loggers::getLogger(const std::string& identity, bool registerIfNotAvailable) {
+  base::threading::ScopedLock scopedLock(ELPP->lock());
+  return ELPP->registeredLoggers()->get(identity, registerIfNotAvailable);
+}
+
+void Loggers::setDefaultLogBuilder(el::LogBuilderPtr& logBuilderPtr) {
+  ELPP->registeredLoggers()->setDefaultLogBuilder(logBuilderPtr);
+}
+
+bool Loggers::unregisterLogger(const std::string& identity) {
+  base::threading::ScopedLock scopedLock(ELPP->lock());
+  return ELPP->registeredLoggers()->remove(identity);
+}
+
+bool Loggers::hasLogger(const std::string& identity) {
+  base::threading::ScopedLock scopedLock(ELPP->lock());
+  return ELPP->registeredLoggers()->has(identity);
+}
+
+Logger* Loggers::reconfigureLogger(Logger* logger, const Configurations& configurations) {
+  if (!logger) return nullptr;
+  logger->configure(configurations);
+  return logger;
+}
+
+Logger* Loggers::reconfigureLogger(const std::string& identity, const Configurations& configurations) {
+  return Loggers::reconfigureLogger(Loggers::getLogger(identity), configurations);
+}
+
+Logger* Loggers::reconfigureLogger(const std::string& identity, ConfigurationType configurationType,
+                                   const std::string& value) {
+  Logger* logger = Loggers::getLogger(identity);
+  if (logger == nullptr) {
+    return nullptr;
+  }
+  logger->configurations()->set(Level::Global, configurationType, value);
+  logger->reconfigure();
+  return logger;
+}
+
+void Loggers::reconfigureAllLoggers(const Configurations& configurations) {
+  for (base::RegisteredLoggers::iterator it = ELPP->registeredLoggers()->begin();
+       it != ELPP->registeredLoggers()->end(); ++it) {
+    Loggers::reconfigureLogger(it->second, configurations);
+  }
+}
+
+void Loggers::reconfigureAllLoggers(Level level, ConfigurationType configurationType,
+                                    const std::string& value) {
+  for (base::RegisteredLoggers::iterator it = ELPP->registeredLoggers()->begin();
+       it != ELPP->registeredLoggers()->end(); ++it) {
+    Logger* logger = it->second;
+    logger->configurations()->set(level, configurationType, value);
+    logger->reconfigure();
+  }
+}
+
+void Loggers::setDefaultConfigurations(const Configurations& configurations, bool reconfigureExistingLoggers) {
+  ELPP->registeredLoggers()->setDefaultConfigurations(configurations);
+  if (reconfigureExistingLoggers) {
+    Loggers::reconfigureAllLoggers(configurations);
+  }
+}
+
+const Configurations* Loggers::defaultConfigurations(void) {
+  return ELPP->registeredLoggers()->defaultConfigurations();
+}
+
+const base::LogStreamsReferenceMap* Loggers::logStreamsReference(void) {
+  return ELPP->registeredLoggers()->logStreamsReference();
+}
+
+base::TypedConfigurations Loggers::defaultTypedConfigurations(void) {
+  return base::TypedConfigurations(
+           ELPP->registeredLoggers()->defaultConfigurations(),
+           ELPP->registeredLoggers()->logStreamsReference());
+}
+
+std::vector<std::string>* Loggers::populateAllLoggerIds(std::vector<std::string>* targetList) {
+  targetList->clear();
+  for (base::RegisteredLoggers::iterator it = ELPP->registeredLoggers()->list().begin();
+       it != ELPP->registeredLoggers()->list().end(); ++it) {
+    targetList->push_back(it->first);
+  }
+  return targetList;
+}
+
+void Loggers::configureFromGlobal(const char* globalConfigurationFilePath) {
+  std::ifstream gcfStream(globalConfigurationFilePath, std::ifstream::in);
+  ELPP_ASSERT(gcfStream.is_open(), "Unable to open global configuration file [" << globalConfigurationFilePath
+              << "] for parsing.");
+  std::string line = std::string();
+  std::stringstream ss;
+  Logger* logger = nullptr;
+  auto configure = [&](void) {
+    ELPP_INTERNAL_INFO(8, "Configuring logger: '" << logger->id() << "' with configurations \n" << ss.str()
+                       << "\n--------------");
+    Configurations c;
+    c.parseFromText(ss.str());
+    logger->configure(c);
+  };
+  while (gcfStream.good()) {
+    std::getline(gcfStream, line);
+    ELPP_INTERNAL_INFO(1, "Parsing line: " << line);
+    base::utils::Str::trim(line);
+    if (Configurations::Parser::isComment(line)) continue;
+    Configurations::Parser::ignoreComments(&line);
+    base::utils::Str::trim(line);
+    if (line.size() > 2 && base::utils::Str::startsWith(line, std::string(base::consts::kConfigurationLoggerId))) {
+      if (!ss.str().empty() && logger != nullptr) {
+        configure();
+      }
+      ss.str(std::string(""));
+      line = line.substr(2);
+      base::utils::Str::trim(line);
+      if (line.size() > 1) {
+        ELPP_INTERNAL_INFO(1, "Getting logger: '" << line << "'");
+        logger = getLogger(line);
+      }
+    } else {
+      ss << line << "\n";
+    }
+  }
+  if (!ss.str().empty() && logger != nullptr) {
+    configure();
+  }
+}
+
+bool Loggers::configureFromArg(const char* argKey) {
+#if defined(ELPP_DISABLE_CONFIGURATION_FROM_PROGRAM_ARGS)
+  ELPP_UNUSED(argKey);
+#else
+  if (!Helpers::commandLineArgs()->hasParamWithValue(argKey)) {
+    return false;
+  }
+  configureFromGlobal(Helpers::commandLineArgs()->getParamValue(argKey));
+#endif  // defined(ELPP_DISABLE_CONFIGURATION_FROM_PROGRAM_ARGS)
+  return true;
+}
+
+void Loggers::flushAll(void) {
+  ELPP->registeredLoggers()->flushAll();
+}
+
+void Loggers::setVerboseLevel(base::type::VerboseLevel level) {
+  ELPP->vRegistry()->setLevel(level);
+}
+
+base::type::VerboseLevel Loggers::verboseLevel(void) {
+  return ELPP->vRegistry()->level();
+}
+
+void Loggers::setVModules(const char* modules) {
+  if (ELPP->vRegistry()->vModulesEnabled()) {
+    ELPP->vRegistry()->setModules(modules);
+  }
+}
+
+void Loggers::clearVModules(void) {
+  ELPP->vRegistry()->clearModules();
+}
+
+// VersionInfo
+
+const std::string VersionInfo::version(void) {
+  return std::string("9.95.0");
+}
+/// @brief Release date of current version
+const std::string VersionInfo::releaseDate(void) {
+  return std::string("02-08-2017 2312hrs");
+}
+
+} // namespace el
diff --git a/vendor/github.com/muflihun/easyloggingpp/src/easylogging++.h b/vendor/github.com/muflihun/easyloggingpp/src/easylogging++.h
new file mode 100644
index 0000000..a279872
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/src/easylogging++.h
@@ -0,0 +1,4599 @@
+//
+//  Bismillah ar-Rahmaan ar-Raheem
+//
+//  Easylogging++ v9.95.0
+//  Single-header only, cross-platform logging library for C++ applications
+//
+//  Copyright (c) 2017 muflihun.com
+//
+//  This library is released under the MIT Licence.
+//  http://labs.muflihun.com/easyloggingpp/licence.php
+//
+//  https://github.com/muflihun/easyloggingpp
+//  https://muflihun.github.io/easyloggingpp
+//  http://muflihun.com
+//
+#ifndef EASYLOGGINGPP_H
+#define EASYLOGGINGPP_H
+// Compilers and C++0x/C++11 Evaluation
+#if __cplusplus >= 201103L
+#  define ELPP_CXX11 1
+#endif  // __cplusplus >= 201103L
+#if (defined(__GNUC__))
+#  define ELPP_COMPILER_GCC 1
+#else
+#  define ELPP_COMPILER_GCC 0
+#endif
+#if ELPP_COMPILER_GCC
+#    define ELPP_GCC_VERSION (__GNUC__ * 10000 \
++ __GNUC_MINOR__ * 100 \
++ __GNUC_PATCHLEVEL__)
+#  if defined(__GXX_EXPERIMENTAL_CXX0X__)
+#    define ELPP_CXX0X 1
+#  endif
+#endif
+// Visual C++
+#if defined(_MSC_VER)
+#  define ELPP_COMPILER_MSVC 1
+#else
+#  define ELPP_COMPILER_MSVC 0
+#endif
+#define ELPP_CRT_DBG_WARNINGS ELPP_COMPILER_MSVC
+#if ELPP_COMPILER_MSVC
+#  if (_MSC_VER == 1600)
+#    define ELPP_CXX0X 1
+#  elif(_MSC_VER >= 1700)
+#    define ELPP_CXX11 1
+#  endif
+#endif
+// Clang++
+#if (defined(__clang__) && (__clang__ == 1))
+#  define ELPP_COMPILER_CLANG 1
+#else
+#  define ELPP_COMPILER_CLANG 0
+#endif
+#if ELPP_COMPILER_CLANG
+#  if __has_include(<thread>)
+#    include <cstddef> // Make __GLIBCXX__ defined when using libstdc++
+#    if !defined(__GLIBCXX__) || __GLIBCXX__ >= 20150426
+#      define ELPP_CLANG_SUPPORTS_THREAD
+#    endif // !defined(__GLIBCXX__) || __GLIBCXX__ >= 20150426
+#  endif // __has_include(<thread>)
+#endif
+#if (defined(__MINGW32__) || defined(__MINGW64__))
+#  define ELPP_MINGW 1
+#else
+#  define ELPP_MINGW 0
+#endif
+#if (defined(__CYGWIN__) && (__CYGWIN__ == 1))
+#  define ELPP_CYGWIN 1
+#else
+#  define ELPP_CYGWIN 0
+#endif
+#if (defined(__INTEL_COMPILER))
+#  define ELPP_COMPILER_INTEL 1
+#else
+#  define ELPP_COMPILER_INTEL 0
+#endif
+// Operating System Evaluation
+// Windows
+#if (defined(_WIN32) || defined(_WIN64))
+#  define ELPP_OS_WINDOWS 1
+#else
+#  define ELPP_OS_WINDOWS 0
+#endif
+// Linux
+#if (defined(__linux) || defined(__linux__))
+#  define ELPP_OS_LINUX 1
+#else
+#  define ELPP_OS_LINUX 0
+#endif
+#if (defined(__APPLE__))
+#  define ELPP_OS_MAC 1
+#else
+#  define ELPP_OS_MAC 0
+#endif
+#if (defined(__FreeBSD__))
+#  define ELPP_OS_FREEBSD 1
+#else
+#  define ELPP_OS_FREEBSD 0
+#endif
+#if (defined(__sun))
+#  define ELPP_OS_SOLARIS 1
+#else
+#  define ELPP_OS_SOLARIS 0
+#endif
+#if (defined(__NetBSD__))
+#  define ELPP_OS_NETBSD 1
+#else
+#  define ELPP_OS_NETBSD 0
+#endif
+// Unix
+#if ((ELPP_OS_LINUX || ELPP_OS_MAC || ELPP_OS_FREEBSD || ELPP_OS_NETBSD || ELPP_OS_SOLARIS) && (!ELPP_OS_WINDOWS))
+#  define ELPP_OS_UNIX 1
+#else
+#  define ELPP_OS_UNIX 0
+#endif
+#if (defined(__ANDROID__))
+#  define ELPP_OS_ANDROID 1
+#else
+#  define ELPP_OS_ANDROID 0
+#endif
+// Evaluating Cygwin as *nix OS
+#if !ELPP_OS_UNIX && !ELPP_OS_WINDOWS && ELPP_CYGWIN
+#  undef ELPP_OS_UNIX
+#  undef ELPP_OS_LINUX
+#  define ELPP_OS_UNIX 1
+#  define ELPP_OS_LINUX 1
+#endif //  !ELPP_OS_UNIX && !ELPP_OS_WINDOWS && ELPP_CYGWIN
+#if !defined(ELPP_INTERNAL_DEBUGGING_OUT_INFO)
+#  define ELPP_INTERNAL_DEBUGGING_OUT_INFO std::cout
+#endif // !defined(ELPP_INTERNAL_DEBUGGING_OUT)
+#if !defined(ELPP_INTERNAL_DEBUGGING_OUT_ERROR)
+#  define ELPP_INTERNAL_DEBUGGING_OUT_ERROR std::cerr
+#endif // !defined(ELPP_INTERNAL_DEBUGGING_OUT)
+#if !defined(ELPP_INTERNAL_DEBUGGING_ENDL)
+#  define ELPP_INTERNAL_DEBUGGING_ENDL std::endl
+#endif // !defined(ELPP_INTERNAL_DEBUGGING_OUT)
+#if !defined(ELPP_INTERNAL_DEBUGGING_MSG)
+#  define ELPP_INTERNAL_DEBUGGING_MSG(msg) msg
+#endif // !defined(ELPP_INTERNAL_DEBUGGING_OUT)
+// Internal Assertions and errors
+#if !defined(ELPP_DISABLE_ASSERT)
+#  if (defined(ELPP_DEBUG_ASSERT_FAILURE))
+#    define ELPP_ASSERT(expr, msg) if (!(expr)) { \
+std::stringstream internalInfoStream; internalInfoStream << msg; \
+ELPP_INTERNAL_DEBUGGING_OUT_ERROR \
+<< "EASYLOGGING++ ASSERTION FAILED (LINE: " << __LINE__ << ") [" #expr << "] WITH MESSAGE \"" \
+<< ELPP_INTERNAL_DEBUGGING_MSG(internalInfoStream.str()) << "\"" << ELPP_INTERNAL_DEBUGGING_ENDL; base::utils::abort(1, \
+"ELPP Assertion failure, please define ELPP_DEBUG_ASSERT_FAILURE"); }
+#  else
+#    define ELPP_ASSERT(expr, msg) if (!(expr)) { \
+std::stringstream internalInfoStream; internalInfoStream << msg; \
+ELPP_INTERNAL_DEBUGGING_OUT_ERROR\
+<< "ASSERTION FAILURE FROM EASYLOGGING++ (LINE: " \
+<< __LINE__ << ") [" #expr << "] WITH MESSAGE \"" << ELPP_INTERNAL_DEBUGGING_MSG(internalInfoStream.str()) << "\"" \
+<< ELPP_INTERNAL_DEBUGGING_ENDL; }
+#  endif  // (defined(ELPP_DEBUG_ASSERT_FAILURE))
+#else
+#  define ELPP_ASSERT(x, y)
+#endif  //(!defined(ELPP_DISABLE_ASSERT)
+#if ELPP_COMPILER_MSVC
+#  define ELPP_INTERNAL_DEBUGGING_WRITE_PERROR \
+{ char buff[256]; strerror_s(buff, 256, errno); \
+ELPP_INTERNAL_DEBUGGING_OUT_ERROR << ": " << buff << " [" << errno << "]";} (void)0
+#else
+#  define ELPP_INTERNAL_DEBUGGING_WRITE_PERROR \
+ELPP_INTERNAL_DEBUGGING_OUT_ERROR << ": " << strerror(errno) << " [" << errno << "]"; (void)0
+#endif  // ELPP_COMPILER_MSVC
+#if defined(ELPP_DEBUG_ERRORS)
+#  if !defined(ELPP_INTERNAL_ERROR)
+#    define ELPP_INTERNAL_ERROR(msg, pe) { \
+std::stringstream internalInfoStream; internalInfoStream << "<ERROR> " << msg; \
+ELPP_INTERNAL_DEBUGGING_OUT_ERROR \
+<< "ERROR FROM EASYLOGGING++ (LINE: " << __LINE__ << ") " \
+<< ELPP_INTERNAL_DEBUGGING_MSG(internalInfoStream.str()) << ELPP_INTERNAL_DEBUGGING_ENDL; \
+if (pe) { ELPP_INTERNAL_DEBUGGING_OUT_ERROR << "    "; ELPP_INTERNAL_DEBUGGING_WRITE_PERROR; }} (void)0
+#  endif
+#else
+#  undef ELPP_INTERNAL_INFO
+#  define ELPP_INTERNAL_ERROR(msg, pe)
+#endif  // defined(ELPP_DEBUG_ERRORS)
+#if (defined(ELPP_DEBUG_INFO))
+#  if !(defined(ELPP_INTERNAL_INFO_LEVEL))
+#    define ELPP_INTERNAL_INFO_LEVEL 9
+#  endif  // !(defined(ELPP_INTERNAL_INFO_LEVEL))
+#  if !defined(ELPP_INTERNAL_INFO)
+#    define ELPP_INTERNAL_INFO(lvl, msg) { if (lvl <= ELPP_INTERNAL_INFO_LEVEL) { \
+std::stringstream internalInfoStream; internalInfoStream << "<INFO> " << msg; \
+ELPP_INTERNAL_DEBUGGING_OUT_INFO << ELPP_INTERNAL_DEBUGGING_MSG(internalInfoStream.str()) \
+<< ELPP_INTERNAL_DEBUGGING_ENDL; }}
+#  endif
+#else
+#  undef ELPP_INTERNAL_INFO
+#  define ELPP_INTERNAL_INFO(lvl, msg)
+#endif  // (defined(ELPP_DEBUG_INFO))
+#if (defined(ELPP_FEATURE_ALL)) || (defined(ELPP_FEATURE_CRASH_LOG))
+#  if (ELPP_COMPILER_GCC && !ELPP_MINGW && !ELPP_OS_ANDROID)
+#    define ELPP_STACKTRACE 1
+#  else
+#      if ELPP_COMPILER_MSVC
+#         pragma message("Stack trace not available for this compiler")
+#      else
+#         warning "Stack trace not available for this compiler";
+#      endif  // ELPP_COMPILER_MSVC
+#    define ELPP_STACKTRACE 0
+#  endif  // ELPP_COMPILER_GCC
+#else
+#    define ELPP_STACKTRACE 0
+#endif  // (defined(ELPP_FEATURE_ALL)) || (defined(ELPP_FEATURE_CRASH_LOG))
+// Miscellaneous macros
+#define ELPP_UNUSED(x) (void)x
+#if ELPP_OS_UNIX
+// Log file permissions for unix-based systems
+#  define ELPP_LOG_PERMS S_IRUSR | S_IWUSR | S_IXUSR | S_IWGRP | S_IRGRP | S_IXGRP | S_IWOTH | S_IXOTH
+#endif  // ELPP_OS_UNIX
+#if defined(ELPP_AS_DLL) && ELPP_COMPILER_MSVC
+#  if defined(ELPP_EXPORT_SYMBOLS)
+#    define ELPP_EXPORT __declspec(dllexport)
+#  else
+#    define ELPP_EXPORT __declspec(dllimport)
+#  endif  // defined(ELPP_EXPORT_SYMBOLS)
+#else
+#  define ELPP_EXPORT
+#endif  // defined(ELPP_AS_DLL) && ELPP_COMPILER_MSVC
+// Some special functions that are VC++ specific
+#undef STRTOK
+#undef STRERROR
+#undef STRCAT
+#undef STRCPY
+#if ELPP_CRT_DBG_WARNINGS
+#  define STRTOK(a, b, c) strtok_s(a, b, c)
+#  define STRERROR(a, b, c) strerror_s(a, b, c)
+#  define STRCAT(a, b, len) strcat_s(a, len, b)
+#  define STRCPY(a, b, len) strcpy_s(a, len, b)
+#else
+#  define STRTOK(a, b, c) strtok(a, b)
+#  define STRERROR(a, b, c) strerror(c)
+#  define STRCAT(a, b, len) strcat(a, b)
+#  define STRCPY(a, b, len) strcpy(a, b)
+#endif
+// Compiler specific support evaluations
+#if (ELPP_MINGW && !defined(ELPP_FORCE_USE_STD_THREAD))
+#  define ELPP_USE_STD_THREADING 0
+#else
+#  if ((ELPP_COMPILER_CLANG && defined(ELPP_CLANG_SUPPORTS_THREAD)) || \
+       (!ELPP_COMPILER_CLANG && defined(ELPP_CXX11)) || \
+       defined(ELPP_FORCE_USE_STD_THREAD))
+#    define ELPP_USE_STD_THREADING 1
+#  else
+#    define ELPP_USE_STD_THREADING 0
+#  endif
+#endif
+#undef ELPP_FINAL
+#if ELPP_COMPILER_INTEL || (ELPP_GCC_VERSION < 40702)
+#  define ELPP_FINAL
+#else
+#  define ELPP_FINAL final
+#endif  // ELPP_COMPILER_INTEL || (ELPP_GCC_VERSION < 40702)
+#if defined(ELPP_EXPERIMENTAL_ASYNC)
+#  define ELPP_ASYNC_LOGGING 1
+#else
+#  define ELPP_ASYNC_LOGGING 0
+#endif // defined(ELPP_EXPERIMENTAL_ASYNC)
+#if defined(ELPP_THREAD_SAFE) || ELPP_ASYNC_LOGGING
+#  define ELPP_THREADING_ENABLED 1
+#else
+#  define ELPP_THREADING_ENABLED 0
+#endif  // defined(ELPP_THREAD_SAFE) || ELPP_ASYNC_LOGGING
+// Function macro ELPP_FUNC
+#undef ELPP_FUNC
+#if ELPP_COMPILER_MSVC  // Visual C++
+#  define ELPP_FUNC __FUNCSIG__
+#elif ELPP_COMPILER_GCC  // GCC
+#  define ELPP_FUNC __PRETTY_FUNCTION__
+#elif ELPP_COMPILER_INTEL  // Intel C++
+#  define ELPP_FUNC __PRETTY_FUNCTION__
+#elif ELPP_COMPILER_CLANG  // Clang++
+#  define ELPP_FUNC __PRETTY_FUNCTION__
+#else
+#  if defined(__func__)
+#    define ELPP_FUNC __func__
+#  else
+#    define ELPP_FUNC ""
+#  endif  // defined(__func__)
+#endif  // defined(_MSC_VER)
+#undef ELPP_VARIADIC_TEMPLATES_SUPPORTED
+// Keep following line commented until features are fixed
+#define ELPP_VARIADIC_TEMPLATES_SUPPORTED \
+(ELPP_COMPILER_GCC || ELPP_COMPILER_CLANG || ELPP_COMPILER_INTEL || (ELPP_COMPILER_MSVC && _MSC_VER >= 1800))
+// Logging Enable/Disable macros
+#if defined(ELPP_DISABLE_LOGS)
+#define ELPP_LOGGING_ENABLED 0
+#else
+#define ELPP_LOGGING_ENABLED 1
+#endif
+#if (!defined(ELPP_DISABLE_DEBUG_LOGS) && (ELPP_LOGGING_ENABLED))
+#  define ELPP_DEBUG_LOG 1
+#else
+#  define ELPP_DEBUG_LOG 0
+#endif  // (!defined(ELPP_DISABLE_DEBUG_LOGS) && (ELPP_LOGGING_ENABLED))
+#if (!defined(ELPP_DISABLE_INFO_LOGS) && (ELPP_LOGGING_ENABLED))
+#  define ELPP_INFO_LOG 1
+#else
+#  define ELPP_INFO_LOG 0
+#endif  // (!defined(ELPP_DISABLE_INFO_LOGS) && (ELPP_LOGGING_ENABLED))
+#if (!defined(ELPP_DISABLE_WARNING_LOGS) && (ELPP_LOGGING_ENABLED))
+#  define ELPP_WARNING_LOG 1
+#else
+#  define ELPP_WARNING_LOG 0
+#endif  // (!defined(ELPP_DISABLE_WARNING_LOGS) && (ELPP_LOGGING_ENABLED))
+#if (!defined(ELPP_DISABLE_ERROR_LOGS) && (ELPP_LOGGING_ENABLED))
+#  define ELPP_ERROR_LOG 1
+#else
+#  define ELPP_ERROR_LOG 0
+#endif  // (!defined(ELPP_DISABLE_ERROR_LOGS) && (ELPP_LOGGING_ENABLED))
+#if (!defined(ELPP_DISABLE_FATAL_LOGS) && (ELPP_LOGGING_ENABLED))
+#  define ELPP_FATAL_LOG 1
+#else
+#  define ELPP_FATAL_LOG 0
+#endif  // (!defined(ELPP_DISABLE_FATAL_LOGS) && (ELPP_LOGGING_ENABLED))
+#if (!defined(ELPP_DISABLE_TRACE_LOGS) && (ELPP_LOGGING_ENABLED))
+#  define ELPP_TRACE_LOG 1
+#else
+#  define ELPP_TRACE_LOG 0
+#endif  // (!defined(ELPP_DISABLE_TRACE_LOGS) && (ELPP_LOGGING_ENABLED))
+#if (!defined(ELPP_DISABLE_VERBOSE_LOGS) && (ELPP_LOGGING_ENABLED))
+#  define ELPP_VERBOSE_LOG 1
+#else
+#  define ELPP_VERBOSE_LOG 0
+#endif  // (!defined(ELPP_DISABLE_VERBOSE_LOGS) && (ELPP_LOGGING_ENABLED))
+#if (!(ELPP_CXX0X || ELPP_CXX11))
+#   error "C++0x (or higher) support not detected! (Is `-std=c++11' missing?)"
+#endif  // (!(ELPP_CXX0X || ELPP_CXX11))
+// Headers
+#if defined(ELPP_SYSLOG)
+#   include <syslog.h>
+#endif  // defined(ELPP_SYSLOG)
+#include <ctime>
+#include <cstring>
+#include <cstdlib>
+#include <cctype>
+#include <cwchar>
+#include <csignal>
+#include <cerrno>
+#include <cstdarg>
+#if defined(ELPP_UNICODE)
+#   include <locale>
+#  if ELPP_OS_WINDOWS
+#      include <codecvt>
+#  endif // ELPP_OS_WINDOWS
+#endif  // defined(ELPP_UNICODE)
+#if ELPP_STACKTRACE
+#   include <cxxabi.h>
+#   include <execinfo.h>
+#endif  // ELPP_STACKTRACE
+#if ELPP_OS_ANDROID
+#   include <sys/system_properties.h>
+#endif  // ELPP_OS_ANDROID
+#if ELPP_OS_UNIX
+#   include <sys/stat.h>
+#   include <sys/time.h>
+#elif ELPP_OS_WINDOWS
+#   include <direct.h>
+#   include <windows.h>
+#  if defined(WIN32_LEAN_AND_MEAN)
+#      if defined(ELPP_WINSOCK2)
+#         include <winsock2.h>
+#      else
+#         include <winsock.h>
+#      endif // defined(ELPP_WINSOCK2)
+#  endif // defined(WIN32_LEAN_AND_MEAN)
+#endif  // ELPP_OS_UNIX
+#include <string>
+#include <vector>
+#include <map>
+#include <utility>
+#include <functional>
+#include <algorithm>
+#include <fstream>
+#include <iostream>
+#include <sstream>
+#include <memory>
+#include <type_traits>
+#if ELPP_THREADING_ENABLED
+#  if ELPP_USE_STD_THREADING
+#      include <mutex>
+#      include <thread>
+#  else
+#      if ELPP_OS_UNIX
+#         include <pthread.h>
+#      endif  // ELPP_OS_UNIX
+#  endif  // ELPP_USE_STD_THREADING
+#endif  // ELPP_THREADING_ENABLED
+#if ELPP_ASYNC_LOGGING
+#  if defined(ELPP_NO_SLEEP_FOR)
+#      include <unistd.h>
+#  endif  // defined(ELPP_NO_SLEEP_FOR)
+#   include <thread>
+#   include <queue>
+#   include <condition_variable>
+#endif  // ELPP_ASYNC_LOGGING
+#if defined(ELPP_STL_LOGGING)
+// For logging STL based templates
+#   include <list>
+#   include <queue>
+#   include <deque>
+#   include <set>
+#   include <bitset>
+#   include <stack>
+#  if defined(ELPP_LOG_STD_ARRAY)
+#      include <array>
+#  endif  // defined(ELPP_LOG_STD_ARRAY)
+#  if defined(ELPP_LOG_UNORDERED_MAP)
+#      include <unordered_map>
+#  endif  // defined(ELPP_LOG_UNORDERED_MAP)
+#  if defined(ELPP_LOG_UNORDERED_SET)
+#      include <unordered_set>
+#  endif  // defined(ELPP_UNORDERED_SET)
+#endif  // defined(ELPP_STL_LOGGING)
+#if defined(ELPP_QT_LOGGING)
+// For logging Qt based classes & templates
+#   include <QString>
+#   include <QByteArray>
+#   include <QVector>
+#   include <QList>
+#   include <QPair>
+#   include <QMap>
+#   include <QQueue>
+#   include <QSet>
+#   include <QLinkedList>
+#   include <QHash>
+#   include <QMultiHash>
+#   include <QStack>
+#endif  // defined(ELPP_QT_LOGGING)
+#if defined(ELPP_BOOST_LOGGING)
+// For logging boost based classes & templates
+#   include <boost/container/vector.hpp>
+#   include <boost/container/stable_vector.hpp>
+#   include <boost/container/list.hpp>
+#   include <boost/container/deque.hpp>
+#   include <boost/container/map.hpp>
+#   include <boost/container/flat_map.hpp>
+#   include <boost/container/set.hpp>
+#   include <boost/container/flat_set.hpp>
+#endif  // defined(ELPP_BOOST_LOGGING)
+#if defined(ELPP_WXWIDGETS_LOGGING)
+// For logging wxWidgets based classes & templates
+#   include <wx/vector.h>
+#endif  // defined(ELPP_WXWIDGETS_LOGGING)
+#if defined(ELPP_UTC_DATETIME)
+#   define elpptime_r gmtime_r
+#   define elpptime_s gmtime_s
+#   define elpptime   gmtime
+#else
+#   define elpptime_r localtime_r
+#   define elpptime_s localtime_s
+#   define elpptime   localtime
+#endif  // defined(ELPP_UTC_DATETIME)
+// Forward declarations
+namespace el {
+class Logger;
+class LogMessage;
+class PerformanceTrackingData;
+class Loggers;
+class Helpers;
+template <typename T> class Callback;
+class LogDispatchCallback;
+class PerformanceTrackingCallback;
+class LoggerRegistrationCallback;
+class LogDispatchData;
+namespace base {
+class Storage;
+class RegisteredLoggers;
+class PerformanceTracker;
+class MessageBuilder;
+class Writer;
+class PErrorWriter;
+class LogDispatcher;
+class DefaultLogBuilder;
+class DefaultLogDispatchCallback;
+#if ELPP_ASYNC_LOGGING
+class AsyncLogDispatchCallback;
+class AsyncDispatchWorker;
+#endif // ELPP_ASYNC_LOGGING
+class DefaultPerformanceTrackingCallback;
+}  // namespace base
+}  // namespace el
+/// @brief Easylogging++ entry namespace
+namespace el {
+/// @brief Namespace containing base/internal functionality used by Easylogging++
+namespace base {
+/// @brief Data types used by Easylogging++
+namespace type {
+#undef ELPP_LITERAL
+#undef ELPP_STRLEN
+#undef ELPP_COUT
+#if defined(ELPP_UNICODE)
+#  define ELPP_LITERAL(txt) L##txt
+#  define ELPP_STRLEN wcslen
+#  if defined ELPP_CUSTOM_COUT
+#    define ELPP_COUT ELPP_CUSTOM_COUT
+#  else
+#    define ELPP_COUT std::wcout
+#  endif  // defined ELPP_CUSTOM_COUT
+typedef wchar_t char_t;
+typedef std::wstring string_t;
+typedef std::wstringstream stringstream_t;
+typedef std::wfstream fstream_t;
+typedef std::wostream ostream_t;
+#else
+#  define ELPP_LITERAL(txt) txt
+#  define ELPP_STRLEN strlen
+#  if defined ELPP_CUSTOM_COUT
+#    define ELPP_COUT ELPP_CUSTOM_COUT
+#  else
+#    define ELPP_COUT std::cout
+#  endif  // defined ELPP_CUSTOM_COUT
+typedef char char_t;
+typedef std::string string_t;
+typedef std::stringstream stringstream_t;
+typedef std::fstream fstream_t;
+typedef std::ostream ostream_t;
+#endif  // defined(ELPP_UNICODE)
+#if defined(ELPP_CUSTOM_COUT_LINE)
+#  define ELPP_COUT_LINE(logLine) ELPP_CUSTOM_COUT_LINE(logLine)
+#else
+#  define ELPP_COUT_LINE(logLine) logLine << std::flush
+#endif // defined(ELPP_CUSTOM_COUT_LINE)
+typedef unsigned int EnumType;
+typedef unsigned short VerboseLevel;
+typedef unsigned long int LineNumber;
+typedef std::shared_ptr<base::Storage> StoragePointer;
+typedef std::shared_ptr<LogDispatchCallback> LogDispatchCallbackPtr;
+typedef std::shared_ptr<PerformanceTrackingCallback> PerformanceTrackingCallbackPtr;
+typedef std::shared_ptr<LoggerRegistrationCallback> LoggerRegistrationCallbackPtr;
+typedef std::unique_ptr<el::base::PerformanceTracker> PerformanceTrackerPtr;
+}  // namespace type
+/// @brief Internal helper class that prevent copy constructor for class
+///
+/// @detail When using this class simply inherit it privately
+class NoCopy {
+ protected:
+  NoCopy(void) {}
+ private:
+  NoCopy(const NoCopy&);
+  NoCopy& operator=(const NoCopy&);
+};
+/// @brief Internal helper class that makes all default constructors private.
+///
+/// @detail This prevents initializing class making it static unless an explicit constructor is declared.
+/// When using this class simply inherit it privately
+class StaticClass {
+ private:
+  StaticClass(void);
+  StaticClass(const StaticClass&);
+  StaticClass& operator=(const StaticClass&);
+};
+}  // namespace base
+/// @brief Represents enumeration for severity level used to determine level of logging
+///
+/// @detail With Easylogging++, developers may disable or enable any level regardless of
+/// what the severity is. Or they can choose to log using hierarchical logging flag
+enum class Level : base::type::EnumType {
+  /// @brief Generic level that represents all the levels. Useful when setting global configuration for all levels
+  Global = 1,
+  /// @brief Information that can be useful to back-trace certain events - mostly useful than debug logs.
+  Trace = 2,
+  /// @brief Informational events most useful for developers to debug application
+  Debug = 4,
+  /// @brief Severe error information that will presumably abort application
+  Fatal = 8,
+  /// @brief Information representing errors in application but application will keep running
+  Error = 16,
+  /// @brief Useful when application has potentially harmful situtaions
+  Warning = 32,
+  /// @brief Information that can be highly useful and vary with verbose logging level.
+  Verbose = 64,
+  /// @brief Mainly useful to represent current progress of application
+  Info = 128,
+  /// @brief Represents unknown level
+  Unknown = 1010
+};
+/// @brief Static class that contains helper functions for el::Level
+class LevelHelper : base::StaticClass {
+ public:
+  /// @brief Represents minimum valid level. Useful when iterating through enum.
+  static const base::type::EnumType kMinValid = static_cast<base::type::EnumType>(Level::Trace);
+  /// @brief Represents maximum valid level. This is used internally and you should not need it.
+  static const base::type::EnumType kMaxValid = static_cast<base::type::EnumType>(Level::Info);
+  /// @brief Casts level to int, useful for iterating through enum.
+  static base::type::EnumType castToInt(Level level) {
+    return static_cast<base::type::EnumType>(level);
+  }
+  /// @brief Casts int(ushort) to level, useful for iterating through enum.
+  static Level castFromInt(base::type::EnumType l) {
+    return static_cast<Level>(l);
+  }
+  /// @brief Converts level to associated const char*
+  /// @return Upper case string based level.
+  static const char* convertToString(Level level);
+  /// @brief Converts from levelStr to Level
+  /// @param levelStr Upper case string based level.
+  ///        Lower case is also valid but providing upper case is recommended.
+  static Level convertFromString(const char* levelStr);
+  /// @brief Applies specified function to each level starting from startIndex
+  /// @param startIndex initial value to start the iteration from. This is passed as pointer and
+  ///        is left-shifted so this can be used inside function (fn) to represent current level.
+  /// @param fn function to apply with each level. This bool represent whether or not to stop iterating through levels.
+  static void forEachLevel(base::type::EnumType* startIndex, const std::function<bool(void)>& fn);
+};
+/// @brief Represents enumeration of ConfigurationType used to configure or access certain aspect
+/// of logging
+enum class ConfigurationType : base::type::EnumType {
+  /// @brief Determines whether or not corresponding level and logger of logging is enabled
+  /// You may disable all logs by using el::Level::Global
+  Enabled = 1,
+  /// @brief Whether or not to write corresponding log to log file
+  ToFile = 2,
+  /// @brief Whether or not to write corresponding level and logger log to standard output.
+  /// By standard output meaning termnal, command prompt etc
+  ToStandardOutput = 4,
+  /// @brief Determines format of logging corresponding level and logger.
+  Format = 8,
+  /// @brief Determines log file (full path) to write logs to for correponding level and logger
+  Filename = 16,
+  /// @brief Specifies precision of the subsecond part. It should be within range (1-6).
+  SubsecondPrecision = 32,
+  /// @brief Alias of SubsecondPrecision (for backward compatibility)
+  MillisecondsWidth = SubsecondPrecision,
+  /// @brief Determines whether or not performance tracking is enabled.
+  ///
+  /// @detail This does not depend on logger or level. Performance tracking always uses 'performance' logger
+  PerformanceTracking = 64,
+  /// @brief Specifies log file max size.
+  ///
+  /// @detail If file size of corresponding log file (for corresponding level) is >= specified size, log file will
+  /// be truncated and re-initiated.
+  MaxLogFileSize = 128,
+  /// @brief Specifies number of log entries to hold until we flush pending log data
+  LogFlushThreshold = 256,
+  /// @brief Represents unknown configuration
+  Unknown = 1010
+};
+/// @brief Static class that contains helper functions for el::ConfigurationType
+class ConfigurationTypeHelper : base::StaticClass {
+ public:
+  /// @brief Represents minimum valid configuration type. Useful when iterating through enum.
+  static const base::type::EnumType kMinValid = static_cast<base::type::EnumType>(ConfigurationType::Enabled);
+  /// @brief Represents maximum valid configuration type. This is used internally and you should not need it.
+  static const base::type::EnumType kMaxValid = static_cast<base::type::EnumType>(ConfigurationType::MaxLogFileSize);
+  /// @brief Casts configuration type to int, useful for iterating through enum.
+  static base::type::EnumType castToInt(ConfigurationType configurationType) {
+    return static_cast<base::type::EnumType>(configurationType);
+  }
+  /// @brief Casts int(ushort) to configurationt type, useful for iterating through enum.
+  static ConfigurationType castFromInt(base::type::EnumType c) {
+    return static_cast<ConfigurationType>(c);
+  }
+  /// @brief Converts configuration type to associated const char*
+  /// @returns Upper case string based configuration type.
+  static const char* convertToString(ConfigurationType configurationType);
+  /// @brief Converts from configStr to ConfigurationType
+  /// @param configStr Upper case string based configuration type.
+  ///        Lower case is also valid but providing upper case is recommended.
+  static ConfigurationType convertFromString(const char* configStr);
+  /// @brief Applies specified function to each configuration type starting from startIndex
+  /// @param startIndex initial value to start the iteration from. This is passed by pointer and is left-shifted
+  ///        so this can be used inside function (fn) to represent current configuration type.
+  /// @param fn function to apply with each configuration type.
+  ///        This bool represent whether or not to stop iterating through configurations.
+  static inline void forEachConfigType(base::type::EnumType* startIndex, const std::function<bool(void)>& fn);
+};
+/// @brief Flags used while writing logs. This flags are set by user
+enum class LoggingFlag : base::type::EnumType {
+  /// @brief Makes sure we have new line for each container log entry
+  NewLineForContainer = 1,
+  /// @brief Makes sure if -vmodule is used and does not specifies a module, then verbose
+  /// logging is allowed via that module.
+  AllowVerboseIfModuleNotSpecified = 2,
+  /// @brief When handling crashes by default, detailed crash reason will be logged as well
+  LogDetailedCrashReason = 4,
+  /// @brief Allows to disable application abortion when logged using FATAL level
+  DisableApplicationAbortOnFatalLog = 8,
+  /// @brief Flushes log with every log-entry (performance sensative) - Disabled by default
+  ImmediateFlush = 16,
+  /// @brief Enables strict file rolling
+  StrictLogFileSizeCheck = 32,
+  /// @brief Make terminal output colorful for supported terminals
+  ColoredTerminalOutput = 64,
+  /// @brief Supports use of multiple logging in same macro, e.g, CLOG(INFO, "default", "network")
+  MultiLoggerSupport = 128,
+  /// @brief Disables comparing performance tracker's checkpoints
+  DisablePerformanceTrackingCheckpointComparison = 256,
+  /// @brief Disable VModules
+  DisableVModules = 512,
+  /// @brief Disable VModules extensions
+  DisableVModulesExtensions = 1024,
+  /// @brief Enables hierarchical logging
+  HierarchicalLogging = 2048,
+  /// @brief Creates logger automatically when not available
+  CreateLoggerAutomatically = 4096,
+  /// @brief Adds spaces b/w logs that separated by left-shift operator
+  AutoSpacing = 8192,
+  /// @brief Preserves time format and does not convert it to sec, hour etc (performance tracking only)
+  FixedTimeFormat = 16384
+};
+namespace base {
+/// @brief Namespace containing constants used internally.
+namespace consts {
+#if defined(__GNUC__) && !defined(__clang__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-variable"
+#endif
+// Level log values - These are values that are replaced in place of %level format specifier
+// Extra spaces after format specifiers are only for readability purposes in log files
+static const base::type::char_t* kInfoLevelLogValue     =   ELPP_LITERAL("INFO");
+static const base::type::char_t* kDebugLevelLogValue    =   ELPP_LITERAL("DEBUG");
+static const base::type::char_t* kWarningLevelLogValue  =   ELPP_LITERAL("WARNING");
+static const base::type::char_t* kErrorLevelLogValue    =   ELPP_LITERAL("ERROR");
+static const base::type::char_t* kFatalLevelLogValue    =   ELPP_LITERAL("FATAL");
+static const base::type::char_t* kVerboseLevelLogValue  =
+  ELPP_LITERAL("VERBOSE"); // will become VERBOSE-x where x = verbose level
+static const base::type::char_t* kTraceLevelLogValue    =   ELPP_LITERAL("TRACE");
+static const base::type::char_t* kInfoLevelShortLogValue     =   ELPP_LITERAL("I");
+static const base::type::char_t* kDebugLevelShortLogValue    =   ELPP_LITERAL("D");
+static const base::type::char_t* kWarningLevelShortLogValue  =   ELPP_LITERAL("W");
+static const base::type::char_t* kErrorLevelShortLogValue    =   ELPP_LITERAL("E");
+static const base::type::char_t* kFatalLevelShortLogValue    =   ELPP_LITERAL("F");
+static const base::type::char_t* kVerboseLevelShortLogValue  =   ELPP_LITERAL("V");
+static const base::type::char_t* kTraceLevelShortLogValue    =   ELPP_LITERAL("T");
+// Format specifiers - These are used to define log format
+static const base::type::char_t* kAppNameFormatSpecifier          =      ELPP_LITERAL("%app");
+static const base::type::char_t* kLoggerIdFormatSpecifier         =      ELPP_LITERAL("%logger");
+static const base::type::char_t* kThreadIdFormatSpecifier         =      ELPP_LITERAL("%thread");
+static const base::type::char_t* kSeverityLevelFormatSpecifier    =      ELPP_LITERAL("%level");
+static const base::type::char_t* kSeverityLevelShortFormatSpecifier    =      ELPP_LITERAL("%levshort");
+static const base::type::char_t* kDateTimeFormatSpecifier         =      ELPP_LITERAL("%datetime");
+static const base::type::char_t* kLogFileFormatSpecifier          =      ELPP_LITERAL("%file");
+static const base::type::char_t* kLogFileBaseFormatSpecifier      =      ELPP_LITERAL("%fbase");
+static const base::type::char_t* kLogLineFormatSpecifier          =      ELPP_LITERAL("%line");
+static const base::type::char_t* kLogLocationFormatSpecifier      =      ELPP_LITERAL("%loc");
+static const base::type::char_t* kLogFunctionFormatSpecifier      =      ELPP_LITERAL("%func");
+static const base::type::char_t* kCurrentUserFormatSpecifier      =      ELPP_LITERAL("%user");
+static const base::type::char_t* kCurrentHostFormatSpecifier      =      ELPP_LITERAL("%host");
+static const base::type::char_t* kMessageFormatSpecifier          =      ELPP_LITERAL("%msg");
+static const base::type::char_t* kVerboseLevelFormatSpecifier     =      ELPP_LITERAL("%vlevel");
+static const char* kDateTimeFormatSpecifierForFilename            =      "%datetime";
+// Date/time
+static const char* kDays[7]                         =      { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
+static const char* kDaysAbbrev[7]                   =      { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
+static const char* kMonths[12]                      =      { "January", "February", "March", "Apri", "May", "June", "July", "August",
+                                                             "September", "October", "November", "December"
+                                                           };
+static const char* kMonthsAbbrev[12]                =      { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
+static const char* kDefaultDateTimeFormat           =      "%Y-%M-%d %H:%m:%s,%g";
+static const char* kDefaultDateTimeFormatInFilename =      "%Y-%M-%d_%H-%m";
+static const int kYearBase                          =      1900;
+static const char* kAm                              =      "AM";
+static const char* kPm                              =      "PM";
+// Miscellaneous constants
+#ifdef ELPP_DEFAULT_LOGGER
+static const char* kDefaultLoggerId                        =      ELPP_DEFAULT_LOGGER;
+#else
+static const char* kDefaultLoggerId                        =      "default";
+#endif
+#ifdef ELPP_DEFAULT_PERFORMANCE_LOGGER
+static const char* kPerformanceLoggerId                    =      ELPP_DEFAULT_PERFORMANCE_LOGGER;
+#else
+static const char* kPerformanceLoggerId                    =      "performance";
+#endif
+#if defined(ELPP_SYSLOG)
+static const char* kSysLogLoggerId                         =      "syslog";
+#endif  // defined(ELPP_SYSLOG)
+static const char* kNullPointer                            =      "nullptr";
+static const char  kFormatSpecifierChar                    =      '%';
+#if ELPP_VARIADIC_TEMPLATES_SUPPORTED
+static const char  kFormatSpecifierCharValue               =      'v';
+#endif  // ELPP_VARIADIC_TEMPLATES_SUPPORTED
+static const unsigned int kMaxLogPerContainer              =      100;
+static const unsigned int kMaxLogPerCounter                =      100000;
+static const unsigned int kDefaultSubsecondPrecision       =      3;
+static const base::type::VerboseLevel kMaxVerboseLevel     =      9;
+static const char* kUnknownUser                            =      "user";
+static const char* kUnknownHost                            =      "unknown-host";
+#if defined(ELPP_DEFAULT_LOG_FILE)
+static const char* kDefaultLogFile                         =      ELPP_DEFAULT_LOG_FILE;
+#else
+#  if ELPP_OS_UNIX
+#      if ELPP_OS_ANDROID
+static const char* kDefaultLogFile                         =      "logs/myeasylog.log";
+#      else
+static const char* kDefaultLogFile                         =      "logs/myeasylog.log";
+#      endif  // ELPP_OS_ANDROID
+#  elif ELPP_OS_WINDOWS
+static const char* kDefaultLogFile                         =      "logs\\myeasylog.log";
+#  endif  // ELPP_OS_UNIX
+#endif  // defined(ELPP_DEFAULT_LOG_FILE)
+#if !defined(ELPP_DISABLE_LOG_FILE_FROM_ARG)
+static const char* kDefaultLogFileParam                    =      "--default-log-file";
+#endif  // !defined(ELPP_DISABLE_LOG_FILE_FROM_ARG)
+#if defined(ELPP_LOGGING_FLAGS_FROM_ARG)
+static const char* kLoggingFlagsParam                      =      "--logging-flags";
+#endif  // defined(ELPP_LOGGING_FLAGS_FROM_ARG)
+#if ELPP_OS_WINDOWS
+static const char* kFilePathSeperator                      =      "\\";
+#else
+static const char* kFilePathSeperator                      =      "/";
+#endif  // ELPP_OS_WINDOWS
+static const char* kValidLoggerIdSymbols                   =
+  "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._";
+static const char* kConfigurationComment                   =      "##";
+static const char* kConfigurationLevel                     =      "*";
+static const char* kConfigurationLoggerId                  =      "--";
+static const std::size_t kSourceFilenameMaxLength          =      100;
+static const std::size_t kSourceLineMaxLength              =      10;
+static const Level kPerformanceTrackerDefaultLevel         =      Level::Info;
+const struct {
+  double value;
+  const base::type::char_t* unit;
+} kTimeFormats[] = {
+  { 1000.0f, ELPP_LITERAL("us") },
+  { 1000.0f, ELPP_LITERAL("ms") },
+  { 60.0f, ELPP_LITERAL("seconds") },
+  { 60.0f, ELPP_LITERAL("minutes") },
+  { 24.0f, ELPP_LITERAL("hours") },
+  { 7.0f, ELPP_LITERAL("days") }
+};
+static const int kTimeFormatsCount                           =      sizeof(kTimeFormats) / sizeof(kTimeFormats[0]);
+const struct {
+  int numb;
+  const char* name;
+  const char* brief;
+  const char* detail;
+} kCrashSignals[] = {
+  // NOTE: Do not re-order, if you do please check CrashHandler(bool) constructor and CrashHandler::setHandler(..)
+  {
+    SIGABRT, "SIGABRT", "Abnormal termination",
+    "Program was abnormally terminated."
+  },
+  {
+    SIGFPE, "SIGFPE", "Erroneous arithmetic operation",
+    "Arithemetic operation issue such as division by zero or operation resulting in overflow."
+  },
+  {
+    SIGILL, "SIGILL", "Illegal instruction",
+    "Generally due to a corruption in the code or to an attempt to execute data."
+  },
+  {
+    SIGSEGV, "SIGSEGV", "Invalid access to memory",
+    "Program is trying to read an invalid (unallocated, deleted or corrupted) or inaccessible memory."
+  },
+  {
+    SIGINT, "SIGINT", "Interactive attention signal",
+    "Interruption generated (generally) by user or operating system."
+  },
+};
+static const int kCrashSignalsCount                          =      sizeof(kCrashSignals) / sizeof(kCrashSignals[0]);
+#if defined(__GNUC__) && !defined(__clang__)
+#pragma GCC diagnostic pop
+#endif
+}  // namespace consts
+}  // namespace base
+typedef std::function<void(const char*, std::size_t)> PreRollOutCallback;
+namespace base {
+static inline void defaultPreRollOutCallback(const char*, std::size_t) {}
+/// @brief Enum to represent timestamp unit
+enum class TimestampUnit : base::type::EnumType {
+  Microsecond = 0, Millisecond = 1, Second = 2, Minute = 3, Hour = 4, Day = 5
+};
+/// @brief Format flags used to determine specifiers that are active for performance improvements.
+enum class FormatFlags : base::type::EnumType {
+  DateTime = 1 << 1,
+  LoggerId = 1 << 2,
+  File = 1 << 3,
+  Line = 1 << 4,
+  Location = 1 << 5,
+  Function = 1 << 6,
+  User = 1 << 7,
+  Host = 1 << 8,
+  LogMessage = 1 << 9,
+  VerboseLevel = 1 << 10,
+  AppName = 1 << 11,
+  ThreadId = 1 << 12,
+  Level = 1 << 13,
+  FileBase = 1 << 14,
+  LevelShort = 1 << 15
+};
+/// @brief A subsecond precision class containing actual width and offset of the subsecond part
+class SubsecondPrecision {
+ public:
+  SubsecondPrecision(void) {
+    init(base::consts::kDefaultSubsecondPrecision);
+  }
+  explicit SubsecondPrecision(int width) {
+    init(width);
+  }
+  bool operator==(const SubsecondPrecision& ssPrec) {
+    return m_width == ssPrec.m_width && m_offset == ssPrec.m_offset;
+  }
+  int m_width;
+  unsigned int m_offset;
+ private:
+  void init(int width);
+};
+/// @brief Type alias of SubsecondPrecision
+typedef SubsecondPrecision MillisecondsWidth;
+/// @brief Namespace containing utility functions/static classes used internally
+namespace utils {
+/// @brief Deletes memory safely and points to null
+template <typename T>
+static
+typename std::enable_if<std::is_pointer<T*>::value, void>::type
+safeDelete(T*& pointer) {
+  if (pointer == nullptr)
+    return;
+  delete pointer;
+  pointer = nullptr;
+}
+/// @brief Bitwise operations for C++11 strong enum class. This casts e into Flag_T and returns value after bitwise operation
+/// Use these function as <pre>flag = bitwise::Or<MyEnum>(MyEnum::val1, flag);</pre>
+namespace bitwise {
+template <typename Enum>
+static inline base::type::EnumType And(Enum e, base::type::EnumType flag) {
+  return static_cast<base::type::EnumType>(flag) & static_cast<base::type::EnumType>(e);
+}
+template <typename Enum>
+static inline base::type::EnumType Not(Enum e, base::type::EnumType flag) {
+  return static_cast<base::type::EnumType>(flag) & ~(static_cast<base::type::EnumType>(e));
+}
+template <typename Enum>
+static inline base::type::EnumType Or(Enum e, base::type::EnumType flag) {
+  return static_cast<base::type::EnumType>(flag) | static_cast<base::type::EnumType>(e);
+}
+}  // namespace bitwise
+template <typename Enum>
+static inline void addFlag(Enum e, base::type::EnumType* flag) {
+  *flag = base::utils::bitwise::Or<Enum>(e, *flag);
+}
+template <typename Enum>
+static inline void removeFlag(Enum e, base::type::EnumType* flag) {
+  *flag = base::utils::bitwise::Not<Enum>(e, *flag);
+}
+template <typename Enum>
+static inline bool hasFlag(Enum e, base::type::EnumType flag) {
+  return base::utils::bitwise::And<Enum>(e, flag) > 0x0;
+}
+}  // namespace utils
+namespace threading {
+#if ELPP_THREADING_ENABLED
+#  if !ELPP_USE_STD_THREADING
+namespace internal {
+/// @brief A mutex wrapper for compiler that dont yet support std::recursive_mutex
+class Mutex : base::NoCopy {
+ public:
+  Mutex(void) {
+#  if ELPP_OS_UNIX
+    pthread_mutexattr_t attr;
+    pthread_mutexattr_init(&attr);
+    pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
+    pthread_mutex_init(&m_underlyingMutex, &attr);
+    pthread_mutexattr_destroy(&attr);
+#  elif ELPP_OS_WINDOWS
+    InitializeCriticalSection(&m_underlyingMutex);
+#  endif  // ELPP_OS_UNIX
+  }
+
+  virtual ~Mutex(void) {
+#  if ELPP_OS_UNIX
+    pthread_mutex_destroy(&m_underlyingMutex);
+#  elif ELPP_OS_WINDOWS
+    DeleteCriticalSection(&m_underlyingMutex);
+#  endif  // ELPP_OS_UNIX
+  }
+
+  inline void lock(void) {
+#  if ELPP_OS_UNIX
+    pthread_mutex_lock(&m_underlyingMutex);
+#  elif ELPP_OS_WINDOWS
+    EnterCriticalSection(&m_underlyingMutex);
+#  endif  // ELPP_OS_UNIX
+  }
+
+  inline bool try_lock(void) {
+#  if ELPP_OS_UNIX
+    return (pthread_mutex_trylock(&m_underlyingMutex) == 0);
+#  elif ELPP_OS_WINDOWS
+    return TryEnterCriticalSection(&m_underlyingMutex);
+#  endif  // ELPP_OS_UNIX
+  }
+
+  inline void unlock(void) {
+#  if ELPP_OS_UNIX
+    pthread_mutex_unlock(&m_underlyingMutex);
+#  elif ELPP_OS_WINDOWS
+    LeaveCriticalSection(&m_underlyingMutex);
+#  endif  // ELPP_OS_UNIX
+  }
+
+ private:
+#  if ELPP_OS_UNIX
+  pthread_mutex_t m_underlyingMutex;
+#  elif ELPP_OS_WINDOWS
+  CRITICAL_SECTION m_underlyingMutex;
+#  endif  // ELPP_OS_UNIX
+};
+/// @brief Scoped lock for compiler that dont yet support std::lock_guard
+template <typename M>
+class ScopedLock : base::NoCopy {
+ public:
+  explicit ScopedLock(M& mutex) {
+    m_mutex = &mutex;
+    m_mutex->lock();
+  }
+
+  virtual ~ScopedLock(void) {
+    m_mutex->unlock();
+  }
+ private:
+  M* m_mutex;
+  ScopedLock(void);
+};
+} // namespace internal
+typedef base::threading::internal::Mutex Mutex;
+typedef base::threading::internal::ScopedLock<base::threading::Mutex> ScopedLock;
+#  else
+typedef std::recursive_mutex Mutex;
+typedef std::lock_guard<base::threading::Mutex> ScopedLock;
+#  endif  // !ELPP_USE_STD_THREADING
+#else
+namespace internal {
+/// @brief Mutex wrapper used when multi-threading is disabled.
+class NoMutex : base::NoCopy {
+ public:
+  NoMutex(void) {}
+  inline void lock(void) {}
+  inline bool try_lock(void) {
+    return true;
+  }
+  inline void unlock(void) {}
+};
+/// @brief Lock guard wrapper used when multi-threading is disabled.
+template <typename Mutex>
+class NoScopedLock : base::NoCopy {
+ public:
+  explicit NoScopedLock(Mutex&) {
+  }
+  virtual ~NoScopedLock(void) {
+  }
+ private:
+  NoScopedLock(void);
+};
+}  // namespace internal
+typedef base::threading::internal::NoMutex Mutex;
+typedef base::threading::internal::NoScopedLock<base::threading::Mutex> ScopedLock;
+#endif  // ELPP_THREADING_ENABLED
+/// @brief Base of thread safe class, this class is inheritable-only
+class ThreadSafe {
+ public:
+  virtual inline void acquireLock(void) ELPP_FINAL { m_mutex.lock(); }
+  virtual inline void releaseLock(void) ELPP_FINAL { m_mutex.unlock(); }
+  virtual inline base::threading::Mutex& lock(void) ELPP_FINAL { return m_mutex; }
+ protected:
+  ThreadSafe(void) {}
+  virtual ~ThreadSafe(void) {}
+ private:
+  base::threading::Mutex m_mutex;
+};
+
+#if ELPP_THREADING_ENABLED
+#  if !ELPP_USE_STD_THREADING
+/// @brief Gets ID of currently running threading in windows systems. On unix, nothing is returned.
+static std::string getCurrentThreadId(void) {
+  std::stringstream ss;
+#      if (ELPP_OS_WINDOWS)
+  ss << GetCurrentThreadId();
+#      endif  // (ELPP_OS_WINDOWS)
+  return ss.str();
+}
+#  else
+/// @brief Gets ID of currently running threading using std::this_thread::get_id()
+static std::string getCurrentThreadId(void) {
+  std::stringstream ss;
+  ss << std::this_thread::get_id();
+  return ss.str();
+}
+#  endif  // !ELPP_USE_STD_THREADING
+#else
+static inline std::string getCurrentThreadId(void) {
+  return std::string();
+}
+#endif  // ELPP_THREADING_ENABLED
+}  // namespace threading
+namespace utils {
+class File : base::StaticClass {
+ public:
+  /// @brief Creates new out file stream for specified filename.
+  /// @return Pointer to newly created fstream or nullptr
+  static base::type::fstream_t* newFileStream(const std::string& filename);
+
+  /// @brief Gets size of file provided in stream
+  static std::size_t getSizeOfFile(base::type::fstream_t* fs);
+
+  /// @brief Determines whether or not provided path exist in current file system
+  static bool pathExists(const char* path, bool considerFile = false);
+
+  /// @brief Creates specified path on file system
+  /// @param path Path to create.
+  static bool createPath(const std::string& path);
+  /// @brief Extracts path of filename with leading slash
+  static std::string extractPathFromFilename(const std::string& fullPath,
+      const char* seperator = base::consts::kFilePathSeperator);
+  /// @brief builds stripped filename and puts it in buff
+  static void buildStrippedFilename(const char* filename, char buff[],
+                                    std::size_t limit = base::consts::kSourceFilenameMaxLength);
+  /// @brief builds base filename and puts it in buff
+  static void buildBaseFilename(const std::string& fullPath, char buff[],
+                                std::size_t limit = base::consts::kSourceFilenameMaxLength,
+                                const char* seperator = base::consts::kFilePathSeperator);
+};
+/// @brief String utilities helper class used internally. You should not use it.
+class Str : base::StaticClass {
+ public:
+  /// @brief Checks if character is digit. Dont use libc implementation of it to prevent locale issues.
+  static inline bool isDigit(char c) {
+    return c >= '0' && c <= '9';
+  }
+
+  /// @brief Matches wildcards, '*' and '?' only supported.
+  static bool wildCardMatch(const char* str, const char* pattern);
+
+  static std::string& ltrim(std::string& str);
+  static std::string& rtrim(std::string& str);
+  static std::string& trim(std::string& str);
+
+  /// @brief Determines whether or not str starts with specified string
+  /// @param str String to check
+  /// @param start String to check against
+  /// @return Returns true if starts with specified string, false otherwise
+  static bool startsWith(const std::string& str, const std::string& start);
+
+  /// @brief Determines whether or not str ends with specified string
+  /// @param str String to check
+  /// @param end String to check against
+  /// @return Returns true if ends with specified string, false otherwise
+  static bool endsWith(const std::string& str, const std::string& end);
+
+  /// @brief Replaces all instances of replaceWhat with 'replaceWith'. Original variable is changed for performance.
+  /// @param [in,out] str String to replace from
+  /// @param replaceWhat Character to replace
+  /// @param replaceWith Character to replace with
+  /// @return Modified version of str
+  static std::string& replaceAll(std::string& str, char replaceWhat, char replaceWith);
+
+  /// @brief Replaces all instances of 'replaceWhat' with 'replaceWith'. (String version) Replaces in place
+  /// @param str String to replace from
+  /// @param replaceWhat Character to replace
+  /// @param replaceWith Character to replace with
+  /// @return Modified (original) str
+  static std::string& replaceAll(std::string& str, const std::string& replaceWhat,
+                                 const std::string& replaceWith);
+
+  static void replaceFirstWithEscape(base::type::string_t& str, const base::type::string_t& replaceWhat,
+                                     const base::type::string_t& replaceWith);
+#if defined(ELPP_UNICODE)
+  static void replaceFirstWithEscape(base::type::string_t& str, const base::type::string_t& replaceWhat,
+                                     const std::string& replaceWith);
+#endif  // defined(ELPP_UNICODE)
+  /// @brief Converts string to uppercase
+  /// @param str String to convert
+  /// @return Uppercase string
+  static std::string& toUpper(std::string& str);
+
+  /// @brief Compares cstring equality - uses strcmp
+  static bool cStringEq(const char* s1, const char* s2);
+
+  /// @brief Compares cstring equality (case-insensitive) - uses toupper(char)
+  /// Dont use strcasecmp because of CRT (VC++)
+  static bool cStringCaseEq(const char* s1, const char* s2);
+
+  /// @brief Returns true if c exist in str
+  static bool contains(const char* str, char c);
+
+  static char* convertAndAddToBuff(std::size_t n, int len, char* buf, const char* bufLim, bool zeroPadded = true);
+  static char* addToBuff(const char* str, char* buf, const char* bufLim);
+  static char* clearBuff(char buff[], std::size_t lim);
+
+  /// @brief Converst wchar* to char*
+  ///        NOTE: Need to free return value after use!
+  static char* wcharPtrToCharPtr(const wchar_t* line);
+};
+/// @brief Operating System helper static class used internally. You should not use it.
+class OS : base::StaticClass {
+ public:
+#if ELPP_OS_WINDOWS
+  /// @brief Gets environment variables for Windows based OS.
+  ///        We are not using <code>getenv(const char*)</code> because of CRT deprecation
+  /// @param varname Variable name to get environment variable value for
+  /// @return If variable exist the value of it otherwise nullptr
+  static const char* getWindowsEnvironmentVariable(const char* varname);
+#endif  // ELPP_OS_WINDOWS
+#if ELPP_OS_ANDROID
+  /// @brief Reads android property value
+  static std::string getProperty(const char* prop);
+
+  /// @brief Reads android device name
+  static std::string getDeviceName(void);
+#endif  // ELPP_OS_ANDROID
+
+  /// @brief Runs command on terminal and returns the output.
+  ///
+  /// @detail This is applicable only on unix based systems, for all other OS, an empty string is returned.
+  /// @param command Bash command
+  /// @return Result of bash output or empty string if no result found.
+  static const std::string getBashOutput(const char* command);
+
+  /// @brief Gets environment variable. This is cross-platform and CRT safe (for VC++)
+  /// @param variableName Environment variable name
+  /// @param defaultVal If no environment variable or value found the value to return by default
+  /// @param alternativeBashCommand If environment variable not found what would be alternative bash command
+  ///        in order to look for value user is looking for. E.g, for 'user' alternative command will 'whoami'
+  static std::string getEnvironmentVariable(const char* variableName, const char* defaultVal,
+      const char* alternativeBashCommand = nullptr);
+  /// @brief Gets current username.
+  static std::string currentUser(void);
+
+  /// @brief Gets current host name or computer name.
+  ///
+  /// @detail For android systems this is device name with its manufacturer and model seperated by hyphen
+  static std::string currentHost(void);
+  /// @brief Whether or not terminal supports colors
+  static bool termSupportsColor(void);
+};
+/// @brief Contains utilities for cross-platform date/time. This class make use of el::base::utils::Str
+class DateTime : base::StaticClass {
+ public:
+  /// @brief Cross platform gettimeofday for Windows and unix platform. This can be used to determine current microsecond.
+  ///
+  /// @detail For unix system it uses gettimeofday(timeval*, timezone*) and for Windows, a seperate implementation is provided
+  /// @param [in,out] tv Pointer that gets updated
+  static void gettimeofday(struct timeval* tv);
+
+  /// @brief Gets current date and time with a subsecond part.
+  /// @param format User provided date/time format
+  /// @param ssPrec A pointer to base::SubsecondPrecision from configuration (non-null)
+  /// @returns string based date time in specified format.
+  static std::string getDateTime(const char* format, const base::SubsecondPrecision* ssPrec);
+
+  /// @brief Converts timeval (struct from ctime) to string using specified format and subsecond precision
+  static std::string timevalToString(struct timeval tval, const char* format,
+                                     const el::base::SubsecondPrecision* ssPrec);
+
+  /// @brief Formats time to get unit accordingly, units like second if > 1000 or minutes if > 60000 etc
+  static base::type::string_t formatTime(unsigned long long time, base::TimestampUnit timestampUnit);
+
+  /// @brief Gets time difference in milli/micro second depending on timestampUnit
+  static unsigned long long getTimeDifference(const struct timeval& endTime, const struct timeval& startTime,
+      base::TimestampUnit timestampUnit);
+
+
+ private:
+  static struct ::tm* buildTimeInfo(struct timeval* currTime, struct ::tm* timeInfo);
+  static char* parseFormat(char* buf, std::size_t bufSz, const char* format, const struct tm* tInfo,
+                           std::size_t msec, const base::SubsecondPrecision* ssPrec);
+};
+/// @brief Command line arguments for application if specified using el::Helpers::setArgs(..) or START_EASYLOGGINGPP(..)
+class CommandLineArgs {
+ public:
+  CommandLineArgs(void) {
+    setArgs(0, static_cast<char**>(nullptr));
+  }
+  CommandLineArgs(int argc, const char** argv) {
+    setArgs(argc, argv);
+  }
+  CommandLineArgs(int argc, char** argv) {
+    setArgs(argc, argv);
+  }
+  virtual ~CommandLineArgs(void) {}
+  /// @brief Sets arguments and parses them
+  inline void setArgs(int argc, const char** argv) {
+    setArgs(argc, const_cast<char**>(argv));
+  }
+  /// @brief Sets arguments and parses them
+  void setArgs(int argc, char** argv);
+  /// @brief Returns true if arguments contain paramKey with a value (seperated by '=')
+  bool hasParamWithValue(const char* paramKey) const;
+  /// @brief Returns value of arguments
+  /// @see hasParamWithValue(const char*)
+  const char* getParamValue(const char* paramKey) const;
+  /// @brief Return true if arguments has a param (not having a value) i,e without '='
+  bool hasParam(const char* paramKey) const;
+  /// @brief Returns true if no params available. This exclude argv[0]
+  bool empty(void) const;
+  /// @brief Returns total number of arguments. This exclude argv[0]
+  std::size_t size(void) const;
+  friend base::type::ostream_t& operator<<(base::type::ostream_t& os, const CommandLineArgs& c);
+
+ private:
+  int m_argc;
+  char** m_argv;
+  std::map<std::string, std::string> m_paramsWithValue;
+  std::vector<std::string> m_params;
+};
+/// @brief Abstract registry (aka repository) that provides basic interface for pointer repository specified by T_Ptr type.
+///
+/// @detail Most of the functions are virtual final methods but anything implementing this abstract class should implement
+/// unregisterAll() and deepCopy(const AbstractRegistry<T_Ptr, Container>&) and write registerNew() method according to container
+/// and few more methods; get() to find element, unregister() to unregister single entry.
+/// Please note that this is thread-unsafe and should also implement thread-safety mechanisms in implementation.
+template <typename T_Ptr, typename Container>
+class AbstractRegistry : public base::threading::ThreadSafe {
+ public:
+  typedef typename Container::iterator iterator;
+  typedef typename Container::const_iterator const_iterator;
+
+  /// @brief Default constructor
+  AbstractRegistry(void) {}
+
+  /// @brief Move constructor that is useful for base classes
+  AbstractRegistry(AbstractRegistry&& sr) {
+    if (this == &sr) {
+      return;
+    }
+    unregisterAll();
+    m_list = std::move(sr.m_list);
+  }
+
+  bool operator==(const AbstractRegistry<T_Ptr, Container>& other) {
+    if (size() != other.size()) {
+      return false;
+    }
+    for (std::size_t i = 0; i < m_list.size(); ++i) {
+      if (m_list.at(i) != other.m_list.at(i)) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  bool operator!=(const AbstractRegistry<T_Ptr, Container>& other) {
+    if (size() != other.size()) {
+      return true;
+    }
+    for (std::size_t i = 0; i < m_list.size(); ++i) {
+      if (m_list.at(i) != other.m_list.at(i)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /// @brief Assignment move operator
+  AbstractRegistry& operator=(AbstractRegistry&& sr) {
+    if (this == &sr) {
+      return *this;
+    }
+    unregisterAll();
+    m_list = std::move(sr.m_list);
+    return *this;
+  }
+
+  virtual ~AbstractRegistry(void) {
+  }
+
+  /// @return Iterator pointer from start of repository
+  virtual inline iterator begin(void) ELPP_FINAL {
+    return m_list.begin();
+  }
+
+  /// @return Iterator pointer from end of repository
+  virtual inline iterator end(void) ELPP_FINAL {
+    return m_list.end();
+  }
+
+
+  /// @return Constant iterator pointer from start of repository
+  virtual inline const_iterator cbegin(void) const ELPP_FINAL {
+    return m_list.cbegin();
+  }
+
+  /// @return End of repository
+  virtual inline const_iterator cend(void) const ELPP_FINAL {
+    return m_list.cend();
+  }
+
+  /// @return Whether or not repository is empty
+  virtual inline bool empty(void) const ELPP_FINAL {
+    return m_list.empty();
+  }
+
+  /// @return Size of repository
+  virtual inline std::size_t size(void) const ELPP_FINAL {
+    return m_list.size();
+  }
+
+  /// @brief Returns underlying container by reference
+  virtual inline Container& list(void) ELPP_FINAL {
+    return m_list;
+  }
+
+  /// @brief Returns underlying container by constant reference.
+  virtual inline const Container& list(void) const ELPP_FINAL {
+    return m_list;
+  }
+
+  /// @brief Unregisters all the pointers from current repository.
+  virtual void unregisterAll(void) = 0;
+
+ protected:
+  virtual void deepCopy(const AbstractRegistry<T_Ptr, Container>&) = 0;
+  void reinitDeepCopy(const AbstractRegistry<T_Ptr, Container>& sr) {
+    unregisterAll();
+    deepCopy(sr);
+  }
+
+ private:
+  Container m_list;
+};
+
+/// @brief A pointer registry mechanism to manage memory and provide search functionalities. (non-predicate version)
+///
+/// @detail NOTE: This is thread-unsafe implementation (although it contains lock function, it does not use these functions)
+///         of AbstractRegistry<T_Ptr, Container>. Any implementation of this class should be
+///         explicitly (by using lock functions)
+template <typename T_Ptr, typename T_Key = const char*>
+class Registry : public AbstractRegistry<T_Ptr, std::map<T_Key, T_Ptr*>> {
+ public:
+  typedef typename Registry<T_Ptr, T_Key>::iterator iterator;
+  typedef typename Registry<T_Ptr, T_Key>::const_iterator const_iterator;
+
+  Registry(void) {}
+
+  /// @brief Copy constructor that is useful for base classes. Try to avoid this constructor, use move constructor.
+  Registry(const Registry& sr) : AbstractRegistry<T_Ptr, std::vector<T_Ptr*>>() {
+    if (this == &sr) {
+      return;
+    }
+    this->reinitDeepCopy(sr);
+  }
+
+  /// @brief Assignment operator that unregisters all the existing registeries and deeply copies each of repo element
+  /// @see unregisterAll()
+  /// @see deepCopy(const AbstractRegistry&)
+  Registry& operator=(const Registry& sr) {
+    if (this == &sr) {
+      return *this;
+    }
+    this->reinitDeepCopy(sr);
+    return *this;
+  }
+
+  virtual ~Registry(void) {
+    unregisterAll();
+  }
+
+ protected:
+  virtual void unregisterAll(void) ELPP_FINAL {
+    if (!this->empty()) {
+      for (auto&& curr : this->list()) {
+        base::utils::safeDelete(curr.second);
+      }
+      this->list().clear();
+    }
+  }
+
+/// @brief Registers new registry to repository.
+  virtual void registerNew(const T_Key& uniqKey, T_Ptr* ptr) ELPP_FINAL {
+    unregister(uniqKey);
+    this->list().insert(std::make_pair(uniqKey, ptr));
+  }
+
+/// @brief Unregisters single entry mapped to specified unique key
+  void unregister(const T_Key& uniqKey) {
+    T_Ptr* existing = get(uniqKey);
+    if (existing != nullptr) {
+      this->list().erase(uniqKey);
+      base::utils::safeDelete(existing);
+    }
+  }
+
+/// @brief Gets pointer from repository. If none found, nullptr is returned.
+  T_Ptr* get(const T_Key& uniqKey) {
+    iterator it = this->list().find(uniqKey);
+    return it == this->list().end()
+           ? nullptr
+           : it->second;
+  }
+
+ private:
+  virtual void deepCopy(const AbstractRegistry<T_Ptr, std::map<T_Key, T_Ptr*>>& sr) ELPP_FINAL {
+    for (const_iterator it = sr.cbegin(); it != sr.cend(); ++it) {
+      registerNew(it->first, new T_Ptr(*it->second));
+    }
+  }
+};
+
+/// @brief A pointer registry mechanism to manage memory and provide search functionalities. (predicate version)
+///
+/// @detail NOTE: This is thread-unsafe implementation of AbstractRegistry<T_Ptr, Container>. Any implementation of this class
+/// should be made thread-safe explicitly
+template <typename T_Ptr, typename Pred>
+class RegistryWithPred : public AbstractRegistry<T_Ptr, std::vector<T_Ptr*>> {
+ public:
+  typedef typename RegistryWithPred<T_Ptr, Pred>::iterator iterator;
+  typedef typename RegistryWithPred<T_Ptr, Pred>::const_iterator const_iterator;
+
+  RegistryWithPred(void) {
+  }
+
+  virtual ~RegistryWithPred(void) {
+    unregisterAll();
+  }
+
+  /// @brief Copy constructor that is useful for base classes. Try to avoid this constructor, use move constructor.
+  RegistryWithPred(const RegistryWithPred& sr) : AbstractRegistry<T_Ptr, std::vector<T_Ptr*>>() {
+    if (this == &sr) {
+      return;
+    }
+    this->reinitDeepCopy(sr);
+  }
+
+  /// @brief Assignment operator that unregisters all the existing registeries and deeply copies each of repo element
+  /// @see unregisterAll()
+  /// @see deepCopy(const AbstractRegistry&)
+  RegistryWithPred& operator=(const RegistryWithPred& sr) {
+    if (this == &sr) {
+      return *this;
+    }
+    this->reinitDeepCopy(sr);
+    return *this;
+  }
+
+  friend base::type::ostream_t& operator<<(base::type::ostream_t& os, const RegistryWithPred& sr) {
+    for (const_iterator it = sr.list().begin(); it != sr.list().end(); ++it) {
+      os << ELPP_LITERAL("    ") << **it << ELPP_LITERAL("\n");
+    }
+    return os;
+  }
+
+ protected:
+  virtual void unregisterAll(void) ELPP_FINAL {
+    if (!this->empty()) {
+      for (auto&& curr : this->list()) {
+        base::utils::safeDelete(curr);
+      }
+      this->list().clear();
+    }
+  }
+
+  virtual void unregister(T_Ptr*& ptr) ELPP_FINAL {
+    if (ptr) {
+      iterator iter = this->begin();
+      for (; iter != this->end(); ++iter) {
+        if (ptr == *iter) {
+          break;
+        }
+      }
+      if (iter != this->end() && *iter != nullptr) {
+        this->list().erase(iter);
+        base::utils::safeDelete(*iter);
+      }
+    }
+  }
+
+  virtual inline void registerNew(T_Ptr* ptr) ELPP_FINAL {
+    this->list().push_back(ptr);
+  }
+
+/// @brief Gets pointer from repository with speicifed arguments. Arguments are passed to predicate
+/// in order to validate pointer.
+  template <typename T, typename T2>
+  T_Ptr* get(const T& arg1, const T2 arg2) {
+    iterator iter = std::find_if(this->list().begin(), this->list().end(), Pred(arg1, arg2));
+    if (iter != this->list().end() && *iter != nullptr) {
+      return *iter;
+    }
+    return nullptr;
+  }
+
+ private:
+  virtual void deepCopy(const AbstractRegistry<T_Ptr, std::vector<T_Ptr*>>& sr) {
+    for (const_iterator it = sr.list().begin(); it != sr.list().end(); ++it) {
+      registerNew(new T_Ptr(**it));
+    }
+  }
+};
+class Utils {
+ public:
+  template <typename T, typename TPtr>
+  static bool installCallback(const std::string& id, std::map<std::string, TPtr>* mapT) {
+    if (mapT->find(id) == mapT->end()) {
+      mapT->insert(std::make_pair(id, TPtr(new T())));
+      return true;
+    }
+    return false;
+  }
+
+  template <typename T, typename TPtr>
+  static void uninstallCallback(const std::string& id, std::map<std::string, TPtr>* mapT) {
+    if (mapT->find(id) != mapT->end()) {
+      mapT->erase(id);
+    }
+  }
+
+  template <typename T, typename TPtr>
+  static T* callback(const std::string& id, std::map<std::string, TPtr>* mapT) {
+    typename std::map<std::string, TPtr>::iterator iter = mapT->find(id);
+    if (iter != mapT->end()) {
+      return static_cast<T*>(iter->second.get());
+    }
+    return nullptr;
+  }
+};
+}  // namespace utils
+} // namespace base
+/// @brief Base of Easylogging++ friendly class
+///
+/// @detail After inheriting this class publicly, implement pure-virtual function `void log(std::ostream&) const`
+class Loggable {
+ public:
+  virtual ~Loggable(void) {}
+  virtual void log(el::base::type::ostream_t&) const = 0;
+ private:
+  friend inline el::base::type::ostream_t& operator<<(el::base::type::ostream_t& os, const Loggable& loggable) {
+    loggable.log(os);
+    return os;
+  }
+};
+namespace base {
+/// @brief Represents log format containing flags and date format. This is used internally to start initial log
+class LogFormat : public Loggable {
+ public:
+  LogFormat(void);
+  LogFormat(Level level, const base::type::string_t& format);
+  LogFormat(const LogFormat& logFormat);
+  LogFormat(LogFormat&& logFormat);
+  LogFormat& operator=(const LogFormat& logFormat);
+  virtual ~LogFormat(void) {}
+  bool operator==(const LogFormat& other);
+
+  /// @brief Updates format to be used while logging.
+  /// @param userFormat User provided format
+  void parseFromFormat(const base::type::string_t& userFormat);
+
+  inline Level level(void) const {
+    return m_level;
+  }
+
+  inline const base::type::string_t& userFormat(void) const {
+    return m_userFormat;
+  }
+
+  inline const base::type::string_t& format(void) const {
+    return m_format;
+  }
+
+  inline const std::string& dateTimeFormat(void) const {
+    return m_dateTimeFormat;
+  }
+
+  inline base::type::EnumType flags(void) const {
+    return m_flags;
+  }
+
+  inline bool hasFlag(base::FormatFlags flag) const {
+    return base::utils::hasFlag(flag, m_flags);
+  }
+
+  virtual void log(el::base::type::ostream_t& os) const {
+    os << m_format;
+  }
+
+ protected:
+  /// @brief Updates date time format if available in currFormat.
+  /// @param index Index where %datetime, %date or %time was found
+  /// @param [in,out] currFormat current format that is being used to format
+  virtual void updateDateFormat(std::size_t index, base::type::string_t& currFormat) ELPP_FINAL;
+
+  /// @brief Updates %level from format. This is so that we dont have to do it at log-writing-time. It uses m_format and m_level
+  virtual void updateFormatSpec(void) ELPP_FINAL;
+
+  inline void addFlag(base::FormatFlags flag) {
+    base::utils::addFlag(flag, &m_flags);
+  }
+
+ private:
+  Level m_level;
+  base::type::string_t m_userFormat;
+  base::type::string_t m_format;
+  std::string m_dateTimeFormat;
+  base::type::EnumType m_flags;
+  std::string m_currentUser;
+  std::string m_currentHost;
+  friend class el::Logger;  // To resolve loggerId format specifier easily
+};
+}  // namespace base
+/// @brief Resolving function for format specifier
+typedef std::function<std::string(const LogMessage*)> FormatSpecifierValueResolver;
+/// @brief User-provided custom format specifier
+/// @see el::Helpers::installCustomFormatSpecifier
+/// @see FormatSpecifierValueResolver
+class CustomFormatSpecifier {
+ public:
+  CustomFormatSpecifier(const char* formatSpecifier, const FormatSpecifierValueResolver& resolver) :
+    m_formatSpecifier(formatSpecifier), m_resolver(resolver) {}
+  inline const char* formatSpecifier(void) const {
+    return m_formatSpecifier;
+  }
+  inline const FormatSpecifierValueResolver& resolver(void) const {
+    return m_resolver;
+  }
+  inline bool operator==(const char* formatSpecifier) {
+    return strcmp(m_formatSpecifier, formatSpecifier) == 0;
+  }
+
+ private:
+  const char* m_formatSpecifier;
+  FormatSpecifierValueResolver m_resolver;
+};
+/// @brief Represents single configuration that has representing level, configuration type and a string based value.
+///
+/// @detail String based value means any value either its boolean, integer or string itself, it will be embedded inside quotes
+/// and will be parsed later.
+///
+/// Consider some examples below:
+///   * el::Configuration confEnabledInfo(el::Level::Info, el::ConfigurationType::Enabled, "true");
+///   * el::Configuration confMaxLogFileSizeInfo(el::Level::Info, el::ConfigurationType::MaxLogFileSize, "2048");
+///   * el::Configuration confFilenameInfo(el::Level::Info, el::ConfigurationType::Filename, "/var/log/my.log");
+class Configuration : public Loggable {
+ public:
+  Configuration(const Configuration& c);
+  Configuration& operator=(const Configuration& c);
+
+  virtual ~Configuration(void) {
+  }
+
+  /// @brief Full constructor used to sets value of configuration
+  Configuration(Level level, ConfigurationType configurationType, const std::string& value);
+
+  /// @brief Gets level of current configuration
+  inline Level level(void) const {
+    return m_level;
+  }
+
+  /// @brief Gets configuration type of current configuration
+  inline ConfigurationType configurationType(void) const {
+    return m_configurationType;
+  }
+
+  /// @brief Gets string based configuration value
+  inline const std::string& value(void) const {
+    return m_value;
+  }
+
+  /// @brief Set string based configuration value
+  /// @param value Value to set. Values have to be std::string; For boolean values use "true", "false", for any integral values
+  ///        use them in quotes. They will be parsed when configuring
+  inline void setValue(const std::string& value) {
+    m_value = value;
+  }
+
+  virtual void log(el::base::type::ostream_t& os) const;
+
+  /// @brief Used to find configuration from configuration (pointers) repository. Avoid using it.
+  class Predicate {
+   public:
+    Predicate(Level level, ConfigurationType configurationType);
+
+    bool operator()(const Configuration* conf) const;
+
+   private:
+    Level m_level;
+    ConfigurationType m_configurationType;
+  };
+
+ private:
+  Level m_level;
+  ConfigurationType m_configurationType;
+  std::string m_value;
+};
+
+/// @brief Thread-safe Configuration repository
+///
+/// @detail This repository represents configurations for all the levels and configuration type mapped to a value.
+class Configurations : public base::utils::RegistryWithPred<Configuration, Configuration::Predicate> {
+ public:
+  /// @brief Default constructor with empty repository
+  Configurations(void);
+
+  /// @brief Constructor used to set configurations using configuration file.
+  /// @param configurationFile Full path to configuration file
+  /// @param useDefaultsForRemaining Lets you set the remaining configurations to default.
+  /// @param base If provided, this configuration will be based off existing repository that this argument is pointing to.
+  /// @see parseFromFile(const std::string&, Configurations* base)
+  /// @see setRemainingToDefault()
+  Configurations(const std::string& configurationFile, bool useDefaultsForRemaining = true,
+                 Configurations* base = nullptr);
+
+  virtual ~Configurations(void) {
+  }
+
+  /// @brief Parses configuration from file.
+  /// @param configurationFile Full path to configuration file
+  /// @param base Configurations to base new configuration repository off. This value is used when you want to use
+  ///        existing Configurations to base all the values and then set rest of configuration via configuration file.
+  /// @return True if successfully parsed, false otherwise. You may define 'ELPP_DEBUG_ASSERT_FAILURE' to make sure you
+  ///         do not proceed without successful parse.
+  bool parseFromFile(const std::string& configurationFile, Configurations* base = nullptr);
+
+  /// @brief Parse configurations from configuration string.
+  ///
+  /// @detail This configuration string has same syntax as configuration file contents. Make sure all the necessary
+  /// new line characters are provided.
+  /// @param base Configurations to base new configuration repository off. This value is used when you want to use
+  ///        existing Configurations to base all the values and then set rest of configuration via configuration text.
+  /// @return True if successfully parsed, false otherwise. You may define 'ELPP_DEBUG_ASSERT_FAILURE' to make sure you
+  ///         do not proceed without successful parse.
+  bool parseFromText(const std::string& configurationsString, Configurations* base = nullptr);
+
+  /// @brief Sets configuration based-off an existing configurations.
+  /// @param base Pointer to existing configurations.
+  void setFromBase(Configurations* base);
+
+  /// @brief Determines whether or not specified configuration type exists in the repository.
+  ///
+  /// @detail Returns as soon as first level is found.
+  /// @param configurationType Type of configuration to check existence for.
+  bool hasConfiguration(ConfigurationType configurationType);
+
+  /// @brief Determines whether or not specified configuration type exists for specified level
+  /// @param level Level to check
+  /// @param configurationType Type of configuration to check existence for.
+  bool hasConfiguration(Level level, ConfigurationType configurationType);
+
+  /// @brief Sets value of configuration for specified level.
+  ///
+  /// @detail Any existing configuration for specified level will be replaced. Also note that configuration types
+  /// ConfigurationType::SubsecondPrecision and ConfigurationType::PerformanceTracking will be ignored if not set for
+  /// Level::Global because these configurations are not dependant on level.
+  /// @param level Level to set configuration for (el::Level).
+  /// @param configurationType Type of configuration (el::ConfigurationType)
+  /// @param value A string based value. Regardless of what the data type of configuration is, it will always be string
+  /// from users' point of view. This is then parsed later to be used internally.
+  /// @see Configuration::setValue(const std::string& value)
+  /// @see el::Level
+  /// @see el::ConfigurationType
+  void set(Level level, ConfigurationType configurationType, const std::string& value);
+
+  /// @brief Sets single configuration based on other single configuration.
+  /// @see set(Level level, ConfigurationType configurationType, const std::string& value)
+  void set(Configuration* conf);
+
+  inline Configuration* get(Level level, ConfigurationType configurationType) {
+    base::threading::ScopedLock scopedLock(lock());
+    return RegistryWithPred<Configuration, Configuration::Predicate>::get(level, configurationType);
+  }
+
+  /// @brief Sets configuration for all levels.
+  /// @param configurationType Type of configuration
+  /// @param value String based value
+  /// @see Configurations::set(Level level, ConfigurationType configurationType, const std::string& value)
+  inline void setGlobally(ConfigurationType configurationType, const std::string& value) {
+    setGlobally(configurationType, value, false);
+  }
+
+  /// @brief Clears repository so that all the configurations are unset
+  inline void clear(void) {
+    base::threading::ScopedLock scopedLock(lock());
+    unregisterAll();
+  }
+
+  /// @brief Gets configuration file used in parsing this configurations.
+  ///
+  /// @detail If this repository was set manually or by text this returns empty string.
+  inline const std::string& configurationFile(void) const {
+    return m_configurationFile;
+  }
+
+  /// @brief Sets configurations to "factory based" configurations.
+  void setToDefault(void);
+
+  /// @brief Lets you set the remaining configurations to default.
+  ///
+  /// @detail By remaining, it means that the level/type a configuration does not exist for.
+  /// This function is useful when you want to minimize chances of failures, e.g, if you have a configuration file that sets
+  /// configuration for all the configurations except for Enabled or not, we use this so that ENABLED is set to default i.e,
+  /// true. If you dont do this explicitly (either by calling this function or by using second param in Constructor
+  /// and try to access a value, an error is thrown
+  void setRemainingToDefault(void);
+
+  /// @brief Parser used internally to parse configurations from file or text.
+  ///
+  /// @detail This class makes use of base::utils::Str.
+  /// You should not need this unless you are working on some tool for Easylogging++
+  class Parser : base::StaticClass {
+   public:
+    /// @brief Parses configuration from file.
+    /// @param configurationFile Full path to configuration file
+    /// @param sender Sender configurations pointer. Usually 'this' is used from calling class
+    /// @param base Configurations to base new configuration repository off. This value is used when you want to use
+    ///        existing Configurations to base all the values and then set rest of configuration via configuration file.
+    /// @return True if successfully parsed, false otherwise. You may define '_STOP_ON_FIRSTELPP_ASSERTION' to make sure you
+    ///         do not proceed without successful parse.
+    static bool parseFromFile(const std::string& configurationFile, Configurations* sender,
+                              Configurations* base = nullptr);
+
+    /// @brief Parse configurations from configuration string.
+    ///
+    /// @detail This configuration string has same syntax as configuration file contents. Make sure all the necessary
+    /// new line characters are provided. You may define '_STOP_ON_FIRSTELPP_ASSERTION' to make sure you
+    /// do not proceed without successful parse (This is recommended)
+    /// @param configurationsString the configuration in plain text format
+    /// @param sender Sender configurations pointer. Usually 'this' is used from calling class
+    /// @param base Configurations to base new configuration repository off. This value is used when you want to use
+    ///        existing Configurations to base all the values and then set rest of configuration via configuration text.
+    /// @return True if successfully parsed, false otherwise.
+    static bool parseFromText(const std::string& configurationsString, Configurations* sender,
+                              Configurations* base = nullptr);
+
+   private:
+    friend class el::Loggers;
+    static void ignoreComments(std::string* line);
+    static bool isLevel(const std::string& line);
+    static bool isComment(const std::string& line);
+    static inline bool isConfig(const std::string& line);
+    static bool parseLine(std::string* line, std::string* currConfigStr, std::string* currLevelStr, Level* currLevel,
+                          Configurations* conf);
+  };
+
+ private:
+  std::string m_configurationFile;
+  bool m_isFromFile;
+  friend class el::Loggers;
+
+  /// @brief Unsafely sets configuration if does not already exist
+  void unsafeSetIfNotExist(Level level, ConfigurationType configurationType, const std::string& value);
+
+  /// @brief Thread unsafe set
+  void unsafeSet(Level level, ConfigurationType configurationType, const std::string& value);
+
+  /// @brief Sets configurations for all levels including Level::Global if includeGlobalLevel is true
+  /// @see Configurations::setGlobally(ConfigurationType configurationType, const std::string& value)
+  void setGlobally(ConfigurationType configurationType, const std::string& value, bool includeGlobalLevel);
+
+  /// @brief Sets configurations (Unsafely) for all levels including Level::Global if includeGlobalLevel is true
+  /// @see Configurations::setGlobally(ConfigurationType configurationType, const std::string& value)
+  void unsafeSetGlobally(ConfigurationType configurationType, const std::string& value, bool includeGlobalLevel);
+};
+
+namespace base {
+typedef std::shared_ptr<base::type::fstream_t> FileStreamPtr;
+typedef std::map<std::string, FileStreamPtr> LogStreamsReferenceMap;
+/// @brief Configurations with data types.
+///
+/// @detail el::Configurations have string based values. This is whats used internally in order to read correct configurations.
+/// This is to perform faster while writing logs using correct configurations.
+///
+/// This is thread safe and final class containing non-virtual destructor (means nothing should inherit this class)
+class TypedConfigurations : public base::threading::ThreadSafe {
+ public:
+  /// @brief Constructor to initialize (construct) the object off el::Configurations
+  /// @param configurations Configurations pointer/reference to base this typed configurations off.
+  /// @param logStreamsReference Use ELPP->registeredLoggers()->logStreamsReference()
+  TypedConfigurations(Configurations* configurations, base::LogStreamsReferenceMap* logStreamsReference);
+
+  TypedConfigurations(const TypedConfigurations& other);
+
+  virtual ~TypedConfigurations(void) {
+  }
+
+  const Configurations* configurations(void) const {
+    return m_configurations;
+  }
+
+  bool enabled(Level level);
+  bool toFile(Level level);
+  const std::string& filename(Level level);
+  bool toStandardOutput(Level level);
+  const base::LogFormat& logFormat(Level level);
+  const base::SubsecondPrecision& subsecondPrecision(Level level = Level::Global);
+  const base::MillisecondsWidth& millisecondsWidth(Level level = Level::Global);
+  bool performanceTracking(Level level = Level::Global);
+  base::type::fstream_t* fileStream(Level level);
+  std::size_t maxLogFileSize(Level level);
+  std::size_t logFlushThreshold(Level level);
+
+ private:
+  Configurations* m_configurations;
+  std::map<Level, bool> m_enabledMap;
+  std::map<Level, bool> m_toFileMap;
+  std::map<Level, std::string> m_filenameMap;
+  std::map<Level, bool> m_toStandardOutputMap;
+  std::map<Level, base::LogFormat> m_logFormatMap;
+  std::map<Level, base::SubsecondPrecision> m_subsecondPrecisionMap;
+  std::map<Level, bool> m_performanceTrackingMap;
+  std::map<Level, base::FileStreamPtr> m_fileStreamMap;
+  std::map<Level, std::size_t> m_maxLogFileSizeMap;
+  std::map<Level, std::size_t> m_logFlushThresholdMap;
+  base::LogStreamsReferenceMap* m_logStreamsReference;
+
+  friend class el::Helpers;
+  friend class el::base::MessageBuilder;
+  friend class el::base::Writer;
+  friend class el::base::DefaultLogDispatchCallback;
+  friend class el::base::LogDispatcher;
+
+  template <typename Conf_T>
+  inline Conf_T getConfigByVal(Level level, const std::map<Level, Conf_T>* confMap, const char* confName) {
+    base::threading::ScopedLock scopedLock(lock());
+    return unsafeGetConfigByVal(level, confMap, confName);  // This is not unsafe anymore - mutex locked in scope
+  }
+
+  template <typename Conf_T>
+  inline Conf_T& getConfigByRef(Level level, std::map<Level, Conf_T>* confMap, const char* confName) {
+    base::threading::ScopedLock scopedLock(lock());
+    return unsafeGetConfigByRef(level, confMap, confName);  // This is not unsafe anymore - mutex locked in scope
+  }
+
+  template <typename Conf_T>
+  Conf_T unsafeGetConfigByVal(Level level, const std::map<Level, Conf_T>* confMap, const char* confName) {
+    ELPP_UNUSED(confName);
+    typename std::map<Level, Conf_T>::const_iterator it = confMap->find(level);
+    if (it == confMap->end()) {
+      try {
+        return confMap->at(Level::Global);
+      } catch (...) {
+        ELPP_INTERNAL_ERROR("Unable to get configuration [" << confName << "] for level ["
+                            << LevelHelper::convertToString(level) << "]"
+                            << std::endl << "Please ensure you have properly configured logger.", false);
+        return Conf_T();
+      }
+    }
+    return it->second;
+  }
+
+  template <typename Conf_T>
+  Conf_T& unsafeGetConfigByRef(Level level, std::map<Level, Conf_T>* confMap, const char* confName) {
+    ELPP_UNUSED(confName);
+    typename std::map<Level, Conf_T>::iterator it = confMap->find(level);
+    if (it == confMap->end()) {
+      try {
+        return confMap->at(Level::Global);
+      } catch (...) {
+        ELPP_INTERNAL_ERROR("Unable to get configuration [" << confName << "] for level ["
+                            << LevelHelper::convertToString(level) << "]"
+                            << std::endl << "Please ensure you have properly configured logger.", false);
+      }
+    }
+    return it->second;
+  }
+
+  template <typename Conf_T>
+  void setValue(Level level, const Conf_T& value, std::map<Level, Conf_T>* confMap, bool includeGlobalLevel = true) {
+    // If map is empty and we are allowed to add into generic level (Level::Global), do it!
+    if (confMap->empty() && includeGlobalLevel) {
+      confMap->insert(std::make_pair(Level::Global, value));
+      return;
+    }
+    // If same value exist in generic level already, dont add it to explicit level
+    typename std::map<Level, Conf_T>::iterator it = confMap->find(Level::Global);
+    if (it != confMap->end() && it->second == value) {
+      return;
+    }
+    // Now make sure we dont double up values if we really need to add it to explicit level
+    it = confMap->find(level);
+    if (it == confMap->end()) {
+      // Value not found for level, add new
+      confMap->insert(std::make_pair(level, value));
+    } else {
+      // Value found, just update value
+      confMap->at(level) = value;
+    }
+  }
+
+  void build(Configurations* configurations);
+  unsigned long getULong(std::string confVal);
+  std::string resolveFilename(const std::string& filename);
+  void insertFile(Level level, const std::string& fullFilename);
+  bool unsafeValidateFileRolling(Level level, const PreRollOutCallback& preRollOutCallback);
+
+  inline bool validateFileRolling(Level level, const PreRollOutCallback& preRollOutCallback) {
+    base::threading::ScopedLock scopedLock(lock());
+    return unsafeValidateFileRolling(level, preRollOutCallback);
+  }
+};
+/// @brief Class that keeps record of current line hit for occasional logging
+class HitCounter {
+ public:
+  HitCounter(void) :
+    m_filename(""),
+    m_lineNumber(0),
+    m_hitCounts(0) {
+  }
+
+  HitCounter(const char* filename, base::type::LineNumber lineNumber) :
+    m_filename(filename),
+    m_lineNumber(lineNumber),
+    m_hitCounts(0) {
+  }
+
+  HitCounter(const HitCounter& hitCounter) :
+    m_filename(hitCounter.m_filename),
+    m_lineNumber(hitCounter.m_lineNumber),
+    m_hitCounts(hitCounter.m_hitCounts) {
+  }
+
+  HitCounter& operator=(const HitCounter& hitCounter) {
+    if (&hitCounter != this) {
+      m_filename = hitCounter.m_filename;
+      m_lineNumber = hitCounter.m_lineNumber;
+      m_hitCounts = hitCounter.m_hitCounts;
+    }
+    return *this;
+  }
+
+  virtual ~HitCounter(void) {
+  }
+
+  /// @brief Resets location of current hit counter
+  inline void resetLocation(const char* filename, base::type::LineNumber lineNumber) {
+    m_filename = filename;
+    m_lineNumber = lineNumber;
+  }
+
+  /// @brief Validates hit counts and resets it if necessary
+  inline void validateHitCounts(std::size_t n) {
+    if (m_hitCounts >= base::consts::kMaxLogPerCounter) {
+      m_hitCounts = (n >= 1 ? base::consts::kMaxLogPerCounter % n : 0);
+    }
+    ++m_hitCounts;
+  }
+
+  inline const char* filename(void) const {
+    return m_filename;
+  }
+
+  inline base::type::LineNumber lineNumber(void) const {
+    return m_lineNumber;
+  }
+
+  inline std::size_t hitCounts(void) const {
+    return m_hitCounts;
+  }
+
+  inline void increment(void) {
+    ++m_hitCounts;
+  }
+
+  class Predicate {
+   public:
+    Predicate(const char* filename, base::type::LineNumber lineNumber)
+      : m_filename(filename),
+        m_lineNumber(lineNumber) {
+    }
+    inline bool operator()(const HitCounter* counter) {
+      return ((counter != nullptr) &&
+              (strcmp(counter->m_filename, m_filename) == 0) &&
+              (counter->m_lineNumber == m_lineNumber));
+    }
+
+   private:
+    const char* m_filename;
+    base::type::LineNumber m_lineNumber;
+  };
+
+ private:
+  const char* m_filename;
+  base::type::LineNumber m_lineNumber;
+  std::size_t m_hitCounts;
+};
+/// @brief Repository for hit counters used across the application
+class RegisteredHitCounters : public base::utils::RegistryWithPred<base::HitCounter, base::HitCounter::Predicate> {
+ public:
+  /// @brief Validates counter for every N, i.e, registers new if does not exist otherwise updates original one
+  /// @return True if validation resulted in triggering hit. Meaning logs should be written everytime true is returned
+  bool validateEveryN(const char* filename, base::type::LineNumber lineNumber, std::size_t n);
+
+  /// @brief Validates counter for hits >= N, i.e, registers new if does not exist otherwise updates original one
+  /// @return True if validation resulted in triggering hit. Meaning logs should be written everytime true is returned
+  bool validateAfterN(const char* filename, base::type::LineNumber lineNumber, std::size_t n);
+
+  /// @brief Validates counter for hits are <= n, i.e, registers new if does not exist otherwise updates original one
+  /// @return True if validation resulted in triggering hit. Meaning logs should be written everytime true is returned
+  bool validateNTimes(const char* filename, base::type::LineNumber lineNumber, std::size_t n);
+
+  /// @brief Gets hit counter registered at specified position
+  inline const base::HitCounter* getCounter(const char* filename, base::type::LineNumber lineNumber) {
+    base::threading::ScopedLock scopedLock(lock());
+    return get(filename, lineNumber);
+  }
+};
+/// @brief Action to be taken for dispatching
+enum class DispatchAction : base::type::EnumType {
+  None = 1, NormalLog = 2, SysLog = 4
+};
+}  // namespace base
+template <typename T>
+class Callback : protected base::threading::ThreadSafe {
+ public:
+  Callback(void) : m_enabled(true) {}
+  inline bool enabled(void) const {
+    return m_enabled;
+  }
+  inline void setEnabled(bool enabled) {
+    base::threading::ScopedLock scopedLock(lock());
+    m_enabled = enabled;
+  }
+ protected:
+  virtual void handle(const T* handlePtr) = 0;
+ private:
+  bool m_enabled;
+};
+class LogDispatchData {
+ public:
+  LogDispatchData() : m_logMessage(nullptr), m_dispatchAction(base::DispatchAction::None) {}
+  inline const LogMessage* logMessage(void) const {
+    return m_logMessage;
+  }
+  inline base::DispatchAction dispatchAction(void) const {
+    return m_dispatchAction;
+  }
+ private:
+  LogMessage* m_logMessage;
+  base::DispatchAction m_dispatchAction;
+  friend class base::LogDispatcher;
+
+  inline void setLogMessage(LogMessage* logMessage) {
+    m_logMessage = logMessage;
+  }
+  inline void setDispatchAction(base::DispatchAction dispatchAction) {
+    m_dispatchAction = dispatchAction;
+  }
+};
+class LogDispatchCallback : public Callback<LogDispatchData> {
+ private:
+  friend class base::LogDispatcher;
+};
+class PerformanceTrackingCallback : public Callback<PerformanceTrackingData> {
+ private:
+  friend class base::PerformanceTracker;
+};
+class LoggerRegistrationCallback : public Callback<Logger> {
+ private:
+  friend class base::RegisteredLoggers;
+};
+class LogBuilder : base::NoCopy {
+ public:
+  LogBuilder() : m_termSupportsColor(base::utils::OS::termSupportsColor()) {}
+  virtual ~LogBuilder(void) {
+    ELPP_INTERNAL_INFO(3, "Destroying log builder...")
+  }
+  virtual base::type::string_t build(const LogMessage* logMessage, bool appendNewLine) const = 0;
+  void convertToColoredOutput(base::type::string_t* logLine, Level level);
+ private:
+  bool m_termSupportsColor;
+  friend class el::base::DefaultLogDispatchCallback;
+};
+typedef std::shared_ptr<LogBuilder> LogBuilderPtr;
+/// @brief Represents a logger holding ID and configurations we need to write logs
+///
+/// @detail This class does not write logs itself instead its used by writer to read configuations from.
+class Logger : public base::threading::ThreadSafe, public Loggable {
+ public:
+  Logger(const std::string& id, base::LogStreamsReferenceMap* logStreamsReference);
+  Logger(const std::string& id, const Configurations& configurations, base::LogStreamsReferenceMap* logStreamsReference);
+  Logger(const Logger& logger);
+  Logger& operator=(const Logger& logger);
+
+  virtual ~Logger(void) {
+    base::utils::safeDelete(m_typedConfigurations);
+  }
+
+  virtual inline void log(el::base::type::ostream_t& os) const {
+    os << m_id.c_str();
+  }
+
+  /// @brief Configures the logger using specified configurations.
+  void configure(const Configurations& configurations);
+
+  /// @brief Reconfigures logger using existing configurations
+  void reconfigure(void);
+
+  inline const std::string& id(void) const {
+    return m_id;
+  }
+
+  inline const std::string& parentApplicationName(void) const {
+    return m_parentApplicationName;
+  }
+
+  inline void setParentApplicationName(const std::string& parentApplicationName) {
+    m_parentApplicationName = parentApplicationName;
+  }
+
+  inline Configurations* configurations(void) {
+    return &m_configurations;
+  }
+
+  inline base::TypedConfigurations* typedConfigurations(void) {
+    return m_typedConfigurations;
+  }
+
+  static bool isValidId(const std::string& id);
+
+  /// @brief Flushes logger to sync all log files for all levels
+  void flush(void);
+
+  void flush(Level level, base::type::fstream_t* fs);
+
+  inline bool isFlushNeeded(Level level) {
+    return ++m_unflushedCount.find(level)->second >= m_typedConfigurations->logFlushThreshold(level);
+  }
+
+  inline LogBuilder* logBuilder(void) const {
+    return m_logBuilder.get();
+  }
+
+  inline void setLogBuilder(const LogBuilderPtr& logBuilder) {
+    m_logBuilder = logBuilder;
+  }
+
+  inline bool enabled(Level level) const {
+    return m_typedConfigurations->enabled(level);
+  }
+
+#if ELPP_VARIADIC_TEMPLATES_SUPPORTED
+#  define LOGGER_LEVEL_WRITERS_SIGNATURES(FUNCTION_NAME)\
+template <typename T, typename... Args>\
+inline void FUNCTION_NAME(const char*, const T&, const Args&...);\
+template <typename T>\
+inline void FUNCTION_NAME(const T&);
+
+  template <typename T, typename... Args>
+  inline void verbose(int, const char*, const T&, const Args&...);
+
+  template <typename T>
+  inline void verbose(int, const T&);
+
+  LOGGER_LEVEL_WRITERS_SIGNATURES(info)
+  LOGGER_LEVEL_WRITERS_SIGNATURES(debug)
+  LOGGER_LEVEL_WRITERS_SIGNATURES(warn)
+  LOGGER_LEVEL_WRITERS_SIGNATURES(error)
+  LOGGER_LEVEL_WRITERS_SIGNATURES(fatal)
+  LOGGER_LEVEL_WRITERS_SIGNATURES(trace)
+#  undef LOGGER_LEVEL_WRITERS_SIGNATURES
+#endif // ELPP_VARIADIC_TEMPLATES_SUPPORTED
+ private:
+  std::string m_id;
+  base::TypedConfigurations* m_typedConfigurations;
+  base::type::stringstream_t m_stream;
+  std::string m_parentApplicationName;
+  bool m_isConfigured;
+  Configurations m_configurations;
+  std::map<Level, unsigned int> m_unflushedCount;
+  base::LogStreamsReferenceMap* m_logStreamsReference;
+  LogBuilderPtr m_logBuilder;
+
+  friend class el::LogMessage;
+  friend class el::Loggers;
+  friend class el::Helpers;
+  friend class el::base::RegisteredLoggers;
+  friend class el::base::DefaultLogDispatchCallback;
+  friend class el::base::MessageBuilder;
+  friend class el::base::Writer;
+  friend class el::base::PErrorWriter;
+  friend class el::base::Storage;
+  friend class el::base::PerformanceTracker;
+  friend class el::base::LogDispatcher;
+
+  Logger(void);
+
+#if ELPP_VARIADIC_TEMPLATES_SUPPORTED
+  template <typename T, typename... Args>
+  void log_(Level, int, const char*, const T&, const Args&...);
+
+  template <typename T>
+  inline void log_(Level, int, const T&);
+
+  template <typename T, typename... Args>
+  void log(Level, const char*, const T&, const Args&...);
+
+  template <typename T>
+  inline void log(Level, const T&);
+#endif // ELPP_VARIADIC_TEMPLATES_SUPPORTED
+
+  void initUnflushedCount(void);
+
+  inline base::type::stringstream_t& stream(void) {
+    return m_stream;
+  }
+
+  void resolveLoggerFormatSpec(void) const;
+};
+namespace base {
+/// @brief Loggers repository
+class RegisteredLoggers : public base::utils::Registry<Logger, std::string> {
+ public:
+  explicit RegisteredLoggers(const LogBuilderPtr& defaultLogBuilder);
+
+  virtual ~RegisteredLoggers(void) {
+    unsafeFlushAll();
+  }
+
+  inline void setDefaultConfigurations(const Configurations& configurations) {
+    base::threading::ScopedLock scopedLock(lock());
+    m_defaultConfigurations.setFromBase(const_cast<Configurations*>(&configurations));
+  }
+
+  inline Configurations* defaultConfigurations(void) {
+    return &m_defaultConfigurations;
+  }
+
+  Logger* get(const std::string& id, bool forceCreation = true);
+
+  template <typename T>
+  inline bool installLoggerRegistrationCallback(const std::string& id) {
+    return base::utils::Utils::installCallback<T, base::type::LoggerRegistrationCallbackPtr>(id,
+           &m_loggerRegistrationCallbacks);
+  }
+
+  template <typename T>
+  inline void uninstallLoggerRegistrationCallback(const std::string& id) {
+    base::utils::Utils::uninstallCallback<T, base::type::LoggerRegistrationCallbackPtr>(id, &m_loggerRegistrationCallbacks);
+  }
+
+  template <typename T>
+  inline T* loggerRegistrationCallback(const std::string& id) {
+    return base::utils::Utils::callback<T, base::type::LoggerRegistrationCallbackPtr>(id, &m_loggerRegistrationCallbacks);
+  }
+
+  bool remove(const std::string& id);
+
+  inline bool has(const std::string& id) {
+    return get(id, false) != nullptr;
+  }
+
+  inline void unregister(Logger*& logger) {
+    base::threading::ScopedLock scopedLock(lock());
+    base::utils::Registry<Logger, std::string>::unregister(logger->id());
+  }
+
+  inline base::LogStreamsReferenceMap* logStreamsReference(void) {
+    return &m_logStreamsReference;
+  }
+
+  inline void flushAll(void) {
+    base::threading::ScopedLock scopedLock(lock());
+    unsafeFlushAll();
+  }
+
+  inline void setDefaultLogBuilder(LogBuilderPtr& logBuilderPtr) {
+    base::threading::ScopedLock scopedLock(lock());
+    m_defaultLogBuilder = logBuilderPtr;
+  }
+
+ private:
+  LogBuilderPtr m_defaultLogBuilder;
+  Configurations m_defaultConfigurations;
+  base::LogStreamsReferenceMap m_logStreamsReference;
+  std::map<std::string, base::type::LoggerRegistrationCallbackPtr> m_loggerRegistrationCallbacks;
+  friend class el::base::Storage;
+
+  void unsafeFlushAll(void);
+};
+/// @brief Represents registries for verbose logging
+class VRegistry : base::NoCopy, public base::threading::ThreadSafe {
+ public:
+  explicit VRegistry(base::type::VerboseLevel level, base::type::EnumType* pFlags);
+
+  /// @brief Sets verbose level. Accepted range is 0-9
+  void setLevel(base::type::VerboseLevel level);
+
+  inline base::type::VerboseLevel level(void) const {
+    return m_level;
+  }
+
+  inline void clearModules(void) {
+    base::threading::ScopedLock scopedLock(lock());
+    m_modules.clear();
+  }
+
+  void setModules(const char* modules);
+
+  bool allowed(base::type::VerboseLevel vlevel, const char* file);
+
+  inline const std::map<std::string, base::type::VerboseLevel>& modules(void) const {
+    return m_modules;
+  }
+
+  void setFromArgs(const base::utils::CommandLineArgs* commandLineArgs);
+
+  /// @brief Whether or not vModules enabled
+  inline bool vModulesEnabled(void) {
+    return !base::utils::hasFlag(LoggingFlag::DisableVModules, *m_pFlags);
+  }
+
+ private:
+  base::type::VerboseLevel m_level;
+  base::type::EnumType* m_pFlags;
+  std::map<std::string, base::type::VerboseLevel> m_modules;
+};
+}  // namespace base
+class LogMessage {
+ public:
+  LogMessage(Level level, const std::string& file, base::type::LineNumber line, const std::string& func,
+             base::type::VerboseLevel verboseLevel, Logger* logger) :
+    m_level(level), m_file(file), m_line(line), m_func(func),
+    m_verboseLevel(verboseLevel), m_logger(logger), m_message(logger->stream().str()) {
+  }
+  inline Level level(void) const {
+    return m_level;
+  }
+  inline const std::string& file(void) const {
+    return m_file;
+  }
+  inline base::type::LineNumber line(void) const {
+    return m_line;
+  }
+  inline const std::string& func(void) const {
+    return m_func;
+  }
+  inline base::type::VerboseLevel verboseLevel(void) const {
+    return m_verboseLevel;
+  }
+  inline Logger* logger(void) const {
+    return m_logger;
+  }
+  inline const base::type::string_t& message(void) const {
+    return m_message;
+  }
+ private:
+  Level m_level;
+  std::string m_file;
+  base::type::LineNumber m_line;
+  std::string m_func;
+  base::type::VerboseLevel m_verboseLevel;
+  Logger* m_logger;
+  base::type::string_t m_message;
+};
+namespace base {
+#if ELPP_ASYNC_LOGGING
+class AsyncLogItem {
+ public:
+  explicit AsyncLogItem(const LogMessage& logMessage, const LogDispatchData& data, const base::type::string_t& logLine)
+    : m_logMessage(logMessage), m_dispatchData(data), m_logLine(logLine) {}
+  virtual ~AsyncLogItem() {}
+  inline LogMessage* logMessage(void) {
+    return &m_logMessage;
+  }
+  inline LogDispatchData* data(void) {
+    return &m_dispatchData;
+  }
+  inline base::type::string_t logLine(void) {
+    return m_logLine;
+  }
+ private:
+  LogMessage m_logMessage;
+  LogDispatchData m_dispatchData;
+  base::type::string_t m_logLine;
+};
+class AsyncLogQueue : public base::threading::ThreadSafe {
+ public:
+  virtual ~AsyncLogQueue() {
+    ELPP_INTERNAL_INFO(6, "~AsyncLogQueue");
+  }
+
+  inline AsyncLogItem next(void) {
+    base::threading::ScopedLock scopedLock(lock());
+    AsyncLogItem result = m_queue.front();
+    m_queue.pop();
+    return result;
+  }
+
+  inline void push(const AsyncLogItem& item) {
+    base::threading::ScopedLock scopedLock(lock());
+    m_queue.push(item);
+  }
+  inline void pop(void) {
+    base::threading::ScopedLock scopedLock(lock());
+    m_queue.pop();
+  }
+  inline AsyncLogItem front(void) {
+    base::threading::ScopedLock scopedLock(lock());
+    return m_queue.front();
+  }
+  inline bool empty(void) {
+    base::threading::ScopedLock scopedLock(lock());
+    return m_queue.empty();
+  }
+ private:
+  std::queue<AsyncLogItem> m_queue;
+};
+class IWorker {
+ public:
+  virtual ~IWorker() {}
+  virtual void start() = 0;
+};
+#endif // ELPP_ASYNC_LOGGING
+/// @brief Easylogging++ management storage
+class Storage : base::NoCopy, public base::threading::ThreadSafe {
+ public:
+#if ELPP_ASYNC_LOGGING
+  Storage(const LogBuilderPtr& defaultLogBuilder, base::IWorker* asyncDispatchWorker);
+#else
+  explicit Storage(const LogBuilderPtr& defaultLogBuilder);
+#endif  // ELPP_ASYNC_LOGGING
+
+  virtual ~Storage(void);
+
+  inline bool validateEveryNCounter(const char* filename, base::type::LineNumber lineNumber, std::size_t occasion) {
+    return hitCounters()->validateEveryN(filename, lineNumber, occasion);
+  }
+
+  inline bool validateAfterNCounter(const char* filename, base::type::LineNumber lineNumber, std::size_t n) {
+    return hitCounters()->validateAfterN(filename, lineNumber, n);
+  }
+
+  inline bool validateNTimesCounter(const char* filename, base::type::LineNumber lineNumber, std::size_t n) {
+    return hitCounters()->validateNTimes(filename, lineNumber, n);
+  }
+
+  inline base::RegisteredHitCounters* hitCounters(void) const {
+    return m_registeredHitCounters;
+  }
+
+  inline base::RegisteredLoggers* registeredLoggers(void) const {
+    return m_registeredLoggers;
+  }
+
+  inline base::VRegistry* vRegistry(void) const {
+    return m_vRegistry;
+  }
+
+#if ELPP_ASYNC_LOGGING
+  inline base::AsyncLogQueue* asyncLogQueue(void) const {
+    return m_asyncLogQueue;
+  }
+#endif  // ELPP_ASYNC_LOGGING
+
+  inline const base::utils::CommandLineArgs* commandLineArgs(void) const {
+    return &m_commandLineArgs;
+  }
+
+  inline void addFlag(LoggingFlag flag) {
+    base::utils::addFlag(flag, &m_flags);
+  }
+
+  inline void removeFlag(LoggingFlag flag) {
+    base::utils::removeFlag(flag, &m_flags);
+  }
+
+  inline bool hasFlag(LoggingFlag flag) const {
+    return base::utils::hasFlag(flag, m_flags);
+  }
+
+  inline base::type::EnumType flags(void) const {
+    return m_flags;
+  }
+
+  inline void setFlags(base::type::EnumType flags) {
+    m_flags = flags;
+  }
+
+  inline void setPreRollOutCallback(const PreRollOutCallback& callback) {
+    m_preRollOutCallback = callback;
+  }
+
+  inline void unsetPreRollOutCallback(void) {
+    m_preRollOutCallback = base::defaultPreRollOutCallback;
+  }
+
+  inline PreRollOutCallback& preRollOutCallback(void) {
+    return m_preRollOutCallback;
+  }
+
+  bool hasCustomFormatSpecifier(const char* formatSpecifier);
+  void installCustomFormatSpecifier(const CustomFormatSpecifier& customFormatSpecifier);
+  bool uninstallCustomFormatSpecifier(const char* formatSpecifier);
+
+  const std::vector<CustomFormatSpecifier>* customFormatSpecifiers(void) const {
+    return &m_customFormatSpecifiers;
+  }
+
+  inline void setLoggingLevel(Level level) {
+    m_loggingLevel = level;
+  }
+
+  template <typename T>
+  inline bool installLogDispatchCallback(const std::string& id) {
+    return base::utils::Utils::installCallback<T, base::type::LogDispatchCallbackPtr>(id, &m_logDispatchCallbacks);
+  }
+
+  template <typename T>
+  inline void uninstallLogDispatchCallback(const std::string& id) {
+    base::utils::Utils::uninstallCallback<T, base::type::LogDispatchCallbackPtr>(id, &m_logDispatchCallbacks);
+  }
+  template <typename T>
+  inline T* logDispatchCallback(const std::string& id) {
+    return base::utils::Utils::callback<T, base::type::LogDispatchCallbackPtr>(id, &m_logDispatchCallbacks);
+  }
+
+#if defined(ELPP_FEATURE_ALL) || defined(ELPP_FEATURE_PERFORMANCE_TRACKING)
+  template <typename T>
+  inline bool installPerformanceTrackingCallback(const std::string& id) {
+    return base::utils::Utils::installCallback<T, base::type::PerformanceTrackingCallbackPtr>(id,
+           &m_performanceTrackingCallbacks);
+  }
+
+  template <typename T>
+  inline void uninstallPerformanceTrackingCallback(const std::string& id) {
+    base::utils::Utils::uninstallCallback<T, base::type::PerformanceTrackingCallbackPtr>(id,
+        &m_performanceTrackingCallbacks);
+  }
+
+  template <typename T>
+  inline T* performanceTrackingCallback(const std::string& id) {
+    return base::utils::Utils::callback<T, base::type::PerformanceTrackingCallbackPtr>(id, &m_performanceTrackingCallbacks);
+  }
+#endif // defined(ELPP_FEATURE_ALL) || defined(ELPP_FEATURE_PERFORMANCE_TRACKING)
+
+  /// @brief Sets thread name for current thread. Requires std::thread
+  inline void setThreadName(const std::string& name) {
+    if (name.empty()) return;
+    base::threading::ScopedLock scopedLock(lock());
+    m_threadNames[base::threading::getCurrentThreadId()] = name;
+  }
+
+  inline std::string getThreadName(const std::string& threadId) {
+    std::map<std::string, std::string>::const_iterator it = m_threadNames.find(threadId);
+    if (it == m_threadNames.end()) {
+      return threadId;
+    }
+    return it->second;
+  }
+ private:
+  base::RegisteredHitCounters* m_registeredHitCounters;
+  base::RegisteredLoggers* m_registeredLoggers;
+  base::type::EnumType m_flags;
+  base::VRegistry* m_vRegistry;
+#if ELPP_ASYNC_LOGGING
+  base::AsyncLogQueue* m_asyncLogQueue;
+  base::IWorker* m_asyncDispatchWorker;
+#endif  // ELPP_ASYNC_LOGGING
+  base::utils::CommandLineArgs m_commandLineArgs;
+  PreRollOutCallback m_preRollOutCallback;
+  std::map<std::string, base::type::LogDispatchCallbackPtr> m_logDispatchCallbacks;
+  std::map<std::string, base::type::PerformanceTrackingCallbackPtr> m_performanceTrackingCallbacks;
+  std::map<std::string, std::string> m_threadNames;
+  std::vector<CustomFormatSpecifier> m_customFormatSpecifiers;
+  Level m_loggingLevel;
+
+  friend class el::Helpers;
+  friend class el::base::DefaultLogDispatchCallback;
+  friend class el::LogBuilder;
+  friend class el::base::MessageBuilder;
+  friend class el::base::Writer;
+  friend class el::base::PerformanceTracker;
+  friend class el::base::LogDispatcher;
+
+  void setApplicationArguments(int argc, char** argv);
+
+  inline void setApplicationArguments(int argc, const char** argv) {
+    setApplicationArguments(argc, const_cast<char**>(argv));
+  }
+};
+extern ELPP_EXPORT base::type::StoragePointer elStorage;
+#define ELPP el::base::elStorage
+class DefaultLogDispatchCallback : public LogDispatchCallback {
+ protected:
+  void handle(const LogDispatchData* data);
+ private:
+  const LogDispatchData* m_data;
+  void dispatch(base::type::string_t&& logLine);
+};
+#if ELPP_ASYNC_LOGGING
+class AsyncLogDispatchCallback : public LogDispatchCallback {
+ protected:
+  void handle(const LogDispatchData* data);
+};
+class AsyncDispatchWorker : public base::IWorker, public base::threading::ThreadSafe {
+ public:
+  AsyncDispatchWorker();
+  virtual ~AsyncDispatchWorker();
+
+  bool clean(void);
+  void emptyQueue(void);
+  virtual void start(void);
+  void handle(AsyncLogItem* logItem);
+  void run(void);
+
+  void setContinueRunning(bool value) {
+    base::threading::ScopedLock scopedLock(m_continueRunningMutex);
+    m_continueRunning = value;
+  }
+
+  bool continueRunning(void) const {
+    return m_continueRunning;
+  }
+ private:
+  std::condition_variable cv;
+  bool m_continueRunning;
+  base::threading::Mutex m_continueRunningMutex;
+};
+#endif  // ELPP_ASYNC_LOGGING
+}  // namespace base
+namespace base {
+class DefaultLogBuilder : public LogBuilder {
+ public:
+  base::type::string_t build(const LogMessage* logMessage, bool appendNewLine) const;
+};
+/// @brief Dispatches log messages
+class LogDispatcher : base::NoCopy {
+ public:
+  LogDispatcher(bool proceed, LogMessage&& logMessage, base::DispatchAction dispatchAction) :
+    m_proceed(proceed),
+    m_logMessage(std::move(logMessage)),
+    m_dispatchAction(std::move(dispatchAction)) {
+  }
+
+  void dispatch(void);
+
+ private:
+  bool m_proceed;
+  LogMessage m_logMessage;
+  base::DispatchAction m_dispatchAction;
+};
+#if defined(ELPP_STL_LOGGING)
+/// @brief Workarounds to write some STL logs
+///
+/// @detail There is workaround needed to loop through some stl containers. In order to do that, we need iterable containers
+/// of same type and provide iterator interface and pass it on to writeIterator().
+/// Remember, this is passed by value in constructor so that we dont change original containers.
+/// This operation is as expensive as Big-O(std::min(class_.size(), base::consts::kMaxLogPerContainer))
+namespace workarounds {
+/// @brief Abstract IterableContainer template that provides interface for iterable classes of type T
+template <typename T, typename Container>
+class IterableContainer {
+ public:
+  typedef typename Container::iterator iterator;
+  typedef typename Container::const_iterator const_iterator;
+  IterableContainer(void) {}
+  virtual ~IterableContainer(void) {}
+  iterator begin(void) {
+    return getContainer().begin();
+  }
+  iterator end(void) {
+    return getContainer().end();
+  }
+ private:
+  virtual Container& getContainer(void) = 0;
+};
+/// @brief Implements IterableContainer and provides iterable std::priority_queue class
+template<typename T, typename Container = std::vector<T>, typename Comparator = std::less<typename Container::value_type>>
+class IterablePriorityQueue : public IterableContainer<T, Container>,
+  public std::priority_queue<T, Container, Comparator> {
+ public:
+  IterablePriorityQueue(std::priority_queue<T, Container, Comparator> queue_) {
+    std::size_t count_ = 0;
+    while (++count_ < base::consts::kMaxLogPerContainer && !queue_.empty()) {
+      this->push(queue_.top());
+      queue_.pop();
+    }
+  }
+ private:
+  inline Container& getContainer(void) {
+    return this->c;
+  }
+};
+/// @brief Implements IterableContainer and provides iterable std::queue class
+template<typename T, typename Container = std::deque<T>>
+class IterableQueue : public IterableContainer<T, Container>, public std::queue<T, Container> {
+ public:
+  IterableQueue(std::queue<T, Container> queue_) {
+    std::size_t count_ = 0;
+    while (++count_ < base::consts::kMaxLogPerContainer && !queue_.empty()) {
+      this->push(queue_.front());
+      queue_.pop();
+    }
+  }
+ private:
+  inline Container& getContainer(void) {
+    return this->c;
+  }
+};
+/// @brief Implements IterableContainer and provides iterable std::stack class
+template<typename T, typename Container = std::deque<T>>
+class IterableStack : public IterableContainer<T, Container>, public std::stack<T, Container> {
+ public:
+  IterableStack(std::stack<T, Container> stack_) {
+    std::size_t count_ = 0;
+    while (++count_ < base::consts::kMaxLogPerContainer && !stack_.empty()) {
+      this->push(stack_.top());
+      stack_.pop();
+    }
+  }
+ private:
+  inline Container& getContainer(void) {
+    return this->c;
+  }
+};
+}  // namespace workarounds
+#endif  // defined(ELPP_STL_LOGGING)
+// Log message builder
+class MessageBuilder {
+ public:
+  MessageBuilder(void) : m_logger(nullptr), m_containerLogSeperator(ELPP_LITERAL("")) {}
+  void initialize(Logger* logger);
+
+#  define ELPP_SIMPLE_LOG(LOG_TYPE)\
+MessageBuilder& operator<<(LOG_TYPE msg) {\
+m_logger->stream() << msg;\
+if (ELPP->hasFlag(LoggingFlag::AutoSpacing)) {\
+m_logger->stream() << " ";\
+}\
+return *this;\
+}
+
+  inline MessageBuilder& operator<<(const std::string& msg) {
+    return operator<<(msg.c_str());
+  }
+  ELPP_SIMPLE_LOG(char)
+  ELPP_SIMPLE_LOG(bool)
+  ELPP_SIMPLE_LOG(signed short)
+  ELPP_SIMPLE_LOG(unsigned short)
+  ELPP_SIMPLE_LOG(signed int)
+  ELPP_SIMPLE_LOG(unsigned int)
+  ELPP_SIMPLE_LOG(signed long)
+  ELPP_SIMPLE_LOG(unsigned long)
+  ELPP_SIMPLE_LOG(float)
+  ELPP_SIMPLE_LOG(double)
+  ELPP_SIMPLE_LOG(char*)
+  ELPP_SIMPLE_LOG(const char*)
+  ELPP_SIMPLE_LOG(const void*)
+  ELPP_SIMPLE_LOG(long double)
+  inline MessageBuilder& operator<<(const std::wstring& msg) {
+    return operator<<(msg.c_str());
+  }
+  MessageBuilder& operator<<(const wchar_t* msg);
+  // ostream manipulators
+  inline MessageBuilder& operator<<(std::ostream& (*OStreamMani)(std::ostream&)) {
+    m_logger->stream() << OStreamMani;
+    return *this;
+  }
+#define ELPP_ITERATOR_CONTAINER_LOG_ONE_ARG(temp)                                                    \
+template <typename T>                                                                            \
+inline MessageBuilder& operator<<(const temp<T>& template_inst) {                                \
+return writeIterator(template_inst.begin(), template_inst.end(), template_inst.size());      \
+}
+#define ELPP_ITERATOR_CONTAINER_LOG_TWO_ARG(temp)                                                    \
+template <typename T1, typename T2>                                                              \
+inline MessageBuilder& operator<<(const temp<T1, T2>& template_inst) {                           \
+return writeIterator(template_inst.begin(), template_inst.end(), template_inst.size());      \
+}
+#define ELPP_ITERATOR_CONTAINER_LOG_THREE_ARG(temp)                                                  \
+template <typename T1, typename T2, typename T3>                                                 \
+inline MessageBuilder& operator<<(const temp<T1, T2, T3>& template_inst) {                       \
+return writeIterator(template_inst.begin(), template_inst.end(), template_inst.size());      \
+}
+#define ELPP_ITERATOR_CONTAINER_LOG_FOUR_ARG(temp)                                                   \
+template <typename T1, typename T2, typename T3, typename T4>                                    \
+inline MessageBuilder& operator<<(const temp<T1, T2, T3, T4>& template_inst) {                   \
+return writeIterator(template_inst.begin(), template_inst.end(), template_inst.size());      \
+}
+#define ELPP_ITERATOR_CONTAINER_LOG_FIVE_ARG(temp)                                                   \
+template <typename T1, typename T2, typename T3, typename T4, typename T5>                       \
+inline MessageBuilder& operator<<(const temp<T1, T2, T3, T4, T5>& template_inst) {               \
+return writeIterator(template_inst.begin(), template_inst.end(), template_inst.size());      \
+}
+
+#if defined(ELPP_STL_LOGGING)
+  ELPP_ITERATOR_CONTAINER_LOG_TWO_ARG(std::vector)
+  ELPP_ITERATOR_CONTAINER_LOG_TWO_ARG(std::list)
+  ELPP_ITERATOR_CONTAINER_LOG_TWO_ARG(std::deque)
+  ELPP_ITERATOR_CONTAINER_LOG_THREE_ARG(std::set)
+  ELPP_ITERATOR_CONTAINER_LOG_THREE_ARG(std::multiset)
+  ELPP_ITERATOR_CONTAINER_LOG_FOUR_ARG(std::map)
+  ELPP_ITERATOR_CONTAINER_LOG_FOUR_ARG(std::multimap)
+  template <class T, class Container>
+  inline MessageBuilder& operator<<(const std::queue<T, Container>& queue_) {
+    base::workarounds::IterableQueue<T, Container> iterableQueue_ =
+      static_cast<base::workarounds::IterableQueue<T, Container> >(queue_);
+    return writeIterator(iterableQueue_.begin(), iterableQueue_.end(), iterableQueue_.size());
+  }
+  template <class T, class Container>
+  inline MessageBuilder& operator<<(const std::stack<T, Container>& stack_) {
+    base::workarounds::IterableStack<T, Container> iterableStack_ =
+      static_cast<base::workarounds::IterableStack<T, Container> >(stack_);
+    return writeIterator(iterableStack_.begin(), iterableStack_.end(), iterableStack_.size());
+  }
+  template <class T, class Container, class Comparator>
+  inline MessageBuilder& operator<<(const std::priority_queue<T, Container, Comparator>& priorityQueue_) {
+    base::workarounds::IterablePriorityQueue<T, Container, Comparator> iterablePriorityQueue_ =
+      static_cast<base::workarounds::IterablePriorityQueue<T, Container, Comparator> >(priorityQueue_);
+    return writeIterator(iterablePriorityQueue_.begin(), iterablePriorityQueue_.end(), iterablePriorityQueue_.size());
+  }
+  template <class First, class Second>
+  MessageBuilder& operator<<(const std::pair<First, Second>& pair_) {
+    m_logger->stream() << ELPP_LITERAL("(");
+    operator << (static_cast<First>(pair_.first));
+    m_logger->stream() << ELPP_LITERAL(", ");
+    operator << (static_cast<Second>(pair_.second));
+    m_logger->stream() << ELPP_LITERAL(")");
+    return *this;
+  }
+  template <std::size_t Size>
+  MessageBuilder& operator<<(const std::bitset<Size>& bitset_) {
+    m_logger->stream() << ELPP_LITERAL("[");
+    operator << (bitset_.to_string());
+    m_logger->stream() << ELPP_LITERAL("]");
+    return *this;
+  }
+#  if defined(ELPP_LOG_STD_ARRAY)
+  template <class T, std::size_t Size>
+  inline MessageBuilder& operator<<(const std::array<T, Size>& array) {
+    return writeIterator(array.begin(), array.end(), array.size());
+  }
+#  endif  // defined(ELPP_LOG_STD_ARRAY)
+#  if defined(ELPP_LOG_UNORDERED_MAP)
+  ELPP_ITERATOR_CONTAINER_LOG_FIVE_ARG(std::unordered_map)
+  ELPP_ITERATOR_CONTAINER_LOG_FIVE_ARG(std::unordered_multimap)
+#  endif  // defined(ELPP_LOG_UNORDERED_MAP)
+#  if defined(ELPP_LOG_UNORDERED_SET)
+  ELPP_ITERATOR_CONTAINER_LOG_FOUR_ARG(std::unordered_set)
+  ELPP_ITERATOR_CONTAINER_LOG_FOUR_ARG(std::unordered_multiset)
+#  endif  // defined(ELPP_LOG_UNORDERED_SET)
+#endif  // defined(ELPP_STL_LOGGING)
+#if defined(ELPP_QT_LOGGING)
+  inline MessageBuilder& operator<<(const QString& msg) {
+#  if defined(ELPP_UNICODE)
+    m_logger->stream() << msg.toStdWString();
+#  else
+    m_logger->stream() << msg.toStdString();
+#  endif  // defined(ELPP_UNICODE)
+    return *this;
+  }
+  inline MessageBuilder& operator<<(const QByteArray& msg) {
+    return operator << (QString(msg));
+  }
+  inline MessageBuilder& operator<<(const QStringRef& msg) {
+    return operator<<(msg.toString());
+  }
+  inline MessageBuilder& operator<<(qint64 msg) {
+#  if defined(ELPP_UNICODE)
+    m_logger->stream() << QString::number(msg).toStdWString();
+#  else
+    m_logger->stream() << QString::number(msg).toStdString();
+#  endif  // defined(ELPP_UNICODE)
+    return *this;
+  }
+  inline MessageBuilder& operator<<(quint64 msg) {
+#  if defined(ELPP_UNICODE)
+    m_logger->stream() << QString::number(msg).toStdWString();
+#  else
+    m_logger->stream() << QString::number(msg).toStdString();
+#  endif  // defined(ELPP_UNICODE)
+    return *this;
+  }
+  inline MessageBuilder& operator<<(QChar msg) {
+    m_logger->stream() << msg.toLatin1();
+    return *this;
+  }
+  inline MessageBuilder& operator<<(const QLatin1String& msg) {
+    m_logger->stream() << msg.latin1();
+    return *this;
+  }
+  ELPP_ITERATOR_CONTAINER_LOG_ONE_ARG(QList)
+  ELPP_ITERATOR_CONTAINER_LOG_ONE_ARG(QVector)
+  ELPP_ITERATOR_CONTAINER_LOG_ONE_ARG(QQueue)
+  ELPP_ITERATOR_CONTAINER_LOG_ONE_ARG(QSet)
+  ELPP_ITERATOR_CONTAINER_LOG_ONE_ARG(QLinkedList)
+  ELPP_ITERATOR_CONTAINER_LOG_ONE_ARG(QStack)
+  template <typename First, typename Second>
+  MessageBuilder& operator<<(const QPair<First, Second>& pair_) {
+    m_logger->stream() << ELPP_LITERAL("(");
+    operator << (static_cast<First>(pair_.first));
+    m_logger->stream() << ELPP_LITERAL(", ");
+    operator << (static_cast<Second>(pair_.second));
+    m_logger->stream() << ELPP_LITERAL(")");
+    return *this;
+  }
+  template <typename K, typename V>
+  MessageBuilder& operator<<(const QMap<K, V>& map_) {
+    m_logger->stream() << ELPP_LITERAL("[");
+    QList<K> keys = map_.keys();
+    typename QList<K>::const_iterator begin = keys.begin();
+    typename QList<K>::const_iterator end = keys.end();
+    int max_ = static_cast<int>(base::consts::kMaxLogPerContainer);  // to prevent warning
+    for (int index_ = 0; begin != end && index_ < max_; ++index_, ++begin) {
+      m_logger->stream() << ELPP_LITERAL("(");
+      operator << (static_cast<K>(*begin));
+      m_logger->stream() << ELPP_LITERAL(", ");
+      operator << (static_cast<V>(map_.value(*begin)));
+      m_logger->stream() << ELPP_LITERAL(")");
+      m_logger->stream() << ((index_ < keys.size() -1) ? m_containerLogSeperator : ELPP_LITERAL(""));
+    }
+    if (begin != end) {
+      m_logger->stream() << ELPP_LITERAL("...");
+    }
+    m_logger->stream() << ELPP_LITERAL("]");
+    return *this;
+  }
+  template <typename K, typename V>
+  inline MessageBuilder& operator<<(const QMultiMap<K, V>& map_) {
+    operator << (static_cast<QMap<K, V>>(map_));
+    return *this;
+  }
+  template <typename K, typename V>
+  MessageBuilder& operator<<(const QHash<K, V>& hash_) {
+    m_logger->stream() << ELPP_LITERAL("[");
+    QList<K> keys = hash_.keys();
+    typename QList<K>::const_iterator begin = keys.begin();
+    typename QList<K>::const_iterator end = keys.end();
+    int max_ = static_cast<int>(base::consts::kMaxLogPerContainer);  // prevent type warning
+    for (int index_ = 0; begin != end && index_ < max_; ++index_, ++begin) {
+      m_logger->stream() << ELPP_LITERAL("(");
+      operator << (static_cast<K>(*begin));
+      m_logger->stream() << ELPP_LITERAL(", ");
+      operator << (static_cast<V>(hash_.value(*begin)));
+      m_logger->stream() << ELPP_LITERAL(")");
+      m_logger->stream() << ((index_ < keys.size() -1) ? m_containerLogSeperator : ELPP_LITERAL(""));
+    }
+    if (begin != end) {
+      m_logger->stream() << ELPP_LITERAL("...");
+    }
+    m_logger->stream() << ELPP_LITERAL("]");
+    return *this;
+  }
+  template <typename K, typename V>
+  inline MessageBuilder& operator<<(const QMultiHash<K, V>& multiHash_) {
+    operator << (static_cast<QHash<K, V>>(multiHash_));
+    return *this;
+  }
+#endif  // defined(ELPP_QT_LOGGING)
+#if defined(ELPP_BOOST_LOGGING)
+  ELPP_ITERATOR_CONTAINER_LOG_TWO_ARG(boost::container::vector)
+  ELPP_ITERATOR_CONTAINER_LOG_TWO_ARG(boost::container::stable_vector)
+  ELPP_ITERATOR_CONTAINER_LOG_TWO_ARG(boost::container::list)
+  ELPP_ITERATOR_CONTAINER_LOG_TWO_ARG(boost::container::deque)
+  ELPP_ITERATOR_CONTAINER_LOG_FOUR_ARG(boost::container::map)
+  ELPP_ITERATOR_CONTAINER_LOG_FOUR_ARG(boost::container::flat_map)
+  ELPP_ITERATOR_CONTAINER_LOG_THREE_ARG(boost::container::set)
+  ELPP_ITERATOR_CONTAINER_LOG_THREE_ARG(boost::container::flat_set)
+#endif  // defined(ELPP_BOOST_LOGGING)
+
+  /// @brief Macro used internally that can be used externally to make containers easylogging++ friendly
+  ///
+  /// @detail This macro expands to write an ostream& operator<< for container. This container is expected to
+  ///         have begin() and end() methods that return respective iterators
+  /// @param ContainerType Type of container e.g, MyList from WX_DECLARE_LIST(int, MyList); in wxwidgets
+  /// @param SizeMethod Method used to get size of container.
+  /// @param ElementInstance Instance of element to be fed out. Insance name is "elem". See WXELPP_ENABLED macro
+  ///        for an example usage
+#define MAKE_CONTAINERELPP_FRIENDLY(ContainerType, SizeMethod, ElementInstance) \
+el::base::type::ostream_t& operator<<(el::base::type::ostream_t& ss, const ContainerType& container) {\
+const el::base::type::char_t* sep = ELPP->hasFlag(el::LoggingFlag::NewLineForContainer) ? \
+ELPP_LITERAL("\n    ") : ELPP_LITERAL(", ");\
+ContainerType::const_iterator elem = container.begin();\
+ContainerType::const_iterator endElem = container.end();\
+std::size_t size_ = container.SizeMethod; \
+ss << ELPP_LITERAL("[");\
+for (std::size_t i = 0; elem != endElem && i < el::base::consts::kMaxLogPerContainer; ++i, ++elem) { \
+ss << ElementInstance;\
+ss << ((i < size_ - 1) ? sep : ELPP_LITERAL(""));\
+}\
+if (elem != endElem) {\
+ss << ELPP_LITERAL("...");\
+}\
+ss << ELPP_LITERAL("]");\
+return ss;\
+}
+#if defined(ELPP_WXWIDGETS_LOGGING)
+  ELPP_ITERATOR_CONTAINER_LOG_ONE_ARG(wxVector)
+#  define ELPP_WX_PTR_ENABLED(ContainerType) MAKE_CONTAINERELPP_FRIENDLY(ContainerType, size(), *(*elem))
+#  define ELPP_WX_ENABLED(ContainerType) MAKE_CONTAINERELPP_FRIENDLY(ContainerType, size(), (*elem))
+#  define ELPP_WX_HASH_MAP_ENABLED(ContainerType) MAKE_CONTAINERELPP_FRIENDLY(ContainerType, size(), \
+ELPP_LITERAL("(") << elem->first << ELPP_LITERAL(", ") << elem->second << ELPP_LITERAL(")")
+#else
+#  define ELPP_WX_PTR_ENABLED(ContainerType)
+#  define ELPP_WX_ENABLED(ContainerType)
+#  define ELPP_WX_HASH_MAP_ENABLED(ContainerType)
+#endif  // defined(ELPP_WXWIDGETS_LOGGING)
+  // Other classes
+  template <class Class>
+  ELPP_SIMPLE_LOG(const Class&)
+#undef ELPP_SIMPLE_LOG
+#undef ELPP_ITERATOR_CONTAINER_LOG_ONE_ARG
+#undef ELPP_ITERATOR_CONTAINER_LOG_TWO_ARG
+#undef ELPP_ITERATOR_CONTAINER_LOG_THREE_ARG
+#undef ELPP_ITERATOR_CONTAINER_LOG_FOUR_ARG
+#undef ELPP_ITERATOR_CONTAINER_LOG_FIVE_ARG
+ private:
+  Logger* m_logger;
+  const base::type::char_t* m_containerLogSeperator;
+
+  template<class Iterator>
+  MessageBuilder& writeIterator(Iterator begin_, Iterator end_, std::size_t size_) {
+    m_logger->stream() << ELPP_LITERAL("[");
+    for (std::size_t i = 0; begin_ != end_ && i < base::consts::kMaxLogPerContainer; ++i, ++begin_) {
+      operator << (*begin_);
+      m_logger->stream() << ((i < size_ - 1) ? m_containerLogSeperator : ELPP_LITERAL(""));
+    }
+    if (begin_ != end_) {
+      m_logger->stream() << ELPP_LITERAL("...");
+    }
+    m_logger->stream() << ELPP_LITERAL("]");
+    if (ELPP->hasFlag(LoggingFlag::AutoSpacing)) {
+      m_logger->stream() << " ";
+    }
+    return *this;
+  }
+};
+/// @brief Writes nothing - Used when certain log is disabled
+class NullWriter : base::NoCopy {
+ public:
+  NullWriter(void) {}
+
+  // Null manipulator
+  inline NullWriter& operator<<(std::ostream& (*)(std::ostream&)) {
+    return *this;
+  }
+
+  template <typename T>
+  inline NullWriter& operator<<(const T&) {
+    return *this;
+  }
+
+  inline operator bool() {
+    return true;
+  }
+};
+/// @brief Main entry point of each logging
+class Writer : base::NoCopy {
+ public:
+  Writer(Level level, const char* file, base::type::LineNumber line,
+         const char* func, base::DispatchAction dispatchAction = base::DispatchAction::NormalLog,
+         base::type::VerboseLevel verboseLevel = 0) :
+    m_level(level), m_file(file), m_line(line), m_func(func), m_verboseLevel(verboseLevel),
+    m_logger(nullptr), m_proceed(false), m_dispatchAction(dispatchAction) {
+  }
+
+  virtual ~Writer(void) {
+    processDispatch();
+  }
+
+  template <typename T>
+  inline Writer& operator<<(const T& log) {
+#if ELPP_LOGGING_ENABLED
+    if (m_proceed) {
+      m_messageBuilder << log;
+    }
+#endif  // ELPP_LOGGING_ENABLED
+    return *this;
+  }
+
+  inline Writer& operator<<(std::ostream& (*log)(std::ostream&)) {
+#if ELPP_LOGGING_ENABLED
+    if (m_proceed) {
+      m_messageBuilder << log;
+    }
+#endif  // ELPP_LOGGING_ENABLED
+    return *this;
+  }
+
+  inline operator bool() {
+    return true;
+  }
+
+  Writer& construct(Logger* logger, bool needLock = true);
+  Writer& construct(int count, const char* loggerIds, ...);
+ protected:
+  Level m_level;
+  const char* m_file;
+  const base::type::LineNumber m_line;
+  const char* m_func;
+  base::type::VerboseLevel m_verboseLevel;
+  Logger* m_logger;
+  bool m_proceed;
+  base::MessageBuilder m_messageBuilder;
+  base::DispatchAction m_dispatchAction;
+  std::vector<std::string> m_loggerIds;
+  friend class el::Helpers;
+
+  void initializeLogger(const std::string& loggerId, bool lookup = true, bool needLock = true);
+  void processDispatch();
+  void triggerDispatch(void);
+};
+class PErrorWriter : public base::Writer {
+ public:
+  PErrorWriter(Level level, const char* file, base::type::LineNumber line,
+               const char* func, base::DispatchAction dispatchAction = base::DispatchAction::NormalLog,
+               base::type::VerboseLevel verboseLevel = 0) :
+    base::Writer(level, file, line, func, dispatchAction, verboseLevel) {
+  }
+
+  virtual ~PErrorWriter(void);
+};
+}  // namespace base
+// Logging from Logger class. Why this is here? Because we have Storage and Writer class available
+#if ELPP_VARIADIC_TEMPLATES_SUPPORTED
+template <typename T, typename... Args>
+void Logger::log_(Level level, int vlevel, const char* s, const T& value, const Args&... args) {
+  base::MessageBuilder b;
+  b.initialize(this);
+  while (*s) {
+    if (*s == base::consts::kFormatSpecifierChar) {
+      if (*(s + 1) == base::consts::kFormatSpecifierChar) {
+        ++s;
+      } else {
+        if (*(s + 1) == base::consts::kFormatSpecifierCharValue) {
+          ++s;
+          b << value;
+          log_(level, vlevel, ++s, args...);
+          return;
+        }
+      }
+    }
+    b << *s++;
+  }
+  ELPP_INTERNAL_ERROR("Too many arguments provided. Unable to handle. Please provide more format specifiers", false);
+}
+template <typename T>
+void Logger::log_(Level level, int vlevel, const T& log) {
+  if (level == Level::Verbose) {
+    if (ELPP->vRegistry()->allowed(vlevel, __FILE__)) {
+      base::Writer(Level::Verbose, "FILE", 0, "FUNCTION",
+                   base::DispatchAction::NormalLog, vlevel).construct(this, false) << log;
+    } else {
+      stream().str(ELPP_LITERAL(""));
+    }
+  } else {
+    base::Writer(level, "FILE", 0, "FUNCTION").construct(this, false) << log;
+  }
+}
+template <typename T, typename... Args>
+inline void Logger::log(Level level, const char* s, const T& value, const Args&... args) {
+  base::threading::ScopedLock scopedLock(lock());
+  log_(level, 0, s, value, args...);
+}
+template <typename T>
+inline void Logger::log(Level level, const T& log) {
+  base::threading::ScopedLock scopedLock(lock());
+  log_(level, 0, log);
+}
+#  if ELPP_VERBOSE_LOG
+template <typename T, typename... Args>
+inline void Logger::verbose(int vlevel, const char* s, const T& value, const Args&... args) {
+  base::threading::ScopedLock scopedLock(lock());
+  log_(el::Level::Verbose, vlevel, s, value, args...);
+}
+template <typename T>
+inline void Logger::verbose(int vlevel, const T& log) {
+  base::threading::ScopedLock scopedLock(lock());
+  log_(el::Level::Verbose, vlevel, log);
+}
+#  else
+template <typename T, typename... Args>
+inline void Logger::verbose(int, const char*, const T&, const Args&...) {
+  return;
+}
+template <typename T>
+inline void Logger::verbose(int, const T&) {
+  return;
+}
+#  endif  // ELPP_VERBOSE_LOG
+#  define LOGGER_LEVEL_WRITERS(FUNCTION_NAME, LOG_LEVEL)\
+template <typename T, typename... Args>\
+inline void Logger::FUNCTION_NAME(const char* s, const T& value, const Args&... args) {\
+log(LOG_LEVEL, s, value, args...);\
+}\
+template <typename T>\
+inline void Logger::FUNCTION_NAME(const T& value) {\
+log(LOG_LEVEL, value);\
+}
+#  define LOGGER_LEVEL_WRITERS_DISABLED(FUNCTION_NAME, LOG_LEVEL)\
+template <typename T, typename... Args>\
+inline void Logger::FUNCTION_NAME(const char*, const T&, const Args&...) {\
+return;\
+}\
+template <typename T>\
+inline void Logger::FUNCTION_NAME(const T&) {\
+return;\
+}
+
+#  if ELPP_INFO_LOG
+LOGGER_LEVEL_WRITERS(info, Level::Info)
+#  else
+LOGGER_LEVEL_WRITERS_DISABLED(info, Level::Info)
+#  endif // ELPP_INFO_LOG
+#  if ELPP_DEBUG_LOG
+LOGGER_LEVEL_WRITERS(debug, Level::Debug)
+#  else
+LOGGER_LEVEL_WRITERS_DISABLED(debug, Level::Debug)
+#  endif // ELPP_DEBUG_LOG
+#  if ELPP_WARNING_LOG
+LOGGER_LEVEL_WRITERS(warn, Level::Warning)
+#  else
+LOGGER_LEVEL_WRITERS_DISABLED(warn, Level::Warning)
+#  endif // ELPP_WARNING_LOG
+#  if ELPP_ERROR_LOG
+LOGGER_LEVEL_WRITERS(error, Level::Error)
+#  else
+LOGGER_LEVEL_WRITERS_DISABLED(error, Level::Error)
+#  endif // ELPP_ERROR_LOG
+#  if ELPP_FATAL_LOG
+LOGGER_LEVEL_WRITERS(fatal, Level::Fatal)
+#  else
+LOGGER_LEVEL_WRITERS_DISABLED(fatal, Level::Fatal)
+#  endif // ELPP_FATAL_LOG
+#  if ELPP_TRACE_LOG
+LOGGER_LEVEL_WRITERS(trace, Level::Trace)
+#  else
+LOGGER_LEVEL_WRITERS_DISABLED(trace, Level::Trace)
+#  endif // ELPP_TRACE_LOG
+#  undef LOGGER_LEVEL_WRITERS
+#  undef LOGGER_LEVEL_WRITERS_DISABLED
+#endif // ELPP_VARIADIC_TEMPLATES_SUPPORTED
+#if ELPP_COMPILER_MSVC
+#  define ELPP_VARIADIC_FUNC_MSVC(variadicFunction, variadicArgs) variadicFunction variadicArgs
+#  define ELPP_VARIADIC_FUNC_MSVC_RUN(variadicFunction, ...) ELPP_VARIADIC_FUNC_MSVC(variadicFunction, (__VA_ARGS__))
+#  define el_getVALength(...) ELPP_VARIADIC_FUNC_MSVC_RUN(el_resolveVALength, 0, ## __VA_ARGS__,\
+10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
+#else
+#  if ELPP_COMPILER_CLANG
+#    define el_getVALength(...) el_resolveVALength(0, __VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
+#  else
+#    define el_getVALength(...) el_resolveVALength(0, ## __VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
+#  endif // ELPP_COMPILER_CLANG
+#endif // ELPP_COMPILER_MSVC
+#define el_resolveVALength(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, ...) N
+#define ELPP_WRITE_LOG(writer, level, dispatchAction, ...) \
+writer(level, __FILE__, __LINE__, ELPP_FUNC, dispatchAction).construct(el_getVALength(__VA_ARGS__), __VA_ARGS__)
+#define ELPP_WRITE_LOG_IF(writer, condition, level, dispatchAction, ...) if (condition) \
+writer(level, __FILE__, __LINE__, ELPP_FUNC, dispatchAction).construct(el_getVALength(__VA_ARGS__), __VA_ARGS__)
+#define ELPP_WRITE_LOG_EVERY_N(writer, occasion, level, dispatchAction, ...) \
+ELPP->validateEveryNCounter(__FILE__, __LINE__, occasion) && \
+writer(level, __FILE__, __LINE__, ELPP_FUNC, dispatchAction).construct(el_getVALength(__VA_ARGS__), __VA_ARGS__)
+#define ELPP_WRITE_LOG_AFTER_N(writer, n, level, dispatchAction, ...) \
+ELPP->validateAfterNCounter(__FILE__, __LINE__, n) && \
+writer(level, __FILE__, __LINE__, ELPP_FUNC, dispatchAction).construct(el_getVALength(__VA_ARGS__), __VA_ARGS__)
+#define ELPP_WRITE_LOG_N_TIMES(writer, n, level, dispatchAction, ...) \
+ELPP->validateNTimesCounter(__FILE__, __LINE__, n) && \
+writer(level, __FILE__, __LINE__, ELPP_FUNC, dispatchAction).construct(el_getVALength(__VA_ARGS__), __VA_ARGS__)
+#if defined(ELPP_FEATURE_ALL) || defined(ELPP_FEATURE_PERFORMANCE_TRACKING)
+class PerformanceTrackingData {
+ public:
+  enum class DataType : base::type::EnumType {
+    Checkpoint = 1, Complete = 2
+  };
+  // Do not use constructor, will run into multiple definition error, use init(PerformanceTracker*)
+  explicit PerformanceTrackingData(DataType dataType) : m_performanceTracker(nullptr),
+    m_dataType(dataType), m_firstCheckpoint(false), m_file(""), m_line(0), m_func("") {}
+  inline const std::string* blockName(void) const;
+  inline const struct timeval* startTime(void) const;
+  inline const struct timeval* endTime(void) const;
+  inline const struct timeval* lastCheckpointTime(void) const;
+  inline const base::PerformanceTracker* performanceTracker(void) const {
+    return m_performanceTracker;
+  }
+  inline PerformanceTrackingData::DataType dataType(void) const {
+    return m_dataType;
+  }
+  inline bool firstCheckpoint(void) const {
+    return m_firstCheckpoint;
+  }
+  inline std::string checkpointId(void) const {
+    return m_checkpointId;
+  }
+  inline const char* file(void) const {
+    return m_file;
+  }
+  inline base::type::LineNumber line(void) const {
+    return m_line;
+  }
+  inline const char* func(void) const {
+    return m_func;
+  }
+  inline const base::type::string_t* formattedTimeTaken() const {
+    return &m_formattedTimeTaken;
+  }
+  inline const std::string& loggerId(void) const;
+ private:
+  base::PerformanceTracker* m_performanceTracker;
+  base::type::string_t m_formattedTimeTaken;
+  PerformanceTrackingData::DataType m_dataType;
+  bool m_firstCheckpoint;
+  std::string m_checkpointId;
+  const char* m_file;
+  base::type::LineNumber m_line;
+  const char* m_func;
+  inline void init(base::PerformanceTracker* performanceTracker, bool firstCheckpoint = false) {
+    m_performanceTracker = performanceTracker;
+    m_firstCheckpoint = firstCheckpoint;
+  }
+
+  friend class el::base::PerformanceTracker;
+};
+namespace base {
+/// @brief Represents performanceTracker block of code that conditionally adds performance status to log
+///        either when goes outside the scope of when checkpoint() is called
+class PerformanceTracker : public base::threading::ThreadSafe, public Loggable {
+ public:
+  PerformanceTracker(const std::string& blockName,
+                     base::TimestampUnit timestampUnit = base::TimestampUnit::Millisecond,
+                     const std::string& loggerId = std::string(el::base::consts::kPerformanceLoggerId),
+                     bool scopedLog = true, Level level = base::consts::kPerformanceTrackerDefaultLevel);
+  /// @brief Copy constructor
+  PerformanceTracker(const PerformanceTracker& t) :
+    m_blockName(t.m_blockName), m_timestampUnit(t.m_timestampUnit), m_loggerId(t.m_loggerId), m_scopedLog(t.m_scopedLog),
+    m_level(t.m_level), m_hasChecked(t.m_hasChecked), m_lastCheckpointId(t.m_lastCheckpointId), m_enabled(t.m_enabled),
+    m_startTime(t.m_startTime), m_endTime(t.m_endTime), m_lastCheckpointTime(t.m_lastCheckpointTime) {
+  }
+  virtual ~PerformanceTracker(void);
+  /// @brief A checkpoint for current performanceTracker block.
+  void checkpoint(const std::string& id = std::string(), const char* file = __FILE__,
+                  base::type::LineNumber line = __LINE__,
+                  const char* func = "");
+  inline Level level(void) const {
+    return m_level;
+  }
+ private:
+  std::string m_blockName;
+  base::TimestampUnit m_timestampUnit;
+  std::string m_loggerId;
+  bool m_scopedLog;
+  Level m_level;
+  bool m_hasChecked;
+  std::string m_lastCheckpointId;
+  bool m_enabled;
+  struct timeval m_startTime, m_endTime, m_lastCheckpointTime;
+
+  PerformanceTracker(void);
+
+  friend class el::PerformanceTrackingData;
+  friend class base::DefaultPerformanceTrackingCallback;
+
+  const inline base::type::string_t getFormattedTimeTaken() const {
+    return getFormattedTimeTaken(m_startTime);
+  }
+
+  const base::type::string_t getFormattedTimeTaken(struct timeval startTime) const;
+
+  virtual inline void log(el::base::type::ostream_t& os) const {
+    os << getFormattedTimeTaken();
+  }
+};
+class DefaultPerformanceTrackingCallback : public PerformanceTrackingCallback {
+ protected:
+  void handle(const PerformanceTrackingData* data) {
+    m_data = data;
+    base::type::stringstream_t ss;
+    if (m_data->dataType() == PerformanceTrackingData::DataType::Complete) {
+      ss << ELPP_LITERAL("Executed [") << m_data->blockName()->c_str() << ELPP_LITERAL("] in [") <<
+         *m_data->formattedTimeTaken() << ELPP_LITERAL("]");
+    } else {
+      ss << ELPP_LITERAL("Performance checkpoint");
+      if (!m_data->checkpointId().empty()) {
+        ss << ELPP_LITERAL(" [") << m_data->checkpointId().c_str() << ELPP_LITERAL("]");
+      }
+      ss << ELPP_LITERAL(" for block [") << m_data->blockName()->c_str() << ELPP_LITERAL("] : [") <<
+         *m_data->performanceTracker();
+      if (!ELPP->hasFlag(LoggingFlag::DisablePerformanceTrackingCheckpointComparison)
+          && m_data->performanceTracker()->m_hasChecked) {
+        ss << ELPP_LITERAL(" ([") << *m_data->formattedTimeTaken() << ELPP_LITERAL("] from ");
+        if (m_data->performanceTracker()->m_lastCheckpointId.empty()) {
+          ss << ELPP_LITERAL("last checkpoint");
+        } else {
+          ss << ELPP_LITERAL("checkpoint '") << m_data->performanceTracker()->m_lastCheckpointId.c_str() << ELPP_LITERAL("'");
+        }
+        ss << ELPP_LITERAL(")]");
+      } else {
+        ss << ELPP_LITERAL("]");
+      }
+    }
+    el::base::Writer(m_data->performanceTracker()->level(), m_data->file(), m_data->line(), m_data->func()).construct(1,
+        m_data->loggerId().c_str()) << ss.str();
+  }
+ private:
+  const PerformanceTrackingData* m_data;
+};
+}  // namespace base
+inline const std::string* PerformanceTrackingData::blockName() const {
+  return const_cast<const std::string*>(&m_performanceTracker->m_blockName);
+}
+inline const struct timeval* PerformanceTrackingData::startTime() const {
+  return const_cast<const struct timeval*>(&m_performanceTracker->m_startTime);
+}
+inline const struct timeval* PerformanceTrackingData::endTime() const {
+  return const_cast<const struct timeval*>(&m_performanceTracker->m_endTime);
+}
+inline const struct timeval* PerformanceTrackingData::lastCheckpointTime() const {
+  return const_cast<const struct timeval*>(&m_performanceTracker->m_lastCheckpointTime);
+}
+inline const std::string& PerformanceTrackingData::loggerId(void) const {
+  return m_performanceTracker->m_loggerId;
+}
+#endif // defined(ELPP_FEATURE_ALL) || defined(ELPP_FEATURE_PERFORMANCE_TRACKING)
+namespace base {
+/// @brief Contains some internal debugging tools like crash handler and stack tracer
+namespace debug {
+#if defined(ELPP_FEATURE_ALL) || defined(ELPP_FEATURE_CRASH_LOG)
+class StackTrace : base::NoCopy {
+ public:
+  static const unsigned int kMaxStack = 64;
+  static const unsigned int kStackStart = 2;  // We want to skip c'tor and StackTrace::generateNew()
+  class StackTraceEntry {
+   public:
+    StackTraceEntry(std::size_t index, const char* loc, const char* demang, const char* hex, const char* addr);
+    StackTraceEntry(std::size_t index, char* loc) :
+      m_index(index),
+      m_location(loc) {
+    }
+    std::size_t m_index;
+    std::string m_location;
+    std::string m_demangled;
+    std::string m_hex;
+    std::string m_addr;
+    friend std::ostream& operator<<(std::ostream& ss, const StackTraceEntry& si);
+
+   private:
+    StackTraceEntry(void);
+  };
+
+  StackTrace(void) {
+    generateNew();
+  }
+
+  virtual ~StackTrace(void) {
+  }
+
+  inline std::vector<StackTraceEntry>& getLatestStack(void) {
+    return m_stack;
+  }
+
+  friend std::ostream& operator<<(std::ostream& os, const StackTrace& st);
+
+ private:
+  std::vector<StackTraceEntry> m_stack;
+
+  void generateNew(void);
+};
+/// @brief Handles unexpected crashes
+class CrashHandler : base::NoCopy {
+ public:
+  typedef void (*Handler)(int);
+
+  explicit CrashHandler(bool useDefault);
+  explicit CrashHandler(const Handler& cHandler) {
+    setHandler(cHandler);
+  }
+  void setHandler(const Handler& cHandler);
+
+ private:
+  Handler m_handler;
+};
+#else
+class CrashHandler {
+ public:
+  explicit CrashHandler(bool) {}
+};
+#endif // defined(ELPP_FEATURE_ALL) || defined(ELPP_FEATURE_CRASH_LOG)
+}  // namespace debug
+}  // namespace base
+extern base::debug::CrashHandler elCrashHandler;
+#define MAKE_LOGGABLE(ClassType, ClassInstance, OutputStreamInstance) \
+el::base::type::ostream_t& operator<<(el::base::type::ostream_t& OutputStreamInstance, const ClassType& ClassInstance)
+/// @brief Initializes syslog with process ID, options and facility. calls closelog() on d'tor
+class SysLogInitializer {
+ public:
+  SysLogInitializer(const char* processIdent, int options = 0, int facility = 0) {
+#if defined(ELPP_SYSLOG)
+    openlog(processIdent, options, facility);
+#else
+    ELPP_UNUSED(processIdent);
+    ELPP_UNUSED(options);
+    ELPP_UNUSED(facility);
+#endif  // defined(ELPP_SYSLOG)
+  }
+  virtual ~SysLogInitializer(void) {
+#if defined(ELPP_SYSLOG)
+    closelog();
+#endif  // defined(ELPP_SYSLOG)
+  }
+};
+#define ELPP_INITIALIZE_SYSLOG(id, opt, fac) el::SysLogInitializer elSyslogInit(id, opt, fac)
+/// @brief Static helpers for developers
+class Helpers : base::StaticClass {
+ public:
+  /// @brief Shares logging repository (base::Storage)
+  static inline void setStorage(base::type::StoragePointer storage) {
+    ELPP = storage;
+  }
+  /// @return Main storage repository
+  static inline base::type::StoragePointer storage() {
+    return ELPP;
+  }
+  /// @brief Sets application arguments and figures out whats active for logging and whats not.
+  static inline void setArgs(int argc, char** argv) {
+    ELPP->setApplicationArguments(argc, argv);
+  }
+  /// @copydoc setArgs(int argc, char** argv)
+  static inline void setArgs(int argc, const char** argv) {
+    ELPP->setApplicationArguments(argc, const_cast<char**>(argv));
+  }
+  /// @brief Sets thread name for current thread. Requires std::thread
+  static inline void setThreadName(const std::string& name) {
+    ELPP->setThreadName(name);
+  }
+  static inline std::string getThreadName() {
+    return ELPP->getThreadName(base::threading::getCurrentThreadId());
+  }
+#if defined(ELPP_FEATURE_ALL) || defined(ELPP_FEATURE_CRASH_LOG)
+  /// @brief Overrides default crash handler and installs custom handler.
+  /// @param crashHandler A functor with no return type that takes single int argument.
+  ///        Handler is a typedef with specification: void (*Handler)(int)
+  static inline void setCrashHandler(const el::base::debug::CrashHandler::Handler& crashHandler) {
+    el::elCrashHandler.setHandler(crashHandler);
+  }
+  /// @brief Abort due to crash with signal in parameter
+  /// @param sig Crash signal
+  static void crashAbort(int sig, const char* sourceFile = "", unsigned int long line = 0);
+  /// @brief Logs reason of crash as per sig
+  /// @param sig Crash signal
+  /// @param stackTraceIfAvailable Includes stack trace if available
+  /// @param level Logging level
+  /// @param logger Logger to use for logging
+  static void logCrashReason(int sig, bool stackTraceIfAvailable = false,
+                             Level level = Level::Fatal, const char* logger = base::consts::kDefaultLoggerId);
+#endif // defined(ELPP_FEATURE_ALL) || defined(ELPP_FEATURE_CRASH_LOG)
+  /// @brief Installs pre rollout callback, this callback is triggered when log file is about to be rolled out
+  ///        (can be useful for backing up)
+  static inline void installPreRollOutCallback(const PreRollOutCallback& callback) {
+    ELPP->setPreRollOutCallback(callback);
+  }
+  /// @brief Uninstalls pre rollout callback
+  static inline void uninstallPreRollOutCallback(void) {
+    ELPP->unsetPreRollOutCallback();
+  }
+  /// @brief Installs post log dispatch callback, this callback is triggered when log is dispatched
+  template <typename T>
+  static inline bool installLogDispatchCallback(const std::string& id) {
+    return ELPP->installLogDispatchCallback<T>(id);
+  }
+  /// @brief Uninstalls log dispatch callback
+  template <typename T>
+  static inline void uninstallLogDispatchCallback(const std::string& id) {
+    ELPP->uninstallLogDispatchCallback<T>(id);
+  }
+  template <typename T>
+  static inline T* logDispatchCallback(const std::string& id) {
+    return ELPP->logDispatchCallback<T>(id);
+  }
+#if defined(ELPP_FEATURE_ALL) || defined(ELPP_FEATURE_PERFORMANCE_TRACKING)
+  /// @brief Installs post performance tracking callback, this callback is triggered when performance tracking is finished
+  template <typename T>
+  static inline bool installPerformanceTrackingCallback(const std::string& id) {
+    return ELPP->installPerformanceTrackingCallback<T>(id);
+  }
+  /// @brief Uninstalls post performance tracking handler
+  template <typename T>
+  static inline void uninstallPerformanceTrackingCallback(const std::string& id) {
+    ELPP->uninstallPerformanceTrackingCallback<T>(id);
+  }
+  template <typename T>
+  static inline T* performanceTrackingCallback(const std::string& id) {
+    return ELPP->performanceTrackingCallback<T>(id);
+  }
+#endif // defined(ELPP_FEATURE_ALL) || defined(ELPP_FEATURE_PERFORMANCE_TRACKING)
+  /// @brief Converts template to std::string - useful for loggable classes to log containers within log(std::ostream&) const
+  template <typename T>
+  static std::string convertTemplateToStdString(const T& templ) {
+    el::Logger* logger =
+      ELPP->registeredLoggers()->get(el::base::consts::kDefaultLoggerId);
+    if (logger == nullptr) {
+      return std::string();
+    }
+    base::MessageBuilder b;
+    b.initialize(logger);
+    logger->acquireLock();
+    b << templ;
+#if defined(ELPP_UNICODE)
+    std::string s = std::string(logger->stream().str().begin(), logger->stream().str().end());
+#else
+    std::string s = logger->stream().str();
+#endif  // defined(ELPP_UNICODE)
+    logger->stream().str(ELPP_LITERAL(""));
+    logger->releaseLock();
+    return s;
+  }
+  /// @brief Returns command line arguments (pointer) provided to easylogging++
+  static inline const el::base::utils::CommandLineArgs* commandLineArgs(void) {
+    return ELPP->commandLineArgs();
+  }
+  /// @brief Installs user defined format specifier and handler
+  static inline void installCustomFormatSpecifier(const CustomFormatSpecifier& customFormatSpecifier) {
+    ELPP->installCustomFormatSpecifier(customFormatSpecifier);
+  }
+  /// @brief Uninstalls user defined format specifier and handler
+  static inline bool uninstallCustomFormatSpecifier(const char* formatSpecifier) {
+    return ELPP->uninstallCustomFormatSpecifier(formatSpecifier);
+  }
+  /// @brief Returns true if custom format specifier is installed
+  static inline bool hasCustomFormatSpecifier(const char* formatSpecifier) {
+    return ELPP->hasCustomFormatSpecifier(formatSpecifier);
+  }
+  static inline void validateFileRolling(Logger* logger, Level level) {
+    if (logger == nullptr) return;
+    logger->m_typedConfigurations->validateFileRolling(level, ELPP->preRollOutCallback());
+  }
+};
+/// @brief Static helpers to deal with loggers and their configurations
+class Loggers : base::StaticClass {
+ public:
+  /// @brief Gets existing or registers new logger
+  static Logger* getLogger(const std::string& identity, bool registerIfNotAvailable = true);
+  /// @brief Changes default log builder for future loggers
+  static void setDefaultLogBuilder(el::LogBuilderPtr& logBuilderPtr);
+  /// @brief Installs logger registration callback, this callback is triggered when new logger is registered
+  template <typename T>
+  static inline bool installLoggerRegistrationCallback(const std::string& id) {
+    return ELPP->registeredLoggers()->installLoggerRegistrationCallback<T>(id);
+  }
+  /// @brief Uninstalls log dispatch callback
+  template <typename T>
+  static inline void uninstallLoggerRegistrationCallback(const std::string& id) {
+    ELPP->registeredLoggers()->uninstallLoggerRegistrationCallback<T>(id);
+  }
+  template <typename T>
+  static inline T* loggerRegistrationCallback(const std::string& id) {
+    return ELPP->registeredLoggers()->loggerRegistrationCallback<T>(id);
+  }
+  /// @brief Unregisters logger - use it only when you know what you are doing, you may unregister
+  ///        loggers initialized / used by third-party libs.
+  static bool unregisterLogger(const std::string& identity);
+  /// @brief Whether or not logger with id is registered
+  static bool hasLogger(const std::string& identity);
+  /// @brief Reconfigures specified logger with new configurations
+  static Logger* reconfigureLogger(Logger* logger, const Configurations& configurations);
+  /// @brief Reconfigures logger with new configurations after looking it up using identity
+  static Logger* reconfigureLogger(const std::string& identity, const Configurations& configurations);
+  /// @brief Reconfigures logger's single configuration
+  static Logger* reconfigureLogger(const std::string& identity, ConfigurationType configurationType,
+                                   const std::string& value);
+  /// @brief Reconfigures all the existing loggers with new configurations
+  static void reconfigureAllLoggers(const Configurations& configurations);
+  /// @brief Reconfigures single configuration for all the loggers
+  static inline void reconfigureAllLoggers(ConfigurationType configurationType, const std::string& value) {
+    reconfigureAllLoggers(Level::Global, configurationType, value);
+  }
+  /// @brief Reconfigures single configuration for all the loggers for specified level
+  static void reconfigureAllLoggers(Level level, ConfigurationType configurationType,
+                                    const std::string& value);
+  /// @brief Sets default configurations. This configuration is used for future (and conditionally for existing) loggers
+  static void setDefaultConfigurations(const Configurations& configurations,
+                                       bool reconfigureExistingLoggers = false);
+  /// @brief Returns current default
+  static const Configurations* defaultConfigurations(void);
+  /// @brief Returns log stream reference pointer if needed by user
+  static const base::LogStreamsReferenceMap* logStreamsReference(void);
+  /// @brief Default typed configuration based on existing defaultConf
+  static base::TypedConfigurations defaultTypedConfigurations(void);
+  /// @brief Populates all logger IDs in current repository.
+  /// @param [out] targetList List of fill up.
+  static std::vector<std::string>* populateAllLoggerIds(std::vector<std::string>* targetList);
+  /// @brief Sets configurations from global configuration file.
+  static void configureFromGlobal(const char* globalConfigurationFilePath);
+  /// @brief Configures loggers using command line arg. Ensure you have already set command line args,
+  /// @return False if invalid argument or argument with no value provided, true if attempted to configure logger.
+  ///         If true is returned that does not mean it has been configured successfully, it only means that it
+  ///         has attempeted to configure logger using configuration file provided in argument
+  static bool configureFromArg(const char* argKey);
+  /// @brief Flushes all loggers for all levels - Be careful if you dont know how many loggers are registered
+  static void flushAll(void);
+  /// @brief Adds logging flag used internally.
+  static inline void addFlag(LoggingFlag flag) {
+    ELPP->addFlag(flag);
+  }
+  /// @brief Removes logging flag used internally.
+  static inline void removeFlag(LoggingFlag flag) {
+    ELPP->removeFlag(flag);
+  }
+  /// @brief Determines whether or not certain flag is active
+  static inline bool hasFlag(LoggingFlag flag) {
+    return ELPP->hasFlag(flag);
+  }
+  /// @brief Adds flag and removes it when scope goes out
+  class ScopedAddFlag {
+   public:
+    ScopedAddFlag(LoggingFlag flag) : m_flag(flag) {
+      Loggers::addFlag(m_flag);
+    }
+    ~ScopedAddFlag(void) {
+      Loggers::removeFlag(m_flag);
+    }
+   private:
+    LoggingFlag m_flag;
+  };
+  /// @brief Removes flag and add it when scope goes out
+  class ScopedRemoveFlag {
+   public:
+    ScopedRemoveFlag(LoggingFlag flag) : m_flag(flag) {
+      Loggers::removeFlag(m_flag);
+    }
+    ~ScopedRemoveFlag(void) {
+      Loggers::addFlag(m_flag);
+    }
+   private:
+    LoggingFlag m_flag;
+  };
+  /// @brief Sets hierarchy for logging. Needs to enable logging flag (HierarchicalLogging)
+  static void setLoggingLevel(Level level) {
+    ELPP->setLoggingLevel(level);
+  }
+  /// @brief Sets verbose level on the fly
+  static void setVerboseLevel(base::type::VerboseLevel level);
+  /// @brief Gets current verbose level
+  static base::type::VerboseLevel verboseLevel(void);
+  /// @brief Sets vmodules as specified (on the fly)
+  static void setVModules(const char* modules);
+  /// @brief Clears vmodules
+  static void clearVModules(void);
+};
+class VersionInfo : base::StaticClass {
+ public:
+  /// @brief Current version number
+  static const std::string version(void);
+
+  /// @brief Release date of current version
+  static const std::string releaseDate(void);
+};
+}  // namespace el
+#undef VLOG_IS_ON
+/// @brief Determines whether verbose logging is on for specified level current file.
+#define VLOG_IS_ON(verboseLevel) (ELPP->vRegistry()->allowed(verboseLevel, __FILE__))
+#undef TIMED_BLOCK
+#undef TIMED_SCOPE
+#undef TIMED_SCOPE_IF
+#undef TIMED_FUNC
+#undef TIMED_FUNC_IF
+#undef ELPP_MIN_UNIT
+#if defined(ELPP_PERFORMANCE_MICROSECONDS)
+#  define ELPP_MIN_UNIT el::base::TimestampUnit::Microsecond
+#else
+#  define ELPP_MIN_UNIT el::base::TimestampUnit::Millisecond
+#endif  // (defined(ELPP_PERFORMANCE_MICROSECONDS))
+/// @brief Performance tracked scope. Performance gets written when goes out of scope using
+///        'performance' logger.
+///
+/// @detail Please note in order to check the performance at a certain time you can use obj->checkpoint();
+/// @see el::base::PerformanceTracker
+/// @see el::base::PerformanceTracker::checkpoint
+// Note: Do not surround this definition with null macro because of obj instance
+#define TIMED_SCOPE_IF(obj, blockname, condition) el::base::type::PerformanceTrackerPtr obj( condition ? \
+  new el::base::PerformanceTracker(blockname, ELPP_MIN_UNIT) : nullptr )
+#define TIMED_SCOPE(obj, blockname) TIMED_SCOPE_IF(obj, blockname, true)
+#define TIMED_BLOCK(obj, blockName) for (struct { int i; el::base::type::PerformanceTrackerPtr timer; } obj = { 0, \
+  el::base::type::PerformanceTrackerPtr(new el::base::PerformanceTracker(blockName, ELPP_MIN_UNIT)) }; obj.i < 1; ++obj.i)
+/// @brief Performance tracked function. Performance gets written when goes out of scope using
+///        'performance' logger.
+///
+/// @detail Please note in order to check the performance at a certain time you can use obj->checkpoint();
+/// @see el::base::PerformanceTracker
+/// @see el::base::PerformanceTracker::checkpoint
+#define TIMED_FUNC_IF(obj,condition) TIMED_SCOPE_IF(obj, ELPP_FUNC, condition)
+#define TIMED_FUNC(obj) TIMED_SCOPE(obj, ELPP_FUNC)
+#undef PERFORMANCE_CHECKPOINT
+#undef PERFORMANCE_CHECKPOINT_WITH_ID
+#define PERFORMANCE_CHECKPOINT(obj) obj->checkpoint(std::string(), __FILE__, __LINE__, ELPP_FUNC)
+#define PERFORMANCE_CHECKPOINT_WITH_ID(obj, id) obj->checkpoint(id, __FILE__, __LINE__, ELPP_FUNC)
+#undef ELPP_COUNTER
+#undef ELPP_COUNTER_POS
+/// @brief Gets hit counter for file/line
+#define ELPP_COUNTER (ELPP->hitCounters()->getCounter(__FILE__, __LINE__))
+/// @brief Gets hit counter position for file/line, -1 if not registered yet
+#define ELPP_COUNTER_POS (ELPP_COUNTER == nullptr ? -1 : ELPP_COUNTER->hitCounts())
+// Undef levels to support LOG(LEVEL)
+#undef INFO
+#undef WARNING
+#undef DEBUG
+#undef ERROR
+#undef FATAL
+#undef TRACE
+#undef VERBOSE
+// Undef existing
+#undef CINFO
+#undef CWARNING
+#undef CDEBUG
+#undef CFATAL
+#undef CERROR
+#undef CTRACE
+#undef CVERBOSE
+#undef CINFO_IF
+#undef CWARNING_IF
+#undef CDEBUG_IF
+#undef CERROR_IF
+#undef CFATAL_IF
+#undef CTRACE_IF
+#undef CVERBOSE_IF
+#undef CINFO_EVERY_N
+#undef CWARNING_EVERY_N
+#undef CDEBUG_EVERY_N
+#undef CERROR_EVERY_N
+#undef CFATAL_EVERY_N
+#undef CTRACE_EVERY_N
+#undef CVERBOSE_EVERY_N
+#undef CINFO_AFTER_N
+#undef CWARNING_AFTER_N
+#undef CDEBUG_AFTER_N
+#undef CERROR_AFTER_N
+#undef CFATAL_AFTER_N
+#undef CTRACE_AFTER_N
+#undef CVERBOSE_AFTER_N
+#undef CINFO_N_TIMES
+#undef CWARNING_N_TIMES
+#undef CDEBUG_N_TIMES
+#undef CERROR_N_TIMES
+#undef CFATAL_N_TIMES
+#undef CTRACE_N_TIMES
+#undef CVERBOSE_N_TIMES
+// Normal logs
+#if ELPP_INFO_LOG
+#  define CINFO(writer, dispatchAction, ...) ELPP_WRITE_LOG(writer, el::Level::Info, dispatchAction, __VA_ARGS__)
+#else
+#  define CINFO(writer, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_INFO_LOG
+#if ELPP_WARNING_LOG
+#  define CWARNING(writer, dispatchAction, ...) ELPP_WRITE_LOG(writer, el::Level::Warning, dispatchAction, __VA_ARGS__)
+#else
+#  define CWARNING(writer, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_WARNING_LOG
+#if ELPP_DEBUG_LOG
+#  define CDEBUG(writer, dispatchAction, ...) ELPP_WRITE_LOG(writer, el::Level::Debug, dispatchAction, __VA_ARGS__)
+#else
+#  define CDEBUG(writer, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_DEBUG_LOG
+#if ELPP_ERROR_LOG
+#  define CERROR(writer, dispatchAction, ...) ELPP_WRITE_LOG(writer, el::Level::Error, dispatchAction, __VA_ARGS__)
+#else
+#  define CERROR(writer, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_ERROR_LOG
+#if ELPP_FATAL_LOG
+#  define CFATAL(writer, dispatchAction, ...) ELPP_WRITE_LOG(writer, el::Level::Fatal, dispatchAction, __VA_ARGS__)
+#else
+#  define CFATAL(writer, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_FATAL_LOG
+#if ELPP_TRACE_LOG
+#  define CTRACE(writer, dispatchAction, ...) ELPP_WRITE_LOG(writer, el::Level::Trace, dispatchAction, __VA_ARGS__)
+#else
+#  define CTRACE(writer, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_TRACE_LOG
+#if ELPP_VERBOSE_LOG
+#  define CVERBOSE(writer, vlevel, dispatchAction, ...) if (VLOG_IS_ON(vlevel)) writer(\
+el::Level::Verbose, __FILE__, __LINE__, ELPP_FUNC, dispatchAction, vlevel).construct(el_getVALength(__VA_ARGS__), __VA_ARGS__)
+#else
+#  define CVERBOSE(writer, vlevel, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_VERBOSE_LOG
+// Conditional logs
+#if ELPP_INFO_LOG
+#  define CINFO_IF(writer, condition_, dispatchAction, ...) \
+ELPP_WRITE_LOG_IF(writer, (condition_), el::Level::Info, dispatchAction, __VA_ARGS__)
+#else
+#  define CINFO_IF(writer, condition_, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_INFO_LOG
+#if ELPP_WARNING_LOG
+#  define CWARNING_IF(writer, condition_, dispatchAction, ...)\
+ELPP_WRITE_LOG_IF(writer, (condition_), el::Level::Warning, dispatchAction, __VA_ARGS__)
+#else
+#  define CWARNING_IF(writer, condition_, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_WARNING_LOG
+#if ELPP_DEBUG_LOG
+#  define CDEBUG_IF(writer, condition_, dispatchAction, ...)\
+ELPP_WRITE_LOG_IF(writer, (condition_), el::Level::Debug, dispatchAction, __VA_ARGS__)
+#else
+#  define CDEBUG_IF(writer, condition_, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_DEBUG_LOG
+#if ELPP_ERROR_LOG
+#  define CERROR_IF(writer, condition_, dispatchAction, ...)\
+ELPP_WRITE_LOG_IF(writer, (condition_), el::Level::Error, dispatchAction, __VA_ARGS__)
+#else
+#  define CERROR_IF(writer, condition_, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_ERROR_LOG
+#if ELPP_FATAL_LOG
+#  define CFATAL_IF(writer, condition_, dispatchAction, ...)\
+ELPP_WRITE_LOG_IF(writer, (condition_), el::Level::Fatal, dispatchAction, __VA_ARGS__)
+#else
+#  define CFATAL_IF(writer, condition_, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_FATAL_LOG
+#if ELPP_TRACE_LOG
+#  define CTRACE_IF(writer, condition_, dispatchAction, ...)\
+ELPP_WRITE_LOG_IF(writer, (condition_), el::Level::Trace, dispatchAction, __VA_ARGS__)
+#else
+#  define CTRACE_IF(writer, condition_, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_TRACE_LOG
+#if ELPP_VERBOSE_LOG
+#  define CVERBOSE_IF(writer, condition_, vlevel, dispatchAction, ...) if (VLOG_IS_ON(vlevel) && (condition_)) writer( \
+el::Level::Verbose, __FILE__, __LINE__, ELPP_FUNC, dispatchAction, vlevel).construct(el_getVALength(__VA_ARGS__), __VA_ARGS__)
+#else
+#  define CVERBOSE_IF(writer, condition_, vlevel, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_VERBOSE_LOG
+// Occasional logs
+#if ELPP_INFO_LOG
+#  define CINFO_EVERY_N(writer, occasion, dispatchAction, ...)\
+ELPP_WRITE_LOG_EVERY_N(writer, occasion, el::Level::Info, dispatchAction, __VA_ARGS__)
+#else
+#  define CINFO_EVERY_N(writer, occasion, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_INFO_LOG
+#if ELPP_WARNING_LOG
+#  define CWARNING_EVERY_N(writer, occasion, dispatchAction, ...)\
+ELPP_WRITE_LOG_EVERY_N(writer, occasion, el::Level::Warning, dispatchAction, __VA_ARGS__)
+#else
+#  define CWARNING_EVERY_N(writer, occasion, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_WARNING_LOG
+#if ELPP_DEBUG_LOG
+#  define CDEBUG_EVERY_N(writer, occasion, dispatchAction, ...)\
+ELPP_WRITE_LOG_EVERY_N(writer, occasion, el::Level::Debug, dispatchAction, __VA_ARGS__)
+#else
+#  define CDEBUG_EVERY_N(writer, occasion, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_DEBUG_LOG
+#if ELPP_ERROR_LOG
+#  define CERROR_EVERY_N(writer, occasion, dispatchAction, ...)\
+ELPP_WRITE_LOG_EVERY_N(writer, occasion, el::Level::Error, dispatchAction, __VA_ARGS__)
+#else
+#  define CERROR_EVERY_N(writer, occasion, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_ERROR_LOG
+#if ELPP_FATAL_LOG
+#  define CFATAL_EVERY_N(writer, occasion, dispatchAction, ...)\
+ELPP_WRITE_LOG_EVERY_N(writer, occasion, el::Level::Fatal, dispatchAction, __VA_ARGS__)
+#else
+#  define CFATAL_EVERY_N(writer, occasion, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_FATAL_LOG
+#if ELPP_TRACE_LOG
+#  define CTRACE_EVERY_N(writer, occasion, dispatchAction, ...)\
+ELPP_WRITE_LOG_EVERY_N(writer, occasion, el::Level::Trace, dispatchAction, __VA_ARGS__)
+#else
+#  define CTRACE_EVERY_N(writer, occasion, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_TRACE_LOG
+#if ELPP_VERBOSE_LOG
+#  define CVERBOSE_EVERY_N(writer, occasion, vlevel, dispatchAction, ...)\
+CVERBOSE_IF(writer, ELPP->validateEveryNCounter(__FILE__, __LINE__, occasion), vlevel, dispatchAction, __VA_ARGS__)
+#else
+#  define CVERBOSE_EVERY_N(writer, occasion, vlevel, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_VERBOSE_LOG
+// After N logs
+#if ELPP_INFO_LOG
+#  define CINFO_AFTER_N(writer, n, dispatchAction, ...)\
+ELPP_WRITE_LOG_AFTER_N(writer, n, el::Level::Info, dispatchAction, __VA_ARGS__)
+#else
+#  define CINFO_AFTER_N(writer, n, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_INFO_LOG
+#if ELPP_WARNING_LOG
+#  define CWARNING_AFTER_N(writer, n, dispatchAction, ...)\
+ELPP_WRITE_LOG_AFTER_N(writer, n, el::Level::Warning, dispatchAction, __VA_ARGS__)
+#else
+#  define CWARNING_AFTER_N(writer, n, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_WARNING_LOG
+#if ELPP_DEBUG_LOG
+#  define CDEBUG_AFTER_N(writer, n, dispatchAction, ...)\
+ELPP_WRITE_LOG_AFTER_N(writer, n, el::Level::Debug, dispatchAction, __VA_ARGS__)
+#else
+#  define CDEBUG_AFTER_N(writer, n, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_DEBUG_LOG
+#if ELPP_ERROR_LOG
+#  define CERROR_AFTER_N(writer, n, dispatchAction, ...)\
+ELPP_WRITE_LOG_AFTER_N(writer, n, el::Level::Error, dispatchAction, __VA_ARGS__)
+#else
+#  define CERROR_AFTER_N(writer, n, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_ERROR_LOG
+#if ELPP_FATAL_LOG
+#  define CFATAL_AFTER_N(writer, n, dispatchAction, ...)\
+ELPP_WRITE_LOG_AFTER_N(writer, n, el::Level::Fatal, dispatchAction, __VA_ARGS__)
+#else
+#  define CFATAL_AFTER_N(writer, n, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_FATAL_LOG
+#if ELPP_TRACE_LOG
+#  define CTRACE_AFTER_N(writer, n, dispatchAction, ...)\
+ELPP_WRITE_LOG_AFTER_N(writer, n, el::Level::Trace, dispatchAction, __VA_ARGS__)
+#else
+#  define CTRACE_AFTER_N(writer, n, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_TRACE_LOG
+#if ELPP_VERBOSE_LOG
+#  define CVERBOSE_AFTER_N(writer, n, vlevel, dispatchAction, ...)\
+CVERBOSE_IF(writer, ELPP->validateAfterNCounter(__FILE__, __LINE__, n), vlevel, dispatchAction, __VA_ARGS__)
+#else
+#  define CVERBOSE_AFTER_N(writer, n, vlevel, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_VERBOSE_LOG
+// N Times logs
+#if ELPP_INFO_LOG
+#  define CINFO_N_TIMES(writer, n, dispatchAction, ...)\
+ELPP_WRITE_LOG_N_TIMES(writer, n, el::Level::Info, dispatchAction, __VA_ARGS__)
+#else
+#  define CINFO_N_TIMES(writer, n, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_INFO_LOG
+#if ELPP_WARNING_LOG
+#  define CWARNING_N_TIMES(writer, n, dispatchAction, ...)\
+ELPP_WRITE_LOG_N_TIMES(writer, n, el::Level::Warning, dispatchAction, __VA_ARGS__)
+#else
+#  define CWARNING_N_TIMES(writer, n, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_WARNING_LOG
+#if ELPP_DEBUG_LOG
+#  define CDEBUG_N_TIMES(writer, n, dispatchAction, ...)\
+ELPP_WRITE_LOG_N_TIMES(writer, n, el::Level::Debug, dispatchAction, __VA_ARGS__)
+#else
+#  define CDEBUG_N_TIMES(writer, n, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_DEBUG_LOG
+#if ELPP_ERROR_LOG
+#  define CERROR_N_TIMES(writer, n, dispatchAction, ...)\
+ELPP_WRITE_LOG_N_TIMES(writer, n, el::Level::Error, dispatchAction, __VA_ARGS__)
+#else
+#  define CERROR_N_TIMES(writer, n, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_ERROR_LOG
+#if ELPP_FATAL_LOG
+#  define CFATAL_N_TIMES(writer, n, dispatchAction, ...)\
+ELPP_WRITE_LOG_N_TIMES(writer, n, el::Level::Fatal, dispatchAction, __VA_ARGS__)
+#else
+#  define CFATAL_N_TIMES(writer, n, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_FATAL_LOG
+#if ELPP_TRACE_LOG
+#  define CTRACE_N_TIMES(writer, n, dispatchAction, ...)\
+ELPP_WRITE_LOG_N_TIMES(writer, n, el::Level::Trace, dispatchAction, __VA_ARGS__)
+#else
+#  define CTRACE_N_TIMES(writer, n, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_TRACE_LOG
+#if ELPP_VERBOSE_LOG
+#  define CVERBOSE_N_TIMES(writer, n, vlevel, dispatchAction, ...)\
+CVERBOSE_IF(writer, ELPP->validateNTimesCounter(__FILE__, __LINE__, n), vlevel, dispatchAction, __VA_ARGS__)
+#else
+#  define CVERBOSE_N_TIMES(writer, n, vlevel, dispatchAction, ...) el::base::NullWriter()
+#endif  // ELPP_VERBOSE_LOG
+//
+// Custom Loggers - Requires (level, dispatchAction, loggerId/s)
+//
+// undef existing
+#undef CLOG
+#undef CLOG_VERBOSE
+#undef CVLOG
+#undef CLOG_IF
+#undef CLOG_VERBOSE_IF
+#undef CVLOG_IF
+#undef CLOG_EVERY_N
+#undef CVLOG_EVERY_N
+#undef CLOG_AFTER_N
+#undef CVLOG_AFTER_N
+#undef CLOG_N_TIMES
+#undef CVLOG_N_TIMES
+// Normal logs
+#define CLOG(LEVEL, ...)\
+C##LEVEL(el::base::Writer, el::base::DispatchAction::NormalLog, __VA_ARGS__)
+#define CVLOG(vlevel, ...) CVERBOSE(el::base::Writer, vlevel, el::base::DispatchAction::NormalLog, __VA_ARGS__)
+// Conditional logs
+#define CLOG_IF(condition, LEVEL, ...)\
+C##LEVEL##_IF(el::base::Writer, condition, el::base::DispatchAction::NormalLog, __VA_ARGS__)
+#define CVLOG_IF(condition, vlevel, ...)\
+CVERBOSE_IF(el::base::Writer, condition, vlevel, el::base::DispatchAction::NormalLog, __VA_ARGS__)
+// Hit counts based logs
+#define CLOG_EVERY_N(n, LEVEL, ...)\
+C##LEVEL##_EVERY_N(el::base::Writer, n, el::base::DispatchAction::NormalLog, __VA_ARGS__)
+#define CVLOG_EVERY_N(n, vlevel, ...)\
+CVERBOSE_EVERY_N(el::base::Writer, n, vlevel, el::base::DispatchAction::NormalLog, __VA_ARGS__)
+#define CLOG_AFTER_N(n, LEVEL, ...)\
+C##LEVEL##_AFTER_N(el::base::Writer, n, el::base::DispatchAction::NormalLog, __VA_ARGS__)
+#define CVLOG_AFTER_N(n, vlevel, ...)\
+CVERBOSE_AFTER_N(el::base::Writer, n, vlevel, el::base::DispatchAction::NormalLog, __VA_ARGS__)
+#define CLOG_N_TIMES(n, LEVEL, ...)\
+C##LEVEL##_N_TIMES(el::base::Writer, n, el::base::DispatchAction::NormalLog, __VA_ARGS__)
+#define CVLOG_N_TIMES(n, vlevel, ...)\
+CVERBOSE_N_TIMES(el::base::Writer, n, vlevel, el::base::DispatchAction::NormalLog, __VA_ARGS__)
+//
+// Default Loggers macro using CLOG(), CLOG_VERBOSE() and CVLOG() macros
+//
+// undef existing
+#undef LOG
+#undef VLOG
+#undef LOG_IF
+#undef VLOG_IF
+#undef LOG_EVERY_N
+#undef VLOG_EVERY_N
+#undef LOG_AFTER_N
+#undef VLOG_AFTER_N
+#undef LOG_N_TIMES
+#undef VLOG_N_TIMES
+#undef ELPP_CURR_FILE_LOGGER_ID
+#if defined(ELPP_DEFAULT_LOGGER)
+#  define ELPP_CURR_FILE_LOGGER_ID ELPP_DEFAULT_LOGGER
+#else
+#  define ELPP_CURR_FILE_LOGGER_ID el::base::consts::kDefaultLoggerId
+#endif
+#undef ELPP_TRACE
+#define ELPP_TRACE CLOG(TRACE, ELPP_CURR_FILE_LOGGER_ID)
+// Normal logs
+#define LOG(LEVEL) CLOG(LEVEL, ELPP_CURR_FILE_LOGGER_ID)
+#define VLOG(vlevel) CVLOG(vlevel, ELPP_CURR_FILE_LOGGER_ID)
+// Conditional logs
+#define LOG_IF(condition, LEVEL) CLOG_IF(condition, LEVEL, ELPP_CURR_FILE_LOGGER_ID)
+#define VLOG_IF(condition, vlevel) CVLOG_IF(condition, vlevel, ELPP_CURR_FILE_LOGGER_ID)
+// Hit counts based logs
+#define LOG_EVERY_N(n, LEVEL) CLOG_EVERY_N(n, LEVEL, ELPP_CURR_FILE_LOGGER_ID)
+#define VLOG_EVERY_N(n, vlevel) CVLOG_EVERY_N(n, vlevel, ELPP_CURR_FILE_LOGGER_ID)
+#define LOG_AFTER_N(n, LEVEL) CLOG_AFTER_N(n, LEVEL, ELPP_CURR_FILE_LOGGER_ID)
+#define VLOG_AFTER_N(n, vlevel) CVLOG_AFTER_N(n, vlevel, ELPP_CURR_FILE_LOGGER_ID)
+#define LOG_N_TIMES(n, LEVEL) CLOG_N_TIMES(n, LEVEL, ELPP_CURR_FILE_LOGGER_ID)
+#define VLOG_N_TIMES(n, vlevel) CVLOG_N_TIMES(n, vlevel, ELPP_CURR_FILE_LOGGER_ID)
+// Generic PLOG()
+#undef CPLOG
+#undef CPLOG_IF
+#undef PLOG
+#undef PLOG_IF
+#undef DCPLOG
+#undef DCPLOG_IF
+#undef DPLOG
+#undef DPLOG_IF
+#define CPLOG(LEVEL, ...)\
+C##LEVEL(el::base::PErrorWriter, el::base::DispatchAction::NormalLog, __VA_ARGS__)
+#define CPLOG_IF(condition, LEVEL, ...)\
+C##LEVEL##_IF(el::base::PErrorWriter, condition, el::base::DispatchAction::NormalLog, __VA_ARGS__)
+#define DCPLOG(LEVEL, ...)\
+if (ELPP_DEBUG_LOG) C##LEVEL(el::base::PErrorWriter, el::base::DispatchAction::NormalLog, __VA_ARGS__)
+#define DCPLOG_IF(condition, LEVEL, ...)\
+C##LEVEL##_IF(el::base::PErrorWriter, (ELPP_DEBUG_LOG) && (condition), el::base::DispatchAction::NormalLog, __VA_ARGS__)
+#define PLOG(LEVEL) CPLOG(LEVEL, ELPP_CURR_FILE_LOGGER_ID)
+#define PLOG_IF(condition, LEVEL) CPLOG_IF(condition, LEVEL, ELPP_CURR_FILE_LOGGER_ID)
+#define DPLOG(LEVEL) DCPLOG(LEVEL, ELPP_CURR_FILE_LOGGER_ID)
+#define DPLOG_IF(condition, LEVEL) DCPLOG_IF(condition, LEVEL, ELPP_CURR_FILE_LOGGER_ID)
+// Generic SYSLOG()
+#undef CSYSLOG
+#undef CSYSLOG_IF
+#undef CSYSLOG_EVERY_N
+#undef CSYSLOG_AFTER_N
+#undef CSYSLOG_N_TIMES
+#undef SYSLOG
+#undef SYSLOG_IF
+#undef SYSLOG_EVERY_N
+#undef SYSLOG_AFTER_N
+#undef SYSLOG_N_TIMES
+#undef DCSYSLOG
+#undef DCSYSLOG_IF
+#undef DCSYSLOG_EVERY_N
+#undef DCSYSLOG_AFTER_N
+#undef DCSYSLOG_N_TIMES
+#undef DSYSLOG
+#undef DSYSLOG_IF
+#undef DSYSLOG_EVERY_N
+#undef DSYSLOG_AFTER_N
+#undef DSYSLOG_N_TIMES
+#if defined(ELPP_SYSLOG)
+#  define CSYSLOG(LEVEL, ...)\
+C##LEVEL(el::base::Writer, el::base::DispatchAction::SysLog, __VA_ARGS__)
+#  define CSYSLOG_IF(condition, LEVEL, ...)\
+C##LEVEL##_IF(el::base::Writer, condition, el::base::DispatchAction::SysLog, __VA_ARGS__)
+#  define CSYSLOG_EVERY_N(n, LEVEL, ...) C##LEVEL##_EVERY_N(el::base::Writer, n, el::base::DispatchAction::SysLog, __VA_ARGS__)
+#  define CSYSLOG_AFTER_N(n, LEVEL, ...) C##LEVEL##_AFTER_N(el::base::Writer, n, el::base::DispatchAction::SysLog, __VA_ARGS__)
+#  define CSYSLOG_N_TIMES(n, LEVEL, ...) C##LEVEL##_N_TIMES(el::base::Writer, n, el::base::DispatchAction::SysLog, __VA_ARGS__)
+#  define SYSLOG(LEVEL) CSYSLOG(LEVEL, el::base::consts::kSysLogLoggerId)
+#  define SYSLOG_IF(condition, LEVEL) CSYSLOG_IF(condition, LEVEL, el::base::consts::kSysLogLoggerId)
+#  define SYSLOG_EVERY_N(n, LEVEL) CSYSLOG_EVERY_N(n, LEVEL, el::base::consts::kSysLogLoggerId)
+#  define SYSLOG_AFTER_N(n, LEVEL) CSYSLOG_AFTER_N(n, LEVEL, el::base::consts::kSysLogLoggerId)
+#  define SYSLOG_N_TIMES(n, LEVEL) CSYSLOG_N_TIMES(n, LEVEL, el::base::consts::kSysLogLoggerId)
+#  define DCSYSLOG(LEVEL, ...) if (ELPP_DEBUG_LOG) C##LEVEL(el::base::Writer, el::base::DispatchAction::SysLog, __VA_ARGS__)
+#  define DCSYSLOG_IF(condition, LEVEL, ...)\
+C##LEVEL##_IF(el::base::Writer, (ELPP_DEBUG_LOG) && (condition), el::base::DispatchAction::SysLog, __VA_ARGS__)
+#  define DCSYSLOG_EVERY_N(n, LEVEL, ...)\
+if (ELPP_DEBUG_LOG) C##LEVEL##_EVERY_N(el::base::Writer, n, el::base::DispatchAction::SysLog, __VA_ARGS__)
+#  define DCSYSLOG_AFTER_N(n, LEVEL, ...)\
+if (ELPP_DEBUG_LOG) C##LEVEL##_AFTER_N(el::base::Writer, n, el::base::DispatchAction::SysLog, __VA_ARGS__)
+#  define DCSYSLOG_N_TIMES(n, LEVEL, ...)\
+if (ELPP_DEBUG_LOG) C##LEVEL##_EVERY_N(el::base::Writer, n, el::base::DispatchAction::SysLog, __VA_ARGS__)
+#  define DSYSLOG(LEVEL) DCSYSLOG(LEVEL, el::base::consts::kSysLogLoggerId)
+#  define DSYSLOG_IF(condition, LEVEL) DCSYSLOG_IF(condition, LEVEL, el::base::consts::kSysLogLoggerId)
+#  define DSYSLOG_EVERY_N(n, LEVEL) DCSYSLOG_EVERY_N(n, LEVEL, el::base::consts::kSysLogLoggerId)
+#  define DSYSLOG_AFTER_N(n, LEVEL) DCSYSLOG_AFTER_N(n, LEVEL, el::base::consts::kSysLogLoggerId)
+#  define DSYSLOG_N_TIMES(n, LEVEL) DCSYSLOG_N_TIMES(n, LEVEL, el::base::consts::kSysLogLoggerId)
+#else
+#  define CSYSLOG(LEVEL, ...) el::base::NullWriter()
+#  define CSYSLOG_IF(condition, LEVEL, ...) el::base::NullWriter()
+#  define CSYSLOG_EVERY_N(n, LEVEL, ...) el::base::NullWriter()
+#  define CSYSLOG_AFTER_N(n, LEVEL, ...) el::base::NullWriter()
+#  define CSYSLOG_N_TIMES(n, LEVEL, ...) el::base::NullWriter()
+#  define SYSLOG(LEVEL) el::base::NullWriter()
+#  define SYSLOG_IF(condition, LEVEL) el::base::NullWriter()
+#  define SYSLOG_EVERY_N(n, LEVEL) el::base::NullWriter()
+#  define SYSLOG_AFTER_N(n, LEVEL) el::base::NullWriter()
+#  define SYSLOG_N_TIMES(n, LEVEL) el::base::NullWriter()
+#  define DCSYSLOG(LEVEL, ...) el::base::NullWriter()
+#  define DCSYSLOG_IF(condition, LEVEL, ...) el::base::NullWriter()
+#  define DCSYSLOG_EVERY_N(n, LEVEL, ...) el::base::NullWriter()
+#  define DCSYSLOG_AFTER_N(n, LEVEL, ...) el::base::NullWriter()
+#  define DCSYSLOG_N_TIMES(n, LEVEL, ...) el::base::NullWriter()
+#  define DSYSLOG(LEVEL) el::base::NullWriter()
+#  define DSYSLOG_IF(condition, LEVEL) el::base::NullWriter()
+#  define DSYSLOG_EVERY_N(n, LEVEL) el::base::NullWriter()
+#  define DSYSLOG_AFTER_N(n, LEVEL) el::base::NullWriter()
+#  define DSYSLOG_N_TIMES(n, LEVEL) el::base::NullWriter()
+#endif  // defined(ELPP_SYSLOG)
+//
+// Custom Debug Only Loggers - Requires (level, loggerId/s)
+//
+// undef existing
+#undef DCLOG
+#undef DCVLOG
+#undef DCLOG_IF
+#undef DCVLOG_IF
+#undef DCLOG_EVERY_N
+#undef DCVLOG_EVERY_N
+#undef DCLOG_AFTER_N
+#undef DCVLOG_AFTER_N
+#undef DCLOG_N_TIMES
+#undef DCVLOG_N_TIMES
+// Normal logs
+#define DCLOG(LEVEL, ...) if (ELPP_DEBUG_LOG) CLOG(LEVEL, __VA_ARGS__)
+#define DCLOG_VERBOSE(vlevel, ...) if (ELPP_DEBUG_LOG) CLOG_VERBOSE(vlevel, __VA_ARGS__)
+#define DCVLOG(vlevel, ...) if (ELPP_DEBUG_LOG) CVLOG(vlevel, __VA_ARGS__)
+// Conditional logs
+#define DCLOG_IF(condition, LEVEL, ...) if (ELPP_DEBUG_LOG) CLOG_IF(condition, LEVEL, __VA_ARGS__)
+#define DCVLOG_IF(condition, vlevel, ...) if (ELPP_DEBUG_LOG) CVLOG_IF(condition, vlevel, __VA_ARGS__)
+// Hit counts based logs
+#define DCLOG_EVERY_N(n, LEVEL, ...) if (ELPP_DEBUG_LOG) CLOG_EVERY_N(n, LEVEL, __VA_ARGS__)
+#define DCVLOG_EVERY_N(n, vlevel, ...) if (ELPP_DEBUG_LOG) CVLOG_EVERY_N(n, vlevel, __VA_ARGS__)
+#define DCLOG_AFTER_N(n, LEVEL, ...) if (ELPP_DEBUG_LOG) CLOG_AFTER_N(n, LEVEL, __VA_ARGS__)
+#define DCVLOG_AFTER_N(n, vlevel, ...) if (ELPP_DEBUG_LOG) CVLOG_AFTER_N(n, vlevel, __VA_ARGS__)
+#define DCLOG_N_TIMES(n, LEVEL, ...) if (ELPP_DEBUG_LOG) CLOG_N_TIMES(n, LEVEL, __VA_ARGS__)
+#define DCVLOG_N_TIMES(n, vlevel, ...) if (ELPP_DEBUG_LOG) CVLOG_N_TIMES(n, vlevel, __VA_ARGS__)
+//
+// Default Debug Only Loggers macro using CLOG(), CLOG_VERBOSE() and CVLOG() macros
+//
+#if !defined(ELPP_NO_DEBUG_MACROS)
+// undef existing
+#undef DLOG
+#undef DVLOG
+#undef DLOG_IF
+#undef DVLOG_IF
+#undef DLOG_EVERY_N
+#undef DVLOG_EVERY_N
+#undef DLOG_AFTER_N
+#undef DVLOG_AFTER_N
+#undef DLOG_N_TIMES
+#undef DVLOG_N_TIMES
+// Normal logs
+#define DLOG(LEVEL) DCLOG(LEVEL, ELPP_CURR_FILE_LOGGER_ID)
+#define DVLOG(vlevel) DCVLOG(vlevel, ELPP_CURR_FILE_LOGGER_ID)
+// Conditional logs
+#define DLOG_IF(condition, LEVEL) DCLOG_IF(condition, LEVEL, ELPP_CURR_FILE_LOGGER_ID)
+#define DVLOG_IF(condition, vlevel) DCVLOG_IF(condition, vlevel, ELPP_CURR_FILE_LOGGER_ID)
+// Hit counts based logs
+#define DLOG_EVERY_N(n, LEVEL) DCLOG_EVERY_N(n, LEVEL, ELPP_CURR_FILE_LOGGER_ID)
+#define DVLOG_EVERY_N(n, vlevel) DCVLOG_EVERY_N(n, vlevel, ELPP_CURR_FILE_LOGGER_ID)
+#define DLOG_AFTER_N(n, LEVEL) DCLOG_AFTER_N(n, LEVEL, ELPP_CURR_FILE_LOGGER_ID)
+#define DVLOG_AFTER_N(n, vlevel) DCVLOG_AFTER_N(n, vlevel, ELPP_CURR_FILE_LOGGER_ID)
+#define DLOG_N_TIMES(n, LEVEL) DCLOG_N_TIMES(n, LEVEL, ELPP_CURR_FILE_LOGGER_ID)
+#define DVLOG_N_TIMES(n, vlevel) DCVLOG_N_TIMES(n, vlevel, ELPP_CURR_FILE_LOGGER_ID)
+#endif // defined(ELPP_NO_DEBUG_MACROS)
+#if !defined(ELPP_NO_CHECK_MACROS)
+// Check macros
+#undef CCHECK
+#undef CPCHECK
+#undef CCHECK_EQ
+#undef CCHECK_NE
+#undef CCHECK_LT
+#undef CCHECK_GT
+#undef CCHECK_LE
+#undef CCHECK_GE
+#undef CCHECK_BOUNDS
+#undef CCHECK_NOTNULL
+#undef CCHECK_STRCASEEQ
+#undef CCHECK_STRCASENE
+#undef CHECK
+#undef PCHECK
+#undef CHECK_EQ
+#undef CHECK_NE
+#undef CHECK_LT
+#undef CHECK_GT
+#undef CHECK_LE
+#undef CHECK_GE
+#undef CHECK_BOUNDS
+#undef CHECK_NOTNULL
+#undef CHECK_STRCASEEQ
+#undef CHECK_STRCASENE
+#define CCHECK(condition, ...) CLOG_IF(!(condition), FATAL, __VA_ARGS__) << "Check failed: [" << #condition << "] "
+#define CPCHECK(condition, ...) CPLOG_IF(!(condition), FATAL, __VA_ARGS__) << "Check failed: [" << #condition << "] "
+#define CHECK(condition) CCHECK(condition, ELPP_CURR_FILE_LOGGER_ID)
+#define PCHECK(condition) CPCHECK(condition, ELPP_CURR_FILE_LOGGER_ID)
+#define CCHECK_EQ(a, b, ...) CCHECK(a == b, __VA_ARGS__)
+#define CCHECK_NE(a, b, ...) CCHECK(a != b, __VA_ARGS__)
+#define CCHECK_LT(a, b, ...) CCHECK(a < b, __VA_ARGS__)
+#define CCHECK_GT(a, b, ...) CCHECK(a > b, __VA_ARGS__)
+#define CCHECK_LE(a, b, ...) CCHECK(a <= b, __VA_ARGS__)
+#define CCHECK_GE(a, b, ...) CCHECK(a >= b, __VA_ARGS__)
+#define CCHECK_BOUNDS(val, min, max, ...) CCHECK(val >= min && val <= max, __VA_ARGS__)
+#define CHECK_EQ(a, b) CCHECK_EQ(a, b, ELPP_CURR_FILE_LOGGER_ID)
+#define CHECK_NE(a, b) CCHECK_NE(a, b, ELPP_CURR_FILE_LOGGER_ID)
+#define CHECK_LT(a, b) CCHECK_LT(a, b, ELPP_CURR_FILE_LOGGER_ID)
+#define CHECK_GT(a, b) CCHECK_GT(a, b, ELPP_CURR_FILE_LOGGER_ID)
+#define CHECK_LE(a, b) CCHECK_LE(a, b, ELPP_CURR_FILE_LOGGER_ID)
+#define CHECK_GE(a, b) CCHECK_GE(a, b, ELPP_CURR_FILE_LOGGER_ID)
+#define CHECK_BOUNDS(val, min, max) CCHECK_BOUNDS(val, min, max, ELPP_CURR_FILE_LOGGER_ID)
+#define CCHECK_NOTNULL(ptr, ...) CCHECK((ptr) != nullptr, __VA_ARGS__)
+#define CCHECK_STREQ(str1, str2, ...) CLOG_IF(!el::base::utils::Str::cStringEq(str1, str2), FATAL, __VA_ARGS__) \
+<< "Check failed: [" << #str1 << " == " << #str2 << "] "
+#define CCHECK_STRNE(str1, str2, ...) CLOG_IF(el::base::utils::Str::cStringEq(str1, str2), FATAL, __VA_ARGS__) \
+<< "Check failed: [" << #str1 << " != " << #str2 << "] "
+#define CCHECK_STRCASEEQ(str1, str2, ...) CLOG_IF(!el::base::utils::Str::cStringCaseEq(str1, str2), FATAL, __VA_ARGS__) \
+<< "Check failed: [" << #str1 << " == " << #str2 << "] "
+#define CCHECK_STRCASENE(str1, str2, ...) CLOG_IF(el::base::utils::Str::cStringCaseEq(str1, str2), FATAL, __VA_ARGS__) \
+<< "Check failed: [" << #str1 << " != " << #str2 << "] "
+#define CHECK_NOTNULL(ptr) CCHECK_NOTNULL((ptr), ELPP_CURR_FILE_LOGGER_ID)
+#define CHECK_STREQ(str1, str2) CCHECK_STREQ(str1, str2, ELPP_CURR_FILE_LOGGER_ID)
+#define CHECK_STRNE(str1, str2) CCHECK_STRNE(str1, str2, ELPP_CURR_FILE_LOGGER_ID)
+#define CHECK_STRCASEEQ(str1, str2) CCHECK_STRCASEEQ(str1, str2, ELPP_CURR_FILE_LOGGER_ID)
+#define CHECK_STRCASENE(str1, str2) CCHECK_STRCASENE(str1, str2, ELPP_CURR_FILE_LOGGER_ID)
+#undef DCCHECK
+#undef DCCHECK_EQ
+#undef DCCHECK_NE
+#undef DCCHECK_LT
+#undef DCCHECK_GT
+#undef DCCHECK_LE
+#undef DCCHECK_GE
+#undef DCCHECK_BOUNDS
+#undef DCCHECK_NOTNULL
+#undef DCCHECK_STRCASEEQ
+#undef DCCHECK_STRCASENE
+#undef DCPCHECK
+#undef DCHECK
+#undef DCHECK_EQ
+#undef DCHECK_NE
+#undef DCHECK_LT
+#undef DCHECK_GT
+#undef DCHECK_LE
+#undef DCHECK_GE
+#undef DCHECK_BOUNDS_
+#undef DCHECK_NOTNULL
+#undef DCHECK_STRCASEEQ
+#undef DCHECK_STRCASENE
+#undef DPCHECK
+#define DCCHECK(condition, ...) if (ELPP_DEBUG_LOG) CCHECK(condition, __VA_ARGS__)
+#define DCCHECK_EQ(a, b, ...) if (ELPP_DEBUG_LOG) CCHECK_EQ(a, b, __VA_ARGS__)
+#define DCCHECK_NE(a, b, ...) if (ELPP_DEBUG_LOG) CCHECK_NE(a, b, __VA_ARGS__)
+#define DCCHECK_LT(a, b, ...) if (ELPP_DEBUG_LOG) CCHECK_LT(a, b, __VA_ARGS__)
+#define DCCHECK_GT(a, b, ...) if (ELPP_DEBUG_LOG) CCHECK_GT(a, b, __VA_ARGS__)
+#define DCCHECK_LE(a, b, ...) if (ELPP_DEBUG_LOG) CCHECK_LE(a, b, __VA_ARGS__)
+#define DCCHECK_GE(a, b, ...) if (ELPP_DEBUG_LOG) CCHECK_GE(a, b, __VA_ARGS__)
+#define DCCHECK_BOUNDS(val, min, max, ...) if (ELPP_DEBUG_LOG) CCHECK_BOUNDS(val, min, max, __VA_ARGS__)
+#define DCCHECK_NOTNULL(ptr, ...) if (ELPP_DEBUG_LOG) CCHECK_NOTNULL((ptr), __VA_ARGS__)
+#define DCCHECK_STREQ(str1, str2, ...) if (ELPP_DEBUG_LOG) CCHECK_STREQ(str1, str2, __VA_ARGS__)
+#define DCCHECK_STRNE(str1, str2, ...) if (ELPP_DEBUG_LOG) CCHECK_STRNE(str1, str2, __VA_ARGS__)
+#define DCCHECK_STRCASEEQ(str1, str2, ...) if (ELPP_DEBUG_LOG) CCHECK_STRCASEEQ(str1, str2, __VA_ARGS__)
+#define DCCHECK_STRCASENE(str1, str2, ...) if (ELPP_DEBUG_LOG) CCHECK_STRCASENE(str1, str2, __VA_ARGS__)
+#define DCPCHECK(condition, ...) if (ELPP_DEBUG_LOG) CPCHECK(condition, __VA_ARGS__)
+#define DCHECK(condition) DCCHECK(condition, ELPP_CURR_FILE_LOGGER_ID)
+#define DCHECK_EQ(a, b) DCCHECK_EQ(a, b, ELPP_CURR_FILE_LOGGER_ID)
+#define DCHECK_NE(a, b) DCCHECK_NE(a, b, ELPP_CURR_FILE_LOGGER_ID)
+#define DCHECK_LT(a, b) DCCHECK_LT(a, b, ELPP_CURR_FILE_LOGGER_ID)
+#define DCHECK_GT(a, b) DCCHECK_GT(a, b, ELPP_CURR_FILE_LOGGER_ID)
+#define DCHECK_LE(a, b) DCCHECK_LE(a, b, ELPP_CURR_FILE_LOGGER_ID)
+#define DCHECK_GE(a, b) DCCHECK_GE(a, b, ELPP_CURR_FILE_LOGGER_ID)
+#define DCHECK_BOUNDS(val, min, max) DCCHECK_BOUNDS(val, min, max, ELPP_CURR_FILE_LOGGER_ID)
+#define DCHECK_NOTNULL(ptr) DCCHECK_NOTNULL((ptr), ELPP_CURR_FILE_LOGGER_ID)
+#define DCHECK_STREQ(str1, str2) DCCHECK_STREQ(str1, str2, ELPP_CURR_FILE_LOGGER_ID)
+#define DCHECK_STRNE(str1, str2) DCCHECK_STRNE(str1, str2, ELPP_CURR_FILE_LOGGER_ID)
+#define DCHECK_STRCASEEQ(str1, str2) DCCHECK_STRCASEEQ(str1, str2, ELPP_CURR_FILE_LOGGER_ID)
+#define DCHECK_STRCASENE(str1, str2) DCCHECK_STRCASENE(str1, str2, ELPP_CURR_FILE_LOGGER_ID)
+#define DPCHECK(condition) DCPCHECK(condition, ELPP_CURR_FILE_LOGGER_ID)
+#endif // defined(ELPP_NO_CHECK_MACROS)
+#if defined(ELPP_DISABLE_DEFAULT_CRASH_HANDLING)
+#  define ELPP_USE_DEF_CRASH_HANDLER false
+#else
+#  define ELPP_USE_DEF_CRASH_HANDLER true
+#endif  // defined(ELPP_DISABLE_DEFAULT_CRASH_HANDLING)
+#define ELPP_CRASH_HANDLER_INIT
+#define ELPP_INIT_EASYLOGGINGPP(val) \
+namespace el { \
+namespace base { \
+el::base::type::StoragePointer elStorage(val); \
+} \
+el::base::debug::CrashHandler elCrashHandler(ELPP_USE_DEF_CRASH_HANDLER); \
+}
+
+#if ELPP_ASYNC_LOGGING
+#  define INITIALIZE_EASYLOGGINGPP ELPP_INIT_EASYLOGGINGPP(new el::base::Storage(el::LogBuilderPtr(new el::base::DefaultLogBuilder()),\
+new el::base::AsyncDispatchWorker()))
+#else
+#  define INITIALIZE_EASYLOGGINGPP ELPP_INIT_EASYLOGGINGPP(new el::base::Storage(el::LogBuilderPtr(new el::base::DefaultLogBuilder())))
+#endif  // ELPP_ASYNC_LOGGING
+#define INITIALIZE_NULL_EASYLOGGINGPP \
+namespace el {\
+namespace base {\
+el::base::type::StoragePointer elStorage;\
+}\
+el::base::debug::CrashHandler elCrashHandler(ELPP_USE_DEF_CRASH_HANDLER);\
+}
+#define SHARE_EASYLOGGINGPP(initializedStorage)\
+namespace el {\
+namespace base {\
+el::base::type::StoragePointer elStorage(initializedStorage);\
+}\
+el::base::debug::CrashHandler elCrashHandler(ELPP_USE_DEF_CRASH_HANDLER);\
+}
+
+#if defined(ELPP_UNICODE)
+#  define START_EASYLOGGINGPP(argc, argv) el::Helpers::setArgs(argc, argv); std::locale::global(std::locale(""))
+#else
+#  define START_EASYLOGGINGPP(argc, argv) el::Helpers::setArgs(argc, argv)
+#endif  // defined(ELPP_UNICODE)
+#endif // EASYLOGGINGPP_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/.gitignore b/vendor/github.com/muflihun/easyloggingpp/test/.gitignore
new file mode 100644
index 0000000..6a88a81
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/.gitignore
@@ -0,0 +1,2 @@
+bin/*
+logs/*
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/.travis_build.sh b/vendor/github.com/muflihun/easyloggingpp/test/.travis_build.sh
new file mode 100644
index 0000000..1b720db
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/.travis_build.sh
@@ -0,0 +1,8 @@
+echo "Compiling unit tests..."
+clang++ *.cc -lgtest -std=c++11 -lpthread -o unit_test -D_ELPP_DEFAULT_LOG_FILE='"logs/el.gtest.log"' -DELPP_LOGGING_FLAGS_FROM_ARG -DELPP_FEATURE_ALL -Wall -Wextra -pedantic -pedantic-errors -Werror -Wfatal-errors -Wundef -v
+echo "Running unit tests..."
+./unit_test -v
+result=$?
+rm -r unit_test logs
+echo "Unit tests completed : $result"
+exit $result
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/build_and_run.sh b/vendor/github.com/muflihun/easyloggingpp/test/build_and_run.sh
new file mode 100755
index 0000000..eefcb7a
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/build_and_run.sh
@@ -0,0 +1,10 @@
+
+# Builds all tests into bin/ and runs
+
+[ -d "bin" ] || mkdir "bin"
+
+cd bin
+echo "Building..."
+g++ ../*.cc -std=c++11 -pthread -lgtest -DELPP_NO_DEFAULT_LOG_FILE -DELPP_FEATURE_ALL -DELPP_LOGGING_FLAGS_FROM_ARG -Wall -Wextra -pedantic -pedantic-errors -Werror -Wfatal-errors -Wundef -o easyloggingpp-test && echo "Running..." && ./easyloggingpp-test -v
+cd ..
+echo "Completed!"
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/command-line-args-test.h b/vendor/github.com/muflihun/easyloggingpp/test/command-line-args-test.h
new file mode 100644
index 0000000..3efe5ca
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/command-line-args-test.h
@@ -0,0 +1,55 @@
+#ifndef COMMAND_LINE_ARGS_TEST_H
+#define COMMAND_LINE_ARGS_TEST_H
+
+#include "test.h"
+
+TEST(CommandLineArgsTest, SetArgs) {
+    const char* c[10];
+    c[0] = "myprog";
+    c[1] = "-arg1";
+    c[2] = "--arg2WithValue=1";
+    c[3] = "--arg3WithValue=something=some_other_thing";
+    c[4] = "-arg1"; // Shouldn't be added
+    c[5] = "--arg3WithValue=this_should_be_ignored_since_key_already_exist";
+    c[6] = "--arg4WithValue=this_should_Added";
+    c[7] = "\0";
+    CommandLineArgs cmd(7, c);
+    EXPECT_EQ(4, cmd.size());
+    EXPECT_FALSE(cmd.hasParamWithValue("-arg1"));
+    EXPECT_FALSE(cmd.hasParam("--arg2WithValue"));
+    EXPECT_FALSE(cmd.hasParam("--arg3WithValue"));
+    EXPECT_TRUE(cmd.hasParamWithValue("--arg2WithValue"));
+    EXPECT_TRUE(cmd.hasParamWithValue("--arg3WithValue"));
+    EXPECT_TRUE(cmd.hasParam("-arg1"));
+    EXPECT_STRCASEEQ(cmd.getParamValue("--arg2WithValue"), "1");
+    EXPECT_STRCASEEQ(cmd.getParamValue("--arg3WithValue"), "something=some_other_thing");
+    EXPECT_STRCASEEQ(cmd.getParamValue("--arg4WithValue"), "this_should_Added");
+}
+
+TEST(CommandLineArgsTest, LoggingFlagsArg) {
+    const char* c[3];
+    c[0] = "myprog";
+    c[1] = "--logging-flags=5"; // NewLineForContainer & LogDetailedCrashReason (1 & 4)
+    c[2] = "\0";
+
+    unsigned short currFlags = ELPP->flags(); // For resetting after test
+	
+    EXPECT_FALSE(Loggers::hasFlag(LoggingFlag::NewLineForContainer));
+    EXPECT_FALSE(Loggers::hasFlag(LoggingFlag::LogDetailedCrashReason));
+
+    Helpers::setArgs(2, c);
+
+    EXPECT_TRUE(Loggers::hasFlag(LoggingFlag::NewLineForContainer));
+    EXPECT_TRUE(Loggers::hasFlag(LoggingFlag::LogDetailedCrashReason));
+
+    // Reset to original state
+    std::stringstream resetter;
+    resetter << "--logging-flags=" << currFlags;
+    c[1] = resetter.str().c_str();
+    Helpers::setArgs(2, c);
+    EXPECT_FALSE(Loggers::hasFlag(LoggingFlag::NewLineForContainer));
+    EXPECT_FALSE(Loggers::hasFlag(LoggingFlag::LogDetailedCrashReason));
+
+}
+
+#endif // COMMAND_LINE_ARGS_TEST_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/configurations-test.h b/vendor/github.com/muflihun/easyloggingpp/test/configurations-test.h
new file mode 100644
index 0000000..bc2054a
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/configurations-test.h
@@ -0,0 +1,142 @@
+#ifndef CONFIGURATIONS_TEST_H_
+#define CONFIGURATIONS_TEST_H_
+
+#include "test.h"
+
+TEST(ConfigurationsTest, Set) {
+    Configurations c;
+    c.set(Level::Info, el::ConfigurationType::Enabled, "true");
+    c.set(Level::Info, el::ConfigurationType::Enabled, "true");
+    EXPECT_EQ(c.size(), 1);
+    Configurations c2;
+    c2 = c;
+    c2.set(Level::Info, el::ConfigurationType::Enabled, "false");
+    EXPECT_EQ(c.get(Level::Info, el::ConfigurationType::Enabled)->value(), "true");
+    EXPECT_EQ(c2.get(Level::Info, el::ConfigurationType::Enabled)->value(), "false");
+    EXPECT_EQ(c2.size(), 1);
+}
+
+TEST(ConfigurationsTest, HasConfiguration) {
+    Configurations c;
+    c.set(Level::Info, el::ConfigurationType::Enabled, "true");
+    c.set(Level::Debug, el::ConfigurationType::Enabled, "false");
+    c.set(Level::Info, el::ConfigurationType::Format, "%level: %msg");
+
+    EXPECT_TRUE(c.hasConfiguration(ConfigurationType::Enabled));
+    EXPECT_TRUE(c.hasConfiguration(ConfigurationType::Format));
+    EXPECT_FALSE(c.hasConfiguration(ConfigurationType::Filename));
+    EXPECT_FALSE(c.hasConfiguration(ConfigurationType::MaxLogFileSize));
+
+    EXPECT_TRUE(c.hasConfiguration(Level::Debug, ConfigurationType::Enabled));
+    EXPECT_FALSE(c.hasConfiguration(Level::Verbose, ConfigurationType::Format));
+}
+
+TEST(ConfigurationsTest, SetForAllLevels) {
+    Configurations c;
+    c.setGlobally(el::ConfigurationType::Enabled, "true");
+    EXPECT_FALSE(c.hasConfiguration(Level::Global, ConfigurationType::Enabled));
+    EXPECT_TRUE(c.hasConfiguration(Level::Debug, ConfigurationType::Enabled));
+    EXPECT_TRUE(c.hasConfiguration(Level::Info, ConfigurationType::Enabled));
+    EXPECT_TRUE(c.hasConfiguration(Level::Warning, ConfigurationType::Enabled));
+    EXPECT_TRUE(c.hasConfiguration(Level::Error, ConfigurationType::Enabled));
+    EXPECT_TRUE(c.hasConfiguration(Level::Fatal, ConfigurationType::Enabled));
+    EXPECT_TRUE(c.hasConfiguration(Level::Verbose, ConfigurationType::Enabled));
+    EXPECT_TRUE(c.hasConfiguration(Level::Trace, ConfigurationType::Enabled));
+}
+
+TEST(ConfigurationsTest, ParsingFromFile) {
+    std::fstream confFile("/tmp/temp-test.conf", std::fstream::out);
+    confFile << " * GLOBAL:\n"
+    << "    FORMAT               =  %datetime %level %msg\n"
+    << "* INFO:\n"
+    // Following should be included in format because its inside the quotes
+    << "    FORMAT               =  \"%datetime %level [%user@%host] [%func] [%loc] %msg## This should be included in format\" ## This should be excluded\n"
+    << "* DEBUG:\n"
+    << "    FORMAT               =  %datetime %level [%user@%host] [%func] [%loc] %msg ## Comment before EOL char\n"
+    << "## Comment on empty line\n"
+    // WARNING is defined by GLOBAL
+    << "* ERROR:\n"
+    << "    FORMAT               =  %datetime %level %msg\n"
+    << "* FATAL:\n"
+    << "    FORMAT               =  %datetime %level %msg\n"
+    << "* VERBOSE:\n"
+    << "    FORMAT               =  %datetime %level-%vlevel %msg\n"
+    << "* TRACE:\n"
+    << "    FORMAT               =  %datetime %level [%func] [%loc] %msg\n";
+    confFile.close();
+
+    Configurations c("/tmp/temp-test.conf", false, nullptr);
+    EXPECT_FALSE(c.hasConfiguration(Level::Debug, ConfigurationType::Enabled));
+    EXPECT_FALSE(c.hasConfiguration(Level::Global, ConfigurationType::Enabled));
+    EXPECT_TRUE(c.hasConfiguration(Level::Global, ConfigurationType::Format));
+    EXPECT_TRUE(c.hasConfiguration(Level::Info, ConfigurationType::Format));
+    EXPECT_EQ("%datetime %level %msg", c.get(Level::Global, ConfigurationType::Format)->value());
+    EXPECT_EQ("%datetime %level [%user@%host] [%func] [%loc] %msg## This should be included in format", c.get(Level::Info, ConfigurationType::Format)->value());
+    EXPECT_EQ("%datetime %level [%user@%host] [%func] [%loc] %msg", c.get(Level::Debug, ConfigurationType::Format)->value());
+    EXPECT_EQ("%datetime %level %msg", c.get(Level::Warning, ConfigurationType::Format)->value());
+    EXPECT_EQ("%datetime %level %msg", c.get(Level::Error, ConfigurationType::Format)->value());
+    EXPECT_EQ("%datetime %level %msg", c.get(Level::Fatal, ConfigurationType::Format)->value());
+    EXPECT_EQ("%datetime %level-%vlevel %msg", c.get(Level::Verbose, ConfigurationType::Format)->value());
+    EXPECT_EQ("%datetime %level [%func] [%loc] %msg", c.get(Level::Trace, ConfigurationType::Format)->value());
+}
+
+TEST(ConfigurationsTest, ParsingFromText) {
+    std::stringstream ss;
+    ss << " * GLOBAL:\n"
+    << "    FORMAT               =  %datetime{%d/%M/%Y %h:%m:%s,%g} %level %msg\n"
+    << "* DEBUG:\n"
+    << "    FORMAT               =  %datetime %level [%user@%host] [%func] [%loc] %msg\n"
+    // INFO and WARNING uses is defined by GLOBAL
+    << "* ERROR:\n"
+    << "    FORMAT               =  %datetime %level %msg\n"
+    << "* FATAL:\n"
+    << "    FORMAT               =  %datetime %level %msg\n"
+    << "* VERBOSE:\n"
+    << "    FORMAT               =  %datetime %level-%vlevel %msg\n"
+    << "* TRACE:\n"
+    << "    FORMAT               =  %datetime %level [%func] [%loc] %msg\n";
+
+    Configurations c;
+    c.parseFromText(ss.str());
+    EXPECT_FALSE(c.hasConfiguration(Level::Debug, ConfigurationType::Enabled));
+    EXPECT_FALSE(c.hasConfiguration(Level::Global, ConfigurationType::Enabled));
+    EXPECT_TRUE(c.hasConfiguration(Level::Global, ConfigurationType::Format));
+    EXPECT_TRUE(c.hasConfiguration(Level::Info, ConfigurationType::Format));
+    EXPECT_EQ("%datetime{%d/%M/%Y %h:%m:%s,%g} %level %msg", c.get(Level::Global, ConfigurationType::Format)->value());
+    EXPECT_EQ("%datetime{%d/%M/%Y %h:%m:%s,%g} %level %msg", c.get(Level::Info, ConfigurationType::Format)->value());
+    EXPECT_EQ("%datetime{%d/%M/%Y %h:%m:%s,%g} %level %msg", c.get(Level::Warning, ConfigurationType::Format)->value());
+    EXPECT_EQ("%datetime %level [%user@%host] [%func] [%loc] %msg", c.get(Level::Debug, ConfigurationType::Format)->value());
+    EXPECT_EQ("%datetime %level %msg", c.get(Level::Error, ConfigurationType::Format)->value());
+    EXPECT_EQ("%datetime %level %msg", c.get(Level::Fatal, ConfigurationType::Format)->value());
+    EXPECT_EQ("%datetime %level-%vlevel %msg", c.get(Level::Verbose, ConfigurationType::Format)->value());
+    EXPECT_EQ("%datetime %level [%func] [%loc] %msg", c.get(Level::Trace, ConfigurationType::Format)->value());
+}
+
+TEST(ConfigurationsTest, ParsingFromTextWithEscape) {
+    std::stringstream ss;
+    ss << " * GLOBAL:\n"
+    << "    FORMAT               =  %datetime{%d/%M/%Y %h:%m:%s,%g} %level %msg\n"
+    << "* DEBUG:\n"
+    << "    FORMAT               =  \"%datetime %level [%user@%host] [%func] [%loc] \\\"inside quotes\\\" %msg\"\n"
+    // INFO and WARNING uses is defined by GLOBAL
+    << "* ERROR:\n"
+    << "    FORMAT               =  \"%datetime %level \\\"##hash##\\\" %msg\"\n"
+    << "* FATAL:\n"
+    << "    FORMAT               =  %datetime %level ## Comment out log format specifier temporarily %msg\n"
+    << "* VERBOSE:\n"
+    << "    FORMAT               =  %datetime %level-%vlevel %msg\n"
+    << "* TRACE:\n"
+    << "    FORMAT               =  %datetime %level [%func] [%loc] %msg\n";
+
+    Configurations c;
+    c.parseFromText(ss.str());
+    EXPECT_EQ("%datetime{%d/%M/%Y %h:%m:%s,%g} %level %msg", c.get(Level::Global, ConfigurationType::Format)->value());
+    EXPECT_EQ("%datetime{%d/%M/%Y %h:%m:%s,%g} %level %msg", c.get(Level::Info, ConfigurationType::Format)->value());
+    EXPECT_EQ("%datetime{%d/%M/%Y %h:%m:%s,%g} %level %msg", c.get(Level::Warning, ConfigurationType::Format)->value());
+    EXPECT_EQ("%datetime %level [%user@%host] [%func] [%loc] \"inside quotes\" %msg", c.get(Level::Debug, ConfigurationType::Format)->value());
+    EXPECT_EQ("%datetime %level \"##hash##\" %msg", c.get(Level::Error, ConfigurationType::Format)->value());
+    EXPECT_EQ("%datetime %level", c.get(Level::Fatal, ConfigurationType::Format)->value());
+    EXPECT_EQ("%datetime %level-%vlevel %msg", c.get(Level::Verbose, ConfigurationType::Format)->value());
+    EXPECT_EQ("%datetime %level [%func] [%loc] %msg", c.get(Level::Trace, ConfigurationType::Format)->value());
+}
+#endif // CONFIGURATIONS_TEST_H_
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/custom-format-specifier-test.h b/vendor/github.com/muflihun/easyloggingpp/test/custom-format-specifier-test.h
new file mode 100644
index 0000000..ee8996b
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/custom-format-specifier-test.h
@@ -0,0 +1,33 @@
+#ifndef CUSTOM_FORMAT_SPECIFIER_TEST_H
+#define CUSTOM_FORMAT_SPECIFIER_TEST_H
+
+#include "test.h"
+
+const char* getIp(const el::LogMessage*) {
+    return "127.0.0.1";
+}
+
+TEST(CustomFormatSpecifierTest, TestInstall) {
+    EXPECT_FALSE(el::Helpers::hasCustomFormatSpecifier("%ip"));
+    el::Helpers::installCustomFormatSpecifier(el::CustomFormatSpecifier("%ip", getIp));
+    EXPECT_TRUE(el::Helpers::hasCustomFormatSpecifier("%ip"));
+}
+
+TEST(CustomFormatSpecifierTest, TestResolution) {
+    Configurations c;
+    c.setGlobally(el::ConfigurationType::Format, "%datetime{%a %b %d, %H:%m} %ip: %msg");
+    el::Loggers::reconfigureLogger(consts::kDefaultLoggerId, c);
+    LOG(INFO) << "My ip test";
+    std::string s = BUILD_STR(getDate() << " 127.0.0.1: My ip test\n");
+    EXPECT_EQ(s, tail(1));
+    // Reset back
+    reconfigureLoggersForTest();
+}
+
+TEST(CustomFormatSpecifierTest, TestUnInstall) {
+    EXPECT_TRUE(el::Helpers::hasCustomFormatSpecifier("%ip"));
+    el::Helpers::uninstallCustomFormatSpecifier("%ip");
+    EXPECT_FALSE(el::Helpers::hasCustomFormatSpecifier("%ip"));
+}
+
+#endif // CUSTOM_FORMAT_SPECIFIER_TEST_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/date-utils-test.h b/vendor/github.com/muflihun/easyloggingpp/test/date-utils-test.h
new file mode 100644
index 0000000..c243731
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/date-utils-test.h
@@ -0,0 +1,59 @@
+
+#ifndef DATE_UTILS_TEST_H_
+#define DATE_UTILS_TEST_H_
+
+#include "test.h"
+
+#include <thread>
+#include <chrono>
+
+
+TEST(DateUtilsTest, TimeFormatTest) {
+    auto f = [](unsigned long long v) {
+        return DateTime::formatTime(v, base::TimestampUnit::Millisecond);
+    };
+
+    ASSERT_EQ("2 ms", f(2));
+    ASSERT_EQ("999 ms", f(999));
+    ASSERT_EQ("1007 ms", f(1007));
+    ASSERT_EQ("1899 ms", f(1899));
+    ASSERT_EQ("1 seconds", f(1999));
+    ASSERT_EQ("16 minutes", f(999000));
+    ASSERT_EQ("24 hours", f(1 * 24 * 60 * 60 * 1000));
+    ASSERT_EQ("2 days", f(2 * 24 * 60 * 60 * 1000));
+    ASSERT_EQ("7 days", f(7 * 24 * 60 * 60 * 1000));
+    ASSERT_EQ("15 days", f(15 * 24 * 60 * 60 * 1000));
+}
+
+TEST(DateUtilsTest, PerformanceTrackerTest) {
+    {
+        TIMED_SCOPE(timer, "1200 milliseconds wait");
+        std::this_thread::sleep_for(std::chrono::milliseconds(1200));
+    }
+    {
+        TIMED_SCOPE(timer, "20 milliseconds wait");
+        std::this_thread::sleep_for(std::chrono::milliseconds(20));
+    }
+    {
+        TIMED_SCOPE(timer, "20 microseconds wait");
+        std::this_thread::sleep_for(std::chrono::microseconds(20));
+    }
+    {
+        TIMED_SCOPE(timer, "886 milliseconds wait");
+        std::this_thread::sleep_for(std::chrono::milliseconds(886));
+    }
+    {
+        TIMED_SCOPE(timer, "1500 milliseconds wait");
+        std::this_thread::sleep_for(std::chrono::milliseconds(1500));
+    }
+    {
+        TIMED_SCOPE(timer, "1400 milliseconds wait");
+        std::this_thread::sleep_for(std::chrono::milliseconds(1400));
+    }
+    {
+        TIMED_SCOPE(timer, "1600 milliseconds wait");
+        std::this_thread::sleep_for(std::chrono::milliseconds(1600));
+    }
+}
+
+#endif // DATE_UTILS_TEST_H_
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/easylogging++.cc b/vendor/github.com/muflihun/easyloggingpp/test/easylogging++.cc
new file mode 100644
index 0000000..da11a23
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/easylogging++.cc
@@ -0,0 +1 @@
+#include "../src/easylogging++.cc"
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/easylogging++.h b/vendor/github.com/muflihun/easyloggingpp/test/easylogging++.h
new file mode 100644
index 0000000..f602c86
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/easylogging++.h
@@ -0,0 +1,13 @@
+// Header for test that sub-includes original header from src/ folder
+#ifndef EASYLOGGING_FOR_TEST_H
+#define EASYLOGGING_FOR_TEST_H
+
+// We define these macros here for travis to pick up
+#define ELPP_STOP_ON_FIRST_ASSERTION
+#define ELPP_STL_LOGGING
+#define ELPP_FORCE_ENV_VAR_FROM_BASH
+#define ELPP_ENABLE_THREADING
+#define ELPP_FEATURE_CRASH_LOG
+#define ELPP_SYSLOG
+#include "../src/easylogging++.h"
+#endif // EASYLOGGING_FOR_SAMPLES_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/enum-helper-test.h b/vendor/github.com/muflihun/easyloggingpp/test/enum-helper-test.h
new file mode 100644
index 0000000..fb102ab
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/enum-helper-test.h
@@ -0,0 +1,51 @@
+#ifndef ENUM_HELPER_TESTS_H
+#define ENUM_HELPER_TESTS_H
+#include "test.h"
+
+TEST(LevelTest, ConvertFromString) {
+    EXPECT_EQ(Level::Global, LevelHelper::convertFromString("GLOBAL"));
+    EXPECT_EQ(Level::Info, LevelHelper::convertFromString("INFO"));
+    EXPECT_EQ(Level::Debug, LevelHelper::convertFromString("DEBUG"));
+    EXPECT_EQ(Level::Warning, LevelHelper::convertFromString("WARNING"));
+    EXPECT_EQ(Level::Error, LevelHelper::convertFromString("ERROR"));
+    EXPECT_EQ(Level::Fatal, LevelHelper::convertFromString("FATAL"));
+    EXPECT_EQ(Level::Trace, LevelHelper::convertFromString("TRACE"));
+    EXPECT_EQ(Level::Verbose, LevelHelper::convertFromString("VERBOSE"));
+    EXPECT_EQ(Level::Unknown, LevelHelper::convertFromString("QA"));
+}
+
+TEST(LevelTest, ConvertToString) {
+    EXPECT_STRCASEEQ("GLOBAL", LevelHelper::convertToString(Level::Global));
+    EXPECT_STRCASEEQ("INFO", LevelHelper::convertToString(Level::Info));
+    EXPECT_STRCASEEQ("DEBUG", LevelHelper::convertToString(Level::Debug));
+    EXPECT_STRCASEEQ("WARNING", LevelHelper::convertToString(Level::Warning));
+    EXPECT_STRCASEEQ("ERROR", LevelHelper::convertToString(Level::Error));
+    EXPECT_STRCASEEQ("FATAL", LevelHelper::convertToString(Level::Fatal));
+    EXPECT_STRCASEEQ("TRACE", LevelHelper::convertToString(Level::Trace));
+    EXPECT_STRCASEEQ("VERBOSE", LevelHelper::convertToString(Level::Verbose));
+}
+
+TEST(ConfigurationTypeTest, ConvertFromString) {
+    EXPECT_EQ(ConfigurationType::Enabled, ConfigurationTypeHelper::convertFromString("ENABLED"));
+    EXPECT_EQ(ConfigurationType::ToFile, ConfigurationTypeHelper::convertFromString("TO_FILE"));
+    EXPECT_EQ(ConfigurationType::ToStandardOutput, ConfigurationTypeHelper::convertFromString("TO_STANDARD_OUTPUT"));
+    EXPECT_EQ(ConfigurationType::Format, ConfigurationTypeHelper::convertFromString("FORMAT"));
+    EXPECT_EQ(ConfigurationType::Filename, ConfigurationTypeHelper::convertFromString("FILENAME"));
+    EXPECT_EQ(ConfigurationType::SubsecondPrecision, ConfigurationTypeHelper::convertFromString("SUBSECOND_PRECISION"));
+    EXPECT_EQ(ConfigurationType::PerformanceTracking, ConfigurationTypeHelper::convertFromString("PERFORMANCE_TRACKING"));
+    EXPECT_EQ(ConfigurationType::MaxLogFileSize, ConfigurationTypeHelper::convertFromString("MAX_LOG_FILE_SIZE"));
+    EXPECT_EQ(ConfigurationType::LogFlushThreshold, ConfigurationTypeHelper::convertFromString("LOG_FLUSH_THRESHOLD"));
+}
+
+TEST(ConfigurationTypeTest, ConvertToString) {
+    EXPECT_STRCASEEQ("ENABLED", ConfigurationTypeHelper::convertToString(ConfigurationType::Enabled));
+    EXPECT_STRCASEEQ("TO_FILE", ConfigurationTypeHelper::convertToString(ConfigurationType::ToFile));
+    EXPECT_STRCASEEQ("TO_STANDARD_OUTPUT", ConfigurationTypeHelper::convertToString(ConfigurationType::ToStandardOutput));
+    EXPECT_STRCASEEQ("FORMAT", ConfigurationTypeHelper::convertToString(ConfigurationType::Format));
+    EXPECT_STRCASEEQ("FILENAME", ConfigurationTypeHelper::convertToString(ConfigurationType::Filename));
+    EXPECT_STRCASEEQ("SUBSECOND_PRECISION", ConfigurationTypeHelper::convertToString(ConfigurationType::SubsecondPrecision));
+    EXPECT_STRCASEEQ("PERFORMANCE_TRACKING", ConfigurationTypeHelper::convertToString(ConfigurationType::PerformanceTracking));
+    EXPECT_STRCASEEQ("MAX_LOG_FILE_SIZE", ConfigurationTypeHelper::convertToString(ConfigurationType::MaxLogFileSize));
+    EXPECT_STRCASEEQ("LOG_FLUSH_THRESHOLD", ConfigurationTypeHelper::convertToString(ConfigurationType::LogFlushThreshold));
+}
+#endif // ENUM_HELPER_TESTS_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/file-utils-test.h b/vendor/github.com/muflihun/easyloggingpp/test/file-utils-test.h
new file mode 100644
index 0000000..0c565f6
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/file-utils-test.h
@@ -0,0 +1,59 @@
+#ifndef FILE_UTILS_TEST_H
+#define FILE_UTILS_TEST_H
+
+#include "test.h"
+
+static const char* filename = "/tmp/files_utils_test";
+static el::base::type::fstream_t* fs;
+
+TEST(FileUtilsTest, NewFileStream) {
+    fs = File::newFileStream(filename);
+    EXPECT_NE(nullptr, fs);
+    EXPECT_TRUE(fs->is_open());
+    cleanFile(filename, fs);
+}
+
+TEST(FileUtilsTest, GetSizeOfFile) {
+    EXPECT_EQ(File::getSizeOfFile(fs), 0);
+    const char* data = "123";
+    (*fs) << data;
+    fs->flush();
+    EXPECT_EQ(File::getSizeOfFile(fs), strlen(data));
+}
+
+TEST(FileUtilsTest, PathExists) {
+    EXPECT_TRUE(File::pathExists(filename));
+    removeFile(filename);
+    EXPECT_FALSE(File::pathExists(filename));
+}
+
+TEST(FileUtilsTest, ExtractPathFromFilename) {
+    EXPECT_EQ("/this/is/path/on/unix/", File::extractPathFromFilename("/this/is/path/on/unix/file.txt"));
+    EXPECT_EQ("C:\\this\\is\\path\\on\\win\\", File::extractPathFromFilename("C:\\this\\is\\path\\on\\win\\file.txt", "\\"));
+}
+
+TEST(FileUtilsTest, CreatePath) {
+    const char* path = "/tmp/my/one/long/path";
+    EXPECT_FALSE(File::pathExists(path));
+    EXPECT_TRUE(File::createPath(path));
+    EXPECT_TRUE(File::pathExists(path));
+    removeFile(path);
+    EXPECT_FALSE(File::pathExists(path));
+}
+
+
+TEST(FileUtilsTest, BuildStrippedFilename) {
+
+    char buf[50] = "";
+
+    File::buildStrippedFilename("this_is_myfile.cc", buf, 50);
+    EXPECT_STREQ("this_is_myfile.cc", buf);
+
+    Str::clearBuff(buf, 20);
+    EXPECT_STREQ("", buf);
+
+    File::buildStrippedFilename("this_is_myfilename_with_more_than_50_characters.cc", buf, 50);
+    EXPECT_STREQ("..s_is_myfilename_with_more_than_50_characters.cc", buf);
+}
+
+#endif // FILE_UTILS_TEST_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/format-specifier-test.h b/vendor/github.com/muflihun/easyloggingpp/test/format-specifier-test.h
new file mode 100644
index 0000000..8f217b0
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/format-specifier-test.h
@@ -0,0 +1,86 @@
+#ifndef FORMAT_SPECIFIER_TEST_H
+#define FORMAT_SPECIFIER_TEST_H
+
+#include "test.h"
+
+TEST(FormatSpecifierTest, TestFBaseSpecifier) {
+    Configurations c;
+    c.setGlobally(el::ConfigurationType::Format, "%datetime{%a %b %d, %H:%m} %fbase: %msg");
+    el::Loggers::reconfigureLogger(consts::kDefaultLoggerId, c);
+    LOG(INFO) << "My fbase test";
+    std::string s = BUILD_STR(getDate() << " format-specifier-test.h: My fbase test\n");
+    EXPECT_EQ(s, tail(1));
+    // Reset back
+    reconfigureLoggersForTest();
+}
+
+TEST(FormatSpecifierTest, TestLevShortSpecifier) {
+    const char* param[10];
+    param[0] = "myprog";
+    param[1] = "--v=5";
+    param[2] = "\0";
+    el::Helpers::setArgs(2, param);
+
+
+    // Regression origional %level still correct
+    Configurations c;
+    c.setGlobally(el::ConfigurationType::Format, "%level %msg");
+    c.set(el::Level::Verbose, el::ConfigurationType::Format, "%level-%vlevel %msg");
+    el::Loggers::reconfigureLogger(consts::kDefaultLoggerId, c);
+    {
+        std::string levelINFO  = "INFO hello world\n";
+        std::string levelDEBUG = "DEBUG hello world\n";
+        std::string levelWARN  = "WARNING hello world\n";
+        std::string levelERROR = "ERROR hello world\n";
+        std::string levelFATAL = "FATAL hello world\n";
+        std::string levelVER   = "VERBOSE-2 hello world\n";
+        std::string levelTRACE = "TRACE hello world\n";
+        LOG(INFO) << "hello world";
+        EXPECT_EQ(levelINFO, tail(1));
+        LOG(DEBUG) << "hello world";
+        EXPECT_EQ(levelDEBUG, tail(1));
+        LOG(WARNING) << "hello world";
+        EXPECT_EQ(levelWARN, tail(1));
+        LOG(ERROR) << "hello world";
+        EXPECT_EQ(levelERROR, tail(1));
+        LOG(FATAL) << "hello world";
+        EXPECT_EQ(levelFATAL, tail(1));
+        VLOG(2) << "hello world";
+        EXPECT_EQ(levelVER, tail(1));
+        LOG(TRACE) << "hello world";
+        EXPECT_EQ(levelTRACE, tail(1));
+    }
+
+    // Test %levshort new specifier
+    c.setGlobally(el::ConfigurationType::Format, "%levshort  %msg");
+    c.set(el::Level::Verbose, el::ConfigurationType::Format, "%levshort%vlevel %msg");
+    el::Loggers::reconfigureLogger(consts::kDefaultLoggerId, c);
+    {
+        std::string levelINFO  = "I  hello world\n";
+        std::string levelDEBUG = "D  hello world\n";
+        std::string levelWARN  = "W  hello world\n";
+        std::string levelERROR = "E  hello world\n";
+        std::string levelFATAL = "F  hello world\n";
+        std::string levelVER   = "V2 hello world\n";
+        std::string levelTRACE = "T  hello world\n";
+        LOG(INFO) << "hello world";
+        EXPECT_EQ(levelINFO, tail(1));
+        LOG(DEBUG) << "hello world";
+        EXPECT_EQ(levelDEBUG, tail(1));
+        LOG(WARNING) << "hello world";
+        EXPECT_EQ(levelWARN, tail(1));
+        LOG(ERROR) << "hello world";
+        EXPECT_EQ(levelERROR, tail(1));
+        LOG(FATAL) << "hello world";
+        EXPECT_EQ(levelFATAL, tail(1));
+        VLOG(2) << "hello world";
+        EXPECT_EQ(levelVER, tail(1));
+        LOG(TRACE) << "hello world";
+        EXPECT_EQ(levelTRACE, tail(1));
+    }
+
+    // Reset back
+    reconfigureLoggersForTest();
+}
+
+#endif // FORMAT_SPECIFIER_TEST_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/global-configurations-test.h b/vendor/github.com/muflihun/easyloggingpp/test/global-configurations-test.h
new file mode 100644
index 0000000..5d9c048
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/global-configurations-test.h
@@ -0,0 +1,55 @@
+#ifndef GLOBAL_CONFIGURATIONS_TEST_H_
+#define GLOBAL_CONFIGURATIONS_TEST_H_
+
+#include "test.h"
+
+TEST(GlobalConfigurationTest, Parse) {
+    const char* globalConfFile = "/tmp/global-conf-test.conf";
+    std::fstream confFile(globalConfFile, std::fstream::out);
+    confFile
+    << "-- performance\n"
+    << "    ## This just skips configuring performance logger any more.\n"
+    << "-- global-test-logger\n"
+    << "* GLOBAL:\n"
+    << "    FORMAT               =  GLOBAL_TEST\n"
+    << "* INFO:\n"
+    // Following should be included in format because its inside the quotes
+    << "* DEBUG:\n"
+    << "    FORMAT               =  %datetime %level [%user@%host] [%func] [%loc] %msg ## Comment before EOL char\n"
+    << "## Comment on empty line\n"
+    // WARNING is defined by GLOBAL
+    << "* ERROR:\n"
+    << "    FORMAT               =  %datetime %level %msg\n"
+    << "* FATAL:\n"
+    << "    FORMAT               =  %datetime %level %msg\n"
+    << "* VERBOSE:\n"
+    << "    FORMAT               =  %datetime %level-%vlevel %msg\n"
+    << "* TRACE:\n"
+    << "    FORMAT               =  %datetime %level [%func] [%loc] %msg\n";
+    confFile.close();
+
+    Logger* perfLogger = Loggers::getLogger("performance", false);
+    CHECK_NOTNULL(perfLogger);
+
+    std::string perfFormatConf = perfLogger->configurations()->get(Level::Info, ConfigurationType::Format)->value();
+    std::string perfFilenameConf = perfLogger->configurations()->get(Level::Info, ConfigurationType::Filename)->value();
+    std::size_t totalLoggers = elStorage->registeredLoggers()->size();
+
+    EXPECT_EQ(Loggers::getLogger("global-test-logger", false), nullptr);
+
+    Loggers::configureFromGlobal(globalConfFile);
+
+    EXPECT_EQ(totalLoggers + 1, elStorage->registeredLoggers()->size());
+    EXPECT_EQ(perfFormatConf, perfLogger->configurations()->get(Level::Info, ConfigurationType::Format)->value());
+    EXPECT_EQ(perfFilenameConf, perfLogger->configurations()->get(Level::Info, ConfigurationType::Filename)->value());
+
+    // Not nullptr anymore
+    Logger* testLogger = Loggers::getLogger("global-test-logger", false);
+    EXPECT_NE(testLogger, nullptr);
+
+    EXPECT_EQ("GLOBAL_TEST", testLogger->configurations()->get(Level::Info, ConfigurationType::Format)->value());
+    EXPECT_EQ("%datetime %level [%user@%host] [%func] [%loc] %msg", testLogger->configurations()->get(Level::Debug, ConfigurationType::Format)->value());
+
+}
+
+#endif // GLOBAL_CONFIGURATIONS_TEST_H_
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/helpers-test.h b/vendor/github.com/muflihun/easyloggingpp/test/helpers-test.h
new file mode 100644
index 0000000..880f33a
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/helpers-test.h
@@ -0,0 +1,18 @@
+
+#ifndef HELPERS_TEST_H_
+#define HELPERS_TEST_H_
+
+#include "test.h"
+#include <vector>
+
+TEST(HelpersTest, ConvertTemplateToStdString) {
+    std::vector<int> vecInt;
+    vecInt.push_back(1);
+    vecInt.push_back(2);
+    vecInt.push_back(3);
+    vecInt.push_back(4);
+    std::string strVecInt = el::Helpers::convertTemplateToStdString(vecInt);
+    EXPECT_EQ("[1, 2, 3, 4]", strVecInt);
+}
+
+#endif // HELPERS_TEST_H_
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/hit-counter-test.h b/vendor/github.com/muflihun/easyloggingpp/test/hit-counter-test.h
new file mode 100644
index 0000000..5faf34b
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/hit-counter-test.h
@@ -0,0 +1,118 @@
+
+#ifndef HITCOUNTER_TESTS_H_
+#define HITCOUNTER_TESTS_H_
+
+#include "test.h"
+
+TEST(RegisteredHitCountersTest, ValidationEveryN) {
+    RegisteredHitCounters r;
+
+    // Ensure no hit counters are registered yet
+    EXPECT_TRUE(r.empty());
+
+    unsigned long int line = __LINE__;
+    r.validateEveryN(__FILE__, line, 2);
+
+    // Confirm size
+    EXPECT_EQ(1, r.size());
+
+    // Confirm hit count
+    EXPECT_EQ(1, r.getCounter(__FILE__, line)->hitCounts());
+
+    // Confirm validations
+    EXPECT_TRUE(r.validateEveryN(__FILE__, line, 2));
+    EXPECT_FALSE(r.validateEveryN(__FILE__, line, 2));
+
+    EXPECT_TRUE(r.validateEveryN(__FILE__, line, 2));
+    EXPECT_FALSE(r.validateEveryN(__FILE__, line, 2));
+
+    EXPECT_TRUE(r.validateEveryN(__FILE__, line, 2));
+    EXPECT_FALSE(r.validateEveryN(__FILE__, line, 2));
+
+    line = __LINE__;
+    r.validateEveryN(__FILE__, line, 3);
+    // Confirm size
+    EXPECT_EQ(2, r.size());
+    // Confirm hitcounts
+    EXPECT_EQ(1, r.getCounter(__FILE__, line)->hitCounts());
+
+    // Confirm validations
+    EXPECT_FALSE(r.validateEveryN(__FILE__, line, 3));
+    EXPECT_TRUE(r.validateEveryN(__FILE__, line, 3));
+    EXPECT_FALSE(r.validateEveryN(__FILE__, line, 3));
+
+    EXPECT_FALSE(r.validateEveryN(__FILE__, line, 3));
+    EXPECT_TRUE(r.validateEveryN(__FILE__, line, 3));
+    EXPECT_FALSE(r.validateEveryN(__FILE__, line, 3));
+
+    EXPECT_FALSE(r.validateEveryN(__FILE__, line, 3));
+    EXPECT_TRUE(r.validateEveryN(__FILE__, line, 3));
+    EXPECT_FALSE(r.validateEveryN(__FILE__, line, 3));
+
+    EXPECT_FALSE(r.validateEveryN(__FILE__, line, 3));
+    EXPECT_TRUE(r.validateEveryN(__FILE__, line, 3));
+    EXPECT_FALSE(r.validateEveryN(__FILE__, line, 3));
+
+    EXPECT_FALSE(r.validateEveryN(__FILE__, line, 3));
+    EXPECT_TRUE(r.validateEveryN(__FILE__, line, 3));
+    EXPECT_FALSE(r.validateEveryN(__FILE__, line, 3));
+
+    // Confirm size once again
+    EXPECT_EQ(2, r.size());
+}
+
+TEST(RegisteredHitCountersTest, ValidationAfterN) {
+    RegisteredHitCounters r;
+
+    // Ensure no hit counters are registered yet
+    EXPECT_TRUE(r.empty());
+
+    unsigned long int line = __LINE__;
+    unsigned int n = 2;
+    
+    // Register
+    r.validateAfterN(__FILE__, line, n); // 1
+
+    // Confirm size
+    EXPECT_EQ(1, r.size());
+
+    // Confirm hit count
+    EXPECT_EQ(1, r.getCounter(__FILE__, line)->hitCounts());
+
+    // Confirm validations
+    EXPECT_FALSE(r.validateAfterN(__FILE__, line, n)); // 2
+    EXPECT_TRUE(r.validateAfterN(__FILE__, line, n)); // 3
+    EXPECT_TRUE(r.validateAfterN(__FILE__, line, n)); // 4
+    EXPECT_TRUE(r.validateAfterN(__FILE__, line, n)); // 5
+    EXPECT_TRUE(r.validateAfterN(__FILE__, line, n)); // 6
+}
+
+TEST(RegisteredHitCountersTest, ValidationNTimes) {
+    RegisteredHitCounters r;
+
+    // Ensure no hit counters are registered yet
+    EXPECT_TRUE(r.empty());
+
+    unsigned long int line = __LINE__;
+    unsigned int n = 5;
+    
+    // Register
+    r.validateNTimes(__FILE__, line, n); // 1
+
+    // Confirm size
+    EXPECT_EQ(1, r.size());
+
+    // Confirm hit count
+    EXPECT_EQ(1, r.getCounter(__FILE__, line)->hitCounts());
+
+    // Confirm validations
+    EXPECT_TRUE(r.validateNTimes(__FILE__, line, n)); // 2
+    EXPECT_TRUE(r.validateNTimes(__FILE__, line, n)); // 3
+    EXPECT_TRUE(r.validateNTimes(__FILE__, line, n)); // 4
+    EXPECT_TRUE(r.validateNTimes(__FILE__, line, n)); // 5
+    EXPECT_FALSE(r.validateNTimes(__FILE__, line, n)); // 6
+    EXPECT_FALSE(r.validateNTimes(__FILE__, line, n)); // 7
+    EXPECT_FALSE(r.validateNTimes(__FILE__, line, n)); // 8
+    EXPECT_FALSE(r.validateNTimes(__FILE__, line, n)); // 9
+}
+#endif /* HITCOUNTER_TESTS_H_ */
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/log-format-resolution-test.h b/vendor/github.com/muflihun/easyloggingpp/test/log-format-resolution-test.h
new file mode 100644
index 0000000..77cc02d
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/log-format-resolution-test.h
@@ -0,0 +1,63 @@
+#ifndef LOG_FORMAT_RESOLUTION_TEST_H
+#define LOG_FORMAT_RESOLUTION_TEST_H
+
+TEST(LogFormatResolutionTest, NormalFormat) {
+
+    LogFormat format(Level::Info, ELPP_LITERAL("%logger %thread"));
+    EXPECT_EQ(ELPP_LITERAL("%logger %thread"), format.userFormat());
+    EXPECT_EQ(ELPP_LITERAL("%logger %thread"), format.format());
+    EXPECT_EQ("", format.dateTimeFormat());
+
+    LogFormat format2(Level::Info, ELPP_LITERAL("%logger %datetime{%Y-%M-%d %h:%m:%s  } %thread"));
+    EXPECT_EQ(ELPP_LITERAL("%logger %datetime{%Y-%M-%d %h:%m:%s  } %thread"), format2.userFormat());
+    EXPECT_EQ(ELPP_LITERAL("%logger %datetime %thread"), format2.format());
+    EXPECT_EQ("%Y-%M-%d %h:%m:%s  ", format2.dateTimeFormat());
+
+    LogFormat format3(Level::Info, ELPP_LITERAL("%logger %datetime{%Y-%M-%d} %thread"));
+    EXPECT_EQ(ELPP_LITERAL("%logger %datetime{%Y-%M-%d} %thread"), format3.userFormat());
+    EXPECT_EQ(ELPP_LITERAL("%logger %datetime %thread"), format3.format());
+    EXPECT_EQ("%Y-%M-%d", format3.dateTimeFormat());
+}
+
+TEST(LogFormatResolutionTest, DefaultFormat) {
+
+    LogFormat defaultFormat(Level::Info, ELPP_LITERAL("%logger %datetime %thread"));
+    EXPECT_EQ(ELPP_LITERAL("%logger %datetime %thread"), defaultFormat.userFormat());
+    EXPECT_EQ(ELPP_LITERAL("%logger %datetime %thread"), defaultFormat.format());
+    EXPECT_EQ("%Y-%M-%d %H:%m:%s,%g", defaultFormat.dateTimeFormat());
+
+    LogFormat defaultFormat2(Level::Info, ELPP_LITERAL("%logger %datetime %thread"));
+    EXPECT_EQ(ELPP_LITERAL("%logger %datetime %thread"), defaultFormat2.userFormat());
+    EXPECT_EQ(ELPP_LITERAL("%logger %datetime %thread"), defaultFormat2.format());
+    EXPECT_EQ("%Y-%M-%d %H:%m:%s,%g", defaultFormat2.dateTimeFormat());
+
+    LogFormat defaultFormat4(Level::Verbose, ELPP_LITERAL("%logger %level-%vlevel %datetime %thread"));
+    EXPECT_EQ(ELPP_LITERAL("%logger %level-%vlevel %datetime %thread"), defaultFormat4.userFormat());
+    EXPECT_EQ(ELPP_LITERAL("%logger VERBOSE-%vlevel %datetime %thread"), defaultFormat4.format());
+    EXPECT_EQ("%Y-%M-%d %H:%m:%s,%g", defaultFormat4.dateTimeFormat());
+}
+
+TEST(LogFormatResolutionTest, EscapedFormat) {
+
+    SubsecondPrecision ssPrec(3);
+
+    LogFormat escapeTest(Level::Info, ELPP_LITERAL("%logger %datetime{%%H %H} %thread"));
+    EXPECT_EQ(ELPP_LITERAL("%logger %datetime{%%H %H} %thread"), escapeTest.userFormat());
+    EXPECT_EQ(ELPP_LITERAL("%logger %datetime %thread"), escapeTest.format());
+    EXPECT_EQ("%%H %H", escapeTest.dateTimeFormat());
+    EXPECT_TRUE(Str::startsWith(DateTime::getDateTime(escapeTest.dateTimeFormat().c_str(), &ssPrec), "%H"));
+
+    LogFormat escapeTest2(Level::Info, ELPP_LITERAL("%%logger %%datetime{%%H %H %%H} %%thread %thread %%thread"));
+    EXPECT_EQ(ELPP_LITERAL("%%logger %%datetime{%%H %H %%H} %%thread %thread %%thread"), escapeTest2.userFormat());
+    EXPECT_EQ(ELPP_LITERAL("%%logger %%datetime{%%H %H %%H} %%thread %thread %thread"), escapeTest2.format());
+    EXPECT_EQ("", escapeTest2.dateTimeFormat()); // Date/time escaped
+    EXPECT_TRUE(Str::startsWith(DateTime::getDateTime(escapeTest.dateTimeFormat().c_str(), &ssPrec), "%H"));
+
+    LogFormat escapeTest3(Level::Info, ELPP_LITERAL("%%logger %datetime{%%H %H %%H} %%thread %thread %%thread"));
+    EXPECT_EQ(ELPP_LITERAL("%%logger %datetime{%%H %H %%H} %%thread %thread %%thread"), escapeTest3.userFormat());
+    EXPECT_EQ(ELPP_LITERAL("%%logger %datetime %%thread %thread %thread"), escapeTest3.format());
+    EXPECT_EQ("%%H %H %%H", escapeTest3.dateTimeFormat()); // Date/time escaped
+    EXPECT_TRUE(Str::startsWith(DateTime::getDateTime(escapeTest.dateTimeFormat().c_str(), &ssPrec), "%H"));
+}
+
+#endif // LOG_FORMAT_RESOLUTION_TEST_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/loggable-test.h b/vendor/github.com/muflihun/easyloggingpp/test/loggable-test.h
new file mode 100644
index 0000000..7ec2d26
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/loggable-test.h
@@ -0,0 +1,66 @@
+#ifndef LOGGABLETEST_H_
+#define LOGGABLETEST_H_
+
+#include "test.h"
+
+class Integer : public el::Loggable {
+public:
+    Integer(int i) : m_underlyingInt(i) {
+    }
+    Integer& operator=(const Integer& integer) {
+        m_underlyingInt = integer.m_underlyingInt;
+        return *this;
+    }
+    virtual ~Integer(void) {
+    }
+    inline operator int() const {
+        return m_underlyingInt;
+    }
+    inline void operator++() {
+        ++m_underlyingInt;
+    }
+    inline void operator--() {
+        --m_underlyingInt;
+    }
+    inline bool operator==(const Integer& integer) const {
+        return m_underlyingInt == integer.m_underlyingInt;
+    }
+    void inline log(el::base::type::ostream_t& os) const {
+        os << m_underlyingInt;
+    }
+private:
+    int m_underlyingInt;
+};
+
+
+TEST(LoggableTest, TestValidLog) {
+    Integer myint = 5;
+    LOG(INFO) << "My integer = " << myint;
+    std::string expected = BUILD_STR(getDate() << " My integer = 5\n");
+    EXPECT_EQ(expected, tail(1));
+    ++myint;
+    LOG(INFO) << "My integer = " << myint;
+    expected = BUILD_STR(getDate() << " My integer = 6\n");
+    EXPECT_EQ(expected, tail(1));
+}
+
+class String {
+public:
+    String(const char* s) : m_str(s) {}
+    const char* c_str(void) const { return m_str; }
+private:
+    const char* m_str;
+};
+
+inline MAKE_LOGGABLE(String, str, os) {
+    os << str.c_str();
+    return os;
+}
+
+TEST(LoggableTest, MakeLoggable) {
+    LOG(INFO) << String("this is my string");
+    std::string expected = BUILD_STR(getDate() << " this is my string\n");
+    EXPECT_EQ(expected, tail(1));
+}
+
+#endif // LOGGABLETEST_H_
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/logger-test.h b/vendor/github.com/muflihun/easyloggingpp/test/logger-test.h
new file mode 100644
index 0000000..4612530
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/logger-test.h
@@ -0,0 +1,56 @@
+
+#ifndef LOGGERS_TEST_H_
+#define LOGGERS_TEST_H_
+
+#include "test.h"
+
+TEST(LoggerTest, RegisterTenThousandLoggers) {
+    el::Loggers::reconfigureAllLoggers(el::ConfigurationType::ToStandardOutput, "true");
+    TIMED_SCOPE(timer, "RegisterTenThousandLoggers");
+    for (unsigned int i = 1; i <= 10000; ++i) {
+        std::stringstream ss;
+        ss << "logger" << i;
+        Loggers::getLogger(ss.str());
+        if (i % 1000 == 0) {
+            ss.str("");
+            ss << "Registered [" << i << "] loggers";
+            PERFORMANCE_CHECKPOINT_WITH_ID(timer, ss.str().c_str());
+        }
+    }
+    PERFORMANCE_CHECKPOINT_WITH_ID(timer, "10,000 loggers registered");
+    CLOG(INFO, "logger8478") << "Writing using logger 'logger8478'";
+    PERFORMANCE_CHECKPOINT_WITH_ID(timer, "Log written using logger8478");
+    el::Loggers::reconfigureAllLoggers(el::ConfigurationType::ToStandardOutput, "false");
+    // streams should not be more than 10 (this is worse case, otherwise until this point we dont have
+    // more than 2 unique loggers registered)
+    EXPECT_LT(ELPP->registeredLoggers()->logStreamsReference()->size(), 10);
+}
+
+TEST(LoggerTest, CheckTenThousandLoggers) {
+
+    TIMED_SCOPE(timer, "CheckTenThousandLoggers");
+
+    el::base::type::EnumType lIndex = LevelHelper::kMinValid;
+    el::base::type::fstream_t* logger1Stream = el::Loggers::getLogger("logger1")->typedConfigurations()->fileStream(LevelHelper::castFromInt(lIndex));
+    // Make sure all loggers for all levels have same file stream pointee
+    for (unsigned int i = 1; i <= 10000; ++i) {
+        std::stringstream ss;
+        ss << "logger" << i;
+        LevelHelper::forEachLevel(&lIndex, [&]() -> bool {
+            EXPECT_EQ(logger1Stream, el::Loggers::getLogger(ss.str())->typedConfigurations()->fileStream(LevelHelper::castFromInt(lIndex)));
+            return false;
+        });
+        lIndex = LevelHelper::kMinValid;
+        LOG_EVERY_N(1000, INFO) << "Checked " << i << " loggers";
+    }
+}
+
+TEST(LoggerTest, ValidId) {
+    EXPECT_TRUE(Logger::isValidId("a-valid-id"));
+    EXPECT_FALSE(Logger::isValidId("a valid id"));
+    EXPECT_FALSE(Logger::isValidId("logger-with-space-at-end "));
+    EXPECT_TRUE(Logger::isValidId("logger_with_no_space_at_end"));
+    EXPECT_TRUE(Logger::isValidId("my-great-logger-with-number-1055"));
+}
+
+#endif // LOGGERS_TEST_H_
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/macros-test.h b/vendor/github.com/muflihun/easyloggingpp/test/macros-test.h
new file mode 100644
index 0000000..fbfe56e
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/macros-test.h
@@ -0,0 +1,19 @@
+#ifndef MACROS_TEST_H_
+#define MACROS_TEST_H_
+
+#include "test.h"
+
+TEST(MacrosTest, VaLength) {
+    EXPECT_EQ(10, el_getVALength("a", "b", "c", "d", "e", "f", "g", "h", "i", "j"));
+    EXPECT_EQ(9, el_getVALength("a", "b", "c", "d", "e", "f", "g", "h", "i"));
+    EXPECT_EQ(8, el_getVALength("a", "b", "c", "d", "e", "f", "g", "h"));
+    EXPECT_EQ(7, el_getVALength("a", "b", "c", "d", "e", "f", "g"));
+    EXPECT_EQ(6, el_getVALength("a", "b", "c", "d", "e", "f"));
+    EXPECT_EQ(5, el_getVALength("a", "b", "c", "d", "e"));
+    EXPECT_EQ(4, el_getVALength("a", "b", "c", "d"));
+    EXPECT_EQ(3, el_getVALength("a", "b", "c"));
+    EXPECT_EQ(2, el_getVALength("a", "b"));
+    EXPECT_EQ(1, el_getVALength("a"));
+}
+
+#endif // MACROS_TEST_H_
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/main.cc b/vendor/github.com/muflihun/easyloggingpp/test/main.cc
new file mode 100644
index 0000000..a4ed529
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/main.cc
@@ -0,0 +1,46 @@
+// gtest based unit tests
+
+#include "test.h"
+
+// Included in alphabetical order
+
+#include "command-line-args-test.h"
+#include "configurations-test.h"
+#include "custom-format-specifier-test.h"
+#include "enum-helper-test.h"
+#include "date-utils-test.h"
+#include "file-utils-test.h"
+#include "format-specifier-test.h"
+#include "global-configurations-test.h"
+#include "helpers-test.h"
+#include "hit-counter-test.h"
+#include "log-format-resolution-test.h"
+#include "loggable-test.h"
+#include "logger-test.h"
+#include "macros-test.h"
+#include "os-utils-test.h"
+#include "plog-test.h"
+#include "post-log-dispatch-handler-test.h"
+#include "registry-test.h"
+#include "strict-file-size-check-test.h"
+#include "string-utils-test.h"
+#include "syslog-test.h"
+#include "typed-configurations-test.h"
+#include "utilities-test.h"
+#include "verbose-app-arguments-test.h"
+#include "write-all-test.h"
+
+TIMED_SCOPE(testTimer, "Easylogging++ Unit Tests");
+
+int main(int argc, char** argv) {
+
+
+    testing::InitGoogleTest(&argc, argv);
+
+    ELPP_INITIALIZE_SYSLOG(kSysLogIdent, 0, 0);
+
+    reconfigureLoggersForTest();
+    std::cout << "Logs for test are written in [" << logfile << "]" << std::endl;
+
+    return ::testing::UnitTest::GetInstance()->Run();
+}
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/os-utils-test.h b/vendor/github.com/muflihun/easyloggingpp/test/os-utils-test.h
new file mode 100644
index 0000000..1007c83
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/os-utils-test.h
@@ -0,0 +1,18 @@
+#ifndef OS_UTILS_TEST_H
+#define OS_UTILS_TEST_H
+
+#include "test.h"
+
+#if ELPP_OS_UNIX
+TEST(OSUtilsTest, GetBashOutput) {
+    const char* bashCommand = "echo 'test'";
+    std::string bashResult = OS::getBashOutput(bashCommand);
+    EXPECT_EQ("test", bashResult);
+}
+#endif
+
+TEST(OSUtilsTest, GetEnvironmentVariable) {
+    std::string variable = OS::getEnvironmentVariable("PATH", "pathResult");
+    EXPECT_FALSE(variable.empty());
+}
+#endif // OS_UTILS_TEST_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/plog-test.h b/vendor/github.com/muflihun/easyloggingpp/test/plog-test.h
new file mode 100644
index 0000000..d0bd228
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/plog-test.h
@@ -0,0 +1,18 @@
+#ifndef PLOG_TEST_H
+#define PLOG_TEST_H
+
+#include "test.h"
+
+TEST(PLogTest, WriteLog) {
+    std::fstream file("/tmp/a/file/that/does/not/exist.txt", std::fstream::in);
+    if (file.is_open()) {
+        // We dont expect to open file
+        FAIL();
+    }
+    PLOG(INFO) << "This is plog";
+    std::string expected = BUILD_STR(getDate() << " This is plog: No such file or directory [2]\n");
+    std::string actual = tail(1);
+    EXPECT_EQ(expected, actual);
+}
+
+#endif // PLOG_TEST_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/post-log-dispatch-handler-test.h b/vendor/github.com/muflihun/easyloggingpp/test/post-log-dispatch-handler-test.h
new file mode 100644
index 0000000..ddbf90c
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/post-log-dispatch-handler-test.h
@@ -0,0 +1,36 @@
+#ifndef POST_LOG_DISPATCH_HANDLER_TEST_H
+#define POST_LOG_DISPATCH_HANDLER_TEST_H
+
+#include "test.h"
+
+static std::vector<el::base::type::string_t> loggedMessages;
+
+class LogHandler : public el::LogDispatchCallback {
+public:
+    void handle(const LogDispatchData* data) {
+        loggedMessages.push_back(data->logMessage()->message());
+    }
+};
+
+TEST(LogDispatchCallbackTest, Installation) {
+    LOG(INFO) << "Log before handler installed";
+    EXPECT_TRUE(loggedMessages.empty());
+    
+    // Install handler
+    Helpers::installLogDispatchCallback<LogHandler>("LogHandler");
+    LOG(INFO) << "Should be part of loggedMessages - 1";
+    EXPECT_EQ(1, loggedMessages.size());
+    type::string_t expectedMessage = ELPP_LITERAL("Should be part of loggedMessages - 1");
+    EXPECT_EQ(expectedMessage, loggedMessages.at(0));
+}
+
+TEST(LogDispatchCallbackTest, Uninstallation) {
+    
+    // Uninstall handler
+    Helpers::uninstallLogDispatchCallback<LogHandler>("LogHandler");
+    LOG(INFO) << "This is not in list";
+    EXPECT_EQ(loggedMessages.end(), 
+        std::find(loggedMessages.begin(), loggedMessages.end(), ELPP_LITERAL("This is not in list")));
+}
+
+#endif // POST_LOG_DISPATCH_HANDLER_TEST_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/registry-test.h b/vendor/github.com/muflihun/easyloggingpp/test/registry-test.h
new file mode 100644
index 0000000..243ad0e
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/registry-test.h
@@ -0,0 +1,99 @@
+#ifndef REGISTRY_TEST_H_
+#define REGISTRY_TEST_H_
+
+#include "test.h"
+
+class Person {
+public:
+    Person(const std::string& name, unsigned int num) : m_name(name), m_num(num) {}
+    const std::string& name(void) const { return m_name; }
+    unsigned int num(void) const { return m_num; }
+private:
+    std::string m_name;
+    unsigned int m_num;
+};
+
+class PersonPred {
+public:
+    PersonPred(const std::string& name, unsigned int num) : name(name), n(num) {
+
+    }
+    bool operator()(const Person* p) {
+        return p != nullptr && p->name() == name && p->num() == n;
+    }
+private:
+    std::string name;
+    unsigned int n;
+};
+
+class People : public Registry<Person> {
+public:
+    void regNew(const char* name, Person* person) {
+        Registry<Person>::registerNew(name, person);
+    }
+    void clear() {
+        Registry<Person>::unregisterAll();
+    }
+    Person* getPerson(const char* name) {
+        return Registry<Person>::get(name);
+    }
+};
+
+class PeopleWithPred : public RegistryWithPred<Person, PersonPred> {
+public:
+    void regNew(Person* person) {
+        RegistryWithPred<Person, PersonPred>::registerNew(person);
+    }
+    void clear() {
+        RegistryWithPred<Person, PersonPred>::unregisterAll();
+    }
+    Person* get(const std::string& name, unsigned int numb) {
+        return RegistryWithPred<Person, PersonPred>::get(name, numb);
+    }
+};
+
+/// Tests for usage of registry (Thread unsafe but its OK with gtest)
+TEST(RegistryTest, RegisterAndUnregister) {
+    People people;
+    Person* john = new Person("John", 433212345);
+    people.regNew("John", john);
+
+    Person* john2 = new Person("John", 123456);
+    people.regNew("John", john2);
+
+    EXPECT_EQ(1, people.size());
+    unsigned int n = people.getPerson("John")->num();
+    EXPECT_EQ(n, 123456);
+
+    People people2;
+    people2 = people;
+    EXPECT_EQ(1, people2.size());
+    EXPECT_EQ(1, people.size());
+
+    people.clear();
+    EXPECT_TRUE(people.empty());
+    EXPECT_EQ(1, people2.size());
+    people2.clear();
+    EXPECT_TRUE(people2.empty());
+
+    PeopleWithPred peopleWithPred;
+    peopleWithPred.regNew(new Person("McDonald", 123));
+    peopleWithPred.regNew(new Person("McDonald", 157));
+    EXPECT_EQ(peopleWithPred.size(), 2);
+
+    Person *p = peopleWithPred.get("McDonald", 157);
+    EXPECT_EQ(p->name(), "McDonald");
+    EXPECT_EQ(p->num(), 157);
+
+    PeopleWithPred peopleWithPred2;
+    peopleWithPred2 = peopleWithPred;
+    EXPECT_EQ(peopleWithPred.size(), 2);
+    EXPECT_EQ(peopleWithPred2.size(), 2);
+
+    peopleWithPred.clear();
+    EXPECT_TRUE(peopleWithPred.empty());
+    peopleWithPred2.clear();
+    EXPECT_TRUE(peopleWithPred2.empty());
+}
+
+#endif // REGISTRY_TEST_H_
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/strict-file-size-check-test.h b/vendor/github.com/muflihun/easyloggingpp/test/strict-file-size-check-test.h
new file mode 100644
index 0000000..621eca9
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/strict-file-size-check-test.h
@@ -0,0 +1,26 @@
+#ifndef STRICT_FILE_SIZE_CHECK_TEST_H
+#define STRICT_FILE_SIZE_CHECK_TEST_H
+
+#include "test.h"
+
+static bool handlerCalled;
+
+void handler(const char*, std::size_t) {
+    handlerCalled = true;
+}
+
+TEST(StrictFileSizeCheckTest, HandlerCalled) {
+    EXPECT_FALSE(handlerCalled);
+    EXPECT_TRUE(ELPP->hasFlag(LoggingFlag::StrictLogFileSizeCheck));
+
+    el::Loggers::getLogger("handler_check_logger");
+    el::Loggers::reconfigureLogger("handler_check_logger", el::ConfigurationType::Filename, "/tmp/logs/max-size.log");
+    el::Loggers::reconfigureLogger("handler_check_logger", el::ConfigurationType::MaxLogFileSize, "100");
+    el::Helpers::installPreRollOutCallback(handler);
+    for (int i = 0; i < 100; ++i) {
+        CLOG(INFO, "handler_check_logger") << "Test " << i;
+    }
+    EXPECT_TRUE(handlerCalled);
+}
+
+#endif // STRICTFILESIZECHECKTEST_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/string-utils-test.h b/vendor/github.com/muflihun/easyloggingpp/test/string-utils-test.h
new file mode 100644
index 0000000..797a038
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/string-utils-test.h
@@ -0,0 +1,107 @@
+#ifndef STRING_UTILS_TEST_H
+#define STRING_UTILS_TEST_H
+
+#include "test.h"
+
+TEST(StringUtilsTest, WildCardMatch) {
+    EXPECT_TRUE(Str::wildCardMatch("main", "m*"));
+    EXPECT_TRUE(Str::wildCardMatch("mei.cpp", "m*cpp"));
+    EXPECT_TRUE(Str::wildCardMatch("me.cpp", "me.cpp"));
+    EXPECT_TRUE(Str::wildCardMatch("me.cpp", "m?.cpp"));
+    EXPECT_TRUE(Str::wildCardMatch("m/f.cpp", "m??.cpp"));
+    EXPECT_TRUE(Str::wildCardMatch("", "*"));
+    EXPECT_FALSE(Str::wildCardMatch("", "?"));
+    EXPECT_TRUE(Str::wildCardMatch("fastquery--and anything after or before", "*****************fast*****query*****"));
+    EXPECT_FALSE(Str::wildCardMatch("some thing not matching", "some * matching all"));
+}
+
+TEST(StringUtilsTest, Trim) {
+    std::string strLeftWhiteSpace(" string 1");
+    std::string strLeftRightWhiteSpace(" string 2 ");
+    std::string strRightWhiteSpace("string 3 ");
+    std::string strLeftRightWhiteSpaceWithTabAndNewLine("  string 4 \t\n");
+    EXPECT_EQ("string 1", Str::trim(strLeftWhiteSpace));
+    EXPECT_EQ("string 2", Str::trim(strLeftRightWhiteSpace));
+    EXPECT_EQ("string 3", Str::trim(strRightWhiteSpace));
+    EXPECT_EQ("string 4", Str::trim(strLeftRightWhiteSpaceWithTabAndNewLine));
+}
+
+TEST(StringUtilsTest, StartsAndEndsWith) {
+    EXPECT_TRUE(Str::startsWith("Dotch this", "Dotch"));
+    EXPECT_FALSE(Str::startsWith("Dotch this", "dotch"));
+    EXPECT_FALSE(Str::startsWith("    Dotch this", "dotch"));
+    EXPECT_TRUE(Str::endsWith("Dotch this", "this"));
+    EXPECT_FALSE(Str::endsWith("Dotch this", "This"));
+}
+
+TEST(StringUtilsTest, ReplaceAll) {
+    std::string str = "This is cool";
+    char replaceWhat = 'o';
+    char replaceWith = '0';
+    EXPECT_EQ("This is c00l", Str::replaceAll(str, replaceWhat, replaceWith));
+}
+
+TEST(StringUtilsTest, ToUpper) {
+    std::string str = "This iS c0ol";
+    EXPECT_EQ("THIS IS C0OL", Str::toUpper(str));
+    str = "enabled = ";
+    EXPECT_EQ("ENABLED = ", Str::toUpper(str));
+}
+
+TEST(StringUtilsTest, CStringEq) {
+    EXPECT_TRUE(Str::cStringEq("this", "this"));
+    EXPECT_FALSE(Str::cStringEq(nullptr, "this"));
+    EXPECT_TRUE(Str::cStringEq(nullptr, nullptr));
+}
+
+TEST(StringUtilsTest, CStringCaseEq) {
+    EXPECT_TRUE(Str::cStringCaseEq("this", "This"));
+    EXPECT_TRUE(Str::cStringCaseEq("this", "this"));
+    EXPECT_TRUE(Str::cStringCaseEq(nullptr, nullptr));
+    EXPECT_FALSE(Str::cStringCaseEq(nullptr, "nope"));
+}
+
+TEST(StringUtilsTest, Contains) {
+    EXPECT_TRUE(Str::contains("the quick brown fox jumped over the lazy dog", 'a'));
+    EXPECT_FALSE(Str::contains("the quick brown fox jumped over the lazy dog", '9'));
+}
+
+TEST(StringUtilsTest, ReplaceFirstWithEscape) {
+    el::base::type::string_t str = ELPP_LITERAL("Rolling in the deep");
+    Str::replaceFirstWithEscape(str, ELPP_LITERAL("Rolling"), ELPP_LITERAL("Swimming"));
+    EXPECT_EQ(ELPP_LITERAL("Swimming in the deep"), str);
+    str = ELPP_LITERAL("this is great and this is not");
+    Str::replaceFirstWithEscape(str, ELPP_LITERAL("this is"), ELPP_LITERAL("that was"));
+    EXPECT_EQ(ELPP_LITERAL("that was great and this is not"), str);
+    str = ELPP_LITERAL("%this is great and this is not");
+    Str::replaceFirstWithEscape(str, ELPP_LITERAL("this is"), ELPP_LITERAL("that was"));
+    EXPECT_EQ(ELPP_LITERAL("this is great and that was not"), str);
+    str = ELPP_LITERAL("%datetime %level %msg");
+    Str::replaceFirstWithEscape(str, ELPP_LITERAL("%level"), LevelHelper::convertToString(Level::Info));
+    EXPECT_EQ(ELPP_LITERAL("%datetime INFO %msg"), str);
+}
+
+TEST(StringUtilsTest, AddToBuff) {
+    char buf[100];
+    char* bufLim = buf + 100;
+    char* buffPtr = buf;
+
+    buffPtr = Str::addToBuff("The quick brown fox", buffPtr, bufLim);
+    EXPECT_STREQ("The quick brown fox", buf);
+    buffPtr = Str::addToBuff(" jumps over the lazy dog", buffPtr, bufLim);
+    EXPECT_STREQ("The quick brown fox jumps over the lazy dog", buf);
+}
+
+TEST(StringUtilsTest, ConvertAndAddToBuff) {
+    char buf[100];
+    char* bufLim = buf + 100;
+    char* buffPtr = buf;
+
+    buffPtr = Str::addToBuff("Today is lets say ", buffPtr, bufLim);
+    buffPtr = Str::convertAndAddToBuff(5, 1, buffPtr, bufLim);
+    buffPtr = Str::addToBuff(" but we write it as ", buffPtr, bufLim);
+    buffPtr = Str::convertAndAddToBuff(5, 2, buffPtr, bufLim);
+    EXPECT_STREQ("Today is lets say 5 but we write it as 05", buf);
+}
+
+#endif // STRING_UTILS_TEST_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/syslog-test.h b/vendor/github.com/muflihun/easyloggingpp/test/syslog-test.h
new file mode 100644
index 0000000..3ec7b84
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/syslog-test.h
@@ -0,0 +1,83 @@
+#ifndef SYSLOG_TEST_H
+#define SYSLOG_TEST_H
+
+#if defined(ELPP_SYSLOG)
+
+#include "test.h"
+
+static const char* kSysLogFile = "/var/log/syslog";
+static const char* s_currentHost = el::base::utils::OS::currentHost().c_str();
+
+TEST(SysLogTest, WriteLog) {
+    if (!fileExists(kSysLogFile)) {
+        // Do not check for syslog config, just dont test it
+        return;
+    }
+    // To avoid "Easylogging++ last message repeated 2 times"
+    SYSLOG(INFO) << "last message suppress";
+
+    SYSLOG(INFO) << "this is my syslog";
+    sleep(1); // Make sure daemon has picked it up
+    std::string expectedEnd = BUILD_STR(s_currentHost << " " << kSysLogIdent << ": INFO : this is my syslog\n");
+    std::string actual = tail(1, kSysLogFile);
+    EXPECT_TRUE(Str::endsWith(actual, expectedEnd));
+}
+
+TEST(SysLogTest, DebugVersionLogs) {
+    if (!fileExists(kSysLogFile)) {
+        // Do not check for syslog config, just dont test it
+        return;
+    }
+    // Test enabled
+    #undef ELPP_DEBUG_LOG
+    #define ELPP_DEBUG_LOG 0
+
+    std::string currentTail = tail(1, kSysLogFile);
+
+    DSYSLOG(INFO) << "No DSYSLOG should be resolved";
+    sleep(1); // Make sure daemon has picked it up
+    EXPECT_TRUE(Str::endsWith(currentTail, tail(1, kSysLogFile)));
+
+    DSYSLOG_IF(true, INFO) << "No DSYSLOG_IF should be resolved";
+    sleep(1); // Make sure daemon has picked it up
+    EXPECT_TRUE(Str::endsWith(currentTail, tail(1, kSysLogFile)));
+
+    DCSYSLOG(INFO, "performance") << "No DCSYSLOG should be resolved";
+    sleep(1); // Make sure daemon has picked it up
+    EXPECT_TRUE(Str::endsWith(currentTail, tail(1, kSysLogFile)));
+
+    DCSYSLOG(INFO, "performance") << "No DCSYSLOG should be resolved";
+    sleep(1); // Make sure daemon has picked it up
+    EXPECT_TRUE(Str::endsWith(currentTail, tail(1, kSysLogFile)));
+
+    // Reset
+    #undef ELPP_DEBUG_LOG
+    #define ELPP_DEBUG_LOG 1
+
+    // Now test again
+    DSYSLOG(INFO) << "DSYSLOG should be resolved";
+    sleep(1); // Make sure daemon has picked it up
+    std::string expected = BUILD_STR(s_currentHost << " " << kSysLogIdent << ": INFO : DSYSLOG should be resolved\n");
+    EXPECT_TRUE(Str::endsWith(tail(1, kSysLogFile), expected));
+
+    DSYSLOG_IF(true, INFO) << "DSYSLOG_IF should be resolved";
+    sleep(1); // Make sure daemon has picked it up
+    expected = BUILD_STR(s_currentHost << " " << kSysLogIdent << ": INFO : DSYSLOG_IF should be resolved\n");
+    EXPECT_TRUE(Str::endsWith(tail(1, kSysLogFile), expected));
+    
+    DCSYSLOG(INFO, el::base::consts::kSysLogLoggerId) << "DCSYSLOG should be resolved";
+    sleep(1); // Make sure daemon has picked it up
+    expected = BUILD_STR(s_currentHost << " " << kSysLogIdent << ": INFO : DCSYSLOG should be resolved\n");
+    EXPECT_TRUE(Str::endsWith(tail(1, kSysLogFile), expected));
+
+    DCSYSLOG(INFO, el::base::consts::kSysLogLoggerId) << "DCSYSLOG should be resolved";
+    sleep(1); // Make sure daemon has picked it up
+    expected = BUILD_STR(s_currentHost << " " << kSysLogIdent << ": INFO : DCSYSLOG should be resolved\n");
+    EXPECT_TRUE(Str::endsWith(tail(1, kSysLogFile), expected));
+}
+
+#else
+#   warning "Skipping [SysLogTest] for [ELPP_SYSLOG] not defined"
+#endif // defined(ELPP_SYSLOG)
+
+#endif // SYSLOG_TEST_H
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/test.h b/vendor/github.com/muflihun/easyloggingpp/test/test.h
new file mode 100644
index 0000000..6de4ace
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/test.h
@@ -0,0 +1,102 @@
+//
+// This header is used across tests to include all the valid headers
+//
+
+#ifndef TEST_HELPERS_H_
+#define TEST_HELPERS_H_
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wundef"
+#pragma GCC diagnostic ignored "-Wsign-compare"
+#include <gtest/gtest.h>
+#pragma GCC diagnostic pop
+
+#include "easylogging++.h"
+
+using namespace el;
+using namespace el::base;
+using namespace el::base::utils;
+
+INITIALIZE_EASYLOGGINGPP
+
+static const char* logfile = "/tmp/logs/el.gtest.log";
+
+static void reconfigureLoggersForTest(void) {
+    Configurations c;
+    c.setGlobally(ConfigurationType::Format, "%datetime{%a %b %d, %H:%m} %msg");
+    c.setGlobally(ConfigurationType::Filename, "/tmp/logs/el.gtest.log");
+    c.setGlobally(ConfigurationType::MaxLogFileSize, "2097152"); // 2MB
+    c.setGlobally(ConfigurationType::ToStandardOutput, "false");
+    c.setGlobally(ConfigurationType::PerformanceTracking, "true");
+    c.setGlobally(ConfigurationType::LogFlushThreshold, "1");
+    Loggers::setDefaultConfigurations(c, true);
+    // We do not want to reconfgure syslog with date/time
+    Loggers::reconfigureLogger(consts::kSysLogLoggerId, ConfigurationType::Format, "%level: %msg");
+
+    Loggers::addFlag(LoggingFlag::DisableApplicationAbortOnFatalLog);
+    Loggers::addFlag(LoggingFlag::ImmediateFlush);
+    Loggers::addFlag(LoggingFlag::StrictLogFileSizeCheck);
+    Loggers::addFlag(LoggingFlag::DisableVModulesExtensions);
+}
+
+static std::string tail(unsigned int n, const char* filename = logfile) {
+    if (n == 0) return std::string();
+    std::ifstream fstr(filename);
+    if (!fstr.is_open()) {
+        return std::string();
+    }
+    fstr.seekg(0, fstr.end);
+    int size = static_cast<int>(fstr.tellg());
+    int ncopy = n + 1;
+    for (int i = (size - 1); i >= 0; --i) {
+        fstr.seekg(i);
+        char c = fstr.get();
+        if (c == '\n' && --ncopy == 0) {
+            break;
+        }
+        if (i == 0) {
+            fstr.seekg(i); // fstr.get() increments buff, so we reset it
+        }
+    }
+    std::stringstream ss;
+    char c = fstr.get();
+    while (fstr.good()) {
+        ss << c;
+        c = fstr.get();
+    }
+    fstr.close();
+    return ss.str();
+}
+
+static std::string getDate(const char* format = "%a %b %d, %H:%m") {
+    SubsecondPrecision ssPrec(3);
+    return DateTime::getDateTime(format, &ssPrec);
+}
+
+static bool fileExists(const char* filename) {
+    el::base::type::fstream_t fstr(filename, el::base::type::fstream_t::in);
+    return fstr.is_open();
+}
+
+static void cleanFile(const char* filename = logfile, el::base::type::fstream_t* fs = nullptr) {
+    if (fs != nullptr && fs->is_open()) {
+        fs->close();
+        fs->open(filename, el::base::type::fstream_t::out);
+    } else {
+        el::base::type::fstream_t f(filename, el::base::type::fstream_t::out);
+        if (f.is_open()) {
+            f.close();
+        }
+        ELPP_UNUSED(f);
+    }
+}
+
+#undef BUILD_STR
+#define BUILD_STR(strb) [&]() -> std::string { std::stringstream ssb; ssb << strb; return ssb.str(); }()
+
+static void removeFile(const char* path) {
+        (void)(system(BUILD_STR("rm -rf " << path).c_str()) + 1); // (void)(...+1) -> ignore result for gcc 4.6+
+}
+
+static const char* kSysLogIdent = "easylogging++ unit test";
+#endif // TEST_HELPERS_H_
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/typed-configurations-test.h b/vendor/github.com/muflihun/easyloggingpp/test/typed-configurations-test.h
new file mode 100644
index 0000000..10f0b5b
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/typed-configurations-test.h
@@ -0,0 +1,129 @@
+#ifndef TYPED_CONFIGURATIONS_TEST_H_
+#define TYPED_CONFIGURATIONS_TEST_H_
+
+#include "test.h"
+#include <cstdio>
+
+const char* getConfFile(void) {
+    const char* file = "/tmp/temp-test.conf";
+    std::fstream confFile(file, std::fstream::out);
+    confFile << " * GLOBAL:\n"
+    << "    FILENAME             =  /tmp/my-test.log\n"
+    << "    FORMAT               =  %datetime %level %msg\n"
+    << "    MAX_LOG_FILE_SIZE        =  1\n"
+    << "    TO_STANDARD_OUTPUT   =  TRUE\n"
+    << "* DEBUG:\n"
+    // NOTE escaped %level and %host below
+    << "    FORMAT               =  %datetime %%level %level [%user@%%host] [%func] [%loc] %msg\n"
+    // INFO and WARNING uses is defined by GLOBAL
+    << "* ERROR:\n"
+    << "    FILENAME             =  /tmp/my-test-err.log\n"
+    << "    FORMAT               =  %%logger %%logger %logger %%logger %msg\n"
+    << "    MAX_LOG_FILE_SIZE        =  10\n"
+    << "* FATAL:\n"
+    << "    FORMAT               =  %datetime %%datetime{%H:%m} %level %msg\n"
+    << "* VERBOSE:\n"
+    << "    FORMAT               =  %%datetime{%h:%m} %datetime %level-%vlevel %msg\n"
+    << "* TRACE:\n"
+    << "    FORMAT               =  %datetime{%h:%m} %%level %level [%func] [%loc] %msg\n";
+    confFile.close();
+    return file;
+}
+
+TEST(TypedConfigurationsTest, Initialization) {
+
+    std::string testFile = "/tmp/my-test.log";
+    std::remove(testFile.c_str());
+
+    Configurations c(getConfFile());
+    TypedConfigurations tConf(&c, ELPP->registeredLoggers()->logStreamsReference());
+
+    EXPECT_TRUE(tConf.enabled(Level::Global));
+
+    EXPECT_EQ(ELPP_LITERAL("%datetime %level %msg"), tConf.logFormat(Level::Info).userFormat());
+    EXPECT_EQ(ELPP_LITERAL("%datetime INFO %msg"), tConf.logFormat(Level::Info).format());
+    EXPECT_EQ("%Y-%M-%d %H:%m:%s,%g", tConf.logFormat(Level::Info).dateTimeFormat());
+
+    EXPECT_EQ(ELPP_LITERAL("%datetime %%level %level [%user@%%host] [%func] [%loc] %msg"), tConf.logFormat(Level::Debug).userFormat());
+    std::string expected = BUILD_STR("%datetime %level DEBUG [" << el::base::utils::OS::currentUser() << "@%%host] [%func] [%loc] %msg");
+#if defined(ELPP_UNICODE)
+    char* orig = Str::wcharPtrToCharPtr(tConf.logFormat(Level::Debug).format().c_str());
+#else
+    const char* orig = tConf.logFormat(Level::Debug).format().c_str();
+#endif
+    EXPECT_EQ(expected, std::string(orig));
+    EXPECT_EQ("%Y-%M-%d %H:%m:%s,%g", tConf.logFormat(Level::Debug).dateTimeFormat());
+
+    // This double quote is escaped at run-time for %date and %datetime
+    EXPECT_EQ(ELPP_LITERAL("%datetime %%datetime{%H:%m} %level %msg"), tConf.logFormat(Level::Fatal).userFormat());
+    EXPECT_EQ(ELPP_LITERAL("%datetime %%datetime{%H:%m} FATAL %msg"), tConf.logFormat(Level::Fatal).format());
+    EXPECT_EQ("%Y-%M-%d %H:%m:%s,%g", tConf.logFormat(Level::Fatal).dateTimeFormat());
+
+    EXPECT_EQ(ELPP_LITERAL("%datetime{%h:%m} %%level %level [%func] [%loc] %msg"), tConf.logFormat(Level::Trace).userFormat());
+    EXPECT_EQ(ELPP_LITERAL("%datetime %level TRACE [%func] [%loc] %msg"), tConf.logFormat(Level::Trace).format());
+    EXPECT_EQ("%h:%m", tConf.logFormat(Level::Trace).dateTimeFormat());
+
+    EXPECT_EQ(ELPP_LITERAL("%%datetime{%h:%m} %datetime %level-%vlevel %msg"), tConf.logFormat(Level::Verbose).userFormat());
+    EXPECT_EQ(ELPP_LITERAL("%%datetime{%h:%m} %datetime VERBOSE-%vlevel %msg"), tConf.logFormat(Level::Verbose).format());
+    EXPECT_EQ("%Y-%M-%d %H:%m:%s,%g", tConf.logFormat(Level::Verbose).dateTimeFormat());
+
+    EXPECT_EQ(ELPP_LITERAL("%%logger %%logger %logger %%logger %msg"), tConf.logFormat(Level::Error).userFormat());
+    EXPECT_EQ(ELPP_LITERAL("%%logger %%logger %logger %logger %msg"), tConf.logFormat(Level::Error).format());
+    EXPECT_EQ("", tConf.logFormat(Level::Error).dateTimeFormat());
+}
+
+TEST(TypedConfigurationsTest, SharedFileStreams) {
+    Configurations c(getConfFile());
+    TypedConfigurations tConf(&c, ELPP->registeredLoggers()->logStreamsReference());
+    // Make sure we have only two unique file streams for ALL and ERROR
+    el::base::type::EnumType lIndex = LevelHelper::kMinValid;
+    el::base::type::fstream_t* prev = nullptr;
+    LevelHelper::forEachLevel(&lIndex, [&]() -> bool {
+        if (prev == nullptr) {
+            prev = tConf.fileStream(LevelHelper::castFromInt(lIndex));
+        } else {
+            if (LevelHelper::castFromInt(lIndex) == Level::Error) {
+                EXPECT_NE(prev, tConf.fileStream(LevelHelper::castFromInt(lIndex)));
+            } else {
+                EXPECT_EQ(prev, tConf.fileStream(LevelHelper::castFromInt(lIndex)));
+            }
+        }
+        return false;
+    });
+}
+
+TEST(TypedConfigurationsTest, NonExistentFileCreation) {
+    Configurations c(getConfFile());
+    c.setGlobally(ConfigurationType::Filename, "/tmp/logs/el.gtest.log");
+    c.set(Level::Info, ConfigurationType::ToFile, "true");
+    c.set(Level::Error, ConfigurationType::ToFile, "true");
+    c.set(Level::Info, ConfigurationType::Filename, "/a/file/not/possible/to/create/log.log");
+    c.set(Level::Error, ConfigurationType::Filename, "/tmp/logs/el.gtest.log");
+    TypedConfigurations tConf(&c, ELPP->registeredLoggers()->logStreamsReference());
+    EXPECT_TRUE(tConf.toFile(Level::Global));
+    EXPECT_FALSE(tConf.toFile(Level::Info));
+    EXPECT_TRUE(tConf.toFile(Level::Error));
+    EXPECT_EQ(nullptr, tConf.fileStream(Level::Info));  // nullptr
+    EXPECT_NE(nullptr, tConf.fileStream(Level::Error)); // Not null
+}
+
+TEST(TypedConfigurationsTest, WriteToFiles) {
+    std::string testFile = "/tmp/my-test.log";
+    Configurations c(getConfFile());
+    TypedConfigurations tConf(&c, ELPP->registeredLoggers()->logStreamsReference());
+    {
+        EXPECT_TRUE(tConf.fileStream(Level::Info)->is_open());
+        EXPECT_EQ(testFile, tConf.filename(Level::Info));
+        *tConf.fileStream(Level::Info) << "-Info";
+        *tConf.fileStream(Level::Debug) << "-Debug";
+        tConf.fileStream(Level::Debug)->flush();
+        *tConf.fileStream(Level::Error) << "-Error";
+        tConf.fileStream(Level::Error)->flush();
+    }
+    std::ifstream reader(tConf.filename(Level::Info), std::fstream::in);
+    std::string line = std::string();
+    std::getline(reader, line);
+    EXPECT_EQ("-Info-Debug", line);
+}
+
+#endif /* TYPED_CONFIGURATIONS_TEST_H_ */
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/utilities-test.h b/vendor/github.com/muflihun/easyloggingpp/test/utilities-test.h
new file mode 100644
index 0000000..00869ba
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/utilities-test.h
@@ -0,0 +1,14 @@
+
+#ifndef UTILITIES_TEST_H_
+#define UTILITIES_TEST_H_
+
+#include "test.h"
+
+TEST(UtilitiesTest, SafeDelete) {
+    int* i = new int(12);
+    ASSERT_TRUE(i != nullptr);
+    safeDelete(i);
+    ASSERT_EQ(nullptr, i);
+}
+
+#endif // UTILITIES_TEST_H_
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/verbose-app-arguments-test.h b/vendor/github.com/muflihun/easyloggingpp/test/verbose-app-arguments-test.h
new file mode 100644
index 0000000..40f2498
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/verbose-app-arguments-test.h
@@ -0,0 +1,203 @@
+#ifndef VMODULE_TESTS_H_
+#define VMODULE_TESTS_H_
+#include "test.h"
+
+TEST(VerboseAppArgumentsTest, AppArgsLevel) {
+
+    const char* c[10];
+    c[0] = "myprog";
+    c[1] = "--v=5";
+    c[2] = "\0";
+    el::Helpers::setArgs(2, c);
+    EXPECT_TRUE(VLOG_IS_ON(1));
+    EXPECT_TRUE(VLOG_IS_ON(2));
+    EXPECT_TRUE(VLOG_IS_ON(3));
+    EXPECT_TRUE(VLOG_IS_ON(4));
+    EXPECT_TRUE(VLOG_IS_ON(5));
+    EXPECT_FALSE(VLOG_IS_ON(6));
+    EXPECT_FALSE(VLOG_IS_ON(8));
+    EXPECT_FALSE(VLOG_IS_ON(9));
+
+    c[0] = "myprog";
+    c[1] = "--v=x"; // SHOULD BE ZERO NOW!
+    c[2] = "\0";
+    el::Helpers::setArgs(2, c);
+    EXPECT_FALSE(VLOG_IS_ON(1));
+    EXPECT_FALSE(VLOG_IS_ON(2));
+    EXPECT_FALSE(VLOG_IS_ON(3));
+    EXPECT_FALSE(VLOG_IS_ON(4));
+    EXPECT_FALSE(VLOG_IS_ON(5));
+    EXPECT_FALSE(VLOG_IS_ON(6));
+    EXPECT_FALSE(VLOG_IS_ON(8));
+    EXPECT_FALSE(VLOG_IS_ON(9));
+
+    c[0] = "myprog";
+    c[1] = "-v"; // Sets to max level (9)
+    c[2] = "\0";
+    el::Helpers::setArgs(2, c);
+    EXPECT_TRUE(VLOG_IS_ON(1));
+    EXPECT_TRUE(VLOG_IS_ON(2));
+    EXPECT_TRUE(VLOG_IS_ON(3));
+    EXPECT_TRUE(VLOG_IS_ON(4));
+    EXPECT_TRUE(VLOG_IS_ON(5));
+    EXPECT_TRUE(VLOG_IS_ON(6));
+    EXPECT_TRUE(VLOG_IS_ON(8));
+    EXPECT_TRUE(VLOG_IS_ON(9));
+
+    c[0] = "myprog";
+    c[1] = "--verbose"; // Sets to max level (9)
+    c[2] = "\0";
+    el::Helpers::setArgs(2, c);
+    EXPECT_TRUE(VLOG_IS_ON(1));
+    EXPECT_TRUE(VLOG_IS_ON(2));
+    EXPECT_TRUE(VLOG_IS_ON(3));
+    EXPECT_TRUE(VLOG_IS_ON(4));
+    EXPECT_TRUE(VLOG_IS_ON(5));
+    EXPECT_TRUE(VLOG_IS_ON(6));
+    EXPECT_TRUE(VLOG_IS_ON(8));
+    EXPECT_TRUE(VLOG_IS_ON(9));
+
+    // ----------------------- UPPER CASE VERSION OF SAME TEST CASES -----------------
+    c[0] = "myprog";
+    c[1] = "--V=5";
+    c[2] = "\0";
+    el::Helpers::setArgs(2, c);
+    EXPECT_TRUE(VLOG_IS_ON(1));
+    EXPECT_TRUE(VLOG_IS_ON(2));
+    EXPECT_TRUE(VLOG_IS_ON(3));
+    EXPECT_TRUE(VLOG_IS_ON(4));
+    EXPECT_TRUE(VLOG_IS_ON(5));
+    EXPECT_FALSE(VLOG_IS_ON(6));
+    EXPECT_FALSE(VLOG_IS_ON(8));
+    EXPECT_FALSE(VLOG_IS_ON(9));
+
+    c[0] = "myprog";
+    c[1] = "--V=x"; // SHOULD BECOME ZERO!
+    c[2] = "\0";
+    el::Helpers::setArgs(2, c);
+    EXPECT_FALSE(VLOG_IS_ON(1));
+    EXPECT_FALSE(VLOG_IS_ON(2));
+    EXPECT_FALSE(VLOG_IS_ON(3));
+    EXPECT_FALSE(VLOG_IS_ON(4));
+    EXPECT_FALSE(VLOG_IS_ON(5));
+    EXPECT_FALSE(VLOG_IS_ON(6));
+    EXPECT_FALSE(VLOG_IS_ON(8));
+    EXPECT_FALSE(VLOG_IS_ON(9));
+
+    c[0] = "myprog";
+    c[1] = "-V"; // Sets to max level (9)
+    c[2] = "\0";
+    el::Helpers::setArgs(2, c);
+    EXPECT_TRUE(VLOG_IS_ON(1));
+    EXPECT_TRUE(VLOG_IS_ON(2));
+    EXPECT_TRUE(VLOG_IS_ON(3));
+    EXPECT_TRUE(VLOG_IS_ON(4));
+    EXPECT_TRUE(VLOG_IS_ON(5));
+    EXPECT_TRUE(VLOG_IS_ON(6));
+    EXPECT_TRUE(VLOG_IS_ON(8));
+    EXPECT_TRUE(VLOG_IS_ON(9));
+
+    c[0] = "myprog";
+    c[1] = "--VERBOSE"; // Sets to max level (9)
+    c[2] = "\0";
+    el::Helpers::setArgs(2, c);
+    EXPECT_TRUE(VLOG_IS_ON(1));
+    EXPECT_TRUE(VLOG_IS_ON(2));
+    EXPECT_TRUE(VLOG_IS_ON(3));
+    EXPECT_TRUE(VLOG_IS_ON(4));
+    EXPECT_TRUE(VLOG_IS_ON(5));
+    EXPECT_TRUE(VLOG_IS_ON(6));
+    EXPECT_TRUE(VLOG_IS_ON(8));
+    EXPECT_TRUE(VLOG_IS_ON(9));
+}
+
+TEST(VerboseAppArgumentsTest, AppArgsVModules) {
+
+    const char* c[10];
+    c[0] = "myprog";
+    c[1] = "-vmodule=main*=3,easy.\?\?\?=1";
+    c[2] = "\0";
+    el::Helpers::setArgs(2, c);
+
+    EXPECT_TRUE((ELPP->vRegistry()->allowed(2, "main.cpp")));
+    EXPECT_TRUE((ELPP->vRegistry()->allowed(3, "main.h")));
+    EXPECT_FALSE((ELPP->vRegistry()->allowed(4, "main.c")));
+    EXPECT_FALSE((ELPP->vRegistry()->allowed(5, "main.cpp")));
+    EXPECT_TRUE((ELPP->vRegistry()->allowed(2, "main.cxx")));
+    EXPECT_TRUE((ELPP->vRegistry()->allowed(1, "main.cc")));
+    EXPECT_TRUE((ELPP->vRegistry()->allowed(3, "main-file-for-prog.cc")));
+
+    el::Loggers::removeFlag(el::LoggingFlag::AllowVerboseIfModuleNotSpecified);  // Check strictly
+
+    EXPECT_FALSE((ELPP->vRegistry()->allowed(4, "tmain.cxx")));
+
+    EXPECT_TRUE(ELPP->vRegistry()->allowed(1, "easy.cpp"));
+    EXPECT_TRUE((ELPP->vRegistry()->allowed(1, "easy.cxx")));
+    EXPECT_TRUE((ELPP->vRegistry()->allowed(1, "easy.hxx")));
+    EXPECT_TRUE((ELPP->vRegistry()->allowed(1, "easy.hpp")));
+
+    EXPECT_FALSE((ELPP->vRegistry()->allowed(2, "easy.cpp")));
+    EXPECT_FALSE((ELPP->vRegistry()->allowed(2, "easy.cxx")));
+    EXPECT_FALSE((ELPP->vRegistry()->allowed(2, "easy.hxx")));
+    EXPECT_FALSE((ELPP->vRegistry()->allowed(2, "easy.hpp")));
+
+    EXPECT_FALSE((ELPP->vRegistry()->allowed(1, "easy.cc")));
+    EXPECT_FALSE((ELPP->vRegistry()->allowed(1, "easy.hh")));
+    EXPECT_FALSE((ELPP->vRegistry()->allowed(1, "easy.h")));
+    EXPECT_FALSE((ELPP->vRegistry()->allowed(1, "easy.c")));
+}
+
+TEST(VerboseAppArgumentsTest, AppArgsVModulesExtension) {
+
+    el::Loggers::ScopedRemoveFlag scopedFlag(LoggingFlag::DisableVModulesExtensions);
+    ELPP_UNUSED(scopedFlag);
+    
+    const char* c[10];
+    c[0] = "myprog";
+    c[1] = "-vmodule=main*=3,easy*=1";
+    c[2] = "\0";
+    el::Helpers::setArgs(2, c);
+
+    EXPECT_TRUE((ELPP->vRegistry()->allowed(2, "main.cpp")));
+    EXPECT_TRUE((ELPP->vRegistry()->allowed(3, "main.h")));
+    EXPECT_FALSE((ELPP->vRegistry()->allowed(4, "main.c")));
+    EXPECT_FALSE((ELPP->vRegistry()->allowed(5, "main.cpp")));
+    
+    EXPECT_TRUE((ELPP->vRegistry()->allowed(2, "main.cxx")));
+    EXPECT_TRUE((ELPP->vRegistry()->allowed(1, "main.cc")));
+    EXPECT_TRUE((ELPP->vRegistry()->allowed(3, "main-file-for-prog.cc")));
+    EXPECT_TRUE(ELPP->vRegistry()->allowed(1, "easy.cpp"));
+    EXPECT_TRUE((ELPP->vRegistry()->allowed(1, "easy.cxx")));
+    EXPECT_TRUE((ELPP->vRegistry()->allowed(1, "easy.hxx")));
+    EXPECT_TRUE((ELPP->vRegistry()->allowed(1, "easy.hpp")));
+    EXPECT_TRUE((ELPP->vRegistry()->allowed(1, "easy.cc")));
+    EXPECT_TRUE((ELPP->vRegistry()->allowed(1, "easy.hh")));
+    EXPECT_TRUE((ELPP->vRegistry()->allowed(1, "easy.h")));
+    EXPECT_TRUE((ELPP->vRegistry()->allowed(1, "easy.c")));
+    EXPECT_FALSE((ELPP->vRegistry()->allowed(3, "easy-vector.cc")));
+    EXPECT_FALSE((ELPP->vRegistry()->allowed(2, "easy-vector.cc")));
+    EXPECT_TRUE((ELPP->vRegistry()->allowed(1, "easy-vector.cc")));
+}
+
+TEST(VerboseAppArgumentsTest, VModulesClear) {
+
+    el::Loggers::ScopedRemoveFlag scopedFlag(LoggingFlag::DisableVModulesExtensions);
+    ELPP_UNUSED(scopedFlag);
+
+    const char* c[10];
+    c[0] = "myprog";
+    c[1] = "-vmodule=main*=3,easy*=1";
+    c[2] = "--v=6";
+    c[3] = "\0";
+    el::Helpers::setArgs(3, c);
+
+    EXPECT_TRUE((ELPP->vRegistry()->allowed(2, "main.cpp")));
+    EXPECT_FALSE((ELPP->vRegistry()->allowed(5, "main.cpp")));
+    ELPP->vRegistry()->clearModules();
+    EXPECT_TRUE((ELPP->vRegistry()->allowed(2, "main.cpp")));
+    EXPECT_TRUE((ELPP->vRegistry()->allowed(5, "main.cpp")));
+    EXPECT_FALSE((ELPP->vRegistry()->allowed(7, "main.cpp")));
+    
+}
+
+#endif // VMODULE_TESTS_H_
diff --git a/vendor/github.com/muflihun/easyloggingpp/test/write-all-test.h b/vendor/github.com/muflihun/easyloggingpp/test/write-all-test.h
new file mode 100644
index 0000000..98d1b47
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/test/write-all-test.h
@@ -0,0 +1,111 @@
+
+#ifndef WRITE_ALL_TEST_H_
+#define WRITE_ALL_TEST_H_
+
+#include "test.h"
+
+TEST(WriteAllTest, Entry) {
+    reconfigureLoggersForTest();
+}
+
+#define TEST_LEVEL(l, name) \
+TEST(WriteAllTest, l) {\
+    std::string s;\
+    LOG(l) << name << " 1";\
+    s = BUILD_STR(getDate() << " " << name << " 1\n");\
+    EXPECT_EQ(s, tail(1));\
+    LOG_IF(true, l) << name << " 2";\
+    s = BUILD_STR(getDate() << " " << name << " 1\n"\
+               << getDate() << " " << name << " 2\n");\
+    EXPECT_EQ(s, tail(2));\
+    LOG_IF(true, l) << name << " 3";\
+    s = BUILD_STR(getDate() << " " << name << " 3\n");\
+    EXPECT_EQ(s, tail(1));\
+    LOG_IF(false, l) << "SHOULD NOT LOG";\
+    s = BUILD_STR(getDate() << " " << name << " 3\n");\
+    EXPECT_EQ(s, tail(1));\
+    LOG_EVERY_N(1, l) << name << " every n=1";\
+    s = BUILD_STR(getDate() << " " << name << " every n=1\n");\
+    LOG_AFTER_N(1, l) << name << " after n=1";\
+    s = BUILD_STR(getDate() << " " << name << " after n=1\n");\
+    LOG_N_TIMES(2, l) << name << " n times=2";\
+    s = BUILD_STR(getDate() << " " << name << " n times=2\n");\
+    EXPECT_EQ(s, tail(1));\
+}
+
+TEST_LEVEL(DEBUG, "Debug")
+TEST_LEVEL(INFO, "Info")
+TEST_LEVEL(ERROR, "Error")
+TEST_LEVEL(WARNING, "Warning")
+TEST_LEVEL(FATAL, "Fatal")
+TEST_LEVEL(TRACE, "Trace")
+
+TEST(WriteAllTest, VERBOSE) {
+    Configurations cOld(*Loggers::getLogger("default")->configurations());
+    Loggers::reconfigureAllLoggers(ConfigurationType::Format, "%datetime{%a %b %d, %H:%m} %level-%vlevel %msg");
+
+    el::Loggers::addFlag(el::LoggingFlag::AllowVerboseIfModuleNotSpecified); // Accept all verbose levels; we already have vmodules!
+
+    std::string s;
+    for (int i = 1; i <= 6; ++i)
+        VLOG_EVERY_N(2, 2) << "every n=" << i;
+
+    s = BUILD_STR(getDate() << " VERBOSE-2 every n=2\n"
+               << getDate() << " VERBOSE-2 every n=4\n"
+               << getDate() << " VERBOSE-2 every n=6\n");
+    EXPECT_EQ(s, tail(3));
+
+    VLOG_IF(true, 3) << "Test conditional verbose log";
+    s = BUILD_STR(getDate() << " VERBOSE-3 Test conditional verbose log\n");
+    EXPECT_EQ(s, tail(1));
+
+    VLOG_IF(false, 3) << "SHOULD NOT LOG";
+    // Should not log!
+    EXPECT_EQ(s, tail(1));
+
+    VLOG(3) << "Log normally (verbose)";
+    s = BUILD_STR(getDate() << " VERBOSE-3 Log normally (verbose)\n");
+    EXPECT_EQ(s, tail(1));
+
+    // Reset it back to old
+    Loggers::reconfigureAllLoggers(cOld);
+}
+
+TEST(WriteAllTest, EVERY_N) {
+    std::string s;
+    const char* levelName = "INFO";
+    for (int i = 1; i <= 6; ++i)
+        LOG_EVERY_N(2, INFO) << levelName << " every n=" << i;
+
+    s = BUILD_STR(getDate() << " " << levelName << " every n=2\n"
+               << getDate() << " " << levelName << " every n=4\n"
+               << getDate() << " " << levelName << " every n=6\n");
+    EXPECT_EQ(s, tail(3));
+}
+
+TEST(WriteAllTest, AFTER_N) {
+    std::string s;
+    const char* levelName = "INFO";
+    for (int i = 1; i <= 6; ++i)
+        LOG_AFTER_N(2, INFO) << levelName << " after n=" << i;
+
+    s = BUILD_STR(getDate() << " " << levelName << " after n=3\n"
+               << getDate() << " " << levelName << " after n=4\n"
+               << getDate() << " " << levelName << " after n=5\n"
+               << getDate() << " " << levelName << " after n=6\n");
+    EXPECT_EQ(s, tail(4));
+}
+
+TEST(WriteAllTest, N_TIMES) {
+    std::string s;
+    const char* levelName = "INFO";
+    for (int i = 1; i <= 6; ++i)
+        LOG_N_TIMES(4, INFO) << levelName << " n times=" << i;
+
+    s = BUILD_STR(getDate() << " " << levelName << " n times=1\n"
+               << getDate() << " " << levelName << " n times=2\n"
+               << getDate() << " " << levelName << " n times=3\n"
+               << getDate() << " " << levelName << " n times=4\n");
+    EXPECT_EQ(s, tail(4));
+}
+#endif // WRITE_ALL_TEST_H_
diff --git a/vendor/github.com/muflihun/easyloggingpp/tools/.gitignore b/vendor/github.com/muflihun/easyloggingpp/tools/.gitignore
new file mode 100644
index 0000000..707f488
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/tools/.gitignore
@@ -0,0 +1,2 @@
+releases/*
+latest.zip
diff --git a/vendor/github.com/muflihun/easyloggingpp/tools/cpplint.py b/vendor/github.com/muflihun/easyloggingpp/tools/cpplint.py
new file mode 100644
index 0000000..b5493b6
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/tools/cpplint.py
@@ -0,0 +1,4736 @@
+#!/usr/bin/python
+#
+# Copyright (c) 2009 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#    * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#    * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Does google-lint on c++ files.
+
+The goal of this script is to identify places in the code that *may*
+be in non-compliance with google style.  It does not attempt to fix
+up these problems -- the point is to educate.  It does also not
+attempt to find all problems, or to ensure that everything it does
+find is legitimately a problem.
+
+In particular, we can get very confused by /* and // inside strings!
+We do a small hack, which is to ignore //'s with "'s after them on the
+same line, but it is far from perfect (in either direction).
+"""
+
+import codecs
+import copy
+import getopt
+import math  # for log
+import os
+import re
+import sre_compile
+import string
+import sys
+import unicodedata
+
+
+_USAGE = """
+Syntax: cpplint.py [--verbose=#] [--output=vs7] [--filter=-x,+y,...]
+                   [--counting=total|toplevel|detailed] [--root=subdir]
+                   [--linelength=digits]
+        <file> [file] ...
+
+  The style guidelines this tries to follow are those in
+    http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml
+
+  Every problem is given a confidence score from 1-5, with 5 meaning we are
+  certain of the problem, and 1 meaning it could be a legitimate construct.
+  This will miss some errors, and is not a substitute for a code review.
+
+  To suppress false-positive errors of a certain category, add a
+  'NOLINT(category)' comment to the line.  NOLINT or NOLINT(*)
+  suppresses errors of all categories on that line.
+
+  The files passed in will be linted; at least one file must be provided.
+  Linted extensions are .cc, .cpp, and .h.  Other file types will be ignored.
+
+  Flags:
+
+    output=vs7
+      By default, the output is formatted to ease emacs parsing.  Visual Studio
+      compatible output (vs7) may also be used.  Other formats are unsupported.
+
+    verbose=#
+      Specify a number 0-5 to restrict errors to certain verbosity levels.
+
+    filter=-x,+y,...
+      Specify a comma-separated list of category-filters to apply: only
+      error messages whose category names pass the filters will be printed.
+      (Category names are printed with the message and look like
+      "[whitespace/indent]".)  Filters are evaluated left to right.
+      "-FOO" and "FOO" means "do not print categories that start with FOO".
+      "+FOO" means "do print categories that start with FOO".
+
+      Examples: --filter=-whitespace,+whitespace/braces
+                --filter=whitespace,runtime/printf,+runtime/printf_format
+                --filter=-,+build/include_what_you_use
+
+      To see a list of all the categories used in cpplint, pass no arg:
+         --filter=
+
+    counting=total|toplevel|detailed
+      The total number of errors found is always printed. If
+      'toplevel' is provided, then the count of errors in each of
+      the top-level categories like 'build' and 'whitespace' will
+      also be printed. If 'detailed' is provided, then a count
+      is provided for each category like 'build/class'.
+
+    root=subdir
+      The root directory used for deriving header guard CPP variable.
+      By default, the header guard CPP variable is calculated as the relative
+      path to the directory that contains .git, .hg, or .svn.  When this flag
+      is specified, the relative path is calculated from the specified
+      directory. If the specified directory does not exist, this flag is
+      ignored.
+
+      Examples:
+        Assuing that src/.git exists, the header guard CPP variables for
+        src/chrome/browser/ui/browser.h are:
+
+        No flag => CHROME_BROWSER_UI_BROWSER_H_
+        --root=chrome => BROWSER_UI_BROWSER_H_
+        --root=chrome/browser => UI_BROWSER_H_
+
+    linelength=digits
+      This is the allowed line length for the project. The default value is
+      80 characters.
+
+      Examples:
+        --linelength=120
+"""
+
+# We categorize each error message we print.  Here are the categories.
+# We want an explicit list so we can list them all in cpplint --filter=.
+# If you add a new error message with a new category, add it to the list
+# here!  cpplint_unittest.py should tell you if you forget to do this.
+_ERROR_CATEGORIES = [
+  'build/class',
+  'build/deprecated',
+  'build/endif_comment',
+  'build/explicit_make_pair',
+  'build/forward_decl',
+  'build/header_guard',
+  'build/include',
+  'build/include_alpha',
+  'build/include_order',
+  'build/include_what_you_use',
+  'build/namespaces',
+  'build/printf_format',
+  'build/storage_class',
+  'legal/copyright',
+  'readability/alt_tokens',
+  'readability/braces',
+  'readability/casting',
+  'readability/check',
+  'readability/constructors',
+  'readability/fn_size',
+  'readability/function',
+  'readability/multiline_comment',
+  'readability/multiline_string',
+  'readability/namespace',
+  'readability/nolint',
+  'readability/nul',
+  'readability/streams',
+  'readability/todo',
+  'readability/utf8',
+  'runtime/arrays',
+  'runtime/casting',
+  'runtime/explicit',
+  'runtime/int',
+  'runtime/init',
+  'runtime/invalid_increment',
+  'runtime/member_string_references',
+  'runtime/memset',
+  'runtime/operator',
+  'runtime/printf',
+  'runtime/printf_format',
+  'runtime/references',
+  'runtime/string',
+  'runtime/threadsafe_fn',
+  'runtime/vlog',
+  'whitespace/blank_line',
+  'whitespace/braces',
+  'whitespace/comma',
+  'whitespace/comments',
+  'whitespace/empty_conditional_body',
+  'whitespace/empty_loop_body',
+  'whitespace/end_of_line',
+  'whitespace/ending_newline',
+  'whitespace/forcolon',
+  'whitespace/indent',
+  'whitespace/line_length',
+  'whitespace/newline',
+  'whitespace/operators',
+  'whitespace/parens',
+  'whitespace/semicolon',
+  'whitespace/tab',
+  'whitespace/todo'
+  ]
+
+# The default state of the category filter. This is overrided by the --filter=
+# flag. By default all errors are on, so only add here categories that should be
+# off by default (i.e., categories that must be enabled by the --filter= flags).
+# All entries here should start with a '-' or '+', as in the --filter= flag.
+_DEFAULT_FILTERS = ['-build/include_alpha']
+
+# We used to check for high-bit characters, but after much discussion we
+# decided those were OK, as long as they were in UTF-8 and didn't represent
+# hard-coded international strings, which belong in a separate i18n file.
+
+
+# C++ headers
+_CPP_HEADERS = frozenset([
+    # Legacy
+    'algobase.h',
+    'algo.h',
+    'alloc.h',
+    'builtinbuf.h',
+    'bvector.h',
+    'complex.h',
+    'defalloc.h',
+    'deque.h',
+    'editbuf.h',
+    'fstream.h',
+    'function.h',
+    'hash_map',
+    'hash_map.h',
+    'hash_set',
+    'hash_set.h',
+    'hashtable.h',
+    'heap.h',
+    'indstream.h',
+    'iomanip.h',
+    'iostream.h',
+    'istream.h',
+    'iterator.h',
+    'list.h',
+    'map.h',
+    'multimap.h',
+    'multiset.h',
+    'ostream.h',
+    'pair.h',
+    'parsestream.h',
+    'pfstream.h',
+    'procbuf.h',
+    'pthread_alloc',
+    'pthread_alloc.h',
+    'rope',
+    'rope.h',
+    'ropeimpl.h',
+    'set.h',
+    'slist',
+    'slist.h',
+    'stack.h',
+    'stdiostream.h',
+    'stl_alloc.h',
+    'stl_relops.h',
+    'streambuf.h',
+    'stream.h',
+    'strfile.h',
+    'strstream.h',
+    'tempbuf.h',
+    'tree.h',
+    'type_traits.h',
+    'vector.h',
+    # 17.6.1.2 C++ library headers
+    'algorithm',
+    'array',
+    'atomic',
+    'bitset',
+    'chrono',
+    'codecvt',
+    'complex',
+    'condition_variable',
+    'deque',
+    'exception',
+    'forward_list',
+    'fstream',
+    'functional',
+    'future',
+    'initializer_list',
+    'iomanip',
+    'ios',
+    'iosfwd',
+    'iostream',
+    'istream',
+    'iterator',
+    'limits',
+    'list',
+    'locale',
+    'map',
+    'memory',
+    'mutex',
+    'new',
+    'numeric',
+    'ostream',
+    'queue',
+    'random',
+    'ratio',
+    'regex',
+    'set',
+    'sstream',
+    'stack',
+    'stdexcept',
+    'streambuf',
+    'string',
+    'strstream',
+    'system_error',
+    'thread',
+    'tuple',
+    'typeindex',
+    'typeinfo',
+    'type_traits',
+    'unordered_map',
+    'unordered_set',
+    'utility',
+    'valarray',
+    'vector',
+    # 17.6.1.2 C++ headers for C library facilities
+    'cassert',
+    'ccomplex',
+    'cctype',
+    'cerrno',
+    'cfenv',
+    'cfloat',
+    'cinttypes',
+    'ciso646',
+    'climits',
+    'clocale',
+    'cmath',
+    'csetjmp',
+    'csignal',
+    'cstdalign',
+    'cstdarg',
+    'cstdbool',
+    'cstddef',
+    'cstdint',
+    'cstdio',
+    'cstdlib',
+    'cstring',
+    'ctgmath',
+    'ctime',
+    'cuchar',
+    'cwchar',
+    'cwctype',
+    ])
+
+# Assertion macros.  These are defined in base/logging.h and
+# testing/base/gunit.h.  Note that the _M versions need to come first
+# for substring matching to work.
+_CHECK_MACROS = [
+    'DCHECK', 'CHECK',
+    'EXPECT_TRUE_M', 'EXPECT_TRUE',
+    'ASSERT_TRUE_M', 'ASSERT_TRUE',
+    'EXPECT_FALSE_M', 'EXPECT_FALSE',
+    'ASSERT_FALSE_M', 'ASSERT_FALSE',
+    ]
+
+# Replacement macros for CHECK/DCHECK/EXPECT_TRUE/EXPECT_FALSE
+_CHECK_REPLACEMENT = dict([(m, {}) for m in _CHECK_MACROS])
+
+for op, replacement in [('==', 'EQ'), ('!=', 'NE'),
+                        ('>=', 'GE'), ('>', 'GT'),
+                        ('<=', 'LE'), ('<', 'LT')]:
+  _CHECK_REPLACEMENT['DCHECK'][op] = 'DCHECK_%s' % replacement
+  _CHECK_REPLACEMENT['CHECK'][op] = 'CHECK_%s' % replacement
+  _CHECK_REPLACEMENT['EXPECT_TRUE'][op] = 'EXPECT_%s' % replacement
+  _CHECK_REPLACEMENT['ASSERT_TRUE'][op] = 'ASSERT_%s' % replacement
+  _CHECK_REPLACEMENT['EXPECT_TRUE_M'][op] = 'EXPECT_%s_M' % replacement
+  _CHECK_REPLACEMENT['ASSERT_TRUE_M'][op] = 'ASSERT_%s_M' % replacement
+
+for op, inv_replacement in [('==', 'NE'), ('!=', 'EQ'),
+                            ('>=', 'LT'), ('>', 'LE'),
+                            ('<=', 'GT'), ('<', 'GE')]:
+  _CHECK_REPLACEMENT['EXPECT_FALSE'][op] = 'EXPECT_%s' % inv_replacement
+  _CHECK_REPLACEMENT['ASSERT_FALSE'][op] = 'ASSERT_%s' % inv_replacement
+  _CHECK_REPLACEMENT['EXPECT_FALSE_M'][op] = 'EXPECT_%s_M' % inv_replacement
+  _CHECK_REPLACEMENT['ASSERT_FALSE_M'][op] = 'ASSERT_%s_M' % inv_replacement
+
+# Alternative tokens and their replacements.  For full list, see section 2.5
+# Alternative tokens [lex.digraph] in the C++ standard.
+#
+# Digraphs (such as '%:') are not included here since it's a mess to
+# match those on a word boundary.
+_ALT_TOKEN_REPLACEMENT = {
+    'and': '&&',
+    'bitor': '|',
+    'or': '||',
+    'xor': '^',
+    'compl': '~',
+    'bitand': '&',
+    'and_eq': '&=',
+    'or_eq': '|=',
+    'xor_eq': '^=',
+    'not': '!',
+    'not_eq': '!='
+    }
+
+# Compile regular expression that matches all the above keywords.  The "[ =()]"
+# bit is meant to avoid matching these keywords outside of boolean expressions.
+#
+# False positives include C-style multi-line comments and multi-line strings
+# but those have always been troublesome for cpplint.
+_ALT_TOKEN_REPLACEMENT_PATTERN = re.compile(
+    r'[ =()](' + ('|'.join(_ALT_TOKEN_REPLACEMENT.keys())) + r')(?=[ (]|$)')
+
+
+# These constants define types of headers for use with
+# _IncludeState.CheckNextIncludeOrder().
+_C_SYS_HEADER = 1
+_CPP_SYS_HEADER = 2
+_LIKELY_MY_HEADER = 3
+_POSSIBLE_MY_HEADER = 4
+_OTHER_HEADER = 5
+
+# These constants define the current inline assembly state
+_NO_ASM = 0       # Outside of inline assembly block
+_INSIDE_ASM = 1   # Inside inline assembly block
+_END_ASM = 2      # Last line of inline assembly block
+_BLOCK_ASM = 3    # The whole block is an inline assembly block
+
+# Match start of assembly blocks
+_MATCH_ASM = re.compile(r'^\s*(?:asm|_asm|__asm|__asm__)'
+                        r'(?:\s+(volatile|__volatile__))?'
+                        r'\s*[{(]')
+
+
+_regexp_compile_cache = {}
+
+# Finds occurrences of NOLINT or NOLINT(...).
+_RE_SUPPRESSION = re.compile(r'\bNOLINT\b(\([^)]*\))?')
+
+# {str, set(int)}: a map from error categories to sets of linenumbers
+# on which those errors are expected and should be suppressed.
+_error_suppressions = {}
+
+# The root directory used for deriving header guard CPP variable.
+# This is set by --root flag.
+_root = None
+
+# The allowed line length of files.
+# This is set by --linelength flag.
+_line_length = 80
+
+def ParseNolintSuppressions(filename, raw_line, linenum, error):
+  """Updates the global list of error-suppressions.
+
+  Parses any NOLINT comments on the current line, updating the global
+  error_suppressions store.  Reports an error if the NOLINT comment
+  was malformed.
+
+  Args:
+    filename: str, the name of the input file.
+    raw_line: str, the line of input text, with comments.
+    linenum: int, the number of the current line.
+    error: function, an error handler.
+  """
+  # FIXME(adonovan): "NOLINT(" is misparsed as NOLINT(*).
+  matched = _RE_SUPPRESSION.search(raw_line)
+  if matched:
+    category = matched.group(1)
+    if category in (None, '(*)'):  # => "suppress all"
+      _error_suppressions.setdefault(None, set()).add(linenum)
+    else:
+      if category.startswith('(') and category.endswith(')'):
+        category = category[1:-1]
+        if category in _ERROR_CATEGORIES:
+          _error_suppressions.setdefault(category, set()).add(linenum)
+        else:
+          error(filename, linenum, 'readability/nolint', 5,
+                'Unknown NOLINT error category: %s' % category)
+
+
+def ResetNolintSuppressions():
+  "Resets the set of NOLINT suppressions to empty."
+  _error_suppressions.clear()
+
+
+def IsErrorSuppressedByNolint(category, linenum):
+  """Returns true if the specified error category is suppressed on this line.
+
+  Consults the global error_suppressions map populated by
+  ParseNolintSuppressions/ResetNolintSuppressions.
+
+  Args:
+    category: str, the category of the error.
+    linenum: int, the current line number.
+  Returns:
+    bool, True iff the error should be suppressed due to a NOLINT comment.
+  """
+  return (linenum in _error_suppressions.get(category, set()) or
+          linenum in _error_suppressions.get(None, set()))
+
+def Match(pattern, s):
+  """Matches the string with the pattern, caching the compiled regexp."""
+  # The regexp compilation caching is inlined in both Match and Search for
+  # performance reasons; factoring it out into a separate function turns out
+  # to be noticeably expensive.
+  if pattern not in _regexp_compile_cache:
+    _regexp_compile_cache[pattern] = sre_compile.compile(pattern)
+  return _regexp_compile_cache[pattern].match(s)
+
+
+def ReplaceAll(pattern, rep, s):
+  """Replaces instances of pattern in a string with a replacement.
+
+  The compiled regex is kept in a cache shared by Match and Search.
+
+  Args:
+    pattern: regex pattern
+    rep: replacement text
+    s: search string
+
+  Returns:
+    string with replacements made (or original string if no replacements)
+  """
+  if pattern not in _regexp_compile_cache:
+    _regexp_compile_cache[pattern] = sre_compile.compile(pattern)
+  return _regexp_compile_cache[pattern].sub(rep, s)
+
+
+def Search(pattern, s):
+  """Searches the string for the pattern, caching the compiled regexp."""
+  if pattern not in _regexp_compile_cache:
+    _regexp_compile_cache[pattern] = sre_compile.compile(pattern)
+  return _regexp_compile_cache[pattern].search(s)
+
+
+class _IncludeState(dict):
+  """Tracks line numbers for includes, and the order in which includes appear.
+
+  As a dict, an _IncludeState object serves as a mapping between include
+  filename and line number on which that file was included.
+
+  Call CheckNextIncludeOrder() once for each header in the file, passing
+  in the type constants defined above. Calls in an illegal order will
+  raise an _IncludeError with an appropriate error message.
+
+  """
+  # self._section will move monotonically through this set. If it ever
+  # needs to move backwards, CheckNextIncludeOrder will raise an error.
+  _INITIAL_SECTION = 0
+  _MY_H_SECTION = 1
+  _C_SECTION = 2
+  _CPP_SECTION = 3
+  _OTHER_H_SECTION = 4
+
+  _TYPE_NAMES = {
+      _C_SYS_HEADER: 'C system header',
+      _CPP_SYS_HEADER: 'C++ system header',
+      _LIKELY_MY_HEADER: 'header this file implements',
+      _POSSIBLE_MY_HEADER: 'header this file may implement',
+      _OTHER_HEADER: 'other header',
+      }
+  _SECTION_NAMES = {
+      _INITIAL_SECTION: "... nothing. (This can't be an error.)",
+      _MY_H_SECTION: 'a header this file implements',
+      _C_SECTION: 'C system header',
+      _CPP_SECTION: 'C++ system header',
+      _OTHER_H_SECTION: 'other header',
+      }
+
+  def __init__(self):
+    dict.__init__(self)
+    self.ResetSection()
+
+  def ResetSection(self):
+    # The name of the current section.
+    self._section = self._INITIAL_SECTION
+    # The path of last found header.
+    self._last_header = ''
+
+  def SetLastHeader(self, header_path):
+    self._last_header = header_path
+
+  def CanonicalizeAlphabeticalOrder(self, header_path):
+    """Returns a path canonicalized for alphabetical comparison.
+
+    - replaces "-" with "_" so they both cmp the same.
+    - removes '-inl' since we don't require them to be after the main header.
+    - lowercase everything, just in case.
+
+    Args:
+      header_path: Path to be canonicalized.
+
+    Returns:
+      Canonicalized path.
+    """
+    return header_path.replace('-inl.h', '.h').replace('-', '_').lower()
+
+  def IsInAlphabeticalOrder(self, clean_lines, linenum, header_path):
+    """Check if a header is in alphabetical order with the previous header.
+
+    Args:
+      clean_lines: A CleansedLines instance containing the file.
+      linenum: The number of the line to check.
+      header_path: Canonicalized header to be checked.
+
+    Returns:
+      Returns true if the header is in alphabetical order.
+    """
+    # If previous section is different from current section, _last_header will
+    # be reset to empty string, so it's always less than current header.
+    #
+    # If previous line was a blank line, assume that the headers are
+    # intentionally sorted the way they are.
+    if (self._last_header > header_path and
+        not Match(r'^\s*$', clean_lines.elided[linenum - 1])):
+      return False
+    return True
+
+  def CheckNextIncludeOrder(self, header_type):
+    """Returns a non-empty error message if the next header is out of order.
+
+    This function also updates the internal state to be ready to check
+    the next include.
+
+    Args:
+      header_type: One of the _XXX_HEADER constants defined above.
+
+    Returns:
+      The empty string if the header is in the right order, or an
+      error message describing what's wrong.
+
+    """
+    error_message = ('Found %s after %s' %
+                     (self._TYPE_NAMES[header_type],
+                      self._SECTION_NAMES[self._section]))
+
+    last_section = self._section
+
+    if header_type == _C_SYS_HEADER:
+      if self._section <= self._C_SECTION:
+        self._section = self._C_SECTION
+      else:
+        self._last_header = ''
+        return error_message
+    elif header_type == _CPP_SYS_HEADER:
+      if self._section <= self._CPP_SECTION:
+        self._section = self._CPP_SECTION
+      else:
+        self._last_header = ''
+        return error_message
+    elif header_type == _LIKELY_MY_HEADER:
+      if self._section <= self._MY_H_SECTION:
+        self._section = self._MY_H_SECTION
+      else:
+        self._section = self._OTHER_H_SECTION
+    elif header_type == _POSSIBLE_MY_HEADER:
+      if self._section <= self._MY_H_SECTION:
+        self._section = self._MY_H_SECTION
+      else:
+        # This will always be the fallback because we're not sure
+        # enough that the header is associated with this file.
+        self._section = self._OTHER_H_SECTION
+    else:
+      assert header_type == _OTHER_HEADER
+      self._section = self._OTHER_H_SECTION
+
+    if last_section != self._section:
+      self._last_header = ''
+
+    return ''
+
+
+class _CppLintState(object):
+  """Maintains module-wide state.."""
+
+  def __init__(self):
+    self.verbose_level = 1  # global setting.
+    self.error_count = 0    # global count of reported errors
+    # filters to apply when emitting error messages
+    self.filters = _DEFAULT_FILTERS[:]
+    self.counting = 'total'  # In what way are we counting errors?
+    self.errors_by_category = {}  # string to int dict storing error counts
+
+    # output format:
+    # "emacs" - format that emacs can parse (default)
+    # "vs7" - format that Microsoft Visual Studio 7 can parse
+    self.output_format = 'emacs'
+
+  def SetOutputFormat(self, output_format):
+    """Sets the output format for errors."""
+    self.output_format = output_format
+
+  def SetVerboseLevel(self, level):
+    """Sets the module's verbosity, and returns the previous setting."""
+    last_verbose_level = self.verbose_level
+    self.verbose_level = level
+    return last_verbose_level
+
+  def SetCountingStyle(self, counting_style):
+    """Sets the module's counting options."""
+    self.counting = counting_style
+
+  def SetFilters(self, filters):
+    """Sets the error-message filters.
+
+    These filters are applied when deciding whether to emit a given
+    error message.
+
+    Args:
+      filters: A string of comma-separated filters (eg "+whitespace/indent").
+               Each filter should start with + or -; else we die.
+
+    Raises:
+      ValueError: The comma-separated filters did not all start with '+' or '-'.
+                  E.g. "-,+whitespace,-whitespace/indent,whitespace/badfilter"
+    """
+    # Default filters always have less priority than the flag ones.
+    self.filters = _DEFAULT_FILTERS[:]
+    for filt in filters.split(','):
+      clean_filt = filt.strip()
+      if clean_filt:
+        self.filters.append(clean_filt)
+    for filt in self.filters:
+      if not (filt.startswith('+') or filt.startswith('-')):
+        raise ValueError('Every filter in --filters must start with + or -'
+                         ' (%s does not)' % filt)
+
+  def ResetErrorCounts(self):
+    """Sets the module's error statistic back to zero."""
+    self.error_count = 0
+    self.errors_by_category = {}
+
+  def IncrementErrorCount(self, category):
+    """Bumps the module's error statistic."""
+    self.error_count += 1
+    if self.counting in ('toplevel', 'detailed'):
+      if self.counting != 'detailed':
+        category = category.split('/')[0]
+      if category not in self.errors_by_category:
+        self.errors_by_category[category] = 0
+      self.errors_by_category[category] += 1
+
+  def PrintErrorCounts(self):
+    """Print a summary of errors by category, and the total."""
+    for category, count in self.errors_by_category.iteritems():
+      sys.stderr.write('Category \'%s\' errors found: %d\n' %
+                       (category, count))
+    sys.stderr.write('Total errors found: %d\n' % self.error_count)
+
+_cpplint_state = _CppLintState()
+
+
+def _OutputFormat():
+  """Gets the module's output format."""
+  return _cpplint_state.output_format
+
+
+def _SetOutputFormat(output_format):
+  """Sets the module's output format."""
+  _cpplint_state.SetOutputFormat(output_format)
+
+
+def _VerboseLevel():
+  """Returns the module's verbosity setting."""
+  return _cpplint_state.verbose_level
+
+
+def _SetVerboseLevel(level):
+  """Sets the module's verbosity, and returns the previous setting."""
+  return _cpplint_state.SetVerboseLevel(level)
+
+
+def _SetCountingStyle(level):
+  """Sets the module's counting options."""
+  _cpplint_state.SetCountingStyle(level)
+
+
+def _Filters():
+  """Returns the module's list of output filters, as a list."""
+  return _cpplint_state.filters
+
+
+def _SetFilters(filters):
+  """Sets the module's error-message filters.
+
+  These filters are applied when deciding whether to emit a given
+  error message.
+
+  Args:
+    filters: A string of comma-separated filters (eg "whitespace/indent").
+             Each filter should start with + or -; else we die.
+  """
+  _cpplint_state.SetFilters(filters)
+
+
+class _FunctionState(object):
+  """Tracks current function name and the number of lines in its body."""
+
+  _NORMAL_TRIGGER = 250  # for --v=0, 500 for --v=1, etc.
+  _TEST_TRIGGER = 400    # about 50% more than _NORMAL_TRIGGER.
+
+  def __init__(self):
+    self.in_a_function = False
+    self.lines_in_function = 0
+    self.current_function = ''
+
+  def Begin(self, function_name):
+    """Start analyzing function body.
+
+    Args:
+      function_name: The name of the function being tracked.
+    """
+    self.in_a_function = True
+    self.lines_in_function = 0
+    self.current_function = function_name
+
+  def Count(self):
+    """Count line in current function body."""
+    if self.in_a_function:
+      self.lines_in_function += 1
+
+  def Check(self, error, filename, linenum):
+    """Report if too many lines in function body.
+
+    Args:
+      error: The function to call with any errors found.
+      filename: The name of the current file.
+      linenum: The number of the line to check.
+    """
+    if Match(r'T(EST|est)', self.current_function):
+      base_trigger = self._TEST_TRIGGER
+    else:
+      base_trigger = self._NORMAL_TRIGGER
+    trigger = base_trigger * 2**_VerboseLevel()
+
+    if self.lines_in_function > trigger:
+      error_level = int(math.log(self.lines_in_function / base_trigger, 2))
+      # 50 => 0, 100 => 1, 200 => 2, 400 => 3, 800 => 4, 1600 => 5, ...
+      if error_level > 5:
+        error_level = 5
+      error(filename, linenum, 'readability/fn_size', error_level,
+            'Small and focused functions are preferred:'
+            ' %s has %d non-comment lines'
+            ' (error triggered by exceeding %d lines).'  % (
+                self.current_function, self.lines_in_function, trigger))
+
+  def End(self):
+    """Stop analyzing function body."""
+    self.in_a_function = False
+
+
+class _IncludeError(Exception):
+  """Indicates a problem with the include order in a file."""
+  pass
+
+
+class FileInfo:
+  """Provides utility functions for filenames.
+
+  FileInfo provides easy access to the components of a file's path
+  relative to the project root.
+  """
+
+  def __init__(self, filename):
+    self._filename = filename
+
+  def FullName(self):
+    """Make Windows paths like Unix."""
+    return os.path.abspath(self._filename).replace('\\', '/')
+
+  def RepositoryName(self):
+    """FullName after removing the local path to the repository.
+
+    If we have a real absolute path name here we can try to do something smart:
+    detecting the root of the checkout and truncating /path/to/checkout from
+    the name so that we get header guards that don't include things like
+    "C:\Documents and Settings\..." or "/home/username/..." in them and thus
+    people on different computers who have checked the source out to different
+    locations won't see bogus errors.
+    """
+    fullname = self.FullName()
+
+    if os.path.exists(fullname):
+      project_dir = os.path.dirname(fullname)
+
+      if os.path.exists(os.path.join(project_dir, ".svn")):
+        # If there's a .svn file in the current directory, we recursively look
+        # up the directory tree for the top of the SVN checkout
+        root_dir = project_dir
+        one_up_dir = os.path.dirname(root_dir)
+        while os.path.exists(os.path.join(one_up_dir, ".svn")):
+          root_dir = os.path.dirname(root_dir)
+          one_up_dir = os.path.dirname(one_up_dir)
+
+        prefix = os.path.commonprefix([root_dir, project_dir])
+        return fullname[len(prefix) + 1:]
+
+      # Not SVN <= 1.6? Try to find a git, hg, or svn top level directory by
+      # searching up from the current path.
+      root_dir = os.path.dirname(fullname)
+      while (root_dir != os.path.dirname(root_dir) and
+             not os.path.exists(os.path.join(root_dir, ".git")) and
+             not os.path.exists(os.path.join(root_dir, ".hg")) and
+             not os.path.exists(os.path.join(root_dir, ".svn"))):
+        root_dir = os.path.dirname(root_dir)
+
+      if (os.path.exists(os.path.join(root_dir, ".git")) or
+          os.path.exists(os.path.join(root_dir, ".hg")) or
+          os.path.exists(os.path.join(root_dir, ".svn"))):
+        prefix = os.path.commonprefix([root_dir, project_dir])
+        return fullname[len(prefix) + 1:]
+
+    # Don't know what to do; header guard warnings may be wrong...
+    return fullname
+
+  def Split(self):
+    """Splits the file into the directory, basename, and extension.
+
+    For 'chrome/browser/browser.cc', Split() would
+    return ('chrome/browser', 'browser', '.cc')
+
+    Returns:
+      A tuple of (directory, basename, extension).
+    """
+
+    googlename = self.RepositoryName()
+    project, rest = os.path.split(googlename)
+    return (project,) + os.path.splitext(rest)
+
+  def BaseName(self):
+    """File base name - text after the final slash, before the final period."""
+    return self.Split()[1]
+
+  def Extension(self):
+    """File extension - text following the final period."""
+    return self.Split()[2]
+
+  def NoExtension(self):
+    """File has no source file extension."""
+    return '/'.join(self.Split()[0:2])
+
+  def IsSource(self):
+    """File has a source file extension."""
+    return self.Extension()[1:] in ('c', 'cc', 'cpp', 'cxx')
+
+
+def _ShouldPrintError(category, confidence, linenum):
+  """If confidence >= verbose, category passes filter and is not suppressed."""
+
+  # There are three ways we might decide not to print an error message:
+  # a "NOLINT(category)" comment appears in the source,
+  # the verbosity level isn't high enough, or the filters filter it out.
+  if IsErrorSuppressedByNolint(category, linenum):
+    return False
+  if confidence < _cpplint_state.verbose_level:
+    return False
+
+  is_filtered = False
+  for one_filter in _Filters():
+    if one_filter.startswith('-'):
+      if category.startswith(one_filter[1:]):
+        is_filtered = True
+    elif one_filter.startswith('+'):
+      if category.startswith(one_filter[1:]):
+        is_filtered = False
+    else:
+      assert False  # should have been checked for in SetFilter.
+  if is_filtered:
+    return False
+
+  return True
+
+
+def Error(filename, linenum, category, confidence, message):
+  """Logs the fact we've found a lint error.
+
+  We log where the error was found, and also our confidence in the error,
+  that is, how certain we are this is a legitimate style regression, and
+  not a misidentification or a use that's sometimes justified.
+
+  False positives can be suppressed by the use of
+  "cpplint(category)"  comments on the offending line.  These are
+  parsed into _error_suppressions.
+
+  Args:
+    filename: The name of the file containing the error.
+    linenum: The number of the line containing the error.
+    category: A string used to describe the "category" this bug
+      falls under: "whitespace", say, or "runtime".  Categories
+      may have a hierarchy separated by slashes: "whitespace/indent".
+    confidence: A number from 1-5 representing a confidence score for
+      the error, with 5 meaning that we are certain of the problem,
+      and 1 meaning that it could be a legitimate construct.
+    message: The error message.
+  """
+  if _ShouldPrintError(category, confidence, linenum):
+    _cpplint_state.IncrementErrorCount(category)
+    if _cpplint_state.output_format == 'vs7':
+      sys.stderr.write('%s(%s):  %s  [%s] [%d]\n' % (
+          filename, linenum, message, category, confidence))
+    elif _cpplint_state.output_format == 'eclipse':
+      sys.stderr.write('%s:%s: warning: %s  [%s] [%d]\n' % (
+          filename, linenum, message, category, confidence))
+    else:
+      sys.stderr.write('%s:%s:  %s  [%s] [%d]\n' % (
+          filename, linenum, message, category, confidence))
+
+
+# Matches standard C++ escape sequences per 2.13.2.3 of the C++ standard.
+_RE_PATTERN_CLEANSE_LINE_ESCAPES = re.compile(
+    r'\\([abfnrtv?"\\\']|\d+|x[0-9a-fA-F]+)')
+# Matches strings.  Escape codes should already be removed by ESCAPES.
+_RE_PATTERN_CLEANSE_LINE_DOUBLE_QUOTES = re.compile(r'"[^"]*"')
+# Matches characters.  Escape codes should already be removed by ESCAPES.
+_RE_PATTERN_CLEANSE_LINE_SINGLE_QUOTES = re.compile(r"'.'")
+# Matches multi-line C++ comments.
+# This RE is a little bit more complicated than one might expect, because we
+# have to take care of space removals tools so we can handle comments inside
+# statements better.
+# The current rule is: We only clear spaces from both sides when we're at the
+# end of the line. Otherwise, we try to remove spaces from the right side,
+# if this doesn't work we try on left side but only if there's a non-character
+# on the right.
+_RE_PATTERN_CLEANSE_LINE_C_COMMENTS = re.compile(
+    r"""(\s*/\*.*\*/\s*$|
+            /\*.*\*/\s+|
+         \s+/\*.*\*/(?=\W)|
+            /\*.*\*/)""", re.VERBOSE)
+
+
+def IsCppString(line):
+  """Does line terminate so, that the next symbol is in string constant.
+
+  This function does not consider single-line nor multi-line comments.
+
+  Args:
+    line: is a partial line of code starting from the 0..n.
+
+  Returns:
+    True, if next character appended to 'line' is inside a
+    string constant.
+  """
+
+  line = line.replace(r'\\', 'XX')  # after this, \\" does not match to \"
+  return ((line.count('"') - line.count(r'\"') - line.count("'\"'")) & 1) == 1
+
+
+def CleanseRawStrings(raw_lines):
+  """Removes C++11 raw strings from lines.
+
+    Before:
+      static const char kData[] = R"(
+          multi-line string
+          )";
+
+    After:
+      static const char kData[] = ""
+          (replaced by blank line)
+          "";
+
+  Args:
+    raw_lines: list of raw lines.
+
+  Returns:
+    list of lines with C++11 raw strings replaced by empty strings.
+  """
+
+  delimiter = None
+  lines_without_raw_strings = []
+  for line in raw_lines:
+    if delimiter:
+      # Inside a raw string, look for the end
+      end = line.find(delimiter)
+      if end >= 0:
+        # Found the end of the string, match leading space for this
+        # line and resume copying the original lines, and also insert
+        # a "" on the last line.
+        leading_space = Match(r'^(\s*)\S', line)
+        line = leading_space.group(1) + '""' + line[end + len(delimiter):]
+        delimiter = None
+      else:
+        # Haven't found the end yet, append a blank line.
+        line = ''
+
+    else:
+      # Look for beginning of a raw string.
+      # See 2.14.15 [lex.string] for syntax.
+      matched = Match(r'^(.*)\b(?:R|u8R|uR|UR|LR)"([^\s\\()]*)\((.*)$', line)
+      if matched:
+        delimiter = ')' + matched.group(2) + '"'
+
+        end = matched.group(3).find(delimiter)
+        if end >= 0:
+          # Raw string ended on same line
+          line = (matched.group(1) + '""' +
+                  matched.group(3)[end + len(delimiter):])
+          delimiter = None
+        else:
+          # Start of a multi-line raw string
+          line = matched.group(1) + '""'
+
+    lines_without_raw_strings.append(line)
+
+  # TODO(unknown): if delimiter is not None here, we might want to
+  # emit a warning for unterminated string.
+  return lines_without_raw_strings
+
+
+def FindNextMultiLineCommentStart(lines, lineix):
+  """Find the beginning marker for a multiline comment."""
+  while lineix < len(lines):
+    if lines[lineix].strip().startswith('/*'):
+      # Only return this marker if the comment goes beyond this line
+      if lines[lineix].strip().find('*/', 2) < 0:
+        return lineix
+    lineix += 1
+  return len(lines)
+
+
+def FindNextMultiLineCommentEnd(lines, lineix):
+  """We are inside a comment, find the end marker."""
+  while lineix < len(lines):
+    if lines[lineix].strip().endswith('*/'):
+      return lineix
+    lineix += 1
+  return len(lines)
+
+
+def RemoveMultiLineCommentsFromRange(lines, begin, end):
+  """Clears a range of lines for multi-line comments."""
+  # Having // dummy comments makes the lines non-empty, so we will not get
+  # unnecessary blank line warnings later in the code.
+  for i in range(begin, end):
+    lines[i] = '// dummy'
+
+
+def RemoveMultiLineComments(filename, lines, error):
+  """Removes multiline (c-style) comments from lines."""
+  lineix = 0
+  while lineix < len(lines):
+    lineix_begin = FindNextMultiLineCommentStart(lines, lineix)
+    if lineix_begin >= len(lines):
+      return
+    lineix_end = FindNextMultiLineCommentEnd(lines, lineix_begin)
+    if lineix_end >= len(lines):
+      error(filename, lineix_begin + 1, 'readability/multiline_comment', 5,
+            'Could not find end of multi-line comment')
+      return
+    RemoveMultiLineCommentsFromRange(lines, lineix_begin, lineix_end + 1)
+    lineix = lineix_end + 1
+
+
+def CleanseComments(line):
+  """Removes //-comments and single-line C-style /* */ comments.
+
+  Args:
+    line: A line of C++ source.
+
+  Returns:
+    The line with single-line comments removed.
+  """
+  commentpos = line.find('//')
+  if commentpos != -1 and not IsCppString(line[:commentpos]):
+    line = line[:commentpos].rstrip()
+  # get rid of /* ... */
+  return _RE_PATTERN_CLEANSE_LINE_C_COMMENTS.sub('', line)
+
+
+class CleansedLines(object):
+  """Holds 3 copies of all lines with different preprocessing applied to them.
+
+  1) elided member contains lines without strings and comments,
+  2) lines member contains lines without comments, and
+  3) raw_lines member contains all the lines without processing.
+  All these three members are of <type 'list'>, and of the same length.
+  """
+
+  def __init__(self, lines):
+    self.elided = []
+    self.lines = []
+    self.raw_lines = lines
+    self.num_lines = len(lines)
+    self.lines_without_raw_strings = CleanseRawStrings(lines)
+    for linenum in range(len(self.lines_without_raw_strings)):
+      self.lines.append(CleanseComments(
+          self.lines_without_raw_strings[linenum]))
+      elided = self._CollapseStrings(self.lines_without_raw_strings[linenum])
+      self.elided.append(CleanseComments(elided))
+
+  def NumLines(self):
+    """Returns the number of lines represented."""
+    return self.num_lines
+
+  @staticmethod
+  def _CollapseStrings(elided):
+    """Collapses strings and chars on a line to simple "" or '' blocks.
+
+    We nix strings first so we're not fooled by text like '"http://"'
+
+    Args:
+      elided: The line being processed.
+
+    Returns:
+      The line with collapsed strings.
+    """
+    if not _RE_PATTERN_INCLUDE.match(elided):
+      # Remove escaped characters first to make quote/single quote collapsing
+      # basic.  Things that look like escaped characters shouldn't occur
+      # outside of strings and chars.
+      elided = _RE_PATTERN_CLEANSE_LINE_ESCAPES.sub('', elided)
+      elided = _RE_PATTERN_CLEANSE_LINE_SINGLE_QUOTES.sub("''", elided)
+      elided = _RE_PATTERN_CLEANSE_LINE_DOUBLE_QUOTES.sub('""', elided)
+    return elided
+
+
+def FindEndOfExpressionInLine(line, startpos, depth, startchar, endchar):
+  """Find the position just after the matching endchar.
+
+  Args:
+    line: a CleansedLines line.
+    startpos: start searching at this position.
+    depth: nesting level at startpos.
+    startchar: expression opening character.
+    endchar: expression closing character.
+
+  Returns:
+    On finding matching endchar: (index just after matching endchar, 0)
+    Otherwise: (-1, new depth at end of this line)
+  """
+  for i in xrange(startpos, len(line)):
+    if line[i] == startchar:
+      depth += 1
+    elif line[i] == endchar:
+      depth -= 1
+      if depth == 0:
+        return (i + 1, 0)
+  return (-1, depth)
+
+
+def CloseExpression(clean_lines, linenum, pos):
+  """If input points to ( or { or [ or <, finds the position that closes it.
+
+  If lines[linenum][pos] points to a '(' or '{' or '[' or '<', finds the
+  linenum/pos that correspond to the closing of the expression.
+
+  Args:
+    clean_lines: A CleansedLines instance containing the file.
+    linenum: The number of the line to check.
+    pos: A position on the line.
+
+  Returns:
+    A tuple (line, linenum, pos) pointer *past* the closing brace, or
+    (line, len(lines), -1) if we never find a close.  Note we ignore
+    strings and comments when matching; and the line we return is the
+    'cleansed' line at linenum.
+  """
+
+  line = clean_lines.elided[linenum]
+  startchar = line[pos]
+  if startchar not in '({[<':
+    return (line, clean_lines.NumLines(), -1)
+  if startchar == '(': endchar = ')'
+  if startchar == '[': endchar = ']'
+  if startchar == '{': endchar = '}'
+  if startchar == '<': endchar = '>'
+
+  # Check first line
+  (end_pos, num_open) = FindEndOfExpressionInLine(
+      line, pos, 0, startchar, endchar)
+  if end_pos > -1:
+    return (line, linenum, end_pos)
+
+  # Continue scanning forward
+  while linenum < clean_lines.NumLines() - 1:
+    linenum += 1
+    line = clean_lines.elided[linenum]
+    (end_pos, num_open) = FindEndOfExpressionInLine(
+        line, 0, num_open, startchar, endchar)
+    if end_pos > -1:
+      return (line, linenum, end_pos)
+
+  # Did not find endchar before end of file, give up
+  return (line, clean_lines.NumLines(), -1)
+
+
+def FindStartOfExpressionInLine(line, endpos, depth, startchar, endchar):
+  """Find position at the matching startchar.
+
+  This is almost the reverse of FindEndOfExpressionInLine, but note
+  that the input position and returned position differs by 1.
+
+  Args:
+    line: a CleansedLines line.
+    endpos: start searching at this position.
+    depth: nesting level at endpos.
+    startchar: expression opening character.
+    endchar: expression closing character.
+
+  Returns:
+    On finding matching startchar: (index at matching startchar, 0)
+    Otherwise: (-1, new depth at beginning of this line)
+  """
+  for i in xrange(endpos, -1, -1):
+    if line[i] == endchar:
+      depth += 1
+    elif line[i] == startchar:
+      depth -= 1
+      if depth == 0:
+        return (i, 0)
+  return (-1, depth)
+
+
+def ReverseCloseExpression(clean_lines, linenum, pos):
+  """If input points to ) or } or ] or >, finds the position that opens it.
+
+  If lines[linenum][pos] points to a ')' or '}' or ']' or '>', finds the
+  linenum/pos that correspond to the opening of the expression.
+
+  Args:
+    clean_lines: A CleansedLines instance containing the file.
+    linenum: The number of the line to check.
+    pos: A position on the line.
+
+  Returns:
+    A tuple (line, linenum, pos) pointer *at* the opening brace, or
+    (line, 0, -1) if we never find the matching opening brace.  Note
+    we ignore strings and comments when matching; and the line we
+    return is the 'cleansed' line at linenum.
+  """
+  line = clean_lines.elided[linenum]
+  endchar = line[pos]
+  if endchar not in ')}]>':
+    return (line, 0, -1)
+  if endchar == ')': startchar = '('
+  if endchar == ']': startchar = '['
+  if endchar == '}': startchar = '{'
+  if endchar == '>': startchar = '<'
+
+  # Check last line
+  (start_pos, num_open) = FindStartOfExpressionInLine(
+      line, pos, 0, startchar, endchar)
+  if start_pos > -1:
+    return (line, linenum, start_pos)
+
+  # Continue scanning backward
+  while linenum > 0:
+    linenum -= 1
+    line = clean_lines.elided[linenum]
+    (start_pos, num_open) = FindStartOfExpressionInLine(
+        line, len(line) - 1, num_open, startchar, endchar)
+    if start_pos > -1:
+      return (line, linenum, start_pos)
+
+  # Did not find startchar before beginning of file, give up
+  return (line, 0, -1)
+
+
+def CheckForCopyright(filename, lines, error):
+  """Logs an error if no Copyright message appears at the top of the file."""
+
+  # We'll say it should occur by line 10. Don't forget there's a
+  # dummy line at the front.
+  for line in xrange(1, min(len(lines), 11)):
+    if re.search(r'Copyright', lines[line], re.I): break
+  else:                       # means no copyright line was found
+    error(filename, 0, 'legal/copyright', 5,
+          'No copyright message found.  '
+          'You should have a line: "Copyright [year] <Copyright Owner>"')
+
+
+def GetHeaderGuardCPPVariable(filename):
+  """Returns the CPP variable that should be used as a header guard.
+
+  Args:
+    filename: The name of a C++ header file.
+
+  Returns:
+    The CPP variable that should be used as a header guard in the
+    named file.
+
+  """
+
+  # Restores original filename in case that cpplint is invoked from Emacs's
+  # flymake.
+  filename = re.sub(r'_flymake\.h$', '.h', filename)
+  filename = re.sub(r'/\.flymake/([^/]*)$', r'/\1', filename)
+
+  fileinfo = FileInfo(filename)
+  file_path_from_root = fileinfo.RepositoryName()
+  if _root:
+    file_path_from_root = re.sub('^' + _root + os.sep, '', file_path_from_root)
+  return re.sub(r'[-./\s]', '_', file_path_from_root).upper() + '_'
+
+
+def CheckForHeaderGuard(filename, lines, error):
+  """Checks that the file contains a header guard.
+
+  Logs an error if no #ifndef header guard is present.  For other
+  headers, checks that the full pathname is used.
+
+  Args:
+    filename: The name of the C++ header file.
+    lines: An array of strings, each representing a line of the file.
+    error: The function to call with any errors found.
+  """
+
+  cppvar = GetHeaderGuardCPPVariable(filename)
+
+  ifndef = None
+  ifndef_linenum = 0
+  define = None
+  endif = None
+  endif_linenum = 0
+  for linenum, line in enumerate(lines):
+    linesplit = line.split()
+    if len(linesplit) >= 2:
+      # find the first occurrence of #ifndef and #define, save arg
+      if not ifndef and linesplit[0] == '#ifndef':
+        # set ifndef to the header guard presented on the #ifndef line.
+        ifndef = linesplit[1]
+        ifndef_linenum = linenum
+      if not define and linesplit[0] == '#define':
+        define = linesplit[1]
+    # find the last occurrence of #endif, save entire line
+    if line.startswith('#endif'):
+      endif = line
+      endif_linenum = linenum
+
+  if not ifndef:
+    error(filename, 0, 'build/header_guard', 5,
+          'No #ifndef header guard found, suggested CPP variable is: %s' %
+          cppvar)
+    return
+
+  if not define:
+    error(filename, 0, 'build/header_guard', 5,
+          'No #define header guard found, suggested CPP variable is: %s' %
+          cppvar)
+    return
+
+  # The guard should be PATH_FILE_H_, but we also allow PATH_FILE_H__
+  # for backward compatibility.
+  if ifndef != cppvar:
+    error_level = 0
+    if ifndef != cppvar + '_':
+      error_level = 5
+
+    ParseNolintSuppressions(filename, lines[ifndef_linenum], ifndef_linenum,
+                            error)
+    error(filename, ifndef_linenum, 'build/header_guard', error_level,
+          '#ifndef header guard has wrong style, please use: %s' % cppvar)
+
+  if define != ifndef:
+    error(filename, 0, 'build/header_guard', 5,
+          '#ifndef and #define don\'t match, suggested CPP variable is: %s' %
+          cppvar)
+    return
+
+  if endif != ('#endif  // %s' % cppvar):
+    error_level = 0
+    if endif != ('#endif  // %s' % (cppvar + '_')):
+      error_level = 5
+
+    ParseNolintSuppressions(filename, lines[endif_linenum], endif_linenum,
+                            error)
+    error(filename, endif_linenum, 'build/header_guard', error_level,
+          '#endif line should be "#endif  // %s"' % cppvar)
+
+
+def CheckForBadCharacters(filename, lines, error):
+  """Logs an error for each line containing bad characters.
+
+  Two kinds of bad characters:
+
+  1. Unicode replacement characters: These indicate that either the file
+  contained invalid UTF-8 (likely) or Unicode replacement characters (which
+  it shouldn't).  Note that it's possible for this to throw off line
+  numbering if the invalid UTF-8 occurred adjacent to a newline.
+
+  2. NUL bytes.  These are problematic for some tools.
+
+  Args:
+    filename: The name of the current file.
+    lines: An array of strings, each representing a line of the file.
+    error: The function to call with any errors found.
+  """
+  for linenum, line in enumerate(lines):
+    if u'\ufffd' in line:
+      error(filename, linenum, 'readability/utf8', 5,
+            'Line contains invalid UTF-8 (or Unicode replacement character).')
+    if '\0' in line:
+      error(filename, linenum, 'readability/nul', 5, 'Line contains NUL byte.')
+
+
+def CheckForNewlineAtEOF(filename, lines, error):
+  """Logs an error if there is no newline char at the end of the file.
+
+  Args:
+    filename: The name of the current file.
+    lines: An array of strings, each representing a line of the file.
+    error: The function to call with any errors found.
+  """
+
+  # The array lines() was created by adding two newlines to the
+  # original file (go figure), then splitting on \n.
+  # To verify that the file ends in \n, we just have to make sure the
+  # last-but-two element of lines() exists and is empty.
+  if len(lines) < 3 or lines[-2]:
+    error(filename, len(lines) - 2, 'whitespace/ending_newline', 5,
+          'Could not find a newline character at the end of the file.')
+
+
+def CheckForMultilineCommentsAndStrings(filename, clean_lines, linenum, error):
+  """Logs an error if we see /* ... */ or "..." that extend past one line.
+
+  /* ... */ comments are legit inside macros, for one line.
+  Otherwise, we prefer // comments, so it's ok to warn about the
+  other.  Likewise, it's ok for strings to extend across multiple
+  lines, as long as a line continuation character (backslash)
+  terminates each line. Although not currently prohibited by the C++
+  style guide, it's ugly and unnecessary. We don't do well with either
+  in this lint program, so we warn about both.
+
+  Args:
+    filename: The name of the current file.
+    clean_lines: A CleansedLines instance containing the file.
+    linenum: The number of the line to check.
+    error: The function to call with any errors found.
+  """
+  line = clean_lines.elided[linenum]
+
+  # Remove all \\ (escaped backslashes) from the line. They are OK, and the
+  # second (escaped) slash may trigger later \" detection erroneously.
+  line = line.replace('\\\\', '')
+
+  if line.count('/*') > line.count('*/'):
+    error(filename, linenum, 'readability/multiline_comment', 5,
+          'Complex multi-line /*...*/-style comment found. '
+          'Lint may give bogus warnings.  '
+          'Consider replacing these with //-style comments, '
+          'with #if 0...#endif, '
+          'or with more clearly structured multi-line comments.')
+
+  if (line.count('"') - line.count('\\"')) % 2:
+    error(filename, linenum, 'readability/multiline_string', 5,
+          'Multi-line string ("...") found.  This lint script doesn\'t '
+          'do well with such strings, and may give bogus warnings.  '
+          'Use C++11 raw strings or concatenation instead.')
+
+
+threading_list = (
+    ('asctime(', 'asctime_r('),
+    ('ctime(', 'ctime_r('),
+    ('getgrgid(', 'getgrgid_r('),
+    ('getgrnam(', 'getgrnam_r('),
+    ('getlogin(', 'getlogin_r('),
+    ('getpwnam(', 'getpwnam_r('),
+    ('getpwuid(', 'getpwuid_r('),
+    ('gmtime(', 'gmtime_r('),
+    ('localtime(', 'localtime_r('),
+    ('rand(', 'rand_r('),
+    ('strtok(', 'strtok_r('),
+    ('ttyname(', 'ttyname_r('),
+    )
+
+
+def CheckPosixThreading(filename, clean_lines, linenum, error):
+  """Checks for calls to thread-unsafe functions.
+
+  Much code has been originally written without consideration of
+  multi-threading. Also, engineers are relying on their old experience;
+  they have learned posix before threading extensions were added. These
+  tests guide the engineers to use thread-safe functions (when using
+  posix directly).
+
+  Args:
+    filename: The name of the current file.
+    clean_lines: A CleansedLines instance containing the file.
+    linenum: The number of the line to check.
+    error: The function to call with any errors found.
+  """
+  line = clean_lines.elided[linenum]
+  for single_thread_function, multithread_safe_function in threading_list:
+    ix = line.find(single_thread_function)
+    # Comparisons made explicit for clarity -- pylint: disable=g-explicit-bool-comparison
+    if ix >= 0 and (ix == 0 or (not line[ix - 1].isalnum() and
+                                line[ix - 1] not in ('_', '.', '>'))):
+      error(filename, linenum, 'runtime/threadsafe_fn', 2,
+            'Consider using ' + multithread_safe_function +
+            '...) instead of ' + single_thread_function +
+            '...) for improved thread safety.')
+
+
+def CheckVlogArguments(filename, clean_lines, linenum, error):
+  """Checks that VLOG() is only used for defining a logging level.
+
+  For example, VLOG(2) is correct. VLOG(INFO), VLOG(WARNING), VLOG(ERROR), and
+  VLOG(FATAL) are not.
+
+  Args:
+    filename: The name of the current file.
+    clean_lines: A CleansedLines instance containing the file.
+    linenum: The number of the line to check.
+    error: The function to call with any errors found.
+  """
+  line = clean_lines.elided[linenum]
+  if Search(r'\bVLOG\((INFO|ERROR|WARNING|DFATAL|FATAL)\)', line):
+    error(filename, linenum, 'runtime/vlog', 5,
+          'VLOG() should be used with numeric verbosity level.  '
+          'Use LOG() if you want symbolic severity levels.')
+
+
+# Matches invalid increment: *count++, which moves pointer instead of
+# incrementing a value.
+_RE_PATTERN_INVALID_INCREMENT = re.compile(
+    r'^\s*\*\w+(\+\+|--);')
+
+
+def CheckInvalidIncrement(filename, clean_lines, linenum, error):
+  """Checks for invalid increment *count++.
+
+  For example following function:
+  void increment_counter(int* count) {
+    *count++;
+  }
+  is invalid, because it effectively does count++, moving pointer, and should
+  be replaced with ++*count, (*count)++ or *count += 1.
+
+  Args:
+    filename: The name of the current file.
+    clean_lines: A CleansedLines instance containing the file.
+    linenum: The number of the line to check.
+    error: The function to call with any errors found.
+  """
+  line = clean_lines.elided[linenum]
+  if _RE_PATTERN_INVALID_INCREMENT.match(line):
+    error(filename, linenum, 'runtime/invalid_increment', 5,
+          'Changing pointer instead of value (or unused value of operator*).')
+
+
+class _BlockInfo(object):
+  """Stores information about a generic block of code."""
+
+  def __init__(self, seen_open_brace):
+    self.seen_open_brace = seen_open_brace
+    self.open_parentheses = 0
+    self.inline_asm = _NO_ASM
+
+  def CheckBegin(self, filename, clean_lines, linenum, error):
+    """Run checks that applies to text up to the opening brace.
+
+    This is mostly for checking the text after the class identifier
+    and the "{", usually where the base class is specified.  For other
+    blocks, there isn't much to check, so we always pass.
+
+    Args:
+      filename: The name of the current file.
+      clean_lines: A CleansedLines instance containing the file.
+      linenum: The number of the line to check.
+      error: The function to call with any errors found.
+    """
+    pass
+
+  def CheckEnd(self, filename, clean_lines, linenum, error):
+    """Run checks that applies to text after the closing brace.
+
+    This is mostly used for checking end of namespace comments.
+
+    Args:
+      filename: The name of the current file.
+      clean_lines: A CleansedLines instance containing the file.
+      linenum: The number of the line to check.
+      error: The function to call with any errors found.
+    """
+    pass
+
+
+class _ClassInfo(_BlockInfo):
+  """Stores information about a class."""
+
+  def __init__(self, name, class_or_struct, clean_lines, linenum):
+    _BlockInfo.__init__(self, False)
+    self.name = name
+    self.starting_linenum = linenum
+    self.is_derived = False
+    if class_or_struct == 'struct':
+      self.access = 'public'
+      self.is_struct = True
+    else:
+      self.access = 'private'
+      self.is_struct = False
+
+    # Remember initial indentation level for this class.  Using raw_lines here
+    # instead of elided to account for leading comments.
+    initial_indent = Match(r'^( *)\S', clean_lines.raw_lines[linenum])
+    if initial_indent:
+      self.class_indent = len(initial_indent.group(1))
+    else:
+      self.class_indent = 0
+
+    # Try to find the end of the class.  This will be confused by things like:
+    #   class A {
+    #   } *x = { ...
+    #
+    # But it's still good enough for CheckSectionSpacing.
+    self.last_line = 0
+    depth = 0
+    for i in range(linenum, clean_lines.NumLines()):
+      line = clean_lines.elided[i]
+      depth += line.count('{') - line.count('}')
+      if not depth:
+        self.last_line = i
+        break
+
+  def CheckBegin(self, filename, clean_lines, linenum, error):
+    # Look for a bare ':'
+    if Search('(^|[^:]):($|[^:])', clean_lines.elided[linenum]):
+      self.is_derived = True
+
+  def CheckEnd(self, filename, clean_lines, linenum, error):
+    # Check that closing brace is aligned with beginning of the class.
+    # Only do this if the closing brace is indented by only whitespaces.
+    # This means we will not check single-line class definitions.
+    indent = Match(r'^( *)\}', clean_lines.elided[linenum])
+    if indent and len(indent.group(1)) != self.class_indent:
+      if self.is_struct:
+        parent = 'struct ' + self.name
+      else:
+        parent = 'class ' + self.name
+      error(filename, linenum, 'whitespace/indent', 3,
+            'Closing brace should be aligned with beginning of %s' % parent)
+
+
+class _NamespaceInfo(_BlockInfo):
+  """Stores information about a namespace."""
+
+  def __init__(self, name, linenum):
+    _BlockInfo.__init__(self, False)
+    self.name = name or ''
+    self.starting_linenum = linenum
+
+  def CheckEnd(self, filename, clean_lines, linenum, error):
+    """Check end of namespace comments."""
+    line = clean_lines.raw_lines[linenum]
+
+    # Check how many lines is enclosed in this namespace.  Don't issue
+    # warning for missing namespace comments if there aren't enough
+    # lines.  However, do apply checks if there is already an end of
+    # namespace comment and it's incorrect.
+    #
+    # TODO(unknown): We always want to check end of namespace comments
+    # if a namespace is large, but sometimes we also want to apply the
+    # check if a short namespace contained nontrivial things (something
+    # other than forward declarations).  There is currently no logic on
+    # deciding what these nontrivial things are, so this check is
+    # triggered by namespace size only, which works most of the time.
+    if (linenum - self.starting_linenum < 10
+        and not Match(r'};*\s*(//|/\*).*\bnamespace\b', line)):
+      return
+
+    # Look for matching comment at end of namespace.
+    #
+    # Note that we accept C style "/* */" comments for terminating
+    # namespaces, so that code that terminate namespaces inside
+    # preprocessor macros can be cpplint clean.
+    #
+    # We also accept stuff like "// end of namespace <name>." with the
+    # period at the end.
+    #
+    # Besides these, we don't accept anything else, otherwise we might
+    # get false negatives when existing comment is a substring of the
+    # expected namespace.
+    if self.name:
+      # Named namespace
+      if not Match((r'};*\s*(//|/\*).*\bnamespace\s+' + re.escape(self.name) +
+                    r'[\*/\.\\\s]*$'),
+                   line):
+        error(filename, linenum, 'readability/namespace', 5,
+              'Namespace should be terminated with "// namespace %s"' %
+              self.name)
+    else:
+      # Anonymous namespace
+      if not Match(r'};*\s*(//|/\*).*\bnamespace[\*/\.\\\s]*$', line):
+        error(filename, linenum, 'readability/namespace', 5,
+              'Namespace should be terminated with "// namespace"')
+
+
+class _PreprocessorInfo(object):
+  """Stores checkpoints of nesting stacks when #if/#else is seen."""
+
+  def __init__(self, stack_before_if):
+    # The entire nesting stack before #if
+    self.stack_before_if = stack_before_if
+
+    # The entire nesting stack up to #else
+    self.stack_before_else = []
+
+    # Whether we have already seen #else or #elif
+    self.seen_else = False
+
+
+class _NestingState(object):
+  """Holds states related to parsing braces."""
+
+  def __init__(self):
+    # Stack for tracking all braces.  An object is pushed whenever we
+    # see a "{", and popped when we see a "}".  Only 3 types of
+    # objects are possible:
+    # - _ClassInfo: a class or struct.
+    # - _NamespaceInfo: a namespace.
+    # - _BlockInfo: some other type of block.
+    self.stack = []
+
+    # Stack of _PreprocessorInfo objects.
+    self.pp_stack = []
+
+  def SeenOpenBrace(self):
+    """Check if we have seen the opening brace for the innermost block.
+
+    Returns:
+      True if we have seen the opening brace, False if the innermost
+      block is still expecting an opening brace.
+    """
+    return (not self.stack) or self.stack[-1].seen_open_brace
+
+  def InNamespaceBody(self):
+    """Check if we are currently one level inside a namespace body.
+
+    Returns:
+      True if top of the stack is a namespace block, False otherwise.
+    """
+    return self.stack and isinstance(self.stack[-1], _NamespaceInfo)
+
+  def UpdatePreprocessor(self, line):
+    """Update preprocessor stack.
+
+    We need to handle preprocessors due to classes like this:
+      #ifdef SWIG
+      struct ResultDetailsPageElementExtensionPoint {
+      #else
+      struct ResultDetailsPageElementExtensionPoint : public Extension {
+      #endif
+
+    We make the following assumptions (good enough for most files):
+    - Preprocessor condition evaluates to true from #if up to first
+      #else/#elif/#endif.
+
+    - Preprocessor condition evaluates to false from #else/#elif up
+      to #endif.  We still perform lint checks on these lines, but
+      these do not affect nesting stack.
+
+    Args:
+      line: current line to check.
+    """
+    if Match(r'^\s*#\s*(if|ifdef|ifndef)\b', line):
+      # Beginning of #if block, save the nesting stack here.  The saved
+      # stack will allow us to restore the parsing state in the #else case.
+      self.pp_stack.append(_PreprocessorInfo(copy.deepcopy(self.stack)))
+    elif Match(r'^\s*#\s*(else|elif)\b', line):
+      # Beginning of #else block
+      if self.pp_stack:
+        if not self.pp_stack[-1].seen_else:
+          # This is the first #else or #elif block.  Remember the
+          # whole nesting stack up to this point.  This is what we
+          # keep after the #endif.
+          self.pp_stack[-1].seen_else = True
+          self.pp_stack[-1].stack_before_else = copy.deepcopy(self.stack)
+
+        # Restore the stack to how it was before the #if
+        self.stack = copy.deepcopy(self.pp_stack[-1].stack_before_if)
+      else:
+        # TODO(unknown): unexpected #else, issue warning?
+        pass
+    elif Match(r'^\s*#\s*endif\b', line):
+      # End of #if or #else blocks.
+      if self.pp_stack:
+        # If we saw an #else, we will need to restore the nesting
+        # stack to its former state before the #else, otherwise we
+        # will just continue from where we left off.
+        if self.pp_stack[-1].seen_else:
+          # Here we can just use a shallow copy since we are the last
+          # reference to it.
+          self.stack = self.pp_stack[-1].stack_before_else
+        # Drop the corresponding #if
+        self.pp_stack.pop()
+      else:
+        # TODO(unknown): unexpected #endif, issue warning?
+        pass
+
+  def Update(self, filename, clean_lines, linenum, error):
+    """Update nesting state with current line.
+
+    Args:
+      filename: The name of the current file.
+      clean_lines: A CleansedLines instance containing the file.
+      linenum: The number of the line to check.
+      error: The function to call with any errors found.
+    """
+    line = clean_lines.elided[linenum]
+
+    # Update pp_stack first
+    self.UpdatePreprocessor(line)
+
+    # Count parentheses.  This is to avoid adding struct arguments to
+    # the nesting stack.
+    if self.stack:
+      inner_block = self.stack[-1]
+      depth_change = line.count('(') - line.count(')')
+      inner_block.open_parentheses += depth_change
+
+      # Also check if we are starting or ending an inline assembly block.
+      if inner_block.inline_asm in (_NO_ASM, _END_ASM):
+        if (depth_change != 0 and
+            inner_block.open_parentheses == 1 and
+            _MATCH_ASM.match(line)):
+          # Enter assembly block
+          inner_block.inline_asm = _INSIDE_ASM
+        else:
+          # Not entering assembly block.  If previous line was _END_ASM,
+          # we will now shift to _NO_ASM state.
+          inner_block.inline_asm = _NO_ASM
+      elif (inner_block.inline_asm == _INSIDE_ASM and
+            inner_block.open_parentheses == 0):
+        # Exit assembly block
+        inner_block.inline_asm = _END_ASM
+
+    # Consume namespace declaration at the beginning of the line.  Do
+    # this in a loop so that we catch same line declarations like this:
+    #   namespace proto2 { namespace bridge { class MessageSet; } }
+    while True:
+      # Match start of namespace.  The "\b\s*" below catches namespace
+      # declarations even if it weren't followed by a whitespace, this
+      # is so that we don't confuse our namespace checker.  The
+      # missing spaces will be flagged by CheckSpacing.
+      namespace_decl_match = Match(r'^\s*namespace\b\s*([:\w]+)?(.*)$', line)
+      if not namespace_decl_match:
+        break
+
+      new_namespace = _NamespaceInfo(namespace_decl_match.group(1), linenum)
+      self.stack.append(new_namespace)
+
+      line = namespace_decl_match.group(2)
+      if line.find('{') != -1:
+        new_namespace.seen_open_brace = True
+        line = line[line.find('{') + 1:]
+
+    # Look for a class declaration in whatever is left of the line
+    # after parsing namespaces.  The regexp accounts for decorated classes
+    # such as in:
+    #   class LOCKABLE API Object {
+    #   };
+    #
+    # Templates with class arguments may confuse the parser, for example:
+    #   template <class T
+    #             class Comparator = less<T>,
+    #             class Vector = vector<T> >
+    #   class HeapQueue {
+    #
+    # Because this parser has no nesting state about templates, by the
+    # time it saw "class Comparator", it may think that it's a new class.
+    # Nested templates have a similar problem:
+    #   template <
+    #       typename ExportedType,
+    #       typename TupleType,
+    #       template <typename, typename> class ImplTemplate>
+    #
+    # To avoid these cases, we ignore classes that are followed by '=' or '>'
+    class_decl_match = Match(
+        r'\s*(template\s*<[\w\s<>,:]*>\s*)?'
+        r'(class|struct)\s+([A-Z_]+\s+)*(\w+(?:::\w+)*)'
+        r'(([^=>]|<[^<>]*>|<[^<>]*<[^<>]*>\s*>)*)$', line)
+    if (class_decl_match and
+        (not self.stack or self.stack[-1].open_parentheses == 0)):
+      self.stack.append(_ClassInfo(
+          class_decl_match.group(4), class_decl_match.group(2),
+          clean_lines, linenum))
+      line = class_decl_match.group(5)
+
+    # If we have not yet seen the opening brace for the innermost block,
+    # run checks here.
+    if not self.SeenOpenBrace():
+      self.stack[-1].CheckBegin(filename, clean_lines, linenum, error)
+
+    # Update access control if we are inside a class/struct
+    if self.stack and isinstance(self.stack[-1], _ClassInfo):
+      classinfo = self.stack[-1]
+      access_match = Match(
+          r'^(.*)\b(public|private|protected|signals)(\s+(?:slots\s*)?)?'
+          r':(?:[^:]|$)',
+          line)
+      if access_match:
+        classinfo.access = access_match.group(2)
+
+        # Check that access keywords are indented +1 space.  Skip this
+        # check if the keywords are not preceded by whitespaces.
+        indent = access_match.group(1)
+        if (len(indent) != classinfo.class_indent + 1 and
+            Match(r'^\s*$', indent)):
+          if classinfo.is_struct:
+            parent = 'struct ' + classinfo.name
+          else:
+            parent = 'class ' + classinfo.name
+          slots = ''
+          if access_match.group(3):
+            slots = access_match.group(3)
+          error(filename, linenum, 'whitespace/indent', 3,
+                '%s%s: should be indented +1 space inside %s' % (
+                    access_match.group(2), slots, parent))
+
+    # Consume braces or semicolons from what's left of the line
+    while True:
+      # Match first brace, semicolon, or closed parenthesis.
+      matched = Match(r'^[^{;)}]*([{;)}])(.*)$', line)
+      if not matched:
+        break
+
+      token = matched.group(1)
+      if token == '{':
+        # If namespace or class hasn't seen a opening brace yet, mark
+        # namespace/class head as complete.  Push a new block onto the
+        # stack otherwise.
+        if not self.SeenOpenBrace():
+          self.stack[-1].seen_open_brace = True
+        else:
+          self.stack.append(_BlockInfo(True))
+          if _MATCH_ASM.match(line):
+            self.stack[-1].inline_asm = _BLOCK_ASM
+      elif token == ';' or token == ')':
+        # If we haven't seen an opening brace yet, but we already saw
+        # a semicolon, this is probably a forward declaration.  Pop
+        # the stack for these.
+        #
+        # Similarly, if we haven't seen an opening brace yet, but we
+        # already saw a closing parenthesis, then these are probably
+        # function arguments with extra "class" or "struct" keywords.
+        # Also pop these stack for these.
+        if not self.SeenOpenBrace():
+          self.stack.pop()
+      else:  # token == '}'
+        # Perform end of block checks and pop the stack.
+        if self.stack:
+          self.stack[-1].CheckEnd(filename, clean_lines, linenum, error)
+          self.stack.pop()
+      line = matched.group(2)
+
+  def InnermostClass(self):
+    """Get class info on the top of the stack.
+
+    Returns:
+      A _ClassInfo object if we are inside a class, or None otherwise.
+    """
+    for i in range(len(self.stack), 0, -1):
+      classinfo = self.stack[i - 1]
+      if isinstance(classinfo, _ClassInfo):
+        return classinfo
+    return None
+
+  def CheckCompletedBlocks(self, filename, error):
+    """Checks that all classes and namespaces have been completely parsed.
+
+    Call this when all lines in a file have been processed.
+    Args:
+      filename: The name of the current file.
+      error: The function to call with any errors found.
+    """
+    # Note: This test can result in false positives if #ifdef constructs
+    # get in the way of brace matching. See the testBuildClass test in
+    # cpplint_unittest.py for an example of this.
+    for obj in self.stack:
+      if isinstance(obj, _ClassInfo):
+        error(filename, obj.starting_linenum, 'build/class', 5,
+              'Failed to find complete declaration of class %s' %
+              obj.name)
+      elif isinstance(obj, _NamespaceInfo):
+        error(filename, obj.starting_linenum, 'build/namespaces', 5,
+              'Failed to find complete declaration of namespace %s' %
+              obj.name)
+
+
+def CheckForNonStandardConstructs(filename, clean_lines, linenum,
+                                  nesting_state, error):
+  r"""Logs an error if we see certain non-ANSI constructs ignored by gcc-2.
+
+  Complain about several constructs which gcc-2 accepts, but which are
+  not standard C++.  Warning about these in lint is one way to ease the
+  transition to new compilers.
+  - put storage class first (e.g. "static const" instead of "const static").
+  - "%lld" instead of %qd" in printf-type functions.
+  - "%1$d" is non-standard in printf-type functions.
+  - "\%" is an undefined character escape sequence.
+  - text after #endif is not allowed.
+  - invalid inner-style forward declaration.
+  - >? and <? operators, and their >?= and <?= cousins.
+
+  Additionally, check for constructor/destructor style violations and reference
+  members, as it is very convenient to do so while checking for
+  gcc-2 compliance.
+
+  Args:
+    filename: The name of the current file.
+    clean_lines: A CleansedLines instance containing the file.
+    linenum: The number of the line to check.
+    nesting_state: A _NestingState instance which maintains information about
+                   the current stack of nested blocks being parsed.
+    error: A callable to which errors are reported, which takes 4 arguments:
+           filename, line number, error level, and message
+  """
+
+  # Remove comments from the line, but leave in strings for now.
+  line = clean_lines.lines[linenum]
+
+  if Search(r'printf\s*\(.*".*%[-+ ]?\d*q', line):
+    error(filename, linenum, 'runtime/printf_format', 3,
+          '%q in format strings is deprecated.  Use %ll instead.')
+
+  if Search(r'printf\s*\(.*".*%\d+\$', line):
+    error(filename, linenum, 'runtime/printf_format', 2,
+          '%N$ formats are unconventional.  Try rewriting to avoid them.')
+
+  # Remove escaped backslashes before looking for undefined escapes.
+  line = line.replace('\\\\', '')
+
+  if Search(r'("|\').*\\(%|\[|\(|{)', line):
+    error(filename, linenum, 'build/printf_format', 3,
+          '%, [, (, and { are undefined character escapes.  Unescape them.')
+
+  # For the rest, work with both comments and strings removed.
+  line = clean_lines.elided[linenum]
+
+  if Search(r'\b(const|volatile|void|char|short|int|long'
+            r'|float|double|signed|unsigned'
+            r'|schar|u?int8|u?int16|u?int32|u?int64)'
+            r'\s+(register|static|extern|typedef)\b',
+            line):
+    error(filename, linenum, 'build/storage_class', 5,
+          'Storage class (static, extern, typedef, etc) should be first.')
+
+  if Match(r'\s*#\s*endif\s*[^/\s]+', line):
+    error(filename, linenum, 'build/endif_comment', 5,
+          'Uncommented text after #endif is non-standard.  Use a comment.')
+
+  if Match(r'\s*class\s+(\w+\s*::\s*)+\w+\s*;', line):
+    error(filename, linenum, 'build/forward_decl', 5,
+          'Inner-style forward declarations are invalid.  Remove this line.')
+
+  if Search(r'(\w+|[+-]?\d+(\.\d*)?)\s*(<|>)\?=?\s*(\w+|[+-]?\d+)(\.\d*)?',
+            line):
+    error(filename, linenum, 'build/deprecated', 3,
+          '>? and <? (max and min) operators are non-standard and deprecated.')
+
+  if Search(r'^\s*const\s*string\s*&\s*\w+\s*;', line):
+    # TODO(unknown): Could it be expanded safely to arbitrary references,
+    # without triggering too many false positives? The first
+    # attempt triggered 5 warnings for mostly benign code in the regtest, hence
+    # the restriction.
+    # Here's the original regexp, for the reference:
+    # type_name = r'\w+((\s*::\s*\w+)|(\s*<\s*\w+?\s*>))?'
+    # r'\s*const\s*' + type_name + '\s*&\s*\w+\s*;'
+    error(filename, linenum, 'runtime/member_string_references', 2,
+          'const string& members are dangerous. It is much better to use '
+          'alternatives, such as pointers or simple constants.')
+
+  # Everything else in this function operates on class declarations.
+  # Return early if the top of the nesting stack is not a class, or if
+  # the class head is not completed yet.
+  classinfo = nesting_state.InnermostClass()
+  if not classinfo or not classinfo.seen_open_brace:
+    return
+
+  # The class may have been declared with namespace or classname qualifiers.
+  # The constructor and destructor will not have those qualifiers.
+  base_classname = classinfo.name.split('::')[-1]
+
+  # Look for single-argument constructors that aren't marked explicit.
+  # Technically a valid construct, but against style.
+  args = Match(r'\s+(?:inline\s+)?%s\s*\(([^,()]+)\)'
+               % re.escape(base_classname),
+               line)
+  if (args and
+      args.group(1) != 'void' and
+      not Match(r'(const\s+)?%s(\s+const)?\s*(?:<\w+>\s*)?&'
+                % re.escape(base_classname), args.group(1).strip())):
+    error(filename, linenum, 'runtime/explicit', 5,
+          'Single-argument constructors should be marked explicit.')
+
+
+def CheckSpacingForFunctionCall(filename, line, linenum, error):
+  """Checks for the correctness of various spacing around function calls.
+
+  Args:
+    filename: The name of the current file.
+    line: The text of the line to check.
+    linenum: The number of the line to check.
+    error: The function to call with any errors found.
+  """
+
+  # Since function calls often occur inside if/for/while/switch
+  # expressions - which have their own, more liberal conventions - we
+  # first see if we should be looking inside such an expression for a
+  # function call, to which we can apply more strict standards.
+  fncall = line    # if there's no control flow construct, look at whole line
+  for pattern in (r'\bif\s*\((.*)\)\s*{',
+                  r'\bfor\s*\((.*)\)\s*{',
+                  r'\bwhile\s*\((.*)\)\s*[{;]',
+                  r'\bswitch\s*\((.*)\)\s*{'):
+    match = Search(pattern, line)
+    if match:
+      fncall = match.group(1)    # look inside the parens for function calls
+      break
+
+  # Except in if/for/while/switch, there should never be space
+  # immediately inside parens (eg "f( 3, 4 )").  We make an exception
+  # for nested parens ( (a+b) + c ).  Likewise, there should never be
+  # a space before a ( when it's a function argument.  I assume it's a
+  # function argument when the char before the whitespace is legal in
+  # a function name (alnum + _) and we're not starting a macro. Also ignore
+  # pointers and references to arrays and functions coz they're too tricky:
+  # we use a very simple way to recognize these:
+  # " (something)(maybe-something)" or
+  # " (something)(maybe-something," or
+  # " (something)[something]"
+  # Note that we assume the contents of [] to be short enough that
+  # they'll never need to wrap.
+  if (  # Ignore control structures.
+      not Search(r'\b(if|for|while|switch|return|new|delete|catch|sizeof)\b',
+                 fncall) and
+      # Ignore pointers/references to functions.
+      not Search(r' \([^)]+\)\([^)]*(\)|,$)', fncall) and
+      # Ignore pointers/references to arrays.
+      not Search(r' \([^)]+\)\[[^\]]+\]', fncall)):
+    if Search(r'\w\s*\(\s(?!\s*\\$)', fncall):      # a ( used for a fn call
+      error(filename, linenum, 'whitespace/parens', 4,
+            'Extra space after ( in function call')
+    elif Search(r'\(\s+(?!(\s*\\)|\()', fncall):
+      error(filename, linenum, 'whitespace/parens', 2,
+            'Extra space after (')
+    if (Search(r'\w\s+\(', fncall) and
+        not Search(r'#\s*define|typedef', fncall) and
+        not Search(r'\w\s+\((\w+::)*\*\w+\)\(', fncall)):
+      error(filename, linenum, 'whitespace/parens', 4,
+            'Extra space before ( in function call')
+    # If the ) is followed only by a newline or a { + newline, assume it's
+    # part of a control statement (if/while/etc), and don't complain
+    if Search(r'[^)]\s+\)\s*[^{\s]', fncall):
+      # If the closing parenthesis is preceded by only whitespaces,
+      # try to give a more descriptive error message.
+      if Search(r'^\s+\)', fncall):
+        error(filename, linenum, 'whitespace/parens', 2,
+              'Closing ) should be moved to the previous line')
+      else:
+        error(filename, linenum, 'whitespace/parens', 2,
+              'Extra space before )')
+
+
+def IsBlankLine(line):
+  """Returns true if the given line is blank.
+
+  We consider a line to be blank if the line is empty or consists of
+  only white spaces.
+
+  Args:
+    line: A line of a string.
+
+  Returns:
+    True, if the given line is blank.
+  """
+  return not line or line.isspace()
+
+
+def CheckForFunctionLengths(filename, clean_lines, linenum,
+                            function_state, error):
+  """Reports for long function bodies.
+
+  For an overview why this is done, see:
+  http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Write_Short_Functions
+
+  Uses a simplistic algorithm assuming other style guidelines
+  (especially spacing) are followed.
+  Only checks unindented functions, so class members are unchecked.
+  Trivial bodies are unchecked, so constructors with huge initializer lists
+  may be missed.
+  Blank/comment lines are not counted so as to avoid encouraging the removal
+  of vertical space and comments just to get through a lint check.
+  NOLINT *on the last line of a function* disables this check.
+
+  Args:
+    filename: The name of the current file.
+    clean_lines: A CleansedLines instance containing the file.
+    linenum: The number of the line to check.
+    function_state: Current function name and lines in body so far.
+    error: The function to call with any errors found.
+  """
+  lines = clean_lines.lines
+  line = lines[linenum]
+  raw = clean_lines.raw_lines
+  raw_line = raw[linenum]
+  joined_line = ''
+
+  starting_func = False
+  regexp = r'(\w(\w|::|\*|\&|\s)*)\('  # decls * & space::name( ...
+  match_result = Match(regexp, line)
+  if match_result:
+    # If the name is all caps and underscores, figure it's a macro and
+    # ignore it, unless it's TEST or TEST_F.
+    function_name = match_result.group(1).split()[-1]
+    if function_name == 'TEST' or function_name == 'TEST_F' or (
+        not Match(r'[A-Z_]+$', function_name)):
+      starting_func = True
+
+  if starting_func:
+    body_found = False
+    for start_linenum in xrange(linenum, clean_lines.NumLines()):
+      start_line = lines[start_linenum]
+      joined_line += ' ' + start_line.lstrip()
+      if Search(r'(;|})', start_line):  # Declarations and trivial functions
+        body_found = True
+        break                              # ... ignore
+      elif Search(r'{', start_line):
+        body_found = True
+        function = Search(r'((\w|:)*)\(', line).group(1)
+        if Match(r'TEST', function):    # Handle TEST... macros
+          parameter_regexp = Search(r'(\(.*\))', joined_line)
+          if parameter_regexp:             # Ignore bad syntax
+            function += parameter_regexp.group(1)
+        else:
+          function += '()'
+        function_state.Begin(function)
+        break
+    if not body_found:
+      # No body for the function (or evidence of a non-function) was found.
+      error(filename, linenum, 'readability/fn_size', 5,
+            'Lint failed to find start of function body.')
+  elif Match(r'^\}\s*$', line):  # function end
+    function_state.Check(error, filename, linenum)
+    function_state.End()
+  elif not Match(r'^\s*$', line):
+    function_state.Count()  # Count non-blank/non-comment lines.
+
+
+_RE_PATTERN_TODO = re.compile(r'^//(\s*)TODO(\(.+?\))?:?(\s|$)?')
+
+
+def CheckComment(comment, filename, linenum, error):
+  """Checks for common mistakes in TODO comments.
+
+  Args:
+    comment: The text of the comment from the line in question.
+    filename: The name of the current file.
+    linenum: The number of the line to check.
+    error: The function to call with any errors found.
+  """
+  match = _RE_PATTERN_TODO.match(comment)
+  if match:
+    # One whitespace is correct; zero whitespace is handled elsewhere.
+    leading_whitespace = match.group(1)
+    if len(leading_whitespace) > 1:
+      error(filename, linenum, 'whitespace/todo', 2,
+            'Too many spaces before TODO')
+
+    username = match.group(2)
+    if not username:
+      error(filename, linenum, 'readability/todo', 2,
+            'Missing username in TODO; it should look like '
+            '"// TODO(my_username): Stuff."')
+
+    middle_whitespace = match.group(3)
+    # Comparisons made explicit for correctness -- pylint: disable=g-explicit-bool-comparison
+    if middle_whitespace != ' ' and middle_whitespace != '':
+      error(filename, linenum, 'whitespace/todo', 2,
+            'TODO(my_username) should be followed by a space')
+
+def CheckAccess(filename, clean_lines, linenum, nesting_state, error):
+  """Checks for improper use of DISALLOW* macros.
+
+  Args:
+    filename: The name of the current file.
+    clean_lines: A CleansedLines instance containing the file.
+    linenum: The number of the line to check.
+    nesting_state: A _NestingState instance which maintains information about
+                   the current stack of nested blocks being parsed.
+    error: The function to call with any errors found.
+  """
+  line = clean_lines.elided[linenum]  # get rid of comments and strings
+
+  matched = Match((r'\s*(DISALLOW_COPY_AND_ASSIGN|'
+                   r'DISALLOW_EVIL_CONSTRUCTORS|'
+                   r'DISALLOW_IMPLICIT_CONSTRUCTORS)'), line)
+  if not matched:
+    return
+  if nesting_state.stack and isinstance(nesting_state.stack[-1], _ClassInfo):
+    if nesting_state.stack[-1].access != 'private':
+      error(filename, linenum, 'readability/constructors', 3,
+            '%s must be in the private: section' % matched.group(1))
+
+  else:
+    # Found DISALLOW* macro outside a class declaration, or perhaps it
+    # was used inside a function when it should have been part of the
+    # class declaration.  We could issue a warning here, but it
+    # probably resulted in a compiler error already.
+    pass
+
+
+def FindNextMatchingAngleBracket(clean_lines, linenum, init_suffix):
+  """Find the corresponding > to close a template.
+
+  Args:
+    clean_lines: A CleansedLines instance containing the file.
+    linenum: Current line number.
+    init_suffix: Remainder of the current line after the initial <.
+
+  Returns:
+    True if a matching bracket exists.
+  """
+  line = init_suffix
+  nesting_stack = ['<']
+  while True:
+    # Find the next operator that can tell us whether < is used as an
+    # opening bracket or as a less-than operator.  We only want to
+    # warn on the latter case.
+    #
+    # We could also check all other operators and terminate the search
+    # early, e.g. if we got something like this "a<b+c", the "<" is
+    # most likely a less-than operator, but then we will get false
+    # positives for default arguments and other template expressions.
+    match = Search(r'^[^<>(),;\[\]]*([<>(),;\[\]])(.*)$', line)
+    if match:
+      # Found an operator, update nesting stack
+      operator = match.group(1)
+      line = match.group(2)
+
+      if nesting_stack[-1] == '<':
+        # Expecting closing angle bracket
+        if operator in ('<', '(', '['):
+          nesting_stack.append(operator)
+        elif operator == '>':
+          nesting_stack.pop()
+          if not nesting_stack:
+            # Found matching angle bracket
+            return True
+        elif operator == ',':
+          # Got a comma after a bracket, this is most likely a template
+          # argument.  We have not seen a closing angle bracket yet, but
+          # it's probably a few lines later if we look for it, so just
+          # return early here.
+          return True
+        else:
+          # Got some other operator.
+          return False
+
+      else:
+        # Expecting closing parenthesis or closing bracket
+        if operator in ('<', '(', '['):
+          nesting_stack.append(operator)
+        elif operator in (')', ']'):
+          # We don't bother checking for matching () or [].  If we got
+          # something like (] or [), it would have been a syntax error.
+          nesting_stack.pop()
+
+    else:
+      # Scan the next line
+      linenum += 1
+      if linenum >= len(clean_lines.elided):
+        break
+      line = clean_lines.elided[linenum]
+
+  # Exhausted all remaining lines and still no matching angle bracket.
+  # Most likely the input was incomplete, otherwise we should have
+  # seen a semicolon and returned early.
+  return True
+
+
+def FindPreviousMatchingAngleBracket(clean_lines, linenum, init_prefix):
+  """Find the corresponding < that started a template.
+
+  Args:
+    clean_lines: A CleansedLines instance containing the file.
+    linenum: Current line number.
+    init_prefix: Part of the current line before the initial >.
+
+  Returns:
+    True if a matching bracket exists.
+  """
+  line = init_prefix
+  nesting_stack = ['>']
+  while True:
+    # Find the previous operator
+    match = Search(r'^(.*)([<>(),;\[\]])[^<>(),;\[\]]*$', line)
+    if match:
+      # Found an operator, update nesting stack
+      operator = match.group(2)
+      line = match.group(1)
+
+      if nesting_stack[-1] == '>':
+        # Expecting opening angle bracket
+        if operator in ('>', ')', ']'):
+          nesting_stack.append(operator)
+        elif operator == '<':
+          nesting_stack.pop()
+          if not nesting_stack:
+            # Found matching angle bracket
+            return True
+        elif operator == ',':
+          # Got a comma before a bracket, this is most likely a
+          # template argument.  The opening angle bracket is probably
+          # there if we look for it, so just return early here.
+          return True
+        else:
+          # Got some other operator.
+          return False
+
+      else:
+        # Expecting opening parenthesis or opening bracket
+        if operator in ('>', ')', ']'):
+          nesting_stack.append(operator)
+        elif operator in ('(', '['):
+          nesting_stack.pop()
+
+    else:
+      # Scan the previous line
+      linenum -= 1
+      if linenum < 0:
+        break
+      line = clean_lines.elided[linenum]
+
+  # Exhausted all earlier lines and still no matching angle bracket.
+  return False
+
+
+def CheckSpacing(filename, clean_lines, linenum, nesting_state, error):
+  """Checks for the correctness of various spacing issues in the code.
+
+  Things we check for: spaces around operators, spaces after
+  if/for/while/switch, no spaces around parens in function calls, two
+  spaces between code and comment, don't start a block with a blank
+  line, don't end a function with a blank line, don't add a blank line
+  after public/protected/private, don't have too many blank lines in a row.
+
+  Args:
+    filename: The name of the current file.
+    clean_lines: A CleansedLines instance containing the file.
+    linenum: The number of the line to check.
+    nesting_state: A _NestingState instance which maintains information about
+                   the current stack of nested blocks being parsed.
+    error: The function to call with any errors found.
+  """
+
+  # Don't use "elided" lines here, otherwise we can't check commented lines.
+  # Don't want to use "raw" either, because we don't want to check inside C++11
+  # raw strings,
+  raw = clean_lines.lines_without_raw_strings
+  line = raw[linenum]
+
+  # Before nixing comments, check if the line is blank for no good
+  # reason.  This includes the first line after a block is opened, and
+  # blank lines at the end of a function (ie, right before a line like '}'
+  #
+  # Skip all the blank line checks if we are immediately inside a
+  # namespace body.  In other words, don't issue blank line warnings
+  # for this block:
+  #   namespace {
+  #
+  #   }
+  #
+  # A warning about missing end of namespace comments will be issued instead.
+  if IsBlankLine(line) and not nesting_state.InNamespaceBody():
+    elided = clean_lines.elided
+    prev_line = elided[linenum - 1]
+    prevbrace = prev_line.rfind('{')
+    # TODO(unknown): Don't complain if line before blank line, and line after,
+    #                both start with alnums and are indented the same amount.
+    #                This ignores whitespace at the start of a namespace block
+    #                because those are not usually indented.
+    if prevbrace != -1 and prev_line[prevbrace:].find('}') == -1:
+      # OK, we have a blank line at the start of a code block.  Before we
+      # complain, we check if it is an exception to the rule: The previous
+      # non-empty line has the parameters of a function header that are indented
+      # 4 spaces (because they did not fit in a 80 column line when placed on
+      # the same line as the function name).  We also check for the case where
+      # the previous line is indented 6 spaces, which may happen when the
+      # initializers of a constructor do not fit into a 80 column line.
+      exception = False
+      if Match(r' {6}\w', prev_line):  # Initializer list?
+        # We are looking for the opening column of initializer list, which
+        # should be indented 4 spaces to cause 6 space indentation afterwards.
+        search_position = linenum-2
+        while (search_position >= 0
+               and Match(r' {6}\w', elided[search_position])):
+          search_position -= 1
+        exception = (search_position >= 0
+                     and elided[search_position][:5] == '    :')
+      else:
+        # Search for the function arguments or an initializer list.  We use a
+        # simple heuristic here: If the line is indented 4 spaces; and we have a
+        # closing paren, without the opening paren, followed by an opening brace
+        # or colon (for initializer lists) we assume that it is the last line of
+        # a function header.  If we have a colon indented 4 spaces, it is an
+        # initializer list.
+        exception = (Match(r' {4}\w[^\(]*\)\s*(const\s*)?(\{\s*$|:)',
+                           prev_line)
+                     or Match(r' {4}:', prev_line))
+
+      if not exception:
+        error(filename, linenum, 'whitespace/blank_line', 2,
+              'Redundant blank line at the start of a code block '
+              'should be deleted.')
+    # Ignore blank lines at the end of a block in a long if-else
+    # chain, like this:
+    #   if (condition1) {
+    #     // Something followed by a blank line
+    #
+    #   } else if (condition2) {
+    #     // Something else
+    #   }
+    if linenum + 1 < clean_lines.NumLines():
+      next_line = raw[linenum + 1]
+      if (next_line
+          and Match(r'\s*}', next_line)
+          and next_line.find('} else ') == -1):
+        error(filename, linenum, 'whitespace/blank_line', 3,
+              'Redundant blank line at the end of a code block '
+              'should be deleted.')
+
+    matched = Match(r'\s*(public|protected|private):', prev_line)
+    if matched:
+      error(filename, linenum, 'whitespace/blank_line', 3,
+            'Do not leave a blank line after "%s:"' % matched.group(1))
+
+  # Next, we complain if there's a comment too near the text
+  commentpos = line.find('//')
+  if commentpos != -1:
+    # Check if the // may be in quotes.  If so, ignore it
+    # Comparisons made explicit for clarity -- pylint: disable=g-explicit-bool-comparison
+    if (line.count('"', 0, commentpos) -
+        line.count('\\"', 0, commentpos)) % 2 == 0:   # not in quotes
+      # Allow one space for new scopes, two spaces otherwise:
+      if (not Match(r'^\s*{ //', line) and
+          ((commentpos >= 1 and
+            line[commentpos-1] not in string.whitespace) or
+           (commentpos >= 2 and
+            line[commentpos-2] not in string.whitespace))):
+        error(filename, linenum, 'whitespace/comments', 2,
+              'At least two spaces is best between code and comments')
+      # There should always be a space between the // and the comment
+      commentend = commentpos + 2
+      if commentend < len(line) and not line[commentend] == ' ':
+        # but some lines are exceptions -- e.g. if they're big
+        # comment delimiters like:
+        # //----------------------------------------------------------
+        # or are an empty C++ style Doxygen comment, like:
+        # ///
+        # or C++ style Doxygen comments placed after the variable:
+        # ///<  Header comment
+        # //!<  Header comment
+        # or they begin with multiple slashes followed by a space:
+        # //////// Header comment
+        match = (Search(r'[=/-]{4,}\s*$', line[commentend:]) or
+                 Search(r'^/$', line[commentend:]) or
+                 Search(r'^!< ', line[commentend:]) or
+                 Search(r'^/< ', line[commentend:]) or
+                 Search(r'^/+ ', line[commentend:]))
+        if not match:
+          error(filename, linenum, 'whitespace/comments', 4,
+                'Should have a space between // and comment')
+      CheckComment(line[commentpos:], filename, linenum, error)
+
+  line = clean_lines.elided[linenum]  # get rid of comments and strings
+
+  # Don't try to do spacing checks for operator methods
+  line = re.sub(r'operator(==|!=|<|<<|<=|>=|>>|>)\(', 'operator\(', line)
+
+  # We allow no-spaces around = within an if: "if ( (a=Foo()) == 0 )".
+  # Otherwise not.  Note we only check for non-spaces on *both* sides;
+  # sometimes people put non-spaces on one side when aligning ='s among
+  # many lines (not that this is behavior that I approve of...)
+  if Search(r'[\w.]=[\w.]', line) and not Search(r'\b(if|while) ', line):
+    error(filename, linenum, 'whitespace/operators', 4,
+          'Missing spaces around =')
+
+  # It's ok not to have spaces around binary operators like + - * /, but if
+  # there's too little whitespace, we get concerned.  It's hard to tell,
+  # though, so we punt on this one for now.  TODO.
+
+  # You should always have whitespace around binary operators.
+  #
+  # Check <= and >= first to avoid false positives with < and >, then
+  # check non-include lines for spacing around < and >.
+  match = Search(r'[^<>=!\s](==|!=|<=|>=)[^<>=!\s]', line)
+  if match:
+    error(filename, linenum, 'whitespace/operators', 3,
+          'Missing spaces around %s' % match.group(1))
+  # We allow no-spaces around << when used like this: 10<<20, but
+  # not otherwise (particularly, not when used as streams)
+  # Also ignore using ns::operator<<;
+  match = Search(r'(operator|\S)(?:L|UL|ULL|l|ul|ull)?<<(\S)', line)
+  if (match and
+      not (match.group(1).isdigit() and match.group(2).isdigit()) and
+      not (match.group(1) == 'operator' and match.group(2) == ';')):
+    error(filename, linenum, 'whitespace/operators', 3,
+          'Missing spaces around <<')
+  elif not Match(r'#.*include', line):
+    # Avoid false positives on ->
+    reduced_line = line.replace('->', '')
+
+    # Look for < that is not surrounded by spaces.  This is only
+    # triggered if both sides are missing spaces, even though
+    # technically should should flag if at least one side is missing a
+    # space.  This is done to avoid some false positives with shifts.
+    match = Search(r'[^\s<]<([^\s=<].*)', reduced_line)
+    if (match and
+        not FindNextMatchingAngleBracket(clean_lines, linenum, match.group(1))):
+      error(filename, linenum, 'whitespace/operators', 3,
+            'Missing spaces around <')
+
+    # Look for > that is not surrounded by spaces.  Similar to the
+    # above, we only trigger if both sides are missing spaces to avoid
+    # false positives with shifts.
+    match = Search(r'^(.*[^\s>])>[^\s=>]', reduced_line)
+    if (match and
+        not FindPreviousMatchingAngleBracket(clean_lines, linenum,
+                                             match.group(1))):
+      error(filename, linenum, 'whitespace/operators', 3,
+            'Missing spaces around >')
+
+  # We allow no-spaces around >> for almost anything.  This is because
+  # C++11 allows ">>" to close nested templates, which accounts for
+  # most cases when ">>" is not followed by a space.
+  #
+  # We still warn on ">>" followed by alpha character, because that is
+  # likely due to ">>" being used for right shifts, e.g.:
+  #   value >> alpha
+  #
+  # When ">>" is used to close templates, the alphanumeric letter that
+  # follows would be part of an identifier, and there should still be
+  # a space separating the template type and the identifier.
+  #   type<type<type>> alpha
+  match = Search(r'>>[a-zA-Z_]', line)
+  if match:
+    error(filename, linenum, 'whitespace/operators', 3,
+          'Missing spaces around >>')
+
+  # There shouldn't be space around unary operators
+  match = Search(r'(!\s|~\s|[\s]--[\s;]|[\s]\+\+[\s;])', line)
+  if match:
+    error(filename, linenum, 'whitespace/operators', 4,
+          'Extra space for operator %s' % match.group(1))
+
+  # A pet peeve of mine: no spaces after an if, while, switch, or for
+  match = Search(r' (if\(|for\(|while\(|switch\()', line)
+  if match:
+    error(filename, linenum, 'whitespace/parens', 5,
+          'Missing space before ( in %s' % match.group(1))
+
+  # For if/for/while/switch, the left and right parens should be
+  # consistent about how many spaces are inside the parens, and
+  # there should either be zero or one spaces inside the parens.
+  # We don't want: "if ( foo)" or "if ( foo   )".
+  # Exception: "for ( ; foo; bar)" and "for (foo; bar; )" are allowed.
+  match = Search(r'\b(if|for|while|switch)\s*'
+                 r'\(([ ]*)(.).*[^ ]+([ ]*)\)\s*{\s*$',
+                 line)
+  if match:
+    if len(match.group(2)) != len(match.group(4)):
+      if not (match.group(3) == ';' and
+              len(match.group(2)) == 1 + len(match.group(4)) or
+              not match.group(2) and Search(r'\bfor\s*\(.*; \)', line)):
+        error(filename, linenum, 'whitespace/parens', 5,
+              'Mismatching spaces inside () in %s' % match.group(1))
+    if len(match.group(2)) not in [0, 1]:
+      error(filename, linenum, 'whitespace/parens', 5,
+            'Should have zero or one spaces inside ( and ) in %s' %
+            match.group(1))
+
+  # You should always have a space after a comma (either as fn arg or operator)
+  #
+  # This does not apply when the non-space character following the
+  # comma is another comma, since the only time when that happens is
+  # for empty macro arguments.
+  #
+  # We run this check in two passes: first pass on elided lines to
+  # verify that lines contain missing whitespaces, second pass on raw
+  # lines to confirm that those missing whitespaces are not due to
+  # elided comments.
+  if Search(r',[^,\s]', line) and Search(r',[^,\s]', raw[linenum]):
+    error(filename, linenum, 'whitespace/comma', 3,
+          'Missing space after ,')
+
+  # You should always have a space after a semicolon
+  # except for few corner cases
+  # TODO(unknown): clarify if 'if (1) { return 1;}' is requires one more
+  # space after ;
+  if Search(r';[^\s};\\)/]', line):
+    error(filename, linenum, 'whitespace/semicolon', 3,
+          'Missing space after ;')
+
+  # Next we will look for issues with function calls.
+  CheckSpacingForFunctionCall(filename, line, linenum, error)
+
+  # Except after an opening paren, or after another opening brace (in case of
+  # an initializer list, for instance), you should have spaces before your
+  # braces. And since you should never have braces at the beginning of a line,
+  # this is an easy test.
+  match = Match(r'^(.*[^ ({]){', line)
+  if match:
+    # Try a bit harder to check for brace initialization.  This
+    # happens in one of the following forms:
+    #   Constructor() : initializer_list_{} { ... }
+    #   Constructor{}.MemberFunction()
+    #   Type variable{};
+    #   FunctionCall(type{}, ...);
+    #   LastArgument(..., type{});
+    #   LOG(INFO) << type{} << " ...";
+    #   map_of_type[{...}] = ...;
+    #
+    # We check for the character following the closing brace, and
+    # silence the warning if it's one of those listed above, i.e.
+    # "{.;,)<]".
+    #
+    # To account for nested initializer list, we allow any number of
+    # closing braces up to "{;,)<".  We can't simply silence the
+    # warning on first sight of closing brace, because that would
+    # cause false negatives for things that are not initializer lists.
+    #   Silence this:         But not this:
+    #     Outer{                if (...) {
+    #       Inner{...}            if (...){  // Missing space before {
+    #     };                    }
+    #
+    # There is a false negative with this approach if people inserted
+    # spurious semicolons, e.g. "if (cond){};", but we will catch the
+    # spurious semicolon with a separate check.
+    (endline, endlinenum, endpos) = CloseExpression(
+        clean_lines, linenum, len(match.group(1)))
+    trailing_text = ''
+    if endpos > -1:
+      trailing_text = endline[endpos:]
+    for offset in xrange(endlinenum + 1,
+                         min(endlinenum + 3, clean_lines.NumLines() - 1)):
+      trailing_text += clean_lines.elided[offset]
+    if not Match(r'^[\s}]*[{.;,)<\]]', trailing_text):
+      error(filename, linenum, 'whitespace/braces', 5,
+            'Missing space before {')
+
+  # Make sure '} else {' has spaces.
+  if Search(r'}else', line):
+    error(filename, linenum, 'whitespace/braces', 5,
+          'Missing space before else')
+
+  # You shouldn't have spaces before your brackets, except maybe after
+  # 'delete []' or 'new char * []'.
+  if Search(r'\w\s+\[', line) and not Search(r'delete\s+\[', line):
+    error(filename, linenum, 'whitespace/braces', 5,
+          'Extra space before [')
+
+  # You shouldn't have a space before a semicolon at the end of the line.
+  # There's a special case for "for" since the style guide allows space before
+  # the semicolon there.
+  if Search(r':\s*;\s*$', line):
+    error(filename, linenum, 'whitespace/semicolon', 5,
+          'Semicolon defining empty statement. Use {} instead.')
+  elif Search(r'^\s*;\s*$', line):
+    error(filename, linenum, 'whitespace/semicolon', 5,
+          'Line contains only semicolon. If this should be an empty statement, '
+          'use {} instead.')
+  elif (Search(r'\s+;\s*$', line) and
+        not Search(r'\bfor\b', line)):
+    error(filename, linenum, 'whitespace/semicolon', 5,
+          'Extra space before last semicolon. If this should be an empty '
+          'statement, use {} instead.')
+
+  # In range-based for, we wanted spaces before and after the colon, but
+  # not around "::" tokens that might appear.
+  if (Search('for *\(.*[^:]:[^: ]', line) or
+      Search('for *\(.*[^: ]:[^:]', line)):
+    error(filename, linenum, 'whitespace/forcolon', 2,
+          'Missing space around colon in range-based for loop')
+
+
+def CheckSectionSpacing(filename, clean_lines, class_info, linenum, error):
+  """Checks for additional blank line issues related to sections.
+
+  Currently the only thing checked here is blank line before protected/private.
+
+  Args:
+    filename: The name of the current file.
+    clean_lines: A CleansedLines instance containing the file.
+    class_info: A _ClassInfo objects.
+    linenum: The number of the line to check.
+    error: The function to call with any errors found.
+  """
+  # Skip checks if the class is small, where small means 25 lines or less.
+  # 25 lines seems like a good cutoff since that's the usual height of
+  # terminals, and any class that can't fit in one screen can't really
+  # be considered "small".
+  #
+  # Also skip checks if we are on the first line.  This accounts for
+  # classes that look like
+  #   class Foo { public: ... };
+  #
+  # If we didn't find the end of the class, last_line would be zero,
+  # and the check will be skipped by the first condition.
+  if (class_info.last_line - class_info.starting_linenum <= 24 or
+      linenum <= class_info.starting_linenum):
+    return
+
+  matched = Match(r'\s*(public|protected|private):', clean_lines.lines[linenum])
+  if matched:
+    # Issue warning if the line before public/protected/private was
+    # not a blank line, but don't do this if the previous line contains
+    # "class" or "struct".  This can happen two ways:
+    #  - We are at the beginning of the class.
+    #  - We are forward-declaring an inner class that is semantically
+    #    private, but needed to be public for implementation reasons.
+    # Also ignores cases where the previous line ends with a backslash as can be
+    # common when defining classes in C macros.
+    prev_line = clean_lines.lines[linenum - 1]
+    if (not IsBlankLine(prev_line) and
+        not Search(r'\b(class|struct)\b', prev_line) and
+        not Search(r'\\$', prev_line)):
+      # Try a bit harder to find the beginning of the class.  This is to
+      # account for multi-line base-specifier lists, e.g.:
+      #   class Derived
+      #       : public Base {
+      end_class_head = class_info.starting_linenum
+      for i in range(class_info.starting_linenum, linenum):
+        if Search(r'\{\s*$', clean_lines.lines[i]):
+          end_class_head = i
+          break
+      if end_class_head < linenum - 1:
+        error(filename, linenum, 'whitespace/blank_line', 3,
+              '"%s:" should be preceded by a blank line' % matched.group(1))
+
+
+def GetPreviousNonBlankLine(clean_lines, linenum):
+  """Return the most recent non-blank line and its line number.
+
+  Args:
+    clean_lines: A CleansedLines instance containing the file contents.
+    linenum: The number of the line to check.
+
+  Returns:
+    A tuple with two elements.  The first element is the contents of the last
+    non-blank line before the current line, or the empty string if this is the
+    first non-blank line.  The second is the line number of that line, or -1
+    if this is the first non-blank line.
+  """
+
+  prevlinenum = linenum - 1
+  while prevlinenum >= 0:
+    prevline = clean_lines.elided[prevlinenum]
+    if not IsBlankLine(prevline):     # if not a blank line...
+      return (prevline, prevlinenum)
+    prevlinenum -= 1
+  return ('', -1)
+
+
+def CheckBraces(filename, clean_lines, linenum, error):
+  """Looks for misplaced braces (e.g. at the end of line).
+
+  Args:
+    filename: The name of the current file.
+    clean_lines: A CleansedLines instance containing the file.
+    linenum: The number of the line to check.
+    error: The function to call with any errors found.
+  """
+
+  line = clean_lines.elided[linenum]        # get rid of comments and strings
+
+  if Match(r'\s*{\s*$', line):
+    # We allow an open brace to start a line in the case where someone is using
+    # braces in a block to explicitly create a new scope, which is commonly used
+    # to control the lifetime of stack-allocated variables.  Braces are also
+    # used for brace initializers inside function calls.  We don't detect this
+    # perfectly: we just don't complain if the last non-whitespace character on
+    # the previous non-blank line is ',', ';', ':', '(', '{', or '}', or if the
+    # previous line starts a preprocessor block.
+    prevline = GetPreviousNonBlankLine(clean_lines, linenum)[0]
+    if (not Search(r'[,;:}{(]\s*$', prevline) and
+        not Match(r'\s*#', prevline)):
+      error(filename, linenum, 'whitespace/braces', 4,
+            '{ should almost always be at the end of the previous line')
+
+  # An else clause should be on the same line as the preceding closing brace.
+  if Match(r'\s*else\s*', line):
+    prevline = GetPreviousNonBlankLine(clean_lines, linenum)[0]
+    if Match(r'\s*}\s*$', prevline):
+      error(filename, linenum, 'whitespace/newline', 4,
+            'An else should appear on the same line as the preceding }')
+
+  # If braces come on one side of an else, they should be on both.
+  # However, we have to worry about "else if" that spans multiple lines!
+  if Search(r'}\s*else[^{]*$', line) or Match(r'[^}]*else\s*{', line):
+    if Search(r'}\s*else if([^{]*)$', line):       # could be multi-line if
+      # find the ( after the if
+      pos = line.find('else if')
+      pos = line.find('(', pos)
+      if pos > 0:
+        (endline, _, endpos) = CloseExpression(clean_lines, linenum, pos)
+        if endline[endpos:].find('{') == -1:    # must be brace after if
+          error(filename, linenum, 'readability/braces', 5,
+                'If an else has a brace on one side, it should have it on both')
+    else:            # common case: else not followed by a multi-line if
+      error(filename, linenum, 'readability/braces', 5,
+            'If an else has a brace on one side, it should have it on both')
+
+  # Likewise, an else should never have the else clause on the same line
+  if Search(r'\belse [^\s{]', line) and not Search(r'\belse if\b', line):
+    error(filename, linenum, 'whitespace/newline', 4,
+          'Else clause should never be on same line as else (use 2 lines)')
+
+  # In the same way, a do/while should never be on one line
+  if Match(r'\s*do [^\s{]', line):
+    error(filename, linenum, 'whitespace/newline', 4,
+          'do/while clauses should not be on a single line')
+
+  # Block bodies should not be followed by a semicolon.  Due to C++11
+  # brace initialization, there are more places where semicolons are
+  # required than not, so we use a whitelist approach to check these
+  # rather than a blacklist.  These are the places where "};" should
+  # be replaced by just "}":
+  # 1. Some flavor of block following closing parenthesis:
+  #    for (;;) {};
+  #    while (...) {};
+  #    switch (...) {};
+  #    Function(...) {};
+  #    if (...) {};
+  #    if (...) else if (...) {};
+  #
+  # 2. else block:
+  #    if (...) else {};
+  #
+  # 3. const member function:
+  #    Function(...) const {};
+  #
+  # 4. Block following some statement:
+  #    x = 42;
+  #    {};
+  #
+  # 5. Block at the beginning of a function:
+  #    Function(...) {
+  #      {};
+  #    }
+  #
+  #    Note that naively checking for the preceding "{" will also match
+  #    braces inside multi-dimensional arrays, but this is fine since
+  #    that expression will not contain semicolons.
+  #
+  # 6. Block following another block:
+  #    while (true) {}
+  #    {};
+  #
+  # 7. End of namespaces:
+  #    namespace {};
+  #
+  #    These semicolons seems far more common than other kinds of
+  #    redundant semicolons, possibly due to people converting classes
+  #    to namespaces.  For now we do not warn for this case.
+  #
+  # Try matching case 1 first.
+  match = Match(r'^(.*\)\s*)\{', line)
+  if match:
+    # Matched closing parenthesis (case 1).  Check the token before the
+    # matching opening parenthesis, and don't warn if it looks like a
+    # macro.  This avoids these false positives:
+    #  - macro that defines a base class
+    #  - multi-line macro that defines a base class
+    #  - macro that defines the whole class-head
+    #
+    # But we still issue warnings for macros that we know are safe to
+    # warn, specifically:
+    #  - TEST, TEST_F, TEST_P, MATCHER, MATCHER_P
+    #  - TYPED_TEST
+    #  - INTERFACE_DEF
+    #  - EXCLUSIVE_LOCKS_REQUIRED, SHARED_LOCKS_REQUIRED, LOCKS_EXCLUDED:
+    #
+    # We implement a whitelist of safe macros instead of a blacklist of
+    # unsafe macros, even though the latter appears less frequently in
+    # google code and would have been easier to implement.  This is because
+    # the downside for getting the whitelist wrong means some extra
+    # semicolons, while the downside for getting the blacklist wrong
+    # would result in compile errors.
+    #
+    # In addition to macros, we also don't want to warn on compound
+    # literals.
+    closing_brace_pos = match.group(1).rfind(')')
+    opening_parenthesis = ReverseCloseExpression(
+        clean_lines, linenum, closing_brace_pos)
+    if opening_parenthesis[2] > -1:
+      line_prefix = opening_parenthesis[0][0:opening_parenthesis[2]]
+      macro = Search(r'\b([A-Z_]+)\s*$', line_prefix)
+      if ((macro and
+           macro.group(1) not in (
+               'TEST', 'TEST_F', 'MATCHER', 'MATCHER_P', 'TYPED_TEST',
+               'EXCLUSIVE_LOCKS_REQUIRED', 'SHARED_LOCKS_REQUIRED',
+               'LOCKS_EXCLUDED', 'INTERFACE_DEF')) or
+          Search(r'\s+=\s*$', line_prefix)):
+        match = None
+
+  else:
+    # Try matching cases 2-3.
+    match = Match(r'^(.*(?:else|\)\s*const)\s*)\{', line)
+    if not match:
+      # Try matching cases 4-6.  These are always matched on separate lines.
+      #
+      # Note that we can't simply concatenate the previous line to the
+      # current line and do a single match, otherwise we may output
+      # duplicate warnings for the blank line case:
+      #   if (cond) {
+      #     // blank line
+      #   }
+      prevline = GetPreviousNonBlankLine(clean_lines, linenum)[0]
+      if prevline and Search(r'[;{}]\s*$', prevline):
+        match = Match(r'^(\s*)\{', line)
+
+  # Check matching closing brace
+  if match:
+    (endline, endlinenum, endpos) = CloseExpression(
+        clean_lines, linenum, len(match.group(1)))
+    if endpos > -1 and Match(r'^\s*;', endline[endpos:]):
+      # Current {} pair is eligible for semicolon check, and we have found
+      # the redundant semicolon, output warning here.
+      #
+      # Note: because we are scanning forward for opening braces, and
+      # outputting warnings for the matching closing brace, if there are
+      # nested blocks with trailing semicolons, we will get the error
+      # messages in reversed order.
+      error(filename, endlinenum, 'readability/braces', 4,
+            "You don't need a ; after a }")
+
+
+def CheckEmptyBlockBody(filename, clean_lines, linenum, error):
+  """Look for empty loop/conditional body with only a single semicolon.
+
+  Args:
+    filename: The name of the current file.
+    clean_lines: A CleansedLines instance containing the file.
+    linenum: The number of the line to check.
+    error: The function to call with any errors found.
+  """
+
+  # Search for loop keywords at the beginning of the line.  Because only
+  # whitespaces are allowed before the keywords, this will also ignore most
+  # do-while-loops, since those lines should start with closing brace.
+  #
+  # We also check "if" blocks here, since an empty conditional block
+  # is likely an error.
+  line = clean_lines.elided[linenum]
+  matched = Match(r'\s*(for|while|if)\s*\(', line)
+  if matched:
+    # Find the end of the conditional expression
+    (end_line, end_linenum, end_pos) = CloseExpression(
+        clean_lines, linenum, line.find('('))
+
+    # Output warning if what follows the condition expression is a semicolon.
+    # No warning for all other cases, including whitespace or newline, since we
+    # have a separate check for semicolons preceded by whitespace.
+    if end_pos >= 0 and Match(r';', end_line[end_pos:]):
+      if matched.group(1) == 'if':
+        error(filename, end_linenum, 'whitespace/empty_conditional_body', 5,
+              'Empty conditional bodies should use {}')
+      else:
+        error(filename, end_linenum, 'whitespace/empty_loop_body', 5,
+              'Empty loop bodies should use {} or continue')
+
+
+def CheckCheck(filename, clean_lines, linenum, error):
+  """Checks the use of CHECK and EXPECT macros.
+
+  Args:
+    filename: The name of the current file.
+    clean_lines: A CleansedLines instance containing the file.
+    linenum: The number of the line to check.
+    error: The function to call with any errors found.
+  """
+
+  # Decide the set of replacement macros that should be suggested
+  lines = clean_lines.elided
+  check_macro = None
+  start_pos = -1
+  for macro in _CHECK_MACROS:
+    i = lines[linenum].find(macro)
+    if i >= 0:
+      check_macro = macro
+
+      # Find opening parenthesis.  Do a regular expression match here
+      # to make sure that we are matching the expected CHECK macro, as
+      # opposed to some other macro that happens to contain the CHECK
+      # substring.
+      matched = Match(r'^(.*\b' + check_macro + r'\s*)\(', lines[linenum])
+      if not matched:
+        continue
+      start_pos = len(matched.group(1))
+      break
+  if not check_macro or start_pos < 0:
+    # Don't waste time here if line doesn't contain 'CHECK' or 'EXPECT'
+    return
+
+  # Find end of the boolean expression by matching parentheses
+  (last_line, end_line, end_pos) = CloseExpression(
+      clean_lines, linenum, start_pos)
+  if end_pos < 0:
+    return
+  if linenum == end_line:
+    expression = lines[linenum][start_pos + 1:end_pos - 1]
+  else:
+    expression = lines[linenum][start_pos + 1:]
+    for i in xrange(linenum + 1, end_line):
+      expression += lines[i]
+    expression += last_line[0:end_pos - 1]
+
+  # Parse expression so that we can take parentheses into account.
+  # This avoids false positives for inputs like "CHECK((a < 4) == b)",
+  # which is not replaceable by CHECK_LE.
+  lhs = ''
+  rhs = ''
+  operator = None
+  while expression:
+    matched = Match(r'^\s*(<<|<<=|>>|>>=|->\*|->|&&|\|\||'
+                    r'==|!=|>=|>|<=|<|\()(.*)$', expression)
+    if matched:
+      token = matched.group(1)
+      if token == '(':
+        # Parenthesized operand
+        expression = matched.group(2)
+        (end, _) = FindEndOfExpressionInLine(expression, 0, 1, '(', ')')
+        if end < 0:
+          return  # Unmatched parenthesis
+        lhs += '(' + expression[0:end]
+        expression = expression[end:]
+      elif token in ('&&', '||'):
+        # Logical and/or operators.  This means the expression
+        # contains more than one term, for example:
+        #   CHECK(42 < a && a < b);
+        #
+        # These are not replaceable with CHECK_LE, so bail out early.
+        return
+      elif token in ('<<', '<<=', '>>', '>>=', '->*', '->'):
+        # Non-relational operator
+        lhs += token
+        expression = matched.group(2)
+      else:
+        # Relational operator
+        operator = token
+        rhs = matched.group(2)
+        break
+    else:
+      # Unparenthesized operand.  Instead of appending to lhs one character
+      # at a time, we do another regular expression match to consume several
+      # characters at once if possible.  Trivial benchmark shows that this
+      # is more efficient when the operands are longer than a single
+      # character, which is generally the case.
+      matched = Match(r'^([^-=!<>()&|]+)(.*)$', expression)
+      if not matched:
+        matched = Match(r'^(\s*\S)(.*)$', expression)
+        if not matched:
+          break
+      lhs += matched.group(1)
+      expression = matched.group(2)
+
+  # Only apply checks if we got all parts of the boolean expression
+  if not (lhs and operator and rhs):
+    return
+
+  # Check that rhs do not contain logical operators.  We already know
+  # that lhs is fine since the loop above parses out && and ||.
+  if rhs.find('&&') > -1 or rhs.find('||') > -1:
+    return
+
+  # At least one of the operands must be a constant literal.  This is
+  # to avoid suggesting replacements for unprintable things like
+  # CHECK(variable != iterator)
+  #
+  # The following pattern matches decimal, hex integers, strings, and
+  # characters (in that order).
+  lhs = lhs.strip()
+  rhs = rhs.strip()
+  match_constant = r'^([-+]?(\d+|0[xX][0-9a-fA-F]+)[lLuU]{0,3}|".*"|\'.*\')$'
+  if Match(match_constant, lhs) or Match(match_constant, rhs):
+    # Note: since we know both lhs and rhs, we can provide a more
+    # descriptive error message like:
+    #   Consider using CHECK_EQ(x, 42) instead of CHECK(x == 42)
+    # Instead of:
+    #   Consider using CHECK_EQ instead of CHECK(a == b)
+    #
+    # We are still keeping the less descriptive message because if lhs
+    # or rhs gets long, the error message might become unreadable.
+    error(filename, linenum, 'readability/check', 2,
+          'Consider using %s instead of %s(a %s b)' % (
+              _CHECK_REPLACEMENT[check_macro][operator],
+              check_macro, operator))
+
+
+def CheckAltTokens(filename, clean_lines, linenum, error):
+  """Check alternative keywords being used in boolean expressions.
+
+  Args:
+    filename: The name of the current file.
+    clean_lines: A CleansedLines instance containing the file.
+    linenum: The number of the line to check.
+    error: The function to call with any errors found.
+  """
+  line = clean_lines.elided[linenum]
+
+  # Avoid preprocessor lines
+  if Match(r'^\s*#', line):
+    return
+
+  # Last ditch effort to avoid multi-line comments.  This will not help
+  # if the comment started before the current line or ended after the
+  # current line, but it catches most of the false positives.  At least,
+  # it provides a way to workaround this warning for people who use
+  # multi-line comments in preprocessor macros.
+  #
+  # TODO(unknown): remove this once cpplint has better support for
+  # multi-line comments.
+  if line.find('/*') >= 0 or line.find('*/') >= 0:
+    return
+
+  for match in _ALT_TOKEN_REPLACEMENT_PATTERN.finditer(line):
+    error(filename, linenum, 'readability/alt_tokens', 2,
+          'Use operator %s instead of %s' % (
+              _ALT_TOKEN_REPLACEMENT[match.group(1)], match.group(1)))
+
+
+def GetLineWidth(line):
+  """Determines the width of the line in column positions.
+
+  Args:
+    line: A string, which may be a Unicode string.
+
+  Returns:
+    The width of the line in column positions, accounting for Unicode
+    combining characters and wide characters.
+  """
+  if isinstance(line, unicode):
+    width = 0
+    for uc in unicodedata.normalize('NFC', line):
+      if unicodedata.east_asian_width(uc) in ('W', 'F'):
+        width += 2
+      elif not unicodedata.combining(uc):
+        width += 1
+    return width
+  else:
+    return len(line)
+
+
+def CheckStyle(filename, clean_lines, linenum, file_extension, nesting_state,
+               error):
+  """Checks rules from the 'C++ style rules' section of cppguide.html.
+
+  Most of these rules are hard to test (naming, comment style), but we
+  do what we can.  In particular we check for 2-space indents, line lengths,
+  tab usage, spaces inside code, etc.
+
+  Args:
+    filename: The name of the current file.
+    clean_lines: A CleansedLines instance containing the file.
+    linenum: The number of the line to check.
+    file_extension: The extension (without the dot) of the filename.
+    nesting_state: A _NestingState instance which maintains information about
+                   the current stack of nested blocks being parsed.
+    error: The function to call with any errors found.
+  """
+
+  # Don't use "elided" lines here, otherwise we can't check commented lines.
+  # Don't want to use "raw" either, because we don't want to check inside C++11
+  # raw strings,
+  raw_lines = clean_lines.lines_without_raw_strings
+  line = raw_lines[linenum]
+
+  if line.find('\t') != -1:
+    error(filename, linenum, 'whitespace/tab', 1,
+          'Tab found; better to use spaces')
+
+  # One or three blank spaces at the beginning of the line is weird; it's
+  # hard to reconcile that with 2-space indents.
+  # NOTE: here are the conditions rob pike used for his tests.  Mine aren't
+  # as sophisticated, but it may be worth becoming so:  RLENGTH==initial_spaces
+  # if(RLENGTH > 20) complain = 0;
+  # if(match($0, " +(error|private|public|protected):")) complain = 0;
+  # if(match(prev, "&& *$")) complain = 0;
+  # if(match(prev, "\\|\\| *$")) complain = 0;
+  # if(match(prev, "[\",=><] *$")) complain = 0;
+  # if(match($0, " <<")) complain = 0;
+  # if(match(prev, " +for \\(")) complain = 0;
+  # if(prevodd && match(prevprev, " +for \\(")) complain = 0;
+  initial_spaces = 0
+  cleansed_line = clean_lines.elided[linenum]
+  while initial_spaces < len(line) and line[initial_spaces] == ' ':
+    initial_spaces += 1
+  if line and line[-1].isspace():
+    error(filename, linenum, 'whitespace/end_of_line', 4,
+          'Line ends in whitespace.  Consider deleting these extra spaces.')
+  # There are certain situations we allow one space, notably for section labels
+  elif ((initial_spaces == 1 or initial_spaces == 3) and
+        not Match(r'\s*\w+\s*:\s*$', cleansed_line)):
+    error(filename, linenum, 'whitespace/indent', 3,
+          'Weird number of spaces at line-start.  '
+          'Are you using a 2-space indent?')
+
+  # Check if the line is a header guard.
+  is_header_guard = False
+  if file_extension == 'h':
+    cppvar = GetHeaderGuardCPPVariable(filename)
+    if (line.startswith('#ifndef %s' % cppvar) or
+        line.startswith('#define %s' % cppvar) or
+        line.startswith('#endif  // %s' % cppvar)):
+      is_header_guard = True
+  # #include lines and header guards can be long, since there's no clean way to
+  # split them.
+  #
+  # URLs can be long too.  It's possible to split these, but it makes them
+  # harder to cut&paste.
+  #
+  # The "$Id:...$" comment may also get very long without it being the
+  # developers fault.
+  if (not line.startswith('#include') and not is_header_guard and
+      not Match(r'^\s*//.*http(s?)://\S*$', line) and
+      not Match(r'^// \$Id:.*#[0-9]+ \$$', line)):
+    line_width = GetLineWidth(line)
+    extended_length = int((_line_length * 1.25))
+    if line_width > extended_length:
+      error(filename, linenum, 'whitespace/line_length', 4,
+            'Lines should very rarely be longer than %i characters' %
+            extended_length)
+    elif line_width > _line_length:
+      error(filename, linenum, 'whitespace/line_length', 2,
+            'Lines should be <= %i characters long' % _line_length)
+
+  if (cleansed_line.count(';') > 1 and
+      # for loops are allowed two ;'s (and may run over two lines).
+      cleansed_line.find('for') == -1 and
+      (GetPreviousNonBlankLine(clean_lines, linenum)[0].find('for') == -1 or
+       GetPreviousNonBlankLine(clean_lines, linenum)[0].find(';') != -1) and
+      # It's ok to have many commands in a switch case that fits in 1 line
+      not ((cleansed_line.find('case ') != -1 or
+            cleansed_line.find('default:') != -1) and
+           cleansed_line.find('break;') != -1)):
+    error(filename, linenum, 'whitespace/newline', 0,
+          'More than one command on the same line')
+
+  # Some more style checks
+  CheckBraces(filename, clean_lines, linenum, error)
+  CheckEmptyBlockBody(filename, clean_lines, linenum, error)
+  CheckAccess(filename, clean_lines, linenum, nesting_state, error)
+  CheckSpacing(filename, clean_lines, linenum, nesting_state, error)
+  CheckCheck(filename, clean_lines, linenum, error)
+  CheckAltTokens(filename, clean_lines, linenum, error)
+  classinfo = nesting_state.InnermostClass()
+  if classinfo:
+    CheckSectionSpacing(filename, clean_lines, classinfo, linenum, error)
+
+
+_RE_PATTERN_INCLUDE_NEW_STYLE = re.compile(r'#include +"[^/]+\.h"')
+_RE_PATTERN_INCLUDE = re.compile(r'^\s*#\s*include\s*([<"])([^>"]*)[>"].*$')
+# Matches the first component of a filename delimited by -s and _s. That is:
+#  _RE_FIRST_COMPONENT.match('foo').group(0) == 'foo'
+#  _RE_FIRST_COMPONENT.match('foo.cc').group(0) == 'foo'
+#  _RE_FIRST_COMPONENT.match('foo-bar_baz.cc').group(0) == 'foo'
+#  _RE_FIRST_COMPONENT.match('foo_bar-baz.cc').group(0) == 'foo'
+_RE_FIRST_COMPONENT = re.compile(r'^[^-_.]+')
+
+
+def _DropCommonSuffixes(filename):
+  """Drops common suffixes like _test.cc or -inl.h from filename.
+
+  For example:
+    >>> _DropCommonSuffixes('foo/foo-inl.h')
+    'foo/foo'
+    >>> _DropCommonSuffixes('foo/bar/foo.cc')
+    'foo/bar/foo'
+    >>> _DropCommonSuffixes('foo/foo_internal.h')
+    'foo/foo'
+    >>> _DropCommonSuffixes('foo/foo_unusualinternal.h')
+    'foo/foo_unusualinternal'
+
+  Args:
+    filename: The input filename.
+
+  Returns:
+    The filename with the common suffix removed.
+  """
+  for suffix in ('test.cc', 'regtest.cc', 'unittest.cc',
+                 'inl.h', 'impl.h', 'internal.h'):
+    if (filename.endswith(suffix) and len(filename) > len(suffix) and
+        filename[-len(suffix) - 1] in ('-', '_')):
+      return filename[:-len(suffix) - 1]
+  return os.path.splitext(filename)[0]
+
+
+def _IsTestFilename(filename):
+  """Determines if the given filename has a suffix that identifies it as a test.
+
+  Args:
+    filename: The input filename.
+
+  Returns:
+    True if 'filename' looks like a test, False otherwise.
+  """
+  if (filename.endswith('_test.cc') or
+      filename.endswith('_unittest.cc') or
+      filename.endswith('_regtest.cc')):
+    return True
+  else:
+    return False
+
+
+def _ClassifyInclude(fileinfo, include, is_system):
+  """Figures out what kind of header 'include' is.
+
+  Args:
+    fileinfo: The current file cpplint is running over. A FileInfo instance.
+    include: The path to a #included file.
+    is_system: True if the #include used <> rather than "".
+
+  Returns:
+    One of the _XXX_HEADER constants.
+
+  For example:
+    >>> _ClassifyInclude(FileInfo('foo/foo.cc'), 'stdio.h', True)
+    _C_SYS_HEADER
+    >>> _ClassifyInclude(FileInfo('foo/foo.cc'), 'string', True)
+    _CPP_SYS_HEADER
+    >>> _ClassifyInclude(FileInfo('foo/foo.cc'), 'foo/foo.h', False)
+    _LIKELY_MY_HEADER
+    >>> _ClassifyInclude(FileInfo('foo/foo_unknown_extension.cc'),
+    ...                  'bar/foo_other_ext.h', False)
+    _POSSIBLE_MY_HEADER
+    >>> _ClassifyInclude(FileInfo('foo/foo.cc'), 'foo/bar.h', False)
+    _OTHER_HEADER
+  """
+  # This is a list of all standard c++ header files, except
+  # those already checked for above.
+  is_cpp_h = include in _CPP_HEADERS
+
+  if is_system:
+    if is_cpp_h:
+      return _CPP_SYS_HEADER
+    else:
+      return _C_SYS_HEADER
+
+  # If the target file and the include we're checking share a
+  # basename when we drop common extensions, and the include
+  # lives in . , then it's likely to be owned by the target file.
+  target_dir, target_base = (
+      os.path.split(_DropCommonSuffixes(fileinfo.RepositoryName())))
+  include_dir, include_base = os.path.split(_DropCommonSuffixes(include))
+  if target_base == include_base and (
+      include_dir == target_dir or
+      include_dir == os.path.normpath(target_dir + '/../public')):
+    return _LIKELY_MY_HEADER
+
+  # If the target and include share some initial basename
+  # component, it's possible the target is implementing the
+  # include, so it's allowed to be first, but we'll never
+  # complain if it's not there.
+  target_first_component = _RE_FIRST_COMPONENT.match(target_base)
+  include_first_component = _RE_FIRST_COMPONENT.match(include_base)
+  if (target_first_component and include_first_component and
+      target_first_component.group(0) ==
+      include_first_component.group(0)):
+    return _POSSIBLE_MY_HEADER
+
+  return _OTHER_HEADER
+
+
+
+def CheckIncludeLine(filename, clean_lines, linenum, include_state, error):
+  """Check rules that are applicable to #include lines.
+
+  Strings on #include lines are NOT removed from elided line, to make
+  certain tasks easier. However, to prevent false positives, checks
+  applicable to #include lines in CheckLanguage must be put here.
+
+  Args:
+    filename: The name of the current file.
+    clean_lines: A CleansedLines instance containing the file.
+    linenum: The number of the line to check.
+    include_state: An _IncludeState instance in which the headers are inserted.
+    error: The function to call with any errors found.
+  """
+  fileinfo = FileInfo(filename)
+
+  line = clean_lines.lines[linenum]
+
+  # "include" should use the new style "foo/bar.h" instead of just "bar.h"
+  if _RE_PATTERN_INCLUDE_NEW_STYLE.search(line):
+    error(filename, linenum, 'build/include', 4,
+          'Include the directory when naming .h files')
+
+  # we shouldn't include a file more than once. actually, there are a
+  # handful of instances where doing so is okay, but in general it's
+  # not.
+  match = _RE_PATTERN_INCLUDE.search(line)
+  if match:
+    include = match.group(2)
+    is_system = (match.group(1) == '<')
+    if include in include_state:
+      error(filename, linenum, 'build/include', 4,
+            '"%s" already included at %s:%s' %
+            (include, filename, include_state[include]))
+    else:
+      include_state[include] = linenum
+
+      # We want to ensure that headers appear in the right order:
+      # 1) for foo.cc, foo.h  (preferred location)
+      # 2) c system files
+      # 3) cpp system files
+      # 4) for foo.cc, foo.h  (deprecated location)
+      # 5) other google headers
+      #
+      # We classify each include statement as one of those 5 types
+      # using a number of techniques. The include_state object keeps
+      # track of the highest type seen, and complains if we see a
+      # lower type after that.
+      error_message = include_state.CheckNextIncludeOrder(
+          _ClassifyInclude(fileinfo, include, is_system))
+      if error_message:
+        error(filename, linenum, 'build/include_order', 4,
+              '%s. Should be: %s.h, c system, c++ system, other.' %
+              (error_message, fileinfo.BaseName()))
+      canonical_include = include_state.CanonicalizeAlphabeticalOrder(include)
+      if not include_state.IsInAlphabeticalOrder(
+          clean_lines, linenum, canonical_include):
+        error(filename, linenum, 'build/include_alpha', 4,
+              'Include "%s" not in alphabetical order' % include)
+      include_state.SetLastHeader(canonical_include)
+
+  # Look for any of the stream classes that are part of standard C++.
+  match = _RE_PATTERN_INCLUDE.match(line)
+  if match:
+    include = match.group(2)
+    if Match(r'(f|ind|io|i|o|parse|pf|stdio|str|)?stream$', include):
+      # Many unit tests use cout, so we exempt them.
+      if not _IsTestFilename(filename):
+        error(filename, linenum, 'readability/streams', 3,
+              'Streams are highly discouraged.')
+
+
+def _GetTextInside(text, start_pattern):
+  r"""Retrieves all the text between matching open and close parentheses.
+
+  Given a string of lines and a regular expression string, retrieve all the text
+  following the expression and between opening punctuation symbols like
+  (, [, or {, and the matching close-punctuation symbol. This properly nested
+  occurrences of the punctuations, so for the text like
+    printf(a(), b(c()));
+  a call to _GetTextInside(text, r'printf\(') will return 'a(), b(c())'.
+  start_pattern must match string having an open punctuation symbol at the end.
+
+  Args:
+    text: The lines to extract text. Its comments and strings must be elided.
+           It can be single line and can span multiple lines.
+    start_pattern: The regexp string indicating where to start extracting
+                   the text.
+  Returns:
+    The extracted text.
+    None if either the opening string or ending punctuation could not be found.
+  """
+  # TODO(sugawarayu): Audit cpplint.py to see what places could be profitably
+  # rewritten to use _GetTextInside (and use inferior regexp matching today).
+
+  # Give opening punctuations to get the matching close-punctuations.
+  matching_punctuation = {'(': ')', '{': '}', '[': ']'}
+  closing_punctuation = set(matching_punctuation.itervalues())
+
+  # Find the position to start extracting text.
+  match = re.search(start_pattern, text, re.M)
+  if not match:  # start_pattern not found in text.
+    return None
+  start_position = match.end(0)
+
+  assert start_position > 0, (
+      'start_pattern must ends with an opening punctuation.')
+  assert text[start_position - 1] in matching_punctuation, (
+      'start_pattern must ends with an opening punctuation.')
+  # Stack of closing punctuations we expect to have in text after position.
+  punctuation_stack = [matching_punctuation[text[start_position - 1]]]
+  position = start_position
+  while punctuation_stack and position < len(text):
+    if text[position] == punctuation_stack[-1]:
+      punctuation_stack.pop()
+    elif text[position] in closing_punctuation:
+      # A closing punctuation without matching opening punctuations.
+      return None
+    elif text[position] in matching_punctuation:
+      punctuation_stack.append(matching_punctuation[text[position]])
+    position += 1
+  if punctuation_stack:
+    # Opening punctuations left without matching close-punctuations.
+    return None
+  # punctuations match.
+  return text[start_position:position - 1]
+
+
+# Patterns for matching call-by-reference parameters.
+#
+# Supports nested templates up to 2 levels deep using this messy pattern:
+#   < (?: < (?: < [^<>]*
+#               >
+#           |   [^<>] )*
+#         >
+#     |   [^<>] )*
+#   >
+_RE_PATTERN_IDENT = r'[_a-zA-Z]\w*'  # =~ [[:alpha:]][[:alnum:]]*
+_RE_PATTERN_TYPE = (
+    r'(?:const\s+)?(?:typename\s+|class\s+|struct\s+|union\s+|enum\s+)?'
+    r'(?:\w|'
+    r'\s*<(?:<(?:<[^<>]*>|[^<>])*>|[^<>])*>|'
+    r'::)+')
+# A call-by-reference parameter ends with '& identifier'.
+_RE_PATTERN_REF_PARAM = re.compile(
+    r'(' + _RE_PATTERN_TYPE + r'(?:\s*(?:\bconst\b|[*]))*\s*'
+    r'&\s*' + _RE_PATTERN_IDENT + r')\s*(?:=[^,()]+)?[,)]')
+# A call-by-const-reference parameter either ends with 'const& identifier'
+# or looks like 'const type& identifier' when 'type' is atomic.
+_RE_PATTERN_CONST_REF_PARAM = (
+    r'(?:.*\s*\bconst\s*&\s*' + _RE_PATTERN_IDENT +
+    r'|const\s+' + _RE_PATTERN_TYPE + r'\s*&\s*' + _RE_PATTERN_IDENT + r')')
+
+
+def CheckLanguage(filename, clean_lines, linenum, file_extension,
+                  include_state, nesting_state, error):
+  """Checks rules from the 'C++ language rules' section of cppguide.html.
+
+  Some of these rules are hard to test (function overloading, using
+  uint32 inappropriately), but we do the best we can.
+
+  Args:
+    filename: The name of the current file.
+    clean_lines: A CleansedLines instance containing the file.
+    linenum: The number of the line to check.
+    file_extension: The extension (without the dot) of the filename.
+    include_state: An _IncludeState instance in which the headers are inserted.
+    nesting_state: A _NestingState instance which maintains information about
+                   the current stack of nested blocks being parsed.
+    error: The function to call with any errors found.
+  """
+  # If the line is empty or consists of entirely a comment, no need to
+  # check it.
+  line = clean_lines.elided[linenum]
+  if not line:
+    return
+
+  match = _RE_PATTERN_INCLUDE.search(line)
+  if match:
+    CheckIncludeLine(filename, clean_lines, linenum, include_state, error)
+    return
+
+  # Reset include state across preprocessor directives.  This is meant
+  # to silence warnings for conditional includes.
+  if Match(r'^\s*#\s*(?:ifdef|elif|else|endif)\b', line):
+    include_state.ResetSection()
+
+  # Make Windows paths like Unix.
+  fullname = os.path.abspath(filename).replace('\\', '/')
+
+  # TODO(unknown): figure out if they're using default arguments in fn proto.
+
+  # Check to see if they're using an conversion function cast.
+  # I just try to capture the most common basic types, though there are more.
+  # Parameterless conversion functions, such as bool(), are allowed as they are
+  # probably a member operator declaration or default constructor.
+  match = Search(
+      r'(\bnew\s+)?\b'  # Grab 'new' operator, if it's there
+      r'(int|float|double|bool|char|int32|uint32|int64|uint64)'
+      r'(\([^)].*)', line)
+  if match:
+    matched_new = match.group(1)
+    matched_type = match.group(2)
+    matched_funcptr = match.group(3)
+
+    # gMock methods are defined using some variant of MOCK_METHODx(name, type)
+    # where type may be float(), int(string), etc.  Without context they are
+    # virtually indistinguishable from int(x) casts. Likewise, gMock's
+    # MockCallback takes a template parameter of the form return_type(arg_type),
+    # which looks much like the cast we're trying to detect.
+    #
+    # std::function<> wrapper has a similar problem.
+    #
+    # Return types for function pointers also look like casts if they
+    # don't have an extra space.
+    if (matched_new is None and  # If new operator, then this isn't a cast
+        not (Match(r'^\s*MOCK_(CONST_)?METHOD\d+(_T)?\(', line) or
+             Search(r'\bMockCallback<.*>', line) or
+             Search(r'\bstd::function<.*>', line)) and
+        not (matched_funcptr and
+             Match(r'\((?:[^() ]+::\s*\*\s*)?[^() ]+\)\s*\(',
+                   matched_funcptr))):
+      # Try a bit harder to catch gmock lines: the only place where
+      # something looks like an old-style cast is where we declare the
+      # return type of the mocked method, and the only time when we
+      # are missing context is if MOCK_METHOD was split across
+      # multiple lines.  The missing MOCK_METHOD is usually one or two
+      # lines back, so scan back one or two lines.
+      #
+      # It's not possible for gmock macros to appear in the first 2
+      # lines, since the class head + section name takes up 2 lines.
+      if (linenum < 2 or
+          not (Match(r'^\s*MOCK_(?:CONST_)?METHOD\d+(?:_T)?\((?:\S+,)?\s*$',
+                     clean_lines.elided[linenum - 1]) or
+               Match(r'^\s*MOCK_(?:CONST_)?METHOD\d+(?:_T)?\(\s*$',
+                     clean_lines.elided[linenum - 2]))):
+        error(filename, linenum, 'readability/casting', 4,
+              'Using deprecated casting style.  '
+              'Use static_cast<%s>(...) instead' %
+              matched_type)
+
+  CheckCStyleCast(filename, linenum, line, clean_lines.raw_lines[linenum],
+                  'static_cast',
+                  r'\((int|float|double|bool|char|u?int(16|32|64))\)', error)
+
+  # This doesn't catch all cases. Consider (const char * const)"hello".
+  #
+  # (char *) "foo" should always be a const_cast (reinterpret_cast won't
+  # compile).
+  if CheckCStyleCast(filename, linenum, line, clean_lines.raw_lines[linenum],
+                     'const_cast', r'\((char\s?\*+\s?)\)\s*"', error):
+    pass
+  else:
+    # Check pointer casts for other than string constants
+    CheckCStyleCast(filename, linenum, line, clean_lines.raw_lines[linenum],
+                    'reinterpret_cast', r'\((\w+\s?\*+\s?)\)', error)
+
+  # In addition, we look for people taking the address of a cast.  This
+  # is dangerous -- casts can assign to temporaries, so the pointer doesn't
+  # point where you think.
+  match = Search(
+      r'(?:&\(([^)]+)\)[\w(])|'
+      r'(?:&(static|dynamic|down|reinterpret)_cast\b)', line)
+  if match and match.group(1) != '*':
+    error(filename, linenum, 'runtime/casting', 4,
+          ('Are you taking an address of a cast?  '
+           'This is dangerous: could be a temp var.  '
+           'Take the address before doing the cast, rather than after'))
+
+  # Create an extended_line, which is the concatenation of the current and
+  # next lines, for more effective checking of code that may span more than one
+  # line.
+  if linenum + 1 < clean_lines.NumLines():
+    extended_line = line + clean_lines.elided[linenum + 1]
+  else:
+    extended_line = line
+
+  # Check for people declaring static/global STL strings at the top level.
+  # This is dangerous because the C++ language does not guarantee that
+  # globals with constructors are initialized before the first access.
+  match = Match(
+      r'((?:|static +)(?:|const +))string +([a-zA-Z0-9_:]+)\b(.*)',
+      line)
+  # Make sure it's not a function.
+  # Function template specialization looks like: "string foo<Type>(...".
+  # Class template definitions look like: "string Foo<Type>::Method(...".
+  #
+  # Also ignore things that look like operators.  These are matched separately
+  # because operator names cross non-word boundaries.  If we change the pattern
+  # above, we would decrease the accuracy of matching identifiers.
+  if (match and
+      not Search(r'\boperator\W', line) and
+      not Match(r'\s*(<.*>)?(::[a-zA-Z0-9_]+)?\s*\(([^"]|$)', match.group(3))):
+    error(filename, linenum, 'runtime/string', 4,
+          'For a static/global string constant, use a C style string instead: '
+          '"%schar %s[]".' %
+          (match.group(1), match.group(2)))
+
+  if Search(r'\b([A-Za-z0-9_]*_)\(\1\)', line):
+    error(filename, linenum, 'runtime/init', 4,
+          'You seem to be initializing a member variable with itself.')
+
+  if file_extension == 'h':
+    # TODO(unknown): check that 1-arg constructors are explicit.
+    #                How to tell it's a constructor?
+    #                (handled in CheckForNonStandardConstructs for now)
+    # TODO(unknown): check that classes have DISALLOW_EVIL_CONSTRUCTORS
+    #                (level 1 error)
+    pass
+
+  # Check if people are using the verboten C basic types.  The only exception
+  # we regularly allow is "unsigned short port" for port.
+  if Search(r'\bshort port\b', line):
+    if not Search(r'\bunsigned short port\b', line):
+      error(filename, linenum, 'runtime/int', 4,
+            'Use "unsigned short" for ports, not "short"')
+  else:
+    match = Search(r'\b(short|long(?! +double)|long long)\b', line)
+    if match:
+      error(filename, linenum, 'runtime/int', 4,
+            'Use int16/int64/etc, rather than the C type %s' % match.group(1))
+
+  # When snprintf is used, the second argument shouldn't be a literal.
+  match = Search(r'snprintf\s*\(([^,]*),\s*([0-9]*)\s*,', line)
+  if match and match.group(2) != '0':
+    # If 2nd arg is zero, snprintf is used to calculate size.
+    error(filename, linenum, 'runtime/printf', 3,
+          'If you can, use sizeof(%s) instead of %s as the 2nd arg '
+          'to snprintf.' % (match.group(1), match.group(2)))
+
+  # Check if some verboten C functions are being used.
+  if Search(r'\bsprintf\b', line):
+    error(filename, linenum, 'runtime/printf', 5,
+          'Never use sprintf.  Use snprintf instead.')
+  match = Search(r'\b(strcpy|strcat)\b', line)
+  if match:
+    error(filename, linenum, 'runtime/printf', 4,
+          'Almost always, snprintf is better than %s' % match.group(1))
+
+  # Check if some verboten operator overloading is going on
+  # TODO(unknown): catch out-of-line unary operator&:
+  #   class X {};
+  #   int operator&(const X& x) { return 42; }  // unary operator&
+  # The trick is it's hard to tell apart from binary operator&:
+  #   class Y { int operator&(const Y& x) { return 23; } }; // binary operator&
+  if Search(r'\boperator\s*&\s*\(\s*\)', line):
+    error(filename, linenum, 'runtime/operator', 4,
+          'Unary operator& is dangerous.  Do not use it.')
+
+  # Check for suspicious usage of "if" like
+  # } if (a == b) {
+  if Search(r'\}\s*if\s*\(', line):
+    error(filename, linenum, 'readability/braces', 4,
+          'Did you mean "else if"? If not, start a new line for "if".')
+
+  # Check for potential format string bugs like printf(foo).
+  # We constrain the pattern not to pick things like DocidForPrintf(foo).
+  # Not perfect but it can catch printf(foo.c_str()) and printf(foo->c_str())
+  # TODO(sugawarayu): Catch the following case. Need to change the calling
+  # convention of the whole function to process multiple line to handle it.
+  #   printf(
+  #       boy_this_is_a_really_long_variable_that_cannot_fit_on_the_prev_line);
+  printf_args = _GetTextInside(line, r'(?i)\b(string)?printf\s*\(')
+  if printf_args:
+    match = Match(r'([\w.\->()]+)$', printf_args)
+    if match and match.group(1) != '__VA_ARGS__':
+      function_name = re.search(r'\b((?:string)?printf)\s*\(',
+                                line, re.I).group(1)
+      error(filename, linenum, 'runtime/printf', 4,
+            'Potential format string bug. Do %s("%%s", %s) instead.'
+            % (function_name, match.group(1)))
+
+  # Check for potential memset bugs like memset(buf, sizeof(buf), 0).
+  match = Search(r'memset\s*\(([^,]*),\s*([^,]*),\s*0\s*\)', line)
+  if match and not Match(r"^''|-?[0-9]+|0x[0-9A-Fa-f]$", match.group(2)):
+    error(filename, linenum, 'runtime/memset', 4,
+          'Did you mean "memset(%s, 0, %s)"?'
+          % (match.group(1), match.group(2)))
+
+  if Search(r'\busing namespace\b', line):
+    error(filename, linenum, 'build/namespaces', 5,
+          'Do not use namespace using-directives.  '
+          'Use using-declarations instead.')
+
+  # Detect variable-length arrays.
+  match = Match(r'\s*(.+::)?(\w+) [a-z]\w*\[(.+)];', line)
+  if (match and match.group(2) != 'return' and match.group(2) != 'delete' and
+      match.group(3).find(']') == -1):
+    # Split the size using space and arithmetic operators as delimiters.
+    # If any of the resulting tokens are not compile time constants then
+    # report the error.
+    tokens = re.split(r'\s|\+|\-|\*|\/|<<|>>]', match.group(3))
+    is_const = True
+    skip_next = False
+    for tok in tokens:
+      if skip_next:
+        skip_next = False
+        continue
+
+      if Search(r'sizeof\(.+\)', tok): continue
+      if Search(r'arraysize\(\w+\)', tok): continue
+
+      tok = tok.lstrip('(')
+      tok = tok.rstrip(')')
+      if not tok: continue
+      if Match(r'\d+', tok): continue
+      if Match(r'0[xX][0-9a-fA-F]+', tok): continue
+      if Match(r'k[A-Z0-9]\w*', tok): continue
+      if Match(r'(.+::)?k[A-Z0-9]\w*', tok): continue
+      if Match(r'(.+::)?[A-Z][A-Z0-9_]*', tok): continue
+      # A catch all for tricky sizeof cases, including 'sizeof expression',
+      # 'sizeof(*type)', 'sizeof(const type)', 'sizeof(struct StructName)'
+      # requires skipping the next token because we split on ' ' and '*'.
+      if tok.startswith('sizeof'):
+        skip_next = True
+        continue
+      is_const = False
+      break
+    if not is_const:
+      error(filename, linenum, 'runtime/arrays', 1,
+            'Do not use variable-length arrays.  Use an appropriately named '
+            "('k' followed by CamelCase) compile-time constant for the size.")
+
+  # If DISALLOW_EVIL_CONSTRUCTORS, DISALLOW_COPY_AND_ASSIGN, or
+  # DISALLOW_IMPLICIT_CONSTRUCTORS is present, then it should be the last thing
+  # in the class declaration.
+  match = Match(
+      (r'\s*'
+       r'(DISALLOW_(EVIL_CONSTRUCTORS|COPY_AND_ASSIGN|IMPLICIT_CONSTRUCTORS))'
+       r'\(.*\);$'),
+      line)
+  if match and linenum + 1 < clean_lines.NumLines():
+    next_line = clean_lines.elided[linenum + 1]
+    # We allow some, but not all, declarations of variables to be present
+    # in the statement that defines the class.  The [\w\*,\s]* fragment of
+    # the regular expression below allows users to declare instances of
+    # the class or pointers to instances, but not less common types such
+    # as function pointers or arrays.  It's a tradeoff between allowing
+    # reasonable code and avoiding trying to parse more C++ using regexps.
+    if not Search(r'^\s*}[\w\*,\s]*;', next_line):
+      error(filename, linenum, 'readability/constructors', 3,
+            match.group(1) + ' should be the last thing in the class')
+
+  # Check for use of unnamed namespaces in header files.  Registration
+  # macros are typically OK, so we allow use of "namespace {" on lines
+  # that end with backslashes.
+  if (file_extension == 'h'
+      and Search(r'\bnamespace\s*{', line)
+      and line[-1] != '\\'):
+    error(filename, linenum, 'build/namespaces', 4,
+          'Do not use unnamed namespaces in header files.  See '
+          'http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Namespaces'
+          ' for more information.')
+
+def CheckForNonConstReference(filename, clean_lines, linenum,
+                              nesting_state, error):
+  """Check for non-const references.
+
+  Separate from CheckLanguage since it scans backwards from current
+  line, instead of scanning forward.
+
+  Args:
+    filename: The name of the current file.
+    clean_lines: A CleansedLines instance containing the file.
+    linenum: The number of the line to check.
+    nesting_state: A _NestingState instance which maintains information about
+                   the current stack of nested blocks being parsed.
+    error: The function to call with any errors found.
+  """
+  # Do nothing if there is no '&' on current line.
+  line = clean_lines.elided[linenum]
+  if '&' not in line:
+    return
+
+  # Long type names may be broken across multiple lines, usually in one
+  # of these forms:
+  #   LongType
+  #       ::LongTypeContinued &identifier
+  #   LongType::
+  #       LongTypeContinued &identifier
+  #   LongType<
+  #       ...>::LongTypeContinued &identifier
+  #
+  # If we detected a type split across two lines, join the previous
+  # line to current line so that we can match const references
+  # accordingly.
+  #
+  # Note that this only scans back one line, since scanning back
+  # arbitrary number of lines would be expensive.  If you have a type
+  # that spans more than 2 lines, please use a typedef.
+  if linenum > 1:
+    previous = None
+    if Match(r'\s*::(?:[\w<>]|::)+\s*&\s*\S', line):
+      # previous_line\n + ::current_line
+      previous = Search(r'\b((?:const\s*)?(?:[\w<>]|::)+[\w<>])\s*$',
+                        clean_lines.elided[linenum - 1])
+    elif Match(r'\s*[a-zA-Z_]([\w<>]|::)+\s*&\s*\S', line):
+      # previous_line::\n + current_line
+      previous = Search(r'\b((?:const\s*)?(?:[\w<>]|::)+::)\s*$',
+                        clean_lines.elided[linenum - 1])
+    if previous:
+      line = previous.group(1) + line.lstrip()
+    else:
+      # Check for templated parameter that is split across multiple lines
+      endpos = line.rfind('>')
+      if endpos > -1:
+        (_, startline, startpos) = ReverseCloseExpression(
+            clean_lines, linenum, endpos)
+        if startpos > -1 and startline < linenum:
+          # Found the matching < on an earlier line, collect all
+          # pieces up to current line.
+          line = ''
+          for i in xrange(startline, linenum + 1):
+            line += clean_lines.elided[i].strip()
+
+  # Check for non-const references in function parameters.  A single '&' may
+  # found in the following places:
+  #   inside expression: binary & for bitwise AND
+  #   inside expression: unary & for taking the address of something
+  #   inside declarators: reference parameter
+  # We will exclude the first two cases by checking that we are not inside a
+  # function body, including one that was just introduced by a trailing '{'.
+  # TODO(unknwon): Doesn't account for preprocessor directives.
+  # TODO(unknown): Doesn't account for 'catch(Exception& e)' [rare].
+  check_params = False
+  if not nesting_state.stack:
+    check_params = True  # top level
+  elif (isinstance(nesting_state.stack[-1], _ClassInfo) or
+        isinstance(nesting_state.stack[-1], _NamespaceInfo)):
+    check_params = True  # within class or namespace
+  elif Match(r'.*{\s*$', line):
+    if (len(nesting_state.stack) == 1 or
+        isinstance(nesting_state.stack[-2], _ClassInfo) or
+        isinstance(nesting_state.stack[-2], _NamespaceInfo)):
+      check_params = True  # just opened global/class/namespace block
+  # We allow non-const references in a few standard places, like functions
+  # called "swap()" or iostream operators like "<<" or ">>".  Do not check
+  # those function parameters.
+  #
+  # We also accept & in static_assert, which looks like a function but
+  # it's actually a declaration expression.
+  whitelisted_functions = (r'(?:[sS]wap(?:<\w:+>)?|'
+                           r'operator\s*[<>][<>]|'
+                           r'static_assert|COMPILE_ASSERT'
+                           r')\s*\(')
+  if Search(whitelisted_functions, line):
+    check_params = False
+  elif not Search(r'\S+\([^)]*$', line):
+    # Don't see a whitelisted function on this line.  Actually we
+    # didn't see any function name on this line, so this is likely a
+    # multi-line parameter list.  Try a bit harder to catch this case.
+    for i in xrange(2):
+      if (linenum > i and
+          Search(whitelisted_functions, clean_lines.elided[linenum - i - 1])):
+        check_params = False
+        break
+
+  if check_params:
+    decls = ReplaceAll(r'{[^}]*}', ' ', line)  # exclude function body
+    for parameter in re.findall(_RE_PATTERN_REF_PARAM, decls):
+      if not Match(_RE_PATTERN_CONST_REF_PARAM, parameter):
+        error(filename, linenum, 'runtime/references', 2,
+              'Is this a non-const reference? '
+              'If so, make const or use a pointer: ' +
+              ReplaceAll(' *<', '<', parameter))
+
+
+def CheckCStyleCast(filename, linenum, line, raw_line, cast_type, pattern,
+                    error):
+  """Checks for a C-style cast by looking for the pattern.
+
+  Args:
+    filename: The name of the current file.
+    linenum: The number of the line to check.
+    line: The line of code to check.
+    raw_line: The raw line of code to check, with comments.
+    cast_type: The string for the C++ cast to recommend.  This is either
+      reinterpret_cast, static_cast, or const_cast, depending.
+    pattern: The regular expression used to find C-style casts.
+    error: The function to call with any errors found.
+
+  Returns:
+    True if an error was emitted.
+    False otherwise.
+  """
+  match = Search(pattern, line)
+  if not match:
+    return False
+
+  # Exclude lines with sizeof, since sizeof looks like a cast.
+  sizeof_match = Match(r'.*sizeof\s*$', line[0:match.start(1) - 1])
+  if sizeof_match:
+    return False
+
+  # operator++(int) and operator--(int)
+  if (line[0:match.start(1) - 1].endswith(' operator++') or
+      line[0:match.start(1) - 1].endswith(' operator--')):
+    return False
+
+  # A single unnamed argument for a function tends to look like old
+  # style cast.  If we see those, don't issue warnings for deprecated
+  # casts, instead issue warnings for unnamed arguments where
+  # appropriate.
+  #
+  # These are things that we want warnings for, since the style guide
+  # explicitly require all parameters to be named:
+  #   Function(int);
+  #   Function(int) {
+  #   ConstMember(int) const;
+  #   ConstMember(int) const {
+  #   ExceptionMember(int) throw (...);
+  #   ExceptionMember(int) throw (...) {
+  #   PureVirtual(int) = 0;
+  #
+  # These are functions of some sort, where the compiler would be fine
+  # if they had named parameters, but people often omit those
+  # identifiers to reduce clutter:
+  #   (FunctionPointer)(int);
+  #   (FunctionPointer)(int) = value;
+  #   Function((function_pointer_arg)(int))
+  #   <TemplateArgument(int)>;
+  #   <(FunctionPointerTemplateArgument)(int)>;
+  remainder = line[match.end(0):]
+  if Match(r'^\s*(?:;|const\b|throw\b|=|>|\{|\))', remainder):
+    # Looks like an unnamed parameter.
+
+    # Don't warn on any kind of template arguments.
+    if Match(r'^\s*>', remainder):
+      return False
+
+    # Don't warn on assignments to function pointers, but keep warnings for
+    # unnamed parameters to pure virtual functions.  Note that this pattern
+    # will also pass on assignments of "0" to function pointers, but the
+    # preferred values for those would be "nullptr" or "NULL".
+    matched_zero = Match(r'^\s=\s*(\S+)\s*;', remainder)
+    if matched_zero and matched_zero.group(1) != '0':
+      return False
+
+    # Don't warn on function pointer declarations.  For this we need
+    # to check what came before the "(type)" string.
+    if Match(r'.*\)\s*$', line[0:match.start(0)]):
+      return False
+
+    # Don't warn if the parameter is named with block comments, e.g.:
+    #  Function(int /*unused_param*/);
+    if '/*' in raw_line:
+      return False
+
+    # Passed all filters, issue warning here.
+    error(filename, linenum, 'readability/function', 3,
+          'All parameters should be named in a function')
+    return True
+
+  # At this point, all that should be left is actual casts.
+  error(filename, linenum, 'readability/casting', 4,
+        'Using C-style cast.  Use %s<%s>(...) instead' %
+        (cast_type, match.group(1)))
+
+  return True
+
+
+_HEADERS_CONTAINING_TEMPLATES = (
+    ('<deque>', ('deque',)),
+    ('<functional>', ('unary_function', 'binary_function',
+                      'plus', 'minus', 'multiplies', 'divides', 'modulus',
+                      'negate',
+                      'equal_to', 'not_equal_to', 'greater', 'less',
+                      'greater_equal', 'less_equal',
+                      'logical_and', 'logical_or', 'logical_not',
+                      'unary_negate', 'not1', 'binary_negate', 'not2',
+                      'bind1st', 'bind2nd',
+                      'pointer_to_unary_function',
+                      'pointer_to_binary_function',
+                      'ptr_fun',
+                      'mem_fun_t', 'mem_fun', 'mem_fun1_t', 'mem_fun1_ref_t',
+                      'mem_fun_ref_t',
+                      'const_mem_fun_t', 'const_mem_fun1_t',
+                      'const_mem_fun_ref_t', 'const_mem_fun1_ref_t',
+                      'mem_fun_ref',
+                     )),
+    ('<limits>', ('numeric_limits',)),
+    ('<list>', ('list',)),
+    ('<map>', ('map', 'multimap',)),
+    ('<memory>', ('allocator',)),
+    ('<queue>', ('queue', 'priority_queue',)),
+    ('<set>', ('set', 'multiset',)),
+    ('<stack>', ('stack',)),
+    ('<string>', ('char_traits', 'basic_string',)),
+    ('<utility>', ('pair',)),
+    ('<vector>', ('vector',)),
+
+    # gcc extensions.
+    # Note: std::hash is their hash, ::hash is our hash
+    ('<hash_map>', ('hash_map', 'hash_multimap',)),
+    ('<hash_set>', ('hash_set', 'hash_multiset',)),
+    ('<slist>', ('slist',)),
+    )
+
+_RE_PATTERN_STRING = re.compile(r'\bstring\b')
+
+_re_pattern_algorithm_header = []
+for _template in ('copy', 'max', 'min', 'min_element', 'sort', 'swap',
+                  'transform'):
+  # Match max<type>(..., ...), max(..., ...), but not foo->max, foo.max or
+  # type::max().
+  _re_pattern_algorithm_header.append(
+      (re.compile(r'[^>.]\b' + _template + r'(<.*?>)?\([^\)]'),
+       _template,
+       '<algorithm>'))
+
+_re_pattern_templates = []
+for _header, _templates in _HEADERS_CONTAINING_TEMPLATES:
+  for _template in _templates:
+    _re_pattern_templates.append(
+        (re.compile(r'(\<|\b)' + _template + r'\s*\<'),
+         _template + '<>',
+         _header))
+
+
+def FilesBelongToSameModule(filename_cc, filename_h):
+  """Check if these two filenames belong to the same module.
+
+  The concept of a 'module' here is a as follows:
+  foo.h, foo-inl.h, foo.cc, foo_test.cc and foo_unittest.cc belong to the
+  same 'module' if they are in the same directory.
+  some/path/public/xyzzy and some/path/internal/xyzzy are also considered
+  to belong to the same module here.
+
+  If the filename_cc contains a longer path than the filename_h, for example,
+  '/absolute/path/to/base/sysinfo.cc', and this file would include
+  'base/sysinfo.h', this function also produces the prefix needed to open the
+  header. This is used by the caller of this function to more robustly open the
+  header file. We don't have access to the real include paths in this context,
+  so we need this guesswork here.
+
+  Known bugs: tools/base/bar.cc and base/bar.h belong to the same module
+  according to this implementation. Because of this, this function gives
+  some false positives. This should be sufficiently rare in practice.
+
+  Args:
+    filename_cc: is the path for the .cc file
+    filename_h: is the path for the header path
+
+  Returns:
+    Tuple with a bool and a string:
+    bool: True if filename_cc and filename_h belong to the same module.
+    string: the additional prefix needed to open the header file.
+  """
+
+  if not filename_cc.endswith('.cc'):
+    return (False, '')
+  filename_cc = filename_cc[:-len('.cc')]
+  if filename_cc.endswith('_unittest'):
+    filename_cc = filename_cc[:-len('_unittest')]
+  elif filename_cc.endswith('_test'):
+    filename_cc = filename_cc[:-len('_test')]
+  filename_cc = filename_cc.replace('/public/', '/')
+  filename_cc = filename_cc.replace('/internal/', '/')
+
+  if not filename_h.endswith('.h'):
+    return (False, '')
+  filename_h = filename_h[:-len('.h')]
+  if filename_h.endswith('-inl'):
+    filename_h = filename_h[:-len('-inl')]
+  filename_h = filename_h.replace('/public/', '/')
+  filename_h = filename_h.replace('/internal/', '/')
+
+  files_belong_to_same_module = filename_cc.endswith(filename_h)
+  common_path = ''
+  if files_belong_to_same_module:
+    common_path = filename_cc[:-len(filename_h)]
+  return files_belong_to_same_module, common_path
+
+
+def UpdateIncludeState(filename, include_state, io=codecs):
+  """Fill up the include_state with new includes found from the file.
+
+  Args:
+    filename: the name of the header to read.
+    include_state: an _IncludeState instance in which the headers are inserted.
+    io: The io factory to use to read the file. Provided for testability.
+
+  Returns:
+    True if a header was succesfully added. False otherwise.
+  """
+  headerfile = None
+  try:
+    headerfile = io.open(filename, 'r', 'utf8', 'replace')
+  except IOError:
+    return False
+  linenum = 0
+  for line in headerfile:
+    linenum += 1
+    clean_line = CleanseComments(line)
+    match = _RE_PATTERN_INCLUDE.search(clean_line)
+    if match:
+      include = match.group(2)
+      # The value formatting is cute, but not really used right now.
+      # What matters here is that the key is in include_state.
+      include_state.setdefault(include, '%s:%d' % (filename, linenum))
+  return True
+
+
+def CheckForIncludeWhatYouUse(filename, clean_lines, include_state, error,
+                              io=codecs):
+  """Reports for missing stl includes.
+
+  This function will output warnings to make sure you are including the headers
+  necessary for the stl containers and functions that you use. We only give one
+  reason to include a header. For example, if you use both equal_to<> and
+  less<> in a .h file, only one (the latter in the file) of these will be
+  reported as a reason to include the <functional>.
+
+  Args:
+    filename: The name of the current file.
+    clean_lines: A CleansedLines instance containing the file.
+    include_state: An _IncludeState instance.
+    error: The function to call with any errors found.
+    io: The IO factory to use to read the header file. Provided for unittest
+        injection.
+  """
+  required = {}  # A map of header name to linenumber and the template entity.
+                 # Example of required: { '<functional>': (1219, 'less<>') }
+
+  for linenum in xrange(clean_lines.NumLines()):
+    line = clean_lines.elided[linenum]
+    if not line or line[0] == '#':
+      continue
+
+    # String is special -- it is a non-templatized type in STL.
+    matched = _RE_PATTERN_STRING.search(line)
+    if matched:
+      # Don't warn about strings in non-STL namespaces:
+      # (We check only the first match per line; good enough.)
+      prefix = line[:matched.start()]
+      if prefix.endswith('std::') or not prefix.endswith('::'):
+        required['<string>'] = (linenum, 'string')
+
+    for pattern, template, header in _re_pattern_algorithm_header:
+      if pattern.search(line):
+        required[header] = (linenum, template)
+
+    # The following function is just a speed up, no semantics are changed.
+    if not '<' in line:  # Reduces the cpu time usage by skipping lines.
+      continue
+
+    for pattern, template, header in _re_pattern_templates:
+      if pattern.search(line):
+        required[header] = (linenum, template)
+
+  # The policy is that if you #include something in foo.h you don't need to
+  # include it again in foo.cc. Here, we will look at possible includes.
+  # Let's copy the include_state so it is only messed up within this function.
+  include_state = include_state.copy()
+
+  # Did we find the header for this file (if any) and succesfully load it?
+  header_found = False
+
+  # Use the absolute path so that matching works properly.
+  abs_filename = FileInfo(filename).FullName()
+
+  # For Emacs's flymake.
+  # If cpplint is invoked from Emacs's flymake, a temporary file is generated
+  # by flymake and that file name might end with '_flymake.cc'. In that case,
+  # restore original file name here so that the corresponding header file can be
+  # found.
+  # e.g. If the file name is 'foo_flymake.cc', we should search for 'foo.h'
+  # instead of 'foo_flymake.h'
+  abs_filename = re.sub(r'_flymake\.cc$', '.cc', abs_filename)
+
+  # include_state is modified during iteration, so we iterate over a copy of
+  # the keys.
+  header_keys = include_state.keys()
+  for header in header_keys:
+    (same_module, common_path) = FilesBelongToSameModule(abs_filename, header)
+    fullpath = common_path + header
+    if same_module and UpdateIncludeState(fullpath, include_state, io):
+      header_found = True
+
+  # If we can't find the header file for a .cc, assume it's because we don't
+  # know where to look. In that case we'll give up as we're not sure they
+  # didn't include it in the .h file.
+  # TODO(unknown): Do a better job of finding .h files so we are confident that
+  # not having the .h file means there isn't one.
+  if filename.endswith('.cc') and not header_found:
+    return
+
+  # All the lines have been processed, report the errors found.
+  for required_header_unstripped in required:
+    template = required[required_header_unstripped][1]
+    if required_header_unstripped.strip('<>"') not in include_state:
+      error(filename, required[required_header_unstripped][0],
+            'build/include_what_you_use', 4,
+            'Add #include ' + required_header_unstripped + ' for ' + template)
+
+
+_RE_PATTERN_EXPLICIT_MAKEPAIR = re.compile(r'\bmake_pair\s*<')
+
+
+def CheckMakePairUsesDeduction(filename, clean_lines, linenum, error):
+  """Check that make_pair's template arguments are deduced.
+
+  G++ 4.6 in C++0x mode fails badly if make_pair's template arguments are
+  specified explicitly, and such use isn't intended in any case.
+
+  Args:
+    filename: The name of the current file.
+    clean_lines: A CleansedLines instance containing the file.
+    linenum: The number of the line to check.
+    error: The function to call with any errors found.
+  """
+  line = clean_lines.elided[linenum]
+  match = _RE_PATTERN_EXPLICIT_MAKEPAIR.search(line)
+  if match:
+    error(filename, linenum, 'build/explicit_make_pair',
+          4,  # 4 = high confidence
+          'For C++11-compatibility, omit template arguments from make_pair'
+          ' OR use pair directly OR if appropriate, construct a pair directly')
+
+
+def ProcessLine(filename, file_extension, clean_lines, line,
+                include_state, function_state, nesting_state, error,
+                extra_check_functions=[]):
+  """Processes a single line in the file.
+
+  Args:
+    filename: Filename of the file that is being processed.
+    file_extension: The extension (dot not included) of the file.
+    clean_lines: An array of strings, each representing a line of the file,
+                 with comments stripped.
+    line: Number of line being processed.
+    include_state: An _IncludeState instance in which the headers are inserted.
+    function_state: A _FunctionState instance which counts function lines, etc.
+    nesting_state: A _NestingState instance which maintains information about
+                   the current stack of nested blocks being parsed.
+    error: A callable to which errors are reported, which takes 4 arguments:
+           filename, line number, error level, and message
+    extra_check_functions: An array of additional check functions that will be
+                           run on each source line. Each function takes 4
+                           arguments: filename, clean_lines, line, error
+  """
+  raw_lines = clean_lines.raw_lines
+  ParseNolintSuppressions(filename, raw_lines[line], line, error)
+  nesting_state.Update(filename, clean_lines, line, error)
+  if nesting_state.stack and nesting_state.stack[-1].inline_asm != _NO_ASM:
+    return
+  CheckForFunctionLengths(filename, clean_lines, line, function_state, error)
+  CheckForMultilineCommentsAndStrings(filename, clean_lines, line, error)
+  CheckStyle(filename, clean_lines, line, file_extension, nesting_state, error)
+  CheckLanguage(filename, clean_lines, line, file_extension, include_state,
+                nesting_state, error)
+  CheckForNonConstReference(filename, clean_lines, line, nesting_state, error)
+  CheckForNonStandardConstructs(filename, clean_lines, line,
+                                nesting_state, error)
+  CheckVlogArguments(filename, clean_lines, line, error)
+  CheckPosixThreading(filename, clean_lines, line, error)
+  CheckInvalidIncrement(filename, clean_lines, line, error)
+  CheckMakePairUsesDeduction(filename, clean_lines, line, error)
+  for check_fn in extra_check_functions:
+    check_fn(filename, clean_lines, line, error)
+
+def ProcessFileData(filename, file_extension, lines, error,
+                    extra_check_functions=[]):
+  """Performs lint checks and reports any errors to the given error function.
+
+  Args:
+    filename: Filename of the file that is being processed.
+    file_extension: The extension (dot not included) of the file.
+    lines: An array of strings, each representing a line of the file, with the
+           last element being empty if the file is terminated with a newline.
+    error: A callable to which errors are reported, which takes 4 arguments:
+           filename, line number, error level, and message
+    extra_check_functions: An array of additional check functions that will be
+                           run on each source line. Each function takes 4
+                           arguments: filename, clean_lines, line, error
+  """
+  lines = (['// marker so line numbers and indices both start at 1'] + lines +
+           ['// marker so line numbers end in a known way'])
+
+  include_state = _IncludeState()
+  function_state = _FunctionState()
+  nesting_state = _NestingState()
+
+  ResetNolintSuppressions()
+
+  CheckForCopyright(filename, lines, error)
+
+  if file_extension == 'h':
+    CheckForHeaderGuard(filename, lines, error)
+
+  RemoveMultiLineComments(filename, lines, error)
+  clean_lines = CleansedLines(lines)
+  for line in xrange(clean_lines.NumLines()):
+    ProcessLine(filename, file_extension, clean_lines, line,
+                include_state, function_state, nesting_state, error,
+                extra_check_functions)
+  nesting_state.CheckCompletedBlocks(filename, error)
+
+  CheckForIncludeWhatYouUse(filename, clean_lines, include_state, error)
+
+  # We check here rather than inside ProcessLine so that we see raw
+  # lines rather than "cleaned" lines.
+  CheckForBadCharacters(filename, lines, error)
+
+  CheckForNewlineAtEOF(filename, lines, error)
+
+def ProcessFile(filename, vlevel, extra_check_functions=[]):
+  """Does google-lint on a single file.
+
+  Args:
+    filename: The name of the file to parse.
+
+    vlevel: The level of errors to report.  Every error of confidence
+    >= verbose_level will be reported.  0 is a good default.
+
+    extra_check_functions: An array of additional check functions that will be
+                           run on each source line. Each function takes 4
+                           arguments: filename, clean_lines, line, error
+  """
+
+  _SetVerboseLevel(vlevel)
+
+  try:
+    # Support the UNIX convention of using "-" for stdin.  Note that
+    # we are not opening the file with universal newline support
+    # (which codecs doesn't support anyway), so the resulting lines do
+    # contain trailing '\r' characters if we are reading a file that
+    # has CRLF endings.
+    # If after the split a trailing '\r' is present, it is removed
+    # below. If it is not expected to be present (i.e. os.linesep !=
+    # '\r\n' as in Windows), a warning is issued below if this file
+    # is processed.
+
+    if filename == '-':
+      lines = codecs.StreamReaderWriter(sys.stdin,
+                                        codecs.getreader('utf8'),
+                                        codecs.getwriter('utf8'),
+                                        'replace').read().split('\n')
+    else:
+      lines = codecs.open(filename, 'r', 'utf8', 'replace').read().split('\n')
+
+    carriage_return_found = False
+    # Remove trailing '\r'.
+    for linenum in range(len(lines)):
+      if lines[linenum].endswith('\r'):
+        lines[linenum] = lines[linenum].rstrip('\r')
+        carriage_return_found = True
+
+  except IOError:
+    sys.stderr.write(
+        "Skipping input '%s': Can't open for reading\n" % filename)
+    return
+
+  # Note, if no dot is found, this will give the entire filename as the ext.
+  file_extension = filename[filename.rfind('.') + 1:]
+
+  # When reading from stdin, the extension is unknown, so no cpplint tests
+  # should rely on the extension.
+  valid_extensions = ['cc', 'h', 'cpp', 'cu', 'cuh']
+  if filename != '-' and file_extension not in valid_extensions:
+    sys.stderr.write('Ignoring %s; not a valid file name '
+                     '(.cc, .h, .cpp, .cu, .cuh)\n' % filename)
+  else:
+    ProcessFileData(filename, file_extension, lines, Error,
+                    extra_check_functions)
+    if carriage_return_found and os.linesep != '\r\n':
+      # Use 0 for linenum since outputting only one error for potentially
+      # several lines.
+      Error(filename, 0, 'whitespace/newline', 1,
+            'One or more unexpected \\r (^M) found;'
+            'better to use only a \\n')
+
+  sys.stderr.write('Done processing %s\n' % filename)
+
+
+def PrintUsage(message):
+  """Prints a brief usage string and exits, optionally with an error message.
+
+  Args:
+    message: The optional error message.
+  """
+  sys.stderr.write(_USAGE)
+  if message:
+    sys.exit('\nFATAL ERROR: ' + message)
+  else:
+    sys.exit(1)
+
+
+def PrintCategories():
+  """Prints a list of all the error-categories used by error messages.
+
+  These are the categories used to filter messages via --filter.
+  """
+  sys.stderr.write(''.join('  %s\n' % cat for cat in _ERROR_CATEGORIES))
+  sys.exit(0)
+
+
+def ParseArguments(args):
+  """Parses the command line arguments.
+
+  This may set the output format and verbosity level as side-effects.
+
+  Args:
+    args: The command line arguments:
+
+  Returns:
+    The list of filenames to lint.
+  """
+  try:
+    (opts, filenames) = getopt.getopt(args, '', ['help', 'output=', 'verbose=',
+                                                 'counting=',
+                                                 'filter=',
+                                                 'root=',
+                                                 'linelength='])
+  except getopt.GetoptError:
+    PrintUsage('Invalid arguments.')
+
+  verbosity = _VerboseLevel()
+  output_format = _OutputFormat()
+  filters = ''
+  counting_style = ''
+
+  for (opt, val) in opts:
+    if opt == '--help':
+      PrintUsage(None)
+    elif opt == '--output':
+      if val not in ('emacs', 'vs7', 'eclipse'):
+        PrintUsage('The only allowed output formats are emacs, vs7 and eclipse.')
+      output_format = val
+    elif opt == '--verbose':
+      verbosity = int(val)
+    elif opt == '--filter':
+      filters = val
+      if not filters:
+        PrintCategories()
+    elif opt == '--counting':
+      if val not in ('total', 'toplevel', 'detailed'):
+        PrintUsage('Valid counting options are total, toplevel, and detailed')
+      counting_style = val
+    elif opt == '--root':
+      global _root
+      _root = val
+    elif opt == '--linelength':
+      global _line_length
+      try:
+          _line_length = int(val)
+      except ValueError:
+          PrintUsage('Line length must be digits.')
+
+  if not filenames:
+    PrintUsage('No files were specified.')
+
+  _SetOutputFormat(output_format)
+  _SetVerboseLevel(verbosity)
+  _SetFilters(filters)
+  _SetCountingStyle(counting_style)
+
+  return filenames
+
+
+def main():
+  filenames = ParseArguments(sys.argv[1:])
+
+  # Change stderr to write with replacement characters so we don't die
+  # if we try to print something containing non-ASCII characters.
+  sys.stderr = codecs.StreamReaderWriter(sys.stderr,
+                                         codecs.getreader('utf8'),
+                                         codecs.getwriter('utf8'),
+                                         'replace')
+
+  _cpplint_state.ResetErrorCounts()
+  for filename in filenames:
+    ProcessFile(filename, _cpplint_state.verbose_level)
+  _cpplint_state.PrintErrorCounts()
+
+  sys.exit(_cpplint_state.error_count > 0)
+
+
+if __name__ == '__main__':
+  main()
diff --git a/vendor/github.com/muflihun/easyloggingpp/tools/release.sh b/vendor/github.com/muflihun/easyloggingpp/tools/release.sh
new file mode 100755
index 0000000..4d7fe35
--- /dev/null
+++ b/vendor/github.com/muflihun/easyloggingpp/tools/release.sh
@@ -0,0 +1,79 @@
+#!/bin/bash
+
+# Bash script that helps with releasing new versions of EasyLogging++
+# Revision: 1.4
+# @author mkhan3189
+#
+# Usage:
+#        ./release.sh [repo-root] [homepage-repo-root] [curr-version] [new-version] [do-not-ask]
+
+if [ "$1" = "" ];then
+  echo
+  echo "Usage: $0 [repository-root] [homepage-root] [curr-version] [new-version] [do-not-ask]"
+  echo
+  exit 1
+fi
+
+if [ -f "$1/tools/release.sh" ];then
+  [ -d "$2/releases/" ] || mkdir $2/releases/
+else
+  echo "Invalid repository root"
+  exit 1
+fi
+
+CURR_VERSION=$3
+CURR_RELEASE_DATE=$(grep -o '[0-9][0-9]-[0-9][0-9]-201[2-9] [0-9][0-9][0-9][0-9]hrs' $1/src/easylogging++.cc)
+NEW_RELEASE_DATE=$(date +"%d-%m-%Y %H%Mhrs")
+NEW_RELEASE_DATE_SIMPLE=$(date +"%d-%m-%Y")
+NEW_VERSION=$4
+DO_NOT_CONFIRM=$5
+if [ "$NEW_VERSION" = "" ]; then
+  echo 'Current Version  ' $CURR_VERSION
+  echo '** No version provided **'
+  exit
+fi
+
+echo 'Current Version  ' $CURR_VERSION ' (' $CURR_RELEASE_DATE ')'
+echo 'New Version      ' $NEW_VERSION  ' (' $NEW_RELEASE_DATE ')'
+if [ "$DO_NOT_CONFIRM" = "y" ]; then
+  confirm="y"
+else
+  echo "Are you sure you wish to release new version [$CURR_VERSION -> $NEW_VERSION]? (y/n)"
+  read confirm
+fi
+
+if [ "$confirm" = "y" ]; then
+  sed -i '' -e "s/Easylogging++ v$CURR_VERSION*/Easylogging++ v$NEW_VERSION/g" $1/src/easylogging++.h
+  sed -i '' -e "s/Easylogging++ v$CURR_VERSION*/Easylogging++ v$NEW_VERSION/g" $1/src/easylogging++.cc
+  sed -i '' -e "s/Easylogging++ v$CURR_VERSION*/Easylogging++ v$NEW_VERSION/g" $1/README.md
+  sed -i '' -e "s/return std::string(\"$CURR_VERSION\");/return std\:\:string(\"$NEW_VERSION\");/g" $1/src/easylogging++.cc
+  sed -i '' -e "s/return std::string(\"$CURR_RELEASE_DATE\");/return std\:\:string(\"$NEW_RELEASE_DATE\");/g" $1/src/easylogging++.cc
+  sed -i '' -e "s/\[Unreleased\]/\[$NEW_VERSION\] - $NEW_RELEASE_DATE_SIMPLE/g" $1/CHANGELOG.md
+  astyle $1/src/easylogging++.h --style=google --indent=spaces=2 --max-code-length=120
+  astyle $1/src/easylogging++.cc --style=google --indent=spaces=2 --max-code-length=120
+  if [ -f "$1/src/easylogging++.h.orig" ];then
+    rm $1/src/easylogging++.h.orig
+  fi
+  if [ -f "$1/src/easylogging++.cc.orig" ];then
+    rm $1/src/easylogging++.cc.orig
+  fi
+  sed -i '' -e "s/$CURR_VERSION ($CURR_RELEASE_DATE)/$NEW_VERSION ($NEW_RELEASE_DATE)/g" $2/index.html
+  sed -i '' -e "s/$CURR_VERSION/$NEW_VERSION/g" $1/README.md
+  sed -i '' -e "s/easyloggingpp_$CURR_VERSION.zip/easyloggingpp_$NEW_VERSION.zip/g" $1/README.md
+  if [ -f "easyloggingpp_v$NEW_VERSION.zip" ]; then
+    rm easyloggingpp_v$NEW_VERSION.zip
+  fi
+  if [ -f "easyloggingpp.zip" ]; then
+    rm easyloggingpp.zip
+  fi
+  cp $1/src/easylogging++.h .
+  cp $1/src/easylogging++.cc .
+  cp $1/CHANGELOG.md CHANGELOG.txt
+  cp $1/LICENCE LICENCE.txt
+  zip easyloggingpp_v$NEW_VERSION.zip easylogging++.h easylogging++.cc LICENCE.txt CHANGELOG.txt
+  tar -pczf easyloggingpp_v$NEW_VERSION.tar.gz easylogging++.h easylogging++.cc LICENCE.txt CHANGELOG.txt
+  mv easyloggingpp_v$NEW_VERSION.zip $2/
+  mv easyloggingpp_v$NEW_VERSION.tar.gz $2/
+  rm easylogging++.h easylogging++.cc CHANGELOG.txt LICENCE.txt
+  echo "\n---------- PLEASE CHANGE CMakeLists.txt MANUALLY ----------- \n"
+fi