diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml
new file mode 100644
index 0000000..36fa9b8
--- /dev/null
+++ b/.github/workflows/format.yml
@@ -0,0 +1,29 @@
+name: Formatter
+
+on:
+ pull_request:
+ push:
+ branches: [main, develop]
+ tags: ["v*"]
+
+permissions:
+ contents: read
+
+jobs:
+ format:
+ name: Formatter check (ruff)
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Setup Python
+ uses: actions/setup-python@v5
+ with:
+ python-version: "3.12"
+ cache: pip
+
+ - name: Install ruff
+ run: pip install ruff
+
+ - name: Check formatting
+ run: ruff format --check .
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..128c089
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,32 @@
+name: Release
+
+on:
+ release:
+ types: [published]
+
+permissions:
+ contents: read
+
+jobs:
+ build-pypi:
+ name: Build and publish to PyPI
+ runs-on: ubuntu-latest
+ permissions:
+ id-token: write
+ environment:
+ name: pypi
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Build wheels
+ uses: PyO3/maturin-action@v1
+ with:
+ command: build
+ args: --release -o dist
+ sdist: true
+ manylinux: auto
+
+ - name: Publish to PyPI
+ uses: pypa/gh-action-pypi-publish@release/v1
+ with:
+ skip-existing: true
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
new file mode 100644
index 0000000..49e3f55
--- /dev/null
+++ b/.github/workflows/tests.yml
@@ -0,0 +1,75 @@
+name: Tests
+
+on:
+ pull_request:
+ push:
+ branches: [main, develop]
+ tags: ["v*"]
+
+permissions:
+ contents: read
+
+jobs:
+ test-rust:
+ name: Rust tests
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Setup Rust
+ uses: dtolnay/rust-toolchain@stable
+
+ - name: Run Rust tests
+ run: cargo test -p badwords-core
+
+ test-python:
+ name: Python tests (${{ matrix.python-version }})
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Setup Python
+ uses: actions/setup-python@v5
+ with:
+ python-version: ${{ matrix.python-version }}
+ cache: pip
+
+ - name: Install Rust
+ uses: dtolnay/rust-toolchain@stable
+
+ - name: Create venv
+ run: python -m venv .venv
+
+ - name: Install dependencies
+ run: |
+ source .venv/bin/activate
+ python -m pip install --upgrade pip
+ pip install maturin
+ cd python && maturin develop --release
+
+ - name: Install dev dependencies
+ run: source .venv/bin/activate && pip install pytest pytest-benchmark
+
+ - name: Run Python tests
+ run: source .venv/bin/activate && pytest tests/ -v -m "not benchmark"
+
+ test-wasm:
+ name: WASM tests
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Setup Rust
+ uses: dtolnay/rust-toolchain@stable
+ with:
+ targets: wasm32-unknown-unknown
+
+ - name: Install wasm-pack
+ run: cargo install wasm-pack
+
+ - name: Run WASM tests
+ run: cd rust/badwords-wasm && wasm-pack test --node
diff --git a/.gitignore b/.gitignore
index 7fe47c8..413753a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,9 +4,13 @@
__pycache__/
.ruff_cache
.mypy_cache
-*test*
dist
*.egg-info
.idea
t.py
-test.py
\ No newline at end of file
+test.py
+.venv
+venv
+_native/
+python/badwords/*.so
+target/
\ No newline at end of file
diff --git a/Cargo.lock b/Cargo.lock
new file mode 100644
index 0000000..3598a47
--- /dev/null
+++ b/Cargo.lock
@@ -0,0 +1,879 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 4
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "anes"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
+
+[[package]]
+name = "anstyle"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78"
+
+[[package]]
+name = "async-trait"
+version = "0.1.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
+
+[[package]]
+name = "badwords-core"
+version = "2.2.0"
+dependencies = [
+ "criterion",
+ "rustc-hash",
+ "serde",
+ "serde_json",
+ "strsim",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "badwords-examples"
+version = "0.1.0"
+dependencies = [
+ "badwords-core",
+]
+
+[[package]]
+name = "badwords-py"
+version = "2.2.0"
+dependencies = [
+ "badwords-core",
+ "pyo3",
+]
+
+[[package]]
+name = "badwords-wasm"
+version = "2.2.0"
+dependencies = [
+ "badwords-core",
+ "wasm-bindgen",
+ "wasm-bindgen-test",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.20.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
+
+[[package]]
+name = "cast"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
+
+[[package]]
+name = "cc"
+version = "1.2.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2"
+dependencies = [
+ "find-msvc-tools",
+ "shlex",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
+
+[[package]]
+name = "ciborium"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e"
+dependencies = [
+ "ciborium-io",
+ "ciborium-ll",
+ "serde",
+]
+
+[[package]]
+name = "ciborium-io"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757"
+
+[[package]]
+name = "ciborium-ll"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9"
+dependencies = [
+ "ciborium-io",
+ "half",
+]
+
+[[package]]
+name = "clap"
+version = "4.5.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2797f34da339ce31042b27d23607e051786132987f595b02ba4f6a6dffb7030a"
+dependencies = [
+ "clap_builder",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.5.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24a241312cea5059b13574bb9b3861cabf758b879c15190b37b6d6fd63ab6876"
+dependencies = [
+ "anstyle",
+ "clap_lex",
+]
+
+[[package]]
+name = "clap_lex"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831"
+
+[[package]]
+name = "criterion"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f"
+dependencies = [
+ "anes",
+ "cast",
+ "ciborium",
+ "clap",
+ "criterion-plot",
+ "is-terminal",
+ "itertools",
+ "num-traits",
+ "once_cell",
+ "oorandom",
+ "plotters",
+ "rayon",
+ "regex",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "tinytemplate",
+ "walkdir",
+]
+
+[[package]]
+name = "criterion-plot"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1"
+dependencies = [
+ "cast",
+ "itertools",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
+dependencies = [
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
+
+[[package]]
+name = "crunchy"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
+
+[[package]]
+name = "either"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
+
+[[package]]
+name = "find-msvc-tools"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
+
+[[package]]
+name = "futures-core"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"
+
+[[package]]
+name = "futures-task"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393"
+
+[[package]]
+name = "futures-util"
+version = "0.3.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "pin-project-lite",
+ "slab",
+]
+
+[[package]]
+name = "half"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b"
+dependencies = [
+ "cfg-if",
+ "crunchy",
+ "zerocopy",
+]
+
+[[package]]
+name = "heck"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
+
+[[package]]
+name = "hermit-abi"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c"
+
+[[package]]
+name = "indoc"
+version = "2.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706"
+dependencies = [
+ "rustversion",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2"
+
+[[package]]
+name = "js-sys"
+version = "0.3.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c"
+dependencies = [
+ "once_cell",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.182"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112"
+
+[[package]]
+name = "libm"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
+
+[[package]]
+name = "memchr"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
+
+[[package]]
+name = "memoffset"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "minicov"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4869b6a491569605d66d3952bcdf03df789e5b536e5f0cf7758a7f08a55ae24d"
+dependencies = [
+ "cc",
+ "walkdir",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.50.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
+dependencies = [
+ "autocfg",
+ "libm",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.21.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
+
+[[package]]
+name = "oorandom"
+version = "11.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
+
+[[package]]
+name = "plotters"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747"
+dependencies = [
+ "num-traits",
+ "plotters-backend",
+ "plotters-svg",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "plotters-backend"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a"
+
+[[package]]
+name = "plotters-svg"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670"
+dependencies = [
+ "plotters-backend",
+]
+
+[[package]]
+name = "portable-atomic"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.106"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "pyo3"
+version = "0.22.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f402062616ab18202ae8319da13fa4279883a2b8a9d9f83f20dbade813ce1884"
+dependencies = [
+ "cfg-if",
+ "indoc",
+ "libc",
+ "memoffset",
+ "once_cell",
+ "portable-atomic",
+ "pyo3-build-config",
+ "pyo3-ffi",
+ "pyo3-macros",
+ "unindent",
+]
+
+[[package]]
+name = "pyo3-build-config"
+version = "0.22.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b14b5775b5ff446dd1056212d778012cbe8a0fbffd368029fd9e25b514479c38"
+dependencies = [
+ "once_cell",
+ "target-lexicon",
+]
+
+[[package]]
+name = "pyo3-ffi"
+version = "0.22.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ab5bcf04a2cdcbb50c7d6105de943f543f9ed92af55818fd17b660390fc8636"
+dependencies = [
+ "libc",
+ "pyo3-build-config",
+]
+
+[[package]]
+name = "pyo3-macros"
+version = "0.22.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fd24d897903a9e6d80b968368a34e1525aeb719d568dba8b3d4bfa5dc67d453"
+dependencies = [
+ "proc-macro2",
+ "pyo3-macros-backend",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pyo3-macros-backend"
+version = "0.22.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36c011a03ba1e50152b4b394b479826cad97e7a21eb52df179cd91ac411cbfbe"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "pyo3-build-config",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rayon"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "regex"
+version = "1.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"
+
+[[package]]
+name = "rustc-hash"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
+
+[[package]]
+name = "rustversion"
+version = "1.0.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.228"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
+dependencies = [
+ "serde_core",
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_core"
+version = "1.0.228"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.228"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.149"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
+dependencies = [
+ "itoa",
+ "memchr",
+ "serde",
+ "serde_core",
+ "zmij",
+]
+
+[[package]]
+name = "shlex"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+
+[[package]]
+name = "slab"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
+
+[[package]]
+name = "strsim"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
+
+[[package]]
+name = "syn"
+version = "2.0.117"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "target-lexicon"
+version = "0.12.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
+
+[[package]]
+name = "tinytemplate"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unindent"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3"
+
+[[package]]
+name = "walkdir"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.114"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "rustversion",
+ "wasm-bindgen-macro",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9c5522b3a28661442748e09d40924dfb9ca614b21c00d3fd135720e48b67db8"
+dependencies = [
+ "cfg-if",
+ "futures-util",
+ "js-sys",
+ "once_cell",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.114"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.114"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3"
+dependencies = [
+ "bumpalo",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.114"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "wasm-bindgen-test"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6311c867385cc7d5602463b31825d454d0837a3aba7cdb5e56d5201792a3f7fe"
+dependencies = [
+ "async-trait",
+ "cast",
+ "js-sys",
+ "libm",
+ "minicov",
+ "nu-ansi-term",
+ "num-traits",
+ "oorandom",
+ "serde",
+ "serde_json",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-bindgen-test-macro",
+ "wasm-bindgen-test-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-test-macro"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67008cdde4769831958536b0f11b3bdd0380bde882be17fff9c2f34bb4549abd"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "wasm-bindgen-test-shared"
+version = "0.2.114"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfe29135b180b72b04c74aa97b2b4a2ef275161eff9a6c7955ea9eaedc7e1d4e"
+
+[[package]]
+name = "web-sys"
+version = "0.3.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "854ba17bb104abfb26ba36da9729addc7ce7f06f5c0f90f3c391f8461cca21f9"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "winapi-util"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "windows-link"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
+
+[[package]]
+name = "windows-sys"
+version = "0.61.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.8.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a789c6e490b576db9f7e6b6d661bcc9799f7c0ac8352f56ea20193b2681532e5"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.8.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f65c489a7071a749c849713807783f70672b28094011623e200cb86dcb835953"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "zmij"
+version = "1.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 0000000..1603ad2
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,27 @@
+[workspace]
+members = [
+ "rust/badwords-core",
+ "rust/badwords-py",
+ "rust/badwords-wasm",
+]
+
+[package]
+name = "badwords-examples"
+version = "0.1.0"
+edition = "2021"
+publish = false
+
+[[example]]
+name = "rust_basic"
+path = "examples/rust/rust_basic.rs"
+
+[[example]]
+name = "rust_chat_moderation"
+path = "examples/rust/rust_chat_moderation.rs"
+
+[[example]]
+name = "rust_specific_languages"
+path = "examples/rust/rust_specific_languages.rs"
+
+[dependencies]
+badwords-core = { path = "rust/badwords-core" }
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..fd73548
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,51 @@
+.PHONY: develop build test test-rust test-python test-wasm bench bench-rust bench-python wasm wasm-nodejs npm-publish lang-packages npm-publish-languages
+
+develop:
+ cd python && maturin develop
+ @SO=$$(find .venv -name "_native*.so" 2>/dev/null | head -1); \
+ if [ -n "$$SO" ]; then mkdir -p _native && cp "$$SO" _native/; fi
+
+build:
+ cd python && maturin build
+
+# Build for PyPI (manylinux wheels, requires Docker)
+build-pypi:
+ docker run --rm -v $(PWD):/io -w /io ghcr.io/pyo3/maturin build --release -o dist
+
+test: test-rust test-python test-wasm
+
+test-rust:
+ cargo test -p badwords-core
+
+test-python:
+ @if [ -d .venv ]; then .venv/bin/python -m pytest tests/ -v; \
+ else python3 -m pytest tests/ -v; fi
+
+test-wasm:
+ cd rust/badwords-wasm && wasm-pack test --node
+
+bench: bench-rust bench-python
+
+bench-rust:
+ cargo bench -p badwords-core
+
+bench-python:
+ @if [ -d .venv ]; then .venv/bin/python -m pytest tests/bench_filter.py -v --benchmark-only; \
+ else python3 -m pytest tests/bench_filter.py -v --benchmark-only; fi
+
+# WebAssembly build for browser
+wasm:
+ cd rust/badwords-wasm && wasm-pack build --target web --out-dir pkg
+
+# WebAssembly build for Node.js
+wasm-nodejs:
+ cd rust/badwords-wasm && wasm-pack build --target nodejs --out-dir pkg
+
+npm-publish:
+ cd rust/badwords-wasm/pkg && npm publish
+
+lang-packages:
+ python3 scripts/generate-lang-packages.py
+
+npm-publish-languages:
+ cd js/languages && npm publish --access public
diff --git a/README.md b/README.md
index 8285476..c8b9838 100644
--- a/README.md
+++ b/README.md
@@ -2,28 +2,46 @@
# 🚫 BadWords
-**High-performance profanity filter for Python with multilingual support and evasion detection.**
+**High-performance profanity filter for Python, Rust, and JavaScript (WebAssembly)
+with multilingual support and evasion detection.**
-[](https://www.python.org/)
+---
+
+[](https://github.com/FlacSy/badwords/actions/workflows/tests.yml)
+[](https://github.com/FlacSy/badwords/actions/workflows/format.yml)
[](https://opensource.org/licenses/MIT)
-[](#)
+[](https://badwords.flacsy.dev)
+[]()
-[](https://pepy.tech/projects/badwords-py)
-[)](https://pepy.tech/projects/bdw)
+[](https://www.python.org/)
+[](https://www.rust-lang.org/)
+[](https://developer.mozilla.org/en-US/docs/Web/JavaScript)
+[](https://www.typescriptlang.org/)
+
+[](https://pypi.org/project/badwords-py/)
+[](https://www.npmjs.com/package/badwords-wasm)
+[](https://www.npmjs.com/package/@badwords/languages)
+[](https://crates.io/crates/badwords-core)
+[](https://pepy.tech/projects/badwords-py)
+[](https://pepy.tech/projects/bdw)
+
+---
[Installation](#-installation) •
[Quick Start](#-quick-start) •
[Supported Languages](#-supported-languages) •
-[Advanced Evasion Detection](#-advanced-evasion-detection)
+[Evasion Detection](#-advanced-evasion-detection) •
+[Documentation](https://badwords.flacsy.dev)
-
---
## 📖 Description
`BadWords` is a sophisticated profanity filtering library designed to clean up user-generated content. Unlike simple keyword matching, it uses **similarity scoring**, **homoglyph detection**, and **transliteration** to catch even the most cleverly disguised insults.
+**Architecture:** The core is implemented in Rust for performance. Python provides a thin API layer with full type hints for IDE/linter support. The Rust library can also be used directly from Rust projects.
+
## 📦 Installation
### Requirements
@@ -80,14 +98,14 @@ print(clean_text) # "Some very *** text here"
## 🛠 Methods & API
-### `filter_text(text, match_threshold=0.8, replace_character=None)`
+### `filter_text(text, match_threshold=1.0, replace_character=None)`
The core method of the library.
| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `text` | `str` | Required | Input text to check. |
-| `match_threshold` | `float` | `0.8` | Similarity threshold (1.0 = exact match, 0.7 = aggressive). |
+| `match_threshold` | `float` | `1.0` | Similarity threshold (1.0 = exact match, 0.95 = fuzzy). |
| `replace_character` | `str/None` | `None` | If provided, returns censored string. If None, returns bool. |
> [!WARNING]
@@ -118,17 +136,21 @@ _filter.filter_text("привет") # Transliterated matches -> DETECTED
## 🌍 Supported Languages
-`BadWords` currently supports **26 languages** out of the box:
+`BadWords` supports **25 languages** out of the box:
| Code | Language | Code | Language | Code | Language |
-| --- | --- | --- | --- | --- | --- |
+|------|----------|------|----------|------|----------|
| `en` | English | `ru` | Russian | `ua` | Ukrainian |
| `de` | German | `fr` | French | `it` | Italian |
| `sp` | Spanish | `pl` | Polish | `cz` | Czech |
| `ja` | Japanese | `ko` | Korean | `th` | Thai |
-| ... | & 14 more | | | | |
+| `br` | Portuguese (BR) | `da` | Danish | `du` | Dutch |
+| `fi` | Finnish | `gr` | Greek | `hu` | Hungarian |
+| `in` | Indonesian | `lt` | Lithuanian | `no` | Norwegian |
+| `po` | Portuguese | `ro` | Romanian | `sw` | Swedish |
+| `tu` | Turkish | | | | |
-*Use `p.get_all_languages()` to see the full list in your code.*
+*Use `p.get_all_languages()` in code. Full list with word counts: [badwords.flacsy.dev](https://badwords.flacsy.dev/reference/languages/)*
---
@@ -163,6 +185,115 @@ if __name__ == "__main__":
---
+## 🦀 Rust API (badwords-core)
+
+Published on [crates.io](https://crates.io/crates/badwords-core):
+
+```toml
+[dependencies]
+badwords-core = "2"
+```
+
+```rust
+use badwords_core::{ProfanityFilter, default_resource_dir};
+
+let resource_dir = default_resource_dir();
+let mut filter = ProfanityFilter::new(&resource_dir, true, true, true, true);
+filter.init(None).unwrap();
+filter.add_words(&["custom".to_string()]);
+let (found, _) = filter.filter_text("hello", 1.0, None);
+```
+
+## 🌐 WebAssembly (JavaScript/TypeScript)
+
+Same Rust code for browser and Node.js, compiled to WASM.
+
+### Build
+
+```bash
+# Browser
+make wasm
+
+# Node.js
+make wasm-nodejs
+```
+
+### Frontend (browser)
+
+```html
+
+```
+
+### Backend (Node.js)
+
+```javascript
+const { ProfanityFilter } = require('badwords-wasm');
+const filter = new ProfanityFilter();
+filter.isBad('hello'); // false
+filter.censor('bad word', '*'); // "*** word"
+filter.addWords(['custom']);
+```
+
+### Optional languages (npm)
+
+Built-in: en and ru. Additional languages via `@badwords/languages`:
+
+```bash
+npm install badwords-wasm @badwords/languages
+```
+
+```javascript
+import init, { ProfanityFilter } from 'badwords-wasm';
+import de from '@badwords/languages/de';
+import ua from '@badwords/languages/ua';
+
+await init();
+const filter = new ProfanityFilter();
+filter.addWords(de);
+filter.addWords(ua);
+```
+
+Available: br, cz, da, de, du, en, fi, fr, gr, hu, in, it, ja, ko, lt, no, pl, po, ro, ru, sp, sw, th, tu, ua. See [@badwords/languages](https://www.npmjs.com/package/@badwords/languages).
+
+Examples: `examples/wasm/browser/`, `examples/wasm/node/`
+
+## 🔧 Building from source
+
+Requires: Rust, Python, maturin
+
+```bash
+python -m venv .venv && source .venv/bin/activate # Linux/macOS
+pip install maturin
+make develop
+# or: cd python && maturin build && pip install target/wheels/badwords_py-*.whl
+```
+
+## 🌐 WebAssembly (browser & Node.js)
+
+Build the WASM package (requires [wasm-pack](https://rustwasm.github.io/wasm-pack/installer/)):
+
+```bash
+cargo install wasm-pack
+make wasm
+```
+
+Output: `rust/badwords-wasm/pkg/` (npm package `badwords-wasm`)
+
+- **Browser:** Use the generated JS with a bundler or static server. See `examples/wasm/browser/`
+- **Node.js:** `import init, { ProfanityFilter } from 'badwords-wasm'` after `npm install`. See `examples/wasm/node/`
+- **Publish to npm:** `make wasm` or `make wasm-nodejs`, then `make npm-publish`
+- **Optional languages:** `@badwords/languages` — `make lang-packages` then `make npm-publish-languages`
+
+## 📚 Documentation
+
+Full documentation (Python, Rust, JavaScript) with examples and API reference: **[badwords.flacsy.dev](https://badwords.flacsy.dev)** (EN / RU).
+
## 🤝 Contributing
Contributions are what make the open-source community an amazing place to learn, inspire, and create.
diff --git a/RELEASE_CHECKLIST.md b/RELEASE_CHECKLIST.md
new file mode 100644
index 0000000..f6c3718
--- /dev/null
+++ b/RELEASE_CHECKLIST.md
@@ -0,0 +1,55 @@
+# Release Checklist
+
+## Versions (2.2.0)
+
+| Package | File | Publication |
+|---------|------|-------------|
+| badwords-py | pyproject.toml, python/pyproject.toml | PyPI |
+| badwords-core | rust/badwords-core/Cargo.toml | crates.io |
+| badwords-wasm | rust/badwords-wasm/Cargo.toml, pkg/ | npm |
+| @badwords/languages | js/languages/package.json | npm |
+
+## Before release
+
+- [ ] `make test` — all tests pass
+- [ ] `make bench` — benchmarks run
+- [ ] `make build` — Python wheel builds
+- [ ] `make wasm` and `make wasm-nodejs` — WASM builds
+- [ ] `make lang-packages` — language packages generated
+
+## Publishing
+
+### PyPI (badwords-py)
+
+PyPI rejects `linux_x86_64` wheels. Build in manylinux container:
+
+```bash
+docker run --rm -v $(pwd):/io ghcr.io/pyo3/maturin build --release -o dist
+twine upload dist/badwords_py-*.whl
+```
+
+Or use GitHub Actions: `.github/workflows/release.yml` publishes to PyPI on release.
+
+### crates.io (badwords-core)
+```bash
+cd rust/badwords-core && cargo publish
+```
+
+### npm (badwords-wasm)
+```bash
+make wasm-nodejs # or make wasm for browser
+make npm-publish
+```
+
+### npm (@badwords/languages)
+```bash
+make lang-packages
+make npm-publish-languages
+```
+
+## Post-publish verification
+
+- [ ] `pip install badwords-py` — installs
+- [ ] `npm install badwords-wasm` — installs
+- [ ] `npm install @badwords/languages` — installs
+- [ ] Examples work (examples/rust, examples/python, examples/wasm)
diff --git a/badwords/__init__.py b/badwords/__init__.py
deleted file mode 100644
index 34003f2..0000000
--- a/badwords/__init__.py
+++ /dev/null
@@ -1,5 +0,0 @@
-"""A library for effective moderation of content."""
-
-from .check import ProfanityFilter
-
-__all__ = ["ProfanityFilter"]
diff --git a/badwords/check.py b/badwords/check.py
deleted file mode 100644
index 993f705..0000000
--- a/badwords/check.py
+++ /dev/null
@@ -1,148 +0,0 @@
-"""Module for checking text for badwords."""
-
-from __future__ import annotations
-
-from difflib import SequenceMatcher
-from pathlib import Path
-from typing import TYPE_CHECKING
-
-from .exceptions import NotSupportedLanguage
-from .text_processor import TextProcessor
-
-if TYPE_CHECKING:
- from typing import Self
-else:
- Self = "NotSupportedLanguage"
-
-
-class ProfanityFilter:
- """A class for filtering profanity from text."""
-
- def init(
- self: Self,
- languages: list[str] | None = None,
- processing_normalize_text: bool = True,
- processing_aggressive_normalize: bool = True,
- processing_transliterate: bool = True,
- processing_replace_homoglyphs: bool = True,
- ) -> None:
- """Initialize the profanity filter.
-
- :param languages: List of languages to load profanity words for.
- :param processing_normalize_text: Enable text normalization for all loaded words and word to filter
- :param processing_aggressive_normalize: Enable aggressive text normalization for all loaded words and word to filter
- :param processing_transliterate: Enable transliteration of text for all loaded words and word to filter
- :param processing_replace_homoglyphs: Enable replacing of homoglyphs in the text for all loaded words and word to filter
- """
- self.resource_dir = Path(__file__).parent / "resource"
-
- self.text_processor = TextProcessor(
- processing_normalize_text=processing_normalize_text,
- processing_aggressive_normalize=processing_aggressive_normalize,
- processing_transliterate=processing_transliterate,
- processing_replace_homoglyphs=processing_replace_homoglyphs
- )
-
- self.language_files = self.initialize_language_files()
-
- if languages:
- if all(i in self.language_files for i in languages):
- self.language_files = languages
- else:
- raise NotSupportedLanguage
-
- self.bad_words = self.initialize_bad_words()
-
- def initialize_language_files(self: Self) -> list[str]:
- """Initialize language files.
-
- :return: Dictionary mapping language names to file paths.
- """
- return [str(path)[-6:-4] for path in (self.resource_dir).iterdir()]
-
- def initialize_bad_words(self: Self) -> set[str]:
- """Initialize the set of bad words from language files."""
- bad_words: set[str] = set()
-
- for lang in self.language_files:
- try:
- # Sanitize the language code to prevent path traversal
- lang = lang.lower().strip()
- if not lang.isalpha():
- continue
-
- file_path = self.resource_dir / f"{lang}.bdw"
- if not file_path.exists():
- continue
-
- with file_path.open(encoding="utf-8") as f:
- words = f.read().splitlines()
- processed_words = [self.text_processor.process_text(word) for word in words]
- bad_words.update(processed_words)
- except Exception as e:
- print(f"Error loading language file for {lang}: {e}")
- continue
-
- return bad_words
-
- def add_words(self: Self, words: list[str]) -> None:
- """Add custom profanity words to the filter.
-
- :param words: List of custom profanity words.
- """
- processed_words = [self.text_processor.process_text(word) for word in words]
- self.bad_words.update(processed_words)
-
- def similar(self: Self, a: str, b: str) -> float:
- """Compute similarity ratio between two strings.
-
- :param a: First string.
- :param b: Second string.
- :return: Similarity ratio.
- """
- return SequenceMatcher(None, a, b).ratio()
-
- def filter_text(
- self: Self, text: str,
- match_threshold: float | None = None,
- replace_character: str | None = None,
- ) -> bool | str:
- """Check if the given text contains profanity.
-
- :param text: Input text to check.
- :param match_threshold: Threshold for similarity match.
- :param replace_character: Character to replace profane words with. If None,
- return True/False.
- :return: True if profanity found, False otherwise. If replace_character is
- specified, return filtered text.
- """
- if not match_threshold:
- match_threshold = 1
-
- # Process the input text through all transformations
- processed_text = self.text_processor.process_text(text)
- words = processed_text.split()
-
- for word in words:
- # Check exact match
- if word in self.bad_words:
- if replace_character:
- return text.replace(word, replace_character * len(word))
- return True
-
- # Check similar matches if threshold is less than 1
- if 0 < match_threshold < 1:
- for bad_word in self.bad_words:
- if self.similar(word, bad_word) > match_threshold:
- if replace_character:
- return text.replace(word, replace_character * len(word))
- return True
-
- return False
-
- def get_all_languages(self: Self) -> list[str]:
- """Get a list of all available languages.
-
- :return: List of all language names.
- """
- return self.language_files
diff --git a/badwords/exceptions.py b/badwords/exceptions.py
deleted file mode 100644
index 5331754..0000000
--- a/badwords/exceptions.py
+++ /dev/null
@@ -1,16 +0,0 @@
-"""Exceptions module."""
-
-from typing import TYPE_CHECKING
-
-if TYPE_CHECKING:
- from typing import Self
-else:
- Self = "NotSupportedLanguage"
-
-
-class NotSupportedLanguage(BaseException):
- """Unsupport language check."""
-
- def __str__(self: Self) -> str:
- """String-like representation of exception."""
- return "This language is not supported"
diff --git a/badwords/text_processor.py b/badwords/text_processor.py
deleted file mode 100644
index 982a9d2..0000000
--- a/badwords/text_processor.py
+++ /dev/null
@@ -1,207 +0,0 @@
-"""Module for advanced text processing and normalization."""
-
-from __future__ import annotations
-
-import json
-import re
-import unicodedata
-from pathlib import Path
-from typing import Dict, Set
-
-class TextProcessor:
- """A class for advanced text processing and normalization."""
-
- def __init__(
- self,
- processing_normalize_text: bool = True,
- processing_aggressive_normalize: bool = True,
- processing_transliterate: bool = True,
- processing_replace_homoglyphs: bool = True,
- ) -> None:
- """Initialize the text processor."""
- self.processing_normalize_text = processing_normalize_text
- self.processing_aggressive_normalize = processing_aggressive_normalize
- self.processing_transliterate = processing_transliterate
- self.processing_replace_homoglyphs = processing_replace_homoglyphs
-
- self.resource_dir = Path(__file__).parent / 'resource'
- self.unicode_mappings = self._load_unicode_mappings()
-
- if self.processing_replace_homoglyphs == True:
- self.homoglyphs = self._load_homoglyphs()
-
- self.character_frequency = self._load_character_frequency()
-
- if self.processing_transliterate == True:
- self.cyrillic_to_latin = self._load_transliteration()
- self.latin_to_cyrillic = {v: k for k, v in self.cyrillic_to_latin.items()}
-
- if self.processing_replace_homoglyphs == True:
- self._build_homoglyph_map()
-
- self._build_frequency_map()
-
- def _load_unicode_mappings(self) -> Dict[str, str]:
- """Load Unicode mappings from JSON file."""
- with open(self.resource_dir / 'unicode_mappings.json', 'r', encoding='utf-8') as f:
- data = json.load(f)
- mappings = {}
- for category in data.values():
- mappings.update(category)
- return mappings
-
- def _load_homoglyphs(self) -> Dict[str, list[str]]:
- """Load homoglyph mappings from JSON file."""
- with open(self.resource_dir / 'homoglyphs.json', 'r', encoding='utf-8') as f:
- return json.load(f)
-
- def _load_character_frequency(self) -> Dict[str, list[str]]:
- """Load character frequency mappings from JSON file."""
- with open(self.resource_dir / 'character_frequency.json', 'r', encoding='utf-8') as f:
- return json.load(f)
-
- def _load_transliteration(self) -> Dict[str, str]:
- """Load transliteration mappings from JSON file."""
- with open(self.resource_dir / 'transliteration.json', 'r', encoding='utf-8') as f:
- data = json.load(f)
- return data['cyrillic_to_latin']
-
- def _build_homoglyph_map(self) -> None:
- """Build a comprehensive homoglyph map."""
- self.homoglyph_map: Dict[str, Set[str]] = {}
- for standard, variants in self.homoglyphs.items():
- self.homoglyph_map[standard] = set(variants)
- for variant in variants:
- if variant not in self.homoglyph_map:
- self.homoglyph_map[variant] = set()
- self.homoglyph_map[variant].add(standard)
-
- def _build_frequency_map(self) -> None:
- """Build a comprehensive frequency-based substitution map."""
- self.frequency_map: Dict[str, Set[str]] = {}
- for standard, variants in self.character_frequency.items():
- self.frequency_map[standard] = set(variants)
- for variant in variants:
- if variant not in self.frequency_map:
- self.frequency_map[variant] = set()
- self.frequency_map[variant].add(standard)
-
- def normalize_unicode(self, text: str) -> str:
- """Normalize Unicode characters to their basic form.
-
- Args:
- text: Input text to normalize.
-
- Returns:
- Normalized text.
- """
- text = unicodedata.normalize('NFKC', text)
-
- text = ''.join(c for c in text if not unicodedata.combining(c))
-
- text = text.lower()
-
- result = []
- for char in text:
- if char in self.unicode_mappings:
- result.append(self.unicode_mappings[char])
- else:
- result.append(char)
-
- return ''.join(result)
-
- def normalize_text(self, text: str) -> str:
- """Normalize text by converting to lowercase and removing diacritics.
-
- Args:
- text: Input text to normalize.
-
- Returns:
- Normalized text.
- """
- text = self.normalize_unicode(text)
-
- text = re.sub(r'[^\w\s]', '', text)
-
- return text
-
- def aggressive_normalize(self, text: str) -> str:
- """Perform aggressive text normalization.
-
- Args:
- text: Input text to normalize.
-
- Returns:
- Aggressively normalized text.
- """
- text = self.normalize_unicode(text)
-
- text = ''.join(c for c in text if c.isalnum() or c.isspace())
-
- text = ' '.join(text.split())
-
- return text
-
- def transliterate(self, text: str, to_latin: bool = True) -> str:
- """Transliterate text between Cyrillic and Latin.
-
- Args:
- text: Input text to transliterate.
- to_latin: If True, convert to Latin; if False, convert to Cyrillic.
-
- Returns:
- Transliterated text.
- """
- mapping = self.cyrillic_to_latin if to_latin else self.latin_to_cyrillic
- result = []
-
- for char in text:
- if char in mapping:
- result.append(mapping[char])
- else:
- result.append(char)
-
- return ''.join(result)
-
- def replace_homoglyphs(self, text: str) -> str:
- """Replace homoglyphs with their standard equivalents.
-
- Args:
- text: Input text to process.
-
- Returns:
- Text with homoglyphs replaced.
- """
- result = []
- for char in text:
- if char in self.homoglyph_map and self.homoglyph_map[char]:
- result.append(next(iter(self.homoglyph_map[char])))
- else:
- result.append(char)
- return ''.join(result)
-
- def process_text(self, text: str) -> str:
- """Apply all text processing steps in sequence.
-
- Args:
- text: Input text to process.
-
- Returns:
- Fully processed text.
- """
-
- txt = text
- if self.processing_normalize_text == True:
- txt = self.normalize_text(txt)
-
- if self.processing_aggressive_normalize == True:
- txt = self.aggressive_normalize(txt)
-
- if self.processing_transliterate == True:
- txt = self.transliterate(txt, to_latin=True)
- txt = self.transliterate(txt, to_latin=False)
-
- if self.processing_replace_homoglyphs == True:
- txt = self.replace_homoglyphs(txt)
-
- return txt
\ No newline at end of file
diff --git a/examples/README.md b/examples/README.md
new file mode 100644
index 0000000..b47f490
--- /dev/null
+++ b/examples/README.md
@@ -0,0 +1,43 @@
+# BadWords Examples
+
+Structure: `examples/rust/`, `examples/python/`, `examples/wasm/browser/`, `examples/wasm/node/`
+
+## Rust
+
+Requires: `cargo` (Rust), repo clone (for resources)
+
+```bash
+# Basic usage
+cargo run --example rust_basic
+
+# Chat moderation
+cargo run --example rust_chat_moderation
+
+# Specific languages
+cargo run --example rust_specific_languages
+```
+
+When using `badwords-core` from crates.io: `use badwords_core::{default_resource_dir, ProfanityFilter}`.
+
+## Python
+
+Requires: `badwords-py` installed (`pip install -e .` or `pip install badwords-py`)
+
+```bash
+# Basic usage
+python examples/python/basic.py
+
+# Chat moderation
+python examples/python/chat_moderation.py
+
+# All languages
+python examples/python/all_languages.py
+```
+
+Or from project root with package installed:
+
+```bash
+cd /path/to/BadWords
+pip install -e .
+python examples/python/basic.py
+```
diff --git a/examples/python/__init__.py b/examples/python/__init__.py
new file mode 100644
index 0000000..aba621d
--- /dev/null
+++ b/examples/python/__init__.py
@@ -0,0 +1 @@
+"""Python examples for badwords."""
diff --git a/examples/python/all_languages.py b/examples/python/all_languages.py
new file mode 100644
index 0000000..08d8c10
--- /dev/null
+++ b/examples/python/all_languages.py
@@ -0,0 +1,26 @@
+#!/usr/bin/env python3
+"""Load all available languages.
+
+Run: python examples/python/all_languages.py
+"""
+
+from badwords import ProfanityFilter
+
+
+def main() -> None:
+ p = ProfanityFilter()
+ p.init() # No languages = load all
+
+ langs = p.get_all_languages()
+ print(f"Loaded {len(langs)} languages: {langs}")
+
+ # Fuzzy matching
+ p.add_words(["badword"])
+ print(
+ "\nFuzzy match 'badw0rd' (threshold=0.9):",
+ p.filter_text("badw0rd", match_threshold=0.9),
+ )
+
+
+if __name__ == "__main__":
+ main()
diff --git a/examples/python/basic.py b/examples/python/basic.py
new file mode 100644
index 0000000..f3d7250
--- /dev/null
+++ b/examples/python/basic.py
@@ -0,0 +1,39 @@
+#!/usr/bin/env python3
+"""Basic usage of badwords (Python).
+
+Run: python examples/python/basic.py
+ or: python -m examples.python.basic (from project root)
+"""
+
+from badwords import ProfanityFilter
+
+
+def main() -> None:
+ p = ProfanityFilter()
+ p.init(languages=["en", "ru"])
+
+ # Check clean text
+ print("'hello world' contains profanity:", p.filter_text("hello world"))
+
+ # Check text with profanity
+ print("'sonofabitch' contains profanity:", p.filter_text("sonofabitch"))
+
+ # Add custom words
+ p.add_words(["custombad"])
+ print("'custombad' (custom) contains profanity:", p.filter_text("custombad"))
+
+ # Censoring
+ p.init(
+ languages=["en"],
+ processing_transliterate=False,
+ processing_replace_homoglyphs=False,
+ )
+ p.add_words(["bad"])
+ result = p.filter_text("a bad word", replace_character="*")
+ print("Censored:", result)
+
+ print("\nAvailable languages:", p.get_all_languages())
+
+
+if __name__ == "__main__":
+ main()
diff --git a/examples/python/chat_moderation.py b/examples/python/chat_moderation.py
new file mode 100644
index 0000000..278a83a
--- /dev/null
+++ b/examples/python/chat_moderation.py
@@ -0,0 +1,29 @@
+#!/usr/bin/env python3
+"""Chat moderation example.
+
+Run: python examples/python/chat_moderation.py
+"""
+
+from badwords import ProfanityFilter
+
+
+def main() -> None:
+ p = ProfanityFilter()
+ p.init(languages=["en", "ru"])
+ p.add_words(["spam_link", "scam_bot"])
+
+ messages = [
+ "Hey! Check out this cool link",
+ "Hello, how are you?",
+ "Visit spam_link for free stuff",
+ "This is scam_bot trying to reach you",
+ ]
+
+ for msg in messages:
+ is_bad = p.filter_text(msg)
+ status = "BLOCKED" if is_bad else "OK"
+ print(f"[{status}] {msg}")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/examples/rust/rust_basic.rs b/examples/rust/rust_basic.rs
new file mode 100644
index 0000000..f061fc2
--- /dev/null
+++ b/examples/rust/rust_basic.rs
@@ -0,0 +1,34 @@
+//! Basic usage of badwords-rs
+//!
+//! Run: cargo run --example rust_basic
+
+use badwords_core::{default_resource_dir, ProfanityFilter};
+
+fn main() {
+ let resource_dir = default_resource_dir();
+ let mut filter = ProfanityFilter::new(&resource_dir, true, true, true, true);
+
+ filter.init(None).expect("Failed to init");
+
+ // Check clean text
+ let (found, _) = filter.filter_text("hello world", 1.0, None);
+ println!("'hello world' contains profanity: {}", found);
+
+ // Check text with profanity
+ let (found, _) = filter.filter_text("sonofabitch", 1.0, None);
+ println!("'sonofabitch' contains profanity: {}", found);
+
+ // Add custom words
+ filter.add_words(&["custombad".to_string()]);
+ let (found, _) = filter.filter_text("custombad", 1.0, None);
+ println!("'custombad' (custom) contains profanity: {}", found);
+
+ // Censoring (add word for predictable result)
+ filter.add_words(&["bad".to_string()]);
+ let (found, result) = filter.filter_text("a bad word", 1.0, Some('*'));
+ if let (true, Some(censored)) = (found, result) {
+ println!("Censored: {}", censored);
+ }
+
+ println!("\nAvailable languages: {:?}", filter.get_all_languages());
+}
diff --git a/examples/rust/rust_chat_moderation.rs b/examples/rust/rust_chat_moderation.rs
new file mode 100644
index 0000000..9ad7061
--- /dev/null
+++ b/examples/rust/rust_chat_moderation.rs
@@ -0,0 +1,26 @@
+//! Chat moderation example
+//!
+//! Run: cargo run --example rust_chat_moderation
+
+use badwords_core::{default_resource_dir, ProfanityFilter};
+
+fn main() {
+ let resource_dir = default_resource_dir();
+ let mut filter = ProfanityFilter::new(&resource_dir, true, true, true, true);
+
+ filter.init(Some(&["en".to_string(), "ru".to_string()])).expect("Failed to init");
+ filter.add_words(&["spam_link".to_string(), "scam_bot".to_string()]);
+
+ let messages = [
+ "Hey! Check out this cool link",
+ "Hello, how are you?",
+ "Visit spam_link for free stuff",
+ "This is scam_bot trying to reach you",
+ ];
+
+ for msg in messages {
+ let (found, _) = filter.filter_text(msg, 1.0, None);
+ let status = if found { "BLOCKED" } else { "OK" };
+ println!("[{}] {}", status, msg);
+ }
+}
diff --git a/examples/rust/rust_specific_languages.rs b/examples/rust/rust_specific_languages.rs
new file mode 100644
index 0000000..de67f14
--- /dev/null
+++ b/examples/rust/rust_specific_languages.rs
@@ -0,0 +1,21 @@
+//! Load specific languages only
+//!
+//! Run: cargo run --example rust_specific_languages
+
+use badwords_core::{default_resource_dir, ProfanityFilter};
+
+fn main() {
+ let resource_dir = default_resource_dir();
+ let mut filter = ProfanityFilter::new(&resource_dir, true, true, true, true);
+
+ // Load only English and German
+ let languages = vec!["en".to_string(), "de".to_string()];
+ filter.init(Some(&languages)).expect("Failed to init");
+
+ println!("Loaded languages: {:?}", filter.get_all_languages());
+
+ // Fuzzy matching with threshold
+ filter.add_words(&["badword".to_string()]);
+ let (found, _) = filter.filter_text("badw0rd", 0.9, None);
+ println!("Fuzzy match 'badw0rd': {}", found);
+}
diff --git a/examples/wasm/README.md b/examples/wasm/README.md
new file mode 100644
index 0000000..ad9d763
--- /dev/null
+++ b/examples/wasm/README.md
@@ -0,0 +1,44 @@
+# BadWords WASM Examples
+
+WebAssembly build for JavaScript/TypeScript — browser and Node.js.
+
+## Build
+
+From project root:
+
+```bash
+# Browser (ES modules, async init)
+make wasm
+
+# Node.js (CommonJS, sync)
+make wasm-nodejs
+```
+
+Requires: `cargo install wasm-pack`
+
+## Browser
+
+```bash
+make wasm
+# Option 1: from project root
+npx serve . -p 3000
+
+# Option 2: from example folder
+cd examples/wasm/browser && npm start
+```
+
+Open: **http://localhost:3000/examples/wasm/browser/**
+
+## Node.js
+
+```bash
+make wasm-nodejs
+node examples/wasm/node/index.js
+```
+
+## Node.js (TypeScript)
+
+```bash
+make wasm-nodejs
+npx tsx examples/wasm/node/index.ts
+```
diff --git a/examples/wasm/browser/index.html b/examples/wasm/browser/index.html
new file mode 100644
index 0000000..59dd43f
--- /dev/null
+++ b/examples/wasm/browser/index.html
@@ -0,0 +1,72 @@
+
+
+
+
+
+ BadWords WASM - Profanity Filter Demo
+
+
+
+ BadWords WASM - Profanity Filter
+ Enter text to check for profanity. Supports English and Russian with homoglyph/transliteration detection.
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/wasm/browser/package.json b/examples/wasm/browser/package.json
new file mode 100644
index 0000000..8f59f8c
--- /dev/null
+++ b/examples/wasm/browser/package.json
@@ -0,0 +1,8 @@
+{
+ "name": "badwords-wasm-browser-example",
+ "version": "1.0.0",
+ "private": true,
+ "scripts": {
+ "start": "cd ../../.. && npx serve . -p 3000"
+ }
+}
diff --git a/examples/wasm/node/index.js b/examples/wasm/node/index.js
new file mode 100644
index 0000000..b7e6abf
--- /dev/null
+++ b/examples/wasm/node/index.js
@@ -0,0 +1,39 @@
+/**
+ * BadWords WASM - Node.js example
+ *
+ * Build for Node.js first: make wasm-nodejs
+ * Run: node examples/wasm/backend/index.js
+ *
+ * Note: Node.js build uses CommonJS (synchronous load, no init needed)
+ */
+
+const { ProfanityFilter } = require('../../../crates/badwords-wasm/pkg/badwords_wasm.js');
+
+function main() {
+ const filter = new ProfanityFilter();
+
+ // Check for profanity
+ console.log('Languages:', filter.getLanguages());
+ console.log('');
+
+ const tests = [
+ 'Hello, nice day!',
+ 'Some bad word here',
+ 'h3ll0 with numbers',
+ 'привет мир',
+ ];
+
+ for (const text of tests) {
+ const isBad = filter.isBad(text);
+ const censored = filter.censor(text, '*');
+ console.log(`"${text}"`);
+ console.log(` isBad: ${isBad}, censored: "${censored}"`);
+ console.log('');
+ }
+
+ // Add custom words
+ filter.addWords(['custom_bad_word']);
+ console.log('After adding "custom_bad_word":', filter.isBad('This has custom_bad_word'));
+}
+
+main();
diff --git a/examples/wasm/node/index.ts b/examples/wasm/node/index.ts
new file mode 100644
index 0000000..a8ae139
--- /dev/null
+++ b/examples/wasm/node/index.ts
@@ -0,0 +1,36 @@
+/**
+ * BadWords WASM - Node.js TypeScript example
+ *
+ * Build: make wasm-nodejs
+ * Run: npx tsx examples/wasm/node/index.ts
+ */
+
+// @ts-ignore - CommonJS wasm module
+const { ProfanityFilter } = require('../../../rust/badwords-wasm/pkg/badwords_wasm.js');
+
+function main(): void {
+ const filter = new ProfanityFilter();
+
+ console.log('Languages:', filter.getLanguages());
+ console.log('');
+
+ const tests = [
+ 'Hello, nice day!',
+ 'Some bad word here',
+ 'h3ll0 with numbers',
+ 'привет мир',
+ ];
+
+ for (const text of tests) {
+ const isBad = filter.isBad(text);
+ const censored = filter.censor(text, '*');
+ console.log(`"${text}"`);
+ console.log(` isBad: ${isBad}, censored: "${censored}"`);
+ console.log('');
+ }
+
+ filter.addWords(['custom_bad_word']);
+ console.log('After adding "custom_bad_word":', filter.isBad('This has custom_bad_word'));
+}
+
+main();
diff --git a/examples/wasm/node/package.json b/examples/wasm/node/package.json
new file mode 100644
index 0000000..b2edd58
--- /dev/null
+++ b/examples/wasm/node/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "badwords-wasm-node-example",
+ "version": "1.0.0",
+ "description": "Node.js example for badwords-wasm"
+}
diff --git a/js/languages/README.md b/js/languages/README.md
new file mode 100644
index 0000000..e40bc70
--- /dev/null
+++ b/js/languages/README.md
@@ -0,0 +1,26 @@
+# @badwords/languages
+
+Optional language word lists for [badwords-wasm](https://www.npmjs.com/package/badwords-wasm).
+
+## Usage
+
+```bash
+npm install badwords-wasm @badwords/languages
+```
+
+```javascript
+import init, { ProfanityFilter } from 'badwords-wasm';
+import de from '@badwords/languages/de';
+import ua from '@badwords/languages/ua';
+
+await init();
+const filter = new ProfanityFilter();
+filter.addWords(de);
+filter.addWords(ua);
+
+filter.isBad('some text'); // uses en+ru (built-in) + de + ua
+```
+
+## Available languages
+
+br, cz, da, de, du, en, fi, fr, gr, hu, in, it, ja, ko, lt, no, pl, po, ro, ru, sp, sw, th, tu, ua
diff --git a/js/languages/index.js b/js/languages/index.js
new file mode 100644
index 0000000..b3605ad
--- /dev/null
+++ b/js/languages/index.js
@@ -0,0 +1,28 @@
+// Auto-generated. Use @badwords/languages/de etc. for tree-shaking.
+module.exports = {
+ br: require("./lang/br.json"),
+ cz: require("./lang/cz.json"),
+ da: require("./lang/da.json"),
+ de: require("./lang/de.json"),
+ du: require("./lang/du.json"),
+ en: require("./lang/en.json"),
+ fi: require("./lang/fi.json"),
+ fr: require("./lang/fr.json"),
+ gr: require("./lang/gr.json"),
+ hu: require("./lang/hu.json"),
+ in: require("./lang/in.json"),
+ it: require("./lang/it.json"),
+ ja: require("./lang/ja.json"),
+ ko: require("./lang/ko.json"),
+ lt: require("./lang/lt.json"),
+ no: require("./lang/no.json"),
+ pl: require("./lang/pl.json"),
+ po: require("./lang/po.json"),
+ ro: require("./lang/ro.json"),
+ ru: require("./lang/ru.json"),
+ sp: require("./lang/sp.json"),
+ sw: require("./lang/sw.json"),
+ th: require("./lang/th.json"),
+ tu: require("./lang/tu.json"),
+ ua: require("./lang/ua.json"),
+};
\ No newline at end of file
diff --git a/js/languages/lang/br.json b/js/languages/lang/br.json
new file mode 100644
index 0000000..2134ae5
--- /dev/null
+++ b/js/languages/lang/br.json
@@ -0,0 +1,121 @@
+[
+"foderíamos",
+"fodêssemos",
+"foderíeis",
+"fodêramos",
+"fodêsseis",
+"merdimbuca",
+"putariinha",
+"chibundas",
+"chibundos",
+"cácété",
+"foderemos",
+"fodêreis",
+"fodíamos",
+"fudeção",
+"putariona",
+"boasudas",
+"boazudas",
+"cassetas",
+"chibunda",
+"chibundo",
+"culhões",
+"cunhões",
+"foderdes",
+"fodereis",
+"foderiam",
+"foderias",
+"fodermos",
+"foderás",
+"foderão",
+"fodessem",
+"fodesses",
+"fodestes",
+"fodíeis",
+"fudecão",
+"fudeçao",
+"fudidas?",
+"fudidos?",
+"peithola",
+"putarias",
+"xibundas",
+"xibundos",
+"babacas",
+"boasuda",
+"boazuda",
+"cacetas",
+"cacetes",
+"casseta",
+"cassete",
+"culhoes",
+"culhão",
+"cunhoes",
+"cunhão",
+"curalho",
+"fodamos",
+"fodasse",
+"fodemos",
+"fodendo",
+"foderam",
+"foderas",
+"foderei",
+"foderem",
+"foderes",
+"foderia",
+"foderum",
+"foderá",
+"fodesse",
+"fodeste",
+"fodinha",
+"fudecao",
+"fudedor",
+"fudendo",
+"furonas",
+"putaria",
+"putães",
+"putãos",
+"putões",
+"xibunda",
+"xibundo",
+"babaca",
+"bostas",
+"caceta",
+"cacete",
+"culhao",
+"cunhao",
+"fodais",
+"fodeis",
+"fodera",
+"fodete",
+"fodiam",
+"fodias",
+"fodão",
+"furona",
+"furão",
+"merdas",
+"putão",
+"sefoda",
+"bosta",
+"fodam",
+"fodao",
+"fodas",
+"fodei",
+"fodem",
+"foder",
+"fodes",
+"fodeu",
+"fodia",
+"fuder",
+"fudeu",
+"furao",
+"merda",
+"porra",
+"putos",
+"foda",
+"fode",
+"fodi",
+"fodo",
+"puto",
+"cus",
+"cu"
+]
\ No newline at end of file
diff --git a/js/languages/lang/cz.json b/js/languages/lang/cz.json
new file mode 100644
index 0000000..20cd9f6
--- /dev/null
+++ b/js/languages/lang/cz.json
@@ -0,0 +1,53 @@
+[
+"pokurvená",
+"pokurvení",
+"pokurvený",
+"pomočená",
+"pomočený",
+"zkurvysyni",
+"pochcaná",
+"pochcaný",
+"pochčije",
+"prasárna",
+"prasárny",
+"zkurvená",
+"zkurvení",
+"zkurvený",
+"zkurvysyn",
+"chcánky",
+"hovadina",
+"hovadiny",
+"kadění",
+"kokotina",
+"kokotiny",
+"pokurvit",
+"pokurví",
+"prdění",
+"chcaní",
+"chčije",
+"pochcat",
+"sračka",
+"sračky",
+"zkurvil",
+"zkurvit",
+"zkurví",
+"chcát",
+"mamrdi",
+"prdele",
+"prdět",
+"řitě",
+"hovna",
+"hovno",
+"kadit",
+"kadí",
+"kruci",
+"mamrd",
+"prdel",
+"sakra",
+"satan",
+"srát",
+"řiť",
+"prdy",
+"sere",
+"prd"
+]
\ No newline at end of file
diff --git a/js/languages/lang/da.json b/js/languages/lang/da.json
new file mode 100644
index 0000000..279cf50
--- /dev/null
+++ b/js/languages/lang/da.json
@@ -0,0 +1,62 @@
+[
+"åndsforsnottet",
+"skidespræller",
+"skvadderhoved",
+"pestspreder",
+"skvatpisser",
+"spytslikker",
+"torskepande",
+"undermåler",
+"åndsamøbe",
+"danglebær",
+"dinglebær",
+"lortefjæs",
+"lusepuster",
+"pattebørn",
+"pladderabe",
+"ringlebær",
+"satanedeme",
+"sjatpisser",
+"tøsedreng",
+"åndsbolle",
+"ærkefjols",
+"øgleyngel",
+"agurketud",
+"forpulede",
+"kvabodder",
+"kvajhoved",
+"kvajpande",
+"lorteøre",
+"pattebarn",
+"slapsvans",
+"forpulet",
+"nakkeost",
+"narrehat",
+"pikfjæs",
+"pikhoved",
+"skiderik",
+"abelort",
+"fandeme",
+"fåking",
+"fåkker",
+"møgdyr",
+"narrøv",
+"urinere",
+"bovlam",
+"fanden",
+"fandme",
+"focker",
+"narhat",
+"satan",
+"satme",
+"skide",
+"skvat",
+"fock",
+"fåk",
+"lort",
+"pjok",
+"skid",
+"svin",
+"urin",
+"sgu"
+]
\ No newline at end of file
diff --git a/js/languages/lang/de.json b/js/languages/lang/de.json
new file mode 100644
index 0000000..3b027a7
--- /dev/null
+++ b/js/languages/lang/de.json
@@ -0,0 +1,64 @@
+[
+"leckmich[ai]m[aä]rsche?",
+"huren?s[oö]hne?",
+"schlappschwänze",
+"geht?sterben",
+"schwanzlutscher",
+"muschileckerin",
+"pferdescheiße",
+"schei(ss|ß)e?",
+"schlappschwanz",
+"drecksbälger",
+"mutterfick\\w+",
+"sackgesichter",
+"schwanzköpfe",
+"wichsvorlagen",
+"angeschissen",
+"dreckstücke",
+"fickteuch",
+"gottverdammt",
+"kackbratzen?",
+"muschilecker",
+"wichsvorlage",
+"dreckskerle",
+"dreckstück",
+"hackfressen",
+"ihraffen",
+"sackgesicht",
+"saftärsche",
+"scheißkerl",
+"schwanzkopf",
+"verfickt",
+"drecksbalg",
+"dreckskerl",
+"drecksäue",
+"geschissen",
+"hackfresse",
+"kackfresse",
+"schlampen?",
+"arschloch",
+"drecksack",
+"huren?",
+"saftarsch",
+"schnepfen",
+"arsch",
+"drecksau",
+"fickdich",
+"sauhunde",
+"saukerle",
+"schnepfe",
+"brunzen",
+"fettsau",
+"sauhund",
+"saukerl",
+"seichen",
+"wichser",
+"kacke?",
+"poppen",
+"schiss",
+"husos",
+"pisse",
+"pisst",
+"huso",
+"nutte"
+]
\ No newline at end of file
diff --git a/js/languages/lang/du.json b/js/languages/lang/du.json
new file mode 100644
index 0000000..8e14a63
--- /dev/null
+++ b/js/languages/lang/du.json
@@ -0,0 +1,41 @@
+[
+"opsodemieteren",
+"hoerententen",
+"godverdomme",
+"hoeretenten",
+"volkomenkut",
+"hoerentent",
+"opdonderen",
+"schijterts",
+"hoeretent",
+"rotzakken",
+"schijterd",
+"schijters",
+"schijtert",
+"slappelul",
+"verkloten",
+"goddomme",
+"godsamme",
+"kankeren",
+"oprotten",
+"schijten",
+"schijter",
+"verdomme",
+"verkloot",
+"pleuris",
+"rukkers",
+"schurft",
+"verdomd",
+"godver",
+"rotzak",
+"rukker",
+"scheit",
+"schijt",
+"stront",
+"tering",
+"zeiken",
+"klote",
+"tyfus",
+"gvd",
+"kut"
+]
\ No newline at end of file
diff --git a/js/languages/lang/en.json b/js/languages/lang/en.json
new file mode 100644
index 0000000..834053e
--- /dev/null
+++ b/js/languages/lang/en.json
@@ -0,0 +1,68 @@
+[
+"(ape|bat|bull?|butt|dip|dog|dumb|ebo|holy|horse|jack|pedo|pig|ubi)sh(it|ti)s?",
+"d[il]+(ck|kc)(ass|bag|breath|eat|face|flip|head|hole|less|suck|weed)",
+"f[chj]?(a|au|aw|e|o+|u|uy)[ch]*k(e?d|e?rs?|[ei]?n+g?|t)",
+"m[aou](d+|t+|th|ht|z)(a|e|er|ir|ur)(c|f)c?[aou]c?k",
+"m[ou]th(a|er)(f|ph)[vue]+c?[gkqx]+(e?d|e?r|[ei]?n+g?)",
+"f[vu]+h*c+[hjvk]*(e?d|e?r|[ei]?n+g?|t)",
+"b+i+a*t+c+h+(e+d|e*r?[sz]+|[ei]?n+g?|y)",
+"f[vu]+c?[xkq]+(e?d|e?r|[ei]?n+g?|t)",
+"p(oo+|u+)s+(a+y+|e+|eh|ey|i+|ie|y+)s*",
+"m[ou]th(a|er)(f|ph)[vue]+c?[gkqx]+",
+"f[vu]+h*q(e?d|e?r|[ei]?n+g?|t)",
+"f[chj]?(a|au|aw|e|o+|u|uy)[ch]*k",
+"f[ck]+(e?d|e?r|[ei]?n+g?|t)",
+"kill your self",
+"fucking",
+"dumb(f|ph)[vu]+c?[xkq]",
+"c(oc?|aw)ksuc?k",
+"d[il]+(ck|kc)(ed|ing)",
+"ph[vu]+h*c+[hjvk]*",
+"sonofabitch",
+"who+re(ed|ing|s)",
+"c(o|ah|aw)c?k(s|ed)",
+"s+h+[ily]+t+[ersy]*",
+"a+ss+w?hole?",
+"ph[vu]+c?[xkq]+",
+"f[vu]+c?[xkq]+",
+"bull+sh+[ily]+t+",
+"goddamn?it",
+"goddamn?",
+"a+ss+fu",
+"c(o|ah|aw)c?k",
+"d[il]+(ck|kc)",
+"b+i+a*t+c+h+",
+"buttfu",
+"cumm(er|ing)",
+"f[vu]+h*c",
+"f[vu]+h*q",
+"sh+i+[ae]+t+",
+"c+u+n+t+",
+"d+i+c+k+s*",
+"a+sholes?",
+"sh+e+i+t+",
+"F\\.U\\.C\\.K",
+"chodes?",
+"cumshot",
+"fucking",
+"shit",
+"shtpost",
+"who+re?",
+"cumbag",
+"twats?",
+"cums?",
+"dafuq",
+"diсk",
+"coq+",
+"hore",
+"kock",
+"shat",
+"dik",
+"fck",
+"negr[ao]+e?s?",
+"f+u+c+k+",
+"fцск",
+"shіtty",
+"f_uc_k",
+"pussy"
+]
\ No newline at end of file
diff --git a/js/languages/lang/fi.json b/js/languages/lang/fi.json
new file mode 100644
index 0000000..1b00a7b
--- /dev/null
+++ b/js/languages/lang/fi.json
@@ -0,0 +1,59 @@
+[
+"perkeleeseen",
+"perkeleessä",
+"perkeleestä",
+"perkeleelle",
+"perkelettä",
+"vittupään",
+"vittupäät",
+"paskanaama",
+"vittupää",
+"jumalauta",
+"paskattaa",
+"paskoihin",
+"perkeleen",
+"perkeleet",
+"mulkeron",
+"mulkerot",
+"paskalla",
+"paskalle",
+"paskalta",
+"paskassa",
+"paskasta",
+"paskojen",
+"saatanaa",
+"saatanan",
+"saatanat",
+"aashole",
+"hitolla",
+"hitossa",
+"hitosta",
+"hittoon",
+"kyrpiä",
+"mulkero",
+"paskaan",
+"paskoja",
+"perkele",
+"perkule",
+"perseen",
+"pissata",
+"saatana",
+"kyrpii",
+"paskaa",
+"paskan",
+"paskat",
+"paskoi",
+"paskoo",
+"paskot",
+"pissaa",
+"hiton",
+"hitot",
+"hitto",
+"paska",
+"perse",
+"pissa",
+"prkle",
+"viddu",
+"prkl",
+"prk"
+]
\ No newline at end of file
diff --git a/js/languages/lang/fr.json b/js/languages/lang/fr.json
new file mode 100644
index 0000000..618fa1e
--- /dev/null
+++ b/js/languages/lang/fr.json
@@ -0,0 +1,114 @@
+[
+"péterlescouilles",
+"fermersagueule",
+"fermetagueule",
+"putaindemerde",
+"rienàenculer",
+"traces?depneu",
+"rienàfoutre",
+"trousdeballe",
+"cassecouilles?",
+"troudeballe",
+"nulàchier",
+"trouducune",
+"trousducul",
+"envoyerchier",
+"trouducul",
+"dégueulasses",
+"dégueulasse",
+"empapaoutage",
+"cassecul",
+"emmerdeuses",
+"partouzeurs",
+"sallopperie",
+"conneries?",
+"couillasse",
+"emmerdeurs",
+"emmerdeuse",
+"enchier",
+"moule-bite",
+"partouzeur",
+"plancul",
+"saloperies",
+"salopperie",
+"emmerdant",
+"emmerdent",
+"emmerdeur",
+"merdeuses",
+"merdiques",
+"nulach’",
+"partouzer",
+"saloperie",
+"tappinner",
+"anculés",
+"ankulés",
+"caguette",
+"chiasses",
+"coneries",
+"couilles",
+"dégueux",
+"emmerder",
+"emmerdé",
+"merdasse",
+"merdeuse",
+"merdiers",
+"merdique",
+"mollards",
+"partouse",
+"partouze",
+"queutard",
+"tapinner",
+"tappiner",
+"trouducs",
+"anculé",
+"ankulé",
+"baisent",
+"baisée",
+"chiasse",
+"chibres",
+"conerie",
+"conneau",
+"couille",
+"merdeux",
+"merdier",
+"merdiks",
+"mollard",
+"partouz",
+"tapiner",
+"tapiné",
+"trouduc",
+"baises",
+"baisé",
+"burnes",
+"caguer",
+"chibre",
+"chiure",
+"chiée",
+"choune",
+"clille",
+"connes",
+"glaoui",
+"merder",
+"merdes",
+"merdik",
+"merdé",
+"nulach",
+"pisser",
+"pissé",
+"putain",
+"baise",
+"burne",
+"chier",
+"conne",
+"fions",
+"juter",
+"merde",
+"pisse",
+"yeule",
+"cons",
+"culs",
+"fion",
+"con",
+"cul",
+"kul"
+]
\ No newline at end of file
diff --git a/js/languages/lang/gr.json b/js/languages/lang/gr.json
new file mode 100644
index 0000000..d3006c5
--- /dev/null
+++ b/js/languages/lang/gr.json
@@ -0,0 +1,472 @@
+[
+"μπουρδελότσαρκες",
+"μπουρδελιάρηδες",
+"μπουρδελιάρηδων",
+"μπουρδελότσαρκα",
+"μπουτσοσκάμπιλο",
+"πουστοφέρνουμαι",
+"αρχιδοσκάμπιλο",
+"κωλοπαιδαράδες",
+"μαλακομπούκωμα",
+"μαλακοπίτουρας",
+"μουνογλείφτρες",
+"πουτσογλείφτρα",
+"πουτσοσκάμπιλο",
+"πουτσοσφάλιαρο",
+"σαβουρογάμηδες",
+"τσιμπουκλούδες",
+"τσιμπουκλόβιες",
+"τσιμπουκλόβιος",
+"ψωλαρμενίζουμε",
+"ψωλοπιπιλίστρα",
+"αρχιδομαλάκας",
+"βυζομπαλίτσες",
+"γεροντομούνες",
+"καραπουτανάρα",
+"καραπουτσάρες",
+"κλασομπανιέρα",
+"κλαψομουνίτσα",
+"μαλακιζόμαστε",
+"μαλακιστήκαμε",
+"μαλακιστήκατε",
+"μουνογλείφτες",
+"μουνογλείφτης",
+"μουνογλείφτρα",
+"μουνογλύφτρες",
+"παλιοκαργιόλα",
+"παλιοχαμούρες",
+"πουστοφέρνετε",
+"πουστοφέρνουν",
+"πουτανίστικου",
+"πουτανιάρηδες",
+"πουτανιάρηδων",
+"πουτσογλύφτρα",
+"πρωτομουνίαση",
+"ρουφοκαβλέτες",
+"σκυλομούρηδες",
+"σκυλομούρηδων",
+"τσιμπουκλόβια",
+"φτωχομπινέδες",
+"ψωλαρμενίζετε",
+"ψωλαρμενίζουν",
+"ψωλοαρμένισσα",
+"ψωλορουφήχτρα",
+"αγαθομουνάκι",
+"βυζοσκάμπιλο",
+"γεροντομούνα",
+"γκαβλωράπανο",
+"καβλοτίμονος",
+"καραμουνάρες",
+"καραπουτσάρα",
+"καυλοτίμονος",
+"κωλοπαιδαράς",
+"κωλοτρυπίδες",
+"κωλοτρυπίδων",
+"κωλοφεράντζα",
+"μαλακίζονται",
+"μαλακίστηκαν",
+"μαλακίστηκες",
+"μαλακισμένες",
+"μαλακισμένων",
+"μαλακιστείτε",
+"μαλακιστούμε",
+"μαλακιστούνε",
+"μουνογλύφτες",
+"μουνογλύφτης",
+"μουνογλύφτρα",
+"μπουρδελιάρα",
+"μπουρδελιάρη",
+"ξεκωλιάρηδες",
+"παλιοπουτάνα",
+"παλιοχαμούρα",
+"παλιόπουστας",
+"πουστοφέρνει",
+"πουτανίστικα",
+"πουτανίστικη",
+"πουτανίστικο",
+"πουτανιάρικο",
+"πουτσοκέφαλο",
+"ρουφοκαβλέτα",
+"σαβουρογάμης",
+"σκιζοκαβλέτα",
+"σκιζοκώληδες",
+"ψωλαρμενίζει",
+"ψωλοαρπάχτρα",
+"γαμιστρώνας",
+"γκαβλιάρικο",
+"γκαυλαντίζω",
+"γκαυλιάρικο",
+"καβλιάρηδες",
+"καραμουνάρα",
+"καργιολίτσα",
+"καργιόληδες",
+"καυλόγκαζος",
+"κερατώνουμε",
+"κερατώσουμε",
+"κλανιάρηδες",
+"κλαψομούνης",
+"κουρμούτσες",
+"κωλοδάχτυλα",
+"κωλοδάχτυλο",
+"κωλοτρυπίδα",
+"κωλοτρυπίδι",
+"κωλοχανείων",
+"μαλακίζεσαι",
+"μαλακίζεται",
+"μαλακίζομαι",
+"μαλακίστηκα",
+"μαλακίστηκε",
+"μαλακισμένα",
+"μαλακισμένη",
+"μαλακισμένο",
+"μαλακιστήρι",
+"μουνόδουλοι",
+"μουνόδουλος",
+"ξεσκισμένες",
+"παλιοπούστη",
+"πεοκρούστης",
+"πουστίζουμε",
+"πουστοφέρνω",
+"πουτσαράδες",
+"πουτσαράδων",
+"σεξουλιάρης",
+"σκατιάρηδες",
+"σκατιάρηδων",
+"σκατόφατσας",
+"σκιζομούνες",
+"σκυλομούρες",
+"σπασαρχίδης",
+"τσιμπουκλής",
+"τσιμπουκλού",
+"φιστικώνεις",
+"φτωχομπινές",
+"ψωλαρμενίζω",
+"ψωλοαρμένης",
+"ψωλοβρόντης",
+"βρομόμουνο",
+"βρωμόμουνο",
+"βρωμόσκυλο",
+"βυζαρούδες",
+"γαμίκουλας",
+"γαμίκουλες",
+"γαμηθήκαμε",
+"γαμηθήκατε",
+"γαμιούνται",
+"γαμιόληδες",
+"γαμιόμαστε",
+"γκαβλίτσες",
+"γκαυλιάρες",
+"γκαυλιάρης",
+"καβλαντίζω",
+"καβλιάρικο",
+"καβλιτζέκι",
+"καβλόμουνα",
+"καβλόμουνο",
+"καργιολάρα",
+"καργιόλικα",
+"καργιόλικο",
+"καριολίτσα",
+"καριόληδες",
+"καριόληδων",
+"καυλαντίζω",
+"καυλιάρικο",
+"καυλιτζέκι",
+"καυλόσπυρα",
+"καυλόσπυρο",
+"κερατώνετε",
+"κερατώνουν",
+"κερατώσαμε",
+"κερατώσατε",
+"κερατώσετε",
+"κερατώσουν",
+"κλανιάρικο",
+"κλασμεντές",
+"κλαψομούνα",
+"κωλομπαράς",
+"κωλοχανεία",
+"κωλοχανείο",
+"κωλόχαρτων",
+"μητρομάνες",
+"μουνόδουλη",
+"μουνόμουνα",
+"μουνόμουνο",
+"μουνόμπαζα",
+"μουνόμπαζο",
+"μουνότριχα",
+"μουνότρυπα",
+"μουστόγρια",
+"ξεκωλιάρης",
+"ξεσκισμένα",
+"ξεσκισμένη",
+"ξεσκισμένο",
+"πλακομούνι",
+"πουστίζετε",
+"πουστίζουν",
+"πουτανάκια",
+"πουταναριά",
+"πουταναριό",
+"πουτανιάρη",
+"πουτσαρέλι",
+"σεξουλιάρα",
+"σκατιάρικο",
+"σκατουλάκι",
+"σκιζοκώλης",
+"σκιζομούνα",
+"σκυλομούρα",
+"σκυλομούρη",
+"τσοντόβιος",
+"φτωχομπινέ",
+"ψωλομούρης",
+"βυζοθήκες",
+"βυζοθηκών",
+"βυζόμπαλα",
+"γαμήθηκαν",
+"γαμήθηκες",
+"γαμηστερά",
+"γαμηστερό",
+"γκαβλιάρα",
+"γκαβλιάρη",
+"γκαυλιάρα",
+"καβλιάρες",
+"καβλιάρης",
+"καργιόλες",
+"καριολάρα",
+"καριόλικα",
+"καριόλικο",
+"κατουρούν",
+"καυλιάρες",
+"καυλιάρης",
+"κεράτωσες",
+"κερατώνει",
+"κερατώσει",
+"κλανιάρης",
+"κλασμένων",
+"κουραδάκι",
+"κωλοπαίδι",
+"κωλόπαιδα",
+"κωλόπαιδο",
+"κωλόχαρτα",
+"κωλόχαρτο",
+"μαλακωδώς",
+"μητρομάνα",
+"μουνίτσες",
+"μουνόπανο",
+"μπουρδέλο",
+"ξεκωλιάρα",
+"πεολειξία",
+"πεολειχία",
+"πεόδουλοι",
+"πεόδουλος",
+"πιπαδόρος",
+"πουλόφωνο",
+"πουστίζει",
+"πουτανάρα",
+"πουτανιές",
+"πουτσαράς",
+"πούστικες",
+"πούστικων",
+"σκατένιου",
+"σκατένιων",
+"σκατιάρες",
+"σκατούλες",
+"σπέρματος",
+"τσουλίτσα",
+"φιστίκωμα",
+"φιστικώνω",
+"χεστήκαμε",
+"χεστήκανε",
+"χεστήκατε",
+"ψωλαράδες",
+"ψωλαράδων",
+"ψωλορούφα",
+"ψωλοχύσια",
+"ψωνιστήρι",
+"βυζοθήκη",
+"γαμήθηκα",
+"γαμήθηκε",
+"γαμημένα",
+"γαμημένη",
+"γαμημένο",
+"γαμιάδες",
+"γαμιάδων",
+"γαμιέμαι",
+"γαμιέσαι",
+"γαμιέστε",
+"γαμιέται",
+"γαμιόλες",
+"γκαυλάρα",
+"καβλιάρα",
+"καργιόλα",
+"καργιόλη",
+"καριόλες",
+"καυλιάρα",
+"κεράτωσα",
+"κεράτωσε",
+"κερατώνω",
+"κερατώσω",
+"κλάνουμε",
+"κλάσουμε",
+"κλασμένα",
+"κλασμένη",
+"κλασμένο",
+"κουράδες",
+"κωλομέρι",
+"μαλακίες",
+"μαλακιών",
+"μουνάρες",
+"μουνάρων",
+"μουνίαση",
+"μουνίτσα",
+"μούναρος",
+"πεόδουλη",
+"πιπαδώρα",
+"πιπατζού",
+"πορνίδιο",
+"πουστίζω",
+"πουστιές",
+"πουτάνες",
+"πουτανιά",
+"πουτσάρα",
+"πουτσαρά",
+"πούστικα",
+"πούστικη",
+"πούστικο",
+"σεξουάλα",
+"σκατένια",
+"σκατένιο",
+"σκατιάρα",
+"σκατιάρη",
+"σκατούλα",
+"τσουλάρα",
+"τσουλιών",
+"χεσμένες",
+"χεσμένων",
+"ψωλοχύνω",
+"ψωλόχυμα",
+"έκλασαν",
+"αιδοίων",
+"βυζαρού",
+"γαμιόλα",
+"γαμιόλη",
+"γκάβλες",
+"γκαυλός",
+"κάτουρο",
+"καβλάρα",
+"καριόλα",
+"καριόλη",
+"κατουρώ",
+"καυλάρα",
+"κλάνετε",
+"κλάνουν",
+"κλάσαμε",
+"κλάσατε",
+"κλάσετε",
+"κλάσουν",
+"κλανιές",
+"κλανιών",
+"κουράδα",
+"κωλάρες",
+"κωλάρων",
+"κωλαρού",
+"μαλάκες",
+"μαλάκων",
+"μαλακία",
+"μουνάκι",
+"μουνάρα",
+"μουνιού",
+"μουνιών",
+"παπάρες",
+"πηδιόλα",
+"πορδίζω",
+"πουστιά",
+"πουτάνα",
+"πουτανί",
+"τσουλιά",
+"τσούλοι",
+"τσούλος",
+"τσούλου",
+"χέζουμε",
+"χέστηκα",
+"χέστηκε",
+"χεσμένα",
+"χεσμένη",
+"χεσμένο",
+"ψωλάρες",
+"ψωλίτσα",
+"ψωλαρία",
+"έκλασα",
+"έκλασε",
+"αιδοία",
+"αιδοίο",
+"αρχίδι",
+"αρχίδω",
+"γαμάει",
+"γαμάτα",
+"γαμάτο",
+"γαμήσι",
+"γαμιάς",
+"καυλός",
+"κλάνει",
+"κλάσει",
+"κλανιά",
+"κωλάρα",
+"μαλάκα",
+"μαλάκω",
+"μουνιά",
+"μούνος",
+"μπινές",
+"παπάρα",
+"παπάρη",
+"πούλοι",
+"πούλος",
+"πόρδος",
+"σεξάκι",
+"σκατού",
+"σκατών",
+"τσουλί",
+"τσούλα",
+"τσούλε",
+"τσούνι",
+"χέζετε",
+"χέζουν",
+"χέσιμο",
+"χέστης",
+"χέστρα",
+"ψωλάκι",
+"ψωλάρα",
+"ψωλαρά",
+"βυζιά",
+"γαμάς",
+"γαμάω",
+"καυλί",
+"κλάνω",
+"κλάσω",
+"κώλου",
+"κώλων",
+"μουνί",
+"μούνα",
+"πέους",
+"πορδή",
+"πόρνη",
+"σκατά",
+"σκατό",
+"τσόλα",
+"χέζει",
+"χέστη",
+"χεζάς",
+"χεζού",
+"ψωλές",
+"ψωλής",
+"ψωλών",
+"γαμά",
+"γαμώ",
+"κώλε",
+"κώλο",
+"πέος",
+"πεών",
+"χέζω",
+"χέσε",
+"ψωλή",
+"ψώλα",
+"πέη"
+]
\ No newline at end of file
diff --git a/js/languages/lang/hu.json b/js/languages/lang/hu.json
new file mode 100644
index 0000000..622a287
--- /dev/null
+++ b/js/languages/lang/hu.json
@@ -0,0 +1,81 @@
+[
+"szarságokat",
+"kibebaszott",
+"szarsággal",
+"szetbaszott",
+"baszkurál",
+"kutyafasza",
+"szarságok",
+"szarságot",
+"baszkural",
+"kibaszott",
+"kibekúrt",
+"szarakodj",
+"ánuszlé",
+"baszogat",
+"biszbasz",
+"brunyál",
+"kibekurt",
+"pöcsöm",
+"szarból",
+"szarokat",
+"szarról",
+"szarság",
+"szarért",
+"agyfasz",
+"anuszle",
+"baszoda",
+"baszás",
+"brunyal",
+"bráner",
+"felkúr",
+"odabasz",
+"rábasz",
+"rákúr",
+"szarban",
+"szarnak",
+"szarral",
+"szarrá",
+"szarás",
+"átbasz",
+"átkúr",
+"atbasz",
+"bazmeg",
+"beszop",
+"braner",
+"elbasz",
+"elkúr",
+"felkur",
+"hugyoz",
+"kibasz",
+"pocsom",
+"pornó",
+"rabasz",
+"seggem",
+"szarba",
+"szarik",
+"szarja",
+"szarni",
+"szarok",
+"szarom",
+"szaros",
+"szarra",
+"szarsz",
+"szarul",
+"atkur",
+"broki",
+"elkur",
+"fosik",
+"húgy",
+"rakur",
+"szarj",
+"szart",
+"bazd",
+"bré",
+"hugy",
+"kula",
+"segg",
+"szar",
+"bre",
+"fos"
+]
\ No newline at end of file
diff --git a/js/languages/lang/in.json b/js/languages/lang/in.json
new file mode 100644
index 0000000..f4c245a
--- /dev/null
+++ b/js/languages/lang/in.json
@@ -0,0 +1,121 @@
+[
+"anjing[k]",
+"chealshit",
+"dengkulmu",
+"ene+[g|k]",
+"kamasutra",
+"kecepirit",
+"munyukers",
+"sh+e+i+t+",
+"virginity",
+"chealeng",
+"chellenk",
+"chelshit",
+"d1ckhe4d",
+"d1ckhead",
+"dickhe4d",
+"dickhead",
+"pengecut",
+"pengemis",
+"cheleng",
+"fuckoff",
+"fuckyou",
+"gendeng",
+"jiancux",
+"kampret",
+"kumsigo",
+"monyong",
+"murahan",
+"pelakor",
+"sinting",
+"anjink",
+"anying",
+"azizay",
+"b@90n9",
+"bagong",
+"bangke",
+"cebong",
+"celaka",
+"celeng",
+"centil",
+"chleng",
+"cilaka",
+"congek",
+"fetish",
+"fucker",
+"ganjen",
+"gembel",
+"gendut",
+"grogol",
+"jamput",
+"jancok",
+"jancuk",
+"jembel",
+"katrok",
+"kondom",
+"kvs190",
+"kvs1g0",
+"maling",
+"mampos",
+"mampus",
+"mandul",
+"matamu",
+"miskin",
+"monyet",
+"munyuk",
+"najong",
+"ndasmu",
+"ngehek",
+"ngepet",
+"otakmu",
+"sialan",
+"tampol",
+"anjir",
+"b@goy",
+"bagoy",
+"boker",
+"budeg",
+"curut",
+"d1ld0",
+"d1ldo",
+"dafuq",
+"dajal",
+"dekil",
+"detik",
+"diсk",
+"intim",
+"jaran",
+"jayus",
+"kehed",
+"lapet",
+"lebok",
+"mabuk",
+"modar",
+"njing",
+"norak",
+"peang",
+"sarap",
+"ublag",
+"2g1c",
+"2g1f",
+"edan",
+"f0ck",
+"fook",
+"fuck",
+"gelo",
+"gila",
+"kere",
+"leak",
+"mati",
+"pe'a",
+"shit",
+"sial",
+"udik",
+"asu",
+"bot",
+"cok",
+"dik",
+"fak",
+"fck",
+"ml"
+]
\ No newline at end of file
diff --git a/js/languages/lang/it.json b/js/languages/lang/it.json
new file mode 100644
index 0000000..c2b145a
--- /dev/null
+++ b/js/languages/lang/it.json
@@ -0,0 +1,155 @@
+[
+"cagatiinmanoeprenditiaschiaff",
+"figliodibuonadonna",
+"vaiafartifottere",
+"figliodiputtana",
+"figlioditroia",
+"testadicazzo",
+"testedicazzo",
+"porcaputtana",
+"vaiinmona",
+"bruttamerda",
+"rincoglionirsi",
+"stracciamaroni",
+"ziocantante",
+"merdos(a|i|o)",
+"porcatroia",
+"rompicoglioni",
+"stracciaballe",
+"stracciapalle",
+"merdosamente",
+"scorreggiare",
+"skassamaroni",
+"smandrappata",
+"spaccamaroni",
+"cacciapalle",
+"delcazzo",
+"scassapalle",
+"scoreggiare",
+"skassapalle",
+"cacapranzi",
+"cagapranzi",
+"deficiente",
+"deficienti",
+"dimerda",
+"escrementi",
+"escremento",
+"incazzarsi",
+"rompiballe",
+"rompicazzo",
+"rompipalle",
+"scorreggia",
+"stronzetto",
+"tarzanelli",
+"tarzanello",
+"vaffanculo",
+"vaffankulo",
+"affanculo",
+"affankulo",
+"cacasotto",
+"cagasotto",
+"lazzarone",
+"minchiata",
+"minchione",
+"scimunito",
+"scoreggia",
+"scureggia",
+"stronzata",
+"bastarda",
+"bastarde",
+"bastardi",
+"bastardo",
+"belzebù",
+"belzecù",
+"budiùlo",
+"coglione",
+"coglioni",
+"defecare",
+"fancoolo",
+"kogliona",
+"koglione",
+"koglioni",
+"lercione",
+"mariuolo",
+"minkione",
+"pirletta",
+"pisciare",
+"ruffiano",
+"zoticone",
+"balordo",
+"cacarsi",
+"cazz\\w+",
+"coglion",
+"cretina",
+"cretine",
+"cretini",
+"cretino",
+"defecar",
+"fott\\w+",
+"koglion",
+"lacché",
+"marroni",
+"merdaio",
+"merdata",
+"minchia",
+"pirlone",
+"stronxa",
+"stronxo",
+"stronza",
+"stronze",
+"stronzi",
+"stronzo",
+"babbeo",
+"balord",
+"cacare",
+"cacata",
+"cagare",
+"cagata",
+"cagone",
+"cojone",
+"cristo",
+"fancul",
+"fankul",
+"lercio",
+"loffio",
+"maddon",
+"maroni",
+"megera",
+"minchi",
+"monata",
+"piscio",
+"stronx",
+"stronz",
+"sucare",
+"belin",
+"cacca",
+"ebete",
+"ebeti",
+"gesù",
+"kazzo",
+"lerci",
+"madon",
+"merda",
+"minki",
+"picio",
+"pirla",
+"pisci",
+"scemo",
+"babb",
+"caga",
+"caxx",
+"cazo",
+"cazz",
+"culi",
+"culo",
+"drog",
+"gesu",
+"kazz",
+"kulo",
+"merd",
+"mona",
+"suca",
+"cac",
+"cag",
+"kul"
+]
\ No newline at end of file
diff --git a/js/languages/lang/ja.json b/js/languages/lang/ja.json
new file mode 100644
index 0000000..93f5425
--- /dev/null
+++ b/js/languages/lang/ja.json
@@ -0,0 +1,26 @@
+[
+"かったい",
+"しょうか",
+"あそこ",
+"すまた",
+"びっこ",
+"インポ",
+"えた",
+"えろ",
+"おし",
+"くそ",
+"しな",
+"すけ",
+"ばか",
+"ぶす",
+"ぶつ",
+"クソ",
+"ケツ",
+"コケ",
+"シナ",
+"スケ",
+"バカ",
+"ブス",
+"乞食",
+"片足"
+]
\ No newline at end of file
diff --git a/js/languages/lang/ko.json b/js/languages/lang/ko.json
new file mode 100644
index 0000000..457e8ca
--- /dev/null
+++ b/js/languages/lang/ko.json
@@ -0,0 +1,177 @@
+[
+"개 보다도 못한 색기",
+"개보다도 못한 새끼",
+"개보다도 못한 색기",
+"개보다도 못한 자식",
+"개 망나니 같은 년",
+"개 망나니 같은 놈",
+"개같은 놈의 새키",
+"개 망나니 새끼",
+"미친 놈의 새끼",
+"재수 옴붙은 년",
+"좃도 아닌 새끼",
+"좆도 아닌 새끼",
+"개잡놈의 새끼",
+"썅노무의 새끼",
+"씨발놈의 새끼",
+"좆까라 마이신",
+"개씨브랄새끼",
+"썅놈의 새끼",
+"씨부럴 새끼",
+"좃한만 새끼",
+"좆만한 새끼",
+"개시발새끼",
+"개씨발새끼",
+"개씨브랄년",
+"개씨브랄놈",
+"개씹팔새끼",
+"개씹할새끼",
+"미친개새끼",
+"종간나새끼",
+"ㅁㅣ친년",
+"ㅁㅣ친놈",
+"ㅇㅐㅁㅣ",
+"ㅇㅐㅂㅣ",
+"개시발년",
+"개시발놈",
+"개씨발년",
+"개씨발놈",
+"개씹팔년",
+"개씹팔놈",
+"개씹할년",
+"개씹할놈",
+"미친새끼",
+"미친세리",
+"미친쉐이",
+"시발로마",
+"신발샛길",
+"씨발로마",
+"씨발새끼",
+"씨부럴놈",
+"씨팔로마",
+"씹할로마",
+"좃방망이",
+"좆대가리",
+"지랄옘병",
+"ㄱㅅㄲ",
+"개새꺄",
+"개새끼",
+"개새퀴",
+"개소리",
+"개수작",
+"개쉐키",
+"개쌍년",
+"개쌍놈",
+"개썅년",
+"개썅놈",
+"개자식",
+"개잡년",
+"개잡놈",
+"도라이",
+"돌아이",
+"똥구녕",
+"똥꾸녕",
+"띠부랄",
+"미췬놈",
+"미친냔",
+"미친넘",
+"미친년",
+"미친놈",
+"미친뇬",
+"미친쉑",
+"상병신",
+"시부랄",
+"쌍노무",
+"써글넘",
+"써글뇬",
+"썩을냔",
+"썩을넘",
+"썩을년",
+"썩을놈",
+"쓉장생",
+"씨발년",
+"씨발놈",
+"씨발롬",
+"씨부랄",
+"씨부럴",
+"씹새끼",
+"씹장생",
+"아가리",
+"아갈이",
+"아구통",
+"양아치",
+"염병할",
+"엿먹어",
+"육시럴",
+"젓탱이",
+"족가튼",
+"족같네",
+"존마니",
+"존만이",
+"ㅂㅅ",
+"ㅅㅂ",
+"개냔",
+"개넘",
+"개년",
+"개놈",
+"개뇬",
+"개새",
+"개색",
+"게년",
+"게놈",
+"등신",
+"띱새",
+"미췬",
+"미칀",
+"상년",
+"상놈",
+"시발",
+"시팔",
+"쌍년",
+"쌍놈",
+"쌍뇬",
+"썅년",
+"썅놈",
+"쒸파",
+"씨바",
+"씨발",
+"씨빠",
+"씨팔",
+"씹냔",
+"씹년",
+"씹뇬",
+"씹물",
+"씹새",
+"씹질",
+"씹창",
+"씹팔",
+"씹할",
+"염병",
+"엿먹",
+"옘병",
+"육갑",
+"저까",
+"전나",
+"젓밥",
+"조까",
+"조빱",
+"존나",
+"존만",
+"좃국",
+"좃까",
+"좃나",
+"좃망",
+"좃물",
+"좃밥",
+"좆국",
+"좆까",
+"좆나",
+"좆도",
+"좆망",
+"좆물",
+"좆밥",
+"즤랄",
+"지랄",
+"지롤",
+"쓉"
+]
\ No newline at end of file
diff --git a/js/languages/lang/lt.json b/js/languages/lang/lt.json
new file mode 100644
index 0000000..35fc434
--- /dev/null
+++ b/js/languages/lang/lt.json
@@ -0,0 +1,155 @@
+[
+"conchadetumadre",
+"hij[ao]deputillas?",
+"hij[ao]d?eputas?",
+"hij[ao]deperras?",
+"vetealamierda",
+"mecagoenlavirgensanta",
+"pendej(a|ada|as|o|os)",
+"mecagoenlaputavirgen",
+"chupamipenga",
+"darporculo",
+"hij[ao]putillas?",
+"melapelan?",
+"melasudan?",
+"mecagoen",
+"mecagoenlaputa",
+"abrazafarolas",
+"calientaverga",
+"conchatumadre",
+"conchetumadre",
+"hij[ao]putas?",
+"conchatumare",
+"conchetumare",
+"mecagoendios",
+"pu+t(a+|o)s?",
+"coñoemadre",
+"jodiéramos",
+"mecagondios",
+"mecagontodo",
+"tuputamadre",
+"cabr[óo]n",
+"cabronazas",
+"cabronazos",
+"chupapoyas",
+"culicagado",
+"gilipol\\w+",
+"ijosdeputa",
+"imbéciles",
+"joderiamos",
+"quetejodan",
+"agueonado",
+"alamierda",
+"argolluda",
+"cabronaza",
+"cabronazo",
+"caraculos",
+"caraeculo",
+"chingadas",
+"chingados",
+"chingando",
+"chupamela",
+"chupapene",
+"chupapija",
+"chíngate",
+"culicagao",
+"gilipoyas",
+"hijoeputa",
+"hijueputa",
+"ijodeputa",
+"joderemos",
+"joderiais",
+"jodierais",
+"jodisteis",
+"mamagallo",
+"mamaguevo",
+"mamahuevo",
+"mecagonto",
+"pelotudas",
+"pelotudos",
+"cabronas",
+"cabrones",
+"cajetuda",
+"caraculo",
+"carajote",
+"carapijo",
+"careculo",
+"chingada",
+"chingado",
+"chingalo",
+"chingate",
+"chingón",
+"conchuda",
+"conchudo",
+"imbécil",
+"jodereis",
+"joderian",
+"joderias",
+"jodiamos",
+"jodiendo",
+"jodieran",
+"jodieras",
+"jodieron",
+"jódanse",
+"pelotuda",
+"pelotudo",
+"boludas",
+"boludos",
+"cabrona",
+"carajos",
+"chingad",
+"chingan",
+"chingar",
+"chingas",
+"imbecil",
+"jodamos",
+"jodanse",
+"jodemos",
+"joderan",
+"joderas",
+"joderia",
+"jodiais",
+"jodidas",
+"jodidos",
+"jodiera",
+"jodimos",
+"jodiste",
+"jodáis",
+"jodéis",
+"jueputa",
+"jódelo",
+"jódete",
+"pandejo",
+"putazos",
+"boluda",
+"boludo",
+"carajo",
+"chinga",
+"chingo",
+"chucha",
+"gueona",
+"idiota",
+"jodera",
+"jodere",
+"jodete",
+"jodian",
+"jodias",
+"jodida",
+"jodido",
+"joputa",
+"putazo",
+"jodad",
+"jodan",
+"jodas",
+"joden",
+"joder",
+"jodes",
+"jodia",
+"jodí",
+"weona",
+"wevon",
+"joda",
+"jode",
+"jodo",
+"joer"
+]
\ No newline at end of file
diff --git a/js/languages/lang/no.json b/js/languages/lang/no.json
new file mode 100644
index 0000000..4d9e4ee
--- /dev/null
+++ b/js/languages/lang/no.json
@@ -0,0 +1,64 @@
+[
+"faen i helvete",
+"drittsekkene",
+"dyreknulling",
+"fingerpuling",
+"analmåltid",
+"babyknuller",
+"drittsekken",
+"drittsekker",
+"analsaften",
+"analsafter",
+"blaasejobb",
+"blåsejobb",
+"ekskrement",
+"fingerpule",
+"håndjager",
+"jævelskap",
+"pungsvette",
+"drittsekk",
+"faenivold",
+"fittesaft",
+"føkkings",
+"hælvetes",
+"jævelene",
+"analsaft",
+"føkking",
+"hælvete",
+"jævelen",
+"jævlene",
+"promping",
+"rasshøl",
+"analsex",
+"bæsjet",
+"dritten",
+"dyresex",
+"fandens",
+"føkker",
+"jæskla",
+"jævler",
+"promper",
+"prompet",
+"rauhull",
+"bæsje",
+"driter",
+"føkka",
+"føkke",
+"jævel",
+"jævla",
+"pokker",
+"prompe",
+"bæsj",
+"drite",
+"dritt",
+"faens",
+"føkk",
+"pisse",
+"poddi",
+"ræva",
+"æids",
+"faen",
+"fakk",
+"fise",
+"hor"
+]
\ No newline at end of file
diff --git a/js/languages/lang/pl.json b/js/languages/lang/pl.json
new file mode 100644
index 0000000..a933383
--- /dev/null
+++ b/js/languages/lang/pl.json
@@ -0,0 +1,6836 @@
+[
+"przepierdoliłybyście",
+"przypierdoliłybyście",
+"podpierdalałybyście",
+"podpierdoliłybyście",
+"przepierdolilibyście",
+"przepierdoliłybyśmy",
+"przypierdolilibyście",
+"przypierdoliłybyśmy",
+"dopierdoliłybyście",
+"odpierdoliłybyście",
+"podpierdalalibyście",
+"podpierdalałybyśmy",
+"podpierdolilibyście",
+"podpierdoliłybyśmy",
+"przepierdalałyście",
+"przepierdolilibyscie",
+"przepierdolilibyśmy",
+"przepierdolilybyscie",
+"przepierdoliłyście",
+"przypierdalałyście",
+"przypierdolilibyscie",
+"przypierdolilibyśmy",
+"przypierdolilybyscie",
+"przypierdoliłyście",
+"wypierdoliłybyście",
+"zapierdalałybyście",
+"dopierdolilibyście",
+"dopierdoliłybyśmy",
+"odpierdolilibyście",
+"odpierdoliłybyśmy",
+"podpierdalalibyscie",
+"podpierdalalibyśmy",
+"podpierdalalybyscie",
+"podpierdalałyście",
+"podpierdolilibyscie",
+"podpierdolilibyśmy",
+"podpierdolilybyscie",
+"podpierdoliłyście",
+"przepieprzałyście",
+"przepieprzyłyście",
+"przepierdalaliście",
+"przepierdalałyśmy",
+"przepierdolilibysmy",
+"przepierdoliliście",
+"przepierdolilybysmy",
+"przepierdoliłabyś",
+"przepierdoliłyśmy",
+"przypierdalaliście",
+"przypierdalałyśmy",
+"przypierdolilibysmy",
+"przypierdoliliście",
+"przypierdolilybysmy",
+"przypierdoliłabyś",
+"przypierdoliłyśmy",
+"rozpierdalałyście",
+"rozpierdoliłyście",
+"rozpiżdżałyście",
+"wypierdolilibyście",
+"wypierdoliłybyśmy",
+"zapierdalalibyście",
+"zapierdalałybyśmy",
+"zapierdolilibyście",
+"dopierdalałyście",
+"dopierdolilibyscie",
+"dopierdolilibyśmy",
+"dopierdolilybyscie",
+"dopierdoliłyście",
+"napierdalałyście",
+"napierdoliłyście",
+"odpierdalałyście",
+"odpierdolilibyscie",
+"odpierdolilibyśmy",
+"odpierdolilybyscie",
+"odpierdoliłyście",
+"podpierdalalibysmy",
+"podpierdalaliście",
+"podpierdalalybysmy",
+"podpierdalałabyś",
+"podpierdalałyśmy",
+"podpierdolilibysmy",
+"podpierdoliliście",
+"podpierdolilybysmy",
+"podpierdoliłabyś",
+"podpierdoliłyśmy",
+"popierdalałyście",
+"popierdoliłyście",
+"przepieprzaliście",
+"przepieprzałyśmy",
+"przepieprzyliście",
+"przepieprzyłyśmy",
+"przepierdalaliscie",
+"przepierdalaliśmy",
+"przepierdalalyscie",
+"przepierdoliliscie",
+"przepierdoliliśmy",
+"przepierdolilyscie",
+"przepierdoliłabym",
+"przepierdoliłbyś",
+"przykurwiałyście",
+"przypierdalaliscie",
+"przypierdalaliśmy",
+"przypierdalalyscie",
+"przypierdoliliscie",
+"przypierdoliliśmy",
+"przypierdolilyscie",
+"przypierdoliłabym",
+"przypierdoliłbyś",
+"rozpierdalaliście",
+"rozpierdalałyśmy",
+"rozpierdoliliście",
+"rozpierdoliłyśmy",
+"rozpiździłyście",
+"rozpiżdżaliście",
+"rozpiżdżałyśmy",
+"wypierdalałyście",
+"wypierdolilibyscie",
+"wypierdolilibyśmy",
+"wypierdolilybyscie",
+"wypierdoliłyście",
+"wypiżdżałyście",
+"zapierdalalibyscie",
+"zapierdalalibyśmy",
+"zapierdalalybyscie",
+"zapierdalałyście",
+"zapierdolilibyscie",
+"zapierdolilibyśmy",
+"zapierdoliłyście",
+"dopieprzałyście",
+"dopieprzyłyście",
+"dopierdalaliście",
+"dopierdalałyśmy",
+"dopierdolilibysmy",
+"dopierdoliliście",
+"dopierdolilybysmy",
+"dopierdoliłabyś",
+"dopierdoliłyśmy",
+"napierdalaliście",
+"napierdalałyśmy",
+"napierdoliliście",
+"napierdoliłyśmy",
+"odpierdalaliście",
+"odpierdalałyśmy",
+"odpierdolilibysmy",
+"odpierdoliliście",
+"odpierdolilybysmy",
+"odpierdoliłabyś",
+"odpierdoliłyśmy",
+"opierdalałyście",
+"opierdoliłyście",
+"pieprznęłyście",
+"podjebałybyście",
+"podpierdalaliscie",
+"podpierdalaliśmy",
+"podpierdalalyscie",
+"podpierdalałabym",
+"podpierdalałbyś",
+"podpierdoliliscie",
+"podpierdoliliśmy",
+"podpierdolilyscie",
+"podpierdoliłabym",
+"podpierdoliłbyś",
+"podpierdolnięcie",
+"popieprzyłyście",
+"popierdalaliście",
+"popierdalałyśmy",
+"popierdoliliście",
+"popierdoliłyśmy",
+"przepieprzaliscie",
+"przepieprzaliśmy",
+"przepieprzalyscie",
+"przepieprzyliscie",
+"przepieprzyliśmy",
+"przepieprzylyscie",
+"przepierdalająca",
+"przepierdalający",
+"przepierdalalismy",
+"przepierdalalysmy",
+"przepierdalałaś",
+"przepierdalałeś",
+"przepierdolilabym",
+"przepierdolilabys",
+"przepierdolilismy",
+"przepierdolilysmy",
+"przepierdoliłaby",
+"przepierdoliłaś",
+"przepierdoliłbym",
+"przepierdoliłeś",
+"przepierdoliłoby",
+"przepierdoliłyby",
+"przesrywałyście",
+"przykurwialiście",
+"przykurwiałyśmy",
+"przykurwiłyście",
+"przypierdalalismy",
+"przypierdalalysmy",
+"przypierdalałaś",
+"przypierdalałeś",
+"przypierdolilabym",
+"przypierdolilabys",
+"przypierdolilismy",
+"przypierdolilysmy",
+"przypierdoliłaby",
+"przypierdoliłaś",
+"przypierdoliłbym",
+"przypierdoliłeś",
+"przypierdoliłoby",
+"przypierdoliłyby",
+"przysrywałyście",
+"rozjebałybyście",
+"rozjebywałyście",
+"rozpierdalaliscie",
+"rozpierdalaliśmy",
+"rozpierdalalyscie",
+"rozpierdoliliscie",
+"rozpierdoliliśmy",
+"rozpierdolilyscie",
+"rozpiździliście",
+"rozpiździłyśmy",
+"rozpiżdżaliśmy",
+"spierdalałyście",
+"spierdoliłyście",
+"wkurwiałybyście",
+"wpierdalałyście",
+"wpierdoliłyście",
+"wypieprzałyście",
+"wypieprzyłyście",
+"wypierdalaliście",
+"wypierdalałyśmy",
+"wypierdolilibysmy",
+"wypierdoliliście",
+"wypierdolilybysmy",
+"wypierdoliłabyś",
+"wypierdoliłyśmy",
+"wypiżdżaliście",
+"wypiżdżałyśmy",
+"zakurwiłybyście",
+"zapieprzałyście",
+"zapieprzyłyście",
+"zapierdalalibysmy",
+"zapierdalaliście",
+"zapierdalalybysmy",
+"zapierdalałabyś",
+"zapierdalałyśmy",
+"zapierdolilibysmy",
+"zapierdoliliście",
+"zapierdoliłabyś",
+"zapierdoliłyśmy",
+"świętojebliwego",
+"świętojebliwemu",
+"świętojebliwych",
+"świętojebliwymi",
+"dojebałybyście",
+"dopieprzaliście",
+"dopieprzałyśmy",
+"dopieprzyliście",
+"dopieprzyłyśmy",
+"dopierdalaliscie",
+"dopierdalaliśmy",
+"dopierdalalyscie",
+"dopierdoliliscie",
+"dopierdoliliśmy",
+"dopierdolilyscie",
+"dopierdoliłabym",
+"dopierdoliłbyś",
+"nakurwiałyście",
+"napierdalaliscie",
+"napierdalaliśmy",
+"napierdalalyscie",
+"napierdoliliscie",
+"napierdoliliśmy",
+"napierdolilyscie",
+"napierdolnięcie",
+"obeszczałyście",
+"odjebywałyście",
+"odpierdalaliscie",
+"odpierdalaliśmy",
+"odpierdalalyscie",
+"odpierdoliliscie",
+"odpierdoliliśmy",
+"odpierdolilyscie",
+"odpierdoliłabym",
+"odpierdoliłbyś",
+"odpierdolnięcie",
+"opieprzałyście",
+"opieprzyłyście",
+"opierdalaliście",
+"opierdalałyśmy",
+"opierdoliliście",
+"opierdoliłyśmy",
+"pieprznęliście",
+"pieprznęłyśmy",
+"pierdoliłyście",
+"podjebalibyście",
+"podjebałybyśmy",
+"podpierdalający",
+"podpierdalalabym",
+"podpierdalalabys",
+"podpierdalalismy",
+"podpierdalalysmy",
+"podpierdalałaby",
+"podpierdalałaś",
+"podpierdalałbym",
+"podpierdalałeś",
+"podpierdalałoby",
+"podpierdalałyby",
+"podpierdolilabym",
+"podpierdolilabys",
+"podpierdolilismy",
+"podpierdolilysmy",
+"podpierdoliłaby",
+"podpierdoliłaś",
+"podpierdoliłbym",
+"podpierdoliłeś",
+"podpierdoliłoby",
+"podpierdoliłyby",
+"podpierdolniecie",
+"popieprzyliście",
+"popieprzyłyśmy",
+"popierdalaliscie",
+"popierdalaliśmy",
+"popierdalalyscie",
+"popierdoliliscie",
+"popierdoliliśmy",
+"popierdolilyscie",
+"przepieprzalismy",
+"przepieprzalysmy",
+"przepieprzałaś",
+"przepieprzałeś",
+"przepieprzylismy",
+"przepieprzylysmy",
+"przepieprzyłaś",
+"przepieprzyłeś",
+"przepierdalajaca",
+"przepierdalajacy",
+"przepierdalajcie",
+"przepierdalałam",
+"przepierdalałem",
+"przepierdolilaby",
+"przepierdolilbym",
+"przepierdolilbys",
+"przepierdoliliby",
+"przepierdoliloby",
+"przepierdolilyby",
+"przepierdoliłam",
+"przepierdoliłby",
+"przepierdoliłem",
+"przepierdolonoby",
+"przesrywaliście",
+"przesrywałyśmy",
+"przyjebałyście",
+"przykurwialiscie",
+"przykurwialiśmy",
+"przykurwialyscie",
+"przykurwiliście",
+"przykurwiłyśmy",
+"przypierdalajcie",
+"przypierdalałam",
+"przypierdalałem",
+"przypierdolilaby",
+"przypierdolilbym",
+"przypierdolilbys",
+"przypierdoliliby",
+"przypierdoliloby",
+"przypierdolilyby",
+"przypierdoliwszy",
+"przypierdoliłam",
+"przypierdoliłby",
+"przypierdoliłem",
+"przypierdolonoby",
+"przysrywaliście",
+"przysrywałyśmy",
+"rozjebalibyście",
+"rozjebałybyśmy",
+"rozjebywaliście",
+"rozjebywałyśmy",
+"rozpierdalalismy",
+"rozpierdalalysmy",
+"rozpierdalałaś",
+"rozpierdalałeś",
+"rozpierdolilismy",
+"rozpierdolilysmy",
+"rozpierdoliłaś",
+"rozpierdoliłeś",
+"rozpiździliśmy",
+"rozpiżdżałaś",
+"rozpiżdżałeś",
+"rozpiżdżałoś",
+"skurwysyńskiego",
+"skurwysyńskiemu",
+"skurwysyństwach",
+"skurwysyństwami",
+"spierdalaliście",
+"spierdalałyśmy",
+"spierdoliliście",
+"spierdoliłyśmy",
+"wkurwialibyście",
+"wkurwiałybyśmy",
+"wkurwiłybyście",
+"wpierdalaliście",
+"wpierdalałyśmy",
+"wpierdoliliście",
+"wpierdoliłyśmy",
+"wykurwiałyście",
+"wypieprzaliście",
+"wypieprzałyśmy",
+"wypieprzyliście",
+"wypieprzyłyśmy",
+"wypierdalaliscie",
+"wypierdalaliśmy",
+"wypierdalalyscie",
+"wypierdoliliscie",
+"wypierdoliliśmy",
+"wypierdolilyscie",
+"wypierdoliłabym",
+"wypierdoliłbyś",
+"wypierdolnięcie",
+"wypiżdżaliśmy",
+"zajebałybyście",
+"zajekurwabistego",
+"zajekurwabistemu",
+"zajekurwabistych",
+"zajekurwabistymi",
+"zakurwiałyście",
+"zakurwilibyście",
+"zakurwiłybyśmy",
+"zapieprzaliście",
+"zapieprzałyśmy",
+"zapieprzyliście",
+"zapieprzyłyśmy",
+"zapierdalaliscie",
+"zapierdalaliśmy",
+"zapierdalalyscie",
+"zapierdalałabym",
+"zapierdalałbyś",
+"zapierdoliliscie",
+"zapierdoliliśmy",
+"zapierdolilyscie",
+"zapierdoliłabym",
+"zapierdoliłbyś",
+"zeszmacałyście",
+"zeszmaciłyście",
+"świętojebliwej",
+"świętojebliwie",
+"świętojebliwym",
+"świętojebliwą",
+"dojebalibyście",
+"dojebałybyśmy",
+"dopieprzaliscie",
+"dopieprzaliśmy",
+"dopieprzalyscie",
+"dopieprzyliscie",
+"dopieprzyliśmy",
+"dopieprzylyscie",
+"dopierdalalismy",
+"dopierdalalysmy",
+"dopierdalałaś",
+"dopierdalałeś",
+"dopierdolilabym",
+"dopierdolilabys",
+"dopierdolilismy",
+"dopierdolilysmy",
+"dopierdoliłaby",
+"dopierdoliłaś",
+"dopierdoliłbym",
+"dopierdoliłeś",
+"dopierdoliłoby",
+"dopierdoliłyby",
+"nakurwialiście",
+"nakurwiałyśmy",
+"naopierdalajcie",
+"napierdalalismy",
+"napierdalalysmy",
+"napierdalankach",
+"napierdalankami",
+"napierdalałaś",
+"napierdalałeś",
+"napierdolilismy",
+"napierdolilysmy",
+"napierdoliłaś",
+"napierdoliłeś",
+"napierdolniecie",
+"nawpierdalajcie",
+"obeszczaliście",
+"obeszczałyśmy",
+"obszczałyście",
+"odjebywaliście",
+"odjebywałyśmy",
+"odpierdalająca",
+"odpierdalający",
+"odpierdalalismy",
+"odpierdalalysmy",
+"odpierdalałaś",
+"odpierdalałeś",
+"odpierdolilabym",
+"odpierdolilabys",
+"odpierdolilismy",
+"odpierdolilysmy",
+"odpierdoliłaby",
+"odpierdoliłaś",
+"odpierdoliłbym",
+"odpierdoliłeś",
+"odpierdoliłoby",
+"odpierdoliłyby",
+"odpierdolniecie",
+"opieprzaliście",
+"opieprzałyśmy",
+"opieprzyliście",
+"opieprzyłyśmy",
+"opierdalaliscie",
+"opierdalaliśmy",
+"opierdalalyscie",
+"opierdoliliscie",
+"opierdoliliśmy",
+"opierdolilyscie",
+"opierdolnięcie",
+"pieprznęliśmy",
+"pieprzyłyście",
+"pierdoliliście",
+"pierdoliłyśmy",
+"pierdolniętego",
+"pierdolniętemu",
+"pierdolniętych",
+"pierdolniętymi",
+"podjebalibyscie",
+"podjebalibyśmy",
+"podjebalybyscie",
+"podjebałyście",
+"podpierdalajacy",
+"podpierdalajcie",
+"podpierdalając",
+"podpierdalalaby",
+"podpierdalalbym",
+"podpierdalalbys",
+"podpierdalaliby",
+"podpierdalaloby",
+"podpierdalalyby",
+"podpierdalałam",
+"podpierdalałby",
+"podpierdalałem",
+"podpierdolilaby",
+"podpierdolilbym",
+"podpierdolilbys",
+"podpierdoliliby",
+"podpierdoliloby",
+"podpierdolilyby",
+"podpierdoliwszy",
+"podpierdoliłam",
+"podpierdoliłby",
+"podpierdoliłem",
+"podpierdolonoby",
+"popieprzyliscie",
+"popieprzyliśmy",
+"popieprzylyscie",
+"popierdalalismy",
+"popierdalalysmy",
+"popierdalałaś",
+"popierdalałeś",
+"popierdolilismy",
+"popierdolilysmy",
+"popierdoliłaś",
+"popierdoliłeś",
+"popierdolon[ey]",
+"porozpierdalać",
+"przepieprzajcie",
+"przepieprzałam",
+"przepieprzałem",
+"przepieprzonego",
+"przepieprzonemu",
+"przepieprzonych",
+"przepieprzonymi",
+"przepieprzyłam",
+"przepieprzyłem",
+"przepierdalacie",
+"przepierdalajmy",
+"przepierdalają",
+"przepierdalalam",
+"przepierdalalas",
+"przepierdalalem",
+"przepierdalales",
+"przepierdalała",
+"przepierdalało",
+"przepierdalały",
+"przepierdolicie",
+"przepierdolilam",
+"przepierdolilas",
+"przepierdolilby",
+"przepierdolilem",
+"przepierdoliles",
+"przepierdoliła",
+"przepierdoliło",
+"przepierdoliły",
+"przesrałyście",
+"przesrywaliscie",
+"przesrywaliśmy",
+"przesrywalyscie",
+"przyjebaliście",
+"przyjebałyśmy",
+"przykurwialismy",
+"przykurwialysmy",
+"przykurwiałaś",
+"przykurwiałeś",
+"przykurwiliscie",
+"przykurwiliśmy",
+"przykurwilyscie",
+"przypierdalacie",
+"przypierdalajmy",
+"przypierdalają",
+"przypierdalalam",
+"przypierdalalas",
+"przypierdalalem",
+"przypierdalales",
+"przypierdalała",
+"przypierdalało",
+"przypierdalały",
+"przypierdolicie",
+"przypierdolilam",
+"przypierdolilas",
+"przypierdolilby",
+"przypierdolilem",
+"przypierdoliles",
+"przypierdoliła",
+"przypierdoliło",
+"przypierdoliły",
+"przysrałyście",
+"przysrywaliscie",
+"przysrywaliśmy",
+"przysrywalyscie",
+"rozjebalibyscie",
+"rozjebalibyśmy",
+"rozjebalybyscie",
+"rozjebałyście",
+"rozjebywaliscie",
+"rozjebywaliśmy",
+"rozjebywalyscie",
+"rozpierdalajcie",
+"rozpierdalałam",
+"rozpierdalałem",
+"rozpierdoliłam",
+"rozpierdoliłem",
+"rozpizdzaliscie",
+"rozpizdzalyscie",
+"rozpizdziliscie",
+"rozpizdzilyscie",
+"rozpiździelach",
+"rozpiździelami",
+"rozpiździelów",
+"rozpiździłaś",
+"rozpiździłeś",
+"rozpiździłoś",
+"rozpiżdżajcie",
+"rozpiżdżałam",
+"rozpiżdżałem",
+"rozpiżdżałom",
+"skurwysynskiego",
+"skurwysynskiemu",
+"skurwysynstwach",
+"skurwysynstwami",
+"skurwysyńskich",
+"skurwysyńskiej",
+"skurwysyńskimi",
+"skurwysyństwem",
+"skurwysyństwie",
+"skurwysyństwom",
+"spierdalaliscie",
+"spierdalaliśmy",
+"spierdalalyscie",
+"spierdoliliscie",
+"spierdoliliśmy",
+"spierdolilyscie",
+"swietojebliwego",
+"swietojebliwemu",
+"swietojebliwych",
+"swietojebliwymi",
+"wjebałybyście",
+"wkurwialibyscie",
+"wkurwialibyśmy",
+"wkurwialybyscie",
+"wkurwiałyście",
+"wkurwilibyście",
+"wkurwiłybyśmy",
+"wpierdalaliscie",
+"wpierdalaliśmy",
+"wpierdalalyscie",
+"wpierdoliliscie",
+"wpierdoliliśmy",
+"wpierdolilyscie",
+"wykurwialiście",
+"wykurwiałyśmy",
+"wykurwiłyście",
+"wypieprzaliscie",
+"wypieprzaliśmy",
+"wypieprzalyscie",
+"wypieprzyliscie",
+"wypieprzyliśmy",
+"wypieprzylyscie",
+"wypierdalalismy",
+"wypierdalalysmy",
+"wypierdalałaby",
+"wypierdalałaś",
+"wypierdalałeś",
+"wypierdolilabym",
+"wypierdolilabys",
+"wypierdolilismy",
+"wypierdolilysmy",
+"wypierdoliłaby",
+"wypierdoliłaś",
+"wypierdoliłbym",
+"wypierdoliłeś",
+"wypierdoliłoby",
+"wypierdoliłyby",
+"wypierdolniecie",
+"wypiżdżałaś",
+"wypiżdżałeś",
+"wypiżdżałoś",
+"wysrywałyście",
+"wyszczałyście",
+"zajebalibyście",
+"zajebałybyśmy",
+"zajekurwabistej",
+"zajekurwabistym",
+"zajekurwabistą",
+"zajekurwabiści",
+"zakurwialiście",
+"zakurwiałyśmy",
+"zakurwilibyscie",
+"zakurwilibyśmy",
+"zakurwilybyscie",
+"zakurwiłyście",
+"zapieprzaliscie",
+"zapieprzaliśmy",
+"zapieprzalyscie",
+"zapieprzyliscie",
+"zapieprzyliśmy",
+"zapieprzylyscie",
+"zapierdalalabym",
+"zapierdalalabys",
+"zapierdalalismy",
+"zapierdalalysmy",
+"zapierdalałaby",
+"zapierdalałaś",
+"zapierdalałbym",
+"zapierdalałeś",
+"zapierdalałoby",
+"zapierdalałyby",
+"zapierdolilabym",
+"zapierdolilabys",
+"zapierdolilismy",
+"zapierdolilysmy",
+"zapierdoliłaby",
+"zapierdoliłaś",
+"zapierdoliłbym",
+"zapierdoliłeś",
+"zapierdoliłoby",
+"zapierdoliłyby",
+"zasrywałyście",
+"zaszczałyście",
+"zeszmacaliście",
+"zeszmacałyśmy",
+"zeszmaciliście",
+"zeszmaciłyśmy",
+"świętojebliwa",
+"świętojebliwe",
+"świętojebliwi",
+"świętojebliwy",
+"dojebalibyscie",
+"dojebalibyśmy",
+"dojebalybyscie",
+"dojebałyście",
+"dopieprzalismy",
+"dopieprzalysmy",
+"dopieprzałaś",
+"dopieprzałeś",
+"dopieprzylismy",
+"dopieprzylysmy",
+"dopieprzyłaś",
+"dopieprzyłeś",
+"dopierdalajcie",
+"dopierdalałam",
+"dopierdalałem",
+"dopierdolilaby",
+"dopierdolilbym",
+"dopierdolilbys",
+"dopierdoliliby",
+"dopierdoliloby",
+"dopierdolilyby",
+"dopierdoliwszy",
+"dopierdoliłam",
+"dopierdoliłby",
+"dopierdoliłem",
+"jebnęłyście",
+"nakurwialiscie",
+"nakurwialiśmy",
+"nakurwialyscie",
+"naopieprzajcie",
+"napierdalajcie",
+"napierdalankom",
+"napierdalanką",
+"napierdalankę",
+"napierdalałam",
+"napierdalałem",
+"napierdoliłam",
+"napierdoliłem",
+"nawpieprzajcie",
+"obesrałyście",
+"obeszczaliscie",
+"obeszczaliśmy",
+"obeszczalyscie",
+"obszczaliście",
+"obszczałyśmy",
+"ochujałyście",
+"ocipiałyście",
+"odjebałyście",
+"odjebywaliscie",
+"odjebywaliśmy",
+"odjebywalyscie",
+"odpierdalajaca",
+"odpierdalajacy",
+"odpierdalajcie",
+"odpierdalałam",
+"odpierdalałem",
+"odpierdolilaby",
+"odpierdolilbym",
+"odpierdolilbys",
+"odpierdoliliby",
+"odpierdoliloby",
+"odpierdolilyby",
+"odpierdoliwszy",
+"odpierdoliłam",
+"odpierdoliłby",
+"odpierdoliłem",
+"opieprzaliscie",
+"opieprzaliśmy",
+"opieprzalyscie",
+"opieprzyliscie",
+"opieprzyliśmy",
+"opieprzylyscie",
+"opierdalający",
+"opierdalalismy",
+"opierdalalysmy",
+"opierdalałaś",
+"opierdalałeś",
+"opierdolilismy",
+"opierdolilysmy",
+"opierdoliłaś",
+"opierdoliłeś",
+"opierdolniecie",
+"oszczałyście",
+"pieprzneliscie",
+"pieprznelyscie",
+"pieprznąłeś",
+"pieprznęłaś",
+"pieprznęłoś",
+"pieprzyliście",
+"pieprzyłyśmy",
+"pierdoliliscie",
+"pierdoliliśmy",
+"pierdolilyscie",
+"pierdolnietego",
+"pierdolnietemu",
+"pierdolnietych",
+"pierdolnietymi",
+"pierdolnięcie",
+"pierdolniętej",
+"pierdolniętym",
+"pierdolniętą",
+"podjebalibysmy",
+"podjebaliście",
+"podjebalybysmy",
+"podjebałabyś",
+"podjebałyśmy",
+"podpierdalacie",
+"podpierdalajac",
+"podpierdalajmy",
+"podpierdalają",
+"podpierdalalam",
+"podpierdalalas",
+"podpierdalalby",
+"podpierdalalem",
+"podpierdalales",
+"podpierdalanie",
+"podpierdalała",
+"podpierdalało",
+"podpierdalały",
+"podpierdolenie",
+"podpierdolicie",
+"podpierdolilam",
+"podpierdolilas",
+"podpierdolilby",
+"podpierdolilem",
+"podpierdoliles",
+"podpierdoliła",
+"podpierdoliło",
+"podpierdoliły",
+"popieprzylismy",
+"popieprzylysmy",
+"popieprzyłaś",
+"popieprzyłeś",
+"popierdalajcie",
+"popierdalałam",
+"popierdalałem",
+"popierdoleniec",
+"popierdoliłam",
+"popierdoliłem",
+"popierdolonego",
+"popierdolonemu",
+"popierdolonych",
+"popierdolonymi",
+"porozpierdalac",
+"przepieprzacie",
+"przepieprzajmy",
+"przepieprzają",
+"przepieprzalam",
+"przepieprzalas",
+"przepieprzalem",
+"przepieprzales",
+"przepieprzała",
+"przepieprzało",
+"przepieprzały",
+"przepieprzonej",
+"przepieprzonym",
+"przepieprzoną",
+"przepieprzycie",
+"przepieprzylam",
+"przepieprzylas",
+"przepieprzylem",
+"przepieprzyles",
+"przepieprzyła",
+"przepieprzyło",
+"przepieprzyły",
+"przepierdalaja",
+"przepierdalala",
+"przepierdalali",
+"przepierdalalo",
+"przepierdalaly",
+"przepierdalamy",
+"przepierdalasz",
+"przepierdalać",
+"przepierdalał",
+"przepierdolcie",
+"przepierdolila",
+"przepierdolili",
+"przepierdolilo",
+"przepierdolily",
+"przepierdolimy",
+"przepierdolisz",
+"przepierdolić",
+"przepierdolił",
+"przepierdolono",
+"przepierdolony",
+"przesraliście",
+"przesrałyśmy",
+"przesrywalismy",
+"przesrywalysmy",
+"przesrywałaś",
+"przesrywałeś",
+"przyjebaliscie",
+"przyjebaliśmy",
+"przyjebalyscie",
+"przyjebnięcie",
+"przykurwiajcie",
+"przykurwiałam",
+"przykurwiałem",
+"przykurwilismy",
+"przykurwilysmy",
+"przykurwiłaś",
+"przykurwiłeś",
+"przypierdalaja",
+"przypierdalala",
+"przypierdalali",
+"przypierdalalo",
+"przypierdalaly",
+"przypierdalamy",
+"przypierdalasz",
+"przypierdalać",
+"przypierdalał",
+"przypierdolcie",
+"przypierdolila",
+"przypierdolili",
+"przypierdolilo",
+"przypierdolily",
+"przypierdolimy",
+"przypierdolisz",
+"przypierdolić",
+"przypierdolił",
+"przypierdolono",
+"przypierdolony",
+"przysraliście",
+"przysrałyśmy",
+"przysrywalismy",
+"przysrywalysmy",
+"przysrywałaś",
+"przysrywałeś",
+"rozjebalibysmy",
+"rozjebaliście",
+"rozjebalybysmy",
+"rozjebałabyś",
+"rozjebałyśmy",
+"rozjebywalismy",
+"rozjebywalysmy",
+"rozjebywałaś",
+"rozjebywałeś",
+"rozpierdalacie",
+"rozpierdalajmy",
+"rozpierdalają",
+"rozpierdalalam",
+"rozpierdalalas",
+"rozpierdalalem",
+"rozpierdalales",
+"rozpierdalała",
+"rozpierdalało",
+"rozpierdalały",
+"rozpierdolicie",
+"rozpierdolilam",
+"rozpierdolilas",
+"rozpierdolilem",
+"rozpierdoliles",
+"rozpierdoliła",
+"rozpierdoliło",
+"rozpierdoliły",
+"rozpizdzalismy",
+"rozpizdzalysmy",
+"rozpizdzielach",
+"rozpizdzielami",
+"rozpizdzilismy",
+"rozpizdzilysmy",
+"rozpiździelem",
+"rozpiździelom",
+"rozpiździłam",
+"rozpiździłem",
+"rozpiździłom",
+"rozpiżdżacie",
+"rozpiżdżajmy",
+"rozpiżdżają",
+"rozpiżdżała",
+"rozpiżdżało",
+"rozpiżdżały",
+"skurwysynskich",
+"skurwysynskiej",
+"skurwysynskimi",
+"skurwysynstwem",
+"skurwysynstwie",
+"skurwysynstwom",
+"skurwysyńskie",
+"skurwysyńskim",
+"skurwysyńską",
+"skurwysyństwa",
+"skurwysyństwo",
+"skurwysyństwu",
+"spierdalalismy",
+"spierdalalysmy",
+"spierdalałaś",
+"spierdalałeś",
+"spierdolilismy",
+"spierdolilysmy",
+"spierdoliłaś",
+"spierdoliłeś",
+"swietojebliwej",
+"swietojebliwie",
+"swietojebliwym",
+"szmaciłyście",
+"wjebalibyście",
+"wjebałybyśmy",
+"wkurwiającego",
+"wkurwiającemu",
+"wkurwiających",
+"wkurwiającymi",
+"wkurwialibysmy",
+"wkurwialiście",
+"wkurwialybysmy",
+"wkurwiałabyś",
+"wkurwiałyśmy",
+"wkurwilibyscie",
+"wkurwilibyśmy",
+"wkurwilybyscie",
+"wkurwiłyście",
+"wpierdalalismy",
+"wpierdalalysmy",
+"wpierdalałaś",
+"wpierdalałeś",
+"wpierdolilismy",
+"wpierdolilysmy",
+"wpierdoliłaś",
+"wpierdoliłeś",
+"wyjebałyście",
+"wykurwialiscie",
+"wykurwialiśmy",
+"wykurwialyscie",
+"wykurwiliście",
+"wykurwiłyśmy",
+"wypieprzalismy",
+"wypieprzalysmy",
+"wypieprzałaś",
+"wypieprzałeś",
+"wypieprzylismy",
+"wypieprzylysmy",
+"wypieprzyłaś",
+"wypieprzyłeś",
+"wypierdalajcie",
+"wypierdalając",
+"wypierdalalaby",
+"wypierdalałam",
+"wypierdalałby",
+"wypierdalałem",
+"wypierdolilaby",
+"wypierdolilbym",
+"wypierdolilbys",
+"wypierdoliliby",
+"wypierdoliloby",
+"wypierdolilyby",
+"wypierdoliwszy",
+"wypierdoliłam",
+"wypierdoliłby",
+"wypierdoliłem",
+"wypierdolonego",
+"wypierdolonemu",
+"wypierdolonych",
+"wypierdolonymi",
+"wypizdzaliscie",
+"wypizdzalyscie",
+"wypiżdżajcie",
+"wypiżdżałam",
+"wypiżdżałem",
+"wypiżdżałom",
+"wysrywaliście",
+"wysrywałyśmy",
+"wyszczaliście",
+"wyszczałyśmy",
+"zajebalibyscie",
+"zajebalibyśmy",
+"zajebalybyscie",
+"zajebałyście",
+"zajebałąbyś",
+"zajekurwabisci",
+"zajekurwabista",
+"zajekurwabiste",
+"zajekurwabisty",
+"zakurwialiscie",
+"zakurwialiśmy",
+"zakurwialyscie",
+"zakurwilibysmy",
+"zakurwiliście",
+"zakurwilybysmy",
+"zakurwiłabyś",
+"zakurwiłyśmy",
+"zapieprzalismy",
+"zapieprzalysmy",
+"zapieprzałaś",
+"zapieprzałeś",
+"zapieprzylismy",
+"zapieprzylysmy",
+"zapieprzyłaś",
+"zapieprzyłeś",
+"zapierdalajcie",
+"zapierdalając",
+"zapierdalalaby",
+"zapierdalalbym",
+"zapierdalalbys",
+"zapierdalaliby",
+"zapierdalaloby",
+"zapierdalalyby",
+"zapierdalałam",
+"zapierdalałby",
+"zapierdalałem",
+"zapierdolilaby",
+"zapierdolilbym",
+"zapierdolilbys",
+"zapierdoliliby",
+"zapierdoliloby",
+"zapierdolilyby",
+"zapierdoliłam",
+"zapierdoliłby",
+"zapierdoliłem",
+"zapierdolonoby",
+"zasrywaliście",
+"zasrywałyśmy",
+"zaszczaliście",
+"zaszczałyśmy",
+"zeszmacaliscie",
+"zeszmacaliśmy",
+"zeszmacalyscie",
+"zeszmaciliscie",
+"zeszmaciliśmy",
+"zeszmacilyscie",
+"świętojebliw",
+"dojebalibysmy",
+"dojebaliście",
+"dojebalybysmy",
+"dojebałabyś",
+"dojebałyśmy",
+"dopieprzajcie",
+"dopieprzałam",
+"dopieprzałem",
+"dopieprzyłam",
+"dopieprzyłem",
+"dopierdalacie",
+"dopierdalajmy",
+"dopierdalają",
+"dopierdalalam",
+"dopierdalalas",
+"dopierdalalem",
+"dopierdalales",
+"dopierdalała",
+"dopierdalało",
+"dopierdalały",
+"dopierdolicie",
+"dopierdolilam",
+"dopierdolilas",
+"dopierdolilby",
+"dopierdolilem",
+"dopierdoliles",
+"dopierdoliła",
+"dopierdoliło",
+"dopierdoliły",
+"gównoburzach",
+"gównoburzami",
+"jebnęliście",
+"jebnęłyśmy",
+"kurwiłyście",
+"nakurwialismy",
+"nakurwialysmy",
+"nakurwiałaś",
+"nakurwiałeś",
+"naopierdalać",
+"napieprzajcie",
+"napierdalacie",
+"napierdalajmy",
+"napierdalają",
+"napierdalalam",
+"napierdalalas",
+"napierdalalem",
+"napierdalales",
+"napierdalance",
+"napierdalanek",
+"napierdalanie",
+"napierdalanka",
+"napierdalanke",
+"napierdalanki",
+"napierdalanko",
+"napierdalała",
+"napierdalało",
+"napierdalały",
+"napierdolenie",
+"napierdolicie",
+"napierdolilam",
+"napierdolilas",
+"napierdolilem",
+"napierdoliles",
+"napierdoliła",
+"napierdoliło",
+"napierdoliły",
+"nawpierdalać",
+"niedojebanego",
+"niedojebanemu",
+"niedojebanych",
+"niedojebanymi",
+"obesraliście",
+"obesrałyśmy",
+"obeszczalismy",
+"obeszczalysmy",
+"obeszczałaś",
+"obeszczałeś",
+"obsrałyście",
+"obszczaliscie",
+"obszczaliśmy",
+"obszczalyscie",
+"ochujaliście",
+"ochujałyśmy",
+"ochujeliście",
+"ocipiałyśmy",
+"ocipieliście",
+"odjebaliście",
+"odjebałyśmy",
+"odjebywalismy",
+"odjebywalysmy",
+"odjebywałaś",
+"odjebywałeś",
+"odpierdalacie",
+"odpierdalajmy",
+"odpierdalają",
+"odpierdalalam",
+"odpierdalalas",
+"odpierdalalem",
+"odpierdalales",
+"odpierdalała",
+"odpierdalało",
+"odpierdalały",
+"odpierdolenie",
+"odpierdolicie",
+"odpierdolilam",
+"odpierdolilas",
+"odpierdolilby",
+"odpierdolilem",
+"odpierdoliles",
+"odpierdoliła",
+"odpierdoliło",
+"odpierdoliły",
+"ojebałyście",
+"opieprzający",
+"opieprzalismy",
+"opieprzalysmy",
+"opieprzałaś",
+"opieprzałeś",
+"opieprzylismy",
+"opieprzylysmy",
+"opieprzyłaś",
+"opieprzyłeś",
+"opierdalajacy",
+"opierdalajcie",
+"opierdalałam",
+"opierdalałem",
+"opierdoliłam",
+"opierdoliłem",
+"oszczaliście",
+"oszczałyśmy",
+"pieprznelismy",
+"pieprznelysmy",
+"pieprznięcie",
+"pieprznąłem",
+"pieprznęłam",
+"pieprznęłom",
+"pieprzyliscie",
+"pieprzyliśmy",
+"pieprzylyscie",
+"pierdolilismy",
+"pierdolilysmy",
+"pierdoliłaś",
+"pierdoliłeś",
+"pierdolniecie",
+"pierdolnietej",
+"pierdolnietym",
+"pierdolnikach",
+"pierdolnikami",
+"pierdolnikiem",
+"pierdolnikowi",
+"pierdolników",
+"pierdolnięci",
+"pierdolnięta",
+"pierdolnięte",
+"pierdolnięty",
+"pierdolącego",
+"pierdolącemu",
+"pierdolących",
+"pierdolącymi",
+"piździelcach",
+"piździelcami",
+"piździelcowi",
+"piździelców",
+"podjebaliscie",
+"podjebaliśmy",
+"podjebalyscie",
+"podjebałabym",
+"podjebałbyś",
+"podjebnięcie",
+"podkurwiajcie",
+"podkurwięcie",
+"podpierdalaja",
+"podpierdalala",
+"podpierdalali",
+"podpierdalalo",
+"podpierdalaly",
+"podpierdalamy",
+"podpierdalano",
+"podpierdalany",
+"podpierdalasz",
+"podpierdalać",
+"podpierdalał",
+"podpierdolcie",
+"podpierdolila",
+"podpierdolili",
+"podpierdolilo",
+"podpierdolily",
+"podpierdolimy",
+"podpierdolisz",
+"podpierdolić",
+"podpierdolił",
+"podpierdolono",
+"podpierdolony",
+"popieprzonego",
+"popieprzonemu",
+"popieprzonych",
+"popieprzonymi",
+"popieprzyłam",
+"popieprzyłem",
+"popierdalacie",
+"popierdalajmy",
+"popierdalają",
+"popierdalalam",
+"popierdalalas",
+"popierdalalem",
+"popierdalales",
+"popierdalanie",
+"popierdalała",
+"popierdalało",
+"popierdalały",
+"popierdolenie",
+"popierdolicie",
+"popierdolilam",
+"popierdolilas",
+"popierdolilem",
+"popierdoliles",
+"popierdoliła",
+"popierdoliło",
+"popierdoliły",
+"popierdolonej",
+"popierdolonym",
+"popierdoloną",
+"porozpierdala",
+"posrałyście",
+"przepieprzaja",
+"przepieprzala",
+"przepieprzali",
+"przepieprzalo",
+"przepieprzaly",
+"przepieprzamy",
+"przepieprzasz",
+"przepieprzać",
+"przepieprzał",
+"przepieprzcie",
+"przepieprzeni",
+"przepieprzona",
+"przepieprzone",
+"przepieprzony",
+"przepieprzyla",
+"przepieprzyli",
+"przepieprzylo",
+"przepieprzyly",
+"przepieprzymy",
+"przepieprzysz",
+"przepieprzyć",
+"przepieprzył",
+"przepierdalac",
+"przepierdalaj",
+"przepierdalal",
+"przepierdalam",
+"przepierdolic",
+"przepierdolil",
+"przepierdolmy",
+"przepierdolon",
+"przepierdolą",
+"przepierdolę",
+"przesraliscie",
+"przesraliśmy",
+"przesralyscie",
+"przesrywajcie",
+"przesrywałam",
+"przesrywałem",
+"przyjebalismy",
+"przyjebalysmy",
+"przyjebałaś",
+"przyjebałeś",
+"przyjebniecie",
+"przykurwiajmy",
+"przykurwiają",
+"przykurwialam",
+"przykurwialas",
+"przykurwialem",
+"przykurwiales",
+"przykurwiała",
+"przykurwiało",
+"przykurwiały",
+"przykurwienie",
+"przykurwiłam",
+"przykurwiłem",
+"przypierdalac",
+"przypierdalaj",
+"przypierdalal",
+"przypierdalam",
+"przypierdolic",
+"przypierdolil",
+"przypierdolmy",
+"przypierdolon",
+"przypierdolą",
+"przypierdolę",
+"przysraliscie",
+"przysraliśmy",
+"przysralyscie",
+"przysrywajcie",
+"przysrywałam",
+"przysrywałem",
+"rozjebaliscie",
+"rozjebaliśmy",
+"rozjebalyscie",
+"rozjebałabym",
+"rozjebałbyś",
+"rozjebywałam",
+"rozjebywałem",
+"rozkurwiajcie",
+"rozpierdalaja",
+"rozpierdalala",
+"rozpierdalali",
+"rozpierdalalo",
+"rozpierdalaly",
+"rozpierdalamy",
+"rozpierdalasz",
+"rozpierdalać",
+"rozpierdalał",
+"rozpierdolach",
+"rozpierdolamy",
+"rozpierdolcie",
+"rozpierdolila",
+"rozpierdolili",
+"rozpierdolilo",
+"rozpierdolily",
+"rozpierdolimy",
+"rozpierdolisz",
+"rozpierdolić",
+"rozpierdolił",
+"rozpierdolowi",
+"rozpierdolów",
+"rozpizdzajcie",
+"rozpizdzielem",
+"rozpizdzielom",
+"rozpizdzielow",
+"rozpiździcie",
+"rozpiździele",
+"rozpiździeli",
+"rozpiździła",
+"rozpiździło",
+"rozpiździły",
+"rozpiźdźcie",
+"rozpiżdżali",
+"rozpiżdżamy",
+"rozpiżdżasz",
+"rozpiżdżać",
+"rozpiżdżał",
+"skurwesynowie",
+"skurwysynowie",
+"skurwysynskie",
+"skurwysynskim",
+"skurwysynstwa",
+"skurwysynstwo",
+"skurwysynstwu",
+"skurwysyńscy",
+"skurwysyńska",
+"skurwysyński",
+"skurwysyństw",
+"spieprzająca",
+"spieprzający",
+"spierdalajacy",
+"spierdalajcie",
+"spierdalałam",
+"spierdalałem",
+"spierdoliłam",
+"spierdoliłem",
+"spierdolonego",
+"spierdolonemu",
+"spierdolonych",
+"spierdolonymi",
+"swietojebliwa",
+"swietojebliwe",
+"swietojebliwi",
+"swietojebliwy",
+"szczałyście",
+"szmaciliście",
+"szmaciłyśmy",
+"ujebałyście",
+"upierdolonego",
+"upierdolonemu",
+"upierdolonych",
+"upierdolonymi",
+"wjebalibyscie",
+"wjebalibyśmy",
+"wjebalybyscie",
+"wjebałyście",
+"wkurwiajacego",
+"wkurwiajacemu",
+"wkurwiajacych",
+"wkurwiajacymi",
+"wkurwiającej",
+"wkurwiającym",
+"wkurwiającą",
+"wkurwialiscie",
+"wkurwialiśmy",
+"wkurwialyscie",
+"wkurwiałabym",
+"wkurwiałbyś",
+"wkurwilibysmy",
+"wkurwiliście",
+"wkurwilybysmy",
+"wkurwiłabyś",
+"wkurwiłyśmy",
+"wpierdalajcie",
+"wpierdalałam",
+"wpierdalałem",
+"wpierdoliłam",
+"wpierdoliłem",
+"wyjebaliście",
+"wyjebałabyś",
+"wyjebałyśmy",
+"wykurwialismy",
+"wykurwialysmy",
+"wykurwianiach",
+"wykurwianiami",
+"wykurwiałaś",
+"wykurwiałeś",
+"wykurwiliscie",
+"wykurwiliśmy",
+"wykurwilyscie",
+"wypieprzajcie",
+"wypieprzałam",
+"wypieprzałem",
+"wypieprzonego",
+"wypieprzonemu",
+"wypieprzonych",
+"wypieprzonymi",
+"wypieprzyłam",
+"wypieprzyłem",
+"wypierdalacie",
+"wypierdalajac",
+"wypierdalajmy",
+"wypierdalają",
+"wypierdalalam",
+"wypierdalalas",
+"wypierdalalby",
+"wypierdalalem",
+"wypierdalales",
+"wypierdalała",
+"wypierdalało",
+"wypierdalały",
+"wypierdolenie",
+"wypierdolicie",
+"wypierdolilam",
+"wypierdolilas",
+"wypierdolilby",
+"wypierdolilem",
+"wypierdoliles",
+"wypierdoliła",
+"wypierdoliło",
+"wypierdoliły",
+"wypierdolonej",
+"wypierdolonym",
+"wypierdoloną",
+"wypizdzalismy",
+"wypizdzalysmy",
+"wypiżdżacie",
+"wypiżdżajmy",
+"wypiżdżają",
+"wypiżdżała",
+"wypiżdżało",
+"wypiżdżały",
+"wysrałyście",
+"wysrywaliscie",
+"wysrywaliśmy",
+"wysrywalyscie",
+"wyszczaliscie",
+"wyszczaliśmy",
+"wyszczalyscie",
+"włazidupstwo",
+"zajebalibysmy",
+"zajebaliście",
+"zajebalybysmy",
+"zajebałyśmy",
+"zakurwialismy",
+"zakurwialysmy",
+"zakurwiałaś",
+"zakurwiałeś",
+"zakurwiliscie",
+"zakurwiliśmy",
+"zakurwilyscie",
+"zakurwiłabym",
+"zakurwiłbyś",
+"zapieprzajcie",
+"zapieprzałam",
+"zapieprzałem",
+"zapieprzonego",
+"zapieprzonemu",
+"zapieprzonych",
+"zapieprzonymi",
+"zapieprzyłam",
+"zapieprzyłem",
+"zapierdalacie",
+"zapierdalajac",
+"zapierdalajmy",
+"zapierdalają",
+"zapierdalalam",
+"zapierdalalas",
+"zapierdalalby",
+"zapierdalalem",
+"zapierdalales",
+"zapierdalała",
+"zapierdalało",
+"zapierdalały",
+"zapierdolenie",
+"zapierdolicie",
+"zapierdolilam",
+"zapierdolilas",
+"zapierdolilby",
+"zapierdolilem",
+"zapierdoliles",
+"zapierdoliła",
+"zapierdoliło",
+"zapierdoliły",
+"zasrałyście",
+"zasrywaliscie",
+"zasrywaliśmy",
+"zasrywalyscie",
+"zaszczaliscie",
+"zaszczaliśmy",
+"zaszczalyscie",
+"zesrałyście",
+"zeszmacalismy",
+"zeszmacalysmy",
+"zeszmacałaś",
+"zeszmacałeś",
+"zeszmacałoś",
+"zeszmacilismy",
+"zeszmacilysmy",
+"zeszmaciłaś",
+"zeszmaciłeś",
+"zeszmaciłoś",
+"zjebałyście",
+"dojebaliscie",
+"dojebaliśmy",
+"dojebalyscie",
+"dojebałabym",
+"dojebałbyś",
+"dopieprzacie",
+"dopieprzajmy",
+"dopieprzają",
+"dopieprzalam",
+"dopieprzalas",
+"dopieprzalem",
+"dopieprzales",
+"dopieprzała",
+"dopieprzało",
+"dopieprzały",
+"dopieprzycie",
+"dopieprzylam",
+"dopieprzylas",
+"dopieprzylem",
+"dopieprzyles",
+"dopieprzyła",
+"dopieprzyło",
+"dopieprzyły",
+"dopierdalaja",
+"dopierdalala",
+"dopierdalali",
+"dopierdalalo",
+"dopierdalaly",
+"dopierdalamy",
+"dopierdalasz",
+"dopierdalać",
+"dopierdalał",
+"dopierdolcie",
+"dopierdolila",
+"dopierdolili",
+"dopierdolilo",
+"dopierdolily",
+"dopierdolimy",
+"dopierdolisz",
+"dopierdolić",
+"dopierdolił",
+"dopierdolono",
+"gownoburzach",
+"gownoburzami",
+"gównoburzom",
+"gównoburzą",
+"gównoburzę",
+"jebałyście",
+"jebnąłbyś",
+"jebnęliśmy",
+"kurwiliście",
+"kurwiszonach",
+"kurwiszonami",
+"kurwiszonowi",
+"kurwiszonów",
+"kurwiłyśmy",
+"matkojebcach",
+"matkojebcami",
+"matkojebców",
+"najebnięcie",
+"nakurwiajcie",
+"nakurwiałam",
+"nakurwiałem",
+"nakurwięcie",
+"naopieprzać",
+"naopierdalac",
+"naopierdalaj",
+"naopierdalam",
+"napierdalaja",
+"napierdalala",
+"napierdalali",
+"napierdalalo",
+"napierdalaly",
+"napierdalamy",
+"napierdalany",
+"napierdalasz",
+"napierdalać",
+"napierdalał",
+"napierdolcie",
+"napierdolila",
+"napierdolili",
+"napierdolilo",
+"napierdolily",
+"napierdolimy",
+"napierdolisz",
+"napierdolić",
+"napierdolił",
+"napierdolony",
+"nawpieprzać",
+"nawpierdalac",
+"nawpierdalaj",
+"nawpierdalam",
+"niedojebanej",
+"niedojebanym",
+"niedojebaną",
+"niedorozwoja",
+"niedorozwoje",
+"niedorozwój",
+"obesraliscie",
+"obesraliśmy",
+"obesralyscie",
+"obeszczajcie",
+"obeszczanego",
+"obeszczanemu",
+"obeszczanych",
+"obeszczanymi",
+"obeszczałam",
+"obeszczałem",
+"obsraliście",
+"obsrałyśmy",
+"obsrywający",
+"obszczalismy",
+"obszczalysmy",
+"obszczałaś",
+"obszczałeś",
+"ochujaliscie",
+"ochujaliśmy",
+"ochujalyscie",
+"ochujeliscie",
+"ochujeliśmy",
+"ocipialyscie",
+"ocipieliscie",
+"ocipieliśmy",
+"odjebaliscie",
+"odjebaliśmy",
+"odjebalyscie",
+"odjebnięcie",
+"odjebywałam",
+"odjebywałem",
+"odpieprzyła",
+"odpierdalaja",
+"odpierdalala",
+"odpierdalali",
+"odpierdalalo",
+"odpierdalaly",
+"odpierdalamy",
+"odpierdalasz",
+"odpierdalać",
+"odpierdalał",
+"odpierdolcie",
+"odpierdolila",
+"odpierdolili",
+"odpierdolilo",
+"odpierdolily",
+"odpierdolimy",
+"odpierdolisz",
+"odpierdolić",
+"odpierdolił",
+"odpierdolono",
+"odpierdolony",
+"ojebaliście",
+"ojebałyśmy",
+"opieprzajcie",
+"opieprzałam",
+"opieprzałem",
+"opieprzyłam",
+"opieprzyłem",
+"opierdalacie",
+"opierdalajmy",
+"opierdalają",
+"opierdalalam",
+"opierdalalas",
+"opierdalalem",
+"opierdalales",
+"opierdalała",
+"opierdalało",
+"opierdalały",
+"opierdolenie",
+"opierdolicie",
+"opierdolilam",
+"opierdolilas",
+"opierdolilem",
+"opierdoliles",
+"opierdoliła",
+"opierdoliło",
+"opierdoliły",
+"oszczaliscie",
+"oszczaliśmy",
+"oszczalyscie",
+"pieprzeniach",
+"pieprzeniami",
+"pieprzniecie",
+"pieprznijcie",
+"pieprznięty",
+"pieprznęła",
+"pieprznęło",
+"pieprznęły",
+"pieprzylismy",
+"pieprzylysmy",
+"pieprzyłaś",
+"pieprzyłeś",
+"pierdolacego",
+"pierdolacemu",
+"pierdolacych",
+"pierdolacymi",
+"pierdoliliby",
+"pierdoliłam",
+"pierdoliłby",
+"pierdoliłem",
+"pierdolnieci",
+"pierdolnieta",
+"pierdolniete",
+"pierdolniety",
+"pierdolnikom",
+"pierdolnikow",
+"pierdolnięt",
+"pierdolonego",
+"pierdolonemu",
+"pierdolonych",
+"pierdolonymi",
+"pierdolącej",
+"pierdolącym",
+"pierdolącą",
+"pizdzielcach",
+"pizdzielcami",
+"pizdzielcowi",
+"piździelcem",
+"piździelcom",
+"podjebalabym",
+"podjebalabys",
+"podjebalismy",
+"podjebalysmy",
+"podjebałaby",
+"podjebałaś",
+"podjebałbym",
+"podjebałeś",
+"podjebałoby",
+"podjebałyby",
+"podjebniecie",
+"podkurwiecie",
+"podkurwienie",
+"podpierdalac",
+"podpierdalaj",
+"podpierdalal",
+"podpierdalam",
+"podpierdalan",
+"podpierdolic",
+"podpierdolil",
+"podpierdolmy",
+"podpierdolon",
+"podpierdolą",
+"podpierdolę",
+"pojebańcach",
+"pojebańcami",
+"pojebańcowi",
+"pojebańców",
+"pokurwionego",
+"pokurwionemu",
+"pokurwionych",
+"pokurwionymi",
+"popieprzonej",
+"popieprzonym",
+"popieprzoną",
+"popieprzycie",
+"popieprzylam",
+"popieprzylas",
+"popieprzylem",
+"popieprzyles",
+"popieprzyła",
+"popieprzyło",
+"popieprzyły",
+"popierdalaja",
+"popierdalala",
+"popierdalali",
+"popierdalalo",
+"popierdalaly",
+"popierdalamy",
+"popierdalany",
+"popierdalasz",
+"popierdalać",
+"popierdalał",
+"popierdolcie",
+"popierdoleni",
+"popierdolila",
+"popierdolili",
+"popierdolilo",
+"popierdolily",
+"popierdolimy",
+"popierdolisz",
+"popierdolić",
+"popierdolił",
+"popierdolona",
+"posraliście",
+"posrałyśmy",
+"przejebanego",
+"przejebanemu",
+"przejebanych",
+"przejebanymi",
+"przepieprzac",
+"przepieprzaj",
+"przepieprzal",
+"przepieprzam",
+"przepieprzmy",
+"przepieprzyc",
+"przepieprzyl",
+"przepieprzą",
+"przepieprzę",
+"przepierdala",
+"przepierdola",
+"przepierdole",
+"przepierdoli",
+"przesralismy",
+"przesralysmy",
+"przesrałaś",
+"przesrałeś",
+"przesrywacie",
+"przesrywajmy",
+"przesrywają",
+"przesrywalam",
+"przesrywalas",
+"przesrywalem",
+"przesrywales",
+"przesrywała",
+"przesrywało",
+"przesrywały",
+"przyjebanego",
+"przyjebanemu",
+"przyjebanych",
+"przyjebanymi",
+"przyjebałam",
+"przyjebałem",
+"przyjebiecie",
+"przykurwiaja",
+"przykurwiala",
+"przykurwiali",
+"przykurwialo",
+"przykurwialy",
+"przykurwiamy",
+"przykurwiasz",
+"przykurwiać",
+"przykurwiał",
+"przykurwicie",
+"przykurwilam",
+"przykurwilas",
+"przykurwilem",
+"przykurwiles",
+"przykurwiony",
+"przykurwiła",
+"przykurwiło",
+"przykurwiły",
+"przypierdala",
+"przypierdola",
+"przypierdole",
+"przypierdoli",
+"przysralismy",
+"przysralysmy",
+"przysrałaś",
+"przysrałeś",
+"przysrywacie",
+"przysrywajmy",
+"przysrywają",
+"przysrywalam",
+"przysrywalas",
+"przysrywalem",
+"przysrywales",
+"przysrywała",
+"przysrywało",
+"przysrywały",
+"rozchujniacz",
+"rozjebalabym",
+"rozjebalabys",
+"rozjebalismy",
+"rozjebalysmy",
+"rozjebałaby",
+"rozjebałaś",
+"rozjebałbym",
+"rozjebałeś",
+"rozjebałoby",
+"rozjebałyby",
+"rozjebujecie",
+"rozjebywalam",
+"rozjebywalas",
+"rozjebywalem",
+"rozjebywales",
+"rozjebywała",
+"rozjebywało",
+"rozjebywały",
+"rozkurwienie",
+"rozpierdalac",
+"rozpierdalaj",
+"rozpierdalal",
+"rozpierdalam",
+"rozpierdolem",
+"rozpierdolic",
+"rozpierdolil",
+"rozpierdolmy",
+"rozpierdolom",
+"rozpierdolow",
+"rozpierdolą",
+"rozpierdolę",
+"rozpizdzacie",
+"rozpizdzajmy",
+"rozpizdzalam",
+"rozpizdzalas",
+"rozpizdzalem",
+"rozpizdzales",
+"rozpizdzalom",
+"rozpizdzalos",
+"rozpizdzicie",
+"rozpizdziele",
+"rozpizdzieli",
+"rozpizdzilam",
+"rozpizdzilas",
+"rozpizdzilem",
+"rozpizdziles",
+"rozpizdzilom",
+"rozpizdzilos",
+"rozpiździel",
+"rozpiździli",
+"rozpiździmy",
+"rozpiździsz",
+"rozpiździć",
+"rozpiździł",
+"rozpiźdźmy",
+"rozpiżdzali",
+"rozpiżdżaj",
+"rozpiżdżam",
+"rozpiżdżą",
+"rozpiżdżę",
+"skurwesynach",
+"skurwesynami",
+"skurwesynowi",
+"skurwesynów",
+"skurwysynach",
+"skurwysynami",
+"skurwysynowi",
+"skurwysynscy",
+"skurwysynska",
+"skurwysynski",
+"skurwysynstw",
+"skurwysynów",
+"skurwysyńsk",
+"spieprzajacy",
+"spieprzajcie",
+"spierdalacie",
+"spierdalajmy",
+"spierdalają",
+"spierdalalam",
+"spierdalalas",
+"spierdalalem",
+"spierdalales",
+"spierdalała",
+"spierdalało",
+"spierdalały",
+"spierdolenie",
+"spierdolicie",
+"spierdolilam",
+"spierdolilas",
+"spierdolilem",
+"spierdoliles",
+"spierdoliła",
+"spierdoliło",
+"spierdoliły",
+"spierdolonej",
+"spierdolonym",
+"spierdoloną",
+"suczysynowie",
+"sukinkotowie",
+"sukinsynowie",
+"swietojebliw",
+"szczaliście",
+"szczytowanie",
+"szmaciliscie",
+"szmaciliśmy",
+"szmacilyscie",
+"ujebaliście",
+"ujebałyśmy",
+"upieprzonego",
+"upieprzonemu",
+"upieprzonych",
+"upieprzonymi",
+"upierdliwego",
+"upierdliwemu",
+"upierdliwiec",
+"upierdliwych",
+"upierdliwymi",
+"upierdolonej",
+"upierdolonym",
+"upierdoloną",
+"wjebalibysmy",
+"wjebaliście",
+"wjebalybysmy",
+"wjebałabyś",
+"wjebałyśmy",
+"wkurwiajacej",
+"wkurwiajacym",
+"wkurwiająca",
+"wkurwiające",
+"wkurwiający",
+"wkurwialabym",
+"wkurwialabys",
+"wkurwialismy",
+"wkurwialysmy",
+"wkurwianiach",
+"wkurwianiami",
+"wkurwiałaby",
+"wkurwiałaś",
+"wkurwiałbym",
+"wkurwiałeś",
+"wkurwiałoby",
+"wkurwiałyby",
+"wkurwiliscie",
+"wkurwiliśmy",
+"wkurwilyscie",
+"wkurwiłabym",
+"wkurwiłbyś",
+"wlazidupstwo",
+"wpieprzajcie",
+"wpierdalacie",
+"wpierdalajmy",
+"wpierdalają",
+"wpierdalalam",
+"wpierdalalas",
+"wpierdalalem",
+"wpierdalales",
+"wpierdalała",
+"wpierdalało",
+"wpierdalały",
+"wpierdolicie",
+"wpierdolilam",
+"wpierdolilas",
+"wpierdolilem",
+"wpierdoliles",
+"wpierdoliła",
+"wpierdoliło",
+"wpierdoliły",
+"wyjebaliscie",
+"wyjebaliśmy",
+"wyjebalyscie",
+"wyjebałabym",
+"wyjebałbyś",
+"wyjebnięcie",
+"wykurwiajcie",
+"wykurwianiem",
+"wykurwianiom",
+"wykurwiałam",
+"wykurwiałem",
+"wykurwilismy",
+"wykurwilysmy",
+"wykurwięcie",
+"wykurwiłaś",
+"wykurwiłeś",
+"wykurwiście",
+"wypieprzacie",
+"wypieprzajmy",
+"wypieprzają",
+"wypieprzalam",
+"wypieprzalas",
+"wypieprzalem",
+"wypieprzales",
+"wypieprzała",
+"wypieprzało",
+"wypieprzały",
+"wypieprzonej",
+"wypieprzonym",
+"wypieprzoną",
+"wypieprzycie",
+"wypieprzylam",
+"wypieprzylas",
+"wypieprzylem",
+"wypieprzyles",
+"wypieprzyła",
+"wypieprzyło",
+"wypieprzyły",
+"wypierdalaja",
+"wypierdalala",
+"wypierdalali",
+"wypierdalalo",
+"wypierdalaly",
+"wypierdalamy",
+"wypierdalano",
+"wypierdalasz",
+"wypierdalać",
+"wypierdalał",
+"wypierdolcie",
+"wypierdoleni",
+"wypierdolila",
+"wypierdolili",
+"wypierdolilo",
+"wypierdolily",
+"wypierdolimy",
+"wypierdolisz",
+"wypierdolić",
+"wypierdolił",
+"wypierdolona",
+"wypierdolone",
+"wypierdolono",
+"wypierdolony",
+"wypizdzajcie",
+"wypiżdżali",
+"wypiżdżamy",
+"wypiżdżasz",
+"wypiżdżać",
+"wypiżdżał",
+"wysraliście",
+"wysrałyśmy",
+"wysrywalismy",
+"wysrywalysmy",
+"wysrywałaś",
+"wysrywałeś",
+"wyszczalismy",
+"wyszczalysmy",
+"wyszczałaś",
+"wyszczałeś",
+"zajebaliscie",
+"zajebaliśmy",
+"zajebalyscie",
+"zajebałabym",
+"zajebałbyś",
+"zajebiaszczo",
+"zakurwiajcie",
+"zakurwiałam",
+"zakurwiałem",
+"zakurwilabym",
+"zakurwilabys",
+"zakurwilismy",
+"zakurwilysmy",
+"zakurwionego",
+"zakurwionemu",
+"zakurwionych",
+"zakurwionymi",
+"zakurwiłaby",
+"zakurwiłaś",
+"zakurwiłbym",
+"zakurwiłeś",
+"zakurwiłoby",
+"zakurwiłyby",
+"zapieprzacie",
+"zapieprzajmy",
+"zapieprzają",
+"zapieprzalam",
+"zapieprzalas",
+"zapieprzalem",
+"zapieprzales",
+"zapieprzała",
+"zapieprzało",
+"zapieprzały",
+"zapieprzonej",
+"zapieprzonym",
+"zapieprzoną",
+"zapieprzycie",
+"zapieprzylam",
+"zapieprzylas",
+"zapieprzylem",
+"zapieprzyles",
+"zapieprzyła",
+"zapieprzyło",
+"zapieprzyły",
+"zapierdalaja",
+"zapierdalala",
+"zapierdalali",
+"zapierdalalo",
+"zapierdalaly",
+"zapierdalamy",
+"zapierdalano",
+"zapierdalasz",
+"zapierdalać",
+"zapierdalał",
+"zapierdolach",
+"zapierdolamy",
+"zapierdolcie",
+"zapierdolila",
+"zapierdolili",
+"zapierdolilo",
+"zapierdolily",
+"zapierdolimy",
+"zapierdolisz",
+"zapierdolić",
+"zapierdolił",
+"zapierdolono",
+"zapierdolony",
+"zapierdolowi",
+"zapierdolów",
+"zasraliście",
+"zasrałyśmy",
+"zasrywający",
+"zasrywalismy",
+"zasrywalysmy",
+"zasrywałaś",
+"zasrywałeś",
+"zaszczalismy",
+"zaszczalysmy",
+"zaszczałaś",
+"zaszczałeś",
+"zesraliście",
+"zesrałyśmy",
+"zeszmacajcie",
+"zeszmacałam",
+"zeszmacałem",
+"zeszmacałom",
+"zeszmaciłam",
+"zeszmaciłem",
+"zeszmaciłom",
+"zjebaliście",
+"zjebałyśmy",
+"chujowość",
+"ciulnięcie",
+"dojebalabym",
+"dojebalabys",
+"dojebalismy",
+"dojebalysmy",
+"dojebałaby",
+"dojebałaś",
+"dojebałbym",
+"dojebałeś",
+"dojebałoby",
+"dojebałyby",
+"dopieprzaja",
+"dopieprzala",
+"dopieprzali",
+"dopieprzalo",
+"dopieprzaly",
+"dopieprzamy",
+"dopieprzasz",
+"dopieprzać",
+"dopieprzał",
+"dopieprzcie",
+"dopieprzyla",
+"dopieprzyli",
+"dopieprzylo",
+"dopieprzyly",
+"dopieprzymy",
+"dopieprzysz",
+"dopieprzyć",
+"dopieprzył",
+"dopierdalac",
+"dopierdalaj",
+"dopierdalal",
+"dopierdalam",
+"dopierdolic",
+"dopierdolil",
+"dopierdolmy",
+"dopierdolą",
+"dopierdolę",
+"dupodajkach",
+"dupodajkami",
+"dziwkarzach",
+"dziwkarzami",
+"dziwkarzowi",
+"gownoburzom",
+"gównoburza",
+"gównoburze",
+"gównoburzo",
+"gównoburzy",
+"jebaliście",
+"jebałabyś",
+"jebałyśmy",
+"jebneliscie",
+"jebnelyscie",
+"jebniętego",
+"jebniętemu",
+"jebniętych",
+"jebniętymi",
+"jebnąłbym",
+"jebnąłeś",
+"jebnęłaby",
+"jebnęłaś",
+"jebnęłoby",
+"jebnęłyby",
+"kurewskiego",
+"kurewskiemu",
+"kurewstwach",
+"kurewstwami",
+"kurwidołek",
+"kurwidołku",
+"kurwiliscie",
+"kurwiliśmy",
+"kurwilyscie",
+"kurwiszonem",
+"kurwiszonie",
+"kurwiszonom",
+"kurwiszonow",
+"lachociągi",
+"matkojebcom",
+"matkojebcow",
+"matkojebcą",
+"matkojebcę",
+"najebniecie",
+"nakurwiacie",
+"nakurwiajmy",
+"nakurwiają",
+"nakurwialam",
+"nakurwialas",
+"nakurwialem",
+"nakurwiales",
+"nakurwiała",
+"nakurwiało",
+"nakurwiały",
+"nakurwiecie",
+"nakurwienie",
+"naopieprzac",
+"naopieprzaj",
+"naopieprzam",
+"naopierdala",
+"napieprzać",
+"napierdalac",
+"napierdalaj",
+"napierdalal",
+"napierdalam",
+"napierdolic",
+"napierdolil",
+"napierdolmy",
+"napierdolą",
+"napierdolę",
+"nasrałbyś",
+"nawpieprzac",
+"nawpieprzaj",
+"nawpieprzam",
+"nawpierdala",
+"niedojebana",
+"niedojebane",
+"niedojebani",
+"niedojebany",
+"niedorozwoj",
+"obesralismy",
+"obesralysmy",
+"obesrałaś",
+"obesrałeś",
+"obeszczajmy",
+"obeszczają",
+"obeszczalam",
+"obeszczalas",
+"obeszczalem",
+"obeszczales",
+"obeszczanej",
+"obeszczanym",
+"obeszczaną",
+"obeszczała",
+"obeszczało",
+"obeszczały",
+"obsraliscie",
+"obsraliśmy",
+"obsralyscie",
+"obsrałbyś",
+"obsrywajacy",
+"obszczajcie",
+"obszczanego",
+"obszczanemu",
+"obszczanych",
+"obszczanymi",
+"obszczałam",
+"obszczałem",
+"ochujalismy",
+"ochujalysmy",
+"ochujałaś",
+"ochujałeś",
+"ochujejecie",
+"ochujelismy",
+"ocipialysmy",
+"ocipiałeś",
+"ocipiejecie",
+"ocipielismy",
+"ociulałeś",
+"oczojebnego",
+"oczojebnemu",
+"oczojebnych",
+"oczojebnymi",
+"odjebalismy",
+"odjebalysmy",
+"odjebałaś",
+"odjebałeś",
+"odjebniecie",
+"odjebujecie",
+"odjebywalam",
+"odjebywalas",
+"odjebywalem",
+"odjebywales",
+"odjebywała",
+"odjebywało",
+"odjebywały",
+"odpieprzać",
+"odpieprzcie",
+"odpieprzyla",
+"odpieprzyć",
+"odpieprzył",
+"odpierdalac",
+"odpierdalaj",
+"odpierdalal",
+"odpierdalam",
+"odpierdolic",
+"odpierdolil",
+"odpierdolmy",
+"odpierdolą",
+"odpierdolę",
+"odupnięcie",
+"ojcojebcach",
+"ojcojebcami",
+"ojcojebców",
+"ojebaliscie",
+"ojebaliśmy",
+"ojebalyscie",
+"opieprzacie",
+"opieprzajmy",
+"opieprzają",
+"opieprzalam",
+"opieprzalas",
+"opieprzalem",
+"opieprzales",
+"opieprzała",
+"opieprzało",
+"opieprzały",
+"opieprzycie",
+"opieprzylam",
+"opieprzylas",
+"opieprzylem",
+"opieprzyles",
+"opieprzyła",
+"opieprzyło",
+"opieprzyły",
+"opierdalaja",
+"opierdalala",
+"opierdalali",
+"opierdalalo",
+"opierdalaly",
+"opierdalamy",
+"opierdalasz",
+"opierdalać",
+"opierdalał",
+"opierdolcie",
+"opierdolila",
+"opierdolili",
+"opierdolilo",
+"opierdolily",
+"opierdolimy",
+"opierdolisz",
+"opierdolić",
+"opierdolił",
+"opierdolony",
+"osrałabyś",
+"osrałyśmy",
+"osrywałaś",
+"osrywałeś",
+"oszczalismy",
+"oszczalysmy",
+"oszczałaś",
+"oszczałeś",
+"pieprzeniem",
+"pieprzeniom",
+"pieprznalem",
+"pieprznales",
+"pieprznelam",
+"pieprznelas",
+"pieprznelom",
+"pieprznelos",
+"pieprzniemy",
+"pieprzniesz",
+"pieprzniety",
+"pieprznijmy",
+"pieprznąć",
+"pieprznął",
+"pieprznęli",
+"pieprzonego",
+"pieprzonemu",
+"pieprzonych",
+"pieprzonymi",
+"pieprzyłam",
+"pieprzyłem",
+"pierdolacej",
+"pierdolacym",
+"pierdolcach",
+"pierdolcami",
+"pierdolcowi",
+"pierdolców",
+"pierdolecie",
+"pierdolenie",
+"pierdolicie",
+"pierdolilam",
+"pierdolilas",
+"pierdolilby",
+"pierdolilem",
+"pierdoliles",
+"pierdoliła",
+"pierdoliło",
+"pierdoliły",
+"pierdolniet",
+"pierdolnika",
+"pierdolniki",
+"pierdolniku",
+"pierdolonej",
+"pierdolonym",
+"pierdoloną",
+"pierdoląca",
+"pierdolące",
+"pierdolący",
+"pizdowatego",
+"pizdowatemu",
+"pizdowatych",
+"pizdowatymi",
+"pizdzielcem",
+"pizdzielcom",
+"pizdzielcow",
+"piździelca",
+"piździelce",
+"piździelcu",
+"piździelcy",
+"piździelec",
+"piździochu",
+"piździochy",
+"podjebalaby",
+"podjebalbym",
+"podjebalbys",
+"podjebaliby",
+"podjebaloby",
+"podjebalyby",
+"podjebawszy",
+"podjebałam",
+"podjebałby",
+"podjebałem",
+"podjebiecie",
+"podkurwiać",
+"podkurwiony",
+"podpierdala",
+"podpierdola",
+"podpierdole",
+"podpierdoli",
+"pojebancach",
+"pojebancami",
+"pojebancowi",
+"pojebańcem",
+"pojebańcom",
+"pokurwionej",
+"pokurwionym",
+"pokurwioną",
+"popieprzcie",
+"popieprzeni",
+"popieprzona",
+"popieprzone",
+"popieprzony",
+"popieprzyla",
+"popieprzyli",
+"popieprzylo",
+"popieprzyly",
+"popieprzymy",
+"popieprzysz",
+"popieprzyć",
+"popieprzył",
+"popierdalac",
+"popierdalaj",
+"popierdalal",
+"popierdalam",
+"popierdalan",
+"popierdolic",
+"popierdolil",
+"popierdolka",
+"popierdolki",
+"popierdolko",
+"popierdolmy",
+"popierdolon",
+"popierdolą",
+"popierdolę",
+"posraliscie",
+"posraliśmy",
+"posralyscie",
+"posrałbyś",
+"przechujowo",
+"przejebanej",
+"przejebanie",
+"przejebanym",
+"przejebaną",
+"przepieprza",
+"przepieprze",
+"przepieprzy",
+"przepierdol",
+"przesrajcie",
+"przesranego",
+"przesranemu",
+"przesranych",
+"przesranymi",
+"przesrałam",
+"przesrałem",
+"przesrywaja",
+"przesrywala",
+"przesrywali",
+"przesrywalo",
+"przesrywaly",
+"przesrywamy",
+"przesrywasz",
+"przesrywać",
+"przesrywał",
+"przyjebalam",
+"przyjebalas",
+"przyjebalem",
+"przyjebales",
+"przyjebanej",
+"przyjebanie",
+"przyjebanym",
+"przyjebaną",
+"przyjebała",
+"przyjebało",
+"przyjebały",
+"przyjebiemy",
+"przyjebiesz",
+"przykurwcie",
+"przykurwiac",
+"przykurwiaj",
+"przykurwial",
+"przykurwiam",
+"przykurwila",
+"przykurwili",
+"przykurwilo",
+"przykurwily",
+"przykurwimy",
+"przykurwion",
+"przykurwisz",
+"przykurwią",
+"przykurwić",
+"przykurwię",
+"przykurwił",
+"przypierdol",
+"przysrajcie",
+"przysrałam",
+"przysrałem",
+"przysrywaja",
+"przysrywala",
+"przysrywali",
+"przysrywalo",
+"przysrywaly",
+"przysrywamy",
+"przysrywasz",
+"przysrywać",
+"przysrywał",
+"rozjebalaby",
+"rozjebalbym",
+"rozjebalbys",
+"rozjebaliby",
+"rozjebaloby",
+"rozjebalyby",
+"rozjebanego",
+"rozjebanemu",
+"rozjebaniem",
+"rozjebanoby",
+"rozjebanych",
+"rozjebanymi",
+"rozjebawszy",
+"rozjebałam",
+"rozjebałby",
+"rozjebałem",
+"rozjebiecie",
+"rozjebujcie",
+"rozjebujemy",
+"rozjebujesz",
+"rozjebywala",
+"rozjebywali",
+"rozjebywalo",
+"rozjebywaly",
+"rozjebywać",
+"rozjebywał",
+"rozkurwiać",
+"rozkurwiony",
+"rozpierdola",
+"rozpierdole",
+"rozpierdoli",
+"rozpierdolu",
+"rozpizdzaja",
+"rozpizdzala",
+"rozpizdzali",
+"rozpizdzalo",
+"rozpizdzaly",
+"rozpizdzamy",
+"rozpizdzasz",
+"rozpizdzcie",
+"rozpizdziel",
+"rozpizdzila",
+"rozpizdzili",
+"rozpizdzilo",
+"rozpizdzily",
+"rozpizdzimy",
+"rozpizdzisz",
+"rozpiżdża",
+"skurwesynem",
+"skurwesynie",
+"skurwesynom",
+"skurwesynow",
+"skurwielach",
+"skurwielami",
+"skurwielowi",
+"skurwysynem",
+"skurwysynie",
+"skurwysynom",
+"skurwysynow",
+"skurwysynsk",
+"spieprzają",
+"spierdalaja",
+"spierdalala",
+"spierdalali",
+"spierdalalo",
+"spierdalaly",
+"spierdalamy",
+"spierdalasz",
+"spierdalać",
+"spierdalał",
+"spierdolcie",
+"spierdoleni",
+"spierdolila",
+"spierdolili",
+"spierdolilo",
+"spierdolily",
+"spierdolimy",
+"spierdolina",
+"spierdolisz",
+"spierdolić",
+"spierdolił",
+"spierdolona",
+"spierdolone",
+"spierdolono",
+"spierdolony",
+"srałyście",
+"suczysynach",
+"suczysynami",
+"suczysynowi",
+"suczysynów",
+"sukinkotach",
+"sukinkotami",
+"sukinkotowi",
+"sukinkotów",
+"sukinsynach",
+"sukinsynami",
+"sukinsynowi",
+"sukinsynów",
+"szczaliscie",
+"szczaliśmy",
+"szczalyscie",
+"szmacilismy",
+"szmacilysmy",
+"szmaciłaś",
+"szmaciłeś",
+"szmaciłoś",
+"ujebaliscie",
+"ujebaliśmy",
+"ujebalyscie",
+"upieprzonej",
+"upieprzonym",
+"upieprzoną",
+"upierdliwcu",
+"upierdliwcy",
+"upierdliwej",
+"upierdliwym",
+"upierdliwą",
+"upierdoleni",
+"upierdolona",
+"upierdolone",
+"upierdolony",
+"usrałabyś",
+"usrałyśmy",
+"wjebaliscie",
+"wjebaliśmy",
+"wjebalyscie",
+"wjebałabym",
+"wjebałbyś",
+"wjebnięcie",
+"wkurwiajaca",
+"wkurwiajace",
+"wkurwiajacy",
+"wkurwiajcie",
+"wkurwiając",
+"wkurwialaby",
+"wkurwialbym",
+"wkurwialbys",
+"wkurwialiby",
+"wkurwialoby",
+"wkurwialyby",
+"wkurwianiem",
+"wkurwianiom",
+"wkurwianoby",
+"wkurwiałam",
+"wkurwiałby",
+"wkurwiałem",
+"wkurwilabym",
+"wkurwilabys",
+"wkurwilismy",
+"wkurwilysmy",
+"wkurwionego",
+"wkurwionemu",
+"wkurwionych",
+"wkurwionymi",
+"wkurwiłaby",
+"wkurwiłaś",
+"wkurwiłbym",
+"wkurwiłeś",
+"wkurwiłoby",
+"wpierdalaja",
+"wpierdalala",
+"wpierdalali",
+"wpierdalalo",
+"wpierdalaly",
+"wpierdalamy",
+"wpierdalasz",
+"wpierdalać",
+"wpierdalał",
+"wpierdolach",
+"wpierdolamy",
+"wpierdolcie",
+"wpierdolila",
+"wpierdolili",
+"wpierdolilo",
+"wpierdolily",
+"wpierdolimy",
+"wpierdolisz",
+"wpierdolić",
+"wpierdolił",
+"wpierdolowi",
+"wpierdolów",
+"wyjebalabym",
+"wyjebalabys",
+"wyjebalismy",
+"wyjebalysmy",
+"wyjebałaby",
+"wyjebałaś",
+"wyjebałbym",
+"wyjebałeś",
+"wyjebałoby",
+"wyjebałyby",
+"wyjebniecie",
+"wykurwiacie",
+"wykurwiajmy",
+"wykurwiają",
+"wykurwialam",
+"wykurwialas",
+"wykurwialem",
+"wykurwiales",
+"wykurwiania",
+"wykurwianie",
+"wykurwianiu",
+"wykurwiała",
+"wykurwiało",
+"wykurwiały",
+"wykurwiecie",
+"wykurwienie",
+"wykurwiscie",
+"wykurwiłam",
+"wykurwiłem",
+"wypieprzaja",
+"wypieprzala",
+"wypieprzali",
+"wypieprzalo",
+"wypieprzaly",
+"wypieprzamy",
+"wypieprzasz",
+"wypieprzać",
+"wypieprzał",
+"wypieprzcie",
+"wypieprzeni",
+"wypieprzona",
+"wypieprzone",
+"wypieprzony",
+"wypieprzyla",
+"wypieprzyli",
+"wypieprzylo",
+"wypieprzyly",
+"wypieprzymy",
+"wypieprzysz",
+"wypieprzyć",
+"wypieprzył",
+"wypierdalac",
+"wypierdalaj",
+"wypierdalal",
+"wypierdalam",
+"wypierdkach",
+"wypierdkami",
+"wypierdkiem",
+"wypierdkowi",
+"wypierdków",
+"wypierdolic",
+"wypierdolil",
+"wypierdolmy",
+"wypierdolon",
+"wypierdolą",
+"wypierdolę",
+"wypizdzacie",
+"wypizdzajmy",
+"wypizdzalam",
+"wypizdzalas",
+"wypizdzalem",
+"wypizdzales",
+"wypizdzalom",
+"wypizdzalos",
+"wypiżdzali",
+"wypiżdżaj",
+"wypiżdżam",
+"wysraliscie",
+"wysraliśmy",
+"wysralyscie",
+"wysrałbyś",
+"wysrywajcie",
+"wysrywałam",
+"wysrywałem",
+"wyszczajcie",
+"wyszczanego",
+"wyszczanemu",
+"wyszczanych",
+"wyszczanymi",
+"wyszczałam",
+"wyszczałem",
+"zajebalabym",
+"zajebalabys",
+"zajebalismy",
+"zajebalysmy",
+"zajebałaby",
+"zajebałaś",
+"zajebałbym",
+"zajebałeś",
+"zajebałoby",
+"zajebałyby",
+"zajebistego",
+"zajebistemu",
+"zajebistych",
+"zajebistymi",
+"zajebiście",
+"zakurwiacie",
+"zakurwiajmy",
+"zakurwiają",
+"zakurwialam",
+"zakurwialas",
+"zakurwialem",
+"zakurwiales",
+"zakurwiała",
+"zakurwiało",
+"zakurwiały",
+"zakurwienie",
+"zakurwilaby",
+"zakurwilbym",
+"zakurwilbys",
+"zakurwiliby",
+"zakurwiloby",
+"zakurwilyby",
+"zakurwionej",
+"zakurwionym",
+"zakurwioną",
+"zakurwiwszy",
+"zakurwiłam",
+"zakurwiłby",
+"zakurwiłem",
+"zapieprzaja",
+"zapieprzala",
+"zapieprzali",
+"zapieprzalo",
+"zapieprzaly",
+"zapieprzamy",
+"zapieprzasz",
+"zapieprzać",
+"zapieprzał",
+"zapieprzcie",
+"zapieprzeni",
+"zapieprzona",
+"zapieprzone",
+"zapieprzony",
+"zapieprzyla",
+"zapieprzyli",
+"zapieprzylo",
+"zapieprzyly",
+"zapieprzymy",
+"zapieprzysz",
+"zapieprzyć",
+"zapieprzył",
+"zapierdalac",
+"zapierdalaj",
+"zapierdalal",
+"zapierdalam",
+"zapierdolem",
+"zapierdolic",
+"zapierdolil",
+"zapierdolmy",
+"zapierdolom",
+"zapierdolon",
+"zapierdolow",
+"zapierdolą",
+"zapierdolę",
+"zapierdziel",
+"zasraliscie",
+"zasraliśmy",
+"zasralyscie",
+"zasrałbyś",
+"zasrańcach",
+"zasrańcami",
+"zasrańcowi",
+"zasrańców",
+"zasrywajcie",
+"zasrywałam",
+"zasrywałem",
+"zaszczajcie",
+"zaszczanego",
+"zaszczanemu",
+"zaszczanych",
+"zaszczanymi",
+"zaszczałam",
+"zaszczałem",
+"zesraliscie",
+"zesraliśmy",
+"zesralyscie",
+"zesrałbyś",
+"zeszmacacie",
+"zeszmacajmy",
+"zeszmacają",
+"zeszmacalam",
+"zeszmacalas",
+"zeszmacalem",
+"zeszmacales",
+"zeszmacalom",
+"zeszmacalos",
+"zeszmacała",
+"zeszmacało",
+"zeszmacały",
+"zeszmacicie",
+"zeszmacilam",
+"zeszmacilas",
+"zeszmacilem",
+"zeszmaciles",
+"zeszmacilom",
+"zeszmacilos",
+"zeszmaciła",
+"zeszmaciło",
+"zeszmaciły",
+"zeszmaćcie",
+"zjebaliscie",
+"zjebaliśmy",
+"zjebalyscie",
+"zjebnięcie",
+"choojniach",
+"choojniami",
+"choojowego",
+"choojowemu",
+"choojowych",
+"choojowymi",
+"chooyniach",
+"chooyniami",
+"chooyowego",
+"chooyowemu",
+"chooyowych",
+"chooyowymi",
+"cipeczkach",
+"cipeczkami",
+"ciulniecie",
+"dojebalaby",
+"dojebalbym",
+"dojebalbys",
+"dojebaliby",
+"dojebaloby",
+"dojebalyby",
+"dojebanoby",
+"dojebawszy",
+"dojebałam",
+"dojebałby",
+"dojebałem",
+"dojebiecie",
+"dopieprzac",
+"dopieprzaj",
+"dopieprzal",
+"dopieprzam",
+"dopieprzmy",
+"dopieprzyc",
+"dopieprzyl",
+"dopieprzą",
+"dopieprzę",
+"dopierdola",
+"dopierdole",
+"dopierdoli",
+"dupodajkom",
+"dupodajką",
+"dupodajkę",
+"dupolizach",
+"dupolizami",
+"dziwkarzem",
+"dziwkarzom",
+"gownianego",
+"gownianemu",
+"gownianych",
+"gownianymi",
+"gownoburza",
+"gownoburze",
+"gownoburzo",
+"gownoburzy",
+"gównoburz",
+"gównozjad",
+"hoojowemoo",
+"jebadłach",
+"jebadłami",
+"jebaliscie",
+"jebaliśmy",
+"jebalyscie",
+"jebałabym",
+"jebałbyś",
+"jebańcach",
+"jebańcami",
+"jebańców",
+"jebiącego",
+"jebiącemu",
+"jebiących",
+"jebiącymi",
+"jebnelismy",
+"jebnelysmy",
+"jebnietego",
+"jebnietemu",
+"jebnietych",
+"jebnietymi",
+"jebnijmyż",
+"jebnięcia",
+"jebnięcie",
+"jebnięciu",
+"jebniętej",
+"jebniętym",
+"jebniętą",
+"jebnąwszy",
+"jebnąłby",
+"jebnąłem",
+"jebnęliby",
+"jebnęłam",
+"kurestwach",
+"kurestwami",
+"kurewskich",
+"kurewskiej",
+"kurewskimi",
+"kurewstwem",
+"kurewstwie",
+"kurewstwom",
+"kurwiarnia",
+"kurwidolek",
+"kurwidolku",
+"kurwilismy",
+"kurwilysmy",
+"kurwiszcza",
+"kurwiszcze",
+"kurwiszona",
+"kurwiszony",
+"kurwiątka",
+"kurwiątko",
+"kurwiłaś",
+"kurwiłeś",
+"kutasiarza",
+"kutasiarzu",
+"lachociąg",
+"matkojebca",
+"matkojebce",
+"matkojebco",
+"matkojebcy",
+"mineciarzu",
+"nadupczcie",
+"nadupczony",
+"nadupczyć",
+"nakurwiaja",
+"nakurwiala",
+"nakurwiali",
+"nakurwialo",
+"nakurwialy",
+"nakurwiamy",
+"nakurwiasz",
+"nakurwiać",
+"nakurwiał",
+"nakurwiony",
+"naopieprza",
+"napieprzac",
+"napieprzaj",
+"napieprzam",
+"napierdala",
+"napierdola",
+"napierdole",
+"napierdoli",
+"nasrajmyż",
+"nasrałaby",
+"nasrałaś",
+"nasrałbym",
+"nasrałeś",
+"nasrałoby",
+"nasrałyby",
+"nawpieprza",
+"nienasrań",
+"nieobsrań",
+"nieosraną",
+"nieposrań",
+"niesrając",
+"nieusraną",
+"niewysrań",
+"niezasrań",
+"niezesrań",
+"obesrajcie",
+"obesrajże",
+"obesranego",
+"obesranemu",
+"obesranych",
+"obesranymi",
+"obesrałam",
+"obesrałby",
+"obesrałem",
+"obeszczaja",
+"obeszczala",
+"obeszczali",
+"obeszczalo",
+"obeszczaly",
+"obeszczamy",
+"obeszczana",
+"obeszczane",
+"obeszczani",
+"obeszczany",
+"obeszczasz",
+"obeszczać",
+"obeszczał",
+"obeszczcie",
+"obsrajmyż",
+"obsralismy",
+"obsralysmy",
+"obsrałaby",
+"obsrałaś",
+"obsrałbym",
+"obsrałeś",
+"obsrałoby",
+"obsrałyby",
+"obsrywają",
+"obsrywaną",
+"obsrywała",
+"obsrywało",
+"obsrywały",
+"obszczajmy",
+"obszczają",
+"obszczalam",
+"obszczalas",
+"obszczalem",
+"obszczales",
+"obszczanej",
+"obszczanym",
+"obszczaną",
+"obszczała",
+"obszczało",
+"obszczały",
+"ochujałam",
+"ochujałem",
+"ochujejcie",
+"ochujejemy",
+"ochujejesz",
+"ocipiałam",
+"ocipiałem",
+"ocipiejcie",
+"ocipiejemy",
+"ocipiejesz",
+"oczojebnej",
+"oczojebnym",
+"oczojebną",
+"odjebanego",
+"odjebanemu",
+"odjebanych",
+"odjebanymi",
+"odjebałam",
+"odjebałem",
+"odjebiecie",
+"odjebujemy",
+"odjebujesz",
+"odjebywala",
+"odjebywali",
+"odjebywalo",
+"odjebywaly",
+"odjebywać",
+"odjebywał",
+"odpieprzac",
+"odpieprzyc",
+"odpieprzyl",
+"odpieprzę",
+"odpierdala",
+"odpierdola",
+"odpierdole",
+"odpierdoli",
+"odupczenie",
+"odupniecie",
+"ojcojebcom",
+"ojcojebcow",
+"ojcojebcą",
+"ojcojebcę",
+"ojebalismy",
+"ojebalysmy",
+"ojebałaś",
+"ojebałeś",
+"opieprzaja",
+"opieprzala",
+"opieprzali",
+"opieprzalo",
+"opieprzaly",
+"opieprzamy",
+"opieprzasz",
+"opieprzać",
+"opieprzał",
+"opieprzcie",
+"opieprzyla",
+"opieprzyli",
+"opieprzylo",
+"opieprzyly",
+"opieprzymy",
+"opieprzysz",
+"opieprzyć",
+"opieprzył",
+"opierdalac",
+"opierdalaj",
+"opierdalal",
+"opierdalam",
+"opierdolic",
+"opierdolil",
+"opierdolmy",
+"opierdolą",
+"opierdolę",
+"osrajcież",
+"osraliśmy",
+"osrałabym",
+"osrałbyś",
+"osrywając",
+"osrywajże",
+"osrywałam",
+"osrywałby",
+"osrywałem",
+"oszczajcie",
+"oszczajże",
+"oszczałam",
+"oszczałby",
+"oszczałem",
+"pieprzenia",
+"pieprzenie",
+"pieprzeniu",
+"pieprznela",
+"pieprzneli",
+"pieprznelo",
+"pieprznely",
+"pieprzonej",
+"pieprzonym",
+"pieprzoną",
+"pieprzycie",
+"pieprzylam",
+"pieprzylas",
+"pieprzylem",
+"pieprzyles",
+"pieprzyła",
+"pieprzyło",
+"pieprzyły",
+"pierdolaca",
+"pierdolace",
+"pierdolach",
+"pierdolacy",
+"pierdolami",
+"pierdolcem",
+"pierdolcie",
+"pierdolcom",
+"pierdolcow",
+"pierdoleni",
+"pierdolila",
+"pierdolili",
+"pierdolilo",
+"pierdolily",
+"pierdolimy",
+"pierdolisz",
+"pierdolić",
+"pierdolił",
+"pierdolnac",
+"pierdolnie",
+"pierdolnik",
+"pierdololo",
+"pierdolona",
+"pierdolone",
+"pierdolony",
+"pizdowatej",
+"pizdowatym",
+"pizdowatą",
+"pizdzielca",
+"pizdzielce",
+"pizdzielcu",
+"pizdzielcy",
+"pizdzielec",
+"pizdziochu",
+"pizdziochy",
+"piździoch",
+"podesrają",
+"podesraną",
+"podesrała",
+"podesrało",
+"podesrały",
+"podjebalam",
+"podjebalas",
+"podjebalby",
+"podjebalem",
+"podjebales",
+"podjebanie",
+"podjebała",
+"podjebało",
+"podjebały",
+"podjebiemy",
+"podjebiesz",
+"podkurwcie",
+"podkurwiac",
+"podkurwiaj",
+"podkurwiam",
+"podkurwion",
+"podkurwić",
+"podkurwię",
+"podpierdol",
+"pojebancem",
+"pojebancom",
+"pojebancow",
+"pojebanego",
+"pojebanemu",
+"pojebanica",
+"pojebaniec",
+"pojebanych",
+"pojebanymi",
+"pojebańca",
+"pojebańce",
+"pojebańcu",
+"pojebańcy",
+"pokurwieni",
+"pokurwiona",
+"pokurwione",
+"pokurwiony",
+"pokurwiło",
+"popieprzmy",
+"popieprzyc",
+"popieprzyl",
+"popieprzą",
+"popieprzę",
+"popierdala",
+"popierdola",
+"popierdole",
+"popierdoli",
+"posrajmyż",
+"posralismy",
+"posralysmy",
+"posrałaby",
+"posrałaś",
+"posrałbym",
+"posrałeś",
+"posrałoby",
+"posrałyby",
+"przechooje",
+"przechooye",
+"przejebana",
+"przejebane",
+"przejebany",
+"przejebać",
+"przejebcie",
+"przejebię",
+"przepieprz",
+"przesracie",
+"przesrajmy",
+"przesrają",
+"przesralam",
+"przesralas",
+"przesralem",
+"przesrales",
+"przesranej",
+"przesranym",
+"przesraną",
+"przesrała",
+"przesrało",
+"przesrały",
+"przesrywac",
+"przesrywaj",
+"przesrywal",
+"przesrywam",
+"przyjebala",
+"przyjebali",
+"przyjebalo",
+"przyjebaly",
+"przyjebana",
+"przyjebane",
+"przyjebani",
+"przyjebany",
+"przyjebać",
+"przyjebał",
+"przyjebań",
+"przyjebcie",
+"przyjebią",
+"przyjebię",
+"przyjebże",
+"przykurwia",
+"przykurwic",
+"przykurwie",
+"przykurwil",
+"przykurwmy",
+"przysracie",
+"przysrajmy",
+"przysrają",
+"przysralam",
+"przysralas",
+"przysralem",
+"przysrales",
+"przysrała",
+"przysrało",
+"przysrały",
+"przysrywac",
+"przysrywaj",
+"przysrywal",
+"przysrywam",
+"rozjebalam",
+"rozjebalas",
+"rozjebalby",
+"rozjebalem",
+"rozjebales",
+"rozjebanej",
+"rozjebania",
+"rozjebanie",
+"rozjebaniu",
+"rozjebanym",
+"rozjebaną",
+"rozjebała",
+"rozjebało",
+"rozjebały",
+"rozjebiemy",
+"rozjebiesz",
+"rozjebujmy",
+"rozjebują",
+"rozjebuję",
+"rozjebywac",
+"rozjebywal",
+"rozkurwcie",
+"rozkurwiac",
+"rozkurwiaj",
+"rozkurwiam",
+"rozkurwion",
+"rozkurwić",
+"rozkurwię",
+"rozpierdol",
+"rozpizdzac",
+"rozpizdzaj",
+"rozpizdzal",
+"rozpizdzam",
+"rozpizdzic",
+"rozpizdzil",
+"rozpizdzmy",
+"rozpiździ",
+"rozpiźdź",
+"skurwesyna",
+"skurwesyni",
+"skurwesynu",
+"skurwesyny",
+"skurwielem",
+"skurwielom",
+"skurwienie",
+"skurwysyna",
+"skurwysyni",
+"skurwysynu",
+"skurwysyny",
+"spieprzać",
+"spieprzcie",
+"spieprzony",
+"spieprzyć",
+"spierdalac",
+"spierdalaj",
+"spierdalal",
+"spierdalam",
+"spierdolic",
+"spierdolil",
+"spierdolmy",
+"spierdolon",
+"spierdolą",
+"spierdolę",
+"sraczykach",
+"sraczykami",
+"sraczykiem",
+"sraczykowi",
+"sraczyków",
+"srającego",
+"srającemu",
+"srających",
+"srającymi",
+"sraliście",
+"sraluchów",
+"srałabyś",
+"srałyśmy",
+"srańskach",
+"srańskami",
+"srańskiem",
+"suczysynem",
+"suczysynie",
+"suczysynom",
+"suczysynow",
+"sukinkocie",
+"sukinkotem",
+"sukinkotie",
+"sukinkotom",
+"sukinkotow",
+"sukinsynem",
+"sukinsynie",
+"sukinsynom",
+"sukinsynow",
+"szczalismy",
+"szczalysmy",
+"szczałaś",
+"szczałeś",
+"szczochach",
+"szczochami",
+"szczochowi",
+"szczochów",
+"szmaciłam",
+"szmaciłem",
+"szmaciłom",
+"ujebalismy",
+"ujebalysmy",
+"ujebałaś",
+"ujebałeś",
+"upieprzeni",
+"upieprzona",
+"upieprzone",
+"upieprzony",
+"upierdliwa",
+"upierdliwe",
+"upierdliwi",
+"upierdliwy",
+"usrajcież",
+"usraliśmy",
+"usrałabym",
+"usrałbyś",
+"wjebalabym",
+"wjebalabys",
+"wjebalismy",
+"wjebalysmy",
+"wjebałaby",
+"wjebałaś",
+"wjebałbym",
+"wjebałeś",
+"wjebałoby",
+"wjebałyby",
+"wjebniecie",
+"wkurwiacie",
+"wkurwiajac",
+"wkurwiajmy",
+"wkurwiają",
+"wkurwialam",
+"wkurwialas",
+"wkurwialby",
+"wkurwialem",
+"wkurwiales",
+"wkurwiania",
+"wkurwianie",
+"wkurwianiu",
+"wkurwiała",
+"wkurwiało",
+"wkurwiały",
+"wkurwienie",
+"wkurwilaby",
+"wkurwilbym",
+"wkurwilbys",
+"wkurwiliby",
+"wkurwiloby",
+"wkurwionej",
+"wkurwionym",
+"wkurwioną",
+"wkurwiłam",
+"wkurwiłby",
+"wkurwiłem",
+"wpieprzać",
+"wpieprzcie",
+"wpieprzyć",
+"wpierdalac",
+"wpierdalaj",
+"wpierdalal",
+"wpierdalam",
+"wpierdolem",
+"wpierdolic",
+"wpierdolil",
+"wpierdolmy",
+"wpierdolom",
+"wpierdolow",
+"wpierdolą",
+"wpierdolę",
+"wyjebalaby",
+"wyjebalbym",
+"wyjebalbys",
+"wyjebaloby",
+"wyjebalyby",
+"wyjebanego",
+"wyjebanemu",
+"wyjebanych",
+"wyjebanymi",
+"wyjebałam",
+"wyjebałby",
+"wyjebałem",
+"wyjebiecie",
+"wykurwiaja",
+"wykurwiala",
+"wykurwiali",
+"wykurwialo",
+"wykurwialy",
+"wykurwiamy",
+"wykurwiasz",
+"wykurwiać",
+"wykurwiał",
+"wykurwiań",
+"wykurwicie",
+"wykurwilam",
+"wykurwilas",
+"wykurwilem",
+"wykurwiles",
+"wykurwiony",
+"wykurwisty",
+"wykurwiła",
+"wykurwiło",
+"wykurwiły",
+"wypieprzac",
+"wypieprzaj",
+"wypieprzal",
+"wypieprzam",
+"wypieprzmy",
+"wypieprzyc",
+"wypieprzyl",
+"wypieprzą",
+"wypieprzę",
+"wypieprzł",
+"wypierdala",
+"wypierdkom",
+"wypierdkow",
+"wypierdola",
+"wypierdole",
+"wypierdoli",
+"wypizdzaja",
+"wypizdzala",
+"wypizdzali",
+"wypizdzalo",
+"wypizdzaly",
+"wypizdzamy",
+"wypizdzasz",
+"wypiżdża",
+"wysrajmyż",
+"wysralismy",
+"wysralysmy",
+"wysrałaby",
+"wysrałaś",
+"wysrałbym",
+"wysrałeś",
+"wysrałoby",
+"wysrałyby",
+"wysrywacie",
+"wysrywajmy",
+"wysrywają",
+"wysrywalam",
+"wysrywalas",
+"wysrywalem",
+"wysrywales",
+"wysrywała",
+"wysrywało",
+"wysrywały",
+"wyszczajmy",
+"wyszczają",
+"wyszczalam",
+"wyszczalas",
+"wyszczalem",
+"wyszczales",
+"wyszczanej",
+"wyszczanym",
+"wyszczaną",
+"wyszczała",
+"wyszczało",
+"wyszczały",
+"zajebalaby",
+"zajebalbym",
+"zajebalbys",
+"zajebaliby",
+"zajebaloby",
+"zajebalyby",
+"zajebanymi",
+"zajebawszy",
+"zajebałam",
+"zajebałby",
+"zajebałem",
+"zajebcież",
+"zajebiecie",
+"zajebiscie",
+"zajebistej",
+"zajebistym",
+"zajebistą",
+"zajebiści",
+"zakurwiaja",
+"zakurwiala",
+"zakurwiali",
+"zakurwialo",
+"zakurwialy",
+"zakurwiamy",
+"zakurwiasz",
+"zakurwiać",
+"zakurwiał",
+"zakurwicie",
+"zakurwieni",
+"zakurwilam",
+"zakurwilas",
+"zakurwilby",
+"zakurwilem",
+"zakurwiles",
+"zakurwiona",
+"zakurwione",
+"zakurwiono",
+"zakurwiony",
+"zakurwiła",
+"zakurwiło",
+"zakurwiły",
+"zapieprzac",
+"zapieprzaj",
+"zapieprzal",
+"zapieprzam",
+"zapieprzmy",
+"zapieprzyc",
+"zapieprzyl",
+"zapieprzą",
+"zapieprzę",
+"zapierdala",
+"zapierdola",
+"zapierdole",
+"zapierdoli",
+"zapierdolu",
+"zasrajmyż",
+"zasralismy",
+"zasralysmy",
+"zasrancach",
+"zasrancami",
+"zasrancowi",
+"zasrałaby",
+"zasrałaś",
+"zasrałbym",
+"zasrałeś",
+"zasrałoby",
+"zasrałyby",
+"zasrańcem",
+"zasrańcom",
+"zasrańcze",
+"zasrebrzą",
+"zasrebrzę",
+"zasrywacie",
+"zasrywajmy",
+"zasrywają",
+"zasrywalam",
+"zasrywalas",
+"zasrywalem",
+"zasrywales",
+"zasrywaną",
+"zasrywała",
+"zasrywało",
+"zasrywały",
+"zaszczajmy",
+"zaszczają",
+"zaszczalam",
+"zaszczalas",
+"zaszczalem",
+"zaszczales",
+"zaszczanej",
+"zaszczanym",
+"zaszczaną",
+"zaszczała",
+"zaszczało",
+"zaszczały",
+"zesrajmyż",
+"zesralismy",
+"zesralysmy",
+"zesrałaby",
+"zesrałaś",
+"zesrałbym",
+"zesrałeś",
+"zesrałoby",
+"zesrałyby",
+"zesrywają",
+"zesrywała",
+"zesrywało",
+"zesrywały",
+"zeszmacaja",
+"zeszmacala",
+"zeszmacali",
+"zeszmacalo",
+"zeszmacaly",
+"zeszmacamy",
+"zeszmacasz",
+"zeszmacać",
+"zeszmacał",
+"zeszmaccie",
+"zeszmacila",
+"zeszmacili",
+"zeszmacilo",
+"zeszmacily",
+"zeszmacimy",
+"zeszmacisz",
+"zeszmacić",
+"zeszmacił",
+"zeszmaćmy",
+"zjebalismy",
+"zjebalysmy",
+"zjebałaś",
+"zjebałeś",
+"zjebniecie",
+"choojniom",
+"choojnią",
+"choojnię",
+"choojowej",
+"choojowym",
+"choojową",
+"chooyniom",
+"chooynią",
+"chooynię",
+"chooyowey",
+"chooyowym",
+"chooyową",
+"chujniach",
+"chujniami",
+"chujowego",
+"chujowemu",
+"chujowosc",
+"chujowych",
+"chujowymi",
+"cipeczkom",
+"cipeczką",
+"cipeczkę",
+"ciulajcie",
+"dojebalam",
+"dojebalas",
+"dojebalby",
+"dojebalem",
+"dojebales",
+"dojebała",
+"dojebało",
+"dojebały",
+"dojebiemy",
+"dojebiesz",
+"dopieprza",
+"dopieprze",
+"dopieprzy",
+"dopierdol",
+"dupodajce",
+"dupodajek",
+"dupodajka",
+"dupodajke",
+"dupodajki",
+"dupodajko",
+"dupolizem",
+"dupolizie",
+"dupolizom",
+"dziwkarza",
+"dziwkarze",
+"dziwkarzu",
+"dziwkarzy",
+"gownianej",
+"gownianym",
+"gownoburz",
+"gownozjad",
+"hoojniach",
+"hoojniami",
+"hoojowego",
+"hoojowemu",
+"hoojowych",
+"hoojowymi",
+"hooyniach",
+"hooyniami",
+"hooyowego",
+"hooyowemu",
+"hooyowych",
+"hooyowymi",
+"jebadlach",
+"jebadlami",
+"jebadłem",
+"jebadłom",
+"jebalabym",
+"jebalabys",
+"jebalismy",
+"jebalysmy",
+"jebancach",
+"jebancami",
+"jebaniach",
+"jebaniami",
+"jebankiem",
+"jebałaby",
+"jebałaś",
+"jebałbym",
+"jebałeś",
+"jebałoby",
+"jebałyby",
+"jebańcem",
+"jebańcom",
+"jebiacego",
+"jebiacemu",
+"jebiacych",
+"jebiacymi",
+"jebiącej",
+"jebiącym",
+"jebiącą",
+"jebliwego",
+"jebliwemu",
+"jebliwych",
+"jebliwymi",
+"jebnalbym",
+"jebnalbys",
+"jebnawszy",
+"jebnelaby",
+"jebneliby",
+"jebneloby",
+"jebnelyby",
+"jebniecia",
+"jebniecie",
+"jebnieciu",
+"jebnietej",
+"jebnietym",
+"jebnijcie",
+"jebnijmyz",
+"jebnijże",
+"jebnięci",
+"jebnięta",
+"jebnięte",
+"jebnięto",
+"jebnięty",
+"jebnięć",
+"jebnęła",
+"jebnęło",
+"jebnęły",
+"kurestwem",
+"kurestwie",
+"kurestwom",
+"kurewskie",
+"kurewskim",
+"kurewską",
+"kurewstwa",
+"kurewstwo",
+"kurewstwu",
+"kurwiarze",
+"kurwiarzu",
+"kurwiatka",
+"kurwiatko",
+"kurwicach",
+"kurwicami",
+"kurwiczka",
+"kurwiczki",
+"kurwiczko",
+"kurwienie",
+"kurwiszon",
+"kurwiący",
+"kurwiłam",
+"kurwiłem",
+"kurwowata",
+"kurwowaty",
+"kurwować",
+"kurwujcie",
+"kutafonie",
+"kutasiarz",
+"lizodupie",
+"lodziarę",
+"mineciara",
+"mineciaro",
+"mineciarz",
+"nadupczyc",
+"nadupczę",
+"nadupiony",
+"najebanie",
+"najebkach",
+"najebkami",
+"nakurwiac",
+"nakurwiaj",
+"nakurwial",
+"nakurwiam",
+"nakurwić",
+"nakurwię",
+"napicznik",
+"napieprza",
+"napierdol",
+"nasrajcie",
+"nasrajmyz",
+"nasrajże",
+"nasralaby",
+"nasralbym",
+"nasralbys",
+"nasraliby",
+"nasraloby",
+"nasralyby",
+"nasranego",
+"nasranemu",
+"nasraniem",
+"nasraniom",
+"nasranych",
+"nasranymi",
+"nasrawszy",
+"nasrałam",
+"nasrałby",
+"nasrałem",
+"nienasran",
+"nieobsran",
+"nieosrana",
+"nieosrane",
+"nieosrani",
+"nieosrany",
+"nieosrań",
+"nieposran",
+"niesrajac",
+"niesrania",
+"niesranie",
+"niesraniu",
+"nieusrana",
+"nieusrane",
+"nieusrani",
+"nieusrany",
+"nieusrań",
+"niewysran",
+"niezasran",
+"niezesran",
+"obesracie",
+"obesrajmy",
+"obesrajze",
+"obesrają",
+"obesralam",
+"obesralas",
+"obesralby",
+"obesralem",
+"obesrales",
+"obesranej",
+"obesrania",
+"obesranie",
+"obesraniu",
+"obesranym",
+"obesraną",
+"obesrała",
+"obesrało",
+"obesrały",
+"obeszczac",
+"obeszczaj",
+"obeszczal",
+"obeszczam",
+"obsrajcie",
+"obsrajmyz",
+"obsrajże",
+"obsralaby",
+"obsralbym",
+"obsralbys",
+"obsraliby",
+"obsraloby",
+"obsralyby",
+"obsranego",
+"obsranemu",
+"obsraniem",
+"obsraniom",
+"obsranych",
+"obsranymi",
+"obsrawszy",
+"obsrałam",
+"obsrałby",
+"obsrałem",
+"obsrywaja",
+"obsrywala",
+"obsrywali",
+"obsrywalo",
+"obsrywaly",
+"obsrywamy",
+"obsrywana",
+"obsrywane",
+"obsrywani",
+"obsrywano",
+"obsrywany",
+"obsrywasz",
+"obsrywać",
+"obsrywał",
+"obsrywań",
+"obszczaja",
+"obszczala",
+"obszczali",
+"obszczalo",
+"obszczaly",
+"obszczamy",
+"obszczana",
+"obszczane",
+"obszczani",
+"obszczany",
+"obszczasz",
+"obszczać",
+"obszczał",
+"obszczcie",
+"ochujalam",
+"ochujalas",
+"ochujalem",
+"ochujales",
+"ochujała",
+"ochujało",
+"ochujały",
+"ochujeją",
+"ochujeję",
+"ocipialam",
+"ocipialem",
+"ocipiales",
+"ocipiała",
+"ocipiało",
+"ocipiały",
+"ocipiejmy",
+"ocipieją",
+"ocipieję",
+"ociulales",
+"ociulało",
+"oczojebna",
+"oczojebne",
+"oczojebni",
+"oczojebny",
+"odjebalam",
+"odjebalas",
+"odjebalem",
+"odjebales",
+"odjebanej",
+"odjebanie",
+"odjebanym",
+"odjebaną",
+"odjebała",
+"odjebało",
+"odjebały",
+"odjebiemy",
+"odjebiesz",
+"odjebują",
+"odjebuję",
+"odjebywac",
+"odjebywal",
+"odpieprze",
+"odpieprzy",
+"odpierdol",
+"odupczcie",
+"odupczony",
+"odupczyć",
+"ojcojebca",
+"ojcojebce",
+"ojcojebco",
+"ojcojebcy",
+"ojebałam",
+"ojebałem",
+"ojebiecie",
+"opieprzac",
+"opieprzaj",
+"opieprzal",
+"opieprzam",
+"opieprzmy",
+"opieprzyc",
+"opieprzyl",
+"opieprzą",
+"opieprzę",
+"opierdala",
+"opierdola",
+"opierdole",
+"opierdoli",
+"osrajciez",
+"osrajmyż",
+"osralabym",
+"osralabys",
+"osralismy",
+"osralysmy",
+"osraniach",
+"osraniami",
+"osrałaby",
+"osrałaś",
+"osrałbym",
+"osrałeś",
+"osrałoby",
+"osrałyby",
+"osrywacie",
+"osrywajac",
+"osrywajmy",
+"osrywajze",
+"osrywają",
+"osrywalam",
+"osrywalas",
+"osrywalby",
+"osrywalem",
+"osrywales",
+"osrywanej",
+"osrywania",
+"osrywanie",
+"osrywaniu",
+"osrywanym",
+"osrywaną",
+"osrywała",
+"osrywało",
+"osrywały",
+"oszczacie",
+"oszczajmy",
+"oszczajze",
+"oszczają",
+"oszczalam",
+"oszczalas",
+"oszczalby",
+"oszczalem",
+"oszczales",
+"oszczanej",
+"oszczania",
+"oszczanie",
+"oszczaniu",
+"oszczanym",
+"oszczaną",
+"oszczała",
+"oszczało",
+"oszczały",
+"owcojebca",
+"owcojebco",
+"owcojebcy",
+"pieprzcie",
+"pieprzeni",
+"pieprzeń",
+"pieprznac",
+"pieprznal",
+"pieprznie",
+"pieprznij",
+"pieprzną",
+"pieprznę",
+"pieprzona",
+"pieprzone",
+"pieprzony",
+"pieprzyla",
+"pieprzyli",
+"pieprzylo",
+"pieprzyly",
+"pieprzymy",
+"pieprzysz",
+"pieprzyć",
+"pieprzył",
+"pierdolca",
+"pierdolce",
+"pierdolcu",
+"pierdolec",
+"pierdolic",
+"pierdolil",
+"pierdolmy",
+"pierdolny",
+"pierdolom",
+"pierdolon",
+"pierdolą",
+"pierdolę",
+"pizdowaci",
+"pizdowata",
+"pizdowate",
+"pizdowaty",
+"pizdzioch",
+"piździć",
+"podesraja",
+"podesrala",
+"podesrali",
+"podesralo",
+"podesraly",
+"podesramy",
+"podesrana",
+"podesrane",
+"podesrani",
+"podesrano",
+"podesrany",
+"podesrasz",
+"podesrać",
+"podesrał",
+"podesrań",
+"podjebala",
+"podjebali",
+"podjebalo",
+"podjebaly",
+"podjebano",
+"podjebany",
+"podjebać",
+"podjebał",
+"podjebcie",
+"podjebią",
+"podjebię",
+"podkurwia",
+"podkurwic",
+"podkurwie",
+"pojebanca",
+"pojebance",
+"pojebancu",
+"pojebancy",
+"pojebanej",
+"pojebanie",
+"pojebanym",
+"pojebaną",
+"pojebowie",
+"pokurwilo",
+"pokurwion",
+"popieprza",
+"popieprze",
+"popieprzy",
+"popierdol",
+"posrajcie",
+"posrajmyz",
+"posrajże",
+"posralaby",
+"posralbym",
+"posralbys",
+"posraliby",
+"posraloby",
+"posralyby",
+"posranego",
+"posranemu",
+"posraniem",
+"posraniom",
+"posranych",
+"posranymi",
+"posrawszy",
+"posrałam",
+"posrałby",
+"posrałem",
+"przechooj",
+"przechooy",
+"przechuja",
+"przechuje",
+"przechuju",
+"przehooje",
+"przehooye",
+"przejebac",
+"przejeban",
+"przejebie",
+"przesraja",
+"przesrala",
+"przesrali",
+"przesralo",
+"przesraly",
+"przesramy",
+"przesrana",
+"przesrane",
+"przesrani",
+"przesrano",
+"przesrany",
+"przesrasz",
+"przesrać",
+"przesrał",
+"przesrań",
+"przesrywa",
+"przyjebac",
+"przyjebal",
+"przyjeban",
+"przyjebia",
+"przyjebie",
+"przyjebmy",
+"przyjebze",
+"przykurwi",
+"przysraja",
+"przysrala",
+"przysrali",
+"przysralo",
+"przysraly",
+"przysramy",
+"przysrano",
+"przysrasz",
+"przysrać",
+"przysrał",
+"przysrań",
+"przysrywa",
+"rozdupić",
+"rozjebala",
+"rozjebali",
+"rozjebalo",
+"rozjebaly",
+"rozjebana",
+"rozjebane",
+"rozjebani",
+"rozjebano",
+"rozjebany",
+"rozjebać",
+"rozjebał",
+"rozjebcie",
+"rozjebią",
+"rozjebię",
+"rozjebuja",
+"rozjebuje",
+"rozkurwia",
+"rozkurwic",
+"rozkurwie",
+"rozpizdza",
+"rozpizdze",
+"rozpizdzi",
+"skurwesyn",
+"skurwiela",
+"skurwiele",
+"skurwieli",
+"skurwielu",
+"skurwiony",
+"skurwysyn",
+"spieprzac",
+"spieprzaj",
+"spieprzam",
+"spieprzon",
+"spieprzyc",
+"spieprzę",
+"spierdala",
+"spierdola",
+"spierdole",
+"spierdoli",
+"sraczkach",
+"sraczkami",
+"sraczowej",
+"sraczowym",
+"sraczową",
+"sraczykom",
+"sraczykow",
+"srajacego",
+"srajacemu",
+"srajacych",
+"srajacymi",
+"srajcież",
+"srajdkach",
+"srajdkami",
+"srajdkiem",
+"srajdkowi",
+"srajdków",
+"srającej",
+"srającym",
+"srającą",
+"sraliscie",
+"sraliśmy",
+"sraluchem",
+"sraluchom",
+"sraluchow",
+"sralyscie",
+"sranskach",
+"sranskami",
+"sranskiem",
+"srałabym",
+"srałbyś",
+"srańskom",
+"suczysyna",
+"suczysyni",
+"suczysynu",
+"suczysyny",
+"sukinkoci",
+"sukinkota",
+"sukinkotu",
+"sukinkoty",
+"sukinsyna",
+"sukinsyni",
+"sukinsynu",
+"sukinsyny",
+"szczajcie",
+"szczałam",
+"szczałem",
+"szczochem",
+"szczochom",
+"szczochow",
+"szczynach",
+"szczynami",
+"szmacicie",
+"szmacilam",
+"szmacilas",
+"szmacilem",
+"szmaciles",
+"szmacilom",
+"szmacilos",
+"szmaciła",
+"szmaciło",
+"szmaciły",
+"szmaćcie",
+"ujebanego",
+"ujebanemu",
+"ujebanych",
+"ujebanymi",
+"ujebałam",
+"ujebałem",
+"ujebiecie",
+"usrajciez",
+"usrajmyż",
+"usralabym",
+"usralabys",
+"usralismy",
+"usralysmy",
+"usraniach",
+"usraniami",
+"usrałaby",
+"usrałaś",
+"usrałbym",
+"usrałeś",
+"usrałoby",
+"usrałyby",
+"wjebalaby",
+"wjebalbym",
+"wjebalbys",
+"wjebaliby",
+"wjebaloby",
+"wjebalyby",
+"wjebawszy",
+"wjebałam",
+"wjebałby",
+"wjebałem",
+"wjebiecie",
+"wkurwiaja",
+"wkurwiala",
+"wkurwiali",
+"wkurwialo",
+"wkurwialy",
+"wkurwiamy",
+"wkurwiano",
+"wkurwiasz",
+"wkurwiać",
+"wkurwiał",
+"wkurwiań",
+"wkurwicie",
+"wkurwieni",
+"wkurwilam",
+"wkurwilas",
+"wkurwilby",
+"wkurwilem",
+"wkurwiles",
+"wkurwiona",
+"wkurwione",
+"wkurwiono",
+"wkurwiony",
+"wkurwiła",
+"wkurwiło",
+"wkurwiły",
+"wpieprzac",
+"wpieprzaj",
+"wpieprzam",
+"wpieprzyc",
+"wpieprzę",
+"wpierdala",
+"wpierdola",
+"wpierdole",
+"wpierdoli",
+"wpierdolu",
+"wyjebalam",
+"wyjebalas",
+"wyjebalby",
+"wyjebalem",
+"wyjebales",
+"wyjebanej",
+"wyjebanie",
+"wyjebanym",
+"wyjebaną",
+"wyjebała",
+"wyjebało",
+"wyjebały",
+"wyjebiemy",
+"wyjebiesz",
+"wykurwcie",
+"wykurwiac",
+"wykurwiaj",
+"wykurwial",
+"wykurwiam",
+"wykurwian",
+"wykurwila",
+"wykurwili",
+"wykurwilo",
+"wykurwily",
+"wykurwimy",
+"wykurwion",
+"wykurwist",
+"wykurwisz",
+"wykurwią",
+"wykurwić",
+"wykurwię",
+"wykurwił",
+"wypieprza",
+"wypieprze",
+"wypieprzy",
+"wypierdal",
+"wypierdek",
+"wypierdka",
+"wypierdki",
+"wypierdku",
+"wypierdol",
+"wypizdzac",
+"wypizdzaj",
+"wypizdzal",
+"wypizdzam",
+"wysrajcie",
+"wysrajmyz",
+"wysrajże",
+"wysralaby",
+"wysralbym",
+"wysralbys",
+"wysraliby",
+"wysraloby",
+"wysralyby",
+"wysranego",
+"wysranemu",
+"wysraniem",
+"wysraniom",
+"wysranych",
+"wysranymi",
+"wysrawszy",
+"wysrałam",
+"wysrałby",
+"wysrałem",
+"wysrywach",
+"wysrywaja",
+"wysrywala",
+"wysrywali",
+"wysrywalo",
+"wysrywaly",
+"wysrywami",
+"wysrywamy",
+"wysrywasz",
+"wysrywać",
+"wysrywał",
+"wysrywowi",
+"wysrywów",
+"wyszczaja",
+"wyszczala",
+"wyszczali",
+"wyszczalo",
+"wyszczaly",
+"wyszczamy",
+"wyszczana",
+"wyszczane",
+"wyszczani",
+"wyszczany",
+"wyszczasz",
+"wyszczać",
+"wyszczał",
+"wyszczcie",
+"zajebalam",
+"zajebalas",
+"zajebalby",
+"zajebalem",
+"zajebales",
+"zajebanej",
+"zajebania",
+"zajebanie",
+"zajebaniu",
+"zajebanym",
+"zajebaną",
+"zajebała",
+"zajebało",
+"zajebały",
+"zajebciez",
+"zajebiemy",
+"zajebiesz",
+"zajebisci",
+"zajebista",
+"zajebiste",
+"zajebisty",
+"zajebmyż",
+"zakurwcie",
+"zakurwiac",
+"zakurwiaj",
+"zakurwial",
+"zakurwiam",
+"zakurwila",
+"zakurwili",
+"zakurwilo",
+"zakurwily",
+"zakurwimy",
+"zakurwion",
+"zakurwisz",
+"zakurwią",
+"zakurwić",
+"zakurwię",
+"zakurwił",
+"zapieprza",
+"zapieprze",
+"zapieprzy",
+"zapierdol",
+"zasrajcie",
+"zasrajmyz",
+"zasrajże",
+"zasralaby",
+"zasralbym",
+"zasralbys",
+"zasraliby",
+"zasraloby",
+"zasralyby",
+"zasrancem",
+"zasrancom",
+"zasrancow",
+"zasrancze",
+"zasranego",
+"zasranemu",
+"zasraniec",
+"zasraniem",
+"zasraniom",
+"zasranych",
+"zasranymi",
+"zasrawszy",
+"zasrałam",
+"zasrałby",
+"zasrałem",
+"zasrańca",
+"zasrańce",
+"zasrańcu",
+"zasrańcy",
+"zasrebrza",
+"zasrebrze",
+"zasrebrzy",
+"zasrywaja",
+"zasrywala",
+"zasrywali",
+"zasrywalo",
+"zasrywaly",
+"zasrywamy",
+"zasrywana",
+"zasrywane",
+"zasrywani",
+"zasrywano",
+"zasrywany",
+"zasrywasz",
+"zasrywać",
+"zasrywał",
+"zasrywań",
+"zaszczaja",
+"zaszczala",
+"zaszczali",
+"zaszczalo",
+"zaszczaly",
+"zaszczamy",
+"zaszczana",
+"zaszczane",
+"zaszczani",
+"zaszczany",
+"zaszczasz",
+"zaszczać",
+"zaszczał",
+"zaszczcie",
+"zesrajcie",
+"zesrajmyz",
+"zesrajże",
+"zesralaby",
+"zesralbym",
+"zesralbys",
+"zesraliby",
+"zesraloby",
+"zesralyby",
+"zesraniem",
+"zesraniom",
+"zesrawszy",
+"zesrałam",
+"zesrałby",
+"zesrałem",
+"zesrywaja",
+"zesrywala",
+"zesrywali",
+"zesrywalo",
+"zesrywaly",
+"zesrywamy",
+"zesrywano",
+"zesrywasz",
+"zesrywać",
+"zesrywał",
+"zesrywań",
+"zeszmacac",
+"zeszmacaj",
+"zeszmacal",
+"zeszmacam",
+"zeszmacic",
+"zeszmacil",
+"zeszmacmy",
+"zeszmacą",
+"zeszmacę",
+"zjebaniec",
+"zjebałam",
+"zjebałem",
+"zjebiecie",
+"choojach",
+"choojami",
+"choojnia",
+"choojnie",
+"choojnio",
+"choojowa",
+"choojowe",
+"choojowi",
+"choojowy",
+"choojów",
+"chooyach",
+"chooyami",
+"chooynia",
+"chooynie",
+"chooynio",
+"chooyowa",
+"chooyowe",
+"chooyowi",
+"chooyowy",
+"chooyów",
+"chujniom",
+"chujnią",
+"chujnię",
+"chujowej",
+"chujowym",
+"chujową",
+"cipeczce",
+"cipeczek",
+"cipeczka",
+"cipeczke",
+"cipeczki",
+"cipeczko",
+"cipuchna",
+"cipuchno",
+"cipuchny",
+"dojebala",
+"dojebali",
+"dojebalo",
+"dojebaly",
+"dojebano",
+"dojebać",
+"dojebał",
+"dojebcie",
+"dojebią",
+"dojebię",
+"doopkach",
+"doopkami",
+"dopieprz",
+"dupskiem",
+"dziwkach",
+"dziwkami",
+"dziwkarz",
+"goownach",
+"goownami",
+"gowniana",
+"gowniane",
+"gowniani",
+"gowniany",
+"gównach",
+"gównami",
+"hoojniom",
+"hoojnią",
+"hoojnię",
+"hoojowej",
+"hoojowyh",
+"hoojowym",
+"hoojową",
+"hooyniom",
+"hooynią",
+"hooynię",
+"hooyowej",
+"hooyowey",
+"hooyowyh",
+"hooyowym",
+"hooyową",
+"hujniami",
+"hujowego",
+"hujowemu",
+"hujowosc",
+"hujowych",
+"hujowymi",
+"huyniami",
+"huyowego",
+"huyowemu",
+"huyowych",
+"huyowymi",
+"jebadeł",
+"jebadlem",
+"jebadlom",
+"jebadła",
+"jebadło",
+"jebadłu",
+"jebakach",
+"jebakami",
+"jebakiem",
+"jebakowi",
+"jebaków",
+"jebalaby",
+"jebalbym",
+"jebalbys",
+"jebaliby",
+"jebaloby",
+"jebalyby",
+"jebancem",
+"jebancom",
+"jebancow",
+"jebanego",
+"jebanemu",
+"jebaniec",
+"jebaniem",
+"jebaniom",
+"jebanych",
+"jebanymi",
+"jebałam",
+"jebałby",
+"jebałem",
+"jebańca",
+"jebańcu",
+"jebańcy",
+"jebcież",
+"jebiacej",
+"jebiacym",
+"jebiecie",
+"jebiąca",
+"jebiące",
+"jebiący",
+"jebliwej",
+"jebliwym",
+"jebliwą",
+"jebnalby",
+"jebnalem",
+"jebnales",
+"jebnelam",
+"jebnelas",
+"jebnieci",
+"jebniemy",
+"jebniesz",
+"jebnieta",
+"jebniete",
+"jebnieto",
+"jebniety",
+"jebnijmy",
+"jebnijze",
+"jebnąć",
+"jebnął",
+"jebnęli",
+"kurestwa",
+"kurestwo",
+"kurestwu",
+"kurewscy",
+"kurewska",
+"kurewski",
+"kurewsko",
+"kurewstw",
+"kurwiarz",
+"kurwicha",
+"kurwicho",
+"kurwichy",
+"kurwicom",
+"kurwicą",
+"kurwicę",
+"kurwilam",
+"kurwilas",
+"kurwilem",
+"kurwiles",
+"kurwiska",
+"kurwisko",
+"kurwiła",
+"kurwiło",
+"kurwiły",
+"kurwowac",
+"kurwuję",
+"kutafony",
+"kutasach",
+"kutasami",
+"kutasowi",
+"kutasów",
+"lizodupy",
+"lodziara",
+"lodziare",
+"lodziaro",
+"lodziary",
+"nadupcze",
+"nadupczy",
+"nadupić",
+"nadupię",
+"najebany",
+"najebać",
+"najebcie",
+"najebię",
+"najebkom",
+"najebką",
+"najebkę",
+"nakurwia",
+"nakurwic",
+"nakurwie",
+"napletek",
+"narypać",
+"narypcie",
+"narypię",
+"nasracie",
+"nasrajmy",
+"nasrajze",
+"nasrają",
+"nasralam",
+"nasralas",
+"nasralby",
+"nasralem",
+"nasrales",
+"nasranej",
+"nasrania",
+"nasranie",
+"nasraniu",
+"nasranym",
+"nasraną",
+"nasrała",
+"nasrało",
+"nasrały",
+"nieosran",
+"niesrań",
+"nieusran",
+"obesraja",
+"obesrala",
+"obesrali",
+"obesralo",
+"obesraly",
+"obesramy",
+"obesrana",
+"obesrane",
+"obesrani",
+"obesrano",
+"obesrany",
+"obesrasz",
+"obesrać",
+"obesrał",
+"obesrań",
+"obeszcza",
+"obsracie",
+"obsrajmy",
+"obsrajze",
+"obsrają",
+"obsralam",
+"obsralas",
+"obsralby",
+"obsralem",
+"obsrales",
+"obsranej",
+"obsrania",
+"obsranie",
+"obsraniu",
+"obsranym",
+"obsraną",
+"obsrała",
+"obsrało",
+"obsrały",
+"obsrywac",
+"obsrywaj",
+"obsrywal",
+"obsrywam",
+"obsrywan",
+"obszczac",
+"obszczaj",
+"obszczal",
+"obszczam",
+"ochujala",
+"ochujali",
+"ochujalo",
+"ochujaly",
+"ochujać",
+"ochujał",
+"ochujeja",
+"ochujeje",
+"ochujeli",
+"ochujeć",
+"ocipiala",
+"ocipialo",
+"ocipialy",
+"ocipiał",
+"ocipieja",
+"ocipieje",
+"ocipieli",
+"ocipieć",
+"ociulalo",
+"ociulał",
+"odjebala",
+"odjebali",
+"odjebalo",
+"odjebaly",
+"odjebana",
+"odjebane",
+"odjebani",
+"odjebany",
+"odjebać",
+"odjebał",
+"odjebcie",
+"odjebią",
+"odjebię",
+"odjebuja",
+"odjebuje",
+"odpieprz",
+"odupczyc",
+"odupczę",
+"ojebalam",
+"ojebalas",
+"ojebalem",
+"ojebales",
+"ojebała",
+"ojebało",
+"ojebały",
+"ojebiemy",
+"ojebiesz",
+"opieprza",
+"opieprze",
+"opieprzy",
+"opierdol",
+"osrajcie",
+"osrajmyz",
+"osrajże",
+"osralaby",
+"osralbym",
+"osralbys",
+"osraliby",
+"osraloby",
+"osralyby",
+"osranego",
+"osranemu",
+"osraniem",
+"osraniom",
+"osranych",
+"osranymi",
+"osrawszy",
+"osrałam",
+"osrałby",
+"osrałem",
+"osrywaja",
+"osrywala",
+"osrywali",
+"osrywalo",
+"osrywaly",
+"osrywamy",
+"osrywana",
+"osrywane",
+"osrywani",
+"osrywano",
+"osrywany",
+"osrywasz",
+"osrywać",
+"osrywał",
+"osrywań",
+"oszczaja",
+"oszczala",
+"oszczali",
+"oszczalo",
+"oszczaly",
+"oszczamy",
+"oszczana",
+"oszczane",
+"oszczani",
+"oszczano",
+"oszczany",
+"oszczasz",
+"oszczać",
+"oszczał",
+"oszczań",
+"oszczcie",
+"piczkach",
+"piczkami",
+"pieprzen",
+"pieprzmy",
+"pieprzna",
+"pieprzne",
+"pieprzyc",
+"pieprzyl",
+"pieprzą",
+"pieprzę",
+"pierdole",
+"pierdoli",
+"pierdoln",
+"pierdolo",
+"pierdoly",
+"piździe",
+"podesrac",
+"podesraj",
+"podesral",
+"podesram",
+"podesran",
+"podjebac",
+"podjebal",
+"podjeban",
+"podjebia",
+"podjebie",
+"podjebmy",
+"podkurwi",
+"poebało",
+"pojebach",
+"pojebalo",
+"pojebami",
+"pojebana",
+"pojebane",
+"pojebani",
+"pojebany",
+"pojebać",
+"pojebcie",
+"pojebię",
+"pojebowi",
+"pojebów",
+"popieprz",
+"posracie",
+"posrajmy",
+"posrajze",
+"posrają",
+"posralam",
+"posralas",
+"posralby",
+"posralem",
+"posrales",
+"posranej",
+"posrania",
+"posranie",
+"posraniu",
+"posranym",
+"posraną",
+"posrała",
+"posrało",
+"posrały",
+"przechuj",
+"przehooj",
+"przehooy",
+"przehuje",
+"przehuye",
+"przesrac",
+"przesraj",
+"przesral",
+"przesram",
+"przesran",
+"przykurw",
+"przysrac",
+"przysraj",
+"przysral",
+"przysram",
+"przysran",
+"rozjebac",
+"rozjebal",
+"rozjeban",
+"rozjebia",
+"rozjebie",
+"rozjebmy",
+"rozjebuj",
+"rozkurwi",
+"rozpizdz",
+"skurwcie",
+"skurwiel",
+"skurwion",
+"skurwić",
+"skurwię",
+"spieprza",
+"spieprze",
+"spieprzy",
+"spierdol",
+"sraczach",
+"sraczami",
+"sraczkom",
+"sraczką",
+"sraczkę",
+"sraczowa",
+"sraczowe",
+"sraczowi",
+"sraczowy",
+"sraczyka",
+"sraczyki",
+"sraczyku",
+"srajacej",
+"srajacym",
+"srajciez",
+"srajdach",
+"srajdami",
+"srajdkom",
+"srajdkow",
+"srajdzie",
+"srajmyż",
+"srająca",
+"srające",
+"srający",
+"sralabym",
+"sralabys",
+"sralismy",
+"sralucha",
+"sraluchu",
+"sraluchy",
+"sralysmy",
+"sraniach",
+"sraniami",
+"sranskom",
+"srałaby",
+"srałaś",
+"srałbym",
+"srałeś",
+"srałoby",
+"srałyby",
+"srańska",
+"srańsko",
+"srańsku",
+"suczysyn",
+"sukinkot",
+"sukinsyn",
+"szczacie",
+"szczajmy",
+"szczają",
+"szczalam",
+"szczalas",
+"szczalem",
+"szczales",
+"szczała",
+"szczało",
+"szczały",
+"szczocha",
+"szczochu",
+"szczochy",
+"szczynom",
+"szmaccie",
+"szmacila",
+"szmacili",
+"szmacilo",
+"szmacily",
+"szmacimy",
+"szmacisz",
+"szmacić",
+"szmacił",
+"szmaćmy",
+"ujebalam",
+"ujebalas",
+"ujebalem",
+"ujebales",
+"ujebanej",
+"ujebanym",
+"ujebaną",
+"ujebała",
+"ujebało",
+"ujebały",
+"ujebiemy",
+"ujebiesz",
+"usrajcie",
+"usrajmyz",
+"usrajże",
+"usralaby",
+"usralbym",
+"usralbys",
+"usraliby",
+"usraloby",
+"usralyby",
+"usranego",
+"usranemu",
+"usraniem",
+"usraniom",
+"usranych",
+"usranymi",
+"usrawszy",
+"usrałam",
+"usrałby",
+"usrałem",
+"wjebalam",
+"wjebalas",
+"wjebalby",
+"wjebalem",
+"wjebales",
+"wjebanie",
+"wjebała",
+"wjebało",
+"wjebały",
+"wjebiemy",
+"wjebiesz",
+"wkurwach",
+"wkurwami",
+"wkurwcie",
+"wkurwiac",
+"wkurwiaj",
+"wkurwial",
+"wkurwiam",
+"wkurwian",
+"wkurwila",
+"wkurwili",
+"wkurwilo",
+"wkurwily",
+"wkurwimy",
+"wkurwion",
+"wkurwisz",
+"wkurwią",
+"wkurwić",
+"wkurwię",
+"wkurwił",
+"wkurwowi",
+"wkurwów",
+"wpieprza",
+"wpieprze",
+"wpieprzy",
+"wpierdol",
+"wqurwach",
+"wqurwami",
+"wqurwowi",
+"wqurwów",
+"wyjebala",
+"wyjebali",
+"wyjebalo",
+"wyjebaly",
+"wyjebana",
+"wyjebane",
+"wyjebani",
+"wyjebano",
+"wyjebany",
+"wyjebać",
+"wyjebał",
+"wyjebcie",
+"wyjebią",
+"wyjebię",
+"wykurwia",
+"wykurwic",
+"wykurwie",
+"wykurwil",
+"wykurwmy",
+"wypieprz",
+"wypizdza",
+"wysracie",
+"wysrajmy",
+"wysrajze",
+"wysrają",
+"wysralam",
+"wysralas",
+"wysralby",
+"wysralem",
+"wysrales",
+"wysranej",
+"wysrania",
+"wysranie",
+"wysraniu",
+"wysranym",
+"wysraną",
+"wysrała",
+"wysrało",
+"wysrały",
+"wysrywac",
+"wysrywaj",
+"wysrywal",
+"wysrywam",
+"wysrywem",
+"wysrywie",
+"wysrywom",
+"wysrywow",
+"wyszczac",
+"wyszczaj",
+"wyszczal",
+"wyszczam",
+"zajebala",
+"zajebali",
+"zajebalo",
+"zajebaly",
+"zajebana",
+"zajebane",
+"zajebani",
+"zajebano",
+"zajebany",
+"zajebać",
+"zajebał",
+"zajebań",
+"zajebcie",
+"zajebist",
+"zajebią",
+"zajebię",
+"zajebmyz",
+"zajebże",
+"zakurwia",
+"zakurwic",
+"zakurwie",
+"zakurwil",
+"zapieprz",
+"zasracie",
+"zasrajmy",
+"zasrajze",
+"zasrają",
+"zasralam",
+"zasralas",
+"zasralby",
+"zasralem",
+"zasrales",
+"zasranca",
+"zasrance",
+"zasrancu",
+"zasrancy",
+"zasranej",
+"zasrania",
+"zasranie",
+"zasraniu",
+"zasranym",
+"zasraną",
+"zasrała",
+"zasrało",
+"zasrały",
+"zasrebrz",
+"zasrywac",
+"zasrywaj",
+"zasrywal",
+"zasrywam",
+"zasrywan",
+"zaszczac",
+"zaszczaj",
+"zaszczal",
+"zaszczam",
+"zesracie",
+"zesrajmy",
+"zesrajze",
+"zesrają",
+"zesralam",
+"zesralas",
+"zesralby",
+"zesralem",
+"zesrales",
+"zesrania",
+"zesranie",
+"zesraniu",
+"zesrała",
+"zesrało",
+"zesrały",
+"zesrywac",
+"zesrywaj",
+"zesrywal",
+"zesrywam",
+"zesrywan",
+"zeszmaca",
+"zeszmace",
+"zeszmaci",
+"zeszmać",
+"zjebalam",
+"zjebalas",
+"zjebalem",
+"zjebales",
+"zjebanie",
+"zjebała",
+"zjebało",
+"zjebały",
+"zjebcoki",
+"zjebcoku",
+"zjebiemy",
+"zjebiesz",
+"zjebkach",
+"zjebkami",
+"zjebowie",
+"choojem",
+"choojni",
+"choojom",
+"choojoo",
+"chooyem",
+"chooyni",
+"chooyom",
+"chooyoo",
+"chujach",
+"chujami",
+"chujnia",
+"chujnie",
+"chujnio",
+"chujowa",
+"chujowe",
+"chujowi",
+"chujowo",
+"chujowy",
+"chujoza",
+"chujów",
+"cipenda",
+"cipendo",
+"cipendy",
+"cipkach",
+"cipkami",
+"ciulami",
+"ciulany",
+"ciulać",
+"dojebac",
+"dojebal",
+"dojebia",
+"dojebie",
+"dojebmy",
+"doopach",
+"doopami",
+"doopkom",
+"doopką",
+"doopkę",
+"dupoliz",
+"dziwkom",
+"dziwką",
+"dziwkę",
+"fiutach",
+"fiutami",
+"fiutowi",
+"fiutów",
+"goowien",
+"goownem",
+"goownie",
+"goownom",
+"gownach",
+"gownami",
+"gowniak",
+"gunwach",
+"gunwami",
+"guwnach",
+"guwnami",
+"gówien",
+"gównem",
+"gównie",
+"gównom",
+"hoojach",
+"hoojami",
+"hoojnia",
+"hoojnie",
+"hoojnio",
+"hoojowa",
+"hoojowe",
+"hoojowi",
+"hoojowy",
+"hoojów",
+"hooyach",
+"hooyami",
+"hooynia",
+"hooynie",
+"hooynio",
+"hooyowa",
+"hooyowe",
+"hooyowi",
+"hooyowy",
+"hooyów",
+"hujniah",
+"hujniom",
+"hujnią",
+"hujnię",
+"hujowej",
+"hujowyh",
+"hujowym",
+"hujową",
+"huyniah",
+"huyniom",
+"huynią",
+"huynię",
+"huyowey",
+"huyowyh",
+"huyowym",
+"huyową",
+"jebadel",
+"jebadla",
+"jebadle",
+"jebadlo",
+"jebadlu",
+"jebakom",
+"jebakow",
+"jebaką",
+"jebakę",
+"jebalam",
+"jebalas",
+"jebalby",
+"jebalem",
+"jebales",
+"jebanca",
+"jebancu",
+"jebancy",
+"jebanej",
+"jebania",
+"jebanie",
+"jebaniu",
+"jebanka",
+"jebanko",
+"jebanym",
+"jebaną",
+"jebała",
+"jebało",
+"jebały",
+"jebciez",
+"jebiaca",
+"jebiace",
+"jebiacy",
+"jebiemy",
+"jebiesz",
+"jebiąc",
+"jebliwa",
+"jebliwe",
+"jebliwi",
+"jebliwy",
+"jebmyż",
+"jebnać",
+"jebnela",
+"jebneli",
+"jebnelo",
+"jebnely",
+"jebniec",
+"jebnąc",
+"kurewka",
+"kurewki",
+"kurewko",
+"kurwach",
+"kurwami",
+"kurwcie",
+"kurwica",
+"kurwice",
+"kurwico",
+"kurwicy",
+"kurwiki",
+"kurwila",
+"kurwili",
+"kurwilo",
+"kurwily",
+"kurwią",
+"kurwić",
+"kurwię",
+"kurwił",
+"kurwuje",
+"kutafon",
+"kutasem",
+"kutasie",
+"kutasom",
+"kutasow",
+"lizodup",
+"nadupcz",
+"nadupic",
+"nadupie",
+"najebac",
+"najebce",
+"najebek",
+"najebie",
+"najebka",
+"najebke",
+"najebki",
+"najebko",
+"nakurwi",
+"narypac",
+"narypie",
+"nasraja",
+"nasrala",
+"nasrali",
+"nasralo",
+"nasraly",
+"nasramy",
+"nasrana",
+"nasrane",
+"nasrani",
+"nasrano",
+"nasrany",
+"nasrasz",
+"nasrać",
+"nasrał",
+"nasrań",
+"niesran",
+"obesrac",
+"obesraj",
+"obesral",
+"obesram",
+"obesran",
+"obsraja",
+"obsrala",
+"obsrali",
+"obsralo",
+"obsraly",
+"obsramy",
+"obsrana",
+"obsrane",
+"obsrani",
+"obsrano",
+"obsrany",
+"obsrasz",
+"obsrać",
+"obsrał",
+"obsrań",
+"obsrywa",
+"obszcza",
+"ochujac",
+"ochujal",
+"ochujam",
+"ochujec",
+"ochujej",
+"ocipial",
+"ociulal",
+"odjebac",
+"odjebal",
+"odjebia",
+"odjebie",
+"odjebmy",
+"odupcze",
+"odupczy",
+"ojebala",
+"ojebali",
+"ojebalo",
+"ojebaly",
+"ojebać",
+"ojebał",
+"ojebcie",
+"ojebią",
+"ojebię",
+"onanizm",
+"opieprz",
+"osracie",
+"osrajmy",
+"osrajze",
+"osrają",
+"osralam",
+"osralas",
+"osralby",
+"osralem",
+"osrales",
+"osranej",
+"osrania",
+"osranie",
+"osraniu",
+"osranym",
+"osraną",
+"osrała",
+"osrało",
+"osrały",
+"osrywac",
+"osrywaj",
+"osrywal",
+"osrywam",
+"osrywan",
+"oszczac",
+"oszczaj",
+"oszczal",
+"oszczam",
+"oszczan",
+"piczach",
+"piczami",
+"piczkom",
+"piczką",
+"piczkę",
+"pieprza",
+"pieprze",
+"pieprzy",
+"pizdach",
+"pizdami",
+"pizdnac",
+"pizdzic",
+"pizdzie",
+"piździ",
+"podesra",
+"podkurw",
+"poebalo",
+"poebane",
+"pojebac",
+"pojeban",
+"pojebem",
+"pojebie",
+"pojebom",
+"pojebow",
+"posraja",
+"posrala",
+"posrali",
+"posralo",
+"posraly",
+"posramy",
+"posrana",
+"posrane",
+"posrani",
+"posrano",
+"posrany",
+"posrasz",
+"posrać",
+"posrał",
+"posrań",
+"przehuj",
+"przehuy",
+"przejeb",
+"przesra",
+"przyjeb",
+"przysra",
+"rozdupi",
+"rozkurw",
+"skurwic",
+"skurwie",
+"spieprz",
+"sraczce",
+"sraczek",
+"sraczem",
+"sraczka",
+"sraczke",
+"sraczki",
+"sraczko",
+"sraczom",
+"sraczyk",
+"srajaca",
+"srajace",
+"srajacy",
+"srajcie",
+"srajdek",
+"srajdka",
+"srajdki",
+"srajdku",
+"srajdom",
+"srajdą",
+"srajdę",
+"srajmyz",
+"srając",
+"srajże",
+"srakach",
+"srakami",
+"sralaby",
+"sralbym",
+"sralbys",
+"sraliby",
+"sraloby",
+"sraluch",
+"sralyby",
+"sraniem",
+"sraniom",
+"sranska",
+"sransko",
+"sransku",
+"srałam",
+"srałby",
+"srałem",
+"srańsk",
+"szczaja",
+"szczala",
+"szczali",
+"szczalo",
+"szczaly",
+"szczamy",
+"szczasz",
+"szczać",
+"szczał",
+"szczoch",
+"szczyny",
+"szmacic",
+"szmacie",
+"szmacil",
+"szmacmy",
+"szmacą",
+"szmacę",
+"szparko",
+"udupcie",
+"udupić",
+"udupię",
+"ujebala",
+"ujebali",
+"ujebalo",
+"ujebaly",
+"ujebana",
+"ujebane",
+"ujebani",
+"ujebany",
+"ujebać",
+"ujebał",
+"ujebcie",
+"ujebią",
+"ujebię",
+"usracie",
+"usrajmy",
+"usrajze",
+"usrają",
+"usralam",
+"usralas",
+"usralby",
+"usralem",
+"usrales",
+"usranej",
+"usrania",
+"usranie",
+"usraniu",
+"usranym",
+"usraną",
+"usrała",
+"usrało",
+"usrały",
+"wjebala",
+"wjebali",
+"wjebalo",
+"wjebaly",
+"wjebano",
+"wjebany",
+"wjebać",
+"wjebał",
+"wjebcie",
+"wjebią",
+"wjebię",
+"wkurwem",
+"wkurwia",
+"wkurwic",
+"wkurwie",
+"wkurwil",
+"wkurwmy",
+"wkurwom",
+"wkurwow",
+"wpieprz",
+"wqrwach",
+"wqrwami",
+"wqrwowi",
+"wqrwów",
+"wqurwem",
+"wqurwie",
+"wqurwom",
+"wqurwow",
+"wyjebac",
+"wyjebal",
+"wyjeban",
+"wyjebia",
+"wyjebie",
+"wyjebmy",
+"wykurwi",
+"wysraja",
+"wysrala",
+"wysrali",
+"wysralo",
+"wysraly",
+"wysramy",
+"wysrana",
+"wysrane",
+"wysrani",
+"wysrano",
+"wysrany",
+"wysrasz",
+"wysrać",
+"wysrał",
+"wysrań",
+"wysrywa",
+"wysrywu",
+"wysrywy",
+"wyszcza",
+"wytrysk",
+"zajebac",
+"zajebal",
+"zajeban",
+"zajebia",
+"zajebie",
+"zajebmy",
+"zajebze",
+"zakurwi",
+"zasraja",
+"zasrala",
+"zasrali",
+"zasralo",
+"zasraly",
+"zasramy",
+"zasrana",
+"zasrane",
+"zasrani",
+"zasrano",
+"zasrany",
+"zasrasz",
+"zasrać",
+"zasrał",
+"zasrań",
+"zasrywa",
+"zaszcza",
+"zesraja",
+"zesrala",
+"zesrali",
+"zesralo",
+"zesraly",
+"zesramy",
+"zesrano",
+"zesrany",
+"zesrasz",
+"zesrać",
+"zesrał",
+"zesrań",
+"zesrywa",
+"zeszmac",
+"zjebach",
+"zjebala",
+"zjebali",
+"zjebalo",
+"zjebaly",
+"zjebami",
+"zjebana",
+"zjebany",
+"zjebać",
+"zjebał",
+"zjebcie",
+"zjebcok",
+"zjebią",
+"zjebię",
+"zjebkom",
+"zjebką",
+"zjebkę",
+"zjebowi",
+"zjebów",
+"chooja",
+"chooje",
+"chooju",
+"chooya",
+"chooye",
+"chooyu",
+"chujek",
+"chujem",
+"chujki",
+"chujku",
+"chujni",
+"chujom",
+"chujow",
+"cipach",
+"cipami",
+"cipkom",
+"cipką",
+"cipkę",
+"cipsko",
+"ciulaj",
+"ciulam",
+"doopce",
+"doopek",
+"doopie",
+"doopka",
+"doopke",
+"doopki",
+"doopko",
+"doopom",
+"doopą",
+"doopę",
+"dupach",
+"dupami",
+"dupić",
+"dupię",
+"dupska",
+"dupsko",
+"dziwce",
+"dziwek",
+"dziwka",
+"dziwke",
+"dziwki",
+"dziwko",
+"fiucie",
+"fiutek",
+"fiutem",
+"fiutka",
+"fiutom",
+"fiutow",
+"goowna",
+"goowno",
+"goownu",
+"gowien",
+"gownem",
+"gownie",
+"gownom",
+"gunwem",
+"gunwie",
+"gunwom",
+"guwien",
+"guwnem",
+"guwnie",
+"guwnom",
+"gówna",
+"gówno",
+"gównu",
+"hoojem",
+"hoojni",
+"hoojom",
+"hoojoo",
+"hooyem",
+"hooyni",
+"hooyom",
+"hooyoo",
+"hujach",
+"hujami",
+"hujnia",
+"hujnie",
+"hujnio",
+"hujowa",
+"hujowe",
+"hujowi",
+"hujowo",
+"hujowy",
+"hujoza",
+"hujów",
+"huyach",
+"huyami",
+"huynia",
+"huynie",
+"huynio",
+"huyowa",
+"huyowe",
+"huyowi",
+"huyowy",
+"huyów",
+"jebace",
+"jebaka",
+"jebake",
+"jebaki",
+"jebako",
+"jebaku",
+"jebala",
+"jebali",
+"jebalo",
+"jebaly",
+"jebana",
+"jebane",
+"jebani",
+"jebano",
+"jebany",
+"jebać",
+"jebał",
+"jebań",
+"jebcie",
+"jebiac",
+"jebią",
+"jebię",
+"jebmyz",
+"jebnac",
+"jebnal",
+"jebnie",
+"jebnij",
+"jebną",
+"jebnę",
+"jebło",
+"jebże",
+"koorva",
+"koorwa",
+"kurwaa",
+"kurwia",
+"kurwic",
+"kurwie",
+"kurwik",
+"kurwil",
+"kurwmy",
+"kurwom",
+"kurwuj",
+"kurwą",
+"kurwę",
+"kutasa",
+"kutasy",
+"kuśka",
+"kuśki",
+"kuśko",
+"kórwa",
+"nadupi",
+"nasrac",
+"nasraj",
+"nasral",
+"nasram",
+"nasran",
+"obesra",
+"obsrac",
+"obsraj",
+"obsral",
+"obsram",
+"obsran",
+"ochuja",
+"odupcz",
+"ojebac",
+"ojebal",
+"ojebia",
+"ojebie",
+"ojebmy",
+"osraja",
+"osrala",
+"osrali",
+"osralo",
+"osraly",
+"osramy",
+"osrana",
+"osrane",
+"osrani",
+"osrano",
+"osrany",
+"osrasz",
+"osrać",
+"osrał",
+"osrań",
+"osrywa",
+"oszcza",
+"piczce",
+"piczek",
+"piczka",
+"piczke",
+"piczki",
+"piczko",
+"piczom",
+"piczą",
+"piczę",
+"pieprz",
+"pizdam",
+"pizdom",
+"pizdzi",
+"pizdą",
+"pizdę",
+"podjeb",
+"poebao",
+"pojeba",
+"pojeby",
+"posrac",
+"posraj",
+"posral",
+"posram",
+"posran",
+"rozjeb",
+"skurwi",
+"sracie",
+"sracza",
+"sracze",
+"sraczu",
+"sraczy",
+"srajac",
+"srajda",
+"srajde",
+"srajdo",
+"srajdy",
+"srajmy",
+"srajze",
+"srają",
+"srakom",
+"sraką",
+"srakę",
+"sralam",
+"sralas",
+"sralby",
+"sralem",
+"srales",
+"srania",
+"sranie",
+"sraniu",
+"sransk",
+"srała",
+"srało",
+"srały",
+"szczac",
+"szczaj",
+"szczal",
+"szczam",
+"szczyn",
+"szmaca",
+"szmace",
+"szmaci",
+"szmać",
+"udupic",
+"udupie",
+"ujebac",
+"ujebal",
+"ujebia",
+"ujebie",
+"ujebmy",
+"usraja",
+"usrala",
+"usrali",
+"usralo",
+"usraly",
+"usramy",
+"usrana",
+"usrane",
+"usrani",
+"usrano",
+"usrany",
+"usrasz",
+"usrać",
+"usrał",
+"usrań",
+"wchooj",
+"wjebac",
+"wjebal",
+"wjeban",
+"wjebia",
+"wjebie",
+"wkurwi",
+"wkurwu",
+"wkurwy",
+"wqrwem",
+"wqrwie",
+"wqrwom",
+"wqrwow",
+"wqurwu",
+"wqurwy",
+"wykurw",
+"wysrac",
+"wysraj",
+"wysral",
+"wysram",
+"wysran",
+"wysryw",
+"zakurw",
+"zasrac",
+"zasraj",
+"zasral",
+"zasram",
+"zasran",
+"zdzira",
+"zdziro",
+"zdziry",
+"zesrac",
+"zesraj",
+"zesral",
+"zesram",
+"zesran",
+"zjebac",
+"zjebal",
+"zjeban",
+"zjebce",
+"zjebek",
+"zjebem",
+"zjebia",
+"zjebie",
+"zjebka",
+"zjebke",
+"zjebki",
+"zjebko",
+"zjebmy",
+"zjebom",
+"zjebow",
+"zjebą",
+"zjebę",
+"chooj",
+"chooy",
+"chuja",
+"chuje",
+"chuju",
+"cipce",
+"cipek",
+"cipie",
+"cipka",
+"cipke",
+"cipki",
+"cipko",
+"cipom",
+"cipą",
+"cipę",
+"dojeb",
+"doopa",
+"doope",
+"doopo",
+"doopy",
+"dupek",
+"dupic",
+"dupie",
+"dupom",
+"dupą",
+"dupę",
+"dziwk",
+"fiuta",
+"fiuty",
+"gowna",
+"gowno",
+"gownu",
+"gunwa",
+"gunwo",
+"gunwu",
+"guwna",
+"guwno",
+"guwnu",
+"gówn",
+"hooja",
+"hooje",
+"hooju",
+"hooya",
+"hooye",
+"hooyu",
+"hujem",
+"hujni",
+"hujom",
+"hujoo",
+"hujow",
+"huyem",
+"huyni",
+"huyom",
+"huyoo",
+"jebac",
+"jebaj",
+"jebak",
+"jebal",
+"jeban",
+"jebem",
+"jebia",
+"jebie",
+"jeblo",
+"jebmy",
+"jebna",
+"jebne",
+"jebze",
+"jprdl",
+"kurew",
+"kurva",
+"kurwa",
+"kurwe",
+"kurwi",
+"kurwo",
+"kurwy",
+"kuska",
+"kuski",
+"kusko",
+"kutas",
+"najeb",
+"naryp",
+"nasra",
+"obsra",
+"ochui",
+"ochuj",
+"odjeb",
+"osrac",
+"osraj",
+"osral",
+"osram",
+"osran",
+"picza",
+"picze",
+"piczo",
+"piczy",
+"pizda",
+"pizde",
+"pizdo",
+"pizdu",
+"pizdy",
+"piźd",
+"pojeb",
+"posra",
+"qurva",
+"qurwa",
+"skurw",
+"srace",
+"sracz",
+"sraja",
+"srajd",
+"sraka",
+"srake",
+"sraki",
+"srako",
+"srala",
+"srali",
+"sralo",
+"sraly",
+"sramy",
+"srano",
+"srasz",
+"srać",
+"srał",
+"srań",
+"szcza",
+"szczy",
+"szlag",
+"szmac",
+"udupi",
+"usrac",
+"usraj",
+"usral",
+"usram",
+"usran",
+"wchui",
+"wchuj",
+"wkurw",
+"wqrwu",
+"wqrwy",
+"wqurw",
+"wyjeb",
+"wysra",
+"zajeb",
+"zasra",
+"zesra",
+"zjeba",
+"zjebe",
+"zjebo",
+"zjeby",
+"chuj",
+"cipa",
+"cipe",
+"cipo",
+"cipy",
+"doop",
+"dupa",
+"dupi",
+"dupo",
+"dupy",
+"fhuj",
+"fiut",
+"hooj",
+"hooy",
+"huja",
+"huje",
+"huju",
+"huya",
+"huye",
+"huyu",
+"kaka",
+"kaki",
+"kurw",
+"ohui",
+"ohuj",
+"ojeb",
+"osra",
+"picz",
+"pipa",
+"pipo",
+"pipy",
+"pizd",
+"prdl",
+"qrva",
+"srac",
+"sraj",
+"srak",
+"sral",
+"sram",
+"sran",
+"udup",
+"ujeb",
+"usra",
+"whui",
+"whuj",
+"wjeb",
+"wqrw",
+"zjeb",
+"dup",
+"huj",
+"huy",
+"jeb",
+"sra"
+]
\ No newline at end of file
diff --git a/js/languages/lang/po.json b/js/languages/lang/po.json
new file mode 100644
index 0000000..c98c648
--- /dev/null
+++ b/js/languages/lang/po.json
@@ -0,0 +1,85 @@
+[
+"cagaríamos",
+"cagássemos",
+"pintelheira",
+"cagaríeis",
+"cagáramos",
+"cagásseis",
+"cagávamos",
+"merdimbuca",
+"pingadeira",
+"cagadeira",
+"cagalhão",
+"caganeira",
+"caganitas",
+"cagaremos",
+"cagáreis",
+"cagáveis",
+"escarreta",
+"cagadela",
+"caganita",
+"cagardes",
+"cagareis",
+"cagariam",
+"cagarias",
+"cagarmos",
+"cagarás",
+"cagarão",
+"cagassem",
+"cagasses",
+"cagastes",
+"cagueiro",
+"cagámos",
+"pentelho",
+"pintelho",
+"cagadas",
+"cagados",
+"cagamos",
+"cagando",
+"cagaram",
+"cagaras",
+"cagarei",
+"cagarem",
+"cagares",
+"cagaria",
+"cagará",
+"cagasse",
+"cagaste",
+"cagavam",
+"cagavas",
+"cagemos",
+"foda-se",
+"fodasse",
+"traques",
+"cagada",
+"cagado",
+"cagais",
+"cagara",
+"cagava",
+"cagão",
+"chulas",
+"chulos",
+"merdas",
+"peidar",
+"sefoda",
+"traque",
+"bosta",
+"cagai",
+"cagam",
+"cagar",
+"cagas",
+"cagem",
+"cagou",
+"chula",
+"chulo",
+"cocó",
+"merda",
+"mijar",
+"peido",
+"caga",
+"cago",
+"mijo",
+"poia",
+"pqp",
+"cu"
+]
\ No newline at end of file
diff --git a/js/languages/lang/ro.json b/js/languages/lang/ro.json
new file mode 100644
index 0000000..b10c659
--- /dev/null
+++ b/js/languages/lang/ro.json
@@ -0,0 +1,10 @@
+[
+"futu-i",
+"fututi",
+"sloboz",
+"pubes",
+"pulă",
+"fute",
+"muie",
+"pula"
+]
\ No newline at end of file
diff --git a/js/languages/lang/ru.json b/js/languages/lang/ru.json
new file mode 100644
index 0000000..efef45a
--- /dev/null
+++ b/js/languages/lang/ru.json
@@ -0,0 +1,3695 @@
+[
+"аборт",
+"амбал",
+"анус",
+"аху",
+"ахуенно",
+"бздение",
+"бздеть",
+"бздишь",
+"бзднуть",
+"бздун",
+"бздунья",
+"бздюх",
+"бздюха",
+"бздёнок",
+"бле",
+"блеад",
+"блеат",
+"блеать",
+"блеть",
+"блуд",
+"блудилище",
+"блудовместилище",
+"блудодей",
+"блудодейский",
+"блудугонище",
+"блэт",
+"бля",
+"блябу",
+"блябуду",
+"бляд",
+"блядва",
+"блядво",
+"блядевина",
+"блядей",
+"блядепиздопроёбище",
+"блядеха",
+"бляди",
+"блядиада",
+"блядин",
+"блядина",
+"блядистка",
+"блядистость",
+"блядища",
+"блядище",
+"блядки",
+"бляднота",
+"блядо",
+"блядование",
+"блядовать",
+"блядовитый",
+"блядовозка",
+"блядогандонский",
+"блядогон",
+"блядодерьмо",
+"блядок",
+"блядолиз",
+"блядопростервозная",
+"блядословник",
+"блядоход",
+"блядоящерица",
+"блядская",
+"блядский",
+"блядского",
+"блядское",
+"блядскую",
+"блядства",
+"блядство",
+"блядствовать",
+"блядун",
+"блядунья",
+"блядь",
+"блядьмо",
+"блядюга",
+"блядюра",
+"блядюшка",
+"блядюшник",
+"блядями",
+"блятб",
+"блятс",
+"блять",
+"блятьб",
+"блятья",
+"бляхомудия",
+"бляц",
+"бляць",
+"блёжник",
+"болтохуярой",
+"бордель",
+"бугор",
+"букакке",
+"вагина",
+"вафлеотстойник",
+"вафлист",
+"вахуе",
+"вертохуй",
+"вжопить",
+"вжопиться",
+"вз'ебывать",
+"взбляд",
+"вздрачивание",
+"вздрачивать",
+"вздрачиваться",
+"вздрочить",
+"вздрочиться",
+"вздрючивание",
+"вздрючивать",
+"вздрючить",
+"взрыв",
+"взъебка",
+"взъебнуть",
+"взъебщик",
+"взъёбка",
+"взъёбывать",
+"взьебка",
+"взьебывать",
+"вислозадая",
+"влагалище",
+"вобля",
+"волосянка",
+"воспиздозаолупоклинившаяся",
+"восьмиблядское",
+"восьмихуй",
+"впиздить",
+"впиздиться",
+"впиздохать",
+"впиздохивать",
+"впиздохиваться",
+"впиздошиваться",
+"впиздошить",
+"впиздронивать",
+"впиздрониваться",
+"впиздюливать",
+"впиздюливаться",
+"впиздюлить",
+"впиздюривать",
+"впиздюриваться",
+"впиздюрить",
+"впиздякать",
+"впиздякивать",
+"впиздяривать",
+"впиздяриваться",
+"впиздярить",
+"впиздяхать",
+"впиздяхивать",
+"впиздяхиваться",
+"впиздячивать",
+"впиздячил",
+"впиздячила",
+"впиздячить",
+"впиздяшивать",
+"впиздяшиваться",
+"впиздяшить",
+"впизживать",
+"впизживаться",
+"всхуяренный",
+"вхуематери",
+"вхуйкать",
+"вхуйнуть",
+"вхуйнуться",
+"вхуя",
+"вхуякать",
+"вхуякаться",
+"вхуякивание",
+"вхуякивать",
+"вхуякиваться",
+"вхуякнуть",
+"вхуякнуться",
+"вхуяривание",
+"вхуяривать",
+"вхуяриваться",
+"вхуярить",
+"вхуяриться",
+"вхуячивание",
+"вхуячивать",
+"вхуячиваться",
+"вхуячить",
+"вхуячиться",
+"вхуяшивать",
+"вхуяшиваться",
+"вхуяшить",
+"вхуяшиться",
+"въеб",
+"въебать",
+"въебаться",
+"въебашивать",
+"въебашиваться",
+"въебашить",
+"въебашиться",
+"въебенивать",
+"въебениваться",
+"въебенить",
+"въебениться",
+"въебуривать",
+"въебуриваться",
+"въебурить",
+"въебуриться",
+"въебывание",
+"въебывать",
+"въебываться",
+"въебёхать",
+"въебёхаться",
+"въебёхивать",
+"въебёхиваться",
+"въябывать",
+"въёбывать",
+"выбляд",
+"выблядовал",
+"выблядовала",
+"выблядовать",
+"выблядодерьмо",
+"выблядок",
+"выблядыш",
+"выдрачивание",
+"выдрачивать",
+"выдрачиваться",
+"выдрочить",
+"выдрочиться",
+"выдрючивание",
+"выдрючивать",
+"выдрючиваться",
+"выдрючить",
+"выдрючиться",
+"выеб",
+"выебанн",
+"выебанный",
+"выебану",
+"выебат",
+"выебать",
+"выебаться",
+"выебенивать",
+"выебениваться",
+"выебенить",
+"выебениться",
+"выебнуть",
+"выебнуться",
+"выебок",
+"выебон",
+"выебонщик",
+"выебопропиздище",
+"выебу",
+"выебыва",
+"выебывается",
+"выебываешся",
+"выебываешься",
+"выебываться",
+"выебёхивание",
+"выебёхивать",
+"выебёхиваться",
+"выеть",
+"выжопить",
+"выжопывать",
+"вымавдошиваться",
+"вымандить",
+"вымандиться",
+"вымандовать",
+"вымандоваться",
+"вымандовывание",
+"вымандовывать",
+"вымандовываться",
+"вымандохать",
+"вымандохаться",
+"вымандохивание",
+"вымандохивать",
+"вымандохиваться",
+"вымандошивание",
+"вымандошивать",
+"вымандошиваться",
+"вымандошить",
+"вымандюливание",
+"вымандюливать",
+"вымандюливаться",
+"вымандюлить",
+"вымандюлиться",
+"вымандюривание",
+"вымандюривать",
+"вымандюриваться",
+"вымандюрить",
+"вымандюриться",
+"вымандякать",
+"вымандякаться",
+"вымандякивание",
+"вымандякивать",
+"вымандякиваться",
+"вымандяривание",
+"вымандяривать",
+"вымандяриваться",
+"вымандярить",
+"вымандяриться",
+"вымандяхать",
+"вымандяхаться",
+"вымандяхивание",
+"вымандяхивать",
+"вымандяхиваться",
+"вымандячивание",
+"вымандячивать",
+"вымандячиваться",
+"вымандячить",
+"вымандячиться",
+"выперданный",
+"выпердеть",
+"выпердоватое",
+"выпердоговенный",
+"выпердопроссаная",
+"выпердыш",
+"выпиздеться",
+"выпиздить",
+"высераться",
+"высраная",
+"высраномудоватое",
+"высранохуевое",
+"высрать",
+"высраться",
+"выссака",
+"выссаногнойное",
+"выссанохуеплёт",
+"выссать",
+"выссаться",
+"выссереть",
+"высцаный",
+"выхуякать",
+"выхуякаться",
+"выхуякивание",
+"выхуякивать",
+"выхуякиваться",
+"выхуяривание",
+"выхуяривать",
+"выхуяриваться",
+"выхуярить",
+"выхуяриться",
+"выхуячивание",
+"выхуячивать",
+"выхуячиваться",
+"выхуячить",
+"выхуячиться",
+"выёбистый",
+"выёбыва",
+"выёбывается",
+"выёбывание",
+"выёбывать",
+"выёбываться",
+"выёбываются",
+"вьеб",
+"вьебал",
+"вёбаную",
+"гавен",
+"гавн",
+"гавно",
+"гавнопрягопизд",
+"гандон",
+"гандонный",
+"гандоноскотская",
+"гандоносрака",
+"гандоносучий",
+"гандонохеровая",
+"гандонский",
+"гей",
+"глиста",
+"глупизди",
+"глыбоебливое",
+"гнида",
+"гнидоблядун",
+"гнидопаскудная",
+"гнидское",
+"гнобилище",
+"гноепадла",
+"гноепромандоватое",
+"говенка",
+"говенный",
+"говешка",
+"говназия",
+"говнецо",
+"говнистый",
+"говниться",
+"говно",
+"говновоз",
+"говнодав",
+"говнодерьмище",
+"говноеб",
+"говноебский",
+"говноед",
+"говнозалупский",
+"говномер",
+"говномес",
+"говноперданный",
+"говносерка",
+"говночист",
+"говноёб",
+"говнюк",
+"говнюха",
+"говнядина",
+"говняк",
+"говняный",
+"говнять",
+"голожопая",
+"голомудый",
+"голопиздая",
+"голоёбица",
+"голый",
+"гомик",
+"гомосек",
+"гондон",
+"гонореей",
+"гонорея",
+"греблядь",
+"гужеёб",
+"гусоёб",
+"дoёбывaюcь",
+"давалка",
+"дароёб",
+"двужопник",
+"двужопостворчатый",
+"дебил",
+"дермо",
+"дерьмище",
+"дерьмо",
+"дерьмовый",
+"дерьмоед",
+"дерьмопрозалупское",
+"дерьмохеропиздократ",
+"дерьмохеропиздократия",
+"дерьмохеропиздократка",
+"дерьмохеропиздократы",
+"дилдо",
+"добиздоболить",
+"довыебывать",
+"довыебываться",
+"додрочить",
+"додрочиться",
+"додрочу",
+"доеб",
+"доебалась",
+"доебались",
+"доебался",
+"доебать",
+"доебаться",
+"доебенивать",
+"доебениваться",
+"доебенить",
+"доебениться",
+"доебуривать",
+"доебуриваться",
+"доебурить",
+"доебуриться",
+"доебыва",
+"доебёхать",
+"доебёхаться",
+"доебёхивать",
+"доебёхиваться",
+"доебёшивать",
+"доебёшиваться",
+"доебёшить",
+"доебёшиться",
+"доибаться",
+"долбаёб",
+"долбоеб",
+"долбоебатина",
+"долбоебическая",
+"долбоёб",
+"долдон",
+"домандить",
+"домандиться",
+"домандовать",
+"домандоваться",
+"домандовывать",
+"домандовываться",
+"домандохать",
+"домандохаться",
+"домандохивать",
+"домандохиваться",
+"домандюкать",
+"домандюкаться",
+"домандюкивать",
+"домандюкиваться",
+"домандюливать",
+"домандюливаться",
+"домандюлить",
+"домандюлиться",
+"домандюривать",
+"домандюриваться",
+"домандюрить",
+"домандюриться",
+"домандякать",
+"домандякаться",
+"домандякивать",
+"домандякиваться",
+"домандяривать",
+"домандяриваться",
+"домандярить",
+"домандяриться",
+"домандяхать",
+"домандяхаться",
+"домандяхивать",
+"домандяхиваться",
+"домандячивать",
+"домандячиваться",
+"домандячить",
+"домандячиться",
+"домудохать",
+"домудохаться",
+"домудохивать",
+"домудохиваться",
+"допиздеться",
+"допиздить",
+"допиздиться",
+"допиздоболивать",
+"допиздоболиваться",
+"допиздоболиться",
+"допиздовать",
+"допиздоваться",
+"допиздовывать",
+"допиздовываться",
+"допиздохать",
+"допиздохаться",
+"допиздохивать",
+"допиздохиваться",
+"допиздошивать",
+"допиздошиваться",
+"допиздошить",
+"допиздошиться",
+"допиздюкать",
+"допиздюкаться",
+"допиздюкивать",
+"допиздюкиваться",
+"допиздюливать",
+"допиздюливаться",
+"допиздюлить",
+"допиздюлиться",
+"допиздюривать",
+"допиздюриваться",
+"допиздюрить",
+"допиздюриться",
+"допиздюхать",
+"допиздюхаться",
+"допиздюхивать",
+"допиздюхиваться",
+"допиздякать",
+"допиздякаться",
+"допиздякивать",
+"допиздякиваться",
+"допиздяривать",
+"допиздяриваться",
+"допиздярить",
+"допиздяриться",
+"допиздяхать",
+"допиздяхаться",
+"допиздяхивать",
+"допиздяхиваться",
+"допиздячивать",
+"допиздячиваться",
+"допиздячить",
+"допиздячиться",
+"допиздяшивать",
+"допиздяшиваться",
+"допиздяшить",
+"допиздяшиться",
+"допизживать",
+"дотрахать",
+"дотрахаться",
+"дохера",
+"дохуйнуть",
+"дохуя",
+"дохуяибольше",
+"дохуякать",
+"дохуякаться",
+"дохуякивать",
+"дохуякиваться",
+"дохуяривать",
+"дохуяриваться",
+"дохуярить",
+"дохуяриться",
+"дохуячивать",
+"дохуячиваться",
+"дохуячить",
+"дохуячиться",
+"дохуяшивать",
+"дохуяшиваться",
+"дохуяшить",
+"доёбыва",
+"доёбывается",
+"доёбывать",
+"доёбываться",
+"драноебливая",
+"дрисня",
+"дрист",
+"дристануть",
+"дристать",
+"дристни",
+"дристун",
+"дристуха",
+"дроч",
+"дрочена",
+"дроченная",
+"дроченье",
+"дрочепиздище",
+"дрочепроговенное",
+"дрочепропердоватая",
+"дрочепросволота",
+"дроческотина",
+"дрочила",
+"дрочилка",
+"дрочилыцик",
+"дрочить",
+"дрочиться",
+"дрочка",
+"дрючить",
+"дрючиться",
+"дура",
+"дурак",
+"дурапиздия",
+"дуроеб",
+"дуроёб",
+"дядеёб",
+"еб",
+"ебаквакнутый",
+"ебал",
+"ебалка",
+"ебало",
+"ебалово",
+"ебалом",
+"ебальник",
+"ебальные",
+"ебальный",
+"ебанагандонный",
+"ебанатик",
+"ебанашка",
+"ебаная",
+"ебандей",
+"ебанная",
+"ебанный",
+"ебаное",
+"ебанул",
+"ебанула",
+"ебанулась",
+"ебанулись",
+"ебанулось",
+"ебанулся",
+"ебанутые",
+"ебанутый",
+"ебануть",
+"ебануться",
+"ебаный",
+"ебаных",
+"ебанько",
+"ебанёшься",
+"ебапира",
+"ебаришка",
+"ебарь",
+"ебат",
+"ебаторий",
+"ебатория",
+"ебатый",
+"ебать",
+"ебать-копать",
+"ебатьс",
+"ебаться",
+"ебашит",
+"ебеня",
+"ебец",
+"еби",
+"ебиблядская",
+"ебистика",
+"ебись",
+"ебитесь",
+"еблан",
+"ебланистый",
+"ебланить",
+"ебланище",
+"ебливая",
+"ебливый",
+"еблище",
+"ебло",
+"еблом",
+"еблоухий",
+"еблысь",
+"ебля",
+"ебнутый",
+"ебнуть",
+"ебнуться",
+"ебня",
+"ебоблядище",
+"ебоватая",
+"еболожье",
+"ебу",
+"ебукентий",
+"ебун",
+"ебунище",
+"ебучее",
+"ебучий",
+"ебущегося",
+"ебёт",
+"едрижтвоювбабушку",
+"едритвоюмать",
+"елда",
+"елдак",
+"елдачить",
+"елдище",
+"елду",
+"елупень",
+"епта",
+"ети",
+"етиегомать",
+"етиихмать",
+"етися",
+"жидоёб",
+"жидоёбка",
+"жидоёбский",
+"жирнозадый",
+"жопа",
+"жопастая",
+"жопенци",
+"жопища",
+"жопка",
+"жопник",
+"жоповатое",
+"жопоеб",
+"жопой",
+"жополиз",
+"жополизание",
+"жопоногий",
+"жопопроебина",
+"жопосер",
+"жопочка",
+"жопочник",
+"жопство",
+"жопу",
+"забздеть",
+"заблядовать",
+"заблядоваться",
+"заговнять",
+"задница",
+"задрачивать",
+"задрачиваться",
+"задристать",
+"задрока",
+"задроченный",
+"задрочепидер",
+"задрочепрогнидище",
+"задрочепроговно",
+"задроческоготическое",
+"задроческотское",
+"задрочила",
+"задрочить",
+"задрочиться",
+"задрочун",
+"задрючить",
+"задрючиться",
+"заеб",
+"заеба",
+"заебавш",
+"заебал",
+"заебала",
+"заебали",
+"заебало",
+"заебался",
+"заебанец",
+"заебанный",
+"заебаный",
+"заебательская",
+"заебать",
+"заебатьмозги",
+"заебаться",
+"заебашивать",
+"заебашиваться",
+"заебашить",
+"заебашиться",
+"заебели",
+"заебенивать",
+"заебениваться",
+"заебенить",
+"заебениться",
+"заебень",
+"заебись",
+"заебисьонвротивжопу",
+"заебисьтывдоску",
+"заебисьтывротивжопу",
+"заебитесьвывротивжопу",
+"заебический",
+"заебла",
+"заебулина",
+"заебумба",
+"заебуривать",
+"заебуриваться",
+"заебурить",
+"заебучестью",
+"заебцовый",
+"заебываться",
+"заебёхать",
+"заебёхаться",
+"заебёхивать",
+"заебёхиваться",
+"заебёшь",
+"залуп",
+"залупа",
+"залупаться",
+"залупе",
+"залупенец",
+"залупенить",
+"залупень",
+"залупистый",
+"залупить",
+"залупиться",
+"залупляться",
+"залупоглазая",
+"залупоглазое",
+"залупоголовая",
+"залуполиз",
+"залупская",
+"залупский",
+"залупу",
+"замандалиться",
+"замандить",
+"замандиться",
+"замандовать",
+"замандоваться",
+"замандовывать",
+"замандовываться",
+"замандохать",
+"замандохаться",
+"замандохивать",
+"замандохиваться",
+"замандошивать",
+"замандошиваться",
+"замандошить",
+"замандошиться",
+"замандюкать",
+"замандюкаться",
+"замандюкивать",
+"замандюкиваться",
+"замандюливать",
+"замандюливаться",
+"замандюлить",
+"замандюлиться",
+"замандюривать",
+"замандюриваться",
+"замандюрить",
+"замандюриться",
+"замандякать",
+"замандякаться",
+"замандякивать",
+"замандякиваться",
+"замандяривать",
+"замандяриваться",
+"замандярить",
+"замандяриться",
+"замандяхать",
+"замандяхаться",
+"замандяхивать",
+"замандяхиваться",
+"замандячивать",
+"замандячиваться",
+"замандячить",
+"замандячиться",
+"замандяшивать",
+"замандяшиваться",
+"замандяшить",
+"замандяшиться",
+"замондить",
+"заморыш",
+"замудить",
+"замудиться",
+"замудоебина",
+"замудоханный",
+"замудохать",
+"замудохаться",
+"замудохивать",
+"замудохиваться",
+"запиздадуриная",
+"запиздарить",
+"запизденевать",
+"запизденелый",
+"запизденная",
+"запиздеть",
+"запиздие",
+"запиздить",
+"запиздиться",
+"запиздоболивать",
+"запиздоболиваться",
+"запиздоболить",
+"запиздоболиться",
+"запиздовать",
+"запиздоваться",
+"запиздовывать",
+"запиздовываться",
+"запиздомедузь",
+"запиздохать",
+"запиздошивать",
+"запиздошиваться",
+"запиздошить",
+"запиздошиться",
+"запиздюкать",
+"запиздюкаться",
+"запиздюкивать",
+"запиздюкиваться",
+"запиздюливать",
+"запиздюливаться",
+"запиздюлить",
+"запиздюлиться",
+"запиздюривать",
+"запиздюриваться",
+"запиздюрить",
+"запиздюриться",
+"запиздюхать",
+"запиздюхаться",
+"запиздюхивать",
+"запиздюхиваться",
+"запиздючивать",
+"запиздючиваться",
+"запиздючить",
+"запиздючиться",
+"запизживаться",
+"засерать",
+"засерун",
+"засеря",
+"засирать",
+"засондряченный",
+"засракомондохуй",
+"засранец",
+"засранка",
+"засранный",
+"засраный",
+"засратый",
+"засрать",
+"засраться",
+"засрун",
+"зассать",
+"застрахуй",
+"затраханный",
+"затрахать",
+"затрахаться",
+"затрахивать",
+"затрахиваться",
+"захерачивать",
+"захерачиваться",
+"захерачить",
+"захерачиться",
+"захероветь",
+"захреначивать",
+"захреначиваться",
+"захреначить",
+"захреначиться",
+"захреноветь",
+"захуить",
+"захуйнуть",
+"захуйнуться",
+"захуя",
+"захуякать",
+"захуякаться",
+"захуякивать",
+"захуякиваться",
+"захуялась",
+"захуяривать",
+"захуяриваться",
+"захуярил",
+"захуярить",
+"захуяриться",
+"захуяченный",
+"захуячивать",
+"захуячиваться",
+"захуячить",
+"захуячиться",
+"захуяшивать",
+"захуяшиваться",
+"захуяшить",
+"захуяшиться",
+"заштрихуй",
+"заёб",
+"заёба",
+"заёбагрешная",
+"заёбанный",
+"заёбаный",
+"заёбина",
+"заёбистый",
+"заёбывать",
+"заёбыватьмозги",
+"заёбываться",
+"заёбывают",
+"заёбышь",
+"збс",
+"злоебучая",
+"злоебучее",
+"злоебучести",
+"злоебучий",
+"злоебучим",
+"злопиздии",
+"идиот",
+"извыёбываться",
+"изговнять",
+"изговняться",
+"издрочиться",
+"изеб",
+"измандить",
+"измандиться",
+"измандовать",
+"измандоваться",
+"измандовывать",
+"измандовываться",
+"измандохать",
+"измандохаться",
+"измандохивать",
+"измандохиваться",
+"измандошибаться",
+"измандошивать",
+"измандошить",
+"измандошиться",
+"измандюкать",
+"измандюкаться",
+"измандюкивать",
+"измандюкиваться",
+"измандюливать",
+"измандюливаться",
+"измандюлить",
+"измандюлиться",
+"измандюривать",
+"измандюриваться",
+"измандюрить",
+"измандюриться",
+"измандякать",
+"измандякаться",
+"измандякивать",
+"измандякиваться",
+"измандяривать",
+"измандяриваться",
+"измандярить",
+"измандяриться",
+"измандяхать",
+"измандяхаться",
+"измандяхивать",
+"измандяхиваться",
+"измандячивать",
+"измандячиваться",
+"измандячить",
+"измандячиться",
+"измандяшивать",
+"измандяшиваться",
+"измандяшить",
+"измандяшиться",
+"изматерить",
+"изматериться",
+"измудить",
+"измудиться",
+"измудохать",
+"измудохаться",
+"измудохивать",
+"измудохиваться",
+"измутызгать",
+"изъеб",
+"изъебать",
+"изъебаться",
+"изъебашивать",
+"изъебашиваться",
+"изъебашить",
+"изъебашиться",
+"изъебенивать",
+"изъебениваться",
+"изъебенить",
+"изъебениться",
+"изъебехать",
+"изъебнулась",
+"изъебнулся",
+"изъебнуться",
+"изъебуривать",
+"изъебуриваться",
+"изъебурить",
+"изъебуриться",
+"изъебёхаться",
+"изьеб",
+"илда",
+"ипать",
+"испизделась",
+"испизделся",
+"испиздеться",
+"испиздить",
+"испражнение",
+"испражняться",
+"исхуякать",
+"исхуякаться",
+"исхуякивать",
+"исхуякиваться",
+"исхуяривать",
+"исхуяриваться",
+"исхуярить",
+"исхуяриться",
+"исхуячивать",
+"исхуячиваться",
+"исхуячить",
+"исхуячиться",
+"исхуяшивать",
+"исхуяшиваться",
+"исхуяшить",
+"исхуяшиться",
+"йобаный",
+"йух",
+"какать",
+"какашка",
+"кастрат",
+"кастрировать",
+"кебёнематери",
+"кебёнойматери",
+"клитор",
+"клоака",
+"клоповыёбистый",
+"кнахт",
+"козлоблядской",
+"козлоёб",
+"козлоёбина",
+"козлоёбиться",
+"козлоёбище",
+"козоёб",
+"козоёбиться",
+"конаебиться",
+"коноебица",
+"коноёб",
+"коноёбиться",
+"кончить",
+"коростоебина",
+"косоебить",
+"косоебиться",
+"косоёбится",
+"косоёбить",
+"косоёбиться",
+"кривохуй",
+"курва",
+"курвенный",
+"курвенок",
+"курвин",
+"курвиный",
+"курвяжник",
+"курвяжница",
+"курвяжный",
+"курево",
+"куроёб",
+"кёбанойматери",
+"лахудра",
+"лизбиянка",
+"лизоблядство",
+"лох",
+"лохматка",
+"лохудра",
+"малоебущий",
+"малофья",
+"мамкоеб",
+"манда",
+"мандавманду",
+"мандавоха",
+"мандавош",
+"мандавошка",
+"мандавошный",
+"мандавш",
+"манданутый",
+"мандапротивный",
+"мандат",
+"манде",
+"мандеж",
+"мандей",
+"мандеть",
+"мандец",
+"мандилищи",
+"мандистее",
+"мандить",
+"мандиться",
+"мандища",
+"мандище",
+"мандов",
+"мандоватая",
+"мандовать",
+"мандогнидища",
+"мандой",
+"мандопроблядоватая",
+"мандопродерьмище",
+"мандопроеб",
+"мандопростерва",
+"мандопроушечная",
+"мандопроушина",
+"мандоскотина",
+"мандохать",
+"мандохаться",
+"мандохвост",
+"мандохивать",
+"мандохиваться",
+"мандошивать",
+"мандошиваться",
+"мандошить",
+"мандошиться",
+"манду",
+"манды",
+"мандюживаться",
+"мандюк",
+"мандюкать",
+"мандюкаться",
+"мандюкивать",
+"мандюливать",
+"мандюливаться",
+"мандюлить",
+"мандюлиться",
+"мандюривать",
+"мандюриваться",
+"мандюрить",
+"мандюриться",
+"мандякать",
+"мандякаться",
+"мандякивать",
+"мандякиваться",
+"мандякнуть",
+"мандякнуться",
+"мандяривать",
+"мандяриваться",
+"мандярить",
+"мандяриться",
+"мандяхать",
+"мандяхаться",
+"мандяхивать",
+"мандяхиваться",
+"мандячивать",
+"мандячиваться",
+"мандячий",
+"мандячить",
+"мандячиться",
+"мандяшивать",
+"мандяшиваться",
+"мандяшить",
+"мандяшиться",
+"маризуанна",
+"мастурбатор",
+"мать-перемать",
+"матьвашуёб",
+"матьеёперемать",
+"матьтвоюедри",
+"матьтвоюети",
+"матьтвоюуёб",
+"мент",
+"меф",
+"минет",
+"минетить",
+"минетка",
+"минетчик",
+"минетчица",
+"многоблядопропадловый",
+"многоблядопросволота",
+"многоблядская",
+"многоблядь",
+"многоебоватая",
+"многоебоный",
+"многоебошлюхская",
+"многоебучий",
+"многожопа",
+"многомудоватое",
+"многопизда",
+"многопиздище",
+"многопиздная",
+"многопиздоблядун",
+"многопиздопропадла",
+"многостерводерьмо",
+"многостервопропидрила",
+"многостервохеровый",
+"многостервохуенная",
+"мозгоеб",
+"мозгоебатель",
+"мозгоебать",
+"мозгоебка",
+"мозгоёб",
+"мокрожопый",
+"мокропиздая",
+"мокрохвостка",
+"мокрощелка",
+"мондавошь",
+"мондило",
+"мондозалупленной",
+"мордоблядина",
+"моча",
+"мочиться",
+"муда",
+"мудаблядин",
+"мудагавнопердь",
+"мудак",
+"мудами",
+"мудах",
+"мудаханная",
+"мудачьё",
+"мудашвили",
+"муде",
+"мудеть",
+"мудила",
+"мудило",
+"мудильщик",
+"мудистое",
+"мудистый",
+"мудить",
+"мудище",
+"мудня",
+"мудоблядскую",
+"мудовафлоебище",
+"мудодей",
+"мудоеб",
+"мудоеблю",
+"мудозвон",
+"мудой",
+"мудопроеб",
+"мудопроебное",
+"мудопрошлюхское",
+"мудорваней",
+"мудоёб",
+"мудями",
+"муйня",
+"нaхyй",
+"нexyй",
+"набздеть",
+"наблядовал",
+"наблядоваться",
+"навешать",
+"наговнять",
+"надристать",
+"надроченный",
+"надрочивать",
+"надрочить",
+"надрочиться",
+"наеб",
+"наебал",
+"наебали",
+"наебалово",
+"наебанный",
+"наебать",
+"наебаться",
+"наебаш",
+"наебашил",
+"наебашился",
+"наебашиться",
+"наебениться",
+"наебка",
+"наебнулась",
+"наебнулся",
+"наебнуть",
+"наебнуться",
+"наебщик",
+"наебывать",
+"наебываться",
+"наебыш",
+"найвыебенищее",
+"накакать",
+"накакаться",
+"накакивать",
+"намандить",
+"намандиться",
+"намандовать",
+"намандоваться",
+"намандовывать",
+"намандовываться",
+"намандохать",
+"намандохаться",
+"намандохивать",
+"намандохиваться",
+"намандошивать",
+"намандошиваться",
+"намандошить",
+"намандошиться",
+"намандюкать",
+"намандюкаться",
+"намандюкивать",
+"намандюкиваться",
+"намандюливать",
+"намандюливаться",
+"намандюлить",
+"намандюлиться",
+"намандюривать",
+"намандюриваться",
+"намандюрить",
+"намандюриться",
+"намандякать",
+"намандякаться",
+"намандякивать",
+"намандякиваться",
+"намандяривать",
+"намандяриваться",
+"намандярить",
+"намандяриться",
+"намандяхать",
+"намандяхаться",
+"намандяхивать",
+"намандяхиваться",
+"намандячивать",
+"намандячиваться",
+"намандячить",
+"намандячиться",
+"намандяшивать",
+"намандяшиваться",
+"намандяшить",
+"намандяшиться",
+"напиз",
+"напиздеть",
+"напиздить",
+"напиздошить",
+"напиздюрить",
+"напиздюриться",
+"насрать",
+"насраться",
+"нассать",
+"нассаться",
+"настоебать",
+"настоебенило",
+"настоебенить",
+"насцать",
+"натрахать",
+"натрахаться",
+"натрахивать",
+"натрахиваться",
+"нах",
+"нахезать",
+"нахер",
+"нахера",
+"нахуевертеть",
+"нахуй",
+"нахуйник",
+"нахуя",
+"нахуякать",
+"нахуякаться",
+"нахуякивать",
+"нахуякиваться",
+"нахуяривать",
+"нахуяриваться",
+"нахуярить",
+"нахуяриться",
+"нахуячивать",
+"нахуячиваться",
+"нахуячить",
+"нахуячиться",
+"нахуяшивать",
+"нахуяшиваться",
+"нахуяшить",
+"нахуяшиться",
+"наябывать",
+"наябываться",
+"наёб",
+"наёбанный",
+"наёбка",
+"наёбщик",
+"наёбывает",
+"наёбывать",
+"наёбываться",
+"наёбыш",
+"невебенный",
+"невъебения",
+"невъебенно",
+"невъебенной",
+"невъебенный",
+"невъебенным",
+"невьебенно",
+"негр",
+"недоеба",
+"недоебанная",
+"недоебанный",
+"недоебок",
+"недомерок",
+"недоносок",
+"недоёбанный",
+"неебущий",
+"неебёт",
+"ненаебная",
+"нехер",
+"нехуево",
+"нехуй",
+"нехуёво",
+"нехуёвое",
+"нехуёвый",
+"нигер",
+"нихера",
+"нихуя",
+"нихуясебе",
+"нищеебство",
+"обдристанный",
+"обдристать",
+"обдристаться",
+"обдрочиться",
+"обебать",
+"оберблядь",
+"облядипизденелости",
+"облядовать",
+"облядоваться",
+"облямудевшая",
+"облямуденный",
+"обмандить",
+"обмандиться",
+"обмандовать",
+"обмандоваться",
+"обмандовывать",
+"обмандовываться",
+"обмандохать",
+"обмандохаться",
+"обмандохивать",
+"обмандохиваться",
+"обмандошибаться",
+"обмандошивать",
+"обмандошить",
+"обмандошиться",
+"обмандюкать",
+"обмандюкаться",
+"обмандюкивать",
+"обмандюкиваться",
+"обмандюливать",
+"обмандюливаться",
+"обмандюлить",
+"обмандюлиться",
+"обмандюривать",
+"обмандюриваться",
+"обмандюрить",
+"обмандюриться",
+"обмандякать",
+"обмандякаться",
+"обмандякивать",
+"обмандякиваться",
+"обмандяривать",
+"обмандяриваться",
+"обмандярить",
+"обмандяриться",
+"обмандять",
+"обмандяхаться",
+"обмандяхивать",
+"обмандяхиваться",
+"обмандячивать",
+"обмандячиваться",
+"обмандячить",
+"обмандячиться",
+"обмандяшивать",
+"обмандяшиваться",
+"обмандяшить",
+"обмандяшиться",
+"обнаженный",
+"обосран",
+"обосранец",
+"обосранная",
+"обосраный",
+"обосрать",
+"обосраться",
+"обоссанец",
+"обоссаный",
+"обоссать",
+"обоссаться",
+"обоссывать",
+"обоссываться",
+"обосцать",
+"обосцаться",
+"обпиздить",
+"обпиздиться",
+"обпиздовать",
+"обпиздоваться",
+"обпиздовывать",
+"обпиздовываться",
+"обпиздохать",
+"обпиздохаться",
+"обпиздохивать",
+"обпиздохиваться",
+"обпиздошить",
+"обсирать",
+"обтрахать",
+"обтрахаться",
+"обтрахивать",
+"обтрахиваться",
+"обхуякать",
+"обхуякаться",
+"обхуякивание",
+"обхуякивать",
+"обхуякиваться",
+"обхуяривание",
+"обхуяривать",
+"обхуяриваться",
+"обхуярить",
+"обхуяриться",
+"обхуячивание",
+"обхуячивать",
+"обхуячиваться",
+"обхуячить",
+"обхуячиться",
+"обхуяшивание",
+"обхуяшивать",
+"обхуяшиваться",
+"обхуяшить",
+"обхуяшиться",
+"объеб",
+"объебал",
+"объебала",
+"объебалово",
+"объебательство",
+"объебать",
+"объебатьнаходу",
+"объебаться",
+"объебашивание",
+"объебашивать",
+"объебашиваться",
+"объебашить",
+"объебашиться",
+"объебенивание",
+"объебенивать",
+"объебениваться",
+"объебенить",
+"объебениться",
+"объебешь",
+"объебнуть",
+"объебнуться",
+"объебон",
+"объебос",
+"объебуривание",
+"объебуривать",
+"объебуриваться",
+"объебурить",
+"объебуриться",
+"объебушки",
+"объебёхать",
+"объебёхаться",
+"объебёхивание",
+"объебёхивать",
+"объебёхиваться",
+"объёбка",
+"объёбщик",
+"объёбывание",
+"объёбывать",
+"объёбываться",
+"одинхуй",
+"однапизда",
+"однохуйственно",
+"оеб",
+"оебать",
+"оебашивать",
+"оебашить",
+"оебенивать",
+"оебенить",
+"оебнуть",
+"оебуривать",
+"оебурить",
+"оебыва",
+"оебыват",
+"оебёхать",
+"оебёхивать",
+"оманденная",
+"омандить",
+"омандиться",
+"омандовать",
+"омандоваться",
+"омандовывание",
+"омандовывать",
+"омандовываться",
+"омандохать",
+"омандохаться",
+"омандохивание",
+"омандохивать",
+"омандохиваться",
+"омандошивание",
+"омандошивать",
+"омандошиваться",
+"омандошить",
+"омандошиться",
+"омандюкать",
+"омандюкаться",
+"омандюкивание",
+"омандюкивать",
+"омандюкиваться",
+"омандюливание",
+"омандюливать",
+"омандюливаться",
+"омандюлить",
+"омандюлиться",
+"омандюривание",
+"омандюривать",
+"омандюриваться",
+"омандюрить",
+"омандюриться",
+"омандякать",
+"омандякаться",
+"омандякивание",
+"омандякивать",
+"омандякиваться",
+"омандяривание",
+"омандяривать",
+"омандяриваться",
+"омандярить",
+"омандяриться",
+"омандяхать",
+"омандяхаться",
+"омандяхивание",
+"омандяхивать",
+"омандяхиваться",
+"омандячивание",
+"омандячивать",
+"омандячиваться",
+"омандячить",
+"омандячиться",
+"омандяшивание",
+"омандяшивать",
+"омандяшиваться",
+"омандяшить",
+"омандяшиться",
+"опедерастить",
+"опесдол",
+"опиз",
+"опизде",
+"опизденевать",
+"опизденеть",
+"опизденно",
+"опизденный",
+"опиздеть",
+"опиздить",
+"опиздихуительный",
+"опиздоумел",
+"оскорблять",
+"оскотоёбился",
+"ослоеб",
+"ослоёб",
+"ослоёбиться",
+"остоебал",
+"остоебала",
+"остоебали",
+"остоебать",
+"остоебенило",
+"остоебенить",
+"остоебеть",
+"остопиздело",
+"остопиздеть",
+"остохуело",
+"остохуеть",
+"отдрачивать",
+"отдрачиваться",
+"отдрочить",
+"отдрочиться",
+"отконаёбиться",
+"откосоёбиться",
+"отмандить",
+"отмандиться",
+"отмандовать",
+"отмандоваться",
+"отмандовывать",
+"отмандовываться",
+"отмандохать",
+"отмандохаться",
+"отмандохивать",
+"отмандохиваться",
+"отмандошивать",
+"отмандошиваться",
+"отмандошить",
+"отмандошиться",
+"отмандюкать",
+"отмандюкаться",
+"отмандюкивать",
+"отмандюкиваться",
+"отмандюливать",
+"отмандюливаться",
+"отмандюлить",
+"отмандюлиться",
+"отмандюривать",
+"отмандюриваться",
+"отмандюрить",
+"отмандюриться",
+"отмандякать",
+"отмандякаться",
+"отмандякивать",
+"отмандякиваться",
+"отмандяривать",
+"отмандяриваться",
+"отмандярить",
+"отмандяриться",
+"отмандяхать",
+"отмандяхаться",
+"отмандяхивать",
+"отмандяхиваться",
+"отмандячивать",
+"отмандячиваться",
+"отмандячить",
+"отмандячиться",
+"отмандяшить",
+"отмондить",
+"отпиж",
+"отпиз",
+"отпиздить",
+"отпизднутый",
+"отпиздошить",
+"отпиздячить",
+"отпиздяшивание",
+"отпиздяшивать",
+"отпиздяшиваться",
+"отпиздяшить",
+"отпиздяшиться",
+"отпороть",
+"отсандаленный",
+"отсасывать",
+"отсасываться",
+"отсосать",
+"отсосаться",
+"оттраханная",
+"оттрахать",
+"оттрахаться",
+"оттрахивать",
+"оттрахиваться",
+"отхерачить",
+"отхуесосить",
+"отхуякать",
+"отхуякаться",
+"отхуякивать",
+"отхуякиваться",
+"отхуяривать",
+"отхуяриваться",
+"отхуярить",
+"отхуяриться",
+"отхуячивать",
+"отхуячиваться",
+"отхуячить",
+"отхуячиться",
+"отхуяшивать",
+"отхуяшиваться",
+"отхуяшить",
+"отхуяшиться",
+"отшмаренная",
+"отъеб",
+"отъебать",
+"отъебаться",
+"отъебашивание",
+"отъебашивать",
+"отъебашиваться",
+"отъебашить",
+"отъебенивать",
+"отъебениваться",
+"отъебенить",
+"отъебениться",
+"отъебись",
+"отъебнуть",
+"отъебуривание",
+"отъебуривать",
+"отъебуриваться",
+"отъебурить",
+"отъебуриться",
+"отъебывание",
+"отъебывать",
+"отъебываться",
+"отъебёхаться",
+"отъебёхивание",
+"отъебёхивать",
+"отъёбанный",
+"отыб",
+"отьеб",
+"отьебаться",
+"отьебашиться",
+"отьебенивание",
+"отьебись",
+"отьебнуться",
+"отьебёхать",
+"офигеть",
+"охеракать",
+"охеракивать",
+"охерачивать",
+"охерачить",
+"охерашивать",
+"охерашить",
+"охлуебень",
+"охуебаннейшая",
+"охуев",
+"охуеван",
+"охуевательский",
+"охуевать",
+"охуевающая",
+"охуевающее",
+"охуевающий",
+"охуевшее",
+"охуевший",
+"охуел",
+"охуели",
+"охуен",
+"охуеная",
+"охуение",
+"охуения",
+"охуенн",
+"охуенно",
+"охуенные",
+"охуенный",
+"охуенчик",
+"охуеный",
+"охуеть",
+"охуительно",
+"охуительный",
+"охуякать",
+"охуякаться",
+"охуякивать",
+"охуякиваться",
+"охуякнуть",
+"охуякнуться",
+"охуяривать",
+"охуяриваться",
+"охуярить",
+"охуяриться",
+"охуярок",
+"охуячивать",
+"охуячиваться",
+"охуячить",
+"охуячиться",
+"охуяшивать",
+"охуяшиваться",
+"охуяшить",
+"охуяшиться",
+"оххуетительно",
+"очко",
+"оёбывать",
+"пiзда",
+"пuзде",
+"падла",
+"падловый",
+"падлопроскотское",
+"падлопросраное",
+"падлопрошлюха",
+"падлюка",
+"парикмахер",
+"педераст",
+"педерастина",
+"педерастический",
+"педерастия",
+"педик",
+"педрик",
+"педрило",
+"пежить",
+"пезда",
+"пездеж",
+"пезды",
+"пенис",
+"перданная",
+"перданное",
+"перданный",
+"пердеж",
+"пердел",
+"пердение",
+"пердеть",
+"пердильник",
+"перднуть",
+"пердодроченное",
+"пердомудоватый",
+"пердопрогнойная",
+"пердопромудище",
+"пердун",
+"пердунец",
+"пердунина",
+"пердунья",
+"пердуха",
+"пердь",
+"перебздеть",
+"перевыёбываться",
+"передок",
+"передрачивать",
+"передрочить",
+"передрочиться",
+"перееб",
+"перееба",
+"переебать",
+"переебаться",
+"переебашивать",
+"переебашиваться",
+"переебашить",
+"переебашиться",
+"переебенивать",
+"переебениваться",
+"переебенить",
+"переебениться",
+"переебнуть",
+"переебнуться",
+"переебуривать",
+"переебуриваться",
+"переебурить",
+"переебуриться",
+"переебёхать",
+"переебёхаться",
+"переебёхивать",
+"переебёхиваться",
+"перекосоебленным",
+"перекосоёбить",
+"перекосоёбиться",
+"перемандить",
+"перемандиться",
+"перемандовать",
+"перемандоваться",
+"перемандовывать",
+"перемандовываться",
+"перемандошивать",
+"перемандошиваться",
+"перемандошить",
+"перемандошиться",
+"перемандывать",
+"перемандываться",
+"перемандюкать",
+"перемандюкаться",
+"перемандюкивать",
+"перемандюкиваться",
+"перемандюливать",
+"перемандюливаться",
+"перемандюлить",
+"перемандюлиться",
+"перемандюривать",
+"перемандюриваться",
+"перемандюрить",
+"перемандюриться",
+"перемандякать",
+"перемандякаться",
+"перемандякивать",
+"перемандякиваться",
+"перемандяривать",
+"перемандяриваться",
+"перемандярить",
+"перемандяриться",
+"перемандяхать",
+"перемандяхаться",
+"перемандяхивать",
+"перемандяхиваться",
+"перемандячивать",
+"перемандячиваться",
+"перемандячить",
+"перемандячиться",
+"перемандяшивать",
+"перемандяшиваться",
+"перемандяшить",
+"перемандяшиться",
+"перемондоебленная",
+"перепиздрюченный",
+"перепиздюханный",
+"перетраханной",
+"перетрахать",
+"перетрахаться",
+"перетрахивать",
+"перетрахиваться",
+"перехуйнуть",
+"перехуйнуться",
+"перехуякать",
+"перехуякаться",
+"перехуякивать",
+"перехуякиваться",
+"перехуякнуть",
+"перехуякнуться",
+"перехуяривать",
+"перехуяриваться",
+"перехуярить",
+"перехуяриться",
+"перехуячивать",
+"перехуячиваться",
+"перехуячить",
+"перехуячиться",
+"перехуяшивать",
+"перехуяшиваться",
+"перехуяшить",
+"перехуяшиться",
+"переёб",
+"переёба",
+"переёбанный",
+"переёбать",
+"переёбывать",
+"переёбываться",
+"пернуть",
+"пздец",
+"пздц",
+"пидарас",
+"пидарастической",
+"пидарасы",
+"пидероперданное",
+"пидор",
+"пидорас",
+"пидорестической",
+"пидористический",
+"пидрасня",
+"пидрила",
+"пиже",
+"пижж",
+"пизад",
+"пизввда",
+"пизд",
+"пизда",
+"пиздабол",
+"пиздавлетины",
+"пиздагрыз",
+"пиздадавленный",
+"пиздакнутый",
+"пиздакрыл",
+"пиздалон",
+"пизданутая",
+"пиздануть",
+"пиздануться",
+"пиздапроебина",
+"пиздарванка",
+"пиздасер",
+"пиздатая",
+"пиздато",
+"пиздатое",
+"пиздатый",
+"пиздаш",
+"пиздаёб",
+"пизде",
+"пизделиться",
+"пиздельник",
+"пизделякает",
+"пизделякать",
+"пизденея",
+"пизденка",
+"пизденочка",
+"пизденыш",
+"пиздень",
+"пиздеть",
+"пиздец",
+"пиздецкая",
+"пиздецкий",
+"пиздецкое",
+"пиздий",
+"пиздилища",
+"пиздилищный",
+"пиздиной",
+"пиздину",
+"пиздить",
+"пиздища",
+"пиздоаллюренный",
+"пиздобездонная",
+"пиздобесины",
+"пиздоблошка",
+"пиздоблятское",
+"пиздобол",
+"пиздобрат",
+"пиздобратия",
+"пиздобрюхой",
+"пиздобузина",
+"пиздоварнаковый",
+"пиздоватый",
+"пиздовать",
+"пиздоверзилище",
+"пиздовладелец",
+"пиздоворот",
+"пиздовыдло",
+"пиздовый",
+"пиздоглазая",
+"пиздоглист",
+"пиздогрыз",
+"пиздогундливый",
+"пиздодержец",
+"пиздодраченая",
+"пиздодрачильник",
+"пиздодрачливище",
+"пиздодушие",
+"пиздодырищи",
+"пиздодырная",
+"пиздодырявина",
+"пиздоебательный",
+"пиздоебливая",
+"пиздоеблю",
+"пиздожал",
+"пиздожоп",
+"пиздожопская",
+"пиздозолотарь",
+"пиздой",
+"пиздокач",
+"пиздоквашни",
+"пиздокопатель",
+"пиздокрытый",
+"пиздолет",
+"пиздолетная",
+"пиздолиз",
+"пиздоломина",
+"пиздомаздливый",
+"пиздомания",
+"пиздомахалово",
+"пиздомол",
+"пиздомотина",
+"пиздоногая",
+"пиздоноздря",
+"пиздообрез",
+"пиздопертая",
+"пиздопляска",
+"пиздопроeбище",
+"пиздопроговенная",
+"пиздопроебина",
+"пиздопроебинами",
+"пиздопрозоид",
+"пиздопролазный",
+"пиздопроситель",
+"пиздопроушина",
+"пиздорванец",
+"пиздорванка",
+"пиздорвань",
+"пиздос",
+"пиздосей",
+"пиздосербало",
+"пиздоскал",
+"пиздосов",
+"пиздосос",
+"пиздострадалец",
+"пиздострадания",
+"пиздострадатель",
+"пиздостремливое",
+"пиздотень",
+"пиздотолковища",
+"пиздотрескучий",
+"пиздотыренный",
+"пиздотёрый",
+"пиздохайловый",
+"пиздоход",
+"пиздохочь",
+"пиздохуй",
+"пиздочет",
+"пиздошевка",
+"пиздошить",
+"пиздоямина",
+"пиздоёбищность",
+"пиздрик",
+"пизду",
+"пиздуй",
+"пиздулия",
+"пиздун",
+"пиздуянистый",
+"пизды",
+"пиздырь",
+"пиздьей",
+"пиздью",
+"пиздюга",
+"пиздюк",
+"пиздюкать",
+"пиздюкаться",
+"пиздюлей",
+"пиздюли",
+"пиздюлина",
+"пиздюлька",
+"пиздюля",
+"пиздюрить",
+"пиздюхать",
+"пиздюшка",
+"пиздюшки",
+"пиздюшник",
+"пиздя",
+"пиздякать",
+"пиздятина",
+"пиздятиной",
+"пиздятины",
+"пиздячий",
+"пиздячина",
+"пиздячить",
+"пиздячья",
+"пиздёж",
+"пиздёныш",
+"пизж",
+"пипишка",
+"писос",
+"писька",
+"письку",
+"писюлек",
+"писять",
+"питишка",
+"плеха",
+"плоскозадая",
+"пнх",
+"поблудить",
+"поблядовать",
+"поблядушка",
+"повыёбываться",
+"подговнять",
+"подзаебать",
+"подзаебенить",
+"подзалупная",
+"подмандить",
+"подмандиться",
+"подмандовать",
+"подмандоваться",
+"подмандовывать",
+"подмандовываться",
+"подмандохать",
+"подмандохаться",
+"подмандохивать",
+"подмандохиваться",
+"подмандошивать",
+"подмандошиваться",
+"подмандошить",
+"подмандошиться",
+"подмандывать",
+"подмандываться",
+"подмандюливать",
+"подмандюливаться",
+"подмандюлить",
+"подмандюлиться",
+"подмандюривать",
+"подмандюриваться",
+"подмандюрить",
+"подмандюриться",
+"подмандякать",
+"подмандякаться",
+"подмандякивать",
+"подмандякиваться",
+"подмандяривать",
+"подмандяриваться",
+"подмандярить",
+"подмандяриться",
+"подмандяхать",
+"подмандяхаться",
+"подмандяхивать",
+"подмандяхиваться",
+"подмандячивать",
+"подмандячиваться",
+"подмандячить",
+"подмандячиться",
+"подмандяшивать",
+"подмандяшиваться",
+"подмандяшить",
+"подмандяшиться",
+"поднаебнуть",
+"поднаебнуться",
+"поднаёбывать",
+"подосрать",
+"подосраться",
+"подоссать",
+"подпиздить",
+"подпиздовать",
+"подпиздоваться",
+"подпиздовывать",
+"подпиздовываться",
+"подпиздок",
+"подпиздохать",
+"подпиздохаться",
+"подпиздохивать",
+"подпиздохиваться",
+"подпиздошивать",
+"подпиздошить",
+"подпиздошиться",
+"подпиздывает",
+"подпиздывать",
+"подпиздякать",
+"подпиздякаться",
+"подпиздякивать",
+"подпиздякиваться",
+"подпиздяривать",
+"подпиздяриваться",
+"подпиздярить",
+"подпиздяриться",
+"подпиздяхать",
+"подпиздяхаться",
+"подпиздяхивать",
+"подпиздяхиваться",
+"подпиздячивать",
+"подпиздячиваться",
+"подпиздячить",
+"подпиздячиться",
+"подпиздяшивать",
+"подпиздяшиваться",
+"подпиздяшить",
+"подпиздяшиться",
+"подпёздывать",
+"подристывать",
+"подрочить",
+"подсирать",
+"подстрахуй",
+"подхвостие",
+"подхуякать",
+"подхуякаться",
+"подхуякивать",
+"подхуякиваться",
+"подхуякнуть",
+"подхуякнуться",
+"подхуяривать",
+"подхуяриваться",
+"подхуярить",
+"подхуяриться",
+"подхуячивать",
+"подхуячиваться",
+"подхуячиться",
+"подхуяшивать",
+"подхуяшиваться",
+"подхуяшить",
+"подхуяшиться",
+"подштрихуй",
+"подъеб",
+"подъебайка",
+"подъебал",
+"подъебала",
+"подъебалка",
+"подъебать",
+"подъебаться",
+"подъебашивать",
+"подъебашиваться",
+"подъебашить",
+"подъебашиться",
+"подъебенивать",
+"подъебениваться",
+"подъебенить",
+"подъебениться",
+"подъебериться",
+"подъебка",
+"подъебнуть",
+"подъебнуться",
+"подъебуривать",
+"подъебуриваться",
+"подъебурить",
+"подъебывать",
+"подъебёхать",
+"подъебёхаться",
+"подъебёхивать",
+"подъебёхиваться",
+"подъябывать",
+"подъёбка",
+"подъёбки",
+"подъёбщик",
+"подъёбывать",
+"подьеб",
+"поеб",
+"поебался",
+"поебалу",
+"поебанный",
+"поебать",
+"поебаться",
+"поебен",
+"поебень",
+"поебистика",
+"поебон",
+"поебончик",
+"поебочка",
+"поебывать",
+"поебываться",
+"полторашка",
+"помандить",
+"помандиться",
+"помандовать",
+"помандоваться",
+"помандовывать",
+"помандовываться",
+"помандохать",
+"помандохаться",
+"помандохивать",
+"помандохиваться",
+"помандошивать",
+"помандошить",
+"помандошиться",
+"помандюкать",
+"помандюкаться",
+"помандюкивать",
+"помандюкиваться",
+"помандюливать",
+"помандюливаться",
+"помандюлить",
+"помандюлиться",
+"помандюривать",
+"помандюриваться",
+"помандюрить",
+"помандюриться",
+"помандякать",
+"помандякаться",
+"помандякивать",
+"помандякиваться",
+"помандяхать",
+"помандяхаться",
+"помандяхивать",
+"помандяхиваться",
+"помандячивать",
+"помандячиваться",
+"помандячить",
+"помандячиться",
+"помандяшивать",
+"помандяшиваться",
+"помандяшить",
+"помандяшиться",
+"попердеть",
+"попердеться",
+"попердывать",
+"попиз",
+"попизденная",
+"попиздеть",
+"попиздили",
+"попиздистее",
+"попиздить",
+"попиздиться",
+"попиздоболивать",
+"попиздоболиваться",
+"попиздоболить",
+"попиздоболиться",
+"попиздоватей",
+"попиздовать",
+"попиздоваться",
+"попиздовывать",
+"попиздовываться",
+"попиздохать",
+"попиздохаться",
+"попиздохивать",
+"попиздохиваться",
+"попиздошивать",
+"попиздошиваться",
+"попиздошить",
+"попиздошиться",
+"попиздюкать",
+"попиздюкаться",
+"попиздюкивать",
+"попиздюкиваться",
+"попиздюливать",
+"попиздюливаться",
+"попиздюлить",
+"попиздюлиться",
+"попиздюривать",
+"попиздюриваться",
+"попиздюрить",
+"попиздюриться",
+"попиздюхать",
+"попиздюхаться",
+"попиздюхивать",
+"попиздюхиваться",
+"попиздякать",
+"попиздякаться",
+"попиздякивать",
+"попиздякиваться",
+"попиздяривать",
+"попиздяриваться",
+"попиздярить",
+"попиздяриться",
+"попиздяхать",
+"попиздяхаться",
+"попиздяхивать",
+"попиздяхиваться",
+"попиздячивать",
+"попиздячиваться",
+"попиздячить",
+"попиздячиться",
+"попиздяшивать",
+"попиздяшиваться",
+"попиздяшить",
+"попиздяшиться",
+"попизживать",
+"попизживаться",
+"попысать",
+"посрал",
+"посрать",
+"потаскун",
+"потаскуха",
+"потраханная",
+"потрахать",
+"потрахаться",
+"потрахивать",
+"потрахиваться",
+"пох",
+"похyй",
+"похер",
+"похуист",
+"похуй",
+"похую",
+"похуякать",
+"похуякаться",
+"похуякивать",
+"похуякиваться",
+"похуяривать",
+"похуяриваться",
+"похуярили",
+"похуярить",
+"похуяриться",
+"похуячивать",
+"похуячиваться",
+"похуячить",
+"похуячиться",
+"похуяшивать",
+"похуяшиваться",
+"похуяшить",
+"похуяшиться",
+"поц",
+"поцоватый",
+"пошмариться",
+"поябывать",
+"поёбочка",
+"поёбывать",
+"поёбываться",
+"презерватив",
+"приеб",
+"приебать",
+"приебаться",
+"приебашивать",
+"приебашиваться",
+"приебашить",
+"приебашиться",
+"приебенивать",
+"приебениваться",
+"приебенить",
+"приебениться",
+"приебехать",
+"приебехаться",
+"приебехивать",
+"приебехиваться",
+"приебистый",
+"приебуривать",
+"приебуриваться",
+"приебурить",
+"приебуриться",
+"приебывать",
+"приебываться",
+"приебёхать",
+"приебёхаться",
+"приебёхивать",
+"приебёхиваться",
+"прижопить",
+"прижопывать",
+"прикинуть",
+"примавдовывать",
+"примандехать",
+"примандехаться",
+"примандехивать",
+"примандехиваться",
+"примандить",
+"примандиться",
+"примандовать",
+"примандоваться",
+"примандовываться",
+"примандохать",
+"примандохаться",
+"примандохивать",
+"примандохиваться",
+"примандошивать",
+"примандошиваться",
+"примандошить",
+"примандошиться",
+"примандюкать",
+"примандюкаться",
+"примандюкивать",
+"примандюкиваться",
+"примандюливать",
+"примандюливаться",
+"примандюлить",
+"примандюлиться",
+"примандюривать",
+"примандюриваться",
+"примандюрить",
+"примандюриться",
+"примандякать",
+"примандякаться",
+"примандякивать",
+"примандякиваться",
+"примандяривать",
+"примандяриваться",
+"примандярить",
+"примандяриться",
+"примандяхать",
+"примандяхаться",
+"примандяхивать",
+"примандяхиваться",
+"примандячивать",
+"примандячиваться",
+"примандячить",
+"примандячиться",
+"примандяшивать",
+"примандяшиваться",
+"примандяшить",
+"примандяшиться",
+"примандёхаться",
+"примандёхивать",
+"примандёхиваться",
+"примудохать",
+"примудохаться",
+"примудохивать",
+"примудохиваться",
+"припизденный",
+"припиздень",
+"припиздеть",
+"припиздить",
+"припиздиться",
+"припиздовать",
+"припиздоваться",
+"припиздовывать",
+"припиздовываться",
+"припиздохать",
+"припиздохаться",
+"припиздохивать",
+"припиздохиваться",
+"припиздошивать",
+"припиздошиваться",
+"припиздошить",
+"припиздошиться",
+"припиздронивать",
+"припиздрониваться",
+"припиздронить",
+"припиздрониться",
+"припиздывать",
+"припиздываться",
+"припиздюкать",
+"припиздюкаться",
+"припиздюкивать",
+"припиздюкиваться",
+"припиздюливать",
+"припиздюливаться",
+"припиздюлить",
+"припиздюлиться",
+"припиздюривать",
+"припиздюриваться",
+"припиздюрить",
+"припиздюриться",
+"припиздюхать",
+"припиздюхаться",
+"припиздюхивать",
+"припиздюхиваться",
+"припиздякать",
+"припиздякаться",
+"припиздякивать",
+"припиздякиваться",
+"припиздяривать",
+"припиздяриваться",
+"припиздярить",
+"припиздяриться",
+"припиздяхать",
+"припиздяхаться",
+"припиздяхивать",
+"припиздяхиваться",
+"припиздячивать",
+"припиздячиваться",
+"припиздячить",
+"припиздячиться",
+"припиздяшивать",
+"припиздяшиваться",
+"припиздяшить",
+"припиздяшиться",
+"припизживать",
+"припизживаться",
+"притрахаться",
+"прихуевать",
+"прихуеть",
+"прихуякать",
+"прихуякаться",
+"прихуякивать",
+"прихуякиваться",
+"прихуяривать",
+"прихуяриваться",
+"прихуярить",
+"прихуяриться",
+"прихуячивать",
+"прихуячиваться",
+"прихуячить",
+"прихуячиться",
+"прихуяшивать",
+"прихуяшиваться",
+"прихуяшить",
+"прихуяшиться",
+"приёбенивать",
+"приёбистый",
+"приёбывать",
+"приёбываться",
+"пробиздоблядская",
+"пробиздом",
+"проблядовать",
+"проблядушка",
+"проблядь",
+"прогандонский",
+"прогнидопрохуевающее",
+"прогнидская",
+"продрачивать",
+"продрачиваться",
+"продрочить",
+"продрочиться",
+"проеб",
+"проебал",
+"проебали",
+"проебать",
+"проебаться",
+"проебашивать",
+"проебашиваться",
+"проебашить",
+"проебашиться",
+"проебенить",
+"проебениться",
+"проебом",
+"проебуривать",
+"проебуриваться",
+"проебурить",
+"проебуриться",
+"проебываешь",
+"проебывать",
+"проебываться",
+"проебёхать",
+"проебёхаться",
+"проебёхивать",
+"проебёхиваться",
+"проконаёбиться",
+"прокосоёбиться",
+"промандеть",
+"промандехать",
+"промандить",
+"промандиться",
+"промандище",
+"промандовать",
+"промандоваться",
+"промандовывать",
+"промандовываться",
+"промандоговенная",
+"промандохать",
+"промандохаться",
+"промандохивать",
+"промандохиваться",
+"промандошивать",
+"промандошиваться",
+"промандошить",
+"промандошиться",
+"промандюкать",
+"промандюкаться",
+"промандюкивать",
+"промандюкиваться",
+"промандюливать",
+"промандюливаться",
+"промандюлить",
+"промандюлиться",
+"промандюривать",
+"промандюриваться",
+"промандюрить",
+"промандюриться",
+"промандякать",
+"промандякаться",
+"промандякивать",
+"промандякиваться",
+"промандяривать",
+"промандяриваться",
+"промандярить",
+"промандяриться",
+"промандяхать",
+"промандяхаться",
+"промандяхивать",
+"промандяхиваться",
+"промандячивать",
+"промандячиваться",
+"промандячить",
+"промандячиться",
+"промандяшивать",
+"промандяшиваться",
+"промандяшить",
+"промандяшиться",
+"промандёхаться",
+"промандёхивать",
+"промандёхиваться",
+"промонодблядская",
+"промудак",
+"промудеть",
+"промудище",
+"промудоватая",
+"промудопердун",
+"промудохуеблядская",
+"промудохуина",
+"проперданутое",
+"пропердок",
+"пропердомандища",
+"пропиздеть",
+"пропиздить",
+"пропиздиться",
+"пропиздоболивать",
+"пропиздоболиваться",
+"пропиздоболить",
+"пропиздоболиться",
+"пропиздовать",
+"пропиздоваться",
+"пропиздовывать",
+"пропиздовываться",
+"пропиздон",
+"пропиздохать",
+"пропиздохаться",
+"пропиздохивать",
+"пропиздохиваться",
+"пропиздошивать",
+"пропиздошиваться",
+"пропиздошить",
+"пропиздошиться",
+"пропиздюкать",
+"пропиздюкаться",
+"пропиздюкивать",
+"пропиздюкиваться",
+"пропиздюливать",
+"пропиздюливаться",
+"пропиздюлить",
+"пропиздюлиться",
+"пропиздюривать",
+"пропиздюриваться",
+"пропиздюрить",
+"пропиздюриться",
+"пропиздюхать",
+"пропиздюхаться",
+"пропиздюхивать",
+"пропиздюхиваться",
+"пропиздякать",
+"пропиздякаться",
+"пропиздякивать",
+"пропиздякиваться",
+"пропиздяривать",
+"пропиздяриваться",
+"пропиздярить",
+"пропиздяриться",
+"пропиздяхать",
+"пропиздяхивать",
+"пропиздяхиваться",
+"пропиздячивать",
+"пропиздячиваться",
+"пропиздячить",
+"пропиздячиться",
+"пропиздяшивать",
+"пропиздяшиваться",
+"пропиздяшить",
+"пропиздяшиться",
+"пропизживать",
+"пропизживаться",
+"просволота",
+"просволотопрохуевое",
+"просволотопрошлюхский",
+"просволотохуеватое",
+"просволотская",
+"проскотина",
+"проскотошлюха",
+"просраная",
+"просраноперданутая",
+"просраносука",
+"проссаная",
+"проссаное",
+"проссаномудище",
+"простервоблядовое",
+"простервопрохерун",
+"прохуякать",
+"прохуякаться",
+"прохуякивать",
+"прохуякиваться",
+"прохуяривать",
+"прохуяриваться",
+"прохуярить",
+"прохуяриться",
+"прохуячивать",
+"прохуячиваться",
+"прохуячить",
+"прохуячиться",
+"прохуяшивать",
+"прохуяшиваться",
+"прохуяшить",
+"прохуяшиться",
+"прошмандовочный",
+"проёб",
+"проёбанной",
+"проёбывать",
+"проёбываться",
+"пуська",
+"пысать",
+"пятихуй",
+"пёзды",
+"разблядоваться",
+"развыёбываться",
+"раздрочить",
+"раздрочиться",
+"разеб",
+"раззалупаться",
+"размандить",
+"размандиться",
+"размандовать",
+"размандоваться",
+"размандовывать",
+"размандовываться",
+"размандохать",
+"размандохаться",
+"размандохивать",
+"размандохиваться",
+"размандошивать",
+"размандошиваться",
+"размандошить",
+"размандошиться",
+"размандюкать",
+"размандюкаться",
+"размандюкивать",
+"размандюкиваться",
+"размандюливаться",
+"размандюлить",
+"размандюлиться",
+"размандюривать",
+"размандюриваться",
+"размандюрить",
+"размандюриться",
+"размандякать",
+"размандякаться",
+"размандякивать",
+"размандякиваться",
+"размандяривать",
+"размандяриваться",
+"размандярить",
+"размандяриться",
+"размандяхать",
+"размандяхаться",
+"размандяхивать",
+"размандяхиваться",
+"размандячивать",
+"размандячиваться",
+"размандячить",
+"размандячиться",
+"размандяшивать",
+"размандяшиваться",
+"размандяшить",
+"размандяшиться",
+"разнохуйственно",
+"разъеб",
+"разъеба",
+"разъебай",
+"разъебал",
+"разъебать",
+"разъебаться",
+"разъебашивать",
+"разъебашиваться",
+"разъебашить",
+"разъебашиться",
+"разъебенивать",
+"разъебениваться",
+"разъебенить",
+"разъебениться",
+"разъебену",
+"разъебись",
+"разъебуривать",
+"разъебуриваться",
+"разъебурить",
+"разъебуриться",
+"разъебёхать",
+"разъебёхаться",
+"разъебёхивать",
+"разъебёхиваться",
+"разъёба",
+"разъёбанное",
+"разъёбанный",
+"разъёбывать",
+"разъёбываться",
+"разьеб",
+"разёбанный",
+"раком",
+"расконаёбиться",
+"раскосоёбиться",
+"распидорасило",
+"распиж",
+"распиз",
+"распиздаеб",
+"распиздай",
+"распиздаёб",
+"распиздеться",
+"распизди",
+"распиздить",
+"распиздиться",
+"распиздоблятство",
+"распиздовать",
+"распиздоваться",
+"распиздовывать",
+"распиздовываться",
+"распиздон",
+"распиздохать",
+"распиздохаться",
+"распиздохивать",
+"распиздохиваться",
+"распиздошивать",
+"распиздошиваться",
+"распиздошил",
+"распиздошила",
+"распиздошить",
+"распиздошиться",
+"распиздюляченный",
+"распиздяй",
+"распиздяйка",
+"распиздяйство",
+"распроеб",
+"распроебена",
+"распроеби",
+"распроеть",
+"распронаебит",
+"распроёб",
+"растыка",
+"расхуюжить",
+"расхуякать",
+"расхуякаться",
+"расхуякивать",
+"расхуякиваться",
+"расхуяривать",
+"расхуяриваться",
+"расхуярить",
+"расхуяриться",
+"расхуячивать",
+"расхуячиваться",
+"расхуячить",
+"расхуячиться",
+"расхуяшивать",
+"расхуяшиваться",
+"расхуяшить",
+"расхуяшиться",
+"репиж",
+"репиз",
+"свиноёб",
+"свиноёбиться",
+"сволота",
+"сволотопродерьмо",
+"сволотосука",
+"сговнять",
+"сдрочить",
+"секель",
+"секс",
+"семиблядским",
+"серун",
+"серька",
+"сестроеб",
+"сетсроёб",
+"сика",
+"сикать",
+"сикель",
+"сирано",
+"сирать",
+"сиськи",
+"сифилитик",
+"сифилюга",
+"склипездень",
+"скосоёбанная",
+"скосоёбить",
+"скосоёбиться",
+"скосоёбывать",
+"скосоёбываться",
+"скотина",
+"скотложец",
+"скотопродерьмища",
+"скотоёб",
+"скотоёбина",
+"скотское",
+"скурвиться",
+"скуреха",
+"скурея",
+"скуряга",
+"скуряжничать",
+"смандить",
+"смандиться",
+"смандовать",
+"смандоваться",
+"смандовывать",
+"смандовываться",
+"смандохать",
+"смандохаться",
+"смандохивать",
+"смандохиваться",
+"смандошивать",
+"смандошиваться",
+"смандошить",
+"смандошиться",
+"смандюкать",
+"смандюкаться",
+"смандюкивать",
+"смандюкиваться",
+"смандюливать",
+"смандюливаться",
+"смандюлить",
+"смандюлиться",
+"смандюривать",
+"смандюриваться",
+"смандюрить",
+"смандюриться",
+"смандякать",
+"смандякаться",
+"смандякивать",
+"смандякиваться",
+"смандяривать",
+"смандяриваться",
+"смандярить",
+"смандяриться",
+"смандячивать",
+"смандячиваться",
+"смандячить",
+"смандячиться",
+"смандяшивать",
+"смандяшиваться",
+"смандяшить",
+"смандяшиться",
+"смандёхать",
+"смандёхаться",
+"смандёхивать",
+"смандёхиваться",
+"сношаться",
+"сосал",
+"сосать",
+"сосихуйская",
+"сосихуйский",
+"соска",
+"сосунок",
+"сосущее",
+"сперматоблятская",
+"сперматозавр",
+"спермоблевотина",
+"спидарасили",
+"спиздеть",
+"спиздил",
+"спиздила",
+"спиздили",
+"спиздить",
+"спизжена",
+"сприёбом",
+"срака",
+"сраногнойная",
+"сраный",
+"сраным",
+"сранье",
+"срать",
+"срун",
+"ссака",
+"ссаки",
+"ссаное",
+"ссанопиздище",
+"ссать",
+"старпер",
+"стерва",
+"стервоза",
+"стервопиздище",
+"стервопроблядское",
+"стоебучее",
+"страпиздихуюлина",
+"страхопиздище",
+"страхопизднутый",
+"страхоёбище",
+"страхуй",
+"стрип",
+"стриптиз",
+"струк",
+"сука",
+"суки",
+"сукин",
+"сукины",
+"суку",
+"суходрочка",
+"суходрочкой",
+"сухопиздая",
+"сучара",
+"сучий",
+"сучка",
+"сучье",
+"сучьемудища",
+"сучьескотина",
+"схуевудушу",
+"схуевутучу",
+"схуябыта",
+"схуякать",
+"схуякаться",
+"схуякивать",
+"схуякиваться",
+"схуяли",
+"схуяривать",
+"схуяриваться",
+"схуярить",
+"схуяриться",
+"схуячивать",
+"схуячиваться",
+"схуячить",
+"схуячиться",
+"схуяшивать",
+"схуяшиваться",
+"схуяшить",
+"схуяшиться",
+"схуёженный",
+"сцавинье",
+"сцака",
+"сцаки",
+"сцание",
+"сцать",
+"сциха",
+"сцуль",
+"сцыха",
+"съеб",
+"съебал",
+"съебать",
+"съебаться",
+"съебашивать",
+"съебашиваться",
+"съебашить",
+"съебашиться",
+"съебенивать",
+"съебениваться",
+"съебенить",
+"съебениться",
+"съебуривать",
+"съебуриваться",
+"съебурить",
+"съебуриться",
+"съебывать",
+"съебываться",
+"съебёт",
+"съебёхать",
+"съебёхаться",
+"съебёхивать",
+"съебёхиваться",
+"съёбывать",
+"съёбываться",
+"сыкун",
+"сьебал",
+"сьебись",
+"сюка",
+"тварь",
+"титечка",
+"титечный",
+"титка",
+"титочка",
+"титька",
+"толстожопый",
+"толстозадая",
+"торчило",
+"траxать",
+"транс",
+"трансгендер",
+"траханье",
+"трахать",
+"трахаться",
+"трахнуть",
+"трахнуться",
+"трепак",
+"трепездон",
+"трепездонит",
+"тригнидопроговно",
+"тригнидопрохерище",
+"тригнидская",
+"триговногнойная",
+"триговноперданутое",
+"триеблоостомондовевшая",
+"триебучим",
+"тризлоебучим",
+"тримандаблядская",
+"тримандоблядская",
+"тримандопростервозный",
+"тримондоеби",
+"тримудище",
+"трипездоклятый",
+"трипер",
+"триперданутая",
+"трипердоватая",
+"трипиздие",
+"трипиздоблядская",
+"трипиздоблядское",
+"трипиздоблятский",
+"трипиздодрочун",
+"трипиздопроманда",
+"трипиздопроскотложец",
+"трипиздохерище",
+"трипиздыпроебина",
+"триппер",
+"трипперных",
+"трисраное",
+"триссака",
+"триссанохуина",
+"триссаный",
+"трисука",
+"трисучьепадловая",
+"трихломидозопиздоеблохуеблядеперепиздическая",
+"трихуемандаблядский",
+"троебучим",
+"троепиздием",
+"троепиздище",
+"туебень",
+"тупиздень",
+"тыбля",
+"убить",
+"ублюдок",
+"ублюдоёб",
+"уеб",
+"уеба",
+"уебал",
+"уебалась",
+"уебался",
+"уебальник",
+"уебан",
+"уебанск",
+"уебанский",
+"уебать",
+"уебаться",
+"уебашивать",
+"уебашиваться",
+"уебашить",
+"уебашиться",
+"уебенивать",
+"уебениваться",
+"уебенить",
+"уебениться",
+"уебище",
+"уебищен",
+"уебищная",
+"уебищный",
+"уебк",
+"уебка",
+"уебков",
+"уебленный",
+"уебок",
+"уебуривать",
+"уебуриваться",
+"уебурить",
+"уебуриться",
+"уебывай",
+"уебывать",
+"уебываться",
+"уебыш",
+"уебёхать",
+"уебёхаться",
+"уебёхивать",
+"уебёхиваться",
+"уеть",
+"умандовать",
+"умандоваться",
+"умандовывать",
+"умандовываться",
+"умандохать",
+"умандохаться",
+"умандохивать",
+"умандохиваться",
+"умандошивать",
+"умандошиваться",
+"умандошить",
+"умандошиться",
+"умандюкать",
+"умандюкаться",
+"умандюкивать",
+"умандюкиваться",
+"умандюливать",
+"умандюливаться",
+"умандюлить",
+"умандюлиться",
+"умандюривать",
+"умандюриваться",
+"умандюрить",
+"умандюриться",
+"умандякать",
+"умандякаться",
+"умандякивать",
+"умандякиваться",
+"умандяривать",
+"умандяриваться",
+"умандярить",
+"умандяриться",
+"умандячивать",
+"умандячиваться",
+"умандячить",
+"умандячиться",
+"умандяшивать",
+"умандяшиваться",
+"умандяшить",
+"умандяшиться",
+"умандёхать",
+"умандёхаться",
+"умандёхивать",
+"умандёхиваться",
+"умрисука",
+"упиж",
+"упиз",
+"упиздить",
+"урод",
+"усраться",
+"усрачка",
+"уссать",
+"уссаться",
+"усцаться",
+"ухуякать",
+"ухуякаться",
+"ухуякивать",
+"ухуякиваться",
+"ухуяривать",
+"ухуяриваться",
+"ухуярить",
+"ухуяриться",
+"ухуячивать",
+"ухуячиваться",
+"ухуячить",
+"ухуячиться",
+"ухуяшивать",
+"ухуяшиваться",
+"ухуяшить",
+"ухуяшиться",
+"уёбак",
+"уёбище",
+"уёбищенски",
+"уёбищная",
+"уёбищной",
+"уёбка",
+"уёбки",
+"уёбков",
+"уёбок",
+"уёбывает",
+"уёбывай",
+"уёбывать",
+"уёбываться",
+"уёбыш",
+"фаллос",
+"фекал",
+"фекалии",
+"фекалий",
+"фембой",
+"фига",
+"фик",
+"фуй",
+"хyи",
+"хапать",
+"хезать",
+"хер",
+"херами",
+"херня",
+"херов",
+"херовина",
+"херовый",
+"хероговнюк",
+"херопроскотское",
+"херун",
+"хитровыебанн",
+"хитровыебанная",
+"хитровыебанный",
+"хитрожопый",
+"хлюха",
+"хня",
+"хохол",
+"хрен",
+"хреново",
+"хреновое",
+"хреновый",
+"худоебина",
+"худоёбина",
+"хуе",
+"хуебарный",
+"хуебень",
+"хуеблища",
+"хуеблядипиздожабья",
+"хуеблядская",
+"хуеблядский",
+"хуебратия",
+"хуебун",
+"хуебур",
+"хуебыдловый",
+"хуев",
+"хуева",
+"хуеватенький",
+"хуевато",
+"хуеватый",
+"хуевая",
+"хуеверзоха",
+"хуевина",
+"хуево",
+"хуевого",
+"хуеворот",
+"хуевотараканево",
+"хуеву",
+"хуевый",
+"хуег",
+"хуеглот",
+"хуеговно",
+"хуеголовое",
+"хуеголовый",
+"хуегрыз",
+"хуедав",
+"хуедин",
+"хуедрыга",
+"хуее",
+"хуезагнутие",
+"хуездоватый",
+"хуек",
+"хуекшен",
+"хуел",
+"хуелептический",
+"хуелес",
+"хуеловица",
+"хуелюбивая",
+"хуем",
+"хуеман",
+"хуемандовина",
+"хуемудрие",
+"хуемырло",
+"хуемыслие",
+"хуен",
+"хуенно",
+"хуеньки",
+"хуеоглобель",
+"хуеп",
+"хуепедераст",
+"хуепиздрическое",
+"хуеплет",
+"хуеплёт",
+"хуепромышленник",
+"хуепропадла",
+"хуепуполо",
+"хуепутало",
+"хуерик",
+"хуероломом",
+"хуерык",
+"хуерыльная",
+"хуес",
+"хуесос",
+"хуесосина",
+"хуесосы",
+"хуессаная",
+"хуесучий",
+"хует",
+"хуета",
+"хуетень",
+"хуетертое",
+"хуету",
+"хуеть",
+"хуец",
+"хуечек",
+"хуею",
+"хуи",
+"хуидло",
+"хуила",
+"хуилище",
+"хуило",
+"хуиный",
+"хуиня",
+"хуистая",
+"хуистый",
+"хуишко",
+"хуище",
+"хуй",
+"хуйло",
+"хуйнуть",
+"хуйню",
+"хуйня",
+"хуйрик",
+"хуйство",
+"хуле",
+"хули",
+"хуль",
+"хуля",
+"хую",
+"хуюга",
+"хуюж",
+"хуюживать",
+"хуюживаться",
+"хуюжить",
+"хуюжиться",
+"хуюла",
+"хуюльское",
+"хуютик",
+"хуюш",
+"хуюшки",
+"хуя",
+"хуяк",
+"хуяка",
+"хуякать",
+"хуякаться",
+"хуякивать",
+"хуякиваться",
+"хуякнугь",
+"хуякнуть",
+"хуякнуться",
+"хуякс",
+"хуяли",
+"хуяляга",
+"хуям",
+"хуями",
+"хуярез",
+"хуяривать",
+"хуяриваться",
+"хуярить",
+"хуяриться",
+"хуясе",
+"хуяслице",
+"хуястый",
+"хуятизация",
+"хуях",
+"хуяха",
+"хуяция",
+"хуячивать",
+"хуячиваться",
+"хуячий",
+"хуячить",
+"хуячиться",
+"хуячья",
+"хуяшивать",
+"хуяшиваться",
+"хуяшить",
+"хуяшиться",
+"хуё",
+"хуёв",
+"хуёвина",
+"хуёвинка",
+"хуёвищный",
+"хуёвничать",
+"хуёво",
+"хуёвый",
+"хуёвым",
+"хуёза",
+"хуём",
+"хуёмник",
+"хуёчек",
+"целка",
+"целку",
+"целочка",
+"черножопые",
+"чернозадый",
+"член",
+"шалава",
+"шароёбится",
+"шебла-ебла",
+"шелудивая",
+"шелупина",
+"широкопиздая",
+"шлюха",
+"шлюхский",
+"шлюхское",
+"шмара",
+"шмарить",
+"шмариться",
+"штрихуй",
+"ъебал",
+"ъебат",
+"ъеби",
+"ъебись",
+"яеб",
+"ялдак",
+"ёб",
+"ёбака",
+"ёбаная",
+"ёбаное",
+"ёбаный",
+"ёбарь",
+"ёбкость",
+"ёбля",
+"ёбнул",
+"ёбнутый",
+"ёбнуть",
+"ёбнуться",
+"ёбс",
+"ёпта"
+]
\ No newline at end of file
diff --git a/js/languages/lang/sp.json b/js/languages/lang/sp.json
new file mode 100644
index 0000000..7065bf0
--- /dev/null
+++ b/js/languages/lang/sp.json
@@ -0,0 +1,397 @@
+[
+"hij[ao]deputillas?",
+"hij[ao]d?eputas?",
+"hij[ao]deperras?",
+"mecagoendíos",
+"vetealamierda",
+"mecagoenlavirgensanta",
+"pendej(a|ada|as|o|os)",
+"tont[ao]delculo",
+"mecagoenlaputadeoros",
+"mecagoenlaputavirgen",
+"alas?mierdas?",
+"chingatumadre",
+"cagoendíos",
+"calientapollas",
+"quetefollen",
+"tuputamadre",
+"darporculo",
+"hij[ao]putillas?",
+"melapelan?",
+"quetejodan",
+"comemierdas?",
+"encabronamiento",
+"gordocabrón",
+"tragasalchichas",
+"zampasalchichas",
+"cabezapolla",
+"comesalchichas",
+"mecagoen",
+"melasuda",
+"mecagoenlaputa",
+"pu+tit(a+|o)s?",
+"queteden",
+"agilipolladas",
+"agilipollados",
+"agilipollando",
+"agilipollante",
+"agilipolláis",
+"hij[ao]putas?",
+"jodemadres",
+"tont[ao]lculo",
+"tusmuertos",
+"zampatronchos",
+"agilipollada",
+"agilipollado",
+"amariconados",
+"chulomierdas",
+"comefelpudos",
+"encabronadas",
+"encabronados",
+"encabronando",
+"encabronáis",
+"jilipolleces",
+"jodeputas",
+"jodiaporculo",
+"jodioporculo",
+"mecagoendios",
+"pu+t(a+|o)s?",
+"putamadre",
+"agilipollad",
+"agilipollar",
+"agilipollas",
+"amariconado",
+"cagaríamos",
+"caramierdas",
+"chulomierda",
+"chupahuevos",
+"ciberfollar",
+"comechochos",
+"cyberfollar",
+"encabronada",
+"encabronado",
+"encabronais",
+"follamadres",
+"follábamos",
+"gilipuertas",
+"jilipuertas",
+"jodiéramos",
+"lamechochos",
+"malfolladas",
+"malfollados",
+"mecagondios",
+"mecagontodo",
+"mierdecilla",
+"soplapollas",
+"tocacojones",
+"tragapollas",
+"tragasables",
+"zampapollas",
+"zampasables",
+"acojonadas",
+"acojonando",
+"acojonante",
+"agilipolla",
+"agilipollo",
+"cabr[óo]n",
+"cabronacas",
+"cabronacos",
+"cabronazas",
+"cabronazos",
+"cagallones",
+"cagamierda",
+"cagaríais",
+"cagábamos",
+"cagáramos",
+"cagásemos",
+"caramierda",
+"carapollas",
+"chuloputas",
+"chupaculos",
+"comechocho",
+"comecoños",
+"comepollas",
+"comerrabos",
+"comesables",
+"encabronad",
+"encabronar",
+"encabronas",
+"follaculos",
+"folladoras",
+"folladores",
+"follatetas",
+"gilipichas",
+"gilipichis",
+"gilipol\\w+",
+"ijosdeputa",
+"imbéciles",
+"jilipichas",
+"jilipichis",
+"jilipollas",
+"jilipollez",
+"joderiamos",
+"lamecoños",
+"lamehuevos",
+"lamepollas",
+"lamerrabos",
+"malafollá",
+"malfollada",
+"malfollado",
+"pollalarga",
+"puteadoras",
+"puteadores",
+"puticlubes",
+"tragaleche",
+"acojonada",
+"cabronaca",
+"cabronaco",
+"cabronaza",
+"cabronazo",
+"cagallón",
+"cagaremos",
+"cagaréis",
+"cagarían",
+"cagarías",
+"cagasteis",
+"cagondios",
+"caraculos",
+"carapolla",
+"chuloputa",
+"comecoño",
+"comenabos",
+"comepolla",
+"comepoyas",
+"encabrona",
+"encabrono",
+"felación",
+"follabais",
+"folladora",
+"follarín",
+"gilipoyas",
+"hideputas",
+"ijodeputa",
+"jilipolla",
+"jilipoyas",
+"joderemos",
+"joderiais",
+"jodiendas",
+"jodierais",
+"jodisteis",
+"lameculos",
+"malafolla",
+"mecagonto",
+"pelotudas",
+"pelotudos",
+"puteadora",
+"puticlubs",
+"tragalefa",
+"zampalefa",
+"acojonar",
+"cabritos",
+"cabronas",
+"cabrones",
+"cagabais",
+"cagadón",
+"cagarais",
+"cagareis",
+"cagarán",
+"cagarás",
+"cagaría",
+"cagaseis",
+"cagastes",
+"caguemos",
+"caraculo",
+"comelefa",
+"follaban",
+"follabas",
+"folladas",
+"follador",
+"follados",
+"follad",
+"follando",
+"follen",
+"folleteo",
+"folláis",
+"fóllame",
+"giñadas",
+"giñados",
+"giñando",
+"giñotes",
+"giñáis",
+"hideputa",
+"imbécil",
+"jodedora",
+"jodereis",
+"joderian",
+"joderias",
+"jodiamos",
+"jodienda",
+"jodiendo",
+"jodieran",
+"jodieras",
+"jodieron",
+"malaputa",
+"pelotuda",
+"pelotudo",
+"polladas",
+"pollitas",
+"pollones",
+"puteador",
+"puticlub",
+"putillas",
+"putorras",
+"acojone",
+"boludas",
+"boludos",
+"cabrito",
+"cabrona",
+"cagaban",
+"cagabas",
+"cagadas",
+"cagados",
+"cagamos",
+"cagando",
+"cagaran",
+"cagaras",
+"cagaren",
+"cagares",
+"cagaron",
+"cagará",
+"cagaré",
+"cagasen",
+"cagases",
+"cagaste",
+"cagáis",
+"carajos",
+"carallo",
+"cojones",
+"coñazo",
+"follaba",
+"follada",
+"follado",
+"follais",
+"folla",
+"folle",
+"giñada",
+"giñado",
+"giñais",
+"giñote",
+"hostias",
+"imbecil",
+"jodamos",
+"jodedor",
+"jodemos",
+"joderan",
+"joderas",
+"joderia",
+"jodeís",
+"jodiais",
+"jodidas",
+"jodidos",
+"jodiera",
+"jodimos",
+"jodiste",
+"jodáis",
+"jodéis",
+"jódete",
+"mierdas",
+"pollada",
+"pollazo",
+"pollita",
+"pollón",
+"putadas",
+"putazas",
+"putazos",
+"puteada",
+"puteado",
+"putilla",
+"putonas",
+"putones",
+"putorra",
+"boluda",
+"boludo",
+"cagaba",
+"cagada",
+"cagado",
+"cagaos",
+"cagara",
+"cagare",
+"cagase",
+"caguen",
+"cagás",
+"cagón",
+"carajo",
+"cojón",
+"follad",
+"follar",
+"follas",
+"foyada",
+"giñad",
+"giñar",
+"giñas",
+"hostia",
+"jodeis",
+"jodera",
+"jodere",
+"jodian",
+"jodias",
+"jodida",
+"jodido",
+"jodona",
+"jodío",
+"jodón",
+"meadas",
+"meados",
+"meando",
+"meáis",
+"mierda",
+"ostias",
+"pollas",
+"putada",
+"putaza",
+"putazo",
+"putear",
+"putona",
+"putón",
+"cagad",
+"cagan",
+"cagao",
+"cagar",
+"cagas",
+"cagó",
+"cojon",
+"folla",
+"follo",
+"giña",
+"giño",
+"jodad",
+"jodan",
+"jodas",
+"joded",
+"joden",
+"joder",
+"jodes",
+"jodia",
+"jodí",
+"lmfao",
+"meada",
+"meado",
+"meais",
+"ostia",
+"polla",
+"poyas",
+"xculo",
+"caga",
+"cago",
+"joda",
+"jode",
+"jodo",
+"joer",
+"mead",
+"mear",
+"meas",
+"poya",
+"puti",
+"mea",
+"meo"
+]
\ No newline at end of file
diff --git a/js/languages/lang/sw.json b/js/languages/lang/sw.json
new file mode 100644
index 0000000..ab0a727
--- /dev/null
+++ b/js/languages/lang/sw.json
@@ -0,0 +1,18 @@
+[
+"skitdålig",
+"arselhål",
+"hästskit",
+"skitsnack",
+"hundskit",
+"rövgott",
+"fisande",
+"arslen",
+"satans",
+"arsle",
+"fisar",
+"satan",
+"bajs",
+"röv",
+"skit",
+"fis"
+]
\ No newline at end of file
diff --git a/js/languages/lang/th.json b/js/languages/lang/th.json
new file mode 100644
index 0000000..df30ea2
--- /dev/null
+++ b/js/languages/lang/th.json
@@ -0,0 +1,15 @@
+[
+"ห่าลาก",
+"จัญไร",
+"จันไร",
+"บัดซบ",
+"สัตว์",
+"เหียก",
+"เหี้ย",
+"พ่อง",
+"ระยำ",
+"แม่ง",
+"มึง",
+"สัส",
+"ห่า"
+]
\ No newline at end of file
diff --git a/js/languages/lang/tu.json b/js/languages/lang/tu.json
new file mode 100644
index 0000000..0853d80
--- /dev/null
+++ b/js/languages/lang/tu.json
@@ -0,0 +1,782 @@
+[
+"yarrakkafalısınız",
+"yarakkafalısınız",
+"yarrakkafalılardan",
+"yarrakkafalıların",
+"yarakkafalılardan",
+"yarakkafalıların",
+"yarrakkafalilardan",
+"yarrakkafalılarda",
+"yarrakkafalılarla",
+"yarrakkafalıları",
+"yarakkafalilardan",
+"yarakkafalılarda",
+"yarakkafalılarla",
+"yarakkafalıları",
+"yarrakkafalilarda",
+"yarrakkafalilarin",
+"yarrakkafalilarla",
+"yarrakkafalisiniz",
+"yarrakkafalıdır",
+"yarrakkafalılara",
+"yarrakkafalının",
+"yarrakkafalısın",
+"yarrakkafalıyım",
+"yarrakkafasından",
+"yarrakkafasının",
+"dalyaraklığın",
+"sıçmalarından",
+"sıçmalarının",
+"yarakkafalilarda",
+"yarakkafalilarin",
+"yarakkafalilarla",
+"yarakkafalisiniz",
+"yarakkafalıdır",
+"yarakkafalılara",
+"yarakkafalının",
+"yarakkafalısın",
+"yarakkafalıyım",
+"yarakkafasından",
+"yarakkafasının",
+"yarrakkafalardan",
+"yarrakkafaların",
+"yarrakkafalilara",
+"yarrakkafalilari",
+"yarrakkafalıdan",
+"yarrakkafalılar",
+"yarrakkafalıyla",
+"yarrakkafalıyı",
+"yarrakkafasindan",
+"yarrakkafasında",
+"yarrakkafasını",
+"amsalaklığın",
+"dalyaraklıktan",
+"dalyaraklığı",
+"dalyaraksınız",
+"hassiktirsinler",
+"sıçmalarında",
+"yarakkafalardan",
+"yarakkafaların",
+"yarakkafalilara",
+"yarakkafalilari",
+"yarakkafalıdan",
+"yarakkafalılar",
+"yarakkafalıyla",
+"yarakkafalıyı",
+"yarakkafasindan",
+"yarakkafasını",
+"yarrakkafalarda",
+"yarrakkafalarin",
+"yarrakkafalarla",
+"yarrakkafaları",
+"yarrakkafalidan",
+"yarrakkafalidir",
+"yarrakkafalilar",
+"yarrakkafalinin",
+"yarrakkafalisin",
+"yarrakkafaliyim",
+"yarrakkafaliyla",
+"yarrakkafalıda",
+"yarrakkafalıya",
+"yarrakkafasinda",
+"yarrakkafasinin",
+"yarrakkafasına",
+"amsalaklıktan",
+"amsalaklığı",
+"amsalaksınız",
+"bokyiyenlerden",
+"bokyiyenlikten",
+"bokyiyenliğin",
+"dalyaraklardan",
+"dalyarakların",
+"dalyarakliktan",
+"dalyaraklıkla",
+"dalyaraklıkta",
+"dalyaraklığa",
+"götlerimizden",
+"götlerinizden",
+"pezevenklerden",
+"pezevenklikten",
+"pezevenkliğin",
+"sıçarsınız",
+"sıçmasının",
+"yarakkafalarda",
+"yarakkafalarin",
+"yarakkafalarla",
+"yarakkafaları",
+"yarakkafalidan",
+"yarakkafalidir",
+"yarakkafalilar",
+"yarakkafalinin",
+"yarakkafalisin",
+"yarakkafaliyim",
+"yarakkafaliyla",
+"yarakkafalıda",
+"yarakkafalıya",
+"yarakkafasinda",
+"yarakkafasinin",
+"yarakkafasına",
+"yarrakkafalara",
+"yarrakkafalari",
+"yarrakkafalida",
+"yarrakkafaliya",
+"yarrakkafaliyi",
+"yarrakkafasina",
+"yarrakkafasini",
+"amsalaklardan",
+"amsalakların",
+"amsalakliktan",
+"amsalaklıkla",
+"amsalaklıkta",
+"amsalaklığa",
+"bokyiyenlerin",
+"bokyiyenlerle",
+"bokyiyenligin",
+"bokyiyenlikte",
+"bokyiyenliğe",
+"bokyiyenliği",
+"bokyiyenseniz",
+"bokyiyensiniz",
+"dalyaraklarda",
+"dalyaraklarin",
+"dalyaraklarla",
+"dalyarakları",
+"dalyarakligin",
+"dalyaraklikla",
+"dalyaraklikta",
+"dalyaraksiniz",
+"gavatlarını",
+"gavatlığın",
+"gotlerimizden",
+"gotlerinizden",
+"götleklerden",
+"götleklikten",
+"götlerimizde",
+"götlerimizin",
+"götlerinizde",
+"götlerinizin",
+"götoşlardan",
+"götoşların",
+"götoşluktan",
+"götoşluğun",
+"götümüzden",
+"götümüzün",
+"götünüzden",
+"götünüzün",
+"kavatlığın",
+"pezevenklerde",
+"pezevenklerin",
+"pezevenklerle",
+"pezevenkligin",
+"pezevenklikle",
+"pezevenklikte",
+"pezevenkliğe",
+"pezevenkliği",
+"pezevenksiniz",
+"sicmalarindan",
+"sıçmalardan",
+"yarakkafalara",
+"yarakkafalari",
+"yarakkafalida",
+"yarakkafaliya",
+"yarakkafaliyi",
+"yarakkafasina",
+"yarakkafasini",
+"yarrakkafalar",
+"yarrakkafalı",
+"yarrakkafası",
+"yarrakkafayla",
+"yarraksınız",
+"amsalaklarda",
+"amsalaklarin",
+"amsalaklarla",
+"amsalakları",
+"amsalakligin",
+"amsalaklikla",
+"amsalaklikta",
+"amsalaksiniz",
+"boklarından",
+"boklarının",
+"bokyiyenlere",
+"bokyiyenleri",
+"bokyiyenlige",
+"bokyiyenligi",
+"dalyaraklara",
+"dalyaraklari",
+"dalyarakliga",
+"dalyarakligi",
+"dalyaraklık",
+"dalyaraksın",
+"dalyaraktır",
+"dalyarağım",
+"dalyarağın",
+"dalyarağız",
+"gavatlıktan",
+"gavatlığı",
+"gavatsınız",
+"gotleklerden",
+"gotleklikten",
+"gotlerimizde",
+"gotlerimizin",
+"gotlerinizde",
+"gotlerinizin",
+"götleklerde",
+"götleklerin",
+"götleklerle",
+"götleklikle",
+"götleklikte",
+"götlekliğe",
+"götlekliği",
+"götleksiniz",
+"götlerimize",
+"götlerimizi",
+"götlerinden",
+"götlerinize",
+"götlerinizi",
+"götlüğün",
+"götoşlarda",
+"götoşlarla",
+"götoşları",
+"götoşlukla",
+"götoşlukta",
+"götoşluğa",
+"götoşluğu",
+"götümüzde",
+"götünüzde",
+"götünüzü",
+"hassiktirsin",
+"hastirsinler",
+"kavatlıktan",
+"kavatlığı",
+"kavatsınız",
+"pezevengimiz",
+"pezevenginiz",
+"pezevenklere",
+"pezevenkleri",
+"pezevenklige",
+"pezevenkligi",
+"piçleğimiz",
+"piçliğiniz",
+"sicmalarinda",
+"sicmalarinin",
+"sıçmalarda",
+"sıçmaları",
+"sıçtınız",
+"yarakkafalar",
+"yarakkafalı",
+"yarakkafası",
+"yarakkafayla",
+"yarrakkafali",
+"yarrakkafasi",
+"amciklardan",
+"amciklarina",
+"amcikliktan",
+"amsalaklara",
+"amsalaklari",
+"amsalakliga",
+"amsalakligi",
+"amsalaklık",
+"amsalaksın",
+"amsalaktır",
+"amsalağım",
+"amsalağın",
+"amsalağız",
+"boklarindan",
+"boklarını",
+"boklulardan",
+"bokluların",
+"bokyiyenden",
+"bokyiyenler",
+"bokyiyenlik",
+"bokyiyensen",
+"bokyiyensin",
+"dalyaraklar",
+"dalyaraklik",
+"dalyaraksin",
+"dalyaraktan",
+"dalyaraktir",
+"dalyarağı",
+"gavatlardan",
+"gavatlarini",
+"gavatların",
+"gavatliktan",
+"gavatlıkta",
+"gavatlığa",
+"gotleklerde",
+"gotleklerin",
+"gotleklerle",
+"gotleklikle",
+"gotleklikte",
+"gotleksiniz",
+"gotlerimize",
+"gotlerimizi",
+"gotlerinden",
+"gotlerinize",
+"gotlerinizi",
+"gotoslardan",
+"gotosluktan",
+"götleklere",
+"götlekleri",
+"götlerimiz",
+"götlerinde",
+"götlerinin",
+"götleriniz",
+"götlükten",
+"götlüğü",
+"götoşlara",
+"götümüze",
+"götünüze",
+"hassittirin",
+"kavatlardan",
+"kavatların",
+"kavatliktan",
+"kavatlıkla",
+"kavatlıkta",
+"kavatlığa",
+"pezevenkler",
+"pezevenklik",
+"pezevenksin",
+"pezevenkten",
+"pezevenktir",
+"puştlardan",
+"puştların",
+"puştluktan",
+"puştluğun",
+"sicmalardan",
+"sıçmalara",
+"sıçmanın",
+"sıçtılar",
+"sıçılır",
+"sıçışı",
+"taşşaklı",
+"yarakkafali",
+"yarakkafasi",
+"yarraksiniz",
+"amciklarda",
+"amciklarin",
+"amciklarla",
+"amcikligin",
+"amciklikla",
+"amciklikta",
+"amciksiniz",
+"amsalaklar",
+"amsalaklik",
+"amsalaksin",
+"amsalaktan",
+"amsalaktir",
+"amsalağı",
+"bisiktirol",
+"boklarinin",
+"boklarına",
+"boklularda",
+"boklularin",
+"boklularla",
+"bokluları",
+"boklusunuz",
+"bokyiyende",
+"bokyiyenin",
+"bokyiyenle",
+"dalyaragim",
+"dalyaragin",
+"dalyaragiz",
+"dalyarakla",
+"dalyarakta",
+"dalyarağa",
+"gavatlarda",
+"gavatlarin",
+"gavatlarla",
+"gavatları",
+"gavatligin",
+"gavatlikta",
+"gavatsiniz",
+"gavatını",
+"gotleklere",
+"gotlekleri",
+"gotleklige",
+"gotlekligi",
+"gotlerimiz",
+"gotlerinde",
+"gotlerinin",
+"gotleriniz",
+"gotoslarda",
+"gotoslarin",
+"gotoslarla",
+"gotoslugun",
+"gotoslukla",
+"gotoslukta",
+"gotumuzden",
+"gotunuzden",
+"götlekler",
+"götleklik",
+"götleksin",
+"götlekten",
+"götlerden",
+"götlerine",
+"götlerini",
+"götleğin",
+"götlükte",
+"götlüğe",
+"götoşlar",
+"götoşluk",
+"götoştan",
+"götümden",
+"götümün",
+"götümüz",
+"götünden",
+"götünün",
+"götünüz",
+"kavatlarda",
+"kavatlarin",
+"kavatlarla",
+"kavatları",
+"kavatligin",
+"kavatlikla",
+"kavatlikta",
+"kavatsiniz",
+"pezevengim",
+"pezevengin",
+"pezevengiz",
+"pezevenkle",
+"pezevenkte",
+"piclegimiz",
+"picliginiz",
+"piçlerden",
+"piçlikten",
+"piçliğin",
+"pustlardan",
+"pustluktan",
+"puştlarda",
+"puştlarla",
+"puştları",
+"puştlukla",
+"puştluğa",
+"puştluğu",
+"puştsunuz",
+"sicarsiniz",
+"sicmalarda",
+"sicmasinin",
+"sıçarlar",
+"sıçarız",
+"sıçmadan",
+"sıçmayı",
+"sıçışa",
+"yarraksın",
+"amciklara",
+"amciklari",
+"amcikliga",
+"amcikligi",
+"amsalagim",
+"amsalagin",
+"amsalagiz",
+"amsalakla",
+"amsalakta",
+"amsalağa",
+"boklardan",
+"boklarina",
+"boklarini",
+"bokluktan",
+"boklulara",
+"boklulari",
+"bokluğun",
+"bokyiyene",
+"bokyiyeni",
+"dalyaraga",
+"dalyaragi",
+"gavatlara",
+"gavatlari",
+"gavatliga",
+"gavatligi",
+"gavatlık",
+"gavatsın",
+"gotlekler",
+"gotleklik",
+"gotleksin",
+"gotlekten",
+"gotlerden",
+"gotlerine",
+"gotlerini",
+"gotlukten",
+"gotoslara",
+"gotoslari",
+"gotosluga",
+"gotoslugu",
+"gotumuzde",
+"gotumuzun",
+"gotunuzde",
+"gotunuzun",
+"götlekle",
+"götlekte",
+"götlerin",
+"götleği",
+"götoşla",
+"götoşta",
+"götoşun",
+"götümde",
+"götümü",
+"götünde",
+"götünü",
+"hassiktir",
+"hastirsin",
+"kavatlara",
+"kavatlari",
+"kavatliga",
+"kavatligi",
+"kavatlık",
+"kavatsın",
+"pezevenge",
+"pezevengi",
+"piclerden",
+"piclikten",
+"piçlerde",
+"piçlerin",
+"piçlerle",
+"piçlikle",
+"piçlikte",
+"piçliğe",
+"piçliği",
+"piçsiniz",
+"pustlarda",
+"pustlarin",
+"pustlarla",
+"pustlugun",
+"pustlukta",
+"pustsunuz",
+"puştlara",
+"sicmalara",
+"sicmalari",
+"sıçmada",
+"sıçmaya",
+"sıçtık",
+"sıçtım",
+"sıçtın",
+"sıçış",
+"yarraksin",
+"amciklar",
+"amciklik",
+"amciksin",
+"amsalaga",
+"amsalagi",
+"boklarda",
+"bokları",
+"bokludan",
+"boklugun",
+"boklukta",
+"boklular",
+"boklunun",
+"boklusun",
+"bokluyla",
+"bokluğa",
+"bokluğu",
+"bokumdan",
+"bokundan",
+"bokyiyen",
+"dalyarak",
+"gavatini",
+"gavatlar",
+"gavatlik",
+"gavatsin",
+"gavattan",
+"gavatın",
+"gotlegin",
+"gotlekle",
+"gotlekte",
+"gotlerin",
+"gotlugun",
+"gotlukte",
+"gotoslar",
+"gotosluk",
+"gotostan",
+"gotoşta",
+"gotumden",
+"gotumuze",
+"gotunden",
+"gotunuze",
+"gotunuzu",
+"götlere",
+"götleri",
+"götlük",
+"götoşa",
+"götoşu",
+"götüme",
+"götüne",
+"hastirin",
+"kavatlar",
+"kavatlik",
+"kavatsin",
+"kavattan",
+"kavatın",
+"pezevenk",
+"piclerde",
+"piclerin",
+"piclerle",
+"picligin",
+"piclikle",
+"piclikte",
+"picsiniz",
+"piçlere",
+"piçleri",
+"pustlara",
+"pustlari",
+"pustluga",
+"pustlugu",
+"puştlar",
+"puştluk",
+"puştsun",
+"puşttan",
+"puşttur",
+"sicarlar",
+"sicmadan",
+"sicmanin",
+"sictilar",
+"sictiniz",
+"sıçmak",
+"sıçtı",
+"amcigiz",
+"amcikla",
+"amsalak",
+"boklara",
+"boklari",
+"bokluga",
+"boklugu",
+"bokluya",
+"bokluyu",
+"bokumda",
+"bokumuz",
+"bokunda",
+"bokunuz",
+"gavatin",
+"gavatla",
+"gavatta",
+"gavatı",
+"gotlegi",
+"gotlere",
+"gotleri",
+"gotluge",
+"gotlugu",
+"gotosla",
+"gotosta",
+"gotosun",
+"gotumde",
+"gotumun",
+"gotumuz",
+"gotunde",
+"gotunun",
+"gotunuz",
+"götlek",
+"götler",
+"götoş",
+"götten",
+"götüm",
+"götün",
+"kavatin",
+"kavatla",
+"kavatta",
+"kavatı",
+"piclere",
+"picleri",
+"piclige",
+"picligi",
+"piçler",
+"piçlik",
+"piçsin",
+"piçten",
+"pustlar",
+"pustluk",
+"pustsun",
+"pusttan",
+"pusttur",
+"puştla",
+"puştta",
+"puştum",
+"puştun",
+"puştuz",
+"sicariz",
+"sicilir",
+"sicmada",
+"sicmaya",
+"sicmayi",
+"sıçar",
+"sıçma",
+"boklar",
+"bokluk",
+"bokuma",
+"bokumu",
+"bokuna",
+"bokunu",
+"gavata",
+"gavati",
+"gotlek",
+"gotler",
+"gotluk",
+"gotosa",
+"gotosu",
+"gotten",
+"gotume",
+"gotumu",
+"gotune",
+"gotunu",
+"götte",
+"götü",
+"hastir",
+"kavata",
+"kavati",
+"picler",
+"piclik",
+"picsin",
+"picten",
+"piçim",
+"piçin",
+"piçiz",
+"piçle",
+"piçte",
+"pustla",
+"pustta",
+"pustum",
+"pustun",
+"pustuz",
+"puşta",
+"puştu",
+"sicisa",
+"sicisi",
+"sicmak",
+"sictik",
+"sictim",
+"sictin",
+"yarram",
+"amcik",
+"boklu",
+"bokum",
+"bokun",
+"gavat",
+"gotos",
+"gotte",
+"gotum",
+"gotun",
+"göte",
+"kavat",
+"picim",
+"picin",
+"piciz",
+"picle",
+"picte",
+"piçe",
+"piçi",
+"pusta",
+"pustu",
+"puşt",
+"sicar",
+"sicis",
+"sicma",
+"sicti",
+"sktir",
+"boku",
+"gote",
+"gotu",
+"göt",
+"pice",
+"pici",
+"piç",
+"pust",
+"bok",
+"pic"
+]
\ No newline at end of file
diff --git a/js/languages/lang/ua.json b/js/languages/lang/ua.json
new file mode 100644
index 0000000..8074beb
--- /dev/null
+++ b/js/languages/lang/ua.json
@@ -0,0 +1,1967 @@
+[
+"заебитесьвывротивжопу",
+"заебисьонвротивжопу",
+"заебисьтывротивжопу",
+"едрижтвоювбабушку",
+"перемандовываться",
+"перемандошиваться",
+"перемандюкиваться",
+"перемандюливаться",
+"перемандюриваться",
+"перемандякиваться",
+"перемандяриваться",
+"перемандяхиваться",
+"перемандячиваться",
+"перемандяшиваться",
+"подмандовываться",
+"подмандохиваться",
+"подмандошиваться",
+"подмандюливаться",
+"подмандюриваться",
+"подмандякиваться",
+"подмандяриваться",
+"подмандяхиваться",
+"подмандячиваться",
+"подмандяшиваться",
+"примандовываться",
+"примандохиваться",
+"примандошиваться",
+"примандюкиваться",
+"примандюливаться",
+"примандюриваться",
+"примандякиваться",
+"примандяриваться",
+"примандяхиваться",
+"примандячиваться",
+"примандяшиваться",
+"примандёхиваться",
+"промандовываться",
+"промандохиваться",
+"промандошиваться",
+"промандюкиваться",
+"промандюливаться",
+"промандюриваться",
+"промандякиваться",
+"промандяриваться",
+"промандяхиваться",
+"промандячиваться",
+"промандяшиваться",
+"промандёхиваться",
+"размандовываться",
+"размандохиваться",
+"размандошиваться",
+"размандюкиваться",
+"размандюливаться",
+"размандюриваться",
+"размандякиваться",
+"размандяриваться",
+"размандяхиваться",
+"размандячиваться",
+"размандяшиваться",
+"вымавдошиваться",
+"вымандовываться",
+"вымандохиваться",
+"вымандошиваться",
+"вымандюливаться",
+"вымандюриваться",
+"вымандякиваться",
+"вымандяриваться",
+"вымандяхиваться",
+"вымандячиваться",
+"домандовываться",
+"домандохиваться",
+"домандюкиваться",
+"домандюливаться",
+"домандюриваться",
+"домандякиваться",
+"домандяриваться",
+"домандяхиваться",
+"домандячиваться",
+"заебисьтывдоску",
+"замандовываться",
+"замандохиваться",
+"замандошиваться",
+"замандюкиваться",
+"замандюливаться",
+"замандюриваться",
+"замандякиваться",
+"замандяриваться",
+"замандяхиваться",
+"замандячиваться",
+"замандяшиваться",
+"захреначиваться",
+"измандовываться",
+"измандохиваться",
+"измандошибаться",
+"измандюкиваться",
+"измандюливаться",
+"измандюриваться",
+"измандякиваться",
+"измандяриваться",
+"измандяхиваться",
+"измандячиваться",
+"измандяшиваться",
+"намандовываться",
+"намандохиваться",
+"намандошиваться",
+"намандюкиваться",
+"намандюливаться",
+"намандюриваться",
+"намандякиваться",
+"намандяриваться",
+"намандяхиваться",
+"намандячиваться",
+"намандяшиваться",
+"обмандовываться",
+"обмандохиваться",
+"обмандошибаться",
+"обмандюкиваться",
+"обмандюливаться",
+"обмандюриваться",
+"обмандякиваться",
+"обмандяриваться",
+"обмандяхиваться",
+"обмандячиваться",
+"обмандяшиваться",
+"отмандовываться",
+"отмандохиваться",
+"отмандошиваться",
+"отмандюкиваться",
+"отмандюливаться",
+"отмандюриваться",
+"отмандякиваться",
+"отмандяриваться",
+"отмандяхиваться",
+"отмандячиваться",
+"перевыёбываться",
+"переебашиваться",
+"переебениваться",
+"переебуриваться",
+"переебёхиваться",
+"перекосоёбиться",
+"перемандоваться",
+"перемандовывать",
+"перемандошивать",
+"перемандошиться",
+"перемандываться",
+"перемандюкаться",
+"перемандюкивать",
+"перемандюливать",
+"перемандюлиться",
+"перемандюривать",
+"перемандюриться",
+"перемандякаться",
+"перемандякивать",
+"перемандяривать",
+"перемандяриться",
+"перемандяхаться",
+"перемандяхивать",
+"перемандячивать",
+"перемандячиться",
+"перемандяшивать",
+"перемандяшиться",
+"перехуякиваться",
+"перехуяриваться",
+"перехуячиваться",
+"перехуяшиваться",
+"подъебашиваться",
+"подъебениваться",
+"подъебуриваться",
+"подъебёхиваться",
+"помандовываться",
+"помандохиваться",
+"помандюкиваться",
+"помандюливаться",
+"помандюриваться",
+"помандякиваться",
+"помандяхиваться",
+"помандячиваться",
+"помандяшиваться",
+"разъебашиваться",
+"разъебениваться",
+"разъебуриваться",
+"разъебёхиваться",
+"вымандовывание",
+"вымандохивание",
+"вымандошивание",
+"вымандюливание",
+"вымандюривание",
+"вымандякивание",
+"вымандяривание",
+"вымандяхивание",
+"вымандячивание",
+"домудохиваться",
+"замудохиваться",
+"захерачиваться",
+"заёбыватьмозги",
+"измудохиваться",
+"изъебашиваться",
+"изъебениваться",
+"изъебуриваться",
+"мандапротивный",
+"матьеёперемать",
+"объебатьнаходу",
+"объебашиваться",
+"объебениваться",
+"объебуриваться",
+"объебёхиваться",
+"омандовываться",
+"омандохиваться",
+"омандошиваться",
+"омандюкиваться",
+"омандюливаться",
+"омандюриваться",
+"омандякиваться",
+"омандяриваться",
+"омандяхиваться",
+"омандячиваться",
+"омандяшиваться",
+"отъебашиваться",
+"отъебениваться",
+"отъебуриваться",
+"перехуякнуться",
+"подмандоваться",
+"подмандовывать",
+"подмандохаться",
+"подмандохивать",
+"подмандошивать",
+"подмандошиться",
+"подмандываться",
+"подмандюливать",
+"подмандюлиться",
+"подмандюривать",
+"подмандюриться",
+"подмандякаться",
+"подмандякивать",
+"подмандяривать",
+"подмандяриться",
+"подмандяхаться",
+"подмандяхивать",
+"подмандячивать",
+"подмандячиться",
+"подмандяшивать",
+"подмандяшиться",
+"подхуякиваться",
+"подхуяриваться",
+"подхуячиваться",
+"подхуяшиваться",
+"приебашиваться",
+"приебениваться",
+"приебуриваться",
+"приебёхиваться",
+"примавдовывать",
+"примандоваться",
+"примандохаться",
+"примандохивать",
+"примандошивать",
+"примандошиться",
+"примандюкаться",
+"примандюкивать",
+"примандюливать",
+"примандюлиться",
+"примандюривать",
+"примандюриться",
+"примандякаться",
+"примандякивать",
+"примандяривать",
+"примандяриться",
+"примандяхаться",
+"примандяхивать",
+"примандячивать",
+"примандячиться",
+"примандяшивать",
+"примандяшиться",
+"примандёхаться",
+"примандёхивать",
+"прихуякиваться",
+"прихуяриваться",
+"прихуячиваться",
+"прихуяшиваться",
+"проебашиваться",
+"проебуриваться",
+"проебёхиваться",
+"проконаёбиться",
+"прокосоёбиться",
+"промандоваться",
+"промандовывать",
+"промандохаться",
+"промандохивать",
+"промандошивать",
+"промандошиться",
+"промандюкаться",
+"промандюкивать",
+"промандюливать",
+"промандюлиться",
+"промандюривать",
+"промандюриться",
+"промандякаться",
+"промандякивать",
+"промандяривать",
+"промандяриться",
+"промандяхаться",
+"промандяхивать",
+"промандячивать",
+"промандячиться",
+"промандяшивать",
+"промандяшиться",
+"промандёхаться",
+"промандёхивать",
+"прохуякиваться",
+"прохуяриваться",
+"прохуячиваться",
+"прохуяшиваться",
+"разблядоваться",
+"развыёбываться",
+"размандоваться",
+"размандовывать",
+"размандохаться",
+"размандохивать",
+"размандошивать",
+"размандошиться",
+"размандюкаться",
+"размандюкивать",
+"размандюлиться",
+"размандюривать",
+"размандюриться",
+"размандякаться",
+"размандякивать",
+"размандяривать",
+"размандяриться",
+"размандяхаться",
+"размандяхивать",
+"размандячивать",
+"размандячиться",
+"размандяшивать",
+"размандяшиться",
+"расконаёбиться",
+"раскосоёбиться",
+"расхуякиваться",
+"расхуяриваться",
+"расхуячиваться",
+"расхуяшиваться",
+"скосоёбываться",
+"смандовываться",
+"смандохиваться",
+"смандошиваться",
+"смандюкиваться",
+"смандюливаться",
+"смандюриваться",
+"смандякиваться",
+"смандяриваться",
+"смандячиваться",
+"смандяшиваться",
+"смандёхиваться",
+"умандовываться",
+"умандохиваться",
+"умандошиваться",
+"умандюкиваться",
+"умандюливаться",
+"умандюриваться",
+"умандякиваться",
+"умандяриваться",
+"умандячиваться",
+"умандяшиваться",
+"умандёхиваться",
+"вздрачиваться",
+"въебашиваться",
+"въебениваться",
+"въебуриваться",
+"въебёхиваться",
+"выдрачиваться",
+"выдрючиваться",
+"выебениваться",
+"выебёхиваться",
+"вымандоваться",
+"вымандовывать",
+"вымандохаться",
+"вымандохивать",
+"вымандошивать",
+"вымандюливать",
+"вымандюлиться",
+"вымандюривать",
+"вымандюриться",
+"вымандякаться",
+"вымандякивать",
+"вымандяривать",
+"вымандяриться",
+"вымандяхаться",
+"вымандяхивать",
+"вымандячивать",
+"вымандячиться",
+"выхуякиваться",
+"выхуяриваться",
+"выхуячиваться",
+"добиздоболить",
+"довыебываться",
+"доебениваться",
+"доебуриваться",
+"доебёхиваться",
+"доебёшиваться",
+"домандоваться",
+"домандовывать",
+"домандохаться",
+"домандохивать",
+"домандюкаться",
+"домандюкивать",
+"домандюливать",
+"домандюлиться",
+"домандюривать",
+"домандюриться",
+"домандякаться",
+"домандякивать",
+"домандяривать",
+"домандяриться",
+"домандяхаться",
+"домандяхивать",
+"домандячивать",
+"домандячиться",
+"дохуякиваться",
+"дохуяриваться",
+"дохуячиваться",
+"заблядоваться",
+"заебательская",
+"заебашиваться",
+"заебениваться",
+"заебуриваться",
+"заебёхиваться",
+"замандалиться",
+"замандоваться",
+"замандовывать",
+"замандохаться",
+"замандохивать",
+"замандошивать",
+"замандошиться",
+"замандюкаться",
+"замандюкивать",
+"замандюливать",
+"замандюлиться",
+"замандюривать",
+"замандюриться",
+"замандякаться",
+"замандякивать",
+"замандяривать",
+"замандяриться",
+"замандяхаться",
+"замандяхивать",
+"замандячивать",
+"замандячиться",
+"замандяшивать",
+"замандяшиться",
+"затрахиваться",
+"захреначивать",
+"захреначиться",
+"захуякиваться",
+"захуяриваться",
+"захуячиваться",
+"захуяшиваться",
+"извыёбываться",
+"измандоваться",
+"измандовывать",
+"измандохаться",
+"измандохивать",
+"измандошивать",
+"измандошиться",
+"измандюкаться",
+"измандюкивать",
+"измандюливать",
+"измандюлиться",
+"измандюривать",
+"измандюриться",
+"измандякаться",
+"измандякивать",
+"измандяривать",
+"измандяриться",
+"измандяхаться",
+"измандяхивать",
+"измандячивать",
+"измандячиться",
+"измандяшивать",
+"измандяшиться",
+"исхуякиваться",
+"исхуяриваться",
+"исхуячиваться",
+"исхуяшиваться",
+"кебёнойматери",
+"кёбанойматери",
+"мандохиваться",
+"мандошиваться",
+"мандюживаться",
+"мандюливаться",
+"мандюриваться",
+"мандякиваться",
+"мандяриваться",
+"мандяхиваться",
+"мандячиваться",
+"мандяшиваться",
+"наблядоваться",
+"намандоваться",
+"намандовывать",
+"намандохаться",
+"намандохивать",
+"намандошивать",
+"намандошиться",
+"намандюкаться",
+"намандюкивать",
+"намандюливать",
+"намандюлиться",
+"намандюривать",
+"намандюриться",
+"намандякаться",
+"намандякивать",
+"намандяривать",
+"намандяриться",
+"намандяхаться",
+"намандяхивать",
+"намандячивать",
+"намандячиться",
+"намандяшивать",
+"намандяшиться",
+"нахуякиваться",
+"нахуяриваться",
+"нахуячиваться",
+"нахуяшиваться",
+"обмандоваться",
+"обмандовывать",
+"обмандохаться",
+"обмандохивать",
+"обмандошивать",
+"обмандошиться",
+"обмандюкаться",
+"обмандюкивать",
+"обмандюливать",
+"обмандюлиться",
+"обмандюривать",
+"обмандюриться",
+"обмандякаться",
+"обмандякивать",
+"обмандяривать",
+"обмандяриться",
+"обмандяхаться",
+"обмандяхивать",
+"обмандячивать",
+"обмандячиться",
+"обмандяшивать",
+"обмандяшиться",
+"обхуякиваться",
+"обхуяриваться",
+"обхуячиваться",
+"обхуяшиваться",
+"объебашивание",
+"объебенивание",
+"объебуривание",
+"объебёхивание",
+"омандовывание",
+"омандохивание",
+"омандошивание",
+"омандюкивание",
+"омандюливание",
+"омандюривание",
+"омандякивание",
+"омандяривание",
+"омандяхивание",
+"омандячивание",
+"омандяшивание",
+"отконаёбиться",
+"откосоёбиться",
+"отмандоваться",
+"отмандовывать",
+"отмандохаться",
+"отмандохивать",
+"отмандошивать",
+"отмандошиться",
+"отмандюкаться",
+"отмандюкивать",
+"отмандюливать",
+"отмандюлиться",
+"отмандюривать",
+"отмандюриться",
+"отмандякаться",
+"отмандякивать",
+"отмандяривать",
+"отмандяриться",
+"отмандяхаться",
+"отмандяхивать",
+"отмандячивать",
+"отмандячиться",
+"отхуякиваться",
+"отхуяриваться",
+"отхуячиваться",
+"отхуяшиваться",
+"отъебашивание",
+"отъебуривание",
+"отъебёхивание",
+"отьебенивание",
+"переебашивать",
+"переебашиться",
+"переебенивать",
+"переебениться",
+"переебуривать",
+"переебуриться",
+"переебёхаться",
+"переебёхивать",
+"перекосоёбить",
+"перемандиться",
+"перемандовать",
+"перемандошить",
+"перемандывать",
+"перемандюкать",
+"перемандюлить",
+"перемандюрить",
+"перемандякать",
+"перемандярить",
+"перемандяхать",
+"перемандячить",
+"перемандяшить",
+"перехуякаться",
+"перехуякивать",
+"перехуяривать",
+"перехуяриться",
+"перехуячивать",
+"перехуячиться",
+"перехуяшивать",
+"перехуяшиться",
+"переёбываться",
+"повыёбываться",
+"подхуякнуться",
+"подъебашивать",
+"подъебашиться",
+"подъебенивать",
+"подъебениться",
+"подъебериться",
+"подъебуривать",
+"подъебёхаться",
+"подъебёхивать",
+"помандоваться",
+"помандовывать",
+"помандохаться",
+"помандохивать",
+"помандошивать",
+"помандошиться",
+"помандюкаться",
+"помандюкивать",
+"помандюливать",
+"помандюлиться",
+"помандюривать",
+"помандюриться",
+"помандякаться",
+"помандякивать",
+"помандяхаться",
+"помандяхивать",
+"помандячивать",
+"помандячиться",
+"помандяшивать",
+"помандяшиться",
+"похуякиваться",
+"похуяриваться",
+"похуячиваться",
+"похуяшиваться",
+"раззалупаться",
+"разъебашивать",
+"разъебашиться",
+"разъебенивать",
+"разъебениться",
+"разъебуривать",
+"разъебуриться",
+"разъебёхаться",
+"разъебёхивать",
+"разъёбываться",
+"распидорасило",
+"съебашиваться",
+"съебениваться",
+"съебуриваться",
+"съебёхиваться",
+"мать-перемать",
+"аху-хунехо-хо",
+"вздрачивание",
+"вздрючивание",
+"вхуякиваться",
+"вхуяриваться",
+"вхуячиваться",
+"вхуяшиваться",
+"выдрачивание",
+"выдрючивание",
+"выебываешься",
+"выебёхивание",
+"выхуякивание",
+"выхуяривание",
+"выхуячивание",
+"домудохаться",
+"домудохивать",
+"дохуяибольше",
+"едритвоюмать",
+"заебатьмозги",
+"замудоханный",
+"замудохаться",
+"замудохивать",
+"захерачивать",
+"захерачиться",
+"заёбагрешная",
+"изматериться",
+"измудохаться",
+"измудохивать",
+"изъебашивать",
+"изъебашиться",
+"изъебенивать",
+"изъебениться",
+"изъебуривать",
+"изъебуриться",
+"изъебёхаться",
+"кебёнематери",
+"лизоблядство",
+"мандякнуться",
+"матьтвоюедри",
+"мозгоебатель",
+"настоебенило",
+"настоебенить",
+"облядоваться",
+"обхуякивание",
+"обхуяривание",
+"обхуячивание",
+"обхуяшивание",
+"объебашивать",
+"объебашиться",
+"объебенивать",
+"объебениться",
+"объебуривать",
+"объебуриться",
+"объебёхаться",
+"объебёхивать",
+"объёбываться",
+"омандоваться",
+"омандовывать",
+"омандохаться",
+"омандохивать",
+"омандошивать",
+"омандошиться",
+"омандюкаться",
+"омандюкивать",
+"омандюливать",
+"омандюлиться",
+"омандюривать",
+"омандюриться",
+"омандякаться",
+"омандякивать",
+"омандяривать",
+"омандяриться",
+"омандяхаться",
+"омандяхивать",
+"омандячивать",
+"омандячиться",
+"омандяшивать",
+"омандяшиться",
+"отъебашивать",
+"отъебенивать",
+"отъебениться",
+"отъебуривать",
+"отъебуриться",
+"отъебываться",
+"отъебёхаться",
+"отъебёхивать",
+"отьебашиться",
+"охуякиваться",
+"охуяриваться",
+"охуячиваться",
+"охуяшиваться",
+"переебнуться",
+"перехуякнуть",
+"подмандиться",
+"подмандовать",
+"подмандохать",
+"подмандошить",
+"подмандывать",
+"подмандюлить",
+"подмандюрить",
+"подмандякать",
+"подмандярить",
+"подмандяхать",
+"подмандячить",
+"подмандяшить",
+"подхуякаться",
+"подхуякивать",
+"подхуяривать",
+"подхуяриться",
+"подхуячивать",
+"подхуячиться",
+"подхуяшивать",
+"подхуяшиться",
+"приебашивать",
+"приебашиться",
+"приебениться",
+"приебуривать",
+"приебуриться",
+"приебёхаться",
+"приебёхивать",
+"примандехать",
+"примандиться",
+"примандовать",
+"примандохать",
+"примандошить",
+"примандюкать",
+"примандюлить",
+"примандюрить",
+"примандякать",
+"примандярить",
+"примандяхать",
+"примандячить",
+"примандяшить",
+"прихуякаться",
+"прихуякивать",
+"прихуяривать",
+"прихуяриться",
+"прихуячивать",
+"прихуячиться",
+"прихуяшивать",
+"прихуяшиться",
+"приёбенивать",
+"приёбываться",
+"проблядовать",
+"проебашивать",
+"проебашиться",
+"проебениться",
+"проебуривать",
+"проебуриться",
+"проебёхаться",
+"проебёхивать",
+"промандехать",
+"промандиться",
+"промандовать",
+"промандохать",
+"промандошить",
+"промандюкать",
+"промандюлить",
+"промандюрить",
+"промандякать",
+"промандярить",
+"промандяхать",
+"промандячить",
+"промандяшить",
+"прохуякаться",
+"прохуякивать",
+"прохуяривать",
+"прохуяриться",
+"прохуячивать",
+"прохуячиться",
+"прохуяшивать",
+"прохуяшиться",
+"проёбываться",
+"размандиться",
+"размандовать",
+"размандохать",
+"размандошить",
+"размандюкать",
+"размандюлить",
+"размандюрить",
+"размандякать",
+"размандярить",
+"размандяхать",
+"размандячить",
+"размандяшить",
+"распронаебит",
+"расхуякаться",
+"расхуякивать",
+"расхуяривать",
+"расхуяриться",
+"расхуячивать",
+"расхуячиться",
+"расхуяшивать",
+"расхуяшиться",
+"скосоёбанная",
+"скосоёбиться",
+"скосоёбывать",
+"смандоваться",
+"смандовывать",
+"смандохаться",
+"смандохивать",
+"смандошивать",
+"смандошиться",
+"смандюкаться",
+"смандюкивать",
+"смандюливать",
+"смандюлиться",
+"смандюривать",
+"смандюриться",
+"смандякаться",
+"смандякивать",
+"смандяривать",
+"смандяриться",
+"смандячивать",
+"смандячиться",
+"смандяшивать",
+"смандяшиться",
+"смандёхаться",
+"смандёхивать",
+"схуякиваться",
+"схуяриваться",
+"схуячиваться",
+"схуяшиваться",
+"уебашиваться",
+"уебениваться",
+"уебуриваться",
+"уебёхиваться",
+"умандоваться",
+"умандовывать",
+"умандохаться",
+"умандохивать",
+"умандошивать",
+"умандошиться",
+"умандюкаться",
+"умандюкивать",
+"умандюливать",
+"умандюлиться",
+"умандюривать",
+"умандюриться",
+"умандякаться",
+"умандякивать",
+"умандяривать",
+"умандяриться",
+"умандячивать",
+"умандячиться",
+"умандяшивать",
+"умандяшиться",
+"умандёхаться",
+"умандёхивать",
+"ухуякиваться",
+"ухуяриваться",
+"ухуячиваться",
+"ухуяшиваться",
+"доебени-фени",
+"вздрачивать",
+"вздрочиться",
+"вздрючивать",
+"вхуякивание",
+"вхуякнуться",
+"вхуяривание",
+"вхуячивание",
+"въебашивать",
+"въебашиться",
+"въебенивать",
+"въебениться",
+"въебуривать",
+"въебуриться",
+"въебываться",
+"въебёхаться",
+"въебёхивать",
+"выдрачивать",
+"выдрочиться",
+"выдрючивать",
+"выдрючиться",
+"выебенивать",
+"выебениться",
+"выебывается",
+"выебываться",
+"выебёхивать",
+"вымандиться",
+"вымандовать",
+"вымандохать",
+"вымандошить",
+"вымандюлить",
+"вымандюрить",
+"вымандякать",
+"вымандярить",
+"вымандяхать",
+"вымандячить",
+"выхуякаться",
+"выхуякивать",
+"выхуяривать",
+"выхуяриться",
+"выхуячивать",
+"выхуячиться",
+"выёбывается",
+"выёбываться",
+"довыебывать",
+"додрочиться",
+"доебенивать",
+"доебениться",
+"доебуривать",
+"доебуриться",
+"доебёхаться",
+"доебёхивать",
+"доебёшивать",
+"доебёшиться",
+"домандиться",
+"домандовать",
+"домандохать",
+"домандюкать",
+"домандюлить",
+"домандюрить",
+"домандякать",
+"домандярить",
+"домандяхать",
+"домандячить",
+"дохуякаться",
+"дохуякивать",
+"дохуяривать",
+"дохуяриться",
+"дохуячивать",
+"дохуячиться",
+"доёбывается",
+"доёбываться",
+"заблядовать",
+"заебашивать",
+"заебашиться",
+"заебенивать",
+"заебениться",
+"заебический",
+"заебуривать",
+"заебёхаться",
+"заебёхивать",
+"залупляться",
+"замандиться",
+"замандовать",
+"замандохать",
+"замандошить",
+"замандюкать",
+"замандюлить",
+"замандюрить",
+"замандякать",
+"замандярить",
+"замандяхать",
+"замандячить",
+"замандяшить",
+"затрахаться",
+"затрахивать",
+"захреначить",
+"захреноветь",
+"захуякаться",
+"захуякивать",
+"захуяривать",
+"захуяриться",
+"захуячивать",
+"захуячиться",
+"захуяшивать",
+"захуяшиться",
+"заёбываться",
+"издрочиться",
+"измандиться",
+"измандовать",
+"измандохать",
+"измандошить",
+"измандюкать",
+"измандюлить",
+"измандюрить",
+"измандякать",
+"измандярить",
+"измандяхать",
+"измандячить",
+"измандяшить",
+"измутызгать",
+"исхуякаться",
+"исхуякивать",
+"исхуяривать",
+"исхуяриться",
+"исхуячивать",
+"исхуячиться",
+"исхуяшивать",
+"исхуяшиться",
+"конаебиться",
+"коноёбиться",
+"косоёбиться",
+"мандавманду",
+"мандохаться",
+"мандохивать",
+"мандошивать",
+"мандошиться",
+"мандюкаться",
+"мандюкивать",
+"мандюливать",
+"мандюлиться",
+"мандюривать",
+"мандюриться",
+"мандякаться",
+"мандякивать",
+"мандяривать",
+"мандяриться",
+"мандяхаться",
+"мандяхивать",
+"мандячивать",
+"мандячиться",
+"мандяшивать",
+"мандяшиться",
+"матьтвоюети",
+"матьтвоюуёб",
+"наебашиться",
+"намандиться",
+"намандовать",
+"намандохать",
+"намандошить",
+"намандюкать",
+"намандюлить",
+"намандюрить",
+"намандякать",
+"намандярить",
+"намандяхать",
+"намандячить",
+"намандяшить",
+"нахуякаться",
+"нахуякивать",
+"нахуяривать",
+"нахуяриться",
+"нахуячивать",
+"нахуячиться",
+"нахуяшивать",
+"нахуяшиться",
+"наябываться",
+"наёбываться",
+"недоёбанный",
+"обмандиться",
+"обмандовать",
+"обмандохать",
+"обмандошить",
+"обмандюкать",
+"обмандюлить",
+"обмандюрить",
+"обмандякать",
+"обмандярить",
+"обмандячить",
+"обмандяшить",
+"обхуякаться",
+"обхуякивать",
+"обхуяривать",
+"обхуяриться",
+"обхуячивать",
+"обхуячиться",
+"обхуяшивать",
+"обхуяшиться",
+"объебнуться",
+"объёбывание",
+"остоебенило",
+"остоебенить",
+"отмандиться",
+"отмандовать",
+"отмандохать",
+"отмандошить",
+"отмандюкать",
+"отмандюлить",
+"отмандюрить",
+"отмандякать",
+"отмандярить",
+"отмандяхать",
+"отмандячить",
+"отмандяшить",
+"отхуесосить",
+"отхуякаться",
+"отхуякивать",
+"отхуяривать",
+"отхуяриться",
+"отхуячивать",
+"отхуячиться",
+"отхуяшивать",
+"отхуяшиться",
+"отъебывание",
+"отьебнуться",
+"охеракивать",
+"охерачивать",
+"охерашивать",
+"охуякнуться",
+"переебаться",
+"переебашить",
+"переебенить",
+"переебурить",
+"переебёхать",
+"перемандить",
+"перехуякать",
+"перехуярить",
+"перехуячить",
+"перехуяшить",
+"переёбанный",
+"переёбывать",
+"пиздокрытый",
+"подхуякнуть",
+"подъебаться",
+"подъебашить",
+"подъебенить",
+"подъебурить",
+"подъебёхать",
+"подъябывать",
+"подъёбывать",
+"помандиться",
+"помандовать",
+"помандохать",
+"помандошить",
+"помандюкать",
+"помандюлить",
+"помандюрить",
+"помандякать",
+"помандяхать",
+"помандячить",
+"помандяшить",
+"похуякаться",
+"похуякивать",
+"похуяривать",
+"похуяриться",
+"похуячивать",
+"похуячиться",
+"похуяшивать",
+"похуяшиться",
+"поёбываться",
+"проблядушка",
+"проебываешь",
+"разъебаться",
+"разъебашить",
+"разъебенить",
+"разъебурить",
+"разъебёхать",
+"разъёбанный",
+"разъёбывать",
+"распроебена",
+"спидарасили",
+"съебашивать",
+"съебашиться",
+"съебенивать",
+"съебениться",
+"съебуривать",
+"съебуриться",
+"съебёхаться",
+"съебёхивать",
+"съёбываться",
+"хуюживаться",
+"хуякиваться",
+"хуяриваться",
+"хуячиваться",
+"хуяшиваться",
+"вхуякаться",
+"вхуякивать",
+"вхуяривать",
+"вхуяриться",
+"вхуячивать",
+"вхуячиться",
+"вхуяшивать",
+"вхуяшиться",
+"въебывание",
+"выебнуться",
+"выжопывать",
+"выёбывание",
+"домудохать",
+"етиегомать",
+"залупаться",
+"залупенить",
+"залупистый",
+"замудиться",
+"замудохать",
+"захерачить",
+"захероветь",
+"изматерить",
+"измудиться",
+"измудохать",
+"изъебаться",
+"изъебашить",
+"изъебенить",
+"изъебехать",
+"изъебурить",
+"мандавошка",
+"манданутый",
+"мандоватая",
+"мандякнуть",
+"матьвашуёб",
+"мозгоебать",
+"наебнуться",
+"настоебать",
+"невъебенно",
+"облядовать",
+"объебаться",
+"объебашить",
+"объебенить",
+"объебурить",
+"объебёхать",
+"объёбывать",
+"оебашивать",
+"оебенивать",
+"оебуривать",
+"оебёхивать",
+"оманденная",
+"омандиться",
+"омандовать",
+"омандохать",
+"омандошить",
+"омандюкать",
+"омандюлить",
+"омандюрить",
+"омандякать",
+"омандярить",
+"омандяхать",
+"омандячить",
+"омандяшить",
+"отхерачить",
+"отъебаться",
+"отъебашить",
+"отъебенить",
+"отъебурить",
+"отъебывать",
+"отъёбанный",
+"отьебаться",
+"отьебёхать",
+"охуевающий",
+"охуякаться",
+"охуякивать",
+"охуяривать",
+"охуяриться",
+"охуячивать",
+"охуячиться",
+"охуяшивать",
+"охуяшиться",
+"переебнуть",
+"поблядушка",
+"подмандить",
+"подхуякать",
+"подхуярить",
+"подхуяшить",
+"подъебнуть",
+"поебистика",
+"приебаться",
+"приебашить",
+"приебенить",
+"приебурить",
+"приебёхать",
+"примандить",
+"прихуякать",
+"прихуярить",
+"прихуячить",
+"прихуяшить",
+"приёбистый",
+"приёбывать",
+"проебаться",
+"проебашить",
+"проебенить",
+"проебурить",
+"проебёхать",
+"промандить",
+"прохуякать",
+"прохуярить",
+"прохуячить",
+"прохуяшить",
+"проёбывать",
+"размандить",
+"разёбанный",
+"расхуюжить",
+"расхуякать",
+"расхуярить",
+"расхуячить",
+"расхуяшить",
+"скосоёбить",
+"смандиться",
+"смандовать",
+"смандохать",
+"смандошить",
+"смандюкать",
+"смандюлить",
+"смандюрить",
+"смандякать",
+"смандярить",
+"смандячить",
+"смандяшить",
+"смандёхать",
+"схуевудушу",
+"схуевутучу",
+"схуякаться",
+"схуякивать",
+"схуяривать",
+"схуяриться",
+"схуячивать",
+"схуячиться",
+"схуяшивать",
+"схуяшиться",
+"уебашивать",
+"уебашиться",
+"уебенивать",
+"уебениться",
+"уебуривать",
+"уебуриться",
+"уебёхаться",
+"уебёхивать",
+"умандовать",
+"умандохать",
+"умандошить",
+"умандюкать",
+"умандюлить",
+"умандюрить",
+"умандякать",
+"умандярить",
+"умандячить",
+"умандяшить",
+"умандёхать",
+"ухуякаться",
+"ухуякивать",
+"ухуяривать",
+"ухуяриться",
+"ухуячивать",
+"ухуячиться",
+"ухуяшивать",
+"ухуяшиться",
+"уёбываться",
+"хуелюбивая",
+"хуякнуться",
+"хуятизация",
+"хуёвничать",
+"шебла-ебла",
+"блядистка",
+"блядюшник",
+"вжопиться",
+"вздрочить",
+"вздрючить",
+"вхуякнуть",
+"въебаться",
+"въебашить",
+"въебенить",
+"въебурить",
+"въебывать",
+"въебёхать",
+"въябывать",
+"выдрочить",
+"выдрючить",
+"выебанный",
+"выебаться",
+"выебенить",
+"выебонщик",
+"вымандить",
+"выхуякать",
+"выхуярить",
+"выхуячить",
+"выёбистый",
+"выёбывать",
+"додрочить",
+"доебаться",
+"доебенить",
+"доебурить",
+"доебёхать",
+"доебёшить",
+"доибаться",
+"домандить",
+"дохуякать",
+"дохуярить",
+"дохуячить",
+"доёбывать",
+"етиихмать",
+"заебанный",
+"заебаться",
+"заебашить",
+"заебенить",
+"заебулина",
+"заебурить",
+"заебёхать",
+"замандить",
+"замондить",
+"затрахать",
+"захуякать",
+"захуярить",
+"захуячить",
+"захуяшить",
+"заёбанный",
+"заёбистый",
+"заёбывать",
+"заёбывают",
+"злоебучая",
+"злоебучий",
+"измандить",
+"исхуякать",
+"исхуярить",
+"исхуячить",
+"исхуяшить",
+"коноебица",
+"косоёбить",
+"мандавоха",
+"мандистее",
+"мандиться",
+"мандовать",
+"мандохать",
+"мандошить",
+"мандюкать",
+"мандюлить",
+"мандюрить",
+"мандякать",
+"мандярить",
+"мандяхать",
+"мандячить",
+"мандяшить",
+"мозгоебка",
+"наебаться",
+"намандить",
+"нахуякать",
+"нахуярить",
+"нахуячить",
+"нахуяшить",
+"наябывать",
+"наёбанный",
+"наёбывать",
+"ненаебная",
+"нихуясебе",
+"оберблядь",
+"обмандить",
+"обмандять",
+"обхуякать",
+"обхуярить",
+"обхуячить",
+"обхуяшить",
+"объебнуть",
+"объебушки",
+"остоебеть",
+"остохуело",
+"остохуеть",
+"отмандить",
+"отмондить",
+"отхуякать",
+"отхуярить",
+"отхуячить",
+"отхуяшить",
+"отъебнуть",
+"охеракать",
+"охерачить",
+"охерашить",
+"охуякнуть",
+"переебать",
+"переёбать",
+"подъебать",
+"подъёбщик",
+"поебанный",
+"поебаться",
+"поебончик",
+"помандить",
+"попиздеть",
+"похуякать",
+"похуярили",
+"похуярить",
+"похуячить",
+"похуяшить",
+"поябывать",
+"поёбывать",
+"разъебать",
+"разъебену",
+"распроеби",
+"распроеть",
+"съебаться",
+"съебашить",
+"съебенить",
+"съебурить",
+"съебёхать",
+"съёбывать",
+"уебленный",
+"худоебина",
+"хуебратия",
+"хуемудрие",
+"хуемыслие",
+"хуюживать",
+"хуюжиться",
+"хуякаться",
+"хуякивать",
+"хуяривать",
+"хуяриться",
+"хуячивать",
+"хуячиться",
+"хуяшивать",
+"хуяшиться",
+"дoёбывaюcь",
+"блядский",
+"блядское",
+"блядскую",
+"блядства",
+"блядство",
+"блядюшка",
+"вхуякать",
+"вхуярить",
+"вхуячить",
+"вхуяшить",
+"выблядок",
+"выебнуть",
+"выжопить",
+"заебался",
+"заебаный",
+"залупень",
+"залупить",
+"замудить",
+"заёбаный",
+"измудить",
+"изъебать",
+"мандавош",
+"мандячий",
+"наебнуть",
+"неебущий",
+"нехуёвое",
+"объебать",
+"объёбщик",
+"оебашить",
+"оебенить",
+"оебурить",
+"оебёхать",
+"омандить",
+"отъебать",
+"отъебись",
+"охуевать",
+"охуевший",
+"охуенные",
+"охуенный",
+"охуенчик",
+"охуякать",
+"охуярить",
+"охуячить",
+"охуяшить",
+"оёбывать",
+"подъебал",
+"подъёбка",
+"поёбочка",
+"приебать",
+"прихуеть",
+"проблядь",
+"проебали",
+"проебать",
+"разъебай",
+"распроёб",
+"смандить",
+"спиздили",
+"спизжена",
+"сприёбом",
+"схуябыта",
+"схуякать",
+"схуярить",
+"схуячить",
+"схуяшить",
+"траханий",
+"уебаться",
+"уебашить",
+"уебенить",
+"уебищная",
+"уебищный",
+"уебурить",
+"уебёхать",
+"умрисука",
+"ухуякать",
+"ухуярить",
+"ухуячить",
+"ухуяшить",
+"уёбищная",
+"уёбищной",
+"уёбывать",
+"хуеватый",
+"хуедрыга",
+"хуемырло",
+"хуякнугь",
+"хуяслице",
+"хуёвинка",
+"блядеха",
+"блядина",
+"блядище",
+"блядьмо",
+"блядюга",
+"блядюра",
+"вжопить",
+"въебать",
+"выебану",
+"выебать",
+"выебыва",
+"выёбыва",
+"вёбаную",
+"додрочу",
+"доебать",
+"доебыва",
+"доёбыва",
+"дрочити",
+"заебавш",
+"заебали",
+"заебало",
+"заебать",
+"заебели",
+"заебень",
+"заебись",
+"заморыш",
+"заёбина",
+"заёбышь",
+"йобаный",
+"мамкоеб",
+"мандавш",
+"мандить",
+"мозгоеб",
+"мозгоёб",
+"наебали",
+"наебать",
+"наёбщик",
+"нехуево",
+"нехуёво",
+"объебон",
+"объёбка",
+"оебнуть",
+"охуеван",
+"охуеная",
+"охуение",
+"охуенно",
+"охуеный",
+"охуярок",
+"перееба",
+"поебалу",
+"поебать",
+"поебень",
+"проебал",
+"разъёба",
+"съебать",
+"уебался",
+"уебанск",
+"уебищен",
+"уебывай",
+"уёбывай",
+"хуебень",
+"хуевато",
+"хуевого",
+"хуеглот",
+"хуегрыз",
+"хуекшен",
+"хуеньки",
+"хуеплет",
+"хуесосы",
+"хуетень",
+"хуюжить",
+"хуякать",
+"хуярить",
+"хуястый",
+"хуячить",
+"хуяшить",
+"хуёвина",
+"хуёмник",
+"гавен",
+"хуё-моё",
+"блджад",
+"блеать",
+"блядво",
+"блядей",
+"блядин",
+"блядун",
+"блятьб",
+"блятья",
+"выбляд",
+"выебон",
+"вьебал",
+"дохера",
+"дрочит",
+"дуроёб",
+"залупа",
+"залупе",
+"мандеж",
+"мандец",
+"мандов",
+"мандой",
+"мандюк",
+"наебка",
+"нахера",
+"наёбка",
+"наёбыш",
+"неебёт",
+"нихера",
+"оебать",
+"ослоеб",
+"ослоёб",
+"охуели",
+"охуеть",
+"пездеж",
+"перееб",
+"пиздос",
+"подъеб",
+"подьеб",
+"поебен",
+"поебон",
+"разъеб",
+"разьеб",
+"распиж",
+"распиз",
+"съебёт",
+"уебать",
+"уебище",
+"уебков",
+"уёбище",
+"уёбков",
+"хуевая",
+"хуевый",
+"хуенно",
+"хуерык",
+"хуютик",
+"хуюшки",
+"хуяция",
+"хуячий",
+"хуёвый",
+"хуёвым",
+"хуёчек",
+"eбучий",
+"гавн",
+"b+l+y+a+t+",
+"аебал",
+"блеад",
+"блеат",
+"блеть",
+"бляди",
+"блядо",
+"блядь",
+"блятб",
+"блятс",
+"блять",
+"бляць",
+"вахуе",
+"вобля",
+"выеть",
+"дохуя",
+"ебать",
+"етися",
+"залуп",
+"захуя",
+"заёба",
+"изъеб",
+"изьеб",
+"ипать",
+"лайна",
+"лайно",
+"манда",
+"манде",
+"манду",
+"манды",
+"напиз",
+"нахер",
+"нахуя",
+"нехер",
+"нихуя",
+"объеб",
+"отпиж",
+"отпиз",
+"отъеб",
+"отьеб",
+"охуев",
+"охуел",
+"охуен",
+"педик",
+"пезда",
+"пздец",
+"пидор",
+"пизад",
+"пизда",
+"писос",
+"попиз",
+"похер",
+"похую",
+"приеб",
+"проеб",
+"проёб",
+"пізда",
+"разеб",
+"репиж",
+"репиз",
+"сукин",
+"сучий",
+"тыбля",
+"уебан",
+"уебка",
+"уебок",
+"уёбак",
+"уёбка",
+"уёбки",
+"уёбок",
+"уёбыш",
+"хуева",
+"хуево",
+"хуеву",
+"хуета",
+"хуету",
+"хуякс",
+"хуями",
+"хуёво",
+"хуёза",
+"ъебал",
+"ъебат",
+"eбyчиe",
+"аху\\w+",
+"пuзде",
+"пи3да",
+"похyй",
+"xyйня",
+"блэт",
+"бляд",
+"бляц",
+"въеб",
+"выеб",
+"вьеб",
+"доеб",
+"епта",
+"заеб",
+"заёб",
+"изеб",
+"нaхyй",
+"наеб",
+"наёб",
+"опиз",
+"отыб",
+"пздц",
+"пиже",
+"пижж",
+"поеб",
+"сука",
+"суку",
+"съеб",
+"уеба",
+"уебк",
+"уеть",
+"упиж",
+"упиз",
+"хуев",
+"хуее",
+"хуек",
+"хуел",
+"хуем",
+"хуен",
+"хуеп",
+"хуес",
+"хует",
+"хуец",
+"хуею",
+"хуле",
+"хули",
+"хуль",
+"хуля",
+"хуюж",
+"хуюш",
+"хуяк",
+"хуям",
+"хуёв",
+"ъеби",
+"ёпта",
+"бля+",
+"еб",
+"нexyй",
+"пи3д",
+"ёб",
+"pizdec",
+"бле",
+"бля",
+"ети",
+"збс",
+"йух",
+"нах",
+"оеб",
+"пнх",
+"пох",
+"уеб",
+"хня",
+"хуе",
+"хую",
+"хуя",
+"хуё",
+"яеб",
+"bylat",
+"nahui",
+"хyи",
+"blya",
+"хитровыебанн",
+"захуярил",
+"наебашил",
+"поебался",
+"разъебал",
+"выебанн",
+"сьебись",
+"заебал",
+"наебал",
+"наебаш",
+"оебыва",
+"охуенн",
+"съебал",
+"сьебал",
+"хуесос",
+"ъебись",
+"eбался",
+"eбaный",
+"уебал",
+"пизд",
+"пизж",
+"хуи",
+"хуй"
+]
\ No newline at end of file
diff --git a/js/languages/package.json b/js/languages/package.json
new file mode 100644
index 0000000..f689556
--- /dev/null
+++ b/js/languages/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "@badwords/languages",
+ "version": "2.2.0",
+ "description": "Optional language word lists for badwords-wasm",
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/FlacSy/badwords"
+ },
+ "homepage": "https://badwords.flacsy.dev",
+ "bugs": "https://github.com/FlacSy/badwords/issues",
+ "author": "FlacSy ",
+ "keywords": [
+ "badwords",
+ "profanity",
+ "filter",
+ "languages"
+ ],
+ "exports": {
+ "./br": "./lang/br.json",
+ "./cz": "./lang/cz.json",
+ "./da": "./lang/da.json",
+ "./de": "./lang/de.json",
+ "./du": "./lang/du.json",
+ "./en": "./lang/en.json",
+ "./fi": "./lang/fi.json",
+ "./fr": "./lang/fr.json",
+ "./gr": "./lang/gr.json",
+ "./hu": "./lang/hu.json",
+ "./in": "./lang/in.json",
+ "./it": "./lang/it.json",
+ "./ja": "./lang/ja.json",
+ "./ko": "./lang/ko.json",
+ "./lt": "./lang/lt.json",
+ "./no": "./lang/no.json",
+ "./pl": "./lang/pl.json",
+ "./po": "./lang/po.json",
+ "./ro": "./lang/ro.json",
+ "./ru": "./lang/ru.json",
+ "./sp": "./lang/sp.json",
+ "./sw": "./lang/sw.json",
+ "./th": "./lang/th.json",
+ "./tu": "./lang/tu.json",
+ "./ua": "./lang/ua.json",
+ ".": "./index.js",
+ "./package.json": "./package.json"
+ },
+ "files": [
+ "lang",
+ "index.js"
+ ]
+}
\ No newline at end of file
diff --git a/pyproject.toml b/pyproject.toml
index 9ebe39d..249dff5 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,10 +1,10 @@
[build-system]
-requires = ["setuptools>=61.0", "wheel"]
-build-backend = "setuptools.build_meta"
+requires = ["maturin>=1.0,<2.0"]
+build-backend = "maturin"
[project]
name = "badwords-py"
-version = "2.1.0"
+version = "2.2.0"
requires-python = ">=3.10"
authors = [
{name = "iamlostshe", email = "vanamelcikov7275@gmail.com"},
@@ -16,9 +16,8 @@ license = {text = "MIT"}
keywords = [
"moderation",
"content filtering",
- "obscenity detection",
- "mood analysis",
- "image moderation"
+ "profanity",
+ "obscenity detection"
]
classifiers = [
"Programming Language :: Python :: 3",
@@ -32,17 +31,25 @@ classifiers = [
"Topic :: Software Development :: Libraries :: Python Modules",
]
+[project.optional-dependencies]
+dev = ["pytest>=7.0", "pytest-benchmark>=4.0"]
+
[project.urls]
-Homepage = "https://github.com/FlacSy/badwords"
-Repository = "https://github.com/FlacSy/badwords.git"
+Homepage = "https://badwords.flacsy.dev"
+Documentation = "https://badwords.flacsy.dev"
+Repository = "https://github.com/FlacSy/badwords"
Issues = "https://github.com/FlacSy/badwords/issues"
-[tool.ruff]
-select = ["ALL"]
+[tool.pytest.ini_options]
+testpaths = ["tests"]
+markers = ["benchmark: run benchmarks (deselect with '-m \"not benchmark\"')"]
-[tool.setuptools.package-data]
-badwords = ["resource/**/*"]
+[tool.ruff.lint]
+select = ["ALL"]
+ignore = ["D203", "D213", "COM812"]
-[tool.setuptools]
-zip-safe = false
-include-package-data = true
+[tool.maturin]
+manifest-path = "rust/badwords-py/Cargo.toml"
+python-source = "python"
+python-packages = ["badwords"]
+module-name = "badwords._native"
diff --git a/python/badwords/__init__.py b/python/badwords/__init__.py
new file mode 100644
index 0000000..d479c1d
--- /dev/null
+++ b/python/badwords/__init__.py
@@ -0,0 +1,84 @@
+"""A library for effective moderation of content."""
+
+from __future__ import annotations
+
+from pathlib import Path
+
+from ._native import PyProfanityFilter
+from .exceptions import NotSupportedLanguage
+
+# Resource directory next to this package
+_RESOURCE_DIR = Path(__file__).parent / "resource"
+
+
+class ProfanityFilter:
+ """High-performance profanity filter (Rust backend).
+
+ Create filter, then call init() to load languages::
+
+ p = ProfanityFilter()
+ p.init(languages=["en", "ru"])
+ """
+
+ def __init__(self) -> None:
+ self._native: PyProfanityFilter | None = None
+
+ def init(
+ self,
+ languages: list[str] | None = None,
+ *,
+ processing_normalize_text: bool = True,
+ processing_aggressive_normalize: bool = True,
+ processing_transliterate: bool = True,
+ processing_replace_homoglyphs: bool = True,
+ ) -> None:
+ """Initialize the filter and load word lists.
+
+ :param languages: List of language codes to load. None = all available.
+ """
+ self._native = PyProfanityFilter(
+ str(_RESOURCE_DIR),
+ processing_normalize_text,
+ processing_aggressive_normalize,
+ processing_transliterate,
+ processing_replace_homoglyphs,
+ )
+ try:
+ self._native.init(languages)
+ except ValueError as e:
+ if "not supported" in str(e).lower():
+ raise NotSupportedLanguage from e
+ raise
+
+ def add_words(self, words: list[str]) -> None:
+ """Add custom profanity words."""
+ self._ensure_init()
+ self._native.add_words(words)
+
+ def filter_text(
+ self,
+ text: str,
+ match_threshold: float | None = None,
+ replace_character: str | None = None,
+ ) -> bool | str:
+ """Check text for profanity. Returns bool or censored str."""
+ self._ensure_init()
+ return self._native.filter_text(
+ text,
+ match_threshold or 1.0,
+ replace_character,
+ )
+
+ def get_all_languages(self) -> list[str]:
+ """Return list of loaded language codes."""
+ self._ensure_init()
+ return self._native.get_all_languages()
+
+ def similar(self, a: str, b: str) -> float:
+ """Similarity ratio between two strings."""
+ self._ensure_init()
+ return self._native.similar(a, b)
+
+ def _ensure_init(self) -> None:
+ if self._native is None:
+ raise RuntimeError("ProfanityFilter not initialized. Call init() first.")
diff --git a/python/badwords/exceptions.py b/python/badwords/exceptions.py
new file mode 100644
index 0000000..6f5e2e1
--- /dev/null
+++ b/python/badwords/exceptions.py
@@ -0,0 +1,9 @@
+"""Exceptions module."""
+
+
+class NotSupportedLanguage(Exception):
+ """Unsupported language check."""
+
+ def __str__(self) -> str:
+ """String-like representation of exception."""
+ return "This language is not supported"
diff --git a/badwords/resource/character_frequency.json b/python/badwords/resource/data/character_frequency.json
similarity index 100%
rename from badwords/resource/character_frequency.json
rename to python/badwords/resource/data/character_frequency.json
diff --git a/badwords/resource/homoglyphs.json b/python/badwords/resource/data/homoglyphs.json
similarity index 100%
rename from badwords/resource/homoglyphs.json
rename to python/badwords/resource/data/homoglyphs.json
diff --git a/badwords/resource/transliteration.json b/python/badwords/resource/data/transliteration.json
similarity index 100%
rename from badwords/resource/transliteration.json
rename to python/badwords/resource/data/transliteration.json
diff --git a/badwords/resource/unicode_mappings.json b/python/badwords/resource/data/unicode_mappings.json
similarity index 100%
rename from badwords/resource/unicode_mappings.json
rename to python/badwords/resource/data/unicode_mappings.json
diff --git a/badwords/resource/br.bdw b/python/badwords/resource/words/br.txt
similarity index 100%
rename from badwords/resource/br.bdw
rename to python/badwords/resource/words/br.txt
diff --git a/badwords/resource/cz.bdw b/python/badwords/resource/words/cz.txt
similarity index 100%
rename from badwords/resource/cz.bdw
rename to python/badwords/resource/words/cz.txt
diff --git a/badwords/resource/da.bdw b/python/badwords/resource/words/da.txt
similarity index 100%
rename from badwords/resource/da.bdw
rename to python/badwords/resource/words/da.txt
diff --git a/badwords/resource/de.bdw b/python/badwords/resource/words/de.txt
similarity index 100%
rename from badwords/resource/de.bdw
rename to python/badwords/resource/words/de.txt
diff --git a/badwords/resource/du.bdw b/python/badwords/resource/words/du.txt
similarity index 100%
rename from badwords/resource/du.bdw
rename to python/badwords/resource/words/du.txt
diff --git a/badwords/resource/en.bdw b/python/badwords/resource/words/en.txt
similarity index 100%
rename from badwords/resource/en.bdw
rename to python/badwords/resource/words/en.txt
diff --git a/badwords/resource/fi.bdw b/python/badwords/resource/words/fi.txt
similarity index 100%
rename from badwords/resource/fi.bdw
rename to python/badwords/resource/words/fi.txt
diff --git a/badwords/resource/fr.bdw b/python/badwords/resource/words/fr.txt
similarity index 100%
rename from badwords/resource/fr.bdw
rename to python/badwords/resource/words/fr.txt
diff --git a/badwords/resource/gr.bdw b/python/badwords/resource/words/gr.txt
similarity index 100%
rename from badwords/resource/gr.bdw
rename to python/badwords/resource/words/gr.txt
diff --git a/badwords/resource/hu.bdw b/python/badwords/resource/words/hu.txt
similarity index 100%
rename from badwords/resource/hu.bdw
rename to python/badwords/resource/words/hu.txt
diff --git a/badwords/resource/in.bdw b/python/badwords/resource/words/in.txt
similarity index 100%
rename from badwords/resource/in.bdw
rename to python/badwords/resource/words/in.txt
diff --git a/badwords/resource/it.bdw b/python/badwords/resource/words/it.txt
similarity index 100%
rename from badwords/resource/it.bdw
rename to python/badwords/resource/words/it.txt
diff --git a/badwords/resource/ja.bdw b/python/badwords/resource/words/ja.txt
similarity index 100%
rename from badwords/resource/ja.bdw
rename to python/badwords/resource/words/ja.txt
diff --git a/badwords/resource/ko.bdw b/python/badwords/resource/words/ko.txt
similarity index 100%
rename from badwords/resource/ko.bdw
rename to python/badwords/resource/words/ko.txt
diff --git a/badwords/resource/lt.bdw b/python/badwords/resource/words/lt.txt
similarity index 100%
rename from badwords/resource/lt.bdw
rename to python/badwords/resource/words/lt.txt
diff --git a/badwords/resource/no.bdw b/python/badwords/resource/words/no.txt
similarity index 100%
rename from badwords/resource/no.bdw
rename to python/badwords/resource/words/no.txt
diff --git a/badwords/resource/pl.bdw b/python/badwords/resource/words/pl.txt
similarity index 100%
rename from badwords/resource/pl.bdw
rename to python/badwords/resource/words/pl.txt
diff --git a/badwords/resource/po.bdw b/python/badwords/resource/words/po.txt
similarity index 100%
rename from badwords/resource/po.bdw
rename to python/badwords/resource/words/po.txt
diff --git a/badwords/resource/ro.bdw b/python/badwords/resource/words/ro.txt
similarity index 100%
rename from badwords/resource/ro.bdw
rename to python/badwords/resource/words/ro.txt
diff --git a/badwords/resource/ru.bdw b/python/badwords/resource/words/ru.txt
similarity index 100%
rename from badwords/resource/ru.bdw
rename to python/badwords/resource/words/ru.txt
diff --git a/badwords/resource/sp.bdw b/python/badwords/resource/words/sp.txt
similarity index 100%
rename from badwords/resource/sp.bdw
rename to python/badwords/resource/words/sp.txt
diff --git a/badwords/resource/sw.bdw b/python/badwords/resource/words/sw.txt
similarity index 100%
rename from badwords/resource/sw.bdw
rename to python/badwords/resource/words/sw.txt
diff --git a/badwords/resource/th.bdw b/python/badwords/resource/words/th.txt
similarity index 100%
rename from badwords/resource/th.bdw
rename to python/badwords/resource/words/th.txt
diff --git a/badwords/resource/tu.bdw b/python/badwords/resource/words/tu.txt
similarity index 100%
rename from badwords/resource/tu.bdw
rename to python/badwords/resource/words/tu.txt
diff --git a/badwords/resource/ua.bdw b/python/badwords/resource/words/ua.txt
similarity index 100%
rename from badwords/resource/ua.bdw
rename to python/badwords/resource/words/ua.txt
diff --git a/python/pyproject.toml b/python/pyproject.toml
new file mode 100644
index 0000000..c124c52
--- /dev/null
+++ b/python/pyproject.toml
@@ -0,0 +1,53 @@
+[build-system]
+requires = ["maturin>=1.0,<2.0"]
+build-backend = "maturin"
+
+[project]
+name = "badwords-py"
+version = "2.2.0"
+requires-python = ">=3.10"
+authors = [
+ {name = "iamlostshe", email = "vanamelcikov7275@gmail.com"},
+ {name = "FlacSy", email = "flacsy.x@gmail.com"},
+]
+description = "This is a library for effective moderation of content."
+readme = "../README.md"
+license = {text = "MIT"}
+keywords = [
+ "moderation",
+ "content filtering",
+ "profanity",
+ "obscenity detection"
+]
+classifiers = [
+ "Programming Language :: Python :: 3",
+ "Programming Language :: Python :: 3.10",
+ "Programming Language :: Python :: 3.11",
+ "Programming Language :: Python :: 3.12",
+ "Programming Language :: Python :: 3.13",
+ "Operating System :: OS Independent",
+ "Development Status :: 5 - Production/Stable",
+ "Intended Audience :: Developers",
+ "Topic :: Software Development :: Libraries :: Python Modules",
+]
+
+[project.optional-dependencies]
+dev = ["pytest>=7.0", "pytest-benchmark>=4.0"]
+
+[project.urls]
+Homepage = "https://github.com/FlacSy/badwords"
+Repository = "https://github.com/FlacSy/badwords.git"
+Issues = "https://github.com/FlacSy/badwords/issues"
+
+[tool.pytest.ini_options]
+testpaths = ["../tests"]
+
+[tool.ruff.lint]
+select = ["ALL"]
+ignore = ["D203", "D213", "COM812"]
+
+[tool.maturin]
+manifest-path = "../rust/badwords-py/Cargo.toml"
+python-source = "."
+python-packages = ["badwords"]
+module-name = "badwords._native"
diff --git a/rust/badwords-core/Cargo.toml b/rust/badwords-core/Cargo.toml
new file mode 100644
index 0000000..b2c99d7
--- /dev/null
+++ b/rust/badwords-core/Cargo.toml
@@ -0,0 +1,29 @@
+[package]
+name = "badwords-core"
+version = "2.2.0"
+edition = "2021"
+description = "Core profanity filter logic - normalization, transliteration, homoglyphs"
+license = "MIT"
+repository = "https://github.com/FlacSy/badwords"
+homepage = "https://badwords.flacsy.dev"
+documentation = "https://badwords.flacsy.dev"
+keywords = ["profanity", "filter", "moderation", "content"]
+categories = ["text-processing"]
+authors = ["FlacSy ", "iamlostshe "]
+
+[lib]
+crate-type = ["rlib"]
+
+[[bench]]
+name = "filter"
+harness = false
+
+[dependencies]
+rustc-hash = "2.0"
+serde = { version = "1.0", features = ["derive"] }
+serde_json = "1.0"
+unicode-normalization = "0.1"
+strsim = "0.11"
+
+[dev-dependencies]
+criterion = "0.5"
diff --git a/rust/badwords-core/benches/filter.rs b/rust/badwords-core/benches/filter.rs
new file mode 100644
index 0000000..fafa282
--- /dev/null
+++ b/rust/badwords-core/benches/filter.rs
@@ -0,0 +1,81 @@
+//! Benchmarks for badwords-core filter.
+
+use badwords_core::{default_resource_dir, ProfanityFilter};
+use criterion::{black_box, criterion_group, criterion_main, Criterion};
+
+fn make_filter() -> ProfanityFilter {
+ let resource_dir = default_resource_dir();
+ let mut filter = ProfanityFilter::new(&resource_dir, true, true, true, true);
+ filter.init(Some(&["en".to_string(), "ru".to_string()])).unwrap();
+ filter
+}
+
+fn bench_filter_clean(c: &mut Criterion) {
+ let filter = make_filter();
+ c.bench_function("filter_text_clean", |b| {
+ b.iter(|| {
+ let (found, _) = filter.filter_text(
+ black_box("Hello, this is a clean message for testing."),
+ 1.0,
+ None,
+ );
+ found
+ })
+ });
+}
+
+fn bench_filter_bad(c: &mut Criterion) {
+ let filter = make_filter();
+ c.bench_function("filter_text_bad", |b| {
+ b.iter(|| {
+ let (found, _) = filter.filter_text(
+ black_box("Some bad words here"),
+ 1.0,
+ None,
+ );
+ found
+ })
+ });
+}
+
+fn bench_filter_censor(c: &mut Criterion) {
+ let filter = make_filter();
+ c.bench_function("filter_text_censor", |b| {
+ b.iter(|| {
+ let (found, result) = filter.filter_text(
+ black_box("Replace bad word"),
+ 1.0,
+ Some('*'),
+ );
+ (found, result)
+ })
+ });
+}
+
+fn bench_filter_many(c: &mut Criterion) {
+ let filter = make_filter();
+ let texts: Vec<&str> = vec![
+ "Hello world",
+ "Clean message",
+ "Some text with potential",
+ "Another clean one",
+ "Final test string",
+ ];
+ c.bench_function("filter_text_many", |b| {
+ b.iter(|| {
+ for text in &texts {
+ let (found, _) = filter.filter_text(black_box(*text), 1.0, None);
+ black_box(found);
+ }
+ })
+ });
+}
+
+criterion_group!(
+ benches,
+ bench_filter_clean,
+ bench_filter_bad,
+ bench_filter_censor,
+ bench_filter_many
+);
+criterion_main!(benches);
diff --git a/rust/badwords-core/src/filter.rs b/rust/badwords-core/src/filter.rs
new file mode 100644
index 0000000..76311cf
--- /dev/null
+++ b/rust/badwords-core/src/filter.rs
@@ -0,0 +1,273 @@
+//! Profanity filter - main API.
+
+use std::collections::HashMap;
+use std::path::Path;
+
+use rustc_hash::FxHashSet;
+use strsim::jaro_winkler;
+
+use crate::processor::TextProcessor;
+
+#[derive(Debug)]
+pub struct ProfanityFilter {
+ words_dir: Option,
+ #[allow(dead_code)]
+ data_dir: Option,
+ processor: TextProcessor,
+ language_files: Vec,
+ bad_words: FxHashSet,
+}
+
+#[derive(Debug)]
+pub struct NotSupportedLanguage;
+
+impl std::fmt::Display for NotSupportedLanguage {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ write!(f, "This language is not supported")
+ }
+}
+
+impl std::error::Error for NotSupportedLanguage {}
+
+impl ProfanityFilter {
+ pub fn new(
+ resource_dir: &Path,
+ normalize_text: bool,
+ aggressive_normalize: bool,
+ transliterate: bool,
+ replace_homoglyphs: bool,
+ ) -> Self {
+ let words_dir = resource_dir.join("words");
+ let data_dir = resource_dir.join("data");
+
+ let mut processor = TextProcessor::new(
+ normalize_text,
+ aggressive_normalize,
+ transliterate,
+ replace_homoglyphs,
+ );
+ processor.load_from_dir(&data_dir).ok();
+
+ let language_files = Self::discover_languages(&words_dir);
+ let bad_words = FxHashSet::default();
+
+ Self {
+ words_dir: Some(words_dir),
+ data_dir: Some(data_dir),
+ processor,
+ language_files,
+ bad_words,
+ }
+ }
+
+ /// Create filter from embedded string data (no filesystem). Use for WASM/embedded.
+ pub fn new_from_embedded(
+ unicode_mappings_json: &str,
+ homoglyphs_json: &str,
+ transliteration_json: &str,
+ words_by_lang: &HashMap,
+ languages: Vec,
+ normalize_text: bool,
+ aggressive_normalize: bool,
+ transliterate: bool,
+ replace_homoglyphs: bool,
+ ) -> Result> {
+ let mut processor = TextProcessor::new(
+ normalize_text,
+ aggressive_normalize,
+ transliterate,
+ replace_homoglyphs,
+ );
+ processor.load_from_str(
+ unicode_mappings_json,
+ homoglyphs_json,
+ transliteration_json,
+ )?;
+
+ let bad_words = Self::load_bad_words_from_content(&processor, words_by_lang, &languages);
+
+ Ok(Self {
+ words_dir: None,
+ data_dir: None,
+ processor,
+ language_files: languages,
+ bad_words,
+ })
+ }
+
+ fn load_bad_words_from_content(
+ processor: &TextProcessor,
+ words_by_lang: &HashMap,
+ languages: &[String],
+ ) -> FxHashSet {
+ let mut bad_words = FxHashSet::default();
+ for lang in languages {
+ let lang = lang.to_lowercase().trim().to_string();
+ if !lang.chars().all(|c| c.is_alphabetic()) {
+ continue;
+ }
+ if let Some(content) = words_by_lang.get(&lang) {
+ for line in content.lines() {
+ let processed = processor.process_text(line);
+ if !processed.is_empty() {
+ bad_words.insert(processed);
+ }
+ }
+ }
+ }
+ bad_words
+ }
+
+ pub fn init(
+ &mut self,
+ languages: Option<&[String]>,
+ ) -> Result<(), NotSupportedLanguage> {
+ if let Some(langs) = languages {
+ let available: FxHashSet<_> = self.language_files.iter().collect();
+ for lang in langs {
+ if !available.contains(lang) {
+ return Err(NotSupportedLanguage);
+ }
+ }
+ self.language_files = langs.to_vec();
+ }
+
+ if self.words_dir.is_some() {
+ self.bad_words = self.load_bad_words();
+ }
+ Ok(())
+ }
+
+ fn discover_languages(words_dir: &Path) -> Vec {
+ let mut langs = Vec::new();
+ if let Ok(entries) = std::fs::read_dir(words_dir) {
+ for entry in entries.flatten() {
+ let path = entry.path();
+ if path.extension().map_or(false, |e| e == "txt") {
+ if let Some(stem) = path.file_stem() {
+ if let Some(s) = stem.to_str() {
+ langs.push(s.to_string());
+ }
+ }
+ }
+ }
+ }
+ langs.sort();
+ langs
+ }
+
+ fn load_bad_words(&self) -> FxHashSet {
+ let mut bad_words = FxHashSet::default();
+ let words_dir = match &self.words_dir {
+ Some(p) => p,
+ None => return bad_words,
+ };
+
+ for lang in &self.language_files {
+ let lang = lang.to_lowercase().trim().to_string();
+ if !lang.chars().all(|c| c.is_alphabetic()) {
+ continue;
+ }
+
+ let path = words_dir.join(format!("{}.txt", lang));
+ if !path.exists() {
+ continue;
+ }
+
+ if let Ok(content) = std::fs::read_to_string(&path) {
+ for line in content.lines() {
+ let processed = self.processor.process_text(line);
+ if !processed.is_empty() {
+ bad_words.insert(processed);
+ }
+ }
+ }
+ }
+
+ bad_words
+ }
+
+ pub fn add_words(&mut self, words: &[String]) {
+ for word in words {
+ let processed = self.processor.process_text(word);
+ if !processed.is_empty() {
+ self.bad_words.insert(processed);
+ }
+ }
+ }
+
+ pub fn similar(&self, a: &str, b: &str) -> f64 {
+ jaro_winkler(a, b) as f64
+ }
+
+ /// Returns: (found, optional_replaced_text)
+ pub fn filter_text(
+ &self,
+ text: &str,
+ match_threshold: f64,
+ replace_char: Option,
+ ) -> (bool, Option) {
+ // Collect (original_word, byte_start, byte_end) for each word
+ let mut word_spans: Vec<(&str, usize, usize)> = Vec::new();
+ let mut start = 0;
+ let mut in_word = false;
+ for (i, c) in text.char_indices() {
+ if c.is_whitespace() {
+ if in_word {
+ word_spans.push((&text[start..i], start, i));
+ in_word = false;
+ }
+ } else if !in_word {
+ start = i;
+ in_word = true;
+ }
+ }
+ if in_word {
+ word_spans.push((&text[start..], start, text.len()));
+ }
+
+ let mut replacements: Vec<(usize, usize, String)> = Vec::new();
+ for (original_word, byte_start, byte_end) in &word_spans {
+ let processed = self.processor.process_text(original_word);
+ if processed.is_empty() {
+ continue;
+ }
+
+ let mut found = self.bad_words.contains(&processed);
+ if !found && match_threshold < 1.0 && match_threshold > 0.0 {
+ for bad in &self.bad_words {
+ if self.similar(&processed, bad) > match_threshold {
+ found = true;
+ break;
+ }
+ }
+ }
+
+ if found {
+ if let Some(ch) = replace_char {
+ let replacement: String =
+ std::iter::repeat(ch).take(original_word.chars().count()).collect();
+ replacements.push((*byte_start, *byte_end, replacement));
+ } else {
+ return (true, None);
+ }
+ }
+ }
+
+ if replacements.is_empty() {
+ return (false, None);
+ }
+
+ // Apply replacements from end to start to preserve indices
+ replacements.sort_by_key(|(s, _, _)| std::cmp::Reverse(*s));
+ let mut result = text.to_string();
+ for (start, end, repl) in replacements {
+ result.replace_range(start..end, &repl);
+ }
+ (true, Some(result))
+ }
+
+ pub fn get_all_languages(&self) -> &[String] {
+ &self.language_files
+ }
+}
diff --git a/rust/badwords-core/src/lib.rs b/rust/badwords-core/src/lib.rs
new file mode 100644
index 0000000..ef821de
--- /dev/null
+++ b/rust/badwords-core/src/lib.rs
@@ -0,0 +1,84 @@
+//! BadWords core - profanity filter logic.
+
+mod filter;
+mod processor;
+
+pub use filter::{NotSupportedLanguage, ProfanityFilter};
+pub use processor::TextProcessor;
+
+/// Resource directory path when running from workspace (for examples).
+pub fn default_resource_dir() -> std::path::PathBuf {
+ std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../../python/badwords/resource")
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use std::collections::HashMap;
+
+ fn make_test_filter() -> ProfanityFilter {
+ let words_by_lang: HashMap = [
+ ("en".to_string(), "bad\nword\ntest".to_string()),
+ ("ru".to_string(), "плохо\nслово".to_string()),
+ ]
+ .into();
+
+ ProfanityFilter::new_from_embedded(
+ "{}",
+ "{}",
+ "{}",
+ &words_by_lang,
+ vec!["en".to_string(), "ru".to_string()],
+ true,
+ true,
+ false,
+ false,
+ )
+ .unwrap()
+ }
+
+ #[test]
+ fn test_clean_text_returns_false() {
+ let filter = make_test_filter();
+ let (found, _) = filter.filter_text("hello world", 1.0, None);
+ assert!(!found);
+ }
+
+ #[test]
+ fn test_bad_text_returns_true() {
+ let filter = make_test_filter();
+ let (found, _) = filter.filter_text("bad", 1.0, None);
+ assert!(found);
+ }
+
+ #[test]
+ fn test_add_words_detection() {
+ let mut filter = make_test_filter();
+ filter.add_words(&["custombad".to_string()]);
+ let (found, _) = filter.filter_text("custombad", 1.0, None);
+ assert!(found);
+ }
+
+ #[test]
+ fn test_censor_replaces_word() {
+ let mut filter = make_test_filter();
+ filter.add_words(&["bad".to_string()]);
+ let (found, result) = filter.filter_text("a bad thing", 1.0, Some('*'));
+ assert!(found);
+ assert_eq!(result, Some("a *** thing".to_string()));
+ }
+
+ #[test]
+ fn test_get_all_languages() {
+ let filter = make_test_filter();
+ let langs = filter.get_all_languages();
+ assert_eq!(langs, &["en", "ru"]);
+ }
+
+ #[test]
+ fn test_similar() {
+ let filter = make_test_filter();
+ assert!((filter.similar("hello", "hello") - 1.0).abs() < 0.001);
+ assert!(filter.similar("abc", "xyz") < 1.0);
+ }
+}
diff --git a/rust/badwords-core/src/processor.rs b/rust/badwords-core/src/processor.rs
new file mode 100644
index 0000000..a09e663
--- /dev/null
+++ b/rust/badwords-core/src/processor.rs
@@ -0,0 +1,228 @@
+//! Text processing: normalization, transliteration, homoglyphs.
+
+use std::collections::HashMap;
+use std::path::Path;
+use unicode_normalization::UnicodeNormalization;
+
+use serde::Deserialize;
+
+#[derive(Debug, Clone)]
+pub struct TextProcessor {
+ pub normalize_text: bool,
+ pub aggressive_normalize: bool,
+ pub transliterate: bool,
+ pub replace_homoglyphs: bool,
+ unicode_mappings: HashMap,
+ homoglyph_map: HashMap,
+ cyrillic_to_latin: HashMap,
+ latin_to_cyrillic: HashMap,
+}
+
+#[derive(Debug, Deserialize)]
+struct UnicodeMappingsFile {
+ #[serde(flatten)]
+ categories: HashMap>,
+}
+
+#[derive(Debug, Deserialize)]
+struct HomoglyphsFile(HashMap>);
+
+#[derive(Debug, Deserialize)]
+struct TransliterationFile {
+ cyrillic_to_latin: HashMap,
+}
+
+#[derive(Debug, Deserialize)]
+#[allow(dead_code)]
+struct CharacterFrequencyFile(HashMap>);
+
+impl TextProcessor {
+ pub fn new(
+ normalize_text: bool,
+ aggressive_normalize: bool,
+ transliterate: bool,
+ replace_homoglyphs: bool,
+ ) -> Self {
+ Self {
+ normalize_text,
+ aggressive_normalize,
+ transliterate,
+ replace_homoglyphs,
+ unicode_mappings: HashMap::new(),
+ homoglyph_map: HashMap::new(),
+ cyrillic_to_latin: HashMap::new(),
+ latin_to_cyrillic: HashMap::new(),
+ }
+ }
+
+ pub fn load_from_dir(&mut self, data_dir: &Path) -> Result<(), Box> {
+ let unicode_content = std::fs::read_to_string(data_dir.join("unicode_mappings.json"))?;
+ let homoglyph_content = std::fs::read_to_string(data_dir.join("homoglyphs.json"))?;
+ let translit_content = std::fs::read_to_string(data_dir.join("transliteration.json"))?;
+ self.load_from_str(&unicode_content, &homoglyph_content, &translit_content)
+ }
+
+ /// Load processor data from string content (no filesystem). Use for WASM/embedded.
+ pub fn load_from_str(
+ &mut self,
+ unicode_mappings_json: &str,
+ homoglyphs_json: &str,
+ transliteration_json: &str,
+ ) -> Result<(), Box> {
+ self.unicode_mappings = Self::parse_unicode_mappings(unicode_mappings_json)?;
+ self.homoglyph_map = Self::parse_homoglyph_map(homoglyphs_json)?;
+
+ if self.transliterate {
+ let (cyrillic_to_latin, latin_to_cyrillic) =
+ Self::parse_transliteration(transliteration_json)?;
+ self.cyrillic_to_latin = cyrillic_to_latin;
+ self.latin_to_cyrillic = latin_to_cyrillic;
+ }
+
+ Ok(())
+ }
+
+ fn parse_unicode_mappings(content: &str) -> Result, Box> {
+ let data: UnicodeMappingsFile = serde_json::from_str(content)?;
+
+ let mut mappings = HashMap::new();
+ for category in data.categories.values() {
+ for (k, v) in category {
+ if let (Some(from), Some(to)) = (k.chars().next(), v.chars().next()) {
+ mappings.insert(from, to);
+ }
+ }
+ }
+ Ok(mappings)
+ }
+
+ fn parse_homoglyph_map(content: &str) -> Result, Box> {
+ let data: HomoglyphsFile = serde_json::from_str(content)?;
+
+ let mut map = HashMap::new();
+ for (standard, variants) in data.0 {
+ let standard_char = standard.chars().next();
+ if let Some(std_c) = standard_char {
+ for variant in variants {
+ if let Some(var_c) = variant.chars().next() {
+ map.insert(var_c, std_c);
+ }
+ }
+ }
+ }
+ Ok(map)
+ }
+
+ fn parse_transliteration(
+ content: &str,
+ ) -> Result<(HashMap, HashMap), Box> {
+ let data: TransliterationFile = serde_json::from_str(content)?;
+
+ let mut cyrillic_to_latin = HashMap::new();
+ let mut latin_to_cyrillic = HashMap::new();
+
+ for (k, v) in data.cyrillic_to_latin {
+ if let Some(cyr) = k.chars().next() {
+ cyrillic_to_latin.insert(cyr, v.clone());
+ latin_to_cyrillic.insert(v, cyr);
+ }
+ }
+ Ok((cyrillic_to_latin, latin_to_cyrillic))
+ }
+
+ /// Single-pass normalization: unicode mappings + filter + collapse whitespace.
+ /// Merges normalize_text and aggressive_normalize to avoid duplicate passes.
+ fn normalize_unicode_and_filter(&self, text: &str, allow_underscore: bool) -> String {
+ let text = text.nfkc().collect::();
+ let filtered: String = text
+ .to_lowercase()
+ .chars()
+ .map(|c| *self.unicode_mappings.get(&c).unwrap_or(&c))
+ .filter(|c| {
+ c.is_alphanumeric()
+ || c.is_whitespace()
+ || (allow_underscore && *c == '_')
+ })
+ .collect();
+ filtered.split_whitespace().collect::>().join(" ")
+ }
+
+ fn transliterate_char(&self, c: char, to_latin: bool) -> String {
+ if to_latin {
+ self.cyrillic_to_latin
+ .get(&c)
+ .cloned()
+ .unwrap_or_else(|| c.to_string())
+ } else {
+ let mut s = String::new();
+ s.push(c);
+ self.latin_to_cyrillic
+ .get(&s)
+ .map(|&cyr| cyr.to_string())
+ .unwrap_or_else(|| c.to_string())
+ }
+ }
+
+ fn transliterate(&self, text: &str, to_latin: bool) -> String {
+ if to_latin {
+ text.chars()
+ .map(|c| self.transliterate_char(c, true))
+ .collect::>()
+ .join("")
+ } else {
+ let mut result = String::new();
+ let mut i = 0;
+ let chars: Vec = text.chars().collect();
+ while i < chars.len() {
+ let mut matched = false;
+ for len in (1..=4).rev() {
+ if i + len <= chars.len() {
+ let chunk: String = chars[i..i + len].iter().collect();
+ if let Some(&cyr) = self.latin_to_cyrillic.get(&chunk) {
+ result.push(cyr);
+ i += len;
+ matched = true;
+ break;
+ }
+ }
+ }
+ if !matched {
+ result.push(chars[i]);
+ i += 1;
+ }
+ }
+ result
+ }
+ }
+
+ fn replace_homoglyphs(&self, text: &str) -> String {
+ text.chars()
+ .map(|c| *self.homoglyph_map.get(&c).unwrap_or(&c))
+ .collect()
+ }
+
+ #[inline]
+ fn contains_cyrillic(text: &str) -> bool {
+ text.chars().any(|c| ('\u{0400}'..='\u{04FF}').contains(&c))
+ }
+
+ pub fn process_text(&self, text: &str) -> String {
+ let mut txt = if self.normalize_text || self.aggressive_normalize {
+ let allow_underscore = self.normalize_text && !self.aggressive_normalize;
+ self.normalize_unicode_and_filter(text, allow_underscore)
+ } else {
+ text.to_string()
+ };
+
+ if self.transliterate {
+ if Self::contains_cyrillic(&txt) {
+ txt = self.transliterate(&txt, true);
+ }
+ txt = self.transliterate(&txt, false);
+ }
+ if self.replace_homoglyphs {
+ txt = self.replace_homoglyphs(&txt);
+ }
+ txt
+ }
+}
diff --git a/rust/badwords-py/Cargo.toml b/rust/badwords-py/Cargo.toml
new file mode 100644
index 0000000..7390632
--- /dev/null
+++ b/rust/badwords-py/Cargo.toml
@@ -0,0 +1,17 @@
+[package]
+name = "badwords-py"
+version = "2.2.0"
+edition = "2021"
+description = "Python bindings for badwords profanity filter"
+license = "MIT"
+repository = "https://github.com/FlacSy/badwords"
+homepage = "https://badwords.flacsy.dev"
+authors = ["FlacSy ", "iamlostshe "]
+
+[lib]
+name = "_native"
+crate-type = ["cdylib", "rlib"]
+
+[dependencies]
+badwords-core = { path = "../badwords-core" }
+pyo3 = { version = "0.22", features = ["extension-module"] }
diff --git a/rust/badwords-py/src/lib.rs b/rust/badwords-py/src/lib.rs
new file mode 100644
index 0000000..915fc1a
--- /dev/null
+++ b/rust/badwords-py/src/lib.rs
@@ -0,0 +1,110 @@
+//! PyO3 bindings for Python.
+
+use pyo3::exceptions::PyValueError;
+use pyo3::prelude::*;
+use pyo3::types::PyList;
+
+use badwords_core::ProfanityFilter;
+
+#[pyclass]
+struct PyProfanityFilter {
+ inner: ProfanityFilter,
+}
+
+#[pymethods]
+impl PyProfanityFilter {
+ #[new]
+ #[pyo3(signature = (resource_dir, normalize_text=true, aggressive_normalize=true, transliterate=true, replace_homoglyphs=true))]
+ fn new(
+ resource_dir: &str,
+ normalize_text: bool,
+ aggressive_normalize: bool,
+ transliterate: bool,
+ replace_homoglyphs: bool,
+ ) -> PyResult {
+ let path = std::path::Path::new(resource_dir);
+ let filter = ProfanityFilter::new(
+ path,
+ normalize_text,
+ aggressive_normalize,
+ transliterate,
+ replace_homoglyphs,
+ );
+ Ok(Self { inner: filter })
+ }
+
+ #[pyo3(signature = (languages=None))]
+ fn init(
+ &mut self,
+ languages: Option<&Bound<'_, PyList>>,
+ ) -> PyResult<()> {
+ let langs = languages.map(|list| {
+ list.iter()
+ .map(|o| o.extract::())
+ .collect::, _>>()
+ });
+ let langs = match langs {
+ Some(Ok(l)) => Some(l),
+ Some(Err(e)) => return Err(e),
+ None => None,
+ };
+ self.inner
+ .init(langs.as_deref())
+ .map_err(|_| PyErr::new::("This language is not supported"))?;
+ Ok(())
+ }
+
+ fn add_words(&mut self, words: &Bound<'_, PyList>) -> PyResult<()> {
+ let words: Vec = words
+ .iter()
+ .map(|o| o.extract::())
+ .collect::>()?;
+ self.inner.add_words(&words);
+ Ok(())
+ }
+
+ fn similar(&self, a: &str, b: &str) -> f64 {
+ self.inner.similar(a, b)
+ }
+
+ #[pyo3(signature = (text, match_threshold=1.0, replace_character=None))]
+ fn filter_text(
+ &self,
+ text: &str,
+ match_threshold: f64,
+ replace_character: Option<&str>,
+ ) -> PyResult {
+ let threshold = if match_threshold == 0.0 {
+ 1.0
+ } else {
+ match_threshold
+ };
+ let replace_char = replace_character.and_then(|s| s.chars().next());
+
+ let (found, replaced) = self.inner.filter_text(text, threshold, replace_char);
+
+ Python::with_gil(|py| {
+ if replace_character.is_some() {
+ if found {
+ Ok(replaced
+ .unwrap_or_else(|| text.to_string())
+ .into_py(py))
+ } else {
+ Ok(false.into_py(py))
+ }
+ } else {
+ Ok(found.into_py(py))
+ }
+ })
+ }
+
+ fn get_all_languages(&self) -> Vec {
+ self.inner.get_all_languages().to_vec()
+ }
+}
+
+#[pymodule]
+fn _native(m: &Bound<'_, PyModule>) -> PyResult<()> {
+ m.add_class::()?;
+ Ok(())
+}
diff --git a/rust/badwords-wasm/Cargo.toml b/rust/badwords-wasm/Cargo.toml
new file mode 100644
index 0000000..81f1db4
--- /dev/null
+++ b/rust/badwords-wasm/Cargo.toml
@@ -0,0 +1,21 @@
+[package]
+name = "badwords-wasm"
+version = "2.2.0"
+edition = "2021"
+description = "WebAssembly profanity filter - badwords for browser and Node.js"
+license = "MIT"
+repository = "https://github.com/FlacSy/badwords"
+homepage = "https://badwords.flacsy.dev"
+documentation = "https://badwords.flacsy.dev"
+keywords = ["profanity", "filter", "moderation", "content", "wasm", "webassembly"]
+authors = ["FlacSy ", "iamlostshe "]
+
+[lib]
+crate-type = ["cdylib", "rlib"]
+
+[dependencies]
+badwords-core = { path = "../badwords-core" }
+wasm-bindgen = "0.2"
+
+[dev-dependencies]
+wasm-bindgen-test = "0.3"
diff --git a/rust/badwords-wasm/LICENSE b/rust/badwords-wasm/LICENSE
new file mode 100644
index 0000000..1d8114c
--- /dev/null
+++ b/rust/badwords-wasm/LICENSE
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) 2024 FlacSy
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so.
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS," WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/rust/badwords-wasm/src/lib.rs b/rust/badwords-wasm/src/lib.rs
new file mode 100644
index 0000000..bf691ad
--- /dev/null
+++ b/rust/badwords-wasm/src/lib.rs
@@ -0,0 +1,144 @@
+//! BadWords WebAssembly - profanity filter for browser and Node.js.
+//!
+//! Uses embedded resources (no filesystem). Exports ProfanityFilter to JavaScript.
+
+use std::collections::HashMap;
+use wasm_bindgen::prelude::*;
+
+use badwords_core::ProfanityFilter as CoreFilter;
+
+// Embedded resources - from python/badwords/resource/
+const UNICODE_MAPPINGS: &str = include_str!("../../../python/badwords/resource/data/unicode_mappings.json");
+const HOMOGLYPHS: &str = include_str!("../../../python/badwords/resource/data/homoglyphs.json");
+const TRANSLITERATION: &str = include_str!("../../../python/badwords/resource/data/transliteration.json");
+const WORDS_EN: &str = include_str!("../../../python/badwords/resource/words/en.txt");
+const WORDS_RU: &str = include_str!("../../../python/badwords/resource/words/ru.txt");
+
+/// Profanity filter for JavaScript. Uses embedded English and Russian word lists.
+#[wasm_bindgen]
+pub struct ProfanityFilter {
+ inner: CoreFilter,
+}
+
+#[wasm_bindgen]
+impl ProfanityFilter {
+ /// Create a new filter with English and Russian languages.
+ #[wasm_bindgen(constructor)]
+ pub fn new(
+ normalize_text: Option,
+ aggressive_normalize: Option,
+ transliterate: Option,
+ replace_homoglyphs: Option,
+ ) -> Result {
+ let mut words_by_lang = HashMap::new();
+ words_by_lang.insert("en".to_string(), WORDS_EN.to_string());
+ words_by_lang.insert("ru".to_string(), WORDS_RU.to_string());
+
+ let inner = CoreFilter::new_from_embedded(
+ UNICODE_MAPPINGS,
+ HOMOGLYPHS,
+ TRANSLITERATION,
+ &words_by_lang,
+ vec!["en".to_string(), "ru".to_string()],
+ normalize_text.unwrap_or(true),
+ aggressive_normalize.unwrap_or(true),
+ transliterate.unwrap_or(true),
+ replace_homoglyphs.unwrap_or(true),
+ )
+ .map_err(|e| JsValue::from_str(&e.to_string()))?;
+
+ Ok(ProfanityFilter { inner })
+ }
+
+ #[wasm_bindgen(js_name = filterText)]
+ pub fn filter_text(
+ &self,
+ text: &str,
+ replace_char: Option,
+ match_threshold: Option,
+ ) -> JsValue {
+ let threshold = match_threshold.unwrap_or(1.0);
+ let ch = replace_char.and_then(|s| s.chars().next());
+ let (found, replaced) = self.inner.filter_text(text, threshold, ch);
+
+ if found {
+ if let Some(r) = replaced {
+ JsValue::from_str(&r)
+ } else {
+ JsValue::from_bool(true)
+ }
+ } else {
+ JsValue::from_bool(false)
+ }
+ }
+
+ #[wasm_bindgen(js_name = isBad)]
+ pub fn is_bad(&self, text: &str, match_threshold: Option) -> bool {
+ let threshold = match_threshold.unwrap_or(1.0);
+ let (found, _) = self.inner.filter_text(text, threshold, None);
+ found
+ }
+
+ #[wasm_bindgen(js_name = censor)]
+ pub fn censor(&self, text: &str, replace_char: &str, match_threshold: Option) -> String {
+ let threshold = match_threshold.unwrap_or(1.0);
+ let ch = replace_char.chars().next().unwrap_or('*');
+ let (_found, replaced) = self.inner.filter_text(text, threshold, Some(ch));
+ replaced.unwrap_or_else(|| text.to_string())
+ }
+
+ #[wasm_bindgen(js_name = addWords)]
+ pub fn add_words(&mut self, words: Vec) {
+ self.inner.add_words(&words);
+ }
+
+ #[wasm_bindgen(js_name = getLanguages)]
+ pub fn get_languages(&self) -> Vec {
+ self.inner
+ .get_all_languages()
+ .iter()
+ .map(|s| JsValue::from_str(s))
+ .collect()
+ }
+}
+
+#[cfg(test)]
+mod wasm_tests {
+ use super::*;
+ use wasm_bindgen_test::*;
+
+ #[wasm_bindgen_test]
+ fn test_clean_text_returns_false() {
+ let filter = ProfanityFilter::new(None, None, None, None).unwrap();
+ assert!(!filter.is_bad("hello world", None));
+ }
+
+ #[wasm_bindgen_test]
+ fn test_bad_text_returns_true() {
+ let filter = ProfanityFilter::new(None, None, None, None).unwrap();
+ assert!(filter.is_bad("sonofabitch", None));
+ }
+
+ #[wasm_bindgen_test]
+ fn test_add_words_detection() {
+ let mut filter = ProfanityFilter::new(None, None, None, None).unwrap();
+ filter.add_words(vec!["custombad".to_string()]);
+ assert!(filter.is_bad("custombad", None));
+ }
+
+ #[wasm_bindgen_test]
+ fn test_censor_replaces() {
+ let mut filter = ProfanityFilter::new(None, None, None, None).unwrap();
+ filter.add_words(vec!["bad".to_string()]);
+ let result = filter.censor("a bad word", "*", None);
+ assert!(result.contains("*"));
+ assert!(!result.contains("bad"));
+ }
+
+ #[wasm_bindgen_test]
+ fn test_get_languages() {
+ let filter = ProfanityFilter::new(None, None, None, None).unwrap();
+ let langs = filter.get_languages();
+ assert!(langs.len() >= 2);
+ }
+}
diff --git a/scripts/generate-lang-packages.py b/scripts/generate-lang-packages.py
new file mode 100644
index 0000000..aaf617e
--- /dev/null
+++ b/scripts/generate-lang-packages.py
@@ -0,0 +1,97 @@
+#!/usr/bin/env python3
+"""Generate @badwords/languages package from badwords/resource/words/*.txt"""
+
+import json
+from pathlib import Path
+
+ROOT = Path(__file__).resolve().parent.parent
+WORDS_DIR = ROOT / "python" / "badwords" / "resource" / "words"
+PKG_DIR = ROOT / "js" / "languages"
+
+
+def main() -> None:
+ PKG_DIR.mkdir(parents=True, exist_ok=True)
+ lang_dir = PKG_DIR / "lang"
+ lang_dir.mkdir(exist_ok=True)
+
+ exports: dict[str, str] = {}
+ for txt in sorted(WORDS_DIR.glob("*.txt")):
+ lang = txt.stem
+ lines = [
+ line.strip()
+ for line in txt.read_text(encoding="utf-8-sig").splitlines()
+ if line.strip()
+ ]
+ out = lang_dir / f"{lang}.json"
+ out.write_text(
+ json.dumps(lines, ensure_ascii=False, indent=0), encoding="utf-8"
+ )
+ exports[f"./{lang}"] = f"./lang/{lang}.json"
+
+ # index.js re-exports all for convenience
+ index_lines = [
+ "// Auto-generated. Use @badwords/languages/de etc. for tree-shaking.",
+ "module.exports = {",
+ ]
+ for lang in sorted(exports.keys(), key=lambda x: x.replace("./", "")):
+ l = lang.replace("./", "")
+ index_lines.append(f' {l}: require("./lang/{l}.json"),')
+ index_lines.append("};")
+ (PKG_DIR / "index.js").write_text("\n".join(index_lines), encoding="utf-8")
+
+ exports["."] = "./index.js"
+ exports["./package.json"] = "./package.json"
+
+ pkg = {
+ "name": "@badwords/languages",
+ "version": "2.2.0",
+ "description": "Optional language word lists for badwords-wasm",
+ "license": "MIT",
+ "repository": {"type": "git", "url": "https://github.com/FlacSy/badwords.git"},
+ "keywords": ["badwords", "profanity", "filter", "languages"],
+ "exports": exports,
+ "files": ["lang", "index.js"],
+ }
+ (PKG_DIR / "package.json").write_text(
+ json.dumps(pkg, indent=2, ensure_ascii=False), encoding="utf-8"
+ )
+
+ # README for the package
+ readme = """# @badwords/languages
+
+Optional language word lists for [badwords-wasm](https://www.npmjs.com/package/badwords-wasm).
+
+## Usage
+
+```bash
+npm install badwords-wasm @badwords/languages
+```
+
+```javascript
+import init, { ProfanityFilter } from 'badwords-wasm';
+import de from '@badwords/languages/de';
+import ua from '@badwords/languages/ua';
+
+await init();
+const filter = new ProfanityFilter();
+filter.addWords(de);
+filter.addWords(ua);
+
+filter.isBad('some text'); // uses en+ru (built-in) + de + ua
+```
+
+## Available languages
+
+"""
+ lang_keys = sorted(
+ k.replace("./", "") for k in exports if k not in (".", "./package.json")
+ )
+ readme += ", ".join(lang_keys)
+ readme += "\n"
+ (PKG_DIR / "README.md").write_text(readme, encoding="utf-8")
+
+ print(f"Generated {len(exports) - 2} language files in {PKG_DIR}")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/tests/README.md b/tests/README.md
new file mode 100644
index 0000000..ccf78f9
--- /dev/null
+++ b/tests/README.md
@@ -0,0 +1,39 @@
+# Platform tests
+
+## Rust (badwords-core)
+
+```bash
+make test-rust
+# or
+cargo test -p badwords-core
+```
+
+Tests in `rust/badwords-core/src/lib.rs` (`#[cfg(test)]` module).
+
+## Python (badwords-py)
+
+Requires installed package: `pip install .` or `make develop`.
+
+```bash
+make test-python
+# or
+pytest tests/ -v
+```
+
+Files: `test_profanity_filter.py`, `test_languages.py`, `test_integration.py`, `test_exceptions.py`.
+
+## WASM (badwords-wasm)
+
+```bash
+make test-wasm
+# or
+cd rust/badwords-wasm && wasm-pack test --node
+```
+
+Tests in `rust/badwords-wasm/src/lib.rs` (`#[cfg(test)]` module with `#[wasm_bindgen_test]`).
+
+## All platforms
+
+```bash
+make test
+```
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644
index 0000000..61b9a64
--- /dev/null
+++ b/tests/__init__.py
@@ -0,0 +1 @@
+"""Tests for badwords package."""
diff --git a/tests/bench_filter.py b/tests/bench_filter.py
new file mode 100644
index 0000000..17e06a3
--- /dev/null
+++ b/tests/bench_filter.py
@@ -0,0 +1,70 @@
+"""Benchmarks for ProfanityFilter."""
+
+from __future__ import annotations
+
+import pytest
+
+from badwords import ProfanityFilter
+
+
+@pytest.fixture(scope="module")
+def filter_en_ru() -> ProfanityFilter:
+ p = ProfanityFilter()
+ p.init(languages=["en", "ru"])
+ return p
+
+
+@pytest.mark.benchmark
+def test_bench_filter_clean(
+ benchmark: pytest.BenchmarkFixture, filter_en_ru: ProfanityFilter
+) -> None:
+ """Benchmark: clean text (no profanity)."""
+ benchmark(filter_en_ru.filter_text, "Hello, this is a clean message for testing.")
+
+
+@pytest.mark.benchmark
+def test_bench_filter_bad(
+ benchmark: pytest.BenchmarkFixture, filter_en_ru: ProfanityFilter
+) -> None:
+ """Benchmark: text with profanity."""
+ benchmark(filter_en_ru.filter_text, "sonofabitch")
+
+
+@pytest.fixture(scope="module")
+def filter_with_custom_word() -> ProfanityFilter:
+ p = ProfanityFilter()
+ p.init(languages=["en"])
+ p.add_words(["badword"])
+ return p
+
+
+@pytest.mark.benchmark
+def test_bench_filter_censor(
+ benchmark: pytest.BenchmarkFixture, filter_with_custom_word: ProfanityFilter
+) -> None:
+ """Benchmark: censor profanity with replace_character."""
+ benchmark(
+ filter_with_custom_word.filter_text,
+ "x badword y",
+ replace_character="*",
+ )
+
+
+@pytest.mark.benchmark
+def test_bench_filter_many(
+ benchmark: pytest.BenchmarkFixture, filter_en_ru: ProfanityFilter
+) -> None:
+ """Benchmark: multiple texts in sequence."""
+ texts = [
+ "Hello world",
+ "Clean message",
+ "Some text with potential",
+ "Another clean one",
+ "Final test string",
+ ]
+
+ def run() -> None:
+ for text in texts:
+ filter_en_ru.filter_text(text)
+
+ benchmark(run)
diff --git a/tests/test_exceptions.py b/tests/test_exceptions.py
new file mode 100644
index 0000000..a4d2e7e
--- /dev/null
+++ b/tests/test_exceptions.py
@@ -0,0 +1,26 @@
+"""Tests for exceptions."""
+
+from __future__ import annotations
+
+import pytest
+
+from badwords.exceptions import NotSupportedLanguage
+
+
+class TestNotSupportedLanguage:
+ """Tests for NotSupportedLanguage exception."""
+
+ def test_is_base_exception_subclass(self) -> None:
+ """NotSupportedLanguage inherits from BaseException."""
+ assert issubclass(NotSupportedLanguage, BaseException)
+
+ def test_str_representation(self) -> None:
+ """String representation returns expected message."""
+ exc = NotSupportedLanguage()
+ assert str(exc) == "This language is not supported"
+
+ def test_can_be_raised_and_caught(self) -> None:
+ """Exception can be raised and caught."""
+ with pytest.raises(NotSupportedLanguage) as exc_info:
+ raise NotSupportedLanguage()
+ assert exc_info.value is not None
diff --git a/tests/test_integration.py b/tests/test_integration.py
new file mode 100644
index 0000000..d559468
--- /dev/null
+++ b/tests/test_integration.py
@@ -0,0 +1,47 @@
+"""Integration tests - full scenarios."""
+
+from __future__ import annotations
+
+import pytest
+
+from badwords import ProfanityFilter
+
+
+class TestFullWorkflow:
+ """End-to-end workflow tests."""
+
+ def test_chat_moderation_scenario(self) -> None:
+ """Simulate chat moderation with custom words."""
+ p = ProfanityFilter()
+ p.init(languages=["en", "ru"])
+ p.add_words(["spam_link", "scam_bot"])
+
+ assert p.filter_text("Check out this spam_link") is True
+ assert p.filter_text("Hello, how are you?") is False
+
+ def test_censoring_workflow(self) -> None:
+ """Censoring with replace_character."""
+ p = ProfanityFilter()
+ p.init(
+ languages=["en"],
+ processing_transliterate=False,
+ processing_replace_homoglyphs=False,
+ )
+ p.add_words(["bad"])
+
+ result = p.filter_text("a bad word", replace_character="*")
+ assert result == "a *** word"
+
+ def test_multiple_languages_loaded(self) -> None:
+ """Words from multiple languages are detected."""
+ p = ProfanityFilter()
+ p.init(languages=["en", "ru", "de"])
+ langs = p.get_all_languages()
+ assert len(langs) == 3
+ assert "en" in langs and "ru" in langs and "de" in langs
+
+ def test_filter_text_before_init_raises(self) -> None:
+ """filter_text without init raises RuntimeError."""
+ p = ProfanityFilter()
+ with pytest.raises(RuntimeError):
+ p.filter_text("test")
diff --git a/tests/test_languages.py b/tests/test_languages.py
new file mode 100644
index 0000000..3a17391
--- /dev/null
+++ b/tests/test_languages.py
@@ -0,0 +1,80 @@
+"""Tests for each supported language."""
+
+from __future__ import annotations
+
+import pytest
+
+from badwords import ProfanityFilter
+
+# All languages from python/badwords/resource/words/
+LANGUAGES = [
+ "br",
+ "cz",
+ "da",
+ "de",
+ "du",
+ "en",
+ "fi",
+ "fr",
+ "gr",
+ "hu",
+ "in",
+ "it",
+ "ja",
+ "ko",
+ "lt",
+ "no",
+ "pl",
+ "po",
+ "ro",
+ "ru",
+ "sp",
+ "sw",
+ "th",
+ "tu",
+ "ua",
+]
+
+
+@pytest.mark.parametrize("lang", LANGUAGES)
+def test_language_loads(lang: str) -> None:
+ """Each language loads successfully."""
+ p = ProfanityFilter()
+ p.init(languages=[lang])
+ assert p.get_all_languages() == [lang]
+
+
+@pytest.mark.parametrize("lang", LANGUAGES)
+def test_language_detects_added_word(lang: str) -> None:
+ """Filter detects added word for each language."""
+ p = ProfanityFilter()
+ p.init(languages=[lang])
+ test_word = f"langtest_{lang}"
+ p.add_words([test_word])
+ assert p.filter_text(test_word) is True
+ assert p.filter_text("clean text") is False
+
+
+@pytest.mark.parametrize("lang", LANGUAGES)
+def test_language_censor_works(lang: str) -> None:
+ """Censoring works for each language."""
+ p = ProfanityFilter()
+ p.init(
+ languages=[lang],
+ processing_transliterate=False,
+ processing_replace_homoglyphs=False,
+ )
+ p.add_words(["badword"])
+ result = p.filter_text("x badword y", replace_character="*")
+ assert isinstance(result, str)
+ assert "badword" not in result
+ assert "*" in result
+
+
+@pytest.mark.parametrize("lang", LANGUAGES)
+def test_language_similar_method(lang: str) -> None:
+ """similar() method works after language initialization."""
+ p = ProfanityFilter()
+ p.init(languages=[lang])
+ assert p.similar("abc", "abc") == 1.0
+ assert p.similar("abc", "xyz") < 1.0
diff --git a/tests/test_profanity_filter.py b/tests/test_profanity_filter.py
new file mode 100644
index 0000000..0d305f7
--- /dev/null
+++ b/tests/test_profanity_filter.py
@@ -0,0 +1,192 @@
+"""Tests for ProfanityFilter."""
+
+from __future__ import annotations
+
+import pytest
+
+from badwords import ProfanityFilter
+from badwords.exceptions import NotSupportedLanguage
+
+
+class TestProfanityFilterInit:
+ """Tests for ProfanityFilter initialization."""
+
+ def test_init_all_languages(self) -> None:
+ """Filter loads all languages when no list specified."""
+ p = ProfanityFilter()
+ p.init()
+ langs = p.get_all_languages()
+ assert len(langs) >= 20
+ assert "en" in langs
+ assert "ru" in langs
+
+ def test_init_specific_languages(self) -> None:
+ """Filter loads only specified languages."""
+ p = ProfanityFilter()
+ p.init(languages=["en", "ru"])
+ assert p.get_all_languages() == ["en", "ru"]
+
+ def test_init_unsupported_language_raises(self) -> None:
+ """NotSupportedLanguage raised for invalid language code."""
+ p = ProfanityFilter()
+ with pytest.raises(NotSupportedLanguage):
+ p.init(languages=["xx"])
+
+ def test_init_partial_unsupported_raises(self) -> None:
+ """NotSupportedLanguage when any language is invalid."""
+ p = ProfanityFilter()
+ with pytest.raises(NotSupportedLanguage):
+ p.init(languages=["en", "xx"])
+
+ def test_init_with_processing_options(self) -> None:
+ """Filter accepts processing options."""
+ p = ProfanityFilter()
+ p.init(
+ languages=["en"],
+ processing_normalize_text=False,
+ processing_transliterate=False,
+ )
+ assert p.filter_text("hello") is False # no crash
+
+
+class TestFilterText:
+ """Tests for filter_text method."""
+
+ def test_clean_text_returns_false(self) -> None:
+ """Clean text returns False."""
+ p = ProfanityFilter()
+ p.init(languages=["en"])
+ assert p.filter_text("hello world") is False
+
+ def test_bad_text_returns_true(self) -> None:
+ """Text with profanity returns True."""
+ p = ProfanityFilter()
+ p.init(languages=["en"])
+ # Use word known to be in en.txt
+ result = p.filter_text("sonofabitch")
+ assert result is True
+
+ def test_add_words_detection(self) -> None:
+ """Custom words added via add_words are detected."""
+ p = ProfanityFilter()
+ p.init(languages=["en"])
+ p.add_words(["custombadword"])
+ assert p.filter_text("custombadword") is True
+ assert p.filter_text("hello") is False
+
+ def test_replace_character_returns_string(self) -> None:
+ """With replace_character, returns censored string."""
+ p = ProfanityFilter()
+ p.init(
+ languages=["en"],
+ processing_transliterate=False,
+ processing_replace_homoglyphs=False,
+ )
+ p.add_words(["badword"])
+ result = p.filter_text("x badword y", replace_character="*")
+ assert isinstance(result, str)
+ assert "badword" not in result
+ assert "*" in result
+
+ def test_replace_character_clean_returns_false(self) -> None:
+ """Clean text with replace_character still returns False."""
+ p = ProfanityFilter()
+ p.init(languages=["en"])
+ result = p.filter_text("hello world", replace_character="*")
+ assert result is False
+
+ def test_match_threshold_exact_default(self) -> None:
+ """Default match_threshold is exact (1.0)."""
+ p = ProfanityFilter()
+ p.init(languages=["en"])
+ p.add_words(["exact"])
+ assert p.filter_text("exact") is True
+ assert p.filter_text("exactt") is False # typo, no fuzzy
+
+ def test_match_threshold_fuzzy(self) -> None:
+ """Fuzzy matching works with threshold < 1."""
+ p = ProfanityFilter()
+ p.init(languages=["en"])
+ p.add_words(["badword"])
+ # "badw0rd" might match with fuzzy - depends on normalization
+ result = p.filter_text("badword", match_threshold=0.9)
+ assert result is True
+
+ def test_empty_string(self) -> None:
+ """Empty string returns False."""
+ p = ProfanityFilter()
+ p.init(languages=["en"])
+ assert p.filter_text("") is False
+
+ def test_whitespace_only(self) -> None:
+ """Whitespace-only returns False."""
+ p = ProfanityFilter()
+ p.init(languages=["en"])
+ assert p.filter_text(" \n\t ") is False
+
+
+class TestAddWords:
+ """Tests for add_words method."""
+
+ def test_add_single_word(self) -> None:
+ """Can add single word."""
+ p = ProfanityFilter()
+ p.init(languages=["en"])
+ p.add_words(["banned"])
+ assert p.filter_text("banned") is True
+
+ def test_add_multiple_words(self) -> None:
+ """Can add multiple words."""
+ p = ProfanityFilter()
+ p.init(languages=["en"])
+ p.add_words(["word1", "word2"])
+ assert p.filter_text("word1") is True
+ assert p.filter_text("word2") is True
+
+ def test_add_empty_list(self) -> None:
+ """Adding empty list does not crash."""
+ p = ProfanityFilter()
+ p.init(languages=["en"])
+ p.add_words([])
+ assert p.filter_text("hello") is False
+
+
+class TestGetAllLanguages:
+ """Tests for get_all_languages method."""
+
+ def test_returns_list(self) -> None:
+ """Returns a list."""
+ p = ProfanityFilter()
+ p.init(languages=["en"])
+ result = p.get_all_languages()
+ assert isinstance(result, list)
+ assert result == ["en"]
+
+ def test_sorted_when_all_loaded(self) -> None:
+ """Languages are sorted when all loaded."""
+ p = ProfanityFilter()
+ p.init()
+ langs = p.get_all_languages()
+ assert langs == sorted(langs)
+
+
+class TestSimilar:
+ """Tests for similar method."""
+
+ def test_identical_returns_one(self) -> None:
+ """Identical strings return 1.0."""
+ p = ProfanityFilter()
+ p.init(languages=["en"])
+ assert p.similar("hello", "hello") == 1.0
+
+ def test_different_returns_less_than_one(self) -> None:
+ """Different strings return < 1.0."""
+ p = ProfanityFilter()
+ p.init(languages=["en"])
+ assert p.similar("hello", "world") < 1.0
+
+ def test_similar_returns_high(self) -> None:
+ """Similar strings return high ratio."""
+ p = ProfanityFilter()
+ p.init(languages=["en"])
+ assert p.similar("hello", "hellp") >= 0.8