#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# http://www.noswearing.com/dictionary

anus
arse
arsehole
ass
ass-hat
ass-jabber
ass-pirate
assbag
assbandit
assbanger
assbite
assclown
asscock
asscracker
asses
assface
assfuck
assfucker
assgoblin
asshat
asshead
asshole
asshopper
assjacker
asslick
asslicker
assmonkey
assmunch
assmuncher
assnigger
asspirate
assshit
assshole
asssucker
asswad
asswipe
axwound
bampot
bastard
beaner
bitch
bitchass
bitches
bitchtits
bitchy
blow
blowjob
bollocks
bollox
boner
brotherfucker
bullshit
bumblefuck
butt
butt-pirate
buttfucka
buttfucker
carpetmuncher
chesticle
chinc
chink
choad
chode
clit
clitface
clitfuck
clusterfuck
cock
cockass
cockbite
cockburger
cockface
cockfucker
cockhead
cockjockey
cockknoker
cockmaster
cockmongler
cockmongruel
cockmonkey
cockmuncher
cocknose
cocknugget
cockshit
cocksmith
cocksmoke
cocksmoker
cocksniffer
cocksucker
cockwaffle
coochie
coochy
coon
cooter
cracker
cum
cumbubble
cumdumpster
cumguzzler
cumjockey
cumslut
cumtart
cunnie
cunnilingus
cunt
cuntass
cuntface
cunthole
cuntlicker
cuntrag
cuntslut
dago
damn
deggo
dick
dick-sneeze
dickbag
dickbeaters
dickface
dickfuck
dickfucker
dickhead
dickhole
dickjuice
dickmilk
dickmonger
dicks
dickslap
dicksucker
dicksucking
dicktickler
dickwad
dickweasel
dickweed
dickwod
dike
dildo
dipshit
doochbag
dookie
douche
douche-fag
douchebag
douchewaffle
dumass
dumb
dumbass
dumbfuck
dumbshit
dumshit
dyke
fag
fagbag
fagfucker
faggit
faggot
faggotcock
fagtard
fatass
fellatio
feltch
flamer
fuck
fuckass
fuckbag
fuckboy
fuckbrain
fuckbutt
fuckbutter
fucked
fucker
fuckersucker
fuckface
fuckhead
fuckhole
fuckin
fucking
fucknut
fucknutt
fuckoff
fucks
fuckstick
fucktard
fucktart
fuckup
fuckwad
fuckwit
fuckwitt
fudgepacker
gay
gayass
gaybob
gaydo
gayfuck
gayfuckist
gaylord
gaytard
gaywad
goddamn
goddamnit
gooch
gook
gringo
guido
handjob
heeb
ho
hoe
homo
homodumbshit
honkey
humping
jackass
jagoff
jap
jerk
jerkass
jigaboo
jizz
jungle
junglebunny
kike
kooch
kootch
kraut
kunt
kyke
lameass
lardass
lesbian
lesbo
lezzie
mcfagget
mick
minge
mothafucka
mothafuckin
motherfucker
motherfucking
muff
muffdiver
munging
negro
nigaboo
nigga
nigger
niggers
niglet
nutsack
paki
panooch
pecker
peckerhead
penis
penisbanger
penisfucker
penispuffer
piss
pissed
pissed
pissflaps
polesmoker
pollock
poon
poonani
poonany
poontang
porchmonkey
prick
punanny
punta
pussies
pussy
pussylicking
puto
queef
queer
queerbait
queerhole
renob
rimjob
ruski
sandnigger
schlong
scrote
shit
shitass
shitbag
shitbagger
shitbrains
shitbreath
shitcanned
shitcunt
shitdick
shitface
shitfaced
shithead
shithole
shithouse
shitspitter
shitstain
shitter
shittiest
shitting
shitty
shiz
shiznit
skank
skeet
skullfuck
slut
slutbag
smeg
snatch
spic
spick
splooge
suckass
tard
testicle
thundercunt
tit
titfuck
tits
tittyfuck
twat
twatlips
twats
twatwaffle
unclefucker
va-j-j
vag
vagina
vajayjay
vjayjay
wank
wankjob
wetback
whore
whorebag
whoreface
wop
