diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index ab4f0a7a2f..54dffb9259 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -31,7 +31,7 @@ jobs:
- name: flake8
run: flake8 flask_appbuilder
- name: mypy
- run: mypy flask_appbuilder
+ run: mypy flask_appbuilder/**/*.py
- name: black
run: black --check tests
- name: flake8
@@ -87,24 +87,23 @@ jobs:
run: |
bash <(curl -s https://codecov.io/bash) -cF python
- test-mysql:
+ test-postgres-sqlalchemy1:
runs-on: ubuntu-22.04
strategy:
matrix:
python-version: ["3.10"]
env:
- SQLALCHEMY_DATABASE_URI: |
- mysql+mysqldb://mysqluser:mysqluserpassword@127.0.0.1:13306/app?charset=utf8mb4&binary_prefix=true
+ SQLALCHEMY_DATABASE_URI:
+ postgresql+psycopg2://pguser:pguserpassword@127.0.0.1:15432/app
services:
- mysql:
- image: mysql:5.7
+ postgres:
+ image: postgres:14-alpine
env:
- MYSQL_USER: mysqluser
- MYSQL_PASSWORD: mysqluserpassword
- MYSQL_ROOT_PASSWORD: root
- MYSQL_DATABASE: app
+ POSTGRES_USER: pguser
+ POSTGRES_PASSWORD: pguserpassword
+ POSTGRES_DB: app
ports:
- - 13306:3306
+ - 15432:5432
steps:
- uses: actions/checkout@v4
- name: Setup Python
@@ -128,7 +127,7 @@ jobs:
sudo apt-get update
sudo apt-get install -y libldap2-dev libsasl2-dev libssl-dev
pip install --upgrade pip
- pip install -r requirements/base.txt
+ pip install -r requirements/base_legacy.txt
pip install -r requirements/tests.txt
pip install -r requirements/extra.txt
- name: Run tests
@@ -138,22 +137,24 @@ jobs:
run: |
bash <(curl -s https://codecov.io/bash) -cF python
- test-mssql:
+ test-mysql:
runs-on: ubuntu-22.04
strategy:
matrix:
python-version: ["3.10"]
env:
SQLALCHEMY_DATABASE_URI: |
- mssql+pyodbc://sa:Password_123@localhost:11433/master?driver=FreeTDS
+ mysql+mysqldb://mysqluser:mysqluserpassword@127.0.0.1:13306/app?charset=utf8mb4&binary_prefix=true
services:
- mssql:
- image: mcr.microsoft.com/mssql/server:2019-CU31-ubuntu-20.04
+ mysql:
+ image: mysql:5.7
env:
- SA_PASSWORD: Password_123
- ACCEPT_EULA: Y
+ MYSQL_USER: mysqluser
+ MYSQL_PASSWORD: mysqluserpassword
+ MYSQL_ROOT_PASSWORD: root
+ MYSQL_DATABASE: app
ports:
- - 11433:1433
+ - 13306:3306
steps:
- uses: actions/checkout@v4
- name: Setup Python
@@ -175,74 +176,64 @@ jobs:
- name: Install dependencies
run: |
sudo apt-get update
- sudo apt-get install -y libldap2-dev libsasl2-dev libssl-dev freetds-bin freetds-dev unixodbc-dev tdsodbc
+ sudo apt-get install -y libldap2-dev libsasl2-dev libssl-dev
pip install --upgrade pip
pip install -r requirements/base.txt
pip install -r requirements/tests.txt
pip install -r requirements/extra.txt
- sudo cp .github/workflows/odbcinst.ini /etc/odbcinst.ini
- name: Run tests
run: |
- nose2 -c setup.cfg -F -v --with-coverage --coverage flask_appbuilder -A '!mongo,!openid'
+ nose2 -c setup.cfg -F -v --with-coverage --coverage flask_appbuilder -A '!mongo,!openid' tests
- name: Upload code coverage
run: |
bash <(curl -s https://codecov.io/bash) -cF python
- test-mongodb:
+ test-mssql:
runs-on: ubuntu-22.04
strategy:
matrix:
python-version: ["3.10"]
+ env:
+ SQLALCHEMY_DATABASE_URI: |
+ mssql+pyodbc://sa:Password_123@localhost:11433/master?driver=FreeTDS
services:
- mongo:
- image: mongo:4.4.1-bionic
+ mssql:
+ image: mcr.microsoft.com/mssql/server:2019-CU31-ubuntu-20.04
+ env:
+ SA_PASSWORD: Password_123
+ ACCEPT_EULA: Y
ports:
- - 27017:27017
+ - 11433:1433
steps:
- uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- - name: Install dependencies
- run: |
- sudo apt-get update
- sudo apt-get install -y libldap2-dev libsasl2-dev libssl-dev
- pip install --upgrade pip
- pip install -r requirements/base.txt
- pip install -r requirements/tests.txt
- pip install -r requirements/extra.txt
- pip install -r requirements/mongodb.txt
- - name: Run tests
- run: |
- nose2 -c setup.cfg -F -v --with-coverage --coverage flask_appbuilder -A 'mongo' tests
- - name: Upload code coverage
+ - name: Run openldap
run: |
- bash <(curl -s https://codecov.io/bash) -cF python
-
- test-openid:
- runs-on: ubuntu-22.04
- strategy:
- matrix:
- python-version: ["3.10"]
- steps:
- - uses: actions/checkout@v4
- - name: Setup Python
- uses: actions/setup-python@v5
- with:
- python-version: ${{ matrix.python-version }}
+ docker run -d \
+ -v '${{ github.workspace }}/docker/openldap/ldifs:/ldifs' \
+ -v '${{ github.workspace }}/docker/openldap/schemas/memberof.ldif:/opt/bitnami/openldap/etc/schema/memberof.ldif' \
+ -e LDAP_URI=ldap://openldap:1389 \
+ -e LDAP_BASE=dc=example,dc=org \
+ -e LDAP_ADMIN_USERNAME=admin \
+ -e LDAP_ADMIN_PASSWORD=admin_password \
+ -e LDAP_EXTRA_SCHEMAS=cosine,inetorgperson,nis,memberof \
+ -p 1389:1389 \
+ bitnami/openldap:2.6.4
- name: Install dependencies
run: |
sudo apt-get update
- sudo apt-get install -y libldap2-dev libsasl2-dev libssl-dev
+ sudo apt-get install -y libldap2-dev libsasl2-dev libssl-dev freetds-bin freetds-dev unixodbc-dev tdsodbc
pip install --upgrade pip
pip install -r requirements/base.txt
pip install -r requirements/tests.txt
pip install -r requirements/extra.txt
- pip install -r requirements/openid.txt
+ sudo cp .github/workflows/odbcinst.ini /etc/odbcinst.ini
- name: Run tests
run: |
- nose2 -c setup.cfg -F -v --with-coverage --coverage flask_appbuilder -A 'openid' tests
+ nose2 -c setup.cfg -F -v --with-coverage --coverage flask_appbuilder -A '!mongo,!openid'
- name: Upload code coverage
run: |
bash <(curl -s https://codecov.io/bash) -cF python
diff --git a/.github/workflows/ptlint.yml b/.github/workflows/prlint.yml
similarity index 100%
rename from .github/workflows/ptlint.yml
rename to .github/workflows/prlint.yml
diff --git a/docs/config.rst b/docs/config.rst
index 019147d583..d3c0730f4e 100755
--- a/docs/config.rst
+++ b/docs/config.rst
@@ -6,339 +6,224 @@ Configuration keys
Use config.py to configure the following parameters. By default it will use SQLLITE DB, and bootstrap's default theme:
- .. cssclass:: table-bordered table-hover
-
-+----------------------------------------+--------------------------------------------+-----------+
-| Key | Description | Mandatory |
-+========================================+============================================+===========+
-| SQLALCHEMY_DATABASE_URI | DB connection string (flask-sqlalchemy) | Cond. |
-+----------------------------------------+--------------------------------------------+-----------+
-| SECRET_KEY | Flask secret key used for securely signing | |
-| | the session cookie Set the secret_key on | |
-| | the application to something unique and | |
-| | secret. | Yes |
-+----------------------------------------+--------------------------------------------+-----------+
-| MONGODB_SETTINGS | DB connection string (flask-mongoengine) | Cond. |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_TYPE = 0 | 1 | 2 | 3 | 4 | This is the authentication type | Yes |
-| or | - 0 = Open ID | |
-| AUTH_TYPE = AUTH_OID, AUTH_DB, | - 1 = Database style (user/password) | |
-| AUTH_LDAP, AUTH_REMOTE | - 2 = LDAP, use AUTH_LDAP_SERVER also | |
-| AUTH_OAUTH | - 3 = uses web server environ var | |
-| | REMOTE_USER | |
-| | - 4 = USE ONE OR MANY OAUTH PROVIDERS | |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_USER_REGISTRATION = | Set to True to enable user self | No |
-| True|False | registration | |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_USERNAME_CI = | Make auth login CI of not defaults to true | No |
-| True|False | | |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_USER_REGISTRATION_ROLE | Set role name, to be assign when a user | Cond. |
-| | registers himself. This role must already | |
-| | exist. Mandatory when using user | |
-| | registration | |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_USER_REGISTRATION_ROLE_JMESPATH | The `JMESPath `_ | No |
-| | expression used to evaluate user role on | |
-| | registration. If set, takes precedence | |
-| | over ``AUTH_USER_REGISTRATION_ROLE``. | |
-| | Requires ``jmespath`` to be installed. | |
-| | See :ref:`jmespath-examples` for examples | |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_REMOTE_USER_ENV_VAR | When using AUTH_TYPE = AUTH_REMOTE_USER | No |
-| | Optionally set the wsgi environment var | |
-| | that holds the current logged in user | |
-| | Default: REMOTE_USER | |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_ROLES_SYNC_AT_LOGIN | Sets if user's roles are replaced each | No |
-| | login with those received from LDAP/OAUTH | |
-| | Default: False | |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_ROLES_MAPPING | A mapping from LDAP/OAUTH group names | No |
-| | to FAB roles | |
-| | | |
-| | See example under AUTH_LDAP_GROUP_FIELD | |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_LDAP_SERVER | define your ldap server when AUTH_TYPE=2 | Cond. |
-| | example: | |
-| | | |
-| | AUTH_TYPE = 2 | |
-| | | |
-| | AUTH_LDAP_SERVER = "ldap://ldapserver.new" | |
-| | | |
-| | For using LDAP over TLS, set the protocol | |
-| | scheme to "ldaps" and set | |
-| | "AUTH_LDAP_USE_TLS = False" | |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_LDAP_USE_TLS | Require the use of STARTTLS | |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_LDAP_BIND_USER | Define the DN for the user that will be | No |
-| | used for the initial LDAP BIND. | |
-| | This is necessary for OpenLDAP and can be | |
-| | used on MSFT AD. | |
-| | | |
-| | AUTH_LDAP_BIND_USER = | |
-| | "cn=queryuser,dc=example,dc=com" | |
-| | | |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_LDAP_BIND_PASSWORD | Define password for the bind user. | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_LDAP_TLS_DEMAND | Demands TLS peer certificate checking | No |
-| | (Bool) | |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_LDAP_TLS_CACERTDIR | CA Certificate directory to check peer | No |
-| | certificate. Certificate files must be | |
-| | PEM-encoded | |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_LDAP_TLS_CACERTFILE | CA Certificate file to check peer | No |
-| | certificate. File must be PEM-encoded | |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_LDAP_TLS_CERTFILE | Certificate file for client auth | No |
-| | use with AUTH_LDAP_TLS_KEYFILE | |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_LDAP_TLS_KEYFILE | Certificate key file for client aut | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_LDAP_SEARCH | Use search with self user | No |
-| | registration or when using | |
-| | AUTH_LDAP_BIND_USER. | |
-| | | |
-| | AUTH_LDAP_SERVER = "ldap://ldapserver.new" | |
-| | | |
-| | AUTH_LDAP_SEARCH = "ou=people,dc=example" | |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_LDAP_SEARCH_FILTER | Filter or limit allowable users from | No |
-| | the LDAP server, e.g., only the people | |
-| | on your team. | |
-| | | |
-| | AUTH_LDAP_SEARCH_FILTER = | |
-| | "(memberOf=cn=group name,OU=type,dc=ex | |
-| | ,cn=com)" | |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_LDAP_UID_FIELD | if doing an indirect bind to ldap, this | No |
-| | is the field that matches the username | |
-| | when searching for the account to bind | |
-| | to. | |
-| | example: | |
-| | | |
-| | AUTH_TYPE = 2 | |
-| | | |
-| | AUTH_LDAP_SERVER = "ldap://ldapserver.new" | |
-| | | |
-| | AUTH_LDAP_SEARCH = "ou=people,dc=example" | |
-| | | |
-| | AUTH_LDAP_UID_FIELD = "uid" | |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_LDAP_GROUP_FIELD | sets the field in the ldap directory that | No |
-| | stores the user's group uids. This field | |
-| | is used in combination with | |
-| | AUTH_ROLES_MAPPING to propagate the users | |
-| | groups into the User database. | |
-| | Default is "memberOf". | |
-| | example: | |
-| | | |
-| | AUTH_TYPE = 2 | |
-| | | |
-| | AUTH_LDAP_SERVER = "ldap://ldapserver.new" | |
-| | | |
-| | AUTH_LDAP_SEARCH = "ou=people,dc=example" | |
-| | | |
-| | AUTH_LDAP_GROUP_FIELD = "memberOf" | |
-| | | |
-| | AUTH_ROLES_MAPPING = { | |
-| | "cn=User,ou=groups,dc=example,dc=com": | |
-| | ["User"] | |
-| | } | |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_LDAP_FIRSTNAME_FIELD | sets the field in the ldap directory that | No |
-| | stores the user's first name. This field | |
-| | is used to propagate user's first name | |
-| | into the User database. | |
-| | Default is "givenName". | |
-| | example: | |
-| | | |
-| | AUTH_TYPE = 2 | |
-| | | |
-| | AUTH_LDAP_SERVER = "ldap://ldapserver.new" | |
-| | | |
-| | AUTH_LDAP_SEARCH = "ou=people,dc=example" | |
-| | | |
-| | AUTH_LDAP_FIRSTNAME_FIELD = "givenName" | |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_LDAP_LASTNAME_FIELD | sets the field in the ldap directory that | No |
-| | stores the user's last name. This field | |
-| | is used to propagate user's last name | |
-| | into the User database. | |
-| | Default is "sn". | |
-| | example: | |
-| | | |
-| | AUTH_TYPE = 2 | |
-| | | |
-| | AUTH_LDAP_SERVER = "ldap://ldapserver.new" | |
-| | | |
-| | AUTH_LDAP_SEARCH = "ou=people,dc=example" | |
-| | | |
-| | AUTH_LDAP_LASTNAME_FIELD = "sn" | |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_LDAP_EMAIL_FIELD | sets the field in the ldap directory that | No |
-| | stores the user's email address. This | |
-| | field is used to propagate user's email | |
-| | address into the User database. | |
-| | Default is "mail". | |
-| | example: | |
-| | | |
-| | AUTH_TYPE = 2 | |
-| | | |
-| | AUTH_LDAP_SERVER = "ldap://ldapserver.new" | |
-| | | |
-| | AUTH_LDAP_SEARCH = "ou=people,dc=example" | |
-| | | |
-| | AUTH_LDAP_EMAIL_FIELD = "mail" | |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_LDAP_ALLOW_SELF_SIGNED | Allow LDAP authentication to use self | No |
-| | signed certificates (LDAPS) | |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_LDAP_APPEND_DOMAIN | Append a domain to all logins. No need to | No |
-| | use john@domain.local. Set it like: | |
-| | | |
-| | AUTH_LDAP_APPEND_DOMAIN = 'domain.local' | |
-| | | |
-| | And the user can login using just 'john' | |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_LDAP_USERNAME_FORMAT | It converts username to specific format for| No |
-| | LDAP authentications. For example, | |
-| | | |
-| | username = "userexample" | |
-| | | |
-| | AUTH_LDAP_USERNAME_FORMAT="format-%s". | |
-| | | |
-| | It authenticates with "format-userexample".| |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_ROLE_ADMIN | Configure the name of the admin role. | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_ROLE_PUBLIC | Special Role that holds the public | No |
-| | permissions, no authentication needed. | |
-+----------------------------------------+--------------------------------------------+-----------+
-| AUTH_API_LOGIN_ALLOW_MULTIPLE_PROVIDERS| Allow REST API login with alternative auth | No |
-| True|False | providers (default False) | |
-+----------------------------------------+--------------------------------------------+-----------+
-| APP_NAME | The name of your application. | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| APP_THEME | Various themes for you to choose | No |
-| | from (bootwatch). | |
-+----------------------------------------+--------------------------------------------+-----------+
-| APP_ICON | path of your application icons | No |
-| | will be shown on the left side of the menu | |
-+----------------------------------------+--------------------------------------------+-----------+
-| ADDON_MANAGERS | A list of addon manager's classes | No |
-| | Take a look at addon chapter on docs. | |
-+----------------------------------------+--------------------------------------------+-----------+
-| UPLOAD_FOLDER | Files upload folder. | No |
-| | Mandatory for file uploads. | |
-+----------------------------------------+--------------------------------------------+-----------+
-| FILE_ALLOWED_EXTENSIONS | Tuple with allower extensions. | No |
-| | FILE_ALLOWED_EXTENSIONS = ('txt','doc') | |
-+----------------------------------------+--------------------------------------------+-----------+
-| IMG_UPLOAD_FOLDER | Image upload folder. | No |
-| | Mandatory for image uploads. | |
-+----------------------------------------+--------------------------------------------+-----------+
-| IMG_UPLOAD_URL | Image relative URL. | No |
-| | Mandatory for image uploads. | |
-+----------------------------------------+--------------------------------------------+-----------+
-| IMG_SIZE | tuple to define default image resize. | No |
-| | (width, height, True|False). | |
-+----------------------------------------+--------------------------------------------+-----------+
-| BABEL_DEFAULT_LOCALE | Babel's default language. | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| LANGUAGES | A dictionary mapping | No |
-| | the existing languages with the countries | |
-| | name and flag | |
-+----------------------------------------+--------------------------------------------+-----------+
-| LOGOUT_REDIRECT_URL | The location to redirect to after logout | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| FAB_API_SHOW_STACKTRACE | Sends api stack trace on uncaught | No |
-| | exceptions. (Boolean) | |
-+----------------------------------------+--------------------------------------------+-----------+
-| FAB_API_MAX_PAGE_SIZE | Sets a limit for FAB Model Api page size | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| FAB_API_SWAGGER_UI | Enables a Swagger UI view (Boolean) | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| FAB_API_SWAGGER_TEMPLATE | Path of your custom Swagger Template | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| FAB_API_ALLOW_JSON_QS | Allow query string parameters to be JSON | |
-| | Default is True (Boolean) | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| FAB_UPDATE_PERMS | Enables or disables update permissions | |
-| | Default is True (Boolean) | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| FAB_SECURITY_MANAGER_CLASS | Declare a new custom SecurityManager | |
-| | class | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| FAB_ADD_SECURITY_API | [Beta] Adds a CRUD REST API for users, | |
-| | roles, permissions, view_menus. | No |
-| | Further details on /swagger/v1 | |
-| | All endpoints are under /api/v1/sercurity/ | |
-| | [Note]: This feature is still in beta | |
-| | breaking changes are likely to occur | |
-+----------------------------------------+--------------------------------------------+-----------+
-| FAB_ADD_SECURITY_VIEWS | Enables or disables registering all | |
-| | security views (boolean default:True) | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| FAB_ADD_SECURITY_PERMISSION_VIEW | Enables or disables registering the | |
-| | permission view (boolean default:True) | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| FAB_ADD_SECURITY_VIEW_MENU_VIEW | Enables or disables registering the | |
-| | view_menu view (boolean default:True) | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| FAB_ADD_SECURITY_PERMISSION_VIEWS_VIEW | Enables or disables registering the | |
-| | pmv views (boolean default:True) | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| FAB_ADD_OPENAPI_VIEWS | Enables or disables registering all | |
-| | OPENAPI views (boolean default:True) | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| FAB_OPENAPI_SERVERS | Used for setting OpenApi Swagger UI | |
-| | servers if not set Swagger will use the | |
-| | current request host URL | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| FAB_ROLES | Configure builtin roles see Security | |
-| | chapter for further detail | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| FAB_INDEX_VIEW | Path of your custom IndexView class | |
-| | (str) | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| FAB_MENU | Path of your custom Menu class | |
-| | (str) | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| FAB_BASE_TEMPLATE | Path of your custom base template | |
-| | | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| FAB_STATIC_FOLDER | Path to override default static folder | |
-| | | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| FAB_STATIC_URL_PATH | Path to override default static folder | |
-| | | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| FAB_PASSWORD_COMPLEXITY_VALIDATOR | Hook for your own custom password | |
-| | validator function. | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| FAB_PASSWORD_COMPLEXITY_ENABLED | Enables the password complexity | |
-| | validation for AUTH database users. | No |
-| | Default is False. | |
-+----------------------------------------+--------------------------------------------+-----------+
-| FAB_PASSWORD_HASH_METHOD | Sets the password hashing method. For the | |
-| | supported parameters see | |
-| | `generate_password_hash`_. | No |
-| | Default: ``'scrypt'``. | |
-+----------------------------------------+--------------------------------------------+-----------+
-| FAB_SAFE_REDIRECT_HOSTS | A List[str] with allowed domains to check | |
-| | when validating safe redirect | No |
-+----------------------------------------+--------------------------------------------+-----------+
-| FAB_PASSWORD_HASH_SALT_LENGTH | Sets the password hashing salt length. | No |
-| | Default: ``16``. | |
-+----------------------------------------+--------------------------------------------+-----------+
-
-
-.. _generate_password_hash: https://werkzeug.palletsprojects.com/en/stable/utils/#werkzeug.security.generate_password_hash
+- SQLALCHEMY_DATABASE_URI
+ - Description: DB connection string (flask-sqlalchemy)
+ - Mandatory: Conditional
+- SECRET_KEY
+ - Description: Flask secret key used for securely signing the session cookie. Set the secret_key on the application to something unique and secret.
+ - Mandatory: Yes
+- MONGODB_SETTINGS
+ - Description: DB connection string (flask-mongoengine)
+ - Mandatory: Conditional
+- AUTH_TYPE
+ - Description: This is the authentication type
+ - 0 = Open ID
+ - 1 = Database style (user/password)
+ - 2 = LDAP, use AUTH_LDAP_SERVER also
+ - 3 = uses web server environment variable REMOTE_USER
+ - 4 = USE ONE OR MANY OAUTH PROVIDERS
+ - Mandatory: Yes
+- AUTH_USER_REGISTRATION
+ - Description: Set to True to enable user self-registration
+ - Mandatory: No
+- AUTH_USERNAME_CI
+ - Description: Make auth login CI of not defaults to true
+ - Mandatory: No
+- AUTH_USER_REGISTRATION_ROLE
+ - Description: Set role name, to be assigned when a user registers himself. This role must already exist. Mandatory when using user registration
+ - Mandatory: Conditional
+- AUTH_USER_REGISTRATION_ROLE_JMESPATH
+ - Description: The `JMESPath `_ expression used to evaluate user role on registration. If set, takes precedence over ``AUTH_USER_REGISTRATION_ROLE``. Requires ``jmespath`` to be installed. See :ref:`jmespath-examples` for examples
+ - Mandatory: No
+- AUTH_REMOTE_USER_ENV_VAR
+ - Description: When using AUTH_TYPE = AUTH_REMOTE_USER, optionally set the wsgi environment variable that holds the current logged in user. Default: REMOTE_USER
+ - Mandatory: No
+- AUTH_ROLES_SYNC_AT_LOGIN
+ - Description: Sets if user's roles are replaced each login with those received from LDAP/OAUTH. Default: False
+ - Mandatory: No
+- AUTH_ROLES_MAPPING
+ - Description: A mapping from LDAP/OAUTH group names to FAB roles. See example under AUTH_LDAP_GROUP_FIELD
+ - Mandatory: No
+- AUTH_LDAP_SERVER
+ - Description: Define your ldap server when AUTH_TYPE=2. For example, AUTH_TYPE = 2, AUTH_LDAP_SERVER = "ldap://ldapserver.new". For using LDAP over TLS, set the protocol scheme to "ldaps" and set "AUTH_LDAP_USE_TLS = False"
+ - Mandatory: Conditional
+- AUTH_LDAP_USE_TLS
+ - Description: Require the use of STARTTLS
+ - Mandatory: No
+- AUTH_LDAP_BIND_USER
+ - Description: Define the DN for the user that will be used for the initial LDAP BIND. This is necessary for OpenLDAP and can be used on MSFT AD. For example, AUTH_LDAP_BIND_USER = "cn=queryuser,dc=example,dc=com"
+ - Mandatory: No
+- AUTH_LDAP_BIND_PASSWORD
+ - Description: Define password for the bind user.
+ - Mandatory: No
+- AUTH_LDAP_TLS_DEMAND
+ - Description: Demands TLS peer certificate checking (Bool)
+ - Mandatory: No
+- AUTH_LDAP_TLS_CACERTDIR
+ - Description: CA Certificate directory to check peer certificate. Certificate files must be PEM-encoded
+ - Mandatory: No
+- AUTH_LDAP_TLS_CACERTFILE
+ - Description: CA Certificate file to check peer certificate. File must be PEM-encoded
+ - Mandatory: No
+- AUTH_LDAP_TLS_CERTFILE
+ - Description: Certificate file for client auth use with AUTH_LDAP_TLS_KEYFILE
+ - Mandatory: No
+- AUTH_LDAP_TLS_KEYFILE
+ - Description: Certificate key file for client auth
+ - Mandatory: No
+- AUTH_LDAP_SEARCH
+ - Description: Use search with self user registration or when using AUTH_LDAP_BIND_USER. For example, AUTH_LDAP_SERVER = "ldap://ldapserver.new", AUTH_LDAP_SEARCH = "ou=people,dc=example"
+ - Mandatory: No
+- AUTH_LDAP_SEARCH_FILTER
+ - Description: Filter or limit allowable users from the LDAP server, e.g., only the people on your team. For example, AUTH_LDAP_SEARCH_FILTER = "(memberOf=cn=group name,OU=type,dc=ex,cn=com)"
+ - Mandatory: No
+- AUTH_LDAP_UID_FIELD
+ - Description: If doing an indirect bind to ldap, this is the field that matches the username when searching for the account to bind to. For example, AUTH_TYPE = 2, AUTH_LDAP_SERVER = "ldap://ldapserver.new", AUTH_LDAP_SEARCH = "ou=people,dc=example", AUTH_LDAP_UID_FIELD = "uid"
+ - Mandatory: No
+- AUTH_LDAP_GROUP_FIELD
+ - Description: Sets the field in the ldap directory that stores the user's group uids. This field is used in combination with AUTH_ROLES_MAPPING to propagate the users groups into the User database. Default is "memberOf". For example, AUTH_TYPE = 2, AUTH_LDAP_SERVER = "ldap://ldapserver.new", AUTH_LDAP_SEARCH = "ou=people,dc=example", AUTH_LDAP_GROUP_FIELD = "memberOf", AUTH_ROLES_MAPPING = { "cn=User,ou=groups,dc=example,dc=com": ["User"] }
+ - Mandatory: No
+- AUTH_LDAP_FIRSTNAME_FIELD
+ - Description: Sets the field in the ldap directory that stores the user's first name. This field is used to propagate user's first name into the User database. Default is "givenName". For example, AUTH_TYPE = 2, AUTH_LDAP_SERVER = "ldap://ldapserver.new", AUTH_LDAP_SEARCH = "ou=people,dc=example", AUTH_LDAP_FIRSTNAME_FIELD = "givenName"
+ - Mandatory: No
+- AUTH_LDAP_LASTNAME_FIELD
+ - Description: Sets the field in the ldap directory that stores the user's last name. This field is used to propagate user's last name into the User database. Default is "sn". For example, AUTH_TYPE = 2, AUTH_LDAP_SERVER = "ldap://ldapserver.new", AUTH_LDAP_SEARCH = "ou=people,dc=example", AUTH_LDAP_LASTNAME_FIELD = "sn"
+ - Mandatory: No
+- AUTH_LDAP_EMAIL_FIELD
+ - Description: Sets the field in the ldap directory that stores the user's email address. This field is used to propagate user's email address into the User database. Default is "mail". For example, AUTH_TYPE = 2, AUTH_LDAP_SERVER = "ldap://ldapserver.new", AUTH_LDAP_SEARCH = "ou=people,dc=example", AUTH_LDAP_EMAIL_FIELD = "mail"
+ - Mandatory: No
+- AUTH_LDAP_ALLOW_SELF_SIGNED
+ - Description: Allow LDAP authentication to use self-signed certificates (LDAPS)
+ - Mandatory: No
+- AUTH_LDAP_APPEND_DOMAIN
+ - Description: Append a domain to all logins. No need to use john@domain.local. Set it like: AUTH_LDAP_APPEND_DOMAIN = 'domain.local'. And the user can login using just 'john'
+ - Mandatory: No
+- AUTH_LDAP_USERNAME_FORMAT
+ - Description: It converts username to specific format for LDAP authentications. For example, username = "userexample", AUTH_LDAP_USERNAME_FORMAT="format-%s". It authenticates with "format-userexample".
+ - Mandatory: No
+- AUTH_ROLE_ADMIN
+ - Description: Configure the name of the admin role.
+ - Mandatory: No
+- AUTH_ROLE_PUBLIC
+ - Description: Special Role that holds the public permissions, no authentication needed.
+ - Mandatory: No
+- AUTH_API_LOGIN_ALLOW_MULTIPLE_PROVIDERS
+ - Description: Allow REST API login with alternative auth providers (default False)
+ - Mandatory: No
+- APP_NAME
+ - Description: The name of your application.
+ - Mandatory: No
+- APP_THEME
+ - Description: Various themes for you to choose from (bootwatch).
+ - Mandatory: No
+- APP_ICON
+ - Description: Path of your application icons will be shown on the left side of the menu
+ - Mandatory: No
+- ADDON_MANAGERS
+ - Description: A list of addon manager's classes. Take a look at addon chapter on docs.
+ - Mandatory: No
+- UPLOAD_FOLDER
+ - Description: Files upload folder. Mandatory for file uploads.
+ - Mandatory: No
+- FILE_ALLOWED_EXTENSIONS
+ - Description: Tuple with allowed extensions. FILE_ALLOWED_EXTENSIONS = ('txt','doc')
+ - Mandatory: No
+- IMG_UPLOAD_FOLDER
+ - Description: Image upload folder. Mandatory for image uploads.
+ - Mandatory: No
+- IMG_UPLOAD_URL
+ - Description: Image relative URL. Mandatory for image uploads.
+ - Mandatory: No
+- IMG_SIZE
+ - Description: Tuple to define default image resize. (width, height, True|False)
+ - Mandatory: No
+- BABEL_DEFAULT_LOCALE
+ - Description: Babel's default language.
+ - Mandatory: No
+- LANGUAGES
+ - Description: A dictionary mapping the existing languages with the countries name and flag
+ - Mandatory: No
+- LOGOUT_REDIRECT_URL
+ - Description: The location to redirect to after logout
+ - Mandatory: No
+- FAB_API_SHOW_STACKTRACE
+ - Description: Sends api stack trace on uncaught exceptions. (Boolean)
+ - Mandatory: No
+- FAB_API_MAX_PAGE_SIZE
+ - Description: Sets a limit for FAB Model Api page size
+ - Mandatory: No
+- FAB_API_SWAGGER_UI
+ - Description: Enables a Swagger UI view (Boolean)
+ - Mandatory: No
+- FAB_API_SWAGGER_TEMPLATE
+ - Description: Path of your custom Swagger Template
+ - Mandatory: No
+- FAB_API_ALLOW_JSON_QS
+ - Description: Allow query string parameters to be JSON. Default is True (Boolean)
+ - Mandatory: No
+- FAB_CREATE_DB
+ - Description: Create the database if it does not exist. Default is True (Boolean)
+ - Mandatory: No
+- FAB_UPDATE_PERMS
+ - Description: Enables or disables update permissions. Default is True (Boolean)
+ - Mandatory: No
+- FAB_SECURITY_MANAGER_CLASS
+ - Description: Declare a new custom SecurityManager class
+ - Mandatory: No
+- FAB_ADD_SECURITY_API
+ - Description: [Beta] Adds a CRUD REST API for users, roles, permissions, view_menus. Further details on /swagger/v1. All endpoints are under /api/v1/sercurity/. [Note]: This feature is still in beta, breaking changes are likely to occur
+ - Mandatory: No
+- FAB_ADD_SECURITY_VIEWS
+ - Description: Enables or disables registering all security views (boolean default:True)
+ - Mandatory: No
+- FAB_ADD_SECURITY_PERMISSION_VIEW
+ - Description: Enables or disables registering the permission view (boolean default:True)
+ - Mandatory: No
+- FAB_ADD_SECURITY_VIEW_MENU_VIEW
+ - Description: Enables or disables registering the view_menu view (boolean default:True)
+ - Mandatory: No
+- FAB_ADD_SECURITY_PERMISSION_VIEWS_VIEW
+ - Description: Enables or disables registering the pmv views (boolean default:True)
+ - Mandatory: No
+- FAB_ADD_OPENAPI_VIEWS
+ - Description: Enables or disables registering all OPENAPI views (boolean default:True)
+ - Mandatory: No
+- FAB_OPENAPI_SERVERS
+ - Description: Used for setting OpenApi Swagger UI servers if not set Swagger will use the current request host URL
+ - Mandatory: No
+- FAB_ROLES
+ - Description: Configure builtin roles see Security chapter for further detail
+ - Mandatory: No
+- FAB_INDEX_VIEW
+ - Description: Path of your custom IndexView class (str)
+ - Mandatory: No
+- FAB_MENU
+ - Description: Path of your custom Menu class (str)
+ - Mandatory: No
+- FAB_BASE_TEMPLATE
+ - Description: Path of your custom base template
+ - Mandatory: No
+- FAB_STATIC_FOLDER
+ - Description: Path to override default static folder
+ - Mandatory: No
+- FAB_STATIC_URL_PATH
+ - Description: Path to override default static folder
+ - Mandatory: No
+- FAB_PASSWORD_COMPLEXITY_VALIDATOR
+ - Description: Hook for your own custom password validator function
+ - Mandatory: No
+- FAB_PASSWORD_COMPLEXITY_ENABLED
+ - Description: Enables the password complexity validation for AUTH database users. Default is False
+ - Mandatory: No
+- FAB_PASSWORD_HASH_METHOD
+ - Description: Hash method to use for password hashing. Default is scrypt
+ - Mandatory: No
+- FAB_PASSWORD_HASH_SALT_LENGTH
+ - Description: Salt length to use for password hashing. Default is 16
+ - Mandatory: No
+- FAB_SAFE_REDIRECT_HOSTS
+ - Description: List of allowed hosts for safe redirects. Default is empty list
+ - Mandatory: No
Note
----
diff --git a/examples/base_api/README.rst b/examples/base_api/README.rst
index 194a5aecc9..984790561c 100644
--- a/examples/base_api/README.rst
+++ b/examples/base_api/README.rst
@@ -5,7 +5,6 @@ Simple example showing how to use *BaseApi* class
Run it::
- $ export FLASK_APP=app/__init__.py
$ flask run
For Swagger view go to: http://localhost:5000/swagger/v1
diff --git a/examples/base_api/app/__init__.py b/examples/base_api/app/__init__.py
index b40b0bc16d..7f86dfeeee 100644
--- a/examples/base_api/app/__init__.py
+++ b/examples/base_api/app/__init__.py
@@ -1,19 +1,17 @@
-import logging
-
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
-
-"""
- Logging configuration
-"""
-logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
-logging.getLogger().setLevel(logging.DEBUG)
+from .api import ExampleApi
+from .extensions import appbuilder, db
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session)
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+ appbuilder.add_api(ExampleApi)
+ return app
-from . import api # noqa
+# For backward compatibility
+app = create_app()
diff --git a/examples/base_api/app/api.py b/examples/base_api/app/api.py
index 077cb0b7e0..aa99ca1af4 100644
--- a/examples/base_api/app/api.py
+++ b/examples/base_api/app/api.py
@@ -2,13 +2,15 @@
from flask_appbuilder.api import BaseApi, expose, rison, safe
from flask_appbuilder.security.decorators import protect
-from . import appbuilder
-greeting_schema = {"type": "object", "properties": {"name": {"type": "string"}}}
+greeting_schema = {
+ "type": "object",
+ "properties": {"name": {"type": "string"}},
+ "required": ["name"],
+}
class ExampleApi(BaseApi):
-
resource_name = "example"
apispec_parameter_schemas = {"greeting_schema": greeting_schema}
@@ -77,7 +79,12 @@ def greeting4(self, **kwargs):
---
get:
parameters:
- - $ref: '#/components/parameters/greeting_schema'
+ - in: query
+ name: q
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/greeting_schema'
responses:
200:
description: Greet the user
@@ -137,6 +144,3 @@ def error(self):
$ref: '#/components/responses/500'
"""
raise Exception
-
-
-appbuilder.add_api(ExampleApi)
diff --git a/examples/base_api/app/extensions.py b/examples/base_api/app/extensions.py
new file mode 100644
index 0000000000..419cabef39
--- /dev/null
+++ b/examples/base_api/app/extensions.py
@@ -0,0 +1,5 @@
+from flask_appbuilder import AppBuilder
+from flask_appbuilder.utils.legacy import get_sqla_class
+
+db = get_sqla_class()()
+appbuilder = AppBuilder()
diff --git a/examples/base_api/config.py b/examples/base_api/config.py
index d9fd660b0c..ddc755c962 100644
--- a/examples/base_api/config.py
+++ b/examples/base_api/config.py
@@ -5,55 +5,12 @@
CSRF_ENABLED = True
SECRET_KEY = "\2\1thisismyscretkey\1\2\e\y\y\h"
-OPENID_PROVIDERS = [
- {"name": "Google", "url": "https://www.google.com/accounts/o8/id"},
- {"name": "Yahoo", "url": "https://me.yahoo.com"},
- {"name": "AOL", "url": "http://openid.aol.com/"},
- {"name": "Flickr", "url": "http://www.flickr.com/"},
- {"name": "MyOpenID", "url": "https://www.myopenid.com"},
-]
-
SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(basedir, "app.db")
# SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'
# SQLALCHEMY_DATABASE_URI = 'postgresql://root:password@localhost/myapp'
BABEL_DEFAULT_LOCALE = "en"
-
# ------------------------------
# GLOBALS FOR APP Builder
# ------------------------------
FAB_API_SWAGGER_UI = True
-
-BABEL_DEFAULT_LOCALE = "en"
-BABEL_DEFAULT_FOLDER = "translations"
-LANGUAGES = {
- "en": {"flag": "gb", "name": "English"},
- "pt": {"flag": "pt", "name": "Portuguese"},
- "es": {"flag": "es", "name": "Spanish"},
- "de": {"flag": "de", "name": "German"},
- "zh": {"flag": "cn", "name": "Chinese"},
- "ru": {"flag": "ru", "name": "Russian"},
-}
-
-
-UPLOAD_FOLDER = basedir + "/app/static/uploads/"
-IMG_UPLOAD_FOLDER = basedir + "/app/static/uploads/"
-IMG_UPLOAD_URL = "/static/uploads/"
-AUTH_TYPE = 1
-AUTH_ROLE_ADMIN = "Admin"
-AUTH_ROLE_PUBLIC = "Public"
-# APP_NAME = "My App Name"
-# APP_ICON = "static/img/logo.jpg"
-APP_THEME = "" # default
-# APP_THEME = "cerulean.css"
-# APP_THEME = "amelia.css"
-# APP_THEME = "cosmo.css"
-# APP_THEME = "cyborg.css"
-# APP_THEME = "flatly.css"
-# APP_THEME = "journal.css"
-# APP_THEME = "readable.css"
-# APP_THEME = "simplex.css"
-# APP_THEME = "slate.css"
-# APP_THEME = "spacelab.css"
-# APP_THEME = "united.css"
-# APP_THEME = "yeti.css"
diff --git a/examples/basefilter/NAMES.DIC b/examples/base_filters/NAMES.DIC
similarity index 87%
rename from examples/basefilter/NAMES.DIC
rename to examples/base_filters/NAMES.DIC
index b7266ad644..97017cf3f1 100644
--- a/examples/basefilter/NAMES.DIC
+++ b/examples/base_filters/NAMES.DIC
@@ -1,27607 +1,27607 @@
-aaccf
-aalders
-aaren
-aarika
-aaron
-aartjan
-aasen
-ab
-abacus
-abadines
-abagael
-abagail
-abahri
-abasolo
-abazari
-abba
-abbai
-abbas
-abbatant
-abbate
-abbe
-abbey
-abbi
-abbie
-abbot
-abbott
-abby
-abbye
-abdalla
-abdallah
-abdel
-abdel-az
-abdel-ma
-abdel-ra
-abdel-sa
-abdelazi
-abdelmad
-abdelrah
-abdelran
-abdelsal
-abderrao
-abderraz
-abdi
-abdo
-abdollah
-abdolrah
-abdou
-abdrani
-abdul
-abdul-az
-abdul-ma
-abdul-no
-abdul-ra
-abdul-sa
-abdulazi
-abdulla
-abdullah
-abdulmad
-abdulrah
-abdulran
-abdulsal
-abdur
-abe
-abedi
-abel
-abelard
-abell
-abella
-abellera
-abello
-abelow
-abernath
-aberneth
-abeu
-abey
-abhay
-abhijit
-abi-aad
-abid
-abie
-abigael
-abigail
-abigale
-abike
-abner
-abou-arr
-abou-ezz
-aboul-ma
-aboussou
-abovyan
-abra
-abraham
-abrahan
-abrahim
-abram
-abramo
-abrams
-abran
-abrar
-absi
-abu
-abul
-access
-accounti
-acelvari
-achal
-achamma
-acharyya
-achcar
-achille
-achkar
-achmad
-ackaouy
-acker
-acklin
-ackwood
-acree
-acres
-acs
-action
-actionte
-acton
-aczel
-ad
-ada
-adah
-adahm
-adair
-adal
-adaline
-adam
-adamczyk
-adamkows
-adamo
-adamowic
-adams
-adamski
-adamson
-adamyk
-adan
-adara
-adcock
-adcox
-adda
-addetia
-addi
-addia
-addie
-addison
-addona
-addons
-addy
-ade
-adebayo
-adel
-adela
-adelaida
-adelaide
-adelbert
-adele
-adelheid
-adelia
-adelice
-adelina
-adelind
-adeline
-adella
-adelle
-adena
-adeney
-adeniyi
-aderhold
-adey
-adham
-adhem
-adi
-adiana
-adib
-adie
-adil
-adimari
-adina
-aditya
-adjangba
-adkinson
-adlai
-adler
-adlin
-admad
-admin
-admin-mt
-administ
-adnan
-adnane
-ado
-adolf
-adolfie
-adolph
-adolphe
-adolpho
-adolphus
-adora
-adore
-adoree
-adornato
-adorne
-adorno
-adrea
-adri
-adria
-adriaan
-adriaans
-adriaens
-adrian
-adriana
-adriane
-adrianna
-adrianne
-adriano
-adrie
-adrien
-adriena
-adriene
-adrienne
-adrion
-advance
-ae
-aeinstei
-aeriel
-aeriela
-aeriell
-aery
-afaq
-afif
-afke
-afkham
-afkham-e
-afo
-afton
-afzal
-ag
-agace
-agam
-agarwal
-agata
-agatha
-agathe
-agen
-agenia
-aggarwal
-aggi
-aggie
-aggregat
-aggy
-aghi
-aghili
-agily
-agna
-agnar
-agnella
-agnes
-agnese
-agnesse
-agneta
-agnew
-agnihotr
-agnola
-agostino
-agosto
-agretha
-aguiar
-aguie
-aguilar
-aguinsky
-aguirre
-aguistin
-aguste
-agustin
-ahad
-aharon
-ahbeng
-ahdieh
-ahlberg
-ahlers
-ahluwali
-ahmad
-ahmadi
-ahmed
-ahmet
-ahn
-ai-mei
-ai-tsung
-aida
-aidan
-aidarous
-aideen
-aiden
-aigneis
-aihua
-aija
-aiken
-aila
-ailbert
-aile
-ailee
-aileen
-ailene
-ailey
-aili
-ailina
-ailis
-ailsun
-ailyn
-aiman
-aime
-aimee
-aimei
-aimil
-aimone
-aindrea
-ainslee
-ainsley
-ainslie
-ainswort
-air
-aisha
-aitken
-aitsung
-ajay
-ajersch
-ajeya
-ajit
-ajmal
-ajoy
-akai
-akbar
-akbas
-akemi
-akens
-akers
-akhavan
-akhil
-akhtar
-akihiko
-akim
-akin
-akinniyi
-akio
-akira
-akita
-akkerman
-akram
-akrawi
-aksel
-akshay
-akyurekl
-al
-al bud
-al-basi
-al-tarab
-aladanga
-aladin
-alain
-alaine
-alair
-alameda
-alan
-alana
-alanah
-aland
-alane
-alanis
-alanna
-alano
-alanoly
-alanson
-alanturi
-alard
-alaric
-alary
-alasdair
-alastair
-alasteir
-alaster
-alavi
-alayne
-alb
-alba
-albea
-albeon
-alber
-alberik
-albers
-alberse
-albert
-alberta
-albertei
-albertin
-alberto
-alberts
-alberty
-albery
-albie
-albina
-albiston
-albrecht
-albright
-albritto
-albtenta
-alburger
-alcantar
-alcindor
-alcock
-alcott
-alden
-alderdic
-aldhizer
-aldin
-aldis
-aldo
-aldon
-aldous
-aldric
-aldrich
-aldridge
-aldus
-aldwin
-aldyn
-alec
-alecia
-aleda
-aleece
-aleen
-alegre
-aleinste
-alejandr
-alejoa
-aleke
-aleksand
-aleksic
-alena
-alene
-aleong
-alese
-alessand
-aleta
-alethea
-alev
-alex
-alexa
-alexan
-alexande
-alexandr
-alexei
-alexi
-alexia
-alexina
-alexine
-alexio
-alexis
-alexon
-alexson
-alf
-alfaro
-alfi
-alfie
-alfons
-alfonse
-alfonso
-alfonzo
-alford
-alfred
-alfreda
-alfredo
-alfy
-algernon
-algie
-algimant
-algood
-alguire
-ali
-alia
-alic
-alica
-alice
-alicea
-alicia
-alick
-alida
-alidia
-alidina
-alie
-alika
-alikee
-alikhan
-alina
-aline
-alink
-alioto
-alireza
-alis
-alisa
-alisande
-alisha
-alison
-alissa
-alistair
-alister
-alisun
-alix
-aliza
-alka
-alkarim
-alkire
-all the
-alla
-allahdin
-allahyar
-allam
-allaman
-allan
-allard
-allaway
-allaye-c
-allayne
-alleen
-allegra
-allen
-allene
-alles
-alleva
-alley
-alleyn
-alleyne
-allgood
-alli
-allianor
-allida
-allie
-allin
-allina
-allis
-allisan
-allison
-allissa
-allister
-allistir
-allix
-allman
-allsun
-allwork
-allx
-ally
-allyce
-allyn
-allys
-allyson
-alma
-almeda
-almeddah
-almena
-almendar
-almeria
-almerind
-almeta
-almira
-almire
-almon
-alms
-alnoor
-aloi
-aloin
-aloise
-aloisia
-alok
-alomari
-alon
-alonso
-alonzo
-alora
-aloysia
-aloysius
-alp
-alparsla
-alperovi
-alphard
-alphen
-alphonse
-alphonso
-alpine
-alred
-alric
-alsaleh
-alshabou
-alsop
-alspaugh
-alstine
-alston
-alswiti
-alta
-altadonn
-altay
-alteen
-altekar
-alten
-alternat
-althea
-altherr
-alting-m
-altman
-altmann
-alturing
-aluin
-aluino
-alva
-alvan
-alvarez
-alvaro
-alvean
-alvera
-alverta
-alvi
-alvie
-alvin
-alvina
-alvinia
-alvino
-alvira
-alvis
-alvy
-alwin
-alwyn
-aly
-alyce
-alyda
-alynn
-alyosha
-alyre
-alys
-alysa
-alyse
-alysia
-alyson
-alyss
-alyssa
-alzofon
-amabel
-amabelle
-amadeus
-amalea
-amalee
-amaleta
-amalia
-amalie
-amalita
-amalle
-amalu
-amand
-amanda
-amandi
-amandie
-amandip
-amando
-amandy
-amant
-amar
-amara
-amarendr
-amargo
-amarjit
-amarsi
-amarth
-amata
-amato
-amavisca
-ambach
-amber
-amberly
-amble
-ambler
-ambroise
-ambros
-ambrose
-ambrosi
-ambrosio
-ambrosiu
-ambur
-amby
-amda
-ame
-amedeo
-ameen
-amelia
-amelie
-amelina
-ameline
-amelita
-amelkar
-amenta
-america
-amerigo
-amery
-amgad
-ami
-amick
-amie
-amigo
-amii
-amil
-amin
-amina
-amini
-aminuddi
-aminzade
-amiot
-amir
-amit
-amitabh
-amitava
-amitie
-amity
-amiy
-amjad
-amlani
-ammamari
-ammar
-ammiel
-amnish
-amnon
-amol
-amorim
-amory
-amos
-amott
-amour
-amouzgar
-amparo
-amr
-amrik
-amril
-amrish
-amstutz
-amu
-amundsen
-amy
-amye
-an
-an-bin
-an-son
-ana
-anabal
-anabel
-anabella
-anabelle
-anader
-analiese
-analise
-anallese
-anallise
-anamary
-anand
-ananda
-anandaro
-ananmala
-anant
-ananth
-anantha
-ananyo
-anar
-anastasi
-anastass
-anatol
-anatola
-anatole
-anatoli
-anatollo
-anatoly
-anaya
-anbin
-ancel
-ancell
-anchia
-anconeta
-anctil
-anda
-andaree
-andee
-andeee
-ander
-anderea
-anderer
-anders
-andersen
-anderson
-anderton
-andi
-andie
-andiyono
-andonis
-andra
-andrade
-andras
-andrassy
-andre
-andrea
-andreana
-andreas
-andrease
-andreato
-andree
-andrei
-andrej
-andrejs
-andres
-andress
-andrew
-andrews
-andrey
-andria
-andriana
-andric
-andries
-andriett
-andris
-andromac
-andros
-andrukat
-andrus
-andrusia
-andruzzi
-andrzej
-andy
-aneeta
-aneko
-anestass
-anet
-anett
-anetta
-anette
-ange
-angel
-angela
-angelako
-angele
-angeles
-angeli
-angelia
-angelica
-angelico
-angelie
-angeliek
-angelika
-angelina
-angeline
-angeliqu
-angelita
-angell
-angelle
-angelo
-angerer
-angermey
-angie
-angil
-anglin
-angobald
-angus
-angustia
-angvall
-angy
-anh
-anhorn
-anhtuan
-ania
-anibal
-anica
-anika
-aniko
-anil
-anila
-anindita
-anirban
-anissa
-anita
-anitra
-aniya
-anja
-anjali
-anjanett
-anje
-anjela
-anjli
-anke
-anker
-anki
-ankie
-ankur
-anky
-ann
-ann-hoon
-ann-lorr
-ann-mari
-anna
-anna-dia
-anna-mar
-annab
-annabal
-annabel
-annabela
-annabell
-annable
-annadian
-annalea
-annalee
-annalies
-annalisa
-annalise
-annamari
-annamay
-annarbor
-annard
-annas
-anne
-anne mar
-anne-cor
-anne-lis
-anne-mar
-annecori
-anneke
-annelies
-annelise
-annemari
-annemie
-annet
-annetta
-annette
-anni
-annibale
-annice
-annick
-annie
-annika
-annis
-annise
-annissa
-annmaria
-annmarie
-annnora
-annora
-annunzia
-anny
-anolik
-anoop
-anouk
-anoushir
-ans
-ansar
-ansel
-ansell
-anselm
-anselma
-anshel
-ansley
-anson
-ansorger
-anstead
-anstett
-anstice
-ansys
-antai
-antanas
-antanina
-anthe
-anthea
-anthia
-anthiath
-anthonis
-anthony
-antin
-antinucc
-antkowia
-antle
-antoft
-antoine
-antoinet
-anton
-anton-ph
-antonare
-antone
-antonell
-antonett
-antoni
-antonia
-antonie
-antoniet
-antonin
-antonina
-antonino
-antonio
-antonios
-antonius
-antons
-antony
-antti
-antuan
-antworth
-anu
-anup
-anupam
-anurag
-anver
-anvradha
-anwar
-any
-anya
-anzarout
-anzures
-aoki
-aparicio
-aparna
-aphrodit
-api-ecm
-apiruksa
-apollo
-apostolo
-appell
-appenzel
-applebau
-applegar
-appleton
-appleyar
-applicat
-applicon
-appoloni
-appuglie
-apriel
-april
-aprilett
-aprill
-apryle
-apter
-apurba
-apurve
-ara
-arabadji
-arabel
-arabela
-arabele
-arabella
-arabelle
-aragon
-aragorn
-arai
-araldo
-aramideh
-arana
-arash
-aravamud
-arbel
-arbenz
-arbo
-arbuckle
-arch
-archaimb
-archamba
-archana
-archer
-archibal
-archibol
-archie
-archy
-arco
-arcouet
-ard
-arda
-ardath
-ardavan
-ardeen
-ardelia
-ardelis
-ardella
-ardelle
-arden
-ardene
-ardenia
-ardie
-ardiel
-ardine
-ardis
-ardisj
-ardith
-ardizone
-ardoin
-ardra
-ardyce
-ardys
-ardyth
-aref
-areg
-arel
-arellano
-arend
-arens
-ares
-aretha
-areu
-argento
-argyriou
-ari
-ariadne
-ariana
-arias
-aribindi
-aric
-aridatha
-arie
-ariel
-ariela
-ariella
-arielle
-arif
-arin
-arina
-arine
-ario
-aris
-aristide
-aristotl
-arjun
-arkady
-arkestei
-arko
-arlan
-arlana
-arlee
-arleen
-arlen
-arlena
-arlene
-arles
-arleta
-arlette
-arley
-arleyne
-arlie
-arliene
-arlin
-arlina
-arlinda
-arline
-arluene
-arly
-arlyn
-arlyne
-arman
-armand
-armande
-armando
-armbrust
-armelia
-armelle
-armenaki
-armenta
-armentro
-armes
-armida
-armijo
-armin
-armine
-armitage
-armolavi
-armour
-armstead
-armstron
-arn
-arnaldo
-arnauld
-arnav
-arne
-arnett
-arney
-arni
-arnie
-arnis
-arno
-arnold
-arnoldo
-arnon
-arnone
-arnott
-arnuad
-arny
-aroldo
-aron
-arona
-aronovic
-aronson
-aronstam
-arora
-arpin
-arpita
-arrgh
-arri
-arro
-arron
-arsavir
-arsena
-arsenaul
-arsene
-arseneau
-arshad
-art
-artair
-arte
-artemas
-artemis
-artemus
-arther
-arthur
-artie
-artiller
-arto
-artola
-arts
-artspssa
-artur
-arturo
-artus
-artuso
-arty
-artzer
-arul
-arumugam
-arun
-aruna
-arunacha
-arv
-arvid
-arvie
-arvin
-arvind
-arvy
-arwakhi
-arya
-aryavong
-aryn
-arzu
-asa
-asad
-asan
-asawa
-asbill
-asbjorn
-asce
-ascott
-asdel
-ase
-asfazado
-asghar
-asgharza
-ash
-ashalata
-ashar
-ashbee
-ashberry
-ashbey
-ashby
-ashdown
-ashely
-asher
-ashfaq
-ashford
-ashia
-ashien
-ashil
-ashima
-ashis
-ashla
-ashlan
-ashlee
-ashleigh
-ashlen
-ashley
-ashli
-ashlie
-ashlin
-ashly
-ashmore
-ashok
-ashoka
-ashrae
-ashraf
-ashruf
-ashton
-ashu
-ashurkof
-ashutosh
-ashwin
-ashwood-
-ashworth
-asia
-asif
-asing
-asistore
-askins
-askold
-asmar
-asme
-asnat
-asops
-asprer
-asquin
-assaad
-assaf
-asselin
-assenza
-assistan
-associat
-astaire
-astalos
-astle
-astley
-aston
-astor
-astorino
-astra
-astrid
-astrix
-aswini
-atalanta
-atalla
-atcheson
-atchison
-atef
-athalie
-athanasi
-athanass
-athar
-athena
-athene
-athony
-athwal
-atindra
-atique
-atkins
-atkinson
-atl
-atl-sale
-atlanta
-atlante
-atlantic
-atmane
-atoui
-atp
-atpco
-atprs
-atputhar
-atrc
-atsuo
-atsushi
-atta
-attaie
-attanasi
-attarchi
-attard
-attaway
-atte
-attenbor
-atteridg
-attfield
-attilio
-attilla
-atul
-atwater
-atwell
-atwell-b
-au
-au-yang
-au-yeung
-aube
-auberon
-aubert
-auberta
-aubin
-aubine
-aubree
-aubrette
-aubrey
-aubrie
-aubry
-aubuchon
-aucoin
-aud
-audet
-audette
-audi
-audie
-audivox
-audra
-audre
-audrean
-audrey
-audrie
-audrienn
-audry
-audrye
-audy
-auerbach
-augeri
-augie
-august
-augusta
-auguste
-augustin
-augusto
-augustus
-augy
-auker
-aula
-aulakh
-auld
-ault
-aumoine
-aundrea
-aunon
-aura
-aurea
-aurel
-aurelea
-aurelia
-aurelie
-aurelius
-auria
-aurie
-aurilia
-auriol
-aurlie
-auro
-auroora
-aurora
-aurore
-aurthur
-ausley
-austen
-austin
-austina
-austine
-australi
-auth
-auto
-auton
-autoquot
-auyeung
-ava
-avard
-avaz
-ave
-avedis
-aveline
-avellane
-averardo
-averell
-averett
-averette
-averil
-averill
-aversa
-avery
-averyl
-avictor
-avie
-avigdor
-avilez
-avinash
-avirett
-avis
-aviva
-avivah
-avra
-avram
-avril
-avrit
-avrom
-avtar
-awadalla
-awadia
-awan
-awano
-ax
-axberg
-axe
-axel
-ayako
-ayandeh
-ayao
-ayaz
-aybars
-ayda
-aydin
-ayers
-ayles
-aylmar
-aylmer
-aylwin
-aymer
-ayn
-ayodele
-ayotte
-ayoubzad
-ayoup
-ayrault
-ayre
-ayres
-ayscue
-ayse
-ayukawa
-aywie
-ayyuce
-azad
-azam
-azar
-azari
-azarshah
-azer
-azevedo
-azhar
-azim
-aziz
-azizuddi
-azmak
-azmeena
-azmina
-azra
-azuma
-azzuolo
-ba
-baab
-baader
-bab
-baba
-bababunm
-babak
-babalola
-babar
-babara
-babasaki
-babatund
-babb
-babbage
-babbette
-babbie
-babcock
-baber
-babette
-babin
-babineau
-babione
-babita
-babs
-babu
-baby
-babyak
-baccari
-bacchioc
-bacchus
-bacciagl
-bach
-bachecon
-bachelu
-bachewic
-bachitta
-bachmann
-bachner
-bachynsk
-backshal
-bacon
-baddeley
-badelt
-badenoch
-badger
-badjari
-badmingt
-badowski
-badri
-badza
-bae
-baenzige
-baer
-baerg
-baets
-bagetako
-bagg
-baggerma
-baghdadi
-bagi
-bagnato
-bagshaw
-bagwell
-baha
-bahaa
-bahadir
-baheya
-bahgat
-bahia
-bahl
-bahman
-bahoric
-bahram
-bail
-bailetti
-bailey
-bailie
-baillarg
-baillie
-bailloux
-baily
-bain
-bainer
-baines
-bains
-bainton
-baird
-bajada
-bajpeyi
-bakay
-bakel
-baker
-baker-gr
-bakhach
-bakkum
-bakoury
-bal
-balaban
-balabani
-balachan
-balaji
-balakris
-balanger
-balascak
-balasing
-balbir
-balcom
-bald
-balderst
-baldev
-baldock
-baldridg
-balduin
-baldwin
-bale
-bales
-balfour
-balgalvi
-baljinde
-balkenho
-balkisso
-ballanti
-ballard
-ballarte
-ballinge
-ballios
-ballou
-ballyk
-balmer
-balog
-balogh
-balraj
-balsas
-balser
-balter
-baltodan
-balutis
-balvinde
-balwinde
-bam
-bambach
-bambang
-bambi
-bambie
-bamby
-bame
-bamfo
-ban
-banaei
-bancroft
-bandel
-banens
-banerd
-banerjee
-banez
-banfalvi
-bang
-bangert
-bangia
-banh
-banigan
-banik
-bank
-bankhead
-banks
-banky
-bannai
-bannan
-bannard
-banniste
-bansal
-banu
-banville
-bao
-baominh
-baquero
-bar
-barabash
-baragar
-barakat
-baran
-barb
-barba
-barbabas
-barbabra
-barbara
-barbara-
-barbaraa
-barbary
-barbe
-barbeau
-barbee
-barberen
-barbette
-barbey
-barbi
-barbie
-barbour
-barbra
-barby
-barclay
-barcza
-bard
-barde
-bardsley
-bareham
-barel
-barenie
-barentse
-barfield
-barham
-bari
-baribeau
-baril
-baris
-barker
-barkhous
-barkley
-barkwill
-barlas
-barlow
-barn
-barnabas
-barnabe
-barnaby
-barnard
-barnebas
-barnes
-barnett
-barney
-barnhard
-barnhart
-barnhill
-barnhous
-barnicke
-barnie
-barnwell
-barny
-barolet
-baron
-barr
-barraclo
-barrass
-barrell
-barret
-barrett
-barreyre
-barri
-barrie
-barrient
-barriere
-barringt
-barrio
-barris
-barritt
-barron
-barrows
-barry
-barsch
-barsha
-barsky
-barsony
-barstow
-barszcze
-bart
-bartel
-barth
-barthel
-barthole
-bartholo
-bartie
-bartkows
-bartlet
-bartlett
-bartley
-bartolem
-bartolom
-bartoluc
-barton
-bartosze
-bartra
-bartram
-bartush
-barty
-bartz
-baruk
-barwikow
-bary
-baryram
-basa
-basco
-bascombe
-base
-basheer
-bashton
-bashyam
-basia
-basil
-basile
-basilio
-basilius
-basinger
-baskaran
-baskervi
-baskin
-basladyn
-basmadji
-basnett
-bason
-basrur
-bassam
-bassem
-basser
-bassett
-bassigna
-bassil
-basta
-bastani
-bastarac
-bastian
-bastien
-basu
-bat
-batcheld
-batchelo
-batchoun
-bateman
-bates
-batholom
-bathrick
-bathsheb
-batsheva
-batson
-battersb
-battersh
-battisto
-batura
-baudais
-baudoin
-bauer
-baughan
-baugnon
-baulch
-baum
-baumann
-baumberg
-baumert
-bautista
-bawek
-bawn
-bax
-baxie
-baxter
-baxy
-bay
-bayard
-bayer
-bayerkoh
-bayless
-bayley
-bayly
-bayne
-baynes
-bayno
-bayola
-bayrakta
-bays
-bazarjan
-bazemore
-bazerghi
-bazerman
-bazik
-baziuk
-bcs
-bcspatch
-bea
-beach
-beadley
-beagley
-beal
-beale
-beall
-bealle
-beals
-beana
-bear
-beardmor
-bearnard
-bears
-beasley
-beata
-beate
-beato
-beaton
-beatrice
-beatrisa
-beatrix
-beatriz
-beattie
-beattie-
-beatty
-beaty
-beau
-beaubien
-beaucair
-beauchai
-beaucham
-beauchem
-beaudet
-beaudett
-beaudin
-beaudoin
-beaudry
-beaufort
-beaule
-beaulieu
-beaumier
-beaumont
-beaupre
-beaurega
-beausejo
-beauvais
-beavingt
-beavis
-beb
-bebber
-bebe
-bebee
-becan
-becca
-bechara
-bechtel
-beck
-becka
-becke
-becker
-beckett
-beckham
-becki
-beckie
-beckman
-beckstea
-beckwith
-becky
-beconovi
-becquart
-bedard
-bede
-bedford
-bedi
-bedient
-bedlingt
-bednar
-bedoya
-bedrosia
-bee
-beebe
-beeby
-beecker
-beehler
-beekman
-beeman
-beerkens
-beers
-bees
-beeston
-beethove
-beeton
-befanis
-beffert
-beggs
-begley
-begum
-behdad
-behlen
-behler
-behm
-behnam
-behrens
-behroozi
-behrouz
-behzad
-beil
-beilin
-beilul
-beine
-beique
-beisel
-beitinja
-beitris
-bejar
-bekkedam
-bekki
-bektas
-bel
-bela
-belair
-belaire
-beland
-belanger
-belboul
-belcher
-belcourt
-belen
-belford
-belia
-belich
-belicia
-belinda
-belir
-belisle
-belissa
-belita
-belk
-bell
-bella
-bellanca
-belle
-bellefeu
-bellehum
-bellevil
-bellew
-belley
-bellina
-bellingt
-bellis
-bello
-bellosa
-belmont
-belohoub
-belrango
-belson
-belton
-beltran
-belva
-belvia
-belyaev
-belzile
-bemiller
-bemis
-ben
-ben-isha
-benabdal
-benasso
-benavide
-benay
-benchimo
-bencia
-benda
-bender
-bendick
-bendicty
-bendite
-bendix
-beneda
-benedek
-benedett
-benedick
-benedict
-benedikt
-benefiel
-benefits
-beneteau
-benetta
-benfield
-benge
-bengt
-bengtson
-benham
-beniamin
-beninger
-benita
-benito
-benjamen
-benjamin
-benjavan
-benjes
-benji
-benjie
-benjy
-benn
-bennatt
-benne
-bennefel
-benner
-bennesa
-bennet
-bennett
-benni
-bennie
-benning
-bennison
-benny
-benoit
-benoite
-benschop
-benski
-benson
-bent
-benthem
-benthin
-bentlee
-bentley
-bento
-benton
-benwell
-benyamin
-benyon
-benzick
-benzie
-beom-sah
-beomsahn
-beorn
-beowulf
-bep
-beppie
-ber
-beranger
-berek
-berenbac
-berenice
-berenz
-beresfor
-beresnik
-beret
-bereza
-bergado
-berger
-bergeron
-bergeson
-berget
-bergland
-bergman
-bergmann
-bergquis
-bergsma
-bergstro
-bergwerf
-berhane
-beriault
-berk
-berke
-berkeley
-berkie
-berkley
-berkly
-berknet
-berky
-berman
-bermel
-bern
-berna
-bernaden
-bernadet
-bernadin
-bernard
-bernardi
-bernardo
-bernarr
-bernd
-berndt
-berne
-berneche
-bernelle
-berneta
-bernete
-bernetta
-bernette
-bernhard
-berni
-bernice
-bernie
-berniece
-bernier
-berning
-bernita
-berno
-bernstei
-berny
-berri
-berrie
-berrin
-berrisfo
-berro
-berry
-berryhil
-bert
-berta
-berte
-berteau
-bertha
-berthe
-berthele
-berti
-bertie
-bertigno
-bertina
-bertine
-bertini
-bertolin
-berton
-bertram
-bertrand
-berty
-berube
-beryl
-beryle
-beshai
-besharah
-beshir
-besime
-besnier
-bess
-besse
-bessel
-bessell
-bessette
-bessey
-bessie
-besson
-bessuill
-bessy
-bestavro
-beswick
-betcher
-beth
-bethanne
-bethany
-bethena
-bethina
-bethune
-beton
-betsey
-betsill
-betsy
-betta
-bettadap
-bette
-bette-an
-betteann
-betterle
-betters
-betti
-bettie
-bettina
-bettine
-bettink
-betts
-betty
-betty-an
-bettye
-beulah
-beun
-beuren
-bev
-bevan
-beveridg
-beverie
-beverlee
-beverley
-beverlie
-beverly
-bevin
-bevingto
-bevis
-bevon
-bevvy
-bevyn
-beware.
-beygui
-beymer
-bezanson
-bezdel
-beznowsk
-bhagvat
-bhal
-bhandari
-bhanu
-bharadwa
-bharat
-bhardwaj
-bhasin
-bhaskar
-bhatia
-bhatt
-bhattach
-bhatti
-bhavani
-bhoday
-bhullar
-bhupendr
-bhupinde
-bhusan
-bi-jun
-bi-shiou
-biage
-bialek
-bialkeni
-biamonte
-bianca
-bianchi
-bianka
-biard
-bibbie
-bibby
-bibbye
-bibekana
-bibi
-bible
-bibr
-bice
-bickford
-bidc
-biddie
-biddy
-bidetti
-bidget
-bidyut
-biederma
-biegaj
-biel
-bielan
-bielat
-bielby
-bielecki
-bielejes
-bienek
-bienia
-bierbrie
-bierman
-biermann
-biersach
-bieszcza
-bigelow
-biggers
-biggerst
-biggs
-bigley
-bigras
-bihari
-bihl
-bijan
-bijjani
-bijman
-bijons
-bijun
-bil
-bilal
-bilanski
-bili
-bill
-billard
-billi
-billie
-billing
-billingh
-billotea
-billy
-billye
-bilodeau
-bilovus
-bilsboro
-bilton
-bimini
-bin
-bina
-binda
-binder
-bindi
-binette
-bing
-binggeli
-bingham
-bingley
-bingwu
-binh
-bink
-binkley
-binky
-binner
-binni
-binnie
-binningt
-binny
-bins
-biomecha
-biomed
-bipin
-biplab
-bir
-biray
-birch
-bird
-birdie
-birendra
-birgit
-birgitta
-birgitte
-birk
-birkett
-birks
-birkwood
-birmingh
-biron
-birtch
-bisad
-bisch
-bishiou
-bishwa
-bishya
-bismark
-biss
-bissegge
-bissette
-bisson
-bissonne
-biswa
-biswajit
-bitar
-bittenbe
-bittman
-bitton
-bivens
-bizga
-bjorklun
-bjorn
-bjornson
-blaauw
-blackard
-blackbur
-blacker
-blackley
-blackloc
-blackman
-blacksha
-blackshi
-blackwel
-blackwoo
-bladon
-blaikloc
-blaine
-blair
-blaire
-blais
-blaise
-blake
-blake-kn
-blakelee
-blakeley
-blakemor
-blakesle
-blakey
-blakkolb
-blalock
-blanca
-blanca-s
-blancasi
-blanch
-blancha
-blanchar
-blanche
-blanchet
-blanco-a
-blander
-blane
-blankens
-blann
-blaschuk
-blasine
-blasing
-blasko
-blatherw
-blatt
-blau
-blauer
-blaufus
-blaylock
-blayne
-blazejew
-blazek
-blazer
-bleile
-blenk
-blenkarn
-blesi
-blethen
-bleuer
-blevins
-blezard
-blidy
-blimkie
-blinn
-blinni
-blinnie
-blinny
-bliss
-blisse
-blissett
-blithe
-blodgett
-bloedon
-bloemker
-blois
-blomquis
-blondell
-blondie
-blondy
-bloodwor
-blostein
-blouin
-blount
-bluethne
-blum
-blumenfe
-blumer
-bluschke
-bly
-blyskal
-blyszcza
-blythe
-bmethods
-bnr
-bnrecad
-bnrinfo
-bnrlsi
-bnrsport
-bnrtor
-bo
-bo-ping
-boal
-boaman
-boarder
-boase
-boatwrig
-bob
-bobak
-bobar
-bobb
-bobbe
-bobbee
-bobbette
-bobbi
-bobbie
-bobbitt
-bobby
-bobbye
-bobette
-bobina
-bobine
-bobinett
-boccali
-bockaj
-bocklage
-bocservi
-boddevel
-boden
-bodford
-bodin
-bodkin
-bodnar
-bodo
-boeck
-boecke
-boehlke
-boehms
-boen
-boer
-boersma
-boeyen
-bogal
-bogart
-bogdan
-bogert
-bogey
-boggan
-boggia
-boggild
-boggs
-bogumill
-boguslaw
-bohacek
-bohanan
-bohannon
-bohdan
-bohn
-bohner
-bohyun
-boigie
-boileau
-boily
-boinnard
-bois
-boisseau
-boisset
-boisvert
-boivin
-bojeck
-bokanovi
-bokij
-bokish
-boland
-bolding
-bolduc
-boleda
-bolen
-boles
-bolgos
-bolio
-bolli
-bolly
-bolon
-bolouri
-bolsinge
-bolton
-bolzon
-bomba
-bombardi
-bommakan
-bommer
-bomstein
-bon
-bonahoom
-bond
-bondie
-bondon
-bonduran
-bondy
-bone
-bonfanti
-bongers
-boniface
-bonita
-bonn
-bonnar
-bonneau
-bonnee
-bonnefoy
-bonnell
-bonner
-bonnevil
-bonney
-bonni
-bonnibel
-bonnie
-bonnin
-bonny
-bono
-boocock
-booker
-booking
-bookings
-boon-sio
-boone
-boonie
-boonphet
-boonsion
-boony
-boorne
-boorse
-boos
-boose
-boot
-boote
-booth
-boothe
-boothroy
-bophal
-boping
-bopp
-boppana
-bor-wen
-bora
-boraie
-boray
-borcic
-bord
-bordage
-borden
-bordie
-bordin
-bordy
-borek
-borel
-borg
-borgia
-borha
-boris
-borivoje
-borkowic
-borman
-borodajl
-borojevi
-borosch
-borosh
-boroski
-boroughs
-borowiec
-borozny
-borrelli
-borsa
-borsato
-borson
-bortenst
-borthwic
-bortolus
-borum
-boruslaw
-borwen
-borza
-borzic
-bosch
-boschin
-boscio
-bosco
-bose
-bosiljev
-bosiljka
-bosko
-bosnich
-bosnyak
-bossa
-bossert
-bossett
-bossler
-bostelma
-bostock
-boswell
-boswick
-bosworth
-bosy
-bot
-bothwell
-bott
-botti
-botting
-bottis
-botto
-bottomle
-bottoms
-botyrius
-bouchard
-boucher
-boucouri
-boudin
-boudreau
-bouffard
-bouick
-boulais
-boulay
-bouleric
-boulos
-boult
-bounds
-bour
-bourahla
-bourbonn
-bourcier
-bourdeau
-bourdign
-bourdin
-bouret
-bourgaiz
-bourgaul
-bourget
-bourgon
-bourguig
-bourk
-bourke
-bourland
-bourlet
-bourne
-bouroncl
-bourque
-bourret
-bousfiel
-boutilie
-boutin
-boutniko
-boutot
-bovat
-bovee
-bovenize
-bovey
-bowab
-bowcock
-bowden
-bowen
-bowens
-bower
-bowers
-bowes
-bowick
-bowie
-bowler
-bowles
-bowling
-bowser
-bowyer
-boy
-boyachek
-boyajian
-boyce
-boycey
-boycie
-boyd
-boye
-boyea
-boyer
-boyes
-boylan
-boyle
-boynton
-boz
-bozeman
-bozicevi
-bqb
-braaksma
-brabant
-brabec
-bracewel
-brackin
-brackley
-bracy
-brad
-bradan
-bradbury
-bradd
-braddock
-braddy
-brade
-bradee
-braden
-bradford
-brading
-bradlee
-bradley
-bradlow
-bradly
-bradnels
-bradney
-bradshaw
-brady
-bradyhou
-bragado
-braganza
-bragg
-braginet
-braham
-brahim
-brahmana
-brahms
-brailey
-brain
-brait
-brajesh
-bram
-brambley
-bramlett
-bran
-brana
-branchau
-brand
-brandais
-brande
-brandea
-brandel
-branden
-brander
-brandi
-brandice
-brandie
-brandise
-brandon
-brandsen
-brandsta
-brandt
-brandtr
-brandvol
-brandy
-brandyn
-branham
-brann
-brannan
-brannen
-brannick
-brannon
-brans
-branscom
-brant
-brantley
-brar
-brashear
-brasingt
-brassard
-brassell
-brassem
-brasset
-brasunas
-brathwai
-bratten
-brauer
-brault
-braum
-braun
-braunsti
-braverma
-brawley
-brazeau
-breanne
-brear
-brearley
-breault
-brechtje
-bredeck
-bredfeld
-bree
-breedlov
-breena
-bregitte
-breglec
-brehm
-breisch
-breiten
-brekel
-brel
-bremner
-bren
-brena
-brend
-brenda
-brendan
-brenden
-brender
-brendin
-brendis
-brendon
-brenn
-brenna
-brennan
-brennand
-brennen
-brent
-brentley
-brenton
-breon
-brese
-bresee
-breslin
-bresnaha
-bresnan
-bress
-bret
-breton
-brett
-breuer
-brevard
-brew
-brewer
-brewster
-brewton
-bria
-brian
-briana
-brianna
-brianne
-briano
-briant
-briante
-briard
-brice
-brichett
-brickey
-brickman
-bride
-briden
-bridenst
-bridge
-bridgefo
-bridges
-bridget
-bridgett
-bridgman
-bridie
-brieda
-briel
-brien
-brier
-briere
-brierley
-brietta
-brig
-brigg
-briggs
-brigham
-brightwe
-brigid
-brigida
-brigit
-brigitta
-brigitte
-brina
-brind'am
-brindley
-briner
-briney
-bringhur
-brinklow
-brinkman
-brinn
-brinna
-brintnel
-brinton
-briny
-brion
-brisby
-briseboi
-brissett
-brisson
-brit
-brita
-britman
-britney
-britni
-britt
-britta
-brittain
-brittan
-brittane
-brittani
-brittany
-britte
-britteny
-brittne
-brittney
-brittni
-britto
-britton
-brivet
-brivins
-brkich
-brnaba
-brnaby
-broadfoo
-broadhea
-broadwel
-broberg
-broca
-brocato
-brock
-brockhou
-brockie
-brockleb
-brockman
-brockmey
-brocksch
-brocky
-brod
-broddie
-broddy
-broderic
-broderse
-brodfueh
-brodgen
-brodie
-brodman
-brodowsk
-brody
-brogden
-brogdon
-brogley
-brok
-brokaw
-brombal
-bromley
-bron
-bronec
-bronk
-bronnie
-bronny
-bronson
-brook
-brooke
-brooker
-brookes
-brookhar
-brookhou
-brooks
-brooksba
-broome
-brophy
-broschuk
-brose
-brossard
-brossela
-brosso
-brost
-brostrom
-broten
-brothers
-brothert
-brough
-broughto
-brouille
-broulik
-broussar
-broussea
-brouthil
-brouwer
-brovont
-brower
-brown-gi
-browne
-brownfie
-browning
-brownlee
-brownlie
-brownrid
-brox
-broyles
-brubaker
-bruce
-brucie
-bruder
-bruhl
-bruin
-bruis
-bruketa
-brule
-brum
-brummitt
-brummund
-brunato
-bruncati
-bruneau
-brunel
-brunelle
-bruner
-bruner-u
-brunet
-brungard
-brunhild
-brunke
-brunner
-brunner-
-bruno
-brunoni
-brunstin
-brunton
-brushey
-bruxvoor
-bry
-bryan
-bryana
-bryant
-bryanty
-bryce
-brydges
-brydon
-bryenton
-bryn
-bryna
-brynn
-brynna
-brynne
-bryon
-brys
-bryttan
-bse
-bubak
-bubel
-buccella
-bucci
-buchan
-buchanan
-buchko
-buck
-buckalew
-buckhoff
-buckie
-buckingh
-buckley
-bucklin
-buckman
-buckner
-bucky
-buczek
-bud
-buda
-budd
-buddie
-buddy
-buder
-budhram
-budi
-budihard
-budimiro
-bue
-buechner
-buehler
-buettgen
-buffam
-buffett
-buffy
-buford
-bugajska
-bugajski
-buggie
-buhler
-buhr
-buhrkuhl
-bui
-building
-buiron
-bujold
-buker
-bukowski
-bukta
-buky
-bulan
-bulanda
-bulbrook
-bulengo
-bulent
-buley
-bulger
-bulifant
-bulitka
-bulka
-bulkovsh
-bullard
-bullas
-bullen
-bulletin
-bullett
-bullinge
-bullion
-bulman
-bulmanis
-bulmer
-bulz
-bumgarne
-bumstead
-bunce
-bundschu
-bunker
-bunn
-bunner
-bunni
-bunnie
-bunny
-bunting
-buntrock
-bunzey
-buratyns
-burbage
-burbidge
-burcew
-burch
-burchat
-burchby
-burdett
-burdette
-burdick
-burega
-burek
-burg
-burge
-burger
-burgess
-burgette
-burgi
-burgin
-burgwell
-burk
-burkard
-burke
-burkepil
-burkert
-burkett
-burkey
-burkhard
-burl
-burleigh
-burleson
-burlie
-burnaby
-burnage
-burnard
-burness
-burnet
-burnett
-burnette
-burney
-burnie
-burns
-burnside
-burr
-burrell
-burrowes
-burrows
-burrus
-burruss
-burt
-burtie
-burton
-burty
-burwell
-busby
-buscagli
-buscarin
-busch
-busche
-buschelm
-bushell
-bushnell
-bushnik
-business
-buskard
-buske
-buskens
-busko
-bussewit
-bussey
-buster
-bustillo
-busuttil
-butch
-butcher
-butner
-butta
-butterfi
-butters
-buttrey
-butts
-butvich
-buxton
-buzz
-buzzell
-buzzy
-bvworks
-by don o
-bycenko
-byczko
-bydeley
-byer
-byers
-byeungwo
-byk
-bykowy
-bylina
-byoung
-byoungin
-byram
-byran
-byrann
-byrd
-byrgesen
-byrl
-byrle
-byrne
-byrnes
-byrom
-byron
-byung
-byungyon
-cabaniss
-cabi
-cabot
-cabral
-cabras
-cabrera
-caceres
-cacha
-cachero
-cacilia
-cacilie
-cad
-cadd
-caddric
-cadeau
-cadieux
-cadshare
-cadtools
-cady
-cadzow
-cae
-caesar
-caffrey
-caffry
-cagatay
-caglar
-caglayan
-cahill
-cahra
-cai
-caie
-cain
-caine
-caines
-cairisti
-cairns
-caison
-caitlin
-caitrin
-cakarevi
-cal
-calahorr
-calc
-calcote
-calder
-caldwell
-cale
-caleb
-caleta
-calhoun
-caliboso
-calica
-calida
-calis
-calistro
-calkins
-calla
-callagha
-callahan
-callan
-callanan
-callean
-calleja
-callende
-callery
-calley
-calli
-callida
-callie
-callos
-calloway
-cally
-calmejan
-calmenso
-calow
-caltride
-calumet
-calv
-calva
-calvary
-calvin
-calypso
-calzaros
-cam
-camacho
-camala
-camblin
-cambre
-camel
-camel-to
-camella
-camellia
-cameron
-camet
-camey
-cami
-camie
-camila
-camile
-camilla
-camille
-camilluc
-camino
-camirand
-cammi
-cammie
-cammy
-campagna
-campanel
-campara
-campbell
-campeau
-camplone
-campo
-campos
-canada
-canadian
-canavan
-cancela
-candace
-candee
-candelar
-candi
-candice
-candida
-candide
-candie
-candis
-candra
-candy
-canete
-canfield
-cang
-cann
-cannatar
-cano
-cantlie
-cantrell
-cantwell
-canuel
-canute
-capelle
-capes
-capindal
-caple
-caplinge
-capobian
-capostag
-capozzi
-capps
-capretta
-caprice
-captives
-caputo
-car
-cara
-caralie
-carandan
-carbajal
-carbonar
-carbone
-carboni
-carbonne
-carce
-cardella
-carden
-cardozo
-cards
-care
-career
-careers
-carella
-caren
-carena
-caresa
-caresani
-caressa
-caresse
-carevic
-carew
-carey
-cargill
-cargnell
-cari
-caria
-caridad
-carie
-carignan
-caril
-carilyn
-carin
-carina
-carine
-cariotta
-carisa
-carissa
-carita
-caritta
-cark
-carkner
-carl
-carla
-carlberg
-carldata
-carle
-carlean
-carlebac
-carlee
-carleen
-carlen
-carlene
-carleton
-carlett
-carley
-carli
-carlie
-carlin
-carlina
-carline
-carling
-carlis
-carlisle
-carlita
-carlo
-carlock
-carlos
-carlota
-carlotta
-carlsen
-carlson
-carlton
-carly
-carlye
-carlyle
-carlyn
-carlynn
-carlynne
-carm
-carma
-carmel
-carmela
-carmelia
-carmelin
-carmelit
-carmella
-carmelle
-carmelo
-carmen
-carmenci
-carmicha
-carmina
-carmine
-carmita
-carmody
-carmon
-carmona
-carnegie
-carney
-carnogur
-carny
-caro
-carol
-carol-je
-carola
-carolan
-carolann
-carole
-carolee
-carolien
-carolin
-carolina
-caroline
-caroljea
-carolle
-carolus
-carolyn
-carolyne
-carolynn
-caron
-carpenti
-carpool
-carr
-carran
-carranza
-carree
-carri
-carrie
-carriere
-carrillo
-carringt
-carrissa
-carrmtce
-carrol
-carroll
-carron
-carruthe
-carry
-carrye
-carson
-carsten
-carstens
-carswell
-cart
-carter
-cartohl
-carty
-carufel
-caruk
-caruso
-caruth
-carvalho
-carver
-cary
-caryl
-caryn
-cas
-casadont
-casalou
-casandra
-casanova
-casar
-casas
-cascarin
-case
-casey
-cash
-cashin
-casi
-casie
-casinovi
-caskey
-casler
-casnji
-casotto
-caspar
-casper
-casperso
-cass
-cassady
-cassandr
-cassar
-cassat
-cassaund
-cassese
-cassey
-cassi
-cassian
-cassidy
-cassie
-cassius
-casson
-cassondr
-cassy
-castaban
-castell
-castello
-casten
-castillo
-casto
-castongu
-castro
-castro-h
-castrono
-caswell
-cat
-catanach
-catarina
-cate
-caterina
-catering
-cath
-catha
-cathal
-catharin
-cathe
-cathee
-catherin
-catherwo
-cathi
-cathie
-cathleen
-cathlene
-cathrin
-cathrine
-cathryn
-cathy
-cathylee
-cati
-catie
-catina
-catja
-catlaina
-catlee
-catlett
-catlin
-cato
-caton
-catrina
-catriona
-catthoor
-caty
-cau
-cauchy
-caudill
-caudle
-cauthen
-cauthers
-cavan
-cavanagh
-cavanaug
-cavasin
-cavasso
-caves
-cavill
-cavin
-caviness
-cavnar
-cawley
-caye
-cayer-fl
-cayla
-cayless
-cayouett
-caz
-caza
-cazzie
-cbabbage
-cchaddie
-cecco
-cece
-cecelia
-cech
-cecil
-cecile
-ceciley
-cecilia
-cecilio
-cecilius
-cecilla
-cecily
-cecon
-ced
-cedric
-cefee
-cegelski
-ceil
-cele
-celene
-celesta
-celeste
-celestia
-celestin
-celestyn
-celia
-celie
-celina
-celinda
-celine
-celinka
-celisse
-celka
-celle
-cello
-cellucci
-celso
-celyne
-cemensky
-cen
-cencier
-centeno
-center
-centers
-centis
-centre
-cepero
-cepheus
-ceponis
-ceranic
-cerberus
-ceri
-ceriel
-cerny
-cervante
-cesar
-cesaratt
-cesare
-cesario
-cesaro
-cescon
-cesya
-cetraro
-cezary
-chaaban
-chaar
-chabane
-chabert
-chabrat
-chacko
-chacon
-chad
-chadd
-chaddha
-chaddie
-chaddock
-chaddy
-chadha
-chadrick
-chadwick
-chafin
-chafy
-chagnon
-chahal
-chahram
-chai
-chai-seo
-chaikows
-chaim
-chaiman
-chaimson
-chaintre
-chaisupa
-chak-hon
-chakraba
-chakrabo
-chakrava
-chalifou
-chalker
-challice
-chalmers
-chalton
-cham
-chamard
-chamayou
-chambers
-chamblis
-champath
-champion
-champsi
-chamsi
-chan
-chan-jiu
-chan-nan
-chance
-chancey
-chanchal
-chanchla
-chanco
-chand
-chanda
-chandal
-chandan
-chander
-chandler
-chandra
-chandrak
-chandran
-chandras
-chandru
-chane
-chang
-chang-hs
-changes
-changho
-changhsi
-chanh
-chanitr
-chanjiun
-channa
-channan
-channell
-channen
-chanonat
-chanpong
-chanshin
-chansik
-chantal
-chantall
-chantel
-chantell
-chao
-chao-pin
-chaoping
-chapa
-chapdela
-chapen
-chapin
-chapleau
-chaplin
-chapman
-chapmond
-chappell
-chappuis
-chaput
-char
-charangi
-charasse
-charbonn
-charchan
-chardon
-charee
-charene
-charest
-charette
-chari
-charil
-charin
-chariot
-charis
-charissa
-charisse
-charita
-charity
-charko
-charla
-charlean
-charlebo
-charleen
-charlena
-charlene
-charles
-charlesb
-charleto
-charley
-charlie
-charline
-charlino
-charlins
-charlot
-charlott
-charlsey
-charlton
-charly
-charmain
-charman
-charmane
-charmian
-charmine
-charmion
-charness
-charney
-charo
-charon
-charron
-charter
-chartier
-chartran
-charyl
-chas
-chasalow
-chase
-chasse
-chastity
-chatard
-chatchai
-chatel
-chatfiel
-chatha
-chatri
-chatterl
-chattert
-chattoe
-chattos
-chau
-chaudhar
-chaudhry
-chaudry
-chaug-mi
-chaugmin
-chauhan
-chaunce
-chauncey
-chaurasi
-chaurett
-chautems
-chauvin
-chavers
-chaves
-chavez
-chavis
-chawki
-chawla
-chaya
-chaz
-che
-chea
-cheal
-cheatham
-cheba
-checinsk
-checklan
-chee
-chee-yin
-chee-yon
-cheesema
-cheesman
-cheetham
-cheevers
-chel
-chellapp
-chelsae
-chelsea
-chelsey
-chelsie
-chelsy
-chem
-chen
-chen-che
-chen-chu
-chen-jun
-chen-msi
-chenard
-chenault
-chenchun
-chene
-cheney
-cheng
-cheng-do
-cheng-fo
-cheng-ho
-cheng-hu
-cheng-ts
-chengdon
-chengfoo
-chenghon
-chenghun
-chengtse
-chengwei
-chenier
-chenmsie
-chennett
-chenowet
-chenye
-cheol
-cheow-to
-cheowton
-chepregi
-cher
-chere
-cherenso
-cherey
-cheri
-cherian
-cheriann
-cherice
-cherida
-cherie
-cherilyn
-cherin
-cherise
-cherish
-cherkas
-cherlyn
-chern
-chernets
-cherng
-cherri
-cherrier
-cherrita
-cherry
-chertok
-chervena
-chery
-cherye
-cheryl
-ches
-cheshire
-chesley
-cheslie
-chesser
-chesteen
-chester
-chesterf
-cheston
-chet
-chetan
-cheuk
-cheung
-chev
-cheval
-chevalie
-chevarie
-chevy
-cheyenne
-chhabria
-chi
-chi-haw
-chi-ho
-chi-hua
-chi-hung
-chi-kai
-chi-keun
-chi-kwan
-chi-man
-chi-vien
-chi-wen
-chi-yin
-chi-yuan
-chia
-chia-hoa
-chia-hua
-chiabaut
-chiahoan
-chiahuan
-chiaki
-chiamvim
-chian
-chian-fo
-chianfon
-chiang
-chiang-h
-chianghu
-chiaoyun
-chiarell
-chiarra
-chiavaro
-chic
-chick
-chickie
-chickori
-chicky
-chico
-chie
-chief
-chieh
-chiem
-chien
-chien-ch
-chien-hs
-chien-hu
-chienche
-chienchi
-chienhsi
-chienhue
-chieu
-chih
-chih-chi
-chih-hsi
-chih-hua
-chih-tsa
-chihaw
-chihchia
-chihchie
-chihhsia
-chihhua
-chihtsai
-chihua
-chihung
-chiiwen
-chik
-chikai
-chilausk
-childerh
-childers
-childree
-childres
-childs
-chilibec
-chilton
-chima
-chin
-chin-ho
-chin-lin
-chin-shu
-chin-ten
-chin-wen
-chinfui
-ching
-ching-ch
-ching-en
-ching-fu
-ching-lo
-ching-ts
-ching-yu
-chingchy
-chingen
-chingfu
-chingtsu
-chingyun
-chinh
-chinhin
-chinho
-chiniwal
-chinlin
-chinn
-chinnery
-chinrung
-chinshu
-chinteng
-chinwen
-chiou
-chip
-chiquia
-chiquita
-chiracha
-chisholm
-chisolm
-chitkara
-chitnis
-chitra
-chityal
-chiu
-chiverto
-chiwen
-chiykows
-chiyo
-chiyuan
-chlo
-chloe
-chloette
-chloris
-chmara
-cho
-cho-kuen
-cho-lun
-chochon
-chocs
-chod
-choe
-chohan
-choi
-chojan
-chok
-cholet
-cholette
-cholewin
-chomik
-chona
-chonchan
-chong
-chong-ch
-chong-ke
-chong-la
-chongcha
-chongkeu
-choo
-choo-kan
-choon
-choon-li
-choong
-chopin
-chopowic
-chopra
-choptovy
-choquett
-chorley
-chorng
-chotkows
-chou
-choudhur
-chouhan
-chouinar
-chowhan
-choy
-choynows
-chriisto
-chris
-chrisman
-chrisoph
-chrisse
-chrissie
-chrissun
-chrissy
-christ
-christa
-christab
-christal
-christan
-christea
-christel
-christen
-christer
-christi
-christia
-christie
-christin
-christl
-christof
-christop
-christos
-christy
-christye
-christyn
-chrisy
-chronowi
-chrotoem
-chroust
-chruscie
-chrysa
-chrysant
-chrysler
-chrystal
-chryste
-chrystel
-chu
-chu-chay
-chu-chue
-chua
-chuah
-chuan
-chuan-hs
-chuang
-chuanhsi
-chubb
-chubby
-chucho
-chuchuen
-chuck
-chueh
-chuen
-chugha
-chui
-chuj
-chuk
-chukwuem
-chul
-chuming
-chummun
-chun
-chun-li
-chun-shi
-chun-yen
-chung
-chung-ch
-chung-kw
-chung-li
-chung-wo
-chung-yo
-chungen
-chungjen
-chungkwo
-chunglin
-chungpha
-chungsik
-chunkin
-chunlan
-chunli
-chunlin
-chunling
-chunmei
-chunmeng
-chunn
-chunshin
-chunyen
-chuong
-chuq
-churas
-churchil
-chwen
-chychrun
-chye
-chye-lia
-chytil
-cia
-ciampini
-cianci
-ciancibe
-ciaralli
-ciaran
-ciaschi
-ciccarel
-cicchino
-cicci
-cicek
-cicely
-cicero
-cicily
-ciel
-ciesiels
-cieslak
-cifelli
-cifersky
-cigay
-cilka
-cimarron
-cimino
-cimolai
-cinar
-cinda
-cindas
-cindee
-cindelyn
-cinderel
-cindi
-cindie
-cindra
-cindy
-cinicolo
-cinnamon
-cinq-mar
-ciocca
-ciochon
-cioffi
-ciolfi
-cipolla
-circe
-ciriaco
-cirillo
-cirilo
-ciro
-cirri
-cirstofo
-cirulli
-cis @ w
-cisco
-ciskowsk
-cisnews
-cissiee
-cissy
-citarell
-cities
-citrin
-cividino
-cizmar
-clacher
-claggett
-claiborn
-clair
-claire
-clairmon
-claise
-clampitt
-clancy
-clapham
-clapp
-clara
-clarabel
-clarance
-clare
-clarence
-claresta
-clareta
-claretta
-clarette
-clarey
-clari
-claribel
-clarice
-clarie
-clarinda
-clarine
-clarise
-clarissa
-clarisse
-clarita
-clark
-clark-st
-clarka
-clarke
-clarkson
-clary
-clason
-class
-classes
-claude
-claudell
-claudett
-claudia
-claudian
-claudie
-claudina
-claudine
-claudio
-claudius
-claus
-claveau
-claxton
-clay
-clayborn
-claybour
-claybroo
-clayson
-clayton
-clea
-cleary
-cleavlan
-cleere
-clegg
-clem
-clemence
-clemens
-clement
-clemente
-clementi
-clements
-clemie
-clemmie
-clemmons
-clemmy
-clendeni
-clenney
-clennito
-clentice
-cleo
-cleon
-cleopatr
-clerc
-clerissa
-clerkcla
-clerke
-cleroux
-clesson
-clestell
-cletis
-cleto
-cletus
-cleve
-clevelan
-clevey
-clevie
-clevon
-cliff
-clifford
-clifton
-clim
-clincket
-cline
-clinger
-clinkard
-clint
-clinteas
-clinton
-clio
-clippert
-clipsham
-clites
-clive
-clo
-clocklab
-cloe
-cloherty
-clooney
-cloris
-closson
-clost
-clotilda
-clough
-clouthie
-cloutier
-clovis
-clow
-cloyd
-cluett
-clusiau
-cly
-clyde
-clysdale
-clyve
-clywd
-cmet
-co
-co-op
-co-ordin
-coady
-coallier
-coathup
-coats
-cob
-cobaugh
-cobb
-cobban
-cobbie
-cobbold
-cobby
-coble
-cobley
-cobo
-cobran
-cocco
-cochran
-cochrane
-cockburn
-cockcrof
-cocke
-cockins
-cocos
-cocos-ar
-codack
-codata
-coddingt
-code
-codee
-coder
-codi
-codie
-codoc
-codringt
-cody
-coe
-coertnik
-coffey
-cogan
-cogdell
-coggins
-coghlan
-cogwell
-cohea
-cohen
-cohn
-cohn-sfe
-cohoe
-cohrs
-coila
-cointon
-coker
-cokol
-colagros
-colan
-colangel
-colanton
-colas
-colatta
-colbert
-colbourn
-colburn
-colby
-colclasu
-coldwell
-cole
-coleen
-colella
-coleman
-colene
-coles
-colet
-coletta
-colette
-coley
-colford
-colgan
-colin
-colina
-colinda
-collamer
-collamor
-collazo
-collecut
-colledge
-colleen
-collen
-collete
-collette
-collevec
-colley
-colli
-collie
-collier
-collin
-colline
-collins
-collis
-colly
-collyer
-colm
-colman
-coloads
-colonton
-colpitts
-colquett
-colquhou
-colquitt
-colston
-colter
-colterma
-colton
-colucci
-colver
-colvin
-colwell
-comay
-combaz
-combee
-combella
-combos
-combs
-comeau
-comley
-comm
-commazzi
-comments
-committe
-commons
-communic
-comp
-compton
-computin
-comstock
-comtois
-con
-conan
-conant
-conboy
-concetta
-concetti
-conchita
-concklin
-concordi
-conde
-condell
-condurel
-conerly
-coneybea
-cong
-congdon
-congress
-conistis
-conklin
-conley
-conlin
-conlon
-conn
-connell
-connelly
-conner
-conners
-conney
-conni
-connie
-connolly
-connor
-connors
-connors-
-conny
-conoly
-conrad
-conrade
-conrado
-conrath
-conroy
-consalve
-conservi
-consolat
-constabl
-constanc
-constant
-construc
-consuela
-consuelo
-consulta
-containi
-contardo
-conte
-contine
-contomic
-conway
-coochey
-coody
-coogan
-cooke
-cookie
-cooksey
-cooley
-coolidge
-coombs
-cooney
-coop
-cooper
-cooperma
-coord
-coordina
-coors
-copeland
-copello
-copeman
-copes
-coplesto
-copley
-copp
-coppedge
-coppins
-coqueugn
-cora
-corabel
-corabell
-corace
-coral
-coralie
-coraline
-coralyn
-corbeil
-corbet
-corbett
-corbie
-corbin
-corbitt
-corby
-corcoran
-cord
-cordelia
-cordelie
-cordell
-cordes
-cordey
-cordi
-cordie
-cordula
-cordy
-core
-coreen
-corella
-corena
-corenda
-corene
-coretta
-corette
-corey
-cori
-coriaty
-corie
-corilla
-corina
-corine
-corinna
-corinne
-coriss
-corissa
-corker
-corkey
-corkigan
-corkstow
-corkum
-corless
-corlett
-corley
-corliss
-corly
-cormac
-cormier
-cornall
-cornaro
-cornel
-cornela
-cornelia
-cornelis
-corneliu
-cornell
-cornelle
-corner
-corney
-cornie
-corny
-corpenin
-corpuz
-corr
-correa
-correia
-correna
-correy
-corri
-corriann
-corrie
-corrigan
-corrina
-corrine
-corrinne
-corritor
-corrivea
-corry
-corsale
-corse
-corson
-cort
-cortie
-cortland
-cortney
-corty
-corvo
-cory
-cos
-cosburn
-cosentin
-cosetta
-cosette
-cosgrove
-cosimo
-coslas
-cosme
-cosmo
-cosner
-cosola
-cossota
-costa
-costache
-costadim
-costandi
-costanti
-costanza
-costanzi
-costas
-costas-d
-coste
-costello
-costen
-cote
-cothran
-cotnam
-cotner
-cotten
-cottengi
-cotter
-cottingh
-cottrell
-cotugno
-cotuna
-coucopou
-couey
-coughran
-coules
-coulman
-coulombe
-coulson
-coulter
-coulterm
-count
-coupal
-coupland
-courches
-couron
-coursdev
-coursey
-coursol
-courson
-court
-courtadm
-courtena
-courtlan
-courtnay
-courtney
-courvill
-couse
-couser
-cousinea
-cousins
-coutelli
-coutinho
-couto
-coutu
-couture
-covach
-coverdal
-covey
-coviensk
-coville
-covingto
-cowan
-cowart
-cowell
-cowen
-cowick
-cowley
-cowling
-cowlisha
-cownie
-cowper
-coxall
-coxe
-coyle
-coyne
-cozart
-cozmo
-cozyn
-cozzi
-cpebach
-cpm
-cprs
-crabb
-crabe
-crabtree
-cracknel
-craddock
-crafton
-craggie
-craggs
-craggy
-craghead
-craib
-craig
-craig-du
-crain
-cramer
-cramm
-crampton
-crandall
-cranford
-cranston
-crapco
-crase
-craver
-crawford
-crawhall
-crawley
-crawshaw
-cray
-craycraf
-cre
-creamer
-crean
-creane
-creasey
-creasman
-creative
-credico
-credille
-creech
-creecy
-cregan
-creigh
-creight
-creighto
-cremer
-crepeau
-crerar
-creswell
-crews
-cribbs
-crichton
-crick
-crickard
-cricker
-cricket
-crigger
-crin
-crippen
-cripps
-cris
-crisler
-crissie
-crissy
-crista
-cristabe
-cristal
-cristen
-cristesc
-cristi
-cristian
-cristie
-cristin
-cristina
-cristine
-cristion
-cristoba
-cristofa
-cristy
-criswell
-critchle
-crittend
-crl.word
-crocker
-crockett
-crogie
-croiseti
-croix
-crolla
-cromer
-crommie
-crompton
-cromwell
-cronan
-cronin
-cronk
-cronkrig
-cronkwri
-crooks
-croom
-cropper
-crosby
-cross
-cross-as
-crossass
-crossley
-crosson
-crosswel
-croteau
-crothers
-crotty
-crowder
-crowe
-crowell
-crowle
-crowley
-croxall
-croxford
-crozier
-crucefix
-cruey
-cruicksh
-crumpton
-crusoe
-crutchfi
-cruz
-cruzado
-cryoelec
-crysta
-crystal
-crystalb
-crystie
-csaszar
-csenar
-csilla
-csite
-csma
-csop
-csr
-csreport
-csua
-ctas
-cthrine
-cuany
-cuauhtem
-cubical
-cubicle
-cucchiar
-cucci
-cuccia
-cucciole
-cucuzzel
-cuddihey
-cuddihy
-cuddy
-cuellar
-cuervo
-cuffle
-cuffling
-cuggy
-culberso
-culberts
-culbreth
-culham
-culkin
-cull
-cullan
-cullen
-culley
-cullie
-cullin
-culliphe
-cullum
-cully
-culmer
-culp
-culver
-culverho
-cummine
-cumming
-cummings
-cummins
-cumpston
-cunanan
-cung
-cunha-go
-cunningh
-cuong
-cuper
-cupid
-cupido
-curcio
-curley
-curmon
-curnow
-curr
-curran
-currer
-currey
-currie
-currier
-currin
-curry
-curt
-curtice
-curtin
-curtis
-curtt
-cusato
-cushing
-cushman
-cusick
-cusson
-custer
-custsupp
-cusumano
-cuthbert
-cuthill
-cutrufel
-cutter
-cuu
-cwirzen
-cy
-cyb
-cybil
-cybill
-cybotech
-cycelia
-cymbre
-cynde
-cyndi
-cyndia
-cyndie
-cyndy
-cynethia
-cynthea
-cynthia
-cynthie
-cynthy
-cynthya
-cyr
-cyril
-cyrill
-cyrille
-cyrillus
-cyrine
-cyros
-cyrus
-cytrynba
-czappa
-czarneck
-czeban
-czes
-czeslaw
-czychun
-d'ambros
-d'amico
-d'amour
-d'andrea
-d'angelo
-d'anjou
-d'anne
-d'antoni
-d'aoust
-d'arcy
-d'cruz
-d'ingian
-d'ippoli
-d'lima
-d'onofri
-d'orazio
-d'silva
-d'soto
-d'souza
-da
-da gama
-da silva
-da-shih
-daaboul
-dacal
-dace
-dacey
-dach
-dachelet
-dacia
-dacie
-dack
-dacre
-dacy
-dada
-dadalt
-dadang
-dade
-dadgar
-dadkhah
-dae
-daebum
-daedalus
-dael
-daena
-daesik
-daffi
-daffie
-daffy
-dafoe
-dag
-dagama
-dagenais
-dagert
-dages
-dagg
-dagley
-dagmar
-dagnall
-dagnaw
-dagny
-dagoulis
-dahai
-dahan
-dahi
-dahl
-dahlia
-dahlstro
-dai
-daigle
-daigneau
-daijavad
-daile
-dailey
-daimee
-dairin
-daisey
-daisi
-daisie
-daisy
-dajerlin
-dal
-dale
-dalenna
-dales
-daley
-dalia
-dalila
-dalip
-dalis
-dall
-dall'ost
-dallago
-dallaire
-dallal
-dallas
-dalli
-dallis
-dallon
-dalmard
-daloris
-dalrympl
-dalsiel
-dalston
-dalt
-dalton
-daly
-damara
-damaris
-dambenie
-dame
-damena
-damerji
-damian
-damiano
-damien
-damil
-damita
-damon
-damone
-dan
-dana
-danagher
-danai
-danbrook
-danchi
-dancy
-dando
-danduran
-dane
-danell
-danella
-daneshza
-danette
-danforth
-dangubic
-danh
-dani
-dania
-danial
-danica
-danice
-danie
-daniel
-daniela
-danielak
-daniele
-daniella
-danielle
-daniells
-daniels
-danika
-danila
-danilo
-danilowi
-daniluk
-danit
-danita
-danjean
-danker
-danko
-danling
-dann
-danna
-dannel
-danni
-dannie
-danny
-dannye
-dans
-danserea
-dante
-dantu
-dantzler
-dany
-danya
-danyelle
-danyette
-danzeise
-danzig
-dao
-daochuan
-daoud
-daoust
-daphene
-daphine
-daphna
-daphne
-daquano
-dar
-dar-der
-dara
-darb
-darbee
-darbie
-darby
-darcange
-darcee
-darcel
-darcey
-darci
-darcie
-darcy
-darda
-darden
-darder
-dare
-dareen
-darell
-darelle
-daren
-dares
-dari
-daria
-darian
-darice
-darill
-darin
-darina
-dario
-darius
-darko
-darla
-darleen
-darlene
-darline
-darlingt
-darlleen
-darn
-darnall
-darnel
-darnell
-darold
-daron
-darou
-darpa
-darr
-darrel
-darrell
-darrelle
-darren
-darrick
-darrimon
-darrin
-darroch
-darrol
-darrow
-darry
-darryl
-darsey
-darshan
-darshana
-darshi
-darsie
-daruius
-darveau
-darwen
-darwin
-darwyn
-darya
-daryl
-daryle
-daryn
-daryoosh
-daryoush
-das
-dasch
-dasd
-dasha
-dasharat
-dashih
-dasi
-dasie
-dasilva
-dasinger
-dasrath
-dassani
-dassie
-dasya
-dat
-data
-datacent
-datas
-datasupp
-datema
-dates
-datha
-datta
-dattalo
-dau
-daudin
-daugavie
-daughert
-daughtre
-daunais
-daune
-dauphina
-dautenha
-dauteriv
-dav
-davalo
-dave
-daveen
-daven
-daveta
-davey
-david
-david-ye
-davida
-davidde
-davide
-davidh
-davidovi
-davids
-davidson
-davie
-davies
-davin
-davina
-davinci
-davinder
-davine
-davis
-davison
-davita
-davon
-davor
-davy
-dawe
-dawit
-dawkins
-dawn
-dawna
-dawne
-dawson
-daya
-dayal
-dayberry
-dayle
-daymond
-dayna
-dayton
-db
-dba
-dbase
-dbs
-ddavid
-ddene
-ddocdb
-de
-de anda
-de baets
-de beaum
-de belen
-de boer
-de buda
-de cecco
-de chabe
-de cours
-de crist
-de eliza
-de grace
-de hoog
-de la
-de leon
-de los
-de marco
-de marti
-de muinc
-de salis
-de souza
-de toni
-de varen
-de vito
-de vries
-de wiele
-de wilto
-de witt
-de witte
-de-anna
-de-boer
-de-ying
-de_konin
-deacetis
-deadwile
-deagle
-deak
-deakin
-dealmeid
-dealto
-deames
-dean
-deana
-deanda
-deane
-deanm
-deann
-deanna
-deanne
-deans
-deanza
-dear
-dearaujo
-deardurf
-deason
-deathera
-deatrick
-deb
-debadeep
-debasish
-debassig
-debbi
-debbie
-debby
-debee
-debera
-debernar
-debi
-debkumar
-deblois
-debnam
-deboer
-deboor
-debor
-debora
-deborah
-debord
-debortol
-debra
-debrah
-debrun
-debrusk
-debs
-decacque
-decaire
-decapua
-decarie
-decasper
-decca
-decelles
-deciccio
-deck
-decker
-declan
-decleir
-decource
-decourcy
-decoursi
-deczky
-dedas
-dede
-dedie
-dedra
-deduk
-dee
-dee dee
-deeann
-deeanne
-deedee
-deek
-deena
-deep
-deepak
-deerdre
-deere
-deery
-deetta
-deevey
-deeyn
-defacend
-defalco
-defazio
-defilipp
-deford
-deforeit
-defrance
-defranch
-degan
-degen
-degenova
-degraauw
-degrandi
-deguines
-deguire
-dehaan
-dehghan
-dehlia
-dehner
-dehoff
-dehr
-deiadrel
-deibert
-deicher
-deidre
-deikman
-deina
-deininge
-deirdre
-deitera
-deitiker
-dejan
-dejongh
-dekai
-dekeyser
-del
-dela
-delaat
-delage
-delahay
-delainey
-delancey
-delaney
-delangis
-delano
-delargy
-delat
-delbert
-delbret
-delbridg
-delbrouc
-delcina
-delcine
-deleon
-delf
-delfin
-delfreda
-delgass
-delgross
-delia
-deligdis
-delila
-delilah
-delinda
-delisle
-deliva
-dell
-della
-delle
-delli
-dellinge
-delly
-delmar
-delmer
-delmor
-delmore
-delnaz
-delo
-delolmod
-delong
-delora
-delorenz
-delores
-deloria
-deloris
-delorme
-delphine
-delphini
-delroy
-deluca
-deluce
-deluco
-delvecch
-delzer
-demarco
-demarest
-demchuk
-dement
-demeo
-demers
-demet
-demeter
-demetra
-demetre
-demetri
-demetria
-demetric
-demetrio
-demetris
-demetriu
-demeulem
-demi
-demidenk
-demir
-demjen
-demmel
-demone
-demontlu
-demorest
-demorge
-demott
-demps
-dempsey
-dempster
-demren
-demuth
-den
-dena
-dendi
-dene
-denebeim
-deneen
-denemark
-denery
-denest
-denette
-deng
-deng-jyi
-dengjyi
-deni
-denice
-deniece
-denike
-denis
-denise
-denison
-deniz
-denley
-denman
-denmark
-denna
-dennen
-dennet
-denney
-denni
-dennie
-denning
-dennis
-dennison
-denno
-denny
-deno
-denomme
-denoon
-denter
-denton
-denver
-deny
-denys
-denyse
-denzil
-deog
-deok
-deol
-deonne
-depalma
-depeltea
-depew
-dephoure
-deployme
-depooter
-dept
-dept.
-der
-der-chan
-der-shen
-deraadt
-deraaf
-derby
-derbyshi
-derecki
-derek
-derenzo
-derganc
-deri
-derick
-derika
-derin
-derk
-derluen
-dermardi
-dermot
-derome
-derosa
-derose
-derosenr
-derrek
-derrett
-derrick
-derrik
-derril
-derron
-derry
-dersheng
-derward
-derwin
-dery
-deryck
-des
-desai
-desalis
-desantis
-desautel
-desch
-deschamp
-deschiff
-descotea
-descotes
-desdemon
-desgrose
-desharna
-desi
-design
-desilets
-desimone
-desirae
-desire
-desiree
-desiri
-desjardi
-desjarla
-deska
-deslande
-deslauri
-desmarai
-desmond
-desmund
-desoer
-desorbay
-desourdy
-despain
-despault
-despinic
-desplanq
-despres
-desroche
-desrosie
-dessain
-desser
-destech
-destefan
-destry
-detjens
-detlef
-detleff
-detlev
-detloff
-detra
-deugau
-deugo
-deutschm
-dev
-deva
-devadas
-devan
-devarenn
-devault
-deveau
-devel
-developm
-deven
-devenny
-devenyi
-devenyns
-devera
-devere
-devette
-devgon
-devi
-devices
-devin
-devina
-devincen
-devine
-devinne
-devland
-devlen
-devlin
-devon
-devondra
-devonna
-devonne
-devora
-devore
-devouges
-devreeze
-devy
-dew
-dewain
-dewart
-dewayne
-dewey
-dewi
-dewie
-dewit
-dewitt
-dewitte
-dex
-dexiang
-dexter
-deying
-deyirmen
-deyoung
-dezbah
-dezoete
-dg
-dhaliwal
-dhansukh
-dhanvind
-dhar
-dharam
-dharmara
-dharmawa
-dhaussy
-dhawal
-dheeraj
-dhillon
-dhinakar
-dhir
-dhiraj
-dhiren
-dhuga
-dhupar
-di
-di cosol
-di giamb
-di maso
-di millo
-di ninno
-dia-edin
-diaconu
-diahann
-dialout
-diamond
-dian
-diana
-diandra
-diane
-diane-ma
-dianemar
-diann
-dianna
-dianne
-diannne
-diarmid
-dias
-diaz
-dibenede
-dibler
-dicaprio
-dick
-dickard
-dickens
-dickerma
-dickerso
-dickeson
-dickford
-dickie
-dickinso
-dicks
-dicksie
-dickson
-dicky
-didani
-didar
-didi
-didier
-didio-du
-dido
-diduch
-didylows
-diec
-diederic
-diederik
-diedrich
-diee
-diego
-diekman
-diemel
-dien
-diena
-diener
-diep
-diepling
-dierdre
-diersch
-diesing
-dieter
-dietra
-dietrich
-dieu
-dieuwert
-difalco
-diffee
-diffie
-difilipp
-difrance
-digby
-digenova
-digiacom
-digilio
-dignam
-dijaili
-dijian
-diju
-dikaitis
-dikens
-dilallo
-dilan
-dilen
-dilip
-dilkie
-dill
-dillabou
-dillard
-dilley
-dillie
-dillingh
-dillon
-dillow
-dilly
-diloreto
-dilpreet
-dima
-dimarco
-dimarzo
-dimas
-dimetry
-dimillo
-dimitra
-dimitri
-dimitrio
-dimitry
-dimoueri
-dina
-dinaband
-dinah
-dinalic
-dincamps
-dineke
-dinesh
-dinges
-dingle
-dingley
-dingman
-dinh
-dinhtran
-dinkel
-dinker
-dinnervi
-dinneyla
-dinnie
-dinnin
-dinny
-dino
-dinsmore
-dinur
-diogo
-dion
-dione
-dionis
-dionisio
-dionne
-dionysia
-dionysiu
-dionysus
-dipace
-dipak
-dipasqua
-diperna
-dipierro
-dipietro
-dipper
-dirac
-diradmin
-dirbm
-dirck
-diretto
-dirienzo
-dirilten
-dirk
-dis
-disalvo
-discenza
-discours
-discover
-disessa
-disher
-dishong
-disisto
-disney
-dispatch
-dissinge
-distribu
-dita
-ditecco
-ditko
-dittburn
-divyesh
-dix
-dixie
-dixon
-djavaher
-djenana
-djordje
-djuan
-dmaac
-dmitri
-dms
-dmsdb
-dmsrtime
-dmuchals
-dnadoc
-dniren
-dnsproj
-do
-doak
-doan
-dobbing
-dobbins
-dobbs
-dobby
-doble
-dobransk
-dobrosla
-dobry
-doc
-docherty
-dockendo
-doctorjo
-document
-doczy
-doda
-dodd
-dodds
-dode
-dodgson
-dodi
-dodie
-dodier
-dodman
-dodson
-dody
-doe
-doemer
-doerfel
-doerksen
-doernber
-doerr
-doggett
-dohan
-doherty
-doi
-doig
-doing
-dokken
-dokuzogu
-dolan
-dolezal
-dolf
-dolginof
-dolgov
-doliska
-doll
-dolley
-dolli
-dollie
-dolly
-dolores
-dolorita
-dolph
-dolson
-dom
-domains
-domanico
-domas
-dombrosk
-domenic
-domenick
-domenico
-domeniga
-dominado
-domine
-dominga
-domingo
-domingue
-domini
-dominic
-dominica
-dominick
-dominik
-dominiqu
-dommety
-don
-dona
-donaghue
-donahee
-donahue
-donak
-donal
-donald
-donaldso
-donall
-donalt
-donator
-donaugh
-donavon
-doncaste
-doncell
-donegan
-donelan
-donella
-donelle
-donetta
-dong
-dong-ik
-dong-moo
-dong-pyo
-dongik
-dongmoon
-dongpyo
-donia
-donica
-donielle
-donis
-donita
-donkers
-donleyco
-donlon
-donn
-donna
-donnajea
-donnamar
-donne
-donnell
-donnelly
-donner
-donnette
-donni
-donnice
-donnie
-donny
-donoghue
-donohoe
-donohue
-donovan
-dood
-doodeman
-dooley
-doolin
-doolittl
-door
-doortje
-dora
-doraine
-dorais
-doraiswa
-doralia
-doralie
-doralin
-doralyn
-doralynn
-doran
-doray
-dordari
-dorden
-dore
-doreen
-dorelia
-dorella
-dorelle
-dorena
-dorene
-doretta
-dorette
-dorey
-dori
-doria
-dorian
-dorianne
-dorice
-dorie
-dorin
-dorine
-dorion
-dorion-m
-doriot
-doris
-doris-ha
-dorisa
-dorise
-dorit
-dorita
-dormer
-dorn
-dornback
-doro
-dorolice
-dorolisa
-dorotea
-doroteya
-dorothea
-dorothee
-dorothy
-dorotich
-dorr
-dorra
-dorree
-dorreen
-dorrell
-dorri
-dorrie
-dorris
-dorronso
-dorry
-dorsey
-dorthea
-dorthy
-dorval
-dory
-dosanjh
-dosenbac
-doshi
-dosi
-doskas
-dosref
-doss
-dost
-dot
-dotan
-doti
-dotsey
-dotson
-dotti
-dottie
-dottin
-dotty
-doublesi
-doucet
-doucette
-doud
-douet
-doug
-dougall
-doughert
-doughty
-dougie
-douglas
-douglass
-dougy
-dourley
-douville
-dov
-dovel
-dover
-dovydait
-dow
-dowd
-dowding
-dowdy
-dowell
-dower
-dowjones
-dowker
-dowling
-downer
-downes
-downey
-downing
-downs
-dowse
-dowser
-doy
-doyle
-doyon
-dpierre
-dpn
-dpnbuild
-dpnis
-dpnlab
-dpnq&a
-dpp
-dpu
-dr.jones
-dr.seuss
-drabek
-drachman
-draco
-dracula
-draffin
-dragan
-dragana
-dragert
-dragnea
-drago
-draier
-drakage
-drake
-drako
-drane
-dransfie
-draper
-drappel
-draves
-dray
-drayton
-dre
-dreddy
-dredi
-dreisbac
-drenan
-drennan
-drescher
-dresel
-dresser
-dressler
-drew
-drewes
-drexel
-dreyfus
-dreyfuss
-driedger
-drieka
-drinnan
-driscoll
-drissel
-driver
-drjones
-drobnik
-drolet
-dromgool
-drona
-drop-box
-dropin
-droste
-drouin
-drseuss
-dru
-drubld
-druci
-drucie
-drucill
-drucy
-drud
-drudy
-drugi
-drugs
-drumhell
-drumm
-drummer
-drummond
-drusi
-drusie
-drusilla
-drusy
-druzeta
-drwiega
-dryer
-dryfoos
-drynan
-du berge
-du-tuan
-duan
-duane
-dube
-dubeau
-dubee
-dubey
-dubman
-dubois
-dubose
-dubreck
-dubreuil
-dubroff
-dubroy
-dubuc
-duc
-duchaine
-ducharme
-duchesne
-ducic
-dud
-duda
-dudas
-dude
-dudgeon
-dudley
-dueck
-duenas
-duensing
-dueppen
-duer
-duff
-duffie
-duffin
-duffney
-dufford
-duffy
-dufloth
-dufour
-dufresne
-dugal
-dugald
-dugar
-dugas
-duggan
-duguay
-duisman
-duke
-dukes
-dukey
-dukie
-duky
-dula
-dulaney
-dulce
-dulcea
-dulci
-dulcia
-dulciana
-dulcie
-dulcine
-dulcinea
-dulcy
-dulin
-duljit
-dulmage
-dulsea
-dulude
-dumais
-dumas
-dummer
-dumont
-dumouche
-dumps
-dun
-dunajski
-dunbar
-dunc
-duncan
-duncan-s
-dundin
-dunfield
-dung
-dungan
-dunham
-dunik
-dunkelma
-dunker
-dunlap
-dunlay
-dunlop
-dunmore
-dunn
-dunne
-dunnett
-dunning
-dunningh
-dunnion
-dunphy
-dunsmore
-dunson
-dunstan
-duong
-dupaul
-duplacey
-duplan
-dupont
-dupras
-dupre
-dupree
-dupuis
-dupuis-m
-dupuy
-duquette
-dur
-durali
-duran
-durand
-durant
-durantay
-durante
-durham
-durie
-durling
-durnford
-durose
-durousse
-durovic
-durrell
-dursse
-durward
-duryonna
-dusan
-dusko
-dusomos
-duster
-dusty
-dutch
-dutcher
-duthie
-dutil
-dutt
-dutta
-duvarci
-duxbury
-duy
-duyck
-dvm
-dvs
-dwain
-dwaine
-dwayne
-dwight
-dwyer
-dyan
-dyana
-dyane
-dyann
-dyanna
-dyanne
-dyba
-dybenko
-dyck
-dyckman
-dyess
-dyke
-dylan
-dyment
-dyna
-dynah
-dynie
-dyrdahl
-dysart
-dyson
-dziamba
-dziawa
-dziemian
-dzioba
-dzulkarn
-dzung
-eachelle
-eada
-eades
-eadie
-eadith
-eadmund
-eagle
-eagles
-eakes
-eakins
-eal
-ealasaid
-eales
-eamon
-eamonn
-eansor
-earl
-earle
-earlene
-earles
-earley
-earlie
-earline
-early
-earnest
-earnhard
-earnie
-earps
-eartha
-earvin
-easaw
-eason
-easson
-easter
-easterli
-eastick
-eastland
-eastman
-easton
-eastreg
-eastus
-eastwood
-eaton
-eaves
-eb
-eba
-ebara
-ebata
-ebba
-ebbingha
-eben
-ebeneser
-ebenezer
-eberhard
-eberle
-eberlin
-ebert
-eberto
-ebonee
-ebony
-ebrahim
-eby
-echols
-eckardt
-ecker
-eckert
-eckhart
-eckler
-ecklund
-eckstein
-ecocafe
-econ
-ecroyd
-ed
-eda
-edan
-edd
-eddi
-eddie
-eddins
-eddisfor
-eddy
-ede
-edee
-edel
-edeline
-edelman
-eden
-eder
-edey
-edgar
-edgard
-edgardo
-edgette
-edgreen
-edi
-edie
-edif
-edik
-edin
-edison
-edistix
-edita
-edith
-editha
-edithe
-ediva
-edkins
-edlene
-edlin
-edmison
-edmon
-edmond
-edmonds
-edmondso
-edmonton
-edmund
-edmundo
-edmunds
-edmx
-edmxtest
-edna
-edouard
-edric
-edsel
-eduard
-eduardo
-educatio
-eduino
-edvard
-edward
-edwards
-edwige
-edwin
-edwina
-edwins
-edy
-edyta
-edyth
-edythe
-efdal
-effie
-efland
-efrain
-efrem
-efren
-efron
-efstrati
-efthim
-efthimio
-eftychio
-egan
-egashira
-egbert
-egdorf
-egerman
-eggebraa
-eggers
-eggersgl
-eggleton
-egional
-egli
-egne
-egner
-egon
-egor
-ehab
-ehi
-ehlers
-ehninger
-ehrenfri
-ehrenhol
-ehrlich
-ehrlichm
-eicher
-eide
-eierstoc
-eiji
-eike
-eiki
-eiko
-eileen
-eilis
-eimer
-eimile
-einarsso
-einersen
-einstein
-einwohne
-eirena
-eirik
-eisele
-eisen
-eisenach
-eisenber
-eisenhar
-eisler
-eisner
-eisnor
-eiswirth
-eitner
-ekaterin
-ekiert
-el
-el-am
-el-gueba
-el-hawar
-el-torky
-eladio
-elaina
-elaine
-elam
-elana
-elane
-elayne
-elbert
-elberta
-elbertin
-elbeze
-elbi
-elchakie
-elda
-elden
-eldin
-eldon
-eldoris
-eldredge
-eldreth
-eldridge
-eleanor
-eleanora
-eleanore
-elec
-electra
-electric
-electron
-eleen
-elefteri
-elefther
-elena
-elene
-eleni
-elenore
-eleonora
-eleonore
-elery
-eleta
-elex
-eley
-elfie
-elfreda
-elfredia
-elfrida
-elfrieda
-elga
-elgar
-elgie
-elgin
-elhage
-elhamahm
-elhamy
-eli
-elia
-elianora
-elianore
-elias
-elicia
-elie
-eliezer
-elihu
-elijah
-elin
-eline
-elinor
-elinore
-elio
-eliot
-elisa
-elisabet
-elise
-eliseo
-elisha
-elissa
-elita
-eliud
-eliza
-elizabet
-elizalde
-elka
-elkaim
-elke
-elkhayat
-elkind
-elkingto
-elkins
-elks
-ella
-ellacott
-elladine
-ellary
-elle
-elledge
-elleke
-ellement
-ellen
-ellene
-ellens
-eller
-ellerey
-ellerman
-ellery
-ellette
-elli
-ellie
-ellinger
-ellingto
-elliot
-elliott
-ellis
-ellison
-ellissa
-ello
-ellryne
-ellswert
-ellswort
-ellul
-ellwood
-elly
-ellyn
-ellynn
-elmar
-elmer
-elmira
-elmo
-elmore
-elms
-elna
-elnar
-elnora
-elnore
-eloisa
-eloise
-elonore
-elora
-elpida
-elroy
-els
-elsa
-elsbeth
-else
-elset
-elsey
-elsi
-elsie
-elsing
-elsinore
-elson
-elspeth
-elston
-elsworth
-elsy
-elting
-elton
-eluned
-elva
-elvera
-elvert
-elvin
-elvina
-elvira
-elvis
-elvyn
-elwin
-elwira
-elwood
-elwyn
-ely
-elyn
-elyse
-elysee
-elysha
-elysia
-elyssa
-elza
-elzbieta
-elzer
-em
-ema
-emad
-emalee
-emalia
-emami
-emanatia
-emanuel
-emanuele
-emdin-sp
-emelda
-emelen
-emelia
-emelina
-emeline
-emelita
-emelyne
-emer
-emera
-emerick
-emerson
-emery
-emesh
-emhart
-emig
-emil
-emilda
-emile
-emilee
-emili
-emilia
-emilie
-emilien
-emiline
-emilio
-emilios
-emily
-emlen
-emlyn
-emlynn
-emlynne
-emma
-emmalee
-emmaline
-emmalyn
-emmalynn
-emmanuel
-emmeline
-emmell
-emmerich
-emmersto
-emmert
-emmery
-emmet
-emmett
-emmey
-emmi
-emmie
-emmit
-emmons
-emmott
-emmy
-emmye
-emogene
-emond
-emory
-emowilli
-emp
-empdb
-employee
-emr
-emran
-emrick
-emro
-emyle
-emylee
-emysta
-encomend
-endang
-ende
-endenbur
-enderle
-enders
-enderton
-endicott
-endless
-endot
-endrys
-endsley
-enet
-eng
-eng-sion
-engbert
-engel
-engelber
-engelbre
-engelhar
-engin
-engineer
-england
-englande
-engle
-engleber
-englebri
-engleman
-englert
-english
-engman
-engr
-engracia
-engsiong
-engtv
-enid
-enis
-ennis
-enno
-enns
-enoch
-enos
-enrica
-enrichet
-enrico
-enrika
-enrique
-enriquet
-ensign
-ensing
-ensminge
-ensor
-enstone
-entwistl
-enver
-environm
-envoy
-enzo
-eoin
-eolanda
-eolande
-eow
-eperjesy
-ephraim
-ephrayim
-ephrem
-eppensti
-epperson
-eppich
-epplett
-epps
-eprom
-epstein
-epting
-eran
-erasmus
-erastus
-erbach
-erbilgin
-erda
-erdem
-erdinc
-erek
-erena
-erfani
-ergle
-erguven
-erh-huan
-erhard
-erhart
-erhhuan
-eric
-erica
-erich
-ericha
-erichsen
-erick
-ericka
-erickson
-erics
-ericsson
-erie
-erik
-erika
-eriks
-eriksson
-erin
-erina
-erine
-erinn
-erinna
-erkan
-erkel
-erl
-erland
-erle
-erlene
-erler
-erling
-erma
-ermanno
-ermarkar
-ermengar
-ermentru
-ermey
-ermin
-ermina
-erminia
-erminie
-ermo
-erna
-ernaline
-ernest
-ernesta
-ernestin
-ernesto
-ernestus
-ernie
-erning
-ernst
-erny
-eroler
-eros
-errchend
-errick
-errol
-erroll
-ersch
-ersil
-erskine
-ertan
-ertha
-ertl
-erv
-ervi
-ervin
-erwei
-erwin
-erwing
-eryn
-erzsebet
-es
-esam
-esc
-esch
-eschen
-escher
-escherma
-escobedo
-escobido
-escutin
-esdras
-esgate
-esguerra
-eshelman
-eshghi
-esi
-esite
-eskew
-eskiciog
-eskildse
-esko
-eslambol
-esler
-esliger
-esma
-esmail
-esmaili
-esmaria
-esme
-esmerald
-esmond
-esparza
-espenson
-espinosa
-espinoza
-esposito
-espuna
-esra
-esry
-essa
-essam
-esselbac
-esser
-essery
-essie
-essig
-esson
-essy
-esta
-estabroo
-este
-esteban
-estegham
-estel
-estele
-estell
-estella
-estelle
-estep
-ester
-estes
-estevam
-estevan
-estey
-esther
-estrella
-estrelli
-estridge
-eswara
-etan
-etas
-etchieso
-etemad
-eteminan
-ethan
-ethe
-ethel
-ethelber
-ethelda
-ethelin
-ethelind
-etheline
-ethelred
-ethelyn
-ethier
-ethingto
-ethnolog
-ethyl
-etienne
-etoh
-etta
-etten
-etti
-ettie
-ettore
-ettridge
-ettson
-etty
-etu
-etzell
-eu
-eubanks
-euclid
-eudora
-euell
-eugen
-eugene
-eugenia
-eugenie
-eugenio
-eugenius
-eugine
-eula
-eulalie
-euler
-eunchae
-eung
-euni
-eunice
-eunji
-euphemia
-eustace
-eustacia
-eustis
-euy-soo
-euysoo
-euysung
-ev
-eva
-evaleen
-evalyn
-evan
-evandro
-evangeli
-evangelo
-evania
-evanne
-evans
-evanston
-eve
-eveleen
-eveleigh
-evelien
-evelin
-evelina
-eveline
-evely
-evelyn
-evelyne
-even
-evenson
-events
-everard
-evered
-everett
-everette
-everitt
-evers
-evert
-evette
-evey
-evia
-evie
-evin
-evita
-evon
-evona
-evonne
-evraire
-evren
-evvie
-evvy
-evy
-evyn
-ewald
-ewan
-ewanchyn
-eward
-ewart
-ewasyshy
-ewell
-ewen
-ewing
-exner
-ext
-eyde
-eydie
-eyers
-eyk
-ezechiel
-ezekiel
-ezella
-ezequiel
-eziechie
-ezmerald
-ezra
-ezri
-ezzat
-fab
-fabe
-fabella
-faber
-fabian
-fabiano
-fabien
-fabienne
-fabijani
-fabio
-fabris
-fabrizio
-fabry
-facchett
-facility
-fadel
-fadhel
-fadi
-fadj
-fadlalla
-fady
-fadzilah
-fae
-faez
-fafa
-fafara
-fagan
-fagg
-fagin
-fahey
-fahim
-fahrenth
-fahy
-fai
-faina
-fainaru
-fainecos
-faiq
-fair
-fairclou
-fairfax
-fairfiel
-fairleig
-fairless
-fairlie
-fairman
-fairy
-faisal
-faison
-fait
-faith
-faiz
-faizal
-fajardo
-falaki
-falardea
-falbee
-falcao
-falconer
-faletti
-faley
-falicov
-falito
-falke
-falkenst
-falkner
-fallah
-fallahi
-falletti
-fallis
-fallon
-fallows
-falquero
-falt
-faltens
-fambroug
-familiad
-famke
-fan
-fanchett
-fanchi
-fanchon
-fancie
-fancy
-fanechka
-fang
-fangio
-fani
-fania
-fann
-fanner
-fanni
-fannie
-fanny
-fansher
-fantauzz
-fanthome
-fanty
-fanus
-fanya
-faou
-far
-fara
-faraday
-farag
-farago
-farah
-farahvas
-faramarz
-farand
-farant
-fares
-fargis
-fargo
-farhad
-farhan
-farhang
-farhat
-farias
-fariba
-fariborz
-farica
-farid
-faris
-farlay
-farlee
-farleigh
-farley
-farlie
-farly
-farmer
-farn
-farnham
-farnjeng
-farnswor
-farnum
-farokh
-farooa
-farooq
-farouk
-farquhar
-farr
-farra
-farrah
-farrand
-farranto
-farrel
-farrell
-farren
-farringt
-farris
-farrokh
-farronat
-farrow
-farrukh
-farshid
-faruk
-faruque
-farzad
-farzin
-fasken
-fast
-fastfeat
-fastmer
-fastone
-fastowl
-fastpack
-fataneh
-fater
-fatholla
-fatica
-fatima
-fattarus
-fattouh
-faubert
-faucette
-faucher
-faulhabe
-faulkner
-faun
-faunie
-faust
-faustina
-faustine
-fausto
-faustus
-favell
-favreau
-favrot
-fawaz
-fawcett
-fawn
-fawne
-fawnia
-fax
-fay
-fayanne
-faydra
-faye
-fayette
-fayez
-fayina
-fayma
-fayre
-fayth
-faythe
-faz
-fazel
-fearless
-featherm
-feddeman
-fedderse
-feder
-federica
-federico
-federiko
-fedora
-fedoruk
-fedyk
-fee
-feeley
-feeney
-fehr
-fei
-fei-wen
-fei-yin
-feil
-feild
-feisal
-feist
-feitel
-feith
-feiwen
-fekade
-fekri
-felczak
-feld
-feldberg
-felder
-feldman
-felecia
-felfli
-felic
-felicdad
-felice
-felicett
-felicia
-felicio
-felicity
-felicle
-felike
-feliks
-felipa
-felipe
-felisha
-felita
-felix
-feliza
-felizio
-felli
-fellman
-felske
-feltman
-felton
-femke
-fenati
-fender
-fenelia
-fenez
-feng
-fenlason
-fenn
-fennell
-fenner
-fennesse
-fenton
-fenwick
-feodor
-feodora
-fequiere
-ferba
-ferd
-ferdie
-ferdinan
-ferdy
-feregyha
-fereidoo
-ferelith
-ferenc
-ference
-ferenz
-fererro
-fergus
-ferguson
-fergusso
-feridoun
-ferland
-fermat
-fermi
-fermoyle
-fern
-fernald
-fernan
-fernand
-fernanda
-fernande
-fernandi
-fernando
-ferne
-ferner
-ferrao
-ferrara
-ferraro
-ferree
-ferreira
-ferrel
-ferrell
-ferrer
-ferrero
-ferriera
-ferrin
-ferris
-ferriss
-ferro
-ferruzzi
-ferstl
-fetterma
-fetting
-fetzko
-feutlins
-fevre-re
-fey
-feyen
-feynman
-fi-john
-fiann
-fianna
-fiaz
-ficco
-ficici
-ficken
-ficker
-fickes
-fidel
-fidela
-fidelia
-fidelio
-fidelity
-fidole
-fiegel
-fieke
-field
-fielden
-fielding
-fields
-fieldsup
-fierthal
-fiest
-fifi
-fifield
-fifine
-figura
-fijohn
-fikis
-fikre
-fil
-filbert
-filberte
-filberto
-fildey
-filer
-files
-files ar
-filia
-filibert
-filide
-filion
-filip
-filippa
-filippi
-filippo
-filis
-filkins
-fillmore
-filmer
-filmore
-filpus
-filson
-fima
-fin
-fina
-finak
-finance
-finane
-finckler
-findlay
-findley
-finkhels
-finlay
-finlayso
-finley
-finn
-finnegan
-finnerty
-finney
-finnie
-finnigha
-finnon
-fintan
-finucane
-finzel
-fiona
-fionan
-fionna
-fionnula
-fiore
-fiorenze
-fiorile
-firas
-firat
-firdaus
-firerobi
-firment
-firtos
-fischer
-fischett
-fischler
-fiset
-fisette
-fishenco
-fisher
-fishkin
-fishman
-fisico
-fisopn
-fisprod
-fiszman
-fitch
-fiteny
-fitness
-fitz
-fitzgera
-fitzgibb
-fitzpatr
-fitzroy
-fitzsimm
-fixsen
-flach
-flagg
-flaherty
-flanagan
-flanders
-flann
-flanner
-flansbur
-flatley
-fleet
-fleig
-fleische
-fleishma
-flem
-fleming
-flemming
-fleskes
-fletch
-fletcher
-fleuchau
-fleugel
-fleur
-fleurett
-fleurima
-fleury
-flewelli
-flexo
-flicking
-flin
-flindall
-flinn
-flint
-flintall
-flo
-floch
-flook
-flookes
-flor
-flora
-florance
-florante
-flore
-florella
-florence
-florenci
-florenti
-florenza
-flores
-florescu
-florette
-florez
-flori
-floria
-florian
-florida
-florie
-florina
-florinda
-florine
-floris
-florjanc
-florri
-florrie
-florry
-flory
-flossi
-flossie
-flossy
-flounder
-flowers
-floyd
-floysvik
-flss
-fludgate
-flueckin
-fluet
-fluney
-flury
-fluty
-flying
-flynn
-foad
-fobert
-focht
-focsanea
-focus
-fodell
-foderaro
-foeppel
-foessl
-foest
-fogelson
-foght
-fogle
-fogleman
-fok
-folashad
-foldes
-foley
-follett
-follick
-follmer
-folwell
-fon
-fondacar
-fong
-fonnie
-fons
-fonsie
-fontaine
-fontana
-fontanil
-fontanin
-fony
-fonz
-fonzie
-foods
-foong
-foos
-forbes
-forbrich
-forbs
-ford
-forden
-fordham
-forecast
-foreman
-forese
-forest
-forester
-forgeron
-forghani
-forgues
-forland
-formagie
-forno
-forouhar
-forrest
-forreste
-forrette
-forslund
-forst
-forster
-forsythe
-fortes
-fortier
-fortman
-fortner
-foss
-foster
-fothergi
-fotini
-fouad
-foubert
-foucault
-fouchard
-fougere
-fouillar
-fouke
-fouletie
-foulkes
-four
-fouret
-fourier
-fourkas
-fournel
-fourney
-fournier
-fouts
-fowler
-fowler-h
-fowles
-fowlkes
-fowlston
-fox
-foxworth
-fpsched
-fqa
-fraanky
-fradette
-fragnito
-fraley
-fralick
-fralix
-frampton
-fran
-franc
-france
-francene
-frances
-francesc
-francese
-franchot
-francic
-francine
-francis
-francisc
-francisk
-francisp
-franckli
-franckly
-francky
-franco
-francoeu
-francois
-francyne
-frangoul
-franics
-frank
-franka
-frankcom
-frankenb
-franki
-frankie
-frankle
-franklin
-franklyn
-frankos
-franks
-franky
-franni
-frannie
-franny
-frans
-fransis
-fransisc
-frantise
-frants
-frantz
-franz
-franza
-franze
-franzen
-franzky
-franzwa
-frape
-frasco
-fraser
-frasier
-frasquit
-fraties
-frayda
-fraze
-frazer
-frazier
-fred
-freda
-freddi
-freddie
-freddy
-fredek
-fredelia
-fredenbu
-frederic
-frederig
-frederik
-frederiq
-fredette
-fredi
-fredia
-fredimos
-fredine
-fredra
-fredric
-fredrick
-fredrika
-fredriks
-free
-freeburn
-freedman
-freek
-freeland
-freeley
-freeman
-freemand
-freemon
-freeth
-freiberg
-freida
-freimark
-freire
-freiwald
-freixe
-freksa
-fremont
-french
-frendo
-frenette
-freno
-fretz
-freud
-frey
-freya
-freyermu
-freyler
-frezzo
-fricker
-fricks
-fridel
-frie
-frieda
-friedber
-frieder
-friederi
-friedl
-friedlan
-friedman
-friedric
-frierson
-friesen
-frinel
-frink
-frisa
-frischkn
-frischli
-frisk
-friton
-fritz
-fritzie
-frizado
-frobel
-froberg
-frobishe
-frodsham
-froehlic
-froncek
-frondozo
-fronsee_
-fross
-frosst
-froud
-froukje
-frucci
-fruehauf
-frumerie
-fruscia
-fryar
-frydach
-frydman
-fryer
-fscocos
-fssup
-ftpsites
-fu
-fu-sheng
-fu-shin
-fu-zong
-fuchs
-fucito
-fugen
-fujii
-fujimaki
-fujimoto
-fujiwara
-fukui
-fukumoto
-fukunaga
-fulford
-fulk
-fulkerso
-fullager
-fuller
-fullmer
-fullum
-fulmer
-fulton
-fulvia
-fumerton
-fumio
-funamoto
-funderbu
-fung
-funston
-fuping
-fuqua
-furdoonj
-furgerso
-furlin
-furlow
-furmania
-furnas
-furrukh
-furst
-furuta
-fusca
-fusheng
-fuson
-fussell
-fuzal
-fuzong
-fwp
-fwpas
-fwpco
-fwpreg
-fwptools
-fyfe
-fysh
-fyske
-gaal
-gabato
-gabbai
-gabbard
-gabbey
-gabbi
-gabbie
-gabby
-gabe
-gabey
-gabi
-gabie
-gaboury
-gabriel
-gabriela
-gabriele
-gabriell
-gabrila
-gaby
-gach
-gaconnie
-gadbois
-gadher
-gadouchi
-gadsby
-gadzinow
-gae
-gaebel
-gael
-gaelan
-gaertner
-gaetan
-gaetanin
-gaetano
-gaffney
-gafford
-gaftea
-gagan
-gage
-gagne
-gagnier
-gagnon
-gahan
-gahir
-gahlot
-gahn
-gahr
-gahunia
-gaiarsa
-gaiger
-gail
-gaile
-gailya
-gaime
-gainer
-gaines
-gaiotti
-gaiser
-gaitan
-gaither
-gajendra
-gajewski
-gajowiak
-gal
-galanaki
-galasso
-galbrait
-galdwin
-gale
-gale
-galen
-galewski
-galina
-galipeau
-gallaghe
-gallais
-gallard
-gallegos
-gallenbe
-galligan
-gallinge
-gallion
-gallman
-gallo
-gallops
-gallouzi
-galloway
-galluzzi
-galois
-galt
-galvan
-galven
-galvez
-galvin
-gama
-gamal
-gamaleld
-gamaliel
-gamarnik
-gambrell
-gamelin
-gammage
-gamsa
-gan
-ganadry
-ganapath
-gandhi
-gane
-ganesan
-ganesh
-ganeshku
-gangnes
-gangotra
-ganguly
-gani
-gann
-ganness
-gannett
-gannie
-gannon
-gannot
-ganny
-gans
-gant
-gantt
-gapp
-gar
-gara
-garald
-garamvol
-garan
-garand
-garay
-garbis
-garbish
-garcia
-garcia-l
-garcia-m
-gard
-gardener
-gardie
-gardiner
-gardner
-gardy
-gare
-garee
-gareis
-garek
-gareth
-garey
-garfield
-garg
-garguilo
-gargul
-gargulak
-garik
-garinger
-garito
-garland
-garmon
-garneau
-garner
-garnet
-garnett
-garnette
-garney
-garo
-garold
-garp
-garrard
-garrek
-garret
-garreth
-garrett
-garrick
-garrik
-garrot
-garrott
-garry
-garth
-gartley
-gartshor
-garv
-garvey
-garvin
-garvy
-garwin
-garwood
-gary
-gascho
-gascon
-gasikows
-gaskins
-gaspar
-gaspard
-gasparo
-gasparot
-gasper
-gass
-gast
-gaston
-gasul
-gateau
-gateley
-gater
-gates
-gateway
-gatka
-gattrell
-gau-rong
-gaube
-gaudet
-gaudet-m
-gaudon
-gaudreau
-gaughan
-gaul
-gaulle
-gault
-gaultier
-gaunsezl
-gaurong
-gause
-gauss
-gautam
-gauthier
-gav
-gavan
-gaven
-gavens
-gavidia
-gavilluc
-gavin
-gavra
-gavriel
-gavriell
-gawain
-gawargy
-gawdan
-gawen
-gawronsk
-gawtrey
-gay
-gaye
-gayel
-gayelord
-gayl
-gayla
-gayle
-gayleen
-gaylene
-gayler
-gaylor
-gaylord
-gayman
-gaynor
-gayronza
-gazala
-gazier
-gazo
-gdowik
-ge
-geadah
-gean
-gearalt
-gearard
-geary
-gebhardt
-gebhart
-gebrael
-gedas
-geddes
-gedeon
-gedman
-gedra
-gedye
-gee
-gee-meng
-geer
-geert
-geesman
-geeta
-geetha
-geety
-gehm
-gehr
-gehring
-geiger
-geir
-geisler
-geksong
-gelais
-geldrez
-gelinas
-gell
-geller
-gelling
-gelo
-gelya
-gemmill
-gen
-gena
-genae
-gendre
-gendron
-gene
-geneau
-general
-generalc
-generato
-genet
-geneva
-geneviev
-genevra
-genga
-genge
-genia
-genie
-genna
-gennaro
-genni
-gennie
-gennifer
-genny
-geno
-genova
-genovera
-genovise
-genowefa
-gentes
-gentzler
-genvieve
-geoff
-geoffrey
-geoffrio
-geoffry
-georas
-geordie
-georg
-georgann
-george
-georgean
-georgena
-georges
-georgesc
-georgeta
-georgett
-georghio
-georgi
-georgia
-georgian
-georgie
-georgina
-georgine
-georgio
-georgiou
-georgy
-ger
-gera
-gerald
-geralda
-geraldin
-geralene
-gerard
-gerardja
-gerardo
-gerassim
-gerbec
-gerben
-gerber
-gerda
-gerek
-gerenser
-gergen
-gerhard
-gerhardi
-gerhardt
-gerhart
-geri
-gerianna
-gerianne
-gerick
-gerik
-gerladin
-gerlich
-gerlinsk
-gerlt
-germ
-germain
-germaine
-germana
-germano
-germayne
-germe
-gernot
-gerome
-gerrard
-gerri
-gerrie
-gerrilee
-gerrit
-gerritse
-gerry
-gershwin
-gerstmar
-gert
-gerta
-gerth
-gerti
-gertie
-gertridg
-gertrud
-gertruda
-gertrude
-gertrudi
-gerty
-gervais
-gervaise
-gery
-gerynowi
-gesine
-gesino
-gessford
-getchell
-getoor
-gettys
-geuder
-gewell
-geyer
-geza
-ghadisha
-ghaemi
-ghaemian
-ghaffari
-ghandi
-ghanem
-ghangurd
-ghani
-ghantous
-ghartey
-ghasemia
-ghassan
-ghassem
-ghatta
-ghazi
-gheciu
-ghelardu
-gheorghe
-gherardo
-ghidali
-ghislain
-ghobad
-gholamre
-ghorashy
-ghosh
-ghossein
-ghulam
-ghulati
-gia
-giacinta
-giacobo
-giacomo
-giacopo
-giallo
-giamatte
-giambatt
-giambera
-giampaol
-gian
-giana
-giandome
-giang
-giani
-gianina
-gianna
-gianni
-giao
-giap
-giarritt
-giavani
-gib
-gibb
-gibbie
-gibbins
-gibbons
-gibbs
-gibby
-gibeault
-giblin
-gibson
-gidaro
-gideon
-gidget
-gie-ming
-giekes
-gieming
-gierka
-giertych
-giesbrec
-gieschen
-giese
-giff
-giffard
-giffer
-giffie
-gifford
-giffy
-giggey
-gigi
-giguere
-gigus
-gihan
-gihyun
-gil
-gilbert
-gilberta
-gilberte
-gilberti
-gilberto
-gilberts
-gilburt
-gilchris
-gilda
-gilemett
-giles
-giliham
-gill
-gillan
-gillard
-gille
-gillelan
-gilles
-gillespi
-gillespy
-gillet
-gillette
-gilli
-gilliam
-gillian
-gilliard
-gillie
-gillies
-gillig
-gilligan
-gillilan
-gillis
-gillon
-gillot
-gillstro
-gilly
-gilmore
-gilmour
-gilstorf
-gimon
-gin
-gina
-ginelle
-ginest
-ginette
-ginetto
-ginevra
-ginger
-gingeric
-gingold
-gingras
-gingrich
-gini
-ginn
-ginni
-ginnie
-ginnifer
-ginny
-gino
-ginsberg
-gint
-gintaras
-ginzburg
-gio
-gioffre
-gionet
-giordano
-giorgi
-giorgia
-giorgio
-giorgos
-giotis
-giovanna
-giovanni
-giovinaz
-gipsy
-giralda
-giraldo
-girard
-giraud
-girgis
-giri
-giridhar
-girish
-girotti
-girouard
-giroux
-girvan
-gisbert
-gisela
-giselber
-gisele
-gisella
-giselle
-gita
-gittins
-giuditta
-giuhat
-giulia
-giuliani
-giuliett
-giulio
-giuntini
-giuseppe
-giustina
-giustino
-giusto
-gize
-gizela
-glad
-gladi
-gladstei
-gladys
-glancey
-glanfiel
-glaros
-glasa
-glaser
-glasgow
-glass
-glasser
-glast
-glaszcza
-glazer
-gleason
-gleda
-gleditsc
-glembosk
-glen
-glenda
-glenden
-glendon
-glenine
-glenn
-glenna
-glennie
-glennis
-glew
-glickman
-glidewel
-glinka
-glinski
-glofches
-glori
-gloria
-gloriana
-gloriane
-glornia
-glory
-glover
-glowa
-glucksma
-glymph
-glyn
-glynda
-glynis
-glynn
-glynnis
-gnaeding
-gnni
-go
-goangshi
-goatcher
-goba
-gobeil
-gobeli
-goble
-gockel
-godard
-godart
-godcharl
-goddard
-goddart
-godden
-goddette
-godfree
-godfrey
-godfry
-godin
-godina
-godish
-godiva
-godley
-godlingt
-godo
-godowsky
-godse
-godsoe
-godwin
-goei
-goel
-goell
-goeltzen
-goerss
-goertz
-goertzen
-goethe
-goetz
-goff
-gofron
-goggin
-goh
-goheen
-goin
-goins
-gokal
-gokul
-gokul-ch
-golari
-golas
-golaszew
-golczews
-golda
-goldarin
-goldberg
-goldenbe
-goldenso
-golder
-goldfiel
-goldi
-goldia
-goldie
-goldina
-goldman
-goldmann
-goldner
-goldschm
-goldstei
-goldthor
-goldwyn
-goldy
-golia
-goliss
-golka
-goller
-gollu
-golshan
-gombos
-gomes
-gomez
-gomm
-gong-lia
-gonglian
-goniotak
-gonsalve
-gonzaga
-gonzales
-gonzalez
-gonzalo
-goober
-gooch
-goodbar
-goode
-gooderha
-goodfell
-goodier
-goodinso
-goodman
-goodner
-goodridg
-goodrow
-goodson
-goodwin
-goofy
-goold
-gooley
-goos
-gopal
-gopaul
-gope
-gopisett
-goran
-gorasia
-goraud
-gorberg
-gord
-gordan
-gorde
-gorden
-gordie
-gording
-gordon
-gordy
-gorenflo
-gores
-gorfine
-gorham
-gorhum
-goricane
-goridkov
-goring
-gorius
-gorlick
-gorman
-gorsky
-gorton
-gorzocos
-goska
-goss
-gosselin
-gosset
-gostania
-goswick
-goszczyn
-gotch
-gotchall
-goth
-gothard
-gothart
-gottfrie
-gottlieb
-gottscha
-gottstei
-gou-don
-goudon
-goudreau
-gougeon
-gough
-gouhara
-goukon
-gould
-gouldson
-goulet
-goulette
-goulfine
-goupil
-gourley
-goutam
-govind
-govindan
-govindar
-govindas
-gow-jen
-gowan
-gowda
-gowens
-gower
-gowin
-gowjen
-gowl
-gowland
-goyal
-goyer
-goyette
-goza
-gozani
-gozen
-grabner
-grabowsk
-grace
-gracen
-gracey
-gracia
-gracie
-graciela
-gracinda
-gracomda
-gradeigh
-grader
-gradey
-grading
-grads
-grady
-graehme
-graeme
-graessle
-graff
-grafton
-graham
-graibe
-graig
-grainger
-gram
-graman
-grame
-gramiak
-gran
-granado
-granata
-grandboi
-grande
-grandmas
-grandump
-grandy
-granfiel
-grange
-granger
-granic
-granner
-grannie
-granny
-grant
-grantham
-granthem
-grantley
-granvill
-graphics
-grasman
-grason
-grassman
-grata
-gratia
-gratiana
-gratton
-grau
-grauer
-grausso
-gravelle
-gravely
-graver
-graves
-gravitt
-gravitte
-grawberg
-gray
-graybill
-grayce
-graydon
-grayson
-grazia
-graziano
-grazzini
-greaney
-greatest
-greaver
-greaves
-grebil
-grebner
-greco
-greeley
-greenber
-greene
-greenfie
-greenlee
-greenstr
-greenway
-greer
-greet
-greg
-gregaric
-greger
-gregg
-gregge
-greggory
-grego
-gregoire
-gregoor
-gregor
-gregor-p
-gregorio
-gregoriu
-gregorsk
-gregory
-grelck
-grenier
-grenon
-grenvill
-greszczu
-gret
-greta
-gretal
-gretchen
-grete
-gretel
-grethel
-gretna
-gretta
-grevelin
-grevy
-grewal
-grey
-greytock
-gribbon
-gribbons
-grier
-griet
-grietje
-griff
-griffie
-griffin
-griffioe
-griffith
-griffy
-grigg
-griggs
-grignon
-grigsby
-grillmey
-grills
-grimble
-grimes
-grimm
-grimmell
-grimshaw
-grimsley
-griner
-grinham
-grinnell
-gris
-griselda
-grisoni
-grissel
-grissom
-griswold
-gritton
-grixti
-griz
-groce
-grochau
-grodecki
-groetsem
-groff
-grogan
-grohovsk
-groleau
-grona
-grondin
-gronwall
-grooms
-grootenb
-gros
-grosh
-grosjean
-grosman
-grosse
-grossman
-grossutt
-groth
-groulx
-grove
-grover
-groves
-grovesti
-growden
-growler
-gruau
-grubbs
-gruber
-grueneic
-grueng
-gruenhag
-grund
-gruska
-gruszczy
-gryder
-grzegore
-grzegorz
-grzesik
-gsite
-gu
-guajardo
-gualteri
-guan
-guanglia
-guangyou
-guanyun
-guarez
-guarino
-guarnera
-guatto
-guay
-gubbins
-gubenco
-gucer
-guciz
-gudgeon
-gudrun
-guendole
-guenette
-guenever
-guenna
-guenther
-guercion
-guerette
-guerin
-guerrero
-guerrier
-guertin
-guests
-guevara
-guglielm
-gui
-guido
-guignon
-guilbaul
-guilbert
-guilford
-guilfoyl
-guillaum
-guillema
-guilleme
-guillerm
-guillet
-guillory
-guilmett
-guimond
-guin
-guindi
-guindon
-guinever
-guinn
-guinna
-guinnane
-guiqing
-guirguis
-guisler
-guitard
-guitaris
-gulbrand
-gulick
-gulis
-gulko
-gullekso
-gultekin
-gulvin
-gumb
-gumbley
-gummadi
-gumperz
-gun
-gunadhi
-gunar
-gunars
-gunaseke
-gunawan
-gundecha
-gunderse
-gunderso
-gundes
-gundlach
-gundry
-guner
-gunfer
-gung
-gungor
-gunilla
-gunkel
-gunn
-gunnar
-gunnells
-gunner
-gunshor
-guntar
-guntekin
-gunter
-gunther
-guntvedt
-guo
-guo-jie
-guo-qian
-guoben
-guochun
-guojie
-guoming
-gupta
-gupton
-gur-arie
-gurash
-gurchara
-gurdip
-gure
-gurer
-gurevitc
-gurgenci
-gurica
-gurjinde
-gurjit
-gurley
-gurmeet
-gurnam
-gurney
-gursahan
-gurshara
-gursin
-gurvinde
-gus
-gusella
-guss
-gussi
-gussie
-gussy
-gusta
-gustaf
-gustafso
-gustafss
-gustav
-gustave
-gustavo
-gustavus
-gusti
-gustie
-gustlin
-gusty
-gutcher
-gutermut
-guth
-guthrey
-guthrie
-guthro
-guthry
-gutierre
-guttman
-guty
-gutzmann
-guy
-guy-arbo
-guylain
-guylaine
-guyot
-guzman
-gwen
-gwenda
-gwendole
-gwendoli
-gwendoly
-gweneth
-gwenette
-gwenneth
-gwenni
-gwennie
-gwenny
-gwennyth
-gwenora
-gwenore
-gwo-chun
-gwo-hsin
-gwochung
-gwohsing
-gwyn
-gwyneth
-gwynith
-gwynne
-gyenes
-gyeongbe
-gyger
-gylys
-gyoung
-gypsy
-gysel
-gyula
-gyurcsak
-gyurcsik
-gzl
-ha
-haack
-haaksman
-haas
-habeeb
-habel
-habelrih
-haber
-haberman
-habert
-habib
-hachador
-hache
-hachelle
-hachey
-hack-hoo
-hacker
-hackett
-hacking
-had
-hadaway
-haddad
-hadden
-haddow
-hadel
-hadi
-hadiraha
-hadlee
-hadleigh
-hadley
-hadria
-hadrian
-hady
-hadziome
-hae-won
-haerle
-haertel
-haether
-haewon
-hafedh
-hafeezah
-hafermal
-hafiz
-hafleigh
-hagan
-hagar
-hage
-hagen
-hagenbuc
-hager
-hagerty
-hagewood
-haggar
-haggart
-haggarty
-haggerty
-hagglund
-haghighi
-hagley
-hagstrom
-hagwood
-hahn
-hai
-hai-ning
-hai-ping
-hai-shun
-haibo
-haifang
-haig
-haigh
-hailee
-hailes
-hailey
-haily
-haim
-haimson
-hainer
-haines
-haining
-hainline
-haiping
-haire
-hairil
-haishung
-hak-lay
-hakala
-hakan
-hakansso
-hakeem
-hakim
-haklay
-hal
-hala
-halbedel
-halbert
-hale
-haleigh
-halejak
-halet
-halette
-haley
-half
-halford
-hali
-halicki
-halie
-halimeda
-halina
-hall
-hallamas
-hallenbe
-haller
-hallett
-halley
-halli
-hallie
-halligan
-halliwil
-hallman
-hallsy
-hally
-halovani
-halpenny
-halpern
-halpin
-halsey
-halstead
-halsy
-haluk
-halula
-ham
-hamachi
-hamavand
-hambali
-hambone
-hamdy
-hameed
-hamel
-hamelin
-hamid
-hamidi
-hamil
-hamilton
-hamish
-hamlen
-hamlett
-hamlin
-hamliton
-hammad
-hammel
-hammerli
-hammerme
-hammond
-hammonds
-hamner
-hamnet
-hamori
-hamoui
-hampel
-hampshir
-hampson
-hampton
-hamra
-hamsa
-hamzeh
-han
-han-chie
-han-co
-han-fei
-han-tak
-han-van
-hana
-hanan
-hanchieh
-hanco
-hancock
-handel
-handfort
-handley
-handoko
-handschy
-hane
-hanel
-haney
-hanfei
-hanford
-hang-ton
-hangbok
-hanger
-hangup
-hanh
-hanham
-hanhb
-hanhua
-hani
-haningto
-hanja
-hank
-hankins
-hanlan
-hanley
-hann
-hanna
-hannah
-hanneke
-hanneman
-hanni
-hannibal
-hannible
-hannie
-hannis
-hanns
-hannula
-hanny
-hanrahan
-hans
-hans-pet
-hansen
-hanser
-hansiain
-hanson
-hanspete
-hansquin
-hansraj
-hansson
-hantak
-hanzel
-hanzlice
-hao
-hao-nhie
-hao-yung
-haonhien
-haoyung
-happy
-harabedi
-harada
-haralamb
-harald
-harapiak
-harbert
-harbord
-harbottl
-harbour
-harcourt
-hardage
-hardcast
-hardee
-harderse
-hardi
-hardiman
-hardin
-harding
-hardison
-hardman
-hardwick
-hardy
-hardyal
-hardyck
-hardyman
-haren
-hareton
-hargadon
-hargreav
-hargrove
-hargrow
-hari
-harianto
-harihara
-hariman
-harinder
-harish
-harishan
-harker
-harkness
-harlan
-harland
-harlen
-harlene
-harles
-harless
-harley
-harli
-harlie
-harlin
-harm
-harman
-harmeet
-harmi
-harmon
-harmonia
-harmonie
-harmony
-harms
-harn
-harold
-haroon
-harootun
-haroun
-haroutou
-harp
-harpal
-harpe
-harper
-harpreet
-harrawoo
-harrell
-harri
-harrie
-harriet
-harriett
-harringt
-harriot
-harriott
-harris
-harrison
-harrod
-harron
-harry
-harsch
-harshad
-harsham
-harshava
-harshfie
-hart
-harte
-hartell
-harter
-hartford
-hartgrov
-hartin
-hartkopf
-hartland
-hartleb
-hartley
-hartling
-hartman
-hartmann
-hartmut
-hartney
-hartsell
-hartwell
-harty
-hartzel
-haruko
-harv
-harvard
-harvey
-harville
-harvison
-harwell
-harwerth
-harwilll
-harwood
-hasan
-hasbrouc
-hasegawa
-hasen
-hasham
-hasheem
-hashem
-hashemi
-hashim
-hashimot
-haskel
-haskell
-haskins
-haslach
-hasler
-haslett
-hasmukhb
-hasnain
-hassan
-hassenkl
-hassey
-hassnzah
-hassold
-haste
-hasted
-hastic
-hastie
-hastings
-hasty
-hata
-hatcher
-hatchett
-hately
-hatfield
-hathaway
-hatridge
-hattar
-hatten
-hatti
-hattie
-hattingh
-hatty
-hatz
-hatzenbi
-hau
-haubert
-hauck
-hauersto
-haufe
-hauge
-haughey
-haughwou
-haugrud
-haupt
-haurie
-hause
-hauser
-hautanen
-havelock
-haveman
-haven
-haverkam
-haverty
-havis
-hawes
-hawi
-hawk
-hawken
-hawker
-hawkes
-hawkin
-hawkins
-hawley
-hawryluk
-hawrysh
-hawryszk
-hawthorn
-hayden
-haydock
-haydon
-haydt
-hayes
-hayley
-haylock
-hayman
-haynes
-haynor
-hayward
-haywood
-hayyim
-haze
-hazel
-hazeldin
-hazell
-hazelrig
-hazelton
-hazem
-hazen
-hazenboo
-hazlett
-hdbright
-hdi
-he
-heald
-healey
-heall
-health-s
-healy
-heaney
-hearn
-hearnden
-hearst
-heath
-heather
-heaton
-hebbar
-hebe
-hebert
-heckbert
-heckman
-hector
-heda
-hedda
-heddell
-heddi
-heddie
-heddy
-hedi
-hedin
-hedke
-hedman
-hedrich
-hedrick
-hedvig
-hedvige
-hedwig
-hedwiga
-hedy
-hee
-heeralal
-heeten
-hefferna
-heffner
-hegarty
-hegelian
-hehn-sch
-heida
-heide
-heidebre
-heidepri
-heidi
-heidie
-heighton
-heike
-heikkila
-heile
-heilig
-heiliger
-heilsnis
-hein
-heindric
-heinen
-heinjus
-heinke
-heino
-heinonen
-heinrich
-heinrick
-heinrik
-heinz
-heinzing
-heinzman
-heisler
-heitmann
-hekel
-heki
-helaina
-helaine
-heldenbr
-heleen
-helem
-helen
-helen-el
-helena
-helene
-heleneli
-helenka
-helfrick
-helga
-helge
-helgelan
-helio
-helkaa
-hella
-hellberg
-hellen
-heller
-hellerst
-helli
-hellmut
-helluva
-hellyer
-helma
-helms
-helmut
-helmuth
-helmy
-heloise
-helpb
-helpline
-helsa
-helseth
-helstab
-helton
-helwege
-helyn
-hemant
-hembrick
-hemens-d
-hemme
-hemmerle
-hemphill
-hempinst
-hempstea
-henao
-hench
-henderso
-hendra
-hendren
-hendrick
-hendrik
-hendrika
-hendriks
-hendry
-hendryck
-hendy
-henein
-heng
-hengameh
-hengda
-hengevel
-hengl
-hengst
-henk
-henk smi
-henka
-henley
-henline
-henneber
-hennebur
-hennelly
-hennessy
-hennie
-henninge
-hennon
-hennriet
-henny
-henri
-henrie
-henrieta
-henriett
-henrik
-henrika
-henrikse
-henry
-henryett
-hensen
-henshaw
-hensley
-henson
-henstock
-henthorn
-hepburn
-hephziba
-heping
-heppell
-heppes
-hera
-herak
-herb
-herbel
-herberge
-herbers
-herbert
-herbie
-herby
-herc
-hercule
-hercules
-herculie
-here's t
-heredia
-heribert
-hering
-herlihy
-herling
-herm
-hermack
-herman
-hermann
-hermann-
-hermanns
-hermes
-hermia
-hermie
-hermien
-hermina
-hermine
-herminia
-hermione
-hermon
-hermy
-hernan
-hernande
-hernando
-herndon
-hernek
-herner
-herng-je
-herngjen
-hernon
-hernzlia
-herod
-herold
-heroux
-herr
-herrage
-herralio
-herre
-herren
-herrera
-herrick
-herring
-herringt
-herriott
-herrmann
-herron
-herronal
-herryjan
-hersch
-herschel
-herscovi
-hersee
-hersh
-hershber
-hershel
-herskovi
-herta
-hertha
-hertler
-hertzog
-herve
-hervey
-herzig
-hesche
-hesham
-hesk
-hesketh
-heslop
-hess
-hesse
-hester
-hesther
-hestia
-hetti
-hettie
-hetty
-hetzel
-heung
-heunis
-heurich
-hew
-hewage
-hewe
-hewer
-hewet
-hewett
-hewie
-hewitt
-hewlet
-hews
-heybroek
-heydon
-heyer
-heynen
-heys
-heystrae
-heyward
-heywood
-hi
-hiawatha
-hibberd
-hibler
-hichem
-hickerso
-hickey
-hickin
-hickman
-hickman-
-hickox
-hicks
-hidaka
-hideki
-hideo
-hiebsch
-hien
-hienz
-hieronym
-hiers
-higginbo
-higgins
-higham
-highet
-highsmit
-hight
-hightowe
-higuchi
-hijab
-hikita
-hil
-hilaire
-hilario
-hilarius
-hilary
-hilberma
-hilbert
-hilbig
-hilda
-hildagar
-hilde
-hildebra
-hildegaa
-hildegar
-hilder
-hildum
-hildy
-hilfinge
-hill
-hilla
-hillard
-hillary
-hillel
-hiller
-hillery
-hilliard
-hilliary
-hillidge
-hillie
-hillier
-hillring
-hills
-hillson
-hilly
-hillyer
-hilmi
-hils
-hilton
-hiltz
-hilwa
-himanshu
-himawan
-himraj
-hin-wai
-hincher
-hinchey
-hinchley
-hinda
-hindle
-hinds
-hindson
-hine
-hiner
-hines
-hing
-hing-fai
-hingtgen
-hink
-hinkel
-hinkins
-hinkle
-hinojosa
-hinsdale
-hinshaw
-hinson
-hinton
-hinton-s
-hinz
-hinze
-hipp
-hippert
-hipson
-hirakawa
-hiraki
-hiram
-hirayama
-hiren
-hirofumi
-hirohama
-hiroki
-hiroko
-hiromi
-hiromu
-hironaga
-hirooki
-hirose
-hiroshi
-hirotaka
-hiroto
-hirotosh
-hiroyuki
-hirsch
-hirshman
-hisaki
-hiscoe
-hiscott
-hisham
-hishchak
-hisko
-hislop
-hitchcoc
-hitching
-hite
-hitler
-hitoshi
-hiusser
-hively
-hixon
-hixson
-hjartars
-hjorth
-hlady
-hlausche
-hlinka
-hm
-hnidek
-ho
-ho-mu
-hoa
-hoa-van
-hoadley
-hoag
-hoagland
-hoang
-hoare
-hobard
-hobart
-hobbs
-hoben
-hobesh
-hobey
-hobgood
-hobie
-hobin
-hoch
-hochbaum
-hochberg
-hock
-hockaday
-hockster
-hoctor
-hocutt
-hodder
-hoddinot
-hodedo
-hodge
-hodgens
-hodges
-hodgins
-hodgkin
-hodgkiss
-hodgson
-hoebart
-hoeg
-hoehling
-hoehn
-hoek
-hoeksma
-hoekstra
-hoeler
-hoelsche
-hoequist
-hoes
-hoferek
-hoffelt
-hoffman
-hoffmann
-hoffmeis
-hoffpaui
-hoffsted
-hofmann
-hofmeist
-hofstede
-hofstett
-hogan
-hogeboom
-hogg
-hoggan
-hoggatt
-hogue
-hohmeyer
-hohn
-hoi-kin
-hojjat
-holberry
-holbrook
-holcomb
-holcombe
-holcroft
-hold of
-holdaway
-holden
-holder
-holdren
-holesing
-holinski
-hollack
-holland
-hollande
-hollands
-hollbach
-hollen
-hollenba
-hollenbe
-hollenst
-holleran
-holley
-holli
-holliday
-hollie
-hollings
-hollingt
-hollingw
-hollis
-holliste
-holloway
-hollran
-holly
-holly-an
-hollyann
-holm
-holman
-holmans
-holmer
-holmes
-holmquis
-holness
-holsclaw
-holst
-holt
-holterma
-holthaus
-holton
-holtz
-holtze
-holvey
-holy
-holz
-hom
-homa
-homan
-homayoon
-homayoun
-homer
-homere
-homerus
-homonick
-homu
-hon
-hon-kong
-hon-son
-honbarri
-honda
-honey
-honeycut
-hong
-hong-che
-hong-yuh
-hongchen
-hongtao
-hongyuh
-hongzhi
-honkakan
-honmun
-honor
-honoria
-honson
-honzo
-hoog
-hooi-lee
-hooker
-hooks
-hoon
-hooper
-hoorman
-hooshang
-hooton
-hoover
-hopcroft
-hope
-hopf
-hopkin
-hopkins
-hopkinso
-hopley
-hoppenwo
-hopper
-hopson
-hoptoad
-hoque
-hor
-hor-lam
-horace
-horacio
-horak
-horalek
-horatia
-horatio
-horatius
-horban
-hord
-hore
-horemans
-horgan
-horianop
-horkoff
-hormoz
-hornacek
-hornbeck
-hornbeek
-hornburg
-horne
-horng
-horngdar
-horning
-hornung
-horowitz
-horsfiel
-horst
-horstman
-hort
-horten
-hortense
-hortensi
-horton
-horus
-horvath
-horwitz
-horwood
-hosang
-hosanna
-hoscheid
-hoseok
-hoshi
-hosier
-hoskin
-hosking
-hoskins
-hosneld
-hossein
-hosseini
-hot
-hotline
-hotlist
-hotson
-hotta
-houde
-houdini
-houghton
-houk
-houle
-houn
-hounsell
-houssam
-houssein
-houston
-hoverman
-hovey
-hovinga
-how
-how-kee
-howald
-howard
-howarth
-howat
-howden
-howe
-howe-pat
-howekamp
-howell
-howerton
-howes
-howey
-howie
-howlett
-howley
-howorth
-howse
-hoxie
-hoy
-hoyer
-hoyt
-hpldt
-hpone
-hq
-hqs
-hr
-hrdata
-hrenyk
-hrinfo
-hrubik
-hruby
-hrushowy
-hruska
-hrvatin
-hsi
-hsi-ho
-hsiang
-hsiao
-hsiao-ch
-hsiao-we
-hsiao-yu
-hsiaochi
-hsiaosu
-hsiaowei
-hsiaoyun
-hsieh
-hsien
-hsiho
-hsin
-hsin-li
-hsin-shi
-hsing
-hsing-ju
-hsinli
-hsiung
-hsketh
-hspice
-hsu
-hsuan
-hsueh
-htd
-hu
-hua
-hua-yuan
-huai
-huan
-huan-yu
-huanbo
-huang
-huasheng
-huashi
-huay-yon
-huayuan
-huayyong
-hubal
-hubbard
-hubbell
-hube
-huber
-huberman
-hubers
-hubert
-huberto
-hubey
-hubie
-hubley
-huboi
-hudai
-hudak
-huddlest
-hudecek
-hudepohl
-hudgins
-hudson
-hudy
-hudyma
-huel-she
-huelshen
-huelsman
-hueneman
-huerta
-huestis
-huether
-huetu
-huey
-huey-kuo
-hueykuo
-hufana
-huffman
-hugel
-huggins
-hugh
-hughes
-hughes-c
-hughey
-hughie
-hughson
-hugibert
-hugo
-hugues
-huguette
-huguin
-huhn
-hui
-hui-chau
-hui-neng
-huib
-huichaun
-huifang
-huineng
-huiqi
-huitt
-huizhao
-hukam
-hulda
-hulen
-hulett
-huligang
-hulk
-hulme
-hulst
-hultgren
-hulversh
-hulze
-humbert
-humberto
-humboldt
-hume
-humenik
-humenuk
-humes
-humfrey
-humfrid
-humfried
-humiston
-hummel
-hummerst
-humphrey
-humphrie
-hundries
-huneault
-hunfredo
-hung
-hung-kan
-hung-win
-hungkai
-hungkang
-hungle
-hungquoc
-hungwing
-hunike
-hunnicut
-hunsberg
-hunsucke
-hunt
-hunter
-huntingt
-huntlee
-huntley
-huo-yen
-huong
-huor
-huot
-huoyen
-hupe
-huppert
-hurd
-huret
-hurf
-hurlee
-hurleigh
-hurley
-hurman
-hurst
-hurtado
-hurteau
-hurtubis
-hurwitz
-husain
-husam
-husarewy
-husein
-hussain
-hussam
-hussein
-husser
-hussey
-hussien
-hustin
-huston
-huszar
-huszarik
-hutchers
-hutchin
-hutching
-hutchins
-hutchiso
-hutson
-hutt
-hutter
-hutton
-huub
-huuliem
-huxley
-huy
-huyen
-huynh
-huyvan
-huzur
-hvezda
-hwa
-hwajin
-hwan
-hwang
-hwayong
-hwei-lin
-hy
-hyacinth
-hyatt
-hydar
-hyde
-hyen
-hyer
-hyerle
-hyers
-hyjek
-hylaride
-hyman
-hymie
-hynda
-hyndman
-hynek
-hyong-ju
-hyongjun
-hyonil
-hyoungju
-hyperspa
-hyrne
-hysler
-hyslop
-hyte
-hyun
-hyunchul
-hyung
-i-chao
-i-ching
-iacoviel
-iacovo
-iago
-iain
-ian
-ianace
-iannotti
-iannozzi
-iantaffi
-ianthe
-iaquinto
-iarocci
-ibach
-ibarra
-ibbie
-ibby
-ibntas
-ibrahim
-ibsen
-iburg
-ic
-iceman
-ichabod
-ichao
-iching
-ichiro
-ichizen
-icy
-icylyn
-id
-ida
-idalia
-idalina
-idaline
-ide
-idell
-idelle
-idette
-idris
-idt
-idus
-ie
-iem
-ientile
-iezzi
-if anyon
-ifact
-ifill
-iftekhar
-ifti
-igarashi
-iggie
-igglesde
-iggy
-ignace
-ignacio
-ignacius
-ignatius
-ignaz
-ignazio
-igor
-iguchi
-igusa
-ihnat
-ihor
-ijaz
-ijff
-ike
-ikeda
-ikey
-ikotin
-ikram
-ikuo
-ilaire
-ilan
-ilana
-ilario
-ilda
-ileana
-ileane
-ilene
-ilic
-ilise
-ilk
-ilka
-illa
-illamchi
-illidge
-illinois
-ilmberge
-ilona
-ilovich
-ilowski
-ilsa
-ilse
-ilsup
-ilwhan
-ilya
-ilyas
-ilyess
-ilysa
-ilyse
-ilyssa
-ima
-iman
-imbemba
-imelda
-imhof
-imi
-immanuel
-imming
-imogen
-imogene
-imojean
-impaglia
-imran
-imre
-imtaz
-imtiaz
-in-beum
-in-cheol
-in-hwan
-ina
-inam
-inamulla
-inan
-inanc
-inbeum
-ince
-incheol
-incze
-ind
-indahl
-indar
-independ
-inderjit
-indiana
-indianaj
-indira
-indra
-indy
-ineke
-ines
-inesita
-inessa
-inez
-info
-info-man
-infocent
-ing
-inga
-ingaberg
-ingaborg
-ingamar
-ingar
-inge
-ingeberg
-ingeborg
-ingelber
-ingell
-ingemar
-inger
-ingersol
-ingie
-ingle
-ingleber
-ingles
-ingling
-inglis
-ingmar
-ingo
-ingra
-ingram
-ingres
-ingrey
-ingrid
-ingrim
-ingunna
-ingvar
-inho
-inhulsen
-inhwan
-inigo
-inm
-inman
-inna
-innchyn
-innes
-inness
-innis
-inniss
-innocent
-inoue
-inquire
-inrig
-inscoe
-insp
-inspecti
-instal
-installe
-integ
-integrat
-intemann
-interact
-interfac
-intihar
-intplan
-intune
-inyoung
-ioan
-ioana
-ioannes
-ioannidi
-ioannis
-ioannou
-iocca
-iocntrl
-iola
-iolande
-iolanthe
-iona
-ione
-iorgo
-iorgos
-iormina
-iosep
-ioui
-ip
-ipadmin
-ipokrati
-ippolito
-iqbal
-ira
-iradj
-iraj
-irani
-irby
-irc
-ircbellc
-irccar
-ircinter
-ircmarke
-ircmer
-ircmtl
-ircstand
-irean
-ireland
-irena
-irene
-irfan
-irias
-iribarre
-irice
-irick
-irina
-iris
-irish
-irissou
-irita
-irma
-irv
-irvin
-irvine
-irving
-irwin
-irwinn
-is a cat
-isa
-isaac
-isaacs
-isaak
-isabeau
-isabel
-isabelit
-isabell
-isabella
-isabelle
-isac
-isacco
-isador
-isadora
-isadore
-isahella
-isaia
-isaiah
-isak
-isami
-isbister
-iseabal
-isenor
-isensee
-isert
-isfan
-ishak
-ishan
-ishee
-isherwoo
-ishii
-ishikida
-ishimoto
-isiahi
-isidor
-isidora
-isidore
-isidoro
-isidro
-isin
-isip
-isis
-iskandar
-iskender
-iskra
-isl
-islam
-isley
-ismael
-ismail
-isobel
-isoft
-isolde
-israel
-issa
-issam
-issi
-issiah
-issie
-issy
-itac
-itah
-italo
-italus
-itaru
-itas
-itaya
-itch
-iteam
-iteke
-ito
-its-eng
-iu
-iva
-ivan
-ivancevi
-ivancic
-ivanhoe
-ivanoff
-ivanyi
-ivar
-ive
-iver
-ivers
-iversen
-iverson
-ives
-ivett
-ivette
-ivey
-ivie
-ivo
-ivona
-ivonne
-ivor
-ivory
-ivy
-iwan
-iwanyk
-iwashita
-iwona
-iws
-iyad
-iyengar
-iyer
-iyun
-izaak
-izabel
-izak
-izbinsky
-izchak
-izique
-izora
-izumi
-izuru
-izzat
-izzo
-izzotti
-izzy
-j-franco
-jaakkola
-jaan
-jabbari
-jabez
-jabir
-jablonsk
-jabreen
-jacalyn
-jacek
-jacenta
-jachym
-jacinda
-jacinta
-jacintha
-jacinthe
-jack
-jackelyn
-jacki
-jackie
-jacklin
-jacklyn
-jackman
-jackquel
-jackson
-jacky
-jackye
-jaclin
-jaclyn
-jacob
-jacobo
-jacobs
-jacobsen
-jacobson
-jacque
-jacqueli
-jacquely
-jacquene
-jacques
-jacquett
-jacqui
-jacquie
-jacynth
-jacynthe
-jada
-jade
-jadwiga
-jae
-jae-koo
-jae-whan
-jaekoo
-jaenen
-jaewhang
-jaffer
-jag
-jagan
-jagat
-jagath
-jagatic
-jagdev
-jagdish
-jager
-jagernau
-jagjeet
-jagjit
-jagla
-jago
-jagodzin
-jagriti
-jags
-jahangir
-jahromi
-jai
-jaijeet
-jaikne
-jailyn
-jaime
-jaimie
-jaimin
-jain
-jaine
-jak
-jakab
-jakabffy
-jakb
-jake
-jakeman
-jaki
-jakie
-jakim
-jakob
-jakola
-jakstys
-jakubows
-jalaie
-jalal
-jalali
-jalaliza
-jalbert
-jalilvan
-jama
-jamaal
-jamal
-jamaly
-jaman
-jamel
-jamensky
-jamer
-james
-james_mi
-jamesett
-jameson
-jamesy
-jamey
-jami
-jamie
-jamieson
-jamil
-jamilah
-jamill
-jamima
-jamin
-jamison
-jammal
-jammie
-jammu
-jamnejad
-jamroz
-jamshed
-jamshid
-jamshidi
-jan
-jan-olof
-jan-robe
-jana
-janak
-janaki
-janaratn
-janaya
-janaye
-jancewic
-jancovic
-janczyn
-janda
-jande
-jandy
-jane
-janean
-janecka
-janeczka
-janeen
-janek
-janel
-janela
-janell
-janella
-janelle
-janene
-janenna
-janes
-janessa
-janet
-janeta
-janeth
-janetta
-janette
-janeva
-janey
-jang
-jang-hsu
-janghsue
-jani
-jania
-janice
-janick
-janie
-janifer
-janina
-janine
-janio
-janis
-janiszew
-janith
-janka
-janke
-jankowsk
-jann
-janna
-jannay
-jannel
-jannelle
-jannie
-janning
-janolof
-janos
-janot
-janovich
-janrober
-janseen
-jansen
-janson
-janssen
-jantz-le
-jantzi
-januario
-janusz
-jany
-jap
-japan
-japp
-jaquelin
-jaquelyn
-jaquenet
-jaques
-jaquith
-jarad
-jarboe
-jarchow
-jard
-jareb
-jared
-jarel
-jargon
-jarib
-jarid
-jarl
-jarlath
-jarmal
-jarman
-jarmo
-jarmoc
-jarmon
-jarmul
-jarnak
-jarrad
-jarred
-jarret
-jarrett
-jarrid
-jarrod
-jarvah
-jarvie
-jarvin
-jarvis
-jarzemsk
-jasbinde
-jase
-jasen
-jashvant
-jasmann
-jasmin
-jasmina
-jasmine
-jasny
-jason
-jasper
-jaspreet
-jasrotia
-jasti
-jastinde
-jasun
-jasver
-jaswal
-jatar
-jatin
-jatinder
-jau-min
-jau-yau
-jaumin
-jauvin
-jauyau
-java
-javad
-javallas
-javar
-javed
-javier
-javor
-jawad
-jawaid
-jawana
-jawanda
-jawor
-jaworski
-jaworsky
-jay
-jaya
-jayakuma
-jayamann
-jayant
-jayanta
-jayavant
-jaye
-jayendra
-jayesh
-jayjay
-jayme
-jaymee
-jaymie
-jayn
-jayne
-jaynell
-jaynie
-jayshree
-jayson
-jazanosk
-jazmin
-jcbach
-jcst
-jdavie
-jderek
-jean
-jean-ber
-jean-cla
-jean-den
-jean-fra
-jean-guy
-jean-jac
-jean-lou
-jean-luc
-jean-mar
-jean-mic
-jean-nor
-jean-pau
-jean-pie
-jean-rob
-jean-roc
-jean-yve
-jeana
-jeane
-jeanelle
-jeanes
-jeanette
-jeanhee
-jeanice
-jeanie
-jeanine
-jeanloui
-jeanna
-jeanne
-jeannett
-jeannie
-jeannine
-jeannot
-jeany
-jeavons
-jecho
-jed
-jedd
-jeddy
-jedediah
-jedidiah
-jedrysia
-jee
-jee-howe
-jeff
-jefferey
-jefferso
-jeffery
-jeffie
-jeffrey
-jeffreys
-jeffries
-jeffry
-jeffy
-jegland
-jehanna
-jehovah
-jehu
-jelen
-jelene
-jeleniew
-jelinek
-jelske
-jem
-jemczyk
-jemie
-jemima
-jemimah
-jemmie
-jemmy
-jen
-jen-chen
-jen-hua
-jena
-jenchen
-jenda
-jenelle
-jeng
-jenhua
-jeni
-jenica
-jeniece
-jenifer
-jeniffer
-jenilee
-jenine
-jenkins
-jenkinso
-jenn
-jenna
-jennee
-jenner
-jenness
-jennette
-jenni
-jennica
-jennie
-jennifer
-jennilee
-jennine
-jennings
-jenny
-jeno
-jens
-jensen
-jensenwo
-jenson
-jeong
-jephthah
-jepson
-jer-huan
-jerad
-jerald
-jeralee
-jeramey
-jeramie
-jere
-jereme
-jeremiah
-jeremias
-jeremie
-jeremy
-jerhuang
-jeri
-jermain
-jermaine
-jermayne
-jernigan
-jeroen
-jerome
-jeromy
-jeronimo
-jeroski
-jerreld
-jerri
-jerrie
-jerrilee
-jerrilyn
-jerrine
-jerrold
-jerrome
-jerry
-jerrylee
-jervis
-jerzy
-jeska
-jesper
-jess
-jessa
-jessalin
-jessalyn
-jessamin
-jessamyn
-jesse
-jessee
-jesselyn
-jessey
-jesshope
-jessi
-jessica
-jessie
-jessika
-jessup
-jessy
-jester
-jesty
-jesus
-jet
-jeter
-jeth
-jethro
-jeurene
-jew
-jewel
-jewell
-jewelle
-jewels
-jewett
-jey
-jeyarara
-jezioran
-jhingran
-ji
-ji-chuu
-jia
-jia-wen
-jiak-kwa
-jiakkwan
-jian
-jianchen
-jiang
-jianli
-jiann
-jiann-ya
-jiannyan
-jianou
-jianqi
-jianxing
-jianye
-jianyun
-jiawen
-jiayi
-jiayuan
-jichuu
-jie-yong
-jiejie
-jiethye
-jieyong
-jihad
-jihan
-jihyun
-jiin-shu
-jiinshuh
-jilann
-jilisa
-jill
-jillana
-jillane
-jillayne
-jilleen
-jillene
-jilli
-jillian
-jillie
-jilly
-jim
-jimenez
-jiming
-jiminy
-jimmie
-jimmy
-jims
-jimson
-jin
-jin-ho
-jin-nan
-jin-song
-jin-yuan
-jin-yun
-jinann
-jinchao
-jindal
-jing
-jing-ru
-jingbai
-jinglun
-jingru
-jinho
-jinhua
-jinlun
-jinn-kue
-jinnan
-jinnkuen
-jinny
-jinsheng
-jinsong
-jinsoo
-jinyuan
-jiri
-jirina
-jiro
-jisang
-jisheng
-jitendra
-jiuhuai
-jivan
-jiyuan
-jiyue
-jo
-jo ann
-jo-ann
-jo-anne
-jo-marie
-joachim
-joachimp
-joan
-joana
-joane
-joanie
-joann
-joanna
-joannah
-joanne
-joannes
-joannidi
-joannie
-joannis
-joao
-joaquin
-job
-jobe
-jobey
-jobi
-jobie
-jobina
-joby
-jobye
-jobyna
-jocelin
-joceline
-jocelyn
-jocelyne
-jochem
-jochen
-jock
-jocko
-jodee
-jodi
-jodie
-jodine
-jodoin
-jodoin-s
-jody
-joe
-joeann
-joel
-joela
-joelie
-joell
-joella
-joelle
-joellen
-joelly
-joellyn
-joelynn
-joeph
-joerg
-joeri
-joete
-joey
-joffe
-johan
-johan am
-johan ch
-johan se
-johanama
-johanchr
-johann
-johanna
-johannah
-johanne
-johannes
-johannse
-johanseb
-johansen
-johanson
-johathan
-john
-john-jr
-john-pau
-john-sr
-johna
-johnath
-johnatha
-johnatho
-johnette
-johni
-johnna
-johnni
-johnnie
-johnny
-johns
-johnsen
-johnson
-johnsson
-johnston
-johny
-joice
-joiner
-joji
-jojo
-joke
-jolanda
-jole
-jolee
-joleen
-jolene
-joletta
-joli
-jolicoeu
-jolie
-jolin
-joline
-jolitz
-joll
-jolliffe
-joly
-jolyn
-jolynn
-jon
-jonah
-jonas
-jonathan
-jonathon
-jonczak
-jone
-jonell
-jonelle
-jones
-jong
-jong-chi
-jong-woe
-jongchih
-jonghun
-jonghyuk
-jongsun
-jongwoei
-jongwoo
-joni
-jonie
-jonis
-jonkheer
-jonson
-jonthan
-joo
-joo-euin
-joo-geok
-joon
-joong
-jooran
-jooyul
-joplin
-jordain
-jordan
-jordana
-jordanna
-jordi
-jordon
-jorey
-jorgan
-jorge
-jorgense
-jori
-jorie
-joron
-jorrie
-jorry
-jory
-jos
-josanne
-joscelin
-jose
-josee
-josef
-josefa
-josefina
-joseito
-joselito
-joseph
-josepha
-josephin
-josephs
-josey
-josh
-joshi
-joshia
-joshua
-joshuah
-josi
-josiah
-josiane
-josias
-josie
-josine
-josip
-joslin
-joson
-josselyn
-jossine
-josy
-joubert
-joudrey
-jourdain
-jourdan
-jovo
-jowett
-joy
-joya
-joyan
-joyann
-joyce
-joycelin
-joydeep
-joye
-joyner
-joyous
-jozef
-jozsef
-jr
-jsandye
-jsbach
-juan
-juana
-juanita
-juarez
-jubainvi
-jubb
-jubenvil
-jubinvil
-juby
-jud
-judah
-judas
-judd
-jude
-judge
-judi
-judie
-judith
-juditha
-judithre
-judon
-judy
-judye
-judyresn
-juergen
-juers
-jugandi
-juh-shiu
-juha
-juhan
-juhshiun
-jui
-jui-fen
-juieta
-juifen
-juile
-jukka
-julayne
-jule
-julee
-jules
-juli
-julia
-julian
-juliana
-juliane
-juliann
-julianna
-julianne
-julianto
-julie
-julieann
-julien
-julienne
-juliet
-julieta
-julietta
-juliette
-julina
-juline
-julio
-julissa
-julita
-julius
-jun
-jun-li
-junaid
-june
-juneau
-juneho
-junette
-jung
-jung-hua
-junghua
-jungmeis
-juni
-junia
-junie
-junina
-junk
-junkie
-junkin
-junli
-junmeng
-junzo
-juozas
-jurafsky
-jurek
-jurevis
-jurewicz
-jurg
-jurgen
-jurgens
-jurgutis
-juri
-jurman
-juscesak
-juskevic
-jussi
-justen
-justin
-justina
-justine
-justinia
-justinn
-justino
-justis
-justo
-justus
-jusuf
-jutta
-jwahar
-jyh-dong
-jyh-doug
-jyhdong
-jyhdoug
-jyoti
-jyun-che
-jyunchen
-jyuo
-kaare
-kabe
-kabel
-kaboliza
-kabuli
-kac
-kacey
-kacie
-kacor
-kacsor
-kacy
-kaczmare
-kaczmars
-kaczynsk
-kadah
-kadamani
-kaden
-kadiyala
-kadlecik
-kaefer
-kaehler
-kaela
-kaete
-kagan
-kah-ming
-kahaleel
-kahan
-kahhale
-kahhan
-kahil
-kahkonen
-kahlil
-kahn
-kahneman
-kahnert
-kahtasia
-kai
-kai-bor
-kai-ming
-kai-wah
-kai-wai
-kaia
-kaibor
-kaiching
-kaid
-kaidanne
-kaigler
-kaila
-kaile
-kaileen
-kailey
-kain
-kaine
-kaiser
-kaitlin
-kaitlyn
-kaitlynn
-kaiwah
-kaiwen
-kaj
-kaja
-kajeejit
-kaji
-kakalina
-kaki
-kakou
-kaksonen
-kakuta
-kala
-kalab
-kalai
-kalaiche
-kalair
-kalappa
-kalash
-kale
-kaleb
-kalechst
-kaleena
-kales
-kaley
-kali
-kalie
-kalil
-kalila
-kalina
-kalinda
-kalindi
-kaliski
-kalitzku
-kalle
-kallewar
-kalli
-kallio
-kally
-kalman
-kalnitsk
-kalogera
-kalpak
-kalpit
-kalra
-kalsey
-kalt
-kalugdan
-kaluzny
-kalvin
-kalwa
-kalwarow
-kalyan
-kalyani
-kalyn
-kam
-kam-hung
-kam-suen
-kamal
-kaman
-kamas
-kambhamp
-kambiz
-kamboh
-kameko
-kamel
-kamerson
-kamhung
-kamie
-kamil
-kamila
-kamilah
-kamillah
-kaminsky
-kamiya
-kamiyama
-kamlesh
-kammerer
-kamminga
-kamol
-kamoun
-kamran
-kamyar
-kamyszek
-kan
-kan-hung
-kana
-kanagend
-kanani
-kanata
-kanchit
-kandace
-kandappa
-kandi
-kandra
-kandy
-kane
-kaneko
-kaneshir
-kang
-kang-gil
-kang-nin
-kang-yua
-kangelis
-kangkun
-kangning
-kanhung
-kania
-kanies
-kanika
-kannan
-kannel
-kanneman
-kanno
-kansara
-kant
-kanthan
-kantor
-kanu
-kanungo
-kanwalji
-kanwar
-kanya
-kao
-kaoru
-kaoud
-kapadia
-kapatou
-kapella
-kapil
-kaplan
-kapp
-kappos
-kaps
-kapsa
-kapsch
-kapuscin
-kara
-kara-lyn
-karaali
-karademi
-karalee
-karalynn
-karam
-karan
-karass
-karattup
-karchevs
-kardomat
-kardos
-kare
-karee
-kareem
-karel
-karels
-karen
-karena
-karhunie
-kari
-karia
-kariann
-karibian
-karie
-karil
-karilynn
-karim
-karin
-karina
-karine
-kariotta
-karisa
-karissa
-karita
-karkotsk
-karl
-karla
-karlan
-karlee
-karleen
-karlen
-karlene
-karlens
-karlette
-karlie
-karlik
-karlis
-karloff
-karlon
-karlotta
-karlotte
-karlson
-karly
-karlyn
-karmali
-karmen
-karmous-
-karn
-karna
-karnazes
-karney
-karol
-karola
-karole
-karolefs
-karolien
-karolina
-karoline
-karoly
-karon
-karp
-karr
-karrah
-karrie
-karry
-karsan
-karsner
-karsz
-kartik
-kartikey
-karunara
-karwowsk
-kary
-karyl
-karylin
-karyn
-kas
-kasbia
-kasbow
-kasdorf
-kasey
-kashani-
-kashef
-kashima
-kashul
-kasifa
-kaspar
-kasparia
-kasper
-kasprzak
-kass
-kassam
-kassandr
-kassem
-kassey
-kassi
-kassia
-kassie
-kassissi
-kast
-kastelbe
-kasten
-kastner
-kaston
-kasumovi
-kat
-kata
-katalin
-katarina
-kataryna
-katcher
-katchmar
-kate
-katee
-katerina
-katerine
-katey
-kath
-katha
-katharin
-katharyn
-kathe
-katherin
-katheryn
-kathi
-kathie
-kathleen
-kathlin
-kathnels
-kathreri
-kathrine
-kathryn
-kathryne
-kathy
-kathyb
-kathye
-kati
-katibian
-katie
-katina
-katine
-katinka
-katja
-katleen
-katlin
-kato
-katrin
-katrina
-katrine
-katrinka
-katsoura
-katsumi
-katsunor
-katti
-kattie
-katuscha
-katusha
-katy
-katya
-katz
-katzenel
-kaudel
-kauffeld
-kauffman
-kaufman
-kaufmann
-kaunas
-kaura
-kaus
-kausche
-kaushik
-kavaler
-kavanagh
-kavid
-kavis
-kawa
-kawabata
-kawaguch
-kawahara
-kawakami
-kawamura
-kawashim
-kawauchi
-kay
-kaya
-kayaliog
-kayar
-kaycee
-kaye
-kayla
-kayle
-kaylee
-kayley
-kaylil
-kaylyn
-kayne
-kaypour
-kayser
-kayvan
-kaz
-kazem
-kazimier
-kazmierc
-kazue
-kazuhiko
-kazuhiro
-kazuhito
-kazuko
-kazunori
-kazuo
-kazuyuki
-kea
-keala
-kealey
-kean
-keane
-kearney
-kearns
-keary
-keast
-keates
-keating
-keaton
-keats
-kebede
-kechichi
-keck
-kedah
-kedron
-kee
-keef
-keefe
-keefer
-keegstra
-keehan
-keehn
-keelan
-keelby
-keeler
-keeley
-keelia
-keels
-keely
-keen
-keenan
-keene
-keene-mo
-keep
-keer
-kees
-keever
-keffer
-kehler
-kehoe
-kehr
-kei
-keifer
-keighley
-keilholz
-keilty
-keim
-kein
-keinosuk
-keir
-keiser
-keish
-keisuke
-keitel
-keith
-kejing
-kelbe
-kelbee
-kelby
-kelcey
-kelci
-kelcie
-kelcy
-keldon
-kele
-kelemen
-kelessog
-kelila
-kelin
-kelkar
-kell
-kelland
-kellby
-kelleher
-kellen
-keller
-kellerma
-kellett
-kelley
-kelleye
-kelli
-kellia
-kellie
-kellina
-kellogg
-kellsie
-kellum
-kelly
-kelly-er
-kellyann
-kellyeri
-kelner
-kelsay
-kelsch
-kelsey
-kelsi
-kelso
-kelsy
-keltouma
-kelvin
-kelwin
-kely
-kem
-kemal
-kember
-kemish
-kemkeng
-kemme
-kemp
-kempf
-kempffer
-kempler
-kemppain
-kempski
-kempster
-ken
-kenda
-kendal
-kendall
-kendel
-kendell
-kendi
-kendra
-kendre
-kendrick
-kenedi
-kenik
-kenji
-kenkel
-kenlan
-kenmir
-kenn
-kenna
-kennaday
-kennan
-kennard
-kennedy
-kenneth
-kennett
-kenney
-kennie
-kennith
-kennon
-kenny
-kenol
-kenon
-kensinge
-kent
-kenta
-kentaro
-kenton
-kenworth
-kenyon
-keogh
-kepekci
-kepler
-ker
-kera
-kerby
-kerensa
-kerfoot
-keri
-keriakos
-keriann
-kerianne
-kerith
-kerk
-kerley
-kerlovic
-kermie
-kermit
-kermy
-kernahan
-kernan
-kerner
-kernodle
-kerns
-kerr
-kerri
-kerri-an
-kerrie
-kerrill
-kerrin
-kerry
-kerschen
-kerschne
-kerstin
-kerwin
-kerwinn
-keseris
-keshab
-keshav
-kesler
-kesley
-keslie
-kesling
-kessel
-kessia
-kessiah
-kessing
-kessler
-kessley
-kestelma
-kester
-kestutis
-ketan
-ketao
-ketcham
-ketcheso
-ketchum
-ketkar
-ketley
-ketsler
-ketterer
-ketti
-kettie
-kettles
-ketty
-keung
-keuning
-kev
-kevan
-keven
-keveny
-kevin
-kevina
-kevon
-kevyn
-keyes
-keynes
-keys
-keyvan
-khac
-khachatr
-khadbai
-khai
-khalaf
-khaled
-khalid
-khalil
-khalilza
-khamdy
-khanh
-khanna
-khanvali
-khariton
-khatib
-khatod
-khatri
-khawar
-khedkar
-khesin
-khezri
-khieu
-khim
-khimasia
-kho
-khoa
-khodosh
-khoinguy
-khon
-khorami
-khorrama
-khosla
-khosravi
-khosro
-khosrow
-khouderc
-khoury
-khouzam
-khue
-khueh-ho
-khuehhoc
-khuon
-khurana
-khurshid
-khyra
-ki
-kiah
-kial
-kiala
-kiam
-kian
-kiang
-kibler
-kidd
-kiebel
-kiecksee
-kiefer
-kiel
-kiele
-kielstra
-kiely
-kiem
-kien
-kien-ngh
-kienan
-kiennghi
-kiens
-kieran
-kiernan
-kieron
-kiersten
-kiet
-kieunga
-kiger
-kigyos
-kihyen
-kijin
-kikelia
-kiki
-kikki
-kiko
-kikuchi
-kikuta
-kilbank
-kilburn
-kilby
-kilcoin
-kilcoyne
-kile
-kiley
-kilgore
-kilian
-killam
-killeen
-killen
-killer
-killian
-killie
-killy
-kilner
-kilpatri
-kilsaas
-kilzer
-kim
-kim-elee
-kim-minh
-kim-stac
-kim-tram
-kimball
-kimbarov
-kimbell
-kimberle
-kimberli
-kimberly
-kimble
-kimbo
-kimbra
-kimbrell
-kimbroug
-kimeleen
-kimi
-kimihiko
-kimiko
-kimio
-kimler
-kimm
-kimma
-kimme
-kimmett
-kimmi
-kimmie
-kimmo
-kimmy
-kimoto
-kimstace
-kimura
-kin
-kin-wai
-kin-yee
-kinahan
-kinamon
-kincaid
-kinch
-kindel
-kindem
-kindra
-king
-king-hau
-kingaby
-kingan
-kingdon
-kingrey
-kingsbur
-kingshot
-kingslan
-kingsley
-kingsly
-kingston
-kingzett
-kinh
-kinley
-kinman
-kinna
-kinnaird
-kinney
-kinnibur
-kinnie
-kinny
-kinos
-kinoshit
-kinrys
-kinsella
-kinsey
-kinsley
-kinsman
-kinson
-kinstley
-kinstry
-kip
-kipling
-kipnis
-kipp
-kippar
-kipper
-kippie
-kippy
-kira
-kirady
-kirbee
-kirbie
-kirby
-kirchner
-kirchoff
-kirfman
-kiri
-kirit
-kirk
-kirkby
-kirkenda
-kirkham
-kirkland
-kirkley
-kirkpatr
-kirkwood
-kirley
-kirn
-kirouac
-kirsi
-kirsten
-kirsteni
-kirsti
-kirstie
-kirstin
-kirstyn
-kirt
-kirtikum
-kish
-kishi
-kishor
-kishore
-kissee
-kissiah
-kissie
-kistner
-kit
-kita
-kitajima
-kitrick
-kitson
-kitt
-kitti
-kittie
-kittinge
-kitty
-kitzmill
-kivell
-kiwon
-kiyohara
-kiyoharu
-kiyoon
-kizzee
-kizzie
-kjeld
-kjell
-klaas
-klaassen
-klammer
-klamner
-klapper
-klapphol
-klara
-klarika
-klarrisa
-klashins
-klasky
-klassen
-klatchko
-klaudia
-klaudiny
-klaudt
-klaus
-klavkaln
-klazien
-klazina
-klebsch
-klein
-klemens
-klement
-kleon
-klepping
-kletchko
-klett
-kleynenb
-klier
-klimas
-kliment
-klimon
-kline
-kling
-klingspo
-klink
-klod
-klodt
-klosterm
-kloth
-klotz
-klowak
-klug
-kluger
-kluke
-klutts
-kmem
-knapp
-knappe
-knapper
-knapton
-knecht
-kneedler
-kneese
-kneeshaw
-kneisel
-knes-max
-kness
-knickerb
-knieps
-knighten
-knighton
-knio
-knipe
-knitl
-knittel
-knobeloc
-knobloch
-knorp
-knorr
-knouse
-knowles
-knox
-knudsen
-knut
-knute
-ko
-ko-yang
-koa
-koang
-koay
-kobayash
-kobeski
-kobiersk
-koblitz
-kobreek
-koch
-kochansk
-kochis
-kodmur
-kodnar
-kodsi
-kody
-koelbl
-koeller
-koellner
-koeman
-koen
-koenraad
-koens
-koerner
-kogan
-kogelnik
-kohalmi
-kohalmi-
-kohl
-kohler
-kohm
-kohn
-kohnhors
-kohut
-koichi
-koiste
-koji
-kok
-kok-khia
-kokkat
-koko
-kokoska
-kokosopo
-kolahi
-kolappa
-kolavenn
-kolb
-kolbe
-koldinge
-kolek
-kolenda
-kolesnik
-koleyni
-kolk
-kolkka
-kollen
-koller
-kollman
-kollmorg
-kolodiej
-kolodzie
-kolos
-kolovson
-kolski
-kolton
-koman
-komaromi
-komatsu
-komenda
-komorows
-konarski
-konda
-kondagun
-konforti
-kong
-kong-que
-koning
-konno
-konomis
-konrad
-konradi
-konstan
-konstanc
-konstant
-konstanz
-koo
-koohgoli
-koohi
-koolstra
-koolwine
-koonce
-koontz
-kooyoung
-kopala
-kopell
-kopfman
-kopke
-koprulu
-kora
-koral
-koralle
-koran @
-koray
-korbe
-korbel
-korda
-kordik
-kordon
-kordula
-kore
-korea
-korean
-korek
-korella
-koren
-koressa
-korest
-korey
-korf
-kori
-korie
-korn
-kornachu
-kornegay
-korney
-kornitze
-korpela
-korrie
-korry
-kort
-kortekaa
-kortje
-kory
-kos
-kosarski
-kosasih
-kosiorsk
-kositpai
-koskie
-koskinen
-koslowsk
-kosman
-kosnaski
-kosowan
-koss
-kostas
-kosten
-koster
-kostowsk
-kosturik
-kostyniu
-kot
-kotamart
-kotaro
-kotler
-kotval
-kotyk
-kou
-kou-yuan
-kouba
-kouhi
-kouichir
-kouidis
-kouji
-kouyuan
-kovac
-kovacs
-koval
-kovarik
-kovats
-koverzin
-kowal
-kowalcze
-kowalesk
-kowalkow
-kowallec
-kowalski
-kowalsky
-koyang
-kozak
-kozelj
-koziol
-kozlowsk
-kozsukan
-kozuch
-kozyra
-kpodzo
-krabicka
-kraehenb
-krajacic
-krajesky
-krakowet
-kramar
-kramer
-kranenbu
-krater
-kratz
-krauel
-kraus
-krausbar
-krause
-krautle
-krawchuk
-krawec
-kreiger
-kreimer
-krenn
-krenos
-kresl
-kretsch
-krick
-kridle
-krieg
-kriegler
-krienke
-krier
-kriko
-krikoria
-krinda
-kring
-kris
-krisa
-krisha
-krishan
-krishin
-krishink
-krishna
-krishnah
-krishnam
-krishnan
-krishnas
-krispin
-krissie
-krissy
-krista
-kristal
-kristan
-kriste
-kristel
-kristen
-kristi
-kristian
-kristie
-kristien
-kristin
-kristina
-kristine
-kristjan
-kristo
-kristofe
-kristoff
-kristofo
-kriston
-kristoph
-kristos
-kristy
-kristyn
-kriton
-krivossi
-kriz
-krodel
-kroeger
-krogh
-krol
-kroman
-kromer
-krone
-krotish
-krousgri
-krowlek
-krozser
-krten
-krueger
-krug
-kruger
-krull
-krummell
-krumwied
-kruse
-kruuseme
-kruziak
-krym
-krysia
-kryski
-krysko
-krysta
-krystal
-krystall
-krystle
-krystn
-krystyna
-krzyszto
-ktusn
-ku
-kuan
-kuang
-kuang-ts
-kubash
-kube
-kubik
-kubitsch
-kuchelme
-kuchinsk
-kuchta
-kucirek
-kuczynsk
-kudas
-kudrewat
-kue
-kuechler
-kuehn
-kuehne
-kuhfus
-kuhlkamp
-kuhn
-kuhns
-kui
-kui-soon
-kuivinen
-kujanpaa
-kulachan
-kuldip
-kulhy
-kulik
-kulikows
-kulinski
-kulkarni
-kulman
-kum
-kum-meng
-kumagai
-kumamoto
-kumar
-kumares
-kumi
-kummer
-kun
-kun-ming
-kundanma
-kundel
-kundert
-kunecke
-kung
-kung-chi
-kungchia
-kunie
-kunihiko
-kunitaka
-kuniyasu
-kunjal
-kunkel
-kunming
-kuntova
-kunz
-kunze
-kuo
-kuo-chua
-kuo-feng
-kuo-lian
-kuochuan
-kuofeng
-kuoliang
-kupe
-kupfer
-kupferma
-kupfersc
-kupidy
-kupitz
-kuracina
-kurash
-kurauchi
-kurczak
-kurdas
-kurdziel
-kure
-kureshy
-kurian
-kurio
-kurita
-kurniawa
-kurolapn
-kurose
-kurowski
-kursell
-kurt
-kurth
-kurtis
-kurtz
-kuruppil
-kuryliak
-kurylyk
-kus
-kusan
-kushan
-kushner
-kushnir
-kushwaha
-kushwind
-kusmider
-kusum
-kusumaka
-kuswara
-kusyk
-kutac
-kutch
-kutger
-kutschke
-kutten
-kuykenda
-kuzbary
-kuzemka
-kuzyk
-kuzz
-kvochak
-kwa
-kwak
-kwan
-kwang
-kwang-ch
-kwang-lu
-kwangchi
-kwangchu
-kwanglu
-kwangsoo
-kwant
-kwast
-kwee
-kwei
-kwei-san
-kwiatkow
-kwing
-kwissa
-kwock
-kwok
-kwok-cho
-kwok-kin
-kwok-lan
-kwok-san
-kwok-wa
-kwokchoi
-kwokkin
-kwoksang
-kwong
-ky
-kydd
-kye-hong
-kyehong
-kyeong
-kyla
-kyle
-kylen
-kyler
-kylie
-kylila
-kylo
-kylynn
-kym
-kynthia
-kyoko
-kyomun
-kyoon
-kyoung
-kyrie
-kyrstin
-kyu
-kyu-sung
-kyung
-kyungchu
-kyungyoo
-kyusung
-kyzer
-l'anglai
-l'ecuyer
-l'heureu
-l;urette
-la
-la verne
-laale
-lab
-laba
-labarge
-labauve
-labelle
-labenek
-laberge
-labfive
-labiche
-labonte
-labossie
-labrador
-labranch
-labrie
-labrinos
-labuhn
-lac
-lacasse
-lacee
-lacelle
-lacey
-lachambr
-lachance
-lachine
-lachowsk
-lachu
-lacie
-lackenba
-lackie
-lackmann
-lacombe
-lacosse
-lacoste
-lacroix
-lacy
-ladan
-ladasky
-ladd
-ladean
-ladell
-ladet
-ladonna
-ladouceu
-ladva
-ladymon
-laetitia
-lafarge
-lafargue
-lafata
-lafayett
-laferrie
-lafever
-lafferty
-laflamme
-lafleur
-lafontai
-laforge
-laframbo
-lafrance
-lagace
-lagache
-lagarde
-lagrande
-lagrange
-lahaie
-lahaye
-lahey
-lahlum
-lahteenm
-lai
-laidlaw
-laila
-laina
-laine
-lainesse
-lainey
-laing
-laird
-laitinen
-lajzerow
-laker
-lakhani
-lakhian
-lakier
-lakins
-lakoff
-lakshan
-lakshmi
-lakshmin
-lalani
-lali
-lalibert
-lalit
-lalitha
-lalka
-lally
-lalo
-lalonde
-lalu
-lamar
-lamarche
-lamarque
-lamarre
-lambert
-lambregt
-lamedica
-lamers
-lamey
-lamia
-lamirand
-lamm
-lammond
-lamond
-lamonde
-lamont
-lamontag
-lamoreux
-lamothe
-lamotte
-lamouche
-lamoureu
-lampe
-lampert
-lamphier
-lampman
-lamport
-lamy
-lan
-lana
-lanae
-lanava
-lancaste
-lance
-lancelot
-lanctot
-land
-landaver
-landay
-lande
-lander
-landers
-landis
-landman
-landon
-landriau
-landry
-lane
-lanette
-laney
-lang
-langdon
-lange
-langelie
-langenbe
-langer
-langett
-langevin
-langford
-langlais
-langley
-langlois
-langner
-langsdon
-langstaf
-langston
-langton
-lani
-lanie
-laniel
-lanier
-lanita
-lankford
-lanna
-lannan
-lanni
-lannie
-lanny
-lanoe
-lanoszka
-lanoue
-lanouett
-lans
-lansuppo
-lanteign
-lanthier
-lantos
-lantto
-lantz
-lanunix
-lanwan
-lanz
-lanzkron
-lao
-lap
-lapchak
-lapierre
-lapkin
-laplace
-laplante
-lapointe
-laporte
-lapostol
-lappan
-laprade
-lapre
-laprise
-lapsley
-laquinta
-lar
-lara
-larabie
-laraia
-laraine
-larche
-lareine
-larese
-lari
-larimer
-larin
-larina
-larine
-larisa
-larissa
-larivier
-lark
-larkin
-larkins
-larmour
-larn
-larner
-laroche
-larock
-larocque
-larose
-larribea
-larrigan
-larry
-lars
-larsen
-larson
-larstone
-larue
-laruffa
-larus
-larwill
-lary
-larysa
-laryssa
-las
-lasch
-laschuk
-laser
-laserjet
-lash
-lashansk
-lasher
-lashmit
-lashonda
-lask
-laskaris
-laskin
-laslo
-lasserre
-lassig
-lassiter
-lasson
-lassonde
-laster
-latashia
-latchfor
-latella
-laten
-latessa
-latha
-lathangu
-lathrop
-latia
-latif
-latin
-latisha
-latonia
-latonya
-latorre
-latour
-latreill
-latrena
-latrina
-lattanzi
-latulipp
-lau
-laubenhe
-lauderda
-laufer
-laugher
-laughlin
-laughrid
-laughton
-launce
-laura
-lauraine
-laural
-lauralee
-lauramae
-laure
-laureano
-lauree
-laureen
-laurel
-laurella
-lauren
-laurena
-laurence
-laurene
-laurens
-laurent
-lauretta
-laurette
-lauri
-lauria
-lauriann
-lauriaul
-laurice
-laurich
-laurie
-laurier
-laurilyn
-laurin
-laurine
-lauris
-lauristo
-lauritz
-laurna
-lauro
-laursen
-lauruhn
-laury
-lauryn
-lauson
-lauten
-lauther
-laux
-lauze
-lauzon
-lavagno
-lavallee
-lavar
-lavarnwa
-lavecchi
-laveda
-lavelle
-lavena
-lavergne
-laverna
-laverne
-lavers
-laverty
-lavictoi
-lavictor
-lavigne
-laville
-lavina
-lavinia
-lavinie
-laviolet
-lavoie
-lavonda
-lavorata
-law
-lawbaugh
-lawler
-lawless
-lawlis
-lawlor
-lawrence
-lawrie
-lawry
-laws
-lawson
-lawther
-lawton
-lay
-layanand
-layer
-layla
-layne
-layney
-layton
-laz
-lazar
-lazare
-lazaro
-lazarou
-lazarowi
-lazarus
-lazer
-lazlo
-lazure
-lazzara
-lcarrol
-le
-lea
-leader
-leads
-leafloor
-leah
-leahy
-leander
-leandra
-leang
-leann
-leanna
-leanne
-leanor
-leanora
-leaphear
-leary
-leatham
-leathers
-leaton
-leatrice
-leavell
-leaver
-leavitt
-lebaron
-lebars
-lebbie
-lebeau
-lebel
-leblanc
-leblond
-lebo
-lebon
-lecandro
-lecien
-leckie
-leclair
-leclaire
-leclerc
-lecompte
-lecours
-lecouteu
-leda
-ledamun
-leddy
-leder
-lederman
-ledet
-ledford
-ledinh
-ledou
-ledoux
-ledu
-leduc
-ledwell
-lee
-lee-anne
-leeann
-leeanne
-leecia
-leela
-leelah
-leeland
-leena
-leendert
-leenher
-leesa
-leese
-leeson
-leeuwen
-lefebvre
-lefevre
-leffler
-leftwich
-lefty
-legeny
-leger
-legg
-leggett
-legolas
-legra
-legrandv
-legris
-legros
-legrove
-legrow
-legs
-leguen
-lehar
-lehman
-lehmann
-lehrbaum
-lehtinen
-lehtovaa
-lei-see
-leia
-leiba
-leibich
-leibovit
-leibowit
-leiceste
-leicht
-leidenfr
-leiding
-leif
-leigh
-leigha
-leighann
-leighton
-leiker
-leil
-leila
-leilah
-leima
-lein
-leinen
-leisa
-leisha
-leistico
-leita
-leitch
-leite
-leith
-leitman
-leitner
-leitrick
-leiwe
-lek
-lela
-lelah
-leland
-lelia
-lem
-lemaire
-lemar
-lemay
-lemieux
-lemky
-lemley
-lemmie
-lemmy
-lemuel
-lemyre
-len
-lena
-lenard
-lenathen
-lenci
-lendon
-lenee
-lenee'
-lenehan
-lenelle
-lenette
-leney
-lengel
-lenhard
-leni
-lenin
-lenior
-lenir
-lenka
-lenna
-lennard
-lennart
-lennie
-lennig
-lenny
-leno
-lenora
-lenore
-lenox
-lentz
-leny
-lenz
-lenzi
-leo
-leo-miza
-leocadio
-leodora
-leoine
-leola
-leoline
-leon
-leona
-leonanie
-leonard
-leonardo
-leonas
-leone
-leonelle
-leonerd
-leong
-leonhard
-leonid
-leonida
-leonidas
-leonie
-leonor
-leonora
-leonore
-leontine
-leontyne
-leopold
-leora
-leoutsar
-leow
-lepage
-lepine
-lepore
-leppert
-lepreau
-lerch
-leres
-leroi
-leroux
-leroy
-les
-lesa
-lesco
-lescot
-leshia
-leshowit
-lesia
-lesley
-lesli
-leslie
-lesly
-lesmeris
-lesniak
-lesourd
-lesperan
-lessard
-lessin
-lester
-lesway
-lesya
-leta
-letarte
-letchwor
-letendre
-leth
-letha
-lethbrid
-lethebin
-lethia
-leticia
-letisha
-letitia
-letizia
-letourne
-letsome
-lett
-letta
-lettang
-letti
-lettie
-letty
-letulle
-leuenber
-leung
-leupold
-leuty
-lev
-levac
-levasseu
-leveille
-levent
-levere
-levert
-levesque
-levey
-levi
-levin
-levine
-levis
-levisky
-levitin
-levo
-levon
-levy
-lew
-lewandow
-lewek
-lewellen
-lewes
-lewie
-lewinski
-lewis
-lewiss
-lewright
-lex
-lexi
-lexie
-lexine
-lexis
-lexy
-ley
-leyden
-leydig
-leyla
-leyton
-lezlee
-lezley
-lezlie
-lheureux
-li
-li-ming
-li-xi
-lia
-liad
-lial
-liam
-lian
-lian-hon
-liana
-liane
-liang
-liangchi
-lianna
-lianne
-liao
-lias
-liason
-liaurel
-liaw
-lib
-libadmin
-libbey
-libbi
-libbie
-libby
-liber
-libor
-libov
-libraria
-licandro
-licata
-lication
-licerio
-licha
-licht
-lichtenb
-lichtens
-lichum
-lichun
-licia
-lida
-liddell
-liddle
-lidia
-lidio
-lidster
-lidstone
-liduine
-lieberma
-liebrech
-liedl
-lief
-liem
-lien
-lieneman
-lienhard
-liepa
-liesa
-liesbeth
-liese
-liesel
-liesemer
-liesenbe
-liesie
-liesl
-lieure
-lievaart
-liew
-lifshey
-lightfie
-lightfoo
-lighthal
-lighthis
-lightowl
-ligon
-ligurs
-lijphart
-likert
-likourgi
-lil
-lila
-lilah
-lilas
-lili
-lilia
-lilian
-liliana
-liliane
-lilias
-lilin
-lilith
-lilla
-lillenii
-lilli
-lillian
-lillie
-lillien
-lillis
-lilllie
-lilly
-lily
-lilyan
-limeina
-limerick
-limin
-liming
-lin
-lin-chan
-lin-e
-lin-ni
-lina
-linas
-linaugh
-linback
-linberg
-linc
-linchang
-lincoln
-lind
-linda
-linda-jo
-lindamoo
-lindberg
-lindell
-lindemul
-linden
-lindenla
-linder
-lindholm
-lindi
-lindie
-lindler
-lindon
-lindow
-lindquis
-lindsay
-lindsey
-lindstro
-lindsy
-lindt
-lindy
-line
-linea
-linebarg
-linegar
-lineham
-linell
-linet
-lineth
-linette
-linfield
-ling
-ling-hui
-ling-yu
-ling-yue
-ling-zho
-lingafel
-linghui
-lingyan
-lingyu
-linh
-link
-linke
-linklett
-linley
-linn
-linnea
-linnell
-linnet
-linni
-linnie
-lino
-linoel
-linsley
-linton
-linus
-linwood
-linzie
-linzy
-lion
-lionel
-lionello
-liou
-lipari
-lipe
-liping
-lippens
-lippman
-lipschut
-lipscomb
-lipski
-lipton
-lira
-lisa
-lisabeth
-lisah
-lisak
-lisandro
-lisbeth
-lisch
-lischyns
-lise
-lisee
-lisenchu
-lisetta
-lisette
-lish
-lisha
-lishe
-liskoff
-lisle
-liss-mon
-lissa
-lissi
-lissie
-lissmoni
-lissy
-list
-lister
-liston
-listonic
-lita
-litherla
-litt
-littau
-littlewo
-litva
-litz
-litzenbe
-liu
-liuka
-liv
-liva
-livas
-livek
-livengoo
-liverman
-livermor
-lives
-livezey
-livia
-livingst
-livinsto
-livio
-liviu
-livnah
-livshits
-livvie
-livvy
-livvyy
-livy
-liwana
-liwen
-lixi
-liyuan
-liyun
-liz
-liza
-lizabeth
-lizak
-lizbeth
-lizette
-lizz
-lizzi
-lizzie
-lizzy
-ljiljana
-ljilyana
-ljubicic
-llacuna
-llaguno
-llanos
-llewelly
-llopart
-lloyd
-llywelly
-lo
-loa
-loadbuil
-loader
-loadsum
-loan
-loarie
-loay
-lobasso
-lobaugh
-lobello
-lober
-lobianco
-lobin
-lobue
-loc
-locicero
-lock
-lockard
-locke
-locken
-lockett
-lockhart
-lockwood
-lococo
-lodesert
-lodovico
-loe
-loeffler
-loeiz
-loel
-loella
-loes
-loesje
-loewen
-loftis
-logan
-logaraja
-loggins
-loghry
-logntp
-logue
-loh
-lohoar
-loi
-loire
-lois
-loise
-loiseau
-loisel
-lojewski
-loke
-loker
-lola
-loleta
-lolita
-lollis
-lolly
-lombard
-lombardo
-lombardy
-lombrink
-lommen
-lon
-lon-chan
-lona
-lonald
-lonchan
-londhe
-london
-lonee
-lonergan
-long
-long-chu
-longbott
-longcham
-longchun
-longdist
-longfiel
-longhenr
-longo
-longpre
-longsong
-longtin
-lonhyn
-loni
-lonidas
-lonn
-lonna
-lonnard
-lonneke
-lonni
-lonnie
-lonnman
-lonny
-lonsdale
-loo
-loon
-loong
-loos
-looyen
-lope
-loper
-loperena
-lopes
-lopez
-lopiano
-lopinski
-loponen
-loquerci
-lora
-lora-lee
-lorain
-loraine
-loralee
-loralie
-loralyn
-lorance
-lorant
-lorcan
-lord
-loree
-loreen
-lorelei
-lorelle
-lorelynn
-loren
-lorena
-lorenc
-lorene
-lorens
-lorenz
-lorenza
-lorenzen
-lorenzo
-loreta
-loretta
-lorettal
-lorette
-lorfano
-lori
-loria
-lorianna
-lorianne
-lorie
-lorien
-lorilee
-lorilyn
-lorimer
-lorin
-lorincz
-lorinda
-lorine
-loring
-lorint
-loris
-lorita
-lorletha
-lorli
-lormor
-lorna
-lorne
-loro
-lorrain
-lorraine
-lorrayne
-lorrel
-lorri
-lorrie
-lorrin
-lorrine
-lorry
-lortie
-lory
-loryn
-los
-losfeld
-losier
-loso
-losses
-lotan
-lote
-lotfalia
-lotfi
-lothaire
-lothar
-lothario
-lotochin
-lott
-lotta
-lotte
-lotti
-lottie
-lotty
-lotz
-lou
-lou-hell
-louann
-loucel
-loudiadi
-louella
-lough
-loughery
-loughran
-loughrin
-louhelle
-louie
-louiqa
-louis
-louis-ph
-louis-re
-louisa
-louise
-louisett
-louissei
-louk
-louka
-loukas
-louladak
-lourdes
-loutitia
-loux
-lovas
-lovatt
-loveday
-lovegrov
-lovejoy
-lovekin
-lovelace
-loveland
-loveless
-lovell
-lovett
-lovin
-lovina
-lovitt
-lowder
-lowe
-lowell
-lowery
-lowietje
-lowman
-lowrance
-lowrie
-lowry
-lowther
-loxton
-loy
-loyd
-loydie
-loyer
-loyola
-loyst
-loza
-lozier
-lozinski
-lpo
-lrc
-lrcrich
-lrcrtp
-lsi
-lsiunix
-lu
-luan
-luann
-luanne
-lubliner
-lubna
-lubomir
-lubomyr
-luc
-luca
-lucais
-lucas
-lucco
-luce
-lucente
-lucey
-lucho
-luci
-lucia
-lucian
-luciana
-luciani
-luciano
-lucias
-lucie
-lucien
-lucienne
-lucifer
-lucila
-lucile
-lucilia
-lucille
-lucina
-lucinda
-lucine
-lucio
-lucita
-lucius
-lucking
-lucky
-lucretia
-lucy
-ludchen
-ludovico
-ludovika
-ludvig
-ludvikse
-ludwick
-ludwig
-lue
-luella
-luelle
-luen
-luetchfo
-luetke
-luettcha
-luff
-lugsdin
-lugwig
-luh-maan
-luhcs
-luhmaan
-lui
-luigi
-luin
-luis
-luisa
-luise
-luiza
-lujanka
-luk
-luk-shun
-lukas
-lukassen
-lukaszew
-luke
-luker
-lukers
-lukic
-lukie
-lukshis
-lukshun
-lula
-lulita
-lulu
-lum
-lum-wah
-lumley
-lumsden
-lun
-luna
-lund
-lunde
-lundhild
-lundstro
-lundy
-lunk
-lunn
-luoedora
-luoma
-luong
-lupatin
-lupher
-lupien
-luping
-luquire
-lura
-lurette
-luria
-lurleen
-lurlene
-lurline
-lusa
-luscombe
-lussier
-luszczek
-lutan
-lutero
-luther
-luthin
-lutz
-luu
-luuk
-luwemba
-luxford
-luying
-luyten
-luz
-luzarrag
-luzine
-ly
-ly-khanh
-lyall
-lychak
-lyda
-lydda-ju
-lydia
-lydie
-lydon
-lyell
-lyle
-lyliston
-lyman
-lyn
-lynda
-lyndal
-lynde
-lyndel
-lyndell
-lyndia
-lyndon
-lyndsay
-lyndsey
-lyndsie
-lyndy
-lyne
-lynea
-lynelle
-lynett
-lynetta
-lynette
-lynham
-lynn
-lynna
-lynne
-lynnea
-lynnell
-lynnelle
-lynnet
-lynnett
-lynnette
-lynsey
-lynton
-lynwood
-lyon
-lyons
-lyse
-lysinger
-lyssa
-lystad
-lystiuk
-lystuik
-lysy
-lytle
-lzrd
-maahs
-maaike
-maala
-maan
-maarten
-maas
-mab
-mabel
-mabelle
-mabes
-mable
-mabson
-mabuchi
-mac
-mac maid
-macadams
-macalik
-macarthu
-macaulay
-macbride
-maccallu
-maccarth
-macchius
-maccombi
-macconai
-maccorma
-macderma
-macdonal
-macdonel
-macdouga
-macdowal
-macduff
-mace
-macelwee
-macfarla
-macgilli
-macgrego
-mach
-machan
-machatti
-machika
-machnick
-maciej
-maciejew
-maciel
-macinnes
-macinnis
-macisaac
-maciver
-mack
-mackay
-mackel
-mackenzi
-mackey
-mackin
-mackinno
-macklem
-macklin
-mackzum
-maclaren
-maclauri
-maclean
-maclella
-maclenna
-macleod
-macmarti
-macmeeki
-macmilla
-macmulli
-macnaugh
-macneil
-macneill
-macnicol
-macoosh
-macphail
-macphers
-macpost
-macquist
-macrae
-macreyno
-macsuppo
-mada
-madalena
-madalene
-madalyn
-madan
-madani
-maddalen
-maddi
-maddie
-maddix
-maddox
-maddy
-madel
-madelain
-madelein
-madelena
-madelene
-madelin
-madelina
-madeline
-madella
-madelle
-madelon
-madelyn
-mader
-madge
-madgett
-madhav
-madhavan
-madhu
-madhukar
-madigan
-madill
-madisett
-madison
-madl
-madlen
-madlin
-mado
-madonna
-madras
-madsen
-maduri
-mady
-mae
-maegan
-maennlin
-maenpaa
-maeya
-mag
-magbee
-magda
-magdaia
-magdale
-magdalen
-magdi
-magdiel
-magdy
-mage
-maged
-magee
-mages
-maggee
-maggi
-maggie
-maggy
-maghsood
-maginley
-maglione
-magnan
-magnolia
-magnum
-magnuson
-magnusse
-magnusso
-magrath
-magri
-mags
-maguire
-mah
-mahaffee
-mahala
-mahalia
-mahaling
-mahbeer
-mahboob
-mahendra
-maher
-mahesh
-maheu
-maheux
-mahfouz
-mahibur
-mahiger
-mahin
-mahlen
-mahlig
-mahlon
-mahmood
-mahmoud
-mahmud
-mahmut
-mahn
-mahon
-mahonen
-mahoney
-mahoney-
-mahshad
-mai
-maia
-maible
-maid
-maidenhe
-maidens
-maidisn
-maidlab
-maidsir
-maidxpm
-maier
-maiga
-maighdil
-maijala
-maika
-maikawa
-maikhanh
-mail
-mailroom
-mainardi
-maine
-mainoo
-maint
-mainvill
-mainwari
-mair
-maire
-maisey
-maisie
-maison
-maisonne
-maitilde
-maitland
-maitreya
-majd
-maje
-majeed
-majek
-majella
-majernik
-majid
-majmudar
-major
-majors
-majumdar
-majury
-mak
-makam
-makarand
-makarenk
-makary
-makeda
-makiko
-makino
-makinson
-makohoni
-makoid
-makoto
-maksoud
-maksuta
-mal
-mala
-malachi
-malaclyp
-malaher
-malaika
-malaivon
-malam
-malani
-malanie
-malanos
-malavia
-malaysia
-malchy
-malcolm
-malden
-malec
-malee
-malek
-malena
-maleski
-malethia
-malgorza
-malgosia
-malhi
-malhotra
-malia
-maliepaa
-malik
-malina
-malinda
-malinde
-malisic
-maliski
-malissa
-malissia
-malizia
-malkani
-malkiewi
-malkinso
-mallari
-malle
-mallejac
-maller
-mallett
-mallik
-mallissa
-mallorie
-mallory
-malloy
-mallozzi
-malmqvis
-malone
-maloney
-malorie
-malory
-malott
-malta
-maltby
-maltese
-maludzin
-malus
-malva
-malvin
-malvina
-malynda
-malynne
-malynows
-malyszka
-malzahn
-mame
-mami
-mamie
-mamikuni
-mamoru
-mamoulid
-man
-man-fai
-manageme
-manager
-manahil
-manalac
-manami
-manas
-manavend
-manceau
-manchest
-mancini
-mand
-manda
-mandana
-mandayam
-mandel
-mandevil
-mandi
-mandie
-mandrusi
-mandruso
-mandy
-maneatis
-manek
-maness
-manette
-manfred
-manfredo
-mang
-mangione
-mangum
-manh
-manhatte
-mani
-manica
-manickam
-manijeh
-manilal
-manimozh
-maninder
-manish
-manitius
-manitsas
-manjari
-manjeri
-manjinde
-manjit
-manjrike
-mankowsk
-manley
-manli
-manly
-manmohan
-mann
-manna
-manner
-manners
-mannie
-manning
-mannino
-mannion
-manno
-manny
-mano
-manoel
-manoharm
-manoj
-manol
-manolios
-manolis
-manolo
-manon
-manou
-manouch
-manoukia
-mansbrid
-mansell
-manshih
-mansi
-manson
-mansour
-mansoura
-mansouri
-mansukha
-mansum
-mantell
-manto
-manuel
-manuela
-manus
-manuszak
-manverse
-manwarin
-manya
-mao
-maohua
-mapes
-mapile
-mapp
-mar
-mara
-marabel
-maracle
-maragoud
-marano
-marasco
-marasliy
-marc
-marc-and
-marc-ant
-marcanti
-marcanto
-marce
-marceau
-marcel
-marcela
-marcelia
-marcelis
-marcella
-marcelle
-marcelli
-marcello
-marcellu
-marcelo
-marcey
-march
-marchall
-marchand
-marchant
-marcheck
-marchell
-marchese
-marchett
-marci
-marcia
-marcie
-marcile
-marcilie
-marcille
-marciniu
-marcio
-marco
-marcom
-marconi
-marcos
-marcotte
-marcoux
-marcum
-marcus
-marcy
-mardi
-marea
-mareah
-marek
-marella
-maren
-marena
-marenger
-maressa
-marette
-marg
-marga
-margalit
-margalo
-margaret
-margarie
-margarit
-margaux
-marge
-margeaux
-margery
-marget
-margetso
-margette
-margheri
-margheti
-margi
-margie
-margit
-margitta
-margo
-margot
-margret
-margriet
-margueri
-margy
-marhta
-mari
-maria
-mariabel
-mariaele
-mariaisa
-mariam
-marian
-mariana
-mariani
-mariann
-marianna
-marianne
-maribel
-maribell
-maribeth
-marice
-maridel
-marie
-marie-an
-marie-je
-marie-jo
-marie-lu
-marie-na
-marieann
-mariejea
-marieka
-marieke
-mariel
-mariela
-mariele
-marielle
-mariesar
-mariet
-marietta
-mariette
-marigold
-marijke
-marijn
-marijo
-marika
-mariland
-marilee
-marilin
-marillin
-marily
-marilyn
-marilynn
-marin
-marina
-marinaro
-marineau
-marinett
-marinna
-marino
-marinos
-mario
-marion
-mariotti
-mariou
-mariquil
-maris
-marisa
-marisca
-marisela
-mariska
-marissa
-marit
-marita
-maritan
-maritsa
-maritza
-marius
-mariya
-mariza
-marj
-marja
-marjan
-marje
-marjean
-marjet
-marji
-marjie
-marjo
-marjoke
-marjolei
-marjorie
-marjory
-marjy
-mark
-markell
-markes
-marketa
-marketin
-markham
-markiewi
-markins
-markland
-markle
-markm
-markmeye
-marko
-markos
-markovic
-marks
-markus
-marla
-marlaine
-marlane
-marleah
-marleau
-marlee
-marlee-j
-marleejo
-marleen
-marlena
-marlene
-marley
-marlie
-marlies
-marlin
-marline
-marling
-marlo
-marloes
-marlon
-marlow
-marlowe
-marlsela
-marlyn
-marlyne
-marmaduk
-marmen
-marmillo
-marmion
-marna
-marne
-marneris
-marney
-marni
-marnia
-marnie
-marnix
-maroucho
-maroun
-marples
-marquart
-marquez
-marquita
-marr
-marra
-marrec
-marren
-marrett
-marriet
-marrilee
-marriott
-marris
-marrissa
-marron
-marrone
-marryann
-mars
-marscha
-marschew
-marsden
-marsh
-marsha
-marshal
-marshall
-marshaus
-marshman
-marsie
-marsiell
-marson
-marston
-mart
-marta
-martainn
-martel
-martell
-martelle
-marten
-martens
-martenso
-martenst
-martguer
-martha
-marthe
-marthena
-marti
-martica
-martie
-martijn
-martin
-martina
-martince
-martinci
-martine
-martinea
-martinez
-marting
-martino
-martins
-martinus
-martita
-marttine
-marturan
-marty
-martyn
-martynne
-marui
-marum
-maruszak
-maruszew
-marv
-marve
-marvel
-marvell
-marven
-marvette
-marvin
-marwan
-marwin
-marx
-mary
-mary-ann
-mary-ell
-mary-jan
-mary-jo
-mary-mic
-mary-pat
-marya
-maryak
-maryam
-maryann
-maryanna
-maryanne
-marybell
-marybeth
-maryelle
-maryjane
-maryjo
-marykate
-marykay
-maryl
-marylee
-marylin
-marylind
-marylou
-marylynn
-marymarg
-maryn
-maryrose
-marys
-marysa
-maryse
-marysue
-maryvonn
-marzella
-marzullo
-masa
-masahiro
-masako
-masales
-masamich
-masanao
-masanobu
-masao
-masapati
-masaru
-masciare
-masha
-mashura
-masika
-masini
-maskell
-maskery
-maslen
-maso
-mason
-masood
-masooda
-masotti
-masoud
-masse
-massengi
-massey
-massicot
-massimil
-massimo
-massinga
-masson
-massone
-massonne
-massoud
-massoudi
-massumi
-mastella
-mastenbr
-masterpl
-masters
-masterso
-mastrang
-mastroma
-mastrona
-masty
-mat
-mata
-mataga
-matalon
-matatall
-matelda
-mateo
-materkow
-materna
-mathe
-mather
-matheson
-mathew
-mathews
-mathewso
-mathian
-mathias
-mathieso
-mathieu
-mathilda
-mathilde
-mathis
-mathiue
-mathur
-mathurin
-mathus
-matias
-matibag
-matilda
-matilde
-matlock
-matney
-matrin
-matrundo
-mats
-matson
-matsubar
-matsugu
-matsunag
-matsushi
-matsuzak
-matsuzaw
-matt
-matteau
-matteo
-mattes
-matthaeu
-mattheus
-matthew
-matthews
-matthias
-matthieu
-matthiew
-matthus
-matti
-mattias
-mattie
-mattiuss
-mattiuz
-matton
-mattson
-matty
-matusik
-mau
-mau-pin
-mauck
-maud
-maudalis
-maude
-maudie
-maudrie
-maudy
-mauer
-mauldin
-maund
-mauney
-maunu
-maupin
-maura
-maure
-maureen
-maureene
-maurene
-maurer
-maurice
-mauricio
-maurie
-maurijn
-maurine
-maurino
-maurise
-maurita
-maurits
-maurizia
-maurizio
-mauro
-maury
-maveety
-mavis
-mavra
-mavrou
-mawani
-mawji
-mawst
-max
-maxey
-maxi
-maxie
-maxim
-maximili
-maximo
-maxin
-maxine
-maxseine
-maxsom
-maxwell
-maxy
-may
-maya
-mayaram
-mayasand
-maybee
-maybelle
-maycel
-maycock
-maye
-mayea
-mayenbur
-mayer
-mayes
-mayeul
-mayfield
-mayhugh
-mayi
-maylynn
-mayman
-maynard
-mayne
-maynes
-maynie
-maynord
-mayo
-mayor
-mayoux
-mayr
-mayr-ste
-mays
-mayumi
-mayya
-mazahir
-mazanji
-mazarick
-mazen
-mazey
-mazlack
-mazurek
-mazyar
-mazzei
-mbrose
-mc
-mc alpin
-mc ginn
-mcadam
-mcadams
-mcadorey
-mcafee
-mcalear
-mcaleer
-mcaliste
-mcallist
-mcallum
-mcandrew
-mcarthur
-mcateer
-mcaulay
-mcauliff
-mcbeth
-mcbrayne
-mcbride
-mcbroom
-mcbryan
-mccabe
-mccaffer
-mccaffit
-mccaffre
-mccaig
-mccain
-mccall
-mccalla
-mccallen
-mccallum
-mccampbe
-mccandle
-mccann
-mccarrel
-mccarrol
-mccarron
-mccarthy
-mccartin
-mccartne
-mccarty
-mccaughe
-mccauley
-mccaw
-mcclain
-mcclarre
-mcclary
-mcclean
-mccleery
-mcclella
-mcclendo
-mcclenno
-mcclinto
-mccloske
-mcclough
-mcclure
-mccluske
-mcclymon
-mccoll
-mccollam
-mccollum
-mccolman
-mccomb
-mccombs
-mcconagh
-mcconkey
-mcconnel
-mcconney
-mccord
-mccorkel
-mccorkle
-mccormac
-mccormic
-mccorquo
-mccoy
-mccoy-ca
-mccracke
-mccrain
-mccraney
-mccray
-mccready
-mccreano
-mccrear
-mccreath
-mccreesh
-mccrimmo
-mccuaig
-mccue
-mccullen
-mcculloc
-mccullog
-mccullou
-mccully
-mccune
-mccurdy
-mccusker
-mcdade
-mcdaniel
-mcdavitt
-mcdermot
-mcdevitt
-mcdonald
-mcdonnel
-mcdonoug
-mcdoom
-mcdougal
-mcdowall
-mcdowell
-mcduffie
-mcdunn
-mceacher
-mcelderr
-mcelhone
-mcelligo
-mcellist
-mcelrea
-mcelroy
-mcevoy
-mcewan
-mcewen
-mcewen-r
-mcfadden
-mcfall
-mcfarlan
-mcfeely
-mcgallia
-mcgarry
-mcgaughe
-mcgee
-mcgehee
-mcgeown
-mcghee
-mcgill
-mcgillic
-mcgillvr
-mcgilly
-mcginley
-mcginn
-mcglynn
-mcgonagl
-mcgoniga
-mcgorman
-mcgough
-mcgovern
-mcgowan
-mcgracha
-mcgrath
-mcgregor
-mcgruder
-mcguigan
-mcguinne
-mcguire
-mcgurn
-mchale
-mchan
-mcharg
-mchugh
-mcilrath
-mcilroy
-mcinerne
-mcinnis
-mcintee
-mcintire
-mcintomn
-mcintosh
-mcintyre
-mcisaac
-mciver
-mckay
-mckeage
-mckeague
-mckearne
-mckechni
-mckee
-mckeegan
-mckeen
-mckeigha
-mckeitha
-mckenna
-mckenney
-mckenzie
-mckeone
-mckeown
-mckerrow
-mckibben
-mckibbin
-mckibbon
-mckie
-mckillop
-mckinlay
-mckinley
-mckinney
-mckinnon
-mcknelly
-mcknight
-mckusick
-mclachla
-mclaren
-mclauchl
-mclaughl
-mclawhon
-mclawhor
-mclean
-mclellan
-mclemore
-mclenagh
-mclendon
-mclennan
-mcleod
-mcluskie
-mcmahan
-mcmahon
-mcmanis
-mcmann
-mcmannen
-mcmanus
-mcmaster
-mcmeegan
-mcmenami
-mcmichae
-mcmillan
-mcmillen
-mcmillia
-mcmillio
-mcminn
-mcmonagl
-mcmullen
-mcmullin
-mcmurray
-mcnab
-mcnabb
-mcnair
-mcnally
-mcnamara
-mcnamee
-mcnaught
-mcneal
-mcnealy
-mcneely
-mcneese
-mcneil
-mcneill
-mcneilly
-mcnerlan
-mcnerney
-mcnichol
-mcnicol
-mcniel
-mcnitt
-mcnulty
-mcphaden
-mcphail
-mcphee
-mcpherso
-mcquaid
-mcquaig
-mcquarri
-mcqueen
-mcrae
-mcrann
-mcready
-mcritchi
-mcronald
-mcruvie
-mcshane
-mcsheffr
-mcsorley
-mcsween
-mctaggar
-mctavish
-mctierna
-mcturner
-mcvay
-mcveety
-mcveigh
-mcvey
-mcvicar
-mcvicker
-mcwalter
-mcwaters
-mcwherte
-mcwhinne
-mcwhorte
-mcwilton
-mdhazali
-mduduzi
-me
-meachum
-mead
-meade
-meadows
-meads
-meagan
-meaghan
-meagher
-mealin
-meany
-meara
-measures
-mebine
-mechael
-meche
-mechelle
-mecher
-meckler
-meckley
-mecteau
-medefess
-medeiros
-medel
-meder
-medill
-medioni
-medlin
-medlock
-mednick
-medria
-meehan
-meeks
-meena
-meenaksh
-meer
-meera
-meerveld
-meese
-meeting
-meffe
-meg
-megan
-megen
-meggi
-meggie
-meggitt
-meggo
-meggy
-meghan
-meghani
-meghann
-megumi
-mehboob
-mehd
-mehdi
-mehelis
-mehetabe
-mehlhaff
-mehmet
-mehmud
-mehrdad
-mehrez
-mehrzad
-mehta
-mehul
-mei
-mei-jywa
-meier
-meijer
-meijywan
-meikle
-meilleur
-mein
-meining
-meir
-meiser
-meisner
-meissner
-mejdal
-mejia
-mejury
-mel
-mela
-melamie
-melana
-melani
-melania
-melanie
-melanson
-melantha
-melany
-melaura
-melba
-melberta
-melbourn
-meldia
-meldrum
-melecio
-meleg
-melek
-melesa
-meleski
-meleskie
-melessa
-meletios
-melfi
-melford
-melhem
-meli
-melicent
-melina
-melinda
-melinde
-melinie
-melisa
-melisand
-melisend
-melisent
-melissa
-melisse
-melita
-melitta
-melkild
-mella
-melli
-mellicen
-mellie
-mellisa
-mellisen
-mello
-melloney
-mellor
-melly
-melnyk
-melodee
-melodie
-melody
-meloling
-meloney
-melonie
-melony
-melosa
-melton
-melucci
-melva
-melvin
-melvina
-melvyn
-melynda
-men-kae
-menaker
-menard
-menasce
-menashi
-menashia
-mencer
-mendel
-mendelso
-mendez
-mendie
-mendolia
-mendonca
-mendorf
-mendoza
-mendy
-menechia
-menendez
-meng
-mengly
-menkae
-menke
-menna
-mennie
-menon
-menqiong
-mensch
-mensinka
-mentor
-menyhart
-menzel
-menzies
-mer
-merat
-merb
-mercedes
-mercer
-merci
-mercie
-mercier
-mercilin
-mercy
-merdia
-meredeth
-meredith
-merell
-merelyn
-meres
-mereu
-meriann
-meridel
-meridew
-meridian
-meridith
-meriel
-merilee
-meriline
-merill
-merilyn
-merinder
-meris
-merissa
-meriweth
-merizzi
-merkling
-merl
-merla
-merle
-merlin
-merlina
-merline
-mermelst
-merna
-merola
-merralee
-merrel
-merrett
-merrick
-merridie
-merrie
-merriell
-merrile
-merrilee
-merrili
-merrill
-merrills
-merrils
-merrily
-merrithe
-merritt
-merry
-merryman
-merrywea
-mersch
-mersey
-mersinge
-merton
-merunix
-merv
-mervin
-mervyn
-merwin
-merworth
-merwyn
-meryl
-merylene
-meseberg
-mesirov
-meskimen
-mesko
-mesquita
-message
-messer
-messeria
-messersc
-messick
-messier
-messinge
-mesut
-meszaros
-meta
-metcalf
-metcalfe
-metelski
-meter
-metheny
-metherel
-methi
-methiwal
-methot
-methul
-metin
-metler
-metraile
-metrics
-mettrey
-metyn
-metz
-metzger
-metzler
-meubus
-meunier
-mevis
-mewa
-meyer
-meyerink
-meyers
-meza
-mezzano
-mezzoius
-mfgeng
-mgmt
-mia
-miao
-miasek
-mic
-micaela
-micah
-micahel
-miceli
-micgael
-micha
-michael
-michael-
-michaela
-michaeli
-michaell
-michaels
-michaez
-michail
-michailo
-michal
-michale
-michalos
-michaud
-micheal
-micheil
-michel
-michele
-michelin
-michell
-michella
-michelle
-michels
-michelse
-michelso
-michelus
-michi
-michial
-michie
-michiel
-michigan
-michihir
-michiko
-michiya
-mick
-mickens
-mickey
-micki
-mickie
-micklos
-micky
-mico
-micro
-microfab
-micucci
-mid
-middlebr
-middleto
-midge
-midha
-miek
-mielke
-miello
-miep
-miernik
-miers
-mierwa
-mietek
-miezitis
-migdalia
-mignault
-mignon
-mignonne
-miguel
-miguela
-miguelit
-mihaela
-mihai
-mihail
-mihan
-mihara
-mihir
-mihm
-miho
-mihran
-mika
-mikael
-mikaela
-mike
-mikel
-mikelis
-mikeloni
-mikey
-mikhail
-miki
-mikie
-mikihito
-mikkel
-miklos
-miko
-mikol
-miksik
-mikulka
-mil
-mila
-milaknis
-milakovi
-milan
-milanfar
-milanovi
-milar
-milary
-milburn
-mildred
-mildrid
-mile
-milena
-miles
-milford
-milian
-milicent
-milind
-milinkov
-milissen
-milka
-mill
-millaire
-millar
-millard
-millen
-miller
-millero
-millerwo
-millette
-milletti
-milli
-millicen
-millie
-milligan
-millisen
-millo
-milloy
-mills
-millspau
-millward
-milly
-milman
-milmine
-milne
-milner
-milo
-milor
-milotte
-milou
-milstead
-milston
-milt
-miltenbu
-miltie
-milton
-miltos
-milty
-milutino
-milway
-milzie
-mim
-mimi
-mims
-min
-min-jho
-mina
-minai
-minakata
-minako
-minami
-minard
-minas
-mincey
-minck
-minda
-mindy
-minegish
-miner
-minerva
-minesh
-minetola
-minetta
-minette
-ming
-ming-cha
-ming-chu
-ming-hue
-ming-min
-ming-pin
-ming-tzo
-ming-yua
-mingchu
-minghuei
-minghwan
-mingpin
-mingtzon
-mingyuan
-minh
-minh-phu
-minhwi
-minichil
-minjho
-minkus
-minna
-minnamin
-minne
-minnesot
-minni
-minniche
-minnie
-minnnie
-minny
-minor
-minority
-minoru
-minos
-minshall
-minsky
-minta
-minter
-minthorn
-minyard
-minzhu
-miodrag
-miof mel
-mior
-miotla
-mips
-miquela
-miquette
-mir
-mira
-mirabel
-mirabell
-miran
-miranda
-mirande
-mirarchi
-mireiell
-mireille
-mirek
-mirella
-mirelle
-mirenda
-miriam
-miriamne
-mirian
-mirilla
-mirin
-mirjam
-mirko
-mirna
-miro
-miron
-miroslav
-miroslaw
-mirza
-mis
-misbah
-mischa
-misczak
-misha
-mishina
-misium
-miskelly
-misko
-misra
-miss
-missagh
-missaili
-missie
-misslitz
-missy
-mister
-misti
-mistry
-mistulof
-misty
-misutka
-mitalas
-mitch
-mitchael
-mitchel
-mitchell
-mitchels
-mitchler
-mitesh
-mitra
-mitrani
-mitrou
-mitsui
-mitsuko
-mitsuru
-mitsuter
-mittleid
-mitzi
-mivehchi
-miwa
-miwako
-miyuki
-mizerk
-mkpwent
-mkt
-mlacak
-mlcoch
-mmail
-mmdf
-mnason
-mo
-moataz
-moazzami
-mobasher
-mobley
-mocock
-modaffer
-modesta
-modestia
-modestin
-modestos
-modestou
-modesty
-modh
-modi
-modigh
-modl
-modotto
-modula-2
-modula2
-moe
-moebes
-moel
-moen
-moening
-moeschet
-moetteli
-moffatt
-moffet
-moffett
-mofina
-moghe
-moghis
-mogridge
-moh
-moh'd
-mohajeri
-mohamad
-mohamed
-mohammad
-mohammed
-mohan
-mohandas
-mohandis
-moharram
-mohd
-mohideen
-mohler
-mohr
-mohrmann
-mohsen
-moina
-moira
-moise
-moises
-moishe
-moiz
-moizer
-moja
-mojgani
-mojtaba
-mok
-mok-fung
-mokbel
-mokhtar
-mokros
-molani
-moledina
-moleski
-moll
-mollee
-mollerus
-molli
-mollie
-molloy
-molly
-molnar
-molochko
-moloney
-molson
-molyneux
-mombourq
-mommy
-momon
-momtahan
-mona
-monachel
-monaco
-monaghan
-monah
-monahan
-monardo
-moncef
-moncion
-monck
-moncur
-mondher
-mondor
-monet
-monette
-moneypen
-monforto
-monfre
-mong
-mong-tse
-mongo
-mongtsen
-moni
-monica
-moniek
-monika
-monino
-monique
-moniter
-monling
-monn
-monro
-monroe
-monson
-montag
-montague
-montaldo
-montanez
-montange
-montanin
-montcalm
-monte
-monteene
-monteggi
-monteiro
-montelli
-montero
-monteros
-montgome
-monti
-montijo
-montmore
-montor
-montoute
-montoya
-montreal
-montreui
-montsion
-montsko
-montuno
-monty
-mony
-monzo
-moo-youn
-mooder
-moogk
-mooken
-moomey
-moon
-moondog
-mooney
-moonistt
-moorcrof
-moore
-moore-vi
-moorefie
-moorer
-moores
-moorhous
-moosavi
-mora
-moraetes
-morais
-morales
-moran
-moray
-morcinel
-mord
-mordecai
-mordecha
-morden
-mordy
-morearty
-moreau
-moree
-moreen
-morehead
-morek
-moreland
-morelli
-morena
-moreno
-moreton
-morettin
-morey
-morgan
-morgan-c
-morgana
-morganic
-morganne
-morgen
-morglan
-morgun
-mori
-moria
-moriarty
-morie
-morimoto
-morin
-morini
-morino
-moris
-morishig
-morissa
-morisset
-moritz
-moriyama
-morlee
-morley
-morly
-morna
-morneau
-morocz
-moroney
-moroz
-morra
-morreale
-morrie
-morrin
-morris
-morrison
-morrisse
-morry
-morse
-morson
-mort
-morten
-morteza
-mortie
-mortimer
-morton
-morty
-moschopo
-mose
-moseby
-moselle
-moser
-moses
-mosetta
-moshe
-moshinsk
-moshiri
-moshtagh
-moshy
-mosis
-moskalik
-mosley
-moss
-mostafa
-mostovac
-mosur
-mot
-motashaw
-motasim
-motaz
-mote
-motoko
-mototsun
-mott
-motwani
-mou
-moua
-mouat
-moubarak
-mougy
-mouillau
-moulds
-moulsoff
-moulton
-mouna
-mounir
-mountfor
-moussa
-mousseau
-moussett
-moveline
-movies
-mowat
-mowbray
-mowle
-moxham
-moxley
-moxon
-moy
-moya
-moyano
-moyce
-moyenda
-moyer
-moyers
-moyes
-moyna
-moynihan
-moyoli
-moyra
-mozart
-mozek
-mozelesk
-mozelle
-mozes
-mraz
-mrozinsk
-mrugesh
-msg
-mshia
-mtcbase
-mtl
-mtlipadm
-mtnview
-mu-cheng
-mucci
-mucheng
-muchow
-mucklow
-mudd
-mudge
-mudie
-mudry
-muehle
-mueller
-muenster
-muffin
-mufi
-mufinell
-mufti
-mugniot
-muh-cher
-muhammad
-muhammed
-muhchern
-mui
-muinck
-muir
-muire
-muise
-mujahed
-mukai
-mukhar
-mukharji
-mukherje
-mukhopad
-mukul
-mukund
-mulder
-mulders
-muldoon
-mulero
-mulherka
-mulholla
-mullaly
-mullaney
-mullarne
-mullen
-muller
-mullett
-mullin
-mullinix
-mullins
-mulmuley
-mulot
-mulqueen
-mulroney
-multispe
-mulumba
-mulvie
-mumford
-mumma
-mummy-cr
-mun-choo
-mun-hang
-munaz
-munchoon
-munden
-mundi
-mundy
-muni
-munikoti
-munir
-muniz
-munjal
-munmro
-munn
-munna
-munns
-munro
-munroe
-munsey
-munson
-munter
-munz
-munzer
-muqarrab
-muradia
-muralidh
-murash
-murat
-murawski
-murchiso
-murdaugh
-murdeshw
-murdoch
-murdock
-mureil
-murial
-muriel
-murielle
-murison
-murnagha
-muro
-murock
-murph
-murphin
-murphy
-murphy-k
-murray
-murrell
-murrill
-murrin
-murris
-murry
-murson
-murtagh
-murtaza
-murthy
-murton
-murty
-murveit
-murvyn
-musa
-musca
-musclow
-muselik
-musen
-musgrove
-musick
-mussalle
-mussar
-musselwh
-musser
-mustafa
-mustapha
-mustillo
-mutcher
-muth
-muthuswa
-mutikain
-mutsuo
-muttaqi
-muus
-muzio
-muzz
-mwa
-my
-mya
-myatt
-myca
-mycah
-mychal
-myer
-myers
-myers-pi
-myhill
-mykitysh
-myla
-myles
-mylne
-mylo
-mymryk
-myong
-myoung
-myra
-myrah
-myranda
-myre
-myriam
-myrick
-myrilla
-myrillas
-myrle
-myrlene
-myrna
-myron
-myroon
-myrta
-myrthill
-myrtia
-myrtice
-myrtie
-myrtille
-myrtle
-myrvyn
-myrwyn
-mysore
-mystkows
-myung
-myunghee
-myungho
-nabeel
-nabeil
-nabil
-nabisco
-nabors
-nace
-nachtshe
-nachum
-nad
-nada
-nadav
-nadean
-nadeau
-nadeau-d
-nadeem
-nadeen
-nadel
-nader
-nadezhda
-nadi
-nadia
-nadim
-nadine
-nadir
-nadiya
-nadler
-nadolny
-nadon
-nady
-nadya
-nae-ming
-naem
-naeming
-nafezi
-nafsika
-nagai
-nagaraj
-nagaraja
-nagaratn
-nagarur
-nagel
-nagendra
-nagenthi
-nagle
-naguib
-nagy
-nagys
-nahabedi
-nahas
-nahata
-nahid
-nahmias
-nahornia
-nahum
-naile
-naim
-naima
-naimpall
-nair
-nairn
-naismith
-najafi
-naji
-najib
-nakagome
-nakamura
-nakano
-nakatsu
-nakhla
-nakhoul
-nakina
-nakonecz
-nalani
-naldrett
-nalin
-nall
-nallenga
-nam
-nam-kiet
-nam-soo
-namasiva
-nambride
-namdar
-nami
-namiki
-namont
-namrata
-nan
-nana
-nanamiya
-nananne
-nance
-nancee
-nancey
-nanci
-nancie
-nancy
-nancyjea
-nanda
-nandakum
-nandan
-nandi
-nandita
-nando
-nanete
-nanette
-nang
-nani
-nanice
-nanine
-nannette
-nanni
-nannie
-nanny
-nanon
-naohiko
-naoko
-naolu
-naoma
-naomi
-naor
-naoto
-naoum
-nap
-naparst
-napert
-naphan
-naphtali
-napier-w
-napke
-napoleon
-napper
-nappie
-nappy
-nara
-narasimh
-narayan
-narayana
-narciso
-narda
-nardiell
-naren
-narendra
-naresh
-nari
-narida
-nariko
-narinder
-naro
-narraway
-narrima
-narron
-narsimha
-nasato
-naser
-nash
-nashib
-nashif
-nashir
-nashvill
-nasir
-nason
-nass
-nasser
-nassoy
-nassr
-nasvin
-nat
-nata
-natal
-natala
-natale
-natalee
-natalia
-natalie
-natalina
-nataline
-nataliya
-nataly
-natalya
-nataniel
-nataraja
-natascha
-natasha
-natasja
-natassia
-natassja
-natchez
-nate
-nath
-nathalia
-nathalie
-nathan
-nathanae
-nathania
-nathanie
-nathanil
-nathoo
-national
-natiuk
-nativida
-natka
-natkin
-natraj
-natty
-natver
-natvidad
-naufal
-naugle
-naujokas
-naujoks
-nault
-nava
-naval
-navalta
-navaratn
-navarre
-navarro
-naveda
-naveed
-naveen
-navid
-navneet
-nawa
-nawaby
-nayan
-naybor
-naylor
-nayman
-nayneshk
-nayyer
-nazanin
-nazardad
-nazeh
-nazi
-nazib
-nazli
-nazman
-ncc
-ndububa
-ne-regio
-neal
-neala
-neale
-neall
-nealon
-nealson
-nealy
-neamtu
-neander
-nearing
-nearyrat
-neate
-neault
-nebel
-ned
-neda
-nedda
-nedderma
-neddie
-neddy
-nedi
-needham
-neefs
-neel
-neely
-neena
-neene
-neeraj
-neetu
-nefen
-neff
-negandhi
-negar
-neghabat
-negrich
-nehemiah
-nehring
-neibauer
-neider
-neidy
-neifert
-neil
-neila
-neile
-neill
-neilla
-neille
-neilly
-neils
-neilsen
-neilson
-neisius
-neitzel
-nekueey
-nel
-nelda
-nelia
-nelie
-nelken
-nell
-nelle
-nelleke
-nelli
-nellie
-nellis
-nelly
-nelon
-nels
-nelsen
-nelson
-nemec
-nemes
-nemeth
-nemirovs
-nenad
-neng-chu
-nengchun
-nentwich
-neoh
-nerby
-nereida
-nerem
-nerissa
-nerita
-nermana
-nero
-neron
-nert
-nerta
-nerte
-nerti
-nertie
-nerty
-nesbitt
-nesralla
-ness
-nessa
-nessi
-nessie
-nessman
-nessy
-nesta
-neste
-nester
-nestor
-netas
-netdbs
-netdev
-netherso
-netick
-netlink
-neto
-netta
-netteam
-netti
-nettie
-nettle
-nettles
-netto
-netty
-network-
-networkr
-networks
-netzke
-neubauer
-neudeck
-neufeld
-neuman
-neumann
-neumeist
-neureuth
-neuschwa
-neustift
-neusy
-nev
-neva
-nevardau
-nevein
-nevil
-nevile
-neville
-nevin
-nevins
-nevison
-nevrela
-nevsa
-new
-newberry
-newbold
-newby
-newcomb
-newcombe
-newell
-newham
-newhook
-newkirk
-newlab
-newland
-newman
-newnam
-newport
-news
-newsom
-newsome
-newton
-neyer
-neyman
-neyra
-neysa
-neywick
-nezm
-nezon
-ng
-nga
-ngai
-ngai-nga
-ngaingai
-ngan
-nghia
-ngina
-ngo
-ngoc
-ngocquyn
-nguy
-nguyen
-nguyen-t
-nguyet
-nha
-nhan
-nhat
-nhien
-nhut
-nial
-niall
-niamh
-nic
-nicandro
-nicas
-niccolls
-niccolo
-nichael
-nichol
-nicholas
-nichole
-nicholl
-nicholle
-nichols
-nicholso
-nici
-nick
-nickell
-nickells
-nickels
-nickerso
-nickey
-nicki
-nickie
-nickle
-nicklin
-nicko
-nickola
-nickolai
-nickolas
-nickolau
-nickonov
-nicky
-nico
-nicol
-nicola
-nicolai
-nicolais
-nicolaou
-nicolas
-nicole
-nicolea
-nicoles
-nicolett
-nicoli
-nicolina
-nicoline
-nicolis
-nicolle
-nicolo
-nicolopu
-nicosia
-nie
-niebudek
-niedelma
-niedens
-niedra
-niedzwie
-niek
-niel
-nield
-niels
-nielsen
-nielson
-niemi
-nien
-nien-hwa
-nienhwa
-niepmann
-niepokuj
-niergart
-nigam
-nigel
-nihar
-nijen
-nik
-nikaniki
-nike
-nikfarja
-niki
-nikifori
-nikiforu
-nikita
-nikki
-nikkie
-nikky
-niklas
-niko
-nikola
-nikolai
-nikolaos
-nikolas
-nikolaus
-nikolett
-nikolia
-nikolopo
-nikolos
-nikos
-nil
-nilakant
-niles
-nilesh
-nill
-niloofar
-nils
-nilson
-nilsson
-nima
-nimesh
-nimish
-nimmo
-nimr
-nimzod
-nina
-ninetta
-ninette
-ninety-o
-ning
-ninja
-ninnetta
-ninnette
-ninno
-ninon
-nipper
-nir
-niraj
-niranjan
-nirmal
-niro
-nirwan
-nisa
-nisan
-nisbet
-nischuk
-nishan
-nishida
-nishiguc
-nishihar
-nishimot
-nishimur
-nishioka
-nishith
-nishiwak
-nishiyam
-nishizak
-nissa
-nisse
-nissie
-nissy
-nita
-nital
-nitin
-nitschky
-nitza
-nitzhe
-nitzhye
-niu
-niven
-nix
-nixie
-nixon
-nixxon
-niz
-nizam
-nizamudd
-nizar
-nizman
-nj
-njo
-nnamdi
-nnamudi
-no
-noach
-noah
-noak
-noam
-noami
-nobe
-nobel
-nobes
-nobie
-noble
-nobuko
-nobuo
-nobutaka
-nobuto
-nobuyuki
-noby
-nock
-noddin
-node
-noe
-noel
-noelani
-noell
-noella
-noelle
-noellyn
-noelyn
-noemi
-noeschka
-noffke
-noguchi
-nokes
-nola
-nolan
-nolan-mo
-nolana
-noland
-nolen
-noles
-nolet
-nolie
-noll
-nollie
-nolly
-nolter
-nomi
-nomura
-nona
-nonah
-noname
-nong
-nongqian
-noni
-nonie
-nonkes
-nonna
-nonnah
-noone
-noorani
-noorbehe
-noorbhai
-nooshin
-nopi
-nora
-norah
-noralie
-noraly
-norbert
-norberto
-norbie
-norby
-norcal
-norczen
-nordskog
-nordstro
-norean
-noreen
-norel
-norena
-norene
-norfleet
-norgaard
-norikats
-norikazu
-noriko
-norina
-norine
-norio
-noris
-norm
-norma
-norman
-normand
-normandi
-norment
-normie
-normy
-norndon
-noronha
-norri
-norrie
-norris
-norry
-norstar
-north
-northam
-northcot
-northrop
-northrup
-norton
-norval
-norvie
-norvig
-norwood
-nosewort
-noslab
-nosov
-nostrada
-notley
-nou
-noubar
-nouira
-noujeim
-nour
-nouri
-nova
-novak
-novelia
-novene
-novia
-novisedl
-novo
-novorols
-novotny
-nowak
-nowell
-nowina-k
-nowlin
-noy
-noye
-noyes
-npi
-nss
-ntelpac
-ntinash
-ntlc
-ntpadmin
-ntprel
-nttest
-nuber
-nuetzi
-nugent
-number
-nunes
-nunez
-nung
-nunn
-nunnally
-nuno
-nunold
-nuntel
-nurettin
-nurhan
-nuri
-nuria
-nurly
-nurmi
-nuttall
-nuvit
-nyaguthi
-nyberg
-nyce
-nydia
-nye
-nyeita
-nyenhuis
-nyland
-nyquist
-nyre
-nys
-nyssa
-o karina
-o'brecht
-o'brian
-o'brien
-o'carrol
-o'colmai
-o'connel
-o'conner
-o'connor
-o'dacre
-o'dale
-o'dea
-o'dell
-o'dohert
-o'donnel
-o'donova
-o'dwyer
-o'farrel
-o'grady
-o'hagan
-o'hara
-o'hearn
-o'heocha
-o'higgin
-o'keefe
-o'keeffe
-o'kelly
-o'leary
-o'malley
-o'meara
-o'murchu
-o'neal
-o'neall
-o'neil
-o'neill
-o'regan
-o'reilly
-o'rourke
-o'shaugh
-o'shea
-o'sulliv
-o'toole
-o_kelly
-oakland
-oakley
-oaks
-oam
-oanes
-oanh
-oastler
-oates
-oaul
-obadiah
-obadias
-obed
-obeda
-obediah
-obeidat
-obenauf
-ober
-oberhamm
-obermeie
-obermeye
-obermyer
-oberon
-oberpril
-obidiah
-obie
-oblak
-obrecht
-obrien
-obrusnia
-oby
-ocampo
-ochman
-ochoa
-ochs
-ocone
-oconnor
-octavia
-octavio
-octavius
-odac
-odden
-ode
-odecki
-oded
-odegaard
-odele
-odelia
-odelinda
-odell
-odella
-odelle
-oden
-odessa
-odetta
-odette
-odey
-odgers
-odie
-odile
-odilia
-odille
-odo
-odum
-ody
-oedipal
-oedipus
-oertelt
-oesterre
-oestreic
-oetting
-oey
-ofcparm
-ofcparms
-ofelia
-ofella
-ofer
-offers
-ofilia
-ogan
-ogborn
-ogburn
-ogdan
-ogden
-ogdon
-ogilvie
-oglesby
-ogrodnik
-ogua
-oguz
-ohala
-ohandley
-ohara
-ohare
-ohashi
-ohio
-ohmaru
-ohmayer
-ohn
-ohsone
-oingres
-oivind
-ojala
-ojerholm
-oka
-okada
-okafo
-okai
-okamoto
-okan
-okay
-oke
-okey
-okon
-okrafka
-oksana
-okseniuk
-oktar
-okun
-okura
-okuyama
-okuzawa
-ola
-olag
-olav
-old
-older
-oldfield
-oldham
-oldright
-ole
-oleesa
-oleksysh
-olenka
-olenolin
-olesen
-olesko
-olga
-olia
-olimpia
-olin
-olinger
-olinyk
-olivares
-olive
-oliveira
-oliver
-olivero
-olivette
-olivia
-olivie
-olivier
-oliviero
-oliy
-olken
-ollie
-olliff
-olly
-olmstead
-olness
-olof
-olsen
-olsheski
-olson
-olszewsk
-olusola
-olva
-olvan
-olwen
-olympe
-olympia
-olympie
-olynyk
-oma
-oman
-omar
-omayma
-omer
-omerine
-omero
-omid
-omori
-omura
-omyeabor
-onassis
-onder
-ondovcik
-ondrea
-oneida
-oneto
-onette
-onfre
-onfroi
-ong
-onge
-onida
-onofredo
-onsitete
-onsy
-onufrak-
-onyshko
-ooi
-oona
-oorschot
-oost
-op
-opal
-opalina
-opaline
-opalski
-open
-oper
-operatio
-operator
-ophelia
-ophelie
-oplinger
-opperman
-ops
-opsplng
-optimiza
-opto
-opus
-ora
-oral
-oralee
-oralia
-oralie
-oralla
-oralle
-oran
-orazio
-orbadiah
-orca
-ord
-ordas
-orden
-orders
-ordog
-ordway
-oreffice
-oreilly
-orel
-orelee
-orelia
-orelie
-orella
-orelle
-oren
-orenzo
-orfano
-orford
-organiza
-orgren-s
-oriana
-orie
-orin
-orion
-orla
-orlan
-orland
-orlando
-orly
-orlyn
-orme
-ormesher
-ormsby
-ornburn
-ornelas
-orol
-oros
-orpheus
-orr
-orran
-orren
-orrin
-orsa
-orser
-orsini
-orsola
-orson
-ortensia
-orth
-ortiz
-orton
-orv
-orville
-orvin
-orwell
-oryal
-osada
-osadciw
-osama
-osami
-osatuik
-osbert
-osborn
-osborne
-osbourn
-osbourne
-osburn
-oscar
-osgood
-oshinski
-oshiro
-osiakwan
-osiris
-oskar
-oskorep
-oslund
-osman
-osmond
-osmund
-osofsky
-ossama
-ossie
-ostapiw
-ostarell
-ostaszew
-oster
-osterber
-osterhou
-osterman
-ostifich
-osvaldo
-oswald
-oswalt
-oswell
-otakar
-otani
-otec
-otes
-otfried
-otha
-othelia
-othella
-othello
-othilia
-othilie
-otho
-othon
-otis
-otmar
-otsuka
-ott
-ottawa
-ottco
-ottcsr
-otter
-ottilie
-otto
-ottoman
-ottosson
-ottowa
-oturakli
-otway
-oucharek
-oue
-ouellet
-ouellett
-ouimet
-ousterho
-outage
-outhwait
-outram
-ouzas
-ovans
-ovas
-overby
-overcash
-overdyke
-overton
-oviedo
-ovila
-owen
-owens
-owensby
-owsiak
-oxendine
-oyama
-oyung
-ozalp
-ozan
-ozay
-ozer
-ozersky
-oziemblo
-oziskend
-ozkan
-ozlem
-ozmizrak
-ozmore
-ozselcuk
-ozyetis
-ozzie
-ozzy
-paar
-pablo
-pac
-pace
-pacey
-pachal
-pacheco
-pachek
-pachner
-pachulsk
-pacific
-packager
-packard
-packston
-paco
-pacon
-pacorro
-paczek
-paczynsk
-paddie
-paddon
-paddy
-paden
-padget
-padgett
-padiath
-padilla
-padiou
-padma
-padmanab
-padraic
-padraig
-padriac
-paerio
-paes
-paetsch
-pafilis
-pagani
-page
-pageau
-paget
-pagi
-paglia
-pagliaru
-pai
-paialung
-paige
-paik
-pail
-paine
-painter
-painters
-pak
-pak-jong
-pak-kin
-pakkin
-paksi
-pakulski
-pal
-palacek
-palamar
-palasek
-palczuk
-palermo
-paley
-palfreym
-palidwor
-paliga
-palik
-paliwal
-pall
-pallab
-pallen
-palm
-palme
-palmer
-paloma
-palomar
-paluso
-pam
-pambianc
-pamela
-pamelina
-pamella
-pammi
-pammie
-pammy
-pamperin
-pan
-panacea
-panagiot
-pancewic
-panch
-panchen
-panchito
-panchmat
-pancho
-pancholy
-pandey
-pandolfo
-pandora
-pandrang
-pandya
-panek
-panesar
-pang-chu
-pangchun
-panger
-pangia
-panizzi
-pankaj
-panke
-pankesh
-pankhurs
-pankiw
-panko
-pankratz
-pannell
-panolil
-panos
-panosh
-pansie
-pansy
-pantages
-pantalon
-pantas
-pantelis
-panter
-panton
-panzer
-pao
-pao-ta
-paola
-paoletti
-paolina
-paolo
-paone
-paota
-papa
-papadopu
-papagena
-papageno
-papageor
-papahadj
-papajani
-papalits
-papanton
-paparell
-pape
-paper
-paperno
-papers
-papiez
-papineau
-papp
-pappas
-papper
-pappu
-paprocki
-paqs
-paquette
-paquin
-paquito
-par
-para
-paracha
-paradis
-paradise
-parasili
-pardeep
-pardi
-pardip
-pardo
-parekh
-paresh
-parham
-parhi
-parichay
-parihar
-parikh
-paris
-parise
-parisen
-parisi
-parisien
-park
-parkash
-parke
-parker
-parker-s
-parkes
-parkhill
-parkin
-parkins
-parkinso
-parks
-parkson
-parlett
-parmakse
-parman
-parmar
-parmente
-parmigia
-parminde
-parn
-parnas
-parnell
-parniani
-parnigon
-parow
-parr
-parra
-parrilli
-parrillo
-parris
-parrish
-parrish-
-parrnell
-parrott
-parry
-pars
-parsifal
-parsloe
-parsons
-part
-partap
-partello
-partha
-parthasa
-partick
-partin
-partlo
-parton
-partovi
-paruleka
-parveen
-parvin
-parviz
-paryag
-parypa
-pas
-pascael
-pascal
-pascale
-pascali
-pascas
-paschall
-pasher
-pashia
-pashmine
-pasiedb
-pasquale
-passier
-passin
-pasterna
-pastore
-pastorek
-pastuszo
-pasvar
-pat
-patacki
-patadm
-patch
-patchcor
-patches
-patchett
-patching
-patchit
-patchor
-patchsqa
-patcor
-pate
-patel
-paten
-patenaud
-paterson
-patey
-pathak
-patience
-patin
-patner
-pato
-patoka
-paton
-patoskie
-patra
-patriarc
-patric
-patrica
-patrice
-patrice-
-patricem
-patrici
-patricia
-patricio
-patrick
-patrizia
-patrizio
-patriziu
-patry
-patsy
-patt
-patte
-patten
-patterso
-patteson
-patti
-pattie
-pattin
-pattison
-patton
-pattra
-pattullo
-patty
-patwardh
-pau
-paul
-paula
-paulas
-paule
-paulett
-pauletta
-paulette
-pauley
-paulhus
-pauli
-paulich
-paulie
-paulien
-paulin
-paulina
-pauline
-pauling
-paulinus
-paulita
-paulk
-paulo
-paulovic
-paulus
-pauly
-paunins
-pautenis
-pavan
-pavel
-pavia
-pavitt
-pavla
-pavlic
-pavlov
-pavlovic
-pawel
-pawelchu
-pawlikow
-pawliw
-paxon
-paxton
-paye
-payette
-paylor
-payn
-payne
-paynter
-payroll
-payton
-pazos
-pbkim
-pbx
-pcboards
-pcbtools
-pcsuppor
-pcta
-pde
-pdesuppo
-peabody
-peacemak
-peach
-peacocke
-peadar
-peake
-pearce
-pearcy
-pearl
-pearla
-pearle
-pearline
-pearse
-pearson
-peart
-peate
-peaugh
-peavoy
-pebrook
-pecic
-peckel
-peckett
-peder
-pederson
-pedigo
-pedley
-pedneaul
-pedram
-pedriana
-pedro
-peebles
-peedin
-peerman
-peers
-peeters
-peets
-peg
-pegasus
-pegeen
-peggi
-peggie
-peggy
-pegler
-pehong
-pei-chie
-pei-ling
-peiling
-peirce
-peiser
-peixoto
-peleato
-pelegri
-pelissie
-pelkie
-pell
-pelland
-pellegri
-pelletie
-pellizza
-pellizze
-pelly
-pelosi
-pelot
-pelton
-peluso
-pelz
-pembroke
-pen
-pen-mi
-pen-min
-pena
-pena-fer
-penang
-pendergr
-pendhark
-pendleto
-penelopa
-penelope
-penfield
-peng
-peng-dav
-penland
-penmi
-penmin
-penn
-pennebak
-pennell
-penner
-penney
-penni
-pennie
-penninge
-penningt
-penny
-penrod
-penrose
-pension
-peon
-peoples
-pepc
-pepe
-pepi
-pepillo
-pepin
-pepita
-pepito
-pepler
-pepper
-pepple
-peptis
-per
-pera
-peralta
-perazzin
-perceval
-perchtho
-percival
-percy
-peregrin
-pereira
-perenyi
-perez
-perfetti
-peri
-peria
-pericak
-perice
-pericles
-perina
-perkin
-perkins
-perkinso
-perl
-perla
-perle
-perleber
-perlmutt
-pernell
-perng
-perona
-peroxra
-perras
-perrault
-perreaul
-perrella
-perren
-perri
-perrier
-perrin
-perrine
-perron
-perrotta
-perry
-perryman
-perryno
-persaud
-perschke
-persechi
-pershing
-persis
-personna
-peschke
-pesik
-pesold
-pestill
-pet
-peta
-petar
-pete
-peter
-peterman
-peters
-petersen
-peterson
-peterus
-petey
-petillio
-petr
-petra
-petrakia
-petras
-petre
-petrea
-petree
-petrescu
-petretta
-petrey
-petri
-petrick
-petrie
-petrina
-petrinac
-petro
-petronel
-petronia
-petronil
-petrovic
-petruck
-petrunew
-petrunka
-petschen
-petter
-pettinge
-pettitt
-petunia
-petzold
-pevec
-pevzner
-pewitt
-pey-kee
-peyman
-peyter
-peyton
-pezzoli
-pezzoni
-pezzullo
-pfeffer
-pfeilsch
-pfieffer
-pfifferl
-pfitzner
-pflughau
-phaedra
-phagan
-phaidra
-phair
-phal
-phalen
-phalpher
-pham
-phan
-pharr
-pharris
-phat
-phebe
-phedra
-phelan
-phelia
-phelps
-phifer
-phil
-philbeck
-philbert
-philion
-philip
-philipa
-philippa
-philippe
-philippi
-philippo
-philips
-philis
-phill
-phillida
-phillie
-phillip
-phillipe
-phillipp
-phillips
-phillis
-philly
-philomen
-philp
-phineas
-phip
-phipps
-phiroze
-phoebe
-phoenix
-phonenet
-phong
-phoung
-phu
-phuc
-phung
-phuoc
-phuong
-phuong-l
-phuongli
-phyl
-phylis
-phyllida
-phyllis
-phyllys
-phylys
-physical
-pi-yu
-pia
-piasecki
-piatt
-pic
-picard
-piche
-pichocki
-pick
-pickens
-pickett
-pickles
-piecaiti
-piecowye
-piel
-pien
-pier
-piercarl
-pierce
-piercey
-piercy
-pierette
-piero
-pieron
-pierosar
-pieroway
-pierre
-pierre-a
-pierre-h
-pierre-m
-pierre-y
-pierret
-pierrett
-pierrick
-piersol
-pierson
-piete
-pieter
-pietra
-pietrek
-pietro
-pietromo
-pietropa
-pietrzak
-piette
-pifko
-piggott
-piggy
-pighin
-pigniczk
-piitz
-pilar
-pilch
-pilcher
-pilip
-pilipchu
-pilkingt
-pillars
-pillman
-pillswor
-pilmoor
-pilon
-pilot
-pilote
-pilotte
-piltz
-pim
-pimentel
-pimisker
-pimpare
-pimsiree
-pinakin
-pinalez
-pinar
-pincas
-pinchas
-pincheir
-pinchen
-pincus
-pinder
-pindur
-pineau
-pinecres
-pineda
-pinel
-ping
-ping-cha
-ping-kon
-ping-she
-pingchar
-pingkai
-pingshen
-pinizzot
-pinkerto
-pinnegar
-pinney
-pino
-pinren
-pinsonne
-pintado
-pinto-lo
-pintwala
-piotr
-piotto
-pip
-piper
-piperni
-piperno
-pipit
-pipkins
-pippa
-pippert
-pippin
-pippo
-pipponzi
-pippy
-piqueras
-piraino
-pircher
-pires
-pirkey
-pirkle
-pirolli
-pirooz
-piroska
-pirzada
-pisani
-pisheng
-piske
-pissot
-pister
-pistilli
-pit
-pitawas
-pitcairn
-pitcavag
-pitcher
-pitre
-pitt
-pittam
-pittges
-pittman
-pittner
-pitton
-pitts
-pittsbur
-pituley
-pivert
-piwkowsk
-pixie
-piyasena
-piyathad
-piyu
-piyush
-pizzanel
-pizzarel
-pizzimen
-pkdcd
-pkg
-placido
-plaic
-plaisanc
-plaisant
-plambeck
-plamondo
-planas
-planche
-plantamu
-plante
-planthar
-planting
-plaskie
-plasse
-plastic
-plastina
-plater-z
-plato
-platt
-platthy
-platts
-playatun
-please d
-plenderl
-plett
-plevyak
-pleydon
-plmcoop
-ploeg
-ploof
-plotter
-plouffe
-plourde
-plsntp
-plssup
-plucinsk
-plummer
-pluto
-plyler
-po
-po-rong
-po-yi
-podlesna
-podmarof
-podolski
-poe
-poettcke
-poff
-poh-soon
-pohlmann
-poincare
-poindext
-pointner
-poirier
-poissant
-poisson
-pojanart
-pokinko
-pokrifca
-pokrywa
-pokusay
-polak
-polakows
-polanco
-polashoc
-polder
-poldi
-poleretz
-poley
-poliwoda
-polk
-polla
-pollack
-pollard
-pollie
-pollinzi
-pollux
-polly
-pollyann
-pols
-polsha
-polson
-poluchow
-polulack
-pom
-poma
-pomerlea
-pomeroy
-pommainv
-pompeo
-pomposel
-pon
-ponamgi
-ponthieu
-pontus
-poobah
-pooh
-pookie
-poole
-poon
-poorman
-popa
-popadick
-popcorn
-popel
-popela
-popescu
-popierai
-popoff
-popovich
-popovics
-popowicz
-popowycz
-popp
-poppa
-popper
-poppy
-porebski
-porecha
-porfirio
-porong
-port
-portelan
-porter
-porterfi
-portia
-portie
-portigal
-porting
-portis
-portwood
-porty
-portz
-pory
-posavad
-poseidon
-poshiu
-pospisil
-posta
-postavsk
-posthumu
-postleth
-postolek
-potamian
-potesta
-potkonja
-potocki
-potter
-pottle
-potts
-potvin
-pouhyet
-poul
-poulin
-pouliot
-poulos
-poulsen
-poulter
-poustchi
-powell
-power
-powers
-powlick
-pownall
-powney
-poyer
-poyi
-poyner
-poynting
-pozzi
-ppaul
-prab
-prabaddh
-prabhaka
-prabhu
-prabir
-prachaya
-pracht
-prada
-pradeep
-pradip
-pradnyan
-prado
-pradyumn
-praeuner
-prafula
-pragna
-prakash
-pramod
-prams
-pranav
-prang
-prasad
-prasada
-prasanna
-prashad
-prashant
-prashaw
-pratap
-pratapwa
-pratibha
-pratt
-prattico
-pravato
-praveen
-pravin
-praxis
-praysner
-prayson
-prchal
-precoda
-predel
-predon
-preece
-prelims
-prem
-pren
-prent
-prentice
-prentiss
-preo
-prescott
-presgrov
-presley
-presner
-presotto
-pressbur
-presson
-presti
-prestia
-prestipi
-preston
-preston-
-prestrud
-presutti
-preuss
-prevatt
-preville
-previn
-prevost
-prewitt
-pria
-pribhu
-price
-prichard
-pricing
-prickett
-pridgen
-priede
-priestle
-prikkel
-primeau
-prince
-pringle
-print
-printers
-printing
-prints
-printsup
-prinz
-priore
-pris
-prisca
-priscell
-priscill
-prissie
-pritchar
-prithvi
-priti
-prity
-privett
-priviter
-priya
-probert
-problems
-probs
-procacci
-procca
-procner
-procter
-prodmfg
-prodmgmt
-producti
-prof
-proffit
-prog
-program
-program-
-proj
-projects
-projofc
-prokes
-prokop
-prokopen
-promac
-propes
-prosise
-prosperi
-pross
-prosyk
-prototyp
-proudfoo
-proulx
-provenca
-provench
-pru
-prudence
-prudi
-prudy
-prue
-pruett
-pruitt
-prunier
-prupis
-prybyla
-pryce
-prymack
-pryor
-prystie
-pryszlak
-przewloc
-przybyci
-psce
-pseudony
-psklib
-psutka
-ptefs
-ptolemy
-publicat
-pubs
-puchala
-puckett
-puddingt
-pue-gilc
-puelma
-puent
-puett
-puetz
-puff
-pufpaff
-pugas
-pugh
-puglia
-pui-wah
-pujara
-pulak
-pulcher
-pulcine
-pulitzer
-pullan
-pullum
-pulver
-punch
-pundyk
-puneet
-pung
-punsalan
-puran
-purcell
-purchasi
-purdy
-purgerso
-puringto
-purnam
-purnell
-purnima
-purohit
-purposes
-purshott
-purson
-puryear
-pushelbe
-pusun
-pusztai
-putman
-putnam
-putnem
-puukila
-pye
-pyle
-pyles
-pyng
-pyong
-pyotr
-pyron
-python
-qadir
-qadri
-qainfo
-qainsp
-qi-de
-qide
-qihan
-qiming
-qin
-qing
-qing-hui
-qinghui
-qingyan
-qiuyun
-qizhong
-qu
-quabidur
-quality
-quan
-quane
-quang
-quang-tr
-quante
-quantril
-quarles
-quarterm
-quattruc
-quayle
-queenie
-quek
-quelch
-quennevi
-quensett
-quent
-quentin
-querenge
-querida
-queries
-quesnel
-questell
-quevillo
-quigley
-quijano
-quill
-quillan
-quilty
-quincey
-quincy
-quinhon
-quinlan
-quinn
-quinones
-quint
-quinta
-quintana
-quintero
-quintill
-quintin
-quintina
-quinton
-quintus
-quinz
-quite a
-quixote
-quizmast
-quoc
-quoc-vu
-quocanh
-quoi
-quon
-qureshi
-quyen
-quynh
-raab
-raaf
-raaflaub
-raanan
-rab
-rabadi
-rabaglia
-rabatich
-rabbi
-rabecs
-rabenste
-rabi
-rabiasz
-rabie
-rabin
-rabipour
-rabjohn
-rabon
-rabzel
-racette
-rachael
-rached
-rachel
-rachele
-rachelle
-rachmani
-racicot
-racine
-racioppi
-racz
-rad
-radames
-radcliff
-raddalgo
-raddie
-raddy
-radek
-radford
-radha
-radick
-radio
-radko
-radojici
-radomir
-radoslav
-radovnik
-radulovi
-radvanyi
-rae
-raeann
-raejean
-raf
-rafa
-rafael
-rafaela
-rafaelia
-rafaelit
-rafaelll
-rafaello
-rafe
-rafek
-raff
-raffaell
-raffarty
-rafferty
-raffi
-rafflin
-rafi
-rafik
-rafiq
-rafol
-rafols
-rafter
-raftery
-ragan
-ragbir
-ragde
-raghav
-raghava
-raghavan
-ragheb
-raghu
-raghunat
-raghuvir
-ragland
-raglin
-ragnar
-ragsdale
-ragu
-ragui
-raha
-rahal
-rahardja
-rahdar
-rahel
-rahimtoo
-rahm
-rahman
-rahmani
-rahmany
-rahmatal
-rahn
-rahrer
-rahul
-raicu
-raif
-raigwell
-raila
-railey
-raimondo
-raimund
-raimundo
-raina
-raine
-rainer
-raines
-rainey
-raing
-rainmake
-rains
-rainsfor
-raissian
-raiswell
-raj
-raja
-rajadasa
-rajagopa
-rajala
-rajan
-rajani
-rajanika
-rajapaks
-rajarshi
-rajat
-rajcher
-rajchgod
-rajchwal
-rajczi
-rajeev
-rajen
-rajendra
-rajesh
-rajeswar
-rajguru
-rajinder
-rajini
-rajiv
-raju
-rajwani
-rakeim
-rakel
-raker
-rakesh
-rakhal
-rakhuma
-rakochy
-rakotoma
-raleigh
-raley
-ralf
-rali
-ralina
-ralph
-ralston
-ram
-rama
-ramachan
-ramadoss
-ramage
-ramah
-ramakant
-ramakesa
-ramakr
-ramakris
-ramamoor
-raman
-ramana
-ramanamu
-ramanan
-ramanand
-ramanath
-ramani
-ramaprak
-ramarao
-ramaswam
-rambo
-rambow
-ramee
-ramesh
-ramey
-ramez
-rami
-ramin
-ramirez
-ramirez-
-ramiro
-ramiz
-ramkisso
-ramkumar
-ramlogan
-ramnarin
-ramneek
-ramnikla
-ramon
-ramona
-ramonda
-ramondt
-ramos
-rampaul
-rampino
-ramroop
-ramsaran
-ramsay
-ramsayer
-ramsden
-ramses
-ramsey
-ramseyer
-ramzi
-ramzy
-ran
-ran-joo
-rana
-ranahan
-ranald
-ranbir
-rance
-rancell
-rand
-randa
-randal
-randall
-randecke
-randee
-randel
-randell
-randene
-randhawa
-randhir
-randi
-randie
-randolf
-randolph
-randy
-ranea
-ranee
-ranette
-raney
-ranga
-rangan
-ranganad
-ranganat
-rangasam
-rangaswa
-rangchen
-rangel
-ranger
-rangooni
-rani
-rania
-ranice
-ranieri
-ranique
-ranjan
-ranjit
-rank
-rankin
-ranna
-rannells
-ranney
-ranoa
-ranoska
-ransell
-ransom
-ranson
-rantala
-ranvir
-rao
-raouf
-raoul
-raphael
-raphaela
-rappopor
-raquel
-raquela
-rasberry
-raschig
-rashed
-rashedi
-rashid
-rashid-a
-rashidah
-rashidi
-rashmi
-rasia
-rasla
-rasmus
-rasmusse
-rasselas
-rassell
-rastelli
-rastogi
-ratcliff
-rathbun
-rathnaku
-ratko
-ratnam
-ratnayak
-rattanap
-rattray
-ratz
-rau
-raud
-raudres
-rauen
-raul
-rausa
-rausch
-raven
-raves
-ravi
-ravid
-ravinder
-ravindra
-raviv
-ravji
-rawley
-rawnoi
-raxter
-ray
-rayan
-raychel
-raye
-rayl
-rayleigh
-rayment
-raymona
-raymond
-raymund
-rayna
-raynald
-raynard
-raynell
-rayner
-raynor
-rayshell
-raz
-razavi
-rccl
-rch
-rchisn
-rchlab
-rea
-read
-reade
-reader
-readling
-readme 3
-reagan
-reagen
-real
-realtime
-reamonn
-rean
-reates
-reaume
-reaves
-reavis
-reba
-rebbecca
-rebe
-rebeca
-rebecca
-rebecka
-rebeka
-rebekah
-rebekkah
-rebel
-rec
-recabarr
-receivin
-rechelle
-reckhard
-recktenw
-records
-recsnik
-recyclin
-red
-reda
-redbeard
-redd
-reddick
-reddigan
-redding
-reddingt
-reddy
-redfoot
-redford
-redgie
-redinbo
-redish
-redman
-redmond
-redshaw
-redway
-ree
-reeba
-reece
-reed
-reeder
-reena
-rees
-reese
-reeta
-reetz
-reeva
-reeve
-reeves
-refat
-refuerzo
-reg
-rega
-regan
-rege
-regen
-reggi
-reggie
-reggis
-reggy
-regier
-regimbal
-regina
-reginald
-reginaul
-regine
-reginia
-regis
-register
-regnier
-rego
-rehbein
-rehder
-rehel
-reich
-reichenb
-reiching
-reichman
-reichow
-reid
-reidar
-reidelbe
-reider
-reif
-reifschn
-reijerke
-reiko
-reilly
-reiman
-reimann
-reimburs
-rein
-reina
-reinald
-reinaldo
-reinboth
-reind
-reine
-reiner
-reinhard
-reinhold
-reinink
-reinke
-reinlie
-reinman
-reinold
-reinwald
-reis
-reiser
-reiss
-reist
-reiter
-reitfort
-reith
-reitling
-rejean
-rejeanne
-reka
-rekowski
-relation
-reller
-rem
-rembecki
-rembish
-remedios
-remers
-remi
-remillar
-remingto
-remitha
-remo
-remon
-remrey
-remson
-remus
-remy
-ren
-rena
-renado
-renae
-renaldo
-renard
-renata
-renate
-renato
-renaud
-renault
-rendell
-rendon
-rene
-rene-ala
-reneau
-renee
-renell
-renelle
-renema
-renette
-renfro
-renfroe
-renganat
-renie
-renita
-renken
-renmarie
-renner
-rennie
-rennolds
-renny
-reno
-renoir
-renold
-renton
-renu
-renwick
-repair
-repeta
-reportin
-reports
-requel
-requests
-research
-resende
-resnick
-ress
-ressner
-rester
-restore
-restrepo
-results
-resve
-reta
-retallac
-retallic
-retha
-rettie
-reube
-reuben
-reubens
-reuss
-reuven
-reva
-revah
-revelle
-revill
-revis
-revkah
-rewitzer
-rex
-rexford
-rexroad
-rey
-reyad
-reyaud
-reydman
-reyes
-reyna
-reynaldo
-reynard
-reynold
-reynolds
-reza
-rezaian
-rezansof
-rezneche
-reznick
-reznik
-rezzik
-rfa
-rfeynman
-rff
-rhattiga
-rhea
-rheal
-rheault
-rheaume
-rheba
-rheta
-rhett
-rhetta
-rhew
-rhiamon
-rhianna
-rhianon
-rhine
-rhoades
-rhoads
-rhoda
-rhodeniz
-rhodes
-rhodia
-rhodie
-rhodri
-rhody
-rhona
-rhonda
-rhough
-rhyndres
-rhys
-rhyu
-ri
-ria
-riad
-rialland
-riane
-riannon
-rianon
-riaz
-ribakovs
-ribaldo
-ribi
-ribordy
-ribot
-ric
-rica
-ricard
-ricardo
-ricca
-riccardo
-riccitel
-ricciuto
-rice
-rich
-richad
-richard
-richardo
-richards
-richart
-richelle
-richer
-richey
-richie
-richlark
-richman
-richmond
-richmoun
-richter
-richy
-rici
-rick
-rick-jan
-rickard
-rickborn
-rickel
-ricker
-rickert
-ricketso
-ricketts
-rickey
-ricki
-rickie
-rickjan
-rickrd
-ricks
-ricky
-rico
-ricoriki
-riddall
-ridder
-riddick
-rider
-ridge
-ridgeway
-ridgewel
-ridgway
-ridha
-ridley
-riebl
-ried
-riedel
-riehle
-riekie
-rieko
-rieni
-rigby
-rigdon
-rigel
-riggins
-riggs
-riggsbee
-righter
-rightmir
-rigobert
-rigsbee
-rigstad
-rijn
-rijos
-rijswijk
-rik
-riki
-rikki
-rikley
-riley
-rilla
-rima
-rimantas
-rimey
-riml
-rimmler
-rimsa
-rina
-rinaldo
-rinawi
-ring
-ringo
-rini
-rintala
-rintel
-rintoul
-rio
-riobard
-riopel
-riopelle
-riordan
-rios
-riou
-rioux
-rip
-ripa
-ripley
-risa
-risdal
-risher
-rishy-ma
-risko
-risler
-rist
-risto
-rita
-ritalynn
-ritchey
-ritchie
-ritenour
-rittenho
-ritter
-rittmann
-ritz
-ritza
-ritzmann
-riva
-rivaherr
-rivalee
-rivard
-rivera
-rivers
-rivest
-rivi
-rivkah
-rivy
-rix
-riyad
-riyaz
-rizal
-rizewisk
-rizk
-rizky
-rizwan
-rizzardi
-rizzo
-rizzuti
-rk
-rnashcro
-ro
-roana
-roanna
-roanne
-roarke
-rob
-robann
-robart
-robb
-robbert
-robbi
-robbie
-robbin
-robbins
-robby
-robbyn
-robeling
-robena
-robenia
-roberge
-robers
-roberson
-robert
-roberta
-roberto
-roberts
-robertso
-robieux
-robillar
-robin
-robina
-robinet
-robinett
-robinia
-robins
-robinson
-robinwil
-robitail
-robles
-robling
-robney
-robson
-robustne
-roby
-robyn
-rocco
-roch
-roche
-rochell
-rochella
-rochelle
-rocheste
-rochette
-rochon
-rocio
-rock
-rocke
-rockey
-rockford
-rockie
-rockley
-rockly
-rockwell
-rocky
-rod
-roda
-rodd
-roddick
-roddie
-roddy
-rodely
-roden
-rodenfel
-rodenhui
-rodent
-roderic
-roderich
-roderick
-roderigo
-rodge
-rodger
-rodgers
-rodgin
-rodi
-rodie
-rodina
-rodkey
-rodney
-rodolfo
-rodolph
-rodolphe
-rodrick
-rodrigo
-rodrigue
-rodrigus
-rodrique
-rodschat
-roe
-roebling
-roedel
-roehl
-roehrig
-roel
-roelof
-roelofs
-roemer
-roerick
-roesler
-roeten
-rog
-rogan
-rogelio
-roger
-rogerio
-rogers
-roget.wo
-rogge
-rogne
-rogness
-rognlie
-rogoff
-rogue
-rohal
-rohan
-rohe
-rohit
-rohtert
-roi
-roieh
-roig
-rois
-roithmai
-roj
-rojas
-rojer
-rok
-rokas
-roland
-rolande
-rolando
-roldan
-roleson
-roley
-rolf
-rolfe
-rolfes
-rolland
-rollie
-rollin
-rollins
-rollinso
-rollo
-rolls
-rolly
-rolnick
-rolph
-rolston
-roly
-rolyn
-roma
-romagnin
-romain
-roman
-romanchu
-romani
-romano
-romanows
-rombeek
-romberg
-rombough
-romeo
-romero
-romi
-romina
-rommel
-rommell
-romola
-romolo
-romona
-romonda
-romulus
-romy
-ron
-rona
-ronaald
-ronak
-ronald
-ronalda
-ronaldo
-ronalds
-ronaldso
-ronan
-ronda
-rondeau
-ronen
-ronendra
-roney
-rong
-rong-che
-rong-chi
-rong-jen
-rong-jwy
-rongchei
-ronghui
-rongjen
-rongjwyn
-roni-jea
-ronica
-ronitt
-ronkus
-ronn
-ronna
-ronneke
-ronni
-ronnica
-ronnie
-ronny
-roob
-roobbie
-roohy-la
-rooney
-roosevel
-root
-roots
-roozbeh
-roper
-roque
-rora
-rori
-rorie
-rorke
-rory
-ros
-rosa
-rosabel
-rosabell
-rosado
-rosaleen
-rosalia
-rosalie
-rosalind
-rosaline
-rosalyn
-rosalynd
-rosamond
-rosamund
-rosana
-rosanna
-rosanne
-rosario
-rosch
-rosche
-rosco
-roscoe
-rose
-roseann
-roseanna
-roseanne
-rosebud
-roseland
-roselia
-roselin
-roseline
-rosella
-roselle
-rosemari
-rosemary
-rosemond
-rosen
-rosenbau
-rosenber
-rosenblu
-rosendal
-rosene
-rosenfel
-rosenqui
-rosentha
-roser
-rosetta
-rosette
-rosewell
-rosey
-roshelle
-rosie
-rosien
-rosina
-rosita
-roski
-rosko
-roslyn
-rosmunda
-rospars
-ross
-ross-ada
-ross-ros
-rossanes
-rosser
-rossi
-rossie
-rossigno
-rossingt
-rosson
-rossy
-rosvick
-rosy
-roszko
-rotenber
-roth
-rothamel
-rothey
-rothwell
-rotondo
-rotzjean
-rouer
-rouhad
-rouleau
-roulez
-roundy
-roupen
-rourk
-rourke
-rous
-rousseau
-rousset
-roussier
-roussin
-roussy
-routhier
-routing
-rouvin
-row
-rowan
-rowatt
-rowe
-rowell
-rowen
-rowena
-rowhani
-rowland
-rowlands
-rowley
-rowney
-rowsell
-roxana
-roxane
-roxanna
-roxanne
-roxi
-roxie
-roxine
-roxy
-roy
-roya
-royal
-royall
-royals
-royce
-roychowd
-royden
-royer
-royle
-royster
-roz
-rozaini
-rozalia
-rozalie
-rozalin
-rozamond
-rozanna
-rozanne
-roze
-rozele
-rozella
-rozelle
-rozen
-rozett
-rozier
-rozin
-rozina
-rozon
-rozumna
-rriocard
-rtingres
-rtp
-rtpbuild
-rtprel
-rtprelb
-ru
-ruane
-ruaud
-ruban
-rubanovi
-rube
-ruben
-rubens
-rubenste
-rubetta
-rubi
-rubia
-rubie
-rubin
-rubina
-rubinfel
-rubinov
-rubinste
-rubio
-ruby
-ruchel
-ruchi
-ruck
-ruckman
-rud
-rudd
-ruddell
-ruddick
-ruddie
-ruddle
-ruddy
-rudell
-rudi
-rudiak
-rudich
-rudie
-rudiger
-rudin
-rudis
-rudisill
-rudolf
-rudolfo
-rudolph
-rudy
-rudyard
-rudzinsk
-rudzitis
-rueben
-ruecha
-ruediger
-ruel
-ruest
-ruetz
-ruey
-rufe
-ruffolo
-rufino
-rufus
-rugg
-ruggiero
-rui
-rui-tao
-rui-yuan
-ruigrok
-ruitao
-ruiz
-rumley
-rummans
-rummel
-rummell
-runciman
-rundle
-rundstei
-rungroj
-runkel
-runnels
-running
-runyon
-ruoh-chy
-ruohchyu
-rupa
-rupert
-ruperta
-ruperto
-rupnow
-rupp
-ruppert
-ruprecht
-ruqiang
-rurick
-rurik
-rusch
-ruschmei
-rushing
-rushmore
-rushton
-rusin
-ruspini
-russ
-russel
-russell
-russett
-rustie
-rustin
-rustu
-rusty
-rutger
-ruth
-ruthann
-ruthanne
-ruthart
-ruthe
-rutherfo
-ruthi
-ruthie
-ruthy
-rutland
-rutledge
-rutt
-ruttan
-rutter
-ruttger
-rutulis
-rutyna
-ruud
-ruy
-ruyant
-ruyle
-ruzicka
-ruzycki
-ryall
-ryals
-ryan
-ryann
-rybczyns
-rycca
-ryce
-rychlick
-ryde
-ryder
-rydhan
-ryerson
-rygwalsk
-rykwalde
-ryley
-rylott
-ryman
-rymkiewi
-rynders
-rynties
-ryohei
-ryon
-ryoung
-ryszard
-ryun
-rzepczyn
-sa'id
-saad
-saake
-saal
-saatciog
-saavedra
-saba
-sabadash
-sabah
-sabanaya
-sabat
-sabatell
-sabatini
-sabatino
-sabbagh
-saber
-saberi
-sabety
-sabiha
-sabin
-sabina
-sabine
-sabo
-sabol
-sabooria
-sabourin
-sabra
-sabri
-sabrina
-sabry
-sabuson
-sabzali
-sacarell
-sacchett
-sacha
-sachidul
-sachiko
-sachindr
-sachs
-sacks
-sacto
-sada
-sadan
-sadath
-sadegh
-sadeghi
-sadella
-sadie
-sadler
-sadorra
-sadowska
-sadoyama
-sadri
-sadroudi
-sadru
-sadye
-saed
-saeed
-saeid
-safaa
-safah
-safinia
-sagan
-sage
-sager
-sagers
-sagris
-saha
-sahay
-sahib
-sahinalp
-sahli
-saibal
-saibun
-said
-saidee
-saidzade
-saied
-saifalla
-saifulla
-saify
-saiid
-saikaley
-sails
-saini
-sainsbur
-saisho
-sait
-saito
-saitoh
-saiyed
-sakaguch
-sakai
-sakamaki
-sakauye
-sakus
-sal
-salada
-saladna
-salah
-salaidh
-salam
-salamon
-salapek
-salazar
-salb
-salcudea
-saldanha
-saleem
-saleh
-salehi
-salem
-salembie
-salemi
-sales
-salgado
-salhany
-salibi
-salim
-salim-ya
-salimi
-salina
-salinas
-salis
-salkilld
-salkini
-salkok
-salladay
-salle
-sallee
-sallehud
-salli
-sallie
-sally
-sallyann
-salmon
-saloma
-salome
-salomi
-salomo
-salomon
-salomone
-salsbery
-saltamar
-salter
-saltside
-salva
-salvador
-salvato
-salvator
-salvidor
-salvin
-salwa
-salyer
-salyniuk
-salzillo
-sam
-samac
-samalot
-saman
-samantha
-samara
-samaratu
-samaria
-samaroo
-sambar
-sambi
-sambo
-sameh
-samhaber
-sami
-samia
-samieian
-samir
-sammie
-sammon
-sammons
-sammy
-samora
-sampalea
-sampat
-sampath
-samples
-sampson
-sampson-
-samshixu
-samson
-samsonen
-samual
-samuel
-samuele
-samy
-sanaa
-sanabria
-sanae
-sanand
-sanborn
-sanche
-sanchez
-sancho
-sanda
-sandberg
-sandburg
-sande
-sandeep
-sandell
-sander
-sanders
-sanderso
-sandford
-sandhar
-sandhu
-sandhya
-sandi
-sandie
-sandifor
-sandip
-sandison
-sandiway
-sandler
-sandlfor
-sandner
-sandness
-sandor
-sandra
-sandre
-sandrine
-sandro
-sandrock
-sandy
-sandye
-sanford
-sanford-
-sang
-sang-mau
-sang-woo
-sangbong
-sangha
-sanghami
-sangho
-sangiova
-sangman
-sangwook
-sanh
-sanity
-sanja
-sanjay
-sanjeet
-sanjeev
-sanjib
-sanjiv
-sanjiva
-sanjoy
-sankey
-sanks
-sanoy
-sanramon
-sanschag
-sansom
-sanson
-sansone
-santa
-santabar
-santella
-santi
-santiago
-santiest
-santitor
-santo
-santos
-santosh
-sanzone
-sapena
-saphir
-sapphira
-sapphire
-saqib
-sara
-sara-ann
-saraann
-sarah
-sarajane
-saran
-saran-br
-sarangar
-sarasina
-sarath
-saravano
-sarawath
-sarbutt
-saree
-sarena
-sarene
-sarette
-sarge
-sargent
-sargeson
-sari
-sarin
-sarina
-sarine
-sarioglu
-sarita
-sarkari
-sarlos
-sarma
-sarna
-saroj
-sarracin
-sarrasin
-sarrazin
-sarsh
-sarson
-sartin
-sartiran
-sarto
-sartor
-sarubbi
-sasaki
-sascha
-sasha
-sashenka
-sashi
-sasinows
-sask
-saskia
-sasore
-sassan
-sassine
-sasson
-sastry
-saswata
-sathe
-sati
-satin
-satis
-satish
-satkamp
-satkunas
-sato
-satoh
-satoshi
-satta
-sattar
-satterfi
-sattler
-satya
-satyajit
-satyanar
-saucerma
-sauck
-sauder
-saudra
-sauer
-saul
-saulnier
-sauls
-saumitra
-saumure
-saumya
-sauncho
-saunder
-saunderc
-saunders
-saundra
-saungika
-sauprobo
-sauvagea
-sauve
-sauveur
-savadkou
-savanh
-savard
-savarimu
-savaryeg
-savina
-savino
-savita
-savo
-savoie
-savoj
-savoula
-saw
-sawada
-saward
-sawaya
-sawchuk
-sawczyn
-sawita
-sawsan
-sawyer
-sawyere
-sawyers
-sax
-saxe
-saxena
-saxon
-say
-sayar
-sayed
-sayeeda
-sayegh
-sayer
-sayers
-sayla
-sayre
-sayres
-scalabri
-scalera
-scales
-scammerh
-scamurra
-scandret
-scanga
-scanlan
-scanlon
-scapin
-scarboro
-scarbrou
-scarface
-scarffe
-scarlet
-scarlett
-scarrow
-scatena
-scates
-schaap
-schacham
-schachtl
-schack
-schadan
-schaefer
-schafer
-schaffel
-schaffer
-schallen
-schaller
-schallio
-schanck
-schank
-schanne
-scharf
-schartma
-schatzbe
-schauer
-schavo
-schavone
-schechtm
-scheck
-scheckle
-schecter
-schedule
-scheduli
-scheer
-scheffle
-scheible
-scheidt
-scheifel
-schejbal
-schell
-schellen
-schembri
-schemena
-schenck
-schendel
-schenk
-schenkel
-schepps
-scherbin
-scherer
-schermer
-scherzin
-schesvol
-scheuerm
-schick
-schieber
-schiefer
-schiegl
-schierba
-schill
-schiller
-schillin
-schiltz
-schinkel
-schipper
-schireso
-schirmer
-schirtzi
-schissel
-schittl
-schlacht
-schlagen
-schlange
-schledwi
-schlegel
-schlemme
-schlicht
-schloboh
-schluter
-schmadtk
-schmeder
-schmeing
-schmeler
-schmelze
-schmidt
-schmitig
-schmitt
-schmitz
-schmoe
-schnacke
-schnaith
-schneide
-schnell
-schnirer
-schnob
-schnupp
-schnurma
-schober
-schoch
-schoen
-schoener
-schoenfe
-schoenin
-schoenli
-schoettl
-schofiel
-scholes
-scholey
-scholman
-scholtz
-schonber
-schooley
-schopenh
-schousbo
-schouwen
-schrader
-schrag
-schrage
-schram
-schraner
-schrang
-schreibe
-schreier
-schreife
-schreine
-schrier
-schroede
-schroer
-schroff
-schruefe
-schrupp
-schrybur
-schubert
-schuck
-schucker
-schuddeb
-schuett
-schuette
-schuld
-schulte
-schultz
-schultze
-schulz
-schulze
-schumach
-schumann
-schuster
-schute
-schutte
-schutz
-schuyler
-schvan
-schwab
-schwader
-schwalba
-schwane
-schwante
-schwartz
-schwarz
-schwenk
-schyndel
-schyving
-scibek
-scif
-scissons
-scodras
-scomello
-sconzo
-scooter
-scorpio
-scorziel
-scot
-scott
-scotti
-scottie
-scottjop
-scottt
-scotty
-scournea
-scovell
-scovill
-scp
-scpbuild
-scpiivo
-scptest
-scrantom
-scrbacic
-screener
-scribner
-scrivens
-scroger
-scss
-scssdev
-scully
-scurlock
-scythia
-se
-seabrook
-seager
-seagle
-seagrave
-seagrove
-seahawk
-seale
-sealy
-seamster
-seamus
-sean
-seana
-seang
-seanna
-seany
-searl
-searle
-searles
-sears
-seatter
-seawell
-seay
-sebastia
-sebastie
-sebata
-sebeh
-sechang
-sechen
-sechrest
-secrest
-security
-seda
-sedat
-sedayao
-seddigh
-seddon
-sedigheh
-sedovic
-sedran
-see
-seeds
-seegobin
-seelaend
-seelan
-seeler
-seeley
-seema
-seenu
-seery
-sees
-seethara
-segal
-segars
-seggie
-seguin
-sehat
-sehgal
-sehinson
-sehmbey
-sehyo
-sei
-seidel
-seiden
-seidl
-seidman
-seifers
-seifert
-seifried
-seiji
-seiko
-seiler
-seiple
-seipue
-seitz
-seiz
-sej
-sek-ming
-seka
-sekar
-sekhar
-seki
-sekiguch
-sekming
-sekuler
-sela
-selbrede
-selby
-selchow
-selcuk
-seldon
-selena
-selene
-selent
-selestin
-selia
-selic
-selie
-selig
-selim
-selime
-selina
-selinda
-seline
-seliske
-selisker
-selkirk
-sella
-sellars
-selle
-sellers
-sellgren
-sellis
-sells
-sellwood
-selma
-selva
-selvaraj
-selwyn
-sembi
-semeniuk
-semenzat
-semerau
-semler
-semmens
-semmler
-semoon
-sena
-senad
-senderow
-sendyk
-senecal
-senese
-sengoba
-sengupta
-seniuk
-senng
-senser
-senten
-sentner
-sentovic
-senyildi
-senyshyn
-seob
-seoju
-seok
-seong
-seoul
-sepe
-sepesi
-sephira
-sepko
-serack
-serafin
-seraphin
-serapin
-serazzi
-serban
-serber
-serbin
-serbus
-serdar
-serduke
-seregely
-serena
-serene
-serethia
-serge
-sergeant
-sergei
-sergent
-sergey
-sergi
-sergio
-sergiu
-sergo
-seroka
-serour
-serraf
-serrano
-serre
-servais
-servance
-services
-servidio
-serville
-seshadri
-seshan
-seth
-sethi
-sethian
-setiawan
-seto
-setsuko
-settels
-setterfi
-settles
-seufert
-seumas
-seung
-seungbin
-seungchu
-seungjun
-seuss
-seven
-severin
-severina
-severn
-severns
-sevigny
-sevilla
-seville
-seward
-sewell
-sey-ping
-seyar
-seyed
-seyfolla
-seyma
-seymour
-sezer
-sfiroudi
-sforza
-sgorniko
-sguigna
-sha-wen
-shabatur
-shabbir
-shabo
-shacham
-shackelf
-shacklef
-shacklet
-shackley
-shaddock
-shadow
-shae
-shafer
-shaffer
-shafik
-shafiq
-shafique
-shahab
-shahan
-shahani
-shahen
-shahid
-shahram
-shahriar
-shahrin
-shahrokh
-shahrood
-shai
-shaib
-shaibal
-shaida
-shaila
-shailan
-shailen
-shailend
-shailesh
-shailin
-shaina
-shaine
-shaji
-shaker
-shakeri
-shakib
-shakil
-shakoor
-shakor
-shalizi
-shalla
-shalmon
-shalna
-shalne
-shalom
-shama
-shamblin
-shames
-shamim
-shamir
-shamji
-shams
-shamshad
-shamshir
-shamsia
-shamus
-shan
-shan-min
-shan-pin
-shana
-shanahan
-shanan
-shanda
-shandee
-shandeig
-shandie
-shandra
-shandy
-shane
-shaner
-shang
-shang-ti
-shangi
-shangtia
-shani
-shanie
-shankar
-shanlin
-shanmin
-shanna
-shannah
-shannan
-shannen
-shannon
-shanon
-shanping
-shanta
-shantee
-shanti
-shantz
-shao
-shao-she
-shaoshen
-shapcott
-shapin
-shapiro
-shapland
-shappir
-shara
-sharad
-sharada
-sharae
-sharai
-sharan
-sharee
-shari
-sharia
-sharif
-shariff
-sharissa
-sharity
-sharkey
-sharky
-sharl
-sharla
-sharleen
-sharlene
-sharline
-sharma
-sharman
-sharmila
-sharnoff
-sharon
-sharona
-sharone
-sharpe
-sharratt
-sharri
-sharron
-sharry
-shary
-sharyl
-sharyn
-shashank
-shashi
-shastri
-shastry
-shatter
-shattuck
-shau
-shaughan
-shaughn
-shaughne
-shaukat
-shaumil
-shaun
-shauna
-shaupoh
-shaver
-shaw
-shaw-yun
-shawen
-shawn
-shawna
-shawnee
-shawyune
-shay
-shay-pin
-shayanpo
-shayla
-shaylah
-shaylyn
-shaylynn
-shayna
-shayne
-shayping
-shea
-sheaffer
-shealy
-shean
-sheara
-shearer
-shearin
-shearman
-shears
-sheba
-shebanow
-shechtma
-shedd
-shedman
-sheehan
-sheela
-sheelagh
-sheelah
-sheena
-sheeree
-sheergar
-sheets
-sheff
-sheffey
-sheffie
-sheffiel
-sheffy
-sheidafa
-sheikh
-sheikna
-sheila
-sheila-k
-sheilah
-sheilaka
-sheileag
-shein
-shek
-shekar
-shekhar
-shekwan
-shel
-shela
-shelagh
-shelba
-shelbi
-shelby
-shelden
-sheldon
-shelegey
-shelia
-shell
-shelley
-shelli
-shellie
-shellin
-shellman
-shelly
-shellysh
-shelton
-shem
-shemwell
-shen
-shen-zhi
-shena
-sheng
-sheng-fu
-shengfu
-shengru
-shengwen
-shengwu
-shennan
-shep
-shepard
-shepherd
-sheppard
-shepperd
-sher
-sherali
-sherard
-sheraton
-sherban
-shere
-sheree
-sheremet
-sheri
-sheri-ly
-sheridan
-sherie
-sherif
-sherill
-sherilyn
-sherin
-sherk
-sherline
-sherlock
-sherm
-sherman
-shermie
-shermy
-sherona
-sherow
-sherra
-sherrard
-sherrel
-sherrell
-sherrer
-sherri
-sherrie
-sherrill
-sherrily
-sherry
-sherrye
-sherryl
-sherwan
-sherwin
-sherwood
-sherwyn
-sherwynd
-sherye
-sheryl
-sheth
-sheu
-sheung
-shew
-shewchen
-shi
-shi-qin
-shi-wei
-shiang-y
-shiangyi
-shiao-mi
-shiaomin
-shibahar
-shibata
-shibberu
-shibo
-shieff
-shieh
-shiel
-shiela
-shields
-shiell
-shier
-shiffer
-shiflett
-shigeaki
-shigeki
-shigemur
-shigenao
-shigeo
-shigeru
-shih
-shih-dar
-shih-hai
-shih-hsi
-shih-kua
-shih-tie
-shihhai
-shihhsiu
-shihkuan
-shihtien
-shik
-shikui
-shila
-shiley
-shilla
-shilling
-shimada
-shimandl
-shimiz
-shimizu
-shimshon
-shin-dug
-shina
-shinder
-shindug
-shing
-shing-ch
-shing-mi
-shingche
-shingler
-shingmin
-shinichi
-shinji
-shinjo
-shinobu
-shinohar
-shinzo
-shiou
-shipe
-shipp
-shippen
-shiqin
-shiquan
-shir
-shirai
-shiranth
-shiratsu
-shiraz
-shireen
-shireman
-shirene
-shirey
-shirin
-shirinlo
-shirish
-shirl
-shirlee
-shirleen
-shirlene
-shirley
-shirley-
-shirline
-shirman
-shiroshi
-shirriff
-shishakl
-shishido
-shiu
-shiu-lin
-shiuan
-shiue
-shiuling
-shiun
-shiung
-shiv
-shiva
-shivaji
-shivapra
-shivchar
-shivdars
-shivnan
-shiwei
-shixian
-shlomo
-shmoys
-shnay
-shnider
-sho
-shoaf
-shobana
-shockley
-shoeb
-shoemake
-shoens
-shoji
-sholom
-shon
-shona
-shonda
-shonka
-shonuck
-shoou-yu
-shoouyu
-shop
-shoppel
-shorgan
-shorwan
-shoshana
-shoshann
-shostak
-shou
-shou-che
-shou-mei
-shoucher
-shoulars
-shouli
-shoun
-shouresh
-showers
-shreve
-shriberg
-shrieves
-shripad
-shriram
-shtivelm
-shtulman
-shu
-shu-chen
-shu-gong
-shu-mei
-shuang
-shuangli
-shubaly
-shuchen
-shue
-shuechia
-shuen
-shugong
-shuichi
-shuji
-shukor
-shukster
-shuler
-shull
-shultz
-shum
-shuman
-shumate
-shumei
-shunfeng
-shung
-shunhui
-shunmuga
-shunro
-shuo
-shupe
-shuqing
-shurlock
-shurtlef
-shurwood
-shuster
-shusuke
-shute
-shutler
-shutoku
-shutterb
-shuvra
-shuyen
-shwed
-shwu-chy
-shwuchyn
-shya-yun
-shyam
-shyan
-shyh-chi
-shyhchin
-shylo
-shyoko
-shypski
-shyu
-si
-siamack
-siamak
-siana
-sianna
-siaw
-sib
-sibbet
-sibbie
-sibby
-sibeal
-sibel
-sibella
-sibelle
-sibiga
-sibilla
-sibincic
-sibley
-sibyl
-sibylla
-sibylle
-sicard
-sich
-sichao
-sickle
-sickler
-sicotte
-sid
-siddall
-siddell
-siddiqui
-sides
-sidhu
-sidnee
-sidney
-sidone
-sidoney
-sidonia
-sidonnie
-sidor
-sidorovs
-sieben
-sieber
-siefert
-siegal
-siegel
-siegfrie
-siegle
-siegmund
-siegurd
-siehl
-sieling
-siemens
-siemer
-sienggo
-siew
-siew-kia
-siewert
-sifer
-siffre
-sig
-sigda
-sigfrid
-sigfried
-siggy
-sigismon
-sigismun
-sigmon
-sigmund
-signe
-sigrid
-sigurd
-sigurdso
-sigut
-sigvard
-siham
-sihem
-sik-yin
-sika
-sikander
-sikes
-sikita
-sikri
-sil
-silang
-silas
-silburt
-sile
-sileas
-silgardo
-silianu
-silieff
-silins
-sills
-sils
-silva
-silvain
-silvan
-silvana
-silvano
-silvanus
-silverma
-silverst
-silverth
-silveste
-silvestr
-silvia
-silvie
-silvio
-silwer
-sim
-simaan
-simanski
-simard
-simard-n
-simcha
-simcoe
-simcox
-sime
-simen
-simeon
-simeone
-simhan
-simion
-simkin
-simler
-simmonds
-simmons
-simms
-simon
-simon-ch
-simon-pu
-simona
-simone
-simonett
-simonian
-simonne
-simonovi
-simons
-simonsen
-simpkin
-simpson
-simren
-sims
-simser
-simson
-simulati
-simzer
-sina
-sinanan
-sinasac
-sinchak
-sinchau
-sinclair
-sinclare
-sindee
-sing
-sing-pin
-singbeil
-singer
-singh
-singhal
-singham
-singires
-singyu
-sinh
-sinha
-sinkfiel
-sinkovit
-sinnett
-sinnott
-sinoyann
-sinyor
-siobhan
-siomalas
-siotong
-sioux
-siouxie
-siperco
-sipes
-siping
-sipple
-sir
-sirevici
-siripong
-sirojith
-sisely
-sisile
-sisk
-siso
-sissela
-sissie
-sissy
-sist
-sitar
-sitch
-sitler
-siu
-siu-kwok
-siu-ling
-siu-man
-siusan
-siv
-siva
-sivaji
-sivasoth
-siward
-sizto
-sj
-sjaak
-sjerps
-sjouke
-skaff
-skaftaso
-skaggs
-skalski
-skanes
-skaret
-skariex
-skedelsk
-skeeter
-skef
-skell
-skelly
-skene
-skeoch
-skerlak
-skerry
-skeuse
-skiba
-skiclub
-skillen
-skillman
-skinner
-skip
-skipp
-skipper
-skippie
-skippy
-skipton
-sklower
-skoberne
-skof
-skopliak
-skrebels
-skriverv
-skrobans
-skrobeck
-skruber
-skuce
-skuratow
-skwarok
-sky
-skye
-skylar
-skyler
-slaa
-slabaugh
-slaby
-slade
-sladek
-slagel
-slartiba
-slatteng
-slattery
-slautter
-slavin
-sldisk
-sleeman
-sleeth
-slempers
-slick
-slinkard
-slinowsk
-sliter
-sloan
-sloane
-slobin
-sloboda
-slobodia
-slobodri
-slonosky
-slotnick
-slozil
-sluis
-slunder
-slusser
-sly
-slyteris
-smale
-smalltal
-smallwoo
-smecca
-smedema
-smeenk
-smelters
-smerdell
-smerek
-smid
-smine
-smit
-smita
-smith
-smithdea
-smithson
-smits
-smitty
-smolin
-smook
-smoot
-smothers
-smrke
-smrke-su
-smuda
-smulders
-smyrl
-smyth
-smythe
-snair
-snapper
-snarr
-snead
-snedden
-snedeker
-snehal
-snelgrov
-snelling
-snider
-sniderma
-snipes
-snips
-snodgras
-snoke
-snorri
-snowden
-snuggs
-snyder
-soard
-sobchuk
-sobczak
-sobeck
-sobel
-sobiesia
-sobitha
-sobkow
-sobolak
-sobolews
-sobon
-sochovka
-socorrit
-socrates
-sodano
-soderber
-sodhi
-soebowo
-soegiono
-sofeya
-soffa
-sofia
-sofie
-sofoklis
-soh
-sohaib
-sohail
-sohal
-sohale
-sohayla
-sohier
-sohni
-sohns
-sohota
-soiffer
-soin
-sojka
-sojkowsk
-sokolows
-sokyrko
-sol
-solai
-solange
-soldera
-solheim
-soliman
-solita
-solkoff
-sollee
-sollie
-sollman
-solly
-solman
-solodko
-solomon
-solovay
-solski
-soman
-somani
-somenzi
-somera
-somers
-somerset
-somervil
-somisett
-sommer
-sommerdo
-sommerfe
-sompong
-somppi
-somsak
-son
-sonbol
-sondra
-sondueim
-song-cha
-song-ho
-songchar
-songho
-songnian
-sonhing
-sonia
-sonier
-sonja
-sonne
-sonni
-sonnie
-sonnnie
-sonny
-sono
-sonoda
-sonoe
-sonya
-soo
-sood
-soohong
-soohoo
-sook
-sookdeo
-sooley
-soong
-soonhoi
-sophey
-sophi
-sophia
-sophie
-sophroni
-sorathia
-sorbi
-sorcha
-soreanu
-soren
-sorensen
-soriano
-sorin
-sorkin
-soroker
-sorrel
-sorrell
-sorrenti
-sos
-sosa
-sosanna
-sossaman
-sotelo
-sotiriad
-sotiris
-soto
-sotos
-souba
-soucie
-soucy
-sougata
-souheil
-soulef
-soules
-soullier
-soumis
-soumitra
-sounya
-souphala
-sources
-souren
-sourin
-sourisse
-sourour
-sousa
-soussa
-southard
-souther
-southon
-southwor
-souza
-sova
-soweidan
-sowry
-soyeh
-soyland
-soyong
-soyster
-soyuer
-space
-spallin
-spann
-spannbau
-sparacio
-sparkes
-sparks
-sparksma
-sparky
-spass
-spaugh
-speakec
-speaker
-spearman
-spearpoi
-spears
-specs
-speedy
-speer
-speers
-speight
-spejewsk
-spence
-spencer
-spense
-spenser
-sperman
-spessot
-spicer
-spickelm
-spieker
-spieler
-spight
-spike
-spilchak
-spillane
-spily
-spindler
-spinelli
-spingola
-spinks
-spirakis
-spirkovs
-spiros
-spisak
-spitzer
-spivey
-splitt
-spohn
-spolar
-sponagle
-sponchia
-spooner
-spragg
-spraggin
-sprague
-sprandel
-sprayber
-spriggs
-spriging
-springth
-sprott
-sproul
-sproule
-sprouse
-spruell
-sprules
-sprunger
-spudboy
-spurlin
-spurlock
-spurway
-spy
-spyridon
-spyros
-squires
-squizzat
-sr
-srawan
-src
-sreedhar
-sri
-sridaran
-sridevi
-sridhar
-sridhara
-srihari
-srikanth
-srikrish
-srimurti
-srinath
-srini
-sriniuas
-srinivas
-sriram
-sriranja
-srirupa
-sriv
-srivasta
-srivatsa
-sroczyns
-ssi
-ssington
-st
-st-amour
-st-denis
-st-louis
-st-marti
-st-onge
-st-pierr
-st.
-st.clair
-st.denis
-st.germa
-st.jacqu
-st.john
-st.laure
-st.louis
-st.pierr
-st.vil
-st_james
-staats
-stabilit
-stace
-stacee
-stacey
-stach
-stachowi
-staci
-stacia
-stacie
-stackpol
-stacy
-stadelme
-stadler
-stafani
-staffard
-staffeld
-staffing
-stafford
-staford
-stagger
-staggs
-stagmier
-stahl
-stahly
-stainbac
-staley
-stalin
-stallabr
-stallcup
-stalling
-stalter
-stamboul
-stampfl
-stampley
-stamps
-stan
-stanciu
-stanczyk
-standard
-standel
-standen
-standfor
-standrin
-stanfiel
-stanford
-stange
-stanisla
-stanke
-stanleig
-stanley
-stanly
-stansber
-stansbur
-stansby
-stansell
-stansfie
-stanton
-stanulis
-stanwood
-stapenho
-staples
-star
-starbuck
-staring
-starkaus
-starkeba
-starkes
-starks
-starla
-starlene
-starlet
-starlin
-starnes
-starowic
-starr
-stars
-starsdps
-starzman
-stasaski
-stasiak
-stasney
-stastny
-stasyszy
-stat
-staten
-stateson
-statile
-statisti
-staton
-stavro
-stavros
-stayton
-stclair
-stctest
-stds
-ste
-ste-mari
-stearn
-stearne
-stearns
-stebbing
-steckley
-steede
-steele
-steelman
-steen
-steenbur
-steene
-steeves
-stefa
-stefan
-stefana
-stefanac
-stefania
-stefanie
-stefano
-steffane
-steffen
-steffens
-steffes
-steffey
-steffi
-steffie
-steffy
-stegall
-steggall
-stegman
-stegmuel
-stehen
-stehr
-steidel
-steiert
-steinar
-steinbac
-steinber
-steinhar
-steip
-stejskal
-steklasa
-stelcner
-stella
-stellita
-stellwag
-stemmler
-stender
-stennett
-stenson
-stensrud
-stepchuk
-steph
-stepha
-stephan
-stephana
-stephane
-stephani
-stephann
-stephans
-stephanu
-stephany
-stephe
-stephen
-stepheni
-stephens
-stephi
-stephie
-stephine
-stepler
-stepp
-steranka
-stercyk
-sterczyk
-sterescu
-stergios
-sterian
-sterling
-stern
-sterne
-stesha
-steski
-stetner
-stetson
-stetter
-stettner
-stevan
-stevana
-stevanov
-steve
-steven
-stevena
-stevens
-stevenso
-stevie
-stevy
-stew
-steward
-stewart
-stewart-
-sticklan
-sticpewi
-stiglitz
-stiles
-stillman
-stillwel
-stimler
-stina
-sting
-stinky
-stinson
-stinzian
-stirling
-stirrett
-stites
-stjohn
-stobaugh
-stock
-stocker
-stocks
-stockton
-stockwel
-stodart
-stoddard
-stoelzle
-stoevsky
-stoffels
-stoker
-stokes
-stokker
-stokoe
-stokoski
-stolzle
-ston
-stone
-stonebra
-stonehou
-stoner
-stonos
-stooke
-storace
-storelli
-storey
-storm
-stormi
-stormie
-stormy
-storrie
-story
-stotts
-stotz
-stouder
-stough
-stovall
-stover
-stowe
-stoyles
-strachan
-strackho
-strader
-straka
-strandbe
-strandlu
-strannem
-strasser
-stratfor
-stratton
-straub
-strauch
-strauss
-strautma
-strawczy
-strayhor
-streater
-streatfi
-streibel
-streight
-streng
-strickla
-strider
-strober
-strock
-stroemer
-strohmey
-strom
-stronski
-stropp
-stroud
-stroupe
-strube
-struble
-strucche
-strudwic
-struzyns
-stu
-stuart
-stubblef
-stubbs
-stuckey
-stude
-student
-studer
-stults
-stumpf
-sturdiva
-sture
-sturrock
-stutts
-su
-su-xin
-suany
-suarez
-suat
-subasing
-subhash
-subhashi
-subhi
-subhra
-subhrans
-subi
-subick
-subissat
-subitha
-submital
-subodh
-subra
-subraman
-subroto
-subsara
-subu
-sucha
-suchitra
-suchocki
-suda
-sudabeh
-sudan
-sudbey
-sudbury
-suddarth
-sudeep
-sudesh
-sudha
-sudhakar
-sudhir
-sudip
-sue
-sue-joe
-sue-may
-sueanne
-suejoe
-sueling
-suellen
-suen
-suer
-suess
-sufcak
-suffern
-sugandi
-sugarbro
-sugarman
-sugih
-sugihara
-suh
-suha
-suhail
-suharly
-suhas
-suilin
-suiping
-suitt
-sujay
-suk-ho
-suk-jae
-suk-yin
-sukey
-sukhendu
-sukho
-sukhwant
-suki
-sukjae
-sukku
-sukumar
-sula
-sulatyck
-sule
-sulewski
-suliguin
-sullivan
-sully
-sultan
-suman
-sumanth
-sumaryan
-sume
-sumi
-sumit
-sumitro
-summach
-summerli
-summers
-sumner
-sumpter
-sunatori
-sundar
-sundaram
-sundares
-sunderla
-sundra
-sung
-sung-cho
-sung-sup
-sungchin
-sungchon
-sunghae
-sungki
-sungkyoo
-sungsup
-sunil
-sunjay
-sunnie
-sunning
-sunny
-sunshine
-sunstrum
-suomela
-supervis
-support
-suprick
-supriya
-supriyo
-sura
-surazski
-surber
-surendra
-suresh
-suria
-surinder
-surowani
-surray
-surreau
-surridge
-sursal
-survey
-surya
-susan
-susana
-susanett
-susann
-susanna
-susannah
-susanne
-susanto
-susette
-susi
-susick
-susie
-susil
-sussie
-susumu
-susy
-sutardja
-sutarja
-sutarwal
-sutcliff
-suter
-sutera
-sutherla
-suthers
-sutija
-sutphen
-sutter
-sutterfi
-sutterli
-sutton
-suu
-suvanee
-suwala
-suwanawo
-suwandi
-suxin
-suyama
-suykens
-suyog
-suzan
-suzane
-suzann
-suzanna
-suzanne
-suzette
-suzi
-suzie
-suzuki
-suzy
-svalesen
-svante
-sven
-svend
-svenn-er
-svensson
-sventek
-svetlana
-svilans
-svm-bnrm
-svo
-svr
-swact
-swaden
-swails
-swaine
-swamy
-swandi
-swann
-swanson
-swanston
-swaranji
-swartz
-swazey
-swd
-swearing
-swee-joo
-sweeney
-sweetnam
-swen
-swenberg
-swensen
-swenson
-swepston
-swiat
-swiatkow
-swick
-swidersk
-swinamer
-swinburn
-swinkels
-swinks
-swinney
-swinson
-swinwood
-swisher
-switchin
-switzer
-swope
-swr
-swyer
-sy
-syal
-syamala
-sybil
-sybila
-sybilla
-sybille
-sybyl
-sycha
-syd
-sydel
-sydelle
-sydeman
-sydney
-sydnor
-sydor
-sydoryk
-syed
-sykes
-syl
-sylas
-sylva
-sylvain
-sylvan
-sylveste
-sylvestr
-sylvia
-sylvie
-sylvio
-sym
-syman
-symen
-symon
-symons
-syndra
-synful
-synness
-syposz
-syres
-syrett
-sys
-sysadmin
-sysint
-syssuppo
-systems
-systest
-syun
-syyed
-szabo
-szamosi
-szaplonc
-szaran
-szeto
-sziladi
-szkarlat
-szopinsk
-szot
-szpakows
-szpilfog
-sztein
-szuminsk
-szura
-szymansk
-szypulsk
-ta
-ta-sung
-tab
-tabaja
-tabalba
-tabatha
-tabb
-tabbatha
-tabbert
-tabbi
-tabbie
-tabbitha
-tabby
-taber
-tabina
-tabitha
-tabl
-tabler
-tables
-tabor
-tac
-tachih
-tacitus
-tad
-tadayuki
-tadd
-taddeo
-taddeusz
-taddio
-tadeas
-tadeo
-tades
-tadeusz
-tadevich
-tadge
-tadio
-tadlock
-tae
-tae-ho
-tae-hwan
-taeho
-taehwan
-taffy
-taggart
-taghizad
-tague
-tahamont
-tahani
-taharudd
-taheri
-tahir
-tahsin
-tai
-tai-jen
-tailinh
-tailor
-taina
-tait
-taite
-taiwana
-tajbakhs
-tak
-tak-wai
-takagi
-takahash
-takahisa
-takako
-takao
-takashi
-takashim
-takata
-takayuki
-takefman
-takehiko
-takeo
-takeshim
-takeuchi
-taki
-takis
-takiyana
-tal
-talbert
-talbot
-talbott
-talcott
-talevi
-talia
-talis
-tallett
-tallia
-tallie
-tallou
-tallulah
-tally
-talmont
-talmy
-talton
-talya
-talyah
-tam
-tamar
-tamara
-tamarah
-tamarell
-tamaresi
-tamarra
-tamas
-tamasi
-tamer
-tamera
-tami
-tamiko
-tamir
-tamma
-tammara
-tammaro
-tammi
-tammie
-tammy
-tamqrah
-tamra
-tamrazia
-tamura
-tan
-tan-atic
-tana
-tanaka
-tanchak
-tancordo
-tandberg
-tandi
-tandie
-tandiono
-tandiwe
-tandy
-tanferna
-tanglao
-tangren
-tanhya
-tani
-tania
-tanio
-tanir
-tanitans
-tanja
-tann
-tanner
-tanney
-tannie
-tanniere
-tanny
-tansy
-tanya
-tao
-tap
-tapani
-tape
-tapner
-tapp
-tappende
-tappert
-tapsell
-tara
-tarah
-tarak
-taralp
-taraneh
-tarant
-taranto
-taraschu
-tarasewi
-tardif
-tardiff
-tardioli
-tarek
-taren
-tareq
-targosky
-tarik
-tariq
-tarlamis
-tarle
-tarmi
-tarnai
-tarng
-taro
-tarof
-tarquini
-tarra
-tarrah
-tarrance
-tarrant
-tarsky
-tarte
-tarus
-tarver
-taryn
-taryna
-tas
-taschere
-tash
-tasha
-tasia
-taskforc
-taspatch
-tassi
-tasso
-tassy
-tasuk
-tasung
-tat
-tata
-tatangsu
-tatar
-tate
-tatemich
-tates
-tateyama
-tatiana
-tatiania
-tats
-tatsdocn
-tatsman
-tatsugaw
-tatsuya
-tattenba
-tatum
-tatyana
-tauberg
-taul
-tauna
-taurus
-tauscher
-tauvia
-tavana
-tavares
-taverner
-tavis
-tawauna
-tawfik
-tawnya
-tawsha
-taxashi
-tay
-tayeb
-tayfun
-taylor
-taylor-h
-tayyab
-tc
-tchangid
-tchir
-td
-tdr
-te-chih
-te-hsiu
-te-wei
-teacher
-teador
-teague
-team
-teasley
-tebbe
-tebinka
-tec
-tech
-techih
-technica
-technoso
-teck
-tecklenb
-ted
-tedd
-tedda
-teddi
-teddie
-teddy
-teder
-tedi
-tedie
-tedman
-tedmund
-tedra
-tedrick
-teed
-teena
-teerdhal
-teetwo
-teh
-tehchi
-tehsiu
-teichman
-teiichi
-tein-min
-teinmin
-teirtza
-teitelba
-tej
-tejada
-tejal
-tejani
-tel
-telco
-tele
-telecom
-telesis
-telex
-telfer
-telidis
-telke
-tello
-tellup
-telos
-telva
-temp
-temple
-temple-d
-templeto
-ten-huei
-tena
-tencer
-teng
-tenhuei
-teniola
-tenna
-tennant
-tenney
-tennyson
-teo
-teodoor
-teodor
-teodora
-teodoric
-teodoro
-tera
-terakado
-teran
-terangue
-terence
-terencio
-teresa
-terese
-teresina
-teresita
-teressa
-terez
-teri
-teriann
-terminal
-terneus
-terr
-terra
-terrade
-terrance
-terranel
-terranov
-terrel
-terrell
-terrence
-terresa
-terri
-terri-jo
-terri-le
-terrie
-terrijo
-terrilei
-terrill
-terry
-terrye
-terryl
-tersina
-teruko
-teruo
-teruyuki
-terwey
-terwilli
-terza
-terzian
-tesa
-tesch
-tesfagab
-tesfamar
-tesh
-tesla
-tess
-tessa
-tessi
-tessie
-tessier
-tessler
-tessty
-tessy
-testa
-testagc
-tester
-testing
-testingp
-testntmv
-testsds
-testtool
-tetrault
-tetreaul
-tetsukaz
-tetsumo
-tetsuo
-tetsuya
-tetsuyuk
-teufel
-tevlin
-tewksbur
-tex
-teymour
-thabet
-thac
-thach
-thacher
-thacker
-thad
-thaddeus
-thaddus
-thadeus
-thai
-thain
-thaine
-thais
-thaker
-thakor
-thakur
-thaler
-thalia
-tham
-thames
-thane
-thang
-thanh
-thanh-ha
-thanh-ho
-thanh-hu
-thanh-qu
-thanh-so
-thanh-ti
-thanos
-thao
-tharby
-tharring
-thatch
-thatcher
-thatte
-thaxter
-thaxton
-thayer
-thayne
-the
-the worl
-thea
-theadora
-thebault
-theda
-thedford
-thedora
-thedric
-thedrick
-thege
-theis
-thekla
-thelma
-theloose
-themann
-theo
-theobald
-theochar
-theodor
-theodora
-theodore
-theodori
-theodosi
-theofani
-theohari
-theologo
-theoret
-thera
-theresa
-therese
-theresin
-theresit
-theressa
-theriaul
-therien
-therine
-theriot
-theron
-therrien
-thersa
-thevenar
-thewalt
-thi
-thi-cuc
-thia
-thibaud
-thibault
-thibaut
-thibeaul
-thibert
-thibodea
-thibon
-thiebaut
-thieken
-thiel
-thiem
-thien
-thierry
-thiery
-thies
-thiessen
-thieu
-thifault
-thill
-thimothy
-thinh
-think
-thirugna
-this dir
-thisdel
-thisner
-thoai
-thoi
-thom
-thoma
-thomaier
-thomalla
-thomas
-thomasa
-thomasi
-thomasia
-thomasin
-thomason
-thomasse
-thomassi
-thombors
-thomey
-thomlins
-thompson
-thoms
-thomsen
-thomson
-thon
-thondanu
-thor
-thoreau
-thorin
-thorley
-thorman
-thorn
-thornber
-thornbur
-thorndik
-thorne
-thornie
-thornley
-thornton
-thorny
-thorpe
-thorsen
-thorslun
-thorson
-thorstei
-thorsten
-thorvald
-those
-threader
-thrift
-throgmor
-thu
-thuan
-thuesen
-thum
-thumm
-thuong
-thurgood
-thurley
-thurman
-thurstan
-thurston
-thuswald
-thuthuy
-thuy
-thyagara
-ti
-ti-cheng
-ti-jeun
-tian
-tianbao
-tiberghi
-tibi
-tibold
-tibor
-tice
-ticheng
-ticzon
-tidball
-tidd
-tidwell
-tiebold
-tiebout
-tiedeman
-tiefenth
-tiegs
-tien
-tien-bue
-tien-chi
-tiena
-tienbuen
-tienchie
-tienyow
-tierney
-tiertza
-tieu
-tiff
-tiffani
-tiffanie
-tiffany
-tiffi
-tiffie
-tiffy
-tigg
-tigger
-tigran
-tihanyi
-tiina
-tijeun
-tilak
-tilbenny
-tilda
-tilden
-tildi
-tildie
-tildy
-tiler
-tilk
-tille
-tiller
-tilley
-tillie
-tillman
-tilly
-tilmon
-tilson
-tilton
-tim
-timeshee
-timi
-timleck
-timler
-timm
-timmer
-timmerma
-timmi
-timmie
-timmins
-timmons
-timms
-timmy
-timo
-timofei
-timos
-timoteo
-timothea
-timothee
-timotheu
-timothy
-timpson
-tims
-timsit
-timtsche
-tin
-tina
-tine
-tineke
-tiner
-ting
-ting-shu
-ting-tin
-ting-yu
-tingshuo
-tingting
-tingyu
-tingyue
-tini
-tinney
-tino
-tintor
-tiny
-tio
-tiong-ho
-tip
-tiphani
-tiphanie
-tiphany
-tippett
-tipping
-tippy
-tipton
-tirrell
-tischhau
-tischler
-tisdale
-tisdall
-tiseo
-tish
-tisha
-titian
-tito
-titos
-titus
-tiu
-tiwari
-tiziano
-tjahjadi
-tjia
-tjiong
-tjoe
-tjong
-toan
-toastmas
-toba
-tobe
-tobey
-tobi
-tobiah
-tobias
-tobie
-tobin
-tobit
-toby
-tobye
-tod
-todaro
-todd
-toddi
-toddie
-toddy
-todloski
-todo
-todorovi
-toerless
-toews
-toft
-togasaki
-tognoni
-tohama
-toi
-toiboid
-toinette
-tolar
-toles
-toletzka
-tolgyess
-tolle
-tollefse
-tolson
-tolstoy
-toly
-tom
-toma
-tomacic
-tomack
-tomacruz
-tomar
-tomas
-tomasett
-tomasina
-tomasine
-tomaso
-tomassi
-tomasz
-tomaszew
-tombul
-tome
-tomes
-tomi
-tomkin
-tomlin
-tomlinso
-tommaso
-tommi
-tommie
-tommy
-tomochek
-tomohiro
-tomoyosh
-tompkins
-tomy
-tonelli
-toney
-tong
-tongder
-toni
-tonia
-tonie
-tonkovic
-tonnie
-tonny
-tonogai
-tonu
-tony
-tonya
-tonye
-tookey
-toolbox
-toole
-tooley
-toolroom
-tools
-toolset
-toomer
-toone
-toop
-toothman
-tootsie
-tooyserk
-toperzer
-topgun
-toplis
-topo
-topol
-topp
-tor
-torain
-torbert
-torcac
-tordocs
-tore
-torey
-tori
-torian
-torie
-toril
-torin
-tornes
-tornqvis
-torok
-torr
-torrance
-torre
-torrealb
-torrell
-torrence
-torrens
-torres
-torrey
-torrie
-torrin
-torry
-torsten
-torunn
-tory
-tosca
-toscano
-tosczak
-toshach
-toshachn
-toshi
-toshiaki
-toshihir
-toshinar
-toss
-tostenso
-tota
-totaro
-toth
-totino
-totman
-totten
-totti
-touati
-touchett
-toufic
-tougas
-toulson
-toupin
-tousigna
-toussain
-tova
-tovah
-tove
-towaij
-towers
-towill
-towler
-towles
-town
-towney
-townie
-townley
-towns
-townsel
-townsend
-townson
-towny
-towsley
-toyanne
-toyoji
-toyooka
-tprl
-trace
-tracee
-traces
-tracey
-tracey-m
-trachsel
-traci
-tracie
-tracy
-tracz
-trader
-trae
-trafford
-trahan
-trainer
-training
-trainor
-trajan
-tramar
-trame
-tran
-tranfagl
-trang
-transki
-translat
-tranter
-trasmund
-traugott
-traulich
-traut
-trautman
-travel-p
-travelpe
-traver
-travers
-travis
-travus
-traxler
-trayer
-traylor
-traynor
-trecia
-tredenni
-tredway
-treen
-trees
-trefor
-trefry
-trefts
-tregenza
-treisman
-trek @
-tremain
-tremaine
-tremayne
-tremblay
-tremewan
-trenna
-trent
-trentadu
-trenton
-tres
-tres-sup
-tresa
-trescha
-trese
-tresrch
-tressa
-trev
-trevar
-trever
-trevetha
-trevitt
-trevor
-trey
-tri
-trial
-triantap
-tricci
-tricia
-trickett
-tricord
-trieu
-trif
-trifiro
-triggian
-trijanto
-trimble
-trina
-trindy
-trinh
-trinidad
-trink
-trip
-tripier
-tripleho
-tripp
-tripps
-tris
-trish
-trisha
-trisic
-trisko
-trista
-tristam
-tristan
-tristano
-trittler
-tritton
-trivedi
-trix
-trixi
-trixie
-trixy
-trocchi
-trochu
-troesch
-trojak
-tromm
-trong
-tropea
-tropeano
-trotsky
-trotter
-trottier
-troubors
-troup
-trowbrid
-troy
-troyvoi
-trpisovs
-trstram
-tru-fu
-truchon
-truda
-trude
-trudel
-trudell
-trudey
-trudi
-trudie
-trudy
-truebloo
-truelove
-trueman
-truesdal
-truffer
-trujillo
-trula
-trull
-truls
-trumaine
-truman
-trumann
-trumble
-trung
-trungy
-trunley
-truong
-truran
-trussler
-trutsche
-truus
-tryfon
-trying
-tsai
-tsai-hun
-tsaihung
-tsakalis
-tsalikis
-tsang
-tsao
-tsay
-tschaja
-tschann
-tse
-tse-lian
-tseliang
-tseng
-tsenter
-tsern
-tsiakas
-tsing
-tsitsior
-tsitsons
-tso
-tsolas
-tsong-li
-tsonglia
-tsonos
-tsortos
-tsoucas
-tsugio
-tsui
-tsuji
-tsuk
-tsun-kuo
-tsun-yuk
-tsuneo
-tsung
-tsunkuo
-tsunoda
-tsunyuk
-tsuyoshi
-ttisuppo
-tu
-tuan
-tubb
-tuck
-tucker
-tuckie
-tucky
-tudo
-tudor
-tue
-tuen
-tuesday
-tuffo
-tufford
-tuhina
-tuhr
-tulga
-tulio
-tulip
-tulk
-tull
-tulley
-tullius
-tullo
-tully
-tun-lin
-tuna
-tunali
-tung
-tung-min
-tunghsin
-tungming
-tunon
-tuoi
-tuok
-tuong
-tupas
-tupling
-turbes
-turbyfil
-turchan
-turcot
-turcotte
-turgay
-turing
-turkeer
-turkey
-turki
-turkki
-turkovic
-turnbull
-turner
-turney
-turpin
-turrubia
-turunen
-turus
-tushar
-tussey
-tusting
-tutt
-tuttle
-tuxford
-tuyen
-tuyetphu
-twa
-twana
-twarog
-tweddle
-tweetie
-twidale
-twiggy
-twila
-twiss
-twitty
-twolan
-twx
-twyla
-twyman
-twynham
-twyver
-txp
-ty
-tyack
-tybalt
-tybi
-tybie
-tyda
-tye
-tyke
-tyler
-tymchuk
-tymon
-tymothy
-tynan
-tyndall
-tyne
-tyner
-typer
-tyra
-tyrance
-tyroler
-tyron
-tyronda
-tyrone
-tyrrell
-tyrus
-tyson
-tzanetea
-tzeng
-tzong-sh
-tzong-ya
-tzongshi
-tzongyan
-tzou
-tzuang
-tzung
-uae
-uathavik
-uberig
-uchida
-uchiyama
-udale
-udall
-uday
-udaya
-udayasek
-ude
-udell
-uecker
-ueda
-uehara
-ueyama
-uffner
-ufomadu
-ugo
-uguccion
-ugwa
-uhl
-uhley
-uhlhorn
-uhlig
-ukena
-ula
-ulberto
-ulf
-ulgen
-uli
-ulick
-ulises
-ulla
-ully
-ulric
-ulrica
-ulrich
-ulrick
-ulrika
-ulrikaum
-ulrike
-ultrason
-uludamar
-ulysses
-umakanta
-umakanth
-umberto
-umeeda
-umeh
-umeko
-umesh
-umetsu
-umphres
-una
-una-mae
-unabr.di
-underwoo
-unger
-unitt
-unix
-unixsupp
-unkefer
-unkles
-unreg
-unsoy
-unxlb
-upchurch
-updt
-upen
-uppal
-upshaw
-upton
-urata
-urbain
-urban
-urbanic
-urbano
-urbanowi
-urbanus
-urbashi
-urbick
-urbielew
-urbshas
-uresh
-uri
-uriah
-uriel
-urnes
-urow
-urquhart
-urs
-ursa
-ursala
-ursola
-urson
-ursula
-ursulina
-ursuline
-urwin
-us
-usa
-useng
-user
-usman
-usrouter
-uswrsd
-usyk
-uszynski
-uta
-utah
-utas
-utilla
-utpal
-utpala
-utsumi
-uunko
-uvieghar
-uyar
-vachel
-vacher
-vachiran
-vachon
-vaclav
-vaculik
-vadala
-vadali
-vadi
-vadim
-vafaie
-vaglio-l
-vahary
-vahdat
-vahe
-vahedi
-vahid
-vaid
-vail
-vaillanc
-vaillant
-vairavan
-vajentic
-vajih
-vakhshoo
-vakili
-val
-valaree
-valaria
-valcourt
-valda
-valdemar
-valdez
-vale
-valeda
-valencia
-valene
-valenka
-valenta
-valente
-valentia
-valentij
-valentik
-valentin
-valenzia
-valera
-valeria
-valerie
-valerien
-valerio
-valerius
-valery
-valerye
-valia
-valida
-valin
-valina
-valinda
-valiquet
-valiveti
-valko
-valkyrie
-valla
-vallath
-valle
-vallee
-vallejos
-vallenty
-vallet
-valli
-valliani
-vallie
-vallier
-valliere
-vallipur
-vallozzi
-vally
-valma
-valois
-valorie
-valry
-valvasor
-van
-van alph
-van alst
-van atta
-van bake
-van bent
-van coon
-van den
-van der
-van dyke
-van es
-van eyk
-van flee
-van gaal
-van hast
-van hols
-van hoy
-van huls
-van kast
-van kess
-van klin
-van late
-van leeu
-van loon
-van mans
-van mete
-van nest
-van oors
-van orde
-van phil
-van rijn
-van rijs
-van scho
-van schy
-van sick
-van terr
-van veen
-van vrou
-van weri
-van-king
-vanaman
-vanasse
-vance
-vanda
-vandagri
-vandenbe
-vandenbo
-vandenhe
-vandenki
-vanderbi
-vanderbo
-vanderbu
-vanderge
-vanderhe
-vanderho
-vanderpo
-vanderve
-vanderwe
-vandeval
-vandevan
-vandeven
-vandewat
-vandewou
-vandomme
-vandoorn
-vandusen
-vanessa
-vangaste
-vania
-vanity
-vankoote
-vanlaar
-vanliew
-vann
-vanna
-vanni
-vannie
-vanny
-vanpatte
-vanstaal
-vanstory
-vanta
-vanter
-vanwormh
-vanwyche
-vanya
-vanzella
-varady
-varaiya
-varano
-varda
-vardy
-varennes
-vargas
-vargo
-varia
-varkel
-varkey
-varley
-varmazis
-varsava
-vartanes
-varughes
-varujan
-vasan
-vasantha
-vasarhel
-vaserfir
-vasil
-vasile
-vasili
-vasiliad
-vasiliki
-vasilis
-vasilopo
-vasily
-vason
-vasoufz
-vassili
-vassilik
-vassilis
-vassily
-vassos
-vastine
-vasu
-vasudeva
-vaswani
-vaterlau
-vaters
-vaughan
-vaughn
-vavarout
-vavroch
-vawter
-vax
-vazirani
-vea
-veale
-veals
-veciana
-veck
-ved
-veda
-vedant
-veedell
-veen
-veena
-vega
-vehling
-veillett
-veilleux
-veit
-vejar
-veklerov
-veksler
-vela
-velasque
-vele
-veleta
-velez
-veljko
-vella
-velline
-vellino
-velma
-veloria
-veloz
-velsher
-velvet
-vempati
-ven
-venbakm
-vendette
-veneice
-veness
-veng
-venger
-venguswa
-venier
-venita
-venjohn
-venkat
-venkata
-venkatak
-venkatar
-venkates
-venkatra
-venne
-venner
-venning
-vennos
-ventrone
-ventura
-venturin
-venus
-vera
-veradis
-verardi
-verch
-verde
-verdi
-verdonse
-vere
-verena
-verene
-verge
-verghese
-vergil
-verheyde
-verhoeve
-verhotz
-veriee
-verifica
-verile
-verina
-verinder
-verine
-verkroos
-verla
-verlyn
-verma
-vermeesc
-vermette
-vern
-verna
-verne
-vernen
-verney
-vernice
-verniece
-vernita
-vernon
-vernor
-verona
-veronica
-veronika
-veronike
-veroniqu
-verreau
-verrenne
-verrilli
-versace
-versteeg
-vertolli
-verville
-veryl
-verzilli
-veselko
-vesna
-vespa
-vester
-vesterda
-vetil
-vetrano
-vetrie
-vetter
-vettese
-vevay
-vexler
-vey
-veyrat
-vezeau
-vezina
-vi
-viano
-viau
-viavant
-vibeke
-vic
-vice
-vicente
-vicheara
-vick
-vickers
-vicki
-vickie
-vicky
-victoir
-victor
-victoria
-vicuong
-vida
-vidaurri
-videa
-vidhyana
-vidmer
-vidovic
-vidovik
-viduya
-vidya
-viegas
-vieger
-viehweg
-vieillar
-vieira
-vieiro
-viens
-viera
-vieregge
-vigeant
-viitanie
-vijai
-vijay
-vijaya
-vijayala
-vijya
-vik
-vikas
-viki
-vikki
-vikky
-vikram
-vikrant
-viktor
-viktoria
-vilas
-vilayil
-vilhan
-vilhelm
-vilhelmi
-vilis
-villanue
-villarea
-villella
-villeneu
-vilma
-vilmanse
-vilok
-vilozny
-vimal
-vimi
-vin
-vina
-vinas
-vinay
-vince
-vincent
-vincente
-vincents
-vincenty
-vincenz
-vincenzo
-vineet
-vinet
-viney
-vinh
-vinita
-vinnell
-vinni
-vinnie
-vinny
-vino
-vinod
-vinson
-viola
-violante
-viole
-violet
-violeta
-violetta
-violette
-vipi
-vipul
-viqar
-virani
-virant
-virchick
-virge
-virgie
-virgil
-virgilio
-virgina
-virginia
-virginie
-virgoe
-viriato
-viriya
-virk
-virko
-visentin
-vish
-vishal
-vishwa
-visiting
-viskanta
-visockis
-vispi
-vispy
-visser
-vistlik
-visvanat
-viswa
-viswamit
-vita
-vitacco
-vitaglia
-vital
-vite
-vithit
-vitia
-vito
-vitoria
-vittoria
-vittorio
-viv
-viva
-viveca
-vivek
-vivi
-vivia
-vivian
-viviana
-viviane
-vivianna
-vivianne
-vivie
-vivien
-viviene
-vivienne
-vivier
-viviyan
-vivyan
-vivyanne
-vlad
-vladamir
-vladdy
-vladica
-vladimir
-vladisla
-vlado
-vlahos
-vlanin
-vm
-vmbackup
-vmchange
-vmcord
-vmsuppor
-vmxa
-vo
-voadmin
-vodicka
-voduc
-voelcker
-vogel
-vogt
-voight
-voitel
-volchegu
-volfe
-volk
-volker
-volkmann
-volkmer
-vollmer
-volz
-von
-von ende
-von semm
-von zube
-voncanno
-vonck
-vonderha
-vondersc
-vonderwe
-vonlehmd
-vonni
-vonnie
-vonny
-vonreich
-vony
-vonzant
-voort
-vopalens
-vopni
-voros
-vosberg
-vosburg
-voss
-vosu
-vosup
-voula
-vowels
-vrabel
-vradmin
-vrbetic
-vreugden
-vries
-vrinda
-vrouwerf
-vu
-vucinich
-vuhoan
-vuignier
-vuncanno
-vuong
-vuquoc
-vyachesl
-vyaragav
-vyas
-vyjayant
-vyky
-vyza
-wa
-waals
-wacheski
-wachtste
-wacker
-wada
-wadasing
-waddell
-wadden
-waddick
-waddingt
-wade
-wadkins
-wadswort
-waespe
-waeyen
-wagage
-wager
-wagers
-waggoner
-waghorne
-waghray
-wagle
-wagner
-wagoner
-wahab
-wahbe
-wahju
-wai
-wai-bun
-wai-chau
-wai-chin
-wai-fah
-wai-hung
-wai-leun
-wai-man
-waichi
-waid
-waidler
-waifah
-waigh
-waihung
-wain
-waines
-wainwrig
-waissman
-wait
-waite
-waiter
-waitman
-waja
-wakabaya
-wakako
-wake
-wakefiel
-wakeham
-wakim
-walas
-walbridg
-walburga
-walchli
-wald
-waldemar
-walden
-waldick
-waldie
-waldo
-waldon
-waldron
-wales
-waletzky
-walford
-walia
-walid
-walker
-walkins
-walkley
-walkowia
-wallace
-wallache
-wallaert
-wallas
-wallbank
-waller
-walles
-walley
-wallgren
-wallie
-wallis
-walliw
-walls
-wally
-waloff
-walpole
-walrand
-walrond
-walser
-walsh
-walston
-walt
-walta
-waltdisn
-walter
-walters
-walther
-walton
-waltraud
-waly
-walz
-wambsgan
-wamozart
-wan
-wanda
-wandel
-wandie
-wandis
-wandojo
-wandsche
-waneta
-wang
-wanids
-wannell
-wanner
-wans
-wanzeck
-war
-warburg
-warburto
-ward
-warde
-warden
-wardle
-wardrop
-ware
-wares
-warfel
-wargnier
-warin
-waring
-wark
-warkenti
-warner
-warnock
-warnow
-warrello
-warren
-warriner
-warshaws
-wartman
-warun
-warwick
-waschuk
-waserman
-wash
-washburn
-washingt
-wasim
-wasitova
-wasley
-wasmeier
-wassel
-wasserma
-wassim
-wasson
-wasylenk
-wasylyk
-wat
-watanabe
-watchmak
-watchorn
-waterhou
-waterman
-waters
-watford
-watkins
-watkinso
-watmore
-watson
-watters
-wattier
-watts
-watznaue
-waucheul
-waugh
-waverley
-waverly
-way
-waybrigh
-wayez
-waylan
-wayland
-waylen
-wayler
-waylin
-wayling
-waylon
-wayman
-waymon
-wayne
-waytowic
-weagle
-weakley
-wealch
-weare
-wease
-weatherl
-weathers
-weaver
-web
-webb
-webber
-weber
-webster
-weckwert
-weddell
-wee-lin
-wee-seng
-wee-thon
-weedmark
-weeks
-wefald
-wefers
-wegener
-weger
-wegner
-wegrowic
-wehara
-wei
-wei-i
-wei-kun
-wei-tsig
-wei-yih
-weibust
-weicheng
-weichung
-weidar
-weidenbo
-weidenfe
-weider
-weidinge
-weidner
-weiguang
-weiheng
-weihs
-weihsing
-weii
-weijia
-weijie
-weikang
-weikuang
-weikun
-weil
-weilin
-weimin
-weimong
-weinbend
-weinberg
-weiner
-weingart
-weinkauf
-weiping
-weirich
-weisenbe
-weiser
-weiss
-weist
-weitsig
-weitz
-weitzel
-weiyih
-welbie
-welby
-welch
-weldon
-welham
-welker
-wellard
-welling
-wells
-wellstoo
-welsch
-welsford
-welsh
-welten
-wemple
-wen
-wen-chie
-wen-hann
-wen-juin
-wen-kai
-wen-lian
-wen-miin
-wen-shan
-wenbin
-wenchien
-wenchih
-wenda
-wendall
-wendel
-wendelin
-wendell
-wendi
-wendi-st
-wendie
-wendista
-wendling
-wendong
-wendt
-wendy
-wendye
-weng
-wenham
-wenhann
-wenjuin
-wenliang
-wenmiin
-wennan
-wennerst
-wenona
-wenonah
-wensel
-wenshan
-wensley
-wentwort
-wentzcov
-wenxi
-wenyon
-wenzel
-wepf
-weppler
-werewolf
-werick
-weringh
-werling
-werner
-wernher
-wernik
-werth
-wertz
-wery
-wes
-wesenber
-wesley
-wesolosk
-wesolows
-wessel
-wessell
-wesselma
-wesselow
-wessels
-wessenbe
-west
-westbroo
-westcott
-wester
-westfall
-westgart
-westlake
-westleig
-westley
-westmore
-weston
-weston-d
-westphal
-westwood
-wetherbe
-wettelan
-wetzel
-wever
-weyand
-weylin
-wga
-whalen
-whaley
-whang
-whatley
-wheatley
-wheaton
-wheeler
-wheelock
-whei-may
-wheimay
-whelan
-whelpdal
-whetston
-whetzel
-whey
-whey-min
-wheyming
-whidden
-whinnery
-whipple
-whipps
-whirpool
-whirter
-whisenhu
-whiskin
-whisler
-whit
-whitaker
-whitby
-whitcomb
-whited
-whitefor
-whitehur
-whiteman
-whitesid
-whitfiel
-whitfill
-whitford
-whiting
-whitlock
-whitman
-whitmore
-whitney
-whitsell
-whitt
-whittake
-whittam
-whitten
-whittier
-whitting
-whitton
-whitty
-whitwam
-whitwell
-whitwort
-whoi
-whyte
-wiatt
-wichers
-wichman
-wicht
-wichterl
-wickes
-wickham
-wickie
-widdicom
-widdis
-widdowso
-widener
-widianto
-widows
-widrig
-widuch
-wiebe
-wiebren
-wiederho
-wiedman
-wiedmann
-wiegand
-wieland
-wiele
-wienert
-wiens
-wiercioc
-wierzba
-wieser
-wiesje
-wieslaw
-wieslawa
-wiest
-wigderso
-wiggin
-wiggins
-wiggs
-wight
-wigle
-wignall
-wikkerin
-wiklund
-wil
-wilbert
-wilbur
-wilburt
-wilby
-wilcox
-wilczews
-wilde
-wildeman
-wilden
-wilder
-wilderma
-wildgen
-wildman
-wildon
-wileen
-wilek
-wilemon
-wilen
-wilenius
-wilensky
-wiley
-wilf
-wilford
-wilfred
-wilfrid
-wilgosh
-wilhelm
-wilhelmi
-wilhelms
-wilhelmu
-wilhoit
-wilie
-wilke
-wilken
-wilkerso
-wilkes
-wilkie
-wilkin
-wilkins
-wilkinso
-wilko
-wilks
-will
-willa
-willabel
-willamin
-willard
-willcock
-willcox
-willdon
-willeke
-willekes
-willem
-willemij
-willemse
-willenbr
-willets
-willett
-willetta
-willette
-willey
-willhoff
-willi
-william
-williams
-willie
-willifor
-willis
-willison
-willmore
-willmott
-willough
-willow
-willson
-willy
-willyt
-wilma
-wilmar
-wilmer
-wilmette
-wilmont
-wilmore
-wilnai
-wilona
-wilone
-wilow
-wilsey
-wilson
-wilt
-wilton
-wiltz
-wimberle
-wimbush
-wimmer
-win
-win-chyi
-wina
-winchest
-winchyi
-winde
-windham
-windom
-windowin
-windsor
-windy
-winerman
-winfield
-winfred
-wing
-wing-ki
-wing-man
-wing-tai
-wingar
-wingard
-wingate
-wingfiel
-wingo
-wingrove
-wingtai
-wini
-winicki
-winifiel
-winifred
-winje
-winklema
-winkler
-winlow
-winn
-winna
-winnah
-winne
-winni
-winnie
-winnifre
-winningh
-winningt
-winnipeg
-winny
-winona
-winonah
-winsberg
-winsborr
-winsky
-winslow
-winstead
-winston
-winterbe
-winters
-winthrop
-wintour
-wippel
-wiring
-wirth
-wiseman
-wishewan
-wisniews
-wissinge
-wissler
-wit
-witchlow
-witham
-withrow
-witkowsk
-witney
-witold
-witort
-wits
-witt
-witte
-wittich
-wittie
-wittik
-wittman
-witty
-witzel
-witzman
-witzmann
-wladysla
-woan
-wobbrock
-woei-pen
-woelffel
-woessner
-woinsky
-wojciech
-wojcik
-wojdylo
-wojnar
-wojtecki
-wokoma
-wolczans
-wolf
-wolfe
-wolfenba
-wolff
-wolfgang
-wolfie
-wolfman
-wolford
-wolfs
-wolfson
-wolfy
-wolk
-woll
-woloshko
-wolowidn
-wolska
-wolski
-wolter
-womack
-womble
-won
-won-uk
-wonda
-wong
-wonuk
-wood
-woodall
-woodford
-woodhall
-woodie
-woodley
-woodlief
-woodline
-woodman
-woodrow
-woods
-woodson
-woodward
-woody
-woodyer
-wooff
-woojin
-wook
-wookie
-woolery
-wooley
-woollam
-woolley
-woolwine
-woon
-wooster
-wooten
-wooters
-wootton
-worden
-words fr
-words in
-working
-world.fa
-wormald
-worms
-worobey
-woroszcz
-worpell
-worrall
-worsley
-worth
-worthing
-worthy
-wortman
-wozniak
-wpms
-wracher
-wragg
-wray
-wren
-wrennie
-wriggles
-wright
-wrigley
-writing
-wrobel
-wroblews
-wruck
-wsadmin
-wsbackup
-wu
-wuan
-wueppelm
-wuertele
-wun
-wunderli
-wurtz
-wyant
-wyatan
-wyatt
-wyble
-wycoff
-wydra
-wye
-wykoff
-wylie
-wyllie
-wylma
-wylo
-wyman
-wymard
-wyn
-wyndham
-wynes
-wynn
-wynne
-wynnie
-wynny
-wyrstiuk
-wyss
-wytenbur
-wyzga-ta
-xantippe
-xavier
-xaviera
-xayaraj
-xena
-xenia
-xenophon
-xenos
-xerxes
-xever
-xi-nam
-xi-xian
-xian
-xiang-se
-xiangsen
-xianjie
-xiao
-xiao-min
-xiaobing
-xiaofei
-xiaofeng
-xiaoguan
-xiaohui
-xiaojing
-xiaolei
-xiaolin
-xiaolong
-xiaomei
-xiaoping
-xiaowen
-xiaoxia
-xie
-xila
-ximenes
-ximenez
-xin
-xingchao
-xingdong
-xinlin
-xinyi
-xiong
-xiqing
-xixian
-xmssuppo
-xnew
-xongxong
-xpm
-xpmbld
-xpmbuild
-xu
-xuan
-xuan-lie
-xuefeng
-xueling
-xumin
-xuong
-xylia
-xylina
-xymenes
-ya-shu
-yabe
-yach
-yadollah
-yaeger
-yael
-yafa
-yaghutie
-yahia
-yahyapou
-yakibchu
-yakimovi
-yakir
-yalcin
-yale
-yali
-yalonda
-yamada
-yamamoto
-yamaoka
-yamashit
-yamato
-yamaura
-yamin
-yan
-yan-shek
-yan-zhen
-yanagida
-yanan
-yanaton
-yance
-yancey
-yancy
-yandell
-yanjun
-yank
-yankee
-yann
-yanna
-yannick
-yannis
-yano
-yanosik
-yanshek
-yansun
-yao
-yao-nan
-yaonan
-yaphet
-yaping
-yarber
-yarbroug
-yard
-yardley
-yardy
-yarlanda
-yarnell
-yaron
-yarosh
-yaroslav
-yasar
-yaser
-yashu
-yasmeen
-yasmin
-yassa
-yassar
-yassin
-yasuaki
-yasuhiro
-yasuko
-yasumasa
-yasuo
-yasushi
-yasuura
-yate
-yates
-yatin
-yatish
-yau
-yau-fun
-yau-mun
-yau-wu
-yaumun
-yaung
-yauwu
-yavar
-yavuz
-yawar
-yazdani
-yazdi
-yc
-ye-sho
-yea-ping
-yeager
-yeal
-yeaping
-yearwood
-yeaton
-yechezke
-yeck
-yedema
-yee
-yee-ning
-yeh
-yehuda
-yehudi
-yehudit
-yeirnie
-yelena
-yelvingt
-yemuna
-yen
-yen-heng
-yen-jhy
-yen-meng
-yendall
-yeng
-yenheng
-yenilmez
-yenjhy
-yenmeng
-yenor
-yeo
-yeo-hoon
-yeocheol
-yeohoon
-yeong-ch
-yeong-eo
-yeongchy
-yeongeon
-yerga
-yerigan
-yerneni
-yesho
-yetta
-yettie
-yetty
-yetung
-yeun
-yeun-jyr
-yeung
-yeunjyr
-yevette
-yew-shin
-yewshing
-yezheng
-yezi
-yhu-tin
-yhutin
-yi
-yi-min
-yiannis
-yie-tarn
-yietarng
-yifei
-yigal
-yih
-yihban
-yihchih
-yii-mei
-yiimei
-yijean
-yikhon
-yiliang
-yim
-yimin
-ying
-ying-cdi
-yingcdi
-yishun
-yitan
-yiu-kong
-yiukong
-yixia
-yixin
-ylaine
-yll-chen
-yllcheng
-ynes
-ynez
-yngvar
-yoakum
-yock
-yoda
-yodha
-yoe
-yogesh
-yogeswar
-yogi
-yohe
-yokan
-yoke
-yoke-kee
-yokeley
-yoko
-yokono
-yokoono
-yolanda
-yolande
-yolane
-yolanthe
-yon-chun
-yonchun
-yong
-yong-hyu
-yongdong
-yonghyun
-yongil
-yongli
-yongxin
-yonhong
-yonik
-yonk
-yoo
-yoon
-yoon-mo
-yoonjung
-yoonmo
-yoonsik
-yoram
-yorgo
-yorgos
-york
-yorke
-yorker
-yoshi
-yoshiaki
-yoshihit
-yoshikaw
-yoshiko
-yoshimi
-yoshimit
-yoshinob
-yoshio
-yoshioka
-yoshiyam
-yosi
-yossaria
-yost
-yosuf
-you-lian
-youel
-youji
-youliang
-youlin
-youn
-youn-jun
-younan
-younes
-young
-young-ba
-young-il
-young-ju
-youngbai
-youngblo
-younger
-youngill
-younglov
-youngman
-youngqui
-youngs
-younjung
-younkin
-yount
-youping
-yousef
-yousefpo
-youssef
-yousuf
-youwen
-yovonnda
-yowell
-ysabel
-ytshak
-yu
-yu-chen
-yu-chian
-yu-chung
-yu-hung
-yu-kai
-yu-pei
-yu-wei
-yuan
-yuan-cha
-yuan-shi
-yuanchao
-yuanjian
-yuanshin
-yuchen
-yuchiang
-yuchong
-yudin
-yudy
-yue
-yue-min
-yue-shun
-yuechu
-yueh
-yueh-min
-yueh-shi
-yuehming
-yuehshio
-yuehwern
-yueli
-yuen
-yuen-pui
-yuenglin
-yueping
-yueshun
-yugang
-yuh-dauh
-yuh-jiun
-yuh-tai
-yuhanna
-yuhdauh
-yuhjiun
-yuhn
-yuhtai
-yuill
-yuji
-yujie
-yuk-wha
-yuke
-yukihiko
-yukiko
-yukinaga
-yukinobu
-yuklung
-yuko
-yuksel
-yukuo
-yul
-yule
-yulia
-yulma
-yum
-yuma
-yumi
-yumurtac
-yun
-yun-sun
-yundt
-yung
-yung-chi
-yung-chu
-yung-fu
-yung-pin
-yung-yu
-yungchia
-yungchun
-yungfu
-yunghuoy
-yungmuh
-yungping
-yungyu
-yunn-tzu
-yunntzu
-yunsun
-yuon-kua
-yuonkuan
-yupei
-yupin
-yurach
-yurchuk
-yuri
-yurik
-yussuf
-yuste
-yutaka
-yuting
-yuval
-yuwei
-yuyi
-yuyu
-yvan
-yves
-yvet
-yvette
-yvon
-yvonne
-yvor
-yzerman
-z-80
-z80
-zabek
-zabokrzy
-zabransk
-zabrina
-zaccari
-zaccaria
-zach
-zacharia
-zacharie
-zachary
-zacherie
-zachery
-zack
-zackaria
-zadeh
-zadorozn
-zadow
-zafar
-zafarano
-zafarull
-zafer
-zaga
-zagorsek
-zagorski
-zagrodne
-zahara
-zaharoff
-zaharych
-zahid
-zahir
-zahirul
-zahn
-zahnley
-zahra
-zaia
-zaid
-zaidi
-zaihua
-zainab
-zajac
-zak
-zaka
-zakai
-zakarow
-zaker
-zalameda
-zalcstei
-zalee
-zaleski
-zalite
-zaliznya
-zalman
-zalokar
-zaloker
-zalzale
-zaman
-zampino
-zan
-zanariah
-zander
-zandra
-zane
-zanet
-zaneta
-zanetti
-zanga
-zani
-zanni
-zantiris
-zapach
-zappe
-zara
-zaragoza
-zarah
-zarate
-zared
-zarella
-zaretsky
-zargham
-zaria
-zarkel
-zarla
-zarlenga
-zarrabia
-zarrin
-zatkovic
-zatti
-zattiero
-zatylny
-zauhar
-zauner
-zavadiuk
-zaven
-zawadka
-zaydan
-zazulak
-zbib
-zbignew
-zbigniew
-zbuda
-zdenek
-zdenka
-zdenko
-zea
-zeb
-zebadiah
-zebedee
-zebulen
-zebulon
-zecharia
-zed
-zedekiah
-zedrick
-zee
-zeggil
-zegray
-zehir-ch
-zehra
-zeidler
-zeiger
-zeigler
-zeilinge
-zeimet
-zein
-zeina
-zeisler
-zeitler
-zejing
-zeke
-zelda
-zelenka
-zelig
-zeljko
-zelko
-zeller
-zellers
-zelma
-zelsmann
-zelwer
-zemanek
-zen
-zena
-zenaida
-zenar
-zeng
-zenghong
-zenia
-zenisek
-zenkevic
-zenkner
-zenon
-zere
-zerk
-zero
-zerriffi
-zetterlu
-zetts
-zexiang
-zhang
-zhanna
-zhao
-zhaohong
-zhaoqi
-zhaoxu
-zhelka
-zhen
-zheng
-zhengyu
-zhilan
-zhishun
-zhiwei
-zhixin
-zhiyong
-zhong
-zhongde
-zhongfu
-zhongjin
-zhongqua
-zhongxia
-zhou
-zhuezhi
-zhuolin
-zi-ping
-zi-qiang
-zia
-ziad
-ziai
-zicheng
-ziebarth
-zieber
-ziegler
-ziehn
-zielinsk
-ziemba
-zigrand
-zilaie
-zilberst
-zilla
-zilvia
-zimmer
-zimmerer
-zimmerly
-zimmerma
-zina
-zinati
-zingale
-zingeler
-zinkie
-zinn
-zino
-ziomek
-zipcodes
-ziping
-zippora
-ziqiang
-zirko
-zissis
-zisu
-zita
-zitella
-zitko
-zito
-zitzmann
-ziva
-zivanovi
-zivilik
-zivkovic
-ziyi
-ziyou
-zlatin
-zlotnick
-znack
-zoe
-zoehner
-zoel
-zoellner
-zoenka
-zoerb
-zofia
-zohair
-zohar
-zohman
-zohreh
-zola
-zollie
-zollman
-zolly
-zolmer
-zoltan
-zonda
-zondra
-zone-chi
-zonechin
-zongyi
-zonker
-zonner
-zonnya
-zonoun
-zoppel
-zora
-zorah
-zoran
-zorana
-zoratti
-zorina
-zorine
-zork
-zorn
-zorony
-zorzi
-zottola
-zou
-zouheir
-zrobok
-zsa zsa
-zsazsa
-zubair
-zubans
-zuben
-zubricki
-zuccarel
-zuckerma
-zug
-zuhua
-zuk
-zukas
-zukosky
-zukovsky
-zulema
-zulfikar
-zumel
-zumhagen
-zumpf
-zunuzi
-zuranato
-zurawlev
-zureik
-zurl
-zuzana
-zvonar
-zwi
-zwick
-zwicker
-zwierzch
-zybala
-zyg
-zygmunt
-zylstra
+aaccf
+aalders
+aaren
+aarika
+aaron
+aartjan
+aasen
+ab
+abacus
+abadines
+abagael
+abagail
+abahri
+abasolo
+abazari
+abba
+abbai
+abbas
+abbatant
+abbate
+abbe
+abbey
+abbi
+abbie
+abbot
+abbott
+abby
+abbye
+abdalla
+abdallah
+abdel
+abdel-az
+abdel-ma
+abdel-ra
+abdel-sa
+abdelazi
+abdelmad
+abdelrah
+abdelran
+abdelsal
+abderrao
+abderraz
+abdi
+abdo
+abdollah
+abdolrah
+abdou
+abdrani
+abdul
+abdul-az
+abdul-ma
+abdul-no
+abdul-ra
+abdul-sa
+abdulazi
+abdulla
+abdullah
+abdulmad
+abdulrah
+abdulran
+abdulsal
+abdur
+abe
+abedi
+abel
+abelard
+abell
+abella
+abellera
+abello
+abelow
+abernath
+aberneth
+abeu
+abey
+abhay
+abhijit
+abi-aad
+abid
+abie
+abigael
+abigail
+abigale
+abike
+abner
+abou-arr
+abou-ezz
+aboul-ma
+aboussou
+abovyan
+abra
+abraham
+abrahan
+abrahim
+abram
+abramo
+abrams
+abran
+abrar
+absi
+abu
+abul
+access
+accounti
+acelvari
+achal
+achamma
+acharyya
+achcar
+achille
+achkar
+achmad
+ackaouy
+acker
+acklin
+ackwood
+acree
+acres
+acs
+action
+actionte
+acton
+aczel
+ad
+ada
+adah
+adahm
+adair
+adal
+adaline
+adam
+adamczyk
+adamkows
+adamo
+adamowic
+adams
+adamski
+adamson
+adamyk
+adan
+adara
+adcock
+adcox
+adda
+addetia
+addi
+addia
+addie
+addison
+addona
+addons
+addy
+ade
+adebayo
+adel
+adela
+adelaida
+adelaide
+adelbert
+adele
+adelheid
+adelia
+adelice
+adelina
+adelind
+adeline
+adella
+adelle
+adena
+adeney
+adeniyi
+aderhold
+adey
+adham
+adhem
+adi
+adiana
+adib
+adie
+adil
+adimari
+adina
+aditya
+adjangba
+adkinson
+adlai
+adler
+adlin
+admad
+admin
+admin-mt
+administ
+adnan
+adnane
+ado
+adolf
+adolfie
+adolph
+adolphe
+adolpho
+adolphus
+adora
+adore
+adoree
+adornato
+adorne
+adorno
+adrea
+adri
+adria
+adriaan
+adriaans
+adriaens
+adrian
+adriana
+adriane
+adrianna
+adrianne
+adriano
+adrie
+adrien
+adriena
+adriene
+adrienne
+adrion
+advance
+ae
+aeinstei
+aeriel
+aeriela
+aeriell
+aery
+afaq
+afif
+afke
+afkham
+afkham-e
+afo
+afton
+afzal
+ag
+agace
+agam
+agarwal
+agata
+agatha
+agathe
+agen
+agenia
+aggarwal
+aggi
+aggie
+aggregat
+aggy
+aghi
+aghili
+agily
+agna
+agnar
+agnella
+agnes
+agnese
+agnesse
+agneta
+agnew
+agnihotr
+agnola
+agostino
+agosto
+agretha
+aguiar
+aguie
+aguilar
+aguinsky
+aguirre
+aguistin
+aguste
+agustin
+ahad
+aharon
+ahbeng
+ahdieh
+ahlberg
+ahlers
+ahluwali
+ahmad
+ahmadi
+ahmed
+ahmet
+ahn
+ai-mei
+ai-tsung
+aida
+aidan
+aidarous
+aideen
+aiden
+aigneis
+aihua
+aija
+aiken
+aila
+ailbert
+aile
+ailee
+aileen
+ailene
+ailey
+aili
+ailina
+ailis
+ailsun
+ailyn
+aiman
+aime
+aimee
+aimei
+aimil
+aimone
+aindrea
+ainslee
+ainsley
+ainslie
+ainswort
+air
+aisha
+aitken
+aitsung
+ajay
+ajersch
+ajeya
+ajit
+ajmal
+ajoy
+akai
+akbar
+akbas
+akemi
+akens
+akers
+akhavan
+akhil
+akhtar
+akihiko
+akim
+akin
+akinniyi
+akio
+akira
+akita
+akkerman
+akram
+akrawi
+aksel
+akshay
+akyurekl
+al
+al bud
+al-basi
+al-tarab
+aladanga
+aladin
+alain
+alaine
+alair
+alameda
+alan
+alana
+alanah
+aland
+alane
+alanis
+alanna
+alano
+alanoly
+alanson
+alanturi
+alard
+alaric
+alary
+alasdair
+alastair
+alasteir
+alaster
+alavi
+alayne
+alb
+alba
+albea
+albeon
+alber
+alberik
+albers
+alberse
+albert
+alberta
+albertei
+albertin
+alberto
+alberts
+alberty
+albery
+albie
+albina
+albiston
+albrecht
+albright
+albritto
+albtenta
+alburger
+alcantar
+alcindor
+alcock
+alcott
+alden
+alderdic
+aldhizer
+aldin
+aldis
+aldo
+aldon
+aldous
+aldric
+aldrich
+aldridge
+aldus
+aldwin
+aldyn
+alec
+alecia
+aleda
+aleece
+aleen
+alegre
+aleinste
+alejandr
+alejoa
+aleke
+aleksand
+aleksic
+alena
+alene
+aleong
+alese
+alessand
+aleta
+alethea
+alev
+alex
+alexa
+alexan
+alexande
+alexandr
+alexei
+alexi
+alexia
+alexina
+alexine
+alexio
+alexis
+alexon
+alexson
+alf
+alfaro
+alfi
+alfie
+alfons
+alfonse
+alfonso
+alfonzo
+alford
+alfred
+alfreda
+alfredo
+alfy
+algernon
+algie
+algimant
+algood
+alguire
+ali
+alia
+alic
+alica
+alice
+alicea
+alicia
+alick
+alida
+alidia
+alidina
+alie
+alika
+alikee
+alikhan
+alina
+aline
+alink
+alioto
+alireza
+alis
+alisa
+alisande
+alisha
+alison
+alissa
+alistair
+alister
+alisun
+alix
+aliza
+alka
+alkarim
+alkire
+all the
+alla
+allahdin
+allahyar
+allam
+allaman
+allan
+allard
+allaway
+allaye-c
+allayne
+alleen
+allegra
+allen
+allene
+alles
+alleva
+alley
+alleyn
+alleyne
+allgood
+alli
+allianor
+allida
+allie
+allin
+allina
+allis
+allisan
+allison
+allissa
+allister
+allistir
+allix
+allman
+allsun
+allwork
+allx
+ally
+allyce
+allyn
+allys
+allyson
+alma
+almeda
+almeddah
+almena
+almendar
+almeria
+almerind
+almeta
+almira
+almire
+almon
+alms
+alnoor
+aloi
+aloin
+aloise
+aloisia
+alok
+alomari
+alon
+alonso
+alonzo
+alora
+aloysia
+aloysius
+alp
+alparsla
+alperovi
+alphard
+alphen
+alphonse
+alphonso
+alpine
+alred
+alric
+alsaleh
+alshabou
+alsop
+alspaugh
+alstine
+alston
+alswiti
+alta
+altadonn
+altay
+alteen
+altekar
+alten
+alternat
+althea
+altherr
+alting-m
+altman
+altmann
+alturing
+aluin
+aluino
+alva
+alvan
+alvarez
+alvaro
+alvean
+alvera
+alverta
+alvi
+alvie
+alvin
+alvina
+alvinia
+alvino
+alvira
+alvis
+alvy
+alwin
+alwyn
+aly
+alyce
+alyda
+alynn
+alyosha
+alyre
+alys
+alysa
+alyse
+alysia
+alyson
+alyss
+alyssa
+alzofon
+amabel
+amabelle
+amadeus
+amalea
+amalee
+amaleta
+amalia
+amalie
+amalita
+amalle
+amalu
+amand
+amanda
+amandi
+amandie
+amandip
+amando
+amandy
+amant
+amar
+amara
+amarendr
+amargo
+amarjit
+amarsi
+amarth
+amata
+amato
+amavisca
+ambach
+amber
+amberly
+amble
+ambler
+ambroise
+ambros
+ambrose
+ambrosi
+ambrosio
+ambrosiu
+ambur
+amby
+amda
+ame
+amedeo
+ameen
+amelia
+amelie
+amelina
+ameline
+amelita
+amelkar
+amenta
+america
+amerigo
+amery
+amgad
+ami
+amick
+amie
+amigo
+amii
+amil
+amin
+amina
+amini
+aminuddi
+aminzade
+amiot
+amir
+amit
+amitabh
+amitava
+amitie
+amity
+amiy
+amjad
+amlani
+ammamari
+ammar
+ammiel
+amnish
+amnon
+amol
+amorim
+amory
+amos
+amott
+amour
+amouzgar
+amparo
+amr
+amrik
+amril
+amrish
+amstutz
+amu
+amundsen
+amy
+amye
+an
+an-bin
+an-son
+ana
+anabal
+anabel
+anabella
+anabelle
+anader
+analiese
+analise
+anallese
+anallise
+anamary
+anand
+ananda
+anandaro
+ananmala
+anant
+ananth
+anantha
+ananyo
+anar
+anastasi
+anastass
+anatol
+anatola
+anatole
+anatoli
+anatollo
+anatoly
+anaya
+anbin
+ancel
+ancell
+anchia
+anconeta
+anctil
+anda
+andaree
+andee
+andeee
+ander
+anderea
+anderer
+anders
+andersen
+anderson
+anderton
+andi
+andie
+andiyono
+andonis
+andra
+andrade
+andras
+andrassy
+andre
+andrea
+andreana
+andreas
+andrease
+andreato
+andree
+andrei
+andrej
+andrejs
+andres
+andress
+andrew
+andrews
+andrey
+andria
+andriana
+andric
+andries
+andriett
+andris
+andromac
+andros
+andrukat
+andrus
+andrusia
+andruzzi
+andrzej
+andy
+aneeta
+aneko
+anestass
+anet
+anett
+anetta
+anette
+ange
+angel
+angela
+angelako
+angele
+angeles
+angeli
+angelia
+angelica
+angelico
+angelie
+angeliek
+angelika
+angelina
+angeline
+angeliqu
+angelita
+angell
+angelle
+angelo
+angerer
+angermey
+angie
+angil
+anglin
+angobald
+angus
+angustia
+angvall
+angy
+anh
+anhorn
+anhtuan
+ania
+anibal
+anica
+anika
+aniko
+anil
+anila
+anindita
+anirban
+anissa
+anita
+anitra
+aniya
+anja
+anjali
+anjanett
+anje
+anjela
+anjli
+anke
+anker
+anki
+ankie
+ankur
+anky
+ann
+ann-hoon
+ann-lorr
+ann-mari
+anna
+anna-dia
+anna-mar
+annab
+annabal
+annabel
+annabela
+annabell
+annable
+annadian
+annalea
+annalee
+annalies
+annalisa
+annalise
+annamari
+annamay
+annarbor
+annard
+annas
+anne
+anne mar
+anne-cor
+anne-lis
+anne-mar
+annecori
+anneke
+annelies
+annelise
+annemari
+annemie
+annet
+annetta
+annette
+anni
+annibale
+annice
+annick
+annie
+annika
+annis
+annise
+annissa
+annmaria
+annmarie
+annnora
+annora
+annunzia
+anny
+anolik
+anoop
+anouk
+anoushir
+ans
+ansar
+ansel
+ansell
+anselm
+anselma
+anshel
+ansley
+anson
+ansorger
+anstead
+anstett
+anstice
+ansys
+antai
+antanas
+antanina
+anthe
+anthea
+anthia
+anthiath
+anthonis
+anthony
+antin
+antinucc
+antkowia
+antle
+antoft
+antoine
+antoinet
+anton
+anton-ph
+antonare
+antone
+antonell
+antonett
+antoni
+antonia
+antonie
+antoniet
+antonin
+antonina
+antonino
+antonio
+antonios
+antonius
+antons
+antony
+antti
+antuan
+antworth
+anu
+anup
+anupam
+anurag
+anver
+anvradha
+anwar
+any
+anya
+anzarout
+anzures
+aoki
+aparicio
+aparna
+aphrodit
+api-ecm
+apiruksa
+apollo
+apostolo
+appell
+appenzel
+applebau
+applegar
+appleton
+appleyar
+applicat
+applicon
+appoloni
+appuglie
+apriel
+april
+aprilett
+aprill
+apryle
+apter
+apurba
+apurve
+ara
+arabadji
+arabel
+arabela
+arabele
+arabella
+arabelle
+aragon
+aragorn
+arai
+araldo
+aramideh
+arana
+arash
+aravamud
+arbel
+arbenz
+arbo
+arbuckle
+arch
+archaimb
+archamba
+archana
+archer
+archibal
+archibol
+archie
+archy
+arco
+arcouet
+ard
+arda
+ardath
+ardavan
+ardeen
+ardelia
+ardelis
+ardella
+ardelle
+arden
+ardene
+ardenia
+ardie
+ardiel
+ardine
+ardis
+ardisj
+ardith
+ardizone
+ardoin
+ardra
+ardyce
+ardys
+ardyth
+aref
+areg
+arel
+arellano
+arend
+arens
+ares
+aretha
+areu
+argento
+argyriou
+ari
+ariadne
+ariana
+arias
+aribindi
+aric
+aridatha
+arie
+ariel
+ariela
+ariella
+arielle
+arif
+arin
+arina
+arine
+ario
+aris
+aristide
+aristotl
+arjun
+arkady
+arkestei
+arko
+arlan
+arlana
+arlee
+arleen
+arlen
+arlena
+arlene
+arles
+arleta
+arlette
+arley
+arleyne
+arlie
+arliene
+arlin
+arlina
+arlinda
+arline
+arluene
+arly
+arlyn
+arlyne
+arman
+armand
+armande
+armando
+armbrust
+armelia
+armelle
+armenaki
+armenta
+armentro
+armes
+armida
+armijo
+armin
+armine
+armitage
+armolavi
+armour
+armstead
+armstron
+arn
+arnaldo
+arnauld
+arnav
+arne
+arnett
+arney
+arni
+arnie
+arnis
+arno
+arnold
+arnoldo
+arnon
+arnone
+arnott
+arnuad
+arny
+aroldo
+aron
+arona
+aronovic
+aronson
+aronstam
+arora
+arpin
+arpita
+arrgh
+arri
+arro
+arron
+arsavir
+arsena
+arsenaul
+arsene
+arseneau
+arshad
+art
+artair
+arte
+artemas
+artemis
+artemus
+arther
+arthur
+artie
+artiller
+arto
+artola
+arts
+artspssa
+artur
+arturo
+artus
+artuso
+arty
+artzer
+arul
+arumugam
+arun
+aruna
+arunacha
+arv
+arvid
+arvie
+arvin
+arvind
+arvy
+arwakhi
+arya
+aryavong
+aryn
+arzu
+asa
+asad
+asan
+asawa
+asbill
+asbjorn
+asce
+ascott
+asdel
+ase
+asfazado
+asghar
+asgharza
+ash
+ashalata
+ashar
+ashbee
+ashberry
+ashbey
+ashby
+ashdown
+ashely
+asher
+ashfaq
+ashford
+ashia
+ashien
+ashil
+ashima
+ashis
+ashla
+ashlan
+ashlee
+ashleigh
+ashlen
+ashley
+ashli
+ashlie
+ashlin
+ashly
+ashmore
+ashok
+ashoka
+ashrae
+ashraf
+ashruf
+ashton
+ashu
+ashurkof
+ashutosh
+ashwin
+ashwood-
+ashworth
+asia
+asif
+asing
+asistore
+askins
+askold
+asmar
+asme
+asnat
+asops
+asprer
+asquin
+assaad
+assaf
+asselin
+assenza
+assistan
+associat
+astaire
+astalos
+astle
+astley
+aston
+astor
+astorino
+astra
+astrid
+astrix
+aswini
+atalanta
+atalla
+atcheson
+atchison
+atef
+athalie
+athanasi
+athanass
+athar
+athena
+athene
+athony
+athwal
+atindra
+atique
+atkins
+atkinson
+atl
+atl-sale
+atlanta
+atlante
+atlantic
+atmane
+atoui
+atp
+atpco
+atprs
+atputhar
+atrc
+atsuo
+atsushi
+atta
+attaie
+attanasi
+attarchi
+attard
+attaway
+atte
+attenbor
+atteridg
+attfield
+attilio
+attilla
+atul
+atwater
+atwell
+atwell-b
+au
+au-yang
+au-yeung
+aube
+auberon
+aubert
+auberta
+aubin
+aubine
+aubree
+aubrette
+aubrey
+aubrie
+aubry
+aubuchon
+aucoin
+aud
+audet
+audette
+audi
+audie
+audivox
+audra
+audre
+audrean
+audrey
+audrie
+audrienn
+audry
+audrye
+audy
+auerbach
+augeri
+augie
+august
+augusta
+auguste
+augustin
+augusto
+augustus
+augy
+auker
+aula
+aulakh
+auld
+ault
+aumoine
+aundrea
+aunon
+aura
+aurea
+aurel
+aurelea
+aurelia
+aurelie
+aurelius
+auria
+aurie
+aurilia
+auriol
+aurlie
+auro
+auroora
+aurora
+aurore
+aurthur
+ausley
+austen
+austin
+austina
+austine
+australi
+auth
+auto
+auton
+autoquot
+auyeung
+ava
+avard
+avaz
+ave
+avedis
+aveline
+avellane
+averardo
+averell
+averett
+averette
+averil
+averill
+aversa
+avery
+averyl
+avictor
+avie
+avigdor
+avilez
+avinash
+avirett
+avis
+aviva
+avivah
+avra
+avram
+avril
+avrit
+avrom
+avtar
+awadalla
+awadia
+awan
+awano
+ax
+axberg
+axe
+axel
+ayako
+ayandeh
+ayao
+ayaz
+aybars
+ayda
+aydin
+ayers
+ayles
+aylmar
+aylmer
+aylwin
+aymer
+ayn
+ayodele
+ayotte
+ayoubzad
+ayoup
+ayrault
+ayre
+ayres
+ayscue
+ayse
+ayukawa
+aywie
+ayyuce
+azad
+azam
+azar
+azari
+azarshah
+azer
+azevedo
+azhar
+azim
+aziz
+azizuddi
+azmak
+azmeena
+azmina
+azra
+azuma
+azzuolo
+ba
+baab
+baader
+bab
+baba
+bababunm
+babak
+babalola
+babar
+babara
+babasaki
+babatund
+babb
+babbage
+babbette
+babbie
+babcock
+baber
+babette
+babin
+babineau
+babione
+babita
+babs
+babu
+baby
+babyak
+baccari
+bacchioc
+bacchus
+bacciagl
+bach
+bachecon
+bachelu
+bachewic
+bachitta
+bachmann
+bachner
+bachynsk
+backshal
+bacon
+baddeley
+badelt
+badenoch
+badger
+badjari
+badmingt
+badowski
+badri
+badza
+bae
+baenzige
+baer
+baerg
+baets
+bagetako
+bagg
+baggerma
+baghdadi
+bagi
+bagnato
+bagshaw
+bagwell
+baha
+bahaa
+bahadir
+baheya
+bahgat
+bahia
+bahl
+bahman
+bahoric
+bahram
+bail
+bailetti
+bailey
+bailie
+baillarg
+baillie
+bailloux
+baily
+bain
+bainer
+baines
+bains
+bainton
+baird
+bajada
+bajpeyi
+bakay
+bakel
+baker
+baker-gr
+bakhach
+bakkum
+bakoury
+bal
+balaban
+balabani
+balachan
+balaji
+balakris
+balanger
+balascak
+balasing
+balbir
+balcom
+bald
+balderst
+baldev
+baldock
+baldridg
+balduin
+baldwin
+bale
+bales
+balfour
+balgalvi
+baljinde
+balkenho
+balkisso
+ballanti
+ballard
+ballarte
+ballinge
+ballios
+ballou
+ballyk
+balmer
+balog
+balogh
+balraj
+balsas
+balser
+balter
+baltodan
+balutis
+balvinde
+balwinde
+bam
+bambach
+bambang
+bambi
+bambie
+bamby
+bame
+bamfo
+ban
+banaei
+bancroft
+bandel
+banens
+banerd
+banerjee
+banez
+banfalvi
+bang
+bangert
+bangia
+banh
+banigan
+banik
+bank
+bankhead
+banks
+banky
+bannai
+bannan
+bannard
+banniste
+bansal
+banu
+banville
+bao
+baominh
+baquero
+bar
+barabash
+baragar
+barakat
+baran
+barb
+barba
+barbabas
+barbabra
+barbara
+barbara-
+barbaraa
+barbary
+barbe
+barbeau
+barbee
+barberen
+barbette
+barbey
+barbi
+barbie
+barbour
+barbra
+barby
+barclay
+barcza
+bard
+barde
+bardsley
+bareham
+barel
+barenie
+barentse
+barfield
+barham
+bari
+baribeau
+baril
+baris
+barker
+barkhous
+barkley
+barkwill
+barlas
+barlow
+barn
+barnabas
+barnabe
+barnaby
+barnard
+barnebas
+barnes
+barnett
+barney
+barnhard
+barnhart
+barnhill
+barnhous
+barnicke
+barnie
+barnwell
+barny
+barolet
+baron
+barr
+barraclo
+barrass
+barrell
+barret
+barrett
+barreyre
+barri
+barrie
+barrient
+barriere
+barringt
+barrio
+barris
+barritt
+barron
+barrows
+barry
+barsch
+barsha
+barsky
+barsony
+barstow
+barszcze
+bart
+bartel
+barth
+barthel
+barthole
+bartholo
+bartie
+bartkows
+bartlet
+bartlett
+bartley
+bartolem
+bartolom
+bartoluc
+barton
+bartosze
+bartra
+bartram
+bartush
+barty
+bartz
+baruk
+barwikow
+bary
+baryram
+basa
+basco
+bascombe
+base
+basheer
+bashton
+bashyam
+basia
+basil
+basile
+basilio
+basilius
+basinger
+baskaran
+baskervi
+baskin
+basladyn
+basmadji
+basnett
+bason
+basrur
+bassam
+bassem
+basser
+bassett
+bassigna
+bassil
+basta
+bastani
+bastarac
+bastian
+bastien
+basu
+bat
+batcheld
+batchelo
+batchoun
+bateman
+bates
+batholom
+bathrick
+bathsheb
+batsheva
+batson
+battersb
+battersh
+battisto
+batura
+baudais
+baudoin
+bauer
+baughan
+baugnon
+baulch
+baum
+baumann
+baumberg
+baumert
+bautista
+bawek
+bawn
+bax
+baxie
+baxter
+baxy
+bay
+bayard
+bayer
+bayerkoh
+bayless
+bayley
+bayly
+bayne
+baynes
+bayno
+bayola
+bayrakta
+bays
+bazarjan
+bazemore
+bazerghi
+bazerman
+bazik
+baziuk
+bcs
+bcspatch
+bea
+beach
+beadley
+beagley
+beal
+beale
+beall
+bealle
+beals
+beana
+bear
+beardmor
+bearnard
+bears
+beasley
+beata
+beate
+beato
+beaton
+beatrice
+beatrisa
+beatrix
+beatriz
+beattie
+beattie-
+beatty
+beaty
+beau
+beaubien
+beaucair
+beauchai
+beaucham
+beauchem
+beaudet
+beaudett
+beaudin
+beaudoin
+beaudry
+beaufort
+beaule
+beaulieu
+beaumier
+beaumont
+beaupre
+beaurega
+beausejo
+beauvais
+beavingt
+beavis
+beb
+bebber
+bebe
+bebee
+becan
+becca
+bechara
+bechtel
+beck
+becka
+becke
+becker
+beckett
+beckham
+becki
+beckie
+beckman
+beckstea
+beckwith
+becky
+beconovi
+becquart
+bedard
+bede
+bedford
+bedi
+bedient
+bedlingt
+bednar
+bedoya
+bedrosia
+bee
+beebe
+beeby
+beecker
+beehler
+beekman
+beeman
+beerkens
+beers
+bees
+beeston
+beethove
+beeton
+befanis
+beffert
+beggs
+begley
+begum
+behdad
+behlen
+behler
+behm
+behnam
+behrens
+behroozi
+behrouz
+behzad
+beil
+beilin
+beilul
+beine
+beique
+beisel
+beitinja
+beitris
+bejar
+bekkedam
+bekki
+bektas
+bel
+bela
+belair
+belaire
+beland
+belanger
+belboul
+belcher
+belcourt
+belen
+belford
+belia
+belich
+belicia
+belinda
+belir
+belisle
+belissa
+belita
+belk
+bell
+bella
+bellanca
+belle
+bellefeu
+bellehum
+bellevil
+bellew
+belley
+bellina
+bellingt
+bellis
+bello
+bellosa
+belmont
+belohoub
+belrango
+belson
+belton
+beltran
+belva
+belvia
+belyaev
+belzile
+bemiller
+bemis
+ben
+ben-isha
+benabdal
+benasso
+benavide
+benay
+benchimo
+bencia
+benda
+bender
+bendick
+bendicty
+bendite
+bendix
+beneda
+benedek
+benedett
+benedick
+benedict
+benedikt
+benefiel
+benefits
+beneteau
+benetta
+benfield
+benge
+bengt
+bengtson
+benham
+beniamin
+beninger
+benita
+benito
+benjamen
+benjamin
+benjavan
+benjes
+benji
+benjie
+benjy
+benn
+bennatt
+benne
+bennefel
+benner
+bennesa
+bennet
+bennett
+benni
+bennie
+benning
+bennison
+benny
+benoit
+benoite
+benschop
+benski
+benson
+bent
+benthem
+benthin
+bentlee
+bentley
+bento
+benton
+benwell
+benyamin
+benyon
+benzick
+benzie
+beom-sah
+beomsahn
+beorn
+beowulf
+bep
+beppie
+ber
+beranger
+berek
+berenbac
+berenice
+berenz
+beresfor
+beresnik
+beret
+bereza
+bergado
+berger
+bergeron
+bergeson
+berget
+bergland
+bergman
+bergmann
+bergquis
+bergsma
+bergstro
+bergwerf
+berhane
+beriault
+berk
+berke
+berkeley
+berkie
+berkley
+berkly
+berknet
+berky
+berman
+bermel
+bern
+berna
+bernaden
+bernadet
+bernadin
+bernard
+bernardi
+bernardo
+bernarr
+bernd
+berndt
+berne
+berneche
+bernelle
+berneta
+bernete
+bernetta
+bernette
+bernhard
+berni
+bernice
+bernie
+berniece
+bernier
+berning
+bernita
+berno
+bernstei
+berny
+berri
+berrie
+berrin
+berrisfo
+berro
+berry
+berryhil
+bert
+berta
+berte
+berteau
+bertha
+berthe
+berthele
+berti
+bertie
+bertigno
+bertina
+bertine
+bertini
+bertolin
+berton
+bertram
+bertrand
+berty
+berube
+beryl
+beryle
+beshai
+besharah
+beshir
+besime
+besnier
+bess
+besse
+bessel
+bessell
+bessette
+bessey
+bessie
+besson
+bessuill
+bessy
+bestavro
+beswick
+betcher
+beth
+bethanne
+bethany
+bethena
+bethina
+bethune
+beton
+betsey
+betsill
+betsy
+betta
+bettadap
+bette
+bette-an
+betteann
+betterle
+betters
+betti
+bettie
+bettina
+bettine
+bettink
+betts
+betty
+betty-an
+bettye
+beulah
+beun
+beuren
+bev
+bevan
+beveridg
+beverie
+beverlee
+beverley
+beverlie
+beverly
+bevin
+bevingto
+bevis
+bevon
+bevvy
+bevyn
+beware.
+beygui
+beymer
+bezanson
+bezdel
+beznowsk
+bhagvat
+bhal
+bhandari
+bhanu
+bharadwa
+bharat
+bhardwaj
+bhasin
+bhaskar
+bhatia
+bhatt
+bhattach
+bhatti
+bhavani
+bhoday
+bhullar
+bhupendr
+bhupinde
+bhusan
+bi-jun
+bi-shiou
+biage
+bialek
+bialkeni
+biamonte
+bianca
+bianchi
+bianka
+biard
+bibbie
+bibby
+bibbye
+bibekana
+bibi
+bible
+bibr
+bice
+bickford
+bidc
+biddie
+biddy
+bidetti
+bidget
+bidyut
+biederma
+biegaj
+biel
+bielan
+bielat
+bielby
+bielecki
+bielejes
+bienek
+bienia
+bierbrie
+bierman
+biermann
+biersach
+bieszcza
+bigelow
+biggers
+biggerst
+biggs
+bigley
+bigras
+bihari
+bihl
+bijan
+bijjani
+bijman
+bijons
+bijun
+bil
+bilal
+bilanski
+bili
+bill
+billard
+billi
+billie
+billing
+billingh
+billotea
+billy
+billye
+bilodeau
+bilovus
+bilsboro
+bilton
+bimini
+bin
+bina
+binda
+binder
+bindi
+binette
+bing
+binggeli
+bingham
+bingley
+bingwu
+binh
+bink
+binkley
+binky
+binner
+binni
+binnie
+binningt
+binny
+bins
+biomecha
+biomed
+bipin
+biplab
+bir
+biray
+birch
+bird
+birdie
+birendra
+birgit
+birgitta
+birgitte
+birk
+birkett
+birks
+birkwood
+birmingh
+biron
+birtch
+bisad
+bisch
+bishiou
+bishwa
+bishya
+bismark
+biss
+bissegge
+bissette
+bisson
+bissonne
+biswa
+biswajit
+bitar
+bittenbe
+bittman
+bitton
+bivens
+bizga
+bjorklun
+bjorn
+bjornson
+blaauw
+blackard
+blackbur
+blacker
+blackley
+blackloc
+blackman
+blacksha
+blackshi
+blackwel
+blackwoo
+bladon
+blaikloc
+blaine
+blair
+blaire
+blais
+blaise
+blake
+blake-kn
+blakelee
+blakeley
+blakemor
+blakesle
+blakey
+blakkolb
+blalock
+blanca
+blanca-s
+blancasi
+blanch
+blancha
+blanchar
+blanche
+blanchet
+blanco-a
+blander
+blane
+blankens
+blann
+blaschuk
+blasine
+blasing
+blasko
+blatherw
+blatt
+blau
+blauer
+blaufus
+blaylock
+blayne
+blazejew
+blazek
+blazer
+bleile
+blenk
+blenkarn
+blesi
+blethen
+bleuer
+blevins
+blezard
+blidy
+blimkie
+blinn
+blinni
+blinnie
+blinny
+bliss
+blisse
+blissett
+blithe
+blodgett
+bloedon
+bloemker
+blois
+blomquis
+blondell
+blondie
+blondy
+bloodwor
+blostein
+blouin
+blount
+bluethne
+blum
+blumenfe
+blumer
+bluschke
+bly
+blyskal
+blyszcza
+blythe
+bmethods
+bnr
+bnrecad
+bnrinfo
+bnrlsi
+bnrsport
+bnrtor
+bo
+bo-ping
+boal
+boaman
+boarder
+boase
+boatwrig
+bob
+bobak
+bobar
+bobb
+bobbe
+bobbee
+bobbette
+bobbi
+bobbie
+bobbitt
+bobby
+bobbye
+bobette
+bobina
+bobine
+bobinett
+boccali
+bockaj
+bocklage
+bocservi
+boddevel
+boden
+bodford
+bodin
+bodkin
+bodnar
+bodo
+boeck
+boecke
+boehlke
+boehms
+boen
+boer
+boersma
+boeyen
+bogal
+bogart
+bogdan
+bogert
+bogey
+boggan
+boggia
+boggild
+boggs
+bogumill
+boguslaw
+bohacek
+bohanan
+bohannon
+bohdan
+bohn
+bohner
+bohyun
+boigie
+boileau
+boily
+boinnard
+bois
+boisseau
+boisset
+boisvert
+boivin
+bojeck
+bokanovi
+bokij
+bokish
+boland
+bolding
+bolduc
+boleda
+bolen
+boles
+bolgos
+bolio
+bolli
+bolly
+bolon
+bolouri
+bolsinge
+bolton
+bolzon
+bomba
+bombardi
+bommakan
+bommer
+bomstein
+bon
+bonahoom
+bond
+bondie
+bondon
+bonduran
+bondy
+bone
+bonfanti
+bongers
+boniface
+bonita
+bonn
+bonnar
+bonneau
+bonnee
+bonnefoy
+bonnell
+bonner
+bonnevil
+bonney
+bonni
+bonnibel
+bonnie
+bonnin
+bonny
+bono
+boocock
+booker
+booking
+bookings
+boon-sio
+boone
+boonie
+boonphet
+boonsion
+boony
+boorne
+boorse
+boos
+boose
+boot
+boote
+booth
+boothe
+boothroy
+bophal
+boping
+bopp
+boppana
+bor-wen
+bora
+boraie
+boray
+borcic
+bord
+bordage
+borden
+bordie
+bordin
+bordy
+borek
+borel
+borg
+borgia
+borha
+boris
+borivoje
+borkowic
+borman
+borodajl
+borojevi
+borosch
+borosh
+boroski
+boroughs
+borowiec
+borozny
+borrelli
+borsa
+borsato
+borson
+bortenst
+borthwic
+bortolus
+borum
+boruslaw
+borwen
+borza
+borzic
+bosch
+boschin
+boscio
+bosco
+bose
+bosiljev
+bosiljka
+bosko
+bosnich
+bosnyak
+bossa
+bossert
+bossett
+bossler
+bostelma
+bostock
+boswell
+boswick
+bosworth
+bosy
+bot
+bothwell
+bott
+botti
+botting
+bottis
+botto
+bottomle
+bottoms
+botyrius
+bouchard
+boucher
+boucouri
+boudin
+boudreau
+bouffard
+bouick
+boulais
+boulay
+bouleric
+boulos
+boult
+bounds
+bour
+bourahla
+bourbonn
+bourcier
+bourdeau
+bourdign
+bourdin
+bouret
+bourgaiz
+bourgaul
+bourget
+bourgon
+bourguig
+bourk
+bourke
+bourland
+bourlet
+bourne
+bouroncl
+bourque
+bourret
+bousfiel
+boutilie
+boutin
+boutniko
+boutot
+bovat
+bovee
+bovenize
+bovey
+bowab
+bowcock
+bowden
+bowen
+bowens
+bower
+bowers
+bowes
+bowick
+bowie
+bowler
+bowles
+bowling
+bowser
+bowyer
+boy
+boyachek
+boyajian
+boyce
+boycey
+boycie
+boyd
+boye
+boyea
+boyer
+boyes
+boylan
+boyle
+boynton
+boz
+bozeman
+bozicevi
+bqb
+braaksma
+brabant
+brabec
+bracewel
+brackin
+brackley
+bracy
+brad
+bradan
+bradbury
+bradd
+braddock
+braddy
+brade
+bradee
+braden
+bradford
+brading
+bradlee
+bradley
+bradlow
+bradly
+bradnels
+bradney
+bradshaw
+brady
+bradyhou
+bragado
+braganza
+bragg
+braginet
+braham
+brahim
+brahmana
+brahms
+brailey
+brain
+brait
+brajesh
+bram
+brambley
+bramlett
+bran
+brana
+branchau
+brand
+brandais
+brande
+brandea
+brandel
+branden
+brander
+brandi
+brandice
+brandie
+brandise
+brandon
+brandsen
+brandsta
+brandt
+brandtr
+brandvol
+brandy
+brandyn
+branham
+brann
+brannan
+brannen
+brannick
+brannon
+brans
+branscom
+brant
+brantley
+brar
+brashear
+brasingt
+brassard
+brassell
+brassem
+brasset
+brasunas
+brathwai
+bratten
+brauer
+brault
+braum
+braun
+braunsti
+braverma
+brawley
+brazeau
+breanne
+brear
+brearley
+breault
+brechtje
+bredeck
+bredfeld
+bree
+breedlov
+breena
+bregitte
+breglec
+brehm
+breisch
+breiten
+brekel
+brel
+bremner
+bren
+brena
+brend
+brenda
+brendan
+brenden
+brender
+brendin
+brendis
+brendon
+brenn
+brenna
+brennan
+brennand
+brennen
+brent
+brentley
+brenton
+breon
+brese
+bresee
+breslin
+bresnaha
+bresnan
+bress
+bret
+breton
+brett
+breuer
+brevard
+brew
+brewer
+brewster
+brewton
+bria
+brian
+briana
+brianna
+brianne
+briano
+briant
+briante
+briard
+brice
+brichett
+brickey
+brickman
+bride
+briden
+bridenst
+bridge
+bridgefo
+bridges
+bridget
+bridgett
+bridgman
+bridie
+brieda
+briel
+brien
+brier
+briere
+brierley
+brietta
+brig
+brigg
+briggs
+brigham
+brightwe
+brigid
+brigida
+brigit
+brigitta
+brigitte
+brina
+brind'am
+brindley
+briner
+briney
+bringhur
+brinklow
+brinkman
+brinn
+brinna
+brintnel
+brinton
+briny
+brion
+brisby
+briseboi
+brissett
+brisson
+brit
+brita
+britman
+britney
+britni
+britt
+britta
+brittain
+brittan
+brittane
+brittani
+brittany
+britte
+britteny
+brittne
+brittney
+brittni
+britto
+britton
+brivet
+brivins
+brkich
+brnaba
+brnaby
+broadfoo
+broadhea
+broadwel
+broberg
+broca
+brocato
+brock
+brockhou
+brockie
+brockleb
+brockman
+brockmey
+brocksch
+brocky
+brod
+broddie
+broddy
+broderic
+broderse
+brodfueh
+brodgen
+brodie
+brodman
+brodowsk
+brody
+brogden
+brogdon
+brogley
+brok
+brokaw
+brombal
+bromley
+bron
+bronec
+bronk
+bronnie
+bronny
+bronson
+brook
+brooke
+brooker
+brookes
+brookhar
+brookhou
+brooks
+brooksba
+broome
+brophy
+broschuk
+brose
+brossard
+brossela
+brosso
+brost
+brostrom
+broten
+brothers
+brothert
+brough
+broughto
+brouille
+broulik
+broussar
+broussea
+brouthil
+brouwer
+brovont
+brower
+brown-gi
+browne
+brownfie
+browning
+brownlee
+brownlie
+brownrid
+brox
+broyles
+brubaker
+bruce
+brucie
+bruder
+bruhl
+bruin
+bruis
+bruketa
+brule
+brum
+brummitt
+brummund
+brunato
+bruncati
+bruneau
+brunel
+brunelle
+bruner
+bruner-u
+brunet
+brungard
+brunhild
+brunke
+brunner
+brunner-
+bruno
+brunoni
+brunstin
+brunton
+brushey
+bruxvoor
+bry
+bryan
+bryana
+bryant
+bryanty
+bryce
+brydges
+brydon
+bryenton
+bryn
+bryna
+brynn
+brynna
+brynne
+bryon
+brys
+bryttan
+bse
+bubak
+bubel
+buccella
+bucci
+buchan
+buchanan
+buchko
+buck
+buckalew
+buckhoff
+buckie
+buckingh
+buckley
+bucklin
+buckman
+buckner
+bucky
+buczek
+bud
+buda
+budd
+buddie
+buddy
+buder
+budhram
+budi
+budihard
+budimiro
+bue
+buechner
+buehler
+buettgen
+buffam
+buffett
+buffy
+buford
+bugajska
+bugajski
+buggie
+buhler
+buhr
+buhrkuhl
+bui
+building
+buiron
+bujold
+buker
+bukowski
+bukta
+buky
+bulan
+bulanda
+bulbrook
+bulengo
+bulent
+buley
+bulger
+bulifant
+bulitka
+bulka
+bulkovsh
+bullard
+bullas
+bullen
+bulletin
+bullett
+bullinge
+bullion
+bulman
+bulmanis
+bulmer
+bulz
+bumgarne
+bumstead
+bunce
+bundschu
+bunker
+bunn
+bunner
+bunni
+bunnie
+bunny
+bunting
+buntrock
+bunzey
+buratyns
+burbage
+burbidge
+burcew
+burch
+burchat
+burchby
+burdett
+burdette
+burdick
+burega
+burek
+burg
+burge
+burger
+burgess
+burgette
+burgi
+burgin
+burgwell
+burk
+burkard
+burke
+burkepil
+burkert
+burkett
+burkey
+burkhard
+burl
+burleigh
+burleson
+burlie
+burnaby
+burnage
+burnard
+burness
+burnet
+burnett
+burnette
+burney
+burnie
+burns
+burnside
+burr
+burrell
+burrowes
+burrows
+burrus
+burruss
+burt
+burtie
+burton
+burty
+burwell
+busby
+buscagli
+buscarin
+busch
+busche
+buschelm
+bushell
+bushnell
+bushnik
+business
+buskard
+buske
+buskens
+busko
+bussewit
+bussey
+buster
+bustillo
+busuttil
+butch
+butcher
+butner
+butta
+butterfi
+butters
+buttrey
+butts
+butvich
+buxton
+buzz
+buzzell
+buzzy
+bvworks
+by don o
+bycenko
+byczko
+bydeley
+byer
+byers
+byeungwo
+byk
+bykowy
+bylina
+byoung
+byoungin
+byram
+byran
+byrann
+byrd
+byrgesen
+byrl
+byrle
+byrne
+byrnes
+byrom
+byron
+byung
+byungyon
+cabaniss
+cabi
+cabot
+cabral
+cabras
+cabrera
+caceres
+cacha
+cachero
+cacilia
+cacilie
+cad
+cadd
+caddric
+cadeau
+cadieux
+cadshare
+cadtools
+cady
+cadzow
+cae
+caesar
+caffrey
+caffry
+cagatay
+caglar
+caglayan
+cahill
+cahra
+cai
+caie
+cain
+caine
+caines
+cairisti
+cairns
+caison
+caitlin
+caitrin
+cakarevi
+cal
+calahorr
+calc
+calcote
+calder
+caldwell
+cale
+caleb
+caleta
+calhoun
+caliboso
+calica
+calida
+calis
+calistro
+calkins
+calla
+callagha
+callahan
+callan
+callanan
+callean
+calleja
+callende
+callery
+calley
+calli
+callida
+callie
+callos
+calloway
+cally
+calmejan
+calmenso
+calow
+caltride
+calumet
+calv
+calva
+calvary
+calvin
+calypso
+calzaros
+cam
+camacho
+camala
+camblin
+cambre
+camel
+camel-to
+camella
+camellia
+cameron
+camet
+camey
+cami
+camie
+camila
+camile
+camilla
+camille
+camilluc
+camino
+camirand
+cammi
+cammie
+cammy
+campagna
+campanel
+campara
+campbell
+campeau
+camplone
+campo
+campos
+canada
+canadian
+canavan
+cancela
+candace
+candee
+candelar
+candi
+candice
+candida
+candide
+candie
+candis
+candra
+candy
+canete
+canfield
+cang
+cann
+cannatar
+cano
+cantlie
+cantrell
+cantwell
+canuel
+canute
+capelle
+capes
+capindal
+caple
+caplinge
+capobian
+capostag
+capozzi
+capps
+capretta
+caprice
+captives
+caputo
+car
+cara
+caralie
+carandan
+carbajal
+carbonar
+carbone
+carboni
+carbonne
+carce
+cardella
+carden
+cardozo
+cards
+care
+career
+careers
+carella
+caren
+carena
+caresa
+caresani
+caressa
+caresse
+carevic
+carew
+carey
+cargill
+cargnell
+cari
+caria
+caridad
+carie
+carignan
+caril
+carilyn
+carin
+carina
+carine
+cariotta
+carisa
+carissa
+carita
+caritta
+cark
+carkner
+carl
+carla
+carlberg
+carldata
+carle
+carlean
+carlebac
+carlee
+carleen
+carlen
+carlene
+carleton
+carlett
+carley
+carli
+carlie
+carlin
+carlina
+carline
+carling
+carlis
+carlisle
+carlita
+carlo
+carlock
+carlos
+carlota
+carlotta
+carlsen
+carlson
+carlton
+carly
+carlye
+carlyle
+carlyn
+carlynn
+carlynne
+carm
+carma
+carmel
+carmela
+carmelia
+carmelin
+carmelit
+carmella
+carmelle
+carmelo
+carmen
+carmenci
+carmicha
+carmina
+carmine
+carmita
+carmody
+carmon
+carmona
+carnegie
+carney
+carnogur
+carny
+caro
+carol
+carol-je
+carola
+carolan
+carolann
+carole
+carolee
+carolien
+carolin
+carolina
+caroline
+caroljea
+carolle
+carolus
+carolyn
+carolyne
+carolynn
+caron
+carpenti
+carpool
+carr
+carran
+carranza
+carree
+carri
+carrie
+carriere
+carrillo
+carringt
+carrissa
+carrmtce
+carrol
+carroll
+carron
+carruthe
+carry
+carrye
+carson
+carsten
+carstens
+carswell
+cart
+carter
+cartohl
+carty
+carufel
+caruk
+caruso
+caruth
+carvalho
+carver
+cary
+caryl
+caryn
+cas
+casadont
+casalou
+casandra
+casanova
+casar
+casas
+cascarin
+case
+casey
+cash
+cashin
+casi
+casie
+casinovi
+caskey
+casler
+casnji
+casotto
+caspar
+casper
+casperso
+cass
+cassady
+cassandr
+cassar
+cassat
+cassaund
+cassese
+cassey
+cassi
+cassian
+cassidy
+cassie
+cassius
+casson
+cassondr
+cassy
+castaban
+castell
+castello
+casten
+castillo
+casto
+castongu
+castro
+castro-h
+castrono
+caswell
+cat
+catanach
+catarina
+cate
+caterina
+catering
+cath
+catha
+cathal
+catharin
+cathe
+cathee
+catherin
+catherwo
+cathi
+cathie
+cathleen
+cathlene
+cathrin
+cathrine
+cathryn
+cathy
+cathylee
+cati
+catie
+catina
+catja
+catlaina
+catlee
+catlett
+catlin
+cato
+caton
+catrina
+catriona
+catthoor
+caty
+cau
+cauchy
+caudill
+caudle
+cauthen
+cauthers
+cavan
+cavanagh
+cavanaug
+cavasin
+cavasso
+caves
+cavill
+cavin
+caviness
+cavnar
+cawley
+caye
+cayer-fl
+cayla
+cayless
+cayouett
+caz
+caza
+cazzie
+cbabbage
+cchaddie
+cecco
+cece
+cecelia
+cech
+cecil
+cecile
+ceciley
+cecilia
+cecilio
+cecilius
+cecilla
+cecily
+cecon
+ced
+cedric
+cefee
+cegelski
+ceil
+cele
+celene
+celesta
+celeste
+celestia
+celestin
+celestyn
+celia
+celie
+celina
+celinda
+celine
+celinka
+celisse
+celka
+celle
+cello
+cellucci
+celso
+celyne
+cemensky
+cen
+cencier
+centeno
+center
+centers
+centis
+centre
+cepero
+cepheus
+ceponis
+ceranic
+cerberus
+ceri
+ceriel
+cerny
+cervante
+cesar
+cesaratt
+cesare
+cesario
+cesaro
+cescon
+cesya
+cetraro
+cezary
+chaaban
+chaar
+chabane
+chabert
+chabrat
+chacko
+chacon
+chad
+chadd
+chaddha
+chaddie
+chaddock
+chaddy
+chadha
+chadrick
+chadwick
+chafin
+chafy
+chagnon
+chahal
+chahram
+chai
+chai-seo
+chaikows
+chaim
+chaiman
+chaimson
+chaintre
+chaisupa
+chak-hon
+chakraba
+chakrabo
+chakrava
+chalifou
+chalker
+challice
+chalmers
+chalton
+cham
+chamard
+chamayou
+chambers
+chamblis
+champath
+champion
+champsi
+chamsi
+chan
+chan-jiu
+chan-nan
+chance
+chancey
+chanchal
+chanchla
+chanco
+chand
+chanda
+chandal
+chandan
+chander
+chandler
+chandra
+chandrak
+chandran
+chandras
+chandru
+chane
+chang
+chang-hs
+changes
+changho
+changhsi
+chanh
+chanitr
+chanjiun
+channa
+channan
+channell
+channen
+chanonat
+chanpong
+chanshin
+chansik
+chantal
+chantall
+chantel
+chantell
+chao
+chao-pin
+chaoping
+chapa
+chapdela
+chapen
+chapin
+chapleau
+chaplin
+chapman
+chapmond
+chappell
+chappuis
+chaput
+char
+charangi
+charasse
+charbonn
+charchan
+chardon
+charee
+charene
+charest
+charette
+chari
+charil
+charin
+chariot
+charis
+charissa
+charisse
+charita
+charity
+charko
+charla
+charlean
+charlebo
+charleen
+charlena
+charlene
+charles
+charlesb
+charleto
+charley
+charlie
+charline
+charlino
+charlins
+charlot
+charlott
+charlsey
+charlton
+charly
+charmain
+charman
+charmane
+charmian
+charmine
+charmion
+charness
+charney
+charo
+charon
+charron
+charter
+chartier
+chartran
+charyl
+chas
+chasalow
+chase
+chasse
+chastity
+chatard
+chatchai
+chatel
+chatfiel
+chatha
+chatri
+chatterl
+chattert
+chattoe
+chattos
+chau
+chaudhar
+chaudhry
+chaudry
+chaug-mi
+chaugmin
+chauhan
+chaunce
+chauncey
+chaurasi
+chaurett
+chautems
+chauvin
+chavers
+chaves
+chavez
+chavis
+chawki
+chawla
+chaya
+chaz
+che
+chea
+cheal
+cheatham
+cheba
+checinsk
+checklan
+chee
+chee-yin
+chee-yon
+cheesema
+cheesman
+cheetham
+cheevers
+chel
+chellapp
+chelsae
+chelsea
+chelsey
+chelsie
+chelsy
+chem
+chen
+chen-che
+chen-chu
+chen-jun
+chen-msi
+chenard
+chenault
+chenchun
+chene
+cheney
+cheng
+cheng-do
+cheng-fo
+cheng-ho
+cheng-hu
+cheng-ts
+chengdon
+chengfoo
+chenghon
+chenghun
+chengtse
+chengwei
+chenier
+chenmsie
+chennett
+chenowet
+chenye
+cheol
+cheow-to
+cheowton
+chepregi
+cher
+chere
+cherenso
+cherey
+cheri
+cherian
+cheriann
+cherice
+cherida
+cherie
+cherilyn
+cherin
+cherise
+cherish
+cherkas
+cherlyn
+chern
+chernets
+cherng
+cherri
+cherrier
+cherrita
+cherry
+chertok
+chervena
+chery
+cherye
+cheryl
+ches
+cheshire
+chesley
+cheslie
+chesser
+chesteen
+chester
+chesterf
+cheston
+chet
+chetan
+cheuk
+cheung
+chev
+cheval
+chevalie
+chevarie
+chevy
+cheyenne
+chhabria
+chi
+chi-haw
+chi-ho
+chi-hua
+chi-hung
+chi-kai
+chi-keun
+chi-kwan
+chi-man
+chi-vien
+chi-wen
+chi-yin
+chi-yuan
+chia
+chia-hoa
+chia-hua
+chiabaut
+chiahoan
+chiahuan
+chiaki
+chiamvim
+chian
+chian-fo
+chianfon
+chiang
+chiang-h
+chianghu
+chiaoyun
+chiarell
+chiarra
+chiavaro
+chic
+chick
+chickie
+chickori
+chicky
+chico
+chie
+chief
+chieh
+chiem
+chien
+chien-ch
+chien-hs
+chien-hu
+chienche
+chienchi
+chienhsi
+chienhue
+chieu
+chih
+chih-chi
+chih-hsi
+chih-hua
+chih-tsa
+chihaw
+chihchia
+chihchie
+chihhsia
+chihhua
+chihtsai
+chihua
+chihung
+chiiwen
+chik
+chikai
+chilausk
+childerh
+childers
+childree
+childres
+childs
+chilibec
+chilton
+chima
+chin
+chin-ho
+chin-lin
+chin-shu
+chin-ten
+chin-wen
+chinfui
+ching
+ching-ch
+ching-en
+ching-fu
+ching-lo
+ching-ts
+ching-yu
+chingchy
+chingen
+chingfu
+chingtsu
+chingyun
+chinh
+chinhin
+chinho
+chiniwal
+chinlin
+chinn
+chinnery
+chinrung
+chinshu
+chinteng
+chinwen
+chiou
+chip
+chiquia
+chiquita
+chiracha
+chisholm
+chisolm
+chitkara
+chitnis
+chitra
+chityal
+chiu
+chiverto
+chiwen
+chiykows
+chiyo
+chiyuan
+chlo
+chloe
+chloette
+chloris
+chmara
+cho
+cho-kuen
+cho-lun
+chochon
+chocs
+chod
+choe
+chohan
+choi
+chojan
+chok
+cholet
+cholette
+cholewin
+chomik
+chona
+chonchan
+chong
+chong-ch
+chong-ke
+chong-la
+chongcha
+chongkeu
+choo
+choo-kan
+choon
+choon-li
+choong
+chopin
+chopowic
+chopra
+choptovy
+choquett
+chorley
+chorng
+chotkows
+chou
+choudhur
+chouhan
+chouinar
+chowhan
+choy
+choynows
+chriisto
+chris
+chrisman
+chrisoph
+chrisse
+chrissie
+chrissun
+chrissy
+christ
+christa
+christab
+christal
+christan
+christea
+christel
+christen
+christer
+christi
+christia
+christie
+christin
+christl
+christof
+christop
+christos
+christy
+christye
+christyn
+chrisy
+chronowi
+chrotoem
+chroust
+chruscie
+chrysa
+chrysant
+chrysler
+chrystal
+chryste
+chrystel
+chu
+chu-chay
+chu-chue
+chua
+chuah
+chuan
+chuan-hs
+chuang
+chuanhsi
+chubb
+chubby
+chucho
+chuchuen
+chuck
+chueh
+chuen
+chugha
+chui
+chuj
+chuk
+chukwuem
+chul
+chuming
+chummun
+chun
+chun-li
+chun-shi
+chun-yen
+chung
+chung-ch
+chung-kw
+chung-li
+chung-wo
+chung-yo
+chungen
+chungjen
+chungkwo
+chunglin
+chungpha
+chungsik
+chunkin
+chunlan
+chunli
+chunlin
+chunling
+chunmei
+chunmeng
+chunn
+chunshin
+chunyen
+chuong
+chuq
+churas
+churchil
+chwen
+chychrun
+chye
+chye-lia
+chytil
+cia
+ciampini
+cianci
+ciancibe
+ciaralli
+ciaran
+ciaschi
+ciccarel
+cicchino
+cicci
+cicek
+cicely
+cicero
+cicily
+ciel
+ciesiels
+cieslak
+cifelli
+cifersky
+cigay
+cilka
+cimarron
+cimino
+cimolai
+cinar
+cinda
+cindas
+cindee
+cindelyn
+cinderel
+cindi
+cindie
+cindra
+cindy
+cinicolo
+cinnamon
+cinq-mar
+ciocca
+ciochon
+cioffi
+ciolfi
+cipolla
+circe
+ciriaco
+cirillo
+cirilo
+ciro
+cirri
+cirstofo
+cirulli
+cis @ w
+cisco
+ciskowsk
+cisnews
+cissiee
+cissy
+citarell
+cities
+citrin
+cividino
+cizmar
+clacher
+claggett
+claiborn
+clair
+claire
+clairmon
+claise
+clampitt
+clancy
+clapham
+clapp
+clara
+clarabel
+clarance
+clare
+clarence
+claresta
+clareta
+claretta
+clarette
+clarey
+clari
+claribel
+clarice
+clarie
+clarinda
+clarine
+clarise
+clarissa
+clarisse
+clarita
+clark
+clark-st
+clarka
+clarke
+clarkson
+clary
+clason
+class
+classes
+claude
+claudell
+claudett
+claudia
+claudian
+claudie
+claudina
+claudine
+claudio
+claudius
+claus
+claveau
+claxton
+clay
+clayborn
+claybour
+claybroo
+clayson
+clayton
+clea
+cleary
+cleavlan
+cleere
+clegg
+clem
+clemence
+clemens
+clement
+clemente
+clementi
+clements
+clemie
+clemmie
+clemmons
+clemmy
+clendeni
+clenney
+clennito
+clentice
+cleo
+cleon
+cleopatr
+clerc
+clerissa
+clerkcla
+clerke
+cleroux
+clesson
+clestell
+cletis
+cleto
+cletus
+cleve
+clevelan
+clevey
+clevie
+clevon
+cliff
+clifford
+clifton
+clim
+clincket
+cline
+clinger
+clinkard
+clint
+clinteas
+clinton
+clio
+clippert
+clipsham
+clites
+clive
+clo
+clocklab
+cloe
+cloherty
+clooney
+cloris
+closson
+clost
+clotilda
+clough
+clouthie
+cloutier
+clovis
+clow
+cloyd
+cluett
+clusiau
+cly
+clyde
+clysdale
+clyve
+clywd
+cmet
+co
+co-op
+co-ordin
+coady
+coallier
+coathup
+coats
+cob
+cobaugh
+cobb
+cobban
+cobbie
+cobbold
+cobby
+coble
+cobley
+cobo
+cobran
+cocco
+cochran
+cochrane
+cockburn
+cockcrof
+cocke
+cockins
+cocos
+cocos-ar
+codack
+codata
+coddingt
+code
+codee
+coder
+codi
+codie
+codoc
+codringt
+cody
+coe
+coertnik
+coffey
+cogan
+cogdell
+coggins
+coghlan
+cogwell
+cohea
+cohen
+cohn
+cohn-sfe
+cohoe
+cohrs
+coila
+cointon
+coker
+cokol
+colagros
+colan
+colangel
+colanton
+colas
+colatta
+colbert
+colbourn
+colburn
+colby
+colclasu
+coldwell
+cole
+coleen
+colella
+coleman
+colene
+coles
+colet
+coletta
+colette
+coley
+colford
+colgan
+colin
+colina
+colinda
+collamer
+collamor
+collazo
+collecut
+colledge
+colleen
+collen
+collete
+collette
+collevec
+colley
+colli
+collie
+collier
+collin
+colline
+collins
+collis
+colly
+collyer
+colm
+colman
+coloads
+colonton
+colpitts
+colquett
+colquhou
+colquitt
+colston
+colter
+colterma
+colton
+colucci
+colver
+colvin
+colwell
+comay
+combaz
+combee
+combella
+combos
+combs
+comeau
+comley
+comm
+commazzi
+comments
+committe
+commons
+communic
+comp
+compton
+computin
+comstock
+comtois
+con
+conan
+conant
+conboy
+concetta
+concetti
+conchita
+concklin
+concordi
+conde
+condell
+condurel
+conerly
+coneybea
+cong
+congdon
+congress
+conistis
+conklin
+conley
+conlin
+conlon
+conn
+connell
+connelly
+conner
+conners
+conney
+conni
+connie
+connolly
+connor
+connors
+connors-
+conny
+conoly
+conrad
+conrade
+conrado
+conrath
+conroy
+consalve
+conservi
+consolat
+constabl
+constanc
+constant
+construc
+consuela
+consuelo
+consulta
+containi
+contardo
+conte
+contine
+contomic
+conway
+coochey
+coody
+coogan
+cooke
+cookie
+cooksey
+cooley
+coolidge
+coombs
+cooney
+coop
+cooper
+cooperma
+coord
+coordina
+coors
+copeland
+copello
+copeman
+copes
+coplesto
+copley
+copp
+coppedge
+coppins
+coqueugn
+cora
+corabel
+corabell
+corace
+coral
+coralie
+coraline
+coralyn
+corbeil
+corbet
+corbett
+corbie
+corbin
+corbitt
+corby
+corcoran
+cord
+cordelia
+cordelie
+cordell
+cordes
+cordey
+cordi
+cordie
+cordula
+cordy
+core
+coreen
+corella
+corena
+corenda
+corene
+coretta
+corette
+corey
+cori
+coriaty
+corie
+corilla
+corina
+corine
+corinna
+corinne
+coriss
+corissa
+corker
+corkey
+corkigan
+corkstow
+corkum
+corless
+corlett
+corley
+corliss
+corly
+cormac
+cormier
+cornall
+cornaro
+cornel
+cornela
+cornelia
+cornelis
+corneliu
+cornell
+cornelle
+corner
+corney
+cornie
+corny
+corpenin
+corpuz
+corr
+correa
+correia
+correna
+correy
+corri
+corriann
+corrie
+corrigan
+corrina
+corrine
+corrinne
+corritor
+corrivea
+corry
+corsale
+corse
+corson
+cort
+cortie
+cortland
+cortney
+corty
+corvo
+cory
+cos
+cosburn
+cosentin
+cosetta
+cosette
+cosgrove
+cosimo
+coslas
+cosme
+cosmo
+cosner
+cosola
+cossota
+costa
+costache
+costadim
+costandi
+costanti
+costanza
+costanzi
+costas
+costas-d
+coste
+costello
+costen
+cote
+cothran
+cotnam
+cotner
+cotten
+cottengi
+cotter
+cottingh
+cottrell
+cotugno
+cotuna
+coucopou
+couey
+coughran
+coules
+coulman
+coulombe
+coulson
+coulter
+coulterm
+count
+coupal
+coupland
+courches
+couron
+coursdev
+coursey
+coursol
+courson
+court
+courtadm
+courtena
+courtlan
+courtnay
+courtney
+courvill
+couse
+couser
+cousinea
+cousins
+coutelli
+coutinho
+couto
+coutu
+couture
+covach
+coverdal
+covey
+coviensk
+coville
+covingto
+cowan
+cowart
+cowell
+cowen
+cowick
+cowley
+cowling
+cowlisha
+cownie
+cowper
+coxall
+coxe
+coyle
+coyne
+cozart
+cozmo
+cozyn
+cozzi
+cpebach
+cpm
+cprs
+crabb
+crabe
+crabtree
+cracknel
+craddock
+crafton
+craggie
+craggs
+craggy
+craghead
+craib
+craig
+craig-du
+crain
+cramer
+cramm
+crampton
+crandall
+cranford
+cranston
+crapco
+crase
+craver
+crawford
+crawhall
+crawley
+crawshaw
+cray
+craycraf
+cre
+creamer
+crean
+creane
+creasey
+creasman
+creative
+credico
+credille
+creech
+creecy
+cregan
+creigh
+creight
+creighto
+cremer
+crepeau
+crerar
+creswell
+crews
+cribbs
+crichton
+crick
+crickard
+cricker
+cricket
+crigger
+crin
+crippen
+cripps
+cris
+crisler
+crissie
+crissy
+crista
+cristabe
+cristal
+cristen
+cristesc
+cristi
+cristian
+cristie
+cristin
+cristina
+cristine
+cristion
+cristoba
+cristofa
+cristy
+criswell
+critchle
+crittend
+crl.word
+crocker
+crockett
+crogie
+croiseti
+croix
+crolla
+cromer
+crommie
+crompton
+cromwell
+cronan
+cronin
+cronk
+cronkrig
+cronkwri
+crooks
+croom
+cropper
+crosby
+cross
+cross-as
+crossass
+crossley
+crosson
+crosswel
+croteau
+crothers
+crotty
+crowder
+crowe
+crowell
+crowle
+crowley
+croxall
+croxford
+crozier
+crucefix
+cruey
+cruicksh
+crumpton
+crusoe
+crutchfi
+cruz
+cruzado
+cryoelec
+crysta
+crystal
+crystalb
+crystie
+csaszar
+csenar
+csilla
+csite
+csma
+csop
+csr
+csreport
+csua
+ctas
+cthrine
+cuany
+cuauhtem
+cubical
+cubicle
+cucchiar
+cucci
+cuccia
+cucciole
+cucuzzel
+cuddihey
+cuddihy
+cuddy
+cuellar
+cuervo
+cuffle
+cuffling
+cuggy
+culberso
+culberts
+culbreth
+culham
+culkin
+cull
+cullan
+cullen
+culley
+cullie
+cullin
+culliphe
+cullum
+cully
+culmer
+culp
+culver
+culverho
+cummine
+cumming
+cummings
+cummins
+cumpston
+cunanan
+cung
+cunha-go
+cunningh
+cuong
+cuper
+cupid
+cupido
+curcio
+curley
+curmon
+curnow
+curr
+curran
+currer
+currey
+currie
+currier
+currin
+curry
+curt
+curtice
+curtin
+curtis
+curtt
+cusato
+cushing
+cushman
+cusick
+cusson
+custer
+custsupp
+cusumano
+cuthbert
+cuthill
+cutrufel
+cutter
+cuu
+cwirzen
+cy
+cyb
+cybil
+cybill
+cybotech
+cycelia
+cymbre
+cynde
+cyndi
+cyndia
+cyndie
+cyndy
+cynethia
+cynthea
+cynthia
+cynthie
+cynthy
+cynthya
+cyr
+cyril
+cyrill
+cyrille
+cyrillus
+cyrine
+cyros
+cyrus
+cytrynba
+czappa
+czarneck
+czeban
+czes
+czeslaw
+czychun
+d'ambros
+d'amico
+d'amour
+d'andrea
+d'angelo
+d'anjou
+d'anne
+d'antoni
+d'aoust
+d'arcy
+d'cruz
+d'ingian
+d'ippoli
+d'lima
+d'onofri
+d'orazio
+d'silva
+d'soto
+d'souza
+da
+da gama
+da silva
+da-shih
+daaboul
+dacal
+dace
+dacey
+dach
+dachelet
+dacia
+dacie
+dack
+dacre
+dacy
+dada
+dadalt
+dadang
+dade
+dadgar
+dadkhah
+dae
+daebum
+daedalus
+dael
+daena
+daesik
+daffi
+daffie
+daffy
+dafoe
+dag
+dagama
+dagenais
+dagert
+dages
+dagg
+dagley
+dagmar
+dagnall
+dagnaw
+dagny
+dagoulis
+dahai
+dahan
+dahi
+dahl
+dahlia
+dahlstro
+dai
+daigle
+daigneau
+daijavad
+daile
+dailey
+daimee
+dairin
+daisey
+daisi
+daisie
+daisy
+dajerlin
+dal
+dale
+dalenna
+dales
+daley
+dalia
+dalila
+dalip
+dalis
+dall
+dall'ost
+dallago
+dallaire
+dallal
+dallas
+dalli
+dallis
+dallon
+dalmard
+daloris
+dalrympl
+dalsiel
+dalston
+dalt
+dalton
+daly
+damara
+damaris
+dambenie
+dame
+damena
+damerji
+damian
+damiano
+damien
+damil
+damita
+damon
+damone
+dan
+dana
+danagher
+danai
+danbrook
+danchi
+dancy
+dando
+danduran
+dane
+danell
+danella
+daneshza
+danette
+danforth
+dangubic
+danh
+dani
+dania
+danial
+danica
+danice
+danie
+daniel
+daniela
+danielak
+daniele
+daniella
+danielle
+daniells
+daniels
+danika
+danila
+danilo
+danilowi
+daniluk
+danit
+danita
+danjean
+danker
+danko
+danling
+dann
+danna
+dannel
+danni
+dannie
+danny
+dannye
+dans
+danserea
+dante
+dantu
+dantzler
+dany
+danya
+danyelle
+danyette
+danzeise
+danzig
+dao
+daochuan
+daoud
+daoust
+daphene
+daphine
+daphna
+daphne
+daquano
+dar
+dar-der
+dara
+darb
+darbee
+darbie
+darby
+darcange
+darcee
+darcel
+darcey
+darci
+darcie
+darcy
+darda
+darden
+darder
+dare
+dareen
+darell
+darelle
+daren
+dares
+dari
+daria
+darian
+darice
+darill
+darin
+darina
+dario
+darius
+darko
+darla
+darleen
+darlene
+darline
+darlingt
+darlleen
+darn
+darnall
+darnel
+darnell
+darold
+daron
+darou
+darpa
+darr
+darrel
+darrell
+darrelle
+darren
+darrick
+darrimon
+darrin
+darroch
+darrol
+darrow
+darry
+darryl
+darsey
+darshan
+darshana
+darshi
+darsie
+daruius
+darveau
+darwen
+darwin
+darwyn
+darya
+daryl
+daryle
+daryn
+daryoosh
+daryoush
+das
+dasch
+dasd
+dasha
+dasharat
+dashih
+dasi
+dasie
+dasilva
+dasinger
+dasrath
+dassani
+dassie
+dasya
+dat
+data
+datacent
+datas
+datasupp
+datema
+dates
+datha
+datta
+dattalo
+dau
+daudin
+daugavie
+daughert
+daughtre
+daunais
+daune
+dauphina
+dautenha
+dauteriv
+dav
+davalo
+dave
+daveen
+daven
+daveta
+davey
+david
+david-ye
+davida
+davidde
+davide
+davidh
+davidovi
+davids
+davidson
+davie
+davies
+davin
+davina
+davinci
+davinder
+davine
+davis
+davison
+davita
+davon
+davor
+davy
+dawe
+dawit
+dawkins
+dawn
+dawna
+dawne
+dawson
+daya
+dayal
+dayberry
+dayle
+daymond
+dayna
+dayton
+db
+dba
+dbase
+dbs
+ddavid
+ddene
+ddocdb
+de
+de anda
+de baets
+de beaum
+de belen
+de boer
+de buda
+de cecco
+de chabe
+de cours
+de crist
+de eliza
+de grace
+de hoog
+de la
+de leon
+de los
+de marco
+de marti
+de muinc
+de salis
+de souza
+de toni
+de varen
+de vito
+de vries
+de wiele
+de wilto
+de witt
+de witte
+de-anna
+de-boer
+de-ying
+de_konin
+deacetis
+deadwile
+deagle
+deak
+deakin
+dealmeid
+dealto
+deames
+dean
+deana
+deanda
+deane
+deanm
+deann
+deanna
+deanne
+deans
+deanza
+dear
+dearaujo
+deardurf
+deason
+deathera
+deatrick
+deb
+debadeep
+debasish
+debassig
+debbi
+debbie
+debby
+debee
+debera
+debernar
+debi
+debkumar
+deblois
+debnam
+deboer
+deboor
+debor
+debora
+deborah
+debord
+debortol
+debra
+debrah
+debrun
+debrusk
+debs
+decacque
+decaire
+decapua
+decarie
+decasper
+decca
+decelles
+deciccio
+deck
+decker
+declan
+decleir
+decource
+decourcy
+decoursi
+deczky
+dedas
+dede
+dedie
+dedra
+deduk
+dee
+dee dee
+deeann
+deeanne
+deedee
+deek
+deena
+deep
+deepak
+deerdre
+deere
+deery
+deetta
+deevey
+deeyn
+defacend
+defalco
+defazio
+defilipp
+deford
+deforeit
+defrance
+defranch
+degan
+degen
+degenova
+degraauw
+degrandi
+deguines
+deguire
+dehaan
+dehghan
+dehlia
+dehner
+dehoff
+dehr
+deiadrel
+deibert
+deicher
+deidre
+deikman
+deina
+deininge
+deirdre
+deitera
+deitiker
+dejan
+dejongh
+dekai
+dekeyser
+del
+dela
+delaat
+delage
+delahay
+delainey
+delancey
+delaney
+delangis
+delano
+delargy
+delat
+delbert
+delbret
+delbridg
+delbrouc
+delcina
+delcine
+deleon
+delf
+delfin
+delfreda
+delgass
+delgross
+delia
+deligdis
+delila
+delilah
+delinda
+delisle
+deliva
+dell
+della
+delle
+delli
+dellinge
+delly
+delmar
+delmer
+delmor
+delmore
+delnaz
+delo
+delolmod
+delong
+delora
+delorenz
+delores
+deloria
+deloris
+delorme
+delphine
+delphini
+delroy
+deluca
+deluce
+deluco
+delvecch
+delzer
+demarco
+demarest
+demchuk
+dement
+demeo
+demers
+demet
+demeter
+demetra
+demetre
+demetri
+demetria
+demetric
+demetrio
+demetris
+demetriu
+demeulem
+demi
+demidenk
+demir
+demjen
+demmel
+demone
+demontlu
+demorest
+demorge
+demott
+demps
+dempsey
+dempster
+demren
+demuth
+den
+dena
+dendi
+dene
+denebeim
+deneen
+denemark
+denery
+denest
+denette
+deng
+deng-jyi
+dengjyi
+deni
+denice
+deniece
+denike
+denis
+denise
+denison
+deniz
+denley
+denman
+denmark
+denna
+dennen
+dennet
+denney
+denni
+dennie
+denning
+dennis
+dennison
+denno
+denny
+deno
+denomme
+denoon
+denter
+denton
+denver
+deny
+denys
+denyse
+denzil
+deog
+deok
+deol
+deonne
+depalma
+depeltea
+depew
+dephoure
+deployme
+depooter
+dept
+dept.
+der
+der-chan
+der-shen
+deraadt
+deraaf
+derby
+derbyshi
+derecki
+derek
+derenzo
+derganc
+deri
+derick
+derika
+derin
+derk
+derluen
+dermardi
+dermot
+derome
+derosa
+derose
+derosenr
+derrek
+derrett
+derrick
+derrik
+derril
+derron
+derry
+dersheng
+derward
+derwin
+dery
+deryck
+des
+desai
+desalis
+desantis
+desautel
+desch
+deschamp
+deschiff
+descotea
+descotes
+desdemon
+desgrose
+desharna
+desi
+design
+desilets
+desimone
+desirae
+desire
+desiree
+desiri
+desjardi
+desjarla
+deska
+deslande
+deslauri
+desmarai
+desmond
+desmund
+desoer
+desorbay
+desourdy
+despain
+despault
+despinic
+desplanq
+despres
+desroche
+desrosie
+dessain
+desser
+destech
+destefan
+destry
+detjens
+detlef
+detleff
+detlev
+detloff
+detra
+deugau
+deugo
+deutschm
+dev
+deva
+devadas
+devan
+devarenn
+devault
+deveau
+devel
+developm
+deven
+devenny
+devenyi
+devenyns
+devera
+devere
+devette
+devgon
+devi
+devices
+devin
+devina
+devincen
+devine
+devinne
+devland
+devlen
+devlin
+devon
+devondra
+devonna
+devonne
+devora
+devore
+devouges
+devreeze
+devy
+dew
+dewain
+dewart
+dewayne
+dewey
+dewi
+dewie
+dewit
+dewitt
+dewitte
+dex
+dexiang
+dexter
+deying
+deyirmen
+deyoung
+dezbah
+dezoete
+dg
+dhaliwal
+dhansukh
+dhanvind
+dhar
+dharam
+dharmara
+dharmawa
+dhaussy
+dhawal
+dheeraj
+dhillon
+dhinakar
+dhir
+dhiraj
+dhiren
+dhuga
+dhupar
+di
+di cosol
+di giamb
+di maso
+di millo
+di ninno
+dia-edin
+diaconu
+diahann
+dialout
+diamond
+dian
+diana
+diandra
+diane
+diane-ma
+dianemar
+diann
+dianna
+dianne
+diannne
+diarmid
+dias
+diaz
+dibenede
+dibler
+dicaprio
+dick
+dickard
+dickens
+dickerma
+dickerso
+dickeson
+dickford
+dickie
+dickinso
+dicks
+dicksie
+dickson
+dicky
+didani
+didar
+didi
+didier
+didio-du
+dido
+diduch
+didylows
+diec
+diederic
+diederik
+diedrich
+diee
+diego
+diekman
+diemel
+dien
+diena
+diener
+diep
+diepling
+dierdre
+diersch
+diesing
+dieter
+dietra
+dietrich
+dieu
+dieuwert
+difalco
+diffee
+diffie
+difilipp
+difrance
+digby
+digenova
+digiacom
+digilio
+dignam
+dijaili
+dijian
+diju
+dikaitis
+dikens
+dilallo
+dilan
+dilen
+dilip
+dilkie
+dill
+dillabou
+dillard
+dilley
+dillie
+dillingh
+dillon
+dillow
+dilly
+diloreto
+dilpreet
+dima
+dimarco
+dimarzo
+dimas
+dimetry
+dimillo
+dimitra
+dimitri
+dimitrio
+dimitry
+dimoueri
+dina
+dinaband
+dinah
+dinalic
+dincamps
+dineke
+dinesh
+dinges
+dingle
+dingley
+dingman
+dinh
+dinhtran
+dinkel
+dinker
+dinnervi
+dinneyla
+dinnie
+dinnin
+dinny
+dino
+dinsmore
+dinur
+diogo
+dion
+dione
+dionis
+dionisio
+dionne
+dionysia
+dionysiu
+dionysus
+dipace
+dipak
+dipasqua
+diperna
+dipierro
+dipietro
+dipper
+dirac
+diradmin
+dirbm
+dirck
+diretto
+dirienzo
+dirilten
+dirk
+dis
+disalvo
+discenza
+discours
+discover
+disessa
+disher
+dishong
+disisto
+disney
+dispatch
+dissinge
+distribu
+dita
+ditecco
+ditko
+dittburn
+divyesh
+dix
+dixie
+dixon
+djavaher
+djenana
+djordje
+djuan
+dmaac
+dmitri
+dms
+dmsdb
+dmsrtime
+dmuchals
+dnadoc
+dniren
+dnsproj
+do
+doak
+doan
+dobbing
+dobbins
+dobbs
+dobby
+doble
+dobransk
+dobrosla
+dobry
+doc
+docherty
+dockendo
+doctorjo
+document
+doczy
+doda
+dodd
+dodds
+dode
+dodgson
+dodi
+dodie
+dodier
+dodman
+dodson
+dody
+doe
+doemer
+doerfel
+doerksen
+doernber
+doerr
+doggett
+dohan
+doherty
+doi
+doig
+doing
+dokken
+dokuzogu
+dolan
+dolezal
+dolf
+dolginof
+dolgov
+doliska
+doll
+dolley
+dolli
+dollie
+dolly
+dolores
+dolorita
+dolph
+dolson
+dom
+domains
+domanico
+domas
+dombrosk
+domenic
+domenick
+domenico
+domeniga
+dominado
+domine
+dominga
+domingo
+domingue
+domini
+dominic
+dominica
+dominick
+dominik
+dominiqu
+dommety
+don
+dona
+donaghue
+donahee
+donahue
+donak
+donal
+donald
+donaldso
+donall
+donalt
+donator
+donaugh
+donavon
+doncaste
+doncell
+donegan
+donelan
+donella
+donelle
+donetta
+dong
+dong-ik
+dong-moo
+dong-pyo
+dongik
+dongmoon
+dongpyo
+donia
+donica
+donielle
+donis
+donita
+donkers
+donleyco
+donlon
+donn
+donna
+donnajea
+donnamar
+donne
+donnell
+donnelly
+donner
+donnette
+donni
+donnice
+donnie
+donny
+donoghue
+donohoe
+donohue
+donovan
+dood
+doodeman
+dooley
+doolin
+doolittl
+door
+doortje
+dora
+doraine
+dorais
+doraiswa
+doralia
+doralie
+doralin
+doralyn
+doralynn
+doran
+doray
+dordari
+dorden
+dore
+doreen
+dorelia
+dorella
+dorelle
+dorena
+dorene
+doretta
+dorette
+dorey
+dori
+doria
+dorian
+dorianne
+dorice
+dorie
+dorin
+dorine
+dorion
+dorion-m
+doriot
+doris
+doris-ha
+dorisa
+dorise
+dorit
+dorita
+dormer
+dorn
+dornback
+doro
+dorolice
+dorolisa
+dorotea
+doroteya
+dorothea
+dorothee
+dorothy
+dorotich
+dorr
+dorra
+dorree
+dorreen
+dorrell
+dorri
+dorrie
+dorris
+dorronso
+dorry
+dorsey
+dorthea
+dorthy
+dorval
+dory
+dosanjh
+dosenbac
+doshi
+dosi
+doskas
+dosref
+doss
+dost
+dot
+dotan
+doti
+dotsey
+dotson
+dotti
+dottie
+dottin
+dotty
+doublesi
+doucet
+doucette
+doud
+douet
+doug
+dougall
+doughert
+doughty
+dougie
+douglas
+douglass
+dougy
+dourley
+douville
+dov
+dovel
+dover
+dovydait
+dow
+dowd
+dowding
+dowdy
+dowell
+dower
+dowjones
+dowker
+dowling
+downer
+downes
+downey
+downing
+downs
+dowse
+dowser
+doy
+doyle
+doyon
+dpierre
+dpn
+dpnbuild
+dpnis
+dpnlab
+dpnq&a
+dpp
+dpu
+dr.jones
+dr.seuss
+drabek
+drachman
+draco
+dracula
+draffin
+dragan
+dragana
+dragert
+dragnea
+drago
+draier
+drakage
+drake
+drako
+drane
+dransfie
+draper
+drappel
+draves
+dray
+drayton
+dre
+dreddy
+dredi
+dreisbac
+drenan
+drennan
+drescher
+dresel
+dresser
+dressler
+drew
+drewes
+drexel
+dreyfus
+dreyfuss
+driedger
+drieka
+drinnan
+driscoll
+drissel
+driver
+drjones
+drobnik
+drolet
+dromgool
+drona
+drop-box
+dropin
+droste
+drouin
+drseuss
+dru
+drubld
+druci
+drucie
+drucill
+drucy
+drud
+drudy
+drugi
+drugs
+drumhell
+drumm
+drummer
+drummond
+drusi
+drusie
+drusilla
+drusy
+druzeta
+drwiega
+dryer
+dryfoos
+drynan
+du berge
+du-tuan
+duan
+duane
+dube
+dubeau
+dubee
+dubey
+dubman
+dubois
+dubose
+dubreck
+dubreuil
+dubroff
+dubroy
+dubuc
+duc
+duchaine
+ducharme
+duchesne
+ducic
+dud
+duda
+dudas
+dude
+dudgeon
+dudley
+dueck
+duenas
+duensing
+dueppen
+duer
+duff
+duffie
+duffin
+duffney
+dufford
+duffy
+dufloth
+dufour
+dufresne
+dugal
+dugald
+dugar
+dugas
+duggan
+duguay
+duisman
+duke
+dukes
+dukey
+dukie
+duky
+dula
+dulaney
+dulce
+dulcea
+dulci
+dulcia
+dulciana
+dulcie
+dulcine
+dulcinea
+dulcy
+dulin
+duljit
+dulmage
+dulsea
+dulude
+dumais
+dumas
+dummer
+dumont
+dumouche
+dumps
+dun
+dunajski
+dunbar
+dunc
+duncan
+duncan-s
+dundin
+dunfield
+dung
+dungan
+dunham
+dunik
+dunkelma
+dunker
+dunlap
+dunlay
+dunlop
+dunmore
+dunn
+dunne
+dunnett
+dunning
+dunningh
+dunnion
+dunphy
+dunsmore
+dunson
+dunstan
+duong
+dupaul
+duplacey
+duplan
+dupont
+dupras
+dupre
+dupree
+dupuis
+dupuis-m
+dupuy
+duquette
+dur
+durali
+duran
+durand
+durant
+durantay
+durante
+durham
+durie
+durling
+durnford
+durose
+durousse
+durovic
+durrell
+dursse
+durward
+duryonna
+dusan
+dusko
+dusomos
+duster
+dusty
+dutch
+dutcher
+duthie
+dutil
+dutt
+dutta
+duvarci
+duxbury
+duy
+duyck
+dvm
+dvs
+dwain
+dwaine
+dwayne
+dwight
+dwyer
+dyan
+dyana
+dyane
+dyann
+dyanna
+dyanne
+dyba
+dybenko
+dyck
+dyckman
+dyess
+dyke
+dylan
+dyment
+dyna
+dynah
+dynie
+dyrdahl
+dysart
+dyson
+dziamba
+dziawa
+dziemian
+dzioba
+dzulkarn
+dzung
+eachelle
+eada
+eades
+eadie
+eadith
+eadmund
+eagle
+eagles
+eakes
+eakins
+eal
+ealasaid
+eales
+eamon
+eamonn
+eansor
+earl
+earle
+earlene
+earles
+earley
+earlie
+earline
+early
+earnest
+earnhard
+earnie
+earps
+eartha
+earvin
+easaw
+eason
+easson
+easter
+easterli
+eastick
+eastland
+eastman
+easton
+eastreg
+eastus
+eastwood
+eaton
+eaves
+eb
+eba
+ebara
+ebata
+ebba
+ebbingha
+eben
+ebeneser
+ebenezer
+eberhard
+eberle
+eberlin
+ebert
+eberto
+ebonee
+ebony
+ebrahim
+eby
+echols
+eckardt
+ecker
+eckert
+eckhart
+eckler
+ecklund
+eckstein
+ecocafe
+econ
+ecroyd
+ed
+eda
+edan
+edd
+eddi
+eddie
+eddins
+eddisfor
+eddy
+ede
+edee
+edel
+edeline
+edelman
+eden
+eder
+edey
+edgar
+edgard
+edgardo
+edgette
+edgreen
+edi
+edie
+edif
+edik
+edin
+edison
+edistix
+edita
+edith
+editha
+edithe
+ediva
+edkins
+edlene
+edlin
+edmison
+edmon
+edmond
+edmonds
+edmondso
+edmonton
+edmund
+edmundo
+edmunds
+edmx
+edmxtest
+edna
+edouard
+edric
+edsel
+eduard
+eduardo
+educatio
+eduino
+edvard
+edward
+edwards
+edwige
+edwin
+edwina
+edwins
+edy
+edyta
+edyth
+edythe
+efdal
+effie
+efland
+efrain
+efrem
+efren
+efron
+efstrati
+efthim
+efthimio
+eftychio
+egan
+egashira
+egbert
+egdorf
+egerman
+eggebraa
+eggers
+eggersgl
+eggleton
+egional
+egli
+egne
+egner
+egon
+egor
+ehab
+ehi
+ehlers
+ehninger
+ehrenfri
+ehrenhol
+ehrlich
+ehrlichm
+eicher
+eide
+eierstoc
+eiji
+eike
+eiki
+eiko
+eileen
+eilis
+eimer
+eimile
+einarsso
+einersen
+einstein
+einwohne
+eirena
+eirik
+eisele
+eisen
+eisenach
+eisenber
+eisenhar
+eisler
+eisner
+eisnor
+eiswirth
+eitner
+ekaterin
+ekiert
+el
+el-am
+el-gueba
+el-hawar
+el-torky
+eladio
+elaina
+elaine
+elam
+elana
+elane
+elayne
+elbert
+elberta
+elbertin
+elbeze
+elbi
+elchakie
+elda
+elden
+eldin
+eldon
+eldoris
+eldredge
+eldreth
+eldridge
+eleanor
+eleanora
+eleanore
+elec
+electra
+electric
+electron
+eleen
+elefteri
+elefther
+elena
+elene
+eleni
+elenore
+eleonora
+eleonore
+elery
+eleta
+elex
+eley
+elfie
+elfreda
+elfredia
+elfrida
+elfrieda
+elga
+elgar
+elgie
+elgin
+elhage
+elhamahm
+elhamy
+eli
+elia
+elianora
+elianore
+elias
+elicia
+elie
+eliezer
+elihu
+elijah
+elin
+eline
+elinor
+elinore
+elio
+eliot
+elisa
+elisabet
+elise
+eliseo
+elisha
+elissa
+elita
+eliud
+eliza
+elizabet
+elizalde
+elka
+elkaim
+elke
+elkhayat
+elkind
+elkingto
+elkins
+elks
+ella
+ellacott
+elladine
+ellary
+elle
+elledge
+elleke
+ellement
+ellen
+ellene
+ellens
+eller
+ellerey
+ellerman
+ellery
+ellette
+elli
+ellie
+ellinger
+ellingto
+elliot
+elliott
+ellis
+ellison
+ellissa
+ello
+ellryne
+ellswert
+ellswort
+ellul
+ellwood
+elly
+ellyn
+ellynn
+elmar
+elmer
+elmira
+elmo
+elmore
+elms
+elna
+elnar
+elnora
+elnore
+eloisa
+eloise
+elonore
+elora
+elpida
+elroy
+els
+elsa
+elsbeth
+else
+elset
+elsey
+elsi
+elsie
+elsing
+elsinore
+elson
+elspeth
+elston
+elsworth
+elsy
+elting
+elton
+eluned
+elva
+elvera
+elvert
+elvin
+elvina
+elvira
+elvis
+elvyn
+elwin
+elwira
+elwood
+elwyn
+ely
+elyn
+elyse
+elysee
+elysha
+elysia
+elyssa
+elza
+elzbieta
+elzer
+em
+ema
+emad
+emalee
+emalia
+emami
+emanatia
+emanuel
+emanuele
+emdin-sp
+emelda
+emelen
+emelia
+emelina
+emeline
+emelita
+emelyne
+emer
+emera
+emerick
+emerson
+emery
+emesh
+emhart
+emig
+emil
+emilda
+emile
+emilee
+emili
+emilia
+emilie
+emilien
+emiline
+emilio
+emilios
+emily
+emlen
+emlyn
+emlynn
+emlynne
+emma
+emmalee
+emmaline
+emmalyn
+emmalynn
+emmanuel
+emmeline
+emmell
+emmerich
+emmersto
+emmert
+emmery
+emmet
+emmett
+emmey
+emmi
+emmie
+emmit
+emmons
+emmott
+emmy
+emmye
+emogene
+emond
+emory
+emowilli
+emp
+empdb
+employee
+emr
+emran
+emrick
+emro
+emyle
+emylee
+emysta
+encomend
+endang
+ende
+endenbur
+enderle
+enders
+enderton
+endicott
+endless
+endot
+endrys
+endsley
+enet
+eng
+eng-sion
+engbert
+engel
+engelber
+engelbre
+engelhar
+engin
+engineer
+england
+englande
+engle
+engleber
+englebri
+engleman
+englert
+english
+engman
+engr
+engracia
+engsiong
+engtv
+enid
+enis
+ennis
+enno
+enns
+enoch
+enos
+enrica
+enrichet
+enrico
+enrika
+enrique
+enriquet
+ensign
+ensing
+ensminge
+ensor
+enstone
+entwistl
+enver
+environm
+envoy
+enzo
+eoin
+eolanda
+eolande
+eow
+eperjesy
+ephraim
+ephrayim
+ephrem
+eppensti
+epperson
+eppich
+epplett
+epps
+eprom
+epstein
+epting
+eran
+erasmus
+erastus
+erbach
+erbilgin
+erda
+erdem
+erdinc
+erek
+erena
+erfani
+ergle
+erguven
+erh-huan
+erhard
+erhart
+erhhuan
+eric
+erica
+erich
+ericha
+erichsen
+erick
+ericka
+erickson
+erics
+ericsson
+erie
+erik
+erika
+eriks
+eriksson
+erin
+erina
+erine
+erinn
+erinna
+erkan
+erkel
+erl
+erland
+erle
+erlene
+erler
+erling
+erma
+ermanno
+ermarkar
+ermengar
+ermentru
+ermey
+ermin
+ermina
+erminia
+erminie
+ermo
+erna
+ernaline
+ernest
+ernesta
+ernestin
+ernesto
+ernestus
+ernie
+erning
+ernst
+erny
+eroler
+eros
+errchend
+errick
+errol
+erroll
+ersch
+ersil
+erskine
+ertan
+ertha
+ertl
+erv
+ervi
+ervin
+erwei
+erwin
+erwing
+eryn
+erzsebet
+es
+esam
+esc
+esch
+eschen
+escher
+escherma
+escobedo
+escobido
+escutin
+esdras
+esgate
+esguerra
+eshelman
+eshghi
+esi
+esite
+eskew
+eskiciog
+eskildse
+esko
+eslambol
+esler
+esliger
+esma
+esmail
+esmaili
+esmaria
+esme
+esmerald
+esmond
+esparza
+espenson
+espinosa
+espinoza
+esposito
+espuna
+esra
+esry
+essa
+essam
+esselbac
+esser
+essery
+essie
+essig
+esson
+essy
+esta
+estabroo
+este
+esteban
+estegham
+estel
+estele
+estell
+estella
+estelle
+estep
+ester
+estes
+estevam
+estevan
+estey
+esther
+estrella
+estrelli
+estridge
+eswara
+etan
+etas
+etchieso
+etemad
+eteminan
+ethan
+ethe
+ethel
+ethelber
+ethelda
+ethelin
+ethelind
+etheline
+ethelred
+ethelyn
+ethier
+ethingto
+ethnolog
+ethyl
+etienne
+etoh
+etta
+etten
+etti
+ettie
+ettore
+ettridge
+ettson
+etty
+etu
+etzell
+eu
+eubanks
+euclid
+eudora
+euell
+eugen
+eugene
+eugenia
+eugenie
+eugenio
+eugenius
+eugine
+eula
+eulalie
+euler
+eunchae
+eung
+euni
+eunice
+eunji
+euphemia
+eustace
+eustacia
+eustis
+euy-soo
+euysoo
+euysung
+ev
+eva
+evaleen
+evalyn
+evan
+evandro
+evangeli
+evangelo
+evania
+evanne
+evans
+evanston
+eve
+eveleen
+eveleigh
+evelien
+evelin
+evelina
+eveline
+evely
+evelyn
+evelyne
+even
+evenson
+events
+everard
+evered
+everett
+everette
+everitt
+evers
+evert
+evette
+evey
+evia
+evie
+evin
+evita
+evon
+evona
+evonne
+evraire
+evren
+evvie
+evvy
+evy
+evyn
+ewald
+ewan
+ewanchyn
+eward
+ewart
+ewasyshy
+ewell
+ewen
+ewing
+exner
+ext
+eyde
+eydie
+eyers
+eyk
+ezechiel
+ezekiel
+ezella
+ezequiel
+eziechie
+ezmerald
+ezra
+ezri
+ezzat
+fab
+fabe
+fabella
+faber
+fabian
+fabiano
+fabien
+fabienne
+fabijani
+fabio
+fabris
+fabrizio
+fabry
+facchett
+facility
+fadel
+fadhel
+fadi
+fadj
+fadlalla
+fady
+fadzilah
+fae
+faez
+fafa
+fafara
+fagan
+fagg
+fagin
+fahey
+fahim
+fahrenth
+fahy
+fai
+faina
+fainaru
+fainecos
+faiq
+fair
+fairclou
+fairfax
+fairfiel
+fairleig
+fairless
+fairlie
+fairman
+fairy
+faisal
+faison
+fait
+faith
+faiz
+faizal
+fajardo
+falaki
+falardea
+falbee
+falcao
+falconer
+faletti
+faley
+falicov
+falito
+falke
+falkenst
+falkner
+fallah
+fallahi
+falletti
+fallis
+fallon
+fallows
+falquero
+falt
+faltens
+fambroug
+familiad
+famke
+fan
+fanchett
+fanchi
+fanchon
+fancie
+fancy
+fanechka
+fang
+fangio
+fani
+fania
+fann
+fanner
+fanni
+fannie
+fanny
+fansher
+fantauzz
+fanthome
+fanty
+fanus
+fanya
+faou
+far
+fara
+faraday
+farag
+farago
+farah
+farahvas
+faramarz
+farand
+farant
+fares
+fargis
+fargo
+farhad
+farhan
+farhang
+farhat
+farias
+fariba
+fariborz
+farica
+farid
+faris
+farlay
+farlee
+farleigh
+farley
+farlie
+farly
+farmer
+farn
+farnham
+farnjeng
+farnswor
+farnum
+farokh
+farooa
+farooq
+farouk
+farquhar
+farr
+farra
+farrah
+farrand
+farranto
+farrel
+farrell
+farren
+farringt
+farris
+farrokh
+farronat
+farrow
+farrukh
+farshid
+faruk
+faruque
+farzad
+farzin
+fasken
+fast
+fastfeat
+fastmer
+fastone
+fastowl
+fastpack
+fataneh
+fater
+fatholla
+fatica
+fatima
+fattarus
+fattouh
+faubert
+faucette
+faucher
+faulhabe
+faulkner
+faun
+faunie
+faust
+faustina
+faustine
+fausto
+faustus
+favell
+favreau
+favrot
+fawaz
+fawcett
+fawn
+fawne
+fawnia
+fax
+fay
+fayanne
+faydra
+faye
+fayette
+fayez
+fayina
+fayma
+fayre
+fayth
+faythe
+faz
+fazel
+fearless
+featherm
+feddeman
+fedderse
+feder
+federica
+federico
+federiko
+fedora
+fedoruk
+fedyk
+fee
+feeley
+feeney
+fehr
+fei
+fei-wen
+fei-yin
+feil
+feild
+feisal
+feist
+feitel
+feith
+feiwen
+fekade
+fekri
+felczak
+feld
+feldberg
+felder
+feldman
+felecia
+felfli
+felic
+felicdad
+felice
+felicett
+felicia
+felicio
+felicity
+felicle
+felike
+feliks
+felipa
+felipe
+felisha
+felita
+felix
+feliza
+felizio
+felli
+fellman
+felske
+feltman
+felton
+femke
+fenati
+fender
+fenelia
+fenez
+feng
+fenlason
+fenn
+fennell
+fenner
+fennesse
+fenton
+fenwick
+feodor
+feodora
+fequiere
+ferba
+ferd
+ferdie
+ferdinan
+ferdy
+feregyha
+fereidoo
+ferelith
+ferenc
+ference
+ferenz
+fererro
+fergus
+ferguson
+fergusso
+feridoun
+ferland
+fermat
+fermi
+fermoyle
+fern
+fernald
+fernan
+fernand
+fernanda
+fernande
+fernandi
+fernando
+ferne
+ferner
+ferrao
+ferrara
+ferraro
+ferree
+ferreira
+ferrel
+ferrell
+ferrer
+ferrero
+ferriera
+ferrin
+ferris
+ferriss
+ferro
+ferruzzi
+ferstl
+fetterma
+fetting
+fetzko
+feutlins
+fevre-re
+fey
+feyen
+feynman
+fi-john
+fiann
+fianna
+fiaz
+ficco
+ficici
+ficken
+ficker
+fickes
+fidel
+fidela
+fidelia
+fidelio
+fidelity
+fidole
+fiegel
+fieke
+field
+fielden
+fielding
+fields
+fieldsup
+fierthal
+fiest
+fifi
+fifield
+fifine
+figura
+fijohn
+fikis
+fikre
+fil
+filbert
+filberte
+filberto
+fildey
+filer
+files
+files ar
+filia
+filibert
+filide
+filion
+filip
+filippa
+filippi
+filippo
+filis
+filkins
+fillmore
+filmer
+filmore
+filpus
+filson
+fima
+fin
+fina
+finak
+finance
+finane
+finckler
+findlay
+findley
+finkhels
+finlay
+finlayso
+finley
+finn
+finnegan
+finnerty
+finney
+finnie
+finnigha
+finnon
+fintan
+finucane
+finzel
+fiona
+fionan
+fionna
+fionnula
+fiore
+fiorenze
+fiorile
+firas
+firat
+firdaus
+firerobi
+firment
+firtos
+fischer
+fischett
+fischler
+fiset
+fisette
+fishenco
+fisher
+fishkin
+fishman
+fisico
+fisopn
+fisprod
+fiszman
+fitch
+fiteny
+fitness
+fitz
+fitzgera
+fitzgibb
+fitzpatr
+fitzroy
+fitzsimm
+fixsen
+flach
+flagg
+flaherty
+flanagan
+flanders
+flann
+flanner
+flansbur
+flatley
+fleet
+fleig
+fleische
+fleishma
+flem
+fleming
+flemming
+fleskes
+fletch
+fletcher
+fleuchau
+fleugel
+fleur
+fleurett
+fleurima
+fleury
+flewelli
+flexo
+flicking
+flin
+flindall
+flinn
+flint
+flintall
+flo
+floch
+flook
+flookes
+flor
+flora
+florance
+florante
+flore
+florella
+florence
+florenci
+florenti
+florenza
+flores
+florescu
+florette
+florez
+flori
+floria
+florian
+florida
+florie
+florina
+florinda
+florine
+floris
+florjanc
+florri
+florrie
+florry
+flory
+flossi
+flossie
+flossy
+flounder
+flowers
+floyd
+floysvik
+flss
+fludgate
+flueckin
+fluet
+fluney
+flury
+fluty
+flying
+flynn
+foad
+fobert
+focht
+focsanea
+focus
+fodell
+foderaro
+foeppel
+foessl
+foest
+fogelson
+foght
+fogle
+fogleman
+fok
+folashad
+foldes
+foley
+follett
+follick
+follmer
+folwell
+fon
+fondacar
+fong
+fonnie
+fons
+fonsie
+fontaine
+fontana
+fontanil
+fontanin
+fony
+fonz
+fonzie
+foods
+foong
+foos
+forbes
+forbrich
+forbs
+ford
+forden
+fordham
+forecast
+foreman
+forese
+forest
+forester
+forgeron
+forghani
+forgues
+forland
+formagie
+forno
+forouhar
+forrest
+forreste
+forrette
+forslund
+forst
+forster
+forsythe
+fortes
+fortier
+fortman
+fortner
+foss
+foster
+fothergi
+fotini
+fouad
+foubert
+foucault
+fouchard
+fougere
+fouillar
+fouke
+fouletie
+foulkes
+four
+fouret
+fourier
+fourkas
+fournel
+fourney
+fournier
+fouts
+fowler
+fowler-h
+fowles
+fowlkes
+fowlston
+fox
+foxworth
+fpsched
+fqa
+fraanky
+fradette
+fragnito
+fraley
+fralick
+fralix
+frampton
+fran
+franc
+france
+francene
+frances
+francesc
+francese
+franchot
+francic
+francine
+francis
+francisc
+francisk
+francisp
+franckli
+franckly
+francky
+franco
+francoeu
+francois
+francyne
+frangoul
+franics
+frank
+franka
+frankcom
+frankenb
+franki
+frankie
+frankle
+franklin
+franklyn
+frankos
+franks
+franky
+franni
+frannie
+franny
+frans
+fransis
+fransisc
+frantise
+frants
+frantz
+franz
+franza
+franze
+franzen
+franzky
+franzwa
+frape
+frasco
+fraser
+frasier
+frasquit
+fraties
+frayda
+fraze
+frazer
+frazier
+fred
+freda
+freddi
+freddie
+freddy
+fredek
+fredelia
+fredenbu
+frederic
+frederig
+frederik
+frederiq
+fredette
+fredi
+fredia
+fredimos
+fredine
+fredra
+fredric
+fredrick
+fredrika
+fredriks
+free
+freeburn
+freedman
+freek
+freeland
+freeley
+freeman
+freemand
+freemon
+freeth
+freiberg
+freida
+freimark
+freire
+freiwald
+freixe
+freksa
+fremont
+french
+frendo
+frenette
+freno
+fretz
+freud
+frey
+freya
+freyermu
+freyler
+frezzo
+fricker
+fricks
+fridel
+frie
+frieda
+friedber
+frieder
+friederi
+friedl
+friedlan
+friedman
+friedric
+frierson
+friesen
+frinel
+frink
+frisa
+frischkn
+frischli
+frisk
+friton
+fritz
+fritzie
+frizado
+frobel
+froberg
+frobishe
+frodsham
+froehlic
+froncek
+frondozo
+fronsee_
+fross
+frosst
+froud
+froukje
+frucci
+fruehauf
+frumerie
+fruscia
+fryar
+frydach
+frydman
+fryer
+fscocos
+fssup
+ftpsites
+fu
+fu-sheng
+fu-shin
+fu-zong
+fuchs
+fucito
+fugen
+fujii
+fujimaki
+fujimoto
+fujiwara
+fukui
+fukumoto
+fukunaga
+fulford
+fulk
+fulkerso
+fullager
+fuller
+fullmer
+fullum
+fulmer
+fulton
+fulvia
+fumerton
+fumio
+funamoto
+funderbu
+fung
+funston
+fuping
+fuqua
+furdoonj
+furgerso
+furlin
+furlow
+furmania
+furnas
+furrukh
+furst
+furuta
+fusca
+fusheng
+fuson
+fussell
+fuzal
+fuzong
+fwp
+fwpas
+fwpco
+fwpreg
+fwptools
+fyfe
+fysh
+fyske
+gaal
+gabato
+gabbai
+gabbard
+gabbey
+gabbi
+gabbie
+gabby
+gabe
+gabey
+gabi
+gabie
+gaboury
+gabriel
+gabriela
+gabriele
+gabriell
+gabrila
+gaby
+gach
+gaconnie
+gadbois
+gadher
+gadouchi
+gadsby
+gadzinow
+gae
+gaebel
+gael
+gaelan
+gaertner
+gaetan
+gaetanin
+gaetano
+gaffney
+gafford
+gaftea
+gagan
+gage
+gagne
+gagnier
+gagnon
+gahan
+gahir
+gahlot
+gahn
+gahr
+gahunia
+gaiarsa
+gaiger
+gail
+gaile
+gailya
+gaime
+gainer
+gaines
+gaiotti
+gaiser
+gaitan
+gaither
+gajendra
+gajewski
+gajowiak
+gal
+galanaki
+galasso
+galbrait
+galdwin
+gale
+gale
+galen
+galewski
+galina
+galipeau
+gallaghe
+gallais
+gallard
+gallegos
+gallenbe
+galligan
+gallinge
+gallion
+gallman
+gallo
+gallops
+gallouzi
+galloway
+galluzzi
+galois
+galt
+galvan
+galven
+galvez
+galvin
+gama
+gamal
+gamaleld
+gamaliel
+gamarnik
+gambrell
+gamelin
+gammage
+gamsa
+gan
+ganadry
+ganapath
+gandhi
+gane
+ganesan
+ganesh
+ganeshku
+gangnes
+gangotra
+ganguly
+gani
+gann
+ganness
+gannett
+gannie
+gannon
+gannot
+ganny
+gans
+gant
+gantt
+gapp
+gar
+gara
+garald
+garamvol
+garan
+garand
+garay
+garbis
+garbish
+garcia
+garcia-l
+garcia-m
+gard
+gardener
+gardie
+gardiner
+gardner
+gardy
+gare
+garee
+gareis
+garek
+gareth
+garey
+garfield
+garg
+garguilo
+gargul
+gargulak
+garik
+garinger
+garito
+garland
+garmon
+garneau
+garner
+garnet
+garnett
+garnette
+garney
+garo
+garold
+garp
+garrard
+garrek
+garret
+garreth
+garrett
+garrick
+garrik
+garrot
+garrott
+garry
+garth
+gartley
+gartshor
+garv
+garvey
+garvin
+garvy
+garwin
+garwood
+gary
+gascho
+gascon
+gasikows
+gaskins
+gaspar
+gaspard
+gasparo
+gasparot
+gasper
+gass
+gast
+gaston
+gasul
+gateau
+gateley
+gater
+gates
+gateway
+gatka
+gattrell
+gau-rong
+gaube
+gaudet
+gaudet-m
+gaudon
+gaudreau
+gaughan
+gaul
+gaulle
+gault
+gaultier
+gaunsezl
+gaurong
+gause
+gauss
+gautam
+gauthier
+gav
+gavan
+gaven
+gavens
+gavidia
+gavilluc
+gavin
+gavra
+gavriel
+gavriell
+gawain
+gawargy
+gawdan
+gawen
+gawronsk
+gawtrey
+gay
+gaye
+gayel
+gayelord
+gayl
+gayla
+gayle
+gayleen
+gaylene
+gayler
+gaylor
+gaylord
+gayman
+gaynor
+gayronza
+gazala
+gazier
+gazo
+gdowik
+ge
+geadah
+gean
+gearalt
+gearard
+geary
+gebhardt
+gebhart
+gebrael
+gedas
+geddes
+gedeon
+gedman
+gedra
+gedye
+gee
+gee-meng
+geer
+geert
+geesman
+geeta
+geetha
+geety
+gehm
+gehr
+gehring
+geiger
+geir
+geisler
+geksong
+gelais
+geldrez
+gelinas
+gell
+geller
+gelling
+gelo
+gelya
+gemmill
+gen
+gena
+genae
+gendre
+gendron
+gene
+geneau
+general
+generalc
+generato
+genet
+geneva
+geneviev
+genevra
+genga
+genge
+genia
+genie
+genna
+gennaro
+genni
+gennie
+gennifer
+genny
+geno
+genova
+genovera
+genovise
+genowefa
+gentes
+gentzler
+genvieve
+geoff
+geoffrey
+geoffrio
+geoffry
+georas
+geordie
+georg
+georgann
+george
+georgean
+georgena
+georges
+georgesc
+georgeta
+georgett
+georghio
+georgi
+georgia
+georgian
+georgie
+georgina
+georgine
+georgio
+georgiou
+georgy
+ger
+gera
+gerald
+geralda
+geraldin
+geralene
+gerard
+gerardja
+gerardo
+gerassim
+gerbec
+gerben
+gerber
+gerda
+gerek
+gerenser
+gergen
+gerhard
+gerhardi
+gerhardt
+gerhart
+geri
+gerianna
+gerianne
+gerick
+gerik
+gerladin
+gerlich
+gerlinsk
+gerlt
+germ
+germain
+germaine
+germana
+germano
+germayne
+germe
+gernot
+gerome
+gerrard
+gerri
+gerrie
+gerrilee
+gerrit
+gerritse
+gerry
+gershwin
+gerstmar
+gert
+gerta
+gerth
+gerti
+gertie
+gertridg
+gertrud
+gertruda
+gertrude
+gertrudi
+gerty
+gervais
+gervaise
+gery
+gerynowi
+gesine
+gesino
+gessford
+getchell
+getoor
+gettys
+geuder
+gewell
+geyer
+geza
+ghadisha
+ghaemi
+ghaemian
+ghaffari
+ghandi
+ghanem
+ghangurd
+ghani
+ghantous
+ghartey
+ghasemia
+ghassan
+ghassem
+ghatta
+ghazi
+gheciu
+ghelardu
+gheorghe
+gherardo
+ghidali
+ghislain
+ghobad
+gholamre
+ghorashy
+ghosh
+ghossein
+ghulam
+ghulati
+gia
+giacinta
+giacobo
+giacomo
+giacopo
+giallo
+giamatte
+giambatt
+giambera
+giampaol
+gian
+giana
+giandome
+giang
+giani
+gianina
+gianna
+gianni
+giao
+giap
+giarritt
+giavani
+gib
+gibb
+gibbie
+gibbins
+gibbons
+gibbs
+gibby
+gibeault
+giblin
+gibson
+gidaro
+gideon
+gidget
+gie-ming
+giekes
+gieming
+gierka
+giertych
+giesbrec
+gieschen
+giese
+giff
+giffard
+giffer
+giffie
+gifford
+giffy
+giggey
+gigi
+giguere
+gigus
+gihan
+gihyun
+gil
+gilbert
+gilberta
+gilberte
+gilberti
+gilberto
+gilberts
+gilburt
+gilchris
+gilda
+gilemett
+giles
+giliham
+gill
+gillan
+gillard
+gille
+gillelan
+gilles
+gillespi
+gillespy
+gillet
+gillette
+gilli
+gilliam
+gillian
+gilliard
+gillie
+gillies
+gillig
+gilligan
+gillilan
+gillis
+gillon
+gillot
+gillstro
+gilly
+gilmore
+gilmour
+gilstorf
+gimon
+gin
+gina
+ginelle
+ginest
+ginette
+ginetto
+ginevra
+ginger
+gingeric
+gingold
+gingras
+gingrich
+gini
+ginn
+ginni
+ginnie
+ginnifer
+ginny
+gino
+ginsberg
+gint
+gintaras
+ginzburg
+gio
+gioffre
+gionet
+giordano
+giorgi
+giorgia
+giorgio
+giorgos
+giotis
+giovanna
+giovanni
+giovinaz
+gipsy
+giralda
+giraldo
+girard
+giraud
+girgis
+giri
+giridhar
+girish
+girotti
+girouard
+giroux
+girvan
+gisbert
+gisela
+giselber
+gisele
+gisella
+giselle
+gita
+gittins
+giuditta
+giuhat
+giulia
+giuliani
+giuliett
+giulio
+giuntini
+giuseppe
+giustina
+giustino
+giusto
+gize
+gizela
+glad
+gladi
+gladstei
+gladys
+glancey
+glanfiel
+glaros
+glasa
+glaser
+glasgow
+glass
+glasser
+glast
+glaszcza
+glazer
+gleason
+gleda
+gleditsc
+glembosk
+glen
+glenda
+glenden
+glendon
+glenine
+glenn
+glenna
+glennie
+glennis
+glew
+glickman
+glidewel
+glinka
+glinski
+glofches
+glori
+gloria
+gloriana
+gloriane
+glornia
+glory
+glover
+glowa
+glucksma
+glymph
+glyn
+glynda
+glynis
+glynn
+glynnis
+gnaeding
+gnni
+go
+goangshi
+goatcher
+goba
+gobeil
+gobeli
+goble
+gockel
+godard
+godart
+godcharl
+goddard
+goddart
+godden
+goddette
+godfree
+godfrey
+godfry
+godin
+godina
+godish
+godiva
+godley
+godlingt
+godo
+godowsky
+godse
+godsoe
+godwin
+goei
+goel
+goell
+goeltzen
+goerss
+goertz
+goertzen
+goethe
+goetz
+goff
+gofron
+goggin
+goh
+goheen
+goin
+goins
+gokal
+gokul
+gokul-ch
+golari
+golas
+golaszew
+golczews
+golda
+goldarin
+goldberg
+goldenbe
+goldenso
+golder
+goldfiel
+goldi
+goldia
+goldie
+goldina
+goldman
+goldmann
+goldner
+goldschm
+goldstei
+goldthor
+goldwyn
+goldy
+golia
+goliss
+golka
+goller
+gollu
+golshan
+gombos
+gomes
+gomez
+gomm
+gong-lia
+gonglian
+goniotak
+gonsalve
+gonzaga
+gonzales
+gonzalez
+gonzalo
+goober
+gooch
+goodbar
+goode
+gooderha
+goodfell
+goodier
+goodinso
+goodman
+goodner
+goodridg
+goodrow
+goodson
+goodwin
+goofy
+goold
+gooley
+goos
+gopal
+gopaul
+gope
+gopisett
+goran
+gorasia
+goraud
+gorberg
+gord
+gordan
+gorde
+gorden
+gordie
+gording
+gordon
+gordy
+gorenflo
+gores
+gorfine
+gorham
+gorhum
+goricane
+goridkov
+goring
+gorius
+gorlick
+gorman
+gorsky
+gorton
+gorzocos
+goska
+goss
+gosselin
+gosset
+gostania
+goswick
+goszczyn
+gotch
+gotchall
+goth
+gothard
+gothart
+gottfrie
+gottlieb
+gottscha
+gottstei
+gou-don
+goudon
+goudreau
+gougeon
+gough
+gouhara
+goukon
+gould
+gouldson
+goulet
+goulette
+goulfine
+goupil
+gourley
+goutam
+govind
+govindan
+govindar
+govindas
+gow-jen
+gowan
+gowda
+gowens
+gower
+gowin
+gowjen
+gowl
+gowland
+goyal
+goyer
+goyette
+goza
+gozani
+gozen
+grabner
+grabowsk
+grace
+gracen
+gracey
+gracia
+gracie
+graciela
+gracinda
+gracomda
+gradeigh
+grader
+gradey
+grading
+grads
+grady
+graehme
+graeme
+graessle
+graff
+grafton
+graham
+graibe
+graig
+grainger
+gram
+graman
+grame
+gramiak
+gran
+granado
+granata
+grandboi
+grande
+grandmas
+grandump
+grandy
+granfiel
+grange
+granger
+granic
+granner
+grannie
+granny
+grant
+grantham
+granthem
+grantley
+granvill
+graphics
+grasman
+grason
+grassman
+grata
+gratia
+gratiana
+gratton
+grau
+grauer
+grausso
+gravelle
+gravely
+graver
+graves
+gravitt
+gravitte
+grawberg
+gray
+graybill
+grayce
+graydon
+grayson
+grazia
+graziano
+grazzini
+greaney
+greatest
+greaver
+greaves
+grebil
+grebner
+greco
+greeley
+greenber
+greene
+greenfie
+greenlee
+greenstr
+greenway
+greer
+greet
+greg
+gregaric
+greger
+gregg
+gregge
+greggory
+grego
+gregoire
+gregoor
+gregor
+gregor-p
+gregorio
+gregoriu
+gregorsk
+gregory
+grelck
+grenier
+grenon
+grenvill
+greszczu
+gret
+greta
+gretal
+gretchen
+grete
+gretel
+grethel
+gretna
+gretta
+grevelin
+grevy
+grewal
+grey
+greytock
+gribbon
+gribbons
+grier
+griet
+grietje
+griff
+griffie
+griffin
+griffioe
+griffith
+griffy
+grigg
+griggs
+grignon
+grigsby
+grillmey
+grills
+grimble
+grimes
+grimm
+grimmell
+grimshaw
+grimsley
+griner
+grinham
+grinnell
+gris
+griselda
+grisoni
+grissel
+grissom
+griswold
+gritton
+grixti
+griz
+groce
+grochau
+grodecki
+groetsem
+groff
+grogan
+grohovsk
+groleau
+grona
+grondin
+gronwall
+grooms
+grootenb
+gros
+grosh
+grosjean
+grosman
+grosse
+grossman
+grossutt
+groth
+groulx
+grove
+grover
+groves
+grovesti
+growden
+growler
+gruau
+grubbs
+gruber
+grueneic
+grueng
+gruenhag
+grund
+gruska
+gruszczy
+gryder
+grzegore
+grzegorz
+grzesik
+gsite
+gu
+guajardo
+gualteri
+guan
+guanglia
+guangyou
+guanyun
+guarez
+guarino
+guarnera
+guatto
+guay
+gubbins
+gubenco
+gucer
+guciz
+gudgeon
+gudrun
+guendole
+guenette
+guenever
+guenna
+guenther
+guercion
+guerette
+guerin
+guerrero
+guerrier
+guertin
+guests
+guevara
+guglielm
+gui
+guido
+guignon
+guilbaul
+guilbert
+guilford
+guilfoyl
+guillaum
+guillema
+guilleme
+guillerm
+guillet
+guillory
+guilmett
+guimond
+guin
+guindi
+guindon
+guinever
+guinn
+guinna
+guinnane
+guiqing
+guirguis
+guisler
+guitard
+guitaris
+gulbrand
+gulick
+gulis
+gulko
+gullekso
+gultekin
+gulvin
+gumb
+gumbley
+gummadi
+gumperz
+gun
+gunadhi
+gunar
+gunars
+gunaseke
+gunawan
+gundecha
+gunderse
+gunderso
+gundes
+gundlach
+gundry
+guner
+gunfer
+gung
+gungor
+gunilla
+gunkel
+gunn
+gunnar
+gunnells
+gunner
+gunshor
+guntar
+guntekin
+gunter
+gunther
+guntvedt
+guo
+guo-jie
+guo-qian
+guoben
+guochun
+guojie
+guoming
+gupta
+gupton
+gur-arie
+gurash
+gurchara
+gurdip
+gure
+gurer
+gurevitc
+gurgenci
+gurica
+gurjinde
+gurjit
+gurley
+gurmeet
+gurnam
+gurney
+gursahan
+gurshara
+gursin
+gurvinde
+gus
+gusella
+guss
+gussi
+gussie
+gussy
+gusta
+gustaf
+gustafso
+gustafss
+gustav
+gustave
+gustavo
+gustavus
+gusti
+gustie
+gustlin
+gusty
+gutcher
+gutermut
+guth
+guthrey
+guthrie
+guthro
+guthry
+gutierre
+guttman
+guty
+gutzmann
+guy
+guy-arbo
+guylain
+guylaine
+guyot
+guzman
+gwen
+gwenda
+gwendole
+gwendoli
+gwendoly
+gweneth
+gwenette
+gwenneth
+gwenni
+gwennie
+gwenny
+gwennyth
+gwenora
+gwenore
+gwo-chun
+gwo-hsin
+gwochung
+gwohsing
+gwyn
+gwyneth
+gwynith
+gwynne
+gyenes
+gyeongbe
+gyger
+gylys
+gyoung
+gypsy
+gysel
+gyula
+gyurcsak
+gyurcsik
+gzl
+ha
+haack
+haaksman
+haas
+habeeb
+habel
+habelrih
+haber
+haberman
+habert
+habib
+hachador
+hache
+hachelle
+hachey
+hack-hoo
+hacker
+hackett
+hacking
+had
+hadaway
+haddad
+hadden
+haddow
+hadel
+hadi
+hadiraha
+hadlee
+hadleigh
+hadley
+hadria
+hadrian
+hady
+hadziome
+hae-won
+haerle
+haertel
+haether
+haewon
+hafedh
+hafeezah
+hafermal
+hafiz
+hafleigh
+hagan
+hagar
+hage
+hagen
+hagenbuc
+hager
+hagerty
+hagewood
+haggar
+haggart
+haggarty
+haggerty
+hagglund
+haghighi
+hagley
+hagstrom
+hagwood
+hahn
+hai
+hai-ning
+hai-ping
+hai-shun
+haibo
+haifang
+haig
+haigh
+hailee
+hailes
+hailey
+haily
+haim
+haimson
+hainer
+haines
+haining
+hainline
+haiping
+haire
+hairil
+haishung
+hak-lay
+hakala
+hakan
+hakansso
+hakeem
+hakim
+haklay
+hal
+hala
+halbedel
+halbert
+hale
+haleigh
+halejak
+halet
+halette
+haley
+half
+halford
+hali
+halicki
+halie
+halimeda
+halina
+hall
+hallamas
+hallenbe
+haller
+hallett
+halley
+halli
+hallie
+halligan
+halliwil
+hallman
+hallsy
+hally
+halovani
+halpenny
+halpern
+halpin
+halsey
+halstead
+halsy
+haluk
+halula
+ham
+hamachi
+hamavand
+hambali
+hambone
+hamdy
+hameed
+hamel
+hamelin
+hamid
+hamidi
+hamil
+hamilton
+hamish
+hamlen
+hamlett
+hamlin
+hamliton
+hammad
+hammel
+hammerli
+hammerme
+hammond
+hammonds
+hamner
+hamnet
+hamori
+hamoui
+hampel
+hampshir
+hampson
+hampton
+hamra
+hamsa
+hamzeh
+han
+han-chie
+han-co
+han-fei
+han-tak
+han-van
+hana
+hanan
+hanchieh
+hanco
+hancock
+handel
+handfort
+handley
+handoko
+handschy
+hane
+hanel
+haney
+hanfei
+hanford
+hang-ton
+hangbok
+hanger
+hangup
+hanh
+hanham
+hanhb
+hanhua
+hani
+haningto
+hanja
+hank
+hankins
+hanlan
+hanley
+hann
+hanna
+hannah
+hanneke
+hanneman
+hanni
+hannibal
+hannible
+hannie
+hannis
+hanns
+hannula
+hanny
+hanrahan
+hans
+hans-pet
+hansen
+hanser
+hansiain
+hanson
+hanspete
+hansquin
+hansraj
+hansson
+hantak
+hanzel
+hanzlice
+hao
+hao-nhie
+hao-yung
+haonhien
+haoyung
+happy
+harabedi
+harada
+haralamb
+harald
+harapiak
+harbert
+harbord
+harbottl
+harbour
+harcourt
+hardage
+hardcast
+hardee
+harderse
+hardi
+hardiman
+hardin
+harding
+hardison
+hardman
+hardwick
+hardy
+hardyal
+hardyck
+hardyman
+haren
+hareton
+hargadon
+hargreav
+hargrove
+hargrow
+hari
+harianto
+harihara
+hariman
+harinder
+harish
+harishan
+harker
+harkness
+harlan
+harland
+harlen
+harlene
+harles
+harless
+harley
+harli
+harlie
+harlin
+harm
+harman
+harmeet
+harmi
+harmon
+harmonia
+harmonie
+harmony
+harms
+harn
+harold
+haroon
+harootun
+haroun
+haroutou
+harp
+harpal
+harpe
+harper
+harpreet
+harrawoo
+harrell
+harri
+harrie
+harriet
+harriett
+harringt
+harriot
+harriott
+harris
+harrison
+harrod
+harron
+harry
+harsch
+harshad
+harsham
+harshava
+harshfie
+hart
+harte
+hartell
+harter
+hartford
+hartgrov
+hartin
+hartkopf
+hartland
+hartleb
+hartley
+hartling
+hartman
+hartmann
+hartmut
+hartney
+hartsell
+hartwell
+harty
+hartzel
+haruko
+harv
+harvard
+harvey
+harville
+harvison
+harwell
+harwerth
+harwilll
+harwood
+hasan
+hasbrouc
+hasegawa
+hasen
+hasham
+hasheem
+hashem
+hashemi
+hashim
+hashimot
+haskel
+haskell
+haskins
+haslach
+hasler
+haslett
+hasmukhb
+hasnain
+hassan
+hassenkl
+hassey
+hassnzah
+hassold
+haste
+hasted
+hastic
+hastie
+hastings
+hasty
+hata
+hatcher
+hatchett
+hately
+hatfield
+hathaway
+hatridge
+hattar
+hatten
+hatti
+hattie
+hattingh
+hatty
+hatz
+hatzenbi
+hau
+haubert
+hauck
+hauersto
+haufe
+hauge
+haughey
+haughwou
+haugrud
+haupt
+haurie
+hause
+hauser
+hautanen
+havelock
+haveman
+haven
+haverkam
+haverty
+havis
+hawes
+hawi
+hawk
+hawken
+hawker
+hawkes
+hawkin
+hawkins
+hawley
+hawryluk
+hawrysh
+hawryszk
+hawthorn
+hayden
+haydock
+haydon
+haydt
+hayes
+hayley
+haylock
+hayman
+haynes
+haynor
+hayward
+haywood
+hayyim
+haze
+hazel
+hazeldin
+hazell
+hazelrig
+hazelton
+hazem
+hazen
+hazenboo
+hazlett
+hdbright
+hdi
+he
+heald
+healey
+heall
+health-s
+healy
+heaney
+hearn
+hearnden
+hearst
+heath
+heather
+heaton
+hebbar
+hebe
+hebert
+heckbert
+heckman
+hector
+heda
+hedda
+heddell
+heddi
+heddie
+heddy
+hedi
+hedin
+hedke
+hedman
+hedrich
+hedrick
+hedvig
+hedvige
+hedwig
+hedwiga
+hedy
+hee
+heeralal
+heeten
+hefferna
+heffner
+hegarty
+hegelian
+hehn-sch
+heida
+heide
+heidebre
+heidepri
+heidi
+heidie
+heighton
+heike
+heikkila
+heile
+heilig
+heiliger
+heilsnis
+hein
+heindric
+heinen
+heinjus
+heinke
+heino
+heinonen
+heinrich
+heinrick
+heinrik
+heinz
+heinzing
+heinzman
+heisler
+heitmann
+hekel
+heki
+helaina
+helaine
+heldenbr
+heleen
+helem
+helen
+helen-el
+helena
+helene
+heleneli
+helenka
+helfrick
+helga
+helge
+helgelan
+helio
+helkaa
+hella
+hellberg
+hellen
+heller
+hellerst
+helli
+hellmut
+helluva
+hellyer
+helma
+helms
+helmut
+helmuth
+helmy
+heloise
+helpb
+helpline
+helsa
+helseth
+helstab
+helton
+helwege
+helyn
+hemant
+hembrick
+hemens-d
+hemme
+hemmerle
+hemphill
+hempinst
+hempstea
+henao
+hench
+henderso
+hendra
+hendren
+hendrick
+hendrik
+hendrika
+hendriks
+hendry
+hendryck
+hendy
+henein
+heng
+hengameh
+hengda
+hengevel
+hengl
+hengst
+henk
+henk smi
+henka
+henley
+henline
+henneber
+hennebur
+hennelly
+hennessy
+hennie
+henninge
+hennon
+hennriet
+henny
+henri
+henrie
+henrieta
+henriett
+henrik
+henrika
+henrikse
+henry
+henryett
+hensen
+henshaw
+hensley
+henson
+henstock
+henthorn
+hepburn
+hephziba
+heping
+heppell
+heppes
+hera
+herak
+herb
+herbel
+herberge
+herbers
+herbert
+herbie
+herby
+herc
+hercule
+hercules
+herculie
+here's t
+heredia
+heribert
+hering
+herlihy
+herling
+herm
+hermack
+herman
+hermann
+hermann-
+hermanns
+hermes
+hermia
+hermie
+hermien
+hermina
+hermine
+herminia
+hermione
+hermon
+hermy
+hernan
+hernande
+hernando
+herndon
+hernek
+herner
+herng-je
+herngjen
+hernon
+hernzlia
+herod
+herold
+heroux
+herr
+herrage
+herralio
+herre
+herren
+herrera
+herrick
+herring
+herringt
+herriott
+herrmann
+herron
+herronal
+herryjan
+hersch
+herschel
+herscovi
+hersee
+hersh
+hershber
+hershel
+herskovi
+herta
+hertha
+hertler
+hertzog
+herve
+hervey
+herzig
+hesche
+hesham
+hesk
+hesketh
+heslop
+hess
+hesse
+hester
+hesther
+hestia
+hetti
+hettie
+hetty
+hetzel
+heung
+heunis
+heurich
+hew
+hewage
+hewe
+hewer
+hewet
+hewett
+hewie
+hewitt
+hewlet
+hews
+heybroek
+heydon
+heyer
+heynen
+heys
+heystrae
+heyward
+heywood
+hi
+hiawatha
+hibberd
+hibler
+hichem
+hickerso
+hickey
+hickin
+hickman
+hickman-
+hickox
+hicks
+hidaka
+hideki
+hideo
+hiebsch
+hien
+hienz
+hieronym
+hiers
+higginbo
+higgins
+higham
+highet
+highsmit
+hight
+hightowe
+higuchi
+hijab
+hikita
+hil
+hilaire
+hilario
+hilarius
+hilary
+hilberma
+hilbert
+hilbig
+hilda
+hildagar
+hilde
+hildebra
+hildegaa
+hildegar
+hilder
+hildum
+hildy
+hilfinge
+hill
+hilla
+hillard
+hillary
+hillel
+hiller
+hillery
+hilliard
+hilliary
+hillidge
+hillie
+hillier
+hillring
+hills
+hillson
+hilly
+hillyer
+hilmi
+hils
+hilton
+hiltz
+hilwa
+himanshu
+himawan
+himraj
+hin-wai
+hincher
+hinchey
+hinchley
+hinda
+hindle
+hinds
+hindson
+hine
+hiner
+hines
+hing
+hing-fai
+hingtgen
+hink
+hinkel
+hinkins
+hinkle
+hinojosa
+hinsdale
+hinshaw
+hinson
+hinton
+hinton-s
+hinz
+hinze
+hipp
+hippert
+hipson
+hirakawa
+hiraki
+hiram
+hirayama
+hiren
+hirofumi
+hirohama
+hiroki
+hiroko
+hiromi
+hiromu
+hironaga
+hirooki
+hirose
+hiroshi
+hirotaka
+hiroto
+hirotosh
+hiroyuki
+hirsch
+hirshman
+hisaki
+hiscoe
+hiscott
+hisham
+hishchak
+hisko
+hislop
+hitchcoc
+hitching
+hite
+hitler
+hitoshi
+hiusser
+hively
+hixon
+hixson
+hjartars
+hjorth
+hlady
+hlausche
+hlinka
+hm
+hnidek
+ho
+ho-mu
+hoa
+hoa-van
+hoadley
+hoag
+hoagland
+hoang
+hoare
+hobard
+hobart
+hobbs
+hoben
+hobesh
+hobey
+hobgood
+hobie
+hobin
+hoch
+hochbaum
+hochberg
+hock
+hockaday
+hockster
+hoctor
+hocutt
+hodder
+hoddinot
+hodedo
+hodge
+hodgens
+hodges
+hodgins
+hodgkin
+hodgkiss
+hodgson
+hoebart
+hoeg
+hoehling
+hoehn
+hoek
+hoeksma
+hoekstra
+hoeler
+hoelsche
+hoequist
+hoes
+hoferek
+hoffelt
+hoffman
+hoffmann
+hoffmeis
+hoffpaui
+hoffsted
+hofmann
+hofmeist
+hofstede
+hofstett
+hogan
+hogeboom
+hogg
+hoggan
+hoggatt
+hogue
+hohmeyer
+hohn
+hoi-kin
+hojjat
+holberry
+holbrook
+holcomb
+holcombe
+holcroft
+hold of
+holdaway
+holden
+holder
+holdren
+holesing
+holinski
+hollack
+holland
+hollande
+hollands
+hollbach
+hollen
+hollenba
+hollenbe
+hollenst
+holleran
+holley
+holli
+holliday
+hollie
+hollings
+hollingt
+hollingw
+hollis
+holliste
+holloway
+hollran
+holly
+holly-an
+hollyann
+holm
+holman
+holmans
+holmer
+holmes
+holmquis
+holness
+holsclaw
+holst
+holt
+holterma
+holthaus
+holton
+holtz
+holtze
+holvey
+holy
+holz
+hom
+homa
+homan
+homayoon
+homayoun
+homer
+homere
+homerus
+homonick
+homu
+hon
+hon-kong
+hon-son
+honbarri
+honda
+honey
+honeycut
+hong
+hong-che
+hong-yuh
+hongchen
+hongtao
+hongyuh
+hongzhi
+honkakan
+honmun
+honor
+honoria
+honson
+honzo
+hoog
+hooi-lee
+hooker
+hooks
+hoon
+hooper
+hoorman
+hooshang
+hooton
+hoover
+hopcroft
+hope
+hopf
+hopkin
+hopkins
+hopkinso
+hopley
+hoppenwo
+hopper
+hopson
+hoptoad
+hoque
+hor
+hor-lam
+horace
+horacio
+horak
+horalek
+horatia
+horatio
+horatius
+horban
+hord
+hore
+horemans
+horgan
+horianop
+horkoff
+hormoz
+hornacek
+hornbeck
+hornbeek
+hornburg
+horne
+horng
+horngdar
+horning
+hornung
+horowitz
+horsfiel
+horst
+horstman
+hort
+horten
+hortense
+hortensi
+horton
+horus
+horvath
+horwitz
+horwood
+hosang
+hosanna
+hoscheid
+hoseok
+hoshi
+hosier
+hoskin
+hosking
+hoskins
+hosneld
+hossein
+hosseini
+hot
+hotline
+hotlist
+hotson
+hotta
+houde
+houdini
+houghton
+houk
+houle
+houn
+hounsell
+houssam
+houssein
+houston
+hoverman
+hovey
+hovinga
+how
+how-kee
+howald
+howard
+howarth
+howat
+howden
+howe
+howe-pat
+howekamp
+howell
+howerton
+howes
+howey
+howie
+howlett
+howley
+howorth
+howse
+hoxie
+hoy
+hoyer
+hoyt
+hpldt
+hpone
+hq
+hqs
+hr
+hrdata
+hrenyk
+hrinfo
+hrubik
+hruby
+hrushowy
+hruska
+hrvatin
+hsi
+hsi-ho
+hsiang
+hsiao
+hsiao-ch
+hsiao-we
+hsiao-yu
+hsiaochi
+hsiaosu
+hsiaowei
+hsiaoyun
+hsieh
+hsien
+hsiho
+hsin
+hsin-li
+hsin-shi
+hsing
+hsing-ju
+hsinli
+hsiung
+hsketh
+hspice
+hsu
+hsuan
+hsueh
+htd
+hu
+hua
+hua-yuan
+huai
+huan
+huan-yu
+huanbo
+huang
+huasheng
+huashi
+huay-yon
+huayuan
+huayyong
+hubal
+hubbard
+hubbell
+hube
+huber
+huberman
+hubers
+hubert
+huberto
+hubey
+hubie
+hubley
+huboi
+hudai
+hudak
+huddlest
+hudecek
+hudepohl
+hudgins
+hudson
+hudy
+hudyma
+huel-she
+huelshen
+huelsman
+hueneman
+huerta
+huestis
+huether
+huetu
+huey
+huey-kuo
+hueykuo
+hufana
+huffman
+hugel
+huggins
+hugh
+hughes
+hughes-c
+hughey
+hughie
+hughson
+hugibert
+hugo
+hugues
+huguette
+huguin
+huhn
+hui
+hui-chau
+hui-neng
+huib
+huichaun
+huifang
+huineng
+huiqi
+huitt
+huizhao
+hukam
+hulda
+hulen
+hulett
+huligang
+hulk
+hulme
+hulst
+hultgren
+hulversh
+hulze
+humbert
+humberto
+humboldt
+hume
+humenik
+humenuk
+humes
+humfrey
+humfrid
+humfried
+humiston
+hummel
+hummerst
+humphrey
+humphrie
+hundries
+huneault
+hunfredo
+hung
+hung-kan
+hung-win
+hungkai
+hungkang
+hungle
+hungquoc
+hungwing
+hunike
+hunnicut
+hunsberg
+hunsucke
+hunt
+hunter
+huntingt
+huntlee
+huntley
+huo-yen
+huong
+huor
+huot
+huoyen
+hupe
+huppert
+hurd
+huret
+hurf
+hurlee
+hurleigh
+hurley
+hurman
+hurst
+hurtado
+hurteau
+hurtubis
+hurwitz
+husain
+husam
+husarewy
+husein
+hussain
+hussam
+hussein
+husser
+hussey
+hussien
+hustin
+huston
+huszar
+huszarik
+hutchers
+hutchin
+hutching
+hutchins
+hutchiso
+hutson
+hutt
+hutter
+hutton
+huub
+huuliem
+huxley
+huy
+huyen
+huynh
+huyvan
+huzur
+hvezda
+hwa
+hwajin
+hwan
+hwang
+hwayong
+hwei-lin
+hy
+hyacinth
+hyatt
+hydar
+hyde
+hyen
+hyer
+hyerle
+hyers
+hyjek
+hylaride
+hyman
+hymie
+hynda
+hyndman
+hynek
+hyong-ju
+hyongjun
+hyonil
+hyoungju
+hyperspa
+hyrne
+hysler
+hyslop
+hyte
+hyun
+hyunchul
+hyung
+i-chao
+i-ching
+iacoviel
+iacovo
+iago
+iain
+ian
+ianace
+iannotti
+iannozzi
+iantaffi
+ianthe
+iaquinto
+iarocci
+ibach
+ibarra
+ibbie
+ibby
+ibntas
+ibrahim
+ibsen
+iburg
+ic
+iceman
+ichabod
+ichao
+iching
+ichiro
+ichizen
+icy
+icylyn
+id
+ida
+idalia
+idalina
+idaline
+ide
+idell
+idelle
+idette
+idris
+idt
+idus
+ie
+iem
+ientile
+iezzi
+if anyon
+ifact
+ifill
+iftekhar
+ifti
+igarashi
+iggie
+igglesde
+iggy
+ignace
+ignacio
+ignacius
+ignatius
+ignaz
+ignazio
+igor
+iguchi
+igusa
+ihnat
+ihor
+ijaz
+ijff
+ike
+ikeda
+ikey
+ikotin
+ikram
+ikuo
+ilaire
+ilan
+ilana
+ilario
+ilda
+ileana
+ileane
+ilene
+ilic
+ilise
+ilk
+ilka
+illa
+illamchi
+illidge
+illinois
+ilmberge
+ilona
+ilovich
+ilowski
+ilsa
+ilse
+ilsup
+ilwhan
+ilya
+ilyas
+ilyess
+ilysa
+ilyse
+ilyssa
+ima
+iman
+imbemba
+imelda
+imhof
+imi
+immanuel
+imming
+imogen
+imogene
+imojean
+impaglia
+imran
+imre
+imtaz
+imtiaz
+in-beum
+in-cheol
+in-hwan
+ina
+inam
+inamulla
+inan
+inanc
+inbeum
+ince
+incheol
+incze
+ind
+indahl
+indar
+independ
+inderjit
+indiana
+indianaj
+indira
+indra
+indy
+ineke
+ines
+inesita
+inessa
+inez
+info
+info-man
+infocent
+ing
+inga
+ingaberg
+ingaborg
+ingamar
+ingar
+inge
+ingeberg
+ingeborg
+ingelber
+ingell
+ingemar
+inger
+ingersol
+ingie
+ingle
+ingleber
+ingles
+ingling
+inglis
+ingmar
+ingo
+ingra
+ingram
+ingres
+ingrey
+ingrid
+ingrim
+ingunna
+ingvar
+inho
+inhulsen
+inhwan
+inigo
+inm
+inman
+inna
+innchyn
+innes
+inness
+innis
+inniss
+innocent
+inoue
+inquire
+inrig
+inscoe
+insp
+inspecti
+instal
+installe
+integ
+integrat
+intemann
+interact
+interfac
+intihar
+intplan
+intune
+inyoung
+ioan
+ioana
+ioannes
+ioannidi
+ioannis
+ioannou
+iocca
+iocntrl
+iola
+iolande
+iolanthe
+iona
+ione
+iorgo
+iorgos
+iormina
+iosep
+ioui
+ip
+ipadmin
+ipokrati
+ippolito
+iqbal
+ira
+iradj
+iraj
+irani
+irby
+irc
+ircbellc
+irccar
+ircinter
+ircmarke
+ircmer
+ircmtl
+ircstand
+irean
+ireland
+irena
+irene
+irfan
+irias
+iribarre
+irice
+irick
+irina
+iris
+irish
+irissou
+irita
+irma
+irv
+irvin
+irvine
+irving
+irwin
+irwinn
+is a cat
+isa
+isaac
+isaacs
+isaak
+isabeau
+isabel
+isabelit
+isabell
+isabella
+isabelle
+isac
+isacco
+isador
+isadora
+isadore
+isahella
+isaia
+isaiah
+isak
+isami
+isbister
+iseabal
+isenor
+isensee
+isert
+isfan
+ishak
+ishan
+ishee
+isherwoo
+ishii
+ishikida
+ishimoto
+isiahi
+isidor
+isidora
+isidore
+isidoro
+isidro
+isin
+isip
+isis
+iskandar
+iskender
+iskra
+isl
+islam
+isley
+ismael
+ismail
+isobel
+isoft
+isolde
+israel
+issa
+issam
+issi
+issiah
+issie
+issy
+itac
+itah
+italo
+italus
+itaru
+itas
+itaya
+itch
+iteam
+iteke
+ito
+its-eng
+iu
+iva
+ivan
+ivancevi
+ivancic
+ivanhoe
+ivanoff
+ivanyi
+ivar
+ive
+iver
+ivers
+iversen
+iverson
+ives
+ivett
+ivette
+ivey
+ivie
+ivo
+ivona
+ivonne
+ivor
+ivory
+ivy
+iwan
+iwanyk
+iwashita
+iwona
+iws
+iyad
+iyengar
+iyer
+iyun
+izaak
+izabel
+izak
+izbinsky
+izchak
+izique
+izora
+izumi
+izuru
+izzat
+izzo
+izzotti
+izzy
+j-franco
+jaakkola
+jaan
+jabbari
+jabez
+jabir
+jablonsk
+jabreen
+jacalyn
+jacek
+jacenta
+jachym
+jacinda
+jacinta
+jacintha
+jacinthe
+jack
+jackelyn
+jacki
+jackie
+jacklin
+jacklyn
+jackman
+jackquel
+jackson
+jacky
+jackye
+jaclin
+jaclyn
+jacob
+jacobo
+jacobs
+jacobsen
+jacobson
+jacque
+jacqueli
+jacquely
+jacquene
+jacques
+jacquett
+jacqui
+jacquie
+jacynth
+jacynthe
+jada
+jade
+jadwiga
+jae
+jae-koo
+jae-whan
+jaekoo
+jaenen
+jaewhang
+jaffer
+jag
+jagan
+jagat
+jagath
+jagatic
+jagdev
+jagdish
+jager
+jagernau
+jagjeet
+jagjit
+jagla
+jago
+jagodzin
+jagriti
+jags
+jahangir
+jahromi
+jai
+jaijeet
+jaikne
+jailyn
+jaime
+jaimie
+jaimin
+jain
+jaine
+jak
+jakab
+jakabffy
+jakb
+jake
+jakeman
+jaki
+jakie
+jakim
+jakob
+jakola
+jakstys
+jakubows
+jalaie
+jalal
+jalali
+jalaliza
+jalbert
+jalilvan
+jama
+jamaal
+jamal
+jamaly
+jaman
+jamel
+jamensky
+jamer
+james
+james_mi
+jamesett
+jameson
+jamesy
+jamey
+jami
+jamie
+jamieson
+jamil
+jamilah
+jamill
+jamima
+jamin
+jamison
+jammal
+jammie
+jammu
+jamnejad
+jamroz
+jamshed
+jamshid
+jamshidi
+jan
+jan-olof
+jan-robe
+jana
+janak
+janaki
+janaratn
+janaya
+janaye
+jancewic
+jancovic
+janczyn
+janda
+jande
+jandy
+jane
+janean
+janecka
+janeczka
+janeen
+janek
+janel
+janela
+janell
+janella
+janelle
+janene
+janenna
+janes
+janessa
+janet
+janeta
+janeth
+janetta
+janette
+janeva
+janey
+jang
+jang-hsu
+janghsue
+jani
+jania
+janice
+janick
+janie
+janifer
+janina
+janine
+janio
+janis
+janiszew
+janith
+janka
+janke
+jankowsk
+jann
+janna
+jannay
+jannel
+jannelle
+jannie
+janning
+janolof
+janos
+janot
+janovich
+janrober
+janseen
+jansen
+janson
+janssen
+jantz-le
+jantzi
+januario
+janusz
+jany
+jap
+japan
+japp
+jaquelin
+jaquelyn
+jaquenet
+jaques
+jaquith
+jarad
+jarboe
+jarchow
+jard
+jareb
+jared
+jarel
+jargon
+jarib
+jarid
+jarl
+jarlath
+jarmal
+jarman
+jarmo
+jarmoc
+jarmon
+jarmul
+jarnak
+jarrad
+jarred
+jarret
+jarrett
+jarrid
+jarrod
+jarvah
+jarvie
+jarvin
+jarvis
+jarzemsk
+jasbinde
+jase
+jasen
+jashvant
+jasmann
+jasmin
+jasmina
+jasmine
+jasny
+jason
+jasper
+jaspreet
+jasrotia
+jasti
+jastinde
+jasun
+jasver
+jaswal
+jatar
+jatin
+jatinder
+jau-min
+jau-yau
+jaumin
+jauvin
+jauyau
+java
+javad
+javallas
+javar
+javed
+javier
+javor
+jawad
+jawaid
+jawana
+jawanda
+jawor
+jaworski
+jaworsky
+jay
+jaya
+jayakuma
+jayamann
+jayant
+jayanta
+jayavant
+jaye
+jayendra
+jayesh
+jayjay
+jayme
+jaymee
+jaymie
+jayn
+jayne
+jaynell
+jaynie
+jayshree
+jayson
+jazanosk
+jazmin
+jcbach
+jcst
+jdavie
+jderek
+jean
+jean-ber
+jean-cla
+jean-den
+jean-fra
+jean-guy
+jean-jac
+jean-lou
+jean-luc
+jean-mar
+jean-mic
+jean-nor
+jean-pau
+jean-pie
+jean-rob
+jean-roc
+jean-yve
+jeana
+jeane
+jeanelle
+jeanes
+jeanette
+jeanhee
+jeanice
+jeanie
+jeanine
+jeanloui
+jeanna
+jeanne
+jeannett
+jeannie
+jeannine
+jeannot
+jeany
+jeavons
+jecho
+jed
+jedd
+jeddy
+jedediah
+jedidiah
+jedrysia
+jee
+jee-howe
+jeff
+jefferey
+jefferso
+jeffery
+jeffie
+jeffrey
+jeffreys
+jeffries
+jeffry
+jeffy
+jegland
+jehanna
+jehovah
+jehu
+jelen
+jelene
+jeleniew
+jelinek
+jelske
+jem
+jemczyk
+jemie
+jemima
+jemimah
+jemmie
+jemmy
+jen
+jen-chen
+jen-hua
+jena
+jenchen
+jenda
+jenelle
+jeng
+jenhua
+jeni
+jenica
+jeniece
+jenifer
+jeniffer
+jenilee
+jenine
+jenkins
+jenkinso
+jenn
+jenna
+jennee
+jenner
+jenness
+jennette
+jenni
+jennica
+jennie
+jennifer
+jennilee
+jennine
+jennings
+jenny
+jeno
+jens
+jensen
+jensenwo
+jenson
+jeong
+jephthah
+jepson
+jer-huan
+jerad
+jerald
+jeralee
+jeramey
+jeramie
+jere
+jereme
+jeremiah
+jeremias
+jeremie
+jeremy
+jerhuang
+jeri
+jermain
+jermaine
+jermayne
+jernigan
+jeroen
+jerome
+jeromy
+jeronimo
+jeroski
+jerreld
+jerri
+jerrie
+jerrilee
+jerrilyn
+jerrine
+jerrold
+jerrome
+jerry
+jerrylee
+jervis
+jerzy
+jeska
+jesper
+jess
+jessa
+jessalin
+jessalyn
+jessamin
+jessamyn
+jesse
+jessee
+jesselyn
+jessey
+jesshope
+jessi
+jessica
+jessie
+jessika
+jessup
+jessy
+jester
+jesty
+jesus
+jet
+jeter
+jeth
+jethro
+jeurene
+jew
+jewel
+jewell
+jewelle
+jewels
+jewett
+jey
+jeyarara
+jezioran
+jhingran
+ji
+ji-chuu
+jia
+jia-wen
+jiak-kwa
+jiakkwan
+jian
+jianchen
+jiang
+jianli
+jiann
+jiann-ya
+jiannyan
+jianou
+jianqi
+jianxing
+jianye
+jianyun
+jiawen
+jiayi
+jiayuan
+jichuu
+jie-yong
+jiejie
+jiethye
+jieyong
+jihad
+jihan
+jihyun
+jiin-shu
+jiinshuh
+jilann
+jilisa
+jill
+jillana
+jillane
+jillayne
+jilleen
+jillene
+jilli
+jillian
+jillie
+jilly
+jim
+jimenez
+jiming
+jiminy
+jimmie
+jimmy
+jims
+jimson
+jin
+jin-ho
+jin-nan
+jin-song
+jin-yuan
+jin-yun
+jinann
+jinchao
+jindal
+jing
+jing-ru
+jingbai
+jinglun
+jingru
+jinho
+jinhua
+jinlun
+jinn-kue
+jinnan
+jinnkuen
+jinny
+jinsheng
+jinsong
+jinsoo
+jinyuan
+jiri
+jirina
+jiro
+jisang
+jisheng
+jitendra
+jiuhuai
+jivan
+jiyuan
+jiyue
+jo
+jo ann
+jo-ann
+jo-anne
+jo-marie
+joachim
+joachimp
+joan
+joana
+joane
+joanie
+joann
+joanna
+joannah
+joanne
+joannes
+joannidi
+joannie
+joannis
+joao
+joaquin
+job
+jobe
+jobey
+jobi
+jobie
+jobina
+joby
+jobye
+jobyna
+jocelin
+joceline
+jocelyn
+jocelyne
+jochem
+jochen
+jock
+jocko
+jodee
+jodi
+jodie
+jodine
+jodoin
+jodoin-s
+jody
+joe
+joeann
+joel
+joela
+joelie
+joell
+joella
+joelle
+joellen
+joelly
+joellyn
+joelynn
+joeph
+joerg
+joeri
+joete
+joey
+joffe
+johan
+johan am
+johan ch
+johan se
+johanama
+johanchr
+johann
+johanna
+johannah
+johanne
+johannes
+johannse
+johanseb
+johansen
+johanson
+johathan
+john
+john-jr
+john-pau
+john-sr
+johna
+johnath
+johnatha
+johnatho
+johnette
+johni
+johnna
+johnni
+johnnie
+johnny
+johns
+johnsen
+johnson
+johnsson
+johnston
+johny
+joice
+joiner
+joji
+jojo
+joke
+jolanda
+jole
+jolee
+joleen
+jolene
+joletta
+joli
+jolicoeu
+jolie
+jolin
+joline
+jolitz
+joll
+jolliffe
+joly
+jolyn
+jolynn
+jon
+jonah
+jonas
+jonathan
+jonathon
+jonczak
+jone
+jonell
+jonelle
+jones
+jong
+jong-chi
+jong-woe
+jongchih
+jonghun
+jonghyuk
+jongsun
+jongwoei
+jongwoo
+joni
+jonie
+jonis
+jonkheer
+jonson
+jonthan
+joo
+joo-euin
+joo-geok
+joon
+joong
+jooran
+jooyul
+joplin
+jordain
+jordan
+jordana
+jordanna
+jordi
+jordon
+jorey
+jorgan
+jorge
+jorgense
+jori
+jorie
+joron
+jorrie
+jorry
+jory
+jos
+josanne
+joscelin
+jose
+josee
+josef
+josefa
+josefina
+joseito
+joselito
+joseph
+josepha
+josephin
+josephs
+josey
+josh
+joshi
+joshia
+joshua
+joshuah
+josi
+josiah
+josiane
+josias
+josie
+josine
+josip
+joslin
+joson
+josselyn
+jossine
+josy
+joubert
+joudrey
+jourdain
+jourdan
+jovo
+jowett
+joy
+joya
+joyan
+joyann
+joyce
+joycelin
+joydeep
+joye
+joyner
+joyous
+jozef
+jozsef
+jr
+jsandye
+jsbach
+juan
+juana
+juanita
+juarez
+jubainvi
+jubb
+jubenvil
+jubinvil
+juby
+jud
+judah
+judas
+judd
+jude
+judge
+judi
+judie
+judith
+juditha
+judithre
+judon
+judy
+judye
+judyresn
+juergen
+juers
+jugandi
+juh-shiu
+juha
+juhan
+juhshiun
+jui
+jui-fen
+juieta
+juifen
+juile
+jukka
+julayne
+jule
+julee
+jules
+juli
+julia
+julian
+juliana
+juliane
+juliann
+julianna
+julianne
+julianto
+julie
+julieann
+julien
+julienne
+juliet
+julieta
+julietta
+juliette
+julina
+juline
+julio
+julissa
+julita
+julius
+jun
+jun-li
+junaid
+june
+juneau
+juneho
+junette
+jung
+jung-hua
+junghua
+jungmeis
+juni
+junia
+junie
+junina
+junk
+junkie
+junkin
+junli
+junmeng
+junzo
+juozas
+jurafsky
+jurek
+jurevis
+jurewicz
+jurg
+jurgen
+jurgens
+jurgutis
+juri
+jurman
+juscesak
+juskevic
+jussi
+justen
+justin
+justina
+justine
+justinia
+justinn
+justino
+justis
+justo
+justus
+jusuf
+jutta
+jwahar
+jyh-dong
+jyh-doug
+jyhdong
+jyhdoug
+jyoti
+jyun-che
+jyunchen
+jyuo
+kaare
+kabe
+kabel
+kaboliza
+kabuli
+kac
+kacey
+kacie
+kacor
+kacsor
+kacy
+kaczmare
+kaczmars
+kaczynsk
+kadah
+kadamani
+kaden
+kadiyala
+kadlecik
+kaefer
+kaehler
+kaela
+kaete
+kagan
+kah-ming
+kahaleel
+kahan
+kahhale
+kahhan
+kahil
+kahkonen
+kahlil
+kahn
+kahneman
+kahnert
+kahtasia
+kai
+kai-bor
+kai-ming
+kai-wah
+kai-wai
+kaia
+kaibor
+kaiching
+kaid
+kaidanne
+kaigler
+kaila
+kaile
+kaileen
+kailey
+kain
+kaine
+kaiser
+kaitlin
+kaitlyn
+kaitlynn
+kaiwah
+kaiwen
+kaj
+kaja
+kajeejit
+kaji
+kakalina
+kaki
+kakou
+kaksonen
+kakuta
+kala
+kalab
+kalai
+kalaiche
+kalair
+kalappa
+kalash
+kale
+kaleb
+kalechst
+kaleena
+kales
+kaley
+kali
+kalie
+kalil
+kalila
+kalina
+kalinda
+kalindi
+kaliski
+kalitzku
+kalle
+kallewar
+kalli
+kallio
+kally
+kalman
+kalnitsk
+kalogera
+kalpak
+kalpit
+kalra
+kalsey
+kalt
+kalugdan
+kaluzny
+kalvin
+kalwa
+kalwarow
+kalyan
+kalyani
+kalyn
+kam
+kam-hung
+kam-suen
+kamal
+kaman
+kamas
+kambhamp
+kambiz
+kamboh
+kameko
+kamel
+kamerson
+kamhung
+kamie
+kamil
+kamila
+kamilah
+kamillah
+kaminsky
+kamiya
+kamiyama
+kamlesh
+kammerer
+kamminga
+kamol
+kamoun
+kamran
+kamyar
+kamyszek
+kan
+kan-hung
+kana
+kanagend
+kanani
+kanata
+kanchit
+kandace
+kandappa
+kandi
+kandra
+kandy
+kane
+kaneko
+kaneshir
+kang
+kang-gil
+kang-nin
+kang-yua
+kangelis
+kangkun
+kangning
+kanhung
+kania
+kanies
+kanika
+kannan
+kannel
+kanneman
+kanno
+kansara
+kant
+kanthan
+kantor
+kanu
+kanungo
+kanwalji
+kanwar
+kanya
+kao
+kaoru
+kaoud
+kapadia
+kapatou
+kapella
+kapil
+kaplan
+kapp
+kappos
+kaps
+kapsa
+kapsch
+kapuscin
+kara
+kara-lyn
+karaali
+karademi
+karalee
+karalynn
+karam
+karan
+karass
+karattup
+karchevs
+kardomat
+kardos
+kare
+karee
+kareem
+karel
+karels
+karen
+karena
+karhunie
+kari
+karia
+kariann
+karibian
+karie
+karil
+karilynn
+karim
+karin
+karina
+karine
+kariotta
+karisa
+karissa
+karita
+karkotsk
+karl
+karla
+karlan
+karlee
+karleen
+karlen
+karlene
+karlens
+karlette
+karlie
+karlik
+karlis
+karloff
+karlon
+karlotta
+karlotte
+karlson
+karly
+karlyn
+karmali
+karmen
+karmous-
+karn
+karna
+karnazes
+karney
+karol
+karola
+karole
+karolefs
+karolien
+karolina
+karoline
+karoly
+karon
+karp
+karr
+karrah
+karrie
+karry
+karsan
+karsner
+karsz
+kartik
+kartikey
+karunara
+karwowsk
+kary
+karyl
+karylin
+karyn
+kas
+kasbia
+kasbow
+kasdorf
+kasey
+kashani-
+kashef
+kashima
+kashul
+kasifa
+kaspar
+kasparia
+kasper
+kasprzak
+kass
+kassam
+kassandr
+kassem
+kassey
+kassi
+kassia
+kassie
+kassissi
+kast
+kastelbe
+kasten
+kastner
+kaston
+kasumovi
+kat
+kata
+katalin
+katarina
+kataryna
+katcher
+katchmar
+kate
+katee
+katerina
+katerine
+katey
+kath
+katha
+katharin
+katharyn
+kathe
+katherin
+katheryn
+kathi
+kathie
+kathleen
+kathlin
+kathnels
+kathreri
+kathrine
+kathryn
+kathryne
+kathy
+kathyb
+kathye
+kati
+katibian
+katie
+katina
+katine
+katinka
+katja
+katleen
+katlin
+kato
+katrin
+katrina
+katrine
+katrinka
+katsoura
+katsumi
+katsunor
+katti
+kattie
+katuscha
+katusha
+katy
+katya
+katz
+katzenel
+kaudel
+kauffeld
+kauffman
+kaufman
+kaufmann
+kaunas
+kaura
+kaus
+kausche
+kaushik
+kavaler
+kavanagh
+kavid
+kavis
+kawa
+kawabata
+kawaguch
+kawahara
+kawakami
+kawamura
+kawashim
+kawauchi
+kay
+kaya
+kayaliog
+kayar
+kaycee
+kaye
+kayla
+kayle
+kaylee
+kayley
+kaylil
+kaylyn
+kayne
+kaypour
+kayser
+kayvan
+kaz
+kazem
+kazimier
+kazmierc
+kazue
+kazuhiko
+kazuhiro
+kazuhito
+kazuko
+kazunori
+kazuo
+kazuyuki
+kea
+keala
+kealey
+kean
+keane
+kearney
+kearns
+keary
+keast
+keates
+keating
+keaton
+keats
+kebede
+kechichi
+keck
+kedah
+kedron
+kee
+keef
+keefe
+keefer
+keegstra
+keehan
+keehn
+keelan
+keelby
+keeler
+keeley
+keelia
+keels
+keely
+keen
+keenan
+keene
+keene-mo
+keep
+keer
+kees
+keever
+keffer
+kehler
+kehoe
+kehr
+kei
+keifer
+keighley
+keilholz
+keilty
+keim
+kein
+keinosuk
+keir
+keiser
+keish
+keisuke
+keitel
+keith
+kejing
+kelbe
+kelbee
+kelby
+kelcey
+kelci
+kelcie
+kelcy
+keldon
+kele
+kelemen
+kelessog
+kelila
+kelin
+kelkar
+kell
+kelland
+kellby
+kelleher
+kellen
+keller
+kellerma
+kellett
+kelley
+kelleye
+kelli
+kellia
+kellie
+kellina
+kellogg
+kellsie
+kellum
+kelly
+kelly-er
+kellyann
+kellyeri
+kelner
+kelsay
+kelsch
+kelsey
+kelsi
+kelso
+kelsy
+keltouma
+kelvin
+kelwin
+kely
+kem
+kemal
+kember
+kemish
+kemkeng
+kemme
+kemp
+kempf
+kempffer
+kempler
+kemppain
+kempski
+kempster
+ken
+kenda
+kendal
+kendall
+kendel
+kendell
+kendi
+kendra
+kendre
+kendrick
+kenedi
+kenik
+kenji
+kenkel
+kenlan
+kenmir
+kenn
+kenna
+kennaday
+kennan
+kennard
+kennedy
+kenneth
+kennett
+kenney
+kennie
+kennith
+kennon
+kenny
+kenol
+kenon
+kensinge
+kent
+kenta
+kentaro
+kenton
+kenworth
+kenyon
+keogh
+kepekci
+kepler
+ker
+kera
+kerby
+kerensa
+kerfoot
+keri
+keriakos
+keriann
+kerianne
+kerith
+kerk
+kerley
+kerlovic
+kermie
+kermit
+kermy
+kernahan
+kernan
+kerner
+kernodle
+kerns
+kerr
+kerri
+kerri-an
+kerrie
+kerrill
+kerrin
+kerry
+kerschen
+kerschne
+kerstin
+kerwin
+kerwinn
+keseris
+keshab
+keshav
+kesler
+kesley
+keslie
+kesling
+kessel
+kessia
+kessiah
+kessing
+kessler
+kessley
+kestelma
+kester
+kestutis
+ketan
+ketao
+ketcham
+ketcheso
+ketchum
+ketkar
+ketley
+ketsler
+ketterer
+ketti
+kettie
+kettles
+ketty
+keung
+keuning
+kev
+kevan
+keven
+keveny
+kevin
+kevina
+kevon
+kevyn
+keyes
+keynes
+keys
+keyvan
+khac
+khachatr
+khadbai
+khai
+khalaf
+khaled
+khalid
+khalil
+khalilza
+khamdy
+khanh
+khanna
+khanvali
+khariton
+khatib
+khatod
+khatri
+khawar
+khedkar
+khesin
+khezri
+khieu
+khim
+khimasia
+kho
+khoa
+khodosh
+khoinguy
+khon
+khorami
+khorrama
+khosla
+khosravi
+khosro
+khosrow
+khouderc
+khoury
+khouzam
+khue
+khueh-ho
+khuehhoc
+khuon
+khurana
+khurshid
+khyra
+ki
+kiah
+kial
+kiala
+kiam
+kian
+kiang
+kibler
+kidd
+kiebel
+kiecksee
+kiefer
+kiel
+kiele
+kielstra
+kiely
+kiem
+kien
+kien-ngh
+kienan
+kiennghi
+kiens
+kieran
+kiernan
+kieron
+kiersten
+kiet
+kieunga
+kiger
+kigyos
+kihyen
+kijin
+kikelia
+kiki
+kikki
+kiko
+kikuchi
+kikuta
+kilbank
+kilburn
+kilby
+kilcoin
+kilcoyne
+kile
+kiley
+kilgore
+kilian
+killam
+killeen
+killen
+killer
+killian
+killie
+killy
+kilner
+kilpatri
+kilsaas
+kilzer
+kim
+kim-elee
+kim-minh
+kim-stac
+kim-tram
+kimball
+kimbarov
+kimbell
+kimberle
+kimberli
+kimberly
+kimble
+kimbo
+kimbra
+kimbrell
+kimbroug
+kimeleen
+kimi
+kimihiko
+kimiko
+kimio
+kimler
+kimm
+kimma
+kimme
+kimmett
+kimmi
+kimmie
+kimmo
+kimmy
+kimoto
+kimstace
+kimura
+kin
+kin-wai
+kin-yee
+kinahan
+kinamon
+kincaid
+kinch
+kindel
+kindem
+kindra
+king
+king-hau
+kingaby
+kingan
+kingdon
+kingrey
+kingsbur
+kingshot
+kingslan
+kingsley
+kingsly
+kingston
+kingzett
+kinh
+kinley
+kinman
+kinna
+kinnaird
+kinney
+kinnibur
+kinnie
+kinny
+kinos
+kinoshit
+kinrys
+kinsella
+kinsey
+kinsley
+kinsman
+kinson
+kinstley
+kinstry
+kip
+kipling
+kipnis
+kipp
+kippar
+kipper
+kippie
+kippy
+kira
+kirady
+kirbee
+kirbie
+kirby
+kirchner
+kirchoff
+kirfman
+kiri
+kirit
+kirk
+kirkby
+kirkenda
+kirkham
+kirkland
+kirkley
+kirkpatr
+kirkwood
+kirley
+kirn
+kirouac
+kirsi
+kirsten
+kirsteni
+kirsti
+kirstie
+kirstin
+kirstyn
+kirt
+kirtikum
+kish
+kishi
+kishor
+kishore
+kissee
+kissiah
+kissie
+kistner
+kit
+kita
+kitajima
+kitrick
+kitson
+kitt
+kitti
+kittie
+kittinge
+kitty
+kitzmill
+kivell
+kiwon
+kiyohara
+kiyoharu
+kiyoon
+kizzee
+kizzie
+kjeld
+kjell
+klaas
+klaassen
+klammer
+klamner
+klapper
+klapphol
+klara
+klarika
+klarrisa
+klashins
+klasky
+klassen
+klatchko
+klaudia
+klaudiny
+klaudt
+klaus
+klavkaln
+klazien
+klazina
+klebsch
+klein
+klemens
+klement
+kleon
+klepping
+kletchko
+klett
+kleynenb
+klier
+klimas
+kliment
+klimon
+kline
+kling
+klingspo
+klink
+klod
+klodt
+klosterm
+kloth
+klotz
+klowak
+klug
+kluger
+kluke
+klutts
+kmem
+knapp
+knappe
+knapper
+knapton
+knecht
+kneedler
+kneese
+kneeshaw
+kneisel
+knes-max
+kness
+knickerb
+knieps
+knighten
+knighton
+knio
+knipe
+knitl
+knittel
+knobeloc
+knobloch
+knorp
+knorr
+knouse
+knowles
+knox
+knudsen
+knut
+knute
+ko
+ko-yang
+koa
+koang
+koay
+kobayash
+kobeski
+kobiersk
+koblitz
+kobreek
+koch
+kochansk
+kochis
+kodmur
+kodnar
+kodsi
+kody
+koelbl
+koeller
+koellner
+koeman
+koen
+koenraad
+koens
+koerner
+kogan
+kogelnik
+kohalmi
+kohalmi-
+kohl
+kohler
+kohm
+kohn
+kohnhors
+kohut
+koichi
+koiste
+koji
+kok
+kok-khia
+kokkat
+koko
+kokoska
+kokosopo
+kolahi
+kolappa
+kolavenn
+kolb
+kolbe
+koldinge
+kolek
+kolenda
+kolesnik
+koleyni
+kolk
+kolkka
+kollen
+koller
+kollman
+kollmorg
+kolodiej
+kolodzie
+kolos
+kolovson
+kolski
+kolton
+koman
+komaromi
+komatsu
+komenda
+komorows
+konarski
+konda
+kondagun
+konforti
+kong
+kong-que
+koning
+konno
+konomis
+konrad
+konradi
+konstan
+konstanc
+konstant
+konstanz
+koo
+koohgoli
+koohi
+koolstra
+koolwine
+koonce
+koontz
+kooyoung
+kopala
+kopell
+kopfman
+kopke
+koprulu
+kora
+koral
+koralle
+koran @
+koray
+korbe
+korbel
+korda
+kordik
+kordon
+kordula
+kore
+korea
+korean
+korek
+korella
+koren
+koressa
+korest
+korey
+korf
+kori
+korie
+korn
+kornachu
+kornegay
+korney
+kornitze
+korpela
+korrie
+korry
+kort
+kortekaa
+kortje
+kory
+kos
+kosarski
+kosasih
+kosiorsk
+kositpai
+koskie
+koskinen
+koslowsk
+kosman
+kosnaski
+kosowan
+koss
+kostas
+kosten
+koster
+kostowsk
+kosturik
+kostyniu
+kot
+kotamart
+kotaro
+kotler
+kotval
+kotyk
+kou
+kou-yuan
+kouba
+kouhi
+kouichir
+kouidis
+kouji
+kouyuan
+kovac
+kovacs
+koval
+kovarik
+kovats
+koverzin
+kowal
+kowalcze
+kowalesk
+kowalkow
+kowallec
+kowalski
+kowalsky
+koyang
+kozak
+kozelj
+koziol
+kozlowsk
+kozsukan
+kozuch
+kozyra
+kpodzo
+krabicka
+kraehenb
+krajacic
+krajesky
+krakowet
+kramar
+kramer
+kranenbu
+krater
+kratz
+krauel
+kraus
+krausbar
+krause
+krautle
+krawchuk
+krawec
+kreiger
+kreimer
+krenn
+krenos
+kresl
+kretsch
+krick
+kridle
+krieg
+kriegler
+krienke
+krier
+kriko
+krikoria
+krinda
+kring
+kris
+krisa
+krisha
+krishan
+krishin
+krishink
+krishna
+krishnah
+krishnam
+krishnan
+krishnas
+krispin
+krissie
+krissy
+krista
+kristal
+kristan
+kriste
+kristel
+kristen
+kristi
+kristian
+kristie
+kristien
+kristin
+kristina
+kristine
+kristjan
+kristo
+kristofe
+kristoff
+kristofo
+kriston
+kristoph
+kristos
+kristy
+kristyn
+kriton
+krivossi
+kriz
+krodel
+kroeger
+krogh
+krol
+kroman
+kromer
+krone
+krotish
+krousgri
+krowlek
+krozser
+krten
+krueger
+krug
+kruger
+krull
+krummell
+krumwied
+kruse
+kruuseme
+kruziak
+krym
+krysia
+kryski
+krysko
+krysta
+krystal
+krystall
+krystle
+krystn
+krystyna
+krzyszto
+ktusn
+ku
+kuan
+kuang
+kuang-ts
+kubash
+kube
+kubik
+kubitsch
+kuchelme
+kuchinsk
+kuchta
+kucirek
+kuczynsk
+kudas
+kudrewat
+kue
+kuechler
+kuehn
+kuehne
+kuhfus
+kuhlkamp
+kuhn
+kuhns
+kui
+kui-soon
+kuivinen
+kujanpaa
+kulachan
+kuldip
+kulhy
+kulik
+kulikows
+kulinski
+kulkarni
+kulman
+kum
+kum-meng
+kumagai
+kumamoto
+kumar
+kumares
+kumi
+kummer
+kun
+kun-ming
+kundanma
+kundel
+kundert
+kunecke
+kung
+kung-chi
+kungchia
+kunie
+kunihiko
+kunitaka
+kuniyasu
+kunjal
+kunkel
+kunming
+kuntova
+kunz
+kunze
+kuo
+kuo-chua
+kuo-feng
+kuo-lian
+kuochuan
+kuofeng
+kuoliang
+kupe
+kupfer
+kupferma
+kupfersc
+kupidy
+kupitz
+kuracina
+kurash
+kurauchi
+kurczak
+kurdas
+kurdziel
+kure
+kureshy
+kurian
+kurio
+kurita
+kurniawa
+kurolapn
+kurose
+kurowski
+kursell
+kurt
+kurth
+kurtis
+kurtz
+kuruppil
+kuryliak
+kurylyk
+kus
+kusan
+kushan
+kushner
+kushnir
+kushwaha
+kushwind
+kusmider
+kusum
+kusumaka
+kuswara
+kusyk
+kutac
+kutch
+kutger
+kutschke
+kutten
+kuykenda
+kuzbary
+kuzemka
+kuzyk
+kuzz
+kvochak
+kwa
+kwak
+kwan
+kwang
+kwang-ch
+kwang-lu
+kwangchi
+kwangchu
+kwanglu
+kwangsoo
+kwant
+kwast
+kwee
+kwei
+kwei-san
+kwiatkow
+kwing
+kwissa
+kwock
+kwok
+kwok-cho
+kwok-kin
+kwok-lan
+kwok-san
+kwok-wa
+kwokchoi
+kwokkin
+kwoksang
+kwong
+ky
+kydd
+kye-hong
+kyehong
+kyeong
+kyla
+kyle
+kylen
+kyler
+kylie
+kylila
+kylo
+kylynn
+kym
+kynthia
+kyoko
+kyomun
+kyoon
+kyoung
+kyrie
+kyrstin
+kyu
+kyu-sung
+kyung
+kyungchu
+kyungyoo
+kyusung
+kyzer
+l'anglai
+l'ecuyer
+l'heureu
+l;urette
+la
+la verne
+laale
+lab
+laba
+labarge
+labauve
+labelle
+labenek
+laberge
+labfive
+labiche
+labonte
+labossie
+labrador
+labranch
+labrie
+labrinos
+labuhn
+lac
+lacasse
+lacee
+lacelle
+lacey
+lachambr
+lachance
+lachine
+lachowsk
+lachu
+lacie
+lackenba
+lackie
+lackmann
+lacombe
+lacosse
+lacoste
+lacroix
+lacy
+ladan
+ladasky
+ladd
+ladean
+ladell
+ladet
+ladonna
+ladouceu
+ladva
+ladymon
+laetitia
+lafarge
+lafargue
+lafata
+lafayett
+laferrie
+lafever
+lafferty
+laflamme
+lafleur
+lafontai
+laforge
+laframbo
+lafrance
+lagace
+lagache
+lagarde
+lagrande
+lagrange
+lahaie
+lahaye
+lahey
+lahlum
+lahteenm
+lai
+laidlaw
+laila
+laina
+laine
+lainesse
+lainey
+laing
+laird
+laitinen
+lajzerow
+laker
+lakhani
+lakhian
+lakier
+lakins
+lakoff
+lakshan
+lakshmi
+lakshmin
+lalani
+lali
+lalibert
+lalit
+lalitha
+lalka
+lally
+lalo
+lalonde
+lalu
+lamar
+lamarche
+lamarque
+lamarre
+lambert
+lambregt
+lamedica
+lamers
+lamey
+lamia
+lamirand
+lamm
+lammond
+lamond
+lamonde
+lamont
+lamontag
+lamoreux
+lamothe
+lamotte
+lamouche
+lamoureu
+lampe
+lampert
+lamphier
+lampman
+lamport
+lamy
+lan
+lana
+lanae
+lanava
+lancaste
+lance
+lancelot
+lanctot
+land
+landaver
+landay
+lande
+lander
+landers
+landis
+landman
+landon
+landriau
+landry
+lane
+lanette
+laney
+lang
+langdon
+lange
+langelie
+langenbe
+langer
+langett
+langevin
+langford
+langlais
+langley
+langlois
+langner
+langsdon
+langstaf
+langston
+langton
+lani
+lanie
+laniel
+lanier
+lanita
+lankford
+lanna
+lannan
+lanni
+lannie
+lanny
+lanoe
+lanoszka
+lanoue
+lanouett
+lans
+lansuppo
+lanteign
+lanthier
+lantos
+lantto
+lantz
+lanunix
+lanwan
+lanz
+lanzkron
+lao
+lap
+lapchak
+lapierre
+lapkin
+laplace
+laplante
+lapointe
+laporte
+lapostol
+lappan
+laprade
+lapre
+laprise
+lapsley
+laquinta
+lar
+lara
+larabie
+laraia
+laraine
+larche
+lareine
+larese
+lari
+larimer
+larin
+larina
+larine
+larisa
+larissa
+larivier
+lark
+larkin
+larkins
+larmour
+larn
+larner
+laroche
+larock
+larocque
+larose
+larribea
+larrigan
+larry
+lars
+larsen
+larson
+larstone
+larue
+laruffa
+larus
+larwill
+lary
+larysa
+laryssa
+las
+lasch
+laschuk
+laser
+laserjet
+lash
+lashansk
+lasher
+lashmit
+lashonda
+lask
+laskaris
+laskin
+laslo
+lasserre
+lassig
+lassiter
+lasson
+lassonde
+laster
+latashia
+latchfor
+latella
+laten
+latessa
+latha
+lathangu
+lathrop
+latia
+latif
+latin
+latisha
+latonia
+latonya
+latorre
+latour
+latreill
+latrena
+latrina
+lattanzi
+latulipp
+lau
+laubenhe
+lauderda
+laufer
+laugher
+laughlin
+laughrid
+laughton
+launce
+laura
+lauraine
+laural
+lauralee
+lauramae
+laure
+laureano
+lauree
+laureen
+laurel
+laurella
+lauren
+laurena
+laurence
+laurene
+laurens
+laurent
+lauretta
+laurette
+lauri
+lauria
+lauriann
+lauriaul
+laurice
+laurich
+laurie
+laurier
+laurilyn
+laurin
+laurine
+lauris
+lauristo
+lauritz
+laurna
+lauro
+laursen
+lauruhn
+laury
+lauryn
+lauson
+lauten
+lauther
+laux
+lauze
+lauzon
+lavagno
+lavallee
+lavar
+lavarnwa
+lavecchi
+laveda
+lavelle
+lavena
+lavergne
+laverna
+laverne
+lavers
+laverty
+lavictoi
+lavictor
+lavigne
+laville
+lavina
+lavinia
+lavinie
+laviolet
+lavoie
+lavonda
+lavorata
+law
+lawbaugh
+lawler
+lawless
+lawlis
+lawlor
+lawrence
+lawrie
+lawry
+laws
+lawson
+lawther
+lawton
+lay
+layanand
+layer
+layla
+layne
+layney
+layton
+laz
+lazar
+lazare
+lazaro
+lazarou
+lazarowi
+lazarus
+lazer
+lazlo
+lazure
+lazzara
+lcarrol
+le
+lea
+leader
+leads
+leafloor
+leah
+leahy
+leander
+leandra
+leang
+leann
+leanna
+leanne
+leanor
+leanora
+leaphear
+leary
+leatham
+leathers
+leaton
+leatrice
+leavell
+leaver
+leavitt
+lebaron
+lebars
+lebbie
+lebeau
+lebel
+leblanc
+leblond
+lebo
+lebon
+lecandro
+lecien
+leckie
+leclair
+leclaire
+leclerc
+lecompte
+lecours
+lecouteu
+leda
+ledamun
+leddy
+leder
+lederman
+ledet
+ledford
+ledinh
+ledou
+ledoux
+ledu
+leduc
+ledwell
+lee
+lee-anne
+leeann
+leeanne
+leecia
+leela
+leelah
+leeland
+leena
+leendert
+leenher
+leesa
+leese
+leeson
+leeuwen
+lefebvre
+lefevre
+leffler
+leftwich
+lefty
+legeny
+leger
+legg
+leggett
+legolas
+legra
+legrandv
+legris
+legros
+legrove
+legrow
+legs
+leguen
+lehar
+lehman
+lehmann
+lehrbaum
+lehtinen
+lehtovaa
+lei-see
+leia
+leiba
+leibich
+leibovit
+leibowit
+leiceste
+leicht
+leidenfr
+leiding
+leif
+leigh
+leigha
+leighann
+leighton
+leiker
+leil
+leila
+leilah
+leima
+lein
+leinen
+leisa
+leisha
+leistico
+leita
+leitch
+leite
+leith
+leitman
+leitner
+leitrick
+leiwe
+lek
+lela
+lelah
+leland
+lelia
+lem
+lemaire
+lemar
+lemay
+lemieux
+lemky
+lemley
+lemmie
+lemmy
+lemuel
+lemyre
+len
+lena
+lenard
+lenathen
+lenci
+lendon
+lenee
+lenee'
+lenehan
+lenelle
+lenette
+leney
+lengel
+lenhard
+leni
+lenin
+lenior
+lenir
+lenka
+lenna
+lennard
+lennart
+lennie
+lennig
+lenny
+leno
+lenora
+lenore
+lenox
+lentz
+leny
+lenz
+lenzi
+leo
+leo-miza
+leocadio
+leodora
+leoine
+leola
+leoline
+leon
+leona
+leonanie
+leonard
+leonardo
+leonas
+leone
+leonelle
+leonerd
+leong
+leonhard
+leonid
+leonida
+leonidas
+leonie
+leonor
+leonora
+leonore
+leontine
+leontyne
+leopold
+leora
+leoutsar
+leow
+lepage
+lepine
+lepore
+leppert
+lepreau
+lerch
+leres
+leroi
+leroux
+leroy
+les
+lesa
+lesco
+lescot
+leshia
+leshowit
+lesia
+lesley
+lesli
+leslie
+lesly
+lesmeris
+lesniak
+lesourd
+lesperan
+lessard
+lessin
+lester
+lesway
+lesya
+leta
+letarte
+letchwor
+letendre
+leth
+letha
+lethbrid
+lethebin
+lethia
+leticia
+letisha
+letitia
+letizia
+letourne
+letsome
+lett
+letta
+lettang
+letti
+lettie
+letty
+letulle
+leuenber
+leung
+leupold
+leuty
+lev
+levac
+levasseu
+leveille
+levent
+levere
+levert
+levesque
+levey
+levi
+levin
+levine
+levis
+levisky
+levitin
+levo
+levon
+levy
+lew
+lewandow
+lewek
+lewellen
+lewes
+lewie
+lewinski
+lewis
+lewiss
+lewright
+lex
+lexi
+lexie
+lexine
+lexis
+lexy
+ley
+leyden
+leydig
+leyla
+leyton
+lezlee
+lezley
+lezlie
+lheureux
+li
+li-ming
+li-xi
+lia
+liad
+lial
+liam
+lian
+lian-hon
+liana
+liane
+liang
+liangchi
+lianna
+lianne
+liao
+lias
+liason
+liaurel
+liaw
+lib
+libadmin
+libbey
+libbi
+libbie
+libby
+liber
+libor
+libov
+libraria
+licandro
+licata
+lication
+licerio
+licha
+licht
+lichtenb
+lichtens
+lichum
+lichun
+licia
+lida
+liddell
+liddle
+lidia
+lidio
+lidster
+lidstone
+liduine
+lieberma
+liebrech
+liedl
+lief
+liem
+lien
+lieneman
+lienhard
+liepa
+liesa
+liesbeth
+liese
+liesel
+liesemer
+liesenbe
+liesie
+liesl
+lieure
+lievaart
+liew
+lifshey
+lightfie
+lightfoo
+lighthal
+lighthis
+lightowl
+ligon
+ligurs
+lijphart
+likert
+likourgi
+lil
+lila
+lilah
+lilas
+lili
+lilia
+lilian
+liliana
+liliane
+lilias
+lilin
+lilith
+lilla
+lillenii
+lilli
+lillian
+lillie
+lillien
+lillis
+lilllie
+lilly
+lily
+lilyan
+limeina
+limerick
+limin
+liming
+lin
+lin-chan
+lin-e
+lin-ni
+lina
+linas
+linaugh
+linback
+linberg
+linc
+linchang
+lincoln
+lind
+linda
+linda-jo
+lindamoo
+lindberg
+lindell
+lindemul
+linden
+lindenla
+linder
+lindholm
+lindi
+lindie
+lindler
+lindon
+lindow
+lindquis
+lindsay
+lindsey
+lindstro
+lindsy
+lindt
+lindy
+line
+linea
+linebarg
+linegar
+lineham
+linell
+linet
+lineth
+linette
+linfield
+ling
+ling-hui
+ling-yu
+ling-yue
+ling-zho
+lingafel
+linghui
+lingyan
+lingyu
+linh
+link
+linke
+linklett
+linley
+linn
+linnea
+linnell
+linnet
+linni
+linnie
+lino
+linoel
+linsley
+linton
+linus
+linwood
+linzie
+linzy
+lion
+lionel
+lionello
+liou
+lipari
+lipe
+liping
+lippens
+lippman
+lipschut
+lipscomb
+lipski
+lipton
+lira
+lisa
+lisabeth
+lisah
+lisak
+lisandro
+lisbeth
+lisch
+lischyns
+lise
+lisee
+lisenchu
+lisetta
+lisette
+lish
+lisha
+lishe
+liskoff
+lisle
+liss-mon
+lissa
+lissi
+lissie
+lissmoni
+lissy
+list
+lister
+liston
+listonic
+lita
+litherla
+litt
+littau
+littlewo
+litva
+litz
+litzenbe
+liu
+liuka
+liv
+liva
+livas
+livek
+livengoo
+liverman
+livermor
+lives
+livezey
+livia
+livingst
+livinsto
+livio
+liviu
+livnah
+livshits
+livvie
+livvy
+livvyy
+livy
+liwana
+liwen
+lixi
+liyuan
+liyun
+liz
+liza
+lizabeth
+lizak
+lizbeth
+lizette
+lizz
+lizzi
+lizzie
+lizzy
+ljiljana
+ljilyana
+ljubicic
+llacuna
+llaguno
+llanos
+llewelly
+llopart
+lloyd
+llywelly
+lo
+loa
+loadbuil
+loader
+loadsum
+loan
+loarie
+loay
+lobasso
+lobaugh
+lobello
+lober
+lobianco
+lobin
+lobue
+loc
+locicero
+lock
+lockard
+locke
+locken
+lockett
+lockhart
+lockwood
+lococo
+lodesert
+lodovico
+loe
+loeffler
+loeiz
+loel
+loella
+loes
+loesje
+loewen
+loftis
+logan
+logaraja
+loggins
+loghry
+logntp
+logue
+loh
+lohoar
+loi
+loire
+lois
+loise
+loiseau
+loisel
+lojewski
+loke
+loker
+lola
+loleta
+lolita
+lollis
+lolly
+lombard
+lombardo
+lombardy
+lombrink
+lommen
+lon
+lon-chan
+lona
+lonald
+lonchan
+londhe
+london
+lonee
+lonergan
+long
+long-chu
+longbott
+longcham
+longchun
+longdist
+longfiel
+longhenr
+longo
+longpre
+longsong
+longtin
+lonhyn
+loni
+lonidas
+lonn
+lonna
+lonnard
+lonneke
+lonni
+lonnie
+lonnman
+lonny
+lonsdale
+loo
+loon
+loong
+loos
+looyen
+lope
+loper
+loperena
+lopes
+lopez
+lopiano
+lopinski
+loponen
+loquerci
+lora
+lora-lee
+lorain
+loraine
+loralee
+loralie
+loralyn
+lorance
+lorant
+lorcan
+lord
+loree
+loreen
+lorelei
+lorelle
+lorelynn
+loren
+lorena
+lorenc
+lorene
+lorens
+lorenz
+lorenza
+lorenzen
+lorenzo
+loreta
+loretta
+lorettal
+lorette
+lorfano
+lori
+loria
+lorianna
+lorianne
+lorie
+lorien
+lorilee
+lorilyn
+lorimer
+lorin
+lorincz
+lorinda
+lorine
+loring
+lorint
+loris
+lorita
+lorletha
+lorli
+lormor
+lorna
+lorne
+loro
+lorrain
+lorraine
+lorrayne
+lorrel
+lorri
+lorrie
+lorrin
+lorrine
+lorry
+lortie
+lory
+loryn
+los
+losfeld
+losier
+loso
+losses
+lotan
+lote
+lotfalia
+lotfi
+lothaire
+lothar
+lothario
+lotochin
+lott
+lotta
+lotte
+lotti
+lottie
+lotty
+lotz
+lou
+lou-hell
+louann
+loucel
+loudiadi
+louella
+lough
+loughery
+loughran
+loughrin
+louhelle
+louie
+louiqa
+louis
+louis-ph
+louis-re
+louisa
+louise
+louisett
+louissei
+louk
+louka
+loukas
+louladak
+lourdes
+loutitia
+loux
+lovas
+lovatt
+loveday
+lovegrov
+lovejoy
+lovekin
+lovelace
+loveland
+loveless
+lovell
+lovett
+lovin
+lovina
+lovitt
+lowder
+lowe
+lowell
+lowery
+lowietje
+lowman
+lowrance
+lowrie
+lowry
+lowther
+loxton
+loy
+loyd
+loydie
+loyer
+loyola
+loyst
+loza
+lozier
+lozinski
+lpo
+lrc
+lrcrich
+lrcrtp
+lsi
+lsiunix
+lu
+luan
+luann
+luanne
+lubliner
+lubna
+lubomir
+lubomyr
+luc
+luca
+lucais
+lucas
+lucco
+luce
+lucente
+lucey
+lucho
+luci
+lucia
+lucian
+luciana
+luciani
+luciano
+lucias
+lucie
+lucien
+lucienne
+lucifer
+lucila
+lucile
+lucilia
+lucille
+lucina
+lucinda
+lucine
+lucio
+lucita
+lucius
+lucking
+lucky
+lucretia
+lucy
+ludchen
+ludovico
+ludovika
+ludvig
+ludvikse
+ludwick
+ludwig
+lue
+luella
+luelle
+luen
+luetchfo
+luetke
+luettcha
+luff
+lugsdin
+lugwig
+luh-maan
+luhcs
+luhmaan
+lui
+luigi
+luin
+luis
+luisa
+luise
+luiza
+lujanka
+luk
+luk-shun
+lukas
+lukassen
+lukaszew
+luke
+luker
+lukers
+lukic
+lukie
+lukshis
+lukshun
+lula
+lulita
+lulu
+lum
+lum-wah
+lumley
+lumsden
+lun
+luna
+lund
+lunde
+lundhild
+lundstro
+lundy
+lunk
+lunn
+luoedora
+luoma
+luong
+lupatin
+lupher
+lupien
+luping
+luquire
+lura
+lurette
+luria
+lurleen
+lurlene
+lurline
+lusa
+luscombe
+lussier
+luszczek
+lutan
+lutero
+luther
+luthin
+lutz
+luu
+luuk
+luwemba
+luxford
+luying
+luyten
+luz
+luzarrag
+luzine
+ly
+ly-khanh
+lyall
+lychak
+lyda
+lydda-ju
+lydia
+lydie
+lydon
+lyell
+lyle
+lyliston
+lyman
+lyn
+lynda
+lyndal
+lynde
+lyndel
+lyndell
+lyndia
+lyndon
+lyndsay
+lyndsey
+lyndsie
+lyndy
+lyne
+lynea
+lynelle
+lynett
+lynetta
+lynette
+lynham
+lynn
+lynna
+lynne
+lynnea
+lynnell
+lynnelle
+lynnet
+lynnett
+lynnette
+lynsey
+lynton
+lynwood
+lyon
+lyons
+lyse
+lysinger
+lyssa
+lystad
+lystiuk
+lystuik
+lysy
+lytle
+lzrd
+maahs
+maaike
+maala
+maan
+maarten
+maas
+mab
+mabel
+mabelle
+mabes
+mable
+mabson
+mabuchi
+mac
+mac maid
+macadams
+macalik
+macarthu
+macaulay
+macbride
+maccallu
+maccarth
+macchius
+maccombi
+macconai
+maccorma
+macderma
+macdonal
+macdonel
+macdouga
+macdowal
+macduff
+mace
+macelwee
+macfarla
+macgilli
+macgrego
+mach
+machan
+machatti
+machika
+machnick
+maciej
+maciejew
+maciel
+macinnes
+macinnis
+macisaac
+maciver
+mack
+mackay
+mackel
+mackenzi
+mackey
+mackin
+mackinno
+macklem
+macklin
+mackzum
+maclaren
+maclauri
+maclean
+maclella
+maclenna
+macleod
+macmarti
+macmeeki
+macmilla
+macmulli
+macnaugh
+macneil
+macneill
+macnicol
+macoosh
+macphail
+macphers
+macpost
+macquist
+macrae
+macreyno
+macsuppo
+mada
+madalena
+madalene
+madalyn
+madan
+madani
+maddalen
+maddi
+maddie
+maddix
+maddox
+maddy
+madel
+madelain
+madelein
+madelena
+madelene
+madelin
+madelina
+madeline
+madella
+madelle
+madelon
+madelyn
+mader
+madge
+madgett
+madhav
+madhavan
+madhu
+madhukar
+madigan
+madill
+madisett
+madison
+madl
+madlen
+madlin
+mado
+madonna
+madras
+madsen
+maduri
+mady
+mae
+maegan
+maennlin
+maenpaa
+maeya
+mag
+magbee
+magda
+magdaia
+magdale
+magdalen
+magdi
+magdiel
+magdy
+mage
+maged
+magee
+mages
+maggee
+maggi
+maggie
+maggy
+maghsood
+maginley
+maglione
+magnan
+magnolia
+magnum
+magnuson
+magnusse
+magnusso
+magrath
+magri
+mags
+maguire
+mah
+mahaffee
+mahala
+mahalia
+mahaling
+mahbeer
+mahboob
+mahendra
+maher
+mahesh
+maheu
+maheux
+mahfouz
+mahibur
+mahiger
+mahin
+mahlen
+mahlig
+mahlon
+mahmood
+mahmoud
+mahmud
+mahmut
+mahn
+mahon
+mahonen
+mahoney
+mahoney-
+mahshad
+mai
+maia
+maible
+maid
+maidenhe
+maidens
+maidisn
+maidlab
+maidsir
+maidxpm
+maier
+maiga
+maighdil
+maijala
+maika
+maikawa
+maikhanh
+mail
+mailroom
+mainardi
+maine
+mainoo
+maint
+mainvill
+mainwari
+mair
+maire
+maisey
+maisie
+maison
+maisonne
+maitilde
+maitland
+maitreya
+majd
+maje
+majeed
+majek
+majella
+majernik
+majid
+majmudar
+major
+majors
+majumdar
+majury
+mak
+makam
+makarand
+makarenk
+makary
+makeda
+makiko
+makino
+makinson
+makohoni
+makoid
+makoto
+maksoud
+maksuta
+mal
+mala
+malachi
+malaclyp
+malaher
+malaika
+malaivon
+malam
+malani
+malanie
+malanos
+malavia
+malaysia
+malchy
+malcolm
+malden
+malec
+malee
+malek
+malena
+maleski
+malethia
+malgorza
+malgosia
+malhi
+malhotra
+malia
+maliepaa
+malik
+malina
+malinda
+malinde
+malisic
+maliski
+malissa
+malissia
+malizia
+malkani
+malkiewi
+malkinso
+mallari
+malle
+mallejac
+maller
+mallett
+mallik
+mallissa
+mallorie
+mallory
+malloy
+mallozzi
+malmqvis
+malone
+maloney
+malorie
+malory
+malott
+malta
+maltby
+maltese
+maludzin
+malus
+malva
+malvin
+malvina
+malynda
+malynne
+malynows
+malyszka
+malzahn
+mame
+mami
+mamie
+mamikuni
+mamoru
+mamoulid
+man
+man-fai
+manageme
+manager
+manahil
+manalac
+manami
+manas
+manavend
+manceau
+manchest
+mancini
+mand
+manda
+mandana
+mandayam
+mandel
+mandevil
+mandi
+mandie
+mandrusi
+mandruso
+mandy
+maneatis
+manek
+maness
+manette
+manfred
+manfredo
+mang
+mangione
+mangum
+manh
+manhatte
+mani
+manica
+manickam
+manijeh
+manilal
+manimozh
+maninder
+manish
+manitius
+manitsas
+manjari
+manjeri
+manjinde
+manjit
+manjrike
+mankowsk
+manley
+manli
+manly
+manmohan
+mann
+manna
+manner
+manners
+mannie
+manning
+mannino
+mannion
+manno
+manny
+mano
+manoel
+manoharm
+manoj
+manol
+manolios
+manolis
+manolo
+manon
+manou
+manouch
+manoukia
+mansbrid
+mansell
+manshih
+mansi
+manson
+mansour
+mansoura
+mansouri
+mansukha
+mansum
+mantell
+manto
+manuel
+manuela
+manus
+manuszak
+manverse
+manwarin
+manya
+mao
+maohua
+mapes
+mapile
+mapp
+mar
+mara
+marabel
+maracle
+maragoud
+marano
+marasco
+marasliy
+marc
+marc-and
+marc-ant
+marcanti
+marcanto
+marce
+marceau
+marcel
+marcela
+marcelia
+marcelis
+marcella
+marcelle
+marcelli
+marcello
+marcellu
+marcelo
+marcey
+march
+marchall
+marchand
+marchant
+marcheck
+marchell
+marchese
+marchett
+marci
+marcia
+marcie
+marcile
+marcilie
+marcille
+marciniu
+marcio
+marco
+marcom
+marconi
+marcos
+marcotte
+marcoux
+marcum
+marcus
+marcy
+mardi
+marea
+mareah
+marek
+marella
+maren
+marena
+marenger
+maressa
+marette
+marg
+marga
+margalit
+margalo
+margaret
+margarie
+margarit
+margaux
+marge
+margeaux
+margery
+marget
+margetso
+margette
+margheri
+margheti
+margi
+margie
+margit
+margitta
+margo
+margot
+margret
+margriet
+margueri
+margy
+marhta
+mari
+maria
+mariabel
+mariaele
+mariaisa
+mariam
+marian
+mariana
+mariani
+mariann
+marianna
+marianne
+maribel
+maribell
+maribeth
+marice
+maridel
+marie
+marie-an
+marie-je
+marie-jo
+marie-lu
+marie-na
+marieann
+mariejea
+marieka
+marieke
+mariel
+mariela
+mariele
+marielle
+mariesar
+mariet
+marietta
+mariette
+marigold
+marijke
+marijn
+marijo
+marika
+mariland
+marilee
+marilin
+marillin
+marily
+marilyn
+marilynn
+marin
+marina
+marinaro
+marineau
+marinett
+marinna
+marino
+marinos
+mario
+marion
+mariotti
+mariou
+mariquil
+maris
+marisa
+marisca
+marisela
+mariska
+marissa
+marit
+marita
+maritan
+maritsa
+maritza
+marius
+mariya
+mariza
+marj
+marja
+marjan
+marje
+marjean
+marjet
+marji
+marjie
+marjo
+marjoke
+marjolei
+marjorie
+marjory
+marjy
+mark
+markell
+markes
+marketa
+marketin
+markham
+markiewi
+markins
+markland
+markle
+markm
+markmeye
+marko
+markos
+markovic
+marks
+markus
+marla
+marlaine
+marlane
+marleah
+marleau
+marlee
+marlee-j
+marleejo
+marleen
+marlena
+marlene
+marley
+marlie
+marlies
+marlin
+marline
+marling
+marlo
+marloes
+marlon
+marlow
+marlowe
+marlsela
+marlyn
+marlyne
+marmaduk
+marmen
+marmillo
+marmion
+marna
+marne
+marneris
+marney
+marni
+marnia
+marnie
+marnix
+maroucho
+maroun
+marples
+marquart
+marquez
+marquita
+marr
+marra
+marrec
+marren
+marrett
+marriet
+marrilee
+marriott
+marris
+marrissa
+marron
+marrone
+marryann
+mars
+marscha
+marschew
+marsden
+marsh
+marsha
+marshal
+marshall
+marshaus
+marshman
+marsie
+marsiell
+marson
+marston
+mart
+marta
+martainn
+martel
+martell
+martelle
+marten
+martens
+martenso
+martenst
+martguer
+martha
+marthe
+marthena
+marti
+martica
+martie
+martijn
+martin
+martina
+martince
+martinci
+martine
+martinea
+martinez
+marting
+martino
+martins
+martinus
+martita
+marttine
+marturan
+marty
+martyn
+martynne
+marui
+marum
+maruszak
+maruszew
+marv
+marve
+marvel
+marvell
+marven
+marvette
+marvin
+marwan
+marwin
+marx
+mary
+mary-ann
+mary-ell
+mary-jan
+mary-jo
+mary-mic
+mary-pat
+marya
+maryak
+maryam
+maryann
+maryanna
+maryanne
+marybell
+marybeth
+maryelle
+maryjane
+maryjo
+marykate
+marykay
+maryl
+marylee
+marylin
+marylind
+marylou
+marylynn
+marymarg
+maryn
+maryrose
+marys
+marysa
+maryse
+marysue
+maryvonn
+marzella
+marzullo
+masa
+masahiro
+masako
+masales
+masamich
+masanao
+masanobu
+masao
+masapati
+masaru
+masciare
+masha
+mashura
+masika
+masini
+maskell
+maskery
+maslen
+maso
+mason
+masood
+masooda
+masotti
+masoud
+masse
+massengi
+massey
+massicot
+massimil
+massimo
+massinga
+masson
+massone
+massonne
+massoud
+massoudi
+massumi
+mastella
+mastenbr
+masterpl
+masters
+masterso
+mastrang
+mastroma
+mastrona
+masty
+mat
+mata
+mataga
+matalon
+matatall
+matelda
+mateo
+materkow
+materna
+mathe
+mather
+matheson
+mathew
+mathews
+mathewso
+mathian
+mathias
+mathieso
+mathieu
+mathilda
+mathilde
+mathis
+mathiue
+mathur
+mathurin
+mathus
+matias
+matibag
+matilda
+matilde
+matlock
+matney
+matrin
+matrundo
+mats
+matson
+matsubar
+matsugu
+matsunag
+matsushi
+matsuzak
+matsuzaw
+matt
+matteau
+matteo
+mattes
+matthaeu
+mattheus
+matthew
+matthews
+matthias
+matthieu
+matthiew
+matthus
+matti
+mattias
+mattie
+mattiuss
+mattiuz
+matton
+mattson
+matty
+matusik
+mau
+mau-pin
+mauck
+maud
+maudalis
+maude
+maudie
+maudrie
+maudy
+mauer
+mauldin
+maund
+mauney
+maunu
+maupin
+maura
+maure
+maureen
+maureene
+maurene
+maurer
+maurice
+mauricio
+maurie
+maurijn
+maurine
+maurino
+maurise
+maurita
+maurits
+maurizia
+maurizio
+mauro
+maury
+maveety
+mavis
+mavra
+mavrou
+mawani
+mawji
+mawst
+max
+maxey
+maxi
+maxie
+maxim
+maximili
+maximo
+maxin
+maxine
+maxseine
+maxsom
+maxwell
+maxy
+may
+maya
+mayaram
+mayasand
+maybee
+maybelle
+maycel
+maycock
+maye
+mayea
+mayenbur
+mayer
+mayes
+mayeul
+mayfield
+mayhugh
+mayi
+maylynn
+mayman
+maynard
+mayne
+maynes
+maynie
+maynord
+mayo
+mayor
+mayoux
+mayr
+mayr-ste
+mays
+mayumi
+mayya
+mazahir
+mazanji
+mazarick
+mazen
+mazey
+mazlack
+mazurek
+mazyar
+mazzei
+mbrose
+mc
+mc alpin
+mc ginn
+mcadam
+mcadams
+mcadorey
+mcafee
+mcalear
+mcaleer
+mcaliste
+mcallist
+mcallum
+mcandrew
+mcarthur
+mcateer
+mcaulay
+mcauliff
+mcbeth
+mcbrayne
+mcbride
+mcbroom
+mcbryan
+mccabe
+mccaffer
+mccaffit
+mccaffre
+mccaig
+mccain
+mccall
+mccalla
+mccallen
+mccallum
+mccampbe
+mccandle
+mccann
+mccarrel
+mccarrol
+mccarron
+mccarthy
+mccartin
+mccartne
+mccarty
+mccaughe
+mccauley
+mccaw
+mcclain
+mcclarre
+mcclary
+mcclean
+mccleery
+mcclella
+mcclendo
+mcclenno
+mcclinto
+mccloske
+mcclough
+mcclure
+mccluske
+mcclymon
+mccoll
+mccollam
+mccollum
+mccolman
+mccomb
+mccombs
+mcconagh
+mcconkey
+mcconnel
+mcconney
+mccord
+mccorkel
+mccorkle
+mccormac
+mccormic
+mccorquo
+mccoy
+mccoy-ca
+mccracke
+mccrain
+mccraney
+mccray
+mccready
+mccreano
+mccrear
+mccreath
+mccreesh
+mccrimmo
+mccuaig
+mccue
+mccullen
+mcculloc
+mccullog
+mccullou
+mccully
+mccune
+mccurdy
+mccusker
+mcdade
+mcdaniel
+mcdavitt
+mcdermot
+mcdevitt
+mcdonald
+mcdonnel
+mcdonoug
+mcdoom
+mcdougal
+mcdowall
+mcdowell
+mcduffie
+mcdunn
+mceacher
+mcelderr
+mcelhone
+mcelligo
+mcellist
+mcelrea
+mcelroy
+mcevoy
+mcewan
+mcewen
+mcewen-r
+mcfadden
+mcfall
+mcfarlan
+mcfeely
+mcgallia
+mcgarry
+mcgaughe
+mcgee
+mcgehee
+mcgeown
+mcghee
+mcgill
+mcgillic
+mcgillvr
+mcgilly
+mcginley
+mcginn
+mcglynn
+mcgonagl
+mcgoniga
+mcgorman
+mcgough
+mcgovern
+mcgowan
+mcgracha
+mcgrath
+mcgregor
+mcgruder
+mcguigan
+mcguinne
+mcguire
+mcgurn
+mchale
+mchan
+mcharg
+mchugh
+mcilrath
+mcilroy
+mcinerne
+mcinnis
+mcintee
+mcintire
+mcintomn
+mcintosh
+mcintyre
+mcisaac
+mciver
+mckay
+mckeage
+mckeague
+mckearne
+mckechni
+mckee
+mckeegan
+mckeen
+mckeigha
+mckeitha
+mckenna
+mckenney
+mckenzie
+mckeone
+mckeown
+mckerrow
+mckibben
+mckibbin
+mckibbon
+mckie
+mckillop
+mckinlay
+mckinley
+mckinney
+mckinnon
+mcknelly
+mcknight
+mckusick
+mclachla
+mclaren
+mclauchl
+mclaughl
+mclawhon
+mclawhor
+mclean
+mclellan
+mclemore
+mclenagh
+mclendon
+mclennan
+mcleod
+mcluskie
+mcmahan
+mcmahon
+mcmanis
+mcmann
+mcmannen
+mcmanus
+mcmaster
+mcmeegan
+mcmenami
+mcmichae
+mcmillan
+mcmillen
+mcmillia
+mcmillio
+mcminn
+mcmonagl
+mcmullen
+mcmullin
+mcmurray
+mcnab
+mcnabb
+mcnair
+mcnally
+mcnamara
+mcnamee
+mcnaught
+mcneal
+mcnealy
+mcneely
+mcneese
+mcneil
+mcneill
+mcneilly
+mcnerlan
+mcnerney
+mcnichol
+mcnicol
+mcniel
+mcnitt
+mcnulty
+mcphaden
+mcphail
+mcphee
+mcpherso
+mcquaid
+mcquaig
+mcquarri
+mcqueen
+mcrae
+mcrann
+mcready
+mcritchi
+mcronald
+mcruvie
+mcshane
+mcsheffr
+mcsorley
+mcsween
+mctaggar
+mctavish
+mctierna
+mcturner
+mcvay
+mcveety
+mcveigh
+mcvey
+mcvicar
+mcvicker
+mcwalter
+mcwaters
+mcwherte
+mcwhinne
+mcwhorte
+mcwilton
+mdhazali
+mduduzi
+me
+meachum
+mead
+meade
+meadows
+meads
+meagan
+meaghan
+meagher
+mealin
+meany
+meara
+measures
+mebine
+mechael
+meche
+mechelle
+mecher
+meckler
+meckley
+mecteau
+medefess
+medeiros
+medel
+meder
+medill
+medioni
+medlin
+medlock
+mednick
+medria
+meehan
+meeks
+meena
+meenaksh
+meer
+meera
+meerveld
+meese
+meeting
+meffe
+meg
+megan
+megen
+meggi
+meggie
+meggitt
+meggo
+meggy
+meghan
+meghani
+meghann
+megumi
+mehboob
+mehd
+mehdi
+mehelis
+mehetabe
+mehlhaff
+mehmet
+mehmud
+mehrdad
+mehrez
+mehrzad
+mehta
+mehul
+mei
+mei-jywa
+meier
+meijer
+meijywan
+meikle
+meilleur
+mein
+meining
+meir
+meiser
+meisner
+meissner
+mejdal
+mejia
+mejury
+mel
+mela
+melamie
+melana
+melani
+melania
+melanie
+melanson
+melantha
+melany
+melaura
+melba
+melberta
+melbourn
+meldia
+meldrum
+melecio
+meleg
+melek
+melesa
+meleski
+meleskie
+melessa
+meletios
+melfi
+melford
+melhem
+meli
+melicent
+melina
+melinda
+melinde
+melinie
+melisa
+melisand
+melisend
+melisent
+melissa
+melisse
+melita
+melitta
+melkild
+mella
+melli
+mellicen
+mellie
+mellisa
+mellisen
+mello
+melloney
+mellor
+melly
+melnyk
+melodee
+melodie
+melody
+meloling
+meloney
+melonie
+melony
+melosa
+melton
+melucci
+melva
+melvin
+melvina
+melvyn
+melynda
+men-kae
+menaker
+menard
+menasce
+menashi
+menashia
+mencer
+mendel
+mendelso
+mendez
+mendie
+mendolia
+mendonca
+mendorf
+mendoza
+mendy
+menechia
+menendez
+meng
+mengly
+menkae
+menke
+menna
+mennie
+menon
+menqiong
+mensch
+mensinka
+mentor
+menyhart
+menzel
+menzies
+mer
+merat
+merb
+mercedes
+mercer
+merci
+mercie
+mercier
+mercilin
+mercy
+merdia
+meredeth
+meredith
+merell
+merelyn
+meres
+mereu
+meriann
+meridel
+meridew
+meridian
+meridith
+meriel
+merilee
+meriline
+merill
+merilyn
+merinder
+meris
+merissa
+meriweth
+merizzi
+merkling
+merl
+merla
+merle
+merlin
+merlina
+merline
+mermelst
+merna
+merola
+merralee
+merrel
+merrett
+merrick
+merridie
+merrie
+merriell
+merrile
+merrilee
+merrili
+merrill
+merrills
+merrils
+merrily
+merrithe
+merritt
+merry
+merryman
+merrywea
+mersch
+mersey
+mersinge
+merton
+merunix
+merv
+mervin
+mervyn
+merwin
+merworth
+merwyn
+meryl
+merylene
+meseberg
+mesirov
+meskimen
+mesko
+mesquita
+message
+messer
+messeria
+messersc
+messick
+messier
+messinge
+mesut
+meszaros
+meta
+metcalf
+metcalfe
+metelski
+meter
+metheny
+metherel
+methi
+methiwal
+methot
+methul
+metin
+metler
+metraile
+metrics
+mettrey
+metyn
+metz
+metzger
+metzler
+meubus
+meunier
+mevis
+mewa
+meyer
+meyerink
+meyers
+meza
+mezzano
+mezzoius
+mfgeng
+mgmt
+mia
+miao
+miasek
+mic
+micaela
+micah
+micahel
+miceli
+micgael
+micha
+michael
+michael-
+michaela
+michaeli
+michaell
+michaels
+michaez
+michail
+michailo
+michal
+michale
+michalos
+michaud
+micheal
+micheil
+michel
+michele
+michelin
+michell
+michella
+michelle
+michels
+michelse
+michelso
+michelus
+michi
+michial
+michie
+michiel
+michigan
+michihir
+michiko
+michiya
+mick
+mickens
+mickey
+micki
+mickie
+micklos
+micky
+mico
+micro
+microfab
+micucci
+mid
+middlebr
+middleto
+midge
+midha
+miek
+mielke
+miello
+miep
+miernik
+miers
+mierwa
+mietek
+miezitis
+migdalia
+mignault
+mignon
+mignonne
+miguel
+miguela
+miguelit
+mihaela
+mihai
+mihail
+mihan
+mihara
+mihir
+mihm
+miho
+mihran
+mika
+mikael
+mikaela
+mike
+mikel
+mikelis
+mikeloni
+mikey
+mikhail
+miki
+mikie
+mikihito
+mikkel
+miklos
+miko
+mikol
+miksik
+mikulka
+mil
+mila
+milaknis
+milakovi
+milan
+milanfar
+milanovi
+milar
+milary
+milburn
+mildred
+mildrid
+mile
+milena
+miles
+milford
+milian
+milicent
+milind
+milinkov
+milissen
+milka
+mill
+millaire
+millar
+millard
+millen
+miller
+millero
+millerwo
+millette
+milletti
+milli
+millicen
+millie
+milligan
+millisen
+millo
+milloy
+mills
+millspau
+millward
+milly
+milman
+milmine
+milne
+milner
+milo
+milor
+milotte
+milou
+milstead
+milston
+milt
+miltenbu
+miltie
+milton
+miltos
+milty
+milutino
+milway
+milzie
+mim
+mimi
+mims
+min
+min-jho
+mina
+minai
+minakata
+minako
+minami
+minard
+minas
+mincey
+minck
+minda
+mindy
+minegish
+miner
+minerva
+minesh
+minetola
+minetta
+minette
+ming
+ming-cha
+ming-chu
+ming-hue
+ming-min
+ming-pin
+ming-tzo
+ming-yua
+mingchu
+minghuei
+minghwan
+mingpin
+mingtzon
+mingyuan
+minh
+minh-phu
+minhwi
+minichil
+minjho
+minkus
+minna
+minnamin
+minne
+minnesot
+minni
+minniche
+minnie
+minnnie
+minny
+minor
+minority
+minoru
+minos
+minshall
+minsky
+minta
+minter
+minthorn
+minyard
+minzhu
+miodrag
+miof mel
+mior
+miotla
+mips
+miquela
+miquette
+mir
+mira
+mirabel
+mirabell
+miran
+miranda
+mirande
+mirarchi
+mireiell
+mireille
+mirek
+mirella
+mirelle
+mirenda
+miriam
+miriamne
+mirian
+mirilla
+mirin
+mirjam
+mirko
+mirna
+miro
+miron
+miroslav
+miroslaw
+mirza
+mis
+misbah
+mischa
+misczak
+misha
+mishina
+misium
+miskelly
+misko
+misra
+miss
+missagh
+missaili
+missie
+misslitz
+missy
+mister
+misti
+mistry
+mistulof
+misty
+misutka
+mitalas
+mitch
+mitchael
+mitchel
+mitchell
+mitchels
+mitchler
+mitesh
+mitra
+mitrani
+mitrou
+mitsui
+mitsuko
+mitsuru
+mitsuter
+mittleid
+mitzi
+mivehchi
+miwa
+miwako
+miyuki
+mizerk
+mkpwent
+mkt
+mlacak
+mlcoch
+mmail
+mmdf
+mnason
+mo
+moataz
+moazzami
+mobasher
+mobley
+mocock
+modaffer
+modesta
+modestia
+modestin
+modestos
+modestou
+modesty
+modh
+modi
+modigh
+modl
+modotto
+modula-2
+modula2
+moe
+moebes
+moel
+moen
+moening
+moeschet
+moetteli
+moffatt
+moffet
+moffett
+mofina
+moghe
+moghis
+mogridge
+moh
+moh'd
+mohajeri
+mohamad
+mohamed
+mohammad
+mohammed
+mohan
+mohandas
+mohandis
+moharram
+mohd
+mohideen
+mohler
+mohr
+mohrmann
+mohsen
+moina
+moira
+moise
+moises
+moishe
+moiz
+moizer
+moja
+mojgani
+mojtaba
+mok
+mok-fung
+mokbel
+mokhtar
+mokros
+molani
+moledina
+moleski
+moll
+mollee
+mollerus
+molli
+mollie
+molloy
+molly
+molnar
+molochko
+moloney
+molson
+molyneux
+mombourq
+mommy
+momon
+momtahan
+mona
+monachel
+monaco
+monaghan
+monah
+monahan
+monardo
+moncef
+moncion
+monck
+moncur
+mondher
+mondor
+monet
+monette
+moneypen
+monforto
+monfre
+mong
+mong-tse
+mongo
+mongtsen
+moni
+monica
+moniek
+monika
+monino
+monique
+moniter
+monling
+monn
+monro
+monroe
+monson
+montag
+montague
+montaldo
+montanez
+montange
+montanin
+montcalm
+monte
+monteene
+monteggi
+monteiro
+montelli
+montero
+monteros
+montgome
+monti
+montijo
+montmore
+montor
+montoute
+montoya
+montreal
+montreui
+montsion
+montsko
+montuno
+monty
+mony
+monzo
+moo-youn
+mooder
+moogk
+mooken
+moomey
+moon
+moondog
+mooney
+moonistt
+moorcrof
+moore
+moore-vi
+moorefie
+moorer
+moores
+moorhous
+moosavi
+mora
+moraetes
+morais
+morales
+moran
+moray
+morcinel
+mord
+mordecai
+mordecha
+morden
+mordy
+morearty
+moreau
+moree
+moreen
+morehead
+morek
+moreland
+morelli
+morena
+moreno
+moreton
+morettin
+morey
+morgan
+morgan-c
+morgana
+morganic
+morganne
+morgen
+morglan
+morgun
+mori
+moria
+moriarty
+morie
+morimoto
+morin
+morini
+morino
+moris
+morishig
+morissa
+morisset
+moritz
+moriyama
+morlee
+morley
+morly
+morna
+morneau
+morocz
+moroney
+moroz
+morra
+morreale
+morrie
+morrin
+morris
+morrison
+morrisse
+morry
+morse
+morson
+mort
+morten
+morteza
+mortie
+mortimer
+morton
+morty
+moschopo
+mose
+moseby
+moselle
+moser
+moses
+mosetta
+moshe
+moshinsk
+moshiri
+moshtagh
+moshy
+mosis
+moskalik
+mosley
+moss
+mostafa
+mostovac
+mosur
+mot
+motashaw
+motasim
+motaz
+mote
+motoko
+mototsun
+mott
+motwani
+mou
+moua
+mouat
+moubarak
+mougy
+mouillau
+moulds
+moulsoff
+moulton
+mouna
+mounir
+mountfor
+moussa
+mousseau
+moussett
+moveline
+movies
+mowat
+mowbray
+mowle
+moxham
+moxley
+moxon
+moy
+moya
+moyano
+moyce
+moyenda
+moyer
+moyers
+moyes
+moyna
+moynihan
+moyoli
+moyra
+mozart
+mozek
+mozelesk
+mozelle
+mozes
+mraz
+mrozinsk
+mrugesh
+msg
+mshia
+mtcbase
+mtl
+mtlipadm
+mtnview
+mu-cheng
+mucci
+mucheng
+muchow
+mucklow
+mudd
+mudge
+mudie
+mudry
+muehle
+mueller
+muenster
+muffin
+mufi
+mufinell
+mufti
+mugniot
+muh-cher
+muhammad
+muhammed
+muhchern
+mui
+muinck
+muir
+muire
+muise
+mujahed
+mukai
+mukhar
+mukharji
+mukherje
+mukhopad
+mukul
+mukund
+mulder
+mulders
+muldoon
+mulero
+mulherka
+mulholla
+mullaly
+mullaney
+mullarne
+mullen
+muller
+mullett
+mullin
+mullinix
+mullins
+mulmuley
+mulot
+mulqueen
+mulroney
+multispe
+mulumba
+mulvie
+mumford
+mumma
+mummy-cr
+mun-choo
+mun-hang
+munaz
+munchoon
+munden
+mundi
+mundy
+muni
+munikoti
+munir
+muniz
+munjal
+munmro
+munn
+munna
+munns
+munro
+munroe
+munsey
+munson
+munter
+munz
+munzer
+muqarrab
+muradia
+muralidh
+murash
+murat
+murawski
+murchiso
+murdaugh
+murdeshw
+murdoch
+murdock
+mureil
+murial
+muriel
+murielle
+murison
+murnagha
+muro
+murock
+murph
+murphin
+murphy
+murphy-k
+murray
+murrell
+murrill
+murrin
+murris
+murry
+murson
+murtagh
+murtaza
+murthy
+murton
+murty
+murveit
+murvyn
+musa
+musca
+musclow
+muselik
+musen
+musgrove
+musick
+mussalle
+mussar
+musselwh
+musser
+mustafa
+mustapha
+mustillo
+mutcher
+muth
+muthuswa
+mutikain
+mutsuo
+muttaqi
+muus
+muzio
+muzz
+mwa
+my
+mya
+myatt
+myca
+mycah
+mychal
+myer
+myers
+myers-pi
+myhill
+mykitysh
+myla
+myles
+mylne
+mylo
+mymryk
+myong
+myoung
+myra
+myrah
+myranda
+myre
+myriam
+myrick
+myrilla
+myrillas
+myrle
+myrlene
+myrna
+myron
+myroon
+myrta
+myrthill
+myrtia
+myrtice
+myrtie
+myrtille
+myrtle
+myrvyn
+myrwyn
+mysore
+mystkows
+myung
+myunghee
+myungho
+nabeel
+nabeil
+nabil
+nabisco
+nabors
+nace
+nachtshe
+nachum
+nad
+nada
+nadav
+nadean
+nadeau
+nadeau-d
+nadeem
+nadeen
+nadel
+nader
+nadezhda
+nadi
+nadia
+nadim
+nadine
+nadir
+nadiya
+nadler
+nadolny
+nadon
+nady
+nadya
+nae-ming
+naem
+naeming
+nafezi
+nafsika
+nagai
+nagaraj
+nagaraja
+nagaratn
+nagarur
+nagel
+nagendra
+nagenthi
+nagle
+naguib
+nagy
+nagys
+nahabedi
+nahas
+nahata
+nahid
+nahmias
+nahornia
+nahum
+naile
+naim
+naima
+naimpall
+nair
+nairn
+naismith
+najafi
+naji
+najib
+nakagome
+nakamura
+nakano
+nakatsu
+nakhla
+nakhoul
+nakina
+nakonecz
+nalani
+naldrett
+nalin
+nall
+nallenga
+nam
+nam-kiet
+nam-soo
+namasiva
+nambride
+namdar
+nami
+namiki
+namont
+namrata
+nan
+nana
+nanamiya
+nananne
+nance
+nancee
+nancey
+nanci
+nancie
+nancy
+nancyjea
+nanda
+nandakum
+nandan
+nandi
+nandita
+nando
+nanete
+nanette
+nang
+nani
+nanice
+nanine
+nannette
+nanni
+nannie
+nanny
+nanon
+naohiko
+naoko
+naolu
+naoma
+naomi
+naor
+naoto
+naoum
+nap
+naparst
+napert
+naphan
+naphtali
+napier-w
+napke
+napoleon
+napper
+nappie
+nappy
+nara
+narasimh
+narayan
+narayana
+narciso
+narda
+nardiell
+naren
+narendra
+naresh
+nari
+narida
+nariko
+narinder
+naro
+narraway
+narrima
+narron
+narsimha
+nasato
+naser
+nash
+nashib
+nashif
+nashir
+nashvill
+nasir
+nason
+nass
+nasser
+nassoy
+nassr
+nasvin
+nat
+nata
+natal
+natala
+natale
+natalee
+natalia
+natalie
+natalina
+nataline
+nataliya
+nataly
+natalya
+nataniel
+nataraja
+natascha
+natasha
+natasja
+natassia
+natassja
+natchez
+nate
+nath
+nathalia
+nathalie
+nathan
+nathanae
+nathania
+nathanie
+nathanil
+nathoo
+national
+natiuk
+nativida
+natka
+natkin
+natraj
+natty
+natver
+natvidad
+naufal
+naugle
+naujokas
+naujoks
+nault
+nava
+naval
+navalta
+navaratn
+navarre
+navarro
+naveda
+naveed
+naveen
+navid
+navneet
+nawa
+nawaby
+nayan
+naybor
+naylor
+nayman
+nayneshk
+nayyer
+nazanin
+nazardad
+nazeh
+nazi
+nazib
+nazli
+nazman
+ncc
+ndububa
+ne-regio
+neal
+neala
+neale
+neall
+nealon
+nealson
+nealy
+neamtu
+neander
+nearing
+nearyrat
+neate
+neault
+nebel
+ned
+neda
+nedda
+nedderma
+neddie
+neddy
+nedi
+needham
+neefs
+neel
+neely
+neena
+neene
+neeraj
+neetu
+nefen
+neff
+negandhi
+negar
+neghabat
+negrich
+nehemiah
+nehring
+neibauer
+neider
+neidy
+neifert
+neil
+neila
+neile
+neill
+neilla
+neille
+neilly
+neils
+neilsen
+neilson
+neisius
+neitzel
+nekueey
+nel
+nelda
+nelia
+nelie
+nelken
+nell
+nelle
+nelleke
+nelli
+nellie
+nellis
+nelly
+nelon
+nels
+nelsen
+nelson
+nemec
+nemes
+nemeth
+nemirovs
+nenad
+neng-chu
+nengchun
+nentwich
+neoh
+nerby
+nereida
+nerem
+nerissa
+nerita
+nermana
+nero
+neron
+nert
+nerta
+nerte
+nerti
+nertie
+nerty
+nesbitt
+nesralla
+ness
+nessa
+nessi
+nessie
+nessman
+nessy
+nesta
+neste
+nester
+nestor
+netas
+netdbs
+netdev
+netherso
+netick
+netlink
+neto
+netta
+netteam
+netti
+nettie
+nettle
+nettles
+netto
+netty
+network-
+networkr
+networks
+netzke
+neubauer
+neudeck
+neufeld
+neuman
+neumann
+neumeist
+neureuth
+neuschwa
+neustift
+neusy
+nev
+neva
+nevardau
+nevein
+nevil
+nevile
+neville
+nevin
+nevins
+nevison
+nevrela
+nevsa
+new
+newberry
+newbold
+newby
+newcomb
+newcombe
+newell
+newham
+newhook
+newkirk
+newlab
+newland
+newman
+newnam
+newport
+news
+newsom
+newsome
+newton
+neyer
+neyman
+neyra
+neysa
+neywick
+nezm
+nezon
+ng
+nga
+ngai
+ngai-nga
+ngaingai
+ngan
+nghia
+ngina
+ngo
+ngoc
+ngocquyn
+nguy
+nguyen
+nguyen-t
+nguyet
+nha
+nhan
+nhat
+nhien
+nhut
+nial
+niall
+niamh
+nic
+nicandro
+nicas
+niccolls
+niccolo
+nichael
+nichol
+nicholas
+nichole
+nicholl
+nicholle
+nichols
+nicholso
+nici
+nick
+nickell
+nickells
+nickels
+nickerso
+nickey
+nicki
+nickie
+nickle
+nicklin
+nicko
+nickola
+nickolai
+nickolas
+nickolau
+nickonov
+nicky
+nico
+nicol
+nicola
+nicolai
+nicolais
+nicolaou
+nicolas
+nicole
+nicolea
+nicoles
+nicolett
+nicoli
+nicolina
+nicoline
+nicolis
+nicolle
+nicolo
+nicolopu
+nicosia
+nie
+niebudek
+niedelma
+niedens
+niedra
+niedzwie
+niek
+niel
+nield
+niels
+nielsen
+nielson
+niemi
+nien
+nien-hwa
+nienhwa
+niepmann
+niepokuj
+niergart
+nigam
+nigel
+nihar
+nijen
+nik
+nikaniki
+nike
+nikfarja
+niki
+nikifori
+nikiforu
+nikita
+nikki
+nikkie
+nikky
+niklas
+niko
+nikola
+nikolai
+nikolaos
+nikolas
+nikolaus
+nikolett
+nikolia
+nikolopo
+nikolos
+nikos
+nil
+nilakant
+niles
+nilesh
+nill
+niloofar
+nils
+nilson
+nilsson
+nima
+nimesh
+nimish
+nimmo
+nimr
+nimzod
+nina
+ninetta
+ninette
+ninety-o
+ning
+ninja
+ninnetta
+ninnette
+ninno
+ninon
+nipper
+nir
+niraj
+niranjan
+nirmal
+niro
+nirwan
+nisa
+nisan
+nisbet
+nischuk
+nishan
+nishida
+nishiguc
+nishihar
+nishimot
+nishimur
+nishioka
+nishith
+nishiwak
+nishiyam
+nishizak
+nissa
+nisse
+nissie
+nissy
+nita
+nital
+nitin
+nitschky
+nitza
+nitzhe
+nitzhye
+niu
+niven
+nix
+nixie
+nixon
+nixxon
+niz
+nizam
+nizamudd
+nizar
+nizman
+nj
+njo
+nnamdi
+nnamudi
+no
+noach
+noah
+noak
+noam
+noami
+nobe
+nobel
+nobes
+nobie
+noble
+nobuko
+nobuo
+nobutaka
+nobuto
+nobuyuki
+noby
+nock
+noddin
+node
+noe
+noel
+noelani
+noell
+noella
+noelle
+noellyn
+noelyn
+noemi
+noeschka
+noffke
+noguchi
+nokes
+nola
+nolan
+nolan-mo
+nolana
+noland
+nolen
+noles
+nolet
+nolie
+noll
+nollie
+nolly
+nolter
+nomi
+nomura
+nona
+nonah
+noname
+nong
+nongqian
+noni
+nonie
+nonkes
+nonna
+nonnah
+noone
+noorani
+noorbehe
+noorbhai
+nooshin
+nopi
+nora
+norah
+noralie
+noraly
+norbert
+norberto
+norbie
+norby
+norcal
+norczen
+nordskog
+nordstro
+norean
+noreen
+norel
+norena
+norene
+norfleet
+norgaard
+norikats
+norikazu
+noriko
+norina
+norine
+norio
+noris
+norm
+norma
+norman
+normand
+normandi
+norment
+normie
+normy
+norndon
+noronha
+norri
+norrie
+norris
+norry
+norstar
+north
+northam
+northcot
+northrop
+northrup
+norton
+norval
+norvie
+norvig
+norwood
+nosewort
+noslab
+nosov
+nostrada
+notley
+nou
+noubar
+nouira
+noujeim
+nour
+nouri
+nova
+novak
+novelia
+novene
+novia
+novisedl
+novo
+novorols
+novotny
+nowak
+nowell
+nowina-k
+nowlin
+noy
+noye
+noyes
+npi
+nss
+ntelpac
+ntinash
+ntlc
+ntpadmin
+ntprel
+nttest
+nuber
+nuetzi
+nugent
+number
+nunes
+nunez
+nung
+nunn
+nunnally
+nuno
+nunold
+nuntel
+nurettin
+nurhan
+nuri
+nuria
+nurly
+nurmi
+nuttall
+nuvit
+nyaguthi
+nyberg
+nyce
+nydia
+nye
+nyeita
+nyenhuis
+nyland
+nyquist
+nyre
+nys
+nyssa
+o karina
+o'brecht
+o'brian
+o'brien
+o'carrol
+o'colmai
+o'connel
+o'conner
+o'connor
+o'dacre
+o'dale
+o'dea
+o'dell
+o'dohert
+o'donnel
+o'donova
+o'dwyer
+o'farrel
+o'grady
+o'hagan
+o'hara
+o'hearn
+o'heocha
+o'higgin
+o'keefe
+o'keeffe
+o'kelly
+o'leary
+o'malley
+o'meara
+o'murchu
+o'neal
+o'neall
+o'neil
+o'neill
+o'regan
+o'reilly
+o'rourke
+o'shaugh
+o'shea
+o'sulliv
+o'toole
+o_kelly
+oakland
+oakley
+oaks
+oam
+oanes
+oanh
+oastler
+oates
+oaul
+obadiah
+obadias
+obed
+obeda
+obediah
+obeidat
+obenauf
+ober
+oberhamm
+obermeie
+obermeye
+obermyer
+oberon
+oberpril
+obidiah
+obie
+oblak
+obrecht
+obrien
+obrusnia
+oby
+ocampo
+ochman
+ochoa
+ochs
+ocone
+oconnor
+octavia
+octavio
+octavius
+odac
+odden
+ode
+odecki
+oded
+odegaard
+odele
+odelia
+odelinda
+odell
+odella
+odelle
+oden
+odessa
+odetta
+odette
+odey
+odgers
+odie
+odile
+odilia
+odille
+odo
+odum
+ody
+oedipal
+oedipus
+oertelt
+oesterre
+oestreic
+oetting
+oey
+ofcparm
+ofcparms
+ofelia
+ofella
+ofer
+offers
+ofilia
+ogan
+ogborn
+ogburn
+ogdan
+ogden
+ogdon
+ogilvie
+oglesby
+ogrodnik
+ogua
+oguz
+ohala
+ohandley
+ohara
+ohare
+ohashi
+ohio
+ohmaru
+ohmayer
+ohn
+ohsone
+oingres
+oivind
+ojala
+ojerholm
+oka
+okada
+okafo
+okai
+okamoto
+okan
+okay
+oke
+okey
+okon
+okrafka
+oksana
+okseniuk
+oktar
+okun
+okura
+okuyama
+okuzawa
+ola
+olag
+olav
+old
+older
+oldfield
+oldham
+oldright
+ole
+oleesa
+oleksysh
+olenka
+olenolin
+olesen
+olesko
+olga
+olia
+olimpia
+olin
+olinger
+olinyk
+olivares
+olive
+oliveira
+oliver
+olivero
+olivette
+olivia
+olivie
+olivier
+oliviero
+oliy
+olken
+ollie
+olliff
+olly
+olmstead
+olness
+olof
+olsen
+olsheski
+olson
+olszewsk
+olusola
+olva
+olvan
+olwen
+olympe
+olympia
+olympie
+olynyk
+oma
+oman
+omar
+omayma
+omer
+omerine
+omero
+omid
+omori
+omura
+omyeabor
+onassis
+onder
+ondovcik
+ondrea
+oneida
+oneto
+onette
+onfre
+onfroi
+ong
+onge
+onida
+onofredo
+onsitete
+onsy
+onufrak-
+onyshko
+ooi
+oona
+oorschot
+oost
+op
+opal
+opalina
+opaline
+opalski
+open
+oper
+operatio
+operator
+ophelia
+ophelie
+oplinger
+opperman
+ops
+opsplng
+optimiza
+opto
+opus
+ora
+oral
+oralee
+oralia
+oralie
+oralla
+oralle
+oran
+orazio
+orbadiah
+orca
+ord
+ordas
+orden
+orders
+ordog
+ordway
+oreffice
+oreilly
+orel
+orelee
+orelia
+orelie
+orella
+orelle
+oren
+orenzo
+orfano
+orford
+organiza
+orgren-s
+oriana
+orie
+orin
+orion
+orla
+orlan
+orland
+orlando
+orly
+orlyn
+orme
+ormesher
+ormsby
+ornburn
+ornelas
+orol
+oros
+orpheus
+orr
+orran
+orren
+orrin
+orsa
+orser
+orsini
+orsola
+orson
+ortensia
+orth
+ortiz
+orton
+orv
+orville
+orvin
+orwell
+oryal
+osada
+osadciw
+osama
+osami
+osatuik
+osbert
+osborn
+osborne
+osbourn
+osbourne
+osburn
+oscar
+osgood
+oshinski
+oshiro
+osiakwan
+osiris
+oskar
+oskorep
+oslund
+osman
+osmond
+osmund
+osofsky
+ossama
+ossie
+ostapiw
+ostarell
+ostaszew
+oster
+osterber
+osterhou
+osterman
+ostifich
+osvaldo
+oswald
+oswalt
+oswell
+otakar
+otani
+otec
+otes
+otfried
+otha
+othelia
+othella
+othello
+othilia
+othilie
+otho
+othon
+otis
+otmar
+otsuka
+ott
+ottawa
+ottco
+ottcsr
+otter
+ottilie
+otto
+ottoman
+ottosson
+ottowa
+oturakli
+otway
+oucharek
+oue
+ouellet
+ouellett
+ouimet
+ousterho
+outage
+outhwait
+outram
+ouzas
+ovans
+ovas
+overby
+overcash
+overdyke
+overton
+oviedo
+ovila
+owen
+owens
+owensby
+owsiak
+oxendine
+oyama
+oyung
+ozalp
+ozan
+ozay
+ozer
+ozersky
+oziemblo
+oziskend
+ozkan
+ozlem
+ozmizrak
+ozmore
+ozselcuk
+ozyetis
+ozzie
+ozzy
+paar
+pablo
+pac
+pace
+pacey
+pachal
+pacheco
+pachek
+pachner
+pachulsk
+pacific
+packager
+packard
+packston
+paco
+pacon
+pacorro
+paczek
+paczynsk
+paddie
+paddon
+paddy
+paden
+padget
+padgett
+padiath
+padilla
+padiou
+padma
+padmanab
+padraic
+padraig
+padriac
+paerio
+paes
+paetsch
+pafilis
+pagani
+page
+pageau
+paget
+pagi
+paglia
+pagliaru
+pai
+paialung
+paige
+paik
+pail
+paine
+painter
+painters
+pak
+pak-jong
+pak-kin
+pakkin
+paksi
+pakulski
+pal
+palacek
+palamar
+palasek
+palczuk
+palermo
+paley
+palfreym
+palidwor
+paliga
+palik
+paliwal
+pall
+pallab
+pallen
+palm
+palme
+palmer
+paloma
+palomar
+paluso
+pam
+pambianc
+pamela
+pamelina
+pamella
+pammi
+pammie
+pammy
+pamperin
+pan
+panacea
+panagiot
+pancewic
+panch
+panchen
+panchito
+panchmat
+pancho
+pancholy
+pandey
+pandolfo
+pandora
+pandrang
+pandya
+panek
+panesar
+pang-chu
+pangchun
+panger
+pangia
+panizzi
+pankaj
+panke
+pankesh
+pankhurs
+pankiw
+panko
+pankratz
+pannell
+panolil
+panos
+panosh
+pansie
+pansy
+pantages
+pantalon
+pantas
+pantelis
+panter
+panton
+panzer
+pao
+pao-ta
+paola
+paoletti
+paolina
+paolo
+paone
+paota
+papa
+papadopu
+papagena
+papageno
+papageor
+papahadj
+papajani
+papalits
+papanton
+paparell
+pape
+paper
+paperno
+papers
+papiez
+papineau
+papp
+pappas
+papper
+pappu
+paprocki
+paqs
+paquette
+paquin
+paquito
+par
+para
+paracha
+paradis
+paradise
+parasili
+pardeep
+pardi
+pardip
+pardo
+parekh
+paresh
+parham
+parhi
+parichay
+parihar
+parikh
+paris
+parise
+parisen
+parisi
+parisien
+park
+parkash
+parke
+parker
+parker-s
+parkes
+parkhill
+parkin
+parkins
+parkinso
+parks
+parkson
+parlett
+parmakse
+parman
+parmar
+parmente
+parmigia
+parminde
+parn
+parnas
+parnell
+parniani
+parnigon
+parow
+parr
+parra
+parrilli
+parrillo
+parris
+parrish
+parrish-
+parrnell
+parrott
+parry
+pars
+parsifal
+parsloe
+parsons
+part
+partap
+partello
+partha
+parthasa
+partick
+partin
+partlo
+parton
+partovi
+paruleka
+parveen
+parvin
+parviz
+paryag
+parypa
+pas
+pascael
+pascal
+pascale
+pascali
+pascas
+paschall
+pasher
+pashia
+pashmine
+pasiedb
+pasquale
+passier
+passin
+pasterna
+pastore
+pastorek
+pastuszo
+pasvar
+pat
+patacki
+patadm
+patch
+patchcor
+patches
+patchett
+patching
+patchit
+patchor
+patchsqa
+patcor
+pate
+patel
+paten
+patenaud
+paterson
+patey
+pathak
+patience
+patin
+patner
+pato
+patoka
+paton
+patoskie
+patra
+patriarc
+patric
+patrica
+patrice
+patrice-
+patricem
+patrici
+patricia
+patricio
+patrick
+patrizia
+patrizio
+patriziu
+patry
+patsy
+patt
+patte
+patten
+patterso
+patteson
+patti
+pattie
+pattin
+pattison
+patton
+pattra
+pattullo
+patty
+patwardh
+pau
+paul
+paula
+paulas
+paule
+paulett
+pauletta
+paulette
+pauley
+paulhus
+pauli
+paulich
+paulie
+paulien
+paulin
+paulina
+pauline
+pauling
+paulinus
+paulita
+paulk
+paulo
+paulovic
+paulus
+pauly
+paunins
+pautenis
+pavan
+pavel
+pavia
+pavitt
+pavla
+pavlic
+pavlov
+pavlovic
+pawel
+pawelchu
+pawlikow
+pawliw
+paxon
+paxton
+paye
+payette
+paylor
+payn
+payne
+paynter
+payroll
+payton
+pazos
+pbkim
+pbx
+pcboards
+pcbtools
+pcsuppor
+pcta
+pde
+pdesuppo
+peabody
+peacemak
+peach
+peacocke
+peadar
+peake
+pearce
+pearcy
+pearl
+pearla
+pearle
+pearline
+pearse
+pearson
+peart
+peate
+peaugh
+peavoy
+pebrook
+pecic
+peckel
+peckett
+peder
+pederson
+pedigo
+pedley
+pedneaul
+pedram
+pedriana
+pedro
+peebles
+peedin
+peerman
+peers
+peeters
+peets
+peg
+pegasus
+pegeen
+peggi
+peggie
+peggy
+pegler
+pehong
+pei-chie
+pei-ling
+peiling
+peirce
+peiser
+peixoto
+peleato
+pelegri
+pelissie
+pelkie
+pell
+pelland
+pellegri
+pelletie
+pellizza
+pellizze
+pelly
+pelosi
+pelot
+pelton
+peluso
+pelz
+pembroke
+pen
+pen-mi
+pen-min
+pena
+pena-fer
+penang
+pendergr
+pendhark
+pendleto
+penelopa
+penelope
+penfield
+peng
+peng-dav
+penland
+penmi
+penmin
+penn
+pennebak
+pennell
+penner
+penney
+penni
+pennie
+penninge
+penningt
+penny
+penrod
+penrose
+pension
+peon
+peoples
+pepc
+pepe
+pepi
+pepillo
+pepin
+pepita
+pepito
+pepler
+pepper
+pepple
+peptis
+per
+pera
+peralta
+perazzin
+perceval
+perchtho
+percival
+percy
+peregrin
+pereira
+perenyi
+perez
+perfetti
+peri
+peria
+pericak
+perice
+pericles
+perina
+perkin
+perkins
+perkinso
+perl
+perla
+perle
+perleber
+perlmutt
+pernell
+perng
+perona
+peroxra
+perras
+perrault
+perreaul
+perrella
+perren
+perri
+perrier
+perrin
+perrine
+perron
+perrotta
+perry
+perryman
+perryno
+persaud
+perschke
+persechi
+pershing
+persis
+personna
+peschke
+pesik
+pesold
+pestill
+pet
+peta
+petar
+pete
+peter
+peterman
+peters
+petersen
+peterson
+peterus
+petey
+petillio
+petr
+petra
+petrakia
+petras
+petre
+petrea
+petree
+petrescu
+petretta
+petrey
+petri
+petrick
+petrie
+petrina
+petrinac
+petro
+petronel
+petronia
+petronil
+petrovic
+petruck
+petrunew
+petrunka
+petschen
+petter
+pettinge
+pettitt
+petunia
+petzold
+pevec
+pevzner
+pewitt
+pey-kee
+peyman
+peyter
+peyton
+pezzoli
+pezzoni
+pezzullo
+pfeffer
+pfeilsch
+pfieffer
+pfifferl
+pfitzner
+pflughau
+phaedra
+phagan
+phaidra
+phair
+phal
+phalen
+phalpher
+pham
+phan
+pharr
+pharris
+phat
+phebe
+phedra
+phelan
+phelia
+phelps
+phifer
+phil
+philbeck
+philbert
+philion
+philip
+philipa
+philippa
+philippe
+philippi
+philippo
+philips
+philis
+phill
+phillida
+phillie
+phillip
+phillipe
+phillipp
+phillips
+phillis
+philly
+philomen
+philp
+phineas
+phip
+phipps
+phiroze
+phoebe
+phoenix
+phonenet
+phong
+phoung
+phu
+phuc
+phung
+phuoc
+phuong
+phuong-l
+phuongli
+phyl
+phylis
+phyllida
+phyllis
+phyllys
+phylys
+physical
+pi-yu
+pia
+piasecki
+piatt
+pic
+picard
+piche
+pichocki
+pick
+pickens
+pickett
+pickles
+piecaiti
+piecowye
+piel
+pien
+pier
+piercarl
+pierce
+piercey
+piercy
+pierette
+piero
+pieron
+pierosar
+pieroway
+pierre
+pierre-a
+pierre-h
+pierre-m
+pierre-y
+pierret
+pierrett
+pierrick
+piersol
+pierson
+piete
+pieter
+pietra
+pietrek
+pietro
+pietromo
+pietropa
+pietrzak
+piette
+pifko
+piggott
+piggy
+pighin
+pigniczk
+piitz
+pilar
+pilch
+pilcher
+pilip
+pilipchu
+pilkingt
+pillars
+pillman
+pillswor
+pilmoor
+pilon
+pilot
+pilote
+pilotte
+piltz
+pim
+pimentel
+pimisker
+pimpare
+pimsiree
+pinakin
+pinalez
+pinar
+pincas
+pinchas
+pincheir
+pinchen
+pincus
+pinder
+pindur
+pineau
+pinecres
+pineda
+pinel
+ping
+ping-cha
+ping-kon
+ping-she
+pingchar
+pingkai
+pingshen
+pinizzot
+pinkerto
+pinnegar
+pinney
+pino
+pinren
+pinsonne
+pintado
+pinto-lo
+pintwala
+piotr
+piotto
+pip
+piper
+piperni
+piperno
+pipit
+pipkins
+pippa
+pippert
+pippin
+pippo
+pipponzi
+pippy
+piqueras
+piraino
+pircher
+pires
+pirkey
+pirkle
+pirolli
+pirooz
+piroska
+pirzada
+pisani
+pisheng
+piske
+pissot
+pister
+pistilli
+pit
+pitawas
+pitcairn
+pitcavag
+pitcher
+pitre
+pitt
+pittam
+pittges
+pittman
+pittner
+pitton
+pitts
+pittsbur
+pituley
+pivert
+piwkowsk
+pixie
+piyasena
+piyathad
+piyu
+piyush
+pizzanel
+pizzarel
+pizzimen
+pkdcd
+pkg
+placido
+plaic
+plaisanc
+plaisant
+plambeck
+plamondo
+planas
+planche
+plantamu
+plante
+planthar
+planting
+plaskie
+plasse
+plastic
+plastina
+plater-z
+plato
+platt
+platthy
+platts
+playatun
+please d
+plenderl
+plett
+plevyak
+pleydon
+plmcoop
+ploeg
+ploof
+plotter
+plouffe
+plourde
+plsntp
+plssup
+plucinsk
+plummer
+pluto
+plyler
+po
+po-rong
+po-yi
+podlesna
+podmarof
+podolski
+poe
+poettcke
+poff
+poh-soon
+pohlmann
+poincare
+poindext
+pointner
+poirier
+poissant
+poisson
+pojanart
+pokinko
+pokrifca
+pokrywa
+pokusay
+polak
+polakows
+polanco
+polashoc
+polder
+poldi
+poleretz
+poley
+poliwoda
+polk
+polla
+pollack
+pollard
+pollie
+pollinzi
+pollux
+polly
+pollyann
+pols
+polsha
+polson
+poluchow
+polulack
+pom
+poma
+pomerlea
+pomeroy
+pommainv
+pompeo
+pomposel
+pon
+ponamgi
+ponthieu
+pontus
+poobah
+pooh
+pookie
+poole
+poon
+poorman
+popa
+popadick
+popcorn
+popel
+popela
+popescu
+popierai
+popoff
+popovich
+popovics
+popowicz
+popowycz
+popp
+poppa
+popper
+poppy
+porebski
+porecha
+porfirio
+porong
+port
+portelan
+porter
+porterfi
+portia
+portie
+portigal
+porting
+portis
+portwood
+porty
+portz
+pory
+posavad
+poseidon
+poshiu
+pospisil
+posta
+postavsk
+posthumu
+postleth
+postolek
+potamian
+potesta
+potkonja
+potocki
+potter
+pottle
+potts
+potvin
+pouhyet
+poul
+poulin
+pouliot
+poulos
+poulsen
+poulter
+poustchi
+powell
+power
+powers
+powlick
+pownall
+powney
+poyer
+poyi
+poyner
+poynting
+pozzi
+ppaul
+prab
+prabaddh
+prabhaka
+prabhu
+prabir
+prachaya
+pracht
+prada
+pradeep
+pradip
+pradnyan
+prado
+pradyumn
+praeuner
+prafula
+pragna
+prakash
+pramod
+prams
+pranav
+prang
+prasad
+prasada
+prasanna
+prashad
+prashant
+prashaw
+pratap
+pratapwa
+pratibha
+pratt
+prattico
+pravato
+praveen
+pravin
+praxis
+praysner
+prayson
+prchal
+precoda
+predel
+predon
+preece
+prelims
+prem
+pren
+prent
+prentice
+prentiss
+preo
+prescott
+presgrov
+presley
+presner
+presotto
+pressbur
+presson
+presti
+prestia
+prestipi
+preston
+preston-
+prestrud
+presutti
+preuss
+prevatt
+preville
+previn
+prevost
+prewitt
+pria
+pribhu
+price
+prichard
+pricing
+prickett
+pridgen
+priede
+priestle
+prikkel
+primeau
+prince
+pringle
+print
+printers
+printing
+prints
+printsup
+prinz
+priore
+pris
+prisca
+priscell
+priscill
+prissie
+pritchar
+prithvi
+priti
+prity
+privett
+priviter
+priya
+probert
+problems
+probs
+procacci
+procca
+procner
+procter
+prodmfg
+prodmgmt
+producti
+prof
+proffit
+prog
+program
+program-
+proj
+projects
+projofc
+prokes
+prokop
+prokopen
+promac
+propes
+prosise
+prosperi
+pross
+prosyk
+prototyp
+proudfoo
+proulx
+provenca
+provench
+pru
+prudence
+prudi
+prudy
+prue
+pruett
+pruitt
+prunier
+prupis
+prybyla
+pryce
+prymack
+pryor
+prystie
+pryszlak
+przewloc
+przybyci
+psce
+pseudony
+psklib
+psutka
+ptefs
+ptolemy
+publicat
+pubs
+puchala
+puckett
+puddingt
+pue-gilc
+puelma
+puent
+puett
+puetz
+puff
+pufpaff
+pugas
+pugh
+puglia
+pui-wah
+pujara
+pulak
+pulcher
+pulcine
+pulitzer
+pullan
+pullum
+pulver
+punch
+pundyk
+puneet
+pung
+punsalan
+puran
+purcell
+purchasi
+purdy
+purgerso
+puringto
+purnam
+purnell
+purnima
+purohit
+purposes
+purshott
+purson
+puryear
+pushelbe
+pusun
+pusztai
+putman
+putnam
+putnem
+puukila
+pye
+pyle
+pyles
+pyng
+pyong
+pyotr
+pyron
+python
+qadir
+qadri
+qainfo
+qainsp
+qi-de
+qide
+qihan
+qiming
+qin
+qing
+qing-hui
+qinghui
+qingyan
+qiuyun
+qizhong
+qu
+quabidur
+quality
+quan
+quane
+quang
+quang-tr
+quante
+quantril
+quarles
+quarterm
+quattruc
+quayle
+queenie
+quek
+quelch
+quennevi
+quensett
+quent
+quentin
+querenge
+querida
+queries
+quesnel
+questell
+quevillo
+quigley
+quijano
+quill
+quillan
+quilty
+quincey
+quincy
+quinhon
+quinlan
+quinn
+quinones
+quint
+quinta
+quintana
+quintero
+quintill
+quintin
+quintina
+quinton
+quintus
+quinz
+quite a
+quixote
+quizmast
+quoc
+quoc-vu
+quocanh
+quoi
+quon
+qureshi
+quyen
+quynh
+raab
+raaf
+raaflaub
+raanan
+rab
+rabadi
+rabaglia
+rabatich
+rabbi
+rabecs
+rabenste
+rabi
+rabiasz
+rabie
+rabin
+rabipour
+rabjohn
+rabon
+rabzel
+racette
+rachael
+rached
+rachel
+rachele
+rachelle
+rachmani
+racicot
+racine
+racioppi
+racz
+rad
+radames
+radcliff
+raddalgo
+raddie
+raddy
+radek
+radford
+radha
+radick
+radio
+radko
+radojici
+radomir
+radoslav
+radovnik
+radulovi
+radvanyi
+rae
+raeann
+raejean
+raf
+rafa
+rafael
+rafaela
+rafaelia
+rafaelit
+rafaelll
+rafaello
+rafe
+rafek
+raff
+raffaell
+raffarty
+rafferty
+raffi
+rafflin
+rafi
+rafik
+rafiq
+rafol
+rafols
+rafter
+raftery
+ragan
+ragbir
+ragde
+raghav
+raghava
+raghavan
+ragheb
+raghu
+raghunat
+raghuvir
+ragland
+raglin
+ragnar
+ragsdale
+ragu
+ragui
+raha
+rahal
+rahardja
+rahdar
+rahel
+rahimtoo
+rahm
+rahman
+rahmani
+rahmany
+rahmatal
+rahn
+rahrer
+rahul
+raicu
+raif
+raigwell
+raila
+railey
+raimondo
+raimund
+raimundo
+raina
+raine
+rainer
+raines
+rainey
+raing
+rainmake
+rains
+rainsfor
+raissian
+raiswell
+raj
+raja
+rajadasa
+rajagopa
+rajala
+rajan
+rajani
+rajanika
+rajapaks
+rajarshi
+rajat
+rajcher
+rajchgod
+rajchwal
+rajczi
+rajeev
+rajen
+rajendra
+rajesh
+rajeswar
+rajguru
+rajinder
+rajini
+rajiv
+raju
+rajwani
+rakeim
+rakel
+raker
+rakesh
+rakhal
+rakhuma
+rakochy
+rakotoma
+raleigh
+raley
+ralf
+rali
+ralina
+ralph
+ralston
+ram
+rama
+ramachan
+ramadoss
+ramage
+ramah
+ramakant
+ramakesa
+ramakr
+ramakris
+ramamoor
+raman
+ramana
+ramanamu
+ramanan
+ramanand
+ramanath
+ramani
+ramaprak
+ramarao
+ramaswam
+rambo
+rambow
+ramee
+ramesh
+ramey
+ramez
+rami
+ramin
+ramirez
+ramirez-
+ramiro
+ramiz
+ramkisso
+ramkumar
+ramlogan
+ramnarin
+ramneek
+ramnikla
+ramon
+ramona
+ramonda
+ramondt
+ramos
+rampaul
+rampino
+ramroop
+ramsaran
+ramsay
+ramsayer
+ramsden
+ramses
+ramsey
+ramseyer
+ramzi
+ramzy
+ran
+ran-joo
+rana
+ranahan
+ranald
+ranbir
+rance
+rancell
+rand
+randa
+randal
+randall
+randecke
+randee
+randel
+randell
+randene
+randhawa
+randhir
+randi
+randie
+randolf
+randolph
+randy
+ranea
+ranee
+ranette
+raney
+ranga
+rangan
+ranganad
+ranganat
+rangasam
+rangaswa
+rangchen
+rangel
+ranger
+rangooni
+rani
+rania
+ranice
+ranieri
+ranique
+ranjan
+ranjit
+rank
+rankin
+ranna
+rannells
+ranney
+ranoa
+ranoska
+ransell
+ransom
+ranson
+rantala
+ranvir
+rao
+raouf
+raoul
+raphael
+raphaela
+rappopor
+raquel
+raquela
+rasberry
+raschig
+rashed
+rashedi
+rashid
+rashid-a
+rashidah
+rashidi
+rashmi
+rasia
+rasla
+rasmus
+rasmusse
+rasselas
+rassell
+rastelli
+rastogi
+ratcliff
+rathbun
+rathnaku
+ratko
+ratnam
+ratnayak
+rattanap
+rattray
+ratz
+rau
+raud
+raudres
+rauen
+raul
+rausa
+rausch
+raven
+raves
+ravi
+ravid
+ravinder
+ravindra
+raviv
+ravji
+rawley
+rawnoi
+raxter
+ray
+rayan
+raychel
+raye
+rayl
+rayleigh
+rayment
+raymona
+raymond
+raymund
+rayna
+raynald
+raynard
+raynell
+rayner
+raynor
+rayshell
+raz
+razavi
+rccl
+rch
+rchisn
+rchlab
+rea
+read
+reade
+reader
+readling
+readme 3
+reagan
+reagen
+real
+realtime
+reamonn
+rean
+reates
+reaume
+reaves
+reavis
+reba
+rebbecca
+rebe
+rebeca
+rebecca
+rebecka
+rebeka
+rebekah
+rebekkah
+rebel
+rec
+recabarr
+receivin
+rechelle
+reckhard
+recktenw
+records
+recsnik
+recyclin
+red
+reda
+redbeard
+redd
+reddick
+reddigan
+redding
+reddingt
+reddy
+redfoot
+redford
+redgie
+redinbo
+redish
+redman
+redmond
+redshaw
+redway
+ree
+reeba
+reece
+reed
+reeder
+reena
+rees
+reese
+reeta
+reetz
+reeva
+reeve
+reeves
+refat
+refuerzo
+reg
+rega
+regan
+rege
+regen
+reggi
+reggie
+reggis
+reggy
+regier
+regimbal
+regina
+reginald
+reginaul
+regine
+reginia
+regis
+register
+regnier
+rego
+rehbein
+rehder
+rehel
+reich
+reichenb
+reiching
+reichman
+reichow
+reid
+reidar
+reidelbe
+reider
+reif
+reifschn
+reijerke
+reiko
+reilly
+reiman
+reimann
+reimburs
+rein
+reina
+reinald
+reinaldo
+reinboth
+reind
+reine
+reiner
+reinhard
+reinhold
+reinink
+reinke
+reinlie
+reinman
+reinold
+reinwald
+reis
+reiser
+reiss
+reist
+reiter
+reitfort
+reith
+reitling
+rejean
+rejeanne
+reka
+rekowski
+relation
+reller
+rem
+rembecki
+rembish
+remedios
+remers
+remi
+remillar
+remingto
+remitha
+remo
+remon
+remrey
+remson
+remus
+remy
+ren
+rena
+renado
+renae
+renaldo
+renard
+renata
+renate
+renato
+renaud
+renault
+rendell
+rendon
+rene
+rene-ala
+reneau
+renee
+renell
+renelle
+renema
+renette
+renfro
+renfroe
+renganat
+renie
+renita
+renken
+renmarie
+renner
+rennie
+rennolds
+renny
+reno
+renoir
+renold
+renton
+renu
+renwick
+repair
+repeta
+reportin
+reports
+requel
+requests
+research
+resende
+resnick
+ress
+ressner
+rester
+restore
+restrepo
+results
+resve
+reta
+retallac
+retallic
+retha
+rettie
+reube
+reuben
+reubens
+reuss
+reuven
+reva
+revah
+revelle
+revill
+revis
+revkah
+rewitzer
+rex
+rexford
+rexroad
+rey
+reyad
+reyaud
+reydman
+reyes
+reyna
+reynaldo
+reynard
+reynold
+reynolds
+reza
+rezaian
+rezansof
+rezneche
+reznick
+reznik
+rezzik
+rfa
+rfeynman
+rff
+rhattiga
+rhea
+rheal
+rheault
+rheaume
+rheba
+rheta
+rhett
+rhetta
+rhew
+rhiamon
+rhianna
+rhianon
+rhine
+rhoades
+rhoads
+rhoda
+rhodeniz
+rhodes
+rhodia
+rhodie
+rhodri
+rhody
+rhona
+rhonda
+rhough
+rhyndres
+rhys
+rhyu
+ri
+ria
+riad
+rialland
+riane
+riannon
+rianon
+riaz
+ribakovs
+ribaldo
+ribi
+ribordy
+ribot
+ric
+rica
+ricard
+ricardo
+ricca
+riccardo
+riccitel
+ricciuto
+rice
+rich
+richad
+richard
+richardo
+richards
+richart
+richelle
+richer
+richey
+richie
+richlark
+richman
+richmond
+richmoun
+richter
+richy
+rici
+rick
+rick-jan
+rickard
+rickborn
+rickel
+ricker
+rickert
+ricketso
+ricketts
+rickey
+ricki
+rickie
+rickjan
+rickrd
+ricks
+ricky
+rico
+ricoriki
+riddall
+ridder
+riddick
+rider
+ridge
+ridgeway
+ridgewel
+ridgway
+ridha
+ridley
+riebl
+ried
+riedel
+riehle
+riekie
+rieko
+rieni
+rigby
+rigdon
+rigel
+riggins
+riggs
+riggsbee
+righter
+rightmir
+rigobert
+rigsbee
+rigstad
+rijn
+rijos
+rijswijk
+rik
+riki
+rikki
+rikley
+riley
+rilla
+rima
+rimantas
+rimey
+riml
+rimmler
+rimsa
+rina
+rinaldo
+rinawi
+ring
+ringo
+rini
+rintala
+rintel
+rintoul
+rio
+riobard
+riopel
+riopelle
+riordan
+rios
+riou
+rioux
+rip
+ripa
+ripley
+risa
+risdal
+risher
+rishy-ma
+risko
+risler
+rist
+risto
+rita
+ritalynn
+ritchey
+ritchie
+ritenour
+rittenho
+ritter
+rittmann
+ritz
+ritza
+ritzmann
+riva
+rivaherr
+rivalee
+rivard
+rivera
+rivers
+rivest
+rivi
+rivkah
+rivy
+rix
+riyad
+riyaz
+rizal
+rizewisk
+rizk
+rizky
+rizwan
+rizzardi
+rizzo
+rizzuti
+rk
+rnashcro
+ro
+roana
+roanna
+roanne
+roarke
+rob
+robann
+robart
+robb
+robbert
+robbi
+robbie
+robbin
+robbins
+robby
+robbyn
+robeling
+robena
+robenia
+roberge
+robers
+roberson
+robert
+roberta
+roberto
+roberts
+robertso
+robieux
+robillar
+robin
+robina
+robinet
+robinett
+robinia
+robins
+robinson
+robinwil
+robitail
+robles
+robling
+robney
+robson
+robustne
+roby
+robyn
+rocco
+roch
+roche
+rochell
+rochella
+rochelle
+rocheste
+rochette
+rochon
+rocio
+rock
+rocke
+rockey
+rockford
+rockie
+rockley
+rockly
+rockwell
+rocky
+rod
+roda
+rodd
+roddick
+roddie
+roddy
+rodely
+roden
+rodenfel
+rodenhui
+rodent
+roderic
+roderich
+roderick
+roderigo
+rodge
+rodger
+rodgers
+rodgin
+rodi
+rodie
+rodina
+rodkey
+rodney
+rodolfo
+rodolph
+rodolphe
+rodrick
+rodrigo
+rodrigue
+rodrigus
+rodrique
+rodschat
+roe
+roebling
+roedel
+roehl
+roehrig
+roel
+roelof
+roelofs
+roemer
+roerick
+roesler
+roeten
+rog
+rogan
+rogelio
+roger
+rogerio
+rogers
+roget.wo
+rogge
+rogne
+rogness
+rognlie
+rogoff
+rogue
+rohal
+rohan
+rohe
+rohit
+rohtert
+roi
+roieh
+roig
+rois
+roithmai
+roj
+rojas
+rojer
+rok
+rokas
+roland
+rolande
+rolando
+roldan
+roleson
+roley
+rolf
+rolfe
+rolfes
+rolland
+rollie
+rollin
+rollins
+rollinso
+rollo
+rolls
+rolly
+rolnick
+rolph
+rolston
+roly
+rolyn
+roma
+romagnin
+romain
+roman
+romanchu
+romani
+romano
+romanows
+rombeek
+romberg
+rombough
+romeo
+romero
+romi
+romina
+rommel
+rommell
+romola
+romolo
+romona
+romonda
+romulus
+romy
+ron
+rona
+ronaald
+ronak
+ronald
+ronalda
+ronaldo
+ronalds
+ronaldso
+ronan
+ronda
+rondeau
+ronen
+ronendra
+roney
+rong
+rong-che
+rong-chi
+rong-jen
+rong-jwy
+rongchei
+ronghui
+rongjen
+rongjwyn
+roni-jea
+ronica
+ronitt
+ronkus
+ronn
+ronna
+ronneke
+ronni
+ronnica
+ronnie
+ronny
+roob
+roobbie
+roohy-la
+rooney
+roosevel
+root
+roots
+roozbeh
+roper
+roque
+rora
+rori
+rorie
+rorke
+rory
+ros
+rosa
+rosabel
+rosabell
+rosado
+rosaleen
+rosalia
+rosalie
+rosalind
+rosaline
+rosalyn
+rosalynd
+rosamond
+rosamund
+rosana
+rosanna
+rosanne
+rosario
+rosch
+rosche
+rosco
+roscoe
+rose
+roseann
+roseanna
+roseanne
+rosebud
+roseland
+roselia
+roselin
+roseline
+rosella
+roselle
+rosemari
+rosemary
+rosemond
+rosen
+rosenbau
+rosenber
+rosenblu
+rosendal
+rosene
+rosenfel
+rosenqui
+rosentha
+roser
+rosetta
+rosette
+rosewell
+rosey
+roshelle
+rosie
+rosien
+rosina
+rosita
+roski
+rosko
+roslyn
+rosmunda
+rospars
+ross
+ross-ada
+ross-ros
+rossanes
+rosser
+rossi
+rossie
+rossigno
+rossingt
+rosson
+rossy
+rosvick
+rosy
+roszko
+rotenber
+roth
+rothamel
+rothey
+rothwell
+rotondo
+rotzjean
+rouer
+rouhad
+rouleau
+roulez
+roundy
+roupen
+rourk
+rourke
+rous
+rousseau
+rousset
+roussier
+roussin
+roussy
+routhier
+routing
+rouvin
+row
+rowan
+rowatt
+rowe
+rowell
+rowen
+rowena
+rowhani
+rowland
+rowlands
+rowley
+rowney
+rowsell
+roxana
+roxane
+roxanna
+roxanne
+roxi
+roxie
+roxine
+roxy
+roy
+roya
+royal
+royall
+royals
+royce
+roychowd
+royden
+royer
+royle
+royster
+roz
+rozaini
+rozalia
+rozalie
+rozalin
+rozamond
+rozanna
+rozanne
+roze
+rozele
+rozella
+rozelle
+rozen
+rozett
+rozier
+rozin
+rozina
+rozon
+rozumna
+rriocard
+rtingres
+rtp
+rtpbuild
+rtprel
+rtprelb
+ru
+ruane
+ruaud
+ruban
+rubanovi
+rube
+ruben
+rubens
+rubenste
+rubetta
+rubi
+rubia
+rubie
+rubin
+rubina
+rubinfel
+rubinov
+rubinste
+rubio
+ruby
+ruchel
+ruchi
+ruck
+ruckman
+rud
+rudd
+ruddell
+ruddick
+ruddie
+ruddle
+ruddy
+rudell
+rudi
+rudiak
+rudich
+rudie
+rudiger
+rudin
+rudis
+rudisill
+rudolf
+rudolfo
+rudolph
+rudy
+rudyard
+rudzinsk
+rudzitis
+rueben
+ruecha
+ruediger
+ruel
+ruest
+ruetz
+ruey
+rufe
+ruffolo
+rufino
+rufus
+rugg
+ruggiero
+rui
+rui-tao
+rui-yuan
+ruigrok
+ruitao
+ruiz
+rumley
+rummans
+rummel
+rummell
+runciman
+rundle
+rundstei
+rungroj
+runkel
+runnels
+running
+runyon
+ruoh-chy
+ruohchyu
+rupa
+rupert
+ruperta
+ruperto
+rupnow
+rupp
+ruppert
+ruprecht
+ruqiang
+rurick
+rurik
+rusch
+ruschmei
+rushing
+rushmore
+rushton
+rusin
+ruspini
+russ
+russel
+russell
+russett
+rustie
+rustin
+rustu
+rusty
+rutger
+ruth
+ruthann
+ruthanne
+ruthart
+ruthe
+rutherfo
+ruthi
+ruthie
+ruthy
+rutland
+rutledge
+rutt
+ruttan
+rutter
+ruttger
+rutulis
+rutyna
+ruud
+ruy
+ruyant
+ruyle
+ruzicka
+ruzycki
+ryall
+ryals
+ryan
+ryann
+rybczyns
+rycca
+ryce
+rychlick
+ryde
+ryder
+rydhan
+ryerson
+rygwalsk
+rykwalde
+ryley
+rylott
+ryman
+rymkiewi
+rynders
+rynties
+ryohei
+ryon
+ryoung
+ryszard
+ryun
+rzepczyn
+sa'id
+saad
+saake
+saal
+saatciog
+saavedra
+saba
+sabadash
+sabah
+sabanaya
+sabat
+sabatell
+sabatini
+sabatino
+sabbagh
+saber
+saberi
+sabety
+sabiha
+sabin
+sabina
+sabine
+sabo
+sabol
+sabooria
+sabourin
+sabra
+sabri
+sabrina
+sabry
+sabuson
+sabzali
+sacarell
+sacchett
+sacha
+sachidul
+sachiko
+sachindr
+sachs
+sacks
+sacto
+sada
+sadan
+sadath
+sadegh
+sadeghi
+sadella
+sadie
+sadler
+sadorra
+sadowska
+sadoyama
+sadri
+sadroudi
+sadru
+sadye
+saed
+saeed
+saeid
+safaa
+safah
+safinia
+sagan
+sage
+sager
+sagers
+sagris
+saha
+sahay
+sahib
+sahinalp
+sahli
+saibal
+saibun
+said
+saidee
+saidzade
+saied
+saifalla
+saifulla
+saify
+saiid
+saikaley
+sails
+saini
+sainsbur
+saisho
+sait
+saito
+saitoh
+saiyed
+sakaguch
+sakai
+sakamaki
+sakauye
+sakus
+sal
+salada
+saladna
+salah
+salaidh
+salam
+salamon
+salapek
+salazar
+salb
+salcudea
+saldanha
+saleem
+saleh
+salehi
+salem
+salembie
+salemi
+sales
+salgado
+salhany
+salibi
+salim
+salim-ya
+salimi
+salina
+salinas
+salis
+salkilld
+salkini
+salkok
+salladay
+salle
+sallee
+sallehud
+salli
+sallie
+sally
+sallyann
+salmon
+saloma
+salome
+salomi
+salomo
+salomon
+salomone
+salsbery
+saltamar
+salter
+saltside
+salva
+salvador
+salvato
+salvator
+salvidor
+salvin
+salwa
+salyer
+salyniuk
+salzillo
+sam
+samac
+samalot
+saman
+samantha
+samara
+samaratu
+samaria
+samaroo
+sambar
+sambi
+sambo
+sameh
+samhaber
+sami
+samia
+samieian
+samir
+sammie
+sammon
+sammons
+sammy
+samora
+sampalea
+sampat
+sampath
+samples
+sampson
+sampson-
+samshixu
+samson
+samsonen
+samual
+samuel
+samuele
+samy
+sanaa
+sanabria
+sanae
+sanand
+sanborn
+sanche
+sanchez
+sancho
+sanda
+sandberg
+sandburg
+sande
+sandeep
+sandell
+sander
+sanders
+sanderso
+sandford
+sandhar
+sandhu
+sandhya
+sandi
+sandie
+sandifor
+sandip
+sandison
+sandiway
+sandler
+sandlfor
+sandner
+sandness
+sandor
+sandra
+sandre
+sandrine
+sandro
+sandrock
+sandy
+sandye
+sanford
+sanford-
+sang
+sang-mau
+sang-woo
+sangbong
+sangha
+sanghami
+sangho
+sangiova
+sangman
+sangwook
+sanh
+sanity
+sanja
+sanjay
+sanjeet
+sanjeev
+sanjib
+sanjiv
+sanjiva
+sanjoy
+sankey
+sanks
+sanoy
+sanramon
+sanschag
+sansom
+sanson
+sansone
+santa
+santabar
+santella
+santi
+santiago
+santiest
+santitor
+santo
+santos
+santosh
+sanzone
+sapena
+saphir
+sapphira
+sapphire
+saqib
+sara
+sara-ann
+saraann
+sarah
+sarajane
+saran
+saran-br
+sarangar
+sarasina
+sarath
+saravano
+sarawath
+sarbutt
+saree
+sarena
+sarene
+sarette
+sarge
+sargent
+sargeson
+sari
+sarin
+sarina
+sarine
+sarioglu
+sarita
+sarkari
+sarlos
+sarma
+sarna
+saroj
+sarracin
+sarrasin
+sarrazin
+sarsh
+sarson
+sartin
+sartiran
+sarto
+sartor
+sarubbi
+sasaki
+sascha
+sasha
+sashenka
+sashi
+sasinows
+sask
+saskia
+sasore
+sassan
+sassine
+sasson
+sastry
+saswata
+sathe
+sati
+satin
+satis
+satish
+satkamp
+satkunas
+sato
+satoh
+satoshi
+satta
+sattar
+satterfi
+sattler
+satya
+satyajit
+satyanar
+saucerma
+sauck
+sauder
+saudra
+sauer
+saul
+saulnier
+sauls
+saumitra
+saumure
+saumya
+sauncho
+saunder
+saunderc
+saunders
+saundra
+saungika
+sauprobo
+sauvagea
+sauve
+sauveur
+savadkou
+savanh
+savard
+savarimu
+savaryeg
+savina
+savino
+savita
+savo
+savoie
+savoj
+savoula
+saw
+sawada
+saward
+sawaya
+sawchuk
+sawczyn
+sawita
+sawsan
+sawyer
+sawyere
+sawyers
+sax
+saxe
+saxena
+saxon
+say
+sayar
+sayed
+sayeeda
+sayegh
+sayer
+sayers
+sayla
+sayre
+sayres
+scalabri
+scalera
+scales
+scammerh
+scamurra
+scandret
+scanga
+scanlan
+scanlon
+scapin
+scarboro
+scarbrou
+scarface
+scarffe
+scarlet
+scarlett
+scarrow
+scatena
+scates
+schaap
+schacham
+schachtl
+schack
+schadan
+schaefer
+schafer
+schaffel
+schaffer
+schallen
+schaller
+schallio
+schanck
+schank
+schanne
+scharf
+schartma
+schatzbe
+schauer
+schavo
+schavone
+schechtm
+scheck
+scheckle
+schecter
+schedule
+scheduli
+scheer
+scheffle
+scheible
+scheidt
+scheifel
+schejbal
+schell
+schellen
+schembri
+schemena
+schenck
+schendel
+schenk
+schenkel
+schepps
+scherbin
+scherer
+schermer
+scherzin
+schesvol
+scheuerm
+schick
+schieber
+schiefer
+schiegl
+schierba
+schill
+schiller
+schillin
+schiltz
+schinkel
+schipper
+schireso
+schirmer
+schirtzi
+schissel
+schittl
+schlacht
+schlagen
+schlange
+schledwi
+schlegel
+schlemme
+schlicht
+schloboh
+schluter
+schmadtk
+schmeder
+schmeing
+schmeler
+schmelze
+schmidt
+schmitig
+schmitt
+schmitz
+schmoe
+schnacke
+schnaith
+schneide
+schnell
+schnirer
+schnob
+schnupp
+schnurma
+schober
+schoch
+schoen
+schoener
+schoenfe
+schoenin
+schoenli
+schoettl
+schofiel
+scholes
+scholey
+scholman
+scholtz
+schonber
+schooley
+schopenh
+schousbo
+schouwen
+schrader
+schrag
+schrage
+schram
+schraner
+schrang
+schreibe
+schreier
+schreife
+schreine
+schrier
+schroede
+schroer
+schroff
+schruefe
+schrupp
+schrybur
+schubert
+schuck
+schucker
+schuddeb
+schuett
+schuette
+schuld
+schulte
+schultz
+schultze
+schulz
+schulze
+schumach
+schumann
+schuster
+schute
+schutte
+schutz
+schuyler
+schvan
+schwab
+schwader
+schwalba
+schwane
+schwante
+schwartz
+schwarz
+schwenk
+schyndel
+schyving
+scibek
+scif
+scissons
+scodras
+scomello
+sconzo
+scooter
+scorpio
+scorziel
+scot
+scott
+scotti
+scottie
+scottjop
+scottt
+scotty
+scournea
+scovell
+scovill
+scp
+scpbuild
+scpiivo
+scptest
+scrantom
+scrbacic
+screener
+scribner
+scrivens
+scroger
+scss
+scssdev
+scully
+scurlock
+scythia
+se
+seabrook
+seager
+seagle
+seagrave
+seagrove
+seahawk
+seale
+sealy
+seamster
+seamus
+sean
+seana
+seang
+seanna
+seany
+searl
+searle
+searles
+sears
+seatter
+seawell
+seay
+sebastia
+sebastie
+sebata
+sebeh
+sechang
+sechen
+sechrest
+secrest
+security
+seda
+sedat
+sedayao
+seddigh
+seddon
+sedigheh
+sedovic
+sedran
+see
+seeds
+seegobin
+seelaend
+seelan
+seeler
+seeley
+seema
+seenu
+seery
+sees
+seethara
+segal
+segars
+seggie
+seguin
+sehat
+sehgal
+sehinson
+sehmbey
+sehyo
+sei
+seidel
+seiden
+seidl
+seidman
+seifers
+seifert
+seifried
+seiji
+seiko
+seiler
+seiple
+seipue
+seitz
+seiz
+sej
+sek-ming
+seka
+sekar
+sekhar
+seki
+sekiguch
+sekming
+sekuler
+sela
+selbrede
+selby
+selchow
+selcuk
+seldon
+selena
+selene
+selent
+selestin
+selia
+selic
+selie
+selig
+selim
+selime
+selina
+selinda
+seline
+seliske
+selisker
+selkirk
+sella
+sellars
+selle
+sellers
+sellgren
+sellis
+sells
+sellwood
+selma
+selva
+selvaraj
+selwyn
+sembi
+semeniuk
+semenzat
+semerau
+semler
+semmens
+semmler
+semoon
+sena
+senad
+senderow
+sendyk
+senecal
+senese
+sengoba
+sengupta
+seniuk
+senng
+senser
+senten
+sentner
+sentovic
+senyildi
+senyshyn
+seob
+seoju
+seok
+seong
+seoul
+sepe
+sepesi
+sephira
+sepko
+serack
+serafin
+seraphin
+serapin
+serazzi
+serban
+serber
+serbin
+serbus
+serdar
+serduke
+seregely
+serena
+serene
+serethia
+serge
+sergeant
+sergei
+sergent
+sergey
+sergi
+sergio
+sergiu
+sergo
+seroka
+serour
+serraf
+serrano
+serre
+servais
+servance
+services
+servidio
+serville
+seshadri
+seshan
+seth
+sethi
+sethian
+setiawan
+seto
+setsuko
+settels
+setterfi
+settles
+seufert
+seumas
+seung
+seungbin
+seungchu
+seungjun
+seuss
+seven
+severin
+severina
+severn
+severns
+sevigny
+sevilla
+seville
+seward
+sewell
+sey-ping
+seyar
+seyed
+seyfolla
+seyma
+seymour
+sezer
+sfiroudi
+sforza
+sgorniko
+sguigna
+sha-wen
+shabatur
+shabbir
+shabo
+shacham
+shackelf
+shacklef
+shacklet
+shackley
+shaddock
+shadow
+shae
+shafer
+shaffer
+shafik
+shafiq
+shafique
+shahab
+shahan
+shahani
+shahen
+shahid
+shahram
+shahriar
+shahrin
+shahrokh
+shahrood
+shai
+shaib
+shaibal
+shaida
+shaila
+shailan
+shailen
+shailend
+shailesh
+shailin
+shaina
+shaine
+shaji
+shaker
+shakeri
+shakib
+shakil
+shakoor
+shakor
+shalizi
+shalla
+shalmon
+shalna
+shalne
+shalom
+shama
+shamblin
+shames
+shamim
+shamir
+shamji
+shams
+shamshad
+shamshir
+shamsia
+shamus
+shan
+shan-min
+shan-pin
+shana
+shanahan
+shanan
+shanda
+shandee
+shandeig
+shandie
+shandra
+shandy
+shane
+shaner
+shang
+shang-ti
+shangi
+shangtia
+shani
+shanie
+shankar
+shanlin
+shanmin
+shanna
+shannah
+shannan
+shannen
+shannon
+shanon
+shanping
+shanta
+shantee
+shanti
+shantz
+shao
+shao-she
+shaoshen
+shapcott
+shapin
+shapiro
+shapland
+shappir
+shara
+sharad
+sharada
+sharae
+sharai
+sharan
+sharee
+shari
+sharia
+sharif
+shariff
+sharissa
+sharity
+sharkey
+sharky
+sharl
+sharla
+sharleen
+sharlene
+sharline
+sharma
+sharman
+sharmila
+sharnoff
+sharon
+sharona
+sharone
+sharpe
+sharratt
+sharri
+sharron
+sharry
+shary
+sharyl
+sharyn
+shashank
+shashi
+shastri
+shastry
+shatter
+shattuck
+shau
+shaughan
+shaughn
+shaughne
+shaukat
+shaumil
+shaun
+shauna
+shaupoh
+shaver
+shaw
+shaw-yun
+shawen
+shawn
+shawna
+shawnee
+shawyune
+shay
+shay-pin
+shayanpo
+shayla
+shaylah
+shaylyn
+shaylynn
+shayna
+shayne
+shayping
+shea
+sheaffer
+shealy
+shean
+sheara
+shearer
+shearin
+shearman
+shears
+sheba
+shebanow
+shechtma
+shedd
+shedman
+sheehan
+sheela
+sheelagh
+sheelah
+sheena
+sheeree
+sheergar
+sheets
+sheff
+sheffey
+sheffie
+sheffiel
+sheffy
+sheidafa
+sheikh
+sheikna
+sheila
+sheila-k
+sheilah
+sheilaka
+sheileag
+shein
+shek
+shekar
+shekhar
+shekwan
+shel
+shela
+shelagh
+shelba
+shelbi
+shelby
+shelden
+sheldon
+shelegey
+shelia
+shell
+shelley
+shelli
+shellie
+shellin
+shellman
+shelly
+shellysh
+shelton
+shem
+shemwell
+shen
+shen-zhi
+shena
+sheng
+sheng-fu
+shengfu
+shengru
+shengwen
+shengwu
+shennan
+shep
+shepard
+shepherd
+sheppard
+shepperd
+sher
+sherali
+sherard
+sheraton
+sherban
+shere
+sheree
+sheremet
+sheri
+sheri-ly
+sheridan
+sherie
+sherif
+sherill
+sherilyn
+sherin
+sherk
+sherline
+sherlock
+sherm
+sherman
+shermie
+shermy
+sherona
+sherow
+sherra
+sherrard
+sherrel
+sherrell
+sherrer
+sherri
+sherrie
+sherrill
+sherrily
+sherry
+sherrye
+sherryl
+sherwan
+sherwin
+sherwood
+sherwyn
+sherwynd
+sherye
+sheryl
+sheth
+sheu
+sheung
+shew
+shewchen
+shi
+shi-qin
+shi-wei
+shiang-y
+shiangyi
+shiao-mi
+shiaomin
+shibahar
+shibata
+shibberu
+shibo
+shieff
+shieh
+shiel
+shiela
+shields
+shiell
+shier
+shiffer
+shiflett
+shigeaki
+shigeki
+shigemur
+shigenao
+shigeo
+shigeru
+shih
+shih-dar
+shih-hai
+shih-hsi
+shih-kua
+shih-tie
+shihhai
+shihhsiu
+shihkuan
+shihtien
+shik
+shikui
+shila
+shiley
+shilla
+shilling
+shimada
+shimandl
+shimiz
+shimizu
+shimshon
+shin-dug
+shina
+shinder
+shindug
+shing
+shing-ch
+shing-mi
+shingche
+shingler
+shingmin
+shinichi
+shinji
+shinjo
+shinobu
+shinohar
+shinzo
+shiou
+shipe
+shipp
+shippen
+shiqin
+shiquan
+shir
+shirai
+shiranth
+shiratsu
+shiraz
+shireen
+shireman
+shirene
+shirey
+shirin
+shirinlo
+shirish
+shirl
+shirlee
+shirleen
+shirlene
+shirley
+shirley-
+shirline
+shirman
+shiroshi
+shirriff
+shishakl
+shishido
+shiu
+shiu-lin
+shiuan
+shiue
+shiuling
+shiun
+shiung
+shiv
+shiva
+shivaji
+shivapra
+shivchar
+shivdars
+shivnan
+shiwei
+shixian
+shlomo
+shmoys
+shnay
+shnider
+sho
+shoaf
+shobana
+shockley
+shoeb
+shoemake
+shoens
+shoji
+sholom
+shon
+shona
+shonda
+shonka
+shonuck
+shoou-yu
+shoouyu
+shop
+shoppel
+shorgan
+shorwan
+shoshana
+shoshann
+shostak
+shou
+shou-che
+shou-mei
+shoucher
+shoulars
+shouli
+shoun
+shouresh
+showers
+shreve
+shriberg
+shrieves
+shripad
+shriram
+shtivelm
+shtulman
+shu
+shu-chen
+shu-gong
+shu-mei
+shuang
+shuangli
+shubaly
+shuchen
+shue
+shuechia
+shuen
+shugong
+shuichi
+shuji
+shukor
+shukster
+shuler
+shull
+shultz
+shum
+shuman
+shumate
+shumei
+shunfeng
+shung
+shunhui
+shunmuga
+shunro
+shuo
+shupe
+shuqing
+shurlock
+shurtlef
+shurwood
+shuster
+shusuke
+shute
+shutler
+shutoku
+shutterb
+shuvra
+shuyen
+shwed
+shwu-chy
+shwuchyn
+shya-yun
+shyam
+shyan
+shyh-chi
+shyhchin
+shylo
+shyoko
+shypski
+shyu
+si
+siamack
+siamak
+siana
+sianna
+siaw
+sib
+sibbet
+sibbie
+sibby
+sibeal
+sibel
+sibella
+sibelle
+sibiga
+sibilla
+sibincic
+sibley
+sibyl
+sibylla
+sibylle
+sicard
+sich
+sichao
+sickle
+sickler
+sicotte
+sid
+siddall
+siddell
+siddiqui
+sides
+sidhu
+sidnee
+sidney
+sidone
+sidoney
+sidonia
+sidonnie
+sidor
+sidorovs
+sieben
+sieber
+siefert
+siegal
+siegel
+siegfrie
+siegle
+siegmund
+siegurd
+siehl
+sieling
+siemens
+siemer
+sienggo
+siew
+siew-kia
+siewert
+sifer
+siffre
+sig
+sigda
+sigfrid
+sigfried
+siggy
+sigismon
+sigismun
+sigmon
+sigmund
+signe
+sigrid
+sigurd
+sigurdso
+sigut
+sigvard
+siham
+sihem
+sik-yin
+sika
+sikander
+sikes
+sikita
+sikri
+sil
+silang
+silas
+silburt
+sile
+sileas
+silgardo
+silianu
+silieff
+silins
+sills
+sils
+silva
+silvain
+silvan
+silvana
+silvano
+silvanus
+silverma
+silverst
+silverth
+silveste
+silvestr
+silvia
+silvie
+silvio
+silwer
+sim
+simaan
+simanski
+simard
+simard-n
+simcha
+simcoe
+simcox
+sime
+simen
+simeon
+simeone
+simhan
+simion
+simkin
+simler
+simmonds
+simmons
+simms
+simon
+simon-ch
+simon-pu
+simona
+simone
+simonett
+simonian
+simonne
+simonovi
+simons
+simonsen
+simpkin
+simpson
+simren
+sims
+simser
+simson
+simulati
+simzer
+sina
+sinanan
+sinasac
+sinchak
+sinchau
+sinclair
+sinclare
+sindee
+sing
+sing-pin
+singbeil
+singer
+singh
+singhal
+singham
+singires
+singyu
+sinh
+sinha
+sinkfiel
+sinkovit
+sinnett
+sinnott
+sinoyann
+sinyor
+siobhan
+siomalas
+siotong
+sioux
+siouxie
+siperco
+sipes
+siping
+sipple
+sir
+sirevici
+siripong
+sirojith
+sisely
+sisile
+sisk
+siso
+sissela
+sissie
+sissy
+sist
+sitar
+sitch
+sitler
+siu
+siu-kwok
+siu-ling
+siu-man
+siusan
+siv
+siva
+sivaji
+sivasoth
+siward
+sizto
+sj
+sjaak
+sjerps
+sjouke
+skaff
+skaftaso
+skaggs
+skalski
+skanes
+skaret
+skariex
+skedelsk
+skeeter
+skef
+skell
+skelly
+skene
+skeoch
+skerlak
+skerry
+skeuse
+skiba
+skiclub
+skillen
+skillman
+skinner
+skip
+skipp
+skipper
+skippie
+skippy
+skipton
+sklower
+skoberne
+skof
+skopliak
+skrebels
+skriverv
+skrobans
+skrobeck
+skruber
+skuce
+skuratow
+skwarok
+sky
+skye
+skylar
+skyler
+slaa
+slabaugh
+slaby
+slade
+sladek
+slagel
+slartiba
+slatteng
+slattery
+slautter
+slavin
+sldisk
+sleeman
+sleeth
+slempers
+slick
+slinkard
+slinowsk
+sliter
+sloan
+sloane
+slobin
+sloboda
+slobodia
+slobodri
+slonosky
+slotnick
+slozil
+sluis
+slunder
+slusser
+sly
+slyteris
+smale
+smalltal
+smallwoo
+smecca
+smedema
+smeenk
+smelters
+smerdell
+smerek
+smid
+smine
+smit
+smita
+smith
+smithdea
+smithson
+smits
+smitty
+smolin
+smook
+smoot
+smothers
+smrke
+smrke-su
+smuda
+smulders
+smyrl
+smyth
+smythe
+snair
+snapper
+snarr
+snead
+snedden
+snedeker
+snehal
+snelgrov
+snelling
+snider
+sniderma
+snipes
+snips
+snodgras
+snoke
+snorri
+snowden
+snuggs
+snyder
+soard
+sobchuk
+sobczak
+sobeck
+sobel
+sobiesia
+sobitha
+sobkow
+sobolak
+sobolews
+sobon
+sochovka
+socorrit
+socrates
+sodano
+soderber
+sodhi
+soebowo
+soegiono
+sofeya
+soffa
+sofia
+sofie
+sofoklis
+soh
+sohaib
+sohail
+sohal
+sohale
+sohayla
+sohier
+sohni
+sohns
+sohota
+soiffer
+soin
+sojka
+sojkowsk
+sokolows
+sokyrko
+sol
+solai
+solange
+soldera
+solheim
+soliman
+solita
+solkoff
+sollee
+sollie
+sollman
+solly
+solman
+solodko
+solomon
+solovay
+solski
+soman
+somani
+somenzi
+somera
+somers
+somerset
+somervil
+somisett
+sommer
+sommerdo
+sommerfe
+sompong
+somppi
+somsak
+son
+sonbol
+sondra
+sondueim
+song-cha
+song-ho
+songchar
+songho
+songnian
+sonhing
+sonia
+sonier
+sonja
+sonne
+sonni
+sonnie
+sonnnie
+sonny
+sono
+sonoda
+sonoe
+sonya
+soo
+sood
+soohong
+soohoo
+sook
+sookdeo
+sooley
+soong
+soonhoi
+sophey
+sophi
+sophia
+sophie
+sophroni
+sorathia
+sorbi
+sorcha
+soreanu
+soren
+sorensen
+soriano
+sorin
+sorkin
+soroker
+sorrel
+sorrell
+sorrenti
+sos
+sosa
+sosanna
+sossaman
+sotelo
+sotiriad
+sotiris
+soto
+sotos
+souba
+soucie
+soucy
+sougata
+souheil
+soulef
+soules
+soullier
+soumis
+soumitra
+sounya
+souphala
+sources
+souren
+sourin
+sourisse
+sourour
+sousa
+soussa
+southard
+souther
+southon
+southwor
+souza
+sova
+soweidan
+sowry
+soyeh
+soyland
+soyong
+soyster
+soyuer
+space
+spallin
+spann
+spannbau
+sparacio
+sparkes
+sparks
+sparksma
+sparky
+spass
+spaugh
+speakec
+speaker
+spearman
+spearpoi
+spears
+specs
+speedy
+speer
+speers
+speight
+spejewsk
+spence
+spencer
+spense
+spenser
+sperman
+spessot
+spicer
+spickelm
+spieker
+spieler
+spight
+spike
+spilchak
+spillane
+spily
+spindler
+spinelli
+spingola
+spinks
+spirakis
+spirkovs
+spiros
+spisak
+spitzer
+spivey
+splitt
+spohn
+spolar
+sponagle
+sponchia
+spooner
+spragg
+spraggin
+sprague
+sprandel
+sprayber
+spriggs
+spriging
+springth
+sprott
+sproul
+sproule
+sprouse
+spruell
+sprules
+sprunger
+spudboy
+spurlin
+spurlock
+spurway
+spy
+spyridon
+spyros
+squires
+squizzat
+sr
+srawan
+src
+sreedhar
+sri
+sridaran
+sridevi
+sridhar
+sridhara
+srihari
+srikanth
+srikrish
+srimurti
+srinath
+srini
+sriniuas
+srinivas
+sriram
+sriranja
+srirupa
+sriv
+srivasta
+srivatsa
+sroczyns
+ssi
+ssington
+st
+st-amour
+st-denis
+st-louis
+st-marti
+st-onge
+st-pierr
+st.
+st.clair
+st.denis
+st.germa
+st.jacqu
+st.john
+st.laure
+st.louis
+st.pierr
+st.vil
+st_james
+staats
+stabilit
+stace
+stacee
+stacey
+stach
+stachowi
+staci
+stacia
+stacie
+stackpol
+stacy
+stadelme
+stadler
+stafani
+staffard
+staffeld
+staffing
+stafford
+staford
+stagger
+staggs
+stagmier
+stahl
+stahly
+stainbac
+staley
+stalin
+stallabr
+stallcup
+stalling
+stalter
+stamboul
+stampfl
+stampley
+stamps
+stan
+stanciu
+stanczyk
+standard
+standel
+standen
+standfor
+standrin
+stanfiel
+stanford
+stange
+stanisla
+stanke
+stanleig
+stanley
+stanly
+stansber
+stansbur
+stansby
+stansell
+stansfie
+stanton
+stanulis
+stanwood
+stapenho
+staples
+star
+starbuck
+staring
+starkaus
+starkeba
+starkes
+starks
+starla
+starlene
+starlet
+starlin
+starnes
+starowic
+starr
+stars
+starsdps
+starzman
+stasaski
+stasiak
+stasney
+stastny
+stasyszy
+stat
+staten
+stateson
+statile
+statisti
+staton
+stavro
+stavros
+stayton
+stclair
+stctest
+stds
+ste
+ste-mari
+stearn
+stearne
+stearns
+stebbing
+steckley
+steede
+steele
+steelman
+steen
+steenbur
+steene
+steeves
+stefa
+stefan
+stefana
+stefanac
+stefania
+stefanie
+stefano
+steffane
+steffen
+steffens
+steffes
+steffey
+steffi
+steffie
+steffy
+stegall
+steggall
+stegman
+stegmuel
+stehen
+stehr
+steidel
+steiert
+steinar
+steinbac
+steinber
+steinhar
+steip
+stejskal
+steklasa
+stelcner
+stella
+stellita
+stellwag
+stemmler
+stender
+stennett
+stenson
+stensrud
+stepchuk
+steph
+stepha
+stephan
+stephana
+stephane
+stephani
+stephann
+stephans
+stephanu
+stephany
+stephe
+stephen
+stepheni
+stephens
+stephi
+stephie
+stephine
+stepler
+stepp
+steranka
+stercyk
+sterczyk
+sterescu
+stergios
+sterian
+sterling
+stern
+sterne
+stesha
+steski
+stetner
+stetson
+stetter
+stettner
+stevan
+stevana
+stevanov
+steve
+steven
+stevena
+stevens
+stevenso
+stevie
+stevy
+stew
+steward
+stewart
+stewart-
+sticklan
+sticpewi
+stiglitz
+stiles
+stillman
+stillwel
+stimler
+stina
+sting
+stinky
+stinson
+stinzian
+stirling
+stirrett
+stites
+stjohn
+stobaugh
+stock
+stocker
+stocks
+stockton
+stockwel
+stodart
+stoddard
+stoelzle
+stoevsky
+stoffels
+stoker
+stokes
+stokker
+stokoe
+stokoski
+stolzle
+ston
+stone
+stonebra
+stonehou
+stoner
+stonos
+stooke
+storace
+storelli
+storey
+storm
+stormi
+stormie
+stormy
+storrie
+story
+stotts
+stotz
+stouder
+stough
+stovall
+stover
+stowe
+stoyles
+strachan
+strackho
+strader
+straka
+strandbe
+strandlu
+strannem
+strasser
+stratfor
+stratton
+straub
+strauch
+strauss
+strautma
+strawczy
+strayhor
+streater
+streatfi
+streibel
+streight
+streng
+strickla
+strider
+strober
+strock
+stroemer
+strohmey
+strom
+stronski
+stropp
+stroud
+stroupe
+strube
+struble
+strucche
+strudwic
+struzyns
+stu
+stuart
+stubblef
+stubbs
+stuckey
+stude
+student
+studer
+stults
+stumpf
+sturdiva
+sture
+sturrock
+stutts
+su
+su-xin
+suany
+suarez
+suat
+subasing
+subhash
+subhashi
+subhi
+subhra
+subhrans
+subi
+subick
+subissat
+subitha
+submital
+subodh
+subra
+subraman
+subroto
+subsara
+subu
+sucha
+suchitra
+suchocki
+suda
+sudabeh
+sudan
+sudbey
+sudbury
+suddarth
+sudeep
+sudesh
+sudha
+sudhakar
+sudhir
+sudip
+sue
+sue-joe
+sue-may
+sueanne
+suejoe
+sueling
+suellen
+suen
+suer
+suess
+sufcak
+suffern
+sugandi
+sugarbro
+sugarman
+sugih
+sugihara
+suh
+suha
+suhail
+suharly
+suhas
+suilin
+suiping
+suitt
+sujay
+suk-ho
+suk-jae
+suk-yin
+sukey
+sukhendu
+sukho
+sukhwant
+suki
+sukjae
+sukku
+sukumar
+sula
+sulatyck
+sule
+sulewski
+suliguin
+sullivan
+sully
+sultan
+suman
+sumanth
+sumaryan
+sume
+sumi
+sumit
+sumitro
+summach
+summerli
+summers
+sumner
+sumpter
+sunatori
+sundar
+sundaram
+sundares
+sunderla
+sundra
+sung
+sung-cho
+sung-sup
+sungchin
+sungchon
+sunghae
+sungki
+sungkyoo
+sungsup
+sunil
+sunjay
+sunnie
+sunning
+sunny
+sunshine
+sunstrum
+suomela
+supervis
+support
+suprick
+supriya
+supriyo
+sura
+surazski
+surber
+surendra
+suresh
+suria
+surinder
+surowani
+surray
+surreau
+surridge
+sursal
+survey
+surya
+susan
+susana
+susanett
+susann
+susanna
+susannah
+susanne
+susanto
+susette
+susi
+susick
+susie
+susil
+sussie
+susumu
+susy
+sutardja
+sutarja
+sutarwal
+sutcliff
+suter
+sutera
+sutherla
+suthers
+sutija
+sutphen
+sutter
+sutterfi
+sutterli
+sutton
+suu
+suvanee
+suwala
+suwanawo
+suwandi
+suxin
+suyama
+suykens
+suyog
+suzan
+suzane
+suzann
+suzanna
+suzanne
+suzette
+suzi
+suzie
+suzuki
+suzy
+svalesen
+svante
+sven
+svend
+svenn-er
+svensson
+sventek
+svetlana
+svilans
+svm-bnrm
+svo
+svr
+swact
+swaden
+swails
+swaine
+swamy
+swandi
+swann
+swanson
+swanston
+swaranji
+swartz
+swazey
+swd
+swearing
+swee-joo
+sweeney
+sweetnam
+swen
+swenberg
+swensen
+swenson
+swepston
+swiat
+swiatkow
+swick
+swidersk
+swinamer
+swinburn
+swinkels
+swinks
+swinney
+swinson
+swinwood
+swisher
+switchin
+switzer
+swope
+swr
+swyer
+sy
+syal
+syamala
+sybil
+sybila
+sybilla
+sybille
+sybyl
+sycha
+syd
+sydel
+sydelle
+sydeman
+sydney
+sydnor
+sydor
+sydoryk
+syed
+sykes
+syl
+sylas
+sylva
+sylvain
+sylvan
+sylveste
+sylvestr
+sylvia
+sylvie
+sylvio
+sym
+syman
+symen
+symon
+symons
+syndra
+synful
+synness
+syposz
+syres
+syrett
+sys
+sysadmin
+sysint
+syssuppo
+systems
+systest
+syun
+syyed
+szabo
+szamosi
+szaplonc
+szaran
+szeto
+sziladi
+szkarlat
+szopinsk
+szot
+szpakows
+szpilfog
+sztein
+szuminsk
+szura
+szymansk
+szypulsk
+ta
+ta-sung
+tab
+tabaja
+tabalba
+tabatha
+tabb
+tabbatha
+tabbert
+tabbi
+tabbie
+tabbitha
+tabby
+taber
+tabina
+tabitha
+tabl
+tabler
+tables
+tabor
+tac
+tachih
+tacitus
+tad
+tadayuki
+tadd
+taddeo
+taddeusz
+taddio
+tadeas
+tadeo
+tades
+tadeusz
+tadevich
+tadge
+tadio
+tadlock
+tae
+tae-ho
+tae-hwan
+taeho
+taehwan
+taffy
+taggart
+taghizad
+tague
+tahamont
+tahani
+taharudd
+taheri
+tahir
+tahsin
+tai
+tai-jen
+tailinh
+tailor
+taina
+tait
+taite
+taiwana
+tajbakhs
+tak
+tak-wai
+takagi
+takahash
+takahisa
+takako
+takao
+takashi
+takashim
+takata
+takayuki
+takefman
+takehiko
+takeo
+takeshim
+takeuchi
+taki
+takis
+takiyana
+tal
+talbert
+talbot
+talbott
+talcott
+talevi
+talia
+talis
+tallett
+tallia
+tallie
+tallou
+tallulah
+tally
+talmont
+talmy
+talton
+talya
+talyah
+tam
+tamar
+tamara
+tamarah
+tamarell
+tamaresi
+tamarra
+tamas
+tamasi
+tamer
+tamera
+tami
+tamiko
+tamir
+tamma
+tammara
+tammaro
+tammi
+tammie
+tammy
+tamqrah
+tamra
+tamrazia
+tamura
+tan
+tan-atic
+tana
+tanaka
+tanchak
+tancordo
+tandberg
+tandi
+tandie
+tandiono
+tandiwe
+tandy
+tanferna
+tanglao
+tangren
+tanhya
+tani
+tania
+tanio
+tanir
+tanitans
+tanja
+tann
+tanner
+tanney
+tannie
+tanniere
+tanny
+tansy
+tanya
+tao
+tap
+tapani
+tape
+tapner
+tapp
+tappende
+tappert
+tapsell
+tara
+tarah
+tarak
+taralp
+taraneh
+tarant
+taranto
+taraschu
+tarasewi
+tardif
+tardiff
+tardioli
+tarek
+taren
+tareq
+targosky
+tarik
+tariq
+tarlamis
+tarle
+tarmi
+tarnai
+tarng
+taro
+tarof
+tarquini
+tarra
+tarrah
+tarrance
+tarrant
+tarsky
+tarte
+tarus
+tarver
+taryn
+taryna
+tas
+taschere
+tash
+tasha
+tasia
+taskforc
+taspatch
+tassi
+tasso
+tassy
+tasuk
+tasung
+tat
+tata
+tatangsu
+tatar
+tate
+tatemich
+tates
+tateyama
+tatiana
+tatiania
+tats
+tatsdocn
+tatsman
+tatsugaw
+tatsuya
+tattenba
+tatum
+tatyana
+tauberg
+taul
+tauna
+taurus
+tauscher
+tauvia
+tavana
+tavares
+taverner
+tavis
+tawauna
+tawfik
+tawnya
+tawsha
+taxashi
+tay
+tayeb
+tayfun
+taylor
+taylor-h
+tayyab
+tc
+tchangid
+tchir
+td
+tdr
+te-chih
+te-hsiu
+te-wei
+teacher
+teador
+teague
+team
+teasley
+tebbe
+tebinka
+tec
+tech
+techih
+technica
+technoso
+teck
+tecklenb
+ted
+tedd
+tedda
+teddi
+teddie
+teddy
+teder
+tedi
+tedie
+tedman
+tedmund
+tedra
+tedrick
+teed
+teena
+teerdhal
+teetwo
+teh
+tehchi
+tehsiu
+teichman
+teiichi
+tein-min
+teinmin
+teirtza
+teitelba
+tej
+tejada
+tejal
+tejani
+tel
+telco
+tele
+telecom
+telesis
+telex
+telfer
+telidis
+telke
+tello
+tellup
+telos
+telva
+temp
+temple
+temple-d
+templeto
+ten-huei
+tena
+tencer
+teng
+tenhuei
+teniola
+tenna
+tennant
+tenney
+tennyson
+teo
+teodoor
+teodor
+teodora
+teodoric
+teodoro
+tera
+terakado
+teran
+terangue
+terence
+terencio
+teresa
+terese
+teresina
+teresita
+teressa
+terez
+teri
+teriann
+terminal
+terneus
+terr
+terra
+terrade
+terrance
+terranel
+terranov
+terrel
+terrell
+terrence
+terresa
+terri
+terri-jo
+terri-le
+terrie
+terrijo
+terrilei
+terrill
+terry
+terrye
+terryl
+tersina
+teruko
+teruo
+teruyuki
+terwey
+terwilli
+terza
+terzian
+tesa
+tesch
+tesfagab
+tesfamar
+tesh
+tesla
+tess
+tessa
+tessi
+tessie
+tessier
+tessler
+tessty
+tessy
+testa
+testagc
+tester
+testing
+testingp
+testntmv
+testsds
+testtool
+tetrault
+tetreaul
+tetsukaz
+tetsumo
+tetsuo
+tetsuya
+tetsuyuk
+teufel
+tevlin
+tewksbur
+tex
+teymour
+thabet
+thac
+thach
+thacher
+thacker
+thad
+thaddeus
+thaddus
+thadeus
+thai
+thain
+thaine
+thais
+thaker
+thakor
+thakur
+thaler
+thalia
+tham
+thames
+thane
+thang
+thanh
+thanh-ha
+thanh-ho
+thanh-hu
+thanh-qu
+thanh-so
+thanh-ti
+thanos
+thao
+tharby
+tharring
+thatch
+thatcher
+thatte
+thaxter
+thaxton
+thayer
+thayne
+the
+the worl
+thea
+theadora
+thebault
+theda
+thedford
+thedora
+thedric
+thedrick
+thege
+theis
+thekla
+thelma
+theloose
+themann
+theo
+theobald
+theochar
+theodor
+theodora
+theodore
+theodori
+theodosi
+theofani
+theohari
+theologo
+theoret
+thera
+theresa
+therese
+theresin
+theresit
+theressa
+theriaul
+therien
+therine
+theriot
+theron
+therrien
+thersa
+thevenar
+thewalt
+thi
+thi-cuc
+thia
+thibaud
+thibault
+thibaut
+thibeaul
+thibert
+thibodea
+thibon
+thiebaut
+thieken
+thiel
+thiem
+thien
+thierry
+thiery
+thies
+thiessen
+thieu
+thifault
+thill
+thimothy
+thinh
+think
+thirugna
+this dir
+thisdel
+thisner
+thoai
+thoi
+thom
+thoma
+thomaier
+thomalla
+thomas
+thomasa
+thomasi
+thomasia
+thomasin
+thomason
+thomasse
+thomassi
+thombors
+thomey
+thomlins
+thompson
+thoms
+thomsen
+thomson
+thon
+thondanu
+thor
+thoreau
+thorin
+thorley
+thorman
+thorn
+thornber
+thornbur
+thorndik
+thorne
+thornie
+thornley
+thornton
+thorny
+thorpe
+thorsen
+thorslun
+thorson
+thorstei
+thorsten
+thorvald
+those
+threader
+thrift
+throgmor
+thu
+thuan
+thuesen
+thum
+thumm
+thuong
+thurgood
+thurley
+thurman
+thurstan
+thurston
+thuswald
+thuthuy
+thuy
+thyagara
+ti
+ti-cheng
+ti-jeun
+tian
+tianbao
+tiberghi
+tibi
+tibold
+tibor
+tice
+ticheng
+ticzon
+tidball
+tidd
+tidwell
+tiebold
+tiebout
+tiedeman
+tiefenth
+tiegs
+tien
+tien-bue
+tien-chi
+tiena
+tienbuen
+tienchie
+tienyow
+tierney
+tiertza
+tieu
+tiff
+tiffani
+tiffanie
+tiffany
+tiffi
+tiffie
+tiffy
+tigg
+tigger
+tigran
+tihanyi
+tiina
+tijeun
+tilak
+tilbenny
+tilda
+tilden
+tildi
+tildie
+tildy
+tiler
+tilk
+tille
+tiller
+tilley
+tillie
+tillman
+tilly
+tilmon
+tilson
+tilton
+tim
+timeshee
+timi
+timleck
+timler
+timm
+timmer
+timmerma
+timmi
+timmie
+timmins
+timmons
+timms
+timmy
+timo
+timofei
+timos
+timoteo
+timothea
+timothee
+timotheu
+timothy
+timpson
+tims
+timsit
+timtsche
+tin
+tina
+tine
+tineke
+tiner
+ting
+ting-shu
+ting-tin
+ting-yu
+tingshuo
+tingting
+tingyu
+tingyue
+tini
+tinney
+tino
+tintor
+tiny
+tio
+tiong-ho
+tip
+tiphani
+tiphanie
+tiphany
+tippett
+tipping
+tippy
+tipton
+tirrell
+tischhau
+tischler
+tisdale
+tisdall
+tiseo
+tish
+tisha
+titian
+tito
+titos
+titus
+tiu
+tiwari
+tiziano
+tjahjadi
+tjia
+tjiong
+tjoe
+tjong
+toan
+toastmas
+toba
+tobe
+tobey
+tobi
+tobiah
+tobias
+tobie
+tobin
+tobit
+toby
+tobye
+tod
+todaro
+todd
+toddi
+toddie
+toddy
+todloski
+todo
+todorovi
+toerless
+toews
+toft
+togasaki
+tognoni
+tohama
+toi
+toiboid
+toinette
+tolar
+toles
+toletzka
+tolgyess
+tolle
+tollefse
+tolson
+tolstoy
+toly
+tom
+toma
+tomacic
+tomack
+tomacruz
+tomar
+tomas
+tomasett
+tomasina
+tomasine
+tomaso
+tomassi
+tomasz
+tomaszew
+tombul
+tome
+tomes
+tomi
+tomkin
+tomlin
+tomlinso
+tommaso
+tommi
+tommie
+tommy
+tomochek
+tomohiro
+tomoyosh
+tompkins
+tomy
+tonelli
+toney
+tong
+tongder
+toni
+tonia
+tonie
+tonkovic
+tonnie
+tonny
+tonogai
+tonu
+tony
+tonya
+tonye
+tookey
+toolbox
+toole
+tooley
+toolroom
+tools
+toolset
+toomer
+toone
+toop
+toothman
+tootsie
+tooyserk
+toperzer
+topgun
+toplis
+topo
+topol
+topp
+tor
+torain
+torbert
+torcac
+tordocs
+tore
+torey
+tori
+torian
+torie
+toril
+torin
+tornes
+tornqvis
+torok
+torr
+torrance
+torre
+torrealb
+torrell
+torrence
+torrens
+torres
+torrey
+torrie
+torrin
+torry
+torsten
+torunn
+tory
+tosca
+toscano
+tosczak
+toshach
+toshachn
+toshi
+toshiaki
+toshihir
+toshinar
+toss
+tostenso
+tota
+totaro
+toth
+totino
+totman
+totten
+totti
+touati
+touchett
+toufic
+tougas
+toulson
+toupin
+tousigna
+toussain
+tova
+tovah
+tove
+towaij
+towers
+towill
+towler
+towles
+town
+towney
+townie
+townley
+towns
+townsel
+townsend
+townson
+towny
+towsley
+toyanne
+toyoji
+toyooka
+tprl
+trace
+tracee
+traces
+tracey
+tracey-m
+trachsel
+traci
+tracie
+tracy
+tracz
+trader
+trae
+trafford
+trahan
+trainer
+training
+trainor
+trajan
+tramar
+trame
+tran
+tranfagl
+trang
+transki
+translat
+tranter
+trasmund
+traugott
+traulich
+traut
+trautman
+travel-p
+travelpe
+traver
+travers
+travis
+travus
+traxler
+trayer
+traylor
+traynor
+trecia
+tredenni
+tredway
+treen
+trees
+trefor
+trefry
+trefts
+tregenza
+treisman
+trek @
+tremain
+tremaine
+tremayne
+tremblay
+tremewan
+trenna
+trent
+trentadu
+trenton
+tres
+tres-sup
+tresa
+trescha
+trese
+tresrch
+tressa
+trev
+trevar
+trever
+trevetha
+trevitt
+trevor
+trey
+tri
+trial
+triantap
+tricci
+tricia
+trickett
+tricord
+trieu
+trif
+trifiro
+triggian
+trijanto
+trimble
+trina
+trindy
+trinh
+trinidad
+trink
+trip
+tripier
+tripleho
+tripp
+tripps
+tris
+trish
+trisha
+trisic
+trisko
+trista
+tristam
+tristan
+tristano
+trittler
+tritton
+trivedi
+trix
+trixi
+trixie
+trixy
+trocchi
+trochu
+troesch
+trojak
+tromm
+trong
+tropea
+tropeano
+trotsky
+trotter
+trottier
+troubors
+troup
+trowbrid
+troy
+troyvoi
+trpisovs
+trstram
+tru-fu
+truchon
+truda
+trude
+trudel
+trudell
+trudey
+trudi
+trudie
+trudy
+truebloo
+truelove
+trueman
+truesdal
+truffer
+trujillo
+trula
+trull
+truls
+trumaine
+truman
+trumann
+trumble
+trung
+trungy
+trunley
+truong
+truran
+trussler
+trutsche
+truus
+tryfon
+trying
+tsai
+tsai-hun
+tsaihung
+tsakalis
+tsalikis
+tsang
+tsao
+tsay
+tschaja
+tschann
+tse
+tse-lian
+tseliang
+tseng
+tsenter
+tsern
+tsiakas
+tsing
+tsitsior
+tsitsons
+tso
+tsolas
+tsong-li
+tsonglia
+tsonos
+tsortos
+tsoucas
+tsugio
+tsui
+tsuji
+tsuk
+tsun-kuo
+tsun-yuk
+tsuneo
+tsung
+tsunkuo
+tsunoda
+tsunyuk
+tsuyoshi
+ttisuppo
+tu
+tuan
+tubb
+tuck
+tucker
+tuckie
+tucky
+tudo
+tudor
+tue
+tuen
+tuesday
+tuffo
+tufford
+tuhina
+tuhr
+tulga
+tulio
+tulip
+tulk
+tull
+tulley
+tullius
+tullo
+tully
+tun-lin
+tuna
+tunali
+tung
+tung-min
+tunghsin
+tungming
+tunon
+tuoi
+tuok
+tuong
+tupas
+tupling
+turbes
+turbyfil
+turchan
+turcot
+turcotte
+turgay
+turing
+turkeer
+turkey
+turki
+turkki
+turkovic
+turnbull
+turner
+turney
+turpin
+turrubia
+turunen
+turus
+tushar
+tussey
+tusting
+tutt
+tuttle
+tuxford
+tuyen
+tuyetphu
+twa
+twana
+twarog
+tweddle
+tweetie
+twidale
+twiggy
+twila
+twiss
+twitty
+twolan
+twx
+twyla
+twyman
+twynham
+twyver
+txp
+ty
+tyack
+tybalt
+tybi
+tybie
+tyda
+tye
+tyke
+tyler
+tymchuk
+tymon
+tymothy
+tynan
+tyndall
+tyne
+tyner
+typer
+tyra
+tyrance
+tyroler
+tyron
+tyronda
+tyrone
+tyrrell
+tyrus
+tyson
+tzanetea
+tzeng
+tzong-sh
+tzong-ya
+tzongshi
+tzongyan
+tzou
+tzuang
+tzung
+uae
+uathavik
+uberig
+uchida
+uchiyama
+udale
+udall
+uday
+udaya
+udayasek
+ude
+udell
+uecker
+ueda
+uehara
+ueyama
+uffner
+ufomadu
+ugo
+uguccion
+ugwa
+uhl
+uhley
+uhlhorn
+uhlig
+ukena
+ula
+ulberto
+ulf
+ulgen
+uli
+ulick
+ulises
+ulla
+ully
+ulric
+ulrica
+ulrich
+ulrick
+ulrika
+ulrikaum
+ulrike
+ultrason
+uludamar
+ulysses
+umakanta
+umakanth
+umberto
+umeeda
+umeh
+umeko
+umesh
+umetsu
+umphres
+una
+una-mae
+unabr.di
+underwoo
+unger
+unitt
+unix
+unixsupp
+unkefer
+unkles
+unreg
+unsoy
+unxlb
+upchurch
+updt
+upen
+uppal
+upshaw
+upton
+urata
+urbain
+urban
+urbanic
+urbano
+urbanowi
+urbanus
+urbashi
+urbick
+urbielew
+urbshas
+uresh
+uri
+uriah
+uriel
+urnes
+urow
+urquhart
+urs
+ursa
+ursala
+ursola
+urson
+ursula
+ursulina
+ursuline
+urwin
+us
+usa
+useng
+user
+usman
+usrouter
+uswrsd
+usyk
+uszynski
+uta
+utah
+utas
+utilla
+utpal
+utpala
+utsumi
+uunko
+uvieghar
+uyar
+vachel
+vacher
+vachiran
+vachon
+vaclav
+vaculik
+vadala
+vadali
+vadi
+vadim
+vafaie
+vaglio-l
+vahary
+vahdat
+vahe
+vahedi
+vahid
+vaid
+vail
+vaillanc
+vaillant
+vairavan
+vajentic
+vajih
+vakhshoo
+vakili
+val
+valaree
+valaria
+valcourt
+valda
+valdemar
+valdez
+vale
+valeda
+valencia
+valene
+valenka
+valenta
+valente
+valentia
+valentij
+valentik
+valentin
+valenzia
+valera
+valeria
+valerie
+valerien
+valerio
+valerius
+valery
+valerye
+valia
+valida
+valin
+valina
+valinda
+valiquet
+valiveti
+valko
+valkyrie
+valla
+vallath
+valle
+vallee
+vallejos
+vallenty
+vallet
+valli
+valliani
+vallie
+vallier
+valliere
+vallipur
+vallozzi
+vally
+valma
+valois
+valorie
+valry
+valvasor
+van
+van alph
+van alst
+van atta
+van bake
+van bent
+van coon
+van den
+van der
+van dyke
+van es
+van eyk
+van flee
+van gaal
+van hast
+van hols
+van hoy
+van huls
+van kast
+van kess
+van klin
+van late
+van leeu
+van loon
+van mans
+van mete
+van nest
+van oors
+van orde
+van phil
+van rijn
+van rijs
+van scho
+van schy
+van sick
+van terr
+van veen
+van vrou
+van weri
+van-king
+vanaman
+vanasse
+vance
+vanda
+vandagri
+vandenbe
+vandenbo
+vandenhe
+vandenki
+vanderbi
+vanderbo
+vanderbu
+vanderge
+vanderhe
+vanderho
+vanderpo
+vanderve
+vanderwe
+vandeval
+vandevan
+vandeven
+vandewat
+vandewou
+vandomme
+vandoorn
+vandusen
+vanessa
+vangaste
+vania
+vanity
+vankoote
+vanlaar
+vanliew
+vann
+vanna
+vanni
+vannie
+vanny
+vanpatte
+vanstaal
+vanstory
+vanta
+vanter
+vanwormh
+vanwyche
+vanya
+vanzella
+varady
+varaiya
+varano
+varda
+vardy
+varennes
+vargas
+vargo
+varia
+varkel
+varkey
+varley
+varmazis
+varsava
+vartanes
+varughes
+varujan
+vasan
+vasantha
+vasarhel
+vaserfir
+vasil
+vasile
+vasili
+vasiliad
+vasiliki
+vasilis
+vasilopo
+vasily
+vason
+vasoufz
+vassili
+vassilik
+vassilis
+vassily
+vassos
+vastine
+vasu
+vasudeva
+vaswani
+vaterlau
+vaters
+vaughan
+vaughn
+vavarout
+vavroch
+vawter
+vax
+vazirani
+vea
+veale
+veals
+veciana
+veck
+ved
+veda
+vedant
+veedell
+veen
+veena
+vega
+vehling
+veillett
+veilleux
+veit
+vejar
+veklerov
+veksler
+vela
+velasque
+vele
+veleta
+velez
+veljko
+vella
+velline
+vellino
+velma
+veloria
+veloz
+velsher
+velvet
+vempati
+ven
+venbakm
+vendette
+veneice
+veness
+veng
+venger
+venguswa
+venier
+venita
+venjohn
+venkat
+venkata
+venkatak
+venkatar
+venkates
+venkatra
+venne
+venner
+venning
+vennos
+ventrone
+ventura
+venturin
+venus
+vera
+veradis
+verardi
+verch
+verde
+verdi
+verdonse
+vere
+verena
+verene
+verge
+verghese
+vergil
+verheyde
+verhoeve
+verhotz
+veriee
+verifica
+verile
+verina
+verinder
+verine
+verkroos
+verla
+verlyn
+verma
+vermeesc
+vermette
+vern
+verna
+verne
+vernen
+verney
+vernice
+verniece
+vernita
+vernon
+vernor
+verona
+veronica
+veronika
+veronike
+veroniqu
+verreau
+verrenne
+verrilli
+versace
+versteeg
+vertolli
+verville
+veryl
+verzilli
+veselko
+vesna
+vespa
+vester
+vesterda
+vetil
+vetrano
+vetrie
+vetter
+vettese
+vevay
+vexler
+vey
+veyrat
+vezeau
+vezina
+vi
+viano
+viau
+viavant
+vibeke
+vic
+vice
+vicente
+vicheara
+vick
+vickers
+vicki
+vickie
+vicky
+victoir
+victor
+victoria
+vicuong
+vida
+vidaurri
+videa
+vidhyana
+vidmer
+vidovic
+vidovik
+viduya
+vidya
+viegas
+vieger
+viehweg
+vieillar
+vieira
+vieiro
+viens
+viera
+vieregge
+vigeant
+viitanie
+vijai
+vijay
+vijaya
+vijayala
+vijya
+vik
+vikas
+viki
+vikki
+vikky
+vikram
+vikrant
+viktor
+viktoria
+vilas
+vilayil
+vilhan
+vilhelm
+vilhelmi
+vilis
+villanue
+villarea
+villella
+villeneu
+vilma
+vilmanse
+vilok
+vilozny
+vimal
+vimi
+vin
+vina
+vinas
+vinay
+vince
+vincent
+vincente
+vincents
+vincenty
+vincenz
+vincenzo
+vineet
+vinet
+viney
+vinh
+vinita
+vinnell
+vinni
+vinnie
+vinny
+vino
+vinod
+vinson
+viola
+violante
+viole
+violet
+violeta
+violetta
+violette
+vipi
+vipul
+viqar
+virani
+virant
+virchick
+virge
+virgie
+virgil
+virgilio
+virgina
+virginia
+virginie
+virgoe
+viriato
+viriya
+virk
+virko
+visentin
+vish
+vishal
+vishwa
+visiting
+viskanta
+visockis
+vispi
+vispy
+visser
+vistlik
+visvanat
+viswa
+viswamit
+vita
+vitacco
+vitaglia
+vital
+vite
+vithit
+vitia
+vito
+vitoria
+vittoria
+vittorio
+viv
+viva
+viveca
+vivek
+vivi
+vivia
+vivian
+viviana
+viviane
+vivianna
+vivianne
+vivie
+vivien
+viviene
+vivienne
+vivier
+viviyan
+vivyan
+vivyanne
+vlad
+vladamir
+vladdy
+vladica
+vladimir
+vladisla
+vlado
+vlahos
+vlanin
+vm
+vmbackup
+vmchange
+vmcord
+vmsuppor
+vmxa
+vo
+voadmin
+vodicka
+voduc
+voelcker
+vogel
+vogt
+voight
+voitel
+volchegu
+volfe
+volk
+volker
+volkmann
+volkmer
+vollmer
+volz
+von
+von ende
+von semm
+von zube
+voncanno
+vonck
+vonderha
+vondersc
+vonderwe
+vonlehmd
+vonni
+vonnie
+vonny
+vonreich
+vony
+vonzant
+voort
+vopalens
+vopni
+voros
+vosberg
+vosburg
+voss
+vosu
+vosup
+voula
+vowels
+vrabel
+vradmin
+vrbetic
+vreugden
+vries
+vrinda
+vrouwerf
+vu
+vucinich
+vuhoan
+vuignier
+vuncanno
+vuong
+vuquoc
+vyachesl
+vyaragav
+vyas
+vyjayant
+vyky
+vyza
+wa
+waals
+wacheski
+wachtste
+wacker
+wada
+wadasing
+waddell
+wadden
+waddick
+waddingt
+wade
+wadkins
+wadswort
+waespe
+waeyen
+wagage
+wager
+wagers
+waggoner
+waghorne
+waghray
+wagle
+wagner
+wagoner
+wahab
+wahbe
+wahju
+wai
+wai-bun
+wai-chau
+wai-chin
+wai-fah
+wai-hung
+wai-leun
+wai-man
+waichi
+waid
+waidler
+waifah
+waigh
+waihung
+wain
+waines
+wainwrig
+waissman
+wait
+waite
+waiter
+waitman
+waja
+wakabaya
+wakako
+wake
+wakefiel
+wakeham
+wakim
+walas
+walbridg
+walburga
+walchli
+wald
+waldemar
+walden
+waldick
+waldie
+waldo
+waldon
+waldron
+wales
+waletzky
+walford
+walia
+walid
+walker
+walkins
+walkley
+walkowia
+wallace
+wallache
+wallaert
+wallas
+wallbank
+waller
+walles
+walley
+wallgren
+wallie
+wallis
+walliw
+walls
+wally
+waloff
+walpole
+walrand
+walrond
+walser
+walsh
+walston
+walt
+walta
+waltdisn
+walter
+walters
+walther
+walton
+waltraud
+waly
+walz
+wambsgan
+wamozart
+wan
+wanda
+wandel
+wandie
+wandis
+wandojo
+wandsche
+waneta
+wang
+wanids
+wannell
+wanner
+wans
+wanzeck
+war
+warburg
+warburto
+ward
+warde
+warden
+wardle
+wardrop
+ware
+wares
+warfel
+wargnier
+warin
+waring
+wark
+warkenti
+warner
+warnock
+warnow
+warrello
+warren
+warriner
+warshaws
+wartman
+warun
+warwick
+waschuk
+waserman
+wash
+washburn
+washingt
+wasim
+wasitova
+wasley
+wasmeier
+wassel
+wasserma
+wassim
+wasson
+wasylenk
+wasylyk
+wat
+watanabe
+watchmak
+watchorn
+waterhou
+waterman
+waters
+watford
+watkins
+watkinso
+watmore
+watson
+watters
+wattier
+watts
+watznaue
+waucheul
+waugh
+waverley
+waverly
+way
+waybrigh
+wayez
+waylan
+wayland
+waylen
+wayler
+waylin
+wayling
+waylon
+wayman
+waymon
+wayne
+waytowic
+weagle
+weakley
+wealch
+weare
+wease
+weatherl
+weathers
+weaver
+web
+webb
+webber
+weber
+webster
+weckwert
+weddell
+wee-lin
+wee-seng
+wee-thon
+weedmark
+weeks
+wefald
+wefers
+wegener
+weger
+wegner
+wegrowic
+wehara
+wei
+wei-i
+wei-kun
+wei-tsig
+wei-yih
+weibust
+weicheng
+weichung
+weidar
+weidenbo
+weidenfe
+weider
+weidinge
+weidner
+weiguang
+weiheng
+weihs
+weihsing
+weii
+weijia
+weijie
+weikang
+weikuang
+weikun
+weil
+weilin
+weimin
+weimong
+weinbend
+weinberg
+weiner
+weingart
+weinkauf
+weiping
+weirich
+weisenbe
+weiser
+weiss
+weist
+weitsig
+weitz
+weitzel
+weiyih
+welbie
+welby
+welch
+weldon
+welham
+welker
+wellard
+welling
+wells
+wellstoo
+welsch
+welsford
+welsh
+welten
+wemple
+wen
+wen-chie
+wen-hann
+wen-juin
+wen-kai
+wen-lian
+wen-miin
+wen-shan
+wenbin
+wenchien
+wenchih
+wenda
+wendall
+wendel
+wendelin
+wendell
+wendi
+wendi-st
+wendie
+wendista
+wendling
+wendong
+wendt
+wendy
+wendye
+weng
+wenham
+wenhann
+wenjuin
+wenliang
+wenmiin
+wennan
+wennerst
+wenona
+wenonah
+wensel
+wenshan
+wensley
+wentwort
+wentzcov
+wenxi
+wenyon
+wenzel
+wepf
+weppler
+werewolf
+werick
+weringh
+werling
+werner
+wernher
+wernik
+werth
+wertz
+wery
+wes
+wesenber
+wesley
+wesolosk
+wesolows
+wessel
+wessell
+wesselma
+wesselow
+wessels
+wessenbe
+west
+westbroo
+westcott
+wester
+westfall
+westgart
+westlake
+westleig
+westley
+westmore
+weston
+weston-d
+westphal
+westwood
+wetherbe
+wettelan
+wetzel
+wever
+weyand
+weylin
+wga
+whalen
+whaley
+whang
+whatley
+wheatley
+wheaton
+wheeler
+wheelock
+whei-may
+wheimay
+whelan
+whelpdal
+whetston
+whetzel
+whey
+whey-min
+wheyming
+whidden
+whinnery
+whipple
+whipps
+whirpool
+whirter
+whisenhu
+whiskin
+whisler
+whit
+whitaker
+whitby
+whitcomb
+whited
+whitefor
+whitehur
+whiteman
+whitesid
+whitfiel
+whitfill
+whitford
+whiting
+whitlock
+whitman
+whitmore
+whitney
+whitsell
+whitt
+whittake
+whittam
+whitten
+whittier
+whitting
+whitton
+whitty
+whitwam
+whitwell
+whitwort
+whoi
+whyte
+wiatt
+wichers
+wichman
+wicht
+wichterl
+wickes
+wickham
+wickie
+widdicom
+widdis
+widdowso
+widener
+widianto
+widows
+widrig
+widuch
+wiebe
+wiebren
+wiederho
+wiedman
+wiedmann
+wiegand
+wieland
+wiele
+wienert
+wiens
+wiercioc
+wierzba
+wieser
+wiesje
+wieslaw
+wieslawa
+wiest
+wigderso
+wiggin
+wiggins
+wiggs
+wight
+wigle
+wignall
+wikkerin
+wiklund
+wil
+wilbert
+wilbur
+wilburt
+wilby
+wilcox
+wilczews
+wilde
+wildeman
+wilden
+wilder
+wilderma
+wildgen
+wildman
+wildon
+wileen
+wilek
+wilemon
+wilen
+wilenius
+wilensky
+wiley
+wilf
+wilford
+wilfred
+wilfrid
+wilgosh
+wilhelm
+wilhelmi
+wilhelms
+wilhelmu
+wilhoit
+wilie
+wilke
+wilken
+wilkerso
+wilkes
+wilkie
+wilkin
+wilkins
+wilkinso
+wilko
+wilks
+will
+willa
+willabel
+willamin
+willard
+willcock
+willcox
+willdon
+willeke
+willekes
+willem
+willemij
+willemse
+willenbr
+willets
+willett
+willetta
+willette
+willey
+willhoff
+willi
+william
+williams
+willie
+willifor
+willis
+willison
+willmore
+willmott
+willough
+willow
+willson
+willy
+willyt
+wilma
+wilmar
+wilmer
+wilmette
+wilmont
+wilmore
+wilnai
+wilona
+wilone
+wilow
+wilsey
+wilson
+wilt
+wilton
+wiltz
+wimberle
+wimbush
+wimmer
+win
+win-chyi
+wina
+winchest
+winchyi
+winde
+windham
+windom
+windowin
+windsor
+windy
+winerman
+winfield
+winfred
+wing
+wing-ki
+wing-man
+wing-tai
+wingar
+wingard
+wingate
+wingfiel
+wingo
+wingrove
+wingtai
+wini
+winicki
+winifiel
+winifred
+winje
+winklema
+winkler
+winlow
+winn
+winna
+winnah
+winne
+winni
+winnie
+winnifre
+winningh
+winningt
+winnipeg
+winny
+winona
+winonah
+winsberg
+winsborr
+winsky
+winslow
+winstead
+winston
+winterbe
+winters
+winthrop
+wintour
+wippel
+wiring
+wirth
+wiseman
+wishewan
+wisniews
+wissinge
+wissler
+wit
+witchlow
+witham
+withrow
+witkowsk
+witney
+witold
+witort
+wits
+witt
+witte
+wittich
+wittie
+wittik
+wittman
+witty
+witzel
+witzman
+witzmann
+wladysla
+woan
+wobbrock
+woei-pen
+woelffel
+woessner
+woinsky
+wojciech
+wojcik
+wojdylo
+wojnar
+wojtecki
+wokoma
+wolczans
+wolf
+wolfe
+wolfenba
+wolff
+wolfgang
+wolfie
+wolfman
+wolford
+wolfs
+wolfson
+wolfy
+wolk
+woll
+woloshko
+wolowidn
+wolska
+wolski
+wolter
+womack
+womble
+won
+won-uk
+wonda
+wong
+wonuk
+wood
+woodall
+woodford
+woodhall
+woodie
+woodley
+woodlief
+woodline
+woodman
+woodrow
+woods
+woodson
+woodward
+woody
+woodyer
+wooff
+woojin
+wook
+wookie
+woolery
+wooley
+woollam
+woolley
+woolwine
+woon
+wooster
+wooten
+wooters
+wootton
+worden
+words fr
+words in
+working
+world.fa
+wormald
+worms
+worobey
+woroszcz
+worpell
+worrall
+worsley
+worth
+worthing
+worthy
+wortman
+wozniak
+wpms
+wracher
+wragg
+wray
+wren
+wrennie
+wriggles
+wright
+wrigley
+writing
+wrobel
+wroblews
+wruck
+wsadmin
+wsbackup
+wu
+wuan
+wueppelm
+wuertele
+wun
+wunderli
+wurtz
+wyant
+wyatan
+wyatt
+wyble
+wycoff
+wydra
+wye
+wykoff
+wylie
+wyllie
+wylma
+wylo
+wyman
+wymard
+wyn
+wyndham
+wynes
+wynn
+wynne
+wynnie
+wynny
+wyrstiuk
+wyss
+wytenbur
+wyzga-ta
+xantippe
+xavier
+xaviera
+xayaraj
+xena
+xenia
+xenophon
+xenos
+xerxes
+xever
+xi-nam
+xi-xian
+xian
+xiang-se
+xiangsen
+xianjie
+xiao
+xiao-min
+xiaobing
+xiaofei
+xiaofeng
+xiaoguan
+xiaohui
+xiaojing
+xiaolei
+xiaolin
+xiaolong
+xiaomei
+xiaoping
+xiaowen
+xiaoxia
+xie
+xila
+ximenes
+ximenez
+xin
+xingchao
+xingdong
+xinlin
+xinyi
+xiong
+xiqing
+xixian
+xmssuppo
+xnew
+xongxong
+xpm
+xpmbld
+xpmbuild
+xu
+xuan
+xuan-lie
+xuefeng
+xueling
+xumin
+xuong
+xylia
+xylina
+xymenes
+ya-shu
+yabe
+yach
+yadollah
+yaeger
+yael
+yafa
+yaghutie
+yahia
+yahyapou
+yakibchu
+yakimovi
+yakir
+yalcin
+yale
+yali
+yalonda
+yamada
+yamamoto
+yamaoka
+yamashit
+yamato
+yamaura
+yamin
+yan
+yan-shek
+yan-zhen
+yanagida
+yanan
+yanaton
+yance
+yancey
+yancy
+yandell
+yanjun
+yank
+yankee
+yann
+yanna
+yannick
+yannis
+yano
+yanosik
+yanshek
+yansun
+yao
+yao-nan
+yaonan
+yaphet
+yaping
+yarber
+yarbroug
+yard
+yardley
+yardy
+yarlanda
+yarnell
+yaron
+yarosh
+yaroslav
+yasar
+yaser
+yashu
+yasmeen
+yasmin
+yassa
+yassar
+yassin
+yasuaki
+yasuhiro
+yasuko
+yasumasa
+yasuo
+yasushi
+yasuura
+yate
+yates
+yatin
+yatish
+yau
+yau-fun
+yau-mun
+yau-wu
+yaumun
+yaung
+yauwu
+yavar
+yavuz
+yawar
+yazdani
+yazdi
+yc
+ye-sho
+yea-ping
+yeager
+yeal
+yeaping
+yearwood
+yeaton
+yechezke
+yeck
+yedema
+yee
+yee-ning
+yeh
+yehuda
+yehudi
+yehudit
+yeirnie
+yelena
+yelvingt
+yemuna
+yen
+yen-heng
+yen-jhy
+yen-meng
+yendall
+yeng
+yenheng
+yenilmez
+yenjhy
+yenmeng
+yenor
+yeo
+yeo-hoon
+yeocheol
+yeohoon
+yeong-ch
+yeong-eo
+yeongchy
+yeongeon
+yerga
+yerigan
+yerneni
+yesho
+yetta
+yettie
+yetty
+yetung
+yeun
+yeun-jyr
+yeung
+yeunjyr
+yevette
+yew-shin
+yewshing
+yezheng
+yezi
+yhu-tin
+yhutin
+yi
+yi-min
+yiannis
+yie-tarn
+yietarng
+yifei
+yigal
+yih
+yihban
+yihchih
+yii-mei
+yiimei
+yijean
+yikhon
+yiliang
+yim
+yimin
+ying
+ying-cdi
+yingcdi
+yishun
+yitan
+yiu-kong
+yiukong
+yixia
+yixin
+ylaine
+yll-chen
+yllcheng
+ynes
+ynez
+yngvar
+yoakum
+yock
+yoda
+yodha
+yoe
+yogesh
+yogeswar
+yogi
+yohe
+yokan
+yoke
+yoke-kee
+yokeley
+yoko
+yokono
+yokoono
+yolanda
+yolande
+yolane
+yolanthe
+yon-chun
+yonchun
+yong
+yong-hyu
+yongdong
+yonghyun
+yongil
+yongli
+yongxin
+yonhong
+yonik
+yonk
+yoo
+yoon
+yoon-mo
+yoonjung
+yoonmo
+yoonsik
+yoram
+yorgo
+yorgos
+york
+yorke
+yorker
+yoshi
+yoshiaki
+yoshihit
+yoshikaw
+yoshiko
+yoshimi
+yoshimit
+yoshinob
+yoshio
+yoshioka
+yoshiyam
+yosi
+yossaria
+yost
+yosuf
+you-lian
+youel
+youji
+youliang
+youlin
+youn
+youn-jun
+younan
+younes
+young
+young-ba
+young-il
+young-ju
+youngbai
+youngblo
+younger
+youngill
+younglov
+youngman
+youngqui
+youngs
+younjung
+younkin
+yount
+youping
+yousef
+yousefpo
+youssef
+yousuf
+youwen
+yovonnda
+yowell
+ysabel
+ytshak
+yu
+yu-chen
+yu-chian
+yu-chung
+yu-hung
+yu-kai
+yu-pei
+yu-wei
+yuan
+yuan-cha
+yuan-shi
+yuanchao
+yuanjian
+yuanshin
+yuchen
+yuchiang
+yuchong
+yudin
+yudy
+yue
+yue-min
+yue-shun
+yuechu
+yueh
+yueh-min
+yueh-shi
+yuehming
+yuehshio
+yuehwern
+yueli
+yuen
+yuen-pui
+yuenglin
+yueping
+yueshun
+yugang
+yuh-dauh
+yuh-jiun
+yuh-tai
+yuhanna
+yuhdauh
+yuhjiun
+yuhn
+yuhtai
+yuill
+yuji
+yujie
+yuk-wha
+yuke
+yukihiko
+yukiko
+yukinaga
+yukinobu
+yuklung
+yuko
+yuksel
+yukuo
+yul
+yule
+yulia
+yulma
+yum
+yuma
+yumi
+yumurtac
+yun
+yun-sun
+yundt
+yung
+yung-chi
+yung-chu
+yung-fu
+yung-pin
+yung-yu
+yungchia
+yungchun
+yungfu
+yunghuoy
+yungmuh
+yungping
+yungyu
+yunn-tzu
+yunntzu
+yunsun
+yuon-kua
+yuonkuan
+yupei
+yupin
+yurach
+yurchuk
+yuri
+yurik
+yussuf
+yuste
+yutaka
+yuting
+yuval
+yuwei
+yuyi
+yuyu
+yvan
+yves
+yvet
+yvette
+yvon
+yvonne
+yvor
+yzerman
+z-80
+z80
+zabek
+zabokrzy
+zabransk
+zabrina
+zaccari
+zaccaria
+zach
+zacharia
+zacharie
+zachary
+zacherie
+zachery
+zack
+zackaria
+zadeh
+zadorozn
+zadow
+zafar
+zafarano
+zafarull
+zafer
+zaga
+zagorsek
+zagorski
+zagrodne
+zahara
+zaharoff
+zaharych
+zahid
+zahir
+zahirul
+zahn
+zahnley
+zahra
+zaia
+zaid
+zaidi
+zaihua
+zainab
+zajac
+zak
+zaka
+zakai
+zakarow
+zaker
+zalameda
+zalcstei
+zalee
+zaleski
+zalite
+zaliznya
+zalman
+zalokar
+zaloker
+zalzale
+zaman
+zampino
+zan
+zanariah
+zander
+zandra
+zane
+zanet
+zaneta
+zanetti
+zanga
+zani
+zanni
+zantiris
+zapach
+zappe
+zara
+zaragoza
+zarah
+zarate
+zared
+zarella
+zaretsky
+zargham
+zaria
+zarkel
+zarla
+zarlenga
+zarrabia
+zarrin
+zatkovic
+zatti
+zattiero
+zatylny
+zauhar
+zauner
+zavadiuk
+zaven
+zawadka
+zaydan
+zazulak
+zbib
+zbignew
+zbigniew
+zbuda
+zdenek
+zdenka
+zdenko
+zea
+zeb
+zebadiah
+zebedee
+zebulen
+zebulon
+zecharia
+zed
+zedekiah
+zedrick
+zee
+zeggil
+zegray
+zehir-ch
+zehra
+zeidler
+zeiger
+zeigler
+zeilinge
+zeimet
+zein
+zeina
+zeisler
+zeitler
+zejing
+zeke
+zelda
+zelenka
+zelig
+zeljko
+zelko
+zeller
+zellers
+zelma
+zelsmann
+zelwer
+zemanek
+zen
+zena
+zenaida
+zenar
+zeng
+zenghong
+zenia
+zenisek
+zenkevic
+zenkner
+zenon
+zere
+zerk
+zero
+zerriffi
+zetterlu
+zetts
+zexiang
+zhang
+zhanna
+zhao
+zhaohong
+zhaoqi
+zhaoxu
+zhelka
+zhen
+zheng
+zhengyu
+zhilan
+zhishun
+zhiwei
+zhixin
+zhiyong
+zhong
+zhongde
+zhongfu
+zhongjin
+zhongqua
+zhongxia
+zhou
+zhuezhi
+zhuolin
+zi-ping
+zi-qiang
+zia
+ziad
+ziai
+zicheng
+ziebarth
+zieber
+ziegler
+ziehn
+zielinsk
+ziemba
+zigrand
+zilaie
+zilberst
+zilla
+zilvia
+zimmer
+zimmerer
+zimmerly
+zimmerma
+zina
+zinati
+zingale
+zingeler
+zinkie
+zinn
+zino
+ziomek
+zipcodes
+ziping
+zippora
+ziqiang
+zirko
+zissis
+zisu
+zita
+zitella
+zitko
+zito
+zitzmann
+ziva
+zivanovi
+zivilik
+zivkovic
+ziyi
+ziyou
+zlatin
+zlotnick
+znack
+zoe
+zoehner
+zoel
+zoellner
+zoenka
+zoerb
+zofia
+zohair
+zohar
+zohman
+zohreh
+zola
+zollie
+zollman
+zolly
+zolmer
+zoltan
+zonda
+zondra
+zone-chi
+zonechin
+zongyi
+zonker
+zonner
+zonnya
+zonoun
+zoppel
+zora
+zorah
+zoran
+zorana
+zoratti
+zorina
+zorine
+zork
+zorn
+zorony
+zorzi
+zottola
+zou
+zouheir
+zrobok
+zsa zsa
+zsazsa
+zubair
+zubans
+zuben
+zubricki
+zuccarel
+zuckerma
+zug
+zuhua
+zuk
+zukas
+zukosky
+zukovsky
+zulema
+zulfikar
+zumel
+zumhagen
+zumpf
+zunuzi
+zuranato
+zurawlev
+zureik
+zurl
+zuzana
+zvonar
+zwi
+zwick
+zwicker
+zwierzch
+zybala
+zyg
+zygmunt
+zylstra
zywiel
\ No newline at end of file
diff --git a/examples/basefilter/README.rst b/examples/base_filters/README.rst
similarity index 90%
rename from examples/basefilter/README.rst
rename to examples/base_filters/README.rst
index cdbe6b494a..7dd4cddfef 100644
--- a/examples/basefilter/README.rst
+++ b/examples/base_filters/README.rst
@@ -19,6 +19,5 @@ Their passwords are 'password'
Run it::
- $ export FLASK_APP=app/__init__.py
$ flask fab create-admin
$ flask run
diff --git a/examples/base_filters/app/__init__.py b/examples/base_filters/app/__init__.py
new file mode 100644
index 0000000000..860bd942b5
--- /dev/null
+++ b/examples/base_filters/app/__init__.py
@@ -0,0 +1,27 @@
+from flask import Flask
+from .views import ContactModelView, GroupModelView
+from .extensions import appbuilder, db
+
+
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+ appbuilder.add_view(
+ GroupModelView,
+ "List Groups",
+ icon="fa-folder-open-o",
+ category="Contacts",
+ category_icon="fa-envelope",
+ )
+ appbuilder.add_separator("Contacts")
+ appbuilder.add_view(
+ ContactModelView, "List Contacts", icon="fa-envelope", category="Contacts"
+ )
+ return app
+
+
+# For backward compatibility
+app = create_app()
diff --git a/examples/base_filters/app/extensions.py b/examples/base_filters/app/extensions.py
new file mode 100644
index 0000000000..419cabef39
--- /dev/null
+++ b/examples/base_filters/app/extensions.py
@@ -0,0 +1,5 @@
+from flask_appbuilder import AppBuilder
+from flask_appbuilder.utils.legacy import get_sqla_class
+
+db = get_sqla_class()()
+appbuilder = AppBuilder()
diff --git a/examples/basefilter/app/models.py b/examples/base_filters/app/models.py
similarity index 93%
rename from examples/basefilter/app/models.py
rename to examples/base_filters/app/models.py
index f2d1d73074..9899fa5416 100644
--- a/examples/basefilter/app/models.py
+++ b/examples/base_filters/app/models.py
@@ -9,6 +9,7 @@
class ContactGroup(Model):
+ __tablename__ = "contact_group"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -17,6 +18,7 @@ def __repr__(self):
class Gender(Model):
+ __tablename__ = "gender"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -25,6 +27,7 @@ def __repr__(self):
class Contact(AuditMixin, Model):
+ __tablename__ = "contact"
id = Column(Integer, primary_key=True)
name = Column(String(150), unique=True, nullable=False)
address = Column(String(564))
diff --git a/examples/basefilter/app/translations/pt/LC_MESSAGES/messages.mo b/examples/base_filters/app/translations/pt/LC_MESSAGES/messages.mo
similarity index 100%
rename from examples/basefilter/app/translations/pt/LC_MESSAGES/messages.mo
rename to examples/base_filters/app/translations/pt/LC_MESSAGES/messages.mo
diff --git a/examples/basefilter/app/translations/pt/LC_MESSAGES/messages.po b/examples/base_filters/app/translations/pt/LC_MESSAGES/messages.po
similarity index 100%
rename from examples/basefilter/app/translations/pt/LC_MESSAGES/messages.po
rename to examples/base_filters/app/translations/pt/LC_MESSAGES/messages.po
diff --git a/examples/basefilter/app/views.py b/examples/base_filters/app/views.py
similarity index 76%
rename from examples/basefilter/app/views.py
rename to examples/base_filters/app/views.py
index d29f36d535..e4af3ca7aa 100644
--- a/examples/basefilter/app/views.py
+++ b/examples/base_filters/app/views.py
@@ -3,7 +3,6 @@
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.interface import SQLAInterface
-from . import appbuilder, db
from .models import Contact, ContactGroup
@@ -45,17 +44,3 @@ class ContactModelView(ModelView):
class GroupModelView(ModelView):
datamodel = SQLAInterface(ContactGroup)
related_views = [ContactModelView]
-
-
-db.create_all()
-appbuilder.add_view(
- GroupModelView,
- "List Groups",
- icon="fa-folder-open-o",
- category="Contacts",
- category_icon="fa-envelope",
-)
-appbuilder.add_separator("Contacts")
-appbuilder.add_view(
- ContactModelView, "List Contacts", icon="fa-envelope", category="Contacts"
-)
diff --git a/examples/basefilter/babel/babel.cfg b/examples/base_filters/babel/babel.cfg
similarity index 100%
rename from examples/basefilter/babel/babel.cfg
rename to examples/base_filters/babel/babel.cfg
diff --git a/examples/basefilter/babel/messages.pot b/examples/base_filters/babel/messages.pot
similarity index 100%
rename from examples/basefilter/babel/messages.pot
rename to examples/base_filters/babel/messages.pot
diff --git a/examples/basefilter/config.py b/examples/base_filters/config.py
similarity index 100%
rename from examples/basefilter/config.py
rename to examples/base_filters/config.py
diff --git a/examples/base_filters/testdata.py b/examples/base_filters/testdata.py
new file mode 100644
index 0000000000..1b0f2419a0
--- /dev/null
+++ b/examples/base_filters/testdata.py
@@ -0,0 +1,95 @@
+from datetime import datetime
+import logging
+import random
+
+from flask_appbuilder.extensions import db
+from app import appbuilder, create_app
+from app.models import Contact, ContactGroup, Gender
+
+log = logging.getLogger(__name__)
+
+
+app = create_app()
+
+
+def get_random_name(names_list, size=1):
+ name_lst = [
+ names_list[random.randrange(0, len(names_list))].decode("utf-8").capitalize()
+ for i in range(0, size)
+ ]
+ return " ".join(name_lst)
+
+
+def upsert_test_data():
+ role_admin = appbuilder.sm.find_role(appbuilder.sm.auth_role_admin)
+ user1 = appbuilder.sm.add_user(
+ "user1", "user1", "test", "user1@fab.org", role_admin, "password"
+ )
+ user2 = appbuilder.sm.add_user(
+ "user2", "user2", "test", "user2@fab.org", role_admin, "password"
+ )
+ user3 = appbuilder.sm.add_user(
+ "user3", "user3", "test", "user3@fab.org", role_admin, "password"
+ )
+
+ try:
+ db.session.add(ContactGroup(name="Friends"))
+ db.session.add(ContactGroup(name="Family"))
+ db.session.add(ContactGroup(name="Work"))
+ db.session.commit()
+ except Exception as e:
+ log.error("Group creation error: %s", e)
+ db.session.rollback()
+ exit(1)
+
+ try:
+ db.session.add(Gender(name="Male"))
+ db.session.add(Gender(name="Female"))
+ db.session.commit()
+ except Exception as e:
+ log.error("Gender creation error: %s", e)
+ db.session.rollback()
+ exit(1)
+
+ with open("NAMES.DIC", "rb") as f:
+ names_list = [x.strip() for x in f.readlines()]
+ j = 1
+ for i in range(1, 100):
+ c = Contact()
+ c.name = get_random_name(names_list, random.randrange(2, 6))
+ c.address = "Street " + names_list[random.randrange(0, len(names_list))].decode(
+ "utf-8"
+ )
+ c.personal_phone = random.randrange(1111111, 9999999)
+ c.personal_celphone = random.randrange(1111111, 9999999)
+ c.contact_group_id = random.randrange(1, 4)
+ c.gender_id = random.randrange(1, 3)
+ year = random.choice(range(1900, 2012))
+ month = random.choice(range(1, 12))
+ day = random.choice(range(1, 28))
+ c.birthday = datetime(year, month, day)
+ c.changed_on = datetime.now()
+ c.created_on = datetime.now()
+ if j == 1:
+ j += 1
+ _user = user1
+ elif j == 2:
+ j += 1
+ _user = user2
+ else:
+ j = 1
+ _user = user3
+ c.created_by = _user
+ c.changed_by = _user
+
+ db.session.add(c)
+ try:
+ db.session.commit()
+ print("inserted", c)
+ except Exception as e:
+ log.error("Contact creation error: %s", e)
+ db.session.rollback()
+
+
+with app.app_context():
+ upsert_test_data()
diff --git a/examples/basefilter/app/__init__.py b/examples/basefilter/app/__init__.py
deleted file mode 100644
index 1a5aed6b8c..0000000000
--- a/examples/basefilter/app/__init__.py
+++ /dev/null
@@ -1,15 +0,0 @@
-import logging
-
-from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
-
-
-logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
-logging.getLogger().setLevel(logging.DEBUG)
-
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session)
-
-from . import models, views # noqa
diff --git a/examples/basefilter/testdata.py b/examples/basefilter/testdata.py
deleted file mode 100644
index 08ee3798e8..0000000000
--- a/examples/basefilter/testdata.py
+++ /dev/null
@@ -1,89 +0,0 @@
-from datetime import datetime
-import logging
-import random
-
-from app import appbuilder, db
-from app.models import Contact, ContactGroup, Gender
-
-log = logging.getLogger(__name__)
-
-
-def get_random_name(names_list, size=1):
- name_lst = [
- names_list[random.randrange(0, len(names_list))].decode("utf-8").capitalize()
- for i in range(0, size)
- ]
- return " ".join(name_lst)
-
-
-role_admin = appbuilder.sm.find_role(appbuilder.sm.auth_role_admin)
-user1 = appbuilder.sm.add_user(
- "user1", "user1", "test", "user1@fab.org", role_admin, "password"
-)
-user2 = appbuilder.sm.add_user(
- "user2", "user2", "test", "user2@fab.org", role_admin, "password"
-)
-user3 = appbuilder.sm.add_user(
- "user3", "user3", "test", "user3@fab.org", role_admin, "password"
-)
-
-try:
- db.session.add(ContactGroup(name="Friends"))
- db.session.add(ContactGroup(name="Family"))
- db.session.add(ContactGroup(name="Work"))
- db.session.commit()
-except Exception as e:
- log.error("Group creation error: %s", e)
- db.session.rollback()
- exit(1)
-
-try:
- db.session.add(Gender(name="Male"))
- db.session.add(Gender(name="Female"))
- db.session.commit()
-except Exception as e:
- log.error("Gender creation error: %s", e)
- db.session.rollback()
- exit(1)
-
-f = open("NAMES.DIC", "rb")
-names_list = [x.strip() for x in f.readlines()]
-
-f.close()
-
-j = 1
-for i in range(1, 100):
- c = Contact()
- c.name = get_random_name(names_list, random.randrange(2, 6))
- c.address = "Street " + names_list[random.randrange(0, len(names_list))].decode(
- "utf-8"
- )
- c.personal_phone = random.randrange(1111111, 9999999)
- c.personal_celphone = random.randrange(1111111, 9999999)
- c.contact_group_id = random.randrange(1, 4)
- c.gender_id = random.randrange(1, 3)
- year = random.choice(range(1900, 2012))
- month = random.choice(range(1, 12))
- day = random.choice(range(1, 28))
- c.birthday = datetime(year, month, day)
- c.changed_on = datetime.now()
- c.created_on = datetime.now()
- if j == 1:
- j += 1
- _user = user1
- elif j == 2:
- j += 1
- _user = user2
- else:
- j = 1
- _user = user3
- c.created_by = _user
- c.changed_by = _user
-
- db.session.add(c)
- try:
- db.session.commit()
- print("inserted", c)
- except Exception as e:
- log.error("Contact creation error: %s", e)
- db.session.rollback()
diff --git a/examples/composite_keys/README.rst b/examples/composite_keys/README.rst
index 961625afae..f0de512026 100644
--- a/examples/composite_keys/README.rst
+++ b/examples/composite_keys/README.rst
@@ -9,7 +9,6 @@ Insert test data::
Run it::
- $ export FLASK_APP=app/__init__.py
$ flask fab create-admin
$ flask run
diff --git a/examples/composite_keys/app/__init__.py b/examples/composite_keys/app/__init__.py
index 1a5aed6b8c..b03c8d1278 100644
--- a/examples/composite_keys/app/__init__.py
+++ b/examples/composite_keys/app/__init__.py
@@ -1,15 +1,40 @@
-import logging
-
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
+from .views import ItemModelView, RackModelView, InventoryModelView, DatacenterModelView
+from .extensions import appbuilder, db
+
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+ appbuilder.add_view(
+ DatacenterModelView,
+ "List Datacenters",
+ icon="fa-folder-open-o",
+ category="Datacenters",
+ category_icon="fa-envelope",
+ )
+ appbuilder.add_view(
+ RackModelView, "List Racks", icon="fa-envelope", category="Datacenters"
+ )
+ appbuilder.add_view(
+ ItemModelView,
+ "List Items",
+ icon="fa-folder-open-o",
+ category="Datacenters",
+ category_icon="fa-envelope",
+ )
+ appbuilder.add_view(
+ InventoryModelView,
+ "List Inventory",
+ icon="fa-envelope",
+ category="Datacenters",
+ )
-logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
-logging.getLogger().setLevel(logging.DEBUG)
+ return app
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session)
-from . import models, views # noqa
+# For backward compatibility
+app = create_app()
diff --git a/examples/composite_keys/app/extensions.py b/examples/composite_keys/app/extensions.py
new file mode 100644
index 0000000000..419cabef39
--- /dev/null
+++ b/examples/composite_keys/app/extensions.py
@@ -0,0 +1,5 @@
+from flask_appbuilder import AppBuilder
+from flask_appbuilder.utils.legacy import get_sqla_class
+
+db = get_sqla_class()()
+appbuilder = AppBuilder()
diff --git a/examples/composite_keys/app/models.py b/examples/composite_keys/app/models.py
index cb28f1677a..7a5d25cfcb 100644
--- a/examples/composite_keys/app/models.py
+++ b/examples/composite_keys/app/models.py
@@ -1,5 +1,6 @@
import datetime
+from flask_sqlalchemy.model import NameMixin
from flask_appbuilder import Model
from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship
@@ -7,7 +8,8 @@
mindate = datetime.date(datetime.MINYEAR, 1, 1)
-class Item(Model):
+class Item(NameMixin, Model):
+ __tablename__ = "item"
id = Column(Integer, primary_key=True)
serial_number = Column(String, unique=True)
model = Column(String(150), nullable=False)
@@ -16,7 +18,8 @@ def __repr__(self):
return "%s (%s)" % (self.model, self.serial_number)
-class Datacenter(Model):
+class Datacenter(NameMixin, Model):
+ __tablename__ = "datacenter"
id = Column(Integer, primary_key=True)
name = Column(String(150), unique=True, nullable=False)
address = Column(String(564))
@@ -25,7 +28,8 @@ def __repr__(self):
return self.name
-class Rack(Model):
+class Rack(NameMixin, Model):
+ __tablename__ = "rack"
num = Column(Integer, primary_key=True)
datacenter_id = Column(
Integer, ForeignKey("datacenter.id"), primary_key=True, nullable=False
@@ -36,7 +40,8 @@ def __repr__(self):
return "%d-%s" % (self.num, self.datacenter)
-class Inventory(Model):
+class Inventory(NameMixin, Model):
+ __tablename__ = "inventory"
item_id = Column(Integer, ForeignKey("item.id"), primary_key=True, nullable=False)
item = relationship("Item")
rack_num = Column(Integer, ForeignKey("rack.num"), primary_key=True, nullable=False)
diff --git a/examples/composite_keys/app/views.py b/examples/composite_keys/app/views.py
index 1bb762dd81..2c16c4546a 100644
--- a/examples/composite_keys/app/views.py
+++ b/examples/composite_keys/app/views.py
@@ -1,7 +1,5 @@
from flask_appbuilder import ModelView
from flask_appbuilder.models.sqla.interface import SQLAInterface
-
-from . import appbuilder, db
from .models import Datacenter, Inventory, Item, Rack
@@ -38,26 +36,3 @@ class DatacenterModelView(ModelView):
related_views = [RackModelView]
show_template = "appbuilder/general/model/show_cascade.html"
edit_template = "appbuilder/general/model/edit_cascade.html"
-
-
-db.create_all()
-appbuilder.add_view(
- DatacenterModelView,
- "List Datacenters",
- icon="fa-folder-open-o",
- category="Datacenters",
- category_icon="fa-envelope",
-)
-appbuilder.add_view(
- RackModelView, "List Racks", icon="fa-envelope", category="Datacenters"
-)
-appbuilder.add_view(
- ItemModelView,
- "List Items",
- icon="fa-folder-open-o",
- category="Datacenters",
- category_icon="fa-envelope",
-)
-appbuilder.add_view(
- InventoryModelView, "List Inventory", icon="fa-envelope", category="Datacenters"
-)
diff --git a/examples/composite_keys/testdata.py b/examples/composite_keys/testdata.py
index 853e48d885..b828782de9 100644
--- a/examples/composite_keys/testdata.py
+++ b/examples/composite_keys/testdata.py
@@ -1,9 +1,9 @@
import logging
-from app import db
-from app.models import Inventory, Datacenter, Rack, Item
+from app import create_app
+from app.models import Datacenter, Rack, Item
+from flask_appbuilder.extensions import db
import random
import string
-from datetime import datetime
log = logging.getLogger(__name__)
@@ -16,6 +16,8 @@
datacenters = list()
+app = create_app()
+
def get_random_name(names_list, size=1):
return names_list[random.randrange(0, len(names_list))]
@@ -25,33 +27,38 @@ def serial_generator(size=6, chars=string.ascii_uppercase + string.digits):
return "".join(random.choice(chars) for _ in range(size))
-for city in cities:
- datacenter = Datacenter()
- datacenter.name = "DC %s" % city
- datacenter.address = city
- datacenters.append(datacenter)
- db.session.add(datacenter)
- log.info(datacenter)
- try:
- db.session.commit()
- for num in range(1, DC_RACK_MAX):
- rack = Rack()
- rack.num = num
- rack.datacenter = datacenter
- db.session.add(rack)
-
- except Exception as e:
- log.error("Creating Datacenter: %s", e)
- db.session.rollback()
-
-for i in range(1, ITEM_MAX):
- item = Item()
- item.serial_number = serial_generator()
- item.model = get_random_name(models)
- db.session.add(item)
- log.info(item)
- try:
- db.session.commit()
- except Exception as e:
- log.error("Creating Item: %s", e)
- db.session.rollback()
+def upsert_test_data():
+ for city in cities:
+ datacenter = Datacenter()
+ datacenter.name = "DC %s" % city
+ datacenter.address = city
+ datacenters.append(datacenter)
+ db.session.add(datacenter)
+ log.info(datacenter)
+ try:
+ db.session.commit()
+ for num in range(1, DC_RACK_MAX):
+ rack = Rack()
+ rack.num = num
+ rack.datacenter = datacenter
+ db.session.add(rack)
+
+ except Exception as e:
+ log.error("Creating Datacenter: %s", e)
+ db.session.rollback()
+
+ for i in range(1, ITEM_MAX):
+ item = Item()
+ item.serial_number = serial_generator()
+ item.model = get_random_name(models)
+ db.session.add(item)
+ log.info(item)
+ try:
+ db.session.commit()
+ except Exception as e:
+ log.error("Creating Item: %s", e)
+ db.session.rollback()
+
+
+with app.app_context():
+ upsert_test_data()
diff --git a/examples/crud_rest_api/README.rst b/examples/crud_rest_api/README.rst
index 12d3c7d620..c046f74197 100644
--- a/examples/crud_rest_api/README.rst
+++ b/examples/crud_rest_api/README.rst
@@ -9,7 +9,6 @@ Insert test data::
Run it::
- $ export FLASK_APP=app/__init__.py
$ flask fab create-admin
$ flask run
diff --git a/examples/crud_rest_api/app/__init__.py b/examples/crud_rest_api/app/__init__.py
index 67cd8d1b8f..b178f0d507 100644
--- a/examples/crud_rest_api/app/__init__.py
+++ b/examples/crud_rest_api/app/__init__.py
@@ -1,14 +1,35 @@
-import logging
-
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
+from .api import GreetingApi, ContactModelApi, GroupModelApi, ModelOMParentApi, ContactGroupModelView, ContactGroupTagModelView
+from .extensions import appbuilder, db
+
-logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
-logging.getLogger().setLevel(logging.DEBUG)
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+ db.create_all()
+ appbuilder.add_api(GreetingApi)
+ appbuilder.add_api(ContactModelApi)
+ appbuilder.add_api(GroupModelApi)
+ appbuilder.add_api(ModelOMParentApi)
+ appbuilder.add_view(
+ ContactGroupModelView,
+ "List Contact Groups",
+ icon="fa-folder-open-o",
+ category="Contacts",
+ category_icon="fa-envelope",
+ )
+ appbuilder.add_view(
+ ContactGroupTagModelView,
+ "List Contact Group Tags",
+ icon="fa-folder-open-o",
+ category="Contacts",
+ category_icon="fa-envelope",
+ )
+ return app
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session)
-from . import models, api # noqa
+# For backward compatibility
+app = create_app()
diff --git a/examples/crud_rest_api/app/api.py b/examples/crud_rest_api/app/api.py
index 7eea760656..872b17b8aa 100644
--- a/examples/crud_rest_api/app/api.py
+++ b/examples/crud_rest_api/app/api.py
@@ -1,20 +1,27 @@
-from flask_appbuilder import ModelRestApi
+from flask_appbuilder import ModelRestApi, ModelView
from flask_appbuilder.api import BaseApi, expose
from flask_appbuilder.models.sqla.interface import SQLAInterface
from flask_appbuilder.models.filters import BaseFilter
-from sqlalchemy import or_
-
-from . import appbuilder, db
-from .models import Contact, ContactGroup, ModelOMParent
from marshmallow import fields, Schema
+from sqlalchemy import or_
-
-db.create_all()
+from .models import Contact, ContactGroup, ModelOMParent, ContactGroupTag
class GreetingsResponseSchema(Schema):
message = fields.String()
+class ContactGroupModelView(ModelView):
+ datamodel = SQLAInterface(ContactGroup)
+ list_columns = ["name", "created_by.first_name", "tags"]
+ add_columns = ["name", "tags"]
+ edit_columns = ["name", "tags"]
+
+class ContactGroupTagModelView(ModelView):
+ datamodel = SQLAInterface(ContactGroupTag)
+ add_columns = ["name"]
+ edit_columns = ["name"]
+ list_columns = ["name"]
class GreetingApi(BaseApi):
resource_name = "greeting"
@@ -41,9 +48,6 @@ def greeting(self):
return self.response(200, message="Hello")
-appbuilder.add_api(GreetingApi)
-
-
class CustomFilter(BaseFilter):
name = "Custom Filter"
arg_name = "opr"
@@ -58,28 +62,20 @@ class ContactModelApi(ModelRestApi):
resource_name = "contact"
datamodel = SQLAInterface(Contact)
allow_browser_login = True
-
+ list_columns = ["id", "name", "contact_group.id"]
search_filters = {"name": [CustomFilter]}
openapi_spec_methods = {
"get_list": {"get": {"description": "Get all contacts, filter and pagination"}}
}
-appbuilder.add_api(ContactModelApi)
-
-
class GroupModelApi(ModelRestApi):
resource_name = "group"
datamodel = SQLAInterface(ContactGroup)
allow_browser_login = True
-
-
-appbuilder.add_api(GroupModelApi)
+ list_columns = ["name", "tags.name", "created_by.first_name", "created_by.username"]
class ModelOMParentApi(ModelRestApi):
allow_browser_login = True
datamodel = SQLAInterface(ModelOMParent)
-
-
-appbuilder.add_api(ModelOMParentApi)
diff --git a/examples/crud_rest_api/app/extensions.py b/examples/crud_rest_api/app/extensions.py
new file mode 100644
index 0000000000..419cabef39
--- /dev/null
+++ b/examples/crud_rest_api/app/extensions.py
@@ -0,0 +1,5 @@
+from flask_appbuilder import AppBuilder
+from flask_appbuilder.utils.legacy import get_sqla_class
+
+db = get_sqla_class()()
+appbuilder = AppBuilder()
diff --git a/examples/crud_rest_api/app/models.py b/examples/crud_rest_api/app/models.py
index c2e3af0151..24d36ccf53 100644
--- a/examples/crud_rest_api/app/models.py
+++ b/examples/crud_rest_api/app/models.py
@@ -1,27 +1,53 @@
import datetime
import enum
+from typing import Optional, List
from flask_appbuilder import Model
-from sqlalchemy import Column, Date, ForeignKey, Integer, String, Enum
-from sqlalchemy.orm import relationship, backref
+from flask_appbuilder.models.mixins import AuditMixin
+from sqlalchemy import Column, Date, ForeignKey, Integer, String, Enum, Table
+from sqlalchemy.orm import relationship, backref, Mapped, mapped_column
+
mindate = datetime.date(datetime.MINYEAR, 1, 1)
-class ContactGroup(Model):
- id = Column(Integer, primary_key=True)
- name = Column(String(50), unique=True, nullable=False)
+class ContactGroup(AuditMixin, Model):
+ __tablename__ = "contact_group"
+ id: Mapped[int] = mapped_column(Integer, primary_key=True)
+ name: Mapped[str] = mapped_column(String(50), unique=True, nullable=False)
def __repr__(self):
return self.name
+class ContactGroupTag(Model):
+ __tablename__ = "contact_group_tag"
+ id: Mapped[int] = mapped_column(Integer, primary_key=True)
+ name: Mapped[str] = mapped_column(String(150), unique=True, nullable=False)
+ group_id: Mapped[Optional[int]] = mapped_column(
+ Integer, ForeignKey("contact_group.id"), nullable=True
+ )
+ groups: Mapped[List[ContactGroup]] = relationship(
+ ContactGroup,
+ backref=backref("tags"),
+ secondary="group_tag_association"
+ )
+
+# Association Table for N-N Relationship
+group_tag_association = Table(
+ 'group_tag_association',
+ Model.metadata,
+ Column('group_id', Integer, ForeignKey('contact_group.id')),
+ Column('tag_id', Integer, ForeignKey('contact_group_tag.id'))
+)
+
class Gender(enum.Enum):
Female = 1
Male = 2
class Contact(Model):
+ __tablename__ = "contact"
id = Column(Integer, primary_key=True)
name = Column(String(150), unique=True, nullable=False)
address = Column(String(564))
@@ -51,6 +77,7 @@ class ModelOMParent(Model):
class ModelOMChild(Model):
+ __tablename__ = "model_om_child"
id = Column(Integer, primary_key=True)
field_string = Column(String(50), unique=True, nullable=False)
parent_id = Column(Integer, ForeignKey("model_om_parent.id"))
diff --git a/examples/crud_rest_api/testdata.py b/examples/crud_rest_api/testdata.py
index aca4055d3d..aaf85d2ddd 100644
--- a/examples/crud_rest_api/testdata.py
+++ b/examples/crud_rest_api/testdata.py
@@ -2,11 +2,13 @@
import logging
import random
-from app import db
+from app import db, create_app
from app.models import Contact, ContactGroup, Gender, ModelOMParent, ModelOMChild
log = logging.getLogger(__name__)
+app = create_app()
+
def get_random_name(names_list, size=1):
name_lst = [
@@ -16,68 +18,71 @@ def get_random_name(names_list, size=1):
return " ".join(name_lst)
-try:
- db.session.query(Contact).delete()
- db.session.query(ContactGroup).delete()
- db.session.commit()
-except Exception:
- db.session.rollback()
-
-try:
- groups = []
- groups.append(ContactGroup(name="Friends"))
- groups.append(ContactGroup(name="Family"))
- groups.append(ContactGroup(name="Work"))
- db.session.add(groups[0])
- db.session.add(groups[1])
- db.session.add(groups[2])
- print(groups[0].id)
- db.session.commit()
-except Exception as e:
- log.error("Creating Groups: %s", e)
- db.session.rollback()
-
+def upsert_test_data():
+ try:
+ db.session.query(Contact).delete()
+ db.session.query(ContactGroup).delete()
+ db.session.commit()
+ except Exception:
+ db.session.rollback()
-model_oo_parents = list()
-for i in range(20):
- model = ModelOMParent()
- model.field_string = f"text{i}"
- db.session.add(model)
- db.session.commit()
- model_oo_parents.append(model)
+ try:
+ groups = []
+ groups.append(ContactGroup(name="Friends"))
+ groups.append(ContactGroup(name="Family"))
+ groups.append(ContactGroup(name="Work"))
+ db.session.add(groups[0])
+ db.session.add(groups[1])
+ db.session.add(groups[2])
+ print(groups[0].id)
+ db.session.commit()
+ except Exception as e:
+ log.error("Creating Groups: %s", e)
+ db.session.rollback()
-for i in range(20):
- for j in range(1, 4):
- model = ModelOMChild()
- model.field_string = f"text{i}.{j}"
- model.parent = model_oo_parents[i]
+ model_oo_parents = list()
+ for i in range(20):
+ model = ModelOMParent()
+ model.field_string = f"text{i}"
db.session.add(model)
db.session.commit()
+ model_oo_parents.append(model)
+ for i in range(20):
+ for j in range(1, 4):
+ model = ModelOMChild()
+ model.field_string = f"text{i}.{j}"
+ model.parent = model_oo_parents[i]
+ db.session.add(model)
+ db.session.commit()
-f = open("NAMES.DIC", "rb")
-names_list = [x.strip() for x in f.readlines()]
+ f = open("NAMES.DIC", "rb")
+ names_list = [x.strip() for x in f.readlines()]
-f.close()
+ f.close()
-for i in range(1, 1000):
- c = Contact()
- c.name = get_random_name(names_list, random.randrange(2, 6))
- c.address = "Street " + names_list[random.randrange(0, len(names_list))].decode(
- "utf-8"
- )
- c.personal_phone = random.randrange(1111111, 9999999)
- c.personal_celphone = random.randrange(1111111, 9999999)
- c.contact_group = groups[random.randrange(0, 3)]
- c.gender = random.choice(list(Gender))
- year = random.choice(range(1900, 2012))
- month = random.choice(range(1, 12))
- day = random.choice(range(1, 28))
- c.birthday = datetime(year, month, day)
- db.session.add(c)
- try:
- db.session.commit()
- print("inserted", c)
- except Exception as e:
- log.error("Creating Contact: %s", e)
- db.session.rollback()
+ for i in range(1, 1000):
+ c = Contact()
+ c.name = get_random_name(names_list, random.randrange(2, 6))
+ c.address = "Street " + names_list[random.randrange(0, len(names_list))].decode(
+ "utf-8"
+ )
+ c.personal_phone = random.randrange(1111111, 9999999)
+ c.personal_celphone = random.randrange(1111111, 9999999)
+ c.contact_group = groups[random.randrange(0, 3)]
+ c.gender = random.choice(list(Gender))
+ year = random.choice(range(1900, 2012))
+ month = random.choice(range(1, 12))
+ day = random.choice(range(1, 28))
+ c.birthday = datetime(year, month, day)
+ db.session.add(c)
+ try:
+ db.session.commit()
+ print("inserted", c)
+ except Exception as e:
+ log.error("Creating Contact: %s", e)
+ db.session.rollback()
+
+
+with app.app_context():
+ upsert_test_data()
diff --git a/examples/dash/README.rst b/examples/dash/README.rst
deleted file mode 100644
index fbebbe313e..0000000000
--- a/examples/dash/README.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-Dash embedded in FAB
------------------------
-
-Example of Dash embedded under flask-appbuilder
-
-thanks to @jimmybow (https://github.com/jimmybow/Flask_template_auth_with_Dash) for the inspiration
-
-
-Run it::
-
- $ export FLASK_APP=app/__init__.py
- $ flask fab create-admin
- $ flask run
diff --git a/examples/dash/app/Dashboard/Dash_App1.py b/examples/dash/app/Dashboard/Dash_App1.py
deleted file mode 100644
index e68d9ac642..0000000000
--- a/examples/dash/app/Dashboard/Dash_App1.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Created on Sun Jul 8 10:39:33 2018
-
-@author: jimmybow
-"""
-from dash import Dash
-from dash.dependencies import Input, State, Output
-from .Dash_fun import apply_layout_with_auth, load_object, save_object
-import dash_core_components as dcc
-import dash_html_components as html
-
-url_base = "/dash/app1/"
-
-layout = html.Div(
- [html.Div("This is dash app1"), html.Br(), dcc.Input(id="input_text"), html.Br(), html.Br(), html.Div(id="target")]
-)
-
-
-def Add_Dash(server, appbuilder):
- app = Dash(server=server, url_base_pathname=url_base)
- apply_layout_with_auth(app, layout, appbuilder)
-
- @app.callback(Output("target", "children"), [Input("input_text", "value")])
- def callback_fun(value):
- return "your input is {}".format(value)
-
- return app.server
diff --git a/examples/dash/app/Dashboard/Dash_App2.py b/examples/dash/app/Dashboard/Dash_App2.py
deleted file mode 100644
index 2edb01ea2b..0000000000
--- a/examples/dash/app/Dashboard/Dash_App2.py
+++ /dev/null
@@ -1,41 +0,0 @@
-from datetime import datetime as dt
-
-from dash import Dash
-
-import dash_core_components as dcc
-import dash_html_components as html
-import pandas_datareader as pdr
-from dash.dependencies import Input
-from dash.dependencies import Output
-from .Dash_fun import apply_layout_with_auth, load_object, save_object
-
-url_base = "/dash/app2/"
-
-layout = html.Div(
- [
- html.H1("Stock Tickers"),
- dcc.Dropdown(
- id="my-dropdown",
- options=[
- {"label": "Coke", "value": "COKE"},
- {"label": "Tesla", "value": "TSLA"},
- {"label": "Apple", "value": "AAPL"},
- ],
- value="COKE",
- ),
- dcc.Graph(id="my-graph"),
- ],
- style={"width": "500"},
-)
-
-
-def Add_Dash(server, appbuilder):
- app = Dash(server=server, url_base_pathname=url_base)
- apply_layout_with_auth(app, layout, appbuilder)
-
- @app.callback(Output("my-graph", "figure"), [Input("my-dropdown", "value")])
- def update_graph(selected_dropdown_value):
- df = pdr.get_data_yahoo(selected_dropdown_value, start=dt(2017, 1, 1), end=dt.now())
- return {"data": [{"x": df.index, "y": df.Close}], "layout": {"margin": {"l": 40, "r": 0, "t": 20, "b": 30}}}
-
- return app.server
diff --git a/examples/dash/app/Dashboard/Dash_fun.py b/examples/dash/app/Dashboard/Dash_fun.py
deleted file mode 100644
index b188fb0e66..0000000000
--- a/examples/dash/app/Dashboard/Dash_fun.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Created on Fri Jan 25 22:34:51 2019
-
-@author: jimmybow
-"""
-
-from datetime import datetime, timedelta
-from flask_login import current_user
-from flask import redirect, has_app_context
-import dash_html_components as html
-import dash_core_components as dcc
-import pandas as pd
-import uuid
-import os
-import pickle
-
-
-def save_object(obj, session_id, name):
- os.makedirs("Dir_Store", exist_ok=True)
- file = "Dir_Store/{}_{}".format(session_id, name)
- pickle.dump(obj, open(file, "wb"))
-
-
-def load_object(session_id, name):
- file = "Dir_Store/{}_{}".format(session_id, name)
- obj = pickle.load(open(file, "rb"))
- os.remove(file)
- return obj
-
-
-def clean_Dir_Store():
- if os.path.isdir("Dir_Store"):
- file_list = pd.Series("Dir_Store/" + i for i in os.listdir("Dir_Store"))
- mt = file_list.apply(lambda x: datetime.fromtimestamp(os.path.getmtime(x))).astype(str)
- for i in file_list[mt < str(datetime.now() - timedelta(hours=3))]:
- os.remove(i)
-
-
-def apply_layout_with_auth(app, layout, appbuilder):
- def serve_layout():
- if current_user and current_user.is_authenticated:
- session_id = str(uuid.uuid4())
- clean_Dir_Store()
- return html.Div([html.Div(session_id, id="session_id", style={"display": "none"}), layout])
- loginurl = None
- if has_app_context():
- return dcc.Location(pathname=appbuilder.get_url_for_login, id="")
- return None
-
- app.config.suppress_callback_exceptions = True
- app.layout = serve_layout
diff --git a/examples/dash/app/__init__.py b/examples/dash/app/__init__.py
deleted file mode 100644
index cb9441b33f..0000000000
--- a/examples/dash/app/__init__.py
+++ /dev/null
@@ -1,21 +0,0 @@
-import logging
-
-from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
-from .Dashboard import Dash_App1, Dash_App2
-
-"""
- Logging configuration
-"""
-logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
-logging.getLogger().setLevel(logging.DEBUG)
-
-
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session)
-app = Dash_App1.Add_Dash(app, appbuilder)
-app = Dash_App2.Add_Dash(app, appbuilder)
-
-from . import views # noqa
diff --git a/examples/dash/app/templates/dash.html b/examples/dash/app/templates/dash.html
deleted file mode 100644
index b54a3521f4..0000000000
--- a/examples/dash/app/templates/dash.html
+++ /dev/null
@@ -1,22 +0,0 @@
-{% extends "appbuilder/baselayout.html" %}
-{% block head_css %}
-{{ super() }}
-
-{% endblock %}
-{% block content %}
-
-{% endblock %}
\ No newline at end of file
diff --git a/examples/dash/app/views.py b/examples/dash/app/views.py
deleted file mode 100644
index 6735727e30..0000000000
--- a/examples/dash/app/views.py
+++ /dev/null
@@ -1,36 +0,0 @@
-from flask_appbuilder.baseviews import BaseView
-from flask_appbuilder import expose, has_access
-from .Dashboard import Dash_App1, Dash_App2
-
-from . import appbuilder
-
-
-class MyDashAppCallBack(BaseView):
- route_base = "/"
-
- @has_access
- @expose("/dashboard_callback/")
- def methoddash(self):
- print("dash")
- return self.render_template("dash.html", dash_url=Dash_App1.url_base, appbuilder=appbuilder)
-
-
-appbuilder.add_view_no_menu(MyDashAppCallBack())
-appbuilder.add_link(
- "Dashboard Callback", href="/dashboard_callback/", icon="fa-list", category="Dash Demo", category_icon="fa-list"
-)
-
-
-class MyDashAppGraph(BaseView):
- route_base = "/"
-
- @has_access
- @expose("/dashboard_graph/")
- def methoddash(self):
- return self.render_template("dash.html", dash_url=Dash_App2.url_base, appbuilder=appbuilder)
-
-
-appbuilder.add_view_no_menu(MyDashAppGraph())
-appbuilder.add_link(
- "Dashboard Graph", href="/dashboard_graph/", icon="fa-list", category="Dash Demo", category_icon="fa-list"
-)
diff --git a/examples/dash/babel/babel.cfg b/examples/dash/babel/babel.cfg
deleted file mode 100644
index 70e23ac634..0000000000
--- a/examples/dash/babel/babel.cfg
+++ /dev/null
@@ -1,3 +0,0 @@
-[python: **.py]
-[jinja2: **/templates/**.html]
-encoding = utf-8
diff --git a/examples/dash/babel/messages.pot b/examples/dash/babel/messages.pot
deleted file mode 100644
index 8b13789179..0000000000
--- a/examples/dash/babel/messages.pot
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/examples/dash/config.py b/examples/dash/config.py
deleted file mode 100644
index c9c9245105..0000000000
--- a/examples/dash/config.py
+++ /dev/null
@@ -1,57 +0,0 @@
-import os
-
-basedir = os.path.abspath(os.path.dirname(__file__))
-
-CSRF_ENABLED = True
-SECRET_KEY = "\2\1thisismyscretkey\1\2\e\y\y\h"
-
-OPENID_PROVIDERS = [
- {"name": "Google", "url": "https://www.google.com/accounts/o8/id"},
- {"name": "Yahoo", "url": "https://me.yahoo.com"},
- {"name": "AOL", "url": "http://openid.aol.com/"},
- {"name": "Flickr", "url": "http://www.flickr.com/"},
- {"name": "MyOpenID", "url": "https://www.myopenid.com"},
-]
-
-SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(basedir, "app.db")
-# SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'
-# SQLALCHEMY_DATABASE_URI = 'postgresql://root:password@localhost/myapp'
-BABEL_DEFAULT_LOCALE = "en"
-
-
-# ------------------------------
-# GLOBALS FOR APP Builder
-# ------------------------------
-BABEL_DEFAULT_LOCALE = "en"
-BABEL_DEFAULT_FOLDER = "translations"
-LANGUAGES = {
- "en": {"flag": "gb", "name": "English"},
- "pt": {"flag": "pt", "name": "Portuguese"},
- "es": {"flag": "es", "name": "Spanish"},
- "de": {"flag": "de", "name": "German"},
- "zh": {"flag": "cn", "name": "Chinese"},
- "ru": {"flag": "ru", "name": "Russian"},
-}
-
-
-UPLOAD_FOLDER = basedir + "/app/static/uploads/"
-IMG_UPLOAD_FOLDER = basedir + "/app/static/uploads/"
-IMG_UPLOAD_URL = "/static/uploads/"
-AUTH_TYPE = 1
-AUTH_ROLE_ADMIN = "Admin"
-AUTH_ROLE_PUBLIC = "Public"
-# APP_NAME = "My App Name"
-# APP_ICON = "static/img/logo.jpg"
-APP_THEME = "" # default
-# APP_THEME = "cerulean.css"
-# APP_THEME = "amelia.css"
-# APP_THEME = "cosmo.css"
-# APP_THEME = "cyborg.css"
-# APP_THEME = "flatly.css"
-# APP_THEME = "journal.css"
-# APP_THEME = "readable.css"
-# APP_THEME = "simplex.css"
-# APP_THEME = "slate.css"
-# APP_THEME = "spacelab.css"
-# APP_THEME = "united.css"
-# APP_THEME = "yeti.css"
diff --git a/examples/dash/run.py b/examples/dash/run.py
deleted file mode 100644
index cd78bc086f..0000000000
--- a/examples/dash/run.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from app import app
-
-app.run(host="0.0.0.0", port=8080, debug=True)
diff --git a/examples/employees/app/__init__.py b/examples/employees/app/__init__.py
index ed6d2bb742..79d3d00baf 100644
--- a/examples/employees/app/__init__.py
+++ b/examples/employees/app/__init__.py
@@ -1,27 +1,44 @@
import logging
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
-from sqlalchemy import event
-from sqlalchemy.engine import Engine
+from .views import (
+ DepartmentView,
+ EmployeeView,
+ FunctionView,
+ EmployeeHistoryView,
+ BenefitView,
+)
+from .extensions import appbuilder, db
-from .security import MySecurityManager
logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
logging.getLogger().setLevel(logging.DEBUG)
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session, security_manager_class=MySecurityManager)
-
-
-@event.listens_for(Engine, "connect")
-def set_sqlite_pragma(dbapi_connection, connection_record):
- cursor = dbapi_connection.cursor()
- cursor.execute("PRAGMA foreign_keys=ON")
- cursor.close()
-
-
-from . import models, views # noqa
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+
+ appbuilder.add_view_no_menu(EmployeeHistoryView, "EmployeeHistoryView")
+ appbuilder.add_view(
+ EmployeeView, "Employees", icon="fa-folder-open-o", category="Company"
+ )
+ appbuilder.add_separator("Company")
+ appbuilder.add_view(
+ DepartmentView, "Departments", icon="fa-folder-open-o", category="Company"
+ )
+ appbuilder.add_view(
+ FunctionView, "Functions", icon="fa-folder-open-o", category="Company"
+ )
+ appbuilder.add_view(
+ BenefitView, "Benefits", icon="fa-folder-open-o", category="Company"
+ )
+
+ return app
+
+
+# For backward compatibility
+app = create_app()
diff --git a/examples/employees/app/extensions.py b/examples/employees/app/extensions.py
new file mode 100644
index 0000000000..8b96203adc
--- /dev/null
+++ b/examples/employees/app/extensions.py
@@ -0,0 +1,7 @@
+from flask_appbuilder import AppBuilder
+from flask_appbuilder.utils.legacy import get_sqla_class
+
+from .security import MySecurityManager
+
+db = get_sqla_class()()
+appbuilder = AppBuilder(security_manager_class=MySecurityManager)
diff --git a/examples/employees/app/models.py b/examples/employees/app/models.py
index 3b8de1bb44..c9ea6e2a03 100644
--- a/examples/employees/app/models.py
+++ b/examples/employees/app/models.py
@@ -6,6 +6,7 @@
class Department(Model):
+ __tablename__ = "department"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -14,6 +15,7 @@ def __repr__(self):
class Function(Model):
+ __tablename__ = "function"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -22,6 +24,7 @@ def __repr__(self):
class Benefit(Model):
+ __tablename__ = "benefit"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -43,6 +46,7 @@ def today():
class EmployeeHistory(Model):
+ __tablename__ = "employee_history"
id = Column(Integer, primary_key=True)
department_id = Column(Integer, ForeignKey("department.id"), nullable=False)
department = relationship("Department")
@@ -53,6 +57,7 @@ class EmployeeHistory(Model):
class Employee(Model):
+ __tablename__ = "employee"
id = Column(Integer, primary_key=True)
full_name = Column(String(150), nullable=False)
address = Column(Text(250), nullable=False)
diff --git a/examples/employees/app/views.py b/examples/employees/app/views.py
index 420272d9b4..5dc9eb121c 100644
--- a/examples/employees/app/views.py
+++ b/examples/employees/app/views.py
@@ -1,9 +1,9 @@
from flask_appbuilder import ModelView
+from flask_appbuilder.extensions import db
from flask_appbuilder.fields import QuerySelectField
from flask_appbuilder.fieldwidgets import Select2Widget
from flask_appbuilder.models.sqla.interface import SQLAInterface
-from . import appbuilder, db
from .models import Benefit, Department, Employee, EmployeeHistory, Function
@@ -49,21 +49,3 @@ class BenefitView(ModelView):
edit_columns = ["name"]
show_columns = ["name"]
list_columns = ["name"]
-
-
-db.create_all()
-
-appbuilder.add_view_no_menu(EmployeeHistoryView, "EmployeeHistoryView")
-appbuilder.add_view(
- EmployeeView, "Employees", icon="fa-folder-open-o", category="Company"
-)
-appbuilder.add_separator("Company")
-appbuilder.add_view(
- DepartmentView, "Departments", icon="fa-folder-open-o", category="Company"
-)
-appbuilder.add_view(
- FunctionView, "Functions", icon="fa-folder-open-o", category="Company"
-)
-appbuilder.add_view(
- BenefitView, "Benefits", icon="fa-folder-open-o", category="Company"
-)
diff --git a/examples/enums/app/__init__.py b/examples/enums/app/__init__.py
index 1a5aed6b8c..2ae46989f7 100644
--- a/examples/enums/app/__init__.py
+++ b/examples/enums/app/__init__.py
@@ -1,15 +1,47 @@
import logging
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
+from .views import (
+ ContactModelView,
+ GroupModelView,
+ ContactChartView,
+ ContactTimeChartView,
+)
+from .extensions import appbuilder, db
logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
logging.getLogger().setLevel(logging.DEBUG)
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session)
-from . import models, views # noqa
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+ appbuilder.add_view(
+ GroupModelView,
+ "List Groups",
+ icon="fa-folder-open-o",
+ category="Contacts",
+ category_icon="fa-envelope",
+ )
+ appbuilder.add_view(
+ ContactModelView, "List Contacts", icon="fa-envelope", category="Contacts"
+ )
+ appbuilder.add_separator("Contacts")
+ appbuilder.add_view(
+ ContactChartView, "Contacts Chart", icon="fa-dashboard", category="Contacts"
+ )
+ appbuilder.add_view(
+ ContactTimeChartView,
+ "Contacts Birth Chart",
+ icon="fa-dashboard",
+ category="Contacts",
+ )
+ return app
+
+
+# For backward compatibility
+app = create_app()
diff --git a/examples/enums/app/extensions.py b/examples/enums/app/extensions.py
new file mode 100644
index 0000000000..419cabef39
--- /dev/null
+++ b/examples/enums/app/extensions.py
@@ -0,0 +1,5 @@
+from flask_appbuilder import AppBuilder
+from flask_appbuilder.utils.legacy import get_sqla_class
+
+db = get_sqla_class()()
+appbuilder = AppBuilder()
diff --git a/examples/enums/app/models.py b/examples/enums/app/models.py
index b723e8c0c1..be42da9ea7 100644
--- a/examples/enums/app/models.py
+++ b/examples/enums/app/models.py
@@ -8,6 +8,7 @@
class ContactGroup(Model):
+ __tablename__ = "contact_group"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -16,6 +17,7 @@ def __repr__(self):
class Contact(Model):
+ __tablename__ = "contact"
id = Column(Integer, primary_key=True)
name = Column(String(150), unique=True, nullable=False)
address = Column(String(564))
diff --git a/examples/enums/app/views.py b/examples/enums/app/views.py
index ed04f03fff..6fb4abfab0 100644
--- a/examples/enums/app/views.py
+++ b/examples/enums/app/views.py
@@ -5,8 +5,6 @@
from flask_appbuilder.models.group import aggregate_count
from flask_appbuilder.models.sqla.interface import SQLAInterface
-
-from . import appbuilder, db
from .models import Contact, ContactGroup
@@ -108,26 +106,3 @@ class ContactTimeChartView(GroupByChartView):
"series": [(aggregate_count, "group")],
},
]
-
-
-db.create_all()
-appbuilder.add_view(
- GroupModelView,
- "List Groups",
- icon="fa-folder-open-o",
- category="Contacts",
- category_icon="fa-envelope",
-)
-appbuilder.add_view(
- ContactModelView, "List Contacts", icon="fa-envelope", category="Contacts"
-)
-appbuilder.add_separator("Contacts")
-appbuilder.add_view(
- ContactChartView, "Contacts Chart", icon="fa-dashboard", category="Contacts"
-)
-appbuilder.add_view(
- ContactTimeChartView,
- "Contacts Birth Chart",
- icon="fa-dashboard",
- category="Contacts",
-)
diff --git a/examples/enums/testdata.py b/examples/enums/testdata.py
index ba12b11542..442a593c18 100644
--- a/examples/enums/testdata.py
+++ b/examples/enums/testdata.py
@@ -2,11 +2,14 @@
import logging
import random
-from app import db
+from flask_appbuilder.extensions import db
+from app import create_app
from app.models import Contact, ContactGroup
log = logging.getLogger(__name__)
+app = create_app()
+
def get_random_name(names_list, size=1):
name_lst = [
@@ -16,52 +19,57 @@ def get_random_name(names_list, size=1):
return " ".join(name_lst)
-try:
- db.session.query(Contact).delete()
- db.session.query(ContactGroup).delete()
- db.session.commit()
-except Exception:
- db.session.rollback()
-
-try:
- groups = list()
- groups.append(ContactGroup(name="Friends"))
- groups.append(ContactGroup(name="Family"))
- groups.append(ContactGroup(name="Work"))
- db.session.add(groups[0])
- db.session.add(groups[1])
- db.session.add(groups[2])
- print(groups[0].id)
- db.session.commit()
-except Exception as e:
- log.error("Creating Groups: %s", e)
- db.session.rollback()
-
-
-f = open("NAMES.DIC", "rb")
-names_list = [x.strip() for x in f.readlines()]
-
-f.close()
-gender = ["Male", "Female"]
+def upsert_test_data():
+ try:
+ db.session.query(Contact).delete()
+ db.session.query(ContactGroup).delete()
+ db.session.commit()
+ except Exception:
+ db.session.rollback()
-for i in range(1, 1000):
- c = Contact()
- c.name = get_random_name(names_list, random.randrange(2, 6))
- c.address = "Street " + names_list[random.randrange(0, len(names_list))].decode(
- "utf-8"
- )
- c.gender = gender[random.randrange(0, len(gender))]
- c.personal_phone = random.randrange(1111111, 9999999)
- c.personal_celphone = random.randrange(1111111, 9999999)
- c.contact_group = groups[random.randrange(0, 3)]
- year = random.choice(range(1900, 2012))
- month = random.choice(range(1, 12))
- day = random.choice(range(1, 28))
- c.birthday = datetime(year, month, day)
- db.session.add(c)
try:
+ groups = list()
+ groups.append(ContactGroup(name="Friends"))
+ groups.append(ContactGroup(name="Family"))
+ groups.append(ContactGroup(name="Work"))
+ db.session.add(groups[0])
+ db.session.add(groups[1])
+ db.session.add(groups[2])
+ print(groups[0].id)
db.session.commit()
- print("inserted", c)
except Exception as e:
- log.error("Creating Contact: %s", e)
+ log.error("Creating Groups: %s", e)
db.session.rollback()
+
+ f = open("NAMES.DIC", "rb")
+ names_list = [x.strip() for x in f.readlines()]
+
+ f.close()
+ gender = ["Male", "Female"]
+
+ for i in range(1, 1000):
+ c = Contact()
+ c.name = get_random_name(names_list, random.randrange(2, 6))
+ c.address = "Street " + names_list[random.randrange(0, len(names_list))].decode(
+ "utf-8"
+ )
+ c.gender = gender[random.randrange(0, len(gender))]
+ c.personal_phone = random.randrange(1111111, 9999999)
+ c.personal_celphone = random.randrange(1111111, 9999999)
+ c.contact_group = groups[random.randrange(0, 3)]
+ year = random.choice(range(1900, 2012))
+ month = random.choice(range(1, 12))
+ day = random.choice(range(1, 28))
+ c.birthday = datetime(year, month, day)
+ db.session.add(c)
+ try:
+ db.session.commit()
+ print("inserted", c)
+ except Exception as e:
+ log.error("Creating Contact: %s", e)
+ db.session.rollback()
+
+
+if __name__ == "__main__":
+ with app.app_context():
+ upsert_test_data()
diff --git a/examples/extendsecurity/app/__init__.py b/examples/extendsecurity/app/__init__.py
index bd7170b7d8..12248f5a43 100644
--- a/examples/extendsecurity/app/__init__.py
+++ b/examples/extendsecurity/app/__init__.py
@@ -1,22 +1,31 @@
import logging
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
+
+from .extensions import appbuilder
+from .views import ContactModelView, GroupModelView, CompanyModelView
+
logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
logging.getLogger().setLevel(logging.DEBUG)
-db = SQLA()
-appbuilder = AppBuilder()
-
-def create_app(config):
+def create_app():
app = Flask(__name__)
with app.app_context():
- app.config.from_object(config)
- db.init_app(app)
- appbuilder.init_app(app, db.session)
- from . import views # noqa
+ app.config.from_object("config")
+ appbuilder.init_app(app)
+ appbuilder.add_view(
+ ContactModelView, "List Contacts", icon="fa-envelope", category="Contacts"
+ )
+ appbuilder.add_separator("Contacts")
+ appbuilder.add_view(
+ GroupModelView,
+ "List Groups",
+ icon="fa-folder-open-o",
+ category="Contacts",
+ category_icon="fa-envelope",
+ )
+ appbuilder.add_view(CompanyModelView, "Companys", icon="fa-folder-open-o")
- appbuilder.post_init()
return app
diff --git a/examples/extendsecurity/app/extensions.py b/examples/extendsecurity/app/extensions.py
new file mode 100644
index 0000000000..cda8f08716
--- /dev/null
+++ b/examples/extendsecurity/app/extensions.py
@@ -0,0 +1,4 @@
+from flask_appbuilder import AppBuilder
+
+
+appbuilder = AppBuilder()
diff --git a/examples/extendsecurity/app/models.py b/examples/extendsecurity/app/models.py
index 71f98608f4..79be7efe27 100644
--- a/examples/extendsecurity/app/models.py
+++ b/examples/extendsecurity/app/models.py
@@ -24,6 +24,11 @@ class MyUser(User):
company_id = Column(Integer, ForeignKey("company.id"), nullable=True)
company = relationship("Company")
+ __mapper_args__ = {
+ "polymorphic_identity": "ab_user",
+ 'with_polymorphic': '*'
+ }
+
class ContactGroup(Model):
id = Column(Integer, primary_key=True)
diff --git a/examples/extendsecurity/app/sec_views.py b/examples/extendsecurity/app/sec_views.py
index 01fdae83e1..bca4dbcbfc 100644
--- a/examples/extendsecurity/app/sec_views.py
+++ b/examples/extendsecurity/app/sec_views.py
@@ -4,9 +4,9 @@
class MyUserDBModelView(UserDBModelView):
"""
- View that add DB specifics to User view.
- Override to implement your own custom view.
- Then override userdbmodelview property on SecurityManager
+ View that add DB specifics to User view.
+ Override to implement your own custom view.
+ Then override userdbmodelview property on SecurityManager
"""
show_fieldsets = [
diff --git a/examples/extendsecurity/app/views.py b/examples/extendsecurity/app/views.py
index de48b9b8aa..0bf9de8956 100644
--- a/examples/extendsecurity/app/views.py
+++ b/examples/extendsecurity/app/views.py
@@ -42,28 +42,10 @@ class ContactModelView(ModelView):
base_filters = [["created_by.company", FilterEqualFunction, get_user_company]]
-appbuilder.add_view(
- ContactModelView, "List Contacts", icon="fa-envelope", category="Contacts"
-)
-appbuilder.add_separator("Contacts")
-
-
class GroupModelView(ModelView):
datamodel = SQLAInterface(ContactGroup)
related_views = [ContactModelView]
-appbuilder.add_view(
- GroupModelView,
- "List Groups",
- icon="fa-folder-open-o",
- category="Contacts",
- category_icon="fa-envelope",
-)
-
-
class CompanyModelView(ModelView):
datamodel = SQLAInterface(Company)
-
-
-appbuilder.add_view(CompanyModelView, "Companys", icon="fa-folder-open-o")
diff --git a/examples/extendsecurity/config.py b/examples/extendsecurity/config.py
index d2ad3edbce..f5bf932280 100644
--- a/examples/extendsecurity/config.py
+++ b/examples/extendsecurity/config.py
@@ -5,21 +5,13 @@
CSRF_ENABLED = True
SECRET_KEY = "\2\1thisismyscretkey\1\2\e\y\y\h"
-OPENID_PROVIDERS = [
- {"name": "Google", "url": "https://www.google.com/accounts/o8/id"},
- {"name": "Yahoo", "url": "https://me.yahoo.com"},
- {"name": "AOL", "url": "http://openid.aol.com/"},
- {"name": "Flickr", "url": "http://www.flickr.com/"},
- {"name": "MyOpenID", "url": "https://www.myopenid.com"},
-]
-
SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(basedir, "app.db")
# SQLALCHEMY_DATABASE_URI = 'mysql://root:password@localhost/quickhowto'
# SQLALCHEMY_DATABASE_URI = 'postgresql://scott:tiger@localhost:5432/myapp'
# SQLALCHEMY_ECHO = True
FAB_SECURITY_MANAGER_CLASS = "app.sec.MySecurityManager"
-FAB_UPDATE_PERMS = False
+FAB_UPDATE_PERMS = True
BABEL_DEFAULT_LOCALE = "en"
BABEL_DEFAULT_FOLDER = "translations"
diff --git a/examples/extendsecurity/testdata.py b/examples/extendsecurity/testdata.py
index 6d2c7518a4..d99a1089b8 100644
--- a/examples/extendsecurity/testdata.py
+++ b/examples/extendsecurity/testdata.py
@@ -2,13 +2,17 @@
import logging
import random
-from app import appbuilder, db, create_app
+from flask_appbuilder.extensions import db
+
+from app import create_app
+from app.extensions import appbuilder
from app.models import ContactGroup, Gender, Contact, Company
log = logging.getLogger(__name__)
+
def get_random_name(names_list, size=1):
name_lst = [
names_list[random.randrange(0, len(names_list))].decode("utf-8").capitalize()
@@ -17,97 +21,100 @@ def get_random_name(names_list, size=1):
return " ".join(name_lst)
-app = create_app("config")
-app.app_context().push()
+app = create_app()
-company1 = Company(name="Company 1")
-company2 = Company(name="Company 2")
-try:
- db.session.add(company1)
- db.session.add(company2)
- db.session.commit()
-except Exception as e:
- log.error("Group creation error: %s", e)
- db.session.rollback()
- exit(1)
-
-
-role_admin = appbuilder.sm.find_role(appbuilder.sm.auth_role_admin)
-
-user1 = appbuilder.sm.add_user(
- "user1_company1", "user1", "test", "user1@company1.com", role_admin, "password"
-)
-user2 = appbuilder.sm.add_user(
- "user1_company2", "user1", "test", "user1@company2.com", role_admin, "password"
-)
-user3 = appbuilder.sm.add_user(
- "user2_company2", "user2", "test", "user2@company2.com", role_admin, "password"
-)
-user1.company = company1
-user2.company = company2
-user3.company = company2
-db.session.merge(user1)
-db.session.merge(user2)
-db.session.merge(user3)
-db.session.commit()
-
-try:
- db.session.add(ContactGroup(name="Friends"))
- db.session.add(ContactGroup(name="Family"))
- db.session.add(ContactGroup(name="Work"))
- db.session.commit()
-except Exception as e:
- log.error("Group creation error: %s", e)
- db.session.rollback()
- exit(1)
-
-try:
- db.session.add(Gender(name="Male"))
- db.session.add(Gender(name="Female"))
- db.session.commit()
-except Exception as e:
- log.error("Gender creation error: %s", e)
- db.session.rollback()
- exit(1)
-
-f = open("NAMES.DIC", "rb")
-names_list = [x.strip() for x in f.readlines()]
-
-f.close()
-
-j = 1
-for i in range(1, 100):
- c = Contact()
- c.name = get_random_name(names_list, random.randrange(2, 6))
- c.address = "Street " + names_list[random.randrange(0, len(names_list))].decode(
- "utf-8"
+def upsert_test_data():
+ company1 = Company(name="Company 1")
+ company2 = Company(name="Company 2")
+ try:
+ db.session.add(company1)
+ db.session.add(company2)
+ db.session.commit()
+ except Exception as e:
+ log.error("Group creation error: %s", e)
+ db.session.rollback()
+ exit(1)
+
+
+ role_admin = appbuilder.sm.find_role(appbuilder.sm.auth_role_admin)
+
+ user1 = appbuilder.sm.add_user(
+ "user1_company1", "user1", "test", "user1@company1.com", role_admin, "password"
+ )
+ user2 = appbuilder.sm.add_user(
+ "user1_company2", "user1", "test", "user1@company2.com", role_admin, "password"
+ )
+ user3 = appbuilder.sm.add_user(
+ "user2_company2", "user2", "test", "user2@company2.com", role_admin, "password"
)
- c.personal_phone = random.randrange(1111111, 9999999)
- c.personal_celphone = random.randrange(1111111, 9999999)
- c.contact_group_id = random.randrange(1, 4)
- c.gender_id = random.randrange(1, 3)
- year = random.choice(range(1900, 2012))
- month = random.choice(range(1, 12))
- day = random.choice(range(1, 28))
- c.birthday = datetime(year, month, day)
- c.changed_on = datetime.now()
- c.created_on = datetime.now()
- if j == 1:
- j += 1
- _user = user1
- elif j == 2:
- j += 1
- _user = user2
- else:
- j = 1
- _user = user3
- c.created_by = _user
- c.changed_by = _user
-
- db.session.add(c)
+ user1.company = company1
+ user2.company = company2
+ user3.company = company2
+ db.session.merge(user1)
+ db.session.merge(user2)
+ db.session.merge(user3)
+ db.session.commit()
+
+ try:
+ db.session.add(ContactGroup(name="Friends"))
+ db.session.add(ContactGroup(name="Family"))
+ db.session.add(ContactGroup(name="Work"))
+ db.session.commit()
+ except Exception as e:
+ log.error("Group creation error: %s", e)
+ db.session.rollback()
+ exit(1)
+
try:
+ db.session.add(Gender(name="Male"))
+ db.session.add(Gender(name="Female"))
db.session.commit()
- print("inserted", c)
except Exception as e:
- log.error("Contact creation error: %s", e)
+ log.error("Gender creation error: %s", e)
db.session.rollback()
+ exit(1)
+
+ f = open("NAMES.DIC", "rb")
+ names_list = [x.strip() for x in f.readlines()]
+
+ f.close()
+
+ j = 1
+ for i in range(1, 100):
+ c = Contact()
+ c.name = get_random_name(names_list, random.randrange(2, 6))
+ c.address = "Street " + names_list[random.randrange(0, len(names_list))].decode(
+ "utf-8"
+ )
+ c.personal_phone = random.randrange(1111111, 9999999)
+ c.personal_celphone = random.randrange(1111111, 9999999)
+ c.contact_group_id = random.randrange(1, 4)
+ c.gender_id = random.randrange(1, 3)
+ year = random.choice(range(1900, 2012))
+ month = random.choice(range(1, 12))
+ day = random.choice(range(1, 28))
+ c.birthday = datetime(year, month, day)
+ c.changed_on = datetime.now()
+ c.created_on = datetime.now()
+ if j == 1:
+ j += 1
+ _user = user1
+ elif j == 2:
+ j += 1
+ _user = user2
+ else:
+ j = 1
+ _user = user3
+ c.created_by = _user
+ c.changed_by = _user
+
+ db.session.add(c)
+ try:
+ db.session.commit()
+ print("inserted", c)
+ except Exception as e:
+ log.error("Contact creation error: %s", e)
+ db.session.rollback()
+
+with app.app_context():
+ upsert_test_data()
diff --git a/examples/extendsecurity2/app/__init__.py b/examples/extendsecurity2/app/__init__.py
index c018e31150..66ab67071b 100644
--- a/examples/extendsecurity2/app/__init__.py
+++ b/examples/extendsecurity2/app/__init__.py
@@ -1,16 +1,20 @@
import logging
-
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
-
-from .sec import MySecurityManager
+from .extensions import appbuilder, db
logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
logging.getLogger().setLevel(logging.DEBUG)
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session, security_manager_class=MySecurityManager)
-from . import models, views # noqa
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+ from . import models, views # noqa
+ return app
+
+
+# For backward compatibility
+app = create_app()
diff --git a/examples/factoryapp/NAMES.DIC b/examples/factoryapp/NAMES.DIC
deleted file mode 100644
index b7266ad644..0000000000
--- a/examples/factoryapp/NAMES.DIC
+++ /dev/null
@@ -1,27607 +0,0 @@
-aaccf
-aalders
-aaren
-aarika
-aaron
-aartjan
-aasen
-ab
-abacus
-abadines
-abagael
-abagail
-abahri
-abasolo
-abazari
-abba
-abbai
-abbas
-abbatant
-abbate
-abbe
-abbey
-abbi
-abbie
-abbot
-abbott
-abby
-abbye
-abdalla
-abdallah
-abdel
-abdel-az
-abdel-ma
-abdel-ra
-abdel-sa
-abdelazi
-abdelmad
-abdelrah
-abdelran
-abdelsal
-abderrao
-abderraz
-abdi
-abdo
-abdollah
-abdolrah
-abdou
-abdrani
-abdul
-abdul-az
-abdul-ma
-abdul-no
-abdul-ra
-abdul-sa
-abdulazi
-abdulla
-abdullah
-abdulmad
-abdulrah
-abdulran
-abdulsal
-abdur
-abe
-abedi
-abel
-abelard
-abell
-abella
-abellera
-abello
-abelow
-abernath
-aberneth
-abeu
-abey
-abhay
-abhijit
-abi-aad
-abid
-abie
-abigael
-abigail
-abigale
-abike
-abner
-abou-arr
-abou-ezz
-aboul-ma
-aboussou
-abovyan
-abra
-abraham
-abrahan
-abrahim
-abram
-abramo
-abrams
-abran
-abrar
-absi
-abu
-abul
-access
-accounti
-acelvari
-achal
-achamma
-acharyya
-achcar
-achille
-achkar
-achmad
-ackaouy
-acker
-acklin
-ackwood
-acree
-acres
-acs
-action
-actionte
-acton
-aczel
-ad
-ada
-adah
-adahm
-adair
-adal
-adaline
-adam
-adamczyk
-adamkows
-adamo
-adamowic
-adams
-adamski
-adamson
-adamyk
-adan
-adara
-adcock
-adcox
-adda
-addetia
-addi
-addia
-addie
-addison
-addona
-addons
-addy
-ade
-adebayo
-adel
-adela
-adelaida
-adelaide
-adelbert
-adele
-adelheid
-adelia
-adelice
-adelina
-adelind
-adeline
-adella
-adelle
-adena
-adeney
-adeniyi
-aderhold
-adey
-adham
-adhem
-adi
-adiana
-adib
-adie
-adil
-adimari
-adina
-aditya
-adjangba
-adkinson
-adlai
-adler
-adlin
-admad
-admin
-admin-mt
-administ
-adnan
-adnane
-ado
-adolf
-adolfie
-adolph
-adolphe
-adolpho
-adolphus
-adora
-adore
-adoree
-adornato
-adorne
-adorno
-adrea
-adri
-adria
-adriaan
-adriaans
-adriaens
-adrian
-adriana
-adriane
-adrianna
-adrianne
-adriano
-adrie
-adrien
-adriena
-adriene
-adrienne
-adrion
-advance
-ae
-aeinstei
-aeriel
-aeriela
-aeriell
-aery
-afaq
-afif
-afke
-afkham
-afkham-e
-afo
-afton
-afzal
-ag
-agace
-agam
-agarwal
-agata
-agatha
-agathe
-agen
-agenia
-aggarwal
-aggi
-aggie
-aggregat
-aggy
-aghi
-aghili
-agily
-agna
-agnar
-agnella
-agnes
-agnese
-agnesse
-agneta
-agnew
-agnihotr
-agnola
-agostino
-agosto
-agretha
-aguiar
-aguie
-aguilar
-aguinsky
-aguirre
-aguistin
-aguste
-agustin
-ahad
-aharon
-ahbeng
-ahdieh
-ahlberg
-ahlers
-ahluwali
-ahmad
-ahmadi
-ahmed
-ahmet
-ahn
-ai-mei
-ai-tsung
-aida
-aidan
-aidarous
-aideen
-aiden
-aigneis
-aihua
-aija
-aiken
-aila
-ailbert
-aile
-ailee
-aileen
-ailene
-ailey
-aili
-ailina
-ailis
-ailsun
-ailyn
-aiman
-aime
-aimee
-aimei
-aimil
-aimone
-aindrea
-ainslee
-ainsley
-ainslie
-ainswort
-air
-aisha
-aitken
-aitsung
-ajay
-ajersch
-ajeya
-ajit
-ajmal
-ajoy
-akai
-akbar
-akbas
-akemi
-akens
-akers
-akhavan
-akhil
-akhtar
-akihiko
-akim
-akin
-akinniyi
-akio
-akira
-akita
-akkerman
-akram
-akrawi
-aksel
-akshay
-akyurekl
-al
-al bud
-al-basi
-al-tarab
-aladanga
-aladin
-alain
-alaine
-alair
-alameda
-alan
-alana
-alanah
-aland
-alane
-alanis
-alanna
-alano
-alanoly
-alanson
-alanturi
-alard
-alaric
-alary
-alasdair
-alastair
-alasteir
-alaster
-alavi
-alayne
-alb
-alba
-albea
-albeon
-alber
-alberik
-albers
-alberse
-albert
-alberta
-albertei
-albertin
-alberto
-alberts
-alberty
-albery
-albie
-albina
-albiston
-albrecht
-albright
-albritto
-albtenta
-alburger
-alcantar
-alcindor
-alcock
-alcott
-alden
-alderdic
-aldhizer
-aldin
-aldis
-aldo
-aldon
-aldous
-aldric
-aldrich
-aldridge
-aldus
-aldwin
-aldyn
-alec
-alecia
-aleda
-aleece
-aleen
-alegre
-aleinste
-alejandr
-alejoa
-aleke
-aleksand
-aleksic
-alena
-alene
-aleong
-alese
-alessand
-aleta
-alethea
-alev
-alex
-alexa
-alexan
-alexande
-alexandr
-alexei
-alexi
-alexia
-alexina
-alexine
-alexio
-alexis
-alexon
-alexson
-alf
-alfaro
-alfi
-alfie
-alfons
-alfonse
-alfonso
-alfonzo
-alford
-alfred
-alfreda
-alfredo
-alfy
-algernon
-algie
-algimant
-algood
-alguire
-ali
-alia
-alic
-alica
-alice
-alicea
-alicia
-alick
-alida
-alidia
-alidina
-alie
-alika
-alikee
-alikhan
-alina
-aline
-alink
-alioto
-alireza
-alis
-alisa
-alisande
-alisha
-alison
-alissa
-alistair
-alister
-alisun
-alix
-aliza
-alka
-alkarim
-alkire
-all the
-alla
-allahdin
-allahyar
-allam
-allaman
-allan
-allard
-allaway
-allaye-c
-allayne
-alleen
-allegra
-allen
-allene
-alles
-alleva
-alley
-alleyn
-alleyne
-allgood
-alli
-allianor
-allida
-allie
-allin
-allina
-allis
-allisan
-allison
-allissa
-allister
-allistir
-allix
-allman
-allsun
-allwork
-allx
-ally
-allyce
-allyn
-allys
-allyson
-alma
-almeda
-almeddah
-almena
-almendar
-almeria
-almerind
-almeta
-almira
-almire
-almon
-alms
-alnoor
-aloi
-aloin
-aloise
-aloisia
-alok
-alomari
-alon
-alonso
-alonzo
-alora
-aloysia
-aloysius
-alp
-alparsla
-alperovi
-alphard
-alphen
-alphonse
-alphonso
-alpine
-alred
-alric
-alsaleh
-alshabou
-alsop
-alspaugh
-alstine
-alston
-alswiti
-alta
-altadonn
-altay
-alteen
-altekar
-alten
-alternat
-althea
-altherr
-alting-m
-altman
-altmann
-alturing
-aluin
-aluino
-alva
-alvan
-alvarez
-alvaro
-alvean
-alvera
-alverta
-alvi
-alvie
-alvin
-alvina
-alvinia
-alvino
-alvira
-alvis
-alvy
-alwin
-alwyn
-aly
-alyce
-alyda
-alynn
-alyosha
-alyre
-alys
-alysa
-alyse
-alysia
-alyson
-alyss
-alyssa
-alzofon
-amabel
-amabelle
-amadeus
-amalea
-amalee
-amaleta
-amalia
-amalie
-amalita
-amalle
-amalu
-amand
-amanda
-amandi
-amandie
-amandip
-amando
-amandy
-amant
-amar
-amara
-amarendr
-amargo
-amarjit
-amarsi
-amarth
-amata
-amato
-amavisca
-ambach
-amber
-amberly
-amble
-ambler
-ambroise
-ambros
-ambrose
-ambrosi
-ambrosio
-ambrosiu
-ambur
-amby
-amda
-ame
-amedeo
-ameen
-amelia
-amelie
-amelina
-ameline
-amelita
-amelkar
-amenta
-america
-amerigo
-amery
-amgad
-ami
-amick
-amie
-amigo
-amii
-amil
-amin
-amina
-amini
-aminuddi
-aminzade
-amiot
-amir
-amit
-amitabh
-amitava
-amitie
-amity
-amiy
-amjad
-amlani
-ammamari
-ammar
-ammiel
-amnish
-amnon
-amol
-amorim
-amory
-amos
-amott
-amour
-amouzgar
-amparo
-amr
-amrik
-amril
-amrish
-amstutz
-amu
-amundsen
-amy
-amye
-an
-an-bin
-an-son
-ana
-anabal
-anabel
-anabella
-anabelle
-anader
-analiese
-analise
-anallese
-anallise
-anamary
-anand
-ananda
-anandaro
-ananmala
-anant
-ananth
-anantha
-ananyo
-anar
-anastasi
-anastass
-anatol
-anatola
-anatole
-anatoli
-anatollo
-anatoly
-anaya
-anbin
-ancel
-ancell
-anchia
-anconeta
-anctil
-anda
-andaree
-andee
-andeee
-ander
-anderea
-anderer
-anders
-andersen
-anderson
-anderton
-andi
-andie
-andiyono
-andonis
-andra
-andrade
-andras
-andrassy
-andre
-andrea
-andreana
-andreas
-andrease
-andreato
-andree
-andrei
-andrej
-andrejs
-andres
-andress
-andrew
-andrews
-andrey
-andria
-andriana
-andric
-andries
-andriett
-andris
-andromac
-andros
-andrukat
-andrus
-andrusia
-andruzzi
-andrzej
-andy
-aneeta
-aneko
-anestass
-anet
-anett
-anetta
-anette
-ange
-angel
-angela
-angelako
-angele
-angeles
-angeli
-angelia
-angelica
-angelico
-angelie
-angeliek
-angelika
-angelina
-angeline
-angeliqu
-angelita
-angell
-angelle
-angelo
-angerer
-angermey
-angie
-angil
-anglin
-angobald
-angus
-angustia
-angvall
-angy
-anh
-anhorn
-anhtuan
-ania
-anibal
-anica
-anika
-aniko
-anil
-anila
-anindita
-anirban
-anissa
-anita
-anitra
-aniya
-anja
-anjali
-anjanett
-anje
-anjela
-anjli
-anke
-anker
-anki
-ankie
-ankur
-anky
-ann
-ann-hoon
-ann-lorr
-ann-mari
-anna
-anna-dia
-anna-mar
-annab
-annabal
-annabel
-annabela
-annabell
-annable
-annadian
-annalea
-annalee
-annalies
-annalisa
-annalise
-annamari
-annamay
-annarbor
-annard
-annas
-anne
-anne mar
-anne-cor
-anne-lis
-anne-mar
-annecori
-anneke
-annelies
-annelise
-annemari
-annemie
-annet
-annetta
-annette
-anni
-annibale
-annice
-annick
-annie
-annika
-annis
-annise
-annissa
-annmaria
-annmarie
-annnora
-annora
-annunzia
-anny
-anolik
-anoop
-anouk
-anoushir
-ans
-ansar
-ansel
-ansell
-anselm
-anselma
-anshel
-ansley
-anson
-ansorger
-anstead
-anstett
-anstice
-ansys
-antai
-antanas
-antanina
-anthe
-anthea
-anthia
-anthiath
-anthonis
-anthony
-antin
-antinucc
-antkowia
-antle
-antoft
-antoine
-antoinet
-anton
-anton-ph
-antonare
-antone
-antonell
-antonett
-antoni
-antonia
-antonie
-antoniet
-antonin
-antonina
-antonino
-antonio
-antonios
-antonius
-antons
-antony
-antti
-antuan
-antworth
-anu
-anup
-anupam
-anurag
-anver
-anvradha
-anwar
-any
-anya
-anzarout
-anzures
-aoki
-aparicio
-aparna
-aphrodit
-api-ecm
-apiruksa
-apollo
-apostolo
-appell
-appenzel
-applebau
-applegar
-appleton
-appleyar
-applicat
-applicon
-appoloni
-appuglie
-apriel
-april
-aprilett
-aprill
-apryle
-apter
-apurba
-apurve
-ara
-arabadji
-arabel
-arabela
-arabele
-arabella
-arabelle
-aragon
-aragorn
-arai
-araldo
-aramideh
-arana
-arash
-aravamud
-arbel
-arbenz
-arbo
-arbuckle
-arch
-archaimb
-archamba
-archana
-archer
-archibal
-archibol
-archie
-archy
-arco
-arcouet
-ard
-arda
-ardath
-ardavan
-ardeen
-ardelia
-ardelis
-ardella
-ardelle
-arden
-ardene
-ardenia
-ardie
-ardiel
-ardine
-ardis
-ardisj
-ardith
-ardizone
-ardoin
-ardra
-ardyce
-ardys
-ardyth
-aref
-areg
-arel
-arellano
-arend
-arens
-ares
-aretha
-areu
-argento
-argyriou
-ari
-ariadne
-ariana
-arias
-aribindi
-aric
-aridatha
-arie
-ariel
-ariela
-ariella
-arielle
-arif
-arin
-arina
-arine
-ario
-aris
-aristide
-aristotl
-arjun
-arkady
-arkestei
-arko
-arlan
-arlana
-arlee
-arleen
-arlen
-arlena
-arlene
-arles
-arleta
-arlette
-arley
-arleyne
-arlie
-arliene
-arlin
-arlina
-arlinda
-arline
-arluene
-arly
-arlyn
-arlyne
-arman
-armand
-armande
-armando
-armbrust
-armelia
-armelle
-armenaki
-armenta
-armentro
-armes
-armida
-armijo
-armin
-armine
-armitage
-armolavi
-armour
-armstead
-armstron
-arn
-arnaldo
-arnauld
-arnav
-arne
-arnett
-arney
-arni
-arnie
-arnis
-arno
-arnold
-arnoldo
-arnon
-arnone
-arnott
-arnuad
-arny
-aroldo
-aron
-arona
-aronovic
-aronson
-aronstam
-arora
-arpin
-arpita
-arrgh
-arri
-arro
-arron
-arsavir
-arsena
-arsenaul
-arsene
-arseneau
-arshad
-art
-artair
-arte
-artemas
-artemis
-artemus
-arther
-arthur
-artie
-artiller
-arto
-artola
-arts
-artspssa
-artur
-arturo
-artus
-artuso
-arty
-artzer
-arul
-arumugam
-arun
-aruna
-arunacha
-arv
-arvid
-arvie
-arvin
-arvind
-arvy
-arwakhi
-arya
-aryavong
-aryn
-arzu
-asa
-asad
-asan
-asawa
-asbill
-asbjorn
-asce
-ascott
-asdel
-ase
-asfazado
-asghar
-asgharza
-ash
-ashalata
-ashar
-ashbee
-ashberry
-ashbey
-ashby
-ashdown
-ashely
-asher
-ashfaq
-ashford
-ashia
-ashien
-ashil
-ashima
-ashis
-ashla
-ashlan
-ashlee
-ashleigh
-ashlen
-ashley
-ashli
-ashlie
-ashlin
-ashly
-ashmore
-ashok
-ashoka
-ashrae
-ashraf
-ashruf
-ashton
-ashu
-ashurkof
-ashutosh
-ashwin
-ashwood-
-ashworth
-asia
-asif
-asing
-asistore
-askins
-askold
-asmar
-asme
-asnat
-asops
-asprer
-asquin
-assaad
-assaf
-asselin
-assenza
-assistan
-associat
-astaire
-astalos
-astle
-astley
-aston
-astor
-astorino
-astra
-astrid
-astrix
-aswini
-atalanta
-atalla
-atcheson
-atchison
-atef
-athalie
-athanasi
-athanass
-athar
-athena
-athene
-athony
-athwal
-atindra
-atique
-atkins
-atkinson
-atl
-atl-sale
-atlanta
-atlante
-atlantic
-atmane
-atoui
-atp
-atpco
-atprs
-atputhar
-atrc
-atsuo
-atsushi
-atta
-attaie
-attanasi
-attarchi
-attard
-attaway
-atte
-attenbor
-atteridg
-attfield
-attilio
-attilla
-atul
-atwater
-atwell
-atwell-b
-au
-au-yang
-au-yeung
-aube
-auberon
-aubert
-auberta
-aubin
-aubine
-aubree
-aubrette
-aubrey
-aubrie
-aubry
-aubuchon
-aucoin
-aud
-audet
-audette
-audi
-audie
-audivox
-audra
-audre
-audrean
-audrey
-audrie
-audrienn
-audry
-audrye
-audy
-auerbach
-augeri
-augie
-august
-augusta
-auguste
-augustin
-augusto
-augustus
-augy
-auker
-aula
-aulakh
-auld
-ault
-aumoine
-aundrea
-aunon
-aura
-aurea
-aurel
-aurelea
-aurelia
-aurelie
-aurelius
-auria
-aurie
-aurilia
-auriol
-aurlie
-auro
-auroora
-aurora
-aurore
-aurthur
-ausley
-austen
-austin
-austina
-austine
-australi
-auth
-auto
-auton
-autoquot
-auyeung
-ava
-avard
-avaz
-ave
-avedis
-aveline
-avellane
-averardo
-averell
-averett
-averette
-averil
-averill
-aversa
-avery
-averyl
-avictor
-avie
-avigdor
-avilez
-avinash
-avirett
-avis
-aviva
-avivah
-avra
-avram
-avril
-avrit
-avrom
-avtar
-awadalla
-awadia
-awan
-awano
-ax
-axberg
-axe
-axel
-ayako
-ayandeh
-ayao
-ayaz
-aybars
-ayda
-aydin
-ayers
-ayles
-aylmar
-aylmer
-aylwin
-aymer
-ayn
-ayodele
-ayotte
-ayoubzad
-ayoup
-ayrault
-ayre
-ayres
-ayscue
-ayse
-ayukawa
-aywie
-ayyuce
-azad
-azam
-azar
-azari
-azarshah
-azer
-azevedo
-azhar
-azim
-aziz
-azizuddi
-azmak
-azmeena
-azmina
-azra
-azuma
-azzuolo
-ba
-baab
-baader
-bab
-baba
-bababunm
-babak
-babalola
-babar
-babara
-babasaki
-babatund
-babb
-babbage
-babbette
-babbie
-babcock
-baber
-babette
-babin
-babineau
-babione
-babita
-babs
-babu
-baby
-babyak
-baccari
-bacchioc
-bacchus
-bacciagl
-bach
-bachecon
-bachelu
-bachewic
-bachitta
-bachmann
-bachner
-bachynsk
-backshal
-bacon
-baddeley
-badelt
-badenoch
-badger
-badjari
-badmingt
-badowski
-badri
-badza
-bae
-baenzige
-baer
-baerg
-baets
-bagetako
-bagg
-baggerma
-baghdadi
-bagi
-bagnato
-bagshaw
-bagwell
-baha
-bahaa
-bahadir
-baheya
-bahgat
-bahia
-bahl
-bahman
-bahoric
-bahram
-bail
-bailetti
-bailey
-bailie
-baillarg
-baillie
-bailloux
-baily
-bain
-bainer
-baines
-bains
-bainton
-baird
-bajada
-bajpeyi
-bakay
-bakel
-baker
-baker-gr
-bakhach
-bakkum
-bakoury
-bal
-balaban
-balabani
-balachan
-balaji
-balakris
-balanger
-balascak
-balasing
-balbir
-balcom
-bald
-balderst
-baldev
-baldock
-baldridg
-balduin
-baldwin
-bale
-bales
-balfour
-balgalvi
-baljinde
-balkenho
-balkisso
-ballanti
-ballard
-ballarte
-ballinge
-ballios
-ballou
-ballyk
-balmer
-balog
-balogh
-balraj
-balsas
-balser
-balter
-baltodan
-balutis
-balvinde
-balwinde
-bam
-bambach
-bambang
-bambi
-bambie
-bamby
-bame
-bamfo
-ban
-banaei
-bancroft
-bandel
-banens
-banerd
-banerjee
-banez
-banfalvi
-bang
-bangert
-bangia
-banh
-banigan
-banik
-bank
-bankhead
-banks
-banky
-bannai
-bannan
-bannard
-banniste
-bansal
-banu
-banville
-bao
-baominh
-baquero
-bar
-barabash
-baragar
-barakat
-baran
-barb
-barba
-barbabas
-barbabra
-barbara
-barbara-
-barbaraa
-barbary
-barbe
-barbeau
-barbee
-barberen
-barbette
-barbey
-barbi
-barbie
-barbour
-barbra
-barby
-barclay
-barcza
-bard
-barde
-bardsley
-bareham
-barel
-barenie
-barentse
-barfield
-barham
-bari
-baribeau
-baril
-baris
-barker
-barkhous
-barkley
-barkwill
-barlas
-barlow
-barn
-barnabas
-barnabe
-barnaby
-barnard
-barnebas
-barnes
-barnett
-barney
-barnhard
-barnhart
-barnhill
-barnhous
-barnicke
-barnie
-barnwell
-barny
-barolet
-baron
-barr
-barraclo
-barrass
-barrell
-barret
-barrett
-barreyre
-barri
-barrie
-barrient
-barriere
-barringt
-barrio
-barris
-barritt
-barron
-barrows
-barry
-barsch
-barsha
-barsky
-barsony
-barstow
-barszcze
-bart
-bartel
-barth
-barthel
-barthole
-bartholo
-bartie
-bartkows
-bartlet
-bartlett
-bartley
-bartolem
-bartolom
-bartoluc
-barton
-bartosze
-bartra
-bartram
-bartush
-barty
-bartz
-baruk
-barwikow
-bary
-baryram
-basa
-basco
-bascombe
-base
-basheer
-bashton
-bashyam
-basia
-basil
-basile
-basilio
-basilius
-basinger
-baskaran
-baskervi
-baskin
-basladyn
-basmadji
-basnett
-bason
-basrur
-bassam
-bassem
-basser
-bassett
-bassigna
-bassil
-basta
-bastani
-bastarac
-bastian
-bastien
-basu
-bat
-batcheld
-batchelo
-batchoun
-bateman
-bates
-batholom
-bathrick
-bathsheb
-batsheva
-batson
-battersb
-battersh
-battisto
-batura
-baudais
-baudoin
-bauer
-baughan
-baugnon
-baulch
-baum
-baumann
-baumberg
-baumert
-bautista
-bawek
-bawn
-bax
-baxie
-baxter
-baxy
-bay
-bayard
-bayer
-bayerkoh
-bayless
-bayley
-bayly
-bayne
-baynes
-bayno
-bayola
-bayrakta
-bays
-bazarjan
-bazemore
-bazerghi
-bazerman
-bazik
-baziuk
-bcs
-bcspatch
-bea
-beach
-beadley
-beagley
-beal
-beale
-beall
-bealle
-beals
-beana
-bear
-beardmor
-bearnard
-bears
-beasley
-beata
-beate
-beato
-beaton
-beatrice
-beatrisa
-beatrix
-beatriz
-beattie
-beattie-
-beatty
-beaty
-beau
-beaubien
-beaucair
-beauchai
-beaucham
-beauchem
-beaudet
-beaudett
-beaudin
-beaudoin
-beaudry
-beaufort
-beaule
-beaulieu
-beaumier
-beaumont
-beaupre
-beaurega
-beausejo
-beauvais
-beavingt
-beavis
-beb
-bebber
-bebe
-bebee
-becan
-becca
-bechara
-bechtel
-beck
-becka
-becke
-becker
-beckett
-beckham
-becki
-beckie
-beckman
-beckstea
-beckwith
-becky
-beconovi
-becquart
-bedard
-bede
-bedford
-bedi
-bedient
-bedlingt
-bednar
-bedoya
-bedrosia
-bee
-beebe
-beeby
-beecker
-beehler
-beekman
-beeman
-beerkens
-beers
-bees
-beeston
-beethove
-beeton
-befanis
-beffert
-beggs
-begley
-begum
-behdad
-behlen
-behler
-behm
-behnam
-behrens
-behroozi
-behrouz
-behzad
-beil
-beilin
-beilul
-beine
-beique
-beisel
-beitinja
-beitris
-bejar
-bekkedam
-bekki
-bektas
-bel
-bela
-belair
-belaire
-beland
-belanger
-belboul
-belcher
-belcourt
-belen
-belford
-belia
-belich
-belicia
-belinda
-belir
-belisle
-belissa
-belita
-belk
-bell
-bella
-bellanca
-belle
-bellefeu
-bellehum
-bellevil
-bellew
-belley
-bellina
-bellingt
-bellis
-bello
-bellosa
-belmont
-belohoub
-belrango
-belson
-belton
-beltran
-belva
-belvia
-belyaev
-belzile
-bemiller
-bemis
-ben
-ben-isha
-benabdal
-benasso
-benavide
-benay
-benchimo
-bencia
-benda
-bender
-bendick
-bendicty
-bendite
-bendix
-beneda
-benedek
-benedett
-benedick
-benedict
-benedikt
-benefiel
-benefits
-beneteau
-benetta
-benfield
-benge
-bengt
-bengtson
-benham
-beniamin
-beninger
-benita
-benito
-benjamen
-benjamin
-benjavan
-benjes
-benji
-benjie
-benjy
-benn
-bennatt
-benne
-bennefel
-benner
-bennesa
-bennet
-bennett
-benni
-bennie
-benning
-bennison
-benny
-benoit
-benoite
-benschop
-benski
-benson
-bent
-benthem
-benthin
-bentlee
-bentley
-bento
-benton
-benwell
-benyamin
-benyon
-benzick
-benzie
-beom-sah
-beomsahn
-beorn
-beowulf
-bep
-beppie
-ber
-beranger
-berek
-berenbac
-berenice
-berenz
-beresfor
-beresnik
-beret
-bereza
-bergado
-berger
-bergeron
-bergeson
-berget
-bergland
-bergman
-bergmann
-bergquis
-bergsma
-bergstro
-bergwerf
-berhane
-beriault
-berk
-berke
-berkeley
-berkie
-berkley
-berkly
-berknet
-berky
-berman
-bermel
-bern
-berna
-bernaden
-bernadet
-bernadin
-bernard
-bernardi
-bernardo
-bernarr
-bernd
-berndt
-berne
-berneche
-bernelle
-berneta
-bernete
-bernetta
-bernette
-bernhard
-berni
-bernice
-bernie
-berniece
-bernier
-berning
-bernita
-berno
-bernstei
-berny
-berri
-berrie
-berrin
-berrisfo
-berro
-berry
-berryhil
-bert
-berta
-berte
-berteau
-bertha
-berthe
-berthele
-berti
-bertie
-bertigno
-bertina
-bertine
-bertini
-bertolin
-berton
-bertram
-bertrand
-berty
-berube
-beryl
-beryle
-beshai
-besharah
-beshir
-besime
-besnier
-bess
-besse
-bessel
-bessell
-bessette
-bessey
-bessie
-besson
-bessuill
-bessy
-bestavro
-beswick
-betcher
-beth
-bethanne
-bethany
-bethena
-bethina
-bethune
-beton
-betsey
-betsill
-betsy
-betta
-bettadap
-bette
-bette-an
-betteann
-betterle
-betters
-betti
-bettie
-bettina
-bettine
-bettink
-betts
-betty
-betty-an
-bettye
-beulah
-beun
-beuren
-bev
-bevan
-beveridg
-beverie
-beverlee
-beverley
-beverlie
-beverly
-bevin
-bevingto
-bevis
-bevon
-bevvy
-bevyn
-beware.
-beygui
-beymer
-bezanson
-bezdel
-beznowsk
-bhagvat
-bhal
-bhandari
-bhanu
-bharadwa
-bharat
-bhardwaj
-bhasin
-bhaskar
-bhatia
-bhatt
-bhattach
-bhatti
-bhavani
-bhoday
-bhullar
-bhupendr
-bhupinde
-bhusan
-bi-jun
-bi-shiou
-biage
-bialek
-bialkeni
-biamonte
-bianca
-bianchi
-bianka
-biard
-bibbie
-bibby
-bibbye
-bibekana
-bibi
-bible
-bibr
-bice
-bickford
-bidc
-biddie
-biddy
-bidetti
-bidget
-bidyut
-biederma
-biegaj
-biel
-bielan
-bielat
-bielby
-bielecki
-bielejes
-bienek
-bienia
-bierbrie
-bierman
-biermann
-biersach
-bieszcza
-bigelow
-biggers
-biggerst
-biggs
-bigley
-bigras
-bihari
-bihl
-bijan
-bijjani
-bijman
-bijons
-bijun
-bil
-bilal
-bilanski
-bili
-bill
-billard
-billi
-billie
-billing
-billingh
-billotea
-billy
-billye
-bilodeau
-bilovus
-bilsboro
-bilton
-bimini
-bin
-bina
-binda
-binder
-bindi
-binette
-bing
-binggeli
-bingham
-bingley
-bingwu
-binh
-bink
-binkley
-binky
-binner
-binni
-binnie
-binningt
-binny
-bins
-biomecha
-biomed
-bipin
-biplab
-bir
-biray
-birch
-bird
-birdie
-birendra
-birgit
-birgitta
-birgitte
-birk
-birkett
-birks
-birkwood
-birmingh
-biron
-birtch
-bisad
-bisch
-bishiou
-bishwa
-bishya
-bismark
-biss
-bissegge
-bissette
-bisson
-bissonne
-biswa
-biswajit
-bitar
-bittenbe
-bittman
-bitton
-bivens
-bizga
-bjorklun
-bjorn
-bjornson
-blaauw
-blackard
-blackbur
-blacker
-blackley
-blackloc
-blackman
-blacksha
-blackshi
-blackwel
-blackwoo
-bladon
-blaikloc
-blaine
-blair
-blaire
-blais
-blaise
-blake
-blake-kn
-blakelee
-blakeley
-blakemor
-blakesle
-blakey
-blakkolb
-blalock
-blanca
-blanca-s
-blancasi
-blanch
-blancha
-blanchar
-blanche
-blanchet
-blanco-a
-blander
-blane
-blankens
-blann
-blaschuk
-blasine
-blasing
-blasko
-blatherw
-blatt
-blau
-blauer
-blaufus
-blaylock
-blayne
-blazejew
-blazek
-blazer
-bleile
-blenk
-blenkarn
-blesi
-blethen
-bleuer
-blevins
-blezard
-blidy
-blimkie
-blinn
-blinni
-blinnie
-blinny
-bliss
-blisse
-blissett
-blithe
-blodgett
-bloedon
-bloemker
-blois
-blomquis
-blondell
-blondie
-blondy
-bloodwor
-blostein
-blouin
-blount
-bluethne
-blum
-blumenfe
-blumer
-bluschke
-bly
-blyskal
-blyszcza
-blythe
-bmethods
-bnr
-bnrecad
-bnrinfo
-bnrlsi
-bnrsport
-bnrtor
-bo
-bo-ping
-boal
-boaman
-boarder
-boase
-boatwrig
-bob
-bobak
-bobar
-bobb
-bobbe
-bobbee
-bobbette
-bobbi
-bobbie
-bobbitt
-bobby
-bobbye
-bobette
-bobina
-bobine
-bobinett
-boccali
-bockaj
-bocklage
-bocservi
-boddevel
-boden
-bodford
-bodin
-bodkin
-bodnar
-bodo
-boeck
-boecke
-boehlke
-boehms
-boen
-boer
-boersma
-boeyen
-bogal
-bogart
-bogdan
-bogert
-bogey
-boggan
-boggia
-boggild
-boggs
-bogumill
-boguslaw
-bohacek
-bohanan
-bohannon
-bohdan
-bohn
-bohner
-bohyun
-boigie
-boileau
-boily
-boinnard
-bois
-boisseau
-boisset
-boisvert
-boivin
-bojeck
-bokanovi
-bokij
-bokish
-boland
-bolding
-bolduc
-boleda
-bolen
-boles
-bolgos
-bolio
-bolli
-bolly
-bolon
-bolouri
-bolsinge
-bolton
-bolzon
-bomba
-bombardi
-bommakan
-bommer
-bomstein
-bon
-bonahoom
-bond
-bondie
-bondon
-bonduran
-bondy
-bone
-bonfanti
-bongers
-boniface
-bonita
-bonn
-bonnar
-bonneau
-bonnee
-bonnefoy
-bonnell
-bonner
-bonnevil
-bonney
-bonni
-bonnibel
-bonnie
-bonnin
-bonny
-bono
-boocock
-booker
-booking
-bookings
-boon-sio
-boone
-boonie
-boonphet
-boonsion
-boony
-boorne
-boorse
-boos
-boose
-boot
-boote
-booth
-boothe
-boothroy
-bophal
-boping
-bopp
-boppana
-bor-wen
-bora
-boraie
-boray
-borcic
-bord
-bordage
-borden
-bordie
-bordin
-bordy
-borek
-borel
-borg
-borgia
-borha
-boris
-borivoje
-borkowic
-borman
-borodajl
-borojevi
-borosch
-borosh
-boroski
-boroughs
-borowiec
-borozny
-borrelli
-borsa
-borsato
-borson
-bortenst
-borthwic
-bortolus
-borum
-boruslaw
-borwen
-borza
-borzic
-bosch
-boschin
-boscio
-bosco
-bose
-bosiljev
-bosiljka
-bosko
-bosnich
-bosnyak
-bossa
-bossert
-bossett
-bossler
-bostelma
-bostock
-boswell
-boswick
-bosworth
-bosy
-bot
-bothwell
-bott
-botti
-botting
-bottis
-botto
-bottomle
-bottoms
-botyrius
-bouchard
-boucher
-boucouri
-boudin
-boudreau
-bouffard
-bouick
-boulais
-boulay
-bouleric
-boulos
-boult
-bounds
-bour
-bourahla
-bourbonn
-bourcier
-bourdeau
-bourdign
-bourdin
-bouret
-bourgaiz
-bourgaul
-bourget
-bourgon
-bourguig
-bourk
-bourke
-bourland
-bourlet
-bourne
-bouroncl
-bourque
-bourret
-bousfiel
-boutilie
-boutin
-boutniko
-boutot
-bovat
-bovee
-bovenize
-bovey
-bowab
-bowcock
-bowden
-bowen
-bowens
-bower
-bowers
-bowes
-bowick
-bowie
-bowler
-bowles
-bowling
-bowser
-bowyer
-boy
-boyachek
-boyajian
-boyce
-boycey
-boycie
-boyd
-boye
-boyea
-boyer
-boyes
-boylan
-boyle
-boynton
-boz
-bozeman
-bozicevi
-bqb
-braaksma
-brabant
-brabec
-bracewel
-brackin
-brackley
-bracy
-brad
-bradan
-bradbury
-bradd
-braddock
-braddy
-brade
-bradee
-braden
-bradford
-brading
-bradlee
-bradley
-bradlow
-bradly
-bradnels
-bradney
-bradshaw
-brady
-bradyhou
-bragado
-braganza
-bragg
-braginet
-braham
-brahim
-brahmana
-brahms
-brailey
-brain
-brait
-brajesh
-bram
-brambley
-bramlett
-bran
-brana
-branchau
-brand
-brandais
-brande
-brandea
-brandel
-branden
-brander
-brandi
-brandice
-brandie
-brandise
-brandon
-brandsen
-brandsta
-brandt
-brandtr
-brandvol
-brandy
-brandyn
-branham
-brann
-brannan
-brannen
-brannick
-brannon
-brans
-branscom
-brant
-brantley
-brar
-brashear
-brasingt
-brassard
-brassell
-brassem
-brasset
-brasunas
-brathwai
-bratten
-brauer
-brault
-braum
-braun
-braunsti
-braverma
-brawley
-brazeau
-breanne
-brear
-brearley
-breault
-brechtje
-bredeck
-bredfeld
-bree
-breedlov
-breena
-bregitte
-breglec
-brehm
-breisch
-breiten
-brekel
-brel
-bremner
-bren
-brena
-brend
-brenda
-brendan
-brenden
-brender
-brendin
-brendis
-brendon
-brenn
-brenna
-brennan
-brennand
-brennen
-brent
-brentley
-brenton
-breon
-brese
-bresee
-breslin
-bresnaha
-bresnan
-bress
-bret
-breton
-brett
-breuer
-brevard
-brew
-brewer
-brewster
-brewton
-bria
-brian
-briana
-brianna
-brianne
-briano
-briant
-briante
-briard
-brice
-brichett
-brickey
-brickman
-bride
-briden
-bridenst
-bridge
-bridgefo
-bridges
-bridget
-bridgett
-bridgman
-bridie
-brieda
-briel
-brien
-brier
-briere
-brierley
-brietta
-brig
-brigg
-briggs
-brigham
-brightwe
-brigid
-brigida
-brigit
-brigitta
-brigitte
-brina
-brind'am
-brindley
-briner
-briney
-bringhur
-brinklow
-brinkman
-brinn
-brinna
-brintnel
-brinton
-briny
-brion
-brisby
-briseboi
-brissett
-brisson
-brit
-brita
-britman
-britney
-britni
-britt
-britta
-brittain
-brittan
-brittane
-brittani
-brittany
-britte
-britteny
-brittne
-brittney
-brittni
-britto
-britton
-brivet
-brivins
-brkich
-brnaba
-brnaby
-broadfoo
-broadhea
-broadwel
-broberg
-broca
-brocato
-brock
-brockhou
-brockie
-brockleb
-brockman
-brockmey
-brocksch
-brocky
-brod
-broddie
-broddy
-broderic
-broderse
-brodfueh
-brodgen
-brodie
-brodman
-brodowsk
-brody
-brogden
-brogdon
-brogley
-brok
-brokaw
-brombal
-bromley
-bron
-bronec
-bronk
-bronnie
-bronny
-bronson
-brook
-brooke
-brooker
-brookes
-brookhar
-brookhou
-brooks
-brooksba
-broome
-brophy
-broschuk
-brose
-brossard
-brossela
-brosso
-brost
-brostrom
-broten
-brothers
-brothert
-brough
-broughto
-brouille
-broulik
-broussar
-broussea
-brouthil
-brouwer
-brovont
-brower
-brown-gi
-browne
-brownfie
-browning
-brownlee
-brownlie
-brownrid
-brox
-broyles
-brubaker
-bruce
-brucie
-bruder
-bruhl
-bruin
-bruis
-bruketa
-brule
-brum
-brummitt
-brummund
-brunato
-bruncati
-bruneau
-brunel
-brunelle
-bruner
-bruner-u
-brunet
-brungard
-brunhild
-brunke
-brunner
-brunner-
-bruno
-brunoni
-brunstin
-brunton
-brushey
-bruxvoor
-bry
-bryan
-bryana
-bryant
-bryanty
-bryce
-brydges
-brydon
-bryenton
-bryn
-bryna
-brynn
-brynna
-brynne
-bryon
-brys
-bryttan
-bse
-bubak
-bubel
-buccella
-bucci
-buchan
-buchanan
-buchko
-buck
-buckalew
-buckhoff
-buckie
-buckingh
-buckley
-bucklin
-buckman
-buckner
-bucky
-buczek
-bud
-buda
-budd
-buddie
-buddy
-buder
-budhram
-budi
-budihard
-budimiro
-bue
-buechner
-buehler
-buettgen
-buffam
-buffett
-buffy
-buford
-bugajska
-bugajski
-buggie
-buhler
-buhr
-buhrkuhl
-bui
-building
-buiron
-bujold
-buker
-bukowski
-bukta
-buky
-bulan
-bulanda
-bulbrook
-bulengo
-bulent
-buley
-bulger
-bulifant
-bulitka
-bulka
-bulkovsh
-bullard
-bullas
-bullen
-bulletin
-bullett
-bullinge
-bullion
-bulman
-bulmanis
-bulmer
-bulz
-bumgarne
-bumstead
-bunce
-bundschu
-bunker
-bunn
-bunner
-bunni
-bunnie
-bunny
-bunting
-buntrock
-bunzey
-buratyns
-burbage
-burbidge
-burcew
-burch
-burchat
-burchby
-burdett
-burdette
-burdick
-burega
-burek
-burg
-burge
-burger
-burgess
-burgette
-burgi
-burgin
-burgwell
-burk
-burkard
-burke
-burkepil
-burkert
-burkett
-burkey
-burkhard
-burl
-burleigh
-burleson
-burlie
-burnaby
-burnage
-burnard
-burness
-burnet
-burnett
-burnette
-burney
-burnie
-burns
-burnside
-burr
-burrell
-burrowes
-burrows
-burrus
-burruss
-burt
-burtie
-burton
-burty
-burwell
-busby
-buscagli
-buscarin
-busch
-busche
-buschelm
-bushell
-bushnell
-bushnik
-business
-buskard
-buske
-buskens
-busko
-bussewit
-bussey
-buster
-bustillo
-busuttil
-butch
-butcher
-butner
-butta
-butterfi
-butters
-buttrey
-butts
-butvich
-buxton
-buzz
-buzzell
-buzzy
-bvworks
-by don o
-bycenko
-byczko
-bydeley
-byer
-byers
-byeungwo
-byk
-bykowy
-bylina
-byoung
-byoungin
-byram
-byran
-byrann
-byrd
-byrgesen
-byrl
-byrle
-byrne
-byrnes
-byrom
-byron
-byung
-byungyon
-cabaniss
-cabi
-cabot
-cabral
-cabras
-cabrera
-caceres
-cacha
-cachero
-cacilia
-cacilie
-cad
-cadd
-caddric
-cadeau
-cadieux
-cadshare
-cadtools
-cady
-cadzow
-cae
-caesar
-caffrey
-caffry
-cagatay
-caglar
-caglayan
-cahill
-cahra
-cai
-caie
-cain
-caine
-caines
-cairisti
-cairns
-caison
-caitlin
-caitrin
-cakarevi
-cal
-calahorr
-calc
-calcote
-calder
-caldwell
-cale
-caleb
-caleta
-calhoun
-caliboso
-calica
-calida
-calis
-calistro
-calkins
-calla
-callagha
-callahan
-callan
-callanan
-callean
-calleja
-callende
-callery
-calley
-calli
-callida
-callie
-callos
-calloway
-cally
-calmejan
-calmenso
-calow
-caltride
-calumet
-calv
-calva
-calvary
-calvin
-calypso
-calzaros
-cam
-camacho
-camala
-camblin
-cambre
-camel
-camel-to
-camella
-camellia
-cameron
-camet
-camey
-cami
-camie
-camila
-camile
-camilla
-camille
-camilluc
-camino
-camirand
-cammi
-cammie
-cammy
-campagna
-campanel
-campara
-campbell
-campeau
-camplone
-campo
-campos
-canada
-canadian
-canavan
-cancela
-candace
-candee
-candelar
-candi
-candice
-candida
-candide
-candie
-candis
-candra
-candy
-canete
-canfield
-cang
-cann
-cannatar
-cano
-cantlie
-cantrell
-cantwell
-canuel
-canute
-capelle
-capes
-capindal
-caple
-caplinge
-capobian
-capostag
-capozzi
-capps
-capretta
-caprice
-captives
-caputo
-car
-cara
-caralie
-carandan
-carbajal
-carbonar
-carbone
-carboni
-carbonne
-carce
-cardella
-carden
-cardozo
-cards
-care
-career
-careers
-carella
-caren
-carena
-caresa
-caresani
-caressa
-caresse
-carevic
-carew
-carey
-cargill
-cargnell
-cari
-caria
-caridad
-carie
-carignan
-caril
-carilyn
-carin
-carina
-carine
-cariotta
-carisa
-carissa
-carita
-caritta
-cark
-carkner
-carl
-carla
-carlberg
-carldata
-carle
-carlean
-carlebac
-carlee
-carleen
-carlen
-carlene
-carleton
-carlett
-carley
-carli
-carlie
-carlin
-carlina
-carline
-carling
-carlis
-carlisle
-carlita
-carlo
-carlock
-carlos
-carlota
-carlotta
-carlsen
-carlson
-carlton
-carly
-carlye
-carlyle
-carlyn
-carlynn
-carlynne
-carm
-carma
-carmel
-carmela
-carmelia
-carmelin
-carmelit
-carmella
-carmelle
-carmelo
-carmen
-carmenci
-carmicha
-carmina
-carmine
-carmita
-carmody
-carmon
-carmona
-carnegie
-carney
-carnogur
-carny
-caro
-carol
-carol-je
-carola
-carolan
-carolann
-carole
-carolee
-carolien
-carolin
-carolina
-caroline
-caroljea
-carolle
-carolus
-carolyn
-carolyne
-carolynn
-caron
-carpenti
-carpool
-carr
-carran
-carranza
-carree
-carri
-carrie
-carriere
-carrillo
-carringt
-carrissa
-carrmtce
-carrol
-carroll
-carron
-carruthe
-carry
-carrye
-carson
-carsten
-carstens
-carswell
-cart
-carter
-cartohl
-carty
-carufel
-caruk
-caruso
-caruth
-carvalho
-carver
-cary
-caryl
-caryn
-cas
-casadont
-casalou
-casandra
-casanova
-casar
-casas
-cascarin
-case
-casey
-cash
-cashin
-casi
-casie
-casinovi
-caskey
-casler
-casnji
-casotto
-caspar
-casper
-casperso
-cass
-cassady
-cassandr
-cassar
-cassat
-cassaund
-cassese
-cassey
-cassi
-cassian
-cassidy
-cassie
-cassius
-casson
-cassondr
-cassy
-castaban
-castell
-castello
-casten
-castillo
-casto
-castongu
-castro
-castro-h
-castrono
-caswell
-cat
-catanach
-catarina
-cate
-caterina
-catering
-cath
-catha
-cathal
-catharin
-cathe
-cathee
-catherin
-catherwo
-cathi
-cathie
-cathleen
-cathlene
-cathrin
-cathrine
-cathryn
-cathy
-cathylee
-cati
-catie
-catina
-catja
-catlaina
-catlee
-catlett
-catlin
-cato
-caton
-catrina
-catriona
-catthoor
-caty
-cau
-cauchy
-caudill
-caudle
-cauthen
-cauthers
-cavan
-cavanagh
-cavanaug
-cavasin
-cavasso
-caves
-cavill
-cavin
-caviness
-cavnar
-cawley
-caye
-cayer-fl
-cayla
-cayless
-cayouett
-caz
-caza
-cazzie
-cbabbage
-cchaddie
-cecco
-cece
-cecelia
-cech
-cecil
-cecile
-ceciley
-cecilia
-cecilio
-cecilius
-cecilla
-cecily
-cecon
-ced
-cedric
-cefee
-cegelski
-ceil
-cele
-celene
-celesta
-celeste
-celestia
-celestin
-celestyn
-celia
-celie
-celina
-celinda
-celine
-celinka
-celisse
-celka
-celle
-cello
-cellucci
-celso
-celyne
-cemensky
-cen
-cencier
-centeno
-center
-centers
-centis
-centre
-cepero
-cepheus
-ceponis
-ceranic
-cerberus
-ceri
-ceriel
-cerny
-cervante
-cesar
-cesaratt
-cesare
-cesario
-cesaro
-cescon
-cesya
-cetraro
-cezary
-chaaban
-chaar
-chabane
-chabert
-chabrat
-chacko
-chacon
-chad
-chadd
-chaddha
-chaddie
-chaddock
-chaddy
-chadha
-chadrick
-chadwick
-chafin
-chafy
-chagnon
-chahal
-chahram
-chai
-chai-seo
-chaikows
-chaim
-chaiman
-chaimson
-chaintre
-chaisupa
-chak-hon
-chakraba
-chakrabo
-chakrava
-chalifou
-chalker
-challice
-chalmers
-chalton
-cham
-chamard
-chamayou
-chambers
-chamblis
-champath
-champion
-champsi
-chamsi
-chan
-chan-jiu
-chan-nan
-chance
-chancey
-chanchal
-chanchla
-chanco
-chand
-chanda
-chandal
-chandan
-chander
-chandler
-chandra
-chandrak
-chandran
-chandras
-chandru
-chane
-chang
-chang-hs
-changes
-changho
-changhsi
-chanh
-chanitr
-chanjiun
-channa
-channan
-channell
-channen
-chanonat
-chanpong
-chanshin
-chansik
-chantal
-chantall
-chantel
-chantell
-chao
-chao-pin
-chaoping
-chapa
-chapdela
-chapen
-chapin
-chapleau
-chaplin
-chapman
-chapmond
-chappell
-chappuis
-chaput
-char
-charangi
-charasse
-charbonn
-charchan
-chardon
-charee
-charene
-charest
-charette
-chari
-charil
-charin
-chariot
-charis
-charissa
-charisse
-charita
-charity
-charko
-charla
-charlean
-charlebo
-charleen
-charlena
-charlene
-charles
-charlesb
-charleto
-charley
-charlie
-charline
-charlino
-charlins
-charlot
-charlott
-charlsey
-charlton
-charly
-charmain
-charman
-charmane
-charmian
-charmine
-charmion
-charness
-charney
-charo
-charon
-charron
-charter
-chartier
-chartran
-charyl
-chas
-chasalow
-chase
-chasse
-chastity
-chatard
-chatchai
-chatel
-chatfiel
-chatha
-chatri
-chatterl
-chattert
-chattoe
-chattos
-chau
-chaudhar
-chaudhry
-chaudry
-chaug-mi
-chaugmin
-chauhan
-chaunce
-chauncey
-chaurasi
-chaurett
-chautems
-chauvin
-chavers
-chaves
-chavez
-chavis
-chawki
-chawla
-chaya
-chaz
-che
-chea
-cheal
-cheatham
-cheba
-checinsk
-checklan
-chee
-chee-yin
-chee-yon
-cheesema
-cheesman
-cheetham
-cheevers
-chel
-chellapp
-chelsae
-chelsea
-chelsey
-chelsie
-chelsy
-chem
-chen
-chen-che
-chen-chu
-chen-jun
-chen-msi
-chenard
-chenault
-chenchun
-chene
-cheney
-cheng
-cheng-do
-cheng-fo
-cheng-ho
-cheng-hu
-cheng-ts
-chengdon
-chengfoo
-chenghon
-chenghun
-chengtse
-chengwei
-chenier
-chenmsie
-chennett
-chenowet
-chenye
-cheol
-cheow-to
-cheowton
-chepregi
-cher
-chere
-cherenso
-cherey
-cheri
-cherian
-cheriann
-cherice
-cherida
-cherie
-cherilyn
-cherin
-cherise
-cherish
-cherkas
-cherlyn
-chern
-chernets
-cherng
-cherri
-cherrier
-cherrita
-cherry
-chertok
-chervena
-chery
-cherye
-cheryl
-ches
-cheshire
-chesley
-cheslie
-chesser
-chesteen
-chester
-chesterf
-cheston
-chet
-chetan
-cheuk
-cheung
-chev
-cheval
-chevalie
-chevarie
-chevy
-cheyenne
-chhabria
-chi
-chi-haw
-chi-ho
-chi-hua
-chi-hung
-chi-kai
-chi-keun
-chi-kwan
-chi-man
-chi-vien
-chi-wen
-chi-yin
-chi-yuan
-chia
-chia-hoa
-chia-hua
-chiabaut
-chiahoan
-chiahuan
-chiaki
-chiamvim
-chian
-chian-fo
-chianfon
-chiang
-chiang-h
-chianghu
-chiaoyun
-chiarell
-chiarra
-chiavaro
-chic
-chick
-chickie
-chickori
-chicky
-chico
-chie
-chief
-chieh
-chiem
-chien
-chien-ch
-chien-hs
-chien-hu
-chienche
-chienchi
-chienhsi
-chienhue
-chieu
-chih
-chih-chi
-chih-hsi
-chih-hua
-chih-tsa
-chihaw
-chihchia
-chihchie
-chihhsia
-chihhua
-chihtsai
-chihua
-chihung
-chiiwen
-chik
-chikai
-chilausk
-childerh
-childers
-childree
-childres
-childs
-chilibec
-chilton
-chima
-chin
-chin-ho
-chin-lin
-chin-shu
-chin-ten
-chin-wen
-chinfui
-ching
-ching-ch
-ching-en
-ching-fu
-ching-lo
-ching-ts
-ching-yu
-chingchy
-chingen
-chingfu
-chingtsu
-chingyun
-chinh
-chinhin
-chinho
-chiniwal
-chinlin
-chinn
-chinnery
-chinrung
-chinshu
-chinteng
-chinwen
-chiou
-chip
-chiquia
-chiquita
-chiracha
-chisholm
-chisolm
-chitkara
-chitnis
-chitra
-chityal
-chiu
-chiverto
-chiwen
-chiykows
-chiyo
-chiyuan
-chlo
-chloe
-chloette
-chloris
-chmara
-cho
-cho-kuen
-cho-lun
-chochon
-chocs
-chod
-choe
-chohan
-choi
-chojan
-chok
-cholet
-cholette
-cholewin
-chomik
-chona
-chonchan
-chong
-chong-ch
-chong-ke
-chong-la
-chongcha
-chongkeu
-choo
-choo-kan
-choon
-choon-li
-choong
-chopin
-chopowic
-chopra
-choptovy
-choquett
-chorley
-chorng
-chotkows
-chou
-choudhur
-chouhan
-chouinar
-chowhan
-choy
-choynows
-chriisto
-chris
-chrisman
-chrisoph
-chrisse
-chrissie
-chrissun
-chrissy
-christ
-christa
-christab
-christal
-christan
-christea
-christel
-christen
-christer
-christi
-christia
-christie
-christin
-christl
-christof
-christop
-christos
-christy
-christye
-christyn
-chrisy
-chronowi
-chrotoem
-chroust
-chruscie
-chrysa
-chrysant
-chrysler
-chrystal
-chryste
-chrystel
-chu
-chu-chay
-chu-chue
-chua
-chuah
-chuan
-chuan-hs
-chuang
-chuanhsi
-chubb
-chubby
-chucho
-chuchuen
-chuck
-chueh
-chuen
-chugha
-chui
-chuj
-chuk
-chukwuem
-chul
-chuming
-chummun
-chun
-chun-li
-chun-shi
-chun-yen
-chung
-chung-ch
-chung-kw
-chung-li
-chung-wo
-chung-yo
-chungen
-chungjen
-chungkwo
-chunglin
-chungpha
-chungsik
-chunkin
-chunlan
-chunli
-chunlin
-chunling
-chunmei
-chunmeng
-chunn
-chunshin
-chunyen
-chuong
-chuq
-churas
-churchil
-chwen
-chychrun
-chye
-chye-lia
-chytil
-cia
-ciampini
-cianci
-ciancibe
-ciaralli
-ciaran
-ciaschi
-ciccarel
-cicchino
-cicci
-cicek
-cicely
-cicero
-cicily
-ciel
-ciesiels
-cieslak
-cifelli
-cifersky
-cigay
-cilka
-cimarron
-cimino
-cimolai
-cinar
-cinda
-cindas
-cindee
-cindelyn
-cinderel
-cindi
-cindie
-cindra
-cindy
-cinicolo
-cinnamon
-cinq-mar
-ciocca
-ciochon
-cioffi
-ciolfi
-cipolla
-circe
-ciriaco
-cirillo
-cirilo
-ciro
-cirri
-cirstofo
-cirulli
-cis @ w
-cisco
-ciskowsk
-cisnews
-cissiee
-cissy
-citarell
-cities
-citrin
-cividino
-cizmar
-clacher
-claggett
-claiborn
-clair
-claire
-clairmon
-claise
-clampitt
-clancy
-clapham
-clapp
-clara
-clarabel
-clarance
-clare
-clarence
-claresta
-clareta
-claretta
-clarette
-clarey
-clari
-claribel
-clarice
-clarie
-clarinda
-clarine
-clarise
-clarissa
-clarisse
-clarita
-clark
-clark-st
-clarka
-clarke
-clarkson
-clary
-clason
-class
-classes
-claude
-claudell
-claudett
-claudia
-claudian
-claudie
-claudina
-claudine
-claudio
-claudius
-claus
-claveau
-claxton
-clay
-clayborn
-claybour
-claybroo
-clayson
-clayton
-clea
-cleary
-cleavlan
-cleere
-clegg
-clem
-clemence
-clemens
-clement
-clemente
-clementi
-clements
-clemie
-clemmie
-clemmons
-clemmy
-clendeni
-clenney
-clennito
-clentice
-cleo
-cleon
-cleopatr
-clerc
-clerissa
-clerkcla
-clerke
-cleroux
-clesson
-clestell
-cletis
-cleto
-cletus
-cleve
-clevelan
-clevey
-clevie
-clevon
-cliff
-clifford
-clifton
-clim
-clincket
-cline
-clinger
-clinkard
-clint
-clinteas
-clinton
-clio
-clippert
-clipsham
-clites
-clive
-clo
-clocklab
-cloe
-cloherty
-clooney
-cloris
-closson
-clost
-clotilda
-clough
-clouthie
-cloutier
-clovis
-clow
-cloyd
-cluett
-clusiau
-cly
-clyde
-clysdale
-clyve
-clywd
-cmet
-co
-co-op
-co-ordin
-coady
-coallier
-coathup
-coats
-cob
-cobaugh
-cobb
-cobban
-cobbie
-cobbold
-cobby
-coble
-cobley
-cobo
-cobran
-cocco
-cochran
-cochrane
-cockburn
-cockcrof
-cocke
-cockins
-cocos
-cocos-ar
-codack
-codata
-coddingt
-code
-codee
-coder
-codi
-codie
-codoc
-codringt
-cody
-coe
-coertnik
-coffey
-cogan
-cogdell
-coggins
-coghlan
-cogwell
-cohea
-cohen
-cohn
-cohn-sfe
-cohoe
-cohrs
-coila
-cointon
-coker
-cokol
-colagros
-colan
-colangel
-colanton
-colas
-colatta
-colbert
-colbourn
-colburn
-colby
-colclasu
-coldwell
-cole
-coleen
-colella
-coleman
-colene
-coles
-colet
-coletta
-colette
-coley
-colford
-colgan
-colin
-colina
-colinda
-collamer
-collamor
-collazo
-collecut
-colledge
-colleen
-collen
-collete
-collette
-collevec
-colley
-colli
-collie
-collier
-collin
-colline
-collins
-collis
-colly
-collyer
-colm
-colman
-coloads
-colonton
-colpitts
-colquett
-colquhou
-colquitt
-colston
-colter
-colterma
-colton
-colucci
-colver
-colvin
-colwell
-comay
-combaz
-combee
-combella
-combos
-combs
-comeau
-comley
-comm
-commazzi
-comments
-committe
-commons
-communic
-comp
-compton
-computin
-comstock
-comtois
-con
-conan
-conant
-conboy
-concetta
-concetti
-conchita
-concklin
-concordi
-conde
-condell
-condurel
-conerly
-coneybea
-cong
-congdon
-congress
-conistis
-conklin
-conley
-conlin
-conlon
-conn
-connell
-connelly
-conner
-conners
-conney
-conni
-connie
-connolly
-connor
-connors
-connors-
-conny
-conoly
-conrad
-conrade
-conrado
-conrath
-conroy
-consalve
-conservi
-consolat
-constabl
-constanc
-constant
-construc
-consuela
-consuelo
-consulta
-containi
-contardo
-conte
-contine
-contomic
-conway
-coochey
-coody
-coogan
-cooke
-cookie
-cooksey
-cooley
-coolidge
-coombs
-cooney
-coop
-cooper
-cooperma
-coord
-coordina
-coors
-copeland
-copello
-copeman
-copes
-coplesto
-copley
-copp
-coppedge
-coppins
-coqueugn
-cora
-corabel
-corabell
-corace
-coral
-coralie
-coraline
-coralyn
-corbeil
-corbet
-corbett
-corbie
-corbin
-corbitt
-corby
-corcoran
-cord
-cordelia
-cordelie
-cordell
-cordes
-cordey
-cordi
-cordie
-cordula
-cordy
-core
-coreen
-corella
-corena
-corenda
-corene
-coretta
-corette
-corey
-cori
-coriaty
-corie
-corilla
-corina
-corine
-corinna
-corinne
-coriss
-corissa
-corker
-corkey
-corkigan
-corkstow
-corkum
-corless
-corlett
-corley
-corliss
-corly
-cormac
-cormier
-cornall
-cornaro
-cornel
-cornela
-cornelia
-cornelis
-corneliu
-cornell
-cornelle
-corner
-corney
-cornie
-corny
-corpenin
-corpuz
-corr
-correa
-correia
-correna
-correy
-corri
-corriann
-corrie
-corrigan
-corrina
-corrine
-corrinne
-corritor
-corrivea
-corry
-corsale
-corse
-corson
-cort
-cortie
-cortland
-cortney
-corty
-corvo
-cory
-cos
-cosburn
-cosentin
-cosetta
-cosette
-cosgrove
-cosimo
-coslas
-cosme
-cosmo
-cosner
-cosola
-cossota
-costa
-costache
-costadim
-costandi
-costanti
-costanza
-costanzi
-costas
-costas-d
-coste
-costello
-costen
-cote
-cothran
-cotnam
-cotner
-cotten
-cottengi
-cotter
-cottingh
-cottrell
-cotugno
-cotuna
-coucopou
-couey
-coughran
-coules
-coulman
-coulombe
-coulson
-coulter
-coulterm
-count
-coupal
-coupland
-courches
-couron
-coursdev
-coursey
-coursol
-courson
-court
-courtadm
-courtena
-courtlan
-courtnay
-courtney
-courvill
-couse
-couser
-cousinea
-cousins
-coutelli
-coutinho
-couto
-coutu
-couture
-covach
-coverdal
-covey
-coviensk
-coville
-covingto
-cowan
-cowart
-cowell
-cowen
-cowick
-cowley
-cowling
-cowlisha
-cownie
-cowper
-coxall
-coxe
-coyle
-coyne
-cozart
-cozmo
-cozyn
-cozzi
-cpebach
-cpm
-cprs
-crabb
-crabe
-crabtree
-cracknel
-craddock
-crafton
-craggie
-craggs
-craggy
-craghead
-craib
-craig
-craig-du
-crain
-cramer
-cramm
-crampton
-crandall
-cranford
-cranston
-crapco
-crase
-craver
-crawford
-crawhall
-crawley
-crawshaw
-cray
-craycraf
-cre
-creamer
-crean
-creane
-creasey
-creasman
-creative
-credico
-credille
-creech
-creecy
-cregan
-creigh
-creight
-creighto
-cremer
-crepeau
-crerar
-creswell
-crews
-cribbs
-crichton
-crick
-crickard
-cricker
-cricket
-crigger
-crin
-crippen
-cripps
-cris
-crisler
-crissie
-crissy
-crista
-cristabe
-cristal
-cristen
-cristesc
-cristi
-cristian
-cristie
-cristin
-cristina
-cristine
-cristion
-cristoba
-cristofa
-cristy
-criswell
-critchle
-crittend
-crl.word
-crocker
-crockett
-crogie
-croiseti
-croix
-crolla
-cromer
-crommie
-crompton
-cromwell
-cronan
-cronin
-cronk
-cronkrig
-cronkwri
-crooks
-croom
-cropper
-crosby
-cross
-cross-as
-crossass
-crossley
-crosson
-crosswel
-croteau
-crothers
-crotty
-crowder
-crowe
-crowell
-crowle
-crowley
-croxall
-croxford
-crozier
-crucefix
-cruey
-cruicksh
-crumpton
-crusoe
-crutchfi
-cruz
-cruzado
-cryoelec
-crysta
-crystal
-crystalb
-crystie
-csaszar
-csenar
-csilla
-csite
-csma
-csop
-csr
-csreport
-csua
-ctas
-cthrine
-cuany
-cuauhtem
-cubical
-cubicle
-cucchiar
-cucci
-cuccia
-cucciole
-cucuzzel
-cuddihey
-cuddihy
-cuddy
-cuellar
-cuervo
-cuffle
-cuffling
-cuggy
-culberso
-culberts
-culbreth
-culham
-culkin
-cull
-cullan
-cullen
-culley
-cullie
-cullin
-culliphe
-cullum
-cully
-culmer
-culp
-culver
-culverho
-cummine
-cumming
-cummings
-cummins
-cumpston
-cunanan
-cung
-cunha-go
-cunningh
-cuong
-cuper
-cupid
-cupido
-curcio
-curley
-curmon
-curnow
-curr
-curran
-currer
-currey
-currie
-currier
-currin
-curry
-curt
-curtice
-curtin
-curtis
-curtt
-cusato
-cushing
-cushman
-cusick
-cusson
-custer
-custsupp
-cusumano
-cuthbert
-cuthill
-cutrufel
-cutter
-cuu
-cwirzen
-cy
-cyb
-cybil
-cybill
-cybotech
-cycelia
-cymbre
-cynde
-cyndi
-cyndia
-cyndie
-cyndy
-cynethia
-cynthea
-cynthia
-cynthie
-cynthy
-cynthya
-cyr
-cyril
-cyrill
-cyrille
-cyrillus
-cyrine
-cyros
-cyrus
-cytrynba
-czappa
-czarneck
-czeban
-czes
-czeslaw
-czychun
-d'ambros
-d'amico
-d'amour
-d'andrea
-d'angelo
-d'anjou
-d'anne
-d'antoni
-d'aoust
-d'arcy
-d'cruz
-d'ingian
-d'ippoli
-d'lima
-d'onofri
-d'orazio
-d'silva
-d'soto
-d'souza
-da
-da gama
-da silva
-da-shih
-daaboul
-dacal
-dace
-dacey
-dach
-dachelet
-dacia
-dacie
-dack
-dacre
-dacy
-dada
-dadalt
-dadang
-dade
-dadgar
-dadkhah
-dae
-daebum
-daedalus
-dael
-daena
-daesik
-daffi
-daffie
-daffy
-dafoe
-dag
-dagama
-dagenais
-dagert
-dages
-dagg
-dagley
-dagmar
-dagnall
-dagnaw
-dagny
-dagoulis
-dahai
-dahan
-dahi
-dahl
-dahlia
-dahlstro
-dai
-daigle
-daigneau
-daijavad
-daile
-dailey
-daimee
-dairin
-daisey
-daisi
-daisie
-daisy
-dajerlin
-dal
-dale
-dalenna
-dales
-daley
-dalia
-dalila
-dalip
-dalis
-dall
-dall'ost
-dallago
-dallaire
-dallal
-dallas
-dalli
-dallis
-dallon
-dalmard
-daloris
-dalrympl
-dalsiel
-dalston
-dalt
-dalton
-daly
-damara
-damaris
-dambenie
-dame
-damena
-damerji
-damian
-damiano
-damien
-damil
-damita
-damon
-damone
-dan
-dana
-danagher
-danai
-danbrook
-danchi
-dancy
-dando
-danduran
-dane
-danell
-danella
-daneshza
-danette
-danforth
-dangubic
-danh
-dani
-dania
-danial
-danica
-danice
-danie
-daniel
-daniela
-danielak
-daniele
-daniella
-danielle
-daniells
-daniels
-danika
-danila
-danilo
-danilowi
-daniluk
-danit
-danita
-danjean
-danker
-danko
-danling
-dann
-danna
-dannel
-danni
-dannie
-danny
-dannye
-dans
-danserea
-dante
-dantu
-dantzler
-dany
-danya
-danyelle
-danyette
-danzeise
-danzig
-dao
-daochuan
-daoud
-daoust
-daphene
-daphine
-daphna
-daphne
-daquano
-dar
-dar-der
-dara
-darb
-darbee
-darbie
-darby
-darcange
-darcee
-darcel
-darcey
-darci
-darcie
-darcy
-darda
-darden
-darder
-dare
-dareen
-darell
-darelle
-daren
-dares
-dari
-daria
-darian
-darice
-darill
-darin
-darina
-dario
-darius
-darko
-darla
-darleen
-darlene
-darline
-darlingt
-darlleen
-darn
-darnall
-darnel
-darnell
-darold
-daron
-darou
-darpa
-darr
-darrel
-darrell
-darrelle
-darren
-darrick
-darrimon
-darrin
-darroch
-darrol
-darrow
-darry
-darryl
-darsey
-darshan
-darshana
-darshi
-darsie
-daruius
-darveau
-darwen
-darwin
-darwyn
-darya
-daryl
-daryle
-daryn
-daryoosh
-daryoush
-das
-dasch
-dasd
-dasha
-dasharat
-dashih
-dasi
-dasie
-dasilva
-dasinger
-dasrath
-dassani
-dassie
-dasya
-dat
-data
-datacent
-datas
-datasupp
-datema
-dates
-datha
-datta
-dattalo
-dau
-daudin
-daugavie
-daughert
-daughtre
-daunais
-daune
-dauphina
-dautenha
-dauteriv
-dav
-davalo
-dave
-daveen
-daven
-daveta
-davey
-david
-david-ye
-davida
-davidde
-davide
-davidh
-davidovi
-davids
-davidson
-davie
-davies
-davin
-davina
-davinci
-davinder
-davine
-davis
-davison
-davita
-davon
-davor
-davy
-dawe
-dawit
-dawkins
-dawn
-dawna
-dawne
-dawson
-daya
-dayal
-dayberry
-dayle
-daymond
-dayna
-dayton
-db
-dba
-dbase
-dbs
-ddavid
-ddene
-ddocdb
-de
-de anda
-de baets
-de beaum
-de belen
-de boer
-de buda
-de cecco
-de chabe
-de cours
-de crist
-de eliza
-de grace
-de hoog
-de la
-de leon
-de los
-de marco
-de marti
-de muinc
-de salis
-de souza
-de toni
-de varen
-de vito
-de vries
-de wiele
-de wilto
-de witt
-de witte
-de-anna
-de-boer
-de-ying
-de_konin
-deacetis
-deadwile
-deagle
-deak
-deakin
-dealmeid
-dealto
-deames
-dean
-deana
-deanda
-deane
-deanm
-deann
-deanna
-deanne
-deans
-deanza
-dear
-dearaujo
-deardurf
-deason
-deathera
-deatrick
-deb
-debadeep
-debasish
-debassig
-debbi
-debbie
-debby
-debee
-debera
-debernar
-debi
-debkumar
-deblois
-debnam
-deboer
-deboor
-debor
-debora
-deborah
-debord
-debortol
-debra
-debrah
-debrun
-debrusk
-debs
-decacque
-decaire
-decapua
-decarie
-decasper
-decca
-decelles
-deciccio
-deck
-decker
-declan
-decleir
-decource
-decourcy
-decoursi
-deczky
-dedas
-dede
-dedie
-dedra
-deduk
-dee
-dee dee
-deeann
-deeanne
-deedee
-deek
-deena
-deep
-deepak
-deerdre
-deere
-deery
-deetta
-deevey
-deeyn
-defacend
-defalco
-defazio
-defilipp
-deford
-deforeit
-defrance
-defranch
-degan
-degen
-degenova
-degraauw
-degrandi
-deguines
-deguire
-dehaan
-dehghan
-dehlia
-dehner
-dehoff
-dehr
-deiadrel
-deibert
-deicher
-deidre
-deikman
-deina
-deininge
-deirdre
-deitera
-deitiker
-dejan
-dejongh
-dekai
-dekeyser
-del
-dela
-delaat
-delage
-delahay
-delainey
-delancey
-delaney
-delangis
-delano
-delargy
-delat
-delbert
-delbret
-delbridg
-delbrouc
-delcina
-delcine
-deleon
-delf
-delfin
-delfreda
-delgass
-delgross
-delia
-deligdis
-delila
-delilah
-delinda
-delisle
-deliva
-dell
-della
-delle
-delli
-dellinge
-delly
-delmar
-delmer
-delmor
-delmore
-delnaz
-delo
-delolmod
-delong
-delora
-delorenz
-delores
-deloria
-deloris
-delorme
-delphine
-delphini
-delroy
-deluca
-deluce
-deluco
-delvecch
-delzer
-demarco
-demarest
-demchuk
-dement
-demeo
-demers
-demet
-demeter
-demetra
-demetre
-demetri
-demetria
-demetric
-demetrio
-demetris
-demetriu
-demeulem
-demi
-demidenk
-demir
-demjen
-demmel
-demone
-demontlu
-demorest
-demorge
-demott
-demps
-dempsey
-dempster
-demren
-demuth
-den
-dena
-dendi
-dene
-denebeim
-deneen
-denemark
-denery
-denest
-denette
-deng
-deng-jyi
-dengjyi
-deni
-denice
-deniece
-denike
-denis
-denise
-denison
-deniz
-denley
-denman
-denmark
-denna
-dennen
-dennet
-denney
-denni
-dennie
-denning
-dennis
-dennison
-denno
-denny
-deno
-denomme
-denoon
-denter
-denton
-denver
-deny
-denys
-denyse
-denzil
-deog
-deok
-deol
-deonne
-depalma
-depeltea
-depew
-dephoure
-deployme
-depooter
-dept
-dept.
-der
-der-chan
-der-shen
-deraadt
-deraaf
-derby
-derbyshi
-derecki
-derek
-derenzo
-derganc
-deri
-derick
-derika
-derin
-derk
-derluen
-dermardi
-dermot
-derome
-derosa
-derose
-derosenr
-derrek
-derrett
-derrick
-derrik
-derril
-derron
-derry
-dersheng
-derward
-derwin
-dery
-deryck
-des
-desai
-desalis
-desantis
-desautel
-desch
-deschamp
-deschiff
-descotea
-descotes
-desdemon
-desgrose
-desharna
-desi
-design
-desilets
-desimone
-desirae
-desire
-desiree
-desiri
-desjardi
-desjarla
-deska
-deslande
-deslauri
-desmarai
-desmond
-desmund
-desoer
-desorbay
-desourdy
-despain
-despault
-despinic
-desplanq
-despres
-desroche
-desrosie
-dessain
-desser
-destech
-destefan
-destry
-detjens
-detlef
-detleff
-detlev
-detloff
-detra
-deugau
-deugo
-deutschm
-dev
-deva
-devadas
-devan
-devarenn
-devault
-deveau
-devel
-developm
-deven
-devenny
-devenyi
-devenyns
-devera
-devere
-devette
-devgon
-devi
-devices
-devin
-devina
-devincen
-devine
-devinne
-devland
-devlen
-devlin
-devon
-devondra
-devonna
-devonne
-devora
-devore
-devouges
-devreeze
-devy
-dew
-dewain
-dewart
-dewayne
-dewey
-dewi
-dewie
-dewit
-dewitt
-dewitte
-dex
-dexiang
-dexter
-deying
-deyirmen
-deyoung
-dezbah
-dezoete
-dg
-dhaliwal
-dhansukh
-dhanvind
-dhar
-dharam
-dharmara
-dharmawa
-dhaussy
-dhawal
-dheeraj
-dhillon
-dhinakar
-dhir
-dhiraj
-dhiren
-dhuga
-dhupar
-di
-di cosol
-di giamb
-di maso
-di millo
-di ninno
-dia-edin
-diaconu
-diahann
-dialout
-diamond
-dian
-diana
-diandra
-diane
-diane-ma
-dianemar
-diann
-dianna
-dianne
-diannne
-diarmid
-dias
-diaz
-dibenede
-dibler
-dicaprio
-dick
-dickard
-dickens
-dickerma
-dickerso
-dickeson
-dickford
-dickie
-dickinso
-dicks
-dicksie
-dickson
-dicky
-didani
-didar
-didi
-didier
-didio-du
-dido
-diduch
-didylows
-diec
-diederic
-diederik
-diedrich
-diee
-diego
-diekman
-diemel
-dien
-diena
-diener
-diep
-diepling
-dierdre
-diersch
-diesing
-dieter
-dietra
-dietrich
-dieu
-dieuwert
-difalco
-diffee
-diffie
-difilipp
-difrance
-digby
-digenova
-digiacom
-digilio
-dignam
-dijaili
-dijian
-diju
-dikaitis
-dikens
-dilallo
-dilan
-dilen
-dilip
-dilkie
-dill
-dillabou
-dillard
-dilley
-dillie
-dillingh
-dillon
-dillow
-dilly
-diloreto
-dilpreet
-dima
-dimarco
-dimarzo
-dimas
-dimetry
-dimillo
-dimitra
-dimitri
-dimitrio
-dimitry
-dimoueri
-dina
-dinaband
-dinah
-dinalic
-dincamps
-dineke
-dinesh
-dinges
-dingle
-dingley
-dingman
-dinh
-dinhtran
-dinkel
-dinker
-dinnervi
-dinneyla
-dinnie
-dinnin
-dinny
-dino
-dinsmore
-dinur
-diogo
-dion
-dione
-dionis
-dionisio
-dionne
-dionysia
-dionysiu
-dionysus
-dipace
-dipak
-dipasqua
-diperna
-dipierro
-dipietro
-dipper
-dirac
-diradmin
-dirbm
-dirck
-diretto
-dirienzo
-dirilten
-dirk
-dis
-disalvo
-discenza
-discours
-discover
-disessa
-disher
-dishong
-disisto
-disney
-dispatch
-dissinge
-distribu
-dita
-ditecco
-ditko
-dittburn
-divyesh
-dix
-dixie
-dixon
-djavaher
-djenana
-djordje
-djuan
-dmaac
-dmitri
-dms
-dmsdb
-dmsrtime
-dmuchals
-dnadoc
-dniren
-dnsproj
-do
-doak
-doan
-dobbing
-dobbins
-dobbs
-dobby
-doble
-dobransk
-dobrosla
-dobry
-doc
-docherty
-dockendo
-doctorjo
-document
-doczy
-doda
-dodd
-dodds
-dode
-dodgson
-dodi
-dodie
-dodier
-dodman
-dodson
-dody
-doe
-doemer
-doerfel
-doerksen
-doernber
-doerr
-doggett
-dohan
-doherty
-doi
-doig
-doing
-dokken
-dokuzogu
-dolan
-dolezal
-dolf
-dolginof
-dolgov
-doliska
-doll
-dolley
-dolli
-dollie
-dolly
-dolores
-dolorita
-dolph
-dolson
-dom
-domains
-domanico
-domas
-dombrosk
-domenic
-domenick
-domenico
-domeniga
-dominado
-domine
-dominga
-domingo
-domingue
-domini
-dominic
-dominica
-dominick
-dominik
-dominiqu
-dommety
-don
-dona
-donaghue
-donahee
-donahue
-donak
-donal
-donald
-donaldso
-donall
-donalt
-donator
-donaugh
-donavon
-doncaste
-doncell
-donegan
-donelan
-donella
-donelle
-donetta
-dong
-dong-ik
-dong-moo
-dong-pyo
-dongik
-dongmoon
-dongpyo
-donia
-donica
-donielle
-donis
-donita
-donkers
-donleyco
-donlon
-donn
-donna
-donnajea
-donnamar
-donne
-donnell
-donnelly
-donner
-donnette
-donni
-donnice
-donnie
-donny
-donoghue
-donohoe
-donohue
-donovan
-dood
-doodeman
-dooley
-doolin
-doolittl
-door
-doortje
-dora
-doraine
-dorais
-doraiswa
-doralia
-doralie
-doralin
-doralyn
-doralynn
-doran
-doray
-dordari
-dorden
-dore
-doreen
-dorelia
-dorella
-dorelle
-dorena
-dorene
-doretta
-dorette
-dorey
-dori
-doria
-dorian
-dorianne
-dorice
-dorie
-dorin
-dorine
-dorion
-dorion-m
-doriot
-doris
-doris-ha
-dorisa
-dorise
-dorit
-dorita
-dormer
-dorn
-dornback
-doro
-dorolice
-dorolisa
-dorotea
-doroteya
-dorothea
-dorothee
-dorothy
-dorotich
-dorr
-dorra
-dorree
-dorreen
-dorrell
-dorri
-dorrie
-dorris
-dorronso
-dorry
-dorsey
-dorthea
-dorthy
-dorval
-dory
-dosanjh
-dosenbac
-doshi
-dosi
-doskas
-dosref
-doss
-dost
-dot
-dotan
-doti
-dotsey
-dotson
-dotti
-dottie
-dottin
-dotty
-doublesi
-doucet
-doucette
-doud
-douet
-doug
-dougall
-doughert
-doughty
-dougie
-douglas
-douglass
-dougy
-dourley
-douville
-dov
-dovel
-dover
-dovydait
-dow
-dowd
-dowding
-dowdy
-dowell
-dower
-dowjones
-dowker
-dowling
-downer
-downes
-downey
-downing
-downs
-dowse
-dowser
-doy
-doyle
-doyon
-dpierre
-dpn
-dpnbuild
-dpnis
-dpnlab
-dpnq&a
-dpp
-dpu
-dr.jones
-dr.seuss
-drabek
-drachman
-draco
-dracula
-draffin
-dragan
-dragana
-dragert
-dragnea
-drago
-draier
-drakage
-drake
-drako
-drane
-dransfie
-draper
-drappel
-draves
-dray
-drayton
-dre
-dreddy
-dredi
-dreisbac
-drenan
-drennan
-drescher
-dresel
-dresser
-dressler
-drew
-drewes
-drexel
-dreyfus
-dreyfuss
-driedger
-drieka
-drinnan
-driscoll
-drissel
-driver
-drjones
-drobnik
-drolet
-dromgool
-drona
-drop-box
-dropin
-droste
-drouin
-drseuss
-dru
-drubld
-druci
-drucie
-drucill
-drucy
-drud
-drudy
-drugi
-drugs
-drumhell
-drumm
-drummer
-drummond
-drusi
-drusie
-drusilla
-drusy
-druzeta
-drwiega
-dryer
-dryfoos
-drynan
-du berge
-du-tuan
-duan
-duane
-dube
-dubeau
-dubee
-dubey
-dubman
-dubois
-dubose
-dubreck
-dubreuil
-dubroff
-dubroy
-dubuc
-duc
-duchaine
-ducharme
-duchesne
-ducic
-dud
-duda
-dudas
-dude
-dudgeon
-dudley
-dueck
-duenas
-duensing
-dueppen
-duer
-duff
-duffie
-duffin
-duffney
-dufford
-duffy
-dufloth
-dufour
-dufresne
-dugal
-dugald
-dugar
-dugas
-duggan
-duguay
-duisman
-duke
-dukes
-dukey
-dukie
-duky
-dula
-dulaney
-dulce
-dulcea
-dulci
-dulcia
-dulciana
-dulcie
-dulcine
-dulcinea
-dulcy
-dulin
-duljit
-dulmage
-dulsea
-dulude
-dumais
-dumas
-dummer
-dumont
-dumouche
-dumps
-dun
-dunajski
-dunbar
-dunc
-duncan
-duncan-s
-dundin
-dunfield
-dung
-dungan
-dunham
-dunik
-dunkelma
-dunker
-dunlap
-dunlay
-dunlop
-dunmore
-dunn
-dunne
-dunnett
-dunning
-dunningh
-dunnion
-dunphy
-dunsmore
-dunson
-dunstan
-duong
-dupaul
-duplacey
-duplan
-dupont
-dupras
-dupre
-dupree
-dupuis
-dupuis-m
-dupuy
-duquette
-dur
-durali
-duran
-durand
-durant
-durantay
-durante
-durham
-durie
-durling
-durnford
-durose
-durousse
-durovic
-durrell
-dursse
-durward
-duryonna
-dusan
-dusko
-dusomos
-duster
-dusty
-dutch
-dutcher
-duthie
-dutil
-dutt
-dutta
-duvarci
-duxbury
-duy
-duyck
-dvm
-dvs
-dwain
-dwaine
-dwayne
-dwight
-dwyer
-dyan
-dyana
-dyane
-dyann
-dyanna
-dyanne
-dyba
-dybenko
-dyck
-dyckman
-dyess
-dyke
-dylan
-dyment
-dyna
-dynah
-dynie
-dyrdahl
-dysart
-dyson
-dziamba
-dziawa
-dziemian
-dzioba
-dzulkarn
-dzung
-eachelle
-eada
-eades
-eadie
-eadith
-eadmund
-eagle
-eagles
-eakes
-eakins
-eal
-ealasaid
-eales
-eamon
-eamonn
-eansor
-earl
-earle
-earlene
-earles
-earley
-earlie
-earline
-early
-earnest
-earnhard
-earnie
-earps
-eartha
-earvin
-easaw
-eason
-easson
-easter
-easterli
-eastick
-eastland
-eastman
-easton
-eastreg
-eastus
-eastwood
-eaton
-eaves
-eb
-eba
-ebara
-ebata
-ebba
-ebbingha
-eben
-ebeneser
-ebenezer
-eberhard
-eberle
-eberlin
-ebert
-eberto
-ebonee
-ebony
-ebrahim
-eby
-echols
-eckardt
-ecker
-eckert
-eckhart
-eckler
-ecklund
-eckstein
-ecocafe
-econ
-ecroyd
-ed
-eda
-edan
-edd
-eddi
-eddie
-eddins
-eddisfor
-eddy
-ede
-edee
-edel
-edeline
-edelman
-eden
-eder
-edey
-edgar
-edgard
-edgardo
-edgette
-edgreen
-edi
-edie
-edif
-edik
-edin
-edison
-edistix
-edita
-edith
-editha
-edithe
-ediva
-edkins
-edlene
-edlin
-edmison
-edmon
-edmond
-edmonds
-edmondso
-edmonton
-edmund
-edmundo
-edmunds
-edmx
-edmxtest
-edna
-edouard
-edric
-edsel
-eduard
-eduardo
-educatio
-eduino
-edvard
-edward
-edwards
-edwige
-edwin
-edwina
-edwins
-edy
-edyta
-edyth
-edythe
-efdal
-effie
-efland
-efrain
-efrem
-efren
-efron
-efstrati
-efthim
-efthimio
-eftychio
-egan
-egashira
-egbert
-egdorf
-egerman
-eggebraa
-eggers
-eggersgl
-eggleton
-egional
-egli
-egne
-egner
-egon
-egor
-ehab
-ehi
-ehlers
-ehninger
-ehrenfri
-ehrenhol
-ehrlich
-ehrlichm
-eicher
-eide
-eierstoc
-eiji
-eike
-eiki
-eiko
-eileen
-eilis
-eimer
-eimile
-einarsso
-einersen
-einstein
-einwohne
-eirena
-eirik
-eisele
-eisen
-eisenach
-eisenber
-eisenhar
-eisler
-eisner
-eisnor
-eiswirth
-eitner
-ekaterin
-ekiert
-el
-el-am
-el-gueba
-el-hawar
-el-torky
-eladio
-elaina
-elaine
-elam
-elana
-elane
-elayne
-elbert
-elberta
-elbertin
-elbeze
-elbi
-elchakie
-elda
-elden
-eldin
-eldon
-eldoris
-eldredge
-eldreth
-eldridge
-eleanor
-eleanora
-eleanore
-elec
-electra
-electric
-electron
-eleen
-elefteri
-elefther
-elena
-elene
-eleni
-elenore
-eleonora
-eleonore
-elery
-eleta
-elex
-eley
-elfie
-elfreda
-elfredia
-elfrida
-elfrieda
-elga
-elgar
-elgie
-elgin
-elhage
-elhamahm
-elhamy
-eli
-elia
-elianora
-elianore
-elias
-elicia
-elie
-eliezer
-elihu
-elijah
-elin
-eline
-elinor
-elinore
-elio
-eliot
-elisa
-elisabet
-elise
-eliseo
-elisha
-elissa
-elita
-eliud
-eliza
-elizabet
-elizalde
-elka
-elkaim
-elke
-elkhayat
-elkind
-elkingto
-elkins
-elks
-ella
-ellacott
-elladine
-ellary
-elle
-elledge
-elleke
-ellement
-ellen
-ellene
-ellens
-eller
-ellerey
-ellerman
-ellery
-ellette
-elli
-ellie
-ellinger
-ellingto
-elliot
-elliott
-ellis
-ellison
-ellissa
-ello
-ellryne
-ellswert
-ellswort
-ellul
-ellwood
-elly
-ellyn
-ellynn
-elmar
-elmer
-elmira
-elmo
-elmore
-elms
-elna
-elnar
-elnora
-elnore
-eloisa
-eloise
-elonore
-elora
-elpida
-elroy
-els
-elsa
-elsbeth
-else
-elset
-elsey
-elsi
-elsie
-elsing
-elsinore
-elson
-elspeth
-elston
-elsworth
-elsy
-elting
-elton
-eluned
-elva
-elvera
-elvert
-elvin
-elvina
-elvira
-elvis
-elvyn
-elwin
-elwira
-elwood
-elwyn
-ely
-elyn
-elyse
-elysee
-elysha
-elysia
-elyssa
-elza
-elzbieta
-elzer
-em
-ema
-emad
-emalee
-emalia
-emami
-emanatia
-emanuel
-emanuele
-emdin-sp
-emelda
-emelen
-emelia
-emelina
-emeline
-emelita
-emelyne
-emer
-emera
-emerick
-emerson
-emery
-emesh
-emhart
-emig
-emil
-emilda
-emile
-emilee
-emili
-emilia
-emilie
-emilien
-emiline
-emilio
-emilios
-emily
-emlen
-emlyn
-emlynn
-emlynne
-emma
-emmalee
-emmaline
-emmalyn
-emmalynn
-emmanuel
-emmeline
-emmell
-emmerich
-emmersto
-emmert
-emmery
-emmet
-emmett
-emmey
-emmi
-emmie
-emmit
-emmons
-emmott
-emmy
-emmye
-emogene
-emond
-emory
-emowilli
-emp
-empdb
-employee
-emr
-emran
-emrick
-emro
-emyle
-emylee
-emysta
-encomend
-endang
-ende
-endenbur
-enderle
-enders
-enderton
-endicott
-endless
-endot
-endrys
-endsley
-enet
-eng
-eng-sion
-engbert
-engel
-engelber
-engelbre
-engelhar
-engin
-engineer
-england
-englande
-engle
-engleber
-englebri
-engleman
-englert
-english
-engman
-engr
-engracia
-engsiong
-engtv
-enid
-enis
-ennis
-enno
-enns
-enoch
-enos
-enrica
-enrichet
-enrico
-enrika
-enrique
-enriquet
-ensign
-ensing
-ensminge
-ensor
-enstone
-entwistl
-enver
-environm
-envoy
-enzo
-eoin
-eolanda
-eolande
-eow
-eperjesy
-ephraim
-ephrayim
-ephrem
-eppensti
-epperson
-eppich
-epplett
-epps
-eprom
-epstein
-epting
-eran
-erasmus
-erastus
-erbach
-erbilgin
-erda
-erdem
-erdinc
-erek
-erena
-erfani
-ergle
-erguven
-erh-huan
-erhard
-erhart
-erhhuan
-eric
-erica
-erich
-ericha
-erichsen
-erick
-ericka
-erickson
-erics
-ericsson
-erie
-erik
-erika
-eriks
-eriksson
-erin
-erina
-erine
-erinn
-erinna
-erkan
-erkel
-erl
-erland
-erle
-erlene
-erler
-erling
-erma
-ermanno
-ermarkar
-ermengar
-ermentru
-ermey
-ermin
-ermina
-erminia
-erminie
-ermo
-erna
-ernaline
-ernest
-ernesta
-ernestin
-ernesto
-ernestus
-ernie
-erning
-ernst
-erny
-eroler
-eros
-errchend
-errick
-errol
-erroll
-ersch
-ersil
-erskine
-ertan
-ertha
-ertl
-erv
-ervi
-ervin
-erwei
-erwin
-erwing
-eryn
-erzsebet
-es
-esam
-esc
-esch
-eschen
-escher
-escherma
-escobedo
-escobido
-escutin
-esdras
-esgate
-esguerra
-eshelman
-eshghi
-esi
-esite
-eskew
-eskiciog
-eskildse
-esko
-eslambol
-esler
-esliger
-esma
-esmail
-esmaili
-esmaria
-esme
-esmerald
-esmond
-esparza
-espenson
-espinosa
-espinoza
-esposito
-espuna
-esra
-esry
-essa
-essam
-esselbac
-esser
-essery
-essie
-essig
-esson
-essy
-esta
-estabroo
-este
-esteban
-estegham
-estel
-estele
-estell
-estella
-estelle
-estep
-ester
-estes
-estevam
-estevan
-estey
-esther
-estrella
-estrelli
-estridge
-eswara
-etan
-etas
-etchieso
-etemad
-eteminan
-ethan
-ethe
-ethel
-ethelber
-ethelda
-ethelin
-ethelind
-etheline
-ethelred
-ethelyn
-ethier
-ethingto
-ethnolog
-ethyl
-etienne
-etoh
-etta
-etten
-etti
-ettie
-ettore
-ettridge
-ettson
-etty
-etu
-etzell
-eu
-eubanks
-euclid
-eudora
-euell
-eugen
-eugene
-eugenia
-eugenie
-eugenio
-eugenius
-eugine
-eula
-eulalie
-euler
-eunchae
-eung
-euni
-eunice
-eunji
-euphemia
-eustace
-eustacia
-eustis
-euy-soo
-euysoo
-euysung
-ev
-eva
-evaleen
-evalyn
-evan
-evandro
-evangeli
-evangelo
-evania
-evanne
-evans
-evanston
-eve
-eveleen
-eveleigh
-evelien
-evelin
-evelina
-eveline
-evely
-evelyn
-evelyne
-even
-evenson
-events
-everard
-evered
-everett
-everette
-everitt
-evers
-evert
-evette
-evey
-evia
-evie
-evin
-evita
-evon
-evona
-evonne
-evraire
-evren
-evvie
-evvy
-evy
-evyn
-ewald
-ewan
-ewanchyn
-eward
-ewart
-ewasyshy
-ewell
-ewen
-ewing
-exner
-ext
-eyde
-eydie
-eyers
-eyk
-ezechiel
-ezekiel
-ezella
-ezequiel
-eziechie
-ezmerald
-ezra
-ezri
-ezzat
-fab
-fabe
-fabella
-faber
-fabian
-fabiano
-fabien
-fabienne
-fabijani
-fabio
-fabris
-fabrizio
-fabry
-facchett
-facility
-fadel
-fadhel
-fadi
-fadj
-fadlalla
-fady
-fadzilah
-fae
-faez
-fafa
-fafara
-fagan
-fagg
-fagin
-fahey
-fahim
-fahrenth
-fahy
-fai
-faina
-fainaru
-fainecos
-faiq
-fair
-fairclou
-fairfax
-fairfiel
-fairleig
-fairless
-fairlie
-fairman
-fairy
-faisal
-faison
-fait
-faith
-faiz
-faizal
-fajardo
-falaki
-falardea
-falbee
-falcao
-falconer
-faletti
-faley
-falicov
-falito
-falke
-falkenst
-falkner
-fallah
-fallahi
-falletti
-fallis
-fallon
-fallows
-falquero
-falt
-faltens
-fambroug
-familiad
-famke
-fan
-fanchett
-fanchi
-fanchon
-fancie
-fancy
-fanechka
-fang
-fangio
-fani
-fania
-fann
-fanner
-fanni
-fannie
-fanny
-fansher
-fantauzz
-fanthome
-fanty
-fanus
-fanya
-faou
-far
-fara
-faraday
-farag
-farago
-farah
-farahvas
-faramarz
-farand
-farant
-fares
-fargis
-fargo
-farhad
-farhan
-farhang
-farhat
-farias
-fariba
-fariborz
-farica
-farid
-faris
-farlay
-farlee
-farleigh
-farley
-farlie
-farly
-farmer
-farn
-farnham
-farnjeng
-farnswor
-farnum
-farokh
-farooa
-farooq
-farouk
-farquhar
-farr
-farra
-farrah
-farrand
-farranto
-farrel
-farrell
-farren
-farringt
-farris
-farrokh
-farronat
-farrow
-farrukh
-farshid
-faruk
-faruque
-farzad
-farzin
-fasken
-fast
-fastfeat
-fastmer
-fastone
-fastowl
-fastpack
-fataneh
-fater
-fatholla
-fatica
-fatima
-fattarus
-fattouh
-faubert
-faucette
-faucher
-faulhabe
-faulkner
-faun
-faunie
-faust
-faustina
-faustine
-fausto
-faustus
-favell
-favreau
-favrot
-fawaz
-fawcett
-fawn
-fawne
-fawnia
-fax
-fay
-fayanne
-faydra
-faye
-fayette
-fayez
-fayina
-fayma
-fayre
-fayth
-faythe
-faz
-fazel
-fearless
-featherm
-feddeman
-fedderse
-feder
-federica
-federico
-federiko
-fedora
-fedoruk
-fedyk
-fee
-feeley
-feeney
-fehr
-fei
-fei-wen
-fei-yin
-feil
-feild
-feisal
-feist
-feitel
-feith
-feiwen
-fekade
-fekri
-felczak
-feld
-feldberg
-felder
-feldman
-felecia
-felfli
-felic
-felicdad
-felice
-felicett
-felicia
-felicio
-felicity
-felicle
-felike
-feliks
-felipa
-felipe
-felisha
-felita
-felix
-feliza
-felizio
-felli
-fellman
-felske
-feltman
-felton
-femke
-fenati
-fender
-fenelia
-fenez
-feng
-fenlason
-fenn
-fennell
-fenner
-fennesse
-fenton
-fenwick
-feodor
-feodora
-fequiere
-ferba
-ferd
-ferdie
-ferdinan
-ferdy
-feregyha
-fereidoo
-ferelith
-ferenc
-ference
-ferenz
-fererro
-fergus
-ferguson
-fergusso
-feridoun
-ferland
-fermat
-fermi
-fermoyle
-fern
-fernald
-fernan
-fernand
-fernanda
-fernande
-fernandi
-fernando
-ferne
-ferner
-ferrao
-ferrara
-ferraro
-ferree
-ferreira
-ferrel
-ferrell
-ferrer
-ferrero
-ferriera
-ferrin
-ferris
-ferriss
-ferro
-ferruzzi
-ferstl
-fetterma
-fetting
-fetzko
-feutlins
-fevre-re
-fey
-feyen
-feynman
-fi-john
-fiann
-fianna
-fiaz
-ficco
-ficici
-ficken
-ficker
-fickes
-fidel
-fidela
-fidelia
-fidelio
-fidelity
-fidole
-fiegel
-fieke
-field
-fielden
-fielding
-fields
-fieldsup
-fierthal
-fiest
-fifi
-fifield
-fifine
-figura
-fijohn
-fikis
-fikre
-fil
-filbert
-filberte
-filberto
-fildey
-filer
-files
-files ar
-filia
-filibert
-filide
-filion
-filip
-filippa
-filippi
-filippo
-filis
-filkins
-fillmore
-filmer
-filmore
-filpus
-filson
-fima
-fin
-fina
-finak
-finance
-finane
-finckler
-findlay
-findley
-finkhels
-finlay
-finlayso
-finley
-finn
-finnegan
-finnerty
-finney
-finnie
-finnigha
-finnon
-fintan
-finucane
-finzel
-fiona
-fionan
-fionna
-fionnula
-fiore
-fiorenze
-fiorile
-firas
-firat
-firdaus
-firerobi
-firment
-firtos
-fischer
-fischett
-fischler
-fiset
-fisette
-fishenco
-fisher
-fishkin
-fishman
-fisico
-fisopn
-fisprod
-fiszman
-fitch
-fiteny
-fitness
-fitz
-fitzgera
-fitzgibb
-fitzpatr
-fitzroy
-fitzsimm
-fixsen
-flach
-flagg
-flaherty
-flanagan
-flanders
-flann
-flanner
-flansbur
-flatley
-fleet
-fleig
-fleische
-fleishma
-flem
-fleming
-flemming
-fleskes
-fletch
-fletcher
-fleuchau
-fleugel
-fleur
-fleurett
-fleurima
-fleury
-flewelli
-flexo
-flicking
-flin
-flindall
-flinn
-flint
-flintall
-flo
-floch
-flook
-flookes
-flor
-flora
-florance
-florante
-flore
-florella
-florence
-florenci
-florenti
-florenza
-flores
-florescu
-florette
-florez
-flori
-floria
-florian
-florida
-florie
-florina
-florinda
-florine
-floris
-florjanc
-florri
-florrie
-florry
-flory
-flossi
-flossie
-flossy
-flounder
-flowers
-floyd
-floysvik
-flss
-fludgate
-flueckin
-fluet
-fluney
-flury
-fluty
-flying
-flynn
-foad
-fobert
-focht
-focsanea
-focus
-fodell
-foderaro
-foeppel
-foessl
-foest
-fogelson
-foght
-fogle
-fogleman
-fok
-folashad
-foldes
-foley
-follett
-follick
-follmer
-folwell
-fon
-fondacar
-fong
-fonnie
-fons
-fonsie
-fontaine
-fontana
-fontanil
-fontanin
-fony
-fonz
-fonzie
-foods
-foong
-foos
-forbes
-forbrich
-forbs
-ford
-forden
-fordham
-forecast
-foreman
-forese
-forest
-forester
-forgeron
-forghani
-forgues
-forland
-formagie
-forno
-forouhar
-forrest
-forreste
-forrette
-forslund
-forst
-forster
-forsythe
-fortes
-fortier
-fortman
-fortner
-foss
-foster
-fothergi
-fotini
-fouad
-foubert
-foucault
-fouchard
-fougere
-fouillar
-fouke
-fouletie
-foulkes
-four
-fouret
-fourier
-fourkas
-fournel
-fourney
-fournier
-fouts
-fowler
-fowler-h
-fowles
-fowlkes
-fowlston
-fox
-foxworth
-fpsched
-fqa
-fraanky
-fradette
-fragnito
-fraley
-fralick
-fralix
-frampton
-fran
-franc
-france
-francene
-frances
-francesc
-francese
-franchot
-francic
-francine
-francis
-francisc
-francisk
-francisp
-franckli
-franckly
-francky
-franco
-francoeu
-francois
-francyne
-frangoul
-franics
-frank
-franka
-frankcom
-frankenb
-franki
-frankie
-frankle
-franklin
-franklyn
-frankos
-franks
-franky
-franni
-frannie
-franny
-frans
-fransis
-fransisc
-frantise
-frants
-frantz
-franz
-franza
-franze
-franzen
-franzky
-franzwa
-frape
-frasco
-fraser
-frasier
-frasquit
-fraties
-frayda
-fraze
-frazer
-frazier
-fred
-freda
-freddi
-freddie
-freddy
-fredek
-fredelia
-fredenbu
-frederic
-frederig
-frederik
-frederiq
-fredette
-fredi
-fredia
-fredimos
-fredine
-fredra
-fredric
-fredrick
-fredrika
-fredriks
-free
-freeburn
-freedman
-freek
-freeland
-freeley
-freeman
-freemand
-freemon
-freeth
-freiberg
-freida
-freimark
-freire
-freiwald
-freixe
-freksa
-fremont
-french
-frendo
-frenette
-freno
-fretz
-freud
-frey
-freya
-freyermu
-freyler
-frezzo
-fricker
-fricks
-fridel
-frie
-frieda
-friedber
-frieder
-friederi
-friedl
-friedlan
-friedman
-friedric
-frierson
-friesen
-frinel
-frink
-frisa
-frischkn
-frischli
-frisk
-friton
-fritz
-fritzie
-frizado
-frobel
-froberg
-frobishe
-frodsham
-froehlic
-froncek
-frondozo
-fronsee_
-fross
-frosst
-froud
-froukje
-frucci
-fruehauf
-frumerie
-fruscia
-fryar
-frydach
-frydman
-fryer
-fscocos
-fssup
-ftpsites
-fu
-fu-sheng
-fu-shin
-fu-zong
-fuchs
-fucito
-fugen
-fujii
-fujimaki
-fujimoto
-fujiwara
-fukui
-fukumoto
-fukunaga
-fulford
-fulk
-fulkerso
-fullager
-fuller
-fullmer
-fullum
-fulmer
-fulton
-fulvia
-fumerton
-fumio
-funamoto
-funderbu
-fung
-funston
-fuping
-fuqua
-furdoonj
-furgerso
-furlin
-furlow
-furmania
-furnas
-furrukh
-furst
-furuta
-fusca
-fusheng
-fuson
-fussell
-fuzal
-fuzong
-fwp
-fwpas
-fwpco
-fwpreg
-fwptools
-fyfe
-fysh
-fyske
-gaal
-gabato
-gabbai
-gabbard
-gabbey
-gabbi
-gabbie
-gabby
-gabe
-gabey
-gabi
-gabie
-gaboury
-gabriel
-gabriela
-gabriele
-gabriell
-gabrila
-gaby
-gach
-gaconnie
-gadbois
-gadher
-gadouchi
-gadsby
-gadzinow
-gae
-gaebel
-gael
-gaelan
-gaertner
-gaetan
-gaetanin
-gaetano
-gaffney
-gafford
-gaftea
-gagan
-gage
-gagne
-gagnier
-gagnon
-gahan
-gahir
-gahlot
-gahn
-gahr
-gahunia
-gaiarsa
-gaiger
-gail
-gaile
-gailya
-gaime
-gainer
-gaines
-gaiotti
-gaiser
-gaitan
-gaither
-gajendra
-gajewski
-gajowiak
-gal
-galanaki
-galasso
-galbrait
-galdwin
-gale
-gale
-galen
-galewski
-galina
-galipeau
-gallaghe
-gallais
-gallard
-gallegos
-gallenbe
-galligan
-gallinge
-gallion
-gallman
-gallo
-gallops
-gallouzi
-galloway
-galluzzi
-galois
-galt
-galvan
-galven
-galvez
-galvin
-gama
-gamal
-gamaleld
-gamaliel
-gamarnik
-gambrell
-gamelin
-gammage
-gamsa
-gan
-ganadry
-ganapath
-gandhi
-gane
-ganesan
-ganesh
-ganeshku
-gangnes
-gangotra
-ganguly
-gani
-gann
-ganness
-gannett
-gannie
-gannon
-gannot
-ganny
-gans
-gant
-gantt
-gapp
-gar
-gara
-garald
-garamvol
-garan
-garand
-garay
-garbis
-garbish
-garcia
-garcia-l
-garcia-m
-gard
-gardener
-gardie
-gardiner
-gardner
-gardy
-gare
-garee
-gareis
-garek
-gareth
-garey
-garfield
-garg
-garguilo
-gargul
-gargulak
-garik
-garinger
-garito
-garland
-garmon
-garneau
-garner
-garnet
-garnett
-garnette
-garney
-garo
-garold
-garp
-garrard
-garrek
-garret
-garreth
-garrett
-garrick
-garrik
-garrot
-garrott
-garry
-garth
-gartley
-gartshor
-garv
-garvey
-garvin
-garvy
-garwin
-garwood
-gary
-gascho
-gascon
-gasikows
-gaskins
-gaspar
-gaspard
-gasparo
-gasparot
-gasper
-gass
-gast
-gaston
-gasul
-gateau
-gateley
-gater
-gates
-gateway
-gatka
-gattrell
-gau-rong
-gaube
-gaudet
-gaudet-m
-gaudon
-gaudreau
-gaughan
-gaul
-gaulle
-gault
-gaultier
-gaunsezl
-gaurong
-gause
-gauss
-gautam
-gauthier
-gav
-gavan
-gaven
-gavens
-gavidia
-gavilluc
-gavin
-gavra
-gavriel
-gavriell
-gawain
-gawargy
-gawdan
-gawen
-gawronsk
-gawtrey
-gay
-gaye
-gayel
-gayelord
-gayl
-gayla
-gayle
-gayleen
-gaylene
-gayler
-gaylor
-gaylord
-gayman
-gaynor
-gayronza
-gazala
-gazier
-gazo
-gdowik
-ge
-geadah
-gean
-gearalt
-gearard
-geary
-gebhardt
-gebhart
-gebrael
-gedas
-geddes
-gedeon
-gedman
-gedra
-gedye
-gee
-gee-meng
-geer
-geert
-geesman
-geeta
-geetha
-geety
-gehm
-gehr
-gehring
-geiger
-geir
-geisler
-geksong
-gelais
-geldrez
-gelinas
-gell
-geller
-gelling
-gelo
-gelya
-gemmill
-gen
-gena
-genae
-gendre
-gendron
-gene
-geneau
-general
-generalc
-generato
-genet
-geneva
-geneviev
-genevra
-genga
-genge
-genia
-genie
-genna
-gennaro
-genni
-gennie
-gennifer
-genny
-geno
-genova
-genovera
-genovise
-genowefa
-gentes
-gentzler
-genvieve
-geoff
-geoffrey
-geoffrio
-geoffry
-georas
-geordie
-georg
-georgann
-george
-georgean
-georgena
-georges
-georgesc
-georgeta
-georgett
-georghio
-georgi
-georgia
-georgian
-georgie
-georgina
-georgine
-georgio
-georgiou
-georgy
-ger
-gera
-gerald
-geralda
-geraldin
-geralene
-gerard
-gerardja
-gerardo
-gerassim
-gerbec
-gerben
-gerber
-gerda
-gerek
-gerenser
-gergen
-gerhard
-gerhardi
-gerhardt
-gerhart
-geri
-gerianna
-gerianne
-gerick
-gerik
-gerladin
-gerlich
-gerlinsk
-gerlt
-germ
-germain
-germaine
-germana
-germano
-germayne
-germe
-gernot
-gerome
-gerrard
-gerri
-gerrie
-gerrilee
-gerrit
-gerritse
-gerry
-gershwin
-gerstmar
-gert
-gerta
-gerth
-gerti
-gertie
-gertridg
-gertrud
-gertruda
-gertrude
-gertrudi
-gerty
-gervais
-gervaise
-gery
-gerynowi
-gesine
-gesino
-gessford
-getchell
-getoor
-gettys
-geuder
-gewell
-geyer
-geza
-ghadisha
-ghaemi
-ghaemian
-ghaffari
-ghandi
-ghanem
-ghangurd
-ghani
-ghantous
-ghartey
-ghasemia
-ghassan
-ghassem
-ghatta
-ghazi
-gheciu
-ghelardu
-gheorghe
-gherardo
-ghidali
-ghislain
-ghobad
-gholamre
-ghorashy
-ghosh
-ghossein
-ghulam
-ghulati
-gia
-giacinta
-giacobo
-giacomo
-giacopo
-giallo
-giamatte
-giambatt
-giambera
-giampaol
-gian
-giana
-giandome
-giang
-giani
-gianina
-gianna
-gianni
-giao
-giap
-giarritt
-giavani
-gib
-gibb
-gibbie
-gibbins
-gibbons
-gibbs
-gibby
-gibeault
-giblin
-gibson
-gidaro
-gideon
-gidget
-gie-ming
-giekes
-gieming
-gierka
-giertych
-giesbrec
-gieschen
-giese
-giff
-giffard
-giffer
-giffie
-gifford
-giffy
-giggey
-gigi
-giguere
-gigus
-gihan
-gihyun
-gil
-gilbert
-gilberta
-gilberte
-gilberti
-gilberto
-gilberts
-gilburt
-gilchris
-gilda
-gilemett
-giles
-giliham
-gill
-gillan
-gillard
-gille
-gillelan
-gilles
-gillespi
-gillespy
-gillet
-gillette
-gilli
-gilliam
-gillian
-gilliard
-gillie
-gillies
-gillig
-gilligan
-gillilan
-gillis
-gillon
-gillot
-gillstro
-gilly
-gilmore
-gilmour
-gilstorf
-gimon
-gin
-gina
-ginelle
-ginest
-ginette
-ginetto
-ginevra
-ginger
-gingeric
-gingold
-gingras
-gingrich
-gini
-ginn
-ginni
-ginnie
-ginnifer
-ginny
-gino
-ginsberg
-gint
-gintaras
-ginzburg
-gio
-gioffre
-gionet
-giordano
-giorgi
-giorgia
-giorgio
-giorgos
-giotis
-giovanna
-giovanni
-giovinaz
-gipsy
-giralda
-giraldo
-girard
-giraud
-girgis
-giri
-giridhar
-girish
-girotti
-girouard
-giroux
-girvan
-gisbert
-gisela
-giselber
-gisele
-gisella
-giselle
-gita
-gittins
-giuditta
-giuhat
-giulia
-giuliani
-giuliett
-giulio
-giuntini
-giuseppe
-giustina
-giustino
-giusto
-gize
-gizela
-glad
-gladi
-gladstei
-gladys
-glancey
-glanfiel
-glaros
-glasa
-glaser
-glasgow
-glass
-glasser
-glast
-glaszcza
-glazer
-gleason
-gleda
-gleditsc
-glembosk
-glen
-glenda
-glenden
-glendon
-glenine
-glenn
-glenna
-glennie
-glennis
-glew
-glickman
-glidewel
-glinka
-glinski
-glofches
-glori
-gloria
-gloriana
-gloriane
-glornia
-glory
-glover
-glowa
-glucksma
-glymph
-glyn
-glynda
-glynis
-glynn
-glynnis
-gnaeding
-gnni
-go
-goangshi
-goatcher
-goba
-gobeil
-gobeli
-goble
-gockel
-godard
-godart
-godcharl
-goddard
-goddart
-godden
-goddette
-godfree
-godfrey
-godfry
-godin
-godina
-godish
-godiva
-godley
-godlingt
-godo
-godowsky
-godse
-godsoe
-godwin
-goei
-goel
-goell
-goeltzen
-goerss
-goertz
-goertzen
-goethe
-goetz
-goff
-gofron
-goggin
-goh
-goheen
-goin
-goins
-gokal
-gokul
-gokul-ch
-golari
-golas
-golaszew
-golczews
-golda
-goldarin
-goldberg
-goldenbe
-goldenso
-golder
-goldfiel
-goldi
-goldia
-goldie
-goldina
-goldman
-goldmann
-goldner
-goldschm
-goldstei
-goldthor
-goldwyn
-goldy
-golia
-goliss
-golka
-goller
-gollu
-golshan
-gombos
-gomes
-gomez
-gomm
-gong-lia
-gonglian
-goniotak
-gonsalve
-gonzaga
-gonzales
-gonzalez
-gonzalo
-goober
-gooch
-goodbar
-goode
-gooderha
-goodfell
-goodier
-goodinso
-goodman
-goodner
-goodridg
-goodrow
-goodson
-goodwin
-goofy
-goold
-gooley
-goos
-gopal
-gopaul
-gope
-gopisett
-goran
-gorasia
-goraud
-gorberg
-gord
-gordan
-gorde
-gorden
-gordie
-gording
-gordon
-gordy
-gorenflo
-gores
-gorfine
-gorham
-gorhum
-goricane
-goridkov
-goring
-gorius
-gorlick
-gorman
-gorsky
-gorton
-gorzocos
-goska
-goss
-gosselin
-gosset
-gostania
-goswick
-goszczyn
-gotch
-gotchall
-goth
-gothard
-gothart
-gottfrie
-gottlieb
-gottscha
-gottstei
-gou-don
-goudon
-goudreau
-gougeon
-gough
-gouhara
-goukon
-gould
-gouldson
-goulet
-goulette
-goulfine
-goupil
-gourley
-goutam
-govind
-govindan
-govindar
-govindas
-gow-jen
-gowan
-gowda
-gowens
-gower
-gowin
-gowjen
-gowl
-gowland
-goyal
-goyer
-goyette
-goza
-gozani
-gozen
-grabner
-grabowsk
-grace
-gracen
-gracey
-gracia
-gracie
-graciela
-gracinda
-gracomda
-gradeigh
-grader
-gradey
-grading
-grads
-grady
-graehme
-graeme
-graessle
-graff
-grafton
-graham
-graibe
-graig
-grainger
-gram
-graman
-grame
-gramiak
-gran
-granado
-granata
-grandboi
-grande
-grandmas
-grandump
-grandy
-granfiel
-grange
-granger
-granic
-granner
-grannie
-granny
-grant
-grantham
-granthem
-grantley
-granvill
-graphics
-grasman
-grason
-grassman
-grata
-gratia
-gratiana
-gratton
-grau
-grauer
-grausso
-gravelle
-gravely
-graver
-graves
-gravitt
-gravitte
-grawberg
-gray
-graybill
-grayce
-graydon
-grayson
-grazia
-graziano
-grazzini
-greaney
-greatest
-greaver
-greaves
-grebil
-grebner
-greco
-greeley
-greenber
-greene
-greenfie
-greenlee
-greenstr
-greenway
-greer
-greet
-greg
-gregaric
-greger
-gregg
-gregge
-greggory
-grego
-gregoire
-gregoor
-gregor
-gregor-p
-gregorio
-gregoriu
-gregorsk
-gregory
-grelck
-grenier
-grenon
-grenvill
-greszczu
-gret
-greta
-gretal
-gretchen
-grete
-gretel
-grethel
-gretna
-gretta
-grevelin
-grevy
-grewal
-grey
-greytock
-gribbon
-gribbons
-grier
-griet
-grietje
-griff
-griffie
-griffin
-griffioe
-griffith
-griffy
-grigg
-griggs
-grignon
-grigsby
-grillmey
-grills
-grimble
-grimes
-grimm
-grimmell
-grimshaw
-grimsley
-griner
-grinham
-grinnell
-gris
-griselda
-grisoni
-grissel
-grissom
-griswold
-gritton
-grixti
-griz
-groce
-grochau
-grodecki
-groetsem
-groff
-grogan
-grohovsk
-groleau
-grona
-grondin
-gronwall
-grooms
-grootenb
-gros
-grosh
-grosjean
-grosman
-grosse
-grossman
-grossutt
-groth
-groulx
-grove
-grover
-groves
-grovesti
-growden
-growler
-gruau
-grubbs
-gruber
-grueneic
-grueng
-gruenhag
-grund
-gruska
-gruszczy
-gryder
-grzegore
-grzegorz
-grzesik
-gsite
-gu
-guajardo
-gualteri
-guan
-guanglia
-guangyou
-guanyun
-guarez
-guarino
-guarnera
-guatto
-guay
-gubbins
-gubenco
-gucer
-guciz
-gudgeon
-gudrun
-guendole
-guenette
-guenever
-guenna
-guenther
-guercion
-guerette
-guerin
-guerrero
-guerrier
-guertin
-guests
-guevara
-guglielm
-gui
-guido
-guignon
-guilbaul
-guilbert
-guilford
-guilfoyl
-guillaum
-guillema
-guilleme
-guillerm
-guillet
-guillory
-guilmett
-guimond
-guin
-guindi
-guindon
-guinever
-guinn
-guinna
-guinnane
-guiqing
-guirguis
-guisler
-guitard
-guitaris
-gulbrand
-gulick
-gulis
-gulko
-gullekso
-gultekin
-gulvin
-gumb
-gumbley
-gummadi
-gumperz
-gun
-gunadhi
-gunar
-gunars
-gunaseke
-gunawan
-gundecha
-gunderse
-gunderso
-gundes
-gundlach
-gundry
-guner
-gunfer
-gung
-gungor
-gunilla
-gunkel
-gunn
-gunnar
-gunnells
-gunner
-gunshor
-guntar
-guntekin
-gunter
-gunther
-guntvedt
-guo
-guo-jie
-guo-qian
-guoben
-guochun
-guojie
-guoming
-gupta
-gupton
-gur-arie
-gurash
-gurchara
-gurdip
-gure
-gurer
-gurevitc
-gurgenci
-gurica
-gurjinde
-gurjit
-gurley
-gurmeet
-gurnam
-gurney
-gursahan
-gurshara
-gursin
-gurvinde
-gus
-gusella
-guss
-gussi
-gussie
-gussy
-gusta
-gustaf
-gustafso
-gustafss
-gustav
-gustave
-gustavo
-gustavus
-gusti
-gustie
-gustlin
-gusty
-gutcher
-gutermut
-guth
-guthrey
-guthrie
-guthro
-guthry
-gutierre
-guttman
-guty
-gutzmann
-guy
-guy-arbo
-guylain
-guylaine
-guyot
-guzman
-gwen
-gwenda
-gwendole
-gwendoli
-gwendoly
-gweneth
-gwenette
-gwenneth
-gwenni
-gwennie
-gwenny
-gwennyth
-gwenora
-gwenore
-gwo-chun
-gwo-hsin
-gwochung
-gwohsing
-gwyn
-gwyneth
-gwynith
-gwynne
-gyenes
-gyeongbe
-gyger
-gylys
-gyoung
-gypsy
-gysel
-gyula
-gyurcsak
-gyurcsik
-gzl
-ha
-haack
-haaksman
-haas
-habeeb
-habel
-habelrih
-haber
-haberman
-habert
-habib
-hachador
-hache
-hachelle
-hachey
-hack-hoo
-hacker
-hackett
-hacking
-had
-hadaway
-haddad
-hadden
-haddow
-hadel
-hadi
-hadiraha
-hadlee
-hadleigh
-hadley
-hadria
-hadrian
-hady
-hadziome
-hae-won
-haerle
-haertel
-haether
-haewon
-hafedh
-hafeezah
-hafermal
-hafiz
-hafleigh
-hagan
-hagar
-hage
-hagen
-hagenbuc
-hager
-hagerty
-hagewood
-haggar
-haggart
-haggarty
-haggerty
-hagglund
-haghighi
-hagley
-hagstrom
-hagwood
-hahn
-hai
-hai-ning
-hai-ping
-hai-shun
-haibo
-haifang
-haig
-haigh
-hailee
-hailes
-hailey
-haily
-haim
-haimson
-hainer
-haines
-haining
-hainline
-haiping
-haire
-hairil
-haishung
-hak-lay
-hakala
-hakan
-hakansso
-hakeem
-hakim
-haklay
-hal
-hala
-halbedel
-halbert
-hale
-haleigh
-halejak
-halet
-halette
-haley
-half
-halford
-hali
-halicki
-halie
-halimeda
-halina
-hall
-hallamas
-hallenbe
-haller
-hallett
-halley
-halli
-hallie
-halligan
-halliwil
-hallman
-hallsy
-hally
-halovani
-halpenny
-halpern
-halpin
-halsey
-halstead
-halsy
-haluk
-halula
-ham
-hamachi
-hamavand
-hambali
-hambone
-hamdy
-hameed
-hamel
-hamelin
-hamid
-hamidi
-hamil
-hamilton
-hamish
-hamlen
-hamlett
-hamlin
-hamliton
-hammad
-hammel
-hammerli
-hammerme
-hammond
-hammonds
-hamner
-hamnet
-hamori
-hamoui
-hampel
-hampshir
-hampson
-hampton
-hamra
-hamsa
-hamzeh
-han
-han-chie
-han-co
-han-fei
-han-tak
-han-van
-hana
-hanan
-hanchieh
-hanco
-hancock
-handel
-handfort
-handley
-handoko
-handschy
-hane
-hanel
-haney
-hanfei
-hanford
-hang-ton
-hangbok
-hanger
-hangup
-hanh
-hanham
-hanhb
-hanhua
-hani
-haningto
-hanja
-hank
-hankins
-hanlan
-hanley
-hann
-hanna
-hannah
-hanneke
-hanneman
-hanni
-hannibal
-hannible
-hannie
-hannis
-hanns
-hannula
-hanny
-hanrahan
-hans
-hans-pet
-hansen
-hanser
-hansiain
-hanson
-hanspete
-hansquin
-hansraj
-hansson
-hantak
-hanzel
-hanzlice
-hao
-hao-nhie
-hao-yung
-haonhien
-haoyung
-happy
-harabedi
-harada
-haralamb
-harald
-harapiak
-harbert
-harbord
-harbottl
-harbour
-harcourt
-hardage
-hardcast
-hardee
-harderse
-hardi
-hardiman
-hardin
-harding
-hardison
-hardman
-hardwick
-hardy
-hardyal
-hardyck
-hardyman
-haren
-hareton
-hargadon
-hargreav
-hargrove
-hargrow
-hari
-harianto
-harihara
-hariman
-harinder
-harish
-harishan
-harker
-harkness
-harlan
-harland
-harlen
-harlene
-harles
-harless
-harley
-harli
-harlie
-harlin
-harm
-harman
-harmeet
-harmi
-harmon
-harmonia
-harmonie
-harmony
-harms
-harn
-harold
-haroon
-harootun
-haroun
-haroutou
-harp
-harpal
-harpe
-harper
-harpreet
-harrawoo
-harrell
-harri
-harrie
-harriet
-harriett
-harringt
-harriot
-harriott
-harris
-harrison
-harrod
-harron
-harry
-harsch
-harshad
-harsham
-harshava
-harshfie
-hart
-harte
-hartell
-harter
-hartford
-hartgrov
-hartin
-hartkopf
-hartland
-hartleb
-hartley
-hartling
-hartman
-hartmann
-hartmut
-hartney
-hartsell
-hartwell
-harty
-hartzel
-haruko
-harv
-harvard
-harvey
-harville
-harvison
-harwell
-harwerth
-harwilll
-harwood
-hasan
-hasbrouc
-hasegawa
-hasen
-hasham
-hasheem
-hashem
-hashemi
-hashim
-hashimot
-haskel
-haskell
-haskins
-haslach
-hasler
-haslett
-hasmukhb
-hasnain
-hassan
-hassenkl
-hassey
-hassnzah
-hassold
-haste
-hasted
-hastic
-hastie
-hastings
-hasty
-hata
-hatcher
-hatchett
-hately
-hatfield
-hathaway
-hatridge
-hattar
-hatten
-hatti
-hattie
-hattingh
-hatty
-hatz
-hatzenbi
-hau
-haubert
-hauck
-hauersto
-haufe
-hauge
-haughey
-haughwou
-haugrud
-haupt
-haurie
-hause
-hauser
-hautanen
-havelock
-haveman
-haven
-haverkam
-haverty
-havis
-hawes
-hawi
-hawk
-hawken
-hawker
-hawkes
-hawkin
-hawkins
-hawley
-hawryluk
-hawrysh
-hawryszk
-hawthorn
-hayden
-haydock
-haydon
-haydt
-hayes
-hayley
-haylock
-hayman
-haynes
-haynor
-hayward
-haywood
-hayyim
-haze
-hazel
-hazeldin
-hazell
-hazelrig
-hazelton
-hazem
-hazen
-hazenboo
-hazlett
-hdbright
-hdi
-he
-heald
-healey
-heall
-health-s
-healy
-heaney
-hearn
-hearnden
-hearst
-heath
-heather
-heaton
-hebbar
-hebe
-hebert
-heckbert
-heckman
-hector
-heda
-hedda
-heddell
-heddi
-heddie
-heddy
-hedi
-hedin
-hedke
-hedman
-hedrich
-hedrick
-hedvig
-hedvige
-hedwig
-hedwiga
-hedy
-hee
-heeralal
-heeten
-hefferna
-heffner
-hegarty
-hegelian
-hehn-sch
-heida
-heide
-heidebre
-heidepri
-heidi
-heidie
-heighton
-heike
-heikkila
-heile
-heilig
-heiliger
-heilsnis
-hein
-heindric
-heinen
-heinjus
-heinke
-heino
-heinonen
-heinrich
-heinrick
-heinrik
-heinz
-heinzing
-heinzman
-heisler
-heitmann
-hekel
-heki
-helaina
-helaine
-heldenbr
-heleen
-helem
-helen
-helen-el
-helena
-helene
-heleneli
-helenka
-helfrick
-helga
-helge
-helgelan
-helio
-helkaa
-hella
-hellberg
-hellen
-heller
-hellerst
-helli
-hellmut
-helluva
-hellyer
-helma
-helms
-helmut
-helmuth
-helmy
-heloise
-helpb
-helpline
-helsa
-helseth
-helstab
-helton
-helwege
-helyn
-hemant
-hembrick
-hemens-d
-hemme
-hemmerle
-hemphill
-hempinst
-hempstea
-henao
-hench
-henderso
-hendra
-hendren
-hendrick
-hendrik
-hendrika
-hendriks
-hendry
-hendryck
-hendy
-henein
-heng
-hengameh
-hengda
-hengevel
-hengl
-hengst
-henk
-henk smi
-henka
-henley
-henline
-henneber
-hennebur
-hennelly
-hennessy
-hennie
-henninge
-hennon
-hennriet
-henny
-henri
-henrie
-henrieta
-henriett
-henrik
-henrika
-henrikse
-henry
-henryett
-hensen
-henshaw
-hensley
-henson
-henstock
-henthorn
-hepburn
-hephziba
-heping
-heppell
-heppes
-hera
-herak
-herb
-herbel
-herberge
-herbers
-herbert
-herbie
-herby
-herc
-hercule
-hercules
-herculie
-here's t
-heredia
-heribert
-hering
-herlihy
-herling
-herm
-hermack
-herman
-hermann
-hermann-
-hermanns
-hermes
-hermia
-hermie
-hermien
-hermina
-hermine
-herminia
-hermione
-hermon
-hermy
-hernan
-hernande
-hernando
-herndon
-hernek
-herner
-herng-je
-herngjen
-hernon
-hernzlia
-herod
-herold
-heroux
-herr
-herrage
-herralio
-herre
-herren
-herrera
-herrick
-herring
-herringt
-herriott
-herrmann
-herron
-herronal
-herryjan
-hersch
-herschel
-herscovi
-hersee
-hersh
-hershber
-hershel
-herskovi
-herta
-hertha
-hertler
-hertzog
-herve
-hervey
-herzig
-hesche
-hesham
-hesk
-hesketh
-heslop
-hess
-hesse
-hester
-hesther
-hestia
-hetti
-hettie
-hetty
-hetzel
-heung
-heunis
-heurich
-hew
-hewage
-hewe
-hewer
-hewet
-hewett
-hewie
-hewitt
-hewlet
-hews
-heybroek
-heydon
-heyer
-heynen
-heys
-heystrae
-heyward
-heywood
-hi
-hiawatha
-hibberd
-hibler
-hichem
-hickerso
-hickey
-hickin
-hickman
-hickman-
-hickox
-hicks
-hidaka
-hideki
-hideo
-hiebsch
-hien
-hienz
-hieronym
-hiers
-higginbo
-higgins
-higham
-highet
-highsmit
-hight
-hightowe
-higuchi
-hijab
-hikita
-hil
-hilaire
-hilario
-hilarius
-hilary
-hilberma
-hilbert
-hilbig
-hilda
-hildagar
-hilde
-hildebra
-hildegaa
-hildegar
-hilder
-hildum
-hildy
-hilfinge
-hill
-hilla
-hillard
-hillary
-hillel
-hiller
-hillery
-hilliard
-hilliary
-hillidge
-hillie
-hillier
-hillring
-hills
-hillson
-hilly
-hillyer
-hilmi
-hils
-hilton
-hiltz
-hilwa
-himanshu
-himawan
-himraj
-hin-wai
-hincher
-hinchey
-hinchley
-hinda
-hindle
-hinds
-hindson
-hine
-hiner
-hines
-hing
-hing-fai
-hingtgen
-hink
-hinkel
-hinkins
-hinkle
-hinojosa
-hinsdale
-hinshaw
-hinson
-hinton
-hinton-s
-hinz
-hinze
-hipp
-hippert
-hipson
-hirakawa
-hiraki
-hiram
-hirayama
-hiren
-hirofumi
-hirohama
-hiroki
-hiroko
-hiromi
-hiromu
-hironaga
-hirooki
-hirose
-hiroshi
-hirotaka
-hiroto
-hirotosh
-hiroyuki
-hirsch
-hirshman
-hisaki
-hiscoe
-hiscott
-hisham
-hishchak
-hisko
-hislop
-hitchcoc
-hitching
-hite
-hitler
-hitoshi
-hiusser
-hively
-hixon
-hixson
-hjartars
-hjorth
-hlady
-hlausche
-hlinka
-hm
-hnidek
-ho
-ho-mu
-hoa
-hoa-van
-hoadley
-hoag
-hoagland
-hoang
-hoare
-hobard
-hobart
-hobbs
-hoben
-hobesh
-hobey
-hobgood
-hobie
-hobin
-hoch
-hochbaum
-hochberg
-hock
-hockaday
-hockster
-hoctor
-hocutt
-hodder
-hoddinot
-hodedo
-hodge
-hodgens
-hodges
-hodgins
-hodgkin
-hodgkiss
-hodgson
-hoebart
-hoeg
-hoehling
-hoehn
-hoek
-hoeksma
-hoekstra
-hoeler
-hoelsche
-hoequist
-hoes
-hoferek
-hoffelt
-hoffman
-hoffmann
-hoffmeis
-hoffpaui
-hoffsted
-hofmann
-hofmeist
-hofstede
-hofstett
-hogan
-hogeboom
-hogg
-hoggan
-hoggatt
-hogue
-hohmeyer
-hohn
-hoi-kin
-hojjat
-holberry
-holbrook
-holcomb
-holcombe
-holcroft
-hold of
-holdaway
-holden
-holder
-holdren
-holesing
-holinski
-hollack
-holland
-hollande
-hollands
-hollbach
-hollen
-hollenba
-hollenbe
-hollenst
-holleran
-holley
-holli
-holliday
-hollie
-hollings
-hollingt
-hollingw
-hollis
-holliste
-holloway
-hollran
-holly
-holly-an
-hollyann
-holm
-holman
-holmans
-holmer
-holmes
-holmquis
-holness
-holsclaw
-holst
-holt
-holterma
-holthaus
-holton
-holtz
-holtze
-holvey
-holy
-holz
-hom
-homa
-homan
-homayoon
-homayoun
-homer
-homere
-homerus
-homonick
-homu
-hon
-hon-kong
-hon-son
-honbarri
-honda
-honey
-honeycut
-hong
-hong-che
-hong-yuh
-hongchen
-hongtao
-hongyuh
-hongzhi
-honkakan
-honmun
-honor
-honoria
-honson
-honzo
-hoog
-hooi-lee
-hooker
-hooks
-hoon
-hooper
-hoorman
-hooshang
-hooton
-hoover
-hopcroft
-hope
-hopf
-hopkin
-hopkins
-hopkinso
-hopley
-hoppenwo
-hopper
-hopson
-hoptoad
-hoque
-hor
-hor-lam
-horace
-horacio
-horak
-horalek
-horatia
-horatio
-horatius
-horban
-hord
-hore
-horemans
-horgan
-horianop
-horkoff
-hormoz
-hornacek
-hornbeck
-hornbeek
-hornburg
-horne
-horng
-horngdar
-horning
-hornung
-horowitz
-horsfiel
-horst
-horstman
-hort
-horten
-hortense
-hortensi
-horton
-horus
-horvath
-horwitz
-horwood
-hosang
-hosanna
-hoscheid
-hoseok
-hoshi
-hosier
-hoskin
-hosking
-hoskins
-hosneld
-hossein
-hosseini
-hot
-hotline
-hotlist
-hotson
-hotta
-houde
-houdini
-houghton
-houk
-houle
-houn
-hounsell
-houssam
-houssein
-houston
-hoverman
-hovey
-hovinga
-how
-how-kee
-howald
-howard
-howarth
-howat
-howden
-howe
-howe-pat
-howekamp
-howell
-howerton
-howes
-howey
-howie
-howlett
-howley
-howorth
-howse
-hoxie
-hoy
-hoyer
-hoyt
-hpldt
-hpone
-hq
-hqs
-hr
-hrdata
-hrenyk
-hrinfo
-hrubik
-hruby
-hrushowy
-hruska
-hrvatin
-hsi
-hsi-ho
-hsiang
-hsiao
-hsiao-ch
-hsiao-we
-hsiao-yu
-hsiaochi
-hsiaosu
-hsiaowei
-hsiaoyun
-hsieh
-hsien
-hsiho
-hsin
-hsin-li
-hsin-shi
-hsing
-hsing-ju
-hsinli
-hsiung
-hsketh
-hspice
-hsu
-hsuan
-hsueh
-htd
-hu
-hua
-hua-yuan
-huai
-huan
-huan-yu
-huanbo
-huang
-huasheng
-huashi
-huay-yon
-huayuan
-huayyong
-hubal
-hubbard
-hubbell
-hube
-huber
-huberman
-hubers
-hubert
-huberto
-hubey
-hubie
-hubley
-huboi
-hudai
-hudak
-huddlest
-hudecek
-hudepohl
-hudgins
-hudson
-hudy
-hudyma
-huel-she
-huelshen
-huelsman
-hueneman
-huerta
-huestis
-huether
-huetu
-huey
-huey-kuo
-hueykuo
-hufana
-huffman
-hugel
-huggins
-hugh
-hughes
-hughes-c
-hughey
-hughie
-hughson
-hugibert
-hugo
-hugues
-huguette
-huguin
-huhn
-hui
-hui-chau
-hui-neng
-huib
-huichaun
-huifang
-huineng
-huiqi
-huitt
-huizhao
-hukam
-hulda
-hulen
-hulett
-huligang
-hulk
-hulme
-hulst
-hultgren
-hulversh
-hulze
-humbert
-humberto
-humboldt
-hume
-humenik
-humenuk
-humes
-humfrey
-humfrid
-humfried
-humiston
-hummel
-hummerst
-humphrey
-humphrie
-hundries
-huneault
-hunfredo
-hung
-hung-kan
-hung-win
-hungkai
-hungkang
-hungle
-hungquoc
-hungwing
-hunike
-hunnicut
-hunsberg
-hunsucke
-hunt
-hunter
-huntingt
-huntlee
-huntley
-huo-yen
-huong
-huor
-huot
-huoyen
-hupe
-huppert
-hurd
-huret
-hurf
-hurlee
-hurleigh
-hurley
-hurman
-hurst
-hurtado
-hurteau
-hurtubis
-hurwitz
-husain
-husam
-husarewy
-husein
-hussain
-hussam
-hussein
-husser
-hussey
-hussien
-hustin
-huston
-huszar
-huszarik
-hutchers
-hutchin
-hutching
-hutchins
-hutchiso
-hutson
-hutt
-hutter
-hutton
-huub
-huuliem
-huxley
-huy
-huyen
-huynh
-huyvan
-huzur
-hvezda
-hwa
-hwajin
-hwan
-hwang
-hwayong
-hwei-lin
-hy
-hyacinth
-hyatt
-hydar
-hyde
-hyen
-hyer
-hyerle
-hyers
-hyjek
-hylaride
-hyman
-hymie
-hynda
-hyndman
-hynek
-hyong-ju
-hyongjun
-hyonil
-hyoungju
-hyperspa
-hyrne
-hysler
-hyslop
-hyte
-hyun
-hyunchul
-hyung
-i-chao
-i-ching
-iacoviel
-iacovo
-iago
-iain
-ian
-ianace
-iannotti
-iannozzi
-iantaffi
-ianthe
-iaquinto
-iarocci
-ibach
-ibarra
-ibbie
-ibby
-ibntas
-ibrahim
-ibsen
-iburg
-ic
-iceman
-ichabod
-ichao
-iching
-ichiro
-ichizen
-icy
-icylyn
-id
-ida
-idalia
-idalina
-idaline
-ide
-idell
-idelle
-idette
-idris
-idt
-idus
-ie
-iem
-ientile
-iezzi
-if anyon
-ifact
-ifill
-iftekhar
-ifti
-igarashi
-iggie
-igglesde
-iggy
-ignace
-ignacio
-ignacius
-ignatius
-ignaz
-ignazio
-igor
-iguchi
-igusa
-ihnat
-ihor
-ijaz
-ijff
-ike
-ikeda
-ikey
-ikotin
-ikram
-ikuo
-ilaire
-ilan
-ilana
-ilario
-ilda
-ileana
-ileane
-ilene
-ilic
-ilise
-ilk
-ilka
-illa
-illamchi
-illidge
-illinois
-ilmberge
-ilona
-ilovich
-ilowski
-ilsa
-ilse
-ilsup
-ilwhan
-ilya
-ilyas
-ilyess
-ilysa
-ilyse
-ilyssa
-ima
-iman
-imbemba
-imelda
-imhof
-imi
-immanuel
-imming
-imogen
-imogene
-imojean
-impaglia
-imran
-imre
-imtaz
-imtiaz
-in-beum
-in-cheol
-in-hwan
-ina
-inam
-inamulla
-inan
-inanc
-inbeum
-ince
-incheol
-incze
-ind
-indahl
-indar
-independ
-inderjit
-indiana
-indianaj
-indira
-indra
-indy
-ineke
-ines
-inesita
-inessa
-inez
-info
-info-man
-infocent
-ing
-inga
-ingaberg
-ingaborg
-ingamar
-ingar
-inge
-ingeberg
-ingeborg
-ingelber
-ingell
-ingemar
-inger
-ingersol
-ingie
-ingle
-ingleber
-ingles
-ingling
-inglis
-ingmar
-ingo
-ingra
-ingram
-ingres
-ingrey
-ingrid
-ingrim
-ingunna
-ingvar
-inho
-inhulsen
-inhwan
-inigo
-inm
-inman
-inna
-innchyn
-innes
-inness
-innis
-inniss
-innocent
-inoue
-inquire
-inrig
-inscoe
-insp
-inspecti
-instal
-installe
-integ
-integrat
-intemann
-interact
-interfac
-intihar
-intplan
-intune
-inyoung
-ioan
-ioana
-ioannes
-ioannidi
-ioannis
-ioannou
-iocca
-iocntrl
-iola
-iolande
-iolanthe
-iona
-ione
-iorgo
-iorgos
-iormina
-iosep
-ioui
-ip
-ipadmin
-ipokrati
-ippolito
-iqbal
-ira
-iradj
-iraj
-irani
-irby
-irc
-ircbellc
-irccar
-ircinter
-ircmarke
-ircmer
-ircmtl
-ircstand
-irean
-ireland
-irena
-irene
-irfan
-irias
-iribarre
-irice
-irick
-irina
-iris
-irish
-irissou
-irita
-irma
-irv
-irvin
-irvine
-irving
-irwin
-irwinn
-is a cat
-isa
-isaac
-isaacs
-isaak
-isabeau
-isabel
-isabelit
-isabell
-isabella
-isabelle
-isac
-isacco
-isador
-isadora
-isadore
-isahella
-isaia
-isaiah
-isak
-isami
-isbister
-iseabal
-isenor
-isensee
-isert
-isfan
-ishak
-ishan
-ishee
-isherwoo
-ishii
-ishikida
-ishimoto
-isiahi
-isidor
-isidora
-isidore
-isidoro
-isidro
-isin
-isip
-isis
-iskandar
-iskender
-iskra
-isl
-islam
-isley
-ismael
-ismail
-isobel
-isoft
-isolde
-israel
-issa
-issam
-issi
-issiah
-issie
-issy
-itac
-itah
-italo
-italus
-itaru
-itas
-itaya
-itch
-iteam
-iteke
-ito
-its-eng
-iu
-iva
-ivan
-ivancevi
-ivancic
-ivanhoe
-ivanoff
-ivanyi
-ivar
-ive
-iver
-ivers
-iversen
-iverson
-ives
-ivett
-ivette
-ivey
-ivie
-ivo
-ivona
-ivonne
-ivor
-ivory
-ivy
-iwan
-iwanyk
-iwashita
-iwona
-iws
-iyad
-iyengar
-iyer
-iyun
-izaak
-izabel
-izak
-izbinsky
-izchak
-izique
-izora
-izumi
-izuru
-izzat
-izzo
-izzotti
-izzy
-j-franco
-jaakkola
-jaan
-jabbari
-jabez
-jabir
-jablonsk
-jabreen
-jacalyn
-jacek
-jacenta
-jachym
-jacinda
-jacinta
-jacintha
-jacinthe
-jack
-jackelyn
-jacki
-jackie
-jacklin
-jacklyn
-jackman
-jackquel
-jackson
-jacky
-jackye
-jaclin
-jaclyn
-jacob
-jacobo
-jacobs
-jacobsen
-jacobson
-jacque
-jacqueli
-jacquely
-jacquene
-jacques
-jacquett
-jacqui
-jacquie
-jacynth
-jacynthe
-jada
-jade
-jadwiga
-jae
-jae-koo
-jae-whan
-jaekoo
-jaenen
-jaewhang
-jaffer
-jag
-jagan
-jagat
-jagath
-jagatic
-jagdev
-jagdish
-jager
-jagernau
-jagjeet
-jagjit
-jagla
-jago
-jagodzin
-jagriti
-jags
-jahangir
-jahromi
-jai
-jaijeet
-jaikne
-jailyn
-jaime
-jaimie
-jaimin
-jain
-jaine
-jak
-jakab
-jakabffy
-jakb
-jake
-jakeman
-jaki
-jakie
-jakim
-jakob
-jakola
-jakstys
-jakubows
-jalaie
-jalal
-jalali
-jalaliza
-jalbert
-jalilvan
-jama
-jamaal
-jamal
-jamaly
-jaman
-jamel
-jamensky
-jamer
-james
-james_mi
-jamesett
-jameson
-jamesy
-jamey
-jami
-jamie
-jamieson
-jamil
-jamilah
-jamill
-jamima
-jamin
-jamison
-jammal
-jammie
-jammu
-jamnejad
-jamroz
-jamshed
-jamshid
-jamshidi
-jan
-jan-olof
-jan-robe
-jana
-janak
-janaki
-janaratn
-janaya
-janaye
-jancewic
-jancovic
-janczyn
-janda
-jande
-jandy
-jane
-janean
-janecka
-janeczka
-janeen
-janek
-janel
-janela
-janell
-janella
-janelle
-janene
-janenna
-janes
-janessa
-janet
-janeta
-janeth
-janetta
-janette
-janeva
-janey
-jang
-jang-hsu
-janghsue
-jani
-jania
-janice
-janick
-janie
-janifer
-janina
-janine
-janio
-janis
-janiszew
-janith
-janka
-janke
-jankowsk
-jann
-janna
-jannay
-jannel
-jannelle
-jannie
-janning
-janolof
-janos
-janot
-janovich
-janrober
-janseen
-jansen
-janson
-janssen
-jantz-le
-jantzi
-januario
-janusz
-jany
-jap
-japan
-japp
-jaquelin
-jaquelyn
-jaquenet
-jaques
-jaquith
-jarad
-jarboe
-jarchow
-jard
-jareb
-jared
-jarel
-jargon
-jarib
-jarid
-jarl
-jarlath
-jarmal
-jarman
-jarmo
-jarmoc
-jarmon
-jarmul
-jarnak
-jarrad
-jarred
-jarret
-jarrett
-jarrid
-jarrod
-jarvah
-jarvie
-jarvin
-jarvis
-jarzemsk
-jasbinde
-jase
-jasen
-jashvant
-jasmann
-jasmin
-jasmina
-jasmine
-jasny
-jason
-jasper
-jaspreet
-jasrotia
-jasti
-jastinde
-jasun
-jasver
-jaswal
-jatar
-jatin
-jatinder
-jau-min
-jau-yau
-jaumin
-jauvin
-jauyau
-java
-javad
-javallas
-javar
-javed
-javier
-javor
-jawad
-jawaid
-jawana
-jawanda
-jawor
-jaworski
-jaworsky
-jay
-jaya
-jayakuma
-jayamann
-jayant
-jayanta
-jayavant
-jaye
-jayendra
-jayesh
-jayjay
-jayme
-jaymee
-jaymie
-jayn
-jayne
-jaynell
-jaynie
-jayshree
-jayson
-jazanosk
-jazmin
-jcbach
-jcst
-jdavie
-jderek
-jean
-jean-ber
-jean-cla
-jean-den
-jean-fra
-jean-guy
-jean-jac
-jean-lou
-jean-luc
-jean-mar
-jean-mic
-jean-nor
-jean-pau
-jean-pie
-jean-rob
-jean-roc
-jean-yve
-jeana
-jeane
-jeanelle
-jeanes
-jeanette
-jeanhee
-jeanice
-jeanie
-jeanine
-jeanloui
-jeanna
-jeanne
-jeannett
-jeannie
-jeannine
-jeannot
-jeany
-jeavons
-jecho
-jed
-jedd
-jeddy
-jedediah
-jedidiah
-jedrysia
-jee
-jee-howe
-jeff
-jefferey
-jefferso
-jeffery
-jeffie
-jeffrey
-jeffreys
-jeffries
-jeffry
-jeffy
-jegland
-jehanna
-jehovah
-jehu
-jelen
-jelene
-jeleniew
-jelinek
-jelske
-jem
-jemczyk
-jemie
-jemima
-jemimah
-jemmie
-jemmy
-jen
-jen-chen
-jen-hua
-jena
-jenchen
-jenda
-jenelle
-jeng
-jenhua
-jeni
-jenica
-jeniece
-jenifer
-jeniffer
-jenilee
-jenine
-jenkins
-jenkinso
-jenn
-jenna
-jennee
-jenner
-jenness
-jennette
-jenni
-jennica
-jennie
-jennifer
-jennilee
-jennine
-jennings
-jenny
-jeno
-jens
-jensen
-jensenwo
-jenson
-jeong
-jephthah
-jepson
-jer-huan
-jerad
-jerald
-jeralee
-jeramey
-jeramie
-jere
-jereme
-jeremiah
-jeremias
-jeremie
-jeremy
-jerhuang
-jeri
-jermain
-jermaine
-jermayne
-jernigan
-jeroen
-jerome
-jeromy
-jeronimo
-jeroski
-jerreld
-jerri
-jerrie
-jerrilee
-jerrilyn
-jerrine
-jerrold
-jerrome
-jerry
-jerrylee
-jervis
-jerzy
-jeska
-jesper
-jess
-jessa
-jessalin
-jessalyn
-jessamin
-jessamyn
-jesse
-jessee
-jesselyn
-jessey
-jesshope
-jessi
-jessica
-jessie
-jessika
-jessup
-jessy
-jester
-jesty
-jesus
-jet
-jeter
-jeth
-jethro
-jeurene
-jew
-jewel
-jewell
-jewelle
-jewels
-jewett
-jey
-jeyarara
-jezioran
-jhingran
-ji
-ji-chuu
-jia
-jia-wen
-jiak-kwa
-jiakkwan
-jian
-jianchen
-jiang
-jianli
-jiann
-jiann-ya
-jiannyan
-jianou
-jianqi
-jianxing
-jianye
-jianyun
-jiawen
-jiayi
-jiayuan
-jichuu
-jie-yong
-jiejie
-jiethye
-jieyong
-jihad
-jihan
-jihyun
-jiin-shu
-jiinshuh
-jilann
-jilisa
-jill
-jillana
-jillane
-jillayne
-jilleen
-jillene
-jilli
-jillian
-jillie
-jilly
-jim
-jimenez
-jiming
-jiminy
-jimmie
-jimmy
-jims
-jimson
-jin
-jin-ho
-jin-nan
-jin-song
-jin-yuan
-jin-yun
-jinann
-jinchao
-jindal
-jing
-jing-ru
-jingbai
-jinglun
-jingru
-jinho
-jinhua
-jinlun
-jinn-kue
-jinnan
-jinnkuen
-jinny
-jinsheng
-jinsong
-jinsoo
-jinyuan
-jiri
-jirina
-jiro
-jisang
-jisheng
-jitendra
-jiuhuai
-jivan
-jiyuan
-jiyue
-jo
-jo ann
-jo-ann
-jo-anne
-jo-marie
-joachim
-joachimp
-joan
-joana
-joane
-joanie
-joann
-joanna
-joannah
-joanne
-joannes
-joannidi
-joannie
-joannis
-joao
-joaquin
-job
-jobe
-jobey
-jobi
-jobie
-jobina
-joby
-jobye
-jobyna
-jocelin
-joceline
-jocelyn
-jocelyne
-jochem
-jochen
-jock
-jocko
-jodee
-jodi
-jodie
-jodine
-jodoin
-jodoin-s
-jody
-joe
-joeann
-joel
-joela
-joelie
-joell
-joella
-joelle
-joellen
-joelly
-joellyn
-joelynn
-joeph
-joerg
-joeri
-joete
-joey
-joffe
-johan
-johan am
-johan ch
-johan se
-johanama
-johanchr
-johann
-johanna
-johannah
-johanne
-johannes
-johannse
-johanseb
-johansen
-johanson
-johathan
-john
-john-jr
-john-pau
-john-sr
-johna
-johnath
-johnatha
-johnatho
-johnette
-johni
-johnna
-johnni
-johnnie
-johnny
-johns
-johnsen
-johnson
-johnsson
-johnston
-johny
-joice
-joiner
-joji
-jojo
-joke
-jolanda
-jole
-jolee
-joleen
-jolene
-joletta
-joli
-jolicoeu
-jolie
-jolin
-joline
-jolitz
-joll
-jolliffe
-joly
-jolyn
-jolynn
-jon
-jonah
-jonas
-jonathan
-jonathon
-jonczak
-jone
-jonell
-jonelle
-jones
-jong
-jong-chi
-jong-woe
-jongchih
-jonghun
-jonghyuk
-jongsun
-jongwoei
-jongwoo
-joni
-jonie
-jonis
-jonkheer
-jonson
-jonthan
-joo
-joo-euin
-joo-geok
-joon
-joong
-jooran
-jooyul
-joplin
-jordain
-jordan
-jordana
-jordanna
-jordi
-jordon
-jorey
-jorgan
-jorge
-jorgense
-jori
-jorie
-joron
-jorrie
-jorry
-jory
-jos
-josanne
-joscelin
-jose
-josee
-josef
-josefa
-josefina
-joseito
-joselito
-joseph
-josepha
-josephin
-josephs
-josey
-josh
-joshi
-joshia
-joshua
-joshuah
-josi
-josiah
-josiane
-josias
-josie
-josine
-josip
-joslin
-joson
-josselyn
-jossine
-josy
-joubert
-joudrey
-jourdain
-jourdan
-jovo
-jowett
-joy
-joya
-joyan
-joyann
-joyce
-joycelin
-joydeep
-joye
-joyner
-joyous
-jozef
-jozsef
-jr
-jsandye
-jsbach
-juan
-juana
-juanita
-juarez
-jubainvi
-jubb
-jubenvil
-jubinvil
-juby
-jud
-judah
-judas
-judd
-jude
-judge
-judi
-judie
-judith
-juditha
-judithre
-judon
-judy
-judye
-judyresn
-juergen
-juers
-jugandi
-juh-shiu
-juha
-juhan
-juhshiun
-jui
-jui-fen
-juieta
-juifen
-juile
-jukka
-julayne
-jule
-julee
-jules
-juli
-julia
-julian
-juliana
-juliane
-juliann
-julianna
-julianne
-julianto
-julie
-julieann
-julien
-julienne
-juliet
-julieta
-julietta
-juliette
-julina
-juline
-julio
-julissa
-julita
-julius
-jun
-jun-li
-junaid
-june
-juneau
-juneho
-junette
-jung
-jung-hua
-junghua
-jungmeis
-juni
-junia
-junie
-junina
-junk
-junkie
-junkin
-junli
-junmeng
-junzo
-juozas
-jurafsky
-jurek
-jurevis
-jurewicz
-jurg
-jurgen
-jurgens
-jurgutis
-juri
-jurman
-juscesak
-juskevic
-jussi
-justen
-justin
-justina
-justine
-justinia
-justinn
-justino
-justis
-justo
-justus
-jusuf
-jutta
-jwahar
-jyh-dong
-jyh-doug
-jyhdong
-jyhdoug
-jyoti
-jyun-che
-jyunchen
-jyuo
-kaare
-kabe
-kabel
-kaboliza
-kabuli
-kac
-kacey
-kacie
-kacor
-kacsor
-kacy
-kaczmare
-kaczmars
-kaczynsk
-kadah
-kadamani
-kaden
-kadiyala
-kadlecik
-kaefer
-kaehler
-kaela
-kaete
-kagan
-kah-ming
-kahaleel
-kahan
-kahhale
-kahhan
-kahil
-kahkonen
-kahlil
-kahn
-kahneman
-kahnert
-kahtasia
-kai
-kai-bor
-kai-ming
-kai-wah
-kai-wai
-kaia
-kaibor
-kaiching
-kaid
-kaidanne
-kaigler
-kaila
-kaile
-kaileen
-kailey
-kain
-kaine
-kaiser
-kaitlin
-kaitlyn
-kaitlynn
-kaiwah
-kaiwen
-kaj
-kaja
-kajeejit
-kaji
-kakalina
-kaki
-kakou
-kaksonen
-kakuta
-kala
-kalab
-kalai
-kalaiche
-kalair
-kalappa
-kalash
-kale
-kaleb
-kalechst
-kaleena
-kales
-kaley
-kali
-kalie
-kalil
-kalila
-kalina
-kalinda
-kalindi
-kaliski
-kalitzku
-kalle
-kallewar
-kalli
-kallio
-kally
-kalman
-kalnitsk
-kalogera
-kalpak
-kalpit
-kalra
-kalsey
-kalt
-kalugdan
-kaluzny
-kalvin
-kalwa
-kalwarow
-kalyan
-kalyani
-kalyn
-kam
-kam-hung
-kam-suen
-kamal
-kaman
-kamas
-kambhamp
-kambiz
-kamboh
-kameko
-kamel
-kamerson
-kamhung
-kamie
-kamil
-kamila
-kamilah
-kamillah
-kaminsky
-kamiya
-kamiyama
-kamlesh
-kammerer
-kamminga
-kamol
-kamoun
-kamran
-kamyar
-kamyszek
-kan
-kan-hung
-kana
-kanagend
-kanani
-kanata
-kanchit
-kandace
-kandappa
-kandi
-kandra
-kandy
-kane
-kaneko
-kaneshir
-kang
-kang-gil
-kang-nin
-kang-yua
-kangelis
-kangkun
-kangning
-kanhung
-kania
-kanies
-kanika
-kannan
-kannel
-kanneman
-kanno
-kansara
-kant
-kanthan
-kantor
-kanu
-kanungo
-kanwalji
-kanwar
-kanya
-kao
-kaoru
-kaoud
-kapadia
-kapatou
-kapella
-kapil
-kaplan
-kapp
-kappos
-kaps
-kapsa
-kapsch
-kapuscin
-kara
-kara-lyn
-karaali
-karademi
-karalee
-karalynn
-karam
-karan
-karass
-karattup
-karchevs
-kardomat
-kardos
-kare
-karee
-kareem
-karel
-karels
-karen
-karena
-karhunie
-kari
-karia
-kariann
-karibian
-karie
-karil
-karilynn
-karim
-karin
-karina
-karine
-kariotta
-karisa
-karissa
-karita
-karkotsk
-karl
-karla
-karlan
-karlee
-karleen
-karlen
-karlene
-karlens
-karlette
-karlie
-karlik
-karlis
-karloff
-karlon
-karlotta
-karlotte
-karlson
-karly
-karlyn
-karmali
-karmen
-karmous-
-karn
-karna
-karnazes
-karney
-karol
-karola
-karole
-karolefs
-karolien
-karolina
-karoline
-karoly
-karon
-karp
-karr
-karrah
-karrie
-karry
-karsan
-karsner
-karsz
-kartik
-kartikey
-karunara
-karwowsk
-kary
-karyl
-karylin
-karyn
-kas
-kasbia
-kasbow
-kasdorf
-kasey
-kashani-
-kashef
-kashima
-kashul
-kasifa
-kaspar
-kasparia
-kasper
-kasprzak
-kass
-kassam
-kassandr
-kassem
-kassey
-kassi
-kassia
-kassie
-kassissi
-kast
-kastelbe
-kasten
-kastner
-kaston
-kasumovi
-kat
-kata
-katalin
-katarina
-kataryna
-katcher
-katchmar
-kate
-katee
-katerina
-katerine
-katey
-kath
-katha
-katharin
-katharyn
-kathe
-katherin
-katheryn
-kathi
-kathie
-kathleen
-kathlin
-kathnels
-kathreri
-kathrine
-kathryn
-kathryne
-kathy
-kathyb
-kathye
-kati
-katibian
-katie
-katina
-katine
-katinka
-katja
-katleen
-katlin
-kato
-katrin
-katrina
-katrine
-katrinka
-katsoura
-katsumi
-katsunor
-katti
-kattie
-katuscha
-katusha
-katy
-katya
-katz
-katzenel
-kaudel
-kauffeld
-kauffman
-kaufman
-kaufmann
-kaunas
-kaura
-kaus
-kausche
-kaushik
-kavaler
-kavanagh
-kavid
-kavis
-kawa
-kawabata
-kawaguch
-kawahara
-kawakami
-kawamura
-kawashim
-kawauchi
-kay
-kaya
-kayaliog
-kayar
-kaycee
-kaye
-kayla
-kayle
-kaylee
-kayley
-kaylil
-kaylyn
-kayne
-kaypour
-kayser
-kayvan
-kaz
-kazem
-kazimier
-kazmierc
-kazue
-kazuhiko
-kazuhiro
-kazuhito
-kazuko
-kazunori
-kazuo
-kazuyuki
-kea
-keala
-kealey
-kean
-keane
-kearney
-kearns
-keary
-keast
-keates
-keating
-keaton
-keats
-kebede
-kechichi
-keck
-kedah
-kedron
-kee
-keef
-keefe
-keefer
-keegstra
-keehan
-keehn
-keelan
-keelby
-keeler
-keeley
-keelia
-keels
-keely
-keen
-keenan
-keene
-keene-mo
-keep
-keer
-kees
-keever
-keffer
-kehler
-kehoe
-kehr
-kei
-keifer
-keighley
-keilholz
-keilty
-keim
-kein
-keinosuk
-keir
-keiser
-keish
-keisuke
-keitel
-keith
-kejing
-kelbe
-kelbee
-kelby
-kelcey
-kelci
-kelcie
-kelcy
-keldon
-kele
-kelemen
-kelessog
-kelila
-kelin
-kelkar
-kell
-kelland
-kellby
-kelleher
-kellen
-keller
-kellerma
-kellett
-kelley
-kelleye
-kelli
-kellia
-kellie
-kellina
-kellogg
-kellsie
-kellum
-kelly
-kelly-er
-kellyann
-kellyeri
-kelner
-kelsay
-kelsch
-kelsey
-kelsi
-kelso
-kelsy
-keltouma
-kelvin
-kelwin
-kely
-kem
-kemal
-kember
-kemish
-kemkeng
-kemme
-kemp
-kempf
-kempffer
-kempler
-kemppain
-kempski
-kempster
-ken
-kenda
-kendal
-kendall
-kendel
-kendell
-kendi
-kendra
-kendre
-kendrick
-kenedi
-kenik
-kenji
-kenkel
-kenlan
-kenmir
-kenn
-kenna
-kennaday
-kennan
-kennard
-kennedy
-kenneth
-kennett
-kenney
-kennie
-kennith
-kennon
-kenny
-kenol
-kenon
-kensinge
-kent
-kenta
-kentaro
-kenton
-kenworth
-kenyon
-keogh
-kepekci
-kepler
-ker
-kera
-kerby
-kerensa
-kerfoot
-keri
-keriakos
-keriann
-kerianne
-kerith
-kerk
-kerley
-kerlovic
-kermie
-kermit
-kermy
-kernahan
-kernan
-kerner
-kernodle
-kerns
-kerr
-kerri
-kerri-an
-kerrie
-kerrill
-kerrin
-kerry
-kerschen
-kerschne
-kerstin
-kerwin
-kerwinn
-keseris
-keshab
-keshav
-kesler
-kesley
-keslie
-kesling
-kessel
-kessia
-kessiah
-kessing
-kessler
-kessley
-kestelma
-kester
-kestutis
-ketan
-ketao
-ketcham
-ketcheso
-ketchum
-ketkar
-ketley
-ketsler
-ketterer
-ketti
-kettie
-kettles
-ketty
-keung
-keuning
-kev
-kevan
-keven
-keveny
-kevin
-kevina
-kevon
-kevyn
-keyes
-keynes
-keys
-keyvan
-khac
-khachatr
-khadbai
-khai
-khalaf
-khaled
-khalid
-khalil
-khalilza
-khamdy
-khanh
-khanna
-khanvali
-khariton
-khatib
-khatod
-khatri
-khawar
-khedkar
-khesin
-khezri
-khieu
-khim
-khimasia
-kho
-khoa
-khodosh
-khoinguy
-khon
-khorami
-khorrama
-khosla
-khosravi
-khosro
-khosrow
-khouderc
-khoury
-khouzam
-khue
-khueh-ho
-khuehhoc
-khuon
-khurana
-khurshid
-khyra
-ki
-kiah
-kial
-kiala
-kiam
-kian
-kiang
-kibler
-kidd
-kiebel
-kiecksee
-kiefer
-kiel
-kiele
-kielstra
-kiely
-kiem
-kien
-kien-ngh
-kienan
-kiennghi
-kiens
-kieran
-kiernan
-kieron
-kiersten
-kiet
-kieunga
-kiger
-kigyos
-kihyen
-kijin
-kikelia
-kiki
-kikki
-kiko
-kikuchi
-kikuta
-kilbank
-kilburn
-kilby
-kilcoin
-kilcoyne
-kile
-kiley
-kilgore
-kilian
-killam
-killeen
-killen
-killer
-killian
-killie
-killy
-kilner
-kilpatri
-kilsaas
-kilzer
-kim
-kim-elee
-kim-minh
-kim-stac
-kim-tram
-kimball
-kimbarov
-kimbell
-kimberle
-kimberli
-kimberly
-kimble
-kimbo
-kimbra
-kimbrell
-kimbroug
-kimeleen
-kimi
-kimihiko
-kimiko
-kimio
-kimler
-kimm
-kimma
-kimme
-kimmett
-kimmi
-kimmie
-kimmo
-kimmy
-kimoto
-kimstace
-kimura
-kin
-kin-wai
-kin-yee
-kinahan
-kinamon
-kincaid
-kinch
-kindel
-kindem
-kindra
-king
-king-hau
-kingaby
-kingan
-kingdon
-kingrey
-kingsbur
-kingshot
-kingslan
-kingsley
-kingsly
-kingston
-kingzett
-kinh
-kinley
-kinman
-kinna
-kinnaird
-kinney
-kinnibur
-kinnie
-kinny
-kinos
-kinoshit
-kinrys
-kinsella
-kinsey
-kinsley
-kinsman
-kinson
-kinstley
-kinstry
-kip
-kipling
-kipnis
-kipp
-kippar
-kipper
-kippie
-kippy
-kira
-kirady
-kirbee
-kirbie
-kirby
-kirchner
-kirchoff
-kirfman
-kiri
-kirit
-kirk
-kirkby
-kirkenda
-kirkham
-kirkland
-kirkley
-kirkpatr
-kirkwood
-kirley
-kirn
-kirouac
-kirsi
-kirsten
-kirsteni
-kirsti
-kirstie
-kirstin
-kirstyn
-kirt
-kirtikum
-kish
-kishi
-kishor
-kishore
-kissee
-kissiah
-kissie
-kistner
-kit
-kita
-kitajima
-kitrick
-kitson
-kitt
-kitti
-kittie
-kittinge
-kitty
-kitzmill
-kivell
-kiwon
-kiyohara
-kiyoharu
-kiyoon
-kizzee
-kizzie
-kjeld
-kjell
-klaas
-klaassen
-klammer
-klamner
-klapper
-klapphol
-klara
-klarika
-klarrisa
-klashins
-klasky
-klassen
-klatchko
-klaudia
-klaudiny
-klaudt
-klaus
-klavkaln
-klazien
-klazina
-klebsch
-klein
-klemens
-klement
-kleon
-klepping
-kletchko
-klett
-kleynenb
-klier
-klimas
-kliment
-klimon
-kline
-kling
-klingspo
-klink
-klod
-klodt
-klosterm
-kloth
-klotz
-klowak
-klug
-kluger
-kluke
-klutts
-kmem
-knapp
-knappe
-knapper
-knapton
-knecht
-kneedler
-kneese
-kneeshaw
-kneisel
-knes-max
-kness
-knickerb
-knieps
-knighten
-knighton
-knio
-knipe
-knitl
-knittel
-knobeloc
-knobloch
-knorp
-knorr
-knouse
-knowles
-knox
-knudsen
-knut
-knute
-ko
-ko-yang
-koa
-koang
-koay
-kobayash
-kobeski
-kobiersk
-koblitz
-kobreek
-koch
-kochansk
-kochis
-kodmur
-kodnar
-kodsi
-kody
-koelbl
-koeller
-koellner
-koeman
-koen
-koenraad
-koens
-koerner
-kogan
-kogelnik
-kohalmi
-kohalmi-
-kohl
-kohler
-kohm
-kohn
-kohnhors
-kohut
-koichi
-koiste
-koji
-kok
-kok-khia
-kokkat
-koko
-kokoska
-kokosopo
-kolahi
-kolappa
-kolavenn
-kolb
-kolbe
-koldinge
-kolek
-kolenda
-kolesnik
-koleyni
-kolk
-kolkka
-kollen
-koller
-kollman
-kollmorg
-kolodiej
-kolodzie
-kolos
-kolovson
-kolski
-kolton
-koman
-komaromi
-komatsu
-komenda
-komorows
-konarski
-konda
-kondagun
-konforti
-kong
-kong-que
-koning
-konno
-konomis
-konrad
-konradi
-konstan
-konstanc
-konstant
-konstanz
-koo
-koohgoli
-koohi
-koolstra
-koolwine
-koonce
-koontz
-kooyoung
-kopala
-kopell
-kopfman
-kopke
-koprulu
-kora
-koral
-koralle
-koran @
-koray
-korbe
-korbel
-korda
-kordik
-kordon
-kordula
-kore
-korea
-korean
-korek
-korella
-koren
-koressa
-korest
-korey
-korf
-kori
-korie
-korn
-kornachu
-kornegay
-korney
-kornitze
-korpela
-korrie
-korry
-kort
-kortekaa
-kortje
-kory
-kos
-kosarski
-kosasih
-kosiorsk
-kositpai
-koskie
-koskinen
-koslowsk
-kosman
-kosnaski
-kosowan
-koss
-kostas
-kosten
-koster
-kostowsk
-kosturik
-kostyniu
-kot
-kotamart
-kotaro
-kotler
-kotval
-kotyk
-kou
-kou-yuan
-kouba
-kouhi
-kouichir
-kouidis
-kouji
-kouyuan
-kovac
-kovacs
-koval
-kovarik
-kovats
-koverzin
-kowal
-kowalcze
-kowalesk
-kowalkow
-kowallec
-kowalski
-kowalsky
-koyang
-kozak
-kozelj
-koziol
-kozlowsk
-kozsukan
-kozuch
-kozyra
-kpodzo
-krabicka
-kraehenb
-krajacic
-krajesky
-krakowet
-kramar
-kramer
-kranenbu
-krater
-kratz
-krauel
-kraus
-krausbar
-krause
-krautle
-krawchuk
-krawec
-kreiger
-kreimer
-krenn
-krenos
-kresl
-kretsch
-krick
-kridle
-krieg
-kriegler
-krienke
-krier
-kriko
-krikoria
-krinda
-kring
-kris
-krisa
-krisha
-krishan
-krishin
-krishink
-krishna
-krishnah
-krishnam
-krishnan
-krishnas
-krispin
-krissie
-krissy
-krista
-kristal
-kristan
-kriste
-kristel
-kristen
-kristi
-kristian
-kristie
-kristien
-kristin
-kristina
-kristine
-kristjan
-kristo
-kristofe
-kristoff
-kristofo
-kriston
-kristoph
-kristos
-kristy
-kristyn
-kriton
-krivossi
-kriz
-krodel
-kroeger
-krogh
-krol
-kroman
-kromer
-krone
-krotish
-krousgri
-krowlek
-krozser
-krten
-krueger
-krug
-kruger
-krull
-krummell
-krumwied
-kruse
-kruuseme
-kruziak
-krym
-krysia
-kryski
-krysko
-krysta
-krystal
-krystall
-krystle
-krystn
-krystyna
-krzyszto
-ktusn
-ku
-kuan
-kuang
-kuang-ts
-kubash
-kube
-kubik
-kubitsch
-kuchelme
-kuchinsk
-kuchta
-kucirek
-kuczynsk
-kudas
-kudrewat
-kue
-kuechler
-kuehn
-kuehne
-kuhfus
-kuhlkamp
-kuhn
-kuhns
-kui
-kui-soon
-kuivinen
-kujanpaa
-kulachan
-kuldip
-kulhy
-kulik
-kulikows
-kulinski
-kulkarni
-kulman
-kum
-kum-meng
-kumagai
-kumamoto
-kumar
-kumares
-kumi
-kummer
-kun
-kun-ming
-kundanma
-kundel
-kundert
-kunecke
-kung
-kung-chi
-kungchia
-kunie
-kunihiko
-kunitaka
-kuniyasu
-kunjal
-kunkel
-kunming
-kuntova
-kunz
-kunze
-kuo
-kuo-chua
-kuo-feng
-kuo-lian
-kuochuan
-kuofeng
-kuoliang
-kupe
-kupfer
-kupferma
-kupfersc
-kupidy
-kupitz
-kuracina
-kurash
-kurauchi
-kurczak
-kurdas
-kurdziel
-kure
-kureshy
-kurian
-kurio
-kurita
-kurniawa
-kurolapn
-kurose
-kurowski
-kursell
-kurt
-kurth
-kurtis
-kurtz
-kuruppil
-kuryliak
-kurylyk
-kus
-kusan
-kushan
-kushner
-kushnir
-kushwaha
-kushwind
-kusmider
-kusum
-kusumaka
-kuswara
-kusyk
-kutac
-kutch
-kutger
-kutschke
-kutten
-kuykenda
-kuzbary
-kuzemka
-kuzyk
-kuzz
-kvochak
-kwa
-kwak
-kwan
-kwang
-kwang-ch
-kwang-lu
-kwangchi
-kwangchu
-kwanglu
-kwangsoo
-kwant
-kwast
-kwee
-kwei
-kwei-san
-kwiatkow
-kwing
-kwissa
-kwock
-kwok
-kwok-cho
-kwok-kin
-kwok-lan
-kwok-san
-kwok-wa
-kwokchoi
-kwokkin
-kwoksang
-kwong
-ky
-kydd
-kye-hong
-kyehong
-kyeong
-kyla
-kyle
-kylen
-kyler
-kylie
-kylila
-kylo
-kylynn
-kym
-kynthia
-kyoko
-kyomun
-kyoon
-kyoung
-kyrie
-kyrstin
-kyu
-kyu-sung
-kyung
-kyungchu
-kyungyoo
-kyusung
-kyzer
-l'anglai
-l'ecuyer
-l'heureu
-l;urette
-la
-la verne
-laale
-lab
-laba
-labarge
-labauve
-labelle
-labenek
-laberge
-labfive
-labiche
-labonte
-labossie
-labrador
-labranch
-labrie
-labrinos
-labuhn
-lac
-lacasse
-lacee
-lacelle
-lacey
-lachambr
-lachance
-lachine
-lachowsk
-lachu
-lacie
-lackenba
-lackie
-lackmann
-lacombe
-lacosse
-lacoste
-lacroix
-lacy
-ladan
-ladasky
-ladd
-ladean
-ladell
-ladet
-ladonna
-ladouceu
-ladva
-ladymon
-laetitia
-lafarge
-lafargue
-lafata
-lafayett
-laferrie
-lafever
-lafferty
-laflamme
-lafleur
-lafontai
-laforge
-laframbo
-lafrance
-lagace
-lagache
-lagarde
-lagrande
-lagrange
-lahaie
-lahaye
-lahey
-lahlum
-lahteenm
-lai
-laidlaw
-laila
-laina
-laine
-lainesse
-lainey
-laing
-laird
-laitinen
-lajzerow
-laker
-lakhani
-lakhian
-lakier
-lakins
-lakoff
-lakshan
-lakshmi
-lakshmin
-lalani
-lali
-lalibert
-lalit
-lalitha
-lalka
-lally
-lalo
-lalonde
-lalu
-lamar
-lamarche
-lamarque
-lamarre
-lambert
-lambregt
-lamedica
-lamers
-lamey
-lamia
-lamirand
-lamm
-lammond
-lamond
-lamonde
-lamont
-lamontag
-lamoreux
-lamothe
-lamotte
-lamouche
-lamoureu
-lampe
-lampert
-lamphier
-lampman
-lamport
-lamy
-lan
-lana
-lanae
-lanava
-lancaste
-lance
-lancelot
-lanctot
-land
-landaver
-landay
-lande
-lander
-landers
-landis
-landman
-landon
-landriau
-landry
-lane
-lanette
-laney
-lang
-langdon
-lange
-langelie
-langenbe
-langer
-langett
-langevin
-langford
-langlais
-langley
-langlois
-langner
-langsdon
-langstaf
-langston
-langton
-lani
-lanie
-laniel
-lanier
-lanita
-lankford
-lanna
-lannan
-lanni
-lannie
-lanny
-lanoe
-lanoszka
-lanoue
-lanouett
-lans
-lansuppo
-lanteign
-lanthier
-lantos
-lantto
-lantz
-lanunix
-lanwan
-lanz
-lanzkron
-lao
-lap
-lapchak
-lapierre
-lapkin
-laplace
-laplante
-lapointe
-laporte
-lapostol
-lappan
-laprade
-lapre
-laprise
-lapsley
-laquinta
-lar
-lara
-larabie
-laraia
-laraine
-larche
-lareine
-larese
-lari
-larimer
-larin
-larina
-larine
-larisa
-larissa
-larivier
-lark
-larkin
-larkins
-larmour
-larn
-larner
-laroche
-larock
-larocque
-larose
-larribea
-larrigan
-larry
-lars
-larsen
-larson
-larstone
-larue
-laruffa
-larus
-larwill
-lary
-larysa
-laryssa
-las
-lasch
-laschuk
-laser
-laserjet
-lash
-lashansk
-lasher
-lashmit
-lashonda
-lask
-laskaris
-laskin
-laslo
-lasserre
-lassig
-lassiter
-lasson
-lassonde
-laster
-latashia
-latchfor
-latella
-laten
-latessa
-latha
-lathangu
-lathrop
-latia
-latif
-latin
-latisha
-latonia
-latonya
-latorre
-latour
-latreill
-latrena
-latrina
-lattanzi
-latulipp
-lau
-laubenhe
-lauderda
-laufer
-laugher
-laughlin
-laughrid
-laughton
-launce
-laura
-lauraine
-laural
-lauralee
-lauramae
-laure
-laureano
-lauree
-laureen
-laurel
-laurella
-lauren
-laurena
-laurence
-laurene
-laurens
-laurent
-lauretta
-laurette
-lauri
-lauria
-lauriann
-lauriaul
-laurice
-laurich
-laurie
-laurier
-laurilyn
-laurin
-laurine
-lauris
-lauristo
-lauritz
-laurna
-lauro
-laursen
-lauruhn
-laury
-lauryn
-lauson
-lauten
-lauther
-laux
-lauze
-lauzon
-lavagno
-lavallee
-lavar
-lavarnwa
-lavecchi
-laveda
-lavelle
-lavena
-lavergne
-laverna
-laverne
-lavers
-laverty
-lavictoi
-lavictor
-lavigne
-laville
-lavina
-lavinia
-lavinie
-laviolet
-lavoie
-lavonda
-lavorata
-law
-lawbaugh
-lawler
-lawless
-lawlis
-lawlor
-lawrence
-lawrie
-lawry
-laws
-lawson
-lawther
-lawton
-lay
-layanand
-layer
-layla
-layne
-layney
-layton
-laz
-lazar
-lazare
-lazaro
-lazarou
-lazarowi
-lazarus
-lazer
-lazlo
-lazure
-lazzara
-lcarrol
-le
-lea
-leader
-leads
-leafloor
-leah
-leahy
-leander
-leandra
-leang
-leann
-leanna
-leanne
-leanor
-leanora
-leaphear
-leary
-leatham
-leathers
-leaton
-leatrice
-leavell
-leaver
-leavitt
-lebaron
-lebars
-lebbie
-lebeau
-lebel
-leblanc
-leblond
-lebo
-lebon
-lecandro
-lecien
-leckie
-leclair
-leclaire
-leclerc
-lecompte
-lecours
-lecouteu
-leda
-ledamun
-leddy
-leder
-lederman
-ledet
-ledford
-ledinh
-ledou
-ledoux
-ledu
-leduc
-ledwell
-lee
-lee-anne
-leeann
-leeanne
-leecia
-leela
-leelah
-leeland
-leena
-leendert
-leenher
-leesa
-leese
-leeson
-leeuwen
-lefebvre
-lefevre
-leffler
-leftwich
-lefty
-legeny
-leger
-legg
-leggett
-legolas
-legra
-legrandv
-legris
-legros
-legrove
-legrow
-legs
-leguen
-lehar
-lehman
-lehmann
-lehrbaum
-lehtinen
-lehtovaa
-lei-see
-leia
-leiba
-leibich
-leibovit
-leibowit
-leiceste
-leicht
-leidenfr
-leiding
-leif
-leigh
-leigha
-leighann
-leighton
-leiker
-leil
-leila
-leilah
-leima
-lein
-leinen
-leisa
-leisha
-leistico
-leita
-leitch
-leite
-leith
-leitman
-leitner
-leitrick
-leiwe
-lek
-lela
-lelah
-leland
-lelia
-lem
-lemaire
-lemar
-lemay
-lemieux
-lemky
-lemley
-lemmie
-lemmy
-lemuel
-lemyre
-len
-lena
-lenard
-lenathen
-lenci
-lendon
-lenee
-lenee'
-lenehan
-lenelle
-lenette
-leney
-lengel
-lenhard
-leni
-lenin
-lenior
-lenir
-lenka
-lenna
-lennard
-lennart
-lennie
-lennig
-lenny
-leno
-lenora
-lenore
-lenox
-lentz
-leny
-lenz
-lenzi
-leo
-leo-miza
-leocadio
-leodora
-leoine
-leola
-leoline
-leon
-leona
-leonanie
-leonard
-leonardo
-leonas
-leone
-leonelle
-leonerd
-leong
-leonhard
-leonid
-leonida
-leonidas
-leonie
-leonor
-leonora
-leonore
-leontine
-leontyne
-leopold
-leora
-leoutsar
-leow
-lepage
-lepine
-lepore
-leppert
-lepreau
-lerch
-leres
-leroi
-leroux
-leroy
-les
-lesa
-lesco
-lescot
-leshia
-leshowit
-lesia
-lesley
-lesli
-leslie
-lesly
-lesmeris
-lesniak
-lesourd
-lesperan
-lessard
-lessin
-lester
-lesway
-lesya
-leta
-letarte
-letchwor
-letendre
-leth
-letha
-lethbrid
-lethebin
-lethia
-leticia
-letisha
-letitia
-letizia
-letourne
-letsome
-lett
-letta
-lettang
-letti
-lettie
-letty
-letulle
-leuenber
-leung
-leupold
-leuty
-lev
-levac
-levasseu
-leveille
-levent
-levere
-levert
-levesque
-levey
-levi
-levin
-levine
-levis
-levisky
-levitin
-levo
-levon
-levy
-lew
-lewandow
-lewek
-lewellen
-lewes
-lewie
-lewinski
-lewis
-lewiss
-lewright
-lex
-lexi
-lexie
-lexine
-lexis
-lexy
-ley
-leyden
-leydig
-leyla
-leyton
-lezlee
-lezley
-lezlie
-lheureux
-li
-li-ming
-li-xi
-lia
-liad
-lial
-liam
-lian
-lian-hon
-liana
-liane
-liang
-liangchi
-lianna
-lianne
-liao
-lias
-liason
-liaurel
-liaw
-lib
-libadmin
-libbey
-libbi
-libbie
-libby
-liber
-libor
-libov
-libraria
-licandro
-licata
-lication
-licerio
-licha
-licht
-lichtenb
-lichtens
-lichum
-lichun
-licia
-lida
-liddell
-liddle
-lidia
-lidio
-lidster
-lidstone
-liduine
-lieberma
-liebrech
-liedl
-lief
-liem
-lien
-lieneman
-lienhard
-liepa
-liesa
-liesbeth
-liese
-liesel
-liesemer
-liesenbe
-liesie
-liesl
-lieure
-lievaart
-liew
-lifshey
-lightfie
-lightfoo
-lighthal
-lighthis
-lightowl
-ligon
-ligurs
-lijphart
-likert
-likourgi
-lil
-lila
-lilah
-lilas
-lili
-lilia
-lilian
-liliana
-liliane
-lilias
-lilin
-lilith
-lilla
-lillenii
-lilli
-lillian
-lillie
-lillien
-lillis
-lilllie
-lilly
-lily
-lilyan
-limeina
-limerick
-limin
-liming
-lin
-lin-chan
-lin-e
-lin-ni
-lina
-linas
-linaugh
-linback
-linberg
-linc
-linchang
-lincoln
-lind
-linda
-linda-jo
-lindamoo
-lindberg
-lindell
-lindemul
-linden
-lindenla
-linder
-lindholm
-lindi
-lindie
-lindler
-lindon
-lindow
-lindquis
-lindsay
-lindsey
-lindstro
-lindsy
-lindt
-lindy
-line
-linea
-linebarg
-linegar
-lineham
-linell
-linet
-lineth
-linette
-linfield
-ling
-ling-hui
-ling-yu
-ling-yue
-ling-zho
-lingafel
-linghui
-lingyan
-lingyu
-linh
-link
-linke
-linklett
-linley
-linn
-linnea
-linnell
-linnet
-linni
-linnie
-lino
-linoel
-linsley
-linton
-linus
-linwood
-linzie
-linzy
-lion
-lionel
-lionello
-liou
-lipari
-lipe
-liping
-lippens
-lippman
-lipschut
-lipscomb
-lipski
-lipton
-lira
-lisa
-lisabeth
-lisah
-lisak
-lisandro
-lisbeth
-lisch
-lischyns
-lise
-lisee
-lisenchu
-lisetta
-lisette
-lish
-lisha
-lishe
-liskoff
-lisle
-liss-mon
-lissa
-lissi
-lissie
-lissmoni
-lissy
-list
-lister
-liston
-listonic
-lita
-litherla
-litt
-littau
-littlewo
-litva
-litz
-litzenbe
-liu
-liuka
-liv
-liva
-livas
-livek
-livengoo
-liverman
-livermor
-lives
-livezey
-livia
-livingst
-livinsto
-livio
-liviu
-livnah
-livshits
-livvie
-livvy
-livvyy
-livy
-liwana
-liwen
-lixi
-liyuan
-liyun
-liz
-liza
-lizabeth
-lizak
-lizbeth
-lizette
-lizz
-lizzi
-lizzie
-lizzy
-ljiljana
-ljilyana
-ljubicic
-llacuna
-llaguno
-llanos
-llewelly
-llopart
-lloyd
-llywelly
-lo
-loa
-loadbuil
-loader
-loadsum
-loan
-loarie
-loay
-lobasso
-lobaugh
-lobello
-lober
-lobianco
-lobin
-lobue
-loc
-locicero
-lock
-lockard
-locke
-locken
-lockett
-lockhart
-lockwood
-lococo
-lodesert
-lodovico
-loe
-loeffler
-loeiz
-loel
-loella
-loes
-loesje
-loewen
-loftis
-logan
-logaraja
-loggins
-loghry
-logntp
-logue
-loh
-lohoar
-loi
-loire
-lois
-loise
-loiseau
-loisel
-lojewski
-loke
-loker
-lola
-loleta
-lolita
-lollis
-lolly
-lombard
-lombardo
-lombardy
-lombrink
-lommen
-lon
-lon-chan
-lona
-lonald
-lonchan
-londhe
-london
-lonee
-lonergan
-long
-long-chu
-longbott
-longcham
-longchun
-longdist
-longfiel
-longhenr
-longo
-longpre
-longsong
-longtin
-lonhyn
-loni
-lonidas
-lonn
-lonna
-lonnard
-lonneke
-lonni
-lonnie
-lonnman
-lonny
-lonsdale
-loo
-loon
-loong
-loos
-looyen
-lope
-loper
-loperena
-lopes
-lopez
-lopiano
-lopinski
-loponen
-loquerci
-lora
-lora-lee
-lorain
-loraine
-loralee
-loralie
-loralyn
-lorance
-lorant
-lorcan
-lord
-loree
-loreen
-lorelei
-lorelle
-lorelynn
-loren
-lorena
-lorenc
-lorene
-lorens
-lorenz
-lorenza
-lorenzen
-lorenzo
-loreta
-loretta
-lorettal
-lorette
-lorfano
-lori
-loria
-lorianna
-lorianne
-lorie
-lorien
-lorilee
-lorilyn
-lorimer
-lorin
-lorincz
-lorinda
-lorine
-loring
-lorint
-loris
-lorita
-lorletha
-lorli
-lormor
-lorna
-lorne
-loro
-lorrain
-lorraine
-lorrayne
-lorrel
-lorri
-lorrie
-lorrin
-lorrine
-lorry
-lortie
-lory
-loryn
-los
-losfeld
-losier
-loso
-losses
-lotan
-lote
-lotfalia
-lotfi
-lothaire
-lothar
-lothario
-lotochin
-lott
-lotta
-lotte
-lotti
-lottie
-lotty
-lotz
-lou
-lou-hell
-louann
-loucel
-loudiadi
-louella
-lough
-loughery
-loughran
-loughrin
-louhelle
-louie
-louiqa
-louis
-louis-ph
-louis-re
-louisa
-louise
-louisett
-louissei
-louk
-louka
-loukas
-louladak
-lourdes
-loutitia
-loux
-lovas
-lovatt
-loveday
-lovegrov
-lovejoy
-lovekin
-lovelace
-loveland
-loveless
-lovell
-lovett
-lovin
-lovina
-lovitt
-lowder
-lowe
-lowell
-lowery
-lowietje
-lowman
-lowrance
-lowrie
-lowry
-lowther
-loxton
-loy
-loyd
-loydie
-loyer
-loyola
-loyst
-loza
-lozier
-lozinski
-lpo
-lrc
-lrcrich
-lrcrtp
-lsi
-lsiunix
-lu
-luan
-luann
-luanne
-lubliner
-lubna
-lubomir
-lubomyr
-luc
-luca
-lucais
-lucas
-lucco
-luce
-lucente
-lucey
-lucho
-luci
-lucia
-lucian
-luciana
-luciani
-luciano
-lucias
-lucie
-lucien
-lucienne
-lucifer
-lucila
-lucile
-lucilia
-lucille
-lucina
-lucinda
-lucine
-lucio
-lucita
-lucius
-lucking
-lucky
-lucretia
-lucy
-ludchen
-ludovico
-ludovika
-ludvig
-ludvikse
-ludwick
-ludwig
-lue
-luella
-luelle
-luen
-luetchfo
-luetke
-luettcha
-luff
-lugsdin
-lugwig
-luh-maan
-luhcs
-luhmaan
-lui
-luigi
-luin
-luis
-luisa
-luise
-luiza
-lujanka
-luk
-luk-shun
-lukas
-lukassen
-lukaszew
-luke
-luker
-lukers
-lukic
-lukie
-lukshis
-lukshun
-lula
-lulita
-lulu
-lum
-lum-wah
-lumley
-lumsden
-lun
-luna
-lund
-lunde
-lundhild
-lundstro
-lundy
-lunk
-lunn
-luoedora
-luoma
-luong
-lupatin
-lupher
-lupien
-luping
-luquire
-lura
-lurette
-luria
-lurleen
-lurlene
-lurline
-lusa
-luscombe
-lussier
-luszczek
-lutan
-lutero
-luther
-luthin
-lutz
-luu
-luuk
-luwemba
-luxford
-luying
-luyten
-luz
-luzarrag
-luzine
-ly
-ly-khanh
-lyall
-lychak
-lyda
-lydda-ju
-lydia
-lydie
-lydon
-lyell
-lyle
-lyliston
-lyman
-lyn
-lynda
-lyndal
-lynde
-lyndel
-lyndell
-lyndia
-lyndon
-lyndsay
-lyndsey
-lyndsie
-lyndy
-lyne
-lynea
-lynelle
-lynett
-lynetta
-lynette
-lynham
-lynn
-lynna
-lynne
-lynnea
-lynnell
-lynnelle
-lynnet
-lynnett
-lynnette
-lynsey
-lynton
-lynwood
-lyon
-lyons
-lyse
-lysinger
-lyssa
-lystad
-lystiuk
-lystuik
-lysy
-lytle
-lzrd
-maahs
-maaike
-maala
-maan
-maarten
-maas
-mab
-mabel
-mabelle
-mabes
-mable
-mabson
-mabuchi
-mac
-mac maid
-macadams
-macalik
-macarthu
-macaulay
-macbride
-maccallu
-maccarth
-macchius
-maccombi
-macconai
-maccorma
-macderma
-macdonal
-macdonel
-macdouga
-macdowal
-macduff
-mace
-macelwee
-macfarla
-macgilli
-macgrego
-mach
-machan
-machatti
-machika
-machnick
-maciej
-maciejew
-maciel
-macinnes
-macinnis
-macisaac
-maciver
-mack
-mackay
-mackel
-mackenzi
-mackey
-mackin
-mackinno
-macklem
-macklin
-mackzum
-maclaren
-maclauri
-maclean
-maclella
-maclenna
-macleod
-macmarti
-macmeeki
-macmilla
-macmulli
-macnaugh
-macneil
-macneill
-macnicol
-macoosh
-macphail
-macphers
-macpost
-macquist
-macrae
-macreyno
-macsuppo
-mada
-madalena
-madalene
-madalyn
-madan
-madani
-maddalen
-maddi
-maddie
-maddix
-maddox
-maddy
-madel
-madelain
-madelein
-madelena
-madelene
-madelin
-madelina
-madeline
-madella
-madelle
-madelon
-madelyn
-mader
-madge
-madgett
-madhav
-madhavan
-madhu
-madhukar
-madigan
-madill
-madisett
-madison
-madl
-madlen
-madlin
-mado
-madonna
-madras
-madsen
-maduri
-mady
-mae
-maegan
-maennlin
-maenpaa
-maeya
-mag
-magbee
-magda
-magdaia
-magdale
-magdalen
-magdi
-magdiel
-magdy
-mage
-maged
-magee
-mages
-maggee
-maggi
-maggie
-maggy
-maghsood
-maginley
-maglione
-magnan
-magnolia
-magnum
-magnuson
-magnusse
-magnusso
-magrath
-magri
-mags
-maguire
-mah
-mahaffee
-mahala
-mahalia
-mahaling
-mahbeer
-mahboob
-mahendra
-maher
-mahesh
-maheu
-maheux
-mahfouz
-mahibur
-mahiger
-mahin
-mahlen
-mahlig
-mahlon
-mahmood
-mahmoud
-mahmud
-mahmut
-mahn
-mahon
-mahonen
-mahoney
-mahoney-
-mahshad
-mai
-maia
-maible
-maid
-maidenhe
-maidens
-maidisn
-maidlab
-maidsir
-maidxpm
-maier
-maiga
-maighdil
-maijala
-maika
-maikawa
-maikhanh
-mail
-mailroom
-mainardi
-maine
-mainoo
-maint
-mainvill
-mainwari
-mair
-maire
-maisey
-maisie
-maison
-maisonne
-maitilde
-maitland
-maitreya
-majd
-maje
-majeed
-majek
-majella
-majernik
-majid
-majmudar
-major
-majors
-majumdar
-majury
-mak
-makam
-makarand
-makarenk
-makary
-makeda
-makiko
-makino
-makinson
-makohoni
-makoid
-makoto
-maksoud
-maksuta
-mal
-mala
-malachi
-malaclyp
-malaher
-malaika
-malaivon
-malam
-malani
-malanie
-malanos
-malavia
-malaysia
-malchy
-malcolm
-malden
-malec
-malee
-malek
-malena
-maleski
-malethia
-malgorza
-malgosia
-malhi
-malhotra
-malia
-maliepaa
-malik
-malina
-malinda
-malinde
-malisic
-maliski
-malissa
-malissia
-malizia
-malkani
-malkiewi
-malkinso
-mallari
-malle
-mallejac
-maller
-mallett
-mallik
-mallissa
-mallorie
-mallory
-malloy
-mallozzi
-malmqvis
-malone
-maloney
-malorie
-malory
-malott
-malta
-maltby
-maltese
-maludzin
-malus
-malva
-malvin
-malvina
-malynda
-malynne
-malynows
-malyszka
-malzahn
-mame
-mami
-mamie
-mamikuni
-mamoru
-mamoulid
-man
-man-fai
-manageme
-manager
-manahil
-manalac
-manami
-manas
-manavend
-manceau
-manchest
-mancini
-mand
-manda
-mandana
-mandayam
-mandel
-mandevil
-mandi
-mandie
-mandrusi
-mandruso
-mandy
-maneatis
-manek
-maness
-manette
-manfred
-manfredo
-mang
-mangione
-mangum
-manh
-manhatte
-mani
-manica
-manickam
-manijeh
-manilal
-manimozh
-maninder
-manish
-manitius
-manitsas
-manjari
-manjeri
-manjinde
-manjit
-manjrike
-mankowsk
-manley
-manli
-manly
-manmohan
-mann
-manna
-manner
-manners
-mannie
-manning
-mannino
-mannion
-manno
-manny
-mano
-manoel
-manoharm
-manoj
-manol
-manolios
-manolis
-manolo
-manon
-manou
-manouch
-manoukia
-mansbrid
-mansell
-manshih
-mansi
-manson
-mansour
-mansoura
-mansouri
-mansukha
-mansum
-mantell
-manto
-manuel
-manuela
-manus
-manuszak
-manverse
-manwarin
-manya
-mao
-maohua
-mapes
-mapile
-mapp
-mar
-mara
-marabel
-maracle
-maragoud
-marano
-marasco
-marasliy
-marc
-marc-and
-marc-ant
-marcanti
-marcanto
-marce
-marceau
-marcel
-marcela
-marcelia
-marcelis
-marcella
-marcelle
-marcelli
-marcello
-marcellu
-marcelo
-marcey
-march
-marchall
-marchand
-marchant
-marcheck
-marchell
-marchese
-marchett
-marci
-marcia
-marcie
-marcile
-marcilie
-marcille
-marciniu
-marcio
-marco
-marcom
-marconi
-marcos
-marcotte
-marcoux
-marcum
-marcus
-marcy
-mardi
-marea
-mareah
-marek
-marella
-maren
-marena
-marenger
-maressa
-marette
-marg
-marga
-margalit
-margalo
-margaret
-margarie
-margarit
-margaux
-marge
-margeaux
-margery
-marget
-margetso
-margette
-margheri
-margheti
-margi
-margie
-margit
-margitta
-margo
-margot
-margret
-margriet
-margueri
-margy
-marhta
-mari
-maria
-mariabel
-mariaele
-mariaisa
-mariam
-marian
-mariana
-mariani
-mariann
-marianna
-marianne
-maribel
-maribell
-maribeth
-marice
-maridel
-marie
-marie-an
-marie-je
-marie-jo
-marie-lu
-marie-na
-marieann
-mariejea
-marieka
-marieke
-mariel
-mariela
-mariele
-marielle
-mariesar
-mariet
-marietta
-mariette
-marigold
-marijke
-marijn
-marijo
-marika
-mariland
-marilee
-marilin
-marillin
-marily
-marilyn
-marilynn
-marin
-marina
-marinaro
-marineau
-marinett
-marinna
-marino
-marinos
-mario
-marion
-mariotti
-mariou
-mariquil
-maris
-marisa
-marisca
-marisela
-mariska
-marissa
-marit
-marita
-maritan
-maritsa
-maritza
-marius
-mariya
-mariza
-marj
-marja
-marjan
-marje
-marjean
-marjet
-marji
-marjie
-marjo
-marjoke
-marjolei
-marjorie
-marjory
-marjy
-mark
-markell
-markes
-marketa
-marketin
-markham
-markiewi
-markins
-markland
-markle
-markm
-markmeye
-marko
-markos
-markovic
-marks
-markus
-marla
-marlaine
-marlane
-marleah
-marleau
-marlee
-marlee-j
-marleejo
-marleen
-marlena
-marlene
-marley
-marlie
-marlies
-marlin
-marline
-marling
-marlo
-marloes
-marlon
-marlow
-marlowe
-marlsela
-marlyn
-marlyne
-marmaduk
-marmen
-marmillo
-marmion
-marna
-marne
-marneris
-marney
-marni
-marnia
-marnie
-marnix
-maroucho
-maroun
-marples
-marquart
-marquez
-marquita
-marr
-marra
-marrec
-marren
-marrett
-marriet
-marrilee
-marriott
-marris
-marrissa
-marron
-marrone
-marryann
-mars
-marscha
-marschew
-marsden
-marsh
-marsha
-marshal
-marshall
-marshaus
-marshman
-marsie
-marsiell
-marson
-marston
-mart
-marta
-martainn
-martel
-martell
-martelle
-marten
-martens
-martenso
-martenst
-martguer
-martha
-marthe
-marthena
-marti
-martica
-martie
-martijn
-martin
-martina
-martince
-martinci
-martine
-martinea
-martinez
-marting
-martino
-martins
-martinus
-martita
-marttine
-marturan
-marty
-martyn
-martynne
-marui
-marum
-maruszak
-maruszew
-marv
-marve
-marvel
-marvell
-marven
-marvette
-marvin
-marwan
-marwin
-marx
-mary
-mary-ann
-mary-ell
-mary-jan
-mary-jo
-mary-mic
-mary-pat
-marya
-maryak
-maryam
-maryann
-maryanna
-maryanne
-marybell
-marybeth
-maryelle
-maryjane
-maryjo
-marykate
-marykay
-maryl
-marylee
-marylin
-marylind
-marylou
-marylynn
-marymarg
-maryn
-maryrose
-marys
-marysa
-maryse
-marysue
-maryvonn
-marzella
-marzullo
-masa
-masahiro
-masako
-masales
-masamich
-masanao
-masanobu
-masao
-masapati
-masaru
-masciare
-masha
-mashura
-masika
-masini
-maskell
-maskery
-maslen
-maso
-mason
-masood
-masooda
-masotti
-masoud
-masse
-massengi
-massey
-massicot
-massimil
-massimo
-massinga
-masson
-massone
-massonne
-massoud
-massoudi
-massumi
-mastella
-mastenbr
-masterpl
-masters
-masterso
-mastrang
-mastroma
-mastrona
-masty
-mat
-mata
-mataga
-matalon
-matatall
-matelda
-mateo
-materkow
-materna
-mathe
-mather
-matheson
-mathew
-mathews
-mathewso
-mathian
-mathias
-mathieso
-mathieu
-mathilda
-mathilde
-mathis
-mathiue
-mathur
-mathurin
-mathus
-matias
-matibag
-matilda
-matilde
-matlock
-matney
-matrin
-matrundo
-mats
-matson
-matsubar
-matsugu
-matsunag
-matsushi
-matsuzak
-matsuzaw
-matt
-matteau
-matteo
-mattes
-matthaeu
-mattheus
-matthew
-matthews
-matthias
-matthieu
-matthiew
-matthus
-matti
-mattias
-mattie
-mattiuss
-mattiuz
-matton
-mattson
-matty
-matusik
-mau
-mau-pin
-mauck
-maud
-maudalis
-maude
-maudie
-maudrie
-maudy
-mauer
-mauldin
-maund
-mauney
-maunu
-maupin
-maura
-maure
-maureen
-maureene
-maurene
-maurer
-maurice
-mauricio
-maurie
-maurijn
-maurine
-maurino
-maurise
-maurita
-maurits
-maurizia
-maurizio
-mauro
-maury
-maveety
-mavis
-mavra
-mavrou
-mawani
-mawji
-mawst
-max
-maxey
-maxi
-maxie
-maxim
-maximili
-maximo
-maxin
-maxine
-maxseine
-maxsom
-maxwell
-maxy
-may
-maya
-mayaram
-mayasand
-maybee
-maybelle
-maycel
-maycock
-maye
-mayea
-mayenbur
-mayer
-mayes
-mayeul
-mayfield
-mayhugh
-mayi
-maylynn
-mayman
-maynard
-mayne
-maynes
-maynie
-maynord
-mayo
-mayor
-mayoux
-mayr
-mayr-ste
-mays
-mayumi
-mayya
-mazahir
-mazanji
-mazarick
-mazen
-mazey
-mazlack
-mazurek
-mazyar
-mazzei
-mbrose
-mc
-mc alpin
-mc ginn
-mcadam
-mcadams
-mcadorey
-mcafee
-mcalear
-mcaleer
-mcaliste
-mcallist
-mcallum
-mcandrew
-mcarthur
-mcateer
-mcaulay
-mcauliff
-mcbeth
-mcbrayne
-mcbride
-mcbroom
-mcbryan
-mccabe
-mccaffer
-mccaffit
-mccaffre
-mccaig
-mccain
-mccall
-mccalla
-mccallen
-mccallum
-mccampbe
-mccandle
-mccann
-mccarrel
-mccarrol
-mccarron
-mccarthy
-mccartin
-mccartne
-mccarty
-mccaughe
-mccauley
-mccaw
-mcclain
-mcclarre
-mcclary
-mcclean
-mccleery
-mcclella
-mcclendo
-mcclenno
-mcclinto
-mccloske
-mcclough
-mcclure
-mccluske
-mcclymon
-mccoll
-mccollam
-mccollum
-mccolman
-mccomb
-mccombs
-mcconagh
-mcconkey
-mcconnel
-mcconney
-mccord
-mccorkel
-mccorkle
-mccormac
-mccormic
-mccorquo
-mccoy
-mccoy-ca
-mccracke
-mccrain
-mccraney
-mccray
-mccready
-mccreano
-mccrear
-mccreath
-mccreesh
-mccrimmo
-mccuaig
-mccue
-mccullen
-mcculloc
-mccullog
-mccullou
-mccully
-mccune
-mccurdy
-mccusker
-mcdade
-mcdaniel
-mcdavitt
-mcdermot
-mcdevitt
-mcdonald
-mcdonnel
-mcdonoug
-mcdoom
-mcdougal
-mcdowall
-mcdowell
-mcduffie
-mcdunn
-mceacher
-mcelderr
-mcelhone
-mcelligo
-mcellist
-mcelrea
-mcelroy
-mcevoy
-mcewan
-mcewen
-mcewen-r
-mcfadden
-mcfall
-mcfarlan
-mcfeely
-mcgallia
-mcgarry
-mcgaughe
-mcgee
-mcgehee
-mcgeown
-mcghee
-mcgill
-mcgillic
-mcgillvr
-mcgilly
-mcginley
-mcginn
-mcglynn
-mcgonagl
-mcgoniga
-mcgorman
-mcgough
-mcgovern
-mcgowan
-mcgracha
-mcgrath
-mcgregor
-mcgruder
-mcguigan
-mcguinne
-mcguire
-mcgurn
-mchale
-mchan
-mcharg
-mchugh
-mcilrath
-mcilroy
-mcinerne
-mcinnis
-mcintee
-mcintire
-mcintomn
-mcintosh
-mcintyre
-mcisaac
-mciver
-mckay
-mckeage
-mckeague
-mckearne
-mckechni
-mckee
-mckeegan
-mckeen
-mckeigha
-mckeitha
-mckenna
-mckenney
-mckenzie
-mckeone
-mckeown
-mckerrow
-mckibben
-mckibbin
-mckibbon
-mckie
-mckillop
-mckinlay
-mckinley
-mckinney
-mckinnon
-mcknelly
-mcknight
-mckusick
-mclachla
-mclaren
-mclauchl
-mclaughl
-mclawhon
-mclawhor
-mclean
-mclellan
-mclemore
-mclenagh
-mclendon
-mclennan
-mcleod
-mcluskie
-mcmahan
-mcmahon
-mcmanis
-mcmann
-mcmannen
-mcmanus
-mcmaster
-mcmeegan
-mcmenami
-mcmichae
-mcmillan
-mcmillen
-mcmillia
-mcmillio
-mcminn
-mcmonagl
-mcmullen
-mcmullin
-mcmurray
-mcnab
-mcnabb
-mcnair
-mcnally
-mcnamara
-mcnamee
-mcnaught
-mcneal
-mcnealy
-mcneely
-mcneese
-mcneil
-mcneill
-mcneilly
-mcnerlan
-mcnerney
-mcnichol
-mcnicol
-mcniel
-mcnitt
-mcnulty
-mcphaden
-mcphail
-mcphee
-mcpherso
-mcquaid
-mcquaig
-mcquarri
-mcqueen
-mcrae
-mcrann
-mcready
-mcritchi
-mcronald
-mcruvie
-mcshane
-mcsheffr
-mcsorley
-mcsween
-mctaggar
-mctavish
-mctierna
-mcturner
-mcvay
-mcveety
-mcveigh
-mcvey
-mcvicar
-mcvicker
-mcwalter
-mcwaters
-mcwherte
-mcwhinne
-mcwhorte
-mcwilton
-mdhazali
-mduduzi
-me
-meachum
-mead
-meade
-meadows
-meads
-meagan
-meaghan
-meagher
-mealin
-meany
-meara
-measures
-mebine
-mechael
-meche
-mechelle
-mecher
-meckler
-meckley
-mecteau
-medefess
-medeiros
-medel
-meder
-medill
-medioni
-medlin
-medlock
-mednick
-medria
-meehan
-meeks
-meena
-meenaksh
-meer
-meera
-meerveld
-meese
-meeting
-meffe
-meg
-megan
-megen
-meggi
-meggie
-meggitt
-meggo
-meggy
-meghan
-meghani
-meghann
-megumi
-mehboob
-mehd
-mehdi
-mehelis
-mehetabe
-mehlhaff
-mehmet
-mehmud
-mehrdad
-mehrez
-mehrzad
-mehta
-mehul
-mei
-mei-jywa
-meier
-meijer
-meijywan
-meikle
-meilleur
-mein
-meining
-meir
-meiser
-meisner
-meissner
-mejdal
-mejia
-mejury
-mel
-mela
-melamie
-melana
-melani
-melania
-melanie
-melanson
-melantha
-melany
-melaura
-melba
-melberta
-melbourn
-meldia
-meldrum
-melecio
-meleg
-melek
-melesa
-meleski
-meleskie
-melessa
-meletios
-melfi
-melford
-melhem
-meli
-melicent
-melina
-melinda
-melinde
-melinie
-melisa
-melisand
-melisend
-melisent
-melissa
-melisse
-melita
-melitta
-melkild
-mella
-melli
-mellicen
-mellie
-mellisa
-mellisen
-mello
-melloney
-mellor
-melly
-melnyk
-melodee
-melodie
-melody
-meloling
-meloney
-melonie
-melony
-melosa
-melton
-melucci
-melva
-melvin
-melvina
-melvyn
-melynda
-men-kae
-menaker
-menard
-menasce
-menashi
-menashia
-mencer
-mendel
-mendelso
-mendez
-mendie
-mendolia
-mendonca
-mendorf
-mendoza
-mendy
-menechia
-menendez
-meng
-mengly
-menkae
-menke
-menna
-mennie
-menon
-menqiong
-mensch
-mensinka
-mentor
-menyhart
-menzel
-menzies
-mer
-merat
-merb
-mercedes
-mercer
-merci
-mercie
-mercier
-mercilin
-mercy
-merdia
-meredeth
-meredith
-merell
-merelyn
-meres
-mereu
-meriann
-meridel
-meridew
-meridian
-meridith
-meriel
-merilee
-meriline
-merill
-merilyn
-merinder
-meris
-merissa
-meriweth
-merizzi
-merkling
-merl
-merla
-merle
-merlin
-merlina
-merline
-mermelst
-merna
-merola
-merralee
-merrel
-merrett
-merrick
-merridie
-merrie
-merriell
-merrile
-merrilee
-merrili
-merrill
-merrills
-merrils
-merrily
-merrithe
-merritt
-merry
-merryman
-merrywea
-mersch
-mersey
-mersinge
-merton
-merunix
-merv
-mervin
-mervyn
-merwin
-merworth
-merwyn
-meryl
-merylene
-meseberg
-mesirov
-meskimen
-mesko
-mesquita
-message
-messer
-messeria
-messersc
-messick
-messier
-messinge
-mesut
-meszaros
-meta
-metcalf
-metcalfe
-metelski
-meter
-metheny
-metherel
-methi
-methiwal
-methot
-methul
-metin
-metler
-metraile
-metrics
-mettrey
-metyn
-metz
-metzger
-metzler
-meubus
-meunier
-mevis
-mewa
-meyer
-meyerink
-meyers
-meza
-mezzano
-mezzoius
-mfgeng
-mgmt
-mia
-miao
-miasek
-mic
-micaela
-micah
-micahel
-miceli
-micgael
-micha
-michael
-michael-
-michaela
-michaeli
-michaell
-michaels
-michaez
-michail
-michailo
-michal
-michale
-michalos
-michaud
-micheal
-micheil
-michel
-michele
-michelin
-michell
-michella
-michelle
-michels
-michelse
-michelso
-michelus
-michi
-michial
-michie
-michiel
-michigan
-michihir
-michiko
-michiya
-mick
-mickens
-mickey
-micki
-mickie
-micklos
-micky
-mico
-micro
-microfab
-micucci
-mid
-middlebr
-middleto
-midge
-midha
-miek
-mielke
-miello
-miep
-miernik
-miers
-mierwa
-mietek
-miezitis
-migdalia
-mignault
-mignon
-mignonne
-miguel
-miguela
-miguelit
-mihaela
-mihai
-mihail
-mihan
-mihara
-mihir
-mihm
-miho
-mihran
-mika
-mikael
-mikaela
-mike
-mikel
-mikelis
-mikeloni
-mikey
-mikhail
-miki
-mikie
-mikihito
-mikkel
-miklos
-miko
-mikol
-miksik
-mikulka
-mil
-mila
-milaknis
-milakovi
-milan
-milanfar
-milanovi
-milar
-milary
-milburn
-mildred
-mildrid
-mile
-milena
-miles
-milford
-milian
-milicent
-milind
-milinkov
-milissen
-milka
-mill
-millaire
-millar
-millard
-millen
-miller
-millero
-millerwo
-millette
-milletti
-milli
-millicen
-millie
-milligan
-millisen
-millo
-milloy
-mills
-millspau
-millward
-milly
-milman
-milmine
-milne
-milner
-milo
-milor
-milotte
-milou
-milstead
-milston
-milt
-miltenbu
-miltie
-milton
-miltos
-milty
-milutino
-milway
-milzie
-mim
-mimi
-mims
-min
-min-jho
-mina
-minai
-minakata
-minako
-minami
-minard
-minas
-mincey
-minck
-minda
-mindy
-minegish
-miner
-minerva
-minesh
-minetola
-minetta
-minette
-ming
-ming-cha
-ming-chu
-ming-hue
-ming-min
-ming-pin
-ming-tzo
-ming-yua
-mingchu
-minghuei
-minghwan
-mingpin
-mingtzon
-mingyuan
-minh
-minh-phu
-minhwi
-minichil
-minjho
-minkus
-minna
-minnamin
-minne
-minnesot
-minni
-minniche
-minnie
-minnnie
-minny
-minor
-minority
-minoru
-minos
-minshall
-minsky
-minta
-minter
-minthorn
-minyard
-minzhu
-miodrag
-miof mel
-mior
-miotla
-mips
-miquela
-miquette
-mir
-mira
-mirabel
-mirabell
-miran
-miranda
-mirande
-mirarchi
-mireiell
-mireille
-mirek
-mirella
-mirelle
-mirenda
-miriam
-miriamne
-mirian
-mirilla
-mirin
-mirjam
-mirko
-mirna
-miro
-miron
-miroslav
-miroslaw
-mirza
-mis
-misbah
-mischa
-misczak
-misha
-mishina
-misium
-miskelly
-misko
-misra
-miss
-missagh
-missaili
-missie
-misslitz
-missy
-mister
-misti
-mistry
-mistulof
-misty
-misutka
-mitalas
-mitch
-mitchael
-mitchel
-mitchell
-mitchels
-mitchler
-mitesh
-mitra
-mitrani
-mitrou
-mitsui
-mitsuko
-mitsuru
-mitsuter
-mittleid
-mitzi
-mivehchi
-miwa
-miwako
-miyuki
-mizerk
-mkpwent
-mkt
-mlacak
-mlcoch
-mmail
-mmdf
-mnason
-mo
-moataz
-moazzami
-mobasher
-mobley
-mocock
-modaffer
-modesta
-modestia
-modestin
-modestos
-modestou
-modesty
-modh
-modi
-modigh
-modl
-modotto
-modula-2
-modula2
-moe
-moebes
-moel
-moen
-moening
-moeschet
-moetteli
-moffatt
-moffet
-moffett
-mofina
-moghe
-moghis
-mogridge
-moh
-moh'd
-mohajeri
-mohamad
-mohamed
-mohammad
-mohammed
-mohan
-mohandas
-mohandis
-moharram
-mohd
-mohideen
-mohler
-mohr
-mohrmann
-mohsen
-moina
-moira
-moise
-moises
-moishe
-moiz
-moizer
-moja
-mojgani
-mojtaba
-mok
-mok-fung
-mokbel
-mokhtar
-mokros
-molani
-moledina
-moleski
-moll
-mollee
-mollerus
-molli
-mollie
-molloy
-molly
-molnar
-molochko
-moloney
-molson
-molyneux
-mombourq
-mommy
-momon
-momtahan
-mona
-monachel
-monaco
-monaghan
-monah
-monahan
-monardo
-moncef
-moncion
-monck
-moncur
-mondher
-mondor
-monet
-monette
-moneypen
-monforto
-monfre
-mong
-mong-tse
-mongo
-mongtsen
-moni
-monica
-moniek
-monika
-monino
-monique
-moniter
-monling
-monn
-monro
-monroe
-monson
-montag
-montague
-montaldo
-montanez
-montange
-montanin
-montcalm
-monte
-monteene
-monteggi
-monteiro
-montelli
-montero
-monteros
-montgome
-monti
-montijo
-montmore
-montor
-montoute
-montoya
-montreal
-montreui
-montsion
-montsko
-montuno
-monty
-mony
-monzo
-moo-youn
-mooder
-moogk
-mooken
-moomey
-moon
-moondog
-mooney
-moonistt
-moorcrof
-moore
-moore-vi
-moorefie
-moorer
-moores
-moorhous
-moosavi
-mora
-moraetes
-morais
-morales
-moran
-moray
-morcinel
-mord
-mordecai
-mordecha
-morden
-mordy
-morearty
-moreau
-moree
-moreen
-morehead
-morek
-moreland
-morelli
-morena
-moreno
-moreton
-morettin
-morey
-morgan
-morgan-c
-morgana
-morganic
-morganne
-morgen
-morglan
-morgun
-mori
-moria
-moriarty
-morie
-morimoto
-morin
-morini
-morino
-moris
-morishig
-morissa
-morisset
-moritz
-moriyama
-morlee
-morley
-morly
-morna
-morneau
-morocz
-moroney
-moroz
-morra
-morreale
-morrie
-morrin
-morris
-morrison
-morrisse
-morry
-morse
-morson
-mort
-morten
-morteza
-mortie
-mortimer
-morton
-morty
-moschopo
-mose
-moseby
-moselle
-moser
-moses
-mosetta
-moshe
-moshinsk
-moshiri
-moshtagh
-moshy
-mosis
-moskalik
-mosley
-moss
-mostafa
-mostovac
-mosur
-mot
-motashaw
-motasim
-motaz
-mote
-motoko
-mototsun
-mott
-motwani
-mou
-moua
-mouat
-moubarak
-mougy
-mouillau
-moulds
-moulsoff
-moulton
-mouna
-mounir
-mountfor
-moussa
-mousseau
-moussett
-moveline
-movies
-mowat
-mowbray
-mowle
-moxham
-moxley
-moxon
-moy
-moya
-moyano
-moyce
-moyenda
-moyer
-moyers
-moyes
-moyna
-moynihan
-moyoli
-moyra
-mozart
-mozek
-mozelesk
-mozelle
-mozes
-mraz
-mrozinsk
-mrugesh
-msg
-mshia
-mtcbase
-mtl
-mtlipadm
-mtnview
-mu-cheng
-mucci
-mucheng
-muchow
-mucklow
-mudd
-mudge
-mudie
-mudry
-muehle
-mueller
-muenster
-muffin
-mufi
-mufinell
-mufti
-mugniot
-muh-cher
-muhammad
-muhammed
-muhchern
-mui
-muinck
-muir
-muire
-muise
-mujahed
-mukai
-mukhar
-mukharji
-mukherje
-mukhopad
-mukul
-mukund
-mulder
-mulders
-muldoon
-mulero
-mulherka
-mulholla
-mullaly
-mullaney
-mullarne
-mullen
-muller
-mullett
-mullin
-mullinix
-mullins
-mulmuley
-mulot
-mulqueen
-mulroney
-multispe
-mulumba
-mulvie
-mumford
-mumma
-mummy-cr
-mun-choo
-mun-hang
-munaz
-munchoon
-munden
-mundi
-mundy
-muni
-munikoti
-munir
-muniz
-munjal
-munmro
-munn
-munna
-munns
-munro
-munroe
-munsey
-munson
-munter
-munz
-munzer
-muqarrab
-muradia
-muralidh
-murash
-murat
-murawski
-murchiso
-murdaugh
-murdeshw
-murdoch
-murdock
-mureil
-murial
-muriel
-murielle
-murison
-murnagha
-muro
-murock
-murph
-murphin
-murphy
-murphy-k
-murray
-murrell
-murrill
-murrin
-murris
-murry
-murson
-murtagh
-murtaza
-murthy
-murton
-murty
-murveit
-murvyn
-musa
-musca
-musclow
-muselik
-musen
-musgrove
-musick
-mussalle
-mussar
-musselwh
-musser
-mustafa
-mustapha
-mustillo
-mutcher
-muth
-muthuswa
-mutikain
-mutsuo
-muttaqi
-muus
-muzio
-muzz
-mwa
-my
-mya
-myatt
-myca
-mycah
-mychal
-myer
-myers
-myers-pi
-myhill
-mykitysh
-myla
-myles
-mylne
-mylo
-mymryk
-myong
-myoung
-myra
-myrah
-myranda
-myre
-myriam
-myrick
-myrilla
-myrillas
-myrle
-myrlene
-myrna
-myron
-myroon
-myrta
-myrthill
-myrtia
-myrtice
-myrtie
-myrtille
-myrtle
-myrvyn
-myrwyn
-mysore
-mystkows
-myung
-myunghee
-myungho
-nabeel
-nabeil
-nabil
-nabisco
-nabors
-nace
-nachtshe
-nachum
-nad
-nada
-nadav
-nadean
-nadeau
-nadeau-d
-nadeem
-nadeen
-nadel
-nader
-nadezhda
-nadi
-nadia
-nadim
-nadine
-nadir
-nadiya
-nadler
-nadolny
-nadon
-nady
-nadya
-nae-ming
-naem
-naeming
-nafezi
-nafsika
-nagai
-nagaraj
-nagaraja
-nagaratn
-nagarur
-nagel
-nagendra
-nagenthi
-nagle
-naguib
-nagy
-nagys
-nahabedi
-nahas
-nahata
-nahid
-nahmias
-nahornia
-nahum
-naile
-naim
-naima
-naimpall
-nair
-nairn
-naismith
-najafi
-naji
-najib
-nakagome
-nakamura
-nakano
-nakatsu
-nakhla
-nakhoul
-nakina
-nakonecz
-nalani
-naldrett
-nalin
-nall
-nallenga
-nam
-nam-kiet
-nam-soo
-namasiva
-nambride
-namdar
-nami
-namiki
-namont
-namrata
-nan
-nana
-nanamiya
-nananne
-nance
-nancee
-nancey
-nanci
-nancie
-nancy
-nancyjea
-nanda
-nandakum
-nandan
-nandi
-nandita
-nando
-nanete
-nanette
-nang
-nani
-nanice
-nanine
-nannette
-nanni
-nannie
-nanny
-nanon
-naohiko
-naoko
-naolu
-naoma
-naomi
-naor
-naoto
-naoum
-nap
-naparst
-napert
-naphan
-naphtali
-napier-w
-napke
-napoleon
-napper
-nappie
-nappy
-nara
-narasimh
-narayan
-narayana
-narciso
-narda
-nardiell
-naren
-narendra
-naresh
-nari
-narida
-nariko
-narinder
-naro
-narraway
-narrima
-narron
-narsimha
-nasato
-naser
-nash
-nashib
-nashif
-nashir
-nashvill
-nasir
-nason
-nass
-nasser
-nassoy
-nassr
-nasvin
-nat
-nata
-natal
-natala
-natale
-natalee
-natalia
-natalie
-natalina
-nataline
-nataliya
-nataly
-natalya
-nataniel
-nataraja
-natascha
-natasha
-natasja
-natassia
-natassja
-natchez
-nate
-nath
-nathalia
-nathalie
-nathan
-nathanae
-nathania
-nathanie
-nathanil
-nathoo
-national
-natiuk
-nativida
-natka
-natkin
-natraj
-natty
-natver
-natvidad
-naufal
-naugle
-naujokas
-naujoks
-nault
-nava
-naval
-navalta
-navaratn
-navarre
-navarro
-naveda
-naveed
-naveen
-navid
-navneet
-nawa
-nawaby
-nayan
-naybor
-naylor
-nayman
-nayneshk
-nayyer
-nazanin
-nazardad
-nazeh
-nazi
-nazib
-nazli
-nazman
-ncc
-ndububa
-ne-regio
-neal
-neala
-neale
-neall
-nealon
-nealson
-nealy
-neamtu
-neander
-nearing
-nearyrat
-neate
-neault
-nebel
-ned
-neda
-nedda
-nedderma
-neddie
-neddy
-nedi
-needham
-neefs
-neel
-neely
-neena
-neene
-neeraj
-neetu
-nefen
-neff
-negandhi
-negar
-neghabat
-negrich
-nehemiah
-nehring
-neibauer
-neider
-neidy
-neifert
-neil
-neila
-neile
-neill
-neilla
-neille
-neilly
-neils
-neilsen
-neilson
-neisius
-neitzel
-nekueey
-nel
-nelda
-nelia
-nelie
-nelken
-nell
-nelle
-nelleke
-nelli
-nellie
-nellis
-nelly
-nelon
-nels
-nelsen
-nelson
-nemec
-nemes
-nemeth
-nemirovs
-nenad
-neng-chu
-nengchun
-nentwich
-neoh
-nerby
-nereida
-nerem
-nerissa
-nerita
-nermana
-nero
-neron
-nert
-nerta
-nerte
-nerti
-nertie
-nerty
-nesbitt
-nesralla
-ness
-nessa
-nessi
-nessie
-nessman
-nessy
-nesta
-neste
-nester
-nestor
-netas
-netdbs
-netdev
-netherso
-netick
-netlink
-neto
-netta
-netteam
-netti
-nettie
-nettle
-nettles
-netto
-netty
-network-
-networkr
-networks
-netzke
-neubauer
-neudeck
-neufeld
-neuman
-neumann
-neumeist
-neureuth
-neuschwa
-neustift
-neusy
-nev
-neva
-nevardau
-nevein
-nevil
-nevile
-neville
-nevin
-nevins
-nevison
-nevrela
-nevsa
-new
-newberry
-newbold
-newby
-newcomb
-newcombe
-newell
-newham
-newhook
-newkirk
-newlab
-newland
-newman
-newnam
-newport
-news
-newsom
-newsome
-newton
-neyer
-neyman
-neyra
-neysa
-neywick
-nezm
-nezon
-ng
-nga
-ngai
-ngai-nga
-ngaingai
-ngan
-nghia
-ngina
-ngo
-ngoc
-ngocquyn
-nguy
-nguyen
-nguyen-t
-nguyet
-nha
-nhan
-nhat
-nhien
-nhut
-nial
-niall
-niamh
-nic
-nicandro
-nicas
-niccolls
-niccolo
-nichael
-nichol
-nicholas
-nichole
-nicholl
-nicholle
-nichols
-nicholso
-nici
-nick
-nickell
-nickells
-nickels
-nickerso
-nickey
-nicki
-nickie
-nickle
-nicklin
-nicko
-nickola
-nickolai
-nickolas
-nickolau
-nickonov
-nicky
-nico
-nicol
-nicola
-nicolai
-nicolais
-nicolaou
-nicolas
-nicole
-nicolea
-nicoles
-nicolett
-nicoli
-nicolina
-nicoline
-nicolis
-nicolle
-nicolo
-nicolopu
-nicosia
-nie
-niebudek
-niedelma
-niedens
-niedra
-niedzwie
-niek
-niel
-nield
-niels
-nielsen
-nielson
-niemi
-nien
-nien-hwa
-nienhwa
-niepmann
-niepokuj
-niergart
-nigam
-nigel
-nihar
-nijen
-nik
-nikaniki
-nike
-nikfarja
-niki
-nikifori
-nikiforu
-nikita
-nikki
-nikkie
-nikky
-niklas
-niko
-nikola
-nikolai
-nikolaos
-nikolas
-nikolaus
-nikolett
-nikolia
-nikolopo
-nikolos
-nikos
-nil
-nilakant
-niles
-nilesh
-nill
-niloofar
-nils
-nilson
-nilsson
-nima
-nimesh
-nimish
-nimmo
-nimr
-nimzod
-nina
-ninetta
-ninette
-ninety-o
-ning
-ninja
-ninnetta
-ninnette
-ninno
-ninon
-nipper
-nir
-niraj
-niranjan
-nirmal
-niro
-nirwan
-nisa
-nisan
-nisbet
-nischuk
-nishan
-nishida
-nishiguc
-nishihar
-nishimot
-nishimur
-nishioka
-nishith
-nishiwak
-nishiyam
-nishizak
-nissa
-nisse
-nissie
-nissy
-nita
-nital
-nitin
-nitschky
-nitza
-nitzhe
-nitzhye
-niu
-niven
-nix
-nixie
-nixon
-nixxon
-niz
-nizam
-nizamudd
-nizar
-nizman
-nj
-njo
-nnamdi
-nnamudi
-no
-noach
-noah
-noak
-noam
-noami
-nobe
-nobel
-nobes
-nobie
-noble
-nobuko
-nobuo
-nobutaka
-nobuto
-nobuyuki
-noby
-nock
-noddin
-node
-noe
-noel
-noelani
-noell
-noella
-noelle
-noellyn
-noelyn
-noemi
-noeschka
-noffke
-noguchi
-nokes
-nola
-nolan
-nolan-mo
-nolana
-noland
-nolen
-noles
-nolet
-nolie
-noll
-nollie
-nolly
-nolter
-nomi
-nomura
-nona
-nonah
-noname
-nong
-nongqian
-noni
-nonie
-nonkes
-nonna
-nonnah
-noone
-noorani
-noorbehe
-noorbhai
-nooshin
-nopi
-nora
-norah
-noralie
-noraly
-norbert
-norberto
-norbie
-norby
-norcal
-norczen
-nordskog
-nordstro
-norean
-noreen
-norel
-norena
-norene
-norfleet
-norgaard
-norikats
-norikazu
-noriko
-norina
-norine
-norio
-noris
-norm
-norma
-norman
-normand
-normandi
-norment
-normie
-normy
-norndon
-noronha
-norri
-norrie
-norris
-norry
-norstar
-north
-northam
-northcot
-northrop
-northrup
-norton
-norval
-norvie
-norvig
-norwood
-nosewort
-noslab
-nosov
-nostrada
-notley
-nou
-noubar
-nouira
-noujeim
-nour
-nouri
-nova
-novak
-novelia
-novene
-novia
-novisedl
-novo
-novorols
-novotny
-nowak
-nowell
-nowina-k
-nowlin
-noy
-noye
-noyes
-npi
-nss
-ntelpac
-ntinash
-ntlc
-ntpadmin
-ntprel
-nttest
-nuber
-nuetzi
-nugent
-number
-nunes
-nunez
-nung
-nunn
-nunnally
-nuno
-nunold
-nuntel
-nurettin
-nurhan
-nuri
-nuria
-nurly
-nurmi
-nuttall
-nuvit
-nyaguthi
-nyberg
-nyce
-nydia
-nye
-nyeita
-nyenhuis
-nyland
-nyquist
-nyre
-nys
-nyssa
-o karina
-o'brecht
-o'brian
-o'brien
-o'carrol
-o'colmai
-o'connel
-o'conner
-o'connor
-o'dacre
-o'dale
-o'dea
-o'dell
-o'dohert
-o'donnel
-o'donova
-o'dwyer
-o'farrel
-o'grady
-o'hagan
-o'hara
-o'hearn
-o'heocha
-o'higgin
-o'keefe
-o'keeffe
-o'kelly
-o'leary
-o'malley
-o'meara
-o'murchu
-o'neal
-o'neall
-o'neil
-o'neill
-o'regan
-o'reilly
-o'rourke
-o'shaugh
-o'shea
-o'sulliv
-o'toole
-o_kelly
-oakland
-oakley
-oaks
-oam
-oanes
-oanh
-oastler
-oates
-oaul
-obadiah
-obadias
-obed
-obeda
-obediah
-obeidat
-obenauf
-ober
-oberhamm
-obermeie
-obermeye
-obermyer
-oberon
-oberpril
-obidiah
-obie
-oblak
-obrecht
-obrien
-obrusnia
-oby
-ocampo
-ochman
-ochoa
-ochs
-ocone
-oconnor
-octavia
-octavio
-octavius
-odac
-odden
-ode
-odecki
-oded
-odegaard
-odele
-odelia
-odelinda
-odell
-odella
-odelle
-oden
-odessa
-odetta
-odette
-odey
-odgers
-odie
-odile
-odilia
-odille
-odo
-odum
-ody
-oedipal
-oedipus
-oertelt
-oesterre
-oestreic
-oetting
-oey
-ofcparm
-ofcparms
-ofelia
-ofella
-ofer
-offers
-ofilia
-ogan
-ogborn
-ogburn
-ogdan
-ogden
-ogdon
-ogilvie
-oglesby
-ogrodnik
-ogua
-oguz
-ohala
-ohandley
-ohara
-ohare
-ohashi
-ohio
-ohmaru
-ohmayer
-ohn
-ohsone
-oingres
-oivind
-ojala
-ojerholm
-oka
-okada
-okafo
-okai
-okamoto
-okan
-okay
-oke
-okey
-okon
-okrafka
-oksana
-okseniuk
-oktar
-okun
-okura
-okuyama
-okuzawa
-ola
-olag
-olav
-old
-older
-oldfield
-oldham
-oldright
-ole
-oleesa
-oleksysh
-olenka
-olenolin
-olesen
-olesko
-olga
-olia
-olimpia
-olin
-olinger
-olinyk
-olivares
-olive
-oliveira
-oliver
-olivero
-olivette
-olivia
-olivie
-olivier
-oliviero
-oliy
-olken
-ollie
-olliff
-olly
-olmstead
-olness
-olof
-olsen
-olsheski
-olson
-olszewsk
-olusola
-olva
-olvan
-olwen
-olympe
-olympia
-olympie
-olynyk
-oma
-oman
-omar
-omayma
-omer
-omerine
-omero
-omid
-omori
-omura
-omyeabor
-onassis
-onder
-ondovcik
-ondrea
-oneida
-oneto
-onette
-onfre
-onfroi
-ong
-onge
-onida
-onofredo
-onsitete
-onsy
-onufrak-
-onyshko
-ooi
-oona
-oorschot
-oost
-op
-opal
-opalina
-opaline
-opalski
-open
-oper
-operatio
-operator
-ophelia
-ophelie
-oplinger
-opperman
-ops
-opsplng
-optimiza
-opto
-opus
-ora
-oral
-oralee
-oralia
-oralie
-oralla
-oralle
-oran
-orazio
-orbadiah
-orca
-ord
-ordas
-orden
-orders
-ordog
-ordway
-oreffice
-oreilly
-orel
-orelee
-orelia
-orelie
-orella
-orelle
-oren
-orenzo
-orfano
-orford
-organiza
-orgren-s
-oriana
-orie
-orin
-orion
-orla
-orlan
-orland
-orlando
-orly
-orlyn
-orme
-ormesher
-ormsby
-ornburn
-ornelas
-orol
-oros
-orpheus
-orr
-orran
-orren
-orrin
-orsa
-orser
-orsini
-orsola
-orson
-ortensia
-orth
-ortiz
-orton
-orv
-orville
-orvin
-orwell
-oryal
-osada
-osadciw
-osama
-osami
-osatuik
-osbert
-osborn
-osborne
-osbourn
-osbourne
-osburn
-oscar
-osgood
-oshinski
-oshiro
-osiakwan
-osiris
-oskar
-oskorep
-oslund
-osman
-osmond
-osmund
-osofsky
-ossama
-ossie
-ostapiw
-ostarell
-ostaszew
-oster
-osterber
-osterhou
-osterman
-ostifich
-osvaldo
-oswald
-oswalt
-oswell
-otakar
-otani
-otec
-otes
-otfried
-otha
-othelia
-othella
-othello
-othilia
-othilie
-otho
-othon
-otis
-otmar
-otsuka
-ott
-ottawa
-ottco
-ottcsr
-otter
-ottilie
-otto
-ottoman
-ottosson
-ottowa
-oturakli
-otway
-oucharek
-oue
-ouellet
-ouellett
-ouimet
-ousterho
-outage
-outhwait
-outram
-ouzas
-ovans
-ovas
-overby
-overcash
-overdyke
-overton
-oviedo
-ovila
-owen
-owens
-owensby
-owsiak
-oxendine
-oyama
-oyung
-ozalp
-ozan
-ozay
-ozer
-ozersky
-oziemblo
-oziskend
-ozkan
-ozlem
-ozmizrak
-ozmore
-ozselcuk
-ozyetis
-ozzie
-ozzy
-paar
-pablo
-pac
-pace
-pacey
-pachal
-pacheco
-pachek
-pachner
-pachulsk
-pacific
-packager
-packard
-packston
-paco
-pacon
-pacorro
-paczek
-paczynsk
-paddie
-paddon
-paddy
-paden
-padget
-padgett
-padiath
-padilla
-padiou
-padma
-padmanab
-padraic
-padraig
-padriac
-paerio
-paes
-paetsch
-pafilis
-pagani
-page
-pageau
-paget
-pagi
-paglia
-pagliaru
-pai
-paialung
-paige
-paik
-pail
-paine
-painter
-painters
-pak
-pak-jong
-pak-kin
-pakkin
-paksi
-pakulski
-pal
-palacek
-palamar
-palasek
-palczuk
-palermo
-paley
-palfreym
-palidwor
-paliga
-palik
-paliwal
-pall
-pallab
-pallen
-palm
-palme
-palmer
-paloma
-palomar
-paluso
-pam
-pambianc
-pamela
-pamelina
-pamella
-pammi
-pammie
-pammy
-pamperin
-pan
-panacea
-panagiot
-pancewic
-panch
-panchen
-panchito
-panchmat
-pancho
-pancholy
-pandey
-pandolfo
-pandora
-pandrang
-pandya
-panek
-panesar
-pang-chu
-pangchun
-panger
-pangia
-panizzi
-pankaj
-panke
-pankesh
-pankhurs
-pankiw
-panko
-pankratz
-pannell
-panolil
-panos
-panosh
-pansie
-pansy
-pantages
-pantalon
-pantas
-pantelis
-panter
-panton
-panzer
-pao
-pao-ta
-paola
-paoletti
-paolina
-paolo
-paone
-paota
-papa
-papadopu
-papagena
-papageno
-papageor
-papahadj
-papajani
-papalits
-papanton
-paparell
-pape
-paper
-paperno
-papers
-papiez
-papineau
-papp
-pappas
-papper
-pappu
-paprocki
-paqs
-paquette
-paquin
-paquito
-par
-para
-paracha
-paradis
-paradise
-parasili
-pardeep
-pardi
-pardip
-pardo
-parekh
-paresh
-parham
-parhi
-parichay
-parihar
-parikh
-paris
-parise
-parisen
-parisi
-parisien
-park
-parkash
-parke
-parker
-parker-s
-parkes
-parkhill
-parkin
-parkins
-parkinso
-parks
-parkson
-parlett
-parmakse
-parman
-parmar
-parmente
-parmigia
-parminde
-parn
-parnas
-parnell
-parniani
-parnigon
-parow
-parr
-parra
-parrilli
-parrillo
-parris
-parrish
-parrish-
-parrnell
-parrott
-parry
-pars
-parsifal
-parsloe
-parsons
-part
-partap
-partello
-partha
-parthasa
-partick
-partin
-partlo
-parton
-partovi
-paruleka
-parveen
-parvin
-parviz
-paryag
-parypa
-pas
-pascael
-pascal
-pascale
-pascali
-pascas
-paschall
-pasher
-pashia
-pashmine
-pasiedb
-pasquale
-passier
-passin
-pasterna
-pastore
-pastorek
-pastuszo
-pasvar
-pat
-patacki
-patadm
-patch
-patchcor
-patches
-patchett
-patching
-patchit
-patchor
-patchsqa
-patcor
-pate
-patel
-paten
-patenaud
-paterson
-patey
-pathak
-patience
-patin
-patner
-pato
-patoka
-paton
-patoskie
-patra
-patriarc
-patric
-patrica
-patrice
-patrice-
-patricem
-patrici
-patricia
-patricio
-patrick
-patrizia
-patrizio
-patriziu
-patry
-patsy
-patt
-patte
-patten
-patterso
-patteson
-patti
-pattie
-pattin
-pattison
-patton
-pattra
-pattullo
-patty
-patwardh
-pau
-paul
-paula
-paulas
-paule
-paulett
-pauletta
-paulette
-pauley
-paulhus
-pauli
-paulich
-paulie
-paulien
-paulin
-paulina
-pauline
-pauling
-paulinus
-paulita
-paulk
-paulo
-paulovic
-paulus
-pauly
-paunins
-pautenis
-pavan
-pavel
-pavia
-pavitt
-pavla
-pavlic
-pavlov
-pavlovic
-pawel
-pawelchu
-pawlikow
-pawliw
-paxon
-paxton
-paye
-payette
-paylor
-payn
-payne
-paynter
-payroll
-payton
-pazos
-pbkim
-pbx
-pcboards
-pcbtools
-pcsuppor
-pcta
-pde
-pdesuppo
-peabody
-peacemak
-peach
-peacocke
-peadar
-peake
-pearce
-pearcy
-pearl
-pearla
-pearle
-pearline
-pearse
-pearson
-peart
-peate
-peaugh
-peavoy
-pebrook
-pecic
-peckel
-peckett
-peder
-pederson
-pedigo
-pedley
-pedneaul
-pedram
-pedriana
-pedro
-peebles
-peedin
-peerman
-peers
-peeters
-peets
-peg
-pegasus
-pegeen
-peggi
-peggie
-peggy
-pegler
-pehong
-pei-chie
-pei-ling
-peiling
-peirce
-peiser
-peixoto
-peleato
-pelegri
-pelissie
-pelkie
-pell
-pelland
-pellegri
-pelletie
-pellizza
-pellizze
-pelly
-pelosi
-pelot
-pelton
-peluso
-pelz
-pembroke
-pen
-pen-mi
-pen-min
-pena
-pena-fer
-penang
-pendergr
-pendhark
-pendleto
-penelopa
-penelope
-penfield
-peng
-peng-dav
-penland
-penmi
-penmin
-penn
-pennebak
-pennell
-penner
-penney
-penni
-pennie
-penninge
-penningt
-penny
-penrod
-penrose
-pension
-peon
-peoples
-pepc
-pepe
-pepi
-pepillo
-pepin
-pepita
-pepito
-pepler
-pepper
-pepple
-peptis
-per
-pera
-peralta
-perazzin
-perceval
-perchtho
-percival
-percy
-peregrin
-pereira
-perenyi
-perez
-perfetti
-peri
-peria
-pericak
-perice
-pericles
-perina
-perkin
-perkins
-perkinso
-perl
-perla
-perle
-perleber
-perlmutt
-pernell
-perng
-perona
-peroxra
-perras
-perrault
-perreaul
-perrella
-perren
-perri
-perrier
-perrin
-perrine
-perron
-perrotta
-perry
-perryman
-perryno
-persaud
-perschke
-persechi
-pershing
-persis
-personna
-peschke
-pesik
-pesold
-pestill
-pet
-peta
-petar
-pete
-peter
-peterman
-peters
-petersen
-peterson
-peterus
-petey
-petillio
-petr
-petra
-petrakia
-petras
-petre
-petrea
-petree
-petrescu
-petretta
-petrey
-petri
-petrick
-petrie
-petrina
-petrinac
-petro
-petronel
-petronia
-petronil
-petrovic
-petruck
-petrunew
-petrunka
-petschen
-petter
-pettinge
-pettitt
-petunia
-petzold
-pevec
-pevzner
-pewitt
-pey-kee
-peyman
-peyter
-peyton
-pezzoli
-pezzoni
-pezzullo
-pfeffer
-pfeilsch
-pfieffer
-pfifferl
-pfitzner
-pflughau
-phaedra
-phagan
-phaidra
-phair
-phal
-phalen
-phalpher
-pham
-phan
-pharr
-pharris
-phat
-phebe
-phedra
-phelan
-phelia
-phelps
-phifer
-phil
-philbeck
-philbert
-philion
-philip
-philipa
-philippa
-philippe
-philippi
-philippo
-philips
-philis
-phill
-phillida
-phillie
-phillip
-phillipe
-phillipp
-phillips
-phillis
-philly
-philomen
-philp
-phineas
-phip
-phipps
-phiroze
-phoebe
-phoenix
-phonenet
-phong
-phoung
-phu
-phuc
-phung
-phuoc
-phuong
-phuong-l
-phuongli
-phyl
-phylis
-phyllida
-phyllis
-phyllys
-phylys
-physical
-pi-yu
-pia
-piasecki
-piatt
-pic
-picard
-piche
-pichocki
-pick
-pickens
-pickett
-pickles
-piecaiti
-piecowye
-piel
-pien
-pier
-piercarl
-pierce
-piercey
-piercy
-pierette
-piero
-pieron
-pierosar
-pieroway
-pierre
-pierre-a
-pierre-h
-pierre-m
-pierre-y
-pierret
-pierrett
-pierrick
-piersol
-pierson
-piete
-pieter
-pietra
-pietrek
-pietro
-pietromo
-pietropa
-pietrzak
-piette
-pifko
-piggott
-piggy
-pighin
-pigniczk
-piitz
-pilar
-pilch
-pilcher
-pilip
-pilipchu
-pilkingt
-pillars
-pillman
-pillswor
-pilmoor
-pilon
-pilot
-pilote
-pilotte
-piltz
-pim
-pimentel
-pimisker
-pimpare
-pimsiree
-pinakin
-pinalez
-pinar
-pincas
-pinchas
-pincheir
-pinchen
-pincus
-pinder
-pindur
-pineau
-pinecres
-pineda
-pinel
-ping
-ping-cha
-ping-kon
-ping-she
-pingchar
-pingkai
-pingshen
-pinizzot
-pinkerto
-pinnegar
-pinney
-pino
-pinren
-pinsonne
-pintado
-pinto-lo
-pintwala
-piotr
-piotto
-pip
-piper
-piperni
-piperno
-pipit
-pipkins
-pippa
-pippert
-pippin
-pippo
-pipponzi
-pippy
-piqueras
-piraino
-pircher
-pires
-pirkey
-pirkle
-pirolli
-pirooz
-piroska
-pirzada
-pisani
-pisheng
-piske
-pissot
-pister
-pistilli
-pit
-pitawas
-pitcairn
-pitcavag
-pitcher
-pitre
-pitt
-pittam
-pittges
-pittman
-pittner
-pitton
-pitts
-pittsbur
-pituley
-pivert
-piwkowsk
-pixie
-piyasena
-piyathad
-piyu
-piyush
-pizzanel
-pizzarel
-pizzimen
-pkdcd
-pkg
-placido
-plaic
-plaisanc
-plaisant
-plambeck
-plamondo
-planas
-planche
-plantamu
-plante
-planthar
-planting
-plaskie
-plasse
-plastic
-plastina
-plater-z
-plato
-platt
-platthy
-platts
-playatun
-please d
-plenderl
-plett
-plevyak
-pleydon
-plmcoop
-ploeg
-ploof
-plotter
-plouffe
-plourde
-plsntp
-plssup
-plucinsk
-plummer
-pluto
-plyler
-po
-po-rong
-po-yi
-podlesna
-podmarof
-podolski
-poe
-poettcke
-poff
-poh-soon
-pohlmann
-poincare
-poindext
-pointner
-poirier
-poissant
-poisson
-pojanart
-pokinko
-pokrifca
-pokrywa
-pokusay
-polak
-polakows
-polanco
-polashoc
-polder
-poldi
-poleretz
-poley
-poliwoda
-polk
-polla
-pollack
-pollard
-pollie
-pollinzi
-pollux
-polly
-pollyann
-pols
-polsha
-polson
-poluchow
-polulack
-pom
-poma
-pomerlea
-pomeroy
-pommainv
-pompeo
-pomposel
-pon
-ponamgi
-ponthieu
-pontus
-poobah
-pooh
-pookie
-poole
-poon
-poorman
-popa
-popadick
-popcorn
-popel
-popela
-popescu
-popierai
-popoff
-popovich
-popovics
-popowicz
-popowycz
-popp
-poppa
-popper
-poppy
-porebski
-porecha
-porfirio
-porong
-port
-portelan
-porter
-porterfi
-portia
-portie
-portigal
-porting
-portis
-portwood
-porty
-portz
-pory
-posavad
-poseidon
-poshiu
-pospisil
-posta
-postavsk
-posthumu
-postleth
-postolek
-potamian
-potesta
-potkonja
-potocki
-potter
-pottle
-potts
-potvin
-pouhyet
-poul
-poulin
-pouliot
-poulos
-poulsen
-poulter
-poustchi
-powell
-power
-powers
-powlick
-pownall
-powney
-poyer
-poyi
-poyner
-poynting
-pozzi
-ppaul
-prab
-prabaddh
-prabhaka
-prabhu
-prabir
-prachaya
-pracht
-prada
-pradeep
-pradip
-pradnyan
-prado
-pradyumn
-praeuner
-prafula
-pragna
-prakash
-pramod
-prams
-pranav
-prang
-prasad
-prasada
-prasanna
-prashad
-prashant
-prashaw
-pratap
-pratapwa
-pratibha
-pratt
-prattico
-pravato
-praveen
-pravin
-praxis
-praysner
-prayson
-prchal
-precoda
-predel
-predon
-preece
-prelims
-prem
-pren
-prent
-prentice
-prentiss
-preo
-prescott
-presgrov
-presley
-presner
-presotto
-pressbur
-presson
-presti
-prestia
-prestipi
-preston
-preston-
-prestrud
-presutti
-preuss
-prevatt
-preville
-previn
-prevost
-prewitt
-pria
-pribhu
-price
-prichard
-pricing
-prickett
-pridgen
-priede
-priestle
-prikkel
-primeau
-prince
-pringle
-print
-printers
-printing
-prints
-printsup
-prinz
-priore
-pris
-prisca
-priscell
-priscill
-prissie
-pritchar
-prithvi
-priti
-prity
-privett
-priviter
-priya
-probert
-problems
-probs
-procacci
-procca
-procner
-procter
-prodmfg
-prodmgmt
-producti
-prof
-proffit
-prog
-program
-program-
-proj
-projects
-projofc
-prokes
-prokop
-prokopen
-promac
-propes
-prosise
-prosperi
-pross
-prosyk
-prototyp
-proudfoo
-proulx
-provenca
-provench
-pru
-prudence
-prudi
-prudy
-prue
-pruett
-pruitt
-prunier
-prupis
-prybyla
-pryce
-prymack
-pryor
-prystie
-pryszlak
-przewloc
-przybyci
-psce
-pseudony
-psklib
-psutka
-ptefs
-ptolemy
-publicat
-pubs
-puchala
-puckett
-puddingt
-pue-gilc
-puelma
-puent
-puett
-puetz
-puff
-pufpaff
-pugas
-pugh
-puglia
-pui-wah
-pujara
-pulak
-pulcher
-pulcine
-pulitzer
-pullan
-pullum
-pulver
-punch
-pundyk
-puneet
-pung
-punsalan
-puran
-purcell
-purchasi
-purdy
-purgerso
-puringto
-purnam
-purnell
-purnima
-purohit
-purposes
-purshott
-purson
-puryear
-pushelbe
-pusun
-pusztai
-putman
-putnam
-putnem
-puukila
-pye
-pyle
-pyles
-pyng
-pyong
-pyotr
-pyron
-python
-qadir
-qadri
-qainfo
-qainsp
-qi-de
-qide
-qihan
-qiming
-qin
-qing
-qing-hui
-qinghui
-qingyan
-qiuyun
-qizhong
-qu
-quabidur
-quality
-quan
-quane
-quang
-quang-tr
-quante
-quantril
-quarles
-quarterm
-quattruc
-quayle
-queenie
-quek
-quelch
-quennevi
-quensett
-quent
-quentin
-querenge
-querida
-queries
-quesnel
-questell
-quevillo
-quigley
-quijano
-quill
-quillan
-quilty
-quincey
-quincy
-quinhon
-quinlan
-quinn
-quinones
-quint
-quinta
-quintana
-quintero
-quintill
-quintin
-quintina
-quinton
-quintus
-quinz
-quite a
-quixote
-quizmast
-quoc
-quoc-vu
-quocanh
-quoi
-quon
-qureshi
-quyen
-quynh
-raab
-raaf
-raaflaub
-raanan
-rab
-rabadi
-rabaglia
-rabatich
-rabbi
-rabecs
-rabenste
-rabi
-rabiasz
-rabie
-rabin
-rabipour
-rabjohn
-rabon
-rabzel
-racette
-rachael
-rached
-rachel
-rachele
-rachelle
-rachmani
-racicot
-racine
-racioppi
-racz
-rad
-radames
-radcliff
-raddalgo
-raddie
-raddy
-radek
-radford
-radha
-radick
-radio
-radko
-radojici
-radomir
-radoslav
-radovnik
-radulovi
-radvanyi
-rae
-raeann
-raejean
-raf
-rafa
-rafael
-rafaela
-rafaelia
-rafaelit
-rafaelll
-rafaello
-rafe
-rafek
-raff
-raffaell
-raffarty
-rafferty
-raffi
-rafflin
-rafi
-rafik
-rafiq
-rafol
-rafols
-rafter
-raftery
-ragan
-ragbir
-ragde
-raghav
-raghava
-raghavan
-ragheb
-raghu
-raghunat
-raghuvir
-ragland
-raglin
-ragnar
-ragsdale
-ragu
-ragui
-raha
-rahal
-rahardja
-rahdar
-rahel
-rahimtoo
-rahm
-rahman
-rahmani
-rahmany
-rahmatal
-rahn
-rahrer
-rahul
-raicu
-raif
-raigwell
-raila
-railey
-raimondo
-raimund
-raimundo
-raina
-raine
-rainer
-raines
-rainey
-raing
-rainmake
-rains
-rainsfor
-raissian
-raiswell
-raj
-raja
-rajadasa
-rajagopa
-rajala
-rajan
-rajani
-rajanika
-rajapaks
-rajarshi
-rajat
-rajcher
-rajchgod
-rajchwal
-rajczi
-rajeev
-rajen
-rajendra
-rajesh
-rajeswar
-rajguru
-rajinder
-rajini
-rajiv
-raju
-rajwani
-rakeim
-rakel
-raker
-rakesh
-rakhal
-rakhuma
-rakochy
-rakotoma
-raleigh
-raley
-ralf
-rali
-ralina
-ralph
-ralston
-ram
-rama
-ramachan
-ramadoss
-ramage
-ramah
-ramakant
-ramakesa
-ramakr
-ramakris
-ramamoor
-raman
-ramana
-ramanamu
-ramanan
-ramanand
-ramanath
-ramani
-ramaprak
-ramarao
-ramaswam
-rambo
-rambow
-ramee
-ramesh
-ramey
-ramez
-rami
-ramin
-ramirez
-ramirez-
-ramiro
-ramiz
-ramkisso
-ramkumar
-ramlogan
-ramnarin
-ramneek
-ramnikla
-ramon
-ramona
-ramonda
-ramondt
-ramos
-rampaul
-rampino
-ramroop
-ramsaran
-ramsay
-ramsayer
-ramsden
-ramses
-ramsey
-ramseyer
-ramzi
-ramzy
-ran
-ran-joo
-rana
-ranahan
-ranald
-ranbir
-rance
-rancell
-rand
-randa
-randal
-randall
-randecke
-randee
-randel
-randell
-randene
-randhawa
-randhir
-randi
-randie
-randolf
-randolph
-randy
-ranea
-ranee
-ranette
-raney
-ranga
-rangan
-ranganad
-ranganat
-rangasam
-rangaswa
-rangchen
-rangel
-ranger
-rangooni
-rani
-rania
-ranice
-ranieri
-ranique
-ranjan
-ranjit
-rank
-rankin
-ranna
-rannells
-ranney
-ranoa
-ranoska
-ransell
-ransom
-ranson
-rantala
-ranvir
-rao
-raouf
-raoul
-raphael
-raphaela
-rappopor
-raquel
-raquela
-rasberry
-raschig
-rashed
-rashedi
-rashid
-rashid-a
-rashidah
-rashidi
-rashmi
-rasia
-rasla
-rasmus
-rasmusse
-rasselas
-rassell
-rastelli
-rastogi
-ratcliff
-rathbun
-rathnaku
-ratko
-ratnam
-ratnayak
-rattanap
-rattray
-ratz
-rau
-raud
-raudres
-rauen
-raul
-rausa
-rausch
-raven
-raves
-ravi
-ravid
-ravinder
-ravindra
-raviv
-ravji
-rawley
-rawnoi
-raxter
-ray
-rayan
-raychel
-raye
-rayl
-rayleigh
-rayment
-raymona
-raymond
-raymund
-rayna
-raynald
-raynard
-raynell
-rayner
-raynor
-rayshell
-raz
-razavi
-rccl
-rch
-rchisn
-rchlab
-rea
-read
-reade
-reader
-readling
-readme 3
-reagan
-reagen
-real
-realtime
-reamonn
-rean
-reates
-reaume
-reaves
-reavis
-reba
-rebbecca
-rebe
-rebeca
-rebecca
-rebecka
-rebeka
-rebekah
-rebekkah
-rebel
-rec
-recabarr
-receivin
-rechelle
-reckhard
-recktenw
-records
-recsnik
-recyclin
-red
-reda
-redbeard
-redd
-reddick
-reddigan
-redding
-reddingt
-reddy
-redfoot
-redford
-redgie
-redinbo
-redish
-redman
-redmond
-redshaw
-redway
-ree
-reeba
-reece
-reed
-reeder
-reena
-rees
-reese
-reeta
-reetz
-reeva
-reeve
-reeves
-refat
-refuerzo
-reg
-rega
-regan
-rege
-regen
-reggi
-reggie
-reggis
-reggy
-regier
-regimbal
-regina
-reginald
-reginaul
-regine
-reginia
-regis
-register
-regnier
-rego
-rehbein
-rehder
-rehel
-reich
-reichenb
-reiching
-reichman
-reichow
-reid
-reidar
-reidelbe
-reider
-reif
-reifschn
-reijerke
-reiko
-reilly
-reiman
-reimann
-reimburs
-rein
-reina
-reinald
-reinaldo
-reinboth
-reind
-reine
-reiner
-reinhard
-reinhold
-reinink
-reinke
-reinlie
-reinman
-reinold
-reinwald
-reis
-reiser
-reiss
-reist
-reiter
-reitfort
-reith
-reitling
-rejean
-rejeanne
-reka
-rekowski
-relation
-reller
-rem
-rembecki
-rembish
-remedios
-remers
-remi
-remillar
-remingto
-remitha
-remo
-remon
-remrey
-remson
-remus
-remy
-ren
-rena
-renado
-renae
-renaldo
-renard
-renata
-renate
-renato
-renaud
-renault
-rendell
-rendon
-rene
-rene-ala
-reneau
-renee
-renell
-renelle
-renema
-renette
-renfro
-renfroe
-renganat
-renie
-renita
-renken
-renmarie
-renner
-rennie
-rennolds
-renny
-reno
-renoir
-renold
-renton
-renu
-renwick
-repair
-repeta
-reportin
-reports
-requel
-requests
-research
-resende
-resnick
-ress
-ressner
-rester
-restore
-restrepo
-results
-resve
-reta
-retallac
-retallic
-retha
-rettie
-reube
-reuben
-reubens
-reuss
-reuven
-reva
-revah
-revelle
-revill
-revis
-revkah
-rewitzer
-rex
-rexford
-rexroad
-rey
-reyad
-reyaud
-reydman
-reyes
-reyna
-reynaldo
-reynard
-reynold
-reynolds
-reza
-rezaian
-rezansof
-rezneche
-reznick
-reznik
-rezzik
-rfa
-rfeynman
-rff
-rhattiga
-rhea
-rheal
-rheault
-rheaume
-rheba
-rheta
-rhett
-rhetta
-rhew
-rhiamon
-rhianna
-rhianon
-rhine
-rhoades
-rhoads
-rhoda
-rhodeniz
-rhodes
-rhodia
-rhodie
-rhodri
-rhody
-rhona
-rhonda
-rhough
-rhyndres
-rhys
-rhyu
-ri
-ria
-riad
-rialland
-riane
-riannon
-rianon
-riaz
-ribakovs
-ribaldo
-ribi
-ribordy
-ribot
-ric
-rica
-ricard
-ricardo
-ricca
-riccardo
-riccitel
-ricciuto
-rice
-rich
-richad
-richard
-richardo
-richards
-richart
-richelle
-richer
-richey
-richie
-richlark
-richman
-richmond
-richmoun
-richter
-richy
-rici
-rick
-rick-jan
-rickard
-rickborn
-rickel
-ricker
-rickert
-ricketso
-ricketts
-rickey
-ricki
-rickie
-rickjan
-rickrd
-ricks
-ricky
-rico
-ricoriki
-riddall
-ridder
-riddick
-rider
-ridge
-ridgeway
-ridgewel
-ridgway
-ridha
-ridley
-riebl
-ried
-riedel
-riehle
-riekie
-rieko
-rieni
-rigby
-rigdon
-rigel
-riggins
-riggs
-riggsbee
-righter
-rightmir
-rigobert
-rigsbee
-rigstad
-rijn
-rijos
-rijswijk
-rik
-riki
-rikki
-rikley
-riley
-rilla
-rima
-rimantas
-rimey
-riml
-rimmler
-rimsa
-rina
-rinaldo
-rinawi
-ring
-ringo
-rini
-rintala
-rintel
-rintoul
-rio
-riobard
-riopel
-riopelle
-riordan
-rios
-riou
-rioux
-rip
-ripa
-ripley
-risa
-risdal
-risher
-rishy-ma
-risko
-risler
-rist
-risto
-rita
-ritalynn
-ritchey
-ritchie
-ritenour
-rittenho
-ritter
-rittmann
-ritz
-ritza
-ritzmann
-riva
-rivaherr
-rivalee
-rivard
-rivera
-rivers
-rivest
-rivi
-rivkah
-rivy
-rix
-riyad
-riyaz
-rizal
-rizewisk
-rizk
-rizky
-rizwan
-rizzardi
-rizzo
-rizzuti
-rk
-rnashcro
-ro
-roana
-roanna
-roanne
-roarke
-rob
-robann
-robart
-robb
-robbert
-robbi
-robbie
-robbin
-robbins
-robby
-robbyn
-robeling
-robena
-robenia
-roberge
-robers
-roberson
-robert
-roberta
-roberto
-roberts
-robertso
-robieux
-robillar
-robin
-robina
-robinet
-robinett
-robinia
-robins
-robinson
-robinwil
-robitail
-robles
-robling
-robney
-robson
-robustne
-roby
-robyn
-rocco
-roch
-roche
-rochell
-rochella
-rochelle
-rocheste
-rochette
-rochon
-rocio
-rock
-rocke
-rockey
-rockford
-rockie
-rockley
-rockly
-rockwell
-rocky
-rod
-roda
-rodd
-roddick
-roddie
-roddy
-rodely
-roden
-rodenfel
-rodenhui
-rodent
-roderic
-roderich
-roderick
-roderigo
-rodge
-rodger
-rodgers
-rodgin
-rodi
-rodie
-rodina
-rodkey
-rodney
-rodolfo
-rodolph
-rodolphe
-rodrick
-rodrigo
-rodrigue
-rodrigus
-rodrique
-rodschat
-roe
-roebling
-roedel
-roehl
-roehrig
-roel
-roelof
-roelofs
-roemer
-roerick
-roesler
-roeten
-rog
-rogan
-rogelio
-roger
-rogerio
-rogers
-roget.wo
-rogge
-rogne
-rogness
-rognlie
-rogoff
-rogue
-rohal
-rohan
-rohe
-rohit
-rohtert
-roi
-roieh
-roig
-rois
-roithmai
-roj
-rojas
-rojer
-rok
-rokas
-roland
-rolande
-rolando
-roldan
-roleson
-roley
-rolf
-rolfe
-rolfes
-rolland
-rollie
-rollin
-rollins
-rollinso
-rollo
-rolls
-rolly
-rolnick
-rolph
-rolston
-roly
-rolyn
-roma
-romagnin
-romain
-roman
-romanchu
-romani
-romano
-romanows
-rombeek
-romberg
-rombough
-romeo
-romero
-romi
-romina
-rommel
-rommell
-romola
-romolo
-romona
-romonda
-romulus
-romy
-ron
-rona
-ronaald
-ronak
-ronald
-ronalda
-ronaldo
-ronalds
-ronaldso
-ronan
-ronda
-rondeau
-ronen
-ronendra
-roney
-rong
-rong-che
-rong-chi
-rong-jen
-rong-jwy
-rongchei
-ronghui
-rongjen
-rongjwyn
-roni-jea
-ronica
-ronitt
-ronkus
-ronn
-ronna
-ronneke
-ronni
-ronnica
-ronnie
-ronny
-roob
-roobbie
-roohy-la
-rooney
-roosevel
-root
-roots
-roozbeh
-roper
-roque
-rora
-rori
-rorie
-rorke
-rory
-ros
-rosa
-rosabel
-rosabell
-rosado
-rosaleen
-rosalia
-rosalie
-rosalind
-rosaline
-rosalyn
-rosalynd
-rosamond
-rosamund
-rosana
-rosanna
-rosanne
-rosario
-rosch
-rosche
-rosco
-roscoe
-rose
-roseann
-roseanna
-roseanne
-rosebud
-roseland
-roselia
-roselin
-roseline
-rosella
-roselle
-rosemari
-rosemary
-rosemond
-rosen
-rosenbau
-rosenber
-rosenblu
-rosendal
-rosene
-rosenfel
-rosenqui
-rosentha
-roser
-rosetta
-rosette
-rosewell
-rosey
-roshelle
-rosie
-rosien
-rosina
-rosita
-roski
-rosko
-roslyn
-rosmunda
-rospars
-ross
-ross-ada
-ross-ros
-rossanes
-rosser
-rossi
-rossie
-rossigno
-rossingt
-rosson
-rossy
-rosvick
-rosy
-roszko
-rotenber
-roth
-rothamel
-rothey
-rothwell
-rotondo
-rotzjean
-rouer
-rouhad
-rouleau
-roulez
-roundy
-roupen
-rourk
-rourke
-rous
-rousseau
-rousset
-roussier
-roussin
-roussy
-routhier
-routing
-rouvin
-row
-rowan
-rowatt
-rowe
-rowell
-rowen
-rowena
-rowhani
-rowland
-rowlands
-rowley
-rowney
-rowsell
-roxana
-roxane
-roxanna
-roxanne
-roxi
-roxie
-roxine
-roxy
-roy
-roya
-royal
-royall
-royals
-royce
-roychowd
-royden
-royer
-royle
-royster
-roz
-rozaini
-rozalia
-rozalie
-rozalin
-rozamond
-rozanna
-rozanne
-roze
-rozele
-rozella
-rozelle
-rozen
-rozett
-rozier
-rozin
-rozina
-rozon
-rozumna
-rriocard
-rtingres
-rtp
-rtpbuild
-rtprel
-rtprelb
-ru
-ruane
-ruaud
-ruban
-rubanovi
-rube
-ruben
-rubens
-rubenste
-rubetta
-rubi
-rubia
-rubie
-rubin
-rubina
-rubinfel
-rubinov
-rubinste
-rubio
-ruby
-ruchel
-ruchi
-ruck
-ruckman
-rud
-rudd
-ruddell
-ruddick
-ruddie
-ruddle
-ruddy
-rudell
-rudi
-rudiak
-rudich
-rudie
-rudiger
-rudin
-rudis
-rudisill
-rudolf
-rudolfo
-rudolph
-rudy
-rudyard
-rudzinsk
-rudzitis
-rueben
-ruecha
-ruediger
-ruel
-ruest
-ruetz
-ruey
-rufe
-ruffolo
-rufino
-rufus
-rugg
-ruggiero
-rui
-rui-tao
-rui-yuan
-ruigrok
-ruitao
-ruiz
-rumley
-rummans
-rummel
-rummell
-runciman
-rundle
-rundstei
-rungroj
-runkel
-runnels
-running
-runyon
-ruoh-chy
-ruohchyu
-rupa
-rupert
-ruperta
-ruperto
-rupnow
-rupp
-ruppert
-ruprecht
-ruqiang
-rurick
-rurik
-rusch
-ruschmei
-rushing
-rushmore
-rushton
-rusin
-ruspini
-russ
-russel
-russell
-russett
-rustie
-rustin
-rustu
-rusty
-rutger
-ruth
-ruthann
-ruthanne
-ruthart
-ruthe
-rutherfo
-ruthi
-ruthie
-ruthy
-rutland
-rutledge
-rutt
-ruttan
-rutter
-ruttger
-rutulis
-rutyna
-ruud
-ruy
-ruyant
-ruyle
-ruzicka
-ruzycki
-ryall
-ryals
-ryan
-ryann
-rybczyns
-rycca
-ryce
-rychlick
-ryde
-ryder
-rydhan
-ryerson
-rygwalsk
-rykwalde
-ryley
-rylott
-ryman
-rymkiewi
-rynders
-rynties
-ryohei
-ryon
-ryoung
-ryszard
-ryun
-rzepczyn
-sa'id
-saad
-saake
-saal
-saatciog
-saavedra
-saba
-sabadash
-sabah
-sabanaya
-sabat
-sabatell
-sabatini
-sabatino
-sabbagh
-saber
-saberi
-sabety
-sabiha
-sabin
-sabina
-sabine
-sabo
-sabol
-sabooria
-sabourin
-sabra
-sabri
-sabrina
-sabry
-sabuson
-sabzali
-sacarell
-sacchett
-sacha
-sachidul
-sachiko
-sachindr
-sachs
-sacks
-sacto
-sada
-sadan
-sadath
-sadegh
-sadeghi
-sadella
-sadie
-sadler
-sadorra
-sadowska
-sadoyama
-sadri
-sadroudi
-sadru
-sadye
-saed
-saeed
-saeid
-safaa
-safah
-safinia
-sagan
-sage
-sager
-sagers
-sagris
-saha
-sahay
-sahib
-sahinalp
-sahli
-saibal
-saibun
-said
-saidee
-saidzade
-saied
-saifalla
-saifulla
-saify
-saiid
-saikaley
-sails
-saini
-sainsbur
-saisho
-sait
-saito
-saitoh
-saiyed
-sakaguch
-sakai
-sakamaki
-sakauye
-sakus
-sal
-salada
-saladna
-salah
-salaidh
-salam
-salamon
-salapek
-salazar
-salb
-salcudea
-saldanha
-saleem
-saleh
-salehi
-salem
-salembie
-salemi
-sales
-salgado
-salhany
-salibi
-salim
-salim-ya
-salimi
-salina
-salinas
-salis
-salkilld
-salkini
-salkok
-salladay
-salle
-sallee
-sallehud
-salli
-sallie
-sally
-sallyann
-salmon
-saloma
-salome
-salomi
-salomo
-salomon
-salomone
-salsbery
-saltamar
-salter
-saltside
-salva
-salvador
-salvato
-salvator
-salvidor
-salvin
-salwa
-salyer
-salyniuk
-salzillo
-sam
-samac
-samalot
-saman
-samantha
-samara
-samaratu
-samaria
-samaroo
-sambar
-sambi
-sambo
-sameh
-samhaber
-sami
-samia
-samieian
-samir
-sammie
-sammon
-sammons
-sammy
-samora
-sampalea
-sampat
-sampath
-samples
-sampson
-sampson-
-samshixu
-samson
-samsonen
-samual
-samuel
-samuele
-samy
-sanaa
-sanabria
-sanae
-sanand
-sanborn
-sanche
-sanchez
-sancho
-sanda
-sandberg
-sandburg
-sande
-sandeep
-sandell
-sander
-sanders
-sanderso
-sandford
-sandhar
-sandhu
-sandhya
-sandi
-sandie
-sandifor
-sandip
-sandison
-sandiway
-sandler
-sandlfor
-sandner
-sandness
-sandor
-sandra
-sandre
-sandrine
-sandro
-sandrock
-sandy
-sandye
-sanford
-sanford-
-sang
-sang-mau
-sang-woo
-sangbong
-sangha
-sanghami
-sangho
-sangiova
-sangman
-sangwook
-sanh
-sanity
-sanja
-sanjay
-sanjeet
-sanjeev
-sanjib
-sanjiv
-sanjiva
-sanjoy
-sankey
-sanks
-sanoy
-sanramon
-sanschag
-sansom
-sanson
-sansone
-santa
-santabar
-santella
-santi
-santiago
-santiest
-santitor
-santo
-santos
-santosh
-sanzone
-sapena
-saphir
-sapphira
-sapphire
-saqib
-sara
-sara-ann
-saraann
-sarah
-sarajane
-saran
-saran-br
-sarangar
-sarasina
-sarath
-saravano
-sarawath
-sarbutt
-saree
-sarena
-sarene
-sarette
-sarge
-sargent
-sargeson
-sari
-sarin
-sarina
-sarine
-sarioglu
-sarita
-sarkari
-sarlos
-sarma
-sarna
-saroj
-sarracin
-sarrasin
-sarrazin
-sarsh
-sarson
-sartin
-sartiran
-sarto
-sartor
-sarubbi
-sasaki
-sascha
-sasha
-sashenka
-sashi
-sasinows
-sask
-saskia
-sasore
-sassan
-sassine
-sasson
-sastry
-saswata
-sathe
-sati
-satin
-satis
-satish
-satkamp
-satkunas
-sato
-satoh
-satoshi
-satta
-sattar
-satterfi
-sattler
-satya
-satyajit
-satyanar
-saucerma
-sauck
-sauder
-saudra
-sauer
-saul
-saulnier
-sauls
-saumitra
-saumure
-saumya
-sauncho
-saunder
-saunderc
-saunders
-saundra
-saungika
-sauprobo
-sauvagea
-sauve
-sauveur
-savadkou
-savanh
-savard
-savarimu
-savaryeg
-savina
-savino
-savita
-savo
-savoie
-savoj
-savoula
-saw
-sawada
-saward
-sawaya
-sawchuk
-sawczyn
-sawita
-sawsan
-sawyer
-sawyere
-sawyers
-sax
-saxe
-saxena
-saxon
-say
-sayar
-sayed
-sayeeda
-sayegh
-sayer
-sayers
-sayla
-sayre
-sayres
-scalabri
-scalera
-scales
-scammerh
-scamurra
-scandret
-scanga
-scanlan
-scanlon
-scapin
-scarboro
-scarbrou
-scarface
-scarffe
-scarlet
-scarlett
-scarrow
-scatena
-scates
-schaap
-schacham
-schachtl
-schack
-schadan
-schaefer
-schafer
-schaffel
-schaffer
-schallen
-schaller
-schallio
-schanck
-schank
-schanne
-scharf
-schartma
-schatzbe
-schauer
-schavo
-schavone
-schechtm
-scheck
-scheckle
-schecter
-schedule
-scheduli
-scheer
-scheffle
-scheible
-scheidt
-scheifel
-schejbal
-schell
-schellen
-schembri
-schemena
-schenck
-schendel
-schenk
-schenkel
-schepps
-scherbin
-scherer
-schermer
-scherzin
-schesvol
-scheuerm
-schick
-schieber
-schiefer
-schiegl
-schierba
-schill
-schiller
-schillin
-schiltz
-schinkel
-schipper
-schireso
-schirmer
-schirtzi
-schissel
-schittl
-schlacht
-schlagen
-schlange
-schledwi
-schlegel
-schlemme
-schlicht
-schloboh
-schluter
-schmadtk
-schmeder
-schmeing
-schmeler
-schmelze
-schmidt
-schmitig
-schmitt
-schmitz
-schmoe
-schnacke
-schnaith
-schneide
-schnell
-schnirer
-schnob
-schnupp
-schnurma
-schober
-schoch
-schoen
-schoener
-schoenfe
-schoenin
-schoenli
-schoettl
-schofiel
-scholes
-scholey
-scholman
-scholtz
-schonber
-schooley
-schopenh
-schousbo
-schouwen
-schrader
-schrag
-schrage
-schram
-schraner
-schrang
-schreibe
-schreier
-schreife
-schreine
-schrier
-schroede
-schroer
-schroff
-schruefe
-schrupp
-schrybur
-schubert
-schuck
-schucker
-schuddeb
-schuett
-schuette
-schuld
-schulte
-schultz
-schultze
-schulz
-schulze
-schumach
-schumann
-schuster
-schute
-schutte
-schutz
-schuyler
-schvan
-schwab
-schwader
-schwalba
-schwane
-schwante
-schwartz
-schwarz
-schwenk
-schyndel
-schyving
-scibek
-scif
-scissons
-scodras
-scomello
-sconzo
-scooter
-scorpio
-scorziel
-scot
-scott
-scotti
-scottie
-scottjop
-scottt
-scotty
-scournea
-scovell
-scovill
-scp
-scpbuild
-scpiivo
-scptest
-scrantom
-scrbacic
-screener
-scribner
-scrivens
-scroger
-scss
-scssdev
-scully
-scurlock
-scythia
-se
-seabrook
-seager
-seagle
-seagrave
-seagrove
-seahawk
-seale
-sealy
-seamster
-seamus
-sean
-seana
-seang
-seanna
-seany
-searl
-searle
-searles
-sears
-seatter
-seawell
-seay
-sebastia
-sebastie
-sebata
-sebeh
-sechang
-sechen
-sechrest
-secrest
-security
-seda
-sedat
-sedayao
-seddigh
-seddon
-sedigheh
-sedovic
-sedran
-see
-seeds
-seegobin
-seelaend
-seelan
-seeler
-seeley
-seema
-seenu
-seery
-sees
-seethara
-segal
-segars
-seggie
-seguin
-sehat
-sehgal
-sehinson
-sehmbey
-sehyo
-sei
-seidel
-seiden
-seidl
-seidman
-seifers
-seifert
-seifried
-seiji
-seiko
-seiler
-seiple
-seipue
-seitz
-seiz
-sej
-sek-ming
-seka
-sekar
-sekhar
-seki
-sekiguch
-sekming
-sekuler
-sela
-selbrede
-selby
-selchow
-selcuk
-seldon
-selena
-selene
-selent
-selestin
-selia
-selic
-selie
-selig
-selim
-selime
-selina
-selinda
-seline
-seliske
-selisker
-selkirk
-sella
-sellars
-selle
-sellers
-sellgren
-sellis
-sells
-sellwood
-selma
-selva
-selvaraj
-selwyn
-sembi
-semeniuk
-semenzat
-semerau
-semler
-semmens
-semmler
-semoon
-sena
-senad
-senderow
-sendyk
-senecal
-senese
-sengoba
-sengupta
-seniuk
-senng
-senser
-senten
-sentner
-sentovic
-senyildi
-senyshyn
-seob
-seoju
-seok
-seong
-seoul
-sepe
-sepesi
-sephira
-sepko
-serack
-serafin
-seraphin
-serapin
-serazzi
-serban
-serber
-serbin
-serbus
-serdar
-serduke
-seregely
-serena
-serene
-serethia
-serge
-sergeant
-sergei
-sergent
-sergey
-sergi
-sergio
-sergiu
-sergo
-seroka
-serour
-serraf
-serrano
-serre
-servais
-servance
-services
-servidio
-serville
-seshadri
-seshan
-seth
-sethi
-sethian
-setiawan
-seto
-setsuko
-settels
-setterfi
-settles
-seufert
-seumas
-seung
-seungbin
-seungchu
-seungjun
-seuss
-seven
-severin
-severina
-severn
-severns
-sevigny
-sevilla
-seville
-seward
-sewell
-sey-ping
-seyar
-seyed
-seyfolla
-seyma
-seymour
-sezer
-sfiroudi
-sforza
-sgorniko
-sguigna
-sha-wen
-shabatur
-shabbir
-shabo
-shacham
-shackelf
-shacklef
-shacklet
-shackley
-shaddock
-shadow
-shae
-shafer
-shaffer
-shafik
-shafiq
-shafique
-shahab
-shahan
-shahani
-shahen
-shahid
-shahram
-shahriar
-shahrin
-shahrokh
-shahrood
-shai
-shaib
-shaibal
-shaida
-shaila
-shailan
-shailen
-shailend
-shailesh
-shailin
-shaina
-shaine
-shaji
-shaker
-shakeri
-shakib
-shakil
-shakoor
-shakor
-shalizi
-shalla
-shalmon
-shalna
-shalne
-shalom
-shama
-shamblin
-shames
-shamim
-shamir
-shamji
-shams
-shamshad
-shamshir
-shamsia
-shamus
-shan
-shan-min
-shan-pin
-shana
-shanahan
-shanan
-shanda
-shandee
-shandeig
-shandie
-shandra
-shandy
-shane
-shaner
-shang
-shang-ti
-shangi
-shangtia
-shani
-shanie
-shankar
-shanlin
-shanmin
-shanna
-shannah
-shannan
-shannen
-shannon
-shanon
-shanping
-shanta
-shantee
-shanti
-shantz
-shao
-shao-she
-shaoshen
-shapcott
-shapin
-shapiro
-shapland
-shappir
-shara
-sharad
-sharada
-sharae
-sharai
-sharan
-sharee
-shari
-sharia
-sharif
-shariff
-sharissa
-sharity
-sharkey
-sharky
-sharl
-sharla
-sharleen
-sharlene
-sharline
-sharma
-sharman
-sharmila
-sharnoff
-sharon
-sharona
-sharone
-sharpe
-sharratt
-sharri
-sharron
-sharry
-shary
-sharyl
-sharyn
-shashank
-shashi
-shastri
-shastry
-shatter
-shattuck
-shau
-shaughan
-shaughn
-shaughne
-shaukat
-shaumil
-shaun
-shauna
-shaupoh
-shaver
-shaw
-shaw-yun
-shawen
-shawn
-shawna
-shawnee
-shawyune
-shay
-shay-pin
-shayanpo
-shayla
-shaylah
-shaylyn
-shaylynn
-shayna
-shayne
-shayping
-shea
-sheaffer
-shealy
-shean
-sheara
-shearer
-shearin
-shearman
-shears
-sheba
-shebanow
-shechtma
-shedd
-shedman
-sheehan
-sheela
-sheelagh
-sheelah
-sheena
-sheeree
-sheergar
-sheets
-sheff
-sheffey
-sheffie
-sheffiel
-sheffy
-sheidafa
-sheikh
-sheikna
-sheila
-sheila-k
-sheilah
-sheilaka
-sheileag
-shein
-shek
-shekar
-shekhar
-shekwan
-shel
-shela
-shelagh
-shelba
-shelbi
-shelby
-shelden
-sheldon
-shelegey
-shelia
-shell
-shelley
-shelli
-shellie
-shellin
-shellman
-shelly
-shellysh
-shelton
-shem
-shemwell
-shen
-shen-zhi
-shena
-sheng
-sheng-fu
-shengfu
-shengru
-shengwen
-shengwu
-shennan
-shep
-shepard
-shepherd
-sheppard
-shepperd
-sher
-sherali
-sherard
-sheraton
-sherban
-shere
-sheree
-sheremet
-sheri
-sheri-ly
-sheridan
-sherie
-sherif
-sherill
-sherilyn
-sherin
-sherk
-sherline
-sherlock
-sherm
-sherman
-shermie
-shermy
-sherona
-sherow
-sherra
-sherrard
-sherrel
-sherrell
-sherrer
-sherri
-sherrie
-sherrill
-sherrily
-sherry
-sherrye
-sherryl
-sherwan
-sherwin
-sherwood
-sherwyn
-sherwynd
-sherye
-sheryl
-sheth
-sheu
-sheung
-shew
-shewchen
-shi
-shi-qin
-shi-wei
-shiang-y
-shiangyi
-shiao-mi
-shiaomin
-shibahar
-shibata
-shibberu
-shibo
-shieff
-shieh
-shiel
-shiela
-shields
-shiell
-shier
-shiffer
-shiflett
-shigeaki
-shigeki
-shigemur
-shigenao
-shigeo
-shigeru
-shih
-shih-dar
-shih-hai
-shih-hsi
-shih-kua
-shih-tie
-shihhai
-shihhsiu
-shihkuan
-shihtien
-shik
-shikui
-shila
-shiley
-shilla
-shilling
-shimada
-shimandl
-shimiz
-shimizu
-shimshon
-shin-dug
-shina
-shinder
-shindug
-shing
-shing-ch
-shing-mi
-shingche
-shingler
-shingmin
-shinichi
-shinji
-shinjo
-shinobu
-shinohar
-shinzo
-shiou
-shipe
-shipp
-shippen
-shiqin
-shiquan
-shir
-shirai
-shiranth
-shiratsu
-shiraz
-shireen
-shireman
-shirene
-shirey
-shirin
-shirinlo
-shirish
-shirl
-shirlee
-shirleen
-shirlene
-shirley
-shirley-
-shirline
-shirman
-shiroshi
-shirriff
-shishakl
-shishido
-shiu
-shiu-lin
-shiuan
-shiue
-shiuling
-shiun
-shiung
-shiv
-shiva
-shivaji
-shivapra
-shivchar
-shivdars
-shivnan
-shiwei
-shixian
-shlomo
-shmoys
-shnay
-shnider
-sho
-shoaf
-shobana
-shockley
-shoeb
-shoemake
-shoens
-shoji
-sholom
-shon
-shona
-shonda
-shonka
-shonuck
-shoou-yu
-shoouyu
-shop
-shoppel
-shorgan
-shorwan
-shoshana
-shoshann
-shostak
-shou
-shou-che
-shou-mei
-shoucher
-shoulars
-shouli
-shoun
-shouresh
-showers
-shreve
-shriberg
-shrieves
-shripad
-shriram
-shtivelm
-shtulman
-shu
-shu-chen
-shu-gong
-shu-mei
-shuang
-shuangli
-shubaly
-shuchen
-shue
-shuechia
-shuen
-shugong
-shuichi
-shuji
-shukor
-shukster
-shuler
-shull
-shultz
-shum
-shuman
-shumate
-shumei
-shunfeng
-shung
-shunhui
-shunmuga
-shunro
-shuo
-shupe
-shuqing
-shurlock
-shurtlef
-shurwood
-shuster
-shusuke
-shute
-shutler
-shutoku
-shutterb
-shuvra
-shuyen
-shwed
-shwu-chy
-shwuchyn
-shya-yun
-shyam
-shyan
-shyh-chi
-shyhchin
-shylo
-shyoko
-shypski
-shyu
-si
-siamack
-siamak
-siana
-sianna
-siaw
-sib
-sibbet
-sibbie
-sibby
-sibeal
-sibel
-sibella
-sibelle
-sibiga
-sibilla
-sibincic
-sibley
-sibyl
-sibylla
-sibylle
-sicard
-sich
-sichao
-sickle
-sickler
-sicotte
-sid
-siddall
-siddell
-siddiqui
-sides
-sidhu
-sidnee
-sidney
-sidone
-sidoney
-sidonia
-sidonnie
-sidor
-sidorovs
-sieben
-sieber
-siefert
-siegal
-siegel
-siegfrie
-siegle
-siegmund
-siegurd
-siehl
-sieling
-siemens
-siemer
-sienggo
-siew
-siew-kia
-siewert
-sifer
-siffre
-sig
-sigda
-sigfrid
-sigfried
-siggy
-sigismon
-sigismun
-sigmon
-sigmund
-signe
-sigrid
-sigurd
-sigurdso
-sigut
-sigvard
-siham
-sihem
-sik-yin
-sika
-sikander
-sikes
-sikita
-sikri
-sil
-silang
-silas
-silburt
-sile
-sileas
-silgardo
-silianu
-silieff
-silins
-sills
-sils
-silva
-silvain
-silvan
-silvana
-silvano
-silvanus
-silverma
-silverst
-silverth
-silveste
-silvestr
-silvia
-silvie
-silvio
-silwer
-sim
-simaan
-simanski
-simard
-simard-n
-simcha
-simcoe
-simcox
-sime
-simen
-simeon
-simeone
-simhan
-simion
-simkin
-simler
-simmonds
-simmons
-simms
-simon
-simon-ch
-simon-pu
-simona
-simone
-simonett
-simonian
-simonne
-simonovi
-simons
-simonsen
-simpkin
-simpson
-simren
-sims
-simser
-simson
-simulati
-simzer
-sina
-sinanan
-sinasac
-sinchak
-sinchau
-sinclair
-sinclare
-sindee
-sing
-sing-pin
-singbeil
-singer
-singh
-singhal
-singham
-singires
-singyu
-sinh
-sinha
-sinkfiel
-sinkovit
-sinnett
-sinnott
-sinoyann
-sinyor
-siobhan
-siomalas
-siotong
-sioux
-siouxie
-siperco
-sipes
-siping
-sipple
-sir
-sirevici
-siripong
-sirojith
-sisely
-sisile
-sisk
-siso
-sissela
-sissie
-sissy
-sist
-sitar
-sitch
-sitler
-siu
-siu-kwok
-siu-ling
-siu-man
-siusan
-siv
-siva
-sivaji
-sivasoth
-siward
-sizto
-sj
-sjaak
-sjerps
-sjouke
-skaff
-skaftaso
-skaggs
-skalski
-skanes
-skaret
-skariex
-skedelsk
-skeeter
-skef
-skell
-skelly
-skene
-skeoch
-skerlak
-skerry
-skeuse
-skiba
-skiclub
-skillen
-skillman
-skinner
-skip
-skipp
-skipper
-skippie
-skippy
-skipton
-sklower
-skoberne
-skof
-skopliak
-skrebels
-skriverv
-skrobans
-skrobeck
-skruber
-skuce
-skuratow
-skwarok
-sky
-skye
-skylar
-skyler
-slaa
-slabaugh
-slaby
-slade
-sladek
-slagel
-slartiba
-slatteng
-slattery
-slautter
-slavin
-sldisk
-sleeman
-sleeth
-slempers
-slick
-slinkard
-slinowsk
-sliter
-sloan
-sloane
-slobin
-sloboda
-slobodia
-slobodri
-slonosky
-slotnick
-slozil
-sluis
-slunder
-slusser
-sly
-slyteris
-smale
-smalltal
-smallwoo
-smecca
-smedema
-smeenk
-smelters
-smerdell
-smerek
-smid
-smine
-smit
-smita
-smith
-smithdea
-smithson
-smits
-smitty
-smolin
-smook
-smoot
-smothers
-smrke
-smrke-su
-smuda
-smulders
-smyrl
-smyth
-smythe
-snair
-snapper
-snarr
-snead
-snedden
-snedeker
-snehal
-snelgrov
-snelling
-snider
-sniderma
-snipes
-snips
-snodgras
-snoke
-snorri
-snowden
-snuggs
-snyder
-soard
-sobchuk
-sobczak
-sobeck
-sobel
-sobiesia
-sobitha
-sobkow
-sobolak
-sobolews
-sobon
-sochovka
-socorrit
-socrates
-sodano
-soderber
-sodhi
-soebowo
-soegiono
-sofeya
-soffa
-sofia
-sofie
-sofoklis
-soh
-sohaib
-sohail
-sohal
-sohale
-sohayla
-sohier
-sohni
-sohns
-sohota
-soiffer
-soin
-sojka
-sojkowsk
-sokolows
-sokyrko
-sol
-solai
-solange
-soldera
-solheim
-soliman
-solita
-solkoff
-sollee
-sollie
-sollman
-solly
-solman
-solodko
-solomon
-solovay
-solski
-soman
-somani
-somenzi
-somera
-somers
-somerset
-somervil
-somisett
-sommer
-sommerdo
-sommerfe
-sompong
-somppi
-somsak
-son
-sonbol
-sondra
-sondueim
-song-cha
-song-ho
-songchar
-songho
-songnian
-sonhing
-sonia
-sonier
-sonja
-sonne
-sonni
-sonnie
-sonnnie
-sonny
-sono
-sonoda
-sonoe
-sonya
-soo
-sood
-soohong
-soohoo
-sook
-sookdeo
-sooley
-soong
-soonhoi
-sophey
-sophi
-sophia
-sophie
-sophroni
-sorathia
-sorbi
-sorcha
-soreanu
-soren
-sorensen
-soriano
-sorin
-sorkin
-soroker
-sorrel
-sorrell
-sorrenti
-sos
-sosa
-sosanna
-sossaman
-sotelo
-sotiriad
-sotiris
-soto
-sotos
-souba
-soucie
-soucy
-sougata
-souheil
-soulef
-soules
-soullier
-soumis
-soumitra
-sounya
-souphala
-sources
-souren
-sourin
-sourisse
-sourour
-sousa
-soussa
-southard
-souther
-southon
-southwor
-souza
-sova
-soweidan
-sowry
-soyeh
-soyland
-soyong
-soyster
-soyuer
-space
-spallin
-spann
-spannbau
-sparacio
-sparkes
-sparks
-sparksma
-sparky
-spass
-spaugh
-speakec
-speaker
-spearman
-spearpoi
-spears
-specs
-speedy
-speer
-speers
-speight
-spejewsk
-spence
-spencer
-spense
-spenser
-sperman
-spessot
-spicer
-spickelm
-spieker
-spieler
-spight
-spike
-spilchak
-spillane
-spily
-spindler
-spinelli
-spingola
-spinks
-spirakis
-spirkovs
-spiros
-spisak
-spitzer
-spivey
-splitt
-spohn
-spolar
-sponagle
-sponchia
-spooner
-spragg
-spraggin
-sprague
-sprandel
-sprayber
-spriggs
-spriging
-springth
-sprott
-sproul
-sproule
-sprouse
-spruell
-sprules
-sprunger
-spudboy
-spurlin
-spurlock
-spurway
-spy
-spyridon
-spyros
-squires
-squizzat
-sr
-srawan
-src
-sreedhar
-sri
-sridaran
-sridevi
-sridhar
-sridhara
-srihari
-srikanth
-srikrish
-srimurti
-srinath
-srini
-sriniuas
-srinivas
-sriram
-sriranja
-srirupa
-sriv
-srivasta
-srivatsa
-sroczyns
-ssi
-ssington
-st
-st-amour
-st-denis
-st-louis
-st-marti
-st-onge
-st-pierr
-st.
-st.clair
-st.denis
-st.germa
-st.jacqu
-st.john
-st.laure
-st.louis
-st.pierr
-st.vil
-st_james
-staats
-stabilit
-stace
-stacee
-stacey
-stach
-stachowi
-staci
-stacia
-stacie
-stackpol
-stacy
-stadelme
-stadler
-stafani
-staffard
-staffeld
-staffing
-stafford
-staford
-stagger
-staggs
-stagmier
-stahl
-stahly
-stainbac
-staley
-stalin
-stallabr
-stallcup
-stalling
-stalter
-stamboul
-stampfl
-stampley
-stamps
-stan
-stanciu
-stanczyk
-standard
-standel
-standen
-standfor
-standrin
-stanfiel
-stanford
-stange
-stanisla
-stanke
-stanleig
-stanley
-stanly
-stansber
-stansbur
-stansby
-stansell
-stansfie
-stanton
-stanulis
-stanwood
-stapenho
-staples
-star
-starbuck
-staring
-starkaus
-starkeba
-starkes
-starks
-starla
-starlene
-starlet
-starlin
-starnes
-starowic
-starr
-stars
-starsdps
-starzman
-stasaski
-stasiak
-stasney
-stastny
-stasyszy
-stat
-staten
-stateson
-statile
-statisti
-staton
-stavro
-stavros
-stayton
-stclair
-stctest
-stds
-ste
-ste-mari
-stearn
-stearne
-stearns
-stebbing
-steckley
-steede
-steele
-steelman
-steen
-steenbur
-steene
-steeves
-stefa
-stefan
-stefana
-stefanac
-stefania
-stefanie
-stefano
-steffane
-steffen
-steffens
-steffes
-steffey
-steffi
-steffie
-steffy
-stegall
-steggall
-stegman
-stegmuel
-stehen
-stehr
-steidel
-steiert
-steinar
-steinbac
-steinber
-steinhar
-steip
-stejskal
-steklasa
-stelcner
-stella
-stellita
-stellwag
-stemmler
-stender
-stennett
-stenson
-stensrud
-stepchuk
-steph
-stepha
-stephan
-stephana
-stephane
-stephani
-stephann
-stephans
-stephanu
-stephany
-stephe
-stephen
-stepheni
-stephens
-stephi
-stephie
-stephine
-stepler
-stepp
-steranka
-stercyk
-sterczyk
-sterescu
-stergios
-sterian
-sterling
-stern
-sterne
-stesha
-steski
-stetner
-stetson
-stetter
-stettner
-stevan
-stevana
-stevanov
-steve
-steven
-stevena
-stevens
-stevenso
-stevie
-stevy
-stew
-steward
-stewart
-stewart-
-sticklan
-sticpewi
-stiglitz
-stiles
-stillman
-stillwel
-stimler
-stina
-sting
-stinky
-stinson
-stinzian
-stirling
-stirrett
-stites
-stjohn
-stobaugh
-stock
-stocker
-stocks
-stockton
-stockwel
-stodart
-stoddard
-stoelzle
-stoevsky
-stoffels
-stoker
-stokes
-stokker
-stokoe
-stokoski
-stolzle
-ston
-stone
-stonebra
-stonehou
-stoner
-stonos
-stooke
-storace
-storelli
-storey
-storm
-stormi
-stormie
-stormy
-storrie
-story
-stotts
-stotz
-stouder
-stough
-stovall
-stover
-stowe
-stoyles
-strachan
-strackho
-strader
-straka
-strandbe
-strandlu
-strannem
-strasser
-stratfor
-stratton
-straub
-strauch
-strauss
-strautma
-strawczy
-strayhor
-streater
-streatfi
-streibel
-streight
-streng
-strickla
-strider
-strober
-strock
-stroemer
-strohmey
-strom
-stronski
-stropp
-stroud
-stroupe
-strube
-struble
-strucche
-strudwic
-struzyns
-stu
-stuart
-stubblef
-stubbs
-stuckey
-stude
-student
-studer
-stults
-stumpf
-sturdiva
-sture
-sturrock
-stutts
-su
-su-xin
-suany
-suarez
-suat
-subasing
-subhash
-subhashi
-subhi
-subhra
-subhrans
-subi
-subick
-subissat
-subitha
-submital
-subodh
-subra
-subraman
-subroto
-subsara
-subu
-sucha
-suchitra
-suchocki
-suda
-sudabeh
-sudan
-sudbey
-sudbury
-suddarth
-sudeep
-sudesh
-sudha
-sudhakar
-sudhir
-sudip
-sue
-sue-joe
-sue-may
-sueanne
-suejoe
-sueling
-suellen
-suen
-suer
-suess
-sufcak
-suffern
-sugandi
-sugarbro
-sugarman
-sugih
-sugihara
-suh
-suha
-suhail
-suharly
-suhas
-suilin
-suiping
-suitt
-sujay
-suk-ho
-suk-jae
-suk-yin
-sukey
-sukhendu
-sukho
-sukhwant
-suki
-sukjae
-sukku
-sukumar
-sula
-sulatyck
-sule
-sulewski
-suliguin
-sullivan
-sully
-sultan
-suman
-sumanth
-sumaryan
-sume
-sumi
-sumit
-sumitro
-summach
-summerli
-summers
-sumner
-sumpter
-sunatori
-sundar
-sundaram
-sundares
-sunderla
-sundra
-sung
-sung-cho
-sung-sup
-sungchin
-sungchon
-sunghae
-sungki
-sungkyoo
-sungsup
-sunil
-sunjay
-sunnie
-sunning
-sunny
-sunshine
-sunstrum
-suomela
-supervis
-support
-suprick
-supriya
-supriyo
-sura
-surazski
-surber
-surendra
-suresh
-suria
-surinder
-surowani
-surray
-surreau
-surridge
-sursal
-survey
-surya
-susan
-susana
-susanett
-susann
-susanna
-susannah
-susanne
-susanto
-susette
-susi
-susick
-susie
-susil
-sussie
-susumu
-susy
-sutardja
-sutarja
-sutarwal
-sutcliff
-suter
-sutera
-sutherla
-suthers
-sutija
-sutphen
-sutter
-sutterfi
-sutterli
-sutton
-suu
-suvanee
-suwala
-suwanawo
-suwandi
-suxin
-suyama
-suykens
-suyog
-suzan
-suzane
-suzann
-suzanna
-suzanne
-suzette
-suzi
-suzie
-suzuki
-suzy
-svalesen
-svante
-sven
-svend
-svenn-er
-svensson
-sventek
-svetlana
-svilans
-svm-bnrm
-svo
-svr
-swact
-swaden
-swails
-swaine
-swamy
-swandi
-swann
-swanson
-swanston
-swaranji
-swartz
-swazey
-swd
-swearing
-swee-joo
-sweeney
-sweetnam
-swen
-swenberg
-swensen
-swenson
-swepston
-swiat
-swiatkow
-swick
-swidersk
-swinamer
-swinburn
-swinkels
-swinks
-swinney
-swinson
-swinwood
-swisher
-switchin
-switzer
-swope
-swr
-swyer
-sy
-syal
-syamala
-sybil
-sybila
-sybilla
-sybille
-sybyl
-sycha
-syd
-sydel
-sydelle
-sydeman
-sydney
-sydnor
-sydor
-sydoryk
-syed
-sykes
-syl
-sylas
-sylva
-sylvain
-sylvan
-sylveste
-sylvestr
-sylvia
-sylvie
-sylvio
-sym
-syman
-symen
-symon
-symons
-syndra
-synful
-synness
-syposz
-syres
-syrett
-sys
-sysadmin
-sysint
-syssuppo
-systems
-systest
-syun
-syyed
-szabo
-szamosi
-szaplonc
-szaran
-szeto
-sziladi
-szkarlat
-szopinsk
-szot
-szpakows
-szpilfog
-sztein
-szuminsk
-szura
-szymansk
-szypulsk
-ta
-ta-sung
-tab
-tabaja
-tabalba
-tabatha
-tabb
-tabbatha
-tabbert
-tabbi
-tabbie
-tabbitha
-tabby
-taber
-tabina
-tabitha
-tabl
-tabler
-tables
-tabor
-tac
-tachih
-tacitus
-tad
-tadayuki
-tadd
-taddeo
-taddeusz
-taddio
-tadeas
-tadeo
-tades
-tadeusz
-tadevich
-tadge
-tadio
-tadlock
-tae
-tae-ho
-tae-hwan
-taeho
-taehwan
-taffy
-taggart
-taghizad
-tague
-tahamont
-tahani
-taharudd
-taheri
-tahir
-tahsin
-tai
-tai-jen
-tailinh
-tailor
-taina
-tait
-taite
-taiwana
-tajbakhs
-tak
-tak-wai
-takagi
-takahash
-takahisa
-takako
-takao
-takashi
-takashim
-takata
-takayuki
-takefman
-takehiko
-takeo
-takeshim
-takeuchi
-taki
-takis
-takiyana
-tal
-talbert
-talbot
-talbott
-talcott
-talevi
-talia
-talis
-tallett
-tallia
-tallie
-tallou
-tallulah
-tally
-talmont
-talmy
-talton
-talya
-talyah
-tam
-tamar
-tamara
-tamarah
-tamarell
-tamaresi
-tamarra
-tamas
-tamasi
-tamer
-tamera
-tami
-tamiko
-tamir
-tamma
-tammara
-tammaro
-tammi
-tammie
-tammy
-tamqrah
-tamra
-tamrazia
-tamura
-tan
-tan-atic
-tana
-tanaka
-tanchak
-tancordo
-tandberg
-tandi
-tandie
-tandiono
-tandiwe
-tandy
-tanferna
-tanglao
-tangren
-tanhya
-tani
-tania
-tanio
-tanir
-tanitans
-tanja
-tann
-tanner
-tanney
-tannie
-tanniere
-tanny
-tansy
-tanya
-tao
-tap
-tapani
-tape
-tapner
-tapp
-tappende
-tappert
-tapsell
-tara
-tarah
-tarak
-taralp
-taraneh
-tarant
-taranto
-taraschu
-tarasewi
-tardif
-tardiff
-tardioli
-tarek
-taren
-tareq
-targosky
-tarik
-tariq
-tarlamis
-tarle
-tarmi
-tarnai
-tarng
-taro
-tarof
-tarquini
-tarra
-tarrah
-tarrance
-tarrant
-tarsky
-tarte
-tarus
-tarver
-taryn
-taryna
-tas
-taschere
-tash
-tasha
-tasia
-taskforc
-taspatch
-tassi
-tasso
-tassy
-tasuk
-tasung
-tat
-tata
-tatangsu
-tatar
-tate
-tatemich
-tates
-tateyama
-tatiana
-tatiania
-tats
-tatsdocn
-tatsman
-tatsugaw
-tatsuya
-tattenba
-tatum
-tatyana
-tauberg
-taul
-tauna
-taurus
-tauscher
-tauvia
-tavana
-tavares
-taverner
-tavis
-tawauna
-tawfik
-tawnya
-tawsha
-taxashi
-tay
-tayeb
-tayfun
-taylor
-taylor-h
-tayyab
-tc
-tchangid
-tchir
-td
-tdr
-te-chih
-te-hsiu
-te-wei
-teacher
-teador
-teague
-team
-teasley
-tebbe
-tebinka
-tec
-tech
-techih
-technica
-technoso
-teck
-tecklenb
-ted
-tedd
-tedda
-teddi
-teddie
-teddy
-teder
-tedi
-tedie
-tedman
-tedmund
-tedra
-tedrick
-teed
-teena
-teerdhal
-teetwo
-teh
-tehchi
-tehsiu
-teichman
-teiichi
-tein-min
-teinmin
-teirtza
-teitelba
-tej
-tejada
-tejal
-tejani
-tel
-telco
-tele
-telecom
-telesis
-telex
-telfer
-telidis
-telke
-tello
-tellup
-telos
-telva
-temp
-temple
-temple-d
-templeto
-ten-huei
-tena
-tencer
-teng
-tenhuei
-teniola
-tenna
-tennant
-tenney
-tennyson
-teo
-teodoor
-teodor
-teodora
-teodoric
-teodoro
-tera
-terakado
-teran
-terangue
-terence
-terencio
-teresa
-terese
-teresina
-teresita
-teressa
-terez
-teri
-teriann
-terminal
-terneus
-terr
-terra
-terrade
-terrance
-terranel
-terranov
-terrel
-terrell
-terrence
-terresa
-terri
-terri-jo
-terri-le
-terrie
-terrijo
-terrilei
-terrill
-terry
-terrye
-terryl
-tersina
-teruko
-teruo
-teruyuki
-terwey
-terwilli
-terza
-terzian
-tesa
-tesch
-tesfagab
-tesfamar
-tesh
-tesla
-tess
-tessa
-tessi
-tessie
-tessier
-tessler
-tessty
-tessy
-testa
-testagc
-tester
-testing
-testingp
-testntmv
-testsds
-testtool
-tetrault
-tetreaul
-tetsukaz
-tetsumo
-tetsuo
-tetsuya
-tetsuyuk
-teufel
-tevlin
-tewksbur
-tex
-teymour
-thabet
-thac
-thach
-thacher
-thacker
-thad
-thaddeus
-thaddus
-thadeus
-thai
-thain
-thaine
-thais
-thaker
-thakor
-thakur
-thaler
-thalia
-tham
-thames
-thane
-thang
-thanh
-thanh-ha
-thanh-ho
-thanh-hu
-thanh-qu
-thanh-so
-thanh-ti
-thanos
-thao
-tharby
-tharring
-thatch
-thatcher
-thatte
-thaxter
-thaxton
-thayer
-thayne
-the
-the worl
-thea
-theadora
-thebault
-theda
-thedford
-thedora
-thedric
-thedrick
-thege
-theis
-thekla
-thelma
-theloose
-themann
-theo
-theobald
-theochar
-theodor
-theodora
-theodore
-theodori
-theodosi
-theofani
-theohari
-theologo
-theoret
-thera
-theresa
-therese
-theresin
-theresit
-theressa
-theriaul
-therien
-therine
-theriot
-theron
-therrien
-thersa
-thevenar
-thewalt
-thi
-thi-cuc
-thia
-thibaud
-thibault
-thibaut
-thibeaul
-thibert
-thibodea
-thibon
-thiebaut
-thieken
-thiel
-thiem
-thien
-thierry
-thiery
-thies
-thiessen
-thieu
-thifault
-thill
-thimothy
-thinh
-think
-thirugna
-this dir
-thisdel
-thisner
-thoai
-thoi
-thom
-thoma
-thomaier
-thomalla
-thomas
-thomasa
-thomasi
-thomasia
-thomasin
-thomason
-thomasse
-thomassi
-thombors
-thomey
-thomlins
-thompson
-thoms
-thomsen
-thomson
-thon
-thondanu
-thor
-thoreau
-thorin
-thorley
-thorman
-thorn
-thornber
-thornbur
-thorndik
-thorne
-thornie
-thornley
-thornton
-thorny
-thorpe
-thorsen
-thorslun
-thorson
-thorstei
-thorsten
-thorvald
-those
-threader
-thrift
-throgmor
-thu
-thuan
-thuesen
-thum
-thumm
-thuong
-thurgood
-thurley
-thurman
-thurstan
-thurston
-thuswald
-thuthuy
-thuy
-thyagara
-ti
-ti-cheng
-ti-jeun
-tian
-tianbao
-tiberghi
-tibi
-tibold
-tibor
-tice
-ticheng
-ticzon
-tidball
-tidd
-tidwell
-tiebold
-tiebout
-tiedeman
-tiefenth
-tiegs
-tien
-tien-bue
-tien-chi
-tiena
-tienbuen
-tienchie
-tienyow
-tierney
-tiertza
-tieu
-tiff
-tiffani
-tiffanie
-tiffany
-tiffi
-tiffie
-tiffy
-tigg
-tigger
-tigran
-tihanyi
-tiina
-tijeun
-tilak
-tilbenny
-tilda
-tilden
-tildi
-tildie
-tildy
-tiler
-tilk
-tille
-tiller
-tilley
-tillie
-tillman
-tilly
-tilmon
-tilson
-tilton
-tim
-timeshee
-timi
-timleck
-timler
-timm
-timmer
-timmerma
-timmi
-timmie
-timmins
-timmons
-timms
-timmy
-timo
-timofei
-timos
-timoteo
-timothea
-timothee
-timotheu
-timothy
-timpson
-tims
-timsit
-timtsche
-tin
-tina
-tine
-tineke
-tiner
-ting
-ting-shu
-ting-tin
-ting-yu
-tingshuo
-tingting
-tingyu
-tingyue
-tini
-tinney
-tino
-tintor
-tiny
-tio
-tiong-ho
-tip
-tiphani
-tiphanie
-tiphany
-tippett
-tipping
-tippy
-tipton
-tirrell
-tischhau
-tischler
-tisdale
-tisdall
-tiseo
-tish
-tisha
-titian
-tito
-titos
-titus
-tiu
-tiwari
-tiziano
-tjahjadi
-tjia
-tjiong
-tjoe
-tjong
-toan
-toastmas
-toba
-tobe
-tobey
-tobi
-tobiah
-tobias
-tobie
-tobin
-tobit
-toby
-tobye
-tod
-todaro
-todd
-toddi
-toddie
-toddy
-todloski
-todo
-todorovi
-toerless
-toews
-toft
-togasaki
-tognoni
-tohama
-toi
-toiboid
-toinette
-tolar
-toles
-toletzka
-tolgyess
-tolle
-tollefse
-tolson
-tolstoy
-toly
-tom
-toma
-tomacic
-tomack
-tomacruz
-tomar
-tomas
-tomasett
-tomasina
-tomasine
-tomaso
-tomassi
-tomasz
-tomaszew
-tombul
-tome
-tomes
-tomi
-tomkin
-tomlin
-tomlinso
-tommaso
-tommi
-tommie
-tommy
-tomochek
-tomohiro
-tomoyosh
-tompkins
-tomy
-tonelli
-toney
-tong
-tongder
-toni
-tonia
-tonie
-tonkovic
-tonnie
-tonny
-tonogai
-tonu
-tony
-tonya
-tonye
-tookey
-toolbox
-toole
-tooley
-toolroom
-tools
-toolset
-toomer
-toone
-toop
-toothman
-tootsie
-tooyserk
-toperzer
-topgun
-toplis
-topo
-topol
-topp
-tor
-torain
-torbert
-torcac
-tordocs
-tore
-torey
-tori
-torian
-torie
-toril
-torin
-tornes
-tornqvis
-torok
-torr
-torrance
-torre
-torrealb
-torrell
-torrence
-torrens
-torres
-torrey
-torrie
-torrin
-torry
-torsten
-torunn
-tory
-tosca
-toscano
-tosczak
-toshach
-toshachn
-toshi
-toshiaki
-toshihir
-toshinar
-toss
-tostenso
-tota
-totaro
-toth
-totino
-totman
-totten
-totti
-touati
-touchett
-toufic
-tougas
-toulson
-toupin
-tousigna
-toussain
-tova
-tovah
-tove
-towaij
-towers
-towill
-towler
-towles
-town
-towney
-townie
-townley
-towns
-townsel
-townsend
-townson
-towny
-towsley
-toyanne
-toyoji
-toyooka
-tprl
-trace
-tracee
-traces
-tracey
-tracey-m
-trachsel
-traci
-tracie
-tracy
-tracz
-trader
-trae
-trafford
-trahan
-trainer
-training
-trainor
-trajan
-tramar
-trame
-tran
-tranfagl
-trang
-transki
-translat
-tranter
-trasmund
-traugott
-traulich
-traut
-trautman
-travel-p
-travelpe
-traver
-travers
-travis
-travus
-traxler
-trayer
-traylor
-traynor
-trecia
-tredenni
-tredway
-treen
-trees
-trefor
-trefry
-trefts
-tregenza
-treisman
-trek @
-tremain
-tremaine
-tremayne
-tremblay
-tremewan
-trenna
-trent
-trentadu
-trenton
-tres
-tres-sup
-tresa
-trescha
-trese
-tresrch
-tressa
-trev
-trevar
-trever
-trevetha
-trevitt
-trevor
-trey
-tri
-trial
-triantap
-tricci
-tricia
-trickett
-tricord
-trieu
-trif
-trifiro
-triggian
-trijanto
-trimble
-trina
-trindy
-trinh
-trinidad
-trink
-trip
-tripier
-tripleho
-tripp
-tripps
-tris
-trish
-trisha
-trisic
-trisko
-trista
-tristam
-tristan
-tristano
-trittler
-tritton
-trivedi
-trix
-trixi
-trixie
-trixy
-trocchi
-trochu
-troesch
-trojak
-tromm
-trong
-tropea
-tropeano
-trotsky
-trotter
-trottier
-troubors
-troup
-trowbrid
-troy
-troyvoi
-trpisovs
-trstram
-tru-fu
-truchon
-truda
-trude
-trudel
-trudell
-trudey
-trudi
-trudie
-trudy
-truebloo
-truelove
-trueman
-truesdal
-truffer
-trujillo
-trula
-trull
-truls
-trumaine
-truman
-trumann
-trumble
-trung
-trungy
-trunley
-truong
-truran
-trussler
-trutsche
-truus
-tryfon
-trying
-tsai
-tsai-hun
-tsaihung
-tsakalis
-tsalikis
-tsang
-tsao
-tsay
-tschaja
-tschann
-tse
-tse-lian
-tseliang
-tseng
-tsenter
-tsern
-tsiakas
-tsing
-tsitsior
-tsitsons
-tso
-tsolas
-tsong-li
-tsonglia
-tsonos
-tsortos
-tsoucas
-tsugio
-tsui
-tsuji
-tsuk
-tsun-kuo
-tsun-yuk
-tsuneo
-tsung
-tsunkuo
-tsunoda
-tsunyuk
-tsuyoshi
-ttisuppo
-tu
-tuan
-tubb
-tuck
-tucker
-tuckie
-tucky
-tudo
-tudor
-tue
-tuen
-tuesday
-tuffo
-tufford
-tuhina
-tuhr
-tulga
-tulio
-tulip
-tulk
-tull
-tulley
-tullius
-tullo
-tully
-tun-lin
-tuna
-tunali
-tung
-tung-min
-tunghsin
-tungming
-tunon
-tuoi
-tuok
-tuong
-tupas
-tupling
-turbes
-turbyfil
-turchan
-turcot
-turcotte
-turgay
-turing
-turkeer
-turkey
-turki
-turkki
-turkovic
-turnbull
-turner
-turney
-turpin
-turrubia
-turunen
-turus
-tushar
-tussey
-tusting
-tutt
-tuttle
-tuxford
-tuyen
-tuyetphu
-twa
-twana
-twarog
-tweddle
-tweetie
-twidale
-twiggy
-twila
-twiss
-twitty
-twolan
-twx
-twyla
-twyman
-twynham
-twyver
-txp
-ty
-tyack
-tybalt
-tybi
-tybie
-tyda
-tye
-tyke
-tyler
-tymchuk
-tymon
-tymothy
-tynan
-tyndall
-tyne
-tyner
-typer
-tyra
-tyrance
-tyroler
-tyron
-tyronda
-tyrone
-tyrrell
-tyrus
-tyson
-tzanetea
-tzeng
-tzong-sh
-tzong-ya
-tzongshi
-tzongyan
-tzou
-tzuang
-tzung
-uae
-uathavik
-uberig
-uchida
-uchiyama
-udale
-udall
-uday
-udaya
-udayasek
-ude
-udell
-uecker
-ueda
-uehara
-ueyama
-uffner
-ufomadu
-ugo
-uguccion
-ugwa
-uhl
-uhley
-uhlhorn
-uhlig
-ukena
-ula
-ulberto
-ulf
-ulgen
-uli
-ulick
-ulises
-ulla
-ully
-ulric
-ulrica
-ulrich
-ulrick
-ulrika
-ulrikaum
-ulrike
-ultrason
-uludamar
-ulysses
-umakanta
-umakanth
-umberto
-umeeda
-umeh
-umeko
-umesh
-umetsu
-umphres
-una
-una-mae
-unabr.di
-underwoo
-unger
-unitt
-unix
-unixsupp
-unkefer
-unkles
-unreg
-unsoy
-unxlb
-upchurch
-updt
-upen
-uppal
-upshaw
-upton
-urata
-urbain
-urban
-urbanic
-urbano
-urbanowi
-urbanus
-urbashi
-urbick
-urbielew
-urbshas
-uresh
-uri
-uriah
-uriel
-urnes
-urow
-urquhart
-urs
-ursa
-ursala
-ursola
-urson
-ursula
-ursulina
-ursuline
-urwin
-us
-usa
-useng
-user
-usman
-usrouter
-uswrsd
-usyk
-uszynski
-uta
-utah
-utas
-utilla
-utpal
-utpala
-utsumi
-uunko
-uvieghar
-uyar
-vachel
-vacher
-vachiran
-vachon
-vaclav
-vaculik
-vadala
-vadali
-vadi
-vadim
-vafaie
-vaglio-l
-vahary
-vahdat
-vahe
-vahedi
-vahid
-vaid
-vail
-vaillanc
-vaillant
-vairavan
-vajentic
-vajih
-vakhshoo
-vakili
-val
-valaree
-valaria
-valcourt
-valda
-valdemar
-valdez
-vale
-valeda
-valencia
-valene
-valenka
-valenta
-valente
-valentia
-valentij
-valentik
-valentin
-valenzia
-valera
-valeria
-valerie
-valerien
-valerio
-valerius
-valery
-valerye
-valia
-valida
-valin
-valina
-valinda
-valiquet
-valiveti
-valko
-valkyrie
-valla
-vallath
-valle
-vallee
-vallejos
-vallenty
-vallet
-valli
-valliani
-vallie
-vallier
-valliere
-vallipur
-vallozzi
-vally
-valma
-valois
-valorie
-valry
-valvasor
-van
-van alph
-van alst
-van atta
-van bake
-van bent
-van coon
-van den
-van der
-van dyke
-van es
-van eyk
-van flee
-van gaal
-van hast
-van hols
-van hoy
-van huls
-van kast
-van kess
-van klin
-van late
-van leeu
-van loon
-van mans
-van mete
-van nest
-van oors
-van orde
-van phil
-van rijn
-van rijs
-van scho
-van schy
-van sick
-van terr
-van veen
-van vrou
-van weri
-van-king
-vanaman
-vanasse
-vance
-vanda
-vandagri
-vandenbe
-vandenbo
-vandenhe
-vandenki
-vanderbi
-vanderbo
-vanderbu
-vanderge
-vanderhe
-vanderho
-vanderpo
-vanderve
-vanderwe
-vandeval
-vandevan
-vandeven
-vandewat
-vandewou
-vandomme
-vandoorn
-vandusen
-vanessa
-vangaste
-vania
-vanity
-vankoote
-vanlaar
-vanliew
-vann
-vanna
-vanni
-vannie
-vanny
-vanpatte
-vanstaal
-vanstory
-vanta
-vanter
-vanwormh
-vanwyche
-vanya
-vanzella
-varady
-varaiya
-varano
-varda
-vardy
-varennes
-vargas
-vargo
-varia
-varkel
-varkey
-varley
-varmazis
-varsava
-vartanes
-varughes
-varujan
-vasan
-vasantha
-vasarhel
-vaserfir
-vasil
-vasile
-vasili
-vasiliad
-vasiliki
-vasilis
-vasilopo
-vasily
-vason
-vasoufz
-vassili
-vassilik
-vassilis
-vassily
-vassos
-vastine
-vasu
-vasudeva
-vaswani
-vaterlau
-vaters
-vaughan
-vaughn
-vavarout
-vavroch
-vawter
-vax
-vazirani
-vea
-veale
-veals
-veciana
-veck
-ved
-veda
-vedant
-veedell
-veen
-veena
-vega
-vehling
-veillett
-veilleux
-veit
-vejar
-veklerov
-veksler
-vela
-velasque
-vele
-veleta
-velez
-veljko
-vella
-velline
-vellino
-velma
-veloria
-veloz
-velsher
-velvet
-vempati
-ven
-venbakm
-vendette
-veneice
-veness
-veng
-venger
-venguswa
-venier
-venita
-venjohn
-venkat
-venkata
-venkatak
-venkatar
-venkates
-venkatra
-venne
-venner
-venning
-vennos
-ventrone
-ventura
-venturin
-venus
-vera
-veradis
-verardi
-verch
-verde
-verdi
-verdonse
-vere
-verena
-verene
-verge
-verghese
-vergil
-verheyde
-verhoeve
-verhotz
-veriee
-verifica
-verile
-verina
-verinder
-verine
-verkroos
-verla
-verlyn
-verma
-vermeesc
-vermette
-vern
-verna
-verne
-vernen
-verney
-vernice
-verniece
-vernita
-vernon
-vernor
-verona
-veronica
-veronika
-veronike
-veroniqu
-verreau
-verrenne
-verrilli
-versace
-versteeg
-vertolli
-verville
-veryl
-verzilli
-veselko
-vesna
-vespa
-vester
-vesterda
-vetil
-vetrano
-vetrie
-vetter
-vettese
-vevay
-vexler
-vey
-veyrat
-vezeau
-vezina
-vi
-viano
-viau
-viavant
-vibeke
-vic
-vice
-vicente
-vicheara
-vick
-vickers
-vicki
-vickie
-vicky
-victoir
-victor
-victoria
-vicuong
-vida
-vidaurri
-videa
-vidhyana
-vidmer
-vidovic
-vidovik
-viduya
-vidya
-viegas
-vieger
-viehweg
-vieillar
-vieira
-vieiro
-viens
-viera
-vieregge
-vigeant
-viitanie
-vijai
-vijay
-vijaya
-vijayala
-vijya
-vik
-vikas
-viki
-vikki
-vikky
-vikram
-vikrant
-viktor
-viktoria
-vilas
-vilayil
-vilhan
-vilhelm
-vilhelmi
-vilis
-villanue
-villarea
-villella
-villeneu
-vilma
-vilmanse
-vilok
-vilozny
-vimal
-vimi
-vin
-vina
-vinas
-vinay
-vince
-vincent
-vincente
-vincents
-vincenty
-vincenz
-vincenzo
-vineet
-vinet
-viney
-vinh
-vinita
-vinnell
-vinni
-vinnie
-vinny
-vino
-vinod
-vinson
-viola
-violante
-viole
-violet
-violeta
-violetta
-violette
-vipi
-vipul
-viqar
-virani
-virant
-virchick
-virge
-virgie
-virgil
-virgilio
-virgina
-virginia
-virginie
-virgoe
-viriato
-viriya
-virk
-virko
-visentin
-vish
-vishal
-vishwa
-visiting
-viskanta
-visockis
-vispi
-vispy
-visser
-vistlik
-visvanat
-viswa
-viswamit
-vita
-vitacco
-vitaglia
-vital
-vite
-vithit
-vitia
-vito
-vitoria
-vittoria
-vittorio
-viv
-viva
-viveca
-vivek
-vivi
-vivia
-vivian
-viviana
-viviane
-vivianna
-vivianne
-vivie
-vivien
-viviene
-vivienne
-vivier
-viviyan
-vivyan
-vivyanne
-vlad
-vladamir
-vladdy
-vladica
-vladimir
-vladisla
-vlado
-vlahos
-vlanin
-vm
-vmbackup
-vmchange
-vmcord
-vmsuppor
-vmxa
-vo
-voadmin
-vodicka
-voduc
-voelcker
-vogel
-vogt
-voight
-voitel
-volchegu
-volfe
-volk
-volker
-volkmann
-volkmer
-vollmer
-volz
-von
-von ende
-von semm
-von zube
-voncanno
-vonck
-vonderha
-vondersc
-vonderwe
-vonlehmd
-vonni
-vonnie
-vonny
-vonreich
-vony
-vonzant
-voort
-vopalens
-vopni
-voros
-vosberg
-vosburg
-voss
-vosu
-vosup
-voula
-vowels
-vrabel
-vradmin
-vrbetic
-vreugden
-vries
-vrinda
-vrouwerf
-vu
-vucinich
-vuhoan
-vuignier
-vuncanno
-vuong
-vuquoc
-vyachesl
-vyaragav
-vyas
-vyjayant
-vyky
-vyza
-wa
-waals
-wacheski
-wachtste
-wacker
-wada
-wadasing
-waddell
-wadden
-waddick
-waddingt
-wade
-wadkins
-wadswort
-waespe
-waeyen
-wagage
-wager
-wagers
-waggoner
-waghorne
-waghray
-wagle
-wagner
-wagoner
-wahab
-wahbe
-wahju
-wai
-wai-bun
-wai-chau
-wai-chin
-wai-fah
-wai-hung
-wai-leun
-wai-man
-waichi
-waid
-waidler
-waifah
-waigh
-waihung
-wain
-waines
-wainwrig
-waissman
-wait
-waite
-waiter
-waitman
-waja
-wakabaya
-wakako
-wake
-wakefiel
-wakeham
-wakim
-walas
-walbridg
-walburga
-walchli
-wald
-waldemar
-walden
-waldick
-waldie
-waldo
-waldon
-waldron
-wales
-waletzky
-walford
-walia
-walid
-walker
-walkins
-walkley
-walkowia
-wallace
-wallache
-wallaert
-wallas
-wallbank
-waller
-walles
-walley
-wallgren
-wallie
-wallis
-walliw
-walls
-wally
-waloff
-walpole
-walrand
-walrond
-walser
-walsh
-walston
-walt
-walta
-waltdisn
-walter
-walters
-walther
-walton
-waltraud
-waly
-walz
-wambsgan
-wamozart
-wan
-wanda
-wandel
-wandie
-wandis
-wandojo
-wandsche
-waneta
-wang
-wanids
-wannell
-wanner
-wans
-wanzeck
-war
-warburg
-warburto
-ward
-warde
-warden
-wardle
-wardrop
-ware
-wares
-warfel
-wargnier
-warin
-waring
-wark
-warkenti
-warner
-warnock
-warnow
-warrello
-warren
-warriner
-warshaws
-wartman
-warun
-warwick
-waschuk
-waserman
-wash
-washburn
-washingt
-wasim
-wasitova
-wasley
-wasmeier
-wassel
-wasserma
-wassim
-wasson
-wasylenk
-wasylyk
-wat
-watanabe
-watchmak
-watchorn
-waterhou
-waterman
-waters
-watford
-watkins
-watkinso
-watmore
-watson
-watters
-wattier
-watts
-watznaue
-waucheul
-waugh
-waverley
-waverly
-way
-waybrigh
-wayez
-waylan
-wayland
-waylen
-wayler
-waylin
-wayling
-waylon
-wayman
-waymon
-wayne
-waytowic
-weagle
-weakley
-wealch
-weare
-wease
-weatherl
-weathers
-weaver
-web
-webb
-webber
-weber
-webster
-weckwert
-weddell
-wee-lin
-wee-seng
-wee-thon
-weedmark
-weeks
-wefald
-wefers
-wegener
-weger
-wegner
-wegrowic
-wehara
-wei
-wei-i
-wei-kun
-wei-tsig
-wei-yih
-weibust
-weicheng
-weichung
-weidar
-weidenbo
-weidenfe
-weider
-weidinge
-weidner
-weiguang
-weiheng
-weihs
-weihsing
-weii
-weijia
-weijie
-weikang
-weikuang
-weikun
-weil
-weilin
-weimin
-weimong
-weinbend
-weinberg
-weiner
-weingart
-weinkauf
-weiping
-weirich
-weisenbe
-weiser
-weiss
-weist
-weitsig
-weitz
-weitzel
-weiyih
-welbie
-welby
-welch
-weldon
-welham
-welker
-wellard
-welling
-wells
-wellstoo
-welsch
-welsford
-welsh
-welten
-wemple
-wen
-wen-chie
-wen-hann
-wen-juin
-wen-kai
-wen-lian
-wen-miin
-wen-shan
-wenbin
-wenchien
-wenchih
-wenda
-wendall
-wendel
-wendelin
-wendell
-wendi
-wendi-st
-wendie
-wendista
-wendling
-wendong
-wendt
-wendy
-wendye
-weng
-wenham
-wenhann
-wenjuin
-wenliang
-wenmiin
-wennan
-wennerst
-wenona
-wenonah
-wensel
-wenshan
-wensley
-wentwort
-wentzcov
-wenxi
-wenyon
-wenzel
-wepf
-weppler
-werewolf
-werick
-weringh
-werling
-werner
-wernher
-wernik
-werth
-wertz
-wery
-wes
-wesenber
-wesley
-wesolosk
-wesolows
-wessel
-wessell
-wesselma
-wesselow
-wessels
-wessenbe
-west
-westbroo
-westcott
-wester
-westfall
-westgart
-westlake
-westleig
-westley
-westmore
-weston
-weston-d
-westphal
-westwood
-wetherbe
-wettelan
-wetzel
-wever
-weyand
-weylin
-wga
-whalen
-whaley
-whang
-whatley
-wheatley
-wheaton
-wheeler
-wheelock
-whei-may
-wheimay
-whelan
-whelpdal
-whetston
-whetzel
-whey
-whey-min
-wheyming
-whidden
-whinnery
-whipple
-whipps
-whirpool
-whirter
-whisenhu
-whiskin
-whisler
-whit
-whitaker
-whitby
-whitcomb
-whited
-whitefor
-whitehur
-whiteman
-whitesid
-whitfiel
-whitfill
-whitford
-whiting
-whitlock
-whitman
-whitmore
-whitney
-whitsell
-whitt
-whittake
-whittam
-whitten
-whittier
-whitting
-whitton
-whitty
-whitwam
-whitwell
-whitwort
-whoi
-whyte
-wiatt
-wichers
-wichman
-wicht
-wichterl
-wickes
-wickham
-wickie
-widdicom
-widdis
-widdowso
-widener
-widianto
-widows
-widrig
-widuch
-wiebe
-wiebren
-wiederho
-wiedman
-wiedmann
-wiegand
-wieland
-wiele
-wienert
-wiens
-wiercioc
-wierzba
-wieser
-wiesje
-wieslaw
-wieslawa
-wiest
-wigderso
-wiggin
-wiggins
-wiggs
-wight
-wigle
-wignall
-wikkerin
-wiklund
-wil
-wilbert
-wilbur
-wilburt
-wilby
-wilcox
-wilczews
-wilde
-wildeman
-wilden
-wilder
-wilderma
-wildgen
-wildman
-wildon
-wileen
-wilek
-wilemon
-wilen
-wilenius
-wilensky
-wiley
-wilf
-wilford
-wilfred
-wilfrid
-wilgosh
-wilhelm
-wilhelmi
-wilhelms
-wilhelmu
-wilhoit
-wilie
-wilke
-wilken
-wilkerso
-wilkes
-wilkie
-wilkin
-wilkins
-wilkinso
-wilko
-wilks
-will
-willa
-willabel
-willamin
-willard
-willcock
-willcox
-willdon
-willeke
-willekes
-willem
-willemij
-willemse
-willenbr
-willets
-willett
-willetta
-willette
-willey
-willhoff
-willi
-william
-williams
-willie
-willifor
-willis
-willison
-willmore
-willmott
-willough
-willow
-willson
-willy
-willyt
-wilma
-wilmar
-wilmer
-wilmette
-wilmont
-wilmore
-wilnai
-wilona
-wilone
-wilow
-wilsey
-wilson
-wilt
-wilton
-wiltz
-wimberle
-wimbush
-wimmer
-win
-win-chyi
-wina
-winchest
-winchyi
-winde
-windham
-windom
-windowin
-windsor
-windy
-winerman
-winfield
-winfred
-wing
-wing-ki
-wing-man
-wing-tai
-wingar
-wingard
-wingate
-wingfiel
-wingo
-wingrove
-wingtai
-wini
-winicki
-winifiel
-winifred
-winje
-winklema
-winkler
-winlow
-winn
-winna
-winnah
-winne
-winni
-winnie
-winnifre
-winningh
-winningt
-winnipeg
-winny
-winona
-winonah
-winsberg
-winsborr
-winsky
-winslow
-winstead
-winston
-winterbe
-winters
-winthrop
-wintour
-wippel
-wiring
-wirth
-wiseman
-wishewan
-wisniews
-wissinge
-wissler
-wit
-witchlow
-witham
-withrow
-witkowsk
-witney
-witold
-witort
-wits
-witt
-witte
-wittich
-wittie
-wittik
-wittman
-witty
-witzel
-witzman
-witzmann
-wladysla
-woan
-wobbrock
-woei-pen
-woelffel
-woessner
-woinsky
-wojciech
-wojcik
-wojdylo
-wojnar
-wojtecki
-wokoma
-wolczans
-wolf
-wolfe
-wolfenba
-wolff
-wolfgang
-wolfie
-wolfman
-wolford
-wolfs
-wolfson
-wolfy
-wolk
-woll
-woloshko
-wolowidn
-wolska
-wolski
-wolter
-womack
-womble
-won
-won-uk
-wonda
-wong
-wonuk
-wood
-woodall
-woodford
-woodhall
-woodie
-woodley
-woodlief
-woodline
-woodman
-woodrow
-woods
-woodson
-woodward
-woody
-woodyer
-wooff
-woojin
-wook
-wookie
-woolery
-wooley
-woollam
-woolley
-woolwine
-woon
-wooster
-wooten
-wooters
-wootton
-worden
-words fr
-words in
-working
-world.fa
-wormald
-worms
-worobey
-woroszcz
-worpell
-worrall
-worsley
-worth
-worthing
-worthy
-wortman
-wozniak
-wpms
-wracher
-wragg
-wray
-wren
-wrennie
-wriggles
-wright
-wrigley
-writing
-wrobel
-wroblews
-wruck
-wsadmin
-wsbackup
-wu
-wuan
-wueppelm
-wuertele
-wun
-wunderli
-wurtz
-wyant
-wyatan
-wyatt
-wyble
-wycoff
-wydra
-wye
-wykoff
-wylie
-wyllie
-wylma
-wylo
-wyman
-wymard
-wyn
-wyndham
-wynes
-wynn
-wynne
-wynnie
-wynny
-wyrstiuk
-wyss
-wytenbur
-wyzga-ta
-xantippe
-xavier
-xaviera
-xayaraj
-xena
-xenia
-xenophon
-xenos
-xerxes
-xever
-xi-nam
-xi-xian
-xian
-xiang-se
-xiangsen
-xianjie
-xiao
-xiao-min
-xiaobing
-xiaofei
-xiaofeng
-xiaoguan
-xiaohui
-xiaojing
-xiaolei
-xiaolin
-xiaolong
-xiaomei
-xiaoping
-xiaowen
-xiaoxia
-xie
-xila
-ximenes
-ximenez
-xin
-xingchao
-xingdong
-xinlin
-xinyi
-xiong
-xiqing
-xixian
-xmssuppo
-xnew
-xongxong
-xpm
-xpmbld
-xpmbuild
-xu
-xuan
-xuan-lie
-xuefeng
-xueling
-xumin
-xuong
-xylia
-xylina
-xymenes
-ya-shu
-yabe
-yach
-yadollah
-yaeger
-yael
-yafa
-yaghutie
-yahia
-yahyapou
-yakibchu
-yakimovi
-yakir
-yalcin
-yale
-yali
-yalonda
-yamada
-yamamoto
-yamaoka
-yamashit
-yamato
-yamaura
-yamin
-yan
-yan-shek
-yan-zhen
-yanagida
-yanan
-yanaton
-yance
-yancey
-yancy
-yandell
-yanjun
-yank
-yankee
-yann
-yanna
-yannick
-yannis
-yano
-yanosik
-yanshek
-yansun
-yao
-yao-nan
-yaonan
-yaphet
-yaping
-yarber
-yarbroug
-yard
-yardley
-yardy
-yarlanda
-yarnell
-yaron
-yarosh
-yaroslav
-yasar
-yaser
-yashu
-yasmeen
-yasmin
-yassa
-yassar
-yassin
-yasuaki
-yasuhiro
-yasuko
-yasumasa
-yasuo
-yasushi
-yasuura
-yate
-yates
-yatin
-yatish
-yau
-yau-fun
-yau-mun
-yau-wu
-yaumun
-yaung
-yauwu
-yavar
-yavuz
-yawar
-yazdani
-yazdi
-yc
-ye-sho
-yea-ping
-yeager
-yeal
-yeaping
-yearwood
-yeaton
-yechezke
-yeck
-yedema
-yee
-yee-ning
-yeh
-yehuda
-yehudi
-yehudit
-yeirnie
-yelena
-yelvingt
-yemuna
-yen
-yen-heng
-yen-jhy
-yen-meng
-yendall
-yeng
-yenheng
-yenilmez
-yenjhy
-yenmeng
-yenor
-yeo
-yeo-hoon
-yeocheol
-yeohoon
-yeong-ch
-yeong-eo
-yeongchy
-yeongeon
-yerga
-yerigan
-yerneni
-yesho
-yetta
-yettie
-yetty
-yetung
-yeun
-yeun-jyr
-yeung
-yeunjyr
-yevette
-yew-shin
-yewshing
-yezheng
-yezi
-yhu-tin
-yhutin
-yi
-yi-min
-yiannis
-yie-tarn
-yietarng
-yifei
-yigal
-yih
-yihban
-yihchih
-yii-mei
-yiimei
-yijean
-yikhon
-yiliang
-yim
-yimin
-ying
-ying-cdi
-yingcdi
-yishun
-yitan
-yiu-kong
-yiukong
-yixia
-yixin
-ylaine
-yll-chen
-yllcheng
-ynes
-ynez
-yngvar
-yoakum
-yock
-yoda
-yodha
-yoe
-yogesh
-yogeswar
-yogi
-yohe
-yokan
-yoke
-yoke-kee
-yokeley
-yoko
-yokono
-yokoono
-yolanda
-yolande
-yolane
-yolanthe
-yon-chun
-yonchun
-yong
-yong-hyu
-yongdong
-yonghyun
-yongil
-yongli
-yongxin
-yonhong
-yonik
-yonk
-yoo
-yoon
-yoon-mo
-yoonjung
-yoonmo
-yoonsik
-yoram
-yorgo
-yorgos
-york
-yorke
-yorker
-yoshi
-yoshiaki
-yoshihit
-yoshikaw
-yoshiko
-yoshimi
-yoshimit
-yoshinob
-yoshio
-yoshioka
-yoshiyam
-yosi
-yossaria
-yost
-yosuf
-you-lian
-youel
-youji
-youliang
-youlin
-youn
-youn-jun
-younan
-younes
-young
-young-ba
-young-il
-young-ju
-youngbai
-youngblo
-younger
-youngill
-younglov
-youngman
-youngqui
-youngs
-younjung
-younkin
-yount
-youping
-yousef
-yousefpo
-youssef
-yousuf
-youwen
-yovonnda
-yowell
-ysabel
-ytshak
-yu
-yu-chen
-yu-chian
-yu-chung
-yu-hung
-yu-kai
-yu-pei
-yu-wei
-yuan
-yuan-cha
-yuan-shi
-yuanchao
-yuanjian
-yuanshin
-yuchen
-yuchiang
-yuchong
-yudin
-yudy
-yue
-yue-min
-yue-shun
-yuechu
-yueh
-yueh-min
-yueh-shi
-yuehming
-yuehshio
-yuehwern
-yueli
-yuen
-yuen-pui
-yuenglin
-yueping
-yueshun
-yugang
-yuh-dauh
-yuh-jiun
-yuh-tai
-yuhanna
-yuhdauh
-yuhjiun
-yuhn
-yuhtai
-yuill
-yuji
-yujie
-yuk-wha
-yuke
-yukihiko
-yukiko
-yukinaga
-yukinobu
-yuklung
-yuko
-yuksel
-yukuo
-yul
-yule
-yulia
-yulma
-yum
-yuma
-yumi
-yumurtac
-yun
-yun-sun
-yundt
-yung
-yung-chi
-yung-chu
-yung-fu
-yung-pin
-yung-yu
-yungchia
-yungchun
-yungfu
-yunghuoy
-yungmuh
-yungping
-yungyu
-yunn-tzu
-yunntzu
-yunsun
-yuon-kua
-yuonkuan
-yupei
-yupin
-yurach
-yurchuk
-yuri
-yurik
-yussuf
-yuste
-yutaka
-yuting
-yuval
-yuwei
-yuyi
-yuyu
-yvan
-yves
-yvet
-yvette
-yvon
-yvonne
-yvor
-yzerman
-z-80
-z80
-zabek
-zabokrzy
-zabransk
-zabrina
-zaccari
-zaccaria
-zach
-zacharia
-zacharie
-zachary
-zacherie
-zachery
-zack
-zackaria
-zadeh
-zadorozn
-zadow
-zafar
-zafarano
-zafarull
-zafer
-zaga
-zagorsek
-zagorski
-zagrodne
-zahara
-zaharoff
-zaharych
-zahid
-zahir
-zahirul
-zahn
-zahnley
-zahra
-zaia
-zaid
-zaidi
-zaihua
-zainab
-zajac
-zak
-zaka
-zakai
-zakarow
-zaker
-zalameda
-zalcstei
-zalee
-zaleski
-zalite
-zaliznya
-zalman
-zalokar
-zaloker
-zalzale
-zaman
-zampino
-zan
-zanariah
-zander
-zandra
-zane
-zanet
-zaneta
-zanetti
-zanga
-zani
-zanni
-zantiris
-zapach
-zappe
-zara
-zaragoza
-zarah
-zarate
-zared
-zarella
-zaretsky
-zargham
-zaria
-zarkel
-zarla
-zarlenga
-zarrabia
-zarrin
-zatkovic
-zatti
-zattiero
-zatylny
-zauhar
-zauner
-zavadiuk
-zaven
-zawadka
-zaydan
-zazulak
-zbib
-zbignew
-zbigniew
-zbuda
-zdenek
-zdenka
-zdenko
-zea
-zeb
-zebadiah
-zebedee
-zebulen
-zebulon
-zecharia
-zed
-zedekiah
-zedrick
-zee
-zeggil
-zegray
-zehir-ch
-zehra
-zeidler
-zeiger
-zeigler
-zeilinge
-zeimet
-zein
-zeina
-zeisler
-zeitler
-zejing
-zeke
-zelda
-zelenka
-zelig
-zeljko
-zelko
-zeller
-zellers
-zelma
-zelsmann
-zelwer
-zemanek
-zen
-zena
-zenaida
-zenar
-zeng
-zenghong
-zenia
-zenisek
-zenkevic
-zenkner
-zenon
-zere
-zerk
-zero
-zerriffi
-zetterlu
-zetts
-zexiang
-zhang
-zhanna
-zhao
-zhaohong
-zhaoqi
-zhaoxu
-zhelka
-zhen
-zheng
-zhengyu
-zhilan
-zhishun
-zhiwei
-zhixin
-zhiyong
-zhong
-zhongde
-zhongfu
-zhongjin
-zhongqua
-zhongxia
-zhou
-zhuezhi
-zhuolin
-zi-ping
-zi-qiang
-zia
-ziad
-ziai
-zicheng
-ziebarth
-zieber
-ziegler
-ziehn
-zielinsk
-ziemba
-zigrand
-zilaie
-zilberst
-zilla
-zilvia
-zimmer
-zimmerer
-zimmerly
-zimmerma
-zina
-zinati
-zingale
-zingeler
-zinkie
-zinn
-zino
-ziomek
-zipcodes
-ziping
-zippora
-ziqiang
-zirko
-zissis
-zisu
-zita
-zitella
-zitko
-zito
-zitzmann
-ziva
-zivanovi
-zivilik
-zivkovic
-ziyi
-ziyou
-zlatin
-zlotnick
-znack
-zoe
-zoehner
-zoel
-zoellner
-zoenka
-zoerb
-zofia
-zohair
-zohar
-zohman
-zohreh
-zola
-zollie
-zollman
-zolly
-zolmer
-zoltan
-zonda
-zondra
-zone-chi
-zonechin
-zongyi
-zonker
-zonner
-zonnya
-zonoun
-zoppel
-zora
-zorah
-zoran
-zorana
-zoratti
-zorina
-zorine
-zork
-zorn
-zorony
-zorzi
-zottola
-zou
-zouheir
-zrobok
-zsa zsa
-zsazsa
-zubair
-zubans
-zuben
-zubricki
-zuccarel
-zuckerma
-zug
-zuhua
-zuk
-zukas
-zukosky
-zukovsky
-zulema
-zulfikar
-zumel
-zumhagen
-zumpf
-zunuzi
-zuranato
-zurawlev
-zureik
-zurl
-zuzana
-zvonar
-zwi
-zwick
-zwicker
-zwierzch
-zybala
-zyg
-zygmunt
-zylstra
-zywiel
\ No newline at end of file
diff --git a/examples/factoryapp/README.rst b/examples/factoryapp/README.rst
deleted file mode 100644
index 1bbfa600ed..0000000000
--- a/examples/factoryapp/README.rst
+++ /dev/null
@@ -1,23 +0,0 @@
-FactoryApp
-----------
-
-Simple example to show how to use a factory setup.
-
-Create an Admin user and insert test data::
-
- $ python testdata.py
-
-Run it::
-
- $ export FLASK_APP="app.app:create_app('config')"
- $ flask fab create-admin
- $ flask run
-
-Try it. Open a browser to http://localhost:5000.
-
-Using an alternate config::
-
- $ export FLASK_APP="app:create_app('config2')"
- $ flask fab create-admin
- $ flask run
-
diff --git a/examples/factoryapp/app/__init__.py b/examples/factoryapp/app/__init__.py
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/examples/factoryapp/app/app.py b/examples/factoryapp/app/app.py
deleted file mode 100644
index a573509e22..0000000000
--- a/examples/factoryapp/app/app.py
+++ /dev/null
@@ -1,36 +0,0 @@
-import logging
-
-from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
-
-logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
-logging.getLogger().setLevel(logging.DEBUG)
-
-
-def create_app(config):
- app = Flask(__name__)
- db = SQLA()
- appbuilder = AppBuilder()
- with app.app_context():
- app.config.from_object(config)
- db.init_app(app)
- appbuilder.init_app(app, db.session)
-
- from .views import ContactModelView, GroupModelView, fill_gender
-
- appbuilder.add_view(
- ContactModelView,
- "List Contacts",
- icon="fa-envelope",
- category="Contacts",
- category_icon="fa-envelope",
- )
-
- appbuilder.add_view(
- GroupModelView, "List Groups", icon="fa-folder-open-o", category="Contacts"
- )
-
- db.create_all()
- appbuilder.post_init()
- fill_gender()
- return app
diff --git a/examples/factoryapp/app/models.py b/examples/factoryapp/app/models.py
deleted file mode 100644
index b505898585..0000000000
--- a/examples/factoryapp/app/models.py
+++ /dev/null
@@ -1,47 +0,0 @@
-import datetime
-
-from flask_appbuilder import Model
-from sqlalchemy import Column, Date, ForeignKey, Integer, String
-from sqlalchemy.orm import relationship
-
-mindate = datetime.date(datetime.MINYEAR, 1, 1)
-
-
-class ContactGroup(Model):
- id = Column(Integer, primary_key=True)
- name = Column(String(50), unique=True, nullable=False)
-
- def __repr__(self):
- return self.name
-
-
-class Gender(Model):
- id = Column(Integer, primary_key=True)
- name = Column(String(50), unique=True, nullable=False)
-
- def __repr__(self):
- return self.name
-
-
-class Contact(Model):
- id = Column(Integer, primary_key=True)
- name = Column(String(150), unique=True, nullable=False)
- address = Column(String(564))
- birthday = Column(Date, nullable=True)
- personal_phone = Column(String(20))
- personal_celphone = Column(String(20))
- contact_group_id = Column(Integer, ForeignKey("contact_group.id"), nullable=False)
- contact_group = relationship("ContactGroup")
- gender_id = Column(Integer, ForeignKey("gender.id"), nullable=False)
- gender = relationship("Gender")
-
- def __repr__(self):
- return self.name
-
- def month_year(self):
- date = self.birthday or mindate
- return datetime.datetime(date.year, date.month, 1) or mindate
-
- def year(self):
- date = self.birthday or mindate
- return datetime.datetime(date.year, 1, 1)
diff --git a/examples/factoryapp/app/translations/pt/LC_MESSAGES/messages.mo b/examples/factoryapp/app/translations/pt/LC_MESSAGES/messages.mo
deleted file mode 100644
index 7713f481f4..0000000000
Binary files a/examples/factoryapp/app/translations/pt/LC_MESSAGES/messages.mo and /dev/null differ
diff --git a/examples/factoryapp/app/translations/pt/LC_MESSAGES/messages.po b/examples/factoryapp/app/translations/pt/LC_MESSAGES/messages.po
deleted file mode 100644
index 3299f7099e..0000000000
--- a/examples/factoryapp/app/translations/pt/LC_MESSAGES/messages.po
+++ /dev/null
@@ -1,27 +0,0 @@
-# Portuguese translations for PROJECT.
-# Copyright (C) 2014 ORGANIZATION
-# This file is distributed under the same license as the PROJECT project.
-# FIRST AUTHOR , 2014.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PROJECT VERSION\n"
-"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2014-01-13 00:29+0000\n"
-"PO-Revision-Date: 2014-01-13 00:18+0000\n"
-"Last-Translator: FULL NAME \n"
-"Language-Team: pt \n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 1.3\n"
-
-#: app/views.py:42
-msgid "List Groups"
-msgstr "Lista de Grupos"
-
-#: app/views.py:43
-msgid "List Contacts"
-msgstr ""
-
diff --git a/examples/factoryapp/app/views.py b/examples/factoryapp/app/views.py
deleted file mode 100644
index 69e49f5a22..0000000000
--- a/examples/factoryapp/app/views.py
+++ /dev/null
@@ -1,80 +0,0 @@
-from flask import current_app
-from flask_appbuilder import ModelView, IndexView
-from flask_appbuilder.models.sqla.interface import SQLAInterface
-
-from .models import Contact, ContactGroup, Gender
-
-
-def fill_gender():
- try:
- current_app.appbuilder.session.add(Gender(name="Male"))
- current_app.appbuilder.session.add(Gender(name="Female"))
- current_app.appbuilder.session.commit()
- except Exception:
- current_app.appbuilder.session.rollback()
-
-
-class ContactModelView(ModelView):
- datamodel = SQLAInterface(Contact)
-
- label_columns = {"contact_group": "Contacts Group"}
- list_columns = ["name", "personal_celphone", "birthday", "contact_group.name"]
-
- base_order = ("name", "asc")
-
- show_fieldsets = [
- ("Summary", {"fields": ["name", "gender", "contact_group"]}),
- (
- "Personal Info",
- {
- "fields": [
- "address",
- "birthday",
- "personal_phone",
- "personal_celphone",
- ],
- "expanded": False,
- },
- ),
- ]
-
- add_fieldsets = [
- ("Summary", {"fields": ["name", "gender", "contact_group"]}),
- (
- "Personal Info",
- {
- "fields": [
- "address",
- "birthday",
- "personal_phone",
- "personal_celphone",
- ],
- "expanded": False,
- },
- ),
- ]
-
- edit_fieldsets = [
- ("Summary", {"fields": ["name", "gender", "contact_group"]}),
- (
- "Personal Info",
- {
- "fields": [
- "address",
- "birthday",
- "personal_phone",
- "personal_celphone",
- ],
- "expanded": False,
- },
- ),
- ]
-
-
-class GroupModelView(ModelView):
- datamodel = SQLAInterface(ContactGroup)
- related_views = [ContactModelView]
-
-
-class MyIndexView(IndexView):
- index_template = "my_index.html"
diff --git a/examples/factoryapp/babel/babel.cfg b/examples/factoryapp/babel/babel.cfg
deleted file mode 100644
index 70e23ac634..0000000000
--- a/examples/factoryapp/babel/babel.cfg
+++ /dev/null
@@ -1,3 +0,0 @@
-[python: **.py]
-[jinja2: **/templates/**.html]
-encoding = utf-8
diff --git a/examples/factoryapp/babel/messages.pot b/examples/factoryapp/babel/messages.pot
deleted file mode 100644
index 2e5a6fb97a..0000000000
--- a/examples/factoryapp/babel/messages.pot
+++ /dev/null
@@ -1,27 +0,0 @@
-# Translations template for PROJECT.
-# Copyright (C) 2014 ORGANIZATION
-# This file is distributed under the same license as the PROJECT project.
-# FIRST AUTHOR , 2014.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PROJECT VERSION\n"
-"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2014-01-13 00:29+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME \n"
-"Language-Team: LANGUAGE \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 1.3\n"
-
-#: app/views.py:42
-msgid "List Groups"
-msgstr ""
-
-#: app/views.py:43
-msgid "List Contacts"
-msgstr ""
-
diff --git a/examples/factoryapp/config.py b/examples/factoryapp/config.py
deleted file mode 100644
index ee6285554c..0000000000
--- a/examples/factoryapp/config.py
+++ /dev/null
@@ -1,58 +0,0 @@
-import os
-
-basedir = os.path.abspath(os.path.dirname(__file__))
-
-CSRF_ENABLED = True
-SECRET_KEY = "\2\1thisismyscretkey\1\2\e\y\y\h"
-
-OPENID_PROVIDERS = [
- {"name": "Google", "url": "https://www.google.com/accounts/o8/id"},
- {"name": "Yahoo", "url": "https://me.yahoo.com"},
- {"name": "AOL", "url": "http://openid.aol.com/"},
- {"name": "Flickr", "url": "http://www.flickr.com/"},
- {"name": "MyOpenID", "url": "https://www.myopenid.com"},
-]
-
-SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(basedir, "app.db")
-# SQLALCHEMY_DATABASE_URI = 'mysql://root:password@localhost/quickhowto'
-# SQLALCHEMY_DATABASE_URI = 'postgresql://scott:tiger@localhost:5432/myapp'
-# SQLALCHEMY_ECHO = True
-
-FAB_INDEX_VIEW = "app.views.MyIndexView"
-
-BABEL_DEFAULT_LOCALE = "en"
-BABEL_DEFAULT_FOLDER = "translations"
-LANGUAGES = {
- "en": {"flag": "gb", "name": "English"},
- "pt": {"flag": "pt", "name": "Portuguese"},
- "es": {"flag": "es", "name": "Spanish"},
- "de": {"flag": "de", "name": "German"},
- "zh": {"flag": "cn", "name": "Chinese"},
- "ru": {"flag": "ru", "name": "Russian"},
-}
-
-
-# ------------------------------
-# GLOBALS FOR GENERAL APP's
-# ------------------------------
-UPLOAD_FOLDER = basedir + "/app/static/uploads/"
-IMG_UPLOAD_FOLDER = basedir + "/app/static/uploads/"
-IMG_UPLOAD_URL = "/static/uploads/"
-AUTH_TYPE = 1
-# AUTH_LDAP_SERVER = "ldap://dc.domain.net"
-# AUTH_LDAP_USE_TLS = False
-AUTH_ROLE_ADMIN = "Admin"
-AUTH_ROLE_PUBLIC = "Public"
-APP_NAME = "F.A.B. Example"
-APP_THEME = "" # default
-# APP_THEME = "cerulean.css" # COOL
-# APP_THEME = "amelia.css"
-# APP_THEME = "cosmo.css"
-# APP_THEME = "cyborg.css" # COOL
-# APP_THEME = "flatly.css"
-# APP_THEME = "journal.css"
-# APP_THEME = "readable.css"
-# APP_THEME = "simplex.css"
-# APP_THEME = "slate.css" # COOL
-# APP_THEME = "spacelab.css" # NICE
-# APP_THEME = "united.css"
diff --git a/examples/factoryapp/config2.py b/examples/factoryapp/config2.py
deleted file mode 100644
index 27c9978982..0000000000
--- a/examples/factoryapp/config2.py
+++ /dev/null
@@ -1,56 +0,0 @@
-import os
-
-basedir = os.path.abspath(os.path.dirname(__file__))
-
-CSRF_ENABLED = True
-SECRET_KEY = "\2\1thisismyscretkey\1\2\e\y\y\h"
-
-OPENID_PROVIDERS = [
- {"name": "Google", "url": "https://www.google.com/accounts/o8/id"},
- {"name": "Yahoo", "url": "https://me.yahoo.com"},
- {"name": "AOL", "url": "http://openid.aol.com/"},
- {"name": "Flickr", "url": "http://www.flickr.com/"},
- {"name": "MyOpenID", "url": "https://www.myopenid.com"},
-]
-
-SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(basedir, "app.db")
-# SQLALCHEMY_DATABASE_URI = 'mysql://root:password@localhost/quickhowto'
-# SQLALCHEMY_DATABASE_URI = 'postgresql://scott:tiger@localhost:5432/myapp'
-# SQLALCHEMY_ECHO = True
-
-BABEL_DEFAULT_LOCALE = "en"
-BABEL_DEFAULT_FOLDER = "translations"
-LANGUAGES = {
- "en": {"flag": "gb", "name": "English"},
- "pt": {"flag": "pt", "name": "Portuguese"},
- "es": {"flag": "es", "name": "Spanish"},
- "de": {"flag": "de", "name": "German"},
- "zh": {"flag": "cn", "name": "Chinese"},
- "ru": {"flag": "ru", "name": "Russian"},
-}
-
-
-# ------------------------------
-# GLOBALS FOR GENERAL APP's
-# ------------------------------
-UPLOAD_FOLDER = basedir + "/app/static/uploads/"
-IMG_UPLOAD_FOLDER = basedir + "/app/static/uploads/"
-IMG_UPLOAD_URL = "/static/uploads/"
-AUTH_TYPE = 1
-# AUTH_LDAP_SERVER = "ldap://dc.domain.net"
-# AUTH_LDAP_USE_TLS = False
-AUTH_ROLE_ADMIN = "Admin"
-AUTH_ROLE_PUBLIC = "Public"
-APP_NAME = "F.A.B. Example"
-# APP_THEME = "" # default
-# APP_THEME = "cerulean.css" # COOL
-# APP_THEME = "amelia.css"
-APP_THEME = "cosmo.css"
-# APP_THEME = "cyborg.css" # COOL
-# APP_THEME = "flatly.css"
-# APP_THEME = "journal.css"
-# APP_THEME = "readable.css"
-# APP_THEME = "simplex.css"
-# APP_THEME = "slate.css" # COOL
-# APP_THEME = "spacelab.css" # NICE
-# APP_THEME = "united.css"
diff --git a/examples/factoryapp/testdata.py b/examples/factoryapp/testdata.py
deleted file mode 100644
index 2bdc202a6c..0000000000
--- a/examples/factoryapp/testdata.py
+++ /dev/null
@@ -1,59 +0,0 @@
-from datetime import datetime
-import random
-
-from flask import current_app
-from app.app import create_app
-from app.models import Contact, ContactGroup, Gender
-
-app = create_app("config")
-app.app_context().push()
-
-
-def get_random_name(names_list, size=1):
- name_lst = [
- names_list[random.randrange(0, len(names_list))].decode("utf-8").capitalize()
- for i in range(0, size)
- ]
- return " ".join(name_lst)
-
-
-try:
- current_app.appbuilder.session.add(ContactGroup(name="Friends"))
- current_app.appbuilder.session.add(ContactGroup(name="Family"))
- current_app.appbuilder.session.add(ContactGroup(name="Work"))
- current_app.appbuilder.session.commit()
-except Exception:
- current_app.appbuilder.session.rollback()
-
-try:
- current_app.appbuilder.session.add(Gender(name="Male"))
- current_app.appbuilder.session.add(Gender(name="Female"))
- current_app.appbuilder.session.commit()
-except Exception:
- current_app.appbuilder.session.rollback()
-
-f = open("NAMES.DIC", "rb")
-names_list = [x.strip() for x in f.readlines()]
-
-f.close()
-
-for i in range(1, 50):
- c = Contact()
- c.name = get_random_name(names_list, random.randrange(2, 6))
- c.address = "Street " + names_list[random.randrange(0, len(names_list))].decode(
- "utf-8"
- )
- c.personal_phone = random.randrange(1111111, 9999999)
- c.personal_celphone = random.randrange(1111111, 9999999)
- c.contact_group_id = random.randrange(1, 4)
- c.gender_id = random.randrange(1, 3)
- year = random.choice(range(1900, 2012))
- month = random.choice(range(1, 12))
- day = random.choice(range(1, 28))
- c.birthday = datetime(year, month, day)
- current_app.appbuilder.session.add(c)
- try:
- current_app.appbuilder.session.commit()
- print("inserted {0}".format(c))
- except Exception:
- current_app.appbuilder.session.rollback()
diff --git a/examples/issue_789/README.rst b/examples/issue_789/README.rst
deleted file mode 100644
index 020e2f36f2..0000000000
--- a/examples/issue_789/README.rst
+++ /dev/null
@@ -1,48 +0,0 @@
-==========
-Issue #789
-==========
-
-Description
------------
-
-Although Flask-AppBuilder supported many-to-many relationships between objects
-this was not reflected in the list view when searching on such relationships as
-described in issue_789_
-
-.. _issue_789: https://github.com/dpgaspar/Flask-AppBuilder/issues/789
-
-The 'enhancement' contributed in branch single_filter_multiple_values patches
-the Search functionality of the list view such that it takes into account all
-values supplied in the 'relationship' field rather than ignoring those beyond
-the first.
-
-This demo illustrates the issue and the fix for it.
-
-Running the Demo
-----------------
-
-To illustrate the issue described in issue_789:
-
-1. run app.py in an environment that has Flask-AppBuilder <= 1.12.3 installed.
-#. open http://localhost:5000 in a web browser
-#. login using the username ```admin``` with password ```admin```
-#. navigate to the 'Students' view (note that there are 3 Students)
-#. open the 'Search' panel
-#. click 'Add filter'
-#. select 'Courses'
-#. select both Courses in the filter box
-#. click the 'Search' button
-#. note that all three Students remain even though Freddy is not enrolled in
- the course 'Mathematics I'
-#. open the 'Search' panel and note that only the first course remains in the
- filter box even though both values are present in the page URI
-
-
-To verify the fix:
-
-1. Run this version of Flask-AppBuilder
-#. repeat steps 2 ~ 8 above
-#. note that Freddy is no longer visible as he is not enrolled in the 'Mathematics I' course
-#. open the 'Search' panel
-#. note that both courses remain in the filter box
-
diff --git a/examples/issue_789/app.py b/examples/issue_789/app.py
deleted file mode 100644
index 4f1c750bec..0000000000
--- a/examples/issue_789/app.py
+++ /dev/null
@@ -1,163 +0,0 @@
-import sys
-from flask_appbuilder import SQLA, AppBuilder, ModelView, Model
-from flask_appbuilder.models.sqla.interface import SQLAInterface
-from sqlalchemy import Column, Integer, String, ForeignKey, Table
-from sqlalchemy.orm import relationship
-from flask import Flask
-from flask_appbuilder.actions import action
-
-config = {
- 'SQLALCHEMY_DATABASE_URI': 'sqlite:///test.db',
- 'CSRF_ENABLED': True,
- 'SECRET_KEY': '\2\1thisismyscretkey\1\2\e\y\y\h',
- 'APP_NAME': 'Example of Filtering Many-to-many Relationships on a single field.'
-}
-
-app = Flask('single_filter_multi_value')
-app.config.update(config)
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session)
-
-
-program_registration = Table(
- 'program_registration',
- Model.metadata,
- Column('program_id', Integer, ForeignKey('program.id')),
- Column('student_id', Integer, ForeignKey('student.id')))
-
-
-course_registration = Table(
- 'course_registration',
- Model.metadata,
- Column('course_id', Integer, ForeignKey('course.id')),
- Column('student_id', Integer, ForeignKey('student.id')))
-
-
-class Teacher(Model):
- id = Column(Integer, primary_key=True)
- name = Column(String, nullable=False)
-
- def __repr__(self):
- return self.name
-
-
-class Program(Model):
- id = Column(Integer, primary_key=True)
- name = Column(String, nullable=False)
-
- def __repr__(self):
- return self.name
-
-
-class Student(Model):
- id = Column(Integer, primary_key=True)
- name = Column(String, nullable=False)
- program = relationship(Program, secondary=program_registration,
- backref='students')
-
- def __repr__(self):
- return self.name
-
-
-class Course(Model):
- id = Column(Integer, primary_key=True)
- title = Column(String, nullable=False)
- teacher_id = Column(Integer, ForeignKey('teacher.id'), nullable=False)
- teacher = relationship(Teacher, backref='courses')
- students = relationship(Student, secondary=course_registration,
- backref='courses')
-
- def __repr__(self):
- return self.title
-
-
-class CourseView(ModelView):
- datamodel = SQLAInterface(Course)
-
- list_columns = ['title', 'teacher']
- show_columns = ['title', 'teacher']
-
- @action("muldelete", "Delete", "Delete all Really?", "fa-rocket",
- single=False)
- def muldelete(self, items):
- self.datamodel.delete_all(items)
- self.update_redirect()
- return redirect(self.get_redirect())
-
-
-class ProgramView(ModelView):
- datamodel = SQLAInterface(Program)
- list_columns = ['name']
- show_columns = ['name', 'students']
- add_columns = ['name']
-
- @action("muldelete", "Delete", "Delete all Really?", "fa-rocket",
- single=False)
- def muldelete(self, items):
- self.datamodel.delete_all(items)
- self.update_redirect()
- return redirect(self.get_redirect())
-
-
-class StudentView(ModelView):
- datamodel = SQLAInterface(Student)
- related_views = [CourseView, ProgramView]
-
- list_columns = ['name', 'courses']
-
- @action("muldelete", "Delete", "Delete all Really?", "fa-rocket",
- single=False)
- def muldelete(self, items):
- self.datamodel.delete_all(items)
- self.update_redirect()
- return redirect(self.get_redirect())
-
-
-class TeacherView(ModelView):
- datamodel = SQLAInterface(Teacher)
- related_views = [StudentView]
-
- list_columns = ['name']
-
- @action("muldelete", "Delete", "Delete all Really?", "fa-rocket",
- single=False)
- def muldelete(self, items):
- self.datamodel.delete_all(items)
- self.update_redirect()
- return redirect(self.get_redirect())
-
-
-db.create_all()
-
-appbuilder.add_view(TeacherView, 'Teachers')
-appbuilder.add_view(CourseView, 'Courses')
-appbuilder.add_view(StudentView, 'Students')
-appbuilder.add_view(ProgramView, 'Programs')
-
-def add_data():
-
- db.session.add(Program(name="Bachelor of Science IT"))
- db.session.add(Program(name="Bachelor of Science Computer Science"))
- mr_smith = Teacher(name='Jonathan Smith')
- db.session.add(mr_smith)
- rod = Student(name='Rod')
- jane = Student(name='Jane')
- freddy = Student(name='Freddy')
- db.session.add(rod)
- db.session.add(jane)
- db.session.add(freddy)
-
- db.session.add(Course(title="Introduction to Programming using Pyhon",
- teacher=mr_smith,
- students=[rod, jane, freddy]))
- db.session.add(Course(title="Mathematics I",
- teacher=mr_smith,
- students=[rod, jane]))
- db.session.commit()
-
-
-if __name__ == '__main__':
- if len(sys.argv) > 1 and sys.argv[1] == '--add_data':
- add_data()
- else:
- app.run(debug=True)
diff --git a/examples/masterdetail/app/__init__.py b/examples/masterdetail/app/__init__.py
index b1cca61a25..52b33c523a 100644
--- a/examples/masterdetail/app/__init__.py
+++ b/examples/masterdetail/app/__init__.py
@@ -1,16 +1,20 @@
import logging
-
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
-
-
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session)
+from .extensions import appbuilder, db
logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
logging.getLogger().setLevel(logging.DEBUG)
-from . import views # noqa
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+ from . import views # noqa
+ return app
+
+
+# For backward compatibility
+app = create_app()
diff --git a/examples/masterdetail/app/models.py b/examples/masterdetail/app/models.py
index 78d05b488d..938a921817 100644
--- a/examples/masterdetail/app/models.py
+++ b/examples/masterdetail/app/models.py
@@ -5,6 +5,7 @@
class ContactGroup(BaseMixin, Model):
+ __tablename__ = "contact_group"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -13,6 +14,7 @@ def __repr__(self):
class Gender(BaseMixin, Model):
+ __tablename__ = "gender"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -21,6 +23,7 @@ def __repr__(self):
class Contact(BaseMixin, Model):
+ __tablename__ = "contact"
id = Column(Integer, primary_key=True)
name = Column(String(150), unique=True, nullable=False)
address = Column(String(564))
diff --git a/examples/oauth/app/__init__.py b/examples/oauth/app/__init__.py
index 691c322ca3..d44c05a411 100644
--- a/examples/oauth/app/__init__.py
+++ b/examples/oauth/app/__init__.py
@@ -1,6 +1,6 @@
import logging
from flask import Flask
-from flask_appbuilder import SQLA, AppBuilder
+from .extensions import appbuilder, db
"""
Logging configuration
@@ -9,23 +9,16 @@
logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
logging.getLogger().setLevel(logging.DEBUG)
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session)
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+ from app import views # noqa
+ return app
-"""
-from sqlalchemy.engine import Engine
-from sqlalchemy import event
-
-#Only include this for SQLLite constraints
-@event.listens_for(Engine, "connect")
-def set_sqlite_pragma(dbapi_connection, connection_record):
- # Will force sqllite contraint foreign keys
- cursor = dbapi_connection.cursor()
- cursor.execute("PRAGMA foreign_keys=ON")
- cursor.close()
-"""
-from app import views
+# For backward compatibility
+app = create_app()
diff --git a/examples/productsale/app/__init__.py b/examples/productsale/app/__init__.py
index 64251126f2..37130112ef 100644
--- a/examples/productsale/app/__init__.py
+++ b/examples/productsale/app/__init__.py
@@ -1,20 +1,14 @@
import logging
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
from sqlalchemy import event
from sqlalchemy.engine import Engine
+from .extensions import appbuilder, db
logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
logging.getLogger().setLevel(logging.DEBUG)
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session)
-
-
@event.listens_for(Engine, "connect")
def set_sqlite_pragma(dbapi_connection, connection_record):
cursor = dbapi_connection.cursor()
@@ -22,4 +16,15 @@ def set_sqlite_pragma(dbapi_connection, connection_record):
cursor.close()
-from . import models, views # noqa
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+ from . import models, views # noqa
+ return app
+
+
+# For backward compatibility
+app = create_app()
diff --git a/examples/productsale/app/models.py b/examples/productsale/app/models.py
index 806f31f92b..e329b49d38 100644
--- a/examples/productsale/app/models.py
+++ b/examples/productsale/app/models.py
@@ -8,6 +8,7 @@
class ProductType(Model):
+ __tablename__ = "product_type"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -16,6 +17,7 @@ def __repr__(self):
class Product(Model):
+ __tablename__ = "product"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
price = Column(Float, nullable=False)
diff --git a/examples/quickactions/app/__init__.py b/examples/quickactions/app/__init__.py
index e7106de856..52d46b8df9 100644
--- a/examples/quickactions/app/__init__.py
+++ b/examples/quickactions/app/__init__.py
@@ -1,23 +1,29 @@
import logging
from flask import Flask
-from flask_appbuilder import SQLA, AppBuilder
+from .extensions import appbuilder, db
logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
logging.getLogger().setLevel(logging.DEBUG)
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+
+ """
+ @event.listens_for(Engine, "connect")
+ def set_sqlite_pragma(dbapi_connection, connection_record):
+ cursor = dbapi_connection.cursor()
+ cursor.execute("PRAGMA foreign_keys=ON")
+ cursor.close()
+ """
+
+ from app import views # noqa
+ return app
-appbuilder = AppBuilder(app, db.session)
-"""
-@event.listens_for(Engine, "connect")
-def set_sqlite_pragma(dbapi_connection, connection_record):
- cursor = dbapi_connection.cursor()
- cursor.execute("PRAGMA foreign_keys=ON")
- cursor.close()
-"""
-
-from app import views
+# For backward compatibility
+app = create_app()
diff --git a/examples/quickactions/app/models.py b/examples/quickactions/app/models.py
index 5d58aada6f..39a87399c6 100644
--- a/examples/quickactions/app/models.py
+++ b/examples/quickactions/app/models.py
@@ -3,6 +3,7 @@
class ContactGroup(Model):
+ __tablename__ = "contact_group"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
diff --git a/examples/quickcharts/app/__init__.py b/examples/quickcharts/app/__init__.py
index 9be46c06f7..2f38195766 100644
--- a/examples/quickcharts/app/__init__.py
+++ b/examples/quickcharts/app/__init__.py
@@ -1,20 +1,26 @@
import logging
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
+from .extensions import appbuilder, db
logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
logging.getLogger().setLevel(logging.DEBUG)
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session)
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+
+ from . import views, data # noqa
+
+ db.create_all()
+ data.fill_data()
+ return app
-from . import views, data # noqa
-
-db.create_all()
-data.fill_data()
+# For backward compatibility
+app = create_app()
diff --git a/examples/quickcharts/app/models.py b/examples/quickcharts/app/models.py
index f116c7a192..97a4ecf6dc 100644
--- a/examples/quickcharts/app/models.py
+++ b/examples/quickcharts/app/models.py
@@ -6,6 +6,7 @@
class Country(Model):
+ __tablename__ = "country"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -14,6 +15,7 @@ def __repr__(self):
class PoliticalType(Model):
+ __tablename__ = "political_type"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -22,6 +24,7 @@ def __repr__(self):
class CountryStats(Model):
+ __tablename__ = "country_stats"
id = Column(Integer, primary_key=True)
stat_date = Column(Date, nullable=True)
population = Column(Float)
diff --git a/examples/quickcharts2/app/__init__.py b/examples/quickcharts2/app/__init__.py
index bfd6e2278f..b8f9868d4c 100644
--- a/examples/quickcharts2/app/__init__.py
+++ b/examples/quickcharts2/app/__init__.py
@@ -1,17 +1,23 @@
import logging
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
+from .extensions import appbuilder, db
logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
logging.getLogger().setLevel(logging.DEBUG)
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session)
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+
+ from . import views # noqa
+ return app
-from . import views # noqa
+# For backward compatibility
+app = create_app()
diff --git a/examples/quickcharts2/app/models.py b/examples/quickcharts2/app/models.py
index f116c7a192..97a4ecf6dc 100644
--- a/examples/quickcharts2/app/models.py
+++ b/examples/quickcharts2/app/models.py
@@ -6,6 +6,7 @@
class Country(Model):
+ __tablename__ = "country"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -14,6 +15,7 @@ def __repr__(self):
class PoliticalType(Model):
+ __tablename__ = "political_type"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -22,6 +24,7 @@ def __repr__(self):
class CountryStats(Model):
+ __tablename__ = "country_stats"
id = Column(Integer, primary_key=True)
stat_date = Column(Date, nullable=True)
population = Column(Float)
diff --git a/examples/quickfiles/app/__init__.py b/examples/quickfiles/app/__init__.py
index 1f2daf1168..34edbb973c 100644
--- a/examples/quickfiles/app/__init__.py
+++ b/examples/quickfiles/app/__init__.py
@@ -1,14 +1,20 @@
import logging
from flask import Flask
-from flask_appbuilder import SQLA, AppBuilder
+from .extensions import appbuilder, db
logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
logging.getLogger().setLevel(logging.DEBUG)
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session)
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+ from app import models, views # noqa
+ return app
-from app import models, views
+
+# For backward compatibility
+app = create_app()
diff --git a/examples/quickhowto/app/__init__.py b/examples/quickhowto/app/__init__.py
index d393b9ff67..f1db74a4ff 100644
--- a/examples/quickhowto/app/__init__.py
+++ b/examples/quickhowto/app/__init__.py
@@ -1,14 +1,38 @@
import logging
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
+from .views import ContactModelView, ContactTimeChartView, GroupModelView
+from .extensions import appbuilder, db
+from .utils import fill_gender
+
logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
-logging.getLogger().setLevel(logging.DEBUG)
+logging.getLogger().setLevel(logging.INFO)
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session)
-from . import models, views # noqa
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+ db.create_all()
+ fill_gender()
+ appbuilder.add_view(
+ GroupModelView,
+ "List Groups",
+ icon="fa-folder-open-o",
+ category="Contacts",
+ category_icon="fa-envelope",
+ )
+ appbuilder.add_view(
+ ContactModelView, "List Contacts", icon="fa-envelope", category="Contacts"
+ )
+ appbuilder.add_separator("Contacts")
+ appbuilder.add_view(
+ ContactTimeChartView,
+ "Contacts Birth Chart",
+ icon="fa-dashboard",
+ category="Contacts",
+ )
+ return app
diff --git a/examples/quickhowto/app/extensions.py b/examples/quickhowto/app/extensions.py
new file mode 100644
index 0000000000..419cabef39
--- /dev/null
+++ b/examples/quickhowto/app/extensions.py
@@ -0,0 +1,5 @@
+from flask_appbuilder import AppBuilder
+from flask_appbuilder.utils.legacy import get_sqla_class
+
+db = get_sqla_class()()
+appbuilder = AppBuilder()
diff --git a/examples/quickhowto/app/models.py b/examples/quickhowto/app/models.py
index b505898585..aad1db8ab5 100644
--- a/examples/quickhowto/app/models.py
+++ b/examples/quickhowto/app/models.py
@@ -1,39 +1,59 @@
+from __future__ import annotations
+
import datetime
+from typing import Optional
from flask_appbuilder import Model
-from sqlalchemy import Column, Date, ForeignKey, Integer, String
+from sqlalchemy import Date, ForeignKey, Integer, String
+from sqlalchemy.orm import Mapped
from sqlalchemy.orm import relationship
+try:
+ from sqlalchemy.orm import mapped_column
+except ImportError:
+ # fallback for SQLAlchemy < 2.0
+ def mapped_column(*args, **kwargs):
+ from sqlalchemy import Column
+ return Column(*args, **kwargs)
+
+
mindate = datetime.date(datetime.MINYEAR, 1, 1)
class ContactGroup(Model):
- id = Column(Integer, primary_key=True)
- name = Column(String(50), unique=True, nullable=False)
+ __tablename__ = "contact_group"
+ id: Mapped[int] = mapped_column(Integer, primary_key=True)
+ name: Mapped[str] = mapped_column(String(50), unique=True, nullable=False)
def __repr__(self):
return self.name
class Gender(Model):
- id = Column(Integer, primary_key=True)
- name = Column(String(50), unique=True, nullable=False)
+ __tablename__ = "gender"
+
+ id: Mapped[int] = mapped_column(Integer, primary_key=True)
+ name: Mapped[str] = mapped_column(String(50), unique=True, nullable=False)
def __repr__(self):
return self.name
class Contact(Model):
- id = Column(Integer, primary_key=True)
- name = Column(String(150), unique=True, nullable=False)
- address = Column(String(564))
- birthday = Column(Date, nullable=True)
- personal_phone = Column(String(20))
- personal_celphone = Column(String(20))
- contact_group_id = Column(Integer, ForeignKey("contact_group.id"), nullable=False)
- contact_group = relationship("ContactGroup")
- gender_id = Column(Integer, ForeignKey("gender.id"), nullable=False)
- gender = relationship("Gender")
+ __tablename__ = "contact"
+
+ id: Mapped[int] = mapped_column(Integer, primary_key=True)
+ name: Mapped[str] = mapped_column(String(150), unique=True, nullable=False)
+ address: Mapped[Optional[str]] = mapped_column(String(564))
+ birthday: Mapped[Optional[datetime.date]] = mapped_column(Date)
+ personal_phone: Mapped[Optional[str]] = mapped_column(String(20))
+ personal_celphone: Mapped[Optional[str]] = mapped_column(String(20))
+ contact_group_id: Mapped[int] = mapped_column(
+ Integer, ForeignKey("contact_group.id"), nullable=False
+ )
+ contact_group: Mapped[ContactGroup] = relationship("ContactGroup")
+ gender_id: Mapped[int] = mapped_column(Integer, ForeignKey("gender.id"), nullable=False)
+ gender: Mapped[Gender] = relationship("Gender")
def __repr__(self):
return self.name
diff --git a/examples/quickhowto/app/utils.py b/examples/quickhowto/app/utils.py
new file mode 100644
index 0000000000..89879009a4
--- /dev/null
+++ b/examples/quickhowto/app/utils.py
@@ -0,0 +1,13 @@
+from flask import current_app
+from sqlalchemy.exc import SQLAlchemyError
+
+from .models import Gender
+
+
+def fill_gender():
+ try:
+ current_app.appbuilder.session.add(Gender(name="Male"))
+ current_app.appbuilder.session.add(Gender(name="Female"))
+ current_app.appbuilder.session.commit()
+ except SQLAlchemyError:
+ current_app.appbuilder.session.rollback()
diff --git a/examples/quickhowto/app/views.py b/examples/quickhowto/app/views.py
index 5b63c81004..b3834907e6 100644
--- a/examples/quickhowto/app/views.py
+++ b/examples/quickhowto/app/views.py
@@ -5,17 +5,7 @@
from flask_appbuilder.models.group import aggregate_count
from flask_appbuilder.models.sqla.interface import SQLAInterface
-from . import appbuilder, db
-from .models import Contact, ContactGroup, Gender
-
-
-def fill_gender():
- try:
- db.session.add(Gender(name="Male"))
- db.session.add(Gender(name="Female"))
- db.session.commit()
- except Exception:
- db.session.rollback()
+from .models import Contact, ContactGroup
class ContactModelView(ModelView):
@@ -104,24 +94,3 @@ class ContactTimeChartView(GroupByChartView):
"series": [(aggregate_count, "group")],
},
]
-
-
-db.create_all()
-fill_gender()
-appbuilder.add_view(
- GroupModelView,
- "List Groups",
- icon="fa-folder-open-o",
- category="Contacts",
- category_icon="fa-envelope",
-)
-appbuilder.add_view(
- ContactModelView, "List Contacts", icon="fa-envelope", category="Contacts"
-)
-appbuilder.add_separator("Contacts")
-appbuilder.add_view(
- ContactTimeChartView,
- "Contacts Birth Chart",
- icon="fa-dashboard",
- category="Contacts",
-)
diff --git a/examples/quickhowto/config.py b/examples/quickhowto/config.py
index c813f2e723..7939d0d0de 100644
--- a/examples/quickhowto/config.py
+++ b/examples/quickhowto/config.py
@@ -18,7 +18,7 @@
SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(basedir, "app.db")
# SQLALCHEMY_DATABASE_URI = 'mysql://username:password@mysqlserver.local/quickhowto'
-# SQLALCHEMY_DATABASE_URI = 'postgresql://scott:tiger@localhost:5432/myapp'
+# SQLALCHEMY_DATABASE_URI = 'postgresql+psycopg2://pguser:pguserpassword@127.0.0.1:5432/app'
# SQLALCHEMY_ECHO = True
SQLALCHEMY_POOL_RECYCLE = 3
@@ -51,7 +51,7 @@ def custom_password_validator(password: str) -> None:
# FAB_PASSWORD_COMPLEXITY_VALIDATOR = custom_password_validator
-FAB_PASSWORD_COMPLEXITY_ENABLED = True
+FAB_PASSWORD_COMPLEXITY_ENABLED = False
# ------------------------------
# GLOBALS FOR GENERAL APP's
diff --git a/examples/quickhowto/testdata.py b/examples/quickhowto/testdata.py
index e99380168e..76d3259e1e 100644
--- a/examples/quickhowto/testdata.py
+++ b/examples/quickhowto/testdata.py
@@ -1,5 +1,5 @@
import logging
-from app import db
+from app import create_app, db
from app.models import ContactGroup, Gender, Contact
import random
from datetime import datetime
@@ -7,6 +7,9 @@
log = logging.getLogger(__name__)
+app = create_app()
+
+
def get_random_name(names_list, size=1):
name_lst = [
names_list[random.randrange(0, len(names_list))].decode("utf-8").capitalize()
@@ -15,62 +18,67 @@ def get_random_name(names_list, size=1):
return " ".join(name_lst)
-try:
- db.session.query(Contact).delete()
- db.session.query(Gender).delete()
- db.session.query(ContactGroup).delete()
- db.session.commit()
-except:
- db.session.rollback()
-
-try:
- groups = []
- groups.append(ContactGroup(name="Friends"))
- groups.append(ContactGroup(name="Family"))
- groups.append(ContactGroup(name="Work"))
- db.session.add(groups[0])
- db.session.add(groups[1])
- db.session.add(groups[2])
- print(groups[0].id)
- db.session.commit()
-except Exception as e:
- log.error("Creating Groups: %s", e)
- db.session.rollback()
-
-try:
- genders = list()
- genders.append(Gender(name="Male"))
- genders.append(Gender(name="Female"))
- db.session.add(genders[0])
- db.session.add(genders[1])
- db.session.commit()
-except Exception as e:
- log.error("Creating Genders: %s", e)
- db.session.rollback()
-
-f = open("NAMES.DIC", "rb")
-names_list = [x.strip() for x in f.readlines()]
+def insert_test_data():
+ try:
+ db.session.query(Contact).delete()
+ db.session.query(Gender).delete()
+ db.session.query(ContactGroup).delete()
+ db.session.commit()
+ except:
+ db.session.rollback()
-f.close()
+ try:
+ groups = []
+ groups.append(ContactGroup(name="Friends"))
+ groups.append(ContactGroup(name="Family"))
+ groups.append(ContactGroup(name="Work"))
+ db.session.add(groups[0])
+ db.session.add(groups[1])
+ db.session.add(groups[2])
+ print(groups[0].id)
+ db.session.commit()
+ except Exception as e:
+ log.error("Creating Groups: %s", e)
+ db.session.rollback()
-for i in range(1, 1000):
- c = Contact()
- c.name = get_random_name(names_list, random.randrange(2, 6))
- c.address = "Street " + names_list[random.randrange(0, len(names_list))].decode(
- "utf-8"
- )
- c.personal_phone = random.randrange(1111111, 9999999)
- c.personal_celphone = random.randrange(1111111, 9999999)
- c.contact_group = groups[random.randrange(0, 3)]
- c.gender = genders[random.randrange(0, 2)]
- year = random.choice(range(1900, 2012))
- month = random.choice(range(1, 12))
- day = random.choice(range(1, 28))
- c.birthday = datetime(year, month, day)
- db.session.add(c)
try:
+ genders = list()
+ genders.append(Gender(name="Male"))
+ genders.append(Gender(name="Female"))
+ db.session.add(genders[0])
+ db.session.add(genders[1])
db.session.commit()
- print("inserted", c)
except Exception as e:
- log.error("Creating Contact: %s", e)
+ log.error("Creating Genders: %s", e)
db.session.rollback()
+
+ f = open("NAMES.DIC", "rb")
+ names_list = [x.strip() for x in f.readlines()]
+
+ f.close()
+
+ for i in range(1, 1000):
+ c = Contact()
+ c.name = get_random_name(names_list, random.randrange(2, 6))
+ c.address = "Street " + names_list[random.randrange(0, len(names_list))].decode(
+ "utf-8"
+ )
+ c.personal_phone = random.randrange(1111111, 9999999)
+ c.personal_celphone = random.randrange(1111111, 9999999)
+ c.contact_group = groups[random.randrange(0, 3)]
+ c.gender = genders[random.randrange(0, 2)]
+ year = random.choice(range(1900, 2012))
+ month = random.choice(range(1, 12))
+ day = random.choice(range(1, 28))
+ c.birthday = datetime(year, month, day)
+ db.session.add(c)
+ try:
+ db.session.commit()
+ print("inserted", c)
+ except Exception as e:
+ log.error("Creating Contact: %s", e)
+ db.session.rollback()
+
+
+with app.app_context():
+ insert_test_data()
diff --git a/examples/quickhowto2/app/__init__.py b/examples/quickhowto2/app/__init__.py
index 39b8f954af..a4edfb04a0 100644
--- a/examples/quickhowto2/app/__init__.py
+++ b/examples/quickhowto2/app/__init__.py
@@ -1,25 +1,21 @@
import logging
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
-from flask_appbuilder.menu import Menu
-
-from .indexview import MyIndexView
-from .sec import MySecurityManager
+from .extensions import appbuilder, db
logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
logging.getLogger().setLevel(logging.DEBUG)
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(
- app,
- db.session,
- indexview=MyIndexView,
- menu=Menu(reverse=False),
- security_manager_class=MySecurityManager,
-)
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+ from . import views # noqa
+ return app
+
-from . import views # noqa
+# For backward compatibility
+app = create_app()
diff --git a/examples/quickhowto2/app/models.py b/examples/quickhowto2/app/models.py
index abea439faa..b0b542eb93 100644
--- a/examples/quickhowto2/app/models.py
+++ b/examples/quickhowto2/app/models.py
@@ -11,6 +11,7 @@
class ContactGroup(Model):
+ __tablename__ = "contact_group"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -26,6 +27,7 @@ def __repr__(self):
class ProductManufacturer(Model):
+ __tablename__ = "product_manufacturer"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -34,6 +36,7 @@ def __repr__(self):
class ProductModel(Model):
+ __tablename__ = "product_model"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
product_manufacturer_id = Column(
@@ -46,6 +49,7 @@ def __repr__(self):
class Product(Model):
+ __tablename__ = "product"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
product_manufacturer_id = Column(
@@ -60,6 +64,7 @@ def __repr__(self):
class Gender(Model):
+ __tablename__ = "gender"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -72,6 +77,7 @@ def test():
class FloatModel(Model):
+ __tablename__ = "float_model"
id = Column(Integer, primary_key=True)
value = Column(Float, nullable=False, default=test)
value_numeric = Column(Numeric, nullable=False, default=test)
@@ -81,6 +87,7 @@ def __repr__(self):
class Contact(Model):
+ __tablename__ = "contact"
id = Column(Integer, primary_key=True)
name = Column(String(150), unique=True, nullable=False)
address = Column(String(564))
diff --git a/examples/quickhowto3/app/__init__.py b/examples/quickhowto3/app/__init__.py
index d89ab55fce..c30b1db0bb 100644
--- a/examples/quickhowto3/app/__init__.py
+++ b/examples/quickhowto3/app/__init__.py
@@ -1,31 +1,33 @@
import logging
from flask import Flask
-from flask_appbuilder import AppBuilder
-from flask_sqlalchemy import SQLAlchemy
-from flask_appbuilder import SQLA
from sqlalchemy import event
+from .extensions import appbuilder, db
logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
logging.getLogger().setLevel(logging.DEBUG)
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-session = db.session
-appbuilder = AppBuilder(app, session)
-"""
-Only include this for SQLLite constraints
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+
+ """
+ Only include this for SQLLite constraints
+
+ @event.listens_for(Engine, "connect")
+ def set_sqlite_pragma(dbapi_connection, connection_record):
+ cursor = dbapi_connection.cursor()
+ cursor.execute("PRAGMA foreign_keys=ON")
+ cursor.close()
+ """
+ from app.models import * # noqa
+ db.create_all()
+ from app import views # noqa
+ return app
-@event.listens_for(Engine, "connect")
-def set_sqlite_pragma(dbapi_connection, connection_record):
- cursor = dbapi_connection.cursor()
- cursor.execute("PRAGMA foreign_keys=ON")
- cursor.close()
-"""
-from app.models import *
-
-db.create_all()
-
-from app import views
+# For backward compatibility
+app = create_app()
diff --git a/examples/quickhowto3/app/models.py b/examples/quickhowto3/app/models.py
index 7e213e7971..06ef76ed8f 100644
--- a/examples/quickhowto3/app/models.py
+++ b/examples/quickhowto3/app/models.py
@@ -10,6 +10,7 @@
class Group(Model):
+ __tablename__ = "group"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -18,6 +19,7 @@ def __repr__(self):
class Gender(Model):
+ __tablename__ = "gender"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -26,6 +28,7 @@ def __repr__(self):
class Contact(Model):
+ __tablename__ = "contact"
id = Column(Integer, primary_key=True)
name = Column(String(150), unique=True, nullable=False)
address = Column(String(564))
diff --git a/examples/quickimages/app/__init__.py b/examples/quickimages/app/__init__.py
index 8a4e4c5088..6fc20670fc 100644
--- a/examples/quickimages/app/__init__.py
+++ b/examples/quickimages/app/__init__.py
@@ -1,15 +1,9 @@
import logging
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
from sqlalchemy import event
from sqlalchemy.engine import Engine
-
-
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session)
+from .extensions import appbuilder, db
logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
logging.getLogger().setLevel(logging.DEBUG)
@@ -22,4 +16,14 @@ def set_sqlite_pragma(dbapi_connection, connection_record):
cursor.close()
-from . import views, models # noqa
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+ from . import views, models # noqa
+ return app
+
+
+app = create_app()
diff --git a/examples/quickimages/app/models.py b/examples/quickimages/app/models.py
index 277f34ebe0..2299ac95c3 100644
--- a/examples/quickimages/app/models.py
+++ b/examples/quickimages/app/models.py
@@ -7,6 +7,7 @@
class PersonGroup(Model):
+ __tablename__ = "person_group"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
address = Column(String(264))
@@ -20,6 +21,7 @@ def __repr__(self):
class Person(Model):
+ __tablename__ = "person"
id = Column(Integer, primary_key=True)
name = Column(String(150), unique=True, nullable=False)
address = Column(String(564))
diff --git a/examples/quickmigrate/app/__init__.py b/examples/quickmigrate/app/__init__.py
index b8fffbb1c6..8a06242f3c 100644
--- a/examples/quickmigrate/app/__init__.py
+++ b/examples/quickmigrate/app/__init__.py
@@ -1,16 +1,23 @@
import logging
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
-from flask_migrate import Migrate
+from .extensions import appbuilder, db, migrate
logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
logging.getLogger().setLevel(logging.DEBUG)
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-migrate = Migrate(app, db)
-appbuilder = AppBuilder(app, db.session)
-from . import models, views # noqa
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ migrate.init_app(app, db)
+ appbuilder.init_app(app, db.session)
+
+ from . import models, views # noqa
+ return app
+
+
+# For backward compatibility
+app = create_app()
diff --git a/examples/quickmigrate/app/models.py b/examples/quickmigrate/app/models.py
index b505898585..c1fc3fe1f9 100644
--- a/examples/quickmigrate/app/models.py
+++ b/examples/quickmigrate/app/models.py
@@ -8,6 +8,7 @@
class ContactGroup(Model):
+ __tablename__ = "contact_group"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -16,6 +17,7 @@ def __repr__(self):
class Gender(Model):
+ __tablename__ = "gender"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -24,6 +26,7 @@ def __repr__(self):
class Contact(Model):
+ __tablename__ = "contact"
id = Column(Integer, primary_key=True)
name = Column(String(150), unique=True, nullable=False)
address = Column(String(564))
diff --git a/examples/quickminimal/run.py b/examples/quickminimal/run.py
index be09d89f26..0dcf73f13f 100644
--- a/examples/quickminimal/run.py
+++ b/examples/quickminimal/run.py
@@ -1,16 +1,32 @@
import os
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
+from flask_appbuilder import AppBuilder
+from flask_appbuilder.utils.legacy import get_sqla_class
-app = Flask(__name__)
+# Get the SQLA class
+SQLA = get_sqla_class()
-basedir = os.path.abspath(os.path.dirname(__file__))
-app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///" + os.path.join(basedir, "app.db")
-app.config["CSRF_ENABLED"] = True
-app.config["SECRET_KEY"] = "thisismyscretkey"
+# Create app factory
+def create_app():
+ app = Flask(__name__)
+
+ basedir = os.path.abspath(os.path.dirname(__file__))
+ app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///" + os.path.join(basedir, "app.db")
+ app.config["CSRF_ENABLED"] = True
+ app.config["SECRET_KEY"] = "thisismyscretkey"
+
+ db = SQLA()
+ appbuilder = AppBuilder()
+
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+
+ return app
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session)
+# Create the app
+app = create_app()
-app.run(host="0.0.0.0", port=8080, debug=True)
+if __name__ == "__main__":
+ app.run(host="0.0.0.0", port=8080, debug=True)
diff --git a/examples/quicksqlviews/app/__init__.py b/examples/quicksqlviews/app/__init__.py
index d393b9ff67..ee19066b64 100644
--- a/examples/quicksqlviews/app/__init__.py
+++ b/examples/quicksqlviews/app/__init__.py
@@ -1,14 +1,22 @@
import logging
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
+from .extensions import appbuilder, db
logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
logging.getLogger().setLevel(logging.DEBUG)
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session)
-from . import models, views # noqa
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+
+ from . import models, views # noqa
+ return app
+
+
+# For backward compatibility
+app = create_app()
diff --git a/examples/quicksqlviews/app/models.py b/examples/quicksqlviews/app/models.py
index c330a05b65..e2d26933d1 100644
--- a/examples/quicksqlviews/app/models.py
+++ b/examples/quicksqlviews/app/models.py
@@ -10,6 +10,7 @@
class ContactGroup(Model):
+ __tablename__ = "contact_group"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -18,6 +19,7 @@ def __repr__(self):
class Gender(Model):
+ __tablename__ = "gender"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -45,6 +47,7 @@ class ContactGroupView(Model):
class Contact(Model):
+ __tablename__ = "contact"
id = Column(Integer, primary_key=True)
name = Column(String(150), unique=True, nullable=False)
address = Column(String(564))
diff --git a/examples/quicktemplates/app/__init__.py b/examples/quicktemplates/app/__init__.py
index f2158913d7..7207908690 100644
--- a/examples/quicktemplates/app/__init__.py
+++ b/examples/quicktemplates/app/__init__.py
@@ -1,14 +1,22 @@
import logging
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
+from .extensions import appbuilder, db
logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
logging.getLogger().setLevel(logging.DEBUG)
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session, base_template="mybase.html")
-from . import models, views # noqa
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session, base_template="mybase.html")
+
+ from . import models, views # noqa
+ return app
+
+
+# For backward compatibility
+app = create_app()
diff --git a/examples/quicktemplates/app/models.py b/examples/quicktemplates/app/models.py
index b505898585..c1fc3fe1f9 100644
--- a/examples/quicktemplates/app/models.py
+++ b/examples/quicktemplates/app/models.py
@@ -8,6 +8,7 @@
class ContactGroup(Model):
+ __tablename__ = "contact_group"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -16,6 +17,7 @@ def __repr__(self):
class Gender(Model):
+ __tablename__ = "gender"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -24,6 +26,7 @@ def __repr__(self):
class Contact(Model):
+ __tablename__ = "contact"
id = Column(Integer, primary_key=True)
name = Column(String(150), unique=True, nullable=False)
address = Column(String(564))
diff --git a/examples/react-rest-api/app/__init__.py b/examples/react-rest-api/app/__init__.py
index 67cd8d1b8f..a36c380c3c 100644
--- a/examples/react-rest-api/app/__init__.py
+++ b/examples/react-rest-api/app/__init__.py
@@ -1,14 +1,20 @@
import logging
-
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
+from .extensions import appbuilder, db
logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
logging.getLogger().setLevel(logging.DEBUG)
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session)
-from . import models, api # noqa
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+ from . import models, api # noqa
+ return app
+
+
+# For backward compatibility
+app = create_app()
diff --git a/examples/react-rest-api/app/models.py b/examples/react-rest-api/app/models.py
index b505898585..c1fc3fe1f9 100644
--- a/examples/react-rest-api/app/models.py
+++ b/examples/react-rest-api/app/models.py
@@ -8,6 +8,7 @@
class ContactGroup(Model):
+ __tablename__ = "contact_group"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -16,6 +17,7 @@ def __repr__(self):
class Gender(Model):
+ __tablename__ = "gender"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -24,6 +26,7 @@ def __repr__(self):
class Contact(Model):
+ __tablename__ = "contact"
id = Column(Integer, primary_key=True)
name = Column(String(150), unique=True, nullable=False)
address = Column(String(564))
diff --git a/examples/related_fields/app/__init__.py b/examples/related_fields/app/__init__.py
index d393b9ff67..66ab67071b 100644
--- a/examples/related_fields/app/__init__.py
+++ b/examples/related_fields/app/__init__.py
@@ -1,14 +1,20 @@
import logging
-
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
+from .extensions import appbuilder, db
logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
logging.getLogger().setLevel(logging.DEBUG)
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session)
-from . import models, views # noqa
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+ from . import models, views # noqa
+ return app
+
+
+# For backward compatibility
+app = create_app()
diff --git a/examples/related_fields/app/models.py b/examples/related_fields/app/models.py
index cdbbc54621..059cc6d35b 100644
--- a/examples/related_fields/app/models.py
+++ b/examples/related_fields/app/models.py
@@ -8,6 +8,7 @@
class ContactGroup(Model):
+ __tablename__ = "contact_group"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -16,6 +17,7 @@ def __repr__(self):
class ContactGroup2(Model):
+ __tablename__ = "contact_group2"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -24,6 +26,7 @@ def __repr__(self):
class ContactSubGroup2(Model):
+ __tablename__ = "contact_sub_group2"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
contact_group2_id = Column(Integer, ForeignKey("contact_group2.id"), nullable=False)
@@ -34,6 +37,7 @@ def __repr__(self):
class ContactSubGroup(Model):
+ __tablename__ = "contact_sub_group"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
contact_group_id = Column(Integer, ForeignKey("contact_group.id"), nullable=False)
@@ -44,6 +48,7 @@ def __repr__(self):
class Gender(Model):
+ __tablename__ = "gender"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -52,6 +57,7 @@ def __repr__(self):
class Contact(Model):
+ __tablename__ = "contact"
id = Column(Integer, primary_key=True)
name = Column(String(150), unique=True, nullable=False)
address = Column(String(564))
diff --git a/examples/simpleform/app/__init__.py b/examples/simpleform/app/__init__.py
index a5cbb0fba7..84bb0cdcca 100644
--- a/examples/simpleform/app/__init__.py
+++ b/examples/simpleform/app/__init__.py
@@ -1,7 +1,6 @@
import logging
-
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
+from .extensions import appbuilder, db
"""
Logging configuration
@@ -10,10 +9,16 @@
logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
logging.getLogger().setLevel(logging.DEBUG)
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session)
+
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+ from . import views # noqa
+ return app
-from . import views # noqa
+# For backward compatibility
+app = create_app()
diff --git a/examples/simpleview1/app/__init__.py b/examples/simpleview1/app/__init__.py
index 1833254d12..9ef121ecab 100644
--- a/examples/simpleview1/app/__init__.py
+++ b/examples/simpleview1/app/__init__.py
@@ -1,7 +1,7 @@
import logging
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
+from .extensions import appbuilder, db
"""
Logging configuration
@@ -10,10 +10,16 @@
logging.getLogger().setLevel(logging.DEBUG)
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session)
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+
+ from . import views # noqa
+ return app
-from . import views # noqa
+# For backward compatibility
+app = create_app()
diff --git a/examples/simpleview2/app/__init__.py b/examples/simpleview2/app/__init__.py
index 416ecdbf8d..9ef121ecab 100644
--- a/examples/simpleview2/app/__init__.py
+++ b/examples/simpleview2/app/__init__.py
@@ -1,7 +1,7 @@
import logging
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
+from .extensions import appbuilder, db
"""
Logging configuration
@@ -10,9 +10,16 @@
logging.getLogger().setLevel(logging.DEBUG)
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session)
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+
+ from . import views # noqa
+ return app
-from . import views # noqa
+
+# For backward compatibility
+app = create_app()
diff --git a/examples/user_registration/app/__init__.py b/examples/user_registration/app/__init__.py
index d393b9ff67..66ab67071b 100644
--- a/examples/user_registration/app/__init__.py
+++ b/examples/user_registration/app/__init__.py
@@ -1,14 +1,20 @@
import logging
-
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
+from .extensions import appbuilder, db
logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
logging.getLogger().setLevel(logging.DEBUG)
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session)
-from . import models, views # noqa
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+ from . import models, views # noqa
+ return app
+
+
+# For backward compatibility
+app = create_app()
diff --git a/examples/user_registration/app/models.py b/examples/user_registration/app/models.py
index bad0c3c900..7d80e5ccc8 100644
--- a/examples/user_registration/app/models.py
+++ b/examples/user_registration/app/models.py
@@ -10,6 +10,7 @@
class ContactGroup(Model):
+ __tablename__ = "contact_group"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -18,6 +19,7 @@ def __repr__(self):
class Gender(Model):
+ __tablename__ = "gender"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -26,11 +28,13 @@ def __repr__(self):
class UserExtended(Model, UserExtensionMixin):
+ __tablename__ = "user_extended"
contact_group_id = Column(Integer, ForeignKey("contact_group.id"), nullable=True)
contact_group = relationship("ContactGroup")
class Contact(Model):
+ __tablename__ = "contact"
id = Column(Integer, primary_key=True)
name = Column(String(150), unique=True, nullable=False)
address = Column(String(564))
diff --git a/examples/widgets/app/__init__.py b/examples/widgets/app/__init__.py
index d393b9ff67..66ab67071b 100644
--- a/examples/widgets/app/__init__.py
+++ b/examples/widgets/app/__init__.py
@@ -1,14 +1,20 @@
import logging
-
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
+from .extensions import appbuilder, db
logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
logging.getLogger().setLevel(logging.DEBUG)
-app = Flask(__name__)
-app.config.from_object("config")
-db = SQLA(app)
-appbuilder = AppBuilder(app, db.session)
-from . import models, views # noqa
+def create_app() -> Flask:
+ app = Flask(__name__)
+ app.config.from_object("config")
+ with app.app_context():
+ db.init_app(app)
+ appbuilder.init_app(app, db.session)
+ from . import models, views # noqa
+ return app
+
+
+# For backward compatibility
+app = create_app()
diff --git a/examples/widgets/app/models.py b/examples/widgets/app/models.py
index b505898585..c1fc3fe1f9 100644
--- a/examples/widgets/app/models.py
+++ b/examples/widgets/app/models.py
@@ -8,6 +8,7 @@
class ContactGroup(Model):
+ __tablename__ = "contact_group"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -16,6 +17,7 @@ def __repr__(self):
class Gender(Model):
+ __tablename__ = "gender"
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, nullable=False)
@@ -24,6 +26,7 @@ def __repr__(self):
class Contact(Model):
+ __tablename__ = "contact"
id = Column(Integer, primary_key=True)
name = Column(String(150), unique=True, nullable=False)
address = Column(String(564))
diff --git a/flask_appbuilder/__init__.py b/flask_appbuilder/__init__.py
index 8a4cc04754..b2e8dfbaa4 100644
--- a/flask_appbuilder/__init__.py
+++ b/flask_appbuilder/__init__.py
@@ -7,7 +7,7 @@
from .baseviews import BaseView, expose # noqa: F401
from .charts.views import DirectByChartView, GroupByChartView # noqa: F401
from .models.group import aggregate_avg, aggregate_count, aggregate_sum # noqa: F401
-from .models.sqla import Base, Model, SQLA # noqa: F401
+from .models.sqla import Model # noqa: F401
from .security.decorators import has_access, permission_name # noqa: F401
from .views import ( # noqa: F401
CompactCRUDMixin,
diff --git a/flask_appbuilder/api/__init__.py b/flask_appbuilder/api/__init__.py
index f91d54e454..4891b08226 100644
--- a/flask_appbuilder/api/__init__.py
+++ b/flask_appbuilder/api/__init__.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
import functools
import json
import logging
@@ -20,23 +22,15 @@
from apispec import APISpec, yaml_utils
from apispec.exceptions import DuplicateComponentNameError
from flask import Blueprint, current_app, jsonify, make_response, request, Response
-from flask_appbuilder.models.sqla import Model
-from flask_appbuilder.models.sqla.interface import SQLAInterface
-from flask_babel import lazy_gettext as _
-import jsonschema
-from marshmallow import Schema, ValidationError
-from marshmallow.fields import Field
-from marshmallow_sqlalchemy.fields import Related, RelatedList
-import prison
-from sqlalchemy.exc import IntegrityError
-from werkzeug.exceptions import BadRequest
-import yaml
-
-from .convert import Model2SchemaConverter
-from .schemas import get_info_schema, get_item_schema, get_list_schema
-from .._compat import as_unicode
-from ..baseviews import AbstractViewApi
-from ..const import (
+from flask_appbuilder._compat import as_unicode
+from flask_appbuilder.api.convert import Model2SchemaConverter
+from flask_appbuilder.api.schemas import (
+ get_info_schema,
+ get_item_schema,
+ get_list_schema,
+)
+from flask_appbuilder.baseviews import AbstractViewApi
+from flask_appbuilder.const import (
API_ADD_COLUMNS_RES_KEY,
API_ADD_COLUMNS_RIS_KEY,
API_ADD_TITLE_RES_KEY,
@@ -73,15 +67,30 @@
API_URI_RIS_KEY,
PERMISSION_PREFIX,
)
-from ..exceptions import (
+from flask_appbuilder.exceptions import (
+ DatabaseException,
FABException,
InvalidColumnArgsFABException,
InvalidOrderByColumnFABException,
)
-from ..hooks import get_before_request_hooks, wrap_route_handler_with_hooks
-from ..models.filters import Filters
-from ..security.decorators import permission_name, protect
-from ..utils.limit import Limit
+from flask_appbuilder.hooks import (
+ get_before_request_hooks,
+ wrap_route_handler_with_hooks,
+)
+from flask_appbuilder.models.filters import Filters
+from flask_appbuilder.models.sqla import Model
+from flask_appbuilder.models.sqla.filters import BaseFilter
+from flask_appbuilder.models.sqla.interface import SQLAInterface
+from flask_appbuilder.security.decorators import permission_name, protect
+from flask_appbuilder.utils.limit import Limit
+from flask_babel import lazy_gettext as _
+import jsonschema
+from marshmallow import Schema, ValidationError
+from marshmallow.fields import Field
+from marshmallow_sqlalchemy.fields import Related, RelatedList
+import prison
+from werkzeug.exceptions import BadRequest
+import yaml
if TYPE_CHECKING:
from flask_appbuilder import AppBuilder
@@ -160,7 +169,7 @@ def rison_json(self, **kwargs):
def _rison(f: Callable[..., Any]) -> Callable[..., Any]:
def wraps(self: "BaseApi", *args: Any, **kwargs: Any) -> Response:
value = request.args.get(API_URI_RIS_KEY, None)
- kwargs["rison"] = dict()
+ kwargs["rison"] = {}
if value:
try:
kwargs["rison"] = prison.loads(value)
@@ -183,7 +192,13 @@ def wraps(self: "BaseApi", *args: Any, **kwargs: Any) -> Response:
try:
jsonschema.validate(instance=kwargs["rison"], schema=schema)
except jsonschema.ValidationError as e:
- return self.response_400(message=f"Not a valid rison schema {e}")
+ try:
+ validation_message = str(e).split("\n", 1)[0]
+ except Exception:
+ validation_message = str(e)
+ return self.response_400(
+ message=f"Not a valid rison schema {validation_message}"
+ )
return f(self, *args, **kwargs)
return functools.update_wrapper(wraps, f)
@@ -551,7 +566,7 @@ def create_blueprint(
self.blueprint = Blueprint(self.endpoint, __name__, url_prefix=self.route_base)
# Exempt API from CSRF protect
if self.csrf_exempt:
- csrf = self.appbuilder.app.extensions.get("csrf")
+ csrf = current_app.extensions.get("csrf")
if csrf:
csrf.exempt(self.blueprint)
@@ -617,12 +632,12 @@ def _register_urls(self) -> None:
):
continue
if attr_name in self.exclude_route_methods:
- log.info("Not registering route for method %s", attr_name)
+ log.debug("Not registering route for method %s", attr_name)
continue
attr = getattr(self, attr_name)
if hasattr(attr, "_urls"):
for url, methods in attr._urls:
- log.info(
+ log.debug(
"Registering route %s%s %s",
self.blueprint.url_prefix,
url,
@@ -837,8 +852,8 @@ def response_500(self, message: str = None) -> Response:
return self.response(500, **{"message": message})
-class BaseModelApi(BaseApi):
- datamodel: Optional[SQLAInterface] = None
+class ModelRestApi(BaseApi):
+ datamodel: SQLAInterface
"""
Your sqla model you must initialize it like::
@@ -856,7 +871,7 @@ class MyView(ModelRestApi):
search_columns = ['name', 'address']
"""
- search_filters = None
+ search_filters: dict[str, BaseFilter] | None = None
"""
Override default search filters for columns
"""
@@ -910,55 +925,6 @@ class MyView(ModelRestApi):
Filters object will calculate all possible filter types
based on search_columns
"""
-
- def __init__(self, **kwargs: Any) -> None:
- datamodel = kwargs.get("datamodel", None)
- if datamodel:
- self.datamodel = datamodel
- self._init_properties()
- self._init_titles()
- super(BaseModelApi, self).__init__()
-
- def _gen_labels_columns(self, list_columns: List[str]) -> None:
- """
- Auto generates pretty label_columns from list of columns
- """
- for col in list_columns:
- if not self.label_columns.get(col):
- self.label_columns[col] = self._prettify_column(col)
-
- def _label_columns_json(self, cols: Optional[List[str]] = None) -> Dict[str, Any]:
- """
- Prepares dict with labels to be JSON serializable
- """
- ret = {}
- cols = cols or []
- d = {k: v for (k, v) in self.label_columns.items() if k in cols}
- for key, value in d.items():
- ret[key] = as_unicode(_(value).encode("UTF-8"))
- return ret
-
- def _init_properties(self) -> None:
- self.label_columns = self.label_columns or {}
- self.base_filters = self.base_filters or []
- self.search_exclude_columns = self.search_exclude_columns or []
- self.search_columns = self.search_columns or []
-
- self._base_filters = self.datamodel.get_filters().add_filter_list(
- self.base_filters
- )
- search_columns = self.datamodel.get_search_columns_list()
- if not self.search_columns:
- self.search_columns = [
- x for x in search_columns if x not in self.search_exclude_columns
- ]
- self._gen_labels_columns(self.datamodel.get_columns_list())
-
- def _init_titles(self) -> None:
- pass
-
-
-class ModelRestApi(BaseModelApi):
list_title = ""
"""
List Title, if not configured the default is
@@ -1058,9 +1024,8 @@ class override for the FAB_API_MAX_SIZE, use special -1 to allow for any page
"""
Dictionary with column descriptions that will be shown on the forms::
- class MyView(ModelView):
- datamodel = SQLAModel(MyTable, db.session)
-
+ class MyView(ModelRestApi):
+ datamodel = SQLAModel(Model1)
description_columns = {'name':'your models name column',
'address':'the address column'}
"""
@@ -1091,7 +1056,7 @@ class ContactModelView(ModelRestApi):
Add a custom filter to form related fields::
class ContactModelView(ModelRestApi):
- datamodel = SQLAModel(Contact, db.session)
+ datamodel = SQLAModel(Contact)
edit_query_rel_fields = {'group':[['name',FilterStartsWith,'W']]}
"""
@@ -1139,7 +1104,9 @@ class ContactModelView(ModelRestApi):
}
def __init__(self) -> None:
- super(ModelRestApi, self).__init__()
+ super().__init__()
+ self._init_properties()
+ self._init_titles()
self.validators_columns = self.validators_columns or {}
self.model2schemaconverter = self.model2schemaconverter(
self.datamodel, self.validators_columns
@@ -1149,7 +1116,7 @@ def create_blueprint(
self, appbuilder: "AppBuilder", *args: Any, **kwargs: Any
) -> Blueprint:
self._init_model_schemas()
- return super(ModelRestApi, self).create_blueprint(appbuilder, *args, **kwargs)
+ return super().create_blueprint(appbuilder, *args, **kwargs)
@property
def list_model_schema_name(self) -> str:
@@ -1168,7 +1135,7 @@ def edit_model_schema_name(self) -> str:
return f"{self.__class__.__name__}.put"
def add_apispec_components(self, api_spec: APISpec) -> None:
- super(ModelRestApi, self).add_apispec_components(api_spec)
+ super().add_apispec_components(api_spec)
api_spec.components.schema(
self.list_model_schema_name, schema=self.list_model_schema
)
@@ -1182,6 +1149,25 @@ def add_apispec_components(self, api_spec: APISpec) -> None:
self.show_model_schema_name, schema=self.show_model_schema
)
+ def _gen_labels_columns(self, list_columns: List[str]) -> None:
+ """
+ Auto generates pretty label_columns from list of columns
+ """
+ for col in list_columns:
+ if not self.label_columns.get(col):
+ self.label_columns[col] = self._prettify_column(col)
+
+ def _label_columns_json(self, cols: Optional[List[str]] = None) -> Dict[str, Any]:
+ """
+ Prepares dict with labels to be JSON serializable
+ """
+ ret = {}
+ cols = cols or []
+ d = {k: v for (k, v) in self.label_columns.items() if k in cols}
+ for key, value in d.items():
+ ret[key] = as_unicode(_(value).encode("UTF-8"))
+ return ret
+
def _init_model_schemas(self) -> None:
# Create Marshmalow schemas if one is not specified
if self.list_model_schema is None:
@@ -1209,7 +1195,6 @@ def _init_titles(self) -> None:
"""
Init Titles if not defined
"""
- super(ModelRestApi, self)._init_titles()
class_name = self.datamodel.model_name
if not self.list_title:
self.list_title = "List " + self._prettify_name(class_name)
@@ -1225,7 +1210,21 @@ def _init_properties(self) -> None:
"""
Initializes all properties
"""
- super(ModelRestApi, self)._init_properties()
+ self.label_columns = self.label_columns or {}
+ self.base_filters = self.base_filters or []
+ self.search_exclude_columns = self.search_exclude_columns or []
+ self.search_columns = self.search_columns or []
+
+ self._base_filters = self.datamodel.get_filters().add_filter_list(
+ self.base_filters
+ )
+ search_columns = self.datamodel.get_search_columns_list()
+ if not self.search_columns:
+ self.search_columns = [
+ x for x in search_columns if x not in self.search_exclude_columns
+ ]
+ self._gen_labels_columns(self.datamodel.get_columns_list())
+
# Reset init props
self.description_columns = self.description_columns or {}
self.list_exclude_columns = self.list_exclude_columns or []
@@ -1276,7 +1275,7 @@ def _fetch_entities(self, model_class: Model, ids: List[int]):
if not ids:
return []
return (
- self.datamodel.session.query(model_class)
+ current_app.appbuilder.session.query(model_class)
.filter(model_class.id.in_(ids))
.all()
)
@@ -1752,7 +1751,7 @@ def post_headless(self) -> Response:
# This validates custom Schema with custom validations
self.pre_add(item)
try:
- self.datamodel.add(item, raise_exception=True)
+ self.datamodel.add(item)
self.post_add(item)
return self.response(
201,
@@ -1761,8 +1760,10 @@ def post_headless(self) -> Response:
"id": self.datamodel.get_pk_value(item),
},
)
- except IntegrityError as e:
- return self.response_422(message=str(e.orig))
+ except DatabaseException as e:
+ return self.response_422(
+ message=f"Database exception occurred: {e.__cause__}"
+ )
@expose("/", methods=["POST"])
@protect()
@@ -1818,14 +1819,16 @@ def put_headless(self, pk: ModelKeyType) -> Response:
return self.response_422(message=err.messages)
self.pre_update(item)
try:
- self.datamodel.edit(item, raise_exception=True)
+ self.datamodel.edit(item)
self.post_update(item)
return self.response(
200,
**{API_RESULT_RES_KEY: self.edit_model_schema.dump(item, many=False)},
)
- except IntegrityError as e:
- return self.response_422(message=str(e.orig))
+ except DatabaseException as e:
+ return self.response_422(
+ message=f"Database exception occurred: {e.__cause__}"
+ )
@expose("/", methods=["PUT"])
@protect()
@@ -1879,11 +1882,13 @@ def delete_headless(self, pk: ModelKeyType) -> Response:
return self.response_404()
self.pre_delete(item)
try:
- self.datamodel.delete(item, raise_exception=True)
+ self.datamodel.delete(item)
self.post_delete(item)
return self.response(200, message="OK")
- except IntegrityError as e:
- return self.response_422(message=str(e.orig))
+ except DatabaseException as e:
+ return self.response_422(
+ message=f"Database exception occurred: {e.__cause__}"
+ )
@expose("/", methods=["DELETE"])
@protect()
diff --git a/flask_appbuilder/api/convert.py b/flask_appbuilder/api/convert.py
index f3def78b53..c969544d8f 100644
--- a/flask_appbuilder/api/convert.py
+++ b/flask_appbuilder/api/convert.py
@@ -1,5 +1,6 @@
from typing import Any, Callable, Dict, List, Optional, Type
+from flask import current_app
from flask_appbuilder.models.sqla import Model
from flask_appbuilder.models.sqla.interface import SQLAInterface
from marshmallow import fields, Schema
@@ -123,7 +124,7 @@ class Meta:
model = _model
fields = columns
load_instance = True
- sqla_session = self.datamodel.session
+ sqla_session = current_app.appbuilder.session
# The parent_schema_name is useful to humanize nested schema names
# This name comes from ModelRestApi
parent_schema_name = _parent_schema_name
@@ -134,7 +135,7 @@ class MetaSchema(SQLAlchemyAutoSchema, class_mixin): # type: ignore
class Meta:
model = _model
load_instance = True
- sqla_session = self.datamodel.session
+ sqla_session = current_app.appbuilder.session
# The parent_schema_name is useful to humanize nested schema names
# This name comes from ModelRestApi
parent_schema_name = _parent_schema_name
diff --git a/flask_appbuilder/api/manager.py b/flask_appbuilder/api/manager.py
index 6999a9e401..182aebc23b 100644
--- a/flask_appbuilder/api/manager.py
+++ b/flask_appbuilder/api/manager.py
@@ -88,7 +88,7 @@ class SwaggerView(BaseView):
@has_access
def show(self, version):
return self.render_template(
- self.appbuilder.app.config.get(
+ current_app.config.get(
"FAB_API_SWAGGER_TEMPLATE", "appbuilder/swagger/swagger.html"
),
openapi_uri=self.openapi_uri.format(version),
@@ -97,8 +97,8 @@ def show(self, version):
class OpenApiManager(BaseManager):
def register_views(self):
- if not self.appbuilder.app.config.get("FAB_ADD_OPENAPI_VIEWS", True):
+ if not current_app.config.get("FAB_ADD_OPENAPI_VIEWS", True):
return
- if self.appbuilder.get_app.config.get("FAB_API_SWAGGER_UI", False):
+ if current_app.config.get("FAB_API_SWAGGER_UI", False):
self.appbuilder.add_api(OpenApi)
self.appbuilder.add_view_no_menu(SwaggerView)
diff --git a/flask_appbuilder/babel/manager.py b/flask_appbuilder/babel/manager.py
index f3df0c7a72..523f9ea2a9 100644
--- a/flask_appbuilder/babel/manager.py
+++ b/flask_appbuilder/babel/manager.py
@@ -1,6 +1,6 @@
import os
-from flask import has_request_context, request, session
+from flask import current_app, has_request_context, request, session
from flask_appbuilder.babel.views import LocaleView
from flask_appbuilder.basemanager import BaseManager
from flask_babel import Babel
@@ -12,18 +12,17 @@ class BabelManager(BaseManager):
def __init__(self, appbuilder):
super(BabelManager, self).__init__(appbuilder)
- app = appbuilder.get_app
- app.config.setdefault("BABEL_DEFAULT_LOCALE", "en")
- if not app.config.get("LANGUAGES"):
- app.config["LANGUAGES"] = {"en": {"flag": "us", "name": "English"}}
+ current_app.config.setdefault("BABEL_DEFAULT_LOCALE", "en")
+ if not current_app.config.get("LANGUAGES"):
+ current_app.config["LANGUAGES"] = {"en": {"flag": "us", "name": "English"}}
appbuilder_parent_dir = os.path.join(
os.path.dirname(os.path.abspath(__file__)), os.pardir
)
appbuilder_translations_path = os.path.join(
appbuilder_parent_dir, "translations"
)
- if "BABEL_TRANSLATION_DIRECTORIES" in app.config:
- current_translation_directories = app.config.get(
+ if "BABEL_TRANSLATION_DIRECTORIES" in current_app.config:
+ current_translation_directories = current_app.config.get(
"BABEL_TRANSLATION_DIRECTORIES"
)
translations_path = (
@@ -31,9 +30,8 @@ def __init__(self, appbuilder):
)
else:
translations_path = appbuilder_translations_path + ";translations"
- app.config["BABEL_TRANSLATION_DIRECTORIES"] = translations_path
- self.babel = Babel(app)
- self.babel.locale_selector_func = self.get_locale
+ current_app.config["BABEL_TRANSLATION_DIRECTORIES"] = translations_path
+ self.babel = Babel(current_app, locale_selector=self.get_locale)
def register_views(self):
self.locale_view = LocaleView()
@@ -41,11 +39,11 @@ def register_views(self):
@property
def babel_default_locale(self):
- return self.appbuilder.get_app.config["BABEL_DEFAULT_LOCALE"]
+ return current_app.config["BABEL_DEFAULT_LOCALE"]
@property
def languages(self):
- return self.appbuilder.get_app.config["LANGUAGES"]
+ return current_app.config["LANGUAGES"]
def get_locale(self):
if has_request_context():
diff --git a/flask_appbuilder/base.py b/flask_appbuilder/base.py
index 14aedfc6d0..5b92b8ed1e 100644
--- a/flask_appbuilder/base.py
+++ b/flask_appbuilder/base.py
@@ -1,14 +1,14 @@
+from __future__ import annotations
+
from functools import reduce
import logging
from typing import Any, Callable, cast, Dict, List, Optional, Type, TYPE_CHECKING, Union
from flask import Blueprint, current_app, Flask, url_for
-from sqlalchemy.orm.session import Session as SessionBase
-
-from . import __version__
-from .api.manager import OpenApiManager
-from .babel.manager import BabelManager
-from .const import (
+from flask_appbuilder import __version__
+from flask_appbuilder.api.manager import OpenApiManager
+from flask_appbuilder.babel.manager import BabelManager
+from flask_appbuilder.const import (
LOGMSG_ERR_FAB_ADD_PERMISSION_MENU,
LOGMSG_ERR_FAB_ADD_PERMISSION_VIEW,
LOGMSG_ERR_FAB_ADDON_IMPORT,
@@ -17,9 +17,10 @@
LOGMSG_INF_FAB_ADDON_ADDED,
LOGMSG_WAR_FAB_VIEW_EXISTS,
)
-from .filters import TemplateFilters
-from .menu import Menu, MenuApiManager
-from .views import IndexView, UtilView
+from flask_appbuilder.filters import TemplateFilters
+from flask_appbuilder.menu import Menu, MenuApiManager
+from flask_appbuilder.views import IndexView, UtilView
+from sqlalchemy.orm.session import Session as SessionBase
if TYPE_CHECKING:
from flask_appbuilder.basemanager import BaseManager
@@ -49,7 +50,7 @@ def dynamic_class_import(class_path: str) -> Optional[DynamicImportType]:
tmp = class_path.split(".")
module_path = ".".join(tmp[0:-1])
package = __import__(module_path)
- return reduce(getattr, tmp[1:], package)
+ return reduce(getattr, tmp[1:], package) # type: ignore
except Exception as e:
log.exception(e)
log.error(LOGMSG_ERR_FAB_ADDON_IMPORT, class_path, e)
@@ -65,25 +66,14 @@ class AppBuilder:
initialize your application like this for SQLAlchemy::
from flask import Flask
- from flask_appbuilder import SQLA, AppBuilder
+ from flask_appbuilder import AppBuilder
+ from flask_appbuilder.models.sqla.base import SQLA
app = Flask(__name__)
app.config.from_object('config')
db = SQLA(app)
appbuilder = AppBuilder(app, db.session)
- When using MongoEngine::
-
- from flask import Flask
- from flask_appbuilder import AppBuilder
- from flask_appbuilder.security.mongoengine.manager import SecurityManager
- from flask_mongoengine import MongoEngine
-
- app = Flask(__name__)
- app.config.from_object('config')
- dbmongo = MongoEngine(app)
- appbuilder = AppBuilder(app, security_manager_class=SecurityManager)
-
You can also create everything as an application factory.
"""
@@ -124,6 +114,7 @@ def __init__(
optional, update permissions flag (Boolean) you can use
FAB_UPDATE_PERMS config key also
"""
+ self._session = None
self.baseviews: List[Union[Type["AbstractViewApi"], "AbstractViewApi"]] = []
# temporary list that hold addon_managers config key
@@ -136,7 +127,6 @@ def __init__(
self.indexview = indexview
self.static_folder = static_folder
self.static_url_path = static_url_path
- self.app = app
self.update_perms = update_perms
# Security Manager Class
@@ -147,7 +137,7 @@ def __init__(
self.menuapi_manager: MenuApiManager = None # type: ignore
if app is not None:
- self.init_app(app, session)
+ self.init_app(app, session=session)
def init_app(self, app: Flask, session: SessionBase) -> None:
"""
@@ -157,6 +147,7 @@ def init_app(self, app: Flask, session: SessionBase) -> None:
:param session: The SQLAlchemy session
"""
+ log.info("Initializing AppBuilder")
app.config.setdefault("APP_NAME", "F.A.B.")
app.config.setdefault("APP_THEME", "")
app.config.setdefault("APP_ICON", "")
@@ -168,8 +159,8 @@ def init_app(self, app: Flask, session: SessionBase) -> None:
app.config.setdefault("FAB_STATIC_FOLDER", self.static_folder)
app.config.setdefault("FAB_STATIC_URL_PATH", self.static_url_path)
- self.app = app
-
+ self._init_extension(app)
+ self._session = session
self.base_template = app.config.get("FAB_BASE_TEMPLATE", self.base_template)
self.static_folder = app.config.get("FAB_STATIC_FOLDER", self.static_folder)
self.static_url_path = app.config.get(
@@ -207,7 +198,6 @@ def init_app(self, app: Flask, session: SessionBase) -> None:
self.security_manager_class = SecurityManager
self._addon_managers = app.config["ADDON_MANAGERS"]
- self.session = session
self.sm = self.security_manager_class(self)
self.bm = BabelManager(self)
self.openapi_manager = OpenApiManager(self)
@@ -217,16 +207,16 @@ def init_app(self, app: Flask, session: SessionBase) -> None:
app.before_request(self.sm.before_request)
self._add_admin_views()
self._add_addon_views()
- if self.app:
- self._add_menu_permissions()
- else:
- self.post_init()
- self._init_extension(app)
+ self._add_menu_permissions()
+ log.info("Initializing AppBuilder done")
def _init_extension(self, app: Flask) -> None:
app.appbuilder = self
- if not hasattr(app, "extensions"):
- app.extensions = {}
+ if "appbuilder" in app.extensions:
+ raise RuntimeError(
+ "A 'Flask-AppBuilder' instance has"
+ " already been registered on this Flask app."
+ )
app.extensions["appbuilder"] = self
def post_init(self) -> None:
@@ -234,31 +224,27 @@ def post_init(self) -> None:
# instantiate the views and add session
baseview = self._check_and_init(baseview)
# Register the views has blueprints
- if baseview.__class__.__name__ not in self.get_app.blueprints.keys():
+ if baseview.__class__.__name__ not in current_app.blueprints.keys():
self.register_blueprint(baseview)
# Add missing permissions where needed
self.add_permissions()
@property
- def get_app(self) -> Flask:
- """
- Get current or configured flask app
-
- :return: Flask App
- """
- if self.app:
- return self.app
- else:
- return current_app
+ def app(self) -> Flask:
+ log.warning(
+ "appbuilder.app is deprecated and will be removed in a future version. "
+ "Use current_app instead"
+ )
+ return current_app
@property
- def get_session(self) -> SessionBase:
+ def session(self) -> SessionBase:
"""
Get the current sqlalchemy session.
:return: SQLAlchemy Session
"""
- return self.session
+ return self._session
@property
def app_name(self) -> str:
@@ -267,7 +253,7 @@ def app_name(self) -> str:
:return: String with app name
"""
- return self.get_app.config["APP_NAME"]
+ return current_app.config["APP_NAME"]
@property
def app_theme(self) -> str:
@@ -276,7 +262,7 @@ def app_theme(self) -> str:
:return: String app theme name
"""
- return self.get_app.config["APP_THEME"]
+ return current_app.config["APP_THEME"]
@property
def app_icon(self) -> str:
@@ -285,11 +271,11 @@ def app_icon(self) -> str:
:return: String with relative app icon location
"""
- return self.get_app.config["APP_ICON"]
+ return current_app.config["APP_ICON"]
@property
def languages(self) -> Dict[str, Any]:
- return self.get_app.config["LANGUAGES"]
+ return current_app.config["LANGUAGES"]
@property
def version(self) -> str:
@@ -301,7 +287,7 @@ def version(self) -> str:
return __version__
def _add_global_filters(self) -> None:
- self.template_filters = TemplateFilters(self.get_app, self.sm)
+ self.template_filters = TemplateFilters(current_app, self.sm)
def _add_global_static(self) -> None:
bp = Blueprint(
@@ -312,7 +298,7 @@ def _add_global_static(self) -> None:
static_folder=self.static_folder,
static_url_path=self.static_url_path,
)
- self.get_app.register_blueprint(bp)
+ current_app.register_blueprint(bp)
def _add_admin_views(self) -> None:
"""
@@ -349,11 +335,6 @@ def _add_addon_views(self) -> None:
def _check_and_init(
self, baseview: Union[Type["AbstractViewApi"], "AbstractViewApi"]
) -> "AbstractViewApi":
- # If class if not instantiated, instantiate it
- # and add db session from security models.
- if hasattr(baseview, "datamodel"):
- if getattr(baseview, "datamodel").session is None:
- getattr(baseview, "datamodel").session = self.session
if isinstance(baseview, type):
baseview = baseview()
return baseview
@@ -438,16 +419,15 @@ def add_view(
appbuilder.add_link("google", href="www.google.com", icon = "fa-google-plus")
"""
baseview = self._check_and_init(baseview)
- log.info(LOGMSG_INF_FAB_ADD_VIEW, baseview.__class__.__name__, name)
+ log.debug(LOGMSG_INF_FAB_ADD_VIEW, baseview.__class__.__name__, name)
if not self._view_exists(baseview):
baseview.appbuilder = self
self.baseviews.append(baseview)
self._process_inner_views()
- if self.app:
- self.register_blueprint(baseview)
- self._add_permission(baseview)
- self.add_limits(baseview)
+ self.register_blueprint(baseview)
+ self._add_permission(baseview)
+ self.add_limits(baseview)
self.add_link(
name=name,
href=href,
@@ -515,10 +495,9 @@ def add_link(
baseview=baseview,
cond=cond,
)
- if self.app:
- self._add_permissions_menu(name)
- if category:
- self._add_permissions_menu(category)
+ self._add_permissions_menu(name)
+ if category:
+ self._add_permissions_menu(category)
def add_separator(
self, category: str, cond: Optional[Callable[..., bool]] = None
@@ -555,18 +534,17 @@ def add_view_no_menu(
"""
baseview = self._check_and_init(baseview)
- log.info(LOGMSG_INF_FAB_ADD_VIEW, baseview.__class__.__name__, "")
+ log.debug(LOGMSG_INF_FAB_ADD_VIEW, baseview.__class__.__name__, "")
if not self._view_exists(baseview):
baseview.appbuilder = self
self.baseviews.append(baseview)
self._process_inner_views()
- if self.app:
- self.register_blueprint(
- baseview, endpoint=endpoint, static_folder=static_folder
- )
- self._add_permission(baseview)
- self.add_limits(baseview)
+ self.register_blueprint(
+ baseview, endpoint=endpoint, static_folder=static_folder
+ )
+ self._add_permission(baseview)
+ self.add_limits(baseview)
else:
log.warning(LOGMSG_WAR_FAB_VIEW_EXISTS, baseview.__class__.__name__)
return baseview
@@ -613,7 +591,7 @@ def security_converge(self, dry: bool = False) -> Dict[str, Any]:
return {}
return self.sm.security_converge(self.baseviews, self.menu.menu, dry)
- def get_url_for_login_with(self, next_url: str = None) -> str:
+ def get_url_for_login_with(self, next_url: str | None = None) -> str:
if self.sm.auth_view is None:
return ""
return url_for("%s.%s" % (self.sm.auth_view.endpoint, "login"), next=next_url)
@@ -702,7 +680,7 @@ def register_blueprint(
endpoint: Optional[str] = None,
static_folder: Optional[str] = None,
) -> None:
- self.get_app.register_blueprint(
+ current_app.register_blueprint(
baseview.create_blueprint(
self, endpoint=endpoint, static_folder=static_folder
)
diff --git a/flask_appbuilder/baseviews.py b/flask_appbuilder/baseviews.py
index b273f2d14e..4924f0b3ce 100644
--- a/flask_appbuilder/baseviews.py
+++ b/flask_appbuilder/baseviews.py
@@ -15,20 +15,23 @@
session,
url_for,
)
-
-from ._compat import as_unicode
-from .actions import ActionItem
-from .const import PERMISSION_PREFIX
-from .forms import GeneralModelConverter
-from .hooks import get_before_request_hooks, wrap_route_handler_with_hooks
-from .urltools import (
+from flask_appbuilder._compat import as_unicode
+from flask_appbuilder.actions import ActionItem
+from flask_appbuilder.const import PERMISSION_PREFIX
+from flask_appbuilder.forms import GeneralModelConverter
+from flask_appbuilder.hooks import (
+ get_before_request_hooks,
+ wrap_route_handler_with_hooks,
+)
+from flask_appbuilder.urltools import (
get_filter_args,
get_order_args,
get_page_args,
get_page_size_args,
Stack,
)
-from .widgets import FormWidget, ListWidget, SearchWidget, ShowWidget
+from flask_appbuilder.widgets import FormWidget, ListWidget, SearchWidget, ShowWidget
+from flask_babel import lazy_gettext
if TYPE_CHECKING:
from flask_appbuilder.base import AppBuilder
@@ -73,8 +76,8 @@ def wrap(f):
class AbstractViewApi:
appbuilder: "AppBuilder"
base_permissions: Optional[List[str]]
- class_permission_name: str
- endpoint: str
+ class_permission_name: Optional[str]
+ endpoint: Optional[str]
default_view: str
def create_blueprint(
@@ -307,7 +310,7 @@ def _register_urls(self):
):
continue
if attr_name in self.exclude_route_methods:
- log.info(
+ log.debug(
"Not registering route for method %s.%s",
self.__class__.__name__,
attr_name,
@@ -316,7 +319,7 @@ def _register_urls(self):
attr = getattr(self, attr_name)
if hasattr(attr, "_urls"):
for url, methods in attr._urls:
- log.info(
+ log.debug(
"Registering route %s%s %s",
self.blueprint.url_prefix,
url,
@@ -339,6 +342,7 @@ def render_template(self, template, **kwargs):
"""
kwargs["base_template"] = self.appbuilder.base_template
kwargs["appbuilder"] = self.appbuilder
+ kwargs["current_app"] = current_app
return render_template(
template, **dict(list(kwargs.items()) + list(self.extra_args.items()))
)
@@ -667,6 +671,21 @@ class BaseCRUDView(BaseModelView):
Customize ModelView overriding this properties
"""
+ """ Messages to display on CRUD Events """
+ add_row_message = lazy_gettext("Added Row")
+ edit_row_message = lazy_gettext("Changed Row")
+ delete_row_message = lazy_gettext("Deleted Row")
+ delete_integrity_error_message = lazy_gettext(
+ "Associated data exists, please delete them first"
+ )
+ add_integrity_error_message = lazy_gettext(
+ "Integrity error, probably unique constraint"
+ )
+ edit_integrity_error_message = lazy_gettext(
+ "Integrity error, probably unique constraint"
+ )
+ database_error_message = lazy_gettext("Database Error")
+
related_views = None
"""
List with ModelView classes
@@ -1229,9 +1248,12 @@ def _add(self):
except Exception as e:
flash(str(e), "danger")
else:
- if self.datamodel.add(item):
+ try:
+ self.datamodel.add(item)
self.post_add(item)
- flash(*self.datamodel.message)
+ flash(self.add_row_message, "success")
+ except Exception as e:
+ flash(str(e))
finally:
return None
else:
@@ -1273,9 +1295,12 @@ def _edit(self, pk):
except Exception as e:
flash(str(e), "danger")
else:
- if self.datamodel.edit(item):
+ try:
+ self.datamodel.edit(item)
self.post_update(item)
- flash(*self.datamodel.message)
+ flash(self.edit_row_message, "success")
+ except Exception:
+ flash(self.database_error_message, "danger")
finally:
return None
else:
@@ -1315,9 +1340,12 @@ def _delete(self, pk):
except Exception as e:
flash(str(e), "danger")
else:
- if self.datamodel.delete(item):
+ try:
+ self.datamodel.delete(item)
self.post_delete(item)
- flash(*self.datamodel.message)
+ flash(self.delete_row_message, "success")
+ except Exception as e:
+ flash(str(e))
self.update_redirect()
"""
@@ -1378,9 +1406,7 @@ def is_get_mutation_allowed(self) -> bool:
"""
if current_app.config.get("FAB_ALLOW_GET_UNSAFE_MUTATIONS", False):
return True
- return not (
- request.method == "GET" and self.appbuilder.app.extensions.get("csrf")
- )
+ return not (request.method == "GET" and current_app.extensions.get("csrf"))
def prefill_form(self, form, pk):
"""
diff --git a/flask_appbuilder/cli.py b/flask_appbuilder/cli.py
index 5823039bfa..e1134bd5fe 100644
--- a/flask_appbuilder/cli.py
+++ b/flask_appbuilder/cli.py
@@ -1,7 +1,9 @@
+from __future__ import annotations
+
from io import BytesIO
import os
import shutil
-from typing import Optional, Union
+from typing import Any, Optional, Union
from urllib.request import urlopen
from zipfile import ZipFile
@@ -14,7 +16,7 @@
SQLA_REPO_URL = (
- "https://github.com/dpgaspar/Flask-AppBuilder-Skeleton/archive/master.zip"
+ "https://github.com/dpgaspar/Flask-AppBuilder-Skeleton/archive/refs/heads/v5.zip"
)
MONGOENGIE_REPO_URL = (
"https://github.com/dpgaspar/Flask-AppBuilder-Skeleton-me/archive/master.zip"
@@ -26,18 +28,18 @@
MIN_SECRET_KEY_SIZE = 20
-def validate_secret_key(ctx, param, value):
+def validate_secret_key(ctx: click.Context, param: click.Option, value: str) -> str:
if len(value) < MIN_SECRET_KEY_SIZE:
raise click.BadParameter(f"SECRET_KEY size is less then {MIN_SECRET_KEY_SIZE}")
return value
-def echo_header(title):
+def echo_header(title: str) -> None:
click.echo(click.style(title, fg="green"))
click.echo(click.style("-" * len(title), fg="green"))
-def cast_int_like_to_int(cli_arg: Union[None, str, int]) -> Union[None, str, int]:
+def cast_int_like_to_int(cli_arg: Any) -> Union[None, str, int]:
"""Cast int-like objects to int if possible
If the arg cannot be cast to an integer, return the unmodified object instead."""
@@ -53,7 +55,7 @@ def cast_int_like_to_int(cli_arg: Union[None, str, int]) -> Union[None, str, int
@click.group()
-def fab():
+def fab() -> None:
"""FAB flask group commands"""
pass
@@ -65,7 +67,9 @@ def fab():
@click.option("--email", default="admin@fab.org", prompt="Email")
@click.password_option()
@with_appcontext
-def create_admin(username, firstname, lastname, email, password):
+def create_admin(
+ username: str, firstname: str, lastname: str, email: str, password: str
+) -> None:
"""
Creates an admin user
"""
@@ -101,7 +105,7 @@ def create_admin(username, firstname, lastname, email, password):
if user:
click.echo(click.style("Admin User {0} created.".format(username), fg="green"))
else:
- click.echo(click.style("No user created an error occured", fg="red"))
+ click.echo(click.style("No user created an error occurred", fg="red"))
@fab.command("create-user")
@@ -112,7 +116,9 @@ def create_admin(username, firstname, lastname, email, password):
@click.option("--email", prompt="Email")
@click.password_option()
@with_appcontext
-def create_user(role, username, firstname, lastname, email, password):
+def create_user(
+ role: str, username: str, firstname: str, lastname: str, email: str, password: str
+) -> None:
"""
Create a user
"""
@@ -146,7 +152,7 @@ def create_user(role, username, firstname, lastname, email, password):
)
@click.password_option()
@with_appcontext
-def reset_password(username, password):
+def reset_password(username: str, password: str) -> None:
"""
Resets a user's password
"""
@@ -160,13 +166,13 @@ def reset_password(username, password):
@fab.command("create-db")
@with_appcontext
-def create_db():
+def create_db() -> None:
"""
Create all your database objects (SQLAlchemy specific).
"""
from flask_appbuilder.models.sqla import Model
- engine = current_app.appbuilder.get_session.get_bind(mapper=None, clause=None)
+ engine = current_app.appbuilder.session.get_bind(mapper=None, clause=None)
Model.metadata.create_all(engine)
click.echo(click.style("DB objects created", fg="green"))
@@ -196,7 +202,7 @@ def import_roles(path: str) -> None:
@fab.command("version")
@with_appcontext
-def version():
+def version() -> None:
"""
Flask-AppBuilder package version
"""
@@ -211,7 +217,7 @@ def version():
@fab.command("security-cleanup")
@with_appcontext
-def security_cleanup():
+def security_cleanup() -> None:
"""
Cleanup unused permissions from views and roles.
"""
@@ -224,7 +230,7 @@ def security_cleanup():
"--dry-run", "-d", is_flag=True, help="Dry run & print state transitions."
)
@with_appcontext
-def security_converge(dry_run=False):
+def security_converge(dry_run: bool = False) -> None:
"""
Converges security deletes previous_class_permission_name
"""
@@ -249,7 +255,7 @@ def security_converge(dry_run=False):
@fab.command("create-permissions")
@with_appcontext
-def create_permissions():
+def create_permissions() -> None:
"""
Creates all permissions and add them to the ADMIN Role.
"""
@@ -259,7 +265,7 @@ def create_permissions():
@fab.command("list-views")
@with_appcontext
-def list_views():
+def list_views() -> None:
"""
List all registered views
"""
@@ -274,7 +280,7 @@ def list_views():
@fab.command("list-users")
@with_appcontext
-def list_users():
+def list_users() -> None:
"""
List all users on the database
"""
@@ -316,7 +322,7 @@ def create_app(name: str, engine: str, secret_key: str) -> None:
try:
if engine.lower() == "sqlalchemy":
url = urlopen(SQLA_REPO_URL)
- dirname = "Flask-AppBuilder-Skeleton-master"
+ dirname = "Flask-AppBuilder-Skeleton-5"
elif engine.lower() == "mongoengine":
url = urlopen(MONGOENGIE_REPO_URL)
dirname = "Flask-AppBuilder-Skeleton-me-master"
@@ -332,7 +338,6 @@ def create_app(name: str, engine: str, secret_key: str) -> None:
fd.write(rendered_template)
click.echo(click.style("Downloaded the skeleton app, good coding!", fg="green"))
- return True
except Exception as e:
click.echo(click.style("Something went wrong {0}".format(e), fg="red"))
if engine.lower() == "sqlalchemy":
@@ -347,7 +352,6 @@ def create_app(name: str, engine: str, secret_key: str) -> None:
"Try downloading from {0}".format(MONGOENGIE_REPO_URL), fg="green"
)
)
- return False
@fab.command("create-addon")
@@ -356,7 +360,7 @@ def create_app(name: str, engine: str, secret_key: str) -> None:
prompt="Your new addon name",
help="Your addon name will be prefixed by fab_addon_, directory will have this name",
)
-def create_addon(name):
+def create_addon(name: str) -> None:
"""
Create a Skeleton AddOn (needs internet connection to github)
"""
@@ -376,17 +380,15 @@ def create_addon(name):
click.echo(
click.style("Downloaded the skeleton addon, good coding!", fg="green")
)
- return True
except Exception as e:
click.echo(click.style("Something went wrong {0}".format(e), fg="red"))
- return False
@fab.command("collect-static")
@click.option(
"--static_folder", default="app/static", help="Your projects static folder"
)
-def collect_static(static_folder):
+def collect_static(static_folder: str) -> None:
"""
Copies flask-appbuilder static files to your projects static folder
"""
@@ -422,7 +424,9 @@ def collect_static(static_folder):
@click.option(
"--keywords", "-k", multiple=True, default=["lazy_gettext", "gettext", "_", "__"]
)
-def babel_extract(config, input, output, target, keywords):
+def babel_extract(
+ config: str, input: str, output: str, target: str, keywords: list[str]
+) -> None:
"""
Babel, Extracts and updates all messages marked for translation
"""
@@ -434,10 +438,10 @@ def babel_extract(config, input, output, target, keywords):
fg="green",
)
)
- keywords = " -k ".join(keywords)
+ keywords_args = " -k ".join(keywords)
os.popen(
"pybabel extract -F {0} -k {1} -o {2} {3}".format(
- config, keywords, output, input
+ config, keywords_args, output, input
)
)
click.echo(click.style("Starting Update target:{0}".format(target), fg="green"))
@@ -451,7 +455,7 @@ def babel_extract(config, input, output, target, keywords):
default="app/translations",
help="The target directory where translations reside",
)
-def babel_compile(target):
+def babel_compile(target: str) -> None:
"""
Babel, Compiles all translations
"""
diff --git a/flask_appbuilder/console.py b/flask_appbuilder/console.py
deleted file mode 100644
index cd10679778..0000000000
--- a/flask_appbuilder/console.py
+++ /dev/null
@@ -1,426 +0,0 @@
-"""
- Console utility to help manage F.A.B's apps
-
- use:
-
- $ fabmanager --help
-"""
-from io import BytesIO
-import os
-import shutil
-import sys
-from zipfile import ZipFile
-
-import click
-
-from . import const as c
-
-try:
- # For Python 3.0 and later
- from urllib.request import urlopen
-except ImportError:
- # Fall back to Python 2's urllib2
- from urllib2 import urlopen
-
-click.echo(
- click.style(
- "fabmanager is going to be deprecated in 2.2.X, you can use "
- "the same commands on the improved 'flask fab '",
- fg="red",
- )
-)
-
-SQLA_REPO_URL = (
- "https://github.com/dpgaspar/Flask-AppBuilder-Skeleton/archive/master.zip"
-)
-MONGOENGIE_REPO_URL = (
- "https://github.com/dpgaspar/Flask-AppBuilder-Skeleton-me/archive/master.zip"
-)
-ADDON_REPO_URL = (
- "https://github.com/dpgaspar/Flask-AppBuilder-Skeleton-AddOn/archive/master.zip"
-)
-
-
-def import_application(app_package, appbuilder):
- sys.path.append(os.getcwd())
- try:
- _app = __import__(app_package)
- except Exception as e:
- click.echo(
- click.style(
- "Was unable to import {0} Error: {1}".format(app_package, e), fg="red"
- )
- )
- exit(3)
- if hasattr(_app, appbuilder):
- return getattr(_app, appbuilder)
- else:
- click.echo(
- click.style(
- "There is no appbuilder var on your package, "
- "you can use appbuilder parameter to config",
- fg="red",
- )
- )
- exit(3)
-
-
-def echo_header(title):
- click.echo(click.style(title, fg="green"))
- click.echo(click.style("-" * len(title), fg="green"))
-
-
-@click.group()
-def cli_app():
- """
- This is a set of commands to ease the creation and maintenance
- of your flask-appbuilder applications.
-
- All commands that import your app will assume by default that
- you're running on your projects directory just before the app directory.
- They will also assume that __init__.py initializes AppBuilder
- like this (using a var named appbuilder) just like the skeleton app::
-
- appbuilder = AppBuilder(......)
-
- If you're using different namings use app and appbuilder parameters.
- """
- pass
-
-
-@cli_app.command("reset-password")
-@click.option("--app", default="app", help="Your application init directory (package)")
-@click.option("--appbuilder", default="appbuilder", help="your AppBuilder object")
-@click.option(
- "--username",
- default="admin",
- prompt="The username",
- help="Resets the password for a particular user.",
-)
-@click.password_option()
-def reset_password(app, appbuilder, username, password):
- """
- Resets a user's password
- """
- _appbuilder = import_application(app, appbuilder)
- user = _appbuilder.sm.find_user(username=username)
- if not user:
- click.echo("User {0} not found.".format(username))
- else:
- _appbuilder.sm.reset_password(user.id, password)
- click.echo(click.style("User {0} reseted.".format(username), fg="green"))
-
-
-@cli_app.command("create-admin")
-@click.option("--app", default="app", help="Your application init directory (package)")
-@click.option("--appbuilder", default="appbuilder", help="your AppBuilder object")
-@click.option("--username", default="admin", prompt="Username")
-@click.option("--firstname", default="admin", prompt="User first name")
-@click.option("--lastname", default="user", prompt="User last name")
-@click.option("--email", default="admin@fab.org", prompt="Email")
-@click.password_option()
-def create_admin(app, appbuilder, username, firstname, lastname, email, password):
- """
- Creates an admin user
- """
- auth_type = {
- c.AUTH_DB: "Database Authentications",
- c.AUTH_OID: "OpenID Authentication",
- c.AUTH_LDAP: "LDAP Authentication",
- c.AUTH_REMOTE_USER: "WebServer REMOTE_USER Authentication",
- c.AUTH_OAUTH: "OAuth Authentication",
- }
- _appbuilder = import_application(app, appbuilder)
- click.echo(
- click.style(
- "Recognized {0}.".format(
- auth_type.get(_appbuilder.sm.auth_type, "No Auth method")
- ),
- fg="green",
- )
- )
- role_admin = _appbuilder.sm.find_role(_appbuilder.sm.auth_role_admin)
- user = _appbuilder.sm.add_user(
- username, firstname, lastname, email, role_admin, password
- )
- if user:
- click.echo(click.style("Admin User {0} created.".format(username), fg="green"))
- else:
- click.echo(click.style("No user created an error occured", fg="red"))
-
-
-@cli_app.command("create-user")
-@click.option("--app", default="app", help="Your application init directory (package)")
-@click.option("--appbuilder", default="appbuilder", help="your AppBuilder object")
-@click.option("--role", default="Public", prompt="Role")
-@click.option("--username", prompt="Username")
-@click.option("--firstname", prompt="User first name")
-@click.option("--lastname", prompt="User last name")
-@click.option("--email", prompt="Email")
-@click.password_option()
-def create_user(app, appbuilder, role, username, firstname, lastname, email, password):
- """
- Create a user
- """
- _appbuilder = import_application(app, appbuilder)
- role_object = _appbuilder.sm.find_role(role)
- user = _appbuilder.sm.add_user(
- username, firstname, lastname, email, role_object, password
- )
- if user:
- click.echo(click.style("User {0} created.".format(username), fg="green"))
- else:
- click.echo(click.style("Error! No user created", fg="red"))
-
-
-@cli_app.command("run")
-@click.option("--app", default="app", help="Your application init directory (package)")
-@click.option("--appbuilder", default="appbuilder", help="your AppBuilder object")
-@click.option("--host", default="0.0.0.0")
-@click.option("--port", default=8080)
-@click.option("--debug", default=True)
-def run(app, appbuilder, host, port, debug):
- """
- Runs Flask dev web server.
- """
- _appbuilder = import_application(app, appbuilder)
- _appbuilder.get_app.run(host=host, port=port, debug=debug)
-
-
-@cli_app.command("create-db")
-@click.option("--app", default="app", help="Your application init directory (package)")
-@click.option("--appbuilder", default="appbuilder", help="your AppBuilder object")
-def create_db(app, appbuilder):
- """
- Create all your database objects (SQLAlchemy specific).
- """
- from flask_appbuilder.models.sqla import Base
-
- _appbuilder = import_application(app, appbuilder)
- engine = _appbuilder.get_session.get_bind(mapper=None, clause=None)
- Base.metadata.create_all(engine)
- click.echo(click.style("DB objects created", fg="green"))
-
-
-@cli_app.command("version")
-@click.option("--app", default="app", help="Your application init directory (package)")
-@click.option("--appbuilder", default="appbuilder", help="your AppBuilder object")
-def version(app, appbuilder):
- """
- Flask-AppBuilder package version
- """
- _appbuilder = import_application(app, appbuilder)
- click.echo(
- click.style(
- "F.A.B Version: {0}.".format(_appbuilder.version), bg="blue", fg="white"
- )
- )
-
-
-@cli_app.command("security-cleanup")
-@click.option("--app", default="app", help="Your application init directory (package)")
-@click.option("--appbuilder", default="appbuilder", help="your AppBuilder object")
-def security_cleanup(app, appbuilder):
- """
- Cleanup unused permissions from views and roles.
- """
- _appbuilder = import_application(app, appbuilder)
- _appbuilder.security_cleanup()
- click.echo(click.style("Finished security cleanup", fg="green"))
-
-
-@cli_app.command("list-views")
-@click.option("--app", default="app", help="Your application init directory (package)")
-@click.option("--appbuilder", default="appbuilder", help="your AppBuilder object")
-def list_views(app, appbuilder):
- """
- List all registered views
- """
- _appbuilder = import_application(app, appbuilder)
- echo_header("List of registered views")
- for view in _appbuilder.baseviews:
- click.echo(
- "View:{0} | Route:{1} | Perms:{2}".format(
- view.__class__.__name__, view.route_base, view.base_permissions
- )
- )
-
-
-@cli_app.command("list-users")
-@click.option("--app", default="app", help="Your application init directory (package)")
-@click.option("--appbuilder", default="appbuilder", help="your AppBuilder object")
-def list_users(app, appbuilder):
- """
- List all users on the database
- """
- _appbuilder = import_application(app, appbuilder)
- echo_header("List of users")
- for user in _appbuilder.sm.get_all_users():
- click.echo(
- "username:{0} | email:{1} | role:{2}".format(
- user.username, user.email, user.roles
- )
- )
-
-
-@cli_app.command("babel-extract")
-@click.option("--config", default="./babel/babel.cfg")
-@click.option("--input", default=".")
-@click.option("--output", default="./babel/messages.pot")
-@click.option("--target", default="app/translations")
-@click.option(
- "--keywords", "-k", multiple=True, default=["lazy_gettext", "gettext", "_", "__"]
-)
-def babel_extract(config, input, output, target, keywords):
- """
- Babel, Extracts and updates all messages marked for translation
- """
- click.echo(
- click.style(
- "Starting Extractions config:{0} input:{1} output:{2} keywords:{3}".format(
- config, input, output, keywords
- ),
- fg="green",
- )
- )
- keywords = " -k ".join(keywords)
- os.popen(
- "pybabel extract -F {0} -k {1} -o {2} {3}".format(
- config, keywords, output, input
- )
- )
- click.echo(click.style("Starting Update target:{0}".format(target), fg="green"))
- os.popen("pybabel update -N -i {0} -d {1}".format(output, target))
- click.echo(click.style("Finish, you can start your translations", fg="green"))
-
-
-@cli_app.command("babel-compile")
-@click.option(
- "--target",
- default="app/translations",
- help="The target directory where translations reside",
-)
-def babel_compile(target):
- """
- Babel, Compiles all translations
- """
- click.echo(click.style("Starting Compile target:{0}".format(target), fg="green"))
- os.popen("pybabel compile -f -d {0}".format(target))
-
-
-@cli_app.command("create-app")
-@click.option(
- "--name",
- prompt="Your new app name",
- help="Your application name, directory will have this name",
-)
-@click.option(
- "--engine",
- prompt="Your engine type, SQLAlchemy or MongoEngine",
- type=click.Choice(["SQLAlchemy", "MongoEngine"]),
- default="SQLAlchemy",
- help="Write your engine type",
-)
-def create_app(name, engine):
- """
- Create a Skeleton application (needs internet connection to github)
- """
- try:
- if engine.lower() == "sqlalchemy":
- url = urlopen(SQLA_REPO_URL)
- dirname = "Flask-AppBuilder-Skeleton-master"
- elif engine.lower() == "mongoengine":
- url = urlopen(MONGOENGIE_REPO_URL)
- dirname = "Flask-AppBuilder-Skeleton-me-master"
- zipfile = ZipFile(BytesIO(url.read()))
- zipfile.extractall()
- os.rename(dirname, name)
- click.echo(click.style("Downloaded the skeleton app, good coding!", fg="green"))
- return True
- except Exception as e:
- click.echo(click.style("Something went wrong {0}".format(e), fg="red"))
- if engine.lower() == "sqlalchemy":
- click.echo(
- click.style(
- "Try downloading from {0}".format(SQLA_REPO_URL), fg="green"
- )
- )
- elif engine.lower() == "mongoengine":
- click.echo(
- click.style(
- "Try downloading from {0}".format(MONGOENGIE_REPO_URL), fg="green"
- )
- )
- return False
-
-
-@cli_app.command("create-addon")
-@click.option(
- "--name",
- prompt="Your new addon name",
- help="Your addon name will be prefixed by fab_addon_, directory will have this name",
-)
-def create_addon(name):
- """
- Create a Skeleton AddOn (needs internet connection to github)
- """
- try:
- full_name = "fab_addon_" + name
- dirname = "Flask-AppBuilder-Skeleton-AddOn-master"
- url = urlopen(ADDON_REPO_URL)
- zipfile = ZipFile(BytesIO(url.read()))
- zipfile.extractall()
- os.rename(dirname, full_name)
- addon_path = os.path.join(full_name, full_name)
- os.rename(os.path.join(full_name, "fab_addon"), addon_path)
- f = open(os.path.join(full_name, "config.py"), "w")
- f.write("ADDON_NAME='" + name + "'\n")
- f.write("FULL_ADDON_NAME='fab_addon_' + ADDON_NAME\n")
- f.close()
- click.echo(
- click.style("Downloaded the skeleton addon, good coding!", fg="green")
- )
- return True
- except Exception as e:
- click.echo(click.style("Something went wrong {0}".format(e), fg="red"))
- return False
-
-
-@cli_app.command("collect-static")
-@click.option(
- "--static_folder", default="app/static", help="Your projects static folder"
-)
-def collect_static(static_folder):
- """
- Copies flask-appbuilder static files to your projects static folder
- """
- appbuilder_static_path = os.path.join(
- os.path.dirname(os.path.abspath(__file__)), "static/appbuilder"
- )
- app_static_path = os.path.join(os.getcwd(), static_folder)
- if not os.path.isdir(app_static_path):
- click.echo(
- click.style(
- "Static folder does not exist creating: %s" % app_static_path,
- fg="green",
- )
- )
- os.makedirs(app_static_path)
- try:
- shutil.copytree(
- appbuilder_static_path, os.path.join(app_static_path, "appbuilder")
- )
- except Exception:
- click.echo(
- click.style(
- "Appbuilder static folder already exists on your project", fg="red"
- )
- )
-
-
-def cli():
- cli_app()
-
-
-if __name__ == "__main__":
- cli_app()
diff --git a/flask_appbuilder/const.py b/flask_appbuilder/const.py
index 268b55c159..e7bd755b03 100644
--- a/flask_appbuilder/const.py
+++ b/flask_appbuilder/const.py
@@ -104,12 +104,6 @@
LOGMSG_ERR_FAB_ADD_PERMISSION_VIEW = "Add Permission on View Error: %s"
""" Error when adding a permission to a menu, format with err """
-LOGMSG_ERR_DBI_ADD_GENERIC = "Add record error: %s"
-""" Database add generic error, format with err message """
-LOGMSG_ERR_DBI_EDIT_GENERIC = "Edit record error: %s"
-""" Database edit generic error, format with err message """
-LOGMSG_ERR_DBI_DEL_GENERIC = "Delete record error: %s"
-""" Database delete generic error, format with err message """
LOGMSG_WAR_DBI_AVG_ZERODIV = "Zero division on aggregate_avg"
LOGMSG_WAR_FAB_VIEW_EXISTS = "View already exists %s ignoring"
diff --git a/flask_appbuilder/exceptions.py b/flask_appbuilder/exceptions.py
index 63e47a8142..9a5de4c977 100644
--- a/flask_appbuilder/exceptions.py
+++ b/flask_appbuilder/exceptions.py
@@ -16,6 +16,10 @@ def __str__(self):
)
+class DatabaseException(FABException):
+ """Database related exception"""
+
+
class InvalidColumnFilterFABException(FABException):
"""Invalid column for filter"""
diff --git a/flask_appbuilder/filemanager.py b/flask_appbuilder/filemanager.py
index 2a81310d3f..1b6d89f3bf 100644
--- a/flask_appbuilder/filemanager.py
+++ b/flask_appbuilder/filemanager.py
@@ -4,18 +4,11 @@
import re
import uuid
-from flask.globals import _request_ctx_stack
+from flask import current_app
from werkzeug.datastructures import FileStorage
from werkzeug.utils import secure_filename
from wtforms import ValidationError
-try:
- from flask import _app_ctx_stack
-except ImportError:
- _app_ctx_stack = None
-
-app_stack = _app_ctx_stack or _request_ctx_stack
-
log = logging.getLogger(__name__)
try:
@@ -35,18 +28,16 @@ def __init__(
permission=0o755,
**kwargs
):
- ctx = app_stack.top
-
- if "UPLOAD_FOLDER" in ctx.app.config and not base_path:
- base_path = ctx.app.config["UPLOAD_FOLDER"]
+ if "UPLOAD_FOLDER" in current_app.config and not base_path:
+ base_path = current_app.config["UPLOAD_FOLDER"]
if not base_path:
raise Exception("Config key UPLOAD_FOLDER is mandatory")
self.base_path = base_path
self.relative_path = relative_path
self.namegen = namegen or uuid_namegen
- if not allowed_extensions and "FILE_ALLOWED_EXTENSIONS" in ctx.app.config:
- self.allowed_extensions = ctx.app.config["FILE_ALLOWED_EXTENSIONS"]
+ if not allowed_extensions and "FILE_ALLOWED_EXTENSIONS" in current_app.config:
+ self.allowed_extensions = current_app.config["FILE_ALLOWED_EXTENSIONS"]
else:
self.allowed_extensions = allowed_extensions
self.permission = permission
@@ -106,17 +97,16 @@ def __init__(
if Image is None:
raise Exception("PIL library was not found")
- ctx = app_stack.top
- if "IMG_SIZE" in ctx.app.config and not max_size:
- self.max_size = ctx.app.config["IMG_SIZE"]
+ if "IMG_SIZE" in current_app.config and not max_size:
+ self.max_size = current_app.config["IMG_SIZE"]
- if "IMG_UPLOAD_URL" in ctx.app.config and not relative_path:
- relative_path = ctx.app.config["IMG_UPLOAD_URL"]
+ if "IMG_UPLOAD_URL" in current_app.config and not relative_path:
+ relative_path = current_app.config["IMG_UPLOAD_URL"]
if not relative_path:
raise Exception("Config key IMG_UPLOAD_URL is mandatory")
- if "IMG_UPLOAD_FOLDER" in ctx.app.config and not base_path:
- base_path = ctx.app.config["IMG_UPLOAD_FOLDER"]
+ if "IMG_UPLOAD_FOLDER" in current_app.config and not base_path:
+ base_path = current_app.config["IMG_UPLOAD_FOLDER"]
if not base_path:
raise Exception("Config key IMG_UPLOAD_FOLDER is mandatory")
diff --git a/flask_appbuilder/forms.py b/flask_appbuilder/forms.py
index 578b4a7230..62d002f131 100644
--- a/flask_appbuilder/forms.py
+++ b/flask_appbuilder/forms.py
@@ -39,7 +39,7 @@
log = logging.getLogger(__name__)
-class FieldConverter(object):
+class FieldConverter:
"""
Helper class that converts model fields into WTForm fields
@@ -107,7 +107,7 @@ def convert(self):
log.error("Column %s Type not supported", self.colname)
-class GeneralModelConverter(object):
+class GeneralModelConverter:
"""
Returns a form from a model only one public exposed
method 'create_form'
diff --git a/flask_appbuilder/menu.py b/flask_appbuilder/menu.py
index 9c86be9b96..f537d3cd70 100644
--- a/flask_appbuilder/menu.py
+++ b/flask_appbuilder/menu.py
@@ -238,5 +238,5 @@ def get_menu_data(self):
class MenuApiManager(BaseManager):
def register_views(self):
- if self.appbuilder.app.config.get("FAB_ADD_MENU_API", True):
+ if current_app.config.get("FAB_ADD_MENU_API", True):
self.appbuilder.add_api(MenuApi)
diff --git a/flask_appbuilder/models/base.py b/flask_appbuilder/models/base.py
index ce0b30bb5d..83daf1839f 100644
--- a/flask_appbuilder/models/base.py
+++ b/flask_appbuilder/models/base.py
@@ -3,9 +3,7 @@
import logging
from typing import Any, Type
-from flask_babel import lazy_gettext
-
-from .filters import BaseFilterConverter, Filters
+from flask_appbuilder.models.filters import BaseFilterConverter, Filters
try:
import enum
@@ -26,35 +24,15 @@ class BaseInterface:
filter_converter_class = Type[BaseFilterConverter]
""" when sub classing override with your own custom filter converter """
- """ Messages to display on CRUD Events """
- add_row_message = lazy_gettext("Added Row")
- edit_row_message = lazy_gettext("Changed Row")
- delete_row_message = lazy_gettext("Deleted Row")
- delete_integrity_error_message = lazy_gettext(
- "Associated data exists, please delete them first"
- )
- add_integrity_error_message = lazy_gettext(
- "Integrity error, probably unique constraint"
- )
- edit_integrity_error_message = lazy_gettext(
- "Integrity error, probably unique constraint"
- )
- general_error_message = lazy_gettext("General Error")
-
- database_error_message = lazy_gettext("Database Error")
-
- """ Tuple with message and text with severity type ex: ("Added Row", "info") """
- message = ()
-
def __init__(self, obj: Type[Any]):
self.obj = obj
- def __getattr__(self, name: str) -> Any:
- """
- Make mypy happy about the injected filters like self.datamodel.FilterEqual
- https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html#when-you-re-puzzled-or-when-things-are-complicated
- """
- return super().__getattr__(name)
+ # def __getattr__(self, name: str) -> Any:
+ # """
+ # Make mypy happy about the injected filters like self.datamodel.FilterEqual
+ # https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html#when-you-re-puzzled-or-when-things-are-complicated
+ # """
+ # return super().__getattr__(name)
def _get_attr(self, col_name):
if not hasattr(self.obj, col_name):
@@ -264,25 +242,25 @@ def get_min_length(self, col_name):
-----------------------------------------
"""
- def add(self, item):
+ def add(self, item: Any, commit: bool = True) -> None:
"""
Adds object
"""
raise NotImplementedError
- def edit(self, item):
+ def edit(self, item: Any, commit: bool = True) -> None:
"""
Edit (change) object
"""
raise NotImplementedError
- def delete(self, item):
+ def delete(self, item: Any, commit: bool = True) -> None:
"""
Deletes object
"""
raise NotImplementedError
- def get_col_default(self, col_name):
+ def get_col_default(self, col_name: str):
pass
def get_keys(self, lst):
diff --git a/flask_appbuilder/models/filters.py b/flask_appbuilder/models/filters.py
index 1754dff201..b6a98f0b6c 100644
--- a/flask_appbuilder/models/filters.py
+++ b/flask_appbuilder/models/filters.py
@@ -14,7 +14,7 @@
""" private map for arg_name and child Filter classes """
-class BaseFilter(object):
+class BaseFilter:
"""
Base class for all data filters.
Sub class to implement your own custom filters
@@ -117,7 +117,7 @@ def convert(self, col_name):
log.warning("Filter type not supported for column: %s", col_name)
-class Filters(object):
+class Filters:
filters: List[BaseFilter] = []
""" List of instantiated BaseFilter classes """
values: List[Any] = []
@@ -226,7 +226,7 @@ def _rest_check_valid_filter_operation(self, col, opr):
return True
return False
- def add_filter(self, column_name, filter_class, value):
+ def add_filter(self, column_name: str, filter_class: BaseFilter, value: str):
self._add_filter(filter_class(column_name, self.datamodel), value)
return self
diff --git a/flask_appbuilder/models/mixins.py b/flask_appbuilder/models/mixins.py
index 21684837d5..4559ce66a1 100644
--- a/flask_appbuilder/models/mixins.py
+++ b/flask_appbuilder/models/mixins.py
@@ -33,7 +33,7 @@ def __init__(self, thumbnail_size=(20, 20, True), size=(100, 100, True), **kw):
self.size = size
-class AuditMixin(object):
+class AuditMixin:
"""
AuditMixin
Mixin for models, adds 4 columns to stamp,
@@ -62,8 +62,10 @@ def created_by_fk(cls):
@declared_attr
def created_by(cls):
+ from flask_appbuilder.security.sqla.models import User
+
return relationship(
- "User",
+ User,
primaryjoin="%s.created_by_fk == User.id" % cls.__name__,
enable_typechecks=False,
)
@@ -80,8 +82,10 @@ def changed_by_fk(cls):
@declared_attr
def changed_by(cls):
+ from flask_appbuilder.security.sqla.models import User
+
return relationship(
- "User",
+ User,
primaryjoin="%s.changed_by_fk == User.id" % cls.__name__,
enable_typechecks=False,
)
diff --git a/flask_appbuilder/models/sqla/__init__.py b/flask_appbuilder/models/sqla/__init__.py
index c8838ddd58..c9d02b95b9 100644
--- a/flask_appbuilder/models/sqla/__init__.py
+++ b/flask_appbuilder/models/sqla/__init__.py
@@ -1,109 +1,15 @@
-import datetime
-import logging
-import re
-
-from flask_sqlalchemy import (
- _QueryProperty,
- DefaultMeta,
- get_state,
- SessionBase,
- SignallingSession,
- SQLAlchemy,
-)
-from sqlalchemy import orm
-
-try:
- from sqlalchemy.ext.declarative import as_declarative
-except ImportError:
- from sqlalchemy.ext.declarative.api import as_declarative
-
-try:
- from sqlalchemy.orm.util import identity_key # noqa
-
- has_identity_key = True
-except ImportError:
- has_identity_key = False
-
-log = logging.getLogger(__name__)
-
-_camelcase_re = re.compile(r"([A-Z]+)(?=[a-z0-9])")
-
+from __future__ import annotations
-class CustomSignallingSession(SignallingSession):
- """
- Custom Signaling Session to support SQLALchemy>=1.4 with flask-sqlalchemy 2.X
- https://github.com/pallets/flask-sqlalchemy/issues/953
- """
-
- def get_bind(self, mapper=None, *args, **kwargs):
- """Return the engine or connection for a given model or
- table, using the ``__bind_key__`` if it is set.
-
- Patch from https://github.com/pallets/flask-sqlalchemy/pull/1001
- """
- # mapper is None if someone tries to just get a connection
- if mapper is not None:
- try:
- # SA >= 1.3
- persist_selectable = mapper.persist_selectable
- except AttributeError:
- # SA < 1.3
- persist_selectable = mapper.mapped_table
- info = getattr(persist_selectable, "info", {})
- bind_key = info.get("bind_key")
- if bind_key is not None:
- state = get_state(self.app)
- return state.db.get_engine(self.app, bind=bind_key)
- return SessionBase.get_bind(self, mapper, *args, **kwargs)
-
-
-class SQLA(SQLAlchemy):
- """
- This is a child class of flask_SQLAlchemy
- It's purpose is to override the declarative base of the original
- package. So that it is bound to F.A.B. Model class allowing the dev
- to be in the same namespace of the security tables (and others)
- and can use AuditMixin class alike.
-
- Use it and configure it just like flask_SQLAlchemy
- """
-
- def make_declarative_base(self, model, metadata=None):
- base = Model
- base.query = _QueryProperty(self)
- return base
-
- def get_tables_for_bind(self, bind=None):
- """Returns a list of all tables relevant for a bind."""
- result = []
- tables = Model.metadata.tables
- for key in tables:
- if tables[key].info.get("bind_key") == bind:
- result.append(tables[key])
- return result
-
- def create_session(self, options):
- """
- Custom Session factory to support SQLALchemy>=1.4 with flask-sqlalchemy 2.X
-
- https://github.com/pallets/flask-sqlalchemy/issues/953
+import datetime
+from typing import Any
- :param options: dict of keyword arguments passed to session class
- """
+from sqlalchemy.orm import declarative_base
- return orm.sessionmaker(class_=CustomSignallingSession, db=self, **options)
+Base = declarative_base()
-class ModelDeclarativeMeta(DefaultMeta):
- """
- Base Model declarative meta for all Models definitions.
- Setups bind_keys to support multiple databases.
- Setup the table name based on the class camelcase name.
- """
-
-
-@as_declarative(name="Model", metaclass=ModelDeclarativeMeta)
-class Model(object):
+class Model(Base):
+ __abstract__ = True
"""
Use this class has the base for your models,
it will define your table names automatically
@@ -122,17 +28,11 @@ class MyModel(Model):
__table_args__ = {"extend_existing": True}
- def to_json(self):
- result = dict()
+ def to_json(self) -> dict[str, Any]:
+ result = {}
for key in self.__mapper__.c.keys():
col = getattr(self, key)
- if isinstance(col, datetime.datetime) or isinstance(col, datetime.date):
+ if isinstance(col, (datetime.datetime, datetime.date)):
col = col.isoformat()
result[key] = col
return result
-
-
-"""
- This is for retro compatibility
-"""
-Base = Model
diff --git a/flask_appbuilder/models/sqla/base.py b/flask_appbuilder/models/sqla/base.py
new file mode 100644
index 0000000000..0ac3a2dcc8
--- /dev/null
+++ b/flask_appbuilder/models/sqla/base.py
@@ -0,0 +1,24 @@
+from __future__ import annotations
+
+from flask_sqlalchemy import SQLAlchemy
+from sqlalchemy.engine import Connection, Engine
+from sqlalchemy.sql.schema import Table
+
+
+class SQLA(SQLAlchemy):
+ """
+ This is a child class of flask_SQLAlchemy
+ It's purpose is to override the declarative base of the original
+ package. So that it is bound to F.A.B. Model class allowing the dev
+ to be in the same namespace of the security tables (and others)
+ and can use AuditMixin class alike.
+
+ Configure just like flask_sqlalchemy SQLAlchemy
+ """
+
+ @staticmethod
+ def get_tables_for_bind(bind: Engine | Connection) -> list[Table]:
+ from sqlalchemy import inspect
+
+ inspector = inspect(bind)
+ return inspector.get_table_names()
diff --git a/flask_appbuilder/models/sqla/base_legacy.py b/flask_appbuilder/models/sqla/base_legacy.py
new file mode 100644
index 0000000000..415bf63682
--- /dev/null
+++ b/flask_appbuilder/models/sqla/base_legacy.py
@@ -0,0 +1,132 @@
+import datetime
+import logging
+import re
+
+from flask_sqlalchemy import (
+ _QueryProperty,
+ DefaultMeta,
+ get_state,
+ SessionBase,
+ SignallingSession,
+ SQLAlchemy,
+)
+from sqlalchemy import orm
+
+try:
+ from sqlalchemy.ext.declarative import as_declarative
+except ImportError:
+ from sqlalchemy.ext.declarative.api import as_declarative
+
+try:
+ from sqlalchemy.orm.util import identity_key # noqa
+
+ has_identity_key = True
+except ImportError:
+ has_identity_key = False
+
+log = logging.getLogger(__name__)
+
+_camelcase_re = re.compile(r"([A-Z]+)(?=[a-z0-9])")
+
+
+class CustomSignallingSession(SignallingSession):
+ """
+ Custom Signaling Session to support SQLALchemy>=1.4 with flask-sqlalchemy 2.X
+ https://github.com/pallets/flask-sqlalchemy/issues/953
+ """
+
+ def get_bind(self, mapper=None, *args, **kwargs):
+ """Return the engine or connection for a given model or
+ table, using the ``__bind_key__`` if it is set.
+
+ Patch from https://github.com/pallets/flask-sqlalchemy/pull/1001
+ """
+ # mapper is None if someone tries to just get a connection
+ if mapper is not None:
+ try:
+ # SA >= 1.3
+ persist_selectable = mapper.persist_selectable
+ except AttributeError:
+ # SA < 1.3
+ persist_selectable = mapper.mapped_table
+ info = getattr(persist_selectable, "info", {})
+ bind_key = info.get("bind_key")
+ if bind_key is not None:
+ state = get_state(self.app)
+ return state.db.get_engine(self.app, bind=bind_key)
+ return SessionBase.get_bind(self, mapper, *args, **kwargs)
+
+
+class SQLA(SQLAlchemy):
+ """
+ This is a child class of flask_SQLAlchemy
+ It's purpose is to override the declarative base of the original
+ package. So that it is bound to F.A.B. Model class allowing the dev
+ to be in the same namespace of the security tables (and others)
+ and can use AuditMixin class alike.
+
+ Use it and configure it just like flask_SQLAlchemy
+ """
+
+ def make_declarative_base(self, model, metadata=None):
+ base = Model
+ base.query = _QueryProperty(self)
+ return base
+
+ def get_tables_for_bind(self, bind=None):
+ """Returns a list of all tables relevant for a bind."""
+ result = []
+ tables = Model.metadata.tables
+ for key in tables:
+ if tables[key].info.get("bind_key") == bind:
+ result.append(tables[key])
+ return result
+
+ def create_session(self, options):
+ """
+ Custom Session factory to support SQLALchemy>=1.4 with flask-sqlalchemy 2.X
+
+ https://github.com/pallets/flask-sqlalchemy/issues/953
+
+ :param options: dict of keyword arguments passed to session class
+ """
+
+ return orm.sessionmaker(class_=CustomSignallingSession, db=self, **options)
+
+
+class ModelDeclarativeMeta(DefaultMeta):
+ """
+ Base Model declarative meta for all Models definitions.
+ Setups bind_keys to support multiple databases.
+ Setup the table name based on the class camelcase name.
+ """
+
+
+@as_declarative(name="Model", metaclass=ModelDeclarativeMeta)
+class Model(object):
+ """
+ Use this class has the base for your models,
+ it will define your table names automatically
+ MyModel will be called my_model on the database.
+
+ ::
+
+ from sqlalchemy import Integer, String
+ from flask_appbuilder import Model
+
+ class MyModel(Model):
+ id = Column(Integer, primary_key=True)
+ name = Column(String(50), unique = True, nullable=False)
+
+ """
+
+ __table_args__ = {"extend_existing": True}
+
+ def to_json(self):
+ result = dict()
+ for key in self.__mapper__.c.keys():
+ col = getattr(self, key)
+ if isinstance(col, datetime.datetime) or isinstance(col, datetime.date):
+ col = col.isoformat()
+ result[key] = col
+ return result
diff --git a/flask_appbuilder/models/sqla/filters.py b/flask_appbuilder/models/sqla/filters.py
index 579932e409..4761b9b5a6 100644
--- a/flask_appbuilder/models/sqla/filters.py
+++ b/flask_appbuilder/models/sqla/filters.py
@@ -2,6 +2,7 @@
import logging
from dateutil import parser
+from flask import current_app
from flask_appbuilder.exceptions import ApplyFilterException
from flask_appbuilder.models.filters import (
BaseFilter,
@@ -218,11 +219,9 @@ def apply(self, query, value):
try:
rel_obj = self.datamodel.get_related_obj(self.column_name, value)
except SQLAlchemyError as exc:
- logging.warning(
- "Filter exception for %s with value %s, will not apply", field, value
- )
+ logging.warning("Filter exception for %s will not apply", field)
try:
- self.datamodel.session.rollback()
+ current_app.appbuilder.session.rollback()
except SQLAlchemyError:
# on MSSQL a rollback would fail here
pass
@@ -239,11 +238,9 @@ def apply(self, query, value):
try:
rel_obj = self.datamodel.get_related_obj(self.column_name, value)
except SQLAlchemyError as exc:
- logging.warning(
- "Filter exception for %s with value %s, will not apply", field, value
- )
+ log.warning("Filter exception for %s will not apply", field)
try:
- self.datamodel.session.rollback()
+ current_app.appbuilder.session.rollback()
except SQLAlchemyError:
# on MSSQL a rollback would fail here
pass
@@ -269,7 +266,7 @@ def apply_item(self, query, field, value_item):
value_item,
)
try:
- self.datamodel.session.rollback()
+ current_app.appbuilder.session.rollback()
except SQLAlchemyError:
# on MSSQL a rollback would fail here
pass
@@ -278,10 +275,9 @@ def apply_item(self, query, field, value_item):
if rel_obj:
return query.filter(field.contains(rel_obj))
else:
- log.error(
- "Related object for column: %s, value: %s return Null",
+ log.warning(
+ "Related object for column: %s returned Null",
self.column_name,
- value_item,
)
return query
diff --git a/flask_appbuilder/models/sqla/interface.py b/flask_appbuilder/models/sqla/interface.py
index 4ee49332db..5eead86579 100644
--- a/flask_appbuilder/models/sqla/interface.py
+++ b/flask_appbuilder/models/sqla/interface.py
@@ -1,16 +1,11 @@
-# -*- coding: utf-8 -*-
+from __future__ import annotations
+
from contextlib import suppress
import logging
-from typing import Any, Dict, List, Optional, Tuple, Type, Union
-
-from flask_appbuilder._compat import as_unicode
-from flask_appbuilder.const import (
- LOGMSG_ERR_DBI_DEL_GENERIC,
- LOGMSG_WAR_DBI_ADD_INTEGRITY,
- LOGMSG_WAR_DBI_DEL_INTEGRITY,
- LOGMSG_WAR_DBI_EDIT_INTEGRITY,
-)
-from flask_appbuilder.exceptions import InterfaceQueryWithoutSession
+from typing import Any, Iterable, Optional, Tuple, Type
+
+from flask import current_app, Request
+from flask_appbuilder.exceptions import DatabaseException, FABException
from flask_appbuilder.filemanager import FileManager, ImageManager
from flask_appbuilder.models.base import BaseInterface
from flask_appbuilder.models.filters import Filters
@@ -24,15 +19,16 @@
)
from sqlalchemy import asc, desc
from sqlalchemy import types as sa_types
-from sqlalchemy.exc import IntegrityError
+from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.orm import aliased, class_mapper, ColumnProperty, contains_eager, Load
from sqlalchemy.orm.descriptor_props import SynonymProperty
from sqlalchemy.orm.properties import RelationshipProperty
from sqlalchemy.orm.query import Query
from sqlalchemy.orm.session import Session as SessionBase
from sqlalchemy.orm.util import AliasedClass
-from sqlalchemy.sql import visitors
+from sqlalchemy.sql import ColumnElement, visitors
from sqlalchemy.sql.elements import BinaryExpression
+from sqlalchemy.sql.schema import Column
from sqlalchemy.sql.sqltypes import TypeEngine
from sqlalchemy_utils.types.uuid import UUIDType
@@ -57,9 +53,9 @@ class SQLAInterface(BaseInterface):
def __init__(self, obj: Type[Model], session: Optional[SessionBase] = None) -> None:
_include_filters(self)
- self.list_columns = dict()
- self.list_properties = dict()
- self.session = session
+ self.list_columns = {}
+ self.list_properties = {}
+ self._session = session
# Collect all SQLA columns and properties
for prop in class_mapper(obj).iterate_properties:
if type(prop) != SynonymProperty:
@@ -67,10 +63,19 @@ def __init__(self, obj: Type[Model], session: Optional[SessionBase] = None) -> N
for col_name in obj.__mapper__.columns.keys():
if col_name in self.list_properties:
self.list_columns[col_name] = obj.__mapper__.columns[col_name]
- super(SQLAInterface, self).__init__(obj)
+ super().__init__(obj)
+
+ @property
+ def session(self) -> SessionBase:
+ """
+ Returns the SQLAlchemy session
+ """
+ if not self._session:
+ return current_app.appbuilder.session
+ return self._session
@property
- def model_name(self):
+ def model_name(self) -> str:
"""
Returns the models class name
useful for auto title on views
@@ -112,8 +117,12 @@ def is_model_already_joined(query: Query, model: Type[Model]) -> bool:
return False
def _get_base_query(
- self, query=None, filters=None, order_column="", order_direction=""
- ):
+ self,
+ query: Query,
+ filters: Filters | None = None,
+ order_column: str = "",
+ order_direction: str = "",
+ ) -> str:
if filters:
query = filters.apply_all(query)
return self.apply_order_by(query, order_column, order_direction)
@@ -122,7 +131,7 @@ def _query_join_relation(
self,
query: Query,
root_relation: str,
- aliases_mapping: Dict[str, AliasedClass] = None,
+ aliases_mapping: dict[str, AliasedClass] | None = None,
) -> Query:
"""
Helper function that applies necessary joins for dotted columns on a
@@ -166,7 +175,7 @@ def apply_engine_specific_hack(
page
and page_size
and not order_column
- and self.session.bind.dialect.name == "mssql"
+ and self.session.get_bind().name == "mssql"
):
pk_name = self.get_pk_name()
return query.order_by(pk_name)
@@ -177,7 +186,8 @@ def apply_order_by(
query: Query,
order_column: str,
order_direction: str,
- aliases_mapping: Dict[str, AliasedClass] = None,
+ aliases_mapping: dict[str, AliasedClass] | None = None,
+ bypass_many_to_many: bool = False,
add_pk: bool = False,
) -> Query:
if order_column != "":
@@ -190,6 +200,12 @@ def apply_order_by(
if is_column_dotted(order_column):
root_relation = get_column_root_relation(order_column)
+ if (
+ self.is_relation_many_to_many(root_relation)
+ or self.is_relation_one_to_many(root_relation)
+ and bypass_many_to_many
+ ):
+ return query
# On MVC we still allow for joins to happen here
if not self.is_model_already_joined(
query, self.get_related_model(root_relation)
@@ -227,23 +243,27 @@ def apply_filters(self, query: Query, filters: Optional[Filters]) -> Query:
def _apply_normal_col_select_option(self, query: Query, column: str) -> Query:
if not self.is_relation(column) and not self.is_property_or_function(column):
- return query.options(Load(self.obj).load_only(column))
+ return query.options(Load(self.obj).load_only(getattr(self.obj, column)))
return query
- def _apply_relation_fks_select_options(self, query: Query, relation_name) -> Query:
+ def _apply_relation_fks_select_options(
+ self, query: Query, relation_name: str
+ ) -> Query:
relation = getattr(self.obj, relation_name)
if hasattr(relation, "property"):
local_cols = getattr(self.obj, relation_name).property.local_columns
for local_fk in local_cols:
- query = query.options(Load(self.obj).load_only(local_fk.name))
+ query = query.options(
+ Load(self.obj).load_only(getattr(self.obj, local_fk.name))
+ )
return query
return query
def apply_inner_select_joins(
self,
query: Query,
- select_columns: List[str] = None,
- aliases_mapping: Dict[str, AliasedClass] = None,
+ select_columns: list[str] | None = None,
+ aliases_mapping: dict[str, AliasedClass] | None = None,
) -> Query:
"""
Add select load options to query. The goal
@@ -292,43 +312,79 @@ def apply_inner_select_joins(
# https://docs.sqlalchemy.org/en/13/orm/loading_relationships.html
query = query.options(
contains_eager(relation.of_type(related_model)).load_only(
- leaf_column
+ getattr(related_model, leaf_column)
)
)
- query = query.options(Load(related_model).load_only(leaf_column))
+ query = query.options(
+ Load(related_model).load_only(getattr(related_model, leaf_column))
+ )
return query
+ def get_outer_query_from_inner_query(
+ self, query: Query, inner_query: Query
+ ) -> Query:
+ pk = self.get_pk()
+ pk_name = self.get_pk_name()
+
+ if isinstance(pk_name, str):
+ # Only select the primary key in the inner query
+ inner_query = inner_query.with_entities(pk)
+
+ subquery = inner_query.subquery()
+ subquery_pk: ColumnElement = getattr(subquery.c, pk_name)
+ return query.join(subquery, pk == subquery_pk)
+
+ if isinstance(pk_name, Iterable):
+ raise FABException("Composite primary key not supported")
+
+ raise FABException("No primary key found")
+
def apply_outer_select_joins(
self,
query: Query,
- select_columns: List[str] = None,
+ select_columns: list[str] | None = None,
outer_default_load: bool = False,
+ aliases_mapping: dict[str, AliasedClass] | None = None,
) -> Query:
if not select_columns:
return query
+ aliases_mapping = aliases_mapping or {}
+
for column in select_columns:
if not is_column_dotted(column):
query = self._apply_normal_col_select_option(query, column)
continue
root_relation = get_column_root_relation(column)
- leaf_column = get_column_leaf(column)
+ related_model = self.get_related_model(root_relation)
+ # Use meaningful alias if not already defined
+ if root_relation not in aliases_mapping:
+ alias = aliased(related_model, name=root_relation)
+ aliases_mapping[root_relation] = alias
+ else:
+ alias = aliases_mapping[root_relation]
+
+ attr = getattr(self.obj, root_relation)
+ leaf_column = getattr(alias, get_column_leaf(column))
if self.is_relation_many_to_many(
root_relation
) or self.is_relation_one_to_many(root_relation):
if outer_default_load:
- query = query.options(
- Load(self.obj).defaultload(root_relation).load_only(leaf_column)
+ load = (
+ Load(self.obj)
+ .defaultload(attr)
+ .load_only(getattr(related_model, get_column_leaf(column)))
)
else:
- query = query.options(
- Load(self.obj).joinedload(root_relation).load_only(leaf_column)
- )
+ query = query.join(alias, attr, isouter=True)
+ load = contains_eager(attr.of_type(alias)).load_only(leaf_column)
else:
- related_model = self.get_related_model(root_relation)
- query = query.options(Load(related_model).load_only(leaf_column))
+ query = query.join(alias, attr, isouter=True)
+ load = contains_eager(attr.of_type(alias)).load_only(leaf_column)
+
+ query = query.options(load)
return query
@@ -355,19 +411,20 @@ def get_inner_filters(self, filters: Optional[Filters]) -> Filters:
inner_filters.add_filter_list(_filters)
return inner_filters
- def exists_col_to_many(self, select_columns: List[str]) -> bool:
+ def exists_col_to_many(self, select_columns: list[str]) -> bool:
for column in select_columns:
- if is_column_dotted(column):
- root_relation = get_column_root_relation(column)
- if self.is_relation_many_to_many(
- root_relation
- ) or self.is_relation_one_to_many(root_relation):
- return True
+ if not is_column_dotted(column):
+ continue
+ root_relation = get_column_root_relation(column)
+ if self.is_relation_many_to_many(
+ root_relation
+ ) or self.is_relation_one_to_many(root_relation):
+ return True
return False
def get_alias_mapping(
- self, model_name: str, aliases_mapping: Dict[str, AliasedClass]
- ) -> Union[AliasedClass, Type[Model]]:
+ self, model_name: str, aliases_mapping: dict[str, AliasedClass] | None
+ ) -> AliasedClass | Type[Model]:
if aliases_mapping is None:
return self.get_related_model(model_name)
return aliases_mapping.get(model_name, self.get_related_model(model_name))
@@ -375,13 +432,13 @@ def get_alias_mapping(
def _apply_inner_all(
self,
query: Query,
- filters: Optional[Filters] = None,
+ filters: Filters | None = None,
order_column: str = "",
order_direction: str = "",
- page: Optional[int] = None,
- page_size: Optional[int] = None,
- select_columns: Optional[List[str]] = None,
- aliases_mapping: Dict[str, AliasedClass] = None,
+ page: int | None = None,
+ page_size: int | None = None,
+ select_columns: list[str] | None = None,
+ aliases_mapping: dict[str, AliasedClass] | None = None,
) -> Query:
inner_filters = self.get_inner_filters(filters)
query = self.apply_inner_select_joins(query, select_columns, aliases_mapping)
@@ -392,6 +449,7 @@ def _apply_inner_all(
order_column,
order_direction,
aliases_mapping=aliases_mapping,
+ bypass_many_to_many=True,
add_pk=True,
)
query = self.apply_pagination(query, page, page_size)
@@ -401,7 +459,7 @@ def query_count(
self,
query: Query,
filters: Optional[Filters] = None,
- select_columns: Optional[List[str]] = None,
+ select_columns: Optional[list[str]] = None,
) -> int:
return self._apply_inner_all(
query, filters, select_columns=select_columns, aliases_mapping={}
@@ -415,7 +473,7 @@ def apply_all(
order_direction: str = "",
page: Optional[int] = None,
page_size: Optional[int] = None,
- select_columns: Optional[List[str]] = None,
+ select_columns: Optional[list[str]] = None,
outer_default_load: bool = False,
) -> Query:
"""
@@ -442,7 +500,7 @@ def apply_all(
https://docs.sqlalchemy.org/en/14/orm/loading_relationships.html#sqlalchemy.orm.Load.defaultload
:return: A SQLAlchemy Query with all the applied logic
"""
- aliases_mapping = {}
+ aliases_mapping: dict[str, AliasedClass] = {}
inner_query = self._apply_inner_all(
query,
filters,
@@ -457,13 +515,19 @@ def apply_all(
if select_columns and self.exists_col_to_many(select_columns):
if select_columns and order_column:
select_columns = select_columns + [order_column]
- outer_query = inner_query.from_self()
+ outer_query = self.get_outer_query_from_inner_query(query, inner_query)
outer_query = self.apply_outer_select_joins(
outer_query,
select_columns,
outer_default_load=outer_default_load,
+ aliases_mapping=aliases_mapping,
+ )
+ return self.apply_order_by(
+ outer_query,
+ order_column,
+ order_direction,
+ aliases_mapping=aliases_mapping,
)
- return self.apply_order_by(outer_query, order_column, order_direction)
else:
return inner_query
@@ -474,9 +538,9 @@ def query(
order_direction: str = "",
page: Optional[int] = None,
page_size: Optional[int] = None,
- select_columns: Optional[List[str]] = None,
+ select_columns: Optional[list[str]] = None,
outer_default_load: bool = False,
- ) -> Tuple[int, List[Model]]:
+ ) -> Tuple[int, list[Model]]:
"""
Returns the results for a model query, applies filters, sorting and pagination
@@ -494,8 +558,6 @@ def query(
https://docs.sqlalchemy.org/en/14/orm/loading_relationships.html#sqlalchemy.orm.Load.defaultload
:return: A tuple with the query count (non paginated) and the results
"""
- if not self.session:
- raise InterfaceQueryWithoutSession()
query = self.session.query(self.obj)
count = self.query_count(query, filters, select_columns)
@@ -519,22 +581,26 @@ def query(
return count, result
def query_simple_group(
- self, group_by="", aggregate_func=None, aggregate_col=None, filters=None
- ):
+ self, group_by: str | None = None, filters: Filters | None = None
+ ) -> list[list[Any]]:
query = self.session.query(self.obj)
query = self._get_base_query(query=query, filters=filters)
query_result = query.all()
group = GroupByCol(group_by, "Group by")
return group.apply(query_result)
- def query_month_group(self, group_by="", filters=None):
+ def query_month_group(
+ self, group_by: str | None = None, filters: Filters | None = None
+ ) -> list[list[Any]]:
query = self.session.query(self.obj)
query = self._get_base_query(query=query, filters=filters)
query_result = query.all()
group = GroupByDateMonth(group_by, "Group by Month")
return group.apply(query_result)
- def query_year_group(self, group_by="", filters=None):
+ def query_year_group(
+ self, group_by: str | None = None, filters: Filters | None = None
+ ) -> list[list[Any]]:
query = self.session.query(self.obj)
query = self._get_base_query(query=query, filters=filters)
query_result = query.all()
@@ -731,88 +797,47 @@ def get_max_length(self, col_name: str) -> int:
-------------------------------
"""
- def add(self, item: Model, raise_exception: bool = False) -> bool:
+ def add(self, item: Model, commit: bool = True) -> None:
try:
self.session.add(item)
- self.session.commit()
- self.message = (as_unicode(self.add_row_message), "success")
- return True
- except IntegrityError as e:
- self.message = (as_unicode(self.add_integrity_error_message), "warning")
- log.warning(LOGMSG_WAR_DBI_ADD_INTEGRITY, e)
- self.session.rollback()
- if raise_exception:
- raise e
- return False
- except Exception as e:
- self.message = (as_unicode(self.database_error_message), "danger")
- log.exception("Database error")
+ if commit:
+ self.session.commit()
+ except SQLAlchemyError as ex:
+ log.exception("Add item database error")
self.session.rollback()
- if raise_exception:
- raise e
- return False
+ raise ex
- def edit(self, item: Model, raise_exception: bool = False) -> bool:
+ def edit(self, item: Model, commit: bool = True) -> None:
try:
self.session.merge(item)
- self.session.commit()
- self.message = (as_unicode(self.edit_row_message), "success")
- return True
- except IntegrityError as e:
- self.message = (as_unicode(self.edit_integrity_error_message), "warning")
- log.warning(LOGMSG_WAR_DBI_EDIT_INTEGRITY, e)
- self.session.rollback()
- if raise_exception:
- raise e
- return False
- except Exception as e:
- self.message = (as_unicode(self.database_error_message), "danger")
- log.exception("Database error")
+ if commit:
+ self.session.commit()
+ except SQLAlchemyError as ex:
+ log.exception("Edit item database error")
self.session.rollback()
- if raise_exception:
- raise e
- return False
+ raise DatabaseException from ex
- def delete(self, item: Model, raise_exception: bool = False) -> bool:
+ def delete(self, item: Model, commit: bool = True) -> None:
try:
self._delete_files(item)
self.session.delete(item)
- self.session.commit()
- self.message = (as_unicode(self.delete_row_message), "success")
- return True
- except IntegrityError as e:
- self.message = (as_unicode(self.delete_integrity_error_message), "warning")
- log.warning(LOGMSG_WAR_DBI_DEL_INTEGRITY, e)
- self.session.rollback()
- if raise_exception:
- raise e
- return False
- except Exception as e:
- self.message = (as_unicode(self.database_error_message), "danger")
- log.exception("Database error")
+ if commit:
+ self.session.commit()
+ except SQLAlchemyError as ex:
+ log.exception("Delete item database error")
self.session.rollback()
- if raise_exception:
- raise e
- return False
+ raise DatabaseException from ex
- def delete_all(self, items: List[Model]) -> bool:
+ def delete_all(self, items: list[Model]) -> None:
try:
for item in items:
self._delete_files(item)
self.session.delete(item)
self.session.commit()
- self.message = (as_unicode(self.delete_row_message), "success")
- return True
- except IntegrityError as e:
- self.message = (as_unicode(self.delete_integrity_error_message), "warning")
- log.warning(LOGMSG_WAR_DBI_DEL_INTEGRITY, e)
- self.session.rollback()
- return False
- except Exception as e:
- self.message = (as_unicode(self.database_error_message), "danger")
- log.exception(LOGMSG_ERR_DBI_DEL_GENERIC, e)
+ except SQLAlchemyError as ex:
+ log.exception("Delete items database error")
self.session.rollback()
- return False
+ raise DatabaseException from ex
"""
-----------------------
@@ -820,17 +845,16 @@ def delete_all(self, items: List[Model]) -> bool:
-----------------------
"""
- def _add_files(self, this_request, item: Model):
+ def _add_files(self, this_request: Request, item: Model) -> None:
fm = FileManager()
im = ImageManager()
for file_col in this_request.files:
if self.is_file(file_col):
fm.save_file(this_request.files[file_col], getattr(item, file_col))
- for file_col in this_request.files:
- if self.is_image(file_col):
+ elif self.is_image(file_col):
im.save_file(this_request.files[file_col], getattr(item, file_col))
- def _delete_files(self, item: Model):
+ def _delete_files(self, item: Model) -> None:
for file_col in self.get_file_column_list():
if self.is_file(file_col) and getattr(item, file_col):
fm = FileManager()
@@ -868,7 +892,7 @@ def get_related_model(self, col_name: str) -> Type[Model]:
def get_related_model_and_join(
self, col_name: str
- ) -> List[Tuple[Type[Model], object]]:
+ ) -> list[Tuple[Type[Model], BinaryExpression]]:
relation = self.list_properties[col_name]
if relation.direction.name == "MANYTOMANY":
return [
@@ -877,16 +901,14 @@ def get_related_model_and_join(
]
return [(relation.mapper.class_, relation.primaryjoin)]
- def get_related_interface(self, col_name: str):
- return self.__class__(self.get_related_model(col_name), self.session)
+ def get_related_interface(self, col_name: str) -> BaseInterface:
+ return self.__class__(self.get_related_model(col_name))
def get_related_obj(self, col_name: str, value: Any) -> Optional[Type[Model]]:
rel_model = self.get_related_model(col_name)
- if self.session:
- return self.session.query(rel_model).get(value)
- return None
+ return self.session.query(rel_model).get(value)
- def get_related_fks(self, related_views) -> List[str]:
+ def get_related_fks(self, related_views: Any) -> list[str]:
return [view.datamodel.get_related_fk(self.obj) for view in related_views]
def get_related_fk(self, model: Type[Model]) -> Optional[str]:
@@ -896,7 +918,7 @@ def get_related_fk(self, model: Type[Model]) -> Optional[str]:
return col_name
return None
- def get_info(self, col_name: str):
+ def get_info(self, col_name: str) -> dict[str, Any]:
if col_name in self.list_properties:
return self.list_properties[col_name].info
return {}
@@ -907,13 +929,13 @@ def get_info(self, col_name: str):
-------------
"""
- def get_columns_list(self) -> List[str]:
+ def get_columns_list(self) -> list[str]:
"""
Returns all model's columns on SQLA properties
"""
return list(self.list_properties.keys())
- def get_user_columns_list(self) -> List[str]:
+ def get_user_columns_list(self) -> list[str]:
"""
Returns all model's columns except pk or fk
"""
@@ -924,7 +946,7 @@ def get_user_columns_list(self) -> List[str]:
]
# TODO get different solution, more integrated with filters
- def get_search_columns_list(self) -> List[str]:
+ def get_search_columns_list(self) -> list[str]:
ret_lst = []
for col_name in self.get_columns_list():
if not self.is_relation(col_name):
@@ -940,7 +962,7 @@ def get_search_columns_list(self) -> List[str]:
ret_lst.append(col_name)
return ret_lst
- def get_order_columns_list(self, list_columns: List[str] = None) -> List[str]:
+ def get_order_columns_list(self, list_columns: list[str] = None) -> list[str]:
"""
Returns the columns that can be ordered.
@@ -963,14 +985,14 @@ def get_order_columns_list(self, list_columns: List[str] = None) -> List[str]:
return ret_lst
- def get_file_column_list(self) -> List[str]:
+ def get_file_column_list(self) -> list[str]:
return [
i.name
for i in self.obj.__mapper__.columns
if isinstance(i.type, FileColumn)
]
- def get_image_column_list(self) -> List[str]:
+ def get_image_column_list(self) -> list[str]:
return [
i.name
for i in self.obj.__mapper__.columns
@@ -981,15 +1003,15 @@ def get_property_first_col(self, col_name: str) -> ColumnProperty:
# support for only one col for pk and fk
return self.list_properties[col_name].columns[0]
- def get_relation_fk(self, col_name: str) -> str:
+ def get_relation_fk(self, col_name: str) -> Column:
# support for only one col for pk and fk
return list(self.list_properties[col_name].local_columns)[0]
def get(
self,
- id,
+ id: Any,
filters: Optional[Filters] = None,
- select_columns: Optional[List[str]] = None,
+ select_columns: Optional[list[str]] = None,
outer_default_load: bool = False,
) -> Optional[Model]:
"""
@@ -1008,7 +1030,7 @@ def get(
else:
_filters = Filters(self.filter_converter_class, self)
- if self.is_pk_composite():
+ if self.is_pk_composite() and isinstance(pk, Iterable):
for _pk, _id in zip(pk, id):
_filters.add_filter(_pk, self.FilterEqual, _id)
else:
@@ -1025,24 +1047,24 @@ def get(
return getattr(item, self.obj.__name__)
return item
- def get_pk_name(self) -> Optional[Union[List[str], str]]:
+ def get_pk_name(self) -> Optional[list[str] | str]:
"""
Get the model primary key column name.
"""
return self._get_pk_name(self.obj)
- def get_pk(self, model: Optional[Type[Model]] = None):
+ def get_pk(self, model: Optional[Type[Model]] = None) -> Model | None:
"""
Get the model primary key SQLAlchemy column.
Will not support composite keys
"""
- model_ = model or self.obj
+ model_ = self.obj if model is None else model
pk_name = self._get_pk_name(model_)
if pk_name and isinstance(pk_name, str):
return getattr(model_, pk_name)
return None
- def _get_pk_name(self, model: Type[Model]) -> Optional[Union[List[str], str]]:
+ def _get_pk_name(self, model: Type[Model]) -> Optional[list[str] | str]:
pk = [pk.name for pk in model.__mapper__.primary_key]
if pk:
return pk if self.is_pk_composite() else pk[0]
diff --git a/flask_appbuilder/security/manager.py b/flask_appbuilder/security/manager.py
index 68614b1721..36f71303b7 100644
--- a/flask_appbuilder/security/manager.py
+++ b/flask_appbuilder/security/manager.py
@@ -1,10 +1,12 @@
+from __future__ import annotations
+
import datetime
import importlib
import logging
import re
from typing import Any, Callable, Dict, List, Optional, Set, Tuple, Union
-from flask import Flask, g, session, url_for
+from flask import current_app, Flask, g, session, url_for
from flask_appbuilder.exceptions import InvalidLoginAttempt, OAuthProviderUnknown
from flask_babel import lazy_gettext as _
from flask_jwt_extended import current_user as current_user_jwt
@@ -221,31 +223,32 @@ class BaseSecurityManager(AbstractSecurityManager):
permissionviewmodelview = PermissionViewModelView
def __init__(self, appbuilder):
- super(BaseSecurityManager, self).__init__(appbuilder)
- app = self.appbuilder.get_app
+ super().__init__(appbuilder)
# Base Security Config
- app.config.setdefault("AUTH_ROLE_ADMIN", "Admin")
- app.config.setdefault("AUTH_ROLE_PUBLIC", "Public")
- app.config.setdefault("AUTH_TYPE", AUTH_DB)
+ current_app.config.setdefault("AUTH_ROLE_ADMIN", "Admin")
+ current_app.config.setdefault("AUTH_ROLE_PUBLIC", "Public")
+ current_app.config.setdefault("AUTH_TYPE", AUTH_DB)
# Self Registration
- app.config.setdefault("AUTH_USER_REGISTRATION", False)
- app.config.setdefault("AUTH_USER_REGISTRATION_ROLE", self.auth_role_public)
- app.config.setdefault("AUTH_USER_REGISTRATION_ROLE_JMESPATH", None)
+ current_app.config.setdefault("AUTH_USER_REGISTRATION", False)
+ current_app.config.setdefault(
+ "AUTH_USER_REGISTRATION_ROLE", self.auth_role_public
+ )
+ current_app.config.setdefault("AUTH_USER_REGISTRATION_ROLE_JMESPATH", None)
# Role Mapping
- app.config.setdefault("AUTH_ROLES_MAPPING", {})
- app.config.setdefault("AUTH_ROLES_SYNC_AT_LOGIN", False)
- app.config.setdefault("AUTH_API_LOGIN_ALLOW_MULTIPLE_PROVIDERS", False)
+ current_app.config.setdefault("AUTH_ROLES_MAPPING", {})
+ current_app.config.setdefault("AUTH_ROLES_SYNC_AT_LOGIN", False)
+ current_app.config.setdefault("AUTH_API_LOGIN_ALLOW_MULTIPLE_PROVIDERS", False)
# Werkzeug prior to 3.0.0 does not support scrypt
parsed_werkzeug_version = Version(importlib.metadata.version("werkzeug"))
if parsed_werkzeug_version < Version("3.0.0"):
- app.config.setdefault(
+ current_app.config.setdefault(
"AUTH_DB_FAKE_PASSWORD_HASH_CHECK",
"pbkdf2:sha256:150000$Z3t6fmj2$22da622d94a1f8118"
"c0976a03d2f18f680bfff877c9a965db9eedc51bc0be87c",
)
else:
- app.config.setdefault(
+ current_app.config.setdefault(
"AUTH_DB_FAKE_PASSWORD_HASH_CHECK",
"scrypt:32768:8:1$wiDa0ruWlIPhp9LM$6e40"
"9d093e62ad54df2af895d0e125b05ff6cf6414"
@@ -255,38 +258,38 @@ def __init__(self, appbuilder):
# LDAP Config
if self.auth_type == AUTH_LDAP:
- if "AUTH_LDAP_SERVER" not in app.config:
+ if "AUTH_LDAP_SERVER" not in current_app.config:
raise Exception(
"No AUTH_LDAP_SERVER defined on config"
" with AUTH_LDAP authentication type."
)
- app.config.setdefault("AUTH_LDAP_SEARCH", "")
- app.config.setdefault("AUTH_LDAP_SEARCH_FILTER", "")
- app.config.setdefault("AUTH_LDAP_APPEND_DOMAIN", "")
- app.config.setdefault("AUTH_LDAP_USERNAME_FORMAT", "")
- app.config.setdefault("AUTH_LDAP_BIND_USER", "")
- app.config.setdefault("AUTH_LDAP_BIND_PASSWORD", "")
+ current_app.config.setdefault("AUTH_LDAP_SEARCH", "")
+ current_app.config.setdefault("AUTH_LDAP_SEARCH_FILTER", "")
+ current_app.config.setdefault("AUTH_LDAP_APPEND_DOMAIN", "")
+ current_app.config.setdefault("AUTH_LDAP_USERNAME_FORMAT", "")
+ current_app.config.setdefault("AUTH_LDAP_BIND_USER", "")
+ current_app.config.setdefault("AUTH_LDAP_BIND_PASSWORD", "")
# TLS options
- app.config.setdefault("AUTH_LDAP_USE_TLS", False)
- app.config.setdefault("AUTH_LDAP_ALLOW_SELF_SIGNED", False)
- app.config.setdefault("AUTH_LDAP_TLS_DEMAND", False)
- app.config.setdefault("AUTH_LDAP_TLS_CACERTDIR", "")
- app.config.setdefault("AUTH_LDAP_TLS_CACERTFILE", "")
- app.config.setdefault("AUTH_LDAP_TLS_CERTFILE", "")
- app.config.setdefault("AUTH_LDAP_TLS_KEYFILE", "")
+ current_app.config.setdefault("AUTH_LDAP_USE_TLS", False)
+ current_app.config.setdefault("AUTH_LDAP_ALLOW_SELF_SIGNED", False)
+ current_app.config.setdefault("AUTH_LDAP_TLS_DEMAND", False)
+ current_app.config.setdefault("AUTH_LDAP_TLS_CACERTDIR", "")
+ current_app.config.setdefault("AUTH_LDAP_TLS_CACERTFILE", "")
+ current_app.config.setdefault("AUTH_LDAP_TLS_CERTFILE", "")
+ current_app.config.setdefault("AUTH_LDAP_TLS_KEYFILE", "")
# Mapping options
- app.config.setdefault("AUTH_LDAP_UID_FIELD", "uid")
- app.config.setdefault("AUTH_LDAP_GROUP_FIELD", "memberOf")
- app.config.setdefault("AUTH_LDAP_FIRSTNAME_FIELD", "givenName")
- app.config.setdefault("AUTH_LDAP_LASTNAME_FIELD", "sn")
- app.config.setdefault("AUTH_LDAP_EMAIL_FIELD", "mail")
+ current_app.config.setdefault("AUTH_LDAP_UID_FIELD", "uid")
+ current_app.config.setdefault("AUTH_LDAP_GROUP_FIELD", "memberOf")
+ current_app.config.setdefault("AUTH_LDAP_FIRSTNAME_FIELD", "givenName")
+ current_app.config.setdefault("AUTH_LDAP_LASTNAME_FIELD", "sn")
+ current_app.config.setdefault("AUTH_LDAP_EMAIL_FIELD", "mail")
if self.auth_type == AUTH_REMOTE_USER:
- app.config.setdefault("AUTH_REMOTE_USER_ENV_VAR", "REMOTE_USER")
+ current_app.config.setdefault("AUTH_REMOTE_USER_ENV_VAR", "REMOTE_USER")
# Rate limiting
- app.config.setdefault("AUTH_RATE_LIMITED", False)
- app.config.setdefault("AUTH_RATE_LIMIT", "10 per 20 second")
+ current_app.config.setdefault("AUTH_RATE_LIMITED", False)
+ current_app.config.setdefault("AUTH_RATE_LIMIT", "10 per 20 second")
if self.auth_type == AUTH_OID:
from flask_openid import OpenID
@@ -295,12 +298,12 @@ def __init__(self, appbuilder):
"AUTH_OID is deprecated and will be removed in version 5. "
"Migrate to other authentication methods."
)
- self.oid = OpenID(app)
+ self.oid = OpenID(current_app)
if self.auth_type == AUTH_OAUTH:
from authlib.integrations.flask_client import OAuth
- self.oauth = OAuth(app)
+ self.oauth = OAuth(current_app)
self.oauth_remotes = {}
for _provider in self.oauth_providers:
provider_name = _provider["name"]
@@ -318,13 +321,13 @@ def __init__(self, appbuilder):
self._builtin_roles = self.create_builtin_roles()
# Setup Flask-Login
- self.lm = self.create_login_manager(app)
+ self.lm = self.create_login_manager(current_app)
# Setup Flask-Jwt-Extended
- self.jwt_manager = self.create_jwt_manager(app)
+ self.jwt_manager = self.create_jwt_manager(current_app)
# Setup Flask-Limiter
- self.limiter = self.create_limiter(app)
+ self.limiter = self.create_limiter(current_app)
def create_limiter(self, app: Flask) -> Limiter:
limiter = Limiter(
@@ -355,8 +358,9 @@ def create_jwt_manager(self, app) -> JWTManager:
jwt_manager.user_lookup_loader(self.load_user_jwt)
return jwt_manager
- def create_builtin_roles(self):
- return self.appbuilder.get_app.config.get("FAB_ROLES", {})
+ @staticmethod
+ def create_builtin_roles():
+ return current_app.config.get("FAB_ROLES", {})
def get_roles_from_keys(self, role_keys: List[str]) -> Set[role_model]:
"""
@@ -410,143 +414,143 @@ def builtin_roles(self) -> Dict[str, Any]:
@property
def api_login_allow_multiple_providers(self):
- return self.appbuilder.get_app.config["AUTH_API_LOGIN_ALLOW_MULTIPLE_PROVIDERS"]
+ return current_app.config["AUTH_API_LOGIN_ALLOW_MULTIPLE_PROVIDERS"]
@property
def auth_type(self) -> int:
- return self.appbuilder.get_app.config["AUTH_TYPE"]
+ return current_app.config["AUTH_TYPE"]
@property
def auth_username_ci(self) -> str:
- return self.appbuilder.get_app.config.get("AUTH_USERNAME_CI", True)
+ return current_app.config.get("AUTH_USERNAME_CI", True)
@property
def auth_role_admin(self) -> str:
- return self.appbuilder.get_app.config["AUTH_ROLE_ADMIN"]
+ return current_app.config["AUTH_ROLE_ADMIN"]
@property
def auth_role_public(self) -> str:
- return self.appbuilder.get_app.config["AUTH_ROLE_PUBLIC"]
+ return current_app.config["AUTH_ROLE_PUBLIC"]
@property
def auth_ldap_server(self) -> str:
- return self.appbuilder.get_app.config["AUTH_LDAP_SERVER"]
+ return current_app.config["AUTH_LDAP_SERVER"]
@property
def auth_ldap_use_tls(self) -> bool:
- return self.appbuilder.get_app.config["AUTH_LDAP_USE_TLS"]
+ return current_app.config["AUTH_LDAP_USE_TLS"]
@property
def auth_user_registration(self) -> bool:
- return self.appbuilder.get_app.config["AUTH_USER_REGISTRATION"]
+ return current_app.config["AUTH_USER_REGISTRATION"]
@property
def auth_user_registration_role(self) -> str:
- return self.appbuilder.get_app.config["AUTH_USER_REGISTRATION_ROLE"]
+ return current_app.config["AUTH_USER_REGISTRATION_ROLE"]
@property
def auth_user_registration_role_jmespath(self) -> str:
- return self.appbuilder.get_app.config["AUTH_USER_REGISTRATION_ROLE_JMESPATH"]
+ return current_app.config["AUTH_USER_REGISTRATION_ROLE_JMESPATH"]
@property
def auth_remote_user_env_var(self) -> str:
- return self.appbuilder.get_app.config["AUTH_REMOTE_USER_ENV_VAR"]
+ return current_app.config["AUTH_REMOTE_USER_ENV_VAR"]
@property
def auth_roles_mapping(self) -> Dict[str, List[str]]:
- return self.appbuilder.get_app.config["AUTH_ROLES_MAPPING"]
+ return current_app.config["AUTH_ROLES_MAPPING"]
@property
def auth_roles_sync_at_login(self) -> bool:
- return self.appbuilder.get_app.config["AUTH_ROLES_SYNC_AT_LOGIN"]
+ return current_app.config["AUTH_ROLES_SYNC_AT_LOGIN"]
@property
def auth_ldap_search(self):
- return self.appbuilder.get_app.config["AUTH_LDAP_SEARCH"]
+ return current_app.config["AUTH_LDAP_SEARCH"]
@property
def auth_ldap_search_filter(self):
- return self.appbuilder.get_app.config["AUTH_LDAP_SEARCH_FILTER"]
+ return current_app.config["AUTH_LDAP_SEARCH_FILTER"]
@property
def auth_ldap_bind_user(self):
- return self.appbuilder.get_app.config["AUTH_LDAP_BIND_USER"]
+ return current_app.config["AUTH_LDAP_BIND_USER"]
@property
def auth_ldap_bind_password(self):
- return self.appbuilder.get_app.config["AUTH_LDAP_BIND_PASSWORD"]
+ return current_app.config["AUTH_LDAP_BIND_PASSWORD"]
@property
def auth_ldap_append_domain(self):
- return self.appbuilder.get_app.config["AUTH_LDAP_APPEND_DOMAIN"]
+ return current_app.config["AUTH_LDAP_APPEND_DOMAIN"]
@property
def auth_ldap_username_format(self):
- return self.appbuilder.get_app.config["AUTH_LDAP_USERNAME_FORMAT"]
+ return current_app.config["AUTH_LDAP_USERNAME_FORMAT"]
@property
def auth_ldap_uid_field(self):
- return self.appbuilder.get_app.config["AUTH_LDAP_UID_FIELD"]
+ return current_app.config["AUTH_LDAP_UID_FIELD"]
@property
def auth_ldap_group_field(self) -> str:
- return self.appbuilder.get_app.config["AUTH_LDAP_GROUP_FIELD"]
+ return current_app.config["AUTH_LDAP_GROUP_FIELD"]
@property
def auth_ldap_firstname_field(self):
- return self.appbuilder.get_app.config["AUTH_LDAP_FIRSTNAME_FIELD"]
+ return current_app.config["AUTH_LDAP_FIRSTNAME_FIELD"]
@property
def auth_ldap_lastname_field(self):
- return self.appbuilder.get_app.config["AUTH_LDAP_LASTNAME_FIELD"]
+ return current_app.config["AUTH_LDAP_LASTNAME_FIELD"]
@property
def auth_ldap_email_field(self):
- return self.appbuilder.get_app.config["AUTH_LDAP_EMAIL_FIELD"]
+ return current_app.config["AUTH_LDAP_EMAIL_FIELD"]
@property
def auth_ldap_bind_first(self):
- return self.appbuilder.get_app.config["AUTH_LDAP_BIND_FIRST"]
+ return current_app.config["AUTH_LDAP_BIND_FIRST"]
@property
def auth_ldap_allow_self_signed(self):
- return self.appbuilder.get_app.config["AUTH_LDAP_ALLOW_SELF_SIGNED"]
+ return current_app.config["AUTH_LDAP_ALLOW_SELF_SIGNED"]
@property
def auth_ldap_tls_demand(self):
- return self.appbuilder.get_app.config["AUTH_LDAP_TLS_DEMAND"]
+ return current_app.config["AUTH_LDAP_TLS_DEMAND"]
@property
def auth_ldap_tls_cacertdir(self):
- return self.appbuilder.get_app.config["AUTH_LDAP_TLS_CACERTDIR"]
+ return current_app.config["AUTH_LDAP_TLS_CACERTDIR"]
@property
def auth_ldap_tls_cacertfile(self):
- return self.appbuilder.get_app.config["AUTH_LDAP_TLS_CACERTFILE"]
+ return current_app.config["AUTH_LDAP_TLS_CACERTFILE"]
@property
def auth_ldap_tls_certfile(self):
- return self.appbuilder.get_app.config["AUTH_LDAP_TLS_CERTFILE"]
+ return current_app.config["AUTH_LDAP_TLS_CERTFILE"]
@property
def auth_ldap_tls_keyfile(self):
- return self.appbuilder.get_app.config["AUTH_LDAP_TLS_KEYFILE"]
+ return current_app.config["AUTH_LDAP_TLS_KEYFILE"]
@property
def openid_providers(self):
- return self.appbuilder.get_app.config["OPENID_PROVIDERS"]
+ return current_app.config["OPENID_PROVIDERS"]
@property
def oauth_providers(self):
- return self.appbuilder.get_app.config["OAUTH_PROVIDERS"]
+ return current_app.config["OAUTH_PROVIDERS"]
@property
def is_auth_limited(self) -> bool:
- return self.appbuilder.get_app.config["AUTH_RATE_LIMITED"]
+ return current_app.config["AUTH_RATE_LIMITED"]
@property
def auth_rate_limit(self) -> str:
- return self.appbuilder.get_app.config["AUTH_RATE_LIMIT"]
+ return current_app.config["AUTH_RATE_LIMIT"]
@property
def current_user(self):
@@ -798,7 +802,7 @@ def _get_authentik_token_info(self, id_token):
raise InvalidLoginAttempt("OAuth signature verify failed")
def register_views(self):
- if not self.appbuilder.app.config.get("FAB_ADD_SECURITY_VIEWS", True):
+ if not current_app.config.get("FAB_ADD_SECURITY_VIEWS", True):
return
# Security APIs
self.appbuilder.add_api(self.security_api)
@@ -893,7 +897,7 @@ def register_views(self):
category="Security",
)
self.appbuilder.menu.add_separator("Security")
- if self.appbuilder.app.config.get("FAB_ADD_SECURITY_PERMISSION_VIEW", True):
+ if current_app.config.get("FAB_ADD_SECURITY_PERMISSION_VIEW", True):
self.appbuilder.add_view(
self.permissionmodelview,
"Base Permissions",
@@ -901,7 +905,7 @@ def register_views(self):
label=_("Base Permissions"),
category="Security",
)
- if self.appbuilder.app.config.get("FAB_ADD_SECURITY_VIEW_MENU_VIEW", True):
+ if current_app.config.get("FAB_ADD_SECURITY_VIEW_MENU_VIEW", True):
self.appbuilder.add_view(
self.viewmenumodelview,
"Views/Menus",
@@ -909,9 +913,7 @@ def register_views(self):
label=_("Views/Menus"),
category="Security",
)
- if self.appbuilder.app.config.get(
- "FAB_ADD_SECURITY_PERMISSION_VIEWS_VIEW", True
- ):
+ if current_app.config.get("FAB_ADD_SECURITY_PERMISSION_VIEWS_VIEW", True):
self.appbuilder.add_view(
self.permissionviewmodelview,
"Permission on Views/Menus",
@@ -924,7 +926,7 @@ def create_db(self):
"""
Setups the DB, creates admin and public roles if they don't exist.
"""
- roles_mapping = self.appbuilder.get_app.config.get("FAB_ROLES_MAPPING", {})
+ roles_mapping = current_app.config.get("FAB_ROLES_MAPPING", {})
for pk, name in roles_mapping.items():
self.update_role(pk, name)
for role_name, permission_view_menus in self.builtin_roles.items():
@@ -952,12 +954,8 @@ def reset_password(self, userid, password):
user = self.get_user_by_id(userid)
user.password = generate_password_hash(
password=password,
- method=self.appbuilder.get_app.config.get(
- "FAB_PASSWORD_HASH_METHOD", "scrypt"
- ),
- salt_length=self.appbuilder.get_app.config.get(
- "FAB_PASSWORD_HASH_SALT_LENGTH", 16
- ),
+ method=current_app.config.get("FAB_PASSWORD_HASH_METHOD", "scrypt"),
+ salt_length=current_app.config.get("FAB_PASSWORD_HASH_SALT_LENGTH", 16),
)
self.update_user(user)
@@ -1008,7 +1006,7 @@ def auth_user_db(self, username, password):
if user is None or (not user.is_active):
# Balance failure and success
check_password_hash(
- self.appbuilder.get_app.config["AUTH_DB_FAKE_PASSWORD_HASH_CHECK"],
+ current_app.config["AUTH_DB_FAKE_PASSWORD_HASH_CHECK"],
"password",
)
log.info(LOGMSG_WAR_SEC_LOGIN_FAILED, username)
@@ -1648,9 +1646,9 @@ def has_access(self, permission_name: str, view_name: str) -> bool:
"""
Check if current user or public has access to view or menu
"""
- if current_user.is_authenticated:
+ if current_user.is_authenticated and current_user.active:
return self._has_view_access(g.user, permission_name, view_name)
- elif current_user_jwt:
+ elif current_user_jwt and current_user_jwt.active:
return self._has_view_access(current_user_jwt, permission_name, view_name)
else:
return self.is_item_public(permission_name, view_name)
@@ -2222,15 +2220,15 @@ def import_roles(self, path: str) -> None:
"""Imports roles from JSON file."""
raise NotImplementedError
- def load_user(self, pk):
+ def load_user(self, pk: int) -> Any | None:
user = self.get_user_by_id(int(pk))
- if user.is_active:
+ if user and user.is_active:
return user
def load_user_jwt(self, _jwt_header, jwt_data):
identity = jwt_data["sub"]
user = self.load_user(identity)
- if user.is_active:
+ if user and user.is_active:
# Set flask g.user to JWT user, we can't do it on before request
g.user = user
return user
diff --git a/flask_appbuilder/security/mongoengine/manager.py b/flask_appbuilder/security/mongoengine/manager.py
index d00515529b..37dacd3c48 100644
--- a/flask_appbuilder/security/mongoengine/manager.py
+++ b/flask_appbuilder/security/mongoengine/manager.py
@@ -4,6 +4,7 @@
from typing import List, Optional, Union
import uuid
+from flask import current_app
from werkzeug.security import generate_password_hash
from .models import (
@@ -96,10 +97,8 @@ def add_register_user(
else:
register_user.password = generate_password_hash(
password=password,
- method=self.appbuilder.get_app.config.get(
- "FAB_PASSWORD_HASH_METHOD", "scrypt"
- ),
- salt_length=self.appbuilder.get_app.config.get(
+ method=current_app.config.get("FAB_PASSWORD_HASH_METHOD", "scrypt"),
+ salt_length=current_app.config.get(
"FAB_PASSWORD_HASH_SALT_LENGTH", 16
),
)
@@ -151,10 +150,8 @@ def add_user(
else:
user.password = generate_password_hash(
password=password,
- method=self.appbuilder.get_app.config.get(
- "FAB_PASSWORD_HASH_METHOD", "scrypt"
- ),
- salt_length=self.appbuilder.get_app.config.get(
+ method=current_app.config.get("FAB_PASSWORD_HASH_METHOD", "scrypt"),
+ salt_length=current_app.config.get(
"FAB_PASSWORD_HASH_SALT_LENGTH", 16
),
)
diff --git a/flask_appbuilder/security/registerviews.py b/flask_appbuilder/security/registerviews.py
index a6ca01307c..63dfd85c8c 100644
--- a/flask_appbuilder/security/registerviews.py
+++ b/flask_appbuilder/security/registerviews.py
@@ -2,7 +2,7 @@
import logging
-from flask import flash, redirect, request, session, url_for
+from flask import current_app, flash, redirect, request, session, url_for
from flask_babel import lazy_gettext
from .forms import LoginForm_oid, RegisterUserDBForm, RegisterUserOIDForm
@@ -76,7 +76,7 @@ def send_email(self, register_user):
except Exception:
log.error("Install Flask-Mail to use User registration")
return False
- mail = Mail(self.appbuilder.get_app)
+ mail = Mail(current_app)
msg = Message()
msg.subject = self.email_subject
url = url_for(
diff --git a/flask_appbuilder/security/sqla/apis/group/api.py b/flask_appbuilder/security/sqla/apis/group/api.py
index 8e6a53e3cd..ec357e8a5d 100644
--- a/flask_appbuilder/security/sqla/apis/group/api.py
+++ b/flask_appbuilder/security/sqla/apis/group/api.py
@@ -119,7 +119,7 @@ def post(self):
model.users = users
self.pre_add(model)
- self.datamodel.add(model, raise_exception=True)
+ self.datamodel.add(model)
return self.response(201, id=model.id)
@@ -215,7 +215,7 @@ def put(self, pk):
if "users" in item.keys():
model.users = users
self.pre_update(model)
- self.datamodel.edit(model, raise_exception=True)
+ self.datamodel.edit(model)
return self.response(
200,
**{API_RESULT_RES_KEY: self.edit_model_schema.dump(item, many=False)},
diff --git a/flask_appbuilder/security/sqla/apis/role/api.py b/flask_appbuilder/security/sqla/apis/role/api.py
index f92887ab51..129eee4a66 100644
--- a/flask_appbuilder/security/sqla/apis/role/api.py
+++ b/flask_appbuilder/security/sqla/apis/role/api.py
@@ -138,7 +138,7 @@ def add_role_permissions(self, role_id):
permissions = []
for id in item["permission_view_menu_ids"]:
permission = (
- current_app.appbuilder.get_session.query(PermissionView)
+ current_app.appbuilder.session.query(PermissionView)
.filter_by(id=id)
.one_or_none()
)
@@ -146,7 +146,7 @@ def add_role_permissions(self, role_id):
permissions.append(permission)
role.permissions = permissions
- self.datamodel.edit(role, raise_exception=True)
+ self.datamodel.edit(role)
return self.response(
200,
**{
@@ -209,7 +209,7 @@ def update_role_users(self, role_id):
return self.response_404()
users = (
- current_app.appbuilder.get_session.query(User)
+ current_app.appbuilder.session.query(User)
.filter(User.id.in_(item["user_ids"]))
.all()
)
@@ -218,7 +218,7 @@ def update_role_users(self, role_id):
return self.response_404() # Some users were not found
role.user = users
- self.datamodel.edit(role, raise_exception=True)
+ self.datamodel.edit(role)
return self.response(
200,
**{
@@ -281,7 +281,7 @@ def update_role_groups(self, role_id):
return self.response_404()
groups = (
- current_app.appbuilder.get_session.query(Group)
+ current_app.appbuilder.session.query(Group)
.filter(Group.id.in_(item["group_ids"]))
.all()
)
@@ -290,7 +290,7 @@ def update_role_groups(self, role_id):
return self.response_404() # Some groups were not found
role.groups = groups
- self.datamodel.edit(role, raise_exception=True)
+ self.datamodel.edit(role)
return self.response(
200,
**{
diff --git a/flask_appbuilder/security/sqla/apis/user/api.py b/flask_appbuilder/security/sqla/apis/user/api.py
index bfa8494f2e..0de2164fd2 100644
--- a/flask_appbuilder/security/sqla/apis/user/api.py
+++ b/flask_appbuilder/security/sqla/apis/user/api.py
@@ -1,6 +1,6 @@
from datetime import datetime
-from flask import g, request
+from flask import current_app, request
from flask_appbuilder import ModelRestApi
from flask_appbuilder.api import expose, safe
from flask_appbuilder.const import API_RESULT_RES_KEY
@@ -70,27 +70,19 @@ class UserApi(ModelRestApi):
def pre_update(self, item, data):
item.changed_on = datetime.now()
- item.changed_by_fk = g.user.id
+ item.changed_by_fk = self.appbuilder.sm.current_user.id
if "password" in data and data["password"]:
item.password = generate_password_hash(
password=data["password"],
- method=self.appbuilder.get_app.config.get(
- "FAB_PASSWORD_HASH_METHOD", "scrypt"
- ),
- salt_length=self.appbuilder.get_app.config.get(
- "FAB_PASSWORD_HASH_SALT_LENGTH", 16
- ),
+ method=current_app.config.get("FAB_PASSWORD_HASH_METHOD", "scrypt"),
+ salt_length=current_app.config.get("FAB_PASSWORD_HASH_SALT_LENGTH", 16),
)
def pre_add(self, item):
item.password = generate_password_hash(
password=item.password,
- method=self.appbuilder.get_app.config.get(
- "FAB_PASSWORD_HASH_METHOD", "scrypt"
- ),
- salt_length=self.appbuilder.get_app.config.get(
- "FAB_PASSWORD_HASH_SALT_LENGTH", 16
- ),
+ method=current_app.config.get("FAB_PASSWORD_HASH_METHOD", "scrypt"),
+ salt_length=current_app.config.get("FAB_PASSWORD_HASH_SALT_LENGTH", 16),
)
@expose("/", methods=["POST"])
@@ -172,14 +164,14 @@ def post(self):
model.groups = groups
self.pre_add(model)
- self.datamodel.add(model, raise_exception=True)
+ self.datamodel.add(model)
return self.response(201, id=model.id)
except ValidationError as error:
return self.response_400(message=error.messages)
except IntegrityError as e:
return self.response_422(message=str(e.orig))
- @expose("/", methods=["PUT"])
+ @expose("/", methods=("PUT",))
@protect()
@safe
@permission_name("put")
@@ -288,7 +280,7 @@ def put(self, pk):
model.groups = groups
self.pre_update(model, item)
- self.datamodel.edit(model, raise_exception=True)
+ self.datamodel.edit(model)
return self.response(
200,
**{API_RESULT_RES_KEY: self.edit_model_schema.dump(item, many=False)},
diff --git a/flask_appbuilder/security/sqla/manager.py b/flask_appbuilder/security/sqla/manager.py
index 86d164f45f..ecd290bca5 100755
--- a/flask_appbuilder/security/sqla/manager.py
+++ b/flask_appbuilder/security/sqla/manager.py
@@ -1,16 +1,17 @@
+from __future__ import annotations
+
from datetime import datetime
import json
import logging
from typing import Dict, List, Optional, Tuple, Union
import uuid
-from sqlalchemy import and_, func, literal, update
-from sqlalchemy.engine.reflection import Inspector
-from sqlalchemy.orm import contains_eager
-from sqlalchemy.orm.exc import MultipleResultsFound
-from werkzeug.security import generate_password_hash
-
-from .apis import (
+from flask import current_app, has_app_context
+from flask_appbuilder import const as c
+from flask_appbuilder import Model
+from flask_appbuilder.models.sqla.interface import SQLAInterface
+from flask_appbuilder.security.manager import BaseSecurityManager
+from flask_appbuilder.security.sqla.apis import (
GroupApi,
PermissionApi,
PermissionViewMenuApi,
@@ -18,7 +19,7 @@
UserApi,
ViewMenuApi,
)
-from .models import (
+from flask_appbuilder.security.sqla.models import (
assoc_permissionview_role,
Group,
Permission,
@@ -28,10 +29,12 @@
User,
ViewMenu,
)
-from ..manager import BaseSecurityManager
-from ... import const as c
-from ...models.sqla import Base
-from ...models.sqla.interface import SQLAInterface
+from sqlalchemy import and_, func, literal, update
+from sqlalchemy import inspect
+from sqlalchemy.orm import contains_eager
+from sqlalchemy.orm.exc import MultipleResultsFound
+from werkzeug.security import generate_password_hash
+
log = logging.getLogger(__name__)
@@ -99,13 +102,13 @@ def __init__(self, appbuilder):
self.create_db()
@property
- def get_session(self):
- return self.appbuilder.get_session
+ def session(self):
+ return current_app.appbuilder.session
- def register_views(self):
- super(SecurityManager, self).register_views()
+ def register_views(self) -> None:
+ super().register_views()
- if self.appbuilder.app.config.get("FAB_ADD_SECURITY_API", False):
+ if current_app.config.get("FAB_ADD_SECURITY_API", False):
self.appbuilder.add_api(self.permission_api)
self.appbuilder.add_api(self.role_api)
self.appbuilder.add_api(self.user_api)
@@ -113,30 +116,43 @@ def register_views(self):
self.appbuilder.add_api(self.permission_view_menu_api)
self.appbuilder.add_api(self.group_api)
- def create_db(self):
- try:
- engine = self.get_session.get_bind(mapper=None, clause=None)
- inspector = Inspector.from_engine(engine)
- existing_tables = inspector.get_table_names()
- if "ab_user" not in existing_tables or "ab_group" not in existing_tables:
- log.info(c.LOGMSG_INF_SEC_NO_DB)
- Base.metadata.create_all(engine)
- log.info(c.LOGMSG_INF_SEC_ADD_DB)
- super(SecurityManager, self).create_db()
- except Exception as e:
- log.error(c.LOGMSG_ERR_SEC_CREATE_DB, e)
- exit(1)
-
- def find_register_user(self, registration_hash):
+ def create_db(self) -> None:
+ if not current_app.config.get("FAB_CREATE_DB", True):
+ return
+ # Check if an application context does not exist
+ if not has_app_context():
+ # Create a new application context
+ with current_app.app_context():
+ self._create_db()
+ else:
+ self._create_db()
+
+ def _create_db(self) -> None:
+ engine = self.session.get_bind(mapper=None, clause=None)
+ inspector = inspect(engine)
+ existing_tables = inspector.get_table_names()
+ if "ab_user" not in existing_tables or "ab_group" not in existing_tables:
+ log.info(c.LOGMSG_INF_SEC_NO_DB)
+ Model.metadata.create_all(engine)
+ log.info(c.LOGMSG_INF_SEC_ADD_DB)
+ super().create_db()
+
+ def find_register_user(self, registration_hash: str) -> Optional[RegisterUser]:
return (
- self.get_session.query(self.registeruser_model)
+ self.session.query(self.registeruser_model)
.filter(self.registeruser_model.registration_hash == registration_hash)
.scalar()
)
def add_register_user(
- self, username, first_name, last_name, email, password="", hashed_password=""
- ):
+ self,
+ username: str,
+ first_name: str,
+ last_name: str,
+ email: str,
+ password: str = "",
+ hashed_password: str = "",
+ ) -> User:
"""
Add a registration request for the user.
@@ -152,21 +168,17 @@ def add_register_user(
else:
register_user.password = generate_password_hash(
password=password,
- method=self.appbuilder.get_app.config.get(
- "FAB_PASSWORD_HASH_METHOD", "scrypt"
- ),
- salt_length=self.appbuilder.get_app.config.get(
- "FAB_PASSWORD_HASH_SALT_LENGTH", 16
- ),
+ method=current_app.config.get("FAB_PASSWORD_HASH_METHOD", "scrypt"),
+ salt_length=current_app.config.get("FAB_PASSWORD_HASH_SALT_LENGTH", 16),
)
register_user.registration_hash = str(uuid.uuid1())
try:
- self.get_session.add(register_user)
- self.get_session.commit()
+ self.session.add(register_user)
+ self.session.commit()
return register_user
except Exception as e:
log.error(c.LOGMSG_ERR_SEC_ADD_REGISTER_USER, e)
- self.appbuilder.get_session.rollback()
+ self.session.rollback()
return None
def del_register_user(self, register_user):
@@ -176,12 +188,12 @@ def del_register_user(self, register_user):
:param register_user: RegisterUser object to delete
"""
try:
- self.get_session.delete(register_user)
- self.get_session.commit()
+ self.session.delete(register_user)
+ self.session.commit()
return True
except Exception as e:
log.error(c.LOGMSG_ERR_SEC_DEL_REGISTER_USER, e)
- self.get_session.rollback()
+ self.session.rollback()
return False
def find_user(self, username=None, email=None):
@@ -192,7 +204,7 @@ def find_user(self, username=None, email=None):
try:
if self.auth_username_ci:
return (
- self.get_session.query(self.user_model)
+ self.session.query(self.user_model)
.filter(
func.lower(self.user_model.username) == func.lower(username)
)
@@ -200,7 +212,7 @@ def find_user(self, username=None, email=None):
)
else:
return (
- self.get_session.query(self.user_model)
+ self.session.query(self.user_model)
.filter(self.user_model.username == username)
.one_or_none()
)
@@ -210,7 +222,7 @@ def find_user(self, username=None, email=None):
elif email:
try:
return (
- self.get_session.query(self.user_model)
+ self.session.query(self.user_model)
.filter_by(email=email)
.one_or_none()
)
@@ -219,7 +231,7 @@ def find_user(self, username=None, email=None):
return None
def get_all_users(self):
- return self.get_session.query(self.user_model).all()
+ return self.session.query(self.user_model).all()
def add_user(
self,
@@ -253,40 +265,38 @@ def add_user(
else:
user.password = generate_password_hash(
password=password,
- method=self.appbuilder.get_app.config.get(
- "FAB_PASSWORD_HASH_METHOD", "scrypt"
- ),
- salt_length=self.appbuilder.get_app.config.get(
+ method=current_app.config.get("FAB_PASSWORD_HASH_METHOD", "scrypt"),
+ salt_length=current_app.config.get(
"FAB_PASSWORD_HASH_SALT_LENGTH", 16
),
)
- self.get_session.add(user)
- self.get_session.commit()
+ self.session.add(user)
+ self.session.commit()
log.info(c.LOGMSG_INF_SEC_ADD_USER, username)
return user
except Exception as e:
log.error(c.LOGMSG_ERR_SEC_ADD_USER, e)
- self.get_session.rollback()
+ self.session.rollback()
return False
def count_users(self):
- return self.get_session.query(func.count(self.user_model.id)).scalar()
+ return self.session.query(func.count(self.user_model.id)).scalar()
def update_user(self, user):
try:
- self.get_session.merge(user)
- self.get_session.commit()
+ self.session.merge(user)
+ self.session.commit()
log.info(c.LOGMSG_INF_SEC_UPD_USER, user)
except Exception as e:
log.error(c.LOGMSG_ERR_SEC_UPD_USER, e)
- self.get_session.rollback()
+ self.session.rollback()
return False
def get_user_by_id(self, pk):
- return self.get_session.query(self.user_model).get(pk)
+ return self.session.get(self.user_model, pk)
def get_first_user(self) -> "User":
- return self.get_session.query(self.user_model).first()
+ return self.session.query(self.user_model).first()
def noop_user_update(self, user: "User") -> None:
stmt = (
@@ -294,8 +304,8 @@ def noop_user_update(self, user: "User") -> None:
.where(self.user_model.id == user.id)
.values(login_count=user.login_count)
)
- self.get_session.execute(stmt)
- self.get_session.commit()
+ self.session.execute(stmt)
+ self.session.commit()
"""
-----------------------
@@ -315,48 +325,44 @@ def add_role(
role = self.role_model()
role.name = name
role.permissions = permissions
- self.get_session.add(role)
- self.get_session.commit()
+ self.session.add(role)
+ self.session.commit()
log.info(c.LOGMSG_INF_SEC_ADD_ROLE, name)
return role
except Exception as e:
log.error(c.LOGMSG_ERR_SEC_ADD_ROLE, e)
- self.get_session.rollback()
+ self.session.rollback()
return role
def update_role(self, pk, name: str) -> Optional[Role]:
- role = self.get_session.query(self.role_model).get(pk)
+ role = self.session.query(self.role_model).get(pk)
if not role:
return
try:
role.name = name
- self.get_session.merge(role)
- self.get_session.commit()
+ self.session.merge(role)
+ self.session.commit()
log.info(c.LOGMSG_INF_SEC_UPD_ROLE, role)
except Exception as e:
log.error(c.LOGMSG_ERR_SEC_UPD_ROLE, e)
- self.get_session.rollback()
+ self.session.rollback()
return
def find_role(self, name):
- return (
- self.get_session.query(self.role_model).filter_by(name=name).one_or_none()
- )
+ return self.session.query(self.role_model).filter_by(name=name).one_or_none()
def get_all_roles(self):
- return self.get_session.query(self.role_model).all()
+ return self.session.query(self.role_model).all()
def get_public_role(self):
return (
- self.get_session.query(self.role_model)
+ self.session.query(self.role_model)
.filter_by(name=self.auth_role_public)
.one_or_none()
)
def find_group(self, name: str) -> Group:
- return (
- self.get_session.query(self.group_model).filter_by(name=name).one_or_none()
- )
+ return self.session.query(self.group_model).filter_by(name=name).one_or_none()
def add_group(
self,
@@ -377,13 +383,13 @@ def add_group(
group.roles = roles or []
group.users = users or []
- self.get_session.add(group)
- self.get_session.commit()
+ self.session.add(group)
+ self.session.commit()
log.info(c.LOGMSG_INF_SEC_ADD_ROLE, name)
return group
except Exception as e:
log.error(c.LOGMSG_ERR_SEC_ADD_GROUP, e)
- self.get_session.rollback()
+ self.session.rollback()
def get_public_permissions(self):
role = self.get_public_role()
@@ -396,9 +402,7 @@ def find_permission(self, name):
Finds and returns a Permission by name
"""
return (
- self.get_session.query(self.permission_model)
- .filter_by(name=name)
- .one_or_none()
+ self.session.query(self.permission_model).filter_by(name=name).one_or_none()
)
def exist_permission_on_roles(
@@ -414,7 +418,7 @@ def exist_permission_on_roles(
:return: Boolean
"""
q = (
- self.appbuilder.get_session.query(self.permissionview_model)
+ self.session.query(self.permissionview_model)
.join(
assoc_permissionview_role,
and_(
@@ -435,15 +439,15 @@ def exist_permission_on_roles(
.exists()
)
# Special case for MSSQL/Oracle (works on PG and MySQL > 8)
- if self.appbuilder.get_session.bind.dialect.name in ("mssql", "oracle"):
- return self.appbuilder.get_session.query(literal(True)).filter(q).scalar()
- return self.appbuilder.get_session.query(q).scalar()
+ if self.session.get_bind().name in ("mssql", "oracle"):
+ return self.session.query(literal(True)).filter(q).scalar()
+ return self.session.query(q).scalar()
def find_roles_permission_view_menus(
self, permission_name: str, role_ids: List[int]
):
return (
- self.appbuilder.get_session.query(self.permissionview_model)
+ self.session.query(self.permissionview_model)
.join(
assoc_permissionview_role,
and_(
@@ -493,7 +497,7 @@ def get_user_roles_permissions(self, user) -> Dict[str, List[Tuple[str, str]]]:
db_roles_ids.append(role.id)
permission_views = (
- self.appbuilder.get_session.query(PermissionView)
+ self.session.query(PermissionView)
.join(Permission)
.join(ViewMenu)
.join(PermissionView.role)
@@ -519,7 +523,7 @@ def get_db_role_permissions(self, role_id: int) -> List[PermissionView]:
Get all DB permissions from a role (one single query)
"""
return (
- self.appbuilder.get_session.query(PermissionView)
+ self.session.query(PermissionView)
.join(Permission)
.join(ViewMenu)
.join(PermissionView.role)
@@ -541,12 +545,12 @@ def add_permission(self, name):
try:
perm = self.permission_model()
perm.name = name
- self.get_session.add(perm)
- self.get_session.commit()
+ self.session.add(perm)
+ self.session.commit()
return perm
except Exception as e:
log.error(c.LOGMSG_ERR_SEC_ADD_PERMISSION, e)
- self.get_session.rollback()
+ self.session.rollback()
return perm
def del_permission(self, name: str) -> bool:
@@ -562,19 +566,19 @@ def del_permission(self, name: str) -> bool:
return False
try:
pvms = (
- self.get_session.query(self.permissionview_model)
+ self.session.query(self.permissionview_model)
.filter(self.permissionview_model.permission == perm)
.all()
)
if pvms:
log.warning(c.LOGMSG_WAR_SEC_DEL_PERM_PVM, perm, pvms)
return False
- self.get_session.delete(perm)
- self.get_session.commit()
+ self.session.delete(perm)
+ self.session.commit()
return True
except Exception as e:
log.error(c.LOGMSG_ERR_SEC_DEL_PERMISSION, e)
- self.get_session.rollback()
+ self.session.rollback()
return False
"""
@@ -588,13 +592,11 @@ def find_view_menu(self, name):
Finds and returns a ViewMenu by name
"""
return (
- self.get_session.query(self.viewmenu_model)
- .filter_by(name=name)
- .one_or_none()
+ self.session.query(self.viewmenu_model).filter_by(name=name).one_or_none()
)
def get_all_view_menu(self):
- return self.get_session.query(self.viewmenu_model).all()
+ return self.session.query(self.viewmenu_model).all()
def add_view_menu(self, name):
"""
@@ -607,12 +609,12 @@ def add_view_menu(self, name):
try:
view_menu = self.viewmenu_model()
view_menu.name = name
- self.get_session.add(view_menu)
- self.get_session.commit()
+ self.session.add(view_menu)
+ self.session.commit()
return view_menu
except Exception as e:
log.error(c.LOGMSG_ERR_SEC_ADD_VIEWMENU, e)
- self.get_session.rollback()
+ self.session.rollback()
return view_menu
def del_view_menu(self, name: str) -> bool:
@@ -628,19 +630,19 @@ def del_view_menu(self, name: str) -> bool:
return False
try:
pvms = (
- self.get_session.query(self.permissionview_model)
+ self.session.query(self.permissionview_model)
.filter(self.permissionview_model.view_menu == view_menu)
.all()
)
if pvms:
log.warning(c.LOGMSG_WAR_SEC_DEL_VIEWMENU_PVM, view_menu, pvms)
return False
- self.get_session.delete(view_menu)
- self.get_session.commit()
+ self.session.delete(view_menu)
+ self.session.commit()
return True
except Exception as e:
log.error(c.LOGMSG_ERR_SEC_DEL_PERMISSION, e)
- self.get_session.rollback()
+ self.session.rollback()
return False
"""
@@ -657,7 +659,7 @@ def find_permission_view_menu(self, permission_name, view_menu_name):
view_menu = self.find_view_menu(view_menu_name)
if permission and view_menu:
return (
- self.get_session.query(self.permissionview_model)
+ self.session.query(self.permissionview_model)
.filter_by(permission=permission, view_menu=view_menu)
.one_or_none()
)
@@ -670,7 +672,7 @@ def find_permissions_view_menu(self, view_menu):
:return: list of PermissionView objects
"""
return (
- self.get_session.query(self.permissionview_model)
+ self.session.query(self.permissionview_model)
.filter_by(view_menu_id=view_menu.id)
.all()
)
@@ -694,13 +696,13 @@ def add_permission_view_menu(self, permission_name, view_menu_name):
pv = self.permissionview_model()
pv.view_menu, pv.permission = vm, perm
try:
- self.get_session.add(pv)
- self.get_session.commit()
+ self.session.add(pv)
+ self.session.commit()
log.info(c.LOGMSG_INF_SEC_ADD_PERMVIEW, pv)
return pv
except Exception as e:
log.error(c.LOGMSG_ERR_SEC_ADD_PERMVIEW, e)
- self.get_session.rollback()
+ self.session.rollback()
def del_permission_view_menu(self, permission_name, view_menu_name, cascade=True):
if not (permission_name and view_menu_name):
@@ -709,7 +711,7 @@ def del_permission_view_menu(self, permission_name, view_menu_name, cascade=True
if not pv:
return
roles_pvs = (
- self.get_session.query(self.role_model)
+ self.session.query(self.role_model)
.filter(self.role_model.permissions.contains(pv))
.first()
)
@@ -723,13 +725,13 @@ def del_permission_view_menu(self, permission_name, view_menu_name, cascade=True
return
try:
# delete permission on view
- self.get_session.delete(pv)
- self.get_session.commit()
+ self.session.delete(pv)
+ self.session.commit()
# if no more permission on permission view, delete permission
if not cascade:
return
if (
- not self.get_session.query(self.permissionview_model)
+ not self.session.query(self.permissionview_model)
.filter_by(permission=pv.permission)
.all()
):
@@ -737,7 +739,7 @@ def del_permission_view_menu(self, permission_name, view_menu_name, cascade=True
log.info(c.LOGMSG_INF_SEC_DEL_PERMVIEW, permission_name, view_menu_name)
except Exception as e:
log.error(c.LOGMSG_ERR_SEC_DEL_PERMVIEW, e)
- self.get_session.rollback()
+ self.session.rollback()
def exist_permission_on_views(self, lst, item):
for i in lst:
@@ -763,12 +765,12 @@ def add_permission_role(self, role, perm_view):
if perm_view and perm_view not in role.permissions:
try:
role.permissions.append(perm_view)
- self.get_session.merge(role)
- self.get_session.commit()
+ self.session.merge(role)
+ self.session.commit()
log.info(c.LOGMSG_INF_SEC_ADD_PERMROLE, perm_view, role.name)
except Exception as e:
log.error(c.LOGMSG_ERR_SEC_ADD_PERMROLE, e)
- self.get_session.rollback()
+ self.session.rollback()
def del_permission_role(self, role, perm_view):
"""
@@ -782,21 +784,22 @@ def del_permission_role(self, role, perm_view):
if perm_view in role.permissions:
try:
role.permissions.remove(perm_view)
- self.get_session.merge(role)
- self.get_session.commit()
+ self.session.merge(role)
+ self.session.commit()
log.info(c.LOGMSG_INF_SEC_DEL_PERMROLE, perm_view, role.name)
except Exception as e:
log.error(c.LOGMSG_ERR_SEC_DEL_PERMROLE, e)
- self.get_session.rollback()
+ self.session.rollback()
def export_roles(
self, path: Optional[str] = None, indent: Optional[Union[int, str]] = None
) -> None:
"""Exports roles to JSON file."""
+ log.error("BIND URL: %s", self.session.get_bind().url)
timestamp = datetime.now().strftime("%Y%m%dT%H%M%S")
filename = path or f"roles_export_{timestamp}.json"
- serialized_roles = []
+ serialized_roles: List[Dict[str, List[Dict[str, str]]]] = []
for role in self.get_all_roles():
serialized_role = {"name": role.name, "permissions": []}
@@ -816,7 +819,7 @@ def export_roles(
def import_roles(self, path: str) -> None:
"""Imports roles from JSON file."""
- session = self.get_session()
+ session = self.session()
with open(path, "r") as fd:
roles_json = json.loads(fd.read())
diff --git a/flask_appbuilder/security/sqla/models.py b/flask_appbuilder/security/sqla/models.py
index 044c8a7002..2871ce0ed7 100755
--- a/flask_appbuilder/security/sqla/models.py
+++ b/flask_appbuilder/security/sqla/models.py
@@ -1,6 +1,9 @@
import datetime
+from typing import List, Optional
from flask import g
+from flask_appbuilder import Model
+from flask_appbuilder._compat import as_unicode
from sqlalchemy import (
Boolean,
Column,
@@ -14,18 +17,30 @@
UniqueConstraint,
)
from sqlalchemy.ext.declarative import declared_attr
-from sqlalchemy.orm import backref, relationship
+from sqlalchemy.orm import backref, Mapped, relationship
+
+try:
+ from sqlalchemy.orm import mapped_column
+except ImportError:
+ # fallback for SQLAlchemy < 2.0
+ def mapped_column(*args, **kwargs):
+ from sqlalchemy import Column
+
+ return Column(*args, **kwargs)
-from ... import Model
-from ..._compat import as_unicode
_dont_audit = False
class Permission(Model):
__tablename__ = "ab_permission"
- id = Column(Integer, Sequence("ab_permission_id_seq"), primary_key=True)
- name = Column(String(100), unique=True, nullable=False)
+
+ id: Mapped[int] = mapped_column(
+ Integer,
+ Sequence("ab_permission_id_seq", start=1, increment=1, minvalue=1, cycle=False),
+ primary_key=True,
+ )
+ name: Mapped[str] = mapped_column(String(100), unique=True, nullable=False)
def __repr__(self):
return self.name
@@ -33,8 +48,13 @@ def __repr__(self):
class ViewMenu(Model):
__tablename__ = "ab_view_menu"
- id = Column(Integer, Sequence("ab_view_menu_id_seq"), primary_key=True)
- name = Column(String(250), unique=True, nullable=False)
+
+ id: Mapped[int] = mapped_column(
+ Integer,
+ Sequence("ab_view_menu_id_seq", start=1, increment=1, minvalue=1, cycle=False),
+ primary_key=True,
+ )
+ name: Mapped[str] = mapped_column(String(250), unique=True, nullable=False)
def __eq__(self, other):
return (isinstance(other, self.__class__)) and (self.name == other.name)
@@ -49,7 +69,18 @@ def __repr__(self):
assoc_permissionview_role = Table(
"ab_permission_view_role",
Model.metadata,
- Column("id", Integer, Sequence("ab_permission_view_role_id_seq"), primary_key=True),
+ Column(
+ "id",
+ Integer,
+ Sequence(
+ "ab_permission_view_role_id_seq",
+ start=1,
+ increment=1,
+ minvalue=1,
+ cycle=False,
+ ),
+ primary_key=True,
+ ),
Column(
"permission_view_id",
Integer,
@@ -62,17 +93,39 @@ def __repr__(self):
)
+assoc_user_role = Table(
+ "ab_user_role",
+ Model.metadata,
+ Column(
+ "id",
+ Integer,
+ Sequence("ab_user_role_id_seq", start=1, increment=1, minvalue=1, cycle=False),
+ primary_key=True,
+ ),
+ Column("user_id", Integer, ForeignKey("ab_user.id", ondelete="CASCADE")),
+ Column("role_id", Integer, ForeignKey("ab_role.id", ondelete="CASCADE")),
+ UniqueConstraint("user_id", "role_id"),
+)
+
+
class Role(Model):
__tablename__ = "ab_role"
- id = Column(Integer, Sequence("ab_role_id_seq"), primary_key=True)
- name = Column(String(64), unique=True, nullable=False)
- permissions = relationship(
+ id: Mapped[int] = mapped_column(
+ Integer,
+ Sequence("ab_role_id_seq", start=1, increment=1, minvalue=1, cycle=False),
+ primary_key=True,
+ )
+ name: Mapped[str] = mapped_column(String(64), unique=True, nullable=False)
+ permissions: Mapped[List["PermissionView"]] = relationship(
"PermissionView",
secondary=assoc_permissionview_role,
backref="role",
passive_deletes=True,
)
+ user: Mapped[List["User"]] = relationship(
+ "User", secondary=assoc_user_role, backref="roles", enable_typechecks=False
+ )
def __repr__(self):
return self.name
@@ -85,68 +138,67 @@ class PermissionView(Model):
Index("idx_permission_id", "permission_id"),
Index("idx_view_menu_id", "view_menu_id"),
)
- id = Column(Integer, Sequence("ab_permission_view_id_seq"), primary_key=True)
- permission_id = Column(Integer, ForeignKey("ab_permission.id"))
- permission = relationship("Permission", lazy="joined")
- view_menu_id = Column(Integer, ForeignKey("ab_view_menu.id"))
- view_menu = relationship("ViewMenu", lazy="joined")
+ id: Mapped[int] = mapped_column(
+ Integer,
+ Sequence(
+ "ab_permission_view_id_seq", start=1, increment=1, minvalue=1, cycle=False
+ ),
+ primary_key=True,
+ )
+ permission_id: Mapped[int] = mapped_column(Integer, ForeignKey("ab_permission.id"))
+ permission: Mapped[Permission] = relationship("Permission", lazy="joined")
+ view_menu_id: Mapped[int] = mapped_column(Integer, ForeignKey("ab_view_menu.id"))
+ view_menu: Mapped[ViewMenu] = relationship("ViewMenu", lazy="joined")
def __repr__(self):
- return str(self.permission).replace("_", " ") + " on " + str(self.view_menu)
-
-
-assoc_user_role = Table(
- "ab_user_role",
- Model.metadata,
- Column("id", Integer, Sequence("ab_user_role_id_seq"), primary_key=True),
- Column("user_id", Integer, ForeignKey("ab_user.id", ondelete="CASCADE")),
- Column("role_id", Integer, ForeignKey("ab_role.id", ondelete="CASCADE")),
- UniqueConstraint("user_id", "role_id"),
-)
+ return str(self.permission).replace("_", " ") + f" on {str(self.view_menu)}"
class User(Model):
__tablename__ = "ab_user"
- id = Column(Integer, Sequence("ab_user_id_seq"), primary_key=True)
- first_name = Column(String(64), nullable=False)
- last_name = Column(String(64), nullable=False)
- username = Column(String(64), unique=True, nullable=False)
- password = Column(String(256))
- active = Column(Boolean)
- email = Column(String(320), unique=True, nullable=False)
- last_login = Column(DateTime)
- login_count = Column(Integer)
- fail_login_count = Column(Integer)
- roles = relationship(
- "Role", secondary=assoc_user_role, backref="user", passive_deletes=True
- )
- created_on = Column(
+ id: Mapped[int] = mapped_column(
+ Integer,
+ Sequence("ab_user_id_seq", start=1, increment=1, minvalue=1, cycle=False),
+ primary_key=True,
+ )
+ first_name: Mapped[str] = mapped_column(String(64), nullable=False)
+ last_name: Mapped[str] = mapped_column(String(64), nullable=False)
+ username: Mapped[str] = mapped_column(String(64), unique=True, nullable=False)
+ password: Mapped[Optional[str]] = mapped_column(String(256))
+ active: Mapped[Optional[bool]] = mapped_column(Boolean, default=True)
+ email: Mapped[str] = mapped_column(String(320), unique=True, nullable=False)
+ last_login: Mapped[Optional[datetime.datetime]] = mapped_column(
+ DateTime, nullable=True
+ )
+ login_count: Mapped[Optional[int]] = mapped_column(Integer, nullable=True)
+ fail_login_count: Mapped[Optional[int]] = mapped_column(Integer, nullable=True)
+ created_on: Mapped[Optional[datetime.datetime]] = mapped_column(
DateTime, default=lambda: datetime.datetime.now(), nullable=True
)
- changed_on = Column(
+ changed_on: Mapped[Optional[datetime.datetime]] = mapped_column(
DateTime, default=lambda: datetime.datetime.now(), nullable=True
)
@declared_attr
- def created_by_fk(self):
+ def created_by_fk(self) -> Column:
return Column(
Integer, ForeignKey("ab_user.id"), default=self.get_user_id, nullable=True
)
@declared_attr
- def changed_by_fk(self):
+ def changed_by_fk(self) -> Column:
return Column(
Integer, ForeignKey("ab_user.id"), default=self.get_user_id, nullable=True
)
- created_by = relationship(
+ created_by: Mapped["User"] = relationship(
"User",
backref=backref("created", uselist=True),
remote_side=[id],
primaryjoin="User.created_by_fk == User.id",
uselist=False,
)
- changed_by = relationship(
+ changed_by: Mapped["User"] = relationship(
"User",
backref=backref("changed", uselist=True),
remote_side=[id],
@@ -186,7 +238,12 @@ def __repr__(self):
assoc_user_group = Table(
"ab_user_group",
Model.metadata,
- Column("id", Integer, Sequence("ab_user_group_id_seq"), primary_key=True),
+ Column(
+ "id",
+ Integer,
+ Sequence("ab_user_group_id_seq", start=1, increment=1, minvalue=1, cycle=False),
+ primary_key=True,
+ ),
Column("user_id", Integer, ForeignKey("ab_user.id", ondelete="CASCADE")),
Column("group_id", Integer, ForeignKey("ab_group.id", ondelete="CASCADE")),
UniqueConstraint("user_id", "group_id"),
@@ -198,7 +255,12 @@ def __repr__(self):
assoc_group_role = Table(
"ab_group_role",
Model.metadata,
- Column("id", Integer, Sequence("ab_group_role_id_seq"), primary_key=True),
+ Column(
+ "id",
+ Integer,
+ Sequence("ab_group_role_id_seq", start=1, increment=1, minvalue=1, cycle=False),
+ primary_key=True,
+ ),
Column("group_id", Integer, ForeignKey("ab_group.id", ondelete="CASCADE")),
Column("role_id", Integer, ForeignKey("ab_role.id", ondelete="CASCADE")),
UniqueConstraint("group_id", "role_id"),
@@ -209,14 +271,18 @@ def __repr__(self):
class Group(Model):
__tablename__ = "ab_group"
- id = Column(Integer, Sequence("ab_group_id_seq"), primary_key=True)
- name = Column(String(100), unique=True, nullable=False)
- label = Column(String(150))
- description = Column(String(512))
- users = relationship(
+ id: Mapped[int] = mapped_column(
+ Integer,
+ Sequence("ab_group_id_seq", start=1, increment=1, minvalue=1, cycle=False),
+ primary_key=True,
+ )
+ name: Mapped[str] = Column(String(100), unique=True, nullable=False)
+ label: Mapped[str] = Column(String(150))
+ description: Mapped[str] = Column(String(512))
+ users: Mapped[list[User]] = relationship(
"User", secondary=assoc_user_group, backref="groups", passive_deletes=True
)
- roles = relationship(
+ roles: Mapped[list[Role]] = relationship(
"Role", secondary=assoc_group_role, backref="groups", passive_deletes=True
)
@@ -226,11 +292,19 @@ def __repr__(self):
class RegisterUser(Model):
__tablename__ = "ab_register_user"
- id = Column(Integer, Sequence("ab_register_user_id_seq"), primary_key=True)
- first_name = Column(String(64), nullable=False)
- last_name = Column(String(64), nullable=False)
- username = Column(String(64), unique=True, nullable=False)
- password = Column(String(256))
- email = Column(String(64), nullable=False)
- registration_date = Column(DateTime, default=datetime.datetime.now, nullable=True)
- registration_hash = Column(String(256))
+ id = mapped_column(
+ Integer,
+ Sequence(
+ "ab_register_user_id_seq", start=1, increment=1, minvalue=1, cycle=False
+ ),
+ primary_key=True,
+ )
+ first_name: Mapped[str] = mapped_column(String(64), nullable=False)
+ last_name: Mapped[str] = mapped_column(String(64), nullable=False)
+ username: Mapped[str] = mapped_column(String(64), unique=True, nullable=False)
+ password: Mapped[Optional[str]] = mapped_column(String(256))
+ email: Mapped[str] = mapped_column(String(320), unique=True, nullable=False)
+ registration_date: Mapped[Optional[datetime.datetime]] = mapped_column(
+ DateTime, default=lambda: datetime.datetime.now(), nullable=True
+ )
+ registration_hash: Mapped[Optional[str]] = mapped_column(String(256))
diff --git a/flask_appbuilder/security/views.py b/flask_appbuilder/security/views.py
index ec8ec444fd..5d170b67a3 100644
--- a/flask_appbuilder/security/views.py
+++ b/flask_appbuilder/security/views.py
@@ -448,12 +448,8 @@ def pre_update(self, item: Any) -> None:
def pre_add(self, item: Any) -> None:
item.password = generate_password_hash(
password=item.password,
- method=self.appbuilder.get_app.config.get(
- "FAB_PASSWORD_HASH_METHOD", "scrypt"
- ),
- salt_length=self.appbuilder.get_app.config.get(
- "FAB_PASSWORD_HASH_SALT_LENGTH", 16
- ),
+ method=current_app.config.get("FAB_PASSWORD_HASH_METHOD", "scrypt"),
+ salt_length=current_app.config.get("FAB_PASSWORD_HASH_SALT_LENGTH", 16),
)
@@ -585,7 +581,7 @@ def login(self):
def logout(self):
logout_user()
return redirect(
- self.appbuilder.app.config.get(
+ current_app.config.get(
"LOGOUT_REDIRECT_URL", self.appbuilder.get_url_for_index
)
)
diff --git a/flask_appbuilder/templates/appbuilder/baselib.html b/flask_appbuilder/templates/appbuilder/baselib.html
index b54a80aaae..d7415dd956 100644
--- a/flask_appbuilder/templates/appbuilder/baselib.html
+++ b/flask_appbuilder/templates/appbuilder/baselib.html
@@ -53,7 +53,7 @@
{% endmacro %}
{% macro locale_menu(languages) %}
-{% set locale = session['locale'] %}
+{% set locale = session.get('locale') %}
{% if not locale %}
{% set locale = 'en' %}
{% endif %}
diff --git a/flask_appbuilder/templates/appbuilder/navbar_right.html b/flask_appbuilder/templates/appbuilder/navbar_right.html
index f98e2128b8..5168c11884 100644
--- a/flask_appbuilder/templates/appbuilder/navbar_right.html
+++ b/flask_appbuilder/templates/appbuilder/navbar_right.html
@@ -1,6 +1,6 @@
{% macro locale_menu(languages) %}
-{% set locale = session['locale'] %}
+{% set locale = session.get('locale') %}
{% if not locale %}
{% set locale = 'en' %}
{% endif %}
diff --git a/flask_appbuilder/utils/legacy.py b/flask_appbuilder/utils/legacy.py
new file mode 100644
index 0000000000..18c450d09e
--- /dev/null
+++ b/flask_appbuilder/utils/legacy.py
@@ -0,0 +1,33 @@
+from importlib.metadata import PackageNotFoundError, version
+from typing import Type, TYPE_CHECKING, Union
+
+if TYPE_CHECKING:
+ from flask_appbuilder.models.sqla.base import SQLA as SQLA
+ from flask_appbuilder.models.sqla.base_legacy import SQLA as SQLALegacy
+else:
+ SQLA = None # type: ignore
+ SQLALegacy = None # type: ignore
+
+
+def is_flask_sqlalchemy_2() -> bool:
+ """
+ Check if the installed version of flask-sqlalchemy is 2.x.x.
+ """
+ try:
+ fsqla_version = version("flask-sqlalchemy")
+ except PackageNotFoundError:
+ return False
+
+ major_version = int(fsqla_version.split(".")[0])
+ return major_version == 2
+
+
+def get_sqla_class() -> Union[Type[SQLA], Type[SQLALegacy]]:
+ """
+ Returns the SQLA class based on the version of flask-sqlalchemy installed.
+ """
+ if is_flask_sqlalchemy_2():
+ from flask_appbuilder.models.sqla.base_legacy import SQLA
+ else:
+ from flask_appbuilder.models.sqla.base import SQLA
+ return SQLA
diff --git a/flask_appbuilder/views.py b/flask_appbuilder/views.py
index 67cdf109fd..da674be7fe 100644
--- a/flask_appbuilder/views.py
+++ b/flask_appbuilder/views.py
@@ -5,6 +5,7 @@
from flask import (
abort,
+ current_app,
flash,
jsonify,
make_response,
@@ -14,17 +15,32 @@
session,
url_for,
)
+from flask_appbuilder._compat import as_unicode, string_types
+from flask_appbuilder.baseviews import (
+ BaseCRUDView,
+ BaseFormView,
+ BaseView,
+ expose,
+ expose_api,
+)
+from flask_appbuilder.const import FLAMSG_ERR_SEC_ACCESS_DENIED, PERMISSION_PREFIX
from flask_appbuilder.exceptions import FABException
+from flask_appbuilder.filemanager import uuid_originalname
+from flask_appbuilder.security.decorators import (
+ has_access,
+ has_access_api,
+ permission_name,
+)
+from flask_appbuilder.urltools import (
+ get_filter_args,
+ get_order_args,
+ get_page_args,
+ get_page_size_args,
+)
+from flask_appbuilder.widgets import GroupFormListWidget, ListMasterWidget
+from sqlalchemy.exc import SQLAlchemyError
-from ._compat import as_unicode, string_types
-from .baseviews import BaseCRUDView, BaseFormView, BaseView, expose, expose_api
-from .const import FLAMSG_ERR_SEC_ACCESS_DENIED, PERMISSION_PREFIX
-from .filemanager import uuid_originalname
-from .security.decorators import has_access, has_access_api, permission_name
-from .urltools import get_filter_args, get_order_args, get_page_args, get_page_size_args
-from .widgets import GroupFormListWidget, ListMasterWidget
-
log = logging.getLogger(__name__)
@@ -332,16 +348,22 @@ def api_create(self):
item = self.datamodel.obj()
form.populate_obj(item)
self.pre_add(item)
- if self.datamodel.add(item):
+ try:
+ self.datamodel.add(item)
self.post_add(item)
http_return_code = 200
- else:
+ payload = {
+ "message": self.add_row_message,
+ "item": self.show_item_dict(item),
+ "severity": "success",
+ }
+ except SQLAlchemyError:
http_return_code = 500
- payload = {
- "message": self.datamodel.message[0],
- "item": self.show_item_dict(item),
- "severity": self.datamodel.message[1],
- }
+ payload = {
+ "message": self.database_error_message,
+ "item": self.show_item_dict(item),
+ "severity": "danger",
+ }
else:
payload = {"message": "Validation error", "error_details": form.errors}
http_return_code = 500
@@ -377,14 +399,22 @@ def api_update(self, pk):
form.populate_obj(item)
self.pre_update(item)
- if self.datamodel.edit(item):
+ try:
+ self.datamodel.edit(item)
self.post_update(item)
http_return_code = 200
- payload = {
- "message": self.datamodel.message[0],
- "severity": self.datamodel.message[1],
- "item": self.show_item_dict(item),
- }
+ payload = {
+ "message": self.edit_row_message,
+ "severity": "success",
+ "item": self.show_item_dict(item),
+ }
+ except SQLAlchemyError:
+ http_return_code = 500
+ payload = {
+ "message": self.database_error_message,
+ "severity": "danger",
+ "item": self.show_item_dict(item),
+ }
else:
payload = {
"message": "Validation error",
@@ -402,18 +432,22 @@ def api_delete(self, pk):
if not item:
abort(404)
self.pre_delete(item)
- if self.datamodel.delete(item):
+ try:
+ self.datamodel.delete(item)
self.post_delete(item)
http_return_code = 200
- else:
+ payload = {
+ "message": self.delete_row_message,
+ "severity": "success",
+ }
+ except SQLAlchemyError:
http_return_code = 500
+ payload = {
+ "message": self.database_error_message,
+ "severity": "danger",
+ }
response = make_response(
- jsonify(
- {
- "message": self.datamodel.message[0],
- "severity": self.datamodel.message[1],
- }
- ),
+ jsonify(payload),
http_return_code,
)
response.headers["Content-Type"] = "application/json"
@@ -635,7 +669,7 @@ def delete(self, pk):
@has_access
def download(self, filename):
return send_file(
- op.join(self.appbuilder.app.config["UPLOAD_FOLDER"], filename),
+ op.join(current_app.config["UPLOAD_FOLDER"], filename),
download_name=uuid_originalname(filename),
as_attachment=True,
)
diff --git a/flask_appbuilder/widgets.py b/flask_appbuilder/widgets.py
index 1b7e3357c5..0e002ef04d 100644
--- a/flask_appbuilder/widgets.py
+++ b/flask_appbuilder/widgets.py
@@ -6,7 +6,7 @@
import logging
-from flask.globals import _request_ctx_stack
+from flask import current_app
from ._compat import as_unicode
@@ -28,8 +28,7 @@ def __init__(self, **kwargs):
self.template_args = kwargs
def __call__(self, **kwargs):
- ctx = _request_ctx_stack.top
- jinja_env = ctx.app.jinja_env
+ jinja_env = current_app.jinja_env
template = jinja_env.get_template(self.template)
args = self.template_args.copy()
diff --git a/requirements/base.txt b/requirements/base.txt
index e63c8b81a8..10774a1432 100644
--- a/requirements/base.txt
+++ b/requirements/base.txt
@@ -1,5 +1,5 @@
#
-# This file is autogenerated by pip-compile with Python 3.11
+# This file is autogenerated by pip-compile with Python 3.10
# by the following command:
#
# pip-compile requirements/base.in
@@ -12,7 +12,7 @@ attrs==23.1.0
# referencing
babel==2.13.0
# via flask-babel
-blinker==1.7.0
+blinker==1.9.0
# via flask
click==8.1.7
# via
@@ -26,7 +26,7 @@ dnspython==2.6.1
# via email-validator
email-validator==1.3.1
# via flask-appbuilder
-flask==2.3.3
+flask==3.1.1
# via
# flask-appbuilder
# flask-babel
@@ -35,7 +35,7 @@ flask==2.3.3
# flask-login
# flask-sqlalchemy
# flask-wtf
-flask-babel==2.0.0
+flask-babel==4.0.0
# via flask-appbuilder
flask-jwt-extended==4.5.3
# via flask-appbuilder
@@ -43,17 +43,15 @@ flask-limiter==3.7.0
# via flask-appbuilder
flask-login==0.6.3
# via flask-appbuilder
-flask-sqlalchemy==2.5.1
+flask-sqlalchemy==3.1.1
# via flask-appbuilder
flask-wtf==1.2.1
# via flask-appbuilder
-greenlet==3.1.1
- # via sqlalchemy
idna==3.6
# via email-validator
importlib-resources==6.1.0
# via limits
-itsdangerous==2.1.2
+itsdangerous==2.2.0
# via
# flask
# flask-wtf
@@ -71,6 +69,7 @@ markdown-it-py==3.0.0
# via rich
markupsafe==2.1.3
# via
+ # flask
# jinja2
# werkzeug
# wtforms
@@ -117,7 +116,7 @@ six==1.16.0
# via
# prison
# python-dateutil
-sqlalchemy==1.4.49
+sqlalchemy==2.0.30
# via
# flask-appbuilder
# flask-sqlalchemy
@@ -129,7 +128,8 @@ typing-extensions==4.12.2
# via
# flask-limiter
# limits
-werkzeug==3.0.3
+ # sqlalchemy
+werkzeug==3.1.3
# via
# flask
# flask-appbuilder
diff --git a/requirements/base_legacy.txt b/requirements/base_legacy.txt
new file mode 100644
index 0000000000..c2cce19b1e
--- /dev/null
+++ b/requirements/base_legacy.txt
@@ -0,0 +1,143 @@
+#
+# This file is autogenerated by pip-compile with Python 3.11
+# by the following command:
+#
+# pip-compile requirements/base.in
+#
+apispec[yaml]==6.3.0
+ # via flask-appbuilder
+attrs==23.1.0
+ # via
+ # jsonschema
+ # referencing
+babel==2.13.0
+ # via flask-babel
+blinker==1.7.0
+ # via flask
+click==8.1.7
+ # via
+ # flask
+ # flask-appbuilder
+colorama==0.4.6
+ # via flask-appbuilder
+deprecated==1.2.14
+ # via limits
+dnspython==2.6.1
+ # via email-validator
+email-validator==1.3.1
+ # via flask-appbuilder
+flask==2.3.3
+ # via
+ # flask-appbuilder
+ # flask-babel
+ # flask-jwt-extended
+ # flask-limiter
+ # flask-login
+ # flask-sqlalchemy
+ # flask-wtf
+flask-babel==3.1.0
+ # via flask-appbuilder
+flask-jwt-extended==4.5.3
+ # via flask-appbuilder
+flask-limiter==3.7.0
+ # via flask-appbuilder
+flask-login==0.6.3
+ # via flask-appbuilder
+flask-sqlalchemy==2.5.1
+ # via flask-appbuilder
+flask-wtf==1.2.1
+ # via flask-appbuilder
+greenlet==3.1.1
+ # via sqlalchemy
+idna==3.6
+ # via email-validator
+importlib-resources==6.1.0
+ # via limits
+itsdangerous==2.1.2
+ # via
+ # flask
+ # flask-wtf
+jinja2==3.1.3
+ # via
+ # flask
+ # flask-babel
+jsonschema==4.19.1
+ # via flask-appbuilder
+jsonschema-specifications==2023.7.1
+ # via jsonschema
+limits==3.6.0
+ # via flask-limiter
+markdown-it-py==3.0.0
+ # via rich
+markupsafe==2.1.3
+ # via
+ # jinja2
+ # werkzeug
+ # wtforms
+marshmallow==3.24.1
+ # via
+ # flask-appbuilder
+ # marshmallow-sqlalchemy
+marshmallow-sqlalchemy==1.1.1
+ # via flask-appbuilder
+mdurl==0.1.2
+ # via markdown-it-py
+ordered-set==4.1.0
+ # via flask-limiter
+packaging==23.2
+ # via
+ # apispec
+ # limits
+ # marshmallow
+prison==0.2.1
+ # via flask-appbuilder
+pygments==2.16.1
+ # via rich
+pyjwt==2.8.0
+ # via
+ # flask-appbuilder
+ # flask-jwt-extended
+python-dateutil==2.8.2
+ # via flask-appbuilder
+pytz==2023.3.post1
+ # via flask-babel
+pyyaml==6.0.1
+ # via apispec
+referencing==0.30.2
+ # via
+ # jsonschema
+ # jsonschema-specifications
+rich==13.6.0
+ # via flask-limiter
+rpds-py==0.10.6
+ # via
+ # jsonschema
+ # referencing
+six==1.16.0
+ # via
+ # prison
+ # python-dateutil
+sqlalchemy==1.4.49
+ # via
+ # flask-appbuilder
+ # flask-sqlalchemy
+ # marshmallow-sqlalchemy
+ # sqlalchemy-utils
+sqlalchemy-utils==0.41.1
+ # via flask-appbuilder
+typing-extensions==4.12.2
+ # via
+ # flask-limiter
+ # limits
+werkzeug==3.0.3
+ # via
+ # flask
+ # flask-appbuilder
+ # flask-jwt-extended
+ # flask-login
+wrapt==1.15.0
+ # via deprecated
+wtforms==3.2.1
+ # via
+ # flask-appbuilder
+ # flask-wtf
diff --git a/setup.cfg b/setup.cfg
index 51ce984b4e..59252b17fb 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -18,17 +18,52 @@ ignore_errors = True
[mypy-flask_appbuilder.validators]
ignore_errors = False
-check_untyped_defs = true
-disallow_untyped_calls = false
-disallow_untyped_defs = true
-warn_unused_ignores = false
+check_untyped_defs = True
+disallow_untyped_calls = False
+disallow_untyped_defs = True
+warn_unused_ignores = False
[mypy-flask_appbuilder.base]
ignore_errors = False
-check_untyped_defs = true
-disallow_untyped_calls = false
-disallow_untyped_defs = true
-warn_unused_ignores = false
+check_untyped_defs = True
+disallow_untyped_calls = False
+disallow_untyped_defs = True
+warn_unused_ignores = False
+
+[mypy-flask_appbuilder.cli]
+ignore_errors = False
+check_untyped_defs = True
+disallow_untyped_calls = False
+disallow_untyped_defs = True
+warn_unused_ignores = False
+
+[mypy-flask_appbuilder.models.sqla]
+ignore_errors = False
+check_untyped_defs = True
+disallow_untyped_calls = False
+disallow_untyped_defs = True
+warn_unused_ignores = False
+
+[mypy-flask_appbuilder.models.sqla.interface]
+ignore_errors = False
+check_untyped_defs = True
+disallow_untyped_calls = False
+disallow_untyped_defs = True
+warn_unused_ignores = False
+
+;[mypy-flask_appbuilder.api]
+;ignore_errors = False
+;check_untyped_defs = True
+;disallow_untyped_calls = False
+;disallow_untyped_defs = True
+;warn_unused_ignores = False
+
+[mypy-flask_appbuilder.models.sqla.base]
+ignore_errors = False
+check_untyped_defs = True
+disallow_untyped_calls = False
+disallow_untyped_defs = True
+warn_unused_ignores = False
[mypy-flask_appbuilder.api.convert]
ignore_errors = False
diff --git a/setup.py b/setup.py
index d88b6d6342..7f42021036 100644
--- a/setup.py
+++ b/setup.py
@@ -39,7 +39,6 @@ def desc():
package_data={"": ["LICENSE"]},
entry_points={
"flask.commands": ["fab=flask_appbuilder.cli:fab"],
- "console_scripts": ["fabmanager = flask_appbuilder.console:cli"],
},
include_package_data=True,
zip_safe=False,
@@ -49,11 +48,11 @@ def desc():
"colorama>=0.3.9, <1",
"click>=8, <9",
"email_validator>=1.0.5",
- "Flask>=2, <3.0.0",
- "Flask-Babel>=1, <3",
+ "Flask>=2, <4",
+ "Flask-Babel>=3, <5",
"Flask-Limiter>3,<4",
"Flask-Login>=0.3, <0.7",
- "Flask-SQLAlchemy>=2.4, <3",
+ "Flask-SQLAlchemy>=2.4.0, <4",
"Flask-WTF>=0.14.2, <2",
"Flask-JWT-Extended>=4.0.0, <5.0.0",
"jsonschema>=3, <5",
@@ -62,8 +61,7 @@ def desc():
"python-dateutil>=2.3, <3",
"prison>=0.2.1, <1.0.0",
"PyJWT>=2.0.0, <3.0.0",
- # Cautious cap
- "SQLAlchemy<1.5",
+ "SQLAlchemy>=1.4.0, <3",
"sqlalchemy-utils>=0.32.21, <1",
"WTForms<4",
"werkzeug<4",
diff --git a/tests/base.py b/tests/base.py
index 8060e06466..ef580e779e 100644
--- a/tests/base.py
+++ b/tests/base.py
@@ -4,9 +4,9 @@
from typing import Any, Dict, List, Optional, Set
import unittest
-from flask import Flask, Response
+from flask import Flask
from flask.testing import FlaskClient
-from flask_appbuilder import AppBuilder, SQLA
+from flask_appbuilder import AppBuilder
from flask_appbuilder.const import (
API_SECURITY_PASSWORD_KEY,
API_SECURITY_PROVIDER_KEY,
@@ -15,6 +15,7 @@
API_SECURITY_VERSION,
)
from flask_appbuilder.security.sqla.models import Group, User
+from flask_appbuilder.utils.legacy import get_sqla_class
from hiro import Timeline
import jinja2
from tests.const import (
@@ -23,6 +24,7 @@
USERNAME_ADMIN,
USERNAME_READONLY,
)
+from werkzeug.test import TestResponse
class FABTestCase(unittest.TestCase):
@@ -76,7 +78,7 @@ def browser_login(
next_url: Optional[str] = None,
follow_redirects: bool = True,
headers: Optional[dict] = None,
- ) -> Response:
+ ) -> TestResponse:
login_url = "/login/"
if next_url:
login_url = f"{login_url}?next={next_url}"
@@ -107,9 +109,9 @@ def browser_logout(client):
def create_default_users(self, appbuilder) -> None:
with Timeline(start=datetime(2020, 1, 1), scale=0).freeze():
- self.create_admin_user(self.appbuilder, USERNAME_ADMIN, PASSWORD_ADMIN)
+ self.create_admin_user(appbuilder, USERNAME_ADMIN, PASSWORD_ADMIN)
self.create_user(
- self.appbuilder,
+ appbuilder,
USERNAME_READONLY,
PASSWORD_READONLY,
"ReadOnly",
@@ -179,10 +181,19 @@ def setUp(self):
self.app.config.from_object("tests.config_api")
logging.basicConfig(level=logging.ERROR)
+ self.ctx = self.app.app_context()
+ self.ctx.push()
+ SQLA = get_sqla_class()
self.db = SQLA(self.app)
self.appbuilder = AppBuilder(self.app, self.db.session)
self.create_default_users(self.appbuilder)
+ def tearDown(self):
+ self.ctx.pop()
+ self.appbuilder = None
+ self.ctx = None
+ self.app = None
+
@property
def registered_endpoints(self) -> Set:
return {item.endpoint for item in self.app.url_map.iter_rules()}
diff --git a/tests/config_security_api.py b/tests/config_security_api.py
index 53261d4176..6fe7158b0e 100644
--- a/tests/config_security_api.py
+++ b/tests/config_security_api.py
@@ -2,10 +2,10 @@
basedir = os.path.abspath(os.path.dirname(__file__))
-SQLALCHEMY_DATABASE_URI = (
- os.environ.get("SQLALCHEMY_DATABASE_URI")
- or "postgresql+psycopg2://pguser:pguserpassword@127.0.0.1:5432/app"
-)
+SQLALCHEMY_DATABASE_URI = os.environ.get(
+ "SQLALCHEMY_DATABASE_URI"
+) or "sqlite:///" + os.path.join(basedir, "app.db")
+
FAB_ADD_SECURITY_API = True
SECRET_KEY = "thisismyscretkey"
diff --git a/tests/config_security_cli.py b/tests/config_security_cli.py
new file mode 100644
index 0000000000..2cbb21c7e1
--- /dev/null
+++ b/tests/config_security_cli.py
@@ -0,0 +1,15 @@
+import os
+
+basedir = os.path.abspath(os.path.dirname(__file__))
+
+SQLALCHEMY_DATABASE_URI = f"sqlite:///{os.path.join(basedir, 'src.db')}"
+
+
+SECRET_KEY = "thisismyscretkey"
+SQLALCHEMY_TRACK_MODIFICATIONS = False
+WTF_CSRF_ENABLED = False
+FAB_API_SWAGGER_UI = True
+FAB_ROLES = {
+ "FAB_ROLE1": [["Model1View", "can_list"], ["Model2View", "can_list"]],
+ "FAB_ROLE2": [["Model3View", "can_list"], ["Model4View", "can_list"]],
+}
diff --git a/tests/fixtures/data_models.py b/tests/fixtures/data_models.py
index 8a3cf71035..942a79c3fc 100644
--- a/tests/fixtures/data_models.py
+++ b/tests/fixtures/data_models.py
@@ -45,7 +45,7 @@ def model1_data(session: Session, count: int = MODEL1_DATA_SIZE) -> List[Model1]
yield model1_collection
finally:
for model_id in model_ids:
- model = session.query(Model1).get(model_id)
+ model = session.get(Model1, model_id)
if model:
session.delete(model)
session.commit()
diff --git a/examples/dash/app/Dashboard/__init__.py b/tests/models/__init__.py
similarity index 100%
rename from examples/dash/app/Dashboard/__init__.py
rename to tests/models/__init__.py
diff --git a/tests/models/test_interface.py b/tests/models/test_interface.py
new file mode 100644
index 0000000000..0732877b1c
--- /dev/null
+++ b/tests/models/test_interface.py
@@ -0,0 +1,192 @@
+from contextlib import contextmanager
+
+from flask import Flask
+from flask_appbuilder import AppBuilder
+from flask_appbuilder.models.sqla.filters import (
+ FilterEqual,
+ FilterRelationManyToManyEqual,
+)
+from flask_appbuilder.models.sqla.interface import SQLAInterface
+from flask_appbuilder.security.sqla.models import (
+ PermissionView,
+ Role,
+ User,
+)
+from flask_appbuilder.utils.legacy import get_sqla_class
+from sqlalchemy import event
+from sqlalchemy.engine import Engine
+from tests.base import FABTestCase
+from tests.const import USERNAME_ADMIN, USERNAME_READONLY
+
+
+@contextmanager
+def assert_no_queries(engine: Engine):
+ queries = []
+
+ def before_cursor_execute(
+ conn, cursor, statement, parameters, context, executemany
+ ):
+ queries.append(statement)
+
+ event.listen(engine, "before_cursor_execute", before_cursor_execute)
+ try:
+ yield
+ finally:
+ event.remove(engine, "before_cursor_execute", before_cursor_execute)
+ if queries:
+ raise AssertionError(f"Unexpected queries executed:\n{queries}")
+
+
+class SQLAInterfaceTestCase(FABTestCase):
+ def setUp(self):
+ self.app = Flask(__name__)
+ self.app.config.from_object("tests.config_api")
+ self.app.config["WTF_CSRF_ENABLED"] = True
+
+ self.ctx = self.app.app_context()
+ self.ctx.push()
+ SQLA = get_sqla_class()
+ self.db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, self.db.session)
+ self.create_default_users(self.appbuilder)
+
+ def tearDown(self):
+ pass
+
+ def test_query_with_filter(self):
+ interface = SQLAInterface(User)
+ filters = interface.get_filters()
+ filters.add_filter(
+ "username",
+ FilterEqual,
+ USERNAME_ADMIN,
+ )
+ count, admin_user = interface.query(
+ filters=filters,
+ page=0,
+ page_size=10,
+ order_column="id",
+ order_direction="asc",
+ )
+ self.assertEqual(count, 1)
+ self.assertEqual(admin_user[0].username, USERNAME_ADMIN)
+
+ def test_query_join_m_m(self):
+ interface = SQLAInterface(User)
+ filters = interface.get_filters(["id", "username"], {})
+ count, users = interface.query(
+ filters=filters,
+ page=0,
+ page_size=10,
+ order_column="username",
+ order_direction="asc",
+ select_columns=["username", "roles.name"],
+ )
+ if count != 2:
+ raise AssertionError(
+ f"2 users, got {count}. Users: {[user.username for user in users]}"
+ )
+ self.assertEqual(count, 2)
+ with assert_no_queries(self.appbuilder.session.get_bind()):
+ self.assertEqual(users[0].roles[0].name, "ReadOnly")
+
+ def test_query_join_o_m_order_by(self):
+ interface = SQLAInterface(PermissionView)
+ filters = interface.get_filters([], {})
+ filters.add_filter(
+ "permission.name",
+ FilterEqual,
+ "can_add",
+ ).add_filter(
+ "view_menu.name",
+ FilterEqual,
+ "UserDBModelView",
+ )
+
+ count, permissions = interface.query(
+ filters=filters,
+ page=0,
+ page_size=10,
+ order_column="permission.name",
+ order_direction="asc",
+ select_columns=["permission.name", "view_menu.name"],
+ )
+ self.assertEqual(count, 1)
+ with assert_no_queries(self.appbuilder.session.get_bind()):
+ self.assertEqual(permissions[0].permission.name, "can_add")
+
+ def test_query_join_m_m_order_by_m_o(self):
+ interface = SQLAInterface(User)
+ filters = interface.get_filters()
+ count, users = interface.query(
+ filters=filters,
+ page=0,
+ page_size=10,
+ order_column="changed_by.username",
+ order_direction="asc",
+ select_columns=[
+ "username",
+ "roles.name",
+ "created_by.username",
+ "changed_by.username",
+ ],
+ )
+ self.assertEqual(count, 2)
+ with assert_no_queries(self.appbuilder.session.get_bind()):
+ # access attr makes sure no extra lazy queries are triggered
+ users[0].roles[0].name
+ usernames = sorted([user.username for user in users])
+ expected_username = sorted(
+ [
+ USERNAME_ADMIN,
+ USERNAME_READONLY,
+ ]
+ )
+ self.assertEqual(usernames, expected_username)
+
+ def test_query_join_m_m_filter_m_m(self):
+ interface = SQLAInterface(User)
+ filters = interface.get_filters()
+ readonly_role = (
+ self.appbuilder.session.query(Role)
+ .filter(Role.name == "ReadOnly")
+ .one_or_none()
+ )
+ filters.add_filter(
+ "roles",
+ FilterRelationManyToManyEqual,
+ readonly_role.id,
+ )
+ count, users = interface.query(
+ filters=filters,
+ page=0,
+ page_size=10,
+ select_columns=[
+ "username",
+ "roles.name",
+ "created_by.username",
+ "changed_by.username",
+ ],
+ )
+ self.assertEqual(count, 1)
+ with assert_no_queries(self.appbuilder.session.get_bind()):
+ # access attr makes sure no extra lazy queries are triggered
+ assert users[0].roles[0].name == "ReadOnly"
+
+ def test_query_join_m_m_order_by_m_m(self):
+ interface = SQLAInterface(User)
+ filters = interface.get_filters()
+ count, users = interface.query(
+ filters=filters,
+ order_column="roles.name",
+ order_direction="asc",
+ page=0,
+ page_size=10,
+ select_columns=[
+ "username",
+ "roles.name",
+ "created_by.username",
+ "changed_by.username",
+ ],
+ )
+ self.assertEqual(count, 2)
diff --git a/tests/security/test_auth_ldap.py b/tests/security/test_auth_ldap.py
index f5596e2ec2..630f3f320e 100644
--- a/tests/security/test_auth_ldap.py
+++ b/tests/security/test_auth_ldap.py
@@ -5,9 +5,10 @@
from unittest.mock import Mock
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
+from flask_appbuilder import AppBuilder
from flask_appbuilder.security.manager import AUTH_LDAP
from flask_appbuilder.security.sqla.models import User
+from flask_appbuilder.utils.legacy import get_sqla_class
import jinja2
import ldap
from tests.const import USERNAME_ADMIN, USERNAME_READONLY
@@ -35,29 +36,18 @@ def setUp(self):
self.app.config["AUTH_LDAP_LASTNAME_FIELD"] = "sn"
self.app.config["AUTH_LDAP_EMAIL_FIELD"] = "mail"
- # start Database
- self.db = SQLA(self.app)
-
def tearDown(self):
# Remove test user
- user_alice = self.appbuilder.sm.find_user("alice")
- if user_alice:
- self.db.session.delete(user_alice)
- self.db.session.commit()
- user_natalie = self.appbuilder.sm.find_user("natalie")
- if user_natalie:
- self.db.session.delete(user_natalie)
- self.db.session.commit()
-
- # stop Flask
- self.app = None
-
- # stop Flask-AppBuilder
- self.appbuilder = None
-
- # stop Database
- self.db.session.remove()
- self.db = None
+ with self.app.app_context():
+ # Remove test user
+ user_alice = self.appbuilder.sm.find_user("alice")
+ if user_alice:
+ self.appbuilder.session.delete(user_alice)
+ self.appbuilder.session.commit()
+ user_natalie = self.appbuilder.sm.find_user("natalie")
+ if user_natalie:
+ self.appbuilder.session.delete(user_natalie)
+ self.appbuilder.session.commit()
def assertOnlyDefaultUsers(self):
users = self.appbuilder.sm.get_all_users()
@@ -78,22 +68,25 @@ def test___search_ldap(self):
self.app.config["AUTH_LDAP_BIND_USER"] = "cn=admin,dc=example,dc=org"
self.app.config["AUTH_LDAP_BIND_PASSWORD"] = "admin_password"
self.app.config["AUTH_LDAP_SEARCH"] = "ou=users,dc=example,dc=org"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
-
- # prepare `con` object
- con = ldap.initialize("ldap://localhost:1389/")
- sm._ldap_bind_indirect(ldap, con)
-
- # run `_search_ldap` method
- user_dn, user_attributes = sm._search_ldap(ldap, con, "alice")
-
- # validate - search returned expected data
- self.assertEqual(user_dn, "cn=alice,ou=users,dc=example,dc=org")
- self.assertEqual(user_attributes["givenName"], [b"Alice"])
- self.assertEqual(user_attributes["sn"], [b"Doe"])
- self.assertEqual(user_attributes["mail"], [b"alice@example.org"])
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
+
+ # prepare `con` object
+ con = ldap.initialize("ldap://localhost:1389/")
+ sm._ldap_bind_indirect(ldap, con)
+
+ # run `_search_ldap` method
+ user_dn, user_attributes = sm._search_ldap(ldap, con, "alice")
+
+ # validate - search returned expected data
+ self.assertEqual(user_dn, "cn=alice,ou=users,dc=example,dc=org")
+ self.assertEqual(user_attributes["givenName"], [b"Alice"])
+ self.assertEqual(user_attributes["sn"], [b"Doe"])
+ self.assertEqual(user_attributes["mail"], [b"alice@example.org"])
def test___search_ldap_filter(self):
"""
@@ -108,22 +101,25 @@ def test___search_ldap_filter(self):
self.app.config[
"AUTH_LDAP_SEARCH_FILTER"
] = "(memberOf=cn=staff,ou=groups,dc=example,dc=org)"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
-
- # prepare `con` object
- con = ldap.initialize("ldap://localhost:1389/")
- sm._ldap_bind_indirect(ldap, con)
-
- # run `_search_ldap` method
- user_dn, user_attributes = sm._search_ldap(ldap, con, "alice")
-
- # validate - search returned expected data
- self.assertEqual(user_dn, "cn=alice,ou=users,dc=example,dc=org")
- self.assertEqual(user_attributes["givenName"], [b"Alice"])
- self.assertEqual(user_attributes["sn"], [b"Doe"])
- self.assertEqual(user_attributes["mail"], [b"alice@example.org"])
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
+
+ # prepare `con` object
+ con = ldap.initialize("ldap://localhost:1389/")
+ sm._ldap_bind_indirect(ldap, con)
+
+ # run `_search_ldap` method
+ user_dn, user_attributes = sm._search_ldap(ldap, con, "alice")
+
+ # validate - search returned expected data
+ self.assertEqual(user_dn, "cn=alice,ou=users,dc=example,dc=org")
+ self.assertEqual(user_attributes["givenName"], [b"Alice"])
+ self.assertEqual(user_attributes["sn"], [b"Doe"])
+ self.assertEqual(user_attributes["mail"], [b"alice@example.org"])
def test___search_ldap_with_search_referrals(self):
"""
@@ -132,71 +128,77 @@ def test___search_ldap_with_search_referrals(self):
self.app.config["AUTH_LDAP_BIND_USER"] = "uid=admin,ou=users,dc=example,dc=org"
self.app.config["AUTH_LDAP_BIND_PASSWORD"] = "admin_password"
self.app.config["AUTH_LDAP_SEARCH"] = "ou=users,dc=example,dc=org"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
-
- user_alice = (
- "cn=alice,ou=users,dc=example,dc=org",
- {
- "uid": ["alice"],
- "userPassword": ["alice_password"],
- "memberOf": [b"cn=staff,ou=groups,o=test"],
- "givenName": [b"Alice"],
- "sn": [b"Doe"],
- "mail": [b"alice@example.org"],
- },
- )
- # run `_search_ldap` method w/mocked ldap connection
- mock_con = Mock()
- mock_con.search_s.return_value = [
- (
- None,
- [
- "ldap://ForestDnsZones.mycompany.com/"
- "DC=ForestDnsZones,DC=mycompany,DC=com"
- ],
- ),
- user_alice,
- (None, ["ldap://mycompany.com/CN=Configuration,DC=mycompany,DC=com"]),
- ]
- user_dn, user_attributes = sm._search_ldap(ldap, mock_con, "alice")
-
- # validate - search returned expected data
- self.assertEqual(user_dn, user_alice[0])
- self.assertEqual(user_attributes["givenName"], user_alice[1]["givenName"])
- self.assertEqual(user_attributes["sn"], user_alice[1]["sn"])
- self.assertEqual(user_attributes["mail"], user_alice[1]["mail"])
-
- mock_con.search_s.assert_called()
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
+
+ user_alice = (
+ "cn=alice,ou=users,dc=example,dc=org",
+ {
+ "uid": ["alice"],
+ "userPassword": ["alice_password"],
+ "memberOf": [b"cn=staff,ou=groups,o=test"],
+ "givenName": [b"Alice"],
+ "sn": [b"Doe"],
+ "mail": [b"alice@example.org"],
+ },
+ )
+ # run `_search_ldap` method w/mocked ldap connection
+ mock_con = Mock()
+ mock_con.search_s.return_value = [
+ (
+ None,
+ [
+ "ldap://ForestDnsZones.mycompany.com/"
+ "DC=ForestDnsZones,DC=mycompany,DC=com"
+ ],
+ ),
+ user_alice,
+ (None, ["ldap://mycompany.com/CN=Configuration,DC=mycompany,DC=com"]),
+ ]
+ user_dn, user_attributes = sm._search_ldap(ldap, mock_con, "alice")
+
+ # validate - search returned expected data
+ self.assertEqual(user_dn, user_alice[0])
+ self.assertEqual(user_attributes["givenName"], user_alice[1]["givenName"])
+ self.assertEqual(user_attributes["sn"], user_alice[1]["sn"])
+ self.assertEqual(user_attributes["mail"], user_alice[1]["mail"])
+
+ mock_con.search_s.assert_called()
def test__missing_credentials(self):
"""
LDAP: test login flow for - missing credentials
"""
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
- # validate - login failure (missing username)
- self.assertIsNone(sm.auth_user_ldap(None, "password"))
- self.assertIsNone(sm.auth_user_ldap("", "password"))
+ # validate - login failure (missing username)
+ self.assertIsNone(sm.auth_user_ldap(None, "password"))
+ self.assertIsNone(sm.auth_user_ldap("", "password"))
- # validate - login failure (missing password)
- self.assertIsNone(sm.auth_user_ldap("username", None))
- self.assertIsNone(sm.auth_user_ldap("username", ""))
+ # validate - login failure (missing password)
+ self.assertIsNone(sm.auth_user_ldap("username", None))
+ self.assertIsNone(sm.auth_user_ldap("username", ""))
- # validate - login failure (missing username/password)
- self.assertIsNone(sm.auth_user_ldap(None, None))
- self.assertIsNone(sm.auth_user_ldap("", None))
- self.assertIsNone(sm.auth_user_ldap("", ""))
- self.assertIsNone(sm.auth_user_ldap(None, ""))
+ # validate - login failure (missing username/password)
+ self.assertIsNone(sm.auth_user_ldap(None, None))
+ self.assertIsNone(sm.auth_user_ldap("", None))
+ self.assertIsNone(sm.auth_user_ldap("", ""))
+ self.assertIsNone(sm.auth_user_ldap(None, ""))
- # validate - no users were created
- self.assertOnlyDefaultUsers()
+ # validate - no users were created
+ self.assertOnlyDefaultUsers()
def test__active_user(self):
"""
@@ -206,33 +208,36 @@ def test__active_user(self):
"AUTH_LDAP_USERNAME_FORMAT"
] = "cn=%s,ou=users,dc=example,dc=org"
self.app.config["AUTH_LDAP_SEARCH"] = "ou=users,dc=example,dc=org"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
-
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
-
- # register a user
- new_user = sm.add_user(
- username="alice",
- first_name="Alice",
- last_name="Doe",
- email="alice@example.com",
- role=[],
- )
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
+
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
+
+ # register a user
+ new_user = sm.add_user(
+ username="alice",
+ first_name="Alice",
+ last_name="Doe",
+ email="alice@example.com",
+ role=[],
+ )
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
- # set user inactive
- new_user.active = True
+ # set user inactive
+ new_user.active = True
- # attempt login
- user = sm.auth_user_ldap("alice", "alice_password")
+ # attempt login
+ user = sm.auth_user_ldap("alice", "alice_password")
- # validate - user was not allowed to log in
- self.assertIsNotNone(user)
+ # validate - user was not allowed to log in
+ self.assertIsNotNone(user)
def test__inactive_user(self):
"""
@@ -242,33 +247,36 @@ def test__inactive_user(self):
"AUTH_LDAP_USERNAME_FORMAT"
] = "cn=%s,ou=users,dc=example,dc=org"
self.app.config["AUTH_LDAP_SEARCH"] = "ou=users,dc=example,dc=org"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
-
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
-
- # register a user
- new_user = sm.add_user(
- username="alice",
- first_name="Alice",
- last_name="Doe",
- email="alice@example.com",
- role=[],
- )
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
+
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
+ # register a user
+ new_user = sm.add_user(
+ username="alice",
+ first_name="Alice",
+ last_name="Doe",
+ email="alice@example.com",
+ role=[],
+ )
- # set user inactive
- new_user.active = False
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
- # attempt login
- user = sm.auth_user_ldap("alice", "alice_password")
+ # set user inactive
+ new_user.active = False
- # validate - user was not allowed to log in
- self.assertIsNone(user)
+ # attempt login
+ user = sm.auth_user_ldap("alice", "alice_password")
+
+ # validate - user was not allowed to log in
+ self.assertIsNone(user)
def test__multi_group_user_mapping_to_same_role(self):
"""
@@ -284,32 +292,35 @@ def test__multi_group_user_mapping_to_same_role(self):
self.app.config["AUTH_LDAP_SEARCH"] = "ou=users,dc=example,dc=org"
self.app.config["AUTH_USER_REGISTRATION"] = True
self.app.config["AUTH_USER_REGISTRATION_ROLE"] = "Public"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
- # add User role
- sm.add_role("User")
+ # add User role
+ sm.add_role("User")
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
- # attempt login
- user = sm.auth_user_ldap("natalie", "natalie_password")
+ # attempt login
+ user = sm.auth_user_ldap("natalie", "natalie_password")
- # validate - user was allowed to log in
- self.assertIsInstance(user, sm.user_model)
+ # validate - user was allowed to log in
+ self.assertIsInstance(user, sm.user_model)
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
- # validate - user was given the correct roles
- self.assertUserContainsRoles(user, ["Public", "User"])
+ # validate - user was given the correct roles
+ self.assertUserContainsRoles(user, ["Public", "User"])
- # validate - user was given the correct attributes (read from LDAP)
- self.assertEqual(user.first_name, "Natalie")
- self.assertEqual(user.last_name, "Smith")
- self.assertEqual(user.email, "natalie@example.org")
+ # validate - user was given the correct attributes (read from LDAP)
+ self.assertEqual(user.first_name, "Natalie")
+ self.assertEqual(user.last_name, "Smith")
+ self.assertEqual(user.email, "natalie@example.org")
def test__direct_bind__unregistered(self):
"""
@@ -321,29 +332,32 @@ def test__direct_bind__unregistered(self):
] = "cn=%s,ou=users,dc=example,dc=org"
self.app.config["AUTH_USER_REGISTRATION"] = True
self.app.config["AUTH_USER_REGISTRATION_ROLE"] = "Public"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
- # attempt login
- user = sm.auth_user_ldap("alice", "alice_password")
+ # attempt login
+ user = sm.auth_user_ldap("alice", "alice_password")
- # validate - user was allowed to log in
- self.assertIsInstance(user, sm.user_model)
+ # validate - user was allowed to log in
+ self.assertIsInstance(user, sm.user_model)
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
- # validate - user was given the AUTH_USER_REGISTRATION_ROLE role
- self.assertEqual(user.roles, [sm.find_role("Public")])
+ # validate - user was given the AUTH_USER_REGISTRATION_ROLE role
+ self.assertEqual(user.roles, [sm.find_role("Public")])
- # validate - user was given the correct attributes (read from LDAP)
- self.assertEqual(user.first_name, "Alice")
- self.assertEqual(user.last_name, "Doe")
- self.assertEqual(user.email, "alice@example.org")
+ # validate - user was given the correct attributes (read from LDAP)
+ self.assertEqual(user.first_name, "Alice")
+ self.assertEqual(user.last_name, "Doe")
+ self.assertEqual(user.email, "alice@example.org")
def test__direct_bind__unregistered__no_self_register(self):
"""
@@ -354,21 +368,24 @@ def test__direct_bind__unregistered__no_self_register(self):
"AUTH_LDAP_USERNAME_FORMAT"
] = "cn=%s,ou=users,dc=example,dc=org"
self.app.config["AUTH_USER_REGISTRATION"] = False
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
- # attempt login
- user = sm.auth_user_ldap("alice", "alice_password")
+ # attempt login
+ user = sm.auth_user_ldap("alice", "alice_password")
- # validate - user was not allowed to log in
- self.assertIsNone(user)
+ # validate - user was not allowed to log in
+ self.assertIsNone(user)
- # validate - no users were registered
- self.assertOnlyDefaultUsers()
+ # validate - no users were registered
+ self.assertOnlyDefaultUsers()
def test__direct_bind__unregistered__no_search(self):
"""
@@ -379,18 +396,22 @@ def test__direct_bind__unregistered__no_search(self):
"AUTH_LDAP_USERNAME_FORMAT"
] = "cn=%s,ou=users,dc=example,dc=org"
self.app.config["AUTH_USER_REGISTRATION"] = True
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
- # attempt login
- user = sm.auth_user_ldap("alice", "alice_password")
+ # attempt login
+ user = sm.auth_user_ldap("alice", "alice_password")
- # validate - user was NOT allowed to log in (because registration requires search)
- self.assertIsNone(user)
+ # validate - user was NOT allowed to log in
+ # (because registration requires search)
+ self.assertIsNone(user)
def test__direct_bind__registered(self):
"""
@@ -400,30 +421,33 @@ def test__direct_bind__registered(self):
self.app.config[
"AUTH_LDAP_USERNAME_FORMAT"
] = "cn=%s,ou=users,dc=example,dc=org"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
-
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
-
- # register a user
- new_user = sm.add_user( # noqa
- username="alice",
- first_name="Alice",
- last_name="Doe",
- email="alice@example.org",
- role=[],
- )
-
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
-
- # attempt login
- user = sm.auth_user_ldap("alice", "alice_password")
-
- # validate - user was allowed to log in
- self.assertIsInstance(user, sm.user_model)
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
+
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
+
+ # register a user
+ new_user = sm.add_user( # noqa
+ username="alice",
+ first_name="Alice",
+ last_name="Doe",
+ email="alice@example.org",
+ role=[],
+ )
+
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
+
+ # attempt login
+ user = sm.auth_user_ldap("alice", "alice_password")
+
+ # validate - user was allowed to log in
+ self.assertIsInstance(user, sm.user_model)
def test__direct_bind__registered__no_search(self):
"""
@@ -433,30 +457,33 @@ def test__direct_bind__registered__no_search(self):
self.app.config[
"AUTH_LDAP_USERNAME_FORMAT"
] = "cn=%s,ou=users,dc=example,dc=org"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
-
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
-
- # register a user
- new_user = sm.add_user( # noqa
- username="alice",
- first_name="Alice",
- last_name="Doe",
- email="alice@example.org",
- role=[],
- )
-
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
-
- # attempt login
- user = sm.auth_user_ldap("alice", "alice_password")
-
- # validate - user was allowed to log in (because they are already registered)
- self.assertIsInstance(user, sm.user_model)
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
+
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
+
+ # register a user
+ new_user = sm.add_user( # noqa
+ username="alice",
+ first_name="Alice",
+ last_name="Doe",
+ email="alice@example.org",
+ role=[],
+ )
+
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
+
+ # attempt login
+ user = sm.auth_user_ldap("alice", "alice_password")
+
+ # validate - user was allowed to log in (because they are already registered)
+ self.assertIsInstance(user, sm.user_model)
def test__indirect_bind__unregistered(self):
"""
@@ -467,29 +494,32 @@ def test__indirect_bind__unregistered(self):
self.app.config["AUTH_LDAP_BIND_PASSWORD"] = "admin_password"
self.app.config["AUTH_USER_REGISTRATION"] = True
self.app.config["AUTH_USER_REGISTRATION_ROLE"] = "Public"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
- # attempt login
- user = sm.auth_user_ldap("alice", "alice_password")
+ # attempt login
+ user = sm.auth_user_ldap("alice", "alice_password")
- # validate - user was allowed to log in
- self.assertIsInstance(user, sm.user_model)
+ # validate - user was allowed to log in
+ self.assertIsInstance(user, sm.user_model)
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
- # validate - user was given the AUTH_USER_REGISTRATION_ROLE role
- self.assertListEqual(user.roles, [sm.find_role("Public")])
+ # validate - user was given the AUTH_USER_REGISTRATION_ROLE role
+ self.assertListEqual(user.roles, [sm.find_role("Public")])
- # validate - user was given the correct attributes (read from LDAP)
- self.assertEqual(user.first_name, "Alice")
- self.assertEqual(user.last_name, "Doe")
- self.assertEqual(user.email, "alice@example.org")
+ # validate - user was given the correct attributes (read from LDAP)
+ self.assertEqual(user.first_name, "Alice")
+ self.assertEqual(user.last_name, "Doe")
+ self.assertEqual(user.email, "alice@example.org")
def test__indirect_bind__unregistered__no_self_register(self):
"""
@@ -499,21 +529,24 @@ def test__indirect_bind__unregistered__no_self_register(self):
self.app.config["AUTH_LDAP_BIND_USER"] = "cn=admin,dc=example,dc=org"
self.app.config["AUTH_LDAP_BIND_PASSWORD"] = "admin_password"
self.app.config["AUTH_USER_REGISTRATION"] = False
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
- # attempt login
- user = sm.auth_user_ldap("alice", "alice_password")
+ # attempt login
+ user = sm.auth_user_ldap("alice", "alice_password")
- # validate - user was not allowed to log in
- self.assertIsNone(user)
+ # validate - user was not allowed to log in
+ self.assertIsNone(user)
- # validate - no users were registered
- self.assertOnlyDefaultUsers()
+ # validate - no users were registered
+ self.assertOnlyDefaultUsers()
def test__indirect_bind__unregistered__no_search(self):
"""
@@ -524,19 +557,22 @@ def test__indirect_bind__unregistered__no_search(self):
self.app.config["AUTH_LDAP_BIND_PASSWORD"] = "admin_password"
self.app.config["AUTH_USER_REGISTRATION"] = True
self.app.config["AUTH_USER_REGISTRATION_ROLE"] = "Public"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
- # attempt login
- user = sm.auth_user_ldap("alice", "alice_password")
+ # attempt login
+ user = sm.auth_user_ldap("alice", "alice_password")
- # validate - user was NOT allowed to log in
- # (because indirect bind requires search)
- self.assertIsNone(user)
+ # validate - user was NOT allowed to log in
+ # (because indirect bind requires search)
+ self.assertIsNone(user)
def test__indirect_bind__registered(self):
"""
@@ -545,30 +581,33 @@ def test__indirect_bind__registered(self):
self.app.config["AUTH_LDAP_SEARCH"] = "ou=users,dc=example,dc=org"
self.app.config["AUTH_LDAP_BIND_USER"] = "cn=admin,dc=example,dc=org"
self.app.config["AUTH_LDAP_BIND_PASSWORD"] = "admin_password"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
-
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
-
- # register a user
- new_user = sm.add_user( # noqa
- username="alice",
- first_name="Alice",
- last_name="Doe",
- email="alice@example.org",
- role=[],
- )
-
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
-
- # attempt login
- user = sm.auth_user_ldap("alice", "alice_password")
-
- # validate - user was allowed to log in
- self.assertIsInstance(user, sm.user_model)
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
+
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
+
+ # register a user
+ new_user = sm.add_user( # noqa
+ username="alice",
+ first_name="Alice",
+ last_name="Doe",
+ email="alice@example.org",
+ role=[],
+ )
+
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
+
+ # attempt login
+ user = sm.auth_user_ldap("alice", "alice_password")
+
+ # validate - user was allowed to log in
+ self.assertIsInstance(user, sm.user_model)
def test__indirect_bind__registered__no_search(self):
"""
@@ -577,31 +616,34 @@ def test__indirect_bind__registered__no_search(self):
self.app.config["AUTH_LDAP_SEARCH"] = None
self.app.config["AUTH_LDAP_BIND_USER"] = "cn=admin,dc=example,dc=org"
self.app.config["AUTH_LDAP_BIND_PASSWORD"] = "admin_password"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
-
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
-
- # register a user
- new_user = sm.add_user( # noqa
- username="alice",
- first_name="Alice",
- last_name="Doe",
- email="alice@example.org",
- role=[],
- )
-
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
-
- # attempt login
- user = sm.auth_user_ldap("alice", "alice_password")
-
- # validate - user was NOT allowed to log in
- # (because indirect bind requires search)
- self.assertIsNone(user)
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
+
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
+
+ # register a user
+ new_user = sm.add_user( # noqa
+ username="alice",
+ first_name="Alice",
+ last_name="Doe",
+ email="alice@example.org",
+ role=[],
+ )
+
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
+
+ # attempt login
+ user = sm.auth_user_ldap("alice", "alice_password")
+
+ # validate - user was NOT allowed to log in
+ # (because indirect bind requires search)
+ self.assertIsNone(user)
def test__direct_bind__unregistered__single_role(self):
"""
@@ -616,32 +658,35 @@ def test__direct_bind__unregistered__single_role(self):
] = "cn=%s,ou=users,dc=example,dc=org"
self.app.config["AUTH_USER_REGISTRATION"] = True
self.app.config["AUTH_USER_REGISTRATION_ROLE"] = "Public"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
- # add User role
- sm.add_role("User")
+ # add User role
+ sm.add_role("User")
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
- # attempt login
- user = sm.auth_user_ldap("alice", "alice_password")
+ # attempt login
+ user = sm.auth_user_ldap("alice", "alice_password")
- # validate - user was allowed to log in
- self.assertIsInstance(user, sm.user_model)
+ # validate - user was allowed to log in
+ self.assertIsInstance(user, sm.user_model)
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
- # validate - user was given the correct roles
- self.assertUserContainsRoles(user, ["Admin", "Public"])
+ # validate - user was given the correct roles
+ self.assertUserContainsRoles(user, ["Admin", "Public"])
- # validate - user was given the correct attributes (read from LDAP)
- self.assertEqual(user.first_name, "Alice")
- self.assertEqual(user.last_name, "Doe")
- self.assertEqual(user.email, "alice@example.org")
+ # validate - user was given the correct attributes (read from LDAP)
+ self.assertEqual(user.first_name, "Alice")
+ self.assertEqual(user.last_name, "Doe")
+ self.assertEqual(user.email, "alice@example.org")
def test__direct_bind__unregistered__multi_role(self):
"""
@@ -656,32 +701,35 @@ def test__direct_bind__unregistered__multi_role(self):
] = "cn=%s,ou=users,dc=example,dc=org"
self.app.config["AUTH_USER_REGISTRATION"] = True
self.app.config["AUTH_USER_REGISTRATION_ROLE"] = "Public"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
- # add User role
- sm.add_role("User")
+ # add User role
+ sm.add_role("User")
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
- # attempt login
- user = sm.auth_user_ldap("alice", "alice_password")
+ # attempt login
+ user = sm.auth_user_ldap("alice", "alice_password")
- # validate - user was allowed to log in
- self.assertIsInstance(user, sm.user_model)
+ # validate - user was allowed to log in
+ self.assertIsInstance(user, sm.user_model)
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
- # validate - user was given the correct roles
- self.assertUserContainsRoles(user, ["Admin", "Public", "User"])
+ # validate - user was given the correct roles
+ self.assertUserContainsRoles(user, ["Admin", "Public", "User"])
- # validate - user was given the correct attributes (read from LDAP)
- self.assertEqual(user.first_name, "Alice")
- self.assertEqual(user.last_name, "Doe")
- self.assertEqual(user.email, "alice@example.org")
+ # validate - user was given the correct attributes (read from LDAP)
+ self.assertEqual(user.first_name, "Alice")
+ self.assertEqual(user.last_name, "Doe")
+ self.assertEqual(user.email, "alice@example.org")
def test__direct_bind__registered__multi_role__no_role_sync(self):
"""
@@ -695,36 +743,39 @@ def test__direct_bind__registered__multi_role__no_role_sync(self):
"AUTH_LDAP_USERNAME_FORMAT"
] = "cn=%s,ou=users,dc=example,dc=org"
self.app.config["AUTH_LDAP_SEARCH"] = "ou=users,dc=example,dc=org"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
-
- # add User role
- sm.add_role("User")
-
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
-
- # register a user
- new_user = sm.add_user( # noqa
- username="alice",
- first_name="Alice",
- last_name="Doe",
- email="alice@example.org",
- role=[],
- )
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
+ # add User role
+ sm.add_role("User")
- # attempt login
- user = sm.auth_user_ldap("alice", "alice_password")
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
- # validate - user was allowed to log in
- self.assertIsInstance(user, sm.user_model)
+ # register a user
+ new_user = sm.add_user( # noqa
+ username="alice",
+ first_name="Alice",
+ last_name="Doe",
+ email="alice@example.org",
+ role=[],
+ )
- # validate - user was given no roles
- self.assertListEqual(user.roles, [])
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
+
+ # attempt login
+ user = sm.auth_user_ldap("alice", "alice_password")
+
+ # validate - user was allowed to log in
+ self.assertIsInstance(user, sm.user_model)
+
+ # validate - user was given no roles
+ self.assertListEqual(user.roles, [])
def test__direct_bind__registered__multi_role__with_role_sync(self):
"""
@@ -738,36 +789,39 @@ def test__direct_bind__registered__multi_role__with_role_sync(self):
"AUTH_LDAP_USERNAME_FORMAT"
] = "cn=%s,ou=users,dc=example,dc=org"
self.app.config["AUTH_LDAP_SEARCH"] = "ou=users,dc=example,dc=org"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
-
- # add User role
- sm.add_role("User")
-
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
-
- # register a user
- new_user = sm.add_user( # noqa
- username="alice",
- first_name="Alice",
- last_name="Doe",
- email="alice@example.org",
- role=[],
- )
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
+
+ # add User role
+ sm.add_role("User")
+
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
+ # register a user
+ new_user = sm.add_user( # noqa
+ username="alice",
+ first_name="Alice",
+ last_name="Doe",
+ email="alice@example.org",
+ role=[],
+ )
- # attempt login
- user = sm.auth_user_ldap("alice", "alice_password")
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
- # validate - user was allowed to log in
- self.assertIsInstance(user, sm.user_model)
+ # attempt login
+ user = sm.auth_user_ldap("alice", "alice_password")
- # validate - user was given the correct roles
- self.assertUserContainsRoles(user, ["Admin", "User"])
+ # validate - user was allowed to log in
+ self.assertIsInstance(user, sm.user_model)
+
+ # validate - user was given the correct roles
+ self.assertUserContainsRoles(user, ["Admin", "User"])
def test__indirect_bind__unregistered__single_role(self):
"""
@@ -781,32 +835,35 @@ def test__indirect_bind__unregistered__single_role(self):
self.app.config["AUTH_LDAP_BIND_PASSWORD"] = "admin_password"
self.app.config["AUTH_USER_REGISTRATION"] = True
self.app.config["AUTH_USER_REGISTRATION_ROLE"] = "Public"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
- # add User role
- sm.add_role("User")
+ # add User role
+ sm.add_role("User")
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
- # attempt login
- user = sm.auth_user_ldap("alice", "alice_password")
+ # attempt login
+ user = sm.auth_user_ldap("alice", "alice_password")
- # validate - user was allowed to log in
- self.assertIsInstance(user, sm.user_model)
+ # validate - user was allowed to log in
+ self.assertIsInstance(user, sm.user_model)
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
- # validate - user was given the correct roles
- self.assertUserContainsRoles(user, ["Public", "User"])
+ # validate - user was given the correct roles
+ self.assertUserContainsRoles(user, ["Public", "User"])
- # validate - user was given the correct attributes (read from LDAP)
- self.assertEqual(user.first_name, "Alice")
- self.assertEqual(user.last_name, "Doe")
- self.assertEqual(user.email, "alice@example.org")
+ # validate - user was given the correct attributes (read from LDAP)
+ self.assertEqual(user.first_name, "Alice")
+ self.assertEqual(user.last_name, "Doe")
+ self.assertEqual(user.email, "alice@example.org")
def test__indirect_bind__unregistered__multi_role(self):
"""
@@ -820,32 +877,35 @@ def test__indirect_bind__unregistered__multi_role(self):
self.app.config["AUTH_LDAP_BIND_PASSWORD"] = "admin_password"
self.app.config["AUTH_USER_REGISTRATION"] = True
self.app.config["AUTH_USER_REGISTRATION_ROLE"] = "Public"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
- # add User role
- sm.add_role("User")
+ # add User role
+ sm.add_role("User")
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
- # attempt login
- user = sm.auth_user_ldap("alice", "alice_password")
+ # attempt login
+ user = sm.auth_user_ldap("alice", "alice_password")
- # validate - user was allowed to log in
- self.assertIsInstance(user, sm.user_model)
+ # validate - user was allowed to log in
+ self.assertIsInstance(user, sm.user_model)
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
- # validate - user was given the correct roles
- self.assertUserContainsRoles(user, ["User", "Public", "Admin"])
+ # validate - user was given the correct roles
+ self.assertUserContainsRoles(user, ["User", "Public", "Admin"])
- # validate - user was given the correct attributes (read from LDAP)
- self.assertEqual(user.first_name, "Alice")
- self.assertEqual(user.last_name, "Doe")
- self.assertEqual(user.email, "alice@example.org")
+ # validate - user was given the correct attributes (read from LDAP)
+ self.assertEqual(user.first_name, "Alice")
+ self.assertEqual(user.last_name, "Doe")
+ self.assertEqual(user.email, "alice@example.org")
def test__indirect_bind__registered__multi_role__no_role_sync(self):
"""
@@ -858,36 +918,39 @@ def test__indirect_bind__registered__multi_role__no_role_sync(self):
self.app.config["AUTH_LDAP_SEARCH"] = "ou=users,dc=example,dc=org"
self.app.config["AUTH_LDAP_BIND_USER"] = "cn=admin,dc=example,dc=org"
self.app.config["AUTH_LDAP_BIND_PASSWORD"] = "admin_password"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
-
- # add User role
- sm.add_role("User")
-
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
-
- # register a user
- new_user = sm.add_user( # noqa
- username="alice",
- first_name="Alice",
- last_name="Doe",
- email="alice@example.org",
- role=[],
- )
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
+
+ # add User role
+ sm.add_role("User")
+
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
+ # register a user
+ new_user = sm.add_user( # noqa
+ username="alice",
+ first_name="Alice",
+ last_name="Doe",
+ email="alice@example.org",
+ role=[],
+ )
- # attempt login
- user = sm.auth_user_ldap("alice", "alice_password")
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
- # validate - user was allowed to log in
- self.assertIsInstance(user, sm.user_model)
+ # attempt login
+ user = sm.auth_user_ldap("alice", "alice_password")
- # validate - user was given no roles
- self.assertListEqual(user.roles, [])
+ # validate - user was allowed to log in
+ self.assertIsInstance(user, sm.user_model)
+
+ # validate - user was given no roles
+ self.assertListEqual(user.roles, [])
def test__indirect_bind__registered__multi_role__with_role_sync(self):
"""
@@ -900,36 +963,39 @@ def test__indirect_bind__registered__multi_role__with_role_sync(self):
self.app.config["AUTH_LDAP_SEARCH"] = "ou=users,dc=example,dc=org"
self.app.config["AUTH_LDAP_BIND_USER"] = "cn=admin,dc=example,dc=org"
self.app.config["AUTH_LDAP_BIND_PASSWORD"] = "admin_password"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
-
- # add User role
- sm.add_role("User")
-
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
-
- # register a user
- new_user = sm.add_user( # noqa
- username="alice",
- first_name="Alice",
- last_name="Doe",
- email="alice@example.org",
- role=[],
- )
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
+
+ # add User role
+ sm.add_role("User")
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
- # attempt login
- user = sm.auth_user_ldap("alice", "alice_password")
+ # register a user
+ new_user = sm.add_user( # noqa
+ username="alice",
+ first_name="Alice",
+ last_name="Doe",
+ email="alice@example.org",
+ role=[],
+ )
- # validate - user was allowed to log in
- self.assertIsInstance(user, sm.user_model)
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
- # validate - user was given the correct roles
- self.assertUserContainsRoles(user, ["User", "Admin"])
+ # attempt login
+ user = sm.auth_user_ldap("alice", "alice_password")
+
+ # validate - user was allowed to log in
+ self.assertIsInstance(user, sm.user_model)
+
+ # validate - user was given the correct roles
+ self.assertUserContainsRoles(user, ["User", "Admin"])
def test_login_failed_keep_next_url(self):
"""
@@ -943,19 +1009,21 @@ def test_login_failed_keep_next_url(self):
self.app.config["AUTH_USER_REGISTRATION_ROLE"] = "Public"
self.app.config["WTF_CSRF_ENABLED"] = False
self.app.config["SECRET_KEY"] = "thisismyscretkey"
-
- self.appbuilder = AppBuilder(self.app, self.db.session)
- client = self.app.test_client()
- client.get("/logout/")
-
- response = client.post(
- "/login/?next=/users/userinfo/",
- data=dict(username="natalie", password="wrong_natalie_password"),
- follow_redirects=False,
- )
- response = client.post(
- response.location,
- data=dict(username="natalie", password="natalie_password"),
- follow_redirects=False,
- )
- assert response.location == "/users/userinfo/"
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ client = self.app.test_client()
+ client.get("/logout/")
+
+ response = client.post(
+ "/login/?next=/users/userinfo/",
+ data=dict(username="natalie", password="wrong_natalie_password"),
+ follow_redirects=False,
+ )
+ response = client.post(
+ response.location,
+ data=dict(username="natalie", password="natalie_password"),
+ follow_redirects=False,
+ )
+ assert response.location == "/users/userinfo/"
diff --git a/tests/security/test_auth_oauth.py b/tests/security/test_auth_oauth.py
index 9b70c53c39..097f659d2c 100644
--- a/tests/security/test_auth_oauth.py
+++ b/tests/security/test_auth_oauth.py
@@ -5,10 +5,10 @@
from authlib.jose.errors import BadSignatureError
from flask import Flask
from flask_appbuilder import AppBuilder
-from flask_appbuilder import SQLA
from flask_appbuilder.const import AUTH_OAUTH
from flask_appbuilder.exceptions import InvalidLoginAttempt
from flask_appbuilder.exceptions import OAuthProviderUnknown
+from flask_appbuilder.utils.legacy import get_sqla_class
import jinja2
import jwt
from tests.const import USERNAME_ADMIN
@@ -65,26 +65,19 @@ def setUp(self):
},
]
- # start Database
- self.db = SQLA(self.app)
-
def tearDown(self):
# Remove test user
- user_alice = self.appbuilder.sm.find_user("alice")
- if user_alice:
- self.db.session.delete(user_alice)
- self.db.session.commit()
+ with self.app.app_context():
+ user_alice = self.appbuilder.sm.find_user("alice")
+ if user_alice:
+ self.appbuilder.session.delete(user_alice)
+ self.appbuilder.session.commit()
# stop Flask
self.app = None
-
# stop Flask-AppBuilder
self.appbuilder = None
- # stop Database
- self.db.session.remove()
- self.db = None
-
def assertOnlyDefaultUsers(self):
users = self.appbuilder.sm.get_all_users()
user_names = sorted([user.username for user in users])
@@ -108,56 +101,66 @@ def test__inactive_user(self):
"""
OAUTH: test login flow for - inactive user
"""
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
-
- # register a user
- new_user = sm.add_user(
- username="alice",
- first_name="Alice",
- last_name="Doe",
- email="alice@example.com",
- role=[],
- )
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ users = self.appbuilder.session.query(sm.user_model).all()
+ for user in users:
+ self.appbuilder.session.delete(user)
+ self.appbuilder.session.commit()
+ create_default_users(self.appbuilder.session)
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
+
+ # register a user
+ new_user = sm.add_user(
+ username="alice",
+ first_name="Alice",
+ last_name="Doe",
+ email="alice@example.com",
+ role=[],
+ )
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
- # set user inactive
- new_user.active = False
+ # set user inactive
+ new_user.active = False
- # attempt login
- user = sm.auth_user_oauth(self.userinfo_alice)
+ # attempt login
+ user = sm.auth_user_oauth(self.userinfo_alice)
- # validate - user was not allowed to log in
- self.assertIsNone(user)
+ # validate - user was not allowed to log in
+ self.assertIsNone(user)
def test__missing_username(self):
"""
OAUTH: test login flow for - missing credentials
"""
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
- # create userinfo with missing info
- userinfo_missing = self.userinfo_alice.copy()
- userinfo_missing["username"] = ""
+ # create userinfo with missing info
+ userinfo_missing = self.userinfo_alice.copy()
+ userinfo_missing["username"] = ""
- # attempt login
- user = sm.auth_user_oauth(userinfo_missing)
+ # attempt login
+ user = sm.auth_user_oauth(userinfo_missing)
- # validate - login failure (missing username)
- self.assertIsNone(user)
+ # validate - login failure (missing username)
+ self.assertIsNone(user)
- # validate - no users were created
- self.assertOnlyDefaultUsers()
+ # validate - no users were created
+ self.assertOnlyDefaultUsers()
def test__unregistered(self):
"""
@@ -165,50 +168,56 @@ def test__unregistered(self):
"""
self.app.config["AUTH_USER_REGISTRATION"] = True
self.app.config["AUTH_USER_REGISTRATION_ROLE"] = "Public"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
- # attempt login
- user = sm.auth_user_oauth(self.userinfo_alice)
+ # attempt login
+ user = sm.auth_user_oauth(self.userinfo_alice)
- # validate - user was allowed to log in
- self.assertIsInstance(user, sm.user_model)
+ # validate - user was allowed to log in
+ self.assertIsInstance(user, sm.user_model)
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
- # validate - user was given the AUTH_USER_REGISTRATION_ROLE role
- self.assertEqual(user.roles, [sm.find_role("Public")])
+ # validate - user was given the AUTH_USER_REGISTRATION_ROLE role
+ self.assertEqual(user.roles, [sm.find_role("Public")])
- # validate - user was given the correct attributes
- self.assertEqual(user.first_name, "Alice")
- self.assertEqual(user.last_name, "Doe")
- self.assertEqual(user.email, "alice@example.com")
+ # validate - user was given the correct attributes
+ self.assertEqual(user.first_name, "Alice")
+ self.assertEqual(user.last_name, "Doe")
+ self.assertEqual(user.email, "alice@example.com")
def test__unregistered__no_self_register(self):
"""
OAUTH: test login flow for - unregistered user - no self-registration
"""
self.app.config["AUTH_USER_REGISTRATION"] = False
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
- # attempt login
- user = sm.auth_user_oauth(self.userinfo_alice)
+ # attempt login
+ user = sm.auth_user_oauth(self.userinfo_alice)
- # validate - user was not allowed to log in
- self.assertIsNone(user)
+ # validate - user was not allowed to log in
+ self.assertIsNone(user)
- # validate - no users were registered
- self.assertOnlyDefaultUsers()
+ # validate - no users were registered
+ self.assertOnlyDefaultUsers()
def test__unregistered__single_role(self):
"""
@@ -221,34 +230,37 @@ def test__unregistered__single_role(self):
}
self.app.config["AUTH_USER_REGISTRATION"] = True
self.app.config["AUTH_USER_REGISTRATION_ROLE"] = "Public"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
- # add User role
- sm.add_role("User")
+ # add User role
+ sm.add_role("User")
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
- # attempt login
- user = sm.auth_user_oauth(self.userinfo_alice)
+ # attempt login
+ user = sm.auth_user_oauth(self.userinfo_alice)
- # validate - user was allowed to log in
- self.assertIsInstance(user, sm.user_model)
+ # validate - user was allowed to log in
+ self.assertIsInstance(user, sm.user_model)
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
- # validate - user was given the correct roles
- self.assertIn(sm.find_role("Admin"), user.roles)
- self.assertIn(sm.find_role("User"), user.roles)
- self.assertIn(sm.find_role("Public"), user.roles)
+ # validate - user was given the correct roles
+ self.assertIn(sm.find_role("Admin"), user.roles)
+ self.assertIn(sm.find_role("User"), user.roles)
+ self.assertIn(sm.find_role("Public"), user.roles)
- # validate - user was given the correct attributes (read from LDAP)
- self.assertEqual(user.first_name, "Alice")
- self.assertEqual(user.last_name, "Doe")
- self.assertEqual(user.email, "alice@example.com")
+ # validate - user was given the correct attributes (read from LDAP)
+ self.assertEqual(user.first_name, "Alice")
+ self.assertEqual(user.last_name, "Doe")
+ self.assertEqual(user.email, "alice@example.com")
def test__unregistered__multi_role(self):
"""
@@ -257,34 +269,37 @@ def test__unregistered__multi_role(self):
self.app.config["AUTH_ROLES_MAPPING"] = {"GROUP_1": ["Admin", "User"]}
self.app.config["AUTH_USER_REGISTRATION"] = True
self.app.config["AUTH_USER_REGISTRATION_ROLE"] = "Public"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
- # add User role
- sm.add_role("User")
+ # add User role
+ sm.add_role("User")
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
- # attempt login
- user = sm.auth_user_oauth(self.userinfo_alice)
+ # attempt login
+ user = sm.auth_user_oauth(self.userinfo_alice)
- # validate - user was allowed to log in
- self.assertIsInstance(user, sm.user_model)
+ # validate - user was allowed to log in
+ self.assertIsInstance(user, sm.user_model)
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
- # validate - user was given the correct roles
- self.assertIn(sm.find_role("Admin"), user.roles)
- self.assertIn(sm.find_role("Public"), user.roles)
- self.assertIn(sm.find_role("User"), user.roles)
+ # validate - user was given the correct roles
+ self.assertIn(sm.find_role("Admin"), user.roles)
+ self.assertIn(sm.find_role("Public"), user.roles)
+ self.assertIn(sm.find_role("User"), user.roles)
- # validate - user was given the correct attributes (read from LDAP)
- self.assertEqual(user.first_name, "Alice")
- self.assertEqual(user.last_name, "Doe")
- self.assertEqual(user.email, "alice@example.com")
+ # validate - user was given the correct attributes (read from LDAP)
+ self.assertEqual(user.first_name, "Alice")
+ self.assertEqual(user.last_name, "Doe")
+ self.assertEqual(user.email, "alice@example.com")
def test__unregistered__jmespath_role(self):
"""
@@ -294,32 +309,35 @@ def test__unregistered__jmespath_role(self):
self.app.config[
"AUTH_USER_REGISTRATION_ROLE_JMESPATH"
] = "contains(['alice'], username) && 'User' || 'Public'"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
- # add User role
- sm.add_role("User")
+ # add User role
+ sm.add_role("User")
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
- # attempt login
- user = sm.auth_user_oauth(self.userinfo_alice)
+ # attempt login
+ user = sm.auth_user_oauth(self.userinfo_alice)
- # validate - user was allowed to log in
- self.assertIsInstance(user, sm.user_model)
+ # validate - user was allowed to log in
+ self.assertIsInstance(user, sm.user_model)
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
- # validate - user was given the correct roles
- self.assertListEqual(user.roles, [sm.find_role("User")])
+ # validate - user was given the correct roles
+ self.assertListEqual(user.roles, [sm.find_role("User")])
- # validate - user was given the correct attributes (read from LDAP)
- self.assertEqual(user.first_name, "Alice")
- self.assertEqual(user.last_name, "Doe")
- self.assertEqual(user.email, "alice@example.com")
+ # validate - user was given the correct attributes (read from LDAP)
+ self.assertEqual(user.first_name, "Alice")
+ self.assertEqual(user.last_name, "Doe")
+ self.assertEqual(user.email, "alice@example.com")
def test__registered__multi_role__no_role_sync(self):
"""
@@ -327,36 +345,39 @@ def test__registered__multi_role__no_role_sync(self):
""" # noqa
self.app.config["AUTH_ROLES_MAPPING"] = {"GROUP_1": ["Admin", "User"]}
self.app.config["AUTH_ROLES_SYNC_AT_LOGIN"] = False
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
-
- # add User role
- sm.add_role("User")
-
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
-
- # register a user
- new_user = sm.add_user( # noqa
- username="alice",
- first_name="Alice",
- last_name="Doe",
- email="alice@example.com",
- role=[],
- )
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
+
+ # add User role
+ sm.add_role("User")
+
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
+
+ # register a user
+ new_user = sm.add_user( # noqa
+ username="alice",
+ first_name="Alice",
+ last_name="Doe",
+ email="alice@example.com",
+ role=[],
+ )
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
- # attempt login
- user = sm.auth_user_oauth(self.userinfo_alice)
+ # attempt login
+ user = sm.auth_user_oauth(self.userinfo_alice)
- # validate - user was allowed to log in
- self.assertIsInstance(user, sm.user_model)
+ # validate - user was allowed to log in
+ self.assertIsInstance(user, sm.user_model)
- # validate - user was given no roles
- self.assertListEqual(user.roles, [])
+ # validate - user was given no roles
+ self.assertListEqual(user.roles, [])
def test__registered__multi_role__with_role_sync(self):
"""
@@ -364,38 +385,41 @@ def test__registered__multi_role__with_role_sync(self):
""" # noqa
self.app.config["AUTH_ROLES_MAPPING"] = {"GROUP_1": ["Admin", "User"]}
self.app.config["AUTH_ROLES_SYNC_AT_LOGIN"] = True
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
-
- # add User role
- sm.add_role("User")
-
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
-
- # register a user
- new_user = sm.add_user( # noqa
- username="alice",
- first_name="Alice",
- last_name="Doe",
- email="alice@example.com",
- role=[],
- )
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
+
+ # add User role
+ sm.add_role("User")
+
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
+
+ # register a user
+ new_user = sm.add_user( # noqa
+ username="alice",
+ first_name="Alice",
+ last_name="Doe",
+ email="alice@example.com",
+ role=[],
+ )
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
- # attempt login
- user = sm.auth_user_oauth(self.userinfo_alice)
+ # attempt login
+ user = sm.auth_user_oauth(self.userinfo_alice)
- # validate - user was allowed to log in
- self.assertIsInstance(user, sm.user_model)
+ # validate - user was allowed to log in
+ self.assertIsInstance(user, sm.user_model)
- # validate - user was given the correct roles
- self.assertSetEqual(
- set(user.roles), {sm.find_role("Admin"), sm.find_role("User")}
- )
+ # validate - user was given the correct roles
+ self.assertSetEqual(
+ set(user.roles), {sm.find_role("Admin"), sm.find_role("User")}
+ )
def test__registered__jmespath_role__no_role_sync(self):
"""
@@ -406,36 +430,39 @@ def test__registered__jmespath_role__no_role_sync(self):
self.app.config[
"AUTH_USER_REGISTRATION_ROLE_JMESPATH"
] = "contains(['alice'], username) && 'User' || 'Public'"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
-
- # add User role
- sm.add_role("User")
-
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
-
- # register a user
- new_user = sm.add_user( # noqa
- username="alice",
- first_name="Alice",
- last_name="Doe",
- email="alice@example.com",
- role=[],
- )
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
+
+ # add User role
+ sm.add_role("User")
+
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
+
+ # register a user
+ new_user = sm.add_user( # noqa
+ username="alice",
+ first_name="Alice",
+ last_name="Doe",
+ email="alice@example.com",
+ role=[],
+ )
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
- # attempt login
- user = sm.auth_user_oauth(self.userinfo_alice)
+ # attempt login
+ user = sm.auth_user_oauth(self.userinfo_alice)
- # validate - user was allowed to log in
- self.assertIsInstance(user, sm.user_model)
+ # validate - user was allowed to log in
+ self.assertIsInstance(user, sm.user_model)
- # validate - user was given no roles
- self.assertListEqual(user.roles, [])
+ # validate - user was given no roles
+ self.assertListEqual(user.roles, [])
def test__registered__jmespath_role__with_role_sync(self):
"""
@@ -446,125 +473,140 @@ def test__registered__jmespath_role__with_role_sync(self):
self.app.config[
"AUTH_USER_REGISTRATION_ROLE_JMESPATH"
] = "contains(['alice'], username) && 'User' || 'Public'"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
- create_default_users(self.appbuilder.session)
-
- # add User role
- sm.add_role("User")
-
- # validate - no users are registered
- self.assertOnlyDefaultUsers()
-
- # register a user
- new_user = sm.add_user( # noqa
- username="alice",
- first_name="Alice",
- last_name="Doe",
- email="alice@example.com",
- role=[],
- )
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+ create_default_users(self.appbuilder.session)
+
+ # add User role
+ sm.add_role("User")
+
+ # validate - no users are registered
+ self.assertOnlyDefaultUsers()
+
+ # register a user
+ new_user = sm.add_user( # noqa
+ username="alice",
+ first_name="Alice",
+ last_name="Doe",
+ email="alice@example.com",
+ role=[],
+ )
- # validate - user was registered
- self.assertEqual(len(sm.get_all_users()), 3)
+ # validate - user was registered
+ self.assertEqual(len(sm.get_all_users()), 3)
- # attempt login
- user = sm.auth_user_oauth(self.userinfo_alice)
+ # attempt login
+ user = sm.auth_user_oauth(self.userinfo_alice)
- # validate - user was allowed to log in
- self.assertIsInstance(user, sm.user_model)
+ # validate - user was allowed to log in
+ self.assertIsInstance(user, sm.user_model)
- # validate - user was given the correct roles
- self.assertListEqual(user.roles, [sm.find_role("User")])
+ # validate - user was given the correct roles
+ self.assertListEqual(user.roles, [sm.find_role("User")])
def test_oauth_user_info_getter(self):
- self.appbuilder = AppBuilder(self.app, self.db.session)
-
- @self.appbuilder.sm.oauth_user_info_getter
- def user_info_getter(sm, provider, response):
- return {"username": "test"}
-
- self.assertEqual(self.appbuilder.sm.oauth_user_info, user_info_getter)
- self.assertEqual(
- self.appbuilder.sm.oauth_user_info("azure", {"claim": 1}),
- {"username": "test"},
- )
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+
+ @self.appbuilder.sm.oauth_user_info_getter
+ def user_info_getter(sm, provider, response):
+ return {"username": "test"}
+
+ self.assertEqual(self.appbuilder.sm.oauth_user_info, user_info_getter)
+ self.assertEqual(
+ self.appbuilder.sm.oauth_user_info("azure", {"claim": 1}),
+ {"username": "test"},
+ )
def test_oauth_user_info_unknown_provider(self):
- self.appbuilder = AppBuilder(self.app, self.db.session)
- with self.assertRaises(OAuthProviderUnknown):
- self.appbuilder.sm.oauth_user_info("unknown", {})
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ with self.assertRaises(OAuthProviderUnknown):
+ self.appbuilder.sm.oauth_user_info("unknown", {})
def test_oauth_user_info_azure_email_upn(self):
- self.appbuilder = AppBuilder(self.app, self.db.session)
- claims = {
- "aud": "test-aud",
- "iss": "https://sts.windows.net/test/",
- "iat": 7282182129,
- "nbf": 7282182129,
- "exp": 1000000000,
- "amr": ["pwd"],
- "email": "test@gmail.com",
- "upn": "test@upn.com",
- "family_name": "user",
- "given_name": "test",
- "idp": "live.com",
- "name": "Test user",
- "oid": "b1a54a40-8dfa-4a6d-a2b8-f90b84d4b1df",
- "unique_name": "live.com#test@gmail.com",
- "ver": "1.0",
- }
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ claims = {
+ "aud": "test-aud",
+ "iss": "https://sts.windows.net/test/",
+ "iat": 7282182129,
+ "nbf": 7282182129,
+ "exp": 1000000000,
+ "amr": ["pwd"],
+ "email": "test@gmail.com",
+ "upn": "test@upn.com",
+ "family_name": "user",
+ "given_name": "test",
+ "idp": "live.com",
+ "name": "Test user",
+ "oid": "b1a54a40-8dfa-4a6d-a2b8-f90b84d4b1df",
+ "unique_name": "live.com#test@gmail.com",
+ "ver": "1.0",
+ }
- # Create an unsigned JWT
- unsigned_jwt = jwt.encode(claims, key=None, algorithm="none")
- user_info = self.appbuilder.sm.get_oauth_user_info(
- "azure", {"access_token": "", "id_token": unsigned_jwt}
- )
- self.assertEqual(
- user_info,
- {
- "email": "test@upn.com",
- "first_name": "test",
- "last_name": "user",
- "role_keys": [],
- "username": "b1a54a40-8dfa-4a6d-a2b8-f90b84d4b1df",
- },
- )
+ # Create an unsigned JWT
+ unsigned_jwt = jwt.encode(claims, key=None, algorithm="none")
+ user_info = self.appbuilder.sm.get_oauth_user_info(
+ "azure", {"access_token": "", "id_token": unsigned_jwt}
+ )
+ self.assertEqual(
+ user_info,
+ {
+ "email": "test@upn.com",
+ "first_name": "test",
+ "last_name": "user",
+ "role_keys": [],
+ "username": "b1a54a40-8dfa-4a6d-a2b8-f90b84d4b1df",
+ },
+ )
def test_oauth_user_info_azure(self):
- self.appbuilder = AppBuilder(self.app, self.db.session)
- claims = {
- "aud": "test-aud",
- "iss": "https://sts.windows.net/test/",
- "iat": 7282182129,
- "nbf": 7282182129,
- "exp": 1000000000,
- "amr": ["pwd"],
- "email": "test@gmail.com",
- "family_name": "user",
- "given_name": "test",
- "idp": "live.com",
- "name": "Test user",
- "oid": "b1a54a40-8dfa-4a6d-a2b8-f90b84d4b1df",
- "unique_name": "live.com#test@gmail.com",
- "ver": "1.0",
- }
-
- # Create an unsigned JWT
- unsigned_jwt = jwt.encode(claims, key=None, algorithm="none")
- user_info = self.appbuilder.sm.get_oauth_user_info(
- "azure", {"access_token": "", "id_token": unsigned_jwt}
- )
- self.assertEqual(
- user_info,
- {
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ claims = {
+ "aud": "test-aud",
+ "iss": "https://sts.windows.net/test/",
+ "iat": 7282182129,
+ "nbf": 7282182129,
+ "exp": 1000000000,
+ "amr": ["pwd"],
"email": "test@gmail.com",
- "first_name": "test",
- "last_name": "user",
- "role_keys": [],
- "username": "b1a54a40-8dfa-4a6d-a2b8-f90b84d4b1df",
- },
- )
+ "family_name": "user",
+ "given_name": "test",
+ "idp": "live.com",
+ "name": "Test user",
+ "oid": "b1a54a40-8dfa-4a6d-a2b8-f90b84d4b1df",
+ "unique_name": "live.com#test@gmail.com",
+ "ver": "1.0",
+ }
+
+ # Create an unsigned JWT
+ unsigned_jwt = jwt.encode(claims, key=None, algorithm="none")
+ user_info = self.appbuilder.sm.get_oauth_user_info(
+ "azure", {"access_token": "", "id_token": unsigned_jwt}
+ )
+ self.assertEqual(
+ user_info,
+ {
+ "email": "test@gmail.com",
+ "first_name": "test",
+ "last_name": "user",
+ "role_keys": [],
+ "username": "b1a54a40-8dfa-4a6d-a2b8-f90b84d4b1df",
+ },
+ )
def test_oauth_user_info_azure_with_jwt_validation(self):
self.app.config["OAUTH_PROVIDERS"] = [
@@ -591,27 +633,29 @@ def test_oauth_user_info_azure_with_jwt_validation(self):
},
}
]
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ claims = {
+ "aud": "test-aud",
+ "iss": "https://sts.windows.net/test/",
+ "iat": 1696601585,
+ "nbf": 1696601585,
+ "exp": 7282182129, # 100 years from now ;)
+ "amr": ["pwd"],
+ "email": "test@gmail.com",
+ "family_name": "user",
+ "given_name": "test",
+ "idp": "live.com",
+ "name": "Test user",
+ "oid": "b1a54a40-8dfa-4a6d-a2b8-f90b84d4b1df",
+ "unique_name": "live.com#test@gmail.com",
+ "ver": "1.0",
+ }
+ from unittest.mock import MagicMock
- self.appbuilder = AppBuilder(self.app, self.db.session)
- claims = {
- "aud": "test-aud",
- "iss": "https://sts.windows.net/test/",
- "iat": 1696601585,
- "nbf": 1696601585,
- "exp": 7282182129, # 100 years from now ;)
- "amr": ["pwd"],
- "email": "test@gmail.com",
- "family_name": "user",
- "given_name": "test",
- "idp": "live.com",
- "name": "Test user",
- "oid": "b1a54a40-8dfa-4a6d-a2b8-f90b84d4b1df",
- "unique_name": "live.com#test@gmail.com",
- "ver": "1.0",
- }
- from unittest.mock import MagicMock
-
- private_key = """-----BEGIN PRIVATE KEY-----
+ private_key = """-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALeDojEka93XZ/J8
bDGgn2MIHykafgCx2D6wTZgmmhzpRH7/k7J/WSsqG6eSFg38mGJukPCa4dcG8dCL
meajEf2g4IoaYiE55yXs0ou/tixBJI8wRY+NfCluxgIcHdKhZISVO6CkR5r7diN/
@@ -627,93 +671,99 @@ def test_oauth_user_info_azure_with_jwt_validation(self):
8m+N5G/MppasppHLJmXhnFeQsnBX7XcdYiCqHikuBlIzoQ0Cj5xbkfgMMCVORO64
r9+EFRsxA5GNYA==
-----END PRIVATE KEY-----"""
- # Create an unsigned JWT
- unsigned_jwt = jwt.encode(
- claims, key=private_key, algorithm="RS256", headers={"kid": "1"}
- )
- self.appbuilder.sm._get_microsoft_jwks = MagicMock(
- return_value={
- "keys": [
- {
- "alg": "RS256",
- "e": "AQAB",
- "kid": "1",
- "kty": "RSA",
- "n": "t4OiMSRr3ddn8nxsMaCfYwgfKRp-ALHYPrBNmCaaHOlEfv-"
- "Tsn9ZKyobp5IWDfyYYm6Q8Jrh1wbx0IuZ5qMR_aDgihpiITnnJezSi7-"
- "2LEEkjzBFj418KW7GAhwd0qFkhJU7oKRHmvt2I39Isc-wWcN3RSIwnlz"
- "jxSwnCTxPlPs",
- "use": "sig",
- "x5c": [
- "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3g6IxJGvd12fyfGwxoJ9"
- "jCB8pGn4Asdg+sE2YJpoc6UR+/5Oyf1krKhunkhYN/JhibpDwmuHXBvHQi5n"
- "moxH9oOCKGmIhOecl7NKLv7YsQSSPMEWPjXwpbsYCHB3SoWSElTugpEea+3Y"
- "jf0ixz7BZw3dFIjCeXOPFLCcJPE+U+wIDAQAB"
- ],
- }
- ]
- }
- )
- user_info = self.appbuilder.sm.get_oauth_user_info(
- "azure", {"access_token": "", "id_token": unsigned_jwt}
- )
- self.assertEqual(
- user_info,
- {
- "email": "test@gmail.com",
- "first_name": "test",
- "last_name": "user",
- "role_keys": [],
- "username": "b1a54a40-8dfa-4a6d-a2b8-f90b84d4b1df",
- },
- )
+ # Create an unsigned JWT
+ unsigned_jwt = jwt.encode(
+ claims, key=private_key, algorithm="RS256", headers={"kid": "1"}
+ )
+ self.appbuilder.sm._get_microsoft_jwks = MagicMock(
+ return_value={
+ "keys": [
+ {
+ "alg": "RS256",
+ "e": "AQAB",
+ "kid": "1",
+ "kty": "RSA",
+ "n": "t4OiMSRr3ddn8nxsMaCfYwgfKRp-ALHYPrBNmCaaHOlEfv-"
+ "Tsn9ZKyobp5IWDfyYYm6Q8Jrh1wbx0IuZ5qMR_aDgihpiITnnJezSi7-"
+ "2LEEkjzBFj418KW7GAhwd0qFkhJU7oKRHmvt2I39Isc-wWcN3RSIwnlz"
+ "jxSwnCTxPlPs",
+ "use": "sig",
+ "x5c": [
+ "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3g6IxJGvd12fyfGwx"
+ "oJ9jCB8pGn4Asdg+sE2YJpoc6UR+/5Oyf1krKhunkhYN/JhibpDwmuHX"
+ "BvHQi5nmoxH9oOCKGmIhOecl7NKLv7YsQSSPMEWPjXwpbsYCHB3SoWSE"
+ "lTugpEea+3Yjf0ixz7BZw3dFIjCeXOPFLCcJPE+U+wIDAQAB"
+ ],
+ }
+ ]
+ }
+ )
+ user_info = self.appbuilder.sm.get_oauth_user_info(
+ "azure", {"access_token": "", "id_token": unsigned_jwt}
+ )
+ self.assertEqual(
+ user_info,
+ {
+ "email": "test@gmail.com",
+ "first_name": "test",
+ "last_name": "user",
+ "role_keys": [],
+ "username": "b1a54a40-8dfa-4a6d-a2b8-f90b84d4b1df",
+ },
+ )
def test_oauth_user_info_auth0(self):
- self.appbuilder = AppBuilder(self.app, self.db.session)
-
- self.appbuilder.sm.oauth_remotes["auth0"].userinfo = MagicMock(
- return_value={
- "email": "test@gmail.com",
- "given_name": "test",
- "family_name": "user",
- "role_keys": [],
- "sub": "test-sub",
- }
- )
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+
+ self.appbuilder.sm.oauth_remotes["auth0"].userinfo = MagicMock(
+ return_value={
+ "email": "test@gmail.com",
+ "given_name": "test",
+ "family_name": "user",
+ "role_keys": [],
+ "sub": "test-sub",
+ }
+ )
- user_info = self.appbuilder.sm.get_oauth_user_info(
- "auth0", {"access_token": "", "id_token": ""}
- )
- self.assertEqual(
- user_info,
- {
- "email": "test@gmail.com",
- "first_name": "test",
- "last_name": "user",
- "role_keys": [],
- "username": "auth0_test-sub",
- },
- )
+ user_info = self.appbuilder.sm.get_oauth_user_info(
+ "auth0", {"access_token": "", "id_token": ""}
+ )
+ self.assertEqual(
+ user_info,
+ {
+ "email": "test@gmail.com",
+ "first_name": "test",
+ "last_name": "user",
+ "role_keys": [],
+ "username": "auth0_test-sub",
+ },
+ )
def test_reset_password_view_not_registered_with_oauth(self):
"""
OAUTH: test that ResetMyPasswordView is not registered when using OAuth
authentication
"""
- self.appbuilder = AppBuilder(self.app, self.db.session)
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
- for view in self.appbuilder.baseviews:
- if view.__class__.__name__ == "ResetMyPasswordView":
- self.fail(
- "ResetMyPasswordView should not be registered when using OAuth "
- "authentication"
- )
+ for view in self.appbuilder.baseviews:
+ if view.__class__.__name__ == "ResetMyPasswordView":
+ self.fail(
+ "ResetMyPasswordView should not be registered when using OAuth "
+ "authentication"
+ )
- # Also verify that the view is not accessible via URL
- with self.app.test_client() as client:
- response = client.get("/resetmypassword/form")
- # Should return 404 since the view is not registered
- self.assertEqual(response.status_code, 404)
+ # Also verify that the view is not accessible via URL
+ with self.app.test_client() as client:
+ response = client.get("/resetmypassword/form")
+ # Should return 404 since the view is not registered
+ self.assertEqual(response.status_code, 404)
class OAuthAuthentikTestCase(unittest.TestCase):
@@ -750,63 +800,55 @@ def setUp(self):
},
]
- # start Database
- self.db = SQLA(self.app)
-
def tearDown(self):
# Remove test user
- user_alice = self.appbuilder.sm.find_user("alice")
- if user_alice:
- self.db.session.delete(user_alice)
- self.db.session.commit()
-
- # stop Flask
- self.app = None
-
- # stop Flask-AppBuilder
- self.appbuilder = None
-
- # stop Database
- self.db.session.remove()
- self.db = None
+ with self.app.app_context():
+ user_alice = self.appbuilder.sm.find_user("alice")
+ if user_alice:
+ self.appbuilder.session.delete(user_alice)
+ self.appbuilder.session.commit()
# ----------------
# Unit Tests
# ----------------
def test_oauth_user_info_authentik(self):
- self.appbuilder = AppBuilder(self.app, self.db.session)
- claims = {
- "iss": "https://authentik.mydomain.com/application/o/flask-appbuilder-test/",
- "sub": "2ac1102e7cf5a4b1cb2dd5adbe4761c551691ecd88991f78d0195d4d3d0cfcfa",
- "aud": "CLIENT_ID",
- "exp": 1703257941,
- "iat": 1700665941,
- "auth_time": 7282182129, # 100 years from now ;)
- "acr": "goauthentik.io/providers/oauth2/default",
- "at_hash": "cAydO2DJMi_ZL6opx3eUdw",
- "email": "alice@example.com",
- "email_verified": True,
- "name": "Alice",
- "given_name": "Alice Doe",
- "preferred_username": "alice@example.com",
- "nickname": "alice",
- "groups": ["GROUP_1", "GROUP_2"],
- }
-
- # Create an unsigned JWT
- unsigned_jwt = jwt.encode(claims, key=None, algorithm="none")
- user_info = self.appbuilder.sm.get_oauth_user_info(
- "authentik", {"access_token": "", "id_token": unsigned_jwt}
- )
- self.assertEqual(
- user_info,
- {
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ claims = {
+ "iss": "https://authentik.mydomain.com/application/o/"
+ "flask-appbuilder-test/",
+ "sub": "2ac1102e7cf5a4b1cb2dd5adbe4761c551691ecd88991f78d0195d4d3d0cfcfa",
+ "aud": "CLIENT_ID",
+ "exp": 1703257941,
+ "iat": 1700665941,
+ "auth_time": 7282182129, # 100 years from now ;)
+ "acr": "goauthentik.io/providers/oauth2/default",
+ "at_hash": "cAydO2DJMi_ZL6opx3eUdw",
"email": "alice@example.com",
- "first_name": "Alice Doe",
- "role_keys": ["GROUP_1", "GROUP_2"],
- "username": "alice",
- },
- )
+ "email_verified": True,
+ "name": "Alice",
+ "given_name": "Alice Doe",
+ "preferred_username": "alice@example.com",
+ "nickname": "alice",
+ "groups": ["GROUP_1", "GROUP_2"],
+ }
+
+ # Create an unsigned JWT
+ unsigned_jwt = jwt.encode(claims, key=None, algorithm="none")
+ user_info = self.appbuilder.sm.get_oauth_user_info(
+ "authentik", {"access_token": "", "id_token": unsigned_jwt}
+ )
+ self.assertEqual(
+ user_info,
+ {
+ "email": "alice@example.com",
+ "first_name": "Alice Doe",
+ "role_keys": ["GROUP_1", "GROUP_2"],
+ "username": "alice",
+ },
+ )
def test_oauth_user_info_authentik_with_jwt_validation(self):
self.app.config["OAUTH_PROVIDERS"] = [
@@ -836,28 +878,31 @@ def test_oauth_user_info_authentik_with_jwt_validation(self):
},
},
]
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ claims = {
+ "iss": "https://authentik.mydomain.com/application/o/"
+ "flask-appbuilder-test/",
+ "sub": "2ac1102e7cf5a4b1cb2dd5adbe4761c551691ecd88991f78d0195d4d3d0cfcfa",
+ "aud": "CLIENT_ID",
+ "exp": 3203257941,
+ "iat": 1700665941,
+ "auth_time": 7282182129, # 100 years from now ;)
+ "acr": "goauthentik.io/providers/oauth2/default",
+ "at_hash": "cAydO2DJMi_ZL6opx3eUdw",
+ "email": "alice@example.com",
+ "email_verified": True,
+ "name": "Alice",
+ "given_name": "Alice Doe",
+ "preferred_username": "alice@example.com",
+ "nickname": "alice",
+ "groups": ["GROUP_1", "GROUP_2"],
+ }
+ from unittest.mock import MagicMock
- self.appbuilder = AppBuilder(self.app, self.db.session)
- claims = {
- "iss": "https://authentik.mydomain.com/application/o/flask-appbuilder-test/",
- "sub": "2ac1102e7cf5a4b1cb2dd5adbe4761c551691ecd88991f78d0195d4d3d0cfcfa",
- "aud": "CLIENT_ID",
- "exp": 3203257941,
- "iat": 1700665941,
- "auth_time": 7282182129, # 100 years from now ;)
- "acr": "goauthentik.io/providers/oauth2/default",
- "at_hash": "cAydO2DJMi_ZL6opx3eUdw",
- "email": "alice@example.com",
- "email_verified": True,
- "name": "Alice",
- "given_name": "Alice Doe",
- "preferred_username": "alice@example.com",
- "nickname": "alice",
- "groups": ["GROUP_1", "GROUP_2"],
- }
- from unittest.mock import MagicMock
-
- private_key = """-----BEGIN PRIVATE KEY-----
+ private_key = """-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALeDojEka93XZ/J8
bDGgn2MIHykafgCx2D6wTZgmmhzpRH7/k7J/WSsqG6eSFg38mGJukPCa4dcG8dCL
meajEf2g4IoaYiE55yXs0ou/tixBJI8wRY+NfCluxgIcHdKhZISVO6CkR5r7diN/
@@ -873,45 +918,45 @@ def test_oauth_user_info_authentik_with_jwt_validation(self):
8m+N5G/MppasppHLJmXhnFeQsnBX7XcdYiCqHikuBlIzoQ0Cj5xbkfgMMCVORO64
r9+EFRsxA5GNYA==
-----END PRIVATE KEY-----"""
- # Create a signed JWT
- signed_jwt = jwt.encode(
- claims, key=private_key, algorithm="RS256", headers={"kid": "1"}
- )
- self.appbuilder.sm._get_authentik_jwks = MagicMock(
- return_value={
- "keys": [
- {
- "alg": "RS256",
- "e": "AQAB",
- "kid": "1",
- "kty": "RSA",
- "n": "t4OiMSRr3ddn8nxsMaCfYwgfKRp-ALHYPrBNmCaaHOlEfv-"
- "Tsn9ZKyobp5IWDfyYYm6Q8Jrh1wbx0IuZ5qMR_aDgihpiITnnJezSi7-"
- "2LEEkjzBFj418KW7GAhwd0qFkhJU7oKRHmvt2I39Isc-wWcN3RSIwnlz"
- "jxSwnCTxPlPs",
- "use": "sig",
- "x5c": [
- "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3g6IxJGvd12fyfGwxoJ9"
- "jCB8pGn4Asdg+sE2YJpoc6UR+/5Oyf1krKhunkhYN/JhibpDwmuHXBvHQi5n"
- "moxH9oOCKGmIhOecl7NKLv7YsQSSPMEWPjXwpbsYCHB3SoWSElTugpEea+3Y"
- "jf0ixz7BZw3dFIjCeXOPFLCcJPE+U+wIDAQAB"
- ],
- }
- ]
- }
- )
- user_info = self.appbuilder.sm.get_oauth_user_info(
- "authentik", {"access_token": "", "id_token": signed_jwt}
- )
- self.assertEqual(
- user_info,
- {
- "email": "alice@example.com",
- "first_name": "Alice Doe",
- "role_keys": ["GROUP_1", "GROUP_2"],
- "username": "alice",
- },
- )
+ # Create a signed JWT
+ signed_jwt = jwt.encode(
+ claims, key=private_key, algorithm="RS256", headers={"kid": "1"}
+ )
+ self.appbuilder.sm._get_authentik_jwks = MagicMock(
+ return_value={
+ "keys": [
+ {
+ "alg": "RS256",
+ "e": "AQAB",
+ "kid": "1",
+ "kty": "RSA",
+ "n": "t4OiMSRr3ddn8nxsMaCfYwgfKRp-ALHYPrBNmCaaHOlEfv-"
+ "Tsn9ZKyobp5IWDfyYYm6Q8Jrh1wbx0IuZ5qMR_aDgihpiITnnJezSi7-"
+ "2LEEkjzBFj418KW7GAhwd0qFkhJU7oKRHmvt2I39Isc-wWcN3RSIwnlz"
+ "jxSwnCTxPlPs",
+ "use": "sig",
+ "x5c": [
+ "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3g6IxJGvd12fyfGwx"
+ "oJ9jCB8pGn4Asdg+sE2YJpoc6UR+/5Oyf1krKhunkhYN/JhibpDwmuHX"
+ "BvHQi5nmoxH9oOCKGmIhOecl7NKLv7YsQSSPMEWPjXwpbsYCHB3SoWSE"
+ "lTugpEea+3Yjf0ixz7BZw3dFIjCeXOPFLCcJPE+U+wIDAQAB"
+ ],
+ }
+ ]
+ }
+ )
+ user_info = self.appbuilder.sm.get_oauth_user_info(
+ "authentik", {"access_token": "", "id_token": signed_jwt}
+ )
+ self.assertEqual(
+ user_info,
+ {
+ "email": "alice@example.com",
+ "first_name": "Alice Doe",
+ "role_keys": ["GROUP_1", "GROUP_2"],
+ "username": "alice",
+ },
+ )
def test_oauth_user_info_authentik_with_jwt_validation_wrong_signature(self):
"""
@@ -945,28 +990,31 @@ def test_oauth_user_info_authentik_with_jwt_validation_wrong_signature(self):
},
},
]
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ claims = {
+ "iss": "https://authentik.mydomain.com/application/o/"
+ "flask-appbuilder-test/",
+ "sub": "2ac1102e7cf5a4b1cb2dd5adbe4761c551691ecd88991f78d0195d4d3d0cfcfa",
+ "aud": "CLIENT_ID",
+ "exp": 1703257941,
+ "iat": 1700665941,
+ "auth_time": 7282182129, # 100 years from now ;)
+ "acr": "goauthentik.io/providers/oauth2/default",
+ "at_hash": "cAydO2DJMi_ZL6opx3eUdw",
+ "email": "alice@example.com",
+ "email_verified": True,
+ "name": "Alice",
+ "given_name": "Alice Doe",
+ "preferred_username": "alice@example.com",
+ "nickname": "alice",
+ "groups": ["GROUP_1", "GROUP_2"],
+ }
+ from unittest.mock import MagicMock
- self.appbuilder = AppBuilder(self.app, self.db.session)
- claims = {
- "iss": "https://authentik.mydomain.com/application/o/flask-appbuilder-test/",
- "sub": "2ac1102e7cf5a4b1cb2dd5adbe4761c551691ecd88991f78d0195d4d3d0cfcfa",
- "aud": "CLIENT_ID",
- "exp": 1703257941,
- "iat": 1700665941,
- "auth_time": 7282182129, # 100 years from now ;)
- "acr": "goauthentik.io/providers/oauth2/default",
- "at_hash": "cAydO2DJMi_ZL6opx3eUdw",
- "email": "alice@example.com",
- "email_verified": True,
- "name": "Alice",
- "given_name": "Alice Doe",
- "preferred_username": "alice@example.com",
- "nickname": "alice",
- "groups": ["GROUP_1", "GROUP_2"],
- }
- from unittest.mock import MagicMock
-
- private_key = """-----BEGIN PRIVATE KEY-----
+ private_key = """-----BEGIN PRIVATE KEY-----
MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqPfgaTEWEP3S9w0t
gsicURfo+nLW09/0KfOPinhYZ4ouzU+3xC4pSlEp8Ut9FgL0AgqNslNaK34Kq+NZ
jO9DAQIDAQABAkAgkuLEHLaqkWhLgNKagSajeobLS3rPT0Agm0f7k55FXVt743hw
@@ -976,37 +1024,37 @@ def test_oauth_user_info_authentik_with_jwt_validation_wrong_signature(self):
/bDRPrtlRUDDx44wHoEhSDRdy77eiQIgE6z/k6I+ChN1LLttwX0galITxmAYrOBh
BVl433tgTTQ=
-----END PRIVATE KEY-----"""
- # Create a signed JWT
- wrong_signed_jwt = jwt.encode(
- claims, key=private_key, algorithm="RS256", headers={"kid": "1"}
- )
- self.appbuilder.sm._get_authentik_jwks = MagicMock(
- return_value={
- "keys": [
- {
- "alg": "RS256",
- "e": "AQAB",
- "kid": "1",
- "kty": "RSA",
- "n": "t4OiMSRr3ddn8nxsMaCfYwgfKRp-ALHYPrBNmCaaHOlEfv-"
- "Tsn9ZKyobp5IWDfyYYm6Q8Jrh1wbx0IuZ5qMR_aDgihpiITnnJezSi7-"
- "2LEEkjzBFj418KW7GAhwd0qFkhJU7oKRHmvt2I39Isc-wWcN3RSIwnlz"
- "jxSwnCTxPlPs",
- "use": "sig",
- "x5c": [
- "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3g6IxJGvd12fyfGwxoJ9"
- "jCB8pGn4Asdg+sE2YJpoc6UR+/5Oyf1krKhunkhYN/JhibpDwmuHXBvHQi5n"
- "moxH9oOCKGmIhOecl7NKLv7YsQSSPMEWPjXwpbsYCHB3SoWSElTugpEea+3Y"
- "jf0ixz7BZw3dFIjCeXOPFLCcJPE+U+wIDAQAB"
- ],
- }
- ]
- }
- )
- with self.assertRaises(BadSignatureError):
- self.appbuilder.sm.get_oauth_user_info(
- "authentik", {"access_token": "", "id_token": wrong_signed_jwt}
+ # Create a signed JWT
+ wrong_signed_jwt = jwt.encode(
+ claims, key=private_key, algorithm="RS256", headers={"kid": "1"}
+ )
+ self.appbuilder.sm._get_authentik_jwks = MagicMock(
+ return_value={
+ "keys": [
+ {
+ "alg": "RS256",
+ "e": "AQAB",
+ "kid": "1",
+ "kty": "RSA",
+ "n": "t4OiMSRr3ddn8nxsMaCfYwgfKRp-ALHYPrBNmCaaHOlEfv-"
+ "Tsn9ZKyobp5IWDfyYYm6Q8Jrh1wbx0IuZ5qMR_aDgihpiITnnJezSi7-"
+ "2LEEkjzBFj418KW7GAhwd0qFkhJU7oKRHmvt2I39Isc-wWcN3RSIwnlz"
+ "jxSwnCTxPlPs",
+ "use": "sig",
+ "x5c": [
+ "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3g6IxJGvd12fyfGwx"
+ "oJ9jCB8pGn4Asdg+sE2YJpoc6UR+/5Oyf1krKhunkhYN/JhibpDwmuHX"
+ "BvHQi5nmoxH9oOCKGmIhOecl7NKLv7YsQSSPMEWPjXwpbsYCHB3SoWSE"
+ "lTugpEea+3Yjf0ixz7BZw3dFIjCeXOPFLCcJPE+U+wIDAQAB"
+ ],
+ }
+ ]
+ }
)
+ with self.assertRaises(BadSignatureError):
+ self.appbuilder.sm.get_oauth_user_info(
+ "authentik", {"access_token": "", "id_token": wrong_signed_jwt}
+ )
def test_oauth_user_info_authentik_with_jwt_validation_without_signature(self):
"""
@@ -1039,30 +1087,33 @@ def test_oauth_user_info_authentik_with_jwt_validation_without_signature(self):
},
},
]
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ claims = {
+ "iss": "https://authentik.mydomain.com/application/o/"
+ "flask-appbuilder-test/",
+ "sub": "2ac1102e7cf5a4b1cb2dd5adbe4761c551691ecd88991f78d0195d4d3d0cfcfa",
+ "aud": "CLIENT_ID",
+ "exp": 1703257941,
+ "iat": 1700665941,
+ "auth_time": 7282182129, # 100 years from now ;)
+ "acr": "goauthentik.io/providers/oauth2/default",
+ "at_hash": "cAydO2DJMi_ZL6opx3eUdw",
+ "email": "alice@example.com",
+ "email_verified": True,
+ "name": "Alice",
+ "given_name": "Alice Doe",
+ "preferred_username": "alice@example.com",
+ "nickname": "alice",
+ "groups": ["GROUP_1", "GROUP_2"],
+ }
+ from unittest.mock import MagicMock
- self.appbuilder = AppBuilder(self.app, self.db.session)
- claims = {
- "iss": "https://authentik.mydomain.com/application/o/flask-appbuilder-test/",
- "sub": "2ac1102e7cf5a4b1cb2dd5adbe4761c551691ecd88991f78d0195d4d3d0cfcfa",
- "aud": "CLIENT_ID",
- "exp": 1703257941,
- "iat": 1700665941,
- "auth_time": 7282182129, # 100 years from now ;)
- "acr": "goauthentik.io/providers/oauth2/default",
- "at_hash": "cAydO2DJMi_ZL6opx3eUdw",
- "email": "alice@example.com",
- "email_verified": True,
- "name": "Alice",
- "given_name": "Alice Doe",
- "preferred_username": "alice@example.com",
- "nickname": "alice",
- "groups": ["GROUP_1", "GROUP_2"],
- }
- from unittest.mock import MagicMock
-
- unsigned_jwt = jwt.encode(claims, key=None, algorithm="none")
- self.appbuilder.sm._get_authentik_jwks = MagicMock(return_value={})
- with self.assertRaises(InvalidLoginAttempt):
- self.appbuilder.sm.get_oauth_user_info(
- "authentik", {"access_token": "", "id_token": unsigned_jwt}
- )
+ unsigned_jwt = jwt.encode(claims, key=None, algorithm="none")
+ self.appbuilder.sm._get_authentik_jwks = MagicMock(return_value={})
+ with self.assertRaises(InvalidLoginAttempt):
+ self.appbuilder.sm.get_oauth_user_info(
+ "authentik", {"access_token": "", "id_token": unsigned_jwt}
+ )
diff --git a/tests/security/test_auth_remote_user.py b/tests/security/test_auth_remote_user.py
index ff5a851e60..008dbb2f17 100644
--- a/tests/security/test_auth_remote_user.py
+++ b/tests/security/test_auth_remote_user.py
@@ -1,75 +1,82 @@
import unittest
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
+from flask_appbuilder import AppBuilder
from flask_appbuilder.const import AUTH_REMOTE_USER
+from flask_appbuilder.utils.legacy import get_sqla_class
class AuthRemoteUserTestCase(unittest.TestCase):
def setUp(self):
- # start Flask
self.app = Flask(__name__)
self.app.config["AUTH_TYPE"] = AUTH_REMOTE_USER
-
- # start Database
- self.db = SQLA(self.app)
+ self.app.config.from_object("tests.config_api")
def tearDown(self):
- # Remove test user
- user_alice = self.appbuilder.sm.find_user("alice")
- if user_alice:
- self.db.session.delete(user_alice)
- self.db.session.commit()
-
- # stop Flask
- self.app = None
+ with self.app.app_context():
+ # Remove test user
+ user_alice = self.appbuilder.sm.find_user("alice")
+ if user_alice:
+ self.appbuilder.session.delete(user_alice)
+ self.appbuilder.session.commit()
- # stop Flask-AppBuilder
- self.appbuilder = None
+ # stop Flask
+ self.app = None
- # stop Database
- self.db.session.remove()
- self.db = None
+ # stop Flask-AppBuilder
+ self.appbuilder = None
def test_unset_remote_user_env_var(self):
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
- self.assertEqual(sm.auth_remote_user_env_var, "REMOTE_USER")
+ self.assertEqual(sm.auth_remote_user_env_var, "REMOTE_USER")
def test_set_remote_user_env_var(self):
- self.app.config["AUTH_REMOTE_USER_ENV_VAR"] = "HTTP_REMOTE_USER"
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
+ with self.app.app_context():
+ self.app.config["AUTH_REMOTE_USER_ENV_VAR"] = "HTTP_REMOTE_USER"
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
- self.assertEqual(sm.auth_remote_user_env_var, "HTTP_REMOTE_USER")
+ self.assertEqual(sm.auth_remote_user_env_var, "HTTP_REMOTE_USER")
def test_normal_login(self):
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
-
- # register a user
- _ = sm.add_user(
- username="alice",
- first_name="Alice",
- last_name="Doe",
- email="alice@example.com",
- role=[],
- )
-
- self.assertTrue(sm.auth_user_remote_user("alice"))
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+
+ # register a user
+ _ = sm.add_user(
+ username="alice",
+ first_name="Alice",
+ last_name="Doe",
+ email="alice@example.com",
+ role=[],
+ )
+
+ self.assertTrue(sm.auth_user_remote_user("alice"))
def test_inactive_user_login(self):
- self.appbuilder = AppBuilder(self.app, self.db.session)
- sm = self.appbuilder.sm
-
- # register a user
- alice_user = sm.add_user(
- username="alice",
- first_name="Alice",
- last_name="Doe",
- email="alice@example.com",
- role=[],
- )
- alice_user.active = False
- self.assertFalse(sm.auth_user_remote_user("alice"))
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ sm = self.appbuilder.sm
+
+ # register a user
+ alice_user = sm.add_user(
+ username="alice",
+ first_name="Alice",
+ last_name="Doe",
+ email="alice@example.com",
+ role=[],
+ )
+ alice_user.active = False
+ self.assertFalse(sm.auth_user_remote_user("alice"))
diff --git a/tests/security/test_mvc_security.py b/tests/security/test_mvc_security.py
index b0a6bcde45..3ff13a205b 100644
--- a/tests/security/test_mvc_security.py
+++ b/tests/security/test_mvc_security.py
@@ -110,6 +110,7 @@ def test_login_invalid_user(self):
"""
Test Security Login, Logout, invalid login, invalid access
"""
+ self.browser_logout(self.client)
test_username = "testuser"
test_password = "password"
test_user = self.create_user(
@@ -129,13 +130,13 @@ def test_login_invalid_user(self):
# Using the same session make sure the user is not allowed to access when
# the user is deactivated
test_user.active = False
- self.db.session.merge(test_user)
- self.db.session.commit()
+ self.appbuilder.session.merge(test_user)
+ self.appbuilder.session.commit()
rv = self.client.get("/model1view/list/")
self.assertEqual(rv.status_code, 302)
- self.db.session.delete(test_user)
- self.db.session.commit()
+ self.appbuilder.session.delete(test_user)
+ self.appbuilder.session.commit()
def test_db_login_no_next_url(self):
"""
@@ -523,12 +524,12 @@ def test_register_user_with_role(self):
data = rv.data.decode("utf-8")
self.assertIn("Added Row", data)
user = (
- self.db.session.query(User)
+ self.appbuilder.session.query(User)
.filter(User.username == "from test 1-1")
.one_or_none()
)
- self.db.session.delete(user)
- self.db.session.commit()
+ self.appbuilder.session.delete(user)
+ self.appbuilder.session.commit()
def test_register_user_with_group(self):
"""
@@ -559,13 +560,13 @@ def test_register_user_with_group(self):
data = rv.data.decode("utf-8")
self.assertIn("Added Row", data)
user = (
- self.db.session.query(User)
+ self.appbuilder.session.query(User)
.filter(User.username == "from test 1-1")
.one_or_none()
)
- self.db.session.delete(user)
- self.db.session.delete(group)
- self.db.session.commit()
+ self.appbuilder.session.delete(user)
+ self.appbuilder.session.delete(group)
+ self.appbuilder.session.commit()
def test_register_user_missing_roles_or_groups(self):
"""
@@ -634,14 +635,14 @@ def test_edit_user_with_role(self):
self.assertIn("Changed Row", data)
user = (
- self.db.session.query(User)
+ self.appbuilder.session.query(User)
.filter(User.username == _tmp_user.username)
.one_or_none()
)
assert user.email == "changed@changed.org"
- self.db.session.delete(user)
- self.db.session.commit()
+ self.appbuilder.session.delete(user)
+ self.appbuilder.session.commit()
def test_edit_user_with_group(self):
"""
@@ -680,14 +681,14 @@ def test_edit_user_with_group(self):
self.assertIn("Changed Row", data)
user = (
- self.db.session.query(User)
+ self.appbuilder.session.query(User)
.filter(User.username == _tmp_user.username)
.one_or_none()
)
assert user.email == "changed@changed.org"
- self.db.session.delete(user)
- self.db.session.commit()
+ self.appbuilder.session.delete(user)
+ self.appbuilder.session.commit()
def test_edit_user_email_validation(self):
"""
@@ -697,7 +698,7 @@ def test_edit_user_email_validation(self):
_ = self.browser_login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
read_ony_user: User = (
- self.db.session.query(User)
+ self.appbuilder.session.query(User)
.filter(User.username == USERNAME_READONLY)
.one_or_none()
)
@@ -728,7 +729,7 @@ def test_edit_user_db_fail(self):
_ = self.browser_login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
read_ony_user: User = (
- self.db.session.query(User)
+ self.appbuilder.session.query(User)
.filter(User.username == USERNAME_READONLY)
.one_or_none()
)
@@ -781,10 +782,12 @@ def test_add_group(self):
data = rv.data.decode("utf-8")
self.assertIn("Added Row", data)
group = (
- self.db.session.query(Group).filter(Group.name == "group1").one_or_none()
+ self.appbuilder.session.query(Group)
+ .filter(Group.name == "group1")
+ .one_or_none()
)
- self.db.session.delete(group)
- self.db.session.commit()
+ self.appbuilder.session.delete(group)
+ self.appbuilder.session.commit()
def test_add_group_unique_name(self):
"""
@@ -793,7 +796,7 @@ def test_add_group_unique_name(self):
client = self.app.test_client()
_ = self.browser_login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
group = self.create_group(self.appbuilder)
- self.db.session.refresh(group)
+ self.appbuilder.session.refresh(group)
rv = client.get("/groups/add", follow_redirects=True)
data = rv.data.decode("utf-8")
self.assertIn("Add Group", data)
@@ -809,8 +812,8 @@ def test_add_group_unique_name(self):
)
data = rv.data.decode("utf-8")
self.assertIn("Already exists.", data)
- self.db.session.delete(group)
- self.db.session.commit()
+ self.appbuilder.session.delete(group)
+ self.appbuilder.session.commit()
def test_delete_group(self):
"""
@@ -851,6 +854,6 @@ def test_delete_group_with_users(self):
data = rv.data.decode("utf-8")
self.assertIn("User(s) exists in the group, cannot delete", data)
assert self.appbuilder.sm.find_group(name="group1") is not None
- self.db.session.delete(user)
- self.db.session.delete(group)
- self.db.session.commit()
+ self.appbuilder.session.delete(user)
+ self.appbuilder.session.delete(group)
+ self.appbuilder.session.commit()
diff --git a/tests/security/test_rate_limiter.py b/tests/security/test_rate_limiter.py
index 554c353ebd..a285e1230d 100644
--- a/tests/security/test_rate_limiter.py
+++ b/tests/security/test_rate_limiter.py
@@ -1,14 +1,14 @@
import logging
from flask import Flask
-from flask_appbuilder import AppBuilder, BaseView, SQLA
+from flask_appbuilder import AppBuilder, BaseView
from flask_appbuilder.api import BaseApi, expose
from flask_appbuilder.security.decorators import limit
+from flask_appbuilder.utils.legacy import get_sqla_class
import hiro
import jinja2
from tests.base import FABTestCase
-
-from ..const import INVALID_LOGIN_STRING, PASSWORD_ADMIN, USERNAME_ADMIN
+from tests.const import INVALID_LOGIN_STRING, PASSWORD_ADMIN, USERNAME_ADMIN
class LimiterTestCase(FABTestCase):
@@ -21,8 +21,13 @@ def setUp(self):
self.app.config["AUTH_RATE_LIMIT"] = "2 per 5 second"
logging.basicConfig(level=logging.ERROR)
+ self.ctx = self.app.app_context()
+ self.ctx.push()
+
+ SQLA = get_sqla_class()
self.db = SQLA(self.app)
self.appbuilder = AppBuilder(self.app, self.db.session)
+ self.create_default_users(self.appbuilder)
class Base1Api(BaseApi):
@limit("2 per second")
diff --git a/tests/sqla/models.py b/tests/sqla/models.py
index fc485b22c5..ddaf1953f7 100644
--- a/tests/sqla/models.py
+++ b/tests/sqla/models.py
@@ -24,6 +24,7 @@ def validate_name(n):
class Model1(Model):
+ __tablename__ = "model1"
id = Column(Integer, primary_key=True)
field_string = Column(String(50), unique=True, nullable=False)
field_integer = Column(Integer())
@@ -54,6 +55,7 @@ class Model1CustomSchema(BaseModelSchema):
class Model2(Model):
+ __tablename__ = "model2"
id = Column(Integer, primary_key=True)
field_string = Column(String(50), unique=True, nullable=False)
field_integer = Column(Integer())
@@ -72,6 +74,7 @@ def field_method(self):
class Model3(Model):
+ __tablename__ = "model3"
pk1 = Column(Integer(), primary_key=True)
pk2 = Column(DateTime(), primary_key=True)
field_string = Column(String(50), unique=True, nullable=False)
@@ -81,6 +84,7 @@ def __repr__(self):
class Model4(Model):
+ __tablename__ = "model4"
id = Column(Integer(), primary_key=True)
field_string = Column(String(50), unique=True, nullable=False)
model1_1_id = Column(Integer, ForeignKey("model1.id"), nullable=False)
@@ -93,6 +97,7 @@ def __repr__(self):
class ModelWithProperty(Model):
+ __tablename__ = "model_with_property"
id = Column(Integer, primary_key=True)
field_string = Column(String(50), unique=True, nullable=False)
@@ -108,6 +113,7 @@ class TmpEnum(enum.Enum):
class ModelWithEnums(Model):
+ __tablename__ = "model_with_enums"
id = Column(Integer, primary_key=True)
enum1 = Column(Enum("e1", "e2", "e3", "e4", name="enum1"))
enum2 = Column(Enum(TmpEnum))
@@ -172,6 +178,7 @@ class ModelOMParent(Model):
class ModelOMChild(Model):
+ __tablename__ = "model_om_child"
id = Column(Integer, primary_key=True)
field_string = Column(String(50), unique=True, nullable=False)
parent_id = Column(Integer, ForeignKey("model_om_parent.id"))
@@ -190,6 +197,7 @@ class ModelOOParent(Model):
class ModelOOChild(Model):
+ __tablename__ = "model_oo_child"
id = Column(Integer, primary_key=True)
field_string = Column(String(50), unique=True, nullable=False)
parent_id = Column(Integer, ForeignKey("model_oo_parent.id"))
diff --git a/tests/test_addon.py b/tests/test_addon.py
index 5c17b98339..b6d6b9e546 100644
--- a/tests/test_addon.py
+++ b/tests/test_addon.py
@@ -1,11 +1,9 @@
import logging
import os
-from flask_appbuilder import SQLA
+from tests.base import FABTestCase
from tests.fixtures.addon_manager import DummyAddOnManager
-from .base import FABTestCase
-
log = logging.getLogger(__name__)
@@ -14,6 +12,7 @@ class FlaskTestCase(FABTestCase):
def setUp(self):
from flask import Flask
from flask_appbuilder import AppBuilder
+ from flask_appbuilder.utils.legacy import get_sqla_class
self.app = Flask(__name__)
self.basedir = os.path.abspath(os.path.dirname(__file__))
@@ -21,11 +20,14 @@ def setUp(self):
self.app.config["ADDON_MANAGERS"] = [
"tests.fixtures.addon_manager.DummyAddOnManager"
]
-
+ self.ctx = self.app.app_context()
+ self.ctx.push()
+ SQLA = get_sqla_class()
self.db = SQLA(self.app)
self.appbuilder = AppBuilder(self.app, self.db.session)
def tearDown(self):
+ self.ctx.pop()
self.appbuilder = None
self.app = None
self.db = None
diff --git a/tests/test_api.py b/tests/test_api.py
index a0b18ef194..3aa1bb6f85 100644
--- a/tests/test_api.py
+++ b/tests/test_api.py
@@ -2,7 +2,7 @@
import logging
import os
-from flask_appbuilder import ModelRestApi, SQLA
+from flask_appbuilder import ModelRestApi
from flask_appbuilder.const import (
API_ADD_COLUMNS_RES_KEY,
API_ADD_COLUMNS_RIS_KEY,
@@ -34,6 +34,7 @@
from flask_appbuilder.hooks import before_request
from flask_appbuilder.models.sqla.filters import FilterGreater, FilterSmaller
from flask_appbuilder.models.sqla.interface import SQLAInterface
+from flask_appbuilder.utils.legacy import get_sqla_class
import prison
from sqlalchemy.sql.expression import func
from tests.base import FABTestCase
@@ -86,12 +87,20 @@ def setUp(self):
self.app.config.from_object("tests.config_api")
self.app.config["WTF_CSRF_ENABLED"] = True
+ self.ctx = self.app.app_context()
+ self.ctx.push()
self.csrf = CSRFProtect(self.app)
+ SQLA = get_sqla_class()
self.db = SQLA(self.app)
self.appbuilder = AppBuilder(self.app, self.db.session)
-
self.create_default_users(self.appbuilder)
+ def tearDown(self):
+ self.appbuilder = None
+ self.ctx.pop()
+ self.ctx = None
+ self.app = None
+
def test_auth_login(self):
"""
REST Api: Test auth login CSRF
@@ -123,15 +132,23 @@ def setUp(self):
self.app = Flask(__name__)
self.app.config.from_object("tests.config_api")
self.app.config["FAB_ADD_SECURITY_VIEWS"] = False
-
+ self.ctx = self.app.app_context()
+ self.ctx.push()
+ SQLA = get_sqla_class()
self.db = SQLA(self.app)
self.appbuilder = AppBuilder(self.app, self.db.session)
+ def tearDown(self):
+ self.appbuilder = None
+ self.ctx.pop()
+ self.ctx = None
+ self.app = None
+
def test_disabled_security_views(self):
"""
REST Api: Test disabled security views
"""
- for rule in self.appbuilder.get_app.url_map.iter_rules():
+ for rule in self.app.url_map.iter_rules():
self.assertIn(rule.endpoint, self.base_fab_endpoint)
@@ -146,14 +163,23 @@ def setUp(self):
self.app.config.from_object("tests.config_api")
self.app.config["FAB_ADD_OPENAPI_VIEWS"] = False
+ self.ctx = self.app.app_context()
+ self.ctx.push()
+ SQLA = get_sqla_class()
self.db = SQLA(self.app)
self.appbuilder = AppBuilder(self.app, self.db.session)
+ def tearDown(self):
+ self.appbuilder = None
+ self.ctx.pop()
+ self.ctx = None
+ self.app = None
+
def test_disabled_security_views(self):
"""
REST Api: Test disabled OpenApi views
"""
- for rule in self.appbuilder.get_app.url_map.iter_rules():
+ for rule in self.app.url_map.iter_rules():
self.assertNotIn(rule.endpoint, self.openapi_fab_endpoint)
@@ -177,6 +203,9 @@ def setUp(self):
self.app.config.from_object("tests.config_api")
self.app.config["FAB_API_MAX_PAGE_SIZE"] = MAX_PAGE_SIZE
+ self.ctx = self.app.app_context()
+ self.ctx.push()
+ SQLA = get_sqla_class()
self.db = SQLA(self.app)
self.appbuilder = AppBuilder(self.app, self.db.session)
@@ -483,9 +512,11 @@ def update(self):
self.appbuilder.add_api(Model1BeforeRequest)
def tearDown(self):
- self.appbuilder.get_session.close()
- engine = self.db.session.get_bind(mapper=None, clause=None)
- engine.dispose()
+ self.appbuilder.session.close()
+ self.appbuilder = None
+ self.ctx.pop()
+ self.ctx = None
+ self.app = None
def test_babel(self):
"""
@@ -680,7 +711,7 @@ def test_auth_authorization(self):
# Test authorized GET
with model1_data(self.appbuilder.session, 1):
- model = self.appbuilder.get_session.query(Model1).first()
+ model = self.appbuilder.session.query(Model1).first()
model_id = model.id
uri = f"api/v1/model1apirestrictedpermissions/{model_id}"
rv = self.auth_client_get(client, token, uri)
@@ -1744,7 +1775,7 @@ def test_get_list_filters_m_m(self):
"""
REST Api: Test get list filter params with many to many
"""
- session = self.appbuilder.get_session
+ session = self.appbuilder.session
child = ModelMMChild()
child.field_string = "test_child_tmp"
@@ -1870,7 +1901,7 @@ def test_get_list_multiple_search_filters(self):
"""
REST Api: Test get list multiple search filters
"""
- session = self.appbuilder.get_session
+ session = self.appbuilder.session
model1_1 = Model1(field_string="abc", field_integer=6)
session.add(model1_1)
session.commit()
@@ -1916,7 +1947,7 @@ def test_get_list_custom_search_filters(self):
"""
REST Api: Test get list custom filters
"""
- session = self.appbuilder.get_session
+ session = self.appbuilder.session
model1_1 = Model1(field_string="abc", field_integer=2)
# Custom filter will get this next model (not like 'test' and field_integer=1)
model1_2 = Model1(field_string="abcd", field_integer=1)
@@ -2325,7 +2356,7 @@ def test_delete_item(self):
with model2_data(self.appbuilder.session, 3):
model = (
- self.appbuilder.get_session.query(Model2)
+ self.appbuilder.session.query(Model2)
.filter_by(field_string="test2")
.one_or_none()
)
@@ -2333,7 +2364,7 @@ def test_delete_item(self):
uri = f"api/v1/model2api/{model_id}"
rv = self.auth_client_delete(client, token, uri)
self.assertEqual(rv.status_code, 200)
- model = self.db.session.query(Model2).get(model_id)
+ model = self.appbuilder.session.query(Model2).get(model_id)
self.assertEqual(model, None)
def test_delete_item_integrity(self):
@@ -2341,7 +2372,7 @@ def test_delete_item_integrity(self):
REST Api: Test delete item integrity
"""
# SQLLite does not support constraints by default
- engine_type = self.appbuilder.get_session.bind.dialect.name
+ engine_type = self.appbuilder.session.get_bind().name
if engine_type == "sqlite":
return
client = self.app.test_client()
@@ -2349,7 +2380,7 @@ def test_delete_item_integrity(self):
with model2_data(self.appbuilder.session, 1):
model = (
- self.appbuilder.get_session.query(Model1)
+ self.appbuilder.session.query(Model1)
.filter_by(field_string="test0")
.one_or_none()
)
@@ -2358,7 +2389,7 @@ def test_delete_item_integrity(self):
rv = self.auth_client_delete(client, token, uri)
self.assertEqual(rv.status_code, 422)
- model = self.db.session.query(Model1).get(pk)
+ model = self.appbuilder.session.query(Model1).get(pk)
self.assertIsNotNone(model)
def test_delete_item_not_found(self):
@@ -2369,7 +2400,7 @@ def test_delete_item_not_found(self):
token = self.login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
with model1_data(self.appbuilder.session, 2):
- max_id = self.appbuilder.get_session.query(func.max(Model1.id)).scalar()
+ max_id = self.appbuilder.session.query(func.max(Model1.id)).scalar()
pk = max_id + 1
uri = f"api/v1/model1api/{pk}"
rv = self.auth_client_delete(client, token, uri)
@@ -2384,7 +2415,7 @@ def test_delete_item_base_filters(self):
with model1_data(self.appbuilder.session, 4):
model = (
- self.appbuilder.get_session.query(Model1)
+ self.appbuilder.session.query(Model1)
.filter_by(field_integer=2)
.one_or_none()
)
@@ -2403,7 +2434,7 @@ def test_update_item(self):
token = self.login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
with model1_data(self.appbuilder.session, 3):
model1 = (
- self.appbuilder.get_session.query(Model1)
+ self.appbuilder.session.query(Model1)
.filter_by(field_string="test2")
.one_or_none()
)
@@ -2412,7 +2443,7 @@ def test_update_item(self):
uri = f"api/v1/model1api/{model_id}"
rv = self.auth_client_put(client, token, uri, item)
self.assertEqual(rv.status_code, 200)
- model = self.db.session.query(Model1).get(model_id)
+ model = self.appbuilder.session.get(Model1, model_id)
self.assertEqual(model.field_string, "test_Put")
self.assertEqual(model.field_integer, 0)
self.assertEqual(model.field_float, 0.0)
@@ -2425,7 +2456,7 @@ def test_update_custom_validation(self):
token = self.login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
with model1_data(self.appbuilder.session, 3):
model1 = (
- self.appbuilder.get_session.query(Model1)
+ self.appbuilder.session.query(Model1)
.filter_by(field_string="test2")
.one_or_none()
)
@@ -2443,7 +2474,7 @@ def test_update_item_custom_schema(self):
"""
REST Api: Test update item custom schema
"""
- from .sqla.models import Model1CustomSchema
+ from tests.sqla.models import Model1CustomSchema
class Model1ApiCustomSchema(self.model1api):
edit_model_schema = Model1CustomSchema()
@@ -2481,7 +2512,7 @@ class Model1ApiCustomSchema(self.model1api):
self.assertEqual(rv.status_code, 200)
model = (
- self.db.session.query(Model1)
+ self.appbuilder.session.query(Model1)
.filter_by(field_string="Atest{}".format(MODEL1_DATA_SIZE + 1))
.first()
)
@@ -2497,7 +2528,7 @@ def test_update_item_base_filters(self):
token = self.login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
with model1_data(self.appbuilder.session, 4):
model1 = (
- self.appbuilder.get_session.query(Model1)
+ self.appbuilder.session.query(Model1)
.filter_by(field_integer=3)
.one_or_none()
)
@@ -2506,14 +2537,14 @@ def test_update_item_base_filters(self):
uri = f"api/v1/model1apifiltered/{model_id}"
rv = self.auth_client_put(client, token, uri, item)
self.assertEqual(rv.status_code, 200)
- model = self.db.session.query(Model1).get(model_id)
+ model = self.appbuilder.session.query(Model1).get(model_id)
self.assertEqual(model.field_string, "test_Put")
self.assertEqual(model.field_integer, 3)
self.assertEqual(model.field_float, 3.0)
# We can't update an item that is base filtered
model1 = (
- self.appbuilder.get_session.query(Model1)
+ self.appbuilder.session.query(Model1)
.filter_by(field_integer=1)
.one_or_none()
)
@@ -2530,7 +2561,7 @@ def test_update_item_not_found(self):
token = self.login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
with model1_data(self.appbuilder.session, 2):
- max_id = self.appbuilder.get_session.query(func.max(Model1.id)).scalar()
+ max_id = self.appbuilder.session.query(func.max(Model1.id)).scalar()
model_id = max_id + 1
item = dict(field_string="test_Put", field_integer=0, field_float=0.0)
uri = f"api/v1/model1api/{model_id}"
@@ -2546,7 +2577,7 @@ def test_update_val_size(self):
with model1_data(self.appbuilder.session, 2):
model1 = (
- self.appbuilder.get_session.query(Model1)
+ self.appbuilder.session.query(Model1)
.filter_by(field_string="test0")
.one_or_none()
)
@@ -2565,7 +2596,7 @@ def test_update_mm_field(self):
"""
REST Api: Test update m-m field
"""
- session = self.appbuilder.get_session
+ session = self.appbuilder.session
with model_mm_parent_data(session, 1):
model_id = session.query(ModelMMParent).first().id
@@ -2601,7 +2632,7 @@ def test_update_item_val_type(self):
with model1_data(self.appbuilder.session, 2):
model1 = (
- self.appbuilder.get_session.query(Model1)
+ self.appbuilder.session.query(Model1)
.filter_by(field_string="test0")
.one_or_none()
)
@@ -2634,7 +2665,7 @@ def test_update_item_excluded_cols(self):
with model1_data(self.appbuilder.session, 2):
model1 = (
- self.appbuilder.get_session.query(Model1)
+ self.appbuilder.session.query(Model1)
.filter_by(field_string="test0")
.one_or_none()
)
@@ -2643,7 +2674,7 @@ def test_update_item_excluded_cols(self):
uri = f"api/v1/model1apiexcludecols/{model_id}"
rv = self.auth_client_put(client, token, uri, item)
self.assertEqual(rv.status_code, 200)
- model = self.db.session.query(Model1).get(model_id)
+ model = self.appbuilder.session.query(Model1).get(model_id)
self.assertEqual(model.field_integer, 0)
self.assertEqual(model.field_float, 0.0)
self.assertEqual(model.field_date, None)
@@ -2673,7 +2704,9 @@ def test_create_item(self):
self.assertEqual(rv.status_code, 201)
self.assertEqual(data[API_RESULT_RES_KEY], item)
model = (
- self.db.session.query(Model1).filter_by(field_string="test4").first()
+ self.appbuilder.session.query(Model1)
+ .filter_by(field_string="test4")
+ .first()
)
self.assertEqual(model.field_string, "test4")
self.assertEqual(model.field_integer, 4)
@@ -2730,16 +2763,16 @@ def test_create_item_custom_validation(self):
self.assertEqual(rv.status_code, 201)
# Revert test data
- self.appbuilder.get_session.query(Model1).filter_by(
+ self.appbuilder.session.query(Model1).filter_by(
field_string=f"A{MODEL1_DATA_SIZE + 1}"
).delete()
- self.appbuilder.get_session.commit()
+ self.appbuilder.session.commit()
def test_create_item_custom_schema(self):
"""
REST Api: Test create item custom schema
"""
- from .sqla.models import Model1CustomSchema
+ from tests.sqla.models import Model1CustomSchema
class Model1ApiCustomSchema(self.model1api):
add_model_schema = Model1CustomSchema()
@@ -2775,7 +2808,7 @@ class Model1ApiCustomSchema(self.model1api):
self.assertEqual(rv.status_code, 201)
model = (
- self.db.session.query(Model1)
+ self.appbuilder.session.query(Model1)
.filter_by(field_string="Atest{}".format(MODEL1_DATA_SIZE + 1))
.first()
)
@@ -2784,8 +2817,8 @@ class Model1ApiCustomSchema(self.model1api):
self.assertEqual(model.field_float, float(MODEL1_DATA_SIZE + 1))
# Revert data changes
- self.appbuilder.get_session.delete(model)
- self.appbuilder.get_session.commit()
+ self.appbuilder.session.delete(model)
+ self.appbuilder.session.commit()
def test_create_item_val_size(self):
"""
@@ -2846,7 +2879,7 @@ def test_create_item_excluded_cols(self):
rv = self.auth_client_post(client, token, uri, item)
self.assertEqual(rv.status_code, 201)
model = (
- self.db.session.query(Model1)
+ self.appbuilder.session.query(Model1)
.filter_by(field_string=f"test{MODEL1_DATA_SIZE + 1}")
.first()
)
@@ -2865,13 +2898,13 @@ def test_create_item_excluded_cols(self):
self.assertEqual(data, expected_response)
# Revert test data
- self.appbuilder.get_session.query(Model1).filter_by(
+ self.appbuilder.session.query(Model1).filter_by(
field_string=f"test{MODEL1_DATA_SIZE + 1}"
).delete()
- self.appbuilder.get_session.query(Model1).filter_by(
+ self.appbuilder.session.query(Model1).filter_by(
field_string=f"test{MODEL1_DATA_SIZE + 2}"
).delete()
- self.appbuilder.get_session.commit()
+ self.appbuilder.session.commit()
def test_list_items_with_enum(self):
"""
@@ -2896,7 +2929,7 @@ def test_get_item_with_enums(self):
"""
with model_with_enums_data(self.appbuilder.session, 1):
model1 = (
- self.appbuilder.get_session.query(ModelWithEnums)
+ self.appbuilder.session.query(ModelWithEnums)
.filter(ModelWithEnums.enum1 == "e1")
.first()
)
@@ -2950,15 +2983,13 @@ def test_create_item_with_enum(self):
rv = self.auth_client_post(client, token, uri, item)
data = json.loads(rv.data.decode("utf-8"))
self.assertEqual(rv.status_code, 201)
- model = self.db.session.query(ModelWithEnums).get(data["id"])
+ model = self.appbuilder.session.query(ModelWithEnums).get(data["id"])
self.assertEqual(model.enum1, "e1")
self.assertEqual(model.enum2, TmpEnum.e1)
# Revert test data
- self.appbuilder.get_session.query(ModelWithEnums).filter_by(
- id=data["id"]
- ).delete()
- self.appbuilder.get_session.commit()
+ self.appbuilder.session.query(ModelWithEnums).filter_by(id=data["id"]).delete()
+ self.appbuilder.session.commit()
def test_create_item_with_enum_validation(self):
"""
@@ -3027,18 +3058,18 @@ def test_create_item_mm_field(self):
# Rollback data changes
model1 = (
- self.appbuilder.get_session.query(ModelMMParent)
+ self.appbuilder.session.query(ModelMMParent)
.filter_by(field_string="new1")
.one_or_none()
)
model2 = (
- self.appbuilder.get_session.query(ModelMMParent)
+ self.appbuilder.session.query(ModelMMParent)
.filter_by(field_string="new2")
.one_or_none()
)
- self.appbuilder.get_session.delete(model1)
- self.appbuilder.get_session.delete(model2)
- self.appbuilder.get_session.commit()
+ self.appbuilder.session.delete(model1)
+ self.appbuilder.session.delete(model2)
+ self.appbuilder.session.commit()
def test_create_item_om_field(self):
"""
@@ -3048,9 +3079,9 @@ def test_create_item_om_field(self):
token = self.login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
child1 = ModelOMChild(field_string="child1")
child2 = ModelOMChild(field_string="child2")
- self.appbuilder.get_session.add(child1)
- self.appbuilder.get_session.add(child2)
- self.appbuilder.get_session.commit()
+ self.appbuilder.session.add(child1)
+ self.appbuilder.session.add(child2)
+ self.appbuilder.session.commit()
item = dict(field_string="new1", children=[child1.id, child2.id])
uri = "api/v1/modelomparentapi/"
@@ -3063,13 +3094,13 @@ def test_create_item_om_field(self):
)
# Rollback data changes
model1 = (
- self.appbuilder.get_session.query(ModelOMParent)
+ self.appbuilder.session.query(ModelOMParent)
.filter_by(field_string="new1")
.one_or_none()
)
- self.appbuilder.get_session.delete(model1)
- self.appbuilder.get_session.commit()
+ self.appbuilder.session.delete(model1)
+ self.appbuilder.session.commit()
def test_get_list_col_function(self):
"""
@@ -3245,10 +3276,10 @@ class Model2PermOverride2(ModelRestApi):
self.assertEqual(rv.status_code, 403)
# Revert test data
- self.db.session.delete(user)
- self.db.session.commit()
- self.appbuilder.get_session.delete(self.appbuilder.sm.find_role("Test"))
- self.appbuilder.get_session.commit()
+ self.appbuilder.session.delete(user)
+ self.appbuilder.session.commit()
+ self.appbuilder.session.delete(self.appbuilder.sm.find_role("Test"))
+ self.appbuilder.session.commit()
def test_base_permission_override(self):
"""
@@ -3340,9 +3371,9 @@ class Model1PermConverge(ModelRestApi):
self.assertEqual(len(role.permissions), 1)
# Revert test data
- self.appbuilder.get_session.delete(user)
- self.appbuilder.get_session.delete(self.appbuilder.sm.find_role("Test"))
- self.appbuilder.get_session.commit()
+ self.appbuilder.session.delete(user)
+ self.appbuilder.session.delete(self.appbuilder.sm.find_role("Test"))
+ self.appbuilder.session.commit()
def test_permission_converge_expand(self):
"""
@@ -3402,8 +3433,8 @@ class Model1PermConverge(ModelRestApi):
role = self.appbuilder.sm.find_role("Test")
self.assertEqual(len(role.permissions), 5)
- self.db.session.delete(user)
- self.db.session.commit()
+ self.appbuilder.session.delete(user)
+ self.appbuilder.session.commit()
def test_before_request(self):
"""
diff --git a/tests/test_custom_indexview.py b/tests/test_custom_indexview.py
index a575bebac5..15113960fb 100644
--- a/tests/test_custom_indexview.py
+++ b/tests/test_custom_indexview.py
@@ -1,9 +1,9 @@
import logging
import os
-from flask_appbuilder import IndexView, SQLA
-
-from .base import FABTestCase
+from flask_appbuilder import AppBuilder, IndexView
+from flask_appbuilder.utils.legacy import get_sqla_class
+from tests.base import FABTestCase
log = logging.getLogger(__name__)
@@ -15,7 +15,6 @@ class CustomIndexView(IndexView):
class FlaskTestCase(FABTestCase):
def setUp(self):
from flask import Flask
- from flask_appbuilder import AppBuilder
self.app = Flask(__name__, template_folder=".")
self.basedir = os.path.abspath(os.path.dirname(__file__))
@@ -24,23 +23,18 @@ def setUp(self):
"FAB_INDEX_VIEW"
] = "tests.test_custom_indexview.CustomIndexView"
- self.db = SQLA(self.app)
- self.appbuilder = AppBuilder(self.app, self.db.session)
-
- def tearDown(self):
- self.appbuilder = None
- self.app = None
- self.db = None
- log.debug("TEAR DOWN")
-
def test_custom_indexview(self):
"""
Test custom index view.
"""
uri = "/"
- client = self.app.test_client()
- rv = client.get(uri)
-
- self.assertEqual(rv.status_code, 200)
- data = rv.data.decode("utf-8")
- self.assertIn("This is a custom index view.", data)
+ with self.app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, db.session)
+ client = self.app.test_client()
+ rv = client.get(uri)
+
+ self.assertEqual(rv.status_code, 200)
+ data = rv.data.decode("utf-8")
+ self.assertIn("This is a custom index view.", data)
diff --git a/tests/test_fab_cli.py b/tests/test_fab_cli.py
index 2691d936dd..7e023d33b7 100644
--- a/tests/test_fab_cli.py
+++ b/tests/test_fab_cli.py
@@ -3,24 +3,25 @@
import logging
import os
import tempfile
+from typing import List
from unittest.mock import ANY, patch
from click.testing import CliRunner
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
+from flask_appbuilder import AppBuilder
from flask_appbuilder.cli import (
cast_int_like_to_int,
create_app,
- create_permissions,
- create_user,
+ # create_permissions,
+ # create_user,
export_roles,
import_roles,
- list_users,
- list_views,
- reset_password,
+ # list_users,
+ # list_views,
+ # reset_password,
)
-
-from .base import FABTestCase
+from flask_appbuilder.utils.legacy import get_sqla_class
+from tests.base import FABTestCase
logging.basicConfig(format="%(asctime)s:%(levelname)s:%(name)s:%(message)s")
logging.getLogger().setLevel(logging.DEBUG)
@@ -68,42 +69,53 @@ def test_create_app(self):
],
)
self.assertIn("Downloaded the skeleton app, good coding!", result.output)
- os.chdir(APP_DIR)
- result = runner.invoke(
- create_user,
- [
- "--username=bob",
- "--role=Public",
- "--firstname=Bob",
- "--lastname=Smith",
- "--email=bob@fab.com",
- "--password=foo",
- ],
- )
- log.info(result.output)
- self.assertIn("User bob created.", result.output)
-
- result = runner.invoke(list_users, [])
- self.assertIn("bob", result.output)
-
- runner.invoke(create_permissions, [])
-
- runner.invoke(reset_password, ["--username=bob", "--password=bar"])
+ # os.chdir(APP_DIR)
+ # result = runner.invoke(
+ # create_user,
+ # [
+ # "--username=bob",
+ # "--role=Public",
+ # "--firstname=Bob",
+ # "--lastname=Smith",
+ # "--email=bob@fab.com",
+ # "--password=foo",
+ # ],
+ # )
+ # log.info(result.output)
+ # self.assertIn("User bob created.", result.output)
+ #
+ # result = runner.invoke(list_users, [])
+ # self.assertIn("bob", result.output)
+ #
+ # runner.invoke(create_permissions, [])
+ #
+ # runner.invoke(reset_password, ["--username=bob", "--password=bar"])
test_create_app.needs_inet = True
- def test_list_views(self):
- """
- CLI: Test list views
- """
- os.environ["FLASK_APP"] = "app:app"
- runner = CliRunner()
- with runner.isolated_filesystem():
- result = runner.invoke(list_views, [])
- self.assertIn("List of registered views", result.output)
- self.assertIn(" Route:/api/v1/security", result.output)
-
- test_list_views.needs_inet = True
+ # def test_list_views(self):
+ # """
+ # CLI: Test list views
+ # """
+ # os.environ["FLASK_APP"] = "app:app"
+ # runner = CliRunner()
+ # with runner.isolated_filesystem():
+ # result = runner.invoke(
+ # create_app,
+ # [
+ # f"--name={APP_DIR}",
+ # "--engine=SQLAlchemy",
+ # f"--secret-key={10*'SECRET'}",
+ # ],
+ # )
+ # self.assertIn("Downloaded the skeleton app, good coding!", result.output)
+ # os.chdir(APP_DIR)
+ #
+ # result = runner.invoke(list_views, [])
+ # self.assertIn("List of registered views", result.output)
+ # self.assertIn(" Route:/api/v1/security", result.output)
+ #
+ # test_list_views.needs_inet = True
def test_cast_int_like_to_int(self):
scenarii = {
@@ -132,74 +144,75 @@ def setUp(self):
def test_export_roles(self):
with tempfile.TemporaryDirectory() as tmp_dir:
app = Flask("src_app")
- app.config.from_object("tests.config_security")
- app.config[
- "SQLALCHEMY_DATABASE_URI"
- ] = f"sqlite:///{os.path.join(tmp_dir, 'src.db')}"
- db = SQLA(app)
- app_builder = AppBuilder(app, db.session) # noqa: F841
- cli_runner = app.test_cli_runner()
+ app.config.from_object("tests.config_security_cli")
+ with app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(app)
+ app_builder = AppBuilder(app, db.session) # noqa: F841
+ cli_runner = app.test_cli_runner()
+
+ path = os.path.join(tmp_dir, "roles.json")
+
+ export_result = cli_runner.invoke(export_roles, [f"--path={path}"])
- path = os.path.join(tmp_dir, "roles.json")
-
- export_result = cli_runner.invoke(export_roles, [f"--path={path}"])
-
- self.assertEqual(export_result.exit_code, 0)
- self.assertTrue(os.path.exists(path))
-
- with open(path, "r") as fd:
- resulting_roles = json.loads(fd.read())
-
- for expected_role in self.expected_roles:
- match = [
- r for r in resulting_roles if r["name"] == expected_role["name"]
- ]
- self.assertTrue(match)
- resulting_role = match[0]
- resulting_role_permission_view_menus = {
- (pvm["permission"]["name"], pvm["view_menu"]["name"])
- for pvm in resulting_role["permissions"]
- }
- expected_role_permission_view_menus = {
- (pvm["permission"]["name"], pvm["view_menu"]["name"])
- for pvm in expected_role["permissions"]
- }
- self.assertEqual(
- resulting_role_permission_view_menus,
- expected_role_permission_view_menus,
+ self.assertEqual(export_result.exit_code, 0)
+ self.assertTrue(os.path.exists(path))
+
+ with open(path, "r") as fd:
+ resulting_roles: List = json.loads(fd.read())
+ # sort to get consistent order and consistent tests
+ self.expected_roles = sorted(
+ self.expected_roles, key=lambda role_name: role_name["name"]
+ )
+ resulting_roles = sorted(
+ resulting_roles, key=lambda role_name: role_name["name"]
)
+ for expected_role in self.expected_roles:
+ match = [
+ r for r in resulting_roles if r["name"] == expected_role["name"]
+ ]
+ self.assertTrue(match)
+ resulting_role = match[0]
+ resulting_role_permission_view_menus = {
+ (pvm["permission"]["name"], pvm["view_menu"]["name"])
+ for pvm in resulting_role["permissions"]
+ }
+ expected_role_permission_view_menus = {
+ (pvm["permission"]["name"], pvm["view_menu"]["name"])
+ for pvm in expected_role["permissions"]
+ }
+ self.assertEqual(
+ resulting_role_permission_view_menus,
+ expected_role_permission_view_menus,
+ )
def test_export_roles_filename(self):
with tempfile.TemporaryDirectory() as tmp_dir:
app = Flask("src_app")
- app.config.from_object("tests.config_security")
-
- app.config[
- "SQLALCHEMY_DATABASE_URI"
- ] = f"sqlite:///{os.path.join(tmp_dir, 'src.db')}"
- db = SQLA(app)
- app_builder = AppBuilder(app, db.session) # noqa: F841
-
- owd = os.getcwd()
- os.chdir(tmp_dir)
- cli_runner = app.test_cli_runner()
- export_result = cli_runner.invoke(export_roles)
- os.chdir(owd)
-
- self.assertEqual(export_result.exit_code, 0)
- self.assertGreater(
- len(glob.glob(os.path.join(tmp_dir, "roles_export_*"))), 0
- )
+ app.config.from_object("tests.config_security_cli")
+ with app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(app)
+ app_builder = AppBuilder(app, db.session) # noqa: F841
+
+ owd = os.getcwd()
+ os.chdir(tmp_dir)
+ cli_runner = app.test_cli_runner()
+ export_result = cli_runner.invoke(export_roles)
+ os.chdir(owd)
+
+ self.assertEqual(export_result.exit_code, 0)
+ self.assertGreater(
+ len(glob.glob(os.path.join(tmp_dir, "roles_export_*"))), 0
+ )
@patch("json.dumps")
def test_export_roles_indent(self, mock_json_dumps):
"""Test that json.dumps is called with the correct argument passed from CLI."""
- with tempfile.TemporaryDirectory() as tmp_dir:
- app = Flask("src_app")
- app.config.from_object("tests.config_security")
- app.config[
- "SQLALCHEMY_DATABASE_URI"
- ] = f"sqlite:///{os.path.join(tmp_dir, 'src.db')}"
+ app = Flask("src_app")
+ app.config.from_object("tests.config_security_cli")
+ with app.app_context():
+ SQLA = get_sqla_class()
db = SQLA(app)
app_builder = AppBuilder(app, db.session) # noqa: F841
cli_runner = app.test_cli_runner()
@@ -220,37 +233,41 @@ def test_import_roles(self):
app.config[
"SQLALCHEMY_DATABASE_URI"
] = f"sqlite:///{os.path.join(tmp_dir, 'dst.db')}"
- db = SQLA(app)
- app_builder = AppBuilder(app, db.session)
- cli_runner = app.test_cli_runner()
-
- path = os.path.join(tmp_dir, "roles.json")
-
- with open(path, "w") as fd:
- fd.write(json.dumps(self.expected_roles))
-
- # before import roles on dst app include only Admin and Public
- self.assertEqual(len(app_builder.sm.get_all_roles()), 2)
-
- import_result = cli_runner.invoke(import_roles, [f"--path={path}"])
- self.assertEqual(import_result.exit_code, 0)
-
- resulting_roles = app_builder.sm.get_all_roles()
-
- for expected_role in self.expected_roles:
- match = [r for r in resulting_roles if r.name == expected_role["name"]]
- self.assertTrue(match)
- resulting_role = match[0]
-
- expected_role_permission_view_menus = {
- (pvm["permission"]["name"], pvm["view_menu"]["name"])
- for pvm in expected_role["permissions"]
- }
- resulting_role_permission_view_menus = {
- (pvm.permission.name, pvm.view_menu.name)
- for pvm in resulting_role.permissions
- }
- self.assertEqual(
- resulting_role_permission_view_menus,
- expected_role_permission_view_menus,
- )
+ with app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(app)
+ app_builder = AppBuilder(app, db.session)
+ cli_runner = app.test_cli_runner()
+
+ path = os.path.join(tmp_dir, "roles.json")
+
+ with open(path, "w") as fd:
+ fd.write(json.dumps(self.expected_roles))
+
+ # before import roles on dst app include only Admin and Public
+ self.assertEqual(len(app_builder.sm.get_all_roles()), 2)
+
+ import_result = cli_runner.invoke(import_roles, [f"--path={path}"])
+ self.assertEqual(import_result.exit_code, 0)
+
+ resulting_roles = app_builder.sm.get_all_roles()
+
+ for expected_role in self.expected_roles:
+ match = [
+ r for r in resulting_roles if r.name == expected_role["name"]
+ ]
+ self.assertTrue(match)
+ resulting_role = match[0]
+
+ expected_role_permission_view_menus = {
+ (pvm["permission"]["name"], pvm["view_menu"]["name"])
+ for pvm in expected_role["permissions"]
+ }
+ resulting_role_permission_view_menus = {
+ (pvm.permission.name, pvm.view_menu.name)
+ for pvm in resulting_role.permissions
+ }
+ self.assertEqual(
+ resulting_role_permission_view_menus,
+ expected_role_permission_view_menus,
+ )
diff --git a/tests/test_menu.py b/tests/test_menu.py
index a92e80e080..458239ccb5 100644
--- a/tests/test_menu.py
+++ b/tests/test_menu.py
@@ -1,12 +1,10 @@
import logging
import os
-from flask_appbuilder import SQLA
from flask_appbuilder.models.sqla.interface import SQLAInterface
-
-from .base import FABTestCase
-from .const import MAX_PAGE_SIZE, PASSWORD_ADMIN, USERNAME_ADMIN
-from .sqla.models import Model1
+from tests.base import FABTestCase
+from tests.const import MAX_PAGE_SIZE, PASSWORD_ADMIN, USERNAME_ADMIN
+from tests.sqla.models import Model1
log = logging.getLogger(__name__)
@@ -15,6 +13,7 @@ class FlaskTestCase(FABTestCase):
def setUp(self):
from flask import Flask
from flask_appbuilder import AppBuilder
+ from flask_appbuilder.utils.legacy import get_sqla_class
from flask_appbuilder.views import ModelView
self.app = Flask(__name__)
@@ -22,6 +21,9 @@ def setUp(self):
self.app.config.from_object("tests.config_api")
self.app.config["FAB_API_MAX_PAGE_SIZE"] = MAX_PAGE_SIZE
+ self.ctx = self.app.app_context()
+ self.ctx.push()
+ SQLA = get_sqla_class()
self.db = SQLA(self.app)
self.appbuilder = AppBuilder(self.app, self.db.session)
self.create_default_users(self.appbuilder)
@@ -44,6 +46,7 @@ class Model1ViewDynamic(ModelView):
)
def tearDown(self):
+ self.ctx.pop()
self.appbuilder = None
self.app = None
self.db = None
@@ -127,11 +130,11 @@ def test_menu_api_limited(self):
self.browser_logout(client)
# Revert test data
- self.appbuilder.get_session.delete(
+ self.appbuilder.session.delete(
self.appbuilder.sm.find_user(username=limited_user)
)
- self.appbuilder.get_session.delete(self.appbuilder.sm.find_role(limited_role))
- self.appbuilder.get_session.commit()
+ self.appbuilder.session.delete(self.appbuilder.sm.find_role(limited_role))
+ self.appbuilder.session.commit()
def test_menu_api_public(self):
"""
@@ -172,7 +175,7 @@ def test_menu_api_public(self):
# Revert test data
role = self.appbuilder.sm.find_role("Public")
role.permissions = []
- self.appbuilder.get_session.commit()
+ self.appbuilder.session.commit()
def test_redirect_after_logout(self):
"""
diff --git a/tests/test_mvc.py b/tests/test_mvc.py
index e3b6f6051d..23bd191de9 100644
--- a/tests/test_mvc.py
+++ b/tests/test_mvc.py
@@ -4,7 +4,7 @@
from typing import Set
from flask import Flask, make_response, redirect, session
-from flask_appbuilder import AppBuilder, SQLA
+from flask_appbuilder import AppBuilder
from flask_appbuilder.actions import action
from flask_appbuilder.baseviews import expose
from flask_appbuilder.charts.views import (
@@ -25,6 +25,7 @@
FilterStartsWith,
)
from flask_appbuilder.models.sqla.interface import SQLAInterface
+from flask_appbuilder.utils.legacy import get_sqla_class
from flask_appbuilder.views import CompactCRUDMixin, MasterDetailView, ModelView
from flask_wtf import CSRFProtect
from tests.base import BaseMVCTestCase, FABTestCase
@@ -66,16 +67,19 @@ def test_babel_empty_languages(self):
app = Flask(__name__)
app.config.from_object("tests.config_api")
app.config["LANGUAGES"] = {}
- db = SQLA(app)
- AppBuilder(app, db.session)
+ with app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(app)
+ appbuilder = AppBuilder(app, db.session)
+ self.create_default_users(appbuilder)
- client = app.test_client()
- self.browser_login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
- rv = client.get("/users/list/")
- self.assertEqual(rv.status_code, 200)
+ client = app.test_client()
+ self.browser_login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
+ rv = client.get("/users/list/")
+ self.assertEqual(rv.status_code, 200)
- data = rv.data.decode("utf-8")
- self.assertNotIn('class="f16', data)
+ data = rv.data.decode("utf-8")
+ self.assertNotIn('class="f16', data)
def test_babel_languages(self):
"""
@@ -87,19 +91,22 @@ def test_babel_languages(self):
"en": {"flag": "gb", "name": "English"},
"pt": {"flag": "pt", "name": "Portuguese"},
}
- db = SQLA(app)
- AppBuilder(app, db.session)
+ with app.app_context():
+ SQLA = get_sqla_class()
+ db = SQLA(app)
+ appbuilder = AppBuilder(app, db.session)
+ self.create_default_users(appbuilder)
- client = app.test_client()
- self.browser_login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
- rv = client.get("/users/list/")
- self.assertEqual(rv.status_code, 200)
- data = rv.data.decode("utf-8")
- self.assertIn('href="/lang/pt"', data)
+ client = app.test_client()
+ self.browser_login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
+ rv = client.get("/users/list/")
+ self.assertEqual(rv.status_code, 200)
+ data = rv.data.decode("utf-8")
+ self.assertIn('href="/lang/pt"', data)
- # Test babel language switch endpoint
- rv = client.get("/lang/pt")
- self.assertEqual(rv.status_code, 302)
+ # Test babel language switch endpoint
+ rv = client.get("/lang/pt")
+ self.assertEqual(rv.status_code, 302)
class ListFilterTestCase(BaseMVCTestCase):
@@ -170,13 +177,9 @@ def test_list_filter_m_m_invalid_object(self):
"""
with self.app.test_client() as c:
self.browser_login(c, USERNAME_ADMIN, PASSWORD_ADMIN)
-
# Roles doesn't exists
rv = c.get("/users/list/?_flt_0_roles=aaaa", follow_redirects=True)
self.assertEqual(rv.status_code, 200)
- if self.db.session.bind.dialect.name != "mysql":
- data = rv.data.decode("utf-8")
- self.assertIn("An error occurred", data)
def test_list_filter_o_m_invalid_object_type(self):
"""
@@ -187,9 +190,6 @@ def test_list_filter_o_m_invalid_object_type(self):
rv = c.get("/model2view/list/?_flt_0_group=aaaa", follow_redirects=True)
self.assertEqual(rv.status_code, 200)
- if self.db.session.bind.dialect.name != "mysql":
- data = rv.data.decode("utf-8")
- self.assertIn("An error occurred", data)
def test_list_filter_not_o_m_invalid_object_type(self):
"""
@@ -201,9 +201,6 @@ def test_list_filter_not_o_m_invalid_object_type(self):
# Roles doesn't exists
rv = c.get("/model2view/list/?_flt_1_group=aaaa", follow_redirects=True)
self.assertEqual(rv.status_code, 200)
- if self.db.session.bind.dialect.name != "mysql":
- data = rv.data.decode("utf-8")
- self.assertIn("An error occurred", data)
def test_list_filter_unknown_column(self):
"""
@@ -270,13 +267,16 @@ def setUp(self):
self.app.config.from_object("tests.config_api")
self.app.config["WTF_CSRF_ENABLED"] = True
+ class Model2View(ModelView):
+ datamodel = SQLAInterface(Model1)
+
+ self.ctx = self.app.app_context()
+ self.ctx.push()
self.csrf = CSRFProtect(self.app)
+ SQLA = get_sqla_class()
self.db = SQLA(self.app)
self.appbuilder = AppBuilder(self.app, self.db.session)
- class Model2View(ModelView):
- datamodel = SQLAInterface(Model1)
-
self.appbuilder.add_view(Model2View, "Model2", category="Model2")
def test_a_csrf_delete_not_allowed(self):
@@ -288,7 +288,7 @@ def test_a_csrf_delete_not_allowed(self):
with model2_data(self.appbuilder.session, 1):
model = (
- self.appbuilder.get_session.query(Model2)
+ self.appbuilder.session.query(Model2)
.filter_by(field_string="test0")
.one_or_none()
)
@@ -297,7 +297,7 @@ def test_a_csrf_delete_not_allowed(self):
self.assertEqual(rv.status_code, 302)
model = (
- self.appbuilder.get_session.query(Model2)
+ self.appbuilder.session.query(Model2)
.filter_by(field_string="test0")
.one_or_none()
)
@@ -311,7 +311,7 @@ def test_a_csrf_delete_protected(self):
self.browser_login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
with model2_data(self.appbuilder.session, 1):
model = (
- self.appbuilder.get_session.query(Model1)
+ self.appbuilder.session.query(Model1)
.filter_by(field_string="test0")
.one_or_none()
)
@@ -571,7 +571,7 @@ class Model1Filtered2View(ModelView):
def get_model1_by_name(datamodel, name):
model = (
- datamodel.session.query(Model1)
+ self.appbuilder.session.query(Model1)
.filter_by(field_string=name)
.one_or_none()
)
@@ -733,12 +733,6 @@ def enabled(self):
self.appbuilder.add_view(ModelBeforeRequest, "ModelBeforeRequest")
- def tearDown(self):
- self.appbuilder = None
- self.app = None
- self.db = None
- log.debug("TEAR DOWN")
-
def test_fab_views(self):
"""
Test views creation and registration
@@ -765,7 +759,7 @@ def test_model_creation(self):
"""
from sqlalchemy.engine.reflection import Inspector
- engine = self.db.session.get_bind(mapper=None, clause=None)
+ engine = self.appbuilder.session.get_bind(mapper=None, clause=None)
inspector = Inspector.from_engine(engine)
# Check if tables exist
self.assertIn("model1", inspector.get_table_names())
@@ -849,7 +843,7 @@ def test_model_crud_add(self):
self.assertEqual(rv.status_code, 200)
model = (
- self.db.session.query(Model1)
+ self.appbuilder.session.query(Model1)
.filter_by(field_string=field_string)
.one_or_none()
)
@@ -857,8 +851,8 @@ def test_model_crud_add(self):
self.assertEqual(model.field_integer, MODEL1_DATA_SIZE)
# Revert data changes
- self.appbuilder.get_session.delete(model)
- self.appbuilder.get_session.commit()
+ self.appbuilder.session.delete(model)
+ self.appbuilder.session.commit()
def test_model_crud_edit(self):
"""
@@ -876,7 +870,11 @@ def test_model_crud_edit(self):
)
self.assertEqual(rv.status_code, 200)
- model = self.db.session.query(Model1).filter_by(id=model_id).one_or_none()
+ model = (
+ self.appbuilder.session.query(Model1)
+ .filter_by(id=model_id)
+ .one_or_none()
+ )
self.assertEqual(model.field_string, "test_edit")
self.assertEqual(model.field_integer, 200)
@@ -889,7 +887,7 @@ def test_model_crud_delete(self):
with model2_data(self.appbuilder.session, 2):
model = (
- self.appbuilder.get_session.query(Model2)
+ self.appbuilder.session.query(Model2)
.filter_by(field_string="test0")
.one_or_none()
)
@@ -897,7 +895,7 @@ def test_model_crud_delete(self):
rv = client.get(f"/model2view/delete/{pk}", follow_redirects=True)
self.assertEqual(rv.status_code, 200)
- model = self.db.session.query(Model2).get(pk)
+ model = self.appbuilder.session.query(Model2).get(pk)
self.assertEqual(model, None)
def test_model_delete_integrity(self):
@@ -905,8 +903,7 @@ def test_model_delete_integrity(self):
Test Model CRUD delete integrity validation
"""
# SQLLite does not support constraints by default
- engine_type = self.appbuilder.get_session.bind.dialect.name
- if engine_type == "sqlite":
+ if self.appbuilder.session.get_bind().name == "sqlite":
return
client = self.app.test_client()
@@ -914,7 +911,7 @@ def test_model_delete_integrity(self):
with model2_data(self.appbuilder.session, 2):
model1 = (
- self.appbuilder.get_session.query(Model1)
+ self.appbuilder.session.query(Model1)
.filter_by(field_string="test1")
.one_or_none()
)
@@ -922,7 +919,7 @@ def test_model_delete_integrity(self):
rv = client.get(f"/model1view/delete/{pk}", follow_redirects=True)
self.assertEqual(rv.status_code, 200)
- model = self.db.session.query(Model1).filter_by(id=pk).one_or_none()
+ model = self.appbuilder.session.query(Model1).filter_by(id=pk).one_or_none()
self.assertNotEqual(model, None)
def test_model_crud_composite_pk(self):
@@ -945,9 +942,7 @@ def test_model_crud_composite_pk(self):
)
self.assertEqual(rv.status_code, 200)
- model = (
- self.appbuilder.get_session.query(Model3).filter_by(pk1="1").one_or_none()
- )
+ model = self.appbuilder.session.query(Model3).filter_by(pk1="1").one_or_none()
self.assertEqual(model.pk1, 1)
self.assertEqual(model.pk2, datetime.datetime(2017, 1, 1))
self.assertEqual(model.field_string, "foo2")
@@ -964,8 +959,8 @@ def test_model_crud_composite_pk(self):
self.assertEqual(rv.status_code, 200)
model = (
- self.appbuilder.get_session.query(Model3)
- .filter_by(pk1="2", pk2="2017-02-02 00:00:00")
+ self.appbuilder.session.query(Model3)
+ .filter_by(pk1=2, pk2=datetime.datetime(2017, 2, 2))
.one_or_none()
)
self.assertEqual(model.pk1, 2)
@@ -975,14 +970,14 @@ def test_model_crud_composite_pk(self):
pk = '[2, {"_type": "datetime", "value": "2017-02-02T00:00:00.000000"}]'
rv = client.get("/model3view/delete/" + quote(pk), follow_redirects=True)
self.assertEqual(rv.status_code, 200)
- model = self.db.session.query(Model3).filter_by(pk1=2).one_or_none()
+ model = self.appbuilder.session.query(Model3).filter_by(pk1=2).one_or_none()
self.assertEqual(model, None)
# Add it back, then delete via muldelete
- self.appbuilder.get_session.add(
+ self.appbuilder.session.add(
Model3(pk1=1, pk2=datetime.datetime(2017, 1, 1), field_string="baz")
)
- self.appbuilder.get_session.commit()
+ self.appbuilder.session.commit()
rv = client.post(
"/model3view/action_post",
data=dict(
@@ -1002,7 +997,7 @@ def test_model_crud_composite_pk(self):
follow_redirects=True,
)
self.assertEqual(rv.status_code, 200)
- model = self.db.session.query(Model3).filter_by(pk1=1).one_or_none()
+ model = self.appbuilder.session.query(Model3).filter_by(pk1=1).one_or_none()
self.assertEqual(model, None)
def test_model_crud_add_with_enum(self):
@@ -1020,7 +1015,7 @@ def test_model_crud_add_with_enum(self):
self.assertEqual(rv.status_code, 200)
model = (
- self.appbuilder.get_session.query(ModelWithEnums)
+ self.appbuilder.session.query(ModelWithEnums)
.filter_by(enum1="e3")
.one_or_none()
)
@@ -1029,12 +1024,12 @@ def test_model_crud_add_with_enum(self):
# Revert data changes
model = (
- self.appbuilder.get_session.query(ModelWithEnums)
+ self.appbuilder.session.query(ModelWithEnums)
.filter_by(enum1="e3")
.one_or_none()
)
- self.appbuilder.get_session.delete(model)
- self.appbuilder.get_session.commit()
+ self.appbuilder.session.delete(model)
+ self.appbuilder.session.commit()
def test_model_crud_edit_with_enum(self):
"""
@@ -1052,7 +1047,7 @@ def test_model_crud_edit_with_enum(self):
self.assertEqual(rv.status_code, 200)
model = (
- self.appbuilder.get_session.query(ModelWithEnums)
+ self.appbuilder.session.query(ModelWithEnums)
.filter_by(enum1="e3")
.one_or_none()
)
@@ -1060,7 +1055,7 @@ def test_model_crud_edit_with_enum(self):
self.assertEqual(model.enum2, TmpEnum.e3)
model.enum2 = TmpEnum.e2
model.enum1 = "e1"
- self.appbuilder.get_session.commit()
+ self.appbuilder.session.commit()
def test_formatted_cols(self):
"""
@@ -1096,12 +1091,12 @@ def test_modelview_add_redirects(self):
# Revert data changes
model1 = (
- self.appbuilder.get_session.query(Model1)
+ self.appbuilder.session.query(Model1)
.filter_by(field_string="test_redirect")
.one_or_none()
)
- self.appbuilder.get_session.delete(model1)
- self.appbuilder.get_session.commit()
+ self.appbuilder.session.delete(model1)
+ self.appbuilder.session.commit()
def test_modelview_edit_redirects(self):
"""
@@ -1111,7 +1106,7 @@ def test_modelview_edit_redirects(self):
self.browser_login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
with model1_data(self.appbuilder.session, 3):
model_id = (
- self.db.session.query(Model1)
+ self.appbuilder.session.query(Model1)
.filter_by(field_string="test0")
.one_or_none()
.id
@@ -1132,7 +1127,10 @@ def test_modelview_delete_redirects(self):
with model1_data(self.appbuilder.session, 1):
model_id = (
- self.db.session.query(Model1).filter_by(field_string="test0").first().id
+ self.appbuilder.session.query(Model1)
+ .filter_by(field_string="test0")
+ .first()
+ .id
)
rv = client.get(f"/model1viewwithredirects/delete/{model_id}")
self.assertEqual(rv.status_code, 302)
@@ -1161,7 +1159,7 @@ def test_edit_excluded_cols(self):
self.browser_login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
with model2_data(self.appbuilder.session, 2):
model = (
- self.appbuilder.get_session.query(Model2)
+ self.appbuilder.session.query(Model2)
.filter_by(field_string="test0")
.one_or_none()
)
@@ -1182,7 +1180,7 @@ def test_show_excluded_cols(self):
self.browser_login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
with model2_data(self.appbuilder.session, 3):
model = (
- self.appbuilder.get_session.query(Model2)
+ self.appbuilder.session.query(Model2)
.filter_by(field_string="test0")
.one_or_none()
)
@@ -1210,7 +1208,7 @@ def test_query_rel_fields(self):
self.assertNotIn("test1", data)
model2 = (
- self.appbuilder.get_session.query(Model2)
+ self.appbuilder.session.query(Model2)
.filter_by(field_string="test0")
.one_or_none()
)
@@ -1273,7 +1271,7 @@ def test_model_add_unique_validation(self):
data = rv.data.decode("utf-8")
self.assertIn(UNIQUE_VALIDATION_STRING, data)
- model = self.db.session.query(Model1).all()
+ model = self.appbuilder.session.query(Model1).all()
self.assertEqual(len(model), 2)
def test_model_add_required_validation(self):
@@ -1294,7 +1292,7 @@ def test_model_add_required_validation(self):
data = rv.data.decode("utf-8")
self.assertIn(NOTNULL_VALIDATION_STRING, data)
- model = self.db.session.query(Model1).all()
+ model = self.appbuilder.session.query(Model1).all()
self.assertEqual(len(model), 2)
def test_model_edit_unique_validation(self):
@@ -1340,7 +1338,7 @@ def test_model_base_filter(self):
client = self.app.test_client()
self.browser_login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
with model1_data(self.appbuilder.session, MODEL1_DATA_SIZE):
- models = self.db.session.query(Model1).all()
+ models = self.appbuilder.session.query(Model1).all()
self.assertEqual(len(models), MODEL1_DATA_SIZE)
# Base filter string starts with
@@ -1406,14 +1404,14 @@ def test_compactCRUDMixin(self):
follow_redirects=True,
)
self.assertEqual(rv.status_code, 200)
- model = self.db.session.query(Model3).first()
+ model = self.appbuilder.session.query(Model3).first()
self.assertEqual(model.field_string, "bar")
rv = client.get(
"/model3compactview/delete/" + quote(pk), follow_redirects=True
)
self.assertEqual(rv.status_code, 200)
- model = self.db.session.query(Model3).first()
+ model = self.appbuilder.session.query(Model3).first()
self.assertEqual(model, None)
def test_edit_add_form_action_prefix_for_compactCRUDMixin(self):
@@ -1481,7 +1479,7 @@ def test_api_read(self):
"""
client = self.app.test_client()
self.browser_login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
- with model1_data(self.appbuilder.get_session):
+ with model1_data(self.appbuilder.session):
rv = client.get("/model1formattedview/api/read")
self.assertEqual(rv.status_code, 200)
data = json.loads(rv.data.decode("utf-8"))
@@ -1526,15 +1524,15 @@ def test_api_create(self):
)
self.assertEqual(rv.status_code, 200)
model1 = (
- self.db.session.query(Model1)
+ self.appbuilder.session.query(Model1)
.filter_by(field_string="zzz")
.one_or_none()
)
self.assertIsNotNone(model1)
# Revert data changes
- self.appbuilder.get_session.delete(model1)
- self.appbuilder.get_session.commit()
+ self.appbuilder.session.delete(model1)
+ self.appbuilder.session.commit()
def test_api_update(self):
"""
@@ -1545,7 +1543,7 @@ def test_api_update(self):
self.browser_login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
with model1_data(self.appbuilder.session, 1) as models:
model_id = models[0].id
- item = self.db.session.query(Model1).get(model_id)
+ item = self.appbuilder.session.query(Model1).get(model_id)
field_integer_before = item.field_integer
rv = client.put(
f"/model1view/api/update/{model_id}",
@@ -1553,7 +1551,7 @@ def test_api_update(self):
follow_redirects=True,
)
self.assertEqual(rv.status_code, 200)
- item = self.db.session.query(Model1).get(model_id)
+ item = self.appbuilder.session.query(Model1).get(model_id)
self.assertEqual(item.field_string, "zzz")
self.assertEqual(item.field_integer, field_integer_before)
@@ -1613,15 +1611,17 @@ class Model1PermOverride(ModelView):
self.assertEqual(rv.status_code, 200)
model = (
- self.db.session.query(Model1).filter_by(field_string="test1").one_or_none()
+ self.appbuilder.session.query(Model1)
+ .filter_by(field_string="test1")
+ .one_or_none()
)
self.assertEqual(model.field_string, "test1")
self.assertEqual(model.field_integer, 1)
# Cleanup
- self.db.session.delete(model)
- self.db.session.delete(user)
- self.db.session.commit()
+ self.appbuilder.session.delete(model)
+ self.appbuilder.session.delete(user)
+ self.appbuilder.session.commit()
def test_method_permission_override(self):
"""
@@ -1682,15 +1682,15 @@ class Model1PermOverride(ModelView):
)
self.assertEqual(rv.status_code, 200)
model1 = (
- self.appbuilder.get_session.query(Model1)
+ self.appbuilder.session.query(Model1)
.filter_by(field_string="tmp_test")
.one_or_none()
)
self.assertIsNotNone(model1)
# Revert data changes
- self.appbuilder.get_session.delete(model1)
- self.appbuilder.get_session.commit()
+ self.appbuilder.session.delete(model1)
+ self.appbuilder.session.commit()
with model1_data(self.appbuilder.session, 2) as models:
model_id = models[0].id
@@ -1712,14 +1712,14 @@ class Model1PermOverride(ModelView):
# Unauthorized delete
model1 = (
- self.appbuilder.get_session.query(Model1)
+ self.appbuilder.session.query(Model1)
.filter_by(field_string="test1")
.one_or_none()
)
pk = model1.id
rv = client.get(f"/model1permoverride/delete/{pk}")
self.assertEqual(rv.status_code, 302)
- model = self.db.session.query(Model1).filter_by(id=pk).one_or_none()
+ model = self.appbuilder.session.query(Model1).filter_by(id=pk).one_or_none()
self.assertEqual(model.field_string, "test1")
# Verify write links are gone from UI
@@ -1732,9 +1732,9 @@ class Model1PermOverride(ModelView):
self.assertIn(f"/model1permoverride/show/{model_id}", data)
# Revert data changes
- self.db.session.delete(self.appbuilder.sm.find_role("Test"))
- self.db.session.delete(user)
- self.db.session.commit()
+ self.appbuilder.session.delete(self.appbuilder.sm.find_role("Test"))
+ self.appbuilder.session.delete(user)
+ self.appbuilder.session.commit()
def test_action_permission_override(self):
"""
@@ -1790,7 +1790,7 @@ def action_one(self, item):
with model1_data(self.appbuilder.session, 1):
model1 = (
- self.appbuilder.get_session.query(Model1)
+ self.appbuilder.session.query(Model1)
.filter_by(field_string="test0")
.one_or_none()
)
@@ -1809,8 +1809,8 @@ def action_one(self, item):
self.assertEqual(rv.status_code, 302)
# cleanup
- self.db.session.delete(user)
- self.db.session.commit()
+ self.appbuilder.session.delete(user)
+ self.appbuilder.session.commit()
def test_permission_converge_compress(self):
"""
@@ -1882,8 +1882,8 @@ class Model1PermConverge(ModelView):
role = self.appbuilder.sm.find_role("Test")
self.assertEqual(len(role.permissions), 1)
# cleanup
- self.db.session.delete(user)
- self.db.session.commit()
+ self.appbuilder.session.delete(user)
+ self.appbuilder.session.commit()
def test_before_request(self):
"""
diff --git a/tests/test_mvc_oauth.py b/tests/test_mvc_oauth.py
index 6e9a5227b6..9ca7cd8153 100644
--- a/tests/test_mvc_oauth.py
+++ b/tests/test_mvc_oauth.py
@@ -1,6 +1,5 @@
from urllib.parse import quote
-from flask_appbuilder import SQLA
from flask_appbuilder.security.sqla.models import User
from flask_login import current_user
import jwt
@@ -31,12 +30,16 @@ def setUp(self):
from flask import Flask
from flask_wtf import CSRFProtect
from flask_appbuilder import AppBuilder
+ from flask_appbuilder.utils.legacy import get_sqla_class
self.app = Flask(__name__)
self.app.config.from_object("tests.config_oauth")
self.app.config["WTF_CSRF_ENABLED"] = True
+ self.ctx = self.app.app_context()
+ self.ctx.push()
self.csrf = CSRFProtect(self.app)
+ SQLA = get_sqla_class()
self.db = SQLA(self.app)
self.appbuilder = AppBuilder(self.app, self.db.session)
@@ -44,11 +47,11 @@ def tearDown(self):
self.cleanup()
def cleanup(self):
- session = self.appbuilder.get_session
- users = session.query(User).filter(User.username.ilike("google%")).all()
+ users = self.db.session.query(User).filter(User.username.ilike("google%")).all()
for user in users:
- session.delete(user)
- session.commit()
+ self.db.session.delete(user)
+ self.db.session.commit()
+ self.ctx.pop()
def test_oauth_login(self):
"""
diff --git a/tests/test_mvc_oid.py b/tests/test_mvc_oid.py
index d49f655f38..41e5572321 100644
--- a/tests/test_mvc_oid.py
+++ b/tests/test_mvc_oid.py
@@ -1,6 +1,5 @@
from unittest.mock import MagicMock
-from flask_appbuilder import SQLA
from tests.base import FABTestCase
@@ -10,9 +9,13 @@ class MVCOIDTestCase(FABTestCase):
def setUp(self):
from flask import Flask
from flask_appbuilder import AppBuilder
+ from flask_appbuilder.utils.legacy import get_sqla_class
self.app = Flask(__name__)
self.app.config.from_object("tests.config_oid")
+ self.ctx = self.app.app_context()
+ self.ctx.push()
+ SQLA = get_sqla_class()
self.db = SQLA(self.app)
self.appbuilder = AppBuilder(self.app, self.db.session)
diff --git a/tests/test_security_api.py b/tests/test_security_api.py
index 3c0ab0ba8e..9b419b1dda 100644
--- a/tests/test_security_api.py
+++ b/tests/test_security_api.py
@@ -5,8 +5,9 @@
from flask import Flask
from flask_appbuilder import AppBuilder
-from flask_appbuilder import SQLA
+from flask_appbuilder.exceptions import PasswordComplexityValidationError
from flask_appbuilder.security.sqla.models import Permission, Role, User, ViewMenu
+from flask_appbuilder.utils.legacy import get_sqla_class
import prison
from tests.base import FABTestCase
from tests.const import PASSWORD_ADMIN, USERNAME_ADMIN
@@ -21,20 +22,22 @@ def setUp(self) -> None:
self.app = Flask(__name__)
self.basedir = os.path.abspath(os.path.dirname(__file__))
self.app.config.from_object("tests.config_security_api")
- self.db = SQLA(self.app)
- self.session = self.db.session
- self.appbuilder = AppBuilder(self.app, self.session)
- self.user_model = User
- self.role_model = Role
+ self.ctx = self.app.app_context()
+ self.ctx.push()
+ SQLA = get_sqla_class()
+ self.db = SQLA(self.app)
+ self.appbuilder = AppBuilder(self.app, self.db.session)
+ self.create_default_users(self.appbuilder)
def tearDown(self):
- self.appbuilder.session.close()
- engine = self.appbuilder.session.get_bind(mapper=None, clause=None)
- for baseview in self.appbuilder.baseviews:
- if hasattr(baseview, "datamodel"):
- baseview.datamodel.session = None
- engine.dispose()
+ # self.appbuilder.session.close()
+ # engine = self.appbuilder.session.get_bind(mapper=None, clause=None)
+ # for baseview in self.appbuilder.baseviews:
+ # if hasattr(baseview, "datamodel"):
+ # baseview.datamodel.session = None
+ # engine.dispose()
+ self.ctx.pop()
def _create_test_user(
self,
@@ -45,22 +48,20 @@ def _create_test_user(
first_name="first-name",
last_name="last-name",
):
- user = User()
- user.first_name = first_name
- user.last_name = last_name
- user.username = username
- user.email = email
- user.roles = roles
- user.password = generate_password_hash(
- password=password,
- method=self.appbuilder.get_app.config.get(
- "FAB_PASSWORD_HASH_METHOD", "scrypt"
- ),
- salt_length=self.appbuilder.get_app.config.get(
- "FAB_PASSWORD_HASH_SALT_LENGTH", 16
+ user = User(
+ username=username,
+ first_name=first_name,
+ last_name=last_name,
+ email=email,
+ roles=roles,
+ password=generate_password_hash(
+ password=password,
+ method=self.app.config.get("FAB_PASSWORD_HASH_METHOD", "scrypt"),
+ salt_length=self.app.config.get("FAB_PASSWORD_HASH_SALT_LENGTH", 16),
),
)
- self.session.commit()
+ self.appbuilder.session.add(user)
+ self.appbuilder.session.commit()
return user
def test_user_info(self):
@@ -197,8 +198,8 @@ def test_get_single_user(self):
token = self.login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
role = Role(name="test-role")
- self.session.add(role)
- self.session.commit()
+ self.db.session.add(role)
+ self.db.session.commit()
role_id = role.id
user = self._create_test_user(
"test-get-single-user", "password", [role], "test-get-single-user@fab.com"
@@ -216,20 +217,11 @@ def test_get_single_user(self):
self.assertEqual(result["email"], "test-get-single-user@fab.com")
self.assertEqual(result["roles"], [{"id": role_id, "name": "test-role"}])
- user = (
- self.session.query(self.user_model)
- .filter(self.user_model.id == user.id)
- .first()
- )
- self.session.delete(user)
- role = (
- self.session.query(self.role_model)
- .filter(self.role_model.id == role_id)
- .first()
- )
- self.session.delete(role)
-
- self.session.commit()
+ user = self.db.session.query(User).filter(User.id == user.id).first()
+ self.db.session.delete(user)
+ role = self.db.session.query(Role).filter(Role.id == role_id).first()
+ self.db.session.delete(role)
+ self.db.session.commit()
def test_get_single_not_found(self):
client = self.app.test_client()
@@ -247,8 +239,8 @@ def test_create_user(self):
client = self.app.test_client()
token = self.login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
role = Role(name="test-create-user-api")
- self.session.add(role)
- self.session.commit()
+ self.db.session.add(role)
+ self.db.session.commit()
uri = "api/v1/security/users/"
create_user_payload = {
@@ -266,7 +258,7 @@ def test_create_user(self):
assert "id" in add_user_response
user = (
- self.session.query(User)
+ self.db.session.query(User)
.filter(User.id == add_user_response["id"])
.one_or_none()
)
@@ -278,13 +270,10 @@ def test_create_user(self):
self.assertEqual(len(user.roles), 1)
self.assertEqual(user.roles[0].name, "test-create-user-api")
- user = (
- self.session.query(self.user_model)
- .filter(self.user_model.id == user.id)
- .first()
- )
- self.session.delete(user)
- self.session.commit()
+ user = self.db.session.query(User).filter(User.id == user.id).first()
+ self.db.session.delete(user)
+ self.db.session.delete(role)
+ self.db.session.commit()
def test_create_user_without_role_or_group(self):
client = self.app.test_client()
@@ -358,7 +347,7 @@ def test_create_user_with_groups(self):
add_user_response = json.loads(rv.data)
assert "id" in add_user_response
user = (
- self.session.query(User)
+ self.db.session.query(User)
.filter(User.id == add_user_response["id"])
.one_or_none()
)
@@ -371,12 +360,12 @@ def test_create_user_with_groups(self):
self.assertEqual(len(user.groups), 2)
self.assertIn("test_group_1", user.groups[0].name)
self.assertIn("test_group_2", user.groups[1].name)
- self.session.delete(user)
+ self.db.session.delete(user)
created_group_1 = self.appbuilder.sm.find_group("test_group_1")
created_group_2 = self.appbuilder.sm.find_group("test_group_2")
- self.session.delete(created_group_1)
- self.session.delete(created_group_2)
- self.session.commit()
+ self.db.session.delete(created_group_1)
+ self.db.session.delete(created_group_2)
+ self.db.session.commit()
def test_create_user_with_invalid_group(self):
client = self.app.test_client()
@@ -406,10 +395,10 @@ def test_edit_user(self):
role_1 = Role(name="test-role1")
role_2 = Role(name="test-role2")
role_3 = Role(name="test-role3")
- self.session.add(role_1)
- self.session.add(role_2)
- self.session.add(role_3)
- self.session.commit()
+ self.db.session.add(role_1)
+ self.db.session.add(role_2)
+ self.db.session.add(role_3)
+ self.db.session.commit()
user = self._create_test_user(
"edit-user-1", "password", [role_1], "test-edit-user1@fab.com"
)
@@ -426,26 +415,22 @@ def test_edit_user(self):
{"email": updated_email, "roles": [role_2.id, role_3.id]},
)
self.assertEqual(rv.status_code, 200)
- updated_user = self.session.query(self.user_model).get(user_id)
+ updated_user = self.db.session.query(User).get(user_id)
self.assertEqual(len(updated_user.roles), 2)
- self.assertEqual(updated_user.roles[0].name, "test-role2")
- self.assertEqual(updated_user.roles[1].name, "test-role3")
+ update_use_roles = sorted([role.name for role in updated_user.roles])
+ self.assertEqual(update_use_roles, ["test-role2", "test-role3"])
self.assertEqual(updated_user.email, updated_email)
roles = (
- self.session.query(self.role_model)
- .filter(self.role_model.id.in_([role_1_id, role_2_id, role_3_id]))
+ self.db.session.query(Role)
+ .filter(Role.id.in_([role_1_id, role_2_id, role_3_id]))
.all()
)
- user = (
- self.session.query(self.user_model)
- .filter(self.user_model.id == user_id)
- .first()
- )
- self.session.delete(user)
+ user = self.db.session.query(User).filter(User.id == user_id).first()
+ self.db.session.delete(user)
for r in roles:
- self.session.delete(r)
- self.session.commit()
+ self.db.session.delete(r)
+ self.db.session.commit()
def test_edit_user_check_password(self):
client = self.app.test_client()
@@ -477,8 +462,8 @@ def test_edit_user_check_password(self):
self.assertIsNotNone(updated_user)
self.assertEqual(updated_user.password, old_password_hash)
- self.session.delete(updated_user)
- self.session.commit()
+ self.db.session.delete(updated_user)
+ self.db.session.commit()
def test_edit_user_change_password(self):
client = self.app.test_client()
@@ -516,12 +501,11 @@ def test_edit_user_change_password(self):
def test_delete_user(self):
client = self.app.test_client()
token = self.login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
- session = self.appbuilder.session
role = Role(name="delete-user-role")
- session.add(role)
- session.commit()
+ self.db.session.add(role)
+ self.db.session.commit()
user = self._create_test_user(
"delete-user", "password", [role], "delete-user@fab.com"
)
@@ -535,13 +519,9 @@ def test_delete_user(self):
updated_user = self.appbuilder.sm.get_user_by_id(user_id)
assert not updated_user
- role = (
- session.query(self.role_model)
- .filter(self.role_model.id == role_id)
- .one_or_none()
- )
- session.delete(role)
- session.commit()
+ role = self.db.session.query(Role).filter(Role.id == role_id).one_or_none()
+ self.db.session.delete(role)
+ self.db.session.commit()
def test_delete_user_not_found(self):
client = self.app.test_client()
@@ -561,32 +541,29 @@ def setUp(self):
self.basedir = os.path.abspath(os.path.dirname(__file__))
self.app.config.from_object("tests.config_api")
self.app.config["FAB_ADD_SECURITY_API"] = True
+
+ self.ctx = self.app.app_context()
+ self.ctx.push()
+ SQLA = get_sqla_class()
self.db = SQLA(self.app)
- self.session = self.db.session
self.appbuilder = AppBuilder(self.app, self.db.session)
self.permission_model = Permission
self.viewmenu_model = ViewMenu
self.role_model = Role
- for b in self.appbuilder.baseviews:
- if hasattr(b, "datamodel") and b.datamodel.session is not None:
- b.datamodel.session = self.db.session
-
self.create_default_users(self.appbuilder)
def tearDown(self):
self.appbuilder.session.close()
engine = self.appbuilder.session.get_bind(mapper=None, clause=None)
- for baseview in self.appbuilder.baseviews:
- if hasattr(baseview, "datamodel"):
- baseview.datamodel.session = None
engine.dispose()
+ self.ctx.pop()
def test_list_permission_api(self):
client = self.app.test_client()
token = self.login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
- count = self.session.query(self.permission_model).count()
+ count = self.db.session.query(self.permission_model).count()
uri = "api/v1/security/permissions/"
rv = self.auth_client_get(client, token, uri)
@@ -615,7 +592,7 @@ def test_get_permission_api(self):
self.assertEqual(response["id"], permission_id)
self.assertEqual(response["result"]["name"], permission_name)
- self.session.delete(permission)
+ self.db.session.delete(permission)
def test_get_invalid_permission_api(self):
client = self.app.test_client()
@@ -680,7 +657,7 @@ def test_list_view_api(self):
client = self.app.test_client()
token = self.login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
- count = self.session.query(self.viewmenu_model).count()
+ count = self.db.session.query(self.viewmenu_model).count()
uri = "api/v1/security/resources/"
rv = self.auth_client_get(client, token, uri)
@@ -707,7 +684,7 @@ def test_get_view_api(self):
self.assertEqual(response["id"], view_id)
self.assertEqual(response["result"]["name"], view_name)
- self.session.delete(view)
+ self.db.session.delete(view)
def test_get_invalid_view_api(self):
client = self.app.test_client()
@@ -919,8 +896,8 @@ def test_get_role_api(self):
assert "id" and "result" in response
self.assertEqual(response["result"].get("name", ""), role_name)
- self.session.delete(role)
- self.session.commit()
+ self.db.session.delete(role)
+ self.db.session.commit()
def test_create_role_api(self):
client = self.app.test_client()
@@ -935,9 +912,9 @@ def test_create_role_api(self):
assert "id" and "result" in add_role_response
self.assertEqual(create_user_payload, add_role_response["result"])
- role = self.session.query(self.role_model).filter_by(name=role_name).first()
- self.session.delete(role)
- self.session.commit()
+ role = self.db.session.query(self.role_model).filter_by(name=role_name).first()
+ self.db.session.delete(role)
+ self.db.session.commit()
def test_edit_role_api(self):
client = self.app.test_client()
@@ -974,8 +951,8 @@ def test_edit_role_api(self):
role = self.appbuilder.sm.find_role(role_2_name)
- self.session.delete(role)
- self.session.commit()
+ self.db.session.delete(role)
+ self.db.session.commit()
def test_add_view_menu_permissions_to_role(self):
client = self.app.test_client()
@@ -1024,12 +1001,12 @@ def test_add_view_menu_permissions_to_role(self):
self.assertEqual(len(role.permissions), 2)
self.assertEqual(
- [p.id for p in role.permissions],
+ sorted([p.id for p in role.permissions]),
[permission_1_view_menu_id, permission_2_view_menu_id],
)
role = self.appbuilder.sm.find_role(role_name)
- self.session.delete(role)
+ self.db.session.delete(role)
self.appbuilder.sm.del_permission_view_menu(
permission_1_name, view_menu_name, cascade=True
@@ -1053,7 +1030,7 @@ def test_add_invalid_view_menu_permissions_to_role(self):
self.assertEqual(rv.status_code, 400)
role = self.appbuilder.sm.find_role(role_name)
- self.session.delete(role)
+ self.db.session.delete(role)
def test_add_view_menu_permissions_to_invalid_role(self):
client = self.app.test_client()
@@ -1118,9 +1095,9 @@ def test_update_role_users_valid_user(self):
self.assertEqual(len(user.roles), 1)
self.assertEqual(role.user[0].id, user.id)
self.assertEqual(user.roles[0].id, role.id)
- self.session.delete(role)
- self.session.delete(user)
- self.session.commit()
+ self.appbuilder.session.delete(role)
+ self.appbuilder.session.delete(user)
+ self.appbuilder.session.commit()
def test_update_role_groups_valid_group(self):
client = self.app.test_client()
@@ -1150,10 +1127,10 @@ def test_update_role_groups_valid_group(self):
self.assertIn(created_group_1.name, updated_role.groups[0].name)
self.assertIn(created_group_2.name, updated_role.groups[1].name)
- self.session.delete(updated_role)
- self.session.delete(created_group_1)
- self.session.delete(created_group_2)
- self.session.commit()
+ self.db.session.delete(updated_role)
+ self.db.session.delete(created_group_1)
+ self.db.session.delete(created_group_2)
+ self.db.session.commit()
def test_update_role_users_invalid_role(self):
client = self.app.test_client()
@@ -1193,8 +1170,8 @@ def test_update_role_users_invalid_payload(self):
self.assertEqual(response.status_code, 400)
role = self.appbuilder.sm.find_role(role_name)
- self.session.delete(role)
- self.session.commit()
+ self.appbuilder.session.delete(role)
+ self.appbuilder.session.commit()
def test_update_role_users_invalid_user(self):
client = self.app.test_client()
@@ -1202,7 +1179,7 @@ def test_update_role_users_invalid_user(self):
role_name = "test_invalid_user_role"
test_role = self.appbuilder.sm.add_role(name=role_name)
- self.session.commit()
+ self.appbuilder.session.commit()
invalid_user_id = 999999
@@ -1215,8 +1192,8 @@ def test_update_role_users_invalid_user(self):
role = self.appbuilder.sm.find_role(role_name)
self.assertEqual(len(role.user), 0)
- self.session.delete(role)
- self.session.commit()
+ self.appbuilder.session.delete(role)
+ self.appbuilder.session.commit()
def test_update_role_groups_invalid_group(self):
client = self.app.test_client()
@@ -1236,8 +1213,8 @@ def test_update_role_groups_invalid_group(self):
role = self.appbuilder.sm.find_role(role_name)
self.assertEqual(len(role.groups), 0)
- self.session.delete(role)
- self.session.commit()
+ self.db.session.delete(role)
+ self.db.session.commit()
def test_list_view_menu_permissions_of_role(self):
client = self.app.test_client()
@@ -1289,7 +1266,7 @@ def test_list_view_menu_permissions_of_role(self):
)
role = self.appbuilder.sm.find_role(role_name)
- self.session.delete(role)
+ self.db.session.delete(role)
def test_list_view_menu_permissions_of_invalid_role(self):
client = self.app.test_client()
@@ -1329,16 +1306,21 @@ def setUp(self):
self.app = Flask(__name__)
self.basedir = os.path.abspath(os.path.dirname(__file__))
self.app.config.from_object("tests.config_api")
+
+ self.ctx = self.app.app_context()
+ self.ctx.push()
+ SQLA = get_sqla_class()
self.db = SQLA(self.app)
self.appbuilder = AppBuilder(self.app, self.db.session)
def tearDown(self):
- self.appbuilder.session.close()
- engine = self.appbuilder.session.get_bind(mapper=None, clause=None)
- for baseview in self.appbuilder.baseviews:
- if hasattr(baseview, "datamodel"):
- baseview.datamodel.session = None
- engine.dispose()
+ # self.appbuilder.session.close()
+ # engine = self.appbuilder.session.get_bind(mapper=None, clause=None)
+ # for baseview in self.appbuilder.baseviews:
+ # if hasattr(baseview, "datamodel"):
+ # baseview.datamodel.session = None
+ # engine.dispose()
+ self.ctx.pop()
def test_user_role_permission(self):
client = self.app.test_client()
@@ -1366,33 +1348,34 @@ def test_user_role_permission(self):
class UserCustomPasswordComplexityValidatorTestCase(FABTestCase):
- def setUp(self):
- from flask import Flask
- from flask_appbuilder import AppBuilder
- from flask_appbuilder.exceptions import PasswordComplexityValidationError
- from flask_appbuilder.security.sqla.models import User
-
- def passwordValidator(password):
- if len(password) < 5:
- raise PasswordComplexityValidationError
+ @staticmethod
+ def password_validator(password):
+ if len(password) < 5:
+ raise PasswordComplexityValidationError
+ def setUp(self):
self.app = Flask(__name__)
self.basedir = os.path.abspath(os.path.dirname(__file__))
self.app.config.from_object("tests.config_api")
self.app.config["FAB_ADD_SECURITY_API"] = True
self.app.config["FAB_PASSWORD_COMPLEXITY_ENABLED"] = True
- self.app.config["FAB_PASSWORD_COMPLEXITY_VALIDATOR"] = passwordValidator
+ self.app.config["FAB_PASSWORD_COMPLEXITY_VALIDATOR"] = self.password_validator
+ self.ctx = self.app.app_context()
+ self.ctx.push()
+
+ SQLA = get_sqla_class()
self.db = SQLA(self.app)
self.appbuilder = AppBuilder(self.app, self.db.session)
- self.user_model = User
+ self.create_default_users(self.appbuilder)
def tearDown(self):
- self.appbuilder.session.close()
- engine = self.appbuilder.session.get_bind(mapper=None, clause=None)
- for baseview in self.appbuilder.baseviews:
- if hasattr(baseview, "datamodel"):
- baseview.datamodel.session = None
- engine.dispose()
+ # self.appbuilder.session.close()
+ # engine = self.appbuilder.session.get_bind(mapper=None, clause=None)
+ # for baseview in self.appbuilder.baseviews:
+ # if hasattr(baseview, "datamodel"):
+ # baseview.datamodel.session = None
+ # engine.dispose()
+ self.ctx.pop()
def test_password_complexity(self):
client = self.app.test_client()
@@ -1415,43 +1398,38 @@ def test_password_complexity(self):
rv = self.auth_client_post(client, token, uri, create_user_payload)
self.assertEqual(rv.status_code, 201)
- session = self.appbuilder.get_session
user = (
- session.query(self.user_model)
- .filter(self.user_model.username == "password complexity test user 10")
+ self.appbuilder.session.query(User)
+ .filter(User.username == "password complexity test user 10")
.one_or_none()
)
- session.delete(user)
- session.commit()
+ self.appbuilder.session.delete(user)
+ self.appbuilder.session.commit()
class UserDefaultPasswordComplexityValidatorTestCase(FABTestCase):
def setUp(self):
- from flask import Flask
- from flask_appbuilder import AppBuilder
- from flask_appbuilder.exceptions import PasswordComplexityValidationError
- from flask_appbuilder.security.sqla.models import User
-
- def passwordValidator(password):
- if len(password) < 5:
- raise PasswordComplexityValidationError
-
self.app = Flask(__name__)
self.basedir = os.path.abspath(os.path.dirname(__file__))
self.app.config.from_object("tests.config_api")
self.app.config["FAB_ADD_SECURITY_API"] = True
self.app.config["FAB_PASSWORD_COMPLEXITY_ENABLED"] = True
+
+ self.ctx = self.app.app_context()
+ self.ctx.push()
+ SQLA = get_sqla_class()
self.db = SQLA(self.app)
self.appbuilder = AppBuilder(self.app, self.db.session)
- self.user_model = User
+ self.create_default_users(self.appbuilder)
def tearDown(self):
- self.appbuilder.session.close()
- engine = self.appbuilder.session.get_bind(mapper=None, clause=None)
- for baseview in self.appbuilder.baseviews:
- if hasattr(baseview, "datamodel"):
- baseview.datamodel.session = None
- engine.dispose()
+ # self.appbuilder.session.close()
+ # engine = self.appbuilder.session.get_bind(mapper=None, clause=None)
+ # for baseview in self.appbuilder.baseviews:
+ # if hasattr(baseview, "datamodel"):
+ # baseview.datamodel.session = None
+ # engine.dispose()
+ self.ctx.pop()
def test_password_complexity(self):
client = self.app.test_client()
@@ -1474,14 +1452,13 @@ def test_password_complexity(self):
rv = self.auth_client_post(client, token, uri, create_user_payload)
self.assertEqual(rv.status_code, 201)
- session = self.appbuilder.get_session
user = (
- session.query(self.user_model)
- .filter(self.user_model.username == "password complexity test user")
+ self.appbuilder.session.query(User)
+ .filter(User.username == "password complexity test user")
.one_or_none()
)
- session.delete(user)
- session.commit()
+ self.appbuilder.session.delete(user)
+ self.appbuilder.session.commit()
class GroupAPITestCase(FABTestCase):
@@ -1492,31 +1469,34 @@ def setUp(self):
self.app = Flask(__name__)
self.basedir = os.path.abspath(os.path.dirname(__file__))
self.app.config.from_object("tests.config_api")
+ self.ctx = self.app.app_context()
+ self.ctx.push()
self.app.config["FAB_ADD_SECURITY_API"] = True
+ SQLA = get_sqla_class()
self.db = SQLA(self.app)
self.appbuilder = AppBuilder(self.app, self.db.session)
- self.session = self.db.session
- for b in self.appbuilder.baseviews:
- if hasattr(b, "datamodel") and b.datamodel.session is not None:
- b.datamodel.session = self.db.session
+ # for b in self.appbuilder.baseviews:
+ # if hasattr(b, "datamodel") and b.datamodel.session is not None:
+ # b.datamodel.session = db.session
self.create_default_users(self.appbuilder)
def tearDown(self):
- groups = self.session.query(self.appbuilder.sm.group_model).all()
+ groups = self.appbuilder.session.query(self.appbuilder.sm.group_model).all()
for group in groups:
group.users = []
group.roles = []
- self.session.delete(group)
- self.session.commit()
+ self.appbuilder.session.delete(group)
+ self.appbuilder.session.commit()
self.appbuilder.session.close()
- engine = self.appbuilder.session.get_bind(mapper=None, clause=None)
- for baseview in self.appbuilder.baseviews:
- if hasattr(baseview, "datamodel"):
- baseview.datamodel.session = None
- engine.dispose()
+ # engine = self.appbuilder.session.get_bind(mapper=None, clause=None)
+ # for baseview in self.appbuilder.baseviews:
+ # if hasattr(baseview, "datamodel"):
+ # baseview.datamodel.session = None
+ # engine.dispose()
+ self.ctx.pop()
def test_list_group_api_empty_list(self):
client = self.app.test_client()
@@ -1534,10 +1514,6 @@ def test_list_group_api_populated_list(self):
client = self.app.test_client()
token = self.login(client, USERNAME_ADMIN, PASSWORD_ADMIN)
admin_role = self.appbuilder.sm.find_role("Admin")
- # user = self.appbuilder.sm.find_user("test_user_group")
- # self.session.merge(user)
- # self.session.delete(user)
- # self.session.commit()
user = self.appbuilder.sm.add_user(
username="test_user_group",
first_name="Test",
@@ -1575,9 +1551,9 @@ def test_list_group_api_populated_list(self):
],
)
- self.session.delete(group)
- self.session.delete(user)
- self.session.commit()
+ self.appbuilder.session.delete(group)
+ self.appbuilder.session.delete(user)
+ self.appbuilder.session.commit()
def test_create_group(self):
client = self.app.test_client()
@@ -1589,14 +1565,14 @@ def test_create_group(self):
self.assertEqual(rv.status_code, 201)
assert "id" in add_group_response
group = (
- self.session.query(self.appbuilder.sm.group_model)
+ self.appbuilder.session.query(self.appbuilder.sm.group_model)
.filter(self.appbuilder.sm.group_model.id == add_group_response["id"])
.one_or_none()
)
self.assertIsNotNone(group)
self.assertEqual(group.name, create_group_payload["name"])
- self.session.delete(group)
- self.session.commit()
+ self.appbuilder.session.delete(group)
+ self.appbuilder.session.commit()
def test_create_group_without_name(self):
client = self.app.test_client()
@@ -1620,13 +1596,13 @@ def test_create_group_existing_name(self):
group_name = "existing_group"
group = self.appbuilder.sm.add_group(group_name, "label", "description")
- self.session.commit()
+ self.appbuilder.session.commit()
rv = self.auth_client_post(client, token, uri, json={"name": group_name})
self.assertEqual(rv.status_code, 422)
- self.session.delete(group)
- self.session.commit()
+ self.appbuilder.session.delete(group)
+ self.appbuilder.session.commit()
def test_create_group_with_users_and_roles(self):
client = self.app.test_client()
@@ -1658,7 +1634,7 @@ def test_create_group_with_users_and_roles(self):
add_group_response = json.loads(rv.data)
assert "id" in add_group_response
group = (
- self.session.query(self.appbuilder.sm.group_model)
+ self.appbuilder.session.query(self.appbuilder.sm.group_model)
.filter(self.appbuilder.sm.group_model.id == add_group_response["id"])
.one_or_none()
)
@@ -1673,11 +1649,13 @@ def test_create_group_with_users_and_roles(self):
self.assertIn(group_role, group.roles)
self.assertIn(group_user, group.users)
- self.session.delete(group)
- self.session.delete(group_user)
- self.session.delete(group_role)
- self.session.query(User).filter(User.username == "test_user_group").delete()
- self.session.commit()
+ self.appbuilder.session.delete(group)
+ self.appbuilder.session.delete(group_user)
+ self.appbuilder.session.delete(group_role)
+ self.appbuilder.session.query(User).filter(
+ User.username == "test_user_group"
+ ).delete()
+ self.appbuilder.session.commit()
def test_create_group_with_invalid_user(self):
client = self.app.test_client()
@@ -1719,7 +1697,7 @@ def test_delete_group(self):
group_name = "test_delete_group"
group = self.appbuilder.sm.add_group(group_name, "label", "description")
- self.session.commit()
+ self.appbuilder.session.commit()
group_id = group.id
uri = f"api/v1/security/groups/{group_id}"
@@ -1746,7 +1724,7 @@ def test_edit_group_name(self):
group_name = "test_edit_group"
updated_group_name = "updated_test_edit_group"
group = self.appbuilder.sm.add_group(group_name, "label", "description")
- self.session.commit()
+ self.appbuilder.session.commit()
group_id = group.id
uri = f"api/v1/security/groups/{group_id}"
@@ -1758,8 +1736,8 @@ def test_edit_group_name(self):
self.assertIsNotNone(updated_group)
self.assertEqual(updated_group.name, updated_group_name)
- self.session.delete(updated_group)
- self.session.commit()
+ self.appbuilder.session.delete(updated_group)
+ self.appbuilder.session.commit()
def test_edit_invalid_group(self):
client = self.app.test_client()
@@ -1779,7 +1757,7 @@ def test_edit_group_roles(self):
group_name = "test_edit_group_roles"
group = self.appbuilder.sm.add_group(group_name, "description", "label")
- self.session.commit()
+ self.appbuilder.session.commit()
uri = f"api/v1/security/groups/{group.id}"
role = self.appbuilder.sm.add_role("test_edit_group_roles")
@@ -1790,10 +1768,10 @@ def test_edit_group_roles(self):
updated_group = self.appbuilder.sm.find_group(group_name)
self.assertIsNotNone(updated_group)
self.assertEqual(len(updated_group.roles), 1)
- self.session.delete(updated_group)
+ self.appbuilder.session.delete(updated_group)
updated_role = self.appbuilder.sm.find_role("test_edit_group_roles")
- self.session.delete(updated_role)
- self.session.commit()
+ self.appbuilder.session.delete(updated_role)
+ self.appbuilder.session.commit()
def test_edit_group_users(self):
client = self.app.test_client()
@@ -1831,10 +1809,10 @@ def test_edit_group_users(self):
updated_user_2 = self.appbuilder.sm.find_user(username="test_user_2")
self.assertEqual(updated_user_1.groups[0].id, updated_group.id)
self.assertEqual(updated_user_2.groups[0].id, updated_group.id)
- self.session.delete(updated_user_2)
- self.session.delete(updated_user_1)
- self.session.delete(updated_group)
- self.session.commit()
+ self.appbuilder.session.delete(updated_user_2)
+ self.appbuilder.session.delete(updated_user_1)
+ self.appbuilder.session.delete(updated_group)
+ self.appbuilder.session.commit()
def test_edit_group_with_invalid_user(self):
client = self.app.test_client()
@@ -1842,7 +1820,7 @@ def test_edit_group_with_invalid_user(self):
group_name = "test_edit_group_invalid_user"
group = self.appbuilder.sm.add_group(group_name, "description", "label")
- self.session.commit()
+ self.appbuilder.session.commit()
invalid_user_id = 999999
uri = f"api/v1/security/groups/{group.id}"
@@ -1851,8 +1829,8 @@ def test_edit_group_with_invalid_user(self):
rv = self.auth_client_put(client, token, uri, json=payload)
self.assertEqual(rv.status_code, 400)
- self.session.delete(group)
- self.session.commit()
+ self.appbuilder.session.delete(group)
+ self.appbuilder.session.commit()
def test_edit_group_with_invalid_role(self):
client = self.app.test_client()
@@ -1860,7 +1838,7 @@ def test_edit_group_with_invalid_role(self):
group_name = "test_edit_group_invalid_role"
group = self.appbuilder.sm.add_group(group_name, "description", "label")
- self.session.commit()
+ self.appbuilder.session.commit()
invalid_role_id = 999999
uri = f"api/v1/security/groups/{group.id}"
@@ -1869,5 +1847,5 @@ def test_edit_group_with_invalid_role(self):
rv = self.auth_client_put(client, token, uri, json=payload)
self.assertEqual(rv.status_code, 400)
- self.session.delete(group)
- self.session.commit()
+ self.appbuilder.session.delete(group)
+ self.appbuilder.session.commit()
diff --git a/tests/test_security_permissions.py b/tests/test_security_permissions.py
deleted file mode 100644
index 6f86a1ed54..0000000000
--- a/tests/test_security_permissions.py
+++ /dev/null
@@ -1,340 +0,0 @@
-from flask import g
-from flask_appbuilder import SQLA
-from flask_login import AnonymousUserMixin, login_user
-from tests.base import FABTestCase
-
-
-class SecurityPermissionsTestCase(FABTestCase):
- def setUp(self):
- from flask import Flask
- from flask_appbuilder import AppBuilder
-
- self.app = Flask(__name__)
- self.app.config.from_object("tests.config_security")
- self.app.config["FAB_ADD_SECURITY_VIEWS"] = False
-
- self.db = SQLA(self.app)
- self.appbuilder = AppBuilder(self.app, self.db.session)
-
- self._db_role_1 = self.appbuilder.sm.add_role("DB_ROLE1")
- self._pvm1 = self.appbuilder.sm.add_permission_view_menu(
- "can_show", "ModelDBView"
- )
- self._pvm2 = self.appbuilder.sm.add_permission_view_menu(
- "can_delete", "ModelDBView"
- )
- self.appbuilder.sm.add_permission_role(self._db_role_1, self._pvm1)
- self.appbuilder.sm.add_permission_role(self._db_role_1, self._pvm2)
-
- self._builtin_role = self.appbuilder.sm.find_role("FAB_ROLE1")
- self._group_db_role = self.appbuilder.sm.add_group(
- "group_db_role",
- "group_db_role",
- description="",
- roles=[self._db_role_1],
- )
- self._group_builtin_role = self.appbuilder.sm.add_group(
- "group_builtin_role",
- "group_builtin_role",
- description="",
- roles=[self._builtin_role],
- )
- self._group_mix_roles = self.appbuilder.sm.add_group(
- "group_mix_roles",
- "_group_mix_roles",
- description="",
- roles=[self._db_role_1, self._builtin_role],
- )
-
- # Insert test data
- self._user01 = self.create_user(
- self.appbuilder,
- "user1",
- "password1",
- "",
- first_name="user01",
- last_name="user",
- email="user01@fab.org",
- role_names=["FAB_ROLE1", "DB_ROLE1"],
- )
-
- self._user02 = self.create_user(
- self.appbuilder,
- "user2",
- "password1",
- "",
- first_name="user02",
- last_name="user",
- email="user02@fab.org",
- role_names=["DB_ROLE1"],
- )
-
- self._user03 = self.create_user(
- self.appbuilder,
- "user3",
- "password1",
- "",
- first_name="user03",
- last_name="user",
- email="user03@fab.org",
- role_names=["FAB_ROLE2"],
- )
-
- self._user04 = self.create_user(
- self.appbuilder,
- "user4",
- "password1",
- "",
- first_name="user04",
- last_name="user",
- email="user04@fab.org",
- role_names=["FAB_ROLE1", "FAB_ROLE2"],
- )
-
- self._user_group_mix_roles = self.create_user(
- self.appbuilder,
- "user_group_mix_roles",
- "password1",
- "",
- first_name="user_group_mix_roles",
- last_name="user",
- email="user_group_mix_roles@fab.org",
- role_names=[],
- group_names=["group_mix_roles"],
- )
-
- self._user_group_db_role = self.create_user(
- self.appbuilder,
- "user_group_db_role",
- "password1",
- "",
- first_name="user_group_db_role",
- last_name="user",
- email="user_group_db_role@fab.org",
- role_names=[],
- group_names=["group_db_role"],
- )
-
- self._user_group_builtin_role = self.create_user(
- self.appbuilder,
- "user_group_builtin_role",
- "password1",
- "",
- first_name="user_group_builtin_role",
- last_name="user",
- email="user_group_builtin_role@fab.org",
- role_names=[],
- group_names=["group_builtin_role"],
- )
-
- self._user_multiple_groups = self.create_user(
- self.appbuilder,
- "user_group_multiple_groups",
- "password1",
- "",
- first_name="user_group_multiple_groups",
- last_name="user",
- email="user_group_multiple_groups@fab.org",
- role_names=[],
- group_names=["group_builtin_role", "group_db_role"],
- )
-
- def tearDown(self):
- self._group_db_role = self.appbuilder.sm.find_group("group_db_role")
- self._group_mix_roles = self.appbuilder.sm.find_group("group_mix_roles")
- self._group_builtin_role = self.appbuilder.sm.find_group("group_builtin_role")
- self._user_group_db_role = self.appbuilder.sm.find_user(
- username="user_group_db_role"
- )
- self._user_group_builtin_role = self.appbuilder.sm.find_user(
- username="user_group_builtin_role"
- )
- self._user_multiple_groups = self.appbuilder.sm.find_user(
- username="user_group_multiple_groups"
- )
- self._db_role_1 = self.appbuilder.sm.find_role("DB_ROLE1")
- self.appbuilder.session.delete(self._user01)
- self.appbuilder.session.delete(self._user02)
- self.appbuilder.session.delete(self._user03)
- self.appbuilder.session.delete(self._user04)
- self.appbuilder.session.delete(self._user_group_db_role)
- self.appbuilder.session.delete(self._user_group_builtin_role)
- self.appbuilder.session.delete(self._user_group_mix_roles)
- self.appbuilder.session.delete(self._user_multiple_groups)
- self.appbuilder.session.delete(self._pvm1)
- self.appbuilder.session.delete(self._pvm2)
- self.appbuilder.session.delete(self._group_db_role)
- self.appbuilder.session.delete(self._group_builtin_role)
- self.appbuilder.session.delete(self._group_mix_roles)
- self.appbuilder.session.delete(self._db_role_1)
- self.appbuilder.get_session.commit()
-
- def login_user(self, user):
- user = self.appbuilder.sm.find_user(username=user.username)
- g.user = user
- login_user(user)
-
- def test_get_user_permissions_mixed(self):
- """
- Security Permissions: Get user permissions mixes role types
- """
- assert {
- ("can_list", "Model1View"),
- ("can_list", "Model2View"),
- ("can_show", "ModelDBView"),
- ("can_delete", "ModelDBView"),
- } == self.appbuilder.sm.get_user_permissions(self._user01)
-
- def test_get_user_permissions_db(self):
- """
- Security Permissions: Get user permissions DB role type
- """
- assert {
- ("can_delete", "ModelDBView"),
- ("can_show", "ModelDBView"),
- } == self.appbuilder.sm.get_user_permissions(self._user02)
-
- def test_get_user_permissions_with_group_mix_roles(self):
- """
- Security Permissions: Get user permissions group with mixed roles
- """
- assert {
- ("can_list", "Model1View"),
- ("can_list", "Model2View"),
- ("can_show", "ModelDBView"),
- ("can_delete", "ModelDBView"),
- } == self.appbuilder.sm.get_user_permissions(self._user_group_mix_roles)
-
- def test_get_user_permissions_with_group_db_role(self):
- """
- Security Permissions: Get user permissions group with db role
- """
- assert {
- ("can_show", "ModelDBView"),
- ("can_delete", "ModelDBView"),
- } == self.appbuilder.sm.get_user_permissions(self._user_group_db_role)
-
- def test_get_user_permissions_with_group_builtin_role(self):
- """
- Security Permissions: Get user permissions group with builtin role
- """
- assert {
- ("can_list", "Model1View"),
- ("can_list", "Model2View"),
- } == self.appbuilder.sm.get_user_permissions(self._user_group_builtin_role)
-
- def test_has_access_user_builtin_role(self):
- with self.app.test_request_context("/"):
- self.login_user(self._user_group_builtin_role)
- assert self.appbuilder.sm.has_access("can_list", "Model1View")
- assert self.appbuilder.sm.has_access("can_list", "Model2View")
- assert not self.appbuilder.sm.has_access("can_show", "ModelDBView")
- assert not self.appbuilder.sm.has_access("can_delete", "ModelDBView")
-
- def test_has_access_user_db_role(self):
- with self.app.test_request_context("/"):
- self.login_user(self._user_group_db_role)
- assert not self.appbuilder.sm.has_access("can_list", "Model1View")
- assert not self.appbuilder.sm.has_access("can_list", "Model2View")
- assert self.appbuilder.sm.has_access("can_show", "ModelDBView")
- assert self.appbuilder.sm.has_access("can_delete", "ModelDBView")
-
- def test_has_access_user_mix_role(self):
- with self.app.test_request_context("/"):
- self.login_user(self._user_group_mix_roles)
- assert self.appbuilder.sm.has_access("can_list", "Model1View")
- assert self.appbuilder.sm.has_access("can_list", "Model2View")
- assert self.appbuilder.sm.has_access("can_show", "ModelDBView")
- assert self.appbuilder.sm.has_access("can_delete", "ModelDBView")
-
- def test_has_access_user_multiple_groups(self):
- with self.app.test_request_context("/"):
- self.login_user(self._user_multiple_groups)
- assert self.appbuilder.sm.has_access("can_list", "Model1View")
- assert self.appbuilder.sm.has_access("can_list", "Model2View")
- assert self.appbuilder.sm.has_access("can_show", "ModelDBView")
- assert self.appbuilder.sm.has_access("can_delete", "ModelDBView")
-
- def test_has_access_user_multiple_roles(self):
- with self.app.test_request_context("/"):
- self.login_user(self._user01)
- assert self.appbuilder.sm.has_access("can_list", "Model1View")
- assert self.appbuilder.sm.has_access("can_list", "Model2View")
- assert self.appbuilder.sm.has_access("can_show", "ModelDBView")
- assert self.appbuilder.sm.has_access("can_delete", "ModelDBView")
-
- def test_has_access_user_db_roles(self):
- with self.app.test_request_context("/"):
- self.login_user(self._user02)
- assert not self.appbuilder.sm.has_access("can_list", "Model1View")
- assert not self.appbuilder.sm.has_access("can_list", "Model2View")
- assert self.appbuilder.sm.has_access("can_show", "ModelDBView")
- assert self.appbuilder.sm.has_access("can_delete", "ModelDBView")
-
- def test_get_user_permissions_builtin(self):
- """
- Security Permissions: Get user permissions builtin role type
- """
- assert {
- ("can_list", "Model3View"),
- ("can_list", "Model4View"),
- } == self.appbuilder.sm.get_user_permissions(self._user03)
-
- def test_get_user_permissions_builtin_multiple(self):
- """
- Security Permissions: Get user permissions multiple builtin role type
- """
- assert {
- ("can_list", "Model2View"),
- ("can_list", "Model1View"),
- ("can_list", "Model3View"),
- ("can_list", "Model4View"),
- } == self.appbuilder.sm.get_user_permissions(self._user04)
-
- def test_get_anonymous_permissions(self):
- """
- Security Permissions: Get anonymous user permissions
- """
- assert set() == self.appbuilder.sm.get_user_permissions(AnonymousUserMixin())
-
- def test_get_role_permissions_builtin(self):
- """
- Security Permissions: Get role permissions builtin
- """
- role = self.appbuilder.sm.find_role("FAB_ROLE1")
- assert {
- ("can_list", "Model2View"),
- ("can_list", "Model1View"),
- } == self.appbuilder.sm.get_role_permissions(role)
-
- def test_get_role_permissions_db(self):
- """
- Security Permissions: Get role permissions db
- """
- role = self.appbuilder.sm.find_role("DB_ROLE1")
- assert {
- ("can_show", "ModelDBView"),
- ("can_delete", "ModelDBView"),
- } == self.appbuilder.sm.get_role_permissions(role)
-
- def test_get_user_roles_permissions_one_db_role(self):
- assert {
- "DB_ROLE1": [("can_show", "ModelDBView"), ("can_delete", "ModelDBView")]
- } == self.appbuilder.sm.get_user_roles_permissions(self._user02)
-
- def test_get_user_roles_permissions_mixed_roles(self):
- assert {
- "FAB_ROLE1": [("can_list", "Model1View"), ("can_list", "Model2View")],
- "DB_ROLE1": [("can_show", "ModelDBView"), ("can_delete", "ModelDBView")],
- } == self.appbuilder.sm.get_user_roles_permissions(self._user01)
-
- def test_get_user_roles_permissions_one_builtin_roles(self):
- assert {
- "FAB_ROLE2": [("can_list", "Model3View"), ("can_list", "Model4View")]
- } == self.appbuilder.sm.get_user_roles_permissions(self._user03)
-
- def test_get_user_roles_permissions_mul_builtin_roles(self):
- assert {
- "FAB_ROLE1": [("can_list", "Model1View"), ("can_list", "Model2View")],
- "FAB_ROLE2": [("can_list", "Model3View"), ("can_list", "Model4View")],
- } == self.appbuilder.sm.get_user_roles_permissions(self._user04)
diff --git a/tests/test_urltools.py b/tests/test_urltools.py
index 47ff41d79e..e52961edc2 100644
--- a/tests/test_urltools.py
+++ b/tests/test_urltools.py
@@ -1,35 +1,38 @@
import os
from flask import Flask
-from flask_appbuilder import AppBuilder, SQLA
+from flask_appbuilder import AppBuilder
from flask_appbuilder.models.sqla.interface import SQLAInterface
from flask_appbuilder.urltools import get_filter_args
+from flask_appbuilder.utils.legacy import get_sqla_class
+from tests.base import FABTestCase
from tests.sqla.models import Model1
-from .base import FABTestCase
-
class FlaskTestCase(FABTestCase):
def setUp(self):
self.app = Flask(__name__)
self.basedir = os.path.abspath(os.path.dirname(__file__))
self.app.config.from_object("tests.config_api")
-
+ self.ctx = self.app.app_context()
+ self.ctx.push()
+ SQLA = get_sqla_class()
self.db = SQLA(self.app)
self.appbuilder = AppBuilder(self.app, self.db.session)
+ def tearDown(self):
+ self.ctx.pop()
+
def test_get_filter_args_allow_one(self):
datamodel = SQLAInterface(Model1)
- with self.appbuilder.get_app.test_request_context(
- "/users/list?_flt_1_field_string=a"
- ):
+ with self.app.test_request_context("/users/list?_flt_1_field_string=a"):
filters = datamodel.get_filters(["field_string", "field_integer"])
get_filter_args(filters)
assert filters.values == [["a"]]
def test_get_filter_args_allow_multiple(self):
datamodel = SQLAInterface(Model1)
- with self.appbuilder.get_app.test_request_context(
+ with self.app.test_request_context(
"/users/list?_flt_1_field_string=a&_flt_1_field_integer=2"
):
filters = datamodel.get_filters(["field_string", "field_integer"])
@@ -38,27 +41,21 @@ def test_get_filter_args_allow_multiple(self):
def test_get_filter_args_disallow(self):
datamodel = SQLAInterface(Model1)
- with self.appbuilder.get_app.test_request_context(
- "/users/list?_flt_1_field_float=1.0"
- ):
+ with self.app.test_request_context("/users/list?_flt_1_field_float=1.0"):
filters = datamodel.get_filters(["field_string", "field_integer"])
get_filter_args(filters)
assert filters.values == []
def test_get_filter_args_disallow_off(self):
datamodel = SQLAInterface(Model1)
- with self.appbuilder.get_app.test_request_context(
- "/users/list?_flt_1_field_float=1.0"
- ):
+ with self.app.test_request_context("/users/list?_flt_1_field_float=1.0"):
filters = datamodel.get_filters(["field_string", "field_integer"])
get_filter_args(filters, disallow_if_not_in_search=False)
assert filters.values == [["1.0"]]
def test_get_filter_args_invalid_index(self):
datamodel = SQLAInterface(Model1)
- with self.appbuilder.get_app.test_request_context(
- "/users/list?_flt_a_field_string=a"
- ):
+ with self.app.test_request_context("/users/list?_flt_a_field_string=a"):
filters = datamodel.get_filters(["field_string", "field_integer"])
get_filter_args(filters)
assert filters.values == []