From 33fa496565fa91d0dea5d538ad8bd4967c7373aa Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Thu, 6 Jul 2023 13:00:04 -0400 Subject: [PATCH 01/31] part 1 done --- .github/workflows/test.yml | 4 +- README.md | 2 +- docs/api/medchem.alerts.md | 3 - docs/api/medchem.catalog.md | 3 - docs/api/medchem.catalogs.md | 6 + docs/api/medchem.complexity.md | 7 - docs/api/medchem.demerits.md | 3 - docs/api/medchem.filter.md | 7 - docs/api/medchem.groups.md | 5 +- docs/api/medchem.query.md | 132 - docs/api/medchem.rules.md | 7 - docs/api/medchem.utils.md | 6 +- docs/tutorials/Catalogs.ipynb | 38 + docs/tutorials/Chemical_Groups.ipynb | 160 +- docs/tutorials/Medchem_Query_Language.ipynb | 160 +- docs/tutorials/Medchem_Rules.ipynb | 188 -- docs/tutorials/Molecular_Complexity.ipynb | 160 +- docs/tutorials/Molecular_Filters.ipynb | 202 +- docs/tutorials/old_getting_started.ipynb | 2678 ----------------- env.yml | 1 + medchem/catalogs/__init__.py | 4 + medchem/catalogs/_catalogs.py | 394 +++ medchem/cli.py | 17 + medchem/groups/__init__.py | 4 + medchem/{groups.py => groups/_groups.py} | 39 +- medchem/utils/graph.py | 18 +- medchem/utils/loader.py | 28 +- medchem/utils/matches.py | 143 - medchem/utils/smarts.py | 34 +- {medchem => medchem_OLD}/alerts.py | 7 +- {medchem => medchem_OLD}/catalog.py | 2 +- .../complexity/__init__.py | 0 .../complexity/_complexity_calc.py | 0 .../complexity/complexity_filter.py | 1 + {medchem => medchem_OLD}/demerits.py | 0 {medchem => medchem_OLD}/filter/__init__.py | 0 {medchem => medchem_OLD}/filter/generic.py | 5 +- {medchem => medchem_OLD}/filter/lead.py | 3 +- {medchem => medchem_OLD}/query/__init__.py | 0 {medchem => medchem_OLD}/query/eval.py | 0 {medchem => medchem_OLD}/query/parser.py | 0 {medchem => medchem_OLD}/rules/__init__.py | 0 {medchem => medchem_OLD}/rules/_utils.py | 0 {medchem => medchem_OLD}/rules/basic_rules.py | 1 + {medchem => medchem_OLD}/rules/rule_filter.py | 0 mkdocs.yml | 16 +- pyproject.toml | 33 +- tests/test_catalogs.py | 74 + tests/test_chemical_groups.py | 42 - tests/test_cli.py | 18 + tests/test_groups.py | 118 + tests/test_import.py | 2 + tests/test_notebooks.py | 2 +- tests/test_utilities.py | 183 -- tests/test_utils_graph.py | 38 + tests/test_utils_loader.py | 33 + tests/test_utils_smarts_utils.py | 124 + {tests => tests_OLD}/.gitignore | 0 {tests => tests_OLD}/test_complexity.py | 0 {tests => tests_OLD}/test_demerit_filters.py | 0 {tests => tests_OLD}/test_generic_filter.py | 0 {tests => tests_OLD}/test_lead_filter.py | 0 {tests => tests_OLD}/test_query.py | 0 {tests => tests_OLD}/test_rules.py | 0 64 files changed, 1070 insertions(+), 4085 deletions(-) delete mode 100644 docs/api/medchem.alerts.md delete mode 100644 docs/api/medchem.catalog.md create mode 100644 docs/api/medchem.catalogs.md delete mode 100644 docs/api/medchem.complexity.md delete mode 100644 docs/api/medchem.demerits.md delete mode 100644 docs/api/medchem.filter.md delete mode 100644 docs/api/medchem.query.md delete mode 100644 docs/api/medchem.rules.md create mode 100644 docs/tutorials/Catalogs.ipynb delete mode 100644 docs/tutorials/Medchem_Rules.ipynb delete mode 100644 docs/tutorials/old_getting_started.ipynb create mode 100644 medchem/catalogs/__init__.py create mode 100644 medchem/catalogs/_catalogs.py create mode 100644 medchem/cli.py create mode 100644 medchem/groups/__init__.py rename medchem/{groups.py => groups/_groups.py} (87%) delete mode 100644 medchem/utils/matches.py rename {medchem => medchem_OLD}/alerts.py (97%) rename {medchem => medchem_OLD}/catalog.py (99%) rename {medchem => medchem_OLD}/complexity/__init__.py (100%) rename {medchem => medchem_OLD}/complexity/_complexity_calc.py (100%) rename {medchem => medchem_OLD}/complexity/complexity_filter.py (99%) rename {medchem => medchem_OLD}/demerits.py (100%) rename {medchem => medchem_OLD}/filter/__init__.py (100%) rename {medchem => medchem_OLD}/filter/generic.py (99%) rename {medchem => medchem_OLD}/filter/lead.py (99%) rename {medchem => medchem_OLD}/query/__init__.py (100%) rename {medchem => medchem_OLD}/query/eval.py (100%) rename {medchem => medchem_OLD}/query/parser.py (100%) rename {medchem => medchem_OLD}/rules/__init__.py (100%) rename {medchem => medchem_OLD}/rules/_utils.py (100%) rename {medchem => medchem_OLD}/rules/basic_rules.py (99%) rename {medchem => medchem_OLD}/rules/rule_filter.py (100%) create mode 100644 tests/test_catalogs.py delete mode 100644 tests/test_chemical_groups.py create mode 100644 tests/test_cli.py create mode 100644 tests/test_groups.py create mode 100644 tests/test_import.py delete mode 100644 tests/test_utilities.py create mode 100644 tests/test_utils_graph.py create mode 100644 tests/test_utils_loader.py create mode 100644 tests/test_utils_smarts_utils.py rename {tests => tests_OLD}/.gitignore (100%) rename {tests => tests_OLD}/test_complexity.py (100%) rename {tests => tests_OLD}/test_demerit_filters.py (100%) rename {tests => tests_OLD}/test_generic_filter.py (100%) rename {tests => tests_OLD}/test_lead_filter.py (100%) rename {tests => tests_OLD}/test_query.py (100%) rename {tests => tests_OLD}/test_rules.py (100%) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8bb5c87..515f34b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -47,8 +47,8 @@ jobs: - name: Run tests run: pytest - # - name: Test CLI - # run: medchem --help + - name: Test CLI + run: medchem --help - name: Test building the doc run: mkdocs build diff --git a/README.md b/README.md index 8d06f09..cabddf6 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ Visit . micromamba create -n medchem -f env.yml micromamba activate medchem -pip install -e . +pip install --no-deps -e . ``` ### Tests diff --git a/docs/api/medchem.alerts.md b/docs/api/medchem.alerts.md deleted file mode 100644 index 9c14511..0000000 --- a/docs/api/medchem.alerts.md +++ /dev/null @@ -1,3 +0,0 @@ -# `medchem.alerts` - -::: medchem.alerts \ No newline at end of file diff --git a/docs/api/medchem.catalog.md b/docs/api/medchem.catalog.md deleted file mode 100644 index 1d3d14b..0000000 --- a/docs/api/medchem.catalog.md +++ /dev/null @@ -1,3 +0,0 @@ -# `medchem.catalog` - -::: medchem.catalog \ No newline at end of file diff --git a/docs/api/medchem.catalogs.md b/docs/api/medchem.catalogs.md new file mode 100644 index 0000000..2ed605e --- /dev/null +++ b/docs/api/medchem.catalogs.md @@ -0,0 +1,6 @@ +# `medchem.catalogs` + +::: medchem.catalogs.list_named_catalogs +::: medchem.catalogs.merge_catalogs +::: medchem.catalogs.from_smarts +::: medchem.catalogs.NamedCatalogs diff --git a/docs/api/medchem.complexity.md b/docs/api/medchem.complexity.md deleted file mode 100644 index d31a02f..0000000 --- a/docs/api/medchem.complexity.md +++ /dev/null @@ -1,7 +0,0 @@ -# `medchem.rules` - -::: medchem.complexity.complexity_filter - ---- - -::: medchem.complexity._complexity_calc diff --git a/docs/api/medchem.demerits.md b/docs/api/medchem.demerits.md deleted file mode 100644 index ffe439c..0000000 --- a/docs/api/medchem.demerits.md +++ /dev/null @@ -1,3 +0,0 @@ -# `medchem.demerits` - -::: medchem.demerits \ No newline at end of file diff --git a/docs/api/medchem.filter.md b/docs/api/medchem.filter.md deleted file mode 100644 index 569956b..0000000 --- a/docs/api/medchem.filter.md +++ /dev/null @@ -1,7 +0,0 @@ -# `medchem.filter` - -::: medchem.filter.lead - ----- - -::: medchem.filter.generic \ No newline at end of file diff --git a/docs/api/medchem.groups.md b/docs/api/medchem.groups.md index acde703..8b50ede 100644 --- a/docs/api/medchem.groups.md +++ b/docs/api/medchem.groups.md @@ -1,3 +1,6 @@ # `medchem.groups` -::: medchem.groups \ No newline at end of file +::: medchem.groups.list_default_chemical_groups +::: medchem.groups.list_functional_group_names +::: medchem.groups.get_functional_group_map +::: medchem.groups.ChemicalGroup diff --git a/docs/api/medchem.query.md b/docs/api/medchem.query.md deleted file mode 100644 index 8ec5494..0000000 --- a/docs/api/medchem.query.md +++ /dev/null @@ -1,132 +0,0 @@ -# `medchem.query` - -This module helps build a filter based on a query language that can be parsed. -By default, the default query parser will be used, which contains the following instructions that can be orchestrated using boolean operation (`or`, `and`, `not` and parenthesis) - -## Example - -```python -import datamol as dm -from medchem.query.eval import QueryFilter - -query = """HASPROP("tpsa" < 120) AND HASSUBSTRUCTURE("[OH]", True)""" -chemical_filter = QueryFilter(query, parser="lalr") -mols = dm.data.cdk2().mol[:10] -chemical_filter(mols, n_jobs=-1) # [False, False, False, False, False, True, True, True, False, False] -``` - -## Syntax - -Any string provided as `query` argument needs to be quoted (similar to json) to avoid ambiguity in parsing. -* An example of valid query is `"""(HASPROP("tpsa" > 120 ) | HASSUBSTRUCTURE("c1ccccc1")) AND NOT HASALERT("pains") OR HASSUBSTRUCTURE("[OH]", max, 2)"""`. -* Examples of invalid queries are - * `"""HASPROP("tpsa" > 120) OR HASSUBSTRUCTURE("[OH]", True, >, 3)"""` : unexpected wrong operator `>` - * `"""HASPROP(tpsa > 120)"""` : tpsa is not quoted - * `"""HASPROP("tpsa") > 120"""` : this is not part of the language specification - * `"""(HASPROP("tpsa" > 120) AND HASSUBSTRUCTURE("[OH]", True, max, 3 )"""`: mismatching parenthesis `(` - -* `"""HASPROP("tpsa" > 120) OR HASSUBSTRUCTURE("CO")"""`, `"""(HASPROP("tpsa" > 120)) OR (HASSUBSTRUCTURE("CO"))"""` and `"""(HASPROP("tpsa" > 120) OR HASSUBSTRUCTURE("CO"))"""` are equivalent - - -### HASALERT -check whether a molecule has an `alert` from a catalog -```python -# alert is one supported alert catalog by `medchem`. For example `pains` -HASALERT(alert:str) -``` - -### HASGROUP -check whether a molecule has a specific functional group from a catalog - -```python -# group is one supported functional group provided by `medchem` -HASGROUP(group:str) -``` - - -### MATCHRULE -check whether a molecule match a predefined druglikeness `rule` from a catalog -```python -# rule is one supported rule provided by `medchem`. For example `rule_of_five` -MATCHRULE(rule:str) -``` - -### HASSUPERSTRUCTURE -check whether a molecule has `query` as superstructure -```python -# query is a SMILES -HASSUPERSTRUCTURE(query:str) -``` - -### HASSUBSTRUCTURE -Check whether a molecule has `query` as substructure. -**Note that providing the comma separator `,` is _mandatory_ here as each variable is an argument.** - -```python -# query is a SMILES or a SMARTS, operator is defined below, is_smarts is a boolean - -HASSUBSTRUCTURE(query:str, is_smarts:Optional[bool], operator:Optional[str], limit:Optional[int]) - -# which correspond to setting this default values -HASSUBSTRUCTURE(query:str, is_smarts=False, operator="min", limit=1) -# same as -HASSUBSTRUCTURE(query:str, is_smarts=None, operator=None, limit=None) -``` - -Not providing optional arguments is allowed, but they need to be provided in the exact same order shown above. Thus: - -* `HASSUBSTRUCTURE("CO")` -* `HASSUBSTRUCTURE("CO", False)` -* `HASSUBSTRUCTURE("CO", False, min)` -* `HASSUBSTRUCTURE("CO", False, min, 1)` - -are all `valid` and `equivalent` (given their default values) - -Furthermore, since the correct argument map can be inferred when no ambiguity arises, the following `are valid but discouraged` - -* `HASSUBSTRUCTURE("CO", False, 1)` -* `HASSUBSTRUCTURE("CO", min, 1)` - -Whereas, this is invalid: -* `HASSUBSTRUCTURE("CO", min, False, 1)` - - -### HASPROP -Check whether a molecule has `prop` as property within a defined limit. -**Any comma `,` provided between arguments will be ignored** - -```python -# prop is a valid datamol.descriptors property, comparator is a required comparator operator and defined below -HASPROP(prop:str comparator:str limit:float) -``` - -### LIKE -Check whether a molecule is similar enough to another molecule. -**Any comma `,` provided between arguments will be ignored** - -```python -# query is a SMILES -LIKE(query:str comparator:str limit:float) -``` - -### Basic operators: - -* comparator: one of `=` `==`, `!=`, `<`, `>`, `<=`, `>=` -* misc: the following misc values are accepted and parsed `true`, `false`, `True`, `False`, `TRUE`, `FALSE` -* operator (can be quoted or unquoted): - * MIN: `min`, `MIN` - * MAX: `max`, `MAX` -* boolean operator: - * AND operator : `AND` or `&` or `&&` or `and` - * OR operator : `OR` or `|` or `||` or `or` - * NOT operator : `NOT` or `!` or `~` or `not` - - - -## API - -::: medchem.query.parser - ---- - -::: medchem.query.eval \ No newline at end of file diff --git a/docs/api/medchem.rules.md b/docs/api/medchem.rules.md deleted file mode 100644 index 28f4b10..0000000 --- a/docs/api/medchem.rules.md +++ /dev/null @@ -1,7 +0,0 @@ -# `medchem.rules` - -::: medchem.rules.basic_rules - ---- - -::: medchem.rules.rule_filter \ No newline at end of file diff --git a/docs/api/medchem.utils.md b/docs/api/medchem.utils.md index b0ab896..7800d7a 100644 --- a/docs/api/medchem.utils.md +++ b/docs/api/medchem.utils.md @@ -4,12 +4,8 @@ --- -::: medchem.utils.matches - ---- - ::: medchem.utils.loader --- -::: medchem.utils.graph \ No newline at end of file +::: medchem.utils.graph diff --git a/docs/tutorials/Catalogs.ipynb b/docs/tutorials/Catalogs.ipynb new file mode 100644 index 0000000..3d556b5 --- /dev/null +++ b/docs/tutorials/Catalogs.ipynb @@ -0,0 +1,38 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "cc35111a-d3a8-4313-962c-290bbf563f35", + "metadata": {}, + "outputs": [], + "source": [ + "import datamol as dm\n", + "import pandas as pd\n", + "\n", + "import medchem\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:medchem]", + "language": "python", + "name": "conda-env-medchem-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/tutorials/Chemical_Groups.ipynb b/docs/tutorials/Chemical_Groups.ipynb index d45b1c3..3d556b5 100644 --- a/docs/tutorials/Chemical_Groups.ipynb +++ b/docs/tutorials/Chemical_Groups.ipynb @@ -2,161 +2,16 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, + "id": "cc35111a-d3a8-4313-962c-290bbf563f35", "metadata": {}, "outputs": [], "source": [ "import datamol as dm\n", + "import pandas as pd\n", "\n", - "import medchem" + "import medchem\n" ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
iupacsmilesexptcalc
04-methoxy-N,N-dimethyl-benzamideCN(C)C(=O)c1ccc(cc1)OC-11.01-9.625
1methanesulfonyl chlorideCS(=O)(=O)Cl-4.87-6.219
23-methylbut-1-eneCC(C)C=C1.832.452
32-ethylpyrazineCCc1cnccn1-5.45-5.809
4heptan-1-olCCCCCCCO-4.21-2.917
...............
637methyl octanoateCCCCCCCC(=O)OC-2.04-3.035
638pyrrolidineC1CCNC1-5.48-4.278
6394-hydroxybenzaldehydec1cc(ccc1C=O)O-8.83-10.050
6401-chloroheptaneCCCCCCCCl0.291.467
6411,4-dioxaneC1COCCO1-5.06-4.269
\n", - "

642 rows × 4 columns

\n", - "
" - ], - "text/plain": [ - " iupac smiles expt calc\n", - "0 4-methoxy-N,N-dimethyl-benzamide CN(C)C(=O)c1ccc(cc1)OC -11.01 -9.625\n", - "1 methanesulfonyl chloride CS(=O)(=O)Cl -4.87 -6.219\n", - "2 3-methylbut-1-ene CC(C)C=C 1.83 2.452\n", - "3 2-ethylpyrazine CCc1cnccn1 -5.45 -5.809\n", - "4 heptan-1-ol CCCCCCCO -4.21 -2.917\n", - ".. ... ... ... ...\n", - "637 methyl octanoate CCCCCCCC(=O)OC -2.04 -3.035\n", - "638 pyrrolidine C1CCNC1 -5.48 -4.278\n", - "639 4-hydroxybenzaldehyde c1cc(ccc1C=O)O -8.83 -10.050\n", - "640 1-chloroheptane CCCCCCCCl 0.29 1.467\n", - "641 1,4-dioxane C1COCCO1 -5.06 -4.269\n", - "\n", - "[642 rows x 4 columns]" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data = dm.data.freesolv()\n", - "data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] } ], "metadata": { @@ -176,13 +31,8 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.4" - }, - "vscode": { - "interpreter": { - "hash": "52fab7ed47a09dd73497e852b91b984fcb2648f3487052ea0ac1ba8b0f42000e" - } } }, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 5 } diff --git a/docs/tutorials/Medchem_Query_Language.ipynb b/docs/tutorials/Medchem_Query_Language.ipynb index d45b1c3..3d556b5 100644 --- a/docs/tutorials/Medchem_Query_Language.ipynb +++ b/docs/tutorials/Medchem_Query_Language.ipynb @@ -2,161 +2,16 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, + "id": "cc35111a-d3a8-4313-962c-290bbf563f35", "metadata": {}, "outputs": [], "source": [ "import datamol as dm\n", + "import pandas as pd\n", "\n", - "import medchem" + "import medchem\n" ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
iupacsmilesexptcalc
04-methoxy-N,N-dimethyl-benzamideCN(C)C(=O)c1ccc(cc1)OC-11.01-9.625
1methanesulfonyl chlorideCS(=O)(=O)Cl-4.87-6.219
23-methylbut-1-eneCC(C)C=C1.832.452
32-ethylpyrazineCCc1cnccn1-5.45-5.809
4heptan-1-olCCCCCCCO-4.21-2.917
...............
637methyl octanoateCCCCCCCC(=O)OC-2.04-3.035
638pyrrolidineC1CCNC1-5.48-4.278
6394-hydroxybenzaldehydec1cc(ccc1C=O)O-8.83-10.050
6401-chloroheptaneCCCCCCCCl0.291.467
6411,4-dioxaneC1COCCO1-5.06-4.269
\n", - "

642 rows × 4 columns

\n", - "
" - ], - "text/plain": [ - " iupac smiles expt calc\n", - "0 4-methoxy-N,N-dimethyl-benzamide CN(C)C(=O)c1ccc(cc1)OC -11.01 -9.625\n", - "1 methanesulfonyl chloride CS(=O)(=O)Cl -4.87 -6.219\n", - "2 3-methylbut-1-ene CC(C)C=C 1.83 2.452\n", - "3 2-ethylpyrazine CCc1cnccn1 -5.45 -5.809\n", - "4 heptan-1-ol CCCCCCCO -4.21 -2.917\n", - ".. ... ... ... ...\n", - "637 methyl octanoate CCCCCCCC(=O)OC -2.04 -3.035\n", - "638 pyrrolidine C1CCNC1 -5.48 -4.278\n", - "639 4-hydroxybenzaldehyde c1cc(ccc1C=O)O -8.83 -10.050\n", - "640 1-chloroheptane CCCCCCCCl 0.29 1.467\n", - "641 1,4-dioxane C1COCCO1 -5.06 -4.269\n", - "\n", - "[642 rows x 4 columns]" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data = dm.data.freesolv()\n", - "data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] } ], "metadata": { @@ -176,13 +31,8 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.4" - }, - "vscode": { - "interpreter": { - "hash": "52fab7ed47a09dd73497e852b91b984fcb2648f3487052ea0ac1ba8b0f42000e" - } } }, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 5 } diff --git a/docs/tutorials/Medchem_Rules.ipynb b/docs/tutorials/Medchem_Rules.ipynb deleted file mode 100644 index d45b1c3..0000000 --- a/docs/tutorials/Medchem_Rules.ipynb +++ /dev/null @@ -1,188 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import datamol as dm\n", - "\n", - "import medchem" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
iupacsmilesexptcalc
04-methoxy-N,N-dimethyl-benzamideCN(C)C(=O)c1ccc(cc1)OC-11.01-9.625
1methanesulfonyl chlorideCS(=O)(=O)Cl-4.87-6.219
23-methylbut-1-eneCC(C)C=C1.832.452
32-ethylpyrazineCCc1cnccn1-5.45-5.809
4heptan-1-olCCCCCCCO-4.21-2.917
...............
637methyl octanoateCCCCCCCC(=O)OC-2.04-3.035
638pyrrolidineC1CCNC1-5.48-4.278
6394-hydroxybenzaldehydec1cc(ccc1C=O)O-8.83-10.050
6401-chloroheptaneCCCCCCCCl0.291.467
6411,4-dioxaneC1COCCO1-5.06-4.269
\n", - "

642 rows × 4 columns

\n", - "
" - ], - "text/plain": [ - " iupac smiles expt calc\n", - "0 4-methoxy-N,N-dimethyl-benzamide CN(C)C(=O)c1ccc(cc1)OC -11.01 -9.625\n", - "1 methanesulfonyl chloride CS(=O)(=O)Cl -4.87 -6.219\n", - "2 3-methylbut-1-ene CC(C)C=C 1.83 2.452\n", - "3 2-ethylpyrazine CCc1cnccn1 -5.45 -5.809\n", - "4 heptan-1-ol CCCCCCCO -4.21 -2.917\n", - ".. ... ... ... ...\n", - "637 methyl octanoate CCCCCCCC(=O)OC -2.04 -3.035\n", - "638 pyrrolidine C1CCNC1 -5.48 -4.278\n", - "639 4-hydroxybenzaldehyde c1cc(ccc1C=O)O -8.83 -10.050\n", - "640 1-chloroheptane CCCCCCCCl 0.29 1.467\n", - "641 1,4-dioxane C1COCCO1 -5.06 -4.269\n", - "\n", - "[642 rows x 4 columns]" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data = dm.data.freesolv()\n", - "data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python [conda env:medchem]", - "language": "python", - "name": "conda-env-medchem-py" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.4" - }, - "vscode": { - "interpreter": { - "hash": "52fab7ed47a09dd73497e852b91b984fcb2648f3487052ea0ac1ba8b0f42000e" - } - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/tutorials/Molecular_Complexity.ipynb b/docs/tutorials/Molecular_Complexity.ipynb index d45b1c3..3d556b5 100644 --- a/docs/tutorials/Molecular_Complexity.ipynb +++ b/docs/tutorials/Molecular_Complexity.ipynb @@ -2,161 +2,16 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, + "id": "cc35111a-d3a8-4313-962c-290bbf563f35", "metadata": {}, "outputs": [], "source": [ "import datamol as dm\n", + "import pandas as pd\n", "\n", - "import medchem" + "import medchem\n" ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
iupacsmilesexptcalc
04-methoxy-N,N-dimethyl-benzamideCN(C)C(=O)c1ccc(cc1)OC-11.01-9.625
1methanesulfonyl chlorideCS(=O)(=O)Cl-4.87-6.219
23-methylbut-1-eneCC(C)C=C1.832.452
32-ethylpyrazineCCc1cnccn1-5.45-5.809
4heptan-1-olCCCCCCCO-4.21-2.917
...............
637methyl octanoateCCCCCCCC(=O)OC-2.04-3.035
638pyrrolidineC1CCNC1-5.48-4.278
6394-hydroxybenzaldehydec1cc(ccc1C=O)O-8.83-10.050
6401-chloroheptaneCCCCCCCCl0.291.467
6411,4-dioxaneC1COCCO1-5.06-4.269
\n", - "

642 rows × 4 columns

\n", - "
" - ], - "text/plain": [ - " iupac smiles expt calc\n", - "0 4-methoxy-N,N-dimethyl-benzamide CN(C)C(=O)c1ccc(cc1)OC -11.01 -9.625\n", - "1 methanesulfonyl chloride CS(=O)(=O)Cl -4.87 -6.219\n", - "2 3-methylbut-1-ene CC(C)C=C 1.83 2.452\n", - "3 2-ethylpyrazine CCc1cnccn1 -5.45 -5.809\n", - "4 heptan-1-ol CCCCCCCO -4.21 -2.917\n", - ".. ... ... ... ...\n", - "637 methyl octanoate CCCCCCCC(=O)OC -2.04 -3.035\n", - "638 pyrrolidine C1CCNC1 -5.48 -4.278\n", - "639 4-hydroxybenzaldehyde c1cc(ccc1C=O)O -8.83 -10.050\n", - "640 1-chloroheptane CCCCCCCCl 0.29 1.467\n", - "641 1,4-dioxane C1COCCO1 -5.06 -4.269\n", - "\n", - "[642 rows x 4 columns]" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "data = dm.data.freesolv()\n", - "data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] } ], "metadata": { @@ -176,13 +31,8 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.4" - }, - "vscode": { - "interpreter": { - "hash": "52fab7ed47a09dd73497e852b91b984fcb2648f3487052ea0ac1ba8b0f42000e" - } } }, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 5 } diff --git a/docs/tutorials/Molecular_Filters.ipynb b/docs/tutorials/Molecular_Filters.ipynb index d45b1c3..705c8bb 100644 --- a/docs/tutorials/Molecular_Filters.ipynb +++ b/docs/tutorials/Molecular_Filters.ipynb @@ -2,160 +2,79 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, + "id": "cc35111a-d3a8-4313-962c-290bbf563f35", "metadata": {}, "outputs": [], "source": [ "import datamol as dm\n", + "import pandas as pd\n", "\n", - "import medchem" + "import medchem\n" + ] + }, + { + "cell_type": "markdown", + "id": "22726bd9-e8f5-4fec-a145-395c8d6261dd", + "metadata": {}, + "source": [ + "## Generic Filters" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, + "id": "a0a34acc-405c-4546-80ff-d668d6c114ac", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "a4d255bb-e3eb-42e1-9e50-c82dd7ee3624", + "metadata": {}, + "source": [ + "## Rules" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b01dae00-c7e7-4320-8e57-fb745fead31e", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "5ca249eb-8523-493b-a818-7a8fce6a671b", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
iupacsmilesexptcalc
04-methoxy-N,N-dimethyl-benzamideCN(C)C(=O)c1ccc(cc1)OC-11.01-9.625
1methanesulfonyl chlorideCS(=O)(=O)Cl-4.87-6.219
23-methylbut-1-eneCC(C)C=C1.832.452
32-ethylpyrazineCCc1cnccn1-5.45-5.809
4heptan-1-olCCCCCCCO-4.21-2.917
...............
637methyl octanoateCCCCCCCC(=O)OC-2.04-3.035
638pyrrolidineC1CCNC1-5.48-4.278
6394-hydroxybenzaldehydec1cc(ccc1C=O)O-8.83-10.050
6401-chloroheptaneCCCCCCCCl0.291.467
6411,4-dioxaneC1COCCO1-5.06-4.269
\n", - "

642 rows × 4 columns

\n", - "
" - ], - "text/plain": [ - " iupac smiles expt calc\n", - "0 4-methoxy-N,N-dimethyl-benzamide CN(C)C(=O)c1ccc(cc1)OC -11.01 -9.625\n", - "1 methanesulfonyl chloride CS(=O)(=O)Cl -4.87 -6.219\n", - "2 3-methylbut-1-ene CC(C)C=C 1.83 2.452\n", - "3 2-ethylpyrazine CCc1cnccn1 -5.45 -5.809\n", - "4 heptan-1-ol CCCCCCCO -4.21 -2.917\n", - ".. ... ... ... ...\n", - "637 methyl octanoate CCCCCCCC(=O)OC -2.04 -3.035\n", - "638 pyrrolidine C1CCNC1 -5.48 -4.278\n", - "639 4-hydroxybenzaldehyde c1cc(ccc1C=O)O -8.83 -10.050\n", - "640 1-chloroheptane CCCCCCCCl 0.29 1.467\n", - "641 1,4-dioxane C1COCCO1 -5.06 -4.269\n", - "\n", - "[642 rows x 4 columns]" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ - "data = dm.data.freesolv()\n", - "data" + "## Alerts" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "4a08c8e1-1bc1-472d-a63c-a790b6e94785", + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "markdown", + "id": "d4a95097-11c2-43f5-ab54-64612d7b6e58", "metadata": {}, + "source": [ + "# Demerits - Lilly" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "629490f1-a327-41c7-931f-f8a76bca42d2", + "metadata": {}, + "outputs": [], "source": [] } ], @@ -176,13 +95,8 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.4" - }, - "vscode": { - "interpreter": { - "hash": "52fab7ed47a09dd73497e852b91b984fcb2648f3487052ea0ac1ba8b0f42000e" - } } }, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 5 } diff --git a/docs/tutorials/old_getting_started.ipynb b/docs/tutorials/old_getting_started.ipynb deleted file mode 100644 index 33530b8..0000000 --- a/docs/tutorials/old_getting_started.ipynb +++ /dev/null @@ -1,2678 +0,0 @@ -{ - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Medchem\n", - "\n", - "Medchem is a package for applying general filtering rules on a set of molecules to ensure they have drug-like properties.\n", - "\n", - "In this tutorial, we will apply various filtering on an example dataset to get highlight the package API\n", - "\n", - "### Setup" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import datamol as dm\n", - "import numpy as np\n", - "from loguru import logger\n", - "\n", - "data = dm.data.freesolv().sample(500)\n", - "smiles_list = data.smiles.values" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "from medchem.filter import lead\n", - "from medchem.demerits import score, batch_score\n", - "from medchem.alerts import NovartisFilters\n", - "from medchem.alerts import AlertFilters\n", - "from medchem.catalog import NamedCatalogs\n", - "from medchem.utils.loader import get_data_path\n", - "from rdkit.Chem import rdfiltercatalog" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Using the filter module\n", - "\n", - "The filter module provides a variety of two types of filters:\n", - "- `generic`: custom filtering based on some given molecule properties such as number of atoms, presence of specific atom type, etc\n", - "- `lead`: filtering based on structural motifs that are known to either be toxic, reactive, unstable or frequent false positive" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ True, True, True, True, False, False, True, False, False,\n", - " True, False, True, True, True, False, True, False, False,\n", - " False, True, True, False, True, False, False, False, True,\n", - " True, True, True, True, True, False, True, False, False,\n", - " False, True, False, False, False, True, False, False, False,\n", - " True, False, True, False, True, True, False, True, True,\n", - " True, False, True, False, False, False, True, False, False,\n", - " True, False, True, True, False, False, False, False, True,\n", - " True, True, False, True, False, True, True, True, False,\n", - " True, True, False, True, True, True, True, True, False,\n", - " False, True, True, False, True, False, False, False, True,\n", - " False, False, False, False, True, False, False, True, True,\n", - " True, True, True, False, True, True, True, False, True,\n", - " False, False, True, True, True, True, False, False, True,\n", - " False, False, True, True, False, True, True, True, True,\n", - " False, False, False, True, False, False, False, True, False,\n", - " False, True, False, False, True, True, True, False, True,\n", - " False, False, False, True, True, True, False, True, True,\n", - " False, False, False, False, False, True, False, False, False,\n", - " False, False, True, False, True, False, True, False, False,\n", - " True, False, False, True, False, True, True, True, False,\n", - " True, True, True, True, False, True, True, True, False,\n", - " False, True, True, False, True, False, True, False, True,\n", - " True, True, True, False, False, True, False, True, False,\n", - " False, True, False, True, False, True, False, False, False,\n", - " False, True, True, False, False, True, True, False, True,\n", - " True, False, True, True, True, False, False, False, True,\n", - " False, False, False, True, True, False, True, True, False,\n", - " True, True, True, True, False, True, False, True, True,\n", - " True, True, False, True, False, True, False, False, True,\n", - " True, True, False, False, False, True, True, True, False,\n", - " True, False, False, False, False, False, True, False, True,\n", - " True, False, True, True, True, False, True, True, False,\n", - " False, False, True, False, True, False, False, False, True,\n", - " True, False, True, False, False, True, False, False, True,\n", - " True, False, False, False, True, True, True, False, True,\n", - " True, True, True, False, True, False, False, True, True,\n", - " True, False, False, True, False, False, False, True, False,\n", - " False, False, False, True, False, True, True, True, False,\n", - " True, False, False, False, True, False, True, False, False,\n", - " False, False, False, False, True, True, True, False, True,\n", - " False, False, False, False, False, True, True, True, True,\n", - " False, True, True, True, False, True, False, True, False,\n", - " False, False, True, False, False, True, True, False, False,\n", - " True, True, False, True, True, False, True, False, False,\n", - " False, True, True, False, True, True, True, False, False,\n", - " False, False, False, False, False, True, False, False, True,\n", - " True, True, True, True, True, True, True, False, True,\n", - " True, False, False, True, True, True, True, False, False,\n", - " False, True, False, True, False, True, True, True, False,\n", - " False, True, True, True, False, True, False, True, False,\n", - " True, True, True, True, True, True, True, True, False,\n", - " False, True, True, True, False, True, True, False, True,\n", - " False, True, False, True, True, True, False, True, False,\n", - " True, True, True, False, False, True, True, False, True,\n", - " True, False, True, False, False])" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# common filters including pains, brenk, nih, zinc\n", - "pains_a = rdfiltercatalog.FilterCatalogParams.FilterCatalogs.PAINS_A\n", - "lead.catalog_filter(smiles_list, [\"nih\", pains_a, NamedCatalogs.dundee()])" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([False, False, False, True, False, False, True, False, False,\n", - " False, True, True, False, False, False, False, False, False,\n", - " True, True, False, False, False, False, False, True, True,\n", - " True, False, False, True, False, False, False, False, False,\n", - " False, False, False, False, True, True, False, False, False,\n", - " False, False, False, False, False, False, False, False, False,\n", - " False, False, True, True, False, False, True, False, False,\n", - " False, True, False, False, False, False, True, False, False,\n", - " False, False, False, False, True, True, True, False, False,\n", - " True, False, False, False, False, True, False, False, False,\n", - " False, False, False, False, True, True, False, False, False,\n", - " False, False, False, False, True, True, False, False, True,\n", - " False, True, True, False, False, False, False, False, False,\n", - " False, False, True, True, False, False, False, False, False,\n", - " True, False, True, True, False, True, False, False, False,\n", - " False, False, False, False, False, False, False, True, True,\n", - " False, False, False, True, False, False, True, False, True,\n", - " False, False, False, False, True, True, False, False, True,\n", - " False, False, False, False, False, True, False, False, False,\n", - " False, False, True, False, True, False, True, False, True,\n", - " False, False, False, False, False, False, False, False, False,\n", - " True, True, False, False, False, False, False, False, False,\n", - " False, True, True, False, False, False, False, False, False,\n", - " True, False, False, True, True, True, False, False, False,\n", - " False, False, False, False, False, True, False, False, True,\n", - " False, False, False, True, False, False, False, False, False,\n", - " False, False, False, False, True, False, False, False, False,\n", - " False, False, False, True, False, False, False, True, False,\n", - " False, False, False, False, False, False, False, False, False,\n", - " True, True, False, False, False, True, False, True, True,\n", - " False, True, False, False, False, False, True, False, False,\n", - " True, False, False, False, False, False, True, False, False,\n", - " False, False, True, True, False, False, True, False, False,\n", - " False, False, True, False, False, False, False, False, False,\n", - " True, True, False, False, False, True, False, False, True,\n", - " False, False, False, False, False, True, False, False, False,\n", - " False, True, False, False, False, False, True, False, False,\n", - " False, True, False, False, False, False, False, False, False,\n", - " False, False, False, False, False, True, True, True, False,\n", - " False, False, False, False, False, False, True, False, False,\n", - " True, False, False, False, False, True, False, False, False,\n", - " False, False, False, True, False, False, False, True, False,\n", - " False, True, False, False, False, False, False, False, True,\n", - " False, True, True, False, True, False, True, False, True,\n", - " False, True, False, False, False, False, True, False, False,\n", - " False, True, True, False, True, True, True, False, False,\n", - " False, False, False, False, True, False, True, False, True,\n", - " True, False, False, False, False, True, True, False, False,\n", - " True, False, False, False, True, True, False, False, False,\n", - " False, False, False, True, False, False, False, False, False,\n", - " False, False, False, True, False, False, False, True, False,\n", - " False, False, True, True, False, False, False, True, False,\n", - " False, False, False, True, False, False, True, False, True,\n", - " False, False, False, True, True, False, False, True, False,\n", - " False, False, True, False, False, False, False, True, False,\n", - " False, True, False, False, False])" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# filtering based on some commons alerts + additional lead like rules\n", - "lead.alert_filter(smiles_list, alerts=[\"Glaxo\", \"BMS\"], rule_dict=dict(MW=[0, 100]))" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,\n", - " 13, 14, 15, 17, 18, 19, 20, 21, 22, 25, 26, 27, 28,\n", - " 29, 30, 31, 32, 33, 36, 37, 38, 40, 41, 43, 45, 47,\n", - " 48, 49, 50, 52, 53, 54, 56, 57, 58, 59, 60, 61, 62,\n", - " 63, 64, 65, 66, 67, 69, 71, 72, 73, 74, 75, 77, 78,\n", - " 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 90, 91, 92,\n", - " 93, 94, 95, 96, 97, 99, 100, 101, 102, 103, 104, 105, 106,\n", - " 107, 108, 109, 110, 111, 112, 113, 114, 115, 117, 118, 119, 120,\n", - " 121, 122, 123, 125, 127, 128, 129, 131, 132, 133, 134, 135, 136,\n", - " 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,\n", - " 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 163,\n", - " 164, 165, 166, 167, 169, 170, 171, 173, 174, 175, 176, 177, 178,\n", - " 179, 180, 181, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,\n", - " 194, 195, 196, 197, 198, 199, 200, 202, 203, 204, 206, 207, 208,\n", - " 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,\n", - " 222, 223, 224, 225, 226, 227, 228, 230, 231, 233, 234, 235, 236,\n", - " 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249,\n", - " 250, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263,\n", - " 264, 266, 268, 269, 270, 271, 273, 274, 275, 276, 277, 278, 279,\n", - " 280, 281, 282, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,\n", - " 294, 295, 296, 297, 298, 299, 300, 303, 304, 305, 306, 307, 308,\n", - " 309, 310, 311, 313, 314, 315, 317, 318, 319, 320, 321, 322, 323,\n", - " 324, 325, 326, 328, 329, 331, 332, 333, 334, 336, 337, 338, 339,\n", - " 340, 341, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 355,\n", - " 357, 358, 359, 360, 364, 365, 366, 367, 368, 369, 370, 371, 372,\n", - " 373, 374, 375, 376, 377, 379, 380, 381, 382, 383, 384, 385, 387,\n", - " 388, 389, 391, 392, 393, 394, 395, 396, 397, 399, 400, 402, 403,\n", - " 404, 406, 407, 408, 409, 410, 411, 414, 415, 416, 417, 418, 419,\n", - " 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432,\n", - " 433, 434, 435, 436, 437, 438, 439, 440, 442, 443, 444, 445, 446,\n", - " 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459,\n", - " 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472,\n", - " 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485,\n", - " 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 499])" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# filtering based on NIBR screening deck process described in\n", - "# \"Evolution of Novartis' small molecule screening deck design\" by Schuffenhauer, A. et al. J. Med. Chem. (2020),\n", - "# https://dx.doi.org/10.1021/acs.jmedchem.0c01332.\n", - "lead.screening_filter(smiles_list, return_idx=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 0, 4, 37, 61, 62, 72, 73, 84, 89, 98, 106, 113, 132,\n", - " 140, 148, 178, 180, 187, 192, 203, 209, 214, 226, 240, 244, 247,\n", - " 249, 253, 254, 259, 273, 282, 287, 293, 310, 317, 319, 324, 345,\n", - " 374, 377, 383, 384, 385, 399, 400, 417, 419, 434, 442, 446, 448,\n", - " 454, 455, 459, 464, 470, 473, 475, 478, 482, 485, 487, 492, 494])" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Filter based on the demerit scoring of Eli Lilly\n", - "test_config = {\n", - " \"min_atoms\": 10, # default is 1\n", - " \"soft_max_atoms\": 30, # default is 30\n", - " \"hard_max_atoms\": 50, # default is 30\n", - " \"nodemerit\": False, # default is False\n", - " \"dthresh\": 160, # default is None with no threshold\n", - "}\n", - "lead.lilly_demerit_filter(smiles_list, max_demerits=160, return_idx=True, **test_config)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Advanced options\n", - "\n", - "The advanced options allow a better control over the filtering process. They also provide more information on the issues with the molecules." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### AlertFilters\n", - "\n", - "These are the underlying filters called by `lead.alert_filter`. In the output, the compound status is indicated as either `\"Exclude\"` or `\"Ok\"`." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
rule_set_namesmartscatalog_descriptionrule_setsource
10Glaxo55Glaxo Wellcome Hard filters1ChEMBL
5Dundee105University of Dundee NTD Screening Library Fil...2ChEMBL
2BMS180Bristol-Myers Squibb HTS Deck filters3ChEMBL
18PAINS481PAINS filters4ChEMBL
21SureChEMBL166SureChEMBL Non-MedChem Friendly SMARTS5ChEMBL
16MLSMR116NIH MLSMR Excluded Functionality filters (MLSMR)6ChEMBL
12Inpharmatica91Unwanted fragments derived by Inpharmatica Ltd.7ChEMBL
14LINT57Pfizer lint filters (lint)8ChEMBL
0Alarm-NMR75Reactive False Positives in Biochemical Screen...9Litterature
1AlphaScreen-Hitters6Structural filters for compounds that may be a...10Litterature
8GST-Hitters34Structural filters for compounds may prevent G...11Litterature
11HIS-Hitters19Structural filters for compounds prevents the ...12Litterature
15LuciferaseInhibitor3Structural filters for compounds that may inhi...13Litterature
4DNABinder78Structural filters for compounds that may bind...14Litterature
3Chelator55Structural filters for compounds that may inhi...15Litterature
7Frequent-Hitter15Structural filters for compounds that are freq...16Litterature
6Electrophilic119Structural filters for compounds that could ta...17Litterature
9Genotoxic-Carcinogenicity117Structural filters for compounds that may caus...18Litterature
13LD50-Oral20Structural filters for compounds that may caus...19Litterature
17Non-Genotoxic-Carcinogenicity22Structural filters for compounds that may caus...20Litterature
19Reactive-Unstable-Toxic335General very reactive/unstable or Toxic compounds21Litterature
20Skin155Skin Sensitization filters (irritables)22Litterature
22Toxicophore154General Toxicophores23Litterature
\n", - "
" - ], - "text/plain": [ - " rule_set_name smarts \\\n", - "10 Glaxo 55 \n", - "5 Dundee 105 \n", - "2 BMS 180 \n", - "18 PAINS 481 \n", - "21 SureChEMBL 166 \n", - "16 MLSMR 116 \n", - "12 Inpharmatica 91 \n", - "14 LINT 57 \n", - "0 Alarm-NMR 75 \n", - "1 AlphaScreen-Hitters 6 \n", - "8 GST-Hitters 34 \n", - "11 HIS-Hitters 19 \n", - "15 LuciferaseInhibitor 3 \n", - "4 DNABinder 78 \n", - "3 Chelator 55 \n", - "7 Frequent-Hitter 15 \n", - "6 Electrophilic 119 \n", - "9 Genotoxic-Carcinogenicity 117 \n", - "13 LD50-Oral 20 \n", - "17 Non-Genotoxic-Carcinogenicity 22 \n", - "19 Reactive-Unstable-Toxic 335 \n", - "20 Skin 155 \n", - "22 Toxicophore 154 \n", - "\n", - " catalog_description rule_set source \n", - "10 Glaxo Wellcome Hard filters 1 ChEMBL \n", - "5 University of Dundee NTD Screening Library Fil... 2 ChEMBL \n", - "2 Bristol-Myers Squibb HTS Deck filters 3 ChEMBL \n", - "18 PAINS filters 4 ChEMBL \n", - "21 SureChEMBL Non-MedChem Friendly SMARTS 5 ChEMBL \n", - "16 NIH MLSMR Excluded Functionality filters (MLSMR) 6 ChEMBL \n", - "12 Unwanted fragments derived by Inpharmatica Ltd. 7 ChEMBL \n", - "14 Pfizer lint filters (lint) 8 ChEMBL \n", - "0 Reactive False Positives in Biochemical Screen... 9 Litterature \n", - "1 Structural filters for compounds that may be a... 10 Litterature \n", - "8 Structural filters for compounds may prevent G... 11 Litterature \n", - "11 Structural filters for compounds prevents the ... 12 Litterature \n", - "15 Structural filters for compounds that may inhi... 13 Litterature \n", - "4 Structural filters for compounds that may bind... 14 Litterature \n", - "3 Structural filters for compounds that may inhi... 15 Litterature \n", - "7 Structural filters for compounds that are freq... 16 Litterature \n", - "6 Structural filters for compounds that could ta... 17 Litterature \n", - "9 Structural filters for compounds that may caus... 18 Litterature \n", - "13 Structural filters for compounds that may caus... 19 Litterature \n", - "17 Structural filters for compounds that may caus... 20 Litterature \n", - "19 General very reactive/unstable or Toxic compounds 21 Litterature \n", - "20 Skin Sensitization filters (irritables) 22 Litterature \n", - "22 General Toxicophores 23 Litterature " - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "filter_obj = AlertFilters(alerts_set=[\"inpharmatica\", \"SureChEMBL\"])\n", - "filter_obj.list_default_available_alerts()" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
_smilesstatusreasonsMWLogPHBDHBATPSA
0c1ccc(Cn2ccnc2)cc1OkNone158.2041.931400217.82
1NC(=O)c1ccccc1OkNone121.1390.785501143.09
2c1cc2c3c(cccc3c1)CC2OkNone154.2122.93840000.00
3Cc1cnccn1OkNone94.1170.785020225.78
4CN(C)C(=O)c1ccc([N+](=O)[O-])cc1OkNone194.1901.296600363.45
...........................
495Cc1ccc(O)c(C)c1OkNone122.1672.009041120.23
496C/C=C/CCCCOkNone98.1892.75270000.00
497CNc1ccccc1OkNone107.1561.728301112.03
498ClCCClExcludealkyl_halides; Filter1_2_halo_ether; Filter26_...98.9601.46400000.00
499CCCCOC(C)=OOkNone116.1601.349600226.30
\n", - "

500 rows × 8 columns

\n", - "
" - ], - "text/plain": [ - " _smiles status \\\n", - "0 c1ccc(Cn2ccnc2)cc1 Ok \n", - "1 NC(=O)c1ccccc1 Ok \n", - "2 c1cc2c3c(cccc3c1)CC2 Ok \n", - "3 Cc1cnccn1 Ok \n", - "4 CN(C)C(=O)c1ccc([N+](=O)[O-])cc1 Ok \n", - ".. ... ... \n", - "495 Cc1ccc(O)c(C)c1 Ok \n", - "496 C/C=C/CCCC Ok \n", - "497 CNc1ccccc1 Ok \n", - "498 ClCCCl Exclude \n", - "499 CCCCOC(C)=O Ok \n", - "\n", - " reasons MW LogP HBD \\\n", - "0 None 158.204 1.93140 0 \n", - "1 None 121.139 0.78550 1 \n", - "2 None 154.212 2.93840 0 \n", - "3 None 94.117 0.78502 0 \n", - "4 None 194.190 1.29660 0 \n", - ".. ... ... ... ... \n", - "495 None 122.167 2.00904 1 \n", - "496 None 98.189 2.75270 0 \n", - "497 None 107.156 1.72830 1 \n", - "498 alkyl_halides; Filter1_2_halo_ether; Filter26_... 98.960 1.46400 0 \n", - "499 None 116.160 1.34960 0 \n", - "\n", - " HBA TPSA \n", - "0 2 17.82 \n", - "1 1 43.09 \n", - "2 0 0.00 \n", - "3 2 25.78 \n", - "4 3 63.45 \n", - ".. ... ... \n", - "495 1 20.23 \n", - "496 0 0.00 \n", - "497 1 12.03 \n", - "498 0 0.00 \n", - "499 2 26.30 \n", - "\n", - "[500 rows x 8 columns]" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "out = filter_obj(smiles_list)\n", - "out" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### NovartisFilter\n", - "\n", - "These are the underlying filters called by `lead.screening_filter`. \n", - "\n", - "Here is an explanation of the output:\n", - "- **status**: one of `[\"Exclude\", \"Flag\", \"Annotations\", \"Ok\"]` (ordered by quality). Generally, you can keep anything without the \"Exclude\" label, as long as you also apply a maximum severity score for compounds that collects too many flags.\n", - "- **covalent**: number of potentially covalent motifs contained in the compound\n", - "- **severity**: how severe are the issues with the molecules:\n", - " - `0`: compound has no flags, might have annotations;\n", - " - `1-9`: number of flags the compound raises;\n", - " - `>= 10`: default exclusion criterion used in the paper\n", - "- **special_mol**: whether the compound/parts of the compound belongs to a special class of molecules (e.g peptides, glycosides, fatty acid). In that case, you should review the rejection reasons." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
_smilesstatusreasonsseveritycovalentspecial_mol
0c1ccc(Cn2ccnc2)cc1OkNone0NaNNaN
1NC(=O)c1ccccc1OkNone0NaNNaN
2c1cc2c3c(cccc3c1)CC2OkNone0NaNNaN
3Cc1cnccn1OkNone0NaNNaN
4CN(C)C(=O)c1ccc([N+](=O)[O-])cc1Annotationsnitro_count_1_min(1)00.00.0
.....................
495Cc1ccc(O)c(C)c1OkNone0NaNNaN
496C/C=C/CCCCOkNone0NaNNaN
497CNc1ccccc1OkNone0NaNNaN
498ClCCClExcludehalo_ether_min(1); halogen_alkyl_min(1); halog...102.00.0
499CCCCOC(C)=OOkNone0NaNNaN
\n", - "

500 rows × 6 columns

\n", - "
" - ], - "text/plain": [ - " _smiles status \\\n", - "0 c1ccc(Cn2ccnc2)cc1 Ok \n", - "1 NC(=O)c1ccccc1 Ok \n", - "2 c1cc2c3c(cccc3c1)CC2 Ok \n", - "3 Cc1cnccn1 Ok \n", - "4 CN(C)C(=O)c1ccc([N+](=O)[O-])cc1 Annotations \n", - ".. ... ... \n", - "495 Cc1ccc(O)c(C)c1 Ok \n", - "496 C/C=C/CCCC Ok \n", - "497 CNc1ccccc1 Ok \n", - "498 ClCCCl Exclude \n", - "499 CCCCOC(C)=O Ok \n", - "\n", - " reasons severity covalent \\\n", - "0 None 0 NaN \n", - "1 None 0 NaN \n", - "2 None 0 NaN \n", - "3 None 0 NaN \n", - "4 nitro_count_1_min(1) 0 0.0 \n", - ".. ... ... ... \n", - "495 None 0 NaN \n", - "496 None 0 NaN \n", - "497 None 0 NaN \n", - "498 halo_ether_min(1); halogen_alkyl_min(1); halog... 10 2.0 \n", - "499 None 0 NaN \n", - "\n", - " special_mol \n", - "0 NaN \n", - "1 NaN \n", - "2 NaN \n", - "3 NaN \n", - "4 0.0 \n", - ".. ... \n", - "495 NaN \n", - "496 NaN \n", - "497 NaN \n", - "498 0.0 \n", - "499 NaN \n", - "\n", - "[500 rows x 6 columns]" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "filter_obj = NovartisFilters()\n", - "out = filter_obj(smiles_list)\n", - "out" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Demerits scoring\n", - "\n", - "Demerit scoring uses the Eli Lilly filter rules. Those are complex rules, that can be customized in any way you wish. \n", - "\n", - "The following \"information\" will be computed and added as columns to a DataFrame for each run:\n", - "\n", - "- **status**: this was added for compatibility and has values `\"Exclude\"`, `\"Flag\"` or `\"Ok\"`.\n", - "- **rejected** : whether the molecule pass the filter or was rejected\n", - "- **reasons**: the reasons why the molecule was rejected if available\n", - "- **demerit_score** a demerit score for molecules. The lower the better. A cutoff is used to reject molecule with too many demerits, which you can refilter again after.\n", - "- **step**: step of the pipeline where molecule was filtered out, if available\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
_smilesIDreasonssteprejecteddemerit_scorestatus
0C1=CC=C(C=C1)CN1C=CN=C10NaN4False0.0Ok
1C1=CC=C(C=C1)C(=O)N1not_enough_atoms1TrueNaNExclude
2C1=CC2=CC=CC3=C2C(=C1)CC32no_interesting_atoms1TrueNaNExclude
3CC1=CN=CC=N13not_enough_atoms1TrueNaNExclude
4CN(C)C(=O)C1=CC=C(C=C1)N(=O)=O4nitro:D604False60.0Flag
........................
495CC1=CC=C(O)C(=C1)C495not_enough_atoms1TrueNaNExclude
496CCCC/C=C/C496not_enough_atoms1TrueNaNExclude
497CNC1=CC=CC=C1497not_enough_atoms1TrueNaNExclude
498C(Cl)CCl498not_enough_atoms1TrueNaNExclude
499CCCCOC(=O)C499not_enough_atoms1TrueNaNExclude
\n", - "

500 rows × 7 columns

\n", - "
" - ], - "text/plain": [ - " _smiles ID reasons step \\\n", - "0 C1=CC=C(C=C1)CN1C=CN=C1 0 NaN 4 \n", - "1 C1=CC=C(C=C1)C(=O)N 1 not_enough_atoms 1 \n", - "2 C1=CC2=CC=CC3=C2C(=C1)CC3 2 no_interesting_atoms 1 \n", - "3 CC1=CN=CC=N1 3 not_enough_atoms 1 \n", - "4 CN(C)C(=O)C1=CC=C(C=C1)N(=O)=O 4 nitro:D60 4 \n", - ".. ... ... ... ... \n", - "495 CC1=CC=C(O)C(=C1)C 495 not_enough_atoms 1 \n", - "496 CCCC/C=C/C 496 not_enough_atoms 1 \n", - "497 CNC1=CC=CC=C1 497 not_enough_atoms 1 \n", - "498 C(Cl)CCl 498 not_enough_atoms 1 \n", - "499 CCCCOC(=O)C 499 not_enough_atoms 1 \n", - "\n", - " rejected demerit_score status \n", - "0 False 0.0 Ok \n", - "1 True NaN Exclude \n", - "2 True NaN Exclude \n", - "3 True NaN Exclude \n", - "4 False 60.0 Flag \n", - ".. ... ... ... \n", - "495 True NaN Exclude \n", - "496 True NaN Exclude \n", - "497 True NaN Exclude \n", - "498 True NaN Exclude \n", - "499 True NaN Exclude \n", - "\n", - "[500 rows x 7 columns]" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "out = score(smiles_list, **test_config)\n", - "out" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "# Although the demirits.score is already quite fast, you can also call the parallelized version of it using the `batch_score` function" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 5/5 [00:00<00:00, 8.17it/s]\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
_smilesIDreasonssteprejecteddemerit_scorestatus
0C1=CC=C(C=C1)CN1C=CN=C10NaN4False0.0Ok
1C1=CC=C(C=C1)C(=O)N1not_enough_atoms1TrueNaNExclude
2C1=CC2=CC=CC3=C2C(=C1)CC32no_interesting_atoms1TrueNaNExclude
3CC1=CN=CC=N13not_enough_atoms1TrueNaNExclude
4CN(C)C(=O)C1=CC=C(C=C1)N(=O)=O4nitro:D604False60.0Flag
........................
495CC1=CC=C(O)C(=C1)C495not_enough_atoms1TrueNaNExclude
496CCCC/C=C/C496not_enough_atoms1TrueNaNExclude
497CNC1=CC=CC=C1497not_enough_atoms1TrueNaNExclude
498C(Cl)CCl498not_enough_atoms1TrueNaNExclude
499CCCCOC(=O)C499not_enough_atoms1TrueNaNExclude
\n", - "

500 rows × 7 columns

\n", - "
" - ], - "text/plain": [ - " _smiles ID reasons step \\\n", - "0 C1=CC=C(C=C1)CN1C=CN=C1 0 NaN 4 \n", - "1 C1=CC=C(C=C1)C(=O)N 1 not_enough_atoms 1 \n", - "2 C1=CC2=CC=CC3=C2C(=C1)CC3 2 no_interesting_atoms 1 \n", - "3 CC1=CN=CC=N1 3 not_enough_atoms 1 \n", - "4 CN(C)C(=O)C1=CC=C(C=C1)N(=O)=O 4 nitro:D60 4 \n", - ".. ... ... ... ... \n", - "495 CC1=CC=C(O)C(=C1)C 495 not_enough_atoms 1 \n", - "496 CCCC/C=C/C 496 not_enough_atoms 1 \n", - "497 CNC1=CC=CC=C1 497 not_enough_atoms 1 \n", - "498 C(Cl)CCl 498 not_enough_atoms 1 \n", - "499 CCCCOC(=O)C 499 not_enough_atoms 1 \n", - "\n", - " rejected demerit_score status \n", - "0 False 0.0 Ok \n", - "1 True NaN Exclude \n", - "2 True NaN Exclude \n", - "3 True NaN Exclude \n", - "4 False 60.0 Flag \n", - ".. ... ... ... \n", - "495 True NaN Exclude \n", - "496 True NaN Exclude \n", - "497 True NaN Exclude \n", - "498 True NaN Exclude \n", - "499 True NaN Exclude \n", - "\n", - "[500 rows x 7 columns]" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "out2 = batch_score(smiles_list, n_jobs=2, batch_size=100, progress=True, **test_config)\n", - "out2" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Functional group filters\n", - "\n", - "It is also possible to initialize a list of functional group to use for molecules matching" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ - "from medchem.groups import ChemicalGroup\n", - "c_group = ChemicalGroup(groups=\"rings_in_drugs\")" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
namesmilessmartsgroupmatches
204diazineC1=NC=CC=N1[#6]1:[#7]:[#6]:[#6]:[#6]:[#7]:1rings_in_drugs((24, 23, 22, 18, 17, 25),)
2341H-pyrazoleN1=CC=CN1[#7]1:[#6]:[#6]:[#6]:[#7H]:1rings_in_drugs((12, 13, 14, 15, 16),)
2571H-pyrroleC1=CC=CN1[#6]1:[#6]:[#6]:[#6]:[#7H]:1rings_in_drugs((20, 19, 18, 22, 21),)
\n", - "
" - ], - "text/plain": [ - " name smiles smarts \\\n", - "204 diazine C1=NC=CC=N1 [#6]1:[#7]:[#6]:[#6]:[#6]:[#7]:1 \n", - "234 1H-pyrazole N1=CC=CN1 [#7]1:[#6]:[#6]:[#6]:[#7H]:1 \n", - "257 1H-pyrrole C1=CC=CN1 [#6]1:[#6]:[#6]:[#6]:[#7H]:1 \n", - "\n", - " group matches \n", - "204 rings_in_drugs ((24, 23, 22, 18, 17, 25),) \n", - "234 rings_in_drugs ((12, 13, 14, 15, 16),) \n", - "257 rings_in_drugs ((20, 19, 18, 22, 21),) " - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mol = dm.to_mol(\"CCS(=O)(=O)N1CC(C1)(CC#N)N2C=C(C=N2)C3=C4C=CNC4=NC=N3\")\n", - "c_group.get_matches(mol, use_smiles=True)\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can also load a custom library of queries. You custom df needs to provide the following columns:\n", - "`'smiles'/'smarts'`, `'name'` and `\"group\"` and optionally `'hierarchy'`\n" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
namesmilessmartsgroupmatches
0HBA[!$([#6,F,Cl,Br,I,o,s,nX3,#7v5,#15v5,#16v4,#16...custom_queries((3,), (4,), (5,), (11,), (16,), (23,), (25,))
2HBD[!$([#6,H0,-,-2,-3])]custom_queries((21,),)
3HBD[!H0;#7,#8,#9]custom_queries((21,),)
12Hydrogen[*!H0,#1]custom_queries((0,), (1,), (6,), (8,), (9,), (13,), (15,), (...
13Hydrogen[#6!H0,#1]custom_queries((0,), (1,), (6,), (8,), (9,), (13,), (15,), (...
14Hydrogen[H,#1]custom_queries((13,), (15,), (19,), (20,), (21,), (24,))
16Acyclic Bonds*!@*custom_queries((0, 1), (1, 2), (2, 3), (2, 4), (2, 5), (7, 9...
18Rotable Bond[!$(*#*)&!D1]-!@[!$(*#*)&!D1]custom_queries((1, 2), (2, 5), (7, 9), (7, 12), (14, 17))
20SP3 Nitrogen[$([NX4+]),$([NX3]);!$(*=*)&!$(*:*)]custom_queries((5,),)
21SP2 Nitrogen[$([nX3](:*):*),$([nX2](:*):*),$([#7X2]=*),$([...custom_queries((12,), (16,), (21,), (23,), (25,))
22SP2 Carbon[$([cX3](:*):*),$([cX2+](:*):*),$([CX3]=*),$([...custom_queries((13,), (14,), (15,), (17,), (18,), (19,), (20...
23Aromatic SP2 Carbon[$([cX3](:*):*),$([cX2+](:*):*)]custom_queries((13,), (14,), (15,), (17,), (18,), (19,), (20...
24Chiral Carbon[$([#6X4@](*)(*)(*)*),$([#6X4@H](*)(*)*)]custom_queries((7,),)
\n", - "
" - ], - "text/plain": [ - " name smiles \\\n", - "0 HBA \n", - "2 HBD \n", - "3 HBD \n", - "12 Hydrogen \n", - "13 Hydrogen \n", - "14 Hydrogen \n", - "16 Acyclic Bonds \n", - "18 Rotable Bond \n", - "20 SP3 Nitrogen \n", - "21 SP2 Nitrogen \n", - "22 SP2 Carbon \n", - "23 Aromatic SP2 Carbon \n", - "24 Chiral Carbon \n", - "\n", - " smarts group \\\n", - "0 [!$([#6,F,Cl,Br,I,o,s,nX3,#7v5,#15v5,#16v4,#16... custom_queries \n", - "2 [!$([#6,H0,-,-2,-3])] custom_queries \n", - "3 [!H0;#7,#8,#9] custom_queries \n", - "12 [*!H0,#1] custom_queries \n", - "13 [#6!H0,#1] custom_queries \n", - "14 [H,#1] custom_queries \n", - "16 *!@* custom_queries \n", - "18 [!$(*#*)&!D1]-!@[!$(*#*)&!D1] custom_queries \n", - "20 [$([NX4+]),$([NX3]);!$(*=*)&!$(*:*)] custom_queries \n", - "21 [$([nX3](:*):*),$([nX2](:*):*),$([#7X2]=*),$([... custom_queries \n", - "22 [$([cX3](:*):*),$([cX2+](:*):*),$([CX3]=*),$([... custom_queries \n", - "23 [$([cX3](:*):*),$([cX2+](:*):*)] custom_queries \n", - "24 [$([#6X4@](*)(*)(*)*),$([#6X4@H](*)(*)*)] custom_queries \n", - "\n", - " matches \n", - "0 ((3,), (4,), (5,), (11,), (16,), (23,), (25,)) \n", - "2 ((21,),) \n", - "3 ((21,),) \n", - "12 ((0,), (1,), (6,), (8,), (9,), (13,), (15,), (... \n", - "13 ((0,), (1,), (6,), (8,), (9,), (13,), (15,), (... \n", - "14 ((13,), (15,), (19,), (20,), (21,), (24,)) \n", - "16 ((0, 1), (1, 2), (2, 3), (2, 4), (2, 5), (7, 9... \n", - "18 ((1, 2), (2, 5), (7, 9), (7, 12), (14, 17)) \n", - "20 ((5,),) \n", - "21 ((12,), (16,), (21,), (23,), (25,)) \n", - "22 ((13,), (14,), (15,), (17,), (18,), (19,), (20... \n", - "23 ((13,), (14,), (15,), (17,), (18,), (19,), (20... \n", - "24 ((7,),) " - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "c_group = ChemicalGroup(groups_db=get_data_path(\"smarts_bank.csv\"))\n", - "c_group.get_matches(mol, use_smiles=False)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### PhysChem Rule application\n", - "\n", - "You can also apply a set of physchem rules to a list of compounds" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can apply the basic rules independently" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], - "source": [ - "from medchem.rules.basic_rules import rule_of_five, rule_of_three, rule_of_leadlike_soft" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "RO5 True\n", - "RO3 False\n", - "ROLS True\n" - ] - } - ], - "source": [ - "print(\"RO5\", rule_of_five(mol))\n", - "print(\"RO3\", rule_of_three(mol))\n", - "print(\"ROLS\", rule_of_leadlike_soft(mol))" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To list all available rules and what they are good for, use :" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [], - "source": [ - "from medchem.rules import RuleFilters" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
namerulesdescription
0rule_of_fiveMW <= 500 & logP <= 5 & HBD <= 5 & HBA <= 10leadlike;druglike;small molecule;library design
1rule_of_five_beyondMW <= 1000 & logP in [-2, 10] & HBD <= 6 & HBA...leadlike;druglike;small molecule;library design
2rule_of_fourMW >= 400 & logP >= 4 & RINGS >=4 & HBA >= 4PPI inhibitor;druglike
3rule_of_threeMW <= 300 & logP <= 3 & HBA <= 3 & HBD <= 3 & ...fragment;building block
4rule_of_three_extendedMW <= 300 & logP in [-3, 3] & HBA <= 6 & HBD <...fragment;building block
5rule_of_twoMW <= 200 & logP <= 2 & HBA <= 4 & HBD <= 2fragment;reagent;building block
6rule_of_ghoseMW in [160, 480] & logP in [-0.4, 5.6] & Natom...leadlike;druglike;small molecule;library design
7rule_of_veberrotatable bond <= 10 & TPSA < 140druglike;leadlike;small molecule;oral
8rule_of_reosMW in [200, 500] & logP in [-5, 5] & HBA in [0...druglike;small molecule;library design;HTS
9rule_of_chemaxon_druglikenessMW < 400 & logP < 5 & HBA <= 10 & HBD <= 5 & r...leadlike;druglike;small molecule
10rule_of_eganTPSA in [0, 132] & logP in [-1, 6]druglike;small molecule;admet;absorption;perme...
11rule_of_pfizer_3_75not (TPSA < 75 & logP > 3)druglike;toxicity;invivo;small molecule
12rule_of_gsk_4_400MW <= 400 & logP <= 4druglike;admet;small molecule
13rule_of_opreaHBD in [0, 2] & HBA in [2, 9] & ROTBONDS in [2...druglike;small molecule
14rule_of_xuHBD <= 5 & HBA <= 10 & ROTBONDS in [2, 35] & R...druglike;small molecule;library design
15rule_of_cnsMW in [135, 582] & logP in [-0.2, 6.1] & TPSA ...druglike;CNS;BBB;small molecule
16rule_of_respiratoryMW in [240, 520] & logP in [-2, 4.7] & HBONDS...druglike;respiratory;small molecule;nasal;inha...
17rule_of_zincMW in [60, 600] & logP < in [-4, 6] & HBD <= 6...druglike;small molecule;library design;zinc
18rule_of_leadlike_softMW in [150, 400] & logP < in [-3, 4] & HBD <= ...leadlike;small molecule;library design;admet
19rule_of_druglike_softMW in [100, 600] & logP < in [-3, 6] & HBD <= ...druglike;small molecule;library design
\n", - "
" - ], - "text/plain": [ - " name \\\n", - "0 rule_of_five \n", - "1 rule_of_five_beyond \n", - "2 rule_of_four \n", - "3 rule_of_three \n", - "4 rule_of_three_extended \n", - "5 rule_of_two \n", - "6 rule_of_ghose \n", - "7 rule_of_veber \n", - "8 rule_of_reos \n", - "9 rule_of_chemaxon_druglikeness \n", - "10 rule_of_egan \n", - "11 rule_of_pfizer_3_75 \n", - "12 rule_of_gsk_4_400 \n", - "13 rule_of_oprea \n", - "14 rule_of_xu \n", - "15 rule_of_cns \n", - "16 rule_of_respiratory \n", - "17 rule_of_zinc \n", - "18 rule_of_leadlike_soft \n", - "19 rule_of_druglike_soft \n", - "\n", - " rules \\\n", - "0 MW <= 500 & logP <= 5 & HBD <= 5 & HBA <= 10 \n", - "1 MW <= 1000 & logP in [-2, 10] & HBD <= 6 & HBA... \n", - "2 MW >= 400 & logP >= 4 & RINGS >=4 & HBA >= 4 \n", - "3 MW <= 300 & logP <= 3 & HBA <= 3 & HBD <= 3 & ... \n", - "4 MW <= 300 & logP in [-3, 3] & HBA <= 6 & HBD <... \n", - "5 MW <= 200 & logP <= 2 & HBA <= 4 & HBD <= 2 \n", - "6 MW in [160, 480] & logP in [-0.4, 5.6] & Natom... \n", - "7 rotatable bond <= 10 & TPSA < 140 \n", - "8 MW in [200, 500] & logP in [-5, 5] & HBA in [0... \n", - "9 MW < 400 & logP < 5 & HBA <= 10 & HBD <= 5 & r... \n", - "10 TPSA in [0, 132] & logP in [-1, 6] \n", - "11 not (TPSA < 75 & logP > 3) \n", - "12 MW <= 400 & logP <= 4 \n", - "13 HBD in [0, 2] & HBA in [2, 9] & ROTBONDS in [2... \n", - "14 HBD <= 5 & HBA <= 10 & ROTBONDS in [2, 35] & R... \n", - "15 MW in [135, 582] & logP in [-0.2, 6.1] & TPSA ... \n", - "16 MW in [240, 520] & logP in [-2, 4.7] & HBONDS... \n", - "17 MW in [60, 600] & logP < in [-4, 6] & HBD <= 6... \n", - "18 MW in [150, 400] & logP < in [-3, 4] & HBD <= ... \n", - "19 MW in [100, 600] & logP < in [-3, 6] & HBD <= ... \n", - "\n", - " description \n", - "0 leadlike;druglike;small molecule;library design \n", - "1 leadlike;druglike;small molecule;library design \n", - "2 PPI inhibitor;druglike \n", - "3 fragment;building block \n", - "4 fragment;building block \n", - "5 fragment;reagent;building block \n", - "6 leadlike;druglike;small molecule;library design \n", - "7 druglike;leadlike;small molecule;oral \n", - "8 druglike;small molecule;library design;HTS \n", - "9 leadlike;druglike;small molecule \n", - "10 druglike;small molecule;admet;absorption;perme... \n", - "11 druglike;toxicity;invivo;small molecule \n", - "12 druglike;admet;small molecule \n", - "13 druglike;small molecule \n", - "14 druglike;small molecule;library design \n", - "15 druglike;CNS;BBB;small molecule \n", - "16 druglike;respiratory;small molecule;nasal;inha... \n", - "17 druglike;small molecule;library design;zinc \n", - "18 leadlike;small molecule;library design;admet \n", - "19 druglike;small molecule;library design " - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "RuleFilters.list_available_rules()" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To list the available rules for small molecules only, you can use the `list_available_rules(\"small molecule\")`" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
namerulesdescription
0rule_of_fiveMW <= 500 & logP <= 5 & HBD <= 5 & HBA <= 10leadlike;druglike;small molecule;library design
1rule_of_five_beyondMW <= 1000 & logP in [-2, 10] & HBD <= 6 & HBA...leadlike;druglike;small molecule;library design
6rule_of_ghoseMW in [160, 480] & logP in [-0.4, 5.6] & Natom...leadlike;druglike;small molecule;library design
7rule_of_veberrotatable bond <= 10 & TPSA < 140druglike;leadlike;small molecule;oral
8rule_of_reosMW in [200, 500] & logP in [-5, 5] & HBA in [0...druglike;small molecule;library design;HTS
9rule_of_chemaxon_druglikenessMW < 400 & logP < 5 & HBA <= 10 & HBD <= 5 & r...leadlike;druglike;small molecule
10rule_of_eganTPSA in [0, 132] & logP in [-1, 6]druglike;small molecule;admet;absorption;perme...
11rule_of_pfizer_3_75not (TPSA < 75 & logP > 3)druglike;toxicity;invivo;small molecule
12rule_of_gsk_4_400MW <= 400 & logP <= 4druglike;admet;small molecule
13rule_of_opreaHBD in [0, 2] & HBA in [2, 9] & ROTBONDS in [2...druglike;small molecule
14rule_of_xuHBD <= 5 & HBA <= 10 & ROTBONDS in [2, 35] & R...druglike;small molecule;library design
15rule_of_cnsMW in [135, 582] & logP in [-0.2, 6.1] & TPSA ...druglike;CNS;BBB;small molecule
16rule_of_respiratoryMW in [240, 520] & logP in [-2, 4.7] & HBONDS...druglike;respiratory;small molecule;nasal;inha...
17rule_of_zincMW in [60, 600] & logP < in [-4, 6] & HBD <= 6...druglike;small molecule;library design;zinc
18rule_of_leadlike_softMW in [150, 400] & logP < in [-3, 4] & HBD <= ...leadlike;small molecule;library design;admet
19rule_of_druglike_softMW in [100, 600] & logP < in [-3, 6] & HBD <= ...druglike;small molecule;library design
\n", - "
" - ], - "text/plain": [ - " name \\\n", - "0 rule_of_five \n", - "1 rule_of_five_beyond \n", - "6 rule_of_ghose \n", - "7 rule_of_veber \n", - "8 rule_of_reos \n", - "9 rule_of_chemaxon_druglikeness \n", - "10 rule_of_egan \n", - "11 rule_of_pfizer_3_75 \n", - "12 rule_of_gsk_4_400 \n", - "13 rule_of_oprea \n", - "14 rule_of_xu \n", - "15 rule_of_cns \n", - "16 rule_of_respiratory \n", - "17 rule_of_zinc \n", - "18 rule_of_leadlike_soft \n", - "19 rule_of_druglike_soft \n", - "\n", - " rules \\\n", - "0 MW <= 500 & logP <= 5 & HBD <= 5 & HBA <= 10 \n", - "1 MW <= 1000 & logP in [-2, 10] & HBD <= 6 & HBA... \n", - "6 MW in [160, 480] & logP in [-0.4, 5.6] & Natom... \n", - "7 rotatable bond <= 10 & TPSA < 140 \n", - "8 MW in [200, 500] & logP in [-5, 5] & HBA in [0... \n", - "9 MW < 400 & logP < 5 & HBA <= 10 & HBD <= 5 & r... \n", - "10 TPSA in [0, 132] & logP in [-1, 6] \n", - "11 not (TPSA < 75 & logP > 3) \n", - "12 MW <= 400 & logP <= 4 \n", - "13 HBD in [0, 2] & HBA in [2, 9] & ROTBONDS in [2... \n", - "14 HBD <= 5 & HBA <= 10 & ROTBONDS in [2, 35] & R... \n", - "15 MW in [135, 582] & logP in [-0.2, 6.1] & TPSA ... \n", - "16 MW in [240, 520] & logP in [-2, 4.7] & HBONDS... \n", - "17 MW in [60, 600] & logP < in [-4, 6] & HBD <= 6... \n", - "18 MW in [150, 400] & logP < in [-3, 4] & HBD <= ... \n", - "19 MW in [100, 600] & logP < in [-3, 6] & HBD <= ... \n", - "\n", - " description \n", - "0 leadlike;druglike;small molecule;library design \n", - "1 leadlike;druglike;small molecule;library design \n", - "6 leadlike;druglike;small molecule;library design \n", - "7 druglike;leadlike;small molecule;oral \n", - "8 druglike;small molecule;library design;HTS \n", - "9 leadlike;druglike;small molecule \n", - "10 druglike;small molecule;admet;absorption;perme... \n", - "11 druglike;toxicity;invivo;small molecule \n", - "12 druglike;admet;small molecule \n", - "13 druglike;small molecule \n", - "14 druglike;small molecule;library design \n", - "15 druglike;CNS;BBB;small molecule \n", - "16 druglike;respiratory;small molecule;nasal;inha... \n", - "17 druglike;small molecule;library design;zinc \n", - "18 leadlike;small molecule;library design;admet \n", - "19 druglike;small molecule;library design " - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "RuleFilters.list_available_rules(\"small molecule\")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can also apply the rule filter to a batch of molecules." - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [], - "source": [ - "rule_obj = RuleFilters(rule_list=[\"rule_of_five\", \"rule_of_oprea\", \"rule_of_cns\", \"rule_of_leadlike_soft\"], rule_list_names=[\"rule_of_five\", \"rule_of_oprea\", \"rule_of_cns\", \"rule_of_leadlike_soft\"], precompute_props=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Props: 100%|██████████| 500/500 [00:00<00:00, 5903.89it/s] \n", - "Props: 100%|██████████| 500/500 [00:00<00:00, 7238.20it/s]\n", - "Props: 100%|██████████| 500/500 [00:00<00:00, 8098.33it/s]\n", - "Props: 100%|██████████| 500/500 [00:00<00:00, 1102.02it/s]\n", - "100%|██████████| 4/4 [00:00<00:00, 5.86it/s]\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
rule_of_fiverule_of_oprearule_of_cnsrule_of_leadlike_soft
0TrueTrueTrueTrue
1TrueFalseFalseFalse
2TrueFalseFalseFalse
3TrueFalseFalseFalse
4TrueTrueTrueTrue
...............
495TrueFalseFalseFalse
496TrueFalseFalseFalse
497TrueFalseFalseFalse
498TrueFalseFalseFalse
499TrueFalseFalseFalse
\n", - "

500 rows × 4 columns

\n", - "
" - ], - "text/plain": [ - " rule_of_five rule_of_oprea rule_of_cns rule_of_leadlike_soft\n", - "0 True True True True\n", - "1 True False False False\n", - "2 True False False False\n", - "3 True False False False\n", - "4 True True True True\n", - ".. ... ... ... ...\n", - "495 True False False False\n", - "496 True False False False\n", - "497 True False False False\n", - "498 True False False False\n", - "499 True False False False\n", - "\n", - "[500 rows x 4 columns]" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "out = rule_obj(smiles_list, n_jobs=-1, progress=True)\n", - "# you need to reset the columns because the input rule list can be columns\n", - "out" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Available Catalogs\n", - "\n", - "For a list of all available named catalogs, you can use `catalog.list_named_catalogs`" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['tox', 'pains', 'pains_a', 'pains_b', 'pains_c', 'nih', 'zinc', 'brenk', 'dundee', 'bms', 'glaxo', 'schembl', 'mlsmr', 'inpharmatica', 'lint', 'alarm_nmr', 'alphascreen', 'gst_hitters', 'his_hitters', 'luciferase', 'dnabinder', 'chelator', 'hitters', 'electrophilic', 'carcinogen', 'ld50_oral', 'reactive_unstable_toxic', 'skin', 'toxicophore', 'nibr', 'bredt', 'unstable_graph']\n" - ] - } - ], - "source": [ - "from medchem import catalog\n", - "print(catalog.list_named_catalogs())" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Build custom catalogs\n", - "You can build a custom catalog based on smarts you have defined. For example, using an internal smarts bank." - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [], - "source": [ - "from medchem.catalog import from_smarts\n", - "import pandas as pd" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [], - "source": [ - "smarts_bank = pd.read_csv(get_data_path(\"smarts_bank.csv\"))" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [], - "source": [ - "custom_catalog = from_smarts(smarts_bank.smarts.values, smarts_bank.name.values, entry_as_inds=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcIAAACWCAIAAADCEh9HAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO2dd1xT1///XxnMMBRcILjway2uItYBOLCAhWJdUCuCs8VWLfqpA+2vLR22RWtruovVVgRFUasNKLbgQKpWDQ5EURRBHIAMmQGSkPP741IMQ8tIcpNwnn/kAefee96vKHnljPc5h0MIAYVCoVDaC5dtARQKhaLbUBulUCiUDkFtlEKhUDoEtVEKhULpENRGKRQKpUNQG6VoiMxMpKc3Krl3D7dusaSGQlEd1EYpGiI4GMOH4+TJJyWbNmHpUtb0UCiqgtooRXNYWGD5cshkbOugUFQKn20BFC3iwIEDpaWlFhYWfD7f3NyceTUwMDAzM2NeDQ0NBQJBu+ufPx/79+PrrxEaqkLVFArLUBulAAAhZPny5XFxcffu3fvPmxkzHTnyWna2jZERTE3BvBobw8SkhVcTE3h6AoBAgPBwvPUW/P0xYIDa3xSFohmojVIAICUl5ccff7SwsFi4cGFlZaVMJmt4lUqlVVVVzGttba1EIpFKpVKptKjI5M6d1tb/22/1PwQGYvt2LFuGhAQ1vRUKRdNQG6UAQFRUFIDly5d/9tln/3kzY6Y1NWbV1aipQXU1Gn5o8iqRoLYWEgkcHeuf5XDw3XcYORIikVrfEIWiOaiNUlBTU7N//34AAQEBrbnfyMjIyMio3eGGDUNICFavhrt7u+ugULQIOlNPQVxcXGlp6ahRo4YMGaKZiB99BIkEsbGaiUahqBdqoxRER0cDCAwM1FhEc3N89RVKSzUWkEJRI7RT39kpKSk5evQon8+fPXu2cvnt27dzcnJMTEyMjY2bv7Yj0KRJGDToya+zZ+P8eXTp0kH5FAr7UBvt7MTExEilUh8fn169eimXb9269csvv3zaU6amplZWlYRwlBOejIwgEMDQEAIBJkzAwoWNHvnooyc/l5UhNhY9etAEUoo+QG20s8PM0QcFBTUp79evn4eHh0QiYeblG16Z5CeJRCKVcuTyp1ZrYNDURpWpqMCSJRAIsHIlOjBZRaFoBRx6iEhn5vbt24MGDTI3N8/LyzM1NW39g1VVVVKpoKoKUimY18pKyGRPXgcNgqvrs2oYMQJpaUhKwksvdfRdUCjsQlujnZqdO3cSQmbNmtUmDwUgEAgEAnTt2v7QPj5IS0NCArVRis5DZ+o7L4SQXbt2QbNz9A14ewPAkSOaj0yhqBjaqe+8nD592s3NrXfv3nfv3uXxeBqOLpeje3eUliIri66vp+g2tDXaBhQK3LmDkpJGhbm5KC9nSVDHYCaXAgMDNe+hAPj8+v1Kjh7VfHAKRZVQG20D5eVwcMCYMaipeVLo5obISPY0tRepVMosAJ07dy5bGph+Pd2jhKLrUBttM/n5+OILtkV0mPj4+OLiYicnp2HDhrGlwdsbHA6OHUN1NVsSKBQVQG20zaxahY0bcfMm2zo6xtPSRTVJr15wckJ1NU6dYlEFhdJRqI22mSlT4OGBJUugu5NzJSUlCQkJPB5vzpw57Crx8QFov56i41AbbQ9CIc6dw65dbOtoL3v37q2trfXw8GiyAFTz0LQnih5AbfS/ycjAV19Bud02cCDWrsXq1bo6R89s6cRuj55hzBhYW+PWLdy+zbYUCqW9UBttmepqJCVh3To8/zwcHbF6NfbswY0bT25Yvx5mZmjFVvFaR1ZW1tmzZwUCwbRp09jWAh4PXl4AbZBSdBm6GLQRt27hyBEkJCA5+UlWU48eePlleHvDzu7JncbG+PZbzJoFAwNWlLaf6OhoZgGomZkZ21oAwNsbMTFISEBICNtSKJR2QW0UNTX4+28kJSEuDtev1xdyuXB2hocHfH3h4gIuF0DTbYZ9fODtjYMHAeD+fQCNfFZr2b17N7SjR8/g7Q0uFydPQiJBG1f2UyhaQee10ezs7ISEhPR098jI5yWS+kJra0yZAh8feHmhe/emj/D58PCApeWTEqEQlZWwsICXFyQSHDsGBwcN6W8fZ8+ezczMtLW1ddeag5C6dcOoUTh/HidO4JVX2FZDobSdzmWjcrn8n3/+iY+PT0pKSk1NBTBmzBcSyfOOjpg6FR4emDjxWZ10MzMkJjYq6dMHf/2F0lJERCAjA+7uOHYM//d/an4bHYCZXAoICGBlAejT8PbG+fNISKA2StFJOsXWJPfu3UtISEhISEhKSqqsrGQKu3Tp4uXl5evr7+Xl17NnR0NUVeHVV3H8OHr2RGIi2FsZ9CxkMpmtrW1RUdGVK1eGDx/OtpwnnD+PMWPQvz9af/A9haI96K2N1tXVXb58OS4uLj4+/uLFiw1vc8CAAb6+vlOnTp0wYYKhoaEKI0okmD4diYmwssLRo3jxRRXWrRr++OOP6dOnDxkyJD09nW0tjVAoYGODR4+QkYHBg9lWQ6G0ET3s1Mvl8oCAgL/++qusrIwpMTc39/T09Pb29vb27t27dyvrKS1FYiISEuDkhHfe+e/7TU0RF4fXX8ehQ/DyQkICxo5t95tQC8wC0AULFrAtpClcLqZMQVQUjhyhNkrRQYjesXjxYjs7OwADBgwICQlJTEysqalp/eNZWUQoJB4exNCQAAQgY8e2IXptLZk1iwBEICDHj7dZvPooLS01MTHhcrn37t1jW0sL7N5NAOLhwbYOCqXt6FtrNC8vb/v27aamprdv33Zo9ax5RQWSkpCQgISE+tQlAAYGmDQJ3t71675biaEh9u7F4sWIjISvLw4dqt9Vk3X27t1bXV3t6elpp5VpWcxOBVqwIIBCaTts+7iKiYmJAeDj49Oam69du/bll19Onjx50qRrTMMTILa2ZPFisn8/KS1tv4y6OrJ4MQGIkRE5dKj99aiQ8ePHA4iMjGxSXlFRsWHDBqlUyooqhuJi4u9PNm9uVLhwITlxgh09FEqb0DcbfeuttwBs3LjxaTdUVlaKRKK33367X79+Dd8lo0eHubmRzz4jFy8ShUI1ShQKsmIFAYihIdm/XzV1tpucnBwOh2NqalpeXt7kEpOH7+Licv/+fVa0EULu3ycA4XLJP/88KbSyIr/+ypaidpKfny8SiRSq+hui6Aj6ZqODBw8G8I/yx5EQQsitW7e2bNni5eVlbGzc4J49evSYP3/+nj17SkpK1CFGoSCrVhGAWFmVxsbGqyNEKzQoLl265OnpCcDPz6/5Dampqf379wfQvXv3xMREzSsk/9ro5MnE2ZnI5fWFumWj2dnZISEhpqamhoaG/fr1u3nzJtuKKJpDr2y0oKCAw+GYmZk176L6+fkx1snlcp2dnUNDQ1NSUurq6jSgKiysdujQcTwe71cNukJlZWViYmJISIi9vT3zxrt169ajR48zZ840v7moqGjKlCkAeDxeeHi45htTjI0mJxNra/Ltt/WFumKjly9fnjNnDrOcgcvlMt9Jb7zxBtu6KJpDr2x07969AF5++eXml2JjYwMCAqKjowsLCzUvbOPGjQA4HM4333yj1kDp6embNm1yd3c3UFqM1bt378DAwBEjRgAwMjL66aefmj+oUCjCw8O5XC6AV199tbQjA8Nth7HRtDTy/ffEwoI8eECILthoSkqKr68vh8MBYGBgEBQUdO3ataysLD6fb2BgkJuby7ZAiobQKxtdunQpgC+++IJtIS3www8/cDgcDoezuclMSoepqqpiGp59+/ZtsE4ej+fs7BwWFiYWi5nWpUwmCw0NZa7OnTu3qqqqeVXx8fFdu3YFMGjQoKtXr6pW5zNosFG5nIwcSWbPJkSLbVShUIhEIhcXF+Yf08zMLCQkRNk0Z8+eDWD16tUsiqRoEr2yUUdHRwAt9lu1ga1btzLNvdDQ0I7XlpWVFRER4evra2Rk1OCe3bt39/f3j4yMfNpob0xMDLM/3ogRI27fvt38hlu3bjHrRM3MzPbs2dNxna2hwUYJIefPEx6PnDhRb6Nvv008PEhkJGnJ9jWNVCqNjIxk/syYcZKwsLCioqImt12+fJnD4Zibm6tpzJ2ibeiPjT569IiZjK6trWVby1PZtWsXn89vt5NKJJLExMTQ0NDnn3++wTrbOtp748YNxggsLCwOHDjQ/Ibq6upFixYxlQcHB6s1F0omI+fONbJRQkhwMBk5knTpQrZtI9271yeidelC3nyTJCerLJWiTVRWVgqFwoaB5r59+wqFwhZb9AxeXl4ANmzYoEmRFLbQHxuNjY0F4OXlxbaQ/2Dv3r3MwOXSpUtbOZlz586diIgIf39/c3PzBve0trb29/ePiIjIy8trq4by8nJ/f39muDY0NFTeMDuuREREBLPngJub28OHD9saojVcu0ZefJEYG5PjxxvZaHFxvXv++ispLiYREcTVlTQk9trZkZAQcvmyOhS1QGFhYVhYmLW1NfPPPnTo0MjIyP/8ajl27BiTCiKRSDSjsz3cvUvefJM4OBArKzJ8OPnwQ1JRwbYmnUR/bHTZsmUAPvvsM7aF/Dfx8fFM3lVwcPDT2o8ymSwlJSU0NNTZ2Vl5uYSjo2NoaGhiYqJMJuuIBoVCIRQKGUN3d3fPz89vfo9YLGbGW7t3737s2LGOhGuCXE42bSLGxgQg/fqRuLhGNkoI2bat3kYbyMggYWHEweGJnzo6kvBw0pJw1ZCTkxMSEiIQCJh/eVdX1zblhI4bNw7A999/ry59HSQnh/TsSSZNIvv2kTNnyC+/kP79ydixRIs7c1qL/tjo0KFDAfz9999sC2kVCQkJJiYmAAICApQNMS8vLzIy0t/f38LCosE6zczMfH19IyIiHjBz2KojOTmZORzUzs6uebItIaSwsJDJOeXz+arKhcrKIhMn1lthUBApLydSKRGLiXK7TaEgYjFpNupI6upISgoJCSHW1vU18Hj1g6eVlR2XVs/Vq1eDgoIash1cXV3bkVF74MABAP379+/gF566eP114uDQyDRv3iR8PvnuO/Y06Sp6YqNFRUVcLlfLB0abkJyczHTS/f39T5w4wTQ8meyZJg1PtY5O3r9/n5l0NjIyEgqFzW+Qy+VhYWHM5Nj06dM7kgulUJCICGJmRgDSqxcRidovu7qa7N1LfH2JgUG9n06Z8s/ChQtPnDjRkXRgsVgcFBTEvFkul+vr6ysWi9tXVV1dHTMGvWvXrnbrURcyGREIyKZNTctffZVMnsyGIN1GT2z0jz9KJ0z4YdGiT9gW0jZOnz5tYWHBTDoxCAQCpuGpyX2YlHOhgoKCWpw5EYlEXbp0AfDcc8+lp6e3I0pODpk8ud7y/P1JcXGHdRNCCHn0iHz7LRkzhgwYUL+FTJ8+fdatW3ft2rU21cMkgTI1GBkZBQUFZWZmdlDbtm3bAAwfPlzrlofm5hKAHDzYtHzVKtK3Lwt6dBw9sdF33iEA+fRTtnW0nbCwMA6H061bt7Vr1544cYLFLUJ27drFjAO+8MILWVlZzW/IzMwcNmwYAHNz89jY2DZVHhlJzM0JQHr2JL//riLFjcnJyQkPDx84cKBycz48PPzZU3B1dXUikWjUqFHMIxYWFiEhIaqaUpNKpX369AFw+PBhlVSoMu7eJQCJi2tavm4dsbdnQ5Buoyc2Onw4AcipU2zraDvMJsot9qY1T0ZGBpNKZWFhcbB5U4UQiUTCCOZwOCEhIa0x/bw8MnXqk0aoBhaRicXikJCQbt26NSSEubq6RkREVDSehq6pqYmMjPy/f0/O6tWrV1hYmMqXb23evBmAp+d01VbbUaqriaEhaT79NWcOcXFhQ5Buow82WlxMuFxiYkLasjuztsAswb6ssfyd/6K8vHzWrFkNuVAtjjM2TPEfOXLk2bXt3l3UpQsBSLdupI3t145SU1MjEon8/f0bjooxMTHx9/cXiUTFxcVCodDGxoYpd3BwEAqF1dXV6pBRXl7u7Z1saanQukUhnp5NNyQvLibm5uQTHRsZ0wb0wUZ//71+fyBtJjExcebMmb837tDm5uYCsLKy0swmKa2EyYViRmy9vb2LWxrFTElJ+fDDD59RSX5+/vTp0x0cHI2Nq318iKpTDNpAUVHRDz/8wKQfNaTcMj+MGTPm4MGD6v7Hf/99ApBp09QapO2cPUsMDMiqVSQvjygU5MYNMmUKsbMjdOVV29EHG2W29fz4Y7Z1PJNVq1YBaGI9kZGRAKZp3SeMEEJOnjzZs2dPAPb29ufOnWvTszExMYxVde3aNTY2VU0K28rdu3fDw8Pt7OzMzMysra1FHUkUaAtFRUQgIBwO0eAuBU+nooJs3kyYvWUTE4mjY/3u4lwu8fQkLa0Ppvwn+mCjL7xQv82aNsNMYjRJYmfWXH799ddsqXo29+7dGzt2LDNzvXXr1tY8UlJSEhgYyLT1pkyZooXnPuXn55uYmHA4nLZO5XeEZcsIQObP11jAp7NzJwHI+PFPSh48IFevqixzolOi8zZaUkK4XGJsTNQztKUaysrKeDyeoaFhk1wi5rQo5vxn7aSmpiYkJKQhF+rZSxsPHz5sa2vLzFBFRERoXZbPvzBHJCxatEhjEe/cIXw+MTAgOTkai/kUPD0JQCIiGhUWFpKWFgRTWonO2+ihQwQgkyaxreOZxMfHA3Bzc1MuvHfvHgBLS8sWl7RrFVFRUaampgBGjhx5586d5jeUlpYGBwczbuvm5nbr1i3Ni2w9DVuC3r17V2NB584lAFm5UmMBW+LBA8LjEUPDpuvD/PyIjY12nWSrU3Ch4yQnA8DEiWzreCbJyckAJk2apFx48uRJABMmTGA2TtdmAgMDz5w54+DgcPHixRdffPHPP/9Uvvrnn38OHTp069atJiYm4eHhycnJysmbWsiAAQP8/PxkMtm3336rsaChoeBwsHUrioo0FrMZu3ejrg5Tp+LfSTYAKCvD4cMoKMC/uV+UNsO2j3eUkSMJoO1HSI4ePRpAk3XZb7zxBgCV7+KsPsrKymbMmAGlXKiysrLg4GBmAeu4ceN06AAiZktQgUDQfLdQ9eHjQwDy0UcaC9iMESNaWLwUEUEA4unJkiZ9QLdttLSU8HjEyIho825kFRUVTBeysvHmGUzid7uXbLMCc9YI03weO3Yss/+msbHx5s2btSpnqzUwx099qsGlb8nJzPmGLG1Hl55eH75JfvX48QQgzU7eprQe3bZRkYgAZMIEtnU8kyNHjgBwabw45OHDh9CRgdHmHD9+vEePHswS+9GjR1+/fp1tRe3h+PHjAKytrStVuDfUf+HiQgCi5hO5nsKaNQQgb7/dqDAnh3A4xNSUNDt5m9J6dHtslBkYbTzkqHW0ODB64sQJAG5ubto/MNocd3f3c+fOJSUl7dy58/Tp08pb8esQ7u7u48aNKy4u/u233zQWdO1aANi8GVKpxmICABQKxMQAQFBQo/KoKBCCGTOgtCM4pa3oto3OmIE1a/DvvjxaCmOjExvPgrVYqEP069fP2dk5KChIeXsqnWPNmjUAvvrqK7lcrpmIr76KoUNx7x727NFMwH85fhz378PBAWPHNirftQto5q2UNqJ7Njp/fv1XOgBXV2zaBJEI0dGsano6lZWVqampfD5feTEintJEpWiY6dOnOzo65uTkMEdzawAOB6tXA8Du3ZoJ+C+7dwFAYCCUNrTF+fO4cQM9e+KllzSrRt/QPRs9dAhffon9+5+UnDiBtDT2BD2T06dPy2SyUaNGKR+jlJ+ff/PmTXNzcycnJxa1UTgcDrNId+PGjYQQzQQNCMCuXYiL00w0AFAoJNcXJ5V8MYHMC2x0ISoKAObOhS53KbQB3bNRAOPHY+VKlJezraMVPCNj1M3NTad7xPpBUFBQnz59rl69yswEagA+H3PnYuhQ1NQ8KRw2DBs2qCtiaemhauP7j6bLOAOU8nnlcuzbBwCBgU97kNJKdNJGlyyBuTk+/JBtHa2AcUw9GxjVJwwMDFasWAFg48aNmoybk4Mvv9RQrOLiKADW1o0GQKsKkqp9nyMTXUG7RB1GJ23UwABCIb7/Hhcvsi3lmUgkEmZglDnsqAE6MKpVLFmyxNraOiUl5fTp0xoMis8/x+3bag8klz+qqEjicAy6dvVXLi+o/e3626cK9kxVu4JOgE7aKIApUzBtGt56CwoF21KezunTp6VS6ciRI5WP+Xz06NGNGzfMzMxGjhzJojZKAwKBYOnSpQA2bdqksaA+PnB3x7Jlag9UUrKbELmlpQ+f362hsK6uvKwsDuBaWQWoXUEnQFdtFIBQiIwM7NjBto6n87SBUUKIq6trw/m9FNZZsWKFQCCIi4tLT0/XWNAtW5CcrPbMJ6ZHb2XVqEf/+PE+haLa3HySoaG9esN3DnTYRu3t8cEHeP99VFY+67YPPsDbb7PTaKUDo7qCtbX1woULCSFfamzAEnjuOaxejXffRUVFfUlmJkpKVBmipiZDIrnI41laWvool5eUtDBaqg1IJJKzZ8+yraLN6LCNAnj3XXTrhitXnnrD7dvYvBk//4zgYE07qUQiEYvFPB6PDozqBGvXrjUwMIiJibl7966aQpw4gTffbPR3+N57MDLC55/X/7psGWxsMHUqdu6ERKKCiExTtGvX2VyuSUOhVJpbUZHC5Rp36TJDBTFUR15e3qRJk1566aULFy6wraVt6LaN8vn44Yf6hOKdO7FkSVOvHDgQR4/C3Bzbt2PuXMhkmtN29uzZ2tpaJycnZu05Q2Fh4fXr101NTZ2dnTUnhdIK7O3tZ8+eLZPJtmzZotqaFQrExcHFBZMnY9s2iERPLpma4ptvIBTi0SMoFDA0RF0d4uMxfz7s7fH22zh9Gh3IZyUlJTEArK0bpTSVlEQDii5dpvN4lu2uWuWkpaWNHTv2woULNjY2zEHfugTLa/rbzqVLTQ/dSksjV67UH4MeGEhksqaPpKQQCwsCkKlTNXd66AcffABg9erVyoX79u0D4Ek3JdNK0tLSOByOqalpoYqOgZZKSWRk/XFHzPGoYWGkqIgAJCHhyW3MAdTMVlNFRSQigri61j8CEHt7EhpK2rEHYXn5CbEYaWl9CWl0DMG1a0PFYpSWHu7Ym1Mlhw8fZtanuLi4FBQUsC2nzeiejT6NZ3ulWEysrQlAvL01tKve+PHjAcTFxSkXLl++HMCGDRs0oYDSdl555RUAYWFhHaynooIIhcTevt4K+/YlQiFhTpBRKMiAAY2ODrtzhwwa1PTQ+GvXSFgY6d//iZ86OpLwcNJ6k3n8+EBamv2DB/9PubCqSiwW4/LlHgqFtEPvUHUIhUIulwtgzpw5ajrmWt3oj40SJa/08WnBKy9dIt27E4BMnKj2XcFkMpm1tTWPx3v8+LFy+bBhwwD8/fff6g1PaS+nTp0CYGVlVdHePUELC0lYGLGyqve+YcNIZGQLPaRWUldHUlJIcHB9EwEgK1acycz0KCqKrKtrzf5+dXV1jY7/ys1dIRYjN3dFOwWplNra2gULFgDgcDgd/+piEb2yUaLklZMmtbA57rVrxMam/mDEsjL1fhvLZLLLly8rlxQXF3O5XFNT0xqNjSxQ2o6rqyuALVu2tPXBnBwSEkJMTev9ztWViEREVcf6SSRk927i40Pi4qaJxRCLcelSl5ycNyoqkpv02Zsgl5cpOaniypXeYjGqqi6oRlYHKCoqYiZaBQLBwSYb8usa+majhJCMDGJrSwDi5kbKyppevXOH9O9PJky4PGrUKE0eIEEIOXDgAICXXnpJk0EpbUUkEgGws7Orra1t5SNpaWkrV17j8wlAOBwydSo5fVpd8mSy4sLCiBs3XBkzFYuRlmaXmxsikVxucmdxcXRamh1zT3r6YInkKiFEJisoKvpVXeJaTWZm5qBBgwDY2trq1gEQLaKHNkoIuXmzflhq1KimZyASQnJyqhwcBgJwcnJ69OiRxlQxJxV/8sknGotIaQcKhWLo0KEAduzY8Z83p6Sk+Pr6cjic0aOnGhiQoCCSnq4BjYQQUl2d8eBB2NWrDg1+mp7umJcXLpXmE0IkkrTUVP7DhxtksmKpNL+kJFYub9amYIm//vqLSV954YUXcnNz2ZajAvTTRgkhOTnEwYEAxMmJNLfKvLy8IUOGABg8ePCDBw80I2nEiBEATp06pZlwlHYTGRnJ/G087YAphUIhEomY7j/TLV25cuXdu6ycRlVXXn4yJ2fxpUuWjJmmpvLv3w999Ojn1FSDZ/f3WSEiIoJZv+fn51dVVfXfD+gCemujhJCHD+tzTZ5/njS3yoKCguHDhwPo379/i2evqxZmYNTY2FhH5yI7FVKptG/fvgAOHTrU5FJdXZ1IJGpI+7WwsAgJCcnLy2NFpzIKRU1pqSgryz811fDRox8fPz4kFiMvb6NC0d7pLVUjl8uZDlnDybJsK1IZ+myjhJC8PDJkCAHIc8+Re/ea/j2VlJQwRx/37dv31q1balWyf/9+AO7u7mqNQlEV33zzDYDRo0c3lNTU1ERGRg4cWL9lZ69evcLCwkpLS1kU2SIyWaFcXq5QyLOz54nFnCtXet27t7qmJotdVeXl5b6+vgCMjIwi9e4UUj23UUJISQkZPZqMHFk0aNDw27dvN7laWlrKLNbs1atXuhqGtQoKCmJjY4OCggQCQbdu3V577TWVh6Cog6qqqu7duwNITk4uKysTCoU2NjaMgQ4cOFAoFOpEr6K2Nvvhww1Xr/a/eNFMIrlaXZ1RULBFKtV02zkrK8vR0RFAt27dkpUzZvUF/bdRQsjjx2TixJcB2Nvb32y2HKS8vJzZKKRXr153797teDi5XJ6SkrJ+/foXXniBo3z0DWBpaakfY+qdgY8++ghAv379zMzMmP++cePGHTp0SOd6o3J5eVpav9zc5ffvrxWLIRZzb9xwLSyMqKtrZ25smzh9+nSPHj0ADB06NDs7WwMRNU+nsFFCSGVl5eTJkwH07NkzLS2tydWqqiovL6+goKCOfEIKCwuZhmfXrl0bfNPU1NTDw0MoFObk5Pj5+TEJTwpVJRNS1ElRUVGvXr0YD3V1dRWJRGwraj8ZGWNycriWp0MAAA72SURBVN4sK0u4fXtaaqrhv5mn5tnZ88vKEglR1xdDTEyMsbExgClTpmjhAIiq6Cw2Sv71SgBdu3Y9f/58k6s1NTVyubytddbV1YnF4vDwcFdXV2ZBG8OAAQOCg4NFIpFypn1hYWHPnj0B/PTTTx19MxSNIJVK4+Pjmyyj0AkeP/794cOPKyvPVFdfe/hwg1jMKS2t/xqQyx8XFUVmZnqIxRzGT69csc3NDamqSlWhAIVCERYWxnwcgoODZe1eyKULdCIbJYTU1tZOnz4dQJcuXc6cOdPueoqKimJjY4ODgxvGywCYmJh4eHiEh4dfv379aQ8eOnSIyY9R94wWpRNSV1f98OHH1dU3CSHl5Um3bk29csX24kXja9eGFRX91vz+2tq7eXnhV6/+n3Lm6YMHYbW12R1UUllZOWPGDAB8Pv/7JpsF6COdy0YJIVKplOlcCwSCY8eOtenZ9PT08PBwDw8P5RM9+/fvHxwcHBsb28pV2HPmzGE6iTo3xEbRckpK9onFuH7duY3PKSoqTt+9+/bly1b/Zp7yMjO9/vprT/s2Fnjw4MGoUaOYbl9SUlI7atA5Op2NEkLkcvn8+fOZgcu//vrr2TdXVFSIRKLg4ODevXs3WCefz3d1dQ0PD2/HOrbHjx/b2dkBEAqF7X0HFEoL3L79qliMgoJGf1dSaX5dXauSChQKeVlZYnZ20MWLphcv9jQw4BkbG/v7+4tEotZ3yS9dumRvbw/AwcHhGd0yPaMz2ighRKFQLFu2jMlia3FbhIaGp/KJSf369WManmXN1+q3hbi4OADGxsbXrl3rSD0USgMyWXFqqmFqKr9JPtOdO4GXLlk2DIy2Brm85OLFnW5ubg15JjY2Nu++++6lS5ee/eD+/ftNTU0BuLm5aXKZNet0UhslhCgUipUrVwIwNDTct28fIaSyspJpeDJfpww8Hq+h4anCGXZmf7CxY8e2Y16LQmnOo0ffi8W4dctHubCurvLiRTOxmNO+9Pvc3Nzw8PDnnnuu4ePg6OgYFhbW4qq/hm1DFy9e3PpdXfSDzmujDGvWrGG8ctiwYcoNTzs7uzfffPP3338vV8/WpKWlpX369AEQHh6ujvopnY2MjDFiMYqLY5QLi4p2isW4ccOtg5Wnp6eHhoYyeSYAuFyuq6trREQE0y2rqamZN28edH/b0HbT2W2UEBIWFtatWzcOh8Pj8ZydncPCwlTb8HwaSUlJHA7HyMioeR4rhdImampuicWcS5fMm2zSnJnpKRajsDBCJVGkUqlIJPL392dSQZnZhVmzZjF7U5ibmzc566HzQG2U3L59mxn9abJTvQZ46623ADg5OUml2nKiA0UXefDgQ7EY2dkLlAul0gepqbzUVEOZTMX76paWlkZGRnp4eDC9+D59+vTu3Ts1VZVpp7qFbp8MqhKqq6sBWFlZKR/hqRk2b948cODAS5cuffHFFxoOTdEjSEnJLjQ7d76kZDchdV26TOXzrVUbz9LSct68eYmJiXfu3Pniiy/+/PPP1NTUkSNHqjaKDkFttN5GTUxM/vNOlSMQCHbs2MHlcj/99FOxWKx5ARQ9oLLyTG1tloFBbzOzicrlxcXRAKysAp/ynAro27fvunXrBg8e3DBs2jmhNoqamhqwZKMAXF1d33nnHSaVlVFCobSJsvy9AKytAzkcXkNhdfW16uorfL6VpaU3e9I6C9RG61ujDaPmmic8PNzR0fH69euffvopWxooukptbW+XPSPWj+pm0qhHX1wcCaBr19kcjhFLyjoR1EZZbo0CMDY23r59O4/H27hx47lz59iSQdFJDh9GYSG/qM7IaohSqeLx4xg0Gy2lqAlqo+y3RgGMHTt21apVdXV18+fPZ/RQKK0iOhoAAhsNgCpSkgdEOHQvchcIxrKjqpNBbZTNKSZlPvnkk2HDht28efP9999nVwlFZ3j8GEeOgMvF7NnKxdztkYIfkvucnQBwnvYoRYVQG2W/U8/AnFFjYGAgFAqTk5PZFUPRDfbuRW0tPD2htG8OJBL8/jsABASwpauzQW1UKzr1DE5OTuvXr1coFAsXLqysrGRbDkXriYoCgKDGA6CHDqGiAuPGYdAgVkR1QqiNakunnuGDDz4YNWpUdnb2unXr2NZC0W5ycnD2LAQCTJvWqLxFb6WoE2qj9Z16bWiNAuDz+ZGRkcbGxj/++OOff/7JthyKFhMZCUIwaxb+PXEPAB49QlISDA3h78+esk4HtVFtGRttwNHR8YMPPiCEvPHGG6WlpWzLoWgru3cDTefosWsX5HL4+KBbN1ZEdU6ojUIu50BrWqMMa9euHTNmzP3795l9/CiUpvzzDzIzYWuLyZMblbeU/0RRN9RGUV6+ESAmJu+wLeQJfD5/x44dJiYm27ZtO3LkCNtyKNoHl4uXX0ZQEHhPFoAiIwMXL8LSEj4+7CnrjFAbBbOQXWv69PUMHjyYWRv6xhtvlJSUsC2HomWMHo2EBISHNyrcuRMAZs/Wur9mfYfaKJhFQ9rUp6/nf//734QJE/Ly8lasWMG2FoqWUVmJhARs3Yp9+5CfX1946hRAe/QsQG203kZZ//5WKBRNSrhc7o4dO8zMzKKjow8cOMCKKoo2cugQ+vbFwoXYvRvr1qFPH4SFAUBKCk6ehJsb2/o6HdRGtaJTf+/evaFDhyYlJTUp79+/f3BwsKmpqfI5UZROzfXreP11LFmChw9x8iSyshAbiw0b8Ntv4HIxcSI4dAGopqE2yn6nvra2dtasWRkZGd99912TSwUFBXv37pVIJJmZmaxoo2gd338PW1t8/DG4/354p0/Ha6/hyy9ZldWpoTbKfqc+JCTkwoULffv2/fXXX5XL6+rqgoKCHjx44OLiQodHKfWcPg13dzTpnbz8MjIyQLOMWYLaKMud+ujo6K1btxobGx84cMDautGZOevWrUtMTOzVq9e+fftop55ST0kJbGyaFtraAkBxseblUEBtFKy2Rq9cubJkyRIAP/74o7Ozs/KlP/7446uvvjIwMIiNjbVlPiQUCgCBAM0T4BgDVV4VStEg1EZZGxt9/PjxzJkzJRLJW2+9tXDhQuVLmZmZ8+fPJ4Rs3rx5/PjxmlZG0WZGjMDFi00LU1NhY4POfa4ci1AbZadTr1AoAgMD79y5M3r0aKFQqHypsrJy5syZZWVlr7/+ekhIiEZlUbSfhQtx7hyU17bdv4+tW7F4MXuaOjscQgjbGljGwAByOWQy8PmaC/rxxx9/9NFHVlZWYrG4f//+ypfmzZsXFRU1ePDg8+fPm5uba04TRVf43//w8894/XUMH47cXMTE4LnncPQo+8nPnZXObqNyOQwMwONBLtdc0KSkpJdffpkQcuTIkSlTpihf2rJly7vvvmtubn7u3Lnnn39ec5oousWxY9i3Dw8eoGtXeHpizhyNtgIojensNlpRAQsLmJmhokJDEXNzc52dnYuKij777LP33ntP+dLZs2cnTZokk8liY2P9/Pw0JIhCoXSMzv4NxucjPBwymYbC1dTUzJo1q6ioyNfXd/369cqXCgoK/Pz8pFJpaGgo9VAKRZcges0775CjRxuV7NtH1q8ncjnx9yefftro0sqV5OBB9epZvHgxgIEDBz5+/Fi5XCaTTZgwAYC7u7tMJlOvCAqFolL0fKZ+/35kZDQquXwZcXFQKLBvHz78EMePP7l09Chu3FCjmF9++WX79u3GxsaxsbFdunRRvrRmzZpTp07Z2Njs2rWLTwe5KBSdQs9t9Nm4uGD5ckilmoh1+fJlZkHnTz/95OTkpHzp4MGD33zzDZNpb9N8gQqFQtFuOrWNrlmDsjJNbOlQUlIyc+bM6urqZcuWLViwQPnSzZs3FyxYQAgRCoVudIszCkUH0f/+Y3Jyo1/Pn3/ys5kZwsOxZAlefx0ODuoSwGTaZ2dnjxkz5quvvlK+xGTal5eXBwQELF26VF0KKBSKOtF/G71z58mOYgDu3WuUYBcYiG3bsHw5EhLUJSAsLCwhIaFHjx779+83MjJqKCeELFq06Pr168OGDfvll1/UFZ5CoagZ/bfRhQuxcuWTX99/H3/88eRXDgc//ggnJ8TF1Zds3Ii//8a8eZg2DYaGHY0eHx//+eef83i8qKgoOzs75UubN2/et2+fubl5bGysqalpRyNRKBSW6NRjowxDhmDFCqxZU589GhmJ+Hi89hpsbbF8Oc6ebX/Nd+/eXbBggUKh+Pzzz728vJQvnTx58r333uNwODt27Bg8eHDH3gGFQmETaqMA8OGHqKpCVhYAJCVBKISzM4qL8cMPcHFB375Ytw63brW52vz8fENDwxkzZjQ5bj4/Pz8gIEAul7/33nszZ85U0ZugUCjsQG0UAMzN8fXX9T/b2mLFCojFSE9HWBj69UNuLjZuxKBBGDUK33yDwsLWVjtmzJjU1NQdO3ZwlI7Hkclkr732Wl5e3uTJkz/++GNVvxUKhaJp9HxN/YUL6N0byrse5+aiuBgvvIBjxzByJKysnlw6eRL9+qFfv0Y1KBQ4cwZRUYiJqV93b2gILy/4+8PPD+0Y0gwJCfnuu+/s7e1TU1O7d+/errdFoVC0CD23URVSVYWDBxEdjaQk1NUBgKdnloPD5sDAQBcXF07rjmPcs2fPnDlzDAwMTp486eLiol7FFApFI1AbbTN5eYiJQVQUOJw1ly5tBmBvbx8QELBo0aJBgwY948H09PSxY8dWVVX9/PPPzNkhFApFD6A22n6uX78eGxu7c+fO7OxspsTZ2TkoKGjOnDk9evRocnNFRcWYMWMyMjLmzp0bHR2tcbEUCkVdUBvtKAqF4syZM1FRUXv27CkvLwfA4/Hc3d2DgoL8/PyYhFBCiL+//4EDB4YPH3727FmaJUqh6BPURlVGTU1NYmJiVFTUoUOHZDIZAEtLy1dffXXevHkXLlx47733unbteuHCBQf1LTulUChsQG1U9RQUFMTExERHR6empjIlfD5foVCIRKJXXnmFXW0UCkXlUBtVIxkZGXv37o2Kipo7d66VldVK5UWpFApFX6A2qnYUCoVCoaCbMVMo+gq1UQqFQukQdDEohUKhdAhqoxQKhdIhqI1SKBRKh6A2SqFQKB3i/wOFiNM5L9Wc/QAAAcp6VFh0cmRraXRQS0wgcmRraXQgMjAyMS4wOS41AAB4nHu/b+09BiDgZUAAcSCWAuIGRjaGBCDNyAyhmZgEGBSANBsHgwaQYmaC0exgYbgqCM3MCOOzO4CVMbM5ZIBpRjaIAAtcAKECJoGmAEmlBdhsuFIMw2EC3AyMDIxMDEzMHExMLEDMysDKxsDGzsDOwcDOycDJlcDFncHEzZPAwwuk+BT4+DOY+AUSBAQzmASFEoSEE4RFMphERBNExTKYOFgZeDkTxPgShPkTRFhYWDnY2Vi5OHl5uFkF+IWFBNlERMX4+IXF5RiBYQUPRNvr/xw+JFvuA3GqpG85NB2etB/E7vm9xuHOPCUwe2LEXodJCW72IHb7vDkOk54zHQCxbbbXO8ze+ncviK1zSMNhdqYTWH2xKIPDsixJsPpmrnCHY3zzwOyYMHH7dM0+MPvnQbX9pnlddiC25cVX+xsWzQCLq8au3C89Uc0BxI40N7GbFaIMZjevCDxQ9QfihqVHMw6s3q4LtmvHP6MDDC++gtmGTHkH5Na4gd3GrrjkgMgnVTD7WNOiAxIMPWA1GiJHD0h4RoLdPL1154FT/ZvBZi5J7T7As+UFmC0GAMmJcMNlysvsAAACP3pUWHRNT0wgcmRraXQgMjAyMS4wOS41AAB4nH1UW47bMAz8zyl0gQh8SuLnJlkURbEJ0E17h/73/ujQQWItINSOCMkZjzji0IeS18/Ljz9/y+uSy+FQCv3nFxHltxLR4aPkpJzev32/lvP97fR8cr79ut4/i2iRhndwf8W+3W8fzydczqXXaNq7lSNVHkzmhSpt1/6qANjqYB8OIFe25sELoJbP4tXIO7VkbOqibQG0cgMwGLjkQQLBK0IHzuoIU+dylIr8dNgC2Mq1aI1w99i0iI4hC2CHFkFibSQjtvYwWTGODUjESoG/PUKWOwdwWrUB2QpXURuyksyEFJOHGZpxiExNxwqYdcnDc9boAEgn7SstnIVBPYaagx6cIeaxQuoDqaLsngdA0qivkLalyT0FA+gupEtKT0pFdpBEWxG7BK2Q7YGE0SB5k9aHLw+Tszyoc4/WoR0ZhzCbrqDjwdp5DHBhBveKr/zLAU1HhymCdPORB6arXIWS1Sv1YW0zO4V2XyUgnKytoi06b14iV7JVSUUerNDkPlAoI1m7BI0LUqvqjb0DObjD1Qvk+/XypZsf/X26XS97f+ctexdjUXTvVSyK7R2ZS98bj7Fse3sxRt+biDHG3iqMEXtH5JJn51sG5sniloFlsrJlYJ0saxnYJmvyhvHJg5aB2+Q1y8B9spRl4DE5xzJwTAaxDDL7wDIIT+W2DCJTVS2D6FQ9hvxXNviw2Jb2zpsZJ+ylQdpjp11DVnauY66f33jMD/8AZhgn9CppXtkAAAEzelRYdFNNSUxFUyByZGtpdCAyMDIxLjA5LjUAAHicJVC9TsYwEHsVxlZKo/vN3ali6sIEAyNiyt4n+B4epwyRIsd2bF/X9/b+ta/zyde13TLndkydNufP/fE77Z637vOW/eK31xa9hka0gzonk3k7R0/29HZwZxte7fRu5MGLNNRFx4KKg0ajHmHF3E7rWaaQSYeNZju1V7mPx1s0U9opMBjLGzovE1sQESvDyaskgawb8+CGAEwDyPrYWSvAkiANWCFeqvnDKjFkOhSPkD6hQupB0I6eCCPSlzvyRY1c9UqY7WEFZwLSjglkWTkiF+lq4/VYeadIfAMdlQaGOkbHUP+7kCvZagheVKA1YzRJBWJdffBCkqPqia6i7A1zkKAoKnOs+kDchWyNp4NIIBI12OyvP0wTYf9t0M9MAAAAAElFTkSuQmCC", - "text/plain": [ - "" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mol = \"CCS(=O)(=O)N1CC(C1)N2C=C(C=N2)C3=C4C=CNC4=NC=N3\"\n", - "mol = dm.to_mol(mol)\n", - "mol" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['HBA',\n", - " 'HBD',\n", - " 'HBD',\n", - " 'Hydrogen',\n", - " 'Hydrogen',\n", - " 'Hydrogen',\n", - " 'Acyclic Bonds',\n", - " 'Rotable Bond',\n", - " 'SP3 Nitrogen',\n", - " 'SP2 Nitrogen',\n", - " 'SP2 Carbon',\n", - " 'Aromatic SP2 Carbon',\n", - " 'Chiral Carbon']" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "matches = custom_catalog.GetMatches(mol)\n", - "[m.GetDescription() for m in matches]" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Query system\n", - "\n", - "Medchem provides a query system that can be used for filtering molecules based on a constructed query made of statement compliant with the provided grammar.\n", - "\n", - "Detailed information about the query system can be seen in the documentation" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [], - "source": [ - "from medchem.query import QueryFilter" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [], - "source": [ - "# note that whitespace and newlines are ignored in the query\n", - "query = \"\"\"\n", - "(\n", - " HASPROP(\"tpsa\" < 80) AND HASPROP(\"clogp\" < 3) AND ! HASALERT(\"pains\")\n", - ") \n", - " OR \n", - "(\n", - " HASPROP(\"n_heavy_atoms\" >= 10) \n", - " AND \n", - " (\n", - " HASGROUP(\"Alcohols\") \n", - " OR \n", - " HASSUBSTRUCTURE(\"[CX3](=[OX1])O\", True, 1)\n", - " )\n", - ")\n", - "\"\"\"" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - " \r" - ] - } - ], - "source": [ - "data = dm.freesolv()\n", - "query_filter = QueryFilter(query)\n", - "out = query_filter(data.smiles, n_jobs=-1, progress=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "any(out)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.11" - }, - "vscode": { - "interpreter": { - "hash": "52fab7ed47a09dd73497e852b91b984fcb2648f3487052ea0ac1ba8b0f42000e" - } - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/env.yml b/env.yml index cccf683..d7f1ef7 100644 --- a/env.yml +++ b/env.yml @@ -24,6 +24,7 @@ dependencies: # Dev - pytest >=6.0 - pytest-xdist + - pytest-cov - nbconvert - black >=23 - jupyterlab diff --git a/medchem/catalogs/__init__.py b/medchem/catalogs/__init__.py new file mode 100644 index 0000000..e23ac45 --- /dev/null +++ b/medchem/catalogs/__init__.py @@ -0,0 +1,4 @@ +from ._catalogs import list_named_catalogs +from ._catalogs import merge_catalogs +from ._catalogs import catalog_from_smarts +from ._catalogs import NamedCatalogs diff --git a/medchem/catalogs/_catalogs.py b/medchem/catalogs/_catalogs.py new file mode 100644 index 0000000..7a519a9 --- /dev/null +++ b/medchem/catalogs/_catalogs.py @@ -0,0 +1,394 @@ +from typing import List +from typing import Union +from typing import Optional +from typing import Sequence + +import functools + +from loguru import logger + +import pandas as pd +import numpy as np +import datamol as dm + +from rdkit.Chem import rdfiltercatalog # type: ignore + +from medchem.utils.loader import get_data_path + + +def list_named_catalogs(): + """ + List all available named catalogs. This list will ignore all chemical groups + For a list of chemical group to be queried using NamedCatalog.chemical_groups, use `medchem.group.list_default_chemical_groups` + """ + return [ + x + for x in NamedCatalogs.__dict__.keys() + if (not x.startswith("_") and x not in ["alerts", "chemical_groups"]) + ] + + +def merge_catalogs(*catalogs): + """Merge several catalogs into a single one + + Returns: + catalog (FilterCatalog): merged catalog + """ + if len(catalogs) == 1: + return catalogs[0] + params = rdfiltercatalog.FilterCatalogParams() + missing_catalogs = [] + for catlg in catalogs: + if isinstance(catlg, rdfiltercatalog.FilterCatalogParams.FilterCatalogs): + params.AddCatalog(catlg) + else: + missing_catalogs.append(catlg) + parameterized_catalogs = rdfiltercatalog.FilterCatalog(params) + for catlg in missing_catalogs: + for entry_nums in range(catlg.GetNumEntries()): + entry = catlg.GetEntryWithIdx(entry_nums) + parameterized_catalogs.AddEntry(entry) + return parameterized_catalogs + + +def catalog_from_smarts( + smarts: Union[Sequence[str], np.ndarray, pd.Series], + labels: Optional[Union[Sequence[str], np.ndarray, pd.Series]] = None, + mincounts: Optional[Union[Sequence[int], np.ndarray, pd.Series]] = None, + maxcounts: Optional[Union[Sequence[int], np.ndarray, pd.Series]] = None, + entry_as_inds: bool = False, +): + """Load catalog from a list of smarts + + Args: + smarts: list of input smarts to add to the catalog + labels: list of label for each smarts + mincounts: minimum count before a match is recognized + maxcounts: maximum count for a match to be valid + entry_as_inds: whether to use index for entry id or the label + + Returns: + catalog (FilterCatalog): merged catalogs + """ + + with dm.without_rdkit_log(): + catalog = rdfiltercatalog.FilterCatalog() + if labels is None: + labels = smarts + if mincounts is None: + mincounts = [1] * len(smarts) + + for i, (sm, lb, count) in enumerate(zip(smarts, labels, mincounts)): + if maxcounts is None: + fil = rdfiltercatalog.SmartsMatcher(lb, sm, count) + else: + fil = rdfiltercatalog.SmartsMatcher(lb, sm, count, maxcounts[i]) + entry_name = str(lb) + if entry_as_inds: + entry_name = str(i) + + if fil.IsValid(): + catalog.AddEntry(rdfiltercatalog.FilterCatalogEntry(entry_name, fil)) + else: + logger.warning(f"It seem like the SMARTS {sm} is invalid") + return catalog + + +class NamedCatalogs: + """ + Holder for substructure matching catalogs + """ + + @staticmethod + @functools.lru_cache(maxsize=32) + def tox( + pains_a: bool = True, + pains_b: bool = True, + pains_c: bool = False, + brenk: bool = True, + nih: bool = False, + zinc: bool = False, + ): + """Common toxicity and interference catalog + + Args: + pains_a: whether to include PAINS filters from assay A + pains_b: whether to include PAINS filters from assay B + pains_c: whether to include PAINS filters from assay C + brenk: whether to include BRENK filters + nih: whether to include NIH filters + zinc: whether to include ZINC filters + """ + catalogs = [] + if pains_a: + catalogs.append(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.PAINS_A) + if pains_b: + catalogs.append(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.PAINS_B) + if pains_c: + catalogs.append(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.PAINS_C) + if brenk: + catalogs.append(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.BRENK) + if nih: + catalogs.append(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.NIH) + if zinc: + catalogs.append(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.ZINC) + catalog = merge_catalogs(*catalogs) + return catalog + + @staticmethod + @functools.lru_cache(maxsize=32) + def pains(): + return rdfiltercatalog.FilterCatalog(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.PAINS) + + @staticmethod + @functools.lru_cache(maxsize=32) + def pains_a(): + return rdfiltercatalog.FilterCatalog(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.PAINS_A) + + @staticmethod + @functools.lru_cache(maxsize=32) + def pains_b(): + return rdfiltercatalog.FilterCatalog(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.PAINS_B) + + @staticmethod + @functools.lru_cache(maxsize=32) + def pains_c(): + return rdfiltercatalog.FilterCatalog(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.PAINS_C) + + @staticmethod + @functools.lru_cache(maxsize=32) + def nih(): + return rdfiltercatalog.FilterCatalog(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.NIH) + + @staticmethod + @functools.lru_cache(maxsize=32) + def zinc(): + return rdfiltercatalog.FilterCatalog(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.ZINC) + + @staticmethod + @functools.lru_cache(maxsize=32) + def brenk(): + return rdfiltercatalog.FilterCatalog(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.BRENK) + + @staticmethod + def alerts(subset: Optional[Union[List[str], str]] = None): + """Alerts filter catalogs commonly used in molecule filtering + + Args: + subset: subset of providers to consider + + Returns: + catalog (FilterCatalog): filter catalog + """ + rd_filters = pd.read_csv(get_data_path("common_alert_collection.csv")) + if subset is not None: + if isinstance(subset, str): + subset = [subset] + subset = [x.lower() for x in subset] + rd_filters = rd_filters[rd_filters.rule_set_name.str.lower().isin(subset)] + mincount = np.maximum(rd_filters["mincount"], 1).astype(int) + + labels = rd_filters.apply( + lambda x: "{0}||{1}_min({2})||{3}".format( + x["rule_set_name"], + x["description"], + x["mincount"], + x["priority"], + ), + axis=1, + ) + return catalog_from_smarts( + rd_filters["smarts"], + labels, + mincount, + entry_as_inds=False, + ) + + @staticmethod + @functools.lru_cache(maxsize=32) + def dundee(): + return NamedCatalogs.alerts(subset=["Dundee"]) + + @staticmethod + @functools.lru_cache(maxsize=32) + def bms(): + return NamedCatalogs.alerts(subset=["BMS"]) + + @staticmethod + @functools.lru_cache(maxsize=32) + def glaxo(): + return NamedCatalogs.alerts(subset=["Glaxo"]) + + @staticmethod + @functools.lru_cache(maxsize=32) + def schembl(): + return NamedCatalogs.alerts(subset=["SureChEMBL"]) + + @staticmethod + @functools.lru_cache(maxsize=32) + def mlsmr(): + return NamedCatalogs.alerts(subset=["MLSMR"]) + + @staticmethod + @functools.lru_cache(maxsize=32) + def inpharmatica(): + return NamedCatalogs.alerts(subset=["Inpharmatica"]) + + @staticmethod + @functools.lru_cache(maxsize=32) + def lint(): + return NamedCatalogs.alerts(subset=["LINT"]) + + @staticmethod + @functools.lru_cache(maxsize=32) + def alarm_nmr(): + return NamedCatalogs.alerts(subset=["Alarm-NMR"]) + + @staticmethod + @functools.lru_cache(maxsize=32) + def alphascreen(): + return NamedCatalogs.alerts(subset=["AlphaScreen-Hitters"]) + + @staticmethod + @functools.lru_cache(maxsize=32) + def gst_hitters(): + return NamedCatalogs.alerts(subset=["GST-Hitters"]) + + @staticmethod + @functools.lru_cache(maxsize=32) + def his_hitters(): + return NamedCatalogs.alerts(subset=["HIS-Hitters"]) + + @staticmethod + @functools.lru_cache(maxsize=32) + def luciferase(): + return NamedCatalogs.alerts(subset=["LuciferaseInhibitor"]) + + @staticmethod + @functools.lru_cache(maxsize=32) + def dnabinder(): + return NamedCatalogs.alerts(subset=["DNABinder"]) + + @staticmethod + @functools.lru_cache(maxsize=32) + def chelator(): + return NamedCatalogs.alerts(subset=["Chelator"]) + + @staticmethod + @functools.lru_cache(maxsize=32) + def hitters(): + return NamedCatalogs.alerts(subset=["Frequent-Hitter"]) + + @staticmethod + @functools.lru_cache(maxsize=32) + def electrophilic(): + return NamedCatalogs.alerts(subset=["Electrophilic"]) + + @staticmethod + @functools.lru_cache(maxsize=32) + def carcinogen(include_non_genotoxic: bool = True): + catalogs = ["Genotoxic-Carcinogenicity"] + if include_non_genotoxic: + catalogs += ["Non-Genotoxic-Carcinogenicity"] + return NamedCatalogs.alerts(subset=catalogs) + + @staticmethod + @functools.lru_cache(maxsize=32) + def ld50_oral(): + return NamedCatalogs.alerts(subset=["LD50-Oral"]) + + @staticmethod + @functools.lru_cache(maxsize=32) + def reactive_unstable_toxic(): + return NamedCatalogs.alerts(subset=["Reactive-Unstable-Toxic"]) + + @staticmethod + @functools.lru_cache(maxsize=32) + def skin(): + return NamedCatalogs.alerts(subset=["Skin"]) + + @staticmethod + @functools.lru_cache(maxsize=32) + def toxicophore(): + return NamedCatalogs.alerts(subset=["Toxicophore"]) + + @staticmethod + @functools.lru_cache(maxsize=32) + def nibr(): + """Catalog from NIBR + + !!! warning + This includes all the compounds in the catalog, regardless of severity (FLAG, EXCLUDE, ANNOTATION) + You likely don't want to use this for blind prioritization + """ + nibr_filters = pd.read_csv(get_data_path("nibr.csv")) + mincount = np.maximum(nibr_filters["mincount"], 1).astype(int) + labels = nibr_filters.apply( + lambda x: "{0}||{1}_min({2})||{3}||{4}||{5}".format( + x["rule_set_name"], + x["description"], + x["mincount"], + x["severity"], + x["covalent"], + x["special_mol"], + ), + axis=1, + ) + return catalog_from_smarts( + nibr_filters["smarts"], + labels, + mincount, + entry_as_inds=False, + ) + + @staticmethod + @functools.lru_cache(maxsize=32) + def bredt(): + """Bredt fitler rules + Also see example of usage by surge's + https://github.com/StructureGenerator/SURGE/blob/main/doc/surge1_0.pdf + + """ + bredt_df = pd.read_csv(get_data_path("bredt.csv")) + return catalog_from_smarts( + bredt_df["smarts"], + bredt_df["labels"], + entry_as_inds=True, + ) + + @staticmethod + @functools.lru_cache(maxsize=32) + def unstable_graph(max_severity: int = 5): + """Unstable molecular graph to filter out especially for generative models + Args: + max_severity: maximum severity to consider for graph rules to be acceptable + """ + graph_df = pd.read_csv(get_data_path("graph.csv")) + # only apply rules with severity >= max_severity + graph_df = graph_df[graph_df["severity"] >= max_severity] + return catalog_from_smarts( + graph_df["smarts"], + graph_df["labels"], + entry_as_inds=True, + ) + + @staticmethod + @functools.lru_cache(maxsize=32) + def chemical_groups(filters: Union[str, List[str]] = "medicinal"): + """Chemical group filter catalogs + + Args: + filters: list of tag to filter the catalog on. + """ + chemical_groups = pd.read_csv(get_data_path("chemical_groups.csv")) + # we cannot keep the nan values in the dataframe + chemical_groups = chemical_groups.dropna(subset=["smarts"]) + if isinstance(filters, str): + filters = [filters] + chemical_groups = chemical_groups[chemical_groups.hierarchy.str.contains("|".join(filters))] + + return catalog_from_smarts( + chemical_groups["smarts"], + chemical_groups["name"], + entry_as_inds=True, + ) diff --git a/medchem/cli.py b/medchem/cli.py new file mode 100644 index 0000000..1272500 --- /dev/null +++ b/medchem/cli.py @@ -0,0 +1,17 @@ +import typer + +app = typer.Typer(help="The Medchem CLI", add_completion=False) + + +@app.command(help="A dummy CLI #1") +def dummy1(): + print("dummy1") + + +@app.command(help="A dummy CLI #2") +def dummy2(): + print("dummy2") + + +if __name__ == "__main__": + app() # pragma: no cover diff --git a/medchem/groups/__init__.py b/medchem/groups/__init__.py new file mode 100644 index 0000000..2e1135a --- /dev/null +++ b/medchem/groups/__init__.py @@ -0,0 +1,4 @@ +from ._groups import list_default_chemical_groups +from ._groups import list_functional_group_names +from ._groups import get_functional_group_map +from ._groups import ChemicalGroup diff --git a/medchem/groups.py b/medchem/groups/_groups.py similarity index 87% rename from medchem/groups.py rename to medchem/groups/_groups.py index 59ad4d9..4b925a9 100644 --- a/medchem/groups.py +++ b/medchem/groups/_groups.py @@ -1,4 +1,3 @@ -from multiprocessing.sharedctypes import Value from typing import List from typing import Optional from typing import Union @@ -8,11 +7,11 @@ import pandas as pd import datamol as dm -from medchem import catalog +from medchem.catalogs import catalog_from_smarts from medchem.utils.loader import get_data_path -def list_default_chemical_groups(hierachy: bool = False): +def list_default_chemical_groups(hierarchy: bool = False) -> list: """List all the chemical groups available. !!! note chemical groups defines how a collection of patterns are organized. @@ -25,43 +24,33 @@ def list_default_chemical_groups(hierachy: bool = False): List of chemical groups """ data = pd.read_csv(get_data_path("chemical_groups.csv")) - if hierachy: + if hierarchy: return list(data.hierarchy.unique()) return list(data.group.unique()) -def list_functional_group_names(exclude_basic: bool = True): +def list_functional_group_names() -> list: """ List common functional group names - Args: - exclude_basic: whether to include the basic functional groups - Returns: List of functional group names """ data = pd.read_csv(get_data_path("chemical_groups.csv")) data = data[data.hierarchy.str.contains("functional_groups")] - if exclude_basic: - data = data[~data.hierarchy.str.contains("basic")] return list(data.name) @functools.lru_cache(maxsize=None) -def _get_functional_group_map(exclude_basic: bool = True): +def get_functional_group_map() -> dict: """ List common functional group names - Args: - exclude_basic: whether to include the basic functional groups - Returns: List of functional group names """ data = pd.read_csv(get_data_path("chemical_groups.csv")) data = data[data.hierarchy.str.contains("functional_groups")] - if exclude_basic: - data = data[~data.hierarchy.str.contains("basic")] return dict(zip(data["name"], data["smarts"])) @@ -77,15 +66,14 @@ class ChemicalGroup: The SMILES and SMARTS used in the default list of substructures do not result in the same matches. Unless specified otherwise, the SMILES will be used in the matching done by this class, whereas due to RDKit's limitation, the SMARTS will be used in the matching done by the generated catalog. - For more information see this discussion: https://github.com/valence-platform/medchem/pull/19, """ def __init__( self, - groups: Union[str, List[str]] = None, + groups: Optional[Union[str, List[str]]] = None, n_jobs: Optional[int] = None, - groups_db: Optional[os.PathLike] = None, + groups_db: Optional[Union[os.PathLike, str]] = None, ): """Build a chemical group library @@ -116,16 +104,20 @@ def __init__( def filter(self, names: List[str], fuzzy: bool = False): """Filter the group to restrict to only the name in input + Args: names: list of names to use for filters - fuzzy: whether to use exact of fuzzy matching + fuzzy: whether to use exact or fuzzy matching """ if names is None or len(names) == 0: return self + if fuzzy: - self.data = self.data[self.data.name.str.contains("|".join(names))] + names = [f".*{name}.*" for name in names] + self.data = self.data[self.data["name"].str.match(r"|".join(names))] else: - self.data = self.data[self.data.name.isin(names)] + self.data = self.data[self.data["name"].isin(names)] + return self def _initialize_data(self): @@ -180,7 +172,7 @@ def dataframe(self): @functools.lru_cache(maxsize=32) def get_catalog(self): """Build an rdkit catalog from the current chemical group data""" - return catalog.from_smarts( + return catalog_from_smarts( self.mol_smarts, self.name, entry_as_inds=False, @@ -205,6 +197,7 @@ def get_matches(self, mol: Union[dm.Mol, str], use_smiles: bool = True): """ if isinstance(mol, str): mol = dm.to_mol(mol) + if mol is None: return None diff --git a/medchem/utils/graph.py b/medchem/utils/graph.py index 26b2bcc..9f7c4a8 100644 --- a/medchem/utils/graph.py +++ b/medchem/utils/graph.py @@ -1,8 +1,11 @@ +from typing import cast from typing import Union from typing import List +from typing import Any import datamol as dm import numpy as np +import networkx as nx from rdkit.Chem import SaltRemover @@ -24,7 +27,7 @@ def automorphism( node_attrs: list of categorical atom attributes/properties to consider for node matching edge_attrs: list of categorical bond attributes/properties to consider for edge matching """ - nx = dm.graph._get_networkx() + # there is no need to kekulize the molecule, in order to preserve # aromaticity instead of switching to double bonds with dm.without_rdkit_log(): @@ -56,7 +59,9 @@ def automorphism( return dict(graph=graph, matches=matches, mol=mol) -def score_symmetry(mol: Union[dm.Mol, str], exclude_self_mapped_edged: bool = False, **automorphism_kwargs): +def score_symmetry( + mol: Union[dm.Mol, str], exclude_self_mapped_edged: bool = False, **automorphism_kwargs: Any +): """Provide a symmetry score for a given input molecule !!! note @@ -64,20 +69,27 @@ def score_symmetry(mol: Union[dm.Mol, str], exclude_self_mapped_edged: bool = Fa We define symmetry according to any (set of) plans dividing the molecule into two very similar subgraph. We include both edge and vertex transitivity. For example the star-molecular graph (e.g neopentane) is symmetrical here, although it's not vertex-transitive. - For more information see https://github.com/valence-platform/medchem/pull/41 Args: mol: inputs molecules exclude_self_mapped_edged: Whether to exclude edges that matches to themselves in automorphism. automorphism_kwargs: keyword for determining automorphism """ + mol_automorphism = automorphism(mol, **automorphism_kwargs) _is_self_mapped = lambda mapping: all(node1 == node2 for node1, node2 in mapping.items()) + # We check and filter for identity mapping x->x for all nodes graph = mol_automorphism["graph"] graphmol = mol_automorphism["mol"] matches = mol_automorphism["matches"] matches = [x for x in matches if not _is_self_mapped(x)] + + # Always make the type explicit + graphmol = cast(dm.Mol, graphmol) + graph = cast(nx.Graph, graph) + matches = cast(List[dict], matches) + # Step 1: We set the symmetry score to 0 when there is not automorphism if len(matches) == 0: return 0 diff --git a/medchem/utils/loader.py b/medchem/utils/loader.py index 67c1c3f..dccd3b5 100644 --- a/medchem/utils/loader.py +++ b/medchem/utils/loader.py @@ -1,7 +1,10 @@ from typing import Optional +from typing import cast +from typing import Union import os -import importlib.resources as importlib_resources +import io +import importlib.resources import fsspec @@ -9,12 +12,14 @@ def get_data_path(filename: str, module: str = "medchem.data"): """Return the filepath of a data file.""" - path = importlib_resources.files(module).joinpath(filename) - path = str(path) - return path + path = importlib.resources.files(module).joinpath(filename) + return str(path) -def get_grammar(grammar: Optional[os.PathLike] = None, as_string: bool = False): +def get_grammar( + grammar: Optional[Union[os.PathLike, str]] = None, + as_string: bool = False, +): """Return the default lark grammar file for queries Args: @@ -22,11 +27,14 @@ def get_grammar(grammar: Optional[os.PathLike] = None, as_string: bool = False): as_string: If True, return the grammar as a string. Defaults to False. """ if grammar is None: - grammar = importlib_resources.files("medchem.data").joinpath("grammar.lark") - grammar = str(grammar) + _grammar = importlib.resources.files("medchem.data").joinpath("grammar.lark") + _grammar = str(_grammar) + else: + _grammar = str(grammar) if as_string: - with fsspec.open(grammar, "r") as f: - grammar = f.read() + with fsspec.open(_grammar, "r") as f: + f = cast(io.TextIOBase, f) + _grammar = f.read() - return grammar + return _grammar diff --git a/medchem/utils/matches.py b/medchem/utils/matches.py deleted file mode 100644 index 3382bd8..0000000 --- a/medchem/utils/matches.py +++ /dev/null @@ -1,143 +0,0 @@ -from __future__ import annotations -from collections.abc import Mapping -from typing import Dict -from typing import Callable -from typing import List -import datamol as dm -from rdkit import Chem -from loguru import logger - - -class Constraints: - """Complex query system for matches with additional constraints - - !!! example - - >>> mol1 = dm.to_mol("CN(C)C(=O)c1cncc(C)c1") - >>> mol2 = dm.to_mol("c1ccc(cc1)-c1cccnc1") - >>> core = dm.from_smarts("c1cncc([*:1])c1") - >>> [atom.SetProp("query", "my_constraints") for atom in core.GetAtoms() if atom.GetAtomMapNum() == 1] - >>> constraint_fns = dict(my_constraints=lambda x: dm.descriptors.n_aromatic_atoms(x) > 0) - >>> constraint = Constraints(core, constraint_fns) - >>> matches = [constraint(mol1), constraint(mol2)] # False, True - - """ - - def __init__( - self, - core: dm.Mol, - constraint_fns: Dict[Callable], - prop_name: str = "query", - ): - """Initialize the constraint matcher - - Args: - core: the scaffold/query molecule to match against. Needs to be a molecule - constraint_fns: a dictionary of constraints functions - prop_name: the property name to use in the match at each atom defined by the core - for further matches against the constraints functions - """ - self.core = core - self.prop_name = prop_name - self.constraint_fns = constraint_fns - self.atom_to_query = self._initialize() - - def _initialize(self): - """Initialize the constraint matcher""" - atom_to_query = dict() - for a in self.core.GetAtoms(): - if a.HasProp(self.prop_name) and str(a.GetProp(self.prop_name)) in self.constraint_fns: - atom_to_query[a.GetIdx()] = a.GetProp(self.prop_name) - return atom_to_query - - @staticmethod - def validate(mol, constraints: List[Constraints]): - """Validate a list of constraint object against a molecule - Args: - mol: the molecule object - constraints: list of Contraints object to validate against the molecule - """ - mol = dm.to_mol(mol) - for cons in constraints: - if not isinstance(cons, Constraints): - raise ValueError("Input constraint should be an instance of Constraints") - valid = len(cons.match(mol)) > 0 - if not valid: - return False - return True - - def get_matches(self, mol: dm.Mol, multiple: bool = True): - """Get matches that respect the constraints in the molecules - - Args: - mol: input molecule - multiple: if True, return all the matches, if False, return the first match - """ - if not isinstance(mol, Chem.Mol): - mol = dm.to_mol(mol) - params = Chem.SubstructMatchParameters() - params.setExtraFinalCheck(self._check_final) - matches = mol.GetSubstructMatches(self.core, params) - return matches - - def has_match(self, mol: dm.Mol): - """Check if input molecule respect the constraints - - Args: - mol: input molecule - """ - return len(self.get_matches(mol, multiple=False)) > 0 - - def __call__(self, mol): - """Check if input molecule respect the constraints - - Args: - mol: input molecule - """ - return self.has_match(mol) - - def _check_final(self, mol: dm.Mol, vect: List[int]): - """ - Perform a breadth search over current matches. - - !!! note - This function is not designed to be used directly but this setup is required to make things work - Always use `validate` or `match - - - Args: - mol: input molecule - vect: list of atom indexes to check - - """ - seen = [0] * mol.GetNumAtoms() - for idx in vect: - seen[idx] = 1 - - # loop over the atoms we care about: - for idx, qfn in self.atom_to_query.items(): - midx = vect[idx] - atom = mol.GetAtomWithIdx(midx) - # now do a breadth-first search from that atom, checking - # all of its neighbors that aren't in the substructure - # query: - stack = [atom] - connected_atoms = set() - while stack: - atom = stack.pop(0) - connected_atoms.add(atom.GetIdx()) - for neigh in atom.GetNeighbors(): - neigh_idx = neigh.GetIdx() - if not seen[neigh_idx] and neigh_idx not in connected_atoms: - stack.append(neigh) - is_ok = False - try: - submol = dm.to_mol(Chem.MolFragmentToSmiles(mol, atomsToUse=connected_atoms)) - is_ok = self.constraint_fns[qfn](submol) - except Exception as e: - logger.error(e) - # we can't raise here - - if not is_ok: - return False - return True diff --git a/medchem/utils/smarts.py b/medchem/utils/smarts.py index 56b9b10..b1af759 100644 --- a/medchem/utils/smarts.py +++ b/medchem/utils/smarts.py @@ -1,6 +1,8 @@ -from multiprocessing.sharedctypes import Value -from typing import Any, Optional +from typing import Optional +from typing import List + import datamol as dm + import re ATTACHMENT_POINT_TOKEN = re.escape("*") @@ -28,8 +30,10 @@ def standardize_attachment(cls, smiles, attach_tokens: str = "[*:1]"): """ if not smiles: return smiles + for attach_regex in ATTACHMENT_POINTS: smiles = re.sub(attach_regex, attach_tokens, smiles) + return smiles @classmethod @@ -38,7 +42,7 @@ def ortho( smarts_str1: str, smarts_str2: str, aromatic_only: bool = False, - ): + ) -> str: """ Returns a recursive smarts string connecting the two input smarts in `ortho` of each other. Connexion points needs to be through single or double bonds @@ -65,7 +69,7 @@ def meta( smarts_str1: str, smarts_str2: str, aromatic_only: bool = False, - ): + ) -> str: """ Returns a recursive smarts string connecting the two input smarts in `meta` of each other. Connexion points needs to be through single or double bonds @@ -84,6 +88,7 @@ def meta( """ if aromatic_only: return f"[$({smarts_str1})]-,=!:aaa-,=!:[$({smarts_str2})]" + return f"[$({smarts_str1})]-,=!:[r][r][r]-,=!:[$({smarts_str2})]" @classmethod @@ -92,7 +97,7 @@ def para( smarts_str1: str, smarts_str2: str, aromatic_only: bool = False, - ): + ) -> str: """ Returns a recursive smarts string connecting the two input smarts in `para` of each other. Connexion points needs to be through single or double bonds @@ -120,7 +125,7 @@ def aliphatic_chain( unbranched: bool = False, unsaturated_bondtype: Optional[str] = None, allow_hetero_atoms: bool = True, - ): + ) -> str: """ Returns a query that can match a long aliphatic chain @@ -152,11 +157,12 @@ def aliphatic_chain( bond = "-,=" elif unsaturated_bondtype in [dm.TRIPLE_BOND, "#"]: bond = "-,#" + query = bond.join([base_query] * min_size) return query @classmethod - def atom_in_env(cls, *smarts_strs, include_atoms: bool = False, union: bool = False): + def atom_in_env(cls, *smarts_strs: str, include_atoms: bool = False, union: bool = False) -> str: """ Returns a recursive/group smarts to find an atom that fits in the environments as defined by all the input smarts @@ -169,25 +175,33 @@ def atom_in_env(cls, *smarts_strs, include_atoms: bool = False, union: bool = Fa Example: you can use this function to construct a complex query if you are not sure about how to write the smarts for example, to find a carbon atom that is both in a ring or size 6, bonded to an ethoxy and have a Fluorine in meta - >>> SMARTSUtils.atom_in_env("[#6;r6][OD2][C&D1]", "[c]aa[F]", union=False) # there are alternative way to write this + + ```python + SMARTSUtils.atom_in_env("[#6;r6][OD2][C&D1]", "[c]aa[F]", union=False) # there are alternative way to write this + ``` Returns: smarts: smarts pattern matching the group/environment """ + + smarts_strs = list(smarts_strs) + if include_atoms: smarts_strs = [f"[*:99]{sm}" for sm in smarts_strs] smarts_strs = [f"$({sm})" for sm in smarts_strs] + if union: query = ",".join(smarts_strs) else: query = ";".join(smarts_strs) + if query: query = f"[{query}]" return query @classmethod - def different_fragment(cls, *smarts_strs): + def different_fragment(cls, *smarts_strs: str) -> str: """ Returns a new query that match patterns that are in different fragments. @@ -212,7 +226,7 @@ def different_fragment(cls, *smarts_strs): return query @classmethod - def same_fragment(cls, *smarts_strs): + def same_fragment(cls, *smarts_strs: str) -> str: """ Returns a new query that match patterns that are in THE SAME fragment (component) diff --git a/medchem/alerts.py b/medchem_OLD/alerts.py similarity index 97% rename from medchem/alerts.py rename to medchem_OLD/alerts.py index 15e3f6d..9f0210a 100644 --- a/medchem/alerts.py +++ b/medchem_OLD/alerts.py @@ -18,8 +18,7 @@ class NovartisFilters: - """ - Filtering class for building a screening deck following the novartis filtering process + """Filtering class for building a screening deck following the novartis filtering process published in https://dx.doi.org/10.1021/acs.jmedchem.0c01332. The output of the filter are explained below: @@ -122,11 +121,9 @@ def __call__( class AlertFilters: - """ - Filtering class for building a library based on a list of structural alerts + """Filtering class for building a library based on a list of structural alerts To list the available alerts, use the `list_default_available_alerts` method. - """ def __init__( diff --git a/medchem/catalog.py b/medchem_OLD/catalog.py similarity index 99% rename from medchem/catalog.py rename to medchem_OLD/catalog.py index 89ef5d7..f620128 100644 --- a/medchem/catalog.py +++ b/medchem_OLD/catalog.py @@ -10,7 +10,7 @@ import numpy as np import datamol as dm -from rdkit.Chem import rdfiltercatalog +from rdkit.Chem import rdfiltercatalog # type: ignore from medchem.utils.loader import get_data_path diff --git a/medchem/complexity/__init__.py b/medchem_OLD/complexity/__init__.py similarity index 100% rename from medchem/complexity/__init__.py rename to medchem_OLD/complexity/__init__.py diff --git a/medchem/complexity/_complexity_calc.py b/medchem_OLD/complexity/_complexity_calc.py similarity index 100% rename from medchem/complexity/_complexity_calc.py rename to medchem_OLD/complexity/_complexity_calc.py diff --git a/medchem/complexity/complexity_filter.py b/medchem_OLD/complexity/complexity_filter.py similarity index 99% rename from medchem/complexity/complexity_filter.py rename to medchem_OLD/complexity/complexity_filter.py index 98e4cf5..7a7503a 100644 --- a/medchem/complexity/complexity_filter.py +++ b/medchem_OLD/complexity/complexity_filter.py @@ -7,6 +7,7 @@ import pandas as pd from rdkit.Chem import GraphDescriptors + from medchem.utils.loader import get_data_path from medchem.complexity import _complexity_calc as calc diff --git a/medchem/demerits.py b/medchem_OLD/demerits.py similarity index 100% rename from medchem/demerits.py rename to medchem_OLD/demerits.py diff --git a/medchem/filter/__init__.py b/medchem_OLD/filter/__init__.py similarity index 100% rename from medchem/filter/__init__.py rename to medchem_OLD/filter/__init__.py diff --git a/medchem/filter/generic.py b/medchem_OLD/filter/generic.py similarity index 99% rename from medchem/filter/generic.py rename to medchem_OLD/filter/generic.py index c421bc7..95608ff 100644 --- a/medchem/filter/generic.py +++ b/medchem_OLD/filter/generic.py @@ -19,6 +19,7 @@ def _generic_filter( scheduler: Optional[str] = None, ): """Apply any generic filter to a molecule + Args: mols: list of input molecules rejection_fn: function to reject a molecule. Return True is the molecule is rejected @@ -38,6 +39,7 @@ def _generic_filter( progress=progress, tqdm_kwargs=dict(desc="Macrocyle match", leave=False), ) + toxic = dm.parallelized( rejection_fn, mols, @@ -46,9 +48,11 @@ def _generic_filter( progress=progress, tqdm_kwargs=dict(desc="Match", leave=False), ) + filtered_idx = [i for i, bad in enumerate(toxic) if not bad] if return_idx: return filtered_idx + return np.bitwise_not(toxic) @@ -313,7 +317,6 @@ def halogenicity_filter( Returns: filtered_mask: boolean array (or index array) where true means the molecule is ok. - """ fluorine_smarts = dm.from_smarts("[F]") bromine_smarts = dm.from_smarts("[Br]") diff --git a/medchem/filter/lead.py b/medchem_OLD/filter/lead.py similarity index 99% rename from medchem/filter/lead.py rename to medchem_OLD/filter/lead.py index 7bec104..afce6e3 100644 --- a/medchem/filter/lead.py +++ b/medchem_OLD/filter/lead.py @@ -13,6 +13,7 @@ from functools import partial from loguru import logger from rdkit.Chem.rdfiltercatalog import FilterCatalog + from medchem import demerits from medchem.alerts import AlertFilters from medchem.alerts import NovartisFilters @@ -31,7 +32,7 @@ def alert_filter( rule_dict: Dict = None, return_idx: bool = False, ): - r"""Filter a dataset of molecules, based on common structural alerts and specific rules. + """Filter a dataset of molecules, based on common structural alerts and specific rules. Arguments: mols: List of molecules to filter diff --git a/medchem/query/__init__.py b/medchem_OLD/query/__init__.py similarity index 100% rename from medchem/query/__init__.py rename to medchem_OLD/query/__init__.py diff --git a/medchem/query/eval.py b/medchem_OLD/query/eval.py similarity index 100% rename from medchem/query/eval.py rename to medchem_OLD/query/eval.py diff --git a/medchem/query/parser.py b/medchem_OLD/query/parser.py similarity index 100% rename from medchem/query/parser.py rename to medchem_OLD/query/parser.py diff --git a/medchem/rules/__init__.py b/medchem_OLD/rules/__init__.py similarity index 100% rename from medchem/rules/__init__.py rename to medchem_OLD/rules/__init__.py diff --git a/medchem/rules/_utils.py b/medchem_OLD/rules/_utils.py similarity index 100% rename from medchem/rules/_utils.py rename to medchem_OLD/rules/_utils.py diff --git a/medchem/rules/basic_rules.py b/medchem_OLD/rules/basic_rules.py similarity index 99% rename from medchem/rules/basic_rules.py rename to medchem_OLD/rules/basic_rules.py index 3870c20..ab8fc8e 100644 --- a/medchem/rules/basic_rules.py +++ b/medchem_OLD/rules/basic_rules.py @@ -2,6 +2,7 @@ from typing import Optional import datamol as dm + from medchem.rules._utils import _in_range from medchem.rules._utils import n_fused_aromatic_rings from medchem.rules._utils import n_heavy_metals diff --git a/medchem/rules/rule_filter.py b/medchem_OLD/rules/rule_filter.py similarity index 100% rename from medchem/rules/rule_filter.py rename to medchem_OLD/rules/rule_filter.py diff --git a/mkdocs.yml b/mkdocs.yml index 5eb3934..b3c8f3e 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -9,25 +9,21 @@ remote_branch: "gh-pages" use_directory_urls: false docs_dir: "docs" +# Fail on warnings to detect issues with types and docstring +strict: true + nav: - Overview: index.md - Tutorials: - - Molecular Filters and Alerts: tutorials/Molecular_Filters.ipynb - - Medchem Rules: tutorials/Medchem_Rules.ipynb + - Molecular Filters: tutorials/Molecular_Filters.ipynb + - Catalogs: tutorials/Catalogs.ipynb - Chemical Groups: tutorials/Chemical_Groups.ipynb - Medchem Query Language: tutorials/Medchem_Query_Language.ipynb - Molecular Complexity: tutorials/Molecular_Complexity.ipynb - - DEPRECATED Getting Started: tutorials/old_getting_started.ipynb - API: - - medchem.alerts: api/medchem.alerts.md - - medchem.catalog: api/medchem.catalog.md - - medchem.demerits: api/medchem.demerits.md - - medchem.filter: api/medchem.filter.md + - medchem.catalogs: api/medchem.catalogs.md - medchem.groups: api/medchem.groups.md - - medchem.rules: api/medchem.rules.md - medchem.utils: api/medchem.utils.md - - medchem.query: api/medchem.query.md - - medchem.complexity: api/medchem.complexity.md theme: name: material diff --git a/pyproject.toml b/pyproject.toml index b865593..9b49b77 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,11 +29,19 @@ classifiers = [ "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", ] -# NOTE(hadim): TODO -dependencies = [] +dependencies = [ + "typer", + "loguru", + "tqdm", + "numpy", + "lark", + "pandas", + "networkx", + "datamol >=0.10", +] -# [project.scripts] -# medchem = "medchem.cli:run" +[project.scripts] +medchem = "medchem.cli:app" [project.urls] "Source Code" = "https://github.com/datamol-io/medchem" @@ -62,6 +70,19 @@ include = '\.pyi?$' [tool.pytest.ini_options] minversion = "6.0" -addopts = "--verbose --durations=10 -n auto" +addopts = "--verbose --durations=10 -n auto --cov=medchem --cov-fail-under=85 --cov-report xml --cov-report term" testpaths = ["tests"] -filterwarnings = [] +filterwarnings = [ + "ignore::DeprecationWarning:jupyter_client.connect.*:", +] + +[tool.coverage.run] +source = ["medchem/"] +disable_warnings = ["no-data-collected"] +data_file = ".coverage/coverage" + +[tool.coverage.report] +omit = ["medchem/__init__.py", "medchem/_version.py"] + +[tool.coverage.xml] +output = "coverage.xml" diff --git a/tests/test_catalogs.py b/tests/test_catalogs.py new file mode 100644 index 0000000..2d54f52 --- /dev/null +++ b/tests/test_catalogs.py @@ -0,0 +1,74 @@ +import datamol as dm +import pandas as pd + +from medchem.utils.loader import get_data_path +from medchem.catalogs import merge_catalogs +from medchem.catalogs import NamedCatalogs +from medchem.catalogs import catalog_from_smarts + + +def test_catalog_merge(): + data = dm.data.freesolv() + mols = data["smiles"].apply(dm.to_mol).tolist() + + tox = NamedCatalogs.tox(pains_a=False, pains_b=False, pains_c=False, nih=True, brenk=True) + nih = NamedCatalogs.nih() + brenk = NamedCatalogs.brenk() + + merged_tox = merge_catalogs(nih, brenk) + + toxic1 = [tox.HasMatch(m) for m in mols] + toxic2 = [merged_tox.HasMatch(m) for m in mols] + assert toxic1 == toxic2 + + +def test_catalog_from_smarts(): + smarts_bank = pd.read_csv(get_data_path("smarts_bank.csv")) + custom_catalog = catalog_from_smarts( + smarts_bank["smarts"], + smarts_bank["name"], + entry_as_inds=False, + ) + + assert custom_catalog.GetNumEntries() == 30 + + +def test_NamedCatalogs(): + for catalog_name in [ + "alarm_nmr", + "alerts", + "alphascreen", + "bms", + "bredt", + "brenk", + "carcinogen", + "chelator", + "chemical_groups", + "dnabinder", + "dundee", + "electrophilic", + "glaxo", + "gst_hitters", + "his_hitters", + "hitters", + "inpharmatica", + "ld50_oral", + "lint", + "luciferase", + "mlsmr", + "nibr", + "nih", + "pains", + "pains_a", + "pains_b", + "pains_c", + "reactive_unstable_toxic", + "schembl", + "skin", + "tox", + "toxicophore", + "unstable_graph", + "zinc", + ]: + catalog = getattr(NamedCatalogs, catalog_name)() + assert catalog.GetNumEntries() > 0 diff --git a/tests/test_chemical_groups.py b/tests/test_chemical_groups.py deleted file mode 100644 index a57423f..0000000 --- a/tests/test_chemical_groups.py +++ /dev/null @@ -1,42 +0,0 @@ -import unittest as ut -import datamol as dm -from medchem.groups import ChemicalGroup -from medchem.utils.loader import get_data_path - - -class Test_ChemicalGroup(ut.TestCase): - def test_chemical_group(self): - c_group = ChemicalGroup(groups="rings_in_drugs") - rings_numbers = 92 - self.assertEqual(len(c_group), rings_numbers) - self.assertEqual(len(c_group.smarts), rings_numbers) - out_false = c_group.has_match("CCCCCCCCCC") - self.assertFalse(out_false) - out_true = c_group.has_match("C1CCCCC1") - self.assertTrue(out_true) - - def test_chemical_group_query(self): - c_group = ChemicalGroup(groups="rings_in_drugs") - mol = dm.to_mol("CCS(=O)(=O)N1CC(C1)(CC#N)N2C=C(C=N2)C3=C4C=CNC4=NC=N3") - # we have two rings of interest for smarts - out = c_group.get_matches(mol, use_smiles=False) - self.assertEqual(out.shape[0], 2) - self.assertSetEqual(set(out.group.unique()), {"rings_in_drugs"}) - self.assertSetEqual(set(out.name.unique()), {"diazine", "1H-pyrrole"}) - # however, if we use smiles, we would have 3 - # this is a bug that needs to be fixed - out_smiles = c_group.get_matches(mol, use_smiles=True) - self.assertEqual(out_smiles.shape[0], 3) - self.assertSetEqual(set(out_smiles.group.unique()), {"rings_in_drugs"}) - self.assertSetEqual(set(out_smiles.name.unique()), {"diazine", "1H-pyrrole", "1H-pyrazole"}) - - def test_external_bank(self): - c_group = ChemicalGroup(groups_db=get_data_path("smarts_bank.csv")) - mol = dm.to_mol("CCS(=O)(=O)N1CC(C1)(CC#N)N2C=C(C=N2)C3=C4C=CNC4=NC=N3") - out = c_group.get_matches(mol, use_smiles=False) - expected_match = set(["HBA", "HBD", "Hydrogen", "SP3 Nitrogen", "SP2 Carbon"]) - self.assertTrue(expected_match.issubset(set(out["name"].values))) - - -if __name__ == "__main__": - ut.main() diff --git a/tests/test_cli.py b/tests/test_cli.py new file mode 100644 index 0000000..123494f --- /dev/null +++ b/tests/test_cli.py @@ -0,0 +1,18 @@ +from typer.testing import CliRunner + +from medchem.cli import app + +runner = CliRunner() + + +def test_cli(): + result = runner.invoke(app, ["--help"]) + assert result.exit_code == 0 + + +def test_dummy(): + result = runner.invoke(app, ["dummy1"]) + assert result.exit_code == 0 + + result = runner.invoke(app, ["dummy2"]) + assert result.exit_code == 0 diff --git a/tests/test_groups.py b/tests/test_groups.py new file mode 100644 index 0000000..c36b577 --- /dev/null +++ b/tests/test_groups.py @@ -0,0 +1,118 @@ +import datamol as dm +import pandas as pd + +from rdkit.Chem import rdfiltercatalog # type: ignore + +from medchem.groups import ChemicalGroup +from medchem.groups import list_default_chemical_groups +from medchem.groups import list_functional_group_names +from medchem.groups import get_functional_group_map + +from medchem.utils.loader import get_data_path + + +def test_list_default_chemical_groups(): + assert len(list_default_chemical_groups()) > 0 + assert all([isinstance(l, str) for l in list_default_chemical_groups()]) + + with_hierarchy = list_default_chemical_groups(hierarchy=True) + assert len(with_hierarchy) > 0 + assert all([isinstance(l, str) for l in with_hierarchy]) + assert all(["." in l for l in with_hierarchy]) + + +def test_list_functional_group_names(): + group_names = list_functional_group_names() + + assert len(group_names) > 0 + assert all([isinstance(l, str) for l in group_names]) + + +def test_get_functional_group_map(): + group_map = get_functional_group_map() + assert len(group_map) > 0 + assert isinstance(group_map, dict) + + +def test_chemical_group_filter(): + group = ChemicalGroup(groups="rings_in_drugs") + assert len(group.data) == 92 + group.filter(["azole", "3,4-dihydroquino-2(1H)-one"], fuzzy=False) + assert len(group.data) == 1 + + group = ChemicalGroup(groups="rings_in_drugs") + + assert len(group.data) == 92 + group.filter(["azole", "3,4-dihydroquino-2(1H)-one"], fuzzy=True) + assert len(group.data) == 12 + + group = ChemicalGroup(groups="rings_in_drugs") + + assert len(group.data) == 92 + group.filter([]) + assert len(group.data) == 92 + + +def test_chemical_group_attributes(): + group = ChemicalGroup(groups="rings_in_drugs") + assert isinstance(group.name, list) + assert isinstance(group.smiles, list) + assert isinstance(group.mols, list) + assert isinstance(group.smarts, list) + assert isinstance(group.mol_smarts, list) + assert isinstance(group.dataframe, pd.DataFrame) + + +def test_chemical_group_list(): + group = ChemicalGroup(groups="rings_in_drugs") + assert isinstance(group.list_groups(), list) + assert isinstance(group.list_hierarchy_groups(), list) + + +def test_chemical_group_catalogs(): + group = ChemicalGroup(groups="rings_in_drugs") + assert isinstance(group.get_catalog(), rdfiltercatalog.FilterCatalog) + + +def test_chemical_group(): + c_group = ChemicalGroup(groups="rings_in_drugs") + rings_numbers = 92 + assert len(c_group) == rings_numbers + assert len(c_group.smarts) == rings_numbers + + out_false = c_group.has_match("CCCCCCCCCC") + assert out_false == False + + out_true = c_group.has_match("C1CCCCC1") + assert out_true == True + + +def test_chemical_group_query(): + c_group = ChemicalGroup(groups="rings_in_drugs") + mol = dm.to_mol("CCS(=O)(=O)N1CC(C1)(CC#N)N2C=C(C=N2)C3=C4C=CNC4=NC=N3") + + # we have two rings of interest for smarts + out = c_group.get_matches(mol, use_smiles=False) + + assert out is not None + assert out.shape[0] == 2 + assert set(out.group.unique()) == {"rings_in_drugs"} + assert set(out.name.unique()) == {"diazine", "1H-pyrrole"} + + # however, if we use smiles, we would have 3 + # this is a bug that needs to be fixed + out_smiles = c_group.get_matches(mol, use_smiles=True) + assert out_smiles is not None + assert out_smiles.shape[0] == 3 + assert set(out_smiles.group.unique()) == {"rings_in_drugs"} + assert set(out_smiles.name.unique()) == {"diazine", "1H-pyrrole", "1H-pyrazole"} + + +def test_external_bank(): + c_group = ChemicalGroup(groups_db=get_data_path("smarts_bank.csv")) + mol = dm.to_mol("CCS(=O)(=O)N1CC(C1)(CC#N)N2C=C(C=N2)C3=C4C=CNC4=NC=N3") + out = c_group.get_matches(mol, use_smiles=False) + expected_match = set(["HBA", "HBD", "Hydrogen", "SP3 Nitrogen", "SP2 Carbon"]) + + assert out is not None + assert expected_match.issubset(set(out["name"].values)) == True diff --git a/tests/test_import.py b/tests/test_import.py new file mode 100644 index 0000000..5583d10 --- /dev/null +++ b/tests/test_import.py @@ -0,0 +1,2 @@ +def test_import(): + import medchem diff --git a/tests/test_notebooks.py b/tests/test_notebooks.py index a606970..97cc21e 100644 --- a/tests/test_notebooks.py +++ b/tests/test_notebooks.py @@ -2,7 +2,7 @@ import pathlib import nbformat -from nbconvert.preprocessors import ExecutePreprocessor +from nbconvert.preprocessors.execute import ExecutePreprocessor ROOT_DIR = pathlib.Path(__file__).parent.resolve() diff --git a/tests/test_utilities.py b/tests/test_utilities.py deleted file mode 100644 index 295edd3..0000000 --- a/tests/test_utilities.py +++ /dev/null @@ -1,183 +0,0 @@ -import unittest as ut -import datamol as dm -import datamol as dm -from medchem.catalog import merge_catalogs, NamedCatalogs -from medchem.utils.smarts import SMARTSUtils -from medchem.utils.matches import Constraints -from medchem.utils.graph import score_symmetry - - -class Test_Utils(ut.TestCase): - data = dm.data.freesolv() - - def test_catalog_merge(self): - mols = self.data["smiles"].apply(dm.to_mol).values - tox = NamedCatalogs.tox(pains_a=False, pains_b=False, pains_c=False, nih=True, brenk=True) - nih = NamedCatalogs.nih() - brenk = NamedCatalogs.brenk() - merged_tox = merge_catalogs(nih, brenk) - toxic1 = [tox.HasMatch(m) for m in mols] - toxic2 = [merged_tox.HasMatch(m) for m in mols] - self.assertEqual(toxic1, toxic2) - - -class TestGraph(ut.TestCase): - test_mols = [ - ("O=C(O)c1cc(-n2ccnc2)cc(-n2ccnc2)c1", False), # high symmetry ~0.857 - # fully symmetric - ("OC(O)c1cc(-n2ccnc2)cc(-n2ccnc2)c1", True), - ( # symmetry should be 1, modif of above - "CC(C)(C)[C@@H]1COC(C2(C3=N[C@H](C(C)(C)C)CO3)Cc3ccccc3C2)=N1", - True, - ), - ("c1ccc2oc(-c3ccc(-c4nc5ccccc5o4)s3)nc2c1", True), - # symmetrical star graph - ("CC(C)(C)", True), - ("NC(C)(N)C", True), - # non symmetrical - ("NC(C)(C)C", False), - ("CCCC1=CNC(CC)=C1C", False), # modification of the above # not symmetrical - # disconnection does not prevent symmetric detection - ("Cl.[O-]C(=O)CC([O-])=O.CCCC1=CNC=C1CCC", True), - ("Cl.CC([O-])=O.CCCC1=CNC=C1CCC", True), # regular salt, should be symmetrical - ( - "[O-]C(=O)C1=CC=CC=C1.CCCC1=CNC=C1CCC", - False, - ), # not a salt, should not be symmetrical - ] - - def test_symmetry(self): - mols, expected_vals = zip(*self.test_mols) - scores = [score_symmetry(x, exclude_self_mapped_edged=False) for x in mols] - fully_symmetrical = [x == 1 for x in scores] - self.assertListEqual(list(expected_vals), fully_symmetrical) - - # if we don't exclude self_mapped edges, then we will have non symmetrical here - expected_mol2 = score_symmetry(mols[1], exclude_self_mapped_edged=True) - self.assertLess(expected_mol2, 1) - self.assertGreater(expected_mol2, 0.8) - - -class TestConstraints(ut.TestCase): - def test_constraints(self): - def my_constraints(mol): - # we want to either (have phenol) OR (have less than 7 atoms and not ring) - return mol.HasSubstructMatch(dm.to_mol("Oc1ccccc1")) or ( - mol.GetNumAtoms() < 7 and dm.descriptors.n_rings(mol) < 1 - ) - - smiles = [ - "CN(C)C(=O)c1cncc(C)c1", # match, n_atoms < 7 and no ring - "Cc1cncc(CC2CCCCC2)c1", # not match, n_atoms < 7 but ring - "Cc1cncc(c1)-c1ccc(O)cc1", # match phenol - "Cc1cncc(c1)-c1cccc2nc[nH]c12", # no match n_atoms >= 7 - ] - expected_results = [] - mols = [dm.to_mol(x) for x in smiles] - core = dm.from_smarts("[C;H3]c1cncc([*:1])c1") - - # now let's set the constraints query - for atom in core.GetAtoms(): - if ( - atom.GetAtomMapNum() == 1 - ): # we add a recursive query to check again on any match that starts with this atom position - atom.SetProp("query", "my_constraints") - constraint_fns = dict(my_constraints=my_constraints) - constraint = Constraints(core, constraint_fns) - matches = [constraint(mol) for mol in mols] - expected_results = [True, False, True, False] - self.assertListEqual(expected_results, matches) - - -class Test_SMARTSUtils(ut.TestCase): - def test_standard_attachment(self): - smiles = [ - "C1CC(C)C(O)CC1[1*]", # ortho - "c1c(C)cc(O)cc1[*:2]", # meta + aromatic - "c1(C)ccc(O)cc1[*]", # para + aromat - ] - - out = [SMARTSUtils.standardize_attachment(sm, "[*:1]") for sm in smiles] - self.assertTrue(all("[*:1]" in x for x in out)) - - def test_ortho_meta_para(self): - smiles = [ - "C1CC(C)C(O)CC1", # ortho - "c1c(C)cc(O)cc1", # meta + aromatic - "c1(C)ccc(O)cc1", # para + aromat - ] - mols = [dm.to_mol(x) for x in smiles] - sm1 = "[#6;!R]" - sm2 = "[#8]" - ortho_query = dm.from_smarts(SMARTSUtils.ortho(sm1, sm2)) - ortho_aro_query = dm.from_smarts(SMARTSUtils.ortho(sm1, sm2, aromatic_only=True)) - meta_query = dm.from_smarts(SMARTSUtils.meta(sm1, sm2)) - para_query = dm.from_smarts(SMARTSUtils.para(sm1, sm2)) - expected_output = [True, True, True, False, False] - output = [ - mols[0].HasSubstructMatch(ortho_query), # True - mols[1].HasSubstructMatch(meta_query), # True - mols[2].HasSubstructMatch(para_query), # True - mols[0].HasSubstructMatch(para_query), # False - mols[0].HasSubstructMatch(ortho_aro_query), # False - ] - - self.assertEqual(output, expected_output) - - def test_long_chain(self): - smiles = [ - "CCCCCCCC", # octane - "CCCC=CCCN", # hept-3-en-1-amine - "CCOCCC", # 1-ethoxypropane - "CC(C)(C)CN", # 2,2-dimethylpropan-1-amine - "CCC(C)(C)CN", # 2,2-dimethylbutan-1-amine - "C1CCCC1CC", # ethylcyclopentane - ] - mols = [dm.to_mol(x) for x in smiles] - - chain1 = dm.from_smarts(SMARTSUtils.aliphatic_chain(min_size=5, unsaturated_bondtype=None)) - chain2 = dm.from_smarts( - SMARTSUtils.aliphatic_chain(min_size=6, unbranched=True, unsaturated_bondtype=dm.SINGLE_BOND) - ) - chain3 = dm.from_smarts( - SMARTSUtils.aliphatic_chain( - min_size=6, - unbranched=True, - unsaturated_bondtype=dm.DOUBLE_BOND, - allow_hetero_atoms=False, - ) - ) - chain1_out = [m.HasSubstructMatch(chain1) for m in mols] - chain2_out = [m.HasSubstructMatch(chain2) for m in mols] - chain3_out = [m.HasSubstructMatch(chain3) for m in mols] - self.assertEqual(chain1_out, [True, True, True, False, True, False]) - self.assertEqual(chain2_out, [True, False, True, False, False, False]) - self.assertEqual(chain3_out, [True, True, False, False, False, False]) - - def test_smarts_fragment(self): - smiles = ["COCC(O)=O", "OCCO", "O.CCO.O"] - mols = [dm.to_mol(x) for x in smiles] - query1 = SMARTSUtils.same_fragment("[8]", "[8]", "[8]") - query2 = SMARTSUtils.different_fragment("[8]", "[8]", "[8]") - self.assertEqual(query1, "([8]).([8]).([8])") - self.assertEqual(query2, "([8].[8].[8])") - # query1_out = [m.HasSubstructMatch(dm.from_smarts(query1)) for m in mols] - # query2_out = [m.HasSubstructMatch(dm.from_smarts(query2)) for m in mols] - # self.assertEqual(query1_out, [True, False, False]) - # self.assertEqual(query2_out, [False, False, True]) - - def test_atom_in_env(self): - mol = dm.to_mol("c1[c:1](OC)cc(F)cc1") - # we are trying to match the carbon with atom map 1 - # these queries should be equivalent - atom_id = tuple([atom.GetIdx() for atom in mol.GetAtoms() if atom.GetAtomMapNum() == 1]) - query1 = SMARTSUtils.atom_in_env("[#6;r6]", "[*][OD2][C&D1]", "[c]aa[F]", union=False) - query2 = SMARTSUtils.atom_in_env("[#6;r6][OD2][C&D1]", "[c]aa[F]", union=False) - res1 = mol.GetSubstructMatch(dm.from_smarts(query1)) - res2 = mol.GetSubstructMatch(dm.from_smarts(query2)) - self.assertEqual(res1, res2) - self.assertEqual(res1, atom_id) - - -if __name__ == "__main__": - ut.main() diff --git a/tests/test_utils_graph.py b/tests/test_utils_graph.py new file mode 100644 index 0000000..0baef12 --- /dev/null +++ b/tests/test_utils_graph.py @@ -0,0 +1,38 @@ +from medchem.utils.graph import score_symmetry + + +def test_score_symmetry(): + test_mols = [ + # high symmetry ~0.857 + ("O=C(O)c1cc(-n2ccnc2)cc(-n2ccnc2)c1", False), + # fully symmetric + ("OC(O)c1cc(-n2ccnc2)cc(-n2ccnc2)c1", True), + # symmetry should be 1, modif of above + ("CC(C)(C)[C@@H]1COC(C2(C3=N[C@H](C(C)(C)C)CO3)Cc3ccccc3C2)=N1", True), + ("c1ccc2oc(-c3ccc(-c4nc5ccccc5o4)s3)nc2c1", True), + # symmetrical star graph + ("CC(C)(C)", True), + ("NC(C)(N)C", True), + # non symmetrical + ("NC(C)(C)C", False), + # modification of the above. not symmetrical + ("CCCC1=CNC(CC)=C1C", False), + # disconnection does not prevent symmetric detection + ("Cl.[O-]C(=O)CC([O-])=O.CCCC1=CNC=C1CCC", True), + # regular salt, should be symmetrical + ("Cl.CC([O-])=O.CCCC1=CNC=C1CCC", True), + # not a salt, should not be symmetrical + ("[O-]C(=O)C1=CC=CC=C1.CCCC1=CNC=C1CCC", False), + ] + + mols, expected_vals = zip(*test_mols) + + scores = [score_symmetry(x, exclude_self_mapped_edged=False) for x in mols] + fully_symmetrical = [x == 1 for x in scores] + + assert list(expected_vals) == fully_symmetrical + + # if we don't exclude self_mapped edges, then we will have non symmetrical here + expected_mol2 = score_symmetry(mols[1], exclude_self_mapped_edged=True) + assert expected_mol2 < 1 + assert expected_mol2 > 0.8 diff --git a/tests/test_utils_loader.py b/tests/test_utils_loader.py new file mode 100644 index 0000000..0040a01 --- /dev/null +++ b/tests/test_utils_loader.py @@ -0,0 +1,33 @@ +import importlib.resources + +import pandas as pd + +from medchem.utils.loader import get_data_path +from medchem.utils.loader import get_grammar + + +def test_get_data_path(): + df = pd.read_csv(get_data_path("medchem_rule_list.csv")) + assert df.columns.tolist() == ["name", "rules", "description"] + + +def test_get_grammar_default(): + with open(get_grammar()) as f: + grammar_text = f.read() + + assert "bool_term (OR_OP bool_term)" in grammar_text + + +def test_get_grammar_as_string(): + grammar_text = get_grammar(as_string=True) + assert "bool_term (OR_OP bool_term)" in grammar_text + + +def test_get_grammar_custom(): + path = importlib.resources.files("medchem.data").joinpath("grammar.lark") + path = str(path) + + with open(get_grammar(path)) as f: + grammar_text = f.read() + + assert "bool_term (OR_OP bool_term)" in grammar_text diff --git a/tests/test_utils_smarts_utils.py b/tests/test_utils_smarts_utils.py new file mode 100644 index 0000000..e8a56e0 --- /dev/null +++ b/tests/test_utils_smarts_utils.py @@ -0,0 +1,124 @@ +from typing import cast + +import datamol as dm + +from medchem.utils.smarts import SMARTSUtils + + +def test_standard_attachment(): + smiles = [ + "C1CC(C)C(O)CC1[1*]", # ortho + "c1c(C)cc(O)cc1[*:2]", # meta + aromatic + "c1(C)ccc(O)cc1[*]", # para + aromat + ] + + for sm in smiles: + new_sm = SMARTSUtils.standardize_attachment(sm, "[*:1]") + assert "[*:1]" in new_sm + + +def test_ortho_meta_para(): + smiles = [ + "C1CC(C)C(O)CC1", # ortho + "c1c(C)cc(O)cc1", # meta + aromatic + "c1(C)ccc(O)cc1", # para + aromat + ] + mols = [dm.to_mol(x) for x in smiles] + mols = [cast(dm.Mol, x) for x in mols] + + sm1 = "[#6;!R]" + sm2 = "[#8]" + ortho_query = dm.from_smarts(SMARTSUtils.ortho(sm1, sm2)) + ortho_aro_query = dm.from_smarts(SMARTSUtils.ortho(sm1, sm2, aromatic_only=True)) + meta_query = dm.from_smarts(SMARTSUtils.meta(sm1, sm2)) + para_query = dm.from_smarts(SMARTSUtils.para(sm1, sm2)) + expected_output = [True, True, True, False, False] + output = [ + mols[0].HasSubstructMatch(ortho_query), # True + mols[1].HasSubstructMatch(meta_query), # True + mols[2].HasSubstructMatch(para_query), # True + mols[0].HasSubstructMatch(para_query), # False + mols[0].HasSubstructMatch(ortho_aro_query), # False + ] + + assert output == expected_output + + +def test_long_chain(): + smiles = [ + "CCCCCCCC", # octane + "CCCC=CCCN", # hept-3-en-1-amine + "CCOCCC", # 1-ethoxypropane + "CC(C)(C)CN", # 2,2-dimethylpropan-1-amine + "CCC(C)(C)CN", # 2,2-dimethylbutan-1-amine + "C1CCCC1CC", # ethylcyclopentane + ] + mols = [dm.to_mol(x) for x in smiles] + mols = [cast(dm.Mol, x) for x in mols] + + chain1 = dm.from_smarts( + SMARTSUtils.aliphatic_chain( + min_size=5, + unsaturated_bondtype=None, + ), + ) + chain2 = dm.from_smarts( + SMARTSUtils.aliphatic_chain( + min_size=6, + unbranched=True, + unsaturated_bondtype=dm.SINGLE_BOND, + ) + ) + chain3 = dm.from_smarts( + SMARTSUtils.aliphatic_chain( + min_size=6, + unbranched=True, + unsaturated_bondtype=dm.DOUBLE_BOND, + allow_hetero_atoms=False, + ) + ) + chain1_out = [m.HasSubstructMatch(chain1) for m in mols] + chain2_out = [m.HasSubstructMatch(chain2) for m in mols] + chain3_out = [m.HasSubstructMatch(chain3) for m in mols] + + assert chain1_out == [True, True, True, False, True, False] + assert chain2_out == [True, False, True, False, False, False] + assert chain3_out == [True, True, False, False, False, False] + + +def test_smarts_fragment(): + smiles = ["COCC(O)=O", "OCCO", "O.CCO.O"] + mols = [dm.to_mol(x) for x in smiles] + mols = [cast(dm.Mol, x) for x in mols] + + query1 = SMARTSUtils.same_fragment("[8]", "[8]", "[8]") + query2 = SMARTSUtils.different_fragment("[8]", "[8]", "[8]") + + assert query1 == "([8]).([8]).([8])" + assert query2 == "([8].[8].[8])" + + # NOTE(hadim): below tests will only pass once support by RDKit is added + # See https://github.com/rdkit/rdkit/issues/1261 + + # query1_out = [m.HasSubstructMatch(dm.from_smarts(query1)) for m in mols] + # query2_out = [m.HasSubstructMatch(dm.from_smarts(query2)) for m in mols] + + # assert query1_out == [True, False, False] + # assert query2_out == [False, False, True] + + +def test_atom_in_env(): + mol = dm.to_mol("c1[c:1](OC)cc(F)cc1") + mol = cast(dm.Mol, mol) + + # we are trying to match the carbon with atom map 1 + # these queries should be equivalent + atom_id = tuple([atom.GetIdx() for atom in mol.GetAtoms() if atom.GetAtomMapNum() == 1]) + query1 = SMARTSUtils.atom_in_env("[#6;r6]", "[*][OD2][C&D1]", "[c]aa[F]", union=False) + query2 = SMARTSUtils.atom_in_env("[#6;r6][OD2][C&D1]", "[c]aa[F]", union=False) + + res1 = mol.GetSubstructMatch(dm.from_smarts(query1)) + res2 = mol.GetSubstructMatch(dm.from_smarts(query2)) + + assert res1 == res2 + assert res1 == atom_id diff --git a/tests/.gitignore b/tests_OLD/.gitignore similarity index 100% rename from tests/.gitignore rename to tests_OLD/.gitignore diff --git a/tests/test_complexity.py b/tests_OLD/test_complexity.py similarity index 100% rename from tests/test_complexity.py rename to tests_OLD/test_complexity.py diff --git a/tests/test_demerit_filters.py b/tests_OLD/test_demerit_filters.py similarity index 100% rename from tests/test_demerit_filters.py rename to tests_OLD/test_demerit_filters.py diff --git a/tests/test_generic_filter.py b/tests_OLD/test_generic_filter.py similarity index 100% rename from tests/test_generic_filter.py rename to tests_OLD/test_generic_filter.py diff --git a/tests/test_lead_filter.py b/tests_OLD/test_lead_filter.py similarity index 100% rename from tests/test_lead_filter.py rename to tests_OLD/test_lead_filter.py diff --git a/tests/test_query.py b/tests_OLD/test_query.py similarity index 100% rename from tests/test_query.py rename to tests_OLD/test_query.py diff --git a/tests/test_rules.py b/tests_OLD/test_rules.py similarity index 100% rename from tests/test_rules.py rename to tests_OLD/test_rules.py From b30546775119fb0b9a361fce581d97f16d0c01b6 Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Thu, 6 Jul 2023 13:08:47 -0400 Subject: [PATCH 02/31] fix coverage --- pyproject.toml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 9b49b77..1867d3a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -77,12 +77,9 @@ filterwarnings = [ ] [tool.coverage.run] -source = ["medchem/"] +# source = ["medchem/"] disable_warnings = ["no-data-collected"] data_file = ".coverage/coverage" -[tool.coverage.report] -omit = ["medchem/__init__.py", "medchem/_version.py"] - [tool.coverage.xml] output = "coverage.xml" From 9da1e95b8b53dcb847026267a19883ead98bb9ea Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Thu, 6 Jul 2023 13:10:34 -0400 Subject: [PATCH 03/31] fix coverage --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 1867d3a..862a636 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -77,7 +77,7 @@ filterwarnings = [ ] [tool.coverage.run] -# source = ["medchem/"] +source = ["medchem/", "*/site-packages"] disable_warnings = ["no-data-collected"] data_file = ".coverage/coverage" From 418ceef279d9e561d97b5d01748afb893d655795 Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Thu, 6 Jul 2023 13:11:57 -0400 Subject: [PATCH 04/31] fix coverage --- .github/workflows/test.yml | 2 +- pyproject.toml | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 515f34b..082bf65 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -42,7 +42,7 @@ jobs: python=${{ matrix.python-version }} - name: Install library - run: python -m pip install --no-deps . + run: python -m pip install --no-deps -e . - name: Run tests run: pytest diff --git a/pyproject.toml b/pyproject.toml index 862a636..9b49b77 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -77,9 +77,12 @@ filterwarnings = [ ] [tool.coverage.run] -source = ["medchem/", "*/site-packages"] +source = ["medchem/"] disable_warnings = ["no-data-collected"] data_file = ".coverage/coverage" +[tool.coverage.report] +omit = ["medchem/__init__.py", "medchem/_version.py"] + [tool.coverage.xml] output = "coverage.xml" From 105318fcd05ca1238977fe51776dcd93485aaf93 Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Thu, 6 Jul 2023 13:14:48 -0400 Subject: [PATCH 05/31] fix doc --- docs/api/medchem.catalogs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api/medchem.catalogs.md b/docs/api/medchem.catalogs.md index 2ed605e..acdac47 100644 --- a/docs/api/medchem.catalogs.md +++ b/docs/api/medchem.catalogs.md @@ -2,5 +2,5 @@ ::: medchem.catalogs.list_named_catalogs ::: medchem.catalogs.merge_catalogs -::: medchem.catalogs.from_smarts +::: medchem.catalogs.catalog_from_smarts ::: medchem.catalogs.NamedCatalogs From 00765840938821bd9901363d307a3a1825d69775 Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Thu, 6 Jul 2023 13:24:24 -0400 Subject: [PATCH 06/31] remove changelogs file for now --- CHANGELOGS.md | 0 README.md | 4 ---- 2 files changed, 4 deletions(-) delete mode 100644 CHANGELOGS.md diff --git a/CHANGELOGS.md b/CHANGELOGS.md deleted file mode 100644 index e69de29..0000000 diff --git a/README.md b/README.md index cabddf6..2267c2d 100644 --- a/README.md +++ b/README.md @@ -48,10 +48,6 @@ You can run tests locally with: pytest ``` -## Changelogs - -See the latest changelogs at [CHANGELOGS.md](./CHANGELOGS.md). - ## License Under the Apache-2.0 license. See [LICENSE.md](LICENSE.md). From 55e54526dd661932cd7c9911be96dbfff5d7ae32 Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Thu, 6 Jul 2023 13:25:41 -0400 Subject: [PATCH 07/31] remove dw files --- medchem/data/datawarrior/druglikeness.txt | 5295 ---------- medchem/data/datawarrior/nasty_functions.txt | 51 - medchem/data/datawarrior/tox.txt | 9462 ------------------ 3 files changed, 14808 deletions(-) delete mode 100644 medchem/data/datawarrior/druglikeness.txt delete mode 100644 medchem/data/datawarrior/nasty_functions.txt delete mode 100644 medchem/data/datawarrior/tox.txt diff --git a/medchem/data/datawarrior/druglikeness.txt b/medchem/data/datawarrior/druglikeness.txt deleted file mode 100644 index f55e78e..0000000 --- a/medchem/data/datawarrior/druglikeness.txt +++ /dev/null @@ -1,5295 +0,0 @@ -Structure [idcode] Value -sNy@LDeVjj@XTKU|TH 5.89 -KA|P@QvRRJjjj@LFaLJnyC@ 5.86 -HiFH@H{IIEUJjj@FGPfES]rA@ 5.82 -JoB@@BUJssoPvxPTA@@@FFpaUprivDsP 5.61 -HeTH@@RV[TYZ`@@AaUMpssHP` 5.19 -HmtH@@RVYWeVhH@@FCESCJ|rDx 5.18 -j`qA@@IIULsjiuoUP@`@@@CAUF\DkQkN}qFB@ 5.1 -sOx@@eJymUT@pLVOLJp 4.95 -j`a`@@@YIEEDthdg^jjj`@@@XV`cAJLxKQkN}rD` 4.89 -Hk]@@@yJeWmZ{Sjj`@`@XSBEPrngqLx 4.83 -HkmL`LfDD@cIIBhhd]MZ`X@@FEXwKoDdp 4.7 -HefD@Hz\ddUTuUUP@pFDpj[ayD` 4.7 -HaF@@@Ri_ijjj@FAPaUsL[` 4.63 -HeV@@@RUYTYj`@@AatIS\L|PL@ 4.6 -Hif@@@RiUzzjjh@XMBXUMqND 4.55 -HcuHA@E`dYrRQVYRUUUT@LEaLJfzUt 4.49 -HcLD@@QIeVuWVj`@@A`q\LkoDq` 4.49 -sGY@LDeVj`FABuxhP 4.38 -HcLL@@RlbbTLRRzuT@@@LFkae]xfD 4.37 -HcNL`LaA@HrRPjIKKju@`@@pkFzUxeZ 4.36 -Hid@p@kFkAkDfUfn`BH@FF@p|qLx 4.35 -JoBD@@IS\rjzv[uP@@@@@X[EMprng[|a@ 4.33 -Hg|H@@RYfUWd}nh@@@@@X[ATwCJz]|`@ 4.33 -HeT@p@kNkIkDfY[XXBH`@XXGSsLhP 4.33 -JoBD@@IKLrjzv[mP@@@@@XKS\LkivDa@ 4.3 -HmtHpIBlzlVlRYeeXXBHX@FFAr|sJD 4.28 -Hie@@@yJeWkjjj`A`tIaTwDxP 4.28 -HeU@@@yJeWZzjjj@FCPfES\PY@ 4.18 -HidH@@RYm^Fjjh@X\BES\ODc@ 4.14 -HeV@@@RV[TYz`@@AaUMpsqDH 4.14 -sNplJyDJHtQddeeUPCBqXwdX 4.1 -Hg|@`@bDfUueZX{`@h@@@FB`fETkiwrN@ 4.05 -JoB`@@]ddRRJTRU][uUU@A@@XKBXUKivDXP 4.04 -JoBD@DIU\vjzv[uPTEDP@XGFTwCJz]orB@ 4.04 -Hg|H@@RYfUWd}nhJBbH@XFFES\LkiwrH@ 4.04 -Hg}@@@yJeWe^nNzjhHB@AaLHUCNg_DqP 4.04 -Hk^@@MRjY]\]TzhJBH@FDieMpri|Pm@ 4.04 -Hcn@@@Re]eRi]jj@B@AaLIa\LkoDB` 4.04 -Hmt@`@dDfUuZZ@Bj@A`rXUCODyP 3.99 -HeT@@DjUghP`h`@X]BESCODs` 3.99 -sNuhLxj@cIHUEi`FDwDF 3.99 -HmuL@FFnWIIEEJQfjYi`A`cCqLH 3.98 -j`q`@@@IJsLjoiuoUT@@@@@CBtDXYpTeZMYwnP@ 3.94 -HklHpEbPRPrPrRRqIYHYj`@j@A`UMp|SS@ 3.94 -Ho~@@HrRQVKJIJwjjj@@@FApfES\ng[|`P 3.94 -Hkn@@@rQQEJIKSjj`@@A`lIaTLki|PF@ 3.94 -HeVH@DAImeQej@@@FETwCODS@ 3.94 -sNx@IddbmUPCBqXwdX 3.89 -HmtD@@QIeyVUZh@@@XTwCJ|SB@ 3.87 -HeW@@@zTjU_kjjjh@X]BXULODzP 3.83 -HcLD@H[IIDcLdnuT`@@CAlKae^Hf` 3.83 -Hg}@`AlHaIe]YVfNx@Jjh`AaHIaUJz_Dzp 3.82 -Hg~H@CyJieU~SvzhF`b@AaNESCJ{_DPp 3.82 -HmtL@@Pdf{eYUj`@@A`qMproDS@ 3.79 -sNy@BDivjj@XFZodP 3.79 -sGY@LDeZj`FAbMy@ 3.79 -sGX@@eLuT@pHVOEJ 3.79 -HeT@`@dDfUuih@J`@XTfEP|Si@ 3.78 -JoB@@BUJssoPvxPTA@@@FApfEWCJg[|cP 3.76 -HmuD`LVD@HrRRqIXYV`@`@XUS\J|c@ 3.75 -Hg}L`FM]n@cIIDhTheSCMUUSSP@pzDpjG^PX 3.74 -sGYhMEPDYIBei@XS\PH 3.7 -j`q@A@@RGiAIe]fuzLlz@Bh@H@@XRQ`eNJtZwHR@ 3.69 -j`q@@@DjUggUhJw``hBB@@A`ZBBTxJRcV]{bLZ@ 3.69 -Hg~@@@rRIIEQIUqwUUP@P@LEaLJiWSobMp 3.69 -Hk^@@@Ri_YVftzjh@H@FDpaTLki|SF@ 3.69 -Hg~@@MRjY]_GUNjB`b`@XRfTwCJgqBl 3.69 -Hkn@@@rRJGJIKSjj`@@A`lIaTLki|a` 3.69 -HmvH@DAIn[VUZh@@@XLc\LkqLh 3.69 -HaFH@NAIYUnZjh@XEaTwLaN@ 3.69 -qCaHK@Hg`dsPFDGME` 3.69 -KAz@@ArUJmUT@XMBXUMrN@ 3.68 -sJY@LDeZhAahcqC@ 3.68 -HklD`HXxcIIDcLeevjd@H@FGXWCJgrD@ 3.66 -HmtH`NBHRYWVih@Jh@FG@fETkrA@ 3.66 -HiFH@BAJ]ejjh@XMFTwCrD@ 3.66 -KA|P@XBRlmUT@XMBES]r@@ 3.66 -sGT@ATiVj`FAbqxaP 3.66 -Hk]D@DHIRYge\ftvj`PH@FE\Jz_Dp` 3.62 -Hid@p@kFkAkDfUfn`BH@FA@cCqLx 3.62 -sNx@@eRmUPCBqXwdX 3.62 -sGY@DDfuj`FBMxe` 3.6 -sGX`JBdruT@pHbwDZ 3.59 -HknH@JCIDdhhd]Nj`h@@FDqc\Lki|a@ 3.56 -Hmv@pBBlFlVlRYfyZXHJH@FF@J|pnd 3.56 -HeUL@DpFEIeYzyjfZ@FBIgDzP 3.56 -JoCB@E|NRRJJIIGKYoU@uAD@AaNESRnfDFp 3.55 -Ho~D@Hy|ddUTtRVNzjj@B@AalIaTwRnorC@ 3.55 -JoB`P@vDPdrnlktqw@AUUQ@AaHIaUJz_Dyp 3.55 -HkmL`LZDh@cIHULhdmMZZjj@F@xwCJz_H@ 3.55 -HmvDPLa@BNbLddlTVeUhH@@FAXwCqIT 3.55 -HknH@JCIDdhhd]Nj`h@@F@qc\LkoDPp 3.55 -HcLH@@rJJIPiKkUP@@@p{FxYW^He@ 3.55 -KAzY@XtIPAFRPjYZZ@LDqnHG@ 3.55 -KAxH@@bSKKUT@XXUMqLx 3.55 -sJQdEbOBAD^u@LINYX` 3.55 -JgC@PG@DISLroutgmt@P@D@@XBALLki|Sk@ 3.54 -Hk^L`FWS`HrRQJEJZfFZjjfZ@FCPfEV|`P 3.52 -Joc@PG@DISLrj}]Mz}@D@PP@A`HDprnwqC\ 3.51 -HcNHpBtJpZqZqIf[eZXHJI@Aa`BoLKi@ 3.51 -HcMDPLvD@HzHrRRqQ[RjtDA@@pKFx^IN` 3.48 -sOt@@tiWMjj`FEbqoDF 3.48 -HaE@@@YJe~fjjh@XUBXU\c` 3.47 -Hk]D`FuS`HrRQJEIJfFZjjfZ@FCPfEP|Sm@ 3.47 -HmMH`FeXBLddRJRinFjjih@XUFEW\QI@ 3.47 -HeV@pBBlzlflRYgea``b@Aa`]OLpa@ 3.44 -Hid@`@bDfUvf`@h@FE@fEWDxP 3.44 -sNy@BDiujj@XFZobQ@ 3.43 -sGY@LDeVj`FAbMxa` 3.43 -KAxD@@c\dvlts@FAIa\ 3.42 -jdyA`@@HbdsrnlkbexKT@E@A@@CBVJLxHug^xaTP 3.4 -jdyA@@IIULsZny`ncU@C@D@@@pMQgAJtZsoAcrA@ 3.4 -j`aAb@HLyzHrRQJFYIHf]USAAD@@pE``iJt[wHV@ 3.4 -j`qa@@D@R[fYU_Sk^Zh@@@@@FFdLxJRmFl{wHX@ 3.4 -j`qa@@C\RjYU_~QmVj`ZBJ`@FBlDhpTeZl{bD^@ 3.4 -j`qA@@@ISKMjoiuoUT@@@@@C@tDLxJRmFl{wHT@ 3.4 -j`q@@@DjUggUhJw``hBB@@AaZBLDipTeFl{wHZ@ 3.4 -jhiA@@@ILrsZkf|xKUP@@@@@LCXYpTeZMYw`|`` 3.4 -jhi@`@@HRYyWVUEKpVh@J@@@@XRqQgAFl{wDJB 3.4 -Hg]L`LfDD@cIIBhhd]ikTC@P@LFqnW[yD` 3.4 -JoCD@A|eTrjr^wU@tDT@AaNESCJ{_DQp 3.4 -Hg}@@@yJeWe^nNzjhHB@A`lHUCJz]|c@ 3.4 -HcLDpITJsjsZqIfVYXXBHZ@A`P\n|SA@ 3.4 -HknL`LaA@HrRPjIKY]VhDB@A`vMtj_Hh 3.4 -Hmv@@@RYvUeZj@@@F@pfMproD@` 3.4 -HeV@@@RiU~njjj`AatIaTp|Si@ 3.4 -Hef@@@rRJJIuUU@C@XSBinGdR 3.4 -j`q@`@HRRjyeUSk^j`A@@@@FFhTYpRmFl{wHD@ 3.4 -sFt@ATiTvjhA`Xl^HT 3.4 -HiFD@J@dfWZjj`A`HPfTwCrB@ 3.38 -sNq`@fdvkSHCCKGdh 3.37 -HcnD`FWXBLddRaRuLLuUUKP@pjDpjxgB 3.37 -HevH`Ff@cIIDbmS\MUUM@C@hpjxb\ 3.37 -HeTD@@QImeQej@@@FETwCODS@ 3.37 -HklL@H[lddRaaRtzjX@@@XMaCJ{qNL 3.35 -HcNHpBtJpZqZqIfUeZXHJI@A`PDJ|sNd 3.33 -JoBfPCZio@QddbTJRVuLLuUULsP@X]BXUCoDzp 3.33 -Hk]D`FeS`HrRQHiIZfxZjjfZ@FCQaUt|QM@ 3.33 -Hg}D`FeS`HrRQHiIZTwCUUTsT@LFcBkixbV 3.33 -sOt@@tjWkjj`FEbqoHp 3.32 -JgC@PG@DISLroutgmt@P@D@@XRALLkiwrN@ 3.31 -Joc@PG@DISLrj}]Mz}@D@PP@AaHDprnvHL 3.31 -HeV@@@RYyTYj`@@A`LIeMpsr@@ 3.31 -HeVH@NAIYWVyjjj@FEXULOLaI@ 3.31 -HifH@NAIYW[fjj`A`VES\rDD 3.31 -HieH@FxDigwJiej@FFXU\qND 3.31 -QO`BNZ`XL|` 3.31 -sOt@@tjWkjj`FAbMxlp 3.31 -sJX@@dsU@LMEnHD 3.3 -HaD@@DjUZzjj`A`pPaUwDq` 3.28 -HeVD`Ia@BLdabRwBl@D@CBbingd@ 3.26 -HmtD`NTHaIe]Vf`@jP@XTBXU\PY@ 3.24 -HeTH@@RYe\YZB@@AaVEWCqFd 3.24 -HefD@JADeUeZjj@FCXS\L|b@ 3.24 -KA|H@TBIJjmUPA`VDw\RJ@ 3.24 -Ho|L`H[gbLddRafRvNzjXHB@AavDLz[|aP 3.24 -Hg\L`H[kbLddRaaRvgUS@A@@p{BFUv~Qp 3.24 -sGX`JDdjmT@pVOEJ 3.23 -sJXhMD@bOV`FDwHP 3.23 -jhi``@G\DeTsJn~iqoUPMPTT@@pu`eFRUhuoAyAp 3.22 -HkmDPLvD@HzHrRRqQ[JUV``J@AaVMp{qIL 3.22 -Hk^DBIAIeIgeYQe]Zjjjh@XBUMpki|SI@ 3.22 -HcnDBAAAeIVUexYUjjjj@F@xUMtkoD`P 3.22 -HevHBFAiRYVVfxZjjj@F@pfEWCODA` 3.22 -HcML@FFnwIIEEDZJuSMS@CCLX^HT` 3.22 -HcLD@@QIeVuWVjjj`AaqUprn|SF@ 3.22 -HiV@B@BTjYnnXZjjh@X]BXUMwD@P 3.22 -HmuL@DpFEIeY~nZifh@XXfSqNT 3.22 -HeTD@@QImeQejjj@FCES\L|QL@ 3.22 -HmtD@@QIeyVUZjjh@XMS\LkqLH 3.22 -HaE@@@yJe~fjjh@XUBES\SN@ 3.22 -sJX@@eKU@LLH^IX 3.22 -KA|P@DBSNuUT@X\DHUMwHp 3.2 -sNy@LDeVjj@XLKFod` 3.2 -HeTD@@qI[eQej@@@FCYS\L|RD@ 3.19 -Hid@@DjU^nBBH@FEPaTwLsa@ 3.19 -HidH`NBHRYWZZ@B`@XTBXU\`P 3.18 -sGQ`@jdjmR@pfxhP 3.18 -Hid@`@dDfUvf`@h@FAIaUqND 3.18 -HmuH@DHDf{eYUj`@@A`vMproDP` 3.17 -HeVD@NADfVuFVh@@@XESCOHH 3.17 -HaE@@@YJe~fjjh@XEBEWDs` 3.14 -JoBb@BDByEEEMDdbSV{UTC@P@FGYpr]oqBt 3.13 -Hg}D@DHERYfywIcmjjA@`@XM`siwqBx 3.13 -HcOLAHePPheNR[e]VyjZfd@XYWCqEt 3.13 -Hie@@@GIHddZzjjh@XMBXU]qFD 3.13 -sGXhMD@cIHXmPCBGbE@ 3.13 -sOx@@eRimUT@pLQoEf 3.13 -HevH`Ld@aJY[RZnjjid@XXDIsBxP 3.13 -sOx@@drm\@@@prkyab 3.1 -HiVH`LD@cIEDhRZnjjfPAa`PgLJn@ 3.09 -Hg}L`LGSl@cIEDhddXWTuUUTmH@phHPkx`r 3.08 -HaF@@@RiUkjjj@FEPfEWD[` 3.08 -Hk^L`LWS@HRfVuxnijjjei@FAABGqBD 3.07 -sNq`@fdskUHCBGbu@ 3.07 -Hk]D`LES@HrQQJIKDfkjjjfY@FEABDOLz]@ 3.07 -Hg}D`LES@HrQQJIKFDu]UUTsR@LJBDH^Ytv 3.07 -HmMH`LEPBDieeRZnjjjY@FAABEsNFP 3.07 -sOx@@drm\@@@pqky`l 3.07 -sJX@@eKU@LMEnHD 3.07 -JoBaPFBivxABTrsjvWTuUUSLr@FCABDM|Rm@ 3.04 -Hk]L`LE]L@aJYYwbzfjjjVd@XTDHQ|Ra@ 3.04 -Hk]D`LF]@HRfV_xfkjjjYi@FEABDOLkc@ 3.04 -HcmD`LF]@HRfV_rZnjjifPAaPPaCsJyP 3.04 -HeuH`LFPBDiegIjzjjfPA`PPa\rnD 3.04 -HaF@@@RiUkjjj@FCPfEW\a` 3.04 -sNt@A\dbJjj@XFKGbk@ 3.04 -j`qa@@I@RYeU{TRg^jBBJjH@FE`XIQgAJtZso\a@ 3.03 -jdyP@@G^rRQRiQHjIBdFMT@ETuD@CCRLDhqVc^CD 3.03 -j`q`@@@ITrjwoHsoUAP@@@@C@rLDhJRmFl{wH\@ 3.03 -j`q@`@H\RjyY]_Sk^j`ZBbH@FAhDhpTeZMYwnPp 3.03 -j`qA@@HIU\rjiuoUPUAQD@CBtLDhs`eZMYwnPd 3.03 -j`aP`D@VdXDyIHiTimMAJj`BIj@@XRQ`eFBT{p 3.03 -HcL@HHbDbLbMbLddjbRtkUP@P@LAaL[ag^PP 3.03 -Hg}L`FM]n@cIIDhTheSCMUUSSP@pZDpjGbZX 3.03 -Hg\HpEbPRPrPrRRqIYICMT@ET@CBj[aOb[X 3.03 -JoBb@CCWYIHhiSDdpv}TsP@P@FEKivLpa@ 3.03 -Hg~L`FWS`HrRQJEJ[TpsUUTsT@LJaLJnHM` 3.03 -JoCD@B`eLjsj|ioUUAAD@AalXS\Lz]orD@ 3.03 -HkoDPFF]N`aPcIIEJeeNFjfjU@FEIaUOHT 3.03 -Hk^L`FWS`HrRQJEJZfFZjjfZ@FEPfEWDGP 3.03 -Hk^@@@rQQIFIJftpHH@@@F@ieLLkoDHp 3.03 -Ho~H@EAIYeV^dvhHJJ@A`iTwCNg[|RD@ 3.03 -HknDB@dpgIIEJeMaVj@Hd@FGIaTpkrM@ 3.03 -Hg}D@DHERYfywIcmjjA@`@XTLz]|sBx 3.03 -Hc^`@@pjYJYenkae]@bJhh@XDLkoHx 3.03 -HmvHB@dIrRQRiPUj`B@@X\fESBoHd 3.03 -Hae@PDp@bOAIfXj[fjj`AaPES]rH@ 3.03 -HcLH`ABPRYW[ZZ@BZ`@XLfETkrM@ 3.03 -HmtH`ABHRYWUih@Jh@FC@fET|Se@ 3.03 -HeV@B@B\ddTjPsU@@@CCdpj[iy@` 3.03 -Hkl@@LddTjTRFZh@J`@X\fESKoHL 3.03 -HcN`@@pjYJYenk`Hbj@A`Prn|c` 3.03 -HcL@@LddTjTPsU@AP@LNSBiewdR 3.03 -HeTH@@Rf{TYj`@@A`qTwCODa@ 3.03 -Hif@@@RiUzzjjh@X]BXUMwHD 3.03 -sJPXHlPDQ}T@phbq@ 3.03 -HcnL`Le]@HrQQJEJEuMUURt`C@`aMxaT 3.02 -HifD@FADfyWaZ@@@FAEWCrD@ 3.02 -HeT@@DjU_k``b`@X]BES]ODpP 3.01 -sOx@@eR}]UT@plVMyF 3.01 -sGP`ITjnjPFBqxh` 3.01 -Hie@@@{IHddZzjjh@XMBXUCrF@ 3 -Hif@@@RYfVF@b@@XTUMp|`@ 3 -Hmv@pIbPRPrPrRRqIPUj`B@@XESBoHd 2.95 -Hg^B@FACmInY]XYZZjid@XXw[sDjp 2.92 -HknL@FACR[fWTYZZjiPAac]oLRe@ 2.92 -HmvH@JAIUYVUZjjh@X\fDwCODaP 2.92 -HmvD@FALbfbbQFVfji@FFMr|qJD 2.92 -HeVH@JCHeEDcpluUH@prfgfPW@ 2.92 -HcND@JCTefWWaYjje@FFTr|rBd 2.92 -Het@@DjYUX^dHbH`A`rDwCODr` 2.92 -HeVH@IAJYW~F``H@FEIaMwDjP 2.92 -HaF@@@RfYkjYj@FF@S\sJx 2.92 -sJPdE`DSpRYZ`FBAxi` 2.92 -sOt`DPtfWMZi`GfVH 2.92 -sJXhMD@bOV`FDOI` 2.92 -HmvH@DAIVYdUZ@b@@XLc\LkrH@ 2.91 -sNx@AddQeUPCBqXwdX 2.91 -HaF@@@RfUi`HH@FAIeMqBx 2.9 -sGX@@eLuT@phbqyJ 2.89 -sNt@@|dbJjj@XVKF|c@ 2.88 -HaF@`N@HRYWih@H@FEIaUwH@ 2.88 -Hid@@DjU^nBBH@FCPaTw\SA@ 2.88 -qCh@BIWLAaEqS@ 2.84 -sGX@HeTuT@pLVOIP 2.84 -Hie@@@{IHddZzjjh@XUBXU\Qa@ 2.83 -JoCbPCRzg@QddbQRRtuMpuUULuP@XMFEWSsDmp 2.82 -HcLL`NWPbDfUuZf`@jX@FE@fEWDGP 2.82 -HcNH@DAIgfYgVhBH@A`r\LkoHp 2.82 -KAxX@QSYIIiZih@pSBxd\ 2.82 -sNq`IVeUuTpCAX|TX 2.82 -sGQ@@drmT@pROEj 2.82 -sOx@@eR}]UT@plQkyL 2.82 -HidH`ABHRYWZZ@B`@XTBXU\Sa@ 2.81 -HeTH`ABHRYWVf`@j@AaPIaUqNd 2.81 -Hif@@@Rge^Eh@@@XTUMp|RD@ 2.81 -sGX`BDdwMR@pbxcP 2.81 -qCx@AYIf`OLE` 2.81 -HaDH`NBHRYWih@H@FE@fEWHx 2.81 -j`qAB@H^bDjn[U_UXsjh@@@`@AaheF\EIVcN}rD@ 2.8 -Hk]D`LFD@HrRPjJIEatujB`H@FEYWBoLgS@ 2.8 -HknHpEdJsjsZsHhheEEVF@bFh@FEArz_DpP 2.8 -JoB@P@QBSJ{MkSV|@EP@@@FF`fETkivHx 2.8 -Hcld@dsmBPzIZYyIfVuXUvjjYj@FBToDsP 2.8 -HcmD`LFD@HrRPjIKLJzmPPD@C@lxYyeKh 2.8 -Hg^H`MDHaIe]UZf`@jj`@XRBXURiwrN@ 2.8 -HkmL@FFnOIIEEDlqvjYjf@FAXSCqIT 2.8 -Hg^H@AAJY[Ue[jhHJ@@XJaTwRng_H` 2.8 -HeVD`La@BLdaTRPrm@@@CBlinGbAH 2.8 -HcNH@DAInYWWVjB@@AarTwRn|SA@ 2.8 -HklH@@RYeg_SZjB@@A`NTwBngqDd 2.8 -Hmv@@@Rf~UeZj@@@FDaFDwCJ|a@ 2.8 -HeUH@DpDf^UFVjjh@X\aTwCOHp 2.8 -HeT@`@bDfUuih@J`@XLBXUCqNd 2.8 -HeVH@DAImeQej@@@FCIS\L|c@ 2.8 -HifD@AADfyWaZjj@FAES]sDpP 2.8 -HaF@`FBHRYVkh@`@FF@e\sFx 2.8 -HaF@@@Rie[jjj@FEPfMwDJ` 2.8 -sGYiKE`D[lddju@LH^R` 2.8 -sNx@AdbbMUPCBqXwbC@ 2.8 -sJP`@TfVhAaEqX` 2.79 -sFx@@eJfuU@LCEcqB` 2.77 -HeWH`LJQ@HrQQEJYULtt@LLABxcR 2.76 -HieH`LHPBLdTQRrjYi`Aa`HWD[` 2.76 -sOy@FDiguie`FFqoDf 2.76 -QMIDBKpRVAaGFP 2.76 -HaE@@@yJeVnjjh@XUBXU\Qn@ 2.75 -sGP`@dfUj`FBuyB 2.74 -Ho~LpBNwBlflvlRYfVVVVBBhfP@XTASm|PU@ 2.73 -HknDpBtpkAkEkDfYnVZXHJI`@XD@j_DJP 2.73 -HeVH@FAIfUqfhH@@FCAAUp|sFd 2.73 -HidH@@RUe^Ejjh@XMaTwCqHP 2.73 -sKT@Adi\Vj@XYX|d@ 2.73 -sKQ@@eKcRpCAX|TP 2.72 -sFx@@eJfuU@LKEc^P@ 2.72 -Hmth`LKed@cIEDUMLjfYf`Aa`HWDyP 2.71 -HeWH`LKi@HrQQESYULsL@LLABxgB 2.71 -HaG@`LK`BLdTQVUSLp@ppDKbMp 2.71 -HaEH@FxDig|jfV`AafEWDS` 2.71 -HmtH`ABPRYW[ih@Ih@FEIaUOHT 2.71 -Hif@@@rRIIFnjjj@FCPfEW\Qa@ 2.71 -HeeH@DhDeUeZjj@FGIaMpsrH@ 2.71 -KAzP@IPIJjmUPAaRXS]qHh 2.71 -sOtHLPDYHhckSM@LLD^Q` 2.71 -sFtHLPDISNmLpCCAGdh 2.71 -sKX@@dmcUPC@qX|`@ 2.71 -sJXhMD@cIHUhAaMq@` 2.7 -HaFH@JAIYUnX@@@XEaMwH` 2.69 -Joc@@@YHhhheDbNsYoP@PPD@@XJS\LkivH@ 2.67 -Hg^@pCbPRPrPrRRqIPjCMT@ET@CCjXYW[yA` 2.67 -Ho}D@HggrRQUSQIX{jjh@H@FBpfES\iorM@ 2.67 -Hkl@pHdDdLdLddlRTJFZh@J`@XMSCJgrM@ 2.67 -HmtH@@rQQJEJUjh@@@X\aMproDb` 2.67 -HmtH@@RY^UeVj@@@FGHS\LkrL@ 2.67 -HedL@JZ\ddTZUTuH@pILKnPH 2.67 -HiDL@Hilddtjjfh@XYa]qHD 2.67 -HaF@@@Ri_ijjf@FEPfEWHx 2.67 -KA|@@Qddbljj`CAhSBinQp 2.67 -HeTH@@RYe\YjB@@AapXU\L|RF@ 2.67 -HeULAHdDJISdfyW[fijT@XYWCrI@ 2.64 -Hg|@@DjYU_~V]`@@B`@FDiaTwCN|P{@ 2.64 -sJX@@eMU@LBIcrH 2.62 -Job@@BULj~jprmnDQE@@@@XJfDwCivHh 2.61 -HcMH@LDDeYWWajjjj@FDaBES]J|cP 2.61 -HeU@@@yJeWZzjjj@FGPfESSrA@ 2.61 -HeT@@DjU^k``b`@X]BES\ODrP 2.61 -sOp@DjWkjj`FEbM_DL 2.61 -Hk\d@dsmBPzIZY{HhheLdVE]jjfZh@XIR|SC@ 2.6 -HeV@pBBlzlflRYgea``b@A`PYt|Pa@ 2.6 -HeT@p@kNkIkDfY[XXBH`@XDF]ODhP 2.6 -HmtD@@EJYUgehHJ@@X\fTwBoDJP 2.6 -sGX@@eMuT@pHfODj 2.6 -HkLN@HiiWSrRSQHqRjZfX@XMFDrf 2.59 -HmwLAHePPheNR[e][fijY@FFUp|aP 2.58 -HeVH@LAI[eQej@@@FCIS\L|RL@ 2.57 -sOtHBpDIRocRs@LDIsJl 2.55 -JoB@H@RCrBSJzroSG\@E@A@@F@iaUJz_Hx 2.55 -sNq`@jdvsUPCCKWbK@ 2.55 -HedJ@@RaeImmfji`AaRYSSrB@ 2.54 -sGX@@eRuT@ptVxcP 2.54 -jhi@`@JLRjYeu]TzpZijjjj`@XFQ`gARUhugAyCp 2.53 -jhiA@@HIU\rjkz}XMT@PA@@@LKPIQgARUhuoAyAp 2.53 -JoBR@RXI`h]DmJ}dTTTTvQSSiuUTsUP@XEW[_H\ 2.53 -j`qa@@J@Re]YyTeG^jjj`@`@FAhHpQgIZMYwnPD 2.53 -j`q@`@@^RYWUe^cKN`@j@B@@FB`HpRbmFm{bNB@ 2.53 -j`qA@@HIU\rjiuoUPA@@@@C@tBTYpRmFl{wHR@ 2.53 -jhi@`@@HR[YfUWMypVf`@@@@@XJxJRmFl{p^HQ` 2.53 -jdya@@J@RVVyeU{A}Eiz@@@@@A`hTeZMYw`qyB@ 2.53 -j`q@`@@HR[fYU_Sk^Zh@@@@@FFlLxJRmFl{wHH@ 2.53 -j`qA@@@IJsLjoiuoLt@@@@@CASNBdkQkN}qDD@ 2.53 -jhqa@@C@RYegV^tyjhHJJ@@XFqQgARUjsoAyA@ 2.53 -Hg|d@dpSAPzIZU{Hhhhilbtz]UULuP@prnwdV 2.53 -Hg}DPLFD@HnHrRPjJIGLNfmPTAP@LFrnE[xdz 2.53 -JoCd@DC_YIHhhdd\mf}USUUT@FBxULLkiorK@ 2.53 -JoB`@@[ddTRRVJWKNuUUUUP@XZfES\Lj]|RG@ 2.53 -JoC@A@ANRRIGIQIMuoUUL@D@AalIaTrz]orA@ 2.53 -j`q`@@@IJsLjoiuo\t@@@@@CASNBdkQkN}rB@ 2.53 -Hk]DPLFD@HNHrRPjIKYaWUjB@h@FEYpr_DiP 2.53 -JoBB@EMddbbbQRrv[uSUUUP@XZfEprng[|a` 2.53 -JoCFAF``{JSJroJng[UUUUT@FBeS\Lj]oqLt 2.53 -Hk\d@dpSAPzIZUyIfYoVgSjjifh@XYW[rC@ 2.53 -Hg}@@@wIHhddlUrsmUUUUP@pULJfxYT~IE` 2.53 -Ho~@B@B\ddTQJbRmzjj`@@A`\IaTwKivHD 2.53 -Hg|`@@pmrQQIPiYTrzAAUUD@LARfxYT~QX 2.53 -Ho|L@@RlbbTVbbQmvjhJ@@AaITLkivDs` 2.53 -Hg^L`LaC@HrRPzIKJRju@AT@C@\InF]OdV 2.53 -Hk\`@@pmrQQIPiZfWPHJjb@FGIS\LkrC@ 2.53 -Hk]@@@wIHhddl^V]jjjjh@XRfES\LkqHL 2.53 -Hg~H@DCHhhdeBepg[UU@A@@pdjxYWSodX 2.53 -Hkn@B@B\dbarbRtzjh@@@XKBXUCJz_DA` 2.53 -JoBD@@IS\rjzv[uP@@@@@XKEMprng_DQp 2.53 -HknL`LaC@HrRPzIKJUVh@J@AavDwCI|cP 2.53 -Hcl`@@pmrQQIPiTrzAAUQ@CCdinFUyF` 2.53 -Hg|H@JRjVWWd}njZjjh@XZfDwCJz]|b@ 2.53 -Hg|H@@RYfUWd}nh@@@@@XKATwCJz_DBp 2.53 -Hcm@@@uJfUWyYvjjjj@FDiaTwCJ|RM@ 2.53 -Ho~D@IADfUYUgWZjBB`@FDdwBng[|c@ 2.53 -HkmL@FFnOIIEEDRaVjYjV@FEXpsoHH 2.53 -HeTL`HS@aLddlRPru@@@CC`SJ[ayD` 2.53 -Hcl@@DjYU_egZjjjh@XZBXUMprn|b@ 2.53 -HmvD`La@BLddNbReUj@@@FCXS\L|aP 2.53 -HcML@FFnwIIEEDZJuSMS@CCFF^Ia@ 2.53 -HcML@DpFEIeY}kfjYi`AaRYJ{rN@ 2.53 -HcLH@@RVYUYujBB@@X\ULLkoLaN@ 2.53 -HmvD@EADfVUyUjjj`A`qTwCODqP 2.53 -HmuL@DpFEIeY~nZifh@XXfKqNd 2.53 -HeVH@BAJ]eQfjjj@FGQeMpsrD@ 2.53 -HeTH@@RYe\YjB@@AapPUMp|SI@ 2.53 -HeV@@@RiUvnjjj`AatIaTw\PY@ 2.53 -HifH@LAIVUxZjj`AatHUMp|`@ 2.53 -Hie@@@qJYYhP`h@A`REP|Qn@ 2.53 -HieD@DHNRY[Rijih@XIc\qBD 2.53 -HaE@@@qJUwBZZh@XEBEWD[` 2.53 -HaED@DHNRY[Jfjf@FDYsDI` 2.53 -KAxX@@gILkmUHA`fEqJX 2.53 -sOx@@eJm]UT@p\VM_H@ 2.53 -sJX@@eSU@LDmqP` 2.53 -sFq@@eLzts@LEkqH` 2.52 -sJY@DDfvhAaEqX` 2.52 -qCqPZHAD]XCB[d@ 2.52 -HidH@@RUe^Eh@@@XTUMp|RD@ 2.52 -HeTHPABHfHRYeUn`HJ@AaPXWSqJD 2.51 -sOx@@eR}]UT@pLQoEf 2.51 -HknHpBtJpZqZqIfUeffBBbX@FE@Pj_DrP 2.5 -HifH@DAIVUxVjj`AarXUMp|b@ 2.49 -HifLAHABbTyInU[fijPA`e]rA@ 2.49 -HaFLAHABbTyInUnZfd@XIW\a` 2.49 -sFt@AdigUjhAaekrD 2.46 -qCp@AIZ`LINXK@ 2.46 -Hmv@pBBlFlVlRYfyZXHJH@FA@LkqBx 2.45 -Hif@`FBHRYVzz@H`@XDBTwLsa@ 2.45 -sOt@AdigkB@@FFU_Eb 2.45 -HmtHPABHfHRYeW[hBBh@FEAa]ODiP 2.45 -JoBbHFSB@DBDYIHUEDdekgZuAHTB@F@xwBng_H\ 2.44 -HcN@@@rRHiQIKmUP@@@pfDpnFUwdT 2.44 -sGYDJQDJHR[jf@XXQ\e@ 2.44 -sGQLKHaQFbLddmU@LCEkrD 2.44 -sJY@BDfZhAaaEqX` 2.44 -sJP`@dfvhA`l^Q@ 2.43 -Hg^HpBLJrZsZqIfYYye``jI`@XTASm|Se@ 2.41 -qCp@AIZ`LDmqB@ 2.41 -HaF@@@RVU[j@@@FEQaTwDC` 2.41 -HaD@`@bDfUzZ@B@AaPIaUrN@ 2.41 -HedJ@HiagIIMEYUML@LBcFgdD 2.39 -Hid@@DjU^nBBH@FCPaTp|SN@ 2.39 -JoB`HBvDQLPdsJormuo@PUTi@AaHXWCNfHh 2.37 -Ho~D@M@\dTRRbNTyZBBbj@A`ZYS\LkivHH 2.37 -HcN@@@rQQHqIKmUP@@@pTHSBxYW^QP 2.37 -Ho~B@D@UMInUeWzV`BJj@AaQUmorD@ 2.37 -HknL@D@UR[eY_iZ@Hj@A`QUi|QI@ 2.37 -HknL@D@]R[e[_iZ@Hj@A`QTi|QN@ 2.37 -HeTH@@RYe\Yjjj`A`HIaUpsqHX 2.37 -HmvD@D@TfyV~eh@b@AaaToLSi@ 2.37 -HmvD@DBTfyW^Eh@J@AaaToLQn@ 2.37 -HeU@@@qJYYzDHJH@FEHULODzP 2.37 -Hie@@@qJYWk``b@AaRES]qLD 2.37 -HaE@@@qJYVnBB@@XDaUwDq` 2.37 -sNx@@eLmUPCBbKGbk@ 2.37 -sNt`DPtfuZi@XYX|e@ 2.37 -sNt`DQTfuZZ@XQ|Rp 2.37 -sKT@@Ti\YZ@XR\rq@ 2.37 -QMPBcdGcH 2.37 -HmtD@@QIme\YZ`@`@XTeMp|SE@ 2.36 -HiFD@FADf]Yjj`A`QUp|c@ 2.36 -KA|H@TBIJkMUPA`VDw\b@ 2.36 -sGU@DPdvmT@prqyJ 2.36 -sJY@LDeVdAaEqP` 2.36 -HeTD@@YIfUqfhH@@FC@U\L|rLX 2.36 -Hid@@DjU^nBBH@FCPfEP|Qn@ 2.35 -sJT@@TkVhA`enJD 2.34 -HcML@FFnwIIEEDZJuSMS@C@lXYyA@ 2.33 -HmuL@DpFEIeY~nZifh@XDfRoHx 2.33 -HaG@@@rdigjXHB@A`fMqDx 2.33 -sO|@AjeL}XP@@pV_Db 2.33 -JoCbPCRzg@QddbQRRtuMpuUULuP@X]FEWRDRp 2.32 -sNq`@fdskUHCAX|e@ 2.32 -sJX@@eSU@LMEnP` 2.32 -HmuH@DHDf{eYUj`@@AavDwCJ|a@ 2.3 -sGR@@mTf]jPFFBoEb 2.3 -sGX@@eLuT@pHbwDZ 2.3 -qCr@PIKLAy`l 2.3 -sJX@@eMU@LLL^JH 2.3 -Hg\B@@z]RVUeWXV@Hjh@FEXRg_H` 2.29 -HcLL@@yTee[]aX@bh@FAXT{qHX 2.29 -HeTD@@EIYWVy`@h@FFXT|rJX 2.29 -sJ\@@bdjt`LLD^JX 2.29 -Hg^DpBtpkAkEkDfYnVvfBBbZ@A`PBi|Pk@ 2.28 -HklDpEtJpZpzqIfYfVf@bah@FA@NgqNd 2.28 -sGX@@eLuT@pLVoDB 2.28 -Ho~DpBNpkIkMkDfYeeYe``jIX@FE@TzDyP 2.28 -HeTD@@EJYU^f```@FCIc\L|Pj@ 2.28 -sKR@AEdi\Vf@^KD 2.28 -sJU@DPdvu@LDmrD 2.28 -Hid@@DjUfaBB`@FCPfEP|Qn@ 2.28 -sJY@DDfvhAyeb 2.28 -sKR@AEdi\Vf@XS\a@ 2.27 -qCp@AJZ`LEEqC@ 2.27 -HidL@@pTifvnjjj@FEPaTwLsa@ 2.26 -HaDD@@YJYZnjjh@XEFEWLQn@ 2.26 -sOx@@drm\@@@pJM_DL 2.25 -HaDD@@qJYnnjjh@XEBDwLrn@ 2.23 -sGX@AddQjhA`Xl^R` 2.23 -HidH@@Rfuvz`@`@XXfUsBXP 2.22 -HkmL`LNDD@cIIBhdmeuZ`PH@FCXwRi|b` 2.22 -HeVH`IDHaIe]jZ@BX@FE@fEWHd 2.22 -Hmt@@DjU^ZxHHj@A`LIaTpsrE@ 2.22 -HeT@@DjU^k``b`@XCBXULL|c` 2.22 -HieH@DDDfyWaZ@@@FAES]rD@ 2.22 -sOx@@eRimUT@plVMyF 2.22 -HiDJ@@PnEInvZjX@XDaTOHp 2.22 -HcNL`IaM@HrRFIKI\Jp@T`@phj[ix`J 2.22 -sNyA@qNRRJuU@LGEcV 2.22 -sGP@DjVj`FAbMxa` 2.22 -HcLL@@zTeeY]aX@bh@FAXR{qHD 2.22 -HeTD@@yIYVvE`BH@FFXT|rFD 2.22 -HeV@@@Rig\YjB@@A`rEWCODq` 2.22 -HeT@P@bIbDfYU[hBB`@XTFEt|Ra@ 2.21 -HeWH@DJPRY[TYZ`@@AaRTwCrB@ 2.21 -HmtD@@QIge\YZ`@`@XUeMp|aP 2.21 -sO|@AbeLmXD@@prkyB 2.21 -sGX`LBdjlt@pexh` 2.21 -qCr@PISRAaErX 2.21 -qCqRZHAFzNlAxa` 2.21 -sJY`hEiNyIej@^P` 2.21 -HaEH@DxDeeVyjj`A`VES\RN@ 2.21 -sGQ@HeUuT@ptuxdP 2.21 -j`qAB@A@bDfUvVuhqwh@Jh@@@AahBLDisQkN}rB` 2.19 -jhiP`@DD@iIf[eW\cK^Zj`XHh@AaK`iZMYw`|Q`` 2.19 -j`qP`@FBisIIEED[DdpSoUSMP@P@CAfMFl{wLDEH 2.19 -j`aa`@H\m{IIEUMDeBYuUU@DP@C@tDXIQgIJM[p 2.19 -j`qA@@@ISKMjoiuoUT@@@@@CCTDLxJRmFl{bJ^@ 2.19 -j`aA@@OYIHhbeHhyVj``jJ@@XJQ`eFRUhwnP\ 2.19 -HoD`Hu~fpcIIEULeDk^jjjZX@XSBXUMpwrC@ 2.19 -Hg]LPLfDD@bxcIIBhhd]ikTC@P@LFqnW[yD` 2.19 -Hg_L`L[hR`BLdaTrbRQvmMUUP@pGFFUt{y@@ 2.19 -JoBP@@XVyHhdhTleSKhDEUUD@FDiS\Lj]|ap 2.19 -Hg~@pNbPRPrPrRRqQISSiwU@@@@@LBZ]obJX 2.19 -Hg~@pJbPRPrPrRRqISICIwU@@@@@LB[SobBh 2.19 -JoBDP@aDILkmrmM[p@U@@@@XZBXU\ng[|`P 2.19 -Hk^DB@TpgIIEECTfGijjjih@XSBXUMpsrM@ 2.19 -JoB`PCFDPdrmvnuvg@DUUQ@A`hIe\Lkm|ap 2.19 -Hg~DB@TpgIIEECThp}MUUUMP@pfDpj[agdV 2.19 -Ho@@JE|ddTnRbRmzjj`@@AalIaTpkiwrN@ 2.19 -JoBb@BDByEEEMDdbSV{UTC@P@FC\Lg[|sBt 2.19 -JoC@@@YIDdThdlUG]US@AP@FFpfESRnfHx 2.19 -HknLPLaA@HNHrRPjIKY]VhDB@A`vMtj_Hh 2.19 -Ho|D`JyxcIIEFeDecnjZ`@`@XBfEJz[|a` 2.19 -Hg}H@HP\ddRJTrUL]uUR@D@CBXpje]N~P` 2.19 -Hg|LA@kTfnRfYgW[iN`jBbP@XTPsi|Q[@ 2.19 -Hg}HADH@zIRYeYwIcnjfB@`@X]prng_Hp 2.19 -Hg~@`IBHRYWVUicn@B`@@@XRBXUKiwrN@ 2.19 -Ho|H@GrRQQEJQN[j``jH@FBiaTpkiorI@ 2.19 -HcNL`EaLBDrRRqIYCKT@E@@pDDrfxUyF` 2.19 -JoCD@A|eTrjr^wU@tDT@A`nESCJ{[|a@ 2.19 -Hk]@`FLHaIe[mZ{S`BJjH@XRBYWCJ{rC@ 2.19 -Hg}@`FLHaIe[m^ntx@bjh`AaHIe\LkoHl 2.19 -Ho}L@EN]_IIEYEEBSnjjfZX@XMBXRgrA@ 2.19 -Hk~@@JrRQQIFHUgYNjjjjh@XGBXUMprnf 2.19 -Ho}L@C^moIIEFeEEC^jZjYh@XLfDwCqC\ 2.19 -Hk]@@@YJUueRkSjj`@`@XKBXUCJz_DA` 2.19 -HmNHB@TIrRQQPuazZjjj`AaLIaTwCOHT 2.19 -Hg]L@ItUoIIEXhiciuUSML@LFaLJ]yE@ 2.19 -Hg}@@@UJfUWegZ`hHj@A`jXUMpsi|bp 2.19 -Hkm@@@kIHbdhdmNjj@@@FBpfDprngrJ@ 2.19 -HmvL`EaLBDrRRqIXYZ`@`@X\BYS\OHT 2.19 -Hko@@@q\dTRbqThP`hj`@XBaTpsi|c` 2.19 -Hk]@@@UJfUW~V]jB`b`@XRfES\L{rC@ 2.19 -HcND@M@\dTRRbOKPPTP@LASJ[ae^HV` 2.19 -Hk^@@@Ri_YVftzjh@H@FBpfEPrngrF@ 2.19 -Hcm@@@UJfUWyYvhJBH@FDiaTwCN|aP 2.19 -HigDPLXXP@b`cIHUDnEZfd@XIe\PN@ 2.19 -Hev@B@B\ddTTKCtuUUT@LAaLJfx^QH 2.19 -Hg\H@@RYegUvvj```@FDyS\Jz]|QI@ 2.19 -HknH@FAIfUWaVhHHh@FFaFES\Lz_HT 2.19 -Hg\H@NrRQRqZIRmTDAT@CCdpf{SyE` 2.19 -HcLL@@RlbbTLRRzuUUT@LNinFUwbXP 2.19 -HkmL@FFnOIIEEDlqvjYjf@FAXpsqBT 2.19 -HcM@@@gIEDdTiS@PUT@C@TrfxUwdD 2.19 -HcNH@McIIEXdmJuT@D@CCdpfxYyF` 2.19 -HcND@E@TfUvzf`@jh@FD`fEWCN|aP 2.19 -HklH@NrRQRqZJUj``J@AarXS]i|aP 2.19 -HcO@@@rTie_ZnBBJh@F@hUMpkoHp 2.19 -HcOH@DKPRYYUYujAB@@XLeMpsrE@ 2.19 -HmtH`ABHRYWUih@Jh@FC@fEW\RU@ 2.19 -HeW@`FFZBLddTjWCUST`C@dpjyD` 2.19 -HmtL@@Pdf{eYUjjj`AaqTwCJ|QL@ 2.19 -HmvD@AADfyW^Ejjj`AaQTwSsDqP 2.19 -Hcw@@Hx\ddRLTeUSU@CBXSBxYWP 2.19 -HmtD@@EIe]nf`@j`@XBBXU\J|bP 2.19 -KAxPPUD`dadataddeRjj`CBFyA@ 2.19 -HeVD@AADfyWxVjjh@XDUMwLSI@ 2.19 -HeVH@BAIUeQfjjj@F@`fTwCOH` 2.19 -HeT@`@qDfUuih@J`@XLBXUCqNd 2.19 -HeU@@@yJeWzzjjj@FGPfESCqNd 2.19 -HmwH@DIPRYYWeVhD@@FEISCOHx 2.19 -HmvH@DAIe[VUZh@@@X]eMproHP 2.19 -Hie@`FF`cIIEJnFjfd@XDfEWHx 2.19 -HeVH@FAIfUqfhH@@FGAFEWCqFd 2.19 -HeTD@@qI[eQejjj@FGXUMpsqHP 2.19 -HmTL@Fy\ddUfRjijPAaTIaCrI@ 2.19 -HiT`@@pjRfUj[a@`h`A`gCqDX 2.19 -Hid`@@pjRfUjXBB`@XIp|QF@ 2.19 -HaDH@@RYm[jjj@FC@aTw\RL@ 2.19 -HaEH@LXDeYVzje`A`REW\PH@ 2.19 -HieH@BxDivWajjV@FAYSCqHP 2.19 -HiF@@HrRQVJjj`AatIaTw\`P 2.19 -HidH@HRjuVFjjh@XMBYSCqBx 2.19 -HiDD@F{IIEYjjZ@FAPfErA@ 2.19 -HieD@FFnRjYfFjYh@^EaLH 2.19 -HaED@DHNRY[Jfjf@GaIaL 2.19 -KAxH@MvRRJrjf@LBaLKd\ 2.19 -sGPdE`DSpRYVj@XXF|d@ 2.19 -sNq@JeTuUPCBkFod` 2.19 -qCbHHAD|DeZ@pPwI@ 2.19 -sFxHB@aJUqiZ@XHSbU@ 2.19 -QMPARVAaWDP 2.19 -sJX@@eSU@LEEqX` 2.19 -sOq@@eLm]UT@ptMyef 2.18 -sOpHADILkW@@@LBEcqU` 2.18 -qC`P@HRfhCAC\TP 2.18 -sFx@@eRfuU@LCD[rX 2.17 -j`q@`@HRRjyeUSk^j`B@@@@FFhTYpRmFl{wDDd 2.17 -qCh@CIKTA`hnHX 2.16 -sOt@AdiWqZZ`FAbMyF 2.15 -sGX`LDdsmT@pVOIP 2.15 -sJX`LDdru@LInP` 2.15 -HieL@DpFEIeYkfjY`A`bYrN@ 2.15 -sGP`@dfui`FFVOIP 2.15 -HeVD`La@BLddlRPrm@@@C@j[axfR 2.15 -sNu@DpdjkUPC@hu|Tp 2.14 -sGX@@eJuT@pLVODJ 2.14 -Hid@@DjU^nBBH@FGPfEWCrF@ 2.14 -HeT@pHdDdLdLddlRPsU@@@CCJ[nHL` 2.14 -Hkld`LKmePBLdTQTRbrjYffh@XDBD_Ht 2.13 -HcLB@HZ]rRQJJqCMUUUP@pELJfxUyF` 2.13 -HcOD`LKiT@cIEDUDeeTsMM@C@`Pmy@` 2.13 -HmtL@HZ\ddRblFZjjj@FGIaTwKrA@ 2.13 -HeWH`LKa@HrQQEIYULsT@LBABgdL 2.13 -HaGDAHK`RISdfyVyjZPAaE\Pf@ 2.13 -KA|@@@eRkUU@FCPfES\c` 2.13 -sGX@AddQjhA`Xm^P` 2.13 -sJQhHl@bOV`FBq@ 2.13 -Hif@@@RfU~F``@@XLfDwCq@h 2.13 -QMPARZAaWDP 2.13 -sJX@@eOU@LMEnHD 2.13 -HieH@DxDee]nZjj@FAXUMqHD 2.12 -sNxDLHaqBRjuU@LFHcWrX 2.12 -sNz@@mVdssTpCCAWbs@ 2.12 -qCsAPKR]rSM@^Q@ 2.12 -sGQ@@drmJ@pRwDZ 2.12 -qCp@AJZ`LHnXS@ 2.12 -HcnLbLe]@HwldTRaRa]SUUTmH@ppHSbEP 2.11 -Hk^LbLWS@HOdiem^KjZjjiZPAa`PgDHP 2.11 -HcNL@ICNrQQSRjTMUUUP@pfDJfxUwdX 2.11 -HmvD@ACdiewjZjjj`A`LXUMtkrD@ 2.11 -Hif@@@RUe^Fh@@@X]BES\OH@ 2.11 -qCh@BISLAyhl 2.11 -Ho~LpBtwBlFlVlrJJJZISUi``hfd@FA@JgqBl 2.1 -Hg\LpEvpkAkCkDfYfYVf@bai@A`PCi|Si@ 2.1 -Hg\h@De]CHeDeMDcimU@PP@LFcFE[yA@ 2.1 -HcL`@@rirQQSRiUpPQU@@pkFx]xdj 2.1 -HcLh@DxYCHdeEDcJmPDD@CBhqawdH 2.1 -HeT`@@rirQQSRupPQP@LBqnGdR 2.1 -sGY@BDeVj`FAbux`P 2.1 -sNq@@dr{UPCCHwbs@ 2.1 -HaDH@@Rfu[j@@@FFIe\pfx 2.1 -QM`AIXFE\Q@ 2.1 -sJQ@@dju@LEcqQ@ 2.1 -HcLD@@QIeVuWVj`@@AaqMprn|c@ 2.09 -HeTD@@EIe]jZ@Bh@FG@fEWCrI@ 2.09 -HeVH@DAImeQej@@@FCYS\L|a@ 2.09 -sNx`LDdskUPCAX|UX 2.09 -Hg}LbFM]n@c^rRQJEJITpsUUTtt@LFaLJayA` 2.09 -Hk^LbFWS`HwlddRaRfiafjjif`AaTIaUrA@ 2.09 -QMPBchGfR 2.09 -sGYALMJRmUPCBbHwdp 2.08 -RF`EFCqH 2.08 -Hig@@@rdifznBBH@FFXw\`P 2.07 -HaG@@@rdifzxHH@AafMwHH 2.07 -sJT@@TeZhAaaEqX` 2.07 -HeTH`ABPRYWZf`@f@A`RXU\bP 2.07 -qCq@XIIf`LInQ@ 2.07 -HmtD@@QIn[VUZh@@@X\fTwCOHT 2.06 -HifH@DAInUxV`@@A`aUpd[a@ 2.06 -sJX`LDdru@LH^S@ 2.06 -HaF@`NBHRYWih@H@FE@fEWHx 2.06 -HeL`@@JfRiUfnXVfjjjh@XMBYpr 2.06 -HeU@@@{IHddUWUUUP@pZDpjGbMH 2.06 -HeTH@@RfV\YhH`@AaRDpsqJx 2.05 -sJU@E`djt`LHnJD 2.05 -sJPH@DISUPCCCGbb@ 2.05 -HifH@DAInUxV`@@Aaa\OLRf@ 2.04 -HcLL@@PTfye]]ZhH@@F@yS\LkoHP 2.04 -HieH@FDDfUfnjjj@FGAATwCqDp 2.04 -sKXHB@aJWFe`FBDxe` 2.04 -HmvD@E@TfUvzZ@Bj@AapHU\L|SE@ 2.03 -HaD@@DjWZXHB@AaTXS]rD@ 2.03 -sJX@@eMU@LMEnHD 2.03 -HaDH@@RVU[f@@@FBXWBbfx 2.03 -QMhHchFD|h 2.02 -Hg^``NeSlHaIe][Zf`@ii`@XRBXU]JgrK@ 2.02 -Hkl``NeSBHRYWVvf`@ii@AaHIaUtj_Ht 2.02 -Hmw@`NePbDfUujZ@Bf@AapIaUt|aP 2.02 -HeU@`NdHaIe]ZZ@Bd@FG@fEWSrA@ 2.02 -HidH@@RYm^Fh@@@XMaTwCq@` 2.02 -sOpHADILkW@@@LJEc^Q` 2.02 -sOx@@eJqh@P@pLQoHp 2.01 -Hg|@@LdbRbtJUB]aAP@@@CCXSBhYWSod\ 2.01 -sGY@DDfUj`FDWMcP 2.01 -jdy``@J@BdlsOJkbezKMUPTBH@C@QJLUjsh|q@w` 1.99 -jhiP`@DD@iIf[eW\cK^Zj`XHh@A`kGARtZsoAy@` 1.99 -jhi``@F@PdwLsvoIW`mMUPPB@@pEQgMFlxOLHex 1.99 -j`qa@@J@RVYgm\Tg^YjjB@P@F@bTXkQk^yb@g@ 1.99 -Hg]HpBOPkAkEkLbbbfbT[SAAQM@@phAT{xaR 1.99 -Hg}D`LFD@HrRPjJIYLNvmPTDP@LFrnFUyfgX 1.99 -Hg~L`LaC@HrRPqQYI]NvmTBDP@LFXUt{yE@ 1.99 -j`a`P@D@ejrSKZrkbTu@DUT@@pXbcCN}rA@ 1.99 -Hg~@@@rQQQUQIUqwSMP@P@LA@fzUv~YeF 1.99 -HkmH@JXLdRRbbQtzjB`@@XCF\Lki|a@ 1.99 -HclD@@kIEEKDeeKmUP@P@LNcNFUwbHP 1.99 -HkmL@FFnOIIEEEBqvjYjf@FAXpsqBT 1.99 -HknD@EADfVU}eVjjjh@X\UMpsoDpp 1.99 -HcLH`ABHRYWYzZ@Bj`@X\BXURoD{P 1.99 -HcLH@@rIQQQHkkTE@@@pxj[iW^YBB 1.99 -Hg^L@DB]RY[VWEVh@bh@FEISG_DIP 1.99 -Hg^L@DBSRY[VwEVh@bh@FEIS[_DHP 1.99 -HcND@EADfVU~UZjjj@FCES\L|SM@ 1.99 -HmtH`ABHRYWYih@Jh@FC@fET|Se@ 1.99 -HmLD@@qJY{WJeZj@B@A`rMproDb` 1.99 -HmM@@@qJWYWBeVf@B@AaVMpssHQP 1.99 -HkmH@DhDfUnYTvj@b@@X\fCJz_Hh 1.99 -HcML@DpFEIeY~kfjYj`A`RYJ|Sm@ 1.99 -HeTH`ABHRYWZf`@j@A`pIaUODxP 1.99 -HmvH@AAJYUgehHJ@@XBfES]J|`P 1.99 -HmvD@JADeUeYUjjj`AavDwCJ|b@ 1.99 -HmtH@@RYeUEZ```@F@aaTwBoDbP 1.99 -HcND@DBTfVulUZ`BH@FAIS[sBEP 1.99 -HcND@DATfVutYZ`@h@FAIS[sBxP 1.99 -HeULBDpFGNRYV^nZif`AaB\Si@ 1.99 -HeVH@FAIe]ZZjjj@FG@fEWCqHd 1.99 -HmtH@@RVYWeVhH@@FCTwCJ|rDH 1.99 -HeVD@J@TiWUJjjjh@XMBXS]rI@ 1.99 -HmtD@@QIee^UZjjh@XLULLkqLx 1.99 -HifH@FAIe]ijjj`A`pIaUwD`P 1.99 -HifD@J@TiWTjjjj@FCPfDw\`P 1.99 -HeTD@@QIemQejjj@FETwCODp` 1.99 -HaFH@FAIe^fjjh@XTBXU\RN@ 1.99 -HidD@@QInUxVjj`AaQTwCqDp 1.99 -HaFH@FAIe^fjjh@XMBXU]r@@ 1.99 -HifH@NAJ[W[jjj`A`tXULOHP 1.99 -HifH@NAIYW[fjj`AaVESCqHP 1.99 -HiFH@LAIYVjjh@XBBXUMp|b@ 1.99 -HaF@@@Ri][jjj@FCPaTw\c@ 1.99 -KA|P@TBTkuUT@XUFDw\a@ 1.99 -KA|@@@eSKUU@FCPfDw\b` 1.99 -sNqdEbOBABUVmU@LMJ~P` 1.99 -sOy@FDfUkjj`FEBqoEF 1.99 -sNx@AdbbMUPCAbXu|b@ 1.99 -sNy@LDeVjj@XTXu|TP 1.99 -sNq`IVeUuTpCCXod` 1.99 -sGY@DDfyj`FBVxcP 1.99 -HeUH@DDDf[WxVjjh@XDUMwDrP 1.99 -KA|@`XDQtPdkOUU@FCABDw\b` 1.99 -HieH@DDDf[WaZjj@FAES]qLD 1.99 -sKTHLPDIRxtl@p`xh` 1.99 -qC`P@HRfhCBCfbp 1.98 -sJU@DPdvu@OLlP 1.98 -HieH`B[`BDiWWBiYj@FFA@|QJ@ 1.97 -HeTL@@pTifwkjjjh@X]BESCODs` 1.97 -HidD@@[IEDiZzjjh@XMFESCqDx 1.97 -sJP`@dfvdAaEqX` 1.97 -sGY@DDfuj`FBQxmP 1.96 -sGX@AddQjhAahcqZ` 1.96 -sJQ@@dsU@LDCsQX 1.96 -qCh@CIKTA``nJX 1.95 -HiDB@@SaR[Ufjf@FAIeCrB@ 1.95 -Joc@HCADRDILkZvm]Jv|@QP@D@AaHIeSivHX 1.94 -sFt@AdigUjXA`d^KT 1.94 -sFt@@Ti_FVhAaIsKT 1.94 -Hg~@@@RiU~Ukcnjj`@`@X[BXUMJz]|c` 1.94 -HcND@IADfyW[aZ@Bh@FCES\n|a@ 1.94 -HeTD@@QIgeQej@@@FEYS\OHd 1.94 -HklL@@kldTtTRQEZBHb`@XTcCN|`p 1.94 -HmtD@@iJ[eWihHH`@XDaCODYP 1.94 -HidH@@Rfuvz`@`@XXeMsLHP 1.94 -HeUD@NdBRYgeajjj`A`HPeMpsqLH 1.93 -sGX@@eSUT@pLVOIP 1.93 -Hg}LbLGSl@b~rQQJIIFEuMUUUKR@LBBDKbCH 1.92 -JoBaQFBivxAE|eLlzmeuMUUTsL`AaPPaCqJt 1.92 -Hk]LbLE]L@`~RfV]xnijjjei@FAABEqJD 1.92 -j`aA@@GYIHhbeHfiVj``jJ@@XJQ`eFBdkQnP| 1.92 -sNqLKIARFdLddjjj@XP|c@ 1.92 -sJP@DiVhAaaCqK@ 1.92 -qCb@AIj`LHNZK@ 1.92 -sGQhHl@cIIBmPCBGdh 1.91 -sJP`@dfvdA`enP` 1.91 -sJU@DPdvt`OLlP 1.9 -HmuD`LVD@HrRRqIXYV`@`@XES\ODqP 1.9 -HmtD@@yIYe^UZ``@@XBaTwCJ|b@ 1.9 -HieH@LDDeYWajjj@FGABES]rA@ 1.9 -HeUH@LDDeYWxZjjh@X\DHUMwHd 1.9 -qCp@AJZ`LINXK@ 1.9 -Hk]H`AdpbDfUmUiev@Bfd`AaPIe[qND 1.88 -HaED@dpFChdi[dfUjzjjPA`bUqLx 1.88 -sGY@LDeUj`FFQoEL 1.88 -sJ\@@bdks@OEb 1.88 -Hk^@@@rQQIFIJftpHH@@@FDieLLki|`` 1.88 -HieDPLZD@HhHrREQKaVii@FAYWCr@@ 1.88 -HcLD@@QIn[WeVj@B@AarYS\L|cP 1.88 -HaDH@@RVU[fjj@FEXUMwDa@ 1.88 -sNx@AddTMUPCBqXwdX 1.88 -sGX`LDdwMT@pQoH` 1.88 -HaDH@@Rfu[j@@@FFIS\sBx 1.88 -sJX@@eSU@LINYX` 1.88 -sGY`hEiNyIgZhAaCrT 1.87 -Hid@@DjU^nBBH@FGPaTwCrL@ 1.87 -QMB@HRZAyd` 1.87 -HcND@MADfVU~UZ``H@FCESCN|c` 1.86 -HidD@@EIe]ih@J@A`pIaTOHx 1.86 -KA|PD@pSddbljj`CAhSBknPp 1.86 -sNxA@IrRQVjhAaXlWrT 1.86 -sNqhHl@cIICej`FBMyF 1.86 -HeTD@@iJ[e^f```@FAHPsqFx 1.86 -sGX@@eLuT@pHfoDb 1.85 -HmtD@@gIELeDVz`@j@A`RYr|Pa@ 1.85 -sJQ@IGuPCAQ\VH 1.85 -sOt@AdieuZf`FBQxjp 1.84 -HidH@@Rfufz`@`@XXf]sBXP 1.84 -sJX@IGuPCCKGd` 1.84 -qCr@XISTAaEqS@ 1.83 -sJP`@TfVhA`d^S@ 1.83 -HidH@@RYm^Fh@@@XLDES]qLD 1.83 -HcLL@@kdinYTUhHbH@FEHpsoHT 1.83 -qCb@AIZ`LDmqB@ 1.82 -sJY@LDeZhAa`mqP` 1.82 -sJXHLHaIVj@XXQ\VH 1.81 -Hid@`@qDfUvf`@h@FE@fEWDxP 1.8 -HeTD@@EIe]jZ@Bh@FC@aUp|SI@ 1.8 -JoBD@@IKLrjzv[mP@@@@@XZeMprng[|b@ 1.8 -HidD@@QInUxV`@@AaB\hj[a@ 1.8 -sNq`IVeUuTpCAQ|VH 1.8 -HidL@@pTifvnjjj@FCPaTp|SN@ 1.8 -sJQ@@dsU@LMEnHD 1.8 -qCp@BOTAyhl 1.8 -Hmu@pBXJpZqZqIf[oi`bH`@XX@ksBZP 1.79 -HcND@DBdeVyU]Zj@@@FGHU\LksHsP 1.79 -HmvH@LAIUYVUZX@@@XLc\LkqHH 1.79 -HaF@B@B\ddRK]UUP@pZDrf{dD 1.79 -sOxA@IRi^njj@XNKFod@ 1.79 -sFx@@eJfuU@LCL[qA@ 1.79 -sGU@E`djmL@pROEJ 1.79 -Ho~DPJHPbDbDf{VyVwjZj@@@FBaBUpkiwqF\ 1.79 -HkmL`LVDL@cIIKDedaeZ@Bd@FETwBoDsP 1.79 -HmuL@ATBYIf[oijjjh@XRDIe\LkqBX 1.79 -HmvD@EADfVuqej@B@AaUMpkrB@ 1.79 -sGQ`@ZdrmT@prMyL 1.79 -HaD@`@bDfYVz@`@AaPXS]rJ@ 1.78 -sJX@@eKU@LEEsCD 1.78 -sFx@@eJf`@@LCEkrD 1.77 -qCp@AJZ`LDEqS@ 1.77 -sJT@@TeZhAahmq@` 1.77 -jhiQ`@FBisvRRJJJKEYBLxMTsAPI@@LIDXJRmV\D 1.76 -jhiQ@@DT@drsJsNku`mUAQED@@ptcCIJtZsoAyB` 1.76 -j`q``@ERuddbRRbnRXk`jjjYjj@AaJBLDxHug\ax 1.76 -j`qP@@@BRfUWyWdg^hHH`@@@FA`HpRcNBtZsnHex 1.76 -jhya@@J@RfV]YwIQUoAjTH@@H@@XJYrRmFl{p^PP 1.76 -j`a`@@@YIEChhhdW^jjhJ@@@XV`cAJBdkQkN}rC@ 1.76 -j`ia@@D@RYYYU\cMNmyjh@@@@@FDd\EIVcV]qFO@ 1.76 -j`q`@@@YIEDdcDef\]zjjhHB@@XN`cAJLyIVcV]x 1.76 -jhiQ`@DD@hJSLwJnyFV|uU@pPp@C@VNBehuo\PQp 1.76 -jhi@`@H^RjyV}}EjsjjjB@j@@XF`cANBdkQkAyA` 1.76 -j`qP@@@\RiUwYVgG^jjf`@`@FFhHpRcMFl{wDBd 1.76 -j`qa@@D@RYfv]TgK^ZjhHH`@FBbTxJRmFm{bLN@ 1.76 -j`q@`@@TRfYW{TRg^hJB@@@@FFdXIpRmFl{wHL@ 1.76 -jdy``@G\DeTsJn~j\[uTCTEEP@C@vBTYIVcV|FH 1.76 -j`qP@@@LRe]UYTeG^@Bj`@@@FAhHpQgAZMYwnPd 1.76 -j`qP@@@\RiUwYVgG^jjj`@`@FFhHpRcMFl{wDBd 1.76 -j`aq@@DV\CHheEDcddkSTE@UP@C@rBTYpTeFl{p 1.76 -j`q@`@HNRju^uu`cVjjh@J`@FFhHqQ`iJt[wHD@ 1.76 -jhi@`@@HR[fuvUdkpVj@B@@@@XZQagARMYw`|aP 1.76 -jhi@`@@HRYyWVUEKpVh@Ijh`@XJqQgAFl{p^PT 1.76 -j`qQ`@DXArRSLmJlD{sUSL@D@@pihug^ycEA@ 1.76 -j`aA`@HLyddbTLrRbMzjfBB`@AaKAARUhug\ax 1.76 -JoBfPCRio@QddbQRRtuMpuUULuP@X]FEWS_DQp 1.76 -j`qA`@@HddwJzroAN|t@E@@@@LAHISQkN}qCN@ 1.76 -j`q@`@@HR[YWYTTg^Z`@`@@@FBdTYpVcV]{dL@ 1.76 -j`aQ@@DZ@dwLjsrkMTDEE@@LMHhs`iJMYwnPp 1.76 -JoB`@@CddRRJTRU][uUU@A@@X[BXU\ng[|Qa@ 1.76 -Hg^BpLaCl@chcPcIIKEEeiJkPPDh@LJqnE^Qh 1.76 -jhq``@I@BeLljrrIUADQUT@@pT`eF\tZso\`D 1.76 -j`aa@@C@RYegU{Ufj``b`@FFlTYpTeZl{wHH@ 1.76 -JoC@A@ANRQQIUQIDuoUUL@D@AalIeMrz]oq@D 1.76 -Ho}L`L^DL@cIIChdliiUZ`@j`@XSaMpsiwrG@ 1.76 -JoB`@DgddbbRRQpgmuPUAE@@XJfES\J{_Dep 1.76 -Job@@FRRJJEIKXRv[uP@@A@@FFyS\LkivHH 1.76 -Hg@PBWPbAbLbbbRfaSR]pPLUQ@CBPqae]Np 1.76 -JoBB@D[ddfbRbJwC[uUTBA@@X[BXWCJg[|a` 1.76 -Hg]L`EnDpHSIIKDeddLmP@UP@LEALinE]OdV 1.76 -jhqQ@@DT@drlsLjXKUAQEP@@ptc@iJtZsoA@ 1.76 -JoBp@@XUMNRJJIESIUunADT@@@AaqMJz]|ap 1.76 -j`aa@@I@RfVUYXRjBHbj`@FBdDhsfcV]{dE@ 1.76 -JgCFAD`esJSOJrhrn{[UUUUT@F@eS\Jz_DrP 1.76 -Hg}@@IOIIEDddbI{]TEPQ@@pULJfxUv~II` 1.76 -JoBDPD@DIWLrjzv[mP@@@@@XZeMprng[|`@ 1.76 -JoCB@BsnRRIIJJyLoCUUSMU@A`LIa\IwrG@ 1.76 -JoB`P@vDPdrnlktqw@AUUQ@A`hIaUJz[|c` 1.76 -JoCd@bDpAtRdsLm{euoUTpPD@Aaprng[|a` 1.76 -HcNDpLa@BJbFbLddLTJRzmT@@@LFinFUyF` 1.76 -HmnDBJAZgIDeDdXPjzZjjjh@XCBXS\L|Re@ 1.76 -Hk~LBAACFTeYVUxYUSZjjjj@F@xUMtkoD`P 1.76 -Ho~B`LaK\@cIICEBeeEuZh@I`@XUprk|Rf@ 1.76 -HctNPDpfFUCpkprRQRVSSUST@LFpfzUyF` 1.76 -JoB`@@NeRk|kuqwUUP@T@AalIaTtkiorN@ 1.76 -JoB@P@QBSLjsnNv}HP@@@@FD`U\Lj]|sM\ 1.76 -JoB@P@QBRsLjnmf|t@@@@@FDaS\Lki|rK\ 1.76 -Ho~L@C`YrRSIFYIRfjjfjj@FDpfTr{[|`` 1.76 -HknL`EaLBDrRRqIYHYZ`@j@AaHIeMpkoHL 1.76 -HklDPNGX`xcIIDcEeHRjifj@FGPfDvgrE@ 1.76 -Hg^L@MAirJIJHsIUt@QUT@CAPSFxYW[yA` 1.76 -JoBd@BNBRsLjnmf{TEAQD@FBeS\LkiwqH\ 1.76 -JoB`@@ReRkkZuuoUUT@D@A`\IaTwKivHd 1.76 -JoBd@BNBSKLjnmf{TEAQD@FFhUMprng_H\ 1.76 -Hg^B`LaCl@cIIBidliJkT@Dp@LJ[af~Ie@ 1.76 -Hg^D`La@BLddLTVRVvmTDD@@pznFUt~Hu` 1.76 -Hg~@@@rRJIJqIMqwUUP@P@LMaLIne]N~QP 1.76 -JoC`@@QrTvnljwV|uUP@P@FDxULng[|QA@ 1.76 -Hg]L`LnDD@cIIBhhd]ikTC@P@LFqnW[yD` 1.76 -HcoL`DphWP|LddtTSeMpmUUMP@phj[ayF` 1.76 -JoBD@DIU\k^x{[uUTDA@@X[BXWCJz]|Qg@ 1.76 -Hg~H@KAIfYU^Svz`hJH`A`XXUMprng_H` 1.76 -JoBf@BXCBdrlJuunuSL@D@AarXng[|c` 1.76 -Hg~D@Eg\ddRRTUsKpuUTsU@CChSBxSyE` 1.76 -Ho~H`CDHaIe]gVih@Jjj@A`hIaUJ{[|c` 1.76 -Hk\H@HrRSIFIJftzjh@H@FBpfTprngrB@ 1.76 -Hg~H@DCHhhieBdWG[UU@A@@pDjFUt{xf\ 1.76 -JoCD@B@dsMl{eunuUPPD@AaIUprivDsP 1.76 -JoBf@BXCBdrlJuunuSL@D@AaRz]osDs` 1.76 -HcLDPNEXcXcIIDcDYBUULu@CChSBY]y@` 1.76 -Hg}@@@yJe}YVfNzjj@B@A`lHUMJz]|SN@ 1.76 -JoBD@@ISLk^x{[tE@@@@@XJfEprivD[P 1.76 -Hk^@@@rQQIFIJftzjh@H@FFaBYSCJz_HH 1.76 -Hg|@@DjYV}~T{jjjjj@FEaBXS\LkiwrJ@ 1.76 -HknD`La@BLddJbRRTujBB@@X]S\LkoDpp 1.76 -Hk^@@@rRIHjIHjtzjh@H@FBpaTprngrL@ 1.76 -Hg@@@adjuueZX{jjh@H@FDiaUJz]|RN@ 1.76 -HclLA@iTfnrQQQQEMt{PUAB@CBbFUwdL 1.76 -HmTNPDpfFUCpkprRQRVRZjZ@FEXSRoHx 1.76 -Hg}@@@yJeWe^nNzjhHB@AaLIaTLz_DVp 1.76 -HcL@p@bBBAbDfYVyi``hh@FGAaMpsqEt 1.76 -Hg|H@HRjymUV}NjB`hH@X[FTwCJz]|`` 1.76 -Hg~H@DAIenUTfvvj``b@A`IMprnwsDpp 1.76 -Hg~@@@Ri_VUicnjj`@`@X[BES]Jz]|c@ 1.76 -HknB`LaML@cIIKDeeAeZ@BX@FETwB_Hp 1.76 -Hg]H@DlLbbTTRNRzuAPE@@peBinFUOdV 1.76 -HknL@MAirJIJHsJn`BJj@AaHIc\LkoHL 1.76 -Hg]L@FFnoIIEEDl\NuSMTl@LFqaeSyA@ 1.76 -Hg]H@FlDfYU^QVhHHj@AahQaTwCNgrK@ 1.76 -Hg}@@@UJfUWegZ`hHj@AaJXS\Lz_Djp 1.76 -HmOD`DphTOCIIMEDz[aZjjZ@FEES\OHd 1.76 -Hg|H@HRju^uXSnjj`@`@XKBYSCJz_DJp 1.76 -JoB@@BULjo{rsl@@@U@@FBiaTwCNwqC\ 1.76 -Hk\LA@kTfnRfYgUndzBhJD@FEDLz_HT 1.76 -Hk]@@@yJeWmZ{Sjj`@`@XSBXUCJ{qNL 1.76 -Hk^D@Eg\ddRRTUY^FjjfZ`A`tIa\OHL 1.76 -Hmt@p@bBBAbDfYVvfBBb@A`pXSCODyP 1.76 -Hg|H@@RYWVUicn@BZjH@XRfETkiwq@x 1.76 -Hk\H@@RYfUVSWZ`hJB@FFaaTwCJz_H` 1.76 -HmL@P@BNBDigy\jUiffi@F@`fUproHH 1.76 -Hk^H@DAIenUr[SZjB@`@X\S\Jz_LSI@ 1.76 -Ho}@@@UIYeV^d~hHJJ@A`iTwCNg[|a@ 1.76 -HmtHPAfHVHrRQHiRDjjVh@X]BXURoHX 1.76 -HcNL@MAirJIJHsUt@QU@@pDDqnFUyF` 1.76 -Hk^@@@Re]YTjtzjh@H@FFpfESCJz_H@ 1.76 -Ho}H@DhDfUefWWZhHb`@FDi`rng[|b` 1.76 -Hk]@@@UJfUW~V]jB`b`@XBfDwCN|Rc@ 1.76 -HeNHBJBiReYVDJnfjjjh@X]BXS\ODjP 1.76 -Hg|L@@RdfV^Urh{Zj``H@FGEpsiwqLT 1.76 -Hkn@`ECDRYWUZf`@jj@AaHIaTLz_Hx 1.76 -Hkn@`EBHRYWUZf`@jj@AaHIaTLz_Hx 1.76 -Hk\@@DjU^ukmLHDjh`AaLHUCJz_Ds` 1.76 -Ho~B@NAK]IenWVeVijjfPA`Q\I|Qg@ 1.76 -HcMD`LvD@HrRRqIYCJt@E@@p{J[aWP 1.76 -HknD@IBdifW^EZB`b`@XRfDwBngrJ@ 1.76 -Hcm@@@UJfUWyYvhJBH@F@iaMpsoDiP 1.76 -Hg^H@EAIYeUz]Z``b`@XRUMpsiwqHP 1.76 -HclL@@RlbbTLRQTnmU@A@@pkae]xfD 1.76 -Hk\L@@RdfV^uJmMjj@B@A`qCJz_Ds` 1.76 -Hk\H@@RfYU\]Tz@@@@@FGXWCJ{sJXp 1.76 -HknH@DCHheEDceujB`H@F@hUMproHL 1.76 -HknD@E@TfUvyih@Jj`@XJBXU\LkoHL 1.76 -HeWDbLihP@cNrREQICJt@@@LLxYy@@ 1.76 -Hmt@P@bABDfUuZZ@Bj@AapIaUp|RU@ 1.76 -HmuD`LVD@HrRRqIXYV`@`@XUeMp|aP 1.76 -HknH@FAIfYWyuhJBH@FDxU\Lki|a` 1.76 -HcnD@EgTjeUeexZjjYh@XMBXWCrE@ 1.76 -Ho~H@FAIfYV}dv`hJJ@AanEWCJz]n 1.76 -HcnH@DAIenuIeujh@H@FCEprn|qLX 1.76 -HmtL@@Z\bbRbLkh@bh@FG@fMpsrE@ 1.76 -HcNH@DCHheEDbnmPT@@C@TJfxYWdZ 1.76 -HeWD`LihP@cIHUDdLkP@@@psNGbAH 1.76 -HkmL@DpFEIeY}ZyjfZj@FEIbz_DzP 1.76 -HcMH@DDDfyWWaZjjj@FGHUMtkqLt 1.76 -Hmt@`@bDfUujZ@Bj@A`HIaUtkrA@ 1.76 -HcvL@Hz]rRQQMSUUTt@LFSBimyB` 1.76 -HknD@FADfy^Utvix@@@XTLki|QJ@ 1.76 -HcND@NALbbTtRLjuMUR@LBKawbMH 1.76 -Hg^L@NAKRY[eueVijje@FAEpgqFt 1.76 -HcN@@@Re]eUvjh@@@XRDXWCJ{qDh 1.76 -Hid@PNbAbLddUTaJjZ`A`tXU\OHP 1.76 -HcNH@AAJYU^zZBBJ@A`NES]J{rD@ 1.76 -HcN@@HrRQJqIKmUP@@@pVDpjxYWP 1.76 -HiWH`DphCpRjyj[aZjj`A`UMp|`` 1.76 -Hmv@@@rRHjIJUjh@@@X]BXwCODIP 1.76 -HcNH@IaJkU~XZjjj`AaLIeMpkoHH 1.76 -HknH@EAJ[WUfz`@jh@F@iaTtz_HD 1.76 -Hmt@@LddTQVeZhH@@F@iaTwCOHT 1.76 -HmuH@DDDfyW^Ejjj`A`rES]ODqP 1.76 -HaeH`Dr@|DjybinZjj@FAES]r@@ 1.76 -HieH@DhDeVWaZjj@FCIaMp|RJ@ 1.76 -HmtH@@RYWUih@Jh@FG@fETkqND 1.76 -HeUH@DDDfyWxVjjh@XTaTw\SI@ 1.76 -Hif@`ABHRYWZZ@B`@XLBXU]rA@ 1.76 -Hid@`@bDeYWaf@@@FE@UMwLaA@ 1.76 -HeTD@@QImYQejjj@FGXUMpsrD@ 1.76 -HcNH@JAIY^UWVg`@@AaWCJ{qHH 1.76 -HmtD@@QIevVUZjjh@X]eMproHH 1.76 -HeVD@AADfyWxVjjh@XTUMt|QL@ 1.76 -Hmt@@DjUgjDHJJ@A`LHULLkqLx 1.76 -HmvD@D@dfueYUj`@@A`vMproHP 1.76 -Hmv@@HrRSFIJUjh@@@XSBXS\Lj 1.76 -HmtD@@QIn[VUZh@@@XLfMpsqJT 1.76 -Hie@@@EJe}ijjj`AaTHU]sLXP 1.76 -HaE@@@{IHhbSUUT@LJaBinIg@ 1.76 -Hif@@@rQQIFf@`h@FEIeMwDHP 1.76 -HieH@DDDfyWaZjj@FEHUMwDpP 1.76 -HefD@Hz\ddTSUUUH@piLJfy@` 1.76 -HaF@B@B\ddRK]UUP@pZDpj[d\ 1.76 -HeVH@DAIemQej@@@FAIPssB[` 1.76 -HieH@JDDiWTjjjj@FCPfDw\`P 1.76 -Haf@@@RYfJfzjjh@X]BXUMwH@ 1.76 -HaDH`F@HRf^rjYj@FE@fTwDK` 1.76 -HaE@@@yJUtjjjh@XUBXS\pJx 1.76 -sNqlHlOBqCbLddlZj@XEZodH 1.76 -HeV@@@RUYTYy`@@AaUMpsqDp 1.76 -HeTD@@iJ[e^f```@FEHS]OHD 1.76 -sGPBAbJPLaYAInjhA`aNS@ 1.76 -KA|P@QrUSMUT@XTfES\c` 1.76 -KA|P@XBRlkUT@XTaTw\b@ 1.76 -sNxA@IrRJFjhAaXl[qA` 1.76 -sFuHEhOAJnMZj@XHwbF@ 1.76 -sNy@BDeVjj@XVKU|`@ 1.76 -sFq@@drfuU@LBl[qB@ 1.76 -sFq@@drfuU@LKEc^P@ 1.76 -sGPhH`DYIHUj@XKWdH 1.76 -sFt@@TiTt@@A`i^IX 1.76 -sFt@ADiTt@@A`c^IX 1.76 -sJY@LDejhAahcqC@ 1.76 -sGY@DDeYj`FAVMyH 1.76 -sGR@@cTe[f`GbM@ 1.76 -HeTD@@qI[eQej@@@FGIeMpsrH@ 1.76 -HifH@AAJ[W[j@B@A`VES\QA@ 1.76 -QMhHRYAxb 1.76 -sJY@BDizhA`inID 1.76 -HeTD@@EJ[Uvz`@h@FAIgSqBh 1.75 -HidH@@RYm^Fh@@@XMATwCq@p 1.75 -sNp`@dfVZj@XJobq@ 1.75 -HkmHpBXpkIkMkDfYemyXHbbP@XDASoLXU@ 1.74 -HidL@@sdifzajjj@FCPaTw\SA@ 1.74 -HaDD@@yJY^fjjh@XUFEW\QF@ 1.74 -HaDD@@YJYZnjjh@XUFES\QN@ 1.74 -sJQ@@dkU@LLL^JH 1.74 -qCp@AJZ`LDmqB@ 1.74 -HeTH@@ReyTYj`@@AaTTwCsDrP 1.74 -HaF@@@RYe[hB@@FAXS]q@h 1.73 -HaDH@@Rfu[j@@@FFIg\pjX 1.73 -HgD@L[`QIeyUTYNvjZ`@@A`vEr{_HL 1.72 -Hcm@`FtHaIe[UkiV@@@`@FC@fTJ|cP 1.72 -HcoH@DJ`RUeUVy]ZZ`@@AaRTL{qHT 1.72 -Hk^H@IAJ[VuVzUh@JZH@XTfDq|P]@ 1.72 -Hk^H@IAJ[VvvzUh@JZH@XTfDq|R]@ 1.72 -Hg~H@IAJ[VvUneZ@Bfh`AaRXSWqML 1.72 -Hew@@@pldTTJVTLmP@P@LBqngbDH 1.72 -HcnH@IAJ[Vw[iV`@ib@FEIaMoDFP 1.72 -HmN@@@rRJJYDfeZ`XB@A`U\L|sFT 1.72 -Hev@@@rQQQHyPsPLA@@pHfx^XER 1.72 -HmN@@@RfYWraV`XH`@XDS\OLBU@ 1.72 -Hcn@@@RifurZ]jA`b@A`U\L|sEt 1.72 -HaDH`NBDRYWih@H@FAIa]q@h 1.72 -sOt@@tigujj`FEbqoDF 1.72 -Hid@P@bAbDfY]n`HH@FEAa\OHh 1.72 -HeVH@LAI[eQej@@@FGIeMpsrH@ 1.72 -HaDH@@RVU[jjj@FG@fES]rH@ 1.72 -HeTH@@ReyTYj`@@A`tTwCODS@ 1.72 -QM`BN`^YH 1.72 -HmNH@NAJ[VUnFZjjj`A`LXULLkrD@ 1.71 -HevH@FAIeYZ[ajjjh@XCBXU\L|`@ 1.71 -HeTB@@pYRf[^njjj`AatHUMt|SA@ 1.71 -HidL@@X\dTRekjjj`A`tXU\ODQ` 1.71 -HeVD@IADfyWxV`@`@XDUMwDRP 1.71 -HieD@DDNRYWbijih@XDfEWHD 1.71 -sGPYHlPDGlddJu@LIP 1.71 -sGXA@IRjZj@XFKWdH 1.71 -sJY@LDeZhA`Pl^R@ 1.71 -sGU@DPdsmR@pbxmP 1.7 -JoC@@@ITskNx{[uA@@@@@XZaUprng[|c@ 1.7 -Hg~@@@RfUYwySn``@@@@XZfDwCJz]|`@ 1.7 -HcLHpEbPRPrPrRRqIYCMT@E@@pJfx^Qh 1.7 -HmtHpEbPRPrPrRRqIXYj`@`@XES\OHT 1.7 -HeVD`La@BLddlRPrm@@@CBlinGdR 1.7 -sNplJyDJHtQddeeUPCAqXu` 1.7 -qCr@XIJrAyhl 1.7 -qCa@CIJtA`enR@ 1.7 -HaE@@@aJyUnh@@@XUaTw\PH@ 1.7 -JoBBPDH@QddabbRRrv[kP@@@@@XCS\Lki|Rw@ 1.7 -sNx`BDdw[UPCCKObM@ 1.69 -Job@@FRQQIIEI\Lk[dDaP@@@FBiaMpz]orJ@ 1.68 -HcMB@NTLgTify^ajjjj@FBpaTwCJ{rL@ 1.68 -Hmv@pBBlFlVlRYeYZXHJH@FAApksLJP 1.68 -HmuL@AdFUJYY^njjjh@XSFES\LkrD@ 1.68 -HifD@ACLdTTqkjjj`A`tHS\ODr` 1.68 -HeV@@@rRHqICMT@@@LNaJ[agdX 1.68 -HmvD@DATf^Uqej@B@A`rYS\OHT 1.68 -HeTH@@RfUWihHH@AarXS\L|b` 1.68 -Hie@@@EJeWkjjj`A`tIaTwDxP 1.68 -HaFH@NCIEDcSUUT@LJ`j[nHf@ 1.68 -HeVH@DAIemQej@@@FFIS\HnFP 1.68 -HaG@@@qdig|ijj`A`RXU\Qn@ 1.68 -sNx@@eLmUPCBbXwbS@ 1.68 -sNx@@eRmUPCBqFodp 1.68 -sGQHLHaI[ihA`aNHt 1.68 -sJX@@dkS@LMD^HX 1.68 -sJX@@eSU@LDcqS@ 1.68 -qCp@AJv`LHnJX 1.68 -qCp@AJZ`LDMqQ@ 1.68 -sGX@@eJuT@pHfODj 1.67 -HaF@@@RVU[f@@@FEXUMwDB@ 1.67 -qCb@AIj`LHnXS@ 1.67 -sGY@DDf]j`FDWMcP 1.67 -HmuL@DpFEIeY~nZifh@XHf\siT 1.66 -QMPBchFD\Y@ 1.66 -HaD@`@dDfUzZ@B@A`RXU\c` 1.66 -qCp@BOTAaIqK@ 1.66 -HidH`ABPRYWZZ@BP@XDfEWHx 1.65 -qCpB@ReMPFFbwH@ 1.65 -sJP@DiZhAaaMqH` 1.65 -RFDEYFCBNT 1.65 -sJY@DDfvhA`l^Q@ 1.64 -QMbDBDf`XUqD 1.64 -sGU@EPdjmT@prqxiP 1.64 -HeVH@IAIe]ZZ@Bh@FC@fEW\PY@ 1.64 -Hif@@@rRJEKaj@@@FEES\ODS@ 1.64 -sOpH@DILkW@@@LBcWqC@ 1.64 -qCp@AIj`LEEqC@ 1.64 -HifL@ABnReYrZjjh@XMaTwCqHP 1.63 -HmtD@@yIYe^UZ`P@@XLeLLkqHH 1.63 -JoCFP`s[aH]L|drmlTr{@AUTp`A`RUk|SA@ 1.62 -HcnHaAdICigdfUmffWX@JjD@XXe[sLEP 1.62 -HeUH@DhDeVYzVjjh@XLfDwSqHD 1.62 -HeVD@DAdfygFV``@@XYSSsDxP 1.62 -HifH@BAIfUXXHH@AaPXUMqND 1.62 -HieH@JXDefWaXB@@FFEp|RF@ 1.62 -HaF@@@Rig[jjj@FCPfDw\b` 1.62 -HaE@@@qJYZfZjh@XDeMwHH 1.62 -sF|HLZ@aJYuif@XP\RH 1.62 -sOt@AdiVMZj`FAQkyH 1.62 -sGY@LDenj`FEDQoI` 1.62 -sGX@@eJuT@phfMyD 1.62 -qCx@AYIV`LDEqS@ 1.62 -HeVD@IADfyWxV`@`@XTUMt|a@ 1.62 -sFt@@TiTt@@AaikrH 1.62 -qCr@HIJtA`enR@ 1.62 -sGQ`@jdvmT@pruyB 1.62 -sOx@@eSI]UT@pLQ_Ej 1.62 -sGY@BDfZj`FADQxmP 1.62 -sJY@BDfZhAaaCqK@ 1.62 -sGQ@@dkMT@pVOMEP 1.62 -sJQ@@drt`LHnKD 1.62 -j`qP@@@\RiUuyVgG^jjf`@`@FAhHpRcAZMYwnPd 1.61 -JoB`@@\eRk{JuuoUUL@D@A`\IaTpkivHx 1.61 -HmvDPLa@BEbLddlRVFUh@H@FETwBoHp 1.61 -HcLB`HQ]@HrRFIKJ\Jp@S@@phj[my@@ 1.61 -HmuDbLVD@HslddlRVFUh@H@FETwBoHp 1.61 -Hg\D@@QIme]XYZ`@j`@XReMpkiwrL@ 1.61 -HcL@@LdbRVbM\DDUP@LIaLJfF]yB` 1.61 -HeVB@FCAeJYyzzjjj@FGPUMpsqDp 1.61 -HcLH@ErRQRiYCMT@E@@pYLinGbEh 1.61 -Hie@B@xIrRQHynjjj@FCPfES\`P 1.61 -HeTL`HS@BLddlRPrm@@@CAlinFP 1.61 -HaE@B@xIrRQHmuUU@CAhSBinQp 1.61 -HmtH@@Rfuv[j@Bh@FCXUMJ|QA@ 1.61 -Hid@`@bDfUvf`@h@FC@fEP|c` 1.61 -sNyDJQDJHR[nihA`QE^Q` 1.61 -sNx@@dlwUPCCZobQ@ 1.61 -sNp@Di]jj@XLSFodP 1.61 -sGXA@IRjZj@XYZ|TH 1.61 -sGP@Divj`FABMxi` 1.61 -sJT@@TfZhAahmq@` 1.61 -HmtL@@JTfYwfzB@j@AapXU\L|aP 1.61 -HedF@@PfFTf{nZjf@FCIaTt` 1.61 -sJX@@eSU@LECqK@ 1.61 -j`q``@D@]dTTtTRVJXKUfjA`bh@AaSdeZ}qFC@ 1.6 -jhia`@D@]yIYfU}VgEFZ`XHih@A`q`iJtGbHV@ 1.6 -JoCB@@a^QIQQQHkLNfuHTAT@A`r]JfD`P 1.6 -JoCB@BA^QJJJIKEUrfu@pQT@AaSCJoqHt 1.6 -JoCB@BA^QQSQQHyLNfuPLAT@AaWRnoqLD 1.6 -Hg~D@D@|bTTTRNU\nmPLAT@CBfFUobQp 1.6 -JoCB@B@zRsLkWJ[TCADp@FELLkoL`{@ 1.6 -Hk^H@DCHhihhdVGSZhF@`@XEtkoLpS@ 1.6 -Hk^H@ACHdhhhdVGSZdJ@`@XTgRi|rAt 1.6 -HcnH@DCHeEEDcWKkTC@P@LBXYWfQv` 1.6 -HmtHPABHVHRYeY[hBBh@FCAaUr|PY@ 1.6 -HcLHPABHVHRYeYvz@`j`@XLFEWKqIt 1.6 -Hk^H@DAIYfUzySZ`XH`@XDproLcS@ 1.6 -Hg~H@DAIfye]avvjA`b@A`WRn|sCl 1.6 -HeWDAHHPRISdfygXVijd@XIW\Qi@ 1.6 -HigDAHK`RISdfyUnZfi@FBTOHH 1.6 -HigDAHHPRISdfyeaZfi@FDUqFx 1.6 -sNy@LDeUjj@XTKF|TX 1.6 -sOt@@Ti]qej`FBeyef 1.6 -sF|@AbeLzmU@LLm^P` 1.6 -sGY@DDeUj`FFQoEL 1.6 -Hif@@@RUe^Gh@@@XTUMp|a@ 1.6 -HcND@DCTeUe^UZh@H@FGHS\L{qHp 1.6 -sOy@DDeekZj`FFu_EB 1.6 -sJP`@dfzhA`inXH` 1.6 -HmuH@LDDeYW^Fjjj`A`HPaTwSrE@ 1.59 -sJU@DPdru@LHnKD 1.59 -sJY@HDizXAyeb 1.59 -qCpPXQBRu@XXQ\f@ 1.59 -sJQ@@dsU@LLL^JH 1.59 -sJX@@eSU@LLl^R@ 1.59 -qCb@AIV`LDmrP 1.59 -qCaPQ@Hck@XS\`@ 1.59 -sGP`@dfyj`FBMxe` 1.59 -QM`AIhFE\Q@ 1.59 -sOx@@eLm]UT@pXbu_HP 1.58 -HcND@LCTeme^UZh@H@FGHS\L{qHp 1.58 -HaDH@@Rfu[j@@@FFYS\qBx 1.58 -HgD`LFyt@aJYYlfkjjjYjPA`pPaC_Lkc@ 1.57 -HmN@`FBHRYVukiV@@@@@XLBYPkrI@ 1.57 -HeVL@ICARf[^njjj`A`LHUMpsrL@ 1.57 -HifD@AAldTRekjjj`AatXUMp|a@ 1.57 -Hid@P@qFqDfUfn`BH@FA@fMqND 1.57 -HiTH@@RfU|kahDB@A`QMp|QJ@ 1.57 -HieD@DDFR[fVEijX@XQwDR` 1.57 -HaFD@NBdefZyfi`AaC\RB@ 1.57 -sFy@HDi[FehAaKqX` 1.57 -sJT@AdizhAa`mqP` 1.57 -sGQ@@djmT@pvMxh` 1.57 -sF|@AjeKxmM@LEMqJ` 1.57 -sGT@A\dbMU@LCEcrT 1.57 -sJP@DizhAa`cqS@ 1.57 -HifD@D@TefUnZjf@FAXS]qHh 1.57 -sNpP@btf{Zj@XEXodh 1.57 -sKT@Adi\Vf@XS\tQ@ 1.57 -sFx@@eRfuU@LMC^IX 1.57 -qCp@AIZ`LEEqC@ 1.57 -sGQ@@dkUT@plVMy@ 1.56 -HiDJ@@PnEInvZjX@XDfDOHh 1.56 -HifH@DAIVUxV`@@AaQTwCqHP 1.56 -sJQ@@eMU@LEMqH` 1.56 -HidL@@p\dTTqkjjj`A`tHS\ODr` 1.55 -HidD@@EIe]ih@J@AaPHUCqLx 1.55 -sBP@H|UT@ppbyL 1.55 -sGXHLHaIVjhAaaEqF` 1.54 -HiDJ@@PfEIn{Zjh@XLfESCrN@ 1.54 -KAxH@TvRRJNjZ@LLSByG@ 1.54 -HeTL@@JTfYw[hHB`@XLFEWSrA@ 1.53 -HeVH@DAIgeQej@@@FCIeMp|bP 1.53 -qCj@KAIV`LHnJX 1.53 -sOy@JDiWMjj`FAbqyF 1.53 -j`qPB@AVAHILkkJ{QakP@UUUD@CBRLDiIVcNxcg` 1.52 -JoB`P@vD`drnlktqw@AUUQ@A`JXURngqN\ 1.52 -Hg}@`AlIAIe]YVfNx@Jjh`A`JXURngqNl 1.52 -sNxA@IRfZjhA`xlZ~P@ 1.52 -sGY@DDf]j`FBMxe` 1.52 -HidH@@Rfuvz`@`@XYeMsDHP 1.52 -HifH@AAIYW[f@B@AaVESCrH@ 1.52 -HidH@@RfU~F``@@XLfDwCrJ@ 1.52 -QMJHBHvAaOH@ 1.52 -QMB@HRZAaOD` 1.52 -sGY@DDeej`FBexlP 1.51 -sJY@DDeVhA`h^IX 1.51 -HidH@@Rfuvz`@`@XXfMsBhP 1.51 -HaF@@@Rfu[j@@@FEXUMwDA@ 1.51 -HaFH@LAIYfnZjh@XDaUwDa` 1.5 -sOy@LDeekZj`FAQkxi` 1.5 -HaDH@@Rfu[j@@@FFIc\pjx 1.5 -HeTD`HP@cIHXdmpk@A@@pHj[nHD` 1.5 -QM`BN`XUqD 1.5 -HiV@@@Rifzyajjj`AatIaTw\`P 1.49 -sJXA@IRij`FFVODH 1.49 -sGX@@eLuT@pLVODJ 1.49 -j`iP@@@PRfUUg_EIF]zZb@@@@@FBbLEIVcV]{dD@ 1.48 -j`qaB@MBADILklmkQcoP@UP@@@CAPDXISakN}rB` 1.48 -JocDP`rDatsvQQISJJVTr{[p@UUTL@FCIVg[|SE@ 1.48 -j`i@B@@ABTsLjotyJvgT@P@aP@@pd@cARUhunH]x 1.48 -jdy``@J@BdlsOJkbezKMUPTBH@C@QJLUYwh|qCQ` 1.48 -j`qA@@@YHheEdXdaR]z`bB@@@@XZPQgARtZso\aP 1.48 -j`aaB@HB]DYIHkECDeK^jjf@H@@XZ`cAJ\Ujso@ 1.48 -jhqa`@M@IIIf]{eYgHHBjjh@A`xFBTxJRmFl{pP 1.48 -Ho~HHNnIAICIAXcIIKEEhcIvjBBJ`@XLwKiwrG@ 1.48 -j`qP@@@XRfV]{V`g^BBb`@@@FFdDhs`mFl{wHJ@ 1.48 -j`qQ@@JV@eMrsooEFmPPTUTP@LEHHs`iJtYwH^@ 1.48 -Hg]DqNm]bPRPrPz]{IIKEDheIuPPLP@LLXSyE` 1.48 -j`qa@@J@RVYgm\Tg^YjjB@P@F@bTXhug^yb@m@ 1.48 -HcMDpnd]bPRPrPZQyYwlddlRbLkUMUT@LDj^Qp 1.48 -Hg^HHNnIAICIAXcIIKEEhcNuPPQP@LJ[ev~PX 1.48 -JobD@@ILsJr|wif}PTEPe@AaXXUMprng[|b@ 1.48 -Joc@@@YHhhheEcrsYoPAA@B@@XJS\LkivH@ 1.48 -Hg\HpMbPRPrPrRRqIPsCMT@ET@CCjXYt{yB` 1.48 -JgB@P@AFRJJJIIFad}n`@`@`@C@PIne]ObCX 1.48 -JoBD@@YHihdcDepv}@PP@@@FBeS\Jz]orD@ 1.48 -JoCDPBbDPdrnwJtuo@AT@@@A`hIaUvg[|`P 1.48 -j`a`P@A@P{rSKKOkJtuMUUL`@phS`iVxag` 1.48 -Job@P@ABTsLjoWS^oPA@BD@@XBALLkm|Pw@ 1.48 -HgH@HyVrRQJIWIUtkUSUUT@LApjxYt~IE` 1.48 -Hko@PITpbNbLbbbTURXXBHZP@XBFTwBi|cP 1.48 -Hg\LpINxdDdLdLddlRTJ`kU@DS@@pJfF~QH 1.48 -JoB`@@YdbbTVLRUC[aAQ@@@@XJaTpkivHx 1.48 -Hk~@@HrRQQIFHUgYNjjjjh@XJfEWCJz_HX 1.48 -Hg]DpBX{BlFlVlRYf{~zXHbJX@FA@JwqBX 1.48 -Hcl@P@BABLdTRafQTnuKLuH@pDDJae]yG@ 1.48 -JoBdP@sXQBSJvlkSJ\@EMSD@FC@fUi|Sg@ 1.48 -HknHpINIAICICIIKDeMaVj@Hd@FATLkqFt 1.48 -HknHpCjIAICICIIJeEDmNjhB@@FADJ{rI@ 1.48 -Hg^HpCjIAICICIIJeEDiiuU@PP@LBHUwdV 1.48 -HcN@HNbPRPrPVHrRRqQZSmTDD@@pInW^QH 1.48 -HklDpMNIAICICIIKDeeAfj@BX@FATwGrA@ 1.48 -Hg\DpINIAICICIIKDeMhJuPADp@LBiaodJ 1.48 -Hk\d@dpSAPzIZUyIfYoVgSjjifh@XEWZX 1.48 -Hg|H@@rJJIHqIMqw@PP@@@LEpj[iWSod@ 1.48 -Hg~D@DClbbTTTjSB]mUL@D@C@TXYWSodX 1.48 -Hg^H@ACIEDdhlYrtDEEP@LMSBinFUt~QX 1.48 -Hk_H@HyVrRQJIWJneZjZjj@FGXU\L{qHL 1.48 -Ho~L@M@iRYg^ufzB@jj`@XZFEWCNg[|aP 1.48 -JoBd@EVBTwKNrg]AAQUD@FDhS\Lki|ap 1.48 -Hg~@@@rQQQUQIUqwSMP@P@LA@fz]N~YeJ 1.48 -JoCD@B@drsJkkYnu@@@@@AaJUprng_DYp 1.48 -Ho}L@FFnoIIEEEB\avjYjih@X]cCJfHH 1.48 -HedBJHSBCpzHFHfHKlddqTcUUP@pkJxY@ 1.48 -Hc^@@HRjU^^dUGZjjjj@FBiaTwCJ{rH@ 1.48 -HcmH`FeXBLddRJRUMpuUUKP@pjLJnxbZ 1.48 -HknH@ACIEDdhl^V``hh@FBiaTwCJgrM@ 1.48 -Hg|@@LddTjTrPr]uP@@@@C@TpjXUOb[X 1.48 -Hg|@@LddTjRRPr]uP@@@@C@Tpjy]ObMX 1.48 -Hg}H`AfpbDfUmYZYS`@ijR@FE@fT_D{P 1.48 -HcoH@HyVrRQJIWUtkUSUU@CAlJnF^IF` 1.48 -Hg}H@JlDinV]~T{hHJJb@FDhS\Lki|bp 1.48 -Hg}@@@qJYWyVnNp`b@@@A`jES]Jz]|c@ 1.48 -HedDpJZHaHcHcIIKEiUUT@LNaLInGdR 1.48 -HkmD@AvnrRQQsQKSjfje`AarXSRi|c` 1.48 -HmvDPLa@BNbLddlTVeUhH@@FEXwBoHd 1.48 -Hg|H@@RYfUWd}mh@@@@@XRUMpriwrM@ 1.48 -HmOH@HyVrRQJIVneZjZj`A`vEWCODaP 1.48 -Hmv@pIbPRPrPrRRqIPUj`B@@XYPkqFd 1.48 -Hmu@PITHchcHhheEVF@bF@A`pYS\OHT 1.48 -HmtHpIbPRPrPrRRqIPUj`B@@XYSCqIT 1.48 -HkmL@FFnOIIEEDlqvjYjf@FEXproHH 1.48 -HiDDpJZHaHcHcIIKEjjj@FCPfDp|c` 1.48 -HknD@AALbbTRbqWVijjd@XTWCI|Qe@ 1.48 -Ho~L@AAGRYYY}UujZjjT@XTWCM|Qc@ 1.48 -HmMHADp@zIRYeuIiVjh@@@XUgCJ|b` 1.48 -Hg]L@DpFEIeY~^nZifjh@X\fRng_Hx 1.48 -HeuHADp@zIRYUTjFZj@@@FEHwCOHp 1.48 -HklH@@RYWY^f`@jj@A`hIaUpki|bP 1.48 -Hcm@@@qJUvUpeuih@H@F@pa\LkoHh 1.48 -HcND@JCTeUe^UZjjj@F@iaMpsoDaP 1.48 -HcLD@NwIIDcDbpuUUS@C@XSBiagdJ 1.48 -HcMH@NVlddTZbR{UMTl@LFSBF]yC@ 1.48 -HcmH@DhDfUe]aWVjA@`@XTf]J|P]@ 1.48 -HcNH@IAIfUWEZ``b@A`lXUMprn|`@ 1.48 -HcNH`IDHaIe]mih@Ij@AapIaUJ|cP 1.48 -HcMD@FFnrRQQQ]LMTsUP@pKIW^XSB 1.48 -HcmH@DhDfUe]aWVjA@`@XDgRoLp]@ 1.48 -HmwH@Dp`RYyUeVjjj@FGIS\LkrL@ 1.48 -HmvD@E@TfUvzZ@Bj@A`HIaUpsrE@ 1.48 -HmvH`IDHaIe]nf`@f`@XLBXUSrE@ 1.48 -HetH@@RYnWaFZjjZ@F@`aTwCODc@ 1.48 -HcLD@@QInYWWVjB@@A`JYS\LkrM@ 1.48 -Hmt@`@bDfUuZZ@Bj@AapIaUp|RU@ 1.48 -HiDLpB[`bDbJ|Dfunff`A`PI`|b` 1.48 -HcND@LADf]YU]Zj@@@FGXWCJ{rJ@ 1.48 -HeV@PIBHzHRYeea`Ha@A`pYS\OHd 1.48 -HcND@EADfVU~UZjjj@FGES\L{rL@ 1.48 -HmuH@DDDeYW^Ejjj`AarXUMt|RE@ 1.48 -HeVD`La@BLddlRPrm@@@C@linx`r 1.48 -Hct`@JF]rRQRzKUUSV@LFaLJfyD` 1.48 -HcML@DpFEIeY}kfjYj`A`RXn|Si@ 1.48 -HmLD@@yIYe^neVdHB@A`SCJ|RB@ 1.48 -HmUDB@UiB\ddUbtjji`AatIaUr` 1.48 -Hmv@@@RYvUeZj@@@FDpfDwCJ|`@ 1.48 -HeTH@NrRQHqLMUUT@LAaLJfF^Qp 1.48 -Hmv@@@RgVUeZj@@@FDaBXwCJ|`` 1.48 -HmvH@NAIYWUnZjjh@X\fESCODaP 1.48 -HmwH@DJPR[YWFVjjj@FCYS\J|a@ 1.48 -HeVDB@ZPgIIEXdLuUUP@pzDpjxP 1.48 -HmuD@DHNRY[]Jfjfj@FEXproDP` 1.48 -HmuD@DHNRY[]Jfjfj@FALLksDp` 1.48 -HeV@@@rRJIJmuUUT@LAaLInF^QP 1.48 -HiEL`LZDh@cIHULeij@FFXp|PN@ 1.48 -HmvD@DCdfVyyUjB@@A`RMr|pad 1.48 -HeUH@DpDeYUFVjjh@X\aTwCOH` 1.48 -HeUH@DHDfVuFVh@@@XLeMpsrB@ 1.48 -HmtH@@RYWYih@Jh@F@`fEWBoHd 1.48 -HeT@`@bDfUuih@J`@X\BXU\OHd 1.48 -HmVDB@FPgIIETijjih@X]BXULh 1.48 -Hef`@@SFyIeYfjZ`AapIeLL|c` 1.48 -HieH@DDDeYWaZjj@FCIaTw\RA@ 1.48 -HeUH@DDDeYWxVjjh@XLfES]qHd 1.48 -HeU@@@EJYU^f```@FG@fES]qAd 1.48 -HaD@P@bBbDfYvzB@@A`PDw\SJ@ 1.48 -HieH@DDDeYWaZjj@FEXUMwLaA@ 1.48 -HeUH@DDDeYWxVjjh@XUaTw\rDd 1.48 -HeVH@FAIfUqfhH@@F@aFEWCOHX 1.48 -HeVHB@XIrRQVICMUSR@LNaLKad 1.48 -HeUH@DdDf^UFVjjh@XTUMp|qLd 1.48 -HeUH@LDDeYWxVjjh@XLaTwSrH@ 1.48 -Heg@@JF\ddTneUTp@pZDpj[bCH 1.48 -HmW@@JE\ddTnRjjfpA`tIaTwHx 1.48 -Hif@@@rRIHhjjjj@FGPaTwCrL@ 1.48 -Hie@@@QIYUxVjj`AatXUMp|`@ 1.48 -HaEHADH@zIRYUJjij@FBMwDS@ 1.48 -HiFHB@DIrRQUJjjPA`tIaTwHx 1.48 -HiD`@@SFRYUfjZ@FG@fTwCrB@ 1.48 -Hif@`ABPRYWZZ@B`@XTfEW\`P 1.48 -HaF@`F@HRf_rjYj@FE@fEWD[` 1.48 -HiE@@JGIIEKjji@FCPfES\Sa@ 1.48 -HiE@@JGIIEKjjj@FCPfES\Sa@ 1.48 -HeUD@FFnRjYeajfZ`AaF\HfFP 1.48 -HeV@@@RYyTYj`@@AaHPfTwCH 1.48 -HifD@D@Tf[WaZjj@FAES]rL@ 1.48 -HaE@@@aJmUnjjh@XLfES]rH@ 1.48 -HieL@DpFEIeYkfjY`AaB\SN@ 1.48 -HiFH@HGIIEXjji@FCPfEW\a` 1.48 -HeT@@DjU]k``b`@XMBESCqLd 1.48 -HaF@@@ReU[jjj@FGPfES]r@@ 1.48 -Hif@@@Ri]^Fjjh@X]BES\OHp 1.48 -HaEH@HSlddRmMUTp@prLKbIP 1.48 -sNqBGIARFdKDYIIYUT@pQoHp 1.48 -HieH@DHDeYWaZ@@@FEIS\OH` 1.48 -HieD@DHNRY[Rijih@XPwBSBD 1.48 -HiEH@FzlddTZjfh@XTfDw\`P 1.48 -HaDH@@RVU[jjj@FCIaTw\PH@ 1.48 -KA|Y@]BX@QddarVj`CCBinQp 1.48 -HaE@@@yJe~fjjh@XMBXUMrN@ 1.48 -Hid@@LdbRQk``R@AaTHUCqLX 1.48 -HeT@@DjU]k``R`@XMBESSqLD 1.48 -HaF@@@rRIHeUUS@CAhSBinQp 1.48 -sNqBGIARFdKHYIIYUT@payF 1.48 -HiFH@JAIUfZjh@XUaMp|RD@ 1.48 -HaFD@DAdfUjyjf`AabYWHx 1.48 -KA|@@Uddbejj`CAhSBinQp 1.48 -KAzP@MuYIHhzih@pILInQp 1.48 -KAxH@UvRRJNjZ@LLSBxc\ 1.48 -sNyiKE`D[lddjVj@XP|UX 1.48 -sGPdE`DSpRYvj@XXF|Tp 1.48 -sGQLLIAREdDfvj`FDgHP 1.48 -sOpH@DISOkSK@LBEkqE` 1.48 -sKXDD@b^BRvKU@LLL^R@ 1.48 -sOxA@IRjVnjj@XVKU|a@ 1.48 -sOq@@drm]UT@phQkxi` 1.48 -sFxA@IRiSZj`FEbqoH@ 1.48 -sF|@@ldrfmU@LBl[r@ 1.48 -sGYHMQDIJmT`LLHnKD 1.48 -sN|@@ldssUPCBaFodp 1.48 -sGQhHlOAJmZhAaCqB` 1.48 -sNy@LDeVjj@XTKF|TX 1.48 -sGT@@deYj`FEBqoI@ 1.48 -sNx@JeTuUPCBqXodh 1.48 -sNy@GTjfjf@XYX|c@ 1.48 -sJR@@lTfVhAa`mrD 1.48 -sGY@DDf]j`FFQoI` 1.48 -qCbHXRBdDfj@pdyL 1.48 -sJ\@ABeOL`LECqK@ 1.48 -sGX@@eMuT@phbqyJ 1.48 -qCsCPKCevyIj`H 1.48 -HaDD@@{IEDcSUUT@LJ`j[nHf@ 1.48 -QMhDRZAaGFP 1.48 -HidH`ABHRYWZZ@BP@XTBXU\c` 1.48 -sFpH@DISNmLpC@aZ|a@ 1.48 -sGQ`@bdwMT@pROEj 1.48 -qC`P@HRZhCBSfBp 1.48 -qCr@XIKTA`hnHX 1.48 -qCp@AIj`LDmqB@ 1.48 -qCp@AJZ`LEMqA@ 1.48 -JoCb@BvxTeMrkk]IwPPP@P@AaRDporC@ 1.47 -HcNB@JciwIIMEeKruUUU@CBXSBiae^Qh 1.47 -Hk_H@NtpRfumUaWZ@@@`@FAIcGqBd 1.47 -Hk_H@IWPRfunUatz@@H@@FAIcKqBL 1.47 -HmVB@A@feIf[vjjj@FBaBXULLkrN@ 1.47 -HmwDAHHPRISdfyeVEjZjPAae]OHT 1.47 -HmvL@JciRjyvyZjjj@F@pfESCOHT 1.47 -HeWDAHHPRISdfyeXVijd@XIT|c` 1.47 -HmO@@@rdigmZZUB@@@@FFYp|qIT 1.47 -HeTB@HhYRjwUnjjj`A`tHS\ODrP 1.47 -HidL@HhTjmunjjj@FEPaLODs` 1.47 -HiFL@F@nRYgZjj@F@aBXS\OHh 1.47 -HaE@@@sIEDceMST@LLPfxe\ 1.47 -sNx`BJdrmUPCAbHu|f@ 1.47 -sOx@@eR}]UT@plqkyD 1.47 -sGY@JDinj`FFbwDZ 1.47 -sJY@DDeVhAaecrP 1.47 -Hg^L@M@iRYg^u[hHBjh@FBaaUprnwrC@ 1.47 -HidH`H@HRme^Eh@@@XTUMp|PD@ 1.47 -Hid@`@bDfUvf`@h@FC@fEW\`P 1.47 -sFt@AdiWEihAahcrT 1.46 -HaD@@DjUZxHH@AaTXU]qDX 1.46 -sJ\@@ldru@LDEqX` 1.45 -HeTH@@rQQQHcMAP@@LFpj[axbR 1.45 -Ho}BAHLDUxeNR[e]m^Eh@JjP@X\UMtj_Dvp 1.44 -HkmLAHLDVISdfyW[xV`@j`@XLUMtkqML 1.44 -JoBF@@HrS\srzLv{PPD@@@FGISZ]orE@ 1.44 -HcLDrITJsjsZq^RYefVF@bF`@XXG[qLD 1.44 -HkLNB@PfESSdf{n{Zjjj@FBxUMprnf 1.44 -HclH@@rJJIPiMr{@P@@@CA`XYW^Ie@ 1.44 -HcMD@DHMR[nUyUj`@`@X]aMpsoHP 1.44 -HeUD@BdARYgUnjjj`A`HPaTwSqLD 1.44 -Hif@PBBHzHRYgfFBB@@XTFMp|`` 1.44 -HeTL@@Z\bbRbM]@DT@CA`SFz^PH 1.44 -HmtL@@ZTieeqV`hH@A`rEproDi` 1.44 -Hmv@@@Ri^ueZj@@@F@pfMproHh 1.44 -HeU@@@yJeWZzjjZ@FCPfES\PY@ 1.44 -HeTD@NGIIDcCBUUMP@pJDpnHt` 1.44 -HeVH@NAIYWVyjjj@FCIaTp|RI@ 1.44 -HieH@BDDfY}njjj@FGABEWCqLX 1.44 -HmtH@@RfUWzZBBH@F@iaTwBoHd 1.44 -Hie@@@yJeWkjji`A`tIaTwDxP 1.44 -HidD@NGIIDcHRjih@XEBXWDXP 1.44 -HidH@@RUY^Ejjh@X\fES\OH` 1.44 -HidD@F{IIEYhRjfh@XYFEqDD 1.44 -HidD@@iJ[gxZB@@AaRDwCrJ@ 1.44 -HidH@@RfU~F``@@XMaTwCrD@ 1.44 -HaDH@NrRQHpeUS@C@hSBxeL 1.44 -HaDD@F{IIEYBUTt@LLcBxb\ 1.44 -sNyhMEPDYIBhmL@pfx`p 1.44 -sOq@GddblUUL@ptqxeP 1.44 -sFu@E`drfmU@LD[qK@ 1.44 -sKXA@IReqjhA`Xl^P@ 1.44 -sJY@DDeVhA`l^JH 1.44 -sGX`DJdjmT@prMxi` 1.44 -sFx@@eLzuU@LCEkq@` 1.44 -HidH@@RYm^Fh@@@XLATwCqHp 1.44 -Hg]HpBXpkIkMkDfYemnVBHhf@AaPENwqFT 1.43 -HknL@M@iRYg^un``Jj@AaHXU\LkoHL 1.43 -sGX`LDdrmT@pexlP 1.43 -HeT@@DjU^k``b`@XCBXU\L|a` 1.43 -HeTD@@iJ[e^f```@FAHSCqNd 1.43 -sFy@JDiTvjhA`Xl^R` 1.43 -qCp@AIZ`LMEnP@ 1.42 -HaFH@JAJUtjjjh@XUBXS\c` 1.42 -HaDH@@RYWih@H@FFHU\pLx 1.42 -HcNLAHAEbTyInUvxV`@j@A`qTwRoHt 1.41 -HiFDPJHPbDbDf{Vij`AaPPeCqFx 1.41 -HeTH@@RYe\YjB@@AatXU\L|PF@ 1.41 -HidH`BBHRYeVFBB@@XDFTOD[` 1.41 -HaDH`BBHRYg[hH@@FAAe]qBX 1.41 -HeTH@@RYm_aZ@B@AaQTwSrL@ 1.41 -sOp@DjUMjj`FCDVMyF 1.41 -sNx`DFdkKUPC@kE|Th 1.41 -Hif@@@RfU~F``@@XLFES]qDD 1.4 -sGP`@TeYj`FFVOEJ 1.4 -sNp`Jtjfjf@XYX|c@ 1.4 -sOq@@drm\@@@prMyaf 1.4 -HcNL@M@iRYg^vzB@j`@XBFEWCJ|cP 1.39 -HiU@@@iJYWrnFP`H@FAESCqDx 1.39 -KA|X@HC\dkJuU@FEIaMwDb` 1.39 -sJU@DPdju@LDmqP` 1.39 -qCr@PIWTAaEqS@ 1.39 -qC`@ISTAxQE` 1.39 -HcLHpMbPRPrPrRRqIPcMT@E@@pjfF]yB` 1.38 -Hk^D@IADf^UeFUujjjj`A`ITwBngrL@ 1.38 -HcnD@AADeYVWaeVjjjh@XCaTwRn|b@ 1.38 -HmtL@@Pdf{eYUj`@@AavDwCJ|a@ 1.38 -HmVDB@ZPgIIEXmJjjX@X]BXU\h 1.38 -HeTH@@RYWVf`@j@AapIaTL|c` 1.38 -sGQ@@dsuT@pHVOEJ 1.38 -sKX@@eKcUPCCSGbB@ 1.38 -qCb@AIj`LEEqC@ 1.38 -sFx@@eJfuU@LJIc^Q@ 1.37 -sGX@@eRuT@pLQoI` 1.37 -HeVB@ICFEJYyzzjjj@FGPUMpsqDp 1.36 -HeV@@@Re[TYj`@@AapES\L|RD@ 1.36 -HifH@JAJUuJjjj`A`tIaMwHD 1.36 -KAxD@@c\dvluS@FBXWDS` 1.36 -sGPa@erS\uPCB[bM@ 1.36 -qCqPZHAD]XCqC@ 1.36 -sGP`@TfZj`FADMxe` 1.35 -sJX@@eOU@LML^HH 1.35 -sNx@IddbmUPCBqXodh 1.34 -sGY@DDfyj`FBMxe` 1.34 -QMB@HchFD\Y@ 1.34 -sNq`@bdw[UPCCKGbk@ 1.33 -qCh@AIJtA``nJX 1.33 -Hif@@@RUe^Fh@@@XLaTwCq@` 1.33 -HkoBAHePPcbTyInUuVyjZfe@FAUpkrM@ 1.32 -HmvD@NADfVyyUjB@@A`SCJ|Pn@ 1.32 -HeUD@DpFRUVTYZZZPA`REt|RA@ 1.32 -sOx@@eRimUT@plqkyD 1.32 -sG]@EbDf]jPFBVyJ 1.32 -qCh@AIJtA`inHH 1.32 -qCh@BIWTA``nJX 1.32 -HeTD@@QImeQej@@@FEIS\ODrP 1.32 -sJQhHl@bOV`FDOI` 1.32 -HidD@@IIf][hHB@AaPXU]rA@ 1.32 -sOq@@drm\@@@prKyaj 1.32 -HmvD`Ia@BLdabRrxU`@h@FEES]ODAP 1.32 -HidH@@RfU~F``@@XTfDw\Ra@ 1.32 -qCr@XIJtAyhl 1.32 -HknDrBtpkAkEkCyIf[effBBbX@FF@J|Pi@ 1.31 -sJ]@EbDfVhA`enP` 1.31 -Hif@@@RfU~F``@@XLBXS]qJD 1.31 -HaD@P@bFbDfUjz@H@AaPIeMrN@ 1.31 -sJY@DDefhAaIqX` 1.31 -HaD@@DjUZxHH@AaTHU]qLX 1.31 -Hg|L@@QdfygUQd{ZB@@@@FGISKiwrN@ 1.3 -sGX@@eSUT@ptQxmP 1.3 -HeTD@@iIYe^e```@FAMpsqHH 1.3 -qC`P@HRVhCBKfDp 1.3 -sJU@DPdvu@LInID 1.3 -qCqPZH^D]hCsAX 1.28 -sNp`@df]Zj@XKWbK@ 1.28 -qCp@AJZ`LLHnS@ 1.28 -`Lg@^P 1.28 -QMhDRVAaOJ@ 1.28 -HaFD@DCdfUriji`A`RXU\a` 1.27 -sGX`JBdruT@pHaoDl 1.27 -sJX`LDdvu@LH^IX 1.27 -HidH@@RfU~F``@@XEc\OLPj@ 1.27 -sOt@AdigkB@@FAQkyL 1.27 -sGXhMD@cIHTmPCB[fAh 1.27 -RGDPDQ`|R@ 1.27 -qCb@AIj`LDEqS@ 1.27 -qC`@ISTA``nJX 1.27 -HidD@@GHhdhZZ@B`@XTBTp|SN@ 1.26 -Hg}H@DTDeUfUqT{ZjP`H@F@hWRng_Dc@ 1.26 -Hcm@@@uJYU_rnf`Pbh@FG@aMpsqEt 1.26 -HmtD@@iJ[eWihHH`@XTaLL|aP 1.26 -qCr@XIKTA`enHP 1.26 -HeTD@@iJ[g^F``H@FAHSCqJd 1.26 -HmtD@@iJ[eWihHH`@XDaLODeP 1.26 -qCr@HIJtAaIqK@ 1.26 -sOp@DjWkjj`FCDQkyL 1.26 -sJX@@eMU@LLInID 1.26 -sJXA@IczhA`hnKD 1.26 -qC`@IVtA`anJH 1.26 -QM`AIhFD|R@ 1.26 -sJY@DDfVhAaEqX` 1.26 -sKPH@DIRxtl@pHfOH` 1.25 -HaDD@@IIf]n``@@XTFES\c` 1.25 -HeT@pHdDdLdLddlRPsU@@@C@j[iy@` 1.25 -sGQ@@druT@pHaoDl 1.25 -QM`BN`XI\d 1.25 -QM`AIhFCOH@ 1.25 -QM`AIhGfR 1.24 -sJY@LDefhAaEsSD 1.23 -sJY@DDefhAyib 1.23 -sOpHADILkW@@@LJDZ~S@ 1.22 -HaD@@DjUZxHH@A`TIa\rfx 1.22 -sOpHADILkW@@@LLE^[E` 1.22 -HmvH@DAImYVUZh@@@XLS\LkqDp 1.22 -sOq@@drm\@@@pQoBEf 1.22 -qCr@HILtAaErX 1.22 -sJXhMD@bOV`Gbq@ 1.22 -qCp@BOTA`hnS@ 1.22 -HaD@@DjUZxHH@A`THU\sFx 1.22 -qCr@HILtAxe` 1.22 -HidH@@Rfufz`@`@XXfMsBxP 1.21 -HaF@@@Ri_ijjj@FEPaTwDs` 1.21 -sOx@@eJymUT@plVMx`p 1.21 -qC`P@HRZhCAK\P` 1.21 -sJY@DDeVhAaMsQD 1.21 -sOy@LDeekZj`FAVKxiP 1.2 -sJXA@IRij`FAbqy@ 1.2 -qCa@AIMTA`inHH 1.2 -HidH@@RfU~F``@@XUaMp|QJ@ 1.2 -sOr@AcTiek@`@GfQX 1.2 -HidD@@iIYgxVB@@AaQTwCrH@ 1.2 -HaFH@NAIYUnX@@@XEaTwH` 1.2 -sJQDBHaQBS]R@ppbyL 1.2 -sGX@AddQjhAah[qK@ 1.2 -HmvDAHAHeNR[e]xV`@h@FAES]qIT 1.19 -HmLD@@eIfUTfEV``R@A`U\J|c@ 1.19 -HeTH@@Rfuunh@J@AaRYSCqBd 1.19 -sGXA@IRijj@XFKGbE@ 1.19 -sJX@IGuPCCQ[dH 1.19 -sOp@DjWkB@@FAfKxeP 1.19 -RG@DXOD` 1.19 -sJY@BDfZhAahmq@` 1.18 -sGQ`@ldsmT@pQoI` 1.18 -sGQ@@dsuT@pHaoDl 1.18 -sJX@@eOU@LBIcrH 1.18 -HmvLAHAEbTyInUwaZ@B`@XTUMr|bP 1.18 -KAxUBPfEp^F\WYIIbfjd@pbnPp 1.18 -Hif@@@Rge^Fh@@@X]BES\OH@ 1.18 -HaF@B@BTjUZxHH@A`tIaUwHX 1.18 -qCh@CISTA``nJX 1.18 -sGU@E`dsmT@pROEj 1.18 -sKQ@@eKcUPCCSGdP 1.18 -qCr@PISRAxe` 1.18 -HknL`IaM@HrRFIKISaV@Bf@A`qTwR_H@ 1.18 -Hk^@@@RiU{Vntzjh@H@FBpfEPrngrN@ 1.18 -HifL@NBaReYrZjjh@XMaTwCqHP 1.18 -HcLD@@kIEMDdcttDDT@CAdIae^Qh 1.18 -sJY@LDejhAaaEqX` 1.18 -sNp`@df]Zj@XKGbk@ 1.18 -qC`@ISTAaAsQX 1.18 -Joba@FCBJzUSsZoSCiwUUTuMP@XTaR]|Rn@ 1.17 -HeTLB@QdyInYqehH@@FETwCH 1.17 -HaF@`FBHRYVkh@`@FE@fUwHX 1.17 -HifH@NAJ[VXZ@H@A`RXw\Pa@ 1.17 -HaE@@@qJYVnBB@@XTfEW\a` 1.17 -sFtHLPDISNmLpCCAWdH 1.17 -j`qaB@GBAHILkmroQegP@SUUD@CBRLDiIVcVyCp 1.17 -JoCDPCbD`drnwJtuo@AMUQ@AaJXURng_H\ 1.17 -HkoD`LDxP@cIIBhdmeuZ`PH@FGXwCJgrJ@ 1.17 -Hg]L`LnDD@cIIBhhd]ikTC@P@LF[iW[yF@ 1.17 -HmvDRLa@BJbL{IIBidiUZ`@@AaUMpsrE@ 1.17 -Hg^L@DAaRUf^uNvjj@@@FBiaTprngqHl 1.17 -JoBD@@ILvnroC[m@A@@@@XRUMrz]orL@ 1.17 -HoH@DVpRYYU]YujBBJ`@XJaTwCIvHT 1.17 -Ho}D@ElDRYYU]YujBBJ`@XRUMpr]orE@ 1.17 -HcOD`LWXP@cIIKDedLkP@R@C@j[axfZ 1.17 -HcND@FATfYev]jB``@FDaFEWCJ|Qm@ 1.17 -HcLD@NGIIDcDYBUULu@CChSBY]y@` 1.17 -HeTHPBBlzlRYgea``b@AaPXWCrI@ 1.17 -HmtH@ArRQHiRDjjVh@X]BXURoHX 1.17 -HeVH@IAIfu~Fh@H@FCAATw\SI@ 1.17 -HidH`ABHRYWZZ@B`@XLBXUCrN@ 1.17 -HeV@@@RYyTYj`@@A`HIeMpsrH@ 1.17 -HeTD@@qIUeQej@@@FCIS\L|b@ 1.17 -Hid@@LddUTaJjZ`A`tXU\OHP 1.17 -HaFH@BAIf]n``@@XDFTwDK` 1.17 -sNx@HeTuUPC@kU|a@ 1.17 -sKP@DjTZj@XDQGdp 1.17 -sGX@@eSUT@pJqoI@ 1.17 -QO@HyjA`erP 1.17 -HeTD@@QIemQej@@@FATwCqBd 1.17 -QM`AIdGfR 1.17 -RG@DXLJy@ 1.17 -j`qA@@@YHihhhdd]Nmzj@B@@@@XZ`s`iJtZso\`` 1.16 -j`qa@@F@RYV{m^gKN`BJ@B@@FB`HqSbmFm{dI@ 1.16 -JgB@P@AFRJJJIIFad}n`@`@`@CBPIne]N~PH 1.16 -Hg]DrBX{BlFlVlodfYnnfBHbf@Aa`BoDI` 1.16 -JoBD@@YEEEEDdbmf}P@P@@@FFqS\LkivH@ 1.16 -JoBP@@XUYHhhceDdwVxEAP@@@FCEWBn|p{\ 1.16 -Hg^HpBLJrZsZqIfVYYe``jI`@XT@sm|SE@ 1.16 -Hg|@@LdbbRLrSB]aDP@@@CATJfFUt{yF@ 1.16 -JoCD@C@drm|kuqw@DP@P@A`hIe]Jz[|a` 1.16 -Hg@@@qdigvU|kSZj`@h@FDiaTLkm|a` 1.16 -HkmD@ELDrJIQIIF]Z``b@AaqTwCI|aP 1.16 -HeWD`LjXP@cIHUDdLkP@@@pSFy`\H 1.16 -HmtD`NTHaIe]Vf`@jP@XLBXUCrI@ 1.16 -HeVD`La@BLddlRPrm@@@CCLj^XwB 1.16 -HcLD@@QIeeUgVhHH@AaqTwCN|aP 1.16 -HeTH`BBHRYeUa``b@A`PYP|Si@ 1.16 -HmvH@DAIge\YZ`@`@XLfTwCrE@ 1.16 -HeVD@DBTeYWxV`@`@XLaTwSrH@ 1.16 -HeUD@LdDRY[TYZjj`A`UMp|Pi@ 1.16 -HidH`BBHRYgVzB@`@XDFUwDHP 1.16 -HeTH@@RV[TYZ`@@A`qTwCODa@ 1.16 -Hid@@LddRL[jjj`AatIaUp|a` 1.16 -HeVD@FADfygFV``@@XEWCODQ` 1.16 -HeVH@IAJ[WVz`@h@FCIaTp|bP 1.16 -HiT@@DjUfa[``hH@X]BXULOHx 1.16 -HieD@LDDR[e^Ejjh@XDUMwDPP 1.16 -HidH@@RYm^Fh@@@XLDESCqLx 1.16 -HieH@DXDfyWaZ@@@FAEWCrD@ 1.16 -HaDH@HRjw[jjj@FCPfTw\`` 1.16 -HaF@@@RiUkjjj@FEPaTwDs` 1.16 -HaD@@DjWzZjj`A`pPaUwDq` 1.16 -KAxH@@bRjsUT@XUaTw\b@ 1.16 -sOq@@drm]UT@pXVM_I@ 1.16 -qChPK@HRUhCAA\Tp 1.16 -sJYiCE`D[h}Z@^P` 1.16 -sJX`LDdvu@LEcrH 1.16 -sGX@@dk]T@pvMyD 1.16 -sJPa@erS[T@|VH 1.16 -HaDD@@IIf]n``@@XDFEwDi` 1.15 -HidD@@IIf][hHB@AafUwL@a@ 1.15 -HiDHPHApiprRQVRjj`A`rXS\H 1.15 -sJ\@@ldru@LLEnP` 1.14 -sJQ@@dsU@LLEnJD 1.14 -QMPARVAaGFP 1.14 -qCb@AIZpLDMrP 1.13 -HaD@P@bNbDfUZZ@B@AaPHS]rL@ 1.13 -HaD@@DjUZxHH@AadIgBJfx 1.13 -qCp@AIj`LMEnP@ 1.13 -KA|P@HBS[KUT@XDUMwDS@ 1.12 -sKP@Di\Zj@XDQ[dH 1.12 -HidH@@Rfy^F`H@@XDU\ODQ` 1.11 -sNu@EPdrsUPCCKWbK@ 1.11 -HaDH@@RYe[hB@@FAXS]q@h 1.11 -HaDH@@RVU[f@@@FFTw\rLH 1.11 -sGP@Divj`FFBoMLP 1.1 -sKT@Adi\Vf@XFKD 1.1 -KAxD@Ae\dmvuU@FEIaUwDa` 1.1 -qCx@AYIf`LHNIX 1.1 -HeTH@@rQSIPmu@AP@LBSNGfDt` 1.09 -HidD@@EIYW[j@B@A`PXU\rFD 1.09 -sGX`LJdmuT@pHboEb 1.09 -sJX@@eMU@LBHmrD 1.09 -sJP@DkVhAaacqQ@ 1.09 -HeTD@@IIf]vzB@h@FCAaUp|bP 1.09 -sKT@Adi\Vf@XZH|f@ 1.09 -Hid@P@kAkDfUff`@h@FA@cCqLx 1.09 -qCx@AYIf`LDErX 1.09 -HifH@DAIVUxV`@@AaRES]qHD 1.09 -sJX@@eKU@LCEcr@ 1.09 -HaF@@@RYe[hB@@FEXUMwH@ 1.08 -sGX@@eNuT@phfMyD 1.08 -HaD@P@qFqDfUjz@H@A`PIc\Rn@ 1.07 -sKX@@eKcUPC@qX|`@ 1.07 -Hif@@@Rge^Fh@@@XMATwCq@P 1.07 -qCa@CIJtAaEqS@ 1.07 -qCb@AIV`OME` 1.07 -HmtB@@zURVUgXV@Hh@FEXWRoH` 1.06 -qCp@AJZ`LLEnR@ 1.06 -HidH@@Rfuvz`@`@XDfTwDHP 1.06 -Hg|@@DjYV}~T{`d@@@@FBic\LkiwrJ@ 1.06 -HidH@@RfU~F``@@XEaMwLRa@ 1.06 -HidH@@RYWZZ@B`@XTBXU\Sa@ 1.06 -sJP`@TeVhA`d^JX 1.06 -HcNJ@MCNeTify^ajjjj@FBpaTwCJ{rL@ 1.05 -HmvB@EAaeJYY^njjjh@XSFES\LkrD@ 1.05 -Hk\D@@iIYgU^GSXH@@@@XLURngqHX 1.05 -HmLH@@RYVuiiV@@@@@XLE\LkqDp 1.05 -sFq@@eLzuU@LCEkrD 1.05 -HaDH@@Rfu[j@@@FFIW\sBX 1.04 -sGU@E`dsmT@pQoDl 1.04 -HaFH@NAIe^f`@`@XDfEWDC` 1.04 -sGU@EPdrmT@pRoEb 1.04 -`IJpCr@ 1.04 -qCp@AIZ`LHnXS@ 1.04 -QM@HzAyd` 1.04 -sNx@@eJ}UPCBqZobA@ 1.03 -sNq`@fdvkUHCAX|Rh 1.03 -sJX@@dkU@LMEnHD 1.03 -qCp@AIZ`LEMqA@ 1.02 -sGPXHlPDYIHUj@XP|e@ 1.01 -sOx@@drm\@@@pQoBEf 1.01 -sGT`EPTfyi`GbU@ 1.01 -qCpB@RduPFFbwH@ 1.01 -HefDB@XPgIIETiUUL@LJaLJnQH 1.01 -HidD@@iJ[gxZB@@A`RDp|Rn@ 1.01 -sNyA@qNRRJuU@LCEcqU` 1.01 -sGU@EPdvmT@pRwDZ 1 -sJX@@eOU@LBHmrD 1 -HeVH@DAIYmQej@@@FETwCOD`` 1 -HeTD@@iJ[e^f```@FEHS\OHd 1 -sOpHADILkW@@@LBDWqZ` 1 -HaDH@@RYWih@H@FA@aUqLx 1 -HidH@@RYm^Eh@@@XDUMwDpP 1 -sOpHAHILkW@@@LBl[rL 1 -sFy@DDfTujhAaekrD 0.99 -sKX@@eKcUPCCCGbb@ 0.99 -qCb@AIZ`LDMqQ@ 0.99 -Hg|@`@bLbbbRLRS\]pDD@@@CAPpfzUt{yE@ 0.98 -HklJ@@R]MIemYqUj@Hh@FETtz_HH 0.98 -HeTH`ABHRYWZf`@f@AaPIaUrI@ 0.98 -HcLD@@eJ[V][j@Bj@AaRYp{qBT 0.98 -Hie@@@QInUxV`@@A`pHUMwHD 0.98 -KA|P@HBSMkUT@XDUMwHp 0.98 -sNx@@eLuUPCBbKWbK@ 0.98 -sNx@@eJmUPCAqXu|`@ 0.98 -qC`@IVtA`enHP 0.98 -sNyABCJSOUU@LJHj~KD 0.98 -sGQ`@bdwMT@prqyJ 0.98 -JoBD@DIU\vjzv[uP@@@@@X[EMprng[|`` 0.98 -Hg|H@@RYfUWd}nh@@@@@XZATwCJz]|b@ 0.98 -HmTFB@PfETyIn{mjjj@FGXUMpkrI@ 0.97 -qCbPPABUm@XI[d@ 0.97 -KAxDD@S]wILsuUPAaPPaMqLh 0.97 -sNx`JDdrkUPCAE|Vh 0.97 -HaD@@DjUZxHD@AaTXU]qDX 0.97 -HidH@@RUe^Fh@@@X\DES\OHP 0.97 -HaDH@@Rfu[j@@@FAIeMqBx 0.97 -sGX`DJdjmR@pbyib 0.97 -HaD@P@kNkDfUZZ@B@A`PHw\SB@ 0.96 -HiFDB@XPgIIETjji@FEPfEWHx 0.96 -JoCF@F``iLkJ|jz]mUUUUP@XJUMprivHp 0.95 -Hg^D@E@TfUvujZ@Bjj@AahHU\LkiwrL@ 0.95 -HmtD@@eIfUTUjBB@@XBDES\L|SE@ 0.95 -HmvD@LATenUqej@B@AarYS\J|b@ 0.95 -HeVH`NdHaIe]ZZ@Bd@FC@fEW\`P 0.95 -Hif@@@rRJEKajjj@FGPaTwCrL@ 0.95 -HmtD@@QImYVUZX@@@XTwCJ|qLH 0.95 -HeTH@@RfUWihHH@AaVES]sDFP 0.95 -HifH@AAIe]ih@J@A`pIaTOHx 0.95 -HidD@@iIYgxVB@@A`QTw\RA@ 0.95 -HaFD@DCdeeVyjj`A`VES\b@ 0.95 -sOp@DiUkjj`FCDVMyF 0.95 -sJPhH`DYIBm@LEcr@ 0.95 -HeTH@@rQSIPmu@AP@LJSFx^HT` 0.95 -HeT@pHdDdLdLddlRPsU@@@CCJF^Hw@ 0.95 -KA|PD@pSddbljj`CAhSBinQp 0.95 -HaDH@@RYe[hB@@FAAaMqJx 0.95 -sJY@LDeZhAaaMqH` 0.95 -HcNH@DAIevUWVj`@@AarUprn|SB@ 0.95 -sGP@DiUiPFADVxcP 0.95 -sJT@@TizhAaaMqH` 0.95 -qCr@HIJtAyhl 0.95 -sOx@@drm\@@@pJq_DJ 0.94 -sGQ@@dsUT@ppQyij 0.94 -sGU@DPdwMT@pVODj 0.94 -qCp@AIZ`LInXQ@ 0.94 -JoB@@BUJssoPvxPTA@@@FFpaTLkivDs` 0.93 -HidHPBBlzlRYgfFBB@@XDF\ODI` 0.93 -HmvH@AAIYWYnX@J`@XMaTtkrH@ 0.93 -HidL@@IdfYoa`b@@FE@UMwHD 0.93 -sFt@ATiTvjhA`qEcP 0.93 -sNy@DDeeZj@XGFod` 0.93 -sOx@@drm\@@@prMyaf 0.93 -sGP`@dfuj`FBVxcP 0.93 -HaDH@@Rfu[j@@@FAXUMqDx 0.93 -sGY@LDeVj`FABqxiP 0.92 -HcND`La@BLddJfRtjmP@P@LFqnF]yE@ 0.92 -sGU@EPdrmT@pRwDZ 0.92 -sGQ@@djmT@pruxhP 0.92 -qCp@AJZ`LInXQ@ 0.92 -qC`@IRtAaAsQX 0.92 -qCbPXABRt`^XQ@ 0.91 -qC`HBHTPduPFFDWI` 0.91 -Hid@@DjU^nBBH@FCPaUp|SF@ 0.91 -QMPARZAaGFP 0.91 -`IH`CB@ 0.91 -QM`BN`XQqd 0.91 -KAzH@IP\dvjuT`FFIe\Pf@ 0.9 -sNqaIV~RjzjXAaIqX` 0.9 -sGY@DDeUj`FBQyij 0.9 -sJY@DDeVhAaEsSD 0.9 -sJY@LDejhAa`cqS@ 0.89 -HidH@@Rfuvz`@`@XEaTwDPP 0.89 -sJQ@@eMU@LEEqX` 0.89 -sJQ@@dsU@LLHnKD 0.89 -sJQ@@dju@LH^ZK@ 0.89 -HiDJB@PfENR[nvjj@FEXULOHx 0.88 -HidH@@RfU~F``@@XDfDwLka@ 0.88 -HaD@`@dDfYVz@`@A`VDw\b` 0.88 -KA|H@TBILlmUPAafEwDi` 0.88 -sNp`@dfUZf@XHobu@ 0.88 -qCp@AIj`LLEnR@ 0.88 -HeV@@@rRHqICMT@@@LFbfxYxbX 0.88 -HmvH@LAI[YVUZh@@@X\aMproDc@ 0.88 -sKXHB@aJWFe`FFDwH` 0.87 -HidD@@iIYgxVB@@A`QMp|RJ@ 0.87 -sOpHADILkW@@@LBEWqX` 0.87 -HmtD@@UIUe\YZ`@`@XMeMpkqHP 0.87 -sJX@@eKU@LLL^JH 0.87 -sJQ@@dsU@LLH^IX 0.87 -HkLNCHiiWS[ex~rRSQHqRjZfX@XYFD 0.86 -Hmn@@HRjuYX^gejjjj`A`lIaTwCJ` 0.86 -HedJA@RaeNgdfvvZjf@FFYS\`` 0.86 -HefDB@XPgIIETiUUL@LJaLJ^QP 0.86 -Hif@@@Rge^Fh@@@XLDES]qDD 0.86 -sGPBIHJPtaXcIIKUPCBWdH 0.86 -sNq@GddbmUHC@qX|e@ 0.86 -sGY@LDefj`FABqxiP 0.86 -sNx@HeTuUPCCKGbk@ 0.86 -sNp`@dfvZj@XGFodP 0.86 -sGX@HeTuT@prqxiP 0.86 -sJPH@DILuPCAQ\pq@ 0.86 -sJY@BDfZhAaaMqH` 0.86 -sNp`@dfUZj@XHwbs@ 0.86 -sJQ@@dmU@LLEnJD 0.86 -sJX@@dkU@LCEcr@ 0.85 -sJXhMD@cIHUhAyab 0.85 -sJT@@TizhA`h^XK@ 0.84 -qCh@BIWLAaMqQ@ 0.84 -qCj@KAIf`LHnS@ 0.84 -HmN@@@RfUWrnf`Pb`@X\BDwCOHT 0.84 -sOq@@drm\@@@pHQoEf 0.84 -sGQ`@jdjmT@pVOEJ 0.83 -sGQLKIARFdLddmU@LH^R` 0.83 -sJXhMD@cIHUhAaCqC@ 0.83 -HaF@@@Rfu[j@@@FEAaTwDS` 0.83 -sJQ@@dmU@LLl^HP 0.82 -sJU@DPdvu@LH^IX 0.82 -sJY@DDfvhAaCqK@ 0.82 -sJP`@TeVdAyhl 0.82 -HcLJ@@PUuInUgzV`BJ@AaQTJ{rD@ 0.81 -sOxA@IRi^lH@@XVHu|f@ 0.81 -sOpHADILkW@@@LBCWqK@ 0.81 -sNp`@deVZj@X[U|TH 0.81 -sNp`@deYZj@X[F|TX 0.81 -sJX@@eKU@LML^HH 0.81 -HaDH@@RYVih@H@FE@fTwHx 0.81 -sFx@@eLzuU@LBIkqH` 0.81 -sJQ@@dlu@LDmqP` 0.81 -qCr@XIKTA``nJX 0.81 -sJQ@@djs@LDmqP` 0.81 -qCr@HIJtAaEqS@ 0.81 -HmTJ@@IaUIf[njjj@FBaBXUMpkrI@ 0.8 -HedJ@@IaeIf[zjj`AaHPfESCOHx 0.8 -sGXhMD@cIHXmPCs@t 0.8 -HeV@@@Re[TYj`@@AatIS\L|PB@ 0.8 -qCb@AIf`ODl 0.8 -HedJAHiaenglddtUeTtp@pRLyA@ 0.79 -sJY@DDeVhA`inID 0.79 -sJX@@dku@LInID 0.79 -sFp@DjTvjhAaQD[rX 0.79 -sGP`@deYj`FBqxiP 0.79 -HiF@@@RifZjj@FGPfES]rA@ 0.79 -qCa@CIJtAyhl 0.79 -sFp`@dfTujXA`l^R` 0.78 -sNp`@dfyZj@XEXodh 0.78 -sGP`@dfyj`FFVOIP 0.78 -`IHPCr@ 0.78 -sG\@@ldsmT@pHVOIP 0.78 -HaDH@@RVU[j@@@FAAaUsH[` 0.78 -QMhDRVAxr 0.78 -HeTHPBBlzlRYgea``b@A`PYp|Pi@ 0.77 -HmtD@@QIee^UZ``@@XLULLkrN@ 0.77 -sGQa@bnR[fj@XP|Vh 0.77 -QO@HyjAaGFP 0.77 -sGX@@eNuT@pLqoDD 0.77 -sNq`@fdvkUPCCKObM@ 0.77 -sOx@@drm\@@@phVMyF 0.77 -sJX`DBdjt`LHnJX 0.77 -KAxD@@c\dvluS@FFIg\`` 0.76 -HaDD@@IIf]n``@@XYeMs@K` 0.76 -sOp@DjWkB@@FBaxUjp 0.76 -HaDH@@RVU[j@@@FCAaTw\b@ 0.76 -sJX`DBdvt`ODl 0.75 -HidH@@RVUvy`@`@XUaTp|b@ 0.75 -qCp@AJZ`LLInQ@ 0.75 -sOp`Hdjekjj`FBqxjp 0.75 -qCb@AIVPLHnJX 0.75 -HeTB@@sirQQSRtMUUT@LNaB[agbYP 0.74 -sGQ`@jdvmT@pQoDl 0.74 -sNx`DJdjsUPC@hu|Tp 0.74 -sOq@@drm\@@@pHU_Eb 0.74 -HidD@@QInUxV`@@A`QTw\QA@ 0.74 -HaDH@@Rfu[j@@@FEXUMwHP 0.74 -sOq@@drm\@@@pRoBLV 0.74 -HaD@@DjUZxHH@A`tIaUwHX 0.74 -HeVH@AAIYWVy`@h@FEXULODbP 0.73 -sNx@AddQUUPC@pu|Rp 0.73 -sJP`@TeVhA`l^JH 0.73 -Hmt@pHdDdLdLddlRTFZh@H@FATpsrE@ 0.73 -sJT@@deVhAa`mqP` 0.73 -sOq@@drm\@@@pROBMV 0.73 -qCr@XIKTA`aNIX 0.73 -HidHPBBlzlRYgfFBB@@XTFEp|a` 0.72 -HiDJA@PnENGdf{Yji`A`aUrL@ 0.72 -HeUH@DdDfyWxV`@`@XDUMwDRP 0.72 -sJY@LDeZhA`QEnP` 0.72 -sNqa@jnR[YjhA`m^Hl 0.72 -sJY@LDeZhAaaEqX` 0.72 -sOp@DjWkB@@FFbOMjp 0.72 -qC`@ISTAaEsBX 0.72 -sKP`Adi\Zj@^ZH` 0.71 -HidH@@RYWZZ@B`@XLBXU]rA@ 0.71 -sJQ`@bdvu@LDcrX 0.71 -QM`BN`XL|` 0.71 -qCb@AIZ`LDEqS@ 0.71 -KA|X@TB\dvjuT`FFIe\Pf@ 0.7 -sGY@DDeej`FBfxcP 0.7 -sGXA@IRiZj@XVKF|`@ 0.7 -sJQhHl@cIHUhAaCr@ 0.7 -sJP`@TfZhAaacqQ@ 0.69 -Hk\H@@RfYU\]Tz@@@@@F@xUMproDtp 0.69 -HidD@@QInUxZ`@@AaQTwCs@a@ 0.69 -sOx@@eJ~MKT@ppeydV 0.69 -sJY@DDfvhA`enP` 0.69 -sGQ`@jdvmT@pRoEb 0.69 -sGY@LDeZj`FFDWDZ 0.69 -HaF@@@RVU[j@@@FEXUMwDB@ 0.69 -sGP`@df]j`FDwDZ 0.69 -sOq@@drm\@@@phVKyJ 0.67 -Hev@@@RfUWJzZABH@FC@aMt|`P 0.67 -sJQ@@dju@LInZH` 0.67 -`L@OH 0.67 -qCp@AIZPLMEnP@ 0.66 -sJQ@@dsU@LDmsBD 0.66 -sJP`@TizhA`h^IX 0.66 -HaDH@@RYWih@H@FE@fEWHx 0.66 -HaD@@DjUZxHH@AaTIaUqFx 0.66 -qC`HBHTPduHFBByL 0.65 -sJPXHlPDQzt@pfyB 0.65 -sJU@DPdvu@LHnKD 0.65 -qCbPXABRt`XR\PP 0.65 -HidH@@RfU~F``@@XTfMp|Pj@ 0.65 -sJP@DiVhA``nZX` 0.65 -qCb@AIVPOME` 0.65 -sJQ@@dkU@LEMsAD 0.64 -sGP`@dfUj`FDoEb 0.64 -sGY@DDfUj`FBVxcP 0.64 -sGY@DDfuj`FDoLlP 0.64 -sGX`BJdruT@pHboEb 0.63 -HidDB@QNR[e^Eh@@@XDS\OHh 0.63 -sNu@DpdvkUPCCKGbk@ 0.63 -sJT@AdiZhA``^ZK@ 0.63 -sGQa@jnR[Vj@XKWdH 0.63 -sGP`@dfuj`FBMxe` 0.63 -sGP`@df]j`FBqyJ 0.62 -HeTH@@RfUahHB@AaRXS]qJd 0.62 -HaDH@@Rfu[j@@@FAYS]qDH 0.62 -RG@DTLHyP 0.62 -sGQ@@druT@pHbwDZ 0.62 -sJPXHlPDQzt@pVH 0.62 -Hid@P@bNbDfYYa`H`@FEAc\OHh 0.61 -sOq@@drm\@@@pqky`l 0.61 -qCaPQ@HRmhCB[d@ 0.61 -QM@HvAyd` 0.61 -HifH@AAIYW[f@B@A`VES\RA@ 0.6 -sFx@@eJxtm@LDIsHt 0.6 -sOq@@drm\@@@pJM_DL 0.6 -HmtB`HSBCprRSFIJUZh@@@XMaMpsrE@ 0.59 -HeTDPAdHc`aIe]jZ@BT@FE@fEWHx 0.59 -HeV@@@rRJEK\MP@P@LJJfz^Hf@ 0.59 -Hif@@@Rfuvz`@`@XUaTp|PD@ 0.59 -qCcPQXPd]hCAK\`@ 0.59 -sGU@DPdwMT@pVoDb 0.59 -sGY@DDfuj`FFVOIP 0.59 -sJP@DizhAa`mqP` 0.58 -sGP`ATeUfPFBVxhP 0.58 -qCp@AJZ`LDIqK@ 0.58 -HaDH@@RYVih@H@FFIS\pLx 0.57 -QMPARVA`cr` 0.57 -HidH@@Rge^Fh@@@XTUMp|RD@ 0.57 -sOq@@drm\@@@ppSylZ 0.56 -HmvH@DAIUYVUZh@@@X\aMproDc@ 0.56 -QMPARZAyd` 0.56 -HmvH@FCHhhhdYVhJ@@AaHQaUproHX 0.55 -HiF@@@ReUZjj@F@pfES\OH@ 0.55 -Hid@@LdbRQk``b@AaTHUCqLX 0.55 -sNxA@IrRQVjhA`Xl^Jl 0.55 -HiV@@@RfU|kahDB@A`pHS\OHh 0.54 -sFx@@eJf`@@LCL[rH 0.54 -sFx@@eJf`@@LMM^ID 0.54 -HaDH@@Rfu[j@@@FAIaUqFx 0.54 -HaDH@@RYWih@H@FAIaUq@x 0.54 -HifH@JAIYgxVB@@A`QMp|RJ@ 0.53 -sGYALMJRmUPC@aF|Tp 0.53 -qCp@AIj`LDEqS@ 0.53 -sN|@@ldskUPCBaXwdX 0.53 -Hid@@DjU^nBBH@FGPfES]rA@ 0.53 -HaF@@@RVU[j@@@FCQaTw\`@ 0.53 -sGQ@@druT@pHboEb 0.52 -HidH@@Rge^Fh@@@XDUMwLaA@ 0.52 -sJP@DjYdA`inID 0.51 -HifH@DAInUxV`@@A`QTw\QA@ 0.51 -sGU@E`drmT@pbylZ 0.51 -sOq@@drm\@@@pJqoDF 0.51 -KAxD@Ae\dmvuT`FAIaUqHX 0.5 -sGP`@dfuj`FBUxlP 0.5 -qC`P@HRfhCAB\Rp 0.5 -sOpH@DILkW@@@LBl[qA` 0.5 -qC`@ISTA`anJH 0.5 -sGY@DDfUj`FBqxeP 0.49 -HiDB@@IaRYfzjj@F@aBXULOHx 0.49 -KAxD@@S\dsOUU@FGABXS]rJ@ 0.49 -sJP@DiYXAaaEqX` 0.49 -sJQ@@dru@LHnKD 0.49 -qCa@CIJtAaMqQ@ 0.49 -HidD`HP@cIHXdnEX@@@XDUMwD@P 0.49 -HaDH@@RYe[hB@@FEAaMwHh 0.48 -sJU@E`dru@LHnKD 0.48 -sGP`@df]j`FDOEj 0.48 -KAxD@@c\dvluS@FBIwDp` 0.47 -sGX@@dkUT@pJqoDH 0.47 -qCa@CIKTA``nJX 0.47 -sNu@DPdwKUPCCXwbS@ 0.46 -Hif@@@RUe^Fh@@@X\BES\OH` 0.46 -sGP`ATeejPFDWMLP 0.46 -RFD@QFCBnP 0.46 -sOq@@drm\@@@phVMyF 0.46 -QM@HzAaWDP 0.45 -QMBBHRYAaGFP 0.44 -sOq@@drm\@@@prqyaV 0.44 -sGQ@@djmT@pVoMDP 0.44 -qCaBAKdfZ@|f@ 0.44 -RFD@QFCqH 0.44 -sJY@DDfVhAaCqK@ 0.43 -QMPARVAyd` 0.43 -qC`@Qz`LDIqK@ 0.43 -Hmv@B@B\ddUbReZj@@@F@pfMproHH 0.42 -sNy@LDeYjj@XDQGbk@ 0.42 -HaD@@DjUZxHD@AaTHU]qLX 0.42 -HaDH@@RVU[j@@@FEXUMwDB@ 0.42 -qCr@XIKTAaAsQX 0.42 -qCb@AIZ`LHnXS@ 0.42 -qCb@AIZ`LHNZK@ 0.42 -sOx@@eLmXD@@pJu_HP 0.41 -sGY@DDfUj`FBUxlP 0.41 -sGY@LDeVj`FADQxmP 0.41 -sGT`EaTf]jPFDWEb 0.41 -HaDH@@RVU[j@@@FEAaTwDc` 0.41 -sOp@DjWkB@@FBbx\Zp 0.41 -sJP`@dfVhAaMrD 0.41 -qC`@ISJA`aNIX 0.41 -RG@DTOD` 0.41 -sOp@DjWkB@@FAbMxlp 0.41 -HidH@@RUe^Eh@@@XLaTwCrH@ 0.4 -sOq@@drm\@@@pJq_DJ 0.4 -QMhDRVAaWI@ 0.4 -sJPa@erS[T@pfyB 0.4 -HeTH@@RUYTYZ`@@A`vTwCODa@ 0.4 -HidH@@Rfufz`@`@XDfMwDHP 0.39 -HiD@@LddUdjjh@XMBXS]rA@ 0.39 -sJQ@@dkU@LLEnJD 0.39 -sJP`@dfvhAyeb 0.39 -sGY@DDeej`FDOMMP 0.38 -qCa@AIMTAaIsAX 0.38 -HaDD@@IIf]n``@@XEeMwD@` 0.37 -sOp@DjWkB@@FEbM_I` 0.37 -RF@QP|R@ 0.37 -sJY@DDefhA`l^R@ 0.36 -qCb@AIj`LINXK@ 0.36 -QMHAIhFD\Y@ 0.36 -`Ib`hFD 0.35 -Hg|@@DjU_eZx{BAH@@@FBpaUtkiwqLX 0.35 -sNp`@df^Zj@XKGbk@ 0.35 -HaDH@@RVU[j@@@FAXUMs@c` 0.35 -QMHAIXGcH 0.35 -qCaBC[dej@p`xh` 0.34 -sJY@DDfVhA`enP` 0.34 -KAxP`PCaSaddbljj`CBdpf{dT 0.34 -Hid@@DjU^nBBH@FCPfEW\Qa@ 0.34 -HaDH@@RVU[f@@@FAXUMqHx 0.34 -qCpB@SGj@pTWDL 0.34 -Hk\@@DjU^ukmLHH@@@A`lHU\Lki|c@ 0.34 -qCb@AJZ`OME` 0.34 -`IlQpFD 0.33 -Hg|@@LdbRbtJUB]aAP@@@CAXPjFUt{xf\ 0.33 -sFp@DiTt@@AaaCsKT 0.33 -RFDDQFCBNT 0.33 -sJP@DizhA`Pl^R@ 0.31 -sJP`@dfvhAaCqK@ 0.31 -qCb@AIj`LDIqK@ 0.31 -HidD@@iJ[gxZB@@A`QMp|QJ@ 0.3 -KA|P@HBRjsUT@XTaTw\RL@ 0.3 -HeVD`Ia@BLdabRwBl@D@C@binx`R 0.3 -sGP`@dfUj`FDOEj 0.3 -sFp@DiTt@@A`QC^IX 0.3 -sJPYHlPDGh}Z@^S@ 0.29 -qCp@AI^`ODl 0.29 -sFp@DiTt@@A`anFHt 0.29 -QM`AIXGfR 0.29 -QOHBNZ`^L` 0.28 -HidD@@QInUxV`@@AaQTwCrD@ 0.28 -sKX@@eKcRpCAB\rq@ 0.28 -KAxD@@S\dsOUU@FCABDw\SJ@ 0.28 -sJP@DiZhAaaCqK@ 0.28 -QMPARVAaOD` 0.27 -QM@H~AaWI@ 0.27 -sJQ@@dlu@LEcqQ@ 0.26 -sJP`AdizhAyhb 0.26 -Hid@@DjU^nBBH@FCPfES\Sa@ 0.25 -HeTD@@QIemQej@@@FETwCOHH 0.25 -qCr@HILtAaMrH 0.25 -Hid@@LdbRQk``b@AaTHUMqLD 0.24 -sNq`AjdmsUPC@kF|TX 0.24 -sGQ`AjdmmT@pruxhP 0.24 -sGU@E`drmT@pRwDZ 0.24 -sFp@DiTt@@A`a^FKD 0.24 -QMHAIhGfR 0.24 -sJY@DDeVhA`enJD 0.23 -QMHBN`XUrP 0.23 -qCa@CISTAyhl 0.22 -QM@HvAaGFP 0.22 -sJX@IGuPCAK\TH 0.21 -qC`HBHtPdmPFBFxh` 0.21 -sGX`DJdjmR@pRwEB 0.2 -qCj@KAIf`ODl 0.2 -HaDH@@Rfu[j@@@FFXU\qFx 0.19 -HaF@@@RYWih@H@FE@fEWHx 0.19 -sJQ@@eOU@LECqK@ 0.19 -qCr@HIJtAaMqQ@ 0.19 -RF@Q`|R@ 0.19 -sOq@@drm\@@@pjqky@ 0.18 -QMDa^RVAyP 0.18 -qC`@IRtA`aNIX 0.18 -RFPDTNJlNT 0.18 -RFPDTOJ@ 0.18 -QM`AIhFBOJ@ 0.17 -HidH@@RYm^Fh@@@X\DES\OHp 0.17 -sJY@DDefhAaMqP` 0.17 -sOx@@drm\@@@pjqky@ 0.17 -qCcPQXAD]XCB[d@ 0.15 -QMFI@bM`XSr@ 0.14 -sFp@DiTt@@AaaEsXt 0.13 -RFPDXLJy@ 0.11 -RFQAtXOJ@ 0.09 -RFPDXLHyP 0.09 -qCb@AIV`LInJH 0.08 -`H@^P 0.08 -QMDARZAyd` 0.05 -`I@`Cr@ 0.05 -sJXA@IczhAahmrD 0.03 -sJP`@deVhAaMqP` 0.03 -sJP`@TizhAaCsQX 0.01 -sFp@DiTt@@A`QEnHt -0.02 -QMHBN`^L` -0.02 -qCa@CIKTAaAsQX -0.03 -QM`AIhFD\Y@ -0.04 -sGQ`@ZdruT@pHaoDl -0.05 -RG@DXLHyP -0.05 -sFp@DiTvjhAaacsQT -0.06 -RGAALXLJy@ -0.06 -sJU@E`dru@OLlP -0.08 -Ho|H@NrRQRqZZR]j``bh@FDiaMvg[|bP -0.09 -RFPDXOD` -0.09 -sOp@DjWkB@@FBexUbp -0.1 -qCb@AJZ`LHnJX -0.1 -`J@OH -0.1 -sJQ@@eKU@LECqK@ -0.11 -sJX`BDdvu@LHnKD -0.11 -Hk\@@DjU^ukmLHH@@@AaLHU\LkoDpp -0.11 -sFp@DiTvjhAaQEcrT -0.11 -sJP@DjZhAaaEqX` -0.11 -sJP`@dfVhAxlP -0.11 -qCb@AIZ`LINXK@ -0.13 -sJPXHlQxQ{T@prq@ -0.14 -sJP`@TeZhAaaCqK@ -0.14 -sNq`@VdsMUPCBbHobu@ -0.14 -QMDARZAaWDP -0.15 -HidB@@saRf]ZZjjh@XUEMp|qLH -0.15 -QMHAIXFD|h -0.15 -sGT@@Tivj`FADqxeP -0.16 -sJP@DjVhAahmrD -0.16 -qCa@CIKTA`anJH -0.16 -sFp@DiTt@@AaQEcrT -0.16 -sJP`@TfZhA`QD^S@ -0.18 -sJPLIDJHtQGuPCCQ[dH -0.18 -sFp@DiTt@@A`QE^KD -0.18 -sJX@@eMU@LML^HH -0.19 -KA|@D@DyIHjjjh@pZDpj[d\ -0.19 -qCr@XIJtAaEqS@ -0.19 -HaDH@@Rfu[j@@@FEIaTwHx -0.2 -qCp@AIZ`LDEqS@ -0.2 -sOx@@drm\@@@pJqoDF -0.2 -RF@Q`pce@ -0.2 -Hcl@@DjYU_egX@@@@@XRfES\LkrM@ -0.21 -sGP`@dfyj`FBVxcP -0.21 -qCa@AIJtAxi` -0.21 -sJX@@dmU@LLl^HP -0.22 -QMBBHRZAaGFP -0.22 -sGP@LdbKU@LCEcrT -0.23 -HaDH@@RVU[f@@@FEXUMwH` -0.23 -sNxA@IrRQVjhAaXl[rL -0.24 -QM@HvAaOD` -0.24 -sOp@DjWkB@@FAakxe` -0.24 -sGP@DiVj`FADUxlP -0.25 -qCb@AJZ`LInJH -0.25 -HaF@@@Rfu[jjj@FGAFES]rD@ -0.27 -sNyA@qNRRJuU@LKEc^Q` -0.27 -KAx@@YIDTjjh@pxHSBknPp -0.28 -sFx@@eJf`@@LCEcrT -0.28 -qC`@ISTAa`mrP -0.28 -HaDH@@RYWih@H@FF@U\qLx -0.28 -qCa@CIKTAaaMrH -0.28 -qCb@AIV`LHnJX -0.28 -HaF@@@RYWih@H@FAIaUq@x -0.29 -sJQ`@ldru@OEb -0.3 -sOx@@eJyh@P@pLVOHp -0.32 -HaD@@DjWzXHB@AaTIaUrN@ -0.32 -KA|@@@eSMUU@FCPaTw\c@ -0.32 -sJP`@TeZhA`inXH` -0.32 -Hmt@pHdDdLdLddlRVFZh@H@FATwCrE@ -0.33 -Hg\@@LddTQRdTwUAAT@@pULJfFUt~QX -0.33 -HiF@B@B\ddURjjh@X]BXUMwHD -0.33 -sJP@DiVhAa`mqP` -0.33 -QMABHXaIhFBOJ@ -0.33 -sJP`@TfZhAaaCqK@ -0.33 -sGP@Dj}j`FFVOEJ -0.34 -sJX`BDdvu@OLlP -0.34 -HeT@pHdDdLdLddlRPsU@@@C@j[ayD` -0.34 -HedHXFbPRPrPzPFPfPrRRqRUUU@CBByC@ -0.34 -qCpB@ReMPFBfx`` -0.34 -sFp@DiTt@@A`aNEXt -0.34 -HaDH@@RVU[f@@@FFXw\rBh -0.35 -HmtJ@@siWIEDeDZFjjj`AatEWCJ|QF@ -0.35 -qCa@AIMTAaMsBH -0.35 -sJX@@eKU@LLHnKD -0.35 -sGP`ATf^j`FADMxe` -0.36 -qCp@AIj`LDIqK@ -0.36 -sGP`ATfVj`FADUxlP -0.37 -qCpPXABRu@XJKbF@ -0.37 -RFB@QADXOD` -0.37 -Hk\@@DjU^ukmLHH@@@A`LHUCJ{sLxp -0.37 -sJQ@@dju@LDmqP` -0.37 -RFTPDQP|` -0.37 -QM@HzAaGFP -0.37 -QMHAIdFE\Q@ -0.38 -sJX`DBdvu@LH^IX -0.38 -qCb@AIZ`LEMqA@ -0.38 -sNp`@dfUZj@XHobu@ -0.38 -QM``eIhFCOH@ -0.38 -QMFI@bMP^P -0.38 -HaD@@DjUZxHD@AaTIaUqFx -0.39 -sNp@LdbJjj@XVKF|PX -0.39 -sJP@DjvhA`enJD -0.39 -HaD@@DjUZxHH@A`tHUMwHp -0.39 -QMHAIhFBWI@ -0.39 -sJPhHaxIRuPCAX|`@ -0.4 -sJPXHlQxQ{T@|rq@ -0.4 -qCa@AILtAxe` -0.4 -RGPQFCBNT -0.41 -sJPH@DIRuPCCBKbq@ -0.42 -sJQ`@bdvu@LH^IX -0.42 -sGX`BDdwMT@pfydZ -0.42 -sGP`@TfZj`FADQxmP -0.42 -QMJHBHvAxb -0.42 -sFp@DiTt@@AxqEcP -0.42 -sGP@DjUj`FFbwDZ -0.43 -HmvD`La@BLddlRVFUh@H@FETwBoHp -0.43 -sGQ@@dkMT@pvMxh` -0.43 -QM``fN`XL|` -0.43 -QMHAIhFD|R@ -0.43 -QMDARVAaOJ@ -0.43 -Hif@@@RUe^Fh@@@XLBES]qHD -0.44 -sGP@Djfj`FAVMyH -0.44 -qC`@Qv`LDmrP -0.44 -qCaPQ@Hck@^HX -0.44 -qCa@AILtAaErX -0.44 -QMDARVAqUaqd -0.44 -QMDARVAxr -0.44 -Hid@@DjUfaBB`@FCPaTw\SA@ -0.45 -qCb@AJZ`LINIX -0.45 -Hif@@@Rge^Fh@@@X\DES\OHP -0.46 -HiD@@LdbJTjjh@XBDIaTw\`P -0.46 -sJP`@dfvhA`enP` -0.46 -qCaPQCpcm@XQ\Pp -0.47 -`IjqpFD -0.47 -sJQ@@dmU@LLL^JH -0.47 -HaD@@DjWzXHB@A`THU\SN@ -0.47 -KA|H@XGIJsuUPA`pPaMwHh -0.48 -sKP`@Ti\Zj@XR\Rp -0.48 -HeTJ@@qaeJYyzzjjj@FGPUMpsqDp -0.49 -sNq`AVeMmUPC@sU|RH -0.49 -sGX`DJdrmT@pRoEb -0.5 -sGQ@@drmT@pRwDZ -0.5 -sGQ`AjdmuT@pHboEb -0.5 -HaDH@@RVU[f@@@FAYS]qHH -0.5 -qC`@Qv`LHnJX -0.5 -qCb@AIZ`LDIqK@ -0.5 -sGP@LdbMU@LCEcqB` -0.51 -sGP@LdbMU@LCEkq@` -0.51 -HmvD`La@BLddJfReUj@@@FAMpssLiP -0.52 -sJPH@DISuPC@bK\a@ -0.53 -HiD@@Dj}Yjf`A`rXU\OH` -0.53 -sGY@DDeYj`FFVOEJ -0.53 -sJP@DjVhA`hnKD -0.53 -qCr@XIKTA`anJH -0.53 -HaD@@DjWjXHB@A`TIS\SN@ -0.54 -sJPhHaxISuPCAX|PP -0.54 -sOq@@drm\@@@pHVOEV -0.54 -sGP@LdbMU@LJHl^R` -0.54 -sJXHL@aIVj@XZK\PH -0.55 -sNx`LFdjmUPCAbHu|f@ -0.55 -qChPK@HRYhCBCbV@ -0.55 -sKP@Di\Vj@XXP|Rp -0.55 -qC`@IVtA`aNIX -0.55 -sGQhHl@cIHTmPCBGbE@ -0.55 -sNp@LdbJjj@XLQXwdX -0.55 -qCb@AIj`LMEnP@ -0.55 -HeT@@LddTjPsU@@@CCdpj[ayD` -0.55 -sJQhHl@cIHUhAx`P -0.55 -sJP@DjZhAahmq@` -0.55 -sJXHD@aIYj@XP\tq@ -0.56 -sGQ@@djuT@pHVOEJ -0.56 -HaD@@DjUZxHH@A`TES\qLx -0.57 -sGY@DDeUj`FFVOEJ -0.57 -qCp@AIZ`LLHnS@ -0.57 -qCb@AIZ`LEEqC@ -0.57 -QMHAIhFE\Q@ -0.57 -sJP`@TizhAaicrH -0.58 -HidB@@kaReYrZjjh@XMaTwCqHP -0.58 -qC`@IRtA`anJH -0.58 -qC`@IVtA``nJX -0.58 -RGAALXOD` -0.58 -qC`P@HRfhCCBKdp -0.59 -sNp@LddUjj@XVKE|e@ -0.59 -sOq@@drm\@@@prkyab -0.59 -sJQ@@eOU@LEMqH` -0.59 -HaDL@@kldRTIMUUP@pKJ[nYBD -0.59 -qC`@ISTA`enHP -0.59 -sJP`@dfvhAaEqX` -0.59 -qC`@Qz`LLHnS@ -0.59 -sNp@DiWjj@XLQFodp -0.6 -qCa@CIKTAaaErX -0.6 -sNp`@dfUZj@XKGbk@ -0.6 -qC`@IVtA`hnHX -0.61 -sJP@DjZhAa`cqS@ -0.61 -sJY@LDejhAa`mqP` -0.61 -qCcPQX^D]hCAK\`@ -0.61 -sOp@DjWkB@@FEbq_IP -0.62 -sGP`@dfyj`FBQxmP -0.62 -sOq`AVeJnMUT@pvMyhf -0.62 -Hef@B@B\ddURUUUP@pFDpj[ayD` -0.62 -HcLF`HSFgP|LdfrbTHjuUUT@LNpjzUwb@H -0.63 -Haf@@@RiUkfzjjh@XUBDw\SJ@ -0.63 -HeTD@@QIgeQej@@@FATwCqLd -0.63 -sNp`@dfWZj@X[U|a@ -0.63 -QM`AIhFBWI@ -0.63 -qCb@AIV`LINIX -0.64 -HaF@B@BTeeVz`@@A`tXUMwH@ -0.64 -sF|@AbeJf`@@OMEP -0.64 -HmtJ@@pYUJYmVnjjjh@XCBTwCJ|SB@ -0.64 -QMHAIdGfR -0.64 -HiFL@BANR[gfjf@FFIa\Ra@ -0.65 -qC`XBHTQhaIj`LLEnR@ -0.65 -HeTD@@QIemQej@@@FAUpsqBX -0.66 -HeTB@@XYRfV~njjj`AatYS\L|QB@ -0.66 -HmL@@DjYeVdU@@`@@FGXULLkrN@ -0.67 -HifDAHAHeNR[e^Eh@@@XHP|rfx -0.67 -sGP`@dfuj`FFqoH` -0.67 -sJQhHlOAJmj@XP|Pp -0.67 -sJQ@@dju@LLl^R@ -0.67 -HmtJ@@siWIEEMDZFjjj`A`LHU\LkqLX -0.67 -sGQ`@ZdruT@pHbOEj -0.68 -sJX@@dkU@LBHmrD -0.68 -HidH@@RYm^Eh@@@XTUMp|c@ -0.68 -sGX`BDdwMT@pRwDZ -0.68 -HaDL@@sdigZZjj`A`TYW\qBX -0.69 -qCb@AJZPLINIX -0.69 -qC`HBHtPdlpFBFxh` -0.69 -sJY@DDejhA`l^HP -0.69 -sGQhHlOAJoZhA`c^HX -0.69 -HmtJ@@siUJYn~ajjjh@XSBXS\LkrJ@ -0.7 -sGPYHlQxGdjmj`FDwIP -0.7 -qCbPHABSS@^HX -0.7 -HifDAHAHeNR[e^Eh@@@XHU\qnD -0.71 -Hid@`@BDiyWaj@@@FC@UMp|RD@ -0.71 -Hid@@DjUfaBB`@FGPfESCrN@ -0.71 -qCh@CIKTA`anJH -0.71 -HidD@@QInUxV`@@AaRDwCrJ@ -0.71 -qC`P@HRVhCAB\Rp -0.72 -sGY@DDfUjPFBVxcP -0.72 -HidB@@qarQQZFnjjj@FCQaMp|QJ@ -0.72 -Hif@@@RYm^Fh@@@X]FES\OH@ -0.72 -HidH@@RUe^Eh@@@XTaTw\RA@ -0.72 -HidD@@QInUxV`@@A`QMp|QJ@ -0.72 -sGP`@dfuj`FFVOIP -0.72 -`ImAHFD -0.72 -HeTL`HS@BLddlRPrm@@@CBlinGdR -0.74 -qCb@AJZ`LEErX -0.74 -sJQ@@dju@LDcqS@ -0.74 -`Ld`^P -0.74 -RFTQXQ`|R@ -0.75 -QMhHRZAaGFP -0.75 -HaDH@@RYe[hB@@FF@S\sJx -0.75 -sJQ@@eOU@LDmqP` -0.75 -sGP`ATeUjPFBVxhP -0.75 -Het@@DjYUX^d@@@@AarXS\L|b` -0.76 -HeV@B@B\dbLRPsU@@@C@XSJ[agd@ -0.76 -sJP`@TizhA`l^JH -0.76 -qC`@Qz`LEEqC@ -0.76 -sNqDHGBnFRRJuU@LBlWrT -0.77 -sJQ@@dlu@LLl^R@ -0.78 -KA|X@DBLdvluS@FBHWDs` -0.78 -qCbPP^BRu@XI[d@ -0.78 -Hid@@DjU^nBAH@FGPfES]rA@ -0.78 -sOpHAbILkW@@@LJEc^Q` -0.78 -qCa@CIKTA`aNIX -0.78 -QMDARZA`cr` -0.79 -HeVH@IAIe]ZZ@Bh@FG@fEWSrA@ -0.79 -HidH@@Rge^Fh@@@XLaTwCrH@ -0.79 -KAxP@Uddbcjf`C@dpfyG@ -0.79 -RFD@QECBNT -0.79 -HeTB@@XYrQQJHuuUUT@LNcB[agbIP -0.79 -qCcPQXAD]XCqC@ -0.79 -sGP`@dfUj`FDwDZ -0.79 -HeV@@@rRJEK\MP@P@LFSBinyD` -0.8 -HaDL@@sdigzZjj`A`TXw\qBh -0.81 -sGX@@djuT@phbqyJ -0.81 -sGP@Djfj`FAbqyJ -0.81 -HaD@@DjYvxH`@A`RDw\SJ@ -0.81 -HeTB@@pYRf[vnjjj`AatIc\L|Pj@ -0.82 -HidB@@saRf]ZZjjh@XMFTwCqDH -0.82 -qCr@PIKLAaAqK@ -0.82 -KAx@@YIDTfjh@pZDpj{dL -0.82 -qCb@AIf`LHnS@ -0.82 -HeTJ@@qaeJYyzzjjj@F@qaTwCOHP -0.83 -HetD@@QIemRhYZ`@`@XDwCOHH -0.83 -sJP@DkVhAahmq@` -0.83 -sNp`@dfvZj@XXu|Rp -0.83 -qCc@AYIf`ODl -0.83 -QMBBHRZA`erP -0.83 -HklF@@pUt|dTTRbQjZjjjh@XKBESCJz_Hx -0.84 -sJPXHlQxQ{T@pRwHP -0.84 -HaDH@@RVU[j@@@FEQaTwDC` -0.85 -sFp@DjfJjhAaicqJ` -0.85 -QMhHchGcH -0.85 -KA|X@QS\eUkUU@FGPfES\ -0.85 -sGPXHlQxIU[U@LEcrT -0.85 -`IhapFD -0.85 -QMFI@bM`^H` -0.85 -HmtJ@@pYUJYmVnjjjh@XSBYS\LkrB@ -0.86 -HidD@@QInUxV`@@A`RDp|Rn@ -0.86 -HiDH@@RUUVjj@FGIaTwCrH@ -0.86 -HaF@@@RYe[hB@@FAXUMq@x -0.86 -HeTH@@RUYTYY`@@AarYS\L|b@ -0.86 -sOp`@tieujj`FAfkxdP -0.86 -sGQ@HeUuT@pLVOIP -0.86 -sJQ@@dmU@LBIcrH -0.86 -sJY@BDeVhA`d^JX -0.86 -HaDH@@RVU[f@@@FFYS\rBx -0.86 -sNp`@dfuZj@XEXwdX -0.87 -QM@HzA`sr@ -0.87 -HaDH@@RVU[j@@@FAAc]sHJ` -0.88 -sGX`LJdmuT@phfMyD -0.88 -sGX@@eJuT@pHbwDZ -0.88 -j`i@`@@HRYYUg\eIF]yjB@@B@@F@fBdkQkNx`g` -0.89 -Het@@DjfehZfjjj`AarES\L|c@ -0.89 -HeTD@@EIYWVy`@h@FEXUMOH` -0.89 -sGPhHaxISuU@LMc^HH -0.89 -sJXHD@aIYj@XXX|d@ -0.89 -sJP`@deVhAqIXPVOI@ -0.89 -sJP`@deVhA`l^R@ -0.89 -qCb@AJZ`LEMrH -0.89 -sFp`ATiWFjhAal[qQ@ -0.9 -sGQ@@dsmT@prqyJ -0.9 -QMA@HPaIXFD\Y@ -0.9 -sNphHaxIRkUT@pNM_H@ -0.9 -sOx@@drm]UT@p\VM_H@ -0.9 -HiFD@BADf{Ujj`A`rXUMwHD -0.91 -qCb@AIY`LEEqC@ -0.91 -sJQHH@aJuj@XI[bA@ -0.91 -HmtH@HrRQVIJUjh@@@X\fDwCOHT -0.92 -sJQhHlOBOZ`FBVyB -0.92 -sJQ@IGuPCCQ[dH -0.92 -qC`P@HRVhCAQ\Pp -0.92 -HidB@@qarQQZFnjjj@FEPS\OLSJ@ -0.92 -sJP@DjZhAa`mqP` -0.92 -HcND@BADf{YU]Zj@@@F@iaUproHt -0.93 -HaDD@@yIe^f`@`@XHe\HLK` -0.93 -sGP@LdbMU@LBHcqZ` -0.93 -QM@HzA`erP -0.93 -sOx@@drm\@@@ppUylV -0.95 -sJX@@dkU@LLEnJD -0.95 -HaDH@@Rfu[j@@@FEIaUwHX -0.96 -sJY@BDizhAaicrH -0.96 -QMpRRWhuAyP -0.96 -QMACD\QIhFBOJ@ -0.96 -sJX`LDdvu@OLlP -0.96 -sFp`ATiWFjhA`m^ZH` -0.96 -sGP`@dfui`FBqxeP -0.97 -KAxYDPf@DYvRRUIZj@LLJfyG@ -0.98 -sOpHAVILkW@@@LJEc^Q` -0.98 -sFx@@eJfuU@LJHl^R` -0.98 -qCa@CIKLA`anJH -0.98 -sJP`@TizhAahmrD -0.98 -sKQ@@eKcUPCAX|TP -0.98 -JoBD@@IS\rjzv[uP@@@@@XKS\LkivDa@ -0.98 -sNy@DDf]Zj@XYZ|QX -0.99 -RFTPxQP|` -0.99 -qCp@AI^PODl -0.99 -HcLF@@siWTify^ajjjj@FBpaTwCJ{rL@ -0.99 -qCpB@SGj@ptVy@ -0.99 -HaD@@DjUZxHH@AaTHS]qLh -1 -KAx@@IVjmUPAapPfES\c` -1 -qC`@IWtAaEqS@ -1 -HaD@`@BDimVz`@@A`pXUMwHP -1 -sJPhHaxIVmPCAX|`@ -1 -sOx@@drm\@@@prqyaV -1.01 -qCa@AIJtAaMrP -1.01 -sJPLIHJPtaGuPCrD -1.01 -sNy`BDtfuZi@XYX|e@ -1.02 -RF`dS]ECr@ -1.02 -HaD@@DjUZxHD@A`tIaUwHX -1.02 -qCb@AIj`LLEnR@ -1.02 -sOp@DjWkB@@FAfMxdp -1.03 -qCr@XIKTAahmr@ -1.03 -KAxY@PfAxIUjmUPA`QTw\`@ -1.03 -sJP@DkVhAa`mqP` -1.03 -RFTQxQ`pkd@ -1.03 -sNp`@deUZj@X[F|TX -1.04 -qC`@IStAxe` -1.04 -sOq`AVeJnMUT@pNM_ED -1.04 -sJQhHl@bOV`FDwHP -1.04 -HmvLAHAEbT{Hihdh^Eh@I@AaaTODzP -1.05 -HmL@@DjYUVGi@@@`@FGIaUpsrE@ -1.05 -Hev@@@RfUWJzZABH@FE@aMwDFP -1.05 -HiF@@@rRHiJjj`AatIaTw\`P -1.05 -HaD@@DjUZzjj`AapPaTw\c@ -1.05 -HaFH@DAIYUnZjh@XEaTwDc` -1.05 -HaFH@NAIe^f`@`@XTfEW\`@ -1.05 -HiFD@BADf{Yjj`A`rYS\OHH -1.05 -sJPXhlQx[ct^u@LH` -1.05 -sFp`@TivJjhAahmrT -1.05 -sGQHL@aJYihA``nHt -1.05 -sJU@DPdru@LDcrX -1.05 -sJQ@@dju@LEMqH` -1.05 -QMABlZqIhFBOJ@ -1.05 -RFHEFCqH -1.05 -HaDH@@RVU[j@@@FAAeMsHK` -1.05 -KA|X@DBLdvluS@FFIa\c` -1.05 -qCbPXQBRt`XP\TP -1.05 -qC`@ISTA`aNIX -1.05 -JoBD@@ILrkNx{[mA@@@@@XJU\LkivHp -1.06 -HeTD@@QImeQej@@@FCIeMp|bP -1.06 -HeTD@@QIemQej@@@FEES\OHd -1.06 -HidH@@RYm^Eh@@@XUaTw\`P -1.06 -sJT@@TizhA`QL^Q@ -1.06 -QMBCpRZAaOD` -1.06 -RGPQECr` -1.06 -qCbHXRBdDfj@|Tp -1.06 -HaDL@@[die|jjj`AaTYS]qDH -1.06 -qCr@XIJtAaMqQ@ -1.06 -QMFIOBM`XSr@ -1.06 -jhi@`@@^Rfuue]Yrsj@B`@h@@XJQ`eFJtZp^PD -1.07 -JoBD@@ISZzrk][t@E@@@@XRfESKiwqA\ -1.07 -HiDNPhSB[aCpkpsb{nGlddqdZih@P -1.07 -HiDD`HPOAJUfjjh@XMaTwCr@@ -1.07 -sOp@DjWkB@@FAbqxjp -1.07 -QM@HvAaWDP -1.07 -sJXA@IRej`FAbqy@ -1.07 -sGP`@dfuj`FBQxmP -1.07 -HmuD`IVD@HrRFIKKaV@BP@XDUMwDAP -1.08 -sKP@H~Jj`FBqxh` -1.08 -sGX`DJdjmT@pRoMLP -1.08 -sKQ@@eKcUPCB[fbH -1.09 -sJY@LDefhA`enJD -1.09 -sGP`@dfuj`FBqxeP -1.09 -sJXHB@aIVj@XZH|Pp -1.1 -HeTD@@QInYQehB@@FEISCOHx -1.1 -HaE@@@yIe^f`@`@XXfEs@k` -1.1 -Hid@@LdbbQxXF@@A`RTw\sBD -1.1 -QMhXNiRZAxr -1.1 -sJP`@dfvhAaMqH` -1.1 -KAx@@IRzmUPAapPaTw\c@ -1.11 -sNx`BDdw[UPCCXobU@ -1.11 -sFp`@dfTujhA`m^P` -1.11 -sJQ`@bdvu@LHnKD -1.11 -sJQ@@dkU@LMEnHD -1.11 -sJQ@@eKU@LEMqH` -1.11 -sGXA@IRiZj@XFHwbF@ -1.11 -`Ic@hFD -1.13 -HmtJ@@XYUJYY^njjjh@XSFES\LkrD@ -1.13 -sGP`@dfUjPFDwDZ -1.13 -sJQHL@aJVf@XHKba@ -1.14 -QMB@HRZAaGFP -1.14 -`Ig`hFD -1.14 -Hif@@@RYWZZ@BP@XTfEW\PA@ -1.14 -sNp`@teUZi@XYX|Th -1.14 -sGQ`@jdvmR@pbxlP -1.14 -sGPP@cTfyi`FBU@ -1.14 -HidB@@kaReYrZjjh@XUaTp|rDx -1.14 -qC`@IRtAaaErX -1.15 -sNx@@eLuUPCAqXu|`@ -1.15 -sGP`@df]j`FBMyL -1.15 -HcMB@hdDWXeNf]yInU^xV`@f@A`aCqJX -1.16 -HeTH@@ReyTYj`@@A`tYS\ODRP -1.16 -HaE@@@aJyUnh@@@XLFES]rH@ -1.16 -HidD@@yJ[VXZ@H@A`RXp|Pn@ -1.16 -HaDD@@YIeZn`B@@XXf]s@i` -1.16 -KA|@@AddQRjj`CAhSBinQp -1.16 -sNp@DkUZj@XLKFod` -1.16 -sGQ@@eJuR@ptuxdP -1.16 -sGY@JDiVj`FAbuyB -1.16 -sJQ@@dmU@LBEcrP -1.16 -sFy@LDigVfXAydZ -1.16 -QMJAhHzAxr -1.16 -sGQ@@eNuT@pLqoH` -1.16 -sGPXhlQx[crUVuPCrT -1.16 -HaDH@@Rfu[j@@@FFXw\qBh -1.16 -JoBbPCCk`DISJj{nTLuUUSSP@XZDIaTwBi|bp -1.17 -Hk]H`FGPBDieU]rafjjjZ`A`hPfES\J|`p -1.17 -HmMH`FEPBLdTRRQrafjjih@XBDIaTp|c` -1.17 -HcmH`FGPBDieU_JFZjjih@XRDIaTwCrE@ -1.17 -HeuH`FzPBDiewrnFjjf`AapPfTw\`` -1.17 -HiUH`JXPBDiU_B[jjih@XLDXUMrD@ -1.17 -sFp@DiTujhA`Pm^JD -1.17 -sGP@DiUj`FEDVOIP -1.17 -sGQ`@jdsmT@pfxcP -1.17 -sGQ`@bdwML@|Rh -1.17 -sGX`LDdwMT@|rM@ -1.17 -qC`@IVtAaaMrH -1.18 -HidD@@QInUxV`@@AaRES]rA@ -1.18 -HeTD@@eIYe^E`HD@FAEWCqHX -1.18 -qCb@AIj`LLHnS@ -1.18 -HidH@@RVY^E`H@@XDU\ODa` -1.18 -QM@HvA`erP -1.18 -sNqDHG@nFRQFUU@LBmWq@` -1.18 -qCqAPJRnRYhCrX -1.18 -sNp@DkUZj@XLQXwdX -1.19 -qCp@AIZPLDEqS@ -1.19 -sGQLKHaQFbLddmU@LCEcrT -1.19 -KAxH@@bSZkUT@XTfES\c` -1.19 -sJP`@dfvdAaMqH` -1.19 -RGPp]SFCr` -1.2 -HmLH@@RYUUiiV@@@@@X\BEproHp -1.21 -HiV@@@RfU|kahDB@AaPHS]qJD -1.21 -qCbPXQBRu@XHSbV@ -1.21 -HcN@@@rRJIIGRmPTA@@pELJfxYyF` -1.21 -HeTD@@eIYWVy`@d@FAXUMqHD -1.21 -QMB`HIchFCOH@ -1.21 -HaDH@@RVU[f@@@FAXU]qHX -1.21 -QM@H~Axr -1.21 -QMHAIhFCOH@ -1.21 -QM@HvA`cr` -1.22 -qCr@XIKTAaaMrH -1.22 -Hg|H@@RYfUWd}nh@@@@@XJUMprng_DB@ -1.22 -Hg^J@DCiV|bbtTVaTzuUUUP@pULJnE]N~Pp -1.23 -HcNB@DCiUIgf^gVjjj`AarXU\J|Qm@ -1.23 -HidD@@QInUxV`@@AabEwLia@ -1.23 -HaDH@@RYVih@H@FFAW\qLX -1.23 -sOpHAHILkW@@@LBlWrT -1.23 -sGT@ATivj`FEDqoH` -1.23 -qCaPQCpRmhCB[d@ -1.23 -sOp@DjWkB@@FFbwLZp -1.24 -HiDD@@QImUZjh@XLfES]rA@ -1.24 -QMJH|HvAxb -1.24 -sJP`@dfVhAaCrX -1.24 -HklNaHSBySCpsb{IILUDhYujjjj@FCTpki|bP -1.25 -HcMB@hDDWXeNF]yInUnzV`BF@AaaUOHx -1.25 -Hg^L@BAAR[eVuNvji@@@FDiaUJz]|a` -1.25 -HmtD@@eJ[WUnh@J`@XTfES\PU@ -1.25 -HmtD@@QIn[VUZh@@@X\fMproHh -1.25 -HidD@@QInUxV`@@A`RDw\Ra@ -1.25 -sNp`@tfUZi@XI[bM@ -1.25 -QOHBNZ`XUrP -1.25 -sNp`@dfWZj@X[F|c@ -1.25 -sNpXhlQx[cvRRXmU@LI^Q` -1.25 -sOx@@drm\@@@pHVOEV -1.25 -HeVDAHAHeNR[e_aZ@B@A`QTw\bP -1.25 -sJX@@dmU@LCEcr@ -1.26 -qCbPPABUm@XQ\Pp -1.26 -sJP@DiVhAaaEqX` -1.26 -sGX`DJdjmT@prqxiP -1.27 -sJP@H~j@XZK\a@ -1.27 -HeV@B@BTiVuFZh@@@XCBES\L|`@ -1.28 -HidH@@Rge^Fh@@@XTaTw\RA@ -1.28 -sNx`LDdvkUPCCXwbS@ -1.28 -RGDQxQ`|R@ -1.28 -HaF@@@Rfu[j@@@FCAaTw\a@ -1.28 -sJP@H~j@XJKbq@ -1.28 -HmN@@@rRJIKEaxZjjj`AaLIaMproHh -1.29 -KA|I@Dw@DIJwUTpAaTIa]r@@ -1.29 -sFx@@eLzuU@LJHm^P` -1.29 -qCr@PIKTA`anJH -1.29 -sJQ@@dru@LDmrD -1.29 -sNq`@jdvsTpCB[bS@ -1.3 -RGAALXLHyP -1.3 -HaD@@DjWZXHB@A`TXw\QB@ -1.3 -sNp`@dfUZj@XXu|f@ -1.31 -HeTD@@QImeQej@@@FCIS\L|c@ -1.31 -sJQ@@eOT`LML^Q@ -1.32 -HidD@@QInUxV`@@A`REp|Rf@ -1.32 -sJPYHlQxGh}j@XQ\f@ -1.32 -qCb@AIZPLMEnP@ -1.32 -sOp@DjWkB@@FEbqoHp -1.32 -j`aAb@FBdAprRQUJYQIN}UUM@@@@peAFBTtZsnP| -1.33 -Hg^DIItxdDdLdKbId~rRRqISQBmT@Pt@CCJZ~PH -1.33 -jhip@@@P\eKLjo}HvkM@@@EP@@pTRcARUjw`|ap -1.33 -Ho}DHL^D@HVPvPNPrRRqQJQN[V``jH@FAXporI@ -1.33 -Ho}DHLzD@HNPnP^PrRRqQ[JRUV``Jh@FAXwCrI@ -1.33 -j`qa@@H@RVYUg^Qg^f``@@@@FF`TXJRmFl{wHD@ -1.33 -j`aP`@N^`sIIEYdhdmYuUMP@P@CBRLDxIVcVyCp -1.33 -HaD@D@|HBDBLBBBJ|FBNBLddqfTuSP@pJDqnHW@ -1.33 -jdi@H@@HMYw`qR[fYf[iZZ@hafX@A`QEoQxbV` -1.33 -j`aa`@APYsIIEYdeDd{uUML@@@C@RLDtZso\aH -1.33 -JgRF@EM^RRJJHjkNHRd]gZijjfj`@pyLKae^PX -1.33 -JoB@QGTG]ddRtJbReL]a@T@D@@XKBYSRivHx -1.33 -JoBBQBzG`DiSJkvoS[tDDUTP@XZfES\Lg[|`@ -1.33 -j`a``@APYddbltrbR]zjfj@@@AaiFB\EKQkN| -1.33 -JoBe@BX@j[yEEDeEeJw[[USSUT@F@xU]IvHt -1.33 -HknDqItxdDdLdId~rRRqISPUj`BF@AaeLoHD -1.33 -Hg]HpMLhdDdLdLddjbRrTkUP@T`@pinF]yE` -1.33 -JcBB@E[ddbTQJqbxazQfjZjZj@CAdpfx^IB` -1.33 -JcBB@EMddbbbJsbDiGYvjZjjj@CCdpnFUyF` -1.33 -Ho}BbFvDqpBL{IIJeDedeuZjjjh@XRU\Lj]n -1.33 -JoC@QDAxAJTsMjnmf}T@@@@@FFeS\LkivH@ -1.33 -Hg|@b@|@eJYUg_eNzB@@@@A`jXS\Lki|PK@ -1.33 -HkmHpMLhdDdLdLddjbRreZj@B`@XTwCN|`p -1.33 -Hg|DbEtO@IRfUWmzSn``bjH@XJfES\Lg_H@ -1.33 -KA|PPPrPFPAPGPFRRJrjf@NBQ@q@I@y@yD@ -1.33 -JoBb@EFNyIHiTlhepv}USUMT@FGPfDtwrG@ -1.33 -HklHHCbPRPrPvHrRRqISPUj`BI@A`ULn|`P -1.33 -Hg\L`HS@\LddRtRRIwUTE@@@pffxYWSodX -1.33 -JoC`@@PJUrnljwV{@AP@@@FBxULJz]orH@ -1.33 -HklDpMNIAICICIIKDeMAVj@HX@FATrgrA@ -1.33 -HcL@HHdDdLdMqLddlRTHsU@AP@LJiiW^PH -1.33 -JoBd@AonRRJUKJICMoU@ASP`AarXUMp|bp -1.33 -HcL@HHdDdLdMbLddlRTHsU@AP@LJiiW^PH -1.33 -HklDpJZIAICICIIKLhdmNjZ@@@FACJ{rC@ -1.33 -Hg\D`HlGCIIEUEDeiuU@PP@LISBhYWSyE` -1.33 -HoD@Nux[IIEYdeDk^jfjeh@XBfEtg[|`P -1.33 -Hg\HpJbPRPrPrRRsQIYKmTp@T@CBnFUOdV -1.33 -HeT@H@\HbDbLbLddlRPsU@@@CChSJ[ayD` -1.33 -Ho~DANW^g^rRQRqJJJSj``Xh@FEIaVDXp -1.33 -Hmt@HHdDdLdEbLddlRVFZh@H@FFTr|Sa@ -1.33 -JoB`@@Ndrnlktqvtlp@T@A`hIaUJz[|c` -1.33 -Hmt@HHdDdLdIqLddlRTEZh@`@FATtkrA@ -1.33 -Ho~DB@XPgIIETihdk^jjX@@@XKBXUKivx -1.33 -HklD`HPGCIHdbhdmNjj@@@FDxULLki|`@ -1.33 -Ho|F@@RUm|bfbbTRlGV``Xf@AabJLkm@ -1.33 -Ho~D@NalddUfRbRmzjZ`@@AaJXWBng_H\ -1.33 -HcL@PH\JqLddT\RR{UT@@@LISBkae]yD@ -1.33 -He\H@JrRQJHxq\P}HsUMUUP@pYLInGbQH -1.33 -HmtFaHSBEP|LxnrRSFJJUZjjh@XYSCqNd -1.33 -HklHhCBPJPZPFPVPRYf{i`bHj@AaA|cP -1.33 -Hg^HB@xIrRQRpqIG]UU@@@C@xSBine]Np -1.33 -HmTLpHZP\J\A\LddUbtjjj`AarXU\J|bP -1.33 -HiDLpJXT`L`B`LddTZjfd@\XbAb@RArN@ -1.33 -JoBF@@IrSJzljUV{UUP@P@FDxULng[|`P -1.33 -HedLHJ[h|DbLbBbLddTcuTuP@piLHYyG@ -1.33 -HmtLbHS@|@gIIEXdiVj`@@AapDwCJ|QL@ -1.33 -HmtBaHSBCpsb{IILXdiUj`@@A`S\L|aP -1.33 -HmTBHJXUbPRPrPxJrRRsIJjZi@FD]rI@ -1.33 -HcLL`HS@\LddQbRr{UPP@@LNinFUwbI` -1.33 -HcLHpMbPRPrPrRRqIPcMT@D`@pJfe^PH -1.33 -HmTBHJXUbPRPrPytrRRsIJjZi@FD]rI@ -1.33 -Hg\L@HSLddRtRRIwUTE@@@pffxYWSodX -1.33 -HeT@p@BJBFBLdTTRHsPT@@CC`SBxYxeL -1.33 -HklH`HAprRQUQQKSjj@`@A`JXUCNgrE@ -1.33 -Hg^L@NakrRQVZJIZ]UMUS@CCdpagSyB` -1.33 -sOpNAxPHPQ``aE|FDYIIcjuS@LCEgqF` -1.33 -HcLHbMCpBTieV_ehHJH@FBiaTwCJ{r@@ -1.33 -JoBB@@Ndrnlktqvtlp@T@AaJXURnfHx -1.33 -HmtHPHApIprRHjIJUjh@@@XBBXwCJ|`` -1.33 -HcvJ`FaLWPBLddjRbRuUU@C@\JfFUwd\ -1.33 -Hk^@B@BTjU^ukmLHH@@@A`lHU\Lki|c@ -1.33 -Hk^D@D@\bbbbRQImMj`XB@AaU\ngrI@ -1.33 -Hg\L@NN|ddTlVVdkUA@S@@pyLInV~PH -1.33 -HmTDHJVIAICi@YCIICELZijd@XPwDJP -1.33 -Hmv@pIbPRPrPrRRqIPUj`B@@XESRoHD -1.33 -HiD@XHdDdLdJdNdAdLddltjjh@XPWHX -1.33 -Hmv@pEbPRPrPrRRqIXYj`@`@XES\OHT -1.33 -Hmt@P@\HbLddqbReZj@@@FGPc\LkqLH -1.33 -Hk^D@D@\bbbbRQImMj`XB@A`WKi|Ri@ -1.33 -Hmv@pIbPRPrPrRRqIPUj`B@@XESCOHT -1.33 -Hmv@pIbPRPrPrRRqIPUj`B@@XEProHX -1.33 -Hk^H@IOIIEJeLaWSj`BFH@XLfESCrM@ -1.33 -HcLH`HAprRQUQIKmUP@@@pELJne]y@` -1.33 -Hg]L@NvFOIIEYhddnuTuTt@LJSBF~QH -1.33 -HcN@bACpBTieU{ihHHh@FDiaTwRn|`@ -1.33 -Hmt@P@\HqLddqbReZj@@@F@qaMproHP -1.33 -Ho|H@KrRQRiQHpYj`@jX@FCIaKk|Rf@ -1.33 -HedHHNbPRPrPYprRRiQUUU@C@bhYyC@ -1.33 -Hg~D@DAdfygUQd{ZB@@@@FCUrz]|QF@ -1.33 -HmtBbHSB@HKlddNbReUj@@@FAMpsrE@ -1.33 -HmVBcNaLHOCNKngIILTiFjjh@XUSCJ` -1.33 -HmtB`HSBCprRSFIJUZh@@@XTwCJ|SB@ -1.33 -Het@b@|@gIEEDcSCMAPD@C@Tpj[agd@ -1.33 -HiDDHJZHaHcH`oCIIKLjij@FEPf\OHH -1.33 -HctBPHZUApGprRQVYSUTtt@LJSB{^PH -1.33 -Hid@p@bH\DbDfyWaj@@@FG@aTwCrH@ -1.33 -HmLB@HSerRQHiJfFZjjj`A`vESBoHd -1.33 -HklD@NOIIEKEeiVjB@d@FGIaMr{rA@ -1.33 -HcLL@HSLddQbRr{UPP@@LNinFUwbI` -1.33 -Ho|F@@Q]mtfyfYZSZBHXX@FFIk|siL -1.33 -Ho|F@@SSmtfyVV{iZ@HfX@FFH[|pjd -1.33 -Hk\@@DjU^ukmNeZ@B@AaLHUCJz_Ds` -1.33 -HklH@ErRQRqJJ]j`Hb@AarXSKi|PY@ -1.33 -HklH@IrRQRiPhUj`BJ@AarXUMI|P]@ -1.33 -HmTBHJXUbPRPrPzlrRRsIJjZi@Gb]H -1.33 -HgnD@NalddUfbreUMUT@LASBe]N~PH -1.33 -HaL@@DjYtkBqjynjjjj@FCABDw\SJ@ -1.33 -HklD@NwIIEKEeiVjB@h@FGIaMrgrA@ -1.33 -HknBAHAEvISdfyW[xV`@f`@XDUMwHL -1.33 -HkL@bLhLyJgnYzjjj`AaXPfES\Lki` -1.33 -HeTL`HS@|LdbLRPsU@@@CA`inF^Hf@ -1.33 -HeTDbHPO@IrRHqICMT@@@LFrfxYx`H -1.33 -Hid@p@qH|DqDfyWaj@@@FG@aTwCrH@ -1.33 -HcM@@@wIHhdd]JuAPD@C@Tpj[agdZ -1.33 -Hko@@@`Tke]e[f@Bj`@XCaTtki|b@ -1.33 -HeTDPHP@bYCIHXdmpk@A@@pHj[nP@ -1.33 -HiDLHJXXdDdLdNBlddlrjfh@XQwHD -1.33 -HctDPJEYCYCIIEFiiUMMP@pILInQH -1.33 -HmTLRHS@BN\L{IIJdiEjjh@XLULLj -1.33 -HkND@NalddUfRbjijj@F@ia]Jz_HD -1.33 -HiDLHJXXdDdLdN]Lddlrjfh@XQwHD -1.33 -HeT@P@bH\Df^UFZh@@@X\BTwCODc@ -1.33 -HklD@@qJYVu}NjhH@@FDiS\Lki|b@ -1.33 -HkLB@NFUrRQRqSFjifh@XMBXVgrE@ -1.33 -HmtB@HRUrRQHiJfjjjh@XMaTtkqND -1.33 -HiDLpJXXbDbLbLddlrjfd@XYBYrN@ -1.33 -Hmt@`NqLddTlVeZhH@@FCIaMr|PY@ -1.33 -Hmt@`EqLddTjVFZh@H@FCIaTr|Sa@ -1.33 -HmVLB@ZUB\ddUfTjji`AatIaUr|a` -1.33 -HmVB`FaLT@cIIJiDUjjd@XUaMp|bP -1.33 -HiFDHNihBDdLdBdLddTgjeh@XQwHD -1.33 -HiDDpJzHaHcHcIIJeJjf@FAPfErA@ -1.33 -Hmv@`JVYrRQRiHYj`@`@XLfDtkrN@ -1.33 -HefDpFFXdDdLdLddjfeUTp@prfgdD -1.33 -HmT@bLhLyJgnVjjj@FBaBXU\LkrF@ -1.33 -HedLpJFXdDdLdLddlReUTp@pSiyA@ -1.33 -Hk\D@@iIYgU^GSXH@@@@XLSRngqHh -1.33 -HctB`HZUGprRQVYSUTtt@LJSB{^PH -1.33 -HmTH`HAprRIIPjjje@FDiaTwCJ|`@ -1.33 -HcLD@NwIIEKEeJuPPD@CCdpfx]yB` -1.33 -KAxXPTwQxIDYDEDIUMUSPAabXWD[` -1.33 -HedLPH[`\J|LddUbuUUP@pYLJagd\ -1.33 -HmTLPHeP\JBDjeUjjjT@XLfDwCrJ@ -1.33 -HcM@@@wIHhdd]JuAPD@CBTpj[agP -1.33 -HcLH@NrRQRqYRmTDA@@pyLInW^PH -1.33 -HkLFb@RfgRhByIgeYfjjY`A`VDi` -1.33 -HctB`HY]AprRQVYJUTwL@LLSByF` -1.33 -Hid@P@BJBDie_ahH@@FCAaMp|QJ@ -1.33 -HeT@`@|LdbLRPsU@@@CC`bfxYxbX -1.33 -HmtD`AdOAJYUgedHF@@XLfDwKq@d -1.33 -HeTD`HDGCIIEXituTuP@piLKiy@` -1.33 -HiDLHJXXdDdLdNkLddlrjfh@^Ip` -1.33 -HcvL@NamrRQVYQUTuR@LFSBxUyD` -1.33 -HcvB@JFUwIIEJhiUULp@pZDpjgdZ -1.33 -HeTH`HAprRSPiCMT@@@LNpj[agdP -1.33 -HmtH`HApRi[WeZhH@@F@xUMproH@ -1.33 -HetL@HR\ddRJULLuUUT@LBpj[b\H -1.33 -HefDpFjXdDdLdLddltUTuH@p`^Qp -1.33 -HedDjAeICI@iBiAiB^rRQR^UUS@B -1.33 -HcND@JADfUyU]Zj@@@FGEWCJ{rL@ -1.33 -HmTH`HAprRQIIVjji@F@iaMproHh -1.33 -HmVH`DTGCIIEHizjjd@XMaTwSrA@ -1.33 -HiDLPHS@BB\LdaTRVjh@XES\OD@` -1.33 -HedLPHZP\A|LddUfUUMH@pILKnPH -1.33 -Hmw@@@`Tke]Vy`@j@A`vESRoD`P -1.33 -HiFHb@E``IrRQUJjjPA`tIaTwHx -1.33 -HedJb@RfDj@nRYyyjjX@XYaSrF@ -1.33 -HcuB@NFFW\ddUfReULs@CCDpnQh -1.33 -Hmv@@JrRQRiHYj`@`@XLfDtkrN@ -1.33 -HmtD@@qJY{VUjh@@@X\eMproDc@ -1.33 -HctL@NF\ddTlVuUSM@CAhSBW^Pp -1.33 -HmtD@@yJUe^Uj``@@XCATwCJ|a@ -1.33 -HiDDpJzIAICICIIJeJjf@FDErA@ -1.33 -HcLB@@RUR[fVQuhHF@@XHb|JnGP -1.33 -HcLB@@Q]R[e[neh@a`@XHf|HjzP -1.33 -HcLB@@Q]R[e]nEh@I`@XHf|Hj[` -1.33 -KAxA`@xPD\DYIHjjjh@pZDpj[d\ -1.33 -HidD`HRgCIIEYLJjjh@XUaMp|a@ -1.33 -HiFDpFhXdDdLdLddlrjfd@XPwHx -1.33 -HmVL@JFUrRQRjJjjY@FCPfET|c` -1.33 -HmvD@LADfueYUj`@@A`vMproDP` -1.33 -HmTH`DAprRQRKrjjf@FCXUMr|bP -1.33 -HmNH@BAIfUmaeX@@@@A`pXproHx -1.33 -HmVD@Aa\ddUbajjjPAarXUMp|bP -1.33 -KAxX`Ia@tQDYIIcJjh@phHinxfD -1.33 -sGQBK@aPF`C@IUMT`NLdCHAPNR@ -1.33 -sGQLJhCPA`Djfj`GFRAd@hDI^R@ -1.33 -HcL@@LddTjTPsU@AP@LJSBW^YSR -1.33 -HmvD@DClbbbRJIfjVj@FEYSCOHT -1.33 -KAxX`Pf@xTxYIHkJjh@pHj[nHf@ -1.33 -HmLH@@RYVuiiV@@@@@XLe\Lkq@p -1.33 -HmtH@ErRQRiXYj`@`@X\fTwBoHH -1.33 -HiDDPNDGA`cIIEUJje@FEPfEWHX -1.33 -HiDLPJxP\FBLddUTjjT@XEBXWHX -1.33 -HiDL`HS@\LddQTjih@XTUMp|QL@ -1.33 -KAxY`DwQDIDYDYIIUJjX@prDsd\ -1.33 -HiDDPHXGBoCIIETjjj@FEIa\OHh -1.33 -HmtB@HPYrRQHzZfjjfh@XEaToHX -1.33 -HiDDPFxGBoCIIEYjjZ@FEPfDOHh -1.33 -Hid@b@|@eJYWxZB@@AarXUMp|`@ -1.33 -HeTH`LCDRVyTYi`@@A`pQS\OHd -1.33 -HeU@@@eJYW~F``H@FCIaTw\PI@ -1.33 -HmtD@@eIfUTUZBA@@XMaUpkrF@ -1.33 -HaD@P@bFbDfUjz@H@AaPIc]rJ@ -1.33 -sGXCJJAPF`C@CdjfjpGFRAd@h@ -1.33 -HmUL@NFFWIIEYdjjYd@XXfErI@ -1.33 -KAxQ`TdQdPTPeTuUU@FEIaMwHh -1.33 -HeV@@IrRQRiCMT@@@LJSBinIp` -1.33 -HmTL`HYP\LddUfRjinPAabXWHd -1.33 -HctB@HY]rRQVYJUTwL@LLSByF` -1.33 -HmTB@NFUrRQRqRjif@FAPfEqAT -1.33 -Hid@`@|DiyWaj@@@FCPUMp|PD@ -1.33 -HiDD`HPGCIHdcJjj@FCXUMp|`@ -1.33 -HmtD@@QIee^UZ``@@XLU\LkrF@ -1.33 -HidD`@RJAInUxZ`@@A`pHULOHx -1.33 -HeTD@@IJUmQfj@@@FCQS\L|QB@ -1.33 -HmvH@AAIYWYnh@J`@X\FESRoH` -1.33 -HidH`H@HRme^Eh@@@XLaTwCr@@ -1.33 -HiFL`FaL@HrRRjQZj`A`VEp|a` -1.33 -HidH`HAprRQVKajij@FEIa\OHX -1.33 -HedD`HDGCIIEXiUTr@LJSBz^PH -1.33 -KAxX`Pw@xUxYIHkJjX@pILJnQp -1.33 -HmVL@NaerRQVYJjfi@FEIa\OHd -1.33 -HmVD@NalddUfTjij`A`rXWRoHD -1.33 -sNqBbJBRBdMHCcNRRUUU@LEWrD -1.33 -HedH`DAprRQRKuUU@CAlJfz^PH -1.33 -HmVB@NaiWIIEYeJjZX@XDfEwHT -1.33 -HiD@bLhLyJgmjjh@X\DIa\ODi` -1.33 -HiD@bLhLyJgyjjh@XBDHUMp|c@ -1.33 -HmtL@@SDfUmYUj`@@A`S\L|Re@ -1.33 -HiDDPNDGA`cIIEUJke@FFIa\a` -1.33 -HiDH`HAprRIIFjjPA`rYS\OD@` -1.33 -HedD`HdGCIIEXmUSR@LJSB[nPH -1.33 -HiDL`HXP\LddUfjjX@XDfEwDXP -1.33 -HiDL`HxP\LddUTjih@XDfEWDxP -1.33 -HcvD@AalddUffeUMU@C@TpnFUt -1.33 -HeTH@@RUYTYj`@@A`HQeMpsrD@ -1.33 -HmTJ@H[iWIIEYeJjZX@XXfErE@ -1.33 -Hid@`@\Die_ahD@@FGIaTwCr@@ -1.33 -HidH`DBHR[e^FX@@@XDATOD[` -1.33 -HiDLpJXXdDdLdLddlrjfd@^Qp -1.33 -HiDBb@RnJ`Kdf]Yji`A`fCrB@ -1.33 -Hig@@@idiUWajjj@FDaBXUMp` -1.33 -KAxHPTtRBRFRGNfRRVZjZ@OHx -1.33 -HeTL@@SDf^UFVh@@@XES\ODrP -1.33 -HiDH`HAprRQURjf`AaRXWCrJ@ -1.33 -HedL@NF\ddTlUUSH@pJDpnHp` -1.33 -KAx@`@xQDYIIcJjh@pjDinxfD -1.33 -KAxH`MpNEAFRRJrje@LBaLKdT -1.33 -KAxH`TpND^FRRJNjZ@LBSB{dP -1.33 -HaDH`@b`RVU[j@@@FEXUMwDB@ -1.33 -KAxI`UtRBRFRFRRUJji@LHKdL -1.33 -HaDH`HAprRQVMuUU@CBdpf{dT -1.33 -HiUH@HPDiUWBxZVeh@XIp|Rf@ -1.33 -HiFH`DDGAJiijjh@XLfES]rA@ -1.33 -HiDH`HAprRQVJjiPAaRXWCrF@ -1.33 -KAxHPTtRBRFRGUfRRVZjZ@OHx -1.33 -KAx@`PD\DYIHjjjh@pZDpj[d\ -1.33 -HefD@Nb\ddUTuUUH@pYLJf{dB -1.33 -KA|I@YBAxYICDjjh@phBinxdH -1.33 -HefL@NairRQVYUTt`C@dpny@` -1.33 -HiD@`F\LddUTjjh@X]BXU\OHX -1.33 -HiE@`HZoCIIEUJij@FAIgCqBh -1.33 -KAx@`AxPDYIIcFjh@pjDinxfD -1.33 -sNpbJyDJHtP_CIIKJi`FFbwDV -1.33 -HiFH@HGIIEKjjj@FCIaUp|a` -1.33 -HiDD`NDGCIIEUJkf@FFIa\`P -1.33 -HidD@@EIYW[f@B@AaTXUMrA@ -1.33 -HidH@@RYm^Fh@@@X\FES\OH` -1.33 -HefL@L@YRUeVjjh@XRDHUMpr -1.33 -Hid@@DjUfaBB`@FCPfMp|Pj@ -1.33 -HidD@@EIYW[j@B@A`pQaTwHD -1.33 -HmTL@HY\ddUfRjinPAabXWHd -1.33 -HedD@F{IIEYeUST@LJSBF^Q@ -1.33 -HedB@HXYrRQVZUTs@CCDpnQH -1.33 -sNpB@DQppPPaJYjj`FEDU_Eb -1.33 -KA|A@TCaddbjjj`CAhSB[nQP -1.33 -KAzA@QsAFRRJrjf@LJaLInQp -1.33 -KAxY@Pf@DYIIUEjh@pKB[nQP -1.33 -HiFH`APGAJiijjh@XUaTw\`P -1.33 -KAxI@QpNFRRJjjj@LJSBinQp -1.33 -HiFD@Jx\ddT\jjX@XUBXP|b` -1.33 -HiFH@AcIIEXjjj@FCIaUp|a` -1.33 -sNxBB@bRBdMHYIIUUT@ppkyB -1.33 -HaF@B@BTjWzXHB@AaTIaUrN@ -1.33 -sJXLHhCPA`H~j@\YHFPB`\d@ -1.33 -HiDH`HApRjUZjj@FCIaMp|b` -1.33 -KAxI@QpNFRRJjjf@LBSB[bUp -1.33 -KAxI@QpNFRRJjjf@LBSBkbMp -1.33 -KAxI@P`NBUNuTt@XUaTw\PD@ -1.33 -KAzQ@Qs@xYIHkJjX@pJDpnQp -1.33 -HedB@H[irRQVYUTt`CCDpnPH -1.33 -KA|P@QvRRJjjj@LFSBinyD@ -1.33 -KAxX@AaYHhdZjh@pjDinyA@ -1.33 -HaF@@@Rfu[j@@@FC@fES\c` -1.33 -HidH@@RYm^Eh@@@XUaTp|c` -1.33 -HaDH@@RVU[j@@@FCAFTw\`` -1.33 -HiDD@J{IIETjjj@FAPfEqFD -1.33 -HiDL@JX\ddTZjfd@XXfErN@ -1.33 -Haf@@@RiUkfzjjh@X]BXUMp -1.33 -HiED@NFFrRQVZjfPAabXWHD -1.33 -HiDD@NGIIEJjje@FAPfEqJX -1.33 -KAxQ@\CaddbjjjPCBhSBkdL -1.33 -HiDL@HX\ddUfjid@XXfErN@ -1.33 -KAz@@QvRRJjjj@LFaLJfyG@ -1.33 -KA|I@]C@xYIHkJjX@pqLKd\ -1.33 -HaF@@@RnU[fjj@FCIaTw\b@ -1.33 -HigL@Ds`XTfUfn`BH@FF@p` -1.33 -HigL@Ds`XTfUfnZif@GfIg@ -1.33 -KAxQ@PCaddblji`C@dpnyC@ -1.33 -HaDD@@yIe^f`@`@XDBUwDp` -1.33 -HaDH@@RYWifjj@FEIaTwHx -1.33 -HaDH@@RVU[f@@@FEQeMwHH -1.33 -KAz@@ArTjmUT@X\DIaUwHX -1.33 -KAxH@UvRRJjjj@LBaLKbMp -1.33 -HiDL@HSDjeVjj`A`QTw\`P -1.33 -HiDD@H[IIEYjj[@FFIa\`P -1.33 -KA|A@PC`eTsUU@FEIaTwHx -1.33 -KAxA@@xYIHjjkh@pILInQp -1.33 -sNtDHpxTHrRQVjTA`Uc^Q` -1.33 -KAxH@QvRRJjjj@LJSBknPp -1.33 -KA|P@]FRRJjjj@LJSBknPp -1.33 -HaD@@DjUZxHD@A`tHUMwHp -1.33 -sJPJaPRPTai@r@zSGuPCrP -1.33 -KA|X@XB\drzuU@FFXw\Pj@ -1.33 -sNxLGIARFdLddjjj@XQ|Qh -1.33 -KAxP@@djkUU@FG@fES]rH@ -1.33 -KAxH@ArRjmUT@XLBXU]qHX -1.33 -HaF@@@RYe[hB@@FA@UMqLx -1.33 -HiDH@@RYuVjj@FCIaTw\`P -1.33 -sOpIAVBTfUk`@@FEVM_H@ -1.33 -HiDB@@QnRY^vjZ@FBDOHp -1.33 -sNpY@jsPGdf^Zj@XKGbk@ -1.33 -sNpDADQpRYzjhAaPcWqS@ -1.33 -sNpD@xTJrRQVjhAaXl[rL -1.33 -sJQBBGBQBbMDQ}T@ptVyB -1.33 -sGPL@DQppPeKUT@pHQoEL -1.33 -sFqlAcJATEhDiTvjhAyhj -1.33 -sNpD@xPHrRQVjhAaXl[rL -1.33 -KAxA@@xYIHjjkl@pqLKd\ -1.33 -sNyLGYHJPtaddeeUHCqU` -1.33 -sNpdE`tRHRkzjhA`XZ~HX -1.33 -sNpyhlZqVGkszOvj`FBV@ -1.33 -sNqhHlGCIHcJj`FFM_LE` -1.33 -sNqhHlOCIHcJj`FAAkxe` -1.33 -KA|@@@djkuU@FEIaTwHx -1.33 -sNxHHGCIIEZj`FEVM_I@ -1.33 -sNqhHlKCIHcJj`FFM_Dl -1.33 -sOpHAbILkW@@@LBEgqF` -1.33 -sNpH@xYIDYUT@phakxe` -1.33 -sJPLADQpTPdwU@LBEcrP -1.33 -sGXDHGByBUSUPC@kF|d@ -1.33 -sGPDADQpRUjj@XTKF|d@ -1.33 -sNqhHjGCIHcJi`FBsx`` -1.33 -sJPlLQxRHTQGtpCAQ\a@ -1.33 -sGQhHlGCIIKUPCAF|tV@ -1.33 -sNxHHpcIIEZjPFEbq_IP -1.33 -sNyHHpxYIHkUR@pJqoI@ -1.33 -sGQdEbOBQFRRFZ`FDgDZ -1.33 -sGXhMDOCIHUUPCC@wfbp -1.33 -sOxA@IRi^lH@@XVKF|c@ -1.33 -sNpIEPKdkejj@XFJofFH -1.33 -sNpIMP[dj_jj@XTQE|Vh -1.33 -sGXDHGBxBUSUPC@kF|d@ -1.33 -sGXDHGBzBUSUPC@kF|d@ -1.33 -KAzD@XPHwIMkMLpAxb\ -1.33 -sNqHHGCIIEZjPFAVMyF -1.33 -sOpHAHILkW@@@LLc^KL -1.33 -sNpHADIJkUT@pXbqoHp -1.33 -sNy@iYMyJijjPFFVOHp -1.33 -sGXLKIARFdLddmU@LDZ -1.33 -sNqhAVjAJYjj`FFfOEV -1.33 -sGQi@jZ@|dsmT@pfxcP -1.33 -sNpIEPKdkejj@X\QXu` -1.33 -sNpH@xIRkUT@p\VM_H@ -1.33 -sGPH@xYIDZi@XVKF|`@ -1.33 -sGPD@xTJRjZj@XFKGdh -1.33 -sNxHGGCIIEZjpFFVOI@ -1.33 -sNphIPxYIDYUL@prsy@ -1.33 -sGPhH`xYIHZj@XKGfbh -1.33 -pnH@BTlzemUR@X\QXu` -1.33 -sGXDHGBaBUSUHCCKGdh -1.33 -sNyHEAxIWKUT@pNM_DH -1.33 -sNyHEAxIR}UT@pNM_DD -1.33 -sFxHHOAIeMjj@XEXwd@ -1.33 -sGPM@xRPT`Nc}U@LMcP -1.33 -sNtHHpxYIHkUJ@prqyF -1.33 -sGQ`HmddejhA`c^ZK@ -1.33 -sNq@KddbmUPC@qX|c@ -1.33 -sGY@iYMyJijhAaecrP -1.33 -sGPhAUPISMU@LML^IT -1.33 -sGPhHaXISuU@LMc^HH -1.33 -qCcRAZTDyIj`LINXK@ -1.33 -sGPhCQbILuS@LLI^S@ -1.33 -sJQDDH`qBS\t@pPOI` -1.33 -sJPIAxBTiZhA`Xl^P@ -1.33 -sNq`AbeLuUPC@qU|VH -1.33 -sJPBHxJPt`YBOj`Gd` -1.33 -sNphH`xIUKUT@pvkyB -1.33 -sGQHHGAJejhAaecqB` -1.33 -sJPdE`DPHRie`FDgDB -1.33 -sNy`LDtfuZj@X[U|RH -1.33 -sGQHBLQIejXAaaMqJ` -1.33 -sJQdEbOBQD_M@LINKD -1.33 -sOp`Jtjeqje`FBqxh` -1.33 -sGPhCQbILuS@LDIqZ` -1.33 -sNt@H|ddUje@XYX|c@ -1.33 -sJYHEAxIVuPCAX|pb@ -1.33 -sGXHHOAIejhA`Uc^P@ -1.33 -sJPIEPKdkZhA`h^XK@ -1.33 -sNqhHlOAJeZj`FAAk@ -1.33 -sNx@GddbmUPCBqXodh -1.33 -sNpH@xIUMUT@pjqkyH -1.33 -sGPhH`xISuU@LMc^HH -1.33 -sNq`@jdrkTpCAE|f@ -1.33 -sKRAADQJTnKT`OLE` -1.33 -sNx`JDdrkUPCCFodp -1.33 -sNy@DDeeZj@XZX|UX -1.33 -sGP`@TfVj`FEDVOIP -1.33 -sJPhH`DIVmPCAX|`@ -1.33 -sNp`@dfUZf@X[F|c@ -1.33 -sJPH@xISuPCCSGbB@ -1.33 -sNp`@df^Zj@X[U|a@ -1.33 -sGPH@xIUMT`LBl[rP -1.33 -sGPhHPxISuS@LDkr@ -1.33 -qC`HAps`dmPFBbxa` -1.33 -qC`HBHTPduPFFBwI@ -1.33 -sNx@GddbmUXCCKGd` -1.33 -qCcRQXV@zOTAaAsQX -1.33 -sFy@LDigVfhAaEqF` -1.33 -sJPLAHJPL`dwS@OI` -1.33 -sJPDAxPHcvhAaIsKD -1.33 -sGPH@xIUMT`LCEcrT -1.33 -sNu`LPfdvkSHCqJ` -1.33 -sJPXHlPjQzt@pfyB -1.33 -sNqP@mVdssTpCqY` -1.33 -sGQ@JeTuT@pLVOIP -1.33 -sGY@LDizj`FFQoI@ -1.33 -sGP`Adinj`FFQoI@ -1.33 -qCpPP^BRu@XI[bD@ -1.33 -qCqPZH^D^hCBCfbp -1.33 -sGY@DDeYj`FFqoED -1.33 -sJQIH@`SGmPC@aX` -1.33 -qCpRPA@eIj`LDmr@ -1.33 -qCpRP^@eIj`LDmr@ -1.33 -qCcPQXJd]XCB[d@ -1.33 -sJQ@@eKU@LML^Q@ -1.33 -sJP@DkVhA`Pl^R@ -1.33 -qCbPXUbRt`XHSdP -1.33 -sGPP@mTf]jPGbq@ -1.33 -qC`PBHRZhCCA[d` -1.33 -qCpHXRBdDfj@|Tp -1.33 -sBP@DiVj`FBFxh` -1.33 -sJPXHlQiQzl@|a@ -1.33 -sJTILPyAdiZ|Ay@ -1.33 -sJPHIxQ}T@prqyH -1.33 -qC`R@HDqz`LBHl -1.33 -sJP@DjVhAaecrP -1.33 -sJT`LPdfvdAxdP -1.33 -sGP`ATeUnPGba@ -1.33 -sJPYHlQiGh}V@P -1.33 -sJPYHlPZGh}V@P -1.33 -qCr@XISRA`enR@ -1.33 -QMA@HoAIXFD\Y@ -1.33 -QMACp_AIhFE\Q@ -1.33 -qC`@ISJAaaErX -1.33 -QMJd|BTf`XL|` -1.33 -QMFIDjN`XQqd -1.33 -QMFajByIhGfR -1.33 -qCh@CIRrAxe` -1.33 -QMFiK@zN`^YH -1.33 -RFQALXOD` -1.33 -`IGPCr@ -1.33 -HiT`@@rnRfUjEnBB`PA`bMqLD -1.33 -sGY@DDf]j`FBVxcP -1.34 -QMdXZWde`^T -1.34 -RFDDaFCr` -1.34 -Hev@@@rRIIRus]UUUP@pFDJfxYyF@ -1.35 -HaE@@@aJyUnX@@@XEeMwD`` -1.35 -sOpHAbILkW@@@LJEb~R` -1.35 -sKX@@eKcUPC@bX|b@ -1.35 -sGP`ATf]jPFDwDb -1.35 -HcND@LCTeme^UZh@H@F@iaMpsoH` -1.35 -HiT@@LddTQQnFjjj@FGPfESCrN@ -1.35 -HeT@@DjU]k``b`@XMBXUMqAd -1.35 -sKP`@Tixjj@XZK\a@ -1.35 -sJX@@dmU@LBEcrP -1.35 -QMA@HPaIhFE\Q@ -1.35 -QMBBHRZA`cr` -1.35 -sJX`BDdvu@LInID -1.35 -HeTLbHS@BL{IIKDdLkP@@@pragbMp -1.35 -sOq@@drm\@@@pHM_Dl -1.35 -HidH@@RYfVF@b@@XXAMsJxP -1.35 -sGP@DiVj`FADMxe` -1.35 -sJPhH`DYIBm@LInHD -1.35 -sJQhHlOAJmj@XS\PH -1.36 -qCaPQCpRfhCsAX -1.36 -QMJH|Df`^H` -1.37 -HeTB@@xYRfUVfjjj`AatES\L|QL@ -1.38 -sGP@DkUj`FEDVOIP -1.39 -sFt@AdiTt@@AaIsHt -1.39 -qCaPQCpRfhCBKbF@ -1.39 -Hg}B@DpAV|bbbRbrK]imUMMU@CAlJnN~IN` -1.4 -HcnH@LAIYe_x^fjjjj@FDhUMprn|PH@ -1.4 -HeTD@@QIVUnEjjj@FCXS\L|RJ@ -1.4 -HidH@@rJJIEn`HH@FA@UMqLD -1.4 -KAxP@@dsjuU@FEIaTwHx -1.4 -KAxH@@bSJkTt@XEaTwHx -1.4 -sOx@@drm]UT@pXbM_I` -1.4 -sOq`Afdlm[UT@pbyhZ -1.4 -sOp`@dfUMZj`FFqoHp -1.4 -sJPHAVIJuPC@bK\a@ -1.4 -sGPhLQDIK]M@LDKrP -1.4 -sFy@LDi_FfhA`d^JT -1.4 -sJQHBGAJ^i@XJKbF@ -1.4 -sKY@LDi\ZZ@XQ\TH -1.4 -qC`PCDRVhCCB[dP -1.4 -sGQ`@bdwML@pbyJ -1.4 -qC`PCDRZhCCBKdp -1.4 -QMaDbKpRZAaGFP -1.4 -qC`@IRtAa`mrP -1.4 -QMbh|BTf`XSqH -1.4 -qCr@XIKVAxa@ -1.4 -RFTEPQP|h -1.4 -RFTPbQP|` -1.4 -sOq@@drm\@@@ppUylV -1.4 -HidH@@RUe^Fh@@@XLATwCqHP -1.4 -HifDAHAHeNR[e^Eh@@@XHW\rfD -1.41 -HidB@@kaReYrZjjh@X]FES\OHP -1.41 -HeT@@DjU_k``b`@XCBXUMp|bP -1.41 -sGQhHlOAJmZhA`c^P@ -1.41 -sOq@@drm\@@@prsy`Z -1.41 -QMFIKBN`^YH -1.41 -sNy@DDeUZj@XEXwbc@ -1.41 -HmtJ@@siUJYn~ajjjh@XCBDwCJ|SJ@ -1.41 -qCaPQCpRmhCqC@ -1.41 -sGX`LDdvmT@pVODj -1.42 -qC`XBPTaiAIj`OI@ -1.42 -sNqiHl@c]ddeRuPCAF|c@ -1.43 -QMRIOBN`^YH -1.43 -sGQ@@djmT@prqxiP -1.43 -HeT@H@bBbFbAbDfYnzXHb@@XDALODzP -1.44 -Hif@`D@HRUe^EX@@@XTATw\`P -1.44 -KAxH@@bSZsUT@XTaTw\c@ -1.44 -sNy@aAL{IILZj`FAVMyF -1.44 -sGY@aALyJkjhAaecrT -1.44 -sNp`@dfUZf@XHwbs@ -1.44 -sJY@aALzOj`FBVyB -1.44 -qC`@IVtAa`mrP -1.44 -QMPBchFBWI@ -1.44 -sJP`@TeZhA`QL^Q@ -1.45 -sJQiHlOC\eVu@ODB -1.45 -sJT@@TeZhA`QEnP` -1.46 -qC`@IWtA`hnS@ -1.46 -`IoQHFD -1.46 -HidD@@QInUxV`@@A`RES\Sa@ -1.46 -Het@@DjYUX^d@@@@AarXUMp|bP -1.46 -qCb@AIZ`LLInQ@ -1.46 -sOpH@DILkW@@@LJlZ~P@ -1.46 -j`iA`@@V|eLsJnmARMiu@A@DT@@LFDYqQg\pJw` -1.47 -JoBAQDIg@DYvRRVJKIIRmnmA@@@@AaS]ioqAl -1.47 -JoBAQDIc`DYvRRVIJYKCIvm@@@P@AaULJoqML -1.47 -HknJcEaLtp|LyYOdj~UvFVh@I`@XES\OH@ -1.47 -JobB@@VeLsJntLgkt@D@Q@@FCDwJ[|p]l -1.47 -HmL`B@aBB\dRabRpiUj`@P@XTwCJ|PL@ -1.47 -Hk^@@@rRJFIQDYtz`@@@@F@ie\Lz_HT -1.47 -HmtBbHSBCpKlddqbReVj@@@FAMpsqLT -1.47 -HcNBAHAEvISdfyW[aZ@BX@FAES]rM@ -1.47 -HknJ@D@ae\bbbRtJifjiZh@XYc[rC@ -1.47 -HcLBbHSBCpKdjm{U]Zj@@@FA\LkqFt -1.47 -Hid@p@bFbAbDfUfn`BH@FE@fLOHx -1.47 -HeVD`Aa@BLdabRgRl@P@C@bkix`B -1.47 -Hid@P@bH\Df[Waj@@@FGAaTwCrH@ -1.47 -HcNJ@LANF\bbTRbILuTmT@LH[bKh -1.47 -HmMH@LhDigm\jUid@H@FAMpsqDT -1.47 -HeT@`@\DieUzZBA@@XBfES\L|`@ -1.47 -HmtH@@RYeY[hBBh@FGAaTLkrN@ -1.47 -HifDAHAHeNR[e^Eh@@@XXwCqBh -1.47 -HmvJ@LANFTfVVRYjiZ`AaC\RU@ -1.47 -HeTH@@RYe\YjB@@AapES\L|RL@ -1.47 -HcLH@@RYeYVz@`j`@X\FEProHt -1.47 -HaD@b@|@eJ[Unh@@@XLfES]r@@ -1.47 -HidH`ACDRYWZZ@BP@XTBXU\c` -1.47 -HiTH@@RgeXSaj@B@A`tES\OHP -1.47 -HaDH`HApRnU[j@@@FCQaTw\`@ -1.47 -HeTD@@YIfUqehH@@FEEWCODq` -1.47 -Hid@`@qDee]nh@H@FCAFES\`P -1.47 -Hid@@LddRL[jjj`A`tIa\ODi` -1.47 -KA|Y@]BX@QddeRVj`C@lJfyG@ -1.47 -HeTD@@QIemQej@@@FAESSqND -1.47 -HifH@AAJ[W[j@B@AaRXUMrA@ -1.47 -Hif@@@RfU~F``@@X\BXS\OHh -1.47 -Hif@@@RUe^Fh@@@X\DHUMwHD -1.47 -HidH@@RUe^Fh@@@X\DHUMwHD -1.47 -HaD@P@dNdDfUZZ@B@AabDwHp -1.47 -Hif@@@RYWZZ@B`@XLBXUCrN@ -1.47 -HeVB@LANEIeeRYjiZ@FDMqJd -1.47 -sJQL@hCPA`DijhAqd`Y@JArP -1.47 -HaDH@@RVU[f@@@FEQaUwHX -1.47 -HaF@@@Re]J`@h@FEPfDwHx -1.47 -HaD@@DjWzXHB@A`TYW\QB@ -1.47 -HaFL@LAFRYUJfjZ@FDUqLx -1.47 -KAxD@@c\dwLuS@FFIg\b` -1.47 -KAxH@@rTzmST@XDfEwDb` -1.47 -KA|P@HBSJsTt@XTfTw\`` -1.47 -qC`XBHTQhAIj`NIdBBByH -1.47 -sOpHAxILkWUU@LGEcWr@ -1.47 -sGQHHGCIHcUPC@kF|`@ -1.47 -sOx@@drm]UT@pXbqoHp -1.47 -sGQHHGCIHcUPCCHwbF@ -1.47 -sNqHHGCIHcJi`FFV_DJ -1.47 -sGPH@DIJmU@LJHl^R` -1.47 -sNp`Jtjejj@XVXu|b@ -1.47 -sJPDAbGDRUj`FADqyD -1.47 -sGXA@IrRHuR@plVMy@ -1.47 -sGPhCQDILmR`LDIqK@ -1.47 -sJQDDGBQD_U@LML^Q@ -1.47 -sNy`LDtfuZi@XKGbU@ -1.47 -sNx@@djoUPC@kF|c@ -1.47 -sNp`@dfvZj@XEZodH -1.47 -qC`HBHtPdmPFFDwH` -1.47 -sGQHDHaInfhAa`[rX -1.47 -sNq@@dssUPC@hu|f@ -1.47 -sJPHAXIRuPC@qX|`@ -1.47 -sGPP`cUuyInZXA@ -1.47 -sJQ@@eMU@LLl^R@ -1.47 -sGQ@@dsMT@prMyL -1.47 -sJQ@@dmU@LBHmrD -1.47 -QMCCDoAqDf`XH|h -1.47 -sGT@ATeWfpGbV@ -1.47 -QMABHWAIhFBWI@ -1.47 -QMBcpIchFCOH@ -1.47 -qC`@IS^Axe` -1.47 -RG@aMt\OH@ -1.47 -QM`PfzO`^R -1.47 -QMFIOBMP^P -1.47 -QMPARUAxb -1.47 -HaFH@BAIf]n``@@XYe]s@I` -1.48 -Hg|H@@RfUYwySn``@@@@XJfDwCNg_HT -1.48 -Het@@DjYUX^d@@@@A`rDwCODr` -1.48 -sGX`BDdvmT@prqyJ -1.48 -HifDAHAHeNR[e^Eh@@@XXUMqND -1.48 -RF@Qp|R@ -1.48 -sJPXhlQx[ct^u@OH` -1.48 -sJPhHaxIRuPCsCD -1.48 -QMFIOBN`^YH -1.48 -`IK@Cr@ -1.49 -HaD@@DjWjXHB@A`f]phRf@ -1.49 -sGQ@@eNuT@ptqxeP -1.49 -qC`XCDVIlQIj`LLEnR@ -1.5 -Hif@@@rRJEKaj@@@FCIaTw\`P -1.5 -HaDH`H@HRnU[f@@@FEXUMwH@ -1.5 -sGP`AdeUj`FBMxh` -1.51 -sGQ`@jdrmR@|VH -1.51 -sNx`DFdkKUHCCKWba@ -1.51 -qCh@CIKTAaaErX -1.51 -QMBCDRYAaGFP -1.51 -HiT`@@rnRfUjEnBA``AabMwHD -1.51 -sJY@DDfvdAaMqH` -1.51 -sJQ@@dkU@LCEcr@ -1.51 -RF@QPpce@ -1.51 -JoBA@@YviSJwZ}C[uUTDA@@XSA\LkiwsDip -1.52 -JgBD@@YHhhhddZFSvz@B@B@@LFInT{y`sh -1.52 -HcND@BADf{YU]Zj@@@F@ie\LkoHH -1.52 -Hid@`@BDiyWaj@@@FGAATwCrD@ -1.52 -HeTD@@eJ[WVz`@h@FEIaTwDFP -1.52 -HidH@@RYWZZ@B`@XLBXUCrN@ -1.52 -sOx@@drm\@@@pHM_Dl -1.52 -sNp`ATfUjj@XTQF|VX -1.52 -sKP`@Ti\Zj@XJ[dP -1.52 -sJQ@@dmU@LML^HH -1.52 -qCcRQX^FzNtAaEr@ -1.52 -sNx`BDdw[UPCCKWbK@ -1.52 -HmtL@@QTfyeQehBA@A`ULL|QN@ -1.53 -Hk^H@DAInUm^GSZ@@@@@XLWRngqDh -1.54 -HmNh@DkaTDfVYVzUZiYj@FFHL|aP -1.54 -HmLD@@QIe[VfeVi@B@A`U\J|SI@ -1.54 -HaF@@@RYe[hB@@FEAaTwHx -1.54 -KAxD@@c\dr|uS@FDYqBx -1.54 -sNu@EPdrkUPCCKWbK@ -1.54 -qC`HBHc`dmPFFBwI@ -1.54 -sGQ`@bdwMT@pvMyD -1.54 -sGP`@dfUjPFBuyB -1.54 -sJP@Dk^hAahmrD -1.54 -qCa@BIWTAaMqQ@ -1.54 -QMABHcAIhFBWI@ -1.54 -qCaPSAXRVdCqA@ -1.54 -sJP`@dfvlAxdP -1.54 -qCb@AIV`LEMrH -1.54 -qCp@AI^`LInQ@ -1.54 -RFBFIFDXLHyP -1.54 -QMBBpRZA`sr@ -1.54 -`IC`Cr@ -1.54 -qCq@XIIf`ODl -1.54 -sJP@DiVhA`QD^S@ -1.56 -sGP`@TfUi`FDwDj -1.56 -qCj@KAIV`LDmrP -1.56 -Hev`@@rfeJY{ZxYBBFH@XXfCrI@ -1.58 -HmN`@@rfeJY{^nFP`ah`AabXOHT -1.58 -sGP`ATiVj`FAbuyB -1.58 -JoBD@@ISZzrk][t@E@@@@XJfESKivHD -1.59 -Hg|@@DjU^Uzx{BB@`@@FDpaTLki|SK@ -1.59 -HeV@@@RfUahHB@A`rXUMwDBP -1.59 -Hie@@@aJVuxV`@@AaQTwCrL@ -1.59 -HaE@@@aJyUnX@@@XUaTw\b@ -1.59 -qCb@AIVPLInJH -1.59 -Hg|H@@RYfUWd}mh@@@@@XBUMprn|P{@ -1.59 -j`qAB@G@bDfYeUd[Uj`@@B`@AahAJLxJRmV}rD@ -1.6 -jdyP@@@^Rfuue]f\lyjVX@Jh@AaiFBTXkQkAcr@` -1.6 -jhyQ@@LT@eL}klkbde^CSH@P@P@@pds`iFl{p^PP -1.6 -jhia@@G@RYfUW~d[Uj`@@Bh@@XFA@eF\EIVoAyBp -1.6 -j`q`@@@YIEBedhdnB]zh@J@@@@XZQ`eF\tZso\aH -1.6 -j`q`B@K@|DifUW~EiQj@@@J`@AakAJLxJRcN}r@@ -1.6 -Hgl@DLdBdJdFdAdIdCdKdLddTbdYeUUTt@LD{^Ph -1.6 -j`q`@@@YIEBedhdnB]zh@J@@@@XZQ`eF\ehug\ax -1.6 -j`q@`@@LRYfWg^Qg^jB`@@@@FE`PIQ`iJtZso\a` -1.6 -j`qH@@@P]yJVYU_yFuYh@@@d@@XRIQgARUjwH^@ -1.6 -jhiP@@@NRYfUW~d[Uf`@@Bh@@XZ@RcNBdkW`|aX -1.6 -jhi`@@@ISLwZkf|xMUP@@@@@LO@``cNBdkQkN|D -1.6 -j`qa@@D@RYYUg^Qg^Z``@@@@FDdTXkQkN}sAAR@ -1.6 -HglLxJ[hBLdBdAdIdCdKdLddTbdYeTmUT@LHwdJ -1.6 -jdyP@@@QrJJJJjIJILEYtADP@U@@CAPBTYqVoAb -1.6 -j`q@@@DjYVWWyjwhI@HA@@A`YFJLxJRmFm{dG@ -1.6 -jhia@@G@RYfUW~d[Uf`@@Bh@@XJIQgARUkp^Pl -1.6 -Hg^BpLaIT@b`aiCIICEELb]kU@h@@LJx]N~QP -1.6 -jdip@`OAbBPIHJdKRBSLwKKnpTuSMU_h@OHR@ -1.6 -JoB@Q@^@SddbbaRRrv[uP@@@@@XVFES\Lkivx -1.6 -JoB@P@NFRRJJEIKKYoU@@@@@AanTwCJz]orB@ -1.6 -j`q@`@@^RVUvUugCVX@H@I@@F@lDhrRmFxbC` -1.6 -HkLLHDYP\HbJ\I\LddqdQdjjjj@FGQa\NgrE@ -1.6 -JoB@H@^@~BULrj~mf}PA@@@@FAaaTwRng[|`P -1.6 -HctHXMRPrPjPZPFPfPrRQRFDuUUT@LLy]yA@ -1.6 -JoBDH@QPIPIS\rjzv[uP@@@@@XKS\LkivHP -1.6 -JoB@@FRQQIQKH}moAHA@@@AajYS\Lz]orE@ -1.6 -j`aP@`G^AHDdERAiAIf[eWvBfjYjoP@^HyH -1.6 -Hkn@PHApiprRQJFIGSjhJ@@A`lXS\Lki|b` -1.6 -JoC@PD@xIU\vjzv[uP@@@@@XZUMprng[|b@ -1.6 -Hg\BPHSS@HxHrRPqQISKZtD`h@CAjXYV~Qp -1.6 -JoBAPDIa`DYIIUHiEEMrzuUUMT@F@xPrnvx -1.6 -JoBDPD@xITlvjzv[uP@@@@@XZUMprng[|`@ -1.6 -HgmL`JULHOCIIEIRdiMUUU@CA\JfxYT{yF` -1.6 -Hg\@x@dBdFdAdEdCdKdDfYnnfBHbj@AyF` -1.6 -HknBPLaFx@``cIHXhhTmMZe@@@FECJz_D@` -1.6 -Hg\JPHSAd@b`cIIBhhd]ikTB`P@LJ[ev~QP -1.6 -Ho~L`LaC@HrRPjJIKG[VhJAH@FGYS\noqAd -1.6 -HklBPHQ]@HxHrRPqIJJSV``T@A`qTpr_Hx -1.6 -HklDPDp@b@cIIDXdmevV``H@FGQS]JgrA@ -1.6 -HklHPHApiprRQJFIGSjhJ@@AaNDwCJz_Hh -1.6 -HctLpHS`\J\F\LddRLbeUUU@CClIae]yG@ -1.6 -Hg^L`LaM@HrRPjIIHjZuA@d@CAl[iV~IP` -1.6 -HedFIDpnFPBHBJBFBBz^rRQURRuK@CAHh -1.6 -Hg}@@@aJVYU^Svz`@@@@A`HMprnwphJc@ -1.6 -HkLLPDtp\ABLddTbLLjjje@FGXUMtkrA@ -1.6 -HmTHHDApbHipVHRjvYjjj`A`LXS\LkrJ@ -1.6 -HcMB@hDDWXeNF]yInUnzV`BF@AaaUwHd -1.6 -Hg|H@@RYfUWd}nh@@@@@XJDES\LkoDNp -1.6 -Hg\D@HkIIDhTeDmuTDE@@LIpfzUt{y@` -1.6 -HcLDPDp@b@cIIDYdmJrt@D@CAh[ag^QP -1.6 -HmTDpHPGBgAgCIIDcEJjjh@X]aUproHX -1.6 -HcL@P@|I|DifUl]hJB`@FDiaTwBn|PI@ -1.6 -Hg}@@@mIe]e^ftx@H@H@A`HHUCJwqLt -1.6 -Hg~@@@RYfUWd}mh@@@@@XJUMprng_H@ -1.6 -HedLhDp`BJdFdAdIdLddTgdmUP@|Pn@ -1.6 -Hg|H@@RVUvU[cm`@`@@@XCaTtki|RK@ -1.6 -HmtDPDp@b@cIIKDeafV@B@AaUMpkrH@ -1.6 -HmvD`La@BLddNbReUjjj@FCTwCJ|SB@ -1.6 -Hk\H@@RfYU\]Tz@@@@@FDxUMprn|`p -1.6 -HmV@PHApEprRQQMRjjj@F@iaTwRoHD -1.6 -HeVD`La@BLdaTRPrmUU@CAbinF^HF@ -1.6 -HiD@H@\HbNdAdLddqTjjh@XUBXU\a` -1.6 -HmtJ@@IaUIf[oijjjh@XJDIaTwBoHd -1.6 -HmUH`Dr@|LdbTLTjjj`A`HES\LkrL@ -1.6 -HmtD`HP@cIICLeaeZ@B@AaUMpkrB@ -1.6 -HmtD`HP@cIICDeiUZA@@A`qTproHx -1.6 -HmUD`LJD@HrRPqIIZjj@FCTwCJ|`` -1.6 -Hk^D@DBTfYYwimMjdDB@A`vMpkoHL -1.6 -HiDDpDXGBHbgCIILYJjj@FEQa\OHX -1.6 -HmtD`HP@cIICDeiUZB@@A`qTproHx -1.6 -HmU@`HPGCIIEDTjjjh@XCaTwCJ|a@ -1.6 -HedAQHSBkad@a``nglddNTbuRp@` -1.6 -HcNJ@D@ae\bbbRtMLuUKT@LDqnQh -1.6 -HcL@@DjU_VnBAId@FBpfES\LkrM@ -1.6 -HeTL`HRPBLdabRwBl@D@CBbingd@ -1.6 -HmLD@@qJY{WJeZj@B@A`tMproDR` -1.6 -HmvH@H[IIEDYNFjjj`AarXSCJ|c` -1.6 -sFpF@DSpPQ``~EBDf_EjXA`Pm^JD -1.6 -Hk\H@@RfYU\]Tz@@@@@FBxUMprnf -1.6 -Hmt@`@|DifUqV`hH@A`JXS\Lkq@h -1.6 -HiDHPDApbHrRPqRjj`AatXUMp|a@ -1.6 -Hg_@@@jteem]YWizV[`A`S\L|cP -1.6 -HiDHPHApIpRiYjjj@FG@fTwCrB@ -1.6 -HcLH@@RYWeUuiX@@@XBfEprn|b` -1.6 -HiED`LJD@HrRPiIZj`A`UMp|SB@ -1.6 -HaD@R@bNhNyIe^f`@`@XTBXU\c` -1.6 -HeV@B@B\dbaRwBuRs@CAdpj[nQH -1.6 -HmV@@@rRJJIjjjj@FDpfES]J|`P -1.6 -KAxUBPfEp^F\WYIIbfjh@pRnyC@ -1.6 -Heth@DkiAIeeVxYZiVh@XH`|Pi@ -1.6 -HiE@`HPGCIIDbjjj@FCXUMp|RD@ -1.6 -HeU@@@eJYW~F``H@FGIaTwSr@@ -1.6 -HmtD@@QImYVUZh@@@X\fMproHH -1.6 -HcM@@@uIVUux^ZV[`A`QTw\QI@ -1.6 -HiDNPHSB[a@XhXrRPzQZe`A`aB -1.6 -HeT`@@`YRnUunX@I@A`VES\RI@ -1.6 -KAxD`Pc\@QPQddJTVYPCALKbAP -1.6 -Hif@`HApRkm^Fh@@@XMaTwCq@` -1.6 -HeTL@HP\ddRUQ]UUU@CBlJfgd\ -1.6 -KAxH`P`NENFRRJrjj@LJpj[nP` -1.6 -Hif@B@B\dbaRxVjV`A`rXUMwHD -1.6 -Hmu@@@UJf]|YjB@`@X\aTwBoHp -1.6 -HaD@P@bH|DeeVz`@@A`pXUMwH` -1.6 -HeeH@DhLbbTJcUUP@pyLinF^PP -1.6 -KAxY`Pf@DMH]HYIHUEjh@pbnPP -1.6 -HiDB`HSACprRSIEjjPAaaTwHx -1.6 -HeU@@@gIHhTmpu@A@@pyLJfzP -1.6 -Hef@@@rRJJIuUU@C@XPj[agdX -1.6 -HmvJ@LANF\bbTReIfjej@GbLh -1.6 -Heg@B@J`gIHhXhuUT@LFSFxY@ -1.6 -KAxAPAHIHEHMH]HIMwTuPAyE@ -1.6 -HidL@HP\ddRNijji`AafEWD[` -1.6 -HeTD@@eIYWVy`@d@FFXU\rFD -1.6 -KAxQ@PC`eWMUU@FG@fES]rH@ -1.6 -HeTH@@RYyTYZ`@@A`rTwCOHp -1.6 -HifH@AAJ[W[j@B@AaVESCrD@ -1.6 -HidH@@RUe^Fh@@@X]BES\OH@ -1.6 -HaDL@@[die\jjj`AaTXUMqDx -1.6 -HiFD@LADfWYjj`A`VMp|Pj@ -1.6 -HifH@DAIVUxU`@@A`QTw\`P -1.6 -HiEH@DHDf{Yjj`A`vES\OHP -1.6 -HiD@@LdbJTZjh@X]BXUMwHD -1.6 -HaDD@@YJ[tjjjh@XDfEwDb` -1.6 -HeVJ@LANFTfVVIfjeh@^Ht` -1.6 -KA|H@XBIMkMUPA`VTw\QB@ -1.6 -HaFH@FAIe^fZjh@XDfEWHx -1.6 -sGPL@xRHTQddajhA`Xl^R` -1.6 -KAzP@I`ILsUUPAaTES]r@@ -1.6 -KA|X@DB\dwZuT`FAIaUrF@ -1.6 -Hid@@Di[Waz@@@FEES\OHp -1.6 -KAz@@@VRQPrjZ@LBSF{dT -1.6 -HifB@LANEIeeIfje`AxeL -1.6 -sNxhMDOCIHUJj`FAAkyhl -1.6 -HiF@@@RifZjj@F@pfES\H -1.6 -sNpD@DSpRYyjhAaPcWqS@ -1.6 -sGQDHGCNBTmUPCCHwbF@ -1.6 -sOpH@DILkW@@@LJEc^Q` -1.6 -sNpD@xRHRjzjhAaYcWrH -1.6 -sNqhHfOAJmvjPFBqxaP -1.6 -sNpH@xIRkUJ@p\VM_H@ -1.6 -sNt@@|dTQjj@XTKF|TX -1.6 -sGTHHaxISuU@LMc^XQ@ -1.6 -sNqHHGAJeZj`FAVkx`P -1.6 -sOq@@drm[Rt@pJqoHp -1.6 -sJPhH`xYICU@LEcsBH -1.6 -sGP`ATefj`FEDqoH` -1.6 -sJQHHGAJfj@XYX|`@ -1.6 -sFx@@eJf`@@LEcsQT -1.6 -sJQHHGAJfj@XIGbF@ -1.6 -sOy`LDtfUMZi`Gbu@ -1.6 -sNxA@NRfZjhA`xlZp -1.6 -sJQHHGAJni@XYX|P` -1.6 -sJQHHGAJVj@XIGbF@ -1.6 -qC`H@Hg`dsPFDGME` -1.6 -sJYHEAxIWMPCAX|`@ -1.6 -sGQ@@dsuT@phbqyJ -1.6 -qCbPXXbRu@XHSbV@ -1.6 -sJP`@dfzhA`l^XQ@ -1.6 -sJQHDHaInZ@XHGdp -1.6 -sOq`@fdrikUL@|Vh -1.6 -sOq`@fdrikTl@|Vh -1.6 -sKQ@@eKcUHCAX|TP -1.6 -sGPP@cTfyi`GbU@ -1.6 -qCcPQXCD]XCB[d@ -1.6 -qC`PCDRZhCCA[d` -1.6 -sJP`@dfvdA`l^Q@ -1.6 -qC`PApRVdCCQ[d@ -1.6 -qCcRQXUfzNlAa@ -1.6 -qCb@AIZPLLEnR@ -1.6 -QMIDbIpRZAaGFP -1.6 -sJY`BEdfVhAxlP -1.6 -sGQ`@ZdrmJ@|Rp -1.6 -qCb@AIVPLEErX -1.6 -QMABlYAIhFD\h -1.6 -sJQ@@djw@OEB -1.6 -RFBBYQDXLJy@ -1.6 -RFTPeQ`|R@ -1.6 -`II`Cr@ -1.6 -`II@CB@ -1.6 -HiFL@BAAR[mVji@FEIaTwHx -1.6 -qCaBAKdfZ@xTlMXPf@ -1.6 -qCaBAKdfZ@pf@ -1.6 -JoBA@@XNiSJkN}][uUTDA@@XSE\LkiwsDIp -1.6 -HmLL`HS@BLddJfRiiUZ`@`@XEproHh -1.6 -HcLB@@RUR[fVQuhHF@@XEWCoDQP -1.6 -sGY@JDeUj`FFVoEB -1.6 -KA|H@DBIMvmUPAaRXUMrN@ -1.6 -sGX@JeTuT@prqxiP -1.61 -RFTQxQP|` -1.61 -sJQ@@eKU@LEEqX` -1.61 -qC`@Qz`LMEnP@ -1.61 -HiDD@@QIeuZjh@XUaTw\`P -1.62 -HidB@@[aRfU\jjjh@XMFESCqDx -1.63 -sGP`@dfuj`FFVoHP -1.64 -sGQ@@dkMT@prqxiP -1.64 -KAxH@@bSKkUT@XEaTwHx -1.64 -HeTD@@QInYQehB@@FATpsqDx -1.64 -KA|H@HGIL|mUHAabXWDi` -1.65 -sGQ`@ldsmT@paxmP -1.65 -HaD@`@bDeeVz`@@A`pXUMwH` -1.65 -sJP@DjZhA`Pl^R@ -1.65 -HmtJ@@XYUJYY^njjjh@XCFEWCJ|QF@ -1.65 -sJU@E`dru@LH^IX -1.65 -sJP`@TiZhA`inID -1.65 -HidH@@Rfufzjjh@XMFTwCqDH -1.66 -HaGH@Dq`RYVkffi@FFTw\c@ -1.66 -HaED@DpFRYVkfjY@FFIW\c@ -1.66 -HaDH@@RVU[f@@@FAQaUqFx -1.66 -KA|H@LEIRjuUPAaTIaMrN@ -1.66 -sNx`FJeJmUPCBqXodh -1.66 -sNx`FDdvkUPCCHobu@ -1.66 -sNq`@fdr{UHCAX|e@ -1.66 -sJY@DDeUhAaMrD -1.66 -QMA@HmBN`XI\d -1.66 -`IM`Cr@ -1.66 -Hev`@@rfeJY{ZxYBBJD@XDfLH -1.66 -HidH@@RVUvy`@`@XEaTwD`P -1.66 -sGY@LDemj`FFVOEJ -1.66 -sGQ@@eJuT@ptVxcP -1.67 -HeTH@@RYe\YZB@@A`vEWCOHX -1.68 -KA|H@DBIMwMUPAaRXS]rJ@ -1.68 -qCrAPCiJSU@XI[d` -1.68 -RFTQxQ`|R@ -1.68 -sJP@DkVhA`QEnP` -1.69 -qCp@AIZ`LDMqQ@ -1.69 -RF`EFCBNT -1.69 -Hmv@B@B\ddUbReZj@@@FDpfDwCJ` -1.69 -sNq@@djkUPC@kF|TX -1.69 -HifDAHAHeNR[e^Eh@@@XXS]qJD -1.7 -sOpHAbILkW@@@LJDZ~S@ -1.7 -JoBD@@ILrkNx{[uA@@@@@XFDEWCJz]orL@ -1.7 -HmtD@@QImYVUZh@@@X\aMproHp -1.7 -sJQ`@bdvt`LHnS@ -1.7 -HaD@@DjfZzjj`AaVES]qHP -1.7 -qCcPQX^D]hCBKbF@ -1.7 -QMABPYAIhGe@ -1.7 -sGP`@dfUjPFDoEb -1.71 -Hmt@HHdDdLdEbLddlRVFZh@H@FATwKrA@ -1.72 -Ho}L@J[SoIIEKEELQfjjjYh@XMBXPkrG@ -1.72 -Hg]L@J[SoIIEKEELLuUUSL@LFaLHUyA` -1.72 -Hcl@@DjYU_egX@@@@@XRfDwCJ{rJ@ -1.72 -HedLpJFXdDdLdLddlreTtp@panQH -1.72 -HcLL@@STfue^UZh@H@FCDwCN|QL@ -1.72 -HmTB`HZUAprRQVYRjff@FAIa]rE@ -1.72 -KA|Q`MTQBQFQFRRVJjf@LBaL[d\ -1.72 -HefDB@FPgIIETiUUL@LFaLIiyE@ -1.72 -HeTH`ACpRfUWidHD@A`rXS]ODB` -1.72 -HmtH@ErRQRiHYj`@`@XLfETkqFx -1.72 -HmtH@IrRQRiPUj`B@@XLfESSqAT -1.72 -HmtH@NrRQRqZUj``@@X\fDwRoHD -1.72 -HeVD@DClbbbRILuRu@C@liayD` -1.72 -HedL`HZP\LddUfUUMH@pILKnPH -1.72 -HeV@@@Re[TYj`@@A`HPUMpsrD@ -1.72 -sNplJu@Z@L@eTuTpCcI@r@TCdX -1.72 -HiDD`HX\SIIEYjjZ@FAIaCrN@ -1.72 -KAxI`MtRBRFRFRRURjf@LH{dD -1.72 -KAxP`PCaSaddbjjjPCBdpf{dT -1.72 -HeTD@@yJ[VvF`BH@FEIaCOHX -1.72 -HaE@@@aJyUnh@@@XLDXUMrN@ -1.72 -HefD@NalddUfeUMP@pILH^QH -1.72 -sNyLGYDJHtQddeeUHC@qY|e@ -1.72 -HiDD`HXGCIIEYjj[@FFIa\`P -1.72 -HiFD@Jx\ddUTjjX@XDfEWD`P -1.72 -HidH@@RUe^Fh@@@X\BES\OH` -1.72 -KAxI@MpNFRRJrjf@LBaLKd\ -1.72 -KAxI@P`NBUKmUT@XUaTw\`@ -1.72 -HiFD@NalddUfjih@XDfDOHx -1.72 -sGPJHBJPt`YBubUSUPCBWd` -1.72 -HiFL@AanrRQVZjf`AabXWHD -1.72 -sNpBHxJPt`YCIIEZj`FBkyH -1.72 -KA|Q@QpNFRRJVji@LBSB[dT -1.72 -sNqLKHaQFbLddljf@XZK\c@ -1.72 -KAxI@PpNFRRJrji@LLSBxc\ -1.72 -sNplByDJHtQddeUUHCCQ[dh -1.72 -KAxQ@\CaddbjjnPCCDpnPp -1.72 -HaD@@DjWjXHB@AaTIc]rJ@ -1.72 -sGXLKHaQFbLddmT`LCEkrD -1.72 -Hif@@@RVUv{`@`@XEaTwHD -1.72 -HaDH@@RYe[hB@@FA@UMqLx -1.72 -KAxD@@c\dvlts@FBXWDS` -1.72 -KAxH@MvRRJrjf@LLSBxd\ -1.72 -KA|@D@DiUJuUPAatIaTw@ -1.72 -sNpD@xTHrRQVjhAaXl[rL -1.72 -sGPdE`DRHrRRrt@pTOIP -1.72 -sJQLCHaQFbH~j@XZK\a@ -1.72 -sO|HEfHaIeZx@@AaAqF` -1.72 -KAxX@PfIUJuUPAaeMwHH -1.72 -sNqHFGCIIEZj`FEbqoHp -1.72 -sNqhHl@cIIJej`FFqoHp -1.72 -sOpH@bILkW@@@LJlZ~P@ -1.72 -sNyHHpxYIHkUL@prqxjp -1.72 -sNyHG@xYIHkUR@prqxjp -1.72 -sJXBB@bRBdMHQ}T@p`yB -1.72 -sOpHAxILkW@@@LBl[qA` -1.72 -sFxIHO@RdrfuU@LBl[r@ -1.72 -sGPhH`xYIDZj@X[F|PP -1.72 -sGQDHGBtBUSUPCCKGdh -1.72 -sGPD@xPHRjZj@XFKGdh -1.72 -sGQhHlOCIIJuPCCKWdH -1.72 -sOy@FDfUkZj`FAVMyF -1.72 -qC`XBlTaiAIj`LHNR@ -1.72 -sJPIEPKdkZhA`QL^Q@ -1.72 -sGXHJGAJijhA`Xl^R` -1.72 -sGQHJGAJijhA`Xl^R` -1.72 -sGQ`AbeLuT@ptUxlP -1.72 -sJPH@DIJuPC@bK\a@ -1.72 -sJPhLQDIKTpCA@|d@ -1.72 -qC`D@Hd`iCRD^hCr@ -1.72 -sJPH@xIKUPC@qX|`@ -1.72 -sGT@A\dbMU@LMC^IX -1.72 -sNqA@IRiVjhA`xlZp -1.72 -sGQHI[AJijhAaecrT -1.72 -sJPH@xITuHC@qX|`@ -1.72 -sGP`ATeejPFBQxi` -1.72 -sGP`ITjfj`FFVOIP -1.72 -qC`DBPe@iCRBSU@P -1.72 -sJQIHGB]GuPCCKD -1.72 -sGX@HeTuR@prqyJ -1.72 -QMCAxhabHzAad` -1.72 -sGT@ATegipGdH -1.72 -RFTE@Q`xi@y@ -1.72 -QMBCpchFCOH@ -1.72 -QMHAIdFD|R@ -1.72 -QMbDBDfp^P -1.72 -`IDhCr@ -1.72 -sNq`@VdsMUPCBbKGbk@ -1.72 -sGQ`@ZdruT@pHboEb -1.72 -sGQ@@dsMT@pQoDl -1.72 -sNq`AVdlmUPCAbXu|b@ -1.72 -QMFIOBN`XUqD -1.72 -qC`HBPT`duPGbf@ -1.72 -HeTD`HP@cIHXdmpk@A@@phj[iy@@ -1.73 -sOx@@drm\@@@phVKyJ -1.74 -sNx`DFdskUHCAK\Qh -1.74 -HaDD@@yIe^f`@`@XHa\HLk` -1.74 -Het@@DjYUX^d@@@@A`rXS\ODjP -1.74 -sGPYHlQxGdjmj`Gbu@ -1.74 -HifDAHAHeNR[e^Eh@@@XXUCqFx -1.75 -HaF@@@Rfu[i@@@FAXUMqDx -1.75 -sGQ`@bdwMT@pVODj -1.75 -HeTJ@@qaeJYyzzjjj@FCPUMt|qLD -1.76 -sJX`BDdvu@LDmrD -1.76 -HmVBaNaLHO@nz\ddqRdZjj`AaULLkrL@ -1.76 -HidD@@QInUxV`@@AaRESCrN@ -1.77 -HaDH@@RYVijjj@FCPaTw\PL@ -1.77 -sJPhLQbIKTpCBCba@ -1.77 -sJPhI`xIKTpCBGd@ -1.77 -sGY@DDfUjPFFVoHP -1.77 -sGQ`@jdvmT@prqyJ -1.77 -sGP`ATf]jPFBVyB -1.77 -sGX@@dj}T@prqyJ -1.77 -qC`PBlRVhCCBKdp -1.77 -qCaPS@pRVdCqA@ -1.77 -QMhDRYAaOD` -1.77 -sOx@@drm\@@@pHU_Eb -1.77 -sOp@DjWkB@@FAfkxdP -1.77 -HidH`H@HRnUvy`@`@XUaTp|`@ -1.77 -HiDD@@QIeWZjh@XUaTw\`P -1.78 -RFDBIFCqH -1.78 -HidD`HP@cIHXdnEX@@@XTUMp|`@ -1.78 -HaD@`@BDfUzZ@B@AaRXU]r@@ -1.78 -HeTH@@rJJJJlLADP@LL@fye]H -1.79 -HidH@@rJJIEn`HH@FF@S\sJD -1.79 -RFDFIFCbkBD\h -1.79 -RFDFIFCBNT -1.79 -HmtL`HS@BLddlRVFUh@H@FCYS\J` -1.8 -HeVH@DAInU~Eh@H@FAES]qDd -1.8 -sGP`Adifj`FFboEb -1.81 -qCb@AIZ`LLHnS@ -1.81 -KA|@@@djkUU@FGABXUMrN@ -1.82 -KA|H@XGIKZmUHA`RXU\RF@ -1.82 -sGQhHjOCIHTuHCB[fBH -1.82 -sGP@Di]j`FADQxmP -1.82 -Hg]L`FvDp@cIIJeDednkUUUT@LApjxYT~QX -1.83 -HkmL`FvDp@cIIJeDeeuZjjj@FGXU\LkrC@ -1.83 -HcML`FvDp@cIIJeDdnkUUU@CClJnFUyF` -1.83 -Hg}@@@mJYeU|]Tz@@@H@A`hXUMpri|bp -1.83 -HmL@`EhLddTQaQnFjjjh@XSBXUMpsrE@ -1.83 -HknHBFAiRYfUnSjB`h@AahQaUprngrF@ -1.83 -Hg^B@D@agHhhdmBeSMURuT@LJqet~QX -1.83 -HmL`B@aBBTiWe\JUZh@D@FEMproDA@ -1.83 -HknBAHAIvISdfyWVxV`@i`@XDUMwHL -1.83 -HmwDAHePRISdfyW^Eh@I@A`QTw\aP -1.83 -Hid@P@bDbDfyWaj@@@FG@aTwCrH@ -1.83 -HeT@b@|@eJYU^f```@FGIaMpsq@h -1.83 -HiDLbHS@BL{IIJdejj@FAES]rA@ -1.83 -KAx@PQHIHUHMHYIHXjjh@p`nIg@ -1.83 -HmvJ@D@aeTfYWjYjjV`A`fMrE@ -1.83 -HmtH@@RYvUeVf@@@FGHS\LkrL@ -1.83 -HidH`HApRem^Fh@@@XMaTwCr@@ -1.83 -Hid@`@|Die_ahH@@FCXUMp|PD@ -1.83 -HidD@@QInUxZ`@@AaTES]s@PP -1.83 -HeTH@@RYWZf`@j@A`pIaTODzP -1.83 -Hid@@DjUfaBB`@FEQc\OLPj@ -1.83 -HaD@`@bDeeVz`@@A`pQaTwHx -1.83 -Hie@@@EJ[W[j@B@AaVESCq@P -1.83 -Hmt@@DjYnvDHbJ@AaVUtkrA@ -1.83 -KA|A@PCaddTJjj`CAdpj[nP@ -1.83 -sNqdHjG@nFRQFUU@LBLWqJ` -1.83 -KAxX@@gILjmUHAafDwHh -1.83 -sNpXHlpDYIBdmT@pQoDF -1.83 -qCbPXXbRt`\JVBlHHSdP -1.83 -sNyHHpxYIECUR@prux`P -1.83 -sGXHHGCIHcUPC@kF|P` -1.83 -sOq@@drm[UT@pJqoHp -1.83 -sGPHADIJmU@LJHl^R` -1.83 -sJQDBIARBS]T@pVOI@ -1.83 -sNxHHGAJijj`FAVkyB -1.83 -sOu@E`drm[SR@pU_Eb -1.83 -sJPdEaDSpR[f`FDGEB -1.83 -sGP@LdbMU@LJHm^P` -1.83 -sNq`@fdr{UHCBGbu@ -1.83 -sJPhHaIIRuPCAX|`@ -1.83 -sJPHAXIKUPC@qX|`@ -1.83 -sJPYHlPLGh}Z@^S@ -1.83 -sJT@@TizhAaicqA@ -1.83 -sJQA@IRej`FAbqy@ -1.83 -sJTHH`xQ}T@pVOED -1.83 -qCbPXXbRt`XHSdP -1.83 -sJPXhlPL[ct^m@H -1.83 -sJQ@@dsU@LBHcrX -1.83 -sKQ@@eKcUPC@qX` -1.83 -qCp@AIZ`LLInQ@ -1.83 -RFB@QZDXLJy@ -1.83 -RFBDQFDXLHyP -1.83 -RFaDSGCr@ -1.83 -`InqHFD -1.83 -`IoApGd -1.83 -sGQiHl@c]ddeVhAaCrT -1.83 -`IO@Cr@ -1.84 -sNx`BDdw[UPC@kF|c@ -1.85 -HefLa@XY{pBY{IIETiUUL@LJaLJnQp -1.86 -sGQiHlOC\eWmT@paxaP -1.86 -sNp`@dfuZj@X[F|RX -1.86 -sJX`LDdru@OEb -1.86 -sNp@LdbLjj@XTQU|VH -1.87 -QMFIOBM`^H` -1.87 -HiDH`DBHR[UYjj@FCAaTw\`P -1.88 -qCb@AIVpOEL -1.88 -RFDGaFCBnP -1.88 -`IE`CB@ -1.88 -Het@@DjYUX^d@@@@A`rXwCODJ` -1.88 -sJP`@dfvdAaCqK@ -1.88 -sJP@DiZhAaaEqX` -1.88 -Hmv@@@rRJIIFUjB`@@XBfES\L|aP -1.89 -sNx`LDdr{UPCAZ|QX -1.89 -sJQ@@djs@LDcqS@ -1.89 -sJX`BDdvu@LDcrX -1.89 -sNx`JDdrsUPCAZ|QX -1.9 -qCb@AIZPLDmqB@ -1.9 -`IDPCr@ -1.9 -HmvLAHAIbTyInUwaZ@B`@XDUMwHT -1.9 -sNq@JeTuTpCCKGdX -1.9 -sGX`BDdwMT@prqyJ -1.9 -qCcPQX^D]hCsAX -1.9 -HcLFbHSFgP|L{IIlheBJmUUU@CAbkiW^H@` -1.91 -qCb@AIi`LInHH -1.91 -QMB@HRZA`erP -1.91 -JgB@@FRQQIIEIixSl@@@@@@CBTpnE]N~QP -1.92 -JgBD@@YHhhhddZFSvzdI`R`@LFInT{y`sh -1.92 -Hk\L@@PtfUe]ieujP`J@AaV\L{rC@ -1.92 -HefHA@`IclddqRUUUP@pyLJfx^QH -1.92 -Hmt@@DjU_ZxHDf@AaLIaTwCOHT -1.92 -HeT@@DjU_k``RP@XCBXUMp|bP -1.92 -HidD@@QInUxV`@@A`RMp|Pj@ -1.92 -HaD@`@qDeeVz`@@A`pQaTwHx -1.92 -HidD@@QInUxV`@@Aaa\OLRf@ -1.92 -HifD@DCdfYTfZiZ@FFYS\`P -1.92 -HidH@@RVUvy`@`@XUFES\`P -1.92 -HiFD@LADfuYjj`AaVTwCqDH -1.92 -HaD@@DkeV{`@@AaVES]rH@ -1.92 -KAx@@YIDTjjh@pxHSBinQp -1.92 -sJQBDHbNF\CDIJuPCA@|Tp -1.92 -sNpD@xRHrRSFjhAaXl[rL -1.92 -sOpH@fILkW@@@LJlZ~P@ -1.92 -sOpHMPIToVD@@LKDZ~S@ -1.92 -sGPhH`xITmU@LMc^P@ -1.92 -sNpP@jtfvZf@XIOdp -1.92 -sNpP@jtfvZf@XS\RX -1.92 -sJPHAbIJuPCCA[ba@ -1.92 -sGT`EaTeUfPGba@ -1.92 -sJY@DDfvdA`l^Q@ -1.92 -sJP`ADkjhA`l^JH -1.92 -qCaHK@H`QGe@|P` -1.92 -qC`PApRfdCCQ[d@ -1.92 -QMFICBN`XQqd -1.92 -RFTPXQ`|R@ -1.92 -qCa@CIJrAxh` -1.92 -HcL@h@dBdFdAdEdDfYni`bHh@GdZ -1.94 -HaD@`@BDeeVz`@@A`tXUMwH@ -1.94 -KAxH@@bSJkUT@XEaTwHx -1.94 -sNpXHlQxIUZuT@paxjp -1.94 -sNx`BDdw[UPC@kE|e@ -1.94 -sGP`Adinj`FFboHP -1.94 -QMBBlRZA`erP -1.94 -sGP@DjZj`FADQxmP -1.94 -sGP`@dfUj`FBqyJ -1.95 -QM`AIxGd` -1.95 -qCcRQX^FzNtAx`` -1.95 -sGP@LdbMU@LBEcqR` -1.96 -sNx`BDdvsUPCAK\UX -1.96 -HifDAHAHeNR[e^Eh@@@XDUMwHD -1.96 -qC`@ISTAaaErX -1.96 -HefB@LANEImfVjf`A`VDL|QF@ -1.97 -sNx`JDdrsUPCCXwdX -1.97 -sJPH@xISuHCCSGbB@ -1.97 -qCj@KAIVPOEL -1.97 -RFTPlQ`|R@ -1.97 -HifDAHAHeNR[e^Eh@@@XDS\OHh -1.97 -sNq`@fdr{UHCB[bM@ -1.97 -HaFHAH@NbTeeVz`@@A`VES\RN@ -1.97 -QMFiOAzM`^P -1.97 -HeTD@@eIYe^E`HD@FFEW\rFD -1.98 -qC`H@HpPdmPFBbxa` -1.98 -qC`PBHRVhCCBKdp -2 -sGQhHl@cIIJmPCAX|e@ -2 -HaFH@FAIeZn`B@@XXe]s@q` -2.01 -sGX`BDdvmT@pRwDZ -2.01 -sJQiHl@c]GkPCrD -2.01 -jhyQ@@LT@eLw\jobaoNCSL@@@P@@pEpTeZMYwD^B -2.02 -j`a``@NPYddblrRbR]zjfjjj@AaiFB\dkQkN}r@` -2.02 -Hmt@hL`J`N`I`E`DjYnvDHbJ@AqVHEHGHDhBhGHD -2.02 -j`qQ@@G^@dsLjolcZmT@@@T@@LM@IQgARUiwnP` -2.02 -j`q@`@@^RYWYm^cKN`@j@B@@FF`HpRdeZM[wH\@ -2.02 -Ho|LHJXXdDdLdNkLddlrfbRmzij`@@A`wKivHD -2.02 -HgnHxCuICI@iAiCi@YBYCIIEIYGMUUUM@CBKyA` -2.02 -KAxQPTdAd@T@tAtAddbejj`CbdPLPBPFPNPNQ@ -2.02 -Hg]DHNff`HRPrPJPrRQR]QIG]Tm@@@C@et{yG@ -2.02 -JoB@I@Xb^BRdlsJkkYoU@@@@@A`XQS\LkivHP -2.02 -JoB@I@QB^BRdlsJkkYoU@@@@@A`XQS\LkivHP -2.02 -JoB@H@AEABTrj}ktv}AA@@@@FAaaTwRng[|a@ -2.02 -Hg|@R@kH|HeIfYU^Svz`@@@@AahES\LkiwrH@ -2.02 -Hg\DHJZIAICICjsIIKLeDd]uST@@@LJe]N~Qp -2.02 -j`aaP@NPXkSlddUfbbaVcUTuMSP@LJHpRWnPl -2.02 -JoC@QDAxAJUKMjnmf}T@@@@@FFeS\LkivDB@ -2.02 -HgnHhFjIAICi@YBWCIICEMCIUMUU@C@et{yA@ -2.02 -JoB@Q@^@ReSLjokYoT@H@@@A`^ES\LkivH@ -2.02 -Ho\DHJvIAICi@YCIICELXiJijij@FAL]orB@ -2.02 -Hg\DpIVIAICICIIKEEDb]uU@p@@LFxUt{yA@ -2.02 -HklLPHS@\J\LddQbbQtzjB`@@XCS\Lki|QL@ -2.02 -JoC@HGAbObILkkJ}L]p@T@D@@XJBXURnfHx -2.02 -JoB@X@^ErCrBTsJkzNj]@@@E@@F@xUMproH@ -2.02 -JoB@P@^BTkLjnmf}T@@@@@FApeMprng[|`@ -2.02 -Hg|@P@BH\DfYeUyO[j@@@@@FF`UMprng_H` -2.02 -Hcm@RDpLROBIRYfUQe]jjjj`AaHES\LkoH` -2.02 -Hcm@RDpHbOBIRYfUQe]jjjj`AaHES\LkoH` -2.02 -JoBDPD@xIU\vjzv[uP@@@@@XZUMprng[|b@ -2.02 -HkLJHJ[mN@aICI@iCIIEIuEJiZi`A``krC@ -2.02 -Hg|@P@SHbDjyeUyO[j@@@@@FFpUMprng_H@ -2.02 -Hg|@b@|@eJYUg_eNzB@@@@AajXS\Lkiwr@@ -2.02 -Hg|@P@QH|DfYeUyO[Z@@@@@FF`UMprng_H` -2.02 -Hg|@P@BH|DfYeUyO[Z@@@@@FF`UMprng_H` -2.02 -Hg}@A@LINTjWvUz[SB@`@`@F@paTLkoDrp -2.02 -Hg|H`HALRkfUWd}nh@@@@@XJUMprng_DB@ -2.02 -JoCD@D@e\sJkkYoU@@@@@AalTwCJz]orD@ -2.02 -HklHPHipZHrRQVZIKSjj`@@AaJXSCJz_Hh -2.02 -HklHpJbPRPrPrRRqJYKSjj`@@A`wCJz_HH -2.02 -HcLDPHhG@gCIHcMDdnuU@@@C@PSNFUwbEP -2.02 -Hg~@`HApRkfUWd}nh@@@@@X[ATwCJz]|`@ -2.02 -HcmHbDr@|@eJnYUFUvjjjj@F@eS\LkoDB@ -2.02 -JoB@P@^BTsJkzNj]@@@E@@FBxUMprmor@@ -2.02 -Hg|@`@bDfYeUyO[j@@@@@FB`UMprngqHl -2.02 -JoBD@@IS\rjzv[uP@@@@@XZeMprng[|b@ -2.02 -Hg|@`@BDfYeUyO[j@@@@@FF`UMprng_H` -2.02 -Hg|@`@qDfYeUyO[j@@@@@FF`UMprng_H` -2.02 -HklD`HPGCIHdhdd]Nj`h@@FDeS\Lki|`@ -2.02 -HcNHpMJIAICICIIJhdmJuT@D@C@fxYyF` -2.02 -Hg|H`@b`RYfUWd}nh@@@@@XJUMprng_H@ -2.02 -Hed@H@BH\LBBBLdTTUeUUP@pdHSJ[agdD -2.02 -HklHpJbPRPrPrRRsQIY]jf@B@A`WCJ|`p -2.02 -HmTLpHS@\J\F\LddRLTjjj`AaqTwCJ|c@ -2.02 -Hco@`HS@|DjyeTYWVjjjh@XBUMprn|PH@ -2.02 -HctBHJ[m`HRPrPJPrRQR]QURuR@LDE^QH -2.02 -HcL@PH\JbLddT\RR{UT@@@LISBkae]yD@ -2.02 -Hg|H`HBDRkfUWd}mh@@@@@XJUMprng_H@ -2.02 -HcLHpMbPRPrPrRRqIPcMT@D`@pJfF^Ph -2.02 -Hg~@@@RYfUWd}nh@@@@@XZATwCJz]|b@ -2.02 -Hk\@b@k@eJYeUquSh@@@@@XZFES\Lki` -2.02 -Hk\@`@sDifUWGUN`@@@@A`nES\Lki|`@ -2.02 -HeT@pHbDbLbLddlRPsU@@@CChSJ[ayD` -2.02 -Hk\@`@rdifUWGUN`@@@@A`nES\Lki|`@ -2.02 -HctLhAgTdLdBdJdFdLddTgfUUTt`CrE@ -2.02 -Hg}@@@aJnYU^Svz`@@@@A`iTwCJz]|b@ -2.02 -Hkn@`NaprRQRjYKSjjp@@A`JXPrngrH@ -2.02 -HcvHPDDGBWCIIEHniUUUP@pELJfy]yD` -2.02 -HcvHPAPGBWCIIEHniUUUP@pGBinE]yD` -2.02 -HcmH`Dr@|DjyeTYWVjjjh@XBUMprn|`@ -2.02 -Hg|H@@RYfUWd}mh@@@@@XRUMprngrK@ -2.02 -Hmv@PHApIpRi[WeZhH@@F@qeMproD@` -2.02 -Hed@hH\DdLdAdIdLddTaeUUP@prf{dD -2.02 -HiFDhNihBDdLdBdApLddTgjeh@XPOHx -2.02 -Hg}@@@mIe]e^ftx@H@H@A`JXUCJ{q@l -2.02 -HglF@HXUN|ddUfffeUMUL@LNSBxYWdV -2.02 -HmtD`HPGCIHdhTiVj`@@AaqTwCJ|`@ -2.02 -HiD@p@BH\LBLdRbLjjh@XBBXUMp|b@ -2.02 -Hg}@@@mIe]e^ftx@H@H@A`hIaTLkm` -2.02 -HkmD@J[SrRQRqQXYjjje`A`tIaBoHx -2.02 -HknB@D@agHhhdmBjYjjVj@FAXr{rC@ -2.02 -HknD@NalddUfbRtzjZjh@X\fDLkoHL -2.02 -HmTLPDp`ZHbDjmyjjjh@XBDTwCJ|`` -2.02 -HcvD`Naj|LddUfbUUUU@C@TpjFUwdL -2.02 -HmtHPHApIpRi[WeZhH@@FGYS\Lkq@H -2.02 -Hk^@@@RYWYVftx@H@@@F@iaTLkoD@p -2.02 -HedLHJ[hBDdLdBdLddTgUTmP@pb^PH -2.02 -HkLJ@HXUOIIEYiijjZjPAarXWCJ|cP -2.02 -HmTLPDeP\ABLddTb|jjiPAaVES]rA@ -2.02 -HcL@@LdbRbceBDEEP@LIaL[ae]yE@ -2.02 -HmtD`HPGAJge^Uj``@@X\UMproDA@ -2.02 -HcND@NalddUfbR{USUT@LFSBE]yD` -2.02 -HedDhAeICI@iBiAiCIIEIyUUL@OHd -2.02 -HmT@P@\HbDjmyjjjh@XSBYS\LkrB@ -2.02 -HcNH@JGIIEJeipuUMU@CChSBY]yD` -2.02 -HkLDbMLG@~rRQRVPrjjjX@X\fDwRh -2.02 -HmT@P@|HBDjmyfjjh@XSBYS\LkrB@ -2.02 -HctL`HS@\DjevZjij`A`ITwCJ{rL@ -2.02 -HmvLAHAEbTyInUwaZ@BP@XDUMwHd -2.02 -HcvD@AklddUTReUUU@CChSBY]yD` -2.02 -sJPKAPR@TAh@p@zOj`GAb@dCHAP@ -2.02 -HcvD@NalddUfReUMU@CCdpne]y@` -2.02 -HeT@`@\LddTjPsU@@@CCdpj[ayD` -2.02 -HeTL@HSLddlRPsU@@@CBj[agfPf@ -2.02 -Hed@P@bH\DfUfjjj@FD`fES\L|b@ -2.02 -HmvDAHAHeNR[e]xV`@h@FEES]OHT -2.02 -HmuH@JY\ddTlRzZjjf@FCPfDL|a` -2.02 -HedDPDpFbHaJmYjjj`AatES\L|`@ -2.02 -HefD`Naj|LddUfUUUP@pYLJagbMp -2.02 -HmVH`FboCIIEUDjjjh@X\fEproHh -2.02 -HeTB@@HYRYgUnjjj`A`HPaMpsqLh -2.02 -HclH@@RVUmVy]X@@@@A`vLLkoD`` -2.02 -HeTL`HS@|Dj~UFVh@@@XUS\L|PL@ -2.02 -HmVD@AklddUTtjjj`AatIaMJ|c` -2.02 -HeTH`HApRee\YjB@@AavES\L|`@ -2.02 -HedL`@idhLdTTNeUUP@pZLKagdL -2.02 -HiDBPHSB@HiprRPzQZj`Aac\OHH -2.02 -HmtH@NrRQRqZUj``@@X\fDwBoHd -2.02 -HmtD@@yJUe^Uj``@@XCBTwCJ|`` -2.02 -Hcl@@DjYU_egX@@@@@XJfES\Lkh -2.02 -KAxQ`HCaDQSaddfLjj`CBhpf{dT -2.02 -KAx@PQHIHYHLxYIITjjh@ppj{dL -2.02 -HmTD`HPGAJeVZjfj@F@xUMproH@ -2.02 -HedL`HS@\DjWfjjj@FCES\L|PL@ -2.02 -HmTB@HXUrRQVZZjfj@FCIa\J|bP -2.02 -HedL`HS@|DjWfjjj@FG@UMpsrL@ -2.02 -HeTD@@gHeDeBwL@D`@psB{fPp` -2.02 -HiDD`@iJCIEDUJjj@FCQaMp|a@ -2.02 -HedL`HS@lDjWfjjj@FCES\L|c@ -2.02 -Hed@`@\DjWfjjj@FDaBES\L|c@ -2.02 -HmTB@HZUrRQVYRjff@FAIa]rE@ -2.02 -KAx@`@xTxYIDUJjh@pZDpf{bAP -2.02 -KAxH`PpNENFRRJrjj@LJSBknPp -2.02 -HeT@@LddTjPsUUU@C@XSBinGdR -2.02 -HedL@@pldTTUeUUP@pzDinF^PP -2.02 -KAz@dI`Xd^DRdsMUU@FE@UMwH` -2.02 -HmVD@NalddUfbjij`A`RXT|PU@ -2.02 -HiFH`FboCIIETjjj@FEIa\ODi` -2.02 -HeVH@JGIIEJepuUMP@pjDpfyD` -2.02 -HefH`D`OAJVyjjj`AavES\L|`@ -2.02 -Hef@`HkprRQJrUSU@CAdpnF^QP -2.02 -Hed@`@\LddTeeUUP@pyLInF^QP -2.02 -HefH@NkIIETiUUT@LFaLHYyC@ -2.02 -KAxHPTtRBRFRGAVRRVZjZ@OHx -2.02 -HedF@@PfFTf{nZjf@FAXUMqDd -2.02 -HiDD`HPKAJUfjjh@XMaTwCr@@ -2.02 -HeTH@@RYWZf`@j@AapIaTL|c` -2.02 -sNpJIHJPtaZqrFRRVUU@LI^P` -2.02 -HefD@NalddUfeUUP@pYLJagdL -2.02 -KA|I@]CUxYIHkJjh@pILJnHw@ -2.02 -sJPBHDJ@t@XBOj`GFRAd@hGI@ -2.02 -KA|Q`MTRBRFRFRRVZjZ@LH{dL -2.02 -HiDD`HPGAJUfjjh@XMaTwCr@@ -2.02 -KAzQDIdAxAJU\uUT@XDUMwDB@ -2.02 -KA|A@PCaddbljj`CAdpj[nQ@ -2.02 -HiD@`H\DjfZjj`AarXUMp|b@ -2.02 -HiD@b@|@eJiUjjh@XRDIaTwB -2.02 -KAzA`TtRBRFRFRRUJjY@ODK` -2.02 -HaD@`@|DimVzP@@AaVES]q@P -2.02 -HiD@`@\DjVZkj`AarXUMp|`@ -2.02 -HiDD@JGIIEFjii@FAIaMrN@ -2.02 -sJPK@ERlUYjpu`ZOj`FEDVH -2.02 -KAxA@@xYIHkJjX@pjDpfyG@ -2.02 -sJPKAVRHTQh`q@zOj`FEDVH -2.02 -HiFH@DAIYfZjh@XMaTwCrH@ -2.02 -sJPKA\SDVIlPx`ZOj`FEDVH -2.02 -sJPK@\SDVIlPx`ZOj`FEDVH -2.02 -sJPKA\RHTQh`q@ZOj`FEDVH -2.02 -sNpLAbWD^HdlmUPCAbXu|b@ -2.02 -KA|P@UvRRJjji@LBSBkbPp -2.02 -HiD`bJ[aArAdjeVjpAa@@ -2.02 -KA|P@UvRRJNji@LJaLJnPp -2.02 -sNtDHpxTHrRQVjhA`Uc^JL -2.02 -KAxX`EWAHIHIMvuMHAxdL -2.02 -sNtLJyHJPtaddeUTpCqE` -2.02 -sJQBbJBRBdMHCcL_U@OHP -2.02 -KAz@@AVRQERjj@LFaLIn@ -2.02 -sNyhGE`DYIITmT@pvMyF -2.02 -sNpIAxBTjUjj@XNKFod@ -2.02 -sGYhKEaxYIIVj@XYX|e@ -2.02 -sNyHHpxYIHkUR@pLVOIP -2.02 -sNyHGKxYIHkUT@prqxjp -2.02 -sNphH{xYIHkUT@prqxjp -2.02 -sGXDHGBaBUSUPCCKGbe@ -2.02 -sNphHpxYIHkUT@prqxjp -2.02 -sNqHFGCIIEZjPFAbqyJ -2.02 -sOpAMJUKua@@CBqFodp -2.02 -sNpH@xYIHkUT@plVMyF -2.02 -sNpHAxISMUT@p\VM_H@ -2.02 -sGPD@xTHRjZj@XFKGdh -2.02 -sNpHHDYIHkUT@plVMyF -2.02 -sNyA@qNRRJuT`LCEcrT -2.02 -sNtA@QNRQFMU@LBmWrP -2.02 -sNpHAXYIDYUT@pLM_Dl -2.02 -sGPH@xISuU@LCL[qA@ -2.02 -sGPHAXISuU@LCL[qA@ -2.02 -sJPhLQbIKTpCA@|d@ -2.02 -sNq`@fdvkSHCAX|Rh -2.02 -sNp`Adimjj@XYF|TX -2.02 -qCaHKBHg`dtpFDGEL -2.02 -sGQHI_AJijhAaecrT -2.02 -sN|ICVGHLeRmWxCr@ -2.02 -sJPIAxBX~j@XTQX` -2.02 -sGP@DjZj`FEBqoI@ -2.02 -qCcPQXND^hCBCfbp -2.02 -sJQ@@dkU@LBHcrX -2.02 -sJPXHlPDQzt@|VH -2.02 -qC`PBpcu@^ZK@ -2.02 -sBQ@@eLUT@pTWI` -2.02 -sGY@LDemj`FFVoEB -2.02 -HiDL`HS@|Djmujj`A`UMp|`` -2.05 -HeTD@@QInU~Eh@H@FEHUMwHd -2.05 -sNqhHlOCIILVj`FBkxlP -2.05 -sGPhHaxIU{U@LD[qC@ -2.05 -sGQLKIARFdLddmU@ODZ -2.05 -HifDAHAHeNR[e^Eh@@@XXSCqJx -2.06 -HiDJ@@PfEIn{Zjd@XEaTwDS` -2.06 -KAxH@@bSKKTt@XXUMrN@ -2.06 -sJY@LDejhA`QEnP` -2.06 -qCbPPNBUu@XI[bD@ -2.06 -HcN@B@B\dbRTJR{UT@@@LEaLinFUwd@ -2.06 -KA|@D@DiUJuUPA`tIeMwHH -2.06 -qCcRQXAFzNlAy@ -2.06 -QMFi@azM`^P -2.06 -HefB@BAAeImgfji`A`RYT|a` -2.07 -HiFB@BANEImVZjX@XDfTOHH -2.07 -sNx@AddQeUPC@pu|Rp -2.07 -sGX@@eOUT@pLqoDD -2.07 -QMBCDRZAaGFP -2.07 -sGX`JDdrmT@pexlP -2.08 -sJQ@@dmU@LLInID -2.08 -RF`EECqH -2.1 -HkmLAHdDvISdfyWVxV`@i`@XTUMt|`p -2.11 -HcMLAHdDvISdfyWWaZ@Bd@FEES]OHT -2.11 -HklD@@QIVYYQujjjj@FBxUMprngrH@ -2.11 -HeTLbHS@|LyJoeQej@@@FATwCq@d -2.11 -HcL@@DjU_VnBBJh@FBpfES\LkrM@ -2.11 -HiFHA@`IclddqRjjh@XLfES]rA@ -2.11 -HidL@HP\ddRNijjj`A`VEP|Qn@ -2.11 -HidD`HPOAJvUxV`@@AaQTwCr@@ -2.11 -HidH`DBHR[e^FX@@@XTATw\`P -2.11 -KA|PBA@SGYIIbjjh@piLJfyG@ -2.11 -KAxQ@HDPdvkMU@FEAaTwHx -2.11 -sNyDJQHJPR[nihAaGqR` -2.11 -sJPL@xRHTQGuPCCQ[dH -2.11 -qCbXXQD|EDIMRA``nR@ -2.11 -sOx@@drm\@@@pHV_DZ -2.11 -sJPDADIpRVj`FADqyD -2.11 -sGPH@DISMU@LBEcqR` -2.11 -sNp`ATiujj@XYY|TH -2.11 -sJQHHGAJ^j@XYX|`@ -2.11 -sGX`JDdrmT@pQoI` -2.11 -sGP`@deUjPFFqoI@ -2.11 -qCaPQApcu@XH[bb@ -2.11 -qCaPAR`RZhCAA\f@ -2.11 -sJPdE`DRPcyXAyB -2.11 -sGP`@dfUj`FBMyL -2.11 -qC`PApcu@XXQ\f@ -2.11 -qCx@AYIf`LLE` -2.11 -`IE`Cr@ -2.11 -sJQ`@bdvt`ODl -2.11 -HaD@`@bDeeVz`@@AaPXUMqHx -2.11 -sOp@DjWkiV`FAbMxlp -2.11 -sGX@@djuT@pHVOEJ -2.11 -sNxA@IRiVjhA`xlZ~P@ -2.11 -HcLF@@siWTify^ajjjj@FDpaTwBn|SI@ -2.13 -HmtLbHS@BL{IIKDeaeZ@B@AaUMpj -2.14 -HeUDAHdDbTyInU~Eh@H@FAES]rI@ -2.14 -qCcQQX^B{]GZ@|`@ -2.14 -HaF@@@RYWih@H@FA@aUqLx -2.15 -sJPhEaDIMsPCBCdH -2.15 -RGDQxQP|R@ -2.15 -sOx@@drm\@@@phQkyL -2.15 -sOp@DjWkjj`FEDVOEV -2.15 -QMBCpRZAaWDP -2.15 -sJP`@TfVdAxe` -2.15 -QMHAIXFE\d -2.15 -qC`@IRtA`enHP -2.16 -HevH@DAIemRhYZ`@`@XDwCODP` -2.18 -JoC`@@PzTlrjI{[P@@A@@FDeS\Lkm|ap -2.19 -Hk\D`HP@cIHXheDQgSV@@@@@XMWCNgq@T -2.19 -Hk]@A@LINTjWvUimLHB@@@A`LHUCJ{qLL -2.19 -HclL@@STfUmVfeVi@B`@XEgBoDkP -2.19 -Hmt@`@\DjYuQVhHD@A`JES\Lkq@p -2.19 -HmtD`HPOAJUyVUjh@@@XMc\Lkq@H -2.19 -HcnD@D@TfYg\fWVjA@`@XEtkoHh -2.19 -KAxPP]D`daT`taddabjj`CAB{dX -2.19 -HidH`HCpRUe^Fh@@@XLaTwCr@@ -2.19 -KAxX`Pf@DDxYIBeEjh@prf{b@P -2.19 -HiFD@L@TeYVjj`AapPaTp|c` -2.19 -Hid@@DjUfaBB`@FGPfES]rA@ -2.19 -sNqLKIARCdLddJjj@XKWdH -2.19 -sNqDHG@nFRQFUU@LJEj~P` -2.19 -sNpdIPxEprRHrjhA`Pl~Ht -2.19 -sNpXHlqxYIITuR@payej -2.19 -sNt@A\dbJjj@XVKE|e@ -2.19 -sNqhHlOAJkVj`FBkyB -2.19 -sJPDADQpRVj`FABqyH -2.19 -sNp`@dfvZj@XEFodp -2.19 -sJPhHaxIUmPCBGbF@ -2.19 -qC`HCDvHdmPFBFxh` -2.19 -sJPhHQLiJuPCCA[dH -2.19 -sJXHHOAIZj@XYX|P` -2.19 -sJPYHlQxGh}j@XIX -2.19 -sFx@@eJf`@@LKEcP -2.19 -sGP`@Tizj`FAfMyD -2.19 -sGP`ADiVj`FBMxe` -2.19 -sJPhH`xQ}T@pfyhb -2.19 -qCaPKBHRZXCBCdp -2.19 -QMCALhabHzA`sr@ -2.19 -qCaHK@HdaGe@|`@ -2.19 -qCbPPNBTu@XI[d@ -2.19 -sJPH@xQ}T@pTWEb -2.19 -RFDEaFCqH -2.19 -`IlaHFD -2.19 -sNx@@djmUPCAbKF|c@ -2.21 -qCpPHABRk@XP\f@ -2.21 -sJQ@@dsU@LBHmrD -2.21 -sJX@@dmU@LLL^JH -2.21 -sJXaBDnR[Z`FDwHP -2.21 -sFp@DiTt@@AaacsQT -2.21 -HeVD`La@BLddlRPrm@@@CBj[agdX -2.22 -Hif@@@RfU~F``@@XLfES]q@D -2.22 -sJX`LDdvu@LInID -2.22 -sJP@DiZhA`QEnP` -2.22 -sJP`@TfZhA`QEnP` -2.23 -sNp`@dfVZf@XJodH -2.23 -`IK`Cr@ -2.23 -`IG`Cr@ -2.23 -HmVD@NalddUfRjij`A`rXWCOHT -2.25 -sGP`@dfui`FBuxdP -2.26 -sFp@DiTujdA`QC^IX -2.26 -Hed@H@\HbDbLbLddjRUUUP@pFDpj[ayD` -2.27 -HmtF`HSBEP|LddqbbeVjjj@FEXULODzP -2.27 -HeT@pHdDdLdLddlRPsU@@@C@jxYyC@ -2.27 -HiDHHNbPRPrPYprRRiJjj`AaaTOHX -2.27 -HcND@LADfuYU]Zj@@@FGYWCJ{qDH -2.27 -HeTHbACpBTieUzZBA@@XLfDwSq@h -2.27 -HeTD@@YIfUqfhH@@FG@UMpsqHp -2.27 -HefD@NalddUfUUMP@piLKiy@` -2.27 -HifH@JGIIEJnFjih@XUBXS\c` -2.27 -HiFL@BAAR[eVji@FAIa]qJX -2.27 -sNplJyDJHtQddeeTpCCQ[dX -2.27 -KAxQ@PCaddblji`C@dpfyG@ -2.27 -KAxQ@PC`eUkUU@FCIaTw\b@ -2.27 -sNpBIHJPt`wCIIJjj`FBMyF -2.27 -Hid@@DjWffB@h@FEPf\OHX -2.27 -KA|P@XBRvsUT@XLfES]rH@ -2.27 -sNqLKIARFdLddjjj@XQ|a@ -2.27 -KAxH@MvRRJrjf@LBSB{dP -2.27 -sGPLIHJPtaddejhAaCrT -2.27 -sNqHHGCIIEZj`FAVKyJ -2.27 -sGPD@xRHRjzj@XFKGdh -2.27 -sNpH@xYIHkUR@plVKyJ -2.27 -qC`DAhdPhcQD^hC@bK@ -2.27 -sJQdHl@`nFRPkPCq@` -2.27 -sJQHHGAJzj@XYX|P` -2.27 -sGXHI_AJijdAaecrT -2.27 -sGPH@xIUMU@LBl[rP -2.27 -sGX@JeTuT@pJqoI@ -2.27 -qC`PApcu@XP\tV@ -2.27 -sJPYHlQLGh}V@P -2.27 -sJQa@bnR[ZPGdp -2.27 -sJPYHlQVGh}V@P -2.27 -RFBCQQDXLJy@ -2.27 -QMBBpchGfR -2.27 -RFDAaFCqH -2.27 -KAxP@@djkUU@FGABXUMrN@ -2.27 -QMbDBDePXQrP -2.27 -sJP`@deVhAaCqS@ -2.27 -RFD@QFCBNT -2.28 -sJP`@TizhA`inID -2.28 -sGP`@Tivj`FBfxeP -2.29 -sNx`BDdw[UPCCXwbS@ -2.31 -sGP`@dfyi`FBMyD -2.31 -sJPD@DDHRgj`FFDwDb -2.31 -qCaPQCpcm@^XK@ -2.31 -qCa@CIKTA`hnHX -2.31 -qCb@AIj`LDmqB@ -2.32 -sGP`@TeYf`FBUxhP -2.33 -HeVLAHAIbTyInU~Eh@H@FAES]rI@ -2.33 -sNpYHlQxGlddqZj@XR|VX -2.33 -HeTLbHS@BL{IIKDdLkP@@@pJfx^QH -2.33 -RG@D\OJ@ -2.33 -sGP@DiVj`FADVxcP -2.33 -j`q@@@DjU_VUiqw``RX@@@A`ZBBTYpVcV]{bLR@ -2.34 -HkLLxJ[hBLdBdAdIdMdCdBbHaHaHbXjejj@Gb\h -2.34 -JoBDH@QPIPIRlrjzv[uP@@@@@XKS\LkivDa@ -2.34 -JoB@H@^E^BTrj}ktv}AA@@@@FFiaMtkivDB` -2.34 -Hg\BPHP{@HTHrRPqIIZSjtBDJ@CCbinF]yB` -2.34 -JoBF@DHNRRIGSQITuoUUT@D@AaNEPkivD[` -2.34 -HctDHDXGBHbgBWCIILYDYUUUP@pzLKaW^QH -2.34 -HmTHHDBHapIpzHrJIQRrjjj@F@aeMproD`` -2.34 -JoB@P@NBULrj~mf}P@`@@@FAxUMprng[|`@ -2.34 -JoBDPDAxIU\vjzv[mP@@@@@XKS\LkivHH -2.34 -Hk\@b@B@eJYeUquSh@@@@@XKaTwCJz_H@ -2.34 -JoBD@@ISJlzoJ[tD@@P@@XJfDwCNfHl -2.34 -HknD`La@BLddJbRvWUjB@`@XMc]JgqJD -2.34 -HcNBAHAIvISdfyWWaZ@Bd@FAES]rE@ -2.34 -HedLPHFP\JBLddRaeUTh@pKB[nHe@ -2.34 -HefD`La@|LdabbeUUP@pxBinF^IB@ -2.34 -HcLD`HP@cIHXhhjJk@QD@CBfxYwd@ -2.34 -HmUH`Dr@|DjUyjjjh@XBATwCJ|QL@ -2.34 -HcNB@D@agHhhdmCSMURu@CCLY^Qh -2.34 -Hed@P@BH|DfUfZjj@FD`fES\L|b@ -2.34 -Hmv@@@rRJEKKaj@BP@X\fES]OHT -2.34 -HcLD@@QIe^UWVj`@@AavEprn|b` -2.34 -HiDHHJbPRPzPFPrRPqRjZ`AxaL -2.34 -HidH`HApRkm^Fh@@@XMaTwCq@` -2.34 -Hmt@@DjU_ZxHHj@AaLIaTwCOHT -2.34 -sNpJIVJPtaYArFRRVUU@LINP` -2.34 -HiE@`HPOAJ[fjjh@XMaTwCq@P -2.34 -HiDD@@kIEDUJjj@FCQaMp|a@ -2.34 -HiF@`HApRjYjjj@FCXUMp|a@ -2.34 -HaDH`HCpRVU[j@@@FEXUMwH@ -2.34 -HaE@@@yIe^f`@`@XTBXU\c` -2.34 -KAz@@AVRQERij@LBSF{bPP -2.34 -KA|H@DFIS[UUPAadMwDR` -2.34 -sGPdH`xEprRHuT@ppuxdP -2.34 -sNqTHmV@`aFRPjKR`ODB -2.34 -sNx`BMdbaeUPCCRobV@ -2.34 -sNqHDHaImYj`FAFMyF -2.34 -sJQHBLQIfi@XHSbV@ -2.34 -QMIDbKpRYAaGJ@ -2.34 -sJT@@Te^lAyD -2.34 -QMBCDRZA`cr` -2.34 -QMBApRYA`sr@ -2.34 -sJPYHlQxGh}j@^IX -2.34 -sGP@Djyj`FFbwDZ -2.35 -HaE@@@yIe^f`@`@XDfEWDC` -2.35 -sNx`DJdrkUPCCHwbs@ -2.38 -`IaphFD -2.38 -`IiApD -2.38 -sGPXHlQxIU[U@LInHt -2.4 -Het@@LddTQbMpuUUT@LAaLJfz^PH -2.41 -HcLH@@RfyY^Vjjjh@XKFES\LkoHP -2.41 -Het@@DjYUZ^D@@@@A`rDwCODr` -2.41 -HidD@@QInUxV`@@A`REP|Qn@ -2.41 -HiDB`HRnApReYjif@FBLOH@ -2.41 -HaDH@@Rfu[j@@@FAIa]qJX -2.41 -HaF@@@RVU[n@@@FAXUMrN@ -2.41 -sGQHHGAJmjhA`Uc^HP -2.41 -sJQDHG@nBUMT@ppVyB -2.41 -sJXHHOAIYj@XKGbB@ -2.41 -qC`P@HRVhCCBKdp -2.41 -qCbPPND^hCCA[d` -2.41 -sJQ@@dls@LEcrP -2.41 -QMJDbDf`XQqd -2.41 -`Ld`\WaB@ -2.42 -`Ld`XP -2.42 -HeT@@LdbbQwCUUU@CBPaBinF^Q` -2.44 -sGP`ATf]jPFDWEb -2.44 -HclD@@QIeYWieujP`H@FEYpsoHT -2.45 -KAxA@AbIJjuUPAapPfES\c` -2.45 -qC`PCDRVhCAA\Tp -2.45 -sJX@@dku@LDmrD -2.45 -QMPBcXGcH -2.45 -sGQ`@jdvmR@pfxdP -2.46 -j`aA@@NYIHiXihYIFj``hj@@XRQ`gIFl{wHJ@ -2.48 -Hg\@xHdDdLdNdIdMdKdLddlTTtrgUADQ@@|`p -2.48 -j`aaP@NPXkSlddUfbbaVcUTuMSP@LJHpRUnP| -2.48 -h`C@@B`qVRRJsSQZRjfjjh@LEHpS`iZl{p -2.48 -HmTLhJ[hBDdLdBdA\LddTgRjej`A`dkrA@ -2.48 -HcLHPHApiprRQUQIKmUP@@@pELKae]yE@ -2.48 -Ho|H@NrRQRqZZR]j``bh@FDiaMtg[|cP -2.48 -sNpJE@Z@LAXApBUSUU@NJdCHAPJ`M@yH -2.48 -Hg}@@@aJVYU^Svv`@@@@AaITwCJz_Hl -2.48 -HiD@H@\HbDbLbLddjRjjh@X]BXUMwHD -2.48 -Ho^L@AaerRQVZYJRjfjj`AaJXWCIvx -2.48 -Hmu@`HZoCIIEUDiVjZj`AarXWCJ|b` -2.48 -HiD@HH\DdLdBdLddTjjjh@XES\OH` -2.48 -HkND@NalddUfRdjijj@FGIa\ngrA@ -2.48 -HedLPHS@\J\LddQTeUMP@phfxYxbX -2.48 -HcvL@NamrRQVYQUTuT@LNSBxYwdJ -2.48 -HiDLPHS@\J\LddUdjjh@XDS\ODS@ -2.48 -HiDDPHXGBgCIIEYjji@FEIa\ODi` -2.48 -HeTD`HPOAJ]eQfj@@@FCYS\L|PD@ -2.48 -HmLH@ARjZYjZVjjZh@XMaTwKrI@ -2.48 -KAxI`UtQBQFQFRRUJji@LBaLKdL -2.48 -KAxX`Pw@xTxYIHkJjh@pILJnHw@ -2.48 -HiFL`FaL@HrRRiQZj`AafEWDxP -2.48 -HeV@@JrRQRiCMT@@@LJSBZ^Ip` -2.48 -KAxX`Pw@xUPYIHkJjh@pqLKbMp -2.48 -HmVD@AalddUffjij`A`rXWBoHd -2.48 -HefL@H[aRjUVjjh@XCBXUMp|bP -2.48 -KA|Y@MBX@QddeRVj`CCLJnHw@ -2.48 -HiFL@H[aRjUZjj@FGPfDwCrJ@ -2.48 -qC`FB`d@hCP@zOTAqh`I@rAr@ -2.48 -KA|AP\dad`TaT`t`eTuUU@Gd\ -2.48 -sGQLJhCPA`DjfjPGFRAd@hGI@ -2.48 -HiE@`HZoCIIEUJij@FEIa\OHh -2.48 -Hid@@DjUfaBB`@FEPfMwLJa@ -2.48 -KAxY@PwUXYIHkJjh@pqLKbMp -2.48 -HiF@`DApRjZZjj@FCXUMp|a@ -2.48 -KA|H@XCIKJuUPA`pQaTwDS` -2.48 -KAxH@AfRJIFjj@LJaJ[nPP -2.48 -sNpdHpxV`rRQVjhAaecqU` -2.48 -KAxX@PwYIHkJjX@pqLKd\ -2.48 -HaD@@DiUVyjjPA`HPfES\ -2.48 -sNplJyHJPtaddeeTpCBL -2.48 -sNphH{XYIHkUT@prqxjp -2.48 -sGQDHG@nFRQFj`FABuyB -2.48 -sNx`LFdlmUPCBbXobU@ -2.48 -sNqHHGCIIEZjPFAVKyJ -2.48 -sGXLKIARFdLddmT`ODZ -2.48 -sGYHEAxIVuU@LMc^XQ@ -2.48 -sJPiLQxBTiZhA`Xl^P@ -2.48 -sGPD@xVHRjZj@XEXwd` -2.48 -sGXHHGAJijhA`Xl^R` -2.48 -sGQII[B|eTuT@prqyJ -2.48 -sGX`LDdwUT@ptMx`` -2.48 -sJQhHlGBOj`FDOME` -2.48 -sJQLCIARFdH~j@^P` -2.48 -sJPD@xPHczhAaecrP -2.48 -sJQHHGAJnj@XI[fDH -2.48 -sNp@Djfjj@XUXu|d@ -2.48 -sGX@@dkUT@phVMyH -2.48 -sFp@DiTt@@A`qEcP -2.48 -qCcPQXVD^hCsQX -2.48 -sJQAINczhAaeb -2.48 -qCcPQXZT]TCr@ -2.48 -`IB`Cr@ -2.48 -`IDpCr@ -2.48 -KAxX@ASIRjuUPAaTIaMrN@ -2.48 -qCc@AYIj`OBHl -2.48 -sNq@@djmUPCAbKF|c@ -2.49 -Hg~@@@RYfUWd}nh@@@@@XJUMprng_DB@ -2.49 -sJPHADIJuPC@bK\a@ -2.51 -sNp`ATf^ZZ@XYY|e@ -2.51 -QMIDbKpRZAaGFP -2.51 -sNq`AVeJmUPCBqXwdX -2.51 -sGQDHGBnBUSUPCCKGdh -2.52 -HeTH@@Re[TYj`@@AatIS\L|`` -2.53 -sJP@DjvhA`inID -2.53 -QMH`yIhFD|h -2.54 -sGP@DiVj`FEDVOIP -2.54 -HmtH@@RYeeZZjjj@FBpfES\Lkr@@ -2.55 -HmND@DCdfVUrjUZ`PH@FALLkrD@ -2.55 -HaDH`HCpRnU[f@@@FEXUMwH@ -2.55 -HaDH@@RVU[j@@@FCAFES\c` -2.55 -sJPhLQDIKTpCBCba@ -2.55 -sJXHHGAJZj@XYX|`@ -2.55 -`Jg@XP -2.55 -KA|X@DB\dwNuT`FFIa\Rf@ -2.55 -HmtD@@QIgYVUZh@@@XLS\LkrL@ -2.56 -HeTLbHS@BL{IIKDdLkP@@@prf{bCH -2.57 -HidH@@Rge^Fh@@@XMATwCrD@ -2.57 -sGQhHbGAJ^jXAaKqA@ -2.58 -sGX`BDdwMT@pVODj -2.59 -sNy`BDtfuZi@XIGbu@ -2.59 -qCbPXXbRt`XP\TP -2.6 -j`q@`@@LRYfWg^Qg^jB`@@@@FA`DhpTeZMYwnHa` -2.61 -jhip@@@P\eKLjo}HvkM@@@EP@@pTRcNBdkW`|aX -2.61 -j`q`@@@IToLjoiuoUT@@@@@C@tDLxJRmFl{wHX@ -2.61 -JoB@P@^BULrj~mf}PA@@@@FA`UMprng[|c@ -2.61 -Hg|@b@|@eJf[U^Svz`@@@@AanES\Lkiwr@@ -2.61 -JoC@@@IRlrjzv[uP@@@@@XGBTwCJz]or@@ -2.61 -Hg|H`HApRkfUWd}nh@@@@@X[ATwCJz]|`@ -2.61 -Hg\B`HSM@HrRPjIIHjZuAAD@CCj[ae[yF` -2.61 -HmT@XDdLdJdFdAdIdLddTaajjj`AaG\Pe@ -2.61 -HkmLbFvDp@cNrRRiQIY]Vjjj`A`qUproHL -2.61 -JoB`@@Ndrnlktqw@AP@P@A`hIaUJz[|c` -2.61 -Hcm@A@tIvTiWYTjWP@`@@@XCBXWCJ|PM@ -2.61 -HcMLbFvDp@cNrRRiQIKjuUUP@pXjxYWdZ -2.61 -Hk\@`@|DifUWGUNjjjj`A`\IaTwCJz_H@ -2.61 -HedDpHhG@gCgCIHcEiUUT@LNAL[agdD -2.61 -HcLD`HP@cIHXhdhLk@PT@CBfxUwfAT` -2.61 -HcLD`HP@cIHXdlipk@AT@CBfzUwf@U@ -2.61 -HcL@@LdbRbUeBDEEP@LAcFxYW^Ha@ -2.61 -HcL@@LdbRbceBDEEP@LAaL[iW^IP` -2.61 -Hid@`@\LdbaRxZ`@@AarXUMp|`@ -2.61 -KA|P`E@NENFRQERjj@LJSB[nHE@ -2.61 -HiDNQHSB[a@XhXKa{IICiEjV@D -2.61 -Hmw@@@`Tke]fy`@j@A`vESRoH` -2.61 -HidH`HCpRkm^Eh@@@XTUMp|PL@ -2.61 -HidD`HPOAJ^UxZ`@@AaQTwCq@P -2.61 -HeT@@DjYoIjjjh@XJDIaTwCH -2.61 -KAzQ@IdAxIUsMUPA`QTw\`@ -2.61 -sNxTMEV@`aFRPjKR`OLLP -2.61 -sGXHHGAJfjhA`Uc^P@ -2.61 -sGQHDHaImfhAaacrT -2.61 -sJPDAHJPR[j`FDwEB -2.61 -qCbB@\duPFBVyH -2.61 -QMFAjAIhFBOJ@ -2.61 -HifDAHAHeNR[e^Eh@@@XXWCqJX -2.61 -sGQ@@eKuT@ptqxeP -2.62 -HaDH@@RVU[f@@@FFXW\rJX -2.64 -KAxX@@gILjmUHA`aMqLh -2.64 -sJQ@@dkU@LBHmrD -2.66 -JoBBXBwD`dadaddebbTRtj[uTaPI@@XDpz_H\ -2.67 -HmtLbHS@BL{IIKEDiUZ@`@A`S]J|`P -2.67 -KAx@P@xQDIDYDYIITjjh@pZDpj[d\ -2.67 -HcLH@NrRQRqYRmTDA@@pYLInWbCh -2.67 -HkLF`HSNgP\DjUYfjjYf@FFBi|`@ -2.67 -HmVL@NaerRQVYJjfj@FCIa]J|`P -2.67 -HedL@@pdie]jjj@FCIS\L|b@ -2.67 -HedL@HZ\ddUfUUMH@pILKnPH -2.67 -KAxX@AaYHhdZjh@pIJ[nIA@ -2.67 -KA|X@QS\eUkUU@FCIaTw\b@ -2.67 -sNpDHDTHrRQVjhAaXl[rL -2.67 -sGPDHDTHRjZj@XFKGdh -2.67 -sGQHHGCIHcUPCCKWbA@ -2.67 -sNx`LDdvkUPCAY|rM@ -2.67 -sGXHHGAJijhA`Uc^R@ -2.67 -sGQ`AbeLuT@pRoMLP -2.67 -sGX`LJdmuT@pHaoDl -2.67 -sGXHHGAJijdAaecrT -2.67 -sGPHHDIUMU@LCEcrT -2.67 -sGP`Adinj`FBUxhP -2.67 -qC`PALcu@XZK\`@ -2.67 -sGQ@@dsmL@pruyB -2.67 -QMIBhF`chGcH -2.67 -qCp@BOTAahl -2.67 -RFTQVQP|` -2.67 -sNp`@dfUZj@X[E|e@ -2.68 -HaDH@@RVU[j@@@FCQaTw\`@ -2.68 -sNpHAbIJkUT@pXbqoHp -2.69 -qCb@AIVPLDmrP -2.69 -sGQ`@jdvmR@|rq@ -2.69 -sGQ@@djuT@phbqyJ -2.7 -JoC`@@PzTlrjI{[P@@A@@F@eS\LkoDmp -2.72 -HeTDPDp@bHcIIKDdLrp@@@pjJ[ayD` -2.72 -HiDDHJZIAICi@YCIICEJij@GbDp -2.72 -KA|Y@UBXGaddeTZj`CCDpnHw@ -2.72 -Hid@@DjUfaBB`@FGPaTwCrL@ -2.72 -sNyhKEaxYIITuT@prqxjp -2.72 -qC`XBHc`haIj`LLEnR@ -2.72 -qCcRQXCFzNlAy@ -2.72 -RFTEPQ`|R@ -2.73 -sGP`ATiVj`FFbwDZ -2.74 -HaE@@@aJyUnX@@@XEaTwDc` -2.75 -sJPXHlQxQ{T@pbxlP -2.76 -sJX`BDdvu@LH^IX -2.77 -Hid@`@\LdbaRxZ`@@A`rES\ODC@ -2.78 -HmLD@@QIe[VfeVi@B@A`V\J|Ri@ -2.78 -HedJ`HSFDGAJeyjjY`A`gSq@p -2.78 -sJPD@DPHRnj`FFFOED -2.78 -sNp@Dj{Zj@XFKGbk@ -2.78 -qCa@CISTAaEqS@ -2.78 -HefD@NalddUfUUMP@piLKayD` -2.79 -HiFL@BAAR[eVji@FAIaUqFx -2.79 -sNpP@btf{Zj@X[E|Rh -2.8 -HiD@XHdDdLdFdNdAdLddjdjjh@^PP -2.8 -sNp@DiUjj@XLQXwdX -2.81 -Ho|DpHhG@gCgCIHcDhhd[^jjB`@@XZBYprng[|`` -2.83 -j`q@`@HRRjyeUSk^j`B@@@@FAhTYpTeZMYwnPH -2.83 -HglLXDp`BJdFdA\IdEdLddTaLTdmUUT@LLt{yG@ -2.83 -j`q@@@LddTjVTRPiN}U@A@@@@LMHpRcNBtZsnP| -2.83 -Ho\LxAgTdLdBdJdFdKdGdLddTgfTtjjffh@^PX -2.83 -JoB@Y@RGTCrG\drnlktqw@AP@P@A`JXURngrN@ -2.83 -Hg^DHNihBDdLdBdLddTgTRQwUKP@@@pjUt{yG@ -2.83 -HcvBXNiev@aICI@i@Pb\CIIEIxiUKTh@pb^PH -2.83 -JoB@Q@^@ReSLjokYoT@P@@@A`^ES\LkivH@ -2.83 -HkLLpHS`\J\F\LddRLbdjjjj@FGXPrngrN@ -2.83 -HmTHXERPrPjPZPFPfPrRQRFFjjj@FB\oHH -2.83 -HcvFPJaLe]CpGprRRjKRMUTt@LFSBY]yG@ -2.83 -HmVBhNiiV@aICI@i@PcIIEIuJiZT@XQwHD -2.83 -HcLHpMbPRPrPrRRjIKRmU@A@@pinF]yA@ -2.83 -HmVFPJaLFUCp{prRRiJQjjZ@FCIaMJ|b` -2.83 -Ho~D@NalddUfRbRmzjZ`@@AaJXWKivHD -2.83 -Hk\@b@a@eJYeUquSh@@@@@XKaTwCJz_H@ -2.83 -Hk\@`LhDjU^ukmLHH@@@A`lHU\Lki|c@ -2.83 -HmTDHNFIAICIAgCIIJeDjjjh@XDURoHX -2.83 -HmTJhJ[iV@aICI@i@PcIIEIuJiZT@^PH -2.83 -HmVHHFjIAICICgCIIKMEJijh@XXLkrN@ -2.83 -HedLjDp`BJdFdAdIdB{IIEIyKUT@OHx -2.83 -HedDpHXGBg@WCIIEXmUUT@LFSBkiy@` -2.83 -HmM@`HPOAJYeWaeZjjj`A`NES\Lkr@@ -2.83 -HeTL`HS@\LddlRPsU@@@CBj[agfPf@ -2.83 -HmVD`Naj|LddUfTjjj`AarXUCJ|Qn@ -2.83 -HmVHpHxGBYAYCIIEKCJjfh@XDfDwHD -2.83 -Hcw@`H[j|LddUbbeTuU@CAdpYW^HU@ -2.83 -HkLL`HS@\DjUYfjjjj@FDeS\Lki|`@ -2.83 -HmW@RDp`|Hq@eJkfZjjj@F@aEMprh -2.83 -HmWHbDphCpBTjnYjjjh@X\EMproH` -2.83 -sJPKAXR@TAh@p@zOj`GAb@dCHAP@ -2.83 -KAxX`Pw@xUxYIHkJjh@pILJnHw@ -2.83 -HefH`FboCIIETiUUT@LFSBxYxeL -2.83 -HmTH`HApRjyfjjj`AaJXUMproH` -2.83 -HeT@@LddTjPsU@@@CAdpjZ^Ip` -2.83 -HaD@P@bH\DeeVz`@@A`pXUMwH` -2.83 -HiD@`@\DiVZjj`A`LIaTwCr@@ -2.83 -HiD@`@lDiVZjj`A`LIaTwCr@@ -2.83 -Hed@`@lDjWfjjj@F@paTwCOHp -2.83 -Hig@PBhPdDdDfyWaj@@@GfPw@ -2.83 -sGPBIDJHtQXcIIKUPC@qZ|a@ -2.83 -sJPKAyRHTQh`q@zOj`FEDVH -2.83 -HiFH@FcIIEUJjj@FEIa\OHh -2.83 -KAzA@P`^BTlsUT@XDUMwDC@ -2.83 -Hed@@Djffjjj@FGXUMpsrD@ -2.83 -sNxBLIAREdGHIMmUT@|tq@ -2.83 -KA|A@HC`eTuUU@FEXUMwHP -2.83 -sOpIMP[djWkB@@FEbM_I` -2.83 -sNpL@xVP\`eTuUPCCKGd` -2.83 -sNtIH`DBTifjj@XGFod@ -2.83 -sNtIHaxBTifjj@XGFod@ -2.83 -sNp`H|ddUjj@XYX|UX -2.83 -sNq`AbeMmUPCCJod` -2.83 -sJPD@xRHczhAahmrD -2.83 -sJPXHlQDQzl@pa@ -2.83 -sJPYHlQDCh}U@P -2.83 -qCcPQXAD]TB -2.83 -sNqThmVO@~Fy|eWsTpCq@` -2.83 -sGP@Dj}j`FFfODj -2.86 -sJQ@@drt`LDmrD -2.86 -qCr@HIJlAyL -2.86 -sJP`@TeVdAaEqS@ -2.86 -KAx@@IRjuUPAapPfES\c` -2.87 -HeTLbHS@BL{IIKDdLkP@@@pJnF^Pp -2.88 -HeTLbHS@BL{IIKDdLkP@@@pJfz^PH -2.88 -sGPD@DDHRgZj@XDSGbU@ -2.88 -sNpXHjpTIRkUJ@p`xlP -2.88 -sJQhHbBaJ^i@XP\Rp -2.88 -sJPYHlPDGh}Z@XS@ -2.88 -KAx@@YIDTjjh@pXDpj{bPp -2.88 -qCaPS@hRVdCqA@ -2.91 -sJQhHlOBOZ`GfVH -2.91 -Hk^@@@RfYU\]Tz@@@@@FBaaTwCJ{rC@ -2.93 -HeU@@@gIHhTmpu@A@@pYLJf{dR -2.93 -HiFD@DBlbbTLZjh@XTfUp|Pf@ -2.93 -HefD@DBdfV^Zjj@FCIaTL|Qn@ -2.93 -KA|H@HAIMwMUPA`VDw\QJ@ -2.93 -sGPHAbIJmU@LJHl^R` -2.93 -sOx@@drm]UT@pxbqk@ -2.93 -sJQHDHaInZ@XH[dH -2.93 -qCcAAY]nRYhCbRp@ -2.93 -qCcAAY]nRYhB -2.93 -QMBApRZA`sr@ -2.93 -Hmt@h@dBdFdAdEdDfYn~fBHb@AyD` -2.94 -QMFAjAIhGfR -2.94 -QMhDRUAyH -2.96 -RFDUAFCqH -2.96 -qCp@AI^`LHnS@ -2.96 -HgnB@NamOIIEYeEEUSUM@CCdpnD{yB` -2.98 -HmtD`HHIeIUYVUjh@@@X\BXwCOHT -2.98 -sGPBE@Z@LAXAJijhApT`Y@JATCd` -2.98 -HiDDpJFIAICICIIKLjii@FDMrN@ -2.98 -HaDH@@RVU[f@@@FEQaTwHx -2.98 -HaFD@DCdfYRYje`A`fMrJ@ -2.98 -sNpdHpxWprRQVjdAaecrT -2.98 -sNpXHmPxYIDYUL@pcy`l -2.98 -sNqHHGCIIEZj`FAVMyF -2.98 -sNqHHGCIIEZjPFFVOEV -2.98 -sJPD@xRHczhAaIsKD -2.98 -sJPD@xQpczhAaecrP -2.98 -qCc@AYIj`LINXK@ -2.98 -qCpB@SGZ@pRwI@ -2.98 -QMFIJrMP^P -2.98 -qC`@Qv`LEErX -2.98 -qCbPPSJRu@XHKdp -3 -QMJHfTf`XQrP -3 -RFTQLq`pce@ -3 -`IC@Cr@ -3 -sJQ@@dkU@LLInID -3.01 -sGX`LDdrmT@pfxcP -3.01 -Hed@xDkLdBdJdFdAdIdLddTgeUUP@paNQp -3.02 -Hg|@`@bDfYeUyO[j@@@@@FF`UMprng_H` -3.02 -HidD`HP@cIHXdnEX@@@XHw\HBhP -3.02 -KAx@`ADPxILsUUPAapIaTw\b@ -3.02 -KAxQ@PC`eWMUU@FCIaTw\PH@ -3.02 -KA|A@PG`dsMUU@FCIaTw\`@ -3.02 -HaDD@HSIIDcSUUT@LBpj[d\ -3.02 -sNxTMEV@`aFRPjKR`LInHD -3.02 -sGPdIPxEprRHuT@ppVxcP -3.02 -sOp`Hdjekjj`FFqoHp -3.02 -QMFIBbN`XQqd -3.02 -RFTPTQ`|R@ -3.05 -RFDGaFCqH -3.05 -Hk\@@DjU^ukmNeZ@B@A`LHUCJ{sLxp -3.06 -HeTD@@QIUeQej@@@FEYS\ODbP -3.07 -Hig@@@`Tke]nX@H@FAXUMqHD -3.07 -sOx`DFdrikTl@pVoH` -3.07 -sNp`AdenZj@XEZoba@ -3.07 -qCbPPNBUt`XI[bD@ -3.07 -qC`PApRZhCCQ[d@ -3.07 -sJQDHGCNBT}T@pRODL -3.07 -RFTPLQP|` -3.09 -HcMLbEvDp@cNrRRqIYCJt@D`@pJfx^Qh -3.11 -Hg^@B@B\ddRRTjQwUUP@@@pNDpfxYWSl -3.11 -Ho~J@Naeu|ddUfbbatzjZfi`A`RXT|bp -3.11 -HmtHpBbPRPrPrRRjIJUjh@@@XDwCOHT -3.11 -Hmt@`H\LddUbReZj@@@F@iaMproH` -3.11 -HkND@NalddUfRTjijj@F@ia]Jz_HD -3.11 -HiDHhARPrPJPjPZPrRQR^jjPAyG@ -3.11 -HiDDPHPGBgCIIEYJjj@FEXS\OHP -3.11 -HmTB@@SarJIIPijij@FADtkrL@ -3.11 -HeV@B@B\ddTjPsU@@@C@Tpj[ad -3.11 -HefD@AalddUfeUMP@piLKayD` -3.11 -KAxH`EpRBRBS]mSR@XQWDa` -3.11 -HiDL@HX\ddUfjih@XDfDOHx -3.11 -sNpLHxVH\PeTuUPCBkFod` -3.11 -sNyLGYHJPtaddeeTpCrL -3.11 -sNqhHlIIJeZj`FFM_H@ -3.11 -sNx@@eRmUPCAqXu` -3.11 -QM@HvA`sr@ -3.11 -HiDB@@SaRYUfjf@FBDwDpP -3.13 -Ho~B@LAEwHhddhhd[]jjA`@@XCaCNg[|b` -3.15 -sJPIAxBTeZhA`Xl^P@ -3.15 -sJP`AdizhA`d^R@ -3.16 -RFBDQADXLHyP -3.17 -j`q`@@@YIEBedhdnB]zh@IiX`@XJQ`eF\tZsnHex -3.19 -HglHHDApbHipVHrRSJJJ^UUUUP@pvLInFUt{yE@ -3.19 -JoBD@@ILrkNx{[uA@@@@@XZAUprng[|RL@ -3.19 -Hg|@`@\DjYmUyO[j@@@@@FFxUMprng_H@ -3.19 -HctHPHApIprRIQQNUUUT@LEALinFUwdD -3.19 -HgmH`Dr@|DjV^Yjjjjh@XZATwCJz]|c@ -3.19 -HiDHPHApqprQJHrjj`A`rES\ODC@ -3.19 -HmW@@@H\dbabLjfj`A`rXwRoHh -3.19 -HiE@`HPOAJUfjjh@XMaTwCs@a@ -3.19 -qCq@XIIV`OEL -3.19 -HiF@B@BTjeVjj`A`LIaTwB -3.19 -sJPHAbIJuPC@bK\a@ -3.21 -Hg^J@Naev|ddUfbbNgUSTtp@pqLKdR -3.23 -HiFD@AalddUfjih@XDfDOHx -3.23 -KAx@@YIHkJjh@pZDpj[d\ -3.23 -sGPDHxVHRjZj@XEXwd` -3.23 -sNq@GddbmUHCCKGbe@ -3.23 -sNpH@xYIHkU\@prqyF -3.23 -qCcPAZTBSU@^XK@ -3.23 -sOx@@drm\@@@pHQoEf -3.25 -RFBDQ^DXLHyP -3.25 -HiDDHJZIAICi@YCIICEJij@FDMrB@ -3.27 -sGPdCQHJPR[jf@XR|d@ -3.27 -`IJ@Cr@ -3.27 -Hg|@@DjU_eZx{BBH@@@FBpaUtkiwqLX -3.31 -Ho\DxM]ICI@iAiCi@YBYCIIEIYGLjjjii@FDGrK@ -3.35 -j`a``@NPYddblrRbR]zjfj@@@A`iFB\ehug^y@P -3.35 -Ho\BxJX]bPRPrPzlNPnP^PrRRsIJJRjZjZ`AyG@ -3.35 -jhqA@@EYIHiXeDkIKUTADUT@@pTcAFJtYw`|`H -3.35 -HiD@g@hHdDdLdBdJhFdNdAd@zIklddUdjjh@P -3.35 -HkLLhJ[hBDdLdBdA\LddTgTRjejj@FARngrA@ -3.35 -HkLDxMMICI@iAiCi@YBYCIIEIYGJjji`AyA` -3.35 -Hg\LPHS@\J\LddQbdRiwUPU@@@pEnFUt{xbX -3.35 -Hg|@P@bH\DfYeUyO[j@@@@@FF`UMprng_H` -3.35 -HklDPHXGBgCIIEYhdmNjj@@@F@iaCJz_Di` -3.35 -Hko@hAdtdLdBdJdFdLddTgbRtzjh@@@^Hn` -3.35 -HmV@XEbPRPrPzPFPfPrRRqRJjjj@FBDoHX -3.35 -Ho|@`NqLddTlVVdeZhHBj@AaJXS\ivHD -3.35 -Ho|@`NqLddTlVfdgZhHHj@AaJXS]ivHd -3.35 -Hg|H`HCpRkfUWd}mh@@@@@XJUMprng_H@ -3.35 -HkLLPHZP\A\LddUbRdjjZj@FGIa\ngrI@ -3.35 -HkLLPHXP\I\LddUfRdjjZj@FGIa\ngrF@ -3.35 -HmVHHFjIAICICgCIIKLiJjZh@XXLkrJ@ -3.35 -HmVHHFjIAICICgCIIKEiJjZh@XXLkrF@ -3.35 -HcLHpJbPRPrPrRRsQIKmTp@@@pKae^Qh -3.35 -HmM@bHPO@IRfYUxYVjjjh@XCaTwCJ|`@ -3.35 -Hk^@@@RfYU\]Tz@@@@@FBxUMprngr@@ -3.35 -HkM@`HzoCIIDbiEJijj`A`JXPrngrJ@ -3.35 -HctDPHxG@WCIIETeIUSUP@pyLJiW^Pp -3.35 -Hg^@@JrRQRiKRCMT@ET@C@TpfgSod\ -3.35 -Hef@HJbPRPrPYprRRiRUSU@CCNF^PP -3.35 -Hct@PHBNBLddURTeUUU@CAXSBine]@ -3.35 -HmTDPHXGCgCIIETiJjjh@XLfDLkrJ@ -3.35 -HctDPHXG@WCIIEXmIUTuP@pYLJUwd\ -3.35 -HkLD@J{IIETdiJjjj`A`LIaBngrF@ -3.35 -HeTD`HP@cIICLdLkP@@@pjfxYyA@ -3.35 -HiDBPHSBCpiprRSFQjj`Aac\ODp` -3.35 -HidD`HP@cIHXdnEX@@@XDULODC` -3.35 -HiDBbJ[aCpBTjeVjj`AaHPfES\H -3.35 -HmVD@NalddUfRjij`AaRXWKqAd -3.35 -HmTD@H[IIETiJjjh@XLfDLkrJ@ -3.35 -KAxYDPwUXUvRRJrjj@LBSBkbMp -3.35 -HiFH`D`OAJyfjjh@XMaTwCq@` -3.35 -sJPK@zRHTQh`q@ZOj`FEDVH -3.35 -sJPK@yRHTQh`q@ZOj`FEDVH -3.35 -sNqdIVG@nFRQFUU@LLEnXu` -3.35 -sNqiCVO@ReRmUPCAqXu|`@ -3.35 -sJPJ@tRHTQh`qD_U@LJHlP -3.35 -sNpiH{XWlddUjj@XYX|UX -3.35 -sJXHHGAJfj@XYX|P` -3.35 -qCcPQX^D^hCBCfbp -3.35 -sJPXHlPYQzj@` -3.35 -`IoAHGd -3.35 -HeT@H@dBdAdIdDfYu[hHB`@^Ie@ -3.39 -`L@LH -3.4 -sJXDHGCNBT}T@ptQxa` -3.42 -sJTHHaxIWMPCAX|P` -3.42 -sJPhLQHIKTpCqP` -3.43 -KAxX`Pw@xUxYIHkJjX@pqLKbUp -3.45 -sGQLKHaQFbLddmT`LMEnP` -3.45 -qC`DBHg`hcQBSU@XXK\d@ -3.45 -sGQDHGB~BUSUPCCKGdh -3.45 -sGPH@xYIDZj@XFKGbE@ -3.45 -Ho|D`HP@cIHXhheMAUXBHj`@XBwCNg[|PE@ -3.48 -Ho|D`HP@cIHXhdicAeXBBj`@XBwBng[|PJ@ -3.48 -JoBBPDHG`eJsJkkYoU@@@@@A`mMprng[|`@ -3.48 -Ho|@@LdbRbblThP`hjj@AalIc]Jz]orA@ -3.48 -Hg}@@@aJVYU^Svv`@@@@A`ITwCJ{qCl -3.48 -Hk^@@@RfYU\]Tz@@@@@FDaaTwCJ|SS@ -3.48 -HmTLPHS@BB\LdaTTTVjj`A`uMproD@` -3.48 -HiDDhJZ@aICICi@YCIIECJiZ@GbPP -3.48 -Hee@@@[IEDTiUUT@LAALJfF^IG@ -3.48 -Hid@`@|Die_ahH@@FCIaMp|PJ@ -3.48 -KAx@`@DPDIRsUUPA`pPUMwDS@ -3.48 -KAxH@ABTluUT@XDUMwDS@ -3.48 -qC`HBHc`duPFFBwI@ -3.48 -qC`HBHc`duPFDGME` -3.48 -HmvB@D@aeIfUzfZjeh@XIc\aP -3.52 -QMCBHoAbDf`XH|h -3.52 -`IlAHFD -3.52 -HiDHhJbPRPrPzPFPrRRsRjZ`AyC@ -3.55 -sNpB@xRHTQhcIIJjj`FEbqoHp -3.55 -KAxX`Pw@xTDYIHkJjT@pqLKdT -3.55 -HaD@`@\DimVz`@@A`rXUMwH@ -3.55 -KAxQ@HC`eTuUU@FEXUMwHP -3.55 -sNpmJyHJPt`~rRRrjXA@ -3.55 -sNpH@xITkUT@p\VM_H@ -3.55 -sJPH@xIRuPC@qX|`@ -3.55 -sGQHHGAJWjhAaecqB` -3.56 -HcND@LADfUyU]Zj@@@FGXWCJ{rJ@ -3.57 -sGPeCQHJPoIMuS@OI@ -3.58 -sJPdE`DRHcyXAaIrD -3.58 -sNp`@Ti]jj@XFZodP -3.58 -`IjApGd -3.59 -j`q`@@@YIEBedhdnB]zh@J@@@@XJQ`eF\tZsnHex -3.61 -KAxLbPfDwAxUxEw]ddfLZi`CqLh -3.61 -sNqHHGAJkjj`FAqkxh` -3.61 -sNt@@\dbLjj@XEZod` -3.61 -sNpP@jtfvZf@^YY` -3.61 -qC`PCDRVhCCBKdp -3.62 -KAxI@PpNFRRJrjf@LLSByG@ -3.64 -sGQhHlGCIIKUHCAF|tV@ -3.64 -sNq@IddbmUPC@kE|e@ -3.64 -sNqdHl@`nFRPjKU@LEWq@` -3.67 -sJPhH`xQ}T@pVOED -3.67 -qCbPPND^hCBKfDp -3.67 -sJQHHGAJVj@XI[bA@ -3.7 -HkLLzJ[hBLdBdAdIdMdCdNxhbHRHRHfJiZj`AyB` -3.73 -JoB@Y@QGTCqG\drnlktqw@AP@P@A`hIaUJz[|c` -3.73 -JoBBPDHCaddabbRRrv[uP@@@@@XKS\LkivDa@ -3.73 -HknBPLaAd@b`cIIBhhd]MZ`T@@FCXwKi|b` -3.73 -JoB@P@ABTwLjnmf}T@@@@@FFaS\LkivDa@ -3.73 -Hg|@`@|DjYmUyO[i@@@@@FBeS\Lkiwq@p -3.73 -HgnD`Naj|LddUfbbeUUUT@LESBhYWSodL -3.73 -HcO@HBhPdDdEdMdLbfbRagCT@EP@OLci@ -3.73 -Hg|@`@BDfYeUyO[j@@@@@FBeS\Lkiwq@` -3.73 -HglLPHNp\JBDjefYjjjjT@XRfDwCJ{rJ@ -3.73 -Hk\@`@SDifUWGUN`@@@@A`nES\Lki|`@ -3.73 -HmTLHHS@BJ\FdNdLddJbdVjj`Aa`roHH -3.73 -Hk\@BLeJeWmZ{SBB@@@@XKBEWCJz_Hp -3.73 -HkNH`FboCIIEUEEJjjj`AaJXWCJz_Hh -3.73 -Ho\``HSBCpRjVYffjjjj@F@mprng_H\ -3.73 -Hk^@@@RfYU\]Tzjjjj@FEaBXUMprnf -3.73 -Hef@XLBPRPZPzPFPfPR[fZjjh@^YAT -3.73 -HiDLPHQ`\J\LddUdjjh@XEa\ODQ` -3.73 -HmTLHBk`dDdIdEdDf{[jffh@^I@` -3.73 -HkL@@LddTbdLjjjj@FDxS\Lki|b` -3.73 -Heg@bHS@|@eJfYjjj`A`qTwCOH@ -3.73 -KAxH`PpNENFRRJrjj@LBSB{bTp -3.73 -Heg@bHS@B@eJfYjjj`AapES\L` -3.73 -sGPH@xIUMU`LLl^R` -3.73 -Hcl@@DjYU_egX@@@@@XBaMprn|SJ@ -3.75 -HmvD@LADf]eYUj`@@A`qMproHp -3.77 -HklL`HS@BLddJbRvWUjB@`@XMS]JgrA@ -3.78 -sJPhH`xYICT`LEcsBH -3.78 -sJPXhlPD[ct^m@H -3.8 -HeVB@D@aeIfUzYjjV@FBXwHx -3.81 -HaFL@D@nRYgifjf@FBXwHH -3.81 -sGQLKIARFdLddmU@LI^P` -3.81 -sJPHHDQ}T@prqyH -3.81 -QMBcpIRZAaWDP -3.81 -sJQHHGBOj`FFVOI@ -3.81 -HmvLbEaL@HslddlRVFUh@H@FATwCrE@ -3.83 -HcLL`HS@BLddJfRtjmP@P@LJ[ag^QP -3.83 -HiDDpHhG@gAgCIHbeJjj@FC@fMp|`` -3.83 -HidD`HPGCIHXdnFh@@@XTUMp|pHP -3.83 -Hef@@@Ri^Zjjh@XCBES\L|c@ -3.83 -HiF@@@ReYjjj@F@pfES\OH@ -3.83 -qCaHKBH`PdthFDGI@ -3.83 -QMBCDRZA`erP -3.85 -HeTD@@QIUeQej@@@FCYS\L|b@ -3.85 -qCbPPNBRu@XI[d@ -3.86 -QMIDbHHRYAaGJ@ -3.87 -Ho|H@IrRQRiQFPUj`BJh@FDiaTtg[|aP -3.88 -HedHHJbPRPrPYprRRiRUUU@CCNF^PP -3.88 -HmVHPF`GCgCIIETiJjZh@XLfDLkrJ@ -3.88 -HiDLhJ[hBDdLdBdA\LddTgjeh@^PH -3.88 -HiDLHJ[hBDdLdBdLddTgjeh@^PH -3.88 -sNplJyHJPtaddeeTpCrL -3.88 -sNphHpxYIHkUR@prqyJ -3.88 -sOx`DFdrikUL@pVoH` -3.91 -qCbPPNBTu@XS\PP -3.91 -HctDXAeICIBiAiAYCYCIIEHXYUUMP@pb^Qp -3.93 -qCpPP^BSU@XI[d@ -3.93 -QMABHgAIhFBOJ@ -3.94 -sNxaBDnR[YjhAaMqU` -3.96 -qC`PApRVhCAQ\Pp -3.96 -sGXaBDnR[Vj@XS\Qh -3.97 -sGQHHGAJijhAaecrT -3.97 -HaDH`HApRnU[j@@@FEXUMwDB@ -3.98 -HkLHxMRPrPJPZPzPFPfPrRQRVQrjjjX@^PX -4.02 -HmTLhJ[hBDdLdBdA\LddTgTjej`A`dkrA@ -4.02 -KA|PtMpFdQBQFQAQEQ@MdddgjjPCA`aLJ` -4.02 -Hmt@pHdDdLdLddjbReZj@@@FEMproHH -4.02 -Hcl@@DjYU_egX@@@@@XBfES\L|Q]@ -4.02 -HmtL`HS@BLddlRVFUh@H@FETwBoHp -4.02 -HiDB`HSBBRRjUZjj@FATwCr@@ -4.02 -sNxDHG@nFRQFUU@LKEj~HD -4.02 -sGP@DjZj`FAVMxa@ -4.02 -`Jd`^P -4.02 -QMJH\Df`XSr@ -4.04 -Hk|@@LdbbbRQKauS`@`@`@F@ySCJz_Hx -4.04 -sGPB@xRHTQhcIIKUPC@qX|e@ -4.09 -JoB@P@NFRRJJEIKKYoU@@@@@A`mMprng[|SB@ -4.11 -Hcu@`HPOAJYYfjjjh@XSaTwCJ{q@P -4.11 -HiD@@DjfZjj`A`vES\ODa@ -4.11 -sGPdCQHJPR[jf@^JT -4.11 -qCbPPND^hCAK\P` -4.12 -sGQ@HeTuT@prqyJ -4.12 -KAxH@PvRRJrjf@LLSByG@ -4.14 -Het@@DjYUX^d@@@@A`rXULODzP -4.18 -HcLBHHQaApIpipUprRIZJJbmUUUP@pKNg^DATh -4.2 -sNpdHpxWprRQVjhAaecqU` -4.22 -sJPYhlQxKmqzOZ`D -4.22 -sGX`LDdsmT@pexlP -4.23 -RFPaMt\H -4.25 -QMIH\EpRZAxb -4.25 -HiFB@LANEImfZjX@XYaCqDX -4.26 -HmV@xNRPrPJPjPZPfPVPrRQR]Rjjj@Gb\H -4.27 -Hcu@XFVIAICICi@YBYCIIKEHkUSUH@|cP -4.27 -HgnD`Naj|LddUbRdUUUUT@LISBjUt{yG@ -4.27 -HmU@XFVIAICICi@YBYCIIKEHjjZh@^Ph -4.27 -HedLpHi`\B\N\LdbLVeUUP@pXDsagbDp -4.27 -HmU@pHTGBgA`cIIEKHjjjh@X\fDwCOHT -4.27 -Hef@XFbPRPrPzPFPfPrRRqRUTu@CrF@ -4.27 -HcvD`Naj|LddUbteUUU@CCdpje]yG@ -4.27 -Hcw@`H[j|LddUbbeTuU@CCdpae]yE@ -4.27 -Hef@pHApipXHrRQRrUUU@CAdpnF^Pp -4.27 -HmTD`HZoCIIETiJjjh@XLfDLkrJ@ -4.27 -Hed@`@\DjYfjjj@FDpfES\L|`@ -4.27 -KA|HP]SPDIHYHEHIUMURpAyG@ -4.27 -sGPH@xIUMU@LCEcrT -4.27 -sJQ@IGuPCCKGd` -4.28 -Hid@b@|@eJYWxZB@@A`rXS\ODB` -4.31 -HiFB@LANEIevZjX@XI`|Pj@ -4.32 -KA|D@XBMrSZsUL@XIg\QB@ -4.32 -qCbPHQBSS@XP\f@ -4.32 -HedL`HS@\LddRRmUUP@phj[ayD` -4.33 -Hk^@@@RfYU\]Tzjjjj@FApfES\Lki|`@ -4.35 -qCaPQApcu@XS\pb@ -4.38 -sJPHHxQ}T@prqyH -4.38 -KAxI@P`NFRQIFjj@LBpj[bAp -4.4 -qCsCPKRUvyIf`NIO@ -4.41 -qCsCPKRUvyIf`H -4.41 -HctDxAe@cI@iBiAiAYCYCIIEHhyUUKP@|QN@ -4.42 -JoB@P@^BULrj~mf}PA@@@@FAaaTwRng[|`P -4.42 -sNpH@xISMUT@p\VM_H@ -4.42 -sNq`@jdssTpCqY` -4.42 -qC`XR@TAhBOTAqh`I@rAr@ -4.43 -sJPB@xRHTQhbOj`FFbwHP -4.43 -sNqLKIARFdLddljf@^Q` -4.43 -QMJH\HzAaOD` -4.44 -KAxPPUD`d`tataddaTjf`CqLH -4.45 -QMBCpchGfR -4.45 -QMJH\Df`^H` -4.48 -HctLhJ[hBDdLdBdA\LddTgReTmU@CCIW^PH -4.49 -HiDL`HS@\DjeVjj`A`QTw\`P -4.49 -qC`PApRfhCAQ\Pp -4.5 -KAxH`P`NENFRRJrjj@LBpf{bIP -4.52 -Hg|H`HApRkfUWd}nh@@@@@XJUMprng_DB@ -4.55 -sNphH`xITkUT@pvMx`p -4.55 -sGQDBIARBS]TpCqR` -4.55 -RFDTAFCbdCd@ -4.56 -sGQ`@jdsmR@|VH -4.57 -HedL`HS@\DjUUjjj@FCES\L|`@ -4.58 -KAxY@Pf@xITnuUPA`QTw\PL@ -4.58 -KAxY@Pf@xIUJuUPAaeMwHH -4.58 -sGQhHlGCIHcUPCAF|pV@ -4.58 -sNpHHxIUMUT@pjqkyH -4.58 -QMJDbDfPXQr` -4.63 -QMBApRZAaWDP -4.64 -sNphH`xIRkUT@pNM_H@ -4.66 -sJPhH`xISuPCAX|PP -4.66 -HglLhJ[hBDdLdBdA\LddTgTbeTmUT@LBWSodR -4.67 -Ho@XBhPdDdMdCdKdGdDfyV^[aj@Bjh@GfQJ` -4.67 -h`~@@@YIHiEHYCJjjjj`@pu`cNRUhug^y@P -4.67 -HctDpHPGBgAgCIIDcHiUUUP@p{BxYW^Pp -4.67 -HmVBhNiiV@aICI@i@PcIIEIuJiZT@^Ip` -4.67 -HmW@`HS@|DjVYfjjh@XMS\Lkq@H -4.67 -sOpH@xILkW@@@LJlZ~P@ -4.67 -QMABHgAIhFD\Y@ -4.69 -sGPhH`xITmU@LD[qC@ -4.7 -qC`PCpcu@XP\tV@ -4.72 -QMbH\HzAaOD` -4.75 -sGPH@xITuU@LBl[qB@ -4.75 -sGPBIHJPtaYCIIKUPCrD -4.76 -QMAJ@XBN`\L`JAr@ -4.77 -RFBDQNDXLHyP -4.77 -sNqhHlGAJeZj`FFM_H@ -4.79 -sJQ`@bdjt`OEL -4.79 -j`aA@@NYIHiXmDiIZj``bj@@XRQ`cNZl{wHF@ -4.83 -Hed@DHADdLdBdFkNdAdIdLddTleUUP@panQ@ -4.83 -HkLLpHS@\J\F\LddRLbdjjjj@FGEprngrL@ -4.83 -HkLDpHXGBg@WCIIEXdiJjjZ`A`JXWRngrJ@ -4.83 -HctLpH[`\J|A\LddUbteUUU@CCdpje]yG@ -4.83 -HctLpH[`\J\A\LddUbteUUU@CCdpje]yG@ -4.83 -HglLpHS@\J\F\Djevfjjfjh@XBWCJz]|c@ -4.83 -HctLpH[`\J|A\LddUfTeUMU@CAdpiW^QP -4.83 -HkLBpHSBCpipYpRjwiijjjh@XMprngrB@ -4.83 -HctLpH[`\JhA\LddUbteUUU@CAdpiW^Qp -4.83 -HedHXFbPRPrPzPFPfPrRRqRUUU@CBFyA@ -4.83 -HmTDpHXGBjCgCIIETiJjjh@XLfDLkrJ@ -4.83 -Hg\@@LddTjTt`kU@DU@@peLJfWSodB -4.83 -Hg^@@JrRQRiSRBmT@QT@C@TpfWSodB -4.83 -HctL`H[jlLddUbteUUU@CAdpiW^Qp -4.83 -HmTD`HZkCIIETiJjjh@XLfDLkrJ@ -4.83 -KAxX`Pw@xTxYIHkJjh@pqLKfTw@ -4.83 -qC`DBHc`hcQBSU@XXK\d@ -4.83 -sJPH@xITuPCCQ[bA@ -4.85 -sJPhH`xIRuPCAX|`@ -4.86 -Hid@`@\LdbaRxZ`@@AaQTwCs@S@ -4.88 -Hct@@LddTbaeUUU@C@\InFUwbIP -4.88 -qCbPXRBRt`^JH -5.01 -sOpIAxBTfUk`@@FEVM_H@ -5.03 -HaD@`@\DimVz`@@AaVES]q@P -5.04 -RFEG`SFCqH -5.04 -sGX`LDdvmT@pfydZ -5.06 -Ho]@`HPOAJYfYfjjjjh@XGaTwCJz]or@@ -5.07 -jhy@`@@HRUYfUWyHwgAZj@@@H@@XJpPRmFl{p^P` -5.08 -qC`PApcu@XZK\`@ -5.08 -JobD@@IKLrj}\mf}T@@@P@A`lHprng[|`@ -5.09 -QMCBHgAbDf`XH|h -5.09 -HctHxMRPrPJPZPzPFPfPrRQRVQuUUR@OHT -5.11 -HiFD@NalddUfjih@XDfEwHD -5.12 -JgB@@BULrjy\Nk\@D@Q@@FDyS\Lkm|`p -5.16 -sJXHHGBOj`FFVOI@ -5.21 -h``D@PxJgaddbQbdTTjfjjj@CARLDdkQkN}rE@ -5.24 -HkLLHHi`\B\N\A\LdbLRTTjjjj@FD`f\Lki|`` -5.24 -Hcu@XJZIAICIBYAYCYCIIJdeIULuP@|Pn@ -5.24 -Ho^D`Naj|LddUbRdTjjjjh@XJfETkivHx -5.24 -Hk\@bLhLyJeWmZ{SBB@@@@XKBEWCJz_Hp -5.24 -HmU@pHXGB`cgCIIETiJjjh@X\fEProDa` -5.24 -HiD@P@\J\LddUdjjh@XLfDwCrH@ -5.24 -KA~A@PfAxIUsMUPA`QTw\PH@ -5.27 -sNp`H|ddUji@XYX|e@ -5.3 -Hg|@`@\DjYmUyO[j@@@@@FBeS\Lkiwq@p -5.31 -QMBApchFCOH@ -5.31 -sNpdHpxUprRQVjhAaecqU` -5.32 -RFDCaFCBnP -5.38 -RFTPxQ`|R@ -5.39 -`IG@Cr@ -5.39 -sJPYHlQDGh}V@P -5.4 -qCpPPND^hCAK\P` -5.44 -KAxXPTwPDIHYHEHIUMURpAyG@ -5.45 -KA|H@]CYIHkJjX@pqLKd\ -5.48 -sNqlHl@brCdLddlVj@^KD -5.49 -HctDpHXGBg@WCIIEXmIUUUP@pyLKiW^QP -5.55 -sKP@Di\Zj@XTQX` -5.55 -HeT@pHdDdLdLddlRPsU@@@CCJZ^Ip` -5.6 -qCcPQXQD]TCr@ -5.62 -QMBApchGfR -5.62 -Hgl``HSBCpRjVYfZjjj`A`K\LkiwrJ@ -5.64 -Hk\@`@\DifUWGUN`@@@@A`nES\Lki|`@ -5.7 -sNtHHaxISMUT@pNM_H@ -5.73 -sJPLAHJPL`dwU@OEL -5.77 -HctLbH[jlJ{IIEXmIUUUP@pyLJiW^Qp -5.81 -HmTDbHZkBnrRQUJRjjj@FCIaCJ|b` -5.81 -HkNB@NamOIIEYeEJjZi`A`rXWB_HT -5.83 -HcvB@NaewIIEYdiUSTp@piLKmy@` -5.88 -sGQLKIARFdLddmT`OHP -5.94 -Ho\LhJ[hBDdLdBdA\LddTgTTTjejjh@XMJz]orA@ -5.96 -HmTDpHXGBoCgCIIETiJjjh@XLfDLkrJ@ -6.03 -sOpHAxILkW@@@LJlZ~P@ -6.07 -QMBApchFE\Q@ -6.07 -RFDCaFCqH -6.09 -sJQDBIARBS]R@|Tp -6.14 -sJPH@xQ}T@ptVyB -6.14 -JoB@Q@^@ReSLjokYoT@P@@@AanES]Jz]oq@D -6.22 -HmT``HSBCpRjyfZjj`A`uMproH` -6.22 -sJXA@IczhA`XlP -6.33 -HiD@p@\H\J\LddUdjjh@XLfDwCrH@ -6.38 -KAxXTTwPDIHYHEH]rUSUTl@P -6.38 -sNqmHl@brCdMvRRVKU@OHP -6.44 -qCcPQXND^hCpbK@ -6.5 -HaD@b@|@eJ[Unh@@@XUaTw\PD@ -6.53 -qC`PApcu@XJKbF@ -6.53 -sNpO@YRHTQh`qEbGDAhjj@X\QXu` -6.53 -sNpO@ZRHTQh`qEbGDAhjj@X\QXu` -6.53 -sNpOAYRHTQh`qEbGDBhjj@X\QXu` -6.53 -HiF@PHApiprRQVRjj`A`rXS\OH` -6.53 -sNpO@\RPTai@rEdGHAhjj@XP@ -6.53 -sNpO@JRPTai@rEdGHAhjj@XP@ -6.53 -Heg@`HS@|DjYfjjj@FCES\L|`@ -6.53 -sNpOAXRPTai@rEdGHBhjj@P -6.53 -sNpOABRPTai@rEdGHChjj@P -6.53 -sNpyHlZqfChjj@X\QXu` -6.53 -QMFIGBN`^YH -6.58 -sGPG@ZRHTQh`qEb@t_jhAaXl[r@ -6.75 -sNpJIHJPtaYArFRRVUU@OHP -6.89 -HaD@`@|DimVz`@@AaVES]q@P -6.95 -Hk\@b@|@eJYeUquSh@@@@@XKaTwCJz_H@ -7.06 -Hg\@XHdDdLdMdCdKdLddlRTt`kU@DU@@prfWdB -7.11 -sNpbJxDJPt`YAJijiPGd` -7.19 -sGPBAHJPLaYAInjhAxi` -7.19 -HefD@NalddUfUUMP@pILKnHL` -7.2 -sGPlH`DFPladdLVhAxa` -7.25 -sJPKAPRPTai@r@zOj`D -7.29 -qC`FBPe@iCRDyIj`OI@ -7.34 -HctLpH[`\J\A\LddUbteUUU@CAdpiW^IW@ -7.38 -Hg|@`@|DjYmUyO[j@@@@@FF`UMprng_Hp -7.38 -sNpOAfRHTQh`qEbGDChjj@X\QXu` -7.53 -sNpOAYRHTQh`qEbGDAhjj@X\QXu` -7.53 -sNpOAZRHTQh`qEbGDBhjj@X\QXu` -7.53 -sNpO@zRHTQh`qEbGDAhjj@X\QXu` -7.53 -sNpO@tRPTai@rEdGHAhjj@XP@ -7.53 -Hed@xDdLdBdJdFdAdIdLddTgeUUP@|c` -7.62 -Hk\@`@|DifUWGUN`@@@@A`nES\Lki|`@ -7.7 -HmTDpHXGBgCgCIIETiJjjh@XLfDLkrJ@ -7.73 -Ho]@HHTGBgA`cWCIIEKHjiJjjjj@FBiaMpr]orE@ -7.79 -Hgl@dDdLdBdFdNdIdEdMdCdLddTedLeUUUT@OHl -7.79 -Hg|@b@|@eJf[U^Svz`@@@@A`iTwCJz]|PL@ -7.99 -HkL@dDdLdBdFdNdAdIdMdCdLddTed\jjjj@GdJ -8.08 -sNpOAfRPTai@rEdGHChjj@XP@ -8.11 -h`~CDHPYreaSlddUbRdTeUUUUP@XJQ`eEZMYw` -8.37 -sNpBIHJPl`yCIICJj`Gbq@ -8.5 -sNpO@yRHTQh`qEbGDAhjj@X\QXu` -8.52 -sNpO@xRPTai@rEdGHAhjj@P -8.84 -Hed@XDdLdJdFdAdIdLddTaeUUP@|Pn@ -9.1 -HkL@H@\H\J\F\LddTlbdjjjj@FDia\Lki|b@ -9.37 -HkL@DLdBdJdFdAdIdMdCdLddTbd\jjjj@Gb\h -9.57 -HiD@XHdDdJdFdNdAdLddLTjjh@^Ia@ -9.59 -Hct@DDdLdJdFdAdIdEdMdLddTaaeUUU@CqBx -10.1 -sNpOAxRPTai@rEdGHChjj@P -10.77 diff --git a/medchem/data/datawarrior/nasty_functions.txt b/medchem/data/datawarrior/nasty_functions.txt deleted file mode 100644 index 7eefe04..0000000 --- a/medchem/data/datawarrior/nasty_functions.txt +++ /dev/null @@ -1,51 +0,0 @@ -Structure [idcode] Value -gGP@LdbKT`]RMdmGJFCPpWN@PBJpd@ polar activated DB -gGP@DjVePNlFJXhypB@Q\xA@HjlPd@ twice activated DB -eM@HvCjFtQ[N@PBDiBHqJrlD@ acyl-halogenide type -eFBJHcAbc\@axABIVVQFIV@ Cl,Br,I on N,O,P,S,Se,I -gC`HADIKRAuHubL allyl/benzyl chloride -eM@HzCBKUFTqJp prim. alkyl-bromide/iodide -gC`@H}PFrbcLfIV@ sec./tert. alkyl-bromide/iodide -gC`hH`DIVtAuL` alkyl sulfonate/sulfate type -gJQ`@bdjt`P anhydride -gJXA@IczhB quart. ammonium -gChA@Icm@P tert. immonium -fHT`P carbenium -gCh`hEIWILtAuM@ aromatic nitro -gCd@Adeb@p`}M@ 1,2-diamino-aryl -gJT@@TeXHCA@` 1,3-diamino-aryl -gGT@ATeV@`LDJ 1,4-diamino-aryl -gCd@ADiZDEsA@ azo -gJU@h`NdiLsPdh azoxy -eMPRIncTH diazo -eMPRI^cxH diazo -gJT@@Te^lB 1,1-dinitrile -eMHAIhLDhsW@H^@Pb@ formaldehyde aduct -eO@HyjCYJLipB@ oxiran/aziridine -eMPBchLDkR hydrazine -eM`AITLYs`D@` isocyanate type -fH@MjM~@p\@aHZA`x^@QDYAQbU` unwanted atom -fHw`dB phosphonium -gCi@hAteIi`H nitrone -eMhHRVCZP nitroso -gCa`@lduPD orthoester/acid -eFDBcA@ peroxo -gGY@HDiViPMdmEGN@PBKg@HA@ N-acyloxy-amide -gC`@H{PFJVQFIV[HcDk@ 1,1-dihalo-alkene -gC`@DiZDEbedQbUfrHqJp 1,2-dihalo-alkene -fIRPNj@ pyrylium -gCaHHGAIZPMXb@ silylenol-ether -gCd@ADie@y`` dimethylene-hydrazine -eMPARZCJg}T@ methanediamine -daFD`Bs`BLdTTIUSRpA@ limit! methylene-thiazolidine-2,4-dione -gOtHLPDISOkSM@XP` limit! thiazol-2-ylamine -gGU@DPdsmRAeDx acyl-hydrazone -gCh@@eKP`lIIROFIFC`@ imine/hydrazone of aldehyde -deUD@BxIrJJKPlKTmL@ZqP` 2,3-diamino-quinone -difL@DBarJIPhfZif@LHh limit! 4-acyl-3-azoline-2-one-3-ol -gGT`EPTfyi`H limit! oxal-diamide -daED@DpFRYUJfjV@H limit! 5-methylene-imidazolidine-2,4-dione -gJQ@@dls@XpyDXeX 2-halo-enone -gJQ@@djsBJqarHqJp 3-halo-enone -gCd`i`iJyIf`H N-nitro -gChHD@aIf`LYdXN@ thio-amide/urea diff --git a/medchem/data/datawarrior/tox.txt b/medchem/data/datawarrior/tox.txt deleted file mode 100644 index 49ec5ae..0000000 --- a/medchem/data/datawarrior/tox.txt +++ /dev/null @@ -1,9462 +0,0 @@ -Structure [idcode] label fragment type risk -daD@@DiYZYji`@ r3 mol reproductive high -daD@@DjUZxHD@@ r3 mol reproductive high -daD@@DjUZxHH@@ r3 mol reproductive high -daD@@DjWjXHB@@ r3 mol reproductive high -daD@@DjWzXHB@@ r3 mol reproductive high -daD@@DjYvxH`@@ r3 mol reproductive high -daD@@DkeVyjj`@ r3 mol reproductive high -daD@P@bBbDfYvzB@@@ r3 mol reproductive high -daDD@@IIf]nZZh@@ r3 mol reproductive high -daDD@@IIf]n``@@@ r3 mol reproductive high -daDD@@YJZUnjjh@@ r3 mol reproductive high -daDD@@aJVdnjjh@@ r3 mol reproductive high -daDD@@yIe^f`@`@@ r3 mol reproductive high -daDH@@RVU[j@@@@ r3 mol reproductive high -daDH@@RYVih@H@@ r3 mol reproductive high -daDH@@RYe[hB@@@ r3 mol reproductive high -daDH`BCDRYg[hH@@@ r3 mol reproductive high -daDH`NBPRYWih@H@@ r3 mol reproductive high -daDH`NCDRYWih@H@@ r3 mol reproductive high -daE@@@YIeZn`B@@@ r3 mol reproductive high -daE@@@aJyUnh@@@@ r3 mol reproductive high -daED@DpFRYVkfjY@@ r3 mol reproductive high -daF@@@RYe[hB@@@ r3 mol reproductive high -daFD`L[`BDi]lJjf`@ r3 mol reproductive high -daFH@BAIf]n``@@@ r3 mol reproductive high -daFH@DAIYUnZjh@@ r3 mol reproductive high -daFH@DAIeUnZjh@@ r3 mol reproductive high -daFH@FAIeZn`B@@@ r3 mol reproductive high -daFH@LAIVUnjjh@@ r3 mol reproductive high -daFH@NAIe^fZVh@@ r3 mol reproductive high -daFH@NAIe^f`@`@@ r3 mol reproductive high -daFH`LP@aIe\jZjX@@ r3 mol reproductive high -dax@H@SHbDbLbLddjUUT@@ r3 mol reproductive high -dax@P@SHqDjmZjh@@ r3 mol reproductive high -daxB@@rnRV{Zj`@ r3 mol reproductive high -daxD@@QIgUjj@@ r3 mol reproductive high -daxD@@YIgYjf@@ r3 mol reproductive high -daxD@@iJU^jj@@ r3 mol reproductive high -daxD@@yIUVjj@@ r3 mol reproductive high -daxHpJBPRPrPrJPiUUH@@ r3 mol reproductive high -daxL@@SDfUVjh@@ r3 mol reproductive high -daxL@@idiUZjh@@ r3 mol reproductive high -daxL`HS@BLddNRuT@@ r3 mol reproductive high -daxL`HS@BLddNbuT@@ r3 mol reproductive high -dax``HJn@JRgmjZp@ r3 mol reproductive high -day@@@yIUVjj@@ r3 mol reproductive high -day@@@yIUWjk@@ r3 mol reproductive high -day@PDh@c`aIUUZe@@ r3 mol reproductive high -day@`Dp@aIfYjj@@ r3 mol reproductive high -dayD@HPNRVUZj`@ r3 mol reproductive high -dayD@LHNRUUZZPcH r3 mol reproductive high -dayH@DpDfYfjh@@ r3 mol reproductive high -dazB@BAJyImmji@@ r3 mol reproductive high -dazD@LADf]Vjh@@ r3 mol reproductive high -dazD@LADf^fjh@@ r3 mol reproductive high -dazD@LCdeYzjh@@ r3 mol reproductive high -dazD@NADf{Vfl@@ r3 mol reproductive high -dazH@DAIeYjZ@@ r3 mol reproductive high -da{D@HQ`iIYejZ@@ r3 mol reproductive high -da{H`Dpn@HRYeZjP@ r3 mol reproductive high -dcL@@LdbRbceBDEEP@@ r3 mol reproductive high -dcL@X@bBbFbAbEbMbDfYnijjjj@@ r3 mol reproductive high -dcL@X@bBdFdAdEdMdDfYni`bHh@@ r3 mol reproductive high -dcLB@@imReUUUvjjjh@@ r3 mol reproductive high -dcLB@@riRfY~Qfjjjh@@ r3 mol reproductive high -dcLD@@IIf]^xViZjP@ r3 mol reproductive high -dcLD@@uIfUk[hBBj@@ r3 mol reproductive high -dcLDPDtHaXaInUvxY`@i@@ r3 mol reproductive high -dcLDPEt@b@cIDhTdiaUUUM@@ r3 mol reproductive high -dcLF@@Rag\bbTVTILuSUT@@ r3 mol reproductive high -dcLH@@RYeUqVhHH`@@ r3 mol reproductive high -dcLJ@@PUuInUgzV`BJ@@ r3 mol reproductive high -dcLL@@STfue^UZX@HBL` r3 mol reproductive high -dcLL@@STfyWWaZ@Bh@@ r3 mol reproductive high -dcL`@@qaRfU~ZxHDj`Hj@ r3 mol reproductive high -dcM@@@aJufYgZhBH@@ r3 mol reproductive high -dcM@PEtH`haIf]u[hHBj@@ r3 mol reproductive high -dcM@PEtHchcHhheETppDQT@@ r3 mol reproductive high -dcMD`LE]@HRV[]nEjiih@@ r3 mol reproductive high -dcMH`BuPBDf[U{aj@BX@@ r3 mol reproductive high -dcN@@@Ri]mUvjl@@@@ r3 mol reproductive high -dcNB@BAEuInVVFV`HF@@ r3 mol reproductive high -dcNBAHAEvISdfyV{iZ@HX@@ r3 mol reproductive high -dcNBAHAEvISdfyW[aZ@BX@@ r3 mol reproductive high -dcND@BADf{YU]Zj@@@@ r3 mol reproductive high -dcND@E@\bbRafUM@AUP@@ r3 mol reproductive high -dcND@E@dfYwYn``Jh@@ r3 mol reproductive high -dcND@MBldTtRROSPPQP@@ r3 mol reproductive high -dcNH@EAJ[WU[j@Bj@@ r3 mol reproductive high -dcNH@FAIfYWgZ`hH@@ r3 mol reproductive high -dcNH`Bp@aJY{UWZZjj`@ r3 mol reproductive high -dcNL@FA]rJJJJJlLADU@@@ r3 mol reproductive high -dcNL@LB]RVV]vE`BFP@@ r3 mol reproductive high -dcNL@M@iRYg^vzB@j`@@ r3 mol reproductive high -dcNLaIQ]BHf]yInUvxY`@f@@ r3 mol reproductive high -dcOD@DgPGHheDhkrmUSU@@ r3 mol reproductive high -dcOH@NFPrQISQHrmTAA@@@ r3 mol reproductive high -dcOLAHHPSXeNrJZJIHlKTuUH@@ r3 mol reproductive high -dclD@@GIEEHhfUKmAU@P@@ r3 mol reproductive high -dclD@@UIfV][iuhFAH@@ r3 mol reproductive high -dclD@@iJYW]rnF``JX@@ r3 mol reproductive high -dcll@DpYAmRYV]zzUZije`@ r3 mol reproductive high -dcll@Dsm@iRYgeVE]ZjeZ`@ r3 mol reproductive high -dcm@@@YJYYwhUtH@@@@@ r3 mol reproductive high -dcm@@@{IDeCDdUKh@UUD@@ r3 mol reproductive high -dcm@@@{IDeCEDUSh@UUD@@ r3 mol reproductive high -dcmD@DHERYYUZz]Z``R@@ r3 mol reproductive high -dcmD@DpFRYV]Zy]Zi`@@@ r3 mol reproductive high -dcnD@D@TfYg\fWVjYjh@@ r3 mol reproductive high -dcnDPN[PBABLdTRbauCtuTuSP@@ r3 mol reproductive high -dcnL@LAFRYV]Zy]Zi`@@@ r3 mol reproductive high -dcnL@LAMRYUUrhYZh@h@@ r3 mol reproductive high -dcnL`LaA@HrRPjIKTrzmPHD@@ r3 mol reproductive high -dcndADkaTMz]yIefU[iUjeji@@ r3 mol reproductive high -dco@@@bdigyWJWYj`@P@@ r3 mol reproductive high -dctB@@RURY]VvjjZ@@ r3 mol reproductive high -dctB@@ieReUWZjjj@@ r3 mol reproductive high -dctF@@rngTen{mjjj`@ r3 mol reproductive high -dctFPHSNePBABLddNRTbuUK@@ r3 mol reproductive high -dctH@@RYuUVjjj@@ r3 mol reproductive high -dctHxJBPRPrPFPfPVPvPrJPqJQUUUT@@ r3 mol reproductive high -dcu@`Dp@aIeUUZjjh@@ r3 mol reproductive high -dcuFPBvDsiT@`PcIICdeHmURp@@ r3 mol reproductive high -dcwD@HQ`iIYgmZfjh@@ r3 mol reproductive high -deL@@Di[ernDYZjij@@ r3 mol reproductive high -deL@@DjYeIjGijjjj@@ r3 mol reproductive high -deLD@@EJUWhRfFZjjj`@ r3 mol reproductive high -deT@@DjWvifjih@@ r3 mol reproductive high -deT@@LdbTRoBuUM@@ r3 mol reproductive high -deTD@@EIe]jZ@Bh@@ r3 mol reproductive high -deTD@@QImeQej@@@@ r3 mol reproductive high -deTD@@eIfu~Eh@H@@ r3 mol reproductive high -deTD@@gHhhhjppDQ@@@ r3 mol reproductive high -deTD`AdHaIe]jZ@BX@@ r3 mol reproductive high -deTD`NDHaIfVVfBA`@@ r3 mol reproductive high -deTH@@RUYTYY`@@aH r3 mol reproductive high -deTH@@RUYTYi`@@aH r3 mol reproductive high -deTH@@RV[TYjP@@@ r3 mol reproductive high -deTH@@RYVZfZZj`@ r3 mol reproductive high -deTH`IBHrJJJJlLADP@@ r3 mol reproductive high -deTL@@PTfyVzV`B@@@ r3 mol reproductive high -deTL@@QdfygFV``@@@ r3 mol reproductive high -deTd@HRi@TefUzVjih@@ r3 mol reproductive high -deU@@@aJWeQfj@@@@ r3 mol reproductive high -deU@@@aJueQfj@@@@ r3 mol reproductive high -deU@`Dp@aIgeQej@@@@ r3 mol reproductive high -deUD@DdARYgxfZjf`@ r3 mol reproductive high -deUH@HPDefuFVh@@@@ r3 mol reproductive high -deUH@JdDin_xZB@`@@ r3 mol reproductive high -deV@@@RgYTYj`@@@ r3 mol reproductive high -deVD@BADf{YxVjjX@@ r3 mol reproductive high -deVD@D@TfVgJfjih@@ r3 mol reproductive high -deVD@DAdfygFV``@@@ r3 mol reproductive high -deVD@FADfygFV``@@@ r3 mol reproductive high -deVD@IADfyWxV`@`@@ r3 mol reproductive high -deVDAHAHeNR[e[aZ@B@@ r3 mol reproductive high -deVDAHAHeNR[e_aZ@B@@ r3 mol reproductive high -deVDAHAHeNR[fTYZ@`@@ r3 mol reproductive high -deVDPJJPqFqDfYokjVjX@@ r3 mol reproductive high -deVDaBxPbBd^RYeei``X@@ r3 mol reproductive high -deVDaNFPbNf^RYWZf`@f@@ r3 mol reproductive high -deVH@IAIe]ZZ@Bh@@ r3 mol reproductive high -deVH@LAIUeQfjjj@@ r3 mol reproductive high -deVHpDxHbhbXcHheEJptuMH@@ r3 mol reproductive high -deW@@@RTfyWxV`@`@@ r3 mol reproductive high -deWH@DZPR[e_aZ@B@@ r3 mol reproductive high -ded@@DiUUjjj@@ r3 mol reproductive high -ded@@Dj_VfZZ@@ r3 mol reproductive high -dedB@@RiR[UUijhHr@ r3 mol reproductive high -dedB@@iiReUvjjh@@ r3 mol reproductive high -dedD@@QIkWZjj`@ r3 mol reproductive high -dedD@@QInUVfj`cH r3 mol reproductive high -dedD@@QInUVjj`@ r3 mol reproductive high -dedD@@aJVfjjj`@ r3 mol reproductive high -dedH@@RUUVjjh@@ r3 mol reproductive high -dedHXDBHjPZPzPFPfPRYZZjjh@@ r3 mol reproductive high -dedHXJBPRPrPzPFPfPrJPsRUSU@@ r3 mol reproductive high -dedH`HALRkUUjjh@@ r3 mol reproductive high -dedJ@@rneI[nvjj`@ r3 mol reproductive high -ded`@@iiReUvjjh@@ r3 mol reproductive high -dedd@BXYADfyvZZfBL` r3 mol reproductive high -dee@@@gHeHiCuUV@@ r3 mol reproductive high -deeD@BdDR[mUjjh@@ r3 mol reproductive high -deeL@HdBEIVUfji`@ r3 mol reproductive high -defD@LADf^]Zjj@@ r3 mol reproductive high -defD`FFPBDiWnjjf@@ r3 mol reproductive high -defH@DAIfWvjj`@ r3 mol reproductive high -defH@DAIfuVjj`@ r3 mol reproductive high -defL@IAAR[UYjjX@@ r3 mol reproductive high -defL`F`Y@HRkvyjjX@@ r3 mol reproductive high -defL`JHY@HrJJEJUMS@@ r3 mol reproductive high -deflAHrfxDfISdfvyZfi@@ r3 mol reproductive high -degD@HZPEIUUfji`@ r3 mol reproductive high -det@@DjYUX^d@@@@@ r3 mol reproductive high -det``Dki@HRYYUnFVjVi@@ r3 mol reproductive high -det``DkiBHRYYUnFXBBa@@ r3 mol reproductive high -deth@DkiAIeeVxYZiZd@@ r3 mol reproductive high -deth@DxYAIeeZxYZfYh@@ r3 mol reproductive high -deu@@@kIEEDceCLaPD@@ r3 mol reproductive high -deu@`Dp@aIeURhYfh@@@@ r3 mol reproductive high -dev@@@RYyULFZh@H@@ r3 mol reproductive high -dev`@@rfeJY{ZxYBBJD@@ r3 mol reproductive high -dew@@@pldTTJVTLmP@P@@ r3 mol reproductive high -dg\B@@Q[R[VUmgVf@HhBL` r3 mol reproductive high -dg\D@@eIfU_Un`HJj`@@ r3 mol reproductive high -dg\H@@RYWY^ih@Jmh@@ r3 mol reproductive high -dg\H@@RYvYiVvfZjjBL` r3 mol reproductive high -dg\d`LF[a@BLddJbbQvfmPLA@@@ r3 mol reproductive high -dg\h@Fd{AIfUWxUZABI`Hj@ r3 mol reproductive high -dg\h`LJfd@aJ[Ywkaijejh@@ r3 mol reproductive high -dg]B@NTBNtfY}[fyjVjf`@ r3 mol reproductive high -dg]D`NV]BHRYWVyih@JZh@@ r3 mol reproductive high -dg]HPAuPbBbDfYw[fzB@ij@@ r3 mol reproductive high -dg]H`AuPbDfY_[fz@`ij@@ r3 mol reproductive high -dg]L`LnDD@cIIBhhd]ikTC@P@@ r3 mol reproductive high -dg^@@@RigvuNzjk@@@@ r3 mol reproductive high -dg^B@BAEoHiihdhUNmT@QP@@ r3 mol reproductive high -dg^B@BAMoHiieDeBimU@DP@@ r3 mol reproductive high -dg^DPNI`BDBDfumeSmZf`@@@ r3 mol reproductive high -dg^D`INpbLbdTJTv`kU@DS@@@ r3 mol reproductive high -dg^D`La@BLddLTRRIvmTE@@@@ r3 mol reproductive high -dg^H@DCHhhhddYimTE@P@@ r3 mol reproductive high -dg^L@EACR[YWVFVh@JX@@ r3 mol reproductive high -dg^L`Iia@HrIQPjZIG]TtuU@@ r3 mol reproductive high -dg^LpDx{BHjHVHrJIQPiZLLADUL@@ r3 mol reproductive high -dg_@pNfpqDBCBDfUyWbjfijfPad r3 mol reproductive high -dg_BAHJ`QSbT{HiheBidwMMUUR@@ r3 mol reproductive high -dg_L`LfxPPBLddJbbQvfmPLA@@@ r3 mol reproductive high -dgl@P@SHbDjmUUZjjjh@@ r3 mol reproductive high -dglB@@Q]RYUumZjjZ`@ r3 mol reproductive high -dglFPHSItpBEBLddNRRTbuUTl@@ r3 mol reproductive high -dglP@@anESoIDhhd\iMSMS@dWP r3 mol reproductive high -dgll@DrSAmRYV^uZiik``X r3 mol reproductive high -dgmFPBnDr]L@aPcIICddeHmUUK@@ r3 mol reproductive high -dgmL`DVCl@cIICDmihmUUS@@ r3 mol reproductive high -dgnNPKaLXYTOBoCIIKHiMTuUMU@@ r3 mol reproductive high -dgoL`LD~gPBLdTtTjTuMSTt@@ r3 mol reproductive high -dg|@@DjU_eZx{BAH@@BJ` r3 mol reproductive high -dg|@P@bEbLbbbTVbKR]pP@P@@@ r3 mol reproductive high -dg|D@@MIfV]UivviP`R@@ r3 mol reproductive high -dg|H@@RVUvU[cm`@`@@@@ r3 mol reproductive high -dg|H@@RVUvU[cn`@`@@@@ r3 mol reproductive high -dg|L@@t|bbbbbJcBmm@tCD@@ r3 mol reproductive high -dg|d@Dq]@\bbbbfJSSimUSTs@@ r3 mol reproductive high -dg|laLJce]@HjUyJYn[gFNzZZYj`@ r3 mol reproductive high -dg}DPEtYBHXHrJIJZQGUvg@DKUB@@ r3 mol reproductive high -dg}H@IlLdTrTraS]Jt@EMQ@@ r3 mol reproductive high -dg}L@hdDNISid~R[fV]F]mh@@H@@@ r3 mol reproductive high -dg}L`JXiTIAIf]VunNzVjZj`@ r3 mol reproductive high -dg~D@D@\bbTbTjQL]mUR@D@@ r3 mol reproductive high -dg~D@IB|dTrTraS]Jt@EMQ@@ r3 mol reproductive high -dg~D`LS`BDfUueRh{Zjh@H@@ r3 mol reproductive high -dg~L`EF[BHRYVyukev@HZiH@@ r3 mol reproductive high -dg@PBWPbAbLbbbRfaSR]pPTMQ@@ r3 mol reproductive high -dgH@DjprJIQEQIMqvuRp@P@@ r3 mol reproductive high -diD@X@dDdLdJdNdAdLbdLtjjh@@ r3 mol reproductive high -diD@`@RdjeVjj`@ r3 mol reproductive high -diDB`HSB@HrRPiIZj`@ r3 mol reproductive high -diDD@@QImVZjh@@ r3 mol reproductive high -diDD@@QImZZjh@@ r3 mol reproductive high -diDD@@QIn]Zjh@@ r3 mol reproductive high -diDH@@RVUjjj@@ r3 mol reproductive high -diDH@@RYWZjj@@ r3 mol reproductive high -diDH@@RYuVjj@@ r3 mol reproductive high -diDL@@Pdf]ijj`@ r3 mol reproductive high -diDL@@RdfUUjj`@ r3 mol reproductive high -diDL@@idiUVjj`@ r3 mol reproductive high -diDL@@xTiUVjj`@ r3 mol reproductive high -diDLB@PTyInuZZh@@ r3 mol reproductive high -diE@@@aJuUjjh@@ r3 mol reproductive high -diEL@HPJyIYvZjX@@ r3 mol reproductive high -diEL@HhNEIgVZjX@@ r3 mol reproductive high -diFD@AADfuUjj`@ r3 mol reproductive high -diFD@BADf{Yjj`@ r3 mol reproductive high -diFD@FADfumjjP@ r3 mol reproductive high -diFD`JxPBDivzji`@ r3 mol reproductive high -diFD`JxPBLbdTljjX@@ r3 mol reproductive high -diFD`JxPQDivzji`@ r3 mol reproductive high -diFHPF`@`PaJoUZjT@@ r3 mol reproductive high -diFJAHALXXgNRYvvjj@@ r3 mol reproductive high -diF`@@SNGHhhcFjf@@ r3 mol reproductive high -diG@@@HTeUWjjp@ r3 mol reproductive high -diGD@HQ`kHeECFij@@ r3 mol reproductive high -diGD@HhPyIUVZjX@@ r3 mol reproductive high -diGL@HQ`h\bTTQZfh@@ r3 mol reproductive high -diT@@DjV]nxVjihHB@ r3 mol reproductive high -diTH@@ReUxRfjjf`@ r3 mol reproductive high -diTH@@RgeXSaj@B@@ r3 mol reproductive high -diV@@@RfU|kadHB@@ r3 mol reproductive high -did@@DjYUaBHP@@ r3 mol reproductive high -did@@LdbRQk``b@@ r3 mol reproductive high -did@`@bDfUff`@h@@ r3 mol reproductive high -didD@@EIfU[ffiP@ r3 mol reproductive high -didD@@EIfU[hBB@@ r3 mol reproductive high -didD@@GHhdhZZ@B`@@ r3 mol reproductive high -didD`BD@aIf][hHB@@ r3 mol reproductive high -didD`BDHaIf][hHB@@ r3 mol reproductive high -didD`BDHaIf_[hHB@@ r3 mol reproductive high -didD`BDLQIf][hHB@@ r3 mol reproductive high -didH@@RUe^Fh@@@@ r3 mol reproductive high -didH@@RYVZZ@B`@@ r3 mol reproductive high -didH@@RYWZZ@BP@@ r3 mol reproductive high -didH@@RYm^Eh@@@@ r3 mol reproductive high -didHPNBHPHRYWbjfid@@ r3 mol reproductive high -didL@@IdfYoa`b@@@ r3 mol reproductive high -didL@@XTfUfn`BH@@ r3 mol reproductive high -die@@@EIfW[hBB@@ r3 mol reproductive high -die@`BDHaIf][hHB@@ r3 mol reproductive high -die@`Dh@aIefkfif`@ r3 mol reproductive high -dieD@DpFRYVZyjfd@@ r3 mol reproductive high -dieD`JXaBPRYgvzejX@@ r3 mol reproductive high -dieD`LIN@HRZufFZid@@ r3 mol reproductive high -dieH`DpPBDfYeaZjj@@ r3 mol reproductive high -dif@@@rQQIFfZjj@@ r3 mol reproductive high -dif@@@rQQIFfjjj@@ r3 mol reproductive high -dif@`D@HRUe^EX@@@@ r3 mol reproductive high -difDAHAHeNR[e^Eh@@@@ r3 mol reproductive high -difDPJHPqFqLbbbekjVi`@ r3 mol reproductive high -dig@@@xTjU^njjj@@ r3 mol reproductive high -digDaLHVx@cI{dieljjUj@@ r3 mol reproductive high -digH@DK`R[e^Eh@@@@ r3 mol reproductive high -dkL@`@SDjUUUjjjj@@ r3 mol reproductive high -dkLD@@QIe[WVijj`@ r3 mol reproductive high -dkLFPHSAWPBIBLddNRRdVjjV@@ r3 mol reproductive high -dkLF`DkaTpBLbdtVafjjji@@ r3 mol reproductive high -dkLH@@RUUUVjnzl@@ r3 mol reproductive high -dkLJ@@imMJUUUZjjj`@ r3 mol reproductive high -dkLP@@anF]OIDhhjeIjYi`RKh r3 mol reproductive high -dkLP@@bfF]OIDeDTeIiii`RKh r3 mol reproductive high -dkMFPBNDpUt@bPcIICddiEjje`@ r3 mol reproductive high -dkNLPFi]@HLHrJQRjJJjZih@@ r3 mol reproductive high -dkNLpFjUBPRPrPrJPsISJjZfd@@ r3 mol reproductive high -dk\@`@bDfYYwZ]NB@@@@@ r3 mol reproductive high -dk\D@@wHhhhhbfESZAhD`@@ r3 mol reproductive high -dk\D`ELLSHhdidhZZ]`@iYH@@ r3 mol reproductive high -dk\H@@RYeg]itxH@@@@@ r3 mol reproductive high -dk\``LyS@HRfUeTUtzBHba@@ r3 mol reproductive high -dk\d@Dq]@\bbbbfJZ]MjjZe`@ r3 mol reproductive high -dk\d@DrUCdfY[uXUujijY`@ r3 mol reproductive high -dk]@@@uJYU_lkihDHj`@@ r3 mol reproductive high -dk]D@DxJRYY{Tjtvfh@H@@ r3 mol reproductive high -dk]DAHDMF]yIYeg^ESh@@H@@@ r3 mol reproductive high -dk]H@ALLbbRfTJiaf@Bfh`@ r3 mol reproductive high -dk]H@DHDfYyWImMjhHA@@ r3 mol reproductive high -dk^@@@RfYU\]Tz@@@@@@ r3 mol reproductive high -dk^@@@Ri_YVftzjX@H@@ r3 mol reproductive high -dk^@PDCDNHRVf]}aWZjB@h@@ r3 mol reproductive high -dk^D@A@|bbRfTJiaf@Bfh`@ r3 mol reproductive high -dk^D@IADfvYWz]MjdHB@@ r3 mol reproductive high -dk^FAHALzSb\{HhmEDdQe]Zjjjh@@ r3 mol reproductive high -dk^HPNHJrXaIf^UvGS``B@@@@ r3 mol reproductive high -dk^L@LANrJIQQEJatvjf@@@@ r3 mol reproductive high -dklB@@PcR[me]]Zj@B@@ r3 mol reproductive high -dklB@@QSrJYJIJF]ZX@b@cH r3 mol reproductive high -dklB@@QmR[fUxUZBBF@@ r3 mol reproductive high -dklD@@QInUvnEh@Jh@@ r3 mol reproductive high -dklD@@eJ[Vvfz`@jh@@ r3 mol reproductive high -dklDpBhJqJs@cHiiCDeeviX@H@@ r3 mol reproductive high -dklH@@RYfVya`Hbj@@ r3 mol reproductive high -dklH@@rJJJQJy]ZBhB@@ r3 mol reproductive high -dkl`@@SFRYvUWSZjjj`@ r3 mol reproductive high -dkl`@@kaRe[vTf@HZj@ah r3 mol reproductive high -dkm@`ATHaIe[ujZ@BfhBA` r3 mol reproductive high -dkm@`MLHcHhhdcDfz@`Z|@@ r3 mol reproductive high -dkmB@hHD[heNJ^{HihhhTmMjf@@@@ r3 mol reproductive high -dkmD@DpJRY{YWSZf`@@@ r3 mol reproductive high -dkmDBLdDf\bbTTJTWVj`@`@@ r3 mol reproductive high -dkmDpDgSBHjHVHRYYmYn`HJf@@ r3 mol reproductive high -dkmH`NVPbDfUunih@JZ`@@ r3 mol reproductive high -dknD@DATf^UuFVh@J`@@ r3 mol reproductive high -dknD@E@\bbRafRih@Jj`@@ r3 mol reproductive high -dknD@LALbbRbaRtvjh@@@@ r3 mol reproductive high -dknD`J``BDjy{Utvfjjh@@ r3 mol reproductive high -dknL@BACR[me]]Zj@B@@ r3 mol reproductive high -dknL@BAMR[meYSZj@H@@ r3 mol reproductive high -dknL@M@iRYg^un``Jj@@ r3 mol reproductive high -dknLBLANSlbfbTaRtvjzjh@@ r3 mol reproductive high -dknh@HF]LDee]V[iiYihDbz@ r3 mol reproductive high -dko@@@aLdRbbRQtvjB`@HB@ r3 mol reproductive high -dkoH@Dp`RYuYWSZj`@@@ r3 mol reproductive high -dk}@@@iJUmUR[atpBJ@@@@ r3 mol reproductive high -dmLB@@RURYUVJaejVjh@@ r3 mol reproductive high -dmLD@@QIe[VfeVi@B@@ r3 mol reproductive high -dmLH@@RYiYKnUjjjh@@ r3 mol reproductive high -dmLH@@RffeZVVjjjh@@ r3 mol reproductive high -dmLH@@rJJIQEneX@@@@@ r3 mol reproductive high -dmLL@@SdfVUrjUZ`PH@@ r3 mol reproductive high -dmM@@@[IEDhhZFU@B@@@@ r3 mol reproductive high -dmM@@@aJUe^neYhDB@@ r3 mol reproductive high -dmMD@DdNRYYWJiUjA@`@@ r3 mol reproductive high -dmMD@DhNRYYWIiUjA@`@@ r3 mol reproductive high -dmMh@DkaePRYYe[iUifjd@@ r3 mol reproductive high -dmN@@@RYVuiiVj`@`@@ r3 mol reproductive high -dmN@pN@H`HPHrRPqIZneUhDB@@ r3 mol reproductive high -dmND@BA\bbbReInFjZjd@@ r3 mol reproductive high -dmND@DBdfV]RZUZf@@@@ r3 mol reproductive high -dmND@DCdfVUrjUZ`PH@@ r3 mol reproductive high -dmND@DCdfVUrjUZfZj@@ r3 mol reproductive high -dmND@DCdfVUrjUZjZj@@ r3 mol reproductive high -dmNDPNYPBABLdTRbch^fjfih@@ r3 mol reproductive high -dmNH@NAIYe^neZdHB@@ r3 mol reproductive high -dmN`@@raeJY{VfFP`JX`@ r3 mol reproductive high -dmN``DkaT@aIefUneVjVjP@ r3 mol reproductive high -dmNh@HqaTDeee^FUhBBa@@ r3 mol reproductive high -dmOD@DiPyIee\feVhDB@@ r3 mol reproductive high -dmOD@DjPyIee\feVhDB@@ r3 mol reproductive high -dmOH@DK`RYYWkiUiB@`@@ r3 mol reproductive high -dmT@p@SHbDbLddJRRjjj`@ r3 mol reproductive high -dmTB@@ieReUWjjj`@ r3 mol reproductive high -dmTB`HSBCpRjuUZjj`@ r3 mol reproductive high -dmTBpHin@JspDJrQIRGJjZj@@ r3 mol reproductive high -dmTFPHSFFPBNBLddNRdVje`@ r3 mol reproductive high -dmTH@@RUUUjjj`@ r3 mol reproductive high -dmTJ@@IaUIf[~jjj@@ r3 mol reproductive high -dmTL@@xTiUUZjjh@@ r3 mol reproductive high -dmTLPDp`|HdLddJTTfjj`@ r3 mol reproductive high -dmTl@HQeBiRVY~Zfi`@ r3 mol reproductive high -dmU@HLT@a@c`bPaIggYjjf@@ r3 mol reproductive high -dmU@pLD@a@c`cHheEKFjfh@@ r3 mol reproductive high -dmUD@DXARYW[ZffP@ r3 mol reproductive high -dmUH@JXDiUYjjjh@@ r3 mol reproductive high -dmULAFDDIiGdf{evfYh@@ r3 mol reproductive high -dmUL`DzIT@cIICeMEjjX@@ r3 mol reproductive high -dmVB`NiiT@cIDeEKJijX@@ r3 mol reproductive high -dmVH@DAIYUUjjj@@ r3 mol reproductive high -dmVL`JFU@HReYyjjf`@ r3 mol reproductive high -dmWH`DphCpRjyfZjj`@ r3 mol reproductive high -dmtB@@QeR[f]FV``H@@ r3 mol reproductive high -dmtB@@QeR[f_FV``H@@ r3 mol reproductive high -dmtD@@UIfU|YZB@`@@ r3 mol reproductive high -dmtD@@WHhhhiVF@bJ@@ r3 mol reproductive high -dmtD@@iJ[g_ahHBP@@ r3 mol reproductive high -dmtD@@kIEEHeYV`j@@@ r3 mol reproductive high -dmtH@@RYeY[hBBh@@ r3 mol reproductive high -dmtH@@Rfuu[j@BXBA` r3 mol reproductive high -dmtL@@SdfVyyUjB@@@ r3 mol reproductive high -dmtL@@YTf[gqehHB@@ r3 mol reproductive high -dmtL@@yTee[VE`BJ@@ r3 mol reproductive high -dmt`@@kaRe[vI`BFhBF` r3 mol reproductive high -dmu@@@aJueXYj`@`@@ r3 mol reproductive high -dmu@@@aJue\Yj`@`@@ r3 mol reproductive high -dmu@@@aJufVUj`H@@@ r3 mol reproductive high -dmu@`ITICHhhdbfz@`j@@ r3 mol reproductive high -dmu@`ITLSHhhdbfz@`j@@ r3 mol reproductive high -dmuD`LVD@HrRRqIXYV`@`@@ r3 mol reproductive high -dmuDaBWaBHJQ{HhheEVfBAb@@ r3 mol reproductive high -dmuH@HPDefUyUjB@@@ r3 mol reproductive high -dmuL@DTAeIf]XfZjih@@ r3 mol reproductive high -dmuL@DpFUIeY~nZijd@@ r3 mol reproductive high -dmv@@@Rf~UeZj@@@@ r3 mol reproductive high -dmvD@DATf^Uqej@B@@ r3 mol reproductive high -dmvD@E@dfYwVzB@j@@ r3 mol reproductive high -dmvD@EADfyW^Ejjj`@ r3 mol reproductive high -dmvD@NADfVyyUjB@@@ r3 mol reproductive high -dmvDPDePbAbDfUmjZ@Bf@@ r3 mol reproductive high -dmvD`EJPqDfY}VzB@j@@ r3 mol reproductive high -dmvD`La@BLddlTReUhB@@@ r3 mol reproductive high -dmvD`NePBDig{ljfZf`@ r3 mol reproductive high -dmvH@FCHhhhdYUhJ@@@ r3 mol reproductive high -dmvL@FAIR[f^EV```@@ r3 mol reproductive high -dmvLaFFUCDZYyIe[fn`BF`@@ r3 mol reproductive high -dmw@@@aDiUmYUj`@@`H r3 mol reproductive high -dmw@@@aLdRbaReVj@@B@` r3 mol reproductive high -dmwDAHEPRISlbfbRazV`BH@@ r3 mol reproductive high -dmwDAHYPRISdfygQehHB@@ r3 mol reproductive high -do\@T@dDdLdJdFdAdEdCdKdGdLbdLaffdjjjjh@@ r3 mol reproductive high -do\J@@imMJUUUUjjjjh@@ r3 mol reproductive high -do\L@@idiUUUVjjjj`@ r3 mol reproductive high -do\NPHQevw@DHDrRYJKJHqjfii`@ r3 mol reproductive high -do]B@L\Dv|bbtTTUTZjjjX@@ r3 mol reproductive high -do^J`CaLKP|LddqbbTlZijfhHi@ r3 mol reproductive high -do^bAHs[\DxXeNrJYQQEIQjiji`@ r3 mol reproductive high -do|D@@QIn[WVeVj@Bj@@ r3 mol reproductive high -do|D@@uJYU]]zZBBJj@@ r3 mol reproductive high -do|H@@RV^UviUj`@j`@@ r3 mol reproductive high -do|H@@rJIKJQFRf`@jjh@@ r3 mol reproductive high -do|H@@rJJIHiIIn`HJjh@@ r3 mol reproductive high -do|J@@S[_HheDdeDYMjBBb`@@ r3 mol reproductive high -do|L@@iTinU]_ihHHjXBC` r3 mol reproductive high -do|L`BmpbDfYU]Ya``biX@@ r3 mol reproductive high -do|hHLJkL@bYAYCYCIEEMMHi|jfZjfh@@ r3 mol reproductive high -do|h`LInT@aJYV}zFZZjVj`@ r3 mol reproductive high -do}B`K^DxpBLddLRRVbgUhHHZ@@ r3 mol reproductive high -do}DPAuSBHJHRYg]nVzB@ij`@@ r3 mol reproductive high -do}DPAuSCDJHRYgunVzB@ij`@@ r3 mol reproductive high -do}H@DpLbbbLRVTWVj`@j@@ r3 mol reproductive high -do}`@@pjX|dTTRfb\k`Hbjj@@ r3 mol reproductive high -do~B@BAC_HiiMhdh]mjj@H`@@ r3 mol reproductive high -do~B@BAK]InVuf[fjjif`@ r3 mol reproductive high -do~D@DAdfuke^wZjhH@@@ r3 mol reproductive high -do~J@BAFM|bfffbRavvjh@b@@ r3 mol reproductive high -do~L@CB]RfyV~^F`HJj`@@ r3 mol reproductive high -do~L@GBnrQSQQIGHUhHbJh@@ r3 mol reproductive high -do~L@LANRYye[iujBBJ`@@ r3 mol reproductive high -do~L@M@iRYg^ufzB@jj`@@ r3 mol reproductive high -doBAHXpSAb\yIgUnUmvji`@@@ r3 mol reproductive high -doD@Ds`gHhhcDliIUjiijh@@ r3 mol reproductive high -doD@HPpEIYunUmvji`@@@ r3 mol reproductive high -eFA@lbrJ@ r3 mol reproductive high -eFA@lhbL@ r3 mol reproductive high -eFAADdRJ@ r3 mol reproductive high -eFABHhbL@ r3 mol reproductive high -eFABljrL@ r3 mol reproductive high -eFACDlRL@ r3 mol reproductive high -eFB@Jc@@ r3 mol reproductive high -eFBBHc@@ r3 mol reproductive high -eFBBPc@@ r3 mol reproductive high -eFBCDc@@ r3 mol reproductive high -eFDBb`@ r3 mol reproductive high -eFHBJ@ r3 mol reproductive high -eFHBL@ r3 mol reproductive high -eFJHbHh@ r3 mol reproductive high -eFPBc@@ r3 mol reproductive high -eFhXNic@@ r3 mol reproductive high -eMA@HPaIT@ r3 mol reproductive high -eMA@JXaIh@ r3 mol reproductive high -eMABPYAIh@ r3 mol reproductive high -eMBBHRZ@ r3 mol reproductive high -eMCALhabHz@ r3 mol reproductive high -eMDARU@ r3 mol reproductive high -eMDARZ@ r3 mol reproductive high -eMFI@bMP@ r3 mol reproductive high -eMFIBrMP@ r3 mol reproductive high -eMHAIX@ r3 mol reproductive high -eMHAIh@ r3 mol reproductive high -eMHBN`@ r3 mol reproductive high -eMIHdFPRZ@ r3 mol reproductive high -eMPAR^@ r3 mol reproductive high -eMPBch@ r3 mol reproductive high -eM`AIx@ r3 mol reproductive high -eMdXZWde`@ r3 mol reproductive high -eMhDRV@ r3 mol reproductive high -eOBBHcfh@ r3 mol reproductive high -eOHBNZ`@ r3 mol reproductive high -fH@@ r3 mol reproductive high -fH`P@@ r3 mol reproductive high -fH`T@@ r3 mol reproductive high -fH`X@@ r3 mol reproductive high -fHap@@ r3 mol reproductive high -fHbd@@ r3 mol reproductive high -fHbh@@ r3 mol reproductive high -fHcP@@ r3 mol reproductive high -fHcd@@ r3 mol reproductive high -fHdH@@ r3 mol reproductive high -fHdP@@ r3 mol reproductive high -fHe@@@ r3 mol reproductive high -fHep@@ r3 mol reproductive high -fHf@@@ r3 mol reproductive high -fI@@ r3 mol reproductive high -f`aA@@@ILsKWRpTADUUP@@ r3 mol reproductive high -f`aA@@@YEEDdTddf\`HJjj@@@ r3 mol reproductive high -f`aA`D@HdclbfdQTtRSoMUTp@@@@ r3 mol reproductive high -f`aI`@BJ]xBAIMrlvkYsUTuRt@@ r3 mol reproductive high -f`aPP@B\@bwlbfdRLRTIgMUT@Q@@@ r3 mol reproductive high -f`aPP`M^djs`QAHa`PXHrJJJYRZr\EADBtl@@@ r3 mol reproductive high -f`aPRDL^`cQ`AAnrRPjIIQUJlmPPLT@@@ r3 mol reproductive high -f`aP`@DJA{HdiEDXhkKRuSUTl@@ r3 mol reproductive high -f`aP`@LV@cHhmEDidYISTAAUP@@ r3 mol reproductive high -f`aQB@NJdBHRYWVyncH@JZjp@@ r3 mol reproductive high -f`a`C@C@dDRFICHiCDeBhlJUT@EUP@@ r3 mol reproductive high -f`a`P@B@TZvQQQIIRsHTfiZfZd@@ r3 mol reproductive high -f`a``@M@PdwMkjteMT@ES@@@ r3 mol reproductive high -f`aa`@D@IiIeyWUYJZh@Jj@@@ r3 mol reproductive high -f`aa`@M@D[IEDdhbeiqUAAQUP@@ r3 mol reproductive high -f`apRBNJMACo@BES{lddJVbbbfcKUURsP@@ r3 mol reproductive high -f`aq@@DV\CHheEDcddkSTE@UP@@ r3 mol reproductive high -f`i@P@@HD[HhdihdhUSbkN|uHPTUB@@ r3 mol reproductive high -f`i@P@@HTYIe[VUZLeiwfi@HjhP@@ r3 mol reproductive high -f`i@a@FRAD^bDfUm[WirRkN`BJ@BH@@ r3 mol reproductive high -f`iP@@@TRfY]{WEAJ]zPhH@B@@@ r3 mol reproductive high -f`iQA@B\|@HpDISLzsnRdcN}TaAQUD@@ r3 mol reproductive high -f`ia`@D@M{HhhhddYdJVkN|uPTDUD@@ r3 mol reproductive high -f`q@@@DjYU[oxjQh@@BJ`@@ r3 mol reproductive high -f`q@@`@QAHbtQzHrJJKKQIPlxYtDA@DP@@@ r3 mol reproductive high -f`q@A`@XaLQfHKDMb^qDfYn}gyJshHb@``@@ r3 mol reproductive high -f`q@`@@HR[YWYTTg^Z`@`@@@@ r3 mol reproductive high -f`qA`@@HddrsLk~gV|u@D@@@@@ r3 mol reproductive high -f`qHA@DBMxDQhHRYWVY~cMV`@jikHDMH r3 mol reproductive high -f`qHP@DXxHDg^rJIQSPiITyhsSUUUS@@@ r3 mol reproductive high -f`qI`@DXUh@oYEEEELTlfRtYjjZfi`@@ r3 mol reproductive high -f`qI`BHDDhBOPeGIMsOljpSoMSUUUL@@ r3 mol reproductive high -f`qPA@B^ADVbLbbbrtRTKNF]A@PAD@@@ r3 mol reproductive high -f`qPHAHV@cGIF]zDxzt~{HhmEDdThJRmMUUUST@@ r3 mol reproductive high -f`qPP@LT@cfdfV^V]IRwfjhJBD@@ r3 mol reproductive high -f`qP`@DV@YIfYmYZLuyj`hFb@@@ r3 mol reproductive high -f`qP`@DXAqIfWnUrL]yjihHB@@@ r3 mol reproductive high -f`qPaABLEh@Q@HIKIEvnrQJJJIQXj][uPAA@@@@@ r3 mol reproductive high -f`qQA@CVHBHEDYEEDeMCLfR]zBBbfh`@@ r3 mol reproductive high -f`qQB@G^`@HRkfUWvQmVZ@@@J@@@ r3 mol reproductive high -f`qQ`@BF@abS\oLkjL{sUUHPD@@@ r3 mol reproductive high -f`qQ`@BZ@crS]lrnruYsUTa@T@@@ r3 mol reproductive high -f`qQa@LL`bp@b`QddebRRRrxKQejZ@J`@@ r3 mol reproductive high -f`qQb@FBt{p@aJYUW]lTEJfZjZZ`@@ r3 mol reproductive high -f`qQb@LD``P@cIICDhhlUrSoKUST@@@@ r3 mol reproductive high -f`q`P@L@PZvQQISQIPiVg^ZhBBjH@@ r3 mol reproductive high -f`q`a@APX@H}HIUwOJ~JUgMRtDAP@@ r3 mol reproductive high -f`q`a@IN|BHDDILklnmQbmP@TuSB@@ r3 mol reproductive high -f`q`b@ILD@HrQQJJMQITX{uMTt@D@@@ r3 mol reproductive high -f`qa@@E@rQQIZYQF\EjuA@TuQ@@@ r3 mol reproductive high -f`qaB@AFADYEEDeHUDV\]z@`jfh`@@ r3 mol reproductive high -f`qaB@BXAHYDihiheD]F]zfh@@@@@@ r3 mol reproductive high -f`qa`@D@x{HhheKDeeQakMUL@EP@@ r3 mol reproductive high -f`qa`@L@QqIgfUnyZTYjBBJh`@@ r3 mol reproductive high -f`qi`@DTxIPC^rJIQQJiILyISUKMUU@@@ r3 mol reproductive high -f`qp@@@Hpds\rj~gV|uP@@@@@@ r3 mol reproductive high -f`qpP@DXxBSoYEDhihTdjBtYijjji`@@ r3 mol reproductive high -f`qpa@LR}A@@`PQddaTTRRUtxuejBPha@@ r3 mol reproductive high -f`qqaBLDhJR`AA`bdr{IEELiiXeacoTtsMMR@@ r3 mol reproductive high -f`~@P@@HtYIeU]mVjjij`@@ r3 mol reproductive high -f`~@`@@^rIRHiIJQUUUUU@@@ r3 mol reproductive high -f`~@p@@HYHsdf]UUVZjjjf@@ r3 mol reproductive high -f`~@p@@TYhwdiUUU]jjjjj@@ r3 mol reproductive high -f`~@q@HHpjs`AA`cIIChlhmHmUUTl@@ r3 mol reproductive high -f`~A@@@ILjjjjuUUUT@@ r3 mol reproductive high -f`~PA@F\@DPBDiUVYUjjjjj@@ r3 mol reproductive high -f`~`J@NPQafcN|CprRRjYQQFMTuSS@@@ r3 mol reproductive high -f`~a@@D@rJIIJHiIMSUMU@PRe@ r3 mol reproductive high -f`~hPBHXhsPDV]BT\dvvjw[TuUSP@@ r3 mol reproductive high -fbc@@@LdbbbbbbQQsEBMKuhir@@@@@@@@@@ r3 mol reproductive high -fbc@@@LdbbbbbbcJwEB]Hu`ir@@@@@@@@@@ r3 mol reproductive high -fbca`@D@BeIfYeUuu`iJMytTyZh@P@bjB@@ r3 mol reproductive high -fbca`DK@iftiSJzljlxipVk^bEMA@@@DU@P@@ r3 mol reproductive high -fbe@@@LdbbTbsbrTWESMUSSML@dESY|` r3 mol reproductive high -fbe@P@@LU[HhhhehcBdeHsPTEEUT@@@ r3 mol reproductive high -fbe`p@L@PkPTiLjlr{{V|uU@pQS@@@ r3 mol reproductive high -fbei`@LTDjpDIRYUyWYVtYjj@Bjj@@@ r3 mol reproductive high -fbepb@BZ}IPHaIf]V_VUgHHBfjjh@@ r3 mol reproductive high -fbepb@BZ}IPLQIf]V_VUgHHBfjjh@@ r3 mol reproductive high -fbexc@LDXXJ\pP@HdD^BLddNfRRbRrcoKTuUKTt@@ r3 mol reproductive high -fbm@A@@IdHaJkfYUU|tWICfj@@@@@@@@ r3 mol reproductive high -fbm@P@@BSgHhhhheEl\hHrgV|t@PDASP@@@ r3 mol reproductive high -fbmAB@H@SDjnYeUWsQ\dNZh@@@@@@@@ r3 mol reproductive high -fbmAB@H@SDjnYeUWsQ\dNZjjjjjjh@@ r3 mol reproductive high -fbmAP@@BLENQQQQQQQYG[bm^]Eh@bHAJ`@@ r3 mol reproductive high -fbmAP@@HeENQQJJJIKZIUgMNmyj@H@Bj`@@ r3 mol reproductive high -fbmA`@@ZMdRbbTVTJRRxIwdyXBBjZ@@@@@ r3 mol reproductive high -fbmHR@LLDhwdy@DYHieDdUDhlnBdipZ@`Zjjhh@@ r3 mol reproductive high -fbmIR@AZ|fBKNb@HrRPrJI[QQETEHr\kUUUMRmP@@ r3 mol reproductive high -fbmIR@LLDiAoIr@HrJSJIHjIQY\EIS`uUJuUUUP@@ r3 mol reproductive high -fbmP@@@FRieYgUWxYrPyjj`B@HH@@@ r3 mol reproductive high -fbmP@@@IrRJJIQJIHdjmhKhu@DPQAT@@@ r3 mol reproductive high -fbmPB@AIADILklsJktYyL\p@UTEAA@@@ r3 mol reproductive high -fbmP`@DJ@{HhhhhhdhbRqUhaRuP@pPAP@@@ r3 mol reproductive high -fbmP`@DJAgHhhhhhdhcjqUhaRuP@pDAP@@@ r3 mol reproductive high -fbmPb@AJ|dDPdrmrljoSfgQs@DMPTBD@@@ r3 mol reproductive high -fbmQ`@DX@sJSJmsJkyJNbEKUM@@@E@@@ r3 mol reproductive high -fbm`B@I@bDfYYu^yV\uYNXB@P`B@@DAP r3 mol reproductive high -fbma@@I@rQSQIYQQIH|ExJ\tAAUAPA@@@ r3 mol reproductive high -fbmaB@KDADILsjlmklxZr\pPEUPPA@@@ r3 mol reproductive high -fbmhR@DXXJQoIrBHrJIJKJFIQYTyIS`pAEUUUPp@@ r3 mol reproductive high -fbmiP@DTxIPC^SgHheEDjheEdsdeNBuRsUUUU@@@ r3 mol reproductive high -fbmiP@LF]EHIJugIEEEDdhjllRegAcUUUPHET@@@ r3 mol reproductive high -fbmpC@KQRBHDDZBLbbbRaRtTRSNJtgLAAUMUjTBFh r3 mol reproductive high -fbmp`@DXHBRSL|lvj}F^SGKUUH@@A@@@ r3 mol reproductive high -fbmp`@LFbAFQQISISJQIFRcVbej`@jjjJ@@ r3 mol reproductive high -fbmq@@ARLAJ[eg_fWbmFSf``Xj@`D@@ r3 mol reproductive high -fbmq@@DBBAIeeU{e^VgASejBBIB@H@@ r3 mol reproductive high -fbmq@@IJLAJ[V{WeY`mFbf`BFj@BD@@ r3 mol reproductive high -fbmq@@IJLAJ[V{WfU`mFSf`BFj@`D@@ r3 mol reproductive high -fbu@P`HHdhCaapXxZ\LdTbdQLblRRmIsUUUUP@P@@ r3 mol reproductive high -fbuA@@@ILsOsJk~SGKUUP@@@@@@ r3 mol reproductive high -fbuAb@KIrBHrJJIJKIQGJLx[tAAUSULP@@ r3 mol reproductive high -fbuHa@LRlFB@A@`cIIBhhddmeIiqkKTDaQUP`@@ r3 mol reproductive high -fbuI`@DXtX@dyEEEEDbddUFRLyjjZjZfX@@ r3 mol reproductive high -fbuPP@DD@xL\bbTRTRVReUNRLu@aQTuP@@ r3 mol reproductive high -fbuPb@GQxDDPdrnlkk]QakP@T@EMP@@@ r3 mol reproductive high -fbuPc@IFSdD`bPqHYEHXdimDheAJCFj@H`HF@@@ r3 mol reproductive high -fbuPr@NBYhwdyAbIJsNk[NbdxLtmTuUUPHP` r3 mol reproductive high -fbuQP@DA@JR\yEEEDhdUmMBLLyj`VBJf`@@ r3 mol reproductive high -fbuQP@DTAqTTyEDhhkMEDhfBCejii``X`@@ r3 mol reproductive high -fbuQP@DV@JR\yEEEDhdXceBLMyj`VBbf`@@ r3 mol reproductive high -fbuQ`@DX@ZvQQZQQQQIH{rXyZj`A`@@@@ r3 mol reproductive high -fbuQa@EVEHpHc`QdTRVTaTrbRhqNX@IZZjh`@@ r3 mol reproductive high -fbu`Q@LJMxH@cHQdbbRbTTRfuqQrZj`f`ZJ@@@ r3 mol reproductive high -fbu`R@DFmzH@aIfYU^]^QmNZhJBbjh@@ r3 mol reproductive high -fbu`c@IQRBPQHXdLbdLRTvbbTPeAsU@DPPL@@@ r3 mol reproductive high -fbuaP@D@M[tTfYeUyuyFtyj`hJJj`@@ r3 mol reproductive high -fbuaPBH@PrQhRclbfbbtQfbRpeQRtDDS@A@@@ r3 mol reproductive high -fby@A@@IdHaJkUUUUVjjjjjj@@ r3 mol reproductive high -fby@`@@HR[UUUUUZjjffj`HTvP r3 mol reproductive high -fby@`@@YRUUUUUUjknknj`@@ r3 mol reproductive high -fbyPH@BZ@bR`qSgHieDeDXdhhuUSUTs@@@ r3 mol reproductive high -fbyPq@BY`cGhi@DABLddNRRRRRTbuUUUTl@@ r3 mol reproductive high -fbyQ@@DX@dsLjjjjuUUUUU@@@ r3 mol reproductive high -fb}@@@DjYee]^RD[S`q@@@@@B`@@@ r3 mol reproductive high -fb}@@@LdbbbbbTqvwEBlXJ\`@A@D@@@@@ r3 mol reproductive high -fb}@`@@YRYVumUWhrRkNbf@@@@@B@@@@ r3 mol reproductive high -fb}@`@@YRYVum[ehrRkNBf@BjjjjJ`@@ r3 mol reproductive high -fb}@`D@HQvQSRJIJUJYHRiZ]yNVjjjjjjj@@ r3 mol reproductive high -fb}AB@L`BLbbdRQfRfRqNRUYtTuUUUP@UP@@ r3 mol reproductive high -fb}A`@@JsdbbTTRrLrVqPVkNbfjjjj@Bj@@@ r3 mol reproductive high -fb}A`@@\sdTTbRLrTrVIrRkNbejjjj@Bj@@@ r3 mol reproductive high -fb}P@@@NrRJJIQJKEKB\hvoQsTEQ@PDT@@@ r3 mol reproductive high -fb}P@@@PRfYVVwWppQoIcfZj``@@X@@@ r3 mol reproductive high -fb}P@@@XrQQQJJYIKXxXHshaRuS@D@AT@@@ r3 mol reproductive high -fb}PB@NZADILkljlktXkS`is@ATu@`E@@@ r3 mol reproductive high -fb}Q@@AJ@drmvjroSbmNBgL@PttD@T@@@ r3 mol reproductive high -fb}Q@@EI@drmrsvoSdeV\gL@PDPD@P@@@ r3 mol reproductive high -fb}Q@@IZ@eMk]jmjpVcN|gM@DMM@@T@@@ r3 mol reproductive high -fb}QB@I^DBHrJIKJSQQIHtYjw`is@AUTC@E@@@ r3 mol reproductive high -fb}``@H`YdTTTTTLQbJxkUg^bfBH@bBjH`@@ r3 mol reproductive high -fb}a@@H`rQSISJQIIHlxjwhaSP@UUUUEP@@ r3 mol reproductive high -fb}pB@ARTBHRYWYUVuhqVg^Sf@BZZP@J@@@ r3 mol reproductive high -fb}pB@ARTBPRYWYUVuhqVg^Sf@BZZP@J@@@ r3 mol reproductive high -fb}q@@DDtAIf[eUo\cMNlENVjdJ@@A`@@ r3 mol reproductive high -fb}q@@IJtAJ[V{UUU`mF]yNZ@HZZ`@`@@ r3 mol reproductive high -fde@``ARAbDq@xd\QIf]UUUYqVg^``Jh@h@@@ r3 mol reproductive high -fdeH@@@XH[IEEEeddhUSdeV\ADUUUQP@@ r3 mol reproductive high -fdeIB@LLxxH@aJWYUWVpPTcViYj@JZ@@@ r3 mol reproductive high -fdeP@@@PReenUe|TLGtYj`@B@P@@ r3 mol reproductive high -fdeP@@@RRi^VV}z\txLZjB`@@`@@ r3 mol reproductive high -fdeQ@@DXAdTTtTTRbqUXp_QZh@``A@@@ r3 mol reproductive high -fdeQ`@DT@hvQQJIPqSYIgMVCEjjif@H@@@ r3 mol reproductive high -fdeQ`@DTAsVQQJJJVKII`cVCEjijZ@H@@@ r3 mol reproductive high -fde`a@AZlBHYDYEDeDXhiij\Lywh@bifjJ@@ r3 mol reproductive high -fde`b@H\d@HRfYfWwQJMxLZjfZ``H@@ r3 mol reproductive high -fdeaB@OBADILk\}vmNJLFL@PuP@D@@@ r3 mol reproductive high -fdehB@L\tYp@cIEDeEEDdfKUgAcPQ@EP@`@@ r3 mol reproductive high -fdei`@LZlFHIJrQQQQYQEYDhZw`uUUPHEP@@ r3 mol reproductive high -fdi@Q@ARUh@Q`HRf^yoYlTjVfZjj@@ r3 mol reproductive high -fdi@`@@FrJJIJQIFPly@PUUUP@@ r3 mol reproductive high -fdiA`@@HedTtbJRbbV|Ejjj@``@@ r3 mol reproductive high -fdiHbBDBuxLPQGicvQQIYJJIHrcH@Jjjf@@@ r3 mol reproductive high -fdi``@D@TdrrvokFluUA@UP@@ r3 mol reproductive high -fdiqb@JLtRR`RFQQQYIPiIIgJVjVjj`@@ r3 mol reproductive high -fdiqb@LR}A@`AFRREQQKKI[UejA`bj@@@ r3 mol reproductive high -fdq@P@@HMYIeUU{UZjjijh@@ r3 mol reproductive high -fdq@P@@HM[HhddhbidhuUUSUP@@ r3 mol reproductive high -fdqPP@LQ@`p\bbRTTaVRcUUUUS@@@ r3 mol reproductive high -fduP@@@PRfYVuU\LxIt_Afjh@@A@@@ r3 mol reproductive high -fduP@@@PRfYemurLyJp_QfjB@@A`@@ r3 mol reproductive high -fduP@@@XrQQQJJEIKXYpU`~buS@@@E@@@ r3 mol reproductive high -fduQ@@DVAdTTRbLRrRYrVcVCEjejjjjh@@ r3 mol reproductive high -fdup@@@PheLr|jjxipSh~CMUP@@B@@@ r3 mol reproductive high -fdy@A`@QAHadPzHCDQbLbbbfJbRbwAV}ADD@QP@@@ r3 mol reproductive high -fdy@`@@HRYUm]eUZCEjh@H@@@@ r3 mol reproductive high -fdy@`@@HrJZJIPiSIBdFKUUUP@H@@ r3 mol reproductive high -fdy@`@@QRYWYnuzL|F@Bj`@`@@ r3 mol reproductive high -fdy@a@CVADQbLbbRrbbbQuF^C@ATC@P@@@ r3 mol reproductive high -fdy@b@@qAHILrrkssIF}A@AAPp@@@ r3 mol reproductive high -fdyA@@@IMLrroioNcU@DPA@@@@ r3 mol reproductive high -fdyAP@@BUhNQQQQQQDqIdgAZYjZZj`@@ r3 mol reproductive high -fdyA`@@DMdTTTtRRQtXKSfiB`XZ`@@ r3 mol reproductive high -fdyA`@@HedTtbabRrRMXLVjjfh@@@@ r3 mol reproductive high -fdyAa@OAbBPUHYEEDhddYeFRMZB@B@i`@@ r3 mol reproductive high -fdyAb@FAb@HrQQJVIKJJDihuRl@ESP@@ r3 mol reproductive high -fdyAb@NV\@HrQQQPsQSHdhFMRsTC@P@@ r3 mol reproductive high -fdyH`@DXxHDlbbTTRbTrmNAbtuSUUU@@@ r3 mol reproductive high -fdyHb@LBeFB@AFRREQQIIZ[Sk^Vh@@@h@@@ r3 mol reproductive high -fdyP`@DR@IIf_mfYHstVjihBH`@@ r3 mol reproductive high -fdyP`@DZ@GHhleEEDbmKSoMURE@U@@@ r3 mol reproductive high -fdyP`@MNAKIEDheEDZhHvkTDQTMTP@@ r3 mol reproductive high -fdyPb@INHDD`dsJnnkLDkTDDUUSB@@ r3 mol reproductive high -fdyPb@NJCDDQdTTRatRbTXIwhBH`HF@@@ r3 mol reproductive high -fdyQ@@DQAdTRbbRbbuUzpVh@@bB@@@ r3 mol reproductive high -fdyQ`@BN@`VQSQIQPqIXs`qZjfdHB@@@ r3 mol reproductive high -fdyQ`@DLAHrSKjrmjZpXmUUU@A@@@ r3 mol reproductive high -fdyQ`@DZAxJSNlrnkKUgMURDAU@@@ r3 mol reproductive high -fdy``@F@PdwLkwKBUxKPPPAA@@@ r3 mol reproductive high -fdy```LHx@H}HAdHrFQQIYJIJFPeCVZjh@Jj@@@ r3 mol reproductive high -fdy`b@LHx@HrJIKIQIPrDhZsUU@AUP@@ r3 mol reproductive high -fdy`b@N^BBHrJJIPzJIQLDzLADPPL@@@ r3 mol reproductive high -fdyppBDDDCbkAbR^]dTtRaTRbrXHsfiZjjjh@@ r3 mol reproductive high -fdyqb@LFcA@`AFRREQQIJH{WcVVhIBhhP@@ r3 mol reproductive high -fgAAB@A@bDfUmmZLEHuh@J@@`@@ r3 mol reproductive high -fgAQ@@BT@dsJ}kQ`iFmTuP@T@@@ r3 mol reproductive high -fgApB@LLx@HRevUUpPTcViYj@H@@@ r3 mol reproductive high -fha@B@@IbURjjjmUUUUT@@ r3 mol reproductive high -fha@R@HHehBYddbRRbbSUUULuT@@ r3 mol reproductive high -fha@R@HHpPG`eUjjjjuUUUU@@@ r3 mol reproductive high -fha@b@HR@fYIHddhdbeUUSUU@@@ r3 mol reproductive high -fhaPq@BA`cAg^@DVBLddNbbbjdVjjje`@@ r3 mol reproductive high -fha`@@@IJjjjjuUUUUP@@ r3 mol reproductive high -fheA@@@YEEDhmEhbpTmFmxKPI@TAB@@@ r3 mol reproductive high -fhe`@@@YHhhhdeEbRdcZ|xM@@@@A@@@@ r3 mol reproductive high -fhi@B@@QFQQQJGQSILyxLAAU@@@@@ r3 mol reproductive high -fhi@B`@QAHadPzHCDYEEELUDeCpUoPQA@DP@@@ r3 mol reproductive high -fhi@`@@ArJIKJQPiZcG^`@j`@`@@ r3 mol reproductive high -fhi@`@@HR[fyYwU[pVjB@@@@@@ r3 mol reproductive high -fhi@`@@^RYvUm]djsfj@@@h@@@ r3 mol reproductive high -fhiA`@@H|dwMkZ{IUgMT@@AP@@@ r3 mol reproductive high -fhiAc@HHDApHxT\DjUgf{zBuZj`bHj`@@ r3 mol reproductive high -fhiIP@DDhpDc^BdwJ|lzsfkMMMUUU@@@ r3 mol reproductive high -fhiIP@DXxHDc^CdTRbfaTVUNZltuUUUL@@ r3 mol reproductive high -fhiP`@DZAyIgVYW^VkNZjdHBh@@ r3 mol reproductive high -fhiPb@OA``@QddabbRRvRkF\m@@@E@@@ r3 mol reproductive high -fhiPp@DX@IQoARYeYv}YsUfjffjj`@@ r3 mol reproductive high -fhiQ@@AJAdTTTTTJtPeVBtuTttt@@ r3 mol reproductive high -fhiQ@@INAdTTTbRarrk^BtEP@@@@@ r3 mol reproductive high -fhiQB@BJd@HrJJIKPjII`oA``ah@@@@ r3 mol reproductive high -fhiQP@DX@IW`yEEDeDdbdsakMUMMUU@@@ r3 mol reproductive high -fhiQR@IV`Sa``dLbRbTQbbvXIwjjjjYf`@@ r3 mol reproductive high -fhiQR@JLIIW``kDfYu[UV\MZejfjjh@@ r3 mol reproductive high -fhiQR@LVXhw``BLdTVbRbbqqRVjYjjZj`@@ r3 mol reproductive high -fhiQ`@EZ@JVQQQQQIEYLTYsT`tDU@@@ r3 mol reproductive high -fhiQ`@HHAIvQJJQJIHqBdYsUUUUUP@@ r3 mol reproductive high -fhi`P@D@ExJSLrkoqFZluPLDSP@@ r3 mol reproductive high -fhi`Q@@pP{p@`pQddabTVrTgIJtmADEKP@@ r3 mol reproductive high -fhi``@B@PdwWLjn[s`mU@@@@@@@ r3 mol reproductive high -fhi``@N@PdrkLjn[s`mUTEAD@@@ r3 mol reproductive high -fhia`@D@HkHheDdhiTiF|EjBA`@@@@ r3 mol reproductive high -fhia`@F@ykIEDdUEDejLmzjj``b`@@ r3 mol reproductive high -fhiab@LRMx@PeLwN}obfkUU@aET@@@ r3 mol reproductive high -fhihB@NJtXHHcHhdlhhiDzLMz@BijjD@@ r3 mol reproductive high -fhihbBDBtYw``bGRGlbbRrTTRLhpuh@JijX`PT` r3 mol reproductive high -fhipR@BTYIW``dDfY][UV\MZejfjjh@@ r3 mol reproductive high -fhipS@IZCpSo@bBAA`cHhheHeTiFJlFBAXiVH@@ r3 mol reproductive high -fhipS@IZCpSo@bBAA`cHhheHeTiFJlFBAXjVH@@ r3 mol reproductive high -fhip`@DDh@VQQJIIFIJBd{sTuL@E@@@ r3 mol reproductive high -fhipp@DXH@Rc^BdsJsmzsfkMUMMUU@@@ r3 mol reproductive high -fhiqP@DXxBQoArJIQSPjKJ`mVZZjjjf@@ r3 mol reproductive high -fhiq`@DDTA`TfYg]m^B|EjiZjjh@@ r3 mol reproductive high -fhq@R@HHehBYddbRRbbSRcUUTsUR@@ r3 mol reproductive high -fhqAb@AV\BHRYV}Umhr@Bjij@@@ r3 mol reproductive high -fhqQ@@DT@drlsLjXKUAQEP@@@ r3 mol reproductive high -fhqQa@EVEHpHc`QdTRVTaTrUFP@RtuP@@ r3 mol reproductive high -fhqQa@EVEHpHc`QdTRVTaTreFP@RtuP@@ r3 mol reproductive high -fhqXB@J\dZpPAFRIJIJJqIBeUSMMUpHJ` r3 mol reproductive high -fhq`P@L@PkRSJkLn}oMUPLDH@@ r3 mol reproductive high -fhq`R@LPQhp@cIIBhdeDTeVVhHFJP@@ r3 mol reproductive high -fhq`c@BN|BlEVJkLbbbfbUbbYJBBbjZ@@@ r3 mol reproductive high -fhqa`@J@QqIenvyepVjj`H`@@ r3 mol reproductive high -fhqa`@M@DYIfUoWigHBBjjh@@ r3 mol reproductive high -fhyA@`A@qBXglPNHdsNjjjsdeV]A@U@E@@@@ r3 mol reproductive high -fhyA`@@H}dTRbTTTUQFJ]xKTuUMST@@ r3 mol reproductive high -fhyH@@@XxkIEDeDehTjBYspP`Xj@@`@@ r3 mol reproductive high -fhyHB@L\uX@QdbbRbbRRhmFmxMAD@T@H@@ r3 mol reproductive high -fhy``@D@TdsLrjQaoNBuP@`@P@@@ r3 mol reproductive high -fhyh@@@XdhvRJJJYQIWTyIQkMSULuUP@@ r3 mol reproductive high -fhyh@@@XhrRTsvzrmNBexHPPu@@P@@ r3 mol reproductive high -fhyq@@DTtAIemU[TTmF|Ej@B`@H@@ r3 mol reproductive high -fle@`@@HrJZQEJIJYJshiZjj@BjH@@ r3 mol reproductive high -fle@`@@VRfYU_uTVeFh@@@jk@@@ r3 mol reproductive high -fleA@@@ILr{LjnzHTmUT@@@@@@ r3 mol reproductive high -fleA@@@YEEMDleHiJJQoM@PUUUD@@ r3 mol reproductive high -fleAC@N@bERBYCHhheDlUDefRCFBAbX@H@PU@ r3 mol reproductive high -fleAP@@HMEJSKLjtJ|xKTCAUBq@@@ r3 mol reproductive high -fleA`@@HXdvmrnrncQRuS@A@@@@@ r3 mol reproductive high -fleA`@@QSdTTTRRTqfdcZ\t@@AEL@@@ r3 mol reproductive high -fleAp@@XDkSdyHhheDeLUmRPXuUUTDAP@@ r3 mol reproductive high -fleH@@@XIsIEEDbeMMDjBbfVjfhBA@HPbP r3 mol reproductive high -fleHP@DTuDC@irJIJHqZIJJgOQZijjjYh@@ r3 mol reproductive high -fleHb@LBdfB@AFRREQQIIZIZ][ru@@@EP@@@ r3 mol reproductive high -fleI`BHDihBEPeGYEMDhULeDdsdTmMUMP@H@@ r3 mol reproductive high -fleIb@LBLFBH`BLddJbbRRvVtzwej@@@J`@@ r3 mol reproductive high -fleIb@LB\fBK@BLddJbbRTVVuypUj@@HB`@@ r3 mol reproductive high -fleIb@LB}FB@`BLddJbbRRrVtzwej@@@J`@@ r3 mol reproductive high -fleP@@@PReevYU]tPijjh@@@@@@ r3 mol reproductive high -flePB@K^AbILklrj}Qc`p@TaAE@B@h r3 mol reproductive high -fleP`@DA@eIVUue]^B]yX@J@BT@@@ r3 mol reproductive high -fleQ@@DLAdTTTTtRbTI`~RuUATQQ@@@ r3 mol reproductive high -fleQ@@DR@dsK[JsioARuUTEDQ@@@ r3 mol reproductive high -fleQA@CQDBHUDILrl{ljsdTpDEUUJd@@ r3 mol reproductive high -fle``@G@edbbTRbbNv`mV}PPE@QT@@@ r3 mol reproductive high -fle`a@BQRBHEDYEEDeMCDdXrSoPPT@PS@@@ r3 mol reproductive high -flea@@E@RfVYUV\tWIjh@`B`@@@ r3 mol reproductive high -fleaR@LPQYw`AFRRFJJYIQW\dXJuPLDqT@@@ r3 mol reproductive high -flehPBDX}EHAJCFT}dTTRTRRJRsNFluTtuUKP@@ r3 mol reproductive high -flepa@LRmA@@`PQddaTTRRVLfgFlmPREETH@@ r3 mol reproductive high -flepb@BZSIPHaIf]V_eV\bfB@ijjh`@@ r3 mol reproductive high -fleqa@EV\JQ`QG@cHhdliBieDjLbf@BVfjh`@@ r3 mol reproductive high -fli@q@HHpxLPAG`cIICdddddiEjjjje`@@ r3 mol reproductive high -fli`@@@IJjjjjkUUTuUTBDd r3 mol reproductive high -flmA@@@ILkZvmsQdeV\EL@EUUUQT@@ r3 mol reproductive high -flmP@@@PRfYV{U_CAZ]DJYji@@@F@@@ r3 mol reproductive high -flmP@@@PRfYV{U_CAZ]DJYjj@@@F@@@ r3 mol reproductive high -flmP@@@PRfYen]|cIF]DJYj```@E@@@ r3 mol reproductive high -flmP@@@PrQQQQJZKIDcIV]DJYj``H@F@@@ r3 mol reproductive high -flmP@@@TRfYmUo\eEVMzJYf`h@@J@@@ r3 mol reproductive high -flmP@@@XRfYYmUCAF]DJVjX@`@J@@@ r3 mol reproductive high -flma@@@`rJIJYRIIIFcIF\GtX@Jjjjbh@@ r3 mol reproductive high -flma@@I@rJJIQZEJYI`iJlzJV`b@@@H@@@ r3 mol reproductive high -flmp@@@PheLr|vj~JBtzHTsUR@@@L@@@ r3 mol reproductive high -flmpB@ARTBHRYWYUUVcEZlzJX@Iij@B@@@ r3 mol reproductive high -flu@b@HiADILrljm|sfoVC@PUUULT@@ r3 mol reproductive high -fluA@@@IRlkjtrRdeFmUA@UUUD@@ r3 mol reproductive high -fluAP@@HeEJSKLrorlyiuoMPA@@UP@@@ r3 mol reproductive high -fluAP@@\dZJSLlsr{lxjtTm@qEETq@@@ r3 mol reproductive high -fluHR@DTyKShi@DILlk|lzs`iV}@PUUUTL@@ r3 mol reproductive high -fluHR@IV|fANJ@DIJrsmrnpSoQSUUUTBAP@@ r3 mol reproductive high -fluH`@DXTDAdfYfYu_Yit_AZj`eAbb@@ r3 mol reproductive high -fluHb@LLxxLPABTnrjkmxHJQkTlu@EMP@@@ r3 mol reproductive high -fluPB@AIADYEEDdUEDhlsc`qS@PL@@@@BGH r3 mol reproductive high -fluPB@AJADYEDeMDeELcSfgQS@DMPT@P@@ r3 mol reproductive high -fluPP@DTAsUlbbTTTlTvRXHshiZjZfZjf@@ r3 mol reproductive high -fluPP@DVApt\bbTTtabbJhJs`iZfZiifi@@ r3 mol reproductive high -fluPQ@N^YirPA@`cIEDhh\ihmjByHLZjZiijZ`@@ r3 mol reproductive high -fluP`@DX@qIeVyeUrT]DJVjZ@@@H@@@ r3 mol reproductive high -fluP`@NQ@EIfVVWV~Je[rV`h@`FH@@@ r3 mol reproductive high -fluQ@@DJAdTTTTTRTQsEVbEKU@C@PD@@@ r3 mol reproductive high -fluQ@@LT@eLw\jmvJF|zMLp@@DT@@@ r3 mol reproductive high -fluQ@@LT@eLw\jonJF|xMLp@@AT@@@ r3 mol reproductive high -fluQ@@LTAdbbffbbTRNJVbEMLp@PPD@@@ r3 mol reproductive high -fluQP@BBAIWhyEEEDhdbddpQgQRtpSAEUD@@ r3 mol reproductive high -fluQ`@DQ@KrSLrkssDYiwhmTC@qSQ@@@ r3 mol reproductive high -fluQ`@DTAjvQQJQJVJ[ILDYtTmUUSL@P@@@ r3 mol reproductive high -flu``@O@HdsNkKN{NF}ELDAUPPA@@@ r3 mol reproductive high -flu`a@NZlBHHDILro\wjpQgQSUUULpA@@@ r3 mol reproductive high -flu`b@AQRBHRYVvuvZcARMZ@B`@jX`@@ r3 mol reproductive high -flu`b@LQR@HRf[eU[EEVLzf@@@JZ@@@ r3 mol reproductive high -flu`p@E@EJwhyEEEEDdTddqQgQRuHMAEUD@@ r3 mol reproductive high -flua`@@`PYIn[VuUYJlzJVj@Bj@@@@@ r3 mol reproductive high -fluhP@LF]EHIJudbbbbRTUVQJV\FMUUU@`U@@@ r3 mol reproductive high -fluib@DXXJQhiADYEDeEeCDdeSdeN}@DUUUTL@@ r3 mol reproductive high -flup@@@JLeLlj||}AZ]EHP@PTUPP@@ r3 mol reproductive high -flup@@@PIdbTVbbbRQNBVCzLuP@P@R@@@ r3 mol reproductive high -flup@@@PIdbTVbbbRQfBVCzLuP@P@R@@@ r3 mol reproductive high -flup@@@PIdbTVbbbTRNBVbELuP@PPB@@@ r3 mol reproductive high -flupB@ARtBHRYV{WfVgEZbf@HZhB@P@@ r3 mol reproductive high -flupB@ARtBHRYWYWfVcEZbf@BZhB@P@@ r3 mol reproductive high -flupB@ARtBPRYWYWfVcEZbf@BZhB@P@@ r3 mol reproductive high -flupB@NBtBHRYeg_fUdeZbfBAbhB@P@@ r3 mol reproductive high -fly@R@HHpPG`eUjrjkm`mUPTEE@@@ r3 mol reproductive high -flyIPAHDTXBMV]BT\jW]dTtTVRbfaSAMSUSMUH@@ r3 mol reproductive high -flyQP@BI@`uhyEMDeEEDkhkSUUUMLt@@ r3 mol reproductive high -flyQ`@D^@jrSOJzmkBdu@AUUT@@@ r3 mol reproductive high -flyQ`@D^@jrS[JzmkBdu@AUUT@@@ r3 mol reproductive high -flyaP@B@QjJTfvUfW^\Ejj`XHX@@ r3 mol reproductive high -flya`@M@EGIEDdhbdeD^JhHJJjj@@@ r3 mol reproductive high -flyaa@KRtX@PkprQSQHiRYIS`j@`ijj`@@ r3 mol reproductive high -flypqBE^CAFNBdCpixRyTyIIXiEXdhX{sUST@EP@@ r3 mol reproductive high -flyqP@DDTA`XiRYf]vug`fjejjfh@@ r3 mol reproductive high -flyqP@DDTAchiRYf]wU[`fjejjih@@ r3 mol reproductive high -flyyB@J\dZwhi@DYHdhdhkDhdJUUMUMUjBFd r3 mol reproductive high -foA@C@@IdHaDQddabbRRrkF]U@@@@@@@ r3 mol reproductive high -foA@P@@HtYIe[UUhrRfi@Bj`@@ r3 mol reproductive high -foA@`@@HR[e]e^Blyh@H@@@@ r3 mol reproductive high -foA@`@@HR[fV]qZlyhH@@@@@ r3 mol reproductive high -foA@`@@\RVUoeVBly`BH@@@@ r3 mol reproductive high -foAHB@L\TX@QdbbRbRRheZMPQDUP`@@ r3 mol reproductive high -foAIB@HXHK`@aJV~vUqRsjYf`@`@@ r3 mol reproductive high -foAPP@DTAsUlbbTTTlTXHsfjfifh@@ r3 mol reproductive high -foAP`@BZ@aInvYWejsfjiB@`@@ r3 mol reproductive high -foAP`@DX@qIeVyWIRsfjZB@`@@ r3 mol reproductive high -foAP`@DXAsHhhddXdbLlyjih@H@@ r3 mol reproductive high -foAPa@LDlx@P`HRYYeUuVLyjjjjj@@ r3 mol reproductive high -foAQPBHF@aVgPeGIMrmsIFlt@PuI@@@ r3 mol reproductive high -foA`P@D@DZrSLrkrQfgMTC@q@@@ r3 mol reproductive high -foA``@D@edTTTbtjQNV\uUR@D@@@ r3 mol reproductive high -foA``@L@QdTVbbbblmV\u@A@@@@@ r3 mol reproductive high -foA`a@NRTBH]DYEEDhid\pQkPD@pD@@@ r3 mol reproductive high -foAh@@@TYIVRJJKIFILxJSTsUUR@@ r3 mol reproductive high -foAh`@JBUYpBILoLkleFmUU@`T@@@ r3 mol reproductive high -foAi@@HDhrPLbbbbjbRxJsjiejjh@@ r3 mol reproductive high -foAq@@DD\AIeUyWhpufjZ@B`@@ r3 mol reproductive high -foAq@DLTtCDiS\kNAV]PD@P@@@@ r3 mol reproductive high -foAqB@JLDPDQdTTTtlRWAV]RuT@B@@@ r3 mol reproductive high -foAqB@JLtPFHdsM|klEYuKTa@P@@ r3 mol reproductive high -foAq`@DXxBSlbbTTtJVhKQffjjjX@@ r3 mol reproductive high -foAqb@NZ]ab`ABTsoLbakUUULmP@@ r3 mol reproductive high -foQ`@@@ILkZjmFRUYt@@@@@@@@ r3 mol reproductive high -foQa@@N@rQQQQJKGbiVLz`BB@D@@@ r3 mol reproductive high -gBQ@@eLUT@@ r3 mol reproductive high -gC`@Die@@ r3 mol reproductive high -gC`HAbIMT@@ r3 mol reproductive high -gC`LADJPt`duP@ r3 mol reproductive high -gC`LAbJPt`duP@ r3 mol reproductive high -gC`LAbKDvHduP@ r3 mol reproductive high -gC``@dfZ@@ r3 mol reproductive high -gC``Adej@@ r3 mol reproductive high -gCa@@dkH@ r3 mol reproductive high -gCa@@dmP@ r3 mol reproductive high -gCa@@dsP@ r3 mol reproductive high -gCa@@duP@ r3 mol reproductive high -gCa@@eMH@ r3 mol reproductive high -gCaHH@bNt@@ r3 mol reproductive high -gCahHlHRNj@@ r3 mol reproductive high -gCb@AEdij@@ r3 mol reproductive high -gCd@ADij@@ r3 mol reproductive high -gCd@ADkZ@@ r3 mol reproductive high -gCd@Adej@@ r3 mol reproductive high -gCd@Adez@@ r3 mol reproductive high -gCdDI`BHDRZh@ r3 mol reproductive high -gCe@h`NdiKLIH r3 mol reproductive high -gCh@@doH@ r3 mol reproductive high -gCh@@doP@ r3 mol reproductive high -gCh@AGj@@ r3 mol reproductive high -gChHD@aIU`@ r3 mol reproductive high -gChHL@aIZ`@ r3 mol reproductive high -gCh`DLdkP@ r3 mol reproductive high -gCi@DDeV@@ r3 mol reproductive high -gCi@DDeZ@@ r3 mol reproductive high -gCi@DDfZ@@ r3 mol reproductive high -gCi@LDej@@ r3 mol reproductive high -gFp@DiTt@@@ r3 mol reproductive high -gFp`@dfTujX@ r3 mol reproductive high -gFp`@dfTujh@ r3 mol reproductive high -gFp`ATiTvjh@ r3 mol reproductive high -gFq`AbeJfuU@@ r3 mol reproductive high -gFr@ACTi[FZd@ r3 mol reproductive high -gFt@ADiTt@@@ r3 mol reproductive high -gFt@ADi[FZd@ r3 mol reproductive high -gFtHE`DILikUP@ r3 mol reproductive high -gFu@E`drfmU@@ r3 mol reproductive high -gFx@@eJfuU@@ r3 mol reproductive high -gFx`DBdwFmU@@ r3 mol reproductive high -gFy@DDfTujh@ r3 mol reproductive high -gF|HLZ@aJYuif@@ r3 mol reproductive high -gGP@DiVj`@ r3 mol reproductive high -gGPBAHJPLaYAInih@ r3 mol reproductive high -gGPBAHJPtaYCHiCUP@ r3 mol reproductive high -gGPHAbIL}U@@ r3 mol reproductive high -gGPP@cTfyi`@ r3 mol reproductive high -gGP`@TfYj`@ r3 mol reproductive high -gGP`@dfUjP@ r3 mol reproductive high -gGP`@df]jP@ r3 mol reproductive high -gGP`ATeVn`@ r3 mol reproductive high -gGP`ATefj`@ r3 mol reproductive high -gGP`ATiVj`@ r3 mol reproductive high -gGP`Adinj`@ r3 mol reproductive high -gGPhMPDIK]U@@ r3 mol reproductive high -gGQ@@eMUT@@ r3 mol reproductive high -gGQDB@jQBUkUP@ r3 mol reproductive high -gGQDL@aAFQRFj`@ r3 mol reproductive high -gGQHHGCIHcUP@ r3 mol reproductive high -gGQLJIARFdLbdMU@@ r3 mol reproductive high -gGQXHlZHROjj@@ r3 mol reproductive high -gGQ`@ZdruT@@ r3 mol reproductive high -gGQ`@bdvmT@@ r3 mol reproductive high -gGQ`@bdwMT@@ r3 mol reproductive high -gGQdLZ@j^BTuSP@ r3 mol reproductive high -gGQhHl@cIIBmP@ r3 mol reproductive high -gGT@ADiVj`@ r3 mol reproductive high -gGT@ATeVj`@ r3 mol reproductive high -gGT@ATeWjp@ r3 mol reproductive high -gGTHE`DILluBR@ r3 mol reproductive high -gGTHE`DIL{U@@ r3 mol reproductive high -gGU@CPdrm^@@ r3 mol reproductive high -gGU@E`drmT@@ r3 mol reproductive high -gGU@E`dsmT@@ r3 mol reproductive high -gGXHD@aIUVd@ r3 mol reproductive high -gGX`DBdsMT@@ r3 mol reproductive high -gGX`LDdsmT@@ r3 mol reproductive high -gGX`hEIWIMsU@@ r3 mol reproductive high -gGY@DDfUjP@ r3 mol reproductive high -gGY@DDfYj`@ r3 mol reproductive high -gGY@HDfVj`@ r3 mol reproductive high -gGYHI`xISkTbB@ r3 mol reproductive high -gGp`@TizHvjj@@ r3 mol reproductive high -gJPB@fRHTQhbOj`@ r3 mol reproductive high -gJPBAbJHt`YAIjj@@ r3 mol reproductive high -gJPD@eRHczh@ r3 mol reproductive high -gJPD@fRHczh@ r3 mol reproductive high -gJPH@DIJuP@ r3 mol reproductive high -gJPH@EIRuP@ r3 mol reproductive high -gJPH@eQ}T@@ r3 mol reproductive high -gJPHADILth@ r3 mol reproductive high -gJPLADJPt`duU@@ r3 mol reproductive high -gJPLAHJPt`duU@@ r3 mol reproductive high -gJPXHlPDQzt@@ r3 mol reproductive high -gJP`@TeVh@ r3 mol reproductive high -gJP`@TeZh@ r3 mol reproductive high -gJP`@TfZh@ r3 mol reproductive high -gJP`@dfvd@ r3 mol reproductive high -gJPhLQVIKTp@ r3 mol reproductive high -gJPlLPDRPTaGth@ r3 mol reproductive high -gJQ@@djsBJ@ r3 mol reproductive high -gJQ@@dkU@@ r3 mol reproductive high -gJQ@@dlu@@ r3 mol reproductive high -gJQ@@dru@@ r3 mol reproductive high -gJQ@@dsU@@ r3 mol reproductive high -gJQ@@duU@@ r3 mol reproductive high -gJQ`@bdvu@@ r3 mol reproductive high -gJT@@TeZh@ r3 mol reproductive high -gJT@@Te^h@ r3 mol reproductive high -gJTHE`DILmP@ r3 mol reproductive high -gJT`E`TfVh@ r3 mol reproductive high -gJU@H`dlu@@ r3 mol reproductive high -gJX@@dkU@@ r3 mol reproductive high -gJX@@dkt`@ r3 mol reproductive high -gJX@@dku@@ r3 mol reproductive high -gJX@@dms@@ r3 mol reproductive high -gJXDBLQQBS]V@@ r3 mol reproductive high -gJXDBLQXbS]V@@ r3 mol reproductive high -gJX`DBdru@@ r3 mol reproductive high -gJY@BDeZh@ r3 mol reproductive high -gJY@BDfZh@ r3 mol reproductive high -gJY@DDefh@ r3 mol reproductive high -gJY@DDfVh@ r3 mol reproductive high -gJY@DDfvd@ r3 mol reproductive high -gJYHC`DIKTp@ r3 mol reproductive high -gKP`@Tixjj@@ r3 mol reproductive high -gKP`Adi\Zj@@ r3 mol reproductive high -gKQ@@eKcRp@ r3 mol reproductive high -gKQ@@eKcUP@ r3 mol reproductive high -gKQ@@eOEUP@ r3 mol reproductive high -gKT@ADi\Yi@@ r3 mol reproductive high -gKT@Adi\Vf@@ r3 mol reproductive high -gKX@@eKcUP@ r3 mol reproductive high -gKY@HDi\ZV@@ r3 mol reproductive high -gNpJAbJHLaYArBS]UU@@ r3 mol reproductive high -gNpP`jusyImfi`@ r3 mol reproductive high -gNpXHlPDYIHTmT@@ r3 mol reproductive high -gNp`@dfUZf@@ r3 mol reproductive high -gNp`@dfuZj@@ r3 mol reproductive high -gNp`ATf^Zf@@ r3 mol reproductive high -gNp`ATiUjj@@ r3 mol reproductive high -gNplJqHJPtadTaeTp@ r3 mol reproductive high -gNq@@dskUP@ r3 mol reproductive high -gNq@@dssUP@ r3 mol reproductive high -gNq@@eLuUP@ r3 mol reproductive high -gNq@@eM]UP@ r3 mol reproductive high -gNqTHmVDPhbU_MS@@ r3 mol reproductive high -gNq`@bdvkUP@ r3 mol reproductive high -gNq`AVeJmUP@ r3 mol reproductive high -gNqhHl@cIICej`@ r3 mol reproductive high -gNt@@Te[zj@@ r3 mol reproductive high -gNtDLpDDHRevnl@ r3 mol reproductive high -gNu@HPdjkUH@ r3 mol reproductive high -gNu@H`dlkUP@ r3 mol reproductive high -gNu@H`dl{UP@ r3 mol reproductive high -gNxHD@aIUUfaM@ r3 mol reproductive high -gNx`LDdskUP@ r3 mol reproductive high -gNx`LDdssUP@ r3 mol reproductive high -gNx`LFdjmUP@ r3 mol reproductive high -gNxhMV@aI[ji`@ r3 mol reproductive high -gNy@FDfWj[@@ r3 mol reproductive high -gNy@LDeVjj@@ r3 mol reproductive high -gNyhGE`DYIITmT@@ r3 mol reproductive high -gN|@ADeJkUP`` r3 mol reproductive high -gN|`HfJdlsTp@ r3 mol reproductive high -gOp@DjWkB@@@ r3 mol reproductive high -gOpH@DILkW@@@@ r3 mol reproductive high -gOpHADILkW@@@@ r3 mol reproductive high -gOp`@tigujj`@ r3 mol reproductive high -gOp`AdeekZZP@ r3 mol reproductive high -gOq@@drm[UT@@ r3 mol reproductive high -gOq@@drm\@@@@ r3 mol reproductive high -gOq@@drm]UT@@ r3 mol reproductive high -gOqHL@aIYZzfd@ r3 mol reproductive high -gOq`@fdrikTl@@ r3 mol reproductive high -gOq`@fdrikUL@@ r3 mol reproductive high -gOq`AVeL~mUT@@ r3 mol reproductive high -gOqhHl@cIIBjujh@ r3 mol reproductive high -gOrHEcPDILl[MT`@ r3 mol reproductive high -gOt@AdigkB@@@ r3 mol reproductive high -gOtHE`DILjZuU@@ r3 mol reproductive high -gOtHE`DILl[MT`@ r3 mol reproductive high -gOt`E`tfUMZi`@ r3 mol reproductive high -gOx@@drm\@@@@ r3 mol reproductive high -gOx@@drm]UT@@ r3 mol reproductive high -gOxHHHaIeZzjh@ r3 mol reproductive high -gOx`BDdwM[UT@@ r3 mol reproductive high -gOx`DFdrikTl@@ r3 mol reproductive high -gOx`FDdwM[UT@@ r3 mol reproductive high -gOy@DDfYKZj`@ r3 mol reproductive high -gOy@JDiWMjj`@ r3 mol reproductive high -gFq`@ldrfmU@XR|a@ r2 pattern reproductive medium -gKXHL@aJWFj`LBHmrD r2 pattern reproductive medium -gFyHL`DILikUPD r2 pattern reproductive medium -gKTHLPDIRxtlA``nR@ r2 pattern reproductive medium -fHgdA@ r2 pattern reproductive medium -gNp`@dfzZj@pJMX r2 pattern reproductive medium -eFA@H`bLFE\` r2 pattern reproductive medium -gCh`LDdsPFDWI` r2 pattern reproductive medium -eMHAIdLF^P r2 pattern reproductive medium -gCa@@dkHFBVyH r2 pattern reproductive medium -gJXLL@aAABDfVhB r2 pattern reproductive medium -gJXHD@aIUZ@` r2 pattern reproductive medium -gJXHD@aIYj@ppqyH r2 pattern reproductive medium -eMXIDe`` r2 pattern reproductive medium -gOx@@drm\@@A`plZp r2 pattern reproductive medium -gOx@@drm]UTAaqEcV r2 pattern reproductive medium -fHapA@ r2 pattern reproductive medium -did@@DjUfaBB`@LNaLinGdD r2 pattern reproductive medium -didD@@IIf]xViZPCBlJfGd\ r2 pattern reproductive medium -didH`DBHR[e^FX@@@` r2 pattern reproductive medium -did@p@bBbFbDfYoa`b@@H r2 pattern reproductive medium -didH@@RUe^Fh@@@pxHPj[nPH r2 pattern reproductive medium -gCd@ADkj@ppbyL r2 pattern reproductive medium -difD@BADfyWaZ@@@LBQnGdT r2 pattern reproductive medium -deV@@@RgYTYj`@@C@PaLinGdR r2 pattern reproductive medium -diDD@@QIn]Zjh@pYLInGdT r2 pattern reproductive medium -gNp`@dfuZi@pJM_I` r2 pattern reproductive medium -gC`hIaxIVtA`enP@ r2 pattern reproductive medium -gGYHKAxIVkU@XYZ|PH r2 pattern reproductive medium -diFL`JcaCpRm[fjf@H r2 pattern reproductive medium -fHbTA@ r2 pattern reproductive medium -gNtDLpDHHR[UjhB r2 pattern reproductive medium -gGYHEAxIVsU@XEXwd@ r2 pattern reproductive medium -gNq`@jdvkSPf\Ll~P` r2 pattern reproductive medium -daxB`HSN@HrRPyKUPAaaTwHx r2 pattern reproductive medium -gCaHDIAIZ`LINS@ r2 pattern reproductive medium -gJXDBIARBS]TA`h^S@ r2 pattern reproductive medium -diE@PBDIAIAInujjh@` r2 pattern reproductive medium -diED@BDDR[mVjj@LFPj[ayF@ r2 pattern reproductive medium -day@`Lx@aIUVjj@LNaLJf{d@ r2 pattern reproductive medium -dmv@@@Rf~UeZj@@@LEBDpfxYT r2 pattern reproductive medium -dmvD@E@dfYwVzB@j@C@PpjxYT r2 pattern reproductive medium -dmvL`BaL@HrRRjIJUVjjh@` r2 pattern reproductive medium -dmvL@EAFR[f_FV``H@LFRfxU@ r2 pattern reproductive medium -eFA@HoBJD r2 pattern reproductive medium -diGD@JxPQIeUZfX@` r2 pattern reproductive medium -diFB@BAFEInuZjd@pILJnQp r2 pattern reproductive medium -gCd@ADij@ppfyD r2 pattern reproductive medium -daFD@DCdfVRiji`CCDinQ` r2 pattern reproductive medium -daGH`LJn@HRf_rjYj@H r2 pattern reproductive medium -gC`@Die@ptVy@ r2 pattern reproductive medium -gNq`AVeJmUPFEbq_IP r2 pattern reproductive medium -gC`DAb[DRVhB r2 pattern reproductive medium -gCaHLLQIZ`LDEqS@ r2 pattern reproductive medium -gJP`@dfzhCCA[ba@ r2 pattern reproductive medium -gNp`@dfuZZDu`TZ~S@ r2 pattern reproductive medium -daxD@@QInuij@LBRf{dD r2 pattern reproductive medium -gGPBADZPLaYAIZjhB r2 pattern reproductive medium -eMABHYAIhH r2 pattern reproductive medium -gNqBLIAREdGHIMmUTAaCrP r2 pattern reproductive medium -gNt`BpdfyZZDu@ r2 pattern reproductive medium -gJX@@dmu@XKGdP r2 pattern reproductive medium -gGX`LDdsmTA`m^P` r2 pattern reproductive medium -gNx@@eZoUHD r2 pattern reproductive medium -gJY@HDeVhCAK\a@ r2 pattern reproductive medium -gJXDB@bABUmTA`Pl^R@ r2 pattern reproductive medium -fHbxA@ r2 pattern reproductive medium -gGU@DPdrmRAaecrT r2 pattern reproductive medium -dedd@DHYCdfW[ZfZBBX r2 pattern reproductive medium -dcLL@@STfVyVUZ`HD@H r2 pattern reproductive medium -gNp@DkVzZ@` r2 pattern reproductive medium -daD@`@bDfUjZ@B@CB`SJ{dL r2 pattern reproductive medium -dcLL@@QTfVUV]Z```@LNJfFUwd\ r2 pattern reproductive medium -daxh@LInAIUYffBDh r2 pattern reproductive medium -daDh@DInAIf]nZiX@` r2 pattern reproductive medium -dmu@`LTHaIUe\Yj`@`@` r2 pattern reproductive medium -daFD@N@dfYvyjV`C@lJfyG@ r2 pattern reproductive medium -deVDPL[`bB|DeYgFZjZh@` r2 pattern reproductive medium -dk^@@@Ri_YVftzjX@H@LEaLJae]L r2 pattern reproductive medium -gC`HADIMTAa`mrP r2 pattern reproductive medium -deT@`@bLbdTJPsU@@@D r2 pattern reproductive medium -dcND`La@BLddJbRrzmPP@@X]S\LkoHp r2 pattern reproductive medium -gNphJpDIKMULA`QD^Q` r2 pattern reproductive medium -diDL`JXPBLbTTJjfd@` r2 pattern reproductive medium -daG@`LK`BDimVz`@@B r2 pattern reproductive medium -deU@PAdH`haIf]vzB@h@H r2 pattern reproductive medium -dmuD@FdBRgmeeZjjV@LNaLJaWd\ r2 pattern reproductive medium -gNp`ATeejj@pXfM_H` r2 pattern reproductive medium -gNqhHjOAJmVj`LLZ~HX r2 pattern reproductive medium -fH`TA@ r2 pattern reproductive medium -daxL`HS@BLddNRuT@XXUMrN@ r2 pattern reproductive medium -gGR@ACTkVY`iZ` r2 pattern reproductive medium -gN|@ABeJ|mPTdxJofVH r2 pattern reproductive medium -dax`@@`fRegej`RIJ r2 pattern reproductive medium -dayD@LXJRVUYk`aJ r2 pattern reproductive medium -digH`LJn@HRf_ljfYh@ppBGdH r2 pattern reproductive medium -daFH@BAIeZf`@`@piLiny@@ r2 pattern reproductive medium -gNuHDx@cIHTej`H r2 pattern reproductive medium -dknH@EAJYYfQN`bJ`@LIRfxYWS@ r2 pattern reproductive medium -difH`BDHaIe]ih@I@B r2 pattern reproductive medium -dmOH`LJQ@HRf^yriVfZZh@` r2 pattern reproductive medium -dmNH@HCHhheDVzU`@@@@LNCJXYWd\ r2 pattern reproductive medium -dcnH@AAIVYWXUvjP`H@LABDkag^Ph r2 pattern reproductive medium -dew@@@pldTTJVTLmP@P@XUaMt|`P r2 pattern reproductive medium -daEH@DhDfVVyje`C@dJfyG@ r2 pattern reproductive medium -gNp`@deVZf@pvkyH r2 pattern reproductive medium -gGQ@@dluTAaQEkrD r2 pattern reproductive medium -gNq@@djuUPFCDqkyD r2 pattern reproductive medium -gNq`@fdskUPFFq_IP r2 pattern reproductive medium -gJU@HPdkU`P r2 pattern reproductive medium -eMhHRVCBP r2 pattern reproductive medium -gCi@HDfZ@` r2 pattern reproductive medium -gCh@@dmHFFBwI@ r2 pattern reproductive medium -gGYHLQDIJuU@P r2 pattern reproductive medium -fH`XA@ r2 pattern reproductive medium -fHbXA@ r2 pattern reproductive medium -gNpHAxITkUTAaqEcV r2 pattern reproductive medium -gKP@Di\YZ@phbq@ r2 pattern reproductive medium -gJQHH@aJmj@ppQyL r2 pattern reproductive medium -eMJDBDf`pQyP r2 pattern reproductive medium -gJT@@TfVdCAK\PH r2 pattern reproductive medium -diG@`Dp`BDfWejjPB r2 pattern reproductive medium -fHcdAa@ r2 pattern reproductive medium -gCh`LDdkPFDwI@ r2 pattern reproductive medium -dcNL@M@iRYg^vzB@j`@pdLJnFUt r2 pattern reproductive medium -digD@Dq`EIeYkfje`CCDqnQp r2 pattern reproductive medium -diT`@@rnRfUjEnBA``B r2 pattern reproductive medium -dmNH@DAIe[VfeVj@B@CAdkae^Q` r2 pattern reproductive medium -dedHXJBPRPrPzPFPfPrJPsRUSU@D r2 pattern reproductive medium -fHcDA@ r2 pattern reproductive medium -fHdXA@ r2 pattern reproductive medium -fHdxA@ r2 pattern reproductive medium -fHgHA@ r2 pattern reproductive medium -deTH@@RYeYn`HJ@CC`JfxYyF@ r2 pattern reproductive medium -gGQHJ@aIUjhCBqXwd@ r2 pattern reproductive medium -daG@@@kdiVrX@a@C@hPfyG@ r2 pattern reproductive medium -dcll@DpYAmRYV]zzUZije`B r2 pattern reproductive medium -gNtPHPjtfvZf@` r2 pattern reproductive medium -deVD@HADfvUFVh@@@` r2 pattern reproductive medium -gGT`EaTf]jPLDmrD r2 pattern reproductive medium -daGH@DK`R[e[fiZ@LLQnyE@ r2 pattern reproductive medium -dmvD@BADfyW^Eh@J@CBdingdJ r2 pattern reproductive medium -gGY@LDeVj`LJEc^R@ r2 pattern reproductive medium -dcnL`LaA@HrRPjIKTrzmPHD@FEYtkh r2 pattern reproductive medium -daE@@@aJyUnX@@@pkBinyD@ r2 pattern reproductive medium -die@`NDHaIe]ih@J@CA`SBknPH r2 pattern reproductive medium -deU@@@aJueQfj@@@LAaLinF^P@ r2 pattern reproductive medium -gN}@EbDf]Zj@pJqoHp r2 pattern reproductive medium -deU@@@aJueQfj@@@LAALinF^Q@ r2 pattern reproductive medium -gJT@@Te^hCCKD r2 pattern reproductive medium -dcwD@BWPQInuVZjjX@` r2 pattern reproductive medium -diVH@BAIfUInFjZi@H r2 pattern reproductive medium -daz@pL@HPHxHRYyZj`B r2 pattern reproductive medium -daz@pL@HPHXHRYvZj`B r2 pattern reproductive medium -gGYHE@DYIHUj@prqyJ r2 pattern reproductive medium -dayH`Dr@|Djyfjh@` r2 pattern reproductive medium -gNp`@dfuZi@pJq_IP r2 pattern reproductive medium -fHdpAa@ r2 pattern reproductive medium -gNv@ALZtkefj@` r2 pattern reproductive medium -dieH`Dq`BDfUfnZii@H r2 pattern reproductive medium -daF@PDBHzHRYWih@H@H r2 pattern reproductive medium -daF@`N@HRf_rjYj@LFALJnyC@ r2 pattern reproductive medium -daFH@BAIf]n``@@phLInyE@ r2 pattern reproductive medium -gGQDB@baBSKTpD r2 pattern reproductive medium -gJPhLPDIKTpFDGEB r2 pattern reproductive medium -deV@@@RiU\Yjjj`C@XSBkagdL r2 pattern reproductive medium -dg\`@@SFRYueUNvjjjj@H r2 pattern reproductive medium -dg]@@@IIUYyT{zjh@@@` r2 pattern reproductive medium -daxH@@RV^jj`CAhPj[nHF@ r2 pattern reproductive medium -gGX`JDdjmTA`c^JX r2 pattern reproductive medium -dg^D@IADfvYW}MjhHB@B r2 pattern reproductive medium -gNq@@dl{MPblLZ~JX r2 pattern reproductive medium -dctJ`HSBtOCIILXhduSUHQS@ r2 pattern reproductive medium -dkl@@LdbRdSRjP`jJ`@pfDJfxUOdZ r2 pattern reproductive medium -didH@@RYeVz@``@pXLJf{dB r2 pattern reproductive medium -digH`LJa@HRf^|jfZX@` r2 pattern reproductive medium -gJQhHb@cIHUhCB[bA@ r2 pattern reproductive medium -daD@P@qBbDfYvzB@@B r2 pattern reproductive medium -dkm@@@IIUfU}OjhH@@H r2 pattern reproductive medium -did`@@pjRfUjXBB`@pSaxbL r2 pattern reproductive medium -dcND@E@dfYwYn``Jh@LACBkaW^QH r2 pattern reproductive medium -daF@@@RevpjjZ@LJAB[nIF@ r2 pattern reproductive medium -dmvD@BADfy]fyjjf`B r2 pattern reproductive medium -difD@NADfvWaZjj@LJSBx^IS@ r2 pattern reproductive medium -dcND@IADfvYXYZjjZ@H r2 pattern reproductive medium -dcND@BADfuYU]Zj@@@LASJxYW^PP r2 pattern reproductive medium -deTH@@RYe\YjB@@C@Ppj[agdP r2 pattern reproductive medium -dmvH@FCHhhhdYVhJ@@C@PcJ[aWbEH r2 pattern reproductive medium -dcNL@LANRYygiUjB@`@` r2 pattern reproductive medium -difH@HCIDhYLJejh@` r2 pattern reproductive medium -daED@DHFRUe[fff@LDRnIG@ r2 pattern reproductive medium -fH`PAa@ r2 pattern reproductive medium -fHdHA@ r2 pattern reproductive medium -fHchA@ r2 pattern reproductive medium -eFHBJFE@ r2 pattern reproductive medium -ffs@`@@HRYyVWm[W`cVCDmVjjjjh@J`@H r2 pattern reproductive medium -dcLD@@UIUe]FVX@J@aKCdrfx]yD@ r2 pattern reproductive medium -fewI@@DXldBSLjjJzriFJMEHymUDDUUT@@P@D r2 pattern reproductive medium -deVD@HADfyeFV`H@@piJ[ayD` r2 pattern reproductive medium -det@@DjYUZ^D`dJ@CBlJngfHp` r2 pattern reproductive medium -daFH@LAIVUnjjh@pZDJf{d@ r2 pattern reproductive medium -dg~H@AAJYU^wiNzBBJh`B r2 pattern reproductive medium -det@@DjYUZ^D`dJ@CCdpjxYyC@ r2 pattern reproductive medium -f`qa@@D@RYeU{TRg^Zij`@`DJVBbTxIVcV]{bLL@ r2 pattern reproductive medium -dmLH@@Rfum[iV`@jD@` r2 pattern reproductive medium -dclD@@WIEDhbmSCMAPEH@XTa]N|Rf@ r2 pattern reproductive medium -dclD@@UJYYkaf`bBh@LJPfg^IW@ r2 pattern reproductive medium -fgAA@@@ISLrotyHvk@@@@@@@P r2 pattern reproductive medium -deUD@DhFrJIJHusUMT@XYgCqDd r2 pattern reproductive medium -daE@@@iJUdf@H`@pRnydHp r2 pattern reproductive medium -flu@P@@\u{HhheEEMGEfJdzJV`hJ``H@@pecdeZMzJ^PB r2 pattern reproductive medium -det@@DjYUX^dHbH`CAdJfx^Id` r2 pattern reproductive medium -fbmAP@@BU{NQQQQQQFVKYbmNbehJbHHB`@B r2 pattern reproductive medium -deTB@@pYRf[^njjj`CBXSBinFP r2 pattern reproductive medium -fcAR@AU[OXICHiEHhhhblXdicBkvkNbdmUUULuUMSUT@FD\DYpTeZMYp\eFo_HM@ r2 pattern reproductive medium -e`\PM@@@AHdbjnikgolbbbbbbTtRQTNTtrSBfgefRvsPADADqUUUUA@@P r2 pattern reproductive medium -gNpP@btf{Zi@prqyJ r2 pattern reproductive medium -ffsA@@@YEHeHlcDeidfRtXLRujnjjj`@j@@` r2 pattern reproductive medium -fb}`@@@YEDeMDhTihjLUiwhyZjjjjjjh@H r2 pattern reproductive medium -fjcP@@@FrQQQQII[FIJgIVt{IP@@@``@@@@` r2 pattern reproductive medium -dknL`LaE@HrRPzIJZ]Vh@b@CAlInd~Qh r2 pattern reproductive medium -deUH@JdDin]xZB@`@pIBX^IT` r2 pattern reproductive medium -dg]L`LnDT@cIIChdieNkT@QP@P r2 pattern reproductive medium -dclH@@rQQRJJuJ{PUDD@FEDwCoLjU@ r2 pattern reproductive medium -fbmq@@DX|CHhhdhddlTdQfgV|uTTEEUA@Aa[ENBdkQkNCEOHY@ r2 pattern reproductive medium -ffs@@@LdbbdRdRQbLcKRU{HTmUUUUUUUP@XNqQgARtZwhiKWb@y@ r2 pattern reproductive medium -fewAa@AMfBPSHYEHiEEEDUeheme^uYt\ujjjifjjZZh@L@xHs`iJtZs`yKT_H]@ r2 pattern reproductive medium -eghPJD@AFimk`IAJPrJQRJJJHkKQK[PiJ^ZVNQYUUUUTsUUMMSU@@P r2 pattern reproductive medium -dedL@@PTfUUZjf@LJpjz^Pp r2 pattern reproductive medium -fnkA`@@N[dTRTtTTlVRbUFJlFNZmKUUUUUUT@F@TXipTeZMYw`iKWbLm@ r2 pattern reproductive medium -fig@P@@NZOHhdihhiXleDbjLUXL\uZVjjjjjij`@` r2 pattern reproductive medium -echX@@@@LdbbbRRQbvfRdrqC@bfadRUSRvuUUUUUUUUUTp@D r2 pattern reproductive medium -dg|L@@v|dTTbbluRitEQDR@FCTwSm|Pc@ r2 pattern reproductive medium -deTL@@zTfY[XXBH`@pHJz^I`` r2 pattern reproductive medium -f`q@P@@Ty{HeEEDhYDIVcLDQEUB@D r2 pattern reproductive medium -fi{@p@@Zldh|dTTbblvrbbfaiIQjmhJbHjBHJP@B r2 pattern reproductive medium -dk]D@BXCrJJJIPkiWV`d`X@H r2 pattern reproductive medium -fhiP`@CAAQJ[gnyodgAhHHBB@@B r2 pattern reproductive medium -didHPBBlFlRYgVzB@`@phLKayE@ r2 pattern reproductive medium -dmvH`NTHaIeU^f`@jP@phLKaxbR r2 pattern reproductive medium -deV@`ABHRYeun`HJ@C@`pixeB r2 pattern reproductive medium -dmv@`EBHRYe][hBBl@H r2 pattern reproductive medium -f`q@A@@QGhaIfUvuv\lz@`h@H@@pdCAIJtZwnHhp r2 pattern reproductive medium -deV@`IBHRYWVf`@k@CB`SBkd\ r2 pattern reproductive medium -fbu`c@MDTBleVYbLbbbtReTTRsAQSAADtAA@@D r2 pattern reproductive medium -fhi`A@I@b@qFQQQIIJEKLx{tAAT@D@@P r2 pattern reproductive medium -fns`P@H`EYvQQQQQVZEIQILDhuVm@tDMUUTP@XZiqQoASdmV|`p r2 pattern reproductive medium -flmA@@@ILkZjmsSdeV\ELuMUUUUT@D r2 pattern reproductive medium -dmtD@@QImYVUZh@@@p{B[ae^P` r2 pattern reproductive medium -f`i`B@A@bDfUmvUhpTg^`@i`@H@B r2 pattern reproductive medium -gOx@@eJimUTA`plZ~R@ r2 pattern reproductive medium -deVH@LAIVYqejfj@H r2 pattern reproductive medium -fb}A@@@ISZvmk\lxkSoQsP@UUUUEP@P r2 pattern reproductive medium -fig@p@@HdFJ\bbTTRRtVbarRipwlezMjXJBQj`B@@B r2 pattern reproductive medium -foA@P@@HeYIefU]ipsfi`hD`@H r2 pattern reproductive medium -dcLL@@G\dTRRbOKPPTP@XRfES\L{rE@ r2 pattern reproductive medium -fdu@@@LdbbTRrLtSI\TZwhaDTUUTU@A`[AJLxIVcNCGfDR| r2 pattern reproductive medium -flmA@@@YEEDhhTmMDsdmV\ELAAUUUQT@D r2 pattern reproductive medium -fdu@@@LdbbTRrLtSI\TZwhaDTUUTU@A`YFBTxIVcNCGfFR| r2 pattern reproductive medium -fnkAb@AUZBPrJQRJJJHkFIIWmV]EIZjjjYjjZj@CCvBLxJRmFlxNRmyAH r2 pattern reproductive medium -did@`@qDeYWaf@@BHlJ@j[nYBB r2 pattern reproductive medium -did@`@qDeYWaf@@BH\F@j[axdH r2 pattern reproductive medium -deTH`ICDRUe_af@B@bJ r2 pattern reproductive medium -dmu@PNTHbPaIe]Zf`@i`@pxDpjz^Ph r2 pattern reproductive medium -dmN@@@RfV_Jaf`RB`@phFzUxbT r2 pattern reproductive medium -gOy@HDfUkjj`LJlZ~P@ r2 pattern reproductive medium -fhy@@@LdbbTRtjVYHRg^BHh`@b@@` r2 pattern reproductive medium -gNy`LETeVZZDs@ r2 pattern reproductive medium -dazD@BADfUvjXHj` r2 pattern reproductive medium -fb}A@@@ILk[Kk\tyKSoQsUSUUUUUP@X^AAFJLEIVcV\EODQr r2 pattern reproductive medium -dmMH`LVPBDiiu\XUjjij@H r2 pattern reproductive medium -fc@R@AUFlDadTbdTTTQVLRVtJU{UgQRVjjjfZjffjj@CBNBLxJRmFlxNR}godD` r2 pattern reproductive medium -fnk@`@@UrJIJYQKISQHrgIZ]zNZjZjjjjjj@B r2 pattern reproductive medium -dmtD@@QImYVUZjjh@pGBinFUyB@ r2 pattern reproductive medium -dk\L@@STfUmWiiUjP@j@C@nESxfT r2 pattern reproductive medium -fhy@@@DjUg^UzBu[pP`hhH@`@H r2 pattern reproductive medium -fb}a@@L`rJJQIFYJYKDyIUgQSUUUUUTuP@P r2 pattern reproductive medium -gNqhHf@cIICejPLH^KT r2 pattern reproductive medium -f`aab@APQp@QddafaRbR]yZij@@@B r2 pattern reproductive medium -did@`@dDfYUn`HD@LJpj[nPH r2 pattern reproductive medium -foA@B@@RFQQQIEQILyYtA@p@@BGJ r2 pattern reproductive medium -dmvH`Dd@aIVUwaZ@B`@pxDJfy^Q@ r2 pattern reproductive medium -fj}P`@GEAKIEDheED]idaZm{IZB@hBJjB@CCrBTxJRmFmxLTyy@h r2 pattern reproductive medium -figp`@DZBAJSJvnrnwJtYIW`}FuP@UUS@AD@A@ r2 pattern reproductive medium -foQ`@@@ISLk^~FBuYuAH@@P@AaHANBdkQk\Pqp r2 pattern reproductive medium -fc@Q@AMzlD`fPrJQRJJJHkKQK[ZJ}jshykUUUSMUTuMU@A`GAF\EIVcV\DmQ{yCH r2 pattern reproductive medium -fc@Q@AMglD`fPrJQRJJJHkKQK[Pj}jshykUUUSMUTtuU@A`GAF\EIVcV\DmQkxcNp r2 pattern reproductive medium -gF|LHjOC^A|DiTt@@B r2 pattern reproductive medium -f`qPa@LV``@QzPrRPqQIIXjlYruPTDT@A@ r2 pattern reproductive medium -fluQ@@A^AdRbRrTTRbKNN}EK@AP@@@@@P r2 pattern reproductive medium -fa{A`@@E[dTTbRLrTfVrTIrRkNSejjjjjjijh@H r2 pattern reproductive medium -fhiP@@@\RiU{WZisQjjh@Jj@@` r2 pattern reproductive medium -fj}PB@AVADILkkJzrmFFmdl@EUUP@D@A@ r2 pattern reproductive medium -fbmP@@@\RiUyU^uipsdyjj```@H@@p]AAJBdkQg^CEODXr r2 pattern reproductive medium -fdyAp@@XyHwhiSJrwoMANCUUTDDT@AajAJ\EKQoAcqBE@ r2 pattern reproductive medium -fbu@H@@TyjwdyrIQQQHqISYBTFKADQUUTP@P r2 pattern reproductive medium -dg~HPItHciCHhheEJlpz\ADMLPAaPXpwrE@ r2 pattern reproductive medium -f`q`a@IZ|BHyHYEEDhiULfBtZ@bFfd`@` r2 pattern reproductive medium -dmLH@@Rfum[iV`@jH@piLIaxdj r2 pattern reproductive medium -ffsA@@@ILklsJwoQbk^RVl@EPT@@A@@D r2 pattern reproductive medium -fnkA@@@ISZvjsJklyIRZe[P@UT@@@D@@P r2 pattern reproductive medium -fdeA@@@ISJ~sJAF\FMA@UA@D@A@ r2 pattern reproductive medium -detH@@rQQJHtpsPT@`AaQMpsqDh r2 pattern reproductive medium -fdeIB@LZmzH@cIEEEEeEDnRfkF}TmULsMP@XLAQbcNxbPP r2 pattern reproductive medium -flm@@@LddTTVbvebyjUcNBfjjjjjjj@C@LDXIQgARUhuoQSr@P r2 pattern reproductive medium -gJU@H`dkSBI` r2 pattern reproductive medium -dmtD@@QIee^UZ``@@phfFUxe\ r2 pattern reproductive medium -dmtD@@QIee^UZ``@@pinFUxaT r2 pattern reproductive medium -dmtL@@QTfyeQehBA@C@jXYxb\ r2 pattern reproductive medium -dcLH@@RYeZvz@`j`@pxBXYW^Q` r2 pattern reproductive medium -eMhDRUB r2 pattern reproductive medium -dmuD@HTDrJZIJGaZ@B`@piBkix`j r2 pattern reproductive medium -dmv@`LBHRUVUeZj@@@H r2 pattern reproductive medium -dmv@`LCDRUVUeZj@@@H r2 pattern reproductive medium -daDH@@RYU[fei@LJpj[nP` r2 pattern reproductive medium -diFB@LAFEIg[Zjh@pkBiny@` r2 pattern reproductive medium -dknD@MADfym]eVj@B`@pELinF]yA` r2 pattern reproductive medium -dmvD@D@dfWeYUj`@@CCdpfxYyB` r2 pattern reproductive medium -difD@LADfyWaZjj@LBinGbHP r2 pattern reproductive medium -difH@BAIVUxZjj`C@PaLinGdD r2 pattern reproductive medium -eMPBcXLIyP r2 pattern reproductive medium -dcNH@DCHheEDbnmPT@@F@hUMproHt r2 pattern reproductive medium -dcMH@ITDee]UnX@Jh@H r2 pattern reproductive medium -daG@`LK`BLdTRIUSUpPea`IWHH r2 pattern reproductive medium -daDh@DqnAIeZfZZd@` r2 pattern reproductive medium -daF@`BBHRYg[hH@@LJCBknPp r2 pattern reproductive medium -daEL@LhDYIe\jZjd@pcnQ` r2 pattern reproductive medium -dk^@@@RfYU\]Tz@@@@@LECBinFUOdZ r2 pattern reproductive medium -didHPBBHzHRYgfFBB@@phL[ayA@ r2 pattern reproductive medium -gOt@AdiguZj`LBmWrD r2 pattern reproductive medium -dk]H@HdDeVYWz]NjdHB@B r2 pattern reproductive medium -dcnH`Jd@aJYW]rnF`PJh@H r2 pattern reproductive medium -dcnD`HI`BDfYoVnWZfX@@@` r2 pattern reproductive medium -dk^@PIBHDHRYWY^fWX@JZa@H r2 pattern reproductive medium -dg~H@ACHhdieDYSSl@EMTPA@ r2 pattern reproductive medium -dg~D@DClbbbTlRUL]mUL@D@FGYSRngrK@ r2 pattern reproductive medium -dmM@PAdI@iAIf]UneXHBd`B r2 pattern reproductive medium -dieDPLZD@HhHrREQKaVii@LBrnGd@ r2 pattern reproductive medium -gNq@@dsmUPFEbq_DJ r2 pattern reproductive medium -dctB`HSE@HrRPzKJKUUT@P r2 pattern reproductive medium -gCi@DDfj@pPwED r2 pattern reproductive medium -dmvH`IDHaIfUin`HJ`@` r2 pattern reproductive medium -do~L@M@iRYg^ufzB@jj`@pLLJnFUt{\ r2 pattern reproductive medium -do~L@CB]RfyV~^F`HJj`@` r2 pattern reproductive medium -dg@`LIPBLdTTJRrVUJtsUUM@FD`S\Lz]` r2 pattern reproductive medium -daxD@@QIgUjfBJlBpj{dL r2 pattern reproductive medium -dmt@@DjYefdHbR@CBlinWbCH r2 pattern reproductive medium -dklH@@rQSQJYGahBBi@B r2 pattern reproductive medium -dkNH@DAIeV}VijY`pdYZ r2 pattern reproductive medium -gJY@HDeYdRVFBwHP r2 pattern reproductive medium -f`i@P@@HD[HhdihdhUSbkN|uHPTUB@FALT]{bEZ@ r2 pattern reproductive medium -daxL@@rdenjjh@pZDrf{d@ r2 pattern reproductive medium -f`qpB@MF|BHRYWUVVcG^`@jjeH@H r2 pattern reproductive medium -dclD@@[HhheBeSKkTp@P@XEpkoLri@ r2 pattern reproductive medium -dclD@@kHheCDdUKkSP@P@P r2 pattern reproductive medium -daFH@FAIe^fZVh@ppj{bI` r2 pattern reproductive medium -fdyaC@OVAHHdLRFQRFIJZZKHRoAj`BIZX`@` r2 pattern reproductive medium -fbma@@E@rJJJJISIIH|TyL\mSHPA@D@@P r2 pattern reproductive medium -gFp@DiTujdCBqXwd@ r2 pattern reproductive medium -deVH@LAI[eQejZi@H r2 pattern reproductive medium -dk]H`FTpbDfUmYkiV@Hjd`B r2 pattern reproductive medium -fj}qB@BVBxDadTTRbRRTVasIFCzLDEETuUD`A`kENBtZJ\eyCp r2 pattern reproductive medium -did@@LdbbQxXF@@CBdrf{bDH r2 pattern reproductive medium -dklD@@QIge]aej@BX@H r2 pattern reproductive medium -dg\D`EtICHhdhXhUSP@UMP@P r2 pattern reproductive medium -dmtH@@rJJJJia`HbP@phBinxdj r2 pattern reproductive medium -deeL`LZDh@cIHULhmMT@XUc\L|`@ r2 pattern reproductive medium -fbuqb@LRuA@`AFRREQJKKSISUhiVhFB@@`@B r2 pattern reproductive medium -dmtHPBBHfPRYeUXXHHh@H r2 pattern reproductive medium -dk^@@@rQQHjIKJtzjX@HBJX r2 pattern reproductive medium -dg^L@FAMrJZJIKPbkPPPr@FGIS\JgrK@ r2 pattern reproductive medium -ff}`P@F@QkNQSQQIZEJIJXRdeZBBFX@b@DCT r2 pattern reproductive medium -ff}`P@F@QhnQSQQIZEJIKHRdyZBBFX@J@DCT r2 pattern reproductive medium -gK\@ABeKcMHFDgDl r2 pattern reproductive medium -dmO@@@`diWe\JUfh@D@H r2 pattern reproductive medium -dmO@@@`ldRabRpiVZ`@P@` r2 pattern reproductive medium -dg~DPFvpbEBLbbRfbRM\JpAESI@D r2 pattern reproductive medium -gC`@Dio@pfyD r2 pattern reproductive medium -eMBBHR[B r2 pattern reproductive medium -fjc@`@@ERYYefUez\UyvPiZZjjjjjj@CCrLTXJVcV]zJ\ey@H r2 pattern reproductive medium -fb}@`@@YRYVum[ehrRkNBf@BjjjjJ`@p\AFJ\EIQk^bgODZB r2 pattern reproductive medium -gGU@EPdvmVAaErX r2 pattern reproductive medium -fb}A@@@YEDeMDhTihjLUiwhyZVjjjjjh@LGHqS`iJtZs`isrDP r2 pattern reproductive medium -dk}@@@aJVyY|hUtyjBHJ@B r2 pattern reproductive medium -gGY@DDfvZPLLC^IX r2 pattern reproductive medium -gNx`HLdmluHdX r2 pattern reproductive medium -dkl@@LdbbTbsyYfjihDaV` r2 pattern reproductive medium -gNp@DjWZeDCaXl[rL r2 pattern reproductive medium -det@@DjYWkafefiPCBdKagfYS@ r2 pattern reproductive medium -fhiAb@HHp@HrRRqQIYPsdcVVfiVji@B r2 pattern reproductive medium -foA@@@LdbRbbJvDkQfijZjT@H r2 pattern reproductive medium -dknDpNWPdDdLdLbdLTRbdzhHF@@` r2 pattern reproductive medium -fhq`c@IF\BPQHXdLbdLRTvfdDjj@Hfj@@` r2 pattern reproductive medium -dif@@@Rfy^F`H@@pYBinGd@ r2 pattern reproductive medium -dmvL@HAER[e]xV`@h@LFPj[eyD` r2 pattern reproductive medium -dkmL@HLDUInUv~Eh@Jh@H r2 pattern reproductive medium -dknH@LAIYyfUMj`H`@H r2 pattern reproductive medium -diFL@JAARY[vji@LLpfxe\ r2 pattern reproductive medium -diFL@BAAR[fvji@LLSJxc\ r2 pattern reproductive medium -deVD@JADfvYzVjZd@piLXYyG@ r2 pattern reproductive medium -flea`@F@bgHhhhdhebmIVTYhIBhjXP@` r2 pattern reproductive medium -deU@`Dp@aIUeQej@@@H r2 pattern reproductive medium -dg|@@DjU_eZx{BAH@@BJ\MaBine]N~Q` r2 pattern reproductive medium -fhy@`@@BrJJJJIQ[DQeNmyh@`HB`@B r2 pattern reproductive medium -fdeIb@LLDhwh`BLdTrbRJbTOARTxM@PMUUE@AaHBJRu[pX|`x r2 pattern reproductive medium -dg}@@@yJeWe^nNzjhHB@CAXPjFUt{yF@ r2 pattern reproductive medium -dk]@@@yJeWmZ{Sjj`@`@pVDJnFUt~Q` r2 pattern reproductive medium -dcmH@DxLbbTTRM\nmPLA@AaSCJ{rD@ r2 pattern reproductive medium -fhyPB@ARADILkkKZtYhw`p@UR@A@@P r2 pattern reproductive medium -fhyPB@ARADYEEDdXeLdsfc^C@PUH@D@A@ r2 pattern reproductive medium -dk]H`AdpqDfUmUiev@Bfd`B r2 pattern reproductive medium -f`y@@@LdbbTRfNSI\TKSoADTT@A@@XZPRcARtZso\a` r2 pattern reproductive medium -dg|H@@RfuvU[cn`@`@@@peBiiWSodX r2 pattern reproductive medium -dg|H`ABHRYW[ficn@BjjH@` r2 pattern reproductive medium -dk_H@FdprJJISPkatzjjiZ@H r2 pattern reproductive medium -did@p@qBqFqDfYoa`b@@H r2 pattern reproductive medium -gGP@DiUja@xEXwbD@ r2 pattern reproductive medium -gGP@DiVV`iJpJqoDH r2 pattern reproductive medium -deTH@@RYWVf`@j@CC`SBhYyG@ r2 pattern reproductive medium -dmtH@@RYWUih@Jh@LNALJiWb\H r2 pattern reproductive medium -dcLD@@SHihheJLmUTu@D r2 pattern reproductive medium -dg@`IVpbDfUuYZX{`@jiR@LAALJat~Qp r2 pattern reproductive medium -digDPLXXP@b`cIHUDnEZfd@` r2 pattern reproductive medium -dk]@`AdHaIe[VZYS`@ijH@pxDret~Qp r2 pattern reproductive medium -foAaB@G\ADILkkJ}FFm@AP@P@A@ r2 pattern reproductive medium -gOxhMDOAJmZvjhCCXobE@ r2 pattern reproductive medium -dk^D`La@|Dju^UimMjj@B@B r2 pattern reproductive medium -fdyQR@NBYhwh`qLbRbbrRfTHiNCMKUMUU@aB` r2 pattern reproductive medium -fluQ@@DJAdTTTTTRTQsEVbEKU@C@PD@@P r2 pattern reproductive medium -foA`P@D@DZrSLrkrQfgMTC@q@@P r2 pattern reproductive medium -f`q@`@@HR[fYU_Sk^Zh@@@@@LMHYpTeZMYwnPp r2 pattern reproductive medium -dg]LPElYLHc`cHhdliBiSP@Rtp@XLBXUKrK@ r2 pattern reproductive medium -dcNL@JAMRYYYyUjijX@` r2 pattern reproductive medium -dcnH`LD@aJY{grevj``H@LABDxYW^Ie@ r2 pattern reproductive medium -dg~D`LePBLdTRTrbNT]uU@pD@D r2 pattern reproductive medium -foAab@LRMX@PeL|lmxiiuUAPLP@D r2 pattern reproductive medium -deVHPLX@bPaJU{\Jjfj@LJANF^IA@ r2 pattern reproductive medium -daFH`Dx@aIYUnZjh@` r2 pattern reproductive medium -deTH`N@HRVUmaX@b@B r2 pattern reproductive medium -dknH@CAIe]eZZ@Bjl@H r2 pattern reproductive medium -dk^@@@RfYU\]Tz@@@@@LI@j[aWSxfR r2 pattern reproductive medium -fhi`C@I@dDRFICHiCDeMhdaJ|Fj@H`@@@H r2 pattern reproductive medium -dif@@@RYevz@``@pkBkay@@ r2 pattern reproductive medium -dew@@@pldTTJVTLmP@P@XEc]ODHP r2 pattern reproductive medium -daGH@LK`RUe[fjV@H r2 pattern reproductive medium -daGH@LK`RUe[jjV@LLBfxdH r2 pattern reproductive medium -deWH@BZPRYVtYjje`CB`SNGbQP r2 pattern reproductive medium -dmtH`EBHRYWUih@Jh@LNALJnWbCH r2 pattern reproductive medium -do|H`EBHRYWUnjZ@Bjj`@` r2 pattern reproductive medium -dcMH@AtDieV_ehHJH@H r2 pattern reproductive medium -dk}@@@qJYVu|kitvi`PJ@B r2 pattern reproductive medium -fgAP@@@XRf^~UqQgCVZjh@J@@` r2 pattern reproductive medium -dk^H@LAJYeUquSh@@@@@pzfxUt~HT` r2 pattern reproductive medium -fjcY`@LJCENPBedbbTRTQRRTqJZLxLTuUU@aDuQ@AaJAJ\EJvR|`` r2 pattern reproductive medium -fmoYr@CA[t\xHpSbk@|LddqTRbrfbRRRfejJRmzMjjjjhDHfjH@H r2 pattern reproductive medium -gGPhMQHIJmT`XR\RH r2 pattern reproductive medium -fewh`@DRMdXHyEDhhhddmiUDenRuzp^cZ`B@HFjjhH@H r2 pattern reproductive medium -f`qPC@MNADBBEQFQQQIQGQIgG^`HJjeH@H r2 pattern reproductive medium -fdy@@`@Q@`bTQFHRYeWvUv\|F@`j`@`@B r2 pattern reproductive medium -f`qPA@MNADBBDfUuUehqwh@JjiR@B r2 pattern reproductive medium -fdu@@@LdbbbRRltSIBTZwhmUUUUUU@A@ r2 pattern reproductive medium -figA`@@U{dTRTtTTjTtRJeFJMxJRmKUUUUUSUP@P r2 pattern reproductive medium -ffcP@@@\RiUyU_YVgCNKVjjBBF@B@DGVDXHIPTeZMYwhirVoHX@ r2 pattern reproductive medium -dg}@@@yJeWmZntzjh@J@CAXSBhYt{yG@ r2 pattern reproductive medium -fdea@@D@RYZymUr\lGtVjh@@@`@B r2 pattern reproductive medium -foAQ@@KN@eLrjbthu@@@D`@D r2 pattern reproductive medium -dg}@@@cIDmEDhcJg\l@@@@QE@ r2 pattern reproductive medium -dcn`@@rnuJYVuhUtHJIb@LBSIWbMh r2 pattern reproductive medium -f`ipB@DX|@HRYeYU\cMNmyjhhJHH@H r2 pattern reproductive medium -dmvH`DH@aIVyVUZX@@@pxD[ae^Q@ r2 pattern reproductive medium -deTD@@QInUnEh@H@LBRnGbEH r2 pattern reproductive medium -deT@@DjU^k``b`@pyLinF^IA@ r2 pattern reproductive medium -foQH@@@XHYJYg]UirRkN@bJjhh@H r2 pattern reproductive medium -fgApB@LLx@HRevUUpPTcViYj@H@@` r2 pattern reproductive medium -gOy@DDfUkZj`LBcWrX r2 pattern reproductive medium -foQa@@H@RVUmUV\djsj@Bh@@@B r2 pattern reproductive medium -dclH`ABHRYVyzy]`BFh`B r2 pattern reproductive medium -dcLDPND@c@aJY~vrjefj`B r2 pattern reproductive medium -didHPACDZHrJIJFn`BH@H r2 pattern reproductive medium -gO|@AfeJykSTA@ r2 pattern reproductive medium -gNt`MPdfUZj@pvKyJ r2 pattern reproductive medium -gNt`IPdfuZj@pJu_HP r2 pattern reproductive medium -dg_@`DGPbDfUueZZ@Bjj@B r2 pattern reproductive medium -dmWD@Hi`QImfUjjj@H r2 pattern reproductive medium -fhiP`@C^@aImYWVVRoAZX@JiRACEaiFBLxJVkNB r2 pattern reproductive medium -dmUL`LZDh@cIHULdeijh@p[FxYWd@ r2 pattern reproductive medium -gOp@DiYKZj`LFHlWrT r2 pattern reproductive medium -dcLh@DxYCHdeEDcJmPDD@FEIcCoH` r2 pattern reproductive medium -dcLL@@QTfVUV]Z```@LFJfFUxgZ r2 pattern reproductive medium -dg^H@LAJUyfUSjhBH`@` r2 pattern reproductive medium -deTH`L@HReyTYi`@@CC`RfxYyD@ r2 pattern reproductive medium -gGYHL`DIMlu@XR|pq@ r2 pattern reproductive medium -gGYHL`DIMlu@XHwbF@ r2 pattern reproductive medium -diFH`Bp@cIECDjZj@H r2 pattern reproductive medium -dcLH`BBHRYg^fzB@j`@` r2 pattern reproductive medium -deTDPBdHcoAIfUvFBBD@H r2 pattern reproductive medium -dg@PBWPbAbLbbbRfaSR]pPTMQ@F@acCNg_HH r2 pattern reproductive medium -foApA@BZLBHeDYEEDhiiTqUgPPUCTP@P r2 pattern reproductive medium -dcN@PBBHFHrJJIJXmLDED`A`HXwCJ{rB@ r2 pattern reproductive medium -dig@@@pdigwJZjf@LFSJ[ayA@ r2 pattern reproductive medium -gOu@E`drm[SRAalWrT r2 pattern reproductive medium -dkmL`LNDD@cIIBhdmeuZ`PH@LFqneSyE@ r2 pattern reproductive medium -dg_L`LfxPPBLddJbbQvfmPLA@A@ r2 pattern reproductive medium -daxB`HRnCpRk]Zj`B r2 pattern reproductive medium -deV@PIBHzHRYeea`Ha@CA`rfx^QH r2 pattern reproductive medium -dmu@PITHchcHhheEVF@bF@`Z r2 pattern reproductive medium -gChhMDOBNtA`enP@ r2 pattern reproductive medium -did@p@qBqAqDfYun``H@H r2 pattern reproductive medium -didD@@qJYWkjjj`CAhPj[nPH r2 pattern reproductive medium -deTL@@rTie_kjjjh@pZDJnGbMH r2 pattern reproductive medium -dcLD@@QIeVuWVj`@@CClInFUyF` r2 pattern reproductive medium -foA@@@DjYUgWfiF`XJbh`@` r2 pattern reproductive medium -didH@@RYWZZ@B`@pXDpjGd\ r2 pattern reproductive medium -daD@P@qNqDfUZZ@B@CB`pf{dH r2 pattern reproductive medium -dklL@@Ptfym]eVj@BP@pyLinF^Qh r2 pattern reproductive medium -gOpH@DISOkSM@XDZobQ@ r2 pattern reproductive medium -dk\H`F@HrQQJVIHjtzeX@H@LA@jFUt~P` r2 pattern reproductive medium -dcLL`NWPBDif~{JifZZ@H r2 pattern reproductive medium -did`@@pjrQQQUn@hH@LDJnHp` r2 pattern reproductive medium -daG@@@pdifZxBH@CCJ[nPP r2 pattern reproductive medium -dg~H@IAJ[VvuneZ@Bfh`CCdpfgSyE` r2 pattern reproductive medium -f`qQB@FF\BPRYVwUZgAR`BJjfD@H r2 pattern reproductive medium -gNu@Dpdr{UPFAVMyF r2 pattern reproductive medium -dg~D@EBldTtVRTOBntDASQ@D r2 pattern reproductive medium -dig@@@pldTTQk`Ha@C@biny@` r2 pattern reproductive medium -foAh@@@XHkVRJJHyQJTxZpDPsUBBGJ r2 pattern reproductive medium -daF@@@Re]Jjjj@LFBDpnxeL r2 pattern reproductive medium -foA`@@@YHhhhdeCHvgT@D@P@@XJ@Q`iJtZsnPh r2 pattern reproductive medium -deT@@DjUijP`j@@pzDinF^PP r2 pattern reproductive medium -fhy``@E@xeLsO}kSdm^CPUAEUQ@A`YAJLEKQkN|D r2 pattern reproductive medium -diT@@DjYVnXPbD`@pYLinGdD r2 pattern reproductive medium -dmLH@@RfyYxYV`HJD@` r2 pattern reproductive medium -foA`B@N@bLbbbTNbRXJshBH`@@@H r2 pattern reproductive medium -dcLH`L@HrQJSPiKmMP@@A@ r2 pattern reproductive medium -daFL@LANRYUJfjf@LH[bXP r2 pattern reproductive medium -die@`NDHaIe]ih@I@B r2 pattern reproductive medium -dmO@@@pldTTLRqiUj@``@pKNe^HP` r2 pattern reproductive medium -dmM@@@iJYYtjFYBHJ@B r2 pattern reproductive medium -daF@`J@HRfWrjYj@LLAFxa\ r2 pattern reproductive medium -dmOH@FePRYVukaf@HZH@` r2 pattern reproductive medium -fdyAb@HHpCpRkVYU_]Nmyj`@@B`@B r2 pattern reproductive medium -fj}A`@@HTdssKMzsRuYp\mPDQTuTT@D r2 pattern reproductive medium -fhiA`@@Hddjrm|jIW`mPAD@@@A@ r2 pattern reproductive medium -fhiQ@@JJ@djlklkIW`mUUT@D@AaiFBLxJUg^CqDC@ r2 pattern reproductive medium -fakQB@CQDBPRYW[Ue]eZLCEoX@Ijjj`@H@B r2 pattern reproductive medium -fde@`@@JrJJJJJIIGLUXOhmR@T@A@@D r2 pattern reproductive medium -fdya`@O@x[HhheDlTdhsdmM@pQUU@@P r2 pattern reproductive medium -dmLD@@qJY{WJeZj@B@CAj[ae^IB@ r2 pattern reproductive medium -dg^L@HACR[e]VxV`@jX@H r2 pattern reproductive medium -fdea`@D@dkHheEDheDUSfoVBuLDpTT`@P r2 pattern reproductive medium -dmtL@@RTeVUaUj@H@C@jXUydYH r2 pattern reproductive medium -f`qa@@O@rQQQIISGBtju@@@QX@A@ r2 pattern reproductive medium -dcNH@FAIfYWgZ`hH@CAPcBinF]yB` r2 pattern reproductive medium -fnsqa@BLSFkPRBiCHhhhhhddTmeNZlGrXHbhjejXh@LABehsoE[rC@ r2 pattern reproductive medium -ffsA@@@ILvuoZunsfc^BVkSUUUUUUL@D r2 pattern reproductive medium -dcnD`I[PdDfUm^neX@biH@` r2 pattern reproductive medium -dk^H`MdICHhheCEfGS`HaiH@prfOfXn` r2 pattern reproductive medium -fbmqB@BNcxD`dsLrzlvqUhasAATUSUD`A@ r2 pattern reproductive medium -did@@DjU^nBAHBJ\FaBiaxf\ r2 pattern reproductive medium -dmtDPNDHaYAIfVUi``X`@` r2 pattern reproductive medium -dknH@JAIUYfUNjjjj@H r2 pattern reproductive medium -fhipR@LBBhug@BLdTRbrRfeIrcJjjfYfP@pxBBBTE[bOA@ r2 pattern reproductive medium -fbmha@LBm{Lm@BDaBTrs]riFTyEMUULsRuL@FD`PPR``isqGK@ r2 pattern reproductive medium -daE@@@aJyUnX@@@pKB[nIE@ r2 pattern reproductive medium -gGP@Djuj`LLm^JD r2 pattern reproductive medium -dmtH@@rQQEJZDjjfh@` r2 pattern reproductive medium -fhy@`@@\RYeeo]xjQg^ZB`@@h@@` r2 pattern reproductive medium -f`iA@@@ISZvmjsbmN}P@@ETD@D r2 pattern reproductive medium -dclH@@RfumVy]h@Jh`CCdpfFUyF` r2 pattern reproductive medium -flu@`@@IRfum]fUgEZ}F`@jjjhh@H r2 pattern reproductive medium -fbm@`@@FrJJQIFIKSIDx{r\uUUUT@E@@P r2 pattern reproductive medium -dmtDPBTLSlSHhhmDVFBBI@CB`pnGdR r2 pattern reproductive medium -dmvH@DAIe[VUZh@@@pyJ[ae^Q` r2 pattern reproductive medium -dk^@PABHtHRYWYZfWX@JVb@LFALJmxbf r2 pattern reproductive medium -difD`JxPBDig{JifZ@H r2 pattern reproductive medium -dmNH`NTHaIfVUazXBHX`B r2 pattern reproductive medium -eMJDBDe`pQyP r2 pattern reproductive medium -dmOH@NFPRYegXYUhD``@` r2 pattern reproductive medium -daDD@@iJYJjjh@pjLInyB@ r2 pattern reproductive medium -f`q@a@ARADJbDfYV]}YsQhBBjjb@B r2 pattern reproductive medium -dgD@NfpqJYoYWJNzjjjV`B r2 pattern reproductive medium -dg}B@HTDf|bfbbTThfnmA@tI@D r2 pattern reproductive medium -fluPP@DTAsUlbbTTTlTvRXHshiZjZfX@`@CCbLLDFJ^P| r2 pattern reproductive medium -fhyQ@@CA@dsLjm{Jvg^Bt@@DCA@A@ r2 pattern reproductive medium -dmMH`NV@BDke[VFUX@ab@LBpfWbAH r2 pattern reproductive medium -diU@@@aJmUJnFjjj@H r2 pattern reproductive medium -do}D@DTNrJIQSEQJaZjZjj@H r2 pattern reproductive medium -foAP`@DNAsHheEEJefBMYji`@h@B r2 pattern reproductive medium -diF@@@rQRJVjj`CC`SBiny@` r2 pattern reproductive medium -f`qa@@O@rJJJIIKERMjsPTEEQ@A@ r2 pattern reproductive medium -fb}A@@@YEEHdcLeLeB\djshijjjj`@j`@H r2 pattern reproductive medium -foQHA@FJuXFH`HRYUYYbTT[UjZjefZ@B r2 pattern reproductive medium -dcND@E@TfUvvf`@jh@LEALJnFUt r2 pattern reproductive medium -deTD`AdHaIe]jZ@BX@LJALj^PP r2 pattern reproductive medium -fhi`b@FN|BHRYV~YYirpX@bBA`@@` r2 pattern reproductive medium -dmtD@@qIUe\YZ`@`@piFxUxdT r2 pattern reproductive medium -f`a@P@@HhyIeWfUsVZj`HF@@` r2 pattern reproductive medium -dklH@@rJJJIEQa`Hbj@C@PIne]OdT r2 pattern reproductive medium -deTH@@rJJIEMtAAP@XTFES\PY@ r2 pattern reproductive medium -fdy@`@@QrJJIEIQISLx{tAAT@E@@D r2 pattern reproductive medium -dg\H`BBPRYg^U[hHBjh@H r2 pattern reproductive medium -dcLH`IBPRYeWvz@`j`@` r2 pattern reproductive medium -daD@`@\DimVz`@@CAdpj[nP@ r2 pattern reproductive medium -gGQDHG@nFRQFj`H r2 pattern reproductive medium -det@@DjYUZ^D`dJ@CAdpjz^Hp` r2 pattern reproductive medium -daxD@@QInejj@LLRfxa\ r2 pattern reproductive medium -gOq@@eLvmLtA`l~Ht r2 pattern reproductive medium -didH`ACDRYWZZ@B`@pXDpjGd\ r2 pattern reproductive medium -daFH@NAIe^fiZh@` r2 pattern reproductive medium -foAPB@AVADILkkJ}FFm@AUUQ@A`hBLDiIVcNyC` r2 pattern reproductive medium -dmvD@LADfvUaej@B@CAliae^P` r2 pattern reproductive medium -dmvD@LADfWeYUj`@@CAlIne^PH r2 pattern reproductive medium -dknL`LaM@HrRRqIYPYV`@f@B r2 pattern reproductive medium -deVH@BAIf_VzB@h@LJCBinHL` r2 pattern reproductive medium -f`q@a@AZAD^bDfUmn]hrsh@JB@`@B r2 pattern reproductive medium -daD@P@bNbDfUZZ@B@C@`pnxbL r2 pattern reproductive medium -dcND@NADfUyU]Zj@@@H r2 pattern reproductive medium -deV@@@RV[TYzP@@C@j[axaR r2 pattern reproductive medium -deT@@DjU_k``R`HipZDJagfXw@ r2 pattern reproductive medium -gGX@@dj|tHkAF|Rp r2 pattern reproductive medium -deT@@DjY]zXFB@@pYLinGbEH r2 pattern reproductive medium -dcN@@@RVYUYwiBB@Hr` r2 pattern reproductive medium -dif@@@rRQHqajjZ@H r2 pattern reproductive medium -dazH@LAIYzjj@LFALJnxdL r2 pattern reproductive medium -fbmPb@B^dDDadTTRbbRRTQXjrXy``jJjZbP@pyc`kNSgfC^b r2 pattern reproductive medium -dazL`BaL@HrRPyKUPA`a]qJX r2 pattern reproductive medium -dmVL`BaL@HrRPzJIZjj@H r2 pattern reproductive medium -dcvL`BaL@HrRPyQZKUUT@P r2 pattern reproductive medium -gNs@EjpdssTpFFU_I` r2 pattern reproductive medium -dmtD@@QIn[VUZh@@@pyLkae^Pp r2 pattern reproductive medium -foA@`@@BRYfYWuVLyh@`@@@CBUF\EIVcNyBp r2 pattern reproductive medium -dmt@@DjYnvDHbJ@CBlkiWdB r2 pattern reproductive medium -dg}H@ATLbbbbbJpj]mMULm@D r2 pattern reproductive medium -dg}H@JxDefY^Zy[YjZZZ@H r2 pattern reproductive medium -dmvH@ACHhhhdYUhJ@@CAbine^Q` r2 pattern reproductive medium -daF@`B@HRYg[hH@@LJCJ[nPP r2 pattern reproductive medium -dg}B@DpAV|bbbRbrK]imUMMU@FGXU]IwrM@ r2 pattern reproductive medium -dcnL`LZ]@HrQQZYPyPkSMUU@D r2 pattern reproductive medium -foAQ`@EZ@JVQQQQQIWLTZsT`tAP@D r2 pattern reproductive medium -dk\D`HP@cIICDhl^e]V`bB`@` r2 pattern reproductive medium -dg~D@D@dfVumQd{Z`@@@@H r2 pattern reproductive medium -dg~D@FCldTRQTRUL]uUT@D@FBpfESKiwrI@ r2 pattern reproductive medium -foA`b@LRL@HRf[g^|TuZjhDHh@B r2 pattern reproductive medium -dif@@@RfU~F``@@pxDpj[nPH r2 pattern reproductive medium -foAqb@BTYIS`RBSLnmnsakTmTuUP@P r2 pattern reproductive medium -foAqP@DXH@RcNrJJIJKJUgMVZjZZj`@pybgIFl{dM@ r2 pattern reproductive medium -daEH@DHDfYVyje`CAJ{bXp r2 pattern reproductive medium -dieD@DHFRYf^EjiX@` r2 pattern reproductive medium -gG]@EbDf]jPLInIT r2 pattern reproductive medium -dmuD@FxERf_UrjYZjBJh r2 pattern reproductive medium -foQP@@@JRi^yWZ\DhujjhHBh@B r2 pattern reproductive medium -do}B@HtDUtfyW[WaZ@BZh@LAPj[mM~QX r2 pattern reproductive medium -f`qQA@CVHBHEDYEEDeMCLfR]zBBbfh`@` r2 pattern reproductive medium -dmtH@@rJJIJEn`HJ`@pxBiae^Ig@ r2 pattern reproductive medium -dmvH@EAJYYtYhH``@pYBinGbRh r2 pattern reproductive medium -dg^L@LAER[eYWNvjhD@@H r2 pattern reproductive medium -dcND@BADfuYU]Zj@@@LNrnFUwbHP r2 pattern reproductive medium -dazB`LaFx@cIHThmS@FBXWDC` r2 pattern reproductive medium -dcND@EADfvUtYZ`@h@LFSJ[axbz r2 pattern reproductive medium -dcN@pBBlFlVlRYfyVfBBb`@` r2 pattern reproductive medium -diFH@BAIUgjjl@pZDrfGd@ r2 pattern reproductive medium -diFL@JANRY[vjj@H r2 pattern reproductive medium -dcLL@@G\bbbRfK]@PUP@P r2 pattern reproductive medium -do~D@E@\bbbReRd[hBBjj@B r2 pattern reproductive medium -gJ\@AbeMK@XKGdP r2 pattern reproductive medium -gJ\@ABe[LbQpfyhb r2 pattern reproductive medium -daz`@@bfyJUfZYBHX r2 pattern reproductive medium -dmM@PBx@c@aJYg\jeZdHB@B r2 pattern reproductive medium -foQh@@@XdhrTsMlkSdeFluMTsUP@P r2 pattern reproductive medium -dk}@@@YJUUURkatp@j@@@CCdqiWSyD@ r2 pattern reproductive medium -fnkA`@@X[dRdtbRLrTfVsIZMxIZmUUUUUUUT@D r2 pattern reproductive medium -flm@@@DiUem^yIRVkNBejjjjjjj@B r2 pattern reproductive medium -fhyA@@@YEHhheDecKQoNCU@DP@P@A@ r2 pattern reproductive medium -ffs@`@@VrQSRIQSJJpqBt[pXykUUUUUUUU@A@ r2 pattern reproductive medium -fhyI@@DDlDBSJkrmmFF]xKUM@DMD@D r2 pattern reproductive medium -dk]H@LdDie[Wz]N``@@@B r2 pattern reproductive medium -fbmAP@@\}GNRJJJJIEJIN`cA\dBB@@Hb@@CBSNBdkpXyxbs` r2 pattern reproductive medium -fakAp@@\}EIVyHhhhhdTheETjBLEvPHH@@bbj@@B r2 pattern reproductive medium -dk]L@LxDMIe]eRkSZjjjh@` r2 pattern reproductive medium -dcNDPBePbNBDfYWia``aX@LFCBimy@` r2 pattern reproductive medium -fnsHJ@CASVBLDxjsP^FRRXjIQYSQIYRuEIZmUUUU@`U@@XFpRcARUjwlm@ r2 pattern reproductive medium -gGX`DJdvsTA`a^YX` r2 pattern reproductive medium -gNy`HLtemfjDc@ r2 pattern reproductive medium -fdy`a@BRlBHcDYEEDehXhlfB|FBBFB@`@B r2 pattern reproductive medium -dg}D@DXIrJJIQIH|ivuTB`P@P r2 pattern reproductive medium -dk]@PAdH`paIe[UZY]`@iiH@` r2 pattern reproductive medium -daxB@@QnRUeZj`CBlJf{dP r2 pattern reproductive medium -dk]H`LiPBDigm[rivfPBJ@B r2 pattern reproductive medium -foQAB@C@BDifYU^gIVtz`B@DH@@` r2 pattern reproductive medium -dmtH@@RVYWeVhH@@LNRfxYWbPP r2 pattern reproductive medium -dknL@HALRYyyWSZj`@@B r2 pattern reproductive medium -foAPb@ARLxDPdrmjktXkT@EMLd@D r2 pattern reproductive medium -dg|@@DjU_eZx{BAH@@BJlIaBjUt{yfMp r2 pattern reproductive medium -difL@NAJR[Y^Ejfd@` r2 pattern reproductive medium -dk^D@JADfV[W[mMjdHB@B r2 pattern reproductive medium -dmOH@FyPRf_eriVjjeh@pkBhYxdH r2 pattern reproductive medium -flmA@@@ILkZvmsQdeV\EL@EUUUQR@FC`HqS`iJtZwhiy@H r2 pattern reproductive medium -dkn@`ECDRYWUZf`@fj@cj r2 pattern reproductive medium -dmvH`BTHaIf]un``J`@` r2 pattern reproductive medium -flea`@A@bgHhhhhdmL]EVMyh@`@bX@@puQgAJtZsoI@ r2 pattern reproductive medium -dcLHPBCD{DrJJKQFLLDDU@A@ r2 pattern reproductive medium -gJPdLQDHHRViPH r2 pattern reproductive medium -dg|@@DjU_eZx{BAH@@BJ\IaBiiWSyf]X r2 pattern reproductive medium -fleA`@@HcdTtbLRTrVVc^BuU@@@T@@P r2 pattern reproductive medium -daEH@LHDimVz`@@CAD{bTp r2 pattern reproductive medium -deWD`LjXP@cIHUDdLkP@@A`fMs@xP r2 pattern reproductive medium -digH@LxPRfuVz`@`@pQBxeB r2 pattern reproductive medium -fhiHb@LB|FB@AFRREQQII[Z][ru@@@D@@P r2 pattern reproductive medium -fhiHb@LBdFB@AFRREQQII[Z][ru@@@D@@X\psbm^CqAk@ r2 pattern reproductive medium -digH@LhPRfuVz`@`@` r2 pattern reproductive medium -deUD@LhARfuunh@J@B r2 pattern reproductive medium -dkoH@DgPRYYe]SZ`hH@C@TJfxUOdZ r2 pattern reproductive medium -dkoH@DEPRYYUfSZ``h@C@TJfz]OdJ r2 pattern reproductive medium -f`qq@@IZLAJ[WUeV\]z`@j@@@@` r2 pattern reproductive medium -fbmP@@@IrRJJIQJIHdjmhKhu@DPQAT@@X^qS`iJtZsoAbgH r2 pattern reproductive medium -gOt@ATiVKjj`LFHlWrT r2 pattern reproductive medium -did@P@bNbDfYYa`H`@LJBfx^Q` r2 pattern reproductive medium -fhiAP@@XyKRTrlovmA^CUUUP@P@FAhDipTmFl{p^HPp r2 pattern reproductive medium -dcM@pItIAICICHiCDeLJuPAB@D r2 pattern reproductive medium -dg_H@FzpRYeUyEZ``bh@H r2 pattern reproductive medium -dmtH`EBHRYWUih@Jh@LAALJnE^QH r2 pattern reproductive medium -dcOH@NGPrJJQVIKmUURpAapXUMJ|b@ r2 pattern reproductive medium -dg_H@AVprJQRIVYG]UUUK@D r2 pattern reproductive medium -deWL@DpPzTfY[ifjfX@` r2 pattern reproductive medium -daF@@@RYe[hB@@LJCBknPp r2 pattern reproductive medium -fhyq@@DZ|AIe[yVvcCV|EjVffej@B r2 pattern reproductive medium -dmuH@DTDfYUQUjjj`CClJfxYyB` r2 pattern reproductive medium -fbuQ@@DJAdTTRRQRRbRDiNVjjjf@B@PMP r2 pattern reproductive medium -dknD@HALbfbRadxV`@j`@` r2 pattern reproductive medium -foAAB@A@bLbbbRebRYrshBB`@@@LM@pQgAJtZsnPh r2 pattern reproductive medium -gJXHD@aIUj@pHVOI@ r2 pattern reproductive medium -gOq@@dsI[UTA`Ub~R` r2 pattern reproductive medium -foAA@@@ILs|kiFZLuU@AT@A@ r2 pattern reproductive medium -deTD`FdICHhdhUWPAD`A`RYS\`P r2 pattern reproductive medium -gOp@DjukZj`LJlZ~R@ r2 pattern reproductive medium -f`iA@@@YEEHdcLeB\djsjjjjjjP@` r2 pattern reproductive medium -f`iAB@K@BDifYYWyjSc^h@`HP`@CBPBLEIVcNyCp r2 pattern reproductive medium -fdeAB@K@BLdTTTRbRsWMR\[u@DABEP@A@ r2 pattern reproductive medium -dcoH@DGPRUe[^e]Z@HX`CBdJnwbPh r2 pattern reproductive medium -fb}P@@@NrRJJIQJKEKB\hvoQsTEQ@PDT@@XNQbgARUjw`qSd r2 pattern reproductive medium -deU@@@{IEEEKP`QP`A@ r2 pattern reproductive medium -devH`Bp@cIEEBdUCMR@D@D r2 pattern reproductive medium -dmMH`Ad`bDfYuVzU``JR@H r2 pattern reproductive medium -dcm@PNDHaPaIeU]iaf@Bfb@LFCBE]yB@ r2 pattern reproductive medium -fluQA@N^bBH\DILrsmlnrUoNCA@qMTlT@D r2 pattern reproductive medium -dcn`@@rawIEDhiUTkhPUCD@XDc\oHt r2 pattern reproductive medium -deVH@JAJ[e^f``P@LJPfz^PH r2 pattern reproductive medium -f`iQB@C^X@HrQQJVIJYDijsoUJpACQ@A@ r2 pattern reproductive medium -deTL@@zTif[rjjjh@` r2 pattern reproductive medium -deTL@@SdfUUifiZh@` r2 pattern reproductive medium -dcLD@@QIe[]ifiZY``Z r2 pattern reproductive medium -daE@`BhHaIfUn`H@@ppL{bTp r2 pattern reproductive medium -dmv@HBBHFPfPVPRYUzih@Jh@H r2 pattern reproductive medium -dmuD`FFUBHrJIJERn`BI`@` r2 pattern reproductive medium -dknD@D@tfUe_WViB@`HJpEL[aeSyE@ r2 pattern reproductive medium -do~D@DA|bbRbbRqvviB`R@`f r2 pattern reproductive medium -did@@LdfbQ[fji`B r2 pattern reproductive medium -fakA@@@YEDeLlhheHmXjL}DNZjefjjjij@aeJprBBLTxJVcN|FJ\ejwdN` r2 pattern reproductive medium -f`qI`@DXUh@oYEEEELTlfRtYjjZfi`@piSakNyCp r2 pattern reproductive medium -fdyHP@DXUh@oQrJJJJXiYILehsUTuMTl@D r2 pattern reproductive medium -diDL@@RdfVejj`CCB[nIP` r2 pattern reproductive medium -dmtHPIBHVHRYfUXXBHX@H r2 pattern reproductive medium -dieH@JxLbTTQkfej`CAFGbPP r2 pattern reproductive medium -deUD@FxJRVYmnYjZ`B r2 pattern reproductive medium -f`qa@@M@RZYU_tVeFj`hHj`@LM@pRcNBTZsnHex r2 pattern reproductive medium -flma@@@`rJIJYRIIIFcIF\GtX@Jjjjbh@LG@Qb`iJtZsoQR r2 pattern reproductive medium -dcl@@LdbbRRkCtaDQTPA`JXU\LkrM@ r2 pattern reproductive medium -did@p@bFbAbDfUfn`BH@H r2 pattern reproductive medium -deTL@@PdfzuFVjfd@` r2 pattern reproductive medium -f`qA@@@ILroljJSoMA@P@@@FBlDipVcV]{dF@ r2 pattern reproductive medium -fhi@p@@XyHpTieY[wzB]zjjhHB`@LCPIS`iJtZs`|`` r2 pattern reproductive medium -dig@@@pldTTqkiZjPB r2 pattern reproductive medium -daE@@@qJYfn@b@@ppj[d\ r2 pattern reproductive medium -digH@LhPRfuvz`@`@` r2 pattern reproductive medium -fhiHb@LBlFB@AFRREQQII[Z][ru@@@D@@P r2 pattern reproductive medium -deWD`LjXP@cIHUDdLkP@@AafMwD@P r2 pattern reproductive medium -gJT@ADiZhCCBGbV@ r2 pattern reproductive medium -daFH`Lx@aJY_JjZX@ppD[dD r2 pattern reproductive medium -fhiPb@KN|D@PeLrj~lKRcT@@@Tp@A@ r2 pattern reproductive medium -difD`Na@BLddJT[ejj`B r2 pattern reproductive medium -daEH@DpDeYVyjj`B r2 pattern reproductive medium -diD`@@iarQQHijVPPJj r2 pattern reproductive medium -dk}@@@qJYWm\katvid@J@B r2 pattern reproductive medium -dknL`JaLCprRRiQIKSZjjj`B r2 pattern reproductive medium -det@`@bDfUUiaf@Bh`CB`pagbIp r2 pattern reproductive medium -dclH@@RYfmj[iZZjj`B r2 pattern reproductive medium -foQA`@@\ldsKKnlyKUgM@pQSD@FALJL{bJB@ r2 pattern reproductive medium -fgAa`@N@t[HhheDTdsdeFltC@UQ@A@ r2 pattern reproductive medium -dmMD@DhNRYYWIiUjA@`@` r2 pattern reproductive medium -dieD@HXDR[eVyiih@` r2 pattern reproductive medium -deU@@@qJYejxBHh@LJJfF^Qp r2 pattern reproductive medium -dmuH@DXDfUgjZ@Bj@B r2 pattern reproductive medium -dg}H@NTDefV]qT{Zi``H@H r2 pattern reproductive medium -dcNH@DCHheEBdnmU@@@FGIeMpkqIt r2 pattern reproductive medium -f`a``@L@PdwJrkIoMUPPT@@P r2 pattern reproductive medium -dazD@DAdeYvjh@pKBknIB@ r2 pattern reproductive medium -defD`BpPbDemgijj@H r2 pattern reproductive medium -do~D@D@|bTTTTRqvvhJHb@B r2 pattern reproductive medium -dmvD`La@|Dj~Uaej@B@B r2 pattern reproductive medium -daE@@@yJeVnBB@@` r2 pattern reproductive medium -dmwH@DHPRYe~[fjVj@H r2 pattern reproductive medium -dazL@BANR[UZj`CBdrf{dD r2 pattern reproductive medium -fHgPAa@ r2 pattern reproductive medium -fle@`@@^rJJJIRYqQY`hi`HbjB@@@H r2 pattern reproductive medium -daF@@@Ri][jjj@LNaLJfx r2 pattern reproductive medium -dif@@@rRQHkajjj@H r2 pattern reproductive medium -det@P@bBBDfYVX^fBBHPCA`pfx^QH r2 pattern reproductive medium -dmL@P@bBBLbbbRaZ^FBBbD@` r2 pattern reproductive medium -foQa@@A@RYfYWvBUXsf`B@@`@CCeNRUhsnHEX r2 pattern reproductive medium -fhy``@A@|dsLro~pRkF\t@P@EP@A@ r2 pattern reproductive medium -gJY@HDeYhRVFFOH` r2 pattern reproductive medium -foAAA@F@bGQBSJwroSakPAD@D@@P r2 pattern reproductive medium -fle@P@@HBeIeUUYVsN}EjjZZjj`HxjX r2 pattern reproductive medium -deT@`@dDfYWFZP`@HR` r2 pattern reproductive medium -did@`@bDf[Wai@@@LJ@j[nI`` r2 pattern reproductive medium -dmtH`IBHRYm]xZP@h@H r2 pattern reproductive medium -f`qPB@E^ADILkjlkQcoP@SUUDBGJ r2 pattern reproductive medium -flua@@E@rQSISIQJEIgEFbf`@jj@@`@H r2 pattern reproductive medium -deu@`DhHaIeURhYiZeh@` r2 pattern reproductive medium -fb}a@@E@RfuUe]UYqQg^Sf`@jjh@H@@pT`eARtZpT|qbNP r2 pattern reproductive medium -fa{a`@C@hwIEMEDdbdeLeeqQkAbVmAAQUT@EE@@XFPpTeZlxJ\}y@h r2 pattern reproductive medium -ffs``@C@heMrklkjoIF\FIZtDDTD@@D@@P r2 pattern reproductive medium -gFx@@eLzuU@XFHwbF@ r2 pattern reproductive medium -fdyqB@BZ|hDQdTTRRLrbbXKtXHHfjjH@H r2 pattern reproductive medium -fnsQB@IVDBHrJIJZEQQHjIJgK^jv@HZjj`@H@B r2 pattern reproductive medium -dcm@@@uJfUWyYvjjjj@LISBinFUxdZ r2 pattern reproductive medium -foAq@@DDlAInfUWUXsfjjjjh@H r2 pattern reproductive medium -dg]D@DDKR[e]UxVjjjf@H r2 pattern reproductive medium -foAQB@ARlBHRYVueZLTZ@Bfib@B r2 pattern reproductive medium -dg}H@DHLbbbQTRS\]mTl@D@FERng_Lrf@ r2 pattern reproductive medium -f`qP`@DD@iIfUumV\]yjei@B@@` r2 pattern reproductive medium -dmuL@DHIWHhhdcFyjef`B r2 pattern reproductive medium -fhi@P@@HD[Hhdihdibj\UYjP`hf`DGL r2 pattern reproductive medium -diD@@Dj}Yjj`CCdpj[ayD@ r2 pattern reproductive medium -fdy@`@@FrQQRJKZDjTdjuATQQMH@D r2 pattern reproductive medium -fhi@@@LdbbRRNbRxkpXFBb@@@Ppp r2 pattern reproductive medium -dmt@@DjU_ZxHHZ@cgChSBjUyc\H r2 pattern reproductive medium -fle@@@LdbbRbVQfRyjJXFBhh@@ACE@ r2 pattern reproductive medium -daE@@@qJYVnBB@@pHj[nHf@ r2 pattern reproductive medium -didH`D@HRUe^Eh@@@phBkaxdL r2 pattern reproductive medium -dmuH`LY@BDfymYUj`@@B r2 pattern reproductive medium -dcMH`DjPBDefulUZ`BH@H r2 pattern reproductive medium -gOt@AdiWqZY`LCDWrT r2 pattern reproductive medium -dg}H@NLLbbbTVaSR]pPRTi@D r2 pattern reproductive medium -fhiAB@A@bLbbRaRbbRhqwh@J`HD@@` r2 pattern reproductive medium -fhy`@@@YIEEDdXllQbk^CTCP@@P@A`kENRUhsoAxae` r2 pattern reproductive medium -flu`@@@ILksLjoQchaSUUP@@A@@D r2 pattern reproductive medium -fbu`c@@drBlEVQkLbbbRbTJRTkI^SAAQAAQ@@FF`XEIVc^CGOHV@ r2 pattern reproductive medium -dcLL@@WTfZYWijjjj@H r2 pattern reproductive medium -fle`b@LPP@HrRPjIIKQIYQhiVhHHB@@@LCXYpTeV]xLT|aP r2 pattern reproductive medium -gNq`@fdwKUPFAQkyL r2 pattern reproductive medium -fhiA`@@HBdrsJrziuoMP@A@H@A`JcARUjwnHLx r2 pattern reproductive medium -fdya`@H`PEIefUewTzwfh@@`F@@H r2 pattern reproductive medium -flep`@OQRABSKLjo{JlYsT@@@Tp@AajcARUhsoQSrG@ r2 pattern reproductive medium -difH@DAIfU[fjV`CBlJf{dB r2 pattern reproductive medium -fjc@`@@ERYeu[VyV\Uiwhy`HJjjjhj@B r2 pattern reproductive medium -fb}A@@@ILk[Kk\tyKSoQruSUUUUUP@P r2 pattern reproductive medium -fb}@`@@YRfum[VwYqVg^bf`@jjjjJ`@` r2 pattern reproductive medium -fhyh@@@XisVRJIJYIPiTDkW`aAQL@A@@XRQabcV]xOHZ@ r2 pattern reproductive medium -gCi@DDfj@ppfyD r2 pattern reproductive medium -deT@P@qIdDeYWxY`@`Ha` r2 pattern reproductive medium -fdeIB@BTuEpIAIfUeUeYrt_A`HJjfhd@LNXEHu`qxcW` r2 pattern reproductive medium -dg}H`BFPdLbbRRTTmLnp@TuP`FAYiwqDT r2 pattern reproductive medium -fbmIB@BTtepICHhhdhddhhfsed~C@PUUMUD`A@ r2 pattern reproductive medium -dk}@@@YJUUURkatp@j@@@C@dZUxTYi` r2 pattern reproductive medium -fhyP`@LRAyIYUVuugIJly`@h@JH@B r2 pattern reproductive medium -fhyQ@@M^@eMk\lzpRmN}PA@QAD@A@ r2 pattern reproductive medium -fhyQ@@NVAdbfRfRRTKARUYu@DT@T@@D r2 pattern reproductive medium -fhyP`@EAAQJ[eWUWdmF|F``bh@@@B r2 pattern reproductive medium -f`yP@@@FRifUV|cAVTxwj`YBhjH@LITxJRmV]{bLF@ r2 pattern reproductive medium -dk\H`D@HRUe[Watv`@jb@LA@jzUt~Q@ r2 pattern reproductive medium -daDHPNBHPHrJIPeUMT`FE@aTwHx r2 pattern reproductive medium -deTHPNBHPHrJIPiEUMUR@P r2 pattern reproductive medium -dclD`HP@cIHXdiepkjp@UD@XLU]J{r@@ r2 pattern reproductive medium -dk^D`La@BLddlRTrF]MZ@Bh`B r2 pattern reproductive medium -dcl``Ae]BHRYWYZY]`@fhPB r2 pattern reproductive medium -dg~@PNBHTHRYUueicn@BjZD@pdLKaWSobHp r2 pattern reproductive medium -fdyPc@IZxHDPPH\DYEEDiDfeDfJCFBAXjfa@B r2 pattern reproductive medium -daF@@@RiUkjjj@LFaBinyF@ r2 pattern reproductive medium -dg|H@@rJJIHqIMqw@PP@@@XKaTwRng_H@ r2 pattern reproductive medium -didH@@RVe~Fjjh@pzLJfx^P@ r2 pattern reproductive medium -gJT`LPdfvhCAX|b@ r2 pattern reproductive medium -dcLH@@RVYVnffjZh@` r2 pattern reproductive medium -deTH@@rJJIFMsSUT@XUeLL|`` r2 pattern reproductive medium -gOt@ADiYqfjPLMB~R` r2 pattern reproductive medium -fhia@@I@RYeU{UDkpV``bjh`@` r2 pattern reproductive medium -dcnH@DAIfYwXUuj`PH@LFJne]y@` r2 pattern reproductive medium -dk^D@DCTfYgUXUMj`Pb@B r2 pattern reproductive medium -gCi@HDff@pPwH` r2 pattern reproductive medium -dknDpItpdDdLdLbdLRTtEZh@a`@` r2 pattern reproductive medium -dmuD@HXDR[fUEV```@LLRexS\L` r2 pattern reproductive medium -dk\L@@STfUm]iiUjP@j@CBlkaOdR r2 pattern reproductive medium -dieD@DpFRYUrijfh@pILx^QP r2 pattern reproductive medium -dcnL@LAFRYV]Zy]Zi`@@B r2 pattern reproductive medium -dmL@@DjYUVGi@@@`@LNpjxYWdH r2 pattern reproductive medium -det`@@iiRfYunFVifi@LLpayG@ r2 pattern reproductive medium -didh@HJfAIfYxZie`B r2 pattern reproductive medium -eMbDBDfp` r2 pattern reproductive medium -gJPXHlQLQzlA@ r2 pattern reproductive medium -gC`DADZHRVhB r2 pattern reproductive medium -gC`DAbZHRVhB r2 pattern reproductive medium -gCahHlNbNlA@ r2 pattern reproductive medium -gJQhHl@cIHUhCBGd@ r2 pattern reproductive medium -gKP`@Ti\Zj@pRwI@ r2 pattern reproductive medium -fHe`A@ r1 pattern reproductive high -eO`BNZ`` r1 pattern reproductive high -gF|HLZ@aJYuif@pPWHP r1 pattern reproductive high -fHgdAy@ r1 pattern reproductive high -eMBBHRZCAKd` r1 pattern reproductive high -gNxDLHaqBRjuU@P r1 pattern reproductive high -eMABHXaIhH r1 pattern reproductive high -gCaHLHaIZ`H r1 pattern reproductive high -gJQ@@dls@XKGd` r1 pattern reproductive high -gJP`AdejhC@qX|`@ r1 pattern reproductive high -gGP`ATiVj`LCEcrT r1 pattern reproductive high -gGP`ATeVj`LJEc^R@ r1 pattern reproductive high -gGQ`@jdjmTAal[rP r1 pattern reproductive high -gGQhHl@cIIJmPFBMyL r1 pattern reproductive high -eFBCPcA@ r1 pattern reproductive high -did@p@bBbFbDfYoa`b@@LJ@fx^QP r1 pattern reproductive high -daDD@@IIf]n``@@pkBiny@@ r1 pattern reproductive high -gChDL@aABSM@XHKdp r1 pattern reproductive high -dazD`N``|DjwVjh@` r1 pattern reproductive high -fHbTAa@ r1 pattern reproductive high -daxB@@InRYgZj`CBdpf{dT r1 pattern reproductive high -gNxLL@aAABDfVZj@` r1 pattern reproductive high -gGPB@DHHpQPaIUZdB r1 pattern reproductive high -eMC@HoABDe`pccH r1 pattern reproductive high -gC`L@DSpPPdkPD r1 pattern reproductive high -gJU@LPdjr`XIGd` r1 pattern reproductive high -daG@@@kdig|jVj`CAdpj[` r1 pattern reproductive high -daD@@DjUZxHH@CAdpj[nQ@ r1 pattern reproductive high -gKP`@Tixjj@ptVyB r1 pattern reproductive high -eMhDRZCAKd` r1 pattern reproductive high -gJQ@@dkU@XDQGdp r1 pattern reproductive high -gC`D@DXHRVhCAC\TP r1 pattern reproductive high -gGQ@@djmTA`Xl^R` r1 pattern reproductive high -gGXXKEb@cIIBmPD r1 pattern reproductive high -eF`BNFE@ r1 pattern reproductive high -didHPBBHFHRYgVzB@`@` r1 pattern reproductive high -gCe@E`dsPFBV@ r1 pattern reproductive high -daFL@HABR[e[fii@H r1 pattern reproductive high -daE@@@yIe^f`@`@piLJny@@ r1 pattern reproductive high -gO|HEfHaIeZx@@B r1 pattern reproductive high -dcN`@@pjYJYe}k`Hbj@B r1 pattern reproductive high -gN|HEb@cHhhVj`H r1 pattern reproductive high -gNp`@deUZj@pvkxhP r1 pattern reproductive high -dax`@@bnRn[ff`RHj r1 pattern reproductive high -gJT@@deVhCCKGbD@ r1 pattern reproductive high -digDPLXXP@b`cIIKDnEZfd@` r1 pattern reproductive high -eFBBDcAaWH@ r1 pattern reproductive high -deVL@HAIR[e_aZ@B@B r1 pattern reproductive high -daDH@@RVU[f@@@LJ`j[nQ` r1 pattern reproductive high -dcoH@DJ`RUeUVy]ZZ`@@B r1 pattern reproductive high -dmO@@@pldTTJRraej@B`@` r1 pattern reproductive high -gNp`@dfUZf@pvMyF r1 pattern reproductive high -eMBCDRZCAKd` r1 pattern reproductive high -gJPDAbGDRUj`H r1 pattern reproductive high -eMBBHRYCAKd` r1 pattern reproductive high -gCe@H`dtpD r1 pattern reproductive high -gCi@LDek@` r1 pattern reproductive high -eMaDBKpRVB r1 pattern reproductive high -fHbXAa@ r1 pattern reproductive high -fHfpAa@ r1 pattern reproductive high -eMIDBKpRYB r1 pattern reproductive high -gJ\HEb@aIej@pPWEb r1 pattern reproductive high -dcNL@M@aRYgWVzB@j`@` r1 pattern reproductive high -gNpXHmQxYIIXuTA`Uj~P` r1 pattern reproductive high -deT@P@bNBDfUuih@J`@pxDpjx^QH r1 pattern reproductive high -didHPABHJHRYgVzB@`@` r1 pattern reproductive high -dcl`@@`nReeWZY]@``@@B r1 pattern reproductive high -gOr@Ajti]qZY`H r1 pattern reproductive high -deV@@@ReWTj@Bj@CCdrfxYyD@ r1 pattern reproductive high -deV@`IBHRYWVf`@j@CC`SBkiy@` r1 pattern reproductive high -gChHLIAIZ`LEMrH r1 pattern reproductive high -gNxhMVIAI[ji`H r1 pattern reproductive high -deWH@DJPRY[TYZ`@@B r1 pattern reproductive high -gGPhCPDILuS@XXR|f@ r1 pattern reproductive high -gGP`ATivj`LMc^JH r1 pattern reproductive high -gNp`ATiUjj@pLQoEf r1 pattern reproductive high -gJQ@@djsBJptQyL r1 pattern reproductive high -gNu@H`dlkUPFBqxjp r1 pattern reproductive high -deV@@@RYyTYj`@@CBPaLinFP r1 pattern reproductive high -gCah@mJAIj`LLE` r1 pattern reproductive high -eMFIHRM`pgd@ r1 pattern reproductive high -daD@P@bNbDfUzZ@B@B r1 pattern reproductive high -difL@LAARYYRijjX@` r1 pattern reproductive high -daxD@@QIUYjj@LJpj[nQ@ r1 pattern reproductive high -dcN@@@rQQHqIKmUP@@A`hPfEprn|b` r1 pattern reproductive high -dmtH@@RYWUih@Jh@LAALJnF^Ph r1 pattern reproductive high -dmv@@@rRJIIFUjB`@@pyLJnF^Hr` r1 pattern reproductive high -gF|@AbeJfuU@P r1 pattern reproductive high -diFB@LANEIn^ZjX@` r1 pattern reproductive high -deTL@@Z\bbRbM]@DT@FC@fMt|`P r1 pattern reproductive high -dcNL@MAirJIJHsUt@QU@A@ r1 pattern reproductive high -deT`@@pjrQQIFTpDEP@P r1 pattern reproductive high -fHd`Aa@ r1 pattern reproductive high -eFJHbHpP r1 pattern reproductive high -fdu@@@LdbbTRrLtSI\TZwhaDTUUTU@A`YFBTYpRmF\GfI^b r1 pattern reproductive high -diT@@DjYVnXPbD`@pIBinYgB r1 pattern reproductive high -f`iA@@@YHheDdYdj\DiwjBH`@H@@` r1 pattern reproductive high -f`iA@@@YHheEdXdj\EIwjBHH@H@@` r1 pattern reproductive high -dmLH`I@HRfUwrnF`PJ`@phBXUxbT r1 pattern reproductive high -dedF@@PfFTf{nZjf@LFSBii@ r1 pattern reproductive high -foQPP@DLAhulbbbTRTLYpTmNZjjjZh@H r1 pattern reproductive high -f`i@@@DjUg^uhIVg^BBb`@H@B r1 pattern reproductive high -flmA@@@ILkZvmsQdeV\EL@EUUUQT@FEdXipTeZM[tT|P@H r1 pattern reproductive high -det@@DjYUX^dHbH`CAdJfF^Ig@ r1 pattern reproductive high -gGY@JDeejpH r1 pattern reproductive high -fb}`@@@YEDeMDhTihjLUiwhyZjjjjjjh@LOHpRgARUhugASgb@Q@ r1 pattern reproductive high -dclH@@rQQRJItJ{PUPB@FEDwSoLhU@ r1 pattern reproductive high -dg|D@@OIEEHhfmPkmAU@T`A@ r1 pattern reproductive high -dcMB@HDDWTfyV{iZ@HX@H r1 pattern reproductive high -fak`A@H`dDrBSJ{LjnmkQc`m{@ATDDUUPP@P r1 pattern reproductive high -eghP@@@LdbbdRdRQbLf|VRcEdbgfPRSUUUUUUUUMUP@D r1 pattern reproductive high -didD@@iJ[gxZB@@C@dkaxaL r1 pattern reproductive high -deTD@@QImYQejjj@LNpj[agdH r1 pattern reproductive high -fdu@@@LdbTRTjTtSA\dZwhmUUUUUU@A@ r1 pattern reproductive high -foQ@B@@AFRJJJIQX|UJqgT@PP@`@D r1 pattern reproductive high -flmA@@@ILk[J}sQdmV\EL@EUUUQT@D r1 pattern reproductive high -fgA`B@N@BDifYWz\d[Uj@H@B@@H r1 pattern reproductive high -gGUHEj@aIUZdB r1 pattern reproductive high -gGX`LDdjmLIkBWba@ r1 pattern reproductive high -fnk@`@@MrJJZQIFYJSKYdmF|DmVjjjjjjjf@B r1 pattern reproductive high -foQA@@@YHhhheEcqTkF]PAA@B@@P r1 pattern reproductive high -diFD@HCDemVZj`bJ r1 pattern reproductive high -dcMH@LDDeYWWajjjj@LIBDJfzUyF` r1 pattern reproductive high -eFDBcAaWH@ r1 pattern reproductive high -fewAP@@Vkv^QQISQJFKIQJVZcEF|EIVejjjjjijj@CBJLTxJRmFl{t\ejOdI` r1 pattern reproductive high -dmTJ@@PYUIeUYjjV@LBpjWdL r1 pattern reproductive high -dmLH@@RYVuiiV@BiH@` r1 pattern reproductive high -dk\D@@OIEEHhkje]hJbB`@` r1 pattern reproductive high -ffsA`@@VkdTRTtRabrTRhqQoARUiZjijjjj@B r1 pattern reproductive high -dg|@@DjYV}~T{`d@@@@H r1 pattern reproductive high -deTH@@Rfuunh@I@C@lJfybCH r1 pattern reproductive high -foA@P@@HuYIe[UvhrRfi@Bf`@H r1 pattern reproductive high -deTD@@QIgeQej@@@LJrfx^QH r1 pattern reproductive high -dif@`D@HRUe^Eh@@@pXDinGbPP r1 pattern reproductive high -dg~@pIBPRPrPrJPqISIBiwU@@@@@P r1 pattern reproductive high -dmL@@DjYe^TYHI`h@H r1 pattern reproductive high -fb}A@@@YEEHdcLeIeb\djsdyZjjjjjjh@LOXIQgARUjsoAbgdL` r1 pattern reproductive high -fcAR@CQ[OXICHhhdiDimCEDYmBrPk^SfmSUUMUUUSTt@D r1 pattern reproductive high -dmLH@@Re^UpiVe`@`@` r1 pattern reproductive high -gNp`@deYZj@pNM_I@ r1 pattern reproductive high -dmtH`NBHRYWVih@Jh@LNALJiWdB r1 pattern reproductive high -gJQHBLQIVi@` r1 pattern reproductive high -dmtD`NTHaIe]Vf`@jP@` r1 pattern reproductive high -dmtD`NTHaIe]Vf`@j`@` r1 pattern reproductive high -dklLPDp`BH|LbdRRaRtvjh@@@` r1 pattern reproductive high -deU@@@aJWeQej@@B@h r1 pattern reproductive high -dg|`@@pjrQQQGQIMqvAPP@@@P r1 pattern reproductive high -deT`@@pjrQQQUMpEAP@P r1 pattern reproductive high -daED@DXNRYUifjf@H r1 pattern reproductive high -dmND@DCdfVUrjUZjZi@H r1 pattern reproductive high -dg}@@@aJVYU^Svv`@@@@`J r1 pattern reproductive high -dg\@@LdbbbTicRDQIS@Qs@ r1 pattern reproductive high -dk\d@DsmB\bbbTrQXUujjUj`C@liS@ r1 pattern reproductive high -dazH@DAImeiiBL\Lrfxb\ r1 pattern reproductive high -dkNH@DAImgVVffZPsEhV r1 pattern reproductive high -defH@HAIUVYfZPrKJj r1 pattern reproductive high -daF`@@pjYJYfn@b@@pPfyG@ r1 pattern reproductive high -fhi@@@LdbbQfTbdxKShF@jjh`@` r1 pattern reproductive high -dmt@`@bDfUuZZ@Bj@CC`SBkaxdj r1 pattern reproductive high -gOt`DPtfWMZi`OLlP r1 pattern reproductive high -daED@DHNRY[Jfjf@H r1 pattern reproductive high -fluP`@DD@iIfUeeurL]DJVjhD@@H@@` r1 pattern reproductive high -gNy@BDeUZj@pJu_EB r1 pattern reproductive high -dcNDpBWPbNBIdDfYUYa``bT@H r1 pattern reproductive high -dmvDPIxPbBBDfYZVVBAX@CB`rfgdJ r1 pattern reproductive high -foA@@@DjYW{WdkN`XH@@@Ppp r1 pattern reproductive high -fluA`@@HddrsJoN}NF}EKTpT@@D@@XJEKQkN|FJ^PX r1 pattern reproductive high -fhi@P@@HeyIefU]zgCNZfB`ah@B r1 pattern reproductive high -dcML`EvDp@cIIKDedLkP@R@D r1 pattern reproductive high -dieD@DpARYevyjiX@pRnxfD r1 pattern reproductive high -fhyA`@@HBdrrkN~RdcN|uA@@AP@A@ r1 pattern reproductive high -fbmQA@AJRBH}HILk\kOKtyit\pACTE@a@@P r1 pattern reproductive high -dg^B@HAEmInUvwaZ@Bj`@` r1 pattern reproductive high -dg^L@DAaRUf^uNvjj@@@H r1 pattern reproductive high -dcNH@DAIgfYgVhBH@CBnFUwbI` r1 pattern reproductive high -fle`a@BAbBHeDYEEEDhXXeDqWdpPU@PL@@D r1 pattern reproductive high -defL`BpYBHRVvZfjX@` r1 pattern reproductive high -foAa@@F@rJJJIJINUeFZBPjHP@pDRgARtYwHJ@ r1 pattern reproductive high -gOtHDpDILrWST`XHwbF@ r1 pattern reproductive high -digD@HK`QInW[fiZ`CCDX^QP r1 pattern reproductive high -deWD`D[ad@cHhhhXWTuSHA@ r1 pattern reproductive high -dg}@@@mJYeU|]Tz@@@H@CAPpj[aeSyE` r1 pattern reproductive high -diU@@@aJUUpnFZ@@@LBinGbP` r1 pattern reproductive high -foQP@@@XRfYV}|LEjsfjYA@h@B r1 pattern reproductive high -fhe@@@LdbbTbTurXkfaF|DHbhh@B@@` r1 pattern reproductive high -daFD@DAdfUjyjf`CCDsnQP r1 pattern reproductive high -dax@@DjWzjh@pxHPj[nQ` r1 pattern reproductive high -dmO@@@`diWe\JUfh@D@LFanFUyB@ r1 pattern reproductive high -fdep@@@PHeKOLjoxH[s`sU@@@D`@D r1 pattern reproductive high -gGP@DiVj`LBl[qB@ r1 pattern reproductive high -fdy@`@@QRYWYVuzL|F@Bj`@`@B r1 pattern reproductive high -deTH@@RYWZf`@f@CA`SBj^PH r1 pattern reproductive high -dmtH@@RYWYih@IhBNh r1 pattern reproductive high -dg\HpMBPRPrPrJPqIPsCMT@ET@D r1 pattern reproductive high -dmv@`EBHRYWYih@Jl@H r1 pattern reproductive high -foApB@EZ\BHRYWYyZLlz@BjiR@B r1 pattern reproductive high -daG@@@rdifzxHH@CAB[bYp r1 pattern reproductive high -dev@`NBHRYUVfFX@Ja@LJCBz^H`` r1 pattern reproductive high -dcnH`IHHaIfU]XUvBBJa@H r1 pattern reproductive high -foAQB@FF\BHRYVwUZ\EJ@HjjQ@B r1 pattern reproductive high -dg]L`LfDD@cIIBhhd]ikTC@P@XMc\nwrI@ r1 pattern reproductive high -daGH@DJ`rJIPdsTt`D r1 pattern reproductive high -gNq@@dsUUPFEDM_I` r1 pattern reproductive high -dklHPABHvHrJJIJQEn`HJj@B r1 pattern reproductive high -deTH@@RfUWihHH@CCdpfxYyE@ r1 pattern reproductive high -fduA@@@ILroZviFBdZpXmUUU@AT@A@ r1 pattern reproductive high -fhya@@O@rJIJYRIKFcIF]z@BjjjJ@CCPDXhJRmFl{d@` r1 pattern reproductive high -dk@@@bdie^urnGSfj`@X@H r1 pattern reproductive high -dg|@@DjU^yZx{BAJjbBJX r1 pattern reproductive high -did@@DjU^nBAHBJ\FaLJaxc\ r1 pattern reproductive high -deUD`LjD@HrREQICJt@@@XUc\L|`@ r1 pattern reproductive high -f`qPb@LB``@QddaTTRRVtzwej@@@@@B r1 pattern reproductive high -fdu@@@DjUe_[e`nRM[tYfjjjjj`@` r1 pattern reproductive high -fb}@@@LdtTbRLrTrUAJt{r\}UUUTuUT@D r1 pattern reproductive high -flmA@@@ILkZvmsQdeV\EMUMUUUUT@D r1 pattern reproductive high -fnk@`@@MrJJQJJYERKH{`iJ|dmZjjjjjjjj@C@hHXIQgARUYw`qSdmV|ah r1 pattern reproductive high -gJPhLQbIKTpD r1 pattern reproductive high -f`i@@@DjYU[wxjQg^`@@@@@@CBRLDirVkNy`Qo@ r1 pattern reproductive high -gGUHEj@aIgZdCAA\VH r1 pattern reproductive high -dcn@@@RieU~V]jjjj`CATpj[ae]yD@ r1 pattern reproductive high -dmO@@@`diYuZZU@`@@@LJsae^PP r1 pattern reproductive high -dieD`JXaCDRYgvzejX@` r1 pattern reproductive high -deVH@ACHhhdbwPDE@AaPXUMsNFP r1 pattern reproductive high -dknH@FAIfUWaVhHHh@LMBLJfxYt~Ph r1 pattern reproductive high -dg]H@FlDfYU^QVhHHj@B r1 pattern reproductive high -dknH`Bp@aJYvU}NfhH@@H r1 pattern reproductive high -gNqdEb@b^FQRHmU@XXU|VH r1 pattern reproductive high -dg|@P@bEbLbbbTRRKR]pP@P@@D r1 pattern reproductive high -dmtL@@QTfyeQehBB@B r1 pattern reproductive high -eMdHTf`pQyP r1 pattern reproductive high -gN|@@ldssUPFEBM_I` r1 pattern reproductive high -def`@@SFyIeYfjZ`B r1 pattern reproductive high -didHPBCDGDRYgVzB@`@` r1 pattern reproductive high -digD@HHPQInYXVijPCCDknPp r1 pattern reproductive high -dmvD@EADfzUQUjjj`B r1 pattern reproductive high -difH`JD@cIEDd\jfZh@` r1 pattern reproductive high -gOq@@dlvKUTAaeWqP` r1 pattern reproductive high -daDD@@QInXjZjh@` r1 pattern reproductive high -dmMH@LhDeemZZUYh@H@H r1 pattern reproductive high -deVH@ICHhdhUSP@U`A`RYS\PN@ r1 pattern reproductive high -dclL@@STfUmVfeVi@B`@pKaW^Ie@ r1 pattern reproductive high -fheA`@@JLeLrsLsPPkR\kUUSUUUU@A@ r1 pattern reproductive high -flui@@DXYYHDfYewvUHrVhiZjifjjZ@CCUNBdkQg^CGdD` r1 pattern reproductive high -foQa@@N@rQQQQJKGbiVLz`BB@D@@pxQ`iZM[bEN@ r1 pattern reproductive high -difH@BAIfuxZ`@@CB`inGbQ` r1 pattern reproductive high -foAP@@@NrQQQUQIZgCVifh@J@@` r1 pattern reproductive high -fdy``@N@PdrwL}kjtFKTuUA@H@FDbLxHug^CqBh` r1 pattern reproductive high -dig@@@`Tke]nX@H@H r1 pattern reproductive high -gOq@AdbbLUUTA`Uc^Q` r1 pattern reproductive high -dk\L@@jTie]urnF``Jf@B r1 pattern reproductive high -f`i`B@F@bDfUmYWiqQg^`BJB@H@B r1 pattern reproductive high -deVD`NFPBDfUvih@I`@pKBj^HB@ r1 pattern reproductive high -fde@@@LdbbTRtQRSIJuzHQEDDDD@A@ r1 pattern reproductive high -didHPABHZHRYVZz@H`@` r1 pattern reproductive high -didH@@RfU~F``@@pYLJnGdL r1 pattern reproductive high -dmMH@NTDee[VFUX@ab@LBpfWbQH r1 pattern reproductive high -dcmH@DhDfUe]aWVjA@`@piLzUx`z r1 pattern reproductive high -fluQB@NNbBHRYeg[Y]dkNBfBAbB`P`@H r1 pattern reproductive high -did@@Ldbbq[`bB@CBdJfGdX r1 pattern reproductive high -defJ`JaLFP|LddjRcUTpA@ r1 pattern reproductive high -difD@DCdfVZaZjZ@LLRaxfL r1 pattern reproductive high -deT@@DjU_k``b`@pzDJfz^I`` r1 pattern reproductive high -deWH@DJ`RYYTfZij`CCNF^He@ r1 pattern reproductive high -dmwH@DJ`RYYYIfjZj@H r1 pattern reproductive high -fb}@`@@YRYUUm[ehrRkNBf@BjjjjJ`@p|CANBdkQk^CEN^PP r1 pattern reproductive high -dcnH@BAIf^u[evB@@@@H r1 pattern reproductive high -dcLB`HSFCpRj}mUujh@@@` r1 pattern reproductive high -didH`HApRkm^Fh@@@` r1 pattern reproductive high -gJPhH`xQ}TA@ r1 pattern reproductive high -dmL@@DjYUVgaHIBh@H r1 pattern reproductive high -didD@@GIEEE\jfZh@` r1 pattern reproductive high -gFp@DiTvVhC@qX|Ph r1 pattern reproductive high -fj}P@@@IrRJJIQJIHdqUmA]Fh@bBHJh@@p}bgARUhug^CGIP r1 pattern reproductive high -dknD@BADfyvUtvjh@@@pELXYWSxaT r1 pattern reproductive high -deTH@@RYWVf`@j@CC`SBkiy@` r1 pattern reproductive high -dg|@@DjU_eZx{BAH@@BJlAaBjUt~Ec]X r1 pattern reproductive high -fj}a@@O@rJIJYRIKEIRcIF]z@Bjjjfb`@` r1 pattern reproductive high -gNy@LDegjj@plVKxaP r1 pattern reproductive high -do~D@AA|dTRRbqbyZBBbj@B r1 pattern reproductive high -didD@@yJ[VXZ@H@CBdpf{dB r1 pattern reproductive high -dmLD@@iJYW_JxZB@f@CBdIagdJ r1 pattern reproductive high -daF@@@RYe[hB@@LJCBinQp r1 pattern reproductive high -dieH@FxDigwJiejBJlLpjyb\H r1 pattern reproductive high -dg^L@LAER[eYWNvjhD@@LAPjF]N~Qp r1 pattern reproductive high -gNr@Ab|dTQeiDe@ r1 pattern reproductive high -daF@`H@HRVU[jjj@LNaLJf{d@ r1 pattern reproductive high -fnk@`@@ErQSISISISQJUgEZ]zNZ@Bjjjjlj@B r1 pattern reproductive high -fb}A@@@YHiiDdYdidjBUiwdyjjjjh@J`@H r1 pattern reproductive high -dmLD@@eIfUTfEV``R@B r1 pattern reproductive high -gJQ@@dru@XS\RH r1 pattern reproductive high -deVD`NFPbDfU^ih@I`@phLIiyB@ r1 pattern reproductive high -dmuD`BFUBHRYg^[hHBX@H r1 pattern reproductive high -did@`@qDf[Wai@@@H r1 pattern reproductive high -dcmH@DhDfUe]aWVjA@`@pKNe^X`z r1 pattern reproductive high -dmvD@HADfueYUi`@@cF r1 pattern reproductive high -deT@@LdbRQU\DBT@FCPaTL|SF@ r1 pattern reproductive high -f`q@@@DjU]YWiqw``R``@ABe@ r1 pattern reproductive high -flmA@@@YEDeMDhTieQbmN}EKUUUUUUT@D r1 pattern reproductive high -fduA@@@ILkZvmmFRUYpXmMUUUUU@A@ r1 pattern reproductive high -foAA@@@ISZzrkNV]P@T@@@AaIFBTXkQk\PIp r1 pattern reproductive high -fhi@`@@^Rfuue]Yrsj@B`@h@@` r1 pattern reproductive high -fdyA@@@ISZvnsKNJuP@@EUP@A@ r1 pattern reproductive high -doD@DgP]IefUTvhJBI@B r1 pattern reproductive high -dkm@@@kIHbdhdmNjj@@@LIaLIae]xeF r1 pattern reproductive high -f`qa`@D@EyIfYUwrLuYj`XHf@@pYrRmFmqEG@ r1 pattern reproductive high -dk]H@FDLbbbbbey]N@H`@@B r1 pattern reproductive high -deT@@DjU_k``b`@pFDpj[iy@` r1 pattern reproductive high -dg^L`LaC@HrRPzIKJRju@AL@FCXS\L|bp r1 pattern reproductive high -foAa@@I@RYeU{QJlyhHHjb@B r1 pattern reproductive high -foA@B@@RFQQIPiQITYYt@Dp@@BGF r1 pattern reproductive high -did@P@qAqDfY]n`HH@H r1 pattern reproductive high -didHPFBHJHRYf~FBH@@` r1 pattern reproductive high -fdei`@LJLzHIZrQQQQIJJkDiYpXuUUTBAP@D r1 pattern reproductive high -deTH@@RYWZf`@f@CB`SBkbCH r1 pattern reproductive high -deTH@@RYWVf`@f@ckA`SBknHL` r1 pattern reproductive high -dmMH@HxLbbbTQ[iV@@@@@` r1 pattern reproductive high -dk\@`@BDifUWGUN`@@@@CBPpj[ae^Ii` r1 pattern reproductive high -deVD`LFPBDieWrjfiXHr` r1 pattern reproductive high -dg|L@@Z|dTRbfQuCNtEDQR@D r1 pattern reproductive high -dg]H@IlDfYU^QUhHHj@B r1 pattern reproductive high -dcLD`BtHaIfUuXXHHj@B r1 pattern reproductive high -dk_H@DhpRYVU}aWVjA@h@H r1 pattern reproductive high -f`a@@@DjU_gVipHDffXAbbItp r1 pattern reproductive high -do}L@HdDuInUunxV`@ij@B r1 pattern reproductive high -dcvB@LANGHieEDXuTuPA@ r1 pattern reproductive high -dkn@@@rQIJJIGSjhJ@@CATrfxYWSx`P r1 pattern reproductive high -daxD@@QIeUjZBB\Bpf{dT r1 pattern reproductive high -gCh`DLdlpd\InHP r1 pattern reproductive high -foAA@@@ILkjrmFV]@AL@@@ar` r1 pattern reproductive high -dk\D@@WIEEEDYjF]hJHbP@` r1 pattern reproductive high -dmtH@@Rfuu[j@BXBAlJSBinXLj r1 pattern reproductive high -dklH@@Rfuuenh@Ij@`V r1 pattern reproductive high -didB@@[aRfU\jjjh@p[BinGbP` r1 pattern reproductive high -fhi@H@@XyIQgArQQIQJ[JV`k^jjjjjj@CCTBTxJVcN|GfDLl r1 pattern reproductive high -fhiA@@@ILrsZkf|xKUP@@@@@XFps`iJtZsoAyA@ r1 pattern reproductive high -fdyA@@@YEEHeEBdekA}Ejj@@@@@B r1 pattern reproductive high -dmVH@NAIe^Yjjj@LNpjXYWdH r1 pattern reproductive high -fhqa@@C@RYegV^tyjhHJJ@@` r1 pattern reproductive high -foAQ@@DJ@drrkNrMYsTDEED@FDdDYpVcV]sEIJ@ r1 pattern reproductive high -fjc@`@@YRYVum[ezLdjs`i`@jjjjhj@B r1 pattern reproductive high -deTH@@RfUWihHH@CCdpjxYyC@ r1 pattern reproductive high -fbmA@@@YEEMHdcLeHVRt[pVjjjjjjh@H r1 pattern reproductive high -fbmA@@@YEEeHhmEhXmV]zNVjjjjjjh@H r1 pattern reproductive high -dk^L@IANRY[f~]tvjjjj@LApjXUt~It` r1 pattern reproductive high -do|H@@rJJIPjHqaZZijZBAh r1 pattern reproductive high -fgAP@@@LrQQJJYPtdKQk@@@@@@@XBQPTeZMX r1 pattern reproductive high -fH`pA@ r1 pattern reproductive high -eMJH|Df`pgd@ r1 pattern reproductive high -eOB@HcfhH r1 pattern reproductive high -fHbTA@ m2 pattern mutagenic medium -fH`pA@ m2 pattern mutagenic medium -fHfXA@ m2 pattern mutagenic medium -eO`BNZ`` m2 pattern mutagenic medium -gKXHL@aJWFj`LBEcrP m2 pattern mutagenic medium -gBP`Adibj`H m2 pattern mutagenic medium -gCh`LDdsPFDWI` m2 pattern mutagenic medium -eMBBHRZCAKd` m2 pattern mutagenic medium -eFhHcAaWH@ m2 pattern mutagenic medium -gC`DADZHRVhB m2 pattern mutagenic medium -eMBCDRZCAKd` m2 pattern mutagenic medium -gGP`@dfuiaMX[F|b@ m2 pattern mutagenic medium -gCa@@dkHFBbyL m2 pattern mutagenic medium -eFABH`bLD m2 pattern mutagenic medium -eMDARZCAgd@ m2 pattern mutagenic medium -gJQhHl@cIHUhCBGd@ m2 pattern mutagenic medium -gJXDB@bABUmTA`Pl^R@ m2 pattern mutagenic medium -gJXHD@aIYj@ppqyH m2 pattern mutagenic medium -gGX`DJdsmRA`enP` m2 pattern mutagenic medium -eMhDRZCAKd` m2 pattern mutagenic medium -eFDBcAaWH@ m2 pattern mutagenic medium -gCh`LHe]PD m2 pattern mutagenic medium -gOx@@drm]UTAaqEcV m2 pattern mutagenic medium -gJPH@DISUPFABqyH m2 pattern mutagenic medium -gJX`DBdru@XI[dH m2 pattern mutagenic medium -fHapA@ m2 pattern mutagenic medium -gC`DAb[DRVhB m2 pattern mutagenic medium -daDD@@yIe^fZVX@psBkdH m2 pattern mutagenic medium -didH@@RUe^Fh@@@pxHPj[nPH m2 pattern mutagenic medium -dig@@@x\dTRQi`HF@akBdpj[dB m2 pattern mutagenic medium -daE@@@yIe^f`@`@piLJny@@ m2 pattern mutagenic medium -daEH@HxDeeVz`@@B m2 pattern mutagenic medium -deUL@DpFGHhdhYWMTuPA@ m2 pattern mutagenic medium -gOx@@drm\@@A`Qb~IT m2 pattern mutagenic medium -gOx@@drm\@@A`Qc^IL m2 pattern mutagenic medium -gOx@@drm\@@A`Pm^Hl m2 pattern mutagenic medium -daD`@@pjRfUi`HH@LDKnHc@ m2 pattern mutagenic medium -daGH@DK`R[e[fiZ@LLQnyE@ m2 pattern mutagenic medium -dmN@@@RYVuiiV@@@@@` m2 pattern mutagenic medium -gOq@@eL~mLlAal[qI` m2 pattern mutagenic medium -did@p@bBbFbDfYoa`b@@H m2 pattern mutagenic medium -eMBCDRZCAGe@ m2 pattern mutagenic medium -difH@NAIYVXZ@H@CA`cBX^Qp m2 pattern mutagenic medium -gFt@AdiWEihCAJ|TH m2 pattern mutagenic medium -gCd@ADkj@ppbyL m2 pattern mutagenic medium -gCaHLLQIZ`LDEqS@ m2 pattern mutagenic medium -detH@@RgYVDFZh@H@H m2 pattern mutagenic medium -diTH@@RgeXSaj@B@B m2 pattern mutagenic medium -gGQ@@eJuRA`Xm^P` m2 pattern mutagenic medium -diDB@@[aRVeZjj@H m2 pattern mutagenic medium -gGPdMQbGpRUZi@` m2 pattern mutagenic medium -eFA@HoBJD m2 pattern mutagenic medium -daxBPHQn@HhHrRPzKThA@ m2 pattern mutagenic medium -gNqhHl@cIHUEj`LLZ~P@ m2 pattern mutagenic medium -gGT@ATiVj`LJHl^R` m2 pattern mutagenic medium -eMPBcTH m2 pattern mutagenic medium -gJY@BDfVhCAK\a@ m2 pattern mutagenic medium -gGX`JDdsmTA`l^R` m2 pattern mutagenic medium -gGY@BDf^j`LBHmqF` m2 pattern mutagenic medium -gGT`EaTf]jPLDmrD m2 pattern mutagenic medium -gGQHJLQIUjdB m2 pattern mutagenic medium -defD@FADf]ZZjj@LJJnF^Q` m2 pattern mutagenic medium -gCi@LDeZ@pTwH` m2 pattern mutagenic medium -daF`@@pjYJYfn@b@@pPfyG@ m2 pattern mutagenic medium -gNt`E`tf]Zi@pVODj m2 pattern mutagenic medium -diFB@BAFEInuZjd@pILJnQp m2 pattern mutagenic medium -gCiHEAxIVtAaMqA@ m2 pattern mutagenic medium -gGU@DPdjmTAaekqP` m2 pattern mutagenic medium -gNt`E`tf]Zj@pJM_I` m2 pattern mutagenic medium -gNxhMV@aI[ji`LBHmrL m2 pattern mutagenic medium -gChhMDOBNtA`enP@ m2 pattern mutagenic medium -gC``AdeY@pbyH m2 pattern mutagenic medium -daDH@@RVU[f@@@LJcB[nQP m2 pattern mutagenic medium -daE@@@aJyUnh@@@pXHpj[d\ m2 pattern mutagenic medium -daFH@NAIe^f`@`@piLJny@@ m2 pattern mutagenic medium -gFxHL@aJYujj@pHboEb m2 pattern mutagenic medium -daF@@@RYe[hB@@LJ@j[nQ` m2 pattern mutagenic medium -daFH@HAIYUnh@@@pXHpj[d\ m2 pattern mutagenic medium -eFPBca@ m2 pattern mutagenic medium -daE@@@aJyUnX@@@` m2 pattern mutagenic medium -gCe@E`dkPFBbyL m2 pattern mutagenic medium -fH`XA@ m2 pattern mutagenic medium -gGPBADZPLaYAIZjhB m2 pattern mutagenic medium -gJPDADFHRUj`H m2 pattern mutagenic medium -gCd@ADiZDE@ m2 pattern mutagenic medium -gJY@DDeZhCCSGbB@ m2 pattern mutagenic medium -gGX`LDdsmTA`m^P` m2 pattern mutagenic medium -eMBBHRYCAKd` m2 pattern mutagenic medium -dkNF@BAIWSR[YVYjjfX@` m2 pattern mutagenic medium -eF`BJFE\` m2 pattern mutagenic medium -da{@`Dq`BLbbbKUR@P m2 pattern mutagenic medium -daDD@@yIe^fZVX@pSBxbT m2 pattern mutagenic medium -daD@@DjWZXHB@C@dpnxdL m2 pattern mutagenic medium -dmNH@HCHhheDVzU`@@@@H m2 pattern mutagenic medium -gFy@LDidviXB m2 pattern mutagenic medium -dmv@`LCDRUVUeZj@@@H m2 pattern mutagenic medium -gNxDLLQxbRjuU@P m2 pattern mutagenic medium -daDH@@RYVih@H@LBrf{b@` m2 pattern mutagenic medium -daG@`LK`BDimVz`@@B m2 pattern mutagenic medium -deUD@DhBRY[TYZ`@@B m2 pattern mutagenic medium -deUD@DdBRY[TYZ`@@B m2 pattern mutagenic medium -daEH@LXDeYVzje`C@`RnxdD m2 pattern mutagenic medium -eMBCDRYCAGe@ m2 pattern mutagenic medium -gGPXHlQxIU[U@XR|VH m2 pattern mutagenic medium -fH`TA@ m2 pattern mutagenic medium -eFJHqHpP m2 pattern mutagenic medium -daxD@@QIeyjZBBlLpnyC@ m2 pattern mutagenic medium -gGP@Di^VaHxTQF|f@ m2 pattern mutagenic medium -dctH@@RgUUZYfY@dRVQX m2 pattern mutagenic medium -eFBBDcA@ m2 pattern mutagenic medium -eMBBHRYCAGe@ m2 pattern mutagenic medium -gJQHBHaInZ@` m2 pattern mutagenic medium -gGUHEhOAJmZhB m2 pattern mutagenic medium -dmLH@@RgVUaIVj`@`@` m2 pattern mutagenic medium -gOx@@eR}XP@AaXl[rL m2 pattern mutagenic medium -dcnH@JAIYe[yYu`@@@@H m2 pattern mutagenic medium -dev@@@RfV^nFP@@@@LFPj[iy@` m2 pattern mutagenic medium -dmM@@@WIEDhlZxY@@@`@H m2 pattern mutagenic medium -gOx`DBdwQkUTA@ m2 pattern mutagenic medium -dclD@@UIfV][iuhFAH@LJiag^Q` m2 pattern mutagenic medium -gJPDADXHRVj`H m2 pattern mutagenic medium -gJPDAbGDRUj`H m2 pattern mutagenic medium -gJQHBLQIVj@` m2 pattern mutagenic medium -gNt`Bpdf{Zj@pJqoHp m2 pattern mutagenic medium -eMdDhzB m2 pattern mutagenic medium -fHehA@ m2 pattern mutagenic medium -fHfpAa@ m2 pattern mutagenic medium -fHchA@ m2 pattern mutagenic medium -gOq@@drm[RtA`Uc^Q` m2 pattern mutagenic medium -gFx`LDdrfmU@XHwdp m2 pattern mutagenic medium -eMhDRUB m2 pattern mutagenic medium -eFbHbHpP m2 pattern mutagenic medium -eMJDBDf`pQyP m2 pattern mutagenic medium -dcLL`NWPbDfUuZf`@jX@H m2 pattern mutagenic medium -gNx`JDdskUPFDwLZp m2 pattern mutagenic medium -gJX`DBdru@XS\RH m2 pattern mutagenic medium -diDDPNDHc@aIUVjjX@` m2 pattern mutagenic medium -gChHL@aIVPH m2 pattern mutagenic medium -gJXhEBOAJuj@` m2 pattern mutagenic medium -eMJDbDf`pQyP m2 pattern mutagenic medium -daFD@DAdegfyjj`B m2 pattern mutagenic medium -dmNh@DkaTDfVYVzUZiZi@H m2 pattern mutagenic medium -daDD@@IIf]nfih@` m2 pattern mutagenic medium -daG@@@kdiVrX@a@C@hPfyG@ m2 pattern mutagenic medium -dcnL`LaA@HrRPjIKTrzmPHD@FEYtkh m2 pattern mutagenic medium -eOHBNZP` m2 pattern mutagenic medium -diVH@BAIfUInFjZi@H m2 pattern mutagenic medium -gJPDADFHRUfaIP m2 pattern mutagenic medium -gNqDLHaqBRjuU@P m2 pattern mutagenic medium -gNpDAbODRUVjhB m2 pattern mutagenic medium -gGX`BDdjmTA`m^JD m2 pattern mutagenic medium -didHPBBHFHRYgvzB@`@` m2 pattern mutagenic medium -gJXHD@aIUZ@` m2 pattern mutagenic medium -difH`NDIAIe]ih@J@B m2 pattern mutagenic medium -daE@@@IIf]n``@@pHLJnHw@ m2 pattern mutagenic medium -gJPDADFHRYfaIP m2 pattern mutagenic medium -diFL@JANRY]fjf@LLJayF@ m2 pattern mutagenic medium -die@@@YJYYhP`X@CBdJnGdL m2 pattern mutagenic medium -gGTHE`DIJkSBZppUxhP m2 pattern mutagenic medium -eMbDBDfp` m2 pattern mutagenic medium -deVH@DAIgeQej@@@LJrfx^Hd` m2 pattern mutagenic medium -dcN`@@pjYJYenk`Hbj@B m2 pattern mutagenic medium -didh@DJaAIVUxZ`@@B m2 pattern mutagenic medium -dcNL@BA]RYe]VEjVih@` m2 pattern mutagenic medium -gNxhIV@aJUji`H m2 pattern mutagenic medium -dcNL@LANRYygiUjB@`@` m2 pattern mutagenic medium -did`@@pjrQQIFf@`h@LLKaxbL m2 pattern mutagenic medium -dmvH@NAIfUTUZBB@@p[BiaWdR m2 pattern mutagenic medium -dmuH@DpDfWeYUj`@@CAlInF^Hb` m2 pattern mutagenic medium -fH`PAa@ m2 pattern mutagenic medium -fHd`Aa@ m2 pattern mutagenic medium -eFJHaHhP m2 pattern mutagenic medium -foA@R@HHpx@QddebRfRpiFlm@@@P@A@ m2 pattern mutagenic medium -dmLH@@rJJIQEneX@@@@CB`kaWfXt` m2 pattern mutagenic medium -dmLH@@RYVuiiV@@@@@phJxYybXh m2 pattern mutagenic medium -fgA`@@@ISLrotyHvk@@@@@@@P m2 pattern mutagenic medium -daFH@HAIYUnh@@@pKBinXD\ m2 pattern mutagenic medium -fduH@@@X]GIEEMDdehUbbkF|FKT@@ACPP@P m2 pattern mutagenic medium -f`iH@@@TdyJYW^U|TxJsiB@jjh`@` m2 pattern mutagenic medium -dmM@@@qJY{WJeVj@B@CCdrfxYyB` m2 pattern mutagenic medium -dcmH@AdDfUvVfWX@IjH@` m2 pattern mutagenic medium -diV@@@RfU|kahDB@CB`JfGbIp m2 pattern mutagenic medium -ffsa@@G@RfYU_yUTVeFCDmZ@@@JZ@@@@H m2 pattern mutagenic medium -eMJDBDe`pQyP m2 pattern mutagenic medium -flua@`IJAHFdKRCi@hRDQHQDaHaHFJLuzJX@Jfjja`@` m2 pattern mutagenic medium -fhyA`@@B|dsLsKnqVgVBt@Q@BP@A`s`mFlGbIN@ m2 pattern mutagenic medium -fbmAP@@BBgJSLsLoOkEZ]ZKPAD@RU@@D m2 pattern mutagenic medium -daE@@@yJe~fB@`@` m2 pattern mutagenic medium -foAa@@D@RYYeUuVLyj@@@@@CBRJLxJRmFxbs` m2 pattern mutagenic medium -fdyQ@@DA@drsJkzjlYsT@@@T`@D m2 pattern mutagenic medium -fhiq@@D^BAIefUWuUcNZ`@@B`@B m2 pattern mutagenic medium -dcNL`LaI@HrREQISBjt@Q@AaVTp{q@T m2 pattern mutagenic medium -dg^L`LaM@HrRPiSISJZuPAD@D m2 pattern mutagenic medium -fgA@@@LdbbbTVKIBMjp@@@@@@D m2 pattern mutagenic medium -f`iA`@@F\eLsJmmARmku@A@QD@@P m2 pattern mutagenic medium -fnk@P@@FbuIefYZWz^`mA|gMVfjjjjjjj@B m2 pattern mutagenic medium -dmLH@@RfY]raV`XD`@phj[axdj m2 pattern mutagenic medium -foAA@@@ISLjoxmJMP@@AH@AaKAJLxJRk\PYp m2 pattern mutagenic medium -fnsAH@@LDjwdu[dTTTTTiRbTVWAZMdkPSDEUUUD@D m2 pattern mutagenic medium -foIQ@@BJ@dsJsllepQkF\uKUUTt@D m2 pattern mutagenic medium -foAaB@G\ADILkkJ}FFm@AP@P@A@ m2 pattern mutagenic medium -dk\H@@RfY]JEZA`RXBAh m2 pattern mutagenic medium -f`qQ@@G^@eLrjpmJMP@@AL@@XJpRcNBdiwnPL m2 pattern mutagenic medium -fdyQ@@OA@eLrj~lbthu@@@EL`@D m2 pattern mutagenic medium -fhyi@@DTxIPLbbTTRqbRYrRoAZiYh@J@@` m2 pattern mutagenic medium -f`i@`@@DRYfyU]`mNmyi`@@B@@H m2 pattern mutagenic medium -daF@@@RYWifef@H m2 pattern mutagenic medium -daF@@@RYe[hB@@LB@j[bYp m2 pattern mutagenic medium -fhe@@@LdbbbbbqQXXUiJ|DB@H@@B@@` m2 pattern mutagenic medium -fnk@a@CM@DVdLbbdRQbTQdrvIrRoAKVjjjjjiYj`@p]`eF\EKQoQSdoD@` m2 pattern mutagenic medium -fa{@c@K]@DHBGRFQRZQIFIQFSKZ`eZCFkZjjjjjiYj`@` m2 pattern mutagenic medium -det@@DjYUX^d@@@@CAlJnF^Hc@ m2 pattern mutagenic medium -deth@DkiAIeeVxYZiZd@pQAxaT m2 pattern mutagenic medium -dcNL`LaE@HrRPzIJSju@D@AaVDwSqEt m2 pattern mutagenic medium -dk]@@@qJY{W\jUZh@I`@` m2 pattern mutagenic medium -dmN@@@rRJKQEneP`@@@B m2 pattern mutagenic medium -few@`@@HrJYJJZQIFYJSKJmxNRcfuUUUUUUUUP@XUQ`eF\dkQkN|FNRu[t_HS@ m2 pattern mutagenic medium -deVH@DAIgeQej@@@LJSJX^It` m2 pattern mutagenic medium -daFH@NAJYJifx@` m2 pattern mutagenic medium -eMdHTf`|rP m2 pattern mutagenic medium -gJY`DLTefhB m2 pattern mutagenic medium -diFH`Bp@cIECDjZj@H m2 pattern mutagenic medium -deTB@@RirJIPqTsUUT@P m2 pattern mutagenic medium -dmtL@@slbTtTLpfjjj@H m2 pattern mutagenic medium -dmNH@BAIfUmiEX@@@@CC`qnFU@ m2 pattern mutagenic medium -dg\D@@eIVUuWaZ@Bj`@peBinWSodP m2 pattern mutagenic medium -fgA@@@DjYU_VByHu`@@@@@@H m2 pattern mutagenic medium -dclH@@rIQQJH|J{P@@@@D m2 pattern mutagenic medium -dk@@@p\dTRbfQjVGSBBheF@H m2 pattern mutagenic medium -dk}@@@iJUmUR[atzjZ@H@C@PPje]OdP m2 pattern mutagenic medium -dk}@@@yJUmmRkatp@h@B@B m2 pattern mutagenic medium -fgAp@@@XheLvnjs`iFlDPT@@@A@ m2 pattern mutagenic medium -fgAP@@@LrQQJEIITxJQk@QE@@@@P m2 pattern mutagenic medium -dcm@@@EJYYwietB@P@@H m2 pattern mutagenic medium -dif@@@RYWZZ@BP@pXDpj{dB m2 pattern mutagenic medium -dg}B@DpAV|bbbRbrK]imUMMU@FGXU]IwrM@ m2 pattern mutagenic medium -dg|H`FBHRYV~Ukcn@H`@@@pdDrne]OdV m2 pattern mutagenic medium -dg|@@DjU_eZx{BAH@@BJlMaLJfe]N~Qp m2 pattern mutagenic medium -gGQhHjOAJmZhCBGfFh m2 pattern mutagenic medium -gGT`EaTf]j`LDkqX` m2 pattern mutagenic medium -fgA`@@@YHheEhTj\EHu`@@@@@@H m2 pattern mutagenic medium -f`i@`@@VRYfYU]`eNMyh@`AB@@LFRUhso\QS` m2 pattern mutagenic medium -ffc@p@@DEkM\bbbfbTtRrLKAF|dkTaQ@DDT@@P m2 pattern mutagenic medium -foQPB@F\@DYHheBeLdRdeV]Th@@D@@P m2 pattern mutagenic medium -dcoH@NWPRVUmVFUX@ah`B m2 pattern mutagenic medium -f`i@`@@VRYfYU]`eNMyh@`AB@@LF\Uhso\QRP m2 pattern mutagenic medium -fhy``@A@|dsLsKnqVgVBt@Q@BP@A@ m2 pattern mutagenic medium -fde@P@@J]{HhhhhhdeBpV`vbt@Q@LD@@XLUjw`qxca` m2 pattern mutagenic medium -daFL@NAFR[e[fff@H m2 pattern mutagenic medium -f`i@`@@VRYfYU]`eNMyh@`AB@@LN\dkQg^yB` m2 pattern mutagenic medium -dk\D@@qIY[mZ{SZZ`@P@` m2 pattern mutagenic medium -dk]L@LxDMIe]eRkSZjjjh@` m2 pattern mutagenic medium -dclD@@IIf]U[evjj@@@H m2 pattern mutagenic medium -fgA`@@@ISKJntXKQk@@@@@@@P m2 pattern mutagenic medium -fduP@@@FRe[Y]mRTDhu`q@@BJ@@H@B m2 pattern mutagenic medium -gGPdMQDGpRUYiDe@ m2 pattern mutagenic medium -deT@@DjUghP`h`@pYL[agfPU@ m2 pattern mutagenic medium -dg]D@LlMrIJJIIHj]UAAD@D m2 pattern mutagenic medium -f`iA`@@BUdTTTTTRqXKSk^Z@H`@`@B m2 pattern mutagenic medium -fgAP@@@\RfYe_irQmV@@@@@@@` m2 pattern mutagenic medium -dmw@`Dq`BDeUeYUi`@@cJ m2 pattern mutagenic medium -diV@`J@HRfU|kahDB@CB`PfGd\ m2 pattern mutagenic medium -fgAPB@LD@DISJJdhsakTuT@D`@P m2 pattern mutagenic medium -gGThEXQxIVsS@P m2 pattern mutagenic medium -dk^@@@RfYU\]Tz@@@@@LECBinFUOdZ m2 pattern mutagenic medium -fgA@`@@\RfYe_irQmVh@`@H@@` m2 pattern mutagenic medium -diT`@@rnRfUjEnejfPB m2 pattern mutagenic medium -f`ih@@@XIQVRJJIIZEIgIJ]xB`j@@P@H m2 pattern mutagenic medium -dcn`@@xYUIYeg[ewiBHH@H m2 pattern mutagenic medium -dmtH@@RYWUih@IhBN\NALJiWb\H m2 pattern mutagenic medium -f`qAA@A@bOQBSJ{\ktYYt@EP@P@A@ m2 pattern mutagenic medium -fdy@P@@BtGHhhhheEcliuoM@DD@T@@P m2 pattern mutagenic medium -deu@@@[IEDhcSCH@@@@FAEpsqDh m2 pattern mutagenic medium -dcm@@@{IEEEDcWSh@PD@@P m2 pattern mutagenic medium -foAP`@DXAIIfU^uYrsfjjP@`@H m2 pattern mutagenic medium -det@@DjYUX^d@@@@CBlJngfHp` m2 pattern mutagenic medium -dclh@LX]AIVYWxUuj`PH@H m2 pattern mutagenic medium -gJP`@TeVhCCSGdP m2 pattern mutagenic medium -daxL@@RdfVVjh@ppj[bYp m2 pattern mutagenic medium -dg~@@@RYfUWd}mh@@@@@pdBinFUwbGX m2 pattern mutagenic medium -difH@HAIfuxZ`@@B m2 pattern mutagenic medium -dmtD`NTLQIe]Vf`@jP@` m2 pattern mutagenic medium -gOqHF@aJW\ZVXCCA[be@ m2 pattern mutagenic medium -dk^@@@RfYU\]Tz@@@@@LICBinFUxff m2 pattern mutagenic medium -dk}@@@iJUmUR[atpBJ@@@CChPiWSyE@ m2 pattern mutagenic medium -dk^@@@RfYU\]Tz@@@@@LI@j[aeSxfZ m2 pattern mutagenic medium -deUH@JdDin_xZB@`@pqB[fUt` m2 pattern mutagenic medium -detH@@RfUWJzZABH@LBInGbIH m2 pattern mutagenic medium -foQAB@C@BDifYU^gIVtz`B@DH@@` m2 pattern mutagenic medium -gBQHDHaIejhB m2 pattern mutagenic medium -daG@`D[`bDfUjZ@B@CA@sbUp m2 pattern mutagenic medium -didHPACDZHrJIJFn`BH@H m2 pattern mutagenic medium -dknDPLa@BABLddJbTVtujAH@@` m2 pattern mutagenic medium -dayDPLZD@HhHrRESKSPAafTwDC` m2 pattern mutagenic medium -gNxHD@aIUVj`LFEcWrP m2 pattern mutagenic medium -diEDPLZD@HhHrRESIZZ`B m2 pattern mutagenic medium -dayH@DpDf]Vjh@piBinyF@ m2 pattern mutagenic medium -deV@@@RfyWahBB@CBj[agf@a@ m2 pattern mutagenic medium -dmtB`HSBCprRSFIJUZh@@@pInF^YaJ m2 pattern mutagenic medium -dif@`D@HRVU^Ejjh@` m2 pattern mutagenic medium -dmL`@@siRfUmhVxHFJH@` m2 pattern mutagenic medium -gO}@EfDfUkZZPH m2 pattern mutagenic medium -gCe@E`dmHD m2 pattern mutagenic medium -deUL@DpFgHhdhUWMTuHA@ m2 pattern mutagenic medium -dclD@@EJY}erevfVfiBJh m2 pattern mutagenic medium -dk\H@@RYeg]ntxB@P@@H m2 pattern mutagenic medium -dk\D@@MJ[Vuvy]h@@B@@` m2 pattern mutagenic medium -foAaB@KN@DISLjoxmJMP@@AP@A@ m2 pattern mutagenic medium -daFH@HAIYUnh@@@phHpfxe\ m2 pattern mutagenic medium -gF|@AbeLzmS@XKWbQ@ m2 pattern mutagenic medium -dcoH@DJ`RUeUVy]ZZ`@@CBdhYwbPh m2 pattern mutagenic medium -dmOH@FePRYVukaf@HZH@` m2 pattern mutagenic medium -fhiA`@@Hddjrm|jIW`mPAD@@@A@ m2 pattern mutagenic medium -dmL`@@[aRfV[hYVPb``@` m2 pattern mutagenic medium -deVD@LADfvUFVjjh@p{BinF^P` m2 pattern mutagenic medium -fhi``@L@PdssLjn[s`mU@@@@@A@ m2 pattern mutagenic medium -dk|@`@BDie^urnGShD@@`@H m2 pattern mutagenic medium -deVH@BAIemQfk@@@H m2 pattern mutagenic medium -f`qa@@O@rQQQIISGBtju@@@QX@A@ m2 pattern mutagenic medium -fbc@@@LdbbbbbRJvcEBMIpTqrAD@@@@@@@D m2 pattern mutagenic medium -dcl@`@BLbTTRbOBnt@@@@A`LDwCJ{r@@ m2 pattern mutagenic medium -fdu@P@@JMGIEEDhhhhgPPkR\kUUSUUUUP@P m2 pattern mutagenic medium -gFxHH@aJUqiZ@ppMyD m2 pattern mutagenic medium -flu@P@@B\EIfYfWgvJuztV`BHBDh@@` m2 pattern mutagenic medium -fHbhA@ m2 pattern mutagenic medium -dcl@@DjYeeiGP@HH@@` m2 pattern mutagenic medium -f`i@`@@VRYfYU]`eNMyh@`AB@@LF\ehso\QQP m2 pattern mutagenic medium -fhy@@@LdbbbRQaREiQoA`@`@@@@@` m2 pattern mutagenic medium -fhyQ@@CA@dsLjm{Jvg^Bt@@DCA@A@ m2 pattern mutagenic medium -f`q@Q@HH]x@QXHrRFIJYIZ\Ehrp@@Dh@A@ m2 pattern mutagenic medium -det@@DjYUX^d@@@@C@binxRXL` m2 pattern mutagenic medium -dg|@P@bCbDfUnuj{[`B@B@@H m2 pattern mutagenic medium -didHPBBHFHRYgVzB@`@pHLh^HW@ m2 pattern mutagenic medium -foAaB@GDADILroZ{AFmAA@@P@A@ m2 pattern mutagenic medium -foAaB@GLADILk_J}NFm@DP@P@A@ m2 pattern mutagenic medium -dc\@@DjYVYayYt@@H`PB m2 pattern mutagenic medium -diDB@@SaR[eVfjBLh m2 pattern mutagenic medium -foAP@@@NRYWVUzLMZ@B`@`@B m2 pattern mutagenic medium -gOq@@drm]SRA@ m2 pattern mutagenic medium -didh@DqaAIe[kffjPB m2 pattern mutagenic medium -deV@@@rIQIPmw@AH@XUaMp|bP m2 pattern mutagenic medium -deVB@LAaeJYyzzjjj@LAaBinF^Q` m2 pattern mutagenic medium -dk\H@@RYm[Watz`@@@@H m2 pattern mutagenic medium -foAh@@@XIQRTsNj~sdm@P@QT@@P m2 pattern mutagenic medium -dklB@@F]RYe]ynZYif`B m2 pattern mutagenic medium -daF@@@RYVih@H@LLBnybXp m2 pattern mutagenic medium -dknD@LADf^YWeVhBB`@` m2 pattern mutagenic medium -dcNH`IDLQIe[^ih@Jj@B m2 pattern mutagenic medium -dmO@@@bTieulhUfhB@@H m2 pattern mutagenic medium -foQh@@@\eYvRJJJJUKTxkQk@AA@tD@D m2 pattern mutagenic medium -flmAP@@LUyNQQQQEJQJI|Eish~BtuUUUUU@A@ m2 pattern mutagenic medium -dkm@@@QInUu^Eh@IdBIh m2 pattern mutagenic medium -difH@JAJ[gxZB@@C@dJfxgB m2 pattern mutagenic medium -foA@@@DkfYU]UcNz`@@@@@` m2 pattern mutagenic medium -dk~@@@rRJIJJEi{UNhJHb`@` m2 pattern mutagenic medium -deT@@DjY]zXFB@@pYLinGbEH m2 pattern mutagenic medium -foAA@@@ILkjrmFV]@AL@@@arpdAFBTUhunXxIp m2 pattern mutagenic medium -dcMH@EtLbbbRQc]@PLp@P m2 pattern mutagenic medium -diTH@@RfU|kahDB@CCBknXcB m2 pattern mutagenic medium -difH@DAInUxZ`@@CAhJfx^HB@ m2 pattern mutagenic medium -deVD@HCDi^UFZh@@@` m2 pattern mutagenic medium -gNx`DJdssTpFBsyD m2 pattern mutagenic medium -f`a``@M@EdbbRTQrdxj``hjh@C@rBTYpTeZl{wHX@ m2 pattern mutagenic medium -deT@@DjUghP`h`@pFDpj[iy@` m2 pattern mutagenic medium -dcl@@DjYU_egX@@@@@pyLJag^XwJ m2 pattern mutagenic medium -dmtL`HS@BLdaRbReUj@@@H m2 pattern mutagenic medium -daxD@@QIUUjj@LJpj[nQ@ m2 pattern mutagenic medium -dcl@@DjYU_egX@@@@@p{J[ag^XaJ m2 pattern mutagenic medium -daE@@@aJmUnjjh@` m2 pattern mutagenic medium -gOr@ABtiYufjPH m2 pattern mutagenic medium -fgApB@LLx@HRevUUpPTcViYj@H@@` m2 pattern mutagenic medium -deth@DkiAIeeVxYZiZd@pqJGdD m2 pattern mutagenic medium -foA@P@@\e[HhheEBcF\UihFHIh@B m2 pattern mutagenic medium -fj}@P@@\ceIfVW{WVYrVoAZA``@JZ@@H m2 pattern mutagenic medium -fbm@p@@BLEN\bbbbbbbrNwEZ|zKPADPBU@@D m2 pattern mutagenic medium -dg|D@@iJYYytYvzB@@`@B m2 pattern mutagenic medium -dmMH@HxLbbbTQ[iV@@@@@` m2 pattern mutagenic medium -gNt@@\dbLjj@pJu_I@ m2 pattern mutagenic medium -dk\H@@Rf_YWJtzYX@HBJX m2 pattern mutagenic medium -dg|@@DjU_eZx{BAH@@BJ\EaLine]ObEX m2 pattern mutagenic medium -dg|@@DjU_eZx{BAH@@BJ\EaLJfe]Ob]X m2 pattern mutagenic medium -f`q`@@@IKJzljsco\@Dp@@B@j m2 pattern mutagenic medium -devH@IAJYW\kahDB`@` m2 pattern mutagenic medium -dif@@@RYWZZ@B`@pYLJnGd@ m2 pattern mutagenic medium -dk_@@@Y\dTRbJtiad@@Bh@B m2 pattern mutagenic medium -dk\D`HP@cIHXheDQgSV@@@@@pZnE]ObAH m2 pattern mutagenic medium -dgL@Ds`f|bbTTtJuCimMUUS@FCTwJ]|P]@ m2 pattern mutagenic medium -foAq`@DXxBSlbbTTtJVhKQffjjjX@LATYpRmFmrC` m2 pattern mutagenic medium -dcnH@IAJ[Vu[ev`@@@@LFSBE]yC@ m2 pattern mutagenic medium -dmM@@@[IEDhhZdU@B@@@LJRnF^Hr` m2 pattern mutagenic medium -f`iP`@B\@aInVUuQRUiwfjij@H@@` m2 pattern mutagenic medium -dc\@@DjYVYayYt@@H``B m2 pattern mutagenic medium -fgAa`@N@t[HhheDTdsdeFltC@UQ@A@ m2 pattern mutagenic medium -deTD`HP@cIHXhdLk@P@A`UMp|PI@ m2 pattern mutagenic medium -die@@@GHhhdVz@``@pKBinH@` m2 pattern mutagenic medium -dmN@`E@HRfUwrnF`PI`@` m2 pattern mutagenic medium -dk\L@@R\bbTTTU[mMjBhB@B m2 pattern mutagenic medium -fbmAR@HHqhH@cIIKDeMEhdlIUgIrm@DM@`D@A@ m2 pattern mutagenic medium -foAP@@@NrJJIHqIYgCV`HH@H@@` m2 pattern mutagenic medium -dcLL@@ETfYUUnZYjZ@H m2 pattern mutagenic medium -dcn@@@rIQQJH|J{p@@@@D m2 pattern mutagenic medium -daF@@@RZW[jii@H m2 pattern mutagenic medium -diVL@DBnRYYbZfZjj`B m2 pattern mutagenic medium -fHgPAa@ m2 pattern mutagenic medium -gC`DAbZHRVhB m2 pattern mutagenic medium -gCaHLHaIZPLDErP m2 pattern mutagenic medium -eMPBcXLJyH m2 pattern mutagenic medium -gCahHlHROTA@ m2 pattern mutagenic medium -eOHBNZ`pge@ t1 pattern tumorigenic high -eFDBcA@ t1 pattern tumorigenic high -eFhHbayP t1 pattern tumorigenic high -gFy@DDfXujhCAF|f@ t1 pattern tumorigenic high -fHcpAa@ t1 pattern tumorigenic high -eMPBchLDnR t1 pattern tumorigenic high -eMBBHRZCAKd` t1 pattern tumorigenic high -eFJHbHpXI@ t1 pattern tumorigenic high -gCa@@dkHFBbyL t1 pattern tumorigenic high -eMJDbDf`` t1 pattern tumorigenic high -eMHAIdLF^P t1 pattern tumorigenic high -gJXHD@aIUj@pHVOI@ t1 pattern tumorigenic high -gGY@BDeVj`LJHm^P` t1 pattern tumorigenic high -eMPBcTH t1 pattern tumorigenic high -gCd@ADkj@pTWDL t1 pattern tumorigenic high -deTH`ABHRVUunh@J@B t1 pattern tumorigenic high -didL@@SdfU{aZjj@H t1 pattern tumorigenic high -diDD@@QIeuZjh@pkJ[ayA@ t1 pattern tumorigenic high -gOy@HDfUk`@@H t1 pattern tumorigenic high -gJ\@ADe\u@XKGd` t1 pattern tumorigenic high -deV@@@Rffeijjj`CClJfxYy@@ t1 pattern tumorigenic high -deVH`NdLQIe]ZZ@Bd@LFALJny@` t1 pattern tumorigenic high -gOx@@drm\@@A`Qb~IT t1 pattern tumorigenic high -gF|@AbeJfuU@P t1 pattern tumorigenic high -dmN@@@rJJIQEneX@@@@B t1 pattern tumorigenic high -difH@BAIfuxV`@@C@j[ayF@ t1 pattern tumorigenic high -gOx@@drm\@@A`PZ~IX t1 pattern tumorigenic high -daF@@@Rfu[j@@@LJSBinHG@ t1 pattern tumorigenic high -deU@@@yJUuRh@Jh@LNaLIagd\ t1 pattern tumorigenic high -gNxLL@aAABDfVZj@` t1 pattern tumorigenic high -gGPB@DHHpQPaIUZdB t1 pattern tumorigenic high -gGY@BDf^j`LBHmqF` t1 pattern tumorigenic high -dazH@LAIUUjj@LJPj[nIF@ t1 pattern tumorigenic high -eMBCDRZCAKd` t1 pattern tumorigenic high -gGQHJLQIUjdB t1 pattern tumorigenic high -defD@B@TfUvZjf@H t1 pattern tumorigenic high -eFA@HoBJFD\h t1 pattern tumorigenic high -dayD@DpNRYWZj`C@lInxbT t1 pattern tumorigenic high -gFt@AdiTvjhC@qF|Pp t1 pattern tumorigenic high -gOtHLPDYHhckSM@XXI|a@ t1 pattern tumorigenic high -gNqBLIAREdGHIMmUTA@ t1 pattern tumorigenic high -eMXIDfP` t1 pattern tumorigenic high -gJT@ADiVhPT t1 pattern tumorigenic high -gGY@JDeVj`LJHl^R` t1 pattern tumorigenic high -gCi@DDeZ@pTwH` t1 pattern tumorigenic high -gNx@@eJmUPFCDVKyJ t1 pattern tumorigenic high -gNxDLHaqBRjuU@P t1 pattern tumorigenic high -gGP@DjVj`LKEc^P@ t1 pattern tumorigenic high -gNx`LFdjmUPFCDQkyL t1 pattern tumorigenic high -fHbpAa@ t1 pattern tumorigenic high -didHPBBHFHRYgVzB@`@` t1 pattern tumorigenic high -daD@P@bNbDfUzZ@B@B t1 pattern tumorigenic high -daD@`@bDfUjZ@B@CB`SJ{dL t1 pattern tumorigenic high -gCe@E`dsPFBV@ t1 pattern tumorigenic high -gOy@FDiguie`LMc^IL t1 pattern tumorigenic high -daDh@DInAIf]nZiX@` t1 pattern tumorigenic high -digH`LH^@HRf_ljfYh@ppBkbHH t1 pattern tumorigenic high -daD@`@QDeeVz`@@B t1 pattern tumorigenic high -gCahHlHRNtA@ t1 pattern tumorigenic high -gOxhMDOAJmZvjhC@xu|`@ t1 pattern tumorigenic high -daED`LJDCpRjw[fjj@LLinxfD t1 pattern tumorigenic high -dcMDPLzfBHKpRUZvYvjZjh@` t1 pattern tumorigenic high -deT@`@bLbdTJPsU@@@D t1 pattern tumorigenic high -dcNH@DAIee^eVhHB@CCbine]yB@ t1 pattern tumorigenic high -gJX`DBdru@XKGdP t1 pattern tumorigenic high -dif``DqnDHaIeYih@J@B t1 pattern tumorigenic high -gOx@@drm\@@A`Pm^Hl t1 pattern tumorigenic high -gCa`@ldsPFBV@ t1 pattern tumorigenic high -gNqhHl@cIICej`LD[rL t1 pattern tumorigenic high -gO|HLV@aJY}ZYhB t1 pattern tumorigenic high -gF}@LZDigVfXB t1 pattern tumorigenic high -daE@@@aJyUnh@@@pXLJf{dP t1 pattern tumorigenic high -dmN@@@RYVuiiV@@@@@` t1 pattern tumorigenic high -gFx@@eJfuT`XEXwbD@ t1 pattern tumorigenic high -gFt@ADiWFZdCCPwdP t1 pattern tumorigenic high -gGPhMQDIJmU@P t1 pattern tumorigenic high -gNqHLHaIYzj`H t1 pattern tumorigenic high -gNx`JBdr}UPFCDVKyJ t1 pattern tumorigenic high -daF@`LBHRVU[j@@@H t1 pattern tumorigenic high -gGX`HJeZuTA`Uc^R@ t1 pattern tumorigenic high -fHfpA@ t1 pattern tumorigenic high -gOy@FDfUkZj`LBl[rL t1 pattern tumorigenic high -gGQ@@dluTA`Xm^HD t1 pattern tumorigenic high -daz@@@Revjj`CAdpj[nHD@ t1 pattern tumorigenic high -diTD@@yJ]VaNFjjj@H t1 pattern tumorigenic high -dmLL@@iTie]|kahHBh@LJPfE^QH t1 pattern tumorigenic high -gOu@DPdrykURA`l~Q@ t1 pattern tumorigenic high -diT`@@rnRfUjEnBA``B t1 pattern tumorigenic high -fHgHA@ t1 pattern tumorigenic high -did@@DjU^nBBD@LFaLiaxa\ t1 pattern tumorigenic high -eFACr`bLD t1 pattern tumorigenic high -dcl`@@`nReeWZY]@``@@B t1 pattern tumorigenic high -did@`@bDfYUn`HD@LFCBiny@` t1 pattern tumorigenic high -dmv@`EBHrJJIHin`HFpHy` t1 pattern tumorigenic high -gOq@@eL~mLlAal[qI` t1 pattern tumorigenic high -deUH@DpDf^UFVh@@@pYLinGdR t1 pattern tumorigenic high -deVH@IAJYW~F``H@LFSBinyD` t1 pattern tumorigenic high -deV`@@rfyJWUlIifjBJh t1 pattern tumorigenic high -dig@@@aDiyWaZ@@B@h t1 pattern tumorigenic high -deWH@DJPRY[TYZ`@@B t1 pattern tumorigenic high -eMBBHRZCAGe@ t1 pattern tumorigenic high -gNy@FDfUZk@pRwIP t1 pattern tumorigenic high -diFL@LANRYufjf@H t1 pattern tumorigenic high -gGU@E`dkMTAad[rP t1 pattern tumorigenic high -dayH`Dr@|Djyfjh@` t1 pattern tumorigenic high -gNtDLpDHHR[UjhB t1 pattern tumorigenic high -gJXDL@aABS[TA``nKD t1 pattern tumorigenic high -fHe`Aa@ t1 pattern tumorigenic high -gJQ@@drt`XI[dH t1 pattern tumorigenic high -did@@DjU^nBBD@LNaLJfGd\ t1 pattern tumorigenic high -difH@FAIYU[fZj`CBlJnGdP t1 pattern tumorigenic high -gJ]@HbDfZdB t1 pattern tumorigenic high -die@@@EJf[XZjj`CChSBiny@` t1 pattern tumorigenic high -dk^@@@RYWYVftx@H@@@H t1 pattern tumorigenic high -eFA@H`bLFE\` t1 pattern tumorigenic high -deTH@@RYWZf`@j@CC`SBhYyG@ t1 pattern tumorigenic high -gOu@JpeJymUTA@ t1 pattern tumorigenic high -dcN`@@pjYJYenk`Hbj@B t1 pattern tumorigenic high -dmu@@@QIUYVUZh@@@pdDpfxYWdP t1 pattern tumorigenic high -dmvH@NAIfUTUZBB@@p[BiaWdR t1 pattern tumorigenic high -dkmH@NtDfYU_EZ``b`@` t1 pattern tumorigenic high -dkmH@JTDeVVutvjh@@@` t1 pattern tumorigenic high -dieH@DHLbbbaIjZjPB t1 pattern tumorigenic high -fHaXA@ t1 pattern tumorigenic high -fHbHAa@ t1 pattern tumorigenic high -fHdXA@ t1 pattern tumorigenic high -foA@R@HHpx@QddebRfRpiFlm@@@P@A@ t1 pattern tumorigenic high -f`i@@@LdbbRRlRSI\D{qAHT@D@@P t1 pattern tumorigenic high -gNq`@VdsMUPFCDQkyL t1 pattern tumorigenic high -flmA@@@YEEHdcLdddSdmV]EKUUSU@E@@D t1 pattern tumorigenic high -ffsA`@@YkdTTbRLrTrVRIrRkNbejjjj@Bfh@B t1 pattern tumorigenic high -daE@@@yIe^f`@`@pILJnHG@ t1 pattern tumorigenic high -feg@`@@SrJIJYYQQJQZqYTYzH\uUKMUUUUUPDLiVEPPQbgARtYw`qSdmV}gr@p t1 pattern tumorigenic high -dcMH@HdDf[W[ai@Bh@H t1 pattern tumorigenic high -fc@H@@JbdoU{RYfYU_uyYubc^\D\vi@H@BjjjhH@H t1 pattern tumorigenic high -fb}A@@@YEDeMDhTihjLUiwhyZZjjjjjh@LKHqPTeZMYpTyxcdP t1 pattern tumorigenic high -fnk@P@@FbuIefYZWz^`mA|gMVfjjjjjjj@B t1 pattern tumorigenic high -dmLH@@rJJIQEneX@@@@CA`iae^Ig@ t1 pattern tumorigenic high -fleA@@@YDddhiiDdYipTtsUUUSTABHe@ t1 pattern tumorigenic high -dk|@@LdbbbRQKauS`@`@`@H t1 pattern tumorigenic high -fjc@`@@ERYYefUez\UyvPiZZjjjjjj@CCrLTXJVcV]zJ\ey@H t1 pattern tumorigenic high -fjc@`@@JrJIJZJJUJZJcMF|EIVfjjjjjj`@` t1 pattern tumorigenic high -ffsA`@@VkdTRTtRabrTRhqQoARUijjijjjj@B t1 pattern tumorigenic high -die@@@aJyW[f@B@CBlJfGdP t1 pattern tumorigenic high -deT`@@`YRnUunX@I@B t1 pattern tumorigenic high -dmL@@DjYeVdU@@`@@H t1 pattern tumorigenic high -fgA`@@@YIEDeDUfJxHujjhHB`@LNPQbgIZxQbcV@ t1 pattern tumorigenic high -f`ia@@E@Rfume]gEF]z`@jjhh@H t1 pattern tumorigenic high -foQ`@@@YIEDeDTdpWEF]UUAAE@@P t1 pattern tumorigenic high -dcnH@EAJ[UU[ev`@jb@LFPje]xfB t1 pattern tumorigenic high -dcnH@MAJ[UU[ev`@jb@LFPjE]xfR t1 pattern tumorigenic high -fjc@`@@ErJIJZIPiSQJcEZ]zNVfjjjjjj`@p\cENBdkQkNBgODQJ t1 pattern tumorigenic high -fb}A@@@ILk[Kk\tyKSoQsUSUMUUUP@XN`cEFBdhugASgb@Q@ t1 pattern tumorigenic high -fb}@@@LdbbTbrNTtWEBt{t\sMUUUUUT@D t1 pattern tumorigenic high -dg\L@@{\dTrTRtKCPAET`A@ t1 pattern tumorigenic high -gOtHLPDISKWSU@XDJodH t1 pattern tumorigenic high -dknH@ECHhheLcFz@`jh@H t1 pattern tumorigenic high -gJP@DknhCCSGdP t1 pattern tumorigenic high -dcLh@LKaCIELeBhwT@ET@D t1 pattern tumorigenic high -dmv@@@RfUYyZBB`@LAALInF^IR` t1 pattern tumorigenic high -fgA@@@DjYU_VByHu`@@@@@@LIXISdeZM[dD@ t1 pattern tumorigenic high -didD@@yIfVXXBH@C@`[axfT t1 pattern tumorigenic high -gCa@@dmHFBVxa@ t1 pattern tumorigenic high -daxL`HS@\DjeZjh@` t1 pattern tumorigenic high -gNphH`xITkUTA@ t1 pattern tumorigenic high -daGH@Dp`RYeifjf@H t1 pattern tumorigenic high -dgH`LKU@HrQQSIJHyTgSA@qP@P t1 pattern tumorigenic high -dev@@@RfUJxZA@h@LFAB[iyE@ t1 pattern tumorigenic high -gOqHJ@aJUcZZhB t1 pattern tumorigenic high -daF@@@Rfu[j@@@LFALJfyG@ t1 pattern tumorigenic high -dieH@NDDfUvf`@d@H t1 pattern tumorigenic high -gFx`LDdrfmU@XHwdp t1 pattern tumorigenic high -gNuhJxl@cIIJej`H t1 pattern tumorigenic high -difD@JAdiWTjjjj@H t1 pattern tumorigenic high -gGT`DQTfuiaMXIWdp t1 pattern tumorigenic high -ffcAp@@DEiNZyEEEMDihbdiVBMzIViBb@@hh@@pTQVcV]ENZ` t1 pattern tumorigenic high -do^H@DAIeV}YZfifdLIFU` t1 pattern tumorigenic high -dgH@LiPRUYYWESnj@@@@@` t1 pattern tumorigenic high -foAQ`@DD@irSLwN~QakMUPHE@@XLpJVcNx`g@ t1 pattern tumorigenic high -dg}D@DHERYfywIcmjjA@`@p[AgSobEp t1 pattern tumorigenic high -dieD@DHNRY[Rijih@pSFybDH t1 pattern tumorigenic high -dg}D`Ad{BHRYVuUiev@BffH@pXDrmob\H t1 pattern tumorigenic high -foAPb@ARlxDPdrmkKtXht@EMSD@D t1 pattern tumorigenic high -dclD@@[HhheBeSKkTp@P@P t1 pattern tumorigenic high -dcNH@MAJ[WY[j@Bg@B t1 pattern tumorigenic high -f`qA@@@ISZzljscoT@Dp@@B@kARLDhsQkN}q@i@ t1 pattern tumorigenic high -fbmpB@NV|@HRfYe]WnirQmN@@@@bj`@@pt@cAJLxLTy@ t1 pattern tumorigenic high -dg}L@LhDWHheDbhdSG[UTtuHQu@ t1 pattern tumorigenic high -dmLH@@rJJIQEneX@@@@CC`rfFUyG@ t1 pattern tumorigenic high -fbmPb@FRTX@QdbdTjRtrbRps`dyjjjYh@J@@pLAAJ\e[pXisrF@ t1 pattern tumorigenic high -gJ]@EbDeVdCBKba@ t1 pattern tumorigenic high -dcl@@DjYU_egX@@@@@pELJae]xc\ t1 pattern tumorigenic high -gJP@Di[xCBGdp t1 pattern tumorigenic high -ffsA`@@IkdbfbTTTTRtwxkW`ecfjjBjHjJb@B t1 pattern tumorigenic high -gJYhMDPDYIBm@P t1 pattern tumorigenic high -dmM@@@iJYWWJxYB@j@CBbiiWdH t1 pattern tumorigenic high -daD@@DjYvxH`@CCLJnXc\ t1 pattern tumorigenic high -dg^@@@rQQQIIRcmAPTT@D t1 pattern tumorigenic high -diV@`J@HRfU|kahDB@CB`PfGd\ t1 pattern tumorigenic high -dmL``LXU@HRfvUxYV`HFH@pHDj^Ph t1 pattern tumorigenic high -gC`DADJHRZhCCBKdp t1 pattern tumorigenic high -dmtH@@RYWYih@Jh@LAALJnE^QH t1 pattern tumorigenic high -dmtH@@RYWUih@Jh@LNALJiWb\H t1 pattern tumorigenic high -deUD@DhFrJIJHusUMT@XDf]OHD t1 pattern tumorigenic high -dg}@@@aJVYU^Svv`@@@@`K@Z[ae]ObEX t1 pattern tumorigenic high -dmwH@DePRUe]xV`@d@H t1 pattern tumorigenic high -dcO@@@b\dtTRJgBpDEP@P t1 pattern tumorigenic high -daD@@DjYvxH`@C@linxbD t1 pattern tumorigenic high -gJX`BDdru@XS\a@ t1 pattern tumorigenic high -die@@@aJyW[f@B@C@lJfxdB t1 pattern tumorigenic high -did@`@bDfYUn`HH@LFCBiayG@ t1 pattern tumorigenic high -foAPB@NBADILkjrmFV]@AL@@@ar` t1 pattern tumorigenic high -deUH@BxLbbbRKCA@d@D t1 pattern tumorigenic high -dk}@@@iJUmUR[atpBJ@@@CChPiWSyE@ t1 pattern tumorigenic high -deUD`LjD@HrREQICJt@@@XUc\L|`@ t1 pattern tumorigenic high -dmuD`IVD@HrRFIKKaV@BP@` t1 pattern tumorigenic high -dmtD`ATIAIe]Vf`@jP@pILJnIt` t1 pattern tumorigenic high -gGP`@deUjpLI^JX t1 pattern tumorigenic high -dmvD@LADfvUYUjjj`B t1 pattern tumorigenic high -dcND`MEPdDfUuZf`@jX@H t1 pattern tumorigenic high -fjc@`@@HRUe[Vun^Bt[pTeZ@Bjjjhj@CBqJ\dkQkN}GI^H`d t1 pattern tumorigenic high -fnk@`@@HRYVum[VydjshiJuj`@jjjjJ`@` t1 pattern tumorigenic high -fa{@P@@HkwHdhdididihdUpVc^BdkP@UUUUTeP@P t1 pattern tumorigenic high -fjcAB@C@bLbbbRdRbLJbXJUoQRVejjfjjjh@LG@pQ`iJuYpXyKrBP t1 pattern tumorigenic high -fb}A@@@ILk[Kk\tyKSoQruSUUUUUP@P t1 pattern tumorigenic high -fjcP@@@FrQQQQII[FIJgIVt{IP@@@``@@@@` t1 pattern tumorigenic high -daD@@DjUZxHH@CAL[ePaUp t1 pattern tumorigenic high -dcNH`BpHaI[fuWZZ`@@B t1 pattern tumorigenic high -dcND@DCdefV]]Z`b@@H t1 pattern tumorigenic high -gJQDD@b^BRkTA@ t1 pattern tumorigenic high -dg|@P@bEbLbbbTRRKR]pP@P@@D t1 pattern tumorigenic high -foA@A@@QChaIe]YWhpuh@J@B@@LE@Q`eIJtYwH\@ t1 pattern tumorigenic high -foA@@@DjYUgWfiF`XJbh`@` t1 pattern tumorigenic high -deTL`HS@BLddlRPrm@@@FETwCOHp t1 pattern tumorigenic high -gOx@@eLmXD@A`Uc^Q` t1 pattern tumorigenic high -dclD@@EJY}erevfVfiBJX t1 pattern tumorigenic high -dcNH@DAIge]FVh@I@B t1 pattern tumorigenic high -foA`@@@ILkjrmFV]@AL@@@arptcAJ\DkQkNy@@ t1 pattern tumorigenic high -f`qqa@FF}Sf`RBICHiMEMCEmPUgUUUSKT@D t1 pattern tumorigenic high -dg}@@@aJVYU^Svv`@@@@`K@Rine]obBX t1 pattern tumorigenic high -dg}@@@aJyeg_eNvB@@@@B t1 pattern tumorigenic high -dmND@LAdige\jUifZi@H t1 pattern tumorigenic high -gKP@H~Jj`LEcqQ@ t1 pattern tumorigenic high -didD@@QIenifjj`B t1 pattern tumorigenic high -dklD@@QIVVU}MjlH@@H t1 pattern tumorigenic high -f`q@`@@HRUfYU_Sk^Zh@@@@@H t1 pattern tumorigenic high -deVD@BADfVuFVh@@@` t1 pattern tumorigenic high -dmwH@HePRYm]xZ`@d@H t1 pattern tumorigenic high -f`qP@@@^RYWUe^cKN`@f@B@DNT t1 pattern tumorigenic high -ffsA`@@VkdTRTtRabrTRhqQoARUiZjijjjj@CArLTxJRcN}GIZ|`d t1 pattern tumorigenic high -gNy`DBtf]Zi@` t1 pattern tumorigenic high -deV@pJBPRPrPrJPqICMT@@@^DwCH t1 pattern tumorigenic high -faw@@@LdbbbbbbeeRRwMB]Jq`y[Wh@@@@@@@@@@A@ t1 pattern tumorigenic high -dmN@@@rQQJJFfEP@@`@B t1 pattern tumorigenic high -dmN@@@RfV_kad@@B@@` t1 pattern tumorigenic high -dco@@@g\dTRbtM\J`@AB@A@ t1 pattern tumorigenic high -fdep@@@PheL}sJkxiXOhsUP@@@`@D t1 pattern tumorigenic high -fhiP@@@ARVUue]Yrsn@B`@l@@` t1 pattern tumorigenic high -dcn@@@RfV]zXU@@BD@CCdJnFUyF` t1 pattern tumorigenic high -fbmP@@@IRfV]}e]hpR`q@@BF@B`@PUP t1 pattern tumorigenic high -deWH@DJ`RYYTfZij`B t1 pattern tumorigenic high -fb}@`@@YRYVum[ehrRkNBejfjjjjj`@` t1 pattern tumorigenic high -dk~H@NAJUmmRkatzVd@J@B t1 pattern tumorigenic high -dklD@@IIf]vVzB@jh@LICBkagSyB` t1 pattern tumorigenic high -fbuA@@@ISZ{Ll{lxgM@AMTD@@HBh t1 pattern tumorigenic high -daF@@@RYe[hB@@LBpj[bAp t1 pattern tumorigenic high -dco@@@bdigyWJWYj`@P@pYLKawbRh t1 pattern tumorigenic high -daGD@Bi`QInUnZZX@` t1 pattern tumorigenic high -dkmD@DpJRY{e]]Zf@B@B t1 pattern tumorigenic high -daDH@@RZW[jii@H t1 pattern tumorigenic high -dazL`FaL@HrRRiKUPA`VEW\a` t1 pattern tumorigenic high -daG@@@[diWRh@I@C@hSByG@ t1 pattern tumorigenic high -digH`LJn@HRf_ljfYh@ppBGdH t1 pattern tumorigenic high -dmL@`@bLbbbTQ[iV@@@@@` t1 pattern tumorigenic high -deVD@DCdfV[hVjfh@piJXYyF@ t1 pattern tumorigenic high -daDH@@RYe[hB@@LJCBinQp t1 pattern tumorigenic high -foAPR@JLIIS`UbSLzmnsakTmTuUP@X\Ab`mV]rA` t1 pattern tumorigenic high -dcmH@NDLbbbTVKCJm@dE@A@ t1 pattern tumorigenic high -dg~H@FAIfU{TYNz``@@@B t1 pattern tumorigenic high -dklF@@sittieY_hZjjjh@pfBinF]ObHh t1 pattern tumorigenic high -dcLH@@RfUWnf``R`@pyBinW^Id` t1 pattern tumorigenic high -do|H@@rQQIIZHkihHDjd@H t1 pattern tumorigenic high -do~L`MaL@HrRPjIIKISVhHHh@H t1 pattern tumorigenic high -dg]LPElYLHc`cHhdliBiSP@Rtp@XLBXUKrK@ t1 pattern tumorigenic high -dcNH`LdHaIUe[EZh@b@B t1 pattern tumorigenic high -dk|H@@RfYU_JGUN`@@B@@pxfzUt~PH t1 pattern tumorigenic high -dklH`I@HRYeuin`HJj@B t1 pattern tumorigenic high -fdyQR@FJtZwh`BLdTbbJTRlvF\eUUULsU@AaHBLDiqQ`|aD t1 pattern tumorigenic high -dmu@pNTIAICICHiCDeafj@B@CAJ[bBh t1 pattern tumorigenic high -dkmHpNTpdDdLdLbdLRRrFZh@JP@` t1 pattern tumorigenic high -dkoL`LhXPpBLdaTRbQeUhBBP@` t1 pattern tumorigenic high -fdy`a@BRlBHcDYEEDehXhlfB|FBBFB@`@B t1 pattern tumorigenic high -fb}A@@@YEDeMDhTihjLUiwhyZZjjjjjd@H t1 pattern tumorigenic high -dco@@@rldTRTJU\naA@@@A`Prn|qLX t1 pattern tumorigenic high -f`qA@@@IMKMjoiuoUV@@@@@D t1 pattern tumorigenic high -flm`@@@YHhhhhdhb]RRkFCzH@@@@@P@@D t1 pattern tumorigenic high -dg\L`AWPbDfUv{ZZ@Bij@B t1 pattern tumorigenic high -dg|H`KBHRYWYWimN@B@B@@` t1 pattern tumorigenic high -daF@@@RYVih@H@LBSJ{b@p t1 pattern tumorigenic high -deTD@@QIVYQehB@@LBinGbQH t1 pattern tumorigenic high -deTD`NDHaIfVVfBA`@LJCJX^QH t1 pattern tumorigenic high -eMhDRZCAKd` t1 pattern tumorigenic high -deU@@@cIMDeBwL@E@A@ t1 pattern tumorigenic high -daG@`D[`bDfUZZ@B@CA@sbEp t1 pattern tumorigenic high -dcMDPDy]BHXHRYV}jz@Hi`@` t1 pattern tumorigenic high -dmt@@DjYZVTHbh@CBdxYWfES@ t1 pattern tumorigenic high -dev@@@Re[TjFP@@@@LFaFxYyA@ t1 pattern tumorigenic high -gOpHADILkW@@@XHWaVK@ t1 pattern tumorigenic high -dmv@HBBHFPfPVPRYUzih@Jh@H t1 pattern tumorigenic high -fhy@`@@\RYee~uYrVoAZA``@H@@pI`uo\YPTmNB t1 pattern tumorigenic high -dk\L@@{\bbbTQr[iUhF@j@CALOaTpr t1 pattern tumorigenic high -foA@P@@\ekHhheECEf\TYhFHbh@B t1 pattern tumorigenic high -foA@P@@\d[HhheELiVRUYhFHhh@CCFMNyabk@ t1 pattern tumorigenic high -foA@P@@\T[HhheDXef\eihFBJh@B t1 pattern tumorigenic high -fj}@P@@\tEIfVWnU]YrQdeZA`hB`b@@H t1 pattern tumorigenic high -fj}@P@@\ueIfVWn]}YrQhiZA`hB@j@@H t1 pattern tumorigenic high -fj}@P@@\MeIfVWVu}YrVhiZA`bB@j@@H t1 pattern tumorigenic high -dmL@@DjYUVGi@@@`@LFrnFUxbD t1 pattern tumorigenic high -dclH@@RfumVy]h@@@@CCdpfE]yD` t1 pattern tumorigenic high -dmMH@HxLbbbTQ[iV@@@@@` t1 pattern tumorigenic high -deVH@HCHiEBdLuP@@A@ t1 pattern tumorigenic high -foA@b@HH@DYIHXeEhbkUgKPP@@@@P t1 pattern tumorigenic high -gJU@LPdjt`XQ\TH t1 pattern tumorigenic high -deUH@JDDinUzZBA@@` t1 pattern tumorigenic high -dclD@@IJ]YWaIVj`@h@H t1 pattern tumorigenic high -gNpXHlQxIUZuTAaGqF` t1 pattern tumorigenic high -diDB`HSBCpRjuVji@H t1 pattern tumorigenic high -f`a`R@LPP{p@cIIBhddbhhruAADp@F@jLxJRm^yC@ t1 pattern tumorigenic high -dk]@`FD@aJY}e\kSif`@`@` t1 pattern tumorigenic high -foA@B@@QBRsLjnjqgSP@@@@@P t1 pattern tumorigenic high -dmtH`IBHRUe]xY`@hBH\F@j[exdH t1 pattern tumorigenic high -fhiAB@O@bDfYUg_QZlzdH@@J@DDL t1 pattern tumorigenic high -fhi@`@@HRYyWVUEKpVh@J@@@@pebcNBMYwnHTD t1 pattern tumorigenic high -fjm@P@@HceIge]YWVEKpVh@J@Bf@@H t1 pattern tumorigenic high -dmt@@DkYV~Gh@J@B t1 pattern tumorigenic high -fjm@h@@XDkSoQRWIEEDhdicDXZRcfjjjjjjj@CBLDDhs`iJtYw`irWdK@ t1 pattern tumorigenic high -fleab@OPQD@QddabbRRvrbkF\m@@@EL@@XJhs`iJt[r^P\ t1 pattern tumorigenic high -fbuQb@OA`aH@cIICEDdelehjqgKP@@ATp@A@ t1 pattern tumorigenic high -dkld`LWSa@BLddlRVRFUh@JP@` t1 pattern tumorigenic high -dg}H`AfpbDfUmYZYS`@ijR@LJALh~Iv` t1 pattern tumorigenic high -eFJHSHp^I@ t1 pattern tumorigenic high -gOpH@fILkW@@@P t1 pattern tumorigenic high -gJPhI`fIKTpD t1 pattern tumorigenic high -daE@@@aJyUnX@@@ppj{fQc@ t1 pattern tumorigenic high -dmvDPLa@BNdLddlTVeUhH@@LBqagdJ t1 pattern tumorigenic high -dcnH@LCIEDUDeeKmLuUT@P t1 pattern tumorigenic high -daFD@LADfyVyjj`C@binyB@ t1 pattern tumorigenic high -dcnD@BCTfYVuiEX@@B@@` t1 pattern tumorigenic high -gC`LADJPt`duPFDGI@ t1 pattern tumorigenic high -eMACDXaIhH t1 pattern tumorigenic high -eMACD\QIhH t1 pattern tumorigenic high -eMBBlRZCAKd` t1 pattern tumorigenic high -eFJHAHhP t1 pattern tumorigenic high -eM`AIdLF^P t1 pattern tumorigenic high -fHbXAa@ t1 pattern tumorigenic high -eMBCDRZCAGe@ t1 pattern tumorigenic high -gJQdEbOBRD_M@P t1 pattern tumorigenic high -gChHHDQIj`H t1 pattern tumorigenic high -daD@@DjUZxHD@@ m3 mol mutagenic high -daD@@DjUZxHH@@ m3 mol mutagenic high -daD@@DjWzXHB@@ m3 mol mutagenic high -daD@P@bBbDfYvzB@@@ m3 mol mutagenic high -daD@P@bFbDfUjz@H@@ m3 mol mutagenic high -daD@P@bNbDfUzZ@B@@ m3 mol mutagenic high -daD@P@qFbDfUjz@H@@ m3 mol mutagenic high -daD@P@qNbDfUzZ@B@@ m3 mol mutagenic high -daD@P@qNqDfUzZ@B@@ m3 mol mutagenic high -daD@`@bDfUzZ@B@@ m3 mol mutagenic high -daD@`@qDeeVz`@@@ m3 mol mutagenic high -daDB`HSJCprRRsTsUU@@ m3 mol mutagenic high -daDD@@IIf]nZYX@@ m3 mol mutagenic high -daDD@@IIf]nZZh@@ m3 mol mutagenic high -daDD@@IIf]n``@@@ m3 mol mutagenic high -daDD@@IIf^fZfh@@ m3 mol mutagenic high -daDD@@IIfunZfd@@ m3 mol mutagenic high -daDD@@QIeUnZjh@@ m3 mol mutagenic high -daDD@@YIeZn`B@@@ m3 mol mutagenic high -daDD@@qJYfnjjh@@ m3 mol mutagenic high -daDD@@yIe^fZVX@@ m3 mol mutagenic high -daDD@@yIe^f`@`@@ m3 mol mutagenic high -daDH@@RVU[f@@@@ m3 mol mutagenic high -daDH@@RVU[j@@@@ m3 mol mutagenic high -daDH@@RYVih@H@@ m3 mol mutagenic high -daDH@@RYWih@H@@ m3 mol mutagenic high -daDH@@RYe[hB@@@ m3 mol mutagenic high -daDH@@Rfu[j@@@@ m3 mol mutagenic high -daDH`BBHRYg[jfj@@ m3 mol mutagenic high -daDL@@PdfyVyjZP@ m3 mol mutagenic high -daD``DJnBHrJIPeUMV`@ m3 mol mutagenic high -daE@@@IIf]n``@@@ m3 mol mutagenic high -daE@@@YIeZn`B@@@ m3 mol mutagenic high -daE@@@YJYVf@``@@ m3 mol mutagenic high -daE@@@YJY^f@``@@ m3 mol mutagenic high -daE@@@aJyUnh@@@@ m3 mol mutagenic high -daE@@@yIe^f`@`@@ m3 mol mutagenic high -daE@@@yJYfn@b@@@ m3 mol mutagenic high -daED@DHNRYWifif@@ m3 mol mutagenic high -daED@DXNRYUifej@@ m3 mol mutagenic high -daED@DpFRYVkfjY@@ m3 mol mutagenic high -daEH@DpDfYbijj`@ m3 mol mutagenic high -daEH`Bk`bDfUzZZY`@ m3 mol mutagenic high -daF@@@RVU[n@@@@ m3 mol mutagenic high -daF@@@RYWih@H@@ m3 mol mutagenic high -daF@@@RYe[hB@@@ m3 mol mutagenic high -daF@@@RfYk`H`@@ m3 mol mutagenic high -daF@@@Rfu[j@@@@ m3 mol mutagenic high -daF@@@rQQHtpDD@@ m3 mol mutagenic high -daF@`BBHRYg[hH@@@ m3 mol mutagenic high -daF@`FBHRYVkh@`@@ m3 mol mutagenic high -daF@`JBHRVU[j@@@@ m3 mol mutagenic high -daF@`L@HRf^rjjj@@ m3 mol mutagenic high -daF@`L@HRf_rjjj@@ m3 mol mutagenic high -daF@`N@HRYWih@H@@ m3 mol mutagenic high -daF@`NBHRYWih@H@@ m3 mol mutagenic high -daF@`NBPRYWih@H@@ m3 mol mutagenic high -daF@`NBlRYWih@H@@ m3 mol mutagenic high -daF@`NCDRYWih@H@@ m3 mol mutagenic high -daFD@BADfyVyjj`@ m3 mol mutagenic high -daFD@F@dfYvzB@@@ m3 mol mutagenic high -daFD@LADfVZYjj`@ m3 mol mutagenic high -daFH@BAIf]n``@@@ m3 mol mutagenic high -daFH@BAIfunZfd@@ m3 mol mutagenic high -daFH@DAIeUnZjh@@ m3 mol mutagenic high -daFH@FAIeZn`B@@@ m3 mol mutagenic high -daFH@HAIYUnfjh@@ m3 mol mutagenic high -daFH@HAIYUnh@@@@ m3 mol mutagenic high -daFH@HAIYUnjjh@@ m3 mol mutagenic high -daFH@JAIYVfiih@@ m3 mol mutagenic high -daFH@JAJUtjjjh@@ m3 mol mutagenic high -daFH@LAIYfnjZd@@ m3 mol mutagenic high -daFH@NAJYfnjjh@@ m3 mol mutagenic high -daFHPBxHa@aIeTjijX@@ m3 mol mutagenic high -daG@@@kdig|jVj`@ m3 mol mutagenic high -daG@@@rdifvxH`@@ m3 mol mutagenic high -daG@`Bk`bDfUzZ@B@@ m3 mol mutagenic high -daG@`Dq`BDfUjyijP@ m3 mol mutagenic high -daGD@Dp`yIeVfZiX@@ m3 mol mutagenic high -daGH@Dq`RYVkffi@@ m3 mol mutagenic high -daTD@@iJUfDifzjjj@@ m3 mol mutagenic high -daTH@@ReYaBinjjj`@ m3 mol mutagenic high -dadH`DBHRZuSFzjjh@@ m3 mol mutagenic high -dag@@@adie\infjf@@ m3 mol mutagenic high -dax@@Dj~fjh@@ m3 mol mutagenic high -dax@@DkU^jh@@ m3 mol mutagenic high -dax@@LddUeUT@@ m3 mol mutagenic high -daxB@@QnR[VZY`cD m3 mol mutagenic high -daxB@@QnR[VZY`cH m3 mol mutagenic high -daxB@@QnR[VZi`@ m3 mol mutagenic high -daxBPLinBHKpRUZjf`@ m3 mol mutagenic high -daxB`HSBCpRjuZj`@ m3 mol mutagenic high -daxD@@QIeejZ@@ m3 mol mutagenic high -daxD@@QImUifALj` m3 mol mutagenic high -daxD@@QImUjj@@ m3 mol mutagenic high -daxD@@YIgYjf@@ m3 mol mutagenic high -daxD@@iIUmfjBD` m3 mol mutagenic high -daxD@@iJU^jj@@ m3 mol mutagenic high -daxD@@yIUUfYADb` m3 mol mutagenic high -daxD@@yIUUfZADb` m3 mol mutagenic high -daxDPFxLPlQIf^ZjBH` m3 mol mutagenic high -daxDPLHHb@aI[Vfj@@ m3 mol mutagenic high -daxDPLh@c`aI[njj@@ m3 mol mutagenic high -daxD`LhLQIUnjZ@@ m3 mol mutagenic high -daxH@@RUUYj`aH m3 mol mutagenic high -daxH@@RUUjj`@ m3 mol mutagenic high -daxH@@RV]Zj`@ m3 mol mutagenic high -daxJ`HSBxOCIILTuT`@ m3 mol mutagenic high -daxL@@cdiZZjh@@ m3 mol mutagenic high -daxLRJ[`bBBNyIUjjV@@ m3 mol mutagenic high -daxL`HS@BLddJruT@@ m3 mol mutagenic high -daxd@DpnAdf]ffXHr@ m3 mol mutagenic high -day@@@aJnZjj@@ m3 mol mutagenic high -day@@@yIYwjk@@ m3 mol mutagenic high -day@PFx@b@aJUVjj@@ m3 mol mutagenic high -day@`Dp@aIfYjj@@ m3 mol mutagenic high -dayD@DpFRYVZi`@ m3 mol mutagenic high -dayD@DxFR[VZy`@ m3 mol mutagenic high -dayD@HhNRV[ff`RDh m3 mol mutagenic high -dayH@DpDfUVjh@@ m3 mol mutagenic high -dayH@DpDfYfjh@@ m3 mol mutagenic high -dayH@DpDf]Vjh@@ m3 mol mutagenic high -dayL@DpFyIeUjj@@ m3 mol mutagenic high -dazD@BADf{fjh@@ m3 mol mutagenic high -dazD@LADf]Vjh@@ m3 mol mutagenic high -dazD@LADf^VihHJ@ m3 mol mutagenic high -dazD@LADf^fjh@@ m3 mol mutagenic high -dazD@NADf{Vfl@@ m3 mol mutagenic high -dazD`B[`BDe[jjX@@ m3 mol mutagenic high -dazL@BAFR[nZj`@ m3 mol mutagenic high -dazL@LANRYuZj`@ m3 mol mutagenic high -dazL`BaL@HrRPzKUP@@ m3 mol mutagenic high -da{DAJ[`Qi{dfuVjT@@ m3 mol mutagenic high -dcL@D@dDdJdFdAdIdEdMdLbdtbaa]UUUT@@ m3 mol mutagenic high -dcL@X@bBbFbAbEbMbDfYnijjjj@@ m3 mol mutagenic high -dcL@X@bBdFdAdEdMdDfYni`bHh@@ m3 mol mutagenic high -dcLB@@ImrJJJIH}KTsTp@@ m3 mol mutagenic high -dcLB@@P]R[e[^eh@b`@@ m3 mol mutagenic high -dcLB@@Q]R[e]nEh@I`@@ m3 mol mutagenic high -dcLB@@RUR[fVQuhHF@@@ m3 mol mutagenic high -dcLB@@R]rJYQIPbkT@Q@@@ m3 mol mutagenic high -dcLB@@RiRYyVQejjjh@@ m3 mol mutagenic high -dcLB@@SmR[YgYUjB@`@@ m3 mol mutagenic high -dcLB@@reRf[ujzjjjh@@ m3 mol mutagenic high -dcLB@@riRfY~Qfjjjh@@ m3 mol mutagenic high -dcLD@@IIf]z[hHBj@@ m3 mol mutagenic high -dcLD@@QIgVUWVj`@@@ m3 mol mutagenic high -dcLD@@QInUvxVfjf`@ m3 mol mutagenic high -dcLD@@cIMHhTmJuUUU@@ m3 mol mutagenic high -dcLD@@eJ[W[[j@Bk@@ m3 mol mutagenic high -dcLD@@iJ[g]xZB@f@bX m3 mol mutagenic high -dcLD@@iJ[g]xZB@i@@ m3 mol mutagenic high -dcLD@@kIEMDdcttDDT@@ m3 mol mutagenic high -dcLD@@uIfUe[ffZi`@ m3 mol mutagenic high -dcLD@@uIfUk[ffZi`@ m3 mol mutagenic high -dcLD@@uIfUk[hBBj@@ m3 mol mutagenic high -dcLD@@uIfYoXVfZi`@ m3 mol mutagenic high -dcLD@@uJ[WU[j@BZ@`X m3 mol mutagenic high -dcLDHFDH`haXcXaIf[ozYjYjP@ m3 mol mutagenic high -dcLF@@Rag\bbTVTILuSUT@@ m3 mol mutagenic high -dcLF@@RiWTfV[UnZjjj@@ m3 mol mutagenic high -dcLH@@RYeZvz@`j`@@ m3 mol mutagenic high -dcLH`ECDRUYWQff@B`HR@ m3 mol mutagenic high -dcLJ@@PUuInUgzV`BJ@@ m3 mol mutagenic high -dcLJB@PUuNR[eY~eijjh@@ m3 mol mutagenic high -dcLL@@GTf[VwiZ@Hh@@ m3 mol mutagenic high -dcLL@@STfyWWaZ@Bh@@ m3 mol mutagenic high -dcLL@@yTee[UaX@bh@@ m3 mol mutagenic high -dcLL`HS@BLddJfRtjmP@P@@ m3 mol mutagenic high -dcLLpLK`bEbMbDeeYunjjjj@@ m3 mol mutagenic high -dcL``Dpn@HRYueUujX@@HJ@ m3 mol mutagenic high -dcMB@DpIWTfeyYaZjeZ@@ m3 mol mutagenic high -dcMD@DhARYVUuujP`@HJ@ m3 mol mutagenic high -dcMD`LE]@HRV[]nEjiih@@ m3 mol mutagenic high -dcMH@DdLbbtRTHju@DP@@ m3 mol mutagenic high -dcMH@DpLbbbLRRzuT@@@@ m3 mol mutagenic high -dcMH`BuPBDf[U{aj@BX@@ m3 mol mutagenic high -dcML@DpByIf]vifjfj`@ m3 mol mutagenic high -dcM`@@pjY\dTTRrM\ADUP@@ m3 mol mutagenic high -dcN@`IBHRYWVjZ@Bj`@@ m3 mol mutagenic high -dcND@BADf{YU]Zj@@@@ m3 mol mutagenic high -dcND@FCTfUiffZjjj@@ m3 mol mutagenic high -dcND@HC\bbdTbKUUUT@@ m3 mol mutagenic high -dcND@N@dfY{UnZejj@@ m3 mol mutagenic high -dcNDPBePbMbDfYmoa`bAh@@ m3 mol mutagenic high -dcND`MIPbLbbbbQcSAAPp@@ m3 mol mutagenic high -dcNH@FAIe[mkh@bj@@ m3 mol mutagenic high -dcNH@IAIeYUifejZ`@ m3 mol mutagenic high -dcNH`Bp@aJY{UWZZjj`@ m3 mol mutagenic high -dcNH`BpLQI[VUWZZ`@@@ m3 mol mutagenic high -dcNJ@NCIWTify^ajjjj@@ m3 mol mutagenic high -dcNL@LAERYyeiuj@b@@@ m3 mol mutagenic high -dcNL@LAJRY{eUujh@@@@ m3 mol mutagenic high -dcNL@LAMrJYQIPcKT@E@@@ m3 mol mutagenic high -dcNL@M@aRYgWVzB@j`@@ m3 mol mutagenic high -dcNL@NB]RfyUZziZjh@@ m3 mol mutagenic high -dcO@@@rTie_ZnBBJh@@ m3 mol mutagenic high -dcOB@DrPY]RYV]jyjfid@@ m3 mol mutagenic high -dcOD@Ds`wHheELUPmMTra@p m3 mol mutagenic high -dc\D@@iJYeUqavUhJBbD@@ m3 mol mutagenic high -dc^H@AAJU[VaJZUijZjT@@ m3 mol mutagenic high -dcl@@DjYU_egX@@@@@@ m3 mol mutagenic high -dcl@@LdbbbRkRJ`@PD@@@ m3 mol mutagenic high -dclD@@QIe[WiiUjP@h@@ m3 mol mutagenic high -dclD@@UIfVW[iv@@B@@@ m3 mol mutagenic high -dclD@@UIfV][iv@@B@@@ m3 mol mutagenic high -dclD@@UIfV^XYv@@B@@@ m3 mol mutagenic high -dclD@@aJyegzUvjBHH@@ m3 mol mutagenic high -dclD@@iJYW]rnF``IhBI` m3 mol mutagenic high -dclD@@iJYW]rnF``JX@@ m3 mol mutagenic high -dclD@@iJYW]rnF``Jh@@ m3 mol mutagenic high -dclD@@uIfV_XYV@@@`@@ m3 mol mutagenic high -dclD@@wHhheEbprl@@A@@@ m3 mol mutagenic high -dclD`AtLQIe]miaf@Bjb@@ m3 mol mutagenic high -dclH@@rQSQJH|J{P@@@@@ m3 mol mutagenic high -dclL@@STfUmVfeVi@B`@@ m3 mol mutagenic high -dcl`@@`nReeWZY]@``@@@ m3 mol mutagenic high -dcl`@@i]RfYyvxU@hJhP@ m3 mol mutagenic high -dcl`@@jURfYwVxY@hFh`@ m3 mol mutagenic high -dcl`@@j]RfYuVxY@hJhP@ m3 mol mutagenic high -dcl`@@seRfUeZEnBAbh`@ m3 mol mutagenic high -dcll@DpYAmRYV]zzUZije`@ m3 mol mutagenic high -dcm@@@UJfUWyYvhJBH@@ m3 mol mutagenic high -dcm@@@YJYYwhUtH@@@@@ m3 mol mutagenic high -dcm@@@iJYeyravPhJH@@ m3 mol mutagenic high -dcm@@@qJY~Ureujh@H@@ m3 mol mutagenic high -dcm@@@uIe[UiiV@@@`@@ m3 mol mutagenic high -dcm@@@uJYU_rnf`Pbh@@ m3 mol mutagenic high -dcm@@@{IDeCDdUKh@UUB@@ m3 mol mutagenic high -dcm@@@{IDeCEDUSh@UUD@@ m3 mol mutagenic high -dcm@`LH@cIEDUDeeKmLp@P@@ m3 mol mutagenic high -dcmB@DpNE\bbbTRMBtmULmP@@ m3 mol mutagenic high -dcmD@hxEChgiWdfYYungX@@H@@@ m3 mol mutagenic high -dcmH`LJPBLdTTJTvTJtpAE@@@ m3 mol mutagenic high -dcmh@HqagPRVVY^E]fjVjPbH m3 mol mutagenic high -dcn@@@RVUmVy]x@@@@@ m3 mol mutagenic high -dcn@@@Re]eRi]@B@@@@ m3 mol mutagenic high -dcn@@@RfV]zE]B@@@@@ m3 mol mutagenic high -dcn@@@RfYW\hUhFBJ@@ m3 mol mutagenic high -dcn@@@rIQQJH|J{p@@@@@ m3 mol mutagenic high -dcn@@@rQQQIXyPkPLDT@@ m3 mol mutagenic high -dcn@PABPJPRYgUVy]``@@@@ m3 mol mutagenic high -dcn@PBBPZPrJJJIP}J{@D@@@@ m3 mol mutagenic high -dcn@PBBPvPRYe[VFU`@@H@@ m3 mol mutagenic high -dcn@PIBPJPRYfuvE]``@@@@ m3 mol mutagenic high -dcn@PNBHvHrJJIQGMtk@@@P@@ m3 mol mutagenic high -dcn@PNBPVPRYeeVF]`@@`@@ m3 mol mutagenic high -dcnD@D@TfUe^fWX@B@@@@ m3 mol mutagenic high -dcnDABCbgnrJJIQPll{@A@@@@ m3 mol mutagenic high -dcnH@AAIVYWXUvjP`H@@ m3 mol mutagenic high -dcnH@BAIfUnZQV@@@`@@ m3 mol mutagenic high -dcnH@HAIYVu[ev`@@@@@ m3 mol mutagenic high -dcnH@NAIYeUkiviBBH@@ m3 mol mutagenic high -dcnHAH@NbTfYYungX@@H@@@ m3 mol mutagenic high -dcnH`DDHaIe[gkev@@`@@@ m3 mol mutagenic high -dcnH`NtHaIfV]XYV@@@`@@ m3 mol mutagenic high -dcnH`NtLQIfV]XYV@@@`@@ m3 mol mutagenic high -dcnL@LAMRYUUrhYZh@h@@ m3 mol mutagenic high -dcnL`LaA@HrRPjIKTrzmPHD@@ m3 mol mutagenic high -dcnh@DkaTLbbTTRK\nmHTA@@@ m3 mol mutagenic high -dcnh@DkatDfVYengVjVjd@@ m3 mol mutagenic high -dco@@@JdeYUUnW^fh@@@@ m3 mol mutagenic high -dco@@@pdif]wJeVhHB`@@ m3 mol mutagenic high -dco@`FePbDfUmVnFX@ajH@@ m3 mol mutagenic high -dct@D@dBdFdNdAdIdEdMdDfYkjZjj`bH m3 mol mutagenic high -dctB@@I]rJJJIVMRuLDE@ m3 mol mutagenic high -dctB@@PYRYU{ViijBBP m3 mol mutagenic high -dctB@@PYRYU{ViijBB` m3 mol mutagenic high -dctB@@PnR[kfVjjj@@ m3 mol mutagenic high -dctD@@QIeUUZijhHj@ m3 mol mutagenic high -dctD@@QImUUZjjh@@ m3 mol mutagenic high -dctF@@IaWTfYn~jjj`@ m3 mol mutagenic high -dctF@@rngTen{mjjj`@ m3 mol mutagenic high -dctH@@RUUUZjjj@@ m3 mol mutagenic high -dctHxJBPRPrPFPfPVPvPrJPqJQUUUT@@ m3 mol mutagenic high -dctd@BE]ADf{UYjji`@ m3 mol mutagenic high -dctl@BE]ANR[mUfjjf@@ m3 mol mutagenic high -dcu@HLd@a@```PcHheDYhuUMP@@ m3 mol mutagenic high -dcuD@LTIrQPiIQTuUL@@ m3 mol mutagenic high -dcuDPBwaBPRPrJZSQEUUMT@@ m3 mol mutagenic high -dcvDBAAAeIeUzZjjh@@ m3 mol mutagenic high -dcvJ@BAIWTfuiUjjj`@ m3 mol mutagenic high -dcvJ@LBngTen{mjjj`@ m3 mol mutagenic high -dcwLaNWXS@|Eg^rRSIIHmUUJ@@ m3 mol mutagenic high -dc~D@JCldRTTRLHp|J{PA@@P@@ m3 mol mutagenic high -deL@@Di[ernDYZjij@@ m3 mol mutagenic high -deL@@DjYeIjGijjjj@@ m3 mol mutagenic high -deLD@@eJUUXSaFZjjj`@ m3 mol mutagenic high -deT@@DjUYk``R`@@ m3 mol mutagenic high -deT@@DjWvifjih@@ m3 mol mutagenic high -deT@@DjYUXPbDP@@ m3 mol mutagenic high -deT@h@bBbFbAbIbDfYokjYjh@@ m3 mol mutagenic high -deTB@@IaRYf{aZfj`@ m3 mol mutagenic high -deTB@@KiRYg]nZej`@ m3 mol mutagenic high -deTD@@EIYWVy`@h@@ m3 mol mutagenic high -deTD@@EIfUVz@`h@@ m3 mol mutagenic high -deTD@@EIfUvz@`h@@ m3 mol mutagenic high -deTD@@EJYU^f```@@ m3 mol mutagenic high -deTD@@QIUeQej@@@@ m3 mol mutagenic high -deTD@@YIfUqehD@@@ m3 mol mutagenic high -deTD@@eIfWVyiff@@ m3 mol mutagenic high -deTD@@gHhhhjpmLtp@@ m3 mol mutagenic high -deTD@@iIYe^e```@@ m3 mol mutagenic high -deTD@@yIYVvE`BH@@ m3 mol mutagenic high -deTDPAdH`haIf]VzB@h@@ m3 mol mutagenic high -deTDPBDHbXaIf]VzeiZ@@ m3 mol mutagenic high -deTD`AdHaIe[jz@HX@@ m3 mol mutagenic high -deTD`AdHaIe]jZ@BX@@ m3 mol mutagenic high -deTD`NDHaIfVVfBA`@@ m3 mol mutagenic high -deTH@@RUYTYY`@@aH m3 mol mutagenic high -deTH@@RUYTYi`@@aH m3 mol mutagenic high -deTH@@RYVZfZZj`@ m3 mol mutagenic high -deTH@@rJJIHmtA@pD]@ m3 mol mutagenic high -deTH`IBHrJJJJlLADP@@ m3 mol mutagenic high -deTHpIBHJHZHrJJJX|LDPP@@ m3 mol mutagenic high -deTL@@FTfYW[ffZX@@ m3 mol mutagenic high -deTL@@FTf[eXVjjh@@ m3 mol mutagenic high -deTL@@KlbbbtK\uKU@@ m3 mol mutagenic high -deTL@@Qdf]eFVjfd@@ m3 mol mutagenic high -deTL@@QdfygFV``@@@ m3 mol mutagenic high -deTL@@RTfyWxV`@`@@ m3 mol mutagenic high -deTLB@QdyInYqehH@@@ m3 mol mutagenic high -deTL`BjPkDf[W[jjjh@@ m3 mol mutagenic high -deU@@@[IHhXlLuA@@@@ m3 mol mutagenic high -deU@@@aJnUqfhH@@@ m3 mol mutagenic high -deU@@@aJueQfj@@@@ m3 mol mutagenic high -deU@@@gIHhTmpu@A@@@ m3 mol mutagenic high -deU@PBdHchaIf^VFBBH@@ m3 mol mutagenic high -deU@`Dp@aIgeQej@@@@ m3 mol mutagenic high -deUB@DpFFTfUgkfjYX@@ m3 mol mutagenic high -deUD@DdBRY[TYZ`@@@ m3 mol mutagenic high -deUD@DhBRY[TYZ`@@@ m3 mol mutagenic high -deUD@DxBRY[TYZ`@@@ m3 mol mutagenic high -deUD@FdDR[VTYZZV`cH m3 mol mutagenic high -deUD@HDIRVUunfef`RKh m3 mol mutagenic high -deUDAHDIFY{HeEDcptAA@@@ m3 mol mutagenic high -deUD`DpY@HRYf|fZjj`@ m3 mol mutagenic high -deUH@AdDee][j@B`@@ m3 mol mutagenic high -deUH@AdLbbRaUM@AT@@ m3 mol mutagenic high -deUH@DDDfyVzV`B@@@ m3 mol mutagenic high -deUH@HpDenUFYh@@Ha@ m3 mol mutagenic high -deUH@JdDie_xZB@`@@ m3 mol mutagenic high -deUHBDxNeIgeQej@@@@ m3 mol mutagenic high -deUL@DpFgHhdhUWMTuH@@ m3 mol mutagenic high -deV@@@RVUenh@J@@ m3 mol mutagenic high -deV@@@RYfUa`Hb@@ m3 mol mutagenic high -deV@@@RYyTYj`@@@ m3 mol mutagenic high -deV@@@rRJEK\MP@P@@ m3 mol mutagenic high -deV@PNBHFHRYeYi``x@@ m3 mol mutagenic high -deV@`ABHRYVvf`@j@@ m3 mol mutagenic high -deV@`ABHRYWVf`@j@@ m3 mol mutagenic high -deV@`D@HRUYTYV`@@@ m3 mol mutagenic high -deV@`LADReyTYk`@@@ m3 mol mutagenic high -deVD@DCDenUFVh@@@@ m3 mol mutagenic high -deVD@FADfygFV``@@@ m3 mol mutagenic high -deVD@I@dfYw[hHB`@@ m3 mol mutagenic high -deVD@IADfyWxV`@`@@ m3 mol mutagenic high -deVD@LB\bTTQU]TuT`@ m3 mol mutagenic high -deVD@N@dfY{[fiZh@@ m3 mol mutagenic high -deVD@NADfyUxVfjh@@ m3 mol mutagenic high -deVH@AAIfuneh@`@@ m3 mol mutagenic high -deVH@AAJYWnf```@@ m3 mol mutagenic high -deVH@BAIemQfk@@@@ m3 mol mutagenic high -deVH@DAIgeQej@@@@ m3 mol mutagenic high -deVH@FAIe[jz@Hh@@ m3 mol mutagenic high -deVH@FAIe[zz@Hh@@ m3 mol mutagenic high -deVH@HAIYVVz`@h@@ m3 mol mutagenic high -deVH@HAJUmQfj@@@@ m3 mol mutagenic high -deVH@IAIeYZYiZf@@ m3 mol mutagenic high -deVH@IAIe]ZZ@Bl@@ m3 mol mutagenic high -deVH@IAJYW~F``H@@ m3 mol mutagenic high -deVH@NAIe]jZ@Bh@@ m3 mol mutagenic high -deVH@NCIELeBpt@Q@@@ m3 mol mutagenic high -deVHPNHHbXaIf^VFBBH@@ m3 mol mutagenic high -deV``Dqad@aIeYzyiji@@ m3 mol mutagenic high -deVh@DkadDfV[[ffZh@@ m3 mol mutagenic high -deW@@@kdigvriZjh@@ m3 mol mutagenic high -deW@PH[`bDbDfueFZjZd@@ m3 mol mutagenic high -deWH@DJPRY[TYZ`@@@ m3 mol mutagenic high -deWH@DZPR[e_aZ@B@@ m3 mol mutagenic high -ded@@DiUUjjj@@ m3 mol mutagenic high -ded@H@RnbAbIbDjUUjjj@@ m3 mol mutagenic high -dedB@@PYR[UYifXDrj@ m3 mol mutagenic high -dedB@@PYR[UYjjX@@ m3 mol mutagenic high -dedD@@QIeVVjjP@ m3 mol mutagenic high -dedD@@QImUVjj`@ m3 mol mutagenic high -dedD@@QInUvjj`@ m3 mol mutagenic high -dedD@@iIUmVZj`aH m3 mol mutagenic high -dedH@@RUUUfihDRY@ m3 mol mutagenic high -dedH@@RUUUfjhHR@ m3 mol mutagenic high -dedHXDBHjPZPzPFPfPRYZZjjh@@ m3 mol mutagenic high -dedJ@@IaeIf[zjj`@ m3 mol mutagenic high -dedJ@@rneI[nvjj`@ m3 mol mutagenic high -ded`@@iiReUvjjh@@ m3 mol mutagenic high -ded`PDqi@HDHRYuYjjX@@ m3 mol mutagenic high -deddABxYAAf^R[kujjT@@ m3 mol mutagenic high -deddABxYAAf^R[mUjjT@@ m3 mol mutagenic high -dee@HHxHaH`XbXaImUjjj`@ m3 mol mutagenic high -deeD@BdDR[mUjjh@@ m3 mol mutagenic high -deeD@BhIRUUUjZdHJ@ m3 mol mutagenic high -deeL@BdDEInufji`@ m3 mol mutagenic high -defB@BAAeInufji`@ m3 mol mutagenic high -defB@BANeInvvjf`@ m3 mol mutagenic high -defD`FFPBDiWnjjf@@ m3 mol mutagenic high -defD`FFPBDi]nijf@@ m3 mol mutagenic high -defJ@BAFFTfy^Zjf@@ m3 mol mutagenic high -defL@LAIRYuUjjh@@ m3 mol mutagenic high -deg@@@zTiUWjjj@@ m3 mol mutagenic high -det@@DjYUX^d@@@@@ m3 mol mutagenic high -det@@DjzYKaejjj`@ m3 mol mutagenic high -det`@@siRfUna[``ha@@ m3 mol mutagenic high -det`@@siRfUnnFP`bb@@ m3 mol mutagenic high -det``Dki@HRYYUnFVjVi@@ m3 mol mutagenic high -deu@@@[IEDhcSCH@@@@@ m3 mol mutagenic high -deu@@@kIEEDceCLaPD@@ m3 mol mutagenic high -deu@`Dp@aIeURhYfh@@@@ m3 mol mutagenic high -deu@`LH@cIEEBeeCML@D@@ m3 mol mutagenic high -deu`@@rfFTigmkadHHhP@ m3 mol mutagenic high -dev@@@RYyULFZh@H@@ m3 mol mutagenic high -dev@@@Re[TjFP@@@@@ m3 mol mutagenic high -dev@@@RfUWJzZABH@@ m3 mol mutagenic high -dev@@@rQQJHtpr@@@@@@ m3 mol mutagenic high -dev@PL@HPHRYUTjFVj@@@@ m3 mol mutagenic high -dev`@@raeJY{ZXYB@iH@@ m3 mol mutagenic high -devh@DJndDfVU[af@`hP@ m3 mol mutagenic high -devhADIadFf^R[fUnxVijY@@ m3 mol mutagenic high -dew@@@pldTTJVTLmP@P@@ m3 mol mutagenic high -dg\B@@ESrJJIIIFMsSMSM@@ m3 mol mutagenic high -dg\B@@Q[R[VUmgVf@HhBL` m3 mol mutagenic high -dg\B@@RSR[YVwEVh@bh@@ m3 mol mutagenic high -dg\B@@SSRY[W[FVh@Ih@@ m3 mol mutagenic high -dg\B@@i]RVYUuzVBBJh@@ m3 mol mutagenic high -dg\B@@kcrIQQQIGBkADQT@@ m3 mol mutagenic high -dg\B@@x{RYeewgV`hHh@@ m3 mol mutagenic high -dg\D@@cIMHhThYJuT@EP@@ m3 mol mutagenic high -dg\D@@eIfU_Un`HJj`@@ m3 mol mutagenic high -dg\D`ILIAIme[\Uf`BJ`@@ m3 mol mutagenic high -dg\H@@RYvYiVvfijjBL` m3 mol mutagenic high -dg\HpL@HcpPHRZUYwNvjhH@@@ m3 mol mutagenic high -dg\J@@PUMInUeWiZ@Hj`@@ m3 mol mutagenic high -dg\L@@H|bbbftbkBtsMUP@@ m3 mol mutagenic high -dg\L@@PdfVUZYmjBBh@@ m3 mol mutagenic high -dg\L@@k\dTtRRLwSPPQT`@@ m3 mol mutagenic high -dg\L@@yTimYvfF`BJj@@ m3 mol mutagenic high -dg\L`HS@BLddJrTRQvmUP@@@@ m3 mol mutagenic high -dg\L`NNpbDfUuijZ@Bjf@@ m3 mol mutagenic high -dg\``Dpi@HrJJJIRiG[UT`@@@ m3 mol mutagenic high -dg\dPHP{YPlmlldabbrV`suKRwP@@ m3 mol mutagenic high -dg\d`LF[a@BLddJbbQvfmPLA@@@ m3 mol mutagenic high -dg]B@HxEv|bTTRRTlgM@aQ@IBt@ m3 mol mutagenic high -dg]B@NTBNtfY}[fyjVjf`@ m3 mol mutagenic high -dg]BbInDp`BB{IICiEDUikUUMR@@ m3 mol mutagenic high -dg]DPCmaBHJHRYf{uzYjYj}@@ m3 mol mutagenic high -dg]HPAuPbBbDfYw[fzB@ij@@ m3 mol mutagenic high -dg]H`AuPbDfY_[fz@`ij@@ m3 mol mutagenic high -dg]L@DDBmIeye]SZjjjX@@ m3 mol mutagenic high -dg]L`FM]l@cIEEideCeTsUKT@@ m3 mol mutagenic high -dg]L`LVDL@cIIKDedhLkP@Tp@@ m3 mol mutagenic high -dg]L`LnDD@cIIBhhd]ikTC@P@@ m3 mol mutagenic high -dg^@pLCDDHWDRUeYWtzjjZi@@ m3 mol mutagenic high -dg^B@BAMoHiieDeBimU@DP@@ m3 mol mutagenic high -dg^D`EppbDenUuaff@Bf@@ m3 mol mutagenic high -dg^D`NEPbDfUv{jZ@Bij@@ m3 mol mutagenic high -dg^H@DCHhhhddYimTE@P@@ m3 mol mutagenic high -dg^L@NAarJJZJUQ]KSUMU@@ m3 mol mutagenic high -dg^h@BzSlDf^[WUvjiif`cT m3 mol mutagenic high -dg_B@DhpK[RY[U{FVh@Ih@@ m3 mol mutagenic high -dglB@@Q]RYUumZjjZ`@ m3 mol mutagenic high -dglD@@QImUUUjjjj@@ m3 mol mutagenic high -dglD@@uIUUUmfYfj@dRVQP m3 mol mutagenic high -dglFPHkivpqLqDen{nzjjjh@@ m3 mol mutagenic high -dglLpDp`BH|MBLbdRRRQSUUUT@@ m3 mol mutagenic high -dgl`@@`fRefUWejjj`RIH m3 mol mutagenic high -dgl`@@z[ReU]Ujjjj`@ m3 mol mutagenic high -dgm@hNdHR@a@a``PaJeynzjfZj@@ m3 mol mutagenic high -dgmBPFE]NpQHQDiUf{jjjfX@@ m3 mol mutagenic high -dgmL@DdAuInUg]jjZj@@ m3 mol mutagenic high -dgmL`DVCl@cIICDmihmUUS@@ m3 mol mutagenic high -dgm`PFy]NpBHBDiUUYjjjfX@@ m3 mol mutagenic high -dgnD@KADfuUUVjjjh@@ m3 mol mutagenic high -dgnD`H[`BLdTRbJRUUMUT@@ m3 mol mutagenic high -dgnDpKXpbBBJBDfzUUijjjX@@ m3 mol mutagenic high -dgnLPFe]CDpHRUVV[jjif`@ m3 mol mutagenic high -dgnL`Fe]@HRevV[ijif`@ m3 mol mutagenic high -dg|@@DjU_eZx{BAH@@BJ` m3 mol mutagenic high -dg|@@Dke]eVx{x@H@@@@ m3 mol mutagenic high -dg|@P@bBbDfYweVx{``H@@@@ m3 mol mutagenic high -dg|@P@bKbDfUvUz[S`@`@`@@ m3 mol mutagenic high -dg|A@@cJz]mJ{n{nDpjjjjj`@ m3 mol mutagenic high -dg|A@@rae]oIEEDieFpr]UUUUP@@ m3 mol mutagenic high -dg|A@@rfE]oIEEhYiCBJ]UUUUP@@ m3 mol mutagenic high -dg|B@@KSRYfuVXUmjP`X`@@ m3 mol mutagenic high -dg|D@@MIfV]UivviP`R@@ m3 mol mutagenic high -dg|D@@MIfV]UivxH@@`@@ m3 mol mutagenic high -dg|D@@SHhmEDhcJg[T@@@@@@ m3 mol mutagenic high -dg|D@@WHhheEhbtg\D@D@@@@ m3 mol mutagenic high -dg|D@@mIe]e^ftvefef`@ m3 mol mutagenic high -dg|D@@mIe]e^ftx@H@H@@ m3 mol mutagenic high -dg|F@@RaW\bbTbfbi]WMUUMU@@ m3 mol mutagenic high -dg|H@@RVUvU[cn`@`@@@@ m3 mol mutagenic high -dg|H@@RVYYwySn``@@@@@ m3 mol mutagenic high -dg|H@@RYfUWd}mh@@@@@@ m3 mol mutagenic high -dg|H@@RfYU[GUn`@@H@@@ m3 mol mutagenic high -dg|J@@RiWHheHmDTWUsUUMUP@@ m3 mol mutagenic high -dg|L@@HtfYnUvG[ZdJAH@@ m3 mol mutagenic high -dg|L@@Pdf{UeRh{Zjh@H@@ m3 mol mutagenic high -dg|L@@t|bbbbbJcBmm@tCD@@ m3 mol mutagenic high -dg|d@Dq]@\bbbbfJSSimUSTs@@ m3 mol mutagenic high -dg|h@DqnAIe[UTYNvjZ`@@@ m3 mol mutagenic high -dg}@@@OIEEEDTmWSh@PDT@@@ m3 mol mutagenic high -dg}@@@aJVYU^Svv`@@@@`H m3 mol mutagenic high -dg}@@@aJVYU^Svz`@@@@@ m3 mol mutagenic high -dg}@@@aJnYU^Svz`@@@@@ m3 mol mutagenic high -dg}@A@LINTjWvUz[SB@`@`@@ m3 mol mutagenic high -dg}D@DTBrJISQJHrivu@@@@@@ m3 mol mutagenic high -dg}D@DhBRY[VuFSmj@@@@@@ m3 mol mutagenic high -dg}D@LHNRfueWXSn`BB@@@@ m3 mol mutagenic high -dg}DPDp{@H`HRefUWd}njjjjh@@ m3 mol mutagenic high -dg}DPFES@H`HRenUVrnFijifX@@ m3 mol mutagenic high -dg}H@DdDfvUmQT{Z`@@@@@ m3 mol mutagenic high -dg}H@DlDfyVu~GSZ@@@`@@ m3 mol mutagenic high -dg}H@DxDf^YVyO[Z`@@@@@ m3 mol mutagenic high -dg}H@IlLdTrTraS]Jt@EMQ@@ m3 mol mutagenic high -dg}L`JXiTIAIf]VunNzVjZj`@ m3 mol mutagenic high -dg}L`JXiTIAIf^vunNzVjZj`@ m3 mol mutagenic high -dg~@`K@HRfYU_GUN`@@B@@@ m3 mol mutagenic high -dg~D@DCDenUmQd{Z`@@@@@ m3 mol mutagenic high -dg~D@EADfufUqT{ZZP`HBL` m3 mol mutagenic high -dg~H@DAIge[TYNvh@@@@@ m3 mol mutagenic high -dg~J@DBaW\bbTbfbi]WMUUMU@@ m3 mol mutagenic high -dg~L@B@SRYfU]Z]mjPhD`@@ m3 mol mutagenic high -dgD@L[`QIeyUTYNvjZ`@@@ m3 mol mutagenic high -dgH@DpprJJJJKJmJfuUUUT@@ m3 mol mutagenic high -diD@`@RdjeVjj`@ m3 mol mutagenic high -diD@x@bLBBdJdFdNdAdDeZjjj`@ m3 mol mutagenic high -diDB@@PaR[UVjj@@ m3 mol mutagenic high -diDB@@QaR[VvjY@@ m3 mol mutagenic high -diDBB@QaSdfumjj`@ m3 mol mutagenic high -diDD@@IIUZYjhHR@ m3 mol mutagenic high -diDD@@qJYWjjX@@ m3 mol mutagenic high -diDH@@RUUVZjBD` m3 mol mutagenic high -diDH@@RUUZjj@@ m3 mol mutagenic high -diDH@@RYWZjj@@ m3 mol mutagenic high -diDJHDpnDAbHbaahcIIJiIZe@@ m3 mol mutagenic high -diDL@@HTeUUffPQJh m3 mol mutagenic high -diDL@@IdfWUij`@ m3 mol mutagenic high -diDL@@PTfuUifPSJh m3 mol mutagenic high -diDL@@idiUVjj`@ m3 mol mutagenic high -diDL@@idiU^jj`@ m3 mol mutagenic high -diDNPHSB[a@XhXrRPzQZe`@ m3 mol mutagenic high -diDdAB[aANd^R[gVje@@ m3 mol mutagenic high -diDdAB[aANd^R[mVje@@ m3 mol mutagenic high -diED@BDDR[mVjj@@ m3 mol mutagenic high -diED@BXDR[mfjj@@ m3 mol mutagenic high -diED`Dka@HRU[fjf@@ m3 mol mutagenic high -diFB@BANEInvZjX@@ m3 mol mutagenic high -diFD@BADf{Ujj`@ m3 mol mutagenic high -diFD@BADf{Yjj`@ m3 mol mutagenic high -diFD@BADf{ejj`@ m3 mol mutagenic high -diFD@D@dfWUjj`@ m3 mol mutagenic high -diFD@LADf]Yjj`@ m3 mol mutagenic high -diFD`JxPBDivzji`@ m3 mol mutagenic high -diFD`JxPBLbdTljjX@@ m3 mol mutagenic high -diFD`JxPQDivzji`@ m3 mol mutagenic high -diFL@DBarJIQEjj`@ m3 mol mutagenic high -diFL@LAJRY{fjj@@ m3 mol mutagenic high -diF`@@SNGHhhcFjf@@ m3 mol mutagenic high -diFd@DpjDNrJJHqji`@ m3 mol mutagenic high -diGDAFxPSiGdf]UjiP@ m3 mol mutagenic high -diT@@DiUTjxVjih@@ m3 mol mutagenic high -diTH@@ReUxRfjef`@ m3 mol mutagenic high -diTH@@RfUXQajiV`@ m3 mol mutagenic high -diTH@@RfU|kahDB@@ m3 mol mutagenic high -diTL@@idfV^nxVfjh@@ m3 mol mutagenic high -diU@@@iJYWrnFP`H@@ m3 mol mutagenic high -diV@@@RfU|kadHB@@ m3 mol mutagenic high -diVH@BAIfUInFjZi@@ m3 mol mutagenic high -diVH@FAIfU[fFjjj@@ m3 mol mutagenic high -did@@DjUZnBAH@@ m3 mol mutagenic high -did@@DjU^nBAHBJ` m3 mol mutagenic high -did@@DjUfaBB`@@ m3 mol mutagenic high -did@@DjWffB@h@@ m3 mol mutagenic high -did@@DjYUaBHP@@ m3 mol mutagenic high -did@@DjYmaBH`@@ m3 mol mutagenic high -did@@DjY}nBHH@@ m3 mol mutagenic high -did@@LdbRQk``R@@ m3 mol mutagenic high -did@@LdbRQk``b@@ m3 mol mutagenic high -did@@LdbbQxXF@@@ m3 mol mutagenic high -did@H@bBbFbAbDfYnnifj@@ m3 mol mutagenic high -did@p@bBbFbDfYoa`b@@@ m3 mol mutagenic high -didD@@EIYW[f@B@@ m3 mol mutagenic high -didD@@EIe]ih@J@@ m3 mol mutagenic high -didD@@EIfU[ffiP@ m3 mol mutagenic high -didD@@EIfU[hBB@@ m3 mol mutagenic high -didD@@GHhhdVyifX@@ m3 mol mutagenic high -didD@@IIf][hHB@@ m3 mol mutagenic high -didD@@QInUxV`@@@ m3 mol mutagenic high -didD@@iIYgxVB@@@ m3 mol mutagenic high -didD@@yIYVXV@H@@ m3 mol mutagenic high -didD`BDHaIf_[hHB@@ m3 mol mutagenic high -didD`BxHaIf^XZVfP@ m3 mol mutagenic high -didD`FDHcHhdhZzZVX@@ m3 mol mutagenic high -didH@@RUe^Fh@@@@ m3 mol mutagenic high -didH@@RYm^Eh@@@@ m3 mol mutagenic high -didH@@RYm^Fh@@@@ m3 mol mutagenic high -didH@@Rfu^FfiX@@ m3 mol mutagenic high -didHPBBHFHRYgVzB@`@@ m3 mol mutagenic high -didHPBBHFHRYgvzB@`@@ m3 mol mutagenic high -didH`ABHrJJIEn`HH@@ m3 mol mutagenic high -didH`NADRYWZZ@B`@@ m3 mol mutagenic high -didL@@HTfYun``H@@ m3 mol mutagenic high -didL@@IdfYnfZfj@@ m3 mol mutagenic high -didL@@IdfYoaZYf@@ m3 mol mutagenic high -didL@@IdfYoa`b@@@ m3 mol mutagenic high -didL@@KdfYynZej@@ m3 mol mutagenic high -didL@@QdfumnZZjBL` m3 mol mutagenic high -didL@@XTfUfn`BH@@ m3 mol mutagenic high -didL@@`TiYeLjjj@@ m3 mol mutagenic high -didL@@rldTTqkjjj`@ m3 mol mutagenic high -didh@DKaAInV[fiZ`@ m3 mol mutagenic high -didh@DqaAIe[kffjP@ m3 mol mutagenic high -didh`DJaxHcHheCBjfid@@ m3 mol mutagenic high -die@@@EIYW[n@B@@ m3 mol mutagenic high -die@@@EIfW[hBB@@ m3 mol mutagenic high -die@@@GHhhdVz@``@@ m3 mol mutagenic high -die@@@aJvUxZ`@@@ m3 mol mutagenic high -die@@@aJyW[j@B@@ m3 mol mutagenic high -die@@@iJ[gxZB@@@ m3 mol mutagenic high -die@@@yIYVX^@H@@ m3 mol mutagenic high -die@`BDHaIf_[hHB@@ m3 mol mutagenic high -die@`FDHcHhdhZz@H`@@ m3 mol mutagenic high -dieD@DpFrJIJFnZii@@ m3 mol mutagenic high -dieD@JXDR[Y^EjZd@@ m3 mol mutagenic high -dieDAHxAzQyIYW[j@B@@ m3 mol mutagenic high -dieD`JXaBPRYgvzejX@@ m3 mol mutagenic high -dieD`LIN@HRZufFZid@@ m3 mol mutagenic high -dieH@DDDfyWaZ@@@@ m3 mol mutagenic high -dieH@DXDfyWaZ@@@@ m3 mol mutagenic high -dieH@HHDeYWaf@@BH` m3 mol mutagenic high -die`@@pjX\dTTUk`Hb@@ m3 mol mutagenic high -dif@@@RUe^Fh@@@@ m3 mol mutagenic high -dif@@@RUe^Gh@@@@ m3 mol mutagenic high -dif@@@RYVzZ@B`@@ m3 mol mutagenic high -dif@@@RYevz@``@@ m3 mol mutagenic high -dif@@@RYfVF@b@@@ m3 mol mutagenic high -dif@@@RfU~F``@@@ m3 mol mutagenic high -dif@@@RfWzXBB`@@ m3 mol mutagenic high -dif@@@rRJEKaj@@@@ m3 mol mutagenic high -dif@PABHJHRYgVzB@`@@ m3 mol mutagenic high -dif@PBBHFHRYgVzB@`@@ m3 mol mutagenic high -dif@PBBPFPRYgVzB@`@@ m3 mol mutagenic high -dif@`ABHRYevz@``@@ m3 mol mutagenic high -dif@`ABPRYVzZ@B`@@ m3 mol mutagenic high -dif@`ACDRYVzZ@B`@@ m3 mol mutagenic high -dif@`BBHRYgfzB@`@@ m3 mol mutagenic high -dif@`D@HRUe^EX@@@@ m3 mol mutagenic high -dif@`FBHrJIJFn`BH@@ m3 mol mutagenic high -dif@`L@HRf_\jjjh@@ m3 mol mutagenic high -dif@`L@HRf_ljjjh@@ m3 mol mutagenic high -difD@BADfyWaZ@@@@ m3 mol mutagenic high -difD@BADfyWaZjj@@ m3 mol mutagenic high -difD@BADfzwaZjj@@ m3 mol mutagenic high -difD@DCdfYTfZiZ@@ m3 mol mutagenic high -difD@FADfW[aZjj@@ m3 mol mutagenic high -difD@J@TiWTjjjj@@ m3 mol mutagenic high -difH@AAIfuxV`@@@ m3 mol mutagenic high -difH@AAJ[W[j@B@@ m3 mol mutagenic high -difH@BAIfuxV`@@@ m3 mol mutagenic high -difH@DAIVUxU`@@@ m3 mol mutagenic high -difH@DAIVUxUjj`@ m3 mol mutagenic high -difH@DAInUxV`@@@ m3 mol mutagenic high -difH@FAIfuxV`@@@ m3 mol mutagenic high -difH@HAIYV[j@B@@ m3 mol mutagenic high -difH@JAIYekjZf`@ m3 mol mutagenic high -difH@JAIYgxZB@@@ m3 mol mutagenic high -difH@JAJ[gxZB@@@ m3 mol mutagenic high -difH@NAIYVXZ@H@@ m3 mol mutagenic high -difH@NAIe]ih@J@@ m3 mol mutagenic high -difH@NAJ[VXZ@H@@ m3 mol mutagenic high -difL@BANR[efEjjh@@ m3 mol mutagenic high -dig@@@HTfYun``H@@ m3 mol mutagenic high -dig@@@h\dTRQriZj`@ m3 mol mutagenic high -dig@@@idiggJejj@@ m3 mol mutagenic high -dig@@@kdigwJejj@@ m3 mol mutagenic high -dig@@@xTjU^njjj@@ m3 mol mutagenic high -dig@`D[`bDfUff`@h@@ m3 mol mutagenic high -dig@`Hi`bDeVWajfi@@ m3 mol mutagenic high -digD@DpP[HhdhZyjfd@@ m3 mol mutagenic high -digH@DK`R[e^Eh@@@@ m3 mol mutagenic high -digH@LxPRVUfz`@`@@ m3 mol mutagenic high -digH`BiaBPrJJIEniZf@@ m3 mol mutagenic high -dkL@`@BDeUUUjjjj@@ m3 mol mutagenic high -dkLB`HSBCprRSEQIYjjjh@@ m3 mol mutagenic high -dkLD@@iIUmUVZjj`aH m3 mol mutagenic high -dkLF`DkaTpBLbdtVafjjji@@ m3 mol mutagenic high -dkLH@@ReUUVjjjh@@ m3 mol mutagenic high -dkLJ@@imMJUUUZjjj`@ m3 mol mutagenic high -dkLLHLi`bB|MbCbDeVUUjjjj@@ m3 mol mutagenic high -dkLL`HS@|DjUYfjjjj@@ m3 mol mutagenic high -dkLP@@anF]OIDhhjeIjYi`RKh m3 mol mutagenic high -dkLd@BgSADf{UVZjjf@@ m3 mol mutagenic high -dkLdABWSAMd~rJZYRHijjjT@@ m3 mol mutagenic high -dkML@DdAuInUgVjij`@ m3 mol mutagenic high -dkND@D@dfWUUZjjj@@ m3 mol mutagenic high -dkNF@BAIWSR[YVYjjfX@@ m3 mol mutagenic high -dkNH@DAIeuUVjjj`@ m3 mol mutagenic high -dkNJ`EaLdp|LddrQTrZjij@@ m3 mol mutagenic high -dkN`@@imMJUUUZjjj`@ m3 mol mutagenic high -dk\@@LdbbbRuZQT@B@d@@ m3 mol mutagenic high -dk\@`@bDfUvUimN@B@@@@ m3 mol mutagenic high -dk\@`@bDfYYwZ]NB@@@@@ m3 mol mutagenic high -dk\@`@dDfUnukmN@H@@@@ m3 mol mutagenic high -dk\@`@dDfUvUimN@B@@@@ m3 mol mutagenic high -dk\@`@dDfYYwZ]NB@@@@@ m3 mol mutagenic high -dk\@`@qDfYYwZ]NB@@@@@ m3 mol mutagenic high -dk\B@@P]RYVyznTviBBH@@ m3 mol mutagenic high -dk\D@@wHhhhhbfESZAhD`@@ m3 mol mutagenic high -dk\D`ALHaIe[UzZU`@iiH@@ m3 mol mutagenic high -dk\H@@RYeg]itxH@@@@@ m3 mol mutagenic high -dk\H@@RZYZ\SgZifjf@@ m3 mol mutagenic high -dk\L@@KTfYmUXUMjP`R@@ m3 mol mutagenic high -dk\L@@X|bbbbTa[nEijjf`@ m3 mol mutagenic high -dk\L@@htie]urnF``Ij@bX m3 mol mutagenic high -dk\L@@htie]urnF``JZ@aX m3 mol mutagenic high -dk\L@@iTie]{rnF``Jf@@ m3 mol mutagenic high -dk\LPDp`BH|LbdRRaRX]Mjj@B@@ m3 mol mutagenic high -dk\`@@iSRfYyUnEPJBja@@ m3 mol mutagenic high -dk\`@@j]RfYuUnFPJAjb@@ m3 mol mutagenic high -dk\`@@kSrQQQSQEngPJBja@@ m3 mol mutagenic high -dk\`@@p]rQQJJIFiXP`jJa@@ m3 mol mutagenic high -dk\`@@y]RVUmUae^@HZb@@ m3 mol mutagenic high -dk\`@@{SRVUnUag^@Hja@@ m3 mol mutagenic high -dk\d@Dq]@\bbbbfJZ]MjjZe`@ m3 mol mutagenic high -dk\d@DrUCdfY[uXUujijY`@ m3 mol mutagenic high -dk\d@DsmB\bbbTrQXUujjUj`@ m3 mol mutagenic high -dk\d@LHYCdimY^X]N`BJh`@ m3 mol mutagenic high -dk\h@DrfAIgeU^GSZfh@@@@ m3 mol mutagenic high -dk]@@@iJYez\hSdJBh`@@ m3 mol mutagenic high -dk]@@@qJYweZ[SB@`@@@@ m3 mol mutagenic high -dk]@pAt@a@``aIeoeRkSZf`@`@@ m3 mol mutagenic high -dk]D@DhBRY[UWatvjZ@@@@ m3 mol mutagenic high -dk]H@ALLbbRfTJiaf@Bfh`@ m3 mol mutagenic high -dk]H@BtDfYmUXUMjP`R@@ m3 mol mutagenic high -dk]H@DHDfYyWImMjhHA@@ m3 mol mutagenic high -dk]H@DTLbTTRaR[mMjj@B@@ m3 mol mutagenic high -dk]`PLJnTpBIBDiguermNfZijP@ m3 mol mutagenic high -dk]h@HKiTpRYmfTYtz`HIb@@ m3 mol mutagenic high -dk]h@HKiTpRgefTYtzZiZiBD` m3 mol mutagenic high -dk^@@@RYV{Vntx@`@@@@ m3 mol mutagenic high -dk^@@@RYeg]itxH@@@@@ m3 mol mutagenic high -dk^@@@ReUVZ]TziZ@@ABZP m3 mol mutagenic high -dk^@@@RfYU\]Tz@@@@@@ m3 mol mutagenic high -dk^@@@Ri_YVftzjX@H@@ m3 mol mutagenic high -dk^@pFBPJPFPrJJJZIGitxHB@@@@ m3 mol mutagenic high -dk^@pIBPJPvPRYfuUaTxH@B@@@ m3 mol mutagenic high -dk^D@BADfyVux]Mh@@@@@ m3 mol mutagenic high -dk^D@BCTfYmUXUMjP`R@@ m3 mol mutagenic high -dk^D@E@dfYuY[eNB@jh`@ m3 mol mutagenic high -dk^D@IADfvYWz]MjdHB@@ m3 mol mutagenic high -dk^D@MBdie]vrnF``Jj@@ m3 mol mutagenic high -dk^H@DAIVUm^GSV@@@@@@ m3 mol mutagenic high -dk^HPJHJqjqIf[u^GS`b@@@@@ m3 mol mutagenic high -dk^HPNHJrXaIf^UvGS``B@@@@ m3 mol mutagenic high -dk^HPNHLR\QIf^UvGS``B@@@@ m3 mol mutagenic high -dk^H`BPHaInUm^GSj@@@@@@ m3 mol mutagenic high -dk^d@DkaTCrJIQQHynWVjVZZ@@ m3 mol mutagenic high -dk^d@LzULDRZUnTYtvjiZi@@ m3 mol mutagenic high -dk^h@DkatLbbTTTU[iujejjP@ m3 mol mutagenic high -dk_@@@Y\daRRRTaMNjjjj`@ m3 mol mutagenic high -dk_@@@pdif]uriUjB@j@@ m3 mol mutagenic high -dk_@@@pldTTtRJrmMjfjU`@ m3 mol mutagenic high -dk_@@@x|dTTTRJkit@HBH@@ m3 mol mutagenic high -dk_H@NWPRfumUaeZ@HZb@@ m3 mol mutagenic high -dklB@@F]RYe]ynZYif`@ m3 mol mutagenic high -dklB@@P]R[e[_iZ@Hj@@ m3 mol mutagenic high -dklB@@QSrJYJIJF]ZX@b@cH m3 mol mutagenic high -dklB@@QmR[fUxUZBBF@@ m3 mol mutagenic high -dklB@@RURYYV|jZfij`@ m3 mol mutagenic high -dklB@@SSR[VUVUZZfjPcH m3 mol mutagenic high -dklD@@QIe]URijjjj@@ m3 mol mutagenic high -dklD@@QIe]e]Mjz@@@@ m3 mol mutagenic high -dklD@@QIgfU}MjhD@@@ m3 mol mutagenic high -dklD@@[Hhdhbdjz@Hjh@@ m3 mol mutagenic high -dklD@@eJ[Vvfz`@jh@@ m3 mol mutagenic high -dklD@@kIEMDdbnf``bd@@ m3 mol mutagenic high -dklD`AtIAIVUm~fh@bh@@ m3 mol mutagenic high -dklF@@PittfzugEVjjjh@@ m3 mol mutagenic high -dklL@@PtfyWUxV`@j`@@ m3 mol mutagenic high -dkl`@@kaRe[vTf@HZj@ah m3 mol mutagenic high -dkm@`MLHcHhhdcDfz@`Z|@@ m3 mol mutagenic high -dkmD@DHCRYvUvUZh@J@@ m3 mol mutagenic high -dkmD@DTCRUfWtYV@`e@@ m3 mol mutagenic high -dkmD@DdCrIJJIPxUV@bE@@ m3 mol mutagenic high -dkmH`FVPbDfUonkh@bZ`@@ m3 mol mutagenic high -dkmH`NVPbDfUunih@JZ`@@ m3 mol mutagenic high -dkmL@DpAuIfYeVejjZZ@@ m3 mol mutagenic high -dkmL@DpIOHhhdddVyjiVfBN` m3 mol mutagenic high -dkn@@@RYfVya`Hbj@@ m3 mol mutagenic high -dkn@pLCDDHWDRUeYWSjjijP@ m3 mol mutagenic high -dknD@BADfyWUxV`@j`@@ m3 mol mutagenic high -dknD@D@tf^UeFVh@J`@@ m3 mol mutagenic high -dknD@D@|bbtTTUgVhBH`@@ m3 mol mutagenic high -dknD@LALbbRbaRtvjh@@@@ m3 mol mutagenic high -dknDPAWPbFbLbbRbJfkh@bf`@@ m3 mol mutagenic high -dknD`ItpdDfUunih@Ji`@@ m3 mol mutagenic high -dknD`ItpdLbbRaTtih@Ji`@@ m3 mol mutagenic high -dknD`ItpdLbbbRLt[hBBi`@@ m3 mol mutagenic high -dknH`It@aJYWunF``JX@@ m3 mol mutagenic high -dknL@BACR[me]]Zj@B@@ m3 mol mutagenic high -dknL@D@SRUVYu]ZXHB@cH m3 mol mutagenic high -dknL@D@]R[e[_iZ@Hj@@ m3 mol mutagenic high -dknL@FASrJJIIJT]ZBBb@@ m3 mol mutagenic high -dknL@M@iRYg^un``Jj@@ m3 mol mutagenic high -dkoD@DJPwHheLeCAej@BX@@ m3 mol mutagenic high -dkoH@DHpRYYUfSZ``h@@ m3 mol mutagenic high -dk|@`@BLdTRbtQJagShD@@`@@ m3 mol mutagenic high -dk|D@@QIeeUrYngVjijjP@ m3 mol mutagenic high -dk|H@@RYegYngUN@@BHH@@ m3 mol mutagenic high -dk|H@@RfYU_JGUN`@@B@@@ m3 mol mutagenic high -dk}@@@iJUmUR[atpBJ@@@@ m3 mol mutagenic high -dk~@@@RYkUdUgYNjjjjh@@ m3 mol mutagenic high -dk~@@@RfYU_JGUN`@@B@@@ m3 mol mutagenic high -dk@@@p\dTRbfQjVGSBBheF@@ m3 mol mutagenic high -dmL@@DjYUVGi@@@`@@ m3 mol mutagenic high -dmL@@DjYeVdU@@`@@@ m3 mol mutagenic high -dmL@`@bLbbbTQ[iV@@@@@@ m3 mol mutagenic high -dmLB@@IerJJJZEnxVijf`@ m3 mol mutagenic high -dmLB@@RURYUVJaejVjh@@ m3 mol mutagenic high -dmLD@@QIe[VfeVi@B@@ m3 mol mutagenic high -dmLD@@UJYWwJxZA@j@@ m3 mol mutagenic high -dmLH@@RYVuiiV@@@@@@ m3 mol mutagenic high -dmLH@@RYiYKnUjjjh@@ m3 mol mutagenic high -dmLH@@RYiYKnVjjjh@@ m3 mol mutagenic high -dmLH@@RffeZVVjjjh@@ m3 mol mutagenic high -dmLH@@Rge[aNFh@JP@@ m3 mol mutagenic high -dmLH@@rJJIQEneX@@@@@ m3 mol mutagenic high -dmLL@@yTee[VFUX@bb@@ m3 mol mutagenic high -dmL`@@pURfV[jVDHJbD@@ m3 mol mutagenic high -dmL`@@siRfUmhVxHFJH@@ m3 mol mutagenic high -dmL``Dke@HRYYeXYUjfVh@@ m3 mol mutagenic high -dmLd@Dqe@TfUeZzUZZeZ@@ m3 mol mutagenic high -dmLh@DkeAIefUaeVjYZ`@ m3 mol mutagenic high -dmM@@@UJYY~nFP@@H@@ m3 mol mutagenic high -dmM@@@eJYY^fEP@@`@@ m3 mol mutagenic high -dmM@@@iJYewJEYB`b@@ m3 mol mutagenic high -dmM@@@qJYm^neP`@@@@ m3 mol mutagenic high -dmM@@@{IDeCDbjU@Bjb@@ m3 mol mutagenic high -dmM@@@{IEEEEZzU@B@@@@ m3 mol mutagenic high -dmMB@DpNETfYYZEiZjYZ@@ m3 mol mutagenic high -dmMH@DHDfVUzzUZ`PH@@ m3 mol mutagenic high -dmMHAHx@zIrJJIQEneX@@@@@ m3 mol mutagenic high -dmMh@DkaePRYYe[iUifjd@@ m3 mol mutagenic high -dmN@@@RYVuiiV@@@@@@ m3 mol mutagenic high -dmN@@@RfVWiaT@@H@@@ m3 mol mutagenic high -dmN@@@RfV]iaT@@H@@@ m3 mol mutagenic high -dmN@@@RfV^kad@@B@@@ m3 mol mutagenic high -dmN@@@RfV_kad@@B@@@ m3 mol mutagenic high -dmN@@@RfWUiiTB@@@@@ m3 mol mutagenic high -dmN@@@RfYWraV`XH`@@ m3 mol mutagenic high -dmN@@@rQQJJFfEP@@`@@ m3 mol mutagenic high -dmN@@@rQQQQVneP@`@@@ m3 mol mutagenic high -dmN@`BBHRYe[ZQV@@@@@@ m3 mol mutagenic high -dmN@`BBPRYUUiiV@@@@@@ m3 mol mutagenic high -dmN@`BBPRYe[ZQV@@@@@@ m3 mol mutagenic high -dmN@`DBHRYVuiiV@@@@@@ m3 mol mutagenic high -dmN@`FBPRYVukiV@@@@@@ m3 mol mutagenic high -dmN@`NBPRYegXYV@@@@@@ m3 mol mutagenic high -dmN@`NBPrJJIQEneX@@@@@ m3 mol mutagenic high -dmN@pN@H`HPHrRPqIZneUhDB@@ m3 mol mutagenic high -dmND@BA\bbbReInFjZjd@@ m3 mol mutagenic high -dmNH@BAIfUmiEX@@@@@ m3 mol mutagenic high -dmNH@DAIe[VfeX@@@@@ m3 mol mutagenic high -dmNH@FAIe[VneX@@@@@ m3 mol mutagenic high -dmNH@NAIYe^neZdHB@@ m3 mol mutagenic high -dmNH@NAIfV]aeX@@@@@ m3 mol mutagenic high -dmNH@NCHhheDVzU`@@@@@ m3 mol mutagenic high -dmNHAH@Nb\bbbTQ[iV@@@@@@ m3 mol mutagenic high -dmN``DkaT@aIefUneVjVjP@ m3 mol mutagenic high -dmNd@DqiTARYVUkiUijUh@@ m3 mol mutagenic high -dmNh@DkaTDfVYVzUZiZi@@ m3 mol mutagenic high -dmO@@@pdif]|jUZ``H@@ m3 mol mutagenic high -dmT@p@AHbDbLddJRRjjj`@ m3 mol mutagenic high -dmT@p@bBBEbDeYyzjjh@@ m3 mol mutagenic high -dmTB`HSBCpRjuUZjj`@ m3 mol mutagenic high -dmTD@@QIeU]jjZ@@ m3 mol mutagenic high -dmTD@@iIUmUfjjBD` m3 mol mutagenic high -dmTDPDpOBICIHUHiIjjh@@ m3 mol mutagenic high -dmTD`HdDiJiUZjjf@@ m3 mol mutagenic high -dmTH@@RUgVYjf`aD m3 mol mutagenic high -dmTH@@rJQHiRjZZ@@ m3 mol mutagenic high -dmU@HLT@a@c`bPaIggYjjf@@ m3 mol mutagenic high -dmU@pLD@a@c`cHheEKFjfh@@ m3 mol mutagenic high -dmUL`LZiT@aI[mZjZf@@ m3 mol mutagenic high -dmVD@D@dfWUVjjh@@ m3 mol mutagenic high -dmVDbNp`qNeI[Ujfjj@@ m3 mol mutagenic high -dmVL@LAERYuUZjj`@ m3 mol mutagenic high -dmWLaNeXS@|Ie^Rju_ZjiP@ m3 mol mutagenic high -dmlH@@RfVvaFGajjjj`@ m3 mol mutagenic high -dmn@@@RZUYX^gejjjj`@ m3 mol mutagenic high -dmnH@JAJUe^D[iV`@@@@@ m3 mol mutagenic high -dmt@H@bAdIdEdDfUvjZ@Bj@@ m3 mol mutagenic high -dmt@h@bJbNbIbEbDfV[vFZjj`@ m3 mol mutagenic high -dmtB@@PUrJZIJGiZ@H`@@ m3 mol mutagenic high -dmtB@@QeR[f]FV``H@@ m3 mol mutagenic high -dmtD@@QIe]TjZjjh@@ m3 mol mutagenic high -dmtD@@QIgYVUZh@@@@ m3 mol mutagenic high -dmtD@@UIfuwaZ@B`@@ m3 mol mutagenic high -dmtD@@WHhidh^Eh@J@@ m3 mol mutagenic high -dmtD@@aJye[ahBB`@@ m3 mol mutagenic high -dmtD@@iJ[g_ahHBP@@ m3 mol mutagenic high -dmtDPAdH`haIf]Un``J`@@ m3 mol mutagenic high -dmtDPBTHbXaIf^un``JP@@ m3 mol mutagenic high -dmtDPITICiAIfVYa`Ha`@@ m3 mol mutagenic high -dmtDPNDHaXcHhheEVfBAb@@ m3 mol mutagenic high -dmtH@@RVUv[fZjZ@@ m3 mol mutagenic high -dmtH@@RVUv[jZjZ@@ m3 mol mutagenic high -dmtH@@RYWZih@Jh@@ m3 mol mutagenic high -dmtH@@RYeY[hBBh@@ m3 mol mutagenic high -dmtH@@RYe[[hBBh@@ m3 mol mutagenic high -dmtH@@RYeeZVjjj@@ m3 mol mutagenic high -dmtH@@RYeeZZjjj@@ m3 mol mutagenic high -dmtH@@RYe~[ffjZ@@ m3 mol mutagenic high -dmtH@@RYvUeVf@@BL` m3 mol mutagenic high -dmtH@@RZWv[jjjZ@@ m3 mol mutagenic high -dmtH@@Rfuu[j@BXBA` m3 mol mutagenic high -dmtH@@Rfuu[j@Bd@@ m3 mol mutagenic high -dmtH@@Rfuu[j@Bh@@ m3 mol mutagenic high -dmtH@@rIQQQWiXBH`@@ m3 mol mutagenic high -dmtHPNBHHHRUUeeZjii@@ m3 mol mutagenic high -dmtH`IBHRUe]xY`@hBH` m3 mol mutagenic high -dmtH`JBHRYVueYi@@BHP m3 mol mutagenic high -dmtL@@ETfYUVyifi`@ m3 mol mutagenic high -dmtL@@F\bbfbQXVjjj@@ m3 mol mutagenic high -dmtL@@QTfyW^Eh@I@@ m3 mol mutagenic high -dmtL@@QTfyW^Eh@J@@ m3 mol mutagenic high -dmtL@@QdfygQehHB@@ m3 mol mutagenic high -dmtL@@SdfVyyUjB@@@ m3 mol mutagenic high -dmtL@@yTee[VE`BJ@@ m3 mol mutagenic high -dmu@@@GHhhhhvf@bb@@ m3 mol mutagenic high -dmu@@@aJyyVUjh@@@@ m3 mol mutagenic high -dmuB@DpAeTfUejyjiV`@ m3 mol mutagenic high -dmuB@DpFFTfUgjyjfj`@ m3 mol mutagenic high -dmuB@DpFe\bbRaRkfjZi@@ m3 mol mutagenic high -dmuD@ITDR[e]xV`@h@@ m3 mol mutagenic high -dmuDAHDEFU{HeEDh^F`HJ@@ m3 mol mutagenic high -dmuDPHhfBHFHRYf~kjfZj@@ m3 mol mutagenic high -dmuD`LVD@HrRRqIXYV`@`@@ m3 mol mutagenic high -dmuD`NEeCDRUf_FYiZfBH` m3 mol mutagenic high -dmuH@DHDf]eYUj`@@@ m3 mol mutagenic high -dmuH@DTDf^Uqej@B@@ m3 mol mutagenic high -dmuH@DpDfUmYUj`@@@ m3 mol mutagenic high -dmuH`BhPbDfUmzZZZ[`@ m3 mol mutagenic high -dmuH`BhPdDfUmzZZZ[`@ m3 mol mutagenic high -dmuH`BhPkDfUmzZZZ[`@ m3 mol mutagenic high -dmuH`BhPqDfUmzZZZ[`@ m3 mol mutagenic high -dmuH`NVPbDfUujZ@Bf@@ m3 mol mutagenic high -dmuL@DpByIf]zfZjZh@@ m3 mol mutagenic high -dmuL`DxiTHaIevxjfjih@@ m3 mol mutagenic high -dmv@@@RYfVXXBHh@@ m3 mol mutagenic high -dmv@@@RYfWXXBHh@@ m3 mol mutagenic high -dmv@@@rJQFIJUjh@@@@ m3 mol mutagenic high -dmv@@@rRJIIFUjB`@@@ m3 mol mutagenic high -dmv@HDBHFPfPVPRYWZih@Jh@@ m3 mol mutagenic high -dmv@`D@HRUVUeUj@@@@ m3 mol mutagenic high -dmv@pEBPRPrPrJPqIXYj`@`@@ m3 mol mutagenic high -dmvD@DATf^Uqej@B@@ m3 mol mutagenic high -dmvD@DATfvUqej@B@@ m3 mol mutagenic high -dmvD@DCdf^YyUjB@@@ m3 mol mutagenic high -dmvD@EADfvUqej@B@@ m3 mol mutagenic high -dmvDPBS@BHBLddjbReUjjj@@ m3 mol mutagenic high -dmvD`La@BLddlRVFUh@H@@ m3 mol mutagenic high -dmvD`La@BLddlTReUhB@@@ m3 mol mutagenic high -dmvD`NePBDig{ljfZf`@ m3 mol mutagenic high -dmvH@DAIgfVUZ`H@@@ m3 mol mutagenic high -dmvH@FAIe[Vn`BJ`@@ m3 mol mutagenic high -dmvH@FCHhhhdYUhJ@@@ m3 mol mutagenic high -dmvH@IAIeYVfZVih@@ m3 mol mutagenic high -dmvH`NdHaIe]Zf`@i`@@ m3 mol mutagenic high -dmvL`IaL@HrRRqIPUV`B@@@ m3 mol mutagenic high -dmw@`Dp`BDf]eYUj`@@@ m3 mol mutagenic high -dmwD@ByPQInvVUZjeh@@ m3 mol mutagenic high -dmwH@Dp`RYvUeVj@@@@ m3 mol mutagenic high -dnDH@@ReVDijiZ@@ m3 mol mutagenic high -dnDH@@ReVDijij@@ m3 mol mutagenic high -dnDH@@ReVDijji@@ m3 mol mutagenic high -dnDH@@ReVDijjj@@ m3 mol mutagenic high -dndD@@iJUhPfijjj`@ m3 mol mutagenic high -do\BPHP{@HtHrRPzIKJQZjje`@ m3 mol mutagenic high -do\F@@Savtf^UVYjjjY`@ m3 mol mutagenic high -do\NPHQevw@DHDrRYJKJHqjfii`@ m3 mol mutagenic high -do]B@L\Dv|bbtTTUTZjjjX@@ m3 mol mutagenic high -do]LpN_JXH`o@xaIUkUWjfjjh@@ m3 mol mutagenic high -do^B@NAK]ImgV^ZjjjX@@ m3 mol mutagenic high -do^D@D@dfWUUUjjjj`@ m3 mol mutagenic high -do^J`CaLKP|LddqbbTlZijfhHi@ m3 mol mutagenic high -do^LpGZ[BHHHhHrJZQIIHrZjji`@ m3 mol mutagenic high -do^LpNWSCDpHJPRV]efyjjfZBH` m3 mol mutagenic high -do|D@@QIgfUYuvj``h@@ m3 mol mutagenic high -do|D@@QIn[WVeVj@Bj@@ m3 mol mutagenic high -do|J@@S[_HheDdeDYMjBBb`@@ m3 mol mutagenic high -do|L@@RtfUVuwSZjp@h@@ m3 mol mutagenic high -do|L@@RtfvYWwSZjA@h@@ m3 mol mutagenic high -do|L@@iTinU]_ihHHjXBCP m3 mol mutagenic high -do|L@@iTinU]_ihHHjXBC` m3 mol mutagenic high -do|L@@kldTtTRQrEZBHbi@@ m3 mol mutagenic high -do|LPDp`BH|LbdRRbRQmvjhJ@@@ m3 mol mutagenic high -do}D@DTIrJZQQQIVwZjAh@@@ m3 mol mutagenic high -do}DPAuSBHJHRYg]nVzB@ij`@@ m3 mol mutagenic high -do}D`ILmBHrJJIIESQa``bfh@@ m3 mol mutagenic high -do}H@DHLbbTbjbRmvjj`@@@ m3 mol mutagenic high -do}H@DpLbbbLRVTWVj`@j@@ m3 mol mutagenic high -do}L`LvDl@cIIBidleIUZ`@i`@@ m3 mol mutagenic high -do~B@BAC_HiiMhdh]mjj@H`@@ m3 mol mutagenic high -do~B@BAK]InVuf[fjjif`@ m3 mol mutagenic high -do~B@I@moHhhdddcFEjVjYh@@ m3 mol mutagenic high -do~B@JAC_HheBhdh]mjj@H`@@ m3 mol mutagenic high -do~D@DAlbbbRQbRmvjj`@@@ m3 mol mutagenic high -do~D`MNpqLbbbRLRa[hBAkZ@cd m3 mol mutagenic high -do~J`IaLNpaLddlRTrTEVh@bf@@ m3 mol mutagenic high -do~J`LXUMpBLdTVafffrjjjjj`@ m3 mol mutagenic high -do~L@LANRYye[iujBBJ`@@ m3 mol mutagenic high -doD@Lk`QIgff{yVjZjjP@ m3 mol mutagenic high -doH@DxPRYYe}ZyiZjjh@@ m3 mol mutagenic high -eFA@lhbL@ m3 mol mutagenic high -eFAAD`bJ@ m3 mol mutagenic high -eFAADhbL@ m3 mol mutagenic high -eFABDhbL@ m3 mol mutagenic high -eFABHhbL@ m3 mol mutagenic high -eFACDlRL@ m3 mol mutagenic high -eFB@Hc@@ m3 mol mutagenic high -eFB@Jc@@ m3 mol mutagenic high -eFBBHc@@ m3 mol mutagenic high -eFBBlc@@ m3 mol mutagenic high -eFBCDc@@ m3 mol mutagenic high -eFDBb`@ m3 mol mutagenic high -eFDBc@@ m3 mol mutagenic high -eFHBL@ m3 mol mutagenic high -eFJHaHh@ m3 mol mutagenic high -eFJHbHh@ m3 mol mutagenic high -eFJhUKhh@ m3 mol mutagenic high -eFPBc@@ m3 mol mutagenic high -eF`BL@ m3 mol mutagenic high -eFbHbHp@ m3 mol mutagenic high -eM@H~@ m3 mol mutagenic high -eM@ghz@ m3 mol mutagenic high -eMA@HPaIT@ m3 mol mutagenic high -eMABD`bM`@ m3 mol mutagenic high -eMABlZqIh@ m3 mol mutagenic high -eMACD\QIh@ m3 mol mutagenic high -eMB@Jch@ m3 mol mutagenic high -eMBBHRZ@ m3 mol mutagenic high -eMBBPRY@ m3 mol mutagenic high -eMBBlRZ@ m3 mol mutagenic high -eMDARV@ m3 mol mutagenic high -eMFI@bMP@ m3 mol mutagenic high -eMHAIX@ m3 mol mutagenic high -eMHAIh@ m3 mol mutagenic high -eMJHaHv@ m3 mol mutagenic high -eMLRRWhv@ m3 mol mutagenic high -eMPBch@ m3 mol mutagenic high -eM`BN`@ m3 mol mutagenic high -eMhDRV@ m3 mol mutagenic high -eMhHRY@ m3 mol mutagenic high -eMhHRZ@ m3 mol mutagenic high -eMhHch@ m3 mol mutagenic high -eMpBXv@ m3 mol mutagenic high -eO@Hyj@ m3 mol mutagenic high -eOBBHcfh@ m3 mol mutagenic high -eOBCDcfh@ m3 mol mutagenic high -eOHBNZ`@ m3 mol mutagenic high -eOPBcfX@ m3 mol mutagenic high -eO`BNZ`@ m3 mol mutagenic high -fH`T@@ m3 mol mutagenic high -fH`X@@ m3 mol mutagenic high -fH`p@@ m3 mol mutagenic high -fHap@@ m3 mol mutagenic high -fHbT@@ m3 mol mutagenic high -fHbh@@ m3 mol mutagenic high -fHc`@@ m3 mol mutagenic high -fHcp@@ m3 mol mutagenic high -fHdH@@ m3 mol mutagenic high -fHdP@@ m3 mol mutagenic high -fHdT@@ m3 mol mutagenic high -fHd`@@ m3 mol mutagenic high -fHe@@@ m3 mol mutagenic high -fHf@@@ m3 mol mutagenic high -fHfp@@ m3 mol mutagenic high -fHg`@@ m3 mol mutagenic high -fHgp@@ m3 mol mutagenic high -fHpXT@ m3 mol mutagenic high -fHppT@ m3 mol mutagenic high -fHpp\@ m3 mol mutagenic high -fHppt@ m3 mol mutagenic high -fHrpT@ m3 mol mutagenic high -fHtHh@ m3 mol mutagenic high -fHt`x@ m3 mol mutagenic high -fI@@ m3 mol mutagenic high -f`a@`@@FrJJIJQJrLxtsUSU@@@ m3 mol mutagenic high -f`a@`@@ZrJJJQIPfJltEPTT@@@ m3 mol mutagenic high -f`aA@@@YEEEEETdfB`Hbjj@@@ m3 mol mutagenic high -f`aAb@NFlBHrJIKIRJUTY@AUST@@@ m3 mol mutagenic high -f`aAc@DXH@HaxNBLbdRRaRfvcMUP@U@@@ m3 mol mutagenic high -f`aIB@DXHYp@aIgVUueZZf@Bf@PI@ m3 mol mutagenic high -f`aPP@B\@bwlbfdRLRTIgMUT@Q@@@ m3 mol mutagenic high -f`aQB@NJdBHRYWVyncH@JZjp@@ m3 mol mutagenic high -f`aQC@IVLBPQHXdLbdLRTvf`eUPADu@@@ m3 mol mutagenic high -f`a`R@NBT{pHaIe]nujL`@jZf@@@ m3 mol mutagenic high -f`a`b@KRTCDRVUvuYgJ@BZj`@@ m3 mol mutagenic high -f`a`b@KRTCDrIQISPiJLEPACUT@@@ m3 mol mutagenic high -f`a`r@MPQ`ag@|LddqTTRbNkMU@QC@@@ m3 mol mutagenic high -f`aaB@NRADYEDediiDZL`@ijj@@@ m3 mol mutagenic high -f`aaP@I@QPQlbbTabaaeNMUSUUP@@ m3 mol mutagenic high -f`aa`@D@IqInvuURTZjZff`HUV` m3 mol mutagenic high -f`axB@DXIhso@BDf]e]VdijZVZZ@`dj@ m3 mol mutagenic high -f`i@@@DjYeW_YHRg^@@`B@@@@ m3 mol mutagenic high -f`i@@@DjYeeoyHQm^@@@@h@@@ m3 mol mutagenic high -f`i@@@LdbbbRVQSEBd{p@DA@@@@@ m3 mol mutagenic high -f`i@@@LdbbbTRISIBt{p@DD@@@@@ m3 mol mutagenic high -f`i@@@LdbbbbbRkEB\[p@@PD@@@@ m3 mol mutagenic high -f`i@@@LdbbbbbSwEBlYp@@P@P@@@ m3 mol mutagenic high -f`i@@@LdbbbbbT_EBl[p@@PA@@@@ m3 mol mutagenic high -f`i@@@LdbbbbbrKEBl[p@@PA@@@@ m3 mol mutagenic high -f`i@P@@HD[HhdihdhUSbkN|uHPTUB@@ m3 mol mutagenic high -f`i@P@@HTYIe[VUZLeiwfi@HjhP@@ m3 mol mutagenic high -f`i@`@@BrJJJJJIXlUiuoP@D@@@@@@ m3 mol mutagenic high -f`i@`@@DRYfyU]`mNmyi`@@B@@@ m3 mol mutagenic high -f`i@`@@DRYfyU]`mNmzB@@@@@@@ m3 mol mutagenic high -f`i@`@@LRYfYuw`eV]zhJ`@@@@@ m3 mol mutagenic high -f`i@`@@VRYfYU]`eNMyh@`AB@@@ m3 mol mutagenic high -f`iA@@@YHhhheLUfBdYwjBb@@H@@@ m3 mol mutagenic high -f`iH@@@RM[IEDhmBdeS`eZL@@DMTD@@ m3 mol mutagenic high -f`iH@@@RM[IEDhmBdmS`eZL@@DMTD@@ m3 mol mutagenic high -f`iH@@@RlyJYY{WZ\Dhu`@@bZ``@@ m3 mol mutagenic high -f`iH@@@Rl{IEDhmCDcS`eZl@@DUTB@@ m3 mol mutagenic high -f`iH@@@TUkIEEEhdd\s`eV\APUTlL@@ m3 mol mutagenic high -f`iH@@@XDiJYYe_jRXHs``jJYa`@@ m3 mol mutagenic high -f`iH@@@XDkIEDhhdmcRSAF\DEQSLL@@ m3 mol mutagenic high -f`iH@@@\myJYfUuZ\d[S`@@@H`@@@ m3 mol mutagenic high -f`iH@@@\myJYfUuz\d[S`@@@H`@@@ m3 mol mutagenic high -f`iH@@@\m{IEEEDedkSdcZ\@@@AD@@@ m3 mol mutagenic high -f`iI@@DJlxBSJvmjtYKQkMR@PuQ@@@ m3 mol mutagenic high -f`iI@@HXIXBRsKkZtxkSoSUP@@@@aA@ m3 mol mutagenic high -f`iI@@H\EhFQJJIPiIKdeZ]z`HajTh@@ m3 mol mutagenic high -f`iP@@@NRifyWU`eVMzjPZBbP@@ m3 mol mutagenic high -f`iP@@@VRifyWm`eNMzjPZBbP@@ m3 mol mutagenic high -f`iP@@@^RifyW}`eVLzjPZBJP@@ m3 mol mutagenic high -f`iPB@LD@DYHhbhheD\TtYwjY`@@H@@@ m3 mol mutagenic high -f`iPBDK^@D@eJYfUuZ\d[S`@@@H`@@@ m3 mol mutagenic high -f`iP`@BJ@aInUUm^BUiwfjjh@F@@@ m3 mol mutagenic high -f`iP`@BR@IIf]UUV\UiwfiZZ@H@@@ m3 mol mutagenic high -f`iP`@B\@aInVUuQRUiwfjij@H@@@ m3 mol mutagenic high -f`iP`@FB@QIf[eU~Rtzwff@@@H@@@ m3 mol mutagenic high -f`iQ@DK^@BTifYWUirQmN@@@@b@@@ m3 mol mutagenic high -f`i`@@@IKLlj{pRkN}p@@@@@@@ m3 mol mutagenic high -f`i``@M@YdTTTTQaRyIQg^jBb@@P@@ m3 mol mutagenic high -f`ih@@@LDYvRJIQPiIJcIJtX@@`ZhH@@ m3 mol mutagenic high -f`ih@@@\UYvRJJJJsIJgIZMX@HBJhH@@ m3 mol mutagenic high -f`ih@@@\eYvRJJJJUKJgEZMX@HHFhH@@ m3 mol mutagenic high -f`ip@@@N}dbbbbRQrhJQmV@@@@J@@@ m3 mol mutagenic high -f`ip@@@V|eLsJzmNRMip@@@DP@@@ m3 mol mutagenic high -f`ip@@@XTeLwOvmNJt{pPQT@A@@@ m3 mol mutagenic high -f`ip@@@XUdbbRRRaRiqVg^BBJ`@H@@ m3 mol mutagenic high -f`ip@@@XdeLv{ZmNRUYpPQP@Q@@@ m3 mol mutagenic high -f`ip@@@XdeLv{Z}NRUYpPQP@Q@@@ m3 mol mutagenic high -f`ip@@@XheLwKkkNRT{pQAU@@@@@ m3 mol mutagenic high -f`ip@@@XmdbbbTTqVXJQg^@H@@@@@@ m3 mol mutagenic high -f`ipB@BBdBHRYeY_Y`nRlzBAJiXh@@ m3 mol mutagenic high -f`iq@@BBdAIf]UUV\UiwhH@@@@@@@ m3 mol mutagenic high -f`iqB@HLEpBHeJkOrnBBd{uKSL@E@@@ m3 mol mutagenic high -f`q@@`@QBhbtQzHRYegeudcN``@`b@@@ m3 mol mutagenic high -f`q@A@@QGhaIe]fuzLlz@Bh@H@@@ m3 mol mutagenic high -f`q@P@@HMyIgUe[]V]yjZ@Hh`PI@ m3 mol mutagenic high -f`q@P@@HMyIgfU{]V]yjhDHh`@@ m3 mol mutagenic high -f`q@P@@HTyIgUfUc^lyjZBB``PI@ m3 mol mutagenic high -f`q@P@@HU{HhlhheEbhvkMULttr@@ m3 mol mutagenic high -f`q@`@@LRYfWg^Qg^ZB`@@@@@ m3 mol mutagenic high -f`q@`@@LrJIJHiQITx{t@QL@@@`J@ m3 mol mutagenic high -f`q@`@@^rJIJEJIKTYYt@Dp@P@ar@ m3 mol mutagenic high -f`q@`@@^rJJJJHpkTXkSPTPUT@@@ m3 mol mutagenic high -f`q@a@JZADFbLbTTTtRROIN}TmPLA@@@ m3 mol mutagenic high -f`qA@@@ILrj}jISoM@a@@@BEH m3 mol mutagenic high -f`qA@@@YDhhdmECJ\UYfiVjZP@@ m3 mol mutagenic high -f`qA@@@YDhhdmECJ\UZfiVjZP@@ m3 mol mutagenic high -f`qAB@C@bLbRbbbebpmV]TAECTP@@ m3 mol mutagenic high -f`qAP@@De[vQQQSJJFTVcNZdJHbP@@ m3 mol mutagenic high -f`qA`@@FmdbbdTUrRiIVjBh`jd@@ m3 mol mutagenic high -f`qA`@@N|dsLjolcZlt@@@T@@@ m3 mol mutagenic high -f`qAp@@HiIUgYEDhdeDUBLEIjfjjZ`@@ m3 mol mutagenic high -f`qHB@DXIp@PdskKJzcN|uL@@@@HD` m3 mol mutagenic high -f`qHP@DXxHDg^rJIQSPiITyhsSUUUS@@@ m3 mol mutagenic high -f`qH`@DLeXELbbTVRTQfcN|uMUUUP@@ m3 mol mutagenic high -f`qH`@DXEXFdfYfWVYHufjjYZj@@ m3 mol mutagenic high -f`qH`@DXUXAlbbbJRRfaJN|uUUSUP@@ m3 mol mutagenic high -f`qH`@DXtX@lbbbbbQRSIF\uUMULp@@ m3 mol mutagenic high -f`qIB@DXIHP@aIgYfuyJ]yjZXHB@PI@ m3 mol mutagenic high -f`qI`@DXEXBmYEEEEDldVRMYjjfVj`@@ m3 mol mutagenic high -f`qP@@@PRkfUWvQmVj@@@J@@@ m3 mol mutagenic high -f`qP@@@^RYWUe^cKN`@j@B@@@ m3 mol mutagenic high -f`qP@@@^Rfuue]gKNh@J@B@@@ m3 mol mutagenic high -f`qPA@NBAD^bDfUuYWhrsh@I`@`ACd@ m3 mol mutagenic high -f`qPB@DX@DILwLjoiuoMUUUUT@@ m3 mol mutagenic high -f`qP`@DBAKHheHdhbmPSoMUTa@P@@ m3 mol mutagenic high -f`qP`@DXAqIfWnUrL]yjihHB@@@ m3 mol mutagenic high -f`qQ@@FRAdTRTbdTLMYwfjjjjj@@ m3 mol mutagenic high -f`qQB@G^`@HRkfUWvQmVZ@@@J@@@ m3 mol mutagenic high -f`qQP@DX@ISoILrl{jsfcMUMMUT@@ m3 mol mutagenic high -f`qQb@LD``P@cIICDhhlUrSoKUST@@@@ m3 mol mutagenic high -f`q`P@L@PHrSJwJwJmhsUAAQQ@@@ m3 mol mutagenic high -f`q`P@L@PZvQQISQIPiVg^ZhBBjH@@ m3 mol mutagenic high -f`q``@D@EdTRdTTqVYIwfji``H@@ m3 mol mutagenic high -f`q``@D@HdsOZvjmN|uT@@@@@@ m3 mol mutagenic high -f`q`b@ILD@HrQQJJMQITX{uMTt@D@@@ m3 mol mutagenic high -f`qa@@D@RYyeg^Qg^Z``@@@@@ m3 mol mutagenic high -f`qa@@E@rQQIZYQF\EjuA@TuQ@@@ m3 mol mutagenic high -f`qaA@ODADRbLbbbRRaRsAV]AAD@D@@@ m3 mol mutagenic high -f`qaP@D@hIVdfVfy{IrgFjjfjj@@ m3 mol mutagenic high -f`qa`@L@PKHhdheEhchsoMTD@@@@@ m3 mol mutagenic high -f`qa`@L@QqIgfUnyZTYjBBJh`@@ m3 mol mutagenic high -f`qi`@DTxIPC^rJIQQJiILyISUKMUU@@@ m3 mol mutagenic high -f`qi`@FRt{pDDR[mfUuVkNZjhDB`@@ m3 mol mutagenic high -f`qp@@@Hpds\rj~gV|uP@@@@@@ m3 mol mutagenic high -f`qpP@DXxBQoYEDhihUDZBuYijjji`@@ m3 mol mutagenic high -f`qpP@DXxBSoYEDhihTdjBtYijjji`@@ m3 mol mutagenic high -f`qpa@LR}A@@`PQddaTTRRUtxuejBPha@@ m3 mol mutagenic high -f`qq@@BBdAIf]ueV\]zB@f@@@PE@ m3 mol mutagenic high -f`qqa@FRUAE`AE@cIICDedeDJQgKTuMMR@@ m3 mol mutagenic high -f`y@@@DjYeUYHRmF]x@B@D@H@@ m3 mol mutagenic high -f`y@@@DjYegvYHQmNmx@@@BHA@@ m3 mol mutagenic high -f`y@@@LdbbbbbfkEBMIuo@@@@@@@@@ m3 mol mutagenic high -f`y@@@LdbbbbbfkEB]Jqo@@A@PA@@@ m3 mol mutagenic high -f`y`@@@ISKJmmQ`cZ][p@@@@@@@@ m3 mol mutagenic high -f`y`@@@ISKONwS`iZl{p@@@@@@@@ m3 mol mutagenic high -f`y`@@@YHdhddhTbTeiQg^@@@@@@@@@ m3 mol mutagenic high -f`~@`@@HR[UUUUjjjjh@@ m3 mol mutagenic high -f`~@`@@TReWUUVjjjjh@@ m3 mol mutagenic high -f`~@`@@XRfUv}ZjijihDFP m3 mol mutagenic high -f`~A@@@IJskNmSUMTtABGb@ m3 mol mutagenic high -f`~A@@@ISjjjkSLsMTBbDbqDjP m3 mol mutagenic high -f`~AJ@HHpSdmV|CprRSESSSSMUUUT`@@ m3 mol mutagenic high -f`~P@`LZ@DHBBAB`cHheDdiXduUTuT@@ m3 mol mutagenic high -f`~PQ@FBUhu`AD@aJUYn{zjjfZ`@@ m3 mol mutagenic high -f`~X@@@TYhwdiUUU]jjjjj@@ m3 mol mutagenic high -f`~`J@NPQafcN|CprRRjYQQFMTuSS@@@ m3 mol mutagenic high -f`~`b`KLLBHHDTBNA@`aIneUYYjjjZ`@@ m3 mol mutagenic high -fbc@@@DjYeUU]VJEKQ`ybd@B@D@@B@@@ m3 mol mutagenic high -fbc@@@DjYeUoUvRDkQoIcd@B@@@@B@@@ m3 mol mutagenic high -fbc@@@DjYeUUVRDkQg^Sd@B@D@@B@@@ m3 mol mutagenic high -fbc@@@DjYeeU_VZEJt_ICd@@@@`D@`@@ m3 mol mutagenic high -fbc@@@DjYeeou~RD[W`qSd@@@B@P@`@@ m3 mol mutagenic high -fbc@@@LdbbbTRrTroIBMks`ir@@@@Q@@H@@ m3 mol mutagenic high -fbc@@@LdbbbTVraVSIBMkugIr@@@AP@@@@@ m3 mol mutagenic high -fbc@@@LdbbbTVtRqSEBMjsoIr@@@@T@@H@@ m3 mol mutagenic high -fbc@@@LdbbbbbVVrOEBlXKoIr@@D@B@@P@@ m3 mol mutagenic high -fbc@@@LdbbbbbbQQsEBMKuhir@@@@@@@@@@ m3 mol mutagenic high -fbc@@@LdbbbbbbQQsEBMKuhir@@@@QC@D@@ m3 mol mutagenic high -fbc@@@LdbbbbbbcJwEB]Hu`ir@@@@@@@@@@ m3 mol mutagenic high -fbc@@@LdbbbbbbcJwEB]Hu`ir@@@@DS@D@@ m3 mol mutagenic high -fbc@@@LdbbbbbbcJwEB]Jq`ir@@DA@@A@@@ m3 mol mutagenic high -fbcA@@@ILk\l|{txhug^BgKRtBPBAQ@@@ m3 mol mutagenic high -fbcA@@@ILsLjmwLDkqhnRGKP@@@@@@@@@ m3 mol mutagenic high -fbcA@@@IRlrrk{pQSbgVBgM@@A@@@@@@@ m3 mol mutagenic high -fbcP@@@JrQQJJZYIEITxKQkN|gH@@TUP@D@@@ m3 mol mutagenic high -fbc`@@@IRlrrk{pQSbgVBgMT@A@@AP@@@ m3 mol mutagenic high -fbc`@@@YHheDdihhTZLD[P[^Sd@@@@@@@@@@ m3 mol mutagenic high -fbc`@@@YHheEMDXlijREhuoQSd@@@@@@@@@@ m3 mol mutagenic high -fbeA`@@^rdrjljmkXKSUAAQT@ab@ m3 mol mutagenic high -fbe`P@J@QjNQQJZZJJJYWrVjjAbJH@@ m3 mol mutagenic high -fbe`a@KDtBlEVYEEDeDh]ddfR``hfzj`@@ m3 mol mutagenic high -fbeaS@Lfl{rPPd@a@QddRTRRTTWTtFj`hFXf@@@ m3 mol mutagenic high -fbepP@LZbAC`iLjmmnvjtuUMUTuP@@ m3 mol mutagenic high -fbepb@BZ}IPHaIf]V_VUgHHBfjjh@@ m3 mol mutagenic high -fbm@P@@BMGHhhhhhhm\esRoNBt@PT@UP@@@ m3 mol mutagenic high -fbm@P@@HD[HhdihdiddYSbk^BuHPTUMP`@@ m3 mol mutagenic high -fbm@Q@NV\DDPfHrJJIQPqIJFLUKT\pPM@LQA@@@ m3 mol mutagenic high -fbm@`@@HRYvYfUWTYrPyZh@@@H@@@@ m3 mol mutagenic high -fbm@`@@YRYVvW[WhpThi`@ij`@b@@@ m3 mol mutagenic high -fbm@a`FZADDbAQ@XaLQfHrJJJZIFYJK\ehwhpQDT@QQ@@@ m3 mol mutagenic high -fbm@a`FZADDbAQChbLQfHrJJJZIFZKP|ejpTpQDTDDQ@@@ m3 mol mutagenic high -fbm@p@@JMxJ\bbbbbbbRegAZb{KPADPLQ@@@ m3 mol mutagenic high -fbm@p@@JmxJ\bbbbbbTRacAZb{KPADDLQ@@@ m3 mol mutagenic high -fbmAP@@BLENQQQQQQQYG[bm^]Eh@bHAJ`@@ m3 mol mutagenic high -fbmAP@@BLGNQQQQQQQYGGbm^]Eh@bHAJ`@@ m3 mol mutagenic high -fbmAP@@BUGNQQQQQQPeIG`mNBehIb@@b`@@ m3 mol mutagenic high -fbmAP@@HCGNQQJIYJJKSDeEZBejjjjjjj@@ m3 mol mutagenic high -fbmAP@@HeENQQJJJIKZIUgMNmyj@H@Bj`@@ m3 mol mutagenic high -fbmAP@@JMxNQQQQQQQIRw`mQ\eh@bHFB`@@ m3 mol mutagenic high -fbmAP@@\e{NQQQJJKFIKYgEFbehFH`HB`@@ m3 mol mutagenic high -fbmAP@@\e{NQQQJJKFIKYgEFbehJH`HB`@@ m3 mol mutagenic high -fbmH@@@\myJYfUu^zgIFtx@@@BJj@@@ m3 mol mutagenic high -fbmH`@EVBdGlbbbbbbTRacAZb{KPADDLQ@@@ m3 mol mutagenic high -fbmH`@JRUDBTin]UUU~Bt[pZB@@@Bh@@@ m3 mol mutagenic high -fbmHp@J\DhBC^SgHheEDjheEdsdeNBuRsUUUU@@@ m3 mol mutagenic high -fbmIR@LLDiAoIr@HrJSJIHjIQY\EIS`uUJuUUUP@@ m3 mol mutagenic high -fbmPB@NA@DYHhhhddmcEJ\e[Sj@H@`jj@@@ m3 mol mutagenic high -fbmPB@NQ@DYHhhhddmbeJ\e[Sj@H@`jj@@@ m3 mol mutagenic high -fbmPBDK^@D@eJYfUu^zgIFtx@@@BJj@@@ m3 mol mutagenic high -fbmPP@KA@kr\bbbbbbTRacAZb{KPADDLQ@@@ m3 mol mutagenic high -fbmPQ@ARMyNPQAHaIf]UyYugIJ\FB@ijjjJ@@ m3 mol mutagenic high -fbmPa@NVtx@PHHrQQQJIPjXiTD[r\uK]S[@D@@@ m3 mol mutagenic high -fbmPb@AJ|dDPdrmrljoSfgQs@DMPTBD@@@ m3 mol mutagenic high -fbmQB@AJRBHRYVyV[WisShy`BFhJAB@@@ m3 mol mutagenic high -fbmQB@EZBBHrJIJZIQQYHtxhr\pACUAHA@@@ m3 mol mutagenic high -fbmQ`@DX@sJSJmsJkyJNbEKUM@@@E@@@ m3 mol mutagenic high -fbm`P@A@BgJSLsLoOsEZ}ZKPADABM@@@ m3 mol mutagenic high -fbm``@A@BdsLsJk|qVoVbt@Q@PeP@@@ m3 mol mutagenic high -fbmh@@@XIQRTsNj~rkNRtgHD@DU@@@@@ m3 mol mutagenic high -fbmhR@DXyJroIrBPrJIQQJIYPyTDZs`sUMUUURp@@ m3 mol mutagenic high -fbmi@@DTxIPLbbTTRqbRfSNRUxKUKM@AUP@@ m3 mol mutagenic high -fbmiP@DTxIPC^SgHheEDjheEdsdeNBuRsUUUU@@@ m3 mol mutagenic high -fbmiP@DTxIPMVSgHheEDbmDddsde^BuRsUUUU@@@ m3 mol mutagenic high -fbmiP@DXXKPC^SgHhdheDYeEeSdmNBtuUUUUK@@@ m3 mol mutagenic high -fbmiP@LF]EHIJugIEEEDdhjllRegAcUUUPHET@@@ m3 mol mutagenic high -fbu@AP@QAHadPJHeDZbGQ@XaLQfHrJJJ[PrZJ[TyzMLuUULuP@@ m3 mol mutagenic high -fbu@S@FZCDDPRH\DILs\}|r|dgLDQDuKTH@@ m3 mol mutagenic high -fbu@`@@IRYV{eg^irNX@aj```@Py@ m3 mol mutagenic high -fbu@`@@YRYWYeg_hrJVeffjef`@@ m3 mol mutagenic high -fbu@b@AVADYEDeCMHiXdjLSf@Bji`@@@@ m3 mol mutagenic high -fbu@b@AVADYEDeeMHiXdjLSf@Bji`@@@@ m3 mol mutagenic high -fbu@b@AVADYEEDeKHiXdf\Sf@`ji`@@@@ m3 mol mutagenic high -fbuAP@@BtFNQQQQQJKGIISk^Z@HH@j`@@ m3 mol mutagenic high -fbuAb`BJ\BHxDRbHqFXcHhhmDiXhmDpPTpPQLDDP@@@ m3 mol mutagenic high -fbuHP@DTtdCHyrJIJHqSSIQTxEKUMUUTsP@@ m3 mol mutagenic high -fbuI`@DXtX@dyEEEEDbddUFRLyjjZjZfX@@ m3 mol mutagenic high -fbuIp@DXyHBcV|gNQQJJIQYJGJ`gAZZjjjjj@@ m3 mol mutagenic high -fbuPJ@CA`cANJ}dGaddfJbTQbbvejJVjjjjYf`@@ m3 mol mutagenic high -fbuPb@GQxDDPdrnlkk]QakP@T@EMP@@@ m3 mol mutagenic high -fbuPr@FVQSaoIAHIM\w[KntDxMUUULuMP@@ m3 mol mutagenic high -fbuPr@NBYhwdyAbIJsNk[NbdxLtmTuUUPHP` m3 mol mutagenic high -fbu`P@D`EGNQQQQQUJYJIb`iZjjjjfZ@@ m3 mol mutagenic high -fbu`a@HLx@JpDYHheHiXddmgQBfje`@@B@@@ m3 mol mutagenic high -fbuaP@L`pIUdifV^}}ZR|FjjjB@k`@@ m3 mol mutagenic high -fbua`@D@uYIge]nyTTdyZ`@jh@@@@ m3 mol mutagenic high -fbupb@IZCrpHaIe]YfWjcOA`@jjYZb@@ m3 mol mutagenic high -fbupr@DDhJRgIrBHRYYymY_IRwiiijjjj`@@ m3 mol mutagenic high -fby@`@@HR[UUUUUZjjfjj`PT` m3 mol mutagenic high -fby@`@@HR[UUUUUZjjjjj`@@ m3 mol mutagenic high -fby@`@@YRUUUUUUjknknj`@@ m3 mol mutagenic high -fbyA`@@LdeJl{jjkSUMLsU@haxjSKd m3 mol mutagenic high -fbyPH@BZ@bR`qSgHieDeDXdhhuUSUTs@@@ m3 mol mutagenic high -fb}@@@DjYeeou~RD[Wdy@@@@`H@@@@ m3 mol mutagenic high -fb}@@@DjYee]^RD[S`q@@@@@B`@@@ m3 mol mutagenic high -fb}@@@LdbbbTRrJROEBMipT`@@@@DP@@@ m3 mol mutagenic high -fb}@@@LdbbbbbRJvcCBTzHT`@A@@@P@@@ m3 mol mutagenic high -fb}@@@LdbbbbbRVNSCBTzJ\`@QDTB@P@@ m3 mol mutagenic high -fb}@@@LdbbbbbRVNSCBTzJ\`@QDTD@P@@ m3 mol mutagenic high -fb}@@@LdbbbbbT^VgEBl[tT`@A@DTpD@@ m3 mol mutagenic high -fb}@@@LdbbbbbT^VgEBl[tT`@A@DUPD@@ m3 mol mutagenic high -fb}@@@LdbbbbbTqrOEBlXLT`@A@EEPB@@ m3 mol mutagenic high -fb}@@@LdbbbbbqfvSMBlYr\`@A@A@@@@@ m3 mol mutagenic high -fb}@B@@RBSJwKON}NJMYr\p@@@@P@@@@ m3 mol mutagenic high -fb}@B@@RBSLl|{vkART{r\p@@A@@@@@@ m3 mol mutagenic high -fb}@B@@RBSLl}kvkART{r\p@@A@@@@@@ m3 mol mutagenic high -fb}@B@@RBSLsKoN{AJlxJ\p@P@@@@@@@ m3 mol mutagenic high -fb}@B@@RFQQISQJJZUJgEFmyNX@@@B@@@@@ m3 mol mutagenic high -fb}@B@@RFQQQJIIQIKEgIF|ENX@@@H@@@@@ m3 mol mutagenic high -fb}@B@@RFQQQJIIZJYEgIFmyNX@@@@H@@@@ m3 mol mutagenic high -fb}@B@@RFQQQJJIJIIEgIVCfJX@@@B@@@@@ m3 mol mutagenic high -fb}@B@@RFQQQJKPiIII`iJlzJX@@@@@H@@@ m3 mol mutagenic high -fb}@B@@RFQQQJKPjJEI`iJmyNX@@@B@@@@@ m3 mol mutagenic high -fb}@B@@XfQJJJJIIPy[bmNlENZ@@@@@@@@@ m3 mol mutagenic high -fb}@B@@XfQJJJJJIJHgfc^\fNZ@@@@@@@@@ m3 mol mutagenic high -fb}@P@@HuYIeYUWUVcEF]yNViBBJ`B@@@ m3 mol mutagenic high -fb}@P@@HuYIeYUWUVcEF]yNViBBJjjF@@ m3 mol mutagenic high -fb}@`@@DRYfu{VuXIVg^Sei`P@@@`@@@ m3 mol mutagenic high -fb}@`@@DrJJJZIQIIHlEksdqsA@@@@@@@@@ m3 mol mutagenic high -fb}@`@@IRYe^um]HpTcVCEhH@@@J`@@@ m3 mol mutagenic high -fb}@`@@LrJJJJHpiII\dkSoIsTED@@@H@@@ m3 mol mutagenic high -fb}@`@@LrJJJJHpiSI\dkSoIsTED@@@H@@@ m3 mol mutagenic high -fb}@`@@LrJJJJHpqJH|dhw`isTED@@@H@@@ m3 mol mutagenic high -fb}@`@@LrJJJJHyISI\dkSoIsTED@@@H@@@ m3 mol mutagenic high -fb}@`@@LrJJJJHyJIK\dkS`isTED@@@H@@@ m3 mol mutagenic high -fb}@`@@LrJJJJJFHpi\UjsoIrtCA@@@H@@@ m3 mol mutagenic high -fb}@`@@LrJJJJJFHpi\UjsoIs@D@@@@@@@@ m3 mol mutagenic high -fb}@`@@LrJJJJKIIIH|Djw`isTEP@@@@@@@ m3 mol mutagenic high -fb}@`@@QrJJJJIIQ[Rldiq`~Rt@@@@QP@@@ m3 mol mutagenic high -fb}@`@@YRYVumUehrVkNBeijZfjjj`@@ m3 mol mutagenic high -fb}@`@@YRYVum[ehrRkNBf@BjjjjJ`@@ m3 mol mutagenic high -fb}@`@@YrJJQIFYIIKDyKUgQRuUTuPAT@@@ m3 mol mutagenic high -fb}@`@@YrJJQIFYJYKDyIUgQRuUUU@AU@@@ m3 mol mutagenic high -fb}A@@@IKLlrjk|Dip\qSP@@PEAA@@@ m3 mol mutagenic high -fb}A@@@ILrrkszlyHuoIs@@@@P@@@@@ m3 mol mutagenic high -fb}A@@@ILrsvoZlEISoIrtDPD@@P@@@ m3 mol mutagenic high -fb}A@@@ISZvmkZlxkSoQSP@@@AU@H@@ m3 mol mutagenic high -fb}A@@@ISZvmkZlxkSoQSP@@@AU@P@@ m3 mol mutagenic high -fb}A@@@IS\lrr}|UjwlacP@@DAL@P@@ m3 mol mutagenic high -fb}A@@@YDhhhhdeCenJtzpTyX@@@@@@@@@ m3 mol mutagenic high -fb}A@@@YDhhhhdeCenJtzpTyh@@@@@@@@@ m3 mol mutagenic high -fb}AP@@HeGNQQJJIQKIIVgIJlGrVi``@BJ`@@ m3 mol mutagenic high -fb}A`@@^sdTTTTRRRTqXIScQBeh@`@HB@@@@ m3 mol mutagenic high -fb}Ab@HHp@HrRRqQJKQYSRtZwhirm@@@@@@@@@ m3 mol mutagenic high -fb}P`@FJ@yIfY^]oTcIFmyNV`hJI`B@@@ m3 mol mutagenic high -fb}QB@I^DBHrJIKJSQQIHtYjw`is@AUTC@E@@@ m3 mol mutagenic high -fb}Q`@EV@`rSJvlkjmFRt{r\mR@A@@D@@@ m3 mol mutagenic high -fb}`@@@ISLsJr{tdjqh~r@@@@AD@@@@ m3 mol mutagenic high -fb}`@@@YHhhhhdddbj\dxtPy@@@@`B@@@@ m3 mol mutagenic high -fb}`@@@YHhhhhdhebZRUXt_I@@@@@``@@@ m3 mol mutagenic high -fb}`@@@YHhhhhdhehZRUXt_Y@@@@@b@@@@ m3 mol mutagenic high -fb}`@@@YHhhhheEDmZRTxrPy@@@@`H@@@@ m3 mol mutagenic high -fb}`@@@YHhhhhecLej\eXsdy@@@`@`@@@@ m3 mol mutagenic high -fb}`B@I@qDefYe^}~RtzpTyh@@@@@@@@@ m3 mol mutagenic high -fb}a@@A@RYVvWVuhrVg^Sf@@B@@@@@@@ m3 mol mutagenic high -fb}a@@B@rJJIJZKQZHldKW`is@@@D@@@@@@ m3 mol mutagenic high -fb}a@@I@RVYfU{wyKSkASe`@@@@@@@@@ m3 mol mutagenic high -fb}a@@I@RVYfU{wyKSkASf`@@@@@@@@@ m3 mol mutagenic high -fb}i@@DTxIPLbbTTRqbRfSNRUxJ\mTlt@EUD@@ m3 mol mutagenic high -fb}pB@ARlBHRYWYee}hpsk^Sf@Bjih@B@@@ m3 mol mutagenic high -fde@@@DjYeew]daZCD@BBBH@@@@ m3 mol mutagenic high -fde@P@@BLGHhhhhhhlcqVoNbt@QD@d@@@ m3 mol mutagenic high -fde@P@@B\EIfYfWgXkWkQZ@H`HR@@@ m3 mol mutagenic high -fde@P@@B|EIfYfW^XkSkQZ@H`Ab@@@ m3 mol mutagenic high -fde@P@@B}EIfYfW_XkSkAZ@H`AJ@@@ m3 mol mutagenic high -fde@P@@HmEIeYVuuhqQkNZdHHfjH@@ m3 mol mutagenic high -fde@P@@HuyIe[UWZhrRcVZd@JjjH@@ m3 mol mutagenic high -fde@P@@J]{HhhhhhdeBpV`vbt@Q@LD@@@ m3 mol mutagenic high -fde@P@@J]{HhhhhhdeBpV`vc@@A@T@@@@ m3 mol mutagenic high -fde@P@@V}GHhhhhdddfpRgFBt@P@dT@@@ m3 mol mutagenic high -fde@``ARADDb@qDXaIf]UUUYqVg^``Jh@h@@@ m3 mol mutagenic high -fde@b@AZAHILkmmrmFBdFL@ETp@D@@@ m3 mol mutagenic high -fdeAB`A@bBQCH`LQFHrJJJZEIII\dkSoPQDT@T@@@ m3 mol mutagenic high -fdeAB`E@bBQCH`LQFHrJJJZESII\DkSoPQAP@TP@@ m3 mol mutagenic high -fdeAC@A@bKQDXaIe]ke_hpRoA`@j``H`@@ m3 mol mutagenic high -fdeA`@@BBdsLsJklUkuhm@DPDI@@@ m3 mol mutagenic high -fdeA`@@DMdTTTtRRVLXKSk^ZXFBbjH@@ m3 mol mutagenic high -fdeA`@@ZcdbbTRVTJVipRoAhHbH@J@@@ m3 mol mutagenic high -fdeA`@@\udTTRbVfaRYrQ`qZA`h@B@@@ m3 mol mutagenic high -fdeH@@@\mEJYfUuWirQmN@@@@bh@@@ m3 mol mutagenic high -fdeH`@JZ|DBDfV]VUugEF]yjeifZj`@@ m3 mol mutagenic high -fdeI@@DRUXFQQZJIPiIJVcVCEj@bFiR`@@ m3 mol mutagenic high -fdeI@@DTYxBSOKKropQgAbuMT@@@@@@ m3 mol mutagenic high -fdeI@@D\tXBSOLkK{KRcAbuA@eTiP@@ m3 mol mutagenic high -fdeI@@HXHHBRrr{lkQbmAcSU@D@@@@@ m3 mol mutagenic high -fdeI@@HXIHBRsKj|kSbmAcMU@D@@@HPP m3 mol mutagenic high -fdeI@@JRUDBTwNjjkpVc^CPP@@@P@@@ m3 mol mutagenic high -fdeI`@LZCDDeYHhhidhblbTM[pZjjhDBh@@ m3 mol mutagenic high -fdeI`BLTEhDGZewIWNlkJ|DZLFMUMUUUU@aR@ m3 mol mutagenic high -fdeP`@AN@EIfYfWgXkWkQZ@H`HR@@@ m3 mol mutagenic high -fdeP`@E^@{HhhhhhdeBpV`vbt@Q@LD@@@ m3 mol mutagenic high -fdeP`@E^@{HhhhhhdeBpV`vbuHSPME@@@ m3 mol mutagenic high -fdeQ@@DXAdTTtTTRbqUXp_QZh@``A@@@ m3 mol mutagenic high -fde``@A@BdsLsKslUiuhm@DPAI@@@ m3 mol mutagenic high -fde`a@AZlBHYDYEDeDXhiij\Lywh@bifjJ@@ m3 mol mutagenic high -fde`b@H\d@HRfYfWwQJMxLZjfZ``H@@ m3 mol mutagenic high -fdea@@D@RYyVuUQRMXLVh@@@@@@@ m3 mol mutagenic high -fdea`@D@DGHhhhieeLbrVkN|uPL@AP@@@ m3 mol mutagenic high -fdea`@O@T{HhhhhhdeBpV`vbt@Q@LD@@@ m3 mol mutagenic high -fdei@@JJMYpLbTTRbbQVwMBUxMAATDAB@@@ m3 mol mutagenic high -fdei`@LZlFHIJrQQQQYQEYDhZw`uUUPHEP@@ m3 mol mutagenic high -fdei`@LZlFHIJrQQQSIQEYDhZw`uUUPHEP@@ m3 mol mutagenic high -fdep@@@NCdbbbbRVTqhJQm^@@@@hh@@@ m3 mol mutagenic high -fdep@@@XMdbbTRRReRhHu`qBBbj@@`@@ m3 mol mutagenic high -fdepA@BLBBlmVYEEEDhXXmNJd[tX@`@HH@@@ m3 mol mutagenic high -fdepB@DXb@HrJIQIIHqIDhkPXsUAA@@@@@ m3 mol mutagenic high -fdi@P@@Hl{HhehiheDT[sTuUSMPHD` m3 mol mutagenic high -fdi@S@HRMX@PkptDIUvnmZoAM@ASUT@@@ m3 mol mutagenic high -fdiAP@@HtxJSOLkkMISTAATs@@@ m3 mol mutagenic high -fdiPa@LR``@PHHrRPjJJKHyF\mPLQEP@@ m3 mol mutagenic high -fdiQ@@DT@drsMsJvbuTEDU@@@ m3 mol mutagenic high -fdiQQ@LJ``ug@BM^FRRVIKIRIHTeh@Ijj@@@ m3 mol mutagenic high -fdiQb@LR``P@cIIBhheedmjru@pQU@@@ m3 mol mutagenic high -fdiQb@LR``P@cIIBhhhlcdYru@qDU@@@ m3 mol mutagenic high -fdiY`@D\Eiw`TbdloJskjuUT@EUP@@ m3 mol mutagenic high -fdi`a@OJtCDMbIKJrwzsAT@QMUT@@@ m3 mol mutagenic high -fdiqb@JLtRR`RFQQQYIPiIIgJVjVjj`@@ m3 mol mutagenic high -fdiqc@DXipu`QBoCPQdTRbtQdrRIRZjjZjd@@ m3 mol mutagenic high -fdm@@@LdbbRbaRRsA\UKU`~b@@@@@@P@@@ m3 mol mutagenic high -fdm@@@LdbbbbbfjSCBUIuoAb@@@@APA@@@ m3 mol mutagenic high -fdq@P@@HMYIeUU{UZjjijh@@ m3 mol mutagenic high -fdqPP@JV@bT\bbTrTQRRSUUMUL``z@ m3 mol mutagenic high -fdqPQ@FBUhu`AD@aJUYn{ujjjYjh@@ m3 mol mutagenic high -fdu@@@DjYUUUU`nR\GtP@@@@@@@@@ m3 mol mutagenic high -fdu@@@DjYee]}daVuxLP`I@H@H@@@ m3 mol mutagenic high -fdu@@@DjYee]}daZlGtP@@@@@@@@@ m3 mol mutagenic high -fdu@@@DjYee]}faRlGtP@@@@@@@@@ m3 mol mutagenic high -fdu@@@DjYee_daFtxLP@@@@@@@@@ m3 mol mutagenic high -fdu@@@LdbbbTRerwIBMiw``@@@QT@`@@ m3 mol mutagenic high -fdu@@@LdbbbTRerwIBMiw``@@@QTA@@@ m3 mol mutagenic high -fdu@@@LdbbbTRrJwEBMipXp@PP@A@@@@ m3 mol mutagenic high -fdu@@@LdbbbTVtjSEBMjpXa@RA@@P@@@ m3 mol mutagenic high -fdu@@@LdbbbbbTUHeRlXOh`@@@@@@@@@ m3 mol mutagenic high -fdu@@@LdbbbbbVVOEBlXOh`@A@EBA@@@ m3 mol mutagenic high -fdu@A@@Q@XaIfV^]nXJRc^]F@@@@B@@@@ m3 mol mutagenic high -fdu@A@@Q@XaIfV^^^XJVcN}F@@@@B@@@@ m3 mol mutagenic high -fdu@A@@QBhcHhheDeDULpTmV|FL@@D@@@@@@ m3 mol mutagenic high -fdu@B@@ABTsJk^wb`mJmzM@@@@DP@@@ m3 mol mutagenic high -fdu@B@@ABTsJk^b`mJmxM@@@@AP@@@ m3 mol mutagenic high -fdu@B@@AFRJJJIIEYHeIFuXLZ@B@@@`@@@ m3 mol mutagenic high -fdu@B@@AFRJJJIIQIDeIFtEtZ@@@@``@@@ m3 mol mutagenic high -fdu@B@@AFRJJJIIQSDeIFtEtZ@@@@``@@@ m3 mol mutagenic high -fdu@P@@HLGHheDdhidYJqk^bFKUUUUUUP@@ m3 mol mutagenic high -fdu@`@@ARYegg[fBdhwgQZA@@hZA@@ m3 mol mutagenic high -fdu@`@@ARYegggfBehsoQZA@@bZA@@ m3 mol mutagenic high -fduA@@@IKJrkN{NJMipXt@A@@@P@@@ m3 mol mutagenic high -fduA@@@IKLl{[oAJmhpXt@@E@@@@@@ m3 mol mutagenic high -fduA@@@ILroZviFBdZpXmA@@@A@@@@ m3 mol mutagenic high -fduA@@@YDhdhddhTf\uXs`qh@@@@@@@@ m3 mol mutagenic high -fduA@@@YEEDhmEhTjLehu`qZB@@@B@@@ m3 mol mutagenic high -fduP@@@ARige[uVBeip_Qjjj`Pbh@@ m3 mol mutagenic high -fduQ@@FRAdbbTJbRrRIQVcVCFiPHJ@H@@@ m3 mol mutagenic high -fdu`@@@IRmjjviJBdZpX`@@@@@@@@@ m3 mol mutagenic high -fdu`@@@IRmkZviJBdZpX`@@@@@@@@@ m3 mol mutagenic high -fdu`@@@IRmrsziFRtZpX`@@@@@@@@@ m3 mol mutagenic high -fdu`@@@YHheEMDXTjREhu`q@@@@@@@@@ m3 mol mutagenic high -fdu`@@@YHheEMD\djREhu`q@@@@@@@@@ m3 mol mutagenic high -fdu`@@@YHheEhTddj\EHu`q@@@@@@@@@ m3 mol mutagenic high -fdu`@@@YHheEhTidj\EHu`q@@@@@@@@@ m3 mol mutagenic high -fdu`@@@YHhhhhdhbZRUXp_Q@@@@@@@@@ m3 mol mutagenic high -fdu`@@@YHhhhhdhcjRTxp_QB@@`H@`@@ m3 mol mutagenic high -fdu``@C@PdrmljmtYKUoAbuHAEUTT@@ m3 mol mutagenic high -fdua@@E@RfVU]uZLEhu`qhJ@@@@@@@ m3 mol mutagenic high -fdua`@E@QyIefUW]iqUcNCEj@@@JhD@@ m3 mol mutagenic high -fduh@@@XUkrTs\zsoSbcZ\FHPQTa@E@@@ m3 mol mutagenic high -fdy@P@@BtGHhhhheEcliuoM@DD@T@@@ m3 mol mutagenic high -fdy@P@@HHkHheDdhcLeHpXmPPL@@@@@ m3 mol mutagenic high -fdy@a@CVADQbLbbRrbbbQuF^C@ATC@P@@@ m3 mol mutagenic high -fdy@c@OAAD\BAABSJzlrsQchp@UA@p@@@ m3 mol mutagenic high -fdyA`@@FcdTTTbbveVhsUf`jHbj`@@ m3 mol mutagenic high -fdyAa@OAbBPUHYEEDhddYeFRMZB@B@i`@@ m3 mol mutagenic high -fdyH@@@PL{IDhhddih]JvoM@@ADT@H@` m3 mol mutagenic high -fdyHQ@DDiIU`qADBBLbbTVbaTVQJF]MMMUUU@@@ m3 mol mutagenic high -fdyIP@DXTx@cAbdsJslolyjsUSSUUTBDh m3 mol mutagenic high -fdyIP@DXxHDkAbdrs]k^txYsSUUUUL@@ m3 mol mutagenic high -fdyIR@DDiHRkAbBHrJIQZJEQYDhYtttuUUT@@ m3 mol mutagenic high -fdyP@@@HrJSQQUQIQ\d{uTuT@EH@@ m3 mol mutagenic high -fdyP@`ARADDbOQDXcHhhlleDeBsc`pPDpAD@HB` m3 mol mutagenic high -fdyPA@FN@DRBDieef\R`qhJBHH@@@@ m3 mol mutagenic high -fdyPP@LQ@bSdfUYiUmSkQZjBhJb@@@ m3 mol mutagenic high -fdyPQ@LN``u`AF`cIICDmdiCEQg`kUUTmUP@@ m3 mol mutagenic high -fdyP`@AR@EJ[WUe]Yqwj@Bh@J@@@ m3 mol mutagenic high -fdyP`@NJ@aIeeU~UehLVhHD`@@DIP m3 mol mutagenic high -fdyPp@DX@IU`qrJJIJIIPyLxYsUSSUUT@@ m3 mol mutagenic high -fdyPr@JLIIU`qAHILsjvskNF]RuSUUU@@@ m3 mol mutagenic high -fdy``@F@PdwLk{JbTFKPPQP@@@@ m3 mol mutagenic high -fdya@@D@RYyWUeQRCEj@Bh@@@@ m3 mol mutagenic high -fdya@@D@rJJJFJIIKVCzKUT@@@@@@ m3 mol mutagenic high -fdya`@I@UyIfUVyUEhLV``hjjH@@ m3 mol mutagenic high -fdyaa@AZMXDPrHrJIJHqQRqTxYt@QTsTd@@ m3 mol mutagenic high -fdyhP@AZlFHDDXdw]lrnfmxKUUTBAP@@ m3 mol mutagenic high -fdyhR@AZlFLDXhCprRRiIQQIYFmxKUUTBAP@@ m3 mol mutagenic high -fdypB@FR\@HrQQHqQIIZXi[uLuAAEP@@ m3 mol mutagenic high -fdypP@DT|@chyEDidhdeDQRlEj@@`X`@@ m3 mol mutagenic high -fdypQ@FVcSao@dDRFQRZJZYQKF`gAjjjifZ`@@ m3 mol mutagenic high -fdyp`@BRb@RSLzkrnsg`mRtt@E@HB` m3 mol mutagenic high -fdyp`@LLxABSKrjszJQgMTu@QT@@@ m3 mol mutagenic high -fdypp@DXT@QgAbdsJslolyjsUSSUUTBDh m3 mol mutagenic high -fdypp@DXxBVkAbdrs]k^tDYsSUUUUL@@ m3 mol mutagenic high -fdyppBDDDCbkAbR^]dTtRaTRbrXHsfiZjjjh@@ m3 mol mutagenic high -fdyq`@LLxA@TfWe^UtTg^Zij`@i@@@ m3 mol mutagenic high -fdyq`@LLxACdfWeUWTTcVZij@Jh@@@ m3 mol mutagenic high -fdyqb@IFmcpPABT{JvnvIVcUPACTtP@@ m3 mol mutagenic high -fdyqb@LFcA@`AFRREQQIJH{WcVVhIBhhP@@ m3 mol mutagenic high -fd}@`@@AReYU[WhHirQmV}DLZ@`P@HBB@@ m3 mol mutagenic high -fgA@@@DjYU_VByHu`@@@@@@@ m3 mol mutagenic high -fgA@@@LdbbbTVKIBMjp@@@@@@@ m3 mol mutagenic high -fgA@`@@\RfYe_irQmVh@`@H@@@ m3 mol mutagenic high -fgAAB@F@bDfUmUZ\EHuh@b`@@@@ m3 mol mutagenic high -fgAA`@@HLdrmlkQdmFluHADq@@@ m3 mol mutagenic high -fgAA`@@HtdrmjkQdeFluH@UP`@@ m3 mol mutagenic high -fgAH@@@RM[IEDhmBeS`eZL@@DMA@@@ m3 mol mutagenic high -fgAH@@@XDYJYYmvdfBuXHJbYF@@ m3 mol mutagenic high -fgAH@@@XDkIEDhhdkRSAFlDEQRc@@@ m3 mol mutagenic high -fgAH@@@XhiJYmg]gAJMXH`jeF@@ m3 mol mutagenic high -fgAP@@@LrQQJEIITxJQk@QE@@@@@ m3 mol mutagenic high -fgAP@@@LrQQJJYPtdKQk@@@@@@@@ m3 mol mutagenic high -fgAP@@@\RfYe_irQmV@@@@@@@@ m3 mol mutagenic high -fgAP@B@BAHirRJIJHkLUpQkAPP@A@@@ m3 mol mutagenic high -fgAPB@LD@DISJJdhsakTuT@E@@@ m3 mol mutagenic high -fgAQ@@D\@drjjkQ`iFm@AT@@@@@ m3 mol mutagenic high -fgAQ@@F\AdbbTJRRIPTcVjUj@H@@@ m3 mol mutagenic high -fgA`@@@ISKJntXKQk@@@@@@@@ m3 mol mutagenic high -fgA`@@@ISLrotyHvk@@@@@@@@ m3 mol mutagenic high -fgA`@@@ITsZkdYHvkU@@@D@@@ m3 mol mutagenic high -fgA`@@@YHheEMEZRDhu`@@@@@@@ m3 mol mutagenic high -fgA`@@@YHheEhTj\EHu`@@@@@@@ m3 mol mutagenic high -fgA`B@N@BDifYWz\d[Uj@H@B@@@ m3 mol mutagenic high -fgAa@@K@RfYU_qPVeFh@@@h@@@ m3 mol mutagenic high -fgAp@@@RMdbbTVaVipRmF@@BF``@@ m3 mol mutagenic high -fgAp@@@XDeLzmkQ`iFlDAP@D@@@ m3 mol mutagenic high -fgAp@@@XIdbbaRRRqPTcVZ`@@H@@@ m3 mol mutagenic high -fgAp@@@XheLvnjs`iFlDPT@@@@@ m3 mol mutagenic high -fgAp@@@XxeLzjkQ`iFlDAT@@@@@ m3 mol mutagenic high -fgApB@LLx@HRevUUpPTcViYj@H@@@ m3 mol mutagenic high -fha@P`BLxHDQSp}DAbDeUkUUZjZjjh@@ m3 mol mutagenic high -fha@P`BLxHFISp}bAqDeUkUUZjZjjh@@ m3 mol mutagenic high -fha@R@HHpPG`eUjjjjuUUUU@@@ m3 mol mutagenic high -fha@s@DXHJR`ADOBgadTbRTbVQSUTuUT@@ m3 mol mutagenic high -fhaA`@@HhdvvjjjuUUUU@@@ m3 mol mutagenic high -fhaP`@DFAkHhdddeDTfjjijh@@ m3 mol mutagenic high -fhaPq@BA`cAg^@DVBLddNRRRRdVjjje`@@ m3 mol mutagenic high -fhaYA@DXHKPY@BOABSNrrzsTtuULAAKd@ m3 mol mutagenic high -fhe@@@DjYfYuvJEXpW^@@B@I@H@@ m3 mol mutagenic high -fhe@@@DjYfYuvJEXpW^@@B@J@H@@ m3 mol mutagenic high -fhe@@@LdbbRbbvJYKfaJ|D@@bH@@@@@ m3 mol mutagenic high -fhe@@@LdbbbTReryHQmN|D@@@BI@`@@ m3 mol mutagenic high -fhe@@@LdbbbVTJrYHQeZ|D@`B`@@@@@ m3 mol mutagenic high -fhe@@@LdbbbbbbcxhQiNlD@@@@H@@@@ m3 mol mutagenic high -fhe@B@@ABTrnjjnJ\Ehw`tB@@@D@@@ m3 mol mutagenic high -fhe@B@@ABTrnkJ~J\Ejw`tB@@@D@@@ m3 mol mutagenic high -fhe@B@@ABTroZjnJ\Ehw`tB@@@D@@@ m3 mol mutagenic high -fhe@B@@ABTroZvnJ\Ehw`tB@@@D@@@ m3 mol mutagenic high -fhe@B@@ABTrssziJBUhw`tB@@@D@@@ m3 mol mutagenic high -fhe@B@@AFRJIKSQJHxirQk^CPH@@@P@@@ m3 mol mutagenic high -fhe@B@@AFRJIQZKPiDhIVc^CPH@@@P@@@ m3 mol mutagenic high -fhe@B@@QBSLl|{[ARTYw`p@@@@@@@@ m3 mol mutagenic high -fheA@@@IRlk\~pQSdm^CUAAD@T@@@ m3 mol mutagenic high -fheA`@@B|eJkjrmAEFNCxMUUUUUU@@@ m3 mol mutagenic high -fheA`@@TdeJsZvoACNZmxMA@P@@@@@@ m3 mol mutagenic high -fhe`@@@ILkJl{tYKRk^C@@P@@D@@@ m3 mol mutagenic high -fhe`@@@ILrsZklxJQoNC@P@@@D@@@ m3 mol mutagenic high -fhe`@@@YEDeDdeBeQbcZmxL@@@@@@@@@ m3 mol mutagenic high -fhea@@D@RYYU[WirVcV|F@@@@@@@@@ m3 mol mutagenic high -fhea@@D@rJIJIIJEJcEFu[pX@@@@@@@@ m3 mol mutagenic high -fhea`@E@iIJUfv]nBFBL{pZB@`@@@@@ m3 mol mutagenic high -fhep`@BLT@NQQQQQQRq\tJQkN|uLuUTuP@@ m3 mol mutagenic high -fhi@B`@QAHadPzHCDYEEELUDeCpUoPQA@DP@@@ m3 mol mutagenic high -fhi@R@HHpPG`eUoLjn[s`mU@@@@@@@ m3 mol mutagenic high -fhi@`@@ArJIKJQPiZcG^`@j`@`@@ m3 mol mutagenic high -fhi@a@AFADAbDfUmygZL]z@BhHB@@@ m3 mol mutagenic high -fhi@c@BFADRb@qFQQQIIPqYLD{tDDPPD@@@ m3 mol mutagenic high -fhi@c@BFADRb@qFQQQIIPq[LD{tDDPPD@@@ m3 mol mutagenic high -fhiAA@C@b@qBSJ{Lk}FN}@ATDA@@@ m3 mol mutagenic high -fhiAP@@Lt[vQQQRJKYE\d{sSUTruP@@ m3 mol mutagenic high -fhiA`@@B|dsLro~jqgM@D@AP@@@ m3 mol mutagenic high -fhiA`@@HBdrszroScoMSLp@T@`J@ m3 mol mutagenic high -fhiA`@@H|dwMkZ{IUgMT@@AP@@@ m3 mol mutagenic high -fhiA`@@LCdTRTQRbRuNN}@DS@A@B@h m3 mol mutagenic high -fhiE@BBTYIQoA@rY\drkKN{hsoUTt``T@@@ m3 mol mutagenic high -fhiHA@MFlDDPRHrJJKKQQQUgK^``HBH`@@ m3 mol mutagenic high -fhiHP@DXyhDoARYYn]uhHuffjjji`@@ m3 mol mutagenic high -fhiHR@DDhJQoAADILl{[NdijttuuUUP@@ m3 mol mutagenic high -fhiH`@DXtX@lbbbbbQRRYHsfjijii`@@ m3 mol mutagenic high -fhiH`@LTEhBDfWVUm]F|Ejf@@@@DJP m3 mol mutagenic high -fhiHa@LTdFB@A@`cIIBhhddmmNMYZ`hJJD@@ m3 mol mutagenic high -fhiIB@DXHI`@aIg[ee_UoAZi`@@@@@ m3 mol mutagenic high -fhiIP@DDhpDc^BdwJ|lzsfkMMMUUU@@@ m3 mol mutagenic high -fhiIP@DXxHDc^CdTRbbeTVSNZltuUUUT@@ m3 mol mutagenic high -fhiIP@DXxHDc^CdTRbfaTVUNZltuUUUL@@ m3 mol mutagenic high -fhiI`@DXYH@`yEDeDbhdmScoMUJp@T@`J@ m3 mol mutagenic high -fhiP@@@^Rfuue]Yrsj@B`@h@@@ m3 mol mutagenic high -fhiPA@FV@DTBDiee~yqJ|F`hHB@@@@ m3 mol mutagenic high -fhiPP@DB@SblbfdtQfbRHspVjff@B@@@ m3 mol mutagenic high -fhiPR@AFIsPPRBSL{sNiFV]UUULtt@@ m3 mol mutagenic high -fhiPR@JLIIpPRBSLzmj{NFmRuSUUT@@ m3 mol mutagenic high -fhiP`@DZAyIgVYW^VkNZjdHBh@@ m3 mol mutagenic high -fhiPb@OA``@QddabbRRvRkF\m@@@E@@@ m3 mol mutagenic high -fhiPp@DX@IQoARYeYv}YsUfjffjj`@@ m3 mol mutagenic high -fhiQ@@DX@drlrloks`mTEATQ@@@ m3 mol mutagenic high -fhiQ@@INAdTTTbRarrk^BtEP@@@@@ m3 mol mutagenic high -fhiQP@DN@Qg@iLoJjnbdZsUUPAR@@@ m3 mol mutagenic high -fhiQP@DX@IW`yEEDeDdbdsakMUMMUU@@@ m3 mol mutagenic high -fhiQR@IV`Sa``dLbRbTQbbvXIwjjjjYf`@@ m3 mol mutagenic high -fhiQR@JLIIW``BDfYu[UV\MZejfjjh@@ m3 mol mutagenic high -fhiQR@JLIIW``kDfYu[UV\MZejfjjh@@ m3 mol mutagenic high -fhiQR@LVXhw``BLdTVbRbbqqRVjYjjZj`@@ m3 mol mutagenic high -fhiQR@LVXhw``QLdTVbRbbqqRVjYjjZj`@@ m3 mol mutagenic high -fhiX@@@PHJpTiZUWYz\MyjjbAb@DCH m3 mol mutagenic high -fhi`P@L@yHrTrlm{}AN}UUTDAP@@ m3 mol mutagenic high -fhi`P@O@YivQQQRIV[SDXhsPUADu@@@ m3 mol mutagenic high -fhi``@A@|eMkkJzsegT@E@AP@@@ m3 mol mutagenic high -fhi`p@D@Dhw`iLrl{^lyjsUKUUUP@@ m3 mol mutagenic high -fhia@@E@rQQQHyJIHToAhJ@h@@@@ m3 mol mutagenic high -fhia@@F@rJJIIJZIDRoAjBBB`@@@ m3 mol mutagenic high -fhiaB@ARADILk[OZtYxL@EM@@@@@ m3 mol mutagenic high -fhiaB@K^@DISLjo{Bthu@@@EL@@@ m3 mol mutagenic high -fhih@@@XIQRTsNjKNRtA@AEU@@@ m3 mol mutagenic high -fhii`@DTxIPGArJIQQJiJYgIJZiYjjj@@ m3 mol mutagenic high -fhii`@DTxIPK^rJIQQHpsQgEZZPhBjh@@ m3 mol mutagenic high -fhipP@DXx@w`yEDhihUEePVkMMUSUS@@@ m3 mol mutagenic high -fhipP@DXxBW`iLlwZztDZsSUUUTp@@ m3 mol mutagenic high -fhipR@BTYIW``qDfY][UV\MZejfjjh@@ m3 mol mutagenic high -fhipS@IZCpSo@bBAA`cHhheHeTiFJlFBAXiVH@@ m3 mol mutagenic high -fhipS@IZCpSo@bBAA`cHhheHeTiFJlFBAXjVH@@ m3 mol mutagenic high -fhipb@AZL{pLQIe]e]ncEZ`@iZfb@@ m3 mol mutagenic high -fhipp@DXH@Rc^BdsJsmzsfkMUMMUU@@@ m3 mol mutagenic high -fhiq@@DZBCHheEDeDceNmyj@@`B@@@ m3 mol mutagenic high -fhiqB@IF]hDadTTTbfLVWE^CMUTmRt@@ m3 mol mutagenic high -fhiqP@DXH@RoArJJIJIIEIgCVZjZZjj@@ m3 mol mutagenic high -fhiqP@DXxBQoArJIQSPjKJ`mVZZjjjf@@ m3 mol mutagenic high -fhiqP@DXxBVoARYYnuuhHuffjjji`@@ m3 mol mutagenic high -fhiq`@DXX@SdfUgyVj\lyjiZjjh@@ m3 mol mutagenic high -fhq@`@@AJDaHRDRHrHPVB`Hbjj`@@ m3 mol mutagenic high -fhq@`@@JRVUeZZYq`@jjj@@@ m3 mol mutagenic high -fhq@p@@HdkQlbbTLTTvRHqjZfZj`@@ m3 mol mutagenic high -fhq@p@@LdkUlbbbbVRLrxIijjif`P]@ m3 mol mutagenic high -fhqA``BZLBHyxRbEAFQQQIIRUILEAADuU@@@ m3 mol mutagenic high -fhqH`@L\MXBLbbTTJbbLTYjh@bj@@@ m3 mol mutagenic high -fhqP@@@XRe]UUUpQijjjj`@@ m3 mol mutagenic high -fhqQ@@DT@drlsLjXKUAQEP@@@ m3 mol mutagenic high -fhqQa@EVEHpHc`QdTRVTaTrUFP@RtuP@@ m3 mol mutagenic high -fhqXB@J\dZpPAFRIJIJJqIBeUSMMUpHJ` m3 mol mutagenic high -fhuA@@@IRlrjwPQSbgFC[u@@@@@@@@@ m3 mol mutagenic high -fhy@@@LdbbbTRrNYHVoA@@```@@@@ m3 mol mutagenic high -fhy@B@@XbRsLrjIZ}XM@@@A@@@@ m3 mol mutagenic high -fhy@`@@TrQQRJKSE[deV|F`jH@@`@@ m3 mol mutagenic high -fhy@`@@\RYee~uYrVoAZA``@H@@@ m3 mol mutagenic high -fhyA@`A@bBQGh`LPdsNjjjsdeV]A@U@E@@@@ m3 mol mutagenic high -fhyA@`F@bMQCh`LQdTTTTQbVSN\U[tDPAAE@@@ m3 mol mutagenic high -fhyA@`G@bEQEh`LPdsKOKrrQoN}A@qSUE@@@ m3 mol mutagenic high -fhyA`@@BMdTTTTTTVoEZ|xL@A@P@@@@ m3 mol mutagenic high -fhyA`@@BMdTTTTTTVoMJ|xKPAAPA@@@ m3 mol mutagenic high -fhyA`@@B|dsLsKnqVgVBt@Q@BP@@@ m3 mol mutagenic high -fhyA`@@DtdsMksjpRc^CA@@P@@@@@ m3 mol mutagenic high -fhyA`@@Hldrlk[oQbcN|uHPQUP`@@ m3 mol mutagenic high -fhyH@@@RM[IEDhmBdeJ\DkQ`@@ajhH@@ m3 mol mutagenic high -fhyH@@@RlyJYY{W^gAJMX@@HfjB@@ m3 mol mutagenic high -fhyH@@@Rl{IEDhmCDcJ\DkU`@@bjhD@@ m3 mol mutagenic high -fhyH@@@XEkIEDhheYdjRXKpP`jJ@@P@@ m3 mol mutagenic high -fhyH@@@XxkIEDeDehTjBYspP`Xj@@`@@ m3 mol mutagenic high -fhyHB@FR|DDPdrmkZkSdeV]@@@@E@@@@ m3 mol mutagenic high -fhyI@@DTeXBSOJwJxeZmxKT@QUJL@@ m3 mol mutagenic high -fhyI@@H\EhFQJJIPiIQ\dkS`tADMSIP@@ m3 mol mutagenic high -fhyI@@LDmxFRJIHqQJKTXYuoTuPDPtP@@ m3 mol mutagenic high -fhyI`@LJMxD`yHhhhUEedRfcN}UUTBAT@@@ m3 mol mutagenic high -fhyP@@@VRe]VYWISUoAjjjP`J@@@ m3 mol mutagenic high -fhyP`@BZ@aInUe{W`mF|Ejjj`@X@@ m3 mol mutagenic high -fhy`@@@ISLjm{btjw`t@@@@@@@@ m3 mol mutagenic high -fhya@@O@RYVyYiqQkN`@@@B`@@@ m3 mol mutagenic high -fhyh@@@\eYvRJJJJUKKTxkQk@AA@uPP@@ m3 mol mutagenic high -fhyh@@@\e[vRJJJJUIITxkQk@AA@uPP@@ m3 mol mutagenic high -fhyh`@LJMxHIYHhhhUEedRfcN}UUTBAT@@@ m3 mol mutagenic high -fhyi@@HXIipDefWVuj\TYwijh@@H@DHH m3 mol mutagenic high -fhyp@@@XheLwKjjsde^BDPUPP@@@@ m3 mol mutagenic high -fhyp@@@^CdbbbbRRqUNRmip@@@PT@@@ m3 mol mutagenic high -fhyq@@DTTAIgeUUTTmF|Ej@Bh@@@@ m3 mol mutagenic high -fkAA`@@TTeJwsLDDXkVcUUUUUP@@ m3 mol mutagenic high -fle@P@@HlgHhdeECDhl[^\EjjifffP@@ m3 mol mutagenic high -fle@`@@IrJJIERJEJYgOA`HJh@J@@@ m3 mol mutagenic high -fleA@@@YEEMDleHiJJQoM@PUUUD@@ m3 mol mutagenic high -fleA`@@HhdskLl{~cNBuT@@DR@@@ m3 mol mutagenic high -fleA`@@QSdTTTRRTqfdcZ\t@@AEL@@@ m3 mol mutagenic high -fleHP@DTuDC@irJIJHqZIJJgOQZijjjYh@@ m3 mol mutagenic high -fleH`@G^BdELdTtRRJbbQyHLZBBJ@``@@ m3 mol mutagenic high -fleIP@DXxHDgQSdTRbffbTNUNV|tuUUUTp@@ m3 mol mutagenic high -fleIb@LB\fBK@BLddJbbRTVVuypUj@@HB`@@ m3 mol mutagenic high -fleP@@@DrRJPqQPiIYtPijjh@@@@@@ m3 mol mutagenic high -flePR@MA`cA@^FRRXqQJJMJJMjsU@QCUQ@@@ m3 mol mutagenic high -flePq@JLIIShiAVVdLbbbrRfTbJYpwjVjZjjj@@ m3 mol mutagenic high -flePr@FVQSaoIAHIM\w[KoPS`uUUTsTt@@ m3 mol mutagenic high -fleQP@EQ@RsoYEEEleDhiXRcNMUUULuT@@ m3 mol mutagenic high -fleQa@AVQ``@bGadTbRTRRLrUgQRuUAP@@@@@ m3 mol mutagenic high -fleQp@DXArVcQSdTTRbbtRjSAN|uUUMUUP@@ m3 mol mutagenic high -fle`Q@LPQxH@bpQddebbTVVdleF\m@@ABt@@@ m3 mol mutagenic high -fle``@G@edbbTRbbNv`mV}PPE@QT@@@ m3 mol mutagenic high -fle``@O@bdsJl{zpmV\tD@@EL@@@ m3 mol mutagenic high -flea@@E@RfVYUV\tWIjh@`B`@@@ m3 mol mutagenic high -flea`@I@U{HhhddihddQZbehHJJjh`@@ m3 mol mutagenic high -flehPBDX}EHAJCFT}dTTRTRRJRsNFluTtuUKP@@ m3 mol mutagenic high -flep@@@XleLl{rkMA^RDEEAAP@@@ m3 mol mutagenic high -flepR@F\EhtT`qDeYeumUEIwiiZijjjABD@ m3 mol mutagenic high -flep`@IJR@bSLj~rnlExKTmS@AT@aJ@ m3 mol mutagenic high -flepr@DDhJRgQRBHRYYym[teK^fffjjjh@@ m3 mol mutagenic high -flepr@M^SAFB\\CprRSEQIZJKZR`qZjjjfVh@@ m3 mol mutagenic high -fleqQ@BTYIShiAVVdLbbbVRfTbJYpwjVjZjjj@@ m3 mol mutagenic high -fli@`@@HRYUoV]YjZfZjhFBPiT@ m3 mol mutagenic high -fliAP`BJt{p@bG``HpDYEHdeCEeEluUTuMT@@ m3 mol mutagenic high -flm@@@DjYee]{YhTkA|d@@@@@`@@@ m3 mol mutagenic high -flm@@@DjYee]YhTkA}D@@@@@H@@@ m3 mol mutagenic high -flm@@@DjYeeoyHQm^bd@@@B@@@@@ m3 mol mutagenic high -flm@@@DjYee[yHQmNBd@@@@@`@@@ m3 mol mutagenic high -flm@@@DjYee]yHQmNCD@@@@@H@@@ m3 mol mutagenic high -flm@@@DjYee^yHQmNCD@@@@@H@@@ m3 mol mutagenic high -flm@@@DjYee_yHQmNCD@@@@@H@@@ m3 mol mutagenic high -flm@@@LdbbbTRRJrYHVkAbd@@B@@@@@@ m3 mol mutagenic high -flm@@@LdbbbTRfvQyHQm^CD@@@BbhA@@ m3 mol mutagenic high -flm@@@LdbbbTRrJRxhQmNBd@@@@@`@@@ m3 mol mutagenic high -flm@@@LdbbbTRrVQyHQm^bd@@@@`@@@@ m3 mol mutagenic high -flm@@@LdbbbTRraQxhQmNbd@@@@H@@@@ m3 mol mutagenic high -flm@@@LdbbbTRvRQyHQmNbd@@@@H@@@@ m3 mol mutagenic high -flm@@@LdbbbTVRcRXhQmNbd@@@B@@@@@ m3 mol mutagenic high -flm@@@LdbbbbbT^VxhUc^CD@@H@bhA@@ m3 mol mutagenic high -flm@@@LdbbbbbT^VxhUc^CD@@H@bhB@@ m3 mol mutagenic high -flm@@@LdbbbbbVNVxhUc^bd@@H@@@@@@ m3 mol mutagenic high -flm@@@LdbbbbbqeRYhUcNbd@@H@@@@@@ m3 mol mutagenic high -flm@@@LdbbbbbqvRYhUcNbd@@H@@@@@@ m3 mol mutagenic high -flm@B@@AFRJJJIISKHdiHvoQSP@P@PA@@@@ m3 mol mutagenic high -flm@B@@QFQQQQQIJGKLdjqoQS@@@@@@@@@@ m3 mol mutagenic high -flm@`@@QRYfYUgydeNLGrV`@@@BH@@@ m3 mol mutagenic high -flmA@@@ILkZvmkQdeV]EL@@@@@@@@@ m3 mol mutagenic high -flmA@@@ILroZrnQ`iFmEKPP@@PD@@@ m3 mol mutagenic high -flmA@@@ILroZvjQ`iFlFKPP@@@T@@@ m3 mol mutagenic high -flmA@@@ILroZvlQ`iFlFKPP@@@T@@@ m3 mol mutagenic high -flmA@@@ILroZvnQ`iFlFKPP@@@T@@@ m3 mol mutagenic high -flmA@@@ILrrknjsdcV]EL@@@@@@@@@ m3 mol mutagenic high -flmA@@@ILrsssoQdmFmEKPP@@PD@@@ m3 mol mutagenic high -flmA@@@ILrszmkQdeV]EKPQ@@@D@@@ m3 mol mutagenic high -flmA@@@YEDeMDhmBeSbcV]EL@@@@@@@@@ m3 mol mutagenic high -flmA@@@YEEDeieEBdQ`iF]EKPP@D@D@@@ m3 mol mutagenic high -flmA@@@YEEDhihcBdqTcV]EL@@@@@@@@@ m3 mol mutagenic high -flmA@@@YEEDhmBeLdpTeV]EKPQ@@@D@@@ m3 mol mutagenic high -flmA@@@YEEDhmBeLdpTeV]EL@@@@@@@@@ m3 mol mutagenic high -flmA@@@YEELeDdeBepQgV}EMP@@@@@@@@ m3 mol mutagenic high -flmPB@JQAbIKJr|jlsfk^RFMUUTDCED@@ m3 mol mutagenic high -flmQb@LA`bp@cIICMDeMDUARd[S`qVjZjZfi`@@ m3 mol mutagenic high -flm`@@@ILkZvmkQdeV]EL@@@@@@@@@ m3 mol mutagenic high -flm`@@@YHhhhhdddkSdgFbEH@@DDTHD@@ m3 mol mutagenic high -flm`@@@YHhhhhdhb]RRkFCzH@@@@@P@@@ m3 mol mutagenic high -flm`@@@YHhhhhdhbmRRkFCyH@@@@A@@@@ m3 mol mutagenic high -flm`@@@YHhhhhdhecRRkFcyH@@@@D@@@@ m3 mol mutagenic high -flm`@@@YHhhhhdhecRRkFcyH@A@ALPD@@ m3 mol mutagenic high -flm`@@@YHhhhhdhecRRkFcyH@PAHE@P@@ m3 mol mutagenic high -flm`@@@YHhhhhdhecRRkFcyH@PAPD`P@@ m3 mol mutagenic high -flm`@@@YHhhhheED[RRgFbEH@@@D@@@@@ m3 mol mutagenic high -flm``@J@SdbbbbLTtQqJRl[pXtC@@@AP@@@ m3 mol mutagenic high -flm``@K@PdrlkZk]FJLxLTmRDDUUQP@@ m3 mol mutagenic high -flma@@@`rJIJZIQPiZgEZmxLX@@@BI`H@@ m3 mol mutagenic high -flma@@E@RfVU^_VcAZLzJZB`@H@@@@@ m3 mol mutagenic high -flmaA@KQ@DPdLdtTRbtJfRyIVkNbfifZiZej@@ m3 mol mutagenic high -flma`@E@PGHheEDdhlbj\TxwhiZ`@@`j`P@@ m3 mol mutagenic high -flmp@@@VbeJvsOviJBUYtT`@AEP@A@@@ m3 mol mutagenic high -flmq@@DVbAIee^WmZ\djshiZ`PJ`@b@@@ m3 mol mutagenic high -flu@B@@YbULsJjozCZOdu@@@@@@@@@ m3 mol mutagenic high -flu@P@@BBgHhhhhhehlVJtztV`BH@dh@@@ m3 mol mutagenic high -flu@P@@BLGHhhhhhhlcnJuytV`BH`Dh@@@ m3 mol mutagenic high -flu@P@@B|gHheIhcEDiRLu[pVfjjjjZ`@@ m3 mol mutagenic high -flu@P@@HL{HheEhhdhh~BlGtVijjijj`@@ m3 mol mutagenic high -flu@P@@\\eIfVWyWv\ehLV`hHB@h@@@ m3 mol mutagenic high -flu@P@@\uyIfVWnuv\dZJV`XJ@`H@@@ m3 mol mutagenic high -flu@`@@IRYfUV}~QmNCEh@@@@H@@@ m3 mol mutagenic high -fluAA@A@bDqFQQIYRZJIGTYYpXp@UPTAD@@@ m3 mol mutagenic high -fluAA`A@bBQCHatQFHSDYEEEMBdeEerRm^CADQPPT@@@ m3 mol mutagenic high -fluAP@@B\ENQQQQQQKQXlUkuhm@DPDIP@@@ m3 mol mutagenic high -fluAP@@B\FJSLsLoJlUkudm@DPDLP@@@ m3 mol mutagenic high -fluAP@@HdkrSKLvzjlxYtTmT`pQUP`@@ m3 mol mutagenic high -fluA`@@FmdbfbTTRbawEZ|EM@@@TA@@@@ m3 mol mutagenic high -fluA`@@LbdsLn}kkNRuxKPTD@AT@@@ m3 mol mutagenic high -fluH@D@\|DDiSLrno}SdcZ\@@@AET@@@ m3 mol mutagenic high -fluHP@CNbdDeZrQQQQIJJkHeKNCFjjj`PJ`@@ m3 mol mutagenic high -fluHP@DLtdGGArJJIQRzJJY`iJbejijjYjh@@ m3 mol mutagenic high -fluHP@DTuDC@irJIJHqZIJJgIJ}Ejfjjifh@@ m3 mol mutagenic high -fluH`@DXYh@lbbRbTVaRRisQoAZZfd@Jh@@ m3 mol mutagenic high -fluH`@DXlDGlbbbLTRvTtISQhiZj@`ijb@@ m3 mol mutagenic high -fluHb@BJtFW`QFQQQIZKQFZLDZtTpPPuTuE@@@ m3 mol mutagenic high -fluHb@LLxxLPABTnrjkmxHJQkTlu@EMP@@@ m3 mol mutagenic high -fluI@@DRUXFQQZJIPiIIRtZpXmPDPuKE@@@ m3 mol mutagenic high -fluI@@DTXDFQQZIQKQQH|DYtTmSU@A@@@@@ m3 mol mutagenic high -fluI@@D\tXBSOLkKzrthpXmPPIUKE@@@ m3 mol mutagenic high -fluIP@DTxHFgQSdTRbRJbTVSNBe[sSMUUUTp@@ m3 mol mutagenic high -fluIP@LF]DDeZSdbbbbRTUVQJV\FMUUU@`U@@@ m3 mol mutagenic high -fluI`@FNbdAMILs[[N}SagAcUUUPHEP@@ m3 mol mutagenic high -fluPB@AJADYEDeMDeELcSfgQS@DMPT@P@@ m3 mol mutagenic high -fluPP@B\@bslbfbTTRTrJDkQhiZjfjX@`@@ m3 mol mutagenic high -fluPP@DTAsUlbbTTTlTvRXHshiZjZfX@`@@ m3 mol mutagenic high -fluPR@JLHkU`RBSL|kMjlyxLTtmUMUUU@@@ m3 mol mutagenic high -fluP`@DIAEIeUYU}jLehufiZYfij`@@ m3 mol mutagenic high -fluP`@DX@qIeVyeUrT]DJVjZ@@@H@@@ m3 mol mutagenic high -fluQB@AJbBHRYVyV]VgMNBf@HZ``P`@@ m3 mol mutagenic high -fluXP@L\MZJPRUkIEEEDdeFdbTLxLZjjjP@j@@@ m3 mol mutagenic high -flu``@C@PdwLl|{XmNbEKPP@@@@@@@ m3 mol mutagenic high -flu`a@BJ|CDebYEEEheDXdlpQkQSAADtB@P@@ m3 mol mutagenic high -flua`@A@\EIfYfWgvJuztV`BHBDh@@@ m3 mol mutagenic high -flua`@O@TyIfYfUYvBtFrV`BHAbH@@@ m3 mol mutagenic high -fluab@FF|D@QdbbTVbtjfQJBUjuRsUMMTh@@ m3 mol mutagenic high -fluhP@DTxIPCQSdTRbbUTRRSNRT{sUKMUUUP@@ m3 mol mutagenic high -fluhP@LF]EHIJudbbbbRTUVQJV\FMUUU@`U@@@ m3 mol mutagenic high -fluhP@NFmEHIJudbbbbRRcRQJF\FMUSUP@U@@@ m3 mol mutagenic high -fluib@DTxIQhi@DYEDhheUDddsdeN|uRsUUUT@@ m3 mol mutagenic high -fluqB@AJMDFHdrmrlzmNZ\EL@PuA@a@@@ m3 mol mutagenic high -fluq`@LLxAGdfWeUWnEHuhiZij@IjB@@ m3 mol mutagenic high -flux@@@XIRRmYHhhldiUDdsdcQRA@AQ@@@@@ m3 mol mutagenic high -flyAP@@HLxJSJkZrkzluT`DUT@@@ m3 mol mutagenic high -flyP`@EN@cHheDdehbdiZZ``bjj@@@ m3 mol mutagenic high -flyPa@LR``@PHHrRPjJJKHiXsejAbHj`@@ m3 mol mutagenic high -flyQ`@D^@jrSOJzmkBdu@AUUT@@@ m3 mol mutagenic high -flyQ`@D^@jrS[JzmkBdu@AUUT@@@ m3 mol mutagenic high -flyQa@ANQ``@bGadTbRTRRLVegMUPTAU@@@ m3 mol mutagenic high -flyQa@LR`cp@`PQddaTTRrrRVkKTCAEU@@@ m3 mol mutagenic high -flyQb@LR``P@cIIBhhhlbecNVhFHbj@@@ m3 mol mutagenic high -fly`R@IB]zH@aJYYY]gcAjhJ`fF@@@ m3 mol mutagenic high -fly`R@JRU[p@cIDeDeEECEXijji`Z@@@@ m3 mol mutagenic high -fly`R@LPQEH@cIICEDddeUC^VjB`hf@@@ m3 mol mutagenic high -flyqa@AFlcA@ADOCHiDdhThmLmFZj`@jj@@@ m3 mol mutagenic high -fl}@@@LdbbbTVtQVXhQmV]zJZPZHPPJH@@ m3 mol mutagenic high -fl}@B@@AFRJJIIJISXxhKRoF]EM@@@@@@@@@@ m3 mol mutagenic high -fl}A@@@ILrjvjvQ`mJLxLTmA@@@@@@@@ m3 mol mutagenic high -fl}A@@@IRlkjmkAENRUYtTuPH@@@T@@@ m3 mol mutagenic high -fl}A@@@IRlkvjkAENRUYtTuPP@@@T@@@ m3 mol mutagenic high -fl}A@@@IRlkvmkAENRUYtTuPP@@@T@@@ m3 mol mutagenic high -fl}A@@@IRlrjkoAENJl[tTt@@@@@@@@@ m3 mol mutagenic high -fl}A@@@YHdhdmMDhcAENRt{tTt@@@@@@@@@ m3 mol mutagenic high -fl}A@@@YHdhheDddcAENJ]ZHTt@@@@@@@@@ m3 mol mutagenic high -fl}A@@@YHhhhddjdeAGERuYtTuUAL@@U@@@ m3 mol mutagenic high -fl}`@@@IRlrjkoAENJl[tTuP@@@@T@@@ m3 mol mutagenic high -fl}a@@A@rQIQJKJZEJBF\UXshij``@@@h@@@ m3 mol mutagenic high -fl}a@@E@ReYWm[VBJ\ejshij``@@@h@@@ m3 mol mutagenic high -fl}a@@M@ReYYy}VBF\TZshij``@@@h@@@ m3 mol mutagenic high -fl}aA@HF@DIdLdRbbRRtJR``cIFuXLZjjZjeif@@ m3 mol mutagenic high -foA@@@DjYeUlVeN`@`B`@@@ m3 mol mutagenic high -foA@C@@QAHadQdTTTqTRWAV]ADD@@@@@ m3 mol mutagenic high -foA@C@@QBhatQdTTRbRQsIFmA@A@P@@@ m3 mol mutagenic high -foA@P@@HTYIe[VWhrVfi@Hj`@@ m3 mol mutagenic high -foAA@@@ILkjrmFV]@AL@@@ar@ m3 mol mutagenic high -foAAB@A@bDfUmyVcKN`@j@@@@@ m3 mol mutagenic high -foAAP@@HiIRSKSrvSeNMUTuUP@@ m3 mol mutagenic high -foAA`@@HXdrl{ZlyYsUUP@P@@ m3 mol mutagenic high -foAAa@JJtBHxDYDhhmEDcpUgUKPJA@@@ m3 mol mutagenic high -foAHB@MFlx@QdbdRjbbcNZmUUTmU@@@ m3 mol mutagenic high -foAH`@D\DXDdfVYe_ScVZ`ZBP`@@ m3 mol mutagenic high -foAH`BDRLx@cR{dfYeW\cMVZhFAF@@@ m3 mol mutagenic high -foAHb@DXx[U`QFQQJIZJHdiHtuUTsL@@ m3 mol mutagenic high -foAI@@MFlxFRJQJjJJLyjuUURuT@@ m3 mol mutagenic high -foAP@@@NRYWVUzLMZ@B`@`@@ m3 mol mutagenic high -foAPB@KN@DISLjohmJMP@@AP@@@ m3 mol mutagenic high -foAPB`ARADDbCREiAt`dsNkmLyITDASUD@@ m3 mol mutagenic high -foAPR@JLIIU`RBSLzmlsagTmTuUP@@ m3 mol mutagenic high -foAP`@BZ@aInvYWejsfjiB@`@@ m3 mol mutagenic high -foAP`@CNAQJYW]YqS`jB@jj`@@ m3 mol mutagenic high -foAPa@LDlx@P`HRYYeUuVLyjjjjj@@ m3 mol mutagenic high -foAQA@BLD@HpDISOmrnJV]TuL@D@@@ m3 mol mutagenic high -foAX@`LTXKU`AB@aPPxHRYWUeRTMYjjjZV@@ m3 mol mutagenic high -foA`@@@ILkjrmFV]@AT@@@@@ m3 mol mutagenic high -foA`@@@IML|{wEFmUSA@R@@@ m3 mol mutagenic high -foA`R@EPQap@cIIKEDhliZMYZ@@@`@@ m3 mol mutagenic high -foA``@M@PdvkLkruYsUTa@P@@ m3 mol mutagenic high -foAaB@GDADILroZ{AFmAA@@P@@@ m3 mol mutagenic high -foAaB@GLADILk_J}NFm@DP@P@@@ m3 mol mutagenic high -foAaB@G\ADILkkJ}FFm@AP@P@@@ m3 mol mutagenic high -foAaB@KN@DISLjoxmJMP@@AP@@@ m3 mol mutagenic high -foAaP@D@hIVlbbTbfbjIrgFjjfjh@@ m3 mol mutagenic high -foAa`@M@PQInvYWejsffiB@`@@ m3 mol mutagenic high -foAh`@JBUYpBILoLkleFmUU@`T@@@ m3 mol mutagenic high -foAp@@@P\eKLjorMjsP@@A@B@H m3 mol mutagenic high -foAp`@BZLABS]lroKUgMURDA@@@ m3 mol mutagenic high -foApb@HDihp@cIDhideDRLUZi``Xh@@ m3 mol mutagenic high -foAqB@JLtPFHdsM|klEYuKTa@P@@ m3 mol mutagenic high -foAq`@DXxBSlbbTTtJVhKQffjjjX@@ m3 mol mutagenic high -foI@@@LdbbRbaQXKbiZlx@@@`@`@@ m3 mol mutagenic high -foIA@@@IRlkZ|DTyKUgUSUUJs@@@ m3 mol mutagenic high -foIA@@@IRlkjlDTyIUgUPP@AP@@@ m3 mol mutagenic high -foIA@@@IRlkvlDTyIUgT@@@@@@@@ m3 mol mutagenic high -foIA@@@IRlrj|DTxjqgUP@@AP@@@ m3 mol mutagenic high -foI`@@@IRlrj|DTxjqgUP@@AP@@@ m3 mol mutagenic high -foQ@@@DjYUU}`nRlx@@@`@@@@ m3 mol mutagenic high -foQ@@@LdbbbRQrYHRkN@@`@@@@@ m3 mol mutagenic high -foQ@@@LdbbbTRQYHUmN@@@B@@@@ m3 mol mutagenic high -foQ@@@LdbbbTReyHQmN@@@@`@@@ m3 mol mutagenic high -foQ@B@@QBSJvjkQdeV]@@@@@@@@ m3 mol mutagenic high -foQ@B@@QBSLljzsdcV]@@@@@@@@ m3 mol mutagenic high -foQ@B@@QBSLsJ~pRkF]@@@@@@@@ m3 mol mutagenic high -foQ@B@@RBSLljzsdcV]@@@@@@@@ m3 mol mutagenic high -foQ@B@@XbSLljzsdcV]@@@@@@@@ m3 mol mutagenic high -foQ@`@@VRfYeUzBd[Sj@B@H`@@ m3 mol mutagenic high -foQA@@@ILrrkkNRMYt@@@@@@@@ m3 mol mutagenic high -foQA@@@YEEEEDdbrRkF\t@D@D@@@ m3 mol mutagenic high -foQA`@@HldrlkZtXhugMRDDSD@@ m3 mol mutagenic high -foQA`@@HldrmlrtYKUgMR@QSD@@ m3 mol mutagenic high -foQH@@@BMYJUme]IRRmF@@HFhH@@ m3 mol mutagenic high -foQH@@@BMYJYYo]irRmF@@HFhH@@ m3 mol mutagenic high -foQH@@@RMYJUm[UIPRmF@@BFhH@@ m3 mol mutagenic high -foQH@@@RM[IEDhmBdj\DkQ`@@ajB@@ m3 mol mutagenic high -foQH@@@Rl{IEDhmCDj\DkU`@@bjA@@ m3 mol mutagenic high -foQH@@@TUkIEEEhddV\Djs`JBjeF@@ m3 mol mutagenic high -foQH@@@TuYJYfU}YrQeZ@H@XhH@@ m3 mol mutagenic high -foQH@@@XD[IEDhiedZRXKU``jIfF@@ m3 mol mutagenic high -foQH@@@XDiJYYe_iI`cNBBhidX@@ m3 mol mutagenic high -foQH@@@XhiJYmg]YpRcVBHJiXX@@ m3 mol mutagenic high -foQH@@@XhiJYmg_YpRcVBHJiXX@@ m3 mol mutagenic high -foQH@@@XhiJYmggYrRkNBHJfhT@@ m3 mol mutagenic high -foQH@@@XhkIEELhddV\Djs`bBjeF@@ m3 mol mutagenic high -foQH@@@XikIEEMEDUf\ejs`bBjeF@@ m3 mol mutagenic high -foQI@@HTEHBRrjjjsdeV]P@TtiP@@ m3 mol mutagenic high -foQP@@@FRfYeUz\e[SjdF`hd@@ m3 mol mutagenic high -foQP@@@NrQQJIIYFcAZMX@@@@`@@@ m3 mol mutagenic high -foQP@@@NrQQQQIHz`iFuX@@@@`@@@ m3 mol mutagenic high -foQP@@@RrQQJIJUJgAJlx@@H@@@@@ m3 mol mutagenic high -foQP@@@TRfY^]|TEjsiB`hjb@@ m3 mol mutagenic high -foQP@@@TrQQQQPqUdeZlx@`@@@@@@ m3 mol mutagenic high -foQP@@@VRfYe]Z\d[S`@@@H@@@ m3 mol mutagenic high -foQP@@@XRf[WmZ\djs``@@@@@@ m3 mol mutagenic high -foQP@@@XRf[eUz\UXs``@@@@@@ m3 mol mutagenic high -foQQ@BHB@ChRdsLrolDjqgP@@@@@@@ m3 mol mutagenic high -foQ`@@@ILkZjmFRUYt@@@@@@@@ m3 mol mutagenic high -foQ`@@@IRlrj|DJlYuT@@@P@@@ m3 mol mutagenic high -foQ`@@@ISKON}NBeYp@@A@@@@@ m3 mol mutagenic high -foQ`@@@ISLro}NRMjp@@@A@@@@ m3 mol mutagenic high -foQ`@@@ITsJkyFJlYuPA@@P@@@ m3 mol mutagenic high -foQ`@@@ITs\k{AJlYuT`tDR@@@ m3 mol mutagenic high -foQ`@@@YHheEMDcPTeF\@@@A@@@@ m3 mol mutagenic high -foQ`A@F@bIABSJvmkSdeV]@DT@A@@@ m3 mol mutagenic high -foQ``@B@mdTTTTRQSEBdYsTmUSU@@@ m3 mol mutagenic high -foQ``@M@HdsMjoLDhugMLBDUD@@ m3 mol mutagenic high -foQa@@A@RYfYWvBUXsf`B@@`@@ m3 mol mutagenic high -foQh@@@LDZvRJIQPiYTYIVc@@DCTD@@ m3 mol mutagenic high -foQh@@@TejrTsLkzsdcJt@P@qPP@@ m3 mol mutagenic high -foQh@@@TtZvRJJJIIELEHrm@D@LTD@@ m3 mol mutagenic high -foQh@@@TyjvRJJJIIELEHrm@D@LTD@@ m3 mol mutagenic high -foQh@@@XijvRJJIQIELEHrm@D@LTD@@ m3 mol mutagenic high -foQp@@@XDeLvzjtyIUgAAEP@@@@ m3 mol mutagenic high -foQp@@@XDeLzmjtXJQkA@T@DP@@ m3 mol mutagenic high -foQp@@@XDeLzmktXJQkA@T@DP@@ m3 mol mutagenic high -foQp@@@XHeLsnjxiIUgMPP@A@@@ m3 mol mutagenic high -foQp@@@XdeL|oZtYIUgA@U@@P@@ m3 mol mutagenic high -foQp@@@XidbbfbQRSNRUYpQAT@@@@@ m3 mol mutagenic high -gBQ@@eJuT@@ m3 mol mutagenic high -gBX@@eLUT@@ m3 mol mutagenic high -gBXHHHaIejh@ m3 mol mutagenic high -gC`@Die@@ m3 mol mutagenic high -gC`@Dkz@@ m3 mol mutagenic high -gC`DADHHRVh@ m3 mol mutagenic high -gC`DADZHRVXRH m3 mol mutagenic high -gC`DADZHRVXRP m3 mol mutagenic high -gC`DADZHRVh@ m3 mol mutagenic high -gC`DADZHRVx@ m3 mol mutagenic high -gC`DAHJPRZd@ m3 mol mutagenic high -gC`DAHJPRZh@ m3 mol mutagenic high -gC`DAHZPRVh@ m3 mol mutagenic high -gC`DAVRDRZh@ m3 mol mutagenic high -gC`DAbKDRZh@ m3 mol mutagenic high -gC`DAbZHRVh@ m3 mol mutagenic high -gC`DAb[DRVx@ m3 mol mutagenic high -gC`HADIKLIH m3 mol mutagenic high -gC`HADIKR@@ m3 mol mutagenic high -gC`HAbIKJ@@ m3 mol mutagenic high -gC`HAbIKLIH m3 mol mutagenic high -gC`HAbIML@@ m3 mol mutagenic high -gC`LAHJPt`duP@ m3 mol mutagenic high -gC`LAVJluXduP@ m3 mol mutagenic high -gC`LAbKDvHduP@ m3 mol mutagenic high -gC``@dfZ@@ m3 mol mutagenic high -gC``AdeY@@ m3 mol mutagenic high -gC``AdeZ@@ m3 mol mutagenic high -gC``Adej@@ m3 mol mutagenic high -gC``Adij@@ m3 mol mutagenic high -gCa@@dkH@ m3 mol mutagenic high -gCa@@dkP@ m3 mol mutagenic high -gCa@@dkX@ m3 mol mutagenic high -gCa@@dmH@ m3 mol mutagenic high -gCa@@dmP@ m3 mol mutagenic high -gCa@@dmX@ m3 mol mutagenic high -gCa@@duP@ m3 mol mutagenic high -gCaHDHaIZ`@ m3 mol mutagenic high -gCaHH@bNt@@ m3 mol mutagenic high -gCaHL@aIZ`@ m3 mol mutagenic high -gCaHLHaIZP@ m3 mol mutagenic high -gCaHLHaIZ`@ m3 mol mutagenic high -gCaHLLQIZP@ m3 mol mutagenic high -gCaHLLQIZ`@ m3 mol mutagenic high -gCah@mJAIj`@ m3 mol mutagenic high -gCahHl@bNt@@ m3 mol mutagenic high -gCahHlGBNt@@ m3 mol mutagenic high -gCahHlHRNj@@ m3 mol mutagenic high -gCahhlAa]ncm@@ m3 mol mutagenic high -gCd@Adej@@ m3 mol mutagenic high -gCdDI`BHDRZh@ m3 mol mutagenic high -gCe@E`dmH@ m3 mol mutagenic high -gCe@E`dsP@ m3 mol mutagenic high -gCe@I`dlpd` m3 mol mutagenic high -gCh@@dmH@ m3 mol mutagenic high -gCh@@doH@ m3 mol mutagenic high -gCh@@doP@ m3 mol mutagenic high -gChHD@aIU`@ m3 mol mutagenic high -gChHLHaIZp@ m3 mol mutagenic high -gChHLLQIZ`@ m3 mol mutagenic high -gChHLLQIZp@ m3 mol mutagenic high -gCh`LDdsP@ m3 mol mutagenic high -gChhMDHbNl@@ m3 mol mutagenic high -gCi@DDeV@@ m3 mol mutagenic high -gCi@DDeZ@@ m3 mol mutagenic high -gCi@DDfZ@@ m3 mol mutagenic high -gCi@HDefDd@ m3 mol mutagenic high -gCi@LDej@@ m3 mol mutagenic high -gCiHEAxIVt@@ m3 mol mutagenic high -gFp@DiTt@@@ m3 mol mutagenic high -gFp@DiTvjh@ m3 mol mutagenic high -gFpD@DTHReSZj`@ m3 mol mutagenic high -gFpD@DXHReSZj`@ m3 mol mutagenic high -gFp`@dfTujX@ m3 mol mutagenic high -gFp`@dfTujh@ m3 mol mutagenic high -gFp`@df_Ejh@ m3 mol mutagenic high -gFp`ATiTvjh@ m3 mol mutagenic high -gFp`AdiTvjh@ m3 mol mutagenic high -gFq@@drfmM@@ m3 mol mutagenic high -gFq@@eLqUU@@ m3 mol mutagenic high -gFq@@eLzts@@ m3 mol mutagenic high -gFqDDHbqBSZmUT@@ m3 mol mutagenic high -gFqDLLRqBRwcUT@@ m3 mol mutagenic high -gFq`AbeJfuU@@ m3 mol mutagenic high -gFr@ACTiTt@@@ m3 mol mutagenic high -gFr@ACTi[FZd@ m3 mol mutagenic high -gFt@ATiTt@@@ m3 mol mutagenic high -gFt@AdiTt@@@ m3 mol mutagenic high -gFtHCQbILimKP@ m3 mol mutagenic high -gFtHE`DILikUP@ m3 mol mutagenic high -gFtHLPDISNmLp@ m3 mol mutagenic high -gFu@E`drfmT`@ m3 mol mutagenic high -gFx@@eJf`@@@ m3 mol mutagenic high -gFx@@eJfuU@@ m3 mol mutagenic high -gFx@@eRfuK@@ m3 mol mutagenic high -gFxHJ@aJ]bjn@@ m3 mol mutagenic high -gFxHL@aJYujj@@ m3 mol mutagenic high -gFx`HJeJxtm@@ m3 mol mutagenic high -gFy@DDfTujh@ m3 mol mutagenic high -gFy@JDiTvjh@ m3 mol mutagenic high -gFy@LDeXvjh@ m3 mol mutagenic high -gF|@AbeJf`@@@ m3 mol mutagenic high -gF|HLZ@aJYuif@@ m3 mol mutagenic high -gGP@DiVj`@ m3 mol mutagenic high -gGP@Di]jQ@` m3 mol mutagenic high -gGPBABRHTQXcIHUTpf` m3 mol mutagenic high -gGPDADVHRUZZDT@ m3 mol mutagenic high -gGPDAbWDRUZj@@ m3 mol mutagenic high -gGPP@cTfyi`@ m3 mol mutagenic high -gGPPACTiVj`@ m3 mol mutagenic high -gGPXHlQxIU[U@@ m3 mol mutagenic high -gGP`@TfYi`@ m3 mol mutagenic high -gGP`@df]j`@ m3 mol mutagenic high -gGP`@dfuiaM@ m3 mol mutagenic high -gGP`@dfuj`@ m3 mol mutagenic high -gGP`@dfyi`@ m3 mol mutagenic high -gGP`ADkjj`@ m3 mol mutagenic high -gGP`ATeUfQD` m3 mol mutagenic high -gGP`ATeUfaE@ m3 mol mutagenic high -gGP`ATeVj`@ m3 mol mutagenic high -gGP`ATfVi`@ m3 mol mutagenic high -gGP`ATiVj`@ m3 mol mutagenic high -gGPhCQDIJuS@@ m3 mol mutagenic high -gGPhH`DYIHUi@@ m3 mol mutagenic high -gGPhMPDIK]U@@ m3 mol mutagenic high -gGPhMQDIK]U@@ m3 mol mutagenic high -gGQ@@djltHh m3 mol mutagenic high -gGQ@@djuT@@ m3 mol mutagenic high -gGQ@@dlmT@@ m3 mol mutagenic high -gGQ@@drmT@@ m3 mol mutagenic high -gGQ@@dsMT@@ m3 mol mutagenic high -gGQ@@dsmT@@ m3 mol mutagenic high -gGQ@@eMUT@@ m3 mol mutagenic high -gGQDB@jQBUkUP@ m3 mol mutagenic high -gGQDL@aAFQRFj`@ m3 mol mutagenic high -gGQDLHbqBRwSP@ m3 mol mutagenic high -gGQDLHbqBRwUP@ m3 mol mutagenic high -gGQHBHaIeiXQH m3 mol mutagenic high -gGQHBLQIeiXQH m3 mol mutagenic high -gGQHJ@aJ]jd@ m3 mol mutagenic high -gGQHJHaIUjh@ m3 mol mutagenic high -gGQLJIARFdLbdMU@@ m3 mol mutagenic high -gGQXHlZHROjj@@ m3 mol mutagenic high -gGQ`@ZdrmJ@@ m3 mol mutagenic high -gGQ`@ZdrmT@@ m3 mol mutagenic high -gGQ`@ZdruT@@ m3 mol mutagenic high -gGQ`@bdvmT@@ m3 mol mutagenic high -gGQ`@bdwMT@@ m3 mol mutagenic high -gGQ`AjdmmR@@ m3 mol mutagenic high -gGQ`AjdmmT@@ m3 mol mutagenic high -gGQdEb@bRFRRVV`@ m3 mol mutagenic high -gGQhHlLSIHTmP@ m3 mol mutagenic high -gGR@aEQJyJ]Vh@ m3 mol mutagenic high -gGT@ADiVj`@ m3 mol mutagenic high -gGT@ATeVj`@ m3 mol mutagenic high -gGT@ATeWfqE@ m3 mol mutagenic high -gGT`E`TfUj`@ m3 mol mutagenic high -gGT`E`TfYj`@ m3 mol mutagenic high -gGT`HQTeVY`iZ@ m3 mol mutagenic high -gGU@E`drmT@@ m3 mol mutagenic high -gGU@E`dsmT@@ m3 mol mutagenic high -gGU`E`ZdrmT@@ m3 mol mutagenic high -gGXHD@aIUVd@ m3 mol mutagenic high -gGXXKEb@cIIBmP@ m3 mol mutagenic high -gGX`BDdvmT@@ m3 mol mutagenic high -gGX`BDdwMT@@ m3 mol mutagenic high -gGX`LDdsmT@@ m3 mol mutagenic high -gGXhKB@aJvZX@ m3 mol mutagenic high -gGY@DDfYj`@ m3 mol mutagenic high -gGY@HDeVZaI@ m3 mol mutagenic high -gGY@HDefZaH` m3 mol mutagenic high -gGY@HDfVj`@ m3 mol mutagenic high -gGYDIQDJHR[Zj@@ m3 mol mutagenic high -gGYHEAxIVkU@@ m3 mol mutagenic high -gGYHEAxIVsU@@ m3 mol mutagenic high -gGY`BETfuj`@ m3 mol mutagenic high -gG\DEj@`aBSJuP@ m3 mol mutagenic high -gG]HHjPDIJuS@@ m3 mol mutagenic high -gGp`AldTLRuUT@@ m3 mol mutagenic high -gGq@@eJqFuUP@ m3 mol mutagenic high -gJP@DjYd@ m3 mol mutagenic high -gJPBAVJPt`YAIjj@@ m3 mol mutagenic high -gJPDADFHRUfaH` m3 mol mutagenic high -gJPDADFHRUfaI@ m3 mol mutagenic high -gJPDADFHRUj`@ m3 mol mutagenic high -gJPDADFHR[f`@ m3 mol mutagenic high -gJPDADQpRZj`@ m3 mol mutagenic high -gJPDAbGDRUj`@ m3 mol mutagenic high -gJPD`DHHGKdfzd@ m3 mol mutagenic high -gJPH@EIRuP@ m3 mol mutagenic high -gJPHADIJsHd` m3 mol mutagenic high -gJPHADIJsPd` m3 mol mutagenic high -gJPHADIJtpb` m3 mol mutagenic high -gJPHADIJuP@ m3 mol mutagenic high -gJPHADIKSP@ m3 mol mutagenic high -gJPHADILth@ m3 mol mutagenic high -gJPHAVILuP@ m3 mol mutagenic high -gJPHAVIMUP@ m3 mol mutagenic high -gJPHAbIJuP@ m3 mol mutagenic high -gJPHAbIKUP@ m3 mol mutagenic high -gJPLADZPL`dmM@@ m3 mol mutagenic high -gJPLAHJPt`duU@@ m3 mol mutagenic high -gJPXHlPDQzt@@ m3 mol mutagenic high -gJPXHlQBQ{T@@ m3 mol mutagenic high -gJPXHlQxQ{T@@ m3 mol mutagenic high -gJP`@TeVd@ m3 mol mutagenic high -gJP`@TeVh@ m3 mol mutagenic high -gJP`@TeZh@ m3 mol mutagenic high -gJP`@TfVd@ m3 mol mutagenic high -gJP`@TfZh@ m3 mol mutagenic high -gJP`@dfVh@ m3 mol mutagenic high -gJPdEaDPHRZe`@ m3 mol mutagenic high -gJQ@@djsBJ@ m3 mol mutagenic high -gJQ@@dju@@ m3 mol mutagenic high -gJQ@@dkSBJ@ m3 mol mutagenic high -gJQ@@dkU@@ m3 mol mutagenic high -gJQ@@dls@@ m3 mol mutagenic high -gJQ@@dmU@@ m3 mol mutagenic high -gJQ@@dru@@ m3 mol mutagenic high -gJQ@@dsT`@ m3 mol mutagenic high -gJQ@@duU@@ m3 mol mutagenic high -gJQ@@eKU@@ m3 mol mutagenic high -gJQDDH`qBRmT@@ m3 mol mutagenic high -gJQDHG@nBUMT@@ m3 mol mutagenic high -gJQHBHaIVYDd@ m3 mol mutagenic high -gJQHBHaIVj@@ m3 mol mutagenic high -gJQHBHaIfe@@ m3 mol mutagenic high -gJQHBHaInZ@@ m3 mol mutagenic high -gJQHBLQIVj@@ m3 mol mutagenic high -gJQHBOAJfj@@ m3 mol mutagenic high -gJQ`@bdvt`@ m3 mol mutagenic high -gJQhHl@bOV`@ m3 mol mutagenic high -gJQhHlHROZ`@ m3 mol mutagenic high -gJT@@Te^h@ m3 mol mutagenic high -gJT`E`TfVh@ m3 mol mutagenic high -gJU@DPdru@@ m3 mol mutagenic high -gJU@E`dru@@ m3 mol mutagenic high -gJU@LPdkU@@ m3 mol mutagenic high -gJUHLT@aIjZ@@ m3 mol mutagenic high -gJX@@dkU@@ m3 mol mutagenic high -gJX@@eKU@@ m3 mol mutagenic high -gJXDBLQXbS]V@@ m3 mol mutagenic high -gJXHD@aIUZ@@ m3 mol mutagenic high -gJX`BDdvu@@ m3 mol mutagenic high -gJX`DBdjt`@ m3 mol mutagenic high -gJX`DBdru@@ m3 mol mutagenic high -gJX`LDdru@@ m3 mol mutagenic high -gJY@BDfZl@ m3 mol mutagenic high -gJY@DDeUh@ m3 mol mutagenic high -gJY@DDeVh@ m3 mol mutagenic high -gJY@DDefh@ m3 mol mutagenic high -gJY@DDfVh@ m3 mol mutagenic high -gJY@LDijX@ m3 mol mutagenic high -gJYHC`DIKTp@ m3 mol mutagenic high -gJYHCaHIKTp@ m3 mol mutagenic high -gJYHEAxIVmP@ m3 mol mutagenic high -gJ\@@ldru@@ m3 mol mutagenic high -gJ]@EbDfVh@ m3 mol mutagenic high -gJ]HEcAxQ{T@@ m3 mol mutagenic high -gKP`@df\Vj@@ m3 mol mutagenic high -gKP`Adi\Zj@@ m3 mol mutagenic high -gKQ@@eKEUP@ m3 mol mutagenic high -gKQ@@eKcRp@ m3 mol mutagenic high -gKQ@@eKcUP@ m3 mol mutagenic high -gKQHDHaImZj`@ m3 mol mutagenic high -gKQHH@aJoEj`@ m3 mol mutagenic high -gKT@Adi\Vf@@ m3 mol mutagenic high -gKX@@eKcRp@ m3 mol mutagenic high -gKX@@eKcUP@ m3 mol mutagenic high -gKX@@eMEUP@ m3 mol mutagenic high -gKXHL@aJWFe`@ m3 mol mutagenic high -gKXHL@aJWFj`@ m3 mol mutagenic high -gNpH@DIRkUJ@@ m3 mol mutagenic high -gNpJAHJPtaYArFQRFUU@@ m3 mol mutagenic high -gNpN@iRHTQh`qEbGDQUT@@ m3 mol mutagenic high -gNpOAYRHTQh`qEbGDAhjj@@ m3 mol mutagenic high -gNpP@jtfvZf@@ m3 mol mutagenic high -gNp`@TfWZZ@@ m3 mol mutagenic high -gNp`@dfVZf@@ m3 mol mutagenic high -gNp`ATeVYjDT@ m3 mol mutagenic high -gNp`ATf^Zf@@ m3 mol mutagenic high -gNphJqDIKMTl@@ m3 mol mutagenic high -gNphMQLISMSL@@ m3 mol mutagenic high -gNpiJqbOdeVjf@@ m3 mol mutagenic high -gNplJqHJPtadTaeTp@ m3 mol mutagenic high -gNplLQDSpPPduluP@ m3 mol mutagenic high -gNq@@djkLpRb` m3 mol mutagenic high -gNq@@djkLpRc@ m3 mol mutagenic high -gNq@@djkMPb` m3 mol mutagenic high -gNq@@dl{UP@ m3 mol mutagenic high -gNq@@dskUP@ m3 mol mutagenic high -gNq@@eJmTh@ m3 mol mutagenic high -gNqDLHaqBRjuU@@ m3 mol mutagenic high -gNqHFHaIfYjP@ m3 mol mutagenic high -gNqhHl@cIIBej`@ m3 mol mutagenic high -gNqhHlOAJkVj`@ m3 mol mutagenic high -gNqhMV@aI[jY`@ m3 mol mutagenic high -gNt@@teUjj@@ m3 mol mutagenic high -gNtHAePIKMuT@@ m3 mol mutagenic high -gNtHE`DILruT@@ m3 mol mutagenic high -gNtHE`DILzuR@@ m3 mol mutagenic high -gNt`E`TfWZj@@ m3 mol mutagenic high -gNt`E`TfYZj@@ m3 mol mutagenic high -gNu@E`dl{Tpa` m3 mol mutagenic high -gNu@E`dskUH@ m3 mol mutagenic high -gNu@LpdjmUP@ m3 mol mutagenic high -gNx@@eLuUP@ m3 mol mutagenic high -gNx@@eRmUP@ m3 mol mutagenic high -gNxHD@aIUUj`@ m3 mol mutagenic high -gNxHD@aIUej`@ m3 mol mutagenic high -gNx`LDdskUH@ m3 mol mutagenic high -gNx`LDdskUP@ m3 mol mutagenic high -gNx`LDdssUP@ m3 mol mutagenic high -gNxhMV@aI[ji`@ m3 mol mutagenic high -gNyHEAxIVjuT@@ m3 mol mutagenic high -gNy`BDtf{Zj@@ m3 mol mutagenic high -gNy`LDtf]Zj@@ m3 mol mutagenic high -gNyhGE`DYIITmT@@ m3 mol mutagenic high -gN|@ADeJkUP`` m3 mol mutagenic high -gOp@DiUkZV`@ m3 mol mutagenic high -gOp@DjWkB@@@ m3 mol mutagenic high -gOpHADILkW@@@@ m3 mol mutagenic high -gOpHADILkWTu@@ m3 mol mutagenic high -gOpHAbILkW@@@@ m3 mol mutagenic high -gOp`@dfUMZj`@ m3 mol mutagenic high -gOp`@dfVqZj`@ m3 mol mutagenic high -gOp`@tiguif`@ m3 mol mutagenic high -gOp`ATiekjj`@ m3 mol mutagenic high -gOp`A\dTQbjj`@ m3 mol mutagenic high -gOphH`DYIHUVmT`@ m3 mol mutagenic high -gOq@@drm[ST@@ m3 mol mutagenic high -gOq@@drm[UT@@ m3 mol mutagenic high -gOq@@drm\@@@@ m3 mol mutagenic high -gOq@@drm]UT@@ m3 mol mutagenic high -gOq@@eLvmLt@@ m3 mol mutagenic high -gOq`@VdsNkTl@@ m3 mol mutagenic high -gOq`@fdrikTl@@ m3 mol mutagenic high -gOq`@fdrikUL@@ m3 mol mutagenic high -gOt@@TeVkzj`@ m3 mol mutagenic high -gOt@@tiek@`@@ m3 mol mutagenic high -gOt@@|daRbjj`@ m3 mol mutagenic high -gOtHE`DILl[MT`@ m3 mol mutagenic high -gOt`EPTfVKZj`@ m3 mol mutagenic high -gOu@Dpdrm[Rt@@ m3 mol mutagenic high -gOx@@drm]UT@@ m3 mol mutagenic high -gOx@@eSRuUT@@ m3 mol mutagenic high -gOx@AddJTUUT@@ m3 mol mutagenic high -gOxHBHaIeZx@@@ m3 mol mutagenic high -gOxHDHaIeZx@@@ m3 mol mutagenic high -gOxHDIAIeZx@@@ m3 mol mutagenic high -gOxHHHaIeZzjh@ m3 mol mutagenic high -gOxHL@aJY}Zjh@ m3 mol mutagenic high -gOy@DDfYKZj`@ m3 mol mutagenic high -gOy@LDiisjj`@ m3 mol mutagenic high -gOy@hAteIeZx@@@ m3 mol mutagenic high -gOz@ACVeKNLuR@@ m3 mol mutagenic high -fHfXAa@ m1 pattern mutagenic high -fJ@FD m1 pattern mutagenic high -eOHBNZ`pge@ m1 pattern mutagenic high -eFhHba@ m1 pattern mutagenic high -gFy@DDfXujhB m1 pattern mutagenic high -eFHBJFE@ m1 pattern mutagenic high -gFt@ATiTvjhCAbKF` m1 pattern mutagenic high -gChHLHaIZ`H m1 pattern mutagenic high -eMhHchLJyH m1 pattern mutagenic high -eFB@JcAaGJ@ m1 pattern mutagenic high -gGPH@EIJmU@P m1 pattern mutagenic high -gGPHAbIJmU@XTQX|e@ m1 pattern mutagenic high -eMBBlRZCAKd` m1 pattern mutagenic high -eMABHXaIhH m1 pattern mutagenic high -gJPDADXHRUj`LBHmrD m1 pattern mutagenic high -gJQhHl@bOV`LH^S@ m1 pattern mutagenic high -eMHAIdLF^P m1 pattern mutagenic high -gCa@@dkHFBVyH m1 pattern mutagenic high -gC`HABQz`H m1 pattern mutagenic high -gCaDL@b^BTt`P m1 pattern mutagenic high -eMJDbDfP` m1 pattern mutagenic high -gC`D@DXHRUdB m1 pattern mutagenic high -gGQhHl@cIHTmPFBMy@ m1 pattern mutagenic high -gJXHD@aIUj@pHVOI@ m1 pattern mutagenic high -gGX@@eMUTA`Uc^P@ m1 pattern mutagenic high -gChDL@aABSM@XHKdp m1 pattern mutagenic high -gOx@@drm\@@A`plZp m1 pattern mutagenic high -gJX`BDdru@P m1 pattern mutagenic high -eMC@thabHzB m1 pattern mutagenic high -daDD@@QInXjZjh@` m1 pattern mutagenic high -did@@LdbLTifjj`B m1 pattern mutagenic high -deTH@@RUYTYY`@@aKChSFxYyE@ m1 pattern mutagenic high -daD@P@bNbDfUzZ@B@C@`pnxbT m1 pattern mutagenic high -deTHPBBHfHrJJIHlLDDP@P m1 pattern mutagenic high -daD@`@bDeeVz`@@B m1 pattern mutagenic high -gFp`@TizJjhCCSGbU@ m1 pattern mutagenic high -didD@@yIYVXV@H@CBhpf{dB m1 pattern mutagenic high -eFJHbHpP m1 pattern mutagenic high -gO|@AFeVm]UTAaUcWrP m1 pattern mutagenic high -gOy@FDiguie`LMj~ID m1 pattern mutagenic high -daD@`@bDfUjZ@B@CB`SJ{dL m1 pattern mutagenic high -difH@DAInUxV`@@CBdinGdD m1 pattern mutagenic high -daEH@HpDeeVz`@@B m1 pattern mutagenic high -deVD@AADfVuFVijh@phj[iy@` m1 pattern mutagenic high -difH@HAIYexZ@`@B m1 pattern mutagenic high -difH@JAJ[gxZB@@CBdJf{dB m1 pattern mutagenic high -difH@HAIYW[j@B@B m1 pattern mutagenic high -gOx@@drm\@@A`Qj~ID m1 pattern mutagenic high -gOr@Ajti]qZY`H m1 pattern mutagenic high -gF|@AbeJfuU@P m1 pattern mutagenic high -dmN@@@rJJIQEneX@@@@B m1 pattern mutagenic high -gJX`DBdru@XKGdP m1 pattern mutagenic high -did@`@qDeYWaf@@BH\NABinGdP m1 pattern mutagenic high -difD@H@Tee]nh@H@H m1 pattern mutagenic high -deVD@LBTeegXV@HP@` m1 pattern mutagenic high -daF@@@RYWih@H@LJCBknP` m1 pattern mutagenic high -die@@@aJyV[f@B@B m1 pattern mutagenic high -gGY@JDeUjpLDmrP m1 pattern mutagenic high -gFt@AdigUjXCAF|Rp m1 pattern mutagenic high -eMBBHRZCAGe@ m1 pattern mutagenic high -gC`HADIKTAa`mrP m1 pattern mutagenic high -fHcdA@ m1 pattern mutagenic high -gJX`HLdmU@P m1 pattern mutagenic high -daz`@@SFyIeYjf@LJAL[nQP m1 pattern mutagenic high -gNtDLpDHHR[UjhB m1 pattern mutagenic high -diTH@@RgeXSaj@B@CAhJfx^P` m1 pattern mutagenic high -dew@@@pldTTJVTLmP@P@XUaMt|`P m1 pattern mutagenic high -diUH@HPDiUWBxZVeh@` m1 pattern mutagenic high -gNq`AVdlmUPFEfM_DD m1 pattern mutagenic high -daxL@@[deiZjh@pXHpf{dT m1 pattern mutagenic high -gCaHLLQIZ`LLInQ@ m1 pattern mutagenic high -dedBPLinCDKpRUZvjZh@` m1 pattern mutagenic high -gNplLPDSpPPdukUPFFE_H` m1 pattern mutagenic high -gJPL@DSpPPdju@XXK\TH m1 pattern mutagenic high -diDDpLH@bOA@aIiUZjh@` m1 pattern mutagenic high -eMIDBKpRYCqH m1 pattern mutagenic high -eMXIDf`` m1 pattern mutagenic high -gG]@DZDfuiPLEkrH m1 pattern mutagenic high -gGY@JDf]j`LLl^R` m1 pattern mutagenic high -gJX@@dlu@XZX|PP m1 pattern mutagenic high -gNxHF@aJZzjPH m1 pattern mutagenic high -dazD@LADeUffhHr` m1 pattern mutagenic high -gGQHJLQIUjdCCBKbq@ m1 pattern mutagenic high -daxD@@QIgUjj@LBrf{dD m1 pattern mutagenic high -gNy@BDf]jj@phbuxbp m1 pattern mutagenic high -eMXIDfP` m1 pattern mutagenic high -diGL@DK`hTfV^ii`B m1 pattern mutagenic high -dmvD@E@dfYwVzB@j@C@PpjxYT m1 pattern mutagenic high -dmvL`BaL@HrRRjIJUVjjh@` m1 pattern mutagenic high -daFH@NAIeVf`@`@phLInyB@ m1 pattern mutagenic high -diGD@JxPQIeUZfX@` m1 pattern mutagenic high -gCi@DDej@ppfyD m1 pattern mutagenic high -gCa@@dsPFBV@ m1 pattern mutagenic high -gCd@Adej@ppVyH m1 pattern mutagenic high -diFD`Li`BDenvjZ`CA`aLxP m1 pattern mutagenic high -eMC@HoABDe`pQyP m1 pattern mutagenic high -diDDpLH@bOA@aIkUZjh@` m1 pattern mutagenic high -fHdpAa@ m1 pattern mutagenic high -fHa@A@ m1 pattern mutagenic high -gFy@JDigVjhCCSGbU@ m1 pattern mutagenic high -daF@`L@HRe]pjjj@LFBDJfyG@ m1 pattern mutagenic high -gChHL@aJZ`LLHnS@ m1 pattern mutagenic high -daFD@DCdfVRiji`CCDinQ` m1 pattern mutagenic high -daGH@DK`R[e[fii@LLPfyE@ m1 pattern mutagenic high -gOtHLPDYHhckSM@XXI|a@ m1 pattern mutagenic high -gNqhHl@cIICej`H m1 pattern mutagenic high -gNphJqDIJmSLHf m1 pattern mutagenic high -gJQ@@dju@XZK\a@ m1 pattern mutagenic high -eMABHYAIhH m1 pattern mutagenic high -gJP`@TeVhCAQ\VH m1 pattern mutagenic high -gCahHlOBNtAaAqK@ m1 pattern mutagenic high -gGQDLHbqBRwUPFEDQoI` m1 pattern mutagenic high -gJT@ADjzhCAQ\VH m1 pattern mutagenic high -dazL@BANR[UZj`CBdrf{dD m1 pattern mutagenic high -gJX`LHe[U@P m1 pattern mutagenic high -gNx`LDdssUPFFq_IP m1 pattern mutagenic high -daz@@@ReUjj`CC`aLJnyC@ m1 pattern mutagenic high -gNx`LFdjmUPFCDQkyL m1 pattern mutagenic high -gChHHOAIj`H m1 pattern mutagenic high -deUH@JdDin]xZB@`@` m1 pattern mutagenic high -dieH@BDDfY}n``H@LJpjX^P@ m1 pattern mutagenic high -daE@@@yIe^f`@`@pHLKnHe@ m1 pattern mutagenic high -gOq@@dlvKUTAaeWqP` m1 pattern mutagenic high -did@p@bBbAbDfYun``H@H m1 pattern mutagenic high -gOy@FDiguie`LMc^IL m1 pattern mutagenic high -daDh@DInAIf]nZiX@p`nIe@ m1 pattern mutagenic high -digH`LH^@HRf_ljfYh@` m1 pattern mutagenic high -die@@@EJ[W[j@B@CBlJfGb@` m1 pattern mutagenic high -daFH@NAIe^f`@`@pILknHA@ m1 pattern mutagenic high -dieH@BDDfY}n``H@LBpj[b@H m1 pattern mutagenic high -deUD`JXiCDrJJJXlMKUL@P m1 pattern mutagenic high -daED`LJDCpRjw[fjj@LLinxfD m1 pattern mutagenic high -daDH@@RYUih@H@LBCB{bHp m1 pattern mutagenic high -daDH@@RVU[f@@@LB`j[bYp m1 pattern mutagenic high -dmuD@FDDR[f[eV`b@@H m1 pattern mutagenic high -daDD@@yIe^fZVX@pSJxbD m1 pattern mutagenic high -dcN@`LCDRUgeUvjh@@@` m1 pattern mutagenic high -dk^@@@RYWYVftx@H@@@H m1 pattern mutagenic high -gO|HEfHaIeZx@@B m1 pattern mutagenic high -deT`@@pjrQQIFTpDEP@P m1 pattern mutagenic high -dif`@@pj[IEEEZxBH`@pPfy@` m1 pattern mutagenic high -did@p@bFbAbDfUfn`BH@H m1 pattern mutagenic high -daF@@@RYUih@H@LBCB{bHp m1 pattern mutagenic high -dmuD@JDBRY^YEZjif@H m1 pattern mutagenic high -difH@AAJY}rjY[`bf m1 pattern mutagenic high -daE@@@yIe^f`@`@pKBknHB@ m1 pattern mutagenic high -daxD@@QIeejZ@LLJfyG@ m1 pattern mutagenic high -gC`HAbIMLA``nS@ m1 pattern mutagenic high -gJQHH@aJmj@ppQyL m1 pattern mutagenic high -daxL`HS@|Dj}fjX@` m1 pattern mutagenic high -ded@@DiUWeiZCHTZ\IBDpjXYyG@ m1 pattern mutagenic high -gGU@CPdsmJA`e^S@ m1 pattern mutagenic high -deU@@@aJWeQfZ@@BHlNSJ[agdP m1 pattern mutagenic high -dmu@pFTH`h`XaIf[oi`bH`@` m1 pattern mutagenic high -eMPBchLF^P m1 pattern mutagenic high -gGU@DPdrmTAaecrT m1 pattern mutagenic high -gN}@DZDfVZj@prqxjp m1 pattern mutagenic high -gGUHEhOAJmZhCAF|pV@ m1 pattern mutagenic high -dmND@DBdfV]RZUZf@@@LBSagdJ m1 pattern mutagenic high -dev@@@RfV^nFP@@@@LFPj[ayD` m1 pattern mutagenic high -dcnH@HCHhheEbprl@@A@@P m1 pattern mutagenic high -gFu@LPeLftu@XYF|f@ m1 pattern mutagenic high -diT`@@rnRfUjEnBA``B m1 pattern mutagenic high -dmLD@@IJ]YVDeZj@B@B m1 pattern mutagenic high -dcnH@DAIYegzUujAHH@H m1 pattern mutagenic high -dmL@@DjYUVGi@@@`@LNpjxYWdH m1 pattern mutagenic high -dcn@`N@HRYeevz]`@@`@B m1 pattern mutagenic high -dcn`@@rfeJY{]kadHHZR@H m1 pattern mutagenic high -devH`LX@aJWY\HYiZZd@` m1 pattern mutagenic high -gC`HADIKTAaaMrH m1 pattern mutagenic high -gNpDADXHRV^jhB m1 pattern mutagenic high -gJPXHlPDQztAxlP m1 pattern mutagenic high -gNqHLHaIYzj`H m1 pattern mutagenic high -gGQDJH`qBSKMPdX m1 pattern mutagenic high -gNq`@jdvsTpFBsyD m1 pattern mutagenic high -gGQHJHaIYfdRL m1 pattern mutagenic high -daFH@NAIe^f`@`@pXDpjx m1 pattern mutagenic high -eMaDBKpRVB m1 pattern mutagenic high -gOx@@eJqmUTA`xlZ~P@ m1 pattern mutagenic high -eFA@H`bLFE\` m1 pattern mutagenic high -gKP@Di\YZ@phbq@ m1 pattern mutagenic high -gJPhIaxIVmPFDODD m1 pattern mutagenic high -dcLL`NWPbDfUuZf`@jX@LNALJat m1 pattern mutagenic high -gN|HEb@aIevj`H m1 pattern mutagenic high -daE@@@aJyUnx@@@` m1 pattern mutagenic high -gJQ`@bdru@XS\a@ m1 pattern mutagenic high -dayL@DhByIeuji@LBSBkdL m1 pattern mutagenic high -gJY@DDfzhCCSGbB@ m1 pattern mutagenic high -dmVD@JADf^Uvjjh@` m1 pattern mutagenic high -gJXdIbHaABRuJA@ m1 pattern mutagenic high -diDDPNDHc@aIUVfjXHb` m1 pattern mutagenic high -defHPFDHc@aIUUiji`bJ m1 pattern mutagenic high -diEL@DpByIf^ZjX@` m1 pattern mutagenic high -gNy`LETeUZZDs@ m1 pattern mutagenic high -gNx`BFdskUHFBVxcP m1 pattern mutagenic high -dmLH@@Rge]aNFh@J`@` m1 pattern mutagenic high -deT@@DjU_k``b`@pFDpjXYyG@ m1 pattern mutagenic high -dmNH`Jd@aJYW_JxZA@j@CB`IaWdH m1 pattern mutagenic high -dmM@@@[IEDhhZXU@@B@@H m1 pattern mutagenic high -fHdxA@ m1 pattern mutagenic high -eM`AIxLI@ m1 pattern mutagenic high -deVD@DCDenUFVh@@@pZLinGdR m1 pattern mutagenic high -deVD@D@dfVuFVh@@@` m1 pattern mutagenic high -dif@@@RfU~F``@@pYLJf{b@H m1 pattern mutagenic high -gOx`FDdrikUTA@ m1 pattern mutagenic high -deVH@IAJYW~F``H@LFSBinyD` m1 pattern mutagenic high -dig@@@aDiyWaZ@@B@h m1 pattern mutagenic high -dco@`LK`BLdTTRRITntpTA@Pe@ m1 pattern mutagenic high -gOx@@drm\@@A`Pl~Ht m1 pattern mutagenic high -daE@`LH@aIYZfijd@` m1 pattern mutagenic high -gOu@LPeLimMTHf m1 pattern mutagenic high -gJP`@dfvhCCKD m1 pattern mutagenic high -gKP@Di\Vi@pLVOH@ m1 pattern mutagenic high -diVH@BAIfUInFjjZ@H m1 pattern mutagenic high -gOpH@EILkW@@@P m1 pattern mutagenic high -gJPDADFHRYj`LBHcrX m1 pattern mutagenic high -gJPHAbIKUPFBDyeb m1 pattern mutagenic high -gNthLXaxYIHTuTA@ m1 pattern mutagenic high -gNxdMVLP~BRkUS@P m1 pattern mutagenic high -gCd@AH}PFBVyH m1 pattern mutagenic high -gCd@ADkV@pdxe` m1 pattern mutagenic high -gGU@MPdllrA@ m1 pattern mutagenic high -gJPLADHHLPdwSBJ` m1 pattern mutagenic high -deVH@IAIe]ZZ@Bh@LAALJnFP m1 pattern mutagenic high -didD@@iJ[gxZB@@CBdJnGdL m1 pattern mutagenic high -daFD@FCdig|jfV`bf m1 pattern mutagenic high -daE@@@YIeZn`B@@piLiny@@ m1 pattern mutagenic high -daEH`Dq`BDfUjyjfPC@`SNyE@ m1 pattern mutagenic high -dieH`Dq`BDfUfnZii@H m1 pattern mutagenic high -daFH@BAIf]n``@@phLJfyG@ m1 pattern mutagenic high -gFxhMD@cIHXZmTA`c^P@ m1 pattern mutagenic high -daFH@BAIf]n``@@phLInyE@ m1 pattern mutagenic high -difD@N@TfUvfZVZ@H m1 pattern mutagenic high -deTL`HS@BLddlRPrm@@@FEYS\OHd m1 pattern mutagenic high -dmtLPHS@BEBLddlRVFUh@H@H m1 pattern mutagenic high -eMPBchLD^T m1 pattern mutagenic high -gJPDADFHRYfaIXXH|f@ m1 pattern mutagenic high -dkOL@Dhpg\bbTTLVZjjj@H m1 pattern mutagenic high -dcLL@@gTfYe]aZYjf@H m1 pattern mutagenic high -gNp`@df]Zi@pvMyF m1 pattern mutagenic high -dmtHPBBHfHRYeUXXHHh@LFCJxYyB` m1 pattern mutagenic high -daE@`LX@aIYZfjZd@` m1 pattern mutagenic high -gGTHE`DILkU@XDKWdH m1 pattern mutagenic high -deWD@Li`QImenEjZi@H m1 pattern mutagenic high -dcOH@DWPRYyWQej@BP@` m1 pattern mutagenic high -dg}@@@mJYeU|]Tz@@@H@B m1 pattern mutagenic high -dcND@LADf^YZUZ`HH@H m1 pattern mutagenic high -dcnH`FDHaIe[gkev@@`@@H m1 pattern mutagenic high -eMbDBDfp|` m1 pattern mutagenic high -dcMD@DpBRYgmUujh@@@` m1 pattern mutagenic high -dmuh@DJaePRUeYxZ`@h@H m1 pattern mutagenic high -dcNd@DJadMrIJIJE\MP@U@A@ m1 pattern mutagenic high -gChHH@aJz`LDEqS@ m1 pattern mutagenic high -deVH`BDHaIf]vzB@h@H m1 pattern mutagenic high -deU@@@eIYVvG`BL@H m1 pattern mutagenic high -dcM@pEtIAICICHiCDedLuP@R@D m1 pattern mutagenic high -dkmH@JTDeVVutvjh@@@` m1 pattern mutagenic high -dmw@`Ds`BDf^YyUjB@@B m1 pattern mutagenic high -gGYHMQHIJmT`XJKbq@ m1 pattern mutagenic high -eFhHcA`d m1 pattern mutagenic high -foA@R@HHqH@QddebRbrPeV\m@D@@@A@ m1 pattern mutagenic high -foA@R@HHqp@QddebbrRTeV\mA@@@@A@ m1 pattern mutagenic high -foA@R@HHpx@QddebRfRpiFlm@@@P@A`sEFBT{bMF@ m1 pattern mutagenic high -daE@@@yIe^f`@`@pILJnHG@ m1 pattern mutagenic high -dmuD`LVD@HrREQIXYV`@`@` m1 pattern mutagenic high -f`i@@@LdbbbTRVHeZ][uHAD@D@@P m1 pattern mutagenic high -f`i@@@LdbbRRlRSI\D{qAHT@D@@XJpRgIZMYwnHPH m1 pattern mutagenic high -eMCBthabHzB m1 pattern mutagenic high -dk\H@@RfU}WJxZA@fXBIh m1 pattern mutagenic high -f`iQ@@AR@drnrjmFJt{t@Du@@@@XR@cAJRM[wHN@ m1 pattern mutagenic high -dmM@@@qJY{WJeVj@B@CCdrfzUy@` m1 pattern mutagenic high -ffc@H@@\eYtRurJJIQPpjYQYLxkR\m@qAUUUQ@A@ m1 pattern mutagenic high -fmo@H@@B}GKYkrJJJJJIY[EQJKIbmNlGhv`BH@Rjjj``@` m1 pattern mutagenic high -dk|@@LdbbbRQKauS`@`@`@H m1 pattern mutagenic high -dcND`La@BLddJTrRzmT@@@XMaMpkqIt m1 pattern mutagenic high -fc@H@@\ddoU{rJJIQQXsIYJIQYLxhpXcftCDP@EUUUA@A@ m1 pattern mutagenic high -fewAP@@Fbt^QQJJJIRI[RKYr`mA}eMVfjjjjjjjj@B m1 pattern mutagenic high -fheP`@BJ@GHhhdhlhiVRxHuc^ZejjjYh@LNXIsQk^yAp m1 pattern mutagenic high -dcmH@EtDie_[JxZA@f`@` m1 pattern mutagenic high -fhy`a@APP@HtDYICDeLeLerVc^Bl@QP@D@A@ m1 pattern mutagenic high -foQP@@@VRfYe]Z\d[S`@@@H@@CCaFBUhsnHyX m1 pattern mutagenic high -dco@@@PTfyVwiWV`BJD@` m1 pattern mutagenic high -dig@@@aDkYWaZ@@@LJPj[nI@` m1 pattern mutagenic high -fbmA``BLbCDubNqLxfQQQQJYRqZGdeVBfZfi``bX@B m1 pattern mutagenic high -dg|L`HS@BLddlTRbLj]kP@@@@FGXpsiwrE@ m1 pattern mutagenic high -flm`@@@ITssJjnsdk^RFHP@@@@@@@D m1 pattern mutagenic high -f`i@`@@DRYfyU]`mNmyi`@@B@@LN\dhug^yCP m1 pattern mutagenic high -dk\B@@zSrJJIQPenWV`X`h@LLFUyfLX m1 pattern mutagenic high -edZPK@@@FAEG@dnaec`X\bbbbbbIbRbTrbJffW@fefUUssPSDQUUUUUUTT@A@ m1 pattern mutagenic high -dmvL`NaL@HrRRqQZUV``@@` m1 pattern mutagenic high -fa{@a@K]@DNdLdTtbRLRbLfVuAJtFMVuUUUUURsU@AaxAJLxJRcVBgIZ|QA@ m1 pattern mutagenic high -few@c@OS@DXB@rFRJQZQYFIQFSK[bcVSghzjjjjjjefj@B m1 pattern mutagenic high -ffsA`@@VkdTRTtRabrTRhqQoARUijjijjjj@CArLTxJRcN}GIZ|`d m1 pattern mutagenic high -fa{@P@@VkwHhdiheCEdheKQbc^BdkSUUSUUTuP@P m1 pattern mutagenic high -dmL@@DjYeVdU@@`@@LFpjFUxc\ m1 pattern mutagenic high -die@@@aJyexV@`@C@binxdB m1 pattern mutagenic high -dk^D@IAdfYYwz]MjTHB@CBjE]ObYH m1 pattern mutagenic high -f`ih`@LRt{pAISK[NzRbmV]UUPHEP@FCHDipWnHPX m1 pattern mutagenic high -fnki`@DTxIPOMrJIQQKYQQIIEgIJSWIVjVZ`hJJb@B m1 pattern mutagenic high -f`iQP@DX@IQoYEEDeEeBf\uYwfjffjj`@` m1 pattern mutagenic high -detB@@kirQQIRyS]UUUPAaTXPsqDX m1 pattern mutagenic high -dieH@BDDfYun``H@LLrny`DH m1 pattern mutagenic high -foAP@@@XRf^uu\Tdij`@fXACU@ m1 pattern mutagenic high -deUH@JDDinUzZBA@@pIBZ^Ip` m1 pattern mutagenic high -deUH@AdDimW[j@BP@pIBknId` m1 pattern mutagenic high -dig@@@pldTRaifij`B m1 pattern mutagenic high -dmN@@@rRJKQEneP`@@@CCdrfFUyG@ m1 pattern mutagenic high -fb}@B@@AFQQQJQIHqZIgEV\FNZjjjjjjj@B m1 pattern mutagenic high -flu`P@@`T[vQQQQQQQIR|EjKdm@DQ@pP@A@ m1 pattern mutagenic high -f`ip@@@V}dbbbbRrQirQmN@@@@a@@B m1 pattern mutagenic high -fc``@D@wdTRrbfdRQfRdrvtxLRufmjjjjjjjjjj@CCjLTYpRmFl{pXiKUoQsWodB@ m1 pattern mutagenic high -dmtL@@x\bbbTUZViVf@H m1 pattern mutagenic high -foA@`@@NRYWVUzLMYiY`@hAAcasAJRTYwLHyh m1 pattern mutagenic high -ffcA`@@EjdrnsLjomF^SGKRsP@@AT@@P m1 pattern mutagenic high -fdy@P@@^CEIe]YVvhpufef@Bf`@H m1 pattern mutagenic high -dmtL@@QTfyeQehBA@C@jXYxb\ m1 pattern mutagenic high -dg\B@@SSRYYYyVvhJA`@H m1 pattern mutagenic high -deUD@DpFRUVTYZZZPcJ m1 pattern mutagenic high -deVH@IAJYW~F``H@LJPj[nId` m1 pattern mutagenic high -dk^@@@RfYU\]Tzjjjj@LKBDpj[ae]L m1 pattern mutagenic high -gJQHBLQIVi@` m1 pattern mutagenic high -dieD`Dqa@HRYVZyjfX@` m1 pattern mutagenic high -daDH@@RYWih@H@LLrny`HP m1 pattern mutagenic high -dg^D@LADf^YVyUj@`j@B m1 pattern mutagenic high -difH`FDHaIe[kh@b@B m1 pattern mutagenic high -gGT@Adekj`LD[rX m1 pattern mutagenic high -daD`@@pjRfUi`HH@LH{fHS@ m1 pattern mutagenic high -deTh@DiiAIYmQfj@@@H m1 pattern mutagenic high -deVD@NBTfUuifefX@` m1 pattern mutagenic high -gGYHL`DIMlu@XHwbF@ m1 pattern mutagenic high -daxD@@QIeYjZ@LBpf{dT m1 pattern mutagenic high -dcNL@D@mRY^UyUj`@`@` m1 pattern mutagenic high -deVh@LKadDimY[j@B`@` m1 pattern mutagenic high -dmuD@ITDR[e]xV`@d@LBJf{bHh m1 pattern mutagenic high -dmuH@DpDf[mYUj`@@CAj[ae^Q` m1 pattern mutagenic high -gOp@DjWkB@@LMc^ZI` m1 pattern mutagenic high -dcNH@DCHheEDbnmPT@@F@hUMproHt m1 pattern mutagenic high -dmuL@DHJUIeeTYZijT@` m1 pattern mutagenic high -deVH@IAIfu~Eh@H@LJpj[nQH m1 pattern mutagenic high -dmuD@DpERYyWFVjjj@H m1 pattern mutagenic high -fgAp@@@XEdbbTTrLiI`mFBBhea`@pYSdmFmrB@ m1 pattern mutagenic high -diW@@@pdieZfxPHJH@` m1 pattern mutagenic high -diW@@@rdiefa[``hH@ppf{bHH m1 pattern mutagenic high -dev`@@pjYJYejxY@bJH@pPYxc\ m1 pattern mutagenic high -fgA@@@LdbbbTRoIBMjp@@@@@@FDlTYpTeZmrA` m1 pattern mutagenic high -dk|H@@RfU{WJx]N`PJjH@` m1 pattern mutagenic high -dew@@@rdifYj^DHJ``B m1 pattern mutagenic high -fgAP@@@BrQQJESITXJQk@PT@A@@X\IPRmFmrB@ m1 pattern mutagenic high -dg|L@@ildTRbrJQTJtEAEL@D m1 pattern mutagenic high -foQH@@@XhiJYmg^YpRcVBHJiXX@H m1 pattern mutagenic high -gOy@LDeYMjj`H m1 pattern mutagenic high -det@@DjYUX^d@@@@CAbinF^Hf@ m1 pattern mutagenic high -die@@@EIe[ih@J@CBdrnGd@ m1 pattern mutagenic high -dmNH@HCHhheDVzU`@@@@LFCJXYxgJ m1 pattern mutagenic high -deVD@LBTeegijfjd@` m1 pattern mutagenic high -dk^HPNHHbXaIf^UvGS``B@@@` m1 pattern mutagenic high -dclL@@GTf[VwiWV`BJH@pHjy^Q` m1 pattern mutagenic high -daEH@DHDfURijZ`CAF{bI` m1 pattern mutagenic high -dg}H`LHPBDigUm\h{ifd@H@LAABe]N~Pp m1 pattern mutagenic high -daED@LhDRY[Ifjf@H m1 pattern mutagenic high -dev@PF@HdHrQQJEEPsTlmPA@ m1 pattern mutagenic high -gJPhLQDIKTpD m1 pattern mutagenic high -gJPhHPDIUmHFDGDl m1 pattern mutagenic high -gJXhCL@aJyf@` m1 pattern mutagenic high -do~L@M@iRYg^ufzB@jj`@pLLJnFUt{\ m1 pattern mutagenic high -eMACDXaIhH m1 pattern mutagenic high -fjs`@@@ISLjmvj~JBtjp\iKP@@@@@D@@A@ m1 pattern mutagenic high -dmtB`HSBCprRSFIJUZh@@@pinFUxfD m1 pattern mutagenic high -fbm@P@@BBeIfYfUWybm^mEh@b@aF`@B m1 pattern mutagenic high -dclL@@HTfYm]aWViB@`@ppiWfUv` m1 pattern mutagenic high -f`qAP@@LDivQQQQQRk[`mFZBX`j`@H m1 pattern mutagenic high -foQPB@F\@DYHheBeLdRdeV]Th@@D@@X\@RfcV]qBI@ m1 pattern mutagenic high -fhypB@F\T@HrQQJEJIIXeIZ|FiPBB@`@B m1 pattern mutagenic high -dgH@LiPRUYYWESnj@@@@@` m1 pattern mutagenic high -fdeIb@LLDhwh`BLdTrbRJbTOARTxM@PMUUE@AaHBJRu[pX|`x m1 pattern mutagenic high -fdeP`@E^@{HhhhhhdeBpV`vbt@Q@LD@@XLyhu`qxaW` m1 pattern mutagenic high -gOx`FJdlm[MLAyib m1 pattern mutagenic high -dk^D@NBdef^ukmMfi@B@B m1 pattern mutagenic high -fb}@P@@HM{HihheDeEdbIVk^BgKP@@PT@D@A@ m1 pattern mutagenic high -didL@@RdfVwaZii@LHKfMp` m1 pattern mutagenic high -f`i`@@@ISLrjSdkZ\@@@DD@@D m1 pattern mutagenic high -fhyP@@@VrQQQQIYHrgIFtx@@@BJ@@B m1 pattern mutagenic high -dg}H@DxDfVyVyO[Z`@@@@H m1 pattern mutagenic high -dcl@@DjYU_egX@@@@@p[J[agaHRz m1 pattern mutagenic high -dcl@@DjYU_egX@@@@@pYLJngaLJz m1 pattern mutagenic high -fdyH@@@P]yJVYU_Ud[Uf`@@Bj@D@T m1 pattern mutagenic high -deVH@DAIgeQej@@@LJSFx^IT` m1 pattern mutagenic high -fnsPR@FJtZw`AFRJQQEJIVYQIXYrUVuUUSLt@E@@XN@cAJ\TXJ\ejt m1 pattern mutagenic high -dg}@@@aJVYU^Svv`@@@@`KCj[ae]yaGX m1 pattern mutagenic high -dazJ`JaLK`BLddNRuR@P m1 pattern mutagenic high -dmvh@HJfTLbbbdSZZfji@H m1 pattern mutagenic high -daDH@@RVU[f@@@LL`fyfUp m1 pattern mutagenic high -fhyA`@@HBdrrkN~RdcN|uA@@AP@A@ m1 pattern mutagenic high -fdu@@@DjYee]}faRlGtP@@@@@@@@puS`eZMYw`qyC@ m1 pattern mutagenic high -flm@@@LdbbbbbVNVxhUc^bd@@H@@@@@CCUNRUhsoAbgdF@ m1 pattern mutagenic high -fjcA@@@YDhhhhdeElcqVgVcdm@@@@D@@@@P m1 pattern mutagenic high -flm@@@DjYeeoyHQm^bd@@@B@@@@CCUNRUjsoAbgdL@ m1 pattern mutagenic high -fduA`@@TCdbbTVbfbLIPQmN}F``@@BH@@H m1 pattern mutagenic high -deT`@@aIRge_aV@B@B m1 pattern mutagenic high -dif@@@RfU~F``@@pxDpj[nPH m1 pattern mutagenic high -dmND@BA\bbbTUZ^EjVih@pSayfTp m1 pattern mutagenic high -gCaHLHaIYaIXHSbV@ m1 pattern mutagenic high -dcLD@@uIfYoXVfZi`CANWbUH m1 pattern mutagenic high -dmtD@@eIfUTUjBB@@pDHJfxYxfJ m1 pattern mutagenic high -gNy@LDeVjj@phQkxi` m1 pattern mutagenic high -dg^F@D@nt{RUefuFVjjjj@LMSJ[ae]N~Q@ m1 pattern mutagenic high -dae@`LH@aJYTj[jZjPCC@RnHw@ m1 pattern mutagenic high -f`ipB@L\D@HrQQPsISIDXkSoUL`@@P@A@ m1 pattern mutagenic high -dk]D@BXDR[ee]ntvf``H@H m1 pattern mutagenic high -dk^D@M@dfYmUXUMjP`R@B m1 pattern mutagenic high -fgA@`@@VRfU{WqS`mFhD@@h@@` m1 pattern mutagenic high -foQA@@@ISJkZ~J\eYu@aA@P@A@ m1 pattern mutagenic high -fhyh@@@XIQVRJJIIZEKLyISo@TEP@P`@P m1 pattern mutagenic high -fdeI`@LZCDDeYHhhhlhblbTM[pZjjhDBh@B m1 pattern mutagenic high -f`iH`@LR]x@diemg]IQVkNjjhDBh@CCdBTxHwnHQh m1 pattern mutagenic high -fHahAa@ m1 pattern mutagenic high -f`q@`@@^RYWUe^cKN`@f@B@DNVB`HpRbmFm{bNB@ m1 pattern mutagenic high -gGP@DiVV`hipJqoDH m1 pattern mutagenic high -deTH@@RYWVf`@j@CC`SBhYyG@ m1 pattern mutagenic high -dmu@@@QInUwaZ@BP@pxDJfz^Ph m1 pattern mutagenic high -da{@`Dp`BDfUvjXHj` m1 pattern mutagenic high -foApP@DXxBQgYEDhihUCPVkMMUUTp@X\hpRcV]qGM@ m1 pattern mutagenic high -dmM@@@{IEEEEZzU@B@@@LBHYWbTp m1 pattern mutagenic high -dcmH@LXDee[UnWZ@@@@@` m1 pattern mutagenic high -foAQ@@NB@drnkJtYYt@Dp@@BGJ m1 pattern mutagenic high -f`qQ`@DXAKrSLj}klyYsUUH@T@A@ m1 pattern mutagenic high -dclL@@YTfYetngV`hD`@pJag^Ic@ m1 pattern mutagenic high -gNx`LDdvkUHFAqkyD m1 pattern mutagenic high -dif@@@RYWZZ@BP@piLJnx`B m1 pattern mutagenic high -fhi`C@I@dDRFICHiCDeMhdaJ|Fj@H`@@@H m1 pattern mutagenic high -fhia@@I@RfuuYWYqwj@BX@H@PEP m1 pattern mutagenic high -f`qh@@@XIQfRJJKZJEJgG^ejj`@`@LADYIVcV]rG` m1 pattern mutagenic high -gC``AdeZ@pdxe` m1 pattern mutagenic high -dg|d@BE[CDeenUyT{Zj`PH@H m1 pattern mutagenic high -dk^h@DX]LDf[e]xUvj`PJ@CB`riOdP m1 pattern mutagenic high -foAh`@BBUYpLIKW\kleFluU@`T@A@ m1 pattern mutagenic high -dmu@@@EIYWYnX@J`@pxLJfe^Q@ m1 pattern mutagenic high -daE@@@aJyUnX@@@pHj[nIF@ m1 pattern mutagenic high -daDH`NCDRYWih@H@LBALkbEp m1 pattern mutagenic high -fdyqP@DXxBUoQrJIQSQYQPtDYsSUUUML@D m1 pattern mutagenic high -dg~H`NX@aJU{YWBNzVZ@B@B m1 pattern mutagenic high -daE@@@aJyUnX@@@pPjxTXw@ m1 pattern mutagenic high -deVD@J@TinUzZBB@@` m1 pattern mutagenic high -dcMD@JDErQSQIE]MA@e@A@ m1 pattern mutagenic high -fhipb@LBCA@@cIIBhhddmmNmyZ`@@B@@H m1 pattern mutagenic high -gOx@@eLmXD@AaUcV m1 pattern mutagenic high -foQ@@@LdbbbRQrYHRkN@@`@@@@LIXIPRmFl{dN@ m1 pattern mutagenic high -foI`@@@IRlrj|DTxjqgUP@@AP@A`jBFBdkQkNy@@ m1 pattern mutagenic high -fdu@@@DjYee]}faRlGtP@@@@@@@@pubgEZMYw`qy@P m1 pattern mutagenic high -fmoA`@@HWdTrTTtbRLrTfVrk^CdhymUUUUUUUUU@AauFBTYrRmFl{pXyKUoQsV m1 pattern mutagenic high -difH@AAIfU[hBA@CB`Jf{bXH m1 pattern mutagenic high -foAP@@@TRfyWm^RlzP``@@@CBQJLdkQkNxaG@ m1 pattern mutagenic high -dmuD`IVD@HrRFIKKaV@BP@` m1 pattern mutagenic high -deVH@DAIgeQej@@@LBSF{fTL` m1 pattern mutagenic high -fde@`@@DRYg[VU~BLxLViZjB@X@CCfBTyiwnDeXLP m1 pattern mutagenic high -ffsA`@@HjdkJvmk\oAZMxJRm@AUUUUEP@XNISdeZMYwhirWbHU@ m1 pattern mutagenic high -fa{A`@@HzdrmkZvmrrUYtTeZuP@UUUUQT@D m1 pattern mutagenic high -foAQ@@KN@eLrjbthu@@@D`@D m1 pattern mutagenic high -fhy@b@K^@DISLsJntyIq`t@PPID@@XR@rRmF]xOHB@ m1 pattern mutagenic high -f`ia@@A@RYV{UVgEZ]z@Hf`@@@H m1 pattern mutagenic high -f`yp@@@PudbTRbRbQqRVeNmzZ`@`@`@B m1 pattern mutagenic high -dknD`La@BLddJTRVtuj``@@` m1 pattern mutagenic high -dmuL@DpFEIeY~nZifh@pILe^Qp m1 pattern mutagenic high -f`i@`@@VRYfYU]`eNMyh@`AB@@LNTyKQg^yAP m1 pattern mutagenic high -dcnD`La@BLddLTJULnkU@A@A@ m1 pattern mutagenic high -foQ`@@@ISLrkiJRMiu@A@DP@A@ m1 pattern mutagenic high -foQP@@@LRfV]uZ\djsjjfh@`@CAPHHIQfcV]r@` m1 pattern mutagenic high -foQPB@HH@DYHddheBe``iV]RuJ@E@@P m1 pattern mutagenic high -dknD@FBTieenGZB`h`@` m1 pattern mutagenic high -dieD`JXaCDRYgvzejX@pHLi` m1 pattern mutagenic high -dcND`La@BLddJbRrzmPP@@XMS\LkqLt m1 pattern mutagenic high -foAQ`@EZ@JVQQQQQIWLTZsT`tAP@D m1 pattern mutagenic high -dcN@@@Rfye~f`Hb`@pzfxYW^HB@ m1 pattern mutagenic high -dg^D@DCdefVUUMjBHb@B m1 pattern mutagenic high -dg^H@LAJUyfUSjhBH`@` m1 pattern mutagenic high -dif@pDBHjHFHrJIQEn`HH@H m1 pattern mutagenic high -did`@@pjrQQIFf@`h@LDx^XaL m1 pattern mutagenic high -dcN`@@pjYJYe}k`Hbj@B m1 pattern mutagenic high -did@p@qBqAqDfYun``H@H m1 pattern mutagenic high -deTL@@jTef_xVB@`@phj[iyD@ m1 pattern mutagenic high -foAp@@@P\eKLjorMjsP@@A@B@KBQJLxJRmNyBp m1 pattern mutagenic high -deT`@@pjrQQQUMpEAP@XDUCOHX m1 pattern mutagenic high -dmLh@DkeAIYe]neZhDB@CCBF^HD@ m1 pattern mutagenic high -dk\d@Dki@|bbTRQR[aejeZf`B m1 pattern mutagenic high -deu@PLX@bPaJWY\HYiZVh@` m1 pattern mutagenic high -gJ]@EbDfVdCqX` m1 pattern mutagenic high -dg}@@@aJnYU^Svz`@@@@CARinFUt{yD@ m1 pattern mutagenic high -dcML@DpFEIeY{kfjYj`B m1 pattern mutagenic high -foAQ@@KN@eLrj~bthu@@@E@@D m1 pattern mutagenic high -foA`@@@ILkjrmFV]@AL@@@ar` m1 pattern mutagenic high -daFD@JCdefZyiZ`B m1 pattern mutagenic high -dclD@@EJY}erevfVfiBJlFpje]xbL m1 pattern mutagenic high -foA@`@@VRfum[V\Uj`@@JP@B m1 pattern mutagenic high -foA@@@DjU][VgKNBAJ@@@PiXZ`cAJLdkQk\`x m1 pattern mutagenic high -daFH@HAIYUnh@@@phHJfxf\ m1 pattern mutagenic high -deV@@@rRJFICMPD@@XLfTwCrI@ m1 pattern mutagenic high -dk]@`FD@aJY}e\kSif`@`@` m1 pattern mutagenic high -f`qQ@@DX@drlrj~gV|uUUUUP@P m1 pattern mutagenic high -dg}@@@aJVYU^Svv`@@@@`K@Z[ae]obDX m1 pattern mutagenic high -dmwD@LxPQIeVvUZjZd@` m1 pattern mutagenic high -dgH`NW[@HRfum]XYV`BFiH@pXLIewbHX m1 pattern mutagenic high -dk^H`Lt@aJWYW\JUiX@J`@pxD[ad~Q@ m1 pattern mutagenic high -dieH@JxLbTTQkfej`CAFGbPP m1 pattern mutagenic high -difH@AAJY}rjYY`bj m1 pattern mutagenic high -fhiA`@@Hddjrm|jIW`mPAD@@@A`kEFBTZsoAyB@ m1 pattern mutagenic high -fgA`@@@ISLrotyHvk@@@@@@@XLYIVcVy`gA@ m1 pattern mutagenic high -f`q@`@@HRUfYU_Sk^Zh@@@@@LELxJRmFl{wDPp m1 pattern mutagenic high -foQAB@E@BDiegUteARlz`RB@H@@` m1 pattern mutagenic high -gGX`JDdjmVA@ m1 pattern mutagenic high -dmtL@@RTeVUaUj@H@C@jXUydYH m1 pattern mutagenic high -gJX`LDdju@P m1 pattern mutagenic high -fjs@@@LdbbbbbbfIQxhSiFmGIP@@@@H@@@@LM\dkQk^bgI^PB m1 pattern mutagenic high -ffkA@@@YDhhhhdeEmE^JuztPiKV`@@@@@@@@@` m1 pattern mutagenic high -fbc@@@LdbbbbbbQQsEBMKuhir@@@@QE@D@D m1 pattern mutagenic high -ffsA`@@VkdTRTtRabrTRhqQoArUijjjjjfj@B m1 pattern mutagenic high -dmM@@@iJYewJEYB`R@CBbinWbCH m1 pattern mutagenic high -fb}H@@@TMYJYewyUWEAJ]yNYB`RZ`B@A@U@ m1 pattern mutagenic high -diTH@@RfU|kahDB@C@biaxb\ m1 pattern mutagenic high -f`iQ@@L\@dmKZzhiJt{sUTu@D@@P m1 pattern mutagenic high -dgH@DWPRUe[mzSmh@ajH@` m1 pattern mutagenic high -diW@@@rdiefa[``hH@pQnybDH m1 pattern mutagenic high -dcm@@@sIEDeBeSKhD@@@@XYpkrdiit m1 pattern mutagenic high -dieH`HHPBLdRbQrjYi`B m1 pattern mutagenic high -dklF@@pUttiinwZZjjjh@` m1 pattern mutagenic high -fbu`R@@zM[pHcHhheDeDeNdpTcPDQSTuQ@A`HFJRlxJ^Hcd m1 pattern mutagenic high -fde@P@@BUYIfYfVwXKWgQZ@H``b@@H m1 pattern mutagenic high -flu@P@@BBeIfYfWgvJtztV`BH@dh@@pypVcVbgdO@ m1 pattern mutagenic high -dk\B@@HSRYfu}aWViB@h@LJKiT~QP m1 pattern mutagenic high -f`iA@@@IKLl~krRmN|p@@@@@@D m1 pattern mutagenic high -dmM@@@eJYYvfEP@@`@B m1 pattern mutagenic high -deUH@LXDeYgXZjYX@` m1 pattern mutagenic high -defJ`JaLFP|LddjRcUTpA`rXUMH m1 pattern mutagenic high -fbc@@@LdbbbbbbejwMB]Hu`ir@@@@@@@@@FFnBehuoAbgOHJ@ m1 pattern mutagenic high -fdm@@@LdbbbbbfjSCBUIuoAb@@@@AP@`A@ m1 pattern mutagenic high -do|D@@eIfUwU[hBAif@siXz m1 pattern mutagenic high -dklD@@SHihdhYNEh@Jh@LFPjWSxgB m1 pattern mutagenic high -fb}A@@@YDhhhhhdhb^ZMyrXyh@@@@@@@@H m1 pattern mutagenic high -flmA@@@ILroJ}jQ`iV]EKPPA@@D@@D m1 pattern mutagenic high -dk~H@NAJUmmRkatzVd@J@B m1 pattern mutagenic high -fgAa@@N@Re[UUIPTcVijeif`@` m1 pattern mutagenic high -dcNL@M@iRYg^vzB@j`@pdLJnFUt m1 pattern mutagenic high -dmtL@@SdfVUyUjA@@B m1 pattern mutagenic high -gFp@DiTvVhC@qX|Ph m1 pattern mutagenic high -dif@@@rRJEKaj@@@LBSF{fEP` m1 pattern mutagenic high -foAp@@@P\eKLjorMjsP@@A@B@K@QJLyIVg\PJp m1 pattern mutagenic high -dk]D@HDMrJJJJHiaTx@HB@@H m1 pattern mutagenic high -deTH`NBHRYWVf`@j@CB`SJgbDH m1 pattern mutagenic high -gGY@DDfUj`LLc^S@ m1 pattern mutagenic high -dknJ@CCNgTieY_hZjjjx@` m1 pattern mutagenic high -fhiAP@@XyKRTrlovmA^CUUUP@P@FAhDipTmFl{p^HPp m1 pattern mutagenic high -deVH@BAIemQfk@@@LFbfxYy@@ m1 pattern mutagenic high -fhyp@@@NBeSMrnjpRkF|D@@@Q@@A`kENBejsoA@ m1 pattern mutagenic high -fleq@@JBBAIYe_e]nR]z``R@Bh@PyP m1 pattern mutagenic high -dclD@@{HhheEBtkl@D@@@XTGCJ|sFt m1 pattern mutagenic high -gFx@@eRqUU@P m1 pattern mutagenic high -gFx@@eSQUU@P m1 pattern mutagenic high -foAQ`@DX@pRSJs|kSegMTs@A@@X\QaVcV]rG@ m1 pattern mutagenic high -dk^L@DBmRYVuvfeVj@Bh@H m1 pattern mutagenic high -gNs@IcPdmmMHD m1 pattern mutagenic high -foAqb@BTYIS`RBSLnmnsakTmTuUP@P m1 pattern mutagenic high -daEH@DHDfYVyje`CAJ{bXp m1 pattern mutagenic high -dieD@DHFRYf^EjiX@` m1 pattern mutagenic high -f`q@R@HHpP@QddarbbTQtYwej`@@@@B m1 pattern mutagenic high -deTL@@J\bbbRKBuKS@FBUwDq` m1 pattern mutagenic high -dcLDPBtHbXcHhhddbppPQR@D m1 pattern mutagenic high -did@@DjUZnBBH@LBinGfPf@ m1 pattern mutagenic high -gOp`@tiguif`LEksHl m1 pattern mutagenic high -daD@P@qBbDfYvzB@@B m1 pattern mutagenic high -dk\H@@rIJJIQDYtz`@@@@H m1 pattern mutagenic high -fgA@@@LdbbbTVKIBMjp@@@@@@FDlTYrRmFmr@` m1 pattern mutagenic high -dmNH@BAJ]YVDeZj@B@B m1 pattern mutagenic high -dk~H@LAJYWmRkatzA@@H@B m1 pattern mutagenic high -foQh@@@\UYvRJJJJsITyKQk@A@PtD@D m1 pattern mutagenic high -dcmD@DpFRYUmRi]Zijj`CAlxYW^P` m1 pattern mutagenic high -dg}D@DpNrJJIIPiDqvuTuUT@P m1 pattern mutagenic high -fgAP@@@\RfYe_irQmV@@@@@@@pxQ`eZM[dI@ m1 pattern mutagenic high -dctDXJXIAICi@YAYCYCHiMEHyUMUPA@ m1 pattern mutagenic high -fjc@`@@VrJIJZIPqYIJcEF|ENVfjjjjjj`@p|cENBdkQkN}EN^HBT m1 pattern mutagenic high -dieH@BxDfYUa``P@LBCJGbMp m1 pattern mutagenic high -dg|H`BBHRYe^uXSnBB@@@@pxLhYT~Xvv m1 pattern mutagenic high -daE@@@yIeVf`@`@pHLKnHc@ m1 pattern mutagenic high -ffk@`@@LrJJJJHsIIPi\dkWhaRVmPTP@@@B@@A@ m1 pattern mutagenic high -ffk@@@DjYee^uyHQmNCDmP@@@@@@@@@B m1 pattern mutagenic high -f`q`@@@YIEBedhdnB]zh@J@@@@` m1 pattern mutagenic high -fhy@`@@\RYee~uYrVoAZA``@H@@pyPTmFm{fLNB m1 pattern mutagenic high -did@@DkYWaz@@@LF`j[ayB@ m1 pattern mutagenic high -fduP@@@^RiggmUvBdjwgAjjfABJh@B m1 pattern mutagenic high -dcLDpITJsjsZqIfVYXXBHZ@C@`y]xfB m1 pattern mutagenic high -fhiA@@@ILkkLktYxL@DtD@@H\lM@Q`eEZMYwnHxD m1 pattern mutagenic high -fleA@@@ILklrsoQdTp@SUA@@BGJ m1 pattern mutagenic high -daF@@@RYWih@H@LBALkbEp m1 pattern mutagenic high -fdyQ@@@qAdTTRQTRVTYrshBA`@f@DNT m1 pattern mutagenic high -daF@@@RYWih@H@LBCBkbIp m1 pattern mutagenic high -fbmP@@@IrRJJIQJIHdjmhKhu@DPQAT@@X^qS`iJtZsoAbgH m1 pattern mutagenic high -fhya@@K@rQQQQIYHrgIFtziAhEJh@B m1 pattern mutagenic high -dmvD@DCDeUeYUj`@@B m1 pattern mutagenic high -dmL@@DjUgZFUBBbb@LISBinFUyD@ m1 pattern mutagenic high -dmvH`Nd@aIe]Zf`@i`@piLJex`\ m1 pattern mutagenic high -deTDPDpHb@cHiCDdLrp@@A@ m1 pattern mutagenic high -dmvD@JBTin_^F``J@C@dIexe\ m1 pattern mutagenic high -daE@@@aJmUnjjh@pYLJf{dP m1 pattern mutagenic high -fl}A@@@IRlrjkoAENJl[tTuP@@@@T@@D m1 pattern mutagenic high -dknL@LACRYVuvUZh@J@B m1 pattern mutagenic high -fhyA`@@B|dsLro~pRkF\t@P@EP@A@ m1 pattern mutagenic high -dk\B@@z]rJJIQPqnTv`XbH@H m1 pattern mutagenic high -flu@P@@\e{HhheEEcDef\TZJV`Xb@`H@@pebRkN|FJ^PD m1 pattern mutagenic high -daGH@LJ`rQQRyULs@D m1 pattern mutagenic high -dcnD@B@TfYm]aWViB@`@` m1 pattern mutagenic high -dcn`@@rawIEDhiUTkhPUCD@XDc\oHt m1 pattern mutagenic high -fdei`@LJLzHIZrQQQQIJJkDiYpXuUUTBAP@D m1 pattern mutagenic high -fhypB@M^B@HRfYU[wDYUg^h@@HF``@` m1 pattern mutagenic high -dmtL`HS@BLddlRRFUh@H@LJqne^QP m1 pattern mutagenic high -f`qAP@@\dYvQQQJJDiQgEZZAbBf`@H m1 pattern mutagenic high -fj}@P@@\]eIfVWyU^YrV`iZA``HHZ@@H m1 pattern mutagenic high -fc@P@@H]oHidhiiDhjdeIemjpXekM[UUUUUUUUUT@F@tXIQgIJtZsoAbdmV}GM^p m1 pattern mutagenic high -fj}@p@@BMGI\bbbbbbbtQqxkWgIZ@Hb@dj@@H m1 pattern mutagenic high -fdeP`@E^@{HhhhhhdeBpV`vbt@Q@LD@@XLxhu`qxcW` m1 pattern mutagenic high -f`i`@@@ITrlnzpRkN|DA@@@@@F@lTyKQk^yaBg@ m1 pattern mutagenic high -dmtDpFTH`h`XaIf[oi`bH`@phBXYyB` m1 pattern mutagenic high -fhiP@@@ARYe_YWYqwhBBh@H@@` m1 pattern mutagenic high -difH@DAIVUxU`@@C@biny@` m1 pattern mutagenic high -difH`Lx@cIEDcBjiYh@phLJayB@ m1 pattern mutagenic high -foAaB@LJ@DYHhhmMDbQegULpLA@@P m1 pattern mutagenic high -fhiQP@DX@IW`yEEDeDdbdsakMUMMUU@AaKAJRMYw`|ah m1 pattern mutagenic high -fhiPP@DX@IWdfYVU_V\MYjiijZhDKT m1 pattern mutagenic high -dk\D@@[HhhiDjbY]ZBhB`@` m1 pattern mutagenic high -deu@@@[IEDhcSCH@@@@FB]OBPjD m1 pattern mutagenic high -deVD@FADfygFV``@@pjfxYyB@ m1 pattern mutagenic high -deT@@LdbRTm\DDT@FCIc\L|RJ@ m1 pattern mutagenic high -didD@@iIYmxVfZPB m1 pattern mutagenic high -didD@@iIUexVZZPaF m1 pattern mutagenic high -f`qA@@@ISZzljscoT@Dp@@B@kCRLDhpTmFl{dO@ m1 pattern mutagenic high -dk]H@NTDimYuX]N`B@@@B m1 pattern mutagenic high -fhip@@@LCdbbTTrLvUIBt@DAEU@@FAdTYpTeFl{p^Pt m1 pattern mutagenic high -dmuD@DTArJJJFHUZijX@` m1 pattern mutagenic high -daE@`LH@aJ[Unh@@@pHD[nQP m1 pattern mutagenic high -die@@@aJVuxZ`@@CAlJfx^HD@ m1 pattern mutagenic high -gG]@DZDfUj`LDkqX` m1 pattern mutagenic high -det`@@raRfVZi[``jB@H m1 pattern mutagenic high -fhy@P@@BTGHhhhhhebfBtzwf`BH@J@@H m1 pattern mutagenic high -diU@@@aJVupnFZiV@H m1 pattern mutagenic high -f`ia`@N@LyIfV]UV\eiwf`XHjh`@` m1 pattern mutagenic high -fhyaP@E@EIwlbbbbbRjRXhuoAZdF`Jh`@` m1 pattern mutagenic high -diDB`HSBCpRjuVji@H m1 pattern mutagenic high -gGX`BJdsmLIgAZ|b@ m1 pattern mutagenic high -da{D@DJ`yIeUjZBBh m1 pattern mutagenic high -gGT`EaTf]j`LD[qK@ m1 pattern mutagenic high -dknL`LaM@HrRRqQHjUV`HJ@B m1 pattern mutagenic high -dcNH@DCHheEBdnmU@@@FGIeMpkqIt m1 pattern mutagenic high -gChHLLQIZ`LDEqS@ m1 pattern mutagenic high -dmu`@@pjY\dTTRak`Hbh@H m1 pattern mutagenic high -dmt@@DjUiZdHJb@CAd[ae^IA@ m1 pattern mutagenic high -fdyhP@DTxIPCAcdTRbbURTRYrRfjVZjjh@LIHEKUg^CD m1 pattern mutagenic high -deUH@JXDeVVxVYjdHQ` m1 pattern mutagenic high -ffsA@@@YEDeMDhTihdZLUiwhyZjjjjjjj`@pbcAJ\EIVcV\FJ\uy@h m1 pattern mutagenic high -foQP@@@\rQQQQQKFdeVLx@B@@@@@` m1 pattern mutagenic high -fj}P@@@LRfVVWV}qF]GIYB`B@@@@ABE@ m1 pattern mutagenic high -gGPP@cTfyj`LInYF` m1 pattern mutagenic high -dk]D`LFD@HrRPjJIEatujB`H@LJrnE^YNf m1 pattern mutagenic high -dg|D@@WIEEEDYcPsmAQDT`A@ m1 pattern mutagenic high -dif@@@Rfufz`@`@piLIax`\ m1 pattern mutagenic high -flepr@M^SAFB\\CprRSEQIZJKZR`qZjjjfVh@LIDhpTeVBgdL@ m1 pattern mutagenic high -fjc@`@@LrJJJJHpiQKKdeZ]{IZ`h`@H@P@@` m1 pattern mutagenic high -fhe@@@LdbbbbbbcxhQiNlD@@@@H@@@pepTeZMYp^P| m1 pattern mutagenic high -fHbXAy@ m1 pattern mutagenic high -foAA@@@ILkjrmFV]@AL@@@arpTAFBTUhug\QpP m1 pattern mutagenic high -fj}@p@@\dYI\bbbTTVaaRaYIUhyZAbJ@BJ@@H m1 pattern mutagenic high -dcnH@EAIfV][iuhFAH@LJiag^Ib` m1 pattern mutagenic high -ffs`@@@YIDmeEEEDhlZL]DI\ujjZ@HH@d@@p}AFBTuYw`qSdmP m1 pattern mutagenic high -fhyH@@@\EKIEEEEEMUfRU[pYBb`@B@@H m1 pattern mutagenic high -fjsA`@@TdeJsZvoZpPsfk^CdmA@P@@@@@@D m1 pattern mutagenic high -fbc@@@DjYU_eUfByKQ`icd@@B`@@@@@H m1 pattern mutagenic high -fbc@@@LdbbbbbbcJwEB]Hu`ir@@@@DT`D@D m1 pattern mutagenic high -fdyp`@FRbABS\rornIW`mA@d@D@HBh m1 pattern mutagenic high -dmLd@Dqe@TfUeZzUZjUj@LLrUyB@ m1 pattern mutagenic high -dmM@PBx@c@aJYg\jeZdHB@B m1 pattern mutagenic high -daDHPH@HHHRme[fii@H m1 pattern mutagenic high -dk^@@@RYeg]ntxB@`@@H m1 pattern mutagenic high -dcmD@DHERYYUZz]Z``R@CBdHYwdL m1 pattern mutagenic high -digH@DJ`RYYrYjfh@` m1 pattern mutagenic high -digH@LHPRfU~F``@@` m1 pattern mutagenic high -gC`HAbIMTA@ m1 pattern mutagenic high -gC`DAbZHRVhCCB[dP m1 pattern mutagenic high -gCahHlNbNlA`a` m1 pattern mutagenic high -gChHL@aIZ`LBHl m1 pattern mutagenic high -eMFIDRM`` m1 pattern mutagenic high -daD@@DiYZYji`@ t3 mol tumorigenic high -daD@@DjUZxHD@@ t3 mol tumorigenic high -daD@@DjUZxHH@@ t3 mol tumorigenic high -daD@@DjWjXHB@@ t3 mol tumorigenic high -daD@@DjWzXHB@@ t3 mol tumorigenic high -daD@@DjYvxH`@@ t3 mol tumorigenic high -daD@P@bBbDfYvzB@@@ t3 mol tumorigenic high -daD@P@bFbDfUjz@H@@ t3 mol tumorigenic high -daD@P@bNBDfUzZ@B@@ t3 mol tumorigenic high -daD@`@BDeeVz`@@@ t3 mol tumorigenic high -daDB@@InRYgrfiZ@@ t3 mol tumorigenic high -daDD@@IIf]n``@@@ t3 mol tumorigenic high -daDD@@QIeZfZfh@@ t3 mol tumorigenic high -daDD@@QIe\jZehHj@ t3 mol tumorigenic high -daDD@@QIe\jZfh@@ t3 mol tumorigenic high -daDD@@QIe\jZihHj@ t3 mol tumorigenic high -daDD@@YIeZn`B@@@ t3 mol tumorigenic high -daDD@@iIeenjZd@@ t3 mol tumorigenic high -daDD@@yIe^fZVX@@ t3 mol tumorigenic high -daDD@@yIe^f`@`@@ t3 mol tumorigenic high -daDH@@RVU[f@@@@ t3 mol tumorigenic high -daDH@@RVU[j@@@@ t3 mol tumorigenic high -daDH@@RYVih@H@@ t3 mol tumorigenic high -daDH@@RYWih@H@@ t3 mol tumorigenic high -daDH@@RYe[hB@@@ t3 mol tumorigenic high -daDH`NBPRYWih@H@@ t3 mol tumorigenic high -daDH`NBlRYWih@H@@ t3 mol tumorigenic high -daDH`NCDRYWih@H@@ t3 mol tumorigenic high -daDL@@SdfURijZ`@ t3 mol tumorigenic high -daDL`HS@BLddJS\mUP@@ t3 mol tumorigenic high -daE@@@YIeZn`B@@@ t3 mol tumorigenic high -daE@@@yIe^f`@`@@ t3 mol tumorigenic high -daED@DHNRYWifif@@ t3 mol tumorigenic high -daED@DpFRYVkfjY@@ t3 mol tumorigenic high -daEH@DXDf[Vyje`@ t3 mol tumorigenic high -daF@@@RYe[hB@@@ t3 mol tumorigenic high -daF@`BBHRYg[hH@@@ t3 mol tumorigenic high -daF@`FBHRYVkh@`@@ t3 mol tumorigenic high -daF@`NBHRYWih@H@@ t3 mol tumorigenic high -daFD`HI`bDfYjzif`@ t3 mol tumorigenic high -daFD`JK`BLbbbMMTtp@@ t3 mol tumorigenic high -daFH@DAIeUnZjh@@ t3 mol tumorigenic high -daFH@HAIYUnfjh@@ t3 mol tumorigenic high -daGD@Dp`yIeVfZiX@@ t3 mol tumorigenic high -dadL`HS`BLddJULwKUU@@ t3 mol tumorigenic high -dax@X@bDbLbJbFbNbLbdLeUT@@ t3 mol tumorigenic high -dax@X@bDbLbJdFdNdLbdLeUT@@ t3 mol tumorigenic high -dax@X@bDbLdJbFbNdLbdLeUT@@ t3 mol tumorigenic high -daxB@@QnR[VZY`cH t3 mol tumorigenic high -daxB`HSBCpRjuZj`@ t3 mol tumorigenic high -daxD@@IIeujj@@ t3 mol tumorigenic high -daxD@@QImUifALj` t3 mol tumorigenic high -daxD@@iJU^jj@@ t3 mol tumorigenic high -daxL@@SDfUVjh@@ t3 mol tumorigenic high -daxL`HS@BLddNbuT@@ t3 mol tumorigenic high -day@`Dp@aIfYjj@@ t3 mol tumorigenic high -dazD@LADf]Vjh@@ t3 mol tumorigenic high -dazD@LADf^Vjh@@ t3 mol tumorigenic high -dazD@LADf^fjh@@ t3 mol tumorigenic high -dazH@DAIfujj@@ t3 mol tumorigenic high -dazH@DAImUjj@@ t3 mol tumorigenic high -dazH`LPHaInVZj@@ t3 mol tumorigenic high -dcL@@DjYn}aBHbh@@ t3 mol tumorigenic high -dcL@X@bBbFbAbEbMbDfYnijjjj@@ t3 mol tumorigenic high -dcL@X@bDbJbAbEbMbDfn^_ijjjj@@ t3 mol tumorigenic high -dcLB@@RURYYejyjieh@@ t3 mol tumorigenic high -dcLB@@RiRYyVQejjjh@@ t3 mol tumorigenic high -dcLD@@IIf]z[hHBj@@ t3 mol tumorigenic high -dcLD@@eJ[W[[j@Bk@@ t3 mol tumorigenic high -dcLD@@iJ[g]xZB@f@bX t3 mol tumorigenic high -dcLD@@uIfUk[hBBj@@ t3 mol tumorigenic high -dcLD@@uIfU}FV`PJ@@ t3 mol tumorigenic high -dcLDHFDH`haXcXaIf[ozYjYjP@ t3 mol tumorigenic high -dcLF@@IaWTfYnijjjj@@ t3 mol tumorigenic high -dcLF@@Rag\bbTVTILuSUT@@ t3 mol tumorigenic high -dcLH@@RYWUZZ@Bj`@@ t3 mol tumorigenic high -dcLH@@RYWYzZ@Bj`@@ t3 mol tumorigenic high -dcLH@@RYeZvz@`j`@@ t3 mol tumorigenic high -dcLH@@rJJIJGMtAAU@@@ t3 mol tumorigenic high -dcLJB@PUuNR[eY~eijjh@@ t3 mol tumorigenic high -dcLL@@QTfvUtYZ`@h@@ t3 mol tumorigenic high -dcLL`HS@BLddJfRtjmP@P@@ t3 mol tumorigenic high -dcM@@@WIDeBddU@AMTACP t3 mol tumorigenic high -dcMD@DTIR[fVQuhHF@@@ t3 mol tumorigenic high -dcMH`BuPBDf[U{aj@BX@@ t3 mol tumorigenic high -dcMh@DKaePR[eoVEjVfhHF@ t3 mol tumorigenic high -dcNB`BaLtOCIILeBdnmUUU@@ t3 mol tumorigenic high -dcND@DATfyeXYZ@`h@@ t3 mol tumorigenic high -dcND@LADfU[U]Zj@@@@ t3 mol tumorigenic high -dcNH@ICHhdhdYSP@UT@@ t3 mol tumorigenic high -dcO@@@aDiUm^UZh@HB@` t3 mol tumorigenic high -dcl@@DjYU_egX@@@@@@ t3 mol tumorigenic high -dcl@@DjYn}BXVjjjd@@ t3 mol tumorigenic high -dclD@@UIfV][iuhFAH@@ t3 mol tumorigenic high -dclD@@iJYW]rnF``IhBI` t3 mol tumorigenic high -dclD@@iJYW]rnF``Jh@@ t3 mol tumorigenic high -dcll@Dsm@iRYgeVE]ZjeZ`@ t3 mol tumorigenic high -dcllADqe@]R]{HhdhdcWRkURmT@@ t3 mol tumorigenic high -dcm@@@YJYYwhUtH@@@@@ t3 mol tumorigenic high -dcmH@DpLbbbLRQTnmU@A@@@ t3 mol tumorigenic high -dcmH@DpLbbbLRQTnmUUUP@@ t3 mol tumorigenic high -dcnL`LaA@HrRPjIKTrzmPHD@@ t3 mol tumorigenic high -dcndADkatIjYyIefY[eujeji@@ t3 mol tumorigenic high -dcnl@DsetBeIf^UXUujjUj@@ t3 mol tumorigenic high -dct@@DiUUVjjj`@ t3 mol tumorigenic high -dctB@@I]rJJJIVMRuLDE@ t3 mol tumorigenic high -dctB@@PYRYU{ViijBBP t3 mol tumorigenic high -dctB@@RURY]VvjjZ@@ t3 mol tumorigenic high -dctBHFxYBHRHrHkprJPqREUUMT@@ t3 mol tumorigenic high -dctF@@IaWTfYn~jjj`@ t3 mol tumorigenic high -dctF@@rngTen{mjjj`@ t3 mol tumorigenic high -dctd@DrmATf^VYjji`@ t3 mol tumorigenic high -dcuD`FWi@HrQRXiSUTttDU@ t3 mol tumorigenic high -dcvB`JFUt@aJUgfjjfX@@ t3 mol tumorigenic high -dcvD@LADf^eujjj`@ t3 mol tumorigenic high -dcvD@LADf^fYjjj`@ t3 mol tumorigenic high -dcvHPF`G@WCIIEXmIUSUPQR@ t3 mol tumorigenic high -deL@@DjYeIjGijjjj@@ t3 mol tumorigenic high -deT@@DjWvifjih@@ t3 mol tumorigenic high -deT@@DjYUXPbDP@@ t3 mol tumorigenic high -deT@p@bDbLbLbdLRPsU@@@@ t3 mol tumorigenic high -deTB@@KiRYg]nZej`@ t3 mol tumorigenic high -deTD@@SHheDYaMUMP@@ t3 mol tumorigenic high -deTD@@eIff\Ijjf@@ t3 mol tumorigenic high -deTDB@YnRYe\YZB@@@ t3 mol tumorigenic high -deTD`AdHaIe[jz@HX@@ t3 mol tumorigenic high -deTD`NDHaIfVVfBA`@@ t3 mol tumorigenic high -deTH@@RYVZfZZj`@ t3 mol tumorigenic high -deTH@@RYe\YZA@@@ t3 mol tumorigenic high -deTH@@rJJIHmtA@pD]@ t3 mol tumorigenic high -deTH@@rJJIHmtAAH@@ t3 mol tumorigenic high -deTL@@JTfYoXXHH`@@ t3 mol tumorigenic high -deTL`BjPkDf[W[jjjh@@ t3 mol tumorigenic high -deU@@@EIYe^g``p@@ t3 mol tumorigenic high -deU@@@aJWeQfj@@@@ t3 mol tumorigenic high -deU@PBdHchaIf^VFBBH@@ t3 mol tumorigenic high -deU@`Dp@aIgeQej@@@@ t3 mol tumorigenic high -deUD@HDIRVUunfef`RKh t3 mol tumorigenic high -deV@@@RVUenh@J@@ t3 mol tumorigenic high -deV@@@RYeun`HJ@@ t3 mol tumorigenic high -deV@PNBHFHRYeYi``x@@ t3 mol tumorigenic high -deV@pBBHzHfHRYgea``b@@ t3 mol tumorigenic high -deVD@FADfygFV``@@@ t3 mol tumorigenic high -deVD@IADfyWxV`@`@@ t3 mol tumorigenic high -deVH@BAIf]VzB@h@@ t3 mol tumorigenic high -deVH@FAIfUqehH@@@ t3 mol tumorigenic high -deVH@HAIYf^f`H`@@ t3 mol tumorigenic high -deVH@IAJ[Vvz`@h@@ t3 mol tumorigenic high -deVH`Ax@aIfVVfBA`@@ t3 mol tumorigenic high -ded@@DiUUjjj@@ t3 mol tumorigenic high -ded@@Dj_VfZZ@@ t3 mol tumorigenic high -ded@X@bDbBbFbAbIbDf{nijZ@@ t3 mol tumorigenic high -dedD@@QIeVVjjP@ t3 mol tumorigenic high -deeD@DdAR[UYjjX@@ t3 mol tumorigenic high -defD@LADf^]Zjj@@ t3 mol tumorigenic high -defD`FFPBDiWnjjf@@ t3 mol tumorigenic high -defD`FFPBDi]nijf@@ t3 mol tumorigenic high -defJ`JaLFP|LddjRcUTp@@ t3 mol tumorigenic high -det@@DjYUX^d@@@@@ t3 mol tumorigenic high -det@@DjYUX^dHbH`@ t3 mol tumorigenic high -detL@@jTie]rnF``J@@ t3 mol tumorigenic high -det``Dki@HRYYUnFVjVi@@ t3 mol tumorigenic high -dev@@@rQQJHtpr@@@@@@ t3 mol tumorigenic high -dev@PL@HPHRYUTjFVj@@@@ t3 mol tumorigenic high -devh@DJndDfVU[af@`hP@ t3 mol tumorigenic high -devhADIadFf^R[fUnxVijY@@ t3 mol tumorigenic high -dg\B@@Q[R[VUmgVf@HhBL` t3 mol tumorigenic high -dg\B@@SSRY[W[FVh@Ih@@ t3 mol tumorigenic high -dg\D@@eIfU_Un`HJj`@@ t3 mol tumorigenic high -dg\H`ABHRYVwUih@Jjh@@ t3 mol tumorigenic high -dg]HPAuPbBbDfYw[fzB@ij@@ t3 mol tumorigenic high -dg^B@BAMoHiieDeBimU@DP@@ t3 mol tumorigenic high -dg^L`LxY@HrQQYJEIYUSRuUAFP t3 mol tumorigenic high -dgl@@DiUUUZjjjh@@ t3 mol tumorigenic high -dglBA@RUSe{HihheDbtuSUAFH t3 mol tumorigenic high -dglBPHRU@HhHrRPrIRIkUTmP@@ t3 mol tumorigenic high -dglD@@QIgV]YjfjZBJ` t3 mol tumorigenic high -dglD@@QImUUUjjjj@@ t3 mol tumorigenic high -dglFPHkivpqLqDen{nzjjjh@@ t3 mol tumorigenic high -dgmB@LxDWTfU[{Vjjfh@@ t3 mol tumorigenic high -dgnD@KADfuUUVjjjh@@ t3 mol tumorigenic high -dgnD`H[`BLdTRbJRUUMUT@@ t3 mol tumorigenic high -dg|D@@OIEEHhfmPkmAU@T`@@ t3 mol tumorigenic high -dg|DPFDH`haIf[oWiNyjY`@@@ t3 mol tumorigenic high -dg|H@@RVUvU[cn`@`@@@@ t3 mol tumorigenic high -dg|H@@RYfUWd}mh@@@@@@ t3 mol tumorigenic high -dg|L@@ildTRbrJQTJtEAEL@@ t3 mol tumorigenic high -dg|d@Dq]@\bbbbfJSSimUSTs@@ t3 mol tumorigenic high -dg|l@Dq]@[rJJJJXiMNfuUMSL@@ t3 mol tumorigenic high -dg}@@@aJVYU^Svv`@@@@`H t3 mol tumorigenic high -dg}@@@mJYeU|]Tz@@@H@@ t3 mol tumorigenic high -dg}D@AlBRYgU][iVB@jjD@@ t3 mol tumorigenic high -dg}D@DpCrJJHqIYERzuT@EP@@ t3 mol tumorigenic high -dg}D`LHU@HrQQYJJEYQwSMMMR@@ t3 mol tumorigenic high -dg}H@DHDfYV]rX{Zi``H@@ t3 mol tumorigenic high -dg}HPAuPbBbDfYw[fx{``JZb@@ t3 mol tumorigenic high -dg}L`FWSl@cIEHhbeEc]MUUTsP@@ t3 mol tumorigenic high -dg}L`JXiTIAIf]VunNzVjZj`@ t3 mol tumorigenic high -dg~D@EADfufUqT{ZZP`HBL` t3 mol tumorigenic high -dg~L@BAER[e[gzSmh@B@@@@ t3 mol tumorigenic high -dg~L@IAKR[Ye]z]MjdHB`@@ t3 mol tumorigenic high -diD@`@RdjeVjj`@ t3 mol tumorigenic high -diDB`HSB@HrRPiIZj`@ t3 mol tumorigenic high -diDD@@GIEHjjjj@@ t3 mol tumorigenic high -diDJHDpnDAbHbaahcIIJiIZe@@ t3 mol tumorigenic high -diDL@@xTiUVjj`@ t3 mol tumorigenic high -diDLPBhPbFbLbbbeiZdHQ@ t3 mol tumorigenic high -diDNPHSB[a@XhXrRPzQZe`@ t3 mol tumorigenic high -diE@@@sIDhcFZj@@ t3 mol tumorigenic high -diF@PHApiprRQVRjj`@ t3 mol tumorigenic high -diFD@AADfuUjj`@ t3 mol tumorigenic high -diFD@LADf^Yjj`@ t3 mol tumorigenic high -diFD@LADf^]jj`@ t3 mol tumorigenic high -diFD`JxPBLbdTljjX@@ t3 mol tumorigenic high -diFDpAk`bDbLbLbdJTjjX@@ t3 mol tumorigenic high -diTH@@RfU|kahDB@@ t3 mol tumorigenic high -diTL@@X\dRRaaJzjZj@@ t3 mol tumorigenic high -diV@@@RfU|kahDB@@ t3 mol tumorigenic high -did@@DjUZnBAH@@ t3 mol tumorigenic high -did@@DjUfaBB`@@ t3 mol tumorigenic high -did@@DjYUaBHP@@ t3 mol tumorigenic high -did@@LdbRQk``R@@ t3 mol tumorigenic high -did@@LdbbQxXF@@@ t3 mol tumorigenic high -didD@@IIf][hHB@@ t3 mol tumorigenic high -didH@@RYVZZ@B`@@ t3 mol tumorigenic high -didH@@RYVzZ@B`@@ t3 mol tumorigenic high -didH@@RYeVz@``@@ t3 mol tumorigenic high -didH@@RYevz@``@@ t3 mol tumorigenic high -didH@@RYfVF@b@@@ t3 mol tumorigenic high -didH@@RYm^Fh@@@@ t3 mol tumorigenic high -didHHFBHJHzHFHRYgljZfh@@ t3 mol tumorigenic high -didH`DBHR[e^FX@@@@ t3 mol tumorigenic high -didL@@IdfYoa`b@@@ t3 mol tumorigenic high -didL@@RdfV^fZjj@@ t3 mol tumorigenic high -didL@@SdfVTjZfZ@@ t3 mol tumorigenic high -didL@@pTee^fZZi@@ t3 mol tumorigenic high -didh@DKaAInV[fiZ`@ t3 mol tumorigenic high -die@`HxGCIIEJnFjiX@@ t3 mol tumorigenic high -dieD@DpFRYVZyjfd@@ t3 mol tumorigenic high -dieD`JXaBPRYgvzejX@@ t3 mol tumorigenic high -dieD`LIN@HRZufFZid@@ t3 mol tumorigenic high -dieH`Dq`BDfUfnZii@@ t3 mol tumorigenic high -die`@@pjX\dTTUk`Hb@@ t3 mol tumorigenic high -dif@@@rJJIEn`HH@@ t3 mol tumorigenic high -dif@@@rRJEKaj@@@@ t3 mol tumorigenic high -difH@AAJ[W[j@B@@ t3 mol tumorigenic high -difH@BAIfuxV`@@@ t3 mol tumorigenic high -difH@JAJ[gxZB@@@ t3 mol tumorigenic high -digH@DK`R[e^Eh@@@@ t3 mol tumorigenic high -digL@Ds`XTfUfn`BH@@ t3 mol tumorigenic high -dkLB`HSB@HrRPiIIIZjjh@@ t3 mol tumorigenic high -dkLH@@RUUUVjjjh@@ t3 mol tumorigenic high -dkMB@LxDeTfU]mZjij@@ t3 mol tumorigenic high -dkNF@BAIWSR[YVYjjfX@@ t3 mol tumorigenic high -dk\@`@bDfYYwZ]NB@@@@@ t3 mol tumorigenic high -dk\B@@SSRYVuVfeVi@Bh@@ t3 mol tumorigenic high -dk\D@@QIee}RkaZfjjh@@ t3 mol tumorigenic high -dk\D@@wHhhhhbfESZAhD`@@ t3 mol tumorigenic high -dk\D@@wHhhhhbfESZBhD`@@ t3 mol tumorigenic high -dk\H@@RYWYVftx@H@@@@ t3 mol tumorigenic high -dk\H@@RYeg]itxH@@@@@ t3 mol tumorigenic high -dk\L@@x|bbbTTJZUuhFHF@@ t3 mol tumorigenic high -dk\b@Dsm@iMIf^UvE]Zjeih@@ t3 mol tumorigenic high -dk\d@Dq]@\bbbbfJZ]MjjZe`@ t3 mol tumorigenic high -dk\d@DsmB\bbbTrQXUujjUj`@ t3 mol tumorigenic high -dk]D@JxCRe]YTjtzjjjj@@ t3 mol tumorigenic high -dk]D`LHY@HRf]VwJtzYifi@@ t3 mol tumorigenic high -dk]H@DpLbbbLRVJeujh@J@@ t3 mol tumorigenic high -dk]H`FVPbDfUonkmN@Hfh`@ t3 mol tumorigenic high -dk^@@@RfYU\]Tzjjjj@@ t3 mol tumorigenic high -dk^@@@rQQRJJjaTzBjBD@@ t3 mol tumorigenic high -dk^D@IADfvYWz]MjdHB@@ t3 mol tumorigenic high -dk^d@DXYtCRYf[WaWVjfji@@ t3 mol tumorigenic high -dk^d@DkaTMRYYe]neVjZji@@ t3 mol tumorigenic high -dk^d@DkatCRYYfUngVjZji@@ t3 mol tumorigenic high -dk_D@DHPuIeeevySZ`hD`@@ t3 mol tumorigenic high -dklB@@PcR[me]]ZZ@B@@ t3 mol tumorigenic high -dklB@@PcR[me]]Zj@B@@ t3 mol tumorigenic high -dklB@@QSrJYJIJF]ZX@b@cH t3 mol tumorigenic high -dklB@@QmR[fUxUZBBF@@ t3 mol tumorigenic high -dklD@@MJ[eZ~F`HJh@@ t3 mol tumorigenic high -dklD@@eJ[Vvfz`@jh@@ t3 mol tumorigenic high -dklH@@RYfWua`Hbe@@ t3 mol tumorigenic high -dklL`HS@BLddJbRvWUjB@`@@ t3 mol tumorigenic high -dkl`@@kaRe[vTf@HZj@ah t3 mol tumorigenic high -dkm@@@GHhhhhdvf@bbh@@ t3 mol tumorigenic high -dkmD@DHCRYvUvUZh@J@@ t3 mol tumorigenic high -dkmD@DTCRUfWtYV@`e@@ t3 mol tumorigenic high -dkmD@DdCrIJJIPxUV@bE@@ t3 mol tumorigenic high -dkmDpDgSBHjHVHRYYmYn`HJf@@ t3 mol tumorigenic high -dkmH`NVPbDfUunih@JZ`@@ t3 mol tumorigenic high -dkn@`D@HRUUYWSVj`@@@ t3 mol tumorigenic high -dknD@LALbbRbaRtvjh@@@@ t3 mol tumorigenic high -dknH@DCHhmEEEYuj@bH@@ t3 mol tumorigenic high -dknL`IaMADRge][aj@Bf@@ t3 mol tumorigenic high -dk~@@@RfYU_JGUN`@@B@@@ t3 mol tumorigenic high -dmL@@DjYUVGi@@@`@@ t3 mol tumorigenic high -dmL@`@VDifU^FUifje@@ t3 mol tumorigenic high -dmL@`@ZDifU^FUifje@@ t3 mol tumorigenic high -dmLB@@RURYUVJaejVjh@@ t3 mol tumorigenic high -dmLD@@QIe[VfeVi@B@@ t3 mol tumorigenic high -dmLD@@QIe[VfeVj@B@@ t3 mol tumorigenic high -dmLH@@RYVuiiV@BjH@@ t3 mol tumorigenic high -dmLH@@RYe~Ifyjjjh@@ t3 mol tumorigenic high -dmLH@@RYiYKnUjjjh@@ t3 mol tumorigenic high -dmLL@@SdfVUrjUZ`PH@@ t3 mol tumorigenic high -dmLd@DpYBdfV]VzUZZjV@@ t3 mol tumorigenic high -dmLd@Dqe@TfUeZzUZZeZ@@ t3 mol tumorigenic high -dmM@@@yJUntfePBIhP@ t3 mol tumorigenic high -dmN@pN@H`HPHrRPqIZneUhDB@@ t3 mol tumorigenic high -dmND@BA\bbbReInFjZjd@@ t3 mol tumorigenic high -dmNH@BAIfUmiEX@@@@@ t3 mol tumorigenic high -dmNH@NAIYe^neZdHB@@ t3 mol tumorigenic high -dmNh@DkaTDfVYVzUZiZi@@ t3 mol tumorigenic high -dmO@@@SdfVUrjUZ`PH@@ t3 mol tumorigenic high -dmTB`HSB@HrRPiQQZjj@@ t3 mol tumorigenic high -dmTH@@RUUUjjj`@ t3 mol tumorigenic high -dmU@pLD@a@c`cHheEKFjfh@@ t3 mol tumorigenic high -dmV@HLBHQpYpVHrIRHrJjjj@@ t3 mol tumorigenic high -dmt@H@bAdIdEdDfUvjZ@Bj@@ t3 mol tumorigenic high -dmt@X@bBbFbAbIbEbDfYojzfZj`@ t3 mol tumorigenic high -dmtD@@QIgYVUZh@@@@ t3 mol tumorigenic high -dmtH@@RYWUih@Jh@@ t3 mol tumorigenic high -dmtH@@RYe[[hBBh@@ t3 mol tumorigenic high -dmtH@@RYeeZVfjj@@ t3 mol tumorigenic high -dmtH@@RYeeZZjjj@@ t3 mol tumorigenic high -dmtH@@RYe~[ffjZ@@ t3 mol tumorigenic high -dmtH@@Rfuu[j@BXBA` t3 mol tumorigenic high -dmtH@@rJJIHin`HJ`@@ t3 mol tumorigenic high -dmuD`LVD@HrRRqIXYV`@`@@ t3 mol tumorigenic high -dmuH`Dq`BLbbRbJkfjZi@@ t3 mol tumorigenic high -dmvD@DATf^Uqej@B@@ t3 mol tumorigenic high -dmvD`La@BLddlTReUhB@@@ t3 mol tumorigenic high -dmvHPEHJsjsHhhmDVFBBK@@ t3 mol tumorigenic high -dmvHPEHLSlSHhhmDVFBBK@@ t3 mol tumorigenic high -dmvH`ITICHhdhdZZ@Bj@@ t3 mol tumorigenic high -dmvL`BaL@HrRRjIJUVjjh@@ t3 mol tumorigenic high -dnDH@@ReVDijiZ@@ t3 mol tumorigenic high -dnDH@@ReVDijjj@@ t3 mol tumorigenic high -do\H@@RUUUUZjjjj@@ t3 mol tumorigenic high -do^HpAxH`hb`aIevyffjZjhHa@ t3 mol tumorigenic high -do|J@@S[_HheDdeDYMjBBb`@@ t3 mol tumorigenic high -do|L@@RtfUVuwSZjp@h@@ t3 mol tumorigenic high -do|L@@RtfvYWwSZjA@h@@ t3 mol tumorigenic high -do|L@@iTinU]_ihHHjXBCP t3 mol tumorigenic high -do|L@@iTinU]_ihHHjXBC` t3 mol tumorigenic high -do~L@MAER[e]mnEh@Ij`@@ t3 mol tumorigenic high -do~``LKad@aJ[V]Y[j@Bjj@@ t3 mol tumorigenic high -eF@Hh@ t3 mol tumorigenic high -eFAAD`bJ@ t3 mol tumorigenic high -eFAADdRJ@ t3 mol tumorigenic high -eFABD`bJ@ t3 mol tumorigenic high -eFABHhbL@ t3 mol tumorigenic high -eFACDlRL@ t3 mol tumorigenic high -eFBBHc@@ t3 mol tumorigenic high -eFBBlc@@ t3 mol tumorigenic high -eFBCDc@@ t3 mol tumorigenic high -eFHBJ@ t3 mol tumorigenic high -eFPBc@@ t3 mol tumorigenic high -eFbHbHp@ t3 mol tumorigenic high -eFhXNic@@ t3 mol tumorigenic high -eM@Hv@ t3 mol tumorigenic high -eMA@JXaIh@ t3 mol tumorigenic high -eMABHXaIh@ t3 mol tumorigenic high -eMABHYAIh@ t3 mol tumorigenic high -eMB@Jch@ t3 mol tumorigenic high -eMBBHRZ@ t3 mol tumorigenic high -eMBBPRY@ t3 mol tumorigenic high -eMCALhabHz@ t3 mol tumorigenic high -eMDARV@ t3 mol tumorigenic high -eMFI@bMP@ t3 mol tumorigenic high -eMFIGBMP@ t3 mol tumorigenic high -eMFiDqzN`@ t3 mol tumorigenic high -eMHAIX@ t3 mol tumorigenic high -eMHAId@ t3 mol tumorigenic high -eMHAIh@ t3 mol tumorigenic high -eMIdEJHIcd@ t3 mol tumorigenic high -eMJDBDeP@ t3 mol tumorigenic high -eMPBch@ t3 mol tumorigenic high -eM`AIx@ t3 mol tumorigenic high -eMbDbDfp@ t3 mol tumorigenic high -eMhDRV@ t3 mol tumorigenic high -eO@Hyj@ t3 mol tumorigenic high -eOB@Hcfh@ t3 mol tumorigenic high -eOBBHcfh@ t3 mol tumorigenic high -eOBCDcfh@ t3 mol tumorigenic high -eOHBNZ`@ t3 mol tumorigenic high -eOPBcfX@ t3 mol tumorigenic high -eO`BNZ`@ t3 mol tumorigenic high -fH`D@@ t3 mol tumorigenic high -fH`T@@ t3 mol tumorigenic high -fH`X@@ t3 mol tumorigenic high -fH`p@@ t3 mol tumorigenic high -fHa@@@ t3 mol tumorigenic high -fHap@@ t3 mol tumorigenic high -fHbT@@ t3 mol tumorigenic high -fHcD@@ t3 mol tumorigenic high -fHcP@@ t3 mol tumorigenic high -fHcT@@ t3 mol tumorigenic high -fHcd@@ t3 mol tumorigenic high -fHdH@@ t3 mol tumorigenic high -fHdP@@ t3 mol tumorigenic high -fHdd@@ t3 mol tumorigenic high -fHdp@@ t3 mol tumorigenic high -fHep@@ t3 mol tumorigenic high -fHfX@@ t3 mol tumorigenic high -fHgP@@ t3 mol tumorigenic high -fHgd@@ t3 mol tumorigenic high -fHgh@@ t3 mol tumorigenic high -fHpXT@ t3 mol tumorigenic high -fHpp\@ t3 mol tumorigenic high -fI@@ t3 mol tumorigenic high -fJ@@ t3 mol tumorigenic high -f`a@P@@Ht[HheDhmD\jsTE@qP@@ t3 mol tumorigenic high -f`a@`@@FrJJIJQJrLy@PUUT@@@ t3 mol tumorigenic high -f`aA@@@ILsKWRpTADUUP@@ t3 mol tumorigenic high -f`aAb@NFlBHrJIKIRJUTY@AUST@@@ t3 mol tumorigenic high -f`aQC@IVLBPQHXdLbdLRTvf`eUPADu@@@ t3 mol tumorigenic high -f`ahB@LDxJP@aJ[V]Yf\h@Jjj@@@ t3 mol tumorigenic high -f`ahB@LDxJP@aJ[V]ZV\h@Jjj@@@ t3 mol tumorigenic high -f`aq@@DV\CHheEDcddkSTE@UP@@ t3 mol tumorigenic high -f`i@P@@HD[HhdihdhUSbkN|uHPTUB@@ t3 mol tumorigenic high -f`i@P@@HTYIe[VUZLeiwfi@HjhP@@ t3 mol tumorigenic high -f`i@`@@DRYfyU]`mNmyi`@@B@@@ t3 mol tumorigenic high -f`i@`@@HrJSQQQIH|UiuoMP@P@P@@@ t3 mol tumorigenic high -f`i@`@@VRYfYU]`eNMyh@`AB@@@ t3 mol tumorigenic high -f`i@a@ARADDbDfYuUUYqVg^``Jh@@@@ t3 mol tumorigenic high -f`i@a@BBADNbLbbbRfaRcIBU[tDE@AA@@@ t3 mol tumorigenic high -f`i@a@FRAD^bDfUm[UirRkN`BJ@BH@@ t3 mol tumorigenic high -f`i@a@FRAD^bDfUm[WirRkN`BJ@BH@@ t3 mol tumorigenic high -f`iA@@@YHhhheLUfBdYwjBb@@H@@@ t3 mol tumorigenic high -f`iA`@@HldrlkZuFJMYsTaADtP@@ t3 mol tumorigenic high -f`iA`@@HmdTRTRTrQhqQkNZdHHfb@@ t3 mol tumorigenic high -f`iQA@B\|@HpDISLzsnRdcN}TaAQUD@@ t3 mol tumorigenic high -f`ih@@@\eYvRJJJJUKJgEZMX@HHFhH@@ t3 mol tumorigenic high -f`ip@@@XTeLwOvmNJt{pPQT@A@@@ t3 mol tumorigenic high -f`q@@@DjUgm_hJs``hB@`@@ t3 mol tumorigenic high -f`q@`@@LRYfWg^Qg^ZB`@@@@@ t3 mol tumorigenic high -f`qA`@@FmdbbdTUrRiIVjBh`jd@@ t3 mol tumorigenic high -f`qA`@@Hpdrlrj~gV|uP@@@@@@ t3 mol tumorigenic high -f`qHC@DXxHDPrHMDYEDeDUEEj\]z@HhH@@@@ t3 mol tumorigenic high -f`qP@@@PrQJJJIIFJlYsP@P@P@`B@ t3 mol tumorigenic high -f`qPB@DX@DILwLjoiuoMUUUUT@@ t3 mol tumorigenic high -f`qP`@DBAKHheHdhbmPSoMUTa@P@@ t3 mol tumorigenic high -f`q`@@@YEEDbdhdf\]z@`f@@@PE@ t3 mol tumorigenic high -f`q`B@B@bDfYwVUYqwhHBX@@A@T@ t3 mol tumorigenic high -f`q`B@O@dDfUuYWhrsh@I`@`ACd@ t3 mol tumorigenic high -f`q```JBTBHQDXbBAFQREQQSYJVg^jjfX@@@@ t3 mol tumorigenic high -f`q```JBTBHQDXbBAFQREQQSYJVg^jjfZjd@@ t3 mol tumorigenic high -f`q`b@LPP@HrRPjJIIKZ][ru@@@@@@@ t3 mol tumorigenic high -f`qa@@D@RYyV{TRg^Z`B@@@@@ t3 mol tumorigenic high -f`qa@@D@RYyeg^Qg^Z``@@@@@ t3 mol tumorigenic high -f`qh@@@XirVRJJZGJII`g^BHa`@@DAP t3 mol tumorigenic high -f`qi`@DTxIPC^rJIQQJiILyISUKMUU@@@ t3 mol tumorigenic high -f`qp@@@Hpds\rj~gV|uP@@@@@@ t3 mol tumorigenic high -f`qpa@LR}A@@`PQddaTTRRUtxuejBPha@@ t3 mol tumorigenic high -f`y@@@LdbbbbbfkEBMIuo@@@@@@@@@ t3 mol tumorigenic high -f`~`b`KLLBHHDTBNA@`aIneUYYjjjZ`@@ t3 mol tumorigenic high -fbc@@@LdbbbTRLRqWEBMjsoIs@AA@UUPT@@ t3 mol tumorigenic high -fbc@@@LdbbbbbbQQsEBMKuhir@@@@@@@@@@ t3 mol tumorigenic high -fbc@@@LdbbbbbbcJwEB]Hu`ir@@@@@@@@@@ t3 mol tumorigenic high -fbc`@@@ISLrj}{dirVgVBgLmUTrB@m@@@ t3 mol tumorigenic high -fbc`@@@YHheEMDXlijREhuoQSd@@@@@@@@@@ t3 mol tumorigenic high -fbe@P@@HM[HheDhdhmbdisTEALUT@@@ t3 mol tumorigenic high -fbe@`@@HRYWUUUUIQjjjjjj`@@ t3 mol tumorigenic high -fbe`P@N@P[vQQJJKQRzZIUfjijjZi@@ t3 mol tumorigenic high -fbm@@@DjYVWV}~ZlENXI@H@@@@@@ t3 mol tumorigenic high -fbmAP@@BLENQQQQQQQYG[bm^]Eh@bHAJ`@@ t3 mol tumorigenic high -fbmAP@@BUGNQQQQQQPeIG`mNBehIb@@b`@@ t3 mol tumorigenic high -fbmH`@EVBdGlbbbbbbTRacAZb{KPADDLQ@@@ t3 mol tumorigenic high -fbmI@@DTdhFQQIQIQHqIY`iJSejfYjB@h@@ t3 mol tumorigenic high -fbmPB@NA@DYHhhhddmcEJ\e[Sj@H@`jj@@@ t3 mol tumorigenic high -fbmPb@AJ|dDPdrmrljoSfgQs@DMPTBD@@@ t3 mol tumorigenic high -fbmQB@AJRBHRYVyV[WisShy`BFhJAB@@@ t3 mol tumorigenic high -fbmp@@@V|eLsJzo]SdcZ\@@@AEU@@@@ t3 mol tumorigenic high -fbu@@@LdbbRbVbrQwMQS@pU@TA@BFH t3 mol tumorigenic high -fbu@@@LdbbRbbtRJOCIs@pUPE@@BFH t3 mol tumorigenic high -fbu@`@@YRYWYeg_hrJX@Ij``H@Py@ t3 mol tumorigenic high -fbu@`@@YRYWYeg_hrJX@JY``H@HDj` t3 mol tumorigenic high -fbua@@D@rJJJPjJYIK^SGKUUX@@@@@@ t3 mol tumorigenic high -fbupb@LVcA@@cIIBmDeLhThkUgKU@ASUQ@@@ t3 mol tumorigenic high -fby@`@@HR[UUUUUZjjfjj`PT` t3 mol tumorigenic high -fby@`@@HR[UUUUUZjjjjj`@@ t3 mol tumorigenic high -fbya@@D@R[UUUUUZjjjjj`@@ t3 mol tumorigenic high -fb}@@@DjYee]^RD[S`q@@@@@B`@@@ t3 mol tumorigenic high -fb}@P@@H]gHheDheEeD\jugQRgKUUUUUUU@@@ t3 mol tumorigenic high -fb}@`@@LrJJJJHyISI\dkSoIsTED@@@H@@@ t3 mol tumorigenic high -fb}@`@@LrJJJJHyJIK\dkS`isTED@@@H@@@ t3 mol tumorigenic high -fb}@`@@LrJJJJKIIIH|Djw`isTEP@@@@@@@ t3 mol tumorigenic high -fb}@`@@YRYVum[ehrRkNBf@BjjjjJ`@@ t3 mol tumorigenic high -fb}@`@@YrJJQIFYJYKDyIUgQRuUUU@AU@@@ t3 mol tumorigenic high -fb}@`D@HQvQSRJIJUJYHRiZ]yNVjjjjjjj@@ t3 mol tumorigenic high -fb}A@@@IS\lj{j|DjsoIsP@@@@@@@@@ t3 mol tumorigenic high -fb}A@@@IS\l~kZ|dkSoIsP@@@@@@@@@ t3 mol tumorigenic high -fb}A@@@YHihhhdeCenJtzpTyh@@@@@@@@@ t3 mol tumorigenic high -fb}P@@@RRVYfU{wyKSkASg`@@@@@@@@@ t3 mol tumorigenic high -fb}`@@@YHhhhhdhecjRUXt_I@@@@@``@@@ t3 mol tumorigenic high -fb}`B@A@dDfUmeumZLeiwdy`@@`@@@@@@ t3 mol tumorigenic high -fb}`B@A@dDfUmevUzLeipTy`@@`@@@@@@ t3 mol tumorigenic high -fb}`B@B@dLbbbRfbtVbKIBuxJ\p@@A@@@@@@ t3 mol tumorigenic high -fb}a@@I@RVYfU{wyKSkASe`@@@@@@@@@ t3 mol tumorigenic high -fde@@P@QAHadQJHuDFb@qDXcHhhiMMEciS`eN}MUUUUUP@@ t3 mol tumorigenic high -fde@@P@QAHadQJHuDFbOQDXcHhhiMMEcCS`eNCMUUUUUP@@ t3 mol tumorigenic high -fde@P@@BLGHhhhhhhlcqVoNbt@QD@d@@@ t3 mol tumorigenic high -fde@``ARADDb@qDXaIf]UUUYqVg^``Jh@h@@@ t3 mol tumorigenic high -fde@``BRADLb@qDXcHhhheCBdeqTmN}ADT@AQ@@@ t3 mol tumorigenic high -fdeQ@@DFAdTRbRRTJbIQVg^ZiBBZhDDJP t3 mol tumorigenic high -fde``@A@BdsLsKslUiuhm@DPAI@@@ t3 mol tumorigenic high -fde`b@H\d@HRfYfWwQJMxLZjfZ``H@@ t3 mol tumorigenic high -fdi@P@@HM[HheDhdhkdisTE@lT`@@ t3 mol tumorigenic high -fdiA`@@HedTtbJRbbV|Ejjj@``@@ t3 mol tumorigenic high -fdiQb@LR``P@cIIBhheedmjru@pQU@@@ t3 mol tumorigenic high -fdq@`@@HR[UUUUVjjjjj@@ t3 mol tumorigenic high -fdqA`@@LdeJl{jjtuSSLtBbGbiLnP t3 mol tumorigenic high -fdqPP@LQ@`p\bbRTTaVRcUUUUS@@@ t3 mol tumorigenic high -fdqaQ@JDT{pPQEoCHhhihldYMRuUUMPHHP t3 mol tumorigenic high -fdu@@@DjYee]}daZlGtP@@@@@@@@@ t3 mol tumorigenic high -fdu@@@DjYee]}faRlGtP@@@@@@@@@ t3 mol tumorigenic high -fdu@@@DjYee_daFtxLP@@@@@@@@@ t3 mol tumorigenic high -fdu@@@LdbbbbbTUHeRlXOh`@@@@@@@@@ t3 mol tumorigenic high -fdu@A`@QAHadQJHCDQbLbbbdtqTVeA\TYuoSUUUUUT`@@ t3 mol tumorigenic high -fduAC`H`bBQCHbTQjHMD^bLbbbdttVLUNBTxHXsUUUUUU@@@ t3 mol tumorigenic high -fdu`@@@YHheEhTddj\EHu`q@@@@@@@@@ t3 mol tumorigenic high -fdu`@@@YHhhhdeCejBd[S`q@@@@@@@@@ t3 mol tumorigenic high -fdu`@@@YHhhhhdhbZRUXp_Q@@@@@@@@@ t3 mol tumorigenic high -fdy@A`@XaLPVH[DCbQqDfYuygUgG^``JB@h@@@ t3 mol tumorigenic high -fdy@A`@XaLQfHKDUbNqDfYnf_d`q`bHhH@@@@ t3 mol tumorigenic high -fdyAP@@BUhNQQQQQQDqIdgAZYjZZj`@@ t3 mol tumorigenic high -fdyAa@MAbBHQDIM_JztvBRUUP@UTt@@@ t3 mol tumorigenic high -fdyP`@AR@EJ[WUe]Yqwj@Bh@J@@@ t3 mol tumorigenic high -fdyhP@DTxIPCAcdTRbbURTRYrRfjVZjjh@@ t3 mol tumorigenic high -fdyi`@DTxIP@qrJIQQJiJILyISUKMUUT@@ t3 mol tumorigenic high -fdyqb@LFcA@`AFRREQQIJH{WcVVhIBhhP@@ t3 mol tumorigenic high -fgA@@@DjYU_VByHu`@@@@@@@ t3 mol tumorigenic high -fgA@@@LdbbbTVKIBMjp@@@@@@@ t3 mol tumorigenic high -fgA@P@@HEkHheHeEBRdmFluUMUU@@@ t3 mol tumorigenic high -fgA@`@@\RfYe_irQmVh@`@H@@@ t3 mol tumorigenic high -fgAA`@@HLdrmlkQdmFluHADq@@@ t3 mol tumorigenic high -fgAH@@@XhiJYmg]gAJMXH`jeF@@ t3 mol tumorigenic high -fgAP@@@\RfYe_irQmV@@@@@@@@ t3 mol tumorigenic high -fgAp@@@XheLvnjs`iFlDPT@@@@@ t3 mol tumorigenic high -fgApB@LLx@HRevUUpPTcViYj@H@@@ t3 mol tumorigenic high -fha@R@HHpPG`eUjjjjuUUUU@@@ t3 mol tumorigenic high -fhaH@@@\DyJUUUWVjjjjj@@ t3 mol tumorigenic high -fhep`@BLT@NQQQQQQRq\tJQkN|uLuUTuP@@ t3 mol tumorigenic high -fhi@B`@QAHadPzHCDYEEELUDeCpUoPQA@DP@@@ t3 mol tumorigenic high -fhi@`@@RrJJIIQFYHVoAZBA`@@@@ t3 mol tumorigenic high -fhi@c@ARAD\B@qFQQIYRFIKTX{t@Dl@D@@@ t3 mol tumorigenic high -fhiA`@@B|dsLro~jqgM@D@AP@@@ t3 mol tumorigenic high -fhiHB@EZLDDQdTRVTTTQUFF]@A@QE@@@ t3 mol tumorigenic high -fhiHa@LTdFB@A@`cIIBhhddmmNMYZ`hJJD@@ t3 mol tumorigenic high -fhiIP@DXxHDc^CdTRbfaTVUNZltuUUUL@@ t3 mol tumorigenic high -fhiP@@@ArJJIEJIJYgKN`HJ@B`@@ t3 mol tumorigenic high -fhiPA@BAADNbLbbbrrbRaYrwhHB`BH@@@ t3 mol tumorigenic high -fhiP`@DZAyIgVYW^VkNZjdHBh@@ t3 mol tumorigenic high -fhiPb@OA``@QddabbRRvRkF\m@@@E@@@ t3 mol tumorigenic high -fhiQA@BADBH]DYEEEeeDeBseoPPE@DP@@@ t3 mol tumorigenic high -fhiQ`@DX@pRSJswJ}N^BuSMA@P@@ t3 mol tumorigenic high -fhia@@E@rQQQHyJIHToAhJ@h@@@@ t3 mol tumorigenic high -fhia@@J@RfywVUxKpZB@f@@@Pe@ t3 mol tumorigenic high -fhipS@IZCpSo@bBAA`cHhheHeTiFJlFBAXjVH@@ t3 mol tumorigenic high -fhiq@@DZBCHheEDeDceNmyj@@`B@@@ t3 mol tumorigenic high -fhiqB@IF]hDadTTTbfLVWE^CMUTmRt@@ t3 mol tumorigenic high -fhiqP@DXxBQoArJIQSPjKJ`mVZZjjjf@@ t3 mol tumorigenic high -fhiqb@LJMAC`AFRRVIKIQKBd{rt@EMLP@@ t3 mol tumorigenic high -fhq@`@@NrQQJIJYHxRjBHbjh@@ t3 mol tumorigenic high -fhqXB@J\dZpPAFRIJIJJqIBeUSMMUpHJ` t3 mol tumorigenic high -fhy@C`@QAHadQJHuDFbOQFQQQRZZKFTxIS`sUUUUMP@@ t3 mol tumorigenic high -fhy@`@@HRY[fUWpPwgAZj@@@H@@@ t3 mol tumorigenic high -fhy@c@ARADDb@qBSLzjjkNJt{tDAU@D@@@ t3 mol tumorigenic high -fhyA@`A@bBQGh`LPdsNjjjsdeV]A@U@E@@@@ t3 mol tumorigenic high -fhyA`@@BMdTTTTTTVoEZ|xL@A@P@@@@ t3 mol tumorigenic high -fhyA`@@B|dsLsKnqVgVBt@Q@BP@@@ t3 mol tumorigenic high -fhyA`@@Hldrlk[oQbcN|uHPQUP`@@ t3 mol tumorigenic high -fhyH@@@XxkIEDeDehTjBYspP`Xj@@`@@ t3 mol tumorigenic high -fhyI`@LJMxD`yHhhhUEedRfcN}UUTBAT@@@ t3 mol tumorigenic high -fhyPA@B\@DXBDif]WmRTekpZdHHjjH@@ t3 mol tumorigenic high -fhy``@A@|dsLsKnqVgVBt@Q@BP@@@ t3 mol tumorigenic high -fhyaB@K^@DISLjo{XhKRcT@@@Tt@@@ t3 mol tumorigenic high -fhyh@@@\e[vRJJJJUIITxkQk@AA@uPP@@ t3 mol tumorigenic high -fkAA`@@TTeJwsLDDXkVcUUUUUP@@ t3 mol tumorigenic high -fle@B`@QAhbtPzHSDYEEDeCEHe\s`XpDEATA@@@ t3 mol tumorigenic high -fle@Q`OAbdDPRHYDRbMQAhcHhhiMMEcEJ\DjZjjjfZ`@@ t3 mol tumorigenic high -fleHb@LBdfB@AFRREQQIIZIZ][ru@@@EP@@@ t3 mol tumorigenic high -fleI@BHTDh@NaNQJJIIKQPi\eEMA@eT@@@ar@ t3 mol tumorigenic high -fleP`@DA@eIVUue]^B]yX@J@BT@@@ t3 mol tumorigenic high -fle`@@@YIEDeDThll[tTuSPP@@@BAH t3 mol tumorigenic high -fle``@A@PdrrrrjcQRuAPI@@@HJ` t3 mol tumorigenic high -fle``@D`TeMrnkZAAcPDET@D@@@ t3 mol tumorigenic high -flehPBDX}EHAJCFT}dTTRTRRJRsNFluTtuUKP@@ t3 mol tumorigenic high -fli@@@LdbVRRbbjTjjjjjj@@ t3 mol tumorigenic high -fliA@@@IJjjjjkUUUUUT@@ t3 mol tumorigenic high -fliAq@LDhkSo@BH^FRJQSIQUQ[TuUMSU@@@ t3 mol tumorigenic high -flm@@@DjYee]YhTkA}D@@@@@H@@@ t3 mol tumorigenic high -flm@@@DjYee]yHQmNCD@@@@@H@@@ t3 mol tumorigenic high -flm@@@DjYee_yHQmNCD@@@@@H@@@ t3 mol tumorigenic high -flm@@@LdbbbTRrJRxhQmNBd@@@@@`@@@ t3 mol tumorigenic high -flm@@@LdbbbTRvRQyHQmNbd@@@@H@@@@ t3 mol tumorigenic high -flm@@@LdbbbTVRcRXhQmNbd@@@B@@@@@ t3 mol tumorigenic high -flm@@@LdbbbbbTQnEjUcA}D@@@@@H@@@ t3 mol tumorigenic high -flm@@@LdbbbbbTUVDjUcA|d@@@@@`@@@ t3 mol tumorigenic high -flm@B@@AFQQQQQIJGKLdjqoQS@@@@@@@@@@ t3 mol tumorigenic high -flm@B@@RFQQQJKPiIILEIUgQS@@@@@@@@@@ t3 mol tumorigenic high -flm@B@@XfQQQQQIJGKLdjqoQS@@@@@@@@@@ t3 mol tumorigenic high -flmA@@@ILrrknjsdcV]EL@@@@@@@@@ t3 mol tumorigenic high -flm`@@@YHhhhdeElcPTcZ}EH@@@A@@@@@ t3 mol tumorigenic high -flm`@@@YHhhhhdhecRRkFcyH@@@@D@@@@ t3 mol tumorigenic high -flmaA@KQ@DPdLdtTRbtJfRyIVkNbfifZiZej@@ t3 mol tumorigenic high -fluAP@@B\FJSLsLoJlUkudm@DPDLP@@@ t3 mol tumorigenic high -fluAP@@HdkrSKLvzjlxYtTmT`pQUP`@@ t3 mol tumorigenic high -fluAc`OARBHIDLbIQFh`tQDHrJJJSSQXiZgAJCFZjjjjfh@@ t3 mol tumorigenic high -fluPP@DTAsUlbbTTTlTvRXHshiZjZfX@`@@ t3 mol tumorigenic high -fluP`@DX@qIeVyeUrT]DJVjZ@@@H@@@ t3 mol tumorigenic high -fluQB@DXX@HRYUnYU\eGQBejf`@@B@@@ t3 mol tumorigenic high -flu`a@BJ|CDebYEEEheDXdlpQkQSAADtB@P@@ t3 mol tumorigenic high -fluaP@E@EKt\bbbbbRJRRXhshiZdF`bjb@@ t3 mol tumorigenic high -flua`@O@QGHheEDdebeJ\UXsfh@@@ih@@@ t3 mol tumorigenic high -fluib@DTxIQhi@DYEDhheUDddsdeN|uRsUUUT@@ t3 mol tumorigenic high -flux@@@XIRRmYHhhldiUDdsdcQRA@AQ@@@@@ t3 mol tumorigenic high -flyAP@@HLxJSJkZrkzluT`DUT@@@ t3 mol tumorigenic high -fl}A@@@IRlrjkoAENJl[tTuP@@@@T@@@ t3 mol tumorigenic high -fl}A@@@YEEDhih]DdpTmZlxLTmSSTuJsT@@ t3 mol tumorigenic high -fl}A@@@YHdhheDddcAENJ]ZHTt@@@@@@@@@ t3 mol tumorigenic high -fl}AA`D`bBQCHbTPFHcDYEEEIibheEPWEFl{wdsUUUUUUT@@ t3 mol tumorigenic high -fl}aA@HF@DIdLdRbbRRtJR``cIFuXLZjjZjeif@@ t3 mol tumorigenic high -foA@`@@VRfUYu^JLz``@B@@@ t3 mol tumorigenic high -foAAB@A@bDfUmyVcKN`@j@@@@@ t3 mol tumorigenic high -foAA`@@HXdrkkJdiYsTtp@PBGH t3 mol tumorigenic high -foAP@@@NRYWVUzLMZ@B`@`@@ t3 mol tumorigenic high -foAP@@@XReeV]qZlyfjjjj@@ t3 mol tumorigenic high -foAPB@KN@DISLjohmJMP@@AP@@@ t3 mol tumorigenic high -foAPQ@LF`aV`AD`cIICDTiCJLlyZjiZj@@ t3 mol tumorigenic high -foAP`@BZ@aInvYWejsfjiB@`@@ t3 mol tumorigenic high -foA`@@@IKLrjzkF]u@@@@@@@ t3 mol tumorigenic high -foA`@@@ILkjrmFV]@AL@@@ar@ t3 mol tumorigenic high -foA`@@@IML|{wEFmUSA@R@@@ t3 mol tumorigenic high -foA``@L@QdTVbbbblmV\u@A@@@@@ t3 mol tumorigenic high -foA`a@AZlBHYDYEDeDXhiSagPAESLP@@ t3 mol tumorigenic high -foAaB@G\ADILkkJ}FFm@AP@P@@@ t3 mol tumorigenic high -foAa`@J@PIImeeWyJsfjZb@@@@ t3 mol tumorigenic high -foAp@@@P\eKLjorMjsP@@A@B@H t3 mol tumorigenic high -foAq`@DXxBSlbbTTtJVhKQffjjjX@@ t3 mol tumorigenic high -foIA@@@IRlkZ|DTyKUgUSUUJs@@@ t3 mol tumorigenic high -foIA@@@IRlrj|DTxjqgUP@@AP@@@ t3 mol tumorigenic high -foQ@b@BBADYEEDeMBdrPeV]AAP@A@@@ t3 mol tumorigenic high -foQ@b@FRADILkZvmNRUYt@QP@D@@@ t3 mol tumorigenic high -foQA`@@HldrmlrtYKUgMR@QSD@@ t3 mol tumorigenic high -foQH@@@RM[IEDhmBdj\DkQ`@@ajB@@ t3 mol tumorigenic high -foQH@@@XhiJYmg^YpRcVBHJiXX@@ t3 mol tumorigenic high -foQP@@@FRfYeUz\e[S`@@@`@@@ t3 mol tumorigenic high -foQP@@@FRfYeUz\e[S`@`JbB@@ t3 mol tumorigenic high -foQa@@N@rQQQQJKGbiVLz`BB@D@@@ t3 mol tumorigenic high -foQp@@@XdeLv{ZtyIUgAAE@@P@@ t3 mol tumorigenic high -foQp@@@XidbbfbQRSNRUYpQAT@@@@@ t3 mol tumorigenic high -gBQ@@eJuT@@ t3 mol tumorigenic high -gBX@@eLUT@@ t3 mol tumorigenic high -gC`@Die@@ t3 mol tumorigenic high -gC`@H{P@ t3 mol tumorigenic high -gC`DADJHRZd@ t3 mol tumorigenic high -gC`DADZHRVXRP t3 mol tumorigenic high -gC`DADZHRVx@ t3 mol tumorigenic high -gC`DAHJPRZd@ t3 mol tumorigenic high -gC`HADIKLIH t3 mol tumorigenic high -gC`HAVIMT@@ t3 mol tumorigenic high -gC`HAbIKJ@@ t3 mol tumorigenic high -gC`LADJHtPduP@ t3 mol tumorigenic high -gC`LADJPt`duP@ t3 mol tumorigenic high -gC`LAVJluXduP@ t3 mol tumorigenic high -gC``Adej@@ t3 mol tumorigenic high -gCa@@dkH@ t3 mol tumorigenic high -gCa@@dmH@ t3 mol tumorigenic high -gCa@@dmP@ t3 mol tumorigenic high -gCa@@dmX@ t3 mol tumorigenic high -gCa@@dsP@ t3 mol tumorigenic high -gCa@@duP@ t3 mol tumorigenic high -gCaA@NRVd@ t3 mol tumorigenic high -gCaHH@bNt@@ t3 mol tumorigenic high -gCah@mJAIj`@ t3 mol tumorigenic high -gCahHl@bNj@@ t3 mol tumorigenic high -gCahHlGBNt@@ t3 mol tumorigenic high -gCahHlHRNj@@ t3 mol tumorigenic high -gCahhlAa]ncm@@ t3 mol tumorigenic high -gCaihlLr\nwQz`@ t3 mol tumorigenic high -gCd@ADij@@ t3 mol tumorigenic high -gCd@ADkZ@@ t3 mol tumorigenic high -gCdDI`BHDRZh@ t3 mol tumorigenic high -gCh@@doH@ t3 mol tumorigenic high -gCh@@duP@ t3 mol tumorigenic high -gCi@DDfZ@@ t3 mol tumorigenic high -gFp@DiTt@@@ t3 mol tumorigenic high -gFp`@dfTujh@ t3 mol tumorigenic high -gFp`@df_Ejh@ t3 mol tumorigenic high -gFp`ATiTvjh@ t3 mol tumorigenic high -gFq@@eOKUU@@ t3 mol tumorigenic high -gFq`@ldrfmT`@ t3 mol tumorigenic high -gFr@ACTi[FZd@ t3 mol tumorigenic high -gFr@ACTi_FVh@ t3 mol tumorigenic high -gFt@ATigVVh@ t3 mol tumorigenic high -gFt@AdigUjX@ t3 mol tumorigenic high -gFtHE`DILikUP@ t3 mol tumorigenic high -gFu@E`drfmU@@ t3 mol tumorigenic high -gFx@@eJf`@@@ t3 mol tumorigenic high -gFx`LDdrfmU@@ t3 mol tumorigenic high -gFy@DDfXujh@ t3 mol tumorigenic high -gFy@JDiTvjh@ t3 mol tumorigenic high -gFy@LDeXvjh@ t3 mol tumorigenic high -gFy@LDi^Jnh@ t3 mol tumorigenic high -gGP@DiVj`@ t3 mol tumorigenic high -gGPBADJHLQXaInih@ t3 mol tumorigenic high -gGPBADJHtQXcHiCUp@ t3 mol tumorigenic high -gGPBAHJPLaYAInih@ t3 mol tumorigenic high -gGPBAHJPtaYCHiCUP@ t3 mol tumorigenic high -gGP`@TfYi`@ t3 mol tumorigenic high -gGP`ATeVj`@ t3 mol tumorigenic high -gGP`ATeVn`@ t3 mol tumorigenic high -gGP`ATiVj`@ t3 mol tumorigenic high -gGQ@@dkUT@@ t3 mol tumorigenic high -gGQ@@eMUT@@ t3 mol tumorigenic high -gGQLJHaQFbLbdMT`@ t3 mol tumorigenic high -gGQXHlZHROjj@@ t3 mol tumorigenic high -gGQ`@bdwMT@@ t3 mol tumorigenic high -gGQhHl@cIIBmP@ t3 mol tumorigenic high -gGQhHlLSIHTmP@ t3 mol tumorigenic high -gGQhHlOAJmZh@ t3 mol tumorigenic high -gGT@ADiVj`@ t3 mol tumorigenic high -gGU@E`dmmT@@ t3 mol tumorigenic high -gGXHD@aIUVd@ t3 mol tumorigenic high -gGXLJHaQFbLbdMU`@ t3 mol tumorigenic high -gGX`LDdsmT@@ t3 mol tumorigenic high -gGY@HDeVZaI@ t3 mol tumorigenic high -gGY@HDefZaH` t3 mol tumorigenic high -gGYHLaDIMtu@@ t3 mol tumorigenic high -gG]HHjPDIJuS@@ t3 mol tumorigenic high -gJP@DjYd@ t3 mol tumorigenic high -gJPBADJHtPXaIjj@@ t3 mol tumorigenic high -gJPBADJHtPYAIjj@@ t3 mol tumorigenic high -gJPDADQpRZj`@ t3 mol tumorigenic high -gJPHADIKSP@ t3 mol tumorigenic high -gJPHADILth@ t3 mol tumorigenic high -gJPHAVILuP@ t3 mol tumorigenic high -gJPLADJHLPdwS@@ t3 mol tumorigenic high -gJPXHlPDQzt@@ t3 mol tumorigenic high -gJPXHlPLQzt@@ t3 mol tumorigenic high -gJP`@TeVd@ t3 mol tumorigenic high -gJP`@TeZh@ t3 mol tumorigenic high -gJP`@TfVd@ t3 mol tumorigenic high -gJP`@deVh@ t3 mol tumorigenic high -gJP`@dfvd@ t3 mol tumorigenic high -gJPlLQDPHTPduR`@ t3 mol tumorigenic high -gJQ@@dlu@@ t3 mol tumorigenic high -gJQ@@dmU@@ t3 mol tumorigenic high -gJQ@@duU@@ t3 mol tumorigenic high -gJQ@@eKU@@ t3 mol tumorigenic high -gJQDHG@nBUMT@@ t3 mol tumorigenic high -gJQHBHaIfe@@ t3 mol tumorigenic high -gJQHBLQIfe@@ t3 mol tumorigenic high -gJQ`@bdvu@@ t3 mol tumorigenic high -gJT@ADiYhRP t3 mol tumorigenic high -gJT`E`TfVh@ t3 mol tumorigenic high -gJX@@dkU@@ t3 mol tumorigenic high -gJX@@dms@@ t3 mol tumorigenic high -gJX@@eKU@@ t3 mol tumorigenic high -gJX`LDdru@@ t3 mol tumorigenic high -gJY@DDfvd@ t3 mol tumorigenic high -gJYHC`DIKTp@ t3 mol tumorigenic high -gKP`@df\Vj@@ t3 mol tumorigenic high -gKQ@@eKcRp@ t3 mol tumorigenic high -gKQ@@eKcUP@ t3 mol tumorigenic high -gKX@@eKcUP@ t3 mol tumorigenic high -gK\@ADeKbuH@ t3 mol tumorigenic high -gNpXHlPDYIHTmT@@ t3 mol tumorigenic high -gNp`@dfVZf@@ t3 mol tumorigenic high -gNp`@df]Zi@@ t3 mol tumorigenic high -gNp`@dfzZj@@ t3 mol tumorigenic high -gNp`@teUZi@@ t3 mol tumorigenic high -gNplJqDJHtQdTaeUP@ t3 mol tumorigenic high -gNpmJqDJHtP~rJPrjX@ t3 mol tumorigenic high -gNq@@dssUP@ t3 mol tumorigenic high -gNq`AVeJmUP@ t3 mol tumorigenic high -gNqhHl@cIICej`@ t3 mol tumorigenic high -gNqhHlOAJkVj`@ t3 mol tumorigenic high -gNtDLpDDHRevnl@ t3 mol tumorigenic high -gNtHE`DILruT@@ t3 mol tumorigenic high -gNx@@eRmUP@ t3 mol tumorigenic high -gNx`LDdskUH@ t3 mol tumorigenic high -gNx`LDdskUP@ t3 mol tumorigenic high -gNx`LDdssUP@ t3 mol tumorigenic high -gNx`LFdjmUP@ t3 mol tumorigenic high -gNy`LDtf]Zj@@ t3 mol tumorigenic high -gN|@ADeJkUP`` t3 mol tumorigenic high -gN}HEbpDILzuR@@ t3 mol tumorigenic high -gOp@DjWkB@@@ t3 mol tumorigenic high -gOpHADILkW@@@@ t3 mol tumorigenic high -gOpXHlPDYIHUVmU@@ t3 mol tumorigenic high -gOp`@dfUMZf`@ t3 mol tumorigenic high -gOp`@dfVqZj`@ t3 mol tumorigenic high -gOp`@tiguif`@ t3 mol tumorigenic high -gOp`AdeekZZP@ t3 mol tumorigenic high -gOphH`DYIHUVmT`@ t3 mol tumorigenic high -gOq@@drm[UT@@ t3 mol tumorigenic high -gOq@@drm\@@@@ t3 mol tumorigenic high -gOq`@fdrikTl@@ t3 mol tumorigenic high -gOq`@fdrikUL@@ t3 mol tumorigenic high -gOqhHl@cIIBjujh@ t3 mol tumorigenic high -gOtHE`DILl[MT`@ t3 mol tumorigenic high -gOx@@drm\@@@@ t3 mol tumorigenic high -gOx@@drm]UT@@ t3 mol tumorigenic high -gOx@@eJqh@P@@ t3 mol tumorigenic high -gOxHDHaIeZx@@@ t3 mol tumorigenic high -gOy@DDfYKZj`@ t3 mol tumorigenic high -gOz@ACVeKNLuR@@ t3 mol tumorigenic high -gO|HDVHaIeZx@@@ t3 mol tumorigenic high -fHbTA@ t2 pattern tumorigenic medium -fH`pA@ t2 pattern tumorigenic medium -gFp`@dfTujXCAZ|a@ t2 pattern tumorigenic medium -gFx@@eJftu@XVKF|`@ t2 pattern tumorigenic medium -eO`BNZ`` t2 pattern tumorigenic medium -fH`XA@ t2 pattern tumorigenic medium -fHdpAa@ t2 pattern tumorigenic medium -gNxHLHaIVjj`H t2 pattern tumorigenic medium -eFJHbHpP t2 pattern tumorigenic medium -eMABHXaIhH t2 pattern tumorigenic medium -gJXHD@aIYj@ppqyH t2 pattern tumorigenic medium -gCi@HDej@pRwDH t2 pattern tumorigenic medium -gCi@LDeZ@pTWI` t2 pattern tumorigenic medium -gCd@ADiZDE@ t2 pattern tumorigenic medium -gOx@@drm\@@A`plZp t2 pattern tumorigenic medium -gGX`LDdsmTA`m^P` t2 pattern tumorigenic medium -gCiHLaDIMLA@ t2 pattern tumorigenic medium -fHapA@ t2 pattern tumorigenic medium -deTH@@RY[TYjp@@B t2 pattern tumorigenic medium -gCa@@dkHFBVyH t2 pattern tumorigenic medium -deTD@@eIYWVy`@h@LFpjXYyD@ t2 pattern tumorigenic medium -deT@`@qDeVUFZX@@HR` t2 pattern tumorigenic medium -gJQhHl@cIHUhCBGd@ t2 pattern tumorigenic medium -difH@DAInUxV`@@CBdinGdD t2 pattern tumorigenic medium -deV@@@Rge[aj@B@CChPjxYy@@ t2 pattern tumorigenic medium -deV@@@RgfTYj@`@CChRfxYy@@ t2 pattern tumorigenic medium -deVD@AADfVuFVijh@phj[iy@` t2 pattern tumorigenic medium -deVD@ICDiieZZjjh@` t2 pattern tumorigenic medium -daGH@DK`R[e[fiZ@LLQnyE@ t2 pattern tumorigenic medium -gOr@Ajti]qZY`H t2 pattern tumorigenic medium -gGPhIPDIU{T`XXK\a@ t2 pattern tumorigenic medium -did@`@qDeYWaf@@BH\NABinGdP t2 pattern tumorigenic medium -fHa@A@ t2 pattern tumorigenic medium -gNq`@jdvkSPf\Ll~P` t2 pattern tumorigenic medium -dedB`LkiCDRV{njjh@` t2 pattern tumorigenic medium -diGH@Dr`RY{fjj@H t2 pattern tumorigenic medium -gJY@BDfZhC@bK\a@ t2 pattern tumorigenic medium -gJY@BDfVhCAK\a@ t2 pattern tumorigenic medium -gGY@JDf]j`LLl^R` t2 pattern tumorigenic medium -gGY@BDfUj`LLm^P` t2 pattern tumorigenic medium -gJPH@DISUPFABqyH t2 pattern tumorigenic medium -gJX@@dlu@XZX|PP t2 pattern tumorigenic medium -gNxHF@aJZzjPH t2 pattern tumorigenic medium -dazD@LADeUffhHr` t2 pattern tumorigenic medium -gGT`EaTf]jPLDmrD t2 pattern tumorigenic medium -gCh`LDdsPFDWI` t2 pattern tumorigenic medium -gGX`JDdsmTA`l^R` t2 pattern tumorigenic medium -dmv@@@Rf~UeZj@@@LEBDpfxYT t2 pattern tumorigenic medium -gOx@@drm]UTAaqEcV t2 pattern tumorigenic medium -gOx@@drm\@@A`Qc^IL t2 pattern tumorigenic medium -dmvL`BaL@HrRRjIJUVjjh@` t2 pattern tumorigenic medium -eFA@HoBJD t2 pattern tumorigenic medium -diFB@BAFEInuZjd@pILJnQp t2 pattern tumorigenic medium -dayH@DpDf]Vjh@pKBinHg@ t2 pattern tumorigenic medium -gNuHLzHaIUji`H t2 pattern tumorigenic medium -gNt`E`tf]Zj@pJM_I` t2 pattern tumorigenic medium -eMJD|Df`pYy@ t2 pattern tumorigenic medium -gJPhLQxIRuPD t2 pattern tumorigenic medium -daDL@@KdfYvyjV`CCLJnPp t2 pattern tumorigenic medium -eMBBlRZCAGe@ t2 pattern tumorigenic medium -gOq`AVeL~mUTA`Yb~Q@ t2 pattern tumorigenic medium -eMPBchLD^T t2 pattern tumorigenic medium -daF@@@ReYJjjj@LNaLJf{d@ t2 pattern tumorigenic medium -daE@@@aJyUnX@@@` t2 pattern tumorigenic medium -gCe@E`dkPFBbyL t2 pattern tumorigenic medium -gCahHlGBNtA@ t2 pattern tumorigenic medium -gC`@Die@ptVy@ t2 pattern tumorigenic medium -gC`DAb[DRVhB t2 pattern tumorigenic medium -gCaHLLQIZ`LDEqS@ t2 pattern tumorigenic medium -gGPBADZPLaYAIZjhB t2 pattern tumorigenic medium -eMABHYAIhH t2 pattern tumorigenic medium -gJX@@dkT`XFKGd@ t2 pattern tumorigenic medium -gJY@DDeZhCCSGbB@ t2 pattern tumorigenic medium -gGT`CPdfuj`LLl^R` t2 pattern tumorigenic medium -gGX`DJdsmRA`enP` t2 pattern tumorigenic medium -gFq@@eMqUW@P t2 pattern tumorigenic medium -dkNF@BAIWSR[YVYjjfX@` t2 pattern tumorigenic medium -deVDPL[`bB|DeYgFZjZh@` t2 pattern tumorigenic medium -deVL`LxY@HRf][JjZV`cJ t2 pattern tumorigenic medium -gO|HEfHaIeZx@@B t2 pattern tumorigenic medium -daxD@@QInuij@LBRf{dD t2 pattern tumorigenic medium -daxD@@QImUijBLlBRf{bXP t2 pattern tumorigenic medium -dedB@@PYR[fyijXHqpQIxe\ t2 pattern tumorigenic medium -fH`TA@ t2 pattern tumorigenic medium -daxL`HS@BLddNRuR@P t2 pattern tumorigenic medium -eFJHqHpP t2 pattern tumorigenic medium -daxL`Lk`qDenzjh@pXDpj{bPp t2 pattern tumorigenic medium -eFPBca@ t2 pattern tumorigenic medium -gG]@EjDfUj`LEcqJ` t2 pattern tumorigenic medium -dedd@DpaCdfU{ZjZ@H t2 pattern tumorigenic medium -dmOH`LJQ@HRf^yriVfZZh@` t2 pattern tumorigenic medium -daE@@@yIe^f`@`@piLJny@@ t2 pattern tumorigenic medium -devH`LX@aJWY\HYiZZd@` t2 pattern tumorigenic medium -daEH@DHDfURijZ`CCL[nP` t2 pattern tumorigenic medium -daFH@HAIYUnh@@@pXHpj[d\ t2 pattern tumorigenic medium -gFt`CQdidviXB t2 pattern tumorigenic medium -gJPXHlPDQztAxlP t2 pattern tumorigenic medium -gJPDAbGDRUj`H t2 pattern tumorigenic medium -gNx@@eJmThFCbqky@ t2 pattern tumorigenic medium -eMA@HPaIXLD^T t2 pattern tumorigenic medium -gGYHLQDIJuU@P t2 pattern tumorigenic medium -gGP`ATf]j`LLl^R` t2 pattern tumorigenic medium -gFp`AdeoEjhCCHwd` t2 pattern tumorigenic medium -gOp`AdeekZZPLMB~R` t2 pattern tumorigenic medium -gF|@@ZeJxru@XYF|d@ t2 pattern tumorigenic medium -gOy@FDiekjj`LKEc^Q` t2 pattern tumorigenic medium -gOx@@eJqmUTA`xlZ~P@ t2 pattern tumorigenic medium -gOx@@eLvmUTA`xlZ~P@ t2 pattern tumorigenic medium -gOxHBHaIeZzjhB t2 pattern tumorigenic medium -gKP@Di\YZ@phbq@ t2 pattern tumorigenic medium -diDB`HSB@HrRPyIZj`CCBknHp` t2 pattern tumorigenic medium -gNq@@djmUPFEfM_DD t2 pattern tumorigenic medium -dcLL`HS@BLddjbRtjmP@P@P t2 pattern tumorigenic medium -gJPJAHR`Tai@rBSUTA@ t2 pattern tumorigenic medium -eMCArhabHzCCI@ t2 pattern tumorigenic medium -gNy@BDf[Zj@pruxbp t2 pattern tumorigenic medium -gJY@DDfzhCCSGbB@ t2 pattern tumorigenic medium -gNx`JDdskUPFDwLZp t2 pattern tumorigenic medium -dmVD@JADf^Uvjjh@` t2 pattern tumorigenic medium -gChHL@aIVPH t2 pattern tumorigenic medium -gNy`LETeUZZDs@ t2 pattern tumorigenic medium -gNt`LPdfUZi@pexlp t2 pattern tumorigenic medium -diEH@DpDfYUjj`C@bkaxfL t2 pattern tumorigenic medium -didD@@EJ[W[j@B@CBdJfGdX t2 pattern tumorigenic medium -dmtH@@rJIJFRf`@j`@pxDrae^Pp t2 pattern tumorigenic medium -daG@@@kdiVrX@a@B t2 pattern tumorigenic medium -eMhDRUB t2 pattern tumorigenic medium -gOx`FDdrikUTA@ t2 pattern tumorigenic medium -gJXHD@aIUZ@` t2 pattern tumorigenic medium -dcnL`LaA@HrRPjIKTrzmPHD@FEYtkh t2 pattern tumorigenic medium -gCi@LDeZ@pTwH` t2 pattern tumorigenic medium -gFq@@eNqUU@XZX|Rh t2 pattern tumorigenic medium -gKP@Di\Vi@pLVOH@ t2 pattern tumorigenic medium -diVH@BAIfUInFjZi@H t2 pattern tumorigenic medium -gNqhHl@cIHUEj`LLZ~P@ t2 pattern tumorigenic medium -daxD@@QIe]ji@LBpf{dT t2 pattern tumorigenic medium -diFL@J@aRY]Zjj@LABDpfx^QP t2 pattern tumorigenic medium -gNx@@eLmUPFEfM_DD t2 pattern tumorigenic medium -gNy@LDeUji@phQkxi` t2 pattern tumorigenic medium -gGX`BDdjmTA`m^JD t2 pattern tumorigenic medium -dazD@FCdfUVjx@` t2 pattern tumorigenic medium -gCd@AH}PFBVyH t2 pattern tumorigenic medium -gChHHGBOTA@ t2 pattern tumorigenic medium -gC`DADZHRVhB t2 pattern tumorigenic medium -deVB`BaLd@cIIBeDwKULpA@ t2 pattern tumorigenic medium -gJT@@deVhCCCGbb@ t2 pattern tumorigenic medium -gNu@E`drkUPFFM_Dl t2 pattern tumorigenic medium -gGXHJGAJijhC@qX|e@ t2 pattern tumorigenic medium -didH@@RYeVz@``@pXLJf{dB t2 pattern tumorigenic medium -daEH`Dq`BDfUjyjfPC@`SNyE@ t2 pattern tumorigenic medium -dieH`Dq`BDfUfnZii@H t2 pattern tumorigenic medium -gJPDADFHRYfaHp t2 pattern tumorigenic medium -dmuL@DpFEIeY~nZifh@pILe^Qp t2 pattern tumorigenic medium -dklL@@STfue]eVj@B`@pyL[ad~PP t2 pattern tumorigenic medium -difH@HAIVUxY`@@bGA`Pjx^Pp t2 pattern tumorigenic medium -did@p@bBbFbDfYoa`b@@H t2 pattern tumorigenic medium -did`@@pjRfUjXBB`@pSaxbL t2 pattern tumorigenic medium -dcNH@DCHheEDbnmPT@@F@hUMproHt t2 pattern tumorigenic medium -daz`@@SFyIeYjf@LJAL[nQP t2 pattern tumorigenic medium -daG@`LK`BDimVz`@@B t2 pattern tumorigenic medium -deT`@@pjrQQIFTpDEP@P t2 pattern tumorigenic medium -did`@@pjrQQIFf@`h@LLKaxbL t2 pattern tumorigenic medium -gNy@JDeUjj@phVKxiP t2 pattern tumorigenic medium -digD@DpP[HhdhZyjfd@pqLkdB t2 pattern tumorigenic medium -dmuH@DpDfWeYUj`@@CAlInF^Hb` t2 pattern tumorigenic medium -fH`PAa@ t2 pattern tumorigenic medium -fHdHA@ t2 pattern tumorigenic medium -fHchA@ t2 pattern tumorigenic medium -eFHBJFE@ t2 pattern tumorigenic medium -dmLH@@RYVuiiV@@@@@phJxYybXh t2 pattern tumorigenic medium -did@@DjY}nBHH@LJSBh^Qp t2 pattern tumorigenic medium -f`i@@@LdbbbTRVHeZ][uHAD@D@@XRhs`iJtZwLX]x t2 pattern tumorigenic medium -fhyA@@@ILklrstXYw`p@TaDA@@P t2 pattern tumorigenic medium -fdeA@@@ISZvmvkNJLFM@AUH@D@A@ t2 pattern tumorigenic medium -gOu@HpeK^MKTAaKqY` t2 pattern tumorigenic medium -ffsA`@@LudTTTeRdVTtLIps`ySeijjjZjjj@B t2 pattern tumorigenic medium -dklF@@XUttief_kjjjjh@` t2 pattern tumorigenic medium -fi{@h@@LDipTmzOHhhhhhbXdiidnBu[IV`fHbjjjh`@pmIVc^CENRmzObNU@ t2 pattern tumorigenic medium -dayL@DpFyIgYjf@LLPnyF@ t2 pattern tumorigenic medium -fb}A@@@ISZvmk\lxkSoQsP@UUUUEP@XNQ`cARUhugASgdH` t2 pattern tumorigenic medium -ffs``@L@QdTVbdRQfRfRxhu`qKUjjjjj@Bh@B t2 pattern tumorigenic medium -fnkA`@@HkdRTTbRLrTrVSIZMxNRmUUUU@AUP@D t2 pattern tumorigenic medium -fa{A@@@YEDeMDhTihdXjLUiwhyZZjjjjjjj@B t2 pattern tumorigenic medium -daxH@@RYWjZPcKA`SBinIG@ t2 pattern tumorigenic medium -det@@DjYUX^d@@@@CAlJnF^Hc@ t2 pattern tumorigenic medium -gF|LHjOC^A|DiTt@@B t2 pattern tumorigenic medium -fnk@`@@UrJIJZIPiSQHrcEZ]zNVfjjjjjZj@CCrLTxJRmFlxJ\myBH t2 pattern tumorigenic medium -fc@P@@E{OHhdiheBeMDhUEKQbmN}GKSUUUUUTsUT@D t2 pattern tumorigenic medium -fnk@@@LdbTTRbTRQNfiKak^cejjfjjjjj`@` t2 pattern tumorigenic medium -dmtL@@QTfyeQehBA@C@jXYxb\ t2 pattern tumorigenic medium -dklL@@PtfVV]WVhH`P@` t2 pattern tumorigenic medium -deTD@@eJ[WVz`@h@LBRfgfXP` t2 pattern tumorigenic medium -dcLL@@{TimY]ah@bh@LJPaW^Id` t2 pattern tumorigenic medium -dcLH@@RYeZvz@`j`@pxBXYW^Q` t2 pattern tumorigenic medium -foAPB@LD@DYHhdcEEEQagTuPDQ@@P t2 pattern tumorigenic medium -deVH@DAIgeQej@@@LJSJX^It` t2 pattern tumorigenic medium -deVH@IAJYW~F``H@LJPj[nId` t2 pattern tumorigenic medium -dk^@@@RfYU\]Tzjjjj@LKBDpj[ae]L t2 pattern tumorigenic medium -did@@DjYmaBH`@LBrnGbDp t2 pattern tumorigenic medium -gJX@@dmu@XKGdP t2 pattern tumorigenic medium -dg^L@D@[rJIJJIGZ[UAPD@D t2 pattern tumorigenic medium -deVh@LKadDimY[j@B`@paNHL` t2 pattern tumorigenic medium -eMPBcXLIyP t2 pattern tumorigenic medium -dcMH@ITDee]UnX@Jh@H t2 pattern tumorigenic medium -dg]D@DpCRYVuveVj@BX@H t2 pattern tumorigenic medium -fgA@@@DjYU_VByHu`@@@@@@H t2 pattern tumorigenic medium -dclL@@{TivY~DeZhHB`@` t2 pattern tumorigenic medium -did@@LdbRQk``b@CAhPjX^Q` t2 pattern tumorigenic medium -eMJH\Df`pgd@ t2 pattern tumorigenic medium -deTD@@YIfUqehH@@LFJfxYyF@ t2 pattern tumorigenic medium -dclH@@rQQRJJuJ{PUDB@FCES\L|Q]@ t2 pattern tumorigenic medium -dif@@@RYWZZ@BP@pXDpj{dB t2 pattern tumorigenic medium -daF`@@pjYJYfn@b@@pPfyG@ t2 pattern tumorigenic medium -deV@@@RYV~f`@i@B t2 pattern tumorigenic medium -deV@`BBHRYg]n``I@B t2 pattern tumorigenic medium -dmNH@NCHhheDVzU`@@@@LJCJe^Hp` t2 pattern tumorigenic medium -dcnD`HI`BDfYoVnWZfX@@@` t2 pattern tumorigenic medium -dmND@DCdfVUrjUZjZi@LFrfFUyB@ t2 pattern tumorigenic medium -deVH@HAIYWVz`@d@H t2 pattern tumorigenic medium -daG@@@rdifvxH`@C@linyA@ t2 pattern tumorigenic medium -dieDPLZD@HhHrREQKaVii@LBrnGd@ t2 pattern tumorigenic medium -dk]L@LhDeIeoYR[SZjZZdHZ` t2 pattern tumorigenic medium -dmTJ`HSNd@cIICeMEjjh@` t2 pattern tumorigenic medium -daxB@@rnRV{jj`CAhSBinHG@ t2 pattern tumorigenic medium -deeD@DHFR[eyiihHr` t2 pattern tumorigenic medium -daxD@@QIgUjfBJlBpj{dL t2 pattern tumorigenic medium -foQPB@F\@DYHheBeLdRdeV]Th@@D@@P t2 pattern tumorigenic medium -dk^@@@RfYU\]Tz@@@@@LECBinFUOdZ t2 pattern tumorigenic medium -dclD@@kHheCDdUKkSP@P@P t2 pattern tumorigenic medium -deV@@@RV[TYzP@@C@j[axaR t2 pattern tumorigenic medium -dklHPBBPzPrJJKQEIa``bZ@bV t2 pattern tumorigenic medium -gGP@DiUjaAXEXwbD@ t2 pattern tumorigenic medium -dmtH@@RYWUih@IhBN\NALJiWb\H t2 pattern tumorigenic medium -dk]L@LxDMIe]eRkSZjjjh@` t2 pattern tumorigenic medium -gN}@DVDfUZi@` t2 pattern tumorigenic medium -fb}@`@@YRYVum[ehrRkNBf@BjjjjJ`@p\AFJ\EIQk^bgODZB t2 pattern tumorigenic medium -ffs@`@@URYVumfv^cIJmyIX@Jjjjjbh@H t2 pattern tumorigenic medium -fjc@`@@ErJJQIFYJSKXgIJlyNVjjjjjjj`@pC`eF\EIVkN|FJ\|`T t2 pattern tumorigenic medium -dg|@@DjU_eZx{BAH@@BJ\MaBine]N~Q` t2 pattern tumorigenic medium -eFJHSHpP t2 pattern tumorigenic medium -diV@`J@HRfU|kahDB@CB`QnGdD t2 pattern tumorigenic medium -fhy`B@J@BDifW_e\TDkpZA`R@B@DAVF`DYpTeFl{wHA@ t2 pattern tumorigenic medium -fhy`B@N@BLdTTTRRVqirUmNh@`BBh@@pt@cARUhugAyCp t2 pattern tumorigenic medium -gNx`DJdssTpFBsyD t2 pattern tumorigenic medium -fgA`@@@ISLrotyHvk@@@@@@@P t2 pattern tumorigenic medium -fdy@@@LdbbRbVbJwMAc@pU@P@@ab` t2 pattern tumorigenic medium -f`q@`@@^RYWUe^cKN`@f@B@DNVB`HpRbmFm{bNB@ t2 pattern tumorigenic medium -gGP@DiVV`iJpJqoDH t2 pattern tumorigenic medium -deTH@@RYWVf`@j@CC`SBhYyG@ t2 pattern tumorigenic medium -f`qAA@A@bOQBSJ{\ktYYt@EP@P@A@ t2 pattern tumorigenic medium -dif@@@RfU~F``@@pYLJf{b@H t2 pattern tumorigenic medium -gJQ@@dsU`XKGbD@ t2 pattern tumorigenic medium -deVD@LADfvUFVjjh@p{BinF^P` t2 pattern tumorigenic medium -dmtD@@QIV[VUZh@@@pZfxYWbQ` t2 pattern tumorigenic medium -deT@`@bDfUuih@Jp@` t2 pattern tumorigenic medium -did@@DkYWaz@@@LF`j[ayB@ t2 pattern tumorigenic medium -gNx`LDdskUXD t2 pattern tumorigenic medium -foA@@@DkfYU]UcNz`@@@@@` t2 pattern tumorigenic medium -gJX`DBdru@XS\RH t2 pattern tumorigenic medium -deVH@DAIgeQej@@@LJrfx^Hd` t2 pattern tumorigenic medium -dg~@@@RYfUWd}mh@@@@@pdBinFUwbGX t2 pattern tumorigenic medium -did@@DjYmaBH`@LJpj[nPH t2 pattern tumorigenic medium -dmvD@EBdin]~F``I@CAdJfF^Ph t2 pattern tumorigenic medium -detD@@eIYe~DYZjjh@` t2 pattern tumorigenic medium -fmoA`@@HWdTrTTtbRLrTfVrk^CdhymUUUUUUUUU@AauFBTYrRmFl{pXyKUoQsV t2 pattern tumorigenic medium -f`qAA@A@dORBSJ{\ktYYt@EP@P@A`IFBTUhunHxH t2 pattern tumorigenic medium -fb}@`@@YRYVum[ehrRkNBf@BjjjjJ`@p\cENBdkQk^CEOD@r t2 pattern tumorigenic medium -fb}A@@@YEDeMDhTihjLUiwhyjjjjjjih@L@``cAJ\EIQkNBgOHQ@ t2 pattern tumorigenic medium -dknL`LaE@HrRPzIJZ]Vh@b@CAlInd~Qh t2 pattern tumorigenic medium -deUH@JdDin]xZB@`@pIBX^IT` t2 pattern tumorigenic medium -dg]L`LnDT@cIIChdieNkT@QP@P t2 pattern tumorigenic medium -fgAAB@H@BDjyeUrLd[Uf`@@B@@H t2 pattern tumorigenic medium -fgA@@@LdbbbTVKIBMjp@@@@@@D t2 pattern tumorigenic medium -dieD`JXaCDRYgvzejX@pHLi` t2 pattern tumorigenic medium -dmUL`LZDh@cIHULdeijh@p[FxYWd@ t2 pattern tumorigenic medium -deV@@@RfyWahBB@CBj[agf@a@ t2 pattern tumorigenic medium -dcNH@DAIVYeEZ`Hb@B t2 pattern tumorigenic medium -daF@@@Rfu[j@@@LJABinIg@ t2 pattern tumorigenic medium -do}D@LlMrIJJIIHiSjhHHh@H t2 pattern tumorigenic medium -did@p@qBqAqDfYun``H@H t2 pattern tumorigenic medium -dcn@@@RieU~V]jB`b@C@\JfxYWbIh t2 pattern tumorigenic medium -foA``@I@PdwJ{J|EYsP@UUD@D t2 pattern tumorigenic medium -deUH@AdDim][j@B`@pYLJfGdR t2 pattern tumorigenic medium -did@@DjUZnBAH@LFaLkayC@ t2 pattern tumorigenic medium -foA@@@DjU][VgKNBAJ@@@PiXZ`cAJLdkQk\`x t2 pattern tumorigenic medium -did@@DjYUaBHP@LFSBiayG@ t2 pattern tumorigenic medium -foA@B@@QBSJzlkQegP@S@@@H\lM@Q`eNBUhunP\ t2 pattern tumorigenic medium -dif@@@RYWZZ@BP@piLJnx`B t2 pattern tumorigenic medium -foA`@@@ILkjrmFV]@AL@@@ar` t2 pattern tumorigenic medium -deUD@DXIRYvTYZjV`B t2 pattern tumorigenic medium -fdyAb@HHpCpRkVYU_]Nmyj`@@B`@B t2 pattern tumorigenic medium -fhiA`@@Hddjrm|jIW`mPAD@@@A@ t2 pattern tumorigenic medium -fhi``@L@PdrkLjn[s`mUTEAD@A@ t2 pattern tumorigenic medium -deVD@LADeVUFVh@@@` t2 pattern tumorigenic medium -gJX`LDdju@XP|Tp t2 pattern tumorigenic medium -difH@HAIfuxZ`@@B t2 pattern tumorigenic medium -dif@PBBPRPR[e^Fh@@@pbNES\H t2 pattern tumorigenic medium -dcNHpJtIAICICHiCDedLuP@R@D t2 pattern tumorigenic medium -dkn@hJBPRPrPvPNPrJPqIPpYj`@j@B t2 pattern tumorigenic medium -deV@@@Re]Xj@Bj@C@fxYxTIa@ t2 pattern tumorigenic medium -dmvHPBTIAIAInV_ij@HP@` t2 pattern tumorigenic medium -dcNH@NCHeEDdYplAAT@D t2 pattern tumorigenic medium -dkn@PBBPRPR[eW[aj@Bj@B t2 pattern tumorigenic medium -fHbhA@ t2 pattern tumorigenic medium -f`q`@@@YIEBedhdnB]zh@J@@@@` t2 pattern tumorigenic medium -deVD@D@dfVuFVh@@@pXj[agdH t2 pattern tumorigenic medium -foAP@@@NRYWVUzLMZ@B`@`@B t2 pattern tumorigenic medium -fde`@@@ISKN~rmFBTFH@@Pp@@@`j` t2 pattern tumorigenic medium -foQHA@FJuXFH`HRYUYYbTT[UjZjefZ@B t2 pattern tumorigenic medium -did@P@BJdDef_ahH@@LJ`fx^P@ t2 pattern tumorigenic medium -deT@@DjY]zXFB@@pYLinGbEH t2 pattern tumorigenic medium -daF@@@RYWih@H@LBCB{bIP t2 pattern tumorigenic medium -dcl@@DjYU_egX@@@@@pYLJngaLJz t2 pattern tumorigenic medium -dknL`LaM@HrRRqIYPYV`@f@B t2 pattern tumorigenic medium -deTh@DiiAIgeQej@@@H t2 pattern tumorigenic medium -dg^@@@rIRJEJFRoU@AT@D t2 pattern tumorigenic medium -foAp@@@PidbbvbRafJJuMT@ER@A@ t2 pattern tumorigenic medium -dk_@PBxpbEbDfYYUZ]NBBbT`B t2 pattern tumorigenic medium -dcvB@FAEuIm[VZijX@` t2 pattern tumorigenic medium -dknL@JABR[mfWSZZ@`@B t2 pattern tumorigenic medium -gOq@@drm]SRA@ t2 pattern tumorigenic medium -foA@`@@BRYfYWuVLyh@`@@@CBUF\EIVcNyBp t2 pattern tumorigenic medium -daG@@@[diWRh@I@B t2 pattern tumorigenic medium -deT`@@pjrQQQUMpEAP@XDUCOHX t2 pattern tumorigenic medium -daDh@DqnAIeZfZZd@` t2 pattern tumorigenic medium -foAP`@DNAsHheEEJefBMYji`@h@B t2 pattern tumorigenic medium -foAQ`@DX@pRSJs|kSegMTs@A@@X\QaVcV]rG@ t2 pattern tumorigenic medium -dg|@@DjU_eZx{BAH@@BJ\MaLJfe]N~Qp t2 pattern tumorigenic medium -dk\H@@RYm[Watz`@@@@H t2 pattern tumorigenic medium -dmvH@JAJ[g_ahHBP@` t2 pattern tumorigenic medium -dmvH`BdIAIfUya``a`@pkBhUyC@ t2 pattern tumorigenic medium -gOy@HDfUkjj`LJlZ~P@ t2 pattern tumorigenic medium -difD@LADeYWaZjj@H t2 pattern tumorigenic medium -dif@@@RfU~F``@@pxDpj[nPH t2 pattern tumorigenic medium -dmtH@@rJJIJEn`HJ`@pxBiae^Ig@ t2 pattern tumorigenic medium -deVH@NAJ[VvF`BH@LBPfGfYt` t2 pattern tumorigenic medium -foQH`@LBUXCldTRabRrIRRcVjj`PJ`@LFPISfg\`` t2 pattern tumorigenic medium -dmM@PBx@c@aJYg\jeZdHB@B t2 pattern tumorigenic medium -daF@`H@HRVU[jjj@LNaLJf{d@ t2 pattern tumorigenic medium -fgA`B@K@BDifUW|TEiQj@@@J@@H t2 pattern tumorigenic medium -flmAP@@LUyNQQQQEJQJI|Eish~BtuUUUUU@A@ t2 pattern tumorigenic medium -fnkA`@@U[dTRTrTrTtRJeFRUYpTmMUUUUTuT@D t2 pattern tumorigenic medium -daDH@@RYUih@H@LBCB{bHp t2 pattern tumorigenic medium -foAQ@@DZ@drsJkjlYsUPTDP@D t2 pattern tumorigenic medium -foQAB@C@BDifYU^gIVtz`B@DH@@` t2 pattern tumorigenic medium -f`ip@@@F}dbbTRRRQhpVkN@@@BB@@B t2 pattern tumorigenic medium -dklD@@QIe]e]MjZ@@@LApfFUt~QP t2 pattern tumorigenic medium -dg|H@@rIQQJQZ}NfuUUTt@P t2 pattern tumorigenic medium -dmtD`ATHaIe]nf`@jP@pXDpjGb]H t2 pattern tumorigenic medium -fbmPB@NA@DYHhhhddmcEJ\e[Sj@H@`jj@@H t2 pattern tumorigenic medium -dg~H@HAIYeg_eNzB@@@@B t2 pattern tumorigenic medium -dmvD`La@BLdabRbxUjjj@H t2 pattern tumorigenic medium -gGQ@@djutA`c^HP t2 pattern tumorigenic medium -daD@@DjUZxHH@CBdpj[bQp t2 pattern tumorigenic medium -f`qpB@DLxBHRYUvYZcKN`@hBB@@H t2 pattern tumorigenic medium -digDPLXXP@b`cIHUDnEZfd@` t2 pattern tumorigenic medium -daE@@@aJmUnjjh@` t2 pattern tumorigenic medium -f`iA@@@YHhhhheEZBdxwj@BHHH@@` t2 pattern tumorigenic medium -fluA`@@HRdrvmkZxiFlFKUUUP@U@@P t2 pattern tumorigenic medium -dev@@@Re[TjFP@@@@LFaB[iy@` t2 pattern tumorigenic medium -dif`@@pjGIEEEVxB``@ppjGdL t2 pattern tumorigenic medium -daE@`BhHaIfUn`H@@ppL{bTp t2 pattern tumorigenic medium -dg~L@BAER[e[gzSmh@B@@@` t2 pattern tumorigenic medium -fj}@P@@\teIfVWn]{YrQhyZA`hBBJ@@H t2 pattern tumorigenic medium -fj}@P@@\LeIfVWVu{YrVhyZA`bBBJ@@H t2 pattern tumorigenic medium -dmvH@DAIVUVUZjjh@peLJfxYWdP t2 pattern tumorigenic medium -gNp`@dfzZj@pJMX t2 pattern tumorigenic medium -dk\D`HP@cIHXheDQgSV@@@@@pZnE]ObAH t2 pattern tumorigenic medium -deVD@FADfygFV``@@pjfxYyB@ t2 pattern tumorigenic medium -f`qa@@H@RVUuYUgG^h@J`@@@H t2 pattern tumorigenic medium -daD@`@qDfYVz@`@CB`pj[d\ t2 pattern tumorigenic medium -dif@@@rRJEKaj@@@LJSJ[nHP` t2 pattern tumorigenic medium -difD`Na@BLddJT[ejj`B t2 pattern tumorigenic medium -fhiQ`@DX@pRSJswJ}N^BuSMA@P@D t2 pattern tumorigenic medium -fgAa`@N@t[HhheDTdsdeFltC@UQ@A@ t2 pattern tumorigenic medium -eMBBHRYCAKd` t2 pattern tumorigenic medium -gGPdMQDGpRUYiDe@ t2 pattern tumorigenic medium -gGPXHlQxIU[U@XR|VH t2 pattern tumorigenic medium -deU@@@qJYejxBHh@LJJfF^Qp t2 pattern tumorigenic medium -dmuH@DXDfUgjZ@Bj@B t2 pattern tumorigenic medium -dcNH@DCHheEBdnmU@@@FGIeMpkqIt t2 pattern tumorigenic medium -fnk@`@@UrJIJZIPiSQHrcEZ]zNVfjjjjjZj@CCrLTxJRmFlxLTyyAh t2 pattern tumorigenic medium -eMJDBDe`pQyP t2 pattern tumorigenic medium -deTH`ICDRUe_af@B@bGB`Jf{fPd` t2 pattern tumorigenic medium -f`qAB@O@qDfYUg_EjsjP`@@`AAC@ t2 pattern tumorigenic medium -dcLH`ICDRUe]^FX@J`Ha` t2 pattern tumorigenic medium -did@`@bDf[Wai@@@LJ@j[nI`` t2 pattern tumorigenic medium -fhi``@C@PdsrnljJW`mP@T@@@A@ t2 pattern tumorigenic medium -fiwpP@DVz@wliLsLj{[klrPeFCEKQmTtuAPHDQ@@FDj\d{qV}GrF` t2 pattern tumorigenic medium -fhiPb@OA``@QddabbRRvRkF\m@@@E@@F@jLxJRmFxcpP t2 pattern tumorigenic medium -deVH`IDIAIe[ZZ@Bd@LBSJGb]H t2 pattern tumorigenic medium -dmvH`IDIAIe[^f`@i`HF` t2 pattern tumorigenic medium -dmv@`ABHRYWUih@IhBN\FALJixgJ t2 pattern tumorigenic medium -daE@`FxLQIfVfifx@` t2 pattern tumorigenic medium -daFH`BxLQIe\jffh@` t2 pattern tumorigenic medium -dig@@@aDkYWaZ@@@LJPj[nI@` t2 pattern tumorigenic medium -eMBBHR[B t2 pattern tumorigenic medium -dmtD@@QIn[VUZd@@@pYFxYWdT t2 pattern tumorigenic medium -fhi@`@@HR[YfUWMypVf`@@@@@ptc`iJtZsoAyC@ t2 pattern tumorigenic medium -dk^H`MDIAIe[mZy]`BIjD@` t2 pattern tumorigenic medium -daF@@@RYWifef@H t2 pattern tumorigenic medium -gOx@@drm[RtA`Uc^HL t2 pattern tumorigenic medium -didL@@QdfU\jZff@LBpf{dB t2 pattern tumorigenic medium -dcmH@HDLbTTRbOBnt@@@@A@ t2 pattern tumorigenic medium -daF@@@RZW[jii@H t2 pattern tumorigenic medium -daFH@NAIe^f`@`@piLJny@@ t2 pattern tumorigenic medium -fHgPAa@ t2 pattern tumorigenic medium -gC`DAbZHRVhB t2 pattern tumorigenic medium -eMBBHRYCAGe@ t2 pattern tumorigenic medium -eFJH\HpXQr` t2 pattern tumorigenic medium -eMPBchLF^P t2 pattern tumorigenic medium -eMbDBDfp` t2 pattern tumorigenic medium -eOHBNZ`pge@ i1 pattern irritant high -gCa@@dmHFFbwH@ i1 pattern irritant high -gFp@DiTujhCBbKWdH i1 pattern irritant high -gJPXHlQxQ{TAaeb i1 pattern irritant high -gCi`HEdfZ@pRp i1 pattern irritant high -fJ@FD i1 pattern irritant high -gJPHAbIJuPFADVyB i1 pattern irritant high -gC`@Die@ppfyD i1 pattern irritant high -gJQ@@dkU@XFKGd@ i1 pattern irritant high -gJP@DizhC@qX|`@ i1 pattern irritant high -gJQ@@dru@XI[dH i1 pattern irritant high -gGQ@@eMuTA`Xl^R` i1 pattern irritant high -gJQ@@eKU@XYX|d@ i1 pattern irritant high -gGQ@@djuTAaQEcrT i1 pattern irritant high -eMABHXaIhH i1 pattern irritant high -gCa@@dkPFBbyL i1 pattern irritant high -gGQ@@drmTAaekrD i1 pattern irritant high -gJQ@@eKS@XZK\a@ i1 pattern irritant high -gCh@@dmPFFDwH` i1 pattern irritant high -eMACD\QIhH i1 pattern irritant high -gJU@DPdju`P i1 pattern irritant high -gGX`HDdwMLA@ i1 pattern irritant high -gGY@JDivjpH i1 pattern irritant high -gCi@LDek@` i1 pattern irritant high -deTH@@RYWVf`@j@CC`pjxYyB@ i1 pattern irritant high -did@p@bBbFbDfYoa`b@@LJ@fx^QP i1 pattern irritant high -deTH@@RYe]aZZj`cJ i1 pattern irritant high -gFq@@drfmU@X[F|b@ i1 pattern irritant high -deTH@@rJJIHdsSUL@P i1 pattern irritant high -deTL@@QdfygFV``@@pjfxYyB@ i1 pattern irritant high -daDH@@RVU[f@@@LBcB[bUp i1 pattern irritant high -difD@HADfyWaZjj@H i1 pattern irritant high -gGQ@@dkLtAad[rP i1 pattern irritant high -gGQ@@dlltHkCXwd` i1 pattern irritant high -difH@JAJ[gxZB@@CBdJf{dB i1 pattern irritant high -didHPBBHFHRYgVzB@`@phLKayE@ i1 pattern irritant high -deVD`FFPbDfUnkh@a`@` i1 pattern irritant high -diD@@LdbJTZjh@pzDpjX^Qp i1 pattern irritant high -eFDBcA`d i1 pattern irritant high -didL@@KdiuVDjjj@H i1 pattern irritant high -daDH@@RYe[hB@@LJpj[nP@ i1 pattern irritant high -diT@@DiYXfifjjh@` i1 pattern irritant high -gF|@ABeKZsU@P i1 pattern irritant high -gNq`@fdvkSHf\EcqJ` i1 pattern irritant high -diDL@@PTfU]jZP`f i1 pattern irritant high -gJP`@TeZhCCKGbD@ i1 pattern irritant high -gNp`@dfujj@plVMx`p i1 pattern irritant high -gGQ`@jdjmTA`l^JT i1 pattern irritant high -gNp`@dfUZi@pVOEV i1 pattern irritant high -gNq@@djkUPFEVM_I@ i1 pattern irritant high -gNq@@djmUPFCbqky@ i1 pattern irritant high -diDD@@QIeuZfhHJpkBiny@` i1 pattern irritant high -daxD@@QIgUjj@LLpfxe\ i1 pattern irritant high -daxD@@QImeijBLlBSJ[d\ i1 pattern irritant high -gNp`@deVZj@pNM_I@ i1 pattern irritant high -gNp`@dfvZj@pNM_H` i1 pattern irritant high -daxD@@QIeejj@LBpj[d\ i1 pattern irritant high -gNq@@djmSPf\GEcWr@ i1 pattern irritant high -gJPdE`DRPcyXCrD i1 pattern irritant high -gGQ@@dsmLIkCKGdh i1 pattern irritant high -gNq@@dsmUPFEDVOEV i1 pattern irritant high -daxH@@RYuji`bgA`SBknIC@ i1 pattern irritant high -gGQLJIARAdDfzj`LInJT i1 pattern irritant high -gGQLLIAREdDfvj`LINP` i1 pattern irritant high -diDHhLBPRPjPzPFPR[[jjj@H i1 pattern irritant high -gNq`@jdjsUPFAqkyH i1 pattern irritant high -gGP`ATiVj`LMEnHt i1 pattern irritant high -daxH@@RYWjj`CC`aLInyE@ i1 pattern irritant high -fHc`A@ i1 pattern irritant high -diF@@@rRHiJjj`CChSBiny@` i1 pattern irritant high -day@@@{IEHkUU@FC@fES\c` i1 pattern irritant high -gGXDL@aABS\uPFFAoH` i1 pattern irritant high -gNxLL@aAABDfVZj@` i1 pattern irritant high -gGPB@DHHpQPaIUZdB i1 pattern irritant high -gGPD@DXHRfZf@ppUxlP i1 pattern irritant high -gGX@@dsuTAaQEcrT i1 pattern irritant high -gJY@BDeZlCBSbB@ i1 pattern irritant high -gGY@LDeVj`LCD[qC@ i1 pattern irritant high -gNx@@eRmUPFEbu_HP i1 pattern irritant high -gNx`HDdvkSPfX i1 pattern irritant high -eMhDRZCAKd` i1 pattern irritant high -gGQ`@ZdruTA`qEcP i1 pattern irritant high -diDDpLH@bOA@aIkUZjh@` i1 pattern irritant high -daDH@@RVU[f@@@LJcBinQp i1 pattern irritant high -gFp`@dfTujXCAZ|a@ i1 pattern irritant high -gOx`FDdrikTtA@ i1 pattern irritant high -gJP@DkfhC@bH|f@ i1 pattern irritant high -gC`D@DSpRnhB i1 pattern irritant high -gNq`@bdvkUPFFV_IP i1 pattern irritant high -gGPP@cTfyi`ODj i1 pattern irritant high -gJP`@TeZhC@qX|`@ i1 pattern irritant high -gCaHL@aIZPLDIrH i1 pattern irritant high -gNp`@dfUZj@pvMyF i1 pattern irritant high -daxH@@RUVZj`CAdpj[nQ@ i1 pattern irritant high -gJQHLHaIVj@` i1 pattern irritant high -gNphMQDIK[UTA@ i1 pattern irritant high -gJQ@@dkSBJpHbwHP i1 pattern irritant high -gNqBLIAREdGHIMmUTA@ i1 pattern irritant high -daxL@@RdfuVjh@pILInQp i1 pattern irritant high -gGQ`@jdvmTA`l^IT i1 pattern irritant high -gNp`@|dTQjj@plVMyF i1 pattern irritant high -gJQ@@eOU@XZH|f@ i1 pattern irritant high -gGT@ATiVj`LJHm^P` i1 pattern irritant high -gGT@Ade[j`LHnHt i1 pattern irritant high -gCe@H`dkPGbV@ i1 pattern irritant high -gGUHLZHaIUjdB i1 pattern irritant high -dazH@LAIV^jj@LFBDInyE@ i1 pattern irritant high -gJP@DiVhPVFbwDB i1 pattern irritant high -eMDARVCAd i1 pattern irritant high -gNphBqDILsTrA@ i1 pattern irritant high -fHghA@ i1 pattern irritant high -deTD@@EIYe^efjZ@H i1 pattern irritant high -deTD@@QIgeQej@@@LJrfF^Qp i1 pattern irritant high -dcLD@@UIUe]FVX@J@aKCdrfx]yD@ i1 pattern irritant high -dmtD@@QImYVUZX@@Hrp{B[ae^P` i1 pattern irritant high -gGP`@deUjPLEcqR` i1 pattern irritant high -deTH@@RUYTYi`@@aK@XSJ[agd@ i1 pattern irritant high -dmtD@@QIee^UZ``@@pXjXYWd\ i1 pattern irritant high -gOp@DjWkjj`LJEc^JL i1 pattern irritant high -dmtHPBBHfHRYeUXXHHh@H i1 pattern irritant high -gOp@DjWkZj`LCD[qY` i1 pattern irritant high -gJQHBJqIVz@` i1 pattern irritant high -gCa`@ldkPD i1 pattern irritant high -dmtL@@RTeYW^Eh@J@CBbinWdP i1 pattern irritant high -did@@DjU^nBBD@LFaLiaxa\ i1 pattern irritant high -deTD@@qI[eQej@@@LNSJ[agdP i1 pattern irritant high -dcLD@@QInUuxV`@j@CCdJfzUyF` i1 pattern irritant high -dmwD@HePQInUwaZ@B`@` i1 pattern irritant high -daE@@@YIeZn`B@@pILinHG@ i1 pattern irritant high -dmvL@HAFR[f^FV``H@H i1 pattern irritant high -deVD`NFPbDfUvih@I`@` i1 pattern irritant high -dmvD@DATfYUQUjjj`CAlJfx^QH i1 pattern irritant high -deVD`BxPbDfYYZXHF@@` i1 pattern irritant high -dmt@H@bAdIdEdDfUvjZ@Bj@C@`pjyB@ i1 pattern irritant high -dcNH@DAIee^eVhHB@CCbine]yB@ i1 pattern irritant high -dmvH@JAJUuTjjjjh@pFDpfxYyB` i1 pattern irritant high -dmvH`HX@cIEDdTljjVj`B i1 pattern irritant high -gJQ@@dkU@XDSGdP i1 pattern irritant high -diDB@@SaRUYVjj@LJrfx^IA@ i1 pattern irritant high -gGQ@@dkUTA`Xm^HD i1 pattern irritant high -gGP@HUPD i1 pattern irritant high -gGP@DkYj`LJEc^R@ i1 pattern irritant high -daxD@@QIgUjfBJlLpfxe\ i1 pattern irritant high -gGQ@@eNuLIkCKWba@ i1 pattern irritant high -dctH@@RgYujfjZBLX i1 pattern irritant high -diDD@@QImiZjh@piLiny@` i1 pattern irritant high -gJP`@dfvdCBGbV@ i1 pattern irritant high -gNq`@fdrkThD i1 pattern irritant high -gJT@@defhCCSGd@ i1 pattern irritant high -deTL`HS@BLddlRPrm@@@FEYSCOHx i1 pattern irritant high -dmLD@@QIee\jeVhHB@CBbXYWd\ i1 pattern irritant high -det@@Dje^ifzjjj`B i1 pattern irritant high -gOp@DiUMZj`LFHlWrT i1 pattern irritant high -gC`H@DIMTAa`mrP i1 pattern irritant high -gNq`@fdr{UHFBqyJ i1 pattern irritant high -gJPXHlPDQztAxlP i1 pattern irritant high -gJQ@@dmS@XZX|`@ i1 pattern irritant high -gJQ@@eMU@XYX|d@ i1 pattern irritant high -gNphBpDISkURA`QEnR` i1 pattern irritant high -gGPhLQDIKUU@P i1 pattern irritant high -gJP@DkVhC@bK\a@ i1 pattern irritant high -gJQ@@djsBJpTwDb i1 pattern irritant high -gNq@@drmUPFCDVMyF i1 pattern irritant high -gGP`@TfVj`LJHl^R` i1 pattern irritant high -gNq`@fdrkUHD i1 pattern irritant high -gGY@LDenj`LJHl^R` i1 pattern irritant high -gGPhCQbILmU@P i1 pattern irritant high -gOx@@drm]UTA`plZ~R@ i1 pattern irritant high -gGP@DjZj`LCEkq@` i1 pattern irritant high -gNq@@dkMMPb\CD[qA` i1 pattern irritant high -gJQ@@dju@XJGbV@ i1 pattern irritant high -gNq@@ds]UPFCDVMyF i1 pattern irritant high -gNx@@eLsUP`lLb~KT i1 pattern irritant high -fHdXA@ i1 pattern irritant high -didH@@RUe^Ejjh@pyLJfx^Q@ i1 pattern irritant high -didH@@Rf~hRjjh@` i1 pattern irritant high -dmv@`EBHrJJIHin`HFpHy` i1 pattern irritant high -deVD@HADfyeFV`H@@piJ[iy@` i1 pattern irritant high -gOp@DjWkB@@LBmWqP` i1 pattern irritant high -deVD@HADfyUxV`@`@piJXYyA@ i1 pattern irritant high -deVD@HADfyWxV`@`@piJ[iyA@ i1 pattern irritant high -dmv@@@rQQJEJUjh@@@pdHPfxYWdT i1 pattern irritant high -gNqhHl@cIIJeiaCP i1 pattern irritant high -gNpP@jtfvZf@pfxdp i1 pattern irritant high -gGP`@dfUjpLH^R` i1 pattern irritant high -gNp@DkUzj@pjqkyH i1 pattern irritant high -gJQHHOAJuj@prqy@ i1 pattern irritant high -gJQHHOBOZ`H i1 pattern irritant high -gJQ@@dlu@XJGbV@ i1 pattern irritant high -gNq@@eJuUPFEbu_HP i1 pattern irritant high -deU@@@aJyenF`HH@H i1 pattern irritant high -gGY`HEdf]j`LEkrD i1 pattern irritant high -gJX@@dksBIpROI` i1 pattern irritant high -dedD@@QImUVjj`C@Tpj[ad i1 pattern irritant high -eO`BNZ`pYy@ i1 pattern irritant high -daDH@@RYe[jfj@LFBLJnyC@ i1 pattern irritant high -gJQ@@dsT`XDQ[dH i1 pattern irritant high -did@@DjU^nBBD@LNaLJfGd\ i1 pattern irritant high -didL@@RdeVWaZjj@LJpfx^Q@ i1 pattern irritant high -daF@@@Rfu[j@@@LFABinyF@ i1 pattern irritant high -dedD@@QImiVji`B i1 pattern irritant high -gGP@DjZj`LCL[qA@ i1 pattern irritant high -diDL@@RdeVyjf`B i1 pattern irritant high -dmtH@@ReY}Jjjjj@H i1 pattern irritant high -dcLL@@Sdf^YV]Z```@LJqae^Qh i1 pattern irritant high -gGT@@dfuj`LBEcrT i1 pattern irritant high -dif@PACDJHRYgvzB@`@` i1 pattern irritant high -dcMH@DTLbbbRRHjuUUT@X]aTwCoHd i1 pattern irritant high -dkmD`LND@HrRPjZIE]VhBB@B i1 pattern irritant high -didHPBBHFHRYgVzB@`@pHLx^HU@ i1 pattern irritant high -dmvH@DCHhhhTiUjjj`CAl[ae^HU@ i1 pattern irritant high -dknH@DAIfYuUMjjjj@H i1 pattern irritant high -dcND@DCdf^YV]Z```@LFQae]yF@ i1 pattern irritant high -gF|@AbeJf`@@P i1 pattern irritant high -difD@HADfyWaZ@@@LBRnGbDp i1 pattern irritant high -fHapA@ i1 pattern irritant high -f`i@`@@VRYfYU]`eNMyh@`AB@@H i1 pattern irritant high -dk@@@cLdRfbTQragSfhJ@T@H i1 pattern irritant high -dmLH@@rJJIQEneX@@@@C@`xYxVTr` i1 pattern irritant high -dk]H@BDLbbbbRQZ]NB@P@@B i1 pattern irritant high -foA@R@HHqH@QddebRbrPeV\m@D@@@A@ i1 pattern irritant high -daFH`JHHaIf]n``@@` i1 pattern irritant high -dmv@HBBHFPfPVPRYUzih@Jh@H i1 pattern irritant high -deTHPIBPzPRYeea`Ha@CCLX^QP i1 pattern irritant high -deVHPIHHchaIf^VFBBH@LBCNGbEH i1 pattern irritant high -ek`PJ@@@GNimlbbRfbbebrTRLrThXTlBbrjZVjjjjjfijh@CAICBc`RQSPrqspIHjhX{dFP i1 pattern irritant high -dmvL`EaL@HrRRqIXYV`@`@` i1 pattern irritant high -fewAP@@LtT^QQQRUJQYSQZXpgCNCeNVfjjijjjZj@B i1 pattern irritant high -foQ`@@@YIEDeDTdqWAF]UUAAE@@XB`cENRUkaFFlx i1 pattern irritant high -fde``@C@heMrklk|dYpXtDDUUTT@D i1 pattern irritant high -dk^H@EAJ[UVVySh@JjH@pyBhYT~If` i1 pattern irritant high -foA@@@LdbRdVeRiJs``j@@@@LEPPRgAJtZwDR\ i1 pattern irritant high -f`qA@@@YEDeeHhTjL]z@Bj@@@@` i1 pattern irritant high -dcnH@EAIfV^XYv@@B@@H i1 pattern irritant high -dmtL`HS@BLddlRTFUh@H@H i1 pattern irritant high -deT@H@bBbAbIbDfYu[hHB`@` i1 pattern irritant high -dcLHpJBPRPrPrJPsQIKmTp@@A`WBn|bP i1 pattern irritant high -gGP@Di]ja@xTQF|f@ i1 pattern irritant high -dcLB@@Q]R[e[neh@a`@piBj]yG@ i1 pattern irritant high -deU@@@eJYW~F``H@LFCBinxbR i1 pattern irritant high -deUD@HdDR[eWaZ@B@C@diaxaR i1 pattern irritant high -deVH@DAIgeQej@@@LJSJX^It` i1 pattern irritant high -dcNL@HAFR[fUqUhHH`@` i1 pattern irritant high -dg^L`EaC@HrRPsIYJCJt@EL@FCTwBm|`` i1 pattern irritant high -daFHpBxHa@bhcHheBSTuL@P i1 pattern irritant high -dg^L@D@mRY^UueVj@Bh@H i1 pattern irritant high -gOp@DjWkB@@LMc^ZI` i1 pattern irritant high -didD@@yIfVXXBH@C@`[axfT i1 pattern irritant high -daDH@@RYWih@H@LJSBknP@ i1 pattern irritant high -deTD@@YIfUqehD@@LJJnF^Q` i1 pattern irritant high -gFtHHPDIRnMKPFBEyD i1 pattern irritant high -dcnDPJa@BBBLdabRRS\nkSP@@A@ i1 pattern irritant high -gNxhMD@cIHUEj`LCcWr@ i1 pattern irritant high -dclL@@pTign_JWZjB@`@` i1 pattern irritant high -dcnD`HI`BDfYoVnWZfX@@@` i1 pattern irritant high -didH@@RVY^Ejjh@pyLJfx^Q@ i1 pattern irritant high -dedB@@PiRUi]jjT@` i1 pattern irritant high -dmTD@@QIeUyjZZBBh i1 pattern irritant high -eMFINbMP|` i1 pattern irritant high -do}H`BMPbLbbbRfebXXHHfj@B i1 pattern irritant high -do}H@DhDfUfUWWZhJB`@H i1 pattern irritant high -gGT`EaTf]j`LDkqX` i1 pattern irritant high -dayL@DpFyIeUjj@H i1 pattern irritant high -gKP@H~Jj`LEcqQ@ i1 pattern irritant high -did@@LdbLTifjj`B i1 pattern irritant high -daDD@@QInXjZjh@` i1 pattern irritant high -eMJDBDfPpce@ i1 pattern irritant high -daEH@FxDiebjiV`CCDJnHw@ i1 pattern irritant high -dk^H@FAJY}e\kSie`@`HipyLhYW^HQ` i1 pattern irritant high -daFH@LAIVUnZjh@pHj[nIB@ i1 pattern irritant high -dieH@DHDfvWaZjj@H i1 pattern irritant high -dg~H@LCHeEEDdcJg[UPTA@A@ i1 pattern irritant high -difD@HADfyWaZ@@@LLPjyc\H i1 pattern irritant high -dg^L@HAER[e[[xV`@jh@H i1 pattern irritant high -deVH@LAIVYQejjj@LNPj[agdP i1 pattern irritant high -deVH@BAIV[Qejjj@H i1 pattern irritant high -dmtHPEBHzHrJJISEa`HbP@` i1 pattern irritant high -gGQHLHaI[ihCCBWdH i1 pattern irritant high -dmuD@HXDR[fUEV```@LBRiWfMp` i1 pattern irritant high -dg}@@@mJYeU|]Tz@@@H@B i1 pattern irritant high -fhy`B@N@BLdTTTRRVqirUmNh@`BBh@@pt@cARUhugAyCp i1 pattern irritant high -gKP@LdabjhC@bH|f@ i1 pattern irritant high -dmtH`ABHRYW[ih@Jh@LNALJaWb]H i1 pattern irritant high -dg|@@DjWmijXYB@jjb@H i1 pattern irritant high -dmtD@@gHhhhdVEjjj`C@TpfxYWdT i1 pattern irritant high -deT@@DjU_k``RPHjpFDpj[ayD` i1 pattern irritant high -deTJ@@qaeJYyzzjjj@LIaLJfxY@ i1 pattern irritant high -dev`@@rfeJY{ZxYBBJD@` i1 pattern irritant high -defH@LAIVYfjj`B i1 pattern irritant high -f`aQB@BFTBHrJJIJZUJLEAADuT@A@ i1 pattern irritant high -fHdHA@ i1 pattern irritant high -didHPFBHJHRYf~FBH@@` i1 pattern irritant high -gCe@H`dkPFDwH` i1 pattern irritant high -dcND@DCTfVutYZ`@d@LJJfx^Hb` i1 pattern irritant high -gGT`IPdfuj`LDmqF` i1 pattern irritant high -da{D@Hi`QImejj@H i1 pattern irritant high -dkm@`DDHaIe]YZZ@Bjh@H i1 pattern irritant high -dcL@@LdbRbjeBDEEP@XCBES\n|SI@ i1 pattern irritant high -dmvHPBTH`XaIfUmi``hP@pXLIagd\ i1 pattern irritant high -gGYHCaDIK]M@XHSbM@ i1 pattern irritant high -dcND@DCdefV]]Z`b@@H i1 pattern irritant high -dmtD@@QIVYdUZ@b@@` i1 pattern irritant high -eFPBca@ i1 pattern irritant high -diDJ`HSJDOCIIJdfjj@LJSBx^Pp i1 pattern irritant high -f`aqR@AF}AFJZAxYIITdhhmkNZjjfV`@pxcANJm{dF@ i1 pattern irritant high -did@p@bFbAbDfUfn`BH@LLAaybYp i1 pattern irritant high -deVL@HAFR[f\YZB@@C@diixgB i1 pattern irritant high -dif@`ABHRYevz@``@phLJny@` i1 pattern irritant high -dcNH`BdHaIfUyXXHHZ@B i1 pattern irritant high -do}H`FMPbLbbRfRaRkh@bfj@B i1 pattern irritant high -dayH@DhDfWVjh@pKB[nHe@ i1 pattern irritant high -gNx`BDdvkUPFFu_Db i1 pattern irritant high -digD@Dq`yIeUifff`B i1 pattern irritant high -dk^D@D@\bbbbRQImMj`XB@C@jWSxgR i1 pattern irritant high -fgA@@@DjYU_VByHu`@@@@@@H i1 pattern irritant high -foA`@@@ILkjrmFV]@AL@@@ar` i1 pattern irritant high -dcLD@@SHhmEDcJmPDD@FA\L{qLX i1 pattern irritant high -deUD@BdDR[YTYZjj`B i1 pattern irritant high -foA@b@HHAxIRlrjzkF]U@@@@@A@ i1 pattern irritant high -dif@@@RifvFjjh@pzDJfx^Q` i1 pattern irritant high -daD@`@bDfUZZ@B@C@`qnxbD i1 pattern irritant high -dcLD`BTHaIfUVXXHHf@B i1 pattern irritant high -didH@@rJJIEn`HH@LJ@jX^Q` i1 pattern irritant high -fbu@`@@NrJJJIPjFKQLDFLADUA@T@@P i1 pattern irritant high -didH`ACDRYWZZ@B`@pXDpjGd\ i1 pattern irritant high -dg}@@@mIe]e^ftx@H@H@B i1 pattern irritant high -dmvH`FdHaIe[zn`BI`@pXDrf{dJ i1 pattern irritant high -dcNH@EAJYYeGZBHh@B i1 pattern irritant high -deTL`HRPBLdabRwBl@D@FEES]OH@ i1 pattern irritant high -gOp`Adigujj`LCEWrD i1 pattern irritant high -dmtH@@RYeUEV`P`BJlNpjxYWdL i1 pattern irritant high -deTL`HS@BLddlRPrm@@@FETwCOHp i1 pattern irritant high -deV@@@rQQQHcMAP@@XBBXUMp|bP i1 pattern irritant high -dmvD@H@de[eYVZ`@@bJ i1 pattern irritant high -daE@@@yIe^f`@`@pKBknHB@ i1 pattern irritant high -dcLH@@RfUW~f``b`@pEBinE]xfR i1 pattern irritant high -do|H@@rJJIQPrEn`HJjh@H i1 pattern irritant high -dg^D@MADfVU}iUjB@j@B i1 pattern irritant high -gGY@LDenjPLBHcqZ` i1 pattern irritant high -f`qh@@@XIQfRJJKZJEJgG^ejj`@`@H i1 pattern irritant high -dcnH@LAIYe_x^fjjjj@H i1 pattern irritant high -dg^B`LaAl@cIIBheEeikTBPH@XUgSi|Re@ i1 pattern irritant high -dg^B`LaEt@cIIKEDhcIkPPLP@P i1 pattern irritant high -do}B`LfDEpBLddJbbbJNujAbA@B i1 pattern irritant high -dieH`LE`BDiU_Bjij@LBAJ{bPH i1 pattern irritant high -dk~@@@RfYU_JGUN`@@B@@pDB[aeSyF` i1 pattern irritant high -dmtB`HSE@HrRRqIXYV`@`@pKFy^IP` i1 pattern irritant high -dmtL@@jTef_^E``J@C@biexd\ i1 pattern irritant high -dcl@@DjYU_egX@@@@@pxjxYW^XfL i1 pattern irritant high -f`q@`@@HRYyV{TRg^Z`B@@@@H i1 pattern irritant high -f`qA@@@ILk\joSagPA@PP`@D i1 pattern irritant high -dmt@H@bAdIdEdDfU^jZ@Bj@C@`pfyB@ i1 pattern irritant high -dcLHHBBHfPVPvPRYg^fzB@j`@` i1 pattern irritant high -dcn@@@Re]eRi]jj@B@CBXPjxYW^HF@ i1 pattern irritant high -fbuQB@BFTBHrJJIJZUIQILDgLDDSU@@@@P i1 pattern irritant high -dcMH@DhDfufU]Zjjj@H i1 pattern irritant high -dmtD@@[HhhhdYUhJ@@CAlJae^Hw@ i1 pattern irritant high -dmtD@@qIYyVUZh@@@pYFxYWbPP i1 pattern irritant high -deT@@LdbRTm\DDT@FGIeMpsrH@ i1 pattern irritant high -dmtHpEBHJPFHRYgW[hHBd@H i1 pattern irritant high -did@@DiUWajjj@LAaLJfx^P@ i1 pattern irritant high -fde@P@@BLEIfYfYyiWgQZ@HJ@b@@H i1 pattern irritant high -dieH@JxLbTTQkfej`CAFGbPP i1 pattern irritant high -daD@P@bNbDfUzZ@B@C@`pnxbT i1 pattern irritant high -dmMH@DhDfUmZZU`@@@@H i1 pattern irritant high -gNqdEb@b^FQRHmU@P i1 pattern irritant high -foAab@GPQ`@QddebbTVLmFlm@@@P@A@ i1 pattern irritant high -fH`pA@ i1 pattern irritant high -dg\B@@SSrJISISPbkT@Pt@D i1 pattern irritant high -deV@@@RiU\Yjjj`C@XSBkagdL i1 pattern irritant high -dmLD@@IJ]YVDeZj@B@B i1 pattern irritant high -dmLH@@RgYVaAfj@B`@` i1 pattern irritant high -did@@DjWxjZjZ@H i1 pattern irritant high -daxD@@QIUijj@LLqnxdT i1 pattern irritant high -dmtD@@QIee^UZ``@@pZfxYWdD i1 pattern irritant high -gC`dE`DSpRZXCsBX i1 pattern irritant high -deV@@@RfV\YhH`@CCdJfxYy@@ i1 pattern irritant high -dcMH@FxLdTReRQUTkUT@P i1 pattern irritant high -dcNL@HAErJZJIECKPDE@A@ i1 pattern irritant high -defD`BpPbDemgijj@H i1 pattern irritant high -do~H@DCHeEEEEBmmjBbH`@` i1 pattern irritant high -do~D@D@|bTTTTRqvvhJHb@B i1 pattern irritant high -dknH@ICHhhhdUFF@bJh@H i1 pattern irritant high -deT@@LdbRbmBDED@FGPfTwSrB@ i1 pattern irritant high -foAab@NPQ`@QddebbrRTeV\mA@@@@A@ i1 pattern irritant high -deVD`Aa@BLdabRgRl@P@D i1 pattern irritant high -foAPB@NJ@DYHhhheEcJqgT@PP@@@P i1 pattern irritant high -eMAALhbN`` i1 pattern irritant high -didH@@RYWZZ@B`@pXDpjGd\ i1 pattern irritant high -fde`B@N@BLdTTTRRVqeNRmiu@D@PUP@A@ i1 pattern irritant high -dk^L@IANRY[f~]tvjjjj@LApjXUt~It` i1 pattern irritant high -f`iPB@N^@DISLroSdcZmPA@@W@@D i1 pattern irritant high -dcLD@@QIVYVFV`HJ@CAfxYW^IE@ i1 pattern irritant high -dklD@@QIgfUiUj@`h@H i1 pattern irritant high -dk\D@@QIVZVVfSZjjjh@` i1 pattern irritant high -dk\D@@sIEDdXdj[Sjj`@`@` i1 pattern irritant high -deL`@@JfRiUfnXVfjjjh@` i1 pattern irritant high -dif@PBBPFPRYgvzB@`@psJ[dD i1 pattern irritant high -dmvHPBdIAYAIfUua``a`@` i1 pattern irritant high -dieHPJD`bFbDfYoaiZi@H i1 pattern irritant high -gJX`LDdvu@XI[dH i1 pattern irritant high -dcnH@BAJ]fuaEvjh@H@H i1 pattern irritant high -fHcxA@ i1 pattern irritant high -eFAADdRLD i1 pattern irritant high -fHdxA@ i1 pattern irritant high -eMJD|Df`pYy@ i1 pattern irritant high -gJPhHaxIRuPFBqy@ i1 pattern irritant high -gJ]@EbDfVhCAH|f@ i1 pattern irritant high -daD@@DiUVyjjPPGd i3 mol irritant high -daD@@DjUZxHD@@ i3 mol irritant high -daD@@DjUZxHH@@ i3 mol irritant high -daD@@DjWjXHB@@ i3 mol irritant high -daD@@DjWzXHB@@ i3 mol irritant high -daD@D@BHBDBLBBBJBFBNBDiUVzjj`@ i3 mol irritant high -daD@P@bBbDfYvzB@@@ i3 mol irritant high -daD@P@bNBDfUzZ@B@@ i3 mol irritant high -daD@P@bNbDfUzZ@B@@ i3 mol irritant high -daD@P@qBdDfYvzB@@@ i3 mol irritant high -daD@P@qFdDfUjz@H@@ i3 mol irritant high -daD@`@BDeeVz`@@@ i3 mol irritant high -daD@`@bDfYVz@`@@ i3 mol irritant high -daDD@@IJVVfijh@@ i3 mol irritant high -daDD@@QIe\jZjh@@ i3 mol irritant high -daDD@@YIeZn`B@@@ i3 mol irritant high -daDD@@YJZUnjjh@@ i3 mol irritant high -daDD@@qIYUnZjX@@ i3 mol irritant high -daDD@@qJYoJjjX@@ i3 mol irritant high -daDD@@qJZ_Fjjh@@ i3 mol irritant high -daDD@@yIe^f`@`@@ i3 mol irritant high -daDD@@yJYVfjjh@@ i3 mol irritant high -daDD@@yJYfnjjh@@ i3 mol irritant high -daDH@@RVU[f@@@@ i3 mol irritant high -daDH@@RVU[j@@@@ i3 mol irritant high -daDH@@RYVih@H@@ i3 mol irritant high -daDH@@RYWih@H@@ i3 mol irritant high -daDH@@RYe[hB@@@ i3 mol irritant high -daDH@@Rfu[j@@@@ i3 mol irritant high -daDH`L@HRf][jZj@@ i3 mol irritant high -daDL@@SDfUrijj`@ i3 mol irritant high -daE@@@IIf]njjh@@ i3 mol irritant high -daE@@@YIeZn`B@@@ i3 mol irritant high -daE@@@yIe^f`@`@@ i3 mol irritant high -daE@@@yIe^fjjh@@ i3 mol irritant high -daEH@DpDfYbYjj`@ i3 mol irritant high -daF@@@RVU[n@@@@ i3 mol irritant high -daF@@@RYVih@H@@ i3 mol irritant high -daF@@@RYWih@H@@ i3 mol irritant high -daF@@@RYe[hB@@@ i3 mol irritant high -daF@`NBHRYWih@H@@ i3 mol irritant high -daF@`NBPRYWih@H@@ i3 mol irritant high -daFD@DCdeeVyjj`@ i3 mol irritant high -daFH@BAIf]n``@@@ i3 mol irritant high -daFH@DAIYUnZjh@@ i3 mol irritant high -daFH@DAIeUnZjh@@ i3 mol irritant high -daFH@DAIfVfZjX@@ i3 mol irritant high -daFH@DAIf\fZjh@@ i3 mol irritant high -daFH@FAIeZn`B@@@ i3 mol irritant high -daFH@NAIe^f`@`@@ i3 mol irritant high -daFH@NAJYfnjjh@@ i3 mol irritant high -dae@@@yJeVn[jjj`@ i3 mol irritant high -daf@@@RiUkfzjjh@@ i3 mol irritant high -dax@@Djuvjh@@ i3 mol irritant high -daxB@@QnR[VZY`cD i3 mol irritant high -daxB@@QnR[VZY`cH i3 mol irritant high -daxB@@QnR[VZi`@ i3 mol irritant high -daxB@@RnRUUZjP@ i3 mol irritant high -daxD@@KHhhbtu@@ i3 mol irritant high -daxD@@KHhhcUT`@ i3 mol irritant high -daxD@@QIUUjj@@ i3 mol irritant high -daxD@@QIUYjj@@ i3 mol irritant high -daxD@@QIeUjVBB` i3 mol irritant high -daxD@@QIeUjZBB` i3 mol irritant high -daxD@@QIeUjf@@ i3 mol irritant high -daxD@@QIeUjj@@ i3 mol irritant high -daxD@@QIeejj@@ i3 mol irritant high -daxD@@QIgijj@@ i3 mol irritant high -daxD@@QImUifALj` i3 mol irritant high -daxD@@[HiDYUU@@ i3 mol irritant high -daxD@@iIijjj@@ i3 mol irritant high -daxD@@iJUfjj@@ i3 mol irritant high -daxD@@iJUvjj@@ i3 mol irritant high -daxD@@yIi^jj@@ i3 mol irritant high -daxDPDxHahaImZYiBL` i3 mol irritant high -daxDPFxH`haIf^jj@@ i3 mol irritant high -daxDPFxLPlQIf^jj@@ i3 mol irritant high -daxDpBhHa@chaIffeZBDP i3 mol irritant high -daxH@@RUUYf`QHh i3 mol irritant high -daxH@@RV[jj`@ i3 mol irritant high -daxH@@RYUZj`@ i3 mol irritant high -daxH@@ReWii`QJh i3 mol irritant high -daxH@@rJJHmUP@@ i3 mol irritant high -daxH`HALRkUZj`@ i3 mol irritant high -daxH`HALRkfZj`@ i3 mol irritant high -daxJ`HSFx@cIIJhmS@@ i3 mol irritant high -daxL@@SdfUvih@@ i3 mol irritant high -daxL@@SdfvVjh@@ i3 mol irritant high -dax`@@PjRUnzZ`@ i3 mol irritant high -day@@@[HiDYUU@@ i3 mol irritant high -day@@@kIHbiUU@@ i3 mol irritant high -dayL`BzDp@cIICdmU@@ i3 mol irritant high -daz@@@RfVjj`@ i3 mol irritant high -daz@PLBHzHRUgjj`@ i3 mol irritant high -daz@`JBHRV^jj`@ i3 mol irritant high -dazD@DAdfUvih@@ i3 mol irritant high -dazD@LCdeYzjh@@ i3 mol irritant high -dazD@NADf{Vfl@@ i3 mol irritant high -dazH@DAIeYjZ@@ i3 mol irritant high -dazH@LAIUjjj@@ i3 mol irritant high -dazH`BpJqI[Vfj@@ i3 mol irritant high -dazH`LPHaInVZj@@ i3 mol irritant high -dcL@@DiUUU]ZjejC@^QP i3 mol irritant high -dcL@@DjYYYiBHhh@@ i3 mol irritant high -dcL@H@qBqEqMqDfYn]a``bh@@ i3 mol irritant high -dcLB@@Q]R[e[neh@a`@@ i3 mol irritant high -dcLB@@Q]R[e]nEh@I`@@ i3 mol irritant high -dcLD@@EJY[WWZjB@@@ i3 mol irritant high -dcLD@@GIEDTiMBUUUS@@ i3 mol irritant high -dcLD@@IIf]z[hHBj@@ i3 mol irritant high -dcLD@@QIUVUWVj`@@@ i3 mol irritant high -dcLD@@QIe]UJfjjj`@ i3 mol irritant high -dcLD@@QIgVUWVj`@@@ i3 mol irritant high -dcLD@@QIge]FVh@I@@ i3 mol irritant high -dcLD@@SHhdhTeSMUUU@@ i3 mol irritant high -dcLD@@YJYYwEZB`b@@ i3 mol irritant high -dcLD@@iJ[g]xZB@f@bX i3 mol irritant high -dcLD@@uIUfUeVXBB@aH i3 mol irritant high -dcLDPDtHaXaInUnzY`BI@@ i3 mol irritant high -dcLH@@RYWZZYjjjh@@ i3 mol irritant high -dcLH@@RYeZvz@`j`@@ i3 mol irritant high -dcLH@@RYguRYijjh@@ i3 mol irritant high -dcLL@@G\dTRRbOKPPTP@@ i3 mol irritant high -dcLL@@QTfVUV]Zjjj@@ i3 mol irritant high -dcLL@@QTfVutYZ`@h@@ i3 mol irritant high -dcLL@@QTfvUtYZ`@h@@ i3 mol irritant high -dcLL`HQPBLddLRRTzmAA@@@ i3 mol irritant high -dcLL`HS@BLddJfRtjmP@P@@ i3 mol irritant high -dcM@@@eIi_Z[jjjj`@ i3 mol irritant high -dcM@@@wIHhdd]JuAPD@@ i3 mol irritant high -dcM@pItIAICICHiCDeDJuPAD@@ i3 mol irritant high -dcMB@hDDWXeNF]yInUnzV`BF@@ i3 mol irritant high -dcMD@DdMRUe]^EX@IP@@ i3 mol irritant high -dcMD@LDMRUe]^Fjjjh@@ i3 mol irritant high -dcMD@LtARem[~fl@bp@@ i3 mol irritant high -dcMDBLHDSdf{YU]Zj@@@@ i3 mol irritant high -dcMH@DdDfY}XfZjjj@@ i3 mol irritant high -dcMLAHtDVISdfyW[aZ@BX@@ i3 mol irritant high -dcNB@BAEuInVVFV`HF@@ i3 mol irritant high -dcNBAHAEvISdfyW[aZ@BX@@ i3 mol irritant high -dcND@AALbbTRbJzuAP@@@ i3 mol irritant high -dcND@MADfVU~UZ``H@@ i3 mol irritant high -dcNDaFePBFe^RfV^Qv`hF@@@ i3 mol irritant high -dcNH@DAIf_UIfjjj`@ i3 mol irritant high -dcNLAHAEbTyInUnzV`BF@@ i3 mol irritant high -dcNL`NaL@HrRRqQ[RjtDA@@@ i3 mol irritant high -dcO@@@JldbRTQU]UUUT@@ i3 mol irritant high -dcO@@@xTjU]Znjjjj@@ i3 mol irritant high -dcOLpHkb[PbAbEbDfYnijYjf@@ i3 mol irritant high -dcl@@DjUg^aWP`hjH@@ i3 mol irritant high -dcl@@DjYU_egX@@@@@@ i3 mol irritant high -dclD@@QIe[UiiUjP@h@@ i3 mol irritant high -dclD@@QIe[WiiUjP@h@@ i3 mol irritant high -dclD@@SHheDhbJkkUUUT@@ i3 mol irritant high -dclD@@aJVfnKfFjjjf@@ i3 mol irritant high -dclD@@iJYW]rnF``IhBI` i3 mol irritant high -dclD@@iJYW]rnF``Jh@@ i3 mol irritant high -dcm@@@UJfUWyYvhJBH@@ i3 mol irritant high -dcmH@DHDfUyTjWVi`@`@@ i3 mol irritant high -dcn@@@rJJJJJlJ{@A@@@@ i3 mol irritant high -dcnD`EGPqDfUn^neX@aiH@@ i3 mol irritant high -dcnH@AAJYYwhUvj``H@@ i3 mol irritant high -dcnH@DCHhheBeSKkUUUT@@ i3 mol irritant high -dctB@@PYRYU{Vjij@@ i3 mol irritant high -dctD@@QIeWUZjjh@@ i3 mol irritant high -dctD@@QIgUUZjjh@@ i3 mol irritant high -dctD@@QImUUZjjh@@ i3 mol irritant high -dctD@@QImUVZjjh@@ i3 mol irritant high -dctD@@wHiDThmUUUP@@ i3 mol irritant high -dctH@@RUgVVZijADn` i3 mol irritant high -dctH@@RV]UVjjj@@ i3 mol irritant high -dctH@@RgUUZjjj@@ i3 mol irritant high -dctH`HALRkUUVjjj@@ i3 mol irritant high -dctH`HALRkUYfjjj@@ i3 mol irritant high -dctL@@Pdf{e]jjj`@ i3 mol irritant high -dctL@@X\dTQfReUUU@@ i3 mol irritant high -dctL@@jTiV[Vjjj`@ i3 mol irritant high -dcvD@MADfuUUjjjp@ i3 mol irritant high -dcvH@LAIVUUjjjh@@ i3 mol irritant high -deL@@Di[ernDYZjij@@ i3 mol irritant high -deL@@DjUYkfEijjjj@@ i3 mol irritant high -deT@@DjUghP`h`@@ i3 mol irritant high -deT@@DjWvifjih@@ i3 mol irritant high -deT@@DjWviifjh@@ i3 mol irritant high -deT@@DjYUXPbH`@@ i3 mol irritant high -deT@@Dj[[[ifjd@@ i3 mol irritant high -deT@@DjeUZZjjh@@ i3 mol irritant high -deT@@LdbRTm\DBR@@ i3 mol irritant high -deT@@LdbRTm\DBT@@ i3 mol irritant high -deT@@LdbRbmBDED@@ i3 mol irritant high -deT@@LdbTRoBuUM@@ i3 mol irritant high -deT@@LdbTRoBuUT`@ i3 mol irritant high -deT@@LdbbQwBuSU@@ i3 mol irritant high -deT@@LdbbQwCUUU@@ i3 mol irritant high -deT@P@bIbDee][j@B`@@ i3 mol irritant high -deT@p@bNBIbDfUuih@J`@@ i3 mol irritant high -deTD@@EJYU^f```@@ i3 mol irritant high -deTD@@IJVWZZfjj@@ i3 mol irritant high -deTD@@QIe]Rijjj@@ i3 mol irritant high -deTD@@QIgeQej@@@@ i3 mol irritant high -deTD@@QIgeQejjj@@ i3 mol irritant high -deTD@@QImeQej@@@@ i3 mol irritant high -deTD@@SHhdhUSMUUP@@ i3 mol irritant high -deTD@@eJ[WVz`@h@@ i3 mol irritant high -deTD@@iIYe^e```@@ i3 mol irritant high -deTD@@qIUeQej@@@@ i3 mol irritant high -deTD`AdHaIe]jZ@BX@@ i3 mol irritant high -deTD`DpHaImeQfZ@@@@ i3 mol irritant high -deTD`NDHaIfVVfBA`@@ i3 mol irritant high -deTH@@RUYTYY`@@aH i3 mol irritant high -deTH@@RUYTYj`@@@ i3 mol irritant high -deTH@@RYVZfZZj`@ i3 mol irritant high -deTH@@RYVZfZij`@ i3 mol irritant high -deTH@@RYVffjjj`@ i3 mol irritant high -deTH@@RYWZfjjj`@ i3 mol irritant high -deTH@@RYe\YZB@@@ i3 mol irritant high -deTH@@RYm_aZ@B@@ i3 mol irritant high -deTH@@RYm_ajjj`@ i3 mol irritant high -deTH@@RgYTYj`@@@ i3 mol irritant high -deTH@@rJJIHmtAAH@@ i3 mol irritant high -deTH@@rJQPiCMT@@@@ i3 mol irritant high -deTHPABHxHRYWZf`@f@@ i3 mol irritant high -deTH`DBHRZ{TYf`@@@ i3 mol irritant high -deTH`IBHrJJJJlLADP@@ i3 mol irritant high -deTHpACDKD[DRYf{i`bH@@ i3 mol irritant high -deTL@@QdfygFV``@@@ i3 mol irritant high -deTL`HS@BLddlRPrm@@@@ i3 mol irritant high -deTL`HS@|LddlRPru@@@@ i3 mol irritant high -deU@@@eIYVvG`BL@@ i3 mol irritant high -deU@@@eIYWVz`@h@@ i3 mol irritant high -deU@@@eIYWVzjjj@@ i3 mol irritant high -deU@@@eIYWV{`@l@@ i3 mol irritant high -deU@@@gHeDeBwT@E@@@ i3 mol irritant high -deU@@@qJYVjXBBh@@ i3 mol irritant high -deU@`Ld@aJVu~Fl@H@@ i3 mol irritant high -deUB@DpFFTfUgkfjYX@@ i3 mol irritant high -deUH@JXDiWUJjjjh@@ i3 mol irritant high -deV@@@RUYTYy`@@aH i3 mol irritant high -deV@@@RVUenh@J@@ i3 mol irritant high -deV@@@rQQIHtpDCP@@ i3 mol irritant high -deV@@@rQQQHcMAP@@@ i3 mol irritant high -deV@@@rQQRItMMUR@@ i3 mol irritant high -deV@@@rRHqICMT@@@@ i3 mol irritant high -deV@PABPRPR[e[ij@H@@ i3 mol irritant high -deV@pABPJPZPRYf{i`bH@@ i3 mol irritant high -deVD@DAdfygFV``@@@ i3 mol irritant high -deVH@AAIfuneh@`@@ i3 mol irritant high -deVH@IAJYW~F``H@@ i3 mol irritant high -deVH@JAJUuRjjjj@@ i3 mol irritant high -deVH@LAIUeQfj@@@@ i3 mol irritant high -deVH@LAIVUVzjjj@@ i3 mol irritant high -deVH@NCIELeBpt@Q@@@ i3 mol irritant high -deVHAH@NbTfY_[hBB`@@ i3 mol irritant high -deVH`IHHaIfUVFBBH@@ i3 mol irritant high -deVH`NdHaIe]ZZ@BT@@ i3 mol irritant high -deVL@D@YrJJHjDsUTt@@ i3 mol irritant high -deVLAHAAbTyInUneh@`@@ i3 mol irritant high -deWH@DJPRY[TYZ`@@@ i3 mol irritant high -ded@@Dj_VfZZ@@ i3 mol irritant high -ded@@LdbQRdsSPQD@ i3 mol irritant high -ded@P@SHBDjuUZjj@@ i3 mol irritant high -dedB@@PYRYWYjZX@@ i3 mol irritant high -dedB@@PYR[UYjjX@@ i3 mol irritant high -dedBpJxYCDKD[pRY]jjih@@ i3 mol irritant high -dedD@@QIUUVjj`@ i3 mol irritant high -dedD@@QIkWZjj`@ i3 mol irritant high -dedD@@QInUvjj`@ i3 mol irritant high -dedD@@aJVfjjj`@ i3 mol irritant high -dedD@@eIffZjj`@ i3 mol irritant high -dedD@@qJY]zjj`@ i3 mol irritant high -dedH@@RUUUfihDRY@ i3 mol irritant high -dedH@@RUUUfjhHR@ i3 mol irritant high -dedH@@RUgVZjhHb@ i3 mol irritant high -dedH@@RV]Ujjh@@ i3 mol irritant high -dedH@@RYVYjjh@@ i3 mol irritant high -dedH@@RZW^jkh@@ i3 mol irritant high -dedH@@RZWvjjh@@ i3 mol irritant high -dedH@@rJQEJUUU@@ i3 mol irritant high -dedH`HALRkUUjjh@@ i3 mol irritant high -dedH`HALRkVYjjh@@ i3 mol irritant high -dedL@@PTfUvZfj@@ i3 mol irritant high -dedL@@pdie]jjj@@ i3 mol irritant high -dedL`@JdhDi[Ujjj@@ i3 mol irritant high -dedL`HS@|DjUUjjj@@ i3 mol irritant high -dee@@@eIUUZjj`@ i3 mol irritant high -dee@@@{IHh\iUUT@@ i3 mol irritant high -dee@PJdLQlSHiDdUU]V@@ i3 mol irritant high -def@@@RiUVjiT@@ i3 mol irritant high -def@@@Ri]Vjjh@@ i3 mol irritant high -def@pLBHFHfHRUeVjjh@@ i3 mol irritant high -defB@LAAeIeUVjj`@ i3 mol irritant high -defB`HKad@aIf^Zff`@ i3 mol irritant high -defD@AADfUfZfjBBP i3 mol irritant high -defH@LAIVYjjj`@ i3 mol irritant high -defL@L@YRUeVjjh@@ i3 mol irritant high -deg@@@FTjWUjjj@@ i3 mol irritant high -deg@@@JTeV]zjk@@ i3 mol irritant high -det@@DjYUX^d@@@@@ i3 mol irritant high -det@@DjYUX^dHbH`@ i3 mol irritant high -det@@DjYUZ^D`dJ@@ i3 mol irritant high -det@@DjyZkfyjjj`@ i3 mol irritant high -detH@@RYVvfFX@Jb@@ i3 mol irritant high -deu@`Dp@aIeURhYfh@@@@ i3 mol irritant high -dev@@@Re[TjFP@@@@@ i3 mol irritant high -dev@@@rQQJHtpr@@@@@@ i3 mol irritant high -dev@`JADrQQQHyPsPLA@@@ i3 mol irritant high -devH@JCIEEDceCM@pD@@ i3 mol irritant high -devH`HX@aJVU|HYjA@`@@ i3 mol irritant high -dg\B@@Q]rJISQJHr[TDCD@@ i3 mol irritant high -dg\B@@SSRY[W[FVh@Ih@@ i3 mol irritant high -dg\B@@pSRf^Y]vzjB``@@ i3 mol irritant high -dg\D@@QIeUyT{Zjh@@@@ i3 mol irritant high -dg\D@@QIe]UTjZjjjh@@ i3 mol irritant high -dg\D@@QIgUYT{Zjh@@@@ i3 mol irritant high -dg\D@@QIge]hYZjjjh@@ i3 mol irritant high -dg\D@@QIgfVVSZjjjh@@ i3 mol irritant high -dg\D@@QIgfWzUZjZih@@ i3 mol irritant high -dg\D@@SHhdhTdeSMUUUT@@ i3 mol irritant high -dg\D@@SHhmHcDd]mUT@@@@ i3 mol irritant high -dg\D@@SHhmHhTmimUUTt@@ i3 mol irritant high -dg\D@@SHhmHhTmimUUUT@@ i3 mol irritant high -dg\D@@eIfU_Un`HJj`@@ i3 mol irritant high -dg\H@@RV^UveVj@Bh@@ i3 mol irritant high -dg\H@@rQIIQQHg]UPT@@@ i3 mol irritant high -dg\LPLi`bBBLbRTabRvgUK@A@@@ i3 mol irritant high -dg]D@DdMRYe_[FVjZif@@ i3 mol irritant high -dg]D@DtKrIIQIPiCJt@EJ@@ i3 mol irritant high -dg]D`NV]CDRYWVyih@JZh@@ i3 mol irritant high -dg]H@LlDeYeUuNj``c@@ i3 mol irritant high -dg^D@L@teYee]nj`bH@@ i3 mol irritant high -dg^DPKFPbNBLbbRrdJUM@AKM`Pl@ i3 mol irritant high -dg^D`Ca@BLddLRRVTzm@aG@Pt@ i3 mol irritant high -dg^H@DAIfVU^]Zjjjh@@ i3 mol irritant high -dg^H@DAIf_UTfZjjjh@@ i3 mol irritant high -dg^H@DCHhhhdhb]mTED@@@ i3 mol irritant high -dg^`@@SAgHhihhhb]mTCD@@@ i3 mol irritant high -dgl@P@BH|DfeUUVjjjh@@ i3 mol irritant high -dglB@@RUrJIIIPiMUTuP@@ i3 mol irritant high -dglD@@QIeWUUjjjj@@ i3 mol irritant high -dglD@@QIeuUUjjjfBM` i3 mol irritant high -dglD@@QImUUUjjjj@@ i3 mol irritant high -dglD@@SHhmHbeDuUUR`@ i3 mol irritant high -dglD@@SHhmHdThuUMM@@ i3 mol irritant high -dglD@@qJ[]UVjjjj@@ i3 mol irritant high -dglDB@QNrJZQEIIMUMUPPt@ i3 mol irritant high -dglDPDlH`xaImUUZZjji@@ i3 mol irritant high -dgm@@@mIUUUVjjjj@@ i3 mol irritant high -dgnB@DBcoHheEiDbuUUU@@ i3 mol irritant high -dg|@P@bFBDfUoeZx{`BH@@@@ i3 mol irritant high -dg|B@@Q[RYvUmgSmj`BJH@@ i3 mol irritant high -dg|D@@SHieEDhcJg[T@@@@@@ i3 mol irritant high -dg|DB@QNrJYQQJHrivuUUUT@@ i3 mol irritant high -dg|D`BTHaIfUm]aNxHHD@@@ i3 mol irritant high -dg|H@@RVYYwySn``@@@@@ i3 mol irritant high -dg|H@@RYe[W[cn@`jjH@@ i3 mol irritant high -dg|H`BBHRYg^U[cnB@`@@@@ i3 mol irritant high -dg}@pBl@c@aPaJYgU|jgZdHHn@@ i3 mol irritant high -dg~D`NTpbDfUvYj[[`@jYa@@ i3 mol irritant high -dg~H@NAIe]YVfNx@J@@@@ i3 mol irritant high -dg@PBWPbAbLbbbRfaSR]pPTMQ@@ i3 mol irritant high -diD@@DiUVjj`@ i3 mol irritant high -diD@`@BDiUVjj`@ i3 mol irritant high -diD@`@bDee^jj`@ i3 mol irritant high -diD@`@kDf]Vjj`@ i3 mol irritant high -diDD@@QIgUZjh@@ i3 mol irritant high -diDDB@QNR[UfjZ@@ i3 mol irritant high -diDDPBhLQlQIf_jZh@@ i3 mol irritant high -diDH@@RVUvjj@@ i3 mol irritant high -diDH@@RVvjZj@@ i3 mol irritant high -diDH@@RYuYjjBH` i3 mol irritant high -diDH@@rIRHrjj`@ i3 mol irritant high -diDJ@@PnEInvZjX@@ i3 mol irritant high -diDJ`HSNDOAJoVZjX@@ i3 mol irritant high -diDL@@IdfY~jjP@ i3 mol irritant high -diDL@@kdiVZjj`@ i3 mol irritant high -diDLPBhPbFbLbbbeiZdHQ@ i3 mol irritant high -diDLPDp`bH|DfmVZj`@ i3 mol irritant high -diE@`ND@aJUUjj|@@ i3 mol irritant high -diEH@BxDeUZjj`@ i3 mol irritant high -diF@@@RUUZjj@@ i3 mol irritant high -diF@@@RVUzjj@@ i3 mol irritant high -diF@@@ReUZjj@@ i3 mol irritant high -diFD@AADfuUjj`@ i3 mol irritant high -diFD@BCdf]Zjj`@ i3 mol irritant high -diFD@FBdiUzjj`@ i3 mol irritant high -diFD@LCldTatjjh@@ i3 mol irritant high -diFJAHALXXgNRYvvjj@@ i3 mol irritant high -diG@@@HTeUWjjp@ i3 mol irritant high -diG@@@xTiUVjj`@ i3 mol irritant high -diT@@LdRbQrbYjjZ@@ i3 mol irritant high -diTH@@RVYz{ajjj`@ i3 mol irritant high -diTH@@ReUxRfjjf`@ i3 mol irritant high -diV@@@RVYz{ajjj`@ i3 mol irritant high -diV@@@RfU|kahDB@@ i3 mol irritant high -diV@`J@HRfU|kahDB@@ i3 mol irritant high -diVH@AAJUWaJZjjz@@ i3 mol irritant high -did@@DjUfaBB`@@ i3 mol irritant high -did@@DjWffB@h@@ i3 mol irritant high -did@@DjYUaBHP@@ i3 mol irritant high -did@@LdbRQk``b@@ i3 mol irritant high -did@@LdbbQxXF@@@ i3 mol irritant high -did@P@bNBDfUvf`@h@@ i3 mol irritant high -did@`@bDf[Waj@@@@ i3 mol irritant high -did@p@bBbAbDfYun``H@@ i3 mol irritant high -did@p@bBbFbDfYoa`b@@@ i3 mol irritant high -didD@@EIe]ih@J@@ i3 mol irritant high -didD@@EIfU[hBB@@ i3 mol irritant high -didD@@GHhdhZZ@B`@@ i3 mol irritant high -didD@@KIDhdZZfjh@@ i3 mol irritant high -didD@@QIe]Jfjj`@ i3 mol irritant high -didD@@QInUxV`@@@ i3 mol irritant high -didD@@iIYgxVB@@@ i3 mol irritant high -didD@@iJ[gxZB@@@ i3 mol irritant high -didD`BDHaIf_[hHB@@ i3 mol irritant high -didDpNDH`ha`cHhhcJZjiX@@ i3 mol irritant high -didH@@RUe^Fh@@@@ i3 mol irritant high -didH@@RVUvz`@`@@ i3 mol irritant high -didH@@RYVZZ@B`@@ i3 mol irritant high -didH@@RYWZZ@BP@@ i3 mol irritant high -didH@@RYm^Eh@@@@ i3 mol irritant high -didH@@RYm^Fh@@@@ i3 mol irritant high -didH@@RYm^Fjjh@@ i3 mol irritant high -didH@@RZU~Fjzh@@ i3 mol irritant high -didHPBBHFHRYgVzB@`@@ i3 mol irritant high -didHPBBHzHRYgfFBB@@@ i3 mol irritant high -didH`ACDrJIJFf`@d@@ i3 mol irritant high -didL@@HTfYun``H@@ i3 mol irritant high -didL@@IdfYoa`b@@@ i3 mol irritant high -didL@@KdfYynZej@@ i3 mol irritant high -didL@@RdfVwaZii@@ i3 mol irritant high -didL@@rldTTUkjjj`@ i3 mol irritant high -didlAHJfAAbTyInW[fiY`@ i3 mol irritant high -die@@@EIYW[n@B@@ i3 mol irritant high -die@@@EIfW[hBB@@ i3 mol irritant high -die@@@GHhhdVz@``@@ i3 mol irritant high -die@PLx@a@cHheDZyjjh@@ i3 mol irritant high -die@`BDHaIf][hHB@@ i3 mol irritant high -dieD`JXaBPRYgvzejX@@ i3 mol irritant high -dieH@JDDiWTjjjj@@ i3 mol irritant high -dieH@LDDeYWajjj@@ i3 mol irritant high -dif@@@RUe^Gh@@@@ i3 mol irritant high -dif@@@RVUf{`@`@@ i3 mol irritant high -dif@@@RVUv{`@`@@ i3 mol irritant high -dif@@@RfU~Fjjh@@ i3 mol irritant high -dif@@@RfWzXBBP@@ i3 mol irritant high -dif@@@RfWzXBB`@@ i3 mol irritant high -dif@@@rRJEKaj@@@@ i3 mol irritant high -dif@PABHJHRYgVzB@`@@ i3 mol irritant high -dif@`ABHRYWZZ@Bp@@ i3 mol irritant high -dif@`BBHRYgVzB@`@@ i3 mol irritant high -dif@`NBHRYeVFBC@@@ i3 mol irritant high -difD@D@TfY|fZjj@@ i3 mol irritant high -difD@J@TiWTjjjj@@ i3 mol irritant high -difDAHAHeNR[e^Eh@@@@ i3 mol irritant high -difFAHALkab\yIgnxVij`@ i3 mol irritant high -difH@AAJYYhZjj`@ i3 mol irritant high -difH@DAIfVifjj`@ i3 mol irritant high -difH@DAInUxVjj`@ i3 mol irritant high -dig@@@xTjU^njjj@@ i3 mol irritant high -dkLB@@SSR[UUYjjjX@@ i3 mol irritant high -dkLB`HSBCprRSEQIYjjjh@@ i3 mol irritant high -dkLD@@QIeUoVjjj`@ i3 mol irritant high -dkLD@@QIeWUVjjj`@ i3 mol irritant high -dkLD@@QIe]Ufijj`@ i3 mol irritant high -dkLD@@QIe^Uvijj`@ i3 mol irritant high -dkLD@@QImUUVjjj`@ i3 mol irritant high -dkLD@@qJ[]UZjzj`@ i3 mol irritant high -dkLFPHSaTpBJBLddJTbNVjVj@@ i3 mol irritant high -dkLH@@RUUUUfjjhHR@ i3 mol irritant high -dkLH@@RVUU^jjjh@@ i3 mol irritant high -dkLH@@rJIJJJrjjjh@@ i3 mol irritant high -dkLH@@rJJQUIIjjjh@@ i3 mol irritant high -dkLLHBi`bL|MbCbDeZuUjZjj@@ i3 mol irritant high -dkLLHLi`bB|MbCbDeVUUjjjj@@ i3 mol irritant high -dkLLXJXPdDdLdEdMdCdLbdLrfdjffj@@ i3 mol irritant high -dkLL`@JdhDiYWUjjjj@@ i3 mol irritant high -dkLL`@idhLdTTJTTjjjj@@ i3 mol irritant high -dkLN@@PiWSR[kVYjjfX@@ i3 mol irritant high -dkM@@@UJeUUZjjj`@ i3 mol irritant high -dkMDHLve@HZPzPFPrQSJQVZfjihHR@ i3 mol irritant high -dkN@@@RUUUVjjjh@@ i3 mol irritant high -dkN@@@ReUUVjjjh@@ i3 mol irritant high -dkND@CALbbRbJRZjjj@@ i3 mol irritant high -dkNH@JAIgeUzjjj`@ i3 mol irritant high -dkNL@BB]RYyVZjjjh@@ i3 mol irritant high -dkO@@@Y\dbJRRTjjjj@@ i3 mol irritant high -dk\@`@BDifUWGUN`@@@@@ i3 mol irritant high -dk\D@@QIenf^WSZjjjh@@ i3 mol irritant high -dk\D@@SHihheDQgSZjjjh@@ i3 mol irritant high -dk\H@@RYeg]itvi``D@@ i3 mol irritant high -dk\H@@RYeg]itxH@@@@@ i3 mol irritant high -dk\H@@RYm[Watv`@@@@@ i3 mol irritant high -dk\H@@RfU{WatzB@@@@@ i3 mol irritant high -dk\H@@rJJZIQDYtv`@@@@@ i3 mol irritant high -dk\H`ABHRYVvvftx@Jjb@@ i3 mol irritant high -dk]@pLh@a@c`aIegmRkSZj`@P@@ i3 mol irritant high -dk]H@DHDfYyWImMjhHA@@ i3 mol irritant high -dk]LbLjDd@birRPqSIYntuj`PH@@ i3 mol irritant high -dk^@@@RfYU\]Tzjjjj@@ i3 mol irritant high -dk^D@DBTfYYwimMjdDB@@ i3 mol irritant high -dk^D@DBTfY[W[mNfhHB@@ i3 mol irritant high -dk^HPNHJrXaIf^UvGS``B@@@@ i3 mol irritant high -dk^LpB[a@HpHkprQPjSIILPjjZjj@@ i3 mol irritant high -dkl@`@SLddTlTUgZhBH`@@ i3 mol irritant high -dklB@@Q]RY[WoaZjjZ`@ i3 mol irritant high -dklD@@QIeUY]Mjjjj@@ i3 mol irritant high -dklD@@QIe]URijjjj@@ i3 mol irritant high -dklD@@QIgfU}MjhD@@@ i3 mol irritant high -dklD@@QIgge]Mjj@@@@ i3 mol irritant high -dklD@@QInUvnEh@Jh@@ i3 mol irritant high -dklD@@SHhdhTdjYjjjj@@ i3 mol irritant high -dklD@@eJ[Vvfz`@jh@@ i3 mol irritant high -dklD@@qJ[[m]Njj@@@@ i3 mol irritant high -dklDB@QNR[V[WSZj`@@@ i3 mol irritant high -dklDpLHHbOA@aIkVuVzZjjj@@ i3 mol irritant high -dklH@@RYeZUn`HJj@@ i3 mol irritant high -dklH@@RZWyWSjj`@@@ i3 mol irritant high -dklH@@ReYUfSj``h@@ i3 mol irritant high -dklL@@STf^UvFVh@J`@@ i3 mol irritant high -dklL`AtpbDfUoVih@Ji`@@ i3 mol irritant high -dklLpDppbHBMbLbdLRTtEYX@bP@@ i3 mol irritant high -dkmB@hTDtxeNVS{HihhdUAehBBX@@ i3 mol irritant high -dkmD@DTCRUfWtYV@`e@@ i3 mol irritant high -dkmD@DdCrIJJIPxUV@bE@@ i3 mol irritant high -dknB`NaLt@cIIKEEeiUZB@h@@ i3 mol irritant high -dknD@LCTeYeUTzjBB@@@ i3 mol irritant high -dknD`Ca@BLddLRRVgUhDHpHZ@ i3 mol irritant high -dknD`LIPBDiZuYdzzjfh@@ i3 mol irritant high -dknLPASBBH`HrJPjJKI]ehHB@@ i3 mol irritant high -dknL`LaA@HrRPjIKY]VdDB@@ i3 mol irritant high -dmL@@DjYYVgeBHhb@@ i3 mol irritant high -dmL@@DjYeVdUjjjj@@ i3 mol irritant high -dmLD@@QIe[VfeVj@B@@ i3 mol irritant high -dmLD@@yJY~WJeZYijP@ i3 mol irritant high -dmLH@@RYVuiiV@@@@@@ i3 mol irritant high -dmLH@@RYVuiiVjjjh@@ i3 mol irritant high -dmLH@@RYegXYVhH``@@ i3 mol irritant high -dmLH@@RYiYKnUjjjh@@ i3 mol irritant high -dmLH@@RYiYKnVjjjh@@ i3 mol irritant high -dmLH@@RfYUxYVjifh@@ i3 mol irritant high -dmLH@@RfYUxYVjjjh@@ i3 mol irritant high -dmLH@@rJJIQEneX@@@@@ i3 mol irritant high -dmN@@@RYVuiiVj`@`@@ i3 mol irritant high -dmN@@@ReZ}IiVjjZh@@ i3 mol irritant high -dmN@@@rQQJKFnFP@@H@@ i3 mol irritant high -dmN@@@rQQQQVneP@`@@@ i3 mol irritant high -dmN@`J@HrQQQH{JFZA`J@@ i3 mol irritant high -dmN@`JADrQQQH{JFZA`J@@ i3 mol irritant high -dmNH@BAIfUmiEX@@@@@ i3 mol irritant high -dmN``DkaT@aIefUneVjVjP@ i3 mol irritant high -dmO@@@SdfVUrjUZ`PH@@ i3 mol irritant high -dmT@D@dDdLdJdFdAdIdEdLbdLadjjj`@ i3 mol irritant high -dmT@D@kDdLdJdFdAdIdEdLbdLadjjj`@ i3 mol irritant high -dmT@p@bBBEbDeYyzjjh@@ i3 mol irritant high -dmTB@@RiRYyVZje`@ i3 mol irritant high -dmTB@@SiRYyvZji`@ i3 mol irritant high -dmTB`HSBCpRjuUZjj`@ i3 mol irritant high -dmTB`NFU@HReUfjjY`@ i3 mol irritant high -dmTD@@QIUUUjjj@@ i3 mol irritant high -dmTD@@QIeUyjjj@@ i3 mol irritant high -dmTD@@QIgUUjjj@@ i3 mol irritant high -dmTD@@QImUUjjj@@ i3 mol irritant high -dmTD@@iJU]Vjjj@@ i3 mol irritant high -dmTH@@RUUUYjj`aH i3 mol irritant high -dmTH@@RUgVYjf`aD i3 mol irritant high -dmTH@@RUgVijf`aD i3 mol irritant high -dmTH@@RUgVijf`aH i3 mol irritant high -dmTH@@RVUWjjj`@ i3 mol irritant high -dmTH@@RZWvjjj`@ i3 mol irritant high -dmTH@@rJQEJJjje@@ i3 mol irritant high -dmUH@JXDiUYjjjh@@ i3 mol irritant high -dmV@@@RUUUjjj`@ i3 mol irritant high -dmV@@@ReUUjjj`@ i3 mol irritant high -dmV@@@RfWYjjj`@ i3 mol irritant high -dmVD@DAdfUufijh@@ i3 mol irritant high -dmVD@LA\bRbdUjjj`@ i3 mol irritant high -dmVL@IAARYW[Zff`@ i3 mol irritant high -dmWH`DphCpRjyfZjj`@ i3 mol irritant high -dmt@@LdbRdSjP`jH@@ i3 mol irritant high -dmt@H@qAdIdEdDfYVfz@`j@@ i3 mol irritant high -dmt@H@qAdIdEdLbbRadih@Jh@@ i3 mol irritant high -dmtB@@RUR[e^[fjjZ@@ i3 mol irritant high -dmtD@@IIf]yn``J`@@ i3 mol irritant high -dmtD@@QIe]TjZjjh@@ i3 mol irritant high -dmtD@@QIem\YZ`@`@@ i3 mol irritant high -dmtD@@QIgYVUZh@@@@ i3 mol irritant high -dmtD@@QImYVUZX@@Hr@ i3 mol irritant high -dmtD@@UIfuwaZ@B`@@ i3 mol irritant high -dmtD@@aJye[ahBB`@@ i3 mol irritant high -dmtD@@qJ[[VUjh@@@@ i3 mol irritant high -dmtD@@yJUe^Uj``@@@ i3 mol irritant high -dmtDPAdHc`aIe]jf`@e`@@ i3 mol irritant high -dmtD`JTHaIYe_ihHHP@@ i3 mol irritant high -dmtD`LTHaI[e\Yi`@`@@ i3 mol irritant high -dmtD`LxLQI[f^Ui``@@@ i3 mol irritant high -dmtD`NTHaIe]Vf`@j`@@ i3 mol irritant high -dmtDpDpHb@aXcHiCDeafV@B@@ i3 mol irritant high -dmtH@@RUfueVZ@@BD` i3 mol irritant high -dmtH@@RVUv[j@Bh@@ i3 mol irritant high -dmtH@@RYYf[ffjj@@ i3 mol irritant high -dmtH@@RYeZ[hBBh@@ i3 mol irritant high -dmtH@@RYeeZVfjj@@ i3 mol irritant high -dmtH@@RYeeZVjjj@@ i3 mol irritant high -dmtH@@RYeeZZjjj@@ i3 mol irritant high -dmtH@@RYe~[ffjZ@@ i3 mol irritant high -dmtH@@Rfuu[j@BXBAP i3 mol irritant high -dmtH@@rJJIHhfZZjh@@ i3 mol irritant high -dmtH@@rJJIJEn`HJ`@@ i3 mol irritant high -dmtH@@rJQPiXYjjjh@@ i3 mol irritant high -dmtH@@rJQQHxYjjih@@ i3 mol irritant high -dmtHpEBHZHfHrJIJHrn`BJP@@ i3 mol irritant high -dmtL@@PdfueYUj`@@@ i3 mol irritant high -dmtL@@YTf[gqehHB@@ i3 mol irritant high -dmtL@@hTef^~e``b@@ i3 mol irritant high -dmu@`ATIAIe[^n`BNp@@ i3 mol irritant high -dmuDPHhfBHFHRYf~kjfZj@@ i3 mol irritant high -dmuDPHhfCDFHRYf~kjfZj@@ i3 mol irritant high -dmuH@DTDf^Uqej@B@@ i3 mol irritant high -dmuH@DdDf^UaUj@H@@ i3 mol irritant high -dmuLAHTDZISdfygQehHB@@ i3 mol irritant high -dmv@@@RVUv[n@Bh@@ i3 mol irritant high -dmv@@@RfUWzZjjj@@ i3 mol irritant high -dmv@@@rQQJEJUjh@@@@ i3 mol irritant high -dmvD@BADfueYUjjj`@ i3 mol irritant high -dmvD@DCdf^YyUjB@@@ i3 mol irritant high -dmvD@NADfVyyUjB@@@ i3 mol irritant high -dmvD`La@BLddlTReUhB@@@ i3 mol irritant high -dmvH@BAIVUwaj@B`@@ i3 mol irritant high -dmvH@EAIeYfnZZjx@@ i3 mol irritant high -dmvH@HAIffgejjjh@@ i3 mol irritant high -dmvH@JAJUuTjjjjh@@ i3 mol irritant high -dmvH@LAIUfVUj`H@@@ i3 mol irritant high -dmvL@EAFR[f_FV``H@@ i3 mol irritant high -dmvL@FAIR[ev[fjjZ@@ i3 mol irritant high -dmwLPHkbYPbAbLbbbfezZfZf@@ i3 mol irritant high -dndD`LH@aJZ\hjijjj`@ i3 mol irritant high -do\B`HRUALrRQIIIHjjjej`@ i3 mol irritant high -do\D@@QIe]UUZfjjh@@ i3 mol irritant high -do\D@@QIe]UVZfjjh@@ i3 mol irritant high -do\D@@SHhdddhbfjjjj@@ i3 mol irritant high -do\F@@Savtf^UVYjjjY`@ i3 mol irritant high -do\J@@PYWHheDhbdfjYjj@@ i3 mol irritant high -do\J@@QiuIe[YoZfifT@@ i3 mol irritant high -do\L@@ptimyujjjjj`@ i3 mol irritant high -do\L@@rTie]mVjjjj`@ i3 mol irritant high -do^@`L@HReuUUZzjjj@@ i3 mol irritant high -do^J@JAIW\bbTRTtqZjifh@@ i3 mol irritant high -do|B@@RgrJYIQQIGSZZ@`hBL` i3 mol irritant high -do|BHDrwBH`HzHNHrJPqQYIRUe``JX@@ i3 mol irritant high -do|D@@QIeUyemvij@`@`h i3 mol irritant high -do|D@@QIe[e~WVjijf`@ i3 mol irritant high -do|D@@QIgfUYuvj``h@@ i3 mol irritant high -do|D@@QImYeeVvjjjj`@ i3 mol irritant high -do|D@@SHhmHbhdk]jjh@@@@ i3 mol irritant high -do|D@@qJY]YWmzjjB@@@ i3 mol irritant high -do|DpElH`hbXcHhhidbeFFBBJj`@@ i3 mol irritant high -do|H@@RV^UviUj`@j`@@ i3 mol irritant high -do|H@@RYfV{vF@bJj`@@ i3 mol irritant high -do|H`EBHRYWUnjZ@Bij`@@ i3 mol irritant high -do}@DDhJs``YBYAY@yByAyCHheEiEYBjfjjjd@@ i3 mol irritant high -do~@@@RfUYw~V``hj`@@ i3 mol irritant high -do~@@@RfUYw~Vjjjjh@@ i3 mol irritant high -do~B@GAEoHheDdhbiMjBBb`@@ i3 mol irritant high -do~BpIx[\H``cXcHhheHe]FVBAXi`@@ i3 mol irritant high -do~D@AADfUvUwSZf`@h@@ i3 mol irritant high -do~D@LALbbTTJTLWVj`@j@@ i3 mol irritant high -do~H@DAIVYenEU`Hbj@@ i3 mol irritant high -do~L@DA]rJJKIJHhfZjjZj@@ i3 mol irritant high -eFA@HoBJ@ i3 mol irritant high -eFABHiBL@ i3 mol irritant high -eFABPiBL@ i3 mol irritant high -eFACDlRL@ i3 mol irritant high -eFBBHc@@ i3 mol irritant high -eFBBlc@@ i3 mol irritant high -eFHBJ@ i3 mol irritant high -eFHBL@ i3 mol irritant high -eFJBhHh@ i3 mol irritant high -eFJHbHh@ i3 mol irritant high -eF`BL@ i3 mol irritant high -eF`BN@ i3 mol irritant high -eMB@HRZ@ i3 mol irritant high -eMB@Hch@ i3 mol irritant high -eMCAD`aBHu@ i3 mol irritant high -eMFI@bMP@ i3 mol irritant high -eMHAIX@ i3 mol irritant high -eMHAIh@ i3 mol irritant high -eMLRRWhv@ i3 mol irritant high -eM`AId@ i3 mol irritant high -eM`AIh@ i3 mol irritant high -eM`AIx@ i3 mol irritant high -eM`BN`@ i3 mol irritant high -eMhDRV@ i3 mol irritant high -eOB@Hcfh@ i3 mol irritant high -eOHBNZ`@ i3 mol irritant high -eO`BNZ`@ i3 mol irritant high -fHbd@@ i3 mol irritant high -fHcp@@ i3 mol irritant high -fHdP@@ i3 mol irritant high -fHd`@@ i3 mol irritant high -fHdp@@ i3 mol irritant high -f`a@`@@FrJIJQQNKTXuUUTu@@@ i3 mol irritant high -f`a@`@@HrJIJQJqIN|uUU@@@@@ i3 mol irritant high -f`a@`D@HQvQSRIIFIIwfjjh@@@@ i3 mol irritant high -f`aA@@@ILjjjj{sUUUUT@@ i3 mol irritant high -f`aA@@@ILsKWRpTADUUP@@ i3 mol irritant high -f`aA@@@YEEDcEEHc^ZZjZj`Pq@ i3 mol irritant high -f`aA@@@YEEDdTddf\`HJjj@@@ i3 mol irritant high -f`aA@@@YEEEETddfB`Hbjj@@@ i3 mol irritant high -f`aA`@@HqdTRTTbUrMYj`j@d@@ i3 mol irritant high -f`i@A@@AG@cIEEEDedkSdcZ]PA@AE@@@ i3 mol irritant high -f`i@a@FRAD^bDfUm[WirRkN`BJ@BH@@ i3 mol irritant high -f`iA@@@ILrmtvQcAV|uUUUUT@@ i3 mol irritant high -f`iA@@@YEEEEDhdYFTzwf`@``H@@@ i3 mol irritant high -f`iA@@@YHhedhh]HHUhujjjZjj`@@ i3 mol irritant high -f`iA@@@YHhhdXdhhHehujjjZjj`@@ i3 mol irritant high -f`iPB@N^@DYHhhhdldZ\d[Sj@H@Hx@@@ i3 mol irritant high -f`iQA@B\|@HpDISLzsnRdcN}TaAQUD@@ i3 mol irritant high -f`q@B@@^BULrjkj\[uPA@D@@@@ i3 mol irritant high -f`q@`@@^RVYYywbkNXH@BA@@@ i3 mol irritant high -f`qA`@@B|dsLrozkF\t@P@D@@@ i3 mol irritant high -f`qA`@@H\drsJkrkF|u@@@P@@@ i3 mol irritant high -f`qA`@@HidTRbRQbREIwfjZh@D@@ i3 mol irritant high -f`qPA@AZ@DPBLdRbbbTVJgV}T@PP@@@@ i3 mol irritant high -f`qPHAHV@cGIF]zDxzt~{HhmEDdThJRmMUUUST@@ i3 mol irritant high -f`qPQ@INxJw`QA@cHhheHeUDqQgPPKELd@@ i3 mol irritant high -f`qPaABLEh@Q@HIKIEvnrQJJJIQXj][uPAA@@@@@ i3 mol irritant high -f`qPb@EZ]xDQdRTRTraTxIVj`@iib@@ i3 mol irritant high -f`qa@@D@rJJJJIZHjl{sUTEDD@@@ i3 mol irritant high -f`qa@@D@rJJJJJFHjl{sULEDD@@@ i3 mol irritant high -f`qp@@@Hpds\rj~gV|uP@@@@@@ i3 mol irritant high -f`y@@@LdbbbbbfkEBMIuo@@@@@@@@@ i3 mol irritant high -f`~@@@DiUUUUjjjjj@@ i3 mol irritant high -f`~@H@@Hdhug^rJZJIQJFMUTts@@@ i3 mol irritant high -f`~@P@@Ht[HhdhbeLhuUUMT@@ i3 mol irritant high -f`~@P@@HuYIe]UVvijjfP@@ i3 mol irritant high -f`~@`@@BrQQIIQSVUUUUU@@@ i3 mol irritant high -f`~@`@@HRYuUUUjjjjh@@ i3 mol irritant high -f`~@`@@HR[UUUUjjjjh@@ i3 mol irritant high -f`~A@@@YEDeEDcEJjjjj`@@ i3 mol irritant high -f`~Ab@@Dhb`rQJJIEJJUUUUU@@@ i3 mol irritant high -f`~Ab@@TXb`RfYwf^jjjjh@@ i3 mol irritant high -f`~aK@JPQaVcV]xG`KpexYIIUDeHiFjjff`@@ i3 mol irritant high -f`~a`BH@QbDxyIgUUUVjjjj`@@ i3 mol irritant high -f`~ab@IPQ`G`eUnoLsUUUUP@@ i3 mol irritant high -fbe@B@@QBSLjojjheUAAEUUP@@ i3 mol irritant high -fbeAP@@Hu[rSKJkK~lcMPPTUUP@@ i3 mol irritant high -fbea`@D@XgHhhdddcDedFKUUUP@T@@@ i3 mol irritant high -fbm@A@@IdIAJkfYUU|tWICfj@@@@@@@@ i3 mol irritant high -fbmAB@H@SDjnYeUWsQ\dNZh@@@@@@@@ i3 mol irritant high -fbmAB@H@SDjnYeUWsQ\dNZhJhJhhh@@ i3 mol irritant high -fbmAB@H@SDjnYeUWsQ\dNZjjjjjjh@@ i3 mol irritant high -fbmA`@@HsdTRfbTbtjRejshiZjjj`@j@@@ i3 mol irritant high -fbmPa@LN``@QhHrRPqPiSISIJL{r\kU@DT@A@@@ i3 mol irritant high -fbmp@@@XXeLLjsobe`iruUPP@@P@@@ i3 mol irritant high -fbu@AP@QAHadPJHeDZbGQ@XaLQfHrJJJ[PrZJ[TyzMLuUULuP@@ i3 mol irritant high -fbu`q@OPQbJ\`B@aFRRVIJYJYZPTcVV`@@Je`@@ i3 mol irritant high -fbua@@M@rJQEJKJJIKNBgMUUSTBA@HR` i3 mol irritant high -fby@`@@HRYuUUUUZjjjjj`@@ i3 mol irritant high -fby@`@@HR[UUUUUZjjffj`HTv` i3 mol irritant high -fby@`@@HR[UUUUUZjjfjj`PT` i3 mol irritant high -fby@`@@HR[UUUUUZjjjjj`@@ i3 mol irritant high -fbyAb@HHpCpRkUYeU}Zjjjjj`@@ i3 mol irritant high -fbyP`@LR@aIemUUUujjjjjj@@ i3 mol irritant high -fbya@@D@rJJIIIHiIIMUUUUUP@@ i3 mol irritant high -fbya`@D@UkHhhdddbddduUUUUU@@@ i3 mol irritant high -fb}@P@@H]gHheDheEeD\jugQRgKUUUUUUU@@@ i3 mol irritant high -fb}AA@K@qLxbSLl|}z{ARtYtTp@@QL@P@@@ i3 mol irritant high -fde@@`@QAHa`QhHrJJJZIKPi\EjpXpQAU@@P@@ i3 mol irritant high -fde@`@@HrIJQQZQXiRljw`mUUUUUT@@ i3 mol irritant high -fde@``ARADDb@qDXaIf]UUUYqVg^``Jh@h@@@ i3 mol irritant high -fdeP`@DNA[HhhhlmMCDRbc^BuPPPuTP@@ i3 mol irritant high -fdea@@H`rQQQIRIZHbmHq`tEAUETT@@ i3 mol irritant high -fdi@`@@BrQQIJHyII\UPPTUUP@@ i3 mol irritant high -fdi@`@@HRYUUUUPqZjjjjj@@ i3 mol irritant high -fdi@`D@HQrS\jjrnFKUTuA@@H\` i3 mol irritant high -fdiA@@@ILjjjjhXmUUUUT`aE@ i3 mol irritant high -fdiA`@@BCdbbRTTbWTxjjjjjjh@@ i3 mol irritant high -fdiA`@@HLdrjjjjabuUUUUT@@ i3 mol irritant high -fdiA`@@H\drjjjjabuUUUUT@@ i3 mol irritant high -fdiP`@DVAGHdiEBeCHbkRuP@UR`@@ i3 mol irritant high -fdiXpCHLDXLPHUiwhRcfRJ]]{lbfbbbbbblkMADMCT@@@ i3 mol irritant high -fdi``DF@Pcdfye_UTRf``ajj@PU@ i3 mol irritant high -fdia@@D@RYguUURLZjjjjj@@ i3 mol irritant high -fdiaB@JDAbYEEEIkHhT`qjZjj@@@@ i3 mol irritant high -fdiaPBH@QYwhRclbfbbRLTTpiM@PKLt@@@ i3 mol irritant high -fdq@P@@H]yIeWUUmZjjjfh@@ i3 mol irritant high -fdq@`@@HRYWUUUVijjjj@@ i3 mol irritant high -fdq@`@@HR[UUUUVjjjjj@@ i3 mol irritant high -fdqAa@HRTALhDYIHddiDeTjjjVjj@@ i3 mol irritant high -fdq`@@@ITnjjjmUUUUU@@@ i3 mol irritant high -fduA@@@ILsLjm{AJ\XOhm@@@@A@@@@ i3 mol irritant high -fdy@`@@XrQQSPzIKJXiYuUUP@UP@@ i3 mol irritant high -fdyA@@@IKLjoSWAF|pDEUUQ@@@ i3 mol irritant high -fdyA@`I@bBQGhbLQdTTVVfbRaYqpXHBh@b@@@ i3 mol irritant high -fdyAB`M@qBXcLPVHkDRYf{}e^RCFBHbh@@@@ i3 mol irritant high -fdyAP@@BUhNQQQQQQDqIdgAZYjZZj`@@ i3 mol irritant high -fdyAP@@BtFNQQQQQJKGISk^Z@HH@h@@@ i3 mol irritant high -fdyA`@@BudbbRTQrbRxhLZBBb`@@@@ i3 mol irritant high -fdyAb@FAb@HrQQJVIKJJDihuRl@ESP@@ i3 mol irritant high -fdyPPBHZ@aShRcdfyVyuwdmFZ@HZfh`@@ i3 mol irritant high -fdyP`@KN@cHihdliEDcpPXm@AUMTP@@ i3 mol irritant high -fdy`R@KPQcp@cIIKDeLeBdJQgKP@@QT@@@ i3 mol irritant high -fdy``@A@PdrrrZjLFKTEA@@@@@ i3 mol irritant high -fdya@@D@rJJIIHiQIBTFKUUUP@P@@ i3 mol irritant high -fdya@@D@rJJJIGIQIRTFKUUUP@P@@ i3 mol irritant high -fgA@B@@XbSLrjyFRMjuP@@A@@@ i3 mol irritant high -fgAP@B@BAHirRJIJHkLUpQkAPP@A@@@ i3 mol irritant high -fha@B@@IbURjjjmUUUUT@@ i3 mol irritant high -fha@P@@HiKHhmDeDTdfjjZjh@@ i3 mol irritant high -fha@R@HHehBYddbRRbbSUUULuT@@ i3 mol irritant high -fha@R@HHpPG`eUjjsLuUUUU@@@ i3 mol irritant high -fha@`@@HrJYQZQHiQjjjZZ@@ i3 mol irritant high -fha@p@@HhkQdfV^yuVijVjhDAP i3 mol irritant high -fhaAP@@HEirSJwkO[TuUTr@@ i3 mol irritant high -fhaAp@@HYqV`iLkWl{mSUSSP@@ i3 mol irritant high -fhaAr@HHpSQk@|DjmUUUVjjjjh@@ i3 mol irritant high -fha`@@@IRlrj~uUUUUP@@ i3 mol irritant high -fha`B@B@bDeUUUUYjjjjhDHP i3 mol irritant high -fhah@@@\ExJTjjjjmUUUUT@@ i3 mol irritant high -fhi@R@NJmx@QdbbbbTVadgFCPAAAD@@@ i3 mol irritant high -fhi@a@AFADAbDfUmygZL]z@BhHB@@@ i3 mol irritant high -fhi@a@OAADBBLbTTRbfQtyiUj@B@bX@@@ i3 mol irritant high -fhi@b@HH@DYIHXhhddSiuoKP@P@P@@@ i3 mol irritant high -fhi@c@BFADRb@qFQQQIIPq[LD{tDDPPD@@@ i3 mol irritant high -fhiA@@@ISLwZkf|xMUP@@@@@@ i3 mol irritant high -fhiA@@@YEEDhdcLeKW`m@dP@@@aR@ i3 mol irritant high -fhiAP@@PIqRTmMJ{yoNCUUUUUT@@ i3 mol irritant high -fhiA`@@HBdwLl|zKSoMA@@PP@@@ i3 mol irritant high -fhiIP@DXxHDc^CdTRbfaTVUNZltuUUUL@@ i3 mol irritant high -fhiP@@@ArJJIEJIJYgKN`HJ@B`@@ i3 mol irritant high -fhiPA@B\@DXBDif]YybTdZiBBbj`@@ i3 mol irritant high -fhiPC@IF@|PBDAFRIJJJIQXz|xMT@PP@@@@ i3 mol irritant high -fhiQ`BHL@`LIQrS\roZxeN|tDD@A@@@ i3 mol irritant high -fhiQaBOAQbpHb@QzP}dTabbTVeTmF]K@QBrd@@ i3 mol irritant high -fhi`@@@ISLwZkf|xMUP@@@@@@ i3 mol irritant high -fhia@BH@AtIRYeV]WEjwjP`@BH@PP` i3 mol irritant high -fhiqP@DXxBQoArJIQSPjKJ`mVZZjjjf@@ i3 mol irritant high -fhqA@@@ILkKjj~BuUUUUP@@ i3 mol irritant high -fhqA@@@YEEDhbdddsdAAUUT@@@ i3 mol irritant high -fhqP`@DD@YIeYU_UQfjjjjj@@ i3 mol irritant high -fhqh`@NFmxHJYHihhdkLhIUADQML@@@ i3 mol irritant high -fhyA@@@YHiMEiEbdHtcN}UUUUUU@@@ i3 mol irritant high -fhyA`@@BMdTTTTTTVoMJ|xKPAAPA@@@ i3 mol irritant high -fhyq@@B\DAIfV]UudeZ|FBBaZeJ@@ i3 mol irritant high -fle@`@@LRfVVW]|QgAhJ@HBF@D@p i3 mol irritant high -fleA@@@ILwJkttJU`m@PUUUD@@ i3 mol irritant high -fleA`@@HbdssLjoyoNBuT@@@T@@@ i3 mol irritant high -fleP`@DA@eIVUue]^B]yX@J@BT@@@ i3 mol irritant high -fleP`@DA@eIVUue]^B]yZjjjjV`@@ i3 mol irritant high -flea@@D@RYeUmU|RgAZjjBBJ`@@ i3 mol irritant high -fleac@FV|DD`RPEHYEEEMDbeierVcPQDTluD@@ i3 mol irritant high -fleiR@AZlFLDXhdGaddeRRbbRtQk^BuUURmSP@@ i3 mol irritant high -fli@@@LdbVRRbbjTjjjjjj@@ i3 mol irritant high -fli@RBKN|DBX{`|eTjjkLmUUUSMP@@ i3 mol irritant high -fli@`@@HrJIJHiIIIIjjjjjh@@ i3 mol irritant high -fli@`@@HrJKRIEJKIQjjZZihDEH i3 mol irritant high -fliAb@@Dhb`ReeUU]Vjjjjjh@@ i3 mol irritant high -fli`@@@IJjjjjkUUUUUT@@ i3 mol irritant high -fli`@@@IJjjjjkuUUUUT@@ i3 mol irritant high -flmA@@@YEEEEDeDTbrRgF}EKPLQTKTR@@ i3 mol irritant high -flmAB@K@qDfYYy{uXJVcNbf@@BI`@@@@ i3 mol irritant high -flu@B@@^BULsJjozCZOdu@@@@@@@@@ i3 mol irritant high -flu@B@LTBUJssZktDzHTaAP@@@@@@@ i3 mol irritant high -flu@`@@HrJKRJKRKEISmNCEjjjjjjh@@ i3 mol irritant high -fluP@@@ArQQQQII[ERdmNmxH@@@Bh@@@ i3 mol irritant high -fluh`@DXUipAYEEEELTdedrVcN|uUMSURt@@ i3 mol irritant high -fluqB@AJMDFHdrmrlzmNZ\EL@PuA@a@@@ i3 mol irritant high -fly@PB@HbeGI{HiiBddddeBTZjjjjf`@@ i3 mol irritant high -fly@`@@XrQQISHqIYQwjjjh@J`@@ i3 mol irritant high -flyAP@@DExNQQQPkIIJYTXtuMUSU@@@ i3 mol irritant high -flyPa@L^bdDQjHrIJJIIHiSQQjjBBJi`@@ i3 mol irritant high -fly`P`LHEIpH`LaFPSHYEMEEDlbeIjtu@pQUP@@ i3 mol irritant high -flya@@D@rJJIIIHiIIVfjjjjjh@@ i3 mol irritant high -flya@@H@RV[WUUTTih@Jjj`DHH i3 mol irritant high -flyaR@IBlzJPUfQQIYSJJHjTY@AMTuL@@@ i3 mol irritant high -foA@@@LdbbQbRbDkQfjijjh@@ i3 mol irritant high -foA@@@LdfbTrbUipufjjjfhDCH i3 mol irritant high -foA@P@@Ht[HheMEEEQJeYjjjZi@@ i3 mol irritant high -foA@R@HHqp@QddebbfRtmV\mA@@@@@@ i3 mol irritant high -foA@`@@NrQQQIISDVeVh@@BH@@@ i3 mol irritant high -foA@`@@VRfUYu^JLz``@B@@@ i3 mol irritant high -foA@`@@\RVUoeVBly`BH@@@@ i3 mol irritant high -foA@b@KN@DISLjohmJMP@@AP@@@ i3 mol irritant high -foAA@@@IRlrjzkF]U@@@@@@@ i3 mol irritant high -foAI@BDDXhCIUNQQQSQIHdyYsURE@P@@ i3 mol irritant high -foAP@@@NRYWVUzLMZ@B`@`@@ i3 mol irritant high -foAP@@@NRYWVUzLMZjjjjj@@ i3 mol irritant high -foAPPBHZ@aShRcdfyVywdmFZ@HZd`@@ i3 mol irritant high -foAQC@DL\BHiDVbLbbTTJRtYqVhB@@i@@@ i3 mol irritant high -foA`P@L@IrRRllrkhugLuSMThHHP i3 mol irritant high -foA``@D@ydTRbTLRIFFluR`PT@@@ i3 mol irritant high -foA``@L@QdTVbbbblmV\u@A@@@@@ i3 mol irritant high -foA`b@LTX@HRe{VYSVlznZjjZ@@ i3 mol irritant high -foAa@@A@RfuueV\lz`@jjb@@ i3 mol irritant high -foAab@KPQ`@QddebRfR`iF\m@@A@@@@ i3 mol irritant high -foAab@NPQ`@QddebbfRtmV\mA@@@@@@ i3 mol irritant high -foAqB@JLDPDQdTTTtlRWAV]RuT@B@@@ i3 mol irritant high -foQ@@@LdbTrdrLYs`cVZjjjjh@@ i3 mol irritant high -foQ@`@@HRYVvvQRuXsfiZjjY@@ i3 mol irritant high -foQ@`@@HrJIQJKPjReFlyjjjij`@@ i3 mol irritant high -foQ`@@@YHhhheDbKTkF]P@PPD@@@ i3 mol irritant high -foQa@@N@rQQQQJKGbiVLz`BB@D@@@ i3 mol irritant high -gC`D@DPHRfh@ i3 mol irritant high -gC`DADZHRVXRP i3 mol irritant high -gC`DADZHRVh@ i3 mol irritant high -gC`H@DIKT@@ i3 mol irritant high -gC`HADIKLIH i3 mol irritant high -gC`HADIKR@@ i3 mol irritant high -gC``@dfZ@@ i3 mol irritant high -gC``AdeY@@ i3 mol irritant high -gC``Adej@@ i3 mol irritant high -gCa@@dkH@ i3 mol irritant high -gCa@@dkP@ i3 mol irritant high -gCa@@dmH@ i3 mol irritant high -gCa@@dmP@ i3 mol irritant high -gCa@@dsP@ i3 mol irritant high -gCa@@duP@ i3 mol irritant high -gCaHH@bNt@@ i3 mol irritant high -gCaHL@aIZ`@ i3 mol irritant high -gCaHLHaIZ`@ i3 mol irritant high -gCah@mJAIj`@ i3 mol irritant high -gCd@Adej@@ i3 mol irritant high -gCe@E`dsP@ i3 mol irritant high -gCh@@dmH@ i3 mol irritant high -gCh@@dmP@ i3 mol irritant high -gCh@@doH@ i3 mol irritant high -gCh@@doP@ i3 mol irritant high -gCh@@duP@ i3 mol irritant high -gChHD@aIU`@ i3 mol irritant high -gChHLHaIZp@ i3 mol irritant high -gCh`LDdsP@ i3 mol irritant high -gCi@DDeV@@ i3 mol irritant high -gCi@DDeZ@@ i3 mol irritant high -gCi@LDej@@ i3 mol irritant high -gFp@DiTt@@@ i3 mol irritant high -gFp@DiTvjh@ i3 mol irritant high -gFpHADILimSP@ i3 mol irritant high -gFpL@DXHHPeJfuU@@ i3 mol irritant high -gFp`@dfTujh@ i3 mol irritant high -gFp`@df_Ejh@ i3 mol irritant high -gFp`AdigVjh@ i3 mol irritant high -gFq@@drfmU@@ i3 mol irritant high -gFq@@drftm@@ i3 mol irritant high -gFq@@drfuM@@ i3 mol irritant high -gFq@@eLzts@@ i3 mol irritant high -gFq@@eLzuU@@ i3 mol irritant high -gFqHJ@aJUMjj@@ i3 mol irritant high -gFt@ATiTvjh@ i3 mol irritant high -gFtHE`DILikUP@ i3 mol irritant high -gFx@@eJf`@@@ i3 mol irritant high -gFx@@eJfuU@@ i3 mol irritant high -gFy@JDiTvjh@ i3 mol irritant high -gFy@LDiWFjh@ i3 mol irritant high -gGP@DiVV`iJ@ i3 mol irritant high -gGP@DiVj`@ i3 mol irritant high -gGPBADJPtaXcHiCUP@ i3 mol irritant high -gGPD@DPHReZj@@ i3 mol irritant high -gGPDADFHRYjY@@ i3 mol irritant high -gGPLADFHlPdrsTID i3 mol irritant high -gGPLADFHlPdruT@@ i3 mol irritant high -gGPLAbGDlPdruT@@ i3 mol irritant high -gGPP@cTfyi`@ i3 mol irritant high -gGP`@TfYi`@ i3 mol irritant high -gGP`@TfYj`@ i3 mol irritant high -gGP`@dfUjP@ i3 mol irritant high -gGP`@dfUj`@ i3 mol irritant high -gGP`@df]jP@ i3 mol irritant high -gGP`@dfuiaM@ i3 mol irritant high -gGP`@dfuj`@ i3 mol irritant high -gGP`@dfyj`@ i3 mol irritant high -gGP`ADkjj`@ i3 mol irritant high -gGP`ATeVj`@ i3 mol irritant high -gGP`ATeej`@ i3 mol irritant high -gGP`ATf^j`@ i3 mol irritant high -gGP`ATiVj`@ i3 mol irritant high -gGPhH`DYIHUi@@ i3 mol irritant high -gGPhMQDIK]U@@ i3 mol irritant high -gGPlEaDPHlQdTaeh@ i3 mol irritant high -gGQ@@djuT@@ i3 mol irritant high -gGQ@@dkUT@@ i3 mol irritant high -gGQ@@dlmT@@ i3 mol irritant high -gGQ@@drmT@@ i3 mol irritant high -gGQ@@druT@@ i3 mol irritant high -gGQ@@dsML@@ i3 mol irritant high -gGQ@@dsMT@@ i3 mol irritant high -gGQ@@dtuR@@ i3 mol irritant high -gGQ@@eJttHh i3 mol irritant high -gGQDBHbqBSKTp@ i3 mol irritant high -gGQDJH`qBSKUP@ i3 mol irritant high -gGQDJLPxbSKUP@ i3 mol irritant high -gGQDLHbqBRwSP@ i3 mol irritant high -gGQDLHbqBRwUP@ i3 mol irritant high -gGQHDHaInfh@ i3 mol irritant high -gGQHJ@aJUjh@ i3 mol irritant high -gGQHJHaIUjh@ i3 mol irritant high -gGQLJIARFdLbdMU@@ i3 mol irritant high -gGQ`@bdwMT@@ i3 mol irritant high -gGQ`@jdsmR@@ i3 mol irritant high -gGQdEb@bRFRRVV`@ i3 mol irritant high -gGQh@ZjAJVjh@ i3 mol irritant high -gGT@Ade[j`@ i3 mol irritant high -gGT`EPTfyi`@ i3 mol irritant high -gGX@@dj|tHd i3 mol irritant high -gGX@@dkUT@@ i3 mol irritant high -gGX@@dk]L@@ i3 mol irritant high -gGX@@dtuV@@ i3 mol irritant high -gGX@@eNuT@@ i3 mol irritant high -gGXHD@aIUVd@ i3 mol irritant high -gGX`hEIWIMkU@@ i3 mol irritant high -gGXhhZ@bS^Rmjf@@ i3 mol irritant high -gGY@BDeVj`@ i3 mol irritant high -gGY@DDeUZP@ i3 mol irritant high -gGY@DDfYj`@ i3 mol irritant high -gGY@HDefZaH` i3 mol irritant high -gJP@DknX@ i3 mol irritant high -gJPDADFHRYj`@ i3 mol irritant high -gJPDADFHR[f`@ i3 mol irritant high -gJPH@DIJuP@ i3 mol irritant high -gJPH@DIKUP@ i3 mol irritant high -gJPH@DIRuP@ i3 mol irritant high -gJPHADILth@ i3 mol irritant high -gJPXHlPDQzt@@ i3 mol irritant high -gJPXHlPiQzt@@ i3 mol irritant high -gJP`@TeZh@ i3 mol irritant high -gJP`@TfVd@ i3 mol irritant high -gJP`@TfZh@ i3 mol irritant high -gJP`@deVd@ i3 mol irritant high -gJP`@deVh@ i3 mol irritant high -gJP`@dfVh@ i3 mol irritant high -gJP`@dfvd@ i3 mol irritant high -gJP`@dfvh@ i3 mol irritant high -gJP`Adizh@ i3 mol irritant high -gJPdEaDPHRZe`@ i3 mol irritant high -gJQ@@djsBJ@ i3 mol irritant high -gJQ@@dkU@@ i3 mol irritant high -gJQ@@dls@@ i3 mol irritant high -gJQ@@dlu@@ i3 mol irritant high -gJQ@@dmS@@ i3 mol irritant high -gJQ@@drt`@ i3 mol irritant high -gJQ@@dru@@ i3 mol irritant high -gJQ@@dsT`@ i3 mol irritant high -gJQ@@duU@@ i3 mol irritant high -gJQ@@eKS@@ i3 mol irritant high -gJQ@@eKU@@ i3 mol irritant high -gJQHBHaIfj@@ i3 mol irritant high -gJQHBHaInZ@@ i3 mol irritant high -gJQ`@bdvu@@ i3 mol irritant high -gJQhHlOAJmj@@ i3 mol irritant high -gJT@@TeZh@ i3 mol irritant high -gJT@@Te^l@ i3 mol irritant high -gJT`E`TfVh@ i3 mol irritant high -gJU@HPdkU@@ i3 mol irritant high -gJX@@dkU@@ i3 mol irritant high -gJX@@dkt`@ i3 mol irritant high -gJX@@dku@@ i3 mol irritant high -gJX@@dms@@ i3 mol irritant high -gJX@@dmu@@ i3 mol irritant high -gJX@@eKU@@ i3 mol irritant high -gJX`LDdru@@ i3 mol irritant high -gJY@BDeZh@ i3 mol irritant high -gJY@BDeZl@ i3 mol irritant high -gJY@BDizh@ i3 mol irritant high -gJY@DDefh@ i3 mol irritant high -gJY@DDfvd@ i3 mol irritant high -gJY@LDeZh@ i3 mol irritant high -gJYHCabIKTp@ i3 mol irritant high -gJYhCE`DQzt@@ i3 mol irritant high -gKP`Adi\Zj@@ i3 mol irritant high -gKX@@eKcUP@ i3 mol irritant high -gK\@ABeKcMH@ i3 mol irritant high -gNpB@DSppPPaJ[Zj`@ i3 mol irritant high -gNpJAbJHLaYArBS]UU@@ i3 mol irritant high -gNpLADXH\PdjmUP@ i3 mol irritant high -gNpP@jtfvZf@@ i3 mol irritant high -gNp`@TfYZZ@@ i3 mol irritant high -gNp`@dfUZe@@ i3 mol irritant high -gNp`@dfUZf@@ i3 mol irritant high -gNp`@dfUZi@@ i3 mol irritant high -gNp`@dfUZj@@ i3 mol irritant high -gNp`@dfWZfDL@ i3 mol irritant high -gNp`@dfWZj@@ i3 mol irritant high -gNp`@df]Zj@@ i3 mol irritant high -gNp`@df^Zf@@ i3 mol irritant high -gNp`@df^Zj@@ i3 mol irritant high -gNp`@dfvZj@@ i3 mol irritant high -gNp`@tf]jj@@ i3 mol irritant high -gNp`@|bdQjj@@ i3 mol irritant high -gNp`ATf^jj@@ i3 mol irritant high -gNp`ATiUjj@@ i3 mol irritant high -gNp`ATiVjj@@ i3 mol irritant high -gNphDqDYEHcUR@@ i3 mol irritant high -gNphH`DYIHTmJ@@ i3 mol irritant high -gNphJpDIRkUT@@ i3 mol irritant high -gNphJqDIKMTl@@ i3 mol irritant high -gNq@@dlkUP@ i3 mol irritant high -gNq@@dl}MPb` i3 mol irritant high -gNq@@dr{Vpa` i3 mol irritant high -gNq@@dr}Vpa` i3 mol irritant high -gNq@@dsKSP@ i3 mol irritant high -gNq@@eLuUP@ i3 mol irritant high -gNq@AdTbMTpa` i3 mol irritant high -gNq`@fdskUP@ i3 mol irritant high -gNq`@jdrkUP@ i3 mol irritant high -gNq`@jdssTp@ i3 mol irritant high -gNq`AVeJmUP@ i3 mol irritant high -gNq`AbeMmUP@ i3 mol irritant high -gNqhAbjAJyZj`@ i3 mol irritant high -gNr`ijpiJyImfi`@ i3 mol irritant high -gNt@@TeVzj@@ i3 mol irritant high -gNt@@|dbJjj@@ i3 mol irritant high -gNx@@djmUP@ i3 mol irritant high -gNx@@dsuUP@ i3 mol irritant high -gNx@@eJmTh@ i3 mol irritant high -gNx@@eJmUP@ i3 mol irritant high -gNx@@eRmUP@ i3 mol irritant high -gNx@AddQUUP@ i3 mol irritant high -gNxDHHaQBS]UU@@ i3 mol irritant high -gNx`DFdskUP@ i3 mol irritant high -gNx`LFdjmUP@ i3 mol irritant high -gNy@BDf^jj@@ i3 mol irritant high -gNy@DDfYZi@@ i3 mol irritant high -gNy@FDeYjg@@ i3 mol irritant high -gNyHJPDIJwTt@@ i3 mol irritant high -gOp@DjWkB@@@ i3 mol irritant high -gOp@DjWkjj`@ i3 mol irritant high -gOpH@DILkW@@@@ i3 mol irritant high -gOp`@dfUMZj`@ i3 mol irritant high -gOp`@tiguif`@ i3 mol irritant high -gOp`@tigujj`@ i3 mol irritant high -gOp`ATeekZj`@ i3 mol irritant high -gOq@@drm[ST@@ i3 mol irritant high -gOq@@drm[UT@@ i3 mol irritant high -gOq@@drm\@@@@ i3 mol irritant high -gOq@@drm]UT@@ i3 mol irritant high -gOq@@eLnmLt@@ i3 mol irritant high -gOq@@eMN]UT@@ i3 mol irritant high -gOq`@ldrikUT@@ i3 mol irritant high -gOqhHl@cIIBjujh@ i3 mol irritant high -gOt@@tjWkjj`@ i3 mol irritant high -gOt@ATiUkjj`@ i3 mol irritant high -gOtLHPDXHhPeLq]UL@@ i3 mol irritant high -gOx@@drm\@@@@ i3 mol irritant high -gOx@@drm]UT@@ i3 mol irritant high -gOx@@eJqh@P@@ i3 mol irritant high -gOx@@eJyh@P@@ i3 mol irritant high -gOx@@eLmXD@@@ i3 mol irritant high -gOy@DDfYKZj`@ i3 mol irritant high -gOy@JDiWMjj`@ i3 mol irritant high -gOyDEQDDHRYXnZZ@@ i3 mol irritant high -gOyDLpDHHRY\ujf@@ i3 mol irritant high -gO|HDVHaIeZx@@@ i3 mol irritant high -fHe`A@ i2 pattern irritant medium -gFq`@ldrfmU@XR|a@ i2 pattern irritant medium -gCl@@ldsPFFBp i2 pattern irritant medium -gC`HADIKTAaaMrH i2 pattern irritant medium -gNxHLHaIYjj`H i2 pattern irritant medium -gNxHLHaIVjj`H i2 pattern irritant medium -eFDBcAaWH@ i2 pattern irritant medium -eMDARVCBnR i2 pattern irritant medium -gGP`@TfYi`LI^S@ i2 pattern irritant medium -gJQ@@dkT`XDKGd` i2 pattern irritant medium -gGQ@@dkUTAaXl[r@ i2 pattern irritant medium -gJQ@@djsBJprqyH i2 pattern irritant medium -eMHAIdLF^P i2 pattern irritant medium -gJQ@@dls@XKGd` i2 pattern irritant medium -gGP`ATiVj`LCEkrD i2 pattern irritant medium -gJP`AdejhC@qX|`@ i2 pattern irritant medium -gGP`ATiVj`LCEcrT i2 pattern irritant medium -gJQ@@dsU@XDKGd` i2 pattern irritant medium -eMJDbDfP` i2 pattern irritant medium -gC`DADZHRVhB i2 pattern irritant medium -gC`DAb[DRVhB i2 pattern irritant medium -gCa@@dkHFBbyL i2 pattern irritant medium -gCa@@dkPFBfyD i2 pattern irritant medium -eMABHYAIhH i2 pattern irritant medium -gJPH@DIRuPFABqyH i2 pattern irritant medium -gCa@@dkHFBVyH i2 pattern irritant medium -gGQ`@jdjmTAal[rP i2 pattern irritant medium -gGY@LDeVj`LJHm^P` i2 pattern irritant medium -gJXHLHaIVj@pHbOI` i2 pattern irritant medium -gOx@@drm\@@A`plZp i2 pattern irritant medium -gGXHLHaIUjhCBbHwdp i2 pattern irritant medium -gCh@@doHFDwH` i2 pattern irritant medium -gJY@BDeZlCAQ\`@ i2 pattern irritant medium -fHgdA@ i2 pattern irritant medium -gJQ@@dsT`XDKGd` i2 pattern irritant medium -gOp`@dfUMZj`LMc^Q` i2 pattern irritant medium -daD@@DjUZxHD@CAhSBinQp i2 pattern irritant medium -gOp`@dfUkZj`LMj~P` i2 pattern irritant medium -deTH@@RVYWahBA@CC``j[ayD` i2 pattern irritant medium -did@p@bBbFbDfYoa`b@@H i2 pattern irritant medium -daDH@@RYg[ffj@LBrf{dD i2 pattern irritant medium -gFq@@drfmM@X[F|b@ i2 pattern irritant medium -gGQhHj@cIHTmPFFqoH@ i2 pattern irritant medium -gJQhHl@cIHUhCBGd@ i2 pattern irritant medium -daE@@@yIe^f`@`@piLJny@@ i2 pattern irritant medium -eMhDRUB i2 pattern irritant medium -die@@@aJvUxZ`@@CChPj[ay@@ i2 pattern irritant medium -difH@DAIf_Ifjj`CBlJf{dB i2 pattern irritant medium -difD@BADfyWaZ@@@LBQnGdT i2 pattern irritant medium -deVD@FADfygFV``@@pjfxYyB@ i2 pattern irritant medium -deVD@AADfyVzV`B@@piBkayD` i2 pattern irritant medium -gF|@AbeJfuU@P i2 pattern irritant medium -detD@@QInYvDYZjjh@` i2 pattern irritant medium -dedH@@RUUUfjhHRpELJfxYyD@ i2 pattern irritant medium -gJQ@@dkU@XZX|PP i2 pattern irritant medium -gNp@DiWjj@p\VM_H@ i2 pattern irritant medium -gNq@@djmUPFEfM_DD i2 pattern irritant medium -gJQ@@dkT`XZK\PH i2 pattern irritant medium -gJQ@@dkU@XDQGdp i2 pattern irritant medium -eFA@HoBJD i2 pattern irritant medium -gJP@DjvhCCKGd` i2 pattern irritant medium -gGQLLIAREdDfvj`H i2 pattern irritant medium -diDHhABPRPjPZPzPRZyjjj@H i2 pattern irritant medium -diDB@@SaRY]fifBBX i2 pattern irritant medium -gNxHF@aJUzZqDxXH|Tp i2 pattern irritant medium -dmv@@@Rf~UeZj@@@LEBDpfxYT i2 pattern irritant medium -daxD@@QIUYjj@LBrf{bPP i2 pattern irritant medium -gNq@AdTbMUPFEBq_IP i2 pattern irritant medium -gGP@DiUjaAXFKGbE@ i2 pattern irritant medium -daE@@@YIeZn`B@@piLiny@@ i2 pattern irritant medium -gCa@@dsPFBV@ i2 pattern irritant medium -gOp@DjWkfZ`LKEc^Q` i2 pattern irritant medium -gOp@DjWkZjPLKEc^Q` i2 pattern irritant medium -daD@`@bDeeVz`@@CA`cBinQp i2 pattern irritant medium -eMABHPaIhLDnR i2 pattern irritant medium -daDH@@RVU[f@@@LJ`j[nQ` i2 pattern irritant medium -gC``AdeZ@pTWI` i2 pattern irritant medium -gFp`AdiTvjhCCQWdH i2 pattern irritant medium -eMbDBDfp` i2 pattern irritant medium -daEH@JXDiWRjjj`CBhSB[d\ i2 pattern irritant medium -daFH@NAIe^f`@`@piLJny@@ i2 pattern irritant medium -daF@@@RYe[hB@@LJCBknPp i2 pattern irritant medium -daF@`NBHRYUih@H@LJCB[nP` i2 pattern irritant medium -gC`@Die@ptVy@ i2 pattern irritant medium -eFA@HoBLD i2 pattern irritant medium -gGQ`@jdvmTAaecrT i2 pattern irritant medium -daxB@@RfRYYZf`B i2 pattern irritant medium -gJQ@@eKS@XJKbq@ i2 pattern irritant medium -gCaHLLQIZ`LDEqS@ i2 pattern irritant medium -daxD@@QIeUjj@LBpj{dL i2 pattern irritant medium -daxD@@QIUUjj@LJpj[nQ@ i2 pattern irritant medium -gNp`@df]Zj@pvMyF i2 pattern irritant medium -gJP`@dfzhCCA[ba@ i2 pattern irritant medium -gGQ@@eKuTA`Uc^R@ i2 pattern irritant medium -gCaHLHaIZ`LLHnS@ i2 pattern irritant medium -gGPhMQDIK]U@XTQX|e@ i2 pattern irritant medium -gNp@DiUZjDC`qEc^Q` i2 pattern irritant medium -gNpH@DIRoUTA`qEj~P` i2 pattern irritant medium -gNp`AdiWjj@pJM_I@ i2 pattern irritant medium -gGP`@TeZj`LKEc^P@ i2 pattern irritant medium -gGQ@@eJuTA`Xm^P` i2 pattern irritant medium -eFJBhHp^I@ i2 pattern irritant medium -gCah@mJAIj`H i2 pattern irritant medium -gCahHlOBOTAaAsQX i2 pattern irritant medium -gJT`H`TeVdB i2 pattern irritant medium -gNx@@eJmThFCbqky@ i2 pattern irritant medium -dif@@@RUe^Fh@@@pDHPj[a@ i2 pattern irritant medium -gNy`LDtfuZj@pNM_H` i2 pattern irritant medium -gNx`LFdjmUPFCDQkyL i2 pattern irritant medium -gOx@@drm]UTAaqEcV i2 pattern irritant medium -gGT@ATivj`LKEc^P@ i2 pattern irritant medium -diDDHJXIAICi@YAIkfjfh@` i2 pattern irritant medium -dcLL@@STfVyVUZ`HD@H i2 pattern irritant medium -daDH@@RVU[fZj@LBJf{bQ` i2 pattern irritant medium -dmtD@@QIUYVUZh@@@p{B[ae^Q@ i2 pattern irritant medium -deTD@@QIgeQejjj@LFpj[ayD` i2 pattern irritant medium -dmtD@@QIgeTYZjjh@p{B[ae^QP i2 pattern irritant medium -gOp@DjWkZj`LCL[qI` i2 pattern irritant medium -gNp`@df^Zj@pvkyB i2 pattern irritant medium -deT@@DjWvifjjh@pFDpjXYyG@ i2 pattern irritant medium -didD@@qJY~rjjZ`B i2 pattern irritant medium -gGQ@@dmltA`h^KT i2 pattern irritant medium -dcL@@DjU_ZnZjij@H i2 pattern irritant medium -dcL@@LdbRbjUBDEEP@XSBXUMt{rE@ i2 pattern irritant medium -did@@DjWZfZjj@LFcB[ayB@ i2 pattern irritant medium -did@p@bBbAbDfYun``H@H i2 pattern irritant medium -dcMB@HDDWTfyV{iZ@HX@H i2 pattern irritant medium -gC`dEaDPHRZTB i2 pattern irritant medium -dmtD`NDHcHhheDVfBAb@CB`rfWdR i2 pattern irritant medium -gNxhGD@cIHTefqMP i2 pattern irritant medium -daFH`HX@aJYWJjeh@pHDJnQp i2 pattern irritant medium -dax@@DkUfjh@pZDpf{bAP i2 pattern irritant medium -gNp`@df^Zj@pV_DZ i2 pattern irritant medium -dedD@@qJ[^ZjZ`bf i2 pattern irritant medium -daxD@@QImUjj@LJSBknPp i2 pattern irritant medium -diD@@LdRbJZjhHBpxHpj[nH`` i2 pattern irritant medium -daxD@@QInejj@LBRf{dD i2 pattern irritant medium -fH`TA@ i2 pattern irritant medium -gJQ`@bdjt`P i2 pattern irritant medium -daD@`@bDfUjZ@B@CB`SJ{dL i2 pattern irritant medium -dkm@`ATHaIe[ujZ@BfhBAh i2 pattern irritant medium -dif@`BBHRYgfzB@`@` i2 pattern irritant medium -detD@@eIYe~DYZjjh@` i2 pattern irritant medium -daFH@DAIYUnZjX@pkBinyD@ i2 pattern irritant medium -gC`HAVIMTAaaMrH i2 pattern irritant medium -gNq@@djuUPFCDqkyD i2 pattern irritant medium -gJQ@@dju@XZX|b@ i2 pattern irritant medium -gCa@@dmHFFDwH` i2 pattern irritant medium -gJQ@@dsMBRppVyB i2 pattern irritant medium -gCahHlOBNtA`anQ@ i2 pattern irritant medium -gGQDJH`qBSKMHdX i2 pattern irritant medium -eMIDbKpRYB i2 pattern irritant medium -gNx@@eJ}UPFCDVkyB i2 pattern irritant medium -gJXhEbLQIZf@` i2 pattern irritant medium -dnD@@DiYrbYjj`CA`aLinPP i2 pattern irritant medium -gF}@EbDfTuiXB i2 pattern irritant medium -gJP`@TfZhCCQ[bA@ i2 pattern irritant medium -gJPhLQDIKUPD i2 pattern irritant medium -diDB@@RnRYufjf@LDp^PP i2 pattern irritant medium -dmTD@@SHheHjfjjh@pXj[agdJ i2 pattern irritant medium -gNpTHjpDDHrREQZTB i2 pattern irritant medium -gGP@LdbMU@XTQZ|a@ i2 pattern irritant medium -diDH@@rJJQUjj`CBlJf{dB i2 pattern irritant medium -gJQDDH`qBS]LHj i2 pattern irritant medium -gNplJqHJPtadTaeTpGdX i2 pattern irritant medium -gJYHLPDIStpblDEqP` i2 pattern irritant medium -diFDpJXPdDdLdLbdJRjfdHI` i2 pattern irritant medium -gGX@@eKMTHGCKWba@ i2 pattern irritant medium -eFHBJFE@ i2 pattern irritant medium -fHfpAa@ i2 pattern irritant medium -fH`XA@ i2 pattern irritant medium -gOu@DPdrykURA`l~Q@ i2 pattern irritant medium -fHgHA@ i2 pattern irritant medium -gCa@@dmHFBVxa@ i2 pattern irritant medium -dmtD@@QIgYVUZh@@@p[FxYWdD i2 pattern irritant medium -dmtH@@RgfueZj@@@LASJ[ae^Q@ i2 pattern irritant medium -did@p@bFbAbDfUfn`BH@H i2 pattern irritant medium -didH@@RYUZZ@B`@phLKayB@ i2 pattern irritant medium -dmuL@DpIUIfVTfZjjX@` i2 pattern irritant medium -deVD@HADfyVxV`@`@piBkiy@` i2 pattern irritant medium -deVL@HAIR[e_aZ@B@CBdJngdL i2 pattern irritant medium -dmvL`NaL@HrRRqQZUV``@@` i2 pattern irritant medium -dco@`LK`BLdTTRRITntpTA@Pe@ i2 pattern irritant medium -gGP@Djuj`LLm^JD i2 pattern irritant medium -gKP@Di\Vj@pHfOH` i2 pattern irritant medium -gNp`@dfVZf@pQ_IP i2 pattern irritant medium -daxD`Fx@aJUzjf@LJBDsnPP i2 pattern irritant medium -gGQ@@djuTAaQL[rH i2 pattern irritant medium -daxH@@RUUjj`CC`cBinyB@ i2 pattern irritant medium -diDH@@RYujjj@LAALJfx^Q@ i2 pattern irritant medium -gJX@@dku@XIGdp i2 pattern irritant medium -gJX`DBdju@XI[ba@ i2 pattern irritant medium -dazH@LAIUjjj@LFBDinyF@ i2 pattern irritant medium -gNq`@fdjkUHFBqxiP i2 pattern irritant medium -daDD@@aJyUnh@@@` i2 pattern irritant medium -did@@LdbbQxXF@@CAdrfx^PP i2 pattern irritant medium -did@@Dj{WaZjf@LNaLJf{dB i2 pattern irritant medium -daDH@@RYUifjj@LJpj[nP` i2 pattern irritant medium -daDD@@YIeZn`B@@piLiny@@ i2 pattern irritant medium -didD@@iJ[gxZB@@CBdJnGdL i2 pattern irritant medium -daFD@FADfyVyjj`CBdpj[d\ i2 pattern irritant medium -dewH@HP`RY[TjFZd@H@H i2 pattern irritant medium -diD@@DiuejjP`GChSB[ax`T i2 pattern irritant medium -dmtDPNDHaXaIfVUi``X`@` i2 pattern irritant medium -dmt@@DjU_jxHHj@CBXPj[ae^Q` i2 pattern irritant medium -dmt@@DjU_ZxHDj@bg@XSBkagbLh i2 pattern irritant medium -dkl@@LdbRdSRjP`jJ`@pfDJfxUOdZ i2 pattern irritant medium -gOp@DiWMZj`LKEb~HT i2 pattern irritant medium -dmtH@@RYfWXXBHh@LF@fFUxe\ i2 pattern irritant medium -dax@@LddUeUT@XMBXS]rJ@ i2 pattern irritant medium -gOq@@eJqmUTA`Xl~Ht i2 pattern irritant medium -daD@P@qBbDfYvzB@@CB`pj[d\ i2 pattern irritant medium -dmuL@HDDWHihdh^eh@b@B i2 pattern irritant medium -dcNL@HALRYymUujh@@@` i2 pattern irritant medium -gNyhMDpDYIBdmTA`\Z~P@ i2 pattern irritant medium -gNx@@dlmUPFEbq_DJ i2 pattern irritant medium -dknL@CAErJIQIIF]Z``b@B i2 pattern irritant medium -deVD@DCdeeY[fjjh@` i2 pattern irritant medium -did@@DjUfaBB`@LNaLinGdD i2 pattern irritant medium -difL@DCaRY]bijih@` i2 pattern irritant medium -difH@DAIf_Ifjj`C@lJnxcB i2 pattern irritant medium -dcMB@HXDeTfyed]ZBA`@H i2 pattern irritant medium -fHcdAa@ i2 pattern irritant medium -fHchA@ i2 pattern irritant medium -eF`BNFE@ i2 pattern irritant medium -deTD`HP@cIHXdepk@A@A`ULL|PB@ i2 pattern irritant medium -deTL`HS@BLddlRPrm@@@FAXwSqJD i2 pattern irritant medium -dcnH@NCHhheEBtkl@D@@@P i2 pattern irritant medium -foA@R@HHqX@QddebRfR`iF\m@@A@@A@ i2 pattern irritant medium -dieH@BxDfYUa``P@LBCJ[b\H i2 pattern irritant medium -deTB@@pYRf[^njjj`CBXSBinFP i2 pattern irritant medium -daE@@@aJyUnX@@@pkBinyD@ i2 pattern irritant medium -fduA@@@ILsLjm{AJ\XOhm@@@@A@@A@ i2 pattern irritant medium -fhy`@@@ISLjm{btjw`t@@@@@@@P i2 pattern irritant medium -dmvH@DAIf{VUZh@@@p[J[agdJ i2 pattern irritant medium -fnkA`@@N[dTRTtTTlVRbUFJlFNZmKUUUUUUT@F@TXipTeZMYw`iKWbLm@ i2 pattern irritant medium -fig@P@@NZOHhdihhiXleDbjLUXL\uZVjjjjjij`@` i2 pattern irritant medium -deTL`HS@BLddlRPrm@@@FAXwCqJd i2 pattern irritant medium -det@@DjYUX^dHbH`CAdJfx^Id` i2 pattern irritant medium -ffsA`@@LudTTTeRdVTtLIps`ySeijjjZjjj@B i2 pattern irritant medium -f`ia@@E@RfuUe]gEF]z`@jjhh@LAHIPTmFmsFG^@ i2 pattern irritant medium -f`ia@@M@RfuU[UgEZ]z`@jjhh@LAHIPTeFmsFG^@ i2 pattern irritant medium -dmLH@@RYegXYV@@@@@pXJXYWbYp i2 pattern irritant medium -dmtD@@QIee^UZ``@@pXfxYWdT i2 pattern irritant medium -dmtL@@QTfyeQehBA@C@jXYxb\ i2 pattern irritant medium -dcLB@@RUR[fVQuhHF@@` i2 pattern irritant medium -dklH@@rJIJQQNfZjji`B i2 pattern irritant medium -dmt@@DjU_ZxHHj@CBXSBine^PH i2 pattern irritant medium -daDH@@RYWih@H@LB@j{bI` i2 pattern irritant medium -gNq@@dsKSPFFu_HP i2 pattern irritant medium -deTL@@QdfygFV``@@piJXYyG@ i2 pattern irritant medium -dmv@@@RfYWEZB``@LIALJfxYyB` i2 pattern irritant medium -dmuL@HTDYInYtYZB@`@` i2 pattern irritant medium -deVH@IAJYW~F``H@LJPj[nId` i2 pattern irritant medium -gFuHC\@aJYMif@` i2 pattern irritant medium -difH@HAIYexV@`@C@biny@` i2 pattern irritant medium -dmvD@D@dfWeYUj`@@CCdpfxYyB` i2 pattern irritant medium -foA``@H@PdwJ{J|EYsP@P@@@D i2 pattern irritant medium -dif@pDBHjHFHrJIQEn`HH@H i2 pattern irritant medium -dclL@@{TivY~DeZhHB`@` i2 pattern irritant medium -gFp`ATiTvjhCAH|Tp i2 pattern irritant medium -fgA`B@N@BDifYWz\d[Uj@H@B@@LI@Hs`eZM[dI@ i2 pattern irritant medium -gC`HAxIKTAahmr@ i2 pattern irritant medium -dg|@`@|DjYmUyO[j@@@@@LM@j[ae]N~Q` i2 pattern irritant medium -deTD@@YIfUqehH@@LFJfxYyF@ i2 pattern irritant medium -deTL@@jTef_xVB@`@phj[iyD@ i2 pattern irritant medium -deTL@@RdfVUFVjZd@pHfF^Qp i2 pattern irritant medium -deT`@@biRnYaXHB@B i2 pattern irritant medium -dif@PJ@H`HRnY~F``@@pXBinGdP i2 pattern irritant medium -dk^@@@RfYU\]Tz@@@@@LECBinFUOdZ i2 pattern irritant medium -dieDPJZD@HHHrRFIYnVfi@H i2 pattern irritant medium -dmND@DCdfVUrjUZjZi@LFrfFUyB@ i2 pattern irritant medium -gOp@DjWkjj`LFEcWrP i2 pattern irritant medium -gOx@@eJqmUTA`xlZ~P@ i2 pattern irritant medium -gOx@@eLm]UTA`xlZ~P@ i2 pattern irritant medium -dcnH@DAIYegzUujBHH@LNInFUwdP i2 pattern irritant medium -day@@@aJVYjjB@h i2 pattern irritant medium -dedB@@PYR[UYjjX@pILZ^HU@ i2 pattern irritant medium -dkLF@@RUttfyenZjif@LFSBiSyG@ i2 pattern irritant medium -dmTL@@QdfUivijdHJ` i2 pattern irritant medium -gGY@LDeej`LBl[rP i2 pattern irritant medium -gGY@BDeUj`LBl[rP i2 pattern irritant medium -gGY@LDeUj`LBl[rP i2 pattern irritant medium -dkmH`NMPbLbbbTNfXXBHf`@` i2 pattern irritant medium -gGY@LDeUj`LLc^JX i2 pattern irritant medium -dmv@@@rRJIIFUjB`@@pELJfzUy@` i2 pattern irritant medium -gOx@@drm]KTA`Pl^Jl i2 pattern irritant medium -daF@@@RYUijVj@H i2 pattern irritant medium -dif@@@RYWZZejh@` i2 pattern irritant medium -foAa@@D@RUfV]qZlyhH@@@@CBRJ\DkQkNxbD` i2 pattern irritant medium -foAa@@D@RYYeUuVLyj@@@@@CARJLEIVcV]rG@ i2 pattern irritant medium -fj}a@@D@rJIQQIQKQEYSkQrUj@@`@@@@@` i2 pattern irritant medium -die@@@iJYWxYB@@bK@lInybTH i2 pattern irritant medium -difH@NAIe]ih@I@C@dpjx`B i2 pattern irritant medium -dcn@@@rRIHqIER{UT@D@FDpaUprn|c@ i2 pattern irritant medium -dig@@@aDiyWaV@@@LJPj[nPH i2 pattern irritant medium -dg~DPFvpbEBLbbRfbRM\JpAESI@D i2 pattern irritant medium -deVD@JADeUeFVjjh@p[B[agdP i2 pattern irritant medium -dmuD@LXDRYueeVjjj@H i2 pattern irritant medium -dmtD`BTHaIfUma``bP@` i2 pattern irritant medium -daE@@@{IHdbUUUT@XMBXUMrN@ i2 pattern irritant medium -difH@LAIVUxVjj`CAdJfx^Q@ i2 pattern irritant medium -deVH@IAJYW~F``H@LFSBinyD` i2 pattern irritant medium -difD@HADfyWaZ@@@LLRayaMp i2 pattern irritant medium -deTD@@QIgeQej@@@LLsayeMH i2 pattern irritant medium -deT@@DjUghP`h`@pYL[agfPU@ i2 pattern irritant medium -deVH@LAIUeQejjj@LASBinF^Q@ i2 pattern irritant medium -dmuH@DHDfvYYUjjj`B i2 pattern irritant medium -gOx@@eLvmUTA`xlZ~P@ i2 pattern irritant medium -gOx@@eRimUTAaXcWrX i2 pattern irritant medium -fle``@C@PdrrjLlmQRuAAEUTP@P i2 pattern irritant medium -diFH`JpHaI[kijh@` i2 pattern irritant medium -deVL@BAIR[YTYZjj`B i2 pattern irritant medium -dg|H`ABHRYW[ficn@BjjH@` i2 pattern irritant medium -foAqB@EZ\HDPdrnvrtYYt@EURd@FD`HpR`iFmrG@ i2 pattern irritant medium -dk_H@FdprJJISPkatzjjiZ@H i2 pattern irritant medium -foAab@GPQ`@QddebRfRpiFlm@@@P@A@ i2 pattern irritant medium -gNy@LDeVZj@pJM_EL i2 pattern irritant medium -f`aQ@@DT@drllsNoMTDQT@@P i2 pattern irritant medium -gJX@@eKU@XYX|P` i2 pattern irritant medium -did@@LddRL[jjj`CChSBkayC@ i2 pattern irritant medium -dk]H@DdDefueFUujjjj`B i2 pattern irritant medium -dg|@@DjU_eZx{BAH@@BJlARne]N~EFDp i2 pattern irritant medium -dmvD@HADfyeQehBA@C@dXYye\h i2 pattern irritant medium -gBX@@eLUTAahmr@ i2 pattern irritant medium -dmLH@@RYiYKnVjjjh@pFLinFUy@@ i2 pattern irritant medium -dg_@`DGPbDfUueZZ@Bjj@B i2 pattern irritant medium -deVH`BdHaIfUvFBBD@H i2 pattern irritant medium -daFH@LAIVUnZjh@piBinyD@ i2 pattern irritant medium -dg^H@LAJUyfUSjhBH`@` i2 pattern irritant medium -gGPHAbIKUU@P i2 pattern irritant medium -dmtH@@rIQQQWiXBH`@pjfxUyD@ i2 pattern irritant medium -dcOD@Ds`wHheELUPmMUT`FCTwBn|bP i2 pattern irritant medium -deTH@@rJJIHmtAAP@XTALL|sJx i2 pattern irritant medium -gOu@E`drm[SRAalWrT i2 pattern irritant medium -do}H`AMPbDfUo[Vf`@jZh@H i2 pattern irritant medium -dg]H`AMPbDfY_[Vz@`ij@B i2 pattern irritant medium -dkmH`NMPbLbbRrbaih@Jf`@pxDpjg^PX i2 pattern irritant medium -f`q@@@BbHRDRHQHaIXkf`bJbjb@CARB\EKQkN}rB` i2 pattern irritant medium -dcLL@@G\dTRRbOKPPTP@XRfES\LkrM@ i2 pattern irritant medium -dklL@@Ptfym]eVj@BP@pyLinF^Qh i2 pattern irritant medium -dg}B@HTDf|bfbbTThfnmA@tI@D i2 pattern irritant medium -foAP@@@HR[ieUuVLyjhJBH@B i2 pattern irritant medium -foAab@KPQ`@QddebRfR`iF\m@@A@@A@ i2 pattern irritant medium -dg~H@FCIEDhcLdLg]AP@@@A@ i2 pattern irritant medium -dmvH@DCHhhhdYUjjj`CClJfxYyB` i2 pattern irritant medium -fhiA`@@Hddjrm|jIW`mPAD@@@A@ i2 pattern irritant medium -dk~@@@RfYU_JGUN`XJJH@pDB[aeSyF` i2 pattern irritant medium -f`i``@E@PdwJvvoAJt{sP@TuQP@P i2 pattern irritant medium -dcNL@FAMRUUeUujjjh@` i2 pattern irritant medium -didH@@rJJIEn`HH@LBJfGbA` i2 pattern irritant medium -fhyA`@@BMdTTTTTTVoMJ|xKPAAPA@@F@aRTZsoAyCP i2 pattern irritant medium -flu@P@@BLgHhhhhhhml^ZUytV`BB`HX@@` i2 pattern irritant medium -deTL`HS@|LddlRPru@@@FETwCODS@ i2 pattern irritant medium -dk^LPLaC@HTHrRPqQYKiWUjfYj@LJXUt~QP i2 pattern irritant medium -dcNH@BAIUfYgVjjj`B i2 pattern irritant medium -dmt@@DjU^jxHHj@CChPjFUxf\ i2 pattern irritant medium -dg\D@@QInUukaZ@Bj`@` i2 pattern irritant medium -dknJ@HAIT|bfbbTUGV``X`@` i2 pattern irritant medium -didH@@Rge^Fh@@@pZDJf{dB i2 pattern irritant medium -f`qAA@A@bOQBSJ{\ktYYt@EP@P@A@ i2 pattern irritant medium -dmtD`ATHaIe]nf`@jP@pXDpjGb]H i2 pattern irritant medium -dcND@NADfUyU]Zj@@@H i2 pattern irritant medium -dcn@@@RigVRX]fBBb@CClkae]yB@ i2 pattern irritant medium -gCa@@duPFADV@ i2 pattern irritant medium -didL@@cDkkWajjj@H i2 pattern irritant medium -dg|H@@RVYYwySn``@@@@pTHIne]N~PH i2 pattern irritant medium -dmtLPNePbABDfUujZ@Be@B i2 pattern irritant medium -daDh@DqnAIeZfZZd@` i2 pattern irritant medium -dmM@PBx@c@aJYg\jeZdHB@B i2 pattern irritant medium -eFAAx`bLD i2 pattern irritant medium -dmv@@@rQQJEJUjh@@@pdHJfxYWdH i2 pattern irritant medium -dmLH@@rJJIQEneX@@@@CA`rnF^Hr` i2 pattern irritant medium -foAa@@D@rJJJJHqYQkNZj`bB@@` i2 pattern irritant medium -dklH@@RUYffSYjZj`aJ i2 pattern irritant medium -deTH@@rJIJFTt@EP@XLFTpsqDx i2 pattern irritant medium -do|H@@rJJIQRFIn`HJjh@H i2 pattern irritant medium -dmvH@DAIgfVUZ`H@@pYFxYWdX i2 pattern irritant medium -deTD`HP@cIHXhdLk@P@A`UMp|PI@ i2 pattern irritant medium -dcLD@@QIeeUgVhHH@CAbinF^Hn` i2 pattern irritant medium -dknD@FADfye_EV``bP@pyJ[aW^II` i2 pattern irritant medium -do~D@FADfye_TUZBBIhBMX i2 pattern irritant medium -dg^H@LAIYVUW[jiBB@Hi` i2 pattern irritant medium -dkmD@NLJrQSQQITUhHbI@B i2 pattern irritant medium -diW@@@cDi[WBxYjeX@` i2 pattern irritant medium -dev@@@rRIIHus]UUUPA`JXUMpsrH@ i2 pattern irritant medium -difD@B@TfYun``H@LJCJx^PP i2 pattern irritant medium -do~@@@RV^UviUj`@j`@` i2 pattern irritant medium -daDH`BBHRYg[hH@@LJCJ[nPP i2 pattern irritant medium -dif@`ABHrJJIEn`HH@LJCBinPH i2 pattern irritant medium -gJXLBIARFdDfjhB i2 pattern irritant medium -dcLHPBBHzHrJJKQFLLDDU@A@ i2 pattern irritant medium -dcLHPBCD{DrJJKQFLLDDU@A@ i2 pattern irritant medium -dklJ`HSNL@cIIKEDdYuZBBH@H i2 pattern irritant medium -fhiAb@B^BBHRYe^unXHshHH@HX@@` i2 pattern irritant medium -dg\L`AWPbDfUv{ZZ@Bij@B i2 pattern irritant medium -dcn@@@Re[mRY]jj@B@CBXSBxYW^HC@ i2 pattern irritant medium -fde`@@@IRmrkNyFZ\FMUPP@@P@A@ i2 pattern irritant medium -dk_@`LI`BDigvUrmNfV@B@bj i2 pattern irritant medium -foApA@EZ\BHeDILrk|kNV]@PMTi@ar` i2 pattern irritant medium -daE@@@yJeVnjjh@pZDpj{dL i2 pattern irritant medium -dmvH@LAIUYVUZh@@@pELInFUyD@ i2 pattern irritant medium -dmL@@DjYUVGi@@@`@LNpjxYWdH i2 pattern irritant medium -gJX@@djsBIptQxa` i2 pattern irritant medium -dmV@@@RUgVYjf`aJ i2 pattern irritant medium -deTD@@qI[eQfj@@@LNSJ[agbA@ i2 pattern irritant medium -dazD@J@dfWjjh@pjLInx`H i2 pattern irritant medium -dg^D@EAdfYewiuhJBJ@B i2 pattern irritant medium -didD@@QIVUxV`@@CCFx^YAT i2 pattern irritant medium -gJX@@eST`XZK\a@ i2 pattern irritant medium -dmvD@HALbfbbQFV`HH@H i2 pattern irritant medium -dk]H@BxLbbbRaRX]NBA@@@B i2 pattern irritant medium -deu@@@gIHhikWLMUTu@D i2 pattern irritant medium -did@P@bNbDfYYa`H`@LJBfx^Q` i2 pattern irritant medium -dmtHPIBHVHRYfUXXBHX@H i2 pattern irritant medium -deUD@FxJRVYmnYjZ`B i2 pattern irritant medium -f`q@`@@LrQQJIQKHbL{uAPA@@@A`iANBdkUg^y@p i2 pattern irritant medium -dk\@@DjWmkiadHBjh`B i2 pattern irritant medium -dk]H@DXDfYYwz]MjhHB@CClhYWSyC@ i2 pattern irritant medium -dg~HpFlI@i@YCHhhihdUtz\DQEJPA@ i2 pattern irritant medium -dcLL@@S\bbTrTHru@AH@XDUMODEP i2 pattern irritant medium -dg\`@@SFRYueUNvjjjj@H i2 pattern irritant medium -dk\@`LhDjU^ukmLHH@@@CAXPjxYWSyF@ i2 pattern irritant medium -dk]H`AdpqDfUmUiev@Bfd`B i2 pattern irritant medium -gFp@DjTujhCCKWba@ i2 pattern irritant medium -dkLD@@SHdiDbeFjff`B i2 pattern irritant medium -gGP`Ademj`LBl[rP i2 pattern irritant medium -fhyH@@@X\EJYnUWoEEVMyj@@@b`@B i2 pattern irritant medium -fhyH@@@X|EJYnUWwEEVLyj@@@J`@B i2 pattern irritant medium -dk^H@FAJY}e\kSie`@`Hj` i2 pattern irritant medium -dieH@FxLdTReJjeZ`B i2 pattern irritant medium -deVD@HADfyeFV`H@@pqNgfTp` i2 pattern irritant medium -deU@@@qJYejxBHh@LJJfF^Qp i2 pattern irritant medium -dmuH@DXDfUgjZ@Bj@B i2 pattern irritant medium -dmvH@ACHhhdcFz@`j@CA`Jfe^Ig@ i2 pattern irritant medium -dmvH@AAIe]Zf`@j`@pXBkiWbI` i2 pattern irritant medium -dcn@@@RfumVy]d@@@@CClIae]yB@ i2 pattern irritant medium -foAP@@@TRfUVu~RlzP```@ABC@ i2 pattern irritant medium -dknDpItpdDdLdLbdLRTtEZh@a`@` i2 pattern irritant medium -f`qa`@H@PqInYWmQJ]yhHH@@@@` i2 pattern irritant medium -fbuac@HjSdD`bPqHYEHXdleDeeAR|Fj@B`@f@@H i2 pattern irritant medium -deTD`HP@cIHXhdLk@P@A`UMt|PA@ i2 pattern irritant medium -fdy`b@LPP@HrRPjJJIIDf|xJu@A@A@@D i2 pattern irritant medium -f`qa@@M@rQSIYQIPlxZu@AUUQ@A@ i2 pattern irritant medium -dig@@@`Tke]nX@H@LBpfGbQP i2 pattern irritant medium -daF@`B@HRYg[hH@@LBpj[bAp i2 pattern irritant medium -did@@Ldbbq[`bB@C@lJaxbL i2 pattern irritant medium -didD`HPOAJvUxVjj`CAlJfx^P@ i2 pattern irritant medium -dmtB`HSBCprRSFIJUZh@@@pinFUxfD i2 pattern irritant medium -fHbXA@ i2 pattern irritant medium -daFH@BAIf]n``@@pKBknHC@ i2 pattern irritant medium -fjsQ@@DB@dsLsKjvldIUhaJgKU@p@@@D@@D i2 pattern irritant medium -dnD@@DiYrbYjj`CB`aLkbDp i2 pattern irritant medium -dmLD@@eIYfUayVjjZPB i2 pattern irritant medium -daDH@@RVU[f@@@LJcB[nQP i2 pattern irritant medium -gFp`AdiTvjhCAF|TP i2 pattern irritant medium -eMBBHRYCAKd` i2 pattern irritant medium -dieH@HPDeYWaZ@@@H i2 pattern irritant medium -gOu@E`dsu[UTA`TZ~S@ i2 pattern irritant medium -gOx`DFdrikTlA`e^S@ i2 pattern irritant medium -daD@@DjWZXHB@CBdpf{dP i2 pattern irritant medium -dmL@@DjYeVdUBHhb@LNpjXYWd\ i2 pattern irritant medium -diTH@@RVYV{ajjf`B i2 pattern irritant medium -dmN@@@RYVuiiV@@@@@pxLkae^P` i2 pattern irritant medium -dml@@LdfbTJifzUZjjj`B i2 pattern irritant medium -fHcDA@ i2 pattern irritant medium -fHgPAa@ i2 pattern irritant medium -fHe@Aa@ i2 pattern irritant medium -eMBBHRYCAGe@ i2 pattern irritant medium -gC`DAbZHRVhB i2 pattern irritant medium -fHbxA@ i2 pattern irritant medium -gCa@@dtpFBVy@ i2 pattern irritant medium -gC`HADIMTAa`mrP i2 pattern irritant medium -gJQHDHaIjj@` i2 pattern irritant medium -gC`HADIKRAaaMrH i2 pattern irritant medium -gJP@DivhPNAbqy@ i2 pattern irritant medium -gJQ@@dkSBJpHVOI@ i2 pattern irritant medium -eMJAhHzB i2 pattern irritant medium -gJPhLQxIRuPD i2 pattern irritant medium From 0cde6eb3c3036c9d0968837b7d14cbbcaf6e105b Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Thu, 6 Jul 2023 15:39:38 -0400 Subject: [PATCH 08/31] wip too many things --- docs/api/medchem.constraints.md | 3 + docs/tutorials/Catalogs.ipynb | 575 +++++++++++++++++++- docs/tutorials/Chemical_Groups.ipynb | 570 ++++++++++++++++++- docs/tutorials/Constraints_Filtering.ipynb | 533 ++++++++++++++++++ docs/tutorials/Medchem_Query_Language.ipynb | 185 +++++++ docs/tutorials/Molecular_Complexity.ipynb | 75 +++ docs/tutorials/Molecular_Filters.ipynb | 142 +++++ medchem/__init__.py | 59 ++ medchem/constraints.py | 152 ++++++ mkdocs.yml | 2 + tests/test_constraints.py | 76 +++ 11 files changed, 2368 insertions(+), 4 deletions(-) create mode 100644 docs/api/medchem.constraints.md create mode 100644 docs/tutorials/Constraints_Filtering.ipynb create mode 100644 medchem/constraints.py create mode 100644 tests/test_constraints.py diff --git a/docs/api/medchem.constraints.md b/docs/api/medchem.constraints.md new file mode 100644 index 0000000..70ea10b --- /dev/null +++ b/docs/api/medchem.constraints.md @@ -0,0 +1,3 @@ +# `medchem.constraints` + +::: medchem.constraints.Constraints diff --git a/docs/tutorials/Catalogs.ipynb b/docs/tutorials/Catalogs.ipynb index 3d556b5..b760711 100644 --- a/docs/tutorials/Catalogs.ipynb +++ b/docs/tutorials/Catalogs.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "id": "cc35111a-d3a8-4313-962c-290bbf563f35", "metadata": {}, "outputs": [], @@ -10,8 +10,579 @@ "import datamol as dm\n", "import pandas as pd\n", "\n", - "import medchem\n" + "import medchem as mc\n", + "from medchem.catalogs import NamedCatalogs\n", + "from medchem.catalogs import list_named_catalogs\n", + "from medchem.catalogs import catalog_from_smarts" + ] + }, + { + "cell_type": "markdown", + "id": "8fa4628f-546a-4829-83e9-c981064d19bf", + "metadata": {}, + "source": [ + "## Use the existing catalogs" + ] + }, + { + "cell_type": "markdown", + "id": "d914fc99-b863-4fd4-aaf6-16b3e7271067", + "metadata": {}, + "source": [ + "List all the available catalogs." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "a9c39d29-0ed3-4f75-aeef-6681ed8e5f0c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['tox',\n", + " 'pains',\n", + " 'pains_a',\n", + " 'pains_b',\n", + " 'pains_c',\n", + " 'nih',\n", + " 'zinc',\n", + " 'brenk',\n", + " 'dundee',\n", + " 'bms',\n", + " 'glaxo',\n", + " 'schembl',\n", + " 'mlsmr',\n", + " 'inpharmatica',\n", + " 'lint',\n", + " 'alarm_nmr',\n", + " 'alphascreen',\n", + " 'gst_hitters',\n", + " 'his_hitters',\n", + " 'luciferase',\n", + " 'dnabinder',\n", + " 'chelator',\n", + " 'hitters',\n", + " 'electrophilic',\n", + " 'carcinogen',\n", + " 'ld50_oral',\n", + " 'reactive_unstable_toxic',\n", + " 'skin',\n", + " 'toxicophore',\n", + " 'nibr',\n", + " 'bredt',\n", + " 'unstable_graph']" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list_named_catalogs()" + ] + }, + { + "cell_type": "markdown", + "id": "c4c5ff8a-7306-402a-8f15-75360aa815e5", + "metadata": {}, + "source": [ + "Retrieve a specific catalog as an RDKit catalog object." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "72f8ccb7-2287-433c-97aa-13c0ac204bee", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "444" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "catalog = NamedCatalogs.nibr()\n", + "\n", + "catalog.GetNumEntries()" + ] + }, + { + "cell_type": "markdown", + "id": "4ba4996a-6b1a-47fc-8434-5a4373596975", + "metadata": {}, + "source": [ + "This catalog has 444 entries." + ] + }, + { + "cell_type": "markdown", + "id": "a8807dcd-afb0-4912-85c7-4ce745143d2a", + "metadata": {}, + "source": [ + "Now, let's load some molecules and check whether they match to the NIBR catalog." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "6d246863-d8a5-4560-9a34-4844d0b76366", + "metadata": {}, + "outputs": [], + "source": [ + "data = dm.freesolv()\n", + "data = data.iloc[:50]\n", + "\n", + "data[\"mol\"] = data[\"smiles\"].apply(dm.to_mol)\n", + "\n", + "data[\"match_nibre_catalog\"] = data[\"mol\"].apply(catalog.HasMatch)" + ] + }, + { + "cell_type": "markdown", + "id": "312ee4c0-82f5-478d-aab7-0e6259ff5779", + "metadata": {}, + "source": [ + "Pick a few to display." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "6d908a04-8ca0-49a2-982a-060f5997b294", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rows = data.sample(n=8, random_state=19)\n", + "\n", + "mols = rows[\"mol\"].tolist()\n", + "legends = rows[\"match_nibre_catalog\"].apply(lambda x: f\"Match={x}\").tolist()\n", + "\n", + "dm.to_image(mols, legends=legends, mol_size=(300, 200))" + ] + }, + { + "cell_type": "markdown", + "id": "94ec0aae-70a9-4255-bb3c-8b8e276d90a0", + "metadata": {}, + "source": [ + "It's possible to retrieve the entries that match a certain molecule." ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "ff6fcff5-3cf2-4442-a064-a156d1720179", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcIAAACWCAIAAADCEh9HAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3daVhT174/8JUEwpAQQAYFUSGiIOIEypSESUVEEYcevdVaZ9ta7zn2eGpre+xwj/Z28Fjb03/VDmpbra1aioiEUZAkgMgsFFQMMgUIgxBCGDLs/4vdm6YBRExgE/L7PH3hs9dK9i+pfrPWHtYmYRiGAAAAPCsy0QUAAIBhgxgFAACdQIwCAIBOIEYBAEAnEKMAAKATiNGJQ6aSlfSUCPuERBcCgHGBGDU8Xcqu4p7im103y3rK+rF+9fbinuKFFQtfrnuZwNoAMEImRBcARiCnO+fdxnczujIUmALfYkOx2WW/6z2n9+hkOrG1AWC0IEYNxndt3+2u3a3AFDPNZkYxouxN7BvkDdc6r/27+d88KS99VjrRBQJgpCBGDUNJT8ne2r0KTHF4yuH/cfofE9Lv/+OOK4+/WPOip7mnJdmS2AoBMFoQo4bhWNOxfqw/2jr6A+cPNLdbUaximbEkRCKqMAAAnGIyAH1YX3xHPELo9cmvD2yFDAWAWBCjBqC0p7QP6zMnmwfSAomuBQCgDWLUADTLmxFCLqYu6kOiAIDxA2LUAPSoehBC5mRzogsBAAwCYtQA0Cl0hJBUKSW6EADAICBGDcA002kIoXp5PT4sfRo3u24eajg0mkUBAH4Hx9oMwBzzOdYU605lZ1pXWrR19LD9O5QdG4QbOpQdVBL1qPPRMagQAGMGo1EDQCFRNk/ajBA61nRMiSmH7W9Dsfne9XtTkumxpmMfN388+gUCYNQgRg3DW1PesqHY3O6+/fyj59sUbZpNWdKs2923tfpHW0efm3GOjMhvNrx5pvXMGFYKgNGBSb1hcDF1iWXGrhWuvfL4SmJnYjA9eBp1WquitbinWNgnjLKOujHzhtZLtkzaIlFK9tXt21e7z5pi/V+2/0VI5QBMeBCjBiPMKqxsTtn/Nv9vXEccV8LFNzqaOD5v+/w+h30IIRNkwqAwaGSa+iWvOLzyWPn4bdHbLz560Ypstcp6FTGlAzChkeABy4aoS9nVqmy1o9gxKIxhO7/Z8OZHzR9ZkC247twQesgYlAeAUYEYnfgwhO2r3Xe69TSDwkiflb7YcjHRFQEwoUCMGgUVUr1Q/cKlx5fsTexvzb7lZe5FdEUATBwQo8ZCjsnXC9cndCZMNZ3K8+C5Ud2IrgiACQJi1Ij0qHqiHkZldmXONJvJm81zMnUiuiIAJgK4btSIWJAt4pnxSyyXPOx7GFEVoXX9KQDg2UCMGhcrihXXnTvXfG5ZT1nUw6guZRfRFQFg8CBGjY6diV3KrBSmGTOvOy9GGNOr6iW6IgAMG8SoMXI2dU51T3U2dc7oythUvUmOyYmuCAADBjFqpJhmzJRZKXYmdvGd8TtqdqiQiuiKADBUEKPGa675XK4714pidbH94v66/USXA4Chghg1akssl3Bncmlk2qmWU2+L3ia6HAAMEsSosWPRWbHMWCqJKsgRfPwxLE4KwIjB5fcAIYRiC2L/4vcXDMNOnz69d+9eossBwJDAaBQghNB63/XffPMNQuiVV165dOkS0eUAYEggRsHvduzYceLECZVKtW3btoSEBKLLAcBgQIyCPxw4cODNN9+Uy+UbN27MzMwkuhwADAMcGwXaXnvttZMnTzIYjPT09MWLDWxx0t7e3itXrpSVlW3bts3LC9YDBGMBYhRowzBs165d586ds7e3v3Xr1vgPo+7u7qKiIoFAwOfzExMTVSoVQohMJp8/f37r1q1EVwcmPohRMAilUrlp06ZffvnF2dmZx+MxmUyiK9LW2NjI5/Px6CwpKVEoFOomKpVKJpN7e3vJZHJaWlpYWBiBdQJjADEKBtff3x8dHZ2SksJkMnk8nrOzM9EVIaFQqI7OiooK9V9dExOTBQsWsFgsNpsdFBQ0depUmUzGZDKbm5unTp3K4/Hc3GCNajCKIEbBkLq7uyMiIrKzs+fOnXvr1i07O7sxLkChUJSUlODRmZmZ2dLSom6i0+kLFixgs9ksFis4ONja2lrrtRKJJCYmJjMzc+bMmTwez8kJ1qgGowViFDxJR0dHWFhYcXHxkiVL0tPTraysRnuPXV1dt2/fxqNTIBD09PSom5ycnHx9ffHo9Pf3NzU1Hfatli5deufOHW9v78zMzLH/GQBGAmIUDEMsFgcHB9+7dy8sLCwxMdHc3FzvuxCJRPhUXSAQFBUV4eeIcEwmE5+ts1isuXPnjvSd29raQkJCysvL/fz80tLSxuBnABghiFEwvNraWg6HU1tbGx0d/csvvww7DByWSqWqqKjAo5PP51dXV6ubNA90hoeH6z6EFIlEHA5HKBSO3s8AMHIQo+Cp3L9/Pzg4uLm5efPmzT/88AOZPOIbN+RyeWlpaVpaGp/Pz87Obm9vVzcxGAw/Pz88Otlstt6TTigUcjgckUikr58BADRBjIKnVVxcHBYW1tHR8corr3z55ZdP8xKJRJKXl4fP1nk8Xl9fn7rJyckJn6qz2exFixY9Qy4Pqr6+fvLkyQODsry8PCQkpK2tbcuWLd9//72+dgcAghgFI5KdnR0REdHd3X348OEPPvhg0D6aBzoLCwvVf8EoFIqHhwcenSEhITNmzNB7eZWVlcuXL/fz87t8+TKFQtFqfYafAQCeCgbASCQnJ5uZmSGEPvzwQ3yLQqEoKys7c+bM1q1bp0+frvm3i0ajsVisN954Iz4+vr29fbRrKy4utrW1RQht375dpVIN7CAQCGg0GkLorbfeGu1igPGAGAUjdunSJTKZTCKRVq1aFR4ejgeT2pQpUzZs2PDpp5/m5eXJ5fIxri07Oxuv529/+9ugHZKTk6lUqubPAAA6ghgFz+Lbb7+lUqkWFhZ4dDKZzK1bt545c6asrGzQYeBYSklJwcfLx44dG7TD1atXKRQKiUQ6ffr0GNcGJiSIUfAseDweQsjBwSEuLk4sFhNdjrbY2FgTExOE0IkTJwbtcPbsWRKJRCaTf/zxxzGuDUw8cL4SPIvr168jhLZu3RoTE+Pg4EB0OdrWrVv3zTffkEikgwcPnj17dmAHWKMa6BHEKHgWeIxGR0cTXciQtm3bdvLkSQzD9u7de/Xq1YEdYI1qoDdED4eB4amqqkII2drajv0ZpJH65z//iRCiUqlJSUmDdjhw4ABCiMFg5OXljXFtYMKA0SgYsfj4eIRQVFQUfvxxPPvXv/7197//vb+/f/369QKBYGCHEydO7NixQyKRrFy5sry8fOwrBBMAxCgYsfE/o9d0/PjxXbt2yWSy1atXFxUVabWSSKSvv/56w4YNbW1tERERQqGQkCKBQYO7mMDIdHZ24ueUxGKxjY2NZtPmzZspFMrRo0dH4w4lXSiVyueff/7KlSuOjo5ZWVkeHh5aHfr7+9esWZOcnDx+1qgeVcH3gx/0PSjwLHA2neCfdGzAaBSMzI0bN+RyeXBwsFaGSqXS2NjYS5cuaV2NPx5QKJQLFy5ERkaKxeLly5fX1NRodaBSqbGxsSwWSygURkREtLW1EVKnHqVKUjdXb3Yrc6MV0+xK7fzv+X/S/EmP6vfFW1sULU3yJiWmJLbICQNiFIzMUDN6Lpfb19fHYrHs7e2JqGsYVCr1l19+YbPZdXV1y5cvb25u1upgaWmZkJCwcOHC8vLylStXdnV1EVKn7vqx/hcevRBRFXHp8aVOZed8i/kupi6FssJDDYd8Kn1EchHRBU5AEKNgBORyeXJyMkJo1apVWk3j/4ApHpSLFi168ODBihUrHj9+rNXBxsYmOTnZw8Pjzp07MTExvb29hNSpo9fqX7vYfpFBYVx0vdgyvyXHI6dkTolonmjLpC31/fXlPXAabRQQfakAMCTp6ekIIW9vb63tCoUCH4RWVlYSUtjTE4vFnp6eCKHAwECpVDqwQ01NDb7ASnR0dH9//9hXqIuynjJSAYlUQEruTNZqUmGq6r5q/M+e5Z6oANX21Y5xeRMVjEbBCAw15MzOzm5tbXV3dx949ma8cXBwSElJmTFjRk5Ozrp16zSXQMVNnz49NTV18uTJ169fx1eKIqTOZ/Nd23cYwpYxlkUwIrSaSIjkSnUloCYjADEKRgC/b3JgjOLxunbtWgJqGrlp06bhQZmamrp582alUvtMy+zZs5OSkmxsbH788cf9+/cTUuSzye7ORghFW4/fQysTEsQoeFrl5eVVVVWOjo5+fn5aTfgF+eP5wKiWWbNmpaSk2NraxsbG7tq1Cxtw2d/ChQtv3LhBo9FOnTr12muvEVLkM3jU9wghNMd8DtGFGBeIUfC08CHnqlWrtBaWr6qqunfv3qRJk4KCgggq7VnMnz8fD8rvvvsOvyVUS1BQUGxsrJmZ2cmTJz/88MOxr3BEMIQhhCQqCULIigwPQB1TEKPgaQ11YPTatWvIQO4N1RIYGBgXF2dmZvb5558fO3ZsYIeIiIgff/yRQqEcPnz45MmTY1/hEygwRXlv+VetX22s3ji5dPLdnrsIIXOSOUKoH+snujojQ/Q5LmAYxGIxhUIxMzOTSCRaTSEhIQihn3/+mZDCdDfs4qTnzp0jkUgkEuns2bNjXJuWTkUnt5N7RHQk9H6oZZElKkDq/75u+RrDsLnlc1EButB24cnvA2fq9cvAhg+AKAkJCUqlcsWKFVZWf5owtre3CwQCU1PTiAjtU8OGAl+cdMeOHQcPHrS2tt65c6dWh+3bt3d2dh44cGDPnj0MBmPDhg1jWV6jvDFfli+QCvjd/LzuPDkmVzcxzZgsGotNZ7PoLC9zL4SQj6VPeW85X8rfMmnLWBZp7IjOcWAY1q1bhxA6deqU1vYLFy4ghJYvX05IVXr0+eefI4QoFMrly5cH7fDWW28hhKhUanKy9iWZevew9+F3bd/trdnrVe6lOeQ0KTTxrfD9a91fL7dfbpG3DHxh7ONYVIBsim0GbVWD0ah+QYyC4fX29lpZWZFIpLq6Oq2mTZs2IYQ+//xzQgrTryNHjuBByeVyB+2An7Kn0WgCgUC/u5ar5Pnd+SebT/5F+Be7EjvN6LQqtlp2f9m7ondTJakypWzY95n32zxUgJbdX9al7NJqremrwf8AMapfsMITGB6Xy42KivLx8SkoKNDcLpfLHR0dOzo6hEKhm5sbUeXp0cGDB0+cOGFpaZmcnMxms7VaMQzbvXv32bNnbWxsMjIyFi5cqMu+2trasrOz+Xy+QCCo+n9Vzco/bvOfQZ3BoXOCaEEcOsfLwos8klPBd3vuLn2wtEXR4mzqvN1u+3yL+Qihe7334jrjqvqqGuc10si0Ob/NqeytrPWunUadpstHADg4NgqGN9Q5+lu3bnV0dMybN29iZChC6Pjx452dnd9+++3q1aszMjIWLVqk2Uoikb766iuJRHL16tUVK1bweLzZs2eP6P1FIpFAIMCjs6ioSH2LlL/U387WDj/KyaFz3KjP/n3Os5iX65F7sOFgfEf8B00fqLebkExWMlZ2Kbto5HG3BJehgxgFw8AwDI/RNWvWaDUNtd1wkUikM2fOSCSSK1euREZGDlyclEKhXLx4saurKzk5efny5TweD78BfygKhaKkpASPTj6f39jYqG6ytLT08/PjcDhBQUFBC4IYdIa+PgXTjPkr89dWRWtud65YIaYgigvVxcfSx5Zii3f4ye0nmUo22XSyvvZo5GBSD4ZRVFTk4+Pj7OxcX19PIpE0m5hMZnV1dW5urr+/P1HljYb+/v61a9dyudxp06bxeLyBq1DLZLKIiAiBQDB79mwej+fo6KjZ2t3dXVRUpB51ai4lhd8DxmazWSzWkiVLzMzMxuLzgFEGo1EwDPxGzzVr1mhlaFlZWXV1taOj45IlSwgqbbRQqdSrV69GRkbyeDx8yDl58p8Gbviae2FhYcXFxStWrMjIyOjr68vLy8Oj886dO/39f1wA7+TkhOcmm8328fHR+hrBBAAxCoYx1IFR9X30ZPIEvBfO0tLy+vXr4eHhhYWFeFDa2tpqdrCxsUlMTAwODi4uLnZ1de3s7FQ3mZqa+vv7BwUF4RN2rQgGEw9M6sGTiEQiFxcXS0vL1tZWc3NzzabAwMDc3Ny4uLiYmBiiyhttLS0twcHBlZWVgYGBqampA5+PUllZ6evrS6VSFQrFggUL8FFncHCwtbU1IQUDQsBoFDzJ9evXMQyLiIjQylCxWJyXl2dhYbFs2TKiahsDDg4OSUlJHA4nJyfn1VdfPX/+vFaH+/fvy2QyfMF8rRVbgPGYgNMxoEdDzegTEhJUKlV4ePg4fICdfs2YMSM9Pd3f3//tt98e2Ip/Pxs2bIAMNWYwGgVDkslkGRkZZDJ55cqVWk3j/8lLejRr1qzc3NyB2zEM43K5yGi+BzAUGI2CIaWkpMhkMn9//ylTpmhu7+vrS0tLI5FIAx9sZ1Tu3LnT0NAwffr0+fPnE10LIBLEKBjSUEPOtLQ0qVTq6+vr4uJCRF3jBf79TOAzbOApQYyCwalUqsTERDT0zUswk4XvAeDggicwuNzc3MDAwBkzZjx69EhzO4Zh06dPr6+vLyws1Lrl3KjU1ta6urrSaLTW1la4GcnIwWgUDG6oh30WFhbW19dPnTpVx/WNDF18fDyGYStXroQMBRCjYHBDPexTfUDQyG9qhBk9UINJPRhETU2Nq6urtbW1WCymUqmaTb6+voWFhVwuNzIykqjyCCeVSu3t7RUKRVNTk729PdHlAILBaBQMAn/YZ2RkpFaGikSioqIiOp0eGhpKTGXjQ1JSUl9fX1BQEGQoQBCjYFBPeJbyoPeGGhuY0QNNEKNAm0QiycrKolAoA6ftEB8IIaVSOdSlYMA4QYwCbVwut7+/n8Ph2NnZaW7v7u4e6t5Qo5KTk9Pa2uru7q61MD4wWhCjQNtQQ86UlJTe3t7AwEAjX0ATbl4CWiBGwZ8olcqkpCSE0OrVq7WaYEaPG+pSMGC04IIn8Ce3bt0KDQ319PSsqKjQ3K5SqZydnZubm8vLy728vIgqj3APHz50d3efNGlSc3OziQkskAYQgtEo0DLUwz5zc3Obm5uZTKYxZyj6v0vBoqKiIEOBGsQo+JOhZu4T71nKzwaObICBYFIP/nDv3j1PT087O7umpiat0Za3t3d5eXl6enp4eDhR5RHu8ePHjo6OJBJJLBbb2NgQXQ4YL2A0Cv6AnzxZtWqVVoYKhcLy8nJra2sOh0NQaeNCYmKiQqEICQmBDAWa4PgO+MNQM1ZnZ+dr1641NzebmpoSUdd4ATN6MCiY1AOEEGpvb09KSnrxxRcpFEpra6uVlRXRFY07crnc0dGxo6NDKBS6ubkRXQ4YR2A0arxEIpFAIODz+QKBoKioSKVSTZs2ra2t7cGDBz4+PkRXN+5kZWV1dHR4e3tDhgItEKNGRKlUlpaW8v+PSCRSN1lYWPj5+bW3t9fV1UVFRWVlZc2ePZvAUschuFYBDAUm9ROcTCYrLCxUjzofP36sbmIwGH5+fiwWi81mczgcMzMzuVy+du3axMREFxcXHo/n6upKXOHjzqxZs6qqqnJycgICAoiuBYwvEKMTkFgsvn37Nh6d+fn5fX196iYnJyc2m41Hp4+Pz8AV7Ht6eiIjI7Oystzd3Xk8ntajlY1WeXm5t7e3o6NjY2MjmQzXt4A/gUn9WDsiOkIhUd5zek+/bysUCvHxJp/Pr6ioUP86UigULy8vPDpDQ0OnT5/+5PexsLC4fv16eHh4QUHBihUrMjMzbW1t9VuqIcIvBVu9ejVkKBgIRqP6163qTu9Kz5fltyna6GS6t4X3auvVtpTfw4hSSKGSqT0Le3TcixyTF8gKsruzeVJe2XNlVUVV6iYrK6uAgAB8yBkQEECj0Ub65i0tLSEhIRUVFQEBAampqXQ6XcdqDV1QUFBOTs6vv/468Bl/AECM6tn5tvOHGg61KFo0N1pTrD91+XSH3Q6kW4xKVdJiWbGgW8CX8nlSXqeyE9+++PvF9T/XL168GB91+vn5aT384xnU19dzOJxHjx4tW7YsISHBmJ9/KRaLnZ2dTUxMWlpa4FIwMBDEqD59Jv7sQP0BEiJtst30ot2LrlTXTmUnV8L9d/O/ZSpZtkd2AC1gpDFaL6/nSXnZ0myelFfWW6bElPh2EiLNMZ/DprNZdBabzGbaMPX+caqqqjgcTlNT09q1a69cuWK0i3GcO3du586dUVFRN27cILoWMB4Z6T+M0XC/7/6hhkMIoc+mffbfDv+t3h5AC4ixjinpKQmgPe0ZXmGfkN/NF0gFfCn/t97f1NtNSCa+lr4sOotNY4dZhdmbjO7z1Nzd3VNSUkJDQ+Pi4nbt2nXu3DnjPDIINy+BJ4PRqN4cqD/wmfizUKvQjFkZT+g26GhUjslLe0r5Ur6gW3Cz62abok3dZEWx8rf0Z9FZbDqbRWNZkC1G6wMM4fbt28uWLZNKpfv37//Pf/4zxnsnXF9fn4ODg1Qqra2tdXFxIbocMB7BaFRvUiWpCKHtk7Y/Zf/Hysc8KY8v5QukgnxZfj/Wr25ypbr+Plunsb0svMiEriDj7+8fFxe3evXqL774ws7O7r333iOwmLGXnp7e1dXl6+sLGQqGAjGqH3JMXtlbiRBaQlvylC+51nFtR80O/M8UEsXL3AuPTg6d40YdX7cbLl269Keffnruuefef/99Op3+j3/8g+iKxg7M6MGwIEb1o0PZoUIqhJCjieNTvoRD54RahXLoHBaNFUgLZFAYo1mgrmJiYs6dO7dt27ZDhw7Z2Njs3r2b6IrGAoZhCQkJCGIUPBHEqH5g6PdDzCSkfV/QUGaazXzyUdTx5oUXXujs7Ny/f//LL7/MYDA2btxIdEWjrqioqL6+3tnZedGiRUTXAsYvYzzxOhqsKdZ4gLYp24btbLheffXV999/X6lUbt26lcvlEl3OqFM/S3ngXbMAqEGM6ocZyYxpxkQIFcuKia5ldL3zzjuvv/56f3//c889x+PxiC5ndMGBUfA0IEb1JswqDCH08+OfiS5k1H300Ud79uyRyWTR0dGFhYVElzNaRCJRYWEhjUYLCwsjuhYwrkGM6s1L9i+REOnXjl+5kgk+2yWRSKdOndq0aVNnZ2dkZKTWE+0njPj4eAzDIiIizM3Nia4FjGsQo3qz2HLxXx3/iiFsvXD9B00fiOQihJASUz7oe3C06ei+un1EF6hPFArlhx9+iIqKamlpiYiIePToEdEV6R/M6MFTgruY9EmFVIcaDp0Un8TvfKeT6f1YP35d/SSTSQ3eDeZkc32t8DQeGPTipEql8u7duzweLzw8fO7cuVqtMpnMwcGht7e3oaHBsD4XGHtwwZM+kRH5+NTju+12X358OV+W36potSBbuFHdAumB623Wm5PNEUJ77PeYkCbI1665OGlERERmZuakSZOILupJBn0WwLFjxwbGaEpKikwmCwwMhAwFw5og/57HFU9zz3ec3hmq9fT002NZzGhjMBhJSUkhISF3796NiopKS0sbb4uTisVigUDA4/Gys7MLCwvlcrm6yd3dncViLV68eOCrYEYPnh5M6oEeNDQ0cDic6urqpUuXJiQkEH5O5gnPAvDw8MBXZQ0JCZkxY8agL1epVFOnTm1qaiorKxs4UAVAC8Qo0I+HDx9yOJzGxsaYmJirV6+O8eKkCoXi3r17eG5mZmbW1dWpm2g02sKFC/Ho5HA4NjY2w75bbm5uYGCgq6trdXX1aFYNJgiY1AP9mDlzZnJycmho6LVr13bu3Hn+/PnRXpxUKpUWFxfj0cnj8To7O9VNU6ZM0eVZAEePHkUILV26VM8VgwkKYhTozbx58xITE5ctW/bDDz8wGIwvvvhC77tobGzMz8/HozMvL0/zQCeTycQfP8Visby8vHS5fTM9PR0h5OnpqYeKgRGAST3Qs5s3b65ataq3t/fdd9/Vy+Kkmgc6f/tN41kAJiYLFizAozMsLMzeXqdnAahUqtLS0g8//DA7O7uuro5EIkkkkvF2ugyMTxCjQP/i4+M3bNigUCg++eSTZ1icVKFQlJSU4NF58+bNtjaNZwFYWfn7+6tHnRYWOj0LQC6Xl5aW4jtKT09vb29XN+3cufPbb7/V5c2B8YAYBaPiwoUL27ZtwzDszJkze/bsGba/RCLJy8tTjzp7e3vVTU5OTnhostnsRYsW6XjItbW1VX3daEFBQX//Hw8dcHNzc3BwmDVr1saNG9esWaPLXoBRgRgFo+XLL7989dVXKRTKxYsXN23aNFS3+Pj4w4cPa12W5O3tzeFw8OjU/ekdIpFIHZ2FhYWDXv8UHBzs6uqq446AcYJTTGC07Nu3r729/ciRI1u3brWysoqKihq0m5mZ2W+//WZpablo0SI80Vgslo53QymVysrKSjw6s7Kyampq1E2aO2Kz2ba2trrsCAAEo1Ew2t54442PP/7YwsIiKSkpODh4YAeZTFZaWurr62tqaqrLjrq7u4uKivDo5PP5HR0d6iZHR0c/Pz88OpcsWWJmZqbLjgDQAjEKRheGYS+//PJXX33FYDBu3rzp6+urxzdvamq6c+cOHp137tzRPNCpx+ufAHgyiFEw6lQq1ZYtW3766Sd7e/usrKw5c+bo8m5D3eipef1TSEiIo+PTPlsQAB1BjIKxIJfL161bd+PGjalTp/L5/BGdzNG8/ikjI6O1tVXdRKfTFyxYoD5HZG1trf/SARgOxCgYIz09PStXrrx165a7u3tWVpaTk9MTOnd1dd2+fRuPToFA0NPzx/KsTk5Ovr6+eHT6+/vreEQVAN1BjIKxI5FIli5dmp+f7+HhkZiYyGQyNVs1L0sqKipSqVTqJs0DnbDkEhhvIEbBmGptbQ0ICHj48CGdTq+oqMjLyysrK6uqquLz+ZrLKWke6AwPD7ezsyOwZgCeDGIUjLWCgoKAgACFQqG13c7OLigoiM1ms9nsxYsXj3RZJgCIAjEKCJCenr527VqpVEqhUGbPnv3SSw9DJrgAAAA7SURBVC/p5UZPAAgBMQqIoVQqa2pqtA6PAmCIIEYBAEAnMIcCAACdQIwCAIBOIEYBAEAnEKMAAKCT/w+9g4Igj9esVwAAANV6VFh0cmRraXRQS0wgcmRraXQgMjAyMy4wMy4yAAB4nHu/b+09BiDgZYAAJiDmhOIGRjaHDCDNzIzM0AAxWBA0moQggwKQZkSluBkYM5gYmRKYmDOYmFkSWFgzmFjZGJjZGZg4GFgZEkQYgYrYGFhZmJkYxctAGqCuYeD817HA/rrm6v0gDk9U8D7fJ9fAbMEjc/ev2yQKZjsH+uzXuBFpD2JbT9e071o2A8zOVblh773zpC2IHdbj6aAV8dAOxC5sfLmf6/sPsBqNGJ0Ds9RzweaIAQBiAC5CESMeSwAAASx6VFh0TU9MIHJka2l0IDIwMjMuMDMuMgAAeJx9UttuwzAIfc9X8AO1DMYEHtukmqapibRl+4dJfdz/a5CqcytZgyD5cjjmQAYIe5/fvn/gz2geBoD8z2dm8FVyzsMFYgGn88vrAtN2PN1PpvVz2T7A3HP4M/K4rZf7CcIEmKgyKsIBUykjIUNOebeWSg485ERZimkgZVRl6iBLIJ2zOKtETlUeq3aQfOMcTRGr32vNVmsHWB2YkwixsJeLRlV7T8uuRlQF92tTtt7DI0xXKAnZ0Pw4MWck6QA1gC5GiUmKcxvXXKyDtB1JSawg1ZBlnqE90vMyP83gNpXTusxtKi4TqPWePUprMEe0LobX1ivfgLSWoMfYlAe3Nn3oVNZEcCQ8FvpYVuzvv5mvh19/BIUWmR9xDwAAAJp6VFh0U01JTEVTIHJka2l0IDIwMjMuMDMuMgAAeJwljrsNxEAIRFu50Jb2EMPPIIcuZVOX4OIP7yUTvPnAdU/MuV33/peJz7MpwQo1mMwYEuMERWagCVda5TiZIsTCBggl3uTLdFQC3ql0LvdmoBTrBVCZsy0iKu113NOO1RSKUsjLSkIz1ppwaJ/qRhyZ9n4hblhE9RCM/fkBxggoNaFVxogAAAAASUVORK5CYII=", + "text/plain": [ + "" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mol = dm.to_mol(\"c1cc(c(cc1Cl)Cl)Cl\")\n", + "\n", + "mol" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "185f1e0d-5b00-4c0a-b6f6-1addcdeabca9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['NIBR||halogen_aromatic_count_3_min(3)||0||0||0',\n", + " 'NIBR||polyhalogenated_aromate_min(1)||1||0||0']" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "matches = catalog.GetMatches(mol)\n", + "[m.GetDescription() for m in matches]" + ] + }, + { + "cell_type": "markdown", + "id": "cec2c04b-7737-4748-b275-976545d16380", + "metadata": {}, + "source": [ + "## Build your own catalog" + ] + }, + { + "cell_type": "markdown", + "id": "86c1bebf-3cf6-49be-989e-82f8e6493062", + "metadata": {}, + "source": [ + "First, build a list of SMARTS." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "33e47547-a054-4157-954c-bdf05a9e5f0b", + "metadata": {}, + "outputs": [], + "source": [ + "smarts_list = [\n", + " [\"HBA\", \"[!$([#6,F,Cl,Br,I,o,s,nX3,#7v5,#15v5,#16v4,#16v6,*+1,*+2,*+3])]\"],\n", + " [\"Acid\", \"[CX3](=O)[OX1H0-,OX2H1]\"],\n", + " [\"Macrocycle\", \"[r;!r3;!r4;!r5;!r6;!r7]\"],\n", + " [\"Benzene\", \"[cR1]1[cR1][cR1][cR1][cR1][cR1]1\"],\n", + " [\"Halogen\", \"[F,Cl,Br,I]\"],\n", + "]\n", + "\n", + "names, smarts = list(zip(*smarts_list))" + ] + }, + { + "cell_type": "markdown", + "id": "7286e012-f66b-4b23-b1f1-bb1c39e1f009", + "metadata": {}, + "source": [ + "Now build the catalog object from it." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "b7c6ec03-c596-4a12-b3ca-81415f8cd5c5", + "metadata": {}, + "outputs": [], + "source": [ + "custom_catalog = catalog_from_smarts(\n", + " smarts=smarts,\n", + " labels=names,\n", + " entry_as_inds=False,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "cab9220b-e636-4bea-b309-8f9548783166", + "metadata": {}, + "source": [ + "Check how many entries." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "a4edf4c5-5f52-47b1-a4ce-5be728e807bd", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "5" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "custom_catalog.GetNumEntries()" + ] + }, + { + "cell_type": "markdown", + "id": "baa1d832-216d-4884-9794-9c2a4a8dd57c", + "metadata": {}, + "source": [ + "You're good to use it!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "623f2f41-4b68-4a18-812a-11256eb0b284", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/docs/tutorials/Chemical_Groups.ipynb b/docs/tutorials/Chemical_Groups.ipynb index 3d556b5..b185ecf 100644 --- a/docs/tutorials/Chemical_Groups.ipynb +++ b/docs/tutorials/Chemical_Groups.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "cc35111a-d3a8-4313-962c-290bbf563f35", "metadata": {}, "outputs": [], @@ -10,8 +10,574 @@ "import datamol as dm\n", "import pandas as pd\n", "\n", - "import medchem\n" + "import medchem\n", + "from medchem.groups import ChemicalGroup" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "c931625e-1e03-4204-a8d4-ce3017410b67", + "metadata": {}, + "source": [ + "Medchem contains a large list of chemical groups and functional groups that can be used for filtering." + ] + }, + { + "cell_type": "markdown", + "id": "1a631975-21a0-472d-a398-357301ae98bd", + "metadata": {}, + "source": [ + "## List the available chemical and functional groups\n", + "\n", + "List the default chemical groups" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "4cd73483-cbff-4b20-8fad-9ee8afed196c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['emerging_perfluoroalkyls',\n", + " 'montmorillonite_adsorption',\n", + " 'common_monomer_repeating_units',\n", + " 'electrophilic_warheads_for_kinases',\n", + " 'common_warhead_covalent_inhibitors',\n", + " 'rings_in_drugs',\n", + " 'iupac_blue_book_rings',\n", + " 'phase_2_hetereocyclic_rings',\n", + " 'privileged_scaffolds',\n", + " 'iupac_blue_book',\n", + " 'common_rgroup_replacements',\n", + " 'braf_inhibitors',\n", + " 'privileged_kinase_inhibitor_scaffolds',\n", + " 'common_organic_solvents',\n", + " 'amino_acid_protecting_groups',\n", + " 'schedule_one',\n", + " 'schedule_two',\n", + " 'schedule_three',\n", + " 'schedule_four',\n", + " 'schedule_five',\n", + " 'interstellar_space',\n", + " 'vitamins',\n", + " 'open_smiles',\n", + " 'amino_acids',\n", + " 'pihkal',\n", + " 'aggregator',\n", + " 'basic_groups',\n", + " 'extended_groups',\n", + " 'hinge_binders']" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "medchem.groups.list_default_chemical_groups()" + ] + }, + { + "cell_type": "markdown", + "id": "1790f107-c5c3-4b25-90c5-3ff1f0da4e3d", + "metadata": {}, + "source": [ + "List common functional group names. The list is too long to we only show a few elements." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "8c027d31-194e-479e-8133-3adeb2573f58", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['acidic groups',\n", + " 'acidic groups',\n", + " 'acidic groups',\n", + " 'acidic groups',\n", + " 'Carbonyl compouns: aldehydes or ketones',\n", + " 'Aldehydes',\n", + " 'Ketones',\n", + " 'Thiocarbonyl compounds: thioaldehydes or thioketones',\n", + " 'Thioaldehydes',\n", + " 'Thioketones']" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "medchem.groups.list_functional_group_names()[40:50]" + ] + }, + { + "cell_type": "markdown", + "id": "3a9a2464-8f20-4bd5-9621-087dd4486449", + "metadata": {}, + "source": [ + "You can also retrieve a `dict` of functional group to their SMARTS. Here again we only show a small subset." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "e0a5effa-d172-4b76-b381-49275c328490", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'primary_amine': '[NH]=C([NH2])[NH]C[NH]',\n", + " 'secondary_amine': 'c[OX2][CX4;!R][CX4;!R]([OH])[CX4;!R][NH][CH]([CH3])[CH3]',\n", + " 'tertiary_amine': '[CH3][N;!+]([CH3])[CX4;R][CX4;R]([CH3])[OX2;R]',\n", + " 'cyclic_amine': '[CH3][N;R!+]([CX4;R])[CX4;R]',\n", + " 'aromatic_system': 'c[CH]([N;R])c',\n", + " 'ring_system': '[R;!a]',\n", + " 'acidic groups': '[#6][N+](=O)[O-]',\n", + " 'Carbonyl compouns: aldehydes or ketones': '[$([H][CX3]([#1,#6])=[OX1]),$([#6&!$(C#N)][CX3](=[OX1])[#6&!$(C#N)])]',\n", + " 'Aldehydes': '[H][CX3]([#1,#6])=[OX1]',\n", + " 'Ketones': '[#6&!$(C#N)][CX3](=[OX1])[#6&!$(C#N)]'}" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fg_map = medchem.groups.get_functional_group_map()\n", + "\n", + "dict(list(fg_map.items())[:10])" + ] + }, + { + "cell_type": "markdown", + "id": "7b84db96-995e-416a-9333-e09ed353f0e3", + "metadata": {}, + "source": [ + "## Load one ore more groups and filter a list of molecules" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "f9894af5-146d-451b-af5b-ac9fd27ad40d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "group = ChemicalGroup(groups=[\"basic_groups\", \"rings_in_drugs\"])\n", + "\n", + "group" + ] + }, + { + "cell_type": "markdown", + "id": "d9d87371-5b67-4586-960f-54488cee217e", + "metadata": {}, + "source": [ + "The groups are part of a hierarchy you can explore with:" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "a15dec83-9d8c-47a6-9d8b-97112c5483c1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['medicinal_chemistry.rings.rings_in_drugs.rings_in_drugs',\n", + " 'medicinal_chemistry.functional_groups.basic_groups']" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "group.list_hierarchy_groups()" ] + }, + { + "cell_type": "markdown", + "id": "9d0721bc-1439-4729-82ff-0c17bf8a1a73", + "metadata": {}, + "source": [ + "Check whether a molecule match with the created group." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "a784aff1-d372-46ac-8ec1-204c3579455e", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcIAAACWCAIAAADCEh9HAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3deVhUZfsH8O/MMKyioigiiAqaOwmombiUaxpJmphLvi4laCqpLfhzCZcyNPOlFBVNydQy3NFXRDS1UEsHgcCVGDYB2XcYYGbu3x+HUAkVmJlzWJ7PxTWXc2Y49z2l9zznnOfcj4iIwDAMw9SXWOgEGIZhGjdWRhmGYTTCyijDMIxGWBllGIbRCCujDMMwGmFltCHKy0N4ONTqyqfFxYiJETQhhmGejZXRhujXXzFgAPburXwaEwNXV0ETYhjm2VgZbaDs7PD558jMFDoPhmFehJXRBqpzZ8yYgU8+ETqPuouOjt64cWN2drbQiTAMT/SETqCJUCgUkZGRUqm0oqKiqKjoWY8tWixOTrYuL0dxMZ71OGoUpk8HgM8/R69euHwZRkZCf7xa27Jly6effioSidasWePg4DB69GgXF5chQ4aIxewLm2myWBnVgszMzP79+6empr7wnc7OC65efcF7qoZxrVph82YsWoTduzVOkRcFBQVbtmwB0KZNm6KiovDw8PDw8E2bNnXo0GH8+PHjx48fM2ZM69athU6TYbSMlVEt2LVrV2pqqlQqtbe319PTMzU1fdZj69bq//wHenowNYVUihYtan48f75yzzNnYu9e7Nol6MerteXLl6enp9vb2//xxx9EdO3atdOnT586dSoxMTEgICAgIEAikfTv39/FxeWtt95ydHQUiURCp8wwWiBirUk0lJWVZWdnV1BQ8Ouvv77++uta2efx4/Dzw8WLAHDnDhwdYWWFuDit7FtXQkNDx40bp6+vHx4e3qdPnydfksvlp0+fPnPmzG+//VZeXg6gY8fBKtX1sWPx1lsYOxatWgmUNMNoAyujmlq2bJmvr++ECRP+97//VXuppKSkrKys2qNK1bqgoF9ZGUpKUONjq1YYPPhxGQXw2Wc4dqxBl9G8vDx7e/vk5ORvvvlm+fLlAJRK5a+//jp8+HBDQ8OqtxUUFISGhgYHB2dkTDx9eiK3UV8fw4Zh/HhMmIBevZ7a7dmzOH8eX38NqRQArl5FRAQWL+btYzFM7RCjgYSEBAMDA7FYfOvWLW7L/v37zczMDAwMnvUf3MHhY4Ce89O5cw2BKiooIICUSj4/XB3MnDkTwJAhQ5T/pPjbb78BMDIyGj16tI+Pz927d6v9SkwM+fjQ6NEklT7+7F26kLs7BQZSQQER0YYNJBbTV19V/sreveTiwt+HYphaYudGNeLt7V1WVjZz5kwHBwdui1gszs3N5f5sZGRkaGhY7bFz57bW1jA0hJFRzY9mZjUEmjoVJ04gLw9Ll/L24WorKCjo0KFDxsbGP/zwg0Qi4TYqFApHR8eIiIgLFy5cuHBhxYoVvXv3njBhwvjx44cOHaqvr9+nD/r0gZcXcnJw/jyCg3HuHBISsHs3du+GoSHc3dGuHVxd8c03mDYNXboI+iEZ5tnYQX393bt3r1+/fiKR6O7du3Z2dtzG8vLy4uJirmhqMda5cxg/HiYmiIlpWAUlKyurb9++6enpfn5+H374YbVXHz16FBwcfPbs2dDQ0Pz8fG6jqanp6NGj33ln+2uvdbSyeur9t2/jzBlcuIDLl7FiBQwMkJEBc3PcuIEzZ7BvH06cwOnT/Hyyhic7G4WFsLKqPMfBu61bt5qZmU2ZMsXU1FSQBBouoYfDjdjEiRMBLF68mJ9wbm4E0KRJ/ESrLTc3NwAjR45Uq9XPeZtSqZTJZN7e3k5OTiKRSCLRb9NGDZCtLXl6UmgolZU99f6MDEpPpw0baMkSKi0lOzs6dqwZH9Tfu0eDB1P79tS7N7VtSxs30nP/a+uCQqFo1aoVgPv37/McuuFjZbSe/vzzT5FIZGJikpaWxk/EtDRq3ZoAOnmSn4Av9tNPPwFo2bJlQkJC7X8rKSkpIOD0229TixaPz4q2bk1Tp1JAAD169PidXBklorNnqXNn8vNrlmW0rIzs7GjNmsrSef8+2djQ3r08Z3H8+HEATk5OPMdtFFgZrSdubtOaNWv4DLptGwHUqRMVFvIZtmapqalt27YF8P3339dvD2VldOECLV9OPXs+rqciETk50ZEjRE+UUSKaPJl69WqWZfTcOerUiSoqHm/ZuZNefZXnLKZOnQrg66+/5jluo8Bu0auP0FC5TBZubm7+Cb83vX/4IV59FcnJ8PbmM2zNFi1alJ2dPWbMmHnz5tVvD/r6GDUK33yDu3cRHw9/f7i5oUULhIejtLT6m319kZysac6NUmws+vaF3hNXg/v3R2wsnykUFxf/73//E4lE3Dkcphp2pb7O1Gp8+qmtVBq3cWNMy5Yt+QwtFmPXLgwYgG+/xcyZcHTkM/hTAgICTpw40bp163379mnlZqQuXeDuDnd3lJbiyhUMGgQAjo4oKKh8Q6dO8PdHTo7moRobIlS7DiwSVd+iYydPniwuLh42bFjnzp35jNtoCD0cbnwOHKic3alQCJPA8uUE0IABgk0jffjwoZmZGYCDBw/yEC4tjXx8aP9+HkI1SNyJYZXq8ZY9e2jwYD5TcHFxAeDn58dn0EaEldG6KS8nOzsCKCBAsByKi6lrVwJo2zYBoqvV6jfeeAOAq6srPxFv3SKAHBz4idbwlJZSp060ZUvl05QU6t6ddu3iLX5OTo6+vr6ent6jJy//MU9g50brZtcuxMWhZ0+8955gORgbw9cXVlaJR45Mq01bKe3y9/c/d+6cubm5v78/PxG5Cbj/PlvaXBgaIigIe/agTx+MHIl+/TBpEubP5y3+0aNHy8vLR40aZWFhwVvQRkboOt6YFBaShUVDmXL07rvTAUyZMoXPoHK5nJt6HRgYyFvQ+PjK+0SbNbWa7twhmYxycykvjy5donv3+Ik8cuRIAAECHn81eKyM1sHatQTQoEH8z32uQWpqKjcdOigoiJ+IKpVqxIgRAKZPn85PRE5aGgFkYcFnzIbn0iXauJFSUoj++Yvo5cVD2LS0NIlEYmBgkJuby0O4Rood1NdWVha2bgUAHx80hD6ZlpaWa9euBbB48eKioiIeIn733XdXrlyxtLTctm0bD+GqcM3/FQo+YzY8X3+NlStx/ToAcA0cbt3iIWxgYKBKpRo/fjzrt/0crIzW1pdfoqAAb74JLfUU1QJPT89XXnklKSlpw4YNuo51//79lStXAvDz8+Nm3fOmuZ8b5XCz2yIiAF7L6M8//wxg2rRpPMRqxIQeDjcOCQlkYEBiMf3TD6+hkMlkEolET08vIiJCd1FUKtXQoUMBzJ07V3dRnkMsJqDh9gnkw7FjBNCECZVP27UjgJKTdRozMTGRu+O5qKhIp4EaOzYarZX//hdlZZg+Hf/0w2sonJycFi1apFQqPTw81Gq1jqJs3rw5LCzMysrqm2++0VGI5+MGpM36uJ77mxceXvm0f39A5wPSn376iYhcXV1NTEx0GqixY2W0Vnx8sGUL1q8XOo+afPHFF9bW1jdu3Nitm6Xv7t69u27dOpFI9P3335vV2AxV99jpUXTpgjZtkJ6OR4+Ap4/xdebw4cNgR/S1wG4Grdn//R/u3cPRo+DaEPv5wdAQtrZCp1UTU1PTb7/99p133vHy8po4cWLHjh2f82ZuqefCwkKlUlnLxzNnzigUigULFnCz7gHExcV17NjRiMd1n9npUYhEePllXLqEW7cwYULl4FSXZfTevXtRUVFmZmZjx47VXZSmgZXRmsnlOH8efn7w9ASAhw9hbCx0Ts82efLkt9566/Tp00OHDu3Zs2dFRQVXLv/9WI+dW1lZSaVSbpkQACEhIe++++7bb7/9ww8/aPMzPBcbjQKAgwMuXUJEBD9llLu49M477zxnRRyGw8roMy1ejA0b8M47qNahvYGQy+UffPDBhg0bnJ2dAbz//vsXL15MTEyMj49/zm+ZmJjo6+s/67FFixZSqbTa44kTJ1JSUmbNmiWTydq2bdulSxe1Wr1///7BgwcvWLCAnw/LRqMAniqd3bpRZxuVbTtRabbESCcTJ9gRfe2xMvpM3bph3jwsXYojR4ROpSarV6++dOnS3r17uTL63XfflZSUvPPOO/PmzXtOoaxHoA8++GDYsGE3b96cM2fOqVOnevTosXv37unTp3t6evbr14+LrmtsNAqABjoq3xikcCRTAGLxgxCboqKw7hURLY1Gaz1WeHj4gwcP2rdvz91wwbyA0FMFGqipU2n3biosJGtrCg6mpUtp5Uqhc3pCVFSUWCw2NDRMTEwkorNnzwIwMzPLycnRRbjExERzc3MAGzZs4LZ4enoC6NSpU0ZGhi4iVjNsGAF05QoPoRoutVp565aJTCZSKnOIKClpiUyGtLRNuojFNdJdUtU0m3kudqX+eVq0wH//i2XLUK+Tijrk5eWlVqs//PBDGxsbIlq9ejWAVatW6ehKuo2NzeHDhyUSibe397lz5wBs2bJl2LBhycnJ06ZNU6lUugj6JAFHo/Hx8X///bcAgf9FJJIYGfUDqKQkEoCxsQOA0lLtnx4loiNHjoAd0dcaK6MvMGUKOnfGL788tTEmRshO7L/99tu5c+dMTU29vLwA/Pzzz7du3bKysvr3wpxaNGrUKG9vb7VaPXPmzPj4eKlUGhgY2LFjx19//fXzzz/XXVyOUOdG7e3tbW1tnZycjh07xnfsmnCls6QkAoCxsWPVn7UrLCwsMTHRxsbm1Vdf1frOmyRWRl9s+3Y8ec96YCAcHaHLkvUCK1asAPDZZ5+1b9++oqLC29sbwPr163U9A2n16tVvv/12Tk7O5MmTS0tLO3TocOTIEalU+tVXX3HrnemOIKPRCxcuREdHAygoKJgyZcrMmTNzhG6+/2QZNTTsLRYbKhSxKlWhdqNwF5emT5+ulXUNmgWhzyo0UNevU1zc46e//07R0ZSfT0T06BGZmRFAR48KkBhXsNq3b19QUEBE27dvB9CjR4+KJ5c805mcnBw7OzsA7u7u3Javv/4agKmp6d27d3UXd/Zsvltl5+fn29jYAPjss8/8/f1btGgBwMLC4qSgTRKLi2UyGW7f7sM9vXPHSSZDYWGYFkMolUqur6hOby9uYlgZrZWcHHr3XerVq3I59Z07CSBLS8rL4zUNpVLZu3dvANu3byeioqKiDh06ADh+/DhvOURFRRkbGwPYu3cvEanVam6Zs379+unuzus7dyg0lPhaypqIiFunz8nJqby8nIji4+Nf/6cnjZubm44u5b2QWl0WHq4fHi5RqYqJKCHhA5kM6enfaTFESEgIgJ49e2pxn00eK6O1UlZGvXoRQF98QUSkUpGzMwHk6clrGnv37gXQtWvXsrIyIuIaOw0aNEjNbwPUgwcPAjA0NJTJZERUWFjIFXdd9CH186MRI6igoPJpYCCtWKH1INWFhISIRCIDA4OYmJiqjWq12t/fn7u73NLS8syZMzrPoya3b78sk6Go6A8iysjwk8kQH6/NfjHc/8rly5drcZ9NHiujtXXlColEZGBQ2XQ8OpqkUhKL6fp1nhIoLS3lDjMPHTpERFlZWVzb5osXL/KUwRM8PDwAdO7cOTMzk4ju3bvHLZLKDZO1aNUqMjKijz6qfLp9O02dqt0I1eXm5lpbWwPYunXrv1+Ni4sbNmwYAJFI5O7uXlhYqNts/iU+fo5MhoyMHURUVHQtKqpDUpJG05JSUlKCgoK8vb1dXFwsLCzEYjGAs2fPainfZoGV0TqYM4cAeu21yu73Xl4EkL098XJasvIspL29vUqlIqLly5cDeOONN/iI/S/l5eXcxPsxY8YolUoiOnHihEgkkkqlv//+uxYDrVpF8+eThQWFhxPxUkZnzJgBwNnZWfmMxnxKpXLjxo3cLZJOToN/+023+VSTlfXj339Pzsur51i4vLw8MjJy3759S5YsGTp0KLckzJNMTEw+/vhj7ebc5LEyWgdZWZVtHg8dIiIqKSFbWwLov//Veei8vDyuWXJwcDARPXz40MjISCQShXPVRQhJSUnt2rUDsHbtWm7LsmXLuAPe1NRUbUVZtYo++4x27aKBA0ml0nkZPXnyJFdKYmNjn//OmJiYAQMGvPpqoEhE7u7Ec0NOtbo8LW3Tgwej790b/vChF5HqWe9UqYqLiq5nZOxISJh/9Oh7/75B3sbGxtXVde3atadOnUpKSuLzUzQZrIzWTUBA5bpA3DWG4GACyMSE4uN1G3fVqlUAhg0bxj2dO3eujs5F1snFixclEolYLOaOASsqKoYPHw7g9ddf13zmQHk5lZRUllGVigYOJD8/3ZbRzMxM7iL1jh07apeh0tubpFICqGdP+uMPXSX2b2lpG+/cGVBUdL2kJCo7+8CTLymV+YWFv6en+8bHz7pzxyk8XF8mA/cTFjaI+55zcXHx9vYOCgpiayZrBSujdaNW08iRBJCHR+WWqVPJwSFn7tx1uguanp7OHXxdvXqViO7du6enpyeVSl84YuLBl19+CcDMzCwuLo6IHj16ZGVlBcBLgwXXYmLIy4ssLOjbbyvLKBHdvEnt2tGGDToso1OmTAEwcuTIOl2yi4qi/v0JIImEvLxIodBVek+KjX0rNfWpv3Lp6b5//z05OrprVdHkfsLDpXfu9I+Pn5ue/l1u7lX+T+Y2B6yM1tn9+2RoSGIxhYUREaWl5bdq1RqA7mYULly4EMCkSZO4p2+//TaARYsW6ShcnajV6smTJwN4+eWXS0pKiOjatWv6+voikejIkSN12lV8PG3YQD16EFD5M23a4zJKRAsXUrt2NHUqpabSxx9r+Tj60KFDAFq2bMm1KaiT8nLy9iaJhADq04dkMm0mVqO0tE2RkW3S07+rqMjmtty/P/KfuqkfE9M7Pn5WerpvYeHvKlWJzrNp9lgZrY81awigvn2pvJzonznwnTp10sVXvVwu19fXl0gk3OSbP//8k1seJ43PWZTPVVBQ0LNnTwCzZs3itmzdupWbk3/nzp0X/npeHu3fT6NHk0hUWT3btiV3d+KuVD1ZRnNyqH17mjqVJk8mgOzsSFtXs1JTU9u0aVM1GbZ+/viDevYkgPT0yMurcoqx5tRqpUIRl5cXlJLiHRvrEhnZXqnMI6Ls7IP3779+65ZxaupaIsrLC8rOPlRaeketbs5LVgmDldH6KC2l7t3JxIR27JARkUql4u4+1sVsO649xLx587in3CTw1atXaz2QJv766y9uTv6ePXu4Le+++y6ALVu2POtXlEoKDaVZs8jYuLJ6GhqSmxsFBVV+OXFu3HjqnOO1axQaSjEx5OREAGnr8s6kSZMAjB07VsMZuKWl5OVVuQCfvT1FRNC1a3T58uM3RERQdPQLdqJWK4qLb2Zm+icmLrh795Vbt4yqHacXFj7+9igpiQwPlxYX39QkbUZDrIzW06VLBdbWzsbGxnK5nIj++usvqVQqkUi0e+mc54Z4muAOig0MDG7evElEhYWFp06dqvGdMpnM09PT0XGISKQGSCwmZ2fy9388x742KirIx4f09SuHpZrMOuJuamjdunWylhbavHyZunYlgCZNIjc30tOjyMjKl5YupVWrqr+/oIB+/538/cnTk5yd6c0306vVzagoy9hYl5QU77y8oPLyarMg1FFRVgUFAswdZqqwMlp/3LoaVTM3uYmcAwYMeNZ8w3oYN24cAG4en0qlcnBweP4QT1hciykbGxtuTn41sbGx3t7e3bp1q5pq4+ISsWULpaTUP2LV5R3uOLoel3cePnzIdRfkbmrQlsJCWrqUUlLIzY2GDSNn58q5xlwZzcigc+foq69o6lTq1u3x2Qzux9JSdft23/j4WY8ebS0ouMQdwlcjl7+XnPxxRsaOuDi3mJiXVCq2ALKQWBmtv8zMTK6ZcWBgIBEVFxd37doVwLZt27Sy/ytXrgBo1apVVlYW/XMLppWVFXclpwEqLy/nlrMfNWpU1XdJbm7u/v37R48eXdUuqGPHjp6entoatmtyeUetVnPr9Lm6umolmX9zc6Pdu2nQIOLOdnBldN68p+qmVEq9e9OsWeTrS7//TsXFL95tWVliRsbOlJRVGRm7lMp8IlKrtXQulqk7VkY1wq1p3KFDh9zcXPrnoLtly5YPHz7UfOfc+dYvvviCiMrLy7nWSvv27dN8z7qTmppqaWnJFaagoCA3N7eqlUuMjIzc3NyCgoJ00Yzq2jV66aXKkrR+PVVUPHM6+pN27NgBwNzcXHfTJ93caM8e+uMPMjenjIzKMrp3Lw0fTkuX0v799Ndf9bwLrqIiW6H4m4iUyoKYmB6RkW2JeG2twFRhZVQjarWaG38tXryY28JdrJgzZ47mez5w4MDgwYO5tknbtm3jsyGeJrjvkioSiWT8+PEHDx4srs0oSwMlJZWXd155Jc3e3v6Ffd7kcjk3G7euE7PqhCujRDR/Pn3wQc3nRushPz9YJsODB2O4p1FRHWQylJXFa2HXTN2xMqqpmJgYqVQqFouvXbtGRMnJyR988IF2Vyiqaoh34sQJLe5Wd2bMmGFkZNSlSxcfHx+eJ2ZdvkyOjm9wDag2bdr0rPPUKpWKW6xtxowZOs2nqoxmZZGFBb3+unbKaFlZkkyGyMi23NPY2PEyGXJzj2lh10zdsTKqBVw7ent7+/Inp+poz/r16wVpiKcJrn+KIIqLiz09PblTsYMHD77HteR6Gjez1dLSMjs7W6fJVJVRIvr+ewK0U0aJKDKynUyGsrIkIkpJWSWTISWlYU2Daz5YGdWCkpIS7sTlN998o/ne8vPzc3JyEhIS4uLiIiIiLly4wB17CtIQr/E6f/58p06duHOyPj4+T5b1e/fucQuu8NDu2suLqg4h1GpycyM/P+3s+cGDMTIZcnNPEVFOzlGZDLGxb2pn10wdiYgIjMZCQkLeeOMNIyMjX19fMzOzoqKiioqKJx8LCwuVSuWzHgsKClQqFff4751bWFjY2NjcuHGD/8/VqBUUFHz66afcZUBnZ+eAgIDu3bur1eoRI0aEhYXNmzePmzGqI48ewccH69ejZUud7D8lZcWjR5s6dlxraeldViaPibGTSjva26foJBjzXKyMas24ceMiIiIyMzM13I+pqamenl7VY2FhoVwuHzhwICuj9RMcHDx//vyUlBRjY+ONGzeWlJSsXLnSysoqOjpaR+tRc1xdERSEuXOxb59O9p+b+4tcPq11a1c7u5MARUa2Valy7e3TpNIOOonHPBsro1ozZ86c/fv39+7du0+fPiYmJvr6+v9+bNGihVQqfdYjVzqr7bakpKRDhw6FhYX3799/6aWXBPlojV12dvaiRYt++eUXAGKxmIhCQkLGjBmju4j792POHLRqhehodOqkkxAKxYPbt3vo63fq1y8JwIMHrxcWXu7ePbhlyzd0Eo95DmHPKTQZarWaaxAXWXXfn/bMnj0bgLe3t9b33KwcPnxYKpW2bNlSX1/f399fd4EePqxcO/bAgRe/WQOqiAhTmQwVFZlElJy8TCZDesImnYZkasTWqdeOqKiolJQUS0tLe3t7re/8vffeA3Dw4EFihw4auHv3bkVFhVKpLC8v9/DwcHV1ffTokdajEGH+fOTmYuJEvPee1nf/JLGRYX/TDBtlSgyADjGDnSaYt//kpk5DMjViZVQ7uDnnLi4uVbc8atHIkSOtra3j4uKuX7+u9Z03E5GRkRs3buQa9QcGBrZt2zYoKKhXr17cBSgt2r0bwcEwN4e/v3Z3XIMee5xempBk+MsNAHrWvZGRhYgInUdl/oWVUe0IDg4GMH78eF3sXCwWT58+HQB3Wz1TV2VlZf/5z38qKio++uijESNGuLm5xcTETJw4MS8vz8PDY+rUqZpfGOQkJODTTwHAzw8deLjS09ceQGXp7NULxsaQy5GXp/vAzNOEPqvQFOTk5HCreuTl1dCMRytiYmIAtGnTRsHPIhVNi5eXF4AePXpU6+oSGBjIXaxv3779sWOa3gKkUtFrr1U27edJZCQB9NJLlU8HDSLgqf6mDC9YGdWCw4cPAxg5cqROo7z88stoPPeDNhzXr1/n1t2rceXnhISEUaNGcUMKNzc3rplW/fj6EkDt2lF6ugbp1kl5eeWCNlyv1gULCKCtW/kKz1RiB/VaoNMj+ipVF5p0GqWJUSgU77//vkql8vLy4prIVNO5c+fQ0FB/f/8WLVocOXKkb9++QUFB9Qj0998PfXwIwPffo317TdOuLakUffpArUZUFAA4OABgp0cFIHQdb/RUKhW3Ku/t27d1GiglJUUikejr62syYmpuli5dCqB3796lpaXPf6dcLn/ttde4fxRubm51Wl9AqVQOGTKkY8dXPv5YCw0S6+aDDwig774jIrpxo3KNMIZfrIxqiru5yMbGhodY3Ixxnc55bErCwsLEYrGenh63rskLqdVqf39/blGpzp07X7hwoZaBNm3aBMDKykqAxV38/AiguXOJiBQKkkpJIqlV52dGe9hBvaauXIkQi8VvvvkmD7FmzZoF4MCBAzzEauyKi4vnzJmjVqtXr149YMCA2vyKSCRyd3eXyWQDBw5MTEwcM2aMh4dHUVHR83/r7t273t7eIpFoz549Or27tGaOjgBw6xYAGBigVy8AiI3lO41mTug63ugNHkzm5unBwUk8xCoqKmrRooVIJIqLi+MhXKO2YMECAA4ODvXoXlhRUeHj42NgYACga9eul5997buiomLgwIEAPDw8NMu3voqLydiYhgypXOwpLo4NRfnHyqhGMjNJIiEDA9LBAvU149bR27BhA0/xGqcLFy6IRCIDA4O//vqr3juJjo52dHTEP6PUGrv3r1u3DkCXLl0K6rSuqXZxrakvXaJVq2j5cvrhB3rRiWBGu1gZ1ciBAwTQuHH8RTx37hwAruEbf1Eblby8PBsbGwA+Pj4a7ooblnLLSfXq1evGjRtPvhoZGamvry8Wiy9duqRhIE0tX042NuTjQzt30siRZG9P+fkCp9ScsDKqkRkzCCBfXyC9NdYAAA1DSURBVP4iqlQqrgfKn3/+yV/URmXOnDkABg8erK2VrqOiovr37w9AT0/Py8uLuwOirKyM65/w0UcfaSVK/clkZGREVasoqlQ0fLjWmuwztcDKaP0plWRuTgA9eMBr3OXLlwNYsmQJr1EbidOnTwMwNDTU7vyz0tJSLy8viUQCoG/fvjKZbOXKlQBsbW0LeTuh8yy+vvTWW09t2bePhg8XKJvmiJXR+rt2jQCyteU77q1btwC0a9dOR0s/NV65ubnW1tYAfHVzgHD16tXu3btzZ0vFYrFYLP7tt990EahuPv6Y3N2f2nLuHHXtKlA2zRGb8FR/wcEA4OLCd1wHB4d+/fplZmaGhITwHbthW7hw4cOHD52dnZcsWaKL/Q8ZMiQqKmrmzJlEJJFI5syZM2zYMF0EqhsLC2RlPbUlMxOWlgJl0xyxMlp/3HrsOr4FtGbc9Xo2gfRJp06dOnz4sImJyQ8//CAW6+ovtpGR0cGDBw8ePBgSErJ9+3YdRakbJydcuYIn57eeOQMnJ+ESanbYIiL1lJEBS0sYGCArC8bGfEdPSUnp3LmzVCpNS0tr3bo13+EbnqysrL59+6anp+/atcvDw0PodPhFBBcXlJZizRq0bo3Dh7F/P2QyWFsLnVlzwUaj9XT2LNRqjBwpQA0FYGVlNXz4cIVCcfz4cQHCNzwLFy5MT08fNWqUu7u70LnwTiTCsWOYMAEbN2LJEpSU4MYNVkP5xMpoPXEnRgU5ouewG0OrHDx48OjRo61atdq3b58uVh9oBAwN8cknCA1FWBi2bYONjdAJNS/soL6eoqNx+jTee0+wv7EFBQWWlpalpaVyubxLly7CJNEApKam9uvXLycnJyAggJsxyjA8Y6PRGpw/j6++evw0IwPvvgsAISGYPh05OQDQrx/GjMGePXznFhkZyf2hZcuWEydOJKKff/6Z7yQakilTpuTk5Li4uLAaygiFldEayOW4du3x0+JinDgBAH//jWPHsGJF5faUFFy6xF9WXAfiAQMGhIaGclumTp0KwMfHh78kGphly5Zdv37d0NBQ6yvTMUztsTJaN2++ieDgp4osP2JjYwcNGrRv3z4jI6Pi4mJuY8uWLQEUFBRwKzU1Q4mJiQCsra0t2TRJRjisjNYsLw83blT+cAs0cExM8NVXWLAAFRX8JXPmzJlXXnklOjr6pZdeun79+ttvvw0gODh4ypQpAFq1atWnTx/+smlIxo4dC+DRo0f5+flC58I0X6yM1uzBA6xdW/nz7bdPvTRzJszM4OvLRxoqlWrt2rWurq65ubmurq43btzo27cvEW3atMnFxSUvL2/o0KFRUVHN9PI0sGDBghEjRhQVFe3cuVPoXJhmTNBbURuonTvJxeXxU7mcpFIiou3baeZMIqLoaGrThnbuJGdnHaaRmZnJjbb09PR8fHy4znh5eXncaFQikXh7e6tUKh1m0BhwZ4rNzc2FbxHCNFdsNFofffti7tzKq/llZdi8GQqFlkOEh4cPHDjw/Pnz7dq1O3funJeXl0gkioiIcHR0PHnypLm5+dmzZ9euXau7ux4bi9GjRzs7O2dlZe3hf9oEwwBgB/X15u0NlQoA1q2DlxccHXHzptZ2/uOPPw4bNiwhIcHZ2TkyMpJbSP3AgQNDhw6Vy+VOTk43b97kBqoMgP/7v/8DsHnz5tLSUqFzYZoloYfDDdGtWxQY+PhpXh5xbdTDwyko6PH2sDA6cICioqh/fwJIT4+8vEih0Ch0aWnp+++/z/2vcXd3LysrIyKFQuHp6cltnDVrVklJiUYxmiJu0bodO3YInQjTHLEyqgWlpeTlRRJJ5SLh4eH13E9iYiK3PpqRkVFAQAC3MSkp6ZVXXgFgaGj4/fffayvnJubo0aMAOnXqxH3xMAyfWBnVmuvXqUePx8PSuv5zPnPmDLc8b/fu3asWYvv111/bt28PwMbGptpCQMyT1Gp1v379AOzdu1foXJhmh5VRbSopIS8vEosJIHt7ioio1W+p1WofHx/uYtFbb72Vm5tbtZFbteLNN9/MycnRbeqN36FDhwDY2dlVVFQInQvTvLAyqn1hYdStGwFkaEg+PvT8ddWysrLGjRuHpycw5efnT5o0CYBIJPLy8mKzmmpDqVT26NEDwMGDB4XOhWleWBnVieJi8vQkkYhsbRXDh4+9d+9ejW8LDw/v2rUrAHNz89DQUG5jRESEnZ0dgLZt2547d47HrBu9ffv2AejVqxf74mH4xMqoDgUH0/DhHwEwNjb+7rvvqq0sn52dzd0U/+qrrz78Z3XcAwcOGBsbA3B0dJTL5UJk3YiVl5dzX0tHjhwROhemGWFlVLfy8vKq+rE7OzvHxsY++aqfn9/ixYvZrCYt4u4Kffnll6t9aTGM7rAyyoezZ89aWVlxw1JfX99//wtPTk4ePHgwN6tpz549giTZNCgUCu4/ddCTU3wZRpdYGeVJbm5u1bB07NixSUlJVS9dunTJwsKCzWrSFl9fXwCDBg0SOhGmuWBllFeBgYHm5uYAWrVq5e/vr1KpNm7cyM1qmjBhQnZ2ttAJNgWlpaVc+9GQkBChc2GaBbYWE9/S09M9PDxOnToFwNDQUKFQiMXizz//fM2aNazPiLZs2rRpxYoVQ4YMuXr1qtC5ME0fK6PCOHLkyPz58wsKCgD8/PPP73KLPTFaUlxc3KVLl6ysrCtXrgwfPlzodJgmjpVRwchksrt37/bs2ZO7j57RrvXr13t7e48ZM+b8+fNC58I0cayMMk1Tfn5+ly5d8vLywsLCnJ2dhU6HacrYyTimaWrVqtWiRYvQvFdOZfjBRqNMk5Wdnd21a9fCwkKZTObk5CR0OkyTxUajTJPVtm1bDw8PAF9x6738o4LPZV2ZZoCVUaYp++STT4yMjI4fP3727FkA5eXlS5cu7datW3FxsdCpMU0HK6NMU2ZhYTFw4EAi+uijjwDo6+uHh4cnJSXt2rVL6NSYpoOdG2WauBs3bgwdOpSI7ty507179+Dg4AkTJnTo0EEulxsZGQmdHdMUsNEo02Tdv3+fiAYNGjRr1iylUsldsh8/fvzAgQMfPXq0d+9eoRNkmghWRpmmacmSJb179z59+jSAVatW6enpHThwID4+HsDKlSsBbN68uby8XOAsmSaBlVGmaerWrZtarV63bh0R2drazpgxo6Ki4uuvvwbg6upqb2+fnJy8f/9+odNkmgJ2bpRpmhQKha2tbVpaWkhIyNixY2NjY3v16qWnpxcXF2dlZfXLL79MmzbN1tb2/v37enp6QifLNG5sNMo0TYaGhkuXLgWwbt06AN27d58yZUpZWdmWLVsAuLm59enTRy6X//TTTwInyjR+bDTKNFlVfZ4uX748YsSI27dv29vb6+vry+VyS0vLH3/8cfbs2d27d7979y7X8pVh6oeNRpkmy8TEhFve6ssvvwTQp0+fiRMnKhSKb7/9FsDMmTO7d+8eGxt79OhRgRNlGjk2GmWasmp9niIiIpycnIyNjRMSEszNzffs2bN27d5hw77/+ee+IpHQuTKNFhuNMk1ZtT5PDg4O48aNKy4u3rZtG4DZs+cYGl7/5Ze+p04JnCfTqLEyyjRxy5YtMzU1PXPmTHh4OIA1a9Z07frG1auz8/Ohry9dulQEYP16sKMypt5YGWWauGp9noYMGdK169mLF239/ABg/nx07IiICISECJsm04ixMso0fR9//LGDw/yUlO23bwPAqlUiAFu3oqgIhoZYtgwA1q8XNEWmMWNllGn6OnTo4Oy8+48/OmzcCAAjR2LoUGRnw98fABYuRLt2uH4dly4JmybTWLEr9Uyz8PAh7OygUuHOHbz0EoKDMWECLCwQHw8jI3z5JVavxqhRuHBB6ESZRoiNRplmwdoas2dDpQK3MtP48Rg4EOnp4No8LVkCMzNcvIiwMGHTZBolVkaZ5mLFCujp4eBBxMcDwMqVALB5M8rL0bIlFi8GgKdXG2GYWmFllGkubG0xYwYqKrB5MwC4usLeHsnJ4No8LV0KU1OcPQuZTNg0mcaHlVGmGVmzBhIJAgKQkgKRqHJA6uMDpRJt2mDhQgDYvVvYHJnGh5VRphnp1g1TpqCsDFu2AICbG/r0gVwOrs3T8uXYuxfcfFKGqT12pZ5pXu7cQb9+0NeHXA5LS/z4I2bPhqsrTp4UOjOm0WKjUaZ56d0bEydCocC33wLAjBk4eRLHjwudFtOYsTLKNDurVwNAeDgA6OnhxAlYWSEvr/LVVauwfLlguTGNESujTLPj5ASZDKGhj7eo1VizRriEmEaOlVGmOXJyeurphx/iyBHcvClQNkwjx8oow6B1a2zYgAULoFIJnQrTCLEyyjAA8P77kEqxc6fQeTCNECujDAMAYjF27MD69cjJEToVprFhZZRhKjk6YurUyntDGab2WBllmMc2bkTr1kInwTQ27C4mprlLSICxMdq3r3yamAiJBNbWgubENCqsjDIMw2iEHdQzDMNohJVRhmEYjbAyyjAMoxFWRhmGYTTCyijDMIxG/h8KzSzgkLLkuwAAAgR6VFh0cmRraXRQS0wgcmRraXQgMjAyMy4wMy4yAAB4nHu/b+09BiDgZYAAJiCWAmJZIG5gZGNIANKMzBCaiUmAQQFIs3EwaAApZiYYzQ4WhqtiA3NZEFwYDVLNxMIOoZnZHcC6mdkcMsA0IxtEgAUugFABk0BTgKTSAsRghCvFMBwmwM3AyMDIBLSeg4mJBYhZGVjZGNjYGdg5GNg5GTi5GLi4OZjZeRh4eBN4+TKY+PgT+AWAlKCCoFAGk5BwgrBIBpOIaIKoWIKYeAaTuESChGQGEwcrgwBPgqRggphQgggLyPOsHOxsrLw8Avx8rMJCYqIibOISkoJCYuJOjMDwhIY1g1T3ohcOQVUMDiCO3ccbDkbM4vYg9tLzKx22TJxjB2JH7VjgcHHVY7D4h2ebHL4nTt0PYovHlDpYX9hoA2JX3FR1WLsvBqzmltQD+3nTD+0DsXkm2Dv8tZ0DVt/Bmmmvtvo8mP0t94T9ZV27AyD2FB0+B07nLjDbXJvJfueJ12B7F99J289w0m8viN2a/XJ/D+NEsPn3llXvT2WWALv59OJXdiuu/QKL/18ecuDJlC4wu/pNw4HHzWVgN+xSSTyQGXIZbG9QwbQD51aogO1aZLjvQPvOu2DxmU83HJj6ZQpYva3bqQMq5dVgcw6t3XygcoIw2K7FW5oPnD0mBmaLAQBWj4dpTEHFHAAAAnt6VFh0TU9MIHJka2l0IDIwMjMuMDMuMgAAeJx9VdFuHDEIfL+v8A/cCjBgeExyUVVVuZOatP/Q9/6/Ouw1WUe1updFy+4YMzA4p1bX98u3X7/bxyWX06k1+s9fZrafnYhOL60e2uPzl6/X9vT28Pj+5un24/r22sSbJNbg9xn78HZ7eX/D7amNTTxDpclGNNS9ER7qOlYKcL6NkaqBzxYZ2Re43l6bbZ3ccuBzJxtI+F+cthtwJGKkjRE43GiBsx1nSZ7UzryxDzJZAL1dW9+idxCoz8KDVkQGiAgCcs8iEi4StsAFcMjLKDjbGUyCyFeMcw+Y2ZFaZShCrqsMGZ3B62QS5UJia+UVaeZ9c3ML83ZG9MGmY4UU0BbsyToQU7eO3WOVJncg0TgKHZWdOhmvCsSKzUE4iQO9wROhR8sasRWUt5BuWW3kLuFLRv43aHTCKtn6MKElo7HnqRYSjJBp6WOZZ3Xo3MFYhtXmFOK+0hpXi1AbkojqEW2iNPpqd6F7UOMR93a6MaEkCyjfow5iQcPQJRsStKq9VJfOtqV2s6yoA1nLMmqvqFA8Qsk916SUFS2sR1RHARhTW8oKaHnJyu5BnTWdq/pkvhxfqTECKWaD3gtpFrFK9Pl6+XSQ3I+Wx9v1chwt9ZPjBIHT+nFQwGl6nAfl2jH2DNeP4Wbc45hhxh3HqDLuPAayXJ7njnfD03z1MizTHO2L+jQuWoZ1mgstwzbJv1yIe5K5luExyZl3TEy61TKckz61jMwy1DLCk9q0jMgkKi0jfdKOlhGdJKJlxCYplItGTy1n1OzwR2UzplpIZVywDw6S950ODiWHufnlv/9PwvPpD+EGSFe65pzbAAABVHpUWHRTTUlMRVMgcmRraXQgMjAyMy4wMy4yAAB4nCWRO27mQAyDrxIgjQ2MB5JGT/zYyk2qpEi52Mq9T5DDh/IWBmyC+kTR5/m9/fna+/nk89zO8/1z3265ru241qXX9ff++Hfpfd1rv27ZT3772WKKV+qQSRQa4+UzotQGTcvKWuNlc5E7hEUWVS2QiA2GM93624q8xsGTPQjKmrlWNISEoYArMLFCSRdJeDBulDIOgJPIsYlmMYlyk+DCC1zmlj4OmRVs1iARRtJD5xLy7DGANARwdTL28QK0iJO08WSk2bcBm7KsEJ2XZPsWIBJ9DLJ4exSZM6MHRSlWPC7jaA25jIkfWxALdzALQYrDZukyb1MAKo9kkrQeVlEJyjscG5kCYSvRRDw2Zy3HT0DFXg+d2bIFs8z/9+QitpbCsBdXq6UkI3pZdQ+oqBY/KQXN6Nh/fgHuDG2NLcTdxAAAAABJRU5ErkJggg==", + "text/plain": [ + "" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mol = dm.to_mol(\"CCS(=O)(=O)N1CC(C1)(CC#N)N2C=C(C=N2)C3=C4C=CNC4=NC=N3\")\n", + "\n", + "mol" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "49438480-7b61-424d-8753-3ee0898a5cf7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
namesmilessmartsgroupmatches
204diazineC1=NC=CC=N1[#6]1:[#7]:[#6]:[#6]:[#6]:[#7]:1rings_in_drugs((24, 23, 22, 18, 17, 25),)
2341H-pyrazoleN1=CC=CN1[#7]1:[#6]:[#6]:[#6]:[#7H]:1rings_in_drugs((12, 13, 14, 15, 16),)
2571H-pyrroleC1=CC=CN1[#6]1:[#6]:[#6]:[#6]:[#7H]:1rings_in_drugs((20, 19, 18, 22, 21),)
\n", + "
" + ], + "text/plain": [ + " name smiles smarts \\\n", + "204 diazine C1=NC=CC=N1 [#6]1:[#7]:[#6]:[#6]:[#6]:[#7]:1 \n", + "234 1H-pyrazole N1=CC=CN1 [#7]1:[#6]:[#6]:[#6]:[#7H]:1 \n", + "257 1H-pyrrole C1=CC=CN1 [#6]1:[#6]:[#6]:[#6]:[#7H]:1 \n", + "\n", + " group matches \n", + "204 rings_in_drugs ((24, 23, 22, 18, 17, 25),) \n", + "234 rings_in_drugs ((12, 13, 14, 15, 16),) \n", + "257 rings_in_drugs ((20, 19, 18, 22, 21),) " + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "group.get_matches(mol, use_smiles=True)" + ] + }, + { + "cell_type": "markdown", + "id": "02258f63-0472-42a8-909d-743434254cf8", + "metadata": {}, + "source": [ + "You can also display all the filters for a given group." + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "381f3166-2241-4ccd-b213-684309bd655b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
namesmilessmartsgrouphierarchymol_smartsmol
191benzeneC1=CC=CC=C1[#6]1:[#6]:[#6]:[#6]:[#6]:[#6]:1rings_in_drugsmedicinal_chemistry.rings.rings_in_drugs.rings...<rdkit.Chem.rdchem.Mol object at 0x7fa4c4165c40><rdkit.Chem.rdchem.Mol object at 0x7fa4c41698c0>
192pyridineC1=CC=CN=C1[#6]1:[#6]:[#6]:[#6]:[#7]:[#6]:1rings_in_drugsmedicinal_chemistry.rings.rings_in_drugs.rings...<rdkit.Chem.rdchem.Mol object at 0x7fa4c4165cb0><rdkit.Chem.rdchem.Mol object at 0x7fa4c4169930>
193piperidineN1CCCCC1[#7]1-[#6]-[#6]-[#6]-[#6]-[#6]-1rings_in_drugsmedicinal_chemistry.rings.rings_in_drugs.rings...<rdkit.Chem.rdchem.Mol object at 0x7fa4c4165d20><rdkit.Chem.rdchem.Mol object at 0x7fa4c41699a0>
194piperazineN1CCNCC1[#7]1-[#6]-[#6]-[#7]-[#6]-[#6]-1rings_in_drugsmedicinal_chemistry.rings.rings_in_drugs.rings...<rdkit.Chem.rdchem.Mol object at 0x7fa4c4165d90><rdkit.Chem.rdchem.Mol object at 0x7fa4c4169a10>
195cyclohexaneC1CCCCC1[#6]1-[#6]-[#6]-[#6]-[#6]-[#6]-1rings_in_drugsmedicinal_chemistry.rings.rings_in_drugs.rings...<rdkit.Chem.rdchem.Mol object at 0x7fa4c4165e00><rdkit.Chem.rdchem.Mol object at 0x7fa4c4169a80>
\n", + "
" + ], + "text/plain": [ + " name smiles smarts \\\n", + "191 benzene C1=CC=CC=C1 [#6]1:[#6]:[#6]:[#6]:[#6]:[#6]:1 \n", + "192 pyridine C1=CC=CN=C1 [#6]1:[#6]:[#6]:[#6]:[#7]:[#6]:1 \n", + "193 piperidine N1CCCCC1 [#7]1-[#6]-[#6]-[#6]-[#6]-[#6]-1 \n", + "194 piperazine N1CCNCC1 [#7]1-[#6]-[#6]-[#7]-[#6]-[#6]-1 \n", + "195 cyclohexane C1CCCCC1 [#6]1-[#6]-[#6]-[#6]-[#6]-[#6]-1 \n", + "\n", + " group hierarchy \\\n", + "191 rings_in_drugs medicinal_chemistry.rings.rings_in_drugs.rings... \n", + "192 rings_in_drugs medicinal_chemistry.rings.rings_in_drugs.rings... \n", + "193 rings_in_drugs medicinal_chemistry.rings.rings_in_drugs.rings... \n", + "194 rings_in_drugs medicinal_chemistry.rings.rings_in_drugs.rings... \n", + "195 rings_in_drugs medicinal_chemistry.rings.rings_in_drugs.rings... \n", + "\n", + " mol_smarts \\\n", + "191 \n", + "192 \n", + "193 \n", + "194 \n", + "195 \n", + "\n", + " mol \n", + "191 \n", + "192 \n", + "193 \n", + "194 \n", + "195 " + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "group.data.head()" + ] + }, + { + "cell_type": "markdown", + "id": "47aa1cd0-735d-48f9-8ece-9041a52878f0", + "metadata": {}, + "source": [ + "## Load groups from a hierarchy" + ] + }, + { + "cell_type": "markdown", + "id": "31dcf870-c79c-493a-8a33-31cb279fb0f4", + "metadata": {}, + "source": [ + "Groups are organized as a hierarchy. It's possible to load many groups at once." + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "b0bd1a1d-c8c6-4e50-9c18-8a3315b36809", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['environment.emerging_perfluoroalkyls.emerging_perfluoroalkyls',\n", + " 'materials.clay.montmorillonite_adsorption.montmorillonite_adsorption',\n", + " 'materials.polymers.common_monomer_repeating_units.common_monomer_repeating_units',\n", + " 'medicinal_chemistry.warheads.electrophillic_warheads_for_kinases.electrophilic_warheads_for_kinases',\n", + " 'medicinal_chemistry.warheads.common_warheads_covalent_inhibitors.common_warhead_covalent_inhibitors',\n", + " 'medicinal_chemistry.rings.rings_in_drugs.rings_in_drugs',\n", + " 'medicinal_chemistry.rings.iupac_blue_book_rings.iupac_blue_book_rings',\n", + " 'medicinal_chemistry.rings.phase_2_hetereocyclic_rings.phase_2_hetereocyclic_rings',\n", + " 'medicinal_chemistry.scaffolds.privileged_scaffolds.privileged_scaffolds',\n", + " 'medicinal_chemistry.scaffolds.iupac_blue_book_substituents.iupac_blue_book',\n", + " 'medicinal_chemistry.scaffolds.common_r_group_replacements.common_rgroup_replacements',\n", + " 'proteins.kinases.braf.inhibitors.braf_inhibitors',\n", + " 'proteins.kinases.scaffolds.privileged_kinase_inhibtors.privileged_kinase_inhibitor_scaffolds',\n", + " 'organic_synthesis.solvents.common_organic_solvents.common_organic_solvents',\n", + " 'organic_synthesis.protecting_groups.amino_acid_protecting_groups.amino_acid_protecting_groups',\n", + " 'narcotics.schedule_one.schedule_one',\n", + " 'narcotics.schedule_two.schedule_two',\n", + " 'narcotics.schedule_three.schedule_three',\n", + " 'narcotics.schedule_four.schedule_four',\n", + " 'narcotics.schedule_five.schedule_five']" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "medchem.groups.list_default_chemical_groups(hierarchy=True)[:20]" + ] + }, + { + "cell_type": "markdown", + "id": "592b2f69-7b70-47f9-841e-8c8cf8359937", + "metadata": {}, + "source": [ + "For example you can load all the hinge binder groups with:" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "c247ad0a-fc75-4a14-9b1d-78f9c0ad9442", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['medicinal_chemistry.chemotype.kinases.NAK.hinge_binders',\n", + " 'medicinal_chemistry.chemotype.kinases.ABL.hinge_binders',\n", + " 'medicinal_chemistry.chemotype.kinases.ACK.hinge_binders',\n", + " 'medicinal_chemistry.chemotype.kinases.STKR.hinge_binders',\n", + " 'medicinal_chemistry.chemotype.kinases.AKT.hinge_binders',\n", + " 'medicinal_chemistry.chemotype.kinases.ALK.hinge_binders',\n", + " 'medicinal_chemistry.chemotype.kinases.AUR.hinge_binders',\n", + " 'medicinal_chemistry.chemotype.kinases.GRK.hinge_binders',\n", + " 'medicinal_chemistry.chemotype.kinases.RAF.hinge_binders',\n", + " 'medicinal_chemistry.chemotype.kinases.SRC.hinge_binders']" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "group = ChemicalGroup(\"hinge_binders*\")\n", + "\n", + "group.list_hierarchy_groups()[:10]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "56d598aa-bfdb-4977-b812-92322129b0e6", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/docs/tutorials/Constraints_Filtering.ipynb b/docs/tutorials/Constraints_Filtering.ipynb new file mode 100644 index 0000000..77eb8cf --- /dev/null +++ b/docs/tutorials/Constraints_Filtering.ipynb @@ -0,0 +1,533 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "232ca916-16ba-4b7d-9b3f-0542c88eb6af", + "metadata": {}, + "source": [ + "_INTRODUCTION_" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "cc35111a-d3a8-4313-962c-290bbf563f35", + "metadata": {}, + "outputs": [], + "source": [ + "%load_ext autoreload\n", + "%autoreload 2\n", + " \n", + "import datamol as dm\n", + "import pandas as pd\n", + "\n", + "import medchem" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "930d8d6b-dd63-4f95-9cb0-5864d5006763", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def my_constraints(mol):\n", + " # we want to match either (have phenol) OR (have less than 7 atoms and not ring)\n", + " return mol.HasSubstructMatch(dm.to_mol(\"Oc1ccccc1\")) or (\n", + " mol.GetNumAtoms() < 7 and dm.descriptors.n_rings(mol) < 1\n", + " )\n", + "\n", + "\n", + "smiles = [\n", + " \"CN(C)C(=O)c1cncc(C)c1\", # match, n_atoms < 7 and no ring\n", + " \"Cc1cncc(CC2CCCCC2)c1\", # not match, n_atoms < 7 but ring\n", + " \"Cc1cncc(c1)-c1ccc(O)cc1\", # match phenol\n", + " \"Cc1cncc(c1)-c1cccc2nc[nH]c12\", # no match n_atoms >= 7\n", + "]\n", + "\n", + "expected_results = []\n", + "mols = [dm.to_mol(x) for x in smiles]\n", + "\n", + "dm.to_image(mols)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "3d39efc4-ef2c-467c-a7f3-414d6a406a87", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcIAAACWCAIAAADCEh9HAAAABmJLR0QA/wD/AP+gvaeTAAAZVUlEQVR4nO3df1RT990H8G9+AAmGXwn4g/iroJlgwSMgCEOBpELQrqt1zqOn53h21j6etd1pt7Oetf1j6/7c6c76PH3c6nBbVx430a3+opMbBAQVjCg/RBGH8lsgSAg/Qwgkuc8f6ePTgU1ibpKb5L5ff60k9+aTtbz53vv9fL+XR9M0AQAAd/HZLgAAILAhRgEAGEGMAgAwghgFAGAEMQoAwIiQ7QKAW3p7ydgYIYSkppKQkMWvWq2ktZUQQpKTiVjs69oA3IPRKPjUL39JMjJIRgb5+OOnvDo9/dWrnZ0+rwzAXYhRYMevfkV6etguAsATEKPAAqGQzM6St99muw4AT0CMAgsOHCCRkaS8nJw9y3YpAIwhRoEFcXHk3XcJIeTtt8nMDNvVADCDGAV2/Oxn5LnnyMAA+eUv2S4FgBnEKLBDJCIffUQIIZ988lWTE0CAQowCa/btI8XFxGIh//EfxGZjuxoAdyFGgU3/+Z8kLIzcvElKStguBcBdiFFgk0Lx1VzTBx98tboJIOAgRoFlH3xAEhLI+Dj51a/YLgXALYhRYJlYTP7rvwgh5NNPSUcH29UAPDvEKHjd/Px8TU3N9PT0N73hxRfJSy8Ri4W8996//bypqamrq8vr9QEwgx2ewItomm5ra6uqqpqZmZmamnr55Ze/6Z3//d+kuppcufL/P5mamtJoNAsLCwkJCWq1Oi4uzhcVAzw7jEbBW4aGhv785z+fO3duZmYmPj4+IyPDwZvXriUffPBvP5FIJCqVKiwsrLu7+9ixYxRFmc1m71YM4BaMRsHzpqenq6qq2traCCEREREqlSo1NZXH4zk+6mc/I//zP+T+/a/+kc/nZ2Vlpaam1tXVNTY23rhxo62tLS8vLzMz0+mpAHxJ8OGHH7JdAwQPi8Vy/fr1v//970NDQ0KhMDs7e//+/XK5/EnwPXhACCG5uWTbtsXHCgTk+efJ4CBJSCD79pGYGEIICQkJ2bBhg0KhGB0dHRsbe/jw4b/+9a+4uLjo6Ghffi8AB3h4Tj14SmdnZ0VFxcTEBCFEoVAUFxd7Nuy8fX4A9yBGwQN0Oh1FUX19fYSQlStXqtXqdevWeeODLBbLjRs3rly5Mj8/LxQKs7Kydu7cGRoa6o3PAnARYhQYMZlM9nuXNE2LxWLf3Lt0794rgJcgRsFNNpvt5s2bly9fNpvNfD5/27ZtBQUFYWFhTg+8fv36unXr4uPjGRYwODhIUdSjR48IIXK5XK1Wr169muE5AdyAGAV3dHd3UxQ1OjpKCHG9r7O9vX316tXd3d2tra0/+MEPmJfx9b5UQkhqauquXbskEgnzMwO4DjEKz2ZsbEyj0Tx48IAQIpPJioqKNm7c6PSooaEhmUym1Wr1ev0rr7yi0+lWrVrlqZIWFhbq6+uvXbtmtVpDQkJycnJ27NghEAg8dX4AxxCj4Kq5ublr165ptVqr1SoSiXJzc7dv3+40rWZmZsLDw7/88kuxWJyfn3///v2UlBRvlGcwGKqrq+/du0cIkUqlKpUqOTnZGx8EsAhiFJyjabq1tbWqqmp2dpbH46WnpxcUFISHhzs+ymq1CgSCsrKyxMTEpKSkpqamvLw8b5fa1dWl0WjsdxsSExOLi4tlMpm3PxQ4DjEKTvT29lIUJRQKBwcH169fr1arV6xY4cqBf/vb39LT06VSqVar/c53vuPtOp+w2WwtLS01NTVhYWHT09NbtmxRKpVOQx/AbYhR+EYTExOVlZUdHR2EkOjoaLVa/a1vfcuVA8+cOZOdnT07O3vr1q0DBw54ucynM5lMWq326tWr9k6sgoKC9PR0Ph+bSIDnIUbhKeyTNvX19RaLxT5pk5ubKxQ634GhqqoqMzOzq6vr/v37Bw8epGma3XZOvV6v0WgePnxICImNjS0qKtqwYQOL9UBQQozCv6FpuqOjo7KycnJykhCSnJxcWFgYFRXl9MCmpqaUlJSGhgaDwbB3716z2SwSibxfr0s6OzspihofHyeEKBQKtVodY1+xD+AJiFH4f0NDQxRFDQwMEELi4+PVavWaNWucHtXX17dmzZry8nKJRLJz586JiQk/3BvU7cUCAE4hRoEQQqanp+vq6pqbm2majoiIyMvLS0tLc3o9PjU1FRkZWVpampSUlJSUNDQ0pFAofFOwe2ZmZmpra+1fUyKR5Ofnu/I1ARxDjHKd1Wq9detWTU3N/Py8QCDIyMhwfZh27NgxpVIZHR3d39/veFdmH7h27ZpCoVi+fLnTdw4PD1MU1d/fTwhZtWqVWq1eu3at9wuEoIUY5TSGNw27uroGBgby8/O9VZ/LHj9+XFpa+tZbb/X09KxatcrpBnpu3wIGWAoxylF6vZ6iKPsD42JjY9VqdWJiIttFuc9qter1+vDw8GPHjr322msmk0kmkzkdUy9qSMjMzMS2e+AGxCjnsLK1nW/Mzs729/cnJiYePXp0//79UVFREonElTu81dXV9m33IiMjlUoltt2DZ4IY5ZAny3tmZ2f5fP7WrVuDcnnP5OTk3bt3c3JySkpKlEplQkKCK9uU9PX1URSl0+kIIXK5vLi4WC6Xe79YCAaIUa5oampqbGx8/PgxISQhIaGoqMiV2ZjANT4+fvny5b1795aVlaWlpbmy/sq+7d6lS5eMRiOPx0tKSsrPz/fD5i3wN4hRTigvL29ubibPsrVdcJiYmCgrK3v99derq6sTEhJcWcI0Nzdnv+lhs9n4fP6Pf/xjPPEJHMMSY05obW0lhGzatOmNN97gToYSQqKjo48cOWI0Gtva2uRyeVNTk/2BUQ6IRKKioqIjR44IBAKbzVZVVeWbUiFwIUY5wb4cXqVScXBvDh6PFxkZ+cYbb9hstpqamsjIyO7u7pGREcdHLV++3N66IBaLfVImBDDO/VJxk731h8trH8PDw8PDw1999VWJRHLhwoX5+fnR0VH7o0e+iVQqJYRgu1JwCjEKXMHj8exPLlGpVKtXrz579mxvb+/s7KzVamW7NAhsiFHglpCQkJSUFLPZnJiYuHnz5gsXLtgn3wDchhjlutbW1qamJpvNxnYhPiUSiVQqldlspmk6LS2N7XIgsCFGuU6n0w0PD3MtRu1EItHBgwfxDFFgyPl+5hDc8vPzaZp2ZWd7AHgqjEa57tixY5988sn8/DzbhQAEKoxBuO6dd95huwSAwIbRKNedPHmytLR0YWGB7UIAAhVGo1yXk5Njs9lwbxTAbRiNct34+LjBYMAONQBuQ4xyHZcbngA8ApdyXIeGJwCGMBrlOjQ8ATCEMQjXoeEJgCGMRrkODU8ADGE0ynVoeAJgCKNRrkPDEwBDiFGuQ8MTAEO4lOM6NDwBMITRKNeh4QmAIYxBuA4NTwAMYTTKdWh4AmAIo1GuQ8MTAEMYjXIdGp4AGEKMch0angAYwqUc16HhCYAhjEY5ISwsLCws7KkvcbzhyWKxmEwmi8Wy9CWBQBAWFsbn43cEnMAYhBPMZrPZbH7qSxxveNJqtfX19Tt27MjJyVn0ktVqNZvNuN0BTiFGgdNyc3Nzc3PZrgICGy5YgNNu375dWlra1tbGdiEQwDAaBU5bu3ZtZGRkTEwM24VAAMNoFDjNZDIZDAaTycR2IRDAEKPAaTMzM8PDwzMzM2wXAgEMF/XAaQkJCWvWrAkJCWG7EAhgGI0Cp2m12k8++aSxsZHtQiCAYTQKnIaGJ2AOo1HgNDQ8AXMYjQKnoeEJmMNoFDgNDU/AHGIUOA0NT8AcLuqB09DwBMxhNAqchoYnYA6jUeA0NDwBcxiNAqeh4QmYw2gUOA0NT8AcRqPAaWh4AuYQo8BpaHgC5nBRD5yGhidgDqNR4DQ0PAFzGI0Cp6HhCZjDaJQTaJp2+9XghoYnYA6j0SA3PT1dV1dnNBodvKe2tjY0NPTb3/62z6ryH2h4AuYQo0HLYrFcv3796tWrCwsLjt929+7dw4cPt7a2LiwsbNu2zWcV+oOYmBhkKDCEGA1OnZ2dFEWNj48TQhQKxeDg4DcNSIVC4ZtvvkkIuXz58sGDB3t6eoxG4/PPP+/TcgECGe6NBhu9Xn/ixImTJ0+Oj4/Hxsa++uqrBw8e5PMd/Yvm8/l8Pv/1119fvnx5RUVFSEjI6Ohob2+vr0oGCGwYjQYPk8lUV1fX2NhI07RYLM7Ly8vMzOTxeC4eLpFICCF79uxZt25daWlpUlJSXFzc/Pw8x695uTz/Bi4SfPjhh2zXAEzZbLbm5uZTp0719vby+fy0tLQDBw4899xzTzJ0YGBgZmZmbGxs/fr1oaGhDk4VHR1N07TFYklPT6coamxsbO3atRaLRSAQ+OSr+Iuenp66urrQ0FCdThcfHx8VFcV2ReC/ePhjG+i6u7s1Gs3jx48JIc8995xarV6+fPmi94yMjJSUlNhsNpFIZB+lOr7MJ4TQNK3RaJRKZUNDg9Fo3L17NyHE9bFt4DIYDBqNprOzkxASFhZmNpsJIVu2bFGpVBEREWxXB/4IMRrADAZDdXX1vXv3CCFSqVSlUiUnJ3/Tm8fGxiorK+3pIJPJCgsLFQqF04+gabqsrGzPnj1dXV1DQ0N79uzxYP3+ZmFhob6+/tq1a1arNSQkJCcnZ/v27Vqttr6+3mKx2H+Sm5srFOJWGPwbxGhAmp+fb2hosP/Ch4aGZmdn79ixw+l1t9FoPH/+vE6nm56eJoQkJCSo1eq4uDhXPvH48eMvvviiyWTq6elRqVQe+A7+hKbptra2qqoq+x4lqampu3btst8sJoRMTU1VV1fbW/QjIyOVSuWWLVvYLBf8DGI0wNh/4S9dumQ0Gnk8XkpKSmFh4bJly1w59s6dO2fOnImKitq+fXttba3ZbObz+du2bSsoKAgLC3N8rM1m4/P5x48f37lzp1Qq7e7uzsrK8sQXYt/g4CBFUY8ePSKEyOVytVq9evXqpW/r7e2lKGpkZIQQsn79erVavWLFCl/XCn4JMRpI+vr6KIrS6XSEELlcXlxcLJfLnR7V2dmp1WoPHTokEAiqq6u3bt0qk8ncm9afmZmRSCQnTpxQKBSbN2/u7+9PSkryzHdjw/T0dFVVlX2YGRERoVKpUlNTHfyfwORvGAQxxGhgWHpd6fgX/gmapktKSnQ6nVqtXjp+1Ol0FEX19fURQlauXKlWq9etW+f0nAMDA3K5/MsvvxSLxQUFBXq9fuXKlW59LdYsLCw0NjZeuXJlfn5eKBRmZWXt3LnTcQ/DE3Nzc9euXdNqtVarVSQS5ebmbt++nWudDPB1iFF/Z5/3eNZZDpPJVFtbK5VKs7Ky+vv7h4eHt23b9k2z852dnRUVFRMTE4QQhUJRXFwcHR3ttLDW1takpCStVqvX6/ft2+fGV2Nubm7uzJkzBw4ceKYUc+/7LjI2NqbRaB48eEAIkclkRUVFGzdufNaTQHBAjPovmqY7OjoqKysnJycJIcnJyYWFhS42MD58+PCvf/2rWCz+yU9+4sqexBaL5caNG26Mzi5fvpyWlub7tkr7kFClUp06dSoxMdHFrQCGh4cpiurv7yeErFq1Sq1Wr127lkkZ3d3dFEWNjo4Sh1N2RqNxYWHBjbCGgIAY9VPDw8MVFRUDAwPkWX7he3p6rly5cuDAAZFIVFtbm5ycvLSH1IFF9wrz8vLS0tL8rVd0fn7+/v37KSkpx48fz8nJSUhIEIlETttgGS7xcsBms928efPy5csOpuzOnTsXERGxc+dOmqZdvHUAAQQx6o8MBsPRo0dpmpZIJCqVasuWLS7+wn/++ee9vb15eXn5+fluf/rQ0FBFRYV95jo+Pr64uPipM9e+R9P00NDQ8uXLf/e73+3bt08sFovFYqczPK7EHHMOYpqmaYqiVCpVfX29yWQqLi4m3FjIwB2IUT91/vx5iUSyY8cOp4OX+fn5q1evCoXCvLy8kZGRBw8eZGdnM5zxWNRHmZycXFRUFBkZyeScDNl3qPr973//wx/+cHJyUiKRuNLx6uJFt6c4mLKjafrkyZMvvvjiw4cPdTqdfVUYBAfEaMAbHBz84x//KBQKf/rTn4rFYg+e2b3ZLY+jaXp6erqkpOTNN9/s6OiIjY115f4Gi1NADqawaJo+fvz4Sy+9ZDQa+/r6lEqlb0oCr8LWJIHq0aNHZ8+eTUxMjI2NFQqFBQUFUqnUsx8hEAjWr1+/ZcuW2dnZ4eHhvr6+27dvh4eH+7K9aWJi4i9/+Ut2drbJZBIKhZs3b3Y6nTU3N1dbW3vu3Dm9Xi8SifLz8/fu3RsbG+ubggkhMpksIyNDIBAMDg6Ojo4KBILExET7Szweb+vWrREREf/4xz9SU1OtVmt7e7srzb/gzzAa9VMLCwuOZ9hPnz7d0dGRmZlpv9fmbYuujouLi70dTAaDoaamZt++fadOnUpLS3NlBwCbzdbS0lJdXW0ymfh8fnp6ekFBgWdH6M9kamrqypUrL7zwgkgkWvTS9PR0RESEfUPCpKSkR48ebdq0iZUigTnEqN+xT4nU1dUdPnx40XJDi8XS0NAwNzdXWFg4MTHR0tKSm5vrs2es22+YVlZWWiyW0NDQhISEoqKi8PBwj3/Q5ORkW1tbbm5uSUmJUqlMTEx0OhFP/m+xplgs7u3tDZTFmv39/atXry4vL1+2bFleXp7BYPD/mmEpxKh/6ezs1Gg0BoOBELJ0wl2v13/66ac0Tb/99tts7YBpMpnsKW+z2cRicX5+fkZGhisx5wr7HcONGzcePXp0//790dHRy5YtczqpPT4+XllZef/+fUJIbGysSqXyh5FdY2Pjpk2bXJmXa2lp2bx5c0NDg8Fg2Lt379zcHIsjaHADYtRfOJgS0el0ly5d2r17t0wmu3HjxsqVK11ZsulVHp/AsVqtjx8/joiI+PTTT1977bW5uTmZTOa0S8FPJsGW6u/v/+yzz0JCQjIzM11cyFBTU5ORkdHV1dXR0XHo0CGaptEUFSgQo+xzuka7vLy8ubk5JSXllVdeYbHOpbq7uysqKvR6PWHWTmQ0Go1GY2lp6VtvvdXb27tq1SqnY237Ei+NRjM1NUWecYmXD0xOTl66dKm9vZ0QEhUVtWvXruTkZFdi8fz585mZmSaT6caNGwcPHvR+peABiFE2ubhjkNFovH79em5u7tKZCtYxb25/9OjRuXPnfvSjH2m1WoVC4UoQL1ogoFar16xZ4/538BoXt+BbqqysbOvWrVKptL6+/uWXX/ZymcAUYpQ1wbR/JcOllmfPns3Oznaljyoglqt+nXt769l3dz19+vT69es3b97c2NhYUFDgm4LBDYhRFgTrbuoe3/jj676+eYpAIMjIyFAqlYGyPv3rTyuw38N18WkFYrH4yYaE7e3twfHfSfBBjPqU306JeJBHtqHzwTl975menfWETqeLiYnRarWjo6Pf+9737D88dOhQS0tLR0eH08MtFsvFixdPnjwZExPz3nvvefAPGzyBGPURP58S8SwmmyIv4t7G0v6sp6eHoijHT3JdqqOjIz4+PjQ01N4L9f7779+9e7e8vJwQYrFYnvqXeGZmpqysrKSkxH5zlhDyxRdfZGdne/LLACEEMeobgTIl4lnP+oiORby3tR3r7KutampqZmdn+Xz+1q1blUqlKwsZ3n///Xv37r377rttbW2dnZ3vvPPOn/70p3v37n3xxReL3nnu3Lmf//zn9mcXpqSk3LlzhyBGvQYx6l0BNyXicW7MVi+d/c/Pz/fDLgWG7H8nbt68aV/IkJeX5+AJBXa//e1vq6ur29vbpVKpzWabnJy0PxTr17/+9aLFbDdv3vzNb36jVqsLCwvlcrlcLqdpGjHqJYhRbwnoKRHPcvz44kV8vLUd6/R6vUajefjwISEkNja2qKhow4YNjg8ZGRn57ne/azabP//889TUVFc+BTHqVYhRrwiOKRHPsk+vOZitXrQyqrCw0JXtSIJDZ2cnRVHj4+OEEIVCoVarY2JinvrOqamp73//+1lZWXFxcX/4wx/Onj3rNHYJYtTLEKMeFnxTIp711NlqPGuTEGK1Wm/duuV4IQNN03v37r13715DQ8OyZctycnIkEklNTU1ISMiJEyc+++wzmUx2+vTppSdHjHoVYtRjaJq+ePFiU1MTTdPh4eFKpZJrt0Fd19XVRVGUfRVpaGioxWKx2Ww8Hi8tLc3FyZZgNTMzU1tb29zcbH+ETH5+/qL/irq6upqbm/fv308I+ec//5mQkJCUlEQI+fjjjz/66KMVK1a0tLQsPS1i1KsQo5504cKF27dvB+uUiGfZZ6svXrxos9kIIXFxcfv27QvcdVye9fV5uSNHjriyvquurq6qqioyMvLdd99d+ipi1KsQo55kNBrtWxOxXUjAMBgMzc3N9gt5tmvxLzRN37lzZ2RkZNeuXczPhhj1qqBaP8O6ZcuWOV0uDV8nlUpfeOEFtqvwRzwez8VZeGCdZ3bbBQDgLMQoAAAjiFEAAEZwbxQgGFy6dImiqKioqF/84hds18I5mKkHCAZL+0Y/+uijW7du2f/31atXCSGpqan2TcV27959+PBhtkoNPhiNAgSD+Pj49PR0qVT65Cft7e329HzCvkUOIcQfnpwaTDAaBQhOvb299s1tl4qNjY2Pj/dxPUEMMQoAwAhm6gEAGEGMAgAwghgFAGAEMQoAwAhiFACAkf8FUdwI+ASoVpsAAAEUelRYdHJka2l0UEtMIHJka2l0IDIwMjMuMDMuMgAAeJx7v2/tPQYg4GWAACYg5oDiBkY2ARDNIMkOJBxL8nMd81LkZJg4oLyQyoJURSk2qE4ZBi6ouIdzfmleiaIUM1xGmy0AYhCq1nfMxCtgx6rgPQkmEFTAIIGqwK80J0cDKC7BSFArNwOjgKQIkB2cmZeek+pf5FiUn5tYkpnslJ+X4sgJlAAx/ItSUosUpRgR4cLIFMFDjj4mZvL0MbOQp4+FlTx9rGxkBQsrO3nWsTOSp08ExGZjZGdlYWYSzwKyYXIMHA/d1A4wMEzYD+I8dFsGpA/sQ7An2EOUTVBjYPhgDxW3h4lD2DD1ag4wcxgYFJbB2GIAgUCv1b/mrAcAAADqelRYdE1PTCByZGtpdCAyMDIzLjAzLjIAAHicjVLLjsIwDLznK+a8UiMnoWly7AMhhEgltrv/wJ3/FzaomB6IsDNSbE2n9igGEpfpdL3hFX4yBqDKyTnjPxCROUMuGPaHY8G49MPaGee/svwicZLkltkv83ntOIxovG1zoi6icdb5lqVBlh6h33phOutzppDQkA3dB2bYMCuSOxTtOps+CbYs+I1efOfVJuzwg9rSbiUmWeXVrtmzL9PG2KfVw1wmtToyvPoZGUFNi4ydWhMZrToQBbqoZKfrSJl0aC70RzLZ+xxSr4+F7+YOWvl5JbqLDy4AAACCelRYdFNNSUxFUyByZGtpdCAyMDIzLjAzLjIAAHicc042TM5LTtaI1rIyjNVMNlSo0dA10jO1tDCw0NE11DM0MtWxBtJGlpYGJjq6BnrG5sgCUAUGQIYFSAJNHF0fusEGMJamTmJJfm5AUX6BlZlebn6OI5Dnm1jgV5qblFqkZ1gDAPDYJ1I9AF0VAAAAAElFTkSuQmCC", + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "core = dm.from_smarts(\"[C;H3]c1cncc([*:1])c1\")\n", + "\n", + "core" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "ac62a6b1-5287-4733-895f-fdcde611a1bd", + "metadata": {}, + "outputs": [], + "source": [ + "# now let's set the constraints query at the query atom of the code\n", + "# At atom map num 1, we want the fragment matching to have additional properties\n", + "for atom in core.GetAtoms():\n", + " # we add a recursive query to check again on any match that starts with this atom position\n", + " if atom.GetAtomMapNum() == 1:\n", + " atom.SetProp(\"query\", \"my_constraint\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "f46ebe39-a875-44d4-bb05-a86184c05208", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[True, False, True, False]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create the constraints object\n", + "constraint_fns = {\"my_constraint\": my_constraints}\n", + "constraint = medchem.constraints.Constraints(core, constraint_fns)\n", + "\n", + "# Check against our list of molecules\n", + "matches = [constraint(mol) for mol in mols]\n", + "\n", + "matches" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "afed4685-46a9-4fb1-9a83-800160a84140", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "legends = [f\"Do match={m}\" for m in matches]\n", + "\n", + "dm.to_image(mols, legends=legends)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2b59961f-1fcd-4756-b94f-96d665d1fe3b", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:medchem]", + "language": "python", + "name": "conda-env-medchem-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/tutorials/Medchem_Query_Language.ipynb b/docs/tutorials/Medchem_Query_Language.ipynb index 3d556b5..bca4cf1 100644 --- a/docs/tutorials/Medchem_Query_Language.ipynb +++ b/docs/tutorials/Medchem_Query_Language.ipynb @@ -12,6 +12,191 @@ "\n", "import medchem\n" ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "8a55cf3c-5eef-4b69-9b6f-14de198e5b8d", + "metadata": {}, + "source": [ + "## Query system\n", + "\n", + "Medchem provides a query system that can be used for filtering molecules based on a constructed query made of statement compliant with the provided grammar.\n", + "\n", + "Detailed information about the query system can be seen in the documentation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e554bc27-1fb9-4555-a687-d771aeeab00f", + "metadata": {}, + "outputs": [], + "source": [ + "# from medchem.query import QueryFilter\n", + "\n", + "# # note that whitespace and newlines are ignored in the query\n", + "# query = \"\"\"\n", + "# (\n", + "# HASPROP(\"tpsa\" < 80) AND HASPROP(\"clogp\" < 3) AND ! HASALERT(\"pains\")\n", + "# ) \n", + "# OR \n", + "# (\n", + "# HASPROP(\"n_heavy_atoms\" >= 10) \n", + "# AND \n", + "# (\n", + "# HASGROUP(\"Alcohols\") \n", + "# OR \n", + "# HASSUBSTRUCTURE(\"[CX3](=[OX1])O\", True, 1)\n", + "# )\n", + "# )\n", + "# \"\"\"\n", + "\n", + "# data = dm.freesolv()\n", + "# query_filter = QueryFilter(query)\n", + "# out = query_filter(data.smiles, n_jobs=-1, progress=True)\n", + "\n", + "# any(out)\n", + "\n", + "# ---\n", + "\n", + "\n", + "\n", + "# from typing import List\n", + "# import datamol as dm\n", + "# from medchem.query.eval import QueryFilter\n", + "\n", + "\n", + "# query = \"\"\"HASPROP(\"tpsa\" < 120) AND HASSUBSTRUCTURE(\"[OH]\", True)\"\"\"\n", + "# chemical_filter = QueryFilter(query, parser=\"lalr\")\n", + "\n", + "# mols = dm.data.cdk2().mol[:10]\n", + "# dm.to_image(mols, n_cols=3)\n", + "\n", + "# chemical_filter(mols, n_jobs=1)\n", + "\n", + "# chemical_filter\n", + "\n", + "# queries = [\n", + "# \"\"\"HASPROP(\"tpsa\" > 120) OR ! HASSUBSTRUCTURE(\"CO\")\"\"\", # A OR ! B\n", + "# \"\"\"(HASPROP(\"tpsa\" > 120)) OR ! (HASSUBSTRUCTURE(\"CO\"))\"\"\", # (A) OR ! (B)\n", + "# \"\"\"(HASPROP(\"tpsa\" > 120) OR ! HASSUBSTRUCTURE(\"CO\"))\"\"\", # (A OR ! B)\n", + "# \"\"\"HASPROP(\"tpsa\" > 120) OR NOT HASSUBSTRUCTURE(\"CO\")\"\"\", # A OR NOT B\n", + "# \"\"\"HASPROP(\"tpsa\" > 120) OR ~HASSUBSTRUCTURE(\"CO\")\"\"\", # A OR ~B\n", + "# \"\"\"HASPROP(\"tpsa\" > 120) OR ! HASSUBSTRUCTURE(\"CO\")\"\"\", # change in space\n", + "# ]\n", + "\n", + "# from lark import Lark, Transformer, v_args\n", + "# from medchem.utils.loader import get_grammar\n", + "# from medchem.query.parser import QueryParser\n", + "\n", + "# grammar = Lark(get_grammar(as_string=True), parser=\"lalr\", transformer=QueryParser())\n", + "\n", + "# queries = [\n", + "# # complex query\n", + "# \"\"\"(HASPROP(\"tpsa\" < 100) AND HASPROP(\"clogp\" < 3) AND ! HASALERT(\"pains\")) OR (HASPROP(\"n_heavy_atoms\" >= 10) AND (HASGROUP(\"Alcohols\") OR HASSUBSTRUCTURE(\"[CX3](=[OX1])O\", True, 1)))\"\"\",\n", + "# # is a rewriting of the above\n", + "# \"\"\"(HASPROP(\"tpsa\" < 100) AND HASPROP(\"clogp\" < 3) AND ! HASALERT(\"pains\")) OR (HASPROP(\"n_heavy_atoms\" >= 10) AND (HASGROUP(\"Alcohols\") OR HASSUBSTRUCTURE(\"[CX3](=[OX1])O\", True, min, 1)))\"\"\",\n", + "# # is a rewriting of the above with spacing and a differentm yet equivalent bool expression\n", + "# \"\"\"\n", + "# (\n", + "# HASPROP(\"tpsa\" < 100) \n", + "# AND \n", + "# HASPROP(\"clogp\" < 3) \n", + "# AND \n", + "# ! HASALERT(\"pains\")\n", + "# ) \n", + "# OR \n", + "# (\n", + "# HASPROP(\"n_heavy_atoms\" >= 10) \n", + "# AND \n", + "# HASGROUP(\"Alcohols\")\n", + "# ) \n", + "# OR \n", + "# (\n", + "# HASPROP(\"n_heavy_atoms\" >= 10) \n", + "# AND \n", + "# HASSUBSTRUCTURE(\"[CX3](=[OX1])O\", True)\n", + "# )\n", + "# \"\"\",\n", + "# # always true\n", + "# \"\"\"(HASPROP(\"tpsa\" < 100) AND HASPROP(\"clogp\" < 3)) OR TRUE\"\"\",\n", + "# # always false\n", + "# \"\"\"(HASPROP(\"tpsa\" < 100) AND HASPROP(\"clogp\" < 3)) AND False\"\"\",\n", + "# ]\n", + "# out = [grammar.parse(queries[i]) for i in range(len(queries))]\n", + "\n", + "# out\n", + "\n", + "# [out[i] == out[0] for i in range(len(out))]\n", + "\n", + "# bad_queries = [\n", + "# \"(((HASPROP(tpsa > 120 ) | HASSUBSTRUCTURE(c1ccccc1)) AND NOT HASALERT(pains)) OR HASSUBSTRUCTURE([OH]))\",\n", + "# \"\"\"HASPROP(\"tpsa\" > 120 ) OR OR HASSUPERSTRUCTURE(\"Cc1cc2ccccc2cc1C\")\"\"\",\n", + "# \"\"\"HASPROP(\"tpsa\" > 120 ) OR HASSUPERSTRUCTURE(\"Cc1cc2ccccc2cc1C\") OR NOT TRUE\"\"\",\n", + "# \"\"\"HASPROP(\"tpsa\" > 120 ) OR HASSUPERSTRUCTURE(\"Cc1cc2ccccc2cc1C\") OR true\"\"\",\n", + "# \"\"\"HASPROP(\"tpsa\" > 120 ) OR HASSUPERSTRUCTURE(\"Cc1cc2ccccc2cc1C\") TRUE\"\"\", # wrong syntax, UnexpectedCharacters\n", + "# \"\"\"HASPROP(\"tpsa\" > 120 ) OR (HASSUPERSTRUCTURE(\"Cc1cc2ccccc2cc1C\")\"\"\",\n", + "# \"\"\"HASPROP(\"tpsa\" > 120 ) OR () OR HASSUPERSTRUCTURE(\"Cc1cc2ccccc2cc1C\")\"\"\",\n", + "# \"\"\"HASPROP(\"tpsa\" > 120) OR HASSUBSTRUCTURE(\"[OH]\", True, >, 3)\"\"\",\n", + "# \"\"\"HASPROP(\"tpsa\" + 120) OR HASSUBSTRUCTURE(\"[OH]\")\"\"\",\n", + "# \"\"\"HASPROP(\"tpsa\", >, 120) OR HASSUBSTRUCTURE(\"[OH]\")\"\"\",\n", + "# \"\"\"HASPROP(\"tpsa\" > 120) OR HASSUBSTRUCTURE(\"[OH]\" True max 3)\"\"\",\n", + "# \"\"\"HASPROP(\"tpsa\" > 120) OR HASSUBSTRUCTURE(\"[OH]\", True, 3)\"\"\",\n", + "# \"\"\"(\n", + "# HASPROP(\"tpsa\" < 100) AND \n", + "# HASPROP(\"clogp\" < 3) AND \n", + "# ! HASALERT(\"pains\")\n", + "# ) \n", + "# OR \n", + "# (\n", + "# HASPROP(\"n_heavy_atoms\" >= 10) AND \n", + "# HASGROUP(\"Alcohols\")\n", + "# ) \n", + "# OR \n", + "# (\n", + "# HASPROP(\"n_heavy_atoms\" >= 10) AND \n", + "# HASSUBSTRUCTURE(\"[CX3](=[OX1])O\", True)\n", + "# )\"\"\",\n", + "# \"\"\"(HASPROP(\"tpsa\" < 100) AND HASPROP(\"clogp\" < 3) AND ! HASALERT(\"pains\")) OR (HASPROP(\"n_heavy_atoms\" >= 10) AND (HASGROUP(\"Alcohols\") OR HASSUBSTRUCTURE(\"[CX3](=[OX1])O\", True, min, 1)))\"\"\",\n", + "# ]\n", + "\n", + "# from medchem.query import QueryOperator\n", + "# df = dm.cdk2()\n", + "# df[\"tpsa\"] = df[\"mol\"].apply(dm.descriptors.tpsa)\n", + "# df[\"clogp\"] = df[\"mol\"].apply(dm.descriptors.clogp)\n", + "# df[\"n_heavy_atoms\"] = df[\"mol\"].apply(dm.descriptors.n_heavy_atoms)\n", + "# df[\"has_carboxyl\"] = df[\"mol\"].apply(\n", + "# lambda x: QueryOperator.hassubstructure(x, \"[CX3](=[OX1])O\", True)\n", + "# )\n", + "# df[\"has_pains\"] = df[\"mol\"].apply(lambda x: QueryOperator.hasalert(x, \"pains\"))\n", + "# df[\"has_alcohol\"] = df[\"mol\"].apply(\n", + "# lambda x: QueryOperator.hasgroup(x, \"Alcohols\")\n", + "# )\n", + "\n", + "# tmp = df.query(\n", + "# \"((tpsa < 100) & (clogp < 3) & ~has_pains) | (n_heavy_atoms >= 10 & (has_carboxyl | has_alcohol))\"\n", + "# )\n", + "# df[\"results\"] = False\n", + "# df.loc[tmp.index, \"results\"] = True\n", + "\n", + "# expected_complex_result.index\n", + "\n", + "# mol = dm.to_mol(\"Oc1cscc1-c1ccc(OC)cc1\") # contains tiophene hydroxy should match pains\n", + "# substruct1 = dm.to_mol(\"CO\")\n", + "# mol.GetSubstructMatches(substruct1, uniquify=True)\n", + "\n", + "# from medchem.rules.rule_filter import RuleFilters\n", + "\n", + "# r = RuleFilters([\"rule_of_five\", \"rule_of_three\"])\n", + "# r([mol])\n", + "\n", + "# from medchem.groups import _get_functional_group_map\n", + "\n", + "# d = _get_functional_group_map()\n", + "\n", + "# [x for x in d.keys() if 'hydroxy' in x.lower()]" + ] } ], "metadata": { diff --git a/docs/tutorials/Molecular_Complexity.ipynb b/docs/tutorials/Molecular_Complexity.ipynb index 3d556b5..d8f1776 100644 --- a/docs/tutorials/Molecular_Complexity.ipynb +++ b/docs/tutorials/Molecular_Complexity.ipynb @@ -12,6 +12,81 @@ "\n", "import medchem\n" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5e153a8c-99c2-4e1d-a0df-49ceac03aa61", + "metadata": {}, + "outputs": [], + "source": [ + "# %load_ext autoreload\n", + "# %autoreload 2\n", + "# import pandas as pd\n", + "# import datamol as dm\n", + "# import numpy as np\n", + "\n", + "# ### Build stats from processed files on zinc-available-15\n", + "\n", + "# files = dm.utils.fs.glob(\"gs://screening-libraries/zinc-available/stats-v1/*.csv\")\n", + "\n", + "# data = pd.concat([pd.read_csv(x) for x in files], ignore_index=True)\n", + "\n", + "# data.to_csv(\"zinc_15.csv\", index=False)\n", + "\n", + "# data = data.dropna()\n", + "\n", + "# import seaborn as sns\n", + "\n", + "# sns.kdeplot(data.mw.values, shade=True)\n", + "\n", + "# # the bins are chosen based on the kde plot above. \n", + "# # <200 and >600 are low occurence\n", + "# bins = [0]+list(range(200, 650, 50)) + [np.inf]\n", + "# bins\n", + "\n", + "# tmp = data.iloc[:100000]\n", + "\n", + "# tmp.mw.plot.kde()\n", + "\n", + "# data[\"mw_bins\"] = pd.cut(data.mw.values, bins, right=False, labels=bins[1:])\n", + "\n", + "# median_res = data.groupby(\"mw_bins\").median().reset_index(drop=False)\n", + "# median_res[\"percentile\"] = \"median\"\n", + "\n", + "# res_90 = data.groupby(\"mw_bins\").quantile(q=0.9).reset_index(drop=False)\n", + "# res_90[\"percentile\"] = \"90\"\n", + "\n", + "\n", + "# res_99 = data.groupby(\"mw_bins\").quantile(q=0.99).reset_index(drop=False)\n", + "# res_99[\"percentile\"] = \"99\"\n", + "\n", + "\n", + "# res_999 = data.groupby(\"mw_bins\").quantile(q=0.999).reset_index(drop=False)\n", + "# res_999[\"percentile\"] = \"999\"\n", + "\n", + "\n", + "# res_max = data.groupby(\"mw_bins\").max().reset_index(drop=False)\n", + "# res_max[\"percentile\"] = \"max\"\n", + "\n", + "\n", + "# all_stats = pd.concat([median_res, res_90, res_99, res_999, res_max], ignore_index=True).drop(columns=[\"zinc_id\", \"smiles\", \"parquet_partition\"])\n", + "\n", + "# ls ../medchem/data/complexity/\n", + "\n", + "# all_stats[\"percentile\"] = all_stats[\"percentile\"].astype(str)\n", + "\n", + "# all_stats.to_csv(\"../medchem/data/complexity/zinc_15_available_stats.csv\", index=False)\n", + "\n", + "# data.min()\n", + "\n", + "# data.max()\n", + "\n", + "# pd.set_option('display.float_format', lambda x: '%.5f' % x)\n", + "\n", + "\n", + "# data.describe(percentiles=[0.5])" + ] } ], "metadata": { diff --git a/docs/tutorials/Molecular_Filters.ipynb b/docs/tutorials/Molecular_Filters.ipynb index 705c8bb..2285748 100644 --- a/docs/tutorials/Molecular_Filters.ipynb +++ b/docs/tutorials/Molecular_Filters.ipynb @@ -76,6 +76,148 @@ "metadata": {}, "outputs": [], "source": [] + }, + { + "cell_type": "markdown", + "id": "b064c534-9c7d-4fa5-97e8-faa84d559225", + "metadata": {}, + "source": [ + "---" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1e00d06b-320c-4e62-bebf-bc5730b427da", + "metadata": {}, + "outputs": [], + "source": [ + "# import datamol as dm\n", + "# import numpy as np\n", + "# from loguru import logger\n", + "\n", + "# data = dm.data.freesolv().sample(500)\n", + "# smiles_list = data.smiles.values\n", + "\n", + "# from medchem.filter import lead\n", + "# from medchem.demerits import score, batch_score\n", + "# from medchem.alerts import NovartisFilters\n", + "# from medchem.alerts import AlertFilters\n", + "# from medchem.catalog import NamedCatalogs\n", + "# from medchem.utils.loader import get_data_path\n", + "# from rdkit.Chem import rdfiltercatalog\n", + "\n", + "# ### Using the filter module\n", + "\n", + "# The filter module provides a variety of two types of filters:\n", + "# - `generic`: custom filtering based on some given molecule properties such as number of atoms, presence of specific atom type, etc\n", + "# - `lead`: filtering based on structural motifs that are known to either be toxic, reactive, unstable or frequent false positive\n", + "\n", + "# # common filters including pains, brenk, nih, zinc\n", + "# pains_a = rdfiltercatalog.FilterCatalogParams.FilterCatalogs.PAINS_A\n", + "# lead.catalog_filter(smiles_list, [\"nih\", pains_a, NamedCatalogs.dundee()])\n", + "\n", + "# # filtering based on some commons alerts + additional lead like rules\n", + "# lead.alert_filter(smiles_list, alerts=[\"Glaxo\", \"BMS\"], rule_dict=dict(MW=[0, 100]))\n", + "\n", + "# # filtering based on NIBR screening deck process described in\n", + "# # \"Evolution of Novartis' small molecule screening deck design\" by Schuffenhauer, A. et al. J. Med. Chem. (2020),\n", + "# # https://dx.doi.org/10.1021/acs.jmedchem.0c01332.\n", + "# lead.screening_filter(smiles_list, return_idx=True)\n", + "\n", + "# # Filter based on the demerit scoring of Eli Lilly\n", + "# test_config = {\n", + "# \"min_atoms\": 10, # default is 1\n", + "# \"soft_max_atoms\": 30, # default is 30\n", + "# \"hard_max_atoms\": 50, # default is 30\n", + "# \"nodemerit\": False, # default is False\n", + "# \"dthresh\": 160, # default is None with no threshold\n", + "# }\n", + "# lead.lilly_demerit_filter(smiles_list, max_demerits=160, return_idx=True, **test_config)\n", + "\n", + "# ### Advanced options\n", + "\n", + "# The advanced options allow a better control over the filtering process. They also provide more information on the issues with the molecules.\n", + "\n", + "# #### AlertFilters\n", + "\n", + "# These are the underlying filters called by `lead.alert_filter`. In the output, the compound status is indicated as either `\"Exclude\"` or `\"Ok\"`.\n", + "\n", + "# filter_obj = AlertFilters(alerts_set=[\"inpharmatica\", \"SureChEMBL\"])\n", + "# filter_obj.list_default_available_alerts()\n", + "\n", + "# out = filter_obj(smiles_list)\n", + "# out\n", + "\n", + "# #### NovartisFilter\n", + "\n", + "# These are the underlying filters called by `lead.screening_filter`. \n", + "\n", + "# Here is an explanation of the output:\n", + "# - **status**: one of `[\"Exclude\", \"Flag\", \"Annotations\", \"Ok\"]` (ordered by quality). Generally, you can keep anything without the \"Exclude\" label, as long as you also apply a maximum severity score for compounds that collects too many flags.\n", + "# - **covalent**: number of potentially covalent motifs contained in the compound\n", + "# - **severity**: how severe are the issues with the molecules:\n", + "# - `0`: compound has no flags, might have annotations;\n", + "# - `1-9`: number of flags the compound raises;\n", + "# - `>= 10`: default exclusion criterion used in the paper\n", + "# - **special_mol**: whether the compound/parts of the compound belongs to a special class of molecules (e.g peptides, glycosides, fatty acid). In that case, you should review the rejection reasons.\n", + "\n", + "# filter_obj = NovartisFilters()\n", + "# out = filter_obj(smiles_list)\n", + "# out\n", + "\n", + "# #### Demerits scoring\n", + "\n", + "# Demerit scoring uses the Eli Lilly filter rules. Those are complex rules, that can be customized in any way you wish. \n", + "\n", + "# The following \"information\" will be computed and added as columns to a DataFrame for each run:\n", + "\n", + "# - **status**: this was added for compatibility and has values `\"Exclude\"`, `\"Flag\"` or `\"Ok\"`.\n", + "# - **rejected** : whether the molecule pass the filter or was rejected\n", + "# - **reasons**: the reasons why the molecule was rejected if available\n", + "# - **demerit_score** a demerit score for molecules. The lower the better. A cutoff is used to reject molecule with too many demerits, which you can refilter again after.\n", + "# - **step**: step of the pipeline where molecule was filtered out, if available\n", + "\n", + "\n", + "\n", + "# out = score(smiles_list, **test_config)\n", + "# out\n", + "\n", + "# # Although the demirits.score is already quite fast, you can also call the parallelized version of it using the `batch_score` function\n", + "\n", + "# out2 = batch_score(smiles_list, n_jobs=2, batch_size=100, progress=True, **test_config)\n", + "# out2\n", + "\n", + "# ### PhysChem Rule application\n", + "\n", + "# You can also apply a set of physchem rules to a list of compounds\n", + "\n", + "# You can apply the basic rules independently\n", + "\n", + "# from medchem.rules.basic_rules import rule_of_five, rule_of_three, rule_of_leadlike_soft\n", + "\n", + "# print(\"RO5\", rule_of_five(mol))\n", + "# print(\"RO3\", rule_of_three(mol))\n", + "# print(\"ROLS\", rule_of_leadlike_soft(mol))\n", + "\n", + "# To list all available rules and what they are good for, use :\n", + "\n", + "# from medchem.rules import RuleFilters\n", + "\n", + "# RuleFilters.list_available_rules()\n", + "\n", + "# To list the available rules for small molecules only, you can use the `list_available_rules(\"small molecule\")`\n", + "\n", + "# RuleFilters.list_available_rules(\"small molecule\")\n", + "\n", + "# You can also apply the rule filter to a batch of molecules.\n", + "\n", + "# rule_obj = RuleFilters(rule_list=[\"rule_of_five\", \"rule_of_oprea\", \"rule_of_cns\", \"rule_of_leadlike_soft\"], rule_list_names=[\"rule_of_five\", \"rule_of_oprea\", \"rule_of_cns\", \"rule_of_leadlike_soft\"], precompute_props=True)\n", + "\n", + "# out = rule_obj(smiles_list, n_jobs=-1, progress=True)\n", + "# # you need to reset the columns because the input rule list can be columns\n", + "# out" + ] } ], "metadata": { diff --git a/medchem/__init__.py b/medchem/__init__.py index 8dee4bf..a2f1417 100644 --- a/medchem/__init__.py +++ b/medchem/__init__.py @@ -1 +1,60 @@ from ._version import __version__ + +from typing import TYPE_CHECKING + +import os + +import importlib + + +# The below lazy import logic is coming from openff-toolkit: +# https://github.com/openforcefield/openff-toolkit/blob/b52879569a0344878c40248ceb3bd0f90348076a/openff/toolkit/__init__.py#L44 + +# Dictionary of objects to lazily import; maps the object's name to its module path +_lazy_imports_obj = { + # version + "__version__": "medchem._version", +} + +# Dictionary of modules to lazily import; maps the modules's name to its path +_lazy_imports_mod = { + "utils": "medchem.utils", + "groups": "medchem.groups", + "catalogs": "medchem.catalogs", + "constraints": "medchem.constraints", +} + + +def __getattr__(name): + """Lazily import objects from _lazy_imports_obj or _lazy_imports_mod + + Note that this method is only called by Python if the name cannot be found + in the current module.""" + obj_mod = _lazy_imports_obj.get(name) + if obj_mod is not None: + mod = importlib.import_module(obj_mod) + return mod.__dict__[name] + + lazy_mod = _lazy_imports_mod.get(name) + if lazy_mod is not None: + return importlib.import_module(lazy_mod) + + raise AttributeError(f"module {__name__!r} has no attribute {name!r}") + + +def __dir__(): + """Add _lazy_imports_obj and _lazy_imports_mod to dir()""" + keys = (*globals().keys(), *_lazy_imports_obj.keys(), *_lazy_imports_mod.keys()) + return sorted(keys) + + +if TYPE_CHECKING or os.environ.get("MEDCHEM_DISABLE_LAZY_LOADING", "0") == "1": + # These types are imported lazily at runtime, but we need to tell type + # checkers what they are. + + from ._version import __version__ + + from . import utils + from . import groups + from . import catalogs + from . import constraints diff --git a/medchem/constraints.py b/medchem/constraints.py new file mode 100644 index 0000000..dbcacf5 --- /dev/null +++ b/medchem/constraints.py @@ -0,0 +1,152 @@ +from typing import Dict +from typing import Callable +from typing import List + +from loguru import logger + +import datamol as dm + +from rdkit.Chem.rdchem import SubstructMatchParameters +from rdkit.Chem.rdmolfiles import MolFragmentToSmiles + + +class Constraints: + """Complex query system for matches with additional constraints + + !!! example + + ```python + mol1 = dm.to_mol("CN(C)C(=O)c1cncc(C)c1") + mol2 = dm.to_mol("c1ccc(cc1)-c1cccnc1") + core = dm.from_smarts("c1cncc([*:1])c1") + [atom.SetProp("query", "my_constraints") for atom in core.GetAtoms() if atom.GetAtomMapNum() == 1] + constraint_fns = dict(my_constraints=lambda x: dm.descriptors.n_aromatic_atoms(x) > 0) + constraint = Constraints(core, constraint_fns) + matches = [constraint(mol1), constraint(mol2)] # False, True + ``` + """ + + def __init__(self, core: dm.Mol, constraint_fns: Dict[str, Callable], prop_name: str = "query"): + """Initialize the constraint matcher + + Args: + core: the scaffold/query molecule to match against. Needs to be a molecule + constraint_fns: a dictionary of constraints functions + prop_name: the property name to use in the match at each atom defined by the core + for further matches against the constraints functions + """ + self.core = core + self.prop_name = prop_name + self.constraint_fns = constraint_fns + self.atom_to_query = self._initialize() + + def _initialize(self): + """Initialize the constraint matcher""" + atom_to_query = dict() + for a in self.core.GetAtoms(): + if a.HasProp(self.prop_name) and str(a.GetProp(self.prop_name)) in self.constraint_fns: + atom_to_query[a.GetIdx()] = a.GetProp(self.prop_name) + return atom_to_query + + @staticmethod + def validate(mol: dm.Mol, constraints: List["Constraints"]): + """Validate a list of constraint object against a molecule + + Args: + mol: the molecule object + constraints: list of Contraints object to validate against the molecule + """ + mol = dm.to_mol(mol) + + if mol is None: + raise ValueError("Input molecule is None") + + for constraint in constraints: + if not isinstance(constraint, Constraints): + raise ValueError("Input constraint should be an instance of Constraints") + + if not constraint(mol): + return False + + return True + + def get_matches(self, mol: dm.Mol, multiple: bool = True): + """Get matches that respect the constraints in the molecules + + Args: + mol: input molecule + multiple: if True, return all the matches, if False, return the first match + """ + if not isinstance(mol, dm.Mol): + mol = dm.to_mol(mol) + + params = SubstructMatchParameters() + params.setExtraFinalCheck(self._check_final) + matches = mol.GetSubstructMatches(self.core, params) + + if multiple: + return matches + + return matches[0] + + def has_match(self, mol: dm.Mol): + """Check if input molecule respect the constraints + + Args: + mol: input molecule + """ + return len(self.get_matches(mol)) > 0 + + def __call__(self, mol: dm.Mol): + """Check if input molecule respect the constraints + + Args: + mol: input molecule + """ + return self.has_match(mol) + + def _check_final(self, mol: dm.Mol, vect: List[int]): + """ + Perform a breadth search over current matches. + + !!! note + This function is not designed to be used directly but this setup is required to make things work + Always use `validate` or `match + + + Args: + mol: input molecule + vect: list of atom indexes to check + + """ + seen = [0] * mol.GetNumAtoms() + for idx in vect: + seen[idx] = 1 + + # loop over the atoms we care about: + for idx, qfn in self.atom_to_query.items(): + midx = vect[idx] + atom = mol.GetAtomWithIdx(midx) + # now do a breadth-first search from that atom, checking + # all of its neighbors that aren't in the substructure + # query: + stack = [atom] + connected_atoms = set() + while stack: + atom = stack.pop(0) + connected_atoms.add(atom.GetIdx()) + for neigh in atom.GetNeighbors(): + neigh_idx = neigh.GetIdx() + if not seen[neigh_idx] and neigh_idx not in connected_atoms: + stack.append(neigh) + is_ok = False + try: + submol = dm.to_mol(MolFragmentToSmiles(mol, atomsToUse=connected_atoms)) + is_ok = self.constraint_fns[qfn](submol) + except Exception as e: + logger.error(e) + # we can't raise here + + if not is_ok: + return False + return True diff --git a/mkdocs.yml b/mkdocs.yml index b3c8f3e..fdd1f1c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -20,9 +20,11 @@ nav: - Chemical Groups: tutorials/Chemical_Groups.ipynb - Medchem Query Language: tutorials/Medchem_Query_Language.ipynb - Molecular Complexity: tutorials/Molecular_Complexity.ipynb + - Constraints Filtering: tutorials/Constraints_Filtering.ipynb - API: - medchem.catalogs: api/medchem.catalogs.md - medchem.groups: api/medchem.groups.md + - medchem.constraints: api/medchem.constraints.md - medchem.utils: api/medchem.utils.md theme: diff --git a/tests/test_constraints.py b/tests/test_constraints.py new file mode 100644 index 0000000..6f78b71 --- /dev/null +++ b/tests/test_constraints.py @@ -0,0 +1,76 @@ +import pytest + + +import datamol as dm + +from medchem.constraints import Constraints + + +def test_constraints(): + def my_constraint(mol): + # we want to either (have phenol) OR (have less than 7 atoms and not ring) + return mol.HasSubstructMatch(dm.to_mol("Oc1ccccc1")) or ( + mol.GetNumAtoms() < 7 and dm.descriptors.n_rings(mol) < 1 + ) + + smiles = [ + "CN(C)C(=O)c1cncc(C)c1", # match, n_atoms < 7 and no ring + "Cc1cncc(CC2CCCCC2)c1", # not match, n_atoms < 7 but ring + "Cc1cncc(c1)-c1ccc(O)cc1", # match phenol + "Cc1cncc(c1)-c1cccc2nc[nH]c12", # no match n_atoms >= 7 + ] + expected_results = [] + mols = [dm.to_mol(x) for x in smiles] + core = dm.from_smarts("[C;H3]c1cncc([*:1])c1") + + assert core is not None + + # now let's set the constraints query + for atom in core.GetAtoms(): + # we add a recursive query to check again on any match that starts with this atom position + if atom.GetAtomMapNum() == 1: + atom.SetProp("query", "my_constraint") + + constraint_fns = {"my_constraint": my_constraint} + constraint = Constraints(core, constraint_fns) + + matches = [constraint(mol) for mol in mols] + expected_results = [True, False, True, False] + assert expected_results == matches + + one_match = constraint.get_matches(mols[0], multiple=False) + assert isinstance(one_match[0], int) + assert len(one_match) > 0 + + +def test_constraints_validate(): + def my_constraint(mol): + return mol.HasSubstructMatch(dm.to_mol("Oc1ccccc1")) or ( + mol.GetNumAtoms() < 7 and dm.descriptors.n_rings(mol) < 1 + ) + + core = dm.from_smarts("[C;H3]c1cncc([*:1])c1") + + assert core is not None + + for atom in core.GetAtoms(): + if atom.GetAtomMapNum() == 1: + atom.SetProp("query", "my_constraint") + + # Create the constraints object + constraint_fns = {"my_constraint": my_constraint} + constraint = Constraints(core, constraint_fns) + + mol = dm.to_mol("CN(C)C(=O)c1cncc(C)c1") + + assert Constraints.validate(mol, constraints=[constraint]) == True + + +def test_constraints_validate_fails(): + mol = dm.to_mol("CN(C)C(=O)c1cncc(C)c1") + + with pytest.raises(ValueError): + Constraints.validate(mol, constraints=["xxxxxx"]) # type: ignore + + with pytest.raises(ValueError): + Constraints.validate(None, constraints=[]) # type: ignore From 74a3a4e3aba57280b23e69f6dfd773a1b065c99e Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Thu, 6 Jul 2023 16:27:28 -0400 Subject: [PATCH 09/31] complexity module done --- docs/api/medchem.complexity.md | 7 + docs/tutorials/Molecular_Complexity.ipynb | 1488 ++++++++++++++++- medchem/__init__.py | 2 + medchem/complexity/__init__.py | 6 + .../complexity/_calc.py | 35 +- .../complexity/_filter.py | 30 +- medchem/groups/_groups.py | 1 + medchem_OLD/complexity/__init__.py | 1 - mkdocs.yml | 1 + tests/test_complexity.py | 130 ++ tests_OLD/.gitignore | 1 - tests_OLD/test_complexity.py | 125 -- 12 files changed, 1609 insertions(+), 218 deletions(-) create mode 100644 docs/api/medchem.complexity.md create mode 100644 medchem/complexity/__init__.py rename medchem_OLD/complexity/_complexity_calc.py => medchem/complexity/_calc.py (93%) rename medchem_OLD/complexity/complexity_filter.py => medchem/complexity/_filter.py (88%) delete mode 100644 medchem_OLD/complexity/__init__.py create mode 100644 tests/test_complexity.py delete mode 100644 tests_OLD/.gitignore delete mode 100644 tests_OLD/test_complexity.py diff --git a/docs/api/medchem.complexity.md b/docs/api/medchem.complexity.md new file mode 100644 index 0000000..b567452 --- /dev/null +++ b/docs/api/medchem.complexity.md @@ -0,0 +1,7 @@ +# `medchem.complexity` + +::: medchem.complexity.ComplexityFilter +::: medchem.complexity.WhitlockCT +::: medchem.complexity.BaroneCT +::: medchem.complexity.SMCM +::: medchem.complexity.TWC diff --git a/docs/tutorials/Molecular_Complexity.ipynb b/docs/tutorials/Molecular_Complexity.ipynb index d8f1776..45d5b3b 100644 --- a/docs/tutorials/Molecular_Complexity.ipynb +++ b/docs/tutorials/Molecular_Complexity.ipynb @@ -1,8 +1,16 @@ { "cells": [ + { + "cell_type": "markdown", + "id": "1b061dc5-b170-4205-9bd3-eef4ecb56093", + "metadata": {}, + "source": [ + "The `ComplexityFilter` allows to filter a molecule according to its \"structural complexity\". It's often a good filter to discard compounds that might be challenging to synthetize." + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "cc35111a-d3a8-4313-962c-290bbf563f35", "metadata": {}, "outputs": [], @@ -10,83 +18,1431 @@ "import datamol as dm\n", "import pandas as pd\n", "\n", - "import medchem\n" + "import medchem as mc" + ] + }, + { + "cell_type": "markdown", + "id": "f22179cb-7e95-455d-91c2-365eae5e4f58", + "metadata": {}, + "source": [ + "## Available filters" ] }, { "cell_type": "code", - "execution_count": null, - "id": "5e153a8c-99c2-4e1d-a0df-49ceac03aa61", + "execution_count": 15, + "id": "05ef9458-2520-4e44-a062-2d28a0223b91", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "['bertz', 'sas', 'qed', 'clogp', 'whitlock', 'barone', 'smcm', 'twc']" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# %load_ext autoreload\n", - "# %autoreload 2\n", - "# import pandas as pd\n", - "# import datamol as dm\n", - "# import numpy as np\n", - "\n", - "# ### Build stats from processed files on zinc-available-15\n", - "\n", - "# files = dm.utils.fs.glob(\"gs://screening-libraries/zinc-available/stats-v1/*.csv\")\n", - "\n", - "# data = pd.concat([pd.read_csv(x) for x in files], ignore_index=True)\n", - "\n", - "# data.to_csv(\"zinc_15.csv\", index=False)\n", - "\n", - "# data = data.dropna()\n", - "\n", - "# import seaborn as sns\n", - "\n", - "# sns.kdeplot(data.mw.values, shade=True)\n", - "\n", - "# # the bins are chosen based on the kde plot above. \n", - "# # <200 and >600 are low occurence\n", - "# bins = [0]+list(range(200, 650, 50)) + [np.inf]\n", - "# bins\n", - "\n", - "# tmp = data.iloc[:100000]\n", - "\n", - "# tmp.mw.plot.kde()\n", - "\n", - "# data[\"mw_bins\"] = pd.cut(data.mw.values, bins, right=False, labels=bins[1:])\n", - "\n", - "# median_res = data.groupby(\"mw_bins\").median().reset_index(drop=False)\n", - "# median_res[\"percentile\"] = \"median\"\n", - "\n", - "# res_90 = data.groupby(\"mw_bins\").quantile(q=0.9).reset_index(drop=False)\n", - "# res_90[\"percentile\"] = \"90\"\n", - "\n", - "\n", - "# res_99 = data.groupby(\"mw_bins\").quantile(q=0.99).reset_index(drop=False)\n", - "# res_99[\"percentile\"] = \"99\"\n", - "\n", - "\n", - "# res_999 = data.groupby(\"mw_bins\").quantile(q=0.999).reset_index(drop=False)\n", - "# res_999[\"percentile\"] = \"999\"\n", - "\n", - "\n", - "# res_max = data.groupby(\"mw_bins\").max().reset_index(drop=False)\n", - "# res_max[\"percentile\"] = \"max\"\n", - "\n", - "\n", - "# all_stats = pd.concat([median_res, res_90, res_99, res_999, res_max], ignore_index=True).drop(columns=[\"zinc_id\", \"smiles\", \"parquet_partition\"])\n", - "\n", - "# ls ../medchem/data/complexity/\n", - "\n", - "# all_stats[\"percentile\"] = all_stats[\"percentile\"].astype(str)\n", - "\n", - "# all_stats.to_csv(\"../medchem/data/complexity/zinc_15_available_stats.csv\", index=False)\n", + "mc.complexity.ComplexityFilter.list_default_available_filters()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "df232cf4-8bf9-4544-abba-3232e0fdaf9f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['99', '999', 'max']" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mc.complexity.ComplexityFilter.list_default_percentile()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "9a18a08d-edf1-4744-a1ed-76c3d91f4225", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
bertzwhitlockbaronesmcmmw_binspercentile
0257.014.0234.021.7150.099
1394.017.0309.028.8200.099
2525.020.0384.035.0250.099
3679.023.0462.040.2300.099
4864.026.0540.044.0350.099
\n", + "
" + ], + "text/plain": [ + " bertz whitlock barone smcm mw_bins percentile\n", + "0 257.0 14.0 234.0 21.7 150.0 99\n", + "1 394.0 17.0 309.0 28.8 200.0 99\n", + "2 525.0 20.0 384.0 35.0 250.0 99\n", + "3 679.0 23.0 462.0 40.2 300.0 99\n", + "4 864.0 26.0 540.0 44.0 350.0 99" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mc.complexity.ComplexityFilter.load_threshold_stats_file().head()" + ] + }, + { + "cell_type": "markdown", + "id": "5327a82f-ce5f-41db-ad82-c44e076e65c0", + "metadata": {}, + "source": [ + "## Usage" + ] + }, + { + "cell_type": "markdown", + "id": "c28722d3-46d7-4530-83d6-dd5101e6e139", + "metadata": {}, + "source": [ + "Load some molecules." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "8e687260-b858-4222-92b7-6a19b386189e", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = dm.data.cdk2()\n", + "data = data.iloc[:8]\n", "\n", - "# data.min()\n", + "# Let's remove the conformers since they are not important here.\n", + "data[\"mol\"].apply(lambda x: x.RemoveAllConformers())\n", "\n", - "# data.max()\n", + "dm.to_image(data[\"mol\"].tolist(), mol_size=(300, 200))" + ] + }, + { + "cell_type": "markdown", + "id": "52bcec1a-cbfb-42fd-90b4-59da79e8fed0", + "metadata": {}, + "source": [ + "Load the complexity filter." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "df2928ab-c043-4ff8-8881-88f70294e2c8", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'whitlock'" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cfilter = mc.complexity.ComplexityFilter(threshold_stats_file=\"zinc_12\", complexity_metric=\"whitlock\")\n", "\n", - "# pd.set_option('display.float_format', lambda x: '%.5f' % x)\n", + "cfilter.complexity_metric" + ] + }, + { + "cell_type": "markdown", + "id": "8aa57401-74d5-42f9-bf75-b505d0bc652f", + "metadata": {}, + "source": [ + "Apply the filter on our list of molecules. `True` means it passes the filter and `False` mean the molecule is too complex." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "c82f3934-ba4b-4714-97d8-783113d801eb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 True\n", + "1 False\n", + "2 False\n", + "3 True\n", + "4 False\n", + "5 True\n", + "6 True\n", + "7 True\n", + "Name: pass_cfilter, dtype: bool" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[\"pass_cfilter\"] = data[\"mol\"].apply(cfilter)\n", "\n", + "data[\"pass_cfilter\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "5e153a8c-99c2-4e1d-a0df-49ceac03aa61", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "legends = data[\"pass_cfilter\"].apply(lambda x: f\"Pass={x}\").tolist()\n", "\n", - "# data.describe(percentiles=[0.5])" + "dm.to_image(data[\"mol\"].tolist(), legends=legends, mol_size=(300, 200))" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "36b1bf46-b92f-4eb2-ac69-b5c6e2ff7d35", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/medchem/__init__.py b/medchem/__init__.py index a2f1417..d9d3d83 100644 --- a/medchem/__init__.py +++ b/medchem/__init__.py @@ -22,6 +22,7 @@ "groups": "medchem.groups", "catalogs": "medchem.catalogs", "constraints": "medchem.constraints", + "complexity": "medchem.complexity", } @@ -58,3 +59,4 @@ def __dir__(): from . import groups from . import catalogs from . import constraints + from . import complexity diff --git a/medchem/complexity/__init__.py b/medchem/complexity/__init__.py new file mode 100644 index 0000000..76458c8 --- /dev/null +++ b/medchem/complexity/__init__.py @@ -0,0 +1,6 @@ +from ._calc import WhitlockCT +from ._calc import BaroneCT +from ._calc import SMCM +from ._calc import TWC + +from ._filter import ComplexityFilter diff --git a/medchem_OLD/complexity/_complexity_calc.py b/medchem/complexity/_calc.py similarity index 93% rename from medchem_OLD/complexity/_complexity_calc.py rename to medchem/complexity/_calc.py index b6c662e..77909a0 100644 --- a/medchem_OLD/complexity/_complexity_calc.py +++ b/medchem/complexity/_calc.py @@ -1,14 +1,14 @@ -""" -Complexity filters as implemented in nonpher -https://github.com/lich-uct/nonpher/blob/master/nonpher/complex_lib.py -""" -from rdkit import Chem import math + +from rdkit.Chem.rdmolops import GetMolFrags +from rdkit.Chem.rdmolops import FindPotentialStereo +from rdkit.Chem import FindMolChiralCenters + import datamol as dm def WhitlockCT( - mol, + mol: dm.Mol, ringval: float = 4, unsatval: float = 2, heteroval: float = 1, @@ -28,12 +28,17 @@ def WhitlockCT( heteroval: The contribution of the heteroatom. chiralval: The contribution of the chiral center. """ + # possibly TODO phenyls and others are considered as protecting group thus could be removed (keyword argument removePhenyl) mol = dm.to_mol(mol, add_hs=True) + + if mol is None: + raise ValueError("Invalid molecule") + n_bonds = 0 n_unsat = 0 n_hetero = 0 - n_chiral = len(Chem.FindMolChiralCenters(mol, includeUnassigned=True)) + n_chiral = len(FindMolChiralCenters(mol, includeUnassigned=True)) n_arom = 0 bonds = mol.GetBonds() @@ -50,12 +55,14 @@ def WhitlockCT( n_bonds += 2 elif btype == dm.AROMATIC_BOND: n_arom += 1 + for atom in atoms: if atom.GetAtomicNum() != 1 and atom.GetAtomicNum() != 6: n_hetero += 1 - n_rings = len(bonds) - len(atoms) + len(Chem.GetMolFrags(mol)) + n_rings = len(bonds) - len(atoms) + len(GetMolFrags(mol)) complexity = ringval * n_rings + unsatval * n_unsat + heteroval * n_hetero + chiralval * n_chiral + return complexity @@ -93,7 +100,7 @@ def BaroneCT(mol: dm.Mol, chiral: bool = False): else: cmpx += 3 if chiral: - cmpx += 20 * len(Chem.FindMolChiralCenters(mol, includeUnassigned=True)) + cmpx += 20 * len(FindMolChiralCenters(mol, includeUnassigned=True)) return cmpx @@ -149,7 +156,7 @@ def BaroneCT(mol: dm.Mol, chiral: bool = False): C N 0.857 0.429 0.286 0.571 C O 0.750 0.375 C F 0.667 -C P 0.400 +C P 0.400 C S 0.375 0.188 0.250 C Cl 0.353 C Br 0.171 @@ -247,14 +254,14 @@ def SMCM(mol: dm.Mol): b.GetEndAtom().GetAtomicNum(), ) - chiral_a = len(Chem.FindPotentialStereo(mol)) * 2 + chiral_a = len(FindPotentialStereo(mol)) * 2 mot_score = sum([0] + [len(mol.GetSubstructMatches(patt)) for patt in _SMCM_SMARTSs]) score = a_score + b_score + chiral_a - mot_score return round(score, 3) -def _AWC(k, atom, table, neighbors): +def _AWC(k: int, atom: int, table: list, neighbors: list): """Compute walk count for atom""" if not atom in table[k]: table[k][atom] = 0 @@ -263,7 +270,7 @@ def _AWC(k, atom, table, neighbors): return table[k][atom] -def TWC(mol, log10: bool = True): +def TWC(mol: dm.Mol, log10: bool = True): """ Compute total walk count in a molecules as proxy for complexity. This score is described in: `twc = 1/2 sum(k=1..n-1,sum(i=atoms,awc(k,i)))` @@ -293,6 +300,6 @@ def TWC(mol, log10: bool = True): if log10: try: return math.log10(twc) - except ValueError as e: + except ValueError: return float("nan") return twc diff --git a/medchem_OLD/complexity/complexity_filter.py b/medchem/complexity/_filter.py similarity index 88% rename from medchem_OLD/complexity/complexity_filter.py rename to medchem/complexity/_filter.py index 7a7503a..51140b9 100644 --- a/medchem_OLD/complexity/complexity_filter.py +++ b/medchem/complexity/_filter.py @@ -9,13 +9,15 @@ from rdkit.Chem import GraphDescriptors from medchem.utils.loader import get_data_path -from medchem.complexity import _complexity_calc as calc + +from ._calc import WhitlockCT +from ._calc import BaroneCT +from ._calc import SMCM +from ._calc import TWC class ComplexityFilter: - """ - Complexity filters derived from nonpher: - https://github.com/lich-uct/nonpher/blob/master/nonpher/nonpher.py + """Complexity filters. To recover the original complexity score, use `threshold_stats_file = "zinc_12"`. The threshold have been re-calculated using the original new zinc-15 and focusing only on @@ -27,10 +29,10 @@ class ComplexityFilter: "sas": dm.descriptors.sas, # sas score "qed": dm.descriptors.qed, # qed score "clogp": dm.descriptors.clogp, # clogp score - "whitlock": calc.WhitlockCT, # whitlock complexity index - "barone": calc.BaroneCT, # barone complexity index - "smcm": calc.SMCM, # synthetic and molecular complexity - "twc": calc.TWC, # Total walk count complexity + "whitlock": WhitlockCT, # whitlock complexity index + "barone": BaroneCT, # barone complexity index + "smcm": SMCM, # synthetic and molecular complexity + "twc": TWC, # Total walk count complexity } def __init__( @@ -43,7 +45,7 @@ def __init__( Default complexity limit is set on at least 1 exceeding metric on the 999th permille level Args: - limit: The complexity percentile outlier limit to be used (should be expressed as an integer) + limit: The complexity percentile outlier limit to be used (should be a string expressed as an integer) complexity_metric: The complexity filter name to be used. Use `ComplexityFilter.list_default_available_filters` to list default filters. The following complexity metrics are supported by default @@ -62,17 +64,21 @@ def __init__( """ self.threshold_df = self.load_threshold_stats_file(threshold_stats_file) + if limit not in self.threshold_df.percentile.unique(): raise ValueError(f"Invalid value {limit}") available_filters = set(self.list_default_available_filters()).intersection(self.threshold_df.columns) + if complexity_metric not in available_filters: raise ValueError(f"Invalid value {complexity_metric}. Should be one of {available_filters}") + self.limit_index = limit self.complexity_metric = complexity_metric cur_df = self.threshold_df[self.threshold_df.percentile == self.limit_index] self.filter_selection_df = cur_df[[self.complexity_metric, "mw_bins"]].sort_values( - "mw_bins", ascending=True + "mw_bins", + ascending=True, ) @classmethod @@ -118,9 +124,11 @@ def __call__(self, mol: dm.Mol): mol: input molecule """ mw = dm.descriptors.mw(mol) - ind = np.digitize(mw, self.filter_selection_df.mw_bins.values, right=True) + ind = np.digitize(mw, self.filter_selection_df.mw_bins.tolist(), right=True) fn = ComplexityFilter.COMPLEXITY_FNS[self.complexity_metric] threshold = self.filter_selection_df[self.complexity_metric].values[ind] + with dm.without_rdkit_log(): pred = fn(mol) + return np.isnan(pred) or pred < threshold diff --git a/medchem/groups/_groups.py b/medchem/groups/_groups.py index 4b925a9..003b636 100644 --- a/medchem/groups/_groups.py +++ b/medchem/groups/_groups.py @@ -13,6 +13,7 @@ def list_default_chemical_groups(hierarchy: bool = False) -> list: """List all the chemical groups available. + !!! note chemical groups defines how a collection of patterns are organized. They do not correspond to individual pattern name. diff --git a/medchem_OLD/complexity/__init__.py b/medchem_OLD/complexity/__init__.py deleted file mode 100644 index 7f94f3c..0000000 --- a/medchem_OLD/complexity/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .complexity_filter import ComplexityFilter diff --git a/mkdocs.yml b/mkdocs.yml index fdd1f1c..c5430df 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -23,6 +23,7 @@ nav: - Constraints Filtering: tutorials/Constraints_Filtering.ipynb - API: - medchem.catalogs: api/medchem.catalogs.md + - medchem.complexity: api/medchem.complexity.md - medchem.groups: api/medchem.groups.md - medchem.constraints: api/medchem.constraints.md - medchem.utils: api/medchem.utils.md diff --git a/tests/test_complexity.py b/tests/test_complexity.py new file mode 100644 index 0000000..79dd45c --- /dev/null +++ b/tests/test_complexity.py @@ -0,0 +1,130 @@ +import pytest + +import datamol as dm + +from medchem.complexity import WhitlockCT +from medchem.complexity import BaroneCT +from medchem.complexity import SMCM +from medchem.complexity import TWC +from medchem.complexity import ComplexityFilter + + +def test_available_list_cf(): + listed = set(ComplexityFilter.list_default_available_filters()) + + assert listed == set(ComplexityFilter.COMPLEXITY_FNS.keys()) + + with pytest.raises(ValueError): + ComplexityFilter(limit="fake") + + with pytest.raises(ValueError): + # sas is not defined for the zinc_filter + ComplexityFilter(limit="99", complexity_metric="sas", threshold_stats_file="zinc_12") + + assert len(ComplexityFilter.list_default_percentile()) > 0 + + +def test_whitlockct(): + """Test WhitlockCT""" + + smiles = [ + "CC(=O)O[C@@H]1C2=C(C)[C@H](C[C@@](O)([C@@H](OC(=O)C)[C@@H]3[C@@]4(CO[C@@H]4C[C@H](O)[C@@]3(C)C1=O)OC(C)=O)C2(C)C)OC(=O)[C@H](O)[C@@H](NC(=O)C)C", + "C1(C)=CC(C)(C)C2(CCC3)CCC(C)C123", + "O=C1C=CC(=O)C=C1", + ] + + expected_outputs = [67, 20, 14] + mols = [dm.to_mol(x) for x in smiles] + + assert [WhitlockCT(m) for m in mols] == expected_outputs + + with pytest.raises(ValueError): + WhitlockCT(None) + + +def test_baronect(): + """Test BaroneCT""" + smiles_non_chiral = [ + "CC1=CCCC1=O", + "O=C1CCC2(C)C(=O)CCCC2=C1", + "CC1(C)CCCC2(C)C3CCC(C2O)C13", + ] + smiles_chiral = [ + "O=C1CCC2(C)C(=O)CCCC2=C1", + "O=NCNCCCCc1cccc(OC2=COC=C2)c1", + "c1ccccc1C(=O)C1=NC=C(C=N1)CCCCCCNC(=O)C(N)N=O", + "N1CNCC1SCC=CC=C(CC(C)=O)Cc1cccc(C)c1", + ] + expected_outputs = [135, 270, 288] + [290, 363, 512, 419] + mols_non_chiral = [dm.to_mol(x) for x in smiles_non_chiral] + mols_chiral = [dm.to_mol(x) for x in smiles_chiral] + outputs = [BaroneCT(mol) for mol in mols_non_chiral] + [BaroneCT(mol, chiral=True) for mol in mols_chiral] + + assert outputs == expected_outputs + + +def test_smcm(): + """Tsest SMCM""" + mols = [ + dm.to_mol(x) + for x in [ + "CC1=C[C@@H]2[C@]([C@@H](C1=O)O)([C@]3([C@H]([C@H]([C@H]([C@@]34CO4)O2)O)OC(=O)C)C)CO", + "CN(C)CCOCCOCCN(C)C", + "OC(=O)CC(C)(O)CC(O)=O", + ] + ] + expected_outputs = [59.376, 20.034, 20.485] + outputs = [SMCM(mol) for mol in mols] + assert outputs == expected_outputs + + +def test_twc(): + """Test TWC""" + smiles = [ + "CC(C)C(C)C(C)CC(C)C", + "C[Pt](C)(C)(C)(C)CCCC", + "CC(C)C(C)CC(C)CCCC", + "CC(C)CCC(C)C(C)CCC", + "CCC(C)C(C(C)C)C(C)CC", + "CCC(C)CC(C)CCCCC", + "CCC(C)CCCC(CC)CC", + ] + + mols = [dm.to_mol(x) for x in smiles] + expected_outputs = [21784, 21784, 40145, 40145, 69926, 31474, 31474] + outputs = [TWC(mol, log10=False) for mol in mols] + assert outputs == expected_outputs + + TWC(mols[0], log10=True) + + +def test_complexity_filter(): + cf = ComplexityFilter(threshold_stats_file="zinc_12") + + smiles = dm.data.cdk2().smiles.iloc[:10].values + + expected_outputs = [False, True, False, False, False, False, True, True, True, False] + outputs = [cf(dm.to_mol(x)) for x in smiles] + + cf2 = ComplexityFilter( + limit="99", + complexity_metric="sas", + threshold_stats_file="zinc_15_available", + ) + _ = [cf2(dm.to_mol(x)) for x in smiles] + + cf3 = ComplexityFilter( + limit="max", + complexity_metric="clogp", + threshold_stats_file="zinc_15_available", + ) + _ = [cf3(dm.to_mol(x)) for x in smiles] + + cf4 = ComplexityFilter( + limit="999", + complexity_metric="whitlock", + threshold_stats_file="zinc_15_available", + ) + _ = [cf4(dm.to_mol(x)) for x in smiles] + + assert outputs == expected_outputs diff --git a/tests_OLD/.gitignore b/tests_OLD/.gitignore deleted file mode 100644 index 9262b82..0000000 --- a/tests_OLD/.gitignore +++ /dev/null @@ -1 +0,0 @@ -temp_cache_* \ No newline at end of file diff --git a/tests_OLD/test_complexity.py b/tests_OLD/test_complexity.py deleted file mode 100644 index 3c4a966..0000000 --- a/tests_OLD/test_complexity.py +++ /dev/null @@ -1,125 +0,0 @@ -import unittest as ut -import datamol as dm -from medchem.complexity import _complexity_calc as calc -from medchem.complexity import ComplexityFilter -from medchem.filter.lead import complexity_filter - - -class Test_Complexity(ut.TestCase): - def test_whitlockct(self): - """Test WhitlockCT""" - - smiles = [ - "CC(=O)O[C@@H]1C2=C(C)[C@H](C[C@@](O)([C@@H](OC(=O)C)[C@@H]3[C@@]4(CO[C@@H]4C[C@H](O)[C@@]3(C)C1=O)OC(C)=O)C2(C)C)OC(=O)[C@H](O)[C@@H](NC(=O)C)C", - "C1(C)=CC(C)(C)C2(CCC3)CCC(C)C123", - "O=C1C=CC(=O)C=C1", - ] - - expected_outputs = [67, 20, 14] - mols = [dm.to_mol(x) for x in smiles] - self.assertListEqual([calc.WhitlockCT(m) for m in mols], expected_outputs) - - def test_baronect(self): - """Test BaroneCT""" - smiles_non_chiral = [ - "CC1=CCCC1=O", - "O=C1CCC2(C)C(=O)CCCC2=C1", - "CC1(C)CCCC2(C)C3CCC(C2O)C13", - ] - smiles_chiral = [ - "O=C1CCC2(C)C(=O)CCCC2=C1", - "O=NCNCCCCc1cccc(OC2=COC=C2)c1", - "c1ccccc1C(=O)C1=NC=C(C=N1)CCCCCCNC(=O)C(N)N=O", - "N1CNCC1SCC=CC=C(CC(C)=O)Cc1cccc(C)c1", - ] - expected_outputs = [135, 270, 288] + [290, 363, 512, 419] - mols_non_chiral = [dm.to_mol(x) for x in smiles_non_chiral] - mols_chiral = [dm.to_mol(x) for x in smiles_chiral] - outputs = [calc.BaroneCT(mol) for mol in mols_non_chiral] + [ - calc.BaroneCT(mol, chiral=True) for mol in mols_chiral - ] - self.assertListEqual(outputs, expected_outputs) - - def test_smcm(self): - """Tsest SMCM""" - mols = [ - dm.to_mol(x) - for x in [ - "CC1=C[C@@H]2[C@]([C@@H](C1=O)O)([C@]3([C@H]([C@H]([C@H]([C@@]34CO4)O2)O)OC(=O)C)C)CO", - "CN(C)CCOCCOCCN(C)C", - "OC(=O)CC(C)(O)CC(O)=O", - ] - ] - expected_outputs = [59.376, 20.034, 20.485] - outputs = [calc.SMCM(mol) for mol in mols] - self.assertListEqual(outputs, expected_outputs) - - def test_twc(self): - """Test TWC""" - smiles = [ - "CC(C)C(C)C(C)CC(C)C", - "C[Pt](C)(C)(C)(C)CCCC", - "CC(C)C(C)CC(C)CCCC", - "CC(C)CCC(C)C(C)CCC", - "CCC(C)C(C(C)C)C(C)CC", - "CCC(C)CC(C)CCCCC", - "CCC(C)CCCC(CC)CC", - ] - - mols = [dm.to_mol(x) for x in smiles] - expected_outputs = [21784, 21784, 40145, 40145, 69926, 31474, 31474] - outputs = [calc.TWC(mol, log10=False) for mol in mols] - self.assertListEqual(outputs, expected_outputs) - - def test_complexity_filter(self): - cf = ComplexityFilter(threshold_stats_file="zinc_12") - smiles = dm.data.cdk2().smiles.iloc[:10].values - expected_outputs = [ - False, - True, - False, - False, - False, - False, - True, - True, - True, - False, - ] - outputs = [cf(dm.to_mol(x)) for x in smiles] - cf2 = ComplexityFilter( - limit="99", - complexity_metric="sas", - threshold_stats_file="zinc_15_available", - ) - _ = [cf2(dm.to_mol(x)) for x in smiles] - cf3 = ComplexityFilter( - limit="max", - complexity_metric="clogp", - threshold_stats_file="zinc_15_available", - ) - _ = [cf3(dm.to_mol(x)) for x in smiles] - - cf4 = ComplexityFilter( - limit="999", - complexity_metric="whitlock", - threshold_stats_file="zinc_15_available", - ) - _ = [cf4(dm.to_mol(x)) for x in smiles] - output_filters = complexity_filter(smiles, threshold_stats_file="zinc_12") - self.assertListEqual(outputs, expected_outputs) - self.assertListEqual(outputs, list(output_filters)) - - def test_available_list_cf(self): - listed = set(ComplexityFilter.list_default_available_filters()) - - self.assertSetEqual(listed, set(ComplexityFilter.COMPLEXITY_FNS.keys())) - with self.assertRaises(ValueError): - cf = ComplexityFilter(limit="fake") - with self.assertRaises(ValueError): - # sas is not defined for the zinc_filter - cf = ComplexityFilter(limit="99", complexity_metric="sas", threshold_stats_file="zinc_12") - - -if __name__ == "__main__": - ut.main() From 5cbc72cb26ffc83cfff87ec15252036f54e460ea Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Thu, 6 Jul 2023 16:29:23 -0400 Subject: [PATCH 10/31] WIP --- tests/test_import.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/test_import.py b/tests/test_import.py index 5583d10..8381c22 100644 --- a/tests/test_import.py +++ b/tests/test_import.py @@ -1,2 +1,7 @@ def test_import(): import medchem + import medchem.utils + import medchem.groups + import medchem.catalogs + import medchem.constraints + import medchem.complexity From 6ea8a9bc8126faba946f6bb79abe7b6bb6a11203 Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Thu, 6 Jul 2023 16:42:43 -0400 Subject: [PATCH 11/31] WIP --- docs/tutorials/Molecular_Filters.ipynb | 12 +- medchem/__init__.py | 4 + medchem/api.py | 517 ++++++++++++++++++ medchem/filters/__init__.py | 0 .../filter => medchem/filters}/generic.py | 7 +- medchem_OLD/catalog.py | 388 ------------- medchem_OLD/filter/lead.py | 514 ----------------- tests/test_api.py | 2 + tests/test_import.py | 1 + 9 files changed, 535 insertions(+), 910 deletions(-) create mode 100644 medchem/api.py create mode 100644 medchem/filters/__init__.py rename {medchem_OLD/filter => medchem/filters}/generic.py (99%) delete mode 100644 medchem_OLD/catalog.py delete mode 100644 medchem_OLD/filter/lead.py create mode 100644 tests/test_api.py diff --git a/docs/tutorials/Molecular_Filters.ipynb b/docs/tutorials/Molecular_Filters.ipynb index 2285748..362c9a0 100644 --- a/docs/tutorials/Molecular_Filters.ipynb +++ b/docs/tutorials/Molecular_Filters.ipynb @@ -15,32 +15,32 @@ }, { "cell_type": "markdown", - "id": "22726bd9-e8f5-4fec-a145-395c8d6261dd", + "id": "a4d255bb-e3eb-42e1-9e50-c82dd7ee3624", "metadata": {}, "source": [ - "## Generic Filters" + "## Rules" ] }, { "cell_type": "code", "execution_count": null, - "id": "a0a34acc-405c-4546-80ff-d668d6c114ac", + "id": "b01dae00-c7e7-4320-8e57-fb745fead31e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", - "id": "a4d255bb-e3eb-42e1-9e50-c82dd7ee3624", + "id": "22726bd9-e8f5-4fec-a145-395c8d6261dd", "metadata": {}, "source": [ - "## Rules" + "## Generic Filters" ] }, { "cell_type": "code", "execution_count": null, - "id": "b01dae00-c7e7-4320-8e57-fb745fead31e", + "id": "a0a34acc-405c-4546-80ff-d668d6c114ac", "metadata": {}, "outputs": [], "source": [] diff --git a/medchem/__init__.py b/medchem/__init__.py index d9d3d83..9c27975 100644 --- a/medchem/__init__.py +++ b/medchem/__init__.py @@ -23,6 +23,8 @@ "catalogs": "medchem.catalogs", "constraints": "medchem.constraints", "complexity": "medchem.complexity", + "filters": "medchem.filters", + "api": "medchem.api", } @@ -60,3 +62,5 @@ def __dir__(): from . import catalogs from . import constraints from . import complexity + from . import filters + from . import api diff --git a/medchem/api.py b/medchem/api.py new file mode 100644 index 0000000..1549e12 --- /dev/null +++ b/medchem/api.py @@ -0,0 +1,517 @@ +"""High level API TODO previously in `medchem.filters.lead` +""" + +# from typing import Iterable +# from typing import List +# from typing import Optional +# from typing import Dict +# from typing import Union +# from typing import Any +# from typing import Sequence + +# import os +# import numpy as np +# import datamol as dm + +# from functools import partial +# from loguru import logger +# from rdkit.Chem.rdfiltercatalog import FilterCatalog + +# from medchem import demerits +# from medchem.alerts import AlertFilters +# from medchem.alerts import NovartisFilters +# from medchem.catalog import NamedCatalogs +# from medchem.catalog import merge_catalogs +# from medchem.complexity.complexity_filter import ComplexityFilter +# from medchem.groups import ChemicalGroup +# from medchem.rules import RuleFilters + + +# def alert_filter( +# mols: Iterable[Union[str, dm.Mol]], +# alerts: List[str], +# alerts_db: Optional[os.PathLike] = None, +# n_jobs: Optional[int] = 1, +# rule_dict: Dict = None, +# return_idx: bool = False, +# ): +# """Filter a dataset of molecules, based on common structural alerts and specific rules. + +# Arguments: +# mols: List of molecules to filter +# alerts: List of alert collections to screen for. See AlertFilters.list_default_available_alerts() +# alerts_db: Path to the alert file name. +# The internal default file (alerts.csv) will be used if not provided +# n_jobs: Number of cpu to use +# rule_dict: Dictionary with additional rules to apply during the filtering. +# For example, such dictionary for drug-like compounds would look like this: +# >>> rule_dict +# {"MW": [0, 500], "LogP": [-0.5, 5], "HBD": [0, 5], "HBA": [0, 10], "TPSA": [0, 150]} +# return_idx: Whether to return the filtered index + +# Returns: +# filtered_mask: boolean array (or index array) where true means +# the molecule IS OK (not found in the alert catalog). +# """ + +# custom_filters = AlertFilters(alerts_set=alerts, alerts_db=alerts_db) +# df = custom_filters(mols, n_jobs=n_jobs, progress=False) +# df = df[df.status != "Exclude"] +# if rule_dict is not None and len(rule_dict) > 0: +# df = df[ +# (df.MW.between(*rule_dict.get("MW", [-np.inf, np.inf]))) +# & (df.LogP.between(*rule_dict.get("LogP", [-np.inf, np.inf]))) +# & (df.HBD.between(*rule_dict.get("HBD", [-np.inf, np.inf]))) +# & (df.HBA.between(*rule_dict.get("HBA", [-np.inf, np.inf]))) +# & (df.TPSA.between(*rule_dict.get("TPSA", [-np.inf, np.inf]))) +# ] + +# filtered_idx = df.index.values.astype(int) +# filtered_mask = np.zeros(len(mols), dtype=bool) +# filtered_mask[filtered_idx] = True +# if return_idx: +# return filtered_idx +# return filtered_mask + + +# def screening_filter( +# mols: Iterable[Union[str, dm.Mol]], +# n_jobs: Optional[int] = None, +# max_severity: int = 10, +# return_idx: bool = False, +# ): +# """ +# Filter a set of molecules based on novartis screening deck curation process +# Schuffenhauer, A. et al. Evolution of Novartis' small molecule screening deck design, J. Med. Chem. (2020) +# DOI. https://dx.doi.org/10.1021/acs.jmedchem.0c01332 + +# !!! note +# The severity argument corresponds to the accumulated severity for a compounds accross all pattern in the +# catalog. +# Args: +# mols: list of input molecules +# n_jobs: number of parallel job to run. Sequential by default +# max_severity: maximum severity allowed. Default is <10 +# return_idx: Whether to return the filtered index + +# Returns: +# filtered_mask: boolean array (or index array) where true means the molecule +# IS NOT REJECTED (i.e not found in the alert catalog). + +# """ + +# filt_obj = NovartisFilters() +# df = filt_obj(mols, n_jobs=n_jobs) +# df = df[(df.status != "Exclude") & (df.severity < max_severity)] +# filtered_idx = df.index.values +# filtered_mask = np.zeros(len(mols), dtype=bool) +# filtered_mask[filtered_idx] = True +# if return_idx: +# return filtered_idx +# return filtered_mask + + +# def catalog_filter( +# mols: Sequence[Union[str, dm.Mol]], +# catalogs: List[Union[str, FilterCatalog]], +# return_idx: bool = False, +# n_jobs: Optional[int] = None, +# progress: bool = False, +# scheduler: str = "processes", +# batch_size: int = 100, +# ): +# """Filter a list of compounds according to catalog of structures alerts and patterns + +# Args: +# mols: list of input molecules +# catalogs: list of catalogs (name or FilterCatalog) +# return_idx: whether to return index or a boolean mask +# n_jobs: number of parallel job to run. Sequential by default +# progress: whether to show progress bar +# scheduler: joblib scheduler to use +# batch_size: batch size for parallel processing. Note that `batch_size` should be +# increased if the number of used CPUs gets very large. + +# Returns: +# filtered_mask: boolean array (or index array) where true means the molecule is not found in the catalog. +# """ + +# # Build and merge the catalogs +# named_catalogs = [] +# for catalog in catalogs: +# if catalog == "bredt": +# logger.warning( +# "It is not recommended to use the 'bredt' catalog here. Please use the `bredt_filter` function instead or be sure to use kekulized molecules as inputs." +# ) +# if catalog == "nibr": +# raise ValueError( +# "You shouldn't use the nibr catalog here. Please use the `screening_filter` function instead." +# ) +# elif catalog == "bredt-kekulized": +# catalog = "bredt" +# if isinstance(catalog, str): +# catalog_fn = getattr(NamedCatalogs, catalog, None) +# if catalog_fn is None: +# logger.warning(f"Catalog {catalog} not found. Ignoring.") +# else: +# named_catalogs.append(catalog_fn()) +# else: +# named_catalogs.append(catalog) +# if len(named_catalogs) < 1: +# raise ValueError("Please provide at least one catalog !") + +# catalog = merge_catalogs(*named_catalogs) + +# # Serialize the catalog +# catalog_state = catalog.Serialize() + +# def _fn(mols_chunk): +# # Init the catalog from the serialized state +# catalog = FilterCatalog(catalog_state) + +# # To mols +# mols_chunk = [dm.to_mol(m) for m in mols_chunk] + +# # Match the mols +# return [catalog.HasMatch(m) for m in mols_chunk] + +# # Batch the inputs +# n_batches = len(mols) // batch_size +# n_batches = max(n_batches, 1) +# mols_batches = np.array_split(mols, n_batches) + +# # Run the matching +# toxic = dm.parallelized( +# _fn, +# mols_batches, +# n_jobs=n_jobs, +# scheduler=scheduler, +# progress=progress, +# tqdm_kwargs=dict(desc="Match", leave=True), +# ) + +# # Flatten the results +# toxic = [item for sublist in toxic for item in sublist] + +# filtered_idx = [i for i, bad in enumerate(toxic) if not bad] +# if return_idx: +# return np.asarray(filtered_idx) +# return np.bitwise_not(toxic) + + +# def chemical_group_filter( +# mols: Iterable[Union[str, dm.Mol]], +# chemical_group: ChemicalGroup, +# return_idx: bool = False, +# n_jobs: Optional[int] = None, +# progress: bool = False, +# scheduler: str = "threads", +# ): +# """Filter a list of compounds according to a chemical group instance. + +# !!! note +# This function will return the list of molecules that DO NOT match the chemical group + +# Args: +# mols: list of input molecules +# chemical_group: a chemical group instance with the required functional groups to use. +# return_idx: whether to return index or a boolean mask +# n_jobs: number of parallel job to run. Sequential by default +# progress: whether to show progress bar +# scheduler: joblib scheduler to use + +# Returns: +# filtered_mask: boolean array (or index array) where true means the molecule DOES NOT MATCH the groups. +# """ + +# if isinstance(chemical_group, ChemicalGroup): +# chemical_group = chemical_group.get_catalog() +# return catalog_filter( +# mols, +# [chemical_group], +# return_idx=return_idx, +# n_jobs=n_jobs, +# progress=progress, +# scheduler=scheduler, +# ) + + +# def rules_filter( +# mols: Iterable[Union[str, dm.Mol]], +# rules: Union[List[Any], RuleFilters], +# return_idx: bool = False, +# n_jobs: Optional[int] = None, +# progress: bool = False, +# scheduler: str = "processes", +# ): +# """Filter a list of compounds according to a predefined set of rules + +# Args: +# mols: list of input molecules +# rules: list of rules to apply to the input molecules. +# return_idx: whether to return index or a boolean mask +# n_jobs: number of parallel job to run. Sequential by default +# progress: whether to show progress bar +# scheduler: joblib scheduler to use + +# Returns: +# filtered_mask: boolean array (or index array) where true means the molecule MATCH the rules. +# """ + +# if not isinstance(rules, RuleFilters): +# rules = RuleFilters(rules, precompute_props=True) +# df = rules(mols, n_jobs=n_jobs, progress=progress, scheduler=scheduler) +# filtered_df = df.all(axis=1, bool_only=True) +# if return_idx: +# return filtered_df.index.values[filtered_df.values] +# return filtered_df.values + + +# def complexity_filter( +# mols: Iterable[Union[str, dm.Mol]], +# complexity_metric: str = "bertz", +# threshold_stats_file: str = "zinc_15_available", +# limit: str = "99", +# return_idx: bool = False, +# n_jobs: Optional[int] = None, +# progress: bool = False, +# scheduler: str = "processes", +# ): +# """Filter a list of compounds according to a chemical group instance + +# Args: +# mols: list of input molecules +# complexity_metric: complexity metric to use +# Use `ComplexityFilter.list_default_available_filters` to list default filters. +# The following complexity metrics are supported by default +# * "bertz": bertz complexity index +# * "sas": synthetic accessibility score (`zinc_15_available` only) +# * "qed": qed score (`zinc_15_available` only) +# * "clogp": clogp for how greasy a molecule is compared to other in the same mw range (`zinc_15_available` only) +# * "whitlock": whitlock complexity index +# * "barone": barone complexity index +# * "smcm": synthetic and molecular complexity +# * "twc": total walk count complexity (`zinc_15_available` only) +# threshold_stats_file: complexity threshold statistic origin to use +# limit: complexity outlier percentile to use +# return_idx: whether to return index or a boolean mask +# n_jobs: number of parallel job to run. Sequential by default +# progress: whether to show progress bar +# scheduler: joblib scheduler to use + +# Also see: +# medchem.complexity.ComplexityFilter +# Returns: +# filtered_mask: boolean array (or index array) where true means the molecule MATCH the rules. +# """ + +# cf = ComplexityFilter( +# limit=limit, +# complexity_metric=complexity_metric, +# threshold_stats_file=threshold_stats_file, +# ) + +# mols = dm.parallelized( +# dm.to_mol, +# mols, +# n_jobs=n_jobs, +# progress=progress, +# tqdm_kwargs=dict(desc="To mol", leave=False), +# ) + +# not_complex = dm.parallelized( +# cf, +# mols, +# n_jobs=n_jobs, +# scheduler=scheduler, +# progress=progress, +# tqdm_kwargs=dict(desc="Complexity Eval", leave=False), +# ) +# not_complex = np.asarray(not_complex) +# filtered_idx = [i for i, good in enumerate(not_complex) if good] +# if return_idx: +# return np.asarray(filtered_idx) +# return not_complex + + +# def bredt_filter( +# mols: Sequence[Union[str, dm.Mol]], +# return_idx: bool = False, +# n_jobs: Optional[int] = None, +# progress: bool = False, +# scheduler: str = "threads", +# batch_size: int = 100, +# ): +# """Filter a list of compounds according to Bredt's rules +# https://en.wikipedia.org/wiki/Bredt%27s_rule + +# Args: +# mols: list of input molecules +# return_idx: whether to return index or a boolean mask +# n_jobs: number of parallel job to run. Sequential by default +# progress: whether to show progress bar +# scheduler: joblib scheduler to use +# batch_size: batch size for parallel processing. Note that `batch_size` should be +# increased if the number of used CPUs gets very large. + +# Returns: +# filtered_mask: boolean array (or index array) where true means the molecule is not toxic. +# """ + +# mols = dm.parallelized( +# partial(dm.to_mol, kekulize=True), +# mols, +# n_jobs=n_jobs, +# progress=progress, +# tqdm_kwargs=dict(desc="To mol", leave=False), +# ) + +# return catalog_filter( +# mols=mols, +# catalogs=["bredt-kekulized"], # already kekulized mols +# return_idx=return_idx, +# n_jobs=n_jobs, +# progress=progress, +# scheduler=scheduler, +# batch_size=batch_size, +# ) + + +# def molecular_graph_filter( +# mols: Iterable[Union[str, dm.Mol]], +# max_severity: int = 5, +# return_idx: bool = False, +# n_jobs: Optional[int] = None, +# progress: bool = False, +# scheduler: str = "threads", +# ): +# """Filter a list of compounds according to unstable molecular graph filter list. + +# This list was obtained from observation around The disallowed graphs are: + +# * K3,3 or K2,4 structure +# * Cone of P4 or K4 with 3-ear +# * Node in more than one ring of length 3 or 4 + +# Args: +# mols: list of input molecules +# max_severity: maximum acceptable severity (1-10). Default is <5 +# return_idx: whether to return index or a boolean mask +# n_jobs: number of parallel job to run. Sequential by default +# progress: whether to show progress bar +# scheduler: joblib scheduler to use + +# Returns: +# filtered_mask: boolean array (or index array) where true means the molecule is not toxic. +# """ +# if max_severity is None: +# max_severity = 5 +# catalog = NamedCatalogs.unstable_graph(max_severity=max_severity) +# if isinstance(mols[0], str): +# mols = dm.parallelized( +# dm.to_mol, +# mols, +# n_jobs=n_jobs, +# progress=progress, +# tqdm_kwargs=dict(desc="To mol", leave=False), +# ) +# toxic = dm.parallelized( +# catalog.HasMatch, +# mols, +# n_jobs=n_jobs, +# scheduler=scheduler, +# progress=progress, +# tqdm_kwargs=dict(desc="Match", leave=False), +# ) +# filtered_idx = [i for i, bad in enumerate(toxic) if not bad] +# if return_idx: +# return filtered_idx +# return np.bitwise_not(toxic) + + +# def lilly_demerit_filter( +# smiles: Iterable[str], +# max_demerits: Optional[int] = 160, +# return_idx: bool = False, +# n_jobs: Optional[int] = None, +# progress: bool = False, +# **kwargs, +# ): +# """Run Lilly demerit filtering on current list of molecules + +# Args: +# smiles: list of input molecules as smiles preferably +# max_demerits: Cutoff to reject molecules Defaults to 160. +# return_idx: whether to return a mask or a list of valid indexes +# progress: whether to show progress bar +# kwargs: parameters specific to the `demerits.score` function + +# Returns: +# filtered_mask: boolean array (or index array) where true means the molecule is ok. +# """ + +# if not isinstance(smiles[0], str): +# # canonicalize the smiles and ensure the input is smiles and not Chem.Mol +# def canonical_smi(smi): +# mol = dm.to_mol(smi) +# if mol is not None: +# return dm.to_smiles(mol) +# return mol + +# smiles = dm.parallelized( +# canonical_smi, +# smiles, +# n_jobs=n_jobs, +# progress=progress, +# tqdm_kwargs=dict(desc="Canonical Smiles", leave=False), +# ) + +# df = demerits.batch_score(smiles, n_jobs=n_jobs, progress=progress, **kwargs) +# df = df[(~df.rejected) & ((df.demerit_score.isna()) | (df.demerit_score < max_demerits))] + +# filtered_idx = df["ID"].values.astype(int) +# filtered_mask = np.zeros(len(smiles), dtype=bool) +# filtered_mask[filtered_idx] = True +# if return_idx: +# return filtered_idx +# return filtered_mask + + +# def protecting_groups_filter( +# mols: Iterable[Union[str, dm.Mol]], +# return_idx: bool = False, +# protecting_groups: str = [ +# "fmoc", +# "tert-butoxymethyl", +# "tert-butyl carbamate", +# "tert-butyloxycarbonyl", +# ], +# n_jobs: Optional[int] = None, +# progress: bool = False, +# scheduler: str = "threads", +# ): +# """Filter a list of compounds according to match to known protecting groups. +# Note that is a syntaxic sugar for calling chemical_group_filter with the protecting groups subset + +# Args: +# mols: list of input molecules +# protecting_groups: type of protection group to consider if not provided, will use all (not advised) +# return_idx: whether to return index or a boolean mask +# n_jobs: number of parallel job to run. Sequential by default +# progress: whether to show progress bar +# scheduler: joblib scheduler to use + +# Returns: +# filtered_mask: boolean array (or index array) where true means the molecule DOES NOT MATCH the groups. +# """ + +# chemical_group = ChemicalGroup("protecting_groups") +# chemical_group = chemical_group.filter(protecting_groups) +# return chemical_group_filter( +# mols, +# chemical_group, +# return_idx=return_idx, +# n_jobs=n_jobs, +# progress=progress, +# scheduler=scheduler, +# ) diff --git a/medchem/filters/__init__.py b/medchem/filters/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/medchem_OLD/filter/generic.py b/medchem/filters/generic.py similarity index 99% rename from medchem_OLD/filter/generic.py rename to medchem/filters/generic.py index 95608ff..5e5ff62 100644 --- a/medchem_OLD/filter/generic.py +++ b/medchem/filters/generic.py @@ -4,10 +4,13 @@ from typing import Union import itertools + import numpy as np import datamol as dm -from rdkit.Chem import rdMolDescriptors -from medchem.utils.graph import score_symmetry + +from rdkit.Chem import rdMolDescriptors # type: ignore + +from ..utils.graph import score_symmetry def _generic_filter( diff --git a/medchem_OLD/catalog.py b/medchem_OLD/catalog.py deleted file mode 100644 index f620128..0000000 --- a/medchem_OLD/catalog.py +++ /dev/null @@ -1,388 +0,0 @@ -from typing import List -from typing import Union -from typing import Optional - -import functools - -from loguru import logger - -import pandas as pd -import numpy as np -import datamol as dm - -from rdkit.Chem import rdfiltercatalog # type: ignore - -from medchem.utils.loader import get_data_path - - -def list_named_catalogs(): - """ - List all available named catalogs. This list will ignore all chemical groups - For a list of chemical group to be queried using NamedCatalog.chemical_groups, use `medchem.group.list_default_chemical_groups` - """ - return [ - x - for x in NamedCatalogs.__dict__.keys() - if (not x.startswith("_") and x not in ["alerts", "chemical_groups"]) - ] - - -def merge_catalogs(*catalogs): - """Merge several catalogs into a single one - - Returns: - catalog (FilterCatalog): merged catalog - """ - if len(catalogs) == 1: - return catalogs[0] - params = rdfiltercatalog.FilterCatalogParams() - missing_catalogs = [] - for catlg in catalogs: - if isinstance(catlg, rdfiltercatalog.FilterCatalogParams.FilterCatalogs): - params.AddCatalog(catlg) - else: - missing_catalogs.append(catlg) - parameterized_catalogs = rdfiltercatalog.FilterCatalog(params) - for catlg in missing_catalogs: - for entry_nums in range(catlg.GetNumEntries()): - entry = catlg.GetEntryWithIdx(entry_nums) - parameterized_catalogs.AddEntry(entry) - return parameterized_catalogs - - -def from_smarts( - smarts: List[str], - labels: Optional[List[str]] = None, - mincounts: Optional[List[int]] = None, - maxcounts: Optional[List[int]] = None, - entry_as_inds: bool = False, -): - """Load catalog from a list of smarts - - Args: - smarts: list of input smarts to add to the catalog - labels: list of label for each smarts - mincounts: minimum count before a match is recognized - maxcounts: maximum count for a match to be valid - entry_as_inds: whether to use index for entry id or the label - - Returns: - catalog (FilterCatalog): merged catalogs - """ - - with dm.without_rdkit_log(): - catalog = rdfiltercatalog.FilterCatalog() - if labels is None: - labels = smarts - if mincounts is None: - mincounts = [1] * len(smarts) - - for i, (sm, lb, count) in enumerate(zip(smarts, labels, mincounts)): - if maxcounts is None: - fil = rdfiltercatalog.SmartsMatcher(lb, sm, count) - else: - fil = rdfiltercatalog.SmartsMatcher(lb, sm, count, maxcounts[i]) - entry_name = str(lb) - if entry_as_inds: - entry_name = str(i) - - if fil.IsValid(): - catalog.AddEntry(rdfiltercatalog.FilterCatalogEntry(entry_name, fil)) - else: - logger.warning(f"It seem like the SMARTS {sm} is invalid") - return catalog - - -class NamedCatalogs: - """ - Holder for substructure matching catalogs - """ - - @staticmethod - @functools.lru_cache(maxsize=32) - def tox( - pains_a: bool = True, - pains_b: bool = True, - pains_c: bool = False, - brenk: bool = True, - nih: bool = False, - zinc: bool = False, - ): - """Common toxicity and interference catalog - - Args: - pains_a: whether to include PAINS filters from assay A - pains_b: whether to include PAINS filters from assay B - pains_c: whether to include PAINS filters from assay C - brenk: whether to include BRENK filters - nih: whether to include NIH filters - zinc: whether to include ZINC filters - """ - catalogs = [] - if pains_a: - catalogs.append(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.PAINS_A) - if pains_b: - catalogs.append(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.PAINS_B) - if pains_c: - catalogs.append(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.PAINS_C) - if brenk: - catalogs.append(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.BRENK) - if nih: - catalogs.append(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.NIH) - if zinc: - catalogs.append(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.ZINC) - catalog = merge_catalogs(*catalogs) - return catalog - - @staticmethod - @functools.lru_cache(maxsize=32) - def pains(): - return rdfiltercatalog.FilterCatalog(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.PAINS) - - @staticmethod - @functools.lru_cache(maxsize=32) - def pains_a(): - return rdfiltercatalog.FilterCatalog(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.PAINS_A) - - @staticmethod - @functools.lru_cache(maxsize=32) - def pains_b(): - return rdfiltercatalog.FilterCatalog(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.PAINS_B) - - @staticmethod - @functools.lru_cache(maxsize=32) - def pains_c(): - return rdfiltercatalog.FilterCatalog(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.PAINS_C) - - @staticmethod - @functools.lru_cache(maxsize=32) - def nih(): - return rdfiltercatalog.FilterCatalog(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.NIH) - - @staticmethod - @functools.lru_cache(maxsize=32) - def zinc(): - return rdfiltercatalog.FilterCatalog(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.ZINC) - - @staticmethod - @functools.lru_cache(maxsize=32) - def brenk(): - return rdfiltercatalog.FilterCatalog(rdfiltercatalog.FilterCatalogParams.FilterCatalogs.BRENK) - - @staticmethod - def alerts(subset: Optional[Union[List[str], str]] = None): - """Alerts filter catalogs commonly used in molecule filtering - - Args: - subset: subset of providers to consider - - Returns: - catalog (FilterCatalog): filter catalog - """ - rd_filters = pd.read_csv(get_data_path("common_alert_collection.csv")) - if subset is not None: - if isinstance(subset, str): - subset = [subset] - subset = [x.lower() for x in subset] - rd_filters = rd_filters[rd_filters.rule_set_name.str.lower().isin(subset)] - mincount = np.maximum(rd_filters["mincount"], 1).astype(int) - - labels = rd_filters.apply( - lambda x: "{0}||{1}_min({2})||{3}".format( - x["rule_set_name"], - x["description"], - x["mincount"], - x["priority"], - ), - axis=1, - ) - return from_smarts( - rd_filters["smarts"].values, - labels, - mincount, - entry_as_inds=False, - ) - - @staticmethod - @functools.lru_cache(maxsize=32) - def dundee(): - return NamedCatalogs.alerts(subset=["Dundee"]) - - @staticmethod - @functools.lru_cache(maxsize=32) - def bms(): - return NamedCatalogs.alerts(subset=["BMS"]) - - @staticmethod - @functools.lru_cache(maxsize=32) - def glaxo(): - return NamedCatalogs.alerts(subset=["Glaxo"]) - - @staticmethod - @functools.lru_cache(maxsize=32) - def schembl(): - return NamedCatalogs.alerts(subset=["SureChEMBL"]) - - @staticmethod - @functools.lru_cache(maxsize=32) - def mlsmr(): - return NamedCatalogs.alerts(subset=["MLSMR"]) - - @staticmethod - @functools.lru_cache(maxsize=32) - def inpharmatica(): - return NamedCatalogs.alerts(subset=["Inpharmatica"]) - - @staticmethod - @functools.lru_cache(maxsize=32) - def lint(): - return NamedCatalogs.alerts(subset=["LINT"]) - - @staticmethod - @functools.lru_cache(maxsize=32) - def alarm_nmr(): - return NamedCatalogs.alerts(subset=["Alarm-NMR"]) - - @staticmethod - @functools.lru_cache(maxsize=32) - def alphascreen(): - return NamedCatalogs.alerts(subset=["AlphaScreen-Hitters"]) - - @staticmethod - @functools.lru_cache(maxsize=32) - def gst_hitters(): - return NamedCatalogs.alerts(subset=["GST-Hitters"]) - - @staticmethod - @functools.lru_cache(maxsize=32) - def his_hitters(): - return NamedCatalogs.alerts(subset=["HIS-Hitters"]) - - @staticmethod - @functools.lru_cache(maxsize=32) - def luciferase(): - return NamedCatalogs.alerts(subset=["LuciferaseInhibitor"]) - - @staticmethod - @functools.lru_cache(maxsize=32) - def dnabinder(): - return NamedCatalogs.alerts(subset=["DNABinder"]) - - @staticmethod - @functools.lru_cache(maxsize=32) - def chelator(): - return NamedCatalogs.alerts(subset=["Chelator"]) - - @staticmethod - @functools.lru_cache(maxsize=32) - def hitters(): - return NamedCatalogs.alerts(subset=["Frequent-Hitter"]) - - @staticmethod - @functools.lru_cache(maxsize=32) - def electrophilic(): - return NamedCatalogs.alerts(subset=["Electrophilic"]) - - @staticmethod - @functools.lru_cache(maxsize=32) - def carcinogen(include_non_genotoxic: bool = True): - catalogs = ["Genotoxic-Carcinogenicity"] - if include_non_genotoxic: - catalogs += ["Non-Genotoxic-Carcinogenicity"] - return NamedCatalogs.alerts(subset=catalogs) - - @staticmethod - @functools.lru_cache(maxsize=32) - def ld50_oral(): - return NamedCatalogs.alerts(subset=["LD50-Oral"]) - - @staticmethod - @functools.lru_cache(maxsize=32) - def reactive_unstable_toxic(): - return NamedCatalogs.alerts(subset=["Reactive-Unstable-Toxic"]) - - @staticmethod - @functools.lru_cache(maxsize=32) - def skin(): - return NamedCatalogs.alerts(subset=["Skin"]) - - @staticmethod - @functools.lru_cache(maxsize=32) - def toxicophore(): - return NamedCatalogs.alerts(subset=["Toxicophore"]) - - @staticmethod - @functools.lru_cache(maxsize=32) - def nibr(): - """Catalog from NIBR - - !!! warning - This includes all the compounds in the catalog, regardless of severity (FLAG, EXCLUDE, ANNOTATION) - You likely don't want to use this for blind prioritization - """ - nibr_filters = pd.read_csv(get_data_path("nibr.csv")) - mincount = np.maximum(nibr_filters["mincount"], 1).astype(int) - labels = nibr_filters.apply( - lambda x: "{0}||{1}_min({2})||{3}||{4}||{5}".format( - x["rule_set_name"], - x["description"], - x["mincount"], - x["severity"], - x["covalent"], - x["special_mol"], - ), - axis=1, - ) - return from_smarts(nibr_filters["smarts"].values, labels, mincount, entry_as_inds=False) - - @staticmethod - @functools.lru_cache(maxsize=32) - def bredt(): - """Bredt fitler rules - Also see example of usage by surge's - https://github.com/StructureGenerator/SURGE/blob/main/doc/surge1_0.pdf - - """ - bredt_df = pd.read_csv(get_data_path("bredt.csv")) - return from_smarts( - bredt_df["smarts"].values, - bredt_df["labels"].values, - entry_as_inds=True, - ) - - @staticmethod - @functools.lru_cache(maxsize=32) - def unstable_graph(max_severity: int = 5): - """Unstable molecular graph to filter out especially for generative models - Args: - max_severity: maximum severity to consider for graph rules to be acceptable - """ - graph_df = pd.read_csv(get_data_path("graph.csv")) - # only apply rules with severity >= max_severity - graph_df = graph_df[graph_df["severity"] >= max_severity] - return from_smarts( - graph_df["smarts"].values, - graph_df["labels"].values, - entry_as_inds=True, - ) - - @staticmethod - @functools.lru_cache(maxsize=32) - def chemical_groups(filters: Union[str, List[str]] = "medicinal"): - """Chemical group filter catalogs - - Args: - filters: list of tag to filter the catalog on. - """ - chemical_groups = pd.read_csv(get_data_path("chemical_groups.csv")) - # we cannot keep the nan values in the dataframe - chemical_groups = chemical_groups.dropna(subset=["smarts"]) - if isinstance(filters, str): - filters = [filters] - chemical_groups = chemical_groups[chemical_groups.hierarchy.str.contains("|".join(filters))] - - return from_smarts( - chemical_groups["smarts"].values, - chemical_groups["name"].values, - entry_as_inds=True, - ) diff --git a/medchem_OLD/filter/lead.py b/medchem_OLD/filter/lead.py deleted file mode 100644 index afce6e3..0000000 --- a/medchem_OLD/filter/lead.py +++ /dev/null @@ -1,514 +0,0 @@ -from typing import Iterable -from typing import List -from typing import Optional -from typing import Dict -from typing import Union -from typing import Any -from typing import Sequence - -import os -import numpy as np -import datamol as dm - -from functools import partial -from loguru import logger -from rdkit.Chem.rdfiltercatalog import FilterCatalog - -from medchem import demerits -from medchem.alerts import AlertFilters -from medchem.alerts import NovartisFilters -from medchem.catalog import NamedCatalogs -from medchem.catalog import merge_catalogs -from medchem.complexity.complexity_filter import ComplexityFilter -from medchem.groups import ChemicalGroup -from medchem.rules import RuleFilters - - -def alert_filter( - mols: Iterable[Union[str, dm.Mol]], - alerts: List[str], - alerts_db: Optional[os.PathLike] = None, - n_jobs: Optional[int] = 1, - rule_dict: Dict = None, - return_idx: bool = False, -): - """Filter a dataset of molecules, based on common structural alerts and specific rules. - - Arguments: - mols: List of molecules to filter - alerts: List of alert collections to screen for. See AlertFilters.list_default_available_alerts() - alerts_db: Path to the alert file name. - The internal default file (alerts.csv) will be used if not provided - n_jobs: Number of cpu to use - rule_dict: Dictionary with additional rules to apply during the filtering. - For example, such dictionary for drug-like compounds would look like this: - >>> rule_dict - {"MW": [0, 500], "LogP": [-0.5, 5], "HBD": [0, 5], "HBA": [0, 10], "TPSA": [0, 150]} - return_idx: Whether to return the filtered index - - Returns: - filtered_mask: boolean array (or index array) where true means - the molecule IS OK (not found in the alert catalog). - """ - - custom_filters = AlertFilters(alerts_set=alerts, alerts_db=alerts_db) - df = custom_filters(mols, n_jobs=n_jobs, progress=False) - df = df[df.status != "Exclude"] - if rule_dict is not None and len(rule_dict) > 0: - df = df[ - (df.MW.between(*rule_dict.get("MW", [-np.inf, np.inf]))) - & (df.LogP.between(*rule_dict.get("LogP", [-np.inf, np.inf]))) - & (df.HBD.between(*rule_dict.get("HBD", [-np.inf, np.inf]))) - & (df.HBA.between(*rule_dict.get("HBA", [-np.inf, np.inf]))) - & (df.TPSA.between(*rule_dict.get("TPSA", [-np.inf, np.inf]))) - ] - - filtered_idx = df.index.values.astype(int) - filtered_mask = np.zeros(len(mols), dtype=bool) - filtered_mask[filtered_idx] = True - if return_idx: - return filtered_idx - return filtered_mask - - -def screening_filter( - mols: Iterable[Union[str, dm.Mol]], - n_jobs: Optional[int] = None, - max_severity: int = 10, - return_idx: bool = False, -): - """ - Filter a set of molecules based on novartis screening deck curation process - Schuffenhauer, A. et al. Evolution of Novartis' small molecule screening deck design, J. Med. Chem. (2020) - DOI. https://dx.doi.org/10.1021/acs.jmedchem.0c01332 - - !!! note - The severity argument corresponds to the accumulated severity for a compounds accross all pattern in the - catalog. - Args: - mols: list of input molecules - n_jobs: number of parallel job to run. Sequential by default - max_severity: maximum severity allowed. Default is <10 - return_idx: Whether to return the filtered index - - Returns: - filtered_mask: boolean array (or index array) where true means the molecule - IS NOT REJECTED (i.e not found in the alert catalog). - - """ - - filt_obj = NovartisFilters() - df = filt_obj(mols, n_jobs=n_jobs) - df = df[(df.status != "Exclude") & (df.severity < max_severity)] - filtered_idx = df.index.values - filtered_mask = np.zeros(len(mols), dtype=bool) - filtered_mask[filtered_idx] = True - if return_idx: - return filtered_idx - return filtered_mask - - -def catalog_filter( - mols: Sequence[Union[str, dm.Mol]], - catalogs: List[Union[str, FilterCatalog]], - return_idx: bool = False, - n_jobs: Optional[int] = None, - progress: bool = False, - scheduler: str = "processes", - batch_size: int = 100, -): - """Filter a list of compounds according to catalog of structures alerts and patterns - - Args: - mols: list of input molecules - catalogs: list of catalogs (name or FilterCatalog) - return_idx: whether to return index or a boolean mask - n_jobs: number of parallel job to run. Sequential by default - progress: whether to show progress bar - scheduler: joblib scheduler to use - batch_size: batch size for parallel processing. Note that `batch_size` should be - increased if the number of used CPUs gets very large. - - Returns: - filtered_mask: boolean array (or index array) where true means the molecule is not found in the catalog. - """ - - # Build and merge the catalogs - named_catalogs = [] - for catalog in catalogs: - if catalog == "bredt": - logger.warning( - "It is not recommended to use the 'bredt' catalog here. Please use the `bredt_filter` function instead or be sure to use kekulized molecules as inputs." - ) - if catalog == "nibr": - raise ValueError( - "You shouldn't use the nibr catalog here. Please use the `screening_filter` function instead." - ) - elif catalog == "bredt-kekulized": - catalog = "bredt" - if isinstance(catalog, str): - catalog_fn = getattr(NamedCatalogs, catalog, None) - if catalog_fn is None: - logger.warning(f"Catalog {catalog} not found. Ignoring.") - else: - named_catalogs.append(catalog_fn()) - else: - named_catalogs.append(catalog) - if len(named_catalogs) < 1: - raise ValueError("Please provide at least one catalog !") - - catalog = merge_catalogs(*named_catalogs) - - # Serialize the catalog - catalog_state = catalog.Serialize() - - def _fn(mols_chunk): - # Init the catalog from the serialized state - catalog = FilterCatalog(catalog_state) - - # To mols - mols_chunk = [dm.to_mol(m) for m in mols_chunk] - - # Match the mols - return [catalog.HasMatch(m) for m in mols_chunk] - - # Batch the inputs - n_batches = len(mols) // batch_size - n_batches = max(n_batches, 1) - mols_batches = np.array_split(mols, n_batches) - - # Run the matching - toxic = dm.parallelized( - _fn, - mols_batches, - n_jobs=n_jobs, - scheduler=scheduler, - progress=progress, - tqdm_kwargs=dict(desc="Match", leave=True), - ) - - # Flatten the results - toxic = [item for sublist in toxic for item in sublist] - - filtered_idx = [i for i, bad in enumerate(toxic) if not bad] - if return_idx: - return np.asarray(filtered_idx) - return np.bitwise_not(toxic) - - -def chemical_group_filter( - mols: Iterable[Union[str, dm.Mol]], - chemical_group: ChemicalGroup, - return_idx: bool = False, - n_jobs: Optional[int] = None, - progress: bool = False, - scheduler: str = "threads", -): - """Filter a list of compounds according to a chemical group instance. - - !!! note - This function will return the list of molecules that DO NOT match the chemical group - - Args: - mols: list of input molecules - chemical_group: a chemical group instance with the required functional groups to use. - return_idx: whether to return index or a boolean mask - n_jobs: number of parallel job to run. Sequential by default - progress: whether to show progress bar - scheduler: joblib scheduler to use - - Returns: - filtered_mask: boolean array (or index array) where true means the molecule DOES NOT MATCH the groups. - """ - - if isinstance(chemical_group, ChemicalGroup): - chemical_group = chemical_group.get_catalog() - return catalog_filter( - mols, - [chemical_group], - return_idx=return_idx, - n_jobs=n_jobs, - progress=progress, - scheduler=scheduler, - ) - - -def rules_filter( - mols: Iterable[Union[str, dm.Mol]], - rules: Union[List[Any], RuleFilters], - return_idx: bool = False, - n_jobs: Optional[int] = None, - progress: bool = False, - scheduler: str = "processes", -): - """Filter a list of compounds according to a predefined set of rules - - Args: - mols: list of input molecules - rules: list of rules to apply to the input molecules. - return_idx: whether to return index or a boolean mask - n_jobs: number of parallel job to run. Sequential by default - progress: whether to show progress bar - scheduler: joblib scheduler to use - - Returns: - filtered_mask: boolean array (or index array) where true means the molecule MATCH the rules. - """ - - if not isinstance(rules, RuleFilters): - rules = RuleFilters(rules, precompute_props=True) - df = rules(mols, n_jobs=n_jobs, progress=progress, scheduler=scheduler) - filtered_df = df.all(axis=1, bool_only=True) - if return_idx: - return filtered_df.index.values[filtered_df.values] - return filtered_df.values - - -def complexity_filter( - mols: Iterable[Union[str, dm.Mol]], - complexity_metric: str = "bertz", - threshold_stats_file: str = "zinc_15_available", - limit: str = "99", - return_idx: bool = False, - n_jobs: Optional[int] = None, - progress: bool = False, - scheduler: str = "processes", -): - """Filter a list of compounds according to a chemical group instance - - Args: - mols: list of input molecules - complexity_metric: complexity metric to use - Use `ComplexityFilter.list_default_available_filters` to list default filters. - The following complexity metrics are supported by default - * "bertz": bertz complexity index - * "sas": synthetic accessibility score (`zinc_15_available` only) - * "qed": qed score (`zinc_15_available` only) - * "clogp": clogp for how greasy a molecule is compared to other in the same mw range (`zinc_15_available` only) - * "whitlock": whitlock complexity index - * "barone": barone complexity index - * "smcm": synthetic and molecular complexity - * "twc": total walk count complexity (`zinc_15_available` only) - threshold_stats_file: complexity threshold statistic origin to use - limit: complexity outlier percentile to use - return_idx: whether to return index or a boolean mask - n_jobs: number of parallel job to run. Sequential by default - progress: whether to show progress bar - scheduler: joblib scheduler to use - - Also see: - medchem.complexity.ComplexityFilter - Returns: - filtered_mask: boolean array (or index array) where true means the molecule MATCH the rules. - """ - - cf = ComplexityFilter( - limit=limit, - complexity_metric=complexity_metric, - threshold_stats_file=threshold_stats_file, - ) - - mols = dm.parallelized( - dm.to_mol, - mols, - n_jobs=n_jobs, - progress=progress, - tqdm_kwargs=dict(desc="To mol", leave=False), - ) - - not_complex = dm.parallelized( - cf, - mols, - n_jobs=n_jobs, - scheduler=scheduler, - progress=progress, - tqdm_kwargs=dict(desc="Complexity Eval", leave=False), - ) - not_complex = np.asarray(not_complex) - filtered_idx = [i for i, good in enumerate(not_complex) if good] - if return_idx: - return np.asarray(filtered_idx) - return not_complex - - -def bredt_filter( - mols: Sequence[Union[str, dm.Mol]], - return_idx: bool = False, - n_jobs: Optional[int] = None, - progress: bool = False, - scheduler: str = "threads", - batch_size: int = 100, -): - """Filter a list of compounds according to Bredt's rules - https://en.wikipedia.org/wiki/Bredt%27s_rule - - Args: - mols: list of input molecules - return_idx: whether to return index or a boolean mask - n_jobs: number of parallel job to run. Sequential by default - progress: whether to show progress bar - scheduler: joblib scheduler to use - batch_size: batch size for parallel processing. Note that `batch_size` should be - increased if the number of used CPUs gets very large. - - Returns: - filtered_mask: boolean array (or index array) where true means the molecule is not toxic. - """ - - mols = dm.parallelized( - partial(dm.to_mol, kekulize=True), - mols, - n_jobs=n_jobs, - progress=progress, - tqdm_kwargs=dict(desc="To mol", leave=False), - ) - - return catalog_filter( - mols=mols, - catalogs=["bredt-kekulized"], # already kekulized mols - return_idx=return_idx, - n_jobs=n_jobs, - progress=progress, - scheduler=scheduler, - batch_size=batch_size, - ) - - -def molecular_graph_filter( - mols: Iterable[Union[str, dm.Mol]], - max_severity: int = 5, - return_idx: bool = False, - n_jobs: Optional[int] = None, - progress: bool = False, - scheduler: str = "threads", -): - """Filter a list of compounds according to unstable molecular graph filter list. - - This list was obtained from observation around The disallowed graphs are: - - * K3,3 or K2,4 structure - * Cone of P4 or K4 with 3-ear - * Node in more than one ring of length 3 or 4 - - Args: - mols: list of input molecules - max_severity: maximum acceptable severity (1-10). Default is <5 - return_idx: whether to return index or a boolean mask - n_jobs: number of parallel job to run. Sequential by default - progress: whether to show progress bar - scheduler: joblib scheduler to use - - Returns: - filtered_mask: boolean array (or index array) where true means the molecule is not toxic. - """ - if max_severity is None: - max_severity = 5 - catalog = NamedCatalogs.unstable_graph(max_severity=max_severity) - if isinstance(mols[0], str): - mols = dm.parallelized( - dm.to_mol, - mols, - n_jobs=n_jobs, - progress=progress, - tqdm_kwargs=dict(desc="To mol", leave=False), - ) - toxic = dm.parallelized( - catalog.HasMatch, - mols, - n_jobs=n_jobs, - scheduler=scheduler, - progress=progress, - tqdm_kwargs=dict(desc="Match", leave=False), - ) - filtered_idx = [i for i, bad in enumerate(toxic) if not bad] - if return_idx: - return filtered_idx - return np.bitwise_not(toxic) - - -def lilly_demerit_filter( - smiles: Iterable[str], - max_demerits: Optional[int] = 160, - return_idx: bool = False, - n_jobs: Optional[int] = None, - progress: bool = False, - **kwargs, -): - """Run Lilly demerit filtering on current list of molecules - - Args: - smiles: list of input molecules as smiles preferably - max_demerits: Cutoff to reject molecules Defaults to 160. - return_idx: whether to return a mask or a list of valid indexes - progress: whether to show progress bar - kwargs: parameters specific to the `demerits.score` function - - Returns: - filtered_mask: boolean array (or index array) where true means the molecule is ok. - """ - - if not isinstance(smiles[0], str): - # canonicalize the smiles and ensure the input is smiles and not Chem.Mol - def canonical_smi(smi): - mol = dm.to_mol(smi) - if mol is not None: - return dm.to_smiles(mol) - return mol - - smiles = dm.parallelized( - canonical_smi, - smiles, - n_jobs=n_jobs, - progress=progress, - tqdm_kwargs=dict(desc="Canonical Smiles", leave=False), - ) - - df = demerits.batch_score(smiles, n_jobs=n_jobs, progress=progress, **kwargs) - df = df[(~df.rejected) & ((df.demerit_score.isna()) | (df.demerit_score < max_demerits))] - - filtered_idx = df["ID"].values.astype(int) - filtered_mask = np.zeros(len(smiles), dtype=bool) - filtered_mask[filtered_idx] = True - if return_idx: - return filtered_idx - return filtered_mask - - -def protecting_groups_filter( - mols: Iterable[Union[str, dm.Mol]], - return_idx: bool = False, - protecting_groups: str = [ - "fmoc", - "tert-butoxymethyl", - "tert-butyl carbamate", - "tert-butyloxycarbonyl", - ], - n_jobs: Optional[int] = None, - progress: bool = False, - scheduler: str = "threads", -): - """Filter a list of compounds according to match to known protecting groups. - Note that is a syntaxic sugar for calling chemical_group_filter with the protecting groups subset - - Args: - mols: list of input molecules - protecting_groups: type of protection group to consider if not provided, will use all (not advised) - return_idx: whether to return index or a boolean mask - n_jobs: number of parallel job to run. Sequential by default - progress: whether to show progress bar - scheduler: joblib scheduler to use - - Returns: - filtered_mask: boolean array (or index array) where true means the molecule DOES NOT MATCH the groups. - """ - - chemical_group = ChemicalGroup("protecting_groups") - chemical_group = chemical_group.filter(protecting_groups) - return chemical_group_filter( - mols, - chemical_group, - return_idx=return_idx, - n_jobs=n_jobs, - progress=progress, - scheduler=scheduler, - ) diff --git a/tests/test_api.py b/tests/test_api.py new file mode 100644 index 0000000..650e0f5 --- /dev/null +++ b/tests/test_api.py @@ -0,0 +1,2 @@ +def test_api(): + import medchem.api diff --git a/tests/test_import.py b/tests/test_import.py index 8381c22..ec1ae49 100644 --- a/tests/test_import.py +++ b/tests/test_import.py @@ -5,3 +5,4 @@ def test_import(): import medchem.catalogs import medchem.constraints import medchem.complexity + import medchem.api From c0e915de90477a882b46c7dd7b7926e8b56d8f91 Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Thu, 6 Jul 2023 16:56:33 -0400 Subject: [PATCH 12/31] WIP --- {medchem/filters => medchem_OLD/filter}/generic.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {medchem/filters => medchem_OLD/filter}/generic.py (100%) diff --git a/medchem/filters/generic.py b/medchem_OLD/filter/generic.py similarity index 100% rename from medchem/filters/generic.py rename to medchem_OLD/filter/generic.py From 271be8561cebcdec854554a4e472338d1eb0f4fe Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Fri, 7 Jul 2023 10:10:26 -0400 Subject: [PATCH 13/31] rules done --- docs/_assets/css/custom.css | 16 + docs/api/medchem.rules.md | 16 + docs/tutorials/Catalogs.ipynb | 8 + docs/tutorials/Chemical_Groups.ipynb | 8 + docs/tutorials/Constraints_Filtering.ipynb | 2 +- docs/tutorials/Medchem_Query_Language.ipynb | 8 + docs/tutorials/Medchem_Rules.ipynb | 1667 +++++++++++++++++ docs/tutorials/Molecular_Complexity.ipynb | 2 + docs/tutorials/Molecular_Filters.ipynb | 244 --- medchem/__init__.py | 6 +- medchem/filters/__init__.py | 0 medchem/rules/__init__.py | 10 + medchem/rules/_rule_filter.py | 192 ++ {medchem_OLD => medchem}/rules/_utils.py | 53 +- {medchem_OLD => medchem}/rules/basic_rules.py | 584 +++--- medchem_OLD/rules/__init__.py | 1 - medchem_OLD/rules/rule_filter.py | 166 -- mkdocs.yml | 3 +- pyproject.toml | 2 +- tests/test_import.py | 2 +- tests/test_rules.py | 196 ++ tests_OLD/test_rules.py | 122 -- 22 files changed, 2530 insertions(+), 778 deletions(-) create mode 100644 docs/api/medchem.rules.md create mode 100644 docs/tutorials/Medchem_Rules.ipynb delete mode 100644 docs/tutorials/Molecular_Filters.ipynb delete mode 100644 medchem/filters/__init__.py create mode 100644 medchem/rules/__init__.py create mode 100644 medchem/rules/_rule_filter.py rename {medchem_OLD => medchem}/rules/_utils.py (88%) rename {medchem_OLD => medchem}/rules/basic_rules.py (76%) delete mode 100644 medchem_OLD/rules/__init__.py delete mode 100644 medchem_OLD/rules/rule_filter.py create mode 100644 tests/test_rules.py delete mode 100644 tests_OLD/test_rules.py diff --git a/docs/_assets/css/custom.css b/docs/_assets/css/custom.css index 443bf62..f0a25c8 100644 --- a/docs/_assets/css/custom.css +++ b/docs/_assets/css/custom.css @@ -63,6 +63,7 @@ td p { --md-footer-fg-color--light: var(--custom-secondary); --md-footer-fg-color--lighter: var(--custom-secondary); + } .md-header { @@ -124,3 +125,18 @@ td p { .md-container .jp-Cell-inputWrapper .jp-InputPrompt.jp-InputArea-prompt { display: none !important; } + +/* Increase the width */ +.md-grid { + max-width: 75rem; +} + +/* Jupyter Tweaks */ + +.jupyter-wrapper { + --jp-code-font-size: 0.8em !important; +} + +.jupyter-wrapper table.dataframe { + font-size: 0.7em !important; +} diff --git a/docs/api/medchem.rules.md b/docs/api/medchem.rules.md new file mode 100644 index 0000000..80f6a3a --- /dev/null +++ b/docs/api/medchem.rules.md @@ -0,0 +1,16 @@ +# `medchem.rules` + +::: medchem.rules.RuleFilters + +## Basic Rules + +::: medchem.rules.basic_rules + +## Utilities + +::: medchem.rules.in_range +::: medchem.rules.n_heavy_metals +::: medchem.rules.has_spider_chains +::: medchem.rules.n_fused_aromatic_rings +::: medchem.rules.fraction_atom_in_scaff +::: medchem.rules.list_descriptors diff --git a/docs/tutorials/Catalogs.ipynb b/docs/tutorials/Catalogs.ipynb index b760711..b7cac71 100644 --- a/docs/tutorials/Catalogs.ipynb +++ b/docs/tutorials/Catalogs.ipynb @@ -1,5 +1,13 @@ { "cells": [ + { + "cell_type": "markdown", + "id": "15b9a4e7-f79d-496f-a7d3-f7572dd75312", + "metadata": {}, + "source": [ + "# Catalogs" + ] + }, { "cell_type": "code", "execution_count": 8, diff --git a/docs/tutorials/Chemical_Groups.ipynb b/docs/tutorials/Chemical_Groups.ipynb index b185ecf..1c9e515 100644 --- a/docs/tutorials/Chemical_Groups.ipynb +++ b/docs/tutorials/Chemical_Groups.ipynb @@ -1,5 +1,13 @@ { "cells": [ + { + "cell_type": "markdown", + "id": "1115f42c-0ccb-4f4d-802d-62503c807b43", + "metadata": {}, + "source": [ + "# Chemical Groups" + ] + }, { "cell_type": "code", "execution_count": 2, diff --git a/docs/tutorials/Constraints_Filtering.ipynb b/docs/tutorials/Constraints_Filtering.ipynb index 77eb8cf..bbff8cd 100644 --- a/docs/tutorials/Constraints_Filtering.ipynb +++ b/docs/tutorials/Constraints_Filtering.ipynb @@ -5,7 +5,7 @@ "id": "232ca916-16ba-4b7d-9b3f-0542c88eb6af", "metadata": {}, "source": [ - "_INTRODUCTION_" + "# Constraints Filtering" ] }, { diff --git a/docs/tutorials/Medchem_Query_Language.ipynb b/docs/tutorials/Medchem_Query_Language.ipynb index bca4cf1..8932f1f 100644 --- a/docs/tutorials/Medchem_Query_Language.ipynb +++ b/docs/tutorials/Medchem_Query_Language.ipynb @@ -1,5 +1,13 @@ { "cells": [ + { + "cell_type": "markdown", + "id": "411aa88e-883d-45de-a8ac-40acf4732975", + "metadata": {}, + "source": [ + "# Medchem Query Language" + ] + }, { "cell_type": "code", "execution_count": null, diff --git a/docs/tutorials/Medchem_Rules.ipynb b/docs/tutorials/Medchem_Rules.ipynb new file mode 100644 index 0000000..7b4f520 --- /dev/null +++ b/docs/tutorials/Medchem_Rules.ipynb @@ -0,0 +1,1667 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "c0a162d5-5470-45b5-9427-b12097584e8c", + "metadata": {}, + "source": [ + "# Medchem Rules" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "cc35111a-d3a8-4313-962c-290bbf563f35", + "metadata": {}, + "outputs": [], + "source": [ + "%load_ext autoreload\n", + "%autoreload 2\n", + " \n", + "import datamol as dm\n", + "import pandas as pd\n", + "\n", + "import medchem as mc" + ] + }, + { + "cell_type": "markdown", + "id": "a5b7e78d-8ce7-40f8-85ad-8de655273bcb", + "metadata": {}, + "source": [ + "## Filtering with rules" + ] + }, + { + "cell_type": "markdown", + "id": "eb057c47-3385-4ae5-a5aa-27326e111ae7", + "metadata": {}, + "source": [ + "You can list all the available rules." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "5da49903-e7c6-41fd-9317-e2a91d0a8607", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
namerulesdescription
0rule_of_fiveMW <= 500 & logP <= 5 & HBD <= 5 & HBA <= 10leadlike;druglike;small molecule;library design
1rule_of_five_beyondMW <= 1000 & logP in [-2, 10] & HBD <= 6 & HBA...leadlike;druglike;small molecule;library design
2rule_of_fourMW >= 400 & logP >= 4 & RINGS >=4 & HBA >= 4PPI inhibitor;druglike
3rule_of_threeMW <= 300 & logP <= 3 & HBA <= 3 & HBD <= 3 & ...fragment;building block
4rule_of_three_extendedMW <= 300 & logP in [-3, 3] & HBA <= 6 & HBD <...fragment;building block
5rule_of_twoMW <= 200 & logP <= 2 & HBA <= 4 & HBD <= 2fragment;reagent;building block
6rule_of_ghoseMW in [160, 480] & logP in [-0.4, 5.6] & Natom...leadlike;druglike;small molecule;library design
7rule_of_veberrotatable bond <= 10 & TPSA < 140druglike;leadlike;small molecule;oral
8rule_of_reosMW in [200, 500] & logP in [-5, 5] & HBA in [0...druglike;small molecule;library design;HTS
9rule_of_chemaxon_druglikenessMW < 400 & logP < 5 & HBA <= 10 & HBD <= 5 & r...leadlike;druglike;small molecule
10rule_of_eganTPSA in [0, 132] & logP in [-1, 6]druglike;small molecule;admet;absorption;perme...
11rule_of_pfizer_3_75not (TPSA < 75 & logP > 3)druglike;toxicity;invivo;small molecule
12rule_of_gsk_4_400MW <= 400 & logP <= 4druglike;admet;small molecule
13rule_of_opreaHBD in [0, 2] & HBA in [2, 9] & ROTBONDS in [2...druglike;small molecule
14rule_of_xuHBD <= 5 & HBA <= 10 & ROTBONDS in [2, 35] & R...druglike;small molecule;library design
15rule_of_cnsMW in [135, 582] & logP in [-0.2, 6.1] & TPSA ...druglike;CNS;BBB;small molecule
16rule_of_respiratoryMW in [240, 520] & logP in [-2, 4.7] & HBONDS...druglike;respiratory;small molecule;nasal;inha...
17rule_of_zincMW in [60, 600] & logP < in [-4, 6] & HBD <= 6...druglike;small molecule;library design;zinc
18rule_of_leadlike_softMW in [150, 400] & logP < in [-3, 4] & HBD <= ...leadlike;small molecule;library design;admet
19rule_of_druglike_softMW in [100, 600] & logP < in [-3, 6] & HBD <= ...druglike;small molecule;library design
20rule_of_generative_designMW in [200, 600] & logP < in [-3, 6] & HBD <= ...druglike;small molecule;de novo design;generat...
21rule_of_generative_design_strictMW in [200, 600] & logP < in [-3, 6] & HBD <= ...druglike;small molecule;de novo design;generat...
\n", + "
" + ], + "text/plain": [ + " name \\\n", + "0 rule_of_five \n", + "1 rule_of_five_beyond \n", + "2 rule_of_four \n", + "3 rule_of_three \n", + "4 rule_of_three_extended \n", + "5 rule_of_two \n", + "6 rule_of_ghose \n", + "7 rule_of_veber \n", + "8 rule_of_reos \n", + "9 rule_of_chemaxon_druglikeness \n", + "10 rule_of_egan \n", + "11 rule_of_pfizer_3_75 \n", + "12 rule_of_gsk_4_400 \n", + "13 rule_of_oprea \n", + "14 rule_of_xu \n", + "15 rule_of_cns \n", + "16 rule_of_respiratory \n", + "17 rule_of_zinc \n", + "18 rule_of_leadlike_soft \n", + "19 rule_of_druglike_soft \n", + "20 rule_of_generative_design \n", + "21 rule_of_generative_design_strict \n", + "\n", + " rules \\\n", + "0 MW <= 500 & logP <= 5 & HBD <= 5 & HBA <= 10 \n", + "1 MW <= 1000 & logP in [-2, 10] & HBD <= 6 & HBA... \n", + "2 MW >= 400 & logP >= 4 & RINGS >=4 & HBA >= 4 \n", + "3 MW <= 300 & logP <= 3 & HBA <= 3 & HBD <= 3 & ... \n", + "4 MW <= 300 & logP in [-3, 3] & HBA <= 6 & HBD <... \n", + "5 MW <= 200 & logP <= 2 & HBA <= 4 & HBD <= 2 \n", + "6 MW in [160, 480] & logP in [-0.4, 5.6] & Natom... \n", + "7 rotatable bond <= 10 & TPSA < 140 \n", + "8 MW in [200, 500] & logP in [-5, 5] & HBA in [0... \n", + "9 MW < 400 & logP < 5 & HBA <= 10 & HBD <= 5 & r... \n", + "10 TPSA in [0, 132] & logP in [-1, 6] \n", + "11 not (TPSA < 75 & logP > 3) \n", + "12 MW <= 400 & logP <= 4 \n", + "13 HBD in [0, 2] & HBA in [2, 9] & ROTBONDS in [2... \n", + "14 HBD <= 5 & HBA <= 10 & ROTBONDS in [2, 35] & R... \n", + "15 MW in [135, 582] & logP in [-0.2, 6.1] & TPSA ... \n", + "16 MW in [240, 520] & logP in [-2, 4.7] & HBONDS... \n", + "17 MW in [60, 600] & logP < in [-4, 6] & HBD <= 6... \n", + "18 MW in [150, 400] & logP < in [-3, 4] & HBD <= ... \n", + "19 MW in [100, 600] & logP < in [-3, 6] & HBD <= ... \n", + "20 MW in [200, 600] & logP < in [-3, 6] & HBD <= ... \n", + "21 MW in [200, 600] & logP < in [-3, 6] & HBD <= ... \n", + "\n", + " description \n", + "0 leadlike;druglike;small molecule;library design \n", + "1 leadlike;druglike;small molecule;library design \n", + "2 PPI inhibitor;druglike \n", + "3 fragment;building block \n", + "4 fragment;building block \n", + "5 fragment;reagent;building block \n", + "6 leadlike;druglike;small molecule;library design \n", + "7 druglike;leadlike;small molecule;oral \n", + "8 druglike;small molecule;library design;HTS \n", + "9 leadlike;druglike;small molecule \n", + "10 druglike;small molecule;admet;absorption;perme... \n", + "11 druglike;toxicity;invivo;small molecule \n", + "12 druglike;admet;small molecule \n", + "13 druglike;small molecule \n", + "14 druglike;small molecule;library design \n", + "15 druglike;CNS;BBB;small molecule \n", + "16 druglike;respiratory;small molecule;nasal;inha... \n", + "17 druglike;small molecule;library design;zinc \n", + "18 leadlike;small molecule;library design;admet \n", + "19 druglike;small molecule;library design \n", + "20 druglike;small molecule;de novo design;generat... \n", + "21 druglike;small molecule;de novo design;generat... " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mc.rules.RuleFilters.list_available_rules()" + ] + }, + { + "cell_type": "markdown", + "id": "96a1bb5a-2f63-4872-8e1e-81daafe08d58", + "metadata": {}, + "source": [ + "You can also filter the rules using the tags in their descriptions:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "6f062f99-c5f5-4a38-b832-c91330d44952", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
namerulesdescription
3rule_of_threeMW <= 300 & logP <= 3 & HBA <= 3 & HBD <= 3 & ...fragment;building block
4rule_of_three_extendedMW <= 300 & logP in [-3, 3] & HBA <= 6 & HBD <...fragment;building block
5rule_of_twoMW <= 200 & logP <= 2 & HBA <= 4 & HBD <= 2fragment;reagent;building block
\n", + "
" + ], + "text/plain": [ + " name rules \\\n", + "3 rule_of_three MW <= 300 & logP <= 3 & HBA <= 3 & HBD <= 3 & ... \n", + "4 rule_of_three_extended MW <= 300 & logP in [-3, 3] & HBA <= 6 & HBD <... \n", + "5 rule_of_two MW <= 200 & logP <= 2 & HBA <= 4 & HBD <= 2 \n", + "\n", + " description \n", + "3 fragment;building block \n", + "4 fragment;building block \n", + "5 fragment;reagent;building block " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mc.rules.RuleFilters.list_available_rules(\"building block\")" + ] + }, + { + "cell_type": "markdown", + "id": "6abce913-3561-4c7f-b4a0-82f64707ee3c", + "metadata": {}, + "source": [ + "Given a list of rules, you can create a `RuleFilters` object in order to filter a list of molecules." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "f2befb12-6b31-4695-8c1c-427d40630479", + "metadata": {}, + "outputs": [], + "source": [ + "# Create the filter object\n", + "rfilter = mc.rules.RuleFilters(\n", + " # You can specifiy a rule as a string or as a callable\n", + " rule_list=[\"rule_of_five\", \"rule_of_oprea\", \"rule_of_cns\", \"rule_of_leadlike_soft\"],\n", + " # You can specify a custom list of names\n", + " rule_list_names=[\"rule_of_five\", \"rule_of_oprea\", \"rule_of_cns\", \"rule_of_leadlike_soft\"],\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "5ee1de74-cf67-4332-8e55-e6acb8008e27", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Load a dataset\n", + "data = dm.data.solubility()\n", + "data = data.sample(50, random_state=20)\n", + "\n", + "dm.to_image(data.iloc[:8][\"mol\"].tolist(), mol_size=(300, 250))" + ] + }, + { + "cell_type": "markdown", + "id": "71534006-fb4c-4213-bc24-d7e637ef97e4", + "metadata": {}, + "source": [ + "Apply our rule filters on the list of molecules." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "cc0241ea-efa0-438b-be43-15e248992e4d", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "967ccd5c30204a2c99edddf0de554a32", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Filter by rules: 0%| | 0/50 [00:00\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
molpass_allpass_anyrule_of_fiverule_of_oprearule_of_cnsrule_of_leadlike_soft
0<rdkit.Chem.rdchem.Mol object at 0x7f453a36fa70>FalseTrueTrueFalseFalseFalse
1<rdkit.Chem.rdchem.Mol object at 0x7f453a382810>FalseTrueTrueFalseTrueTrue
2<rdkit.Chem.rdchem.Mol object at 0x7f453a375850>FalseTrueTrueFalseFalseFalse
3<rdkit.Chem.rdchem.Mol object at 0x7f453a373b50>TrueTrueTrueTrueTrueTrue
4<rdkit.Chem.rdchem.Mol object at 0x7f453a37c350>FalseTrueTrueFalseTrueTrue
\n", + "" + ], + "text/plain": [ + " mol pass_all pass_any \\\n", + "0 False True \n", + "1 False True \n", + "2 False True \n", + "3 True True \n", + "4 False True \n", + "\n", + " rule_of_five rule_of_oprea rule_of_cns rule_of_leadlike_soft \n", + "0 True False False False \n", + "1 True False True True \n", + "2 True False False False \n", + "3 True True True True \n", + "4 True False True True " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results = rfilter(\n", + " mols=data[\"mol\"].tolist(),\n", + " n_jobs=-1,\n", + " progress=True,\n", + " progress_leave=True,\n", + " scheduler=\"auto\",\n", + " keep_props=False,\n", + " fail_on_error=True,\n", + ")\n", + "\n", + "results.head()" + ] + }, + { + "cell_type": "markdown", + "id": "beafd955-fe68-4183-9f36-452517b02e98", + "metadata": {}, + "source": [ + "You will noticde that the columns `pass_all` and `pass_any` will indicate whether a molecule has passed either all or at least one of the rules." + ] + }, + { + "cell_type": "markdown", + "id": "9c927a0b-c6b9-4a32-aba6-af29e7124dd0", + "metadata": {}, + "source": [ + "Display the results." + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "11f2e6e3-9d3a-4eb8-a9e6-d8d85620335f", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rows = results.iloc[:8]\n", + "\n", + "mols = rows[\"mol\"].iloc[:8].tolist()\n", + "legends = rows[[\"pass_all\", \"pass_any\"]].apply(lambda x: f\"pass_all={x[0]} - pass_any={x[1]}\", axis=1).tolist()\n", + "\n", + "dm.to_image(mols, legends=legends, mol_size=(300, 250))" + ] + }, + { + "cell_type": "markdown", + "id": "28999480-cbdb-4a4c-99e8-6c36ab01071f", + "metadata": {}, + "source": [ + "## Low level API\n", + "\n", + "You can use the low level API to filter molecules." + ] + }, + { + "cell_type": "markdown", + "id": "c5cb3089-a9d0-48bd-9736-24aa4560d8f1", + "metadata": {}, + "source": [ + "List the available rule by their names." + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "eb9a72e4-bb82-4dda-85b7-2a4d9739095c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['rule_of_five',\n", + " 'rule_of_five_beyond',\n", + " 'rule_of_four',\n", + " 'rule_of_three',\n", + " 'rule_of_three_extended',\n", + " 'rule_of_two',\n", + " 'rule_of_ghose',\n", + " 'rule_of_veber',\n", + " 'rule_of_reos',\n", + " 'rule_of_chemaxon_druglikeness',\n", + " 'rule_of_egan',\n", + " 'rule_of_pfizer_3_75',\n", + " 'rule_of_gsk_4_400',\n", + " 'rule_of_oprea',\n", + " 'rule_of_xu',\n", + " 'rule_of_cns',\n", + " 'rule_of_respiratory',\n", + " 'rule_of_zinc',\n", + " 'rule_of_leadlike_soft',\n", + " 'rule_of_druglike_soft',\n", + " 'rule_of_generative_design',\n", + " 'rule_of_generative_design_strict']" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rule_names = mc.rules.RuleFilters.list_available_rules()[\"name\"].tolist()\n", + "rule_names" + ] + }, + { + "cell_type": "markdown", + "id": "7b0813c0-aa58-4ecb-a915-28f6868526e6", + "metadata": {}, + "source": [ + "The rules are available at `mc.rules.basic_rules.*`. You can retrieve a rule with:\n", + "\n", + "- the direct import `mc.rules.basic_rules.rule_of_five`.\n", + "- by its name: `getattr(mc.rules.basic_rules, \"rule_of_five\")`\n", + "\n", + "Let's do it!" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "d3ec79b2-d31d-4225-aa89-0ef142c3f296", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcIAAACWCAIAAADCEh9HAAAABmJLR0QA/wD/AP+gvaeTAAAeXUlEQVR4nO3dd1wU19oH8GcLvdeAXdAoWMFIVIwl2DArNiAEhcSoGPTKNeXqzZtPshg1N8abhL3XBPSaKESjsgiCvQdRsGNBRAlKUYhUkbaw5bx/HLJZscPuzCz7fP8KZ4c5z3zc/JiZc2YOjxACCCGE2ovPdgEIIaTfMEYRQqhDMEYRQqhDMEYRQqhDMEaRHmhpaamqqmK7CoSeDGMUcV1kZKS5ubmjo+OwYcMSEhLq6+vZrgihR/BwwhPisq+++uqzzz7TbLGwsBCJRMHBwf7+/mZmZmwVhpAaxijiKKVSuXTp0tjYWIFAsGDBgkWLFp08eVIqlWZmZtIvrZmZmZ+fX1BQ0OzZsy0sLNiuFxkujFHERQ0NDSEhIXv37jUxMUlISAgODlZ/VFJSkpycrJmn5ubmb775Znh4eEBAgImJCXtVIwOFMYo4p6qqKiAgIDMz097ePjU1dfTo0bSdEMLj8dSbFRcXp6SkaOapra3ttGnTgoKCJk+ebGxszE71yPBgjCJuKSgo8Pf3z8/Pd3Nz279/f79+/Wj7gwcPPDw8Jk6cGBQUNGXKFCMjI/WvFBUV7d69WyqVnj59mrbY2dmJRKLHt0RIFzBGEYecOXMmICCgoqLCx8dnz549zs7O6o+kUqn60t7Z2Xn27NnBwcFvvPGGQCBQb1NYWJiamop5ihiGMYq4Yvfu3aGhoU1NTQEBAdu3bzc3N2+zwfXr16VS6c6dO/Py8miLg4PD1KlTg4KC/P39hUKhesvbt29LpdKEhITc3FzaYm9v/9Zbbz2+JUJaQBDiAIlEwufzAWD+/PlyufzZG+fk5IjFYvX1PgA4OjpGRERkZGSoVKrHt+zfv796SwcHh7CwsLS0tJaWFl0eEDIgGKOIZSqVSiwWAwCPxxOLxS/1uzQl+/btq07Jbt26RUVFPZ6n2dnZn376qbu7u3pLgUDwwQcfaPNIkKHCGEVskslkISEhAGBsbLx169Z274fmaZ8+fdQp2b179yfmKd3SycmJbpacnNzhg0CGDu+NItbU1NTMmDHj5MmTVlZWUql08uTJHd8nvX/6yy+/3L59m7b06NFjxowZQUFBvr6+mvOlunbtWlpa+o9//OObb77peL/IoLGd48hA3blzx8PDAwC6dOmSnZ2t3Z0rlcqMjIylS5e6urqqv+p9+/b97LPP8vPz6TbffvstAOB1Peo4PBtFLLh69erUqVPv3bs3cODA/fv3d+/eXUcdqVSqzMxMqVQqlUrLysoAYNu2baGhoQCQnp4+bty44cOHnzt3Tke9IwOBMYqYduTIkcDAwIcPH/r5+e3atcvGxoaBTpVKZXp6elJS0tq1a62srACgvr7exsZGKBTW1dXhI0+oIzBGEaO2bNkSEREhl8vDw8M3bdrE7pR4Dw+PvLy8ixcvent7s1gG0nf4vlHEEEJIdHT0vHnz5HJ5VFTUli1bWH+saNiwYQBw8eJFdstA+g5jFDFBoVAsWrRo5cqVAoEgNjZWIpFoDpqzBWMUaQU+FYd0rrq6eu7cuQcOHLCwsNixY4dIJGK7olavvfYaAFy4cIHtQpB+w3ujSLfy8vK8vb2bmppcXFz27t1LTwA5or6+3tbWViAQPHz4EF9UitoNL+qRbkkkkqamJiMjo+PHj3MqQwHA0tLy1VdfbWlpycnJYbsWpMcwRpFuFRcXA8CAAQPoZHuuwet61HEYo0i3FixYAADqted+/PFHb2/vxMREVov6C44yoY7DGEW69eabb/J4vOzsbLlcDgDV1dXZ2dlnz55lu65WGKOo4zBGkW7Z2Ni4u7vLZLIbN24A9y6ivb29BQLBtWvXZDIZ27UgfYUxinRO84yPxuilS5dUKhXLZQEAgLm5eb9+/eRy+bVr19iuBekrjFGkc5ox6ujo2KNHj/r6+lu3brFdVyua7Hhdj9oNYxTpHI1R9YU8167r8fYo6iCMUaRzw4YN4/F4V65coaNMXIstrtWD9A7GKNI5GxubPn36yGQyuk4n12LLy8tLKBTm5OTgKBNqH4xRxATN6KT/nZ2drVQqWS4LAADMzc379+8vl8uvXr3Kdi1IL2GMIia0GWXq2bMnp0aZuHaCjPQLxihiQpthJRxlQp0Jxihigre3N5/Pv3r1KjdHmbgW60i/YIwiJlhbW9NRpuvXrwP3YnTIkCFCofD69etNTU1s14L0D8YoYojmGd9rr73G4/EuXbrEnVEmDw8PhUKBo0yoHTBGEUM0z0Dt7e179erV2NiYl5fHdl2t8LoetRvGKGJImwt51q/r6+rqvvnmG/Wj/azXg/QXxihiyLBhw/h8/pUrV1paWoDt2CotLR0zZsyKFStWrVpFW3r06AEA3HkRKtIjGKOIIW1W7GDxIjo3N3fUqFGXL192d3cPDQ2ljVlZWQBAIx6hl4IxipjT5lkmHo93+fJlhULBZA2ZmZljx44tKioaMWJEVlZW3759ASAuLm7t2rUA4Ovry2QxqHPAGEXM0YxROzu73r17MzzKtGvXLj8/v8rKypkzZx4/ftzJyYkQEh0dHRkZSQiJjIw8ceIEY8WgTgNjFDGnzYU8w7dHJRJJcHCwTCaLiopKSkoyMzNraWkJDw9fuXKlUCiMi4v78ccfmakEdTIYo4g5Xl5edMWO5uZmYDBGlUrl0qVLly1bRggRi8USiYTP59fV1QUEBGzdutXS0jItLS0iIkLXZaDOCmMUMYeVUSaZTBYaGrp+/XoTE5Nff/01Ojoa/hypP3TokKura3p6ur+/v05rQJ0bxihilOab8L29venrnHU3ylRdXT1x4sTExEQ7O7vDhw+HhIQAQE5OzogRIy5fvuzp6XnmzBlvb28d9Y4MBMYoYlSbUably5d/9913Onok9Pbt26NGjTp16lSvXr0yMzPHjBkDAMePHx89enRJScmoUaNOnjxJp4si1CEEIQZlZGQAgLe3t647Onv2rLOzMwAMHjz47t27tDE+Pt7Y2BgAAgMDm5qadF0DMhA8QgjLQY4MSWNjo5WVFQBUV1fb2NjoqJfU1NTQ0NDGxsaJEycmJSVZW1sDgEQi+fDDDwkhUVFR33//PZ+Pl2JIO/CbhBhlbm5uZGSkUql69uwpkUj++OMPrXfx008/BQYGNjY2zps3b9++fdbW1kqlMjIyctmyZXw+f/369XSkXuv9IsPF9ukwMjhbtmzh8Xj06ycQCPz8/DZu3FhRUdHxPatUKrFYDAA8Hk8sFtPG+vp6kUgEAKampomJiR3vBaE2MEYRC8rKymJjY0UiEb1TSfPU19c3Jibm/v377dtnc3PznDlzAEAoFG7cuFHdEZ1W5eDgcOrUKe0dAUJ/wRhFbKqpqYmPj39inpaXl7/UfsaNGwcAlpaW+/fvp435+fn0kXk3N7ebN2/q5ggQwiEmxA01NTV79uyRSqWHDh2i6zUJBILx48eHhYVNnz792YNRKpVqxIgR58+f79q16759+4YMGQIAZ86cCQgIqKio8PHx2bNnDx21R0gn2M5xhB5RVVVFz0+NjIzoV9TExEQkEsXHx9fW1j7tt9LS0gYPHlxUVER/TE5ONjMzA4Dp06c3NDQwVTsyUHg2ijiqqqpq3759Uqn04MGD9DEnU1PTCRMmBAUFzZw5k86a0qRQKIRCIQBIJJKPPvpIpVItWLAgNjaWNiKkOxijiOuekaezZs2ytLRUb0kI+fTTT9euXcvj8b744gv6+DxCuoYxivTGvXv3kpKSpFJpZmYm/d6amZn5+fkFBQXNnj1bKBS+9957O3bsMDY23rx5s/q19gjpGsYo0j8lJSVSqTQxMfHcuXP0C2xlZWVjY3P37l07O7uUlJSxY8eyXSMyIBijSI+VlJQkJyfT89NevXpVV1enp6fTkXqEGIMxijqDlJSUWbNmeXh45Obmsl0LMjgYo6gzaG5utrKyUqlUtbW1FhYWbJeDDAu+oAF1BiYmJgMHDlQqlZcvX2a7FmRwMEZRJ8HwAnkIqWGMok4CYxSxBWMUdRLMLJCH0ONwiAl1Ei0tLdbW1nK5/MGDB48/KoqQ7uDZKOokjI2NBwwYoFKprly5wnYtyLBgjKLOA6/rESswRlHngaNMiBUYo6jzwBhFrMAhJtR54CgTYgWejaLOw9jYeNCgQSqVKjs7m+1akAHBGEWdCl7XI+ZhjKJOBWMUMQ9jFHUqOOcJMQ+HmFCnIpfLra2tm5uba2pqnr0sM0LagmejqFMxMjIaNGgQIYSzb8y7deuWRCLhbHmoHTBGUWdDb49y87r+559/9vDwWLZsmZeX1+jRoyUSSVlZGdtFoY7CGOWoxsbGzMzMlpYWtgvRP5wdZdqxY8fixYtVKpWxsbFQKDx9+vSyZcu6d+8+YcKEjRs3VlZWsl0gaieMUY7y8fHx9fW9du0a24XoHzrKxLUYlUgkc+bMaW5uXrhwYUNDQ21tbWJiokgkEgqFx44dW7RokYuLCz0/LS8vZ7tY9JII4qS5c+cCwIYNG9guRP+0tLSYmZnxeLyamhq2ayGEEIVCsWTJEgDg8Xhff/11m09ramri4+NFIpGxsTH9X1IgEPj6+sbExJSXl7NSMHpZGKMc9f333wNAREQE24XoJR8fHwA4ceIE24WQpqamoKAgADAxMdm+fbu6vaio6OHDh5pbVldX0zw1MjLSzNMNGzY8ePCA8cLRS8AY5aiTJ08CwLBhw9guRC8tXrwYANatW8duGVVVVaNHjwYAOzu79PR0zY8CAwNNTU1FIlF8fPxz89TExIRuWVtby+wRoBeCMcpRdXV1AoHA2NhYJpOxXYv++emnnwAgJCSExRoKCgr69esHAL17975x44bmRyqVasqUKXx+68iEmZlZYGBgYmJiQ0OD5mZVVVU0T4VCId3yacmL2IUxyl2enp4AcP78ebYL0T90Vmbfvn3ZKuDs2bPOzs4AMHjw4Lt37z5xm4qKig0bNvj6+mrmKU3Juro6zS0rKyuflqdttkSswBjlrrCwMACIi4tjuxD9I5fLWRxl2r17t7m5OQBMnDjxRS7DS0pKYmJifH19eTxemzytr6/X3PJpyfvvf/8bx6NYhDHKXTExMQCwcOFCtgvRSyNGjACAQ4cOMdzv//73P3rOOG/evJaWlpf63eLi4jZ5am5uLhKJEhMT29zbKSkp+e6770aMGKHeUiAQHD16VKuHgl4Uxih3nTp1CgC8vLzYLkT/yGQyT09PV1dXS0vLsLCwtLS05uZmXXeqUqnEYjGd2CQWizuyq6KiojZ5amtr+8QDKS4uXrdunZmZGQC88sorHToA1F4Yo9zV0NAgFAqNjIyamprYrkWfVFRUjBw5EgAsLS3V86MdHBwWLFhw+PBhuVyui06bm5tDQ0MBQCgUbty4UVu7LSwspHmqPhA7Ozuap5qnuunp6QBgY2OjrX7RS8EY5bQBAwYAwLlz59guRG+ox8d79ep148aN27dvx8TE0MdDKXt7+8djqINqamrGjRtHg3v//v3a2q2mvLy8L7/8cuDAgeoDcXR0XLx4Mf1UpVLZ29sDwL1793TRO3o2jFFOCw8Pd3Z22bx5L9uF6Idz5849bXw8JydHLBZ7eHhonp/SPO3g+em9e/eGDBkCAK6urpcuXerYETxfQUHB119/TWdxTJ48Wd3u5+cHAKmpqbouAD0OY5TTfvhBBkDmz2e7Dn2Qmpr6IuPjNE/79++veVpH81ShULxsp1evXu3evTsADBgwoKioqGNH8NJdX7hwQf3jihUrAOCLL75gsgZEYYxy2unTBIAMHcp2HZy3adOmlx0fp3n66quvqvO0a9euUVFRGRkZKpXqRfZw9OhR+mbo8ePHs/78fmJiIgC89dZb7JZhmDBGOa2hgQiFRCgkjY1sl8JVHR8fp3nat29fdZ5269btuXkaHx9PH9YMDAzkwhhgQUEBDtazBWOU6wYOJADkzBm26+Cm5uaF8+YBgJGR0ZYtWzq4M5qn7u7u6jzt3r37E/M0JiaGTkWKiopSKpUd7FcrVCqVg4MDADztoSmkOxijXPfeewSA/PAD23Vw0MOHZPLkfcOH29raand8nOapm5ubOk979uxJ81Qul3/wwQd0uvsPHPtXmThxIgDs3r2b7UIMDsYo1/33vwSAvP8+23VwTXFx64l6ly4Prl7VRQ9KpTIjI2Pp0qWurq6a0zbpw0VpaWm66LQj/vnPfwLA559/znYhBgfffs91dMojx17l/pfPP//cycnJ1dU1Ojo6Ly+PoV5zcsDXF3JywNMTsrJsBg3SRSd8Pn/06NH/+c9/7t69m5GRERUV5eLiIhQKraysDh8+PG3aNF102hGcXT2l08MFlrlOJgNra1Cp4OFDMDdnu5pHxcbGLlmyRPMrNHTo0ODg4ODgYM07jFp27BjMng21tTB+PCQng62trjp6jEKhsLe3r6urKysrc3FxoS1lZWV0zhPrCgsLe/fu7eTkhMuQMI3t02H0fIMHEwCSlcV2HRo0x8enTJlCT9acnJzU3ytPT0+xWHzr1i0tdxwfT4yMCAAJDCRsjI+PHTsWAOit2Fu3bpmamrq7uzNfxtPQf4Li4mK2CzEsGKN6YN48AkDWr2e7jj81NzfPmTMHAIRCoeZqUQqF4siRI2FhYXQ2pWae5ufna6HjmBjC4xEAEhVFWBof//jjjwHgyy+/JIQoFAoLCwsej1dVVcVKMY+bNGkSAKSkpLBdiGHBe6N6gFO3R+vq6gICArZt22ZpaZmWlhYREaH+SCAQTJgwISEh4f79+2lpaWFhYdbW1rm5uStXrrwwfz4MGADR0XD7dnt6VSohMhKWLQM+H9avB4kE+Ox8dTXvPwoEgsGDBxNCsrOzWSnmcdxcFbXzYzvH0fOdOUMEAjJjBtt1EHLv3r2hQ4cCgKur68WLF5+7fWNjY1JSUnBwcPXrrxMAAkD4fDJ6NJFIyEu9RGPVKgJAzM0J28+M37x5EwC6detGf1y6dCkAPL7eJ1t27doFAFOmTGG7EMOCMcp1LS2kvJxoLr1TU0Ne/uFvLbh27RodS/H09Hzp58cbG0laGgkLI5aWf+Wpry+JiSGlpY9sWVNDVq0iU6eSKVPI//0fKSsjhJD6ejJ1KhceQlCpVLa2tgBQVlZGCNmyZQsABAUFsV1Xq8LCQgBwdHRkuxDDgjHKdUeOtJ1+b2pKHl0hjQnHjh2jdzxHjRpVWVnZ/h3V1ZFffyUzZhBT09Y8FQjI+PEkNpZUVpKHD4mnJxGJyJ495OBB8s47pGvXtjnLtvHjxwPA3r17CSHXrl0DADc3N7aL+gsdZWL4PSkGDu+N6gF7e4iOhj/+YK2AhIQEf3//2trawMDAY8eO0YcO28nSEt55B1JSoKoK0tIgLAxMTODECYiMhNOnYf16MDKCtDQQiWDyZPj1V/D0hK++0t6haIHm7VEPDw8LC4s7d+5UVVWxXVcrWt6FCxfYLsSAYIzqARcXeOcd+PBDdnqXSCTvvfdeS0tLVFTUzp07TU1NtbNfc3OYNg0SEqC0FOLjYfZsmDwZzp6FwED4c+UMAICQEDhzRjs9akmbUaYhQ4YQQi5dusR2Xa1wEj7zMEb1Q3Q0HD8Ohw8z2qlSqYyMjFy2bBmfz1+/fr1EIuHrYnzcxgbCwyEpCUxM4O5dcHF55FNXV7h7V/uddgAdDVef7nFtcBxjlHkYo/rBzg7WroUlS6C5ubUlNxcaGnTYY0NDw4wZM+Li4kxNTbdv375kyRIddqb2yitQWflIS3k5dOnCRNcvzN3d3dbWtrS0tKysDLgXW3hRzzyMUb3x7rvg4gIxMa0/vv02ODq2XhbX12u5rz/++GPcuHF79+51cHA4evRoUFCQljt4Gi8vOHDgkZYDB8DLi6HeXwyPx/P29oY/o5NrsdWjRw9nZ+eqqio6ao8YgDGqN3g8+OEHWLcOFApoaAAbG2huhr17W+M1JASSk6GpSQsdFRQUjBkz5sKFC25ubpmZmZrLUurc3/4GeXnwySdQWAj37sGaNXDwICxfzlwBL0YzOj08PCwtLQsLCysqKtiuqxXXTpA7PYxR7vrlF4iLe6Rl8GAIDweFAiws4NQpKC6GmBjw9YXGRti5E2bPBgeH1vPTdl/vnzlzZuTIkfn5+T4+PllZWZprbDDBxQVOn4bSUhgzBnx84MIFOHkSGK7hBWjmFJ/Pp48kcOdZJoxRprE94wo92Zo1hMcjAgE5fpwkJv7V/vAh2bCBtFn4p7CQrFtHhg9vnYgJQKytSVgYOXiwpLm5+cU7TU5ONjMzA4Dp06c3NDRo6VA6od9//x0AXFxc6I9///vfAWDNmjXsVqWWkpICAJMmTWK7EEOBMco5CgWJjGydlv7f/77c7xYVkZgY4uvb+gYPLy8/W1tbuuzlc/M0JiaGDsQvWLCgg2sOd3pt1oVPSEgAgFmzZrFdV6uSkhIAsLe3f8G1+VAHYYxyS309EYkIADE1JTt3tn8/+fnkX/9q8fYepr7ssLe3nz9//qFDhx6PSJVKRZfnbfeqcAaIrgtP34Gfm5sLAD179mSrGIVCERkZGR8fr26hr0PNyclhqySDgjHKIZWVZNQoAkDs7UlGhnb2eefOnZiYGM1hIjs7O3p+ShcilslkISEhAGBsbLxt2zbt9GoA6B8e+ldHqVRaWVkBQHl5OfOV1NXV+fv703/ZBw8e0MZXXnkFAD7++GPm6zFAGKNc8fvvpG9fAkDc3Ehenvb3f/36dbFY7OHhoc5TZ2fnOXPmWFtbA4Ctre2JEye032vn1WZd+DfeeAMADh48yHAZZWVldEDJwcHh1KlTtPG3336j92e+/fZbhusxTBijnJCVRZycCADx8SH37+u2L7rsZf/+/dV5amRklJ2drdteO50268J/+OGHALB69Woma8jPz+/Tpw8AuLm53bx5kzbu37/f0tKSBmt1dTWT9RgsjFH2JScTMzMCQAICCJPD49nZ2TNnzpwzZ86lS5eY67WzaLMu/NatWwFg5syZjBWQlZXl6OgIAK+//vr9P//2/vzzz0ZGRgAQFhaGcy0YgzHKMolE4uNTDkAWL2bnLaKo3TTXhb9x4wYA9OjRg5muH5+apl4dCwCioqJwjJ5JGKOsUSqVH330EQBYWrrExDx8/i8gjtFcF16lUtH3sd7X9U2ZJ01Nk8vlCxcuBACBQBAbG6vrAlAbGKPs0Bwf37p1K9vloPaQSqUAMHXqVPqj5qKhOqJSqZYvX95mapp6pN7CwoK+TBoxDGOUBdXV1WPGjMHxcX13584dAHBycqI/0muLVatW6ag7mUz29ttvt5maVlpa6uXlRR+punDhgo66Rs+GMcq0O3fu0FHyLl264Pi4vtNcFz4vL+/06dP19fW66KiqqorOqbKzs/vtt99oY05OTo8ePQCgT58+2lnCGrULxiijrly50rVrVwAYOHAg/X8P6TVm1oW/ffs2/dPbtWvXy5cv08bjx4/TxfVGjBhRUVGh0wLQs2GMMufw4cN0rrufn5/6aROk12bMmAEAQ4cO1V0X58+fp48kDRo0qKSkhDZKpVK6msvMmTMbGxt11zt6ERijDNm8eTOd0BceHk6fwkSdgHqOUffu3cVicW5urnb3f+jQIfqY6YQJE2pra2mjeqQ+KipKqVRqt0fUDhijTGhubh40aBCdHIMT+joTpVIpEok0l6gaMmTImjVrtHKnUj2X/t1336V/ehUKBV3NhcfjrV27tuNdIK3AGGVISUlJQkIC21UgnZDL5RkZGVFRUXTEifL09BSLxepnNF+K5lz6FStW0D+9TU1NdDUXExOTHTt2aPsgUPthjCKkNQqFIiMjIyIigk7F18zTFz8/1ZxLHxcXRxsrKyvpa7rs7e1PnjypsyNA7YExipD2yWSytLS0sLAwOqiomae///77s383Pj4eACwtLQ8cOEBbCgoK6GouvXv3vnHjhu7LRy+HRwgBhJBuyGSyI0eOSKXS3bt319XV0UZPT8/w8PC5c+fS2W+PW758eUhICF1/9Ny5c9OmTSsvLx8+fPiePXvoqD3iFIxRhJigztOUlJT6+noA4PP5I0eODAoKCg4OdnV1feJvpaamhoaGNjY2Tpo0KSkpiY7aI67BGEWIUU1NTUePHpVKpcnJyQ0NDaCRp2+//TZd/IPatGlTZGSkQqF4//334+Li6Kg94iCMUYTYoc7TXbt2NTY2wp95OmvWrClTpqxevXr79u08Hu+LL76Ijo5mu1j0LBijCLGstrY2NTU1MTHxyJEjLS0t6naBQLB58+awsDAWa0MvAmMUIa548OBBWlra2rVrc3NzTUxMVq9e/cknn7BdFHo+jFGEOKeiosLOzk4oFLJdCHohGKMIIdQh/OdvghBC6OkwRhFCqEMwRhFCqEMwRhFCqEP+H8YIkfSxlWyvAAABdHpUWHRyZGtpdFBLTCByZGtpdCAyMDIzLjAzLjIAAHice79v7T0GIOBlgAAmIBYGYhEgbmBkY0gA0ozM7AwKQJoZxoXQTEwwmgMsDeUyM7I5aIBoFjaHDBANEiCGQYYmbgZGBkYmoIuAGhlYWBlY2RjY2BnYOTKYODgTOLkymLi4E7h5MpjYeBl4+TKY+PgT+AUymAQEEwSFMph42BOEeBNEQD5m4+Dk4uZhZ+PjFxAU4hV/B/IlNEAYhO94bD2wyFjsAIjzyWniAenmtftBbJadsw5c63xtC2K/7XU/sPrWK7C4Kcv//axvw8HsPg2h/UJ+K8Hs/Wx89iuWr9wHYvt+/mP/pckfLH46VdBh5j9BsPmHYnMcElcZgNmnTGY5zCp4BFazY98Eh7bLM8B6q1rdHIpELe1A7Ng1LXbnLk60B7H3Om20/x3F4QBil2Z121+vSAOzH4uu2hcwqQnMlp+7a3/3Jlcw+/qRKfvjNM+D9YoBABdxZTBkP5k0AAAB6XpUWHRNT0wgcmRraXQgMjAyMy4wMy4yAAB4nH1UW24bMQz89yl0AQscPiTxM7aDIihiA63bO/Q/90fJNZxVACFai5BWI1I7M/KhZPt1+fnvo3w2vhwOpdA3P3cvf4WIDu8lB+X0+uPtWs73l9Pzzfn253r/XeCFqWzPV+zL/fb+fINyLkerrRlUy5GraHNCoUpb2/dyuZajVhNX5nJEFTNrukBK5tQ6xGhYrANG5AugJlBifZCMTDlEu48F0hKJ6s6CVo5Uh8ZBaYFs5Zbr1skF2zGZm9sC2SNnAC1KUm4RgVhfAEcAo3Zv6LbVBpnzAugB5ModIz8nRgNYMoQQqUhtHofjRPZG4iuKkAIFlxie+iCQTm2lD3hDGkuUzWOyDx3LnLJVB0XS/N6gv2tbAXWjiM3BIyiAOGNFJWyjSKKghusCSGayArYNSMMxWjJAAC9LpzqbKIxwhMYWkqXgGA9vqHUPv0smJ17JA38g0ZhDaNSGobbK+Xq9fLklj3tzul0v+73Jh/fLEZMi+w3Iqe4+R3TbzYzobXcsovfdlog+dvNpdN8tptExO0kzAJNjNAN4coZmgEwOyCLQSWnNAJskzWkoNmmnGdAnkTQDxiSGZoBPpGvW+4TwdmKfiifbM7c5f/6fxfjwHzer9TlLAS6WAAAA8XpUWHRTTUlMRVMgcmRraXQgMjAyMy4wMy4yAAB4nDWPTa7DIAyEr/KWiUSQx8bGVpbZt4foNXr4DkiPFfqYP57X8ZzP836ODz7r4Py//H2Py3uEY7RLu42odl+ju9XQdqGbu8dGaS7VpAMuslTGa8pYqrSRJOhVavRJz8EsIuk+pQw7S3W2m8THrCUygzkRfTMwtw/ipe3WrhO5R2kCjLIexYRFZrD25iRk7f4ZJbGIsz5XjlaOrOWCYM9OmWsRn7xAETqsmMd2o9abEoj7ApJFExsFsP0LM0VlG3wSi/3X4ZNLbYlFN0GoBoODy72d3x+8uk1JgVPPpAAAAABJRU5ErkJggg==", + "text/plain": [ + "" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Get some rules\n", + "rule_1 = mc.rules.basic_rules.rule_of_five\n", + "rule_2 = getattr(mc.rules.basic_rules, \"rule_of_chemaxon_druglikeness\")\n", + "\n", + "# Get a molecule\n", + "mol = dm.to_mol(\" CN(C)CCOC(C1=CC=CC=C1)C1=CC=CC=C1\")\n", + "\n", + "mol" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "2ec6cf22-26eb-4608-a4f9-8cc48f916a21", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Apply rule #1\n", + "rule_1(mol)" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "ff59c5e3-ca9d-4ebc-ba34-b83e0b314d34", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Apply rule #2\n", + "rule_2(mol)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ad7d822b-0e98-477f-acdf-552de7396d58", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:medchem]", + "language": "python", + "name": "conda-env-medchem-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/tutorials/Molecular_Complexity.ipynb b/docs/tutorials/Molecular_Complexity.ipynb index 45d5b3b..2fc5abc 100644 --- a/docs/tutorials/Molecular_Complexity.ipynb +++ b/docs/tutorials/Molecular_Complexity.ipynb @@ -5,6 +5,8 @@ "id": "1b061dc5-b170-4205-9bd3-eef4ecb56093", "metadata": {}, "source": [ + "# Molecular Complexity\n", + "\n", "The `ComplexityFilter` allows to filter a molecule according to its \"structural complexity\". It's often a good filter to discard compounds that might be challenging to synthetize." ] }, diff --git a/docs/tutorials/Molecular_Filters.ipynb b/docs/tutorials/Molecular_Filters.ipynb deleted file mode 100644 index 362c9a0..0000000 --- a/docs/tutorials/Molecular_Filters.ipynb +++ /dev/null @@ -1,244 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "cc35111a-d3a8-4313-962c-290bbf563f35", - "metadata": {}, - "outputs": [], - "source": [ - "import datamol as dm\n", - "import pandas as pd\n", - "\n", - "import medchem\n" - ] - }, - { - "cell_type": "markdown", - "id": "a4d255bb-e3eb-42e1-9e50-c82dd7ee3624", - "metadata": {}, - "source": [ - "## Rules" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b01dae00-c7e7-4320-8e57-fb745fead31e", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "22726bd9-e8f5-4fec-a145-395c8d6261dd", - "metadata": {}, - "source": [ - "## Generic Filters" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a0a34acc-405c-4546-80ff-d668d6c114ac", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "5ca249eb-8523-493b-a818-7a8fce6a671b", - "metadata": {}, - "source": [ - "## Alerts" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4a08c8e1-1bc1-472d-a63c-a790b6e94785", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "d4a95097-11c2-43f5-ab54-64612d7b6e58", - "metadata": {}, - "source": [ - "# Demerits - Lilly" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "629490f1-a327-41c7-931f-f8a76bca42d2", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "b064c534-9c7d-4fa5-97e8-faa84d559225", - "metadata": {}, - "source": [ - "---" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1e00d06b-320c-4e62-bebf-bc5730b427da", - "metadata": {}, - "outputs": [], - "source": [ - "# import datamol as dm\n", - "# import numpy as np\n", - "# from loguru import logger\n", - "\n", - "# data = dm.data.freesolv().sample(500)\n", - "# smiles_list = data.smiles.values\n", - "\n", - "# from medchem.filter import lead\n", - "# from medchem.demerits import score, batch_score\n", - "# from medchem.alerts import NovartisFilters\n", - "# from medchem.alerts import AlertFilters\n", - "# from medchem.catalog import NamedCatalogs\n", - "# from medchem.utils.loader import get_data_path\n", - "# from rdkit.Chem import rdfiltercatalog\n", - "\n", - "# ### Using the filter module\n", - "\n", - "# The filter module provides a variety of two types of filters:\n", - "# - `generic`: custom filtering based on some given molecule properties such as number of atoms, presence of specific atom type, etc\n", - "# - `lead`: filtering based on structural motifs that are known to either be toxic, reactive, unstable or frequent false positive\n", - "\n", - "# # common filters including pains, brenk, nih, zinc\n", - "# pains_a = rdfiltercatalog.FilterCatalogParams.FilterCatalogs.PAINS_A\n", - "# lead.catalog_filter(smiles_list, [\"nih\", pains_a, NamedCatalogs.dundee()])\n", - "\n", - "# # filtering based on some commons alerts + additional lead like rules\n", - "# lead.alert_filter(smiles_list, alerts=[\"Glaxo\", \"BMS\"], rule_dict=dict(MW=[0, 100]))\n", - "\n", - "# # filtering based on NIBR screening deck process described in\n", - "# # \"Evolution of Novartis' small molecule screening deck design\" by Schuffenhauer, A. et al. J. Med. Chem. (2020),\n", - "# # https://dx.doi.org/10.1021/acs.jmedchem.0c01332.\n", - "# lead.screening_filter(smiles_list, return_idx=True)\n", - "\n", - "# # Filter based on the demerit scoring of Eli Lilly\n", - "# test_config = {\n", - "# \"min_atoms\": 10, # default is 1\n", - "# \"soft_max_atoms\": 30, # default is 30\n", - "# \"hard_max_atoms\": 50, # default is 30\n", - "# \"nodemerit\": False, # default is False\n", - "# \"dthresh\": 160, # default is None with no threshold\n", - "# }\n", - "# lead.lilly_demerit_filter(smiles_list, max_demerits=160, return_idx=True, **test_config)\n", - "\n", - "# ### Advanced options\n", - "\n", - "# The advanced options allow a better control over the filtering process. They also provide more information on the issues with the molecules.\n", - "\n", - "# #### AlertFilters\n", - "\n", - "# These are the underlying filters called by `lead.alert_filter`. In the output, the compound status is indicated as either `\"Exclude\"` or `\"Ok\"`.\n", - "\n", - "# filter_obj = AlertFilters(alerts_set=[\"inpharmatica\", \"SureChEMBL\"])\n", - "# filter_obj.list_default_available_alerts()\n", - "\n", - "# out = filter_obj(smiles_list)\n", - "# out\n", - "\n", - "# #### NovartisFilter\n", - "\n", - "# These are the underlying filters called by `lead.screening_filter`. \n", - "\n", - "# Here is an explanation of the output:\n", - "# - **status**: one of `[\"Exclude\", \"Flag\", \"Annotations\", \"Ok\"]` (ordered by quality). Generally, you can keep anything without the \"Exclude\" label, as long as you also apply a maximum severity score for compounds that collects too many flags.\n", - "# - **covalent**: number of potentially covalent motifs contained in the compound\n", - "# - **severity**: how severe are the issues with the molecules:\n", - "# - `0`: compound has no flags, might have annotations;\n", - "# - `1-9`: number of flags the compound raises;\n", - "# - `>= 10`: default exclusion criterion used in the paper\n", - "# - **special_mol**: whether the compound/parts of the compound belongs to a special class of molecules (e.g peptides, glycosides, fatty acid). In that case, you should review the rejection reasons.\n", - "\n", - "# filter_obj = NovartisFilters()\n", - "# out = filter_obj(smiles_list)\n", - "# out\n", - "\n", - "# #### Demerits scoring\n", - "\n", - "# Demerit scoring uses the Eli Lilly filter rules. Those are complex rules, that can be customized in any way you wish. \n", - "\n", - "# The following \"information\" will be computed and added as columns to a DataFrame for each run:\n", - "\n", - "# - **status**: this was added for compatibility and has values `\"Exclude\"`, `\"Flag\"` or `\"Ok\"`.\n", - "# - **rejected** : whether the molecule pass the filter or was rejected\n", - "# - **reasons**: the reasons why the molecule was rejected if available\n", - "# - **demerit_score** a demerit score for molecules. The lower the better. A cutoff is used to reject molecule with too many demerits, which you can refilter again after.\n", - "# - **step**: step of the pipeline where molecule was filtered out, if available\n", - "\n", - "\n", - "\n", - "# out = score(smiles_list, **test_config)\n", - "# out\n", - "\n", - "# # Although the demirits.score is already quite fast, you can also call the parallelized version of it using the `batch_score` function\n", - "\n", - "# out2 = batch_score(smiles_list, n_jobs=2, batch_size=100, progress=True, **test_config)\n", - "# out2\n", - "\n", - "# ### PhysChem Rule application\n", - "\n", - "# You can also apply a set of physchem rules to a list of compounds\n", - "\n", - "# You can apply the basic rules independently\n", - "\n", - "# from medchem.rules.basic_rules import rule_of_five, rule_of_three, rule_of_leadlike_soft\n", - "\n", - "# print(\"RO5\", rule_of_five(mol))\n", - "# print(\"RO3\", rule_of_three(mol))\n", - "# print(\"ROLS\", rule_of_leadlike_soft(mol))\n", - "\n", - "# To list all available rules and what they are good for, use :\n", - "\n", - "# from medchem.rules import RuleFilters\n", - "\n", - "# RuleFilters.list_available_rules()\n", - "\n", - "# To list the available rules for small molecules only, you can use the `list_available_rules(\"small molecule\")`\n", - "\n", - "# RuleFilters.list_available_rules(\"small molecule\")\n", - "\n", - "# You can also apply the rule filter to a batch of molecules.\n", - "\n", - "# rule_obj = RuleFilters(rule_list=[\"rule_of_five\", \"rule_of_oprea\", \"rule_of_cns\", \"rule_of_leadlike_soft\"], rule_list_names=[\"rule_of_five\", \"rule_of_oprea\", \"rule_of_cns\", \"rule_of_leadlike_soft\"], precompute_props=True)\n", - "\n", - "# out = rule_obj(smiles_list, n_jobs=-1, progress=True)\n", - "# # you need to reset the columns because the input rule list can be columns\n", - "# out" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python [conda env:medchem]", - "language": "python", - "name": "conda-env-medchem-py" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.4" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/medchem/__init__.py b/medchem/__init__.py index 9c27975..2ef7931 100644 --- a/medchem/__init__.py +++ b/medchem/__init__.py @@ -23,8 +23,7 @@ "catalogs": "medchem.catalogs", "constraints": "medchem.constraints", "complexity": "medchem.complexity", - "filters": "medchem.filters", - "api": "medchem.api", + "rules": "medchem.rules", } @@ -62,5 +61,4 @@ def __dir__(): from . import catalogs from . import constraints from . import complexity - from . import filters - from . import api + from . import rules diff --git a/medchem/filters/__init__.py b/medchem/filters/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/medchem/rules/__init__.py b/medchem/rules/__init__.py new file mode 100644 index 0000000..af9f518 --- /dev/null +++ b/medchem/rules/__init__.py @@ -0,0 +1,10 @@ +from ._utils import in_range +from ._utils import n_heavy_metals +from ._utils import has_spider_chains +from ._utils import n_fused_aromatic_rings +from ._utils import fraction_atom_in_scaff +from ._utils import list_descriptors + +from . import basic_rules + +from ._rule_filter import RuleFilters diff --git a/medchem/rules/_rule_filter.py b/medchem/rules/_rule_filter.py new file mode 100644 index 0000000..bfa9fbe --- /dev/null +++ b/medchem/rules/_rule_filter.py @@ -0,0 +1,192 @@ +from typing import Union +from typing import Callable +from typing import Optional +from typing import List +from typing import Sequence +from typing import Dict +from typing import Tuple + +import functools + +import pandas as pd +import datamol as dm + +from medchem.utils import loader + +from . import basic_rules + + +def _compute_batch_props(mols): + """Wrapper for making batch computing property under parallelization""" + properties_fn = { + "mw": dm.descriptors.mw, + "n_rings": dm.descriptors.n_rings, + "n_heavy_atoms": dm.descriptors.n_heavy_atoms, + "n_rotatable_bonds": dm.descriptors.n_rotatable_bonds, + "tpsa": dm.descriptors.tpsa, + "clogp": dm.descriptors.clogp, + "n_hba": dm.descriptors.n_hba, + "n_hbd": dm.descriptors.n_hbd, + "n_lipinski_hba": dm.descriptors.n_lipinski_hba, + "n_lipinski_hbd": dm.descriptors.n_lipinski_hbd, + } + return dm.descriptors.compute_many_descriptors(mols, properties_fn, add_properties=False) + + +class RuleFilters: + """ + Build a filter based on a compound phychem properties. For a list of default rules, use `RuleFilters.list_available_rules()`. + Most of these rules have been collected from the litterature including https://fafdrugs4.rpbs.univ-paris-diderot.fr/descriptors.html + """ + + def __init__( + self, + rule_list: List[Union[str, Callable]], + rule_list_names: Optional[List[Optional[str]]] = None, + ): + """Build a rule filtering object + + Args: + rule_list: list of rules to apply. Either a callable that takes a molecule as input (with kwargs) or a string + of the name of a pre-defined rule as defined in the basic_rules module + rule_list_names: Name of the rules passed as inputs. Defaults to None. + """ + self.rules = self._build_rules(rule_list, rule_list_names) + + def _build_rules( + self, + rule_list: List[Union[str, Callable]], + rule_list_names: Optional[List[Optional[str]]] = None, + ) -> Dict[str, Callable]: + """Build the list of rules to apply.""" + + if rule_list_names is not None and len(rule_list_names) != len(rule_list): + raise ValueError("rule_list_names must be the same length as rule_list") + + if rule_list_names is None: + _rule_list_names = [None] * len(rule_list) + else: + _rule_list_names = rule_list_names + + rules = {} + for rule_name, rule_fn in zip(_rule_list_names, rule_list): + if isinstance(rule_fn, str): + rule = getattr(basic_rules, rule_fn, None) + if rule is None: + raise ValueError(f"Rule {rule_fn} not found") + + elif callable(rule_fn): + rule = rule_fn + + else: + raise ValueError(f"Unsupported rule {rule_fn} of type {type(rule_fn)}!") + + if rule_name is None: + if isinstance(rule_fn, str): + rule_name = rule_fn + else: + rule_name = rule.__name__ + + rules[rule_name] = rule + + return rules + + def __len__(self): + """Return the number of rules inside this filter""" + return len(self.rules) + + def __getitems__(self, name: str): + """Return a specific rule""" + return self.rules[name] + + def __call__( + self, + mols: Sequence[Union[str, dm.Mol]], + n_jobs: Optional[int] = -1, + progress: bool = False, + progress_leave: bool = False, + scheduler: str = "auto", + keep_props: bool = False, + fail_on_error: bool = True, + ) -> pd.DataFrame: + """Compute the rules for a list of molecules + + Args: + mols: list of input molecule object. + n_jobs: number of jobs to run in parallel. + progress: whether to show progress or not. + scheduler: which scheduler to use. If "auto", will use "processes" if `len(mols) > 500` else "threads". + keep_props: whether to keep the properties columns computed by the rules. + fail_on_error: whether to fail if a rule fails or not. + + Returns: + df: Dataframe where each row is a molecule and each column is a the outcomes of applying self.rules[column]. + """ + + if scheduler == "auto": + if len(mols) > 500: + scheduler = "processes" + else: + scheduler = "threads" + + def _rule_fn(mol: Union[str, dm.Mol]): + # Convert to mol object if needed + if isinstance(mol, str): + mol = dm.to_mol(mol) + + if mol is None: + if fail_on_error: + raise ValueError("Molecule is None") + else: + return pd.Series() + + datum = pd.Series() + datum["mol"] = mol + + # Precompute properties + props = _compute_batch_props(mol) + + if keep_props: + datum = pd.concat([datum, pd.Series(props)]) + + # Filter with the rules + datum["pass_all"] = True + datum["pass_any"] = False + for rule_name, rule_fn in self.rules.items(): + datum[rule_name] = rule_fn(mol) + datum["pass_all"] &= datum[rule_name] + datum["pass_any"] |= datum[rule_name] + + return datum + + results = dm.parallelized( + _rule_fn, + mols, + progress=progress, + n_jobs=n_jobs, + scheduler=scheduler, + tqdm_kwargs=dict( + desc="Filter by rules", + leave=progress_leave, + ), + ) + results = pd.DataFrame(results) + + return results + + @staticmethod + @functools.lru_cache(maxsize=32) + def list_available_rules(*query: str): + """List all the available rules and they properties""" + df = pd.read_csv(loader.get_data_path("medchem_rule_list.csv")) + if len(query) > 0: + query_str = "|".join(query) + df = df[df["description"].str.contains(query_str)] + return df + + @staticmethod + @functools.lru_cache(maxsize=32) + def list_available_rules_names(*query: str): + """List only the names of the available rules""" + df = RuleFilters.list_available_rules(*query) + return df["name"].tolist() diff --git a/medchem_OLD/rules/_utils.py b/medchem/rules/_utils.py similarity index 88% rename from medchem_OLD/rules/_utils.py rename to medchem/rules/_utils.py index 22c9d42..0de2847 100644 --- a/medchem_OLD/rules/_utils.py +++ b/medchem/rules/_utils.py @@ -1,9 +1,15 @@ from typing import List + import itertools import datamol as dm -from rdkit import Chem + +from rdkit.Chem.rdmolops import ReplaceCore +from rdkit.Chem.rdmolops import GetMolFrags + from rdkit.Chem.Scaffolds import MurckoScaffold + from loguru import logger + from medchem.utils.smarts import SMARTSUtils _DESCRIPTOR_LIST = [ @@ -41,8 +47,13 @@ ] -def _in_range(x, min_val: float = -float("inf"), max_val: float = float("inf")): +def in_range( + x: float, + min_val: float = -float("inf"), + max_val: float = float("inf"), +): """Check if a value is in a range + Args: x: value to check min_val: minimum value @@ -106,9 +117,9 @@ def has_spider_chains(mol: dm.Mol, min_flagel: int = 2, min_flagel_len: int = 4) scaffold = MurckoScaffold.GetScaffoldForMol(mol) try: scaffold = dm.sanitize_mol(scaffold) - side_chains = Chem.ReplaceCore(mol, scaffold, labelByIndex=False) + side_chains = ReplaceCore(mol, scaffold, labelByIndex=False) if side_chains is not None: - side_chains = list(Chem.GetMolFrags(side_chains, asMols=True)) + side_chains = list(GetMolFrags(side_chains, asMols=True)) side_chains = [dm.to_smiles(x) for x in side_chains] side_chains = [SMARTSUtils.standardize_attachment(x, "[1*]") for x in side_chains] side_chains = [dm.to_mol(x) for x in side_chains] @@ -118,9 +129,21 @@ def has_spider_chains(mol: dm.Mol, min_flagel: int = 2, min_flagel_len: int = 4) except Exception as e: logger.error(e) + assert all([isinstance(x, dm.Mol) for x in side_chains]) + # extract side chains from the scaffold flagel_query = dm.from_smarts(flagel_query) - matches = [x.HasSubstructMatch(flagel_query) for x in side_chains] + + if flagel_query is None: + raise ValueError("Invalid flagel query") + + matches = [] + for x in side_chains: + if x is None or isinstance(x, str): + raise ValueError("None molecule in side chains") + + matches.append(x.HasSubstructMatch(flagel_query)) + return sum(matches) >= min_flagel @@ -136,14 +159,17 @@ def n_fused_aromatic_rings(mol: dm.Mol, require_all_aromatic: bool = True, pairw pairwise: whether to compute the number of fused aromatic rings pairwise. meaning phenanthrene and anthracene would count for 2 fused aromatic rings each """ + # EN: might make sense to move this to datamol # This code can be spedt up by sacrificing readability, will revisit eventually ring_systems = mol.GetRingInfo() + # we use bond since we are focusing on fused rings simple_rings = list(ring_systems.BondRings()) rings = [set(r) for r in simple_rings] ring_map = [set([x]) for x in range(len(rings))] + go_next = True while go_next: go_next = False @@ -158,6 +184,7 @@ def n_fused_aromatic_rings(mol: dm.Mol, require_all_aromatic: bool = True, pairw ring_map.append(new_map) go_next = True break + # simple_rings: is the list of simple rings from ring info # rings: the list of rings after mergin fused rings # ring_map: the mapping between fused rings and the basic rings their contains @@ -171,9 +198,11 @@ def n_fused_aromatic_rings(mol: dm.Mol, require_all_aromatic: bool = True, pairw fused_rings.append(fused_ring) else: fused_rings = [r for i, r in enumerate(rings) if len(ring_map[i]) >= 2] + n_aromatic_fused_rings = 0 for i, fused_ring_bonds in enumerate(fused_rings): aromatic_system = [mol.GetBondWithIdx(bond_id).GetIsAromatic() for bond_id in fused_ring_bonds] + if require_all_aromatic: n_aromatic_fused_rings += all(aromatic_system) else: @@ -182,9 +211,7 @@ def n_fused_aromatic_rings(mol: dm.Mol, require_all_aromatic: bool = True, pairw return n_aromatic_fused_rings -def fraction_atom_in_scaff( - mol: dm.Mol, -): +def fraction_atom_in_scaff(mol: dm.Mol): """Compute the fraction of atoms that belong to any ring system of the molecule as defined by the scaffold @@ -194,17 +221,17 @@ def fraction_atom_in_scaff( n_heavy_atoms = mol.GetNumHeavyAtoms() if n_heavy_atoms < 1: return 0 + n_heavy_scaffold_atoms = 0 scaffold = MurckoScaffold.GetScaffoldForMol(mol) - try: - scaffold = dm.sanitize_mol(scaffold) + scaffold = dm.sanitize_mol(scaffold) + + if scaffold is not None: n_heavy_scaffold_atoms = scaffold.GetNumHeavyAtoms() - except: - pass + return n_heavy_scaffold_atoms / n_heavy_atoms def list_descriptors(): """List all descriptors available for computation""" - # EN: this is until datamol release return _DESCRIPTOR_LIST diff --git a/medchem_OLD/rules/basic_rules.py b/medchem/rules/basic_rules.py similarity index 76% rename from medchem_OLD/rules/basic_rules.py rename to medchem/rules/basic_rules.py index ab8fc8e..d86d3cd 100644 --- a/medchem_OLD/rules/basic_rules.py +++ b/medchem/rules/basic_rules.py @@ -1,13 +1,14 @@ from typing import Union from typing import Optional +from typing import Any import datamol as dm -from medchem.rules._utils import _in_range -from medchem.rules._utils import n_fused_aromatic_rings -from medchem.rules._utils import n_heavy_metals -from medchem.rules._utils import has_spider_chains -from medchem.rules._utils import fraction_atom_in_scaff +from ._utils import in_range +from ._utils import n_fused_aromatic_rings +from ._utils import n_heavy_metals +from ._utils import has_spider_chains +from ._utils import fraction_atom_in_scaff def rule_of_five( @@ -16,8 +17,8 @@ def rule_of_five( clogp: Optional[float] = None, n_lipinski_hbd: Optional[float] = None, n_lipinski_hba: Optional[float] = None, - **kwargs, -): + **kwargs: Any, +) -> bool: """Compute the Lipinski's rule-of-5 for a molecule. Also known as Pfizer's rule of five or RO5, this rule is a rule of thumb to evaluate the druglikeness of a chemical compounds @@ -25,16 +26,21 @@ def rule_of_five( Args: mol: input molecule - mw: precomputed molecular weight. Defaults to None. - clogp: precomputed cLogP. Defaults to None. - n_lipinski_hbd: precomputed number of HBD. Defaults to None. - n_lipinski_hba: precomputed number of HBA. Defaults to None. + mw: precomputed molecular weight. + clogp: precomputed cLogP. + n_lipinski_hbd: precomputed number of HBD. + n_lipinski_hba: precomputed number of HBA. + **kwargs: Allow extra arguments for descriptors pre-computation. Returns: ro5: True if molecule is compliant, False otherwise """ if isinstance(mol, str): mol = dm.to_mol(mol) + + if mol is None: + raise ValueError("Molecule is None") + mw = mw if mw is not None else dm.descriptors.mw(mol) clogp = clogp if clogp is not None else dm.descriptors.clogp(mol) n_lipinski_hbd = n_lipinski_hbd if n_lipinski_hbd is not None else dm.descriptors.n_lipinski_hbd(mol) @@ -50,8 +56,8 @@ def rule_of_five_beyond( n_hba: Optional[float] = None, tpsa: Optional[float] = None, n_rotatable_bonds: Optional[int] = None, - **kwargs, -): + **kwargs: Any, +) -> bool: """Compute the Beyond rule-of-5 rule for a molecule. This rule illustrates the potential of compounds far beyond rule of 5 space to modulate novel and difficult target classes that have large, flat, and groove-shaped binding sites and has been described in: @@ -64,18 +70,23 @@ def rule_of_five_beyond( Args: mol: input molecule - mw: precomputed molecular weight. Defaults to None. - clogp: precomputed cLogP. Defaults to None. - n_hbd: precomputed number of HBD. Defaults to None. - n_hba: precomputed number of HBA. Defaults to None. - tpsa: precomputed TPSA. Defaults to None. - n_rotatable_bonds: precomputed number of rotatable bonds. Defaults to None. + mw: precomputed molecular weight. + clogp: precomputed cLogP. + n_hbd: precomputed number of HBD. + n_hba: precomputed number of HBA. + tpsa: precomputed TPSA. + n_rotatable_bonds: precomputed number of rotatable bonds. + **kwargs: Allow extra arguments for descriptors pre-computation. Returns: ro5: True if molecule is compliant, False otherwise """ if isinstance(mol, str): mol = dm.to_mol(mol) + + if mol is None: + raise ValueError("Molecule is None") + mw = mw if mw is not None else dm.descriptors.mw(mol) clogp = clogp if clogp is not None else dm.descriptors.clogp(mol) n_hbd = n_hbd if n_hbd is not None else dm.descriptors.n_hbd(mol) @@ -86,7 +97,7 @@ def rule_of_five_beyond( ) return ( mw <= 1000 - and _in_range(clogp, -2, 10) + and in_range(clogp, -2, 10) and n_hbd <= 6 and n_hba <= 15 and tpsa <= 250 @@ -104,8 +115,8 @@ def rule_of_zinc( n_rotatable_bonds: Optional[int] = None, n_rings: Optional[int] = None, charge: Optional[float] = None, - **kwargs, -): + **kwargs: Any, +) -> bool: """Compute the Zinc rule for a molecule. This rule is a rule of thumb to evaluate the druglikeness of a chemical compounds, based on: Irwin & Schoichet (2005) ZINC - A Free Database of Commercially Available Compounds for Virtual Screening. @@ -115,18 +126,23 @@ def rule_of_zinc( It computes: `MW in [60, 600] & logP < in [-4, 6] & HBD <= 6 & HBA <= 11 & TPSA <=150 & ROTBONDS <= 12 & RIGBONDS <= 50 & N_RINGS <= 7 & MAX_SIZE_RING <= 12 & N_CARBONS >=3 & HC_RATIO <= 2.0 & CHARGE in [-4, 4]` Args: mol: input molecule - mw: precomputed molecular weight. Defaults to None. - clogp: precomputed cLogP. Defaults to None. - n_hba: precomputed number of HBA. Defaults to None. - n_hbd: precomputed number of HBD. Defaults to None. - tpsa: precomputed TPSA. Defaults to None. - n_rotatable_bonds: precomputed number of rotatable bonds. Defaults to None. - n_rings: precomputed number of rings in the molecules. Defaults to None. - charge: precomputed charge. Defaults to None. + mw: precomputed molecular weight. + clogp: precomputed cLogP. + n_hba: precomputed number of HBA. + n_hbd: precomputed number of HBD. + tpsa: precomputed TPSA. + n_rotatable_bonds: precomputed number of rotatable bonds. + n_rings: precomputed number of rings in the molecules. + charge: precomputed charge. + **kwargs: Allow extra arguments for descriptors pre-computation. """ if isinstance(mol, str): mol = dm.to_mol(mol) + + if mol is None: + raise ValueError("Molecule is None") + mw = mw if mw is not None else dm.descriptors.mw(mol) clogp = clogp if clogp is not None else dm.descriptors.clogp(mol) n_hba = n_hba if n_hba is not None else dm.descriptors.n_hba(mol) @@ -146,8 +162,8 @@ def rule_of_zinc( het_carb_ratio = dm.descriptors.n_hetero_atoms(mol) / n_carbons charge = charge if charge is not None else dm.descriptors.formal_charge(mol) return ( - _in_range(mw, 60, 600) - and _in_range(clogp, -4, 6) + in_range(mw, 60, 600) + and in_range(clogp, -4, 6) and n_hbd <= 6 and n_hba <= 11 and tpsa <= 150 @@ -156,8 +172,8 @@ def rule_of_zinc( and n_rings <= 7 and max_size_ring <= 12 and n_carbons >= 3 - and _in_range(het_carb_ratio, 0, 2.0) - and _in_range(charge, -4, 4) + and in_range(het_carb_ratio, 0, 2.0) + and in_range(charge, -4, 4) ) @@ -172,8 +188,8 @@ def rule_of_leadlike_soft( n_rings: Optional[int] = None, n_hetero_atoms: Optional[int] = None, charge: Optional[float] = None, - **kwargs, -): + **kwargs: Any, +) -> bool: """ Compute the Lead-Like Soft rule available in FAF-Drugs4. The rules are described at https://fafdrugs4.rpbs.univ-paris-diderot.fr/filters.html @@ -186,19 +202,24 @@ def rule_of_leadlike_soft( ``` Args: mol: input molecule - mw: precomputed molecular weight. Defaults to None. - clogp: precomputed cLogP. Defaults to None. - n_hba: precomputed number of HBA. Defaults to None. - n_hbd: precomputed number of HBD. Defaults to None. - tpsa: precomputed TPSA. Defaults to None. - n_rotatable_bonds: precomputed number of rotatable bonds. Defaults to None. - n_rings: precomputed number of rings in the molecules. Defaults to None. - n_hetero_atoms: precomputed number of heteroatoms. Defaults to None. - charge: precomputed charge. Defaults to None. + mw: precomputed molecular weight. + clogp: precomputed cLogP. + n_hba: precomputed number of HBA. + n_hbd: precomputed number of HBD. + tpsa: precomputed TPSA. + n_rotatable_bonds: precomputed number of rotatable bonds. + n_rings: precomputed number of rings in the molecules. + n_hetero_atoms: precomputed number of heteroatoms. + charge: precomputed charge. + **kwargs: Allow extra arguments for descriptors pre-computation. """ if isinstance(mol, str): mol = dm.to_mol(mol) + + if mol is None: + raise ValueError("Molecule is None") + mw = mw if mw is not None else dm.descriptors.mw(mol) clogp = clogp if clogp is not None else dm.descriptors.clogp(mol) n_hba = n_hba if n_hba is not None else dm.descriptors.n_hba(mol) @@ -221,8 +242,8 @@ def rule_of_leadlike_soft( else: het_carb_ratio = n_hetero_atoms / n_carbons return ( - _in_range(mw, 150, 400) - and _in_range(clogp, -3, 4) + in_range(mw, 150, 400) + and in_range(clogp, -3, 4) and n_hbd <= 4 and n_hba <= 7 and tpsa <= 160 @@ -230,10 +251,10 @@ def rule_of_leadlike_soft( and n_rigid_bonds <= 30 and n_rings <= 4 and max_size_ring <= 18 - and _in_range(n_carbons, 3, 35) - and _in_range(n_hetero_atoms, 1, 15) - and _in_range(het_carb_ratio, 0.1, 1.1) - and _in_range(charge, -4, 4) + and in_range(n_carbons, 3, 35) + and in_range(n_hetero_atoms, 1, 15) + and in_range(het_carb_ratio, 0.1, 1.1) + and in_range(charge, -4, 4) and num_charged_atom <= 4 and n_stereo_center <= 2 ) @@ -250,8 +271,8 @@ def rule_of_druglike_soft( n_rings: Optional[int] = None, n_hetero_atoms: Optional[int] = None, charge: Optional[float] = None, - **kwargs, -): + **kwargs: Any, +) -> bool: """ Compute the DrugLike Soft rule available in FAF-Drugs4. The rules are described at https://fafdrugs4.rpbs.univ-paris-diderot.fr/filters.html @@ -264,19 +285,23 @@ def rule_of_druglike_soft( ``` Args: mol: input molecule - mw: precomputed molecular weight. Defaults to None. - clogp: precomputed cLogP. Defaults to None. - n_hba: precomputed number of HBA. Defaults to None. - n_hbd: precomputed number of HBD. Defaults to None. - tpsa: precomputed TPSA. Defaults to None. - n_rotatable_bonds: precomputed number of rotatable bonds. Defaults to None. - n_rings: precomputed number of rings in the molecules. Defaults to None. - n_hetero_atoms: precomputed number of heteroatoms. Defaults to None. - charge: precomputed charge. Defaults to None. - + mw: precomputed molecular weight. + clogp: precomputed cLogP. + n_hba: precomputed number of HBA. + n_hbd: precomputed number of HBD. + tpsa: precomputed TPSA. + n_rotatable_bonds: precomputed number of rotatable bonds. + n_rings: precomputed number of rings in the molecules. + n_hetero_atoms: precomputed number of heteroatoms. + charge: precomputed charge. + **kwargs: Allow extra arguments for descriptors pre-computation. """ if isinstance(mol, str): mol = dm.to_mol(mol) + + if mol is None: + raise ValueError("Molecule is None") + mw = mw if mw is not None else dm.descriptors.mw(mol) clogp = clogp if clogp is not None else dm.descriptors.clogp(mol) n_hba = n_hba if n_hba is not None else dm.descriptors.n_hba(mol) @@ -294,13 +319,15 @@ def rule_of_druglike_soft( max_size_ring = 0 if len(ring_system) == 0 else max([len(x) for x in ring_system]) n_carbons = len([at for at in mol.GetAtoms() if at.GetSymbol() == "C"]) n_hydrogens = sum([at.GetTotalNumHs() for at in mol.GetAtoms()]) + if n_carbons == 0: het_carb_ratio = float("inf") else: het_carb_ratio = n_hydrogens / n_carbons + return ( - _in_range(mw, 100, 600) - and _in_range(clogp, -3, 6) + in_range(mw, 100, 600) + and in_range(clogp, -3, 6) and n_hbd <= 7 and n_hba <= 12 and tpsa <= 180 @@ -308,10 +335,10 @@ def rule_of_druglike_soft( and n_rigid_bonds <= 30 and n_rings <= 6 and max_size_ring <= 18 - and _in_range(n_carbons, 3, 35) - and _in_range(n_hetero_atoms, 1, 15) - and _in_range(het_carb_ratio, 0.1, 1.1) - and _in_range(charge, -4, 4) + and in_range(n_carbons, 3, 35) + and in_range(n_hetero_atoms, 1, 15) + and in_range(het_carb_ratio, 0.1, 1.1) + and in_range(charge, -4, 4) and num_charged_atom <= 4 ) @@ -322,8 +349,8 @@ def rule_of_four( clogp: Optional[float] = None, n_hba: Optional[float] = None, n_rings: Optional[int] = None, - **kwargs, -): + **kwargs: Any, +) -> bool: """Compute the rule-of-4 for a molecule. The rule-of-4 define a rule of thumb for PPI inhibitors, which are typically larger and more lipophilic than inhibitors of more standard binding sites. It has been published in: @@ -338,20 +365,26 @@ def rule_of_four( Args: mol: input molecule - mw: precomputed molecular weight. Defaults to None. - clogp: precomputed cLogP. Defaults to None. - n_hba: precomputed number of HBA. Defaults to None. - n_rings: precomputed number of rings in the molecules. Defaults to None. + mw: precomputed molecular weight. + clogp: precomputed cLogP. + n_hba: precomputed number of HBA. + n_rings: precomputed number of rings in the molecules. + **kwargs: Allow extra arguments for descriptors pre-computation. Returns: ro4: True if molecule is compliant, False otherwise """ if isinstance(mol, str): mol = dm.to_mol(mol) + + if mol is None: + raise ValueError("Molecule is None") + mw = mw if mw is not None else dm.descriptors.mw(mol) clogp = clogp if clogp is not None else dm.descriptors.clogp(mol) n_hba = n_hba if n_hba is not None else dm.descriptors.n_hba(mol) n_rings = n_rings if n_rings is not None else dm.descriptors.n_rings(mol) + return mw >= 400 and clogp >= 4 and n_rings >= 4 and n_hba >= 4 @@ -362,8 +395,8 @@ def rule_of_three( n_hba: Optional[float] = None, n_hbd: Optional[float] = None, n_rotatable_bonds: Optional[int] = None, - **kwargs, -): + **kwargs: Any, +) -> bool: """Compute the rule-of-3. The rule-of-three is a rule of thumb for molecular fragments (and not small molecules) published in: Congreve M, Carr R, Murray C, Jhoti H. (2003) `A "rule of three" for fragment-based lead discovery?`. @@ -375,11 +408,12 @@ def rule_of_three( Args: mol: input molecule - mw: precomputed molecular weight. Defaults to None. - clogp: precomputed cLogP. Defaults to None. - n_hba: precomputed number of HBA. Defaults to None. - n_hbd: precomputed number of HBD. Defaults to None. - n_rotatable_bonds: precomputed number of rotatable bonds in the molecule. Defaults to None. + mw: precomputed molecular weight. + clogp: precomputed cLogP. + n_hba: precomputed number of HBA. + n_hbd: precomputed number of HBD. + n_rotatable_bonds: precomputed number of rotatable bonds in the molecule. + **kwargs: Allow extra arguments for descriptors pre-computation. Returns: ro3: True if molecule is compliant, False otherwise @@ -387,11 +421,18 @@ def rule_of_three( if isinstance(mol, str): mol = dm.to_mol(mol) + + if mol is None: + raise ValueError("Molecule is None") + mw = mw if mw is not None else dm.descriptors.mw(mol) clogp = clogp if clogp is not None else dm.descriptors.clogp(mol) n_hba = n_hba if n_hba is not None else dm.descriptors.n_hba(mol) n_hbd = n_hbd if n_hbd is not None else dm.descriptors.n_hbd(mol) - n_rotatable_bonds = dm.descriptors.n_rotatable_bonds(mol) + n_rotatable_bonds = ( + n_rotatable_bonds if n_rotatable_bonds is not None else dm.descriptors.n_rotatable_bonds(mol) + ) + return mw <= 300 and clogp <= 3 and n_hbd <= 3 and n_hba <= 3 and n_rotatable_bonds <= 3 @@ -403,20 +444,21 @@ def rule_of_three_extended( n_hbd: Optional[float] = None, tpsa: Optional[float] = None, n_rotatable_bonds: Optional[int] = None, - **kwargs, -): + **kwargs: Any, +) -> bool: """Compute the extended rule-of-3. This is an extenion of the rule of three that computes: It computes: `MW <= 300 & logP in [-3, 3] & HBA <= 6 & HBD <= 3 & ROTBONDS <= 3 & TPSA <= 60` Args: mol: input molecule - mw: precomputed molecular weight. Defaults to None. - clogp: precomputed cLogP. Defaults to None. - n_hba: precomputed number of HBA. Defaults to None. - n_hbd: precomputed number of HBD. Defaults to None. - tpsa: precomputed TPSA. Defaults to None. - n_rotatable_bonds: precomputed number of rotatable bonds in the molecule. Defaults to None. + mw: precomputed molecular weight. + clogp: precomputed cLogP. + n_hba: precomputed number of HBA. + n_hbd: precomputed number of HBD. + tpsa: precomputed TPSA. + n_rotatable_bonds: precomputed number of rotatable bonds in the molecule. + **kwargs: Allow extra arguments for descriptors pre-computation. Returns: ro3: True if molecule is compliant, False otherwise @@ -424,15 +466,22 @@ def rule_of_three_extended( if isinstance(mol, str): mol = dm.to_mol(mol) + + if mol is None: + raise ValueError("Molecule is None") + mw = mw if mw is not None else dm.descriptors.mw(mol) clogp = clogp if clogp is not None else dm.descriptors.clogp(mol) n_hba = n_hba if n_hba is not None else dm.descriptors.n_hba(mol) n_hbd = n_hbd if n_hbd is not None else dm.descriptors.n_hbd(mol) tpsa = tpsa if tpsa is not None else dm.descriptors.tpsa(mol) - n_rotatable_bonds = dm.descriptors.n_rotatable_bonds(mol) + n_rotatable_bonds = ( + n_rotatable_bonds if n_rotatable_bonds is not None else dm.descriptors.n_rotatable_bonds(mol) + ) + return ( mw <= 300 - and _in_range(clogp, -3, 3) + and in_range(clogp, -3, 3) and n_hba <= 6 and n_hbd <= 3 and n_rotatable_bonds <= 3 @@ -446,8 +495,8 @@ def rule_of_two( clogp: Optional[float] = None, n_hba: Optional[float] = None, n_hbd: Optional[float] = None, - **kwargs, -): + **kwargs: Any, +) -> bool: """ Computes rules-of-2 for reagent (building block design). It aims for prioritization of reagents that typically do not add more than 200 Da in MW or 2 units of clogP. The rule of two has been described in: @@ -463,16 +512,21 @@ def rule_of_two( Args: mol: input molecule - mw: precomputed molecular weight. Defaults to None. - clogp: precomputed cLogP. Defaults to None. - n_hba: precomputed number of HBA. Defaults to None. - n_hbd: precomputed number of HBD. Defaults to None. + mw: precomputed molecular weight. + clogp: precomputed cLogP. + n_hba: precomputed number of HBA. + n_hbd: precomputed number of HBD. + **kwargs: Allow extra arguments for descriptors pre-computation. Returns: ro2: True if molecule is compliant, False otherwise """ if isinstance(mol, str): mol = dm.to_mol(mol) + + if mol is None: + raise ValueError("Molecule is None") + mw = mw if mw is not None else dm.descriptors.mw(mol) clogp = clogp if clogp is not None else dm.descriptors.clogp(mol) n_hba = n_hba if n_hba is not None else dm.descriptors.n_hba(mol) @@ -486,8 +540,8 @@ def rule_of_ghose( mw: Optional[float] = None, clogp: Optional[float] = None, mr: Optional[float] = None, - **kwargs, -): + **kwargs: Any, +) -> bool: """ Compute the Ghose filter. The Ghose filter is a drug-like filter described in: Ghose, AK.; Viswanadhan, VN.; Wendoloski JJ. (1999) A knowledge-based approach in designing combinatorial or medicinal @@ -497,9 +551,10 @@ def rule_of_ghose( Args: mol: input molecule - mw: precomputed molecular weight. Defaults to None. - clogp: precomputed cLogP. Defaults to None. - mr: precomputed molecule refractivity. Defaults to None. + mw: precomputed molecular weight. + clogp: precomputed cLogP. + mr: precomputed molecule refractivity. + **kwargs: Allow extra arguments for descriptors pre-computation. Returns: rog: True if molecule is compliant, False otherwise @@ -507,21 +562,28 @@ def rule_of_ghose( if isinstance(mol, str): mol = dm.to_mol(mol) + + if mol is None: + raise ValueError("Molecule is None") + mw = mw if mw is not None else dm.descriptors.mw(mol) clogp = clogp if clogp is not None else dm.descriptors.clogp(mol) num_atoms = mol.GetNumAtoms() # ghose seems to use total number of atoms not heavy mr = mr if mr is not None else dm.descriptors.refractivity(mol) return ( - _in_range(mw, 160, 480) - and _in_range(clogp, -0.4, 5.6) - and _in_range(num_atoms, 20, 70) - and _in_range(mr, 40, 130) + in_range(mw, 160, 480) + and in_range(clogp, -0.4, 5.6) + and in_range(num_atoms, 20, 70) + and in_range(mr, 40, 130) ) def rule_of_veber( - mol: Union[dm.Mol, str], tpsa: Optional[float] = None, n_rotatable_bonds: Optional[int] = None, **kwargs -): + mol: Union[dm.Mol, str], + tpsa: Optional[float] = None, + n_rotatable_bonds: Optional[int] = None, + **kwargs: Any, +) -> bool: """ Compute the Veber filter. The Veber filter is a druglike filter for orally active drugs described in: @@ -531,8 +593,9 @@ def rule_of_veber( Args: mol: input molecule - tpsa: precomputed TPSA. Defaults to None. - n_rotatable_bonds: precomputed number of rotatable bonds. Defaults to None. + tpsa: precomputed TPSA. + n_rotatable_bonds: precomputed number of rotatable bonds. + **kwargs: Allow extra arguments for descriptors pre-computation. Returns: rov: True if molecule is compliant, False otherwise @@ -540,10 +603,15 @@ def rule_of_veber( if isinstance(mol, str): mol = dm.to_mol(mol) + + if mol is None: + raise ValueError("Molecule is None") + n_rotatable_bonds = ( n_rotatable_bonds if n_rotatable_bonds is not None else dm.descriptors.n_rotatable_bonds(mol) ) tpsa = tpsa if tpsa is not None else dm.descriptors.tpsa(mol) + return n_rotatable_bonds <= 10 and tpsa <= 140 @@ -556,8 +624,8 @@ def rule_of_reos( charge: Optional[int] = None, n_rotatable_bonds: Optional[int] = None, n_heavy_atoms: Optional[int] = None, - **kwargs, -): + **kwargs: Any, +) -> bool: """ Compute the REOS filter. The REOS filter is a filter designed to filter out unuseful compounds from HTS screening results. The filter is described in: Waters & Namchuk (2003) Designing screens: how to make your hits a hit. @@ -566,19 +634,24 @@ def rule_of_reos( Args: mol: input molecule - mw: precomputed molecular weight. Defaults to None. - clogp: precomputed cLogP. Defaults to None. - n_hba: precomputed number of HBA. Defaults to None. - n_hbd: precomputed number of HBD. Defaults to None. - charge: precomputed formal charge. Defaults to None. - n_rotatable_bonds: precomputed number of rotatable bonds in the molecule. Defaults to None. - n_heavy_atoms: precomputed number of heavy atoms in the molecule. Defaults to None. + mw: precomputed molecular weight. + clogp: precomputed cLogP. + n_hba: precomputed number of HBA. + n_hbd: precomputed number of HBD. + charge: precomputed formal charge. + n_rotatable_bonds: precomputed number of rotatable bonds in the molecule. + n_heavy_atoms: precomputed number of heavy atoms in the molecule. + **kwargs: Allow extra arguments for descriptors pre-computation. Returns: ror: True if molecule is compliant, False otherwise """ if isinstance(mol, str): mol = dm.to_mol(mol) + + if mol is None: + raise ValueError("Molecule is None") + mw = mw if mw is not None else dm.descriptors.mw(mol) clogp = clogp if clogp is not None else dm.descriptors.clogp(mol) n_hba = n_hba if n_hba is not None else dm.descriptors.n_hba(mol) @@ -588,13 +661,14 @@ def rule_of_reos( ) n_heavy_atoms = n_heavy_atoms if n_heavy_atoms is not None else dm.descriptors.n_heavy_atoms(mol) charge = charge if charge is not None else dm.descriptors.formal_charge(mol) + return ( - _in_range(mw, 200, 500) - and _in_range(clogp, -5, 5) - and _in_range(n_hba, 0, 10) - and _in_range(n_hbd, 0, 5) - and _in_range(n_rotatable_bonds, 0, 8) - and _in_range(n_heavy_atoms, 15, 50) + in_range(mw, 200, 500) + and in_range(clogp, -5, 5) + and in_range(n_hba, 0, 10) + and in_range(n_hbd, 0, 5) + and in_range(n_rotatable_bonds, 0, 8) + and in_range(n_heavy_atoms, 15, 50) ) @@ -606,8 +680,8 @@ def rule_of_chemaxon_druglikeness( n_hbd: Optional[float] = None, n_rotatable_bonds: Optional[int] = None, n_rings: Optional[int] = None, - **kwargs, -): + **kwargs: Any, +) -> bool: """ Compute the drug likeness filter according to chemaxon: @@ -615,13 +689,13 @@ def rule_of_chemaxon_druglikeness( Args: mol: input molecule - mw: precomputed molecular weight. Defaults to None. - clogp: precomputed cLogP. Defaults to None. - n_hba: precomputed number of HBA. Defaults to None. - n_hbd: precomputed number of HBD. Defaults to None. - n_rotatable_bonds: precomputed number of rotatable bonds in the molecule. Defaults to None. - n_rings: precomputed number of rings in the molecule. Defaults to None. - + mw: precomputed molecular weight. + clogp: precomputed cLogP. + n_hba: precomputed number of HBA. + n_hbd: precomputed number of HBD. + n_rotatable_bonds: precomputed number of rotatable bonds in the molecule. + n_rings: precomputed number of rings in the molecule. + **kwargs: Allow extra arguments for descriptors pre-computation. Returns: roc: True if molecule is compliant, False otherwise @@ -629,6 +703,10 @@ def rule_of_chemaxon_druglikeness( if isinstance(mol, str): mol = dm.to_mol(mol) + + if mol is None: + raise ValueError("Molecule is None") + mw = mw if mw is not None else dm.descriptors.mw(mol) clogp = clogp if clogp is not None else dm.descriptors.clogp(mol) n_hba = n_hba if n_hba is not None else dm.descriptors.n_hba(mol) @@ -642,8 +720,11 @@ def rule_of_chemaxon_druglikeness( def rule_of_egan( - mol: Union[dm.Mol, str], clogp: Optional[float] = None, tpsa: Optional[float] = None, **kwargs -): + mol: Union[dm.Mol, str], + clogp: Optional[float] = None, + tpsa: Optional[float] = None, + **kwargs: Any, +) -> bool: """ Compute passive intestinal absorption according to Egan Rules as described in: Egan, William J., Kenneth M. Merz, and John J. Baldwin (2000) Prediction of drug absorption using multivariate statistics @@ -658,22 +739,30 @@ def rule_of_egan( Args: mol: input molecule - clogp: precomputed cLogP. Defaults to None. - tpsa: precomputed TPSA. Defaults to None. + clogp: precomputed cLogP. + tpsa: precomputed TPSA. + **kwargs: Allow extra arguments for descriptors pre-computation. Returns: roe: True if molecule is compliant, False otherwise """ if isinstance(mol, str): mol = dm.to_mol(mol) + + if mol is None: + raise ValueError("Molecule is None") + tpsa = tpsa if tpsa is not None else dm.descriptors.tpsa(mol) clogp = clogp if clogp is not None else dm.descriptors.clogp(mol) - return _in_range(tpsa, 0, 132) and _in_range(clogp, -1, 6) + return in_range(tpsa, 0, 132) and in_range(clogp, -1, 6) def rule_of_pfizer_3_75( - mol: Union[dm.Mol, str], clogp: Optional[float] = None, tpsa: Optional[float] = None, **kwargs -): + mol: Union[dm.Mol, str], + clogp: Optional[float] = None, + tpsa: Optional[float] = None, + **kwargs: Any, +) -> bool: """ Compute Pfizer Rule(3/75 Rule) for invivo toxicity. It has been described in: * Hughes, et al. (2008) Physiochemical drug properties associated with in vivo toxicological outcomes. @@ -688,8 +777,9 @@ def rule_of_pfizer_3_75( Args: mol: input molecule - clogp: precomputed cLogP. Defaults to None. - tpsa: precomputed TPSA. Defaults to None. + clogp: precomputed cLogP. + tpsa: precomputed TPSA. + **kwargs: Allow extra arguments for descriptors pre-computation. Returns: rop: True if molecule is compliant, False otherwise @@ -697,14 +787,22 @@ def rule_of_pfizer_3_75( """ if isinstance(mol, str): mol = dm.to_mol(mol) + + if mol is None: + raise ValueError("Molecule is None") + tpsa = tpsa if tpsa is not None else dm.descriptors.tpsa(mol) clogp = clogp if clogp is not None else dm.descriptors.clogp(mol) + return not (clogp > 3 and tpsa < 75) def rule_of_gsk_4_400( - mol: Union[dm.Mol, str], mw: Optional[float] = None, clogp: Optional[float] = None, **kwargs -): + mol: Union[dm.Mol, str], + mw: Optional[float] = None, + clogp: Optional[float] = None, + **kwargs: Any, +) -> bool: """ Compute GSK Rule (4/400) for druglikeness using interpretable ADMET rule of thumb based on Gleeson, M. Paul (2008). Generation of a set of simple, interpretable ADMET rules of thumb. @@ -720,7 +818,8 @@ def rule_of_gsk_4_400( Args: mol: input molecule - clogp: precomputed cLogP. Defaults to None. + clogp: precomputed cLogP. + **kwargs: Allow extra arguments for descriptors pre-computation. Returns: rog: True if molecule is compliant, False otherwise @@ -728,8 +827,13 @@ def rule_of_gsk_4_400( """ if isinstance(mol, str): mol = dm.to_mol(mol) + + if mol is None: + raise ValueError("Molecule is None") + mw = mw if mw is not None else dm.descriptors.mw(mol) clogp = clogp if clogp is not None else dm.descriptors.clogp(mol) + return mw <= 400 and clogp <= 4 @@ -739,8 +843,8 @@ def rule_of_oprea( n_hbd: Optional[float] = None, n_rotatable_bonds: Optional[int] = None, n_rings: Optional[int] = None, - **kwargs, -): + **kwargs: Any, +) -> bool: """ Computes Oprea's rule of drug likeness obtained by comparing drug vs non drug compounds across multiple datasets. The rules have been described in: Oprea (2000) Property distribution of drug-related chemical databases* @@ -752,10 +856,11 @@ def rule_of_oprea( Args: mol: input molecule - n_hba: precomputed number of HBA. Defaults to None. - n_hbd: precomputed number of HBD. Defaults to None. - n_rotatable_bonds: precomputed number of rotatable bonds in the molecule. Defaults to None. - n_rings: precomputed number of rings in the molecule. Defaults to None. + n_hba: precomputed number of HBA. + n_hbd: precomputed number of HBD. + n_rotatable_bonds: precomputed number of rotatable bonds in the molecule. + n_rings: precomputed number of rings in the molecule. + **kwargs: Allow extra arguments for descriptors pre-computation. Returns roo: True if molecule is compliant, False otherwise @@ -763,6 +868,10 @@ def rule_of_oprea( if isinstance(mol, str): mol = dm.to_mol(mol) + + if mol is None: + raise ValueError("Molecule is None") + n_hba = n_hba if n_hba is not None else dm.descriptors.n_hba(mol) n_hbd = n_hbd if n_hbd is not None else dm.descriptors.n_hbd(mol) n_rotatable_bonds = ( @@ -771,10 +880,10 @@ def rule_of_oprea( n_rings = n_rings if n_rings is not None else dm.descriptors.n_rings(mol) return ( - _in_range(n_hbd, 0, 2) - and _in_range(n_hba, 2, 9) - and _in_range(n_rotatable_bonds, 2, 8) - and _in_range(n_rings, 1, 4) + in_range(n_hbd, 0, 2) + and in_range(n_hba, 2, 9) + and in_range(n_rotatable_bonds, 2, 8) + and in_range(n_rings, 1, 4) ) @@ -785,8 +894,8 @@ def rule_of_xu( n_rotatable_bonds: Optional[int] = None, n_rings: Optional[int] = None, n_heavy_atoms: Optional[int] = None, - **kwargs, -): + **kwargs: Any, +) -> bool: """ Computes Xu's rule of drug likeness as described in: Xu & Stevenson (2000), Drug-like Index: A New Approach To Measure Drug-like Compounds and Their Diversity @@ -798,11 +907,12 @@ def rule_of_xu( Args: mol: input molecule - n_hba: precomputed number of HBA. Defaults to None. - n_hbd: precomputed number of HBD. Defaults to None. - n_rotatable_bonds: precomputed number of rotatable bonds in the molecule. Defaults to None. - n_rings: precomputed number of rings in the molecule. Defaults to None. - n_heavy_atoms: precomputed number of rings in the molecule. Defaults to None. + n_hba: precomputed number of HBA. + n_hbd: precomputed number of HBD. + n_rotatable_bonds: precomputed number of rotatable bonds in the molecule. + n_rings: precomputed number of rings in the molecule. + n_heavy_atoms: precomputed number of rings in the molecule. + **kwargs: Allow extra arguments for descriptors pre-computation. Returns rox: True if molecule is compliant, False otherwise @@ -811,6 +921,10 @@ def rule_of_xu( if isinstance(mol, str): mol = dm.to_mol(mol) + + if mol is None: + raise ValueError("Molecule is None") + n_hba = n_hba if n_hba is not None else dm.descriptors.n_hba(mol) n_hbd = n_hbd if n_hbd is not None else dm.descriptors.n_hbd(mol) n_rotatable_bonds = ( @@ -818,12 +932,13 @@ def rule_of_xu( ) n_rings = n_rings if n_rings is not None else dm.descriptors.n_rings(mol) n_heavy_atoms = n_heavy_atoms if n_heavy_atoms is not None else dm.descriptors.n_heavy_atoms(mol) + return ( n_hba <= 10 and n_hbd <= 5 - and _in_range(n_rotatable_bonds, 2, 35) - and _in_range(n_rings, 1, 7) - and _in_range(n_heavy_atoms, 10, 50) + and in_range(n_rotatable_bonds, 2, 35) + and in_range(n_rings, 1, 7) + and in_range(n_heavy_atoms, 10, 50) ) @@ -834,8 +949,8 @@ def rule_of_cns( n_hba: Optional[float] = None, n_hbd: Optional[float] = None, tpsa: Optional[int] = None, - **kwargs, -): + **kwargs: Any, +) -> bool: """ Computes drug likeness rule for CNS penetrant molecules as described in: Jeffrey & Summerfield (2010) Assessment of the blood-brain barrier in CNS drug discovery. @@ -844,11 +959,12 @@ def rule_of_cns( Args: mol: input molecule - mw: precomputed molecular weight. Defaults to None. - clogp: precomputed logP. Defaults to None. - n_hba: precomputed number of HBA. Defaults to None. - n_hbd: precomputed number of HBD. Defaults to None. - tpsa: precomputed TPSA. Defaults to None. + mw: precomputed molecular weight. + clogp: precomputed logP. + n_hba: precomputed number of HBA. + n_hbd: precomputed number of HBD. + tpsa: precomputed TPSA. + **kwargs: Allow extra arguments for descriptors pre-computation. Returns: roc: True if molecule is compliant, False otherwise @@ -856,15 +972,20 @@ def rule_of_cns( if isinstance(mol, str): mol = dm.to_mol(mol) + + if mol is None: + raise ValueError("Molecule is None") + mw = mw if mw is not None else dm.descriptors.mw(mol) clogp = clogp if clogp is not None else dm.descriptors.clogp(mol) n_hbd = n_hbd if n_hbd is not None else dm.descriptors.n_hbd(mol) n_hba = n_hba if n_hba is not None else dm.descriptors.n_hba(mol) tpsa = tpsa if tpsa is not None else dm.descriptors.tpsa(mol) + return ( - _in_range(mw, 135, 582) - and _in_range(clogp, -0.2, 6.1) - and _in_range(tpsa, 3, 118) + in_range(mw, 135, 582) + and in_range(clogp, -0.2, 6.1) + and in_range(tpsa, 3, 118) and n_hbd <= 3 and n_hba <= 5 ) @@ -879,8 +1000,8 @@ def rule_of_respiratory( tpsa: Optional[int] = None, n_rotatable_bonds: Optional[int] = None, n_rings: Optional[int] = None, - **kwargs, -): + **kwargs: Any, +) -> bool: """ Computes drug likeness rule for Respiratory (nasal/inhalatory) molecules as described in Ritchie et al. (2009) Analysis of the Calculated Physicochemical Properties of Respiratory Drugs: Can We Design for Inhaled Drugs Yet? @@ -889,13 +1010,14 @@ def rule_of_respiratory( Args: mol: input molecule - mw: precomputed molecular weight. Defaults to None. - clogp: precomputed logP. Defaults to None. - n_hba: precomputed number of HBA. Defaults to None. - n_hbd: precomputed number of HBD. Defaults to None. - tpsa: precomputed TPSA. Defaults to None. - n_rotatable_bonds: precomputed number of rotatable bonds in the molecule. Defaults to None. - n_rings: precomputed number of rings. Defaults to None + mw: precomputed molecular weight. + clogp: precomputed logP. + n_hba: precomputed number of HBA. + n_hbd: precomputed number of HBD. + tpsa: precomputed TPSA. + n_rotatable_bonds: precomputed number of rotatable bonds in the molecule. + n_rings: precomputed number of rings. + **kwargs: Allow extra arguments for descriptors pre-computation. Returns: roc: True if molecule is compliant, False otherwise @@ -903,6 +1025,10 @@ def rule_of_respiratory( if isinstance(mol, str): mol = dm.to_mol(mol) + + if mol is None: + raise ValueError("Molecule is None") + mw = mw if mw is not None else dm.descriptors.mw(mol) clogp = clogp if clogp is not None else dm.descriptors.clogp(mol) n_hbd = n_hbd if n_hbd is not None else dm.descriptors.n_hbd(mol) @@ -913,13 +1039,14 @@ def rule_of_respiratory( n_rotatable_bonds if n_rotatable_bonds is not None else dm.descriptors.n_rotatable_bonds(mol) ) n_rings = n_rings if n_rings is not None else dm.descriptors.n_rings(mol) + return ( - _in_range(mw, 240, 520) - and _in_range(clogp, -2, 4.7) - and _in_range(n_hbonds, 6, 12) - and _in_range(tpsa, 51, 135) - and _in_range(n_rotatable_bonds, 3, 8) - and _in_range(n_rings, 1, 5) + in_range(mw, 240, 520) + and in_range(clogp, -2, 4.7) + and in_range(n_hbonds, 6, 12) + and in_range(tpsa, 51, 135) + and in_range(n_rotatable_bonds, 3, 8) + and in_range(n_rings, 1, 5) ) @@ -933,8 +1060,8 @@ def rule_of_generative_design( n_rotatable_bonds: Optional[int] = None, n_hetero_atoms: Optional[int] = None, charge: Optional[float] = None, - **kwargs, -): + **kwargs: Any, +) -> bool: """ Compute druglikeness rule of generative design. @@ -952,21 +1079,24 @@ def rule_of_generative_design( Args: mol: input molecule - mw: precomputed molecular weight. Defaults to None. - clogp: precomputed cLogP. Defaults to None. - n_lipinski_hba: precomputed number of HBA. Defaults to None. - n_lipinski_hbd: precomputed number of HBD. Defaults to None. - tpsa: precomputed TPSA. Defaults to None. - n_rotatable_bonds: precomputed number of rotatable bonds. Defaults to None. - n_hetero_atoms: precomputed number of heteroatoms. Defaults to None. - charge: precomputed charge. Defaults to None. + mw: precomputed molecular weight. + clogp: precomputed cLogP. + n_lipinski_hba: precomputed number of HBA. + n_lipinski_hbd: precomputed number of HBD. + tpsa: precomputed TPSA. + n_rotatable_bonds: precomputed number of rotatable bonds. + n_hetero_atoms: precomputed number of heteroatoms. + charge: precomputed charge. + **kwargs: Allow extra arguments for descriptors pre-computation. """ if isinstance(mol, str): mol = dm.to_mol(mol) mol = dm.sanitize_mol(mol) - if mol is None: # return false on invalid molecule - return False + + if mol is None: + raise ValueError("Molecule is None") + mw = mw if mw is not None else dm.descriptors.mw(mol) clogp = clogp if clogp is not None else dm.descriptors.clogp(mol) n_lipinski_hba = n_lipinski_hba if n_lipinski_hba is not None else dm.descriptors.n_lipinski_hba(mol) @@ -976,9 +1106,11 @@ def rule_of_generative_design( n_rotatable_bonds if n_rotatable_bonds is not None else dm.descriptors.n_rotatable_bonds(mol) ) n_hetero_atoms = n_hetero_atoms if n_hetero_atoms is not None else dm.descriptors.n_hetero_atoms(mol) + # reionize first before computing charge with dm.without_rdkit_log(): standard_mol = dm.standardize_mol(mol, reionize=True, uncharge=False, stereo=False) + charge = charge if charge is not None else dm.descriptors.formal_charge(standard_mol) num_charged_atom = dm.descriptors.n_charged_atoms(standard_mol) n_rigid_bonds = dm.descriptors.n_rigid_bonds(mol) @@ -991,19 +1123,19 @@ def rule_of_generative_design( n_heavy_mets = n_heavy_metals(mol) return ( - _in_range(mw, 200, 600) - and _in_range(clogp, -3, 6) + in_range(mw, 200, 600) + and in_range(clogp, -3, 6) and n_lipinski_hbd <= 7 and n_lipinski_hba <= 12 - and _in_range(tpsa, 40, 180) + and in_range(tpsa, 40, 180) and n_rotatable_bonds <= 15 and n_rigid_bonds <= 30 and n_aromatic_rings <= 5 and n_fused_aro_rings <= 2 and max_size_ring <= 18 - and _in_range(n_carbons, 3, 40) - and _in_range(n_hetero_atoms, 1, 15) - and _in_range(charge, -2, 2) + and in_range(n_carbons, 3, 40) + and in_range(n_hetero_atoms, 1, 15) + and in_range(charge, -2, 2) and num_charged_atom <= 2 and n_total_atoms < 70 and n_heavy_mets < 1 @@ -1020,8 +1152,8 @@ def rule_of_generative_design_strict( n_rotatable_bonds: Optional[int] = None, n_hetero_atoms: Optional[int] = None, charge: Optional[float] = None, - **kwargs, -): + **kwargs: Any, +) -> bool: """ Compute druglikeness rule of generative design. @@ -1043,21 +1175,23 @@ def rule_of_generative_design_strict( Args: mol: input molecule - mw: precomputed molecular weight. Defaults to None. - clogp: precomputed cLogP. Defaults to None. - n_lipinski_hba: precomputed number of HBA. Defaults to None. - n_lipinski_hbd: precomputed number of HBD. Defaults to None. - tpsa: precomputed TPSA. Defaults to None. - n_rotatable_bonds: precomputed number of rotatable bonds. Defaults to None. - n_hetero_atoms: precomputed number of heteroatoms. Defaults to None. - charge: precomputed charge. Defaults to None. - + mw: precomputed molecular weight. + clogp: precomputed cLogP. + n_lipinski_hba: precomputed number of HBA. + n_lipinski_hbd: precomputed number of HBD. + tpsa: precomputed TPSA. + n_rotatable_bonds: precomputed number of rotatable bonds. + n_hetero_atoms: precomputed number of heteroatoms. + charge: precomputed charge. + **kwargs: Allow extra arguments for descriptors pre-computation. """ mol = dm.to_mol(mol) mol = dm.sanitize_mol(mol) - if mol is None: # return false on invalid molecule - return False + + if mol is None: + raise ValueError("Molecule is None") + generative_rule = rule_of_generative_design( mol=mol, mw=mw, @@ -1070,7 +1204,9 @@ def rule_of_generative_design_strict( charge=charge, **kwargs, ) + n_stereo_center = dm.descriptors.n_stereo_centers(mol) has_spider_flagels = has_spider_chains(mol) good_fraction_ring_system = fraction_atom_in_scaff(mol) >= 0.25 + return generative_rule and good_fraction_ring_system and not has_spider_flagels and n_stereo_center <= 3 diff --git a/medchem_OLD/rules/__init__.py b/medchem_OLD/rules/__init__.py deleted file mode 100644 index d41ced9..0000000 --- a/medchem_OLD/rules/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .rule_filter import RuleFilters diff --git a/medchem_OLD/rules/rule_filter.py b/medchem_OLD/rules/rule_filter.py deleted file mode 100644 index c18dd20..0000000 --- a/medchem_OLD/rules/rule_filter.py +++ /dev/null @@ -1,166 +0,0 @@ -from sched import scheduler -from typing import Union -from typing import Callable -from typing import Optional -from typing import List - -import functools -import pandas as pd -import datamol as dm -from tqdm.auto import tqdm -from medchem.utils import loader -from medchem.rules import basic_rules - - -def _compute_batch_props(mols): - """Wrapper for making batch computing property under parallelization""" - properties_fn = { - "mw": dm.descriptors.mw, - "n_rings": dm.descriptors.n_rings, - "n_heavy_atoms": dm.descriptors.n_heavy_atoms, - "n_rotatable_bonds": dm.descriptors.n_rotatable_bonds, - "tpsa": dm.descriptors.tpsa, - "clogp": dm.descriptors.clogp, - "n_hba": dm.descriptors.n_hba, - "n_hbd": dm.descriptors.n_hbd, - "n_lipinski_hba": dm.descriptors.n_lipinski_hba, - "n_lipinski_hbd": dm.descriptors.n_lipinski_hbd, - } - return dm.descriptors.compute_many_descriptors(mols, properties_fn, add_properties=False) - - -class RuleFilters: - """ - Build a filter based on a compound phychem properties. For a list of default rules, use `RuleFilters.list_available_rules()`. - Most of these rules have been collected from the litterature including https://fafdrugs4.rpbs.univ-paris-diderot.fr/descriptors.html - """ - - def __init__( - self, - rule_list: List[Union[str, Callable]], - rule_list_names: Optional[List[str]] = None, - precompute_props: bool = True, - ): - """Build a rule filtering object - - Args: - rule_list: list of rules to apply. Either a callable that takes a molecule as input (with kwargs) or a string - of the name of a pre-defined rule as defined in the basic_rules module - rule_list_names: Name of the rules passed as inputs. Defaults to None. - precompute_props: Whether to precompute the properties for all molecules to speed up redundant calculation. Defaults to True. - """ - self.precompute_props = precompute_props - self.rules = self._build_rules(rule_list) - self.rule_names = rule_list_names or [] - if self.rule_names and len(self.rule_names) != len(self.rules): - raise ValueError("rule_list_names must be the same length as rule_list") - - def _build_rules(self, rule_list: List[Union[str, Callable]]): - """Build the list of rules to apply - - Args: - rule_list: list of rules to apply. Either a callable that takes `mol` as first input (and additional kwargs) or a string - of the name of a pre-defined rule as defined in the basic_rules module - """ - rules = [] - for rule_name in rule_list: - if isinstance(rule_name, str): - rule = getattr(basic_rules, rule_name, None) - if rule is None: - raise ValueError(f"Rule {rule_name} not found") - elif callable(rule_name): - rule = rule_name - else: - raise ValueError(f"Unsupported rule {rule_name} of type {type(rule_name)}!") - rules.append(rule) - return rules - - def __len__(self): - """Return the number of rules inside this filter""" - return len(self.rules) - - def __getitems__(self, ind): - """Return a specific rule""" - return self.rules[ind] - - def __call__( - self, - mols: List[Union[str, dm.Mol]], - n_jobs: Optional[int] = None, - progress: bool = False, - scheduler: str = "processes", - ): - """Compute the rules for a list of molecules - - Args: - mols: list of input molecule object. - n_jobs: number of jobs to run in parallel. Defaults to None. - progress: whether to show progress or not. Defaults to False. - scheduler: which scheduler to use. Defaults to "processes". - - Returns: - df: Dataframe where each row is a molecule and each column is a the outcomes of applying self.rules[column]. - """ - - mols = dm.parallelized( - dm.to_mol, - mols, - n_jobs=n_jobs, - progress=progress, - scheduler=scheduler, - tqdm_kwargs={"desc": "Mol Convert", "leave": False}, - ) - if self.precompute_props: - inputs = dm.parallelized( - _compute_batch_props, - mols, - progress=progress, - n_jobs=n_jobs, - scheduler=scheduler, - tqdm_kwargs=dict(leave=False), - ) - else: - inputs = [{} for _ in mols] - - inputs = list(inputs) - for i, mol in enumerate(mols): - inputs[i]["mol"] = mol - - computed_rules = {} - for i, rule in enumerate(tqdm(self.rules, disable=not progress)): - computed_rules[i] = dm.parallelized( - rule, - inputs, - arg_type="kwargs", - progress=progress, - n_jobs=n_jobs, - scheduler=scheduler, - tqdm_kwargs=dict(desc="Props"), - ) - - df = pd.DataFrame.from_dict(computed_rules, orient="index").transpose() - if self.rule_names is not None and len(self.rule_names) > 0: - df.columns = self.rule_names - return df - - @staticmethod - @functools.lru_cache(maxsize=32) - def list_available_rules(query: Union[str, List[str]] = None): - """List all the available rules and they properties""" - df = pd.read_csv(loader.get_data_path("medchem_rule_list.csv")) - if query is not None: - if isinstance(query, (list, tuple)): - query = "|".join(query) - df = df[df["description"].str.contains(query)] - return df - - @staticmethod - @functools.lru_cache(maxsize=32) - def list_available_rules_names(query: Union[str, List[str]] = None): - """List only the names of the available rules""" - df = pd.read_csv(loader.get_data_path("medchem_rule_list.csv")) - if query is not None: - if isinstance(query, (list, tuple)): - query = "|".join(query) - df = df[df["description"].str.contains(query)] - return df["name"].tolist() diff --git a/mkdocs.yml b/mkdocs.yml index c5430df..3b92faa 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -15,13 +15,14 @@ strict: true nav: - Overview: index.md - Tutorials: - - Molecular Filters: tutorials/Molecular_Filters.ipynb + - Medchem Rules: tutorials/Medchem_Rules.ipynb - Catalogs: tutorials/Catalogs.ipynb - Chemical Groups: tutorials/Chemical_Groups.ipynb - Medchem Query Language: tutorials/Medchem_Query_Language.ipynb - Molecular Complexity: tutorials/Molecular_Complexity.ipynb - Constraints Filtering: tutorials/Constraints_Filtering.ipynb - API: + - medchem.rules: api/medchem.rules.md - medchem.catalogs: api/medchem.catalogs.md - medchem.complexity: api/medchem.complexity.md - medchem.groups: api/medchem.groups.md diff --git a/pyproject.toml b/pyproject.toml index 9b49b77..27dac9a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -70,7 +70,7 @@ include = '\.pyi?$' [tool.pytest.ini_options] minversion = "6.0" -addopts = "--verbose --durations=10 -n auto --cov=medchem --cov-fail-under=85 --cov-report xml --cov-report term" +addopts = "--verbose --durations=10 -n auto --cov=medchem --cov-fail-under=90 --cov-report xml --cov-report term" testpaths = ["tests"] filterwarnings = [ "ignore::DeprecationWarning:jupyter_client.connect.*:", diff --git a/tests/test_import.py b/tests/test_import.py index ec1ae49..0dcbfb7 100644 --- a/tests/test_import.py +++ b/tests/test_import.py @@ -5,4 +5,4 @@ def test_import(): import medchem.catalogs import medchem.constraints import medchem.complexity - import medchem.api + import medchem.rules diff --git a/tests/test_rules.py b/tests/test_rules.py new file mode 100644 index 0000000..e13a625 --- /dev/null +++ b/tests/test_rules.py @@ -0,0 +1,196 @@ +from typing import Callable + +import pytest + +import pandas as pd +import datamol as dm +import numpy as np + +import medchem as mc + + +def test_list_descriptors(): + list_descs = mc.rules.list_descriptors() + assert isinstance(list_descs, list) + assert len(list_descs) > 0 + assert all(isinstance(x, str) for x in list_descs) + + +def test_has_spider_chains(): + mols_with_flagels = [ + "CCNCC1CCC(CNC(C)C)C1", + "CCCCC1=CN(C=C1CCC)C1=CC(=CC=C1)C(C)CCO", + "CCCCC1=CC2=C(OC(CN(C)CC)O2)C=C1", + ] + mols_without_flagels = [ + "CC(C)C(O)C(O)C(N)=O", + "OC1=CC=CC(CC2CC2)=C1", + "CCN(C)C1=CC=CC(CC(O)CC(C)O)=C1", + "CN1CCC(CC(=O)NCC2=CC=CC=C2)C1", + "CCCCC1=CC(=CC=C1)C(CC)C(C)C", + ] + + assert all( + mc.rules.has_spider_chains(dm.to_mol(x)) for x in mols_with_flagels + ), "Fail flagel test for mols with flagels" + assert all( + not mc.rules.has_spider_chains(dm.to_mol(x)) for x in mols_without_flagels + ), "Fail flagel test for mols without flagels" + + +def test_fraction_ring_system(): + mols = [ + "CCNCC1CCC(CNC(C)C)C1", + "CCCCC1=CN(C=C1CCC)C1=CC(=CC=C1)C(C)CCO", + "CCCCC1=CN(C=C1CCC)C1=CC(=CC=C1)C(C)CCCCC1CCO1", + "CC(C)C(O)C(O)C(N)=O", + "C1CCCCCC1", + ] + mols = [dm.to_mol(x) for x in mols] + expected_results = [5 / 14, 11 / 23, 20 / 28, 0, 1] # n_atoms_rings / n_atoms + np.testing.assert_allclose(expected_results, [mc.rules.fraction_atom_in_scaff(x) for x in mols]) + + +def test_n_fused_aromatic_rings(): + smiles = [ + "C1CNC2CCCNC2C1", + "C1=CC2=C(C=C1)C1=C(C=C2)N=CC=C1", + "C1CC1C1=CN=CC(=C1)C1=CC2=C(OCO2)C=C1", + "C1OC2=C(O1)C=C(C=C2)C1=CN=C2C=CC=CC2=C1", + "O=C(NC1=CC=C2N=CNC2=C1)C1=CC=C2C=CC=CC2=C1", + ] + mols = [dm.to_mol(x) for x in smiles] + expected_results_pairwise = [0, 2, 0, 1, 2] + expected_results = [0, 1, 0, 1, 2] + expected_results_no_all_aro = [0, 1, 1, 2, 2] + results = [mc.rules.n_fused_aromatic_rings(x) for x in mols] + results_pairwise = [mc.rules.n_fused_aromatic_rings(x, pairwise=True) for x in mols] + results_no_all_aro = [mc.rules.n_fused_aromatic_rings(x, require_all_aromatic=False) for x in mols] + assert results == expected_results, "Fail fused aromatic ring test" + assert expected_results_pairwise == results_pairwise, "Fail pairwise fused aromatic ring test" + assert results_no_all_aro == expected_results_no_all_aro, "Fail not fully aromatic ring test" + + +def test_n_heavy_metals(): + smiles = [ + r"[Pd++].[H][C@]1(C)\C2=C\C3=C(C(C)=O)C(C)=C([N-]3)\C=C3/N=C(/C(/CC(=O)OC)=C4\[N-]\C(=C/C(=N2)[C@]1([H])CC)C(C)=C4C(=O)NCCS(O)(=O)=O)[C@@]([H])(CCC(O)=O)[C@]3([H])C", + "[Na+].[Na+].[Na+].OC(CC([O-])=O)(CC([O-])=O)C([O-])=O", + "CC(=O)OC1=CC=CC=C1C(O)=O", + ] + mols = [dm.to_mol(x) for x in smiles] + output = [mc.rules.n_heavy_metals(m) for m in mols] + expected_output = [1, 0, 0] + assert output == expected_output, "Fail heavy atom test" + + +def test_rule_of_generative_stereo_case(): + smiles = [ + "CCC(O)C1=CC=C(C=C1)S(=O)(=O)C1CCNC(C)C1", + "CC(F)C(O)C1=CC=C(C=C1)S(=O)(=O)C1CCNC(C)C1", + ] + mols = [dm.to_mol(x) for x in smiles] + output = [mc.rules.basic_rules.rule_of_generative_design(x) for x in mols] + excepted_output = [True, True] + assert output == excepted_output, "Fail simple rule of generative" + + output = [mc.rules.basic_rules.rule_of_generative_design_strict(x) for x in mols] + excepted_output = [True, False] # second molecule fails due to n_stereo_center + assert output == excepted_output, "Fail rule of generative stereo center test" + + +def test_basic_rules(): + data = dm.data.freesolv() + data = data.iloc[:50] + + all_basic_rules = mc.rules.RuleFilters.list_available_rules()["name"].values + for rule_name in all_basic_rules: + rule_fn = getattr(mc.rules.basic_rules, rule_name) + rule_fn(data["smiles"].values[10]) + + +def test_rfilter(): + data = dm.data.freesolv() + data = data.iloc[:50] + + def my_rules(mol, **kwargs): + mol = dm.to_mol(mol) + + if mol is None: + raise ValueError("Molecule is None") + + return mol.GetNumHeavyAtoms() / dm.descriptors.clogp(mol) > 2 + + rfilter = mc.rules.RuleFilters( + rule_list=[my_rules, "rule_of_five"], + rule_list_names=["my_rules", "rule_of_five"], + ) + out = rfilter(data["smiles"].tolist()) + assert out.shape[-1] == 5 + assert out.shape[0] == 50 + assert out["my_rules"].sum() == 45 + assert out["rule_of_five"].sum() == 48 + assert out["pass_all"].sum() == 44 + assert out["pass_any"].sum() == 49 + + +def test_rule_basic_raise_error_if_none(): + all_basic_rules = mc.rules.RuleFilters.list_available_rules()["name"].values + for rule_name in all_basic_rules: + rule_fn = getattr(mc.rules.basic_rules, rule_name) + + with pytest.raises(ValueError): + rule_fn(None) + + +def test_rule_filters_no_names(): + def my_rules(mol, **kwargs): + return True + + rfilter = mc.rules.RuleFilters(rule_list=[my_rules, "rule_of_five"]) + + assert list(rfilter.rules.keys()) == ["my_rules", "rule_of_five"] + + +def test_rule_filters_class(): + rfilter = mc.rules.RuleFilters(rule_list=["rule_of_three", "rule_of_five"]) + assert len(rfilter) == 2 + assert len(rfilter.rules) == 2 + assert isinstance(rfilter.rules["rule_of_three"], Callable) + + +def test_rule_filters_invalid(): + rfilter = mc.rules.RuleFilters(rule_list=["rule_of_five"]) + + with pytest.raises(ValueError): + rfilter(mols=[None, "CCCCO"], fail_on_error=True) + + results = rfilter(mols=[None, "CCCCO"], fail_on_error=False) + assert results["mol"].isnull().sum() == 1 + + assert pd.isna(results.iloc[0]["pass_all"]) + assert pd.isna(results.iloc[0]["pass_any"]) + assert pd.isna(results.iloc[0]["rule_of_five"]) + + assert results.iloc[1]["pass_all"] == True + assert results.iloc[1]["pass_any"] == True + assert results.iloc[1]["rule_of_five"] == True + + +def test_rule_filters_list(): + l = mc.rules.RuleFilters.list_available_rules() + assert isinstance(l, pd.DataFrame) + assert "name" in l.columns + + l = mc.rules.RuleFilters.list_available_rules_names() + assert isinstance(l, list) + assert all(isinstance(x, str) for x in l) + assert len(l) > 0 + + l = mc.rules.RuleFilters.list_available_rules("building block") + assert isinstance(l, pd.DataFrame) + assert "name" in l.columns + + l = mc.rules.RuleFilters.list_available_rules_names("building block", "fragment") + assert isinstance(l, list) + assert all(isinstance(x, str) for x in l) + assert len(l) > 0 diff --git a/tests_OLD/test_rules.py b/tests_OLD/test_rules.py deleted file mode 100644 index 47f67e7..0000000 --- a/tests_OLD/test_rules.py +++ /dev/null @@ -1,122 +0,0 @@ -import unittest as ut -import datamol as dm -import numpy as np -from medchem.rules import RuleFilters -from medchem.rules import basic_rules -from medchem.rules._utils import ( - n_fused_aromatic_rings, - n_heavy_metals, - has_spider_chains, - fraction_atom_in_scaff, -) - - -def test_has_spider_chains(): - mols_with_flagels = [ - "CCNCC1CCC(CNC(C)C)C1", - "CCCCC1=CN(C=C1CCC)C1=CC(=CC=C1)C(C)CCO", - "CCCCC1=CC2=C(OC(CN(C)CC)O2)C=C1", - ] - mols_without_flagels = [ - "CC(C)C(O)C(O)C(N)=O", - "OC1=CC=CC(CC2CC2)=C1", - "CCN(C)C1=CC=CC(CC(O)CC(C)O)=C1", - "CN1CCC(CC(=O)NCC2=CC=CC=C2)C1", - "CCCCC1=CC(=CC=C1)C(CC)C(C)C", - ] - - assert all( - has_spider_chains(dm.to_mol(x)) for x in mols_with_flagels - ), "Fail flagel test for mols with flagels" - assert all( - not has_spider_chains(dm.to_mol(x)) for x in mols_without_flagels - ), "Fail flagel test for mols without flagels" - - -def test_fraction_ring_system(): - mols = [ - "CCNCC1CCC(CNC(C)C)C1", - "CCCCC1=CN(C=C1CCC)C1=CC(=CC=C1)C(C)CCO", - "CCCCC1=CN(C=C1CCC)C1=CC(=CC=C1)C(C)CCCCC1CCO1", - "CC(C)C(O)C(O)C(N)=O", - "C1CCCCCC1", - ] - mols = [dm.to_mol(x) for x in mols] - expected_results = [5 / 14, 11 / 23, 20 / 28, 0, 1] # n_atoms_rings / n_atoms - np.testing.assert_allclose(expected_results, [fraction_atom_in_scaff(x) for x in mols]) - - -def test_n_fused_aromatic_rings(): - smiles = [ - "C1CNC2CCCNC2C1", - "C1=CC2=C(C=C1)C1=C(C=C2)N=CC=C1", - "C1CC1C1=CN=CC(=C1)C1=CC2=C(OCO2)C=C1", - "C1OC2=C(O1)C=C(C=C2)C1=CN=C2C=CC=CC2=C1", - "O=C(NC1=CC=C2N=CNC2=C1)C1=CC=C2C=CC=CC2=C1", - ] - mols = [dm.to_mol(x) for x in smiles] - expected_results_pairwise = [0, 2, 0, 1, 2] - expected_results = [0, 1, 0, 1, 2] - expected_results_no_all_aro = [0, 1, 1, 2, 2] - results = [n_fused_aromatic_rings(x) for x in mols] - results_pairwise = [n_fused_aromatic_rings(x, pairwise=True) for x in mols] - results_no_all_aro = [n_fused_aromatic_rings(x, require_all_aromatic=False) for x in mols] - assert results == expected_results, "Fail fused aromatic ring test" - assert expected_results_pairwise == results_pairwise, "Fail pairwise fused aromatic ring test" - assert results_no_all_aro == expected_results_no_all_aro, "Fail not fully aromatic ring test" - - -def test_n_heavy_metals(): - smiles = [ - "[Pd++].[H][C@]1(C)\C2=C\C3=C(C(C)=O)C(C)=C([N-]3)\C=C3/N=C(/C(/CC(=O)OC)=C4\[N-]\C(=C/C(=N2)[C@]1([H])CC)C(C)=C4C(=O)NCCS(O)(=O)=O)[C@@]([H])(CCC(O)=O)[C@]3([H])C", - "[Na+].[Na+].[Na+].OC(CC([O-])=O)(CC([O-])=O)C([O-])=O", - "CC(=O)OC1=CC=CC=C1C(O)=O", - ] - mols = [dm.to_mol(x) for x in smiles] - output = [n_heavy_metals(m) for m in mols] - expected_output = [1, 0, 0] - assert output == expected_output, "Fail heavy atom test" - - -def test_rule_of_generative_stereo_case(): - smiles = [ - "CCC(O)C1=CC=C(C=C1)S(=O)(=O)C1CCNC(C)C1", - "CC(F)C(O)C1=CC=C(C=C1)S(=O)(=O)C1CCNC(C)C1", - ] - mols = [dm.to_mol(x) for x in smiles] - output = [basic_rules.rule_of_generative_design(x) for x in mols] - excepted_output = [True, True] - assert output == excepted_output, "Fail simple rule of generative" - - output = [basic_rules.rule_of_generative_design_strict(x) for x in mols] - excepted_output = [True, False] # second molecule fails due to n_stereo_center - assert output == excepted_output, "Fail rule of generative stereo center test" - - -class Test_Rules(ut.TestCase): - data = dm.data.freesolv() - - def test_basic_rules(self): - all_basic_rules = RuleFilters.list_available_rules()["name"].values - for rule_name in all_basic_rules: - rule_fn = getattr(basic_rules, rule_name) - rule_fn(self.data.smiles.values[10]) - - def test_rule_obj(self): - def my_rules(mol, **kwargs): - mol = dm.to_mol(mol) - return mol.GetNumHeavyAtoms() / dm.descriptors.clogp(mol) > 2 - - rule_obj = RuleFilters( - rule_list=[my_rules, "rule_of_five"], - rule_list_names=["my_rules", "rule_of_five"], - ) - out = rule_obj(self.data.smiles.values[:100]) - self.assertEqual(out.shape[-1], 2) - self.assertEqual(out.shape[0], 100) - self.assertEqual(out["my_rules"].sum(), 88) - self.assertEqual(out["rule_of_five"].sum(), 96) - - -if __name__ == "__main__": - ut.main() From 2df4c25ab81c377341edef3ddc02c761a8ad20e8 Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Fri, 7 Jul 2023 13:21:10 -0400 Subject: [PATCH 14/31] structural.common done --- docs/api/medchem.structural.md | 3 + docs/tutorials/Medchem_Rules.ipynb | 2 +- docs/tutorials/Structural_Filters.ipynb | 1504 +++++++++++++++++ medchem/__init__.py | 2 + medchem/catalogs/_catalogs.py | 2 +- ...ction.csv => common_alerts_collection.csv} | 0 medchem/rules/_rule_filter.py | 8 +- medchem/structural/__init__.py | 1 + medchem/structural/_common.py | 179 ++ medchem/structural/_nibr.py | 121 ++ medchem/structural/demerits/__init__.py | 0 medchem/structural/demerits/demerits.py | 321 ++++ medchem/utils/loader.py | 2 + medchem_OLD/alerts.py | 259 --- medchem_OLD/demerits.py | 321 ---- mkdocs.yml | 2 + tests/test_rules.py | 4 +- tests/test_structural.py | 41 + 18 files changed, 2184 insertions(+), 588 deletions(-) create mode 100644 docs/api/medchem.structural.md create mode 100644 docs/tutorials/Structural_Filters.ipynb rename medchem/data/{common_alert_collection.csv => common_alerts_collection.csv} (100%) create mode 100644 medchem/structural/__init__.py create mode 100644 medchem/structural/_common.py create mode 100644 medchem/structural/_nibr.py create mode 100644 medchem/structural/demerits/__init__.py create mode 100644 medchem/structural/demerits/demerits.py delete mode 100644 medchem_OLD/alerts.py delete mode 100644 medchem_OLD/demerits.py create mode 100644 tests/test_structural.py diff --git a/docs/api/medchem.structural.md b/docs/api/medchem.structural.md new file mode 100644 index 0000000..a59c58c --- /dev/null +++ b/docs/api/medchem.structural.md @@ -0,0 +1,3 @@ +# `medchem.structural` + +::: medchem.structural.CommonAlerts diff --git a/docs/tutorials/Medchem_Rules.ipynb b/docs/tutorials/Medchem_Rules.ipynb index 7b4f520..9002421 100644 --- a/docs/tutorials/Medchem_Rules.ipynb +++ b/docs/tutorials/Medchem_Rules.ipynb @@ -884,7 +884,7 @@ " progress_leave=True,\n", " scheduler=\"auto\",\n", " keep_props=False,\n", - " fail_on_error=True,\n", + " fail_if_invalid=True,\n", ")\n", "\n", "results.head()" diff --git a/docs/tutorials/Structural_Filters.ipynb b/docs/tutorials/Structural_Filters.ipynb new file mode 100644 index 0000000..51da51b --- /dev/null +++ b/docs/tutorials/Structural_Filters.ipynb @@ -0,0 +1,1504 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "c0a162d5-5470-45b5-9427-b12097584e8c", + "metadata": {}, + "source": [ + "# Structural Filters" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "cc35111a-d3a8-4313-962c-290bbf563f35", + "metadata": {}, + "outputs": [], + "source": [ + "%load_ext autoreload\n", + "%autoreload 2\n", + "\n", + "import datamol as dm\n", + "import pandas as pd\n", + "\n", + "import medchem as mc" + ] + }, + { + "cell_type": "markdown", + "id": "a5b7e78d-8ce7-40f8-85ad-8de655273bcb", + "metadata": {}, + "source": [ + "## Common Alerts" + ] + }, + { + "cell_type": "markdown", + "id": "eb057c47-3385-4ae5-a5aa-27326e111ae7", + "metadata": {}, + "source": [ + "You can list all the available default filters." + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "5da49903-e7c6-41fd-9317-e2a91d0a8607", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
rule_set_namesmartscatalog_descriptionrule_setsource
0Glaxo55Glaxo Wellcome Hard filters1ChEMBL
1Dundee105University of Dundee NTD Screening Library Fil...2ChEMBL
2BMS180Bristol-Myers Squibb HTS Deck filters3ChEMBL
3PAINS481PAINS filters4ChEMBL
4SureChEMBL166SureChEMBL Non-MedChem Friendly SMARTS5ChEMBL
5MLSMR116NIH MLSMR Excluded Functionality filters (MLSMR)6ChEMBL
6Inpharmatica91Unwanted fragments derived by Inpharmatica Ltd.7ChEMBL
7LINT57Pfizer lint filters (lint)8ChEMBL
8Alarm-NMR75Reactive False Positives in Biochemical Screen...9Litterature
9AlphaScreen-Hitters6Structural filters for compounds that may be a...10Litterature
10GST-Hitters34Structural filters for compounds may prevent G...11Litterature
11HIS-Hitters19Structural filters for compounds prevents the ...12Litterature
12LuciferaseInhibitor3Structural filters for compounds that may inhi...13Litterature
13DNABinder78Structural filters for compounds that may bind...14Litterature
14Chelator55Structural filters for compounds that may inhi...15Litterature
15Frequent-Hitter15Structural filters for compounds that are freq...16Litterature
16Electrophilic119Structural filters for compounds that could ta...17Litterature
17Genotoxic-Carcinogenicity117Structural filters for compounds that may caus...18Litterature
18LD50-Oral20Structural filters for compounds that may caus...19Litterature
19Non-Genotoxic-Carcinogenicity22Structural filters for compounds that may caus...20Litterature
20Reactive-Unstable-Toxic335General very reactive/unstable or Toxic compounds21Litterature
21Skin155Skin Sensitization filters (irritables)22Litterature
22Toxicophore154General Toxicophores23Litterature
\n", + "
" + ], + "text/plain": [ + " rule_set_name smarts \\\n", + "0 Glaxo 55 \n", + "1 Dundee 105 \n", + "2 BMS 180 \n", + "3 PAINS 481 \n", + "4 SureChEMBL 166 \n", + "5 MLSMR 116 \n", + "6 Inpharmatica 91 \n", + "7 LINT 57 \n", + "8 Alarm-NMR 75 \n", + "9 AlphaScreen-Hitters 6 \n", + "10 GST-Hitters 34 \n", + "11 HIS-Hitters 19 \n", + "12 LuciferaseInhibitor 3 \n", + "13 DNABinder 78 \n", + "14 Chelator 55 \n", + "15 Frequent-Hitter 15 \n", + "16 Electrophilic 119 \n", + "17 Genotoxic-Carcinogenicity 117 \n", + "18 LD50-Oral 20 \n", + "19 Non-Genotoxic-Carcinogenicity 22 \n", + "20 Reactive-Unstable-Toxic 335 \n", + "21 Skin 155 \n", + "22 Toxicophore 154 \n", + "\n", + " catalog_description rule_set source \n", + "0 Glaxo Wellcome Hard filters 1 ChEMBL \n", + "1 University of Dundee NTD Screening Library Fil... 2 ChEMBL \n", + "2 Bristol-Myers Squibb HTS Deck filters 3 ChEMBL \n", + "3 PAINS filters 4 ChEMBL \n", + "4 SureChEMBL Non-MedChem Friendly SMARTS 5 ChEMBL \n", + "5 NIH MLSMR Excluded Functionality filters (MLSMR) 6 ChEMBL \n", + "6 Unwanted fragments derived by Inpharmatica Ltd. 7 ChEMBL \n", + "7 Pfizer lint filters (lint) 8 ChEMBL \n", + "8 Reactive False Positives in Biochemical Screen... 9 Litterature \n", + "9 Structural filters for compounds that may be a... 10 Litterature \n", + "10 Structural filters for compounds may prevent G... 11 Litterature \n", + "11 Structural filters for compounds prevents the ... 12 Litterature \n", + "12 Structural filters for compounds that may inhi... 13 Litterature \n", + "13 Structural filters for compounds that may bind... 14 Litterature \n", + "14 Structural filters for compounds that may inhi... 15 Litterature \n", + "15 Structural filters for compounds that are freq... 16 Litterature \n", + "16 Structural filters for compounds that could ta... 17 Litterature \n", + "17 Structural filters for compounds that may caus... 18 Litterature \n", + "18 Structural filters for compounds that may caus... 19 Litterature \n", + "19 Structural filters for compounds that may caus... 20 Litterature \n", + "20 General very reactive/unstable or Toxic compounds 21 Litterature \n", + "21 Skin Sensitization filters (irritables) 22 Litterature \n", + "22 General Toxicophores 23 Litterature " + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mc.structural.CommonAlerts.list_default_available_alerts()" + ] + }, + { + "cell_type": "markdown", + "id": "6abce913-3561-4c7f-b4a0-82f64707ee3c", + "metadata": {}, + "source": [ + "Create a `CommonAlerts` object in order to filter a list of molecules." + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "6f062f99-c5f5-4a38-b832-c91330d44952", + "metadata": {}, + "outputs": [], + "source": [ + "alerts = mc.structural.CommonAlerts()" + ] + }, + { + "cell_type": "markdown", + "id": "fbcbbee8-02ab-4be2-b597-17876949f34a", + "metadata": {}, + "source": [ + "By default only the \"Glaxo\", \"Dundee\" and \"BMS\" set are used but you can specify your own set:" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "d68f8702-9802-4366-a2bd-137a829aeb0b", + "metadata": {}, + "outputs": [], + "source": [ + "alerts2 = mc.structural.CommonAlerts(alerts_set=[\"LINT\", \"Toxicophore\"])" + ] + }, + { + "cell_type": "markdown", + "id": "57008fd3-d857-423e-9013-599dd1703d35", + "metadata": {}, + "source": [ + "Let's load a few molecules." + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "5ee1de74-cf67-4332-8e55-e6acb8008e27", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Load a dataset\n", + "data = dm.data.solubility()\n", + "data = data.sample(50, random_state=20)\n", + "\n", + "dm.to_image(data.iloc[:8][\"mol\"].tolist(), mol_size=(300, 250))" + ] + }, + { + "cell_type": "markdown", + "id": "71534006-fb4c-4213-bc24-d7e637ef97e4", + "metadata": {}, + "source": [ + "Apply the filters on the list of molecules." + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "cc0241ea-efa0-438b-be43-15e248992e4d", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "bf1d1e58bb3e4875851ad1d22a4332c4", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Filter by alerts: 0%| | 0/50 [00:00\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
molpass_filterstatusreasons
0<rdkit.Chem.rdchem.Mol object at 0x7f6bce5471b0>TrueokNone
1<rdkit.Chem.rdchem.Mol object at 0x7f6bce297b50>FalseexcludePolycyclic aromatic hydrocarbon
2<rdkit.Chem.rdchem.Mol object at 0x7f6bce087840>Falseexcludeaniline
3<rdkit.Chem.rdchem.Mol object at 0x7f6bce2a0eb0>TrueokNone
4<rdkit.Chem.rdchem.Mol object at 0x7f6bce25d620>TrueokNone
\n", + "" + ], + "text/plain": [ + " mol pass_filter status \\\n", + "0 True ok \n", + "1 False exclude \n", + "2 False exclude \n", + "3 True ok \n", + "4 True ok \n", + "\n", + " reasons \n", + "0 None \n", + "1 Polycyclic aromatic hydrocarbon \n", + "2 aniline \n", + "3 None \n", + "4 None " + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results = alerts(\n", + " mols=data[\"mol\"].tolist(),\n", + " n_jobs=-1,\n", + " progress=True,\n", + " progress_leave=True,\n", + " scheduler=\"auto\",\n", + ")\n", + "\n", + "results.head()" + ] + }, + { + "cell_type": "markdown", + "id": "9c927a0b-c6b9-4a32-aba6-af29e7124dd0", + "metadata": {}, + "source": [ + "Display the results." + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "11f2e6e3-9d3a-4eb8-a9e6-d8d85620335f", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rows = results.iloc[:8]\n", + "\n", + "mols = rows[\"mol\"].iloc[:8].tolist()\n", + "legends = (\n", + " rows[[\"pass_filter\", \"reasons\"]].apply(lambda x: f\"pass_filter={x[0]}\\nreasons={x[1]}\", axis=1).tolist()\n", + ")\n", + "\n", + "dm.to_image(mols, legends=legends, mol_size=(300, 250))" + ] + }, + { + "cell_type": "markdown", + "id": "28999480-cbdb-4a4c-99e8-6c36ab01071f", + "metadata": {}, + "source": [ + "## NIBR Filters" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ad7d822b-0e98-477f-acdf-552de7396d58", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "66799f01-c9fc-41bf-bd0f-3d4b4c38eecd", + "metadata": {}, + "source": [ + "## Demerits Filters" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ffa3c33f-8421-4cf3-a957-46d6d51becc9", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:medchem]", + "language": "python", + "name": "conda-env-medchem-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/medchem/__init__.py b/medchem/__init__.py index 2ef7931..2421627 100644 --- a/medchem/__init__.py +++ b/medchem/__init__.py @@ -24,6 +24,7 @@ "constraints": "medchem.constraints", "complexity": "medchem.complexity", "rules": "medchem.rules", + "structural": "medchem.structural", } @@ -62,3 +63,4 @@ def __dir__(): from . import constraints from . import complexity from . import rules + from . import structural diff --git a/medchem/catalogs/_catalogs.py b/medchem/catalogs/_catalogs.py index 7a519a9..b8a84af 100644 --- a/medchem/catalogs/_catalogs.py +++ b/medchem/catalogs/_catalogs.py @@ -180,7 +180,7 @@ def alerts(subset: Optional[Union[List[str], str]] = None): Returns: catalog (FilterCatalog): filter catalog """ - rd_filters = pd.read_csv(get_data_path("common_alert_collection.csv")) + rd_filters = pd.read_csv(get_data_path("common_alerts_collection.csv")) if subset is not None: if isinstance(subset, str): subset = [subset] diff --git a/medchem/data/common_alert_collection.csv b/medchem/data/common_alerts_collection.csv similarity index 100% rename from medchem/data/common_alert_collection.csv rename to medchem/data/common_alerts_collection.csv diff --git a/medchem/rules/_rule_filter.py b/medchem/rules/_rule_filter.py index bfa9fbe..3413b3d 100644 --- a/medchem/rules/_rule_filter.py +++ b/medchem/rules/_rule_filter.py @@ -4,7 +4,6 @@ from typing import List from typing import Sequence from typing import Dict -from typing import Tuple import functools @@ -107,7 +106,7 @@ def __call__( progress_leave: bool = False, scheduler: str = "auto", keep_props: bool = False, - fail_on_error: bool = True, + fail_if_invalid: bool = True, ) -> pd.DataFrame: """Compute the rules for a list of molecules @@ -115,9 +114,10 @@ def __call__( mols: list of input molecule object. n_jobs: number of jobs to run in parallel. progress: whether to show progress or not. + progress_leave: whether to leave the progress bar or not. scheduler: which scheduler to use. If "auto", will use "processes" if `len(mols) > 500` else "threads". keep_props: whether to keep the properties columns computed by the rules. - fail_on_error: whether to fail if a rule fails or not. + fail_if_invalid: whether to fail if a rule fails or not. Returns: df: Dataframe where each row is a molecule and each column is a the outcomes of applying self.rules[column]. @@ -135,7 +135,7 @@ def _rule_fn(mol: Union[str, dm.Mol]): mol = dm.to_mol(mol) if mol is None: - if fail_on_error: + if fail_if_invalid: raise ValueError("Molecule is None") else: return pd.Series() diff --git a/medchem/structural/__init__.py b/medchem/structural/__init__.py new file mode 100644 index 0000000..27c72a1 --- /dev/null +++ b/medchem/structural/__init__.py @@ -0,0 +1 @@ +from ._common import CommonAlerts diff --git a/medchem/structural/_common.py b/medchem/structural/_common.py new file mode 100644 index 0000000..5636e21 --- /dev/null +++ b/medchem/structural/_common.py @@ -0,0 +1,179 @@ +from typing import List +from typing import Optional +from typing import Union +from typing import Sequence + +import os +import functools + +import pandas as pd +import datamol as dm + +from loguru import logger + +from medchem.utils.loader import get_data_path + + +class CommonAlerts: + """Filtering class for building a library based on a list of structural alerts + + To list the available alerts, use the `list_default_available_alerts` method. + """ + + def __init__( + self, + alerts_set: Optional[Union[str, List[str]]] = None, + alerts_db_path: Optional[Union[os.PathLike, str]] = None, + ): + """Filtering molecules based on chemical alerts + + Args: + alerts_set: Filter set to use. Default is BMS+Dundee+Glaxo. + alerts_db_path: Alerts file to use. Default is internal. + """ + if alerts_db_path is None: + alerts_db_path = get_data_path(filename="common_alerts_collection.csv") + + if alerts_set is None: + alerts_set = ["BMS", "Dundee", "Glaxo"] + elif isinstance(alerts_set, str): + alerts_set = [alerts_set] + + alerts_set = [x.lower() for x in set(alerts_set)] + + self.alerts_df = self._build_alerts(alerts_set=alerts_set, alerts_db_path=alerts_db_path) + + def _build_alerts( + self, + alerts_set: Union[str, List[str]], + alerts_db_path: Union[os.PathLike, str], + ): + # Load the db + alerts_df = pd.read_csv(alerts_db_path) + + # Select only the filters we want + mask = alerts_df["rule_set_name"].str.lower().isin(alerts_set) + alerts_df = alerts_df[mask] + alerts_df = alerts_df.reset_index(drop=True) + + with dm.without_rdkit_log(): + alerts_df["smarts_mol"] = alerts_df["smarts"].apply(dm.from_smarts) + + # Check for invalid SMARTS + mask_invalid = alerts_df["smarts_mol"].isnull() + if mask_invalid.sum() > 0: + invalid_smarts = alerts_df.loc[mask_invalid, "smarts"].tolist() # pragma: no cover + logger.warning( + f"The following SMARTS are invalid and will be ignored: {invalid_smarts}" + ) # pragma: no cover + + return alerts_df + + @staticmethod + @functools.lru_cache() + def list_default_available_alerts(): + """ + Return a list of unique rule set names + """ + alerts_db = get_data_path(filename="common_alerts_collection.csv") + rule_df = pd.read_csv(alerts_db) + rule_list = ( + rule_df.groupby("rule_set_name") + .agg( + { + "smarts": "count", + "catalog_description": "first", + "rule_set": "first", + "source": "first", + } + ) + .sort_values("rule_set") + .reset_index() + ) + + return rule_list + + def evaluate(self, mol: Union[str, dm.Mol]): + """ + Evaluate structure alerts on a molecule + + Args: + mol: input molecule + """ + if isinstance(mol, str): + with dm.without_rdkit_log(): + _mol = dm.to_mol(mol) + else: + _mol = mol + + if _mol is None: + return pd.Series( + { + "mol": _mol, + "pass_filter": False, + "status": "exclude", + "reasons": "invalid", + } + ) + + # Match the molecule against the alerts + n_matches = self.alerts_df["smarts_mol"].apply(lambda x: len(_mol.GetSubstructMatches(x))) + has_alert = n_matches > 0 + + # Prepare the result + result = pd.Series() + result["mol"] = _mol + + if any(has_alert): + result["pass_filter"] = False + result["status"] = "exclude" + result["reasons"] = ";".join(self.alerts_df[has_alert]["description"].dropna().unique().tolist()) + + # NOTE(hadim): we could eventually backpropagate the full alert definition of the matching alerts + + # match atom indices and also the molecule object with the highlighted atoms. + + else: + result["pass_filter"] = True + result["status"] = "ok" + result["reasons"] = None + + return result + + def __call__( + self, + mols: Sequence[Union[str, dm.Mol]], + n_jobs: Optional[int] = -1, + progress: bool = False, + progress_leave: bool = False, + scheduler: str = "auto", + ): + """Run alert evaluation on this list of molecule and return the full dataframe + + Args: + mols: list of input molecule object. + n_jobs: number of jobs to run in parallel. + progress: whether to show progress or not. + progress_leave: whether to leave the progress bar or not. + scheduler: which scheduler to use. If "auto", will use "processes" if `len(mols) > 500` else "threads". + """ + + if scheduler == "auto": + if len(mols) > 500: + scheduler = "processes" # pragma: no cover + else: + scheduler = "threads" + + results = dm.parallelized( + self.evaluate, + mols, + progress=progress, + n_jobs=n_jobs, + scheduler=scheduler, + tqdm_kwargs=dict( + desc="Filter by alerts", + leave=progress_leave, + ), + ) + results = pd.DataFrame(results) + + return results diff --git a/medchem/structural/_nibr.py b/medchem/structural/_nibr.py new file mode 100644 index 0000000..fc483dc --- /dev/null +++ b/medchem/structural/_nibr.py @@ -0,0 +1,121 @@ +# from typing import Iterable +# from typing import List +# from typing import Optional +# from typing import Union + +# import os +# import copy +# import functools +# import pandas as pd +# import datamol as dm + +# from tqdm.auto import tqdm +# from loguru import logger +# from rdkit.Chem import rdchem +# from rdkit.Chem.Descriptors import MolWt, MolLogP, NumHDonors, NumHAcceptors, TPSA +# from medchem.utils.loader import get_data_path +# from medchem.catalog import NamedCatalogs + + +# class NovartisFilters: +# """Filtering class for building a screening deck following the novartis filtering process +# published in https://dx.doi.org/10.1021/acs.jmedchem.0c01332. + +# The output of the filter are explained below: +# - **status**: one of `["Exclude", "Flag", "Annotations", "Ok"]` (ordered by quality). +# Generally, you can keep anything without the "Exclude" label, as long as you also apply +# a maximum severity score for compounds that collects too many flags. +# - **covalent**: number of potentially covalent motifs contained in the compound +# - **severity**: how severe are the issues with the molecules: +# - `0`: compound has no flags, might have annotations; +# - `1-9`: number of flags the compound raises; +# - `>= 10`: default exclusion criterion used in the paper +# - **special_mol**: whether the compound/parts of the compound belongs to a special class of molecules +# (e.g peptides, glycosides, fatty acid). In that case, you should review the rejection reasons. +# """ + +# def __call__( +# self, +# mols: Iterable[Union[str, rdchem.Mol]], +# n_jobs: Optional[int] = None, +# progress: bool = False, +# ): +# """Run alert evaluation on this list of molecule and return the full dataframe + +# Args: +# mols: input list of molecules +# n_jobs: number of jobs +# progress: whether to show progress or not +# """ + +# catalog = NamedCatalogs.nibr() +# if n_jobs is not None: +# if isinstance(mols[0], str): +# mols = dm.parallelized(dm.to_mol, mols, n_jobs=n_jobs, progress=progress) +# matches = dm.parallelized( +# catalog.GetMatches, +# mols, +# n_jobs=n_jobs, +# progress=progress, +# scheduler="threads", +# ) +# else: +# mols = [dm.to_mol(x) if isinstance(x, str) else x for x in mols] +# iter_mols = mols +# if progress: +# iter_mols = tqdm(mols) +# matches = [catalog.GetMatches(mol) for mol in iter_mols] + +# results = [] +# for i, (mol, entries) in enumerate(zip(mols, matches)): +# status = "Ok" +# smiles = None +# reasons = None +# co = None +# sm = None +# sc = 0 +# try: +# smiles = dm.to_smiles(mol) +# if len(list(entries)): +# # initialize empty lists +# names, severity, covalent, special_mol = ([] for _ in range(4)) +# # get the matches +# for entry in entries: +# pname = entry.GetDescription() +# _, name, sev, cov, m = pname.split("||") +# names.append(name) +# severity.append(int(sev)) +# covalent.append(int(cov)) +# special_mol.append(int(m)) +# # concatenate all matching filters +# reasons = "; ".join(names) +# # severity of 2 means EXCLUDE +# if severity.count(2): +# sc = 10 +# status = "Exclude" +# else: +# sc = sum(severity) +# if severity.count(1): +# status = "Flag" +# elif severity.count(0): +# status = "Annotations" +# # get number of covalent flags and special molecule flags +# co = sum(covalent) +# sm = sum(special_mol) +# except Exception as e: +# logger.warning(f"Fail on molecule at index {i}") + +# results.append([smiles, status, reasons, sc, co, sm]) +# df = pd.DataFrame( +# results, +# columns=[ +# "_smiles", +# "status", +# "reasons", +# "severity", +# "covalent", +# "special_mol", +# ], +# ) +# return df + diff --git a/medchem/structural/demerits/__init__.py b/medchem/structural/demerits/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/medchem/structural/demerits/demerits.py b/medchem/structural/demerits/demerits.py new file mode 100644 index 0000000..e398058 --- /dev/null +++ b/medchem/structural/demerits/demerits.py @@ -0,0 +1,321 @@ +# from typing import List +# from typing import Optional + +# import os +# import uuid +# import io +# import re +# import shutil +# import subprocess +# import tempfile +# import importlib.resources as importlib_resources + +# import pandas as pd +# import datamol as dm +# import numpy as np + + +# def _find_lilly_binaries(): +# binaries_list = ["mc_first_pass", "tsubstructure", "iwdemerit"] +# binary_paths = {} +# for binary_name in binaries_list: +# binary_path = shutil.which(binary_name) + +# if binary_path is None: +# raise ImportError( +# "The Lilly binaries required to use the `medchem.demerits` module seems to be missing. Install with `mamba install lilly-medchem-rules`." +# ) + +# binary_paths[binary_name] = binary_path + +# return binary_paths + + +# BIN2PATH = _find_lilly_binaries() + + +# def _rreplace(input_str, old, rep, occurrence): +# """Replace last occurence of 'old' in 'input_str' by 'rep'""" +# tmp = input_str.rsplit(old, occurrence) +# return rep.join(tmp) + + +# def _parse_output(rowlist): +# """Parse content of `rowlist` to dataframe""" +# content = "\n".join( +# [ +# _rreplace( +# re.sub(r"\s+\([0-9]*\s+(matches\sto\s)", ' "', line.strip(), 1), +# "')", +# "'\"", +# 1, +# ).strip("'") +# for line in rowlist +# ] +# ) +# flux = io.StringIO(content) +# df = pd.read_csv(flux, sep=r"\s+", doublequote=True, names=["_smiles", "ID", "reasons"]) +# df["ID"] = pd.to_numeric(df["ID"]) +# df["reasons"] = df["reasons"].apply(lambda x: x.strip("'") if x and isinstance(x, str) else x) +# return df + + +# def run_cmd(cmd, shell=False): +# """Run command""" +# res = subprocess.run(cmd, capture_output=True, shell=shell, check=False) +# if res.returncode != 0: +# print("".join(res.stderr.decode("utf-8"))) +# print(" ".join(cmd)) +# res.check_returncode() +# return res + + +# def batch_score( +# smiles_list: List, +# n_jobs: Optional[int] = None, +# batch_size: Optional[int] = 5_000, +# progress: bool = False, +# **run_options, +# ): +# """Run scorer on input smile list in batch + +# Args: +# smiles_list: list of smiles +# n_jobs: Number of jobs to run in parallel. +# batch_size: Optional batch_size to run the the scoring in parallels. +# progress: Whether to show progress bar. +# run_options: Run options to pass to the underlining score function + +# Returns: +# out_df (pd.DataFrame): Dataframe containing the smiles and computed properties: +# (rejected, demerit_score, reason, step) +# """ +# n_splits = max(1, int(np.ceil(len(smiles_list) / batch_size))) +# if n_jobs is not None and n_splits > 1: +# smiles_batch_list = np.array_split(smiles_list, n_splits) +# smiles_batch = [dict(smiles_list=list(smlist), **run_options) for smlist in smiles_batch_list] +# # EN: cannot run this code in processes or loky mode +# output = dm.parallelized( +# score, +# smiles_batch, +# n_jobs=n_jobs, +# progress=progress, +# scheduler="threads", +# arg_type="kwargs", +# ) +# cur_len = 0 +# for sm_list, df in zip(smiles_batch_list, output): +# df["ID"] += cur_len +# cur_len += len(sm_list) +# return pd.concat(output, ignore_index=True) +# return score(smiles_list, **run_options) + + +# def score( +# smiles_list: List, +# mc_first_pass_options: Optional[str] = "", +# iwd_options: Optional[str] = "", +# stop_after_step: Optional[int] = 3, +# **run_options, +# ): +# """Run scorer on input smile list: + +# Args: +# smiles_list: list of smiles +# mc_first_pass_options: Initial options to pass to mc_first_pass +# iwd_options: Initial options to pass to iwdemerit +# stop_after_step: Where to stop in the pipeline. Don't change this if you don't know. +# run_options: Additional option to run the pipeline + +# Returns: +# out_df (pd.DataFrame): Dataframe containing the smiles and computed properties: +# (rejected, demerit_score, reason, step) +# """ + +# extra_iwdemerit_options = "" +# demerit_cutoff = run_options.get("dthresh", None) +# soft_upper_atom = run_options.get("soft_max_atoms", 30) +# hard_upper_atom = run_options.get("hard_max_atoms", 50) +# max_size_rings = run_options.get("max_size_rings") +# min_num_rings = run_options.get("min_num_rings") +# max_num_rings = run_options.get("max_num_rings") +# max_size_chain = run_options.get("max_size_chain") +# atom_count = run_options.get("min_atoms", 1) +# allow_non_int_atoms = run_options.get("allow_non_interesting", False) + +# ring_bond_ratio = run_options.get("ring_bond_ratio", -1) +# okiso = run_options.get("okiso", False) +# if not okiso: +# mc_first_pass_options += " -I 0 " +# if min_num_rings: +# mc_first_pass_options += f"-r {min_num_rings} " +# if max_num_rings: +# mc_first_pass_options += f"-R {max_num_rings} " +# if max_size_rings: +# mc_first_pass_options += f"-Z {max_size_rings} " +# extra_iwdemerit_options += f" -Z {max_size_rings} " +# if max_size_chain: +# extra_iwdemerit_options += f" -z {max_size_chain} " + +# if allow_non_int_atoms: +# mc_first_pass_options += "-k " +# mc_first_pass_options += " -A I -A ipp" + +# query_files = ["reject1", "reject2", "demerits"] +# for i, query_file in enumerate(query_files): +# query_files[i] = str(importlib_resources.files("medchem.data.queries").joinpath(query_file)) + +# # output file dir +# files_to_be_deleted = [] +# run_id = str(uuid.uuid4())[:8] +# bad_file_dir = tempfile.mkdtemp(suffix=f"_lilly_{run_id}") +# files_to_be_deleted.append(bad_file_dir) +# bad_file_0 = os.path.join(bad_file_dir, "bad0") +# bad_file_1 = os.path.join(bad_file_dir, "bad1") +# bad_file_2 = os.path.join(bad_file_dir, "bad2") +# bad_file_3 = os.path.join(bad_file_dir, "bad3") +# mc_pass_out = os.path.join(bad_file_dir, "mc_pass.smi") +# tsub_out_1 = os.path.join(bad_file_dir, "tsub1.smi") +# tsub_out_2 = os.path.join(bad_file_dir, "tsub2.smi") +# iwd_out = os.path.join(bad_file_dir, "iwd.smi") + +# # optional_queries +# optional_queries = "" +# optional_queries += " -q ".join(run_options.get("rej_queries", [])) +# optional_queries += " -s ".join(run_options.get("smarts", [])) + +# # extra iwdemerit options +# nodemerit = run_options.get("nodemerit", False) + +# if nodemerit or soft_upper_atom is None: +# soft_upper_atom = hard_upper_atom - 1 + +# if hard_upper_atom < soft_upper_atom: +# hard_upper_atom = soft_upper_atom + 1 + +# if demerit_cutoff: +# extra_iwdemerit_options += f" -f {demerit_cutoff} " + +# if nodemerit: +# extra_iwdemerit_options += " -r " + +# if iwd_options: +# extra_iwdemerit_options += " " + iwd_options + +# charge_assigner_path = str(importlib_resources.files("medchem.data.charge_assigner").joinpath("queries")) +# extra_iwdemerit_options += " -N F:" + charge_assigner_path + +# odm = run_options.get("odm", []) + +# if odm: +# odm_patterns = [re.compile(odm_p, re.I) for odm_p in odm] +# with open(query_files[2]) as QRY_IN: +# current_queries = [qry.strip() for qry in QRY_IN] +# current_queries = [ +# qry for qry in current_queries if not any(odm_p.search(qry) for odm_p in odm_patterns) +# ] + +# with tempfile.NamedTemporaryFile(mode="w+t", suffix=".qry", delete=False) as tmp_file: +# tmp_file.write("\n".join(current_queries)) +# query_files[2] = tmp_file.name +# files_to_be_deleted.append(tmp_file.name) + +# smiles_file = None +# with tempfile.NamedTemporaryFile( +# mode="w+t", suffix=f"_lilly_{run_id}.smi", delete=False +# ) as smiles_tmp_files: +# smiles_tmp_files.write( +# "\n".join([f"{sm.strip().split()[0]}\t{i}" for i, sm in enumerate(smiles_list)]) +# ) +# smiles_file = smiles_tmp_files.name +# files_to_be_deleted.append(smiles_file) + +# cmd = [BIN2PATH["mc_first_pass"]] +# if ring_bond_ratio >= 0: +# cmd.extend(["-b", str(ring_bond_ratio)]) +# if mc_first_pass_options: +# cmd.extend(mc_first_pass_options.split()) +# cmd.extend(["-c", str(atom_count), "-C", str(hard_upper_atom)]) +# cmd.extend("-E autocreate -o smi -V -g all -g ltltr -i ICTE".split()) +# cmd.extend(["-L", bad_file_0, "-K", "TP1"]) +# cmd.extend(["-a", "-u", "-S", mc_pass_out, smiles_file]) +# out = [] +# out.append(run_cmd(cmd)) +# if stop_after_step >= 1: +# cmd = [] +# cmd.extend((BIN2PATH["tsubstructure"] + " -E autocreate -b -u -i smi -o smi -A D ").split()) +# cmd.extend(("-m " + bad_file_1 + " -m QDT").split()) +# cmd.extend((f"-n {tsub_out_1} -q F:" + query_files[0] + optional_queries + f" {mc_pass_out}").split()) +# out.append(run_cmd(cmd)) +# if stop_after_step >= 2: +# cmd = [] +# cmd.extend((BIN2PATH["tsubstructure"] + " -A D -E autocreate -b -u -i smi -o smi ").split()) +# cmd.extend(("-m " + bad_file_2 + " -m QDT").split()) +# cmd.extend((f"-n {tsub_out_2} -q F:" + query_files[1] + f" {tsub_out_1}").split()) +# out.append(run_cmd(cmd)) + +# if stop_after_step >= 3: +# cmd = [] +# cmd.extend( +# ( +# BIN2PATH["iwdemerit"] +# + " -u -k -x -t " +# + extra_iwdemerit_options +# + " -E autocreate -A D -i smi -o smi -q F:" +# + query_files[2] +# ).split() +# ) +# cmd.extend(f"-R {bad_file_3}".split()) +# cmd.extend(f"-G {iwd_out} -c smax={soft_upper_atom} -c hmax={hard_upper_atom} {tsub_out_2}".split()) +# out.append(run_cmd(cmd)) + +# data_list = [] +# for i, bad_file in enumerate([bad_file_0, bad_file_1, bad_file_2]): +# with open(bad_file + ".smi") as IN: +# df_bad = _parse_output(IN) +# df_bad["step"] = i + 1 +# df_bad["rejected"] = True +# data_list.append(df_bad) + +# demerit_extractor = re.compile(r"'([A-Za-z0-9_\s]+)'") +# for dt_file, rej in [(bad_file_3 + ".smi", True), (iwd_out, False)]: +# parseable = [] +# demerit_scores = [] +# with open(dt_file) as IN: +# for row in IN: +# in_string, *demerit_string = row.split(" : ") +# in_string = in_string.strip() +# demerit_score = 0 +# if not demerit_string: +# in_string += ' ""' +# else: +# demerit_string = str(demerit_string[0]).strip() +# try: +# demerit_score = int(re.match(r"D\(([0-9]+)\)", demerit_string).group(1)) +# except: +# pass +# tmp = demerit_extractor.findall(row) +# demerit_string = ",".join([":".join(reversed(l.split())) for l in tmp]) +# in_string += " " + demerit_string +# parseable.append(in_string) +# demerit_scores.append(demerit_score) +# df = _parse_output(parseable) +# df["rejected"] = rej +# df["step"] = i + 1 +# df["demerit_score"] = demerit_scores +# data_list.append(df) +# i += 1 +# final_df = pd.concat(data_list).sort_values("ID").reset_index(drop=True) +# # Postprocessing +# final_df["status"] = final_df["rejected"].apply(lambda x: "Exclude" if x else "Ok") +# final_df.loc[((final_df.demerit_score > 0) & (~final_df.rejected)), "status"] = "Flag" +# # clean +# for to_del in files_to_be_deleted: +# if os.path.isfile(to_del): +# os.remove(to_del) +# else: +# try: +# shutil.rmtree(to_del) +# except: +# pass +# return final_df diff --git a/medchem/utils/loader.py b/medchem/utils/loader.py index dccd3b5..52714e4 100644 --- a/medchem/utils/loader.py +++ b/medchem/utils/loader.py @@ -4,11 +4,13 @@ import os import io +import functools import importlib.resources import fsspec +@functools.lru_cache(maxsize=10) def get_data_path(filename: str, module: str = "medchem.data"): """Return the filepath of a data file.""" diff --git a/medchem_OLD/alerts.py b/medchem_OLD/alerts.py deleted file mode 100644 index 9f0210a..0000000 --- a/medchem_OLD/alerts.py +++ /dev/null @@ -1,259 +0,0 @@ -from typing import Iterable -from typing import List -from typing import Optional -from typing import Union - -import os -import copy -import functools -import pandas as pd -import datamol as dm - -from tqdm.auto import tqdm -from loguru import logger -from rdkit.Chem import rdchem -from rdkit.Chem.Descriptors import MolWt, MolLogP, NumHDonors, NumHAcceptors, TPSA -from medchem.utils.loader import get_data_path -from medchem.catalog import NamedCatalogs - - -class NovartisFilters: - """Filtering class for building a screening deck following the novartis filtering process - published in https://dx.doi.org/10.1021/acs.jmedchem.0c01332. - - The output of the filter are explained below: - - **status**: one of `["Exclude", "Flag", "Annotations", "Ok"]` (ordered by quality). - Generally, you can keep anything without the "Exclude" label, as long as you also apply - a maximum severity score for compounds that collects too many flags. - - **covalent**: number of potentially covalent motifs contained in the compound - - **severity**: how severe are the issues with the molecules: - - `0`: compound has no flags, might have annotations; - - `1-9`: number of flags the compound raises; - - `>= 10`: default exclusion criterion used in the paper - - **special_mol**: whether the compound/parts of the compound belongs to a special class of molecules - (e.g peptides, glycosides, fatty acid). In that case, you should review the rejection reasons. - """ - - def __call__( - self, - mols: Iterable[Union[str, rdchem.Mol]], - n_jobs: Optional[int] = None, - progress: bool = False, - ): - """Run alert evaluation on this list of molecule and return the full dataframe - - Args: - mols: input list of molecules - n_jobs: number of jobs - progress: whether to show progress or not - """ - - catalog = NamedCatalogs.nibr() - if n_jobs is not None: - if isinstance(mols[0], str): - mols = dm.parallelized(dm.to_mol, mols, n_jobs=n_jobs, progress=progress) - matches = dm.parallelized( - catalog.GetMatches, - mols, - n_jobs=n_jobs, - progress=progress, - scheduler="threads", - ) - else: - mols = [dm.to_mol(x) if isinstance(x, str) else x for x in mols] - iter_mols = mols - if progress: - iter_mols = tqdm(mols) - matches = [catalog.GetMatches(mol) for mol in iter_mols] - - results = [] - for i, (mol, entries) in enumerate(zip(mols, matches)): - status = "Ok" - smiles = None - reasons = None - co = None - sm = None - sc = 0 - try: - smiles = dm.to_smiles(mol) - if len(list(entries)): - # initialize empty lists - names, severity, covalent, special_mol = ([] for _ in range(4)) - # get the matches - for entry in entries: - pname = entry.GetDescription() - _, name, sev, cov, m = pname.split("||") - names.append(name) - severity.append(int(sev)) - covalent.append(int(cov)) - special_mol.append(int(m)) - # concatenate all matching filters - reasons = "; ".join(names) - # severity of 2 means EXCLUDE - if severity.count(2): - sc = 10 - status = "Exclude" - else: - sc = sum(severity) - if severity.count(1): - status = "Flag" - elif severity.count(0): - status = "Annotations" - # get number of covalent flags and special molecule flags - co = sum(covalent) - sm = sum(special_mol) - except Exception as e: - logger.warning(f"Fail on molecule at index {i}") - - results.append([smiles, status, reasons, sc, co, sm]) - df = pd.DataFrame( - results, - columns=[ - "_smiles", - "status", - "reasons", - "severity", - "covalent", - "special_mol", - ], - ) - return df - - -class AlertFilters: - """Filtering class for building a library based on a list of structural alerts - - To list the available alerts, use the `list_default_available_alerts` method. - """ - - def __init__( - self, - alerts_set: Union[str, List[str]] = None, - alerts_db: Optional[os.PathLike] = None, - ): - """Filtering molecules based on chemical alerts - - Args: - alerts_set: Alerts catalog to use. Default is BMS+Dundee+Glaxo - alerts_db: Alerts file to use. Default is internal - """ - if alerts_db is None: - alerts_db = get_data_path(filename="common_alert_collection.csv") - self.rule_df = pd.read_csv(alerts_db) - self.rule_list = [] - if alerts_set is None: - alerts_set = ["BMS", "Dundee", "Glaxo"] - if isinstance(alerts_set, str): - alerts_set = [alerts_set] - self.alerts_set = [x.lower() for x in set(alerts_set)] - self._build_rule_list() - - def _build_rule_list(self): - """ - Build the rule sets defined in alerts_set for this object - """ - self.rule_df = self.rule_df[self.rule_df.rule_set_name.str.lower().isin(self.alerts_set)] - tmp_rule_list = self.rule_df[["rule_id", "smarts", "mincount", "description"]].values.tolist() - for rule_id, smarts, mincount, desc in tmp_rule_list: - smarts_mol = dm.from_smarts(smarts) - if smarts_mol: - self.rule_list.append([smarts_mol, mincount, desc]) - else: - logger.warning(f"Error parsing SMARTS for rule {rule_id}") - - @staticmethod - @functools.lru_cache() - def list_default_available_alerts(): - """ - Return a list of unique rule set names - """ - alerts_db = get_data_path(filename="common_alert_collection.csv") - rule_df = pd.read_csv(alerts_db) - return ( - rule_df.groupby("rule_set_name") - .agg( - { - "smarts": "count", - "catalog_description": "first", - "rule_set": "first", - "source": "first", - } - ) - .reset_index() - .sort_values("rule_set") - ) - - def evaluate(self, mol: Union[str, rdchem.Mol]): - """ - Evaluate structure alerts on a molecule - - Args: - mol: input molecule - - Returns: - list of alerts matched - """ - if isinstance(mol, str): - mol = dm.to_mol(mol) - if mol is None: - return [mol, "Exclude", -999, -999, -999, -999, -999] + [1] * len(self.rule_list) - - desc_list = [ - MolWt(mol), - MolLogP(mol), - NumHDonors(mol), - NumHAcceptors(mol), - TPSA(mol), - ] - alerts = [ - int(len(mol.GetSubstructMatches(patt)) >= mincount) for patt, mincount, desc in self.rule_list - ] - status = "Ok" - reasons = None - if any(alerts): - status = "Exclude" - reasons = "; ".join([x[-1] for i, x in enumerate(self.rule_list) if alerts[i]]) - - return [dm.to_smiles(mol), status, reasons] + desc_list + alerts - - def __call__( - self, - mols: Iterable[Union[str, rdchem.Mol]], - n_jobs: Optional[int] = None, - progress: bool = False, - include_all_alerts: bool = False, - ): - """Run alert evaluation on this list of molecule and return the full dataframe - - Args: - mols: input list of molecules - n_jobs: number of jobs - progress: whether to show progress or not - include_all_alerts: whether to include all of the alerts that match as columns - """ - if n_jobs is not None: - filter_obj = copy.deepcopy(self) - results = dm.parallelized(filter_obj.evaluate, mols, n_jobs=n_jobs, progress=progress) - else: - iter_mols = mols - if progress: - iter_mols = tqdm(mols) - results = [self.evaluate(mol) for mol in iter_mols] - - df = pd.DataFrame( - results, - columns=[ - "_smiles", - "status", - "reasons", - "MW", - "LogP", - "HBD", - "HBA", - "TPSA", - ] - + [str(x[-1]) for x in self.rule_list], - ) - if not include_all_alerts: - df = df[["_smiles", "status", "reasons", "MW", "LogP", "HBD", "HBA", "TPSA"]] - return df diff --git a/medchem_OLD/demerits.py b/medchem_OLD/demerits.py deleted file mode 100644 index 81cfc00..0000000 --- a/medchem_OLD/demerits.py +++ /dev/null @@ -1,321 +0,0 @@ -from typing import List -from typing import Optional - -import os -import uuid -import io -import re -import shutil -import subprocess -import tempfile -import importlib.resources as importlib_resources - -import pandas as pd -import datamol as dm -import numpy as np - - -def _find_lilly_binaries(): - binaries_list = ["mc_first_pass", "tsubstructure", "iwdemerit"] - binary_paths = {} - for binary_name in binaries_list: - binary_path = shutil.which(binary_name) - - if binary_path is None: - raise ImportError( - "The Lilly binaries required to use the `medchem.demerits` module seems to be missing. Install with `mamba install lilly-medchem-rules`." - ) - - binary_paths[binary_name] = binary_path - - return binary_paths - - -BIN2PATH = _find_lilly_binaries() - - -def _rreplace(input_str, old, rep, occurrence): - """Replace last occurence of 'old' in 'input_str' by 'rep'""" - tmp = input_str.rsplit(old, occurrence) - return rep.join(tmp) - - -def _parse_output(rowlist): - """Parse content of `rowlist` to dataframe""" - content = "\n".join( - [ - _rreplace( - re.sub(r"\s+\([0-9]*\s+(matches\sto\s)", ' "', line.strip(), 1), - "')", - "'\"", - 1, - ).strip("'") - for line in rowlist - ] - ) - flux = io.StringIO(content) - df = pd.read_csv(flux, sep=r"\s+", doublequote=True, names=["_smiles", "ID", "reasons"]) - df["ID"] = pd.to_numeric(df["ID"]) - df["reasons"] = df["reasons"].apply(lambda x: x.strip("'") if x and isinstance(x, str) else x) - return df - - -def run_cmd(cmd, shell=False): - """Run command""" - res = subprocess.run(cmd, capture_output=True, shell=shell, check=False) - if res.returncode != 0: - print("".join(res.stderr.decode("utf-8"))) - print(" ".join(cmd)) - res.check_returncode() - return res - - -def batch_score( - smiles_list: List, - n_jobs: Optional[int] = None, - batch_size: Optional[int] = 5_000, - progress: bool = False, - **run_options, -): - """Run scorer on input smile list in batch - - Args: - smiles_list: list of smiles - n_jobs: Number of jobs to run in parallel. - batch_size: Optional batch_size to run the the scoring in parallels. - progress: Whether to show progress bar. - run_options: Run options to pass to the underlining score function - - Returns: - out_df (pd.DataFrame): Dataframe containing the smiles and computed properties: - (rejected, demerit_score, reason, step) - """ - n_splits = max(1, int(np.ceil(len(smiles_list) / batch_size))) - if n_jobs is not None and n_splits > 1: - smiles_batch_list = np.array_split(smiles_list, n_splits) - smiles_batch = [dict(smiles_list=list(smlist), **run_options) for smlist in smiles_batch_list] - # EN: cannot run this code in processes or loky mode - output = dm.parallelized( - score, - smiles_batch, - n_jobs=n_jobs, - progress=progress, - scheduler="threads", - arg_type="kwargs", - ) - cur_len = 0 - for sm_list, df in zip(smiles_batch_list, output): - df["ID"] += cur_len - cur_len += len(sm_list) - return pd.concat(output, ignore_index=True) - return score(smiles_list, **run_options) - - -def score( - smiles_list: List, - mc_first_pass_options: Optional[str] = "", - iwd_options: Optional[str] = "", - stop_after_step: Optional[int] = 3, - **run_options, -): - """Run scorer on input smile list: - - Args: - smiles_list: list of smiles - mc_first_pass_options: Initial options to pass to mc_first_pass - iwd_options: Initial options to pass to iwdemerit - stop_after_step: Where to stop in the pipeline. Don't change this if you don't know. - run_options: Additional option to run the pipeline - - Returns: - out_df (pd.DataFrame): Dataframe containing the smiles and computed properties: - (rejected, demerit_score, reason, step) - """ - - extra_iwdemerit_options = "" - demerit_cutoff = run_options.get("dthresh", None) - soft_upper_atom = run_options.get("soft_max_atoms", 30) - hard_upper_atom = run_options.get("hard_max_atoms", 50) - max_size_rings = run_options.get("max_size_rings") - min_num_rings = run_options.get("min_num_rings") - max_num_rings = run_options.get("max_num_rings") - max_size_chain = run_options.get("max_size_chain") - atom_count = run_options.get("min_atoms", 1) - allow_non_int_atoms = run_options.get("allow_non_interesting", False) - - ring_bond_ratio = run_options.get("ring_bond_ratio", -1) - okiso = run_options.get("okiso", False) - if not okiso: - mc_first_pass_options += " -I 0 " - if min_num_rings: - mc_first_pass_options += f"-r {min_num_rings} " - if max_num_rings: - mc_first_pass_options += f"-R {max_num_rings} " - if max_size_rings: - mc_first_pass_options += f"-Z {max_size_rings} " - extra_iwdemerit_options += f" -Z {max_size_rings} " - if max_size_chain: - extra_iwdemerit_options += f" -z {max_size_chain} " - - if allow_non_int_atoms: - mc_first_pass_options += "-k " - mc_first_pass_options += " -A I -A ipp" - - query_files = ["reject1", "reject2", "demerits"] - for i, query_file in enumerate(query_files): - query_files[i] = str(importlib_resources.files("medchem.data.queries").joinpath(query_file)) - - # output file dir - files_to_be_deleted = [] - run_id = str(uuid.uuid4())[:8] - bad_file_dir = tempfile.mkdtemp(suffix=f"_lilly_{run_id}") - files_to_be_deleted.append(bad_file_dir) - bad_file_0 = os.path.join(bad_file_dir, "bad0") - bad_file_1 = os.path.join(bad_file_dir, "bad1") - bad_file_2 = os.path.join(bad_file_dir, "bad2") - bad_file_3 = os.path.join(bad_file_dir, "bad3") - mc_pass_out = os.path.join(bad_file_dir, "mc_pass.smi") - tsub_out_1 = os.path.join(bad_file_dir, "tsub1.smi") - tsub_out_2 = os.path.join(bad_file_dir, "tsub2.smi") - iwd_out = os.path.join(bad_file_dir, "iwd.smi") - - # optional_queries - optional_queries = "" - optional_queries += " -q ".join(run_options.get("rej_queries", [])) - optional_queries += " -s ".join(run_options.get("smarts", [])) - - # extra iwdemerit options - nodemerit = run_options.get("nodemerit", False) - - if nodemerit or soft_upper_atom is None: - soft_upper_atom = hard_upper_atom - 1 - - if hard_upper_atom < soft_upper_atom: - hard_upper_atom = soft_upper_atom + 1 - - if demerit_cutoff: - extra_iwdemerit_options += f" -f {demerit_cutoff} " - - if nodemerit: - extra_iwdemerit_options += " -r " - - if iwd_options: - extra_iwdemerit_options += " " + iwd_options - - charge_assigner_path = str(importlib_resources.files("medchem.data.charge_assigner").joinpath("queries")) - extra_iwdemerit_options += " -N F:" + charge_assigner_path - - odm = run_options.get("odm", []) - - if odm: - odm_patterns = [re.compile(odm_p, re.I) for odm_p in odm] - with open(query_files[2]) as QRY_IN: - current_queries = [qry.strip() for qry in QRY_IN] - current_queries = [ - qry for qry in current_queries if not any(odm_p.search(qry) for odm_p in odm_patterns) - ] - - with tempfile.NamedTemporaryFile(mode="w+t", suffix=".qry", delete=False) as tmp_file: - tmp_file.write("\n".join(current_queries)) - query_files[2] = tmp_file.name - files_to_be_deleted.append(tmp_file.name) - - smiles_file = None - with tempfile.NamedTemporaryFile( - mode="w+t", suffix=f"_lilly_{run_id}.smi", delete=False - ) as smiles_tmp_files: - smiles_tmp_files.write( - "\n".join([f"{sm.strip().split()[0]}\t{i}" for i, sm in enumerate(smiles_list)]) - ) - smiles_file = smiles_tmp_files.name - files_to_be_deleted.append(smiles_file) - - cmd = [BIN2PATH["mc_first_pass"]] - if ring_bond_ratio >= 0: - cmd.extend(["-b", str(ring_bond_ratio)]) - if mc_first_pass_options: - cmd.extend(mc_first_pass_options.split()) - cmd.extend(["-c", str(atom_count), "-C", str(hard_upper_atom)]) - cmd.extend("-E autocreate -o smi -V -g all -g ltltr -i ICTE".split()) - cmd.extend(["-L", bad_file_0, "-K", "TP1"]) - cmd.extend(["-a", "-u", "-S", mc_pass_out, smiles_file]) - out = [] - out.append(run_cmd(cmd)) - if stop_after_step >= 1: - cmd = [] - cmd.extend((BIN2PATH["tsubstructure"] + " -E autocreate -b -u -i smi -o smi -A D ").split()) - cmd.extend(("-m " + bad_file_1 + " -m QDT").split()) - cmd.extend((f"-n {tsub_out_1} -q F:" + query_files[0] + optional_queries + f" {mc_pass_out}").split()) - out.append(run_cmd(cmd)) - if stop_after_step >= 2: - cmd = [] - cmd.extend((BIN2PATH["tsubstructure"] + " -A D -E autocreate -b -u -i smi -o smi ").split()) - cmd.extend(("-m " + bad_file_2 + " -m QDT").split()) - cmd.extend((f"-n {tsub_out_2} -q F:" + query_files[1] + f" {tsub_out_1}").split()) - out.append(run_cmd(cmd)) - - if stop_after_step >= 3: - cmd = [] - cmd.extend( - ( - BIN2PATH["iwdemerit"] - + " -u -k -x -t " - + extra_iwdemerit_options - + " -E autocreate -A D -i smi -o smi -q F:" - + query_files[2] - ).split() - ) - cmd.extend(f"-R {bad_file_3}".split()) - cmd.extend(f"-G {iwd_out} -c smax={soft_upper_atom} -c hmax={hard_upper_atom} {tsub_out_2}".split()) - out.append(run_cmd(cmd)) - - data_list = [] - for i, bad_file in enumerate([bad_file_0, bad_file_1, bad_file_2]): - with open(bad_file + ".smi") as IN: - df_bad = _parse_output(IN) - df_bad["step"] = i + 1 - df_bad["rejected"] = True - data_list.append(df_bad) - - demerit_extractor = re.compile(r"'([A-Za-z0-9_\s]+)'") - for dt_file, rej in [(bad_file_3 + ".smi", True), (iwd_out, False)]: - parseable = [] - demerit_scores = [] - with open(dt_file) as IN: - for row in IN: - in_string, *demerit_string = row.split(" : ") - in_string = in_string.strip() - demerit_score = 0 - if not demerit_string: - in_string += ' ""' - else: - demerit_string = str(demerit_string[0]).strip() - try: - demerit_score = int(re.match(r"D\(([0-9]+)\)", demerit_string).group(1)) - except: - pass - tmp = demerit_extractor.findall(row) - demerit_string = ",".join([":".join(reversed(l.split())) for l in tmp]) - in_string += " " + demerit_string - parseable.append(in_string) - demerit_scores.append(demerit_score) - df = _parse_output(parseable) - df["rejected"] = rej - df["step"] = i + 1 - df["demerit_score"] = demerit_scores - data_list.append(df) - i += 1 - final_df = pd.concat(data_list).sort_values("ID").reset_index(drop=True) - # Postprocessing - final_df["status"] = final_df["rejected"].apply(lambda x: "Exclude" if x else "Ok") - final_df.loc[((final_df.demerit_score > 0) & (~final_df.rejected)), "status"] = "Flag" - # clean - for to_del in files_to_be_deleted: - if os.path.isfile(to_del): - os.remove(to_del) - else: - try: - shutil.rmtree(to_del) - except: - pass - return final_df diff --git a/mkdocs.yml b/mkdocs.yml index 3b92faa..67f5971 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -16,6 +16,7 @@ nav: - Overview: index.md - Tutorials: - Medchem Rules: tutorials/Medchem_Rules.ipynb + - Structural Filters: tutorials/Structural_Filters.ipynb - Catalogs: tutorials/Catalogs.ipynb - Chemical Groups: tutorials/Chemical_Groups.ipynb - Medchem Query Language: tutorials/Medchem_Query_Language.ipynb @@ -23,6 +24,7 @@ nav: - Constraints Filtering: tutorials/Constraints_Filtering.ipynb - API: - medchem.rules: api/medchem.rules.md + - medchem.structural: api/medchem.structural.md - medchem.catalogs: api/medchem.catalogs.md - medchem.complexity: api/medchem.complexity.md - medchem.groups: api/medchem.groups.md diff --git a/tests/test_rules.py b/tests/test_rules.py index e13a625..f93e71c 100644 --- a/tests/test_rules.py +++ b/tests/test_rules.py @@ -162,9 +162,9 @@ def test_rule_filters_invalid(): rfilter = mc.rules.RuleFilters(rule_list=["rule_of_five"]) with pytest.raises(ValueError): - rfilter(mols=[None, "CCCCO"], fail_on_error=True) + rfilter(mols=[None, "CCCCO"], fail_if_invalid=True) - results = rfilter(mols=[None, "CCCCO"], fail_on_error=False) + results = rfilter(mols=[None, "CCCCO"], fail_if_invalid=False) assert results["mol"].isnull().sum() == 1 assert pd.isna(results.iloc[0]["pass_all"]) diff --git a/tests/test_structural.py b/tests/test_structural.py new file mode 100644 index 0000000..e68489e --- /dev/null +++ b/tests/test_structural.py @@ -0,0 +1,41 @@ +import medchem as mc +import datamol as dm + + +def test_common_alerts(): + alerts = mc.structural.CommonAlerts() + + data = dm.data.solubility() + data = data.iloc[:50] + + results = alerts(mols=data["mol"].tolist(), n_jobs=-1, scheduler="auto") + + assert results["pass_filter"].sum() == 29 + assert results["reasons"].unique().tolist() == [ + None, + "Aliphatic long chain", + "isolated alkene", + "Aliphatic long chain;isolated alkene", + "I1 Aliphatic methylene chains 7 or more long;Aliphatic long chain;isolated alkene", + "polyene", + "triple bond", + "Aliphatic long chain;triple bond", + "I1 Aliphatic methylene chains 7 or more long;Aliphatic long chain;triple bond", + ] + + assert results.columns.tolist() == ["mol", "pass_filter", "status", "reasons"] + + +def test_common_alerts_invalid(): + alerts = mc.structural.CommonAlerts() + + results = alerts(mols=[None, "CC9888", "CCCCO"]) + + assert results["mol"].isnull().sum() == 2 + assert results.shape == (3, 4) + assert results["reasons"].tolist() == ["invalid", "invalid", None] + + +def test_common_alerts_list(): + l = mc.structural.CommonAlerts.list_default_available_alerts() + assert l.columns.tolist() == ["rule_set_name", "smarts", "catalog_description", "rule_set", "source"] From f6ca33f1d05f2984e05b7ed1e16e450f30f2d844 Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Fri, 7 Jul 2023 13:23:12 -0400 Subject: [PATCH 15/31] rename to CommonAlertsFilters --- docs/api/medchem.structural.md | 2 +- docs/tutorials/Structural_Filters.ipynb | 8 +- medchem/structural/__init__.py | 2 +- medchem/structural/_common.py | 2 +- medchem/structural/_nibr.py | 220 ++++++++++++------------ tests/test_structural.py | 6 +- 6 files changed, 120 insertions(+), 120 deletions(-) diff --git a/docs/api/medchem.structural.md b/docs/api/medchem.structural.md index a59c58c..b0bea4d 100644 --- a/docs/api/medchem.structural.md +++ b/docs/api/medchem.structural.md @@ -1,3 +1,3 @@ # `medchem.structural` -::: medchem.structural.CommonAlerts +::: medchem.structural.CommonAlertsFilters diff --git a/docs/tutorials/Structural_Filters.ipynb b/docs/tutorials/Structural_Filters.ipynb index 51da51b..1d080ac 100644 --- a/docs/tutorials/Structural_Filters.ipynb +++ b/docs/tutorials/Structural_Filters.ipynb @@ -321,7 +321,7 @@ } ], "source": [ - "mc.structural.CommonAlerts.list_default_available_alerts()" + "mc.structural.CommonAlertsFilters.list_default_available_alerts()" ] }, { @@ -329,7 +329,7 @@ "id": "6abce913-3561-4c7f-b4a0-82f64707ee3c", "metadata": {}, "source": [ - "Create a `CommonAlerts` object in order to filter a list of molecules." + "Create a `CommonAlertsFilters` object in order to filter a list of molecules." ] }, { @@ -339,7 +339,7 @@ "metadata": {}, "outputs": [], "source": [ - "alerts = mc.structural.CommonAlerts()" + "alerts = mc.structural.CommonAlertsFilters()" ] }, { @@ -357,7 +357,7 @@ "metadata": {}, "outputs": [], "source": [ - "alerts2 = mc.structural.CommonAlerts(alerts_set=[\"LINT\", \"Toxicophore\"])" + "alerts2 = mc.structural.CommonAlertsFilters(alerts_set=[\"LINT\", \"Toxicophore\"])" ] }, { diff --git a/medchem/structural/__init__.py b/medchem/structural/__init__.py index 27c72a1..e7552f7 100644 --- a/medchem/structural/__init__.py +++ b/medchem/structural/__init__.py @@ -1 +1 @@ -from ._common import CommonAlerts +from ._common import CommonAlertsFilters diff --git a/medchem/structural/_common.py b/medchem/structural/_common.py index 5636e21..4faaa6e 100644 --- a/medchem/structural/_common.py +++ b/medchem/structural/_common.py @@ -14,7 +14,7 @@ from medchem.utils.loader import get_data_path -class CommonAlerts: +class CommonAlertsFilters: """Filtering class for building a library based on a list of structural alerts To list the available alerts, use the `list_default_available_alerts` method. diff --git a/medchem/structural/_nibr.py b/medchem/structural/_nibr.py index fc483dc..01bef08 100644 --- a/medchem/structural/_nibr.py +++ b/medchem/structural/_nibr.py @@ -1,121 +1,121 @@ -# from typing import Iterable -# from typing import List -# from typing import Optional -# from typing import Union +from typing import Iterable +from typing import List +from typing import Optional +from typing import Union -# import os -# import copy -# import functools -# import pandas as pd -# import datamol as dm +import os +import copy +import functools +import pandas as pd +import datamol as dm -# from tqdm.auto import tqdm -# from loguru import logger -# from rdkit.Chem import rdchem -# from rdkit.Chem.Descriptors import MolWt, MolLogP, NumHDonors, NumHAcceptors, TPSA -# from medchem.utils.loader import get_data_path -# from medchem.catalog import NamedCatalogs +from tqdm.auto import tqdm +from loguru import logger +from rdkit.Chem import rdchem +from rdkit.Chem.Descriptors import MolWt, MolLogP, NumHDonors, NumHAcceptors, TPSA +from medchem.utils.loader import get_data_path +from medchem.catalog import NamedCatalogs -# class NovartisFilters: -# """Filtering class for building a screening deck following the novartis filtering process -# published in https://dx.doi.org/10.1021/acs.jmedchem.0c01332. +class NovartisFilters: + """Filtering class for building a screening deck following the novartis filtering process + published in https://dx.doi.org/10.1021/acs.jmedchem.0c01332. -# The output of the filter are explained below: -# - **status**: one of `["Exclude", "Flag", "Annotations", "Ok"]` (ordered by quality). -# Generally, you can keep anything without the "Exclude" label, as long as you also apply -# a maximum severity score for compounds that collects too many flags. -# - **covalent**: number of potentially covalent motifs contained in the compound -# - **severity**: how severe are the issues with the molecules: -# - `0`: compound has no flags, might have annotations; -# - `1-9`: number of flags the compound raises; -# - `>= 10`: default exclusion criterion used in the paper -# - **special_mol**: whether the compound/parts of the compound belongs to a special class of molecules -# (e.g peptides, glycosides, fatty acid). In that case, you should review the rejection reasons. -# """ + The output of the filter are explained below: + - **status**: one of `["Exclude", "Flag", "Annotations", "Ok"]` (ordered by quality). + Generally, you can keep anything without the "Exclude" label, as long as you also apply + a maximum severity score for compounds that collects too many flags. + - **covalent**: number of potentially covalent motifs contained in the compound + - **severity**: how severe are the issues with the molecules: + - `0`: compound has no flags, might have annotations; + - `1-9`: number of flags the compound raises; + - `>= 10`: default exclusion criterion used in the paper + - **special_mol**: whether the compound/parts of the compound belongs to a special class of molecules + (e.g peptides, glycosides, fatty acid). In that case, you should review the rejection reasons. + """ -# def __call__( -# self, -# mols: Iterable[Union[str, rdchem.Mol]], -# n_jobs: Optional[int] = None, -# progress: bool = False, -# ): -# """Run alert evaluation on this list of molecule and return the full dataframe + def __call__( + self, + mols: Iterable[Union[str, rdchem.Mol]], + n_jobs: Optional[int] = None, + progress: bool = False, + ): + """Run alert evaluation on this list of molecule and return the full dataframe -# Args: -# mols: input list of molecules -# n_jobs: number of jobs -# progress: whether to show progress or not -# """ + Args: + mols: input list of molecules + n_jobs: number of jobs + progress: whether to show progress or not + """ -# catalog = NamedCatalogs.nibr() -# if n_jobs is not None: -# if isinstance(mols[0], str): -# mols = dm.parallelized(dm.to_mol, mols, n_jobs=n_jobs, progress=progress) -# matches = dm.parallelized( -# catalog.GetMatches, -# mols, -# n_jobs=n_jobs, -# progress=progress, -# scheduler="threads", -# ) -# else: -# mols = [dm.to_mol(x) if isinstance(x, str) else x for x in mols] -# iter_mols = mols -# if progress: -# iter_mols = tqdm(mols) -# matches = [catalog.GetMatches(mol) for mol in iter_mols] + catalog = NamedCatalogs.nibr() + if n_jobs is not None: + if isinstance(mols[0], str): + mols = dm.parallelized(dm.to_mol, mols, n_jobs=n_jobs, progress=progress) + matches = dm.parallelized( + catalog.GetMatches, + mols, + n_jobs=n_jobs, + progress=progress, + scheduler="threads", + ) + else: + mols = [dm.to_mol(x) if isinstance(x, str) else x for x in mols] + iter_mols = mols + if progress: + iter_mols = tqdm(mols) + matches = [catalog.GetMatches(mol) for mol in iter_mols] -# results = [] -# for i, (mol, entries) in enumerate(zip(mols, matches)): -# status = "Ok" -# smiles = None -# reasons = None -# co = None -# sm = None -# sc = 0 -# try: -# smiles = dm.to_smiles(mol) -# if len(list(entries)): -# # initialize empty lists -# names, severity, covalent, special_mol = ([] for _ in range(4)) -# # get the matches -# for entry in entries: -# pname = entry.GetDescription() -# _, name, sev, cov, m = pname.split("||") -# names.append(name) -# severity.append(int(sev)) -# covalent.append(int(cov)) -# special_mol.append(int(m)) -# # concatenate all matching filters -# reasons = "; ".join(names) -# # severity of 2 means EXCLUDE -# if severity.count(2): -# sc = 10 -# status = "Exclude" -# else: -# sc = sum(severity) -# if severity.count(1): -# status = "Flag" -# elif severity.count(0): -# status = "Annotations" -# # get number of covalent flags and special molecule flags -# co = sum(covalent) -# sm = sum(special_mol) -# except Exception as e: -# logger.warning(f"Fail on molecule at index {i}") + results = [] + for i, (mol, entries) in enumerate(zip(mols, matches)): + status = "Ok" + smiles = None + reasons = None + co = None + sm = None + sc = 0 + try: + smiles = dm.to_smiles(mol) + if len(list(entries)): + # initialize empty lists + names, severity, covalent, special_mol = ([] for _ in range(4)) + # get the matches + for entry in entries: + pname = entry.GetDescription() + _, name, sev, cov, m = pname.split("||") + names.append(name) + severity.append(int(sev)) + covalent.append(int(cov)) + special_mol.append(int(m)) + # concatenate all matching filters + reasons = "; ".join(names) + # severity of 2 means EXCLUDE + if severity.count(2): + sc = 10 + status = "Exclude" + else: + sc = sum(severity) + if severity.count(1): + status = "Flag" + elif severity.count(0): + status = "Annotations" + # get number of covalent flags and special molecule flags + co = sum(covalent) + sm = sum(special_mol) + except Exception as e: + logger.warning(f"Fail on molecule at index {i}") -# results.append([smiles, status, reasons, sc, co, sm]) -# df = pd.DataFrame( -# results, -# columns=[ -# "_smiles", -# "status", -# "reasons", -# "severity", -# "covalent", -# "special_mol", -# ], -# ) -# return df + results.append([smiles, status, reasons, sc, co, sm]) + df = pd.DataFrame( + results, + columns=[ + "_smiles", + "status", + "reasons", + "severity", + "covalent", + "special_mol", + ], + ) + return df diff --git a/tests/test_structural.py b/tests/test_structural.py index e68489e..95700e0 100644 --- a/tests/test_structural.py +++ b/tests/test_structural.py @@ -3,7 +3,7 @@ def test_common_alerts(): - alerts = mc.structural.CommonAlerts() + alerts = mc.structural.CommonAlertsFilters() data = dm.data.solubility() data = data.iloc[:50] @@ -27,7 +27,7 @@ def test_common_alerts(): def test_common_alerts_invalid(): - alerts = mc.structural.CommonAlerts() + alerts = mc.structural.CommonAlertsFilters() results = alerts(mols=[None, "CC9888", "CCCCO"]) @@ -37,5 +37,5 @@ def test_common_alerts_invalid(): def test_common_alerts_list(): - l = mc.structural.CommonAlerts.list_default_available_alerts() + l = mc.structural.CommonAlertsFilters.list_default_available_alerts() assert l.columns.tolist() == ["rule_set_name", "smarts", "catalog_description", "rule_set", "source"] From 1bc55aa1f11183d62e5191ad7bb6927311daabaa Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Fri, 7 Jul 2023 13:55:06 -0400 Subject: [PATCH 16/31] nibr filters done --- docs/api/medchem.structural.md | 1 + docs/tutorials/Structural_Filters.ipynb | 1195 ++++++++++++++++++++++- medchem/structural/__init__.py | 1 + medchem/structural/_common.py | 4 +- medchem/structural/_nibr.py | 216 ++-- tests/test_structural.py | 42 +- 6 files changed, 1344 insertions(+), 115 deletions(-) diff --git a/docs/api/medchem.structural.md b/docs/api/medchem.structural.md index b0bea4d..0aff512 100644 --- a/docs/api/medchem.structural.md +++ b/docs/api/medchem.structural.md @@ -1,3 +1,4 @@ # `medchem.structural` ::: medchem.structural.CommonAlertsFilters +::: medchem.structural.NIBRFilters diff --git a/docs/tutorials/Structural_Filters.ipynb b/docs/tutorials/Structural_Filters.ipynb index 1d080ac..c81cd97 100644 --- a/docs/tutorials/Structural_Filters.ipynb +++ b/docs/tutorials/Structural_Filters.ipynb @@ -42,7 +42,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 2, "id": "5da49903-e7c6-41fd-9317-e2a91d0a8607", "metadata": {}, "outputs": [ @@ -315,7 +315,7 @@ "22 General Toxicophores 23 Litterature " ] }, - "execution_count": 41, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -334,7 +334,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 3, "id": "6f062f99-c5f5-4a38-b832-c91330d44952", "metadata": {}, "outputs": [], @@ -352,7 +352,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 4, "id": "d68f8702-9802-4366-a2bd-137a829aeb0b", "metadata": {}, "outputs": [], @@ -370,7 +370,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 5, "id": "5ee1de74-cf67-4332-8e55-e6acb8008e27", "metadata": {}, "outputs": [ @@ -697,7 +697,7 @@ "" ] }, - "execution_count": 47, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -720,14 +720,14 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 6, "id": "cc0241ea-efa0-438b-be43-15e248992e4d", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bf1d1e58bb3e4875851ad1d22a4332c4", + "model_id": "9b093496d1284e1ba0323073339e4bb0", "version_major": 2, "version_minor": 0 }, @@ -768,35 +768,35 @@ " \n", " \n", " 0\n", - " <rdkit.Chem.rdchem.Mol object at 0x7f6bce5471b0>\n", + " <rdkit.Chem.rdchem.Mol object at 0x7f4e549e5690>\n", " True\n", " ok\n", " None\n", " \n", " \n", " 1\n", - " <rdkit.Chem.rdchem.Mol object at 0x7f6bce297b50>\n", + " <rdkit.Chem.rdchem.Mol object at 0x7f4e53fc5d20>\n", " False\n", " exclude\n", " Polycyclic aromatic hydrocarbon\n", " \n", " \n", " 2\n", - " <rdkit.Chem.rdchem.Mol object at 0x7f6bce087840>\n", + " <rdkit.Chem.rdchem.Mol object at 0x7f4e549ccba0>\n", " False\n", " exclude\n", " aniline\n", " \n", " \n", " 3\n", - " <rdkit.Chem.rdchem.Mol object at 0x7f6bce2a0eb0>\n", + " <rdkit.Chem.rdchem.Mol object at 0x7f4e549ce8f0>\n", " True\n", " ok\n", " None\n", " \n", " \n", " 4\n", - " <rdkit.Chem.rdchem.Mol object at 0x7f6bce25d620>\n", + " <rdkit.Chem.rdchem.Mol object at 0x7f4e549b9ee0>\n", " True\n", " ok\n", " None\n", @@ -807,11 +807,11 @@ ], "text/plain": [ " mol pass_filter status \\\n", - "0 True ok \n", - "1 False exclude \n", - "2 False exclude \n", - "3 True ok \n", - "4 True ok \n", + "0 True ok \n", + "1 False exclude \n", + "2 False exclude \n", + "3 True ok \n", + "4 True ok \n", "\n", " reasons \n", "0 None \n", @@ -821,7 +821,7 @@ "4 None " ] }, - "execution_count": 48, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -848,7 +848,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 7, "id": "11f2e6e3-9d3a-4eb8-a9e6-d8d85620335f", "metadata": {}, "outputs": [ @@ -1431,7 +1431,7 @@ "" ] }, - "execution_count": 54, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -1455,13 +1455,1160 @@ "## NIBR Filters" ] }, + { + "cell_type": "markdown", + "id": "b5f7b9ba-4d06-4384-9a59-a365a8e5da7e", + "metadata": {}, + "source": [ + "Load the NIBR filters." + ] + }, { "cell_type": "code", - "execution_count": null, - "id": "ad7d822b-0e98-477f-acdf-552de7396d58", + "execution_count": 11, + "id": "b681254a-43d5-412e-ab88-d2398e2dc1a8", "metadata": {}, "outputs": [], - "source": [] + "source": [ + "nibr_filters = mc.structural.NIBRFilters()" + ] + }, + { + "cell_type": "markdown", + "id": "7f45f602-9e39-431a-9b82-bca822ca2fde", + "metadata": {}, + "source": [ + "Let's load a few molecules." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "ae8117aa-308e-4c6f-930c-c5d3534f8345", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Load a dataset\n", + "data = dm.data.solubility()\n", + "data = data.sample(50, random_state=20)\n", + "\n", + "dm.to_image(data.iloc[:8][\"mol\"].tolist(), mol_size=(300, 250))" + ] + }, + { + "cell_type": "markdown", + "id": "307b8917-901d-42e0-b394-fb98a5204338", + "metadata": {}, + "source": [ + "Apply the filters on the list of molecules." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "b48e1f43-a938-472f-acdc-053da01dd777", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "af8fe9ac4bb1477a8c8aff109419fdf4", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "NIBR filtering: 0%| | 0/50 [00:00\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
molreasonsseveritystatusn_covalent_motifspecial_molpass_filterdetails
0<rdkit.Chem.rdchem.Mol object at 0x7f4e517642e0>ketals _or_acetals_min(1); steroid_non_arom_mi...10exclude02False{'name': {0: 'ketals _or_acetals_min(1)', 1: '...
1<rdkit.Chem.rdchem.Mol object at 0x7f4e515b71b0>polycyclic_systems_14_atoms_min(1)0annotations01True{'name': {0: 'polycyclic_systems_14_atoms_min(...
2<rdkit.Chem.rdchem.Mol object at 0x7f4e5176e030>None0ok00TrueNaN
3<rdkit.Chem.rdchem.Mol object at 0x7f4e5176c3c0>None0ok00TrueNaN
4<rdkit.Chem.rdchem.Mol object at 0x7f4e515bcb30>None0ok00TrueNaN
\n", + "" + ], + "text/plain": [ + " mol \\\n", + "0 \n", + "1 \n", + "2 \n", + "3 \n", + "4 \n", + "\n", + " reasons severity status \\\n", + "0 ketals _or_acetals_min(1); steroid_non_arom_mi... 10 exclude \n", + "1 polycyclic_systems_14_atoms_min(1) 0 annotations \n", + "2 None 0 ok \n", + "3 None 0 ok \n", + "4 None 0 ok \n", + "\n", + " n_covalent_motif special_mol pass_filter \\\n", + "0 0 2 False \n", + "1 0 1 True \n", + "2 0 0 True \n", + "3 0 0 True \n", + "4 0 0 True \n", + "\n", + " details \n", + "0 {'name': {0: 'ketals _or_acetals_min(1)', 1: '... \n", + "1 {'name': {0: 'polycyclic_systems_14_atoms_min(... \n", + "2 NaN \n", + "3 NaN \n", + "4 NaN " + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results = nibr_filters(\n", + " mols=data[\"mol\"].tolist(),\n", + " n_jobs=-1,\n", + " progress=True,\n", + " progress_leave=True,\n", + " scheduler=\"auto\",\n", + " keep_details=True,\n", + ")\n", + "\n", + "results.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "925de10b-2346-4549-85d6-67be42f47ec4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['mol',\n", + " 'reasons',\n", + " 'severity',\n", + " 'status',\n", + " 'n_covalent_motif',\n", + " 'special_mol',\n", + " 'pass_filter',\n", + " 'details']" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results.columns.tolist()" + ] + }, + { + "cell_type": "markdown", + "id": "6a00e464-e0c1-47a4-bc2d-f7145e0db2fe", + "metadata": {}, + "source": [ + "Display the results." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "a241580b-d84d-4657-a764-49f65deb2db0", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rows = results.iloc[:8]\n", + "\n", + "mols = rows[\"mol\"].iloc[:8].tolist()\n", + "legends = (\n", + " rows[[\"pass_filter\", \"status\"]].apply(lambda x: f\"pass_filter={x[0]} - status={x[1]}\", axis=1).tolist()\n", + ")\n", + "\n", + "dm.to_image(mols, legends=legends, mol_size=(300, 250))" + ] }, { "cell_type": "markdown", diff --git a/medchem/structural/__init__.py b/medchem/structural/__init__.py index e7552f7..464a513 100644 --- a/medchem/structural/__init__.py +++ b/medchem/structural/__init__.py @@ -1 +1,2 @@ from ._common import CommonAlertsFilters +from ._nibr import NIBRFilters diff --git a/medchem/structural/_common.py b/medchem/structural/_common.py index 4faaa6e..25a2007 100644 --- a/medchem/structural/_common.py +++ b/medchem/structural/_common.py @@ -93,7 +93,7 @@ def list_default_available_alerts(): return rule_list - def evaluate(self, mol: Union[str, dm.Mol]): + def _evaluate(self, mol: Union[str, dm.Mol]): """ Evaluate structure alerts on a molecule @@ -164,7 +164,7 @@ def __call__( scheduler = "threads" results = dm.parallelized( - self.evaluate, + self._evaluate, mols, progress=progress, n_jobs=n_jobs, diff --git a/medchem/structural/_nibr.py b/medchem/structural/_nibr.py index 01bef08..c832806 100644 --- a/medchem/structural/_nibr.py +++ b/medchem/structural/_nibr.py @@ -1,31 +1,24 @@ -from typing import Iterable -from typing import List +from typing import Sequence from typing import Optional from typing import Union -import os -import copy import functools + import pandas as pd import datamol as dm -from tqdm.auto import tqdm -from loguru import logger -from rdkit.Chem import rdchem -from rdkit.Chem.Descriptors import MolWt, MolLogP, NumHDonors, NumHAcceptors, TPSA -from medchem.utils.loader import get_data_path -from medchem.catalog import NamedCatalogs +from medchem.catalogs import NamedCatalogs -class NovartisFilters: +class NIBRFilters: """Filtering class for building a screening deck following the novartis filtering process published in https://dx.doi.org/10.1021/acs.jmedchem.0c01332. The output of the filter are explained below: - - **status**: one of `["Exclude", "Flag", "Annotations", "Ok"]` (ordered by quality). - Generally, you can keep anything without the "Exclude" label, as long as you also apply + - **status**: one of `["exclude", "flag", "annotations", "ok"]` (ordered by quality). + Generally, you can keep anything without the "exclude" label, as long as you also apply a maximum severity score for compounds that collects too many flags. - - **covalent**: number of potentially covalent motifs contained in the compound + - **n_covalent_motif**: number of potentially covalent motifs contained in the compound - **severity**: how severe are the issues with the molecules: - `0`: compound has no flags, might have annotations; - `1-9`: number of flags the compound raises; @@ -34,88 +27,135 @@ class NovartisFilters: (e.g peptides, glycosides, fatty acid). In that case, you should review the rejection reasons. """ + def __init__(self): + self.catalog = NamedCatalogs.nibr() + + def _evaluate( + self, + mol: Union[str, dm.Mol], + keep_details: bool = False, + ): + """Evaluate one molecule.""" + + if isinstance(mol, str): + with dm.without_rdkit_log(): + _mol = dm.to_mol(mol) + else: + _mol = mol + + if _mol is None: + return pd.Series( + { + "mol": _mol, + "pass_filter": False, + "reasons": "invalid", + "severity": 0, + "status": "exclude", + "n_covalent_motif": 0, + "special_mol": 0, + } + ) + + # Get the matches + entries = self.catalog.GetMatches(_mol) + + if len(entries) == 0: + return pd.Series( + { + "mol": _mol, + "pass_filter": True, + "reasons": None, + "severity": 0, + "status": "ok", + "n_covalent_motif": 0, + "special_mol": 0, + } + ) + + result = pd.Series() + result["mol"] = _mol + + # Iterate over all the matchign entries + result_entries = [] + for entry in entries: + pname = entry.GetDescription() + _, name, severity, n_covalent_motif, special_mol = pname.split("||") + + result_entry = {} + result_entry["name"] = name + result_entry["severity"] = int(severity) + result_entry["n_covalent_motif"] = int(n_covalent_motif) + result_entry["special_mol"] = bool(special_mol) + result_entries.append(result_entry) + + result_entries = pd.DataFrame(result_entries) + + # Now build a flat result from the detailed results per entries + + result["reasons"] = "; ".join(result_entries["name"].tolist()) + + # severity of 2 means EXCLUDE + if 2 in result_entries["severity"].values: + result["severity"] = 10 + result["status"] = "exclude" + else: + result["severity"] = result_entries["severity"].sum() + + if 1 in result_entries["severity"].values: + result["status"] = "flag" + elif 0 in result_entries["severity"].values: + result["status"] = "annotations" + + # get number of covalent flags and special molecule flags + result["n_covalent_motif"] = result_entries["n_covalent_motif"].sum() + result["special_mol"] = result_entries["special_mol"].sum() + + if result["status"] == "exclude": + result["pass_filter"] = False + else: + result["pass_filter"] = True + + if keep_details: + result["details"] = result_entries.to_dict() + + return result + def __call__( self, - mols: Iterable[Union[str, rdchem.Mol]], - n_jobs: Optional[int] = None, + mols: Sequence[Union[str, dm.Mol]], + n_jobs: Optional[int] = -1, progress: bool = False, + progress_leave: bool = False, + scheduler: str = "auto", + keep_details: bool = False, ): """Run alert evaluation on this list of molecule and return the full dataframe Args: - mols: input list of molecules - n_jobs: number of jobs - progress: whether to show progress or not + mols: list of input molecule object. + n_jobs: number of jobs to run in parallel. + progress: whether to show progress or not. + progress_leave: whether to leave the progress bar or not. + scheduler: which scheduler to use. If "auto", will use "processes" if `len(mols) > 500` else "threads". """ - catalog = NamedCatalogs.nibr() - if n_jobs is not None: - if isinstance(mols[0], str): - mols = dm.parallelized(dm.to_mol, mols, n_jobs=n_jobs, progress=progress) - matches = dm.parallelized( - catalog.GetMatches, - mols, - n_jobs=n_jobs, - progress=progress, - scheduler="threads", - ) - else: - mols = [dm.to_mol(x) if isinstance(x, str) else x for x in mols] - iter_mols = mols - if progress: - iter_mols = tqdm(mols) - matches = [catalog.GetMatches(mol) for mol in iter_mols] - - results = [] - for i, (mol, entries) in enumerate(zip(mols, matches)): - status = "Ok" - smiles = None - reasons = None - co = None - sm = None - sc = 0 - try: - smiles = dm.to_smiles(mol) - if len(list(entries)): - # initialize empty lists - names, severity, covalent, special_mol = ([] for _ in range(4)) - # get the matches - for entry in entries: - pname = entry.GetDescription() - _, name, sev, cov, m = pname.split("||") - names.append(name) - severity.append(int(sev)) - covalent.append(int(cov)) - special_mol.append(int(m)) - # concatenate all matching filters - reasons = "; ".join(names) - # severity of 2 means EXCLUDE - if severity.count(2): - sc = 10 - status = "Exclude" - else: - sc = sum(severity) - if severity.count(1): - status = "Flag" - elif severity.count(0): - status = "Annotations" - # get number of covalent flags and special molecule flags - co = sum(covalent) - sm = sum(special_mol) - except Exception as e: - logger.warning(f"Fail on molecule at index {i}") - - results.append([smiles, status, reasons, sc, co, sm]) - df = pd.DataFrame( - results, - columns=[ - "_smiles", - "status", - "reasons", - "severity", - "covalent", - "special_mol", - ], + if scheduler == "auto": + if len(mols) > 500: + scheduler = "processes" # pragma: no cover + else: + scheduler = "threads" + + results = dm.parallelized( + functools.partial(self._evaluate, keep_details=keep_details), + mols, + progress=progress, + n_jobs=n_jobs, + scheduler=scheduler, + tqdm_kwargs=dict( + desc="NIBR filtering", + leave=progress_leave, + ), ) - return df + results = pd.DataFrame(results) + return results diff --git a/tests/test_structural.py b/tests/test_structural.py index 95700e0..9767862 100644 --- a/tests/test_structural.py +++ b/tests/test_structural.py @@ -23,7 +23,7 @@ def test_common_alerts(): "I1 Aliphatic methylene chains 7 or more long;Aliphatic long chain;triple bond", ] - assert results.columns.tolist() == ["mol", "pass_filter", "status", "reasons"] + assert set(results.columns.tolist()) == {"mol", "pass_filter", "status", "reasons"} def test_common_alerts_invalid(): @@ -39,3 +39,43 @@ def test_common_alerts_invalid(): def test_common_alerts_list(): l = mc.structural.CommonAlertsFilters.list_default_available_alerts() assert l.columns.tolist() == ["rule_set_name", "smarts", "catalog_description", "rule_set", "source"] + + +def test_nibr(): + nibr_filters = mc.structural.NIBRFilters() + + data = dm.data.solubility() + data = data.iloc[:50] + + results = nibr_filters(mols=data["mol"].tolist(), n_jobs=-1, scheduler="auto", keep_details=True) + + assert results["pass_filter"].sum() == 49 + assert set(results.columns.tolist()) == { + "mol", + "reasons", + "severity", + "status", + "n_covalent_motif", + "special_mol", + "pass_filter", + "details", + } + + +def test_nibr_invalid(): + nibr_filters = mc.structural.NIBRFilters() + + results = nibr_filters(mols=[None, "CC9888", "CCCCO"]) + + assert results["mol"].isnull().sum() == 2 + assert results.shape == (3, 7) + assert results["reasons"].tolist() == ["invalid", "invalid", None] + assert set(results.columns.tolist()) == { + "mol", + "reasons", + "severity", + "status", + "n_covalent_motif", + "special_mol", + "pass_filter", + } From 93a98444d592e5f57616895cb235a6f9a99c6bd0 Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Fri, 7 Jul 2023 14:44:48 -0400 Subject: [PATCH 17/31] demerits done --- docs/api/medchem.structural.md | 1 + docs/tutorials/Structural_Filters.ipynb | 487 ++++++++++++++++++++++- medchem/structural/demerits/__init__.py | 1 + medchem/structural/demerits/_demerits.py | 316 +++++++++++++++ medchem/structural/demerits/_lilly.py | 59 +++ medchem/structural/demerits/demerits.py | 321 --------------- tests/test_structural.py | 64 +++ tests_OLD/test_demerit_filters.py | 102 ----- 8 files changed, 927 insertions(+), 424 deletions(-) create mode 100644 medchem/structural/demerits/_demerits.py create mode 100644 medchem/structural/demerits/_lilly.py delete mode 100644 medchem/structural/demerits/demerits.py delete mode 100644 tests_OLD/test_demerit_filters.py diff --git a/docs/api/medchem.structural.md b/docs/api/medchem.structural.md index 0aff512..1a3eb1e 100644 --- a/docs/api/medchem.structural.md +++ b/docs/api/medchem.structural.md @@ -2,3 +2,4 @@ ::: medchem.structural.CommonAlertsFilters ::: medchem.structural.NIBRFilters +::: medchem.structural.demerits.DemeritsFilters diff --git a/docs/tutorials/Structural_Filters.ipynb b/docs/tutorials/Structural_Filters.ipynb index c81cd97..7795661 100644 --- a/docs/tutorials/Structural_Filters.ipynb +++ b/docs/tutorials/Structural_Filters.ipynb @@ -2620,10 +2620,495 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, + "id": "88fe876c-fb05-41fa-a8a5-072af65a8e68", + "metadata": {}, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Load a dataset\n", + "data = dm.data.solubility()\n", + "data = data.sample(50, random_state=20)\n", + "\n", + "dm.to_image(data.iloc[:8][\"mol\"].tolist(), mol_size=(300, 250))" + ] + }, + { + "cell_type": "code", + "execution_count": 24, "id": "ffa3c33f-8421-4cf3-a957-46d6d51becc9", "metadata": {}, "outputs": [], + "source": [ + "from medchem.structural.demerits import DemeritsFilters\n", + "\n", + "dfilter = DemeritsFilters()" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "0ad06795-ef00-46e8-8816-15733d4154a5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
smilesreasonsstepdemerit_scorestatuspass_filtermol
0CC1(C)OC2CC3C4CCC5=CC(=O)C=CC5(C)C4(F)C(O)CC3(...michael_rejected2NaNexcludeFalse<rdkit.Chem.rdchem.Mol object at 0x7f58d6f23530>
1C1=CC2=C(C=C1)C1=NC=CN=C1C=C2phenanthrene_het:D60260.0flagTrue<rdkit.Chem.rdchem.Mol object at 0x7f58d66f9c40>
2NC1=CC=CC=C1Claniline_h_newd:D50,aniline_h_ewd:D10260.0flagTrue<rdkit.Chem.rdchem.Mol object at 0x7f5a7da61ee0>
3O=C(O)CCC(=O)C1=CC=C(C2=CC=CC=C2)C=C1NaN20.0okTrue<rdkit.Chem.rdchem.Mol object at 0x7f58d6da4c10>
4CC(C)N1C(=O)C2=CC=CC=C2NS1(=O)=ONaN20.0okTrue<rdkit.Chem.rdchem.Mol object at 0x7f58d5a5b610>
\n", + "
" + ], + "text/plain": [ + " smiles \\\n", + "0 CC1(C)OC2CC3C4CCC5=CC(=O)C=CC5(C)C4(F)C(O)CC3(... \n", + "1 C1=CC2=C(C=C1)C1=NC=CN=C1C=C2 \n", + "2 NC1=CC=CC=C1Cl \n", + "3 O=C(O)CCC(=O)C1=CC=C(C2=CC=CC=C2)C=C1 \n", + "4 CC(C)N1C(=O)C2=CC=CC=C2NS1(=O)=O \n", + "\n", + " reasons step demerit_score status \\\n", + "0 michael_rejected 2 NaN exclude \n", + "1 phenanthrene_het:D60 2 60.0 flag \n", + "2 aniline_h_newd:D50,aniline_h_ewd:D10 2 60.0 flag \n", + "3 NaN 2 0.0 ok \n", + "4 NaN 2 0.0 ok \n", + "\n", + " pass_filter mol \n", + "0 False \n", + "1 True \n", + "2 True \n", + "3 True \n", + "4 True " + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results = dfilter(\n", + " mols=data[\"mol\"].tolist(),\n", + " n_jobs=-1,\n", + " progress=True,\n", + " progress_leave=True,\n", + " scheduler=\"threads\",\n", + ")\n", + "\n", + "results.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "108ccb69-29f1-45a8-a91b-3c8a6a1005b5", + "metadata": {}, + "outputs": [], "source": [] } ], diff --git a/medchem/structural/demerits/__init__.py b/medchem/structural/demerits/__init__.py index e69de29..2fe32f5 100644 --- a/medchem/structural/demerits/__init__.py +++ b/medchem/structural/demerits/__init__.py @@ -0,0 +1 @@ +from ._demerits import DemeritsFilters diff --git a/medchem/structural/demerits/_demerits.py b/medchem/structural/demerits/_demerits.py new file mode 100644 index 0000000..4612b21 --- /dev/null +++ b/medchem/structural/demerits/_demerits.py @@ -0,0 +1,316 @@ +from typing import Optional +from typing import Union +from typing import Any +from typing import Sequence + +import os +import uuid +import re +import shutil +import tempfile +import importlib.resources as importlib_resources + +import pandas as pd +import datamol as dm +import numpy as np + + +from ._lilly import find_lilly_binaries +from ._lilly import parse_output +from ._lilly import run_cmd + + +BIN2PATH = find_lilly_binaries() + + +class DemeritsFilters: + def __init__( + self, + mc_first_pass_options: Optional[str] = None, + iwd_options: Optional[str] = None, + stop_after_step: int = 3, + **run_options: Any, + ): + """ + Args: + mc_first_pass_options: Initial options to pass to mc_first_pass + iwd_options: Initial options to pass to iwdemerit + stop_after_step: Where to stop in the pipeline. Don't change this if you don't know. + run_options: Additional option to run the pipeline + """ + self.mc_first_pass_options = mc_first_pass_options + self.iwd_options = iwd_options + self.stop_after_step = stop_after_step + self.run_options = run_options + + def __call__( + self, + mols: Sequence[Union[str, dm.Mol]], + n_jobs: Optional[int] = -1, + batch_size: int = 5_000, + progress: bool = False, + progress_leave: bool = False, + scheduler: str = "threads", + ): + if scheduler == "processes": + raise ValueError("Demerits filtering does not support processes or loky mode yet.") + + n_splits = max(1, int(np.ceil(len(mols) / batch_size))) + + if n_splits > 1: + mols_batch_list = np.array_split(mols, n_splits) + # EN: cannot run this code in processes or loky mode + results = dm.parallelized( + self._score, + mols_batch_list, + n_jobs=n_jobs, + progress=progress, + scheduler=scheduler, + tqdm_kwargs=dict( + desc="Demerits filtering", + leave=progress_leave, + ), + ) + return pd.concat(results, ignore_index=True) # type: ignore + + else: + return self._score(mols) + + def _score(self, mols: Sequence[Union[str, dm.Mol]]): + """Run scorer on input smile list: + + Args: + mols: list of smiles + """ + + mc_first_pass_options = self.mc_first_pass_options + iwd_options = self.iwd_options + stop_after_step = self.stop_after_step + run_options = self.run_options + + if mc_first_pass_options is None: + mc_first_pass_options = "" + + if iwd_options is None: + iwd_options = "" + + extra_iwdemerit_options = "" + demerit_cutoff = run_options.get("dthresh", None) + soft_upper_atom = run_options.get("soft_max_atoms", 30) + hard_upper_atom = run_options.get("hard_max_atoms", 50) + max_size_rings = run_options.get("max_size_rings") + min_num_rings = run_options.get("min_num_rings") + max_num_rings = run_options.get("max_num_rings") + max_size_chain = run_options.get("max_size_chain") + atom_count = run_options.get("min_atoms", 1) + allow_non_int_atoms = run_options.get("allow_non_interesting", False) + + ring_bond_ratio = run_options.get("ring_bond_ratio", -1) + okiso = run_options.get("okiso", False) + if not okiso: + mc_first_pass_options += " -I 0 " + if min_num_rings: + mc_first_pass_options += f"-r {min_num_rings} " + if max_num_rings: + mc_first_pass_options += f"-R {max_num_rings} " + if max_size_rings: + mc_first_pass_options += f"-Z {max_size_rings} " + extra_iwdemerit_options += f" -Z {max_size_rings} " + if max_size_chain: + extra_iwdemerit_options += f" -z {max_size_chain} " + + if allow_non_int_atoms: + mc_first_pass_options += "-k " + mc_first_pass_options += " -A I -A ipp" + + query_files = ["reject1", "reject2", "demerits"] + for i, query_file in enumerate(query_files): + query_files[i] = str(importlib_resources.files("medchem.data.queries").joinpath(query_file)) + + # output file dir + files_to_be_deleted = [] + run_id = str(uuid.uuid4())[:8] + bad_file_dir = tempfile.mkdtemp(suffix=f"_lilly_{run_id}") + files_to_be_deleted.append(bad_file_dir) + bad_file_0 = os.path.join(bad_file_dir, "bad0") + bad_file_1 = os.path.join(bad_file_dir, "bad1") + bad_file_2 = os.path.join(bad_file_dir, "bad2") + bad_file_3 = os.path.join(bad_file_dir, "bad3") + mc_pass_out = os.path.join(bad_file_dir, "mc_pass.smi") + tsub_out_1 = os.path.join(bad_file_dir, "tsub1.smi") + tsub_out_2 = os.path.join(bad_file_dir, "tsub2.smi") + iwd_out = os.path.join(bad_file_dir, "iwd.smi") + + # optional_queries + optional_queries = "" + optional_queries += " -q ".join(run_options.get("rej_queries", [])) + optional_queries += " -s ".join(run_options.get("smarts", [])) + + # extra iwdemerit options + nodemerit = run_options.get("nodemerit", False) + + if nodemerit or soft_upper_atom is None: + soft_upper_atom = hard_upper_atom - 1 + + if hard_upper_atom < soft_upper_atom: + hard_upper_atom = soft_upper_atom + 1 + + if demerit_cutoff: + extra_iwdemerit_options += f" -f {demerit_cutoff} " + + if nodemerit: + extra_iwdemerit_options += " -r " + + if iwd_options: + extra_iwdemerit_options += " " + iwd_options + + charge_assigner_path = str( + importlib_resources.files("medchem.data.charge_assigner").joinpath("queries") + ) + extra_iwdemerit_options += " -N F:" + charge_assigner_path + + odm = run_options.get("odm", []) + + if odm: + odm_patterns = [re.compile(odm_p, re.I) for odm_p in odm] + with open(query_files[2]) as QRY_IN: + current_queries = [qry.strip() for qry in QRY_IN] + current_queries = [ + qry for qry in current_queries if not any(odm_p.search(qry) for odm_p in odm_patterns) + ] + + with tempfile.NamedTemporaryFile(mode="w+t", suffix=".qry", delete=False) as tmp_file: + tmp_file.write("\n".join(current_queries)) + query_files[2] = tmp_file.name + files_to_be_deleted.append(tmp_file.name) + + smiles_file = None + with tempfile.NamedTemporaryFile( + mode="w+t", + suffix=f"_lilly_{run_id}.smi", + delete=False, + ) as smiles_tmp_files: + # Convert the input mols to a list of SMILES + smiles_list = [] + for mol in mols: + if isinstance(mol, str): + smiles = mol + else: + smiles = dm.to_smiles(mol) + + # Sanity check + if smiles is None or dm.to_mol(smiles) is None: + raise ValueError(f"Invalid SMILES: {smiles}. Demerits does not support invalid mol yet.") + + smiles_list.append(smiles) + + smiles_tmp_files.write( + "\n".join([f"{sm.strip().split()[0]}\t{i}" for i, sm in enumerate(smiles_list)]) + ) + smiles_file = smiles_tmp_files.name + files_to_be_deleted.append(smiles_file) + + cmd = [BIN2PATH["mc_first_pass"]] + if ring_bond_ratio >= 0: + cmd.extend(["-b", str(ring_bond_ratio)]) + + if mc_first_pass_options: + cmd.extend(mc_first_pass_options.split()) + + cmd.extend(["-c", str(atom_count), "-C", str(hard_upper_atom)]) + cmd.extend("-E autocreate -o smi -V -g all -g ltltr -i ICTE".split()) + cmd.extend(["-L", bad_file_0, "-K", "TP1"]) + cmd.extend(["-a", "-u", "-S", mc_pass_out, smiles_file]) + + out = [] + out.append(run_cmd(cmd)) + + if stop_after_step >= 1: + cmd = [] + cmd.extend((BIN2PATH["tsubstructure"] + " -E autocreate -b -u -i smi -o smi -A D ").split()) + cmd.extend(("-m " + bad_file_1 + " -m QDT").split()) + cmd.extend( + (f"-n {tsub_out_1} -q F:" + query_files[0] + optional_queries + f" {mc_pass_out}").split() + ) + out.append(run_cmd(cmd)) + + if stop_after_step >= 2: + cmd = [] + cmd.extend((BIN2PATH["tsubstructure"] + " -A D -E autocreate -b -u -i smi -o smi ").split()) + cmd.extend(("-m " + bad_file_2 + " -m QDT").split()) + cmd.extend((f"-n {tsub_out_2} -q F:" + query_files[1] + f" {tsub_out_1}").split()) + out.append(run_cmd(cmd)) + + if stop_after_step >= 3: + cmd = [] + cmd.extend( + ( + BIN2PATH["iwdemerit"] + + " -u -k -x -t " + + extra_iwdemerit_options + + " -E autocreate -A D -i smi -o smi -q F:" + + query_files[2] + ).split() + ) + cmd.extend(f"-R {bad_file_3}".split()) + cmd.extend( + f"-G {iwd_out} -c smax={soft_upper_atom} -c hmax={hard_upper_atom} {tsub_out_2}".split() + ) + out.append(run_cmd(cmd)) + + data_list = [] + for i, bad_file in enumerate([bad_file_0, bad_file_1, bad_file_2]): + with open(bad_file + ".smi") as IN: + df_bad = parse_output(IN) + df_bad["step"] = i + 1 + df_bad["rejected"] = True + data_list.append(df_bad) + + demerit_extractor = re.compile(r"'([A-Za-z0-9_\s]+)'") + i = 0 + for dt_file, rej in [(bad_file_3 + ".smi", True), (iwd_out, False)]: + parseable = [] + demerit_scores = [] + with open(dt_file) as IN: + for row in IN: + in_string, *demerit_string = row.split(" : ") + in_string = in_string.strip() + demerit_score = 0 + if not demerit_string: + in_string += ' ""' + else: + demerit_string = str(demerit_string[0]).strip() + m = re.match(r"D\(([0-9]+)\)", demerit_string) + if m is not None: + demerit_score = int(m.group(1)) + tmp = demerit_extractor.findall(row) + demerit_string = ",".join([":".join(reversed(l.split())) for l in tmp]) + in_string += " " + demerit_string + parseable.append(in_string) + demerit_scores.append(demerit_score) + + df = parse_output(parseable) + df["rejected"] = rej + df["step"] = i + 1 + df["demerit_score"] = demerit_scores + data_list.append(df) + i += 1 + results = pd.concat(data_list).sort_values("ID").reset_index(drop=True) + + # Postprocessing + results["status"] = results["rejected"].apply(lambda x: "Exclude" if x else "Ok") + results.loc[((results.demerit_score > 0) & (~results.rejected)), "status"] = "Flag" + + results["status"] = results["status"].str.lower() + results["pass_filter"] = ~results["rejected"] + results = results.drop(columns=["ID", "rejected"]) + results["mol"] = mols + + # clean + for to_del in files_to_be_deleted: + if os.path.isfile(to_del): + os.remove(to_del) + else: + shutil.rmtree(to_del) + + return results diff --git a/medchem/structural/demerits/_lilly.py b/medchem/structural/demerits/_lilly.py new file mode 100644 index 0000000..aa0cb2d --- /dev/null +++ b/medchem/structural/demerits/_lilly.py @@ -0,0 +1,59 @@ +import io +import re +import shutil +import subprocess + +import pandas as pd + + +def find_lilly_binaries(): + binaries_list = ["mc_first_pass", "tsubstructure", "iwdemerit"] + binary_paths = {} + for binary_name in binaries_list: + binary_path = shutil.which(binary_name) + + if binary_path is None: + raise ImportError( + "The Lilly binaries required to use the `medchem.structural.demerits` module seems to be missing. " + "Install with `mamba install lilly-medchem-rules`." + ) + + binary_paths[binary_name] = binary_path + + return binary_paths + + +def rreplace(input_str, old, rep, occurrence): + """Replace last occurence of 'old' in 'input_str' by 'rep'""" + tmp = input_str.rsplit(old, occurrence) + return rep.join(tmp) + + +def parse_output(rowlist): + """Parse content of `rowlist` to dataframe""" + content = "\n".join( + [ + rreplace( + re.sub(r"\s+\([0-9]*\s+(matches\sto\s)", ' "', line.strip(), 1), + "')", + "'\"", + 1, + ).strip("'") + for line in rowlist + ] + ) + flux = io.StringIO(content) + df = pd.read_csv(flux, sep=r"\s+", doublequote=True, names=["smiles", "ID", "reasons"]) + df["ID"] = pd.to_numeric(df["ID"]) + df["reasons"] = df["reasons"].apply(lambda x: x.strip("'") if x and isinstance(x, str) else x) + return df + + +def run_cmd(cmd, shell=False): + """Run command""" + res = subprocess.run(cmd, capture_output=True, shell=shell, check=False) + if res.returncode != 0: + print("".join(res.stderr.decode("utf-8"))) + print(" ".join(cmd)) + res.check_returncode() + return res diff --git a/medchem/structural/demerits/demerits.py b/medchem/structural/demerits/demerits.py deleted file mode 100644 index e398058..0000000 --- a/medchem/structural/demerits/demerits.py +++ /dev/null @@ -1,321 +0,0 @@ -# from typing import List -# from typing import Optional - -# import os -# import uuid -# import io -# import re -# import shutil -# import subprocess -# import tempfile -# import importlib.resources as importlib_resources - -# import pandas as pd -# import datamol as dm -# import numpy as np - - -# def _find_lilly_binaries(): -# binaries_list = ["mc_first_pass", "tsubstructure", "iwdemerit"] -# binary_paths = {} -# for binary_name in binaries_list: -# binary_path = shutil.which(binary_name) - -# if binary_path is None: -# raise ImportError( -# "The Lilly binaries required to use the `medchem.demerits` module seems to be missing. Install with `mamba install lilly-medchem-rules`." -# ) - -# binary_paths[binary_name] = binary_path - -# return binary_paths - - -# BIN2PATH = _find_lilly_binaries() - - -# def _rreplace(input_str, old, rep, occurrence): -# """Replace last occurence of 'old' in 'input_str' by 'rep'""" -# tmp = input_str.rsplit(old, occurrence) -# return rep.join(tmp) - - -# def _parse_output(rowlist): -# """Parse content of `rowlist` to dataframe""" -# content = "\n".join( -# [ -# _rreplace( -# re.sub(r"\s+\([0-9]*\s+(matches\sto\s)", ' "', line.strip(), 1), -# "')", -# "'\"", -# 1, -# ).strip("'") -# for line in rowlist -# ] -# ) -# flux = io.StringIO(content) -# df = pd.read_csv(flux, sep=r"\s+", doublequote=True, names=["_smiles", "ID", "reasons"]) -# df["ID"] = pd.to_numeric(df["ID"]) -# df["reasons"] = df["reasons"].apply(lambda x: x.strip("'") if x and isinstance(x, str) else x) -# return df - - -# def run_cmd(cmd, shell=False): -# """Run command""" -# res = subprocess.run(cmd, capture_output=True, shell=shell, check=False) -# if res.returncode != 0: -# print("".join(res.stderr.decode("utf-8"))) -# print(" ".join(cmd)) -# res.check_returncode() -# return res - - -# def batch_score( -# smiles_list: List, -# n_jobs: Optional[int] = None, -# batch_size: Optional[int] = 5_000, -# progress: bool = False, -# **run_options, -# ): -# """Run scorer on input smile list in batch - -# Args: -# smiles_list: list of smiles -# n_jobs: Number of jobs to run in parallel. -# batch_size: Optional batch_size to run the the scoring in parallels. -# progress: Whether to show progress bar. -# run_options: Run options to pass to the underlining score function - -# Returns: -# out_df (pd.DataFrame): Dataframe containing the smiles and computed properties: -# (rejected, demerit_score, reason, step) -# """ -# n_splits = max(1, int(np.ceil(len(smiles_list) / batch_size))) -# if n_jobs is not None and n_splits > 1: -# smiles_batch_list = np.array_split(smiles_list, n_splits) -# smiles_batch = [dict(smiles_list=list(smlist), **run_options) for smlist in smiles_batch_list] -# # EN: cannot run this code in processes or loky mode -# output = dm.parallelized( -# score, -# smiles_batch, -# n_jobs=n_jobs, -# progress=progress, -# scheduler="threads", -# arg_type="kwargs", -# ) -# cur_len = 0 -# for sm_list, df in zip(smiles_batch_list, output): -# df["ID"] += cur_len -# cur_len += len(sm_list) -# return pd.concat(output, ignore_index=True) -# return score(smiles_list, **run_options) - - -# def score( -# smiles_list: List, -# mc_first_pass_options: Optional[str] = "", -# iwd_options: Optional[str] = "", -# stop_after_step: Optional[int] = 3, -# **run_options, -# ): -# """Run scorer on input smile list: - -# Args: -# smiles_list: list of smiles -# mc_first_pass_options: Initial options to pass to mc_first_pass -# iwd_options: Initial options to pass to iwdemerit -# stop_after_step: Where to stop in the pipeline. Don't change this if you don't know. -# run_options: Additional option to run the pipeline - -# Returns: -# out_df (pd.DataFrame): Dataframe containing the smiles and computed properties: -# (rejected, demerit_score, reason, step) -# """ - -# extra_iwdemerit_options = "" -# demerit_cutoff = run_options.get("dthresh", None) -# soft_upper_atom = run_options.get("soft_max_atoms", 30) -# hard_upper_atom = run_options.get("hard_max_atoms", 50) -# max_size_rings = run_options.get("max_size_rings") -# min_num_rings = run_options.get("min_num_rings") -# max_num_rings = run_options.get("max_num_rings") -# max_size_chain = run_options.get("max_size_chain") -# atom_count = run_options.get("min_atoms", 1) -# allow_non_int_atoms = run_options.get("allow_non_interesting", False) - -# ring_bond_ratio = run_options.get("ring_bond_ratio", -1) -# okiso = run_options.get("okiso", False) -# if not okiso: -# mc_first_pass_options += " -I 0 " -# if min_num_rings: -# mc_first_pass_options += f"-r {min_num_rings} " -# if max_num_rings: -# mc_first_pass_options += f"-R {max_num_rings} " -# if max_size_rings: -# mc_first_pass_options += f"-Z {max_size_rings} " -# extra_iwdemerit_options += f" -Z {max_size_rings} " -# if max_size_chain: -# extra_iwdemerit_options += f" -z {max_size_chain} " - -# if allow_non_int_atoms: -# mc_first_pass_options += "-k " -# mc_first_pass_options += " -A I -A ipp" - -# query_files = ["reject1", "reject2", "demerits"] -# for i, query_file in enumerate(query_files): -# query_files[i] = str(importlib_resources.files("medchem.data.queries").joinpath(query_file)) - -# # output file dir -# files_to_be_deleted = [] -# run_id = str(uuid.uuid4())[:8] -# bad_file_dir = tempfile.mkdtemp(suffix=f"_lilly_{run_id}") -# files_to_be_deleted.append(bad_file_dir) -# bad_file_0 = os.path.join(bad_file_dir, "bad0") -# bad_file_1 = os.path.join(bad_file_dir, "bad1") -# bad_file_2 = os.path.join(bad_file_dir, "bad2") -# bad_file_3 = os.path.join(bad_file_dir, "bad3") -# mc_pass_out = os.path.join(bad_file_dir, "mc_pass.smi") -# tsub_out_1 = os.path.join(bad_file_dir, "tsub1.smi") -# tsub_out_2 = os.path.join(bad_file_dir, "tsub2.smi") -# iwd_out = os.path.join(bad_file_dir, "iwd.smi") - -# # optional_queries -# optional_queries = "" -# optional_queries += " -q ".join(run_options.get("rej_queries", [])) -# optional_queries += " -s ".join(run_options.get("smarts", [])) - -# # extra iwdemerit options -# nodemerit = run_options.get("nodemerit", False) - -# if nodemerit or soft_upper_atom is None: -# soft_upper_atom = hard_upper_atom - 1 - -# if hard_upper_atom < soft_upper_atom: -# hard_upper_atom = soft_upper_atom + 1 - -# if demerit_cutoff: -# extra_iwdemerit_options += f" -f {demerit_cutoff} " - -# if nodemerit: -# extra_iwdemerit_options += " -r " - -# if iwd_options: -# extra_iwdemerit_options += " " + iwd_options - -# charge_assigner_path = str(importlib_resources.files("medchem.data.charge_assigner").joinpath("queries")) -# extra_iwdemerit_options += " -N F:" + charge_assigner_path - -# odm = run_options.get("odm", []) - -# if odm: -# odm_patterns = [re.compile(odm_p, re.I) for odm_p in odm] -# with open(query_files[2]) as QRY_IN: -# current_queries = [qry.strip() for qry in QRY_IN] -# current_queries = [ -# qry for qry in current_queries if not any(odm_p.search(qry) for odm_p in odm_patterns) -# ] - -# with tempfile.NamedTemporaryFile(mode="w+t", suffix=".qry", delete=False) as tmp_file: -# tmp_file.write("\n".join(current_queries)) -# query_files[2] = tmp_file.name -# files_to_be_deleted.append(tmp_file.name) - -# smiles_file = None -# with tempfile.NamedTemporaryFile( -# mode="w+t", suffix=f"_lilly_{run_id}.smi", delete=False -# ) as smiles_tmp_files: -# smiles_tmp_files.write( -# "\n".join([f"{sm.strip().split()[0]}\t{i}" for i, sm in enumerate(smiles_list)]) -# ) -# smiles_file = smiles_tmp_files.name -# files_to_be_deleted.append(smiles_file) - -# cmd = [BIN2PATH["mc_first_pass"]] -# if ring_bond_ratio >= 0: -# cmd.extend(["-b", str(ring_bond_ratio)]) -# if mc_first_pass_options: -# cmd.extend(mc_first_pass_options.split()) -# cmd.extend(["-c", str(atom_count), "-C", str(hard_upper_atom)]) -# cmd.extend("-E autocreate -o smi -V -g all -g ltltr -i ICTE".split()) -# cmd.extend(["-L", bad_file_0, "-K", "TP1"]) -# cmd.extend(["-a", "-u", "-S", mc_pass_out, smiles_file]) -# out = [] -# out.append(run_cmd(cmd)) -# if stop_after_step >= 1: -# cmd = [] -# cmd.extend((BIN2PATH["tsubstructure"] + " -E autocreate -b -u -i smi -o smi -A D ").split()) -# cmd.extend(("-m " + bad_file_1 + " -m QDT").split()) -# cmd.extend((f"-n {tsub_out_1} -q F:" + query_files[0] + optional_queries + f" {mc_pass_out}").split()) -# out.append(run_cmd(cmd)) -# if stop_after_step >= 2: -# cmd = [] -# cmd.extend((BIN2PATH["tsubstructure"] + " -A D -E autocreate -b -u -i smi -o smi ").split()) -# cmd.extend(("-m " + bad_file_2 + " -m QDT").split()) -# cmd.extend((f"-n {tsub_out_2} -q F:" + query_files[1] + f" {tsub_out_1}").split()) -# out.append(run_cmd(cmd)) - -# if stop_after_step >= 3: -# cmd = [] -# cmd.extend( -# ( -# BIN2PATH["iwdemerit"] -# + " -u -k -x -t " -# + extra_iwdemerit_options -# + " -E autocreate -A D -i smi -o smi -q F:" -# + query_files[2] -# ).split() -# ) -# cmd.extend(f"-R {bad_file_3}".split()) -# cmd.extend(f"-G {iwd_out} -c smax={soft_upper_atom} -c hmax={hard_upper_atom} {tsub_out_2}".split()) -# out.append(run_cmd(cmd)) - -# data_list = [] -# for i, bad_file in enumerate([bad_file_0, bad_file_1, bad_file_2]): -# with open(bad_file + ".smi") as IN: -# df_bad = _parse_output(IN) -# df_bad["step"] = i + 1 -# df_bad["rejected"] = True -# data_list.append(df_bad) - -# demerit_extractor = re.compile(r"'([A-Za-z0-9_\s]+)'") -# for dt_file, rej in [(bad_file_3 + ".smi", True), (iwd_out, False)]: -# parseable = [] -# demerit_scores = [] -# with open(dt_file) as IN: -# for row in IN: -# in_string, *demerit_string = row.split(" : ") -# in_string = in_string.strip() -# demerit_score = 0 -# if not demerit_string: -# in_string += ' ""' -# else: -# demerit_string = str(demerit_string[0]).strip() -# try: -# demerit_score = int(re.match(r"D\(([0-9]+)\)", demerit_string).group(1)) -# except: -# pass -# tmp = demerit_extractor.findall(row) -# demerit_string = ",".join([":".join(reversed(l.split())) for l in tmp]) -# in_string += " " + demerit_string -# parseable.append(in_string) -# demerit_scores.append(demerit_score) -# df = _parse_output(parseable) -# df["rejected"] = rej -# df["step"] = i + 1 -# df["demerit_score"] = demerit_scores -# data_list.append(df) -# i += 1 -# final_df = pd.concat(data_list).sort_values("ID").reset_index(drop=True) -# # Postprocessing -# final_df["status"] = final_df["rejected"].apply(lambda x: "Exclude" if x else "Ok") -# final_df.loc[((final_df.demerit_score > 0) & (~final_df.rejected)), "status"] = "Flag" -# # clean -# for to_del in files_to_be_deleted: -# if os.path.isfile(to_del): -# os.remove(to_del) -# else: -# try: -# shutil.rmtree(to_del) -# except: -# pass -# return final_df diff --git a/tests/test_structural.py b/tests/test_structural.py index 9767862..1e27d23 100644 --- a/tests/test_structural.py +++ b/tests/test_structural.py @@ -1,6 +1,10 @@ +import pytest + import medchem as mc import datamol as dm +from medchem.structural.demerits import DemeritsFilters + def test_common_alerts(): alerts = mc.structural.CommonAlertsFilters() @@ -79,3 +83,63 @@ def test_nibr_invalid(): "special_mol", "pass_filter", } + + +def test_demerits(): + dfilters = DemeritsFilters() + + data = dm.data.solubility() + data = data.sample(50, random_state=20) + + results = dfilters(mols=data["mol"].tolist()) + + assert results["pass_filter"].sum() == 30 + assert set(results.columns.tolist()) == { + "smiles", + "reasons", + "step", + "demerit_score", + "status", + "pass_filter", + "mol", + } + + +def test_demerits_config(): + test_config = { + "output": "test", + "min_atoms": 7, + "soft_max_atoms": 30, + "hard_max_atoms": 50, + "smarts": [], + "nodemerit": False, + "dthresh": 160, + "odm": [], + "okiso": False, + "noapdm": False, + } + + dfilters = DemeritsFilters(**test_config) + + data = dm.data.solubility() + data = data.sample(50, random_state=20) + + results = dfilters(mols=data["mol"].tolist()) + + assert results["pass_filter"].sum() == 30 + assert set(results.columns.tolist()) == { + "smiles", + "reasons", + "step", + "demerit_score", + "status", + "pass_filter", + "mol", + } + + +def test_demerits_invalid(): + dfilters = DemeritsFilters() + + with pytest.raises(ValueError): + dfilters(mols=[None, "CC9888", "CCCCO"]) diff --git a/tests_OLD/test_demerit_filters.py b/tests_OLD/test_demerit_filters.py deleted file mode 100644 index 9a518f5..0000000 --- a/tests_OLD/test_demerit_filters.py +++ /dev/null @@ -1,102 +0,0 @@ -import unittest as ut -import datamol as dm - -from medchem import demerits - - -class Test_DemeritsFilter(ut.TestCase): - test_config = { - "output": "test", - "min_atoms": 7, - "soft_max_atoms": 30, - "hard_max_atoms": 50, - "smarts": [], - "nodemerit": False, - "dthresh": 160, - "odm": [], - "okiso": False, - "noapdm": False, - } - smiles_list = [ - "Cc1cnc(CNc(cccc2-c3cn(CC(C4)CC4O)c4ncnc(N)c34)c2F)s1" - "Cc1cnc(CNc(cccc2-c3cn(C[C@H](C4)C[C@@H]4O)c4ncnc(N)c34)c2F)s1", - "Cc1cnc(CNc(cccc2-c3cn(C[C@H](C4)C[C@H]4O)c4ncnc(N)c34)c2F)s1", - "Cc1cnc(CNc(cccc2-c3cn(C[C@H]4C[C@H](CO)C4)c4ncnc(N)c34)c2F)s1", - "Cc1cnc(CNc(cccc2-c3cn(C[C@H]4C[C@@H](CO)C4)c4ncnc(N)c34)c2F)s1", - "Cc1cnc(CNc2c(CO)c(-c3cn(C[C@H](C4)C[C@@H]4O)c4ncnc(N)c34)ccc2)s1", - "CC(C)(C)c1cnc(CNc(cccc2-c3cn(CC(C4)CC4O)c4ncnc(N)c34)c2F)s1", - "Cc1cnc(CNc2nc(-c3cn(C[C@H](C4)C[C@@H]4O)c4ncnc(N)c34)ccc2)s1", - "Cc1nc(CNc(cccc2-c3cn(C[C@H](C4)C[C@@H]4O)c4ncnc(N)c34)c2F)cs1", - "NC(c(ccc(NC(c1cccc(C(F)(F)F)c1)=O)c1)c1-c1cc2cnc(NC3CC3)nc2cc1)=O", - "Cc1cnc(CNc(cccc2-c3cn(Cc4cn(CCN5CCOCC5)nn4)c4ncnc(N)c34)c2F)s1", - "Cc1cnc(CNc2cc(-c3cn(C[C@H](C4)C[C@@H]4O)c4ncnc(N)c34)ccc2)s1", - "Cc1cnc(CNc(cccc2-c3cn(CC4CCOCC4)c4ncnc(N)c34)c2F)s1", - "Cc1cnc(CNc(cccc2-c3cn(C[C@@H]4COCC4)c4ncnc(N)c34)c2F)s1", - "Cn1nnc(CNc2c(c(-c3cccc(NCc4nccs4)c3F)c[nH]3)c3ncn2)c1", - "Cn1c(Cn2nnc(CNc3c(c(-c4cccc(NCc5nccs5)c4F)c[nH]4)c4ncn3)c2)cnc1", - "Cc1cnc(C[C@@H]2NCc3c2cccc3-c2cn(C[C@H](C3)C[C@@H]3O)c3ncnc(N)c23)s1", - "Cc1ncc(Cn2nnc(CNc3ncnc4c3c(-c(cccc3NCc5nccs5)c3F)c[nH]4)c2)s1", - "CCc1noc(Cn2nnc(CNc3c(c(-c4cccc(NCc5nccs5)c4F)c[nH]4)c4ncn3)c2)n1", - "CCn1c(Cn2nnc(CNc3c(c(-c4cccc(NCc5nccs5)c4F)c[nH]4)c4ncn3)c2)cnc1", - "Fc1cccc(-n2nnc(CNc3c(c(-c4cccc(NCc5nccs5)c4F)c[nH]4)c4ncn3)c2)c1", - "CCc1nc(Cn2nnc(CNc3c(c(-c4cccc(NCc5nccs5)c4F)c[nH]4)c4ncn3)c2)no1", - "Cc(n1CCn2nnc(CNc3c(c(-c4cccc(NCc5nccs5)c4F)c[nH]4)c4ncn3)c2)ncc1[N+]([O-])=O", - "Fc(cc1F)cc(Br)c1-n1nnc(CNc2ncnc3c2c(-c(cccc2NCc4nccs4)c2F)c[nH]3)c1", - "Fc1cc(-n2nnc(CNc3c(c(-c4cccc(NCc5nccs5)c4F)c[nH]4)c4ncn3)c2)cc(F)c1", - "Cc1cnc(CNc(cc2)cc(-c3cn(C[C@H](C4)C[C@@H]4O)c4ncnc(N)c34)c2F)s1", - "C[C@@H](c1cn(-c2cc(C(F)(F)F)cc(Br)c2)nn1)Nc1ncnc2c1c(-c(cccc1NCc3nccs3)c1F)c[nH]2", - "Nc1c(c(-c2cccc(NCc3cscn3)c2F)cn2C[C@H](C3)C[C@@H]3O)c2ncn1", - "Nc1c(c(-c2cccc(NCc3nccs3)c2F)cn2Cc3cn(Cc4cncc(F)c4)nn3)c2ncn1", - "C[C@@H](c1cn(Cc2cncn2C2CC2)nn1)Nc1c(c(-c2cccc(NCc3nccs3)c2F)c[nH]2)c2ncn1", - "Nc1c(c(-c2cccc(NCc3cscn3)c2F)cn2C[C@H](C3)C[C@H]3O)c2ncn1", - "Nc1c(c(-c2cccc(NCc3nccs3)c2F)cn2Cc3cn(-c4cc([N+]([O-])=O)ccc4)nn3)c2ncn1", - "Nc1c(c(-c2cccc(NCc3nccs3)c2F)cn2Cc3cn(C[C@@H]4OCCc5c4cccc5)nn3)c2ncn1", - "CC(c1cn(CC2C(CC3)CC3C2)nn1)N(Cc1nccs1)c(cccc1-c2c[nH]c3ncnc(N)c23)c1F", - "Nc1c(c(-c2cccc(NCc3ncc4n3CCC4)c2F)cn2C[C@H](C3)C[C@@H]3O)c2ncn1", - "NC1CC(Cn2c3ncnc(N)c3c(-c3cccc(NCc4nc(CO)cs4)c3F)c2)C1", - "Nc1c(c(-c2cccc(NCc3ncccc3)c2F)nn2CC(C3)CC3O)c2ncn1", - "Nc1c(c(-c2cccc(NCc3nccs3)c2F)cn2Cc3cn(C4CC5(COCC5)OCC4)nn3)c2ncn1", - "C[C@@H](c1cn(CC2CCCCC2)nn1)N(Cc1nccs1)c(cccc1-c2c[nH]c3ncnc(N)c23)c1F", - "Nc1c(c(-c2cccc(NCc3nccs3)c2F)cn2Cc3cn(CC4C(CC5)CC5C4)nn3)c2ncn1", - "Nc1c(c(-c2cccc(NCc3nccs3)c2F)cn2Cc3cn(C4CC5(CSCC5)OCC4)nn3)c2ncn1", - "CCn1ncnc1Cn1nnc(CNc2c(c(-c3cccc(NCc4nccs4)c3F)c[nH]3)c3ncn2)c1", - "Nc1c(c(-c(cccc2NCc3nccs3)c2F)cn2Cc3cn([C@@H]4CC5(CCSCC5)OCC4)nn3)c2ncn1", - "Nc1c(c(-c2cccc(NCc3nccs3)c2F)cn2Cc3cn([C@@H]4CC5(CCCCC5)OCC4)nn3)c2ncn1", - "Nc1c(c(-c2cccc(NCc3nccs3)c2F)cn2Cc3cn([C@@H]4CC5(CCC5)OCC4)nn3)c2ncn1", - "CCn1c(Cn2nnc(CNc3c(c(-c4cccc(NCc5nccs5)c4F)c[nH]4)c4ncn3)c2)ncc1", - "Nc1c(c(-c2cccc(NCc3nccs3)c2F)cn2Cc3cn([C@@H]4CC5(CCOCC5)OCC4)nn3)c2ncn1", - "CC1OC(Cn2nnc(CNc3c(c(-c4cccc(NCc5nccs5)c4F)c[nH]4)c4ncn3)c2)CC1", - "Nc1c(c(-c2cccc(NCc3nccs3)c2F)cn2Cc3cn(C[C@@H](C4)c5c4cccc5)nn3)c2ncn1", - "C[C@@H](c1cn(Cc2nnnn2C2CC2)nn1)Nc1c(c(-c2cccc(NCc3nccs3)c2F)c[nH]2)c2ncn1", - "Nc1c(c(-c2cccc(NCc3nccs3)c2F)cn2Cc3cn(CCN4CCOCC4)nn3)c2ncn1", - "Cc1cnc(C(Nc(cccc2-c3cn(C[C@H](C4)C[C@@H]4O)c4ncnc(N)c34)c2F)=O)s1", - "Nc1c(c(-c(cccc2NCc3nccs3)c2F)cn2Cc3cn(-c(cc4)cc5c4scc5)nn3)c2ncn1", - "Nc1c(c(-c2cccc(NCc3nccs3)c2F)cn2Cc3cn(CCC4CC4)nn3)c2ncn1", - "CC(C)Cn1ncnc1Cn1nnc(CNc2c(c(-c3cccc(NCc4nccs4)c3F)c[nH]3)c3ncn2)c1", - "Nc1c(c(-c2cccc(NCc3nc(CO)cs3)c2F)cn2CC3CCC3)c2ncn1", - "CC(c1cn(C2CC3(CCCC3)OCC2)nn1)Nc1c(c(-c2cccc(NCc3nccs3)c2F)c[nH]2)c2ncn1", - "Nc1c(c(-c2cccc(NCC(C(NC=C3)=O)=C3c3ncccc3)c2F)cn2C[C@H](C3)C[C@@H]3O)c2ncn1", - "Nc1c(c(-c2cccc(NCc3nccs3)c2F)cn2Cc3cn(C4CCOCC4)nn3)c2ncn1", - "CCN1CC(Cn2nnc(C(C)Nc3c(c(-c4cccc(NCc5nccs5)c4F)c[nH]4)c4ncn3)c2)OCC1", - "Nc1c(c(-c2cccc(NCc3nccs3)c2F)cn2Cc3cn(-c4cc(F)cc(F)c4)nn3)c2ncn1", - "CC(c1cn(C2CC3(CCOCC3)OCC2)nn1)Nc1c(c(-c2cccc(NCc3nccs3)c2F)c[nH]2)c2ncn1", - "Nc1c(c(-c2cccc(NCc3nccs3)c2F)cn2Cc3cn(C4CCCCCC4)nn3)c2ncn1", - "Nc1c(c(-c2cccc(NCc3nccs3)c2F)cn2Cc3cn(CCN4CCCC4)nn3)c2ncn1", - "Nc1c(c(-c2cccc(NCC(C(NC=C3)=O)=C3c3ccccc3)c2F)cn2C[C@H](C3)C[C@@H]3O)c2ncn1", - "Nc1c(c(-c2cccc(NCc3nccs3)c2F)cn2Cc3cn(C4CCCCC4)nn3)c2ncn1", - "Cc(n1CCn2nnc(Cn3c4ncnc(N)c4c(-c4cccc(NCc5nccs5)c4F)c3)c2)ncc1[N+]([O-])=O", - "Nc1c(c(-c2cccc(NCc3ncc(-c4ccccc4)s3)c2F)cn2C[C@H](C3)C[C@@H]3O)c2ncn1", - "Nc1c(c(-c2cccc(NCc3nccs3)c2F)cn2Cc3cn(C4CCCC4)nn3)c2ncn1", - ] - - def test_demerits(self): - res = demerits.score(self.smiles_list, **self.test_config) - self.assertTrue(res.shape[0] > 0) - - def test_batch_demerits(self): - res = demerits.batch_score(self.smiles_list, n_jobs=4, batch_size=5, **self.test_config) - self.assertTrue(res.shape[0] > 0) - - -if __name__ == "__main__": - ut.main() From 42dd6322a2cfe7a254328bf674517527738425bb Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Sun, 9 Jul 2023 15:31:18 -0400 Subject: [PATCH 18/31] review step 1 --- docs/tutorials/Catalogs.ipynb | 28 ++++++++++++++-------------- medchem/complexity/_filter.py | 2 +- medchem/rules/_rule_filter.py | 5 ++++- medchem/utils/func.py | 18 ++++++++++++++++++ 4 files changed, 37 insertions(+), 16 deletions(-) create mode 100644 medchem/utils/func.py diff --git a/docs/tutorials/Catalogs.ipynb b/docs/tutorials/Catalogs.ipynb index b7cac71..42f31e5 100644 --- a/docs/tutorials/Catalogs.ipynb +++ b/docs/tutorials/Catalogs.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 1, "id": "cc35111a-d3a8-4313-962c-290bbf563f35", "metadata": {}, "outputs": [], @@ -102,7 +102,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 9, "id": "72f8ccb7-2287-433c-97aa-13c0ac204bee", "metadata": {}, "outputs": [ @@ -112,7 +112,7 @@ "444" ] }, - "execution_count": 3, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -141,7 +141,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 11, "id": "6d246863-d8a5-4560-9a34-4844d0b76366", "metadata": {}, "outputs": [], @@ -151,7 +151,7 @@ "\n", "data[\"mol\"] = data[\"smiles\"].apply(dm.to_mol)\n", "\n", - "data[\"match_nibre_catalog\"] = data[\"mol\"].apply(catalog.HasMatch)" + "data[\"match_nibr_catalog\"] = data[\"mol\"].apply(catalog.HasMatch)" ] }, { @@ -164,7 +164,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 12, "id": "6d908a04-8ca0-49a2-982a-060f5997b294", "metadata": {}, "outputs": [ @@ -422,7 +422,7 @@ "" ] }, - "execution_count": 6, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -431,7 +431,7 @@ "rows = data.sample(n=8, random_state=19)\n", "\n", "mols = rows[\"mol\"].tolist()\n", - "legends = rows[\"match_nibre_catalog\"].apply(lambda x: f\"Match={x}\").tolist()\n", + "legends = rows[\"match_nibr_catalog\"].apply(lambda x: f\"Match={x}\").tolist()\n", "\n", "dm.to_image(mols, legends=legends, mol_size=(300, 200))" ] @@ -446,7 +446,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 13, "id": "ff6fcff5-3cf2-4442-a064-a156d1720179", "metadata": {}, "outputs": [ @@ -454,10 +454,10 @@ "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcIAAACWCAIAAADCEh9HAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3daVhT174/8JUEwpAQQAYFUSGiIOIEypSESUVEEYcevdVaZ9ta7zn2eGpre+xwj/Z28Fjb03/VDmpbra1aioiEUZAkgMgsFFQMMgUIgxBCGDLs/4vdm6YBRExgE/L7PH3hs9dK9i+pfrPWHtYmYRiGAAAAPCsy0QUAAIBhgxgFAACdQIwCAIBOIEYBAEAnEKMAAKATiNGJQ6aSlfSUCPuERBcCgHGBGDU8Xcqu4p7im103y3rK+rF+9fbinuKFFQtfrnuZwNoAMEImRBcARiCnO+fdxnczujIUmALfYkOx2WW/6z2n9+hkOrG1AWC0IEYNxndt3+2u3a3AFDPNZkYxouxN7BvkDdc6r/27+d88KS99VjrRBQJgpCBGDUNJT8ne2r0KTHF4yuH/cfofE9Lv/+OOK4+/WPOip7mnJdmS2AoBMFoQo4bhWNOxfqw/2jr6A+cPNLdbUaximbEkRCKqMAAAnGIyAH1YX3xHPELo9cmvD2yFDAWAWBCjBqC0p7QP6zMnmwfSAomuBQCgDWLUADTLmxFCLqYu6kOiAIDxA2LUAPSoehBC5mRzogsBAAwCYtQA0Cl0hJBUKSW6EADAICBGDcA002kIoXp5PT4sfRo3u24eajg0mkUBAH4Hx9oMwBzzOdYU605lZ1pXWrR19LD9O5QdG4QbOpQdVBL1qPPRMagQAGMGo1EDQCFRNk/ajBA61nRMiSmH7W9Dsfne9XtTkumxpmMfN388+gUCYNQgRg3DW1PesqHY3O6+/fyj59sUbZpNWdKs2923tfpHW0efm3GOjMhvNrx5pvXMGFYKgNGBSb1hcDF1iWXGrhWuvfL4SmJnYjA9eBp1WquitbinWNgnjLKOujHzhtZLtkzaIlFK9tXt21e7z5pi/V+2/0VI5QBMeBCjBiPMKqxsTtn/Nv9vXEccV8LFNzqaOD5v+/w+h30IIRNkwqAwaGSa+iWvOLzyWPn4bdHbLz560Ypstcp6FTGlAzChkeABy4aoS9nVqmy1o9gxKIxhO7/Z8OZHzR9ZkC247twQesgYlAeAUYEYnfgwhO2r3Xe69TSDwkiflb7YcjHRFQEwoUCMGgUVUr1Q/cKlx5fsTexvzb7lZe5FdEUATBwQo8ZCjsnXC9cndCZMNZ3K8+C5Ud2IrgiACQJi1Ij0qHqiHkZldmXONJvJm81zMnUiuiIAJgK4btSIWJAt4pnxSyyXPOx7GFEVoXX9KQDg2UCMGhcrihXXnTvXfG5ZT1nUw6guZRfRFQFg8CBGjY6diV3KrBSmGTOvOy9GGNOr6iW6IgAMG8SoMXI2dU51T3U2dc7oythUvUmOyYmuCAADBjFqpJhmzJRZKXYmdvGd8TtqdqiQiuiKADBUEKPGa675XK4714pidbH94v66/USXA4Chghg1akssl3Bncmlk2qmWU2+L3ia6HAAMEsSosWPRWbHMWCqJKsgRfPwxLE4KwIjB5fcAIYRiC2L/4vcXDMNOnz69d+9eossBwJDAaBQghNB63/XffPMNQuiVV165dOkS0eUAYEggRsHvduzYceLECZVKtW3btoSEBKLLAcBgQIyCPxw4cODNN9+Uy+UbN27MzMwkuhwADAMcGwXaXnvttZMnTzIYjPT09MWLDWxx0t7e3itXrpSVlW3bts3LC9YDBGMBYhRowzBs165d586ds7e3v3Xr1vgPo+7u7qKiIoFAwOfzExMTVSoVQohMJp8/f37r1q1EVwcmPohRMAilUrlp06ZffvnF2dmZx+MxmUyiK9LW2NjI5/Px6CwpKVEoFOomKpVKJpN7e3vJZHJaWlpYWBiBdQJjADEKBtff3x8dHZ2SksJkMnk8nrOzM9EVIaFQqI7OiooK9V9dExOTBQsWsFgsNpsdFBQ0depUmUzGZDKbm5unTp3K4/Hc3GCNajCKIEbBkLq7uyMiIrKzs+fOnXvr1i07O7sxLkChUJSUlODRmZmZ2dLSom6i0+kLFixgs9ksFis4ONja2lrrtRKJJCYmJjMzc+bMmTwez8kJ1qgGowViFDxJR0dHWFhYcXHxkiVL0tPTraysRnuPXV1dt2/fxqNTIBD09PSom5ycnHx9ffHo9Pf3NzU1Hfatli5deufOHW9v78zMzLH/GQBGAmIUDEMsFgcHB9+7dy8sLCwxMdHc3FzvuxCJRPhUXSAQFBUV4eeIcEwmE5+ts1isuXPnjvSd29raQkJCysvL/fz80tLSxuBnABghiFEwvNraWg6HU1tbGx0d/csvvww7DByWSqWqqKjAo5PP51dXV6ubNA90hoeH6z6EFIlEHA5HKBSO3s8AMHIQo+Cp3L9/Pzg4uLm5efPmzT/88AOZPOIbN+RyeWlpaVpaGp/Pz87Obm9vVzcxGAw/Pz88Otlstt6TTigUcjgckUikr58BADRBjIKnVVxcHBYW1tHR8corr3z55ZdP8xKJRJKXl4fP1nk8Xl9fn7rJyckJn6qz2exFixY9Qy4Pqr6+fvLkyQODsry8PCQkpK2tbcuWLd9//72+dgcAghgFI5KdnR0REdHd3X348OEPPvhg0D6aBzoLCwvVf8EoFIqHhwcenSEhITNmzNB7eZWVlcuXL/fz87t8+TKFQtFqfYafAQCeCgbASCQnJ5uZmSGEPvzwQ3yLQqEoKys7c+bM1q1bp0+frvm3i0ajsVisN954Iz4+vr29fbRrKy4utrW1RQht375dpVIN7CAQCGg0GkLorbfeGu1igPGAGAUjdunSJTKZTCKRVq1aFR4ejgeT2pQpUzZs2PDpp5/m5eXJ5fIxri07Oxuv529/+9ugHZKTk6lUqubPAAA6ghgFz+Lbb7+lUqkWFhZ4dDKZzK1bt545c6asrGzQYeBYSklJwcfLx44dG7TD1atXKRQKiUQ6ffr0GNcGJiSIUfAseDweQsjBwSEuLk4sFhNdjrbY2FgTExOE0IkTJwbtcPbsWRKJRCaTf/zxxzGuDUw8cL4SPIvr168jhLZu3RoTE+Pg4EB0OdrWrVv3zTffkEikgwcPnj17dmAHWKMa6BHEKHgWeIxGR0cTXciQtm3bdvLkSQzD9u7de/Xq1YEdYI1qoDdED4eB4amqqkII2drajv0ZpJH65z//iRCiUqlJSUmDdjhw4ABCiMFg5OXljXFtYMKA0SgYsfj4eIRQVFQUfvxxPPvXv/7197//vb+/f/369QKBYGCHEydO7NixQyKRrFy5sry8fOwrBBMAxCgYsfE/o9d0/PjxXbt2yWSy1atXFxUVabWSSKSvv/56w4YNbW1tERERQqGQkCKBQYO7mMDIdHZ24ueUxGKxjY2NZtPmzZspFMrRo0dH4w4lXSiVyueff/7KlSuOjo5ZWVkeHh5aHfr7+9esWZOcnDx+1qgeVcH3gx/0PSjwLHA2neCfdGzAaBSMzI0bN+RyeXBwsFaGSqXS2NjYS5cuaV2NPx5QKJQLFy5ERkaKxeLly5fX1NRodaBSqbGxsSwWSygURkREtLW1EVKnHqVKUjdXb3Yrc6MV0+xK7fzv+X/S/EmP6vfFW1sULU3yJiWmJLbICQNiFIzMUDN6Lpfb19fHYrHs7e2JqGsYVCr1l19+YbPZdXV1y5cvb25u1upgaWmZkJCwcOHC8vLylStXdnV1EVKn7vqx/hcevRBRFXHp8aVOZed8i/kupi6FssJDDYd8Kn1EchHRBU5AEKNgBORyeXJyMkJo1apVWk3j/4ApHpSLFi168ODBihUrHj9+rNXBxsYmOTnZw8Pjzp07MTExvb29hNSpo9fqX7vYfpFBYVx0vdgyvyXHI6dkTolonmjLpC31/fXlPXAabRQQfakAMCTp6ekIIW9vb63tCoUCH4RWVlYSUtjTE4vFnp6eCKHAwECpVDqwQ01NDb7ASnR0dH9//9hXqIuynjJSAYlUQEruTNZqUmGq6r5q/M+e5Z6oANX21Y5xeRMVjEbBCAw15MzOzm5tbXV3dx949ma8cXBwSElJmTFjRk5Ozrp16zSXQMVNnz49NTV18uTJ169fx1eKIqTOZ/Nd23cYwpYxlkUwIrSaSIjkSnUloCYjADEKRgC/b3JgjOLxunbtWgJqGrlp06bhQZmamrp582alUvtMy+zZs5OSkmxsbH788cf9+/cTUuSzye7ORghFW4/fQysTEsQoeFrl5eVVVVWOjo5+fn5aTfgF+eP5wKiWWbNmpaSk2NraxsbG7tq1Cxtw2d/ChQtv3LhBo9FOnTr12muvEVLkM3jU9wghNMd8DtGFGBeIUfC08CHnqlWrtBaWr6qqunfv3qRJk4KCgggq7VnMnz8fD8rvvvsOvyVUS1BQUGxsrJmZ2cmTJz/88MOxr3BEMIQhhCQqCULIigwPQB1TEKPgaQ11YPTatWvIQO4N1RIYGBgXF2dmZvb5558fO3ZsYIeIiIgff/yRQqEcPnz45MmTY1/hEygwRXlv+VetX22s3ji5dPLdnrsIIXOSOUKoH+snujojQ/Q5LmAYxGIxhUIxMzOTSCRaTSEhIQihn3/+mZDCdDfs4qTnzp0jkUgkEuns2bNjXJuWTkUnt5N7RHQk9H6oZZElKkDq/75u+RrDsLnlc1EButB24cnvA2fq9cvAhg+AKAkJCUqlcsWKFVZWf5owtre3CwQCU1PTiAjtU8OGAl+cdMeOHQcPHrS2tt65c6dWh+3bt3d2dh44cGDPnj0MBmPDhg1jWV6jvDFfli+QCvjd/LzuPDkmVzcxzZgsGotNZ7PoLC9zL4SQj6VPeW85X8rfMmnLWBZp7IjOcWAY1q1bhxA6deqU1vYLFy4ghJYvX05IVXr0+eefI4QoFMrly5cH7fDWW28hhKhUanKy9iWZevew9+F3bd/trdnrVe6lOeQ0KTTxrfD9a91fL7dfbpG3DHxh7ONYVIBsim0GbVWD0ah+QYyC4fX29lpZWZFIpLq6Oq2mTZs2IYQ+//xzQgrTryNHjuBByeVyB+2An7Kn0WgCgUC/u5ar5Pnd+SebT/5F+Be7EjvN6LQqtlp2f9m7ondTJakypWzY95n32zxUgJbdX9al7NJqremrwf8AMapfsMITGB6Xy42KivLx8SkoKNDcLpfLHR0dOzo6hEKhm5sbUeXp0cGDB0+cOGFpaZmcnMxms7VaMQzbvXv32bNnbWxsMjIyFi5cqMu+2trasrOz+Xy+QCCo+n9Vzco/bvOfQZ3BoXOCaEEcOsfLwos8klPBd3vuLn2wtEXR4mzqvN1u+3yL+Qihe7334jrjqvqqGuc10si0Ob/NqeytrPWunUadpstHADg4NgqGN9Q5+lu3bnV0dMybN29iZChC6Pjx452dnd9+++3q1aszMjIWLVqk2Uoikb766iuJRHL16tUVK1bweLzZs2eP6P1FIpFAIMCjs6ioSH2LlL/U387WDj/KyaFz3KjP/n3Os5iX65F7sOFgfEf8B00fqLebkExWMlZ2Kbto5HG3BJehgxgFw8AwDI/RNWvWaDUNtd1wkUikM2fOSCSSK1euREZGDlyclEKhXLx4saurKzk5efny5TweD78BfygKhaKkpASPTj6f39jYqG6ytLT08/PjcDhBQUFBC4IYdIa+PgXTjPkr89dWRWtud65YIaYgigvVxcfSx5Zii3f4ye0nmUo22XSyvvZo5GBSD4ZRVFTk4+Pj7OxcX19PIpE0m5hMZnV1dW5urr+/P1HljYb+/v61a9dyudxp06bxeLyBq1DLZLKIiAiBQDB79mwej+fo6KjZ2t3dXVRUpB51ai4lhd8DxmazWSzWkiVLzMzMxuLzgFEGo1EwDPxGzzVr1mhlaFlZWXV1taOj45IlSwgqbbRQqdSrV69GRkbyeDx8yDl58p8Gbviae2FhYcXFxStWrMjIyOjr68vLy8Oj886dO/39f1wA7+TkhOcmm8328fHR+hrBBAAxCoYx1IFR9X30ZPIEvBfO0tLy+vXr4eHhhYWFeFDa2tpqdrCxsUlMTAwODi4uLnZ1de3s7FQ3mZqa+vv7BwUF4RN2rQgGEw9M6sGTiEQiFxcXS0vL1tZWc3NzzabAwMDc3Ny4uLiYmBiiyhttLS0twcHBlZWVgYGBqampA5+PUllZ6evrS6VSFQrFggUL8FFncHCwtbU1IQUDQsBoFDzJ9evXMQyLiIjQylCxWJyXl2dhYbFs2TKiahsDDg4OSUlJHA4nJyfn1VdfPX/+vFaH+/fvy2QyfMF8rRVbgPGYgNMxoEdDzegTEhJUKlV4ePg4fICdfs2YMSM9Pd3f3//tt98e2Ip/Pxs2bIAMNWYwGgVDkslkGRkZZDJ55cqVWk3j/8lLejRr1qzc3NyB2zEM43K5yGi+BzAUGI2CIaWkpMhkMn9//ylTpmhu7+vrS0tLI5FIAx9sZ1Tu3LnT0NAwffr0+fPnE10LIBLEKBjSUEPOtLQ0qVTq6+vr4uJCRF3jBf79TOAzbOApQYyCwalUqsTERDT0zUswk4XvAeDggicwuNzc3MDAwBkzZjx69EhzO4Zh06dPr6+vLyws1Lrl3KjU1ta6urrSaLTW1la4GcnIwWgUDG6oh30WFhbW19dPnTpVx/WNDF18fDyGYStXroQMBRCjYHBDPexTfUDQyG9qhBk9UINJPRhETU2Nq6urtbW1WCymUqmaTb6+voWFhVwuNzIykqjyCCeVSu3t7RUKRVNTk729PdHlAILBaBQMAn/YZ2RkpFaGikSioqIiOp0eGhpKTGXjQ1JSUl9fX1BQEGQoQBCjYFBPeJbyoPeGGhuY0QNNEKNAm0QiycrKolAoA6ftEB8IIaVSOdSlYMA4QYwCbVwut7+/n8Ph2NnZaW7v7u4e6t5Qo5KTk9Pa2uru7q61MD4wWhCjQNtQQ86UlJTe3t7AwEAjX0ATbl4CWiBGwZ8olcqkpCSE0OrVq7WaYEaPG+pSMGC04IIn8Ce3bt0KDQ319PSsqKjQ3K5SqZydnZubm8vLy728vIgqj3APHz50d3efNGlSc3OziQkskAYQgtEo0DLUwz5zc3Obm5uZTKYxZyj6v0vBoqKiIEOBGsQo+JOhZu4T71nKzwaObICBYFIP/nDv3j1PT087O7umpiat0Za3t3d5eXl6enp4eDhR5RHu8ePHjo6OJBJJLBbb2NgQXQ4YL2A0Cv6AnzxZtWqVVoYKhcLy8nJra2sOh0NQaeNCYmKiQqEICQmBDAWa4PgO+MNQM1ZnZ+dr1641NzebmpoSUdd4ATN6MCiY1AOEEGpvb09KSnrxxRcpFEpra6uVlRXRFY07crnc0dGxo6NDKBS6ubkRXQ4YR2A0arxEIpFAIODz+QKBoKioSKVSTZs2ra2t7cGDBz4+PkRXN+5kZWV1dHR4e3tDhgItEKNGRKlUlpaW8v+PSCRSN1lYWPj5+bW3t9fV1UVFRWVlZc2ePZvAUschuFYBDAUm9ROcTCYrLCxUjzofP36sbmIwGH5+fiwWi81mczgcMzMzuVy+du3axMREFxcXHo/n6upKXOHjzqxZs6qqqnJycgICAoiuBYwvEKMTkFgsvn37Nh6d+fn5fX196iYnJyc2m41Hp4+Pz8AV7Ht6eiIjI7Oystzd3Xk8ntajlY1WeXm5t7e3o6NjY2MjmQzXt4A/gUn9WDsiOkIhUd5zek+/bysUCvHxJp/Pr6ioUP86UigULy8vPDpDQ0OnT5/+5PexsLC4fv16eHh4QUHBihUrMjMzbW1t9VuqIcIvBVu9ejVkKBgIRqP6163qTu9Kz5fltyna6GS6t4X3auvVtpTfw4hSSKGSqT0Le3TcixyTF8gKsruzeVJe2XNlVUVV6iYrK6uAgAB8yBkQEECj0Ub65i0tLSEhIRUVFQEBAampqXQ6XcdqDV1QUFBOTs6vv/468Bl/AECM6tn5tvOHGg61KFo0N1pTrD91+XSH3Q6kW4xKVdJiWbGgW8CX8nlSXqeyE9+++PvF9T/XL168GB91+vn5aT384xnU19dzOJxHjx4tW7YsISHBmJ9/KRaLnZ2dTUxMWlpa4FIwMBDEqD59Jv7sQP0BEiJtst30ot2LrlTXTmUnV8L9d/O/ZSpZtkd2AC1gpDFaL6/nSXnZ0myelFfWW6bElPh2EiLNMZ/DprNZdBabzGbaMPX+caqqqjgcTlNT09q1a69cuWK0i3GcO3du586dUVFRN27cILoWMB4Z6T+M0XC/7/6hhkMIoc+mffbfDv+t3h5AC4ixjinpKQmgPe0ZXmGfkN/NF0gFfCn/t97f1NtNSCa+lr4sOotNY4dZhdmbjO7z1Nzd3VNSUkJDQ+Pi4nbt2nXu3DnjPDIINy+BJ4PRqN4cqD/wmfizUKvQjFkZT+g26GhUjslLe0r5Ur6gW3Cz62abok3dZEWx8rf0Z9FZbDqbRWNZkC1G6wMM4fbt28uWLZNKpfv37//Pf/4zxnsnXF9fn4ODg1Qqra2tdXFxIbocMB7BaFRvUiWpCKHtk7Y/Zf/Hysc8KY8v5QukgnxZfj/Wr25ypbr+Plunsb0svMiEriDj7+8fFxe3evXqL774ws7O7r333iOwmLGXnp7e1dXl6+sLGQqGAjGqH3JMXtlbiRBaQlvylC+51nFtR80O/M8UEsXL3AuPTg6d40YdX7cbLl269Keffnruuefef/99Op3+j3/8g+iKxg7M6MGwIEb1o0PZoUIqhJCjieNTvoRD54RahXLoHBaNFUgLZFAYo1mgrmJiYs6dO7dt27ZDhw7Z2Njs3r2b6IrGAoZhCQkJCGIUPBHEqH5g6PdDzCSkfV/QUGaazXzyUdTx5oUXXujs7Ny/f//LL7/MYDA2btxIdEWjrqioqL6+3tnZedGiRUTXAsYvYzzxOhqsKdZ4gLYp24btbLheffXV999/X6lUbt26lcvlEl3OqFM/S3ngXbMAqEGM6ocZyYxpxkQIFcuKia5ldL3zzjuvv/56f3//c889x+PxiC5ndMGBUfA0IEb1JswqDCH08+OfiS5k1H300Ud79uyRyWTR0dGFhYVElzNaRCJRYWEhjUYLCwsjuhYwrkGM6s1L9i+REOnXjl+5kgk+2yWRSKdOndq0aVNnZ2dkZKTWE+0njPj4eAzDIiIizM3Nia4FjGsQo3qz2HLxXx3/iiFsvXD9B00fiOQihJASUz7oe3C06ei+un1EF6hPFArlhx9+iIqKamlpiYiIePToEdEV6R/M6MFTgruY9EmFVIcaDp0Un8TvfKeT6f1YP35d/SSTSQ3eDeZkc32t8DQeGPTipEql8u7duzweLzw8fO7cuVqtMpnMwcGht7e3oaHBsD4XGHtwwZM+kRH5+NTju+12X358OV+W36potSBbuFHdAumB623Wm5PNEUJ77PeYkCbI1665OGlERERmZuakSZOILupJBn0WwLFjxwbGaEpKikwmCwwMhAwFw5og/57HFU9zz3ec3hmq9fT002NZzGhjMBhJSUkhISF3796NiopKS0sbb4uTisVigUDA4/Gys7MLCwvlcrm6yd3dncViLV68eOCrYEYPnh5M6oEeNDQ0cDic6urqpUuXJiQkEH5O5gnPAvDw8MBXZQ0JCZkxY8agL1epVFOnTm1qaiorKxs4UAVAC8Qo0I+HDx9yOJzGxsaYmJirV6+O8eKkCoXi3r17eG5mZmbW1dWpm2g02sKFC/Ho5HA4NjY2w75bbm5uYGCgq6trdXX1aFYNJgiY1AP9mDlzZnJycmho6LVr13bu3Hn+/PnRXpxUKpUWFxfj0cnj8To7O9VNU6ZM0eVZAEePHkUILV26VM8VgwkKYhTozbx58xITE5ctW/bDDz8wGIwvvvhC77tobGzMz8/HozMvL0/zQCeTycQfP8Visby8vHS5fTM9PR0h5OnpqYeKgRGAST3Qs5s3b65ataq3t/fdd9/Vy+Kkmgc6f/tN41kAJiYLFizAozMsLMzeXqdnAahUqtLS0g8//DA7O7uuro5EIkkkkvF2ugyMTxCjQP/i4+M3bNigUCg++eSTZ1icVKFQlJSU4NF58+bNtjaNZwFYWfn7+6tHnRYWOj0LQC6Xl5aW4jtKT09vb29XN+3cufPbb7/V5c2B8YAYBaPiwoUL27ZtwzDszJkze/bsGba/RCLJy8tTjzp7e3vVTU5OTnhostnsRYsW6XjItbW1VX3daEFBQX//Hw8dcHNzc3BwmDVr1saNG9esWaPLXoBRgRgFo+XLL7989dVXKRTKxYsXN23aNFS3+Pj4w4cPa12W5O3tzeFw8OjU/ekdIpFIHZ2FhYWDXv8UHBzs6uqq446AcYJTTGC07Nu3r729/ciRI1u3brWysoqKihq0m5mZ2W+//WZpablo0SI80Vgslo53QymVysrKSjw6s7Kyampq1E2aO2Kz2ba2trrsCAAEo1Ew2t54442PP/7YwsIiKSkpODh4YAeZTFZaWurr62tqaqrLjrq7u4uKivDo5PP5HR0d6iZHR0c/Pz88OpcsWWJmZqbLjgDQAjEKRheGYS+//PJXX33FYDBu3rzp6+urxzdvamq6c+cOHp137tzRPNCpx+ufAHgyiFEw6lQq1ZYtW3766Sd7e/usrKw5c+bo8m5D3eipef1TSEiIo+PTPlsQAB1BjIKxIJfL161bd+PGjalTp/L5/BGdzNG8/ikjI6O1tVXdRKfTFyxYoD5HZG1trf/SARgOxCgYIz09PStXrrx165a7u3tWVpaTk9MTOnd1dd2+fRuPToFA0NPzx/KsTk5Ovr6+eHT6+/vreEQVAN1BjIKxI5FIli5dmp+f7+HhkZiYyGQyNVs1L0sqKipSqVTqJs0DnbDkEhhvIEbBmGptbQ0ICHj48CGdTq+oqMjLyysrK6uqquLz+ZrLKWke6AwPD7ezsyOwZgCeDGIUjLWCgoKAgACFQqG13c7OLigoiM1ms9nsxYsXj3RZJgCIAjEKCJCenr527VqpVEqhUGbPnv3SSw9DJrgAAAA7SURBVC/p5UZPAAgBMQqIoVQqa2pqtA6PAmCIIEYBAEAnMIcCAACdQIwCAIBOIEYBAEAnEKMAAKCT/w+9g4Igj9esVwAAANV6VFh0cmRraXRQS0wgcmRraXQgMjAyMy4wMy4yAAB4nHu/b+09BiDgZYAAJiDmhOIGRjaHDCDNzIzM0AAxWBA0moQggwKQZkSluBkYM5gYmRKYmDOYmFkSWFgzmFjZGJjZGZg4GFgZEkQYgYrYGFhZmJkYxctAGqCuYeD817HA/rrm6v0gDk9U8D7fJ9fAbMEjc/ev2yQKZjsH+uzXuBFpD2JbT9e071o2A8zOVblh773zpC2IHdbj6aAV8dAOxC5sfLmf6/sPsBqNGJ0Ds9RzweaIAQBiAC5CESMeSwAAASx6VFh0TU9MIHJka2l0IDIwMjMuMDMuMgAAeJx9UttuwzAIfc9X8AO1DMYEHtukmqapibRl+4dJfdz/a5CqcytZgyD5cjjmQAYIe5/fvn/gz2geBoD8z2dm8FVyzsMFYgGn88vrAtN2PN1PpvVz2T7A3HP4M/K4rZf7CcIEmKgyKsIBUykjIUNOebeWSg485ERZimkgZVRl6iBLIJ2zOKtETlUeq3aQfOMcTRGr32vNVmsHWB2YkwixsJeLRlV7T8uuRlQF92tTtt7DI0xXKAnZ0Pw4MWck6QA1gC5GiUmKcxvXXKyDtB1JSawg1ZBlnqE90vMyP83gNpXTusxtKi4TqPWePUprMEe0LobX1ivfgLSWoMfYlAe3Nn3oVNZEcCQ8FvpYVuzvv5mvh19/BIUWmR9xDwAAAJp6VFh0U01JTEVTIHJka2l0IDIwMjMuMDMuMgAAeJwljrsNxEAIRFu50Jb2EMPPIIcuZVOX4OIP7yUTvPnAdU/MuV33/peJz7MpwQo1mMwYEuMERWagCVda5TiZIsTCBggl3uTLdFQC3ql0LvdmoBTrBVCZsy0iKu113NOO1RSKUsjLSkIz1ppwaJ/qRhyZ9n4hblhE9RCM/fkBxggoNaFVxogAAAAASUVORK5CYII=", "text/plain": [ - "" + "" ] }, - "execution_count": 24, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -470,7 +470,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 7, "id": "185f1e0d-5b00-4c0a-b6f6-1addcdeabca9", "metadata": {}, "outputs": [ @@ -481,7 +481,7 @@ " 'NIBR||polyhalogenated_aromate_min(1)||1||0||0']" ] }, - "execution_count": 25, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -509,7 +509,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 8, "id": "33e47547-a054-4157-954c-bdf05a9e5f0b", "metadata": {}, "outputs": [], diff --git a/medchem/complexity/_filter.py b/medchem/complexity/_filter.py index 51140b9..d71b6c0 100644 --- a/medchem/complexity/_filter.py +++ b/medchem/complexity/_filter.py @@ -124,7 +124,7 @@ def __call__(self, mol: dm.Mol): mol: input molecule """ mw = dm.descriptors.mw(mol) - ind = np.digitize(mw, self.filter_selection_df.mw_bins.tolist(), right=True) + ind = np.digitize(mw, self.filter_selection_df["mw_bins"], right=True) fn = ComplexityFilter.COMPLEXITY_FNS[self.complexity_metric] threshold = self.filter_selection_df[self.complexity_metric].values[ind] diff --git a/medchem/rules/_rule_filter.py b/medchem/rules/_rule_filter.py index 3413b3d..0d2673b 100644 --- a/medchem/rules/_rule_filter.py +++ b/medchem/rules/_rule_filter.py @@ -4,6 +4,7 @@ from typing import List from typing import Sequence from typing import Dict +from typing import cast import functools @@ -12,6 +13,7 @@ from medchem.utils import loader +from ..utils.func import get_function_name from . import basic_rules @@ -71,6 +73,7 @@ def _build_rules( for rule_name, rule_fn in zip(_rule_list_names, rule_list): if isinstance(rule_fn, str): rule = getattr(basic_rules, rule_fn, None) + if rule is None: raise ValueError(f"Rule {rule_fn} not found") @@ -84,7 +87,7 @@ def _build_rules( if isinstance(rule_fn, str): rule_name = rule_fn else: - rule_name = rule.__name__ + rule_name = get_function_name(rule_fn) rules[rule_name] = rule diff --git a/medchem/utils/func.py b/medchem/utils/func.py new file mode 100644 index 0000000..fefa744 --- /dev/null +++ b/medchem/utils/func.py @@ -0,0 +1,18 @@ +from typing import Callable +from typing import Union + +import types +import functools + + +def get_function_name(fn: Union[types.FunctionType, Callable, object]) -> str: + """Get the name of a function""" + + if isinstance(fn, functools.partial): + fn = fn.func + if isinstance(fn, types.FunctionType): + return fn.__name__ + elif isinstance(fn, object): + return type(fn).__name__ + + raise ValueError(f"Cannot find name of input function: {fn}") From d4cf439d7cd6e5b054e6cfa0281c7af672369790 Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Sun, 9 Jul 2023 15:42:19 -0400 Subject: [PATCH 19/31] review take 2 --- medchem/catalogs/_catalogs.py | 4 +- medchem/data/common_alerts_collection.csv | 110 +++++++++++----------- medchem/rules/_rule_filter.py | 8 +- medchem/rules/_utils.py | 1 - medchem/structural/_common.py | 2 +- tests/test_catalogs.py | 2 +- tests/test_structural.py | 19 ++-- 7 files changed, 75 insertions(+), 71 deletions(-) diff --git a/medchem/catalogs/_catalogs.py b/medchem/catalogs/_catalogs.py index b8a84af..20d70df 100644 --- a/medchem/catalogs/_catalogs.py +++ b/medchem/catalogs/_catalogs.py @@ -216,8 +216,8 @@ def bms(): @staticmethod @functools.lru_cache(maxsize=32) - def glaxo(): - return NamedCatalogs.alerts(subset=["Glaxo"]) + def gsk(): + return NamedCatalogs.alerts(subset=["GSK"]) @staticmethod @functools.lru_cache(maxsize=32) diff --git a/medchem/data/common_alerts_collection.csv b/medchem/data/common_alerts_collection.csv index e9bab84..9dc1798 100644 --- a/medchem/data/common_alerts_collection.csv +++ b/medchem/data/common_alerts_collection.csv @@ -1,59 +1,59 @@ ,rule_id,rule_set,description,smarts,rule_set_name,priority,mincount,source,catalog_description -0,0,1,R1 Reactive alkyl halides,"[Br,Cl,I][CX4;CH,CH2]",Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -1,1,1,R2 Acid halides,"[S,C](=[O,S])[F,Br,Cl,I]",Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -2,2,1,R3 Carbazides,O=CN=[N+]=[N-],Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -3,3,1,R4 Sulphate esters,"COS(=O)O[C,c]",Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -4,4,1,R5 Sulphonates,"COS(=O)(=O)[C,c]",Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -5,5,1,R6 Acid anhydrides,C(=O)OC(=O),Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -6,6,1,R7 Peroxides,OO,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -7,7,1,R8 Pentafluorophenyl esters,C(=O)Oc1c(F)c(F)c(F)c(F)c1(F),Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -8,8,1,R9 Paranitrophenyl esters,C(=O)Oc1ccc(N(=O)~[OX1])cc1,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -9,9,1,R10 esters of HOBT,C(=O)Onnn,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -10,10,1,R11 Isocyanates & Isothiocyanates,"N=C=[S,O]",Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -11,11,1,R12 Triflates,OS(=O)(=O)C(F)(F)F,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -12,12,1,R13 lawesson's reagent and derivatives,P(=S)(S)S,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -13,13,1,R14 phosphoramides,NP(=O)(N)N,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -14,14,1,R15 Aromatic azides,cN=[N+]=[N-],Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -15,15,1,R16 beta carbonyl quaternary Nitrogen,"C(=O)C[N+,n+]",Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -16,16,1,R17 acylhydrazide,[N;R0][N;R0]C(=O),Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -17,17,1,"R18 Quaternary C, Cl, I, P or S","[C+,Cl+,I+,P+,S+]",Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -18,18,1,R19 Phosphoranes,C=P,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -19,19,1,R20 Chloramidines,[Cl]C([C&R0])=N,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -20,20,1,R21 Nitroso,[N&D2](=O),Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -21,21,1,R22 P/S Halides,"[P,S][Cl,Br,F,I]",Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -22,22,1,R23 Carbodiimide,N=C=N,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -23,23,1,R24 Isonitrile,[N+]#[C-],Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -24,24,1,R25 Triacyloximes,C(=O)N(C(=O))OC(=O),Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -25,25,1,R26 Cyanohydrins,N#CC[OH],Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -26,26,1,R27 Acyl cyanides,N#CC(=O),Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -27,27,1,R28 Sulfonyl cyanides,S(=O)(=O)C#N,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -28,28,1,R29 Cyanophosphonates,P(OCC)(OCC)(=O)C#N,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -29,29,1,R30 Azocyanamides,[N;R0]=[N;R0]C#N,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -30,30,1,R31 Azoalkanals,[N;R0]=[N;R0]CC=O,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -31,31,1,I1 Aliphatic methylene chains 7 or more long,[CD2;R0][CD2;R0][CD2;R0][CD2;R0][CD2;R0][CD2;R0][CD2;R0],Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -32,32,1,I2 Compounds with 4 or more acidic groups,"[C,S,P](=O)[OH].[C,S,P](=O)[OH].[C,S,P](=O)[OH].[C,S,P](=O)[OH]",Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -33,33,1,I3 Crown ethers,[O;R1][C;R1][C;R1][O;R1][C;R1][C;R1][O;R1],Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -34,34,1,I4 Disulphides,SS,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -35,35,1,I5 Thiols,[SH],Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -36,36,1,"I6 Epoxides, Thioepoxides, Aziridines","C1[O,S,N]C1",Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -37,37,1,"I7 2,4,5 trihydroxyphenyl",c([OH])c([OH])c([OH]),Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -38,38,1,"I8 2,3,4 trihydroxyphenyl",c([OH])c([OH])cc([OH]),Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -39,39,1,I9 Hydrazothiourea,N=NC(=S)N,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -40,40,1,I10 Thiocyanate,SC#N,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -41,41,1,I11 Benzylic quaternary Nitrogen,cC[N+],Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -42,42,1,I12 Thioesters,"C[O,S;R0][C;R0](=S)",Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -43,43,1,I13 Cyanamides,N[CH2]C#N,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -44,44,1,I14 Four membered lactones,C1(=O)OCC1,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -45,45,1,I15 Di and Triphosphates,P(=O)([OH])OP(=O)[OH],Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -46,46,1,I16 Betalactams,N1CCC1=O,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -47,47,1,N1 Quinones,O=C1[#6]~[#6]C(=O)[#6]~[#6]1,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -48,48,1,N2 Polyenes,C=CC=CC=CC=C,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -49,49,1,N3 Saponin derivatives,O1CCCCC1OC2CCC3CCCCC3C2,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -50,50,1,N4 Cytochalasin derivatives,O=C1NCC2CCCCC21,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -51,51,1,N5 Cycloheximide derivatives,O=C1CCCC(N1)=O,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -52,52,1,N6 Monensin derivatives,O1CCCCC1C2CCCO2,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -53,53,1,N7 Cyanidin derivatives,[OH]c1cc([OH])cc2=[O+]C(=C([OH])Cc21)c3cc([OH])c([OH])cc3,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters -54,54,1,N8 Squalestatin derivatives,C12OCCC(O1)CC2,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +0,0,1,R1 Reactive alkyl halides,"[Br,Cl,I][CX4;CH,CH2]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +1,1,1,R2 Acid halides,"[S,C](=[O,S])[F,Br,Cl,I]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +2,2,1,R3 Carbazides,O=CN=[N+]=[N-],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +3,3,1,R4 Sulphate esters,"COS(=O)O[C,c]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +4,4,1,R5 Sulphonates,"COS(=O)(=O)[C,c]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +5,5,1,R6 Acid anhydrides,C(=O)OC(=O),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +6,6,1,R7 Peroxides,OO,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +7,7,1,R8 Pentafluorophenyl esters,C(=O)Oc1c(F)c(F)c(F)c(F)c1(F),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +8,8,1,R9 Paranitrophenyl esters,C(=O)Oc1ccc(N(=O)~[OX1])cc1,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +9,9,1,R10 esters of HOBT,C(=O)Onnn,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +10,10,1,R11 Isocyanates & Isothiocyanates,"N=C=[S,O]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +11,11,1,R12 Triflates,OS(=O)(=O)C(F)(F)F,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +12,12,1,R13 lawesson's reagent and derivatives,P(=S)(S)S,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +13,13,1,R14 phosphoramides,NP(=O)(N)N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +14,14,1,R15 Aromatic azides,cN=[N+]=[N-],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +15,15,1,R16 beta carbonyl quaternary Nitrogen,"C(=O)C[N+,n+]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +16,16,1,R17 acylhydrazide,[N;R0][N;R0]C(=O),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +17,17,1,"R18 Quaternary C, Cl, I, P or S","[C+,Cl+,I+,P+,S+]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +18,18,1,R19 Phosphoranes,C=P,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +19,19,1,R20 Chloramidines,[Cl]C([C&R0])=N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +20,20,1,R21 Nitroso,[N&D2](=O),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +21,21,1,R22 P/S Halides,"[P,S][Cl,Br,F,I]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +22,22,1,R23 Carbodiimide,N=C=N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +23,23,1,R24 Isonitrile,[N+]#[C-],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +24,24,1,R25 Triacyloximes,C(=O)N(C(=O))OC(=O),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +25,25,1,R26 Cyanohydrins,N#CC[OH],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +26,26,1,R27 Acyl cyanides,N#CC(=O),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +27,27,1,R28 Sulfonyl cyanides,S(=O)(=O)C#N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +28,28,1,R29 Cyanophosphonates,P(OCC)(OCC)(=O)C#N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +29,29,1,R30 Azocyanamides,[N;R0]=[N;R0]C#N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +30,30,1,R31 Azoalkanals,[N;R0]=[N;R0]CC=O,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +31,31,1,I1 Aliphatic methylene chains 7 or more long,[CD2;R0][CD2;R0][CD2;R0][CD2;R0][CD2;R0][CD2;R0][CD2;R0],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +32,32,1,I2 Compounds with 4 or more acidic groups,"[C,S,P](=O)[OH].[C,S,P](=O)[OH].[C,S,P](=O)[OH].[C,S,P](=O)[OH]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +33,33,1,I3 Crown ethers,[O;R1][C;R1][C;R1][O;R1][C;R1][C;R1][O;R1],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +34,34,1,I4 Disulphides,SS,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +35,35,1,I5 Thiols,[SH],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +36,36,1,"I6 Epoxides, Thioepoxides, Aziridines","C1[O,S,N]C1",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +37,37,1,"I7 2,4,5 trihydroxyphenyl",c([OH])c([OH])c([OH]),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +38,38,1,"I8 2,3,4 trihydroxyphenyl",c([OH])c([OH])cc([OH]),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +39,39,1,I9 Hydrazothiourea,N=NC(=S)N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +40,40,1,I10 Thiocyanate,SC#N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +41,41,1,I11 Benzylic quaternary Nitrogen,cC[N+],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +42,42,1,I12 Thioesters,"C[O,S;R0][C;R0](=S)",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +43,43,1,I13 Cyanamides,N[CH2]C#N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +44,44,1,I14 Four membered lactones,C1(=O)OCC1,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +45,45,1,I15 Di and Triphosphates,P(=O)([OH])OP(=O)[OH],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +46,46,1,I16 Betalactams,N1CCC1=O,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +47,47,1,N1 Quinones,O=C1[#6]~[#6]C(=O)[#6]~[#6]1,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +48,48,1,N2 Polyenes,C=CC=CC=CC=C,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +49,49,1,N3 Saponin derivatives,O1CCCCC1OC2CCC3CCCCC3C2,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +50,50,1,N4 Cytochalasin derivatives,O=C1NCC2CCCCC21,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +51,51,1,N5 Cycloheximide derivatives,O=C1CCCC(N1)=O,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +52,52,1,N6 Monensin derivatives,O1CCCCC1C2CCCO2,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +53,53,1,N7 Cyanidin derivatives,[OH]c1cc([OH])cc2=[O+]C(=C([OH])Cc21)c3cc([OH])c([OH])cc3,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +54,54,1,N8 Squalestatin derivatives,C12OCCC(O1)CC2,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters 55,55,2,> 2 ester groups,"C(=O)O[C,H1].C(=O)O[C,H1].C(=O)O[C,H1]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters 56,56,2,2-halo pyridine,"n1c([F,Cl,Br,I])cccc1",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters 57,57,2,acid halide,"C(=O)[Cl,Br,I,F]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters diff --git a/medchem/rules/_rule_filter.py b/medchem/rules/_rule_filter.py index 0d2673b..3b6e1ca 100644 --- a/medchem/rules/_rule_filter.py +++ b/medchem/rules/_rule_filter.py @@ -69,6 +69,10 @@ def _build_rules( else: _rule_list_names = rule_list_names + # If rule_list_names is provided, we check whether the list is unique + if len(set(_rule_list_names)) != len(_rule_list_names): + raise ValueError("rule_list_names must be unique") + rules = {} for rule_name, rule_fn in zip(_rule_list_names, rule_list): if isinstance(rule_fn, str): @@ -156,7 +160,9 @@ def _rule_fn(mol: Union[str, dm.Mol]): datum["pass_all"] = True datum["pass_any"] = False for rule_name, rule_fn in self.rules.items(): - datum[rule_name] = rule_fn(mol) + # Do the computation + datum[rule_name] = rule_fn(mol, **props) + datum["pass_all"] &= datum[rule_name] datum["pass_any"] |= datum[rule_name] diff --git a/medchem/rules/_utils.py b/medchem/rules/_utils.py index 0de2847..7c707fc 100644 --- a/medchem/rules/_utils.py +++ b/medchem/rules/_utils.py @@ -5,7 +5,6 @@ from rdkit.Chem.rdmolops import ReplaceCore from rdkit.Chem.rdmolops import GetMolFrags - from rdkit.Chem.Scaffolds import MurckoScaffold from loguru import logger diff --git a/medchem/structural/_common.py b/medchem/structural/_common.py index 25a2007..65d2463 100644 --- a/medchem/structural/_common.py +++ b/medchem/structural/_common.py @@ -35,7 +35,7 @@ def __init__( alerts_db_path = get_data_path(filename="common_alerts_collection.csv") if alerts_set is None: - alerts_set = ["BMS", "Dundee", "Glaxo"] + alerts_set = ["BMS"] elif isinstance(alerts_set, str): alerts_set = [alerts_set] diff --git a/tests/test_catalogs.py b/tests/test_catalogs.py index 2d54f52..3eeaf47 100644 --- a/tests/test_catalogs.py +++ b/tests/test_catalogs.py @@ -47,7 +47,7 @@ def test_NamedCatalogs(): "dnabinder", "dundee", "electrophilic", - "glaxo", + "gsk", "gst_hitters", "his_hitters", "hitters", diff --git a/tests/test_structural.py b/tests/test_structural.py index 1e27d23..dd19775 100644 --- a/tests/test_structural.py +++ b/tests/test_structural.py @@ -9,22 +9,21 @@ def test_common_alerts(): alerts = mc.structural.CommonAlertsFilters() - data = dm.data.solubility() + data = dm.data.freesolv() data = data.iloc[:50] + data["mol"] = data["smiles"].apply(dm.to_mol) + results = alerts(mols=data["mol"].tolist(), n_jobs=-1, scheduler="auto") - assert results["pass_filter"].sum() == 29 + assert results["pass_filter"].sum() == 44 assert results["reasons"].unique().tolist() == [ None, - "Aliphatic long chain", - "isolated alkene", - "Aliphatic long chain;isolated alkene", - "I1 Aliphatic methylene chains 7 or more long;Aliphatic long chain;isolated alkene", - "polyene", - "triple bond", - "Aliphatic long chain;triple bond", - "I1 Aliphatic methylene chains 7 or more long;Aliphatic long chain;triple bond", + "halogen_heteroatom;sulfonyl_halide", + "primary_halide_sulfate", + "non_ring_CH2O_acetal;phosphorus_sulfur_bond", + "aldehyde", + "gte_10_carbon_sb_chain;gte_8_CF2_or_CH2", ] assert set(results.columns.tolist()) == {"mol", "pass_filter", "status", "reasons"} From 0c9695f2ee31ab15dd2dd33a562d223fb50bb142 Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Sun, 9 Jul 2023 16:05:40 -0400 Subject: [PATCH 20/31] review take 3 --- docs/api/medchem.structural.md | 2 +- docs/tutorials/Structural_Filters.ipynb | 4 +- medchem/complexity/_filter.py | 1 - medchem/structural/demerits/__init__.py | 2 +- medchem/structural/demerits/_demerits.py | 2 +- medchem/structural/demerits/_lilly.py | 6 ++- medchem/utils/smarts.py | 56 +++--------------------- tests/test_structural.py | 8 ++-- tests/test_utils_smarts_utils.py | 21 --------- 9 files changed, 18 insertions(+), 84 deletions(-) diff --git a/docs/api/medchem.structural.md b/docs/api/medchem.structural.md index 1a3eb1e..126a860 100644 --- a/docs/api/medchem.structural.md +++ b/docs/api/medchem.structural.md @@ -2,4 +2,4 @@ ::: medchem.structural.CommonAlertsFilters ::: medchem.structural.NIBRFilters -::: medchem.structural.demerits.DemeritsFilters +::: medchem.structural.demerits.LillyDemeritsFilters diff --git a/docs/tutorials/Structural_Filters.ipynb b/docs/tutorials/Structural_Filters.ipynb index 7795661..304b4d5 100644 --- a/docs/tutorials/Structural_Filters.ipynb +++ b/docs/tutorials/Structural_Filters.ipynb @@ -2967,9 +2967,9 @@ "metadata": {}, "outputs": [], "source": [ - "from medchem.structural.demerits import DemeritsFilters\n", + "from medchem.structural.demerits import LillyDemeritsFilters\n", "\n", - "dfilter = DemeritsFilters()" + "dfilter = LillyDemeritsFilters()" ] }, { diff --git a/medchem/complexity/_filter.py b/medchem/complexity/_filter.py index d71b6c0..03803d5 100644 --- a/medchem/complexity/_filter.py +++ b/medchem/complexity/_filter.py @@ -19,7 +19,6 @@ class ComplexityFilter: """Complexity filters. - To recover the original complexity score, use `threshold_stats_file = "zinc_12"`. The threshold have been re-calculated using the original new zinc-15 and focusing only on commercially available compounds. """ diff --git a/medchem/structural/demerits/__init__.py b/medchem/structural/demerits/__init__.py index 2fe32f5..3d31b6b 100644 --- a/medchem/structural/demerits/__init__.py +++ b/medchem/structural/demerits/__init__.py @@ -1 +1 @@ -from ._demerits import DemeritsFilters +from ._demerits import LillyDemeritsFilters diff --git a/medchem/structural/demerits/_demerits.py b/medchem/structural/demerits/_demerits.py index 4612b21..b347be0 100644 --- a/medchem/structural/demerits/_demerits.py +++ b/medchem/structural/demerits/_demerits.py @@ -23,7 +23,7 @@ BIN2PATH = find_lilly_binaries() -class DemeritsFilters: +class LillyDemeritsFilters: def __init__( self, mc_first_pass_options: Optional[str] = None, diff --git a/medchem/structural/demerits/_lilly.py b/medchem/structural/demerits/_lilly.py index aa0cb2d..09b249d 100644 --- a/medchem/structural/demerits/_lilly.py +++ b/medchem/structural/demerits/_lilly.py @@ -3,6 +3,8 @@ import shutil import subprocess +from loguru import logger + import pandas as pd @@ -53,7 +55,7 @@ def run_cmd(cmd, shell=False): """Run command""" res = subprocess.run(cmd, capture_output=True, shell=shell, check=False) if res.returncode != 0: - print("".join(res.stderr.decode("utf-8"))) - print(" ".join(cmd)) + logger.error("".join(res.stderr.decode("utf-8"))) + logger.error(" ".join(cmd)) res.check_returncode() return res diff --git a/medchem/utils/smarts.py b/medchem/utils/smarts.py index b1af759..6a4aeea 100644 --- a/medchem/utils/smarts.py +++ b/medchem/utils/smarts.py @@ -184,64 +184,18 @@ def atom_in_env(cls, *smarts_strs: str, include_atoms: bool = False, union: bool smarts: smarts pattern matching the group/environment """ - smarts_strs = list(smarts_strs) + _smarts_strs = list(smarts_strs) if include_atoms: - smarts_strs = [f"[*:99]{sm}" for sm in smarts_strs] + _smarts_strs = [f"[*:99]{sm}" for sm in _smarts_strs] - smarts_strs = [f"$({sm})" for sm in smarts_strs] + _smarts_strs = [f"$({sm})" for sm in _smarts_strs] if union: - query = ",".join(smarts_strs) + query = ",".join(_smarts_strs) else: - query = ";".join(smarts_strs) + query = ";".join(_smarts_strs) if query: query = f"[{query}]" return query - - @classmethod - def different_fragment(cls, *smarts_strs: str) -> str: - """ - Returns a new query that match patterns that are in different fragments. - - !!! warning - This feature is not supported yet by RDKit. See https://github.com/rdkit/rdkit/issues/1261 - - Args: - smarts_strs: list of input patterns defining the fragments - - Example: - matching two oxygens in a molecule will work with '[#8].[#8]', but if you want the - oxygens to be in DIFFERENT fragments, then build the query with: - >>> SMARTSUtils.different_fragment('[#8]', '[#8]') - - Returns: - smarts: smarts pattern matching patterns that are in different fragments - """ - - query = ".".join(smarts_strs) - if query: - query = f"({query})" - return query - - @classmethod - def same_fragment(cls, *smarts_strs: str) -> str: - """ - Returns a new query that match patterns that are in THE SAME fragment (component) - - !!! warning - This feature is not supported yet by RDKit. See https://github.com/rdkit/rdkit/issues/1261 - - Args: - smarts_strs: list of input patterns defining the fragments - - Example: - matching two oxygens in a molecule will work with '[#8].[#8]', but if you want the - oxygens to be in the SAME fragment, then build the query with: - >>> SMARTSUtils.same_fragment('[#8]', '[#8]') - - Returns: - smarts: smarts pattern matching patterns that are in the same component - """ - return ".".join([f"({sm})" for sm in smarts_strs]) diff --git a/tests/test_structural.py b/tests/test_structural.py index dd19775..b734af8 100644 --- a/tests/test_structural.py +++ b/tests/test_structural.py @@ -3,7 +3,7 @@ import medchem as mc import datamol as dm -from medchem.structural.demerits import DemeritsFilters +from medchem.structural.demerits import LillyDemeritsFilters def test_common_alerts(): @@ -85,7 +85,7 @@ def test_nibr_invalid(): def test_demerits(): - dfilters = DemeritsFilters() + dfilters = LillyDemeritsFilters() data = dm.data.solubility() data = data.sample(50, random_state=20) @@ -118,7 +118,7 @@ def test_demerits_config(): "noapdm": False, } - dfilters = DemeritsFilters(**test_config) + dfilters = LillyDemeritsFilters(**test_config) data = dm.data.solubility() data = data.sample(50, random_state=20) @@ -138,7 +138,7 @@ def test_demerits_config(): def test_demerits_invalid(): - dfilters = DemeritsFilters() + dfilters = LillyDemeritsFilters() with pytest.raises(ValueError): dfilters(mols=[None, "CC9888", "CCCCO"]) diff --git a/tests/test_utils_smarts_utils.py b/tests/test_utils_smarts_utils.py index e8a56e0..8df222c 100644 --- a/tests/test_utils_smarts_utils.py +++ b/tests/test_utils_smarts_utils.py @@ -86,27 +86,6 @@ def test_long_chain(): assert chain3_out == [True, True, False, False, False, False] -def test_smarts_fragment(): - smiles = ["COCC(O)=O", "OCCO", "O.CCO.O"] - mols = [dm.to_mol(x) for x in smiles] - mols = [cast(dm.Mol, x) for x in mols] - - query1 = SMARTSUtils.same_fragment("[8]", "[8]", "[8]") - query2 = SMARTSUtils.different_fragment("[8]", "[8]", "[8]") - - assert query1 == "([8]).([8]).([8])" - assert query2 == "([8].[8].[8])" - - # NOTE(hadim): below tests will only pass once support by RDKit is added - # See https://github.com/rdkit/rdkit/issues/1261 - - # query1_out = [m.HasSubstructMatch(dm.from_smarts(query1)) for m in mols] - # query2_out = [m.HasSubstructMatch(dm.from_smarts(query2)) for m in mols] - - # assert query1_out == [True, False, False] - # assert query2_out == [False, False, True] - - def test_atom_in_env(): mol = dm.to_mol("c1[c:1](OC)cc(F)cc1") mol = cast(dm.Mol, mol) From 4b603ec77a6cd0d8b00d3d0ab70c53979759070b Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Sun, 9 Jul 2023 16:19:08 -0400 Subject: [PATCH 21/31] review take 4 --- docs/api/medchem.structural.md | 2 +- docs/tutorials/Structural_Filters.ipynb | 4 +- medchem/data/common_alerts_collection.csv | 4918 ++++++++--------- medchem/structural/_common.py | 21 +- medchem/structural/_nibr.py | 3 +- .../{demerits => lilly_demerits}/__init__.py | 0 .../{demerits => lilly_demerits}/_demerits.py | 0 .../{demerits => lilly_demerits}/_lilly.py | 0 tests/test_structural.py | 10 +- 9 files changed, 2486 insertions(+), 2472 deletions(-) rename medchem/structural/{demerits => lilly_demerits}/__init__.py (100%) rename medchem/structural/{demerits => lilly_demerits}/_demerits.py (100%) rename medchem/structural/{demerits => lilly_demerits}/_lilly.py (100%) diff --git a/docs/api/medchem.structural.md b/docs/api/medchem.structural.md index 126a860..6a9d7e7 100644 --- a/docs/api/medchem.structural.md +++ b/docs/api/medchem.structural.md @@ -2,4 +2,4 @@ ::: medchem.structural.CommonAlertsFilters ::: medchem.structural.NIBRFilters -::: medchem.structural.demerits.LillyDemeritsFilters +::: medchem.structural.lilly_demerits.LillyDemeritsFilters diff --git a/docs/tutorials/Structural_Filters.ipynb b/docs/tutorials/Structural_Filters.ipynb index 304b4d5..ca4074f 100644 --- a/docs/tutorials/Structural_Filters.ipynb +++ b/docs/tutorials/Structural_Filters.ipynb @@ -2615,7 +2615,7 @@ "id": "66799f01-c9fc-41bf-bd0f-3d4b4c38eecd", "metadata": {}, "source": [ - "## Demerits Filters" + "## Lilly Demerits Filters" ] }, { @@ -2967,7 +2967,7 @@ "metadata": {}, "outputs": [], "source": [ - "from medchem.structural.demerits import LillyDemeritsFilters\n", + "from medchem.structural.lilly_demerits import LillyDemeritsFilters\n", "\n", "dfilter = LillyDemeritsFilters()" ] diff --git a/medchem/data/common_alerts_collection.csv b/medchem/data/common_alerts_collection.csv index 9dc1798..3df03ac 100644 --- a/medchem/data/common_alerts_collection.csv +++ b/medchem/data/common_alerts_collection.csv @@ -1,2459 +1,2459 @@ -,rule_id,rule_set,description,smarts,rule_set_name,priority,mincount,source,catalog_description -0,0,1,R1 Reactive alkyl halides,"[Br,Cl,I][CX4;CH,CH2]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -1,1,1,R2 Acid halides,"[S,C](=[O,S])[F,Br,Cl,I]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -2,2,1,R3 Carbazides,O=CN=[N+]=[N-],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -3,3,1,R4 Sulphate esters,"COS(=O)O[C,c]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -4,4,1,R5 Sulphonates,"COS(=O)(=O)[C,c]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -5,5,1,R6 Acid anhydrides,C(=O)OC(=O),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -6,6,1,R7 Peroxides,OO,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -7,7,1,R8 Pentafluorophenyl esters,C(=O)Oc1c(F)c(F)c(F)c(F)c1(F),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -8,8,1,R9 Paranitrophenyl esters,C(=O)Oc1ccc(N(=O)~[OX1])cc1,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -9,9,1,R10 esters of HOBT,C(=O)Onnn,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -10,10,1,R11 Isocyanates & Isothiocyanates,"N=C=[S,O]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -11,11,1,R12 Triflates,OS(=O)(=O)C(F)(F)F,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -12,12,1,R13 lawesson's reagent and derivatives,P(=S)(S)S,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -13,13,1,R14 phosphoramides,NP(=O)(N)N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -14,14,1,R15 Aromatic azides,cN=[N+]=[N-],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -15,15,1,R16 beta carbonyl quaternary Nitrogen,"C(=O)C[N+,n+]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -16,16,1,R17 acylhydrazide,[N;R0][N;R0]C(=O),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -17,17,1,"R18 Quaternary C, Cl, I, P or S","[C+,Cl+,I+,P+,S+]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -18,18,1,R19 Phosphoranes,C=P,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -19,19,1,R20 Chloramidines,[Cl]C([C&R0])=N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -20,20,1,R21 Nitroso,[N&D2](=O),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -21,21,1,R22 P/S Halides,"[P,S][Cl,Br,F,I]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -22,22,1,R23 Carbodiimide,N=C=N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -23,23,1,R24 Isonitrile,[N+]#[C-],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -24,24,1,R25 Triacyloximes,C(=O)N(C(=O))OC(=O),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -25,25,1,R26 Cyanohydrins,N#CC[OH],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -26,26,1,R27 Acyl cyanides,N#CC(=O),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -27,27,1,R28 Sulfonyl cyanides,S(=O)(=O)C#N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -28,28,1,R29 Cyanophosphonates,P(OCC)(OCC)(=O)C#N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -29,29,1,R30 Azocyanamides,[N;R0]=[N;R0]C#N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -30,30,1,R31 Azoalkanals,[N;R0]=[N;R0]CC=O,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -31,31,1,I1 Aliphatic methylene chains 7 or more long,[CD2;R0][CD2;R0][CD2;R0][CD2;R0][CD2;R0][CD2;R0][CD2;R0],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -32,32,1,I2 Compounds with 4 or more acidic groups,"[C,S,P](=O)[OH].[C,S,P](=O)[OH].[C,S,P](=O)[OH].[C,S,P](=O)[OH]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -33,33,1,I3 Crown ethers,[O;R1][C;R1][C;R1][O;R1][C;R1][C;R1][O;R1],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -34,34,1,I4 Disulphides,SS,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -35,35,1,I5 Thiols,[SH],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -36,36,1,"I6 Epoxides, Thioepoxides, Aziridines","C1[O,S,N]C1",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -37,37,1,"I7 2,4,5 trihydroxyphenyl",c([OH])c([OH])c([OH]),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -38,38,1,"I8 2,3,4 trihydroxyphenyl",c([OH])c([OH])cc([OH]),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -39,39,1,I9 Hydrazothiourea,N=NC(=S)N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -40,40,1,I10 Thiocyanate,SC#N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -41,41,1,I11 Benzylic quaternary Nitrogen,cC[N+],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -42,42,1,I12 Thioesters,"C[O,S;R0][C;R0](=S)",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -43,43,1,I13 Cyanamides,N[CH2]C#N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -44,44,1,I14 Four membered lactones,C1(=O)OCC1,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -45,45,1,I15 Di and Triphosphates,P(=O)([OH])OP(=O)[OH],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -46,46,1,I16 Betalactams,N1CCC1=O,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -47,47,1,N1 Quinones,O=C1[#6]~[#6]C(=O)[#6]~[#6]1,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -48,48,1,N2 Polyenes,C=CC=CC=CC=C,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -49,49,1,N3 Saponin derivatives,O1CCCCC1OC2CCC3CCCCC3C2,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -50,50,1,N4 Cytochalasin derivatives,O=C1NCC2CCCCC21,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -51,51,1,N5 Cycloheximide derivatives,O=C1CCCC(N1)=O,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -52,52,1,N6 Monensin derivatives,O1CCCCC1C2CCCO2,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -53,53,1,N7 Cyanidin derivatives,[OH]c1cc([OH])cc2=[O+]C(=C([OH])Cc21)c3cc([OH])c([OH])cc3,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -54,54,1,N8 Squalestatin derivatives,C12OCCC(O1)CC2,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -55,55,2,> 2 ester groups,"C(=O)O[C,H1].C(=O)O[C,H1].C(=O)O[C,H1]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -56,56,2,2-halo pyridine,"n1c([F,Cl,Br,I])cccc1",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -57,57,2,acid halide,"C(=O)[Cl,Br,I,F]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -58,58,2,acyclic C=C-O,C=[C!r]O,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -59,59,2,acyl cyanide,N#CC(=O),Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -60,60,2,acyl hydrazine,C(=O)N[NH2],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -61,61,2,aldehyde,[CH1](=O),Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -62,62,2,Aliphatic long chain,[R0;D2][R0;D2][R0;D2][R0;D2],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -63,63,2,alkyl halide,"[CX4][Cl,Br,I]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -64,64,2,amidotetrazole,c1nnnn1C=O,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -65,65,2,aniline,c1cc([NH2])ccc1,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -66,66,2,azepane,[CH2R2]1N[CH2R2][CH2R2][CH2R2][CH2R2][CH2R2]1,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -67,67,2,Azido group,N=[N+]=[N-],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -68,68,2,Azo group,N#N,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -69,69,2,azocane,[CH2R2]1N[CH2R2][CH2R2][CH2R2][CH2R2][CH2R2][CH2R2]1,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -70,70,2,benzidine,"[cR2]1[cR2][cR2]([Nv3X3,Nv4X4])[cR2][cR2][cR2]1[cR2]2[cR2][cR2][cR2]([Nv3X3,Nv4X4])[cR2][cR2]2",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -71,71,2,beta-keto/anhydride,"[C,c](=O)[CX4,CR0X3,O][C,c](=O)",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -72,72,2,biotin analogue,C12C(NC(N1)=O)CSC2,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -73,73,2,Carbocation/anion,"[C+,c+,C-,c-]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -74,74,2,catechol,"c1c([OH])c([OH,NH2,NH])ccc1",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -75,75,2,charged oxygen or sulfur atoms,"[O+,o+,S+,s+]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -76,76,2,chinone,"C1(=[O,N])C=CC(=[O,N])C=C1",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -77,77,2,chinone,"C1(=[O,N])C(=[O,N])C=CC=C1",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -78,78,2,conjugated nitrile group,C=[C!r]C#N,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -79,79,2,crown ether,"[OR2,NR2]@[CR2]@[CR2]@[OR2,NR2]@[CR2]@[CR2]@[OR2,NR2]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -80,80,2,cumarine,c1ccc2c(c1)ccc(=O)o2,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -81,81,2,cyanamide,N[CH2]C#N,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -82,82,2,cyanate/aminonitrile/thiocyanate,"[N,O,S]C#N",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -83,83,2,cyanohydrins,N#CC[OH],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -84,84,2,cycloheptane,[CR2]1[CR2][CR2][CR2][CR2][CR2][CR2]1,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -85,85,2,cycloheptane,[CR2]1[CR2][CR2]cc[CR2][CR2]1,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -86,86,2,cyclooctane,[CR2]1[CR2][CR2][CR2][CR2][CR2][CR2][CR2]1,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -87,87,2,cyclooctane,[CR2]1[CR2][CR2]cc[CR2][CR2][CR2]1,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -88,88,2,diaminobenzene,"[cR2]1[cR2]c([N+0X3R0,nX3R0])c([N+0X3R0,nX3R0])[cR2][cR2]1",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -89,89,2,diaminobenzene,"[cR2]1[cR2]c([N+0X3R0,nX3R0])[cR2]c([N+0X3R0,nX3R0])[cR2]1",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -90,90,2,diaminobenzene,"[cR2]1[cR2]c([N+0X3R0,nX3R0])[cR2][cR2]c1([N+0X3R0,nX3R0])",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -91,91,2,diazo group,[N!R]=[N!R],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -92,92,2,diketo group,"[C,c](=O)[C,c](=O)",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -93,93,2,disulphide,SS,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -94,94,2,enamine,[CX2R0][NX3R0],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -95,95,2,ester of HOBT,C(=O)Onnn,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -96,96,2,four member lactones,C1(=O)OCC1,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -97,97,2,halogenated ring,"c1cc([Cl,Br,I,F])cc([Cl,Br,I,F])c1[Cl,Br,I,F]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -98,98,2,halogenated ring,"c1ccc([Cl,Br,I,F])c([Cl,Br,I,F])c1[Cl,Br,I,F]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -99,99,2,heavy metal,"[Hg,Fe,As,Sb,Zn,Se,se,Te,B,Si]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -100,100,2,het-C-het not in ring,"[NX3R0,NX4R0,OR0,SX2R0][CX4][NX3R0,NX4R0,OR0,SX2R0]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -101,101,2,hydantoin,C1NC(=O)NC(=O)1,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -102,102,2,hydrazine,N[NH2],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -103,103,2,hydroquinone,"[OH]c1ccc([OH,NH2,NH])cc1",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -104,104,2,hydroxamic acid,C(=O)N[OH],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -105,105,2,imine,C=[N!R],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -106,106,2,imine,"N=[CR0][N,n,O,S]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -107,107,2,iodine,I,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -108,108,2,isocyanate,N=C=O,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -109,109,2,isolated alkene,"[$([CH2]),$([CH][CX4]),$(C([CX4])[CX4])]=[$([CH2]),$([CH][CX4]),$(C([CX4])[CX4])]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -110,110,2,ketene,C=C=O,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -111,111,2,"methylidene-1,3-dithiole",S1C=CSC1=S,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -112,112,2,Michael acceptor,"C=!@CC=[O,S]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -113,113,2,Michael acceptor,"[$([CH]),$(CC)]#CC(=O)[C,c]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -114,114,2,Michael acceptor,"[$([CH]),$(CC)]#CS(=O)(=O)[C,c]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -115,115,2,Michael acceptor,C=C(C=O)C=O,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -116,116,2,Michael acceptor,"[$([CH]),$(CC)]#CC(=O)O[C,c]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -117,117,2,N oxide,"[NX2,nX3][OX1]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -118,118,2,"N-acyl-2-amino-5-mercapto-1,3,4-thiadiazole",s1c(S)nnc1NC=O,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -119,119,2,N-C-halo,"NC[F,Cl,Br,I]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -120,120,2,N-halo,"[NX3,NX4][F,Cl,Br,I]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -121,121,2,N-hydroxyl pyridine,n[OH],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -122,122,2,nitro group,[N+](=O)[O-],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -123,123,2,N-nitroso,[#7]-N=O,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -124,124,2,oxime,"[C,c]=N[OH]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -125,125,2,oxime,"[C,c]=NOC=O",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -126,126,2,Oxygen-nitrogen single bond,"[OR0,NR0][OR0,NR0]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -127,127,2,perfluorinated chain,[CX4](F)(F)[CX4](F)F,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -128,128,2,peroxide,OO,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -129,129,2,phenol ester,c1ccccc1OC(=O)[#6],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -130,130,2,phenyl carbonate,c1ccccc1OC(=O)O,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -131,131,2,phosphor,P,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -132,132,2,phthalimide,"[cR,CR]~C(=O)NC(=O)~[cR,CR]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -133,133,2,Polycyclic aromatic hydrocarbon,a1aa2a3a(a1)A=AA=A3=AA=A2,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -134,134,2,Polycyclic aromatic hydrocarbon,a21aa3a(aa1aaaa2)aaaa3,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -135,135,2,Polycyclic aromatic hydrocarbon,a31a(a2a(aa1)aaaa2)aaaa3,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -136,136,2,polyene,[CR0]=[CR0][CR0]=[CR0],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -137,137,2,quaternary nitrogen,"[s,S,c,C,n,N,o,O]~[nX3+,NX3+](~[s,S,c,C,n,N])~[s,S,c,C,n,N]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -138,138,2,quaternary nitrogen,"[s,S,c,C,n,N,o,O]~[n+,N+](~[s,S,c,C,n,N,o,O])(~[s,S,c,C,n,N,o,O])~[s,S,c,C,n,N,o,O]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -139,139,2,quaternary nitrogen,[*]=[N+]=[*],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -140,140,2,saponine derivative,O1CCCCC1OC2CCC3CCCCC3C2,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -141,141,2,silicon halogen,"[Si][F,Cl,Br,I]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -142,142,2,stilbene,c1ccccc1C=Cc2ccccc2,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -143,143,2,sulfinic acid,"[SX3](=O)[O-,OH]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -144,144,2,Sulfonic acid,"[C,c]S(=O)(=O)O[C,c]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -145,145,2,Sulfonic acid,"S(=O)(=O)[O-,OH]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -146,146,2,sulfonyl cyanide,S(=O)(=O)C#N,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -147,147,2,sulfur oxygen single bond,[SX2]O,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -148,148,2,sulphate,OS(=O)(=O)[O-],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -149,149,2,Sulphur-nitrogen single bond,[SX2H0][N],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -150,150,2,Thiobenzothiazole,c12ccccc1(SC(S)=N2),Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -151,151,2,thiobenzothiazole,c12ccccc1(SC(=S)N2),Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -152,152,2,Thiocarbonyl group,"[C,c]=S",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -153,153,2,thioester,SC=O,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -154,154,2,thiol,[S-],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -155,155,2,thiol,[SH],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -156,156,2,Three-membered heterocycle,"*1[O,S,N]*1",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -157,157,2,triflate,OS(=O)(=O)C(F)(F)F,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -158,158,2,triphenyl methylsilyl,"[SiR0,CR0](c1ccccc1)(c2ccccc2)(c3ccccc3)",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -159,159,2,triple bond,C#C,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters -160,160,3,2halo_pyrazine_3EWG,"[#7;R1]1[#6]([F,Cl,Br,I])[#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])[#7][#6][#6]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -161,161,3,2halo_pyrazine_5EWG,"[#7;R1]1[#6]([F,Cl,Br,I])[#6;!$(c-N)][#7][#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])[#6;!$(c-N)]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -162,162,3,2halo_pyridazine_3EWG,"[#7;R1]1[#6]([F,Cl,Br,I])[#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])[#6][#6][#7]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -163,163,3,2halo_pyridazine_5EWG,"[#7;R1]1[#6]([F,Cl,Br,I])[#6][#6][#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])[#7]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -164,164,3,2halo_pyridine_3EWG,"[#7;R1]1[#6;!$(c=O)]([F,Cl,Br,I])[#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])[#6;!$(c-N)][#6][#6;!$(c-N)]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -165,165,3,2halo_pyridine_5EWG,"[#7;R1]1[#6;!$(c=O)]([F,Cl,Br,I])[#6][#6;!$(c-N)][#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])[#6;!$(c=O);!$(c-N)]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -166,166,3,2halo_pyrimidine_5EWG,"[#7;R1]1[#6]([F,Cl,Br,I])[#7][#6][#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])[#6]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -167,167,3,3halo_pyridazine_2EWG,"[#7;R1]1[#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])[#6]([F,Cl,Br,I])[#6][#6][#7]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -168,168,3,3halo_pyridazine_4EWG,"[#7;R1]1[#6][#6]([F,Cl,Br,I])[#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])[#6][#7]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -169,169,3,4_pyridone_3_5_EWG,"[#7,#8,#16]1~[#6;H]~[#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])~[#6](=O)~[#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])~[#6;H]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -170,170,3,4halo_pyridine_3EWG,"[#7;R1]1[#6;!$(c=O);!$(c-N)][#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])[#6]([F,Cl,Br,I])[#6][#6;!$(c=O);!$(c-N)]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -171,171,3,4halo_pyrimidine_2_6EWG,"[#7]1[#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])[#7;R1][#6]([F,Cl,Br,I])[#6][#6]1([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -172,172,3,4halo_pyrimidine_5EWG,"[#7]1[#6][#7;R1][#6]([F,Cl,Br,I])[#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])[#6]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -173,173,3,CH2_S#O_3_ring,"[CH2]1[O,S]C1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -174,174,3,HOBT_ester,"O=C(-[!N])O[$(nnn),$([#7]-[#7]=[#7])]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -175,175,3,NO_phosphonate,P(=O)ON,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -176,176,3,acrylate,[CH2]=[C;!$(C-N);!$(C-O)]C(=O),BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -177,177,3,activated_4mem_ring,"[#6]1~[$(C(=O)),$(S(=O))]~[O,S,N]~[$(C(=O)),$(S(=O))]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -178,178,3,activated_S#O_3_ring,"C1~[O,S]~[C,N,O,S]1[a,N,O,S]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -179,179,3,activated_acetylene,"[$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O))]C#[C;!$(C-N);!$(C-n)]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -180,180,3,activated_diazo,"[N;!R]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O))])=[N;!R]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O))])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -181,181,3,activated_vinyl_ester,"O=COC=[$(C(S(=O)(=O))),$(C(C(F)(F)(F))),$(C(C#N)),$(C(N(=O)(=O))),$(C([N+](=O)[O-])),$(C(C(=O)));!$(C(N))]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -182,182,3,activated_vinyl_sulfonate,"O(-S(=O)(=O))C=[$(C(S(=O)(=O))),$(C(C(F)(F)(F))),$(C(C#N)),$(C(N(=O)(=O))),$(C([N+](=O)[O-])),$(C(C(=O)));!$(C(N))]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -183,183,3,acyclic_imide,"[C,c][C;!R](=O)[N;!R][C;!R](=O)[C,c]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -184,184,3,acyl_123_triazole,[#7;R1]1~[#7;R1]~[#7;R1](-C(=O))~[#6]~[#6]1,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -185,185,3,acyl_134_triazole,[#7]1~[#7]~[#6]~[#7](-C(=O)[!N])~[#6]1,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -186,186,3,acyl_activated_NO,"O=C(-[!N])O[$([#7;+]),$(N(C=[O,S,N])(C=[O,S,N]))]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -187,187,3,acyl_cyanide,C(=O)-C#N,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -188,188,3,acyl_imidazole,"[C;!$(C-N)](=O)[#7]1[#6;H1,$([#6]([*;!R]))][#7][#6;H1,$([#6]([*;!R]))][#6;H1,$([#6]([*;!R]))]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -189,189,3,acyl_pyrazole,"[C;!$(C-N)](=O)[#7]1[#7][#6;H1,$([#6]([*;!R]))][#6;H1,$([#6]([*;!R]))][#6;H1,$([#6]([*;!R]))]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -190,190,3,aldehyde,"[C,c][C;H1](=O)",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -191,191,3,alpha_dicarbonyl,C(=O)!@C(=O),BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -192,192,3,alpha_halo_EWG,"[$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-])]-[CH,CH2]-[Cl,Br,I,$(O(S(=O)(=O)))]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -193,193,3,alpha_halo_amine,"[F,Cl,Br,I,$(O(S(=O)(=O)))]-[CH,CH2;!$(C(F)F)]-[N,n]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -194,194,3,alpha_halo_carbonyl,"C(=O)([CH,CH2][Cl,Br,I,$(O(S(=O)(=O)))])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -195,195,3,alpha_halo_heteroatom,"[N,n,O,S;!$(S(=O)(=O))]-[CH,CH2;!$(C(F)(F))][F,Cl,Br,I,$(O(S(=O)(=O)))]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -196,196,3,alpha_halo_heteroatom_tert,"[N,n,O,S;!$(S(=O)(=O))]-C([Cl,Br,I,$(O(S(=O)(=O)))])(C)(C)",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -197,197,3,anhydride,"[$(C(=O)),$(C(=S))]-[O,S]-[$(C(=O)),$(C(=S)),$(C(=[N;!R])),$(C(=N(-[C;X4])))]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -198,198,3,aryl_phosphonate,P(=O)-[O;!R]-a,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -199,199,3,aryl_thiocarbonyl,a-[S;X2;!R]-[C;!R](=O),BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -200,200,3,azide,"[$(N#[N+]-[N-]),$([N-]=[N+]=N)]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -201,201,3,aziridine_diazirine,"[C,N]1~[C,N]~N~1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -202,202,3,azo_amino,[N]=[N;!R]-[N],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -203,203,3,azo_aryl,c[N;!R;!+]=[N;!R;!+]-c,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -204,204,3,azo_filter1,[N;!R]=[N;!R]-[N]=[*],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -205,205,3,azo_filter2,[N;!$(N-S(=O)(=O));!$(N-C=O)]-[N;!r3;!$(N-S(=O)(=O));!$(N-C=O)]-[N;!$(N-S(=O)(=O));!$(N-C=O)],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -206,206,3,azo_filter3,[N;!R]-[N;!R]-[N;!R],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -207,207,3,azo_filter4,a-N=N-[N;H2],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -208,208,3,bad_boron,"[B-,BH2,BH3,$(B(F)(F))]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -209,209,3,bad_cations,"[C+,F+,Cl+,Br+,I+,Se+]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -210,210,3,benzidine_like,c([N;!+])1ccc(c2ccc([N;!+])cc2)cc1,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -211,211,3,beta_lactone,"[#6,#15,#16]1(=O)~[#6]~[#6]~[#8,#16]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -212,212,3,betalactam,C1(=O)~[#6]~[#6]N1,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -213,213,3,betalactam_EWG,"C1(=O)~[#6]~[#6]N1([$(S(=O)(=O)[C,c,O&D2]),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)[C,c,O&D2])])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -214,214,3,bis_activated_aryl_ester,"O=[C,S]Oc1aaa([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])aa([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -215,215,3,bis_keto_olefin,"CC(=O)[$([C&H1]),$(C-F),$(C-Cl),$(C-Br),$(C-I)]=[$([C&H1]),$(C-F),$(C-Cl),$(C-Br),$(C-I)]C(=O)C",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -216,216,3,boron_warhead,"[C,c]~[#5]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -217,217,3,branched_polycyclic_aromatic,a1(a2aa(a3aaaaa3)aa(a4aaaaa4)a2)aaaaa1,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -218,218,3,carbodiimide_iso#thio#cyanate,"N=C=[N,O,S]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -219,219,3,carbonyl_halide,"O=C[F,Cl,Br,I]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -220,220,3,contains_metal,"[$([Ru]),$([Rh]),$([Se]),$([se]),$([Pd]),$([Sc]),$([Bi]),$([Sb]),$([Ag]),$([Ti]),$([Al]),$([Cd]),$([V]),$([In]),$([Cr]),$([Sn]),$([Mn]),$([La]),$([Fe]),$([Er]),$([Tm]),$([Yb]),$([Lu]),$([Hf]),$([Ta]),$([W]),$([Re]),$([Co]),$([Os]),$([Ni]),$([Ir]),$([Cu]),$([Zn]),$([Ga]),$([Ge]),$([As]),$([as]),$([Y]),$([Zr]),$([Nb]),$([Ce]),$([Pr]),$([Nd]),$([Sm]),$([Eu]),$([Gd]),$([Tb]),$([Dy]),$([Ho]),$([Pt]),$([Au]),$([Hg]),$([Tl]),$([Pb]),$([Ac]),$([Th]),$([Pa]),$([Mo]),$([U]),$([Tc]),$([Te]),$([Po]),$([At])]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -221,221,3,crown_ether,"[$([O,S,#7;R1;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][O,S,#7;R1;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][O,S,#7;R1;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18]),$([O,S,#7;R1;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][O,S,#7;R1;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][O,S,#7;R1;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18]),$([O,S,#7;R1;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][O,S,#7;R1;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][O,S,#7;R1;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18])]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -222,222,3,cyano_phosphonate,"P(O[A,a])(O[A,a])(=O)C#N",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -223,223,3,cyanohydrin,"[C;X4](-[OH,NH1,NH2,SH])(-C#N)",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -224,224,3,diamino_sulfide,"[N,n]~[S;!R;D2]~[N,n]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -225,225,3,diazo_carbonyl,"[$(N=N=C~C=O),$(N#N-C~C=O)]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -226,226,3,diazonium,a[N+]#N,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -227,227,3,dicarbonyl_sulfonamide,"[$(N(-C(=O))(-C(=O))(-S(=O))),$(n([#6](=O))([#6](=O))([#16](=O)))]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -228,228,3,disulfide_acyclic,[S;!R;X2]-[S;!R;X2],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -229,229,3,disulfonyliminoquinone,S(=O)(=O)N=C1C=CC(=NS(=O)(=O))C=C1,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -230,230,3,double_trouble_warhead,NC(C[S;D1])C([N;H1]([O;D1]))=O,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -231,231,3,flavanoid,O=C2CC(a3aaaaa3)Oa1aaaaa12,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -232,232,3,four_nitriles,C#N.C#N.C#N.C#N,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -233,233,3,gte_10_carbon_sb_chain,[C;!R]-[C;!R]-[C;!R]-[C;!R]-[C;!R]-[C;!R]-[C;!R]-[C;!R]-[C;!R]-[C;!R],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -234,234,3,gte_2_N_quats,"[N,n;H0;+;!$(N~O);!$(n~O)].[N,n;H0;+;!$(N~O);!$(n~O)]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -235,235,3,gte_2_free_phos,P([O;D1])=O.P([O;D1])=O,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -236,236,3,gte_2_sulfonic_acid,"[C,c]S(=O)(=O)[O;D1].[C,c]S(=O)(=O)[O;D1]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -237,237,3,gte_3_COOH,C(=O)[O;D1].C(=O)[O;D1].C(=O)[O;D1],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -238,238,3,gte_3_iodine,[#53].[#53].[#53],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -239,239,3,gte_4_basic_N,"[N;!$(N(=[N,O,S,C]));!$(N(S(=O)(=O)));!$(N(C(F)(F)(F)));!$(N(C#N));!$(N(C(=O)));!$(N(C(=S)));!$(N(C(=N)));!$(N(#C));!$(Nc)].[N;!$(N(=[N,O,S,C]));!$(N(S(=O)(=O)));!$(N(C(F)(F)(F)));!$(N(C#N));!$(N(C(=O)));!$(N(C(=S)));!$(N(C(=N)));!$(N(#C));!$(Nc)].[N;!$(N(=[N,O,S,C]));!$(N(S(=O)(=O)));!$(N(C(F)(F)(F)));!$(N(C#N));!$(N(C(=O)));!$(N(C(=S)));!$(N(C(=N)));!$(N(#C));!$(Nc)].[N;!$(N(=[N,O,S,C]));!$(N(S(=O)(=O)));!$(N(C(F)(F)(F)));!$(N(C#N));!$(N(C(=O)));!$(N(C(=S)));!$(N(C(=N)));!$(N(#C));!$(N-c)]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -240,240,3,gte_4_nitro,"[$([N+](=O)[O-]),$(N(=O)=O)].[$([N+](=O)[O-]),$(N(=O)=O)].[$([N+](=O)[O-]),$(N(=O)=O)].[$([N+](=O)[O-]),$(N(=O)=O)]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -241,241,3,gte_5_phenolic_OH,a[O;D1].a[O;D1].a[O;D1].a[O;D1].a[O;D1],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -242,242,3,gte_7_aliphatic_OH,C[O;D1].C[O;D1].C[O;D1].C[O;D1].C[O;D1].C[O;D1].C[O;D1],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -243,243,3,gte_7_total_hal,"[Cl,Br,I].[Cl,Br,I].[Cl,Br,I].[Cl,Br,I].[Cl,Br,I].[Cl,Br,I].[Cl,Br,I]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -244,244,3,gte_8_CF2_or_CH2,"[CH2,$(C(F)(F));R0][CH2,$(C(F)(F));R0][CH2,$(C(F)(F));R0][CH2,$(C(F)(F));R0][CH2,$(C(F)(F));R0][CH2,$(C(F)(F));R0][CH2,$(C(F)(F));R0][CH2,$(C(F)(F));R0]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -245,245,3,halo_5heterocycle_bis_EWG,"[#7,#8,#16]1[#6]([$(S(=O)(=O)),$([F,Cl]),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O))])[#6]([$(S(=O)(=O)),$([F,Cl]),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O))])[#7][#6]1([Cl,Br,I])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -246,246,3,halo_acrylate,"[$([C;H2]),$([C&H1;$(C-F)]),$([C&H1;$(C-Cl)]),$([C&H1;$(C-Br)]),$([C&H1;$(CI)]),$(C(F)F),$(C(Cl)Cl),$(C(Br)Br),$(C(I)I),$(C(F)Cl),$(C(F)Br),$(C(F)I),$(C(Cl)Br),$(C(Br)I)](=[$([C&H1;$(C(-C(=O)))]),$(C(F)(C(=O))),$(C(Cl)(C(=O))),$(C(Br)(C(=O))),$(C(I)(C(=O))),$(C(C)(C(=O))),$(C(c)(C(=O)))])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -247,247,3,halo_imino,"C(=[#7])([Cl,Br,I,$(O(S(=O)(=O)))])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -248,248,3,halo_olefin_bis_EWG,"C([Cl,Br,I,$(O(S(=O)(=O)))])=C([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -249,249,3,halo_phenolic_carbonyl,"C(=O)Oc1c([Cl,F])[cH1,$(c[F,Cl])]c([F,Cl])[cH1,$(c[F,Cl])]c1([F,Cl])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -250,250,3,halo_phenolic_sulfonyl,"S(=O)Oc1c([Cl,F])[cH1,$(c[F,Cl])]c([F,Cl])[cH1,$(c[F,Cl])]c1([F,Cl])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -251,251,3,halogen_heteroatom,"[!C;!c;!H][F,Cl,Br,I]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -252,252,3,hetero_silyl,[Si]~[!#6],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -253,253,3,hydrazine,[N;X3;!$(N-S(=O)(=O));!$(N-C(F)(F)(F));!$(N-C#N);!$(N-C(=O));!$(N-C(=S));!$(N-C(=N))]-[N;X3;!$(N-S(=O)(=O));!$(N-C(F)(F)(F));!$(N-C#N);!$(N-C(=O));!$(N-C(=S));!$(N-C(=N))],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -254,254,3,hydrazothiourea,[N;!R]=NC(=S)N,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -255,255,3,hydroxamate_warhead,C([N;H1]([O;D1]))=O,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -256,256,3,hyperval_sulfur,"[$([#16&D3]),$([#16&D4])]=,:[#6]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -257,257,3,isonitrile,[N+]#[C-],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -258,258,3,keto_def_heterocycle,"[$(c([C;!R;!$(C-[N,O,S]);!$(C-[H])](=O))1naaaa1),$(c([C;!R;!$(C-[N,O,S]);!$(C-[H])](=O))1naa[n,s,o]1)]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -259,259,3,linear_polycyclic_aromatic_I,"[$(a12aaaaa1aa3a(aa(aaaa4)a4a3)a2),$(a12aaaaa1aa3a(aaa4a3aaaa4)a2),$(a12aaaaa1a(aa5)a3a(aaa4a3a5aaa4)a2)]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -260,260,3,linear_polycyclic_aromatic_II,"[$(a12aaaa4a1a3a(aaaa3aa4)aa2),$(a12aaaaa1a3a(aaa4a3aaaa4)aa2),$(a1(a(aaaa4)a4a3a2aaaa3)a2aaaa1)]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -261,261,3,maleimide_etc,"[$([C;H1]),$(C(-[F,Cl,Br,I]))]1=[$([C;H1]),$(C(-[F,Cl,Br,I]))]C(=O)[N,O,S]C(=O)1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -262,262,3,meldrums_acid_deriv,O=C1OC(C)(C)OC(C1)=O,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -263,263,3,monofluoroacetate,"[C;H2](F)C(=O)[O,N,S]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -264,264,3,nitrone,[C;!R]=[N+][O;D1],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -265,265,3,nitrosamine,N-[N;X2](=O),BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -266,266,3,non_ring_CH2O_acetal,"[O,N,S;!$(S~O)]!@[CH2]!@[O,S,N;!$(S~O)]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -267,267,3,non_ring_acetal,"[O,N,S;!$(S~O)]!@[C;H1;X4]!@[O,N,S;!$(S~O)]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -268,268,3,non_ring_ketal,"[O,N,S;!$(S~O)]!@[C;H0;X4](!@[O,N,S;!$(S~O)])(C)",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -269,269,3,ortho_hydroiminoquinone,c1c([N;D1])c([N;D1])c[cH1][cH1]1,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -270,270,3,ortho_hydroquinone,"a1c([O,S;D1])c([O,S;D1])a[cH1][cH1]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -271,271,3,ortho_nitrophenyl_carbonyl,"[#6]1(-O-[C;!R](=[O,N;!R]))[#6]([$(N(=O)(=O)),$([N+](=O)[O-])])[#6][#6][#6][#6]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -272,272,3,ortho_quinone,"[CH1,$(C(-[Cl,Br,I]))]1=CC(=[O,N,S;!R])C(=[O,N,S])C=[CH1,$(C(-[Cl,Br,I]))]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -273,273,3,oxaziridine,"C1~[O,S]~N1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -274,274,3,oxime,[$(C=N[O;D1]);!$(C=[N+])][#6][#6],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -275,275,3,oxonium,"[o+,O+]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -276,276,3,para_hydroiminoquinone,a1[cH1]c([N;D1])[cH1]ac([N;D1])1,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -277,277,3,para_hydroquinone,"a1[cH1]c([O,S;D1])[cH1]ac([O,S;D1])1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -278,278,3,para_nitrophenyl_ester,"[#6]1(-O(-[C;!R](-[!N])(=[O,N;!R])))[#6][#6][#6]([$(N(=O)(=O)),$([N+](=O)[O-])])[#6][#6]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -279,279,3,para_quinone,"[CH1,$(C(-[Cl,Br,I]))]1=[CH1,$(C(-[Cl,Br,I]))]C(=[O,N,S])[CH1,$(C(-[Cl,Br,I]))]=[CH1,$(C(-[Cl,Br,I]))]C1(=[O,N,S])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -280,280,3,paraquat_like,[#6]1[#6][#6]([#6]2[#6][#6][#7;+][#6][#6]2)[#6][#6][#7;+]1,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -281,281,3,pentafluorophenylester,C(=O)Oc1c(F)c(F)c(F)c(F)c1(F),BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -282,282,3,perchloro_cp,C1(Cl)(Cl)C(Cl)C(Cl)=C(Cl)C1(Cl),BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -283,283,3,perhalo_dicarbonyl_phenyl,"c1(C=O)c([Br,Cl,I])c([Br,Cl,I])c([Br,Cl,I])c([Br,Cl,I])c1(C=O)",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -284,284,3,perhalo_phenyl,"c1c([Br,Cl,I])c([Br,Cl,I])c([Br,Cl,I])c([Br,Cl,I])c1([Br,Cl,I])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -285,285,3,peroxide,[#8]~[#8],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -286,286,3,phenolate_bis_EWG,"O=[C,S]Oc1aaa([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])aa([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -287,287,3,phos_serine_warhead,NC(COP(O)(O)=O)C(O)=O,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -288,288,3,phos_threonine_warhead,NC(C(C)OP(O)(O)=O)C(O)=O,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -289,289,3,phos_tyrosine_warhead,NC(Cc1ccc(OP(O)(O)=O)cc1)C(O)=O,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -290,290,3,phosphite,"[c,C]-[P;v3]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -291,291,3,phosphonium,[#15;+]~[!O],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -292,292,3,phosphorane,C=P,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -293,293,3,phosphorous_nitrogen_bond,"[#15]~[N,n]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -294,294,3,phosphorus_phosphorus_bond,P~P,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -295,295,3,phosphorus_sulfur_bond,P~S,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -296,296,3,polyene,C=[C;!R][C;!R]=[C;!R][C;!R]=[C;!R],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -297,297,3,polyhalo_phenol_a,"c1c([O;D1])c(-[Cl,Br,I])c(-[Cl,Br,I])cc1.c1c([O;D1])c(-[Cl,Br,I])c(-[Cl,Br,I])cc1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -298,298,3,polyhalo_phenol_b,"c1c([O;D1])c(-[Cl,Br,I])cc(-[Cl,Br,I])c1.c1c([O;D1])c(-[Cl,Br,I])cc(-[Cl,Br,I])c1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -299,299,3,polyhalo_phenol_c,"c1c([O;D1])ccc(-[Cl,Br,I])c(-[Cl,Br,I])1.c1c([O;D1])ccc(-[Cl,Br,I])c(-[Cl,Br,I])1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -300,300,3,polyhalo_phenol_d,"c(-[Cl,Br,I])1c([O;D1])c(-[Cl,Br,I])ccc1.c(-[Cl,Br,I])1c([O;D1])c(-[Cl,Br,I])ccc1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -301,301,3,polyhalo_phenol_e,"c1c([O;D1])ccc(-[Cl,Br,I])c(-[Cl,Br,I])1.c1c([O;D1])ccc(-[Cl,Br,I])c(-[Cl,Br,I])1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -302,302,3,polysulfide,[S;D2]-[S;D2]-[S;D2],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -303,303,3,porphyrin,"[#6;r16,r17,r18]~[#6]1~[#6]~[#6]~[#6](~[#6])~[#7]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -304,304,3,primary_halide_sulfate,"[CH2][Cl,Br,I,$(O(S(=O)(=O)[!$(N);!$([O&D1])]))]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -305,305,3,quat_N_N,"[N,n;R;+]!@[N,n]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -306,306,3,quat_N_acyl,"[N,n;+]!@C(=O)",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -307,307,3,quinone_methide,"[#6;!$([#6](-[N,O,S]))]1=[#6;!$([#6](-[N,O,S]))][#6](=[#6])[#6;!$([#6](-[N,O,S]))]=[#6;!$([#6](-[N,O,S]))][#6]1(=[O,N,S])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -308,308,3,rhodanine,C(=C)1SC(=S)NC(=O)1,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -309,309,3,secondary_halide_sulfate,"[CH;!$(C=C)][Cl,Br,I,$(O(S(=O)(=O)[!$(N);!$([O&D1])]))]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -310,310,3,sulf_D2_nitrogen,[S;D2](-[N;!$(N(=C));!$(N(-S(=O)(=O)));!$(N(-C(=O)))]),BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -311,311,3,sulf_D2_oxygen_D2,[S;D2][O;D2],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -312,312,3,sulf_D3_nitrogen,"[S;D3](-N)(-[c,C])(-[c,C])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -313,313,3,sulfite_sulfate_ester,"[C,c]OS(=O)O[C,c]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -314,314,3,sulfonium,[S+;X3;$(S-C);!$(S-[O;D1])],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -315,315,3,sulfonyl_anhydride,"[$(C(=O)),$(S(=O)(=O))][O,S](S(=O)(=O))",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -316,316,3,sulfonyl_halide,"S(=O)(=O)[F,Cl,Br,I]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -317,317,3,sulfonyl_heteroatom,"[!#6;!#1;!#11;!#19]O(S(=O)(=O)(-[C,c]))",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -318,318,3,sulphonyl_cyanide,S(=O)(=O)C#N,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -319,319,3,tertiary_halide_sulfate,"[C;X4](-[Cl,Br,I,$(O(S(=O)(=O)[!$(N);!$([O&D1])]))])(-[c,C])(-[c,C])(-[c,C])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -320,320,3,thio_hydroxamate,"[S;D2]([$(N(=C)),$(N(-S(=O)(=O))),$(N(-C(=O)))])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -321,321,3,thio_xanthate,[S;!R]-[C;!R](=[S;!R])(-[S;!R]),BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -322,322,3,thiocarbonate,"SC(=O)[O,S]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -323,323,3,thioester,"[S;!R;H0]C(=[S,O;!R])([!O;!S;!N])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -324,324,3,thiol_warhead,NC(C[S;D1])C(O)=O,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -325,325,3,thiopyrylium,"c1[S,s;+]cccc1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -326,326,3,thiosulfoxide,"[C,c][S;X3](~O)-S",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -327,327,3,triamide,"[$(N(-C(=O))(-C(=O))(-C(=O))),$(n([#6](=O))([#6](=O))([#6](=O)))]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -328,328,3,triaryl_phosphine_oxide,P(=O)(a)(a)(a),BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -329,329,3,trichloromethyl_ketone,[$(C(=O));!$(C-N);!$(C-O);!$(C-S)]C(Cl)(Cl)(Cl),BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -330,330,3,triflate,OS(=O)(=O)(C(F)(F)(F)),BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -331,331,3,trifluoroacetate_ester,C(F)(F)(F)C(=O)O,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -332,332,3,trifluoroacetate_thioester,C(F)(F)(F)C(=O)S,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -333,333,3,trifluoromethyl_ketone,[$(C(=O));!$(C-N);!$(C-O);!$(C-S)]C(F)(F)(F),BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -334,334,3,trihalovinyl_heteroatom,"C(-[Cl,Br,I])(-[Cl,Br,I])=C(-[Cl,Br,I])(-[N,O,S])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -335,335,3,trinitro_aromatic,"[$(a1aaa([$(N(=O)(=O)),$([N+](=O)[O-])])a([$(N(=O)(=O)),$([N+](=O)[O-])])a1([$(N(=O)(=O)),$([N+](=O)[O-])])),$(a1aa([$(N(=O)(=O)),$([N+](=O)[O-])])a([$(N(=O)(=O)),$([N+](=O)[O-])])aa1([$(N(=O)(=O)),$([N+](=O)[O-])])),$(a1a([$(N(=O)(=O)),$([N+](=O)[O-])])aa([$(N(=O)(=O)),$([N+](=O)[O-])])aa1([$(N(=O)(=O)),$([N+](=O)[O-])]))]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -336,336,3,trinitromethane_derivative,"C([$([N+](=O)[O-]),$(N(=O)=O)])([$([N+](=O)[O-]),$(N(=O)=O)])([$([N+](=O)[O-]),$(N(=O)=O)])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -337,337,3,tris_activated_aryl_ester,"[$(O=[C,S]Oc1a([$(S(=O)(=O)),F,$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])a([$(S(=O)(=O)),F,$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])a([$(S(=O)(=O)),F,$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])aa1),$(O=[C,S]Oc1a([$(S(=O)(=O)),F,$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])a([$(S(=O)(=O)),F,$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])aaa([$(S(=O)(=O)),F,$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])1),$(O=[C,S]Oc1a([$(S(=O)(=O)),F,$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])aa([$(S(=O)(=O)),F,$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])a([$(S(=O)(=O)),F,$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])a1),$(O=[C,S]Oc1a([$(S(=O)(=O)),F,$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])aa([$(S(=O)(=O)),F,$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])aa([$(S(=O)(=O)),F,$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])1)]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -338,338,3,trisub_bis_act_olefin,"[CH;!R;!$(C-N)]=C([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O))])([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O))])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -339,339,3,vinyl_carbonyl_EWG,"[C;!R]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])=[C;!R]([C;!R](=O))([!$([#8]);!$([#7])])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters -340,340,4,ene_six_het_A(483),[#6]-1(-[#6](~[!#6&!#1]~[#6]-[!#6&!#1]-[#6]-1=[!#6&!#1])~[!#6&!#1])=[#6;!R],PAINS,6,1,ChEMBL,PAINS filters -341,341,4,hzone_phenol_A(479),c:1:c:c(:c(:c:c:1)-[#6]=[#7]-[#7])-[O;H1],PAINS,6,1,ChEMBL,PAINS filters -342,342,4,anil_di_alk_A(478),"[C;H2]N([C;H2])c1cc([$([H]),$([C;H2]),$([O][C;H2][C;H2])])c(N)c([H])c1",PAINS,6,1,ChEMBL,PAINS filters -343,343,4,indol_3yl_alk(461),"n:1(c(c(c:2:c:1:c:c:c:c:2-[H])-[C;D4]-[H])-[$([C;H2]),$([C]=,:[!C]),$([C;H1][N]),$([C;H1]([C;H2])[N;H1][C;H2]),$([C;H1]([C;H2])[C;H2][N;H1][C;H2])])-[$([H]),$([C;H2])]",PAINS,6,1,ChEMBL,PAINS filters -344,344,4,quinone_A(370),"[!#6&!#1]=[#6]-1-[#6]=,:[#6]-[#6](=[!#6&!#1])-[#6]=,:[#6]-1",PAINS,6,1,ChEMBL,PAINS filters -345,345,4,azo_A(324),[#7;!R]=[#7],PAINS,6,1,ChEMBL,PAINS filters -346,346,4,imine_one_A(321),"[#6]-[#6](=[!#6&!#1;!R])-[#6](=[!#6&!#1;!R])-[$([#6]),$([#16](=[#8])=[#8])]",PAINS,6,1,ChEMBL,PAINS filters -347,347,4,mannich_A(296),[#7]-[C;X4]-c1ccccc1-[O;H1],PAINS,6,1,ChEMBL,PAINS filters -348,348,4,anil_di_alk_B(251),c:1:c:c(:c:c:c:1-[#7](-[#6;X4])-[#6;X4])-[#6]=[#6],PAINS,6,1,ChEMBL,PAINS filters -349,349,4,anil_di_alk_C(246),"c:1:c:c(:c:c:c:1-[#8]-[#6;X4])-[#7](-[#6;X4])-[$([#1]),$([#6;X4])]",PAINS,6,1,ChEMBL,PAINS filters -350,350,4,ene_rhod_A(235),[#7]-1-[#6](=[#16])-[#16]-[#6](=[#6])-[#6]-1=[#8],PAINS,6,1,ChEMBL,PAINS filters -351,351,4,hzone_phenol_B(215),c:1(:c:c:c(:c:c:1)-[#6]=[#7]-[#7])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters -352,352,4,ene_five_hetA1(201A),"[#6]-1(=[#6])-[#6]=[#7]-[#7,#8,#16]-[#6]-1=[#8]",PAINS,6,1,ChEMBL,PAINS filters -353,353,4,ene_five_het_A(201),[#6]-1(=[#6])-[#6]=[#7]-[!#6&!#1]-[#6]-1=[#8],PAINS,6,1,ChEMBL,PAINS filters -354,354,4,anil_di_alk_D(198),"c:1:c:c(:c:c:c:1-[#7](-[#6;X4])-[#6;X4])-[#6;X4]-[$([#8]-[#1]),$([#6]=[#6]-[#1]),$([#7]-[#6;X4])]",PAINS,6,1,ChEMBL,PAINS filters -355,355,4,imine_one_isatin(189),[#8]=[#6]-2-[#6](=!@[#7]-[#7])-c:1:c:c:c:c:c:1-[#7]-2,PAINS,6,1,ChEMBL,PAINS filters -356,356,4,anil_di_alk_E(186),"[#6](-[#1])-[#7](-[#6](-[#1])-[#1])-c:1:c(:c(:c(:c(:c:1-[#1])-[$([#1]),$([#6](-[#1])-[#1])])-[#6](-[#1])-[$([#1]),$([#6]-[#1])])-[#1])-[#1]",PAINS,6,1,ChEMBL,PAINS filters -357,357,4,thiaz_ene_A(128),"[#6]-1(=[#6](-[$([#1]),$([#6](-[#1])-[#1]),$([#6]=[#8])])-[#16]-[#6](-[#7]-1-[$([#1]),$([#6]-[#1]),$([#6]:[#6])])=[#7;!R])-[$([#6](-[#1])-[#1]),$([#6]:[#6])]",PAINS,6,1,ChEMBL,PAINS filters -358,358,4,pyrrole_A(118),n2(-[#6]:1:[!#1]:[#6]:[#6]:[#6]:[#6]:1)c(cc(c2-[#6;X4])-[#1])-[#6;X4],PAINS,6,1,ChEMBL,PAINS filters -359,359,4,catechol_A(92),c:1:c:c(:c(:c:c:1)-[#8;H1])-[#8;H1],PAINS,6,1,ChEMBL,PAINS filters -360,360,4,ene_five_het_B(90),[#6]-1(=[#6])-[#6](-[#7]=[#6]-[#16]-1)=[#8],PAINS,6,1,ChEMBL,PAINS filters -361,361,4,imine_one_fives(89),[#6]-1=[!#1]-[!#6&!#1]-[#6](-[#6]-1=[!#6&!#1;!R])=[#8],PAINS,6,1,ChEMBL,PAINS filters -362,362,4,ene_five_het_C(85),[#6]-1(-[#6](-[#6]=[#6]-[!#6&!#1]-1)=[#6])=[!#6&!#1],PAINS,6,1,ChEMBL,PAINS filters -363,363,4,hzone_pipzn(79),"CN1[C;H2][C;H2]N(N=[C;H1][#6]=,:[#6])[C;H2][C;H2]1",PAINS,6,1,ChEMBL,PAINS filters -364,364,4,keto_keto_beta_A(68),c:1-2:c(:c:c:c:c:1)-[#6](=[#8])-[#6;X4]-[#6]-2=[#8],PAINS,6,1,ChEMBL,PAINS filters -365,365,4,hzone_pyrrol(64),Cn1cccc1C=NN,PAINS,6,1,ChEMBL,PAINS filters -366,366,4,ene_one_ene_A(57),[#6]=!@[#6](-[!#1])-@[#6](=!@[!#6&!#1])-@[#6](=!@[#6])-[!#1],PAINS,6,1,ChEMBL,PAINS filters -367,367,4,cyano_ene_amine_A(56),N#CC=C(N)C(C#N)C#N,PAINS,6,1,ChEMBL,PAINS filters -368,368,4,ene_five_one_A(55),c:1-2:c(:c:c:c:c:1)-[#6](=[#8])-[#6](=[#6])-[#6]-2=[#8],PAINS,6,1,ChEMBL,PAINS filters -369,369,4,cyano_pyridone_A(54),N#Cc1ccc[#7;H1]c1=S,PAINS,6,1,ChEMBL,PAINS filters -370,370,4,anil_alk_ene(51),c:1:c:c-2:c(:c:c:1)-[#6]-3-[#6](-[#6]-[#7]-2)-[#6]-[#6]=[#6]-3,PAINS,6,1,ChEMBL,PAINS filters -371,371,4,amino_acridine_A(46),c:1:c:2:c(:c:c:c:1):n:c:3:c(:c:2-[#7]):c:c:c:c:3,PAINS,6,1,ChEMBL,PAINS filters -372,372,4,ene_five_het_D(46),[#6]-1(=[#6])-[#6](=[#8])-[#7]-[#7]-[#6]-1=[#8],PAINS,6,1,ChEMBL,PAINS filters -373,373,4,thiophene_amino_Aa(45),[H]N([H])c1sc([!#1])c([!#1])c1C=O,PAINS,6,1,ChEMBL,PAINS filters -374,374,4,ene_five_het_E(44),[#7]-[#6]=!@[#6]-2-[#6](=[#8])-c:1:c:c:c:c:c:1-[!#6&!#1]-2,PAINS,6,1,ChEMBL,PAINS filters -375,375,4,sulfonamide_A(43),"NS(=O)(=O)c1cc([F,Cl,Br,I])cc([F,Cl,Br,I])c1O",PAINS,6,1,ChEMBL,PAINS filters -376,376,4,thio_ketone(43),[#6]-[#6](=[#16])-[#6],PAINS,6,1,ChEMBL,PAINS filters -377,377,4,sulfonamide_B(41),[H]N(c1ccc([O;H1])cc1)S(=O)=O,PAINS,6,1,ChEMBL,PAINS filters -378,378,4,anil_no_alk(40),"c:1(:c(:c(:c(:c(:c:1-[#1])-[#1])-[$([#8]),$([#7]),$([#6](-[#1])-[#1])])-[#1])-[#1])-[#7](-[#1])-[#1]",PAINS,6,1,ChEMBL,PAINS filters -379,379,4,thiophene_amino_Ab(40),"[$([#1]),$([#6](-[#1])-[#1]),$([#6]:[#6])]-c:1:c(:c(:c(:s:1)-[#7](-[#1])-[#6](=[#8])-[#6])-[#6](=[#8])-[#8])-[$([#6]:1:[#6]:[#6]:[#6]:[#6]:[#6]:1),$([#6]:1:[#16]:[#6]:[#6]:[#6]:1)]",PAINS,6,1,ChEMBL,PAINS filters -380,380,4,het_pyridiniums_A(39),"[H]c1c([$([N]),$([H])])ccc2ccc[n+]([$([O;X1]),$([C;H3]),$([#6][#6]:[#6]),$([#6][#6][#8]),$([#6][#6](C)=[#8]),$([#6][#6](N)=[#8]),$([#6][#6][#6])])c12",PAINS,6,1,ChEMBL,PAINS filters -381,381,4,anthranil_one_A(38),CC(=O)c1ccccc1[#7;H1][!$([#6]=[#8])],PAINS,6,1,ChEMBL,PAINS filters -382,382,4,cyano_imine_A(37),[#7;H1][#7]=[#6](-[#6]#[#7])-[#6]=[!#6&!#1;!R],PAINS,6,1,ChEMBL,PAINS filters -383,383,4,diazox_sulfon_A(36),"[#7](-c:1:c:c:c:c:c:1)-[#16](=[#8])(=[#8])-[#6]:2:[#6]:[#6]:[#6]:[#6]:3:[#7]:[$([#8]),$([#16])]:[#7]:[#6]:2:3",PAINS,6,1,ChEMBL,PAINS filters -384,384,4,hzone_anil_di_alk(35),"[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#6](-[#1])=[#7]-[#7]-[$([#6](=[#8])-[#6](-[#1])(-[#1])-[#16]-[#6]:[#7]),$([#6](=[#8])-[#6](-[#1])(-[#1])-[!#1]:[!#1]:[#7]),$([#6](=[#8])-[#6]:[#6]-[#8]-[#1]),$([#6]:[#7]),$([#6](-[#1])(-[#1])-[#6](-[#1])-[#8]-[#1])])-[#1])-[#1]",PAINS,6,1,ChEMBL,PAINS filters -385,385,4,rhod_sat_A(33),[#7]-1-[#6](=[#16])-[#16]-[#6;X4]-[#6]-1=[#8],PAINS,6,1,ChEMBL,PAINS filters -386,386,4,hzone_enamin(30),"[#7][#7]=[#6][#6](-[$([#1]),$([#6])])=[#6]([#6])-!@[$([#7]),$([#8])]",PAINS,6,1,ChEMBL,PAINS filters -387,387,4,pyrrole_B(29),[#6;X4]c1ccc([#6]:[#6])n1c2ccccc2,PAINS,6,1,ChEMBL,PAINS filters -388,388,4,thiophene_hydroxy(28),s1ccc(c1)-[#8;H1],PAINS,6,1,ChEMBL,PAINS filters -389,389,4,cyano_pyridone_B(27),"[!#6][#6]1=,:[#7][#6]([#6])=,:[#6](C#N)[#6](=O)[#7]1",PAINS,6,1,ChEMBL,PAINS filters -390,390,4,imine_one_sixes(27),[#6]-1(-[#6](=[#8])-[#7]-[#6](=[#8])-[#7]-[#6]-1=[#8])=[#7],PAINS,6,1,ChEMBL,PAINS filters -391,391,4,dyes5A(27),"[#6]=,:[#6]:[#7]([#6])~[#6]:[#6]=,:[#6][#6]~[#6]:[#7]",PAINS,6,1,ChEMBL,PAINS filters -392,392,4,naphth_amino_A(25),"c1cc2cccc3[#7][#6]=,:[#7]c(c1)c23",PAINS,6,1,ChEMBL,PAINS filters -393,393,4,naphth_amino_B(25),[C;X4]1[N;H1]c3cccc2cccc([N;H1]1)c23,PAINS,6,1,ChEMBL,PAINS filters -394,394,4,ene_one_ester(24),[#6]-[#8]-[#6](=[#8])-[#6](-[#7][#6])=[#6]-[#6](-[#6])=[#8],PAINS,6,1,ChEMBL,PAINS filters -395,395,4,thio_dibenzo(23),"S=[#6]1[#6]=,:[#6][!#6,!#6][#6]=,:[#6]1",PAINS,6,1,ChEMBL,PAINS filters -396,396,4,cyano_cyano_A(23),"[#6](-[#6]#[#7])(-[#6]#[#7])-[#6](-[$([#6]#[#7]),$([#6]=[#7])])-[#6]#[#7]",PAINS,6,1,ChEMBL,PAINS filters -397,397,4,hzone_acyl_naphthol(22),[H]c2c([H])c([H])c1c([H])c(C(=O)NN=C)c(O)c([H])c1c2[H],PAINS,6,1,ChEMBL,PAINS filters -398,398,4,het_65_A(21),O=Cc1cnn2c([#8;H1])ccnc12,PAINS,6,1,ChEMBL,PAINS filters -399,399,4,imidazole_A(19),n:1:c(:n(:c(:c:1-c:2:c:c:c:c:c:2)-c:3:c:c:c:c:c:3)-[#1])-[#6]:[!#1],PAINS,6,1,ChEMBL,PAINS filters -400,400,4,ene_cyano_A(19),[#6](-[#6]#[#7])(-[#6]#[#7])=[#6]-c:1:c:c:c:c:c:1,PAINS,6,1,ChEMBL,PAINS filters -401,401,4,anthranil_acid_A(19),C=NNc1ccccc1C(=O)[#8;H1],PAINS,6,1,ChEMBL,PAINS filters -402,402,4,dyes3A(19),"[#6]-,:[#6]:[#7+]=,:[#6][#6]=[#6][#7][#6;X4]",PAINS,6,1,ChEMBL,PAINS filters -403,403,4,dhp_bis_amino_CN(19),"[#6]=,:[#6]C1C(C#N)=C(N)SC(N)=C1C#N",PAINS,6,1,ChEMBL,PAINS filters -404,404,4,het_6_tetrazine(18),"[#7]~[#6]:1:[#7]:[#7]:[#6](:[$([#7]),$([#6]-[#1]),$([#6]-[#7]-[#1])]:[$([#7]),$([#6]-[#7])]:1)-[$([#7]-[#1]),$([#8]-[#6](-[#1])-[#1])]",PAINS,6,1,ChEMBL,PAINS filters -405,405,4,ene_one_hal(17),"[#6]-[#6]=[#6](-[F,Cl,Br,I])-[#6](=[#8])-[#6]",PAINS,6,1,ChEMBL,PAINS filters -406,406,4,cyano_imine_B(17),N#CC(C#N)=NNc1ccccc1,PAINS,6,1,ChEMBL,PAINS filters -407,407,4,thiaz_ene_B(17),"[#6]NC(=O)-!@[#6]1=,:[#6]([$([N]),$(NC(=O)[#6]:[#6])])[#7]([$([#6;H2]-[#6;H1]=[#6;H2]),$([#6]=,:[#6])])[#6](=S)[#16]1",PAINS,6,1,ChEMBL,PAINS filters -408,408,4,ene_rhod_B(16),"[H]C([$([#6]-[#35]),$([#6]:[#6](-[#1]):[#6](-[F,Cl,Br,I]):[#6]:[#6]-[F,Cl,Br,I]),$([#6]:[#6](-[#1]):[#6](-[#1]):[#6]-[#16]-[#6](-[#1])-[#1]),$([#6]:[#6]:[#6]:[#6]:[#6]:[#6]:[#6]:[#6]:[#6]:[#6]-[#8]-[#6;H2]),$([#6]:1:[#6](-[#6;H2]):[#7](-[#6;H2]):[#6](-[#6;H2]):[#6]:1)])=C1SC(=O)[N]C1=O",PAINS,6,1,ChEMBL,PAINS filters -409,409,4,thio_carbonate_A(15),"[#7,#8]c2ccc1oc(=[#8,#16])sc1c2",PAINS,6,1,ChEMBL,PAINS filters -410,410,4,anil_di_alk_furan_A(15),[#7](-[#6](-[#1])-[#1])(-[#6](-[#1])-[#1])-c:1:c(:c(:c(:o:1)-[#6]=[#7]-[#7](-[#1])-[#6]=[!#6&!#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -411,411,4,ene_five_het_F(15),O=[#6]2[#6](=!@[#6]c1ccccc1)Sc3ccccc23,PAINS,6,1,ChEMBL,PAINS filters -412,412,4,anil_di_alk_F(14),"c:1:c:c(:c:c:c:1-[#6;X4]-c:2:c:c:c(:c:c:2)-[#7](-[$([#1]),$([#6;X4])])-[$([#1]),$([#6;X4])])-[#7](-[$([#1]),$([#6;X4])])-[$([#1]),$([#6;X4])]",PAINS,6,1,ChEMBL,PAINS filters -413,413,4,hzone_anil(14),c:1(:c(:c(:c(:c(:c:1-[#1])-[#1])-[#7](-[#1])-[#1])-[#1])-[#1])-[#6]=[#7]-[#7]-[#1],PAINS,6,1,ChEMBL,PAINS filters -414,414,4,het_5_pyrazole_OH(14),"c1(nn(c(c1-[$([#1]),$([#6]-[#1])])-[#8]-[#1])-c:2:c(:c(:c(:c(:c:2-[#1])-[#1])-[#1])-[#1])-[#1])-[#6;X4]",PAINS,6,1,ChEMBL,PAINS filters -415,415,4,het_thio_666_A(13),"c:2(:c:1-[#16]-c:3:c(-[#7](-c:1:c(:c(:c:2-[#1])-[#1])-[#1])-[$([#1]),$([#6](-[#1])(-[#1])-[#1]),$([#6](-[#1])(-[#1])-[#6]-[#1])]):c(:c(~[$([#1]),$([#6]:[#6])]):c(:c:3-[#1])-[$([#1]),$([#7](-[#1])-[#1]),$([#8]-[#6;X4])])~[$([#1]),$([#7](-[#1])-[#6;X4]),$([#6]:[#6])])-[#1]",PAINS,6,1,ChEMBL,PAINS filters -416,416,4,styrene_A(13),[#6]-2-[#6]-c:1:c(:c:c:c:c:1)-[#6](-c:3:c:c:c:c:c-2:3)=[#6]-[#6],PAINS,6,1,ChEMBL,PAINS filters -417,417,4,ene_rhod_C(13),"[#16]-1-[#6](=[#7]-[#6]:[#6])-[#7](-[$([#1]),$([#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#8]),$([#6]:[#6])])-[#6](=[#8])-[#6]-1=[#6](-[#1])-[$([#6]:[#6]:[#6]-[#17]),$([#6]:[!#6&!#1])]",PAINS,6,1,ChEMBL,PAINS filters -418,418,4,dhp_amino_CN_A(13),[#7](-[#1])(-[#1])-[#6]-1=[#6](-[#6]#[#7])-[#6](-[#1])(-[#6]:[#6])-[#6](=[#6](-[#6]=[#6])-[#8]-1)-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -419,419,4,cyano_imine_C(12),[#8]=[#16](=[#8])-[#6](-[#6]#[#7])=[#7]-[#7]-[#1],PAINS,6,1,ChEMBL,PAINS filters -420,420,4,thio_urea_A(12),c:1:c:c:c:c:c:1-[#7](-[#1])-[#6](=[#16])-[#7](-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-c:2:c:c:c:c:c:2,PAINS,6,1,ChEMBL,PAINS filters -421,421,4,thiophene_amino_B(12),"c:1:c(:c:c:c:c:1)-[#7](-[#1])-c:2:c(:c(:c(:s:2)-[$([#6]=[#8]),$([#6]#[#7]),$([#6](-[#8]-[#1])=[#6])])-[#7])-[$([#6]#[#7]),$([#6](:[#7]):[#7])]",PAINS,6,1,ChEMBL,PAINS filters -422,422,4,keto_keto_beta_B(12),[#6;X4]-1-[#6](=[#8])-[#7]-[#7]-[#6]-1=[#8],PAINS,6,1,ChEMBL,PAINS filters -423,423,4,keto_phenone_A(11),c:1:c-3:c(:c:c:c:1)-[#6]:2:[#7]:[!#1]:[#6]:[#6]:[#6]:2-[#6]-3=[#8],PAINS,6,1,ChEMBL,PAINS filters -424,424,4,cyano_pyridone_C(11),[#6]-1(-[#6](=[#6](-[#6]#[#7])-[#6](~[#8])~[#7]~[#6]-1~[#8])-[#6](-[#1])-[#1])=[#6](-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -425,425,4,thiaz_ene_C(11),"[#6]-1(=[#6](-!@[#6]=[#7])-[#16]-[#6](-[#7]-1)=[#8])-[$([F,Cl,Br,I]),$([#7+](:[#6]):[#6])]",PAINS,6,1,ChEMBL,PAINS filters -426,426,4,hzone_thiophene_A(11),"c:1:2:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1]):[!#6&!#1]:[#6](:[#6]:2-[#6](-[#1])=[#7]-[#7](-[#1])-[$([#6]:1:[#7]:[#6]:[#6](-[#1]):[#16]:1),$([#6]:[#6](-[#1]):[#6]-[#1]),$([#6]:[#7]:[#6]:[#7]:[#6]:[#7]),$([#6]:[#7]:[#7]:[#7]:[#7])])-[$([#1]),$([#8]-[#1]),$([#6](-[#1])-[#1])]",PAINS,6,1,ChEMBL,PAINS filters -427,427,4,ene_quin_methide(10),"[!#1]:[!#1]-[#6](-[$([#1]),$([#6]#[#7])])=[#6]-1-[#6]=:[#6]-[#6](=[$([#8]),$([#7;!R])])-[#6]=:[#6]-1",PAINS,6,1,ChEMBL,PAINS filters -428,428,4,het_thio_676_A(10),"c:1:c:c-2:c(:c:c:1)-[#6]-[#6](-c:3:c(-[#16]-2):c(:c(-[#1]):c(:c:3-[#1])-[$([#1]),$([#8]),$([#16;X2]),$([#6;X4]),$([#7](-[$([#1]),$([#6;X4])])-[$([#1]),$([#6;X4])])])-[#1])-[#7](-[$([#1]),$([#6;X4])])-[$([#1]),$([#6;X4])]",PAINS,6,1,ChEMBL,PAINS filters -429,429,4,ene_five_het_G(10),"[#6]-1(=[#6])-[#6](-[#7,#16,#8][#6](-[!#1])=[#7]-1)=[#8]",PAINS,6,1,ChEMBL,PAINS filters -430,430,4,acyl_het_A(9),[#7+](:[!#1]:[!#1]:[!#1])-[!#1]=[#8],PAINS,6,1,ChEMBL,PAINS filters -431,431,4,anil_di_alk_G(9),[#6;X4]-[#7](-[#6;X4])-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#6]2=:[#7][#6]:[#6]:[!#1]2)-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -432,432,4,dhp_keto_A(9),"[#7]-1(-[$([#6;X4]),$([#1])])-[#6]=:[#6](-[#6](=[#8])-[#6]:[#6]:[#6])-[#6](-[#6])-[#6](=[#6]-1-[#6](-[#1])(-[#1])-[#1])-[$([#6]=[#8]),$([#6]#[#7])]",PAINS,6,1,ChEMBL,PAINS filters -433,433,4,thio_urea_B(9),c:1:c:c:c:c:c:1-[#7](-[#1])-[#6](=[#16])-[#7](-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-c:2:c:c:c:c:c:2,PAINS,6,1,ChEMBL,PAINS filters -434,434,4,anil_alk_bim(9),c:1:3:c(:c(:c(:c(:c:1-[#1])-[#1])-[#7](-[#1])-[#6](-[#1])(-[#1])-c:2:c:c:c:c:c:2)-[#1]):n:c(-[#1]):n:3-[#6],PAINS,6,1,ChEMBL,PAINS filters -435,435,4,imine_imine_A(9),c:1:c:c-2:c(:c:c:1)-[#7]=[#6]-[#6]-2=[#7;!R],PAINS,6,1,ChEMBL,PAINS filters -436,436,4,thio_urea_C(9),c:1(:c:c:c:c:c:1)-[#7](-[#1])-[#6](=[#16])-[#7]-[#7](-[#1])-[#6](=[#8])-[#6]-2:[!#1]:[!#6&!#1]:[#6]:[#6]-2,PAINS,6,1,ChEMBL,PAINS filters -437,437,4,imine_one_fives_B(9),[#7;!R]=[#6]-2-[#6](=[#8])-c:1:c:c:c:c:c:1-[#16]-2,PAINS,6,1,ChEMBL,PAINS filters -438,438,4,dhp_amino_CN_B(9),"[$([#7](-[#1])-[#1]),$([#8]-[#1])]-[#6]-2=[#6](-[#6]#[#7])-[#6](-[#1])(-[#6]:[#6])-c:1:c(:n(-[#6]):n:c:1)-[#8]-2",PAINS,6,1,ChEMBL,PAINS filters -439,439,4,anil_OC_no_alk_A(8),[#7](-[#1])(-[#1])-c:1:c(:c(:c(:n:c:1-[#1])-[#8]-c:2:c:c:c:c:c:2)-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -440,440,4,het_thio_66_one(8),[#6](=[#8])-[#6]-1=[#6]-[#7]-c:2:c(-[#16]-1):c:c:c:c:2,PAINS,6,1,ChEMBL,PAINS filters -441,441,4,styrene_B(8),"c:1:c:c-2:c(:c:c:1)-[#6](-c:3:c(-[$([#16;X2]),$([#6;X4])]-2):c:c:c(:c:3)-[$([#1]),$([#17]),$([#6;X4])])=[#6]-[#6]",PAINS,6,1,ChEMBL,PAINS filters -442,442,4,het_thio_5_A(8),[#6](-[#1])(-[#1])-[#16;X2]-c:1:n:c(:c(:n:1-!@[#6](-[#1])-[#1])-c:2:c:c:c:c:c:2)-[#1],PAINS,6,1,ChEMBL,PAINS filters -443,443,4,anil_di_alk_ene_A(8),[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-[#6]-2=[#6](-[#1])-c:1:c(:c:c:c:c:1)-[#16;X2]-c:3:c-2:c:c:c:c:3,PAINS,6,1,ChEMBL,PAINS filters -444,444,4,ene_rhod_D(8),"[#16]-1-[#6](=!@[#7]-[$([#1]),$([#7](-[#1])-[#6]:[#6])])-[#7](-[$([#1]),$([#6]:[#7]:[#6]:[#6]:[#16])])-[#6](=[#8])-[#6]-1=[#6](-[#1])-[#6]:[#6]-[$([#17]),$([#8]-[#6]-[#1])]",PAINS,6,1,ChEMBL,PAINS filters -445,445,4,ene_rhod_E(8),[#16]-1-[#6](=[#8])-[#7]-[#6](=[#16])-[#6]-1=[#6](-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -446,446,4,anil_OH_alk_A(8),c:1:c(:c:c:c:c:1)-[#6](-[#1])(-[#1])-[#7](-[#1])-c:2:c(:c(:c(:c(:c:2-[#1])-[#1])-[#8]-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -447,447,4,pyrrole_C(8),n1(-[#6;X4])c(c(-[#1])c(c1-[#6]:[#6])-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -448,448,4,thio_urea_D(8),c:1(:c:c:c:c:c:1)-[#7](-[#1])-[#6](=[#16])-[#7]-[#7](-[#1])-c:2:c:c:c:c:c:2,PAINS,6,1,ChEMBL,PAINS filters -449,449,4,thiaz_ene_D(8),[#7](-c:1:c:c:c:c:c:1)-c2[n+]c(cs2)-c:3:c:c:c:c:c:3,PAINS,6,1,ChEMBL,PAINS filters -450,450,4,ene_rhod_F(8),n:1:c:c:c(:c:1-[#6](-[#1])-[#1])-[#6](-[#1])=[#6]-2-[#6](=[#8])-[#7]-[#6](=[!#6&!#1])-[#7]-2,PAINS,6,1,ChEMBL,PAINS filters -451,451,4,thiaz_ene_E(8),"[#6]-1(=[#6](-[#6](-[#1])(-[#6])-[#6])-[#16]-[#6](-[#7]-1-[$([#1]),$([#6](-[#1])-[#1])])=[#8])-[#16]-[#6;R]",PAINS,6,1,ChEMBL,PAINS filters -452,452,4,het_65_B(7),[!#1]:1:[!#1]-2:[!#1](:[!#1]:[!#1]:[!#1]:1)-[#7](-[#1])-[#7](-[#6]-2=[#8])-[#6],PAINS,6,1,ChEMBL,PAINS filters -453,453,4,keto_keto_beta_C(7),c:1:c:c-2:c(:c:c:1)-[#6](=[#6](-[#6]-2=[#8])-[#6])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters -454,454,4,het_66_A(7),c:2:c:c:1:n:n:c(:n:c:1:c:c:2)-[#6](-[#1])(-[#1])-[#6]=[#8],PAINS,6,1,ChEMBL,PAINS filters -455,455,4,thio_urea_E(7),c:1:c:c:c:c:c:1-[#7](-[#1])-[#6](=[#16])-[#7](-[#1])-[#6](-[#1])(-[#1])-c:2:n:c:c:c:c:2,PAINS,6,1,ChEMBL,PAINS filters -456,456,4,thiophene_amino_C(7),"[#6](-[#1])-[#6](-[#1])(-[#1])-c:1:c(:c(:c(:s:1)-[#7](-[#1])-[#6](=[#8])-[#6]-[#6]-[#6]=[#8])-[$([#6](=[#8])-[#8]),$([#6]#[#7])])-[#6](-[#1])-[#1]",PAINS,6,1,ChEMBL,PAINS filters -457,457,4,hzone_phenone(7),"[#6](-c:1:c(:c(:c(:c:c:1-[#1])-[$([#6;X4]),$([#1])])-[#1])-[#1])(-c:2:c(:c(:c(:c(:c:2-[#1])-[#1])-[$([#1]),$([#17])])-[#1])-[#1])=[$([#7]-[#8]-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1]),$([#7]-[#8]-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1]),$([#7]-[#7](-[#1])-[#6](=[#7]-[#1])-[#7](-[#1])-[#1]),$([#6](-[#1])-[#7])]",PAINS,6,1,ChEMBL,PAINS filters -458,458,4,ene_rhod_G(7),[#8](-[#1])-[#6](=[#8])-c:1:c:c(:c:c:c:1)-[#6]:[!#1]:[#6]-[#6](-[#1])=[#6]-2-[#6](=[!#6&!#1])-[#7]-[#6](=[!#6&!#1])-[!#6&!#1]-2,PAINS,6,1,ChEMBL,PAINS filters -459,459,4,ene_cyano_B(7),[#6]-1(=[#6]-[#6](-c:2:c:c(:c(:n:c-1:2)-[#7](-[#1])-[#1])-[#6]#[#7])=[#6])-[#6]#[#7],PAINS,6,1,ChEMBL,PAINS filters -460,460,4,dhp_amino_CN_C(7),[#7](-[#1])(-[#1])-[#6]-1=[#6](-[#6]#[#7])-[#6](-[#1])(-[#6]:[#6])-[#6](=[#6](-[#6]:[#6])-[#8]-1)-[#6]#[#7],PAINS,6,1,ChEMBL,PAINS filters -461,461,4,het_5_A(7),[#7]-2(-c:1:c:c:c:c:c:1)-[#7]=[#6](-[#6]=[#8])-[#6;X4]-[#6]-2=[#8],PAINS,6,1,ChEMBL,PAINS filters -462,462,4,ene_five_het_H(6),[#7]-1=[#6]-[#6](-[#6](-[#7]-1)=[#16])=[#6],PAINS,6,1,ChEMBL,PAINS filters -463,463,4,thio_amide_A(6),c1(coc(c1-[#1])-[#6](=[#16])-[#7]-2-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[!#1]-[#6](-[#1])(-[#1])-[#6]-2(-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -464,464,4,ene_cyano_C(6),[#6]=[#6](-[#6]#[#7])-[#6](=[#7]-[#1])-[#7]-[#7],PAINS,6,1,ChEMBL,PAINS filters -465,465,4,hzone_furan_A(6),"c:1(:c(:c(:c(:o:1)-[$([#1]),$([#6](-[#1])-[#1])])-[#1])-[#1])-[#6](-[$([#1]),$([#6](-[#1])-[#1])])=[#7]-[#7](-[#1])-c:2:n:c:c:s:2",PAINS,6,1,ChEMBL,PAINS filters -466,466,4,anil_di_alk_H(6),c:1(:c(:c(:c(:c(:c:1-[#7](-[#1])-[#16](=[#8])(=[#8])-[#6]:2:[#6]:[!#1]:[#6]:[#6]:[#6]:2)-[#1])-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -467,467,4,het_65_C(6),"n2c1ccccn1c(c2-[$([#6](-[!#1])=[#6](-[#1])-[#6]:[#6]),$([#6]:[#8]:[#6])])-[#7]-[#6]:[#6]",PAINS,6,1,ChEMBL,PAINS filters -468,468,4,thio_urea_F(6),[#6]-1-[#7](-[#1])-[#7](-[#1])-[#6](=[#16])-[#7]-[#7]-1-[#1],PAINS,6,1,ChEMBL,PAINS filters -469,469,4,ene_five_het_I(6),c:1(:c:c:c:o:1)-[#6](-[#1])=!@[#6]-3-[#6](=[#8])-c:2:c:c:c:c:c:2-[!#6&!#1]-3,PAINS,6,1,ChEMBL,PAINS filters -470,470,4,keto_keto_gamma(5),[#8]=[#6]-1-[#6;X4]-[#6]-[#6](=[#8])-c:2:c:c:c:c:c-1:2,PAINS,6,1,ChEMBL,PAINS filters -471,471,4,quinone_B(5),c:1:c:c-2:c(:c:c:1)-[#6](-c3cccc4noc-2c34)=[#8],PAINS,6,1,ChEMBL,PAINS filters -472,472,4,het_6_pyridone_OH(5),[#8](-[#1])-c:1:n:c(:c:c:c:1)-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters -473,473,4,hzone_naphth_A(5),"c:1:2:c(:c(:c(:c(:c:1:c(:c(:c(:c:2-[#1])-[#1])-[#6]=[#7]-[#7](-[#1])-[$([#6]:[#6]),$([#6]=[#16])])-[#1])-[#1])-[#1])-[#1])-[#1]",PAINS,6,1,ChEMBL,PAINS filters -474,474,4,thio_ester_A(5),[#6]-1=[#6](-[#16]-[#6](-[#6]=[#6]-1)=[#16])-[#7],PAINS,6,1,ChEMBL,PAINS filters -475,475,4,ene_misc_A(5),[#6]-1=[#6]-[#6](-[#8]-[#6]-1-[#8])(-[#8])-[#6],PAINS,6,1,ChEMBL,PAINS filters -476,476,4,cyano_pyridone_D(5),[#8]=[#6]-1-[#6](=[#6]-[#6](=[#7]-[#7]-1)-[#6]=[#8])-[#6]#[#7],PAINS,6,1,ChEMBL,PAINS filters -477,477,4,het_65_Db(5),C3=CN1C(=NC(=C1-[#7]-[#6])-c:2:c:c:c:c:n:2)C=C3,PAINS,6,1,ChEMBL,PAINS filters -478,478,4,het_666_A(5),[#7]N-2-c:1:c:c:c:c:c:1-[#6](=[#7])-c:3:c-2:c:c:c:c:3,PAINS,6,1,ChEMBL,PAINS filters -479,479,4,diazox_sulfon_B(5),c:1:c(:c:c:c:c:1)-[#7]-2-[#6](-[#1])-[#6](-[#1])-[#7](-[#6](-[#1])-[#6]-2-[#1])-[#16](=[#8])(=[#8])-c:3:c:c:c:c:4:n:s:n:c:3:4,PAINS,6,1,ChEMBL,PAINS filters -480,480,4,anil_NH_alk_A(5),c:1(:c(:c-2:c(:c(:c:1-[#1])-[#1])-[#7](-[#6](-[#7]-2-[#1])=[#8])-[#1])-[#1])-[#7](-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -481,481,4,sulfonamide_C(5),c:1(:c(:c-3:c(:c(:c:1-[#7](-[#1])-[#16](=[#8])(=[#8])-c:2:c:c:c(:c:c:2)-[!#6&!#1])-[#1])-[#8]-[#6](-[#8]-3)(-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -482,482,4,het_thio_N_55(5),[#6](-[#1])-[#6]:2:[#7]:[#7](-c:1:c:c:c:c:c:1):[#16]:3:[!#6&!#1]:[!#1]:[#6]:[#6]:2:3,PAINS,6,1,ChEMBL,PAINS filters -483,483,4,keto_keto_beta_D(5),[#8]=[#6]-[#6]=[#6](-[#1])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters -484,484,4,ene_rhod_H(5),[#7]-1-2-[#6](=[#7]-[#6](=[#8])-[#6](=[#7]-1)-[#6](-[#1])-[#1])-[#16]-[#6](=[#6](-[#1])-[#6]:[#6])-[#6]-2=[#8],PAINS,6,1,ChEMBL,PAINS filters -485,485,4,imine_ene_A(5),[#6]:[#6]-[#6](-[#1])=[#6](-[#1])-[#6](-[#1])=[#7]-[#7](-[#6;X4])-[#6;X4],PAINS,6,1,ChEMBL,PAINS filters -486,486,4,het_thio_656a(5),c:1:3:c(:c:c:c:c:1):c:2:n:n:c(-[#16]-[#6](-[#1])(-[#1])-[#6]=[#8]):n:c:2:n:3-[#6](-[#1])(-[#1])-[#6](-[#1])=[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -487,487,4,pyrrole_D(5),n1(-[#6])c(c(-[#1])c(c1-[#6](-[#1])(-[#1])-[#7](-[#1])-[#6](=[#16])-[#7]-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -488,488,4,pyrrole_E(5),n2(-[#6]:1:[!#1]:[!#6&!#1]:[!#1]:[#6]:1-[#1])c(c(-[#1])c(c2-[#6;X4])-[#1])-[#6;X4],PAINS,6,1,ChEMBL,PAINS filters -489,489,4,thio_urea_G(5),c:1(:c:c:c:c:c:1)-[#7](-[#1])-[#6](=[#16])-[#7]-[#7](-[#1])-[#6]([#7;R])[#7;R],PAINS,6,1,ChEMBL,PAINS filters -490,490,4,anisol_A(5),"c:1(:c(:c(:c(:c(:c:1-[$([#1]),$([#6](-[#1])-[#1])])-[#1])-[#8]-[#6](-[#1])-[#1])-[#6](-[#1])(-[#1])-[$([#7](-[#1])-[#6](=[#8])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])-[#1]),$([#6](-[#1])(-[#6](-[#1])-[#1])-[#7](-[#1])-[#6](=[#16])-[#7]-[#1])])-[#1])-[#8]-[#6](-[#1])-[#1]",PAINS,6,1,ChEMBL,PAINS filters -491,491,4,pyrrole_F(5),n2(-[#6]:1:[#6](-[#6]#[#7]):[#6]:[#6]:[!#6&!#1]:1)c(c(-[#1])c(c2)-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -492,492,4,dhp_amino_CN_D(5),[#7](-[#1])(-[#1])-[#6]-2=[#6](-[#6]#[#7])-[#6](-[#1])(-[#6]:[#6])-c:1:c(:c:c:s:1)-[#8]-2,PAINS,6,1,ChEMBL,PAINS filters -493,493,4,thiazole_amine_A(4),[#7](-[#1])-c:1:n:c(:c:s:1)-c:2:c:n:c(-[#7](-[#1])-[#1]):s:2,PAINS,6,1,ChEMBL,PAINS filters -494,494,4,het_6_imidate_A(4),[#7]=[#6]-1-[#7](-[#1])-[#6](=[#6](-[#7]-[#1])-[#7]=[#7]-1)-[#7]-[#1],PAINS,6,1,ChEMBL,PAINS filters -495,495,4,anil_OC_no_alk_B(4),c:1:c(:c:2:c(:c:c:1):c:c:c:c:2)-[#8]-c:3:c(:c(:c(:c(:c:3-[#1])-[#1])-[#7]-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -496,496,4,styrene_C(4),c:1:c:c-2:c(:c:c:1)-[#6]-[#16]-c3c(-[#6]-2=[#6])ccs3,PAINS,6,1,ChEMBL,PAINS filters -497,497,4,azulene(4),c:2:c:c:c:1:c(:c:c:c:1):c:c:2,PAINS,6,1,ChEMBL,PAINS filters -498,498,4,furan_acid_A(4),c:1(:c(:c(:c(:o:1)-[#6](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#8]-[#6]:[#6])-[#1])-[#6](=[#8])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters -499,499,4,cyano_pyridone_E(4),[!#1]:[#6]-[#6]-1=[#6](-[#1])-[#6](=[#6](-[#6]#[#7])-[#6](=[#8])-[#7]-1-[#1])-[#6]:[#8],PAINS,6,1,ChEMBL,PAINS filters -500,500,4,anil_alk_thio(4),[#6]-1-3=[#6](-[#6](-[#7]-c:2:c:c:c:c:c-1:2)(-[#6])-[#6])-[#16]-[#16]-[#6]-3=[!#1],PAINS,6,1,ChEMBL,PAINS filters -501,501,4,anil_di_alk_I(4),c:1(:c(:c(:c(:c(:c:1-[#7](-[#1])-[#6](=[#8])-c:2:c:c:c:c:c:2)-[#1])-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -502,502,4,het_thio_6_furan(4),[#6](-[#1])(-[#1])-[#16;X2]-c:1:n:n:c(:c(:n:1)-c:2:c(:c(:c(:o:2)-[#1])-[#1])-[#1])-c:3:c(:c(:c(:o:3)-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -503,503,4,anil_di_alk_ene_B(4),[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-[#6]-2=[#6]-c:1:c(:c:c:c:c:1)-[#6]-2(-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -504,504,4,imine_one_B(4),"[#7](-[#1])(-c:1:c:c:c:c:c:1)-[#7]=[#6](-[#6](=[#8])-[#6](-[#1])-[#1])-[#7](-[#1])-[$([#7]-[#1]),$([#6]:[#6])]",PAINS,6,1,ChEMBL,PAINS filters -505,505,4,anil_OC_alk_A(4),c:1:2:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1]):o:c:3:c(-[#1]):c(:c(-[#8]-[#6](-[#1])-[#1]):c(:c:2:3)-[#1])-[#7](-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -506,506,4,ene_five_het_J(4),[#16]=[#6]-1-[#7](-[#1])-[#6]=[#6]-[#6]-2=[#6]-1-[#6](=[#8])-[#8]-[#6]-2=[#6]-[#1],PAINS,6,1,ChEMBL,PAINS filters -507,507,4,pyrrole_G(4),"n2(-c:1:c(:c:c(:c(:c:1)-[#1])-[$([#7](-[#1])-[#1]),$([#6]:[#7])])-[#1])c(c(-[#1])c(c2-[#1])-[#1])-[#1]",PAINS,6,1,ChEMBL,PAINS filters -508,508,4,ene_five_het_K(4),n1(-[#6])c(c(-[#1])c(c1-[#6](-[#1])=[#6]-2-[#6](=[#8])-[!#6&!#1]-[#6]=:[!#1]-2)-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -509,509,4,cyano_ene_amine_B(4),[#6]=[#6]-[#6](-[#6]#[#7])(-[#6]#[#7])-[#6](-[#6]#[#7])=[#6]-[#7](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -510,510,4,thio_ester_B(4),"[#6]:[#6]-[#6](=[#16;X1])-[#16;X2]-[#6](-[#1])-[$([#6](-[#1])-[#1]),$([#6]:[#6])]",PAINS,6,1,ChEMBL,PAINS filters -511,511,4,ene_five_het_L(4),[#8]=[#6]-3-[#6](=!@[#6](-[#1])-c:1:c:n:c:c:1)-c:2:c:c:c:c:c:2-[#7]-3,PAINS,6,1,ChEMBL,PAINS filters -512,512,4,hzone_thiophene_B(4),"c:1(:c(:c(:c(:s:1)-[#1])-[#1])-[$([#1]),$([#6](-[#1])-[#1])])-[#6](-[#1])=[#7]-[#7](-[#1])-c:2:c:c:c:c:c:2",PAINS,6,1,ChEMBL,PAINS filters -513,513,4,dhp_amino_CN_E(4),[#6](-[#1])(-[#1])-[#16;X2]-[#6]-1=[#6](-[#6]#[#7])-[#6](-[#1])(-[#6]:[#6])-[#6](-[#6]#[#7])-[#6](=[#8])-[#7]-1,PAINS,6,1,ChEMBL,PAINS filters -514,514,4,het_5_B(4),[#7]-2(-c:1:c:c:c:c:c:1)-[#7]=[#6](-[#7](-[#1])-[#6]=[#8])-[#6](-[#1])(-[#1])-[#6]-2=[#8],PAINS,6,1,ChEMBL,PAINS filters -515,515,4,imine_imine_B(3),[#6]:[#6]-[#6](-[#1])=[#6](-[#1])-[#6](-[#1])=[#7]-[#7]=[#6],PAINS,6,1,ChEMBL,PAINS filters -516,516,4,thiazole_amine_B(3),c:1(:c:c:c(:c:c:1)-[#6](-[#1])-[#1])-c:2:c(:s:c(:n:2)-[#7](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -517,517,4,imine_ene_one_A(3),[#6]-2(-[#6]=[#7]-c:1:c:c:c:c:c:1-[#7]-2)=[#6](-[#1])-[#6]=[#8],PAINS,6,1,ChEMBL,PAINS filters -518,518,4,diazox_A(3),[#8](-c:1:c:c:c:c:c:1)-c:3:c:c:2:n:o:n:c:2:c:c:3,PAINS,6,1,ChEMBL,PAINS filters -519,519,4,ene_one_A(3),[!#1]:1:[!#1]:[!#1]:[!#1](:[!#1]:[!#1]:1)-[#6](-[#1])=[#6](-[#1])-[#6](-[#7]-c:2:c:c:c:3:c(:c:2):c:c:c(:n:3)-[#7](-[#6])-[#6])=[#8],PAINS,6,1,ChEMBL,PAINS filters -520,520,4,anil_OC_no_alk_C(3),[#7](-[#1])(-[#1])-c:1:c(:c:c:c:n:1)-[#8]-[#6](-[#1])(-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -521,521,4,thiazol_SC_A(3),[#6]-[#16;X2]-c:1:n:c(:c:s:1)-[#1],PAINS,6,1,ChEMBL,PAINS filters -522,522,4,het_666_B(3),c:1:c-3:c(:c:c:c:1)-[#7](-c:2:c:c:c:c:c:2-[#8]-3)-[#6](-[#1])(-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -523,523,4,furan_A(3),c:1(:c(:c(:c(:o:1)-[#6](-[#1])-[#1])-[#1])-[#1])-[#6](-[#1])(-[#8]-[#1])-[#6]#[#6]-[#6;X4],PAINS,6,1,ChEMBL,PAINS filters -524,524,4,colchicine_A(3),[#6]-1(-[#6](=[#6]-[#6]=[#6]-[#6]=[#6]-1)-[#7]-[#1])=[#7]-[#6],PAINS,6,1,ChEMBL,PAINS filters -525,525,4,thiophene_C(3),"[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])=[#6]-[#6](=[#8])-c:1:c(-[#16;X2]):s:c(:c:1)-[$([#6]#[#7]),$([#6]=[#8])]",PAINS,6,1,ChEMBL,PAINS filters -526,526,4,anil_OC_alk_B(3),"c:1:3:c(:c:c:c:c:1)-[#7]-2-[#6](=[#8])-[#6](=[#6](-[F,Cl,Br,I])-[#6]-2=[#8])-[#7](-[#1])-[#6]:[#6]:[#6]:[#6](-[#8]-[#6](-[#1])-[#1]):[#6]:[#6]:3",PAINS,6,1,ChEMBL,PAINS filters -527,527,4,het_thio_66_A(3),c:1-2:c(:c:c:c:c:1)-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#7]=[#6]-2-[#16;X2]-[#6](-[#1])(-[#1])-[#6](=[#8])-c:3:c:c:c:c:c:3,PAINS,6,1,ChEMBL,PAINS filters -528,528,4,rhod_sat_B(3),[#7]-2(-c:1:c:c:c:c:c:1-[#6](-[#1])-[#1])-[#6](=[#16])-[#7](-[#6](-[#1])(-[#1])-[!#1]:[!#1]:[!#1]:[!#1]:[!#1])-[#6](-[#1])(-[#1])-[#6]-2=[#8],PAINS,6,1,ChEMBL,PAINS filters -529,529,4,ene_rhod_I(3),[#7]-2(-[#6](-[#1])-[#1])-[#6](=[#16])-[#7](-[#1])-[#6](=[#6](-[#1])-c:1:c:c:c:c(:c:1)-[Br])-[#6]-2=[#8],PAINS,6,1,ChEMBL,PAINS filters -530,530,4,keto_thiophene(3),c:1(:c(:c:2:c(:s:1):c:c:c:c:2)-[#6](-[#1])-[#1])-[#6](=[#8])-[#6](-[#1])(-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -531,531,4,imine_imine_C(3),[#7](-[#6](-[#1])-[#1])(-[#6](-[#1])-[#1])-[#6](-[#1])=[#7]-[#6](-[#6](-[#1])-[#1])=[#7]-[#7](-[#6](-[#1])-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -532,532,4,het_65_pyridone_A(3),"[#6]:2(:[#6](-[#6](-[#1])-[#1]):[#6]-1:[#6](-[#7]=[#6](-[#7](-[#6]-1=[!#6&!#1;X1])-[#6](-[#1])-[$([#6](=[#8])-[#8]),$([#6]:[#6])])-[$([#1]),$([#16]-[#6](-[#1])-[#1])]):[!#6&!#1;X2]:2)-[#6](-[#1])(-[#1])-[#6](-[#1])-[#1]",PAINS,6,1,ChEMBL,PAINS filters -533,533,4,thiazole_amine_C(3),"c:1(:n:c(:c(-[#1]):s:1)-[!#1]:[!#1]:[!#1](-[$([#8]-[#6](-[#1])-[#1]),$([#6](-[#1])-[#1])]):[!#1]:[!#1])-[#7](-[#1])-[#6](-[#1])(-[#1])-c:2:c(-[#1]):c(:c(-[#1]):o:2)-[#1]",PAINS,6,1,ChEMBL,PAINS filters -534,534,4,het_thio_pyr_A(3),n:1:c(:c(:c(:c(:c:1-[#16]-[#6]-[#1])-[#6]#[#7])-c:2:c:c:c(:c:c:2)-[#8]-[#6](-[#1])-[#1])-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -535,535,4,melamine_A(3),"c:1:4:c(:n:c(:n:c:1-[#7](-[#1])-[#6](-[#1])(-[#1])-c:2:c(:c(:c(:o:2)-[#1])-[#1])-[#1])-[#7](-[#1])-c:3:c:c(:c(:c:c:3-[$([#1]),$([#6](-[#1])-[#1]),$([#16;X2]),$([#8]-[#6]-[#1]),$([#7;X3])])-[$([#1]),$([#6](-[#1])-[#1]),$([#16;X2]),$([#8]-[#6]-[#1]),$([#7;X3])])-[$([#1]),$([#6](-[#1])-[#1]),$([#16;X2]),$([#8]-[#6]-[#1]),$([#7;X3])]):c:c:c:c:4",PAINS,6,1,ChEMBL,PAINS filters -536,536,4,anil_NH_alk_B(3),[#7](-[#1])(-[#6]:1:[#6]:[#6]:[!#1]:[#6]:[#6]:1)-c:2:c:c:c(:c:c:2)-[#7](-[#1])-[#6]-[#1],PAINS,6,1,ChEMBL,PAINS filters -537,537,4,rhod_sat_C(3),[#7]-2(-c:1:c:c:c:c:c:1)-[#6](=[#7]-[#6]=[#8])-[#16]-[#6](-[#1])(-[#1])-[#6]-2=[#8],PAINS,6,1,ChEMBL,PAINS filters -538,538,4,thiophene_amino_D(3),[#6]=[#6]-[#6](=[#8])-[#7]-c:1:c(:c(:c(:s:1)-[#6](=[#8])-[#8])-[#6]-[#1])-[#6]#[#7],PAINS,6,1,ChEMBL,PAINS filters -539,539,4,anil_OC_alk_C(3),"[$([#1]),$([#6](-[#1])-[#1])]-[#8]-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1])-[#7](-[#1])-[#6](-[#1])(-[#1])-c:2:n:c:c:n:2",PAINS,6,1,ChEMBL,PAINS filters -540,540,4,het_thio_65_A(3),[#6](-[#1])(-[#1])-[#16;X2]-c3nc1c(n(nc1-[#6](-[#1])-[#1])-c:2:c:c:c:c:c:2)nn3,PAINS,6,1,ChEMBL,PAINS filters -541,541,4,het_thio_656b(3),[#6]-[#6](=[#8])-[#6](-[#1])(-[#1])-[#16;X2]-c:3:n:n:c:2:c:1:c(:c(:c(:c(:c:1:n(:c:2:n:3)-[#1])-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -542,542,4,thiazole_amine_D(3),"s:1:c(:[n+](-[#6](-[#1])-[#1]):c(:c:1-[#1])-[#6])-[#7](-[#1])-c:2:c:c:c:c:c:2[$([#6](-[#1])-[#1]),$([#6]:[#6])]",PAINS,6,1,ChEMBL,PAINS filters -543,543,4,thio_urea_H(3),[#6]-2(=[#16])-[#7](-[#6](-[#1])(-[#1])-c:1:c:c:c:o:1)-[#6](=[#7]-[#7]-2-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -544,544,4,cyano_pyridone_F(3),[#7]-2(-c:1:c:c:c:c:c:1)-[#6](=[#8])-[#6](=[#6]-[#6](=[#7]-2)-[#6]#[#7])-[#6]#[#7],PAINS,6,1,ChEMBL,PAINS filters -545,545,4,rhod_sat_D(3),[#7]-2(-c:1:c:c:c:c:c:1)-[#6](=[#8])-[#16]-[#6](-[#1])(-[#6](-[#1])(-[#1])-[#6](=[#8])-[#7](-[#1])-[#6]:[#6])-[#6]-2=[#8],PAINS,6,1,ChEMBL,PAINS filters -546,546,4,ene_rhod_J(3),"[#6](-[#1])(-[#1])-[#7]-2-[#6](=[$([#16]),$([#7])])-[!#6&!#1]-[#6](=[#6]-1-[#6](=[#6](-[#1])-[#6]:[#6]-[#7]-1-[#6](-[#1])-[#1])-[#1])-[#6]-2=[#8]",PAINS,6,1,ChEMBL,PAINS filters -547,547,4,imine_phenol_A(3),[#6]=[#7;!R]-c:1:c:c:c:c:c:1-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters -548,548,4,thio_carbonate_B(3),[#8]=[#6]-2-[#16]-c:1:c(:c(:c:c:c:1)-[#8]-[#6](-[#1])-[#1])-[#8]-2,PAINS,6,1,ChEMBL,PAINS filters -549,549,4,het_thio_N_5A(3),[#7]=[#6]-1-[#7]=[#6]-[#7]-[#16]-1,PAINS,6,1,ChEMBL,PAINS filters -550,550,4,het_thio_N_65A(3),[#7]-2-[#16]-[#6]-1=[#6](-[#6]:[#6]-[#7]-[#6]-1)-[#6]-2=[#16],PAINS,6,1,ChEMBL,PAINS filters -551,551,4,anil_di_alk_J(3),[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#6](-[#1])=[#7]-[#7]=[#6](-[#6])-[#6]:[#6])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -552,552,4,pyrrole_H(3),n1-2cccc1-[#6]=[#7](-[#6])-[#6]-[#6]-2,PAINS,6,1,ChEMBL,PAINS filters -553,553,4,ene_cyano_D(3),[#6](-[#6]#[#7])(-[#6]#[#7])=[#6](-[#16])-[#16],PAINS,6,1,ChEMBL,PAINS filters -554,554,4,cyano_cyano_B(3),[#6]-1(-[#6]#[#7])(-[#6]#[#7])-[#6](-[#1])(-[#6](=[#8])-[#6])-[#6]-1-[#1],PAINS,6,1,ChEMBL,PAINS filters -555,555,4,ene_five_het_M(3),"[#6]-1=:[#6]-[#6](-[#6](-[$([#8]),$([#16])]-1)=[#6]-[#6]=[#8])=[#8]",PAINS,6,1,ChEMBL,PAINS filters -556,556,4,cyano_ene_amine_C(3),[#6]:[#6]-[#6](=[#8])-[#7](-[#1])-[#6](=[#8])-[#6](-[#6]#[#7])=[#6](-[#1])-[#7](-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -557,557,4,thio_urea_I(3),c:1(:c:c:c:c:c:1)-[#7](-[#1])-[#6](=[#16])-[#7](-[#1])-[#7]=[#6]-c:2:c:n:c:c:2,PAINS,6,1,ChEMBL,PAINS filters -558,558,4,dhp_amino_CN_F(3),[#7](-[#1])(-[#1])-[#6]-2=[#6](-[#6]#[#7])-[#6](-[#1])(-c:1:c:c:c:s:1)-[#6](=[#6](-[#6](-[#1])-[#1])-[#8]-2)-[#6](=[#8])-[#8]-[#6],PAINS,6,1,ChEMBL,PAINS filters -559,559,4,anthranil_acid_B(3),c:1:c-3:c(:c:c(:c:1)-[#6](=[#8])-[#7](-[#1])-c:2:c(:c:c:c:c:2)-[#6](=[#8])-[#8]-[#1])-[#6](-[#7](-[#6]-3=[#8])-[#6](-[#1])-[#1])=[#8],PAINS,6,1,ChEMBL,PAINS filters -560,560,4,diazox_B(3),[Cl]-c:2:c:c:1:n:o:n:c:1:c:c:2,PAINS,6,1,ChEMBL,PAINS filters -561,561,4,thio_aldehyd_A(3),[#6]-[#6](=[#16])-[#1],PAINS,6,1,ChEMBL,PAINS filters -562,562,4,thio_amide_B(2),[#6;X4]-[#7](-[#1])-[#6](-[#6]:[#6])=[#6](-[#1])-[#6](=[#16])-[#7](-[#1])-c:1:c:c:c:c:c:1,PAINS,6,1,ChEMBL,PAINS filters -563,563,4,imidazole_B(2),[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#16]-[#6](-[#1])(-[#1])-c1cn(cn1)-[#1],PAINS,6,1,ChEMBL,PAINS filters -564,564,4,thiazole_amine_E(2),[#8]=[#6]-[#7](-[#1])-c:1:c(-[#6]:[#6]):n:c(-[#6](-[#1])(-[#1])-[#6]#[#7]):s:1,PAINS,6,1,ChEMBL,PAINS filters -565,565,4,thiazole_amine_F(2),[#6](-[#1])-[#7](-[#1])-c:1:n:c(:c:s:1)-c2cnc3n2ccs3,PAINS,6,1,ChEMBL,PAINS filters -566,566,4,thio_ester_C(2),[#7]-1-[#6](=[#8])-[#6](=[#6](-[#6])-[#16]-[#6]-1=[#16])-[#1],PAINS,6,1,ChEMBL,PAINS filters -567,567,4,ene_one_B(2),[#6](-[#16])(-[#7])=[#6](-[#1])-[#6]=[#6](-[#1])-[#6]=[#8],PAINS,6,1,ChEMBL,PAINS filters -568,568,4,quinone_C(2),[#8]=[#6]-3-c:1:c(:c:c:c:c:1)-[#6]-2=[#6](-[#8]-[#1])-[#6](=[#8])-[#7]-c:4:c-2:c-3:c:c:c:4,PAINS,6,1,ChEMBL,PAINS filters -569,569,4,keto_naphthol_A(2),"c:1:2:c:c:c:c(:c:1:c(:c:c:c:2)-[$([#8]-[#1]),$([#7](-[#1])-[#1])])-[#6](-[#6])=[#8]",PAINS,6,1,ChEMBL,PAINS filters -570,570,4,thio_amide_C(2),[#6](-[#1])(-c:1:c:c:c:c:c:1)(-c:2:c:c:c:c:c:2)-[#6](=[#16])-[#7]-[#1],PAINS,6,1,ChEMBL,PAINS filters -571,571,4,phthalimide_misc(2),[#7]-2(-[#6](=[#8])-c:1:c(:c(:c(:c(:c:1-[#1])-[#6](=[#8])-[#8]-[#1])-[#1])-[#1])-[#6]-2=[#8])-c:3:c(:c:c(:c(:c:3)-[#1])-[#8])-[#1],PAINS,6,1,ChEMBL,PAINS filters -572,572,4,sulfonamide_D(2),c:1:c:c(:c:c:c:1-[#7](-[#1])-[#16](=[#8])=[#8])-[#7](-[#1])-[#16](=[#8])=[#8],PAINS,6,1,ChEMBL,PAINS filters -573,573,4,anil_NH_alk_C(2),[#6](-[#1])-[#7](-[#1])-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1])-[#7](-[#1])-[#6]-[#1],PAINS,6,1,ChEMBL,PAINS filters -574,574,4,het_65_E(2),s1c(c(c-2c1-[#7](-[#1])-[#6](-[#6](=[#6]-2-[#1])-[#6](=[#8])-[#8]-[#1])=[#8])-[#7](-[#1])-[#1])-[#6](=[#8])-[#7]-[#1],PAINS,6,1,ChEMBL,PAINS filters -575,575,4,hzide_naphth(2),c:2(:c:1:c(:c(:c(:c(:c:1:c(:c(:c:2-[#1])-[#1])-[#1])-[#1])-[#7](-[#1])-[#7](-[#1])-[#6]=[#8])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -576,576,4,anisol_B(2),[#6](-[#1])(-[#1])-c:1:c(:c(:c(:c(:c:1-[#8]-[#6](-[#1])-[#1])-[#1])-[#1])-[#6](-[#1])(-[#1])-[#7](-[#1])-[#6;X4])-[#1],PAINS,6,1,ChEMBL,PAINS filters -577,577,4,thio_carbam_ene(2),[#6]-1=[#6]-[#7]-[#6](-[#16]-[#6;X4]-1)=[#16],PAINS,6,1,ChEMBL,PAINS filters -578,578,4,thio_amide_D(2),[#6](-[#7](-[#6]-[#1])-[#6]-[#1]):[#6]-[#7](-[#1])-[#6](=[#16])-[#6]-[#1],PAINS,6,1,ChEMBL,PAINS filters -579,579,4,het_65_Da(2),n2nc(c1cccc1c2-[#6])-[#6],PAINS,6,1,ChEMBL,PAINS filters -580,580,4,thiophene_D(2),s:1:c(:c(-[#1]):c(:c:1-[#6](=[#8])-[#7](-[#1])-[#7]-[#1])-[#8]-[#6](-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -581,581,4,het_thio_6_ene(2),[#6]-1:[#6]-[#7]=[#6]-[#6](=[#6]-[#7]-[#6])-[#16]-1,PAINS,6,1,ChEMBL,PAINS filters -582,582,4,cyano_keto_A(2),[#6](-[#1])(-[#1])-[#6](-[#1])(-[#6]#[#7])-[#6](=[#8])-[#6],PAINS,6,1,ChEMBL,PAINS filters -583,583,4,anthranil_acid_C(2),"c2(c(-[#7](-[#1])-[#1])n(-c:1:c:c:c:c:c:1-[#6](=[#8])-[#8]-[#1])nc2-[#6]=[#8])-[$([#6]#[#7]),$([#6]=[#16])]",PAINS,6,1,ChEMBL,PAINS filters -584,584,4,naphth_amino_C(2),c:2:c:1:c:c:c:c-3:c:1:c(:c:c:2)-[#7](-[#7]=[#6]-3)-[#1],PAINS,6,1,ChEMBL,PAINS filters -585,585,4,naphth_amino_D(2),c:2:c:1:c:c:c:c-3:c:1:c(:c:c:2)-[#7]-[#7]=[#7]-3,PAINS,6,1,ChEMBL,PAINS filters -586,586,4,thiazole_amine_G(2),c1csc(n1)-[#7]-[#7]-[#16](=[#8])=[#8],PAINS,6,1,ChEMBL,PAINS filters -587,587,4,het_66_B(2),c:1:c:c:c:2:c(:c:1):n:c(:n:c:2)-[#7](-[#1])-[#6]-3=[#7]-[#6](-[#6]=[#6]-[#7]-3-[#1])(-[#6](-[#1])-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -588,588,4,coumarin_A(2),c:1-3:c(:c(:c(:c(:c:1)-[#8]-[#6]-[#1])-[#1])-[#1])-c:2:c(:c(:c(:c(:c:2-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#1])-[#6](=[#8])-[#8]-3,PAINS,6,1,ChEMBL,PAINS filters -589,589,4,anthranil_acid_D(2),c:12:c(:c:c:c:n:1)c(c(-[#6](=[#8])~[#8;X1])s2)-[#7](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -590,590,4,het_66_C(2),c:1:2:n:c(:c(:n:c:1:[#6]:[#6]:[#6]:[!#1]:2)-[#6](-[#1])=[#6](-[#8]-[#1])-[#6])-[#6](-[#1])=[#6](-[#8]-[#1])-[#6],PAINS,6,1,ChEMBL,PAINS filters -591,591,4,thiophene_amino_E(2),c1csc(c1-[#7](-[#1])-[#1])-[#6](-[#1])=[#6](-[#1])-c2cccs2,PAINS,6,1,ChEMBL,PAINS filters -592,592,4,het_6666_A(2),c:2:c:c:1:n:c:3:c(:n:c:1:c:c:2):c:c:c:4:c:3:c:c:c:c:4,PAINS,6,1,ChEMBL,PAINS filters -593,593,4,sulfonamide_E(2),[#6]:[#6]-[#7](-[#1])-[#16](=[#8])(=[#8])-[#7](-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -594,594,4,anil_di_alk_K(2),c:1:c:c(:c:c:c:1-[#7](-[#1])-[#1])-[#7](-[#6;X3])-[#6;X3],PAINS,6,1,ChEMBL,PAINS filters -595,595,4,het_5_C(2),"[#7]-2=[#6](-c:1:c:c:c:c:c:1)-[#6](-[#1])(-[#1])-[#6](-[#8]-[#1])(-[#6](-[#9])(-[#9])-[#9])-[#7]-2-[$([#6]:[#6]:[#6]:[#6]:[#6]:[#6]),$([#6](=[#16])-[#6]:[#6]:[#6]:[#6]:[#6]:[#6])]",PAINS,6,1,ChEMBL,PAINS filters -596,596,4,ene_six_het_B(2),c:1:c(:c:c:c:c:1)-[#6](=[#8])-[#6](-[#1])=[#6]-3-[#6](=[#8])-[#7](-[#1])-[#6](=[#8])-[#6](=[#6](-[#1])-c:2:c:c:c:c:c:2)-[#7]-3-[#1],PAINS,6,1,ChEMBL,PAINS filters -597,597,4,steroid_A(2),[#8]=[#6]-4-[#6]-[#6]-[#6]-3-[#6]-2-[#6](=[#8])-[#6]-[#6]-1-[#6]-[#6]-[#6]-[#6]-1-[#6]-2-[#6]-[#6]-[#6]-3=[#6]-4,PAINS,6,1,ChEMBL,PAINS filters -598,598,4,het_565_A(2),c:1:2:c:3:c(:c(-[#8]-[#1]):c(:c:1:c(:c:n:2-[#6])-[#6]=[#8])-[#1]):n:c:n:3,PAINS,6,1,ChEMBL,PAINS filters -599,599,4,thio_imine_ium(2),[#6;X4]-[#7+](-[#6;X4]-[#8]-[#1])=[#6]-[#16]-[#6]-[#1],PAINS,6,1,ChEMBL,PAINS filters -600,600,4,anthranil_acid_E(2),[#6]-3(=[#8])-[#6](=[#6](-[#1])-[#7](-[#1])-c:1:c:c:c:c:c:1-[#6](=[#8])-[#8]-[#1])-[#7]=[#6](-c:2:c:c:c:c:c:2)-[#8]-3,PAINS,6,1,ChEMBL,PAINS filters -601,601,4,hzone_furan_B(2),"c:1(:c(:c(:c(:o:1)-[$([#1]),$([#6](-[#1])-[#1])])-[#1])-[#1])-[#6](-[$([#1]),$([#6](-[#1])-[#1])])=[#7]-[#7](-[#1])-c:2:c:c:n:c:c:2",PAINS,6,1,ChEMBL,PAINS filters -602,602,4,thiophene_E(2),"c:1(:c(:c(:c(:s:1)-[$([#1]),$([#6](-[#1])-[#1])])-[#1])-[#1])-[#6](-[$([#1]),$([#6](-[#1])-[#1])])-[#6](=[#8])-[#7](-[#1])-c:2:n:c:c:s:2",PAINS,6,1,ChEMBL,PAINS filters -603,603,4,ene_misc_B(2),[#6]:[#6]-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#6]=[#8])-[#7]-2-[#6](=[#8])-[#6]-1(-[#1])-[#6](-[#1])(-[#1])-[#6]=[#6]-[#6](-[#1])(-[#1])-[#6]-1(-[#1])-[#6]-2=[#8],PAINS,6,1,ChEMBL,PAINS filters -604,604,4,het_thio_5_B(2),[#6]-1(-[#6]=[#8])(-[#6]:[#6])-[#16;X2]-[#6]=[#7]-[#7]-1-[#1],PAINS,6,1,ChEMBL,PAINS filters -605,605,4,thiophene_amino_F(2),[#7](-[#1])(-[#1])-c:1:c(:c(:c(:s:1)-[#7](-[#1])-[#6](=[#8])-c:2:c:c:c:c:c:2)-[#6]#[#7])-[#6]:3:[!#1]:[!#1]:[!#1]:[!#1]:[!#1]:3,PAINS,6,1,ChEMBL,PAINS filters -606,606,4,anil_OC_alk_D(2),"[#6](-[#1])(-[#1])-[#8]-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#6](-[#1])-[#1])-[#1])-[#7](-[#1])-[#6](-[#1])(-[#1])-c:2:c:c:c:c:c:2-[$([#6](-[#1])-[#1]),$([#8]-[#6](-[#1])-[#1])]",PAINS,6,1,ChEMBL,PAINS filters -607,607,4,tert_butyl_A(2),[#6](-[#1])(-[#1])(-[#1])-[#6](-[#6](-[#1])(-[#1])-[#1])(-[#6](-[#1])(-[#1])-[#1])-c:1:c(:c:c(:c(:c:1-[#1])-[#6](-[#6](-[#1])(-[#1])-[#1])(-[#6](-[#1])(-[#1])-[#1])-[#6](-[#1])(-[#1])-[#1])-[#8]-[#6](-[#1])-[#7])-[#1],PAINS,6,1,ChEMBL,PAINS filters -608,608,4,thio_urea_J(2),c:1(:c(:o:c:c:1)-[#6]-[#1])-[#6]=[#7]-[#7](-[#1])-[#6](=[#16])-[#7]-[#1],PAINS,6,1,ChEMBL,PAINS filters -609,609,4,het_thio_65_B(2),[#7](-[#1])-c1nc(nc2nnc(n12)-[#16]-[#6])-[#7](-[#1])-[#6],PAINS,6,1,ChEMBL,PAINS filters -610,610,4,coumarin_B(2),c:1-2:c(:c:c:c:c:1-[#6](-[#1])(-[#1])-[#6](-[#1])=[#6](-[#1])-[#1])-[#6](=[#6](-[#6](=[#8])-[#7](-[#1])-[#6]:[#6])-[#6](=[#8])-[#8]-2)-[#1],PAINS,6,1,ChEMBL,PAINS filters -611,611,4,thio_urea_K(2),[#6]-2(=[#16])-[#7]-1-[#6]:[#6]-[#7]=[#7]-[#6]-1=[#7]-[#7]-2-[#1],PAINS,6,1,ChEMBL,PAINS filters -612,612,4,thiophene_amino_G(2),[#6]:[#6]:[#6]:[#6]:[#6]:[#6]-c:1:c:c(:c(:s:1)-[#7](-[#1])-[#6](=[#8])-[#6])-[#6](=[#8])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters -613,613,4,anil_NH_alk_D(2),[#7](-[#1])(-[#1])-c:1:c(:c(:c(:c:c:1-[#7](-[#1])-[#6](-[#1])(-[#6])-[#6](-[#1])-[#6](-[#1])-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -614,614,4,het_thio_5_C(2),[#16]=[#6]-2-[#7](-[#1])-[#7]=[#6](-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#1])-[#1])-[#8]-2,PAINS,6,1,ChEMBL,PAINS filters -615,615,4,thio_keto_het(2),[#16]=[#6]-c:1:c:c:c:2:c:c:c:c:n:1:2,PAINS,6,1,ChEMBL,PAINS filters -616,616,4,het_thio_N_5B(2),[#6]~1~[#6](~[#7]~[#7]~[#6](~[#6](-[#1])-[#1])~[#6](-[#1])-[#1])~[#7]~[#16]~[#6]~1,PAINS,6,1,ChEMBL,PAINS filters -617,617,4,quinone_D(2),[#6]-1(-[#6]=:[#6]-[#6]=:[#6]-[#6]-1=[!#6&!#1])=[!#6&!#1],PAINS,6,1,ChEMBL,PAINS filters -618,618,4,anil_di_alk_furan_B(2),[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-c:1:c(-[#1]):c(:c(:o:1)-[#6](-[#1])=[#6]-[#6]#[#7])-[#1],PAINS,6,1,ChEMBL,PAINS filters -619,619,4,ene_six_het_C(2),[#8]=[#6]-1-[#6]:[#6]-[#6](-[#1])(-[#1])-[#7]-[#6]-1=[#6]-[#1],PAINS,6,1,ChEMBL,PAINS filters -620,620,4,het_55_A(2),[#6]:[#6]-[#7]:2:[#7]:[#6]:1-[#6](-[#1])(-[#1])-[#16;X2]-[#6](-[#1])(-[#1])-[#6]:1-[#6]:2-[#7](-[#1])-[#6](=[#8])-[#6](-[#1])=[#6]-[#1],PAINS,6,1,ChEMBL,PAINS filters -621,621,4,het_thio_65_C(2),n:1:c(:n(:c:2:c:1:c:c:c:c:2)-[#6](-[#1])-[#1])-[#16]-[#6](-[#1])(-[#1])-[#6](=[#8])-[#7](-[#1])-[#7]=[#6](-[#1])-[#6](-[#1])=[#6]-[#1],PAINS,6,1,ChEMBL,PAINS filters -622,622,4,hydroquin_A(2),c:1(:c:c(:c(:c:c:1)-[#8]-[#1])-[#6](=!@[#6]-[#7])-[#6]=[#8])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters -623,623,4,anthranil_acid_F(2),c:1(:c:c(:c(:c:c:1)-[#7](-[#1])-[#6](=[#8])-[#6]:[#6])-[#6](=[#8])-[#8]-[#1])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters -624,624,4,pyrrole_I(2),n2(-[#6](-[#1])-[#1])c-1c(-[#6]:[#6]-[#6]-1=[#8])cc2-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -625,625,4,thiophene_amino_H(2),[#6](-[#1])-[#7](-[#1])-c:1:c(:c(:c(:s:1)-[#6]-[#1])-[#6]-[#1])-[#6](=[#8])-[#7](-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -626,626,4,imine_one_fives_C(2),[#6]:[#6]-[#7;!R]=[#6]-2-[#6](=[!#6&!#1])-c:1:c:c:c:c:c:1-[#7]-2,PAINS,6,1,ChEMBL,PAINS filters -627,627,4,keto_phenone_zone_A(2),c:1:c:c:c:c:c:1-[#6](=[#8])-[#7](-[#1])-[#7]=[#6]-3-c:2:c:c:c:c:c:2-c:4:c:c:c:c:c-3:4,PAINS,6,1,ChEMBL,PAINS filters -628,628,4,dyes7A(2),c:1:c(:c:c:c:c:1)-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])=[#6](-[#1])-[#6]=!@[#6](-[#1])-[#6](-[#1])=[#6]-[#6]=@[#7]-c:2:c:c:c:c:c:2,PAINS,6,1,ChEMBL,PAINS filters -629,629,4,het_pyridiniums_B(2),[#6]:1:2:[!#1]:[#7+](:[!#1]:[#6](:[!#1]:1:[#6]:[#6]:[#6]:[#6]:2)-[*])~[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -630,630,4,het_5_D(2),[#7]-2(-c:1:c:c:c:c:c:1)-[#7]=[#6](-[#6](-[#1])-[#1])-[#6](-[#1])(-[#16]-[#6])-[#6]-2=[#8],PAINS,6,1,ChEMBL,PAINS filters -631,631,4,thiazole_amine_H(1),c:1:c:c:c(:c:c:1-[#7](-[#1])-c2nc(c(-[#1])s2)-c:3:c:c:c(:c:c:3)-[#6](-[#1])(-[#6]-[#1])-[#6]-[#1])-[#6](=[#8])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters -632,632,4,thiazole_amine_I(1),[#6](-[#1])(-[#1])-[#7](-[#1])-[#6]=[#7]-[#7](-[#1])-c1nc(c(-[#1])s1)-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -633,633,4,het_thio_N_5C(1),[#6]:[#6]-[#7](-[#1])-[#6](=[#8])-c1c(snn1)-[#7](-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -634,634,4,sulfonamide_F(1),[#8]=[#16](=[#8])(-[#6]:[#6])-[#7](-[#1])-c1nc(cs1)-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -635,635,4,thiazole_amine_J(1),[#8]=[#16](=[#8])(-[#6]:[#6])-[#7](-[#1])-[#7](-[#1])-c1nc(cs1)-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -636,636,4,het_65_F(1),s2c:1:n:c:n:c(:c:1c(c2-[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#7]-[#7]=[#6]-c3ccco3,PAINS,6,1,ChEMBL,PAINS filters -637,637,4,keto_keto_beta_E(1),[#6](=[#8])-[#6](-[#1])=[#6](-[#8]-[#1])-[#6](-[#8]-[#1])=[#6](-[#1])-[#6](=[#8])-[#6],PAINS,6,1,ChEMBL,PAINS filters -638,638,4,ene_five_one_B(1),c:2(:c:1-[#6](-[#6](-[#6](-c:1:c(:c(:c:2-[#1])-[#1])-[#1])(-[#1])-[#1])=[#8])=[#6](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -639,639,4,keto_keto_beta_zone(1),[#6]:[#6]-[#7](-[#1])-[#7]=[#6](-[#6](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#6](-[#6](-[#1])-[#1])=[#7]-[#7](-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -640,640,4,thio_urea_L(1),[#6;X4]-[#16;X2]-[#6](=[#7]-[!#1]:[!#1]:[!#1]:[!#1])-[#7](-[#1])-[#7]=[#6],PAINS,6,1,ChEMBL,PAINS filters -641,641,4,het_thio_urea_ene(1),[#6]-1(=[#7]-[#7](-[#6](-[#16]-1)=[#6](-[#1])-[#6]:[#6])-[#6]:[#6])-[#6]=[#8],PAINS,6,1,ChEMBL,PAINS filters -642,642,4,cyano_amino_het_A(1),c:1(:c(:c:2:c(:n:c:1-[#7](-[#1])-[#1]):c:c:c(:c:2-[#7](-[#1])-[#1])-[#6]#[#7])-[#6]#[#7])-[#6]#[#7],PAINS,6,1,ChEMBL,PAINS filters -643,643,4,tetrazole_hzide(1),[!#1]:1:[!#1]:[!#1]:[!#1](:[!#1]:[!#1]:1)-[#6](-[#1])=[#6](-[#1])-[#6](-[#7](-[#1])-[#7](-[#1])-c2nnnn2-[#6])=[#8],PAINS,6,1,ChEMBL,PAINS filters -644,644,4,imine_naphthol_A(1),c:1:2:c(:c(:c(:c(:c:1:c(:c(:c(:c:2-[#1])-[#1])-[#6](=[#7]-[#6]:[#6])-[#6](-[#1])-[#1])-[#8]-[#1])-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -645,645,4,misc_anisole_A(1),c:1(:c(:c:2:c(:c(:c:1-[#8]-[#6](-[#1])-[#1])-[#1]):c(:c(:c(:c:2-[#7](-[#1])-[#6](-[#1])(-[#1])-[#1])-[#1])-c:3:c(:c(:c(:c(:c:3-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#1])-[#1])-[#1])-[#8]-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -646,646,4,het_thio_665(1),c:1:c:c-2:c(:c:c:1)-[#16]-c3c(-[#7]-2)cc(s3)-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -647,647,4,anil_di_alk_L(1),c:1:c:c:c-2:c(:c:1)-[#6](-[#6](-[#7]-2-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#7]-4-[#6](-c:3:c:c:c:c:c:3-[#6]-4=[#8])=[#8])(-[#1])-[#1])(-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -648,648,4,colchicine_B(1),c:1(:c:c:c(:c:c:1)-[#6]-3=[#6]-[#6](-c2cocc2-[#6](=[#6]-3)-[#8]-[#1])=[#8])-[#16]-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -649,649,4,misc_aminoacid_A(1),[#6;X4]-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#6](=[#8])-[#7](-[#1])-[#6](-[#1])(-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#16]-[#6](-[#1])(-[#1])-[#1])-[#6](=[#8])-[#8]-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -650,650,4,imidazole_amino_A(1),n:1:c(:n(:c(:c:1-c:2:c:c:c:c:c:2)-c:3:c:c:c:c:c:3)-[#7]=!@[#6])-[#7](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -651,651,4,phenol_sulfite_A(1),[#6](-c:1:c:c:c(:c:c:1)-[#8]-[#1])(-c:2:c:c:c(:c:c:2)-[#8]-[#1])-[#8]-[#16](=[#8])=[#8],PAINS,6,1,ChEMBL,PAINS filters -652,652,4,het_66_D(1),c:2:c:c:1:n:c(:c(:n:c:1:c:c:2)-[#6](-[#1])(-[#1])-[#6](=[#8])-[#6]:[#6])-[#6](-[#1])(-[#1])-[#6](=[#8])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -653,653,4,misc_anisole_B(1),c:1(:c(:c(:c(:c(:c:1-[#1])-[#8]-[#6](-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#1])-[#1])-[#6](=[#8])-[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-c:2:c:c:c(-[#6](-[#1])-[#1])c:c:2,PAINS,6,1,ChEMBL,PAINS filters -654,654,4,tetrazole_A(1),[#6](-[#1])(-[#1])-c1nnnn1-c:2:c(:c(:c(:c(:c:2-[#1])-[#1])-[#8]-[#6](-[#1])(-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -655,655,4,het_65_G(1),[#6]-2(=[#7]-c1c(c(nn1-[#6](-[#6]-2(-[#1])-[#1])=[#8])-[#7](-[#1])-[#1])-[#7](-[#1])-[#1])-[#6],PAINS,6,1,ChEMBL,PAINS filters -656,656,4,misc_trityl_A(1),[#6](-[#6]:[#6])(-[#6]:[#6])(-[#6]:[#6])-[#16]-[#6]:[#6]-[#6](=[#8])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters -657,657,4,misc_pyridine_OC(1),[#8]=[#6](-c:1:c(:c(:n:c(:c:1-[#1])-[#8]-[#6](-[#1])(-[#1])-[#1])-[#8]-[#6](-[#1])(-[#1])-[#1])-[#1])-[#7](-[#1])-[#6](-[#1])(-[#6](-[#1])-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -658,658,4,het_6_hydropyridone(1),[#7]-1=[#6](-[#7](-[#6](-[#6](-[#6]-1(-[#1])-[#6]:[#6])(-[#1])-[#1])=[#8])-[#1])-[#7]-[#1],PAINS,6,1,ChEMBL,PAINS filters -659,659,4,misc_stilbene(1),[#6]-1(=[#6](-[#6](-[#6](-[#6](-[#6]-1(-[#1])-[#1])(-[#1])-[#6](=[#8])-[#6])(-[#1])-[#6](=[#8])-[#8]-[#1])(-[#1])-[#1])-[#6]:[#6])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -660,660,4,misc_imidazole(1),[#6](-[#1])(-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[Cl])-[#1])-[#1])(-c:2:c(:c(:c(:c(:c:2-[#1])-[#1])-[Cl])-[#1])-[#1])-[#8]-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-c3nc(c(n3-[#6](-[#1])(-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -661,661,4,anil_NH_no_alk_A(1),n:1:c(:c(:c(:c(:c:1-[#1])-[#7](-[#1])-[#1])-[#1])-[#1])-[#7](-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -662,662,4,het_6_imidate_B(1),[#7](-[#1])(-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1])-[#8]-[#1])-[#6]-2=[#6](-[#8]-[#6](-[#7]=[#7]-2)=[#7])-[#7](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -663,663,4,anil_alk_B(1),[#7](-[#1])(-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#6](-[#1])-[#1])-[#1])-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-c:2:c(:c(:c(:c(:c:2-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -664,664,4,styrene_anil_A(1),c:1:c:c-3:c(:c:c:1)-c:2:c:c:c(:c:c:2-[#6]-3=[#6](-[#1])-[#6])-[#7](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -665,665,4,misc_aminal_acid(1),c:1:c:c-2:c(:c:c:1)-[#7](-[#6](-[#8]-[#6]-2)(-[#6](=[#8])-[#8]-[#1])-[#6](-[#1])-[#1])-[#6](=[#8])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -666,666,4,anil_no_alk_D(1),n:1:c(:c(:c(:c(:c:1-[#7](-[#1])-[#1])-[#6](-[#1])-[#1])-[#1])-[#6](-[#1])-[#1])-[#7](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -667,667,4,anil_alk_C(1),[#7](-[#1])(-c:1:c:c:c:c:c:1)-[#6](-[#6])(-[#6])-c:2:c(:c(:c(:c(:c:2-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -668,668,4,misc_anisole_C(1),[#7](-[#1])(-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#8]-[#6](-[#1])(-[#1])-[#1])-[#8]-[#6]-[#1])-[#1])-[#6](=[#8])-[#7](-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])(-[#1])-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -669,669,4,het_465_misc(1),c:1-2:c:c-3:c(:c:c:1-[#8]-[#6]-[#8]-2)-[#6]-[#6]-3,PAINS,6,1,ChEMBL,PAINS filters -670,670,4,anthranil_acid_G(1),c:1(:c(:c(:c(:c(:c:1-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#1])-[#6](=[#8])-[#8]-[#1])-[#7](-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -671,671,4,anil_di_alk_M(1),c:1(:c:4:c(:n:c(:c:1-[#6](-[#1])(-[#1])-[#7]-3-c:2:c(:c(:c(:c(:c:2-[#6](-[#1])(-[#1])-[#6]-3(-[#1])-[#1])-[#1])-[#1])-[#1])-[#1])-[#1]):c(:c(:c(:c:4-[#1])-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -672,672,4,anthranil_acid_H(1),c:1:c(:c2:c(:c:c:1)c(c(n2-[#1])-[#6]:[#6])-[#6]:[#6])-[#6](=[#8])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters -673,673,4,thio_urea_M(1),"[#6]:[#6]-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#7](-[#1])-[#6](=[#16])-[#7](-[#1])-c:1:c(:c(:c(:c(:c:1-[F,Cl,Br,I])-[#1])-[#6](-[#1])-[#1])-[#1])-[#1]",PAINS,6,1,ChEMBL,PAINS filters -674,674,4,thiazole_amine_K(1),n:1:c3:c(:c:c2:c:1nc(s2)-[#7])sc(n3)-[#7],PAINS,6,1,ChEMBL,PAINS filters -675,675,4,het_thio_5_imine_A(1),[#7]=[#6]-1-[#16]-[#6](=[#7])-[#7]=[#6]-1,PAINS,6,1,ChEMBL,PAINS filters -676,676,4,thio_amide_E(1),c:1:c(:n:c:c:c:1)-[#6](=[#16])-[#7](-[#1])-c:2:c(:c:c:c:c:2)-[#8]-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -677,677,4,het_thio_676_B(1),c:1-2:c(:c(:c(:c(:c:1-[#6](-c:3:c(-[#16]-[#6]-2(-[#1])-[#1]):c(:c(-[#1]):c(:c:3-[#1])-[#1])-[#1])-[#8]-[#6]:[#6])-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -678,678,4,sulfonamide_G(1),[#6](-[#1])(-[#1])(-[#1])-c:1:c(:c(:c(:c(:n:1)-[#7](-[#1])-[#16](-c:2:c(:c(:c(:c(:c:2-[#1])-[#1])-[#8]-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])-[#1])-[#1])-[#1])(=[#8])=[#8])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -679,679,4,thio_thiomorph_Z(1),[#6](=[#8])(-[#7]-1-[#6]-[#6]-[#16]-[#6]-[#6]-1)-c:2:c(:c(:c(:c(:c:2-[#16]-[#6](-[#1])-[#1])-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -680,680,4,naphth_ene_one_A(1),c:1:c:c:3:c:2:c(:c:1)-[#6](-[#6]=[#6](-c:2:c:c:c:3)-[#8]-[#6](-[#1])-[#1])=[#8],PAINS,6,1,ChEMBL,PAINS filters -681,681,4,naphth_ene_one_B(1),c:1-3:c:2:c(:c(:c:c:1)-[#7]):c:c:c:c:2-[#6](-[#6]=[#6]-3-[#6](-[F])(-[F])-[F])=[#8],PAINS,6,1,ChEMBL,PAINS filters -682,682,4,amino_acridine_A(1),c:1:c:c:c:c:2:c:1:c:c:3:c(:n:2):n:c:4:c(:c:3-[#7]):c:c:c:c:4,PAINS,6,1,ChEMBL,PAINS filters -683,683,4,keto_phenone_B(1),c:1:c-3:c(:c:c:c:1)-[#6]-2=[#7]-[!#1]=[#6]-[#6]-[#6]-2-[#6]-3=[#8],PAINS,6,1,ChEMBL,PAINS filters -684,684,4,hzone_acid_A(1),c:1-3:c(:c(:c(:c(:c:1-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#1])-[#6](=[#7]-[#7](-[#1])-c:2:c(:c(:c(:c(:c:2-[#1])-[#1])-[#6](=[#8])-[#8]-[#1])-[#1])-[#1])-c:4:c-3:c(:c(:c(:c:4-[#1])-[#8]-[#6](-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -685,685,4,sulfonamide_H(1),c:1(:c(:c(:c(:c(:c:1-[#1])-[#1])-[#7](-[#1])-[#1])-[#1])-[#1])-[#16](=[#8])(=[#8])-[#7](-[#1])-c:2:n:n:c(:c(:c:2-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -686,686,4,het_565_indole(1),c2(c(-[#1])n(-[#6](-[#1])-[#1])c:3:c(:c(:c:1n(c(c(c:1:c2:3)-[#1])-[#1])-[#6](-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -687,687,4,pyrrole_J(1),c1(c-2c(c(n1-[#6](-[#8])=[#8])-[#6](-[#1])-[#1])-[#16]-[#6](-[#1])(-[#1])-[#16]-2)-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -688,688,4,pyrazole_amino_B(1),s1ccnc1-c2c(n(nc2-[#1])-[#1])-[#7](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -689,689,4,pyrrole_K(1),c1(c(c(c(n1-[#1])-c:2:c(:c(:c(:c(:c:2-[#1])-[#1])-[#1])-[#1])-[#1])-[#6](-[#1])-[#1])-[#1])-[#6](=[#8])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters -690,690,4,anthranil_acid_I(1),c:1:2(:c(:c(:c(:o:1)-[#6])-[#1])-[#1])-[#6](=[#8])-[#7](-[#1])-[#6]:[#6](-[#1]):[#6](-[#1]):[#6](-[#1]):[#6](-[#1]):[#6]:2-[#6](=[#8])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters -691,691,4,thio_amide_F(1),[!#1]:[#6]-[#6](=[#16])-[#7](-[#1])-[#7](-[#1])-[#6]:[!#1],PAINS,6,1,ChEMBL,PAINS filters -692,692,4,ene_one_C(1),[#6]-1(=[#8])-[#6](-[#6](-[#6]#[#7])=[#6](-[#1])-[#7])-[#6](-[#7])-[#6]=[#6]-1,PAINS,6,1,ChEMBL,PAINS filters -693,693,4,het_65_H(1),c2(c-1n(-[#6](-[#6]=[#6]-[#7]-1)=[#8])nc2-c3cccn3)-[#6]#[#7],PAINS,6,1,ChEMBL,PAINS filters -694,694,4,cyano_imine_D(1),[#8]=[#6]-1-[#6](=[#7]-[#7]-[#6]-[#6]-1)-[#6]#[#7],PAINS,6,1,ChEMBL,PAINS filters -695,695,4,cyano_misc_A(1),c:2(:c:1:c:c:c:c:c:1:n:n:c:2)-[#6](-[#6]:[#6])-[#6]#[#7],PAINS,6,1,ChEMBL,PAINS filters -696,696,4,ene_misc_C(1),c:1:c:c-2:c(:c:c:1)-[#6]=[#6]-[#6](-[#7]-2-[#6](=[#8])-[#7](-[#1])-c:3:c:c(:c(:c:c:3)-[#8]-[#6](-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])(-[#6](-[#1])-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -697,697,4,het_66_E(1),c:2:c:c:1:n:c(:c(:n:c:1:c:c:2)-c:3:c:c:c:c:c:3)-c:4:c:c:c:c:c:4-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters -698,698,4,keto_keto_beta_F(1),[#6](-[#1])(-[#1])-[#6](-[#8]-[#1])=[#6](-[#6](=[#8])-[#6](-[#1])-[#1])-[#6](-[#1])-[#6]#[#6],PAINS,6,1,ChEMBL,PAINS filters -699,699,4,misc_naphthimidazole(1),c:1:c:4:c(:c:c2:c:1nc(n2-[#1])-[#6]-[#8]-[#6](=[#8])-c:3:c:c(:c:c(:c:3)-[#7](-[#1])-[#1])-[#7](-[#1])-[#1]):c:c:c:c:4,PAINS,6,1,ChEMBL,PAINS filters -700,700,4,naphth_ene_one_C(1),c:2(:c:1:c:c:c:c-3:c:1:c(:c:c:2)-[#6]=[#6]-[#6]-3=[#7])-[#7],PAINS,6,1,ChEMBL,PAINS filters -701,701,4,keto_phenone_C(1),c:2(:c:1:c:c:c:c:c:1:c-3:c(:c:2)-[#6](-c:4:c:c:c:c:c-3:4)=[#8])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters -702,702,4,coumarin_C(1),[#6]-2(-[#6]=[#7]-c:1:c:c(:c:c:c:1-[#8]-2)-[Cl])=[#8],PAINS,6,1,ChEMBL,PAINS filters -703,703,4,thio_est_cyano_A(1),[#6]-1=[#6]-[#7](-[#6](-c:2:c-1:c:c:c:c:2)(-[#6]#[#7])-[#6](=[#16])-[#16])-[#6]=[#8],PAINS,6,1,ChEMBL,PAINS filters -704,704,4,het_65_imidazole(1),c2(nc:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1])n2-[#6])-[#7](-[#1])-[#6](-[#7](-[#1])-c:3:c(:c:c:c:c:3-[#1])-[#1])=[#8],PAINS,6,1,ChEMBL,PAINS filters -705,705,4,anthranil_acid_J(1),[#7](-[#1])(-[#6]:[#6])-c:1:c(-[#6](=[#8])-[#8]-[#1]):c:c:c(:n:1)-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -706,706,4,colchicine_het(1),c:1-3:c(:c:c:c:c:1)-[#16]-[#6](=[#7]-[#7]=[#6]-2-[#6]=[#6]-[#6]=[#6]-[#6]=[#6]-2)-[#7]-3-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -707,707,4,ene_misc_D(1),c:1-2:c(:c(:c(:c(:c:1-[#1])-[#8]-[#6](-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#1])-[#6](=[#6](-[#6])-[#16]-[#6]-2(-[#1])-[#1])-[#6],PAINS,6,1,ChEMBL,PAINS filters -708,708,4,indole_3yl_alk_B(1),c:12:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1])c(c(-[#6]:[#6])n2-!@[#6]:[#6])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -709,709,4,anil_OH_no_alk_A(1),[#7](-[#1])(-[#1])-c:1:c:c:c(:c:c:1-[#8]-[#1])-[#16](=[#8])(=[#8])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters -710,710,4,thiazole_amine_L(1),s:1:c:c:c(:c:1-[#1])-c:2:c:s:c(:n:2)-[#7](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -711,711,4,pyrazole_amino_A(1),c1c(-[#7](-[#1])-[#1])nnc1-c2c(-[#6](-[#1])-[#1])oc(c2-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -712,712,4,het_thio_N_5D(1),n1nscc1-c2nc(no2)-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -713,713,4,anil_alk_indane(1),c:1(:c:c-3:c(:c:c:1)-[#7]-[#6]-4-c:2:c:c:c:c:c:2-[#6]-[#6]-3-4)-[#6;X4],PAINS,6,1,ChEMBL,PAINS filters -714,714,4,anil_di_alk_N(1),c:1-2:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1])-[#6](=[#6](-[#1])-[#6]-3-[#6](-[#6]#[#7])-[#6](-[#1])(-[#1])-[#6](-[#1])-[#7]-2-3)-[#1],PAINS,6,1,ChEMBL,PAINS filters -715,715,4,het_666_C(1),c:2-3:c(:c:c:1:c:c:c:c:c:1:c:2)-[#7](-[#6](-[#1])-[#1])-[#6](=[#8])-[#6](=[#7]-3)-[#6]:[#6]-[#7](-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -716,716,4,ene_one_D(1),[#6](-[#8]-[#1]):[#6]-[#6](=[#8])-[#6](-[#1])=[#6](-[#6])-[#6],PAINS,6,1,ChEMBL,PAINS filters -717,717,4,anil_di_alk_indol(1),c:1:2:c(:c(:c(:c(:c:1-[#1])-[#1])-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#1]):c(:c(-[#1]):n:2-[#1])-[#16](=[#8])=[#8],PAINS,6,1,ChEMBL,PAINS filters -718,718,4,anil_no_alk_indol_A(1),c:1:2:c(:c(:c(:c(:c:1-[#1])-[#1])-[#7](-[#1])-[#1])-[#1]):c(:c(-[#1]):n:2-[#6](-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -719,719,4,dhp_amino_CN_G(1),"[#16;X2]-1-[#6]=[#6](-[#6]#[#7])-[#6](-[#6])(-[#6]=[#8])-[#6](=[#6]-1-[#7](-[#1])-[#1])-[$([#6]=[#8]),$([#6]#[#7])]",PAINS,6,1,ChEMBL,PAINS filters -720,720,4,anil_di_alk_dhp(1),[#7]-2-[#6]=[#6](-[#6]=[#8])-[#6](-c:1:c:c:c(:c:c:1)-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#6]~3=[#6]-2~[#7]~[#6](~[#16])~[#7]~[#6]~3~[#7],PAINS,6,1,ChEMBL,PAINS filters -721,721,4,anthranil_amide_A(1),c:1:c(:c:c:c:c:1)-[#6](=[#8])-[#7](-[#1])-c:2:c(:c:c:c:c:2)-[#6](=[#8])-[#7](-[#1])-[#7](-[#1])-c:3:n:c:c:s:3,PAINS,6,1,ChEMBL,PAINS filters -722,722,4,hzone_anthran_Z(1),c:1:c:2:c(:c:c:c:1):c(:c:3:c(:c:2):c:c:c:c:3)-[#6]=[#7]-[#7](-[#1])-c:4:c:c:c:c:c:4,PAINS,6,1,ChEMBL,PAINS filters -723,723,4,ene_one_amide_A(1),c:1:c(:c:c:c:c:1)-[#6](-[#1])-[#7]-[#6](=[#8])-[#6](-[#7](-[#1])-[#6](-[#1])-[#1])=[#6](-[#1])-[#6](=[#8])-c:2:c:c:c(:c:c:2)-[#8]-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -724,724,4,het_76_A(1),s:1:c(:c(-[#1]):c(:c:1-[#6]-3=[#7]-c:2:c:c:c:c:c:2-[#6](=[#7]-[#7]-3-[#1])-c:4:c:c:n:c:c:4)-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -725,725,4,thio_urea_N(1),o:1:c(:c(-[#1]):c(:c:1-[#6](-[#1])(-[#1])-[#7](-[#1])-[#6](=[#16])-[#7](-[#6]-[#1])-[#6](-[#1])(-[#1])-c:2:c:c:c:c:c:2)-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -726,726,4,anil_di_alk_coum(1),c:1:c(:c:c:c:c:1)-[#7](-[#6]-[#1])-[#6](-[#1])-[#6](-[#1])-[#6](-[#1])-[#7](-[#1])-[#6](=[#8])-[#6]-2=[#6](-[#8]-[#6](-[#6](=[#6]-2-[#6](-[#1])-[#1])-[#1])=[#8])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -727,727,4,ene_one_amide_B(1),c2-3:c:c:c:1:c:c:c:c:c:1:c2-[#6](-[#1])-[#6;X4]-[#7]-[#6]-3=[#6](-[#1])-[#6](=[#8])-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -728,728,4,het_thio_656c(1),c:1:c(:c:c:c:c:1)-[#6]-4=[#7]-[#7]:2:[#6](:[#7+]:c:3:c:2:c:c:c:c:3)-[#16]-[#6;X4]-4,PAINS,6,1,ChEMBL,PAINS filters -729,729,4,het_5_ene(1),[#6]-2(=[#8])-[#6](=[#6](-[#6](-[#1])-[#1])-[#7](-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])-[#1])-[#7]=[#6](-c:1:c:c:c:c:c:1)-[#8]-2,PAINS,6,1,ChEMBL,PAINS filters -730,730,4,thio_imide_A(1),c:1:c(:c:c:c:c:1)-[#7]-2-[#6](=[#8])-[#6](=[#6](-[#1])-[#6]-2=[#8])-[#16]-c:3:c:c:c:c:c:3,PAINS,6,1,ChEMBL,PAINS filters -731,731,4,dhp_amidine_A(1),[#7]-1(-[#1])-[#7]=[#6](-[#7]-[#1])-[#16]-[#6](=[#6]-1-[#6]:[#6])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -732,732,4,thio_urea_O(1),c:1(:c(:c-3:c(:c(:c:1-[#7](-[#1])-[#6](=[#16])-[#7](-[#1])-[#6](-[#1])-c:2:c(:c(:c(:o:2)-[#6]-[#1])-[#1])-[#1])-[#1])-[#8]-[#6](-[#8]-3)(-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -733,733,4,anil_di_alk_O(1),c:1(:c(:c(:c(:c(:c:1-[#7](-[#1])-[#6](=[#16])-[#7](-[#1])-c:2:c:c:c:c:c:2)-[#1])-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -734,734,4,thio_urea_P(1),[#8]=[#6]-!@n:1:c:c:c-2:c:1-[#7](-[#1])-[#6](=[#16])-[#7]-2-[#1],PAINS,6,1,ChEMBL,PAINS filters -735,735,4,het_pyraz_misc(1),[#6](-[F])(-[F])-[#6](=[#8])-[#7](-[#1])-c:1:c(-[#1]):n(-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#8]-[#6](-[#1])(-[#1])-[#6]:[#6]):n:c:1-[#1],PAINS,6,1,ChEMBL,PAINS filters -736,736,4,diazox_C(1),[#7]-2=[#7]-[#6]:1:[#7]:[!#6&!#1]:[#7]:[#6]:1-[#7]=[#7]-[#6]:[#6]-2,PAINS,6,1,ChEMBL,PAINS filters -737,737,4,diazox_D(1),[#6]-2(-[#1])(-[#8]-[#1])-[#6]:1:[#7]:[!#6&!#1]:[#7]:[#6]:1-[#6](-[#1])(-[#8]-[#1])-[#6]=[#6]-2,PAINS,6,1,ChEMBL,PAINS filters -738,738,4,misc_cyclopropane(1),[#6]-1(-[#6](-[#1])(-[#1])-[#6]-1(-[#1])-[#1])(-[#6](=[#8])-[#7](-[#1])-c:2:c:c:c(:c:c:2)-[#8]-[#6](-[#1])(-[#1])-[#8])-[#16](=[#8])(=[#8])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -739,739,4,imine_ene_one_B(1),[#6]-1:[#6]-[#6](=[#8])-[#6]=[#6]-1-[#7]=[#6](-[#1])-[#7](-[#6;X4])-[#6;X4],PAINS,6,1,ChEMBL,PAINS filters -740,740,4,coumarin_D(1),c:1:c:c(:c:c-2:c:1-[#6](=[#6](-[#1])-[#6](=[#8])-[#8]-2)-c:3:c:c:c:c:c:3)-[#8]-[#6](-[#1])(-[#1])-[#6]:[#8]:[#6],PAINS,6,1,ChEMBL,PAINS filters -741,741,4,misc_furan_A(1),c:1:c(:o:c(:c:1-[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#7]-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#8]-[#6](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#8]-c:2:c:c-3:c(:c:c:2)-[#8]-[#6](-[#8]-3)(-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -742,742,4,rhod_sat_E(1),[#7]-4(-c:1:c:c:c:c:c:1)-[#6](=[#8])-[#16]-[#6](-[#1])(-[#7](-[#1])-c:2:c:c:c:c:3:c:c:c:c:c:2:3)-[#6]-4=[#8],PAINS,6,1,ChEMBL,PAINS filters -743,743,4,rhod_sat_imine_A(1),[#7]-3(-[#6](=[#8])-c:1:c:c:c:c:c:1)-[#6](=[#7]-c:2:c:c:c:c:c:2)-[#16]-[#6](-[#1])(-[#1])-[#6]-3=[#8],PAINS,6,1,ChEMBL,PAINS filters -744,744,4,rhod_sat_F(1),[#7]-2(-c:1:c:c:c:c:c:1)-[#6](=[#8])-[#16]-[#6](-[#1])(-[#1])-[#6]-2=[#16],PAINS,6,1,ChEMBL,PAINS filters -745,745,4,het_thio_5_imine_B(1),[#7]-1(-[#6](-[#1])-[#1])-[#6](=[#16])-[#7](-[#6]:[#6])-[#6](=[#7]-[#6]:[#6])-[#6]-1=[#7]-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -746,746,4,het_thio_5_imine_C(1),[#16]-1-[#6](=[#7]-[#7]-[#1])-[#16]-[#6](=[#7]-[#6]:[#6])-[#6]-1=[#7]-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -747,747,4,ene_five_het_N(1),"[#6]-2(=[#8])-[#6](=[#6](-[#1])-c:1:c(:c:c:c(:c:1)-[F,Cl,Br,I])-[#8]-[#6](-[#1])-[#1])-[#7]=[#6](-[#16]-[#6](-[#1])-[#1])-[#16]-2",PAINS,6,1,ChEMBL,PAINS filters -748,748,4,thio_carbam_A(1),[#6](-[#1])(-[#1])-[#16]-[#6](=[#16])-[#7](-[#1])-[#6](-[#1])(-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -749,749,4,misc_anilide_A(1),c:1(:c(:c(:c(:c(:c:1-[#1])-[#1])-[#6](-[#1])-[#1])-[#7](-[#1])-[#6](=[#8])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#6]:[#6])-[#1])-[#7](-[#1])-[#6](=[#8])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -750,750,4,misc_anilide_B(1),c:1(:c(:c:c(:c:c:1-[#6])-[Br])-[#6])-[#7](-[#1])-[#6](=[#8])-[#7](-[#1])-[#6]-[#6]-[#6],PAINS,6,1,ChEMBL,PAINS filters -751,751,4,mannich_B(1),c:1-2:c(:c:c:c(:c:1-[#8]-[#6](-[#1])(-[#1])-[#7](-[#6]:[#6]-[#8]-[#6](-[#1])-[#1])-[#6]-2(-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -752,752,4,mannich_catechol_A(1),c:1-2:c(:c(:c(:c(:c:1-[#8]-[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-[#6]-2(-[#1])-[#1])-[#1])-[#8])-[#8])-[#1],PAINS,6,1,ChEMBL,PAINS filters -753,753,4,anil_alk_D(1),[#7](-[#1])(-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#6](-[#1])(-[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#1])-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -754,754,4,het_65_I(1),n:1:2:c:c:c(:c:c:1:c:c(:c:2-[#6](=[#8])-[#6]:[#6])-[#6]:[#6])-[#6](~[#8])~[#8],PAINS,6,1,ChEMBL,PAINS filters -755,755,4,misc_urea_A(1),c:1(:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#6](=[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#1])-[#6](-[#6;X4])(-[#6;X4])-[#7](-[#1])-[#6](=[#8])-[#7](-[#6](-[#1])(-[#1])-[#6](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])-[#6](-[#1])(-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -756,756,4,imidazole_C(1),[#6]-3(-[#1])(-n:1:c(:n:c(:c:1-[#1])-[#1])-[#1])-c:2:c(:c(:c(:c(:c:2-[#1])-[Br])-[#1])-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-c:4:c-3:c(:c(:c(:c:4-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -757,757,4,styrene_imidazole_A(1),[#6](=[#6](-[#1])-[#6](-[#1])(-[#1])-n:1:c(:n:c(:c:1-[#1])-[#1])-[#1])(-[#6]:[#6])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters -758,758,4,thiazole_amine_M(1),c:1(:n:c(:c(-[#1]):s:1)-c:2:c:c:n:c:c:2)-[#7](-[#1])-[#6]:[#6]-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -759,759,4,misc_pyrrole_thiaz(1),c:1(:n:c(:c(-[#1]):s:1)-c:2:c:c:c:c:c:2)-[#6](-[#1])(-[#6](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#7]-[#6](-[#1])(-[#1])-c:3:c:c:c:n:3-[#1],PAINS,6,1,ChEMBL,PAINS filters -760,760,4,pyrrole_L(1),n:1(-[#1]):c(:c(-[#6](-[#1])-[#1]):c(:c:1-[#6](-[#1])(-[#1])-[#6](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])-[#1])-[#6](=[#8])-[#8]-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -761,761,4,het_thio_65_D(1),"c:2(:n:c:1:c(:c(:c:c(:c:1-[#1])-[F,Cl,Br,I])-[#1]):n:2-[#1])-[#16]-[#6](-[#1])(-[#1])-[#6](=[#8])-[#7](-[#1])-[#6]:[#6]",PAINS,6,1,ChEMBL,PAINS filters -762,762,4,ene_misc_E(1),c:1(:c(:c-2:c(:c(:c:1-[#8]-[#6](-[#1])-[#1])-[#1])-[#6]=[#6]-[#6](-[#1])-[#16]-2)-[#1])-[#8]-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -763,763,4,thio_cyano_A(1),[#7]-1(-[#1])-[#6](=[#16])-[#6](-[#1])(-[#6]#[#7])-[#6](-[#1])(-[#6]:[#6])-[#6](=[#6]-1-[#6]:[#6])-[#1],PAINS,6,1,ChEMBL,PAINS filters -764,764,4,cyano_amino_het_B(1),n:1:c(:c(:c(:c(:c:1-[#16;X2]-c:2:c:c:c:c:c:2-[#7](-[#1])-[#1])-[#6]#[#7])-c:3:c:c:c:c:c:3)-[#6]#[#7])-[#7](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -765,765,4,cyano_pyridone_G(1),[#7]-2(-c:1:c:c:c(:c:c:1)-[#8]-[#6](-[#1])-[#1])-[#6](=[#8])-[#6](=[#6]-[#6](=[#7]-2)-n:3:c:n:c:c:3)-[#6]#[#7],PAINS,6,1,ChEMBL,PAINS filters -766,766,4,het_65_J(1),o:1:c(:c:c:2:c:1:c(:c(:c(:c:2-[#1])-[#8]-[#6](-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#1])-[#6](~[#8])~[#8],PAINS,6,1,ChEMBL,PAINS filters -767,767,4,ene_one_yne_A(1),[#6]#[#6]-[#6](=[#8])-[#6]#[#6],PAINS,6,1,ChEMBL,PAINS filters -768,768,4,anil_OH_no_alk_B(1),c:2(:c:1:c(:c(:c(:c(:c:1:c(:c(:c:2-[#8]-[#1])-[#6]=[#8])-[#1])-[#1])-[#1])-[#1])-[#1])-[#7](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -769,769,4,hzone_acyl_misc_A(1),"c:1(:c(:c(:c(:o:1)-[$([#1]),$([#6](-[#1])-[#1])])-[#1])-[#1])-[#6](=[#8])-[#7](-[#1])-[#7]=[#6](-[$([#1]),$([#6](-[#1])-[#1])])-c:2:c:c:c:c(:c:2)-[*]-[*]-[*]-c:3:c:c:c:o:3",PAINS,6,1,ChEMBL,PAINS filters -770,770,4,thiophene_F(1),[#16](=[#8])(=[#8])-[#7](-[#1])-c:1:c(:c(:c(:s:1)-[#6]-[#1])-[#6]-[#1])-[#6](=[#8])-[#7]-[#1],PAINS,6,1,ChEMBL,PAINS filters -771,771,4,anil_OC_alk_E(1),[#6](-[#1])(-[#1])-[#8]-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1])-[#7](-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#8]-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -772,772,4,anil_OC_alk_F(1),[#6](-[#1])(-[#1])-[#8]-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1])-[#7](-[#1])-[#6](-[#1])(-[#6]=[#8])-[#16],PAINS,6,1,ChEMBL,PAINS filters -773,773,4,het_65_K(1),n1nnnc2cccc12,PAINS,6,1,ChEMBL,PAINS filters -774,774,4,het_65_L(1),c:1-2:c(-[#1]):s:c(:c:1-[#6](=[#8])-[#7]-[#7]=[#6]-2-[#7](-[#1])-[#1])-[#6]=[#8],PAINS,6,1,ChEMBL,PAINS filters -775,775,4,coumarin_E(1),c:1-3:c(:c:2:c(:c:c:1-[Br]):o:c:c:2)-[#6](=[#6]-[#6](=[#8])-[#8]-3)-[#1],PAINS,6,1,ChEMBL,PAINS filters -776,776,4,coumarin_F(1),c:1-3:c(:c:c:c:c:1)-[#6](=[#6](-[#6](=[#8])-[#7](-[#1])-c:2:n:o:c:c:2-[Br])-[#6](=[#8])-[#8]-3)-[#1],PAINS,6,1,ChEMBL,PAINS filters -777,777,4,coumarin_G(1),"c:1-2:c(:c:c(:c:c:1-[F,Cl,Br,I])-[F,Cl,Br,I])-[#6](=[#6](-[#6](=[#8])-[#7](-[#1])-[#1])-[#6](=[#7]-[#1])-[#8]-2)-[#1]",PAINS,6,1,ChEMBL,PAINS filters -778,778,4,coumarin_H(1),c:1-3:c(:c:c:c:c:1)-[#6](=[#6](-[#6](=[#8])-[#7](-[#1])-c:2:n:c(:c:s:2)-[#6]:[#16]:[#6]-[#1])-[#6](=[#8])-[#8]-3)-[#1],PAINS,6,1,ChEMBL,PAINS filters -779,779,4,het_thio_67_A(1),[#6](-[#1])(-[#1])-[#16;X2]-c:2:n:n:c:1-[#6]:[#6]-[#7]=[#6]-[#8]-c:1:n:2,PAINS,6,1,ChEMBL,PAINS filters -780,780,4,sulfonamide_I(1),[#16](=[#8])(=[#8])(-c:1:c:n(-[#6](-[#1])-[#1]):c:n:1)-[#7](-[#1])-c:2:c:n(:n:c:2)-[#6](-[#1])(-[#1])-[#6]:[#6]-[#8]-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -781,781,4,het_65_mannich(1),c:1-2:c(:c(:c(:c(:c:1-[#8]-[#6](-[#1])(-[#1])-[#8]-2)-[#6](-[#1])(-[#1])-[#7]-3-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#6]:[#6]-3)-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -782,782,4,anil_alk_A(1),[#6](-[#1])(-[#1])-[#8]-[#6]:[#6]-[#6](-[#1])(-[#1])-[#7](-[#1])-c:2:c(:c(:c:1:n(:c(:n:c:1:c:2-[#1])-[#1])-[#6]-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -783,783,4,het_5_inium(1),[#7]-4(-c:1:c:c:c:c:c:1)-[#6](=[#7+](-c:2:c:c:c:c:c:2)-[#6](=[#7]-c:3:c:c:c:c:c:3)-[#7]-4)-[#1],PAINS,6,1,ChEMBL,PAINS filters -784,784,4,anil_di_alk_P(1),[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-c:2:c:c:c:1:s:c(:n:c:1:c:2)-[#16]-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -785,785,4,thio_urea_Q(1),c:1:2:c(:c(:c(:c(:c:1:c(:c(-[#1]):c(:c:2-[#1])-[#1])-[#6](-[#6](-[#1])-[#1])=[#7]-[#7](-[#1])-[#6](=[#16])-[#7](-[#1])-[#6]:[#6]:[#6])-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -786,786,4,thio_pyridine_A(1),[#6]:1(:[#7]:[#6](:[#7]:[!#1]:[#7]:1)-c:2:c(:c(:c(:o:2)-[#1])-[#1])-[#1])-[#16]-[#6;X4],PAINS,6,1,ChEMBL,PAINS filters -787,787,4,melamine_B(1),n:1:c(:n:c(:n:c:1-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#7](-[#6]-[#1])-[#6]=[#8],PAINS,6,1,ChEMBL,PAINS filters -788,788,4,misc_phthal_thio_N(1),c:1(:n:s:c(:n:1)-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#7]-[#6](=[#8])-c:2:c:c:c:c:c:2-[#6](=[#8])-[#8]-[#1])-c:3:c:c:c:c:c:3,PAINS,6,1,ChEMBL,PAINS filters -789,789,4,hzone_acyl_misc_B(1),n:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1])-[#6](=[#8])-[#7](-[#1])-[#7]=[#6](-[#1])-c:2:c:c:c:c:c:2-[#8]-[#6](-[#1])(-[#1])-[#6](=[#8])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters -790,790,4,tert_butyl_B(1),[#6](-[#1])(-[#1])(-[#1])-[#6](-[#6](-[#1])(-[#1])-[#1])(-[#6](-[#1])(-[#1])-[#1])-c:1:c(:c(:c(:c(:c:1-[#8]-[#1])-[#6](-[#6](-[#1])(-[#1])-[#1])(-[#6](-[#1])(-[#1])-[#1])-[#6](-[#1])(-[#1])-[#1])-[#1])-[#6](-[#1])(-[#1])-c:2:c:c:c(:c(:c:2-[#1])-[#1])-[#8]-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -791,791,4,diazox_E(1),[#7](-[#1])(-[#1])-c:1:c(-[#7](-[#1])-[#1]):c(:c(-[#1]):c:2:n:o:n:c:1:2)-[#1],PAINS,6,1,ChEMBL,PAINS filters -792,792,4,anil_NH_no_alk_B(1),"[#7](-[#1])(-[#1])-c:1:c(:c(:c(:c(:c:1-[#7](-[#1])-[#16](=[#8])=[#8])-[#1])-[#7](-[#1])-[#6](-[#1])-[#1])-[F,Cl,Br,I])-[#1]",PAINS,6,1,ChEMBL,PAINS filters -793,793,4,anil_no_alk_A(1),[#7](-[#1])(-[#1])-c:1:c(:c(:c(:c(:c:1-[#7]=[#6]-2-[#6](=[#6]~[#6]~[#6]=[#6]-2)-[#1])-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -794,794,4,anil_no_alk_B(1),[#7](-[#1])(-[#1])-c:1:c(:c(:c(:c(:c:1-n:2:c:c:c:c:2)-[#1])-[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -795,795,4,thio_ene_amine_A(1),[#16]=[#6]-[#6](-[#6](-[#1])-[#1])=[#6](-[#6](-[#1])-[#1])-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -796,796,4,het_55_B(1),[#6]-1:[#6]-[#8]-[#6]-2-[#6](-[#1])(-[#1])-[#6](=[#8])-[#8]-[#6]-1-2,PAINS,6,1,ChEMBL,PAINS filters -797,797,4,cyanamide_A(1),[#8]-[#6](=[#8])-[#6](-[#1])(-[#1])-[#16;X2]-[#6](=[#7]-[#6]#[#7])-[#7](-[#1])-c:1:c:c:c:c:c:1,PAINS,6,1,ChEMBL,PAINS filters -798,798,4,ene_one_one_A(1),[#8]=[#6]-[#6]-1=[#6](-[#16]-[#6](=[#6](-[#1])-[#6])-[#16]-1)-[#6]=[#8],PAINS,6,1,ChEMBL,PAINS filters -799,799,4,ene_six_het_D(1),[#8]=[#6]-1-[#7]-[#7]-[#6](=[#7]-[#6]-1=[#6]-[#1])-[!#1]:[!#1],PAINS,6,1,ChEMBL,PAINS filters -800,800,4,ene_cyano_E(1),[#8]=[#6]-[#6](-[#1])=[#6](-[#6]#[#7])-[#6],PAINS,6,1,ChEMBL,PAINS filters -801,801,4,ene_cyano_F(1),[#8](-[#1])-[#6](=[#8])-c:1:c(:c(:c(:c(:c:1-[#8]-[#1])-[#1])-c:2:c(-[#1]):c(:c(:o:2)-[#6](-[#1])=[#6](-[#6]#[#7])-c:3:n:c:c:n:3)-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -802,802,4,hzone_furan_C(1),c:1:c(:c:c:c:c:1)-[#7](-c:2:c:c:c:c:c:2)-[#7]=[#6](-[#1])-[#6]:3:[#6](:[#6](:[#6](:[!#1]:3)-c:4:c:c:c:c(:c:4)-[#6](=[#8])-[#8]-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -803,803,4,anil_no_alk_C(1),[#7](-[#1])(-[#1])-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-c:2:c(-[#1]):c(:c(-[#6](-[#1])-[#1]):o:2)-[#6]=[#8])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -804,804,4,hzone_acid_D(1),[#8](-[#1])-[#6](=[#8])-c:1:c:c:c(:c:c:1)-[#7]-[#7]=[#6](-[#1])-[#6]:2:[#6](:[#6](:[#6](:[!#1]:2)-c:3:c:c:c:c:c:3)-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -805,805,4,hzone_furan_E(1),[#8](-[#1])-[#6](=[#8])-c:1:c:c:c:c(:c:1)-[#6]:[!#1]:[#6]-[#6]=[#7]-[#7](-[#1])-[#6](=[#8])-[#6](-[#1])(-[#1])-[#8],PAINS,6,1,ChEMBL,PAINS filters -806,806,4,het_6_pyridone_NH2(1),[#8](-[#1])-[#6]:1:[#6](:[#6]:[!#1]:[#6](:[#7]:1)-[#7](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#6](=[#8])-[#8],PAINS,6,1,ChEMBL,PAINS filters -807,807,4,imine_one_fives_D(1),[#6]-1(=[!#6&!#1])-[#6](-[#7]=[#6]-[#16]-1)=[#8],PAINS,6,1,ChEMBL,PAINS filters -808,808,4,pyrrole_M(1),n2(-c:1:c:c:c:c:c:1)c(c(-[#1])c(c2-[#6]=[#7]-[#8]-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -809,809,4,pyrrole_N(1),n2(-[#6](-[#1])-c:1:c(:c(:c:c(:c:1-[#1])-[#1])-[#1])-[#1])c(c(-[#1])c(c2-[#6]-[#1])-[#1])-[#6]-[#1],PAINS,6,1,ChEMBL,PAINS filters -810,810,4,pyrrole_O(1),n1(-[#6](-[#1])-[#1])c(c(-[#6](=[#8])-[#6])c(c1-[#6]:[#6])-[#6])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -811,811,4,ene_cyano_G(1),n1(-[#6])c(c(-[#1])c(c1-[#6](-[#1])=[#6](-[#6]#[#7])-c:2:n:c:c:s:2)-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -812,812,4,sulfonamide_J(1),n3(-c:1:c:c:c:c:c:1-[#7](-[#1])-[#16](=[#8])(=[#8])-c:2:c:c:c:s:2)c(c(-[#1])c(c3-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -813,813,4,misc_pyrrole_benz(1),n2(-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1])-[#6](=[#8])-[#7](-[#1])-[#6](-[#1])(-[#6](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#8]-[#6]:[#6])c(c(-[#1])c(c2-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -814,814,4,thio_urea_R(1),c:1(:c:c:c:c:c:1)-[#7](-[#1])-[#6](=[#16])-[#7]-[#7](-[#1])-[#6](-[#1])=[#6](-[#1])-[#6]=[#8],PAINS,6,1,ChEMBL,PAINS filters -815,815,4,ene_one_one_B(1),[#6]-1(-[#6](=[#8])-[#6](-[#1])(-[#1])-[#6]-[#6](-[#1])(-[#1])-[#6]-1=[#8])=[#6](-[#7]-[#1])-[#6]=[#8],PAINS,6,1,ChEMBL,PAINS filters -816,816,4,dhp_amino_CN_H(1),[#7](-[#1])(-[#1])-[#6]-1=[#6](-[#6]#[#7])-[#6](-[#1])(-[#6]:[#6])-[#16]-[#6;X4]-[#16]-1,PAINS,6,1,ChEMBL,PAINS filters -817,817,4,het_66_anisole(1),[#6](-[#1])(-[#1])-[#8]-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1])-[#7](-[#1])-c:2:c:c:n:c:3:c(:c:c:c(:c:2:3)-[#8]-[#6](-[#1])-[#1])-[#8]-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -818,818,4,thiazole_amine_N(1),[#6](-[#1])(-[#1])-[#8]-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#1])-[#7](-[#1])-c:2:n:c(:c:s:2)-c:3:c:c:c(:c:c:3)-[#8]-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters -819,819,4,het_pyridiniums_C(1),[#6]~1~3~[#7](-[#6]:[#6])~[#6]~[#6]~[#6]~[#6]~1~[#6]~2~[#7]~[#6]~[#6]~[#6]~[#7+]~2~[#7]~3,PAINS,6,1,ChEMBL,PAINS filters -820,820,4,het_5_E(1),[#7]-3(-c:2:c:1:c:c:c:c:c:1:c:c:c:2)-[#7]=[#6](-[#6](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#6]-3=[#8],PAINS,6,1,ChEMBL,PAINS filters -821,821,5,"2,2-dimethyl-4,5-dicarboxy-dithiole",C1(C)(C)SC(C(=O)O)=C(C(=O)O)S1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -822,822,5,"2,3,4_trihydroxyphenyl",c([OH])c([OH])c([OH]),SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -823,823,5,"2,3,5_trihydroxyphenyl",c([OH])c([OH])cc([OH]),SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -824,824,5,acid_anhydrides,C(=O)OC(=O),SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -825,825,5,acid_halides,"[S,C](=[O,S])[F,Br,Cl,I]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -826,826,5,Acridine,c1c2cc4ccccc4nc2ccc1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -827,827,5,Active_Phosphate,"P(=S)([OH1,O$(O[#6])])([OH1,O$(O[#6])])[S,O]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -828,828,5,acyl_cyanide,C(=O)-C#N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -829,829,5,Adjacent_Ring_Double_Bonds,[*;R]=[*;R]=[*;R],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -830,830,5,Aldehyde,[#6][C!H0]=O,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -831,831,5,Aliphatic_Triflate,COS(=O)(=O)C(F)(F)F,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -832,832,5,alkyl_halides,"[Br,Cl,I][CX4;CH,CH2]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -833,833,5,AlkylEnamine,"[C;H1$(C([#6;!$(C=O)])),H0$(C([#6;!$(C=O)])[#6;!$(C=O)])]=[CH1]!@N([#6;!$(C(=O))])[#6;!$(C(=O))]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -834,834,5,Allene,*=C=*,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -835,835,5,Alpha_Halo_Carbonyl,"[C;!$(C[N])](=O)!@[C;h1,h2;H1,H2][F,Cl,Br,I]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -836,836,5,amidotetrazole,c1nnnn1C=O,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -837,837,5,Amino_Naphtalimide,c1(N)ccc(C(=O)NC3(=O))c(c3ccc2)c21,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -838,838,5,Aminonitrile,NC#N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -839,839,5,Anhydride,[#6]C(=O)OC(=O)[#6],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -840,840,5,Any_Carbazide,O=*N=[N+]=[N-],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -841,841,5,aromatic_azides,cN=N=N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -842,842,5,Azanitrone,N=[N+]([O-])C,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -843,843,5,azoalkanals,[N;R0]=[N;R0]CC=O,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -844,844,5,Azobenzene,c1ccccc1[N!r]=[N!r]c2ccccc2,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -845,845,5,Azocyanamide,[N;R0]=[N;R0]C#N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -846,846,5,b-Carbonyl_Quaternary_Nitrogen,"C(=O)CC[N+,n+]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -847,847,5,benzylic_quaternary_nitrogen,"cC[N+,NX4]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -848,848,5,beta-carbonyl_quaternary_nitrogen,"C(=O)C[N+,n+,NX4,nX4]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -849,849,5,Beta-Fluoro-ethyl-ON,"[C;H2$(CF),H1$(C(F)F)]!@[CH2][N,O]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -850,850,5,biotin_analogue,C12C(NC(N1)=O)CSC2,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -851,851,5,carbazides,C(=O)N=N=N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -852,852,5,carbodiimides,N=C=N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -853,853,5,CCl3-CHO_releasing,"C(Cl)(Cl)(Cl)C([O,S])[NX3]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -854,854,5,Chloramidine,[Cl]C([C&R0])=N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -855,855,5,Conjugated_Dithioether,SC(=[!r])S,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -856,856,5,Crown_Ether_12CRO4,O1CCOCCOCCOCC1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -857,857,5,Crown_Ether_15CRO5,O1CCOCCOCCOCCOCC1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -858,858,5,Crown_Ether_16CRO6,O1CCOCCOCCOCCOCCOCC1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -859,859,5,crown_ethers,[O;R1][C;R1][C;R1][O;R1][C;R1][C;R1][O;R1],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -860,860,5,cyanamide,N[CH2]C#N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -861,861,5,Cyanophosphonate,P(OCC)(OCC)(=O)C#N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -862,862,5,Cyanohydrin,N#CC[OH1],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -863,863,5,di_and_triphosphates,P(=O)([OH])OP(=O)[OH],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -864,864,5,Diacetylene,C#CC#C,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -865,865,5,Diazoalkane,C=[N+]=[N-],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -866,866,5,Diazonium_Salt,[N+]#N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -867,867,5,Diene,C!@=[CH1]-C!@=[CH1]-[CX3](=O),SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -868,868,5,Dinitrobenzene_1,c1c([N+](=O)[O-])c([N+](=O)[O-])ccc1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -869,869,5,Dinitrobenzene_2,c1c([N+](=O)[O-])ccc([N+](=O)[O-])c1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -870,870,5,Dinitrobenzene_3,c1c([N+](=O)[O-])cc([N+](=O)[O-])cc1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -871,871,5,disulfides,[SX2][SX2],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -872,872,5,Dithiocarbamate,NC(=S)S,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -873,873,5,Dithiole-2-thione,S1SC=CC1=S,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -874,874,5,Dithiole-3-thione,S1C=CSC1=C,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -875,875,5,Dithiomethylene_acetal,S[C;!$(C=*)]S,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -876,876,5,Enyne,C=!@CC#C,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -877,877,5,"epoxides,_thioepoxides,_aziridines","C1[O,S,N]C1",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -878,878,5,ester_of_HOBT,C(=O)Onnn,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -879,879,5,Flavin,"c1cccc(NC(=NC(=[N,S,O])NC(=O)3)C3=N2)c12",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -880,880,5,Fluorescein,c1cc(O)cc(OC(=CC(=O)C=C3)C3=C2)c12,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -881,881,5,Fluorinated_Carbon_1,C(C(CF)F)F,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -882,882,5,Fluorinated_Carbon_2,C(C(F)F)(F)F,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -883,883,5,four_member_lactones,C1(=O)OCC1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -884,884,5,geminal_amines,[NH1;!r][CX4][NH1;!r],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -885,885,5,geminal_dinitriles,N#CCC#N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -886,886,5,"halo-pyridine,_-diazoles_and_-triazoles","[Cl,Br,I]c1[c,n][c,n][c,n][c,n]n1",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -887,887,5,hydrazothiourea,N=NC(S)N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -888,888,5,Imidazolium,c1[n+]([#6])ccn1([#6]),SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -889,889,5,Imine2,"[#6,#8,#16]-[CH1]=[NH1]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -890,890,5,imines_(not_ring),"[#6][C;R0](=[N;R0,O0])[#6]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -891,891,5,isocyanates_and_isothiocyanates,"N=C=[S,O]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -892,892,5,isonitrile,[N+]#[C-],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -893,893,5,ketene,C=C=O,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -894,894,5,Lawesson_Reagent_Derivatives,P(=S)(S)S,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -895,895,5,"methylidene-1,3-dithiole",S1C=CSC1=S,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -896,896,5,Michael_Phenyl_Ketone,c1ccccc1C(=O)C=!@CC(=O)!@*,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -897,897,5,N-halo,"[NX3,NX4][F,Cl,Br,I]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -898,898,5,Nitrobenz-azadiazole_1,"c1ccc(n[o,s]n2)c2c1[N+](=O)[O-]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -899,899,5,Nitrobenz-azadiazole_2,"c1c([N+](=O)[O-])cc(n[o,s]n2)c2c1",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -900,900,5,nitrosamine,N-[N;X2](=O),SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -901,901,5,nitroso,[N&D2](=O),SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -902,902,5,noname,"N1=C[S,NH1]C(=[C,N,P][C,N,O,P])C1(=O)",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -903,903,5,N-Oxide_aliphatic,[N+!$(N=O)][O-X1],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -904,904,5,N-S_(not_sulfonamides),[#6][S!$(S(~[OD1])~[OD1])][N;H0],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -905,905,5,Orthoester,C(O)(O)[OH],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -906,906,5,o-tertbutylphenol,c1c([OH1])c(C(C)(C)C)ccc1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -907,907,5,Oxobenzothiepine,C1(=O)C=CCSC=C1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -908,908,5,P_or_S_Halides,"[P,S][Cl,Br,F,I]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -909,909,5,p-Aminoaryl_diazo,Nc1aaa(N!@=N)aa1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -910,910,5,PCP,PCP,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -911,911,5,paranitrophenyl_esters,C(=O)Oc1ccc([N+](=O)[O-])cc1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -912,912,5,pentahalophenyl,"c1c([F,Cl])c([F,Cl])c([F,Cl])c([F,Cl])c1([F,Cl])",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -913,913,5,pentafluorophenyl_esters,C(=O)Oc1c(F)c(F)c(F)c(F)c1(F),SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -914,914,5,peroxide,[#8]~[#8],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -915,915,5,Phenanthrene,c12cccc3c1c4c(cc3)cccc4cc2,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -916,916,5,Phenylester,C(=O)!@Oc1ccccc1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -917,917,5,phosphonate_esters,[#6]P(=O)(~O)O[#6],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -918,918,5,phosphoramides,NP(=O)(N)N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -919,919,5,phosphorane,C=P,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -920,920,5,Phosphorus_Halide,"[S,P][F,Cl,Br,I]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -921,921,5,Polyene,C=!@CC=!@C,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -922,922,5,polyenes,C=CC=CC=CC=C,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -923,923,5,polyene_chain_between_aromatics,cC=CC=CC=Cc,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -924,924,5,polyines,CC#CC#CC,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -925,925,5,Polynuclear_Aromatic_1,c1cccc(cc(cccc2)c2c3)c13,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -926,926,5,Polynuclear_Aromatic_2,c1cccc(c(cccc2)c2cc3)c13,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -927,927,5,Polysulfide,*[SX2][SX2][SX2]*,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -928,928,5,Sulphur_Halide,"[#16][F,Cl,Br,I]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -929,929,5,pyrene_fragments,c1c2cccc3c2c4c(cc3)cccc4c1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -930,930,5,Pyrylium,c1ccc[o+]c1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -931,931,5,reactive_carbonyls,"[C;!r](=[O,S])[S;!r]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -932,932,5,reactive_carbonyls,"[C;!r](=[O,S])[CD2;!r][F,Br,Cl]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -933,933,5,Ring_Triple_Bond,"[C,c;R]#[C,c;R]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -934,934,5,S=N_(not_ring),[S;R0]=[N;R0],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -935,935,5,Sulfonate_Ester,O=[SX4](=O)OC,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -936,936,5,sulfonyl_cyanide,S(=O)(=O)C#N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -937,937,5,Sulphate_Ester,"COS(=O)O[C,c]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -938,938,5,sulphonates,"COS(=O)(=O)[C,c]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -939,939,5,Sulphur_Nitrogen_single_bond,[SX2H0]!@[N],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -940,940,5,Tetraazinane,C1NNC=NN1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -941,941,5,Thiocyanate,SC#N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -942,942,5,thioesters,"C[O,S;R0][C;R0](=S)",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -943,943,5,thioles_(not_aromatic),[!a][SX2;H1],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -944,944,5,Thiophosphothionate,"P(=S)(-[S;H1,H0$(S(P)C)])(-[O;H1,H0$(O(P)C)])(-N(C)C)",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -945,945,5,thiourea,[N;!r][C;!r](=S)[N;!r],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -946,946,5,Three_Membered_Heterocycle,"*1[O,S]*1",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -947,947,5,Tri_Pentavalent_S,"[#16v3,#16v5]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -948,948,5,Triacyloxime,C(=O)N(C(=O))OC(=O),SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -949,949,5,Triazole,c1cnnn1!@C!@[NH1][#6],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -950,950,5,triflate,OS(=O)(=O)(C(F)(F)(F)),SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -951,951,5,Triphenyl_Boranyl,B(c1ccccc1)(c2ccccc2)c3ccccc3,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -952,952,5,triphenylphosphines,P(c1aaaaa1)(c1aaaaa1)(c1aaaaa1),SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -953,953,5,Triphenyl_Silyl,[Si](c1ccccc1)(c2ccccc2)(c3ccccc3),SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -954,954,5,Vinyl_Halide,"[Cl,Br,I]C=[!O!R]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -955,955,5,Vinyl_Sulphone,"[#6][CH1]!@=[CH1][S;H1,H0$(S(C)C)](=O)(=O)",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -956,956,5,sulphates,[#6]S(=O)(=O)O,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -957,957,5,tropone,C1C(=O)C=CC=CC=1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -958,958,5,Oxime,"[#6]C(=!@N[$(OC),$([OH])])[#6]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -959,959,5,hydrazone,[#6]C(=!@NNa)[#6],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -960,960,5,Nitrosone_not_nitro,[$(N(~!@[#6])!@O);!$([N+]([O-])=O)],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -961,961,5,Thiocarbonyl_group,C=S,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -962,962,5,enamine_like,C=[NH],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -963,963,5,analine,"c1ccccc1[NH2,NH3+]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -964,964,5,acid_anhydrides_2,"[#6]C(=O)!@OC(=!@[N,O])[#6]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -965,965,5,trifluroacetate_amide,FC(F)(F)C(=O)N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -966,966,5,triple_bond,[#6]C#[CH],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -967,967,5,Allene,C=C=C,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -968,968,5,thiatetrazolidine,"[$(Sc1nnn[nH,n-]1),$(Sc1nn[nH,n-]n1)]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -969,969,5,glycol,"[#6][O;R0][$(C([#6])[#6]),$([CH][#6]),$([CH2])][O;R0][#6]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -970,970,5,oxy-amide,[#6]C(=O)!@C!@C(=O)N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -971,971,5,formate_formide,"O=[CH][O,N][#6]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -972,972,5,pyranone,O=C1C=COC=C1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -973,973,5,Coumarin,c1cc2C=CC(=O)Oc2cc1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -974,974,5,aminothiazole,s1ccnc1[N!H0],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -975,975,5,Thiazolidinone,O=C1CSCN1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -976,976,5,Thiomorpholinedione,N1C(=O)CSCC1=O,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -977,977,5,oxepine,O1C=CC=CC=C1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -978,978,5,phenylethene,c1ccccc1!@[CH]=!@[C!H0],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -979,979,5,Ethene,C=[CH2],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -980,980,5,cyclobutene,C1CC=C1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -981,981,5,poly_sub_atomatic,*!@c1c(!@*)c(!@*)c(!@*)c(!@*)c1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -982,982,5,Isotopes,"[2#1,3#1,11C,11c,14C,14c,125I,32P,33P,35S]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -983,983,5,Undesirable_Elements_Salts,"[Ac,Ag,Am,Ar,As,At,Au,Ba,Be,Bi,Bk,Cd,Ce,Cf,Cm,Cr,Cs,Dy,Er,Eu,Fr,Ga,Gd,Ge,He,Hf,Ho,In,Ir,Kr,La,Lu,Mo,Nb,Nd,Ne,Ni,Np,Os,Pa,Pb,Pd,Pm,Po,Pr,Pt,Pu,Ra,Rb,Re,Rh,Rn,Ru,Sb,Sc,Se,Sm,Sr,Ta,Tb,Tc,Te,Th,Ti,Tl,Tm,U,V,W,Xe,Y,Yb,Zr]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -984,984,5,Metal_Carbon_bond,"[#6;$([#6]~[#3,#11,#12,#13,#19,#20,#26,#27,#28,#29,#30])]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -985,985,5,Aromatic_N-Oxide_more_than_one,[n+][O-X1].[n+][O-X1],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -986,986,5,Nitro_more_than_one,[N+](=O)[O-].[N+](=O)[O-],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS -987,987,6,anhydride,C(=O)OC(=O),MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -988,988,6,pentafluorophenyl ester,C(=O)Oc1c(F)c(F)c(F)c(F)c1(F),MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -989,989,6,p-nitrophenyl ester,C(=O)Oc1ccc([N+]([O-])=O)cc1,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -990,990,6,any carbazide,O=*N=[N+]=[N-],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -991,991,6,HOBT ester,C(=O)Onnn,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -992,992,6,aromatic azide,cN=[N+]=[N-],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -993,993,6,imine2,"[#6,#8,#16]-[CH1]=[NH1]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -994,994,6,sulfonyl cyanide,S(=O)(=O)C#N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -995,995,6,azocyanamide,[N;R0]=[N;R0]C#N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -996,996,6,cyanohydrin,N#CC[OH],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -997,997,6,acyl cyanide,N#CC(=O),MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -998,998,6,acid halide,"[S,C](=[O,S])[F,Br,Cl,I]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -999,999,6,chloramidine,[Cl]C([C&R0])=N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1000,1000,6,P/S halide,"[P,S][F,Cl,Br,I]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1001,1001,6,quaternary,"[C+,Cl+,I+,P+,S+]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1002,1002,6,unacceptable atoms,[!#6;!#7;!#8;!#16;!#1;!#3;!#9;!#11;!#12;!#15;!#17;!#19;!#20;!#30;!#35],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1003,1003,6,triacyloxime,C(=O)N(C(=O))OC(=O),MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1004,1004,6,b-carbonyl quaternary nitrogen,"C(=O)CC[N+,n+]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1005,1005,6,benzylic quaternary nitrogen,cC[N+],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1006,1006,6,phosphorane,C=P,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1007,1007,6,Lawesson reagent derivatives,P(=S)(S)S,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1008,1008,6,cyanophosphonate,P(OCC)(OCC)(=O)C#N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1009,1009,6,sulfonate,"COS(=O)(=O)[C,c]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1010,1010,6,Heteroaryl sulfonate,"a-S(=O)(=O)-O[$([a&!#6]),$(c[a&!#6]),$(cc[a&!#6]),$(ccc[a&!#6]),$(cccc[a&!#6]),$(ccccc[a&!#6])]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1011,1011,6,sulfate ester,"COS(=O)O[C,c]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1012,1012,6,triflate,OS(=O)(=O)C(F)(F)F,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1013,1013,6,polyacidic,"[C,S,P](=O)[OH].[C,S,P](=O)[OH].[C,S,P](=O)[OH].[C,S,P](=O)[OH]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1014,1014,6,Sulfonic acid,[OH]-S(=O)(=O)-*,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1015,1015,6,thiol,[SH],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1016,1016,6,benzhydrol,[OH1]-C(-c1ccccc1)c2ccccc2,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1017,1017,6,dihydroxybenzene,[OH1]c1ccc([OH1])cc1,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1018,1018,6,"2,3,4trihydroxyphenyl",c([OH])c([OH])c([OH]),MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1019,1019,6,"2,4,5trihydroxyphenyl",c([OH])c([OH])cc([OH]),MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1020,1020,6,allene,*=C=*,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1021,1021,6,Azide,N=N=N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1022,1022,6,azoalkanal,[N;R0]=[N;R0]CC=O,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1023,1023,6,hydrazothiourea,N=NC(=S)N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1024,1024,6,Azo,N=N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1025,1025,6,aldehyde,[#6]-[CH1]=O,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1026,1026,6,hemiacetal,[#6]-O[CH1](-[#6])[OH1],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1027,1027,6,acetal,[#6]-O[CH1](-[#6])O-[#6],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1028,1028,6,Ketone,[#6]-C(=O)-[#6],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1029,1029,6,Ester,[#6]-C(=O)O-[#6],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1030,1030,6,imine 1,"[#6,#8,#16]-C(=[NH1])[#6,#8,#16]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1031,1031,6,Imine 3,C=[NH],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1032,1032,6,thioketone,CC(=S)C,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1033,1033,6,thioester,"C[O,S;R0][C;R0](=S)",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1034,1034,6,thionoester,COC(=S)C,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1035,1035,6,thioamide,CC(=S)N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1036,1036,6,thiourea,NC(=S)N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1037,1037,6,nitroso,[N&D2](=O),MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1038,1038,6,long chain hydrocarbon,[CD2;R0][CD2;R0][CD2;R0][CD2;R0][CD2;R0][CD2;R0],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1039,1039,6,Long aliphatic chain,"[N,C,S,O]-&!@[N,C,S,O]-&!@[N,C,S,O]-&!@[N,C,S,O]-&!@[N,C,S,O]-&!@[N,C,S,O]-&!@[N,C,S,O]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1040,1040,6,Unbranched chain,"[$([A&D2]),$([A&D1])]!@[A&D2]!@[A&D2]!@[A&D2]!@[A&D2]!@[$([A&D2]),$([A&D1])]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1041,1041,6,polyene,C=CC=CC=CC=C,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1042,1042,6,Dye 25,acC=&!@Cca,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1043,1043,6,isonitrile,[N+]#[C-],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1044,1044,6,thiocyanate,SC#N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1045,1045,6,cyanamide,N[CH2]C#N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1046,1046,6,Dye 16 (1),c([N+](=O)[O-]),MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1047,1047,6,nitro aromatic 2+,a-[N+](=O)[O-].a-[N+](=O)[O-],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1048,1048,6,Dye 29,"O=[N+](-[O-])-caac-[$(N(C)C),$([NH]C),$([NH2])]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1049,1049,6,Dye 1 (1),"c1cccc(C(=O)[C,c]([#7])=,:[C,c]([#7])C2(=O))c12",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1050,1050,6,Dye 7,"N=C1[#6]:,=[#6]C(=[C,N])[#6]:,=[#6]1",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1051,1051,6,Dye 11,"*=,:[#6]C([#6]=,:*)[#6]=,:*",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1052,1052,6,Dye 9,ac-*=&!@*-&!@C(=O)-&!@ca,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1053,1053,6,Dye 32,"c1cccc2C(=O)C(C:,=*)C(=O)c12",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1054,1054,6,Dye 6,c12cccc(C(=O)C(ca)C(=O)3)c2c3ccc1,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1055,1055,6,Dye 22,NS(=O)(=O)c1cccc([#7])c1,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1056,1056,6,Dye 2,OCccCO,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1057,1057,6,Dye 26,c1ccccc1-n2nnnc2[CH2]*,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1058,1058,6,alkyl halide,"[Br,Cl,I][CX4,CH,CH2,CH3]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1059,1059,6,Perhalo_ketone,"O=CC(-[F,Cl,Br,I])([F,Cl,Br,I])-[F,Cl,Br,I]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1060,1060,6,Beta halo carbonyl,"O=CCC[F,Cl,Br,I]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1061,1061,6,4-halopyridine,"[F,Cl,Br][c]1:[c,n]:[c,n]:[n]:[c,n]:[c,n]1",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1062,1062,6,2-halopyridine,"[F,Cl,Br][c]1:[c,n]:[c,n]:[c,n]:[c,n]:[n]1",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1063,1063,6,Hetero_hetero,"*[N,S,O]-&!@[N,S,O][#6]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1064,1064,6,peroxide,OO,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1065,1065,6,disulfide,SS,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1066,1066,6,hydrazine,[#6]-[NH]-[NH]-[#6],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1067,1067,6,acyl hydrazine,[N;R0][N;R0]C(=O),MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1068,1068,6,vinyl michael acceptor1,"[#6]-[CH1]=C-C(=O)[#6,#7,#8]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1069,1069,6,vinyl michael acceptor2,"[CH2]=C-C(=O)[#6,#7,#8]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1070,1070,6,michael acceptor 5,N#CC(=C)C#N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1071,1071,6,Michael acceptor 6,"[#6,#7]-&!@[#6](=&!@[CH])-&!@C(=O)-&!@[C,N,O,S]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1072,1072,6,alkynyl michael acceptor1,"[#6]-C#CC(=O)[#6,#7,#8]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1073,1073,6,alkynyl michael acceptor2,"[CH1]#CC(=O)-[#6,#7,#8]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1074,1074,6,nitroalkane,C[N+](=O)[O-],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1075,1075,6,crown ether,[O;R1][C;R1][C;R1][O;R1][C;R1][C;R1][O;R1],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1076,1076,6,nitrate,[#6]-O-[N+](=O)[O-],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1077,1077,6,Oxalyl,O=C-&!@C=O,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1078,1078,6,Dipeptide,*-C(=O)-&!@[NH]-C-&!@C(=O)-&!@[NH]-*,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1079,1079,6,quaternary nitroxy,C[N+](-[O-])(C)C,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1080,1080,6,Triphenylphosphine,a-P(-a)-a,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1081,1081,6,Phosphoric acid,[OH]-P(=O)(-O)-*,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1082,1082,6,Phosphoric ester,COP(=O)(-*)O,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1083,1083,6,di/triphosphate,P(=O)([OH])OP(=O)[OH],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1084,1084,6,tri phosphoric esters,[#6]OP(=O)(*)O[#6].[#6]OP(=O)(*)O[#6].[#6]OP(=O)(*)O[#6],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1085,1085,6,phosphoramide,NP(=O)(N)N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1086,1086,6,Phenalene,c1(c)c2c(c)cccc2ccc1,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1087,1087,6,(poly(azo(anthracene)),"c12:[c,n]:[c,n]:[c,n]:[c,n]:c1[c,n]c3:[c,n]:[c,n]:[c,n]:[c,n]:c3[c,n]2",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1088,1088,6,(poly(azo(phenanthrene)),"c12:[c,n]:[c,n]:[c,n]:[c,n]:c1:[c,n]:[c,n]:c3:[c,n]:[c,n]:[c,n]:[c,n]:c23",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1089,1089,6,Dye 31,a1aaac2ac3acac4aaac(c34)c12,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1090,1090,6,Dye 4,c12ccccc1C(=O)c3ccccc3C2=O,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1091,1091,6,Dye 8,c12cccc(C(=O)N(-&!@C)C(=O)3)c2c3ccc1,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1092,1092,6,"epoxide, aziridine, thioepoxide","C1[O,S,N]C1",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1093,1093,6,propiolactone,C1(=O)OCC1,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1094,1094,6,b-lactam,N1CCC1=O,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1095,1095,6,cycloheximide,O=C1CCCC(N1)=O,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1096,1096,6,aromatic Sulfonic ester,"[#6,#7]-S(=O)(=O)Oc",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1097,1097,6,quinone,"[$([o,n]=c1ccc(=[o,n])cc1),$([O,N]=C1C=CC(=[O,N])C=C1),$([O,N]=C1[#6]:,=[#6]C(=[O,N])[#6]:,=[#6]1)]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1098,1098,6,saponin,O1CCCCC1OC2CCC3CCCCC3C2,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1099,1099,6,monensin,O1CCCCC1C2CCCO2,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1100,1100,6,squalestatin,C12OCCC(O1)CC2,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1101,1101,6,cyanidin,[OH]c1cc([OH])cc2=[O+]C(=C([OH])Cc21)c3cc([OH])c([OH])cc3,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1102,1102,6,cytochalasin,O=C1NCC2CCCCC21,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) -1103,1103,7,Filter1_2_halo_ether,"[Cl,Br,I][CX4][CX4][$([O,S,N]*),Cl,Br,I]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1104,1104,7,Filter2_acyl_phosphyl_sulfonyl_halide,"[C,S,P](=O)[F,Cl,Br,I]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1105,1105,7,Filter3_allyl_halide,"[F,Cl,Br,I][CX4]C=C",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1106,1106,7,Filter4_alpha_halo_carbonyl,"[Br,Cl,I][C!H0]C=[O,S]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1107,1107,7,Filter5_azo,"[!#7,#1]~[NX2R0]=[NX2R0]~[!#7,#1]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1108,1108,7,Filter6_benzyl_halide,"[Br,Cl,I][CX4]c",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1109,1109,7,Filter7_diazo,[!#7]~[NX2]~[NX1],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1110,1110,7,Filter8_thio_isocyanat_diimin,"N=C=[N,O,P,S]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1111,1111,7,Filter9_metal,"[!#1!#6!#7!#8!#9!#15!#16!#17]~[*,#1]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1112,1112,7,Filter10_Terminal_vinyl,"[CH2]=[CH][N,O,P,S;R0]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1113,1113,7,Filter11_nitrosamin,[NR0]~[NX2]~[OX1],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1114,1114,7,Filter12_nitroso,"[*,#1]~[NX2]~[OX1]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1115,1115,7,Filter13_PS_double_bond,"S=P~[*,#1]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1116,1116,7,Filter14_thio_oxopyrylium_salt,"c1ccc[s,o;X2]c1",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1117,1117,7,Filter15_thiosulfate,[SX4](~S)(~O)(~O)~*,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1118,1118,7,Filter16_trialkyl_phosphin,[PX3]([#6])([#6])[#6],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1119,1119,7,Filter17_trialkyl_phosphin2,[PX4](~[!O!S])([#6])([#6])[#6],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1120,1120,7,Filter18_oxime_ester,"[!#7,#1]C=NO[C,S,P](=O)*",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1121,1121,7,Filter19_hydroxyimide_ester,O=C[NX3](C=O)OC(=O)*,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1122,1122,7,Filter20_hydrazine,[Nv3X3][Nv3X3!H0],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1123,1123,7,Filter21_cyanhydrin,[NX1]#C[CX4][OH],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1124,1124,7,Filter22_sulfonium_salt,*[SX3](*)*,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1125,1125,7,Filter23_ortho_quinone,C1(C=CC=CC1=O)=O,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1126,1126,7,Filter24_react_imide,"*C([F,Cl,Br,I,$(OS(=O)(=O)*)])=[NX2]*",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1127,1127,7,Filter25_sulfonyl_halide,"*S(=O)(=O)[F,Cl,Br,I]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1128,1128,7,Filter26_alkyl_halide,"AA[CH2][F,Cl,Br,I,$(OS(=O)(=O)*)]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1129,1129,7,Filter27_anhydride,"*[C,S](=O)O[C,S](=O)*",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1130,1130,7,Filter28_halo_pyrimidine,"c1nc(ncc1)[Br,I]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1131,1131,7,Filter29_thioester,"CC(=[OX1,SX1,NH])[SX2][*,#1]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1132,1132,7,Filter30_beta_halo_carbonyl,"[#6,#1]C(=O)CC[Br,I]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1133,1133,7,Filter31_so_bond,"[*,#1][SX2R0]O[*,#1]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1134,1134,7,Filter32_oo_bond,"[*,#1][OR0]O[*,#1]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1135,1135,7,Filter33_c10_alkyl,[CH3][CH2][CH2][CH2][CH2][CH2][CH2][CH2][CH2][CH2],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1136,1136,7,Filter34_isotope,"[2#1,3#1,13C,14C,15N,125I,23F,22Na,32P,33P,35S,45Ca,57Co,103Ru,141Ce]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1137,1137,7,Filter35_pp_bond,P-P,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1138,1138,7,Filter36_ss_double_bond,S=S,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1139,1139,7,Filter37_silicate,[Si]~O,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1140,1140,7,Filter38_aldehyde,O=[CH]*,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1141,1141,7,Filter39_imine,C[CR0]=[NR0][*!O],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1142,1142,7,Filter40_epoxide_aziridine,"C1C[N,S,O]1",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1143,1143,7,Filter41_12_dicarbonyl,*C(=O)C(=O)*,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1144,1144,7,Filter42_12_dicarbonyl_tautomer,[*!$(C[OH])]=C([OH])C(=O)*,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1145,1145,7,Filter43_michael_acceptor_sp1,C#CC=O,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1146,1146,7,Filter44_michael_acceptor2,"[#6,#1,OH0][C!$(C1(=O)C=CC(=O)C=C1)](=O)C=[C!$(C[Nv3X3,OH])]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1147,1147,7,Filter45_allyl_halide2,"[Br,Cl,I][CX4]C=[C,N,P]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1148,1148,7,Filter46_nhalide,"N[F,Cl,Br,I]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1149,1149,7,Filter47_so2f,O=S(=O)(*)F,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1150,1150,7,Filter48_foso,O=S(*)OF,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1151,1151,7,Filter49_halogen,"[*,#1]~[F,Cl,Br,I]~[*,#1]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1152,1152,7,Filter50_grignard,"C[Mg][F,Cl,Br,I]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1153,1153,7,Filter51_pn3,N[PX3](N)N,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1154,1154,7,Filter52_NC_haloamine,"NC[F,Cl,Br,I]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1155,1155,7,Filter53_para_quinones,O=C1C=CC(=O)C=C1,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1156,1156,7,Filter56_SS_bond,S-S,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1157,1157,7,Filter57_polyphenol1,Oc1cc(O)cc(O)c1,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1158,1158,7,Filter58_polyphenol2,Oc1c(O)cc(O)cc1,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1159,1159,7,Filter59_phoshorous_ylide,C=P,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1160,1160,7,Filter60_Acyclic_N-S,N!@[SX2],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1161,1161,7,Filter61_phosphor_halide_and_P_S_bond,"[#15]~[F,Cl,Br,I,#16]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1162,1162,7,Filter62_oxo_thio_halide,"[O,S]~[Cl,Br,I]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1163,1163,7,Filter63_polyaromatic,a1aaaa2ccc3ccccc3c12,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1164,1164,7,Filter64_halo_ketone_sulfone,"[#6][C,S](=[O,S])C[F,Cl,Br,I]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1165,1165,7,Filter65_alkyl_sulfonate,"[#6][P,S](~[OX1])(~[OX1])O[C!H0]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1166,1166,7,Filter66_c4_perfluoralkyl,C(F)(F)C(F)(F)C(F)(F)C(F)(F),Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1167,1167,7,Filter67_S_or_O_C_triplebond_N,"[O,S]C#N",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1168,1168,7,Filter68_anthracene_acridine,a1aaac2cc3ccccc3cc12,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1169,1169,7,Filter69_thio_carbonate,"[O,S]C(=[O,S])[O,S]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1170,1170,7,Filter70_AlkylCN2,*(C#N)C#N,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1171,1171,7,Filter71_thio_anhydride,"*C(=[O,S])[O,S]C(=[O,S])*",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1172,1172,7,Filter72_hydrated_di_ketone,C(=O)C([OH])[OH],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1173,1173,7,Filter73_thio_ketone,CC(=S)C,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1174,1174,7,Filter74_thiol,*[SX2H],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1175,1175,7,Filter75_alkyl_Br_I,"[C!H0][Br,I]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1176,1176,7,Filter76_S_ester,CC(=S)O,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1177,1177,7,Filter77_alkyl_NO2,"[*!#7]~[#6]-,=CN(~O)(~O)",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1178,1178,7,Filter78_bicyclic_Imide,*~@C1C(=O)NC(=O)C(~@*)1,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1179,1179,7,Filter79_maleimide,[CH]1C(=O)NC(=O)[CH]=1,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1180,1180,7,Filter80_Thioepoxide_aziridone,"[N,S]1[C,N,S][C,N,S]1",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1181,1181,7,Filter81_Thiocarbamate,"S!@C(=!@[O,S])!@[#7]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1182,1182,7,Filter82_pyridinium,"[c,n]1[c,n][c,n][c,n][c,n]n(C)1",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1183,1183,7,Filter83_per_halo_chain,"[F,Cl,Br,I]C-,=;!@C([F,Cl,Br,I])-,=;!@C([F,Cl,Br,I])",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1184,1184,7,Filter84_nitrogen_mustard,"[N,P,Se,S][C!H0]C[Br,Cl,I]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1185,1185,7,Filter85_keto_acrylonitrile,*C(=O)C(=!@[C!H0])C#N,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1186,1186,7,Filter86_cyanamide,N#C[#7!$(N(C#N)=C(N)NC)],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1187,1187,7,Filter87_crowns,"[N,O,S]-@[#6!$(*(~@*)(~@*)~@*)]@[#6!$(*(~@*)(~@*)~@*)]-@[N,O,S]-@[#6!$(*(~@*)(~@*)~@*)]@[#6!$(*(~@*)(~@*)~@*)]-@[O,N]-@[#6!$(*(~@*)(~@*)~@*)]@[#6!$(*(~@*)(~@*)~@*)]-@[N,O,S]-@C",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1188,1188,7,Filter88_ene_sulfone,[C!H0]=CS(=O)(=O)*,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1189,1189,7,Filter89_hydroxylamine,"[*!$(C=O)]!@N!@O[*,#1]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1190,1190,7,Filter90_N_double_bond_S,N=!@S,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1191,1191,7,Filter92_trityl,*(c1ccccc1)(c1ccccc1)(c1ccccc1),Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1192,1192,7,Filter93_acetyl_urea,C(=O)!@N!@C(=O)[#7],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1193,1193,7,Filter94_2_halo_pyridine,"c1nc(ccc1)[Br,I,Cl,F]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. -1194,1194,8,aromatic NO2,O~N(=O)-c(:*):*,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1195,1195,8,deuterium,[2H],LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1196,1196,8,C13,[13#6],LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1197,1197,8,2-chloropyridine,n1c(cccc1)Cl,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1198,1198,8,aniline,[NH2D1]-c(:*):*,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1199,1199,8,"Si,B,Se atoms","[Si,B,Se]",LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1200,1200,8,hetero imides,[!#6]-[CH2]-N1C(=O)CCC(=O)1,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1201,1201,8,poly ethers,O[CH2][CH2]O-!@[CH2][CH2]O,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1202,1202,8,acyclic imines,"C-!@[NX2]=[C!R,#1]-C",LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1203,1203,8,alkyl esters of S or P,"[S,P](=O)OC",LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1204,1204,8,ugly P compounds,"P(=[O,S])[C,N]([C,N])[C,N]",LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1205,1205,8,"acyclic N-,=N and not N bound to carbonyl or sulfone","[N;!$(N-[C,S]=*)]-,=;!@[N;!$(N-[C,S]=*)]",LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1206,1206,8,acyclic N-C-N,N-!@[CX4]-!@N,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1207,1207,8,acyclic N-S,N-!@[SX2]-*,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1208,1208,8,mustards,"[N,S,O][CH2][CH2]-[F,Cl,Br,I]",LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1209,1209,8,aldehyde,O=[C!H0],LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1210,1210,8,"1,2-dicarbonyl not in ring",O=[CX3]-!@[CX3]=O,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1211,1211,8,"carbamate, T-boc Protected",NC(OC([CH3])([CH3])[CH3])=O,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1212,1212,8,"carbamate, CBZ Protected",NC(O[CH2]c1ccccc1)=O,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1213,1213,8,carbamate include di-substitued N,OC(=O)-!@[NX3],LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1214,1214,8,acyl halide,"O=C-[F,Cl,Br,I]",LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1215,1215,8,alkyl halide,"[CH2]-[Cl,Br,I]",LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1216,1216,8,alpha halo carbonyl,"O=C-C-[F,Cl,Br,I]",LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1217,1217,8,sufonyl halide,"S(=O)(=O)-[F,Cl,Br,I]",LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1218,1218,8,N:C-SCH2 groups,[ND1]=C-!@[SX2]-[CH2D2],LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1219,1219,8,26,N-C(=S)-N,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1220,1220,8,terminal vinyl,[CH2D1]=[CD2]-!@*,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1221,1221,8,28,S=P~*,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1222,1222,8,thio cyanates,S-C#N,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1223,1223,8,thiols,*-[S!H0],LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1224,1224,8,thionyl,[Sv4](=O)(-!@[!#1])-!@[!#1],LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1225,1225,8,n-haloamines,"N-[F,Cl,Br,I]",LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1226,1226,8,N-C-Hal or cyano methyl,"N-C-[F,Cl,Br,I,$(C#N)]",LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1227,1227,8,alpha beta-unsaturated ketones; center of Michael reactivity,"[$(C#N),$(N(~O)~O),$(C=O),$(S(=O)=O),$(C(F)(F)F),Cl][C!H0]=[C!H0]",LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1228,1228,8,aliphatic ketone not ring and not di-carbonyl,[C;!$(C=*)][C!R](=O)[CH2D2],LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1229,1229,8,"aliphatic ester, not lactones",C[C!R](=O)[O!R][CH2D2],LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1230,1230,8,"long aliphatic chain, 6+",[CH2][CH2][CH2]-!@[CH2][CH2][CH2],LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1231,1231,8,quinones,"O=[#6]1[#6]:,=[#6][#6](=O)[#6]:,=[#6]1",LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1232,1232,8,acyclic C=C-O,C=C-!@O-*,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1233,1233,8,acyclic C=N-H,[NH1X2]=[C!R;!$(C(-N)(=[NH1])-N)],LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1234,1234,8,acyclic NO not nitro,O-!@[N;!$(N(=O)=O);!$([N+](=O)[O-])],LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1235,1235,8,42,S-S,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1236,1236,8,43,O~O,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1237,1237,8,thioester,C-C(=O)[SD2],LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1238,1238,8,aziridine-like N in 3-membered ring,N~1~*~*1,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1239,1239,8,epoxides,O~1C~*1,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1240,1240,8,aryl iodide,I-c:*,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1241,1241,8,aryl bromide,Br-c:*,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1242,1242,8,multiple aromatic rings,a1aaa2a(a1)aaa(a2):a,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1243,1243,8,multiple aromatic rings,"[!#1]-,:1-:a2a(-:[!#1]:3:a1aaaa3)aaaa2",LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1244,1244,8,S/PO3 groups,"[P,S](~O)(~O)~O",LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1245,1245,8,adamantyl,C12CC3CC(C1)CC(C2)C3,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1246,1246,8,too many cyano Groups (>1),C#N.C#N,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1247,1247,8,too many COOH groups (>1),[CX3](=O)[OH1].[CX3](=O)[OH1],LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1248,1248,8,amino acid,[NH2][CX4]C(=O)O,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1249,1249,8,chlorates,Cl~O,LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1250,1250,8,high halogen content (>3),"[F,Cl,Br,I].[F,Cl,Br,I].[F,Cl,Br,I].[F,Cl,Br,I]",LINT,2,1,ChEMBL,Pfizer lint filters (lint) -1251,1251,9,O=C1C=CC(=O)C=C1,O=C1C=CC(=O)C=C1,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1252,1252,9,c1oc(=S)sc1,"c1oc(=[O,S])sc1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1253,1253,9,O=C1OCCS1,"O=[#6]1[o,O][#6]@[#6][s,S]1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1254,1254,9,SC#N,SC#N,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1255,1255,9,[OH]c1ccc(O)cc1,[OH]a1aaa(O)aa1,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1256,1256,9,O=C1CCC(=O)C=C1,O=C1CCC(=O)C=C1,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1257,1257,9,O=C1C=CCC=C1Br,"O=C1C=CCC=C1[F,Cl,Br,I]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1258,1258,9,C=CS,C=[C;R0]S,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1259,1259,9,C=CCl,"C=C[Cl,Br,I]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1260,1260,9,c1cccc2nonc12,c1cccc2nonc12,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1261,1261,9,Oc1ccc2nc(F)cnc2c1,"[N,OH]c1ccc2nc([c,F])c[c,n]c2c1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1262,1262,9,[OH]c1ccc(N)cc1_0,"[OH]a1aaa([n,N;R0])aa1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1263,1263,9,Nc1cccs1,[N;R0]a1caas1,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1264,1264,9,Sc1ccccc1N,"[s,S;R0;!$(S(=O)(=O)N)]a1a([n,N;R0])aaaa1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1265,1265,9,C(=S)S,[#6]C(=S)S,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1266,1266,9,SC1=NCCS1,"SC1=NCC[N,S]1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1267,1267,9,n1ncnc2C(=O)NC(=O)Nc,n1ncnc2c(=O)nc(=O)nc12,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1268,1268,9,c1nsnc1,"c1n[o,s]nc1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1269,1269,9,[SH],[#6;!$(C=C);!$(CO);!$(CN)][SH],Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1270,1270,9,CBr,"[C;!$(C=C)][Br,I]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1271,1271,9,C1=CN=NC(=O)C1I,"c1cnnc(=O)c1[Cl,Br,I]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1272,1272,9,NC=S_0,"[n,N][c,C;R1]=S",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1273,1273,9,C1CSCN1,C1CSCN1,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1274,1274,9,Nc1nccs1,Nc1nccs1,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1275,1275,9,NC=S_1,"[c,C][C;R0](=S)N",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1276,1276,9,S=O,[S;!$(S(=O)=O)]=O,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1277,1277,9,C(=O)S,[#6]C(=O)S,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1278,1278,9,Nc1ccc2ncccc2c1,[N;R0]c1ccc2ncccc2c1,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1279,1279,9,CC(=S)N,N=CS,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1280,1280,9,c1ccc2C(=O)CCCc2c1,"c1ccccc1[C;R1](=O)[c,C]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1281,1281,9,[OH]c1ccccc1O,[OH]a1aaaaa1O,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1282,1282,9,NC(=S)S,NC(=S)S,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1283,1283,9,[OH]c1cc(N)ccc1_0,"Oa1aa([n,N;R1])aaa1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1284,1284,9,C=CC(=O)OC,"C=CC(=O)O[c,C]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1285,1285,9,O=C1CCCCO1,"[o,O;R1][c,C]=O",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1286,1286,9,SCC=O,"S[c,C][c,C]=O",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1287,1287,9,CN=NC,[N;R0]=[N;R0;!$([N+])],Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1288,1288,9,C#CBr,"C#C[F,Cl,Br,I]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1289,1289,9,C=CC(=O)C,"C=CC(=O)[c,C]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1290,1290,9,SCS,"[s,S][#6][s,S]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1291,1291,9,Sc1ccc(N)cc1,"[s,S;R0;!$(S(=O)(=O)N)]a1aaa([n,N;R0])aa1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1292,1292,9,Nc1cc2ccccc2cc1,Nc1cc2aaaaa2cc1,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1293,1293,9,SCCC=O,"S[c,C][c,C][c,C]=O",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1294,1294,9,SCO,"[s,S][#6]O",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1295,1295,9,NC(=S)N,"[n,N][c,C;R0](=S)[n,N]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1296,1296,9,OC(=N)S,"OC(=[n,N])[s,S]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1297,1297,9,c1sccc1,csc,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1298,1298,9,NC(=O)S,NC(=O)S,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1299,1299,9,O=CN=C,"[O,S]=CN=[c,C]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1300,1300,9,C=C[CH]=O,C=C[CH]=O,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1301,1301,9,S(=O)(=O),[S;!$(S(=O)(=O)N)](=O)=O,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1302,1302,9,C=CC(=O)N,C=CC(=O)N,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1303,1303,9,Oc1cc2ccccc2cc1,Oc1cc2aaaaa2cc1,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1304,1304,9,[OH]c1ccc(N)cc1_1,"Oa1aaa([n,N;R1])aa1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1305,1305,9,[OH]c1cc(N)ccc1_1,"[OH]a1aa([n,N;R0])aaa1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1306,1306,9,[NH]c1ccc(N)cc1,"[nH,NH,NH2;R0]a1aaa([n,N;R0])aa1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1307,1307,9,S(=O)(=O)N,S(=O)(=O)N,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1308,1308,9,Oc1ccccc1S,[OH]a1a([S;!$(S(=O)(=O)N)])aaaa1,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1309,1309,9,O=C1NC(=O)CC1,"O=[#6]1[n,N][#6](=O)[#6]@[#6]1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1310,1310,9,Nc1cccc2ccccc12,Nc1cccc2aaaaa12,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1311,1311,9,Oc1ccc(S)cc1,[OH]a1aaa([S;!$(S(=O)(=O)N)])aa1,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1312,1312,9,C=NC=O,"[c,C]=NC=O",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1313,1313,9,C[N+](=O)[O-],[C;!$(C=C)][N+](=O)[O-],Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1314,1314,9,Oc1cc([NH])ccc1,"[O;!$([OH])]a1aa([nH,NH,NH2;R0])aaa1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1315,1315,9,c1ccccc1N,"[N;!$([N+]);!$(NC=[O,N])]c1[a;R1][a;R1]a[a;R1][a;R1]1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1316,1316,9,c1ccccc1I,"c[Br,I]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1317,1317,9,Oc1ccc(C=O)cc1,[O;R0]aaaa[C;R0]=O,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1318,1318,9,c1ccccc1O,Oc1[a;R1][a;R1]a[a;R1][a;R1]1,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1319,1319,9,N[CH]=O,N[CH]=O,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1320,1320,9,[CH]=O,"[c,C][CH]=O",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1321,1321,9,Sc1cc(N)ccc1,"[s,S;R0;!$(S(=O)(=O)N)]a1aa([n,N;R0])aaa1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1322,1322,9,c1ccccc1[N+](=O)[O-],c[N+](=O)[O-],Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1323,1323,9,[OH]c1ccccc1N,"[OH]a1a([n,N;R0])aaaa1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1324,1324,9,C=NN,[C;R0]=[N;R0][N;R0],Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1325,1325,9,CSC,"[c,C;!$(C=O);!$(C=N);!$(C=S)][S;!$(S=O)][c,C;!$(C=O);!$(C=N);!$(C=S)]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) -1326,1326,10,Naphthafurans,c1cccc2c1c3c(c5CNCOc25)cco3,AlphaScreen-Hitters,9,1,Litterature,Structural filters for compounds that may be alphascreen frequent hitters -1327,1327,10,Phenoxazines,"[OX1,N]=[#6]1-,:[#6]=,:[#6]2-,:[#16X2,#8X2]-,:[#6]3=,:[#6]-,:[#6](=,:[#6]-,:[#6]=,:[#6]3-,:[#7]=,:[#6]2-,:[#6]=,:[#6]1)",AlphaScreen-Hitters,9,1,Litterature,Structural filters for compounds that may be alphascreen frequent hitters -1328,1328,10,Anthrones,"[#6]2=,:[#6]3-,:[#6]4=,:[#6](-,:[#6]=,:[#6]-,:[#6]=,:[#6]4)-,:[#6](=O)-,:[#6]4=,:[#6]3-,:[#6](=,:[#6]-,:[#6]=,:[#6]4)[#7]-,:[#6]2=O",AlphaScreen-Hitters,9,1,Litterature,Structural filters for compounds that may be alphascreen frequent hitters -1329,1329,10,Imidazotriazoles,"[c,n]1cnn2c([NH])cnc12",AlphaScreen-Hitters,9,1,Litterature,Structural filters for compounds that may be alphascreen frequent hitters -1330,1330,10,Indenones,"[#6R1]1-,:[#6R1](=[OX1])c2ccccc2-,:[#6]([NX3])=,:1",AlphaScreen-Hitters,9,1,Litterature,Structural filters for compounds that may be alphascreen frequent hitters -1331,1331,10,Indolines,[CX4]1c2ccccc2[NX3]([CX4][CX4][CX4][NX3])[CX4]1,AlphaScreen-Hitters,9,1,Litterature,Structural filters for compounds that may be alphascreen frequent hitters -1332,1332,11,Cyanothiopyrans,[NH2]C1=C(C#[NX1])[C!H0](-cc)C(C#[NX1])=C([NH2])S1,GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1333,1333,11,Cyanodithiine,"[#16X2]1-,:[#6X3]([CX2]#[NX1])=,:[#6X3]([CX2]#[NX1])-,:[#16X2]-,:[#6X3]([CX2]#[NX1])=,:[#6X3]1([CX2]#[NX1])",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1334,1334,11,Azafluorenones,"[OX1,SX1]=[#6X3]1c2c([nX2][cX3,nX2,nX3][cX3,nX2,nX3][cX3,nX2,nX3]2)[c,n]2c1[cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])]2",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1335,1335,11,Cyanothioazinones,"[SX1]=[#6X3]1-,:[#7X3H1]-,:[#7X2,#6X3!$([#6X3]=[A])]=,:[#7X2,#6X3!$([#6X3]=[A])]-,:[#7X2,#6X3!$([#6X3]=[A])]=,:[#6X3]1([CX2]#[NX1])",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1336,1336,11,Cyanopyridinones,"[OX1]=[#6X3]1-,:[#6X3]=,:[#6X3]-,:[#6X3]([CX2]#[NX1])=,:[#6X3]2-,:[#7X3]([CX4][CX4]([OX2H1])[CX4][NX3H1]c5ccccc5)-,:[#6]3ccccc3-,:[#7X3]12",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1337,1337,11,Thienopyridinones,[SX2]1C(=C(C4=C1[NX3!H0]C(C(=[C!H0]4)C(=[OX1])[OX2H1])=[OX1])[NX3H2])C(=[OX1])[NX3!H0],GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1338,1338,11,Pyranopyridinones,"[OX2]1[CX3]([NX3H2])=[CX3]([CX2]#[NX1])[CX4][#6X3]2[#6X3](=[OX1])-,:[#7X3H1]-,:[#6X3]=,:[#6X3]-,:[#6X3]12",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1339,1339,11,Benzoxathiolones,"[$([#8]1-,:[#6](-,:[#16]c4cc(ccc14)[#7,#8])=[OX1,SX1]),$([#8]1-,:[#6](-,:[#16]c4ccc(cc14)[#7,#8])=[OX1,SX1])]",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1340,1340,11,Indoloquinones,"[#6X3]1-,:[#6X3]=,:[#6X3]-,:[#6X3]=,:[#6X3]2-,:[#6X3]1-,:[#6X3](=[OX1])-,:[#6X3]3-,:[nX3]4-,:[#6X3](-,:[#6X3]=,:[#6X3]-,:[#6X3]=,:[#6X3]4)=,:[#6X3]-,:[#6X3]3-,:[#6X3]2=[OX1]",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1341,1341,11,Catechols,[OX1]=[CX3]1[CX4][CX4][CX4][CX3]2=[CX3]1[CX4](c5ccc([OX2H1])c([OX2H1])c5)[NX3]c3ccc4[nX2]cccc4c23,GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1342,1342,11,Pyrazolones,"[#7X2]1=,:[#6X3]-,:[#6X3](-,:[#6X3](-,:[#7X3]1)=[SX1,OX1])=,:[#6X3H1](-,:[#7X3H1])",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1343,1343,11,Sulfonylamide_A,"[$([cX3!$([#6X3]=[A])]3[cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3]3[SX4](=[OX1])(=[OX1])[NX3H1][cX3]1[cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])]2s[cX3!$([#6X3]=[A])]n[cX3!$([#6X3]=[A])]2[cX3!$([#6X3]=[A])]1),$([NX3]([cX3]1[cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])]1)[SX4](=[OX1])(=[OX1])[cX3]2c3n[o,s]n[cX3!$([#6X3]=[A])]3[cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])]2)]",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1344,1344,11,Sulfonylamide_B,"[NX3]1([CH3,$(c5[cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])]c5)])[CX4][CX4][NX3]([SX4](=[OX1])(=[OX1])[$(c2[cX3R1;!$([#6X3]=[OX1])][cX3R1;!$([#6X3]=[OX1])][cX3R1;!$([#6X3]=[OX1])][cX3R1;!$([#6X3]=[OX1])][cX3R1;!$([#6X3]=[OX1])]2),$(c7[cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])]c8nsnc78)])[CX4][CX4]1",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1345,1345,11,Thiopyrylium,c1[#16+]cccc1,GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1346,1346,11,Pyrimidinones_A,"[OX1,SX1]=[#6X3]1[#7X3](-,:[#7X2]=,:[#6X3][NX3H1][#6])-,:[cX3!$([#6X3]=[A])]=,:[#7X2]-,:[cX3!$([#6X3]=[A])]=,:[cX3!$([#6X3]=[A])]1",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1347,1347,11,Pyrimidinones_B,"[OX1]=[#6X3]1-,:[#6X3]2scc-,:[#6X3]2-,:[#7X3]3-,:[#6X3](=,:[#7X2]-,:[#7X2]=,:[#6X3]3[CX4])-,:[#7X3]1[CX4H3]",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1348,1348,11,Pyrimidinones_C,"[OX1,SX1]=[#6X3]1[#7X3]-,:[#6X3!$([#6X3]=[A])](-[NX3])=,:[#7X2]-,:[#6X3]2([nX2][#6X3!$([#6X3]=[A])][#6X3!$([#6X3]=[A])][#6X3!$([#6X3]=[A])]c12)",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1349,1349,11,Pyrimidinodiones,"[#6X3]1(=[OX1,SX1])-,:[#7X3H1]-,:[#6X3](=[OX1,SX1])-,:[#7X3,#7X2]~[#6X3]([#7X2,#7X3;R1])-,:[#6X3]1[sX2r5R1,nX2r5R1,$([nx2r6R1]([cX3])[cX3])]",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1350,1350,11,Thienopyrimidinone_A,"[OX1,SX1]=[#6X3]1-,:[#7X3H1]-,:[#6X4]-,:[#7X3H1]-,:[#6]2-,:[#16X2,#8X2]-,:[#6]3[CX4][NX3,CX4][CX4][CX4]-,:[#6]3-,:[#6]12",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1351,1351,11,Thienopyrimidinone_B,"[OX1,SX1]=[#6X3]1-,:[#6X3]([#6X3]=[OX1])=,:[#6X3]-,:[#7X2]=,:[#6X3]2-,:[#16X2,#8X2,#7]-,:[#6]3[cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])]3-,:[#7X3,#6]12",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1352,1352,11,Piperazinediones,"[#7X3]1-,:[#6X3](=[OX1,SX1])-,:[#6X3](=[OX1,SX1])-,:[NX3]-,:[#6X3]2[cX3!$([#6X3]=[A])][cX3]([NX3H1][CX3]=[OX1])[cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3]12",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1353,1353,11,4-Heteryl-thiazoles,"s1[c,nX2][c,nX2](-c(c)[nX2,nX3,sX2])[nX2]c1",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1354,1354,11,Oxadiazoles,o1nc([CX4])nc1[CX4H2][SX4](=[OX1])(=[OX1])[CX4H2][CX3](=[OX1])[NX3!H0],GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1355,1355,11,Cycloheptenones,"[#6]1-,:[#6]=,:[#6]-,:[#6X3](=[OX1])-,:[#6]([OX2H1])=,:[#6]-,:[#6]=,:1",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1356,1356,11,Thiophenes,[sX2]1[cX3]([NX3H1][CX3](=[OX1])-c)[cX3]([CX3](=[OX1])[OX2][CX4H3])[cX3][cX3]1,GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1357,1357,11,Thiazoles,[nX2]1[cX3](-[cX3])[sX2][cX3][cX3]1[CX3](=[OX1])[NX3H2],GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1358,1358,11,Cyanothioethers,"[NX1]#[CX2][CX4H2][SX2]c1n[c,n][c,n][c,n]n1",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1359,1359,11,Aminopyrimidines_A,c1[nX2]c[nX2][nX3]1[CX4][CX4][NX3]([CX4])-c2cc[nX2]c(-c3cc[nX2]cc3)[nX2]2,GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1360,1360,11,Fused azacycles_A,"[nX2R1][c,n;R2]1[c,n;R2]([c,n;R1])[c,n][c,n][c,n;R2]([c,n;R1])[nR2]1[nX2R1]",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1361,1361,11,Fused azacycles_B,"[NX1]#[CX2]c1[c!$([#6]=[OX1])]n[n,c!$([#6]=[OX1])]2[c,n][c!$([#6]=[OX1])][c!$([#6]=[OX1])]nc12",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1362,1362,11,Aminopyrimidines_B,[NX3H2]c1ncnc2ncccc21,GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1363,1363,11,Ethylenediamines,[NX3H1]1[CX4][CX4][CX4][CX4]([NX3H1][CX4][CX4]A-c)[CX4]1,GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1364,1364,11,Arylethanolamines,"[$([NX3]([CX4,H])([CX4,H])[CX4]),$([OX2]([H,CX4])[CX4])][CX4!H0][CX4H2][NX3H1]c[nX2r6R1][nX2,nX3][nX2,cX3;R1][cX3,nX2][cX3,nX2][sX2,cX3][cX3]",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1365,1365,11,Azaspironones,"[X4;R2]12(-,:;@[#6X3]-,:;@[#6X3]-,:;@[#7X3]-,:;@[#6X3]-,:;@1)-,:;@[#16X2]-,:;@[#6X3]=,:;@[#7X2]-,:;@[#7X3]-,:;@2",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS -1366,1366,12,NCCN,"[$(c1[nv3X2][c,n][c,n,s][c,n]1),$(c2[nv3X2][c,n][c,n][c,n][c,n]2)]-[$(c1[nv3X2][c,n][c,n,s][c,n]1),$(c2[nv3X2][c,n][c,n][c,n][c,n]2)]",HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate -1367,1367,12,Picolylamines_A,"[$([NX3][CH2]c1ncnc([NX3])c1),$([NX3][CH2]c1nccc([NX3])n1)]",HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate -1368,1368,12,Picolylamines_B,"[$([NX3]([H,CX4!H0!R])([H,CX4!H0!R])[C!H0!R]c1[nv3X2]n([H,CH3])cc1),$([NX3]([H,CX4!H0!R])([H,CX4!H0!R])[C!H0!R]c1[nv3X2]ccn1[H,CH3])]",HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate -1369,1369,12,Picolylamines_C,"c1cccnc1[CH2!R][NX3!R]([H,CH3])[CH2!R]",HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate -1370,1370,12,Bis-picolylamines,"[nv3X2]c([c,s,n])[CX4][NX3]([H,C])[CX4]c([c,s,n])[nv3X2,nv3X3H1]",HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate -1371,1371,12,Alkylimidazoles_A,"[cR1]1[nv3X2R1][cHR1][cHR1][nR1]1[CH2!R][CH2!R][$([NX3!H0]([CH2!R])[$([SX4](=[OX1])(=[OX1])c),$([CX3](=[OX1])[CH2][O,N]),$([CH2!R])]),$([CH2!R][nr5,$([NX3!H0]([CH2!R])[$([SX4](=[OX1])(=[OX1])c),$([CX3](=[OX1])[CH2][O,N]),$([CH2!R])])]),$([CH2!R][CH2!R][NX3!H0][$([SX4](=[OX1])(=[OX1])c),$([CX3](=[OX1])[CH2][O,N]),$([CH2!R])])]",HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate -1372,1372,12,Alkylimidazoles_B,[nv3X2]1cncc1[CX4][CX4][NH2],HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate -1373,1373,12,Heterylimidazoles,[nv3X3]1c(-c[nv3X2])c[nv3X2]c1,HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate -1374,1374,12,Diarylamines,c([nv3X2])(c)[NX3H1!R]c([nv3X2])(c),HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate -1375,1375,12,Diarylmethanes,"[$(c1[nX2][c,n][c,n][c,n]1),$([cr6][nX2r6])][CX4H2!R][$(c2[nX2][c,n][c,n][c,n]2),$([cr6][nX2r6])]",HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate -1376,1376,12,Aminals,c1ccc[nv3X2]c1[#6](~[#7])~[#7],HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate -1377,1377,12,Heterylsulfides,"[SX2]-[#6R1]2=,:[#7R1]-,:[#6R1]=,:[#6R1]-,:[#7R2]3-,:[#6R1](=O)-,:[#7R1]-,:[#7R1]=,:[#6R2]23",HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate -1378,1378,12,Heterylamides_A,"[$([cr5][n,s;r5][n,o;r5]),$([cr5]([nr5])[s,o,n;r5])][Nv3X3H1!R][CX3!R](=[OX1])[$([cr5][nv3X2r5]),$(c1ncccc1),$(c1c([OX2][CH3])cccc1)]",HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate -1379,1379,12,Heterylamides_B,"[$(c1nnc[o,n]1),$(c1nccs1)][Nv3X3H!R][C!R](=[OX1])[CX4!H0]([H,CX4])[SX2,n]cc",HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate -1380,1380,12,Pyrimidinetriones,C1=C([OH1])[NX3][CX3](=[OX1])[NX3][CX3]1(=[OX1]),HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate -1381,1381,12,8-Quinolinols,"[H,C][OX2]c1c([CX4][NX3])ccc2cccnc21",HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate -1382,1382,12,Benzoxozinones,c1cccc2[NX3][CX4][CX3](=[OX1])[OX2]c12,HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate -1383,1383,12,Perchloroquinone,"[OX1]=[CX3]1C([F,Cl,Br,I])=C([F,Cl,Br,I])[CX3](=[OX1])C([F,Cl,Br,I])=C1[F,Cl,Br,I]",HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate -1384,1384,12,Alkylimidazole_C,nc[nv3X3Hr5]c[CX4]c[nv3X2],HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate -1385,1385,13,Benzyl Imidazole scaffold,"[c,n]:1:c:[c,n]:[c,n]2:[c,n](:c:1)[c,n,o,s][c,n]([c,n,o,s]2)*-,=*c:3:c:c:c:c:c:3",LuciferaseInhibitor,9,1,Litterature,Structural filters for compounds that may inhibit luciferase. -1386,1386,13,6-Phenyl Napthaline type scaffold,"[c,n]:1:c:[c,n]:[c,n]2:[c,n](:c:1)[c,n,o,s][c,n]([c,n,o,s][c,n,o,s]2)*~*c:3:c:c:c:c:c:3",LuciferaseInhibitor,9,1,Litterature,Structural filters for compounds that may inhibit luciferase. -1387,1387,13,2-(2-(1H-pyrrol-2-yl)ethyl)-1H-benzoimidazole scaffold,"[c,n]:1:c:c2:c(:[c,n]:c:1)[c,n,o,s][c,n]([c,n,o,s]2)*~*c3ccc*3",LuciferaseInhibitor,9,1,Litterature,Structural filters for compounds that may inhibit luciferase. -1388,1388,14,,[NH][NH2],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1389,1389,14,,"[CH3,$([CH2]([NX3])[#6]),$([CH]([NX3])([#6])[#6])][NH,$(N([CX4])([NX3])[#6])][N+](=O)[O-]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1390,1390,14,,"[NH2,$([NH](N=N)[#6]),$(N(N=N)([#6])[#6])]N=N[CX4]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1391,1391,14,,"[$([C-][N+]#N),$(C=N=N)]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1392,1392,14,,[cH]1[cH][cH]c2c(ccc3ccccc23)[cH]1,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1393,1393,14,,"[CH3,$([CH2]([NX3])[#6]),$([CH]([NX3])([#6])[#6])][NH,$(N([CX4])([NX3])[#6])][NX2]=O",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1394,1394,14,,C=C[CH2]c1ccccc1,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1395,1395,14,,"[$([CX4]C(=O)OCc1ccn2CCC(OC([CX4])=O)c12),$([CX4]C(=O)OCC1=CCN2CCC(OC([CX4])=O)C12),$([CX4]C(=O)OC\C1=C\CN([CH3])CCC(OC([CX4])=O)C1=O)]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1396,1396,14,,"[#6][O,S][CH2,$([CH]([O,S])([F,Cl,Br,I])[CX4]),$(C([O,S])([F,Cl,Br,I])([CX4])[CX4])][F,Cl,Br,I]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1397,1397,14,,[$([c][NH2]);r6;!$([c]([a]C)([a]C)[NH2]);!$([c]([c]C(=O)[OH])[NH2]);!$([c]([c]S(=O)(=O)[OH])[NH2]);!$([c]([a][c]S(=O)(=O)[OH])[NH2]);!$([c]([a][a][c]S(=O)(=O)[OH])[NH2])],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1398,1398,14,,[$([c][NH][#6]);r6;!$([c]([a]C)([a]C)[NH][#6]);!$([c]([c]C(=O)[OH])[NH][#6]);!$([c]([c]S(=O)(=O)[OH])[NH][#6]);!$([c]([a][c]S(=O)(=O)[OH])[NH][#6]);!$([c]([a][a][c]S(=O)(=O)[OH])[NH][#6])],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1399,1399,14,,[$([c]N([CH3])[CH3]);r6;!$([c]([a]C)([a]C)N([CH3])[CH3]);!$([c]([c]C(=O)[OH])N([CH3])[CH3]);!$([c]([c]S(=O)(=O)[OH])N([CH3])[CH3]);!$([c]([a][c]S(=O)(=O)[OH])N([CH3])[CH3]);!$([c]([a][a][c]S(=O)(=O)[OH])N([CH3])[CH3])],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1400,1400,14,,[$([c][N+](=O)[O-]);r6;!$([c]([a]C)([a]C)[N+](=O)[O-]);!$([c]([c]C(=O)[OH])[N+](=O)[O-]);!$([c]([c]S(=O)(=O)[OH])[N+](=O)[O-]);!$([c]([a][c]S(=O)(=O)[OH])[N+](=O)[O-]);!$([c]([a][a][c]S(=O)(=O)[OH])[N+](=O)[O-])],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1401,1401,14,,[$([c][NX2]=O);r6;!$([c]([a]C)([a]C)[NX2]=O);!$([c]([c]C(=O)[OH])[NX2]=O);!$([c]([c]S(=O)(=O)[OH])[NX2]=O);!$([c]([a][c]S(=O)(=O)[OH])[NX2]=O);!$([c]([a][a][c]S(=O)(=O)[OH])[NX2]=O)],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1402,1402,14,,[$(c[NH][OH]);r6],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1403,1403,14,,"[$([c]N=[NH,$(N(=N)[#6])]);r6;!$([c]([a]C)([a]C)N=[NH,$(N(=N)[#6])]);!$([c]([c]C(=O)[OH])N=[NH,$(N(=N)[#6])]);!$([c]([c]S(=O)(=O)[OH])N=[NH,$(N(=N)[#6])]);!$([c]([a][c]S(=O)(=O)[OH])N=[NH,$(N(=N)[#6])]);!$([c]([a][a][c]S(=O)(=O)[OH])N=[NH,$(N(=N)[#6])])]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1404,1404,14,,"[$([c][NH]C(=O)[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]);r6;!$([c]([a]C)([a]C)[NH]C(=O)[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]);!$([c]([c]C(=O)[OH])[NH]C(=O)[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]);!$([c]([c]S(=O)(=O)[OH])[NH]C(=O)[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]);!$([c]([a][c]S(=O)(=O)[OH])[NH]C(=O)[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]);!$([c]([a][a][c]S(=O)(=O)[OH])[NH]C(=O)[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])])]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1405,1405,14,,[$([c][NH]OC(=O)[#6]);r6;!$([c]([a]C)([a]C)[NH]OC(=O)[#6]);!$([c]([c]C(=O)[OH])[NH]OC(=O)[#6]);!$([c]([c]S(=O)(=O)[OH])[NH]OC(=O)[#6]);!$([c]([a][c]S(=O)(=O)[OH])[NH]OC(=O)[#6]);!$([c]([a][a][c]S(=O)(=O)[OH])[NH]OC(=O)[#6])],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1406,1406,14,,[$(c[NH2]);r5],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1407,1407,14,,[$(c[NH][#6]);r5],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1408,1408,14,,[$(cN([CH3])[CH3]);r5],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1409,1409,14,,[$(c[N+](=O)[O-]);r5],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1410,1410,14,,[$(c[NX2]=O);r5],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1411,1411,14,,[$(c[NH][OH]);r5],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1412,1412,14,,"[$(cN=[NH,$(N(=N)[#6])]);r5]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1413,1413,14,,"[$(c[NH]C(=O)[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]);r5]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1414,1414,14,,[$(c[NH]OC(=O)[#6]);r5],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1415,1415,14,,N(c)(c)[NX2]=O,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1416,1416,14,,[NX3](C)(C)C,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1417,1417,14,,"[$([CH2]),$([CH]C)]=[CH,$(C[CX4])][CH]=O",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1418,1418,14,,"[$([$([CH2]),$([CH]C)]=[CH,$(C[CX4])]C(=O)[#6]);!$([CH]1=CC(=O)C=CC1(=O));!$([CH]1=CC(=O)C(=O)C=C1)]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1419,1419,14,,"[$([CH2]),$([CH]C)]=[CH,$(C[CX4])]C(=O)O[#6]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1420,1420,14,,"[$([CH2]),$([CH]C)]=[CH,$(C[CX4])]C(=O)[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1421,1421,14,,"[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]C(=O)N=NC(=O)[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1422,1422,14,,"[$(C1(=O)[#6]=,:[#6]C(=O)[CH]=C1),$(C1(=O)C(=O)[#6]=,:[#6][CH]=C1)]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1423,1423,14,,"[$(C1=CC(=O)[#6]=,:[#6]C1(=[CH][CX4])),$(C1(=[CH][CX4])C(=O)[#6]=,:[#6]C=C1)]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1424,1424,14,,"[$(C1(=O)[#6]=,:[#6][$(C=[NH]),$(C=N[CX4])][CH]=C1),$(C1(=O)[$(C=[NH]),$(C=N[CX4])][#6]=,:[#6][CH]=C1),$(C1(=O)[$(C=[NH]),$(C=N[CX4])]C=[CH][#6]=,:[#6]1)]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1425,1425,14,,"[$([CH]1=C[$(C=[NH]),$(C=N[CX4])][#6]=,:[#6][$(C=[NH]),$(C=N[CX4])]1),$([CH]1=C[$(C=[NH]),$(C=N[CX4])][$(C=[NH]),$(C=N[CX4])][#6]=,:[#6]1)]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1426,1426,14,,"[$(c1([OH,$(O[CH3])])c[cH]c([OH,$(O[CH3])])cc1),$(c1([OH,$(O[CH3])])c([OH,$(O[CH3])])cc[cH]c1)]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1427,1427,14,,"[$(c1([OH])ccc([CH3,$([CH2][CX4])])cc1),$(c1([OH])c([CH3,$([CH2][CX4])])cccc1)]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1428,1428,14,,[cH]1ccc(OCO2)c2c1,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1429,1429,14,,"[cH,$(c(c)(c)[CX4])]1[cH][cH][cH,$(c(c)(c)[CX4])][cH][cH,$(c(c)(c)[CX4])]1",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1430,1430,14,,[cH]1c[cH]c2cc3ccccc3cc2[cH]1,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1431,1431,14,,"[cH]1cc([OH,$(O[CH3])])cc2ccnc12",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1432,1432,14,,[CH3]c1c[nH]c2ccccc12,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1433,1433,14,,"[cH]1[cH,$(c(c)(o)C)]o[cH,$(c(c)(o)C)][cH,$(c(c)(c)C)]1",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1434,1434,14,,"[cH]1[cH,$(c(c)(o)C)]s[cH,$(c(c)(o)C)][cH,$(c(c)(c)C)]1",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1435,1435,14,,"[CH,$(C(=O)[#6])](=O)[F,Cl,Br,I]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1436,1436,14,,"[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]C(=O)[F,Cl,Br,I]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1437,1437,14,,"[NH,$(N(=C=O)[#6])]=C=O",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1438,1438,14,,"[NH,$(N(=C=[SX1])[#6])]=C=[SX1]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1439,1439,14,,C1C(=O)[NH]C(=O)S1,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1440,1440,14,,"[NH2,$([NH]([CH]=O)[#6]),$(N([CH]=O)([#6])[#6])][CH](=O)",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1441,1441,14,,"[#6]S(=O)(=O)[NH]C(=O)[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1442,1442,14,,c[NH]C(=O)[NH]c,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1443,1443,14,,c1ccccc1[CX4][NH2],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1444,1444,14,,"[CX4][CH]([F,Cl,Br,I])[F,Cl,Br,I]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1445,1445,14,,"[cH,$(c(c)(c)C)]1[cH,$(c(c)(c)C)]s[cH][cH]1",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1446,1446,14,,[cH]1[cH]c(=O)oc2ccccc12,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1447,1447,14,,"[NX3,SX2][CH2,$([CH]([NX3,SX2])([CX4])[CX4])][CH2,$([CH]([CX4])([Cl,Br,I])[CX4])][Cl,Br,I]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1448,1448,14,,"[Cl,Br,I][CH2,$([CH]([Cl,Br,I])([CX4])[CX4])][CH2,$([CH]([Cl,Br,I])([CX4])[CX4])][Cl,Br,I]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1449,1449,14,,"[CH3,$([CH2](O)[#6]),$([CH](O)([#6])[#6])]O[NX2]=O",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1450,1450,14,,"[CH3,$([CH2]([NX3])[CX4]),$([CH]([NX3])([CX4])[CX4])][NX3]([CH3])C(=[O,SX2])[O,SX2][CX4]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1451,1451,14,,"[CH3,$([CH2]([F,Cl,Br,I])[#6]),$([CH]([F,Br,Cl,I])([#6])[#6]);!$([CH2,CH]C=O);!$([CH2,CH][CX4][NX3,SX2]);!$([CH2,CH][CX4][F,Cl,Br,I])][F,Cl,Br,I]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1452,1452,14,,"[#6]S(=O)(=O)O[CH3,$([CH2](O)[#6]),$([CH](O)([#6])[#6])]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1453,1453,14,,"[#6]OS(=O)(=O)O[CH3,$([CH2](O)[#6]),$([CH](O)([#6])[#6])]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1454,1454,14,,"[#6][O,SX2]P(=[O,SX1])([O,SX2][#6])[O,SX2][CH3,$([CH2](O)[#6]),$([CH](O)([#6])[#6])]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1455,1455,14,,"[#6][O,SX2]P(=[O,SX1])([#6])[O,SX2][CH3,$([CH2](O)[#6]),$([CH](O)([#6])[#6])]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1456,1456,14,,"[#6][PX4](=O)O[CH3,$([CH2](O)[#6]),$([CH](O)([#6])[#6])]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1457,1457,14,,C1CC(=O)O1,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1458,1458,14,,"[$(C1OS(=O)(=O)CC1),$(C1OS(=O)(=O)CCC1)]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1459,1459,14,,[CX4][NX3]([#6])[NX2]=O,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1460,1460,14,,C1OC1,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1461,1461,14,,C1[NX3]C1,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1462,1462,14,,C1[SX2]C1,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1463,1463,14,,"[CH2,$([CH](=[CH])[#6,F,Cl,Br,I])]=[CH][F,Cl,Br,I,$(O(C=C)[a])]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1464,1464,14,,[a]C(=O)N(O[#6])OC(=O)[#6],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1465,1465,14,,[#6][NH]C(=S)[NH][#6],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. -1466,1466,15,"A1, A2, A4-A12, B2, B3, B4, B6",[OH][CX3](=[OX1])c1ncccc1,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1467,1467,15,A3,"[OH][CX3](=[OX1])[#6]1-,:[$([#7X3+]-[OX1-]),$([#7v5X3]=[OX1])]=,:[#6]-,:[#6]=,:[#6]-,:[#6]=,:1",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1468,1468,15,B1,c1cccc2c1ccc([OH])n2,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1469,1469,15,B5,"[#6]1=,:[#6]-,:[#6]=,:[#6]([OH])-,:[#6]2=,:[#6]1-,:[#6]=,:[#6]-,:[#6]=,:[$([#7X3+]-[OX1-]),$([#7v5X3]=[OX1])]2",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1470,1470,15,"B7, B8, B9, B12",c1ccc([OH])c2c1cccn2,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1471,1471,15,B10,c1ccc([SH])c2c1cccn2,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1472,1472,15,B11,c1ccc([CX3](=[OX1])[OH])c2c1cccn2,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1473,1473,15,C2,[NH2]c1nc([NH2])cc([OH])n1,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1474,1474,15,"C3, C7, C8",[SH]c1nc([OH])ccn1,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1475,1475,15,C4,[OH]c1nc([SH])ccn1,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1476,1476,15,C5,[SH]c1nc([CH3])cc([CH3])n1,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1477,1477,15,C5*,[SH]c1nc([CX4])cc([CX4])n1,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1478,1478,15,"C6, C12",[OH]c1nc([OH])cc([CH3])n1,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1479,1479,15,"C6*, C12*",[OH]c1nc([OH])cc([CX4])n1,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1480,1480,15,C9,[NH2]c1ncnc2c1nc[nH]2,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1481,1481,15,C9*,[NH2]c1ncnc2c1nc[nX3]2,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1482,1482,15,"C10, C11","[CH3]c1nc([OH])cc([OH,CH3])n1",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1483,1483,15,"C10*, C11*","[CX4]c1nc([OH])cc([OH,CX4])n1",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1484,1484,15,"D1, D3, D4, D6-D11","O=[#6]1-,:[#6]([OH])=,:[#6]-,:[#8]-,:[#6]=,:[#6]-,:1",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1485,1485,15,"D2, D5","S=[#6]1-,:[#6]([OH])=,:[#6]-,:[#8]-,:[#6]=,:[#6]-,:1",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1486,1486,15,D12,"O=[#6]1-,:[#8]-,:[#6]=,:[#6]-,:[#6]=,:[#6]([OH])-,:1",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1487,1487,15,"E1, E10","O=[#6]1-,:[#7]([OH])-,:[#6]=,:[#6]-,:[#6]=,:[#6]-,:1",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1488,1488,15,E2,"S=[#6]1-,:[#7]([OH])-,:[#6]=,:[#6]-,:[#6]=,:[#6]-,:1",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1489,1489,15,"E3*, E4*, E5*","O=[#6]1-,:[#6]([OH])=,:[#6]([CX4])-,:[#7]([CX4])-,:[#6]=,:[#6]-,:1",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1490,1490,15,"E6, E8","O=[#6]1-,:[#7]([H,CH3])-,:[#6]=,:[#6]-,:[#6]=,:[#6]-,:1([OH])",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1491,1491,15,"E6*, E8*","O=[#6]1-,:[#7X3]-,:[#6]=,:[#6]-,:[#6]=,:[#6]-,:1([OH])",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1492,1492,15,"E7*, E11*, E12*","S=[#6]1-,:[#6]([OH])=,:[#6]([CX4])-,:[#7]([CX4])-,:[#6]=,:[#6]-,:1",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1493,1493,15,E9,"S=[#6]1-,:[#7]([CH3])-,:[#6]=,:[#6]-,:[#6]=,:[#6]-,:1([OH])",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1494,1494,15,E9*,"S=[#6]1-,:[#7]([CX4])-,:[#6]=,:[#6]-,:[#6]=,:[#6]-,:1([OH])",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1495,1495,15,"F1, F3-F12",[OH]c1ccccc1[CX3](=[OX1])[OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1496,1496,15,F2,[OH]c1ccccc1[CX3](=[OX1])[NH2],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1497,1497,15,G1,[CX4][CX3](=[OX1])[NX3H1][OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1498,1498,15,G1*,[CX4][CX3](=[OX1])[NX3][OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1499,1499,15,G2,[nX3H]1cccc1C(=[OX1])[OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1500,1500,15,G2*,[nX3]1cccc1C(=[OX1])[OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1501,1501,15,G3,c1ccnc(c1)C[NX3H]Cc2ccccn2,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1502,1502,15,G3*,c1ccnc(c1)C[NX3]Cc2ccccn2,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1503,1503,15,G4,C1C[NX3H1]CC[NX3H1]CC[NX3H1]1,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1504,1504,15,G4*,C1C[NX3]CC[NX3]CC[NX3]1,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1505,1505,15,G5,"c1ccc2c(c1)-,:[#6](=O)-,:[#6]=,:[#6](-,:[#6]2=O)[OH]",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1506,1506,15,G6,c1cnc(cc1[CX4][OH])c2cc(ccn2)[CX4][OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1507,1507,15,G7,c1cc2c(nc1)c3c(cccn3)cc2,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1508,1508,15,G8,c1ccc(c(c1)[OH])[OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1509,1509,15,"G9,G10","c1ccc(c(c1)[OH,SH])[OX2][CX4]",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1510,1510,15,"G11, G12","[OH][#6]1=,:[#6]-,:[#6]=,:[#6]-,:[#6]=,:[#6]-,:[#6]1=[OX1]",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1511,1511,15,H1,c1ccc2c(c1)ccc(c2[OH])[OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1512,1512,15,H2,c1ccc2cc(c(cc2c1)[OH])[OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1513,1513,15,H3,c1cc(c(c(c1)[NH2])[OH])C(=[OX1])[OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1514,1514,15,H4,c1cc(c(c(c1)[OH])[OH])C(=[OX1])[OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1515,1515,15,H5,c1ccc(c(c1)c2nc3ccccc3o2)[OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1516,1516,15,H6,c1ccc(c(c1)c2nc3ccccc3s2)[OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1517,1517,15,H7,[CH3]c1ccc(cc1)[Sv6X4](=[OX1])(=[OX1])[NX3H2],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1518,1518,15,H7*,[CX4]c1ccc(cc1)[Sv6X4](=[OX1])(=[OX1])[NX3H2],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1519,1519,15,H8 - H12,"C[CX3](=[OX1])[CX4!H0]([H,CX4,Cl])[CX3](=[OX1])C",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1520,1520,15,H8*- H12*,C[CX3](=[OX1])[CX4][CX3](=[OX1])C,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). -1521,1521,16,Diethylstilbestrol,[CH3][C][C]([C]([C][CH3])[c]1[c][c][c]([O])[c][c]1)[c]2[c][c][c]([O])[c][c]2,Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. -1522,1522,16,Triazolam,[c]1([CH3])[n][n][c]2[C][N]=[C]([c]3[c][c][c][c][c]3Cl)[c]4[c][c](Cl)[c][c][c]4[n]12,Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. -1523,1523,16,Apomorphine,[CH3][N]1[C][C][c]2[c][c][c][c]-3[c]2[C]1[C][c]4[c][c][c]([O])[c]([O])[c]-34,Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. -1524,1524,16,Idebenone,[CH3][O][C]1[C]([O][CH3])[C](=O)[C]([C][C][C][C]([CH3])[C][C][C][C]([CH3])[C][O])[C]([CH3])[C]1=O,Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. -1525,1525,16,Tocopherol,[CH3][C]([CH3])[C][C][C][C]([CH3])[C][C][C][C]([CH3])[C][C][C][C]1([CH3])[C][C][c]2[c](-[CH3])[c]([O])[c](-[CH3])[c](-[CH3])[c]2[O]1,Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. -1526,1526,16,Benserazide,[N]([#1])([#1])[C]([C][O])[C](=O)[N][N][C][c]1[c][c][c]([O])[c]([O])[c]1[O],Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. -1527,1527,16,Clofazimine,[CH3][C]([CH3])[N][C]1[C]=[c]2[c]([C]=[C]1[N][c]3[c][c][c](Cl)[c][c]3)[n][c]4[c][c][c][c][c]4[n]2[c]5[c][c][c]([CH3])[c][c]5,Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. -1528,1528,16,Fenoterol,[CH3][C]([C][c]1[c][c][c]([O])[c][c]1)[N][C][C]([O])[c]2[c][c]([O])[c][c]([O])[c]2,Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. -1529,1529,16,Calciferol,[CH3][C]([CH3])[C][C][C][C]([CH3])[C]1[C][C][C]2[C]1([CH3])[C][C][C]\[C]2=[C]/[C]=[C]3\[C][C]([O])[C][C][C]3[CH3],Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. -1530,1530,16,SF85190,[#6][N]([C][C][C]C#C[C]([CH3])([CH3])[CH3])[C][c]1[c][c][c][c]2[c][c][c][c][c]12,Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. -1531,1531,16,Troglitazone,[CH3]-[c]1[c]([CH3])[c]([CH3])[c]2[O][C]([CH3])([C][O][c]3[c][c][c]([C][C]4[S][C](=O)[N][C]4=O)[c][c]3)[C][C][c]2[c]1-[CH3],Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. -1532,1532,16,Dextrotiroxina,[c]1[c]([c]([c][c][c]1[O][c]1[c]([c][c]([c][c]1I)[C][C]([N]([#1])([#1]))C(O)=O)I)[O])I,Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. -1533,1533,16,Methyldopamine,[CH3][C]([#7H2])([C][c]1[c][c][c]([O])[c]([O])[c]1)[C]([O])=[O],Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. -1534,1534,16,Dopamine,[#7][CH2][CH2][cX3]1[c][c]c([O])c([O])[c]1,Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. -1535,1535,16,Dextrotiroxina-sodica,[#7H2][C]([C][c]1[c][c](I)[c]([O][c]2[c][c](I)[c]([O])[c](I)[c]2)[c](I)[c]1)[C](O)=[O],Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. -1536,1536,17,Acyl halides,"[CH,$([C](=[O!R,SX1!R])[#6])](=[O!R,SX1!R])[F,Cl,Br,I]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1537,1537,17,Acetates,"[CH,$([C!R](=[O,SX1])[#6!R])](=[O,SX1])[O!R,SX2!R,NX3!R][$([a;r6]),$([a;r5]),$(C=C),$(C#C)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1538,1538,17,Acyclic anhydrides,"[CH,$([C!R]([O,SX2])(=[O,SX1])[#6!R])](=[O,SX1])[O!R,SX2!R][CH,$([C!R]([O,SX2])(=[O,SX1])[#6!R])]=[O,SX1]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1539,1539,17,Dialkyl carbamoylhalides,"[NH2!R,$([NH!R](C=O)[#6!R]),$(N(C=O)([#6!R])[#6!R])]C(=O)[F,Cl,Br,I]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1540,1540,17,Sulphonyl halides,"[#6][Sv6X4!R](=O)(=O)[F,Cl,Br,I,$(C#N)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1541,1541,17,Phosphonic acid halides,"[#6]O[P!R](=O)(O[#6])[F,Cl,Br,I,$(C#N)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1542,1542,17,Cyclopropenones,"[#6]1([#1,#6])=,:[#6]([#1,#6])-,:[#6]1=O",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1543,1543,17,β-Lactones,C1C(=O)OC1,Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1544,1544,17,Thio-lactones,C1C(=O)SC1,Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1545,1545,17,β-Lactams,C1C(=O)NC1,Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1546,1546,17,Azlactones,"C1=[O,SX2,NX2,CX3]CC(=[O,SX2])[O,SX2,NX3]1",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1547,1547,17,Cyclic anhydrides,"[#6R,#8R,#16X2R][#6R](=[O,SX1])[#8R,#16X2R][#6R]([#6,#8R,#16X2])=[#8,#16X1]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1548,1548,17,Isocyanates,[NX2]=[CX2]=[OX1],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1549,1549,17,Isothiocyanates,[NX2]=[CX2]=[SX1],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1550,1550,17,Carbodiimides,[#6]N=C=N[#6],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1551,1551,17,Dithiocarbonimidic acid esters,[#6]N=C(S[#6])S[#6],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1552,1552,17,Ketenes,"[CH2,$([CH][#6]),$(C([#6])[#6])]=C=O",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1553,1553,17,Polarised alkene-aldehydes,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])][CH]=O",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1554,1554,17,Polarised alkene-ketones,"[$([$([CH2]),$([CH][#6])]=[CH,$(C[#6])]C(=O)[#6]);!$([#6X3]1=,:[#6X3H][CX3](=[OX1])[#6X3]=,:[#6X3][#6X3]1(=[OX1]));!$([CX3]1(=[OX1])[CX3](=[OX1])[#6X3]=,:[#6X3H][#6X3]=,:[#6X3]1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1555,1555,17,Polarised alkene-esters,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])]C(=O)O[#6]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1556,1556,17,Polarised alkene-amides,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])]C(=O)[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1557,1557,17,Polarised alkene-nitros,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1558,1558,17,Polarised alkene-cyanos,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])]C#N",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1559,1559,17,Polarised alkene-alkyl sulphonates,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])]S(=O)(=O)O[#6]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1560,1560,17,Polarised alkene-alkyl sulfones,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])]S(=O)(=O)[#6]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1561,1561,17,Polarised alkene-alkyl sulfinyls,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])][SX3](=O)[#6]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1562,1562,17,Polarised alkene-oximes,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])]C=[NX2][OH]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1563,1563,17,Polarised alkene-pyridines,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])][$(c1ncccc1),$(c1ccncc1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1564,1564,17,Polarised alkene-pyrazines,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])]c1nccnc1",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1565,1565,17,Polarised alkene-pyrimidines,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])][$(c1ncncc1),$(c1ncccn1),$(c1cncnc1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1566,1566,17,Polarised akene-triazines,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])][$(c1ncncn1),$(c1nncnc1),$(c1nnccn1),$(c1cnncn1),$(c1nnncc1),$(c1cnnnc1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1567,1567,17,Azocarbonamides,"[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]C(=O)N=NC(=O)[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1568,1568,17,Allyl alcohols,"[CH2,$([CH](=C)[#6])]=[CH,$(C(=C)([CH2][OH])[#6])][CH2][OH]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1569,1569,17,Sulphone-sulfates,[#6][Sv6X4](=[OX1])(=[OX1])[CX4][CX4][OX2][Sv6X4](=[OX1])(=[OX1])[OH1],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1570,1570,17,Polarised alkyne-aldehydes,"[CH,$(C(#C)[#6])]#C[CH]=O",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1571,1571,17,Polarise alkyne-ketones,"[CH,$(C(#C)[#6])]#CC(=O)[#6]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1572,1572,17,Polarised alkyne-esters,"[CH,$(C(#C)[#6])]#CC(=O)O[#6]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1573,1573,17,Polarised alkyne-amides,"[CH,$(C(#C)[#6])]#CC(=O)[$([NH2]),$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1574,1574,17,Polarised alkyne-nitros,"[CH,$(C(#C)[#6])]#C[$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1575,1575,17,Polarised alkyne-cyano,"[CH,$(C(#C)[#6])]#CC#N",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1576,1576,17,Polarised alkyne-alkyl sulphonates,"[CH,$(C(#C)[#6])]#CS(=O)(=O)O[#6]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1577,1577,17,Polarised alkyne-alkyl sulfones,"[CH,$(C(#C)[#6])]#CS(=O)(=O)[#6]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1578,1578,17,Polarised alkyne-alkyl sulfinyls,"[CH,$(C(#C)[#6])]#C[SX3](=O)[#6]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1579,1579,17,Polarised alkyne-pyridines,"[CH,$(C(#C)[#6])]#C[$(c1ncccc1),$(c1ccncc1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1580,1580,17,Polarised alkyne-pyrazines,"[CH,$(C(#C)[#6])]#Cc1nccnc1",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1581,1581,17,Polarised alkyne-pyrimidines,"[CH,$(C(#C)[#6])]#C[$(c1ncccn1),$(c1cncnc1),$(c1ncncc1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1582,1582,17,Polarised alkyne-triazines,"[CH,$(C(#C)[#6])]#C[$(c1ncncn1),$(c1nncnc1),$(c1nnccn1),$(c1cnncn1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1583,1583,17,Propargyl alcohols,"[CH,$(C(#C)[#6])]#C[CH2][OH]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1584,1584,17,Benzoquinones,"[$(C1(=O)[#6]=,:[#6]C(=O)[CH]=C1),$(C1(=O)C(=O)[#6]=,:[#6][CH]=C1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1585,1585,17,Quinone-imines,"[$(C1(=O)[#6]=,:[#6][$(C=[NH]),$(C=N[CX4])][CH]=C1),$(C1(=O)[$(C=[NH]),$(C=N[CX4])][#6]=,:[#6][CH]=C1),$(C1(=O)[$(C=[NH]),$(C=N[CX4])]C=[CH][#6]=,:[#6]1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1586,1586,17,Quinone-diimines,"[$([CH]1=C[$(C=[NH]),$(C=N[CX4])][#6]=,:[#6][$(C=[NH]),$(C=N[CX4])]1),$([CH]1=C[$(C=[NH]),$(C=N[CX4])][$(C=[NH]),$(C=N[CX4])][#6]=,:[#6]1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1587,1587,17,Hydroquinones,"[$(c1([OH,$(O[CH3])])c[cH]c([OH,$(O[CH3])])cc1),$(c1([OH,$(O[CH3])])c([OH,$(O[CH3])])cc[cH]c1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1588,1588,17,Aminophenols,"[$(c1([OH])c[cH]c([NH2])cc1),$(c1([OH])c([NH2])cc[cH]c1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1589,1589,17,Benzenediamines,"[$(c1([NH2])c[cH]c([NH2])cc1),$(c1([NH2])c([NH2])cc[cH]c1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1590,1590,17,Quinone-methides,"[$(C1=CC(=O)[#6]=,:[#6]C1(=[CH][CX4])),$(C1(=[CH][CX4])C(=O)[#6]=,:[#6]C=C1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1591,1591,17,Pyranones,"[$([cH]1cc(=[O,NH])cc[o,n]1),$([cH]1cc(=[O,NH])[o,n]cc1),$(c1cc(=[O,NH])[o,n][cH]c1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1592,1592,17,Poly aromatic hydrocarbons,"[c;R1,R2,R3]1[c;R1,R2,R3][c;R1,R2,R3][c;R2,R3]2[c;R2,R3]([c;R1,R2,R3]1)[c;R1,R2,R3][c;R1,R2,R3][c;R1,R2,R3][c;R1,R2,R3]2",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1593,1593,17,Acid imides,"O=C1[NH,$(N(C=O)(C=O)[#6])]C(=O)[CH,$(C(C=O)(=C)[#6])]=[CH]1",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1594,1594,17,Mono-aldehydes,"[CH2,$([CH](=O)[CX4]),$([CH](=O)c1a(*)caaa1),$([CH](=O)c1a(*)aaa1)]=O",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1595,1595,17,Aliphatic amines,[#6][CH2][NX3H2],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1596,1596,17,"Di-substituted α,β-unsaturated alkenes (polarized by an aldehyde moiety)","[$(C(=C)([#6])[#6]);!$(C(=C)([#6])C=[CH2,CH])]=C[CH]=O",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1597,1597,17,Di-substituted allyl alcohols,"C([#6])([#6])=[CH,$(C(=C)([CH2][OH])[#6])][CH2][OH]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1598,1598,17,"1,2-Dicarbonyls","[CH,$(C(=O)(C=O)[CX4]),$(C(=O)(C=O)c1a(*)aaaa1),$(C(=O)(C=O)c1a(*)aaa1)](=O)[CH,$(C(=O)(C=O)[#6]);!$(C(=O)(C=O)C=[CH2,CH]);!$(C(=O)(C=O)C#C)]=O",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1599,1599,17,"1,3-Dicarbonyls","[CH,$(C(=O)([CX4]C=O)[CX4]),$(C(=O)([CX4]C=O)c1a(*)aaaa1),$(C(=O)([CX4]C=O)c1a(*)aaa1)](=O)[CX4][CH,$(C(=O)([CX4]C=O)[#6]);!$(C(=O)([CX4]C=O)C=[CH2,CH]);!$(C(=O)([CX4]C=O)C#C)]=O",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1600,1600,17,Ethylenediamines,"[$([NH2,$([NH]([CH2])[CX4])][CH2][CH2][NH2]),$([NH]1[CH2][CH2][NH][CH2][CH2]1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1601,1601,17,Ethanolamines,"[$([NH2,$([NH]([CH2])[CX4])][CH2][CH2][OH]),$([NH]1[CH2][CH2]O[CH2][CH2]1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1602,1602,17,Piperizines,[NH]1CC[NH1]CC1,Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1603,1603,17,Morpholines,O1CC[NH1]CC1,Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1604,1604,17,Alkyl halides,"[CH3,$([CH2]([F,Cl,Br,I])[#6]),$([CH]([F,Br,Cl,I])([#6])[#6]);!$([CH2,CH]C=O);!$([CH2,CH][CX4][NX3,SX2]);!$([CH2,CH][CX4][F,Cl,Br,I])][F,Cl,Br,I]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1605,1605,17,Alkyl diazos,"[CH3,$([CH2](N=N)[#6]),$([CH](N=N)([#6])[#6])][NX2]=[NH,$(N(=N)[#6])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1606,1606,17,Alkyl sulfates,"[#6]OS(=O)(=O)O[CH3,$([CH2](O)[#6]),$([CH](O)([#6])[#6])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1607,1607,17,Alkyl sulphonates,"[#6]S(=O)(=O)O[CH3,$([CH2](O)[#6]),$([CH](O)([#6])[#6])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1608,1608,17,Alkyl (thio)phosphates,"[#6][O,SX2]P(=[O,SX1])([O,SX2][#6])[O,SX2][CH3,$([CH2](O)[#6]),$([CH](O)([#6])[#6])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1609,1609,17,Alkyl (thio)phosphonates,"[#6][O,SX2]P(=[O,SX1])([#6])[O,SX2][CH3,$([CH2](O)[#6]),$([CH](O)([#6])[#6])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1610,1610,17,Allyl acetates,"[#6]C(=[O,SX1])[O,SX2][CH2,$([CH]([O,SX2])[#6])][c,CX3,CX2]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1611,1611,17,α-Halocarbonyls,"[$([CH]=[O,SX1]),$(C([#6])=[O,SX1])][CH2,$([CH](C=[O,SX1])[#6])][F,Cl,Br,I]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1612,1612,17,β-Haloethers,"[CX4]O[CH2,$([CH](O)([CX4])[CX4]),$(C(O)([CX4])([CX4])[CX4])][CH2,$([CH]([F,Cl,Br,I])[#6])][F,Cl,Br,I]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1613,1613,17,α-Haloalkenes,"[CH2,$([CH](=C)[#6]),$(C(=C)([#6])[#6])]=[CH,$(C(=C)[#6])][$([CH2](C=C)[F,Cl,Br,I,$(C#N),$(OS(=O)(=O)O[#6]),$(OS(=O)(=O)[#6])]),$([CH](C=C)([#6])[F,Cl,Br,I,$(C#N),$(OS(=O)(=O)O[#6]),$(OS(=O)(=O)[#6])])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1614,1614,17,α-Haloalkynes,"[CH,$(C(#C)[#6])]#C[$([CH2](C#C)[F,Cl,Br,I,$(C#N),$(OS(=O)(=O)O[#6]),$(OS(=O)(=O)[#6])]),$([CH](C#C)([#6])[F,Cl,Br,I,$(C#N),$(OS(=O)(=O)O[#6]),$(OS(=O)(=O)[#6])])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1615,1615,17,α-Halobenzyls,"[c][$([CH2]([c])[F,Cl,Br,I,$(C#N),$(OS(=O)(=O)O[#6]),$(OS(=O)(=O)[#6])]),$([CH]([a])([#6])[F,Cl,Br,I,$(C#N),$(OS(=O)(=O)O[#6]),$(OS(=O)(=O)[#6])])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1616,1616,17,α-Haloethers,"[CX4]O[CH2,$([CH](O)([F,Cl,Br,I])[#6])][F,Cl,Br,I]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1617,1617,17,Epoxides,C1OC1,Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1618,1618,17,Aziridines,C1[NX3]C1,Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1619,1619,17,Sulfuranes,C1[SX2]C1,Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1620,1620,17,Lactones,C1CC(=O)O1,Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1621,1621,17,Vinyl benzenes,c1([CX3!R]=[CX3!R])ccccc1,Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1622,1622,17,Nitrosoureas,"[NX3]C(=O)[$([NH](C=O)[NX2]=O),$(N(C=O)([#6])[NX2]=O)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1623,1623,17,Nitrosoguanidines,"[NX3]C(=[NH])[$([NH](C=[NH])[NX2]=O),$(N(C=[NH])([#6])[NX2]=O)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1624,1624,17,N-Acytoxy-N-acetylphenyls,"[a][NX3](O[$([CH](O)=O),$(C(=O)(O)[#6])])[$([CH](N)=O),$(C(=O)(N)[#6])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1625,1625,17,N-Acytoxy-N-alkoxyamides,"[#6]O[NX3](O[$([CH](O)=O),$(C(=O)(O)[#6])])[$([CH](N)=O),$(C(=O)(N)[#6])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1626,1626,17,Thiols,"[#6&!$([CX3]=[OX1,SX1,NX2])][SH]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1627,1627,17,Disulfides,[#6][SX2][SX2][#6],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1628,1628,17,Thiosulphonates,[#6][SX2][SX4](=O)(=O)[#6],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1629,1629,17,Sulfoxides of disulfides,[#6][SX2][SX3](=O)[#6],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1630,1630,17,Sulfenyl halides,"[#6][SX2][F,Cl,Br,I]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1631,1631,17,Thiocyanates,[#6][SX2]C#N,Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1632,1632,17,Aromatic sulphonic acids,[a][SX4](=O)(=O)[OH],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1633,1633,17,Isothiazol-3-ones,"[cH,$(c(c)([sX2])[#6])]1[cH,$(c(c)(c=O)[#6])]c(=O)[nH,$(n(c=O)([sX2])[#6])][sX2]1",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1634,1634,17,Isothiazolin-3-ones,"[CH2,$([CH](C)([SX2])[#6])]1[CH2,$([CH](C)(C=O)[#6])]C(=O)[NH,$(N(C=O)([SX2])[#6])][SX2]1",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1635,1635,17,N-Chloro-sulphonamides,[#6][SX4](=O)(=O)[NH]Cl,Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1636,1636,17,N-Haloimides,"[CH,$(C(=O)(N)[#6])](=O)[NX3]([F,Cl,Br,I])[CH,$(C(=O)(N)[#6])]=O",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1637,1637,17,Polarized alkenes with a halogen leaving group,"C=[CH][F,Cl,Br,I]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1638,1638,17,Polarized alkenes with an alkyl sulphonate leaving group,C=[CH]OS(=O)(=O)[#6],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1639,1639,17,Polarized alkenes with an alkyl sulfate leaving group,C=[CH]OS(=O)(=O)O[#6],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1640,1640,17,Polarized alkenes with an alkyl (thio)phosphonate leaving group,"C=[CH]OP(=[O,SX])(O[#6])[#6]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1641,1641,17,Polarized alkenes with an alkyl (thio)phosphate leaving group,"C=[CH]OP(=[O,SX])(O[#6])O[#6]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1642,1642,17,Mustards,"[NX3,SX2][CH2,$([CH]([NX3,SX2])([CX4])[CX4])][CH2,$([CH]([CX4])([Cl,Br,I])[CX4])][Cl,Br,I]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1643,1643,17,"1,2-Dihaloalkanes","[Cl,Br,I][CH2,$([CH]([Cl,Br,I])([CX4])[CX4])][CH2,$([CH]([Cl,Br,I])([CX4])[CX4])][Cl,Br,I]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1644,1644,17,Activated benzenes (1),"[$(c1([F,Cl,Br,$(OC(F)(F)F),$(C#N)])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1),$(c1([F,Cl,Br,$(OC(F)(F)F),$(C#N)])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cccc1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]))]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1645,1645,17,Activated benzenes (2),"[$(c1(F)c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([$([CH]=O),$(C(=O)[CH3]),$(C(F)(F)F)])cc1),$(c1(Cl)c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([CH]=O)cc1),$(c1(F)c([$(C#N),$([CH]=O)])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1646,1646,17,Activated benzenes (3),"[$(c1([$(OC(F)(F)F),Br,$(C#N)])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([CH]=O)cc1),$(c1([F,Cl,Br,$(OC(F)(F)F),$(C#N)])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1647,1647,17,Activated tetrafluorobenzenes,"[$(c1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),$([CH]=O),$(C#N)])c(F)c(F)c(F)c(F)c1([!F])),$(c1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),$([CH]=O),$(C#N)])c(F)c(F)c(F)c([!F])c1F),$(c1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),$([CH]=O),$(C#N)])c(F)c(F)c([!F])c(F)c1F)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1648,1648,17,Activated pentafluorobenzenes,"c1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),$([CH]=O),$(C#N),$(C(=O)[CH3])])c(F)c(F)c(F)c(F)c1(F)",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1649,1649,17,Activated pyridines,"[$(c1([F,Cl,Br,$(C#N),$(OC(F)(F)F)])ncc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),$(C#N),$([CH]=O),$(C(=O)[CH3])])cc1),$(c1([F,Cl,Br,$(C#N),$(OC(F)(F)F)])ncccc1[$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),$(C#N),$([CH]=O),$(C(=O)[CH3])]),$(c1([F,Cl,Br,$(C#N),$(OC(F)(F)F)])ccncc1[$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),$(C#N),$([CH]=O),$(C(=O)[CH3])])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1650,1650,17,Formaldehyde releasers (1),"[$(O1COCC(Br)([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])C1),$([OX2H1]CC(Br)([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])C[OX2H1])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1651,1651,17,Formaldehyde releasers (2),[#7X3]1(C[OH1])C(=[OX1])[#7X3](C[OH1])C([CH3])([CH3])C1(=[OX1]),Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1652,1652,17,Formaldehyde releasers (3),"C1(=[OX1])[NX3H1]C(=[OX1])[NX3H1][CX4]1(C[OH1])[NX3H1][CX3](=[OX1])[NX3!H0][#1,#6]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1653,1653,17,Formaldehyde releasers (4),[OH1][CX4][NX3H1][CX4][CX3](=[OX1])[OX2H1],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1654,1654,17,Formaldehyde releasers (5),c1ccccc1[CX4][OX2][CX4][OH1],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins -1655,1655,18,Aromatic nitro (general),"[a!R0][$([NX3+](=[OX1])([O-])),$([NX3](=O)=O)]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1656,1656,18,Aromatic amine (general),[a!R0][NX3H2],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1657,1657,18,Three-membered heterocycles (general),"[NX3H1,SX2,OX2]1[CX4][CX4]1",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1658,1658,18,Nitroso (general),[NX2]=[OX1],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1659,1659,18,Unsubstituted heteroatom-bonded heteroatom (general),"[$([NX3H2]-[#7]),$([NX3H2]-[#8]),$([OX2H1]-[#7]),$([OX2H1]-[#8])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1660,1660,18,Azo-type (general),[NX2]=[NX2],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1661,1661,18,Aliphatic halide (general),"[CX4][Cl,Br,I]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1662,1662,18,Polycyclic aromatic system (general),"[$([aR3]),$([$([aR2]([aR])([aR])([aR]))].[$([aR2]([aR])([aR])([aR]))].[$([aR2]([aR])([aR])([aR]))].[$([aR2]([aR])([aR])([aR]))])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1663,1663,18,Aromatic nitro (specific),"[a!R0][$([NX3+](=[OX1])[O-]),$([NX3](=[OX1])=[OX1]);!$([NX3]aa-[$(C(F)(F)F),$(S(=O)(=O)[OH]),$(S(=O)(=O)[NX3]([#1,#6])[#1,#6]),$(S(=O)(=O)[a!r0]),$([CX4]([CH3])([CH3])[CH3])]);!$([NX3]aaa-[$(C(F)(F)F),$(S(=O)(=O)[OH]),$(S(=O)(=O)[NX3]([#1,#6])[#1,#6]),$(S(=O)(=O)[a!r0])]);!$([NX3]aaaa-[$(C(F)(F)F),$(S(=O)(=O)[OH]),$(S(=O)(=O)[NX3]([#1,#6])[#1,#6]),$(S(=O)(=O)[a!r0])])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1664,1664,18,Aromatic amine (specific),"[a!R0][$([NH2]);!$([NH2]aa[$(C(F)(F)F),$(S(=O)(=O)[NX3]([#6,#1])[#6,#1]),$(S(=O)(=O)[OH]),$(S(=O)(=O)[a!r0]),$(C(=[OX1])[OH1]),$(C(=[OX1])[OX2][#6])]);!$([NH2]aaa[$(C(F)(F)F),$(S(=O)(=O)[NX3]([#6,#1])[#6,#1]),$(S(=O)(=O)[OH]),$(S(=O)(=O)[a!r0]),$(C(=[OX1])[OH]),$(C(=[OX1])[OX2][#6])]);!$([NH2]aaaa[$(C(F)(F)F),$(S(=O)(=O)[NX3]([#6,#1])[#6,#1]),$(S(=O)(=O)[OH]),$(S(=O)(=O)[a!r0]),$(C(=[OX1])[OH]),$(C(=[OX1])[OX2][#6])])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1665,1665,18,Aromatic nitroso (specific),[a!R0][NX2]=[OX1],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1666,1666,18,Alkyl nitrite (specific),[OX1]=[NX2][OX2][CX4],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1667,1667,18,Nitrosamine (specific),"[OX1]=[NX2][NX3]([#6,#1])[#6,#1]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1668,1668,18,Epoxide (specific),[CX4]1[OX2][CX4]1,Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1669,1669,18,Aziridine (specific),[CX4]1[NX3H1][CX4]1,Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1670,1670,18,Azide (specific),"[$([NX2]=[NX2+]=[NX1-]),$(N=[NX2+]=N),$([NX2-]-[NX2+]#[NX1])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1671,1671,18,Diazo (specific),"[$([#6]=[NX2+]=N),$([#6]=[NX2]=[NX1]),$([#6]=[NX2+]=[NX1-]),$([#6]-[NX2+]#[NX1]),$([#6-]-[NX2+]#[NX1])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1672,1672,18,Triazene (specific),[NX3!R][NX2!R]=[NX2!R],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1673,1673,18,Aromatic azo (specific),[$([NX2]([a!r0])=[NX2][a!r0]);!$([NX2](aaS(=O)(=O)[OH])=[NX2]aaS(=O)(=O)[OH]);!$([NX2](aaS(=O)(=O)[OH])=[NX2]aaaS(=O)(=O)[OH]);!$([NX2](aaaS(=O)(=O)[OH])=[NX2]aaS(=O)(=O)[OH]);!$([NX2](aaS(=O)(=O)[OH])=[NX2]aaaaS(=O)(=O)[OH])!$([NX2](aaaaS(=O)(=O)[OH])=[NX2]aaS(=O)(=O)[OH]);!$([NX2](aaaS(=O)(=O)[OH])=[NX2]aaaS(=O)(=O)[OH]);!$([NX2](aaaS(=O)(=O)[OH])=[NX2]aaaaS(=O)(=O)[OH]);!$([NX2](aaaaS(=O)(=O)[OH])=[NX2]aaaS(=O)(=O)[OH]);!$([NX2](aaaaS(=O)(=O)[OH])=[NX2]aaaaS(=O)(=O)[OH])],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1674,1674,18,Unsubstituted heteroatom-bonded heteroatom (specific),"[$([NX3H2][#7]),$([NX3H2][#8]),$([OX2H1][#7]),$([OX2H1][#8]);!$([NH2][#7][$([OX2]-[OX2][#6]),$([NX3]([!#1])[NX3]([!#1]))]);!$([NH2][#8][$([OX2]-[OX2][#6]),$([NX3]([!#1])[NX3]([!#1]))]);!$([OH1][#7][$([OX2]-[OX2][#6]),$([NX3]([!#1])[NX3]([!#1]))]);!$([OH1][#8][$([OX2]-[OX2][#6]),$([NX3]([!#1])[NX3]([!#1]))]);!$([OH1][NX3H1][a!r0])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1675,1675,18,Aromatic hydroxylamine (specific),[a!r0][NX3H1][OH1],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1676,1676,18,Aliphatic halide (specific),"[Cl,Br,I][$([CX4]);!$([CX3](=[OX1,SX1,NX2]));!$([CH2][CH2][SX2,NX3])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1677,1677,18,Carboxylic acid halide (specific),"[Cl,Br,I][CX3](=[OX1])[#1,*&!$([OH1])&!$([SH1])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1678,1678,18,Nitrogen and sulphur mustard (specific),"[Cl,Br,I][CH2][CH2][SX2,NX3]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1679,1679,18,Polycyclic aromatic system (specific),"[$([$([aR3]),$([$([aR2]([aR])([aR])([aR]))].[$([aR2]([aR])([aR])([aR]))].[$([aR2]([aR])([aR])([aR]))].[$([aR2]([aR])([aR])([aR]))])]);!$([cR1H1]1[cR1H1][cR1][cR1][cR2]2[cR2]1[cR2]3[cR2]([cR1][cR1]2)[cR1][cR1][cR1H1][cR1H1]3);!$([cR1]1[cR1][cR1][cR1H1][cR2]2[cR2]1[cR2]3c([cR1H1][cR1H1]2)[cR1H1][cR1][cR1][cR1]3)] ",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1680,1680,18,Bay-region in polycyclic aromatic hydrocarbons (specific),[cR1H1]1[cR1H1][cR1][cR1][cR2]2[cR2]1[cR2]3[cR2]([cR1][cR1]2)[cR1][cR1][cR1H1][cR1H1]3,Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1681,1681,18,K-region in polycyclic aromatic hydrocarbons (specific),[cR1]1[cR1][cR1][cR1H1][cR2]2[cR2]1[cR2]3c([cR1H1][cR1H1]2)[cR1H1][cR1][cR1][cR1]3,Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1682,1682,18,Sulfonate-bonded carbon atom (additional),[CX4][Sv6X4](=[OX1])(=[OX1])[OX2],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1683,1683,18,"α, β-Unsaturated aldehyde (additional)",[CX3]=[CX3][CX3;H1]=[OX1],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1684,1684,18,Aliphatic N-nitro (additional),"[NX3][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1][O-]))]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1685,1685,18,Diazonium (additional),"[$([a!r0][NX2+]#[NX1]),$([a!r0][NX2]#[NX1])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1686,1686,18,β-Propiolactone (additional),[OX2]1[CX4][CX4][CX3]1(=[OX1]),Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1687,1687,18,"α,β-Unsaturated alkoxy (additional)",[CX4][OX2][CX3H1]=[CX3H1],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1688,1688,18,1-Aryl-2-monoalkyl hydrazine (additional),[a!r0][NX3H1]-[NX3H1][CX4],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1689,1689,18,Aromatic methylamine (additional),[a!r0][NX3;H1][CH3],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1690,1690,18,Aromatic hydroxylamine ester (additional),[a!r0][NH][OX2][CX3](=[OX1]),Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1691,1691,18,Polycyclic planar system (additional),[*R1]1[*R2]2=[*R1][*R1]=[*R1][*R1]=[*R2]2[*R1][*R2]3=[*R1][*R1]=[*R1][*R1]=[*R2]13,Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1692,1692,18,Acyl halides,"[Br,Cl,F,I][CX3](=[OX1])[#1,*&!$([OH1])&!$([SH1])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1693,1693,18,Alkyl or benzyl ester of sulphonic or phosphonic acid,"[$([Sv6X4;!$([Sv6X4][OH]);!$([Sv6X4][SH]);!$([Sv6X4][O-]);!$([Sv6X4][S-])](=[OX1])(=[OX1])[$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2][CH0](C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2][CH2]c1ccccc1)]),$([Pv5X4;!$([Pv5X4][OH]);!$([Pv5X4][SH]);!$([Pv5X4][O-]);!$([Pv5X4][S-])](=[OX1])([$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2][CH0](C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2][CH2]c1ccccc1)])[$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2][CH0](C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2][CH2]c1ccccc1)])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1694,1694,18,N-Methylol derivatives,[OX2;H1][CH2][NX3],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1695,1695,18,Monohaloalkene,"[CX3]([CX4,#1])([F,Cl,Br,I])=[CX3]([CX4,#1])[!F!Cl!Br!I]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1696,1696,18,S or N mustard,"[F,Cl,Br,I][CH2][CH2][NX3,SX2][CH2][CH2][F,Cl,Br,I]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1697,1697,18,Propiolactones or propiosultones,"[$([OX2]1[CX4][CX4][CX3]1(=[OX1])),$([CX4]1[CX4][CX4][Sv6;X4](=[OX1])(=[OX1])[OX2]1)]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1698,1698,18,Epoxides and aziridines,"[CX4]1[OX2,NX3][CX4]1",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1699,1699,18,Aliphatic halogens,"[CX4;!H0][Br,Cl,I]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1700,1700,18,Alkyl nitrite,[OX1]=[NX2][OX2][CX4],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1701,1701,18,"α, β-Unsaturated carbonyl","[CX3]([!$([OH]);!$([O-])])(=[OX1])[CX3H1]=[CX3]([$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([#1,#7,#8,F,Cl,Br,I,#15,#16,#5]),$([CH]=[CH][#6]);!$([a!r0])])[$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([#1,#7,#8,F,Cl,Br,I,#15,#16,#5]),$([CH]=[CH][#6]);!$([a!R0])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1702,1702,18,Simple aldehyde,"[CX3]([H])(=[OX1])[#1,#6&!$([CX3]=[CX3])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1703,1703,18,Quinones,"[$([#6X3]1=,:[#6X3]-,:[#6X3](=[OX1])-,:[#6X3]=,:[#6X3]-,:[#6X3]1(=[OX1])),$([#6X3]1(=[OX1])-,:[#6X3](=[OX1])-,:[#6X3]=,:[#6X3]-,:[#6X3]=,:[#6X3]1)]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1704,1704,18,Hydrazine,[NX3;!$([NX3](=[OX1])=[OX1]);!$([NX3+](=[OX1])[O-])][NX3;!$([NX3](=[OX1])=[OX1]);!$([NX3+](=[OX1])[O-])],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1705,1705,18,Aliphatic azo and azoxy,"[$([C,#1][NX2]=[NX2][C,#1]),$([CX3]=[NX2+]=N),$([CX3]=[NX2+]=[NX1-]),$([CX3-][NX2+]#[NX1]),$([CX3][NX2]#[NX1]),$(C[NX2]=N(=O)[*]),$(C[NX2]=[N+]([O-])[*])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1706,1706,18,Isocyanate and isothiocyanate groups,"[NX2]=[CX2]=[OX1,Sv2X1]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1707,1707,18,Alkyl carbamate and thiocarbamate,"[NX3]([C,#1])([C,#1])[CX3](=[OX1,Sv2X1])[OX2,Sv2X2]C",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1708,1708,18,Polycyclic aromatic hydrocarbons,"[$([cX3R3]),$([cX3;R1,R2,R3]1[cX3;R1,R2,R3][cX3;R1,R2,R3][cX3;R1,R2,R3][cX3;R2,R3]2[cX3;R2,R3]1[cX3;R1,R2,R3][cX3;R2,R3]3[cX3;R2,R3]([cX3;R1,R2,R3]2)[cX3;R1,R2,R3][cX3;R1,R2,R3][cX3;R1,R2,R3][cX3;R1,R2,R3]3)].[!$([n,o,s])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1709,1709,18,Heterocyclic polycyclic aromatic hydrocarbons,"[$([aR3].[n,o,s]),$([$([aR2]([aR])([aR])([aR]))].[$([aR2]([aR])([aR])([aR]))].[$([aR2]([aR])([aR])([aR]))].[$([aR2]([aR])([aR])([aR]))].[n,o,s])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1710,1710,18,Alkyl and aryl N-nitroso groups,[#6][NX3][NX2]=[OX1],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1711,1711,18,Azide and triazene groups,"[$([NX2!R]=[NX2!R][NX3!R]),$([NX2]=[NX2+]=[NX1-]),$([NX2]=[NX2+]=N)]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1712,1712,18,Aliphatic N-nitro group,"[NX3]([#1,C])([#1,C])[$([NX3+](=[OX1])[O-]),$([NX3](=O)=O)]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1713,1713,18,"α, β-Unsaturated aliphatic alkoxy group",C[CX3;H1]=[CX3;H1][OX2][#6],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1714,1714,18,Aromatic nitroso group,[a!r0][NX2]=[OX1],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1715,1715,18,Aromatic ring N-oxide,[O-][N+]1=CC=CC=C1,Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1716,1716,18,Nitro-aromatic,"[a!R0][$([NX3+](=[OX1])[O-]),$([NX3](=[OX1])=[OX1]);!$([NX3]a(a-[!#1])a-[!#1]);!$([NX3]aa-C(=[OX1])[OH]);!$([NX3]aa-[Sv6X4](=[OX1])(=[OX1])[OH]);!$([NX3]aaa-[Sv6X4](=[OX1])(=[OX1])[OH]);!$([NX3]aaaa-[Sv6X4](=[OX1])(=[OX1])[OH])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1717,1717,18,"Primary aromatic amine, hydroxyl amine and its derived esters or amine generating group","[a!R0][$([NH2]),$([NX3][OX2H1]),$([NX3][OX2][CX3H1](=[OX1])),$([NX2]=[CH2]),$([NX2]=C=[OX1]);!$([NX3,NX2]a(a-[!#1])a-[!#1]);!$([NX3,NX2]aa-C(=[OX1])[OH]);!$([NX3,NX2]aa-[Sv6X4](=[OX1])(=[OX1])[OH]);!$([NX3,NX2]aaa-[Sv6X4](=[OX1])(=[OX1])[OH]);!$([NX3,NX2]aaaa-[Sv6X4](=[OX1])(=[OX1])[OH])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1718,1718,18,Aromatic mono- and dialkylamine,"[a!R0][$([NX3;H1][CH3]),$([NX3;H1][CH2][CH3]),$([NX3]([CH3])[CH3]),$([NX3]([CH3])[CH2][CH3]),$([NX3]([CH2][CH3])[CH2][CH3]);!$([NX3]a(a-[!#1])a-[!#1]);!$([NX3]aa-C(=[OX1])[OH]);!$([NX3]aa-[Sv6X4](=[OX1])(=[OX1])[OH]);!$([NX3]aaa-[Sv6X4](=[OX1])(=[OX1])[OH]);!$([NX3]aaaa-[Sv6X4](=[OX1])(=[OX1])[OH])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1719,1719,18,Aromatic N-acyl amine,"[a!R0][$([NX3;H1]),$([NX3][CH3]);!$([NX3]a(a-[!#1])a-[!#1]);!$([NX3]aa-C(=[OX1])[OH]);!$([NX3]aa-[Sv6X4](=[OX1])(=[OX1])[OH]);!$([NX3]aaa-[Sv6X4](=[OX1])(=[OX1])[OH]);!$([NX3]aaaa-[Sv6X4](=[OX1])(=[OX1])[OH])][CX3](=[OX1])([$([#1]),$([CH3])])",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1720,1720,18,Aromatic diazo, [$([NX2]([a!r0])=[NX2][a!R0]);!$([NX2](aaS(=O)(=O)[OH])=[NX2]aaS(=O)(=O)[OH]);!$([NX2](aaS(=O)(=O)[OH])=[NX2]aaaS(=O)(=O)[OH]);!$([NX2](aaaS(=O)(=O)[OH])=[NX2]aaS(=O)(=O)[OH]);!$([NX2](aaS(=O)(=O)[OH])=[NX2]aaaaS(=O)(=O)[OH])!$([NX2](aaaaS(=O)(=O)[OH])=[NX2]aaS(=O)(=O)[OH]);!$([NX2](aaaS(=O)(=O)[OH])=[NX2]aaaS(=O)(=O)[OH]);!$([NX2](aaaS(=O)(=O)[OH])=[NX2]aaaaS(=O)(=O)[OH]);!$([NX2](aaaaS(=O)(=O)[OH])=[NX2]aaaS(=O)(=O)[OH]);!$([NX2](aaaaS(=O)(=O)[OH])=[NX2]aaaaS(=O)(=O)[OH])],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1721,1721,18,Coumarins and furocoumarins,"[$(c1cccc2c1oc(=O)cc2),$(C1=CC(=O)OC2=CC=CC=C12),$(C1=CC(=O)Oc2ccccc12)]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1722,1722,18,Primary and secondary aromatic amines,"[$([a!R0][NX3;H2]),$([a!r0][NX3;H1][CH3]),$([a!R0][NX3;H1][CH2][CH3])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1723,1723,18,Tertiary aromatic amines,"a[NX3]([$([CH3]),$([CH2][CH3])])[$([CH3]),$([CH2][CH3])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1724,1724,18,Secondary aromatic acetamides and formamides,"[$([a!R0][NX3;H1][CX3;H1](=[OX1])),$([a!r0][NX3;H1][CX3](=[OX1])[CH3])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1725,1725,18,Nitroarenes,"[a!R0][$([NX3+](=[OX1])[O-]),$([NX3](=O)(=O))]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1726,1726,18,Nitrosoarenes,[a!R0][NX2]=[OX1],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1727,1727,18,Arylhydroxylamines,"[a!R0][NX3;H1][OX2][#1,#6]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1728,1728,18,N-Nitroso-N-dialkylamines,[NX3]([CX4])([CX4])[NX2]=[OX1],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1729,1729,18,N-Nitroso-N-alkylamides,"[CX4,a!r0][CX3](=[OX1])[NX3]([CX4])[NX2]=[OX1]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1730,1730,18,N-Nitroso-N-alkylureas,"[OX1]=[NX2][NX3]([CX4])[CX3](=[OX1])[NX3H1][CX4,a!R0]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1731,1731,18,N-Nitroso-N-alkylcarbamates (aka urethanes),"[OX1]=[NX2][NX3]([CX4])[CX3](=[OX1])[OX2][CX4,a!R0]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1732,1732,18,N-Nitroso-N-alkylnitriles,[OX1]=[NX2][NX3]([CX4])[CX2]#[NX1],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1733,1733,18,N-Nitroso-N-hydroxylamines,[OX1]=[NX2][NX3]([OH1])[#6],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1734,1734,18,Hydrazines,"[NX3]([$([#1]),$([CX4]),$([a!r0])])([$([CX4!H0]),$([CX4][OH]),$([CX3]=[OX1])])[NX3]([$([#1]),$([CX4]),$([a!r0])])[$([#1]),$([CX4]),$([a!r0])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1735,1735,18,Azoxy alkane,"[$([$([CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([CX4]([*!C])([*!C])([*!C]))[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([CX4]([*!C])([*!C])([*!C]))),$([CX4]([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))[*!C])][NX3+](=O)=[NX2][$([CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([CX4]([*!C])([*!C])([*!C]))[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([CX4]([*!C])([*!C])([*!C]))),$([CX4]([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))[*!C])]),$([$([CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([CX4]([*!C])([*!C])([*!C]))[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([CX4]([*!C])([*!C])([*!C]))),$([CX4]([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))[*!C])][NX3](=O)=[NX2][$([CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([CX4]([*!C])([*!C])([*!C]))[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([CX4]([*!C])([*!C])([*!C]))),$([CX4]([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))[*!C])]),$([$([CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([CX4]([*!C])([*!C])([*!C]))[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([CX4]([*!C])([*!C])([*!C]))),$([CX4]([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))[*!C])][NX3+]([O-])=[NX2][$([CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([CX4]([*!C])([*!C])([*!C]))[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([CX4]([*!C])([*!C])([*!C]))),$([CX4]([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))[*!C])])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1736,1736,18,Aliphatic halides,"[$([CX4]([$([OH]),$(C=O),$([NX3])])([!F!Cl!Br!I!C])([*!$(C)])[CH2][F,Cl,Br,I]),$([CX4]([!F!Cl!Br!I!C])([!F!Cl!Br!I!C])([*!$(C)])[CX4]([$([OH]),$(C=O),$([NX3])])([*!$(C)])[CH2][F,Cl,Br,I]),$([CX4]([!F!Cl!Br!I!C])([!F!Cl!Br!I!C])([*!$(C)])[CX4]([!F!Cl!Br!I!C])([*!$(C)])[CX4]([$([OH]),$(C=O),$([NX3])])([*!$(C)])[CH2][F,Cl,Br,I]),$([CX4]([CX4]([!F!Cl!Br!I!C])([!F!Cl!Br!I!C])[*!$(C)])([CX4]([!F!Cl!Br!I!C])([!F!Cl!Br!I!C])[*!$(C)])([$([OH]),$(C=O),$([NX3])])[CH2][F,Cl,Br,I]),$([CX4]([!F!Cl!Br!I!C])([!F!Cl!Br!I!C])([*!$(C)])[CX4]([!F!Cl!Br!I!C])([*!$(C)])[CX4]([!F!Cl!Br!I!C])([*!$(C)])[CX4]([*!$(C)])([$([OH]),$(C=O),$([NX3])])[CH2][F,Cl,Br,I]),$([CX4]([!F!Cl!Br!I!C])([!F!Cl!Br!I!C])([*!$(C)])[CX4]([*!$(C)])([CX4]([!F!Cl!Br!I!C])([!F!Cl!Br!I!C])([*!$(C)]))[CX4]([*!$(C)])([$([OH]),$(C=O),$([NX3])])[CH2][F,Cl,Br,I]),$([CX4]([CX4]([!F!Cl!Br!I!C])([!F!Cl!Br!I!C])[*!$(C)])([CX4]([!F!Cl!Br!I!C])([!F!Cl!Br!I!C])[*!$(C)])([CX4]([!F!Cl!Br!I!C])([!F!Cl!Br!I!C])[*!$(C)])[CH2][F,Cl,Br,I]),$([CX4]([!F!Cl!Br!I!C])([!F!Cl!Br!I!C])([*!$(C)])[CX4]([!F!Cl!Br!I!C])([*!$(C)])[CX4]([CX4]([!F!Cl!Br!I!C])([!F!Cl!Br!I!C])([*!$(C)]))([$([OH]),$(C=O),$([NX3])])[CH2][F,Cl,Br,I])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1737,1737,18,Benzylic halides,"[a!r0][CH2][Cl,Br,I]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1738,1738,18,Oxiranes and aziridines,"[CX4]1[OX2,NX3][CX4]1",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1739,1739,18,Propiolactones,[OX2]1[CX4][CX4][CX3]1(=[OX1]),Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1740,1740,18,Alkyl esters of sulfonic and sulphuric acids,"[$([CX4,a!r0][Sv6X4](=[OX1])(=[OX1])[OX2][$([CH3]),$([CH2][CH3])]),$([CX4,a!r0][OX2][Sv6X4](=[OX1])(=[OX1])[OX2][$([CH3]),$([CH2][CH3])])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1741,1741,18,Alkyl esters of phosphonic and phosphoric acids,"[$([CX4,a!r0][Pv5X4](=[OX1])([OX2][$([CH3]),$([CH2][CH3])])[OX2][$([CH3]),$([CH2][CH3])]),$([CX4,#1][OX2][Pv5X4](=[OX1])([OX2][CX4,#1])[OX2][$([CH3]),$([CH2][CH3])])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1742,1742,18,Mixed alkyl esters of thiophosphoric acid,"[CX4][OX2][Pv5X4](=[SX1])([OX2][CX4,#1])[OX2][$([CH3]),$([CH2][CH3])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1743,1743,18,Haloethylamines,"[NX3]([#1,#6])([#1,#6])[CH2][CH2][Cl,Br,I,F]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1744,1744,18,Haloalkylethers,"[$([#6][OX2][CH2][CH2][Cl,Br,I]),$([#6][OX2][CH2][Cl,Br,I])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1745,1745,18,α-Halocarbonyl or a-halohydroxy,"[$([CX3](=[OX1])[CH2][Cl,Br,I]),$([CX4!H0]([OH1])[CH2][Cl,Br,I])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1746,1746,18,Haloamines,"[#6][NX3]([#6])[Cl,Br,I,F]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1747,1747,18,"α, β-Unsaturated carbonyls","[CX3]=[CX3][CX3](=[OX1])[$([#1][CX3]=[OX1]),$([#6]([CX3]=[OX1])),$([OX2]([CX3]=[OX1])[#6]),$([NX3]([CX3]=[OX1])([#1,#6])[#1,#6])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1748,1748,18,Allylic halides and alkoxides,"[CX3]=[CX3][CH2][$([Cl,Br,I]),$([OX2])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1749,1749,18,Halogenated methanes,"[CX4]([H,F,Cl,Br,I])([H,F,Cl,Br,I])([H,F,Cl,Br,I])[F,Cl,Br,I]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1750,1750,18,Vinyl halides,"[CX3]=[CX3H1][Cl,Br,I]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1751,1751,18,Polycyclic aromatic hydrocarbons,"[c;R1,R2,R3]1[c;R1,R2,R3][c;R1,R2,R3][c;R2,R3]2[c;R2,R3]([c;R1,R2,R3]1)[c;R1,R2,R3][c;R1,R2,R3][c;R1,R2,R3][c;R1,R2,R3]2",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1752,1752,18,Isocyanate,[NX2]=[CX2]=[OX1],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1753,1753,18,Isothiocyanate,[NX2]=[CX2]=[SX1],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1754,1754,18,Azoarenes,[$([NX2]([a!r0])=[NX2][a!r0]);!$([NX2](aaS(=O)(=O)[OH])=[NX2]aaS(=O)(=O)[OH]);!$([NX2](aaS(=O)(=O)[OH])=[NX2]aaaS(=O)(=O)[OH]);!$([NX2](aaaS(=O)(=O)[OH])=[NX2]aaS(=O)(=O)[OH]);!$([NX2](aaS(=O)(=O)[OH])=[NX2]aaaaS(=O)(=O)[OH])!$([NX2](aaaaS(=O)(=O)[OH])=[NX2]aaS(=O)(=O)[OH]);!$([NX2](aaaS(=O)(=O)[OH])=[NX2]aaaS(=O)(=O)[OH]);!$([NX2](aaaS(=O)(=O)[OH])=[NX2]aaaaS(=O)(=O)[OH]);!$([NX2](aaaaS(=O)(=O)[OH])=[NX2]aaaS(=O)(=O)[OH]);!$([NX2](aaaaS(=O)(=O)[OH])=[NX2]aaaaS(=O)(=O)[OH])],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1755,1755,18,Alkyl esters of phosphonic or sulphonic acids,"[$([CX4,a][Sv6X4](=[OX1])(=[OX1])[OX2][CX4]),$([CX4,a][Pv5X4](=[OX1])([OX2][#1,CX4])[OX2][CX4])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1756,1756,18,Aromatic nitro groups,"[a!r0][$([NX3+](=[OX1])[O-]),$([NX3](=[OX1])=[OX1]);!$([NX3]a(a-[!#1])a-[!#1]);!$([NX3]aa-C(=[OX1])[OH])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1757,1757,18,Aromatic azo groups,[$([NX2]([a!r0])=[NX2][a!r0]);!$([NX2](aaS(=O)(=O)[OH])=[NX2]aaS(=O)(=O)[OH]);!$([NX2](aaS(=O)(=O)[OH])=[NX2]aaaS(=O)(=O)[OH]);!$([NX2](aaaS(=O)(=O)[OH])=[NX2]aaS(=O)(=O)[OH]);!$([NX2](aaS(=O)(=O)[OH])=[NX2]aaaaS(=O)(=O)[OH])!$([NX2](aaaaS(=O)(=O)[OH])=[NX2]aaS(=O)(=O)[OH]);!$([NX2](aaaS(=O)(=O)[OH])=[NX2]aaaS(=O)(=O)[OH]);!$([NX2](aaaS(=O)(=O)[OH])=[NX2]aaaaS(=O)(=O)[OH]);!$([NX2](aaaaS(=O)(=O)[OH])=[NX2]aaaS(=O)(=O)[OH]);!$([NX2](aaaaS(=O)(=O)[OH])=[NX2]aaaaS(=O)(=O)[OH])],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1758,1758,18,Aromatic rings N-oxides,[O-][N+]1=CC=CC=C1,Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1759,1759,18,Aromatic mono- and dialkylamino groups,"[a!r0][$([NX3H1][CH3]),$([NX3H1][CH2][CH3]),$([NX3]([CH3])[CH3]),$([NX3]([CH3])[CH2][CH3]),$([NX3]([CH2][CH3])[CH2][CH3]);!$([NX3]a(a-[!#1])a-[!#1]);!$([NX3]aa-C(=[OX1])[OH])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1760,1760,18,Alkyl hydrazines,"[NX3]([CX4])([#1,CX4])[NX3]([#1,CX4])[#1,CX4]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1761,1761,18,Alkyl aldehydes,"[$([CX3]([H])(=[OX1])[#1,CX4])&!$([CX3]([H])(=[OX1])[CX3]=[CX3])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1762,1762,18,N-Methylol derivatives,[OH1][CH2][NX3],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1763,1763,18,Monohaloalkenes,"[CX3]([CX4,#1])(Cl)=[CX3]([!F!Cl!Br!I])[CX4,#1]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1764,1764,18,"β-Haloethyl N, S - mustards","[F,Cl,Br,I][CH2][CH2][NX3,SX2][CH2][CH2][F,Cl,Br,I]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1765,1765,18,N-Chloroamines,[#6][NX3]([#6])Cl,Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1766,1766,18,Propiolactones and propiosultones,"[$([OX2]1[CX4][CX4][CX3]1(=[OX1])),$([CX4]1[CX4][CX4][Sv6;X4](=[OX1])(=[OX1])[OX2]1)]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1767,1767,18,Aromatic and aliphatic aziridinyl derivatives,[CX4]1[NX3][CX4]1,Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1768,1768,18,Aromatic and aliphatic substituted primary alkyl halides,"[F,Cl,Br,I][CH2][CX4,a]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1769,1769,18,Derivatives of urethane (carbamates),[NX3][CX3](=[OX1])[OX2],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1770,1770,18,Aromatic amines,"[a!r0][$([NH2]),$([NX3H1][#6]),$([NX3]([#6])[#6]),$([NX3]([#6,#1])[OX2H1]),$([NX3]([#6,#1])[OX2][CX3]=[OX1]);!$([NX3]a(a-[!#1])a-[!#1]);!$([NX3]aa-C(=[OX1])[OH])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1771,1771,18,Aliphatic and aromatic epoxides,"[$([CX4]1[OX2][CX4]1),$([#6]1=[#6][#8]1)]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1772,1772,19,phosphorodithionate,[$([SX2H0]P(=S)([OH0])[OH0])]P(=S)([OH0])[OH0],LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration -1773,1773,19,"O,O-diethylphosphorodithionate",CCOP(=S)(OCC)SC([*:1]),LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration -1774,1774,19,phosphoryl,[PX4H0](=O)([OH0])([OH0])[OH0],LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration -1775,1775,19,"O,O-dimethylphosphoryl",COP(=O)(O([*:1]))OC,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration -1776,1776,19,phosphorothionate,[$([OH0]P(=S)([OH0])[OH0])]P(=S)([OH0])[OH0],LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration -1777,1777,19,diethylphosphorothionate,CCOP(=S)(O([*:1]))OCC,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration -1778,1778,19,O-phenyl phenylphosphonothioate,S=P(O([*:1]))(Oc1ccc([*:1])cc1)c1ccccc1,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration -1779,1779,19,O-phenyl phosphonothioate,S=P(O([*:1]))(O([*:1]))Oc1ccc([*:1])cc1,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration -1780,1780,19,carbamate,[$(N([!H])C(=O)[OH0])]C(=O)[OH0],LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration -1781,1781,19,"2,2-dimethyl-2,3-dihydro-1-benzofuran-7-yl N-(aminosulfanyl)-N-methylcarbamate",CN(SN([*:1])([*:1]))C(=O)Oc1cccc2CC(C)(C)Oc12,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration -1782,1782,19,methyl(propoxysulfanyl) carbamate,CN(SOCCC([*:1]))C(=O)O([*:1]),LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration -1783,1783,19,phenyl carbamate,O=C(N([*:1]))Oc1ccccc([*:1])1,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration -1784,1784,19,O-(methylaminocarbonyl)oxime,[CX4]NC(=O)ON=C,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration -1785,1785,19,dimethylcarbamate,CN(C)C(=O)O([*:1]),LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration -1786,1786,19,barbiturates,*C1(*)[#6](=O)-[#7]-[#6](=O)-[#7]-[#6]1=O,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration -1787,1787,19,4-Hydroxycoumarin,[OH1]C1=CC(=O)Oc2[cH][cH][cH][cH]c12,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration -1788,1788,19,Phenothiazine,*-[#7]-1-c2ccccc2-[#16]-c2ccccc-12,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration -1789,1789,19,1-carboximidoylpiperazine,[NR1X3]1[CX4R1][CX4R1][NX3R1]([CX3]=[NX2])[CX4R1][CX4R1]1,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration -1790,1790,19,phenylpiperazine,[NR1X3]1[CX4R1][CX4R1][NX3R1](c2ccccc2)[CX4R1][CX4R1]1,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration -1791,1791,19,"2,4-dichloro-benzene-1,3-dicarbonitrile",N#Cc1c([*:1])c([*:1])c(Cl)c(C#N)c1Cl,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration -1792,1792,20,Thiocarbonyl,"[$([NX3][CX3](=[Sv2X1])[NX3]),$([CX3;!$(C[OH]);!$(C[SH]);!$(C[O-]);!$(C[S-]);!$(CO[#6])](=[Sv2X1])[NX3])]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1793,1793,20,Halogenated benzene,"c1ccccc1[$([Br,Cl,F,I]);!$([Br,Cl,F,I]aa[Br,Cl,F,I]);!$([Br,Cl,F,I]aaa[Br,Cl,F,I]);!$([Br,Cl,F,I]aa([OH])a([OH])a[OH]);!$([Br,Cl,F,I]aaa([OH])a([OH])a[OH]);!$([Br,Cl,F,I]aa([OH])a([OH])aa[OH])]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1794,1794,20,Halogenated PAH,"[Br,Cl,F,I][$([cR1]1[cR1][cR1][cR1][cR1][cR1]1-[cR1]2[cR1][cR1][cR1][cR1][cR1]2),$([cR1]1[cR1][cR1][cR1][cR2]2[cR2]1[cR1][cR1][cR1][cR1]2)]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1795,1795,20,Halogenated dibenzodioxins,"[OR1]1[CR2]2=[CR1][CR1]=[CR1][CR1]=[CR2]2[OR1][CR2]3=[CR1][CR1]([F,Cl,Br,I])=[CR1][CR1]=[CR2]13",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1796,1796,20,Acyl halides,"[Br,Cl,F,I][CX3](=[OX1])[#1,*&!$([OH1])&!$([SH1])]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1797,1797,20,Alkyl (C<5) or benzylester of sulphonic or phosphonic acid,"[$([Sv6X4;!$([Sv6X4][OH]);!$([Sv6X4][SH]);!$([Sv6X4][O-]);!$([Sv6X4][S-])](=[OX1])(=[OX1])[$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2][CH0](C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2][CH2]c1ccccc1)]),$([Pv5X4;!$([Pv5X4][OH]);!$([Pv5X4][SH]);!$([Pv5X4][O-]);!$([Pv5X4][S-])](=[OX1])([$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2][CH0](C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2][CH2]c1ccccc1)])[$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2][CH0](C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2][CH2]c1ccccc1)])]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1798,1798,20,N-methylol derivatives,[OX2;H1][CH2][NX3],Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1799,1799,20,Monohaloalkene,"[CX3]([CX4,#1])([F,Cl,Br,I])=[CX3]([CX4,#1])[!F!Cl!Br!I]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1800,1800,20,S or N mustard,"[F,Cl,Br,I][CH2][CH2][NX3,SX2][CH2][CH2][F,Cl,Br,I]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1801,1801,20,β-lactones and γ- sultones,"[$([OX2]1[CX4][CX4][CX3]1(=[OX1])),$([CX4]1[CX4][CX4][Sv6;X4](=[OX1])(=[OX1])[OX2]1)]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1802,1802,20,Epoxides and aziridines,"[CX4]1[OX2,NX3][CX4]1",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1803,1803,20,Aliphatic halogens,"[CX4;!H0][Br,Cl,I]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1804,1804,20,Alkyl nitrite,[OX1]=[NX2][OX2][CX4],Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1805,1805,20,"α,β unsaturated carbonyls",[CX3](=[OX1])[CX3H1]=[CX3],Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1806,1806,20,Simple aldehyde,"[CX3]([H])(=[OX1])[#1,#6&!$([CX3]=[CX3])]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1807,1807,20,Quinones,"[$([#6X3]1=,:[#6X3]-,:[#6X3](=[OX1])-,:[#6X3]=,:[#6X3]-,:[#6X3]1(=[OX1])),$([#6X3]1(=[OX1])-,:[#6X3](=[OX1])-,:[#6X3]=,:[#6X3]-,:[#6X3]=,:[#6X3]1)]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1808,1808,20,Hydrazine,[NX3;!$([NX3](=[OX1])=[OX1]);!$([NX3+](=[OX1])[O-])][NX3;!$([NX3](=[OX1])=[OX1]);!$([NX3+](=[OX1])[O-])],Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1809,1809,20,Aliphatic azo and azoxy,"[$([C,#1][NX2]=[NX2][C,#1]),$([CX3]=[NX2+]=N),$([CX3]=[NX2+]=[NX1-]),$([CX3-][NX2+]#[NX1]),$([CX3][NX2]#[NX1]),$(C[NX2]=N(=O)[*]),$(C[NX2]=[N+]([O-])[*])]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1810,1810,20,Isocyanate and isothiocyanate groups,"[NX2]=[CX2]=[OX1,Sv2X1]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1811,1811,20,Alkyl carbamate and thiocarbamate,"[NX3]([C,#1])([C,#1])[CX3](=[OX1,Sv2X1])[OX2,Sv2X2]C",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1812,1812,20,Polycyclic Aromatic Hydrocarbons,"[$([cX3R3]),$([cX3;R1,R2,R3]1[cX3;R1,R2,R3][cX3;R1,R2,R3][cX3;R1,R2,R3][cX3;R2,R3]2[cX3;R2,R3]1[cX3;R1,R2,R3][cX3;R2,R3]3[cX3;R2,R3]([cX3;R1,R2,R3]2)[cX3;R1,R2,R3][cX3;R1,R2,R3][cX3;R1,R2,R3][cX3;R1,R2,R3]3)].[!$([n,o,s])]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1813,1813,20,Heterocyclic Polycyclic Aromatic Hydrocarbons,"[$([aR3].[n,o,s]),$([$([aR2]([aR])([aR])([aR]))].[$([aR2]([aR])([aR])([aR]))].[$([aR2]([aR])([aR])([aR]))].[$([aR2]([aR])([aR])([aR]))].[n,o,s])]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" -1814,1814,21,Haloanhydrides,"[F,Cl,Br,I][CX3](=[OX1])[#1,*&!$([OH1])&!$([SH1])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1815,1815,21,Acylimidazoles,[#6][CX3](=[OX1])n1cncc1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1816,1816,21,Acylbenzotriazoles,[#6][CX3](=[OX1])n1nnc2ccccc12,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1817,1817,21,Anhydrides and mixed anhydrides,[CX3](=[OX1])[OX2][CX3](=[OX1]),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1818,1818,21,Phosphorus halogen derivatives (1),"[Pv5X4](=[OX1])([F,Cl,Br,I])([#6])[#6]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1819,1819,21,Phosphorus halogen derivatives (2),"[Pv5X4](=[OX1])([F,Cl,Br,I])([#8])[#6]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1820,1820,21,Phosphorus halogen derivatives (3),"[Pv5X4](=[OX1])([F,Cl,Br,I])([#8])[#8]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1821,1821,21,Phosphorus halogen derivatives (4),"[Pv5X4](=[OX1])([F,Cl,Br,I])([#7])[#6]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1822,1822,21,Phosphorus halogen derivatives (5),"[Pv5X4]([F,Cl,Br,I])([#6])([#6])=[SX1]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1823,1823,21,Phosphorus halogen derivatives (6),"[Pv5X4]([#8])([#6])([F,Cl,Br,I])(=[SX1])",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1824,1824,21,Phosphorus halogen derivatives (7),"[Pv5X4](=[SX1])([F,Cl,Br,I])([#16])[#6]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1825,1825,21,Phosphorus V derivatives,[Pv5X4]([!#1])([!#1])([!#1])=[NX2],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1826,1826,21,Isocyanates,[NX2]=[CX2]=[OX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1827,1827,21,Isothiocyanates,[NX2]=[CX2]=[SX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1828,1828,21,Carbodiimides,[#6][NX2]=[CX2]=[NX2][#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1829,1829,21,Thiocyanates,[SX2][CX2]#[NX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1830,1830,21,Sulfonylhalides,"[#6][Sv6X4](=[OX1])(=[OX1])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1831,1831,21,Sulfonylanhydrides,[#6][Sv6X4](=[OX1])(=[OX1])[OX2][Sv6X4](=[OX1])(=[OX1])[#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1832,1832,21,Alkylsulfonates,[#6][Sv6X4](=[OX1])(=[OX1])[OX2][CX4],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1833,1833,21,Alkylsulfates,"[#6,#1][OX2,OH1][Sv6X4](=[OX1])(=[OX1])[OX2][CX4]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1834,1834,21,All types of 3-valent phosphorus and similar (1),[Pv3X3]([#8])([#8])[#8],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1835,1835,21,All types of 3-valent phosphorus and similar (2),"[Pv3X3]([#8])([#8])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1836,1836,21,All types of 3-valent phosphorus and similar (3),"[Pv3X3]([#8])([#6])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1837,1837,21,All types of 3-valent phosphorus and similar (4),"[Pv3X3]([#6])([#6])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1838,1838,21,All types of 3-valent phosphorus and similar (5),[Pv3X3]([#6])([#6])([#6]),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1839,1839,21,All types of 3-valent phosphorus and similar (6),"[Pv3X3]([#8])([#7])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1840,1840,21,All types of 3-valent phosphorus and similar (7),"[Pv3X3]([#7])([#7])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1841,1841,21,All types of 3-valent phosphorus and similar (8),"[#16][Pv3X3]([#6])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1842,1842,21,All types of 3-valent phosphorus and similar (9),[Pv3X3]([#7])([#7])[#7],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1843,1843,21,All types of 3-valent phosphorus and similar (10),[PX4+]([#6])([#6])([#6])([#6]),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1844,1844,21,Hydroxamic acid haloanhydrides,"[CX3]([#6])([F,Cl,Br])=[NX2][#8]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1845,1845,21,Halothioanhydrides,"[#6][CX3](=[SX1])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1846,1846,21,Halocarbonates,"[#8][CX3](=[OX1])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1847,1847,21,Halocarbamates,"[#7][CX3](=[OX1])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1848,1848,21,Isocyanides,"[#6][$([NX2+]#[CX1-]),$([NX2]#[CX1])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1849,1849,21,Azides,"[$([NX2]=[NX2+]=[NX1-]),$(N=[NX2+]=N),$([NX2-]-[NX2+]#[NX1])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1850,1850,21,Thione esters,"[#6,#1][CX3](=[SX1])[OX2][#6]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1851,1851,21,Acylsulfides,"[#6,#1][CX3](=[OX1])[SX2][#6]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1852,1852,21,Thiones,[#6][CX3](=[SX1])[#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1853,1853,21,Thioamides,[#6][CX3](=[SX1])[#7],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1854,1854,21,Peroxides,[OX2][OX2],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1855,1855,21,Acyclic disulfides and polysulfides,[SX2!R][SX2!R],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1856,1856,21,Nitroso,[#6][NX2]=[OX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1857,1857,21,Nitrates,"[#6][OX2][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1858,1858,21,N-Nitro,"[#7][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1859,1859,21,N-Nitroso,[#7][NX2]=[OX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1860,1860,21,Azo,[#6][NX2]=[NX2][#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1861,1861,21,Azoxy,"[#6][$([NX2]=[NX3+]([O-])[#6]),$([NX2]=[NX3](=[OX1])[#6])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1862,1862,21,Nitroso dimers,"[$([#6][NX3+]([OX1-])=[NX3+]([OX1-])[#6]),$([#6][NX3](=[OX1])=[NX3](=[OX1])[#6])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1863,1863,21,Haloamines,"[#6][NX3][F,Cl,Br]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1864,1864,21,Sulfenyl halides,"[#6][Sv2X2][F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1865,1865,21,Sulfinyl halides,"[#6][Sv4X3](=[OX1])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1866,1866,21,Diazonium salts,"[$([NX2+]#[NX1]),$([NX2]#N)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1867,1867,21,Cyclic and linear haloamidines,"[CX3](=[#7])([#7])[Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1868,1868,21,Aldehydes,"[#6,#1][CX3]([H])=[OX1]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1869,1869,21,Aldimines and ketimines,[#6][CX3]=[NX2][#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1870,1870,21,Hydrazines,[#6][NX3;!$([NX3](=[OX1])=[OX1]);!$([NX3+](=[OX1])[O-])][NX3;!$([NX3](=[OX1])=[OX1]);!$([NX3+](=[OX1])[O-])],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1871,1871,21,Hydrazones and similar,[CX3]=[NX2][NX3][#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1872,1872,21,Hydroxylamines,[OH1][NX3][#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1873,1873,21,N-Oxides,"[$([OX1-,OH1][#7X4+]([*])([*])([*])),$([OX1]=[#7X4v5]([*])([*])([*])),$([OX1]=[Nv5X3&!$([Nv5X3](=[OX1])=[OX1])](=[*])([*])),$([OX1-,OH1][#7X3+R](~[R])(~[R])),$([OX1]=[#7v5X3R](~[R])(~[R]))]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1874,1874,21,Aminals,N[CX4]N,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1875,1875,21,Ammonium salts,[NX4+]([#6])([#6])([#6])([#6]),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1876,1876,21,Sulfonium salts,[SX3+]([#6])([#6])([#6]),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1877,1877,21,α-Haloketones and similar,"[#6][CX3](=[OX1])[CX4][Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1878,1878,21,β-Haloamines,"[NX3][CX4][CX4][Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1879,1879,21,β-Halosulfides,"[Sv2X2][CX4][CX4][Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1880,1880,21,Acrylates and similar,[CX3](=[OX1])([#8])[CX3]=[CX3],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1881,1881,21,Acrylamides,[CX3](=[OX1])([#7])[CX3]=[CX3],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1882,1882,21,Vinylketones and similar,[CX3](=[OX1])([#6])[CX3]=[CX3],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1883,1883,21,Vinylsulfones and similar,[Sv6X4](=[OX1])(=[OX1])[CX3]=[CX3],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1884,1884,21,Nitrovinyl,"[CX3]=[CX3][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1885,1885,21,Acrylonitriles,[NX1]#CC=C,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1886,1886,21,Vinylphosphonates and similar,[Pv5X4](=[OX1])([#8])([#8])[CX3]=[CX3],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1887,1887,21,Vinylpyridines and similar,"[$(n1c([CX3]=[CX3])cccc1),$(n1cc([CX3]=[CX3])ccc1),$(n1ccc([CX3]=[CX3])cc1)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1888,1888,21,Cyclic maleimide-like Michael acceptors,C1(=[OX1])C=CC(=[OX1])[NX3]1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1889,1889,21,Ketenes,[CX3]=[CX2]=[OX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1890,1890,21,Allenes,C=C=C,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1891,1891,21,Oxiranes,[CX4]1[OX2][CX4]1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1892,1892,21,Thiiranes,[CX4]1[SX2][CX4]1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1893,1893,21,Aziridines,[CX4]1[NX3][CX4]1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1894,1894,21,Oxetanes,[CX4]1[OX2][CX4][CX4]1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1895,1895,21,Thietanes,[CX4]1[SX2][CX4][CX4]1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1896,1896,21,Selen in chain,[Sev2X2],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1897,1897,21,O-Silyl derivatives,[Si]([#8])([#6])([#6])([#6]),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1898,1898,21,N-Silyl derivatives,[Si]([#7])([#6])([#6])([#6]),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1899,1899,21,Nitro-haloarenes,"[$([F,Cl,Br,I]c1c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cccc1),$([F,Cl,Br,I]c1cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])ccc1),$([F,Cl,Br,I]c1ccc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1900,1900,21,Dinitroarenes,"[$(c1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cccc1),$(c1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])ccc1),$(c1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])ccc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1901,1901,21,Benzylhalogenides and similar,"c1ccccc1([CX4][Cl,Br,I])",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1902,1902,21,Halomethyl ethers,"[F,Cl,Br,I][CX4][#8]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1903,1903,21,Halomethyl thioethers,"[F,Cl,Br,I][CX4][#16]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1904,1904,21,Halomethyl amines,"[F,Cl,Br,I][CX4][#7]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1905,1905,21,Iodoso and similar hypervalent compounds,[OX1]=[I!X1][#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1906,1906,21,Linear thioureas,N[CX3](=[SX1])N,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1907,1907,21,Linear dithiocarbamates,N[CX3](=[SX1])S,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1908,1908,21,Trithiocarbonates,[CX3](=[SX1])(S)S,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1909,1909,21,Thioester,[CX3](=[SX1])([#6])S,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1910,1910,21,Bunte salts,[Sv6X4](=[OX1])([#8])([#8])[SX2][#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1911,1911,21,Positively charged N-heterocycles,[#7v4X3R],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1912,1912,21,Haloquinones and similar,"[$([#6]1([F,Cl,Br,I])=,:[#6]-,:[#6](=[OX1])-,:[#6]=,:[#6]-,:[#6]1(=[OX1])),$([#6]1(=[OX1])-,:[#6](=[OX1])-,:[#6]([F,Cl,Br,I])=,:[#6]-,:[#6]=,:[#6]1),$([#6]1(=[OX1])-,:[#6](=[OX1])-,:[#6]=,:[#6]([F,Cl,Br,I])-,:[#6]=,:[#6]1)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1913,1913,21,Organometallic compounds,"[$([Te]~[#6]),$([As]~[#6]),$([Ge]~[#6]),$([Hg]~[#6]),$([Co]~[#6]),$([Fe]~[#6]),$([Mn]~[#6]),$([Cr]~[#6]),$([Ti]~[#6]),$([Sn]~[#6])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1914,1914,21,Three-membered heterocycles,"[#6]1~[#6][#7,#8,#16]1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1915,1915,21,Thioles,[Sv2X2H1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1916,1916,21,Disulphides,SS,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1917,1917,21,Peroxides,OO,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1918,1918,21,Aldehydes,[CX3!H0]=[OX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1919,1919,21,Chlor(brom)anhydrides,"[CX3](=[OX1])[Cl,Br]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1920,1920,21,Sulphonic acids/esters,S(=O)(=O)O,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1921,1921,21,Trihalogensubstituted ketones,"[CX3](=[OX1])[CX4]([F,Cl,Br,I])([F,Cl,Br,I])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1922,1922,21,Monohalogen substituted ketones,"[CX3](=[OX1])C[Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1923,1923,21,Alkylhalides,"[CX4][Br,Cl,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1924,1924,21,Sulphonhalogenanhydrides,"S(=[OX1])(=[OX1])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1925,1925,21,Sulphonic acid,[Sv6X4](=[OX1])(=[OX1])[OH1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1926,1926,21,Phosphorus,P,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1927,1927,21,Iodine,I,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1928,1928,21,Selen,[Se],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1929,1929,21,Bor,B,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1930,1930,21,Silicium,[Si],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1931,1931,21,"Isocyanates, isothiocyanates","[NX2]=[CX2]=[OX1,SX1]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1932,1932,21,Thione,[CX3]=[SX1!R],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1933,1933,21,β-halogen substituted carbonyls,"[CX3](=[OX1])CC[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1934,1934,21,β-hydroxy substituted carbonyls,[CX3](=[OX1])[C!H0]C[OH1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1935,1935,21,gem-Dihalo propane and cyclopropane,"CC([Cl,Br,I])([Cl,Br,I])C",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1936,1936,21,Activated halides (o-nitro substituted haloaromatics),"[$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]cc[F,Cl,Br]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1937,1937,21,Activated halides (p-nitro substituted haloaromatics),"[$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]cccc[F,Cl,Br]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1938,1938,21,Activated halides (α-halogen substituted N-heterocycles),"nc[F,Cl,Br]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1939,1939,21,Activated halides (γ-halogen substituted N-heterocycles),"nccc[F,Cl,Br]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1940,1940,21,Thiourea,[#7][CX3](=[SX1])[#7],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1941,1941,21,Barbiturates,"N1C(=[OX1,SX1])NC(=[OX1,SX1])C(=C)C1(=[OX1,SX1])",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1942,1942,21,Alkyl chains,[CX4H2!R][CH2][CH2][CX4H2!R][CH2],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1943,1943,21,"Non-cyclic 1,2-dicarbonyls compounds",C[C!R](=[OX1])[C!R](=[OX1])C,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1944,1944,21,Crown ethers,[!#1!#6]C~C[!#1!#6]C~C[!#1!#6]C~C[!#1!#6]C~C[!#1!#6]C~C[!#1!#6]C~C,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1945,1945,21,Coumarins (1),"c1cccc2c1oc(=O)c([$(C=[OX1]),$(C=[SX1]),$(S=[OX1]),$(C#[NX1]),F,Cl,Br,I,$([CX4]([F,Cl,Br,I])([F,Cl,Br,I])([F,Cl,Br,I]));!$([CX3](=[OX1])[OH1])])[c!H0]2",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1946,1946,21,Coumarins (2),"[cH1]1[cH1]c2c3[cH1][cH1]c(cc3oc(=O)c2[cH1]c1[OX2][$([CH2]),$([CH3])])[OX2][C!H0]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1947,1947,21,Coumarins (3),c1cccc2c1oc(=[OX1])[c!H0]c2,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1948,1948,21,Coumarins (4),c1cccc2c1nc(=[OX1])[c!H0]c2,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1949,1949,21,Coumarins (5),c1cccc2c1nc(=[NX2])[c!H0]c2,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1950,1950,21,Coumarins (6),"c1([F,Cl,Br,I])cc([F,Cl,Br,I])cc2c1oc(=[NX2H1])c([CX3](=[OX1])[NH2])[c!H0]2",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1951,1951,21,Coumarins (7),c1cccc2c1oc(=[NX2])cc2,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1952,1952,21,Maleimides,C1(=[OX1])NC(=[OX1])[CX3H1]=[CX3]1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1953,1953,21,"Michael acceptors (α,β-unsaturated carbonyls)",[CX3!H0!R]=[CX3!R][CX3]=[OX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1954,1954,21,Michael acceptors (acrylonitriles),[CX3!H0!R]=[CX3!R][CX2]#[NX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1955,1955,21,"Michael acceptors (α,β-unsaturated ketones)",C[CX3H1]=[CX3H1!R][CX3](=[OX1])C,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1956,1956,21,Michael acceptors (methyl acrylonitrile derivatives),C[CX3H1]=[CX3!R][CX2]#[NX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1957,1957,21,o-Quinones (3),"CC(=[OX1])C(=[OX1])[#6,#7]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1958,1958,21,o-Quinones (5),CC(=[OX1])C(=S)C,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1959,1959,21,p-Quinones (2),"[#6]1=,:[#6]-,:[#6]=,:[#6]2-,:[#6](=,:[#6]1)-,:[#6](=[OX1])-,:[#6]4-,:[#6]3=,:[#6]2-,:[#8]-,:[#7]=,:[#6]3-,:[#6]=,:[#6]-,:[#6]4",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1960,1960,21,p-Quinones (3),"[#6]1-,:[#6]=,:[#6]-,:[#6]=,:[#6]2-,:[#6]1-,:[#6](=[OX1])-,:[#6]4=,:[#6]3-,:[#6]2=,:[#6](-,:[#6](=[OX1])-,:[#7]-,:[#6]3=,:[#6]-,:[#6]=,:[#6]4)O",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1961,1961,21,Hydroquinone,c1c([OH1])c([OH1])ccc1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1962,1962,21,N-N Single bound not in a ring,[N!R][N!R],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1963,1963,21,Ketal,CC([OX2]C)([OX2]C)C,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1964,1964,21,Acetal,[CX4H1](C)([OX2]C)([OX2]),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1965,1965,21,Acyl and sulfinyl cyanide,"[$(C(=[OX1])[CX2]#[NX1]),$(S(=[OX1])[CX2]#[NX1])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1966,1966,21,Amidotetrazole,"[#7]1([CX3]=[OX1])-,:[#6]=,:[#7]-,:[#7]=,:[#7]1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1967,1967,21,Hydrazine and other nucleophilic NH2-groups,"[NX3H2][#7,#8]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1968,1968,21,Hydroxylamines,[NX3]([OH1])[CX4],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1969,1969,21,Nitroso,[NX2]=[OX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1970,1970,21,Activated halo- and sulfonyl-aromatics,"c1([F,Cl,Br,I,$(C(C)=NO),$([CX2]#[NX1]),$([CX3]=[OX1]),$([CX4](F)(F)F),$([SX4](=[OX1])=[OX1]);!$([CX3](=[OX1])[OH1])])na([F,Cl,Br,I,$([SX4](=[OX1])(=[OX1])C)])a([!#7])a([!#7])a1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1971,1971,21,Rhodanines,N1C(=[SX1])[SX2]C(=C)[CX3]1=[OX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1972,1972,21,Acyclic gem-dihalosubstituted carbon atom,"[C!R]([Cl,Br,I])[Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1973,1973,21,Imines,"[N!R]=[C,N]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1974,1974,21,N-Oxides,"[$([#7+R][OX1-!R]),$([#7v5R]=[OX1!R]);!$([#7](~[O])~[O]);!$([#7]=[#7])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1975,1975,21,Michael acceptors (carbonyl containing acrylonitrile derivatives),C[CX3H1]=[CX3!R](C(=[OX1])[!#1]~[!#1])[CX2]#[NX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1976,1976,21,Over halogenated rings,"a1c([F,Cl,Br,I])c([F,Cl,Br,I])ac([F,Cl,Br,I])a1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1977,1977,21,o-Quinones (1),"[CX3]1(=[!#1!#6])[CX3](=[!#1!#6])[#6X3]=,:[#6X3]-,:[#6X3]=,:[#6X3]1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1978,1978,21,o-Quinones (2),CC(=[!#1!#6;!R])C(=[!#1!#6;!R])C,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1979,1979,21,o-Quinones (4),CC(=[!#1!#6;!R])S(=[OX1])(=[OX1]),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1980,1980,21,p-Quinones (1),"[#6X3]1=,:[#6X3][CX3](=[!#1!#6])[#6X3]=,:[#6X3][#6X3]1(=[!#1!#6])",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1981,1981,21,Polycyclic 4 fused rings and more,"[$([$([*R2]([*R])([*R])([*R]))].[$([*R2]([*R])([*R])([*R]))].[$([*R2]([*R])([*R])([*R]))].[$([*R2]([*R])([*R])([*R]))].[$([*R2]([*R])([*R])([*R]))].[$([*R2]([*R])([*R])([*R]))]),$([$([*R3]([*R3])([*R2,R3])([*R2,R3]))].[$([*R3]([*R3])([*R2,R3])([*R2,R3]))]),$([$([*R2,R3]([*R3])([*R])([*R]))].[$([*R2,R3]([*R3])([*R])([*R]))].[$([*R3]([*R2,R3])([*R2,R3])([*R2,R3]))].[$([*R2,R3]([*R3])([*R2,R3])([*R]))].[$([*R2,R3]([*R2,R3])([*R2,R3])([*R]))].[$([*R2,R3]([*R2,R3])([*R])([*R]))]),$([$([*R2,R3]([*R3])([*R])([*R]))].[$([*R3]([*R2,R3])([*R2,R3])([*R2,R3]))].[$([*R2,R3]([*R3])([*R])([*R]))].[$([*R2,R3]([*R3])([*R2,R3])([*R]))].[$([*R2,R3]([*R2,R3])([*R2,R3])([*R]))].[$([*R2,R3]([*R2,R3])([*R])([*R]))])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1982,1982,21,Other undesirable policyclic (adamantane derivatives),C1C4CC9CC1CC(C4)C9,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1983,1983,21,"Other undesirable policyclic (1,3,5-triazaadamantane derivatives)",C1N4CN8CC1CN(C4)C8,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1984,1984,21,"Other undesirable policyclic (2,3-dihydro-1H-phenalene derivatives)",c1ccc2c3c1cccc3CCC2,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1985,1985,21,Other undesirable policyclic (acenaphthene derivatives),c1ccc2c3c1cccc3CC2,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1986,1986,21,Acid anhydrides and analogues,[!#1](=O)O[!#1]=O,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1987,1987,21,Acyl halides and analogues,"[C,S](=[O,S])[F,Br,Cl,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1988,1988,21,Acrylonitriles,N#CC=[C!H0],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1989,1989,21,Cyano carbonyl compounds,N#CC(=O),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1990,1990,21,Aldehydes,[#6][CH]=O,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1991,1991,21,Alkyl halides,"[CX4,C!H0][Br,Cl,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1992,1992,21,Methylendiamines (1),"[!$([C,S]=O)]N([!$([C,S]=O)])[CX4]N([!$([C,S]=O)])[!$([C,S]=O)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1993,1993,21,Methylendiamines (2),"[!$([C,S]=O)][NH][CX4]N([!$([C,S]=O)])[!$([C,S]=O)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1994,1994,21,Methylendiamines (3),"[!$([C,S]=O)][NH][CX4][NH][!$([C,S]=O)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1995,1995,21,N-Acetoxy amines and their thio analogues,"[#7][#8][C,S]=O",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1996,1996,21,α-Halogen substituted N-heterocycles,"[F,Br,Cl,I]-cn",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1997,1997,21,Activated haloaromatics,"[F,Cl,Br,I][$(aa[Nv4,S!v2]),$(aaa[Nv4,S!v2]),$(aaaa[Nv4,S!v2])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1998,1998,21,Compounds containing three bonded nitrogen atoms,[NX1]~[NX2]~[NX2],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -1999,1999,21,Benzyl ammoniums,cC[NX4+],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2000,2000,21,α-Carbonyl ammoniums,C(=O)[#6][NX4+],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2001,2001,21,Cations,"[#6+,#17+,#53+,#15+,#16+]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2002,2002,21,Disulfides,[#16][#16],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2003,2003,21,Enamines,[#6][CX3](!@N)=[CX3][#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2004,2004,21,Three-membered heterocycles,"C1[O,S,N]C1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2005,2005,21,Halogen-bonded heteroatoms,"[!#1&!#6][F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2006,2006,21,Cumulated double bonds,"[C,N]=C=[C,O,N,S]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2007,2007,21,Acetoxy group attached to the aromatic nitrogen,C(=O)Onnn,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2008,2008,21,Singel acyclic N-N bonds,[#7]!@-N,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2009,2009,21,Isocyanides,[NX2+]#[CX1-],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2010,2010,21,Activated double bonds (1),[C!H0]=C(C#N)C(=O),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2011,2011,21,Activated double bonds (2),[!c][C!H0]=CC=O,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2012,2012,21,Activated double bonds (3),"[C!H0]=C[S,N]=O",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2013,2013,21,Singel acyclic N-S bonds,[NR0]-[SR0!v6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2014,2014,21,Acetoxy group attached to the substituted aromatic ring,"C(=O)O[$(aa[Nv4,S!v2]),$(aaa[Nv4,S!v2]),$(aaaa[Nv4,S!v2])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2015,2015,21,"Oxetanes, thietanes","C1[O,S]CC1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2016,2016,21,Trihalomethyl ketones,"CC(=O)C([F,Cl,Br,I])([F,Cl,Br,I])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2017,2017,21,Peroxides,OO,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2018,2018,21,Phosphonates,[#6]P(=O)O[#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2019,2019,21,Phosphorus containing compounds,"NP(=[N,O,S])",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2020,2020,21,p-Quinones,O=C1C=CC(=O)C=C1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2021,2021,21,o-Quinones,O=C1C(=O)C=CC=C1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2022,2022,21,"C, N, O, P and S atoms in unusual valence states","[#6!v4+0,#7!v3+0,#8!v2+0,#15!v3!v5+0,#16!v2!v4!v6+0]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2023,2023,21,Thiocyanates,SC#N,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2024,2024,21,Sulfurous acid esters,[!#1]OS(=O)O,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2025,2025,21,Sulfonic acid esters,[#6]S(=O)(=O)O[#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2026,2026,21,Heteroatom-bonded thiocarbonyls,"C(=S)[O,S,N]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2027,2027,21,Thiocarboxylic acids and their derivatives,[CR0](=O)S,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2028,2028,21,Thiols,[#6][Sv2H],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2029,2029,21,Thiocarbonyls,C(=S)[!#1!H0],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2030,2030,21,"N-Acetoxy-N,N-dicarbonyl compounds",C(=O)N(C(=O))OC=O,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2031,2031,21,Trifluoromethyl sulfinyls,FC(F)(F)S(=O),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2032,2032,21,Non-threevalent nitrogen double-bonded to oxygen,[#6!c][N!v3]=O,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2033,2033,21,Anthracenes,c12ccccc1cc3ccccc3c2,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2034,2034,21,Double acyclic N=N and N=S bonds,"[NR0,SR0]=[NR0]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2035,2035,21,β-Aminonaphtalenes,c1(cc(N)cc2)c2cccc1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2036,2036,21,Dialkyl(aryl) phosphorus containing compounds,[#6]P[#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2037,2037,21,"Iodosos, chlorosos","[Cl,I]=O",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2038,2038,21,Acid grops,"[C,S,P](=O)[OH].[C,S,P](=O)[OH].[C,S,P](=O)[OH].[C,S,P](=O)[OH]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2039,2039,21,Crown ethers,[OR1][CR1][CR1][OR1][CR1][CR1][OR1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2040,2040,21,Phosphocyanates,PC#N,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2041,2041,21,α-Hydroxy nitriles,N#CC[OH],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2042,2042,21,α-Diketones,[CX3R0](=O)[CX3R0](=O),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2043,2043,21,Singel acyclic N-O bonds,[NR0v3]-[OR0],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2044,2044,21,Imines,"[$([#6][CHR0]=[NR0]),$([#6][CR0]([#6])=[NR0])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2045,2045,21,Activated double bonds (4),C=C(C#N)(C#N),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2046,2046,21,N-Oxides,"[$([#7+][O-]),$([#7v5]=O);!$([#7](~[OD1])~[OD1])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2047,2047,21,Nitrites,[!#1]ON=O,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2048,2048,21,Nitroso compounds,[NX2]=O,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2049,2049,21,"Any atoms except organogens, halogens, P, S, K, Na, Mg, Ca",[!#1;!#6;!#7;!#8;!#9;!#11;!#12;!#15;!#16;!#17;!#19;!#20;!#35;!#53],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2050,2050,21,Double P=S and P=C bonds,"P=[S,#6]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2051,2051,21,Pentafluorobenzenes,c1c(F)c(F)c(F)c(F)c1(F),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2052,2052,21,Phenanthrenes,c12ccccc1ccc3ccccc23,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2053,2053,21,p-Aminoanilines,c1([NH2])ccc(!@[Nv3])cc1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2054,2054,21,Phosphorus derivatives,[P!v5],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2055,2055,21,Conjugated olefins,[CR0]=[CR0][CR0]=[CR0][CR0]=[CR0][CR0]=[CR0],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2056,2056,21,Carboxylic acid esters,[CX4]C(=O)O[#6][!#1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2057,2057,21,Ketones,[CX4]C(=O)C,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2058,2058,21,"N,N-Dialkyl aniline derivatives (1)","[CX4][NX3]([CX4])c1cc([$([CX4]),$(O[CX4][CX4])])c([#7])[cH]c1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2059,2059,21,"N,N-Dialkyl aniline derivatives (2)",[CX4][NX3]([CX4])c1c[cH]c([#7])[cH]c1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2060,2060,21,"N,N-Dialkyl aniline derivatives (3)",[CX4][NX3]([CX4])c1ccc(C=C)cc1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2061,2061,21,p-Alkoxy-N-alkyl anilines,[CX4][NH]c1ccc(O[CX4])cc1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2062,2062,21,"p-Alkoxy-N,N-dialkyl anilines",[CX4]N([CX4])c1ccc(O[CX4])cc1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2063,2063,21,"N,N-Dialkyl aniline derivatives (4)","[CX4]N([CX4])c1ccc([CX4][$([OH]),$(C=[C!H0]),$(N[CX4])])cc1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2064,2064,21,"N,N-Dialkyl aniline derivatives (5)","[CX4]N([C!H0])c1[cH][cH]c([$([C!H0!H1]),$([C!H0][C!H0])])[cH][cH]1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2065,2065,21,"N,N-Dialkyl aniline derivatives (6)","[CX4]N([C!H0])c1[cH]c([CX4])c([$([C!H0!H1]),$([C!H0][C!H0])])[cH][cH]1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2066,2066,21,Phosphoric anhydrides,P(=O)OP(=O),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2067,2067,21,Sulfonylanhydrides,S(=O)OS=O,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2068,2068,21,Five-membered heterocycles (1),"C1(=C)C(=O)[#7,#8,#15,#16]N=C1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2069,2069,21,Thioxo-thiazolidinones,C1(=S)NC(=O)C(=[#6])S1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2070,2070,21,Six-membered heterocycles,"[#7,#8,#15,#16]~C1~[#7,#8,#15,#16]~C[#7,#8,#15,#16][CX3](=[#7,#8,#15,#16])[CX3]1(=[C!H0])",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2071,2071,21,Glutarimides,C1CC(=O)NC(=O)C1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2072,2072,21,Aliphatic chain,[CD1][CD2][CD2][CD2][CD2][CX4],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2073,2073,21,o-Substituted phenols (1),[OH]c1c(C=NN)cccc1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2074,2074,21,p-Substituted phenols,[OH]c1ccc(C=NN)cc1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2075,2075,21,"1,2-Diimines, 1,2-diketones and their thio- and phospho-analogues","[#6][#6](=[#7,#8,#15,#16])[#6](=[#7,#8,#15,#16])[#6,Sv6]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2076,2076,21,Indolones,O=C1[#7]c2ccccc2C1=N[#7],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2077,2077,21,NH-Indoles,"[nH]1c([$([CH2]),$([C!H0]N),$([CD3]([CH2])[NH][CH2]),$([CD3]([CH2])[CD2][NH][CH2]),$([#6]=,:[#7,#8,#15,#16])])c([CX4!H0])c2[cH]cccc12",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2078,2078,21,N-Alkyl substituted indoles,"n1([CH2])c([$([CH2]),$([C!H0]N),$([CD3]([CH2])[NH][CH2]),$([CD3]([CH2])[CD2][NH][CH2]),$([#6]=,:[#7,#8,#15,#16])])c([CX4!H0])c2[cH]cccc12",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2079,2079,21,o-Substituted phenols (2),[OH]c1c([CX4][#7])cccc1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2080,2080,21,N-Allophanoylamides and their thio analogues,"NC(=[O,S])NC(=[O,S])NC=[O,S]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2081,2081,21,Tetrahydrofuranyltetrahydropyrans,C1COC(C1)C1CCCCO1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2082,2082,21,Octahydroisoindolones,[C!H0]1NC(=O)C2CCCCC12,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2083,2083,21,N-Phenylpyrrole derivatives,N1(c2[!#1]cccc2)C([CX4])=C[C!H0]=C1[CX4],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2084,2084,21,"Quinones, quinone-(di)imines and their thio- and phospho-analogues","[#7,#8,#15,#16]=[#6]1-,:[#6]=,:[#6]-,:[#6](=[#7,#8,#15,#16])-,:[#6]=,:[#6]1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2085,2085,21,Five-membered heterocycles (2),"[#7]=C1S[CH]=C([$([CH2]),$(c:c)])N1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2086,2086,21,Five-membered heterocycles (3),"[#7]=C1SC([$([CH2]),$(C=O)])=C([$([CH2]),$(c:c)])N1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2087,2087,21,Tert-butyl carbon atom,c[CX4](c)c,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2088,2088,21,Acethylenes,"[CH2,CH3]C#C[CH2,CH3]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2089,2089,21,α-Halocarbonyls,"[CX3](=[OX1])[CX4]([#1,Cl,Br,I])([#1,Cl,Br,I])[Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2090,2090,21,Aldehydes,"[#6,#1][CX3]([H])=[OX1]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2091,2091,21,α-Halonitriles,"[F,Cl,Br,I][CX4][CX2]#[NX1]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2092,2092,21,Anthracenes,"[c,n]1[c,n][c,n]c2[c,n]c3[c,n][c,n][c,n][c,n]c3[c,n]c2c1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2093,2093,21,Azides,"[#6]-[$([NX2]=[NX2+]=[NX1-]),$([NX2]=[NX2+]=N)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2094,2094,21,Azide tautomers,[#6]-[NX2-][NX2+]#[NX1;0],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2095,2095,21,Benzthiozolium like compounds,"[#7,#8,#16]1-,:[#6]=,:[#6]-,:[#7+]2=,:[#6,#7]-,:[#6,#7]=,:[#6,#7]-,:[#6,#7]=,:[#6]21",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2096,2096,21,Catechols,c1([OH1])c([OH1])cccc1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2097,2097,21,Cyanates,"[NX2]=[CX2]=[OX1,SX1]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2098,2098,21,Di-carbonyls,"[#1,#6][CX3](=[OX1])[CX3](=[OX1])[#1,#6]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2099,2099,21,Epoxides,C1OC1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2100,2100,21,Haloalkyl,"[C!H0]([#1,#6,#7,#8,#16])[CX4]([#1,Cl,Br,I])([#1,Cl,Br,I])[Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2101,2101,21,"Haloalkyl group attached to S, N or O atoms","[CX4]([#1,Cl,Br,I])([#1,Cl,Br,I])([Cl,Br,I])[#7,#8,#16]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2102,2102,21,Haloethylenes,"[CX3!H0]=[CX3]([#1,Cl,Br,I])[Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2103,2103,21,Halopyridines,"c1([F,Cl,Br,I])n[c,n][c,n][c,n][c,n]1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2104,2104,21,Heptanes,"[CH3][CH2][CH2][CH2][CH2][CH2][CH2,CH3]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2105,2105,21,Hydrazines,"[NX3!H0]([#1,#6])[NX3!H0]([#1,#6])",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2106,2106,21,Imines,"[NX3]([#1,#6])([#1,#6])[NX2]=[CX3!H0]([#1,#6])",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2107,2107,21,N-Oxides (five-membered rings),"[$([OX1-][#7+]1=,:[#6,#7]-,:[#6,#7]=,:[#6,#7]-,:[#6,#7,#8,#16]1),$([OX1]=[#7v5]1=,:[#6,#7]-,:[#6,#7]=,:[#6,#7]-,:[#6,#7,#8,#16]1)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2108,2108,21,Phosphorus,[#15&0],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2109,2109,21,Phosphorus cations,[#15+],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2110,2110,21,Pentafluorobenzenes,c1c(F)c(F)c(F)c(F)c1(F),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2111,2111,21,Peroxides,[OX2][OX2],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2112,2112,21,Peroxide like compounds,"O[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2113,2113,21,Phosphates,[Pv5X4](=[OX1])([OX2])([OX2])[#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2114,2114,21,Double P=O bonds,[#15]=O,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2115,2115,21,Pyridinium like compounds,"[#6][#7+]1=,:[#6]-,:[#6,#7]=,:[#6]-,:[#6,#7]=,:[#6]1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2116,2116,21,Quinolizinium like compounds,"[#6,#7]1=,:[#6,#7]-,:[#6,#7]=,:[#7+]2-,:[#6,#7]=,:[#6,#7]-,:[#6,#7]=,:[#6,#7]-,:[#6]2=,:[#6,#7]1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2117,2117,21,Quinones,"[#6]1(=[OX1])-,:[#6]=,:[#6]-,:[#6](=[OX1])-,:[#6]=,:[#6]1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2118,2118,21,Sulfates,"[Sv6X4](=[OX1])(=[OX1])([#8])[#6,#8]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2119,2119,21,Thio aldehydes,"[#6,#1][CX3]([H])=[SX1]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2120,2120,21,Thio halogens,"[#16][F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2121,2121,21,Thioalcohols,"[#6&!$(C(=[OX1,SX1,NX2]))][SX2H1]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2122,2122,21,Thioamides,"[NX3H2][CX3](=[SX1])[#1,#6,#8]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2123,2123,21,Thioureas,"[NX3]([#1,#6,#7])([#1,#6])[CX3](=[SX1])[NX3]([#1,#6,#7])([#1,#6])",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2124,2124,21,Thiozolium like compounds,"[#6][#7+]1=,:[#6]-,:[#7,#8,#16]-,:[#6]=,:[#6]1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2125,2125,21,Acyl Halides,"[Br,Cl,F,I][CX3](=[OX1])[#1,*&!$([OH1])&!$([SH1])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2126,2126,21,Sulphonyl Halides,"[#6][Sv6X4](=[OX1])(=[OX1])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2127,2127,21,Alkyl Halides,"[CX4][F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2128,2128,21,Isocyanates,[NX2]=[CX2]=[OX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2129,2129,21,Isothiocyanates,[NX2]=[CX2]=[SX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2130,2130,21,Activated Halides,"[$(c([F,Cl,Br,I])c[$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$(c([F,Cl,Br,I])aac[$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$(c([F,Cl,Br,I])n),$(c([F,Cl,Br,I])aan)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2131,2131,21,Anhydrides,[CX3](=[OX1])[OX2][CX3](=[OX1]),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2132,2132,21,Aldehydes (including aminoformyl moieties),"[$([#1,#6][CX3]([H])=[OX1]),$([#7]([#1,#6])([#1,#6])[CX3H1]=[OX1])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2133,2133,21,Hydrazines,"[#1,#6][NX3]([#1,#6])[NX3]([#1,#6])[#1,#6]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2134,2134,21,Azides,"[$(*-[NX2-]-[NX2+]#[NX1]),$(*-[NX2]=[NX2+]=[NX1-]),$(*-[NX2]=[NX2+]=N)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2135,2135,21,Diazonium salts,"[$([CX3]=[NX2+]=N),$([CX3]=[NX2]=[NX1]),$([CX3]=[NX2+]=[NX1-]),$([#6-][NX2+]#[NX1]),$([CX3][NX2]#[NX1])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2136,2136,21,Quaternary salts (including N-oxides),"[$([NX4,$([NX4+])]([#1,#6])([#1,#6])([#1,#6])[#1,#6]),$([OX1-,OH1][#7X4+]([*])([*])([*])),$([OX1]=[#7X4v5]([*])([*])([*])),$([OX1]=[Nv5X3&!$([Nv5X3](=[OX1])=[OX1])](=[*])([*])),$([OX1-,OH1][#7X3+R](~[R])(~[R])),$([OX1]=[#7v5X3R](~[R])(~[R]))] ",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2137,2137,21,Nitrosos,[NX2]=[OX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2138,2138,21,Aziridines,[NX3]1[CX4][CX4]1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2139,2139,21,Epoxides,[OX2]1[CX4][CX4]1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2140,2140,21,Disulphides,[SX2][SX2],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2141,2141,21,Picrates,"c1([OH1,O-])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2142,2142,21,Perchlorates (periodates),"[$([Clv7X4](=[OX1])(=[OX1])(=[OX1])[OX2,O-]),$([Iv7X4](=[OX1])(=[OX1])(=[OX1])[OX2,O-])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2143,2143,21,Simple anilines and phenols,"[$(c1([NX3]([#1,#6])[#1,#6])ccccc1),$(c1([OH1])ccccc1)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2144,2144,21,"1,2-Dicarbonyls",[CX3R](=[OX1])[CX3R](=[OX1]),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2145,2145,21,Vinyl ketones (Michael acceptors),[CX3]([!R])([!R])=[CX3][CX3](=[OX1])[!$([OH1])!$([OX2][CH2])!$([NH2])!$([CX2]#[NX1])!a],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2146,2146,21,N-Acyl substituted azoheterocycles,nC(=O)[#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2147,2147,21,N-Oxides (six-membered rings),"[$([OX1-][#7+]1=,:[#6,#7]-,:[#6,#7]=,:[#6,#7]-,:[#6,#7]=,:[#6,#7]1),$([OX1]=[#7v5]1=,:[#6,#7]-,:[#6,#7]=,:[#6,#7]-,:[#6,#7]=,:[#6,#7]1)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2148,2148,21,Metals,[!#1;!#6;!#7;!#8;!#9;!#11;!#12;!#15;!#16;!#17;!#19;!#20;!#35;!#53],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds -2149,2149,22,Acid halides,"[F,Cl,Br][CX3](=[OX1])[#1,*&!$([OH1])&!$([SH1])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2150,2150,22,Acid azides,"[CX3](=[OX1])[$([NX2]=[NX2+]=[NX1-]),$(N=[NX2+]=N),$([NX2-]-[NX2+]#[NX1])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2151,2151,22,Sulphonyl halides,"[#6][Sv6X4](=[OX1])(=[OX1])[Cl,Br]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2152,2152,22,Sulphonyl azides,"[Sv6X4](=[OX1])(=[OX1])[$([NX2]=[NX2+]=[NX1-]),$([NX2]=[NX2+]=N)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2153,2153,22,Acid anhydrides,[CX3](=[OX1])[OX2][CX3](=[OX1]),Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2154,2154,22,Diacyl peroxides,[CX3](=[OX1])[OX2][OX2][CX3](=[OX1]),Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2155,2155,22,Phenyl esters,[cR1]1([OX2][CX3](=[OX1])[#6])[cR1][cR1][cR1][cR1][cR1]1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2156,2156,22,Isocyanates,[NX2]=[CX2]=[OX1],Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2157,2157,22,β-Lactams,[NX3]1[CX4][CX4][CX3]1(=[OX1]),Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2158,2158,22,Thioesters,[CX3](=[SX1])[SX2],Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2159,2159,22,Haloalkanes,"[CX4][Cl,Br,I]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2160,2160,22,Dialkylsulfates/ sulfonates,"[$([#6][OX2][Sv6X4](=[OX1])(=[OX1])[OX2][#6]),$([#6][Sv6X4](=[OX1])(=[OX1])[OX2][#6])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2161,2161,22,N-Trihalomethyl imides,"[CX3](=[OX1])[NX3]([CX4]([Cl,Br,I])([Cl,Br,I])[Cl,Br,I])[CX3](=[OX1])",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2162,2162,22,Halogen containing di- or tri-nitro aromatics,"[$([F,Cl,Br]c1c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])ccc1),$([F,Cl,Br]c1c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1),$([F,Cl,Br]c1c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])ccc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c1),$([F,Cl,Br]c1c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cccc1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])),$([F,Cl,Br]c1cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1),$([F,Cl,Br]c1cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c1),$([F,Cl,Br]c1c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1),$([F,Cl,Br]c1c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c1),$([F,Cl,Br]c1c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])ccc1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])),$([F,Cl,Br]c1cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c1),$([F,Cl,Br]c1cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])),$([F,Cl,Br]c1c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]))]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2163,2163,22,Quinones,"[$([#6X3]1=,:[#6X3]-,:[#6X3](=[OX1])-,:[#6X3]=,:[#6X3]-,:[#6X3]1(=[OX1])),$([#6X3]1(=[OX1])-,:[#6X3](=[OX1])-,:[#6X3]=,:[#6X3]-,:[#6X3]=,:[#6X3]1)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2164,2164,22,Hydroquinones and O-alkyl precursors,"[#1,CX4][OX2][cR1]1[cR1][cR1][cR1]([OX2][#1,CX4])[cR1][cR1]1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2165,2165,22,Catechols and O-alkyl precursors,"[#1,CX4][OX2][cR1]1[cR1]([OX2][#1,CX4])[cR1][cR1][cR1][cR1]1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2166,2166,22,"α, β-Unsaturated aldehydes, amides, esters and ketones","[$([CX3]([#6,$([NX3]([CX3]=[OX1])([#6])[#6]),$([OX2]([CX3]=[OX1])[#6]);!$([OH][CX3]=[OX1]);!$([O-][CX3]=[OX1])])(=[OX1])[CX3]([#6,#1])=[CX3]([!a])([!a])),$([CX3H1](=[OX1])[CX3]([#6,#1])=[CX3])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2167,2167,22,"Precursors of α, β-unsaturated aldehydes, amides, esters and ketones (1)","[$([CX4]([OX2])([OX2])([#6,#7,#8])[CX3]([#6,#1])=[CX3]([!a])([!a])),$([CX4H1]([OX2])([OX2])[CX3]([#6,#1])=[CX3])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2168,2168,22,"Precursors of α, β-unsaturated aldehydes, amides, esters and ketones (2)","[$([CX3]([#6,#7,#8;!$([OH])])(=[OX1])[CX4H1]([#1,#6])[CX4]([!a])([!a])([$([OX2][Sv6X4](=[OX1])(=[OX1])[OH]),$([OX2][Sv6X4](=[OX1])(=[OX1])[OX2][CH3]),$([OX2][Sv6X4](=[OX1])(=[OX1])[CH3]),$([OX2][Sv6X4](=[OX1])(=[OX1])[CF3]),$([OX2][Sv6X4](=[OX1])(=[OX1])c1ccc([CH3])cc1),I,Br,Cl])),$([CX3H1](=[OX1])[CX4H1]([#1,#6])[CX4]([$([OX2][Sv6X4](=[OX1])(=[OX1])[OH]),$([OX2][Sv6X4](=[OX1])(=[OX1])[OX2][CH3]),$([OX2][Sv6X4](=[OX1])(=[OX1])[CH3]),$([OX2][Sv6X4](=[OX1])(=[OX1])[CF3]),$([OX2][Sv6X4](=[OX1])(=[OX1])c1ccc([CH3])cc1),I,Br,Cl]))]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2169,2169,22,"1,3-Diketones","[CX4,a!r0][CX3](=[OX1])[CH2][CX3](=[OX1])[CX4,a!r0]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2170,2170,22,Aldehydes,"[CX3]([H])(=[OX1])[#1,CX4,a!r0]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2171,2171,22,Ketones,"[CX4,a!r0][CX3](=[OX1])[CX4,a!r0]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2172,2172,22,Formaldehyde donors,"[$([NX3][CH2][NX3]),$([NX3][CH2][OX2]),$([CX4]([F,Cl,Br,I])([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])[CH2][OH1])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2173,2173,22,Precursors of aldehydes and ketones,"[CX4]([OX2])([OX2])([CX4,a!r0])[CX4,a!r0]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2174,2174,22,Enol precursor of aldehydes and ketones,"[CX3]=[CX3]([#6,#1])[OX2]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2175,2175,22,Aromatic primary and secondary amines,"[a!r0][$([NX3H2]),$([NX3H1][CX4,a!r0])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2176,2176,22,N-Haloimides,"[CX3](=[OX1])[NX3]([Cl,Br])[CX3](=[OX1])",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2177,2177,22,N-Chloro-sulfonamides,[Sv6X4](=[OX1])(=[OX1])[NX3H1]Cl,Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2178,2178,22,Disullides,"[CX4,a!r0][SX2][SX2][CX4,a!r0]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2179,2179,22,Phenyl carbonates,"c1ccccc1[OX2][CX3](=[OX1])[OX2][CX4,a!r0]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2180,2180,22,Epoxides,[CX4]1[CX4][OX2]1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2181,2181,22,1.2-Dicarbonyls,"[CX4,a!r0][CX3](=[OX1])[CX3](=[OX1])[#1,CX4,a!r0]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2182,2182,22,Thiazolones,"[$([SX2]1[CX3]([CX4,a!r0])=[CX3]([CX4,a!r0])[CX3](=[OX1])[NX3]1([CX4,a!r0])),$([sX2]1[cX3]([CX4,a!r0])[cX3]([CX4,a!r0])[cX3](=[OX1])[nX3]1([CX4,a!r0]))]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2183,2183,22,"1, 2-Diamines","[CX4,a!r0][NX3H1][CX4][CX4][NX3H1][CX4,a!r0]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2184,2184,22,Amine precursor - aromatic azo compound,"[$([a!r0][NX2]=[NX2]c1c([$([NH2]),$([NX3H1][CX4]),$([NX3]([CX4])[CX4]),$([NX3H1][CX3](=[OX1])[CH3]),$([NX3H1][CX3](=[OX1])[CX4]),$([OH]),$([O-]),$([OX2][CX4]),$([CH3]),$([CH2][CH3]),$([CH]=[CH2])])cccc1),$([a!r0][NX2]=[NX2]c1ccc([$([NH2]),$([NX3H1][CX4]),$([NX3]([CX4])[CX4]),$([NX3H1][CX3](=[OX1])[CH3]),$([NX3H1][CX3](=[OX1])[CX4]),$([OH]),$([O-]),$([OX2][CX4]),$([CH3]),$([CH2][CH3]),$([CH]=[CH2])])cc1),$([a!r0][NX2]=[NX2]c1c([$([NH2]),$([NX3H1][CX4]),$([NX3]([CX4])[CX4]),$([NX3H1][CX3](=[OX1])[CH3]),$([NX3H1][CX3](=[OX1])[CX4]),$([OH]),$([O-]),$([OX2][CX4]),$([CH3]),$([CH2][CH3]),$([CH]=[CH2])])cc([$([NH2]),$([NX3H1][CX4]),$([NX3]([CX4])[CX4]),$([NX3H1][CX3](=[OX1])[CH3]),$([NX3H1][CX3](=[OX1])[CX4]),$([OH]),$([O-]),$([OX2][CX4]),$([CH3]),$([CH2][CH3]),$([CH]=[CH2])])cc1),$([a!r0][NX2]=[NX2]c1c([$([NH2]),$([NX3H1][CX4]),$([NX3]([CX4])[CX4]),$([NX3H1][CX3](=[OX1])[CH3]),$([NX3H1][CX3](=[OX1])[CX4]),$([OH]),$([O-]),$([OX2][CX4]),$([CH3]),$([CH2][CH3]),$([CH]=[CH2])])cc([$([NH2]),$([NX3H1][CX4]),$([NX3]([CX4])[CX4]),$([NX3H1][CX3](=[OX1])[CH3]),$([NX3H1][CX3](=[OX1])[CX4]),$([OH]),$([O-]),$([OX2][CX4]),$([CH3]),$([CH2][CH3]),$([CH]=[CH2])])cc1[$([NH2]),$([NX3H1][CX4]),$([NX3]([CX4])[CX4]),$([NX3H1][CX3](=[OX1])[CH3]),$([NX3H1][CX3](=[OX1])[CX4]),$([OH]),$([O-]),$([OX2][CX4]),$([CH3]),$([CH2][CH3]),$([CH]=[CH2])])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2185,2185,22,Quaternary ammonium cation,"[NX4+]([CX4,a!r0])([CX4,a!r0])([CX4,a!r0])[CX4,a!r0]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2186,2186,22,Activated N-heterocycle halides,"[$(n1c([F,Cl])ncnc1),$(n1c([F,Cl])ccnc1),$(n1c([F,Cl])nccc1)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2187,2187,22,"Activated halo-pyridines, quinolines, and isoquinolines","[$([cR1]1[cR1][cR1][cR1][cR2]2[nR1][cR1]([F,Cl])[cR1]([$([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CX3](=[OX1])[OX2][#1,#6]),$([Sv6X4](=[OX1])(=[OX1])[OH]),$([CX3](=[OX1])[#1,F,Cl,Br,I]),$([CX2]#[NX1]),$([CX4]([F,Cl])([F,Cl])[F,Cl]),$([CH2][OH]),$([CH2][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CH2][F,Cl])])[cR1][cR2]12),$([cR1]1[cR1][cR1][cR1][cR2]2[nR1][cR1][cR1]([$([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CX3](=[OX1])[OX2][#1,#6]),$([Sv6X4](=[OX1])(=[OX1])[OH]),$([CX3](=[OX1])[#1,F,Cl,Br,I]),$([CX2]#[NX1]),$([CX4]([F,Cl])([F,Cl])[F,Cl]),$([CH2][OH]),$([CH2][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CH2][F,Cl])])[cR1]([F,Cl])[cR2]12),$([cR1]1[cR1][cR1][cR1][cR2]2[cR1]([F,Cl])[nR1][cR1][cR1]([$([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CX3](=[OX1])[OX2][#1,#6]),$([Sv6X4](=[OX1])(=[OX1])[OH]),$([CX3](=[OX1])[#1,F,Cl,Br,I]),$([CX2]#[NX1]),$([CX4]([F,Cl])([F,Cl])[F,Cl]),$([CH2][OH]),$([CH2][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CH2][F,Cl])])[cR2]12),$([cR1]1[cR1][cR1][cR1][cR2]2[cR1][nR1][cR1]([F,Cl])[cR1]([$([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CX3](=[OX1])[OX2][#1,#6]),$([Sv6X4](=[OX1])(=[OX1])[OH]),$([CX3](=[OX1])[#1,F,Cl,Br,I]),$([CX2]#[NX1]),$([CX4]([F,Cl])([F,Cl])[F,Cl]),$([CH2][OH]),$([CH2][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CH2][F,Cl])])[cR2]12),$([nR1]1[cR1]([F,Cl])[cR1]([$([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CX3](=[OX1])[OX2][#1,#6]),$([Sv6X4](=[OX1])(=[OX1])[OH]),$([CX3](=[OX1])[#1,F,Cl,Br,I]),$([CX2]#[NX1]),$([CX4]([F,Cl])([F,Cl])[F,Cl]),$([CH2][OH]),$([CH2][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CH2][F,Cl])])[cR1][cR1][cR1]1),$([nR1]1[cR1][cR1]([$([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CX3](=[OX1])[OX2][#1,#6]),$([Sv6X4](=[OX1])(=[OX1])[OH]),$([CX3](=[OX1])[#1,F,Cl,Br,I]),$([CX2]#[NX1]),$([CX4]([F,Cl])([F,Cl])[F,Cl]),$([CH2][OH]),$([CH2][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CH2][F,Cl])])[cR1]([F,Cl])[cR1][cR1]1),$([nR1]1[cR1]([F,Cl])[cR1][cR1][cR1]([$([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CX3](=[OX1])[OX2][#1,#6]),$([Sv6X4](=[OX1])(=[OX1])[OH]),$([CX3](=[OX1])[#1,F,Cl,Br,I]),$([CX2]#[NX1]),$([CX4]([F,Cl])([F,Cl])[F,Cl]),$([CH2][OH]),$([CH2][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CH2][F,Cl])])[cR1]1),$([nR1]1[cR1][cR1][cR1]([F,Cl])[cR1]([$([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CX3](=[OX1])[OX2][#1,#6]),$([Sv6X4](=[OX1])(=[OX1])[OH]),$([CX3](=[OX1])[#1,F,Cl,Br,I]),$([CX2]#[NX1]),$([CX4]([F,Cl])([F,Cl])[F,Cl]),$([CH2][OH]),$([CH2][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CH2][F,Cl])])[cR1]1)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2188,2188,22,"Hydrazines, hydrazonium salts and precursors","[$([NX3H2][NX3]([#1,#6;!$([CX3](=[OX1])[#1,#6])])[#1,#6;!$([CX3](=[OX1])[#1,#6])]),$([NX4H2+]([#1,#6;!$([CX3](=[OX1])[#1,#6])])[NX3]([#1,#6;!$([CX3](=[OX1])[#1,#6])])[#1,#6;!$([CX3](=[OX1])[#1,#6])]),$([NX4H3+][NX4H2+][#1,#6;!$([CX3](=[OX1])[#1,#6])]),$([NX3!R]([#1,#6!R;!$([CX3](=[OX1])[#1,#6])])([#1,#6!R;!$([CX3](=[OX1])[#1,#6])])[NX2!R]=[CX3!R]([*!R])([*!R])),$([NX3!R]([#1,#6!R;!$([CX3](=[OX1])[#1,#6])])([#1,#6!R;!$([CX3](=[OX1])[#1,#6])])[NX3+!R]=[CX3!R]([*!R])([*!R]))]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2189,2189,22,Acid halides,"[F,Cl,Br][CX3](=[OX1])[#1,*&!$([OH1])&!$([SH1])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2190,2190,22,Aldehydes,"[CX3H1](=[OX1])[#1,#6]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2191,2191,22,Halonitrobenzenes,"[$([F,Cl][cR1]1[cR1]([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])[cR1][cR1]([F,Cl,$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),$([CX2]#[NX1]),$([CX3](=[OX1])([$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])),$([CX3](=[OX1])[OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])])[cR1][cR1]1),$([F,Cl][cR1]1[cR1]([F,Cl,$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),$([CX2]#[NX1]),$([CX3](=[OX1])([$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])),$([CX3](=[OX1])[OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])])[cR1][cR1]([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])[cR1][cR1]1)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2192,2192,22,Aromatic sulphuric acids and salts,"[a!r0][Sv4X3](=[OX1])[$([OH]),$([O-])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2193,2193,22,Acid anhydrides,"[$([CX3](=[OX1])[OX2][CX3](=[OX1])),$([CX3](=[OX1])[OX2][OX2][CX3](=[OX1]))]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2194,2194,22,Iso(thio)cyanates,"[NX2]=[CX2]=[OX1,SX1]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2195,2195,22,(Benzo)isothiazolinones,"[$([#7X3]1([#1,#6])-,:[#16X2]-,:[#6X3]([#1,a!r0,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])=,:[#6X3]([#1,a!r0,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])-,:[#6X3]1(=[OX1])),$([#6R1]1-,:[#6R1]=,:[#6R1]-,:[#6R1]=,:[#6R2]2-,:[#16X2]-,:[#7X3]([#1,#6])-,:[#6X3](=[OX1])-,:[#6X3]12)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2196,2196,22,β-Lactams,[NX3]1([#6])[CX4]([#6])[CX4]([#6])[CX3]1(=[OX1]),Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2197,2197,22,Epoxides,"[OX2]1[CX4]([#1,c,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])[CX4]1([#1,c,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])([CX4])",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2198,2198,22,Acid imides,"[NX3]1([#1,#6])[CX3](=[OX1])[CX3]([!R])=[CX3]([!R])[CX3]1(=[OX1])",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2199,2199,22,α-Carbonyl halogen compounds (α-halocarbonyls),"[$([CX4!H0]([Cl,Br])[CX3](=[OX1])[$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1),c]),$([CX4!H0]([Cl,Br])[CX3](=[OX1])[OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1),c]),$([CX4!H0]([Cl,Br])[CX3](=[OX1])[NX3]([#6])([#6])),$([CX4!H0]([Cl,Br])[CX3](=[OX1])[OX1-])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2200,2200,22,α-Haloalkanes,"[Cl,Br][CH2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1),c]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2201,2201,22,Activated N-heterocycles,"[$(n1c([F,Cl,$([CX2]#[NX1])])nccc1),$(n1cnccc1([F,Cl,$([CX2]#[NX1])])),$(n1cncnc1([F,Cl,$([CX2]#[NX1])]))]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2202,2202,22,Ortho-quinones and para-quinones,"[$([CX3]1(=[OX1])[CX3H1]=[CX3]([#1,#6,OH1,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])[CX3](=[OX1])[CX3]([#1,#6,OH1,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])=[CX3]1([#1,#6,OH1,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])),$([CX3]1(=[OX1])[CX3](=[OX1])[CX3]([#1,#6,OH1,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])=[CX3H1][CX3]([#1,#6,OH1,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])=[CX3]1([#1,#6,OH1,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])]))]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2203,2203,22,"Catechols, resorcinols, hydroquinones","[$(c1([OH])c([OH])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([#1])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c1([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])),$([$(c1([OH1])c([#1])c([OH1])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c1([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])),$(c1([OH1])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([OH1])c([#1])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c1([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])]))]),$(c1([OH1])c([#1])c([#1,#6,OH1,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([OH1])c([#1,#6,OH1,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c1([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])]))]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2204,2204,22,"Catechol, resorcinol and hydroquinone precursors"," [$(c1([OH])c([OX2][$([CH3]),$([CH2][CH3])])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([#1])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c1([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])),$(c1([OH])c([OX2][$([CH3]),$([CH2][CH3])])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([#1])c1([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])),$(c1([OH1])c([#1])c([OX2][$([CH3]),$([CH2][CH3])])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c1([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])),$(c1([OH1])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([OX2][$([CH3]),$([CH2][CH3])])c([#1])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c1([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])),$(c1([OH1])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([OX2][$([CH3]),$([CH2][CH3])])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c1([#1])),$(c1([OH1])c([#1])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([OX2][$([CH3]),$([CH2][CH3])])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c1([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])),$(c1([OH1])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([#1])c([OX2][$([CH3]),$([CH2][CH3])])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c1([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])]))]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2205,2205,22,Diamines,"[$([NX3]([#1])([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])[CH2][CH2][NX3]([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])),$([NX3]([#1])([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])[CH2][CH2][CH2][NX3]([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])),$([NX3]([#1])([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])[CH2][CH2][CH2][CH2][NX3]([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])),$([NX3]([#1])([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])[CH2][CH2][CH2][CH2][CH2][NX3]([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])),$([NX3]([#1])([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])[CH2][CH2][CH2][CH2][CH2][CH2][NX3]([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])),$([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)][$([NX3]1[CH2][CH2][NX3H1][CH2][CH2]1),$([NX3]1[CH2][NX3H1][CH2][CH2]1),$([NX3]1[CH2][NX3H1][CH2][CH2][CH2]1)])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2206,2206,22,Haloalkanes,"[$([Cl,Br,I][CH2][CX3]=[CX3]),$([Cl,Br,I][CH2][CX2]#[CX2]),$([Cl,Br,I][CH2][a!r0]),$([Cl,Br,I][CH2][CX3](=[OX1])[#6]),$([Cl,Br,I][CH2][CX3](=[OX1])[OX2]),$([Cl,Br,I][CH2][CX3](=[OX1])[NX3]),$([Cl,Br,I][CH2][CH2][NX3]),$([Cl,Br,I][CH2][CH2][OX2])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2207,2207,22,Dialkyl sulfonates,[CX4][Sv6X4](=[OX1])(=[OX1])[OX2][CX4],Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2208,2208,22,Dialkyl sulfates,[CX4][OX2][Sv6X4](=[OX1])(=[OX1])[OX2][CX4],Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2209,2209,22,Epoxides,[CX4]1([CX4])[OX2][CX4]1([CX4]),Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2210,2210,22,Activated aryl halides including appropriate heterocyclic rings,"[$([F,Cl,Br,I]c1c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1),$([F,Cl,Br,I]c1c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),$([CX2]#[NX1]),$(C(F)(F)F),$([Sv6X4](=[OX1])(=[OX1])[CH3])])cncc1),$([F,Cl,Br,I]c1ncc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),$([CX2]#[NX1]),$(C(F)(F)F),$([Sv6X4](=[OX1])(=[OX1])[CH3])])cc1),$([F,Cl,Br,I]c1ncccc1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),$([CX2]#[NX1]),$(C(F)(F)F),$([Sv6X4](=[OX1])(=[OX1])[CH3])])),$([F,Cl,Br,I]c1ncncc1),$([F,Cl,Br,I]c1ncncn1)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2211,2211,22,Acid halides,"[Br,Cl,F,I][CX3](=[OX1])[#1,*&!$([OH1])&!$([SH1])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2212,2212,22,Acid anhydrides,[CX3](=[OX1])[OX2][CX3](=[OX1]),Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2213,2213,22,Ring strained amides,[NX3H1]1[CX4][CX4][CX3]1(=[OX1]),Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2214,2214,22,Formaldehyde generators,"[$([NX3][CX4][NX3]),$([CX3](=[OX1])[NX3][CH2][OH1]),$([CX4]([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),F,Cl,Br,I,$([CX2]#[NX1]),$([CX4]([F,Cl])([F,Cl])[F,Cl]),$([CX3](=[OX1])[#1,F,Cl,Br,I])])[CH2][OH1])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2215,2215,22,Thioesters,[CX3](=[SX1])[SX2],Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2216,2216,22,Aldehydes and precursors,"[$([#1,#6;!$(C=C);!$(C#C)][CX3]([H])(=[OX1])),$([CX4;H1]([OX2])[OX2])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2217,2217,22,Quinones,"[$([#6X3]1=,:[#6X3]-,:[#6X3](=[OX1])[#6X3]=,:[#6X3]-,:[#6X3]1(=[OX1])),$([#6X3]1(=[OX1])-,:[#6X3](=[OX1])-,:[#6X3]=,:[#6X3]-,:[#6X3]=,:[#6X3]1)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2218,2218,22,"α, β-Unsaturated carbonyls","[CX3]=[CX3][CX3](=[OX1])[$([OX2]([CX3]=[OX1])[!#1]),$([#1][CX3]=[OX1]),$([NX3H2]([CX3]=[OX1])),$([NX3]([CX3]=[OX1])),$([CX4][CX3]=[OX1])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2219,2219,22,Hydroquinones,[OH1]c1ccc([OH1])cc1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2220,2220,22,Catechols,[OH1]c1c([OH1])cccc1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2221,2221,22,Resorcinols,[OH1]c1cc([OH1])ccc1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2222,2222,22,O-Alkyl hydroquinones precursors,[OH1]c1ccc([OX2][CX4])cc1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2223,2223,22,O-Alkyl resorcinols precursors,[OH1]c1cc([OX2][CX4])ccc1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2224,2224,22,O-Alkyl catechols precursors,[OH1]c1c([OX2][CX4])cccc1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2225,2225,22,"1,3-Diketones","[CX3](=[OX1])[CX4]([#1,CX4])([#1,CX4])[CX3](=[OX1])",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2226,2226,22,Thiols,[#16X2H1],Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2227,2227,22,Disulfides,*[#16X2][#16X2]*,Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2228,2228,22,Di- or polyhydroxy aromatic compounds and their precursors,"[$(c1([OH1])c([OH1])cccc1),$(c1([OH1])cc([OH1])ccc1),$(c1([OH1])ccc([OH1])cc1),$(c1([OH1])c([OH1])c([OH1])ccc1),$(c1([OH1])c([OH1])cc([OH1])cc1),$(c1([OH1])cc([OH1])cc([OH1])c1),$(c1([OH1])c([OH1])c([OH1])c([OH1])cc1),$(c1([OH1])c([OH1])c([OH1])cc([OH1])c1),$(c1([OH1])c([OH1])cc([OH1])c([OH1])c1),$(c1([OH1])c([OH1])c([OH1])c([OH1])c([OH1])c1),$(c1([OH1])c([OH1])c([OH1])c([OH1])c([OH1])c1([OH1]))]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2229,2229,22,Diacyl peroxides,[A][CX3](=[OX1])[OX2][OX2][CX3](=[OX1])[A],Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2230,2230,22,Diaryl peroxides,[a!r0][CX3](=[OX1])[OX2][OX2][CX3](=[OX1])[a!r0],Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2231,2231,22,Arylacyl peroxides,[a!r0][CX3](=[OX1])[OX2][OX2][CX3](=[OX1])[A],Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2232,2232,22,Haloamides,"[#6][CX3](=[OX1])[NX3]([F,Cl,Br,I])[#6]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2233,2233,22,Hydroperoxides and precursors,[#6][OX2][OX2][OH1],Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2234,2234,22,"1,2-Dihydroxy aromatic compounds",[OH1]aa[OH1],Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2235,2235,22,"1,4-Dihydroxy aromatic compounds",[OH1]aaaa[OH1],Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2236,2236,22,2 or 4-Hydroxysubstituted alkylphenyl ether,"[$(c1c([OX2][CX4])c([OH1])ccc1),$(c1c([OX2][CX4])ccc([OH1])c1)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2237,2237,22,Aromatic amines,"[a!r0][$([NX3H2]),$([NX3H1][#6])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2238,2238,22,Aromatic amines precursors,"[$([a!r0][NH1][CX3](=[OX1])),$(c1c([NX2]=[NX2][a!r0])ccc([$([NX3]([CX4])([CX4])),$([NX3H1][CX4]),$([NH2]),$([OH1])])c1)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2239,2239,22,Alkyl or aryl sylfonyl halides,"[CX4,a!r0][Sv6X4](=[OX1])(=[OX1])[F,Cl,Br,I]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2240,2240,22,Sulfonamides,"c1c([Sv6X4](=[OX1])(=[OX1])[NX3H1][$([#1]),$([CX4]),$([a!r0])])ccc([NX3H2])c1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2241,2241,22,Isocyanates,[NX2]=[CX2]=[OX1],Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2242,2242,22,Isothiocyanates,[NX2]=[CX2]=[SX1],Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2243,2243,22,Dithiocarbamates,[SX2][CX3](=[SX1])[NX3],Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2244,2244,22,Hydrazines,"[#6&!$([CX3]=[OX1,SX1,NX2])][NX3H1][NX3H2,$([NX3H1][#6&!$([CX3]=[OX1,SX1,NX2])])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2245,2245,22,Trinitroaromaric compounds,"[$(c1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])ccc1),$(c1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1),$(c1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c1)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2246,2246,22,Activated halo- or nitropyridines,"[$(c1([F,Cl,Br,I,$(N(=O)=O)])ncc([F,Cl,Br,I,$(N(=O)=O),$(C#N),$(C=O),$(C(F)(F)F),$(S=O)])cc1),$(c1([F,Cl,Br,I,$(N(=O)=O)])ncccc1([F,Cl,Br,I,$(N(=O)=O),$(C#N),$(C=O),$(C(F)(F)F),$(S=O)]))]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2247,2247,22,2-Halo- or 2-nitropyrimidines,"c1([F,Cl,Br,I,$(N(=O)=O)])ncccn1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2248,2248,22,4-Halo- or 4-nitropyrimidines,"c1([F,Cl,Br,I,$(N(=O)=O)])ncncc1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2249,2249,22,Activated 2-halo- or 2-nitropyrazines,"c1([F,Cl,Br,I,$(N(=O)=O)])ncc([F,Cl,Br,I,$(N(=O)=O),$(C#N),$(C=O),$(C(F)(F)F),$(S=O)])nc1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2250,2250,22,Halo- or nitro s-triazines,"c1nc([F,Cl,Br,I,$(N(=O)=O)])ncn1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2251,2251,22,Formaldehyde and thioformaldehyde,"[CH2]=[OX1,SX1]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2252,2252,22,Aliphatic aldehydes and thioaldehydes,"[CX4][CX3H1]=[OX1,SX1]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2253,2253,22,Aromatic aldehydes,[a][CX3H1]=[OX1],Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2254,2254,22,"α, β-Unsaturated carbonyl and thiocarbonyl compounds","C(C)(C)=CC=[OX1,SX1]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2255,2255,22,"α, β-Unsaturated ketones and thioketones","[C;!r5]([C;!r5])=[C;!r5][C;!r5](C)=[OX1,SX1;!r5]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2256,2256,22,α-Diketones and α-dithiones,"[#6]C(=[OX1,SX1])C(=[OX1,SX1])[#6]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2257,2257,22,"[#6]C(=[OX1,SX1])[CX4]C(=[OX1,SX1])[#6]","[#6]C(=[OX1,SX1])[CX4]C(=[OX1,SX1])[#6]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2258,2258,22,"C-Nitroso compounds, iso(thio)cyanates, (thio)cyanate esters","[#6][$([NX2]=O),$(N=C=O),$(OC#N),$(SC#N),$(N=C=S)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2259,2259,22,Primary alkyl amines,[CH2][NH2],Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2260,2260,22,Tertiary alkyl amines,[CH2][NX3]([CH3])[CH3],Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2261,2261,22,"α, β-Unsaturated alkoxy","[$(CC(C)=[CH][CH2][OH]),$(CC=C(C)[CH2][OH])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2262,2262,22,Three-membered heterocycles derivatives,"[CH,CH2,CH3;!$([CH2]CC=[O,S])]([F,Cl,Br,I,$(OS(=O)(=O)[#6,#1]),$(OS(=O)(=O)O[#6,#1])])[#6]1[O,N,SX2][#6]1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2263,2263,22,Lactones and their thio analogues,"C1C(=[O,S])[O,S][CH2,CH]1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2264,2264,22,Esters of aromatic and unsaturated alcohols and their thio analogues,"[$(C=C),$(C#C),a][CH2,CH][O,S][$([CH]=O),$([CH]=S),$(C(C)=O),$(C(C)=S)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2265,2265,22,Aryloxy (arylthio) containing unsaturated compounds,"[$(C=C),$(C#C),a][CH2,CH][O,S][a]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2266,2266,22,Aliphatic N-(thio)nitroso compounds,"[CH2,CH3][NX3][NX2]=[O,S]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2267,2267,22,Anthracene and anthracene-containing compounds,c1ccc2cc3ccccc3cc2c1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2268,2268,22,Phenanthrene and phenanthrene-containing compounds,c1ccc2c(c1)ccc3ccccc23,Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2269,2269,22,Activated alkene (Michael acceptor) (1),"[CH2,CH]=[CH][$(N(=[OX1])=[OX1]),$(C=O),$(C#N),$(S=O),$(C(=O)N),$(a)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2270,2270,22,Activated alkene (Michael acceptor) (2),"[CH2]=C[$(N(=[OX1])=[OX1]),$(C=O),$(C#N),$(S=O),$(C(=O)N),$(a)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2271,2271,22,Activated alkene (Michael acceptor),"aC=C[$(N(=[OX1])=[OX1]),$(C=O),$(C#N),$(S=O),$(C(=O)N),$(a)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2272,2272,22,Activated alkine,"C#C[$(N(=[OX1])=[OX1]),$(C=O),$(C#N),$(S=O),$(C(=O)N),$(a)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2273,2273,22,Activated conjugated dienes,"[CH2,CH]=[CH]C=C[$(N(=[OX1])=[OX1]),$(C=O),$(C#N),$(S=O),$(C(=O)N),$(a)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2274,2274,22,Alkenes containing a gem-dihalo-substituted terminal double bond,"C=C([F,Cl,Br,I])[F,Cl,Br,I]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2275,2275,22,Ortho-disubstituted benzenes,"c1c([O,NH2,NH])c([O,NH2,NH])ccc1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2276,2276,22,Para-disubstituted benzenes,"c1c(=[O,NH2,NH])ccc(=[O,NH2,NH])c1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2277,2277,22,"Isothiazolinone, isothiazolinthione and their derivatives","[#6]1=,:[#6]C(=[OX1,SX1])N[SX2]1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2278,2278,22,Acyl and thioacyl halides,"[!$(C=C);!$(C#C)]C(=[O,SX1])[F,Cl,Br,I]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2279,2279,22,Imidoyl halides,"[!$(C=C);!$(C#C)]C(=N)[F,Cl,Br,I]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2280,2280,22,Esters of aromatic alcohols and their thio and aza analogues,"[!$(C=C);!$(C#C)]C(=[O,SX1,N])[O,S,N][a]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2281,2281,22,Acid anhydrides and their thio and aza analogues,"[!$(C=C);!$(C#C)]C(=[O,SX1,N])[O,S,N]C(=[O,SX1,N])",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2282,2282,22,Esters of unsaturated alcohols and their thio and aza analogues,"[!$(C=C);!$(C#C)]C(=[O,S,N])[O,S][$(C=C),$(C=N),$(C#C),$(C#N)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2283,2283,22,"β-Lactones, β-lactams and their thio analogues","[#6]1C(=[O,S])[O,N,S][#6]1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2284,2284,22,Benzo-fused five-membered heterocycles,"[C,N,O,S,a]c1[n,o,s]c2ccccc2[n,o,s]1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2285,2285,22,(Thio)carbonyl and imine derivatives of five-membered heterocycles,"[#6]1[#6](=[N,O,S])[#7,#8,#16][#6][#7,#8,#16]1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2286,2286,22,Phthalic anhydrides and their thio and aza analogues,"[C,O]=[#6]1[#7,#8,#16][#6](=[O,N,SX1])c2ccccc12",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2287,2287,22,Acylating agents,"[!$(C=C);!$(C#C)]C(=[O,SX1,N])[O,S,N][CX4,O,S][$(C=O),a,$(C=C),$(C#C),$(C=N),$(C#N)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2288,2288,22,Heteryl-substituted benzenes,"C1=[C,N][$(S(=O)(=O)),$(C=[N,O]),$(S=O)][C,N]=C1c2ccccc2",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2289,2289,22,Cyclopentanone and cyclopentathione derivatives,"[CH2,CH]=C1C(=[OX1,SX1])**C1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2290,2290,22,"Ortho-substituted phenols, primary and secondary amines","c1c([OH,NH2,NH])c([OH,NH2,NH,$(N=N),$(N(C)C)])ccc1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2291,2291,22,"Para-substituted phenols, primary and secondary amines","c1c([OH,NH2,NH])ccc([OH,NH2,NH,$(N=N),$(N(C)C)])c1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2292,2292,22,"Meta-substituted phenols, primary and secondary amines","c1c([OH,NH2,NH])cc([OH,NH2,NH,$(N(C)C)])cc1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2293,2293,22,Ortho-hydroxysubstituted methyl phenyl ether,c1([OH])c(O[CH3])cccc1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2294,2294,22,Para-hydroxysubstituted methyl phenyl ether,c1([OH])ccc(O[CH3])cc1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2295,2295,22,Para-hydroxysubstituted iso-allyl benzene,c1c([OH])ccc(C=C[CH3])c1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2296,2296,22,Haloethyl-substituted aromatic compounds,"C([F,Cl,Br,I])[CH2,CH][a]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2297,2297,22,Para-hydroxysubstituted allylbenzene,c1([OH])ccc([CH2][CH]=[CH2])cc1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2298,2298,22,Para-methoxysubstituted allylbenzene,c1(O[CH3])ccc([CH2][CH]=[CH2])cc1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2299,2299,22,α-Naphthols,[OH]c1cccc2ccccc12,Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2300,2300,22,vic-Difluoroalkyl group,"F[CH2,CH]C(F)[$(N(=[OX1])=[OX1]),$(C=O),$(C#N),$(S=O),$(C(=O)N),$(a)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2301,2301,22,vic-Dichloroalkyl group,"Cl[CH2,CH]C(Cl)[$(N(=[OX1])=[OX1]),$(C=O),$(C#N),$(S=O),$(C(=O)N),$(a)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2302,2302,22,vic-Dibromoalkyl group,"Br[CH2,CH]C(Br)[$(N(=[OX1])=[OX1]),$(C=O),$(C#N),$(S=O),$(C(=O)N),$(a)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2303,2303,22,vic-Diiodoalkyl group,"I[CH2,CH]C(I)[$(N(=[OX1])=[OX1]),$(C=O),$(C#N),$(S=O),$(C(=O)N),$(a)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) -2304,2304,23,1_2_aminothiazole,"s1ccnc1[$([NX3H2&!R]),$([NX3H1&!R][c,C]),$([NX3&!R]([c,C])[c,C])]",Toxicophore,1,1,Litterature,General Toxicophores -2305,2305,23,1_2_dicarbonyl_oxalyl,"[$([CD3&!R][#6,#8,#7,F,Cl,I,Br]),$([CD3&!R][#1]),$([CD2&!R])](=[OD1&!R])[$([CD3&!R][#6,#8,#7,F,Cl,Br,I]),$([CD3&!R][#1]),$([CD2&!R])]=[OD1&!R]",Toxicophore,1,1,Litterature,General Toxicophores -2306,2306,23,1_2_thiazol_3_one,S1[NX3H1]C(=[OX1])C=C1,Toxicophore,1,1,Litterature,General Toxicophores -2307,2307,23,1_aminobenzotriazole,Nn1nnc2ccccc12,Toxicophore,1,1,Litterature,General Toxicophores -2308,2308,23,2_phenylbenzimidazole,c2ccc3nc(c4ccccc4)[nX3H1]c3c2,Toxicophore,1,1,Litterature,General Toxicophores -2309,2309,23,3_amino_9_ethylcarbazoles,CCN1C2=C(C=C(C=C2)N)C3=CC=CC=C31,Toxicophore,1,1,Litterature,General Toxicophores -2310,2310,23,3_methylindole,C1=C([CX4H3])c2ccccc2[NX3H1]1,Toxicophore,1,1,Litterature,General Toxicophores -2311,2311,23,4_subst_n_alkyltetrahydropyridines,[a]C1=CCN([A])CC1,Toxicophore,1,1,Litterature,General Toxicophores -2312,2312,23,4_vinyl_pyridine,c1cnccc1[CX3&!R]=[CX3&!R],Toxicophore,1,1,Litterature,General Toxicophores -2313,2313,23,6_membered_aromatic_sulfur,"[SD2]1[#7,#6]=CC(=[OX1&!R])C=[#7,#6]1",Toxicophore,1,1,Litterature,General Toxicophores -2314,2314,23,9_aminoacridine,c1cccc2c([NX3&!RH2])c3ccccc3nc12,Toxicophore,1,1,Litterature,General Toxicophores -2315,2315,23,acetal_1_in_ring,C1([SX2&!R][#6&!R])=NCCS1,Toxicophore,1,1,Litterature,General Toxicophores -2316,2316,23,acetal_both_in_ring,C1(=[NX2&!R][CX2&!R]#[NX1&!R])SCCS1,Toxicophore,1,1,Litterature,General Toxicophores -2317,2317,23,acetylene_alkyne,"[#1,#6]C#CC",Toxicophore,1,1,Litterature,General Toxicophores -2318,2318,23,acrylamide,"[$([NX3H2&!R]),$([NX3H1&!R][c,C]),$([NX3&!R]([c,C])[c,C])][CX3&!R](=[OX1])[CX3&!R]=[$([CX3H2&!R]),$([CX3H1&!R][c,C]),$([CX3H0&!R]([c,C])[c,C])]",Toxicophore,1,1,Litterature,General Toxicophores -2319,2319,23,acyclic_acetal,"[#6][OX2&!R][$([CX4&!RH2]),$([CX4&!RH1][#6]),$([CX4&!R]([#6])[#6])][OX2&!R][#6]",Toxicophore,1,1,Litterature,General Toxicophores -2320,2320,23,acyclic_acid_halide_acyl_halide,"*[CD3&!R]([F,Cl,I,Br])=[OX1]",Toxicophore,1,1,Litterature,General Toxicophores -2321,2321,23,acyclic_alkyne,[#6][CX2&!R]#[CX2&!R][#6],Toxicophore,1,1,Litterature,General Toxicophores -2322,2322,23,acyclic_ketone,[#6&!R][CD3&!R](=[OD1&!R])[#6&!R],Toxicophore,1,1,Litterature,General Toxicophores -2323,2323,23,acyl_amide,"[C,c][C;!R](=O)[N;!R][C;!R](=O)[C,c]",Toxicophore,1,1,Litterature,General Toxicophores -2324,2324,23,acyl_cyanides,[NX1]#[CX2&!R][CX3&!R](=[OX1])[#6],Toxicophore,1,1,Litterature,General Toxicophores -2325,2325,23,acyl_hydrazone_cyclic,[#6]=[NX2][NX3][CX3]=[OX1],Toxicophore,1,1,Litterature,General Toxicophores -2326,2326,23,acyl_isoamide_aromatic,n1coc(=[OX1])cc1,Toxicophore,1,1,Litterature,General Toxicophores -2327,2327,23,adamantane,C1C2CC3CC1CC(C2)C3,Toxicophore,1,1,Litterature,General Toxicophores -2328,2328,23,aldehyde,[*][CX3&!RH1]=[OD1],Toxicophore,1,1,Litterature,General Toxicophores -2329,2329,23,alkyl_halide_noF,"[CX4&!R][Br,I,Cl]",Toxicophore,1,1,Litterature,General Toxicophores -2330,2330,23,alkynes,"[#6][#6]#[#6][#6,#1]",Toxicophore,1,1,Litterature,General Toxicophores -2331,2331,23,alpha_haloamines,"[F,Cl,I,Br][#7]",Toxicophore,1,1,Litterature,General Toxicophores -2332,2332,23,alphahalo_ketone_carbonyl,"[#6][CD3&!c](=[OD1])[CX4&!c][Cl,Br,I,F]",Toxicophore,1,1,Litterature,General Toxicophores -2333,2333,23,anhydride,[OX1]=[CD3]([*])[OD2][CD3](=[OX1])[*],Toxicophore,1,1,Litterature,General Toxicophores -2334,2334,23,anthracene,a1aa2aa3aaaaa3aa2aa1,Toxicophore,1,1,Litterature,General Toxicophores -2335,2335,23,arylhydroxamic_acid,c[CX3](=O)[NX3H1][OX2H1],Toxicophore,1,1,Litterature,General Toxicophores -2336,2336,23,azide,"[$(N#[N+]-[N-]),$([N-]=[N+]=N)]",Toxicophore,1,1,Litterature,General Toxicophores -2337,2337,23,aziridine,"N1[$([CX4H2]),$([CX4H1][#6&!R]),$([CX4]([#6&!R])[#6&!R])][$([CX4H2]),$([CX4H1][#6&!R]),$([CX4]([#6&!R])[#6&!R])]1",Toxicophore,1,1,Litterature,General Toxicophores -2338,2338,23,azo,[#6][NX2]=[NX2][#6],Toxicophore,1,1,Litterature,General Toxicophores -2339,2339,23,azocyanamide,[N;R0]=[N;R0]C#N,Toxicophore,1,1,Litterature,General Toxicophores -2340,2340,23,benzodioxolane,[CX4H2]1Oc2ccccc2O1,Toxicophore,1,1,Litterature,General Toxicophores -2341,2341,23,beta_heterosubstituted_carbonyl,"[OD1&!R]=[$([CD3&!R]);!$([CD3&!R][#8])]CC([F,Br,I,Cl])",Toxicophore,1,1,Litterature,General Toxicophores -2342,2342,23,betalactams,[OX1&!R]=C1CCN1C,Toxicophore,1,1,Litterature,General Toxicophores -2343,2343,23,carbamate_thiocarbamate,"[NX3&!R][CX3&!R](=[OX1,SX1])[OX2&!R,#16&!R][#6]",Toxicophore,1,1,Litterature,General Toxicophores -2344,2344,23,carbamic_acid,"[$([NX4+]),$([ND1&!R]),$([NX3&!H2]),$([NX3&!RH1][#6]),$([NX3&!R]([#6])[#6])][CD3&!R](=[OD1&!R])[OX2&!RH1,OX1-]",Toxicophore,1,1,Litterature,General Toxicophores -2345,2345,23,carbazide,O=*N=[N+]=[N-],Toxicophore,1,1,Litterature,General Toxicophores -2346,2346,23,carbodiimide,[#6][NX2]=C=[NX2][#6],Toxicophore,1,1,Litterature,General Toxicophores -2347,2347,23,catechol,[OH]c1c([OH])cccc1,Toxicophore,1,1,Litterature,General Toxicophores -2348,2348,23,chloramidine,[Cl]C([C&R0])=N,Toxicophore,1,1,Litterature,General Toxicophores -2349,2349,23,coumarines,[OX1&!R]=c1ccc2ccccc2o1,Toxicophore,1,1,Litterature,General Toxicophores -2350,2350,23,crown_2_2,"C[#8,#7,#16]CC[#8,#7,#16]CC[#8,#7,#16]C",Toxicophore,1,1,Litterature,General Toxicophores -2351,2351,23,crown_2_3,"C[#8,#7,#16]CCC[#8,#7,#16]CC[#8,#7,#16]C",Toxicophore,1,1,Litterature,General Toxicophores -2352,2352,23,crown_3_3,"C[#8,#7,#16]CCC[#8,#7,#16]CCC[#8,#7,#16]C",Toxicophore,1,1,Litterature,General Toxicophores -2353,2353,23,cyanohydrins,[ND1&!R]#[CD2&!R][CX4&!R][OD2H1],Toxicophore,1,1,Litterature,General Toxicophores -2354,2354,23,cyanophosphonate,P(OC)(OC)(=O)C#N,Toxicophore,1,1,Litterature,General Toxicophores -2355,2355,23,cyclopropylamine,C1CC1[NX3&!R],Toxicophore,1,1,Litterature,General Toxicophores -2356,2356,23,diazonium,"[c,C][N+&!R]#[N&!R]",Toxicophore,1,1,Litterature,General Toxicophores -2357,2357,23,ellipticine,Cc1c2[nH]c3ccccc3c2c(C)c2cnccc12,Toxicophore,1,1,Litterature,General Toxicophores -2358,2358,23,enamine,[CX3]=[CX3&!R][NX3&!R],Toxicophore,1,1,Litterature,General Toxicophores -2359,2359,23,epoxide,[OX2r3]1[#6r3][#6r3]1,Toxicophore,1,1,Litterature,General Toxicophores -2360,2360,23,fmoc,c12c(cccc1)c1c([CX4H1]2CO[CX3H0](=[OX1]))cccc1,Toxicophore,1,1,Litterature,General Toxicophores -2361,2361,23,formic_acid_esters,[CX3H1&!R](=[OX1])[OX2&!R][#6],Toxicophore,1,1,Litterature,General Toxicophores -2362,2362,23,furan,c1ccco1,Toxicophore,1,1,Litterature,General Toxicophores -2363,2363,23,furocoumarines,[OX1&!R]=c1ccc2cc3ccoc3cc2o1,Toxicophore,1,1,Litterature,General Toxicophores -2364,2364,23,halo_alkene,"[Br,F,I,Cl][$([CX3&!R][#6]),$([CX3&!RH1])]=[$([CX3&!R]([#6])[#6]),$([CX3&!RH1][#6]),$([CX3&!RH2])]",Toxicophore,1,1,Litterature,General Toxicophores -2365,2365,23,halo_amine,"[CX4&!R][$([NX3&!RH1]),$([NX3&!R][#6])][Br,F,I,Cl]",Toxicophore,1,1,Litterature,General Toxicophores -2366,2366,23,halopyrimidine,"c1cnc([F,Cl,Br,I])nc1",Toxicophore,1,1,Litterature,General Toxicophores -2367,2367,23,hemiaminal,"[OX2&!RH1][$([CX4&!RH2]),$([CX4&!RH1][#6]),$([CX4&!R]([#6])[#6])][$([NX3&!RH2]),$([NX3&!RH1][#6]),$([NX3&!R]([#6])[#6])]",Toxicophore,1,1,Litterature,General Toxicophores -2368,2368,23,hemiketal,"[OX2&!RH1][$([CX4&!RH2]),$([CX4&!RH1][#6]),$([CX4&!R]([#6])[#6])][$([OX2&!RH1]),$([OX2&!R][#6])]",Toxicophore,1,1,Litterature,General Toxicophores -2369,2369,23,heteroatom_heteroatom_N_N,"[$([#6][NH1;!R]-[NH1;!R][#6]),$([#6][NH1;!R]-[N;!R]([#6])[#6]),$([#6][N;!R]([#6])-[N;!R]([#6])[#6])]",Toxicophore,1,1,Litterature,General Toxicophores -2370,2370,23,heteroatom_heteroatom_N_S,"[$([#6][NH1;!R]-[SD2;!R][#6]),$([#6][N;!R]([#6])-[SD2;!R][#6])]",Toxicophore,1,1,Litterature,General Toxicophores -2371,2371,23,heteroatom_heteroatom_O_N,"[$([#6][#8;!R][NH1;!R][#6]),$([#6][#8;!R][N;!R]([#6])[#6])]",Toxicophore,1,1,Litterature,General Toxicophores -2372,2372,23,heteroatom_heteroatom_S_O,[#6][SD2;!R]-[#8;!R][#6],Toxicophore,1,1,Litterature,General Toxicophores -2373,2373,23,heteroatom_heteroatom_S_S,[#6][SD2;!R][SD2;!R][#6],Toxicophore,1,1,Litterature,General Toxicophores -2374,2374,23,high_risk_aniline,[NX3H2&!R]c1ccccc1,Toxicophore,1,1,Litterature,General Toxicophores -2375,2375,23,hydantoin,[OX1]=C1[NX3H1]C(=[OX1])CN1,Toxicophore,1,1,Litterature,General Toxicophores -2376,2376,23,hydralazine,n1ncc2ccccc2c1([NX3&!RH1][NX3&!RH2]),Toxicophore,1,1,Litterature,General Toxicophores -2377,2377,23,hydrazide,[NX3&!R][NX3&!R][#6X3](=[OX1])[#6],Toxicophore,1,1,Litterature,General Toxicophores -2378,2378,23,hydrazine,[#6][NX3&!RH1][NX3&!RH2],Toxicophore,1,1,Litterature,General Toxicophores -2379,2379,23,hydrazone,[CX3&!R]=[NX2&!R][NX3&!R],Toxicophore,1,1,Litterature,General Toxicophores -2380,2380,23,hydroxamic_acid,"[CX3&!R;$([H0][#6])](=[OD1])[#7X3;$([H1])][OX2&!RH1,OX1-]",Toxicophore,1,1,Litterature,General Toxicophores -2381,2381,23,hydroxylamine,"[c,C;!$([#6]=[#8])][$([NX3&!RH1]),$([NX3&!R][#6])][OX2&!RH1]",Toxicophore,1,1,Litterature,General Toxicophores -2382,2382,23,imidazole,[#6]n1cncc1,Toxicophore,1,1,Litterature,General Toxicophores -2383,2383,23,imide,"[C,c][C;!R](=O)[N;!R][C;!R](=O)[C,c]",Toxicophore,1,1,Litterature,General Toxicophores -2384,2384,23,imidoyl_halide,"[$([CX3&!RH1]),$([CX3&!RH0][#6])](=[NX2&!R])[F,Br,I,Cl]",Toxicophore,1,1,Litterature,General Toxicophores -2385,2385,23,imine,[CX3]=[NX2!R],Toxicophore,1,1,Litterature,General Toxicophores -2386,2386,23,isocyanate,[OD1&!R]=[CD2&!R]=[ND2&!R][#6],Toxicophore,1,1,Litterature,General Toxicophores -2387,2387,23,isocyanide_isonitrile,[#6][#7+]#[#6-],Toxicophore,1,1,Litterature,General Toxicophores -2388,2388,23,isothiocyanate,[SD1&!R]=[CD2&!R]=[ND2&!R][#6],Toxicophore,1,1,Litterature,General Toxicophores -2389,2389,23,lawesson_reagent_derivative,[#6]P1(=S)SP(S1)(=S)[#6],Toxicophore,1,1,Litterature,General Toxicophores -2390,2390,23,maleimide,C1=CC(=[OX1])NC1=[OX1],Toxicophore,1,1,Litterature,General Toxicophores -2391,2391,23,masked_aniline,"[$([n]),$([#7H1]),$([#7H0;!$([NX3]=[O])])]c1ccccc1",Toxicophore,1,1,Litterature,General Toxicophores -2392,2392,23,meta_aminophenol,c1([NX3&!R])cc([OX2&!RH1])ccc1,Toxicophore,1,1,Litterature,General Toxicophores -2393,2393,23,michael_acceptors_double,"[#6]=[#6][$([#6]=[OX1&!R]),$([#6][#7&!R]),$([#6][#16!R])]",Toxicophore,1,1,Litterature,General Toxicophores -2394,2394,23,michael_acceptors_triple,"[#6]#[#6][$([#6]=[OX1&!R]),$([#6][#7&!R]),$([#6][#16!R])]",Toxicophore,1,1,Litterature,General Toxicophores -2395,2395,23,mustard_gas,[Cl]CCSCC[Cl],Toxicophore,1,1,Litterature,General Toxicophores -2396,2396,23,n_acylated_azoles,[#6][CX3&!R]([r5])=[OX1],Toxicophore,1,1,Litterature,General Toxicophores -2397,2397,23,n_oxide,C[N+]1(CCN(CC1)C2=C3C=CC=CC3=NC4=C(N2)C=C(C=C4)Cl)[O-],Toxicophore,1,1,Litterature,General Toxicophores -2398,2398,23,nitramine,"[$([NX3][NX3&!R](=O)=O),$([NX3][NX3+&!R](=O)[O-]),$([NX3][NX3+&!R]([O-])[O-])][!#8]",Toxicophore,1,1,Litterature,General Toxicophores -2399,2399,23,nitrile,[ND1&!R]#[CD2!R][#6],Toxicophore,1,1,Litterature,General Toxicophores -2400,2400,23,nitro,"[$([NX3&!R](=O)=O),$([NX3+&!R](=O)[O-]),$([NX3+&!R]([O-])[O-])]",Toxicophore,1,1,Litterature,General Toxicophores -2401,2401,23,nitrobenzene,"c1ccccc1[$([NX3&!R](=O)=O),$([NX3+&!R](=O)[O-]),$([NX3+&!R]([O-])[O-])]",Toxicophore,1,1,Litterature,General Toxicophores -2402,2402,23,nitroso,"[OD1&!R]=[$([ND2&!R][#6]),$([ND2&!R][NX3])]",Toxicophore,1,1,Litterature,General Toxicophores -2403,2403,23,o_thiocarbamate,[#6][OX2&!R][CX3&!R](=[SX1])[NX3&!R][#6],Toxicophore,1,1,Litterature,General Toxicophores -2404,2404,23,ortho_aminophenol,c1([NX3&!R])c([OX2&!RH1])cccc1,Toxicophore,1,1,Litterature,General Toxicophores -2405,2405,23,ortho_hydroxyanilines,"c1cccc([OX2&!RH1])c1[$([NX3&!RH2]),$([NX3&!RH1][#6]),$([NX3&!R]([#6])[#6])]",Toxicophore,1,1,Litterature,General Toxicophores -2406,2406,23,orthonitrophenyl_ester,"[#6][CX3&!R](=[OX1])[OX2&!R]c1ccc([$([NX3&!R](=O)=O),$([NX3+&!R](=O)[O-]),$([NX3+&!R]([O-])[O-])])cc1",Toxicophore,1,1,Litterature,General Toxicophores -2407,2407,23,orthoquinone,[OD1&!R]=C1C(=[OD1&!R])C=CC=C1,Toxicophore,1,1,Litterature,General Toxicophores -2408,2408,23,oxime,[CX3]=[NX2][OX2H1],Toxicophore,1,1,Litterature,General Toxicophores -2409,2409,23,oxonium,[O+],Toxicophore,1,1,Litterature,General Toxicophores -2410,2410,23,para_aminophenol,c1([NX3&!R])ccc([OX2&!RH1])cc1,Toxicophore,1,1,Litterature,General Toxicophores -2411,2411,23,para_hydroquinone,[OH]c1ccc([OH])cc1,Toxicophore,1,1,Litterature,General Toxicophores -2412,2412,23,para_hydroxyanilines,"c1cc([OX2&!RH1])ccc1[$([NX3&!RH2]),$([NX3&!RH1][#6]),$([NX3&!R]([#6])[#6])]",Toxicophore,1,1,Litterature,General Toxicophores -2413,2413,23,para_para_dihydroxybiphenyl,[OH]c1ccc(c2ccc([OH])cc2)cc1,Toxicophore,1,1,Litterature,General Toxicophores -2414,2414,23,para_para_dihydroxystilbene,[OH]c1ccc([#6&!R]=[#6&!R]c2ccc([OH])cc2)cc1,Toxicophore,1,1,Litterature,General Toxicophores -2415,2415,23,paranitrophenyl_ester,"C(=O)(C)Oc1ccc([$([NX3&!R](=O)=O),$([NX3+&!R](=O)[O-]),$([NX3+&!R]([O-])[O-])])cc1",Toxicophore,1,1,Litterature,General Toxicophores -2416,2416,23,pentafluorophen_ester,C(=O)(C)Oc1c(F)c(F)c(F)c(F)c1(F),Toxicophore,1,1,Litterature,General Toxicophores -2417,2417,23,perhaloketone,"[#6][CD3&!R](=[OD1&!R])[CD4&!R]([F,Br,I,Cl])([F,Br,I,Cl])[F,Br,I,Cl]",Toxicophore,1,1,Litterature,General Toxicophores -2418,2418,23,peroxide,[#6][#8][#8][#6],Toxicophore,1,1,Litterature,General Toxicophores -2419,2419,23,phenanthrene_het,c1cccc2c1c3c(cc2)cccc3,Toxicophore,1,1,Litterature,General Toxicophores -2420,2420,23,phenol,[OX2H]c1ccccc1,Toxicophore,1,1,Litterature,General Toxicophores -2421,2421,23,phosphorane,C=P,Toxicophore,1,1,Litterature,General Toxicophores -2422,2422,23,phosphoric_acid_or_ester,"[#6,#1][OX2&!R][PX4&!R](=[OX1])([OX2&!R][#6,#1])[OX2&!R][#6,#1]",Toxicophore,1,1,Litterature,General Toxicophores -2423,2423,23,polyenes,"[#6]=[CX3&!R][CX3&!R]=[$([CX3&!R][#6&!R]),$([CX3&!RH2])]",Toxicophore,1,1,Litterature,General Toxicophores -2424,2424,23,propiolactone,[OX1&!R]=C1OCC1,Toxicophore,1,1,Litterature,General Toxicophores -2425,2425,23,propiosultone,[OX1&!R]=[SX4]1(=[OX1&!R])OCCC1,Toxicophore,1,1,Litterature,General Toxicophores -2426,2426,23,pyrrole,c1ccnc1,Toxicophore,1,1,Litterature,General Toxicophores -2427,2427,23,quinone,"O=[#6]1[#6]:,=[#6][#6](=O)[#6]:,=[#6]1",Toxicophore,1,1,Litterature,General Toxicophores -2428,2428,23,s_thiocarbamate,[#6][SX2&!R][CX3&!R](=[OX1])[NX3&!R][#6],Toxicophore,1,1,Litterature,General Toxicophores -2429,2429,23,sulfonate_ester,"[#6][OD2&!R]S(=[OX1])(=[OX1])[#6,#1]",Toxicophore,1,1,Litterature,General Toxicophores -2430,2430,23,sulfone,"[$([#16X4&!R](=[OX1])(=[OX1])([#6])[#6]),$([#16X4+2&!R]([OX1-])([OX1-])([#6])[#6])]",Toxicophore,1,1,Litterature,General Toxicophores -2431,2431,23,sulfonic_acid,"[#6][SX4&!R](=[OX1])(=[OX1])[$([OX2H]),$([OX1-])]",Toxicophore,1,1,Litterature,General Toxicophores -2432,2432,23,sulfonic_acid_ester,"[#6][SX4&!R](=[OX1])(=[OX1])[$([OX2&!R][#6,#1]),$([OX1-])]",Toxicophore,1,1,Litterature,General Toxicophores -2433,2433,23,sulfonium,[SX3+],Toxicophore,1,1,Litterature,General Toxicophores -2434,2434,23,sulfonyl_cyanide,"[#6][SD4&!R,SD4+2&!R](=[OD1&!R])(=[OD1&!R])[CD2&!R]#[NX1]",Toxicophore,1,1,Litterature,General Toxicophores -2435,2435,23,sulfonyl_halide,"[#6][#16]([F,Cl,I,Br])(=[#8])=[#8]",Toxicophore,1,1,Litterature,General Toxicophores -2436,2436,23,sulfonyl_urea,[NX3H1][CX3](=[OX1])[NX3H1][SX4](=[OX1])=[OX1],Toxicophore,1,1,Litterature,General Toxicophores -2437,2437,23,sulfoxide,"[$([#16X3](=[OX1])([#6])[#6]),$([#16X3+]([OX1-])([#6])[#6])]",Toxicophore,1,1,Litterature,General Toxicophores -2438,2438,23,sulphanylamino,[#6][NX3H1][SX2H1],Toxicophore,1,1,Litterature,General Toxicophores -2439,2439,23,terminal_vinyl,[CX3H1&!R]=[CX3H2&!R],Toxicophore,1,1,Litterature,General Toxicophores -2440,2440,23,thiazole,s1ccnc1,Toxicophore,1,1,Litterature,General Toxicophores -2441,2441,23,thiazolidinedione,S1C(=[OX1])[NX3H1]C(=[OX1])C1,Toxicophore,1,1,Litterature,General Toxicophores -2442,2442,23,thioacetal,[#6][CX4&!R]([#16&!R][#6])[#16&!R][#6],Toxicophore,1,1,Litterature,General Toxicophores -2443,2443,23,thioamide,[#6][CX3&!R](=[SX1&!R])[NX3]([#6])[#6],Toxicophore,1,1,Litterature,General Toxicophores -2444,2444,23,thiocarbonyl_aromatic,"[C,c]=[SX1&!RH0]",Toxicophore,1,1,Litterature,General Toxicophores -2445,2445,23,thioester,"[OX1&!R]=[c,C][SX2]",Toxicophore,1,1,Litterature,General Toxicophores -2446,2446,23,thioic_acid,"[$([CX3]([OX2H1])=S),$([CX3]([SX2H1])=O),$([CX3]([SX2H1])=S)]",Toxicophore,1,1,Litterature,General Toxicophores -2447,2447,23,thioketone,[SD1&!R]=[#6],Toxicophore,1,1,Litterature,General Toxicophores -2448,2448,23,thiol,[#6][SX2H1&!R],Toxicophore,1,1,Litterature,General Toxicophores -2449,2449,23,thiophene,s1cccc1,Toxicophore,1,1,Litterature,General Toxicophores -2450,2450,23,thiourea,"[$([NX3&!RH2]),$([NX3&!RH1][#6]),$([NX3&!R]([#6])[#6])][CX3&!R](=[SX1&!R])[$([NX3&!RH2]),$([NX3&!RH1][#6]),$([NX3&!R]([#6])[#6])]",Toxicophore,1,1,Litterature,General Toxicophores -2451,2451,23,toxoflavins,CN1C2=NC(=O)N(C(=O)C2=NC=N1)C,Toxicophore,1,1,Litterature,General Toxicophores -2452,2452,23,triacyloxime,C(=O)N(C(=O))OC(=O),Toxicophore,1,1,Litterature,General Toxicophores -2453,2453,23,triazenes,[NX3&!R][NX2&!R]=[NX2&!R],Toxicophore,1,1,Litterature,General Toxicophores -2454,2454,23,triazine,"[$([ND1&!R]),$([NX3&!RH2]),$([NX3&!RH1][#6])][ND2&!R]=[$([ND1&!R]),$([NX2&!R][#6]),$([NX2&!RH1])]",Toxicophore,1,1,Litterature,General Toxicophores -2455,2455,23,triazole,[#6]n1cncn1,Toxicophore,1,1,Litterature,General Toxicophores -2456,2456,23,triflate,OS(=O)(=O)C(F)(F)F,Toxicophore,1,1,Litterature,General Toxicophores -2457,2457,23,triphenyl,c1ccccc1[CX4&!R](c1ccccc1)c1ccccc1,Toxicophore,1,1,Litterature,General Toxicophores +rule_id,rule_set,description,smarts,rule_set_name,priority,mincount,source,catalog_description +0,1,R1 Reactive alkyl halides,"[Br,Cl,I][CX4;CH,CH2]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +1,1,R2 Acid halides,"[S,C](=[O,S])[F,Br,Cl,I]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +2,1,R3 Carbazides,O=CN=[N+]=[N-],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +3,1,R4 Sulphate esters,"COS(=O)O[C,c]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +4,1,R5 Sulphonates,"COS(=O)(=O)[C,c]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +5,1,R6 Acid anhydrides,C(=O)OC(=O),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +6,1,R7 Peroxides,OO,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +7,1,R8 Pentafluorophenyl esters,C(=O)Oc1c(F)c(F)c(F)c(F)c1(F),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +8,1,R9 Paranitrophenyl esters,C(=O)Oc1ccc(N(=O)~[OX1])cc1,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +9,1,R10 esters of HOBT,C(=O)Onnn,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +10,1,R11 Isocyanates & Isothiocyanates,"N=C=[S,O]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +11,1,R12 Triflates,OS(=O)(=O)C(F)(F)F,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +12,1,R13 lawesson's reagent and derivatives,P(=S)(S)S,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +13,1,R14 phosphoramides,NP(=O)(N)N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +14,1,R15 Aromatic azides,cN=[N+]=[N-],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +15,1,R16 beta carbonyl quaternary Nitrogen,"C(=O)C[N+,n+]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +16,1,R17 acylhydrazide,[N;R0][N;R0]C(=O),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +17,1,"R18 Quaternary C, Cl, I, P or S","[C+,Cl+,I+,P+,S+]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +18,1,R19 Phosphoranes,C=P,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +19,1,R20 Chloramidines,[Cl]C([C&R0])=N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +20,1,R21 Nitroso,[N&D2](=O),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +21,1,R22 P/S Halides,"[P,S][Cl,Br,F,I]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +22,1,R23 Carbodiimide,N=C=N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +23,1,R24 Isonitrile,[N+]#[C-],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +24,1,R25 Triacyloximes,C(=O)N(C(=O))OC(=O),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +25,1,R26 Cyanohydrins,N#CC[OH],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +26,1,R27 Acyl cyanides,N#CC(=O),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +27,1,R28 Sulfonyl cyanides,S(=O)(=O)C#N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +28,1,R29 Cyanophosphonates,P(OCC)(OCC)(=O)C#N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +29,1,R30 Azocyanamides,[N;R0]=[N;R0]C#N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +30,1,R31 Azoalkanals,[N;R0]=[N;R0]CC=O,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +31,1,I1 Aliphatic methylene chains 7 or more long,[CD2;R0][CD2;R0][CD2;R0][CD2;R0][CD2;R0][CD2;R0][CD2;R0],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +32,1,I2 Compounds with 4 or more acidic groups,"[C,S,P](=O)[OH].[C,S,P](=O)[OH].[C,S,P](=O)[OH].[C,S,P](=O)[OH]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +33,1,I3 Crown ethers,[O;R1][C;R1][C;R1][O;R1][C;R1][C;R1][O;R1],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +34,1,I4 Disulphides,SS,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +35,1,I5 Thiols,[SH],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +36,1,"I6 Epoxides, Thioepoxides, Aziridines","C1[O,S,N]C1",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +37,1,"I7 2,4,5 trihydroxyphenyl",c([OH])c([OH])c([OH]),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +38,1,"I8 2,3,4 trihydroxyphenyl",c([OH])c([OH])cc([OH]),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +39,1,I9 Hydrazothiourea,N=NC(=S)N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +40,1,I10 Thiocyanate,SC#N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +41,1,I11 Benzylic quaternary Nitrogen,cC[N+],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +42,1,I12 Thioesters,"C[O,S;R0][C;R0](=S)",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +43,1,I13 Cyanamides,N[CH2]C#N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +44,1,I14 Four membered lactones,C1(=O)OCC1,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +45,1,I15 Di and Triphosphates,P(=O)([OH])OP(=O)[OH],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +46,1,I16 Betalactams,N1CCC1=O,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +47,1,N1 Quinones,O=C1[#6]~[#6]C(=O)[#6]~[#6]1,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +48,1,N2 Polyenes,C=CC=CC=CC=C,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +49,1,N3 Saponin derivatives,O1CCCCC1OC2CCC3CCCCC3C2,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +50,1,N4 Cytochalasin derivatives,O=C1NCC2CCCCC21,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +51,1,N5 Cycloheximide derivatives,O=C1CCCC(N1)=O,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +52,1,N6 Monensin derivatives,O1CCCCC1C2CCCO2,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +53,1,N7 Cyanidin derivatives,[OH]c1cc([OH])cc2=[O+]C(=C([OH])Cc21)c3cc([OH])c([OH])cc3,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +54,1,N8 Squalestatin derivatives,C12OCCC(O1)CC2,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +55,2,> 2 ester groups,"C(=O)O[C,H1].C(=O)O[C,H1].C(=O)O[C,H1]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +56,2,2-halo pyridine,"n1c([F,Cl,Br,I])cccc1",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +57,2,acid halide,"C(=O)[Cl,Br,I,F]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +58,2,acyclic C=C-O,C=[C!r]O,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +59,2,acyl cyanide,N#CC(=O),Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +60,2,acyl hydrazine,C(=O)N[NH2],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +61,2,aldehyde,[CH1](=O),Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +62,2,Aliphatic long chain,[R0;D2][R0;D2][R0;D2][R0;D2],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +63,2,alkyl halide,"[CX4][Cl,Br,I]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +64,2,amidotetrazole,c1nnnn1C=O,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +65,2,aniline,c1cc([NH2])ccc1,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +66,2,azepane,[CH2R2]1N[CH2R2][CH2R2][CH2R2][CH2R2][CH2R2]1,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +67,2,Azido group,N=[N+]=[N-],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +68,2,Azo group,N#N,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +69,2,azocane,[CH2R2]1N[CH2R2][CH2R2][CH2R2][CH2R2][CH2R2][CH2R2]1,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +70,2,benzidine,"[cR2]1[cR2][cR2]([Nv3X3,Nv4X4])[cR2][cR2][cR2]1[cR2]2[cR2][cR2][cR2]([Nv3X3,Nv4X4])[cR2][cR2]2",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +71,2,beta-keto/anhydride,"[C,c](=O)[CX4,CR0X3,O][C,c](=O)",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +72,2,biotin analogue,C12C(NC(N1)=O)CSC2,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +73,2,Carbocation/anion,"[C+,c+,C-,c-]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +74,2,catechol,"c1c([OH])c([OH,NH2,NH])ccc1",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +75,2,charged oxygen or sulfur atoms,"[O+,o+,S+,s+]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +76,2,chinone,"C1(=[O,N])C=CC(=[O,N])C=C1",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +77,2,chinone,"C1(=[O,N])C(=[O,N])C=CC=C1",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +78,2,conjugated nitrile group,C=[C!r]C#N,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +79,2,crown ether,"[OR2,NR2]@[CR2]@[CR2]@[OR2,NR2]@[CR2]@[CR2]@[OR2,NR2]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +80,2,cumarine,c1ccc2c(c1)ccc(=O)o2,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +81,2,cyanamide,N[CH2]C#N,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +82,2,cyanate/aminonitrile/thiocyanate,"[N,O,S]C#N",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +83,2,cyanohydrins,N#CC[OH],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +84,2,cycloheptane,[CR2]1[CR2][CR2][CR2][CR2][CR2][CR2]1,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +85,2,cycloheptane,[CR2]1[CR2][CR2]cc[CR2][CR2]1,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +86,2,cyclooctane,[CR2]1[CR2][CR2][CR2][CR2][CR2][CR2][CR2]1,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +87,2,cyclooctane,[CR2]1[CR2][CR2]cc[CR2][CR2][CR2]1,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +88,2,diaminobenzene,"[cR2]1[cR2]c([N+0X3R0,nX3R0])c([N+0X3R0,nX3R0])[cR2][cR2]1",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +89,2,diaminobenzene,"[cR2]1[cR2]c([N+0X3R0,nX3R0])[cR2]c([N+0X3R0,nX3R0])[cR2]1",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +90,2,diaminobenzene,"[cR2]1[cR2]c([N+0X3R0,nX3R0])[cR2][cR2]c1([N+0X3R0,nX3R0])",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +91,2,diazo group,[N!R]=[N!R],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +92,2,diketo group,"[C,c](=O)[C,c](=O)",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +93,2,disulphide,SS,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +94,2,enamine,[CX2R0][NX3R0],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +95,2,ester of HOBT,C(=O)Onnn,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +96,2,four member lactones,C1(=O)OCC1,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +97,2,halogenated ring,"c1cc([Cl,Br,I,F])cc([Cl,Br,I,F])c1[Cl,Br,I,F]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +98,2,halogenated ring,"c1ccc([Cl,Br,I,F])c([Cl,Br,I,F])c1[Cl,Br,I,F]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +99,2,heavy metal,"[Hg,Fe,As,Sb,Zn,Se,se,Te,B,Si]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +100,2,het-C-het not in ring,"[NX3R0,NX4R0,OR0,SX2R0][CX4][NX3R0,NX4R0,OR0,SX2R0]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +101,2,hydantoin,C1NC(=O)NC(=O)1,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +102,2,hydrazine,N[NH2],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +103,2,hydroquinone,"[OH]c1ccc([OH,NH2,NH])cc1",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +104,2,hydroxamic acid,C(=O)N[OH],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +105,2,imine,C=[N!R],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +106,2,imine,"N=[CR0][N,n,O,S]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +107,2,iodine,I,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +108,2,isocyanate,N=C=O,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +109,2,isolated alkene,"[$([CH2]),$([CH][CX4]),$(C([CX4])[CX4])]=[$([CH2]),$([CH][CX4]),$(C([CX4])[CX4])]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +110,2,ketene,C=C=O,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +111,2,"methylidene-1,3-dithiole",S1C=CSC1=S,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +112,2,Michael acceptor,"C=!@CC=[O,S]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +113,2,Michael acceptor,"[$([CH]),$(CC)]#CC(=O)[C,c]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +114,2,Michael acceptor,"[$([CH]),$(CC)]#CS(=O)(=O)[C,c]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +115,2,Michael acceptor,C=C(C=O)C=O,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +116,2,Michael acceptor,"[$([CH]),$(CC)]#CC(=O)O[C,c]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +117,2,N oxide,"[NX2,nX3][OX1]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +118,2,"N-acyl-2-amino-5-mercapto-1,3,4-thiadiazole",s1c(S)nnc1NC=O,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +119,2,N-C-halo,"NC[F,Cl,Br,I]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +120,2,N-halo,"[NX3,NX4][F,Cl,Br,I]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +121,2,N-hydroxyl pyridine,n[OH],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +122,2,nitro group,[N+](=O)[O-],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +123,2,N-nitroso,[#7]-N=O,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +124,2,oxime,"[C,c]=N[OH]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +125,2,oxime,"[C,c]=NOC=O",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +126,2,Oxygen-nitrogen single bond,"[OR0,NR0][OR0,NR0]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +127,2,perfluorinated chain,[CX4](F)(F)[CX4](F)F,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +128,2,peroxide,OO,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +129,2,phenol ester,c1ccccc1OC(=O)[#6],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +130,2,phenyl carbonate,c1ccccc1OC(=O)O,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +131,2,phosphor,P,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +132,2,phthalimide,"[cR,CR]~C(=O)NC(=O)~[cR,CR]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +133,2,Polycyclic aromatic hydrocarbon,a1aa2a3a(a1)A=AA=A3=AA=A2,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +134,2,Polycyclic aromatic hydrocarbon,a21aa3a(aa1aaaa2)aaaa3,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +135,2,Polycyclic aromatic hydrocarbon,a31a(a2a(aa1)aaaa2)aaaa3,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +136,2,polyene,[CR0]=[CR0][CR0]=[CR0],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +137,2,quaternary nitrogen,"[s,S,c,C,n,N,o,O]~[nX3+,NX3+](~[s,S,c,C,n,N])~[s,S,c,C,n,N]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +138,2,quaternary nitrogen,"[s,S,c,C,n,N,o,O]~[n+,N+](~[s,S,c,C,n,N,o,O])(~[s,S,c,C,n,N,o,O])~[s,S,c,C,n,N,o,O]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +139,2,quaternary nitrogen,[*]=[N+]=[*],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +140,2,saponine derivative,O1CCCCC1OC2CCC3CCCCC3C2,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +141,2,silicon halogen,"[Si][F,Cl,Br,I]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +142,2,stilbene,c1ccccc1C=Cc2ccccc2,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +143,2,sulfinic acid,"[SX3](=O)[O-,OH]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +144,2,Sulfonic acid,"[C,c]S(=O)(=O)O[C,c]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +145,2,Sulfonic acid,"S(=O)(=O)[O-,OH]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +146,2,sulfonyl cyanide,S(=O)(=O)C#N,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +147,2,sulfur oxygen single bond,[SX2]O,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +148,2,sulphate,OS(=O)(=O)[O-],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +149,2,Sulphur-nitrogen single bond,[SX2H0][N],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +150,2,Thiobenzothiazole,c12ccccc1(SC(S)=N2),Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +151,2,thiobenzothiazole,c12ccccc1(SC(=S)N2),Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +152,2,Thiocarbonyl group,"[C,c]=S",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +153,2,thioester,SC=O,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +154,2,thiol,[S-],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +155,2,thiol,[SH],Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +156,2,Three-membered heterocycle,"*1[O,S,N]*1",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +157,2,triflate,OS(=O)(=O)C(F)(F)F,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +158,2,triphenyl methylsilyl,"[SiR0,CR0](c1ccccc1)(c2ccccc2)(c3ccccc3)",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +159,2,triple bond,C#C,Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters +160,3,2halo_pyrazine_3EWG,"[#7;R1]1[#6]([F,Cl,Br,I])[#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])[#7][#6][#6]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +161,3,2halo_pyrazine_5EWG,"[#7;R1]1[#6]([F,Cl,Br,I])[#6;!$(c-N)][#7][#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])[#6;!$(c-N)]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +162,3,2halo_pyridazine_3EWG,"[#7;R1]1[#6]([F,Cl,Br,I])[#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])[#6][#6][#7]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +163,3,2halo_pyridazine_5EWG,"[#7;R1]1[#6]([F,Cl,Br,I])[#6][#6][#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])[#7]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +164,3,2halo_pyridine_3EWG,"[#7;R1]1[#6;!$(c=O)]([F,Cl,Br,I])[#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])[#6;!$(c-N)][#6][#6;!$(c-N)]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +165,3,2halo_pyridine_5EWG,"[#7;R1]1[#6;!$(c=O)]([F,Cl,Br,I])[#6][#6;!$(c-N)][#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])[#6;!$(c=O);!$(c-N)]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +166,3,2halo_pyrimidine_5EWG,"[#7;R1]1[#6]([F,Cl,Br,I])[#7][#6][#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])[#6]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +167,3,3halo_pyridazine_2EWG,"[#7;R1]1[#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])[#6]([F,Cl,Br,I])[#6][#6][#7]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +168,3,3halo_pyridazine_4EWG,"[#7;R1]1[#6][#6]([F,Cl,Br,I])[#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])[#6][#7]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +169,3,4_pyridone_3_5_EWG,"[#7,#8,#16]1~[#6;H]~[#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])~[#6](=O)~[#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])~[#6;H]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +170,3,4halo_pyridine_3EWG,"[#7;R1]1[#6;!$(c=O);!$(c-N)][#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])[#6]([F,Cl,Br,I])[#6][#6;!$(c=O);!$(c-N)]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +171,3,4halo_pyrimidine_2_6EWG,"[#7]1[#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])[#7;R1][#6]([F,Cl,Br,I])[#6][#6]1([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +172,3,4halo_pyrimidine_5EWG,"[#7]1[#6][#7;R1][#6]([F,Cl,Br,I])[#6]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])[#6]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +173,3,CH2_S#O_3_ring,"[CH2]1[O,S]C1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +174,3,HOBT_ester,"O=C(-[!N])O[$(nnn),$([#7]-[#7]=[#7])]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +175,3,NO_phosphonate,P(=O)ON,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +176,3,acrylate,[CH2]=[C;!$(C-N);!$(C-O)]C(=O),BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +177,3,activated_4mem_ring,"[#6]1~[$(C(=O)),$(S(=O))]~[O,S,N]~[$(C(=O)),$(S(=O))]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +178,3,activated_S#O_3_ring,"C1~[O,S]~[C,N,O,S]1[a,N,O,S]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +179,3,activated_acetylene,"[$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O))]C#[C;!$(C-N);!$(C-n)]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +180,3,activated_diazo,"[N;!R]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O))])=[N;!R]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O))])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +181,3,activated_vinyl_ester,"O=COC=[$(C(S(=O)(=O))),$(C(C(F)(F)(F))),$(C(C#N)),$(C(N(=O)(=O))),$(C([N+](=O)[O-])),$(C(C(=O)));!$(C(N))]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +182,3,activated_vinyl_sulfonate,"O(-S(=O)(=O))C=[$(C(S(=O)(=O))),$(C(C(F)(F)(F))),$(C(C#N)),$(C(N(=O)(=O))),$(C([N+](=O)[O-])),$(C(C(=O)));!$(C(N))]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +183,3,acyclic_imide,"[C,c][C;!R](=O)[N;!R][C;!R](=O)[C,c]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +184,3,acyl_123_triazole,[#7;R1]1~[#7;R1]~[#7;R1](-C(=O))~[#6]~[#6]1,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +185,3,acyl_134_triazole,[#7]1~[#7]~[#6]~[#7](-C(=O)[!N])~[#6]1,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +186,3,acyl_activated_NO,"O=C(-[!N])O[$([#7;+]),$(N(C=[O,S,N])(C=[O,S,N]))]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +187,3,acyl_cyanide,C(=O)-C#N,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +188,3,acyl_imidazole,"[C;!$(C-N)](=O)[#7]1[#6;H1,$([#6]([*;!R]))][#7][#6;H1,$([#6]([*;!R]))][#6;H1,$([#6]([*;!R]))]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +189,3,acyl_pyrazole,"[C;!$(C-N)](=O)[#7]1[#7][#6;H1,$([#6]([*;!R]))][#6;H1,$([#6]([*;!R]))][#6;H1,$([#6]([*;!R]))]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +190,3,aldehyde,"[C,c][C;H1](=O)",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +191,3,alpha_dicarbonyl,C(=O)!@C(=O),BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +192,3,alpha_halo_EWG,"[$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-])]-[CH,CH2]-[Cl,Br,I,$(O(S(=O)(=O)))]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +193,3,alpha_halo_amine,"[F,Cl,Br,I,$(O(S(=O)(=O)))]-[CH,CH2;!$(C(F)F)]-[N,n]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +194,3,alpha_halo_carbonyl,"C(=O)([CH,CH2][Cl,Br,I,$(O(S(=O)(=O)))])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +195,3,alpha_halo_heteroatom,"[N,n,O,S;!$(S(=O)(=O))]-[CH,CH2;!$(C(F)(F))][F,Cl,Br,I,$(O(S(=O)(=O)))]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +196,3,alpha_halo_heteroatom_tert,"[N,n,O,S;!$(S(=O)(=O))]-C([Cl,Br,I,$(O(S(=O)(=O)))])(C)(C)",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +197,3,anhydride,"[$(C(=O)),$(C(=S))]-[O,S]-[$(C(=O)),$(C(=S)),$(C(=[N;!R])),$(C(=N(-[C;X4])))]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +198,3,aryl_phosphonate,P(=O)-[O;!R]-a,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +199,3,aryl_thiocarbonyl,a-[S;X2;!R]-[C;!R](=O),BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +200,3,azide,"[$(N#[N+]-[N-]),$([N-]=[N+]=N)]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +201,3,aziridine_diazirine,"[C,N]1~[C,N]~N~1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +202,3,azo_amino,[N]=[N;!R]-[N],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +203,3,azo_aryl,c[N;!R;!+]=[N;!R;!+]-c,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +204,3,azo_filter1,[N;!R]=[N;!R]-[N]=[*],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +205,3,azo_filter2,[N;!$(N-S(=O)(=O));!$(N-C=O)]-[N;!r3;!$(N-S(=O)(=O));!$(N-C=O)]-[N;!$(N-S(=O)(=O));!$(N-C=O)],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +206,3,azo_filter3,[N;!R]-[N;!R]-[N;!R],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +207,3,azo_filter4,a-N=N-[N;H2],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +208,3,bad_boron,"[B-,BH2,BH3,$(B(F)(F))]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +209,3,bad_cations,"[C+,F+,Cl+,Br+,I+,Se+]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +210,3,benzidine_like,c([N;!+])1ccc(c2ccc([N;!+])cc2)cc1,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +211,3,beta_lactone,"[#6,#15,#16]1(=O)~[#6]~[#6]~[#8,#16]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +212,3,betalactam,C1(=O)~[#6]~[#6]N1,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +213,3,betalactam_EWG,"C1(=O)~[#6]~[#6]N1([$(S(=O)(=O)[C,c,O&D2]),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)[C,c,O&D2])])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +214,3,bis_activated_aryl_ester,"O=[C,S]Oc1aaa([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])aa([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +215,3,bis_keto_olefin,"CC(=O)[$([C&H1]),$(C-F),$(C-Cl),$(C-Br),$(C-I)]=[$([C&H1]),$(C-F),$(C-Cl),$(C-Br),$(C-I)]C(=O)C",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +216,3,boron_warhead,"[C,c]~[#5]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +217,3,branched_polycyclic_aromatic,a1(a2aa(a3aaaaa3)aa(a4aaaaa4)a2)aaaaa1,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +218,3,carbodiimide_iso#thio#cyanate,"N=C=[N,O,S]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +219,3,carbonyl_halide,"O=C[F,Cl,Br,I]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +220,3,contains_metal,"[$([Ru]),$([Rh]),$([Se]),$([se]),$([Pd]),$([Sc]),$([Bi]),$([Sb]),$([Ag]),$([Ti]),$([Al]),$([Cd]),$([V]),$([In]),$([Cr]),$([Sn]),$([Mn]),$([La]),$([Fe]),$([Er]),$([Tm]),$([Yb]),$([Lu]),$([Hf]),$([Ta]),$([W]),$([Re]),$([Co]),$([Os]),$([Ni]),$([Ir]),$([Cu]),$([Zn]),$([Ga]),$([Ge]),$([As]),$([as]),$([Y]),$([Zr]),$([Nb]),$([Ce]),$([Pr]),$([Nd]),$([Sm]),$([Eu]),$([Gd]),$([Tb]),$([Dy]),$([Ho]),$([Pt]),$([Au]),$([Hg]),$([Tl]),$([Pb]),$([Ac]),$([Th]),$([Pa]),$([Mo]),$([U]),$([Tc]),$([Te]),$([Po]),$([At])]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +221,3,crown_ether,"[$([O,S,#7;R1;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][O,S,#7;R1;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][O,S,#7;R1;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18]),$([O,S,#7;R1;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][O,S,#7;R1;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][O,S,#7;R1;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18]),$([O,S,#7;R1;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][O,S,#7;R1;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][CH,CH2;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18][O,S,#7;R1;r9,r10,r11,r12,r13,r14,r15,r16,r17,r18])]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +222,3,cyano_phosphonate,"P(O[A,a])(O[A,a])(=O)C#N",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +223,3,cyanohydrin,"[C;X4](-[OH,NH1,NH2,SH])(-C#N)",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +224,3,diamino_sulfide,"[N,n]~[S;!R;D2]~[N,n]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +225,3,diazo_carbonyl,"[$(N=N=C~C=O),$(N#N-C~C=O)]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +226,3,diazonium,a[N+]#N,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +227,3,dicarbonyl_sulfonamide,"[$(N(-C(=O))(-C(=O))(-S(=O))),$(n([#6](=O))([#6](=O))([#16](=O)))]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +228,3,disulfide_acyclic,[S;!R;X2]-[S;!R;X2],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +229,3,disulfonyliminoquinone,S(=O)(=O)N=C1C=CC(=NS(=O)(=O))C=C1,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +230,3,double_trouble_warhead,NC(C[S;D1])C([N;H1]([O;D1]))=O,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +231,3,flavanoid,O=C2CC(a3aaaaa3)Oa1aaaaa12,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +232,3,four_nitriles,C#N.C#N.C#N.C#N,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +233,3,gte_10_carbon_sb_chain,[C;!R]-[C;!R]-[C;!R]-[C;!R]-[C;!R]-[C;!R]-[C;!R]-[C;!R]-[C;!R]-[C;!R],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +234,3,gte_2_N_quats,"[N,n;H0;+;!$(N~O);!$(n~O)].[N,n;H0;+;!$(N~O);!$(n~O)]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +235,3,gte_2_free_phos,P([O;D1])=O.P([O;D1])=O,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +236,3,gte_2_sulfonic_acid,"[C,c]S(=O)(=O)[O;D1].[C,c]S(=O)(=O)[O;D1]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +237,3,gte_3_COOH,C(=O)[O;D1].C(=O)[O;D1].C(=O)[O;D1],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +238,3,gte_3_iodine,[#53].[#53].[#53],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +239,3,gte_4_basic_N,"[N;!$(N(=[N,O,S,C]));!$(N(S(=O)(=O)));!$(N(C(F)(F)(F)));!$(N(C#N));!$(N(C(=O)));!$(N(C(=S)));!$(N(C(=N)));!$(N(#C));!$(Nc)].[N;!$(N(=[N,O,S,C]));!$(N(S(=O)(=O)));!$(N(C(F)(F)(F)));!$(N(C#N));!$(N(C(=O)));!$(N(C(=S)));!$(N(C(=N)));!$(N(#C));!$(Nc)].[N;!$(N(=[N,O,S,C]));!$(N(S(=O)(=O)));!$(N(C(F)(F)(F)));!$(N(C#N));!$(N(C(=O)));!$(N(C(=S)));!$(N(C(=N)));!$(N(#C));!$(Nc)].[N;!$(N(=[N,O,S,C]));!$(N(S(=O)(=O)));!$(N(C(F)(F)(F)));!$(N(C#N));!$(N(C(=O)));!$(N(C(=S)));!$(N(C(=N)));!$(N(#C));!$(N-c)]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +240,3,gte_4_nitro,"[$([N+](=O)[O-]),$(N(=O)=O)].[$([N+](=O)[O-]),$(N(=O)=O)].[$([N+](=O)[O-]),$(N(=O)=O)].[$([N+](=O)[O-]),$(N(=O)=O)]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +241,3,gte_5_phenolic_OH,a[O;D1].a[O;D1].a[O;D1].a[O;D1].a[O;D1],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +242,3,gte_7_aliphatic_OH,C[O;D1].C[O;D1].C[O;D1].C[O;D1].C[O;D1].C[O;D1].C[O;D1],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +243,3,gte_7_total_hal,"[Cl,Br,I].[Cl,Br,I].[Cl,Br,I].[Cl,Br,I].[Cl,Br,I].[Cl,Br,I].[Cl,Br,I]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +244,3,gte_8_CF2_or_CH2,"[CH2,$(C(F)(F));R0][CH2,$(C(F)(F));R0][CH2,$(C(F)(F));R0][CH2,$(C(F)(F));R0][CH2,$(C(F)(F));R0][CH2,$(C(F)(F));R0][CH2,$(C(F)(F));R0][CH2,$(C(F)(F));R0]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +245,3,halo_5heterocycle_bis_EWG,"[#7,#8,#16]1[#6]([$(S(=O)(=O)),$([F,Cl]),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O))])[#6]([$(S(=O)(=O)),$([F,Cl]),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O))])[#7][#6]1([Cl,Br,I])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +246,3,halo_acrylate,"[$([C;H2]),$([C&H1;$(C-F)]),$([C&H1;$(C-Cl)]),$([C&H1;$(C-Br)]),$([C&H1;$(CI)]),$(C(F)F),$(C(Cl)Cl),$(C(Br)Br),$(C(I)I),$(C(F)Cl),$(C(F)Br),$(C(F)I),$(C(Cl)Br),$(C(Br)I)](=[$([C&H1;$(C(-C(=O)))]),$(C(F)(C(=O))),$(C(Cl)(C(=O))),$(C(Br)(C(=O))),$(C(I)(C(=O))),$(C(C)(C(=O))),$(C(c)(C(=O)))])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +247,3,halo_imino,"C(=[#7])([Cl,Br,I,$(O(S(=O)(=O)))])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +248,3,halo_olefin_bis_EWG,"C([Cl,Br,I,$(O(S(=O)(=O)))])=C([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +249,3,halo_phenolic_carbonyl,"C(=O)Oc1c([Cl,F])[cH1,$(c[F,Cl])]c([F,Cl])[cH1,$(c[F,Cl])]c1([F,Cl])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +250,3,halo_phenolic_sulfonyl,"S(=O)Oc1c([Cl,F])[cH1,$(c[F,Cl])]c([F,Cl])[cH1,$(c[F,Cl])]c1([F,Cl])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +251,3,halogen_heteroatom,"[!C;!c;!H][F,Cl,Br,I]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +252,3,hetero_silyl,[Si]~[!#6],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +253,3,hydrazine,[N;X3;!$(N-S(=O)(=O));!$(N-C(F)(F)(F));!$(N-C#N);!$(N-C(=O));!$(N-C(=S));!$(N-C(=N))]-[N;X3;!$(N-S(=O)(=O));!$(N-C(F)(F)(F));!$(N-C#N);!$(N-C(=O));!$(N-C(=S));!$(N-C(=N))],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +254,3,hydrazothiourea,[N;!R]=NC(=S)N,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +255,3,hydroxamate_warhead,C([N;H1]([O;D1]))=O,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +256,3,hyperval_sulfur,"[$([#16&D3]),$([#16&D4])]=,:[#6]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +257,3,isonitrile,[N+]#[C-],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +258,3,keto_def_heterocycle,"[$(c([C;!R;!$(C-[N,O,S]);!$(C-[H])](=O))1naaaa1),$(c([C;!R;!$(C-[N,O,S]);!$(C-[H])](=O))1naa[n,s,o]1)]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +259,3,linear_polycyclic_aromatic_I,"[$(a12aaaaa1aa3a(aa(aaaa4)a4a3)a2),$(a12aaaaa1aa3a(aaa4a3aaaa4)a2),$(a12aaaaa1a(aa5)a3a(aaa4a3a5aaa4)a2)]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +260,3,linear_polycyclic_aromatic_II,"[$(a12aaaa4a1a3a(aaaa3aa4)aa2),$(a12aaaaa1a3a(aaa4a3aaaa4)aa2),$(a1(a(aaaa4)a4a3a2aaaa3)a2aaaa1)]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +261,3,maleimide_etc,"[$([C;H1]),$(C(-[F,Cl,Br,I]))]1=[$([C;H1]),$(C(-[F,Cl,Br,I]))]C(=O)[N,O,S]C(=O)1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +262,3,meldrums_acid_deriv,O=C1OC(C)(C)OC(C1)=O,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +263,3,monofluoroacetate,"[C;H2](F)C(=O)[O,N,S]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +264,3,nitrone,[C;!R]=[N+][O;D1],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +265,3,nitrosamine,N-[N;X2](=O),BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +266,3,non_ring_CH2O_acetal,"[O,N,S;!$(S~O)]!@[CH2]!@[O,S,N;!$(S~O)]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +267,3,non_ring_acetal,"[O,N,S;!$(S~O)]!@[C;H1;X4]!@[O,N,S;!$(S~O)]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +268,3,non_ring_ketal,"[O,N,S;!$(S~O)]!@[C;H0;X4](!@[O,N,S;!$(S~O)])(C)",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +269,3,ortho_hydroiminoquinone,c1c([N;D1])c([N;D1])c[cH1][cH1]1,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +270,3,ortho_hydroquinone,"a1c([O,S;D1])c([O,S;D1])a[cH1][cH1]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +271,3,ortho_nitrophenyl_carbonyl,"[#6]1(-O-[C;!R](=[O,N;!R]))[#6]([$(N(=O)(=O)),$([N+](=O)[O-])])[#6][#6][#6][#6]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +272,3,ortho_quinone,"[CH1,$(C(-[Cl,Br,I]))]1=CC(=[O,N,S;!R])C(=[O,N,S])C=[CH1,$(C(-[Cl,Br,I]))]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +273,3,oxaziridine,"C1~[O,S]~N1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +274,3,oxime,[$(C=N[O;D1]);!$(C=[N+])][#6][#6],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +275,3,oxonium,"[o+,O+]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +276,3,para_hydroiminoquinone,a1[cH1]c([N;D1])[cH1]ac([N;D1])1,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +277,3,para_hydroquinone,"a1[cH1]c([O,S;D1])[cH1]ac([O,S;D1])1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +278,3,para_nitrophenyl_ester,"[#6]1(-O(-[C;!R](-[!N])(=[O,N;!R])))[#6][#6][#6]([$(N(=O)(=O)),$([N+](=O)[O-])])[#6][#6]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +279,3,para_quinone,"[CH1,$(C(-[Cl,Br,I]))]1=[CH1,$(C(-[Cl,Br,I]))]C(=[O,N,S])[CH1,$(C(-[Cl,Br,I]))]=[CH1,$(C(-[Cl,Br,I]))]C1(=[O,N,S])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +280,3,paraquat_like,[#6]1[#6][#6]([#6]2[#6][#6][#7;+][#6][#6]2)[#6][#6][#7;+]1,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +281,3,pentafluorophenylester,C(=O)Oc1c(F)c(F)c(F)c(F)c1(F),BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +282,3,perchloro_cp,C1(Cl)(Cl)C(Cl)C(Cl)=C(Cl)C1(Cl),BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +283,3,perhalo_dicarbonyl_phenyl,"c1(C=O)c([Br,Cl,I])c([Br,Cl,I])c([Br,Cl,I])c([Br,Cl,I])c1(C=O)",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +284,3,perhalo_phenyl,"c1c([Br,Cl,I])c([Br,Cl,I])c([Br,Cl,I])c([Br,Cl,I])c1([Br,Cl,I])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +285,3,peroxide,[#8]~[#8],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +286,3,phenolate_bis_EWG,"O=[C,S]Oc1aaa([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])aa([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +287,3,phos_serine_warhead,NC(COP(O)(O)=O)C(O)=O,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +288,3,phos_threonine_warhead,NC(C(C)OP(O)(O)=O)C(O)=O,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +289,3,phos_tyrosine_warhead,NC(Cc1ccc(OP(O)(O)=O)cc1)C(O)=O,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +290,3,phosphite,"[c,C]-[P;v3]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +291,3,phosphonium,[#15;+]~[!O],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +292,3,phosphorane,C=P,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +293,3,phosphorous_nitrogen_bond,"[#15]~[N,n]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +294,3,phosphorus_phosphorus_bond,P~P,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +295,3,phosphorus_sulfur_bond,P~S,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +296,3,polyene,C=[C;!R][C;!R]=[C;!R][C;!R]=[C;!R],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +297,3,polyhalo_phenol_a,"c1c([O;D1])c(-[Cl,Br,I])c(-[Cl,Br,I])cc1.c1c([O;D1])c(-[Cl,Br,I])c(-[Cl,Br,I])cc1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +298,3,polyhalo_phenol_b,"c1c([O;D1])c(-[Cl,Br,I])cc(-[Cl,Br,I])c1.c1c([O;D1])c(-[Cl,Br,I])cc(-[Cl,Br,I])c1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +299,3,polyhalo_phenol_c,"c1c([O;D1])ccc(-[Cl,Br,I])c(-[Cl,Br,I])1.c1c([O;D1])ccc(-[Cl,Br,I])c(-[Cl,Br,I])1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +300,3,polyhalo_phenol_d,"c(-[Cl,Br,I])1c([O;D1])c(-[Cl,Br,I])ccc1.c(-[Cl,Br,I])1c([O;D1])c(-[Cl,Br,I])ccc1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +301,3,polyhalo_phenol_e,"c1c([O;D1])ccc(-[Cl,Br,I])c(-[Cl,Br,I])1.c1c([O;D1])ccc(-[Cl,Br,I])c(-[Cl,Br,I])1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +302,3,polysulfide,[S;D2]-[S;D2]-[S;D2],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +303,3,porphyrin,"[#6;r16,r17,r18]~[#6]1~[#6]~[#6]~[#6](~[#6])~[#7]1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +304,3,primary_halide_sulfate,"[CH2][Cl,Br,I,$(O(S(=O)(=O)[!$(N);!$([O&D1])]))]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +305,3,quat_N_N,"[N,n;R;+]!@[N,n]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +306,3,quat_N_acyl,"[N,n;+]!@C(=O)",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +307,3,quinone_methide,"[#6;!$([#6](-[N,O,S]))]1=[#6;!$([#6](-[N,O,S]))][#6](=[#6])[#6;!$([#6](-[N,O,S]))]=[#6;!$([#6](-[N,O,S]))][#6]1(=[O,N,S])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +308,3,rhodanine,C(=C)1SC(=S)NC(=O)1,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +309,3,secondary_halide_sulfate,"[CH;!$(C=C)][Cl,Br,I,$(O(S(=O)(=O)[!$(N);!$([O&D1])]))]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +310,3,sulf_D2_nitrogen,[S;D2](-[N;!$(N(=C));!$(N(-S(=O)(=O)));!$(N(-C(=O)))]),BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +311,3,sulf_D2_oxygen_D2,[S;D2][O;D2],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +312,3,sulf_D3_nitrogen,"[S;D3](-N)(-[c,C])(-[c,C])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +313,3,sulfite_sulfate_ester,"[C,c]OS(=O)O[C,c]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +314,3,sulfonium,[S+;X3;$(S-C);!$(S-[O;D1])],BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +315,3,sulfonyl_anhydride,"[$(C(=O)),$(S(=O)(=O))][O,S](S(=O)(=O))",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +316,3,sulfonyl_halide,"S(=O)(=O)[F,Cl,Br,I]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +317,3,sulfonyl_heteroatom,"[!#6;!#1;!#11;!#19]O(S(=O)(=O)(-[C,c]))",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +318,3,sulphonyl_cyanide,S(=O)(=O)C#N,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +319,3,tertiary_halide_sulfate,"[C;X4](-[Cl,Br,I,$(O(S(=O)(=O)[!$(N);!$([O&D1])]))])(-[c,C])(-[c,C])(-[c,C])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +320,3,thio_hydroxamate,"[S;D2]([$(N(=C)),$(N(-S(=O)(=O))),$(N(-C(=O)))])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +321,3,thio_xanthate,[S;!R]-[C;!R](=[S;!R])(-[S;!R]),BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +322,3,thiocarbonate,"SC(=O)[O,S]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +323,3,thioester,"[S;!R;H0]C(=[S,O;!R])([!O;!S;!N])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +324,3,thiol_warhead,NC(C[S;D1])C(O)=O,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +325,3,thiopyrylium,"c1[S,s;+]cccc1",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +326,3,thiosulfoxide,"[C,c][S;X3](~O)-S",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +327,3,triamide,"[$(N(-C(=O))(-C(=O))(-C(=O))),$(n([#6](=O))([#6](=O))([#6](=O)))]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +328,3,triaryl_phosphine_oxide,P(=O)(a)(a)(a),BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +329,3,trichloromethyl_ketone,[$(C(=O));!$(C-N);!$(C-O);!$(C-S)]C(Cl)(Cl)(Cl),BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +330,3,triflate,OS(=O)(=O)(C(F)(F)(F)),BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +331,3,trifluoroacetate_ester,C(F)(F)(F)C(=O)O,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +332,3,trifluoroacetate_thioester,C(F)(F)(F)C(=O)S,BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +333,3,trifluoromethyl_ketone,[$(C(=O));!$(C-N);!$(C-O);!$(C-S)]C(F)(F)(F),BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +334,3,trihalovinyl_heteroatom,"C(-[Cl,Br,I])(-[Cl,Br,I])=C(-[Cl,Br,I])(-[N,O,S])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +335,3,trinitro_aromatic,"[$(a1aaa([$(N(=O)(=O)),$([N+](=O)[O-])])a([$(N(=O)(=O)),$([N+](=O)[O-])])a1([$(N(=O)(=O)),$([N+](=O)[O-])])),$(a1aa([$(N(=O)(=O)),$([N+](=O)[O-])])a([$(N(=O)(=O)),$([N+](=O)[O-])])aa1([$(N(=O)(=O)),$([N+](=O)[O-])])),$(a1a([$(N(=O)(=O)),$([N+](=O)[O-])])aa([$(N(=O)(=O)),$([N+](=O)[O-])])aa1([$(N(=O)(=O)),$([N+](=O)[O-])]))]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +336,3,trinitromethane_derivative,"C([$([N+](=O)[O-]),$(N(=O)=O)])([$([N+](=O)[O-]),$(N(=O)=O)])([$([N+](=O)[O-]),$(N(=O)=O)])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +337,3,tris_activated_aryl_ester,"[$(O=[C,S]Oc1a([$(S(=O)(=O)),F,$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])a([$(S(=O)(=O)),F,$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])a([$(S(=O)(=O)),F,$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])aa1),$(O=[C,S]Oc1a([$(S(=O)(=O)),F,$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])a([$(S(=O)(=O)),F,$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])aaa([$(S(=O)(=O)),F,$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])1),$(O=[C,S]Oc1a([$(S(=O)(=O)),F,$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])aa([$(S(=O)(=O)),F,$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])a([$(S(=O)(=O)),F,$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])a1),$(O=[C,S]Oc1a([$(S(=O)(=O)),F,$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])aa([$(S(=O)(=O)),F,$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])aa([$(S(=O)(=O)),F,$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O)O),$(C(=O)N)])1)]",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +338,3,trisub_bis_act_olefin,"[CH;!R;!$(C-N)]=C([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O))])([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C(=O))])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +339,3,vinyl_carbonyl_EWG,"[C;!R]([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])([$(S(=O)(=O)),$(C(F)(F)(F)),$(C#N),$(N(=O)(=O)),$([N+](=O)[O-]),$(C=O)])=[C;!R]([C;!R](=O))([!$([#8]);!$([#7])])",BMS,7,1,ChEMBL,Bristol-Myers Squibb HTS Deck filters +340,4,ene_six_het_A(483),[#6]-1(-[#6](~[!#6&!#1]~[#6]-[!#6&!#1]-[#6]-1=[!#6&!#1])~[!#6&!#1])=[#6;!R],PAINS,6,1,ChEMBL,PAINS filters +341,4,hzone_phenol_A(479),c:1:c:c(:c(:c:c:1)-[#6]=[#7]-[#7])-[O;H1],PAINS,6,1,ChEMBL,PAINS filters +342,4,anil_di_alk_A(478),"[C;H2]N([C;H2])c1cc([$([H]),$([C;H2]),$([O][C;H2][C;H2])])c(N)c([H])c1",PAINS,6,1,ChEMBL,PAINS filters +343,4,indol_3yl_alk(461),"n:1(c(c(c:2:c:1:c:c:c:c:2-[H])-[C;D4]-[H])-[$([C;H2]),$([C]=,:[!C]),$([C;H1][N]),$([C;H1]([C;H2])[N;H1][C;H2]),$([C;H1]([C;H2])[C;H2][N;H1][C;H2])])-[$([H]),$([C;H2])]",PAINS,6,1,ChEMBL,PAINS filters +344,4,quinone_A(370),"[!#6&!#1]=[#6]-1-[#6]=,:[#6]-[#6](=[!#6&!#1])-[#6]=,:[#6]-1",PAINS,6,1,ChEMBL,PAINS filters +345,4,azo_A(324),[#7;!R]=[#7],PAINS,6,1,ChEMBL,PAINS filters +346,4,imine_one_A(321),"[#6]-[#6](=[!#6&!#1;!R])-[#6](=[!#6&!#1;!R])-[$([#6]),$([#16](=[#8])=[#8])]",PAINS,6,1,ChEMBL,PAINS filters +347,4,mannich_A(296),[#7]-[C;X4]-c1ccccc1-[O;H1],PAINS,6,1,ChEMBL,PAINS filters +348,4,anil_di_alk_B(251),c:1:c:c(:c:c:c:1-[#7](-[#6;X4])-[#6;X4])-[#6]=[#6],PAINS,6,1,ChEMBL,PAINS filters +349,4,anil_di_alk_C(246),"c:1:c:c(:c:c:c:1-[#8]-[#6;X4])-[#7](-[#6;X4])-[$([#1]),$([#6;X4])]",PAINS,6,1,ChEMBL,PAINS filters +350,4,ene_rhod_A(235),[#7]-1-[#6](=[#16])-[#16]-[#6](=[#6])-[#6]-1=[#8],PAINS,6,1,ChEMBL,PAINS filters +351,4,hzone_phenol_B(215),c:1(:c:c:c(:c:c:1)-[#6]=[#7]-[#7])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters +352,4,ene_five_hetA1(201A),"[#6]-1(=[#6])-[#6]=[#7]-[#7,#8,#16]-[#6]-1=[#8]",PAINS,6,1,ChEMBL,PAINS filters +353,4,ene_five_het_A(201),[#6]-1(=[#6])-[#6]=[#7]-[!#6&!#1]-[#6]-1=[#8],PAINS,6,1,ChEMBL,PAINS filters +354,4,anil_di_alk_D(198),"c:1:c:c(:c:c:c:1-[#7](-[#6;X4])-[#6;X4])-[#6;X4]-[$([#8]-[#1]),$([#6]=[#6]-[#1]),$([#7]-[#6;X4])]",PAINS,6,1,ChEMBL,PAINS filters +355,4,imine_one_isatin(189),[#8]=[#6]-2-[#6](=!@[#7]-[#7])-c:1:c:c:c:c:c:1-[#7]-2,PAINS,6,1,ChEMBL,PAINS filters +356,4,anil_di_alk_E(186),"[#6](-[#1])-[#7](-[#6](-[#1])-[#1])-c:1:c(:c(:c(:c(:c:1-[#1])-[$([#1]),$([#6](-[#1])-[#1])])-[#6](-[#1])-[$([#1]),$([#6]-[#1])])-[#1])-[#1]",PAINS,6,1,ChEMBL,PAINS filters +357,4,thiaz_ene_A(128),"[#6]-1(=[#6](-[$([#1]),$([#6](-[#1])-[#1]),$([#6]=[#8])])-[#16]-[#6](-[#7]-1-[$([#1]),$([#6]-[#1]),$([#6]:[#6])])=[#7;!R])-[$([#6](-[#1])-[#1]),$([#6]:[#6])]",PAINS,6,1,ChEMBL,PAINS filters +358,4,pyrrole_A(118),n2(-[#6]:1:[!#1]:[#6]:[#6]:[#6]:[#6]:1)c(cc(c2-[#6;X4])-[#1])-[#6;X4],PAINS,6,1,ChEMBL,PAINS filters +359,4,catechol_A(92),c:1:c:c(:c(:c:c:1)-[#8;H1])-[#8;H1],PAINS,6,1,ChEMBL,PAINS filters +360,4,ene_five_het_B(90),[#6]-1(=[#6])-[#6](-[#7]=[#6]-[#16]-1)=[#8],PAINS,6,1,ChEMBL,PAINS filters +361,4,imine_one_fives(89),[#6]-1=[!#1]-[!#6&!#1]-[#6](-[#6]-1=[!#6&!#1;!R])=[#8],PAINS,6,1,ChEMBL,PAINS filters +362,4,ene_five_het_C(85),[#6]-1(-[#6](-[#6]=[#6]-[!#6&!#1]-1)=[#6])=[!#6&!#1],PAINS,6,1,ChEMBL,PAINS filters +363,4,hzone_pipzn(79),"CN1[C;H2][C;H2]N(N=[C;H1][#6]=,:[#6])[C;H2][C;H2]1",PAINS,6,1,ChEMBL,PAINS filters +364,4,keto_keto_beta_A(68),c:1-2:c(:c:c:c:c:1)-[#6](=[#8])-[#6;X4]-[#6]-2=[#8],PAINS,6,1,ChEMBL,PAINS filters +365,4,hzone_pyrrol(64),Cn1cccc1C=NN,PAINS,6,1,ChEMBL,PAINS filters +366,4,ene_one_ene_A(57),[#6]=!@[#6](-[!#1])-@[#6](=!@[!#6&!#1])-@[#6](=!@[#6])-[!#1],PAINS,6,1,ChEMBL,PAINS filters +367,4,cyano_ene_amine_A(56),N#CC=C(N)C(C#N)C#N,PAINS,6,1,ChEMBL,PAINS filters +368,4,ene_five_one_A(55),c:1-2:c(:c:c:c:c:1)-[#6](=[#8])-[#6](=[#6])-[#6]-2=[#8],PAINS,6,1,ChEMBL,PAINS filters +369,4,cyano_pyridone_A(54),N#Cc1ccc[#7;H1]c1=S,PAINS,6,1,ChEMBL,PAINS filters +370,4,anil_alk_ene(51),c:1:c:c-2:c(:c:c:1)-[#6]-3-[#6](-[#6]-[#7]-2)-[#6]-[#6]=[#6]-3,PAINS,6,1,ChEMBL,PAINS filters +371,4,amino_acridine_A(46),c:1:c:2:c(:c:c:c:1):n:c:3:c(:c:2-[#7]):c:c:c:c:3,PAINS,6,1,ChEMBL,PAINS filters +372,4,ene_five_het_D(46),[#6]-1(=[#6])-[#6](=[#8])-[#7]-[#7]-[#6]-1=[#8],PAINS,6,1,ChEMBL,PAINS filters +373,4,thiophene_amino_Aa(45),[H]N([H])c1sc([!#1])c([!#1])c1C=O,PAINS,6,1,ChEMBL,PAINS filters +374,4,ene_five_het_E(44),[#7]-[#6]=!@[#6]-2-[#6](=[#8])-c:1:c:c:c:c:c:1-[!#6&!#1]-2,PAINS,6,1,ChEMBL,PAINS filters +375,4,sulfonamide_A(43),"NS(=O)(=O)c1cc([F,Cl,Br,I])cc([F,Cl,Br,I])c1O",PAINS,6,1,ChEMBL,PAINS filters +376,4,thio_ketone(43),[#6]-[#6](=[#16])-[#6],PAINS,6,1,ChEMBL,PAINS filters +377,4,sulfonamide_B(41),[H]N(c1ccc([O;H1])cc1)S(=O)=O,PAINS,6,1,ChEMBL,PAINS filters +378,4,anil_no_alk(40),"c:1(:c(:c(:c(:c(:c:1-[#1])-[#1])-[$([#8]),$([#7]),$([#6](-[#1])-[#1])])-[#1])-[#1])-[#7](-[#1])-[#1]",PAINS,6,1,ChEMBL,PAINS filters +379,4,thiophene_amino_Ab(40),"[$([#1]),$([#6](-[#1])-[#1]),$([#6]:[#6])]-c:1:c(:c(:c(:s:1)-[#7](-[#1])-[#6](=[#8])-[#6])-[#6](=[#8])-[#8])-[$([#6]:1:[#6]:[#6]:[#6]:[#6]:[#6]:1),$([#6]:1:[#16]:[#6]:[#6]:[#6]:1)]",PAINS,6,1,ChEMBL,PAINS filters +380,4,het_pyridiniums_A(39),"[H]c1c([$([N]),$([H])])ccc2ccc[n+]([$([O;X1]),$([C;H3]),$([#6][#6]:[#6]),$([#6][#6][#8]),$([#6][#6](C)=[#8]),$([#6][#6](N)=[#8]),$([#6][#6][#6])])c12",PAINS,6,1,ChEMBL,PAINS filters +381,4,anthranil_one_A(38),CC(=O)c1ccccc1[#7;H1][!$([#6]=[#8])],PAINS,6,1,ChEMBL,PAINS filters +382,4,cyano_imine_A(37),[#7;H1][#7]=[#6](-[#6]#[#7])-[#6]=[!#6&!#1;!R],PAINS,6,1,ChEMBL,PAINS filters +383,4,diazox_sulfon_A(36),"[#7](-c:1:c:c:c:c:c:1)-[#16](=[#8])(=[#8])-[#6]:2:[#6]:[#6]:[#6]:[#6]:3:[#7]:[$([#8]),$([#16])]:[#7]:[#6]:2:3",PAINS,6,1,ChEMBL,PAINS filters +384,4,hzone_anil_di_alk(35),"[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#6](-[#1])=[#7]-[#7]-[$([#6](=[#8])-[#6](-[#1])(-[#1])-[#16]-[#6]:[#7]),$([#6](=[#8])-[#6](-[#1])(-[#1])-[!#1]:[!#1]:[#7]),$([#6](=[#8])-[#6]:[#6]-[#8]-[#1]),$([#6]:[#7]),$([#6](-[#1])(-[#1])-[#6](-[#1])-[#8]-[#1])])-[#1])-[#1]",PAINS,6,1,ChEMBL,PAINS filters +385,4,rhod_sat_A(33),[#7]-1-[#6](=[#16])-[#16]-[#6;X4]-[#6]-1=[#8],PAINS,6,1,ChEMBL,PAINS filters +386,4,hzone_enamin(30),"[#7][#7]=[#6][#6](-[$([#1]),$([#6])])=[#6]([#6])-!@[$([#7]),$([#8])]",PAINS,6,1,ChEMBL,PAINS filters +387,4,pyrrole_B(29),[#6;X4]c1ccc([#6]:[#6])n1c2ccccc2,PAINS,6,1,ChEMBL,PAINS filters +388,4,thiophene_hydroxy(28),s1ccc(c1)-[#8;H1],PAINS,6,1,ChEMBL,PAINS filters +389,4,cyano_pyridone_B(27),"[!#6][#6]1=,:[#7][#6]([#6])=,:[#6](C#N)[#6](=O)[#7]1",PAINS,6,1,ChEMBL,PAINS filters +390,4,imine_one_sixes(27),[#6]-1(-[#6](=[#8])-[#7]-[#6](=[#8])-[#7]-[#6]-1=[#8])=[#7],PAINS,6,1,ChEMBL,PAINS filters +391,4,dyes5A(27),"[#6]=,:[#6]:[#7]([#6])~[#6]:[#6]=,:[#6][#6]~[#6]:[#7]",PAINS,6,1,ChEMBL,PAINS filters +392,4,naphth_amino_A(25),"c1cc2cccc3[#7][#6]=,:[#7]c(c1)c23",PAINS,6,1,ChEMBL,PAINS filters +393,4,naphth_amino_B(25),[C;X4]1[N;H1]c3cccc2cccc([N;H1]1)c23,PAINS,6,1,ChEMBL,PAINS filters +394,4,ene_one_ester(24),[#6]-[#8]-[#6](=[#8])-[#6](-[#7][#6])=[#6]-[#6](-[#6])=[#8],PAINS,6,1,ChEMBL,PAINS filters +395,4,thio_dibenzo(23),"S=[#6]1[#6]=,:[#6][!#6,!#6][#6]=,:[#6]1",PAINS,6,1,ChEMBL,PAINS filters +396,4,cyano_cyano_A(23),"[#6](-[#6]#[#7])(-[#6]#[#7])-[#6](-[$([#6]#[#7]),$([#6]=[#7])])-[#6]#[#7]",PAINS,6,1,ChEMBL,PAINS filters +397,4,hzone_acyl_naphthol(22),[H]c2c([H])c([H])c1c([H])c(C(=O)NN=C)c(O)c([H])c1c2[H],PAINS,6,1,ChEMBL,PAINS filters +398,4,het_65_A(21),O=Cc1cnn2c([#8;H1])ccnc12,PAINS,6,1,ChEMBL,PAINS filters +399,4,imidazole_A(19),n:1:c(:n(:c(:c:1-c:2:c:c:c:c:c:2)-c:3:c:c:c:c:c:3)-[#1])-[#6]:[!#1],PAINS,6,1,ChEMBL,PAINS filters +400,4,ene_cyano_A(19),[#6](-[#6]#[#7])(-[#6]#[#7])=[#6]-c:1:c:c:c:c:c:1,PAINS,6,1,ChEMBL,PAINS filters +401,4,anthranil_acid_A(19),C=NNc1ccccc1C(=O)[#8;H1],PAINS,6,1,ChEMBL,PAINS filters +402,4,dyes3A(19),"[#6]-,:[#6]:[#7+]=,:[#6][#6]=[#6][#7][#6;X4]",PAINS,6,1,ChEMBL,PAINS filters +403,4,dhp_bis_amino_CN(19),"[#6]=,:[#6]C1C(C#N)=C(N)SC(N)=C1C#N",PAINS,6,1,ChEMBL,PAINS filters +404,4,het_6_tetrazine(18),"[#7]~[#6]:1:[#7]:[#7]:[#6](:[$([#7]),$([#6]-[#1]),$([#6]-[#7]-[#1])]:[$([#7]),$([#6]-[#7])]:1)-[$([#7]-[#1]),$([#8]-[#6](-[#1])-[#1])]",PAINS,6,1,ChEMBL,PAINS filters +405,4,ene_one_hal(17),"[#6]-[#6]=[#6](-[F,Cl,Br,I])-[#6](=[#8])-[#6]",PAINS,6,1,ChEMBL,PAINS filters +406,4,cyano_imine_B(17),N#CC(C#N)=NNc1ccccc1,PAINS,6,1,ChEMBL,PAINS filters +407,4,thiaz_ene_B(17),"[#6]NC(=O)-!@[#6]1=,:[#6]([$([N]),$(NC(=O)[#6]:[#6])])[#7]([$([#6;H2]-[#6;H1]=[#6;H2]),$([#6]=,:[#6])])[#6](=S)[#16]1",PAINS,6,1,ChEMBL,PAINS filters +408,4,ene_rhod_B(16),"[H]C([$([#6]-[#35]),$([#6]:[#6](-[#1]):[#6](-[F,Cl,Br,I]):[#6]:[#6]-[F,Cl,Br,I]),$([#6]:[#6](-[#1]):[#6](-[#1]):[#6]-[#16]-[#6](-[#1])-[#1]),$([#6]:[#6]:[#6]:[#6]:[#6]:[#6]:[#6]:[#6]:[#6]:[#6]-[#8]-[#6;H2]),$([#6]:1:[#6](-[#6;H2]):[#7](-[#6;H2]):[#6](-[#6;H2]):[#6]:1)])=C1SC(=O)[N]C1=O",PAINS,6,1,ChEMBL,PAINS filters +409,4,thio_carbonate_A(15),"[#7,#8]c2ccc1oc(=[#8,#16])sc1c2",PAINS,6,1,ChEMBL,PAINS filters +410,4,anil_di_alk_furan_A(15),[#7](-[#6](-[#1])-[#1])(-[#6](-[#1])-[#1])-c:1:c(:c(:c(:o:1)-[#6]=[#7]-[#7](-[#1])-[#6]=[!#6&!#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +411,4,ene_five_het_F(15),O=[#6]2[#6](=!@[#6]c1ccccc1)Sc3ccccc23,PAINS,6,1,ChEMBL,PAINS filters +412,4,anil_di_alk_F(14),"c:1:c:c(:c:c:c:1-[#6;X4]-c:2:c:c:c(:c:c:2)-[#7](-[$([#1]),$([#6;X4])])-[$([#1]),$([#6;X4])])-[#7](-[$([#1]),$([#6;X4])])-[$([#1]),$([#6;X4])]",PAINS,6,1,ChEMBL,PAINS filters +413,4,hzone_anil(14),c:1(:c(:c(:c(:c(:c:1-[#1])-[#1])-[#7](-[#1])-[#1])-[#1])-[#1])-[#6]=[#7]-[#7]-[#1],PAINS,6,1,ChEMBL,PAINS filters +414,4,het_5_pyrazole_OH(14),"c1(nn(c(c1-[$([#1]),$([#6]-[#1])])-[#8]-[#1])-c:2:c(:c(:c(:c(:c:2-[#1])-[#1])-[#1])-[#1])-[#1])-[#6;X4]",PAINS,6,1,ChEMBL,PAINS filters +415,4,het_thio_666_A(13),"c:2(:c:1-[#16]-c:3:c(-[#7](-c:1:c(:c(:c:2-[#1])-[#1])-[#1])-[$([#1]),$([#6](-[#1])(-[#1])-[#1]),$([#6](-[#1])(-[#1])-[#6]-[#1])]):c(:c(~[$([#1]),$([#6]:[#6])]):c(:c:3-[#1])-[$([#1]),$([#7](-[#1])-[#1]),$([#8]-[#6;X4])])~[$([#1]),$([#7](-[#1])-[#6;X4]),$([#6]:[#6])])-[#1]",PAINS,6,1,ChEMBL,PAINS filters +416,4,styrene_A(13),[#6]-2-[#6]-c:1:c(:c:c:c:c:1)-[#6](-c:3:c:c:c:c:c-2:3)=[#6]-[#6],PAINS,6,1,ChEMBL,PAINS filters +417,4,ene_rhod_C(13),"[#16]-1-[#6](=[#7]-[#6]:[#6])-[#7](-[$([#1]),$([#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#8]),$([#6]:[#6])])-[#6](=[#8])-[#6]-1=[#6](-[#1])-[$([#6]:[#6]:[#6]-[#17]),$([#6]:[!#6&!#1])]",PAINS,6,1,ChEMBL,PAINS filters +418,4,dhp_amino_CN_A(13),[#7](-[#1])(-[#1])-[#6]-1=[#6](-[#6]#[#7])-[#6](-[#1])(-[#6]:[#6])-[#6](=[#6](-[#6]=[#6])-[#8]-1)-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +419,4,cyano_imine_C(12),[#8]=[#16](=[#8])-[#6](-[#6]#[#7])=[#7]-[#7]-[#1],PAINS,6,1,ChEMBL,PAINS filters +420,4,thio_urea_A(12),c:1:c:c:c:c:c:1-[#7](-[#1])-[#6](=[#16])-[#7](-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-c:2:c:c:c:c:c:2,PAINS,6,1,ChEMBL,PAINS filters +421,4,thiophene_amino_B(12),"c:1:c(:c:c:c:c:1)-[#7](-[#1])-c:2:c(:c(:c(:s:2)-[$([#6]=[#8]),$([#6]#[#7]),$([#6](-[#8]-[#1])=[#6])])-[#7])-[$([#6]#[#7]),$([#6](:[#7]):[#7])]",PAINS,6,1,ChEMBL,PAINS filters +422,4,keto_keto_beta_B(12),[#6;X4]-1-[#6](=[#8])-[#7]-[#7]-[#6]-1=[#8],PAINS,6,1,ChEMBL,PAINS filters +423,4,keto_phenone_A(11),c:1:c-3:c(:c:c:c:1)-[#6]:2:[#7]:[!#1]:[#6]:[#6]:[#6]:2-[#6]-3=[#8],PAINS,6,1,ChEMBL,PAINS filters +424,4,cyano_pyridone_C(11),[#6]-1(-[#6](=[#6](-[#6]#[#7])-[#6](~[#8])~[#7]~[#6]-1~[#8])-[#6](-[#1])-[#1])=[#6](-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +425,4,thiaz_ene_C(11),"[#6]-1(=[#6](-!@[#6]=[#7])-[#16]-[#6](-[#7]-1)=[#8])-[$([F,Cl,Br,I]),$([#7+](:[#6]):[#6])]",PAINS,6,1,ChEMBL,PAINS filters +426,4,hzone_thiophene_A(11),"c:1:2:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1]):[!#6&!#1]:[#6](:[#6]:2-[#6](-[#1])=[#7]-[#7](-[#1])-[$([#6]:1:[#7]:[#6]:[#6](-[#1]):[#16]:1),$([#6]:[#6](-[#1]):[#6]-[#1]),$([#6]:[#7]:[#6]:[#7]:[#6]:[#7]),$([#6]:[#7]:[#7]:[#7]:[#7])])-[$([#1]),$([#8]-[#1]),$([#6](-[#1])-[#1])]",PAINS,6,1,ChEMBL,PAINS filters +427,4,ene_quin_methide(10),"[!#1]:[!#1]-[#6](-[$([#1]),$([#6]#[#7])])=[#6]-1-[#6]=:[#6]-[#6](=[$([#8]),$([#7;!R])])-[#6]=:[#6]-1",PAINS,6,1,ChEMBL,PAINS filters +428,4,het_thio_676_A(10),"c:1:c:c-2:c(:c:c:1)-[#6]-[#6](-c:3:c(-[#16]-2):c(:c(-[#1]):c(:c:3-[#1])-[$([#1]),$([#8]),$([#16;X2]),$([#6;X4]),$([#7](-[$([#1]),$([#6;X4])])-[$([#1]),$([#6;X4])])])-[#1])-[#7](-[$([#1]),$([#6;X4])])-[$([#1]),$([#6;X4])]",PAINS,6,1,ChEMBL,PAINS filters +429,4,ene_five_het_G(10),"[#6]-1(=[#6])-[#6](-[#7,#16,#8][#6](-[!#1])=[#7]-1)=[#8]",PAINS,6,1,ChEMBL,PAINS filters +430,4,acyl_het_A(9),[#7+](:[!#1]:[!#1]:[!#1])-[!#1]=[#8],PAINS,6,1,ChEMBL,PAINS filters +431,4,anil_di_alk_G(9),[#6;X4]-[#7](-[#6;X4])-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#6]2=:[#7][#6]:[#6]:[!#1]2)-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +432,4,dhp_keto_A(9),"[#7]-1(-[$([#6;X4]),$([#1])])-[#6]=:[#6](-[#6](=[#8])-[#6]:[#6]:[#6])-[#6](-[#6])-[#6](=[#6]-1-[#6](-[#1])(-[#1])-[#1])-[$([#6]=[#8]),$([#6]#[#7])]",PAINS,6,1,ChEMBL,PAINS filters +433,4,thio_urea_B(9),c:1:c:c:c:c:c:1-[#7](-[#1])-[#6](=[#16])-[#7](-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-c:2:c:c:c:c:c:2,PAINS,6,1,ChEMBL,PAINS filters +434,4,anil_alk_bim(9),c:1:3:c(:c(:c(:c(:c:1-[#1])-[#1])-[#7](-[#1])-[#6](-[#1])(-[#1])-c:2:c:c:c:c:c:2)-[#1]):n:c(-[#1]):n:3-[#6],PAINS,6,1,ChEMBL,PAINS filters +435,4,imine_imine_A(9),c:1:c:c-2:c(:c:c:1)-[#7]=[#6]-[#6]-2=[#7;!R],PAINS,6,1,ChEMBL,PAINS filters +436,4,thio_urea_C(9),c:1(:c:c:c:c:c:1)-[#7](-[#1])-[#6](=[#16])-[#7]-[#7](-[#1])-[#6](=[#8])-[#6]-2:[!#1]:[!#6&!#1]:[#6]:[#6]-2,PAINS,6,1,ChEMBL,PAINS filters +437,4,imine_one_fives_B(9),[#7;!R]=[#6]-2-[#6](=[#8])-c:1:c:c:c:c:c:1-[#16]-2,PAINS,6,1,ChEMBL,PAINS filters +438,4,dhp_amino_CN_B(9),"[$([#7](-[#1])-[#1]),$([#8]-[#1])]-[#6]-2=[#6](-[#6]#[#7])-[#6](-[#1])(-[#6]:[#6])-c:1:c(:n(-[#6]):n:c:1)-[#8]-2",PAINS,6,1,ChEMBL,PAINS filters +439,4,anil_OC_no_alk_A(8),[#7](-[#1])(-[#1])-c:1:c(:c(:c(:n:c:1-[#1])-[#8]-c:2:c:c:c:c:c:2)-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +440,4,het_thio_66_one(8),[#6](=[#8])-[#6]-1=[#6]-[#7]-c:2:c(-[#16]-1):c:c:c:c:2,PAINS,6,1,ChEMBL,PAINS filters +441,4,styrene_B(8),"c:1:c:c-2:c(:c:c:1)-[#6](-c:3:c(-[$([#16;X2]),$([#6;X4])]-2):c:c:c(:c:3)-[$([#1]),$([#17]),$([#6;X4])])=[#6]-[#6]",PAINS,6,1,ChEMBL,PAINS filters +442,4,het_thio_5_A(8),[#6](-[#1])(-[#1])-[#16;X2]-c:1:n:c(:c(:n:1-!@[#6](-[#1])-[#1])-c:2:c:c:c:c:c:2)-[#1],PAINS,6,1,ChEMBL,PAINS filters +443,4,anil_di_alk_ene_A(8),[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-[#6]-2=[#6](-[#1])-c:1:c(:c:c:c:c:1)-[#16;X2]-c:3:c-2:c:c:c:c:3,PAINS,6,1,ChEMBL,PAINS filters +444,4,ene_rhod_D(8),"[#16]-1-[#6](=!@[#7]-[$([#1]),$([#7](-[#1])-[#6]:[#6])])-[#7](-[$([#1]),$([#6]:[#7]:[#6]:[#6]:[#16])])-[#6](=[#8])-[#6]-1=[#6](-[#1])-[#6]:[#6]-[$([#17]),$([#8]-[#6]-[#1])]",PAINS,6,1,ChEMBL,PAINS filters +445,4,ene_rhod_E(8),[#16]-1-[#6](=[#8])-[#7]-[#6](=[#16])-[#6]-1=[#6](-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +446,4,anil_OH_alk_A(8),c:1:c(:c:c:c:c:1)-[#6](-[#1])(-[#1])-[#7](-[#1])-c:2:c(:c(:c(:c(:c:2-[#1])-[#1])-[#8]-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +447,4,pyrrole_C(8),n1(-[#6;X4])c(c(-[#1])c(c1-[#6]:[#6])-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +448,4,thio_urea_D(8),c:1(:c:c:c:c:c:1)-[#7](-[#1])-[#6](=[#16])-[#7]-[#7](-[#1])-c:2:c:c:c:c:c:2,PAINS,6,1,ChEMBL,PAINS filters +449,4,thiaz_ene_D(8),[#7](-c:1:c:c:c:c:c:1)-c2[n+]c(cs2)-c:3:c:c:c:c:c:3,PAINS,6,1,ChEMBL,PAINS filters +450,4,ene_rhod_F(8),n:1:c:c:c(:c:1-[#6](-[#1])-[#1])-[#6](-[#1])=[#6]-2-[#6](=[#8])-[#7]-[#6](=[!#6&!#1])-[#7]-2,PAINS,6,1,ChEMBL,PAINS filters +451,4,thiaz_ene_E(8),"[#6]-1(=[#6](-[#6](-[#1])(-[#6])-[#6])-[#16]-[#6](-[#7]-1-[$([#1]),$([#6](-[#1])-[#1])])=[#8])-[#16]-[#6;R]",PAINS,6,1,ChEMBL,PAINS filters +452,4,het_65_B(7),[!#1]:1:[!#1]-2:[!#1](:[!#1]:[!#1]:[!#1]:1)-[#7](-[#1])-[#7](-[#6]-2=[#8])-[#6],PAINS,6,1,ChEMBL,PAINS filters +453,4,keto_keto_beta_C(7),c:1:c:c-2:c(:c:c:1)-[#6](=[#6](-[#6]-2=[#8])-[#6])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters +454,4,het_66_A(7),c:2:c:c:1:n:n:c(:n:c:1:c:c:2)-[#6](-[#1])(-[#1])-[#6]=[#8],PAINS,6,1,ChEMBL,PAINS filters +455,4,thio_urea_E(7),c:1:c:c:c:c:c:1-[#7](-[#1])-[#6](=[#16])-[#7](-[#1])-[#6](-[#1])(-[#1])-c:2:n:c:c:c:c:2,PAINS,6,1,ChEMBL,PAINS filters +456,4,thiophene_amino_C(7),"[#6](-[#1])-[#6](-[#1])(-[#1])-c:1:c(:c(:c(:s:1)-[#7](-[#1])-[#6](=[#8])-[#6]-[#6]-[#6]=[#8])-[$([#6](=[#8])-[#8]),$([#6]#[#7])])-[#6](-[#1])-[#1]",PAINS,6,1,ChEMBL,PAINS filters +457,4,hzone_phenone(7),"[#6](-c:1:c(:c(:c(:c:c:1-[#1])-[$([#6;X4]),$([#1])])-[#1])-[#1])(-c:2:c(:c(:c(:c(:c:2-[#1])-[#1])-[$([#1]),$([#17])])-[#1])-[#1])=[$([#7]-[#8]-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1]),$([#7]-[#8]-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1]),$([#7]-[#7](-[#1])-[#6](=[#7]-[#1])-[#7](-[#1])-[#1]),$([#6](-[#1])-[#7])]",PAINS,6,1,ChEMBL,PAINS filters +458,4,ene_rhod_G(7),[#8](-[#1])-[#6](=[#8])-c:1:c:c(:c:c:c:1)-[#6]:[!#1]:[#6]-[#6](-[#1])=[#6]-2-[#6](=[!#6&!#1])-[#7]-[#6](=[!#6&!#1])-[!#6&!#1]-2,PAINS,6,1,ChEMBL,PAINS filters +459,4,ene_cyano_B(7),[#6]-1(=[#6]-[#6](-c:2:c:c(:c(:n:c-1:2)-[#7](-[#1])-[#1])-[#6]#[#7])=[#6])-[#6]#[#7],PAINS,6,1,ChEMBL,PAINS filters +460,4,dhp_amino_CN_C(7),[#7](-[#1])(-[#1])-[#6]-1=[#6](-[#6]#[#7])-[#6](-[#1])(-[#6]:[#6])-[#6](=[#6](-[#6]:[#6])-[#8]-1)-[#6]#[#7],PAINS,6,1,ChEMBL,PAINS filters +461,4,het_5_A(7),[#7]-2(-c:1:c:c:c:c:c:1)-[#7]=[#6](-[#6]=[#8])-[#6;X4]-[#6]-2=[#8],PAINS,6,1,ChEMBL,PAINS filters +462,4,ene_five_het_H(6),[#7]-1=[#6]-[#6](-[#6](-[#7]-1)=[#16])=[#6],PAINS,6,1,ChEMBL,PAINS filters +463,4,thio_amide_A(6),c1(coc(c1-[#1])-[#6](=[#16])-[#7]-2-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[!#1]-[#6](-[#1])(-[#1])-[#6]-2(-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +464,4,ene_cyano_C(6),[#6]=[#6](-[#6]#[#7])-[#6](=[#7]-[#1])-[#7]-[#7],PAINS,6,1,ChEMBL,PAINS filters +465,4,hzone_furan_A(6),"c:1(:c(:c(:c(:o:1)-[$([#1]),$([#6](-[#1])-[#1])])-[#1])-[#1])-[#6](-[$([#1]),$([#6](-[#1])-[#1])])=[#7]-[#7](-[#1])-c:2:n:c:c:s:2",PAINS,6,1,ChEMBL,PAINS filters +466,4,anil_di_alk_H(6),c:1(:c(:c(:c(:c(:c:1-[#7](-[#1])-[#16](=[#8])(=[#8])-[#6]:2:[#6]:[!#1]:[#6]:[#6]:[#6]:2)-[#1])-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +467,4,het_65_C(6),"n2c1ccccn1c(c2-[$([#6](-[!#1])=[#6](-[#1])-[#6]:[#6]),$([#6]:[#8]:[#6])])-[#7]-[#6]:[#6]",PAINS,6,1,ChEMBL,PAINS filters +468,4,thio_urea_F(6),[#6]-1-[#7](-[#1])-[#7](-[#1])-[#6](=[#16])-[#7]-[#7]-1-[#1],PAINS,6,1,ChEMBL,PAINS filters +469,4,ene_five_het_I(6),c:1(:c:c:c:o:1)-[#6](-[#1])=!@[#6]-3-[#6](=[#8])-c:2:c:c:c:c:c:2-[!#6&!#1]-3,PAINS,6,1,ChEMBL,PAINS filters +470,4,keto_keto_gamma(5),[#8]=[#6]-1-[#6;X4]-[#6]-[#6](=[#8])-c:2:c:c:c:c:c-1:2,PAINS,6,1,ChEMBL,PAINS filters +471,4,quinone_B(5),c:1:c:c-2:c(:c:c:1)-[#6](-c3cccc4noc-2c34)=[#8],PAINS,6,1,ChEMBL,PAINS filters +472,4,het_6_pyridone_OH(5),[#8](-[#1])-c:1:n:c(:c:c:c:1)-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters +473,4,hzone_naphth_A(5),"c:1:2:c(:c(:c(:c(:c:1:c(:c(:c(:c:2-[#1])-[#1])-[#6]=[#7]-[#7](-[#1])-[$([#6]:[#6]),$([#6]=[#16])])-[#1])-[#1])-[#1])-[#1])-[#1]",PAINS,6,1,ChEMBL,PAINS filters +474,4,thio_ester_A(5),[#6]-1=[#6](-[#16]-[#6](-[#6]=[#6]-1)=[#16])-[#7],PAINS,6,1,ChEMBL,PAINS filters +475,4,ene_misc_A(5),[#6]-1=[#6]-[#6](-[#8]-[#6]-1-[#8])(-[#8])-[#6],PAINS,6,1,ChEMBL,PAINS filters +476,4,cyano_pyridone_D(5),[#8]=[#6]-1-[#6](=[#6]-[#6](=[#7]-[#7]-1)-[#6]=[#8])-[#6]#[#7],PAINS,6,1,ChEMBL,PAINS filters +477,4,het_65_Db(5),C3=CN1C(=NC(=C1-[#7]-[#6])-c:2:c:c:c:c:n:2)C=C3,PAINS,6,1,ChEMBL,PAINS filters +478,4,het_666_A(5),[#7]N-2-c:1:c:c:c:c:c:1-[#6](=[#7])-c:3:c-2:c:c:c:c:3,PAINS,6,1,ChEMBL,PAINS filters +479,4,diazox_sulfon_B(5),c:1:c(:c:c:c:c:1)-[#7]-2-[#6](-[#1])-[#6](-[#1])-[#7](-[#6](-[#1])-[#6]-2-[#1])-[#16](=[#8])(=[#8])-c:3:c:c:c:c:4:n:s:n:c:3:4,PAINS,6,1,ChEMBL,PAINS filters +480,4,anil_NH_alk_A(5),c:1(:c(:c-2:c(:c(:c:1-[#1])-[#1])-[#7](-[#6](-[#7]-2-[#1])=[#8])-[#1])-[#1])-[#7](-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +481,4,sulfonamide_C(5),c:1(:c(:c-3:c(:c(:c:1-[#7](-[#1])-[#16](=[#8])(=[#8])-c:2:c:c:c(:c:c:2)-[!#6&!#1])-[#1])-[#8]-[#6](-[#8]-3)(-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +482,4,het_thio_N_55(5),[#6](-[#1])-[#6]:2:[#7]:[#7](-c:1:c:c:c:c:c:1):[#16]:3:[!#6&!#1]:[!#1]:[#6]:[#6]:2:3,PAINS,6,1,ChEMBL,PAINS filters +483,4,keto_keto_beta_D(5),[#8]=[#6]-[#6]=[#6](-[#1])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters +484,4,ene_rhod_H(5),[#7]-1-2-[#6](=[#7]-[#6](=[#8])-[#6](=[#7]-1)-[#6](-[#1])-[#1])-[#16]-[#6](=[#6](-[#1])-[#6]:[#6])-[#6]-2=[#8],PAINS,6,1,ChEMBL,PAINS filters +485,4,imine_ene_A(5),[#6]:[#6]-[#6](-[#1])=[#6](-[#1])-[#6](-[#1])=[#7]-[#7](-[#6;X4])-[#6;X4],PAINS,6,1,ChEMBL,PAINS filters +486,4,het_thio_656a(5),c:1:3:c(:c:c:c:c:1):c:2:n:n:c(-[#16]-[#6](-[#1])(-[#1])-[#6]=[#8]):n:c:2:n:3-[#6](-[#1])(-[#1])-[#6](-[#1])=[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +487,4,pyrrole_D(5),n1(-[#6])c(c(-[#1])c(c1-[#6](-[#1])(-[#1])-[#7](-[#1])-[#6](=[#16])-[#7]-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +488,4,pyrrole_E(5),n2(-[#6]:1:[!#1]:[!#6&!#1]:[!#1]:[#6]:1-[#1])c(c(-[#1])c(c2-[#6;X4])-[#1])-[#6;X4],PAINS,6,1,ChEMBL,PAINS filters +489,4,thio_urea_G(5),c:1(:c:c:c:c:c:1)-[#7](-[#1])-[#6](=[#16])-[#7]-[#7](-[#1])-[#6]([#7;R])[#7;R],PAINS,6,1,ChEMBL,PAINS filters +490,4,anisol_A(5),"c:1(:c(:c(:c(:c(:c:1-[$([#1]),$([#6](-[#1])-[#1])])-[#1])-[#8]-[#6](-[#1])-[#1])-[#6](-[#1])(-[#1])-[$([#7](-[#1])-[#6](=[#8])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])-[#1]),$([#6](-[#1])(-[#6](-[#1])-[#1])-[#7](-[#1])-[#6](=[#16])-[#7]-[#1])])-[#1])-[#8]-[#6](-[#1])-[#1]",PAINS,6,1,ChEMBL,PAINS filters +491,4,pyrrole_F(5),n2(-[#6]:1:[#6](-[#6]#[#7]):[#6]:[#6]:[!#6&!#1]:1)c(c(-[#1])c(c2)-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +492,4,dhp_amino_CN_D(5),[#7](-[#1])(-[#1])-[#6]-2=[#6](-[#6]#[#7])-[#6](-[#1])(-[#6]:[#6])-c:1:c(:c:c:s:1)-[#8]-2,PAINS,6,1,ChEMBL,PAINS filters +493,4,thiazole_amine_A(4),[#7](-[#1])-c:1:n:c(:c:s:1)-c:2:c:n:c(-[#7](-[#1])-[#1]):s:2,PAINS,6,1,ChEMBL,PAINS filters +494,4,het_6_imidate_A(4),[#7]=[#6]-1-[#7](-[#1])-[#6](=[#6](-[#7]-[#1])-[#7]=[#7]-1)-[#7]-[#1],PAINS,6,1,ChEMBL,PAINS filters +495,4,anil_OC_no_alk_B(4),c:1:c(:c:2:c(:c:c:1):c:c:c:c:2)-[#8]-c:3:c(:c(:c(:c(:c:3-[#1])-[#1])-[#7]-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +496,4,styrene_C(4),c:1:c:c-2:c(:c:c:1)-[#6]-[#16]-c3c(-[#6]-2=[#6])ccs3,PAINS,6,1,ChEMBL,PAINS filters +497,4,azulene(4),c:2:c:c:c:1:c(:c:c:c:1):c:c:2,PAINS,6,1,ChEMBL,PAINS filters +498,4,furan_acid_A(4),c:1(:c(:c(:c(:o:1)-[#6](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#8]-[#6]:[#6])-[#1])-[#6](=[#8])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters +499,4,cyano_pyridone_E(4),[!#1]:[#6]-[#6]-1=[#6](-[#1])-[#6](=[#6](-[#6]#[#7])-[#6](=[#8])-[#7]-1-[#1])-[#6]:[#8],PAINS,6,1,ChEMBL,PAINS filters +500,4,anil_alk_thio(4),[#6]-1-3=[#6](-[#6](-[#7]-c:2:c:c:c:c:c-1:2)(-[#6])-[#6])-[#16]-[#16]-[#6]-3=[!#1],PAINS,6,1,ChEMBL,PAINS filters +501,4,anil_di_alk_I(4),c:1(:c(:c(:c(:c(:c:1-[#7](-[#1])-[#6](=[#8])-c:2:c:c:c:c:c:2)-[#1])-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +502,4,het_thio_6_furan(4),[#6](-[#1])(-[#1])-[#16;X2]-c:1:n:n:c(:c(:n:1)-c:2:c(:c(:c(:o:2)-[#1])-[#1])-[#1])-c:3:c(:c(:c(:o:3)-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +503,4,anil_di_alk_ene_B(4),[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-[#6]-2=[#6]-c:1:c(:c:c:c:c:1)-[#6]-2(-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +504,4,imine_one_B(4),"[#7](-[#1])(-c:1:c:c:c:c:c:1)-[#7]=[#6](-[#6](=[#8])-[#6](-[#1])-[#1])-[#7](-[#1])-[$([#7]-[#1]),$([#6]:[#6])]",PAINS,6,1,ChEMBL,PAINS filters +505,4,anil_OC_alk_A(4),c:1:2:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1]):o:c:3:c(-[#1]):c(:c(-[#8]-[#6](-[#1])-[#1]):c(:c:2:3)-[#1])-[#7](-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +506,4,ene_five_het_J(4),[#16]=[#6]-1-[#7](-[#1])-[#6]=[#6]-[#6]-2=[#6]-1-[#6](=[#8])-[#8]-[#6]-2=[#6]-[#1],PAINS,6,1,ChEMBL,PAINS filters +507,4,pyrrole_G(4),"n2(-c:1:c(:c:c(:c(:c:1)-[#1])-[$([#7](-[#1])-[#1]),$([#6]:[#7])])-[#1])c(c(-[#1])c(c2-[#1])-[#1])-[#1]",PAINS,6,1,ChEMBL,PAINS filters +508,4,ene_five_het_K(4),n1(-[#6])c(c(-[#1])c(c1-[#6](-[#1])=[#6]-2-[#6](=[#8])-[!#6&!#1]-[#6]=:[!#1]-2)-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +509,4,cyano_ene_amine_B(4),[#6]=[#6]-[#6](-[#6]#[#7])(-[#6]#[#7])-[#6](-[#6]#[#7])=[#6]-[#7](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +510,4,thio_ester_B(4),"[#6]:[#6]-[#6](=[#16;X1])-[#16;X2]-[#6](-[#1])-[$([#6](-[#1])-[#1]),$([#6]:[#6])]",PAINS,6,1,ChEMBL,PAINS filters +511,4,ene_five_het_L(4),[#8]=[#6]-3-[#6](=!@[#6](-[#1])-c:1:c:n:c:c:1)-c:2:c:c:c:c:c:2-[#7]-3,PAINS,6,1,ChEMBL,PAINS filters +512,4,hzone_thiophene_B(4),"c:1(:c(:c(:c(:s:1)-[#1])-[#1])-[$([#1]),$([#6](-[#1])-[#1])])-[#6](-[#1])=[#7]-[#7](-[#1])-c:2:c:c:c:c:c:2",PAINS,6,1,ChEMBL,PAINS filters +513,4,dhp_amino_CN_E(4),[#6](-[#1])(-[#1])-[#16;X2]-[#6]-1=[#6](-[#6]#[#7])-[#6](-[#1])(-[#6]:[#6])-[#6](-[#6]#[#7])-[#6](=[#8])-[#7]-1,PAINS,6,1,ChEMBL,PAINS filters +514,4,het_5_B(4),[#7]-2(-c:1:c:c:c:c:c:1)-[#7]=[#6](-[#7](-[#1])-[#6]=[#8])-[#6](-[#1])(-[#1])-[#6]-2=[#8],PAINS,6,1,ChEMBL,PAINS filters +515,4,imine_imine_B(3),[#6]:[#6]-[#6](-[#1])=[#6](-[#1])-[#6](-[#1])=[#7]-[#7]=[#6],PAINS,6,1,ChEMBL,PAINS filters +516,4,thiazole_amine_B(3),c:1(:c:c:c(:c:c:1)-[#6](-[#1])-[#1])-c:2:c(:s:c(:n:2)-[#7](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +517,4,imine_ene_one_A(3),[#6]-2(-[#6]=[#7]-c:1:c:c:c:c:c:1-[#7]-2)=[#6](-[#1])-[#6]=[#8],PAINS,6,1,ChEMBL,PAINS filters +518,4,diazox_A(3),[#8](-c:1:c:c:c:c:c:1)-c:3:c:c:2:n:o:n:c:2:c:c:3,PAINS,6,1,ChEMBL,PAINS filters +519,4,ene_one_A(3),[!#1]:1:[!#1]:[!#1]:[!#1](:[!#1]:[!#1]:1)-[#6](-[#1])=[#6](-[#1])-[#6](-[#7]-c:2:c:c:c:3:c(:c:2):c:c:c(:n:3)-[#7](-[#6])-[#6])=[#8],PAINS,6,1,ChEMBL,PAINS filters +520,4,anil_OC_no_alk_C(3),[#7](-[#1])(-[#1])-c:1:c(:c:c:c:n:1)-[#8]-[#6](-[#1])(-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +521,4,thiazol_SC_A(3),[#6]-[#16;X2]-c:1:n:c(:c:s:1)-[#1],PAINS,6,1,ChEMBL,PAINS filters +522,4,het_666_B(3),c:1:c-3:c(:c:c:c:1)-[#7](-c:2:c:c:c:c:c:2-[#8]-3)-[#6](-[#1])(-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +523,4,furan_A(3),c:1(:c(:c(:c(:o:1)-[#6](-[#1])-[#1])-[#1])-[#1])-[#6](-[#1])(-[#8]-[#1])-[#6]#[#6]-[#6;X4],PAINS,6,1,ChEMBL,PAINS filters +524,4,colchicine_A(3),[#6]-1(-[#6](=[#6]-[#6]=[#6]-[#6]=[#6]-1)-[#7]-[#1])=[#7]-[#6],PAINS,6,1,ChEMBL,PAINS filters +525,4,thiophene_C(3),"[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])=[#6]-[#6](=[#8])-c:1:c(-[#16;X2]):s:c(:c:1)-[$([#6]#[#7]),$([#6]=[#8])]",PAINS,6,1,ChEMBL,PAINS filters +526,4,anil_OC_alk_B(3),"c:1:3:c(:c:c:c:c:1)-[#7]-2-[#6](=[#8])-[#6](=[#6](-[F,Cl,Br,I])-[#6]-2=[#8])-[#7](-[#1])-[#6]:[#6]:[#6]:[#6](-[#8]-[#6](-[#1])-[#1]):[#6]:[#6]:3",PAINS,6,1,ChEMBL,PAINS filters +527,4,het_thio_66_A(3),c:1-2:c(:c:c:c:c:1)-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#7]=[#6]-2-[#16;X2]-[#6](-[#1])(-[#1])-[#6](=[#8])-c:3:c:c:c:c:c:3,PAINS,6,1,ChEMBL,PAINS filters +528,4,rhod_sat_B(3),[#7]-2(-c:1:c:c:c:c:c:1-[#6](-[#1])-[#1])-[#6](=[#16])-[#7](-[#6](-[#1])(-[#1])-[!#1]:[!#1]:[!#1]:[!#1]:[!#1])-[#6](-[#1])(-[#1])-[#6]-2=[#8],PAINS,6,1,ChEMBL,PAINS filters +529,4,ene_rhod_I(3),[#7]-2(-[#6](-[#1])-[#1])-[#6](=[#16])-[#7](-[#1])-[#6](=[#6](-[#1])-c:1:c:c:c:c(:c:1)-[Br])-[#6]-2=[#8],PAINS,6,1,ChEMBL,PAINS filters +530,4,keto_thiophene(3),c:1(:c(:c:2:c(:s:1):c:c:c:c:2)-[#6](-[#1])-[#1])-[#6](=[#8])-[#6](-[#1])(-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +531,4,imine_imine_C(3),[#7](-[#6](-[#1])-[#1])(-[#6](-[#1])-[#1])-[#6](-[#1])=[#7]-[#6](-[#6](-[#1])-[#1])=[#7]-[#7](-[#6](-[#1])-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +532,4,het_65_pyridone_A(3),"[#6]:2(:[#6](-[#6](-[#1])-[#1]):[#6]-1:[#6](-[#7]=[#6](-[#7](-[#6]-1=[!#6&!#1;X1])-[#6](-[#1])-[$([#6](=[#8])-[#8]),$([#6]:[#6])])-[$([#1]),$([#16]-[#6](-[#1])-[#1])]):[!#6&!#1;X2]:2)-[#6](-[#1])(-[#1])-[#6](-[#1])-[#1]",PAINS,6,1,ChEMBL,PAINS filters +533,4,thiazole_amine_C(3),"c:1(:n:c(:c(-[#1]):s:1)-[!#1]:[!#1]:[!#1](-[$([#8]-[#6](-[#1])-[#1]),$([#6](-[#1])-[#1])]):[!#1]:[!#1])-[#7](-[#1])-[#6](-[#1])(-[#1])-c:2:c(-[#1]):c(:c(-[#1]):o:2)-[#1]",PAINS,6,1,ChEMBL,PAINS filters +534,4,het_thio_pyr_A(3),n:1:c(:c(:c(:c(:c:1-[#16]-[#6]-[#1])-[#6]#[#7])-c:2:c:c:c(:c:c:2)-[#8]-[#6](-[#1])-[#1])-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +535,4,melamine_A(3),"c:1:4:c(:n:c(:n:c:1-[#7](-[#1])-[#6](-[#1])(-[#1])-c:2:c(:c(:c(:o:2)-[#1])-[#1])-[#1])-[#7](-[#1])-c:3:c:c(:c(:c:c:3-[$([#1]),$([#6](-[#1])-[#1]),$([#16;X2]),$([#8]-[#6]-[#1]),$([#7;X3])])-[$([#1]),$([#6](-[#1])-[#1]),$([#16;X2]),$([#8]-[#6]-[#1]),$([#7;X3])])-[$([#1]),$([#6](-[#1])-[#1]),$([#16;X2]),$([#8]-[#6]-[#1]),$([#7;X3])]):c:c:c:c:4",PAINS,6,1,ChEMBL,PAINS filters +536,4,anil_NH_alk_B(3),[#7](-[#1])(-[#6]:1:[#6]:[#6]:[!#1]:[#6]:[#6]:1)-c:2:c:c:c(:c:c:2)-[#7](-[#1])-[#6]-[#1],PAINS,6,1,ChEMBL,PAINS filters +537,4,rhod_sat_C(3),[#7]-2(-c:1:c:c:c:c:c:1)-[#6](=[#7]-[#6]=[#8])-[#16]-[#6](-[#1])(-[#1])-[#6]-2=[#8],PAINS,6,1,ChEMBL,PAINS filters +538,4,thiophene_amino_D(3),[#6]=[#6]-[#6](=[#8])-[#7]-c:1:c(:c(:c(:s:1)-[#6](=[#8])-[#8])-[#6]-[#1])-[#6]#[#7],PAINS,6,1,ChEMBL,PAINS filters +539,4,anil_OC_alk_C(3),"[$([#1]),$([#6](-[#1])-[#1])]-[#8]-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1])-[#7](-[#1])-[#6](-[#1])(-[#1])-c:2:n:c:c:n:2",PAINS,6,1,ChEMBL,PAINS filters +540,4,het_thio_65_A(3),[#6](-[#1])(-[#1])-[#16;X2]-c3nc1c(n(nc1-[#6](-[#1])-[#1])-c:2:c:c:c:c:c:2)nn3,PAINS,6,1,ChEMBL,PAINS filters +541,4,het_thio_656b(3),[#6]-[#6](=[#8])-[#6](-[#1])(-[#1])-[#16;X2]-c:3:n:n:c:2:c:1:c(:c(:c(:c(:c:1:n(:c:2:n:3)-[#1])-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +542,4,thiazole_amine_D(3),"s:1:c(:[n+](-[#6](-[#1])-[#1]):c(:c:1-[#1])-[#6])-[#7](-[#1])-c:2:c:c:c:c:c:2[$([#6](-[#1])-[#1]),$([#6]:[#6])]",PAINS,6,1,ChEMBL,PAINS filters +543,4,thio_urea_H(3),[#6]-2(=[#16])-[#7](-[#6](-[#1])(-[#1])-c:1:c:c:c:o:1)-[#6](=[#7]-[#7]-2-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +544,4,cyano_pyridone_F(3),[#7]-2(-c:1:c:c:c:c:c:1)-[#6](=[#8])-[#6](=[#6]-[#6](=[#7]-2)-[#6]#[#7])-[#6]#[#7],PAINS,6,1,ChEMBL,PAINS filters +545,4,rhod_sat_D(3),[#7]-2(-c:1:c:c:c:c:c:1)-[#6](=[#8])-[#16]-[#6](-[#1])(-[#6](-[#1])(-[#1])-[#6](=[#8])-[#7](-[#1])-[#6]:[#6])-[#6]-2=[#8],PAINS,6,1,ChEMBL,PAINS filters +546,4,ene_rhod_J(3),"[#6](-[#1])(-[#1])-[#7]-2-[#6](=[$([#16]),$([#7])])-[!#6&!#1]-[#6](=[#6]-1-[#6](=[#6](-[#1])-[#6]:[#6]-[#7]-1-[#6](-[#1])-[#1])-[#1])-[#6]-2=[#8]",PAINS,6,1,ChEMBL,PAINS filters +547,4,imine_phenol_A(3),[#6]=[#7;!R]-c:1:c:c:c:c:c:1-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters +548,4,thio_carbonate_B(3),[#8]=[#6]-2-[#16]-c:1:c(:c(:c:c:c:1)-[#8]-[#6](-[#1])-[#1])-[#8]-2,PAINS,6,1,ChEMBL,PAINS filters +549,4,het_thio_N_5A(3),[#7]=[#6]-1-[#7]=[#6]-[#7]-[#16]-1,PAINS,6,1,ChEMBL,PAINS filters +550,4,het_thio_N_65A(3),[#7]-2-[#16]-[#6]-1=[#6](-[#6]:[#6]-[#7]-[#6]-1)-[#6]-2=[#16],PAINS,6,1,ChEMBL,PAINS filters +551,4,anil_di_alk_J(3),[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#6](-[#1])=[#7]-[#7]=[#6](-[#6])-[#6]:[#6])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +552,4,pyrrole_H(3),n1-2cccc1-[#6]=[#7](-[#6])-[#6]-[#6]-2,PAINS,6,1,ChEMBL,PAINS filters +553,4,ene_cyano_D(3),[#6](-[#6]#[#7])(-[#6]#[#7])=[#6](-[#16])-[#16],PAINS,6,1,ChEMBL,PAINS filters +554,4,cyano_cyano_B(3),[#6]-1(-[#6]#[#7])(-[#6]#[#7])-[#6](-[#1])(-[#6](=[#8])-[#6])-[#6]-1-[#1],PAINS,6,1,ChEMBL,PAINS filters +555,4,ene_five_het_M(3),"[#6]-1=:[#6]-[#6](-[#6](-[$([#8]),$([#16])]-1)=[#6]-[#6]=[#8])=[#8]",PAINS,6,1,ChEMBL,PAINS filters +556,4,cyano_ene_amine_C(3),[#6]:[#6]-[#6](=[#8])-[#7](-[#1])-[#6](=[#8])-[#6](-[#6]#[#7])=[#6](-[#1])-[#7](-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +557,4,thio_urea_I(3),c:1(:c:c:c:c:c:1)-[#7](-[#1])-[#6](=[#16])-[#7](-[#1])-[#7]=[#6]-c:2:c:n:c:c:2,PAINS,6,1,ChEMBL,PAINS filters +558,4,dhp_amino_CN_F(3),[#7](-[#1])(-[#1])-[#6]-2=[#6](-[#6]#[#7])-[#6](-[#1])(-c:1:c:c:c:s:1)-[#6](=[#6](-[#6](-[#1])-[#1])-[#8]-2)-[#6](=[#8])-[#8]-[#6],PAINS,6,1,ChEMBL,PAINS filters +559,4,anthranil_acid_B(3),c:1:c-3:c(:c:c(:c:1)-[#6](=[#8])-[#7](-[#1])-c:2:c(:c:c:c:c:2)-[#6](=[#8])-[#8]-[#1])-[#6](-[#7](-[#6]-3=[#8])-[#6](-[#1])-[#1])=[#8],PAINS,6,1,ChEMBL,PAINS filters +560,4,diazox_B(3),[Cl]-c:2:c:c:1:n:o:n:c:1:c:c:2,PAINS,6,1,ChEMBL,PAINS filters +561,4,thio_aldehyd_A(3),[#6]-[#6](=[#16])-[#1],PAINS,6,1,ChEMBL,PAINS filters +562,4,thio_amide_B(2),[#6;X4]-[#7](-[#1])-[#6](-[#6]:[#6])=[#6](-[#1])-[#6](=[#16])-[#7](-[#1])-c:1:c:c:c:c:c:1,PAINS,6,1,ChEMBL,PAINS filters +563,4,imidazole_B(2),[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#16]-[#6](-[#1])(-[#1])-c1cn(cn1)-[#1],PAINS,6,1,ChEMBL,PAINS filters +564,4,thiazole_amine_E(2),[#8]=[#6]-[#7](-[#1])-c:1:c(-[#6]:[#6]):n:c(-[#6](-[#1])(-[#1])-[#6]#[#7]):s:1,PAINS,6,1,ChEMBL,PAINS filters +565,4,thiazole_amine_F(2),[#6](-[#1])-[#7](-[#1])-c:1:n:c(:c:s:1)-c2cnc3n2ccs3,PAINS,6,1,ChEMBL,PAINS filters +566,4,thio_ester_C(2),[#7]-1-[#6](=[#8])-[#6](=[#6](-[#6])-[#16]-[#6]-1=[#16])-[#1],PAINS,6,1,ChEMBL,PAINS filters +567,4,ene_one_B(2),[#6](-[#16])(-[#7])=[#6](-[#1])-[#6]=[#6](-[#1])-[#6]=[#8],PAINS,6,1,ChEMBL,PAINS filters +568,4,quinone_C(2),[#8]=[#6]-3-c:1:c(:c:c:c:c:1)-[#6]-2=[#6](-[#8]-[#1])-[#6](=[#8])-[#7]-c:4:c-2:c-3:c:c:c:4,PAINS,6,1,ChEMBL,PAINS filters +569,4,keto_naphthol_A(2),"c:1:2:c:c:c:c(:c:1:c(:c:c:c:2)-[$([#8]-[#1]),$([#7](-[#1])-[#1])])-[#6](-[#6])=[#8]",PAINS,6,1,ChEMBL,PAINS filters +570,4,thio_amide_C(2),[#6](-[#1])(-c:1:c:c:c:c:c:1)(-c:2:c:c:c:c:c:2)-[#6](=[#16])-[#7]-[#1],PAINS,6,1,ChEMBL,PAINS filters +571,4,phthalimide_misc(2),[#7]-2(-[#6](=[#8])-c:1:c(:c(:c(:c(:c:1-[#1])-[#6](=[#8])-[#8]-[#1])-[#1])-[#1])-[#6]-2=[#8])-c:3:c(:c:c(:c(:c:3)-[#1])-[#8])-[#1],PAINS,6,1,ChEMBL,PAINS filters +572,4,sulfonamide_D(2),c:1:c:c(:c:c:c:1-[#7](-[#1])-[#16](=[#8])=[#8])-[#7](-[#1])-[#16](=[#8])=[#8],PAINS,6,1,ChEMBL,PAINS filters +573,4,anil_NH_alk_C(2),[#6](-[#1])-[#7](-[#1])-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1])-[#7](-[#1])-[#6]-[#1],PAINS,6,1,ChEMBL,PAINS filters +574,4,het_65_E(2),s1c(c(c-2c1-[#7](-[#1])-[#6](-[#6](=[#6]-2-[#1])-[#6](=[#8])-[#8]-[#1])=[#8])-[#7](-[#1])-[#1])-[#6](=[#8])-[#7]-[#1],PAINS,6,1,ChEMBL,PAINS filters +575,4,hzide_naphth(2),c:2(:c:1:c(:c(:c(:c(:c:1:c(:c(:c:2-[#1])-[#1])-[#1])-[#1])-[#7](-[#1])-[#7](-[#1])-[#6]=[#8])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +576,4,anisol_B(2),[#6](-[#1])(-[#1])-c:1:c(:c(:c(:c(:c:1-[#8]-[#6](-[#1])-[#1])-[#1])-[#1])-[#6](-[#1])(-[#1])-[#7](-[#1])-[#6;X4])-[#1],PAINS,6,1,ChEMBL,PAINS filters +577,4,thio_carbam_ene(2),[#6]-1=[#6]-[#7]-[#6](-[#16]-[#6;X4]-1)=[#16],PAINS,6,1,ChEMBL,PAINS filters +578,4,thio_amide_D(2),[#6](-[#7](-[#6]-[#1])-[#6]-[#1]):[#6]-[#7](-[#1])-[#6](=[#16])-[#6]-[#1],PAINS,6,1,ChEMBL,PAINS filters +579,4,het_65_Da(2),n2nc(c1cccc1c2-[#6])-[#6],PAINS,6,1,ChEMBL,PAINS filters +580,4,thiophene_D(2),s:1:c(:c(-[#1]):c(:c:1-[#6](=[#8])-[#7](-[#1])-[#7]-[#1])-[#8]-[#6](-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +581,4,het_thio_6_ene(2),[#6]-1:[#6]-[#7]=[#6]-[#6](=[#6]-[#7]-[#6])-[#16]-1,PAINS,6,1,ChEMBL,PAINS filters +582,4,cyano_keto_A(2),[#6](-[#1])(-[#1])-[#6](-[#1])(-[#6]#[#7])-[#6](=[#8])-[#6],PAINS,6,1,ChEMBL,PAINS filters +583,4,anthranil_acid_C(2),"c2(c(-[#7](-[#1])-[#1])n(-c:1:c:c:c:c:c:1-[#6](=[#8])-[#8]-[#1])nc2-[#6]=[#8])-[$([#6]#[#7]),$([#6]=[#16])]",PAINS,6,1,ChEMBL,PAINS filters +584,4,naphth_amino_C(2),c:2:c:1:c:c:c:c-3:c:1:c(:c:c:2)-[#7](-[#7]=[#6]-3)-[#1],PAINS,6,1,ChEMBL,PAINS filters +585,4,naphth_amino_D(2),c:2:c:1:c:c:c:c-3:c:1:c(:c:c:2)-[#7]-[#7]=[#7]-3,PAINS,6,1,ChEMBL,PAINS filters +586,4,thiazole_amine_G(2),c1csc(n1)-[#7]-[#7]-[#16](=[#8])=[#8],PAINS,6,1,ChEMBL,PAINS filters +587,4,het_66_B(2),c:1:c:c:c:2:c(:c:1):n:c(:n:c:2)-[#7](-[#1])-[#6]-3=[#7]-[#6](-[#6]=[#6]-[#7]-3-[#1])(-[#6](-[#1])-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +588,4,coumarin_A(2),c:1-3:c(:c(:c(:c(:c:1)-[#8]-[#6]-[#1])-[#1])-[#1])-c:2:c(:c(:c(:c(:c:2-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#1])-[#6](=[#8])-[#8]-3,PAINS,6,1,ChEMBL,PAINS filters +589,4,anthranil_acid_D(2),c:12:c(:c:c:c:n:1)c(c(-[#6](=[#8])~[#8;X1])s2)-[#7](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +590,4,het_66_C(2),c:1:2:n:c(:c(:n:c:1:[#6]:[#6]:[#6]:[!#1]:2)-[#6](-[#1])=[#6](-[#8]-[#1])-[#6])-[#6](-[#1])=[#6](-[#8]-[#1])-[#6],PAINS,6,1,ChEMBL,PAINS filters +591,4,thiophene_amino_E(2),c1csc(c1-[#7](-[#1])-[#1])-[#6](-[#1])=[#6](-[#1])-c2cccs2,PAINS,6,1,ChEMBL,PAINS filters +592,4,het_6666_A(2),c:2:c:c:1:n:c:3:c(:n:c:1:c:c:2):c:c:c:4:c:3:c:c:c:c:4,PAINS,6,1,ChEMBL,PAINS filters +593,4,sulfonamide_E(2),[#6]:[#6]-[#7](-[#1])-[#16](=[#8])(=[#8])-[#7](-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +594,4,anil_di_alk_K(2),c:1:c:c(:c:c:c:1-[#7](-[#1])-[#1])-[#7](-[#6;X3])-[#6;X3],PAINS,6,1,ChEMBL,PAINS filters +595,4,het_5_C(2),"[#7]-2=[#6](-c:1:c:c:c:c:c:1)-[#6](-[#1])(-[#1])-[#6](-[#8]-[#1])(-[#6](-[#9])(-[#9])-[#9])-[#7]-2-[$([#6]:[#6]:[#6]:[#6]:[#6]:[#6]),$([#6](=[#16])-[#6]:[#6]:[#6]:[#6]:[#6]:[#6])]",PAINS,6,1,ChEMBL,PAINS filters +596,4,ene_six_het_B(2),c:1:c(:c:c:c:c:1)-[#6](=[#8])-[#6](-[#1])=[#6]-3-[#6](=[#8])-[#7](-[#1])-[#6](=[#8])-[#6](=[#6](-[#1])-c:2:c:c:c:c:c:2)-[#7]-3-[#1],PAINS,6,1,ChEMBL,PAINS filters +597,4,steroid_A(2),[#8]=[#6]-4-[#6]-[#6]-[#6]-3-[#6]-2-[#6](=[#8])-[#6]-[#6]-1-[#6]-[#6]-[#6]-[#6]-1-[#6]-2-[#6]-[#6]-[#6]-3=[#6]-4,PAINS,6,1,ChEMBL,PAINS filters +598,4,het_565_A(2),c:1:2:c:3:c(:c(-[#8]-[#1]):c(:c:1:c(:c:n:2-[#6])-[#6]=[#8])-[#1]):n:c:n:3,PAINS,6,1,ChEMBL,PAINS filters +599,4,thio_imine_ium(2),[#6;X4]-[#7+](-[#6;X4]-[#8]-[#1])=[#6]-[#16]-[#6]-[#1],PAINS,6,1,ChEMBL,PAINS filters +600,4,anthranil_acid_E(2),[#6]-3(=[#8])-[#6](=[#6](-[#1])-[#7](-[#1])-c:1:c:c:c:c:c:1-[#6](=[#8])-[#8]-[#1])-[#7]=[#6](-c:2:c:c:c:c:c:2)-[#8]-3,PAINS,6,1,ChEMBL,PAINS filters +601,4,hzone_furan_B(2),"c:1(:c(:c(:c(:o:1)-[$([#1]),$([#6](-[#1])-[#1])])-[#1])-[#1])-[#6](-[$([#1]),$([#6](-[#1])-[#1])])=[#7]-[#7](-[#1])-c:2:c:c:n:c:c:2",PAINS,6,1,ChEMBL,PAINS filters +602,4,thiophene_E(2),"c:1(:c(:c(:c(:s:1)-[$([#1]),$([#6](-[#1])-[#1])])-[#1])-[#1])-[#6](-[$([#1]),$([#6](-[#1])-[#1])])-[#6](=[#8])-[#7](-[#1])-c:2:n:c:c:s:2",PAINS,6,1,ChEMBL,PAINS filters +603,4,ene_misc_B(2),[#6]:[#6]-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#6]=[#8])-[#7]-2-[#6](=[#8])-[#6]-1(-[#1])-[#6](-[#1])(-[#1])-[#6]=[#6]-[#6](-[#1])(-[#1])-[#6]-1(-[#1])-[#6]-2=[#8],PAINS,6,1,ChEMBL,PAINS filters +604,4,het_thio_5_B(2),[#6]-1(-[#6]=[#8])(-[#6]:[#6])-[#16;X2]-[#6]=[#7]-[#7]-1-[#1],PAINS,6,1,ChEMBL,PAINS filters +605,4,thiophene_amino_F(2),[#7](-[#1])(-[#1])-c:1:c(:c(:c(:s:1)-[#7](-[#1])-[#6](=[#8])-c:2:c:c:c:c:c:2)-[#6]#[#7])-[#6]:3:[!#1]:[!#1]:[!#1]:[!#1]:[!#1]:3,PAINS,6,1,ChEMBL,PAINS filters +606,4,anil_OC_alk_D(2),"[#6](-[#1])(-[#1])-[#8]-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#6](-[#1])-[#1])-[#1])-[#7](-[#1])-[#6](-[#1])(-[#1])-c:2:c:c:c:c:c:2-[$([#6](-[#1])-[#1]),$([#8]-[#6](-[#1])-[#1])]",PAINS,6,1,ChEMBL,PAINS filters +607,4,tert_butyl_A(2),[#6](-[#1])(-[#1])(-[#1])-[#6](-[#6](-[#1])(-[#1])-[#1])(-[#6](-[#1])(-[#1])-[#1])-c:1:c(:c:c(:c(:c:1-[#1])-[#6](-[#6](-[#1])(-[#1])-[#1])(-[#6](-[#1])(-[#1])-[#1])-[#6](-[#1])(-[#1])-[#1])-[#8]-[#6](-[#1])-[#7])-[#1],PAINS,6,1,ChEMBL,PAINS filters +608,4,thio_urea_J(2),c:1(:c(:o:c:c:1)-[#6]-[#1])-[#6]=[#7]-[#7](-[#1])-[#6](=[#16])-[#7]-[#1],PAINS,6,1,ChEMBL,PAINS filters +609,4,het_thio_65_B(2),[#7](-[#1])-c1nc(nc2nnc(n12)-[#16]-[#6])-[#7](-[#1])-[#6],PAINS,6,1,ChEMBL,PAINS filters +610,4,coumarin_B(2),c:1-2:c(:c:c:c:c:1-[#6](-[#1])(-[#1])-[#6](-[#1])=[#6](-[#1])-[#1])-[#6](=[#6](-[#6](=[#8])-[#7](-[#1])-[#6]:[#6])-[#6](=[#8])-[#8]-2)-[#1],PAINS,6,1,ChEMBL,PAINS filters +611,4,thio_urea_K(2),[#6]-2(=[#16])-[#7]-1-[#6]:[#6]-[#7]=[#7]-[#6]-1=[#7]-[#7]-2-[#1],PAINS,6,1,ChEMBL,PAINS filters +612,4,thiophene_amino_G(2),[#6]:[#6]:[#6]:[#6]:[#6]:[#6]-c:1:c:c(:c(:s:1)-[#7](-[#1])-[#6](=[#8])-[#6])-[#6](=[#8])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters +613,4,anil_NH_alk_D(2),[#7](-[#1])(-[#1])-c:1:c(:c(:c(:c:c:1-[#7](-[#1])-[#6](-[#1])(-[#6])-[#6](-[#1])-[#6](-[#1])-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +614,4,het_thio_5_C(2),[#16]=[#6]-2-[#7](-[#1])-[#7]=[#6](-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#1])-[#1])-[#8]-2,PAINS,6,1,ChEMBL,PAINS filters +615,4,thio_keto_het(2),[#16]=[#6]-c:1:c:c:c:2:c:c:c:c:n:1:2,PAINS,6,1,ChEMBL,PAINS filters +616,4,het_thio_N_5B(2),[#6]~1~[#6](~[#7]~[#7]~[#6](~[#6](-[#1])-[#1])~[#6](-[#1])-[#1])~[#7]~[#16]~[#6]~1,PAINS,6,1,ChEMBL,PAINS filters +617,4,quinone_D(2),[#6]-1(-[#6]=:[#6]-[#6]=:[#6]-[#6]-1=[!#6&!#1])=[!#6&!#1],PAINS,6,1,ChEMBL,PAINS filters +618,4,anil_di_alk_furan_B(2),[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-c:1:c(-[#1]):c(:c(:o:1)-[#6](-[#1])=[#6]-[#6]#[#7])-[#1],PAINS,6,1,ChEMBL,PAINS filters +619,4,ene_six_het_C(2),[#8]=[#6]-1-[#6]:[#6]-[#6](-[#1])(-[#1])-[#7]-[#6]-1=[#6]-[#1],PAINS,6,1,ChEMBL,PAINS filters +620,4,het_55_A(2),[#6]:[#6]-[#7]:2:[#7]:[#6]:1-[#6](-[#1])(-[#1])-[#16;X2]-[#6](-[#1])(-[#1])-[#6]:1-[#6]:2-[#7](-[#1])-[#6](=[#8])-[#6](-[#1])=[#6]-[#1],PAINS,6,1,ChEMBL,PAINS filters +621,4,het_thio_65_C(2),n:1:c(:n(:c:2:c:1:c:c:c:c:2)-[#6](-[#1])-[#1])-[#16]-[#6](-[#1])(-[#1])-[#6](=[#8])-[#7](-[#1])-[#7]=[#6](-[#1])-[#6](-[#1])=[#6]-[#1],PAINS,6,1,ChEMBL,PAINS filters +622,4,hydroquin_A(2),c:1(:c:c(:c(:c:c:1)-[#8]-[#1])-[#6](=!@[#6]-[#7])-[#6]=[#8])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters +623,4,anthranil_acid_F(2),c:1(:c:c(:c(:c:c:1)-[#7](-[#1])-[#6](=[#8])-[#6]:[#6])-[#6](=[#8])-[#8]-[#1])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters +624,4,pyrrole_I(2),n2(-[#6](-[#1])-[#1])c-1c(-[#6]:[#6]-[#6]-1=[#8])cc2-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +625,4,thiophene_amino_H(2),[#6](-[#1])-[#7](-[#1])-c:1:c(:c(:c(:s:1)-[#6]-[#1])-[#6]-[#1])-[#6](=[#8])-[#7](-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +626,4,imine_one_fives_C(2),[#6]:[#6]-[#7;!R]=[#6]-2-[#6](=[!#6&!#1])-c:1:c:c:c:c:c:1-[#7]-2,PAINS,6,1,ChEMBL,PAINS filters +627,4,keto_phenone_zone_A(2),c:1:c:c:c:c:c:1-[#6](=[#8])-[#7](-[#1])-[#7]=[#6]-3-c:2:c:c:c:c:c:2-c:4:c:c:c:c:c-3:4,PAINS,6,1,ChEMBL,PAINS filters +628,4,dyes7A(2),c:1:c(:c:c:c:c:1)-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])=[#6](-[#1])-[#6]=!@[#6](-[#1])-[#6](-[#1])=[#6]-[#6]=@[#7]-c:2:c:c:c:c:c:2,PAINS,6,1,ChEMBL,PAINS filters +629,4,het_pyridiniums_B(2),[#6]:1:2:[!#1]:[#7+](:[!#1]:[#6](:[!#1]:1:[#6]:[#6]:[#6]:[#6]:2)-[*])~[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +630,4,het_5_D(2),[#7]-2(-c:1:c:c:c:c:c:1)-[#7]=[#6](-[#6](-[#1])-[#1])-[#6](-[#1])(-[#16]-[#6])-[#6]-2=[#8],PAINS,6,1,ChEMBL,PAINS filters +631,4,thiazole_amine_H(1),c:1:c:c:c(:c:c:1-[#7](-[#1])-c2nc(c(-[#1])s2)-c:3:c:c:c(:c:c:3)-[#6](-[#1])(-[#6]-[#1])-[#6]-[#1])-[#6](=[#8])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters +632,4,thiazole_amine_I(1),[#6](-[#1])(-[#1])-[#7](-[#1])-[#6]=[#7]-[#7](-[#1])-c1nc(c(-[#1])s1)-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +633,4,het_thio_N_5C(1),[#6]:[#6]-[#7](-[#1])-[#6](=[#8])-c1c(snn1)-[#7](-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +634,4,sulfonamide_F(1),[#8]=[#16](=[#8])(-[#6]:[#6])-[#7](-[#1])-c1nc(cs1)-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +635,4,thiazole_amine_J(1),[#8]=[#16](=[#8])(-[#6]:[#6])-[#7](-[#1])-[#7](-[#1])-c1nc(cs1)-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +636,4,het_65_F(1),s2c:1:n:c:n:c(:c:1c(c2-[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#7]-[#7]=[#6]-c3ccco3,PAINS,6,1,ChEMBL,PAINS filters +637,4,keto_keto_beta_E(1),[#6](=[#8])-[#6](-[#1])=[#6](-[#8]-[#1])-[#6](-[#8]-[#1])=[#6](-[#1])-[#6](=[#8])-[#6],PAINS,6,1,ChEMBL,PAINS filters +638,4,ene_five_one_B(1),c:2(:c:1-[#6](-[#6](-[#6](-c:1:c(:c(:c:2-[#1])-[#1])-[#1])(-[#1])-[#1])=[#8])=[#6](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +639,4,keto_keto_beta_zone(1),[#6]:[#6]-[#7](-[#1])-[#7]=[#6](-[#6](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#6](-[#6](-[#1])-[#1])=[#7]-[#7](-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +640,4,thio_urea_L(1),[#6;X4]-[#16;X2]-[#6](=[#7]-[!#1]:[!#1]:[!#1]:[!#1])-[#7](-[#1])-[#7]=[#6],PAINS,6,1,ChEMBL,PAINS filters +641,4,het_thio_urea_ene(1),[#6]-1(=[#7]-[#7](-[#6](-[#16]-1)=[#6](-[#1])-[#6]:[#6])-[#6]:[#6])-[#6]=[#8],PAINS,6,1,ChEMBL,PAINS filters +642,4,cyano_amino_het_A(1),c:1(:c(:c:2:c(:n:c:1-[#7](-[#1])-[#1]):c:c:c(:c:2-[#7](-[#1])-[#1])-[#6]#[#7])-[#6]#[#7])-[#6]#[#7],PAINS,6,1,ChEMBL,PAINS filters +643,4,tetrazole_hzide(1),[!#1]:1:[!#1]:[!#1]:[!#1](:[!#1]:[!#1]:1)-[#6](-[#1])=[#6](-[#1])-[#6](-[#7](-[#1])-[#7](-[#1])-c2nnnn2-[#6])=[#8],PAINS,6,1,ChEMBL,PAINS filters +644,4,imine_naphthol_A(1),c:1:2:c(:c(:c(:c(:c:1:c(:c(:c(:c:2-[#1])-[#1])-[#6](=[#7]-[#6]:[#6])-[#6](-[#1])-[#1])-[#8]-[#1])-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +645,4,misc_anisole_A(1),c:1(:c(:c:2:c(:c(:c:1-[#8]-[#6](-[#1])-[#1])-[#1]):c(:c(:c(:c:2-[#7](-[#1])-[#6](-[#1])(-[#1])-[#1])-[#1])-c:3:c(:c(:c(:c(:c:3-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#1])-[#1])-[#1])-[#8]-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +646,4,het_thio_665(1),c:1:c:c-2:c(:c:c:1)-[#16]-c3c(-[#7]-2)cc(s3)-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +647,4,anil_di_alk_L(1),c:1:c:c:c-2:c(:c:1)-[#6](-[#6](-[#7]-2-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#7]-4-[#6](-c:3:c:c:c:c:c:3-[#6]-4=[#8])=[#8])(-[#1])-[#1])(-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +648,4,colchicine_B(1),c:1(:c:c:c(:c:c:1)-[#6]-3=[#6]-[#6](-c2cocc2-[#6](=[#6]-3)-[#8]-[#1])=[#8])-[#16]-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +649,4,misc_aminoacid_A(1),[#6;X4]-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#6](=[#8])-[#7](-[#1])-[#6](-[#1])(-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#16]-[#6](-[#1])(-[#1])-[#1])-[#6](=[#8])-[#8]-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +650,4,imidazole_amino_A(1),n:1:c(:n(:c(:c:1-c:2:c:c:c:c:c:2)-c:3:c:c:c:c:c:3)-[#7]=!@[#6])-[#7](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +651,4,phenol_sulfite_A(1),[#6](-c:1:c:c:c(:c:c:1)-[#8]-[#1])(-c:2:c:c:c(:c:c:2)-[#8]-[#1])-[#8]-[#16](=[#8])=[#8],PAINS,6,1,ChEMBL,PAINS filters +652,4,het_66_D(1),c:2:c:c:1:n:c(:c(:n:c:1:c:c:2)-[#6](-[#1])(-[#1])-[#6](=[#8])-[#6]:[#6])-[#6](-[#1])(-[#1])-[#6](=[#8])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +653,4,misc_anisole_B(1),c:1(:c(:c(:c(:c(:c:1-[#1])-[#8]-[#6](-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#1])-[#1])-[#6](=[#8])-[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-c:2:c:c:c(-[#6](-[#1])-[#1])c:c:2,PAINS,6,1,ChEMBL,PAINS filters +654,4,tetrazole_A(1),[#6](-[#1])(-[#1])-c1nnnn1-c:2:c(:c(:c(:c(:c:2-[#1])-[#1])-[#8]-[#6](-[#1])(-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +655,4,het_65_G(1),[#6]-2(=[#7]-c1c(c(nn1-[#6](-[#6]-2(-[#1])-[#1])=[#8])-[#7](-[#1])-[#1])-[#7](-[#1])-[#1])-[#6],PAINS,6,1,ChEMBL,PAINS filters +656,4,misc_trityl_A(1),[#6](-[#6]:[#6])(-[#6]:[#6])(-[#6]:[#6])-[#16]-[#6]:[#6]-[#6](=[#8])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters +657,4,misc_pyridine_OC(1),[#8]=[#6](-c:1:c(:c(:n:c(:c:1-[#1])-[#8]-[#6](-[#1])(-[#1])-[#1])-[#8]-[#6](-[#1])(-[#1])-[#1])-[#1])-[#7](-[#1])-[#6](-[#1])(-[#6](-[#1])-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +658,4,het_6_hydropyridone(1),[#7]-1=[#6](-[#7](-[#6](-[#6](-[#6]-1(-[#1])-[#6]:[#6])(-[#1])-[#1])=[#8])-[#1])-[#7]-[#1],PAINS,6,1,ChEMBL,PAINS filters +659,4,misc_stilbene(1),[#6]-1(=[#6](-[#6](-[#6](-[#6](-[#6]-1(-[#1])-[#1])(-[#1])-[#6](=[#8])-[#6])(-[#1])-[#6](=[#8])-[#8]-[#1])(-[#1])-[#1])-[#6]:[#6])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +660,4,misc_imidazole(1),[#6](-[#1])(-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[Cl])-[#1])-[#1])(-c:2:c(:c(:c(:c(:c:2-[#1])-[#1])-[Cl])-[#1])-[#1])-[#8]-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-c3nc(c(n3-[#6](-[#1])(-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +661,4,anil_NH_no_alk_A(1),n:1:c(:c(:c(:c(:c:1-[#1])-[#7](-[#1])-[#1])-[#1])-[#1])-[#7](-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +662,4,het_6_imidate_B(1),[#7](-[#1])(-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1])-[#8]-[#1])-[#6]-2=[#6](-[#8]-[#6](-[#7]=[#7]-2)=[#7])-[#7](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +663,4,anil_alk_B(1),[#7](-[#1])(-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#6](-[#1])-[#1])-[#1])-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-c:2:c(:c(:c(:c(:c:2-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +664,4,styrene_anil_A(1),c:1:c:c-3:c(:c:c:1)-c:2:c:c:c(:c:c:2-[#6]-3=[#6](-[#1])-[#6])-[#7](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +665,4,misc_aminal_acid(1),c:1:c:c-2:c(:c:c:1)-[#7](-[#6](-[#8]-[#6]-2)(-[#6](=[#8])-[#8]-[#1])-[#6](-[#1])-[#1])-[#6](=[#8])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +666,4,anil_no_alk_D(1),n:1:c(:c(:c(:c(:c:1-[#7](-[#1])-[#1])-[#6](-[#1])-[#1])-[#1])-[#6](-[#1])-[#1])-[#7](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +667,4,anil_alk_C(1),[#7](-[#1])(-c:1:c:c:c:c:c:1)-[#6](-[#6])(-[#6])-c:2:c(:c(:c(:c(:c:2-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +668,4,misc_anisole_C(1),[#7](-[#1])(-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#8]-[#6](-[#1])(-[#1])-[#1])-[#8]-[#6]-[#1])-[#1])-[#6](=[#8])-[#7](-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])(-[#1])-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +669,4,het_465_misc(1),c:1-2:c:c-3:c(:c:c:1-[#8]-[#6]-[#8]-2)-[#6]-[#6]-3,PAINS,6,1,ChEMBL,PAINS filters +670,4,anthranil_acid_G(1),c:1(:c(:c(:c(:c(:c:1-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#1])-[#6](=[#8])-[#8]-[#1])-[#7](-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +671,4,anil_di_alk_M(1),c:1(:c:4:c(:n:c(:c:1-[#6](-[#1])(-[#1])-[#7]-3-c:2:c(:c(:c(:c(:c:2-[#6](-[#1])(-[#1])-[#6]-3(-[#1])-[#1])-[#1])-[#1])-[#1])-[#1])-[#1]):c(:c(:c(:c:4-[#1])-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +672,4,anthranil_acid_H(1),c:1:c(:c2:c(:c:c:1)c(c(n2-[#1])-[#6]:[#6])-[#6]:[#6])-[#6](=[#8])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters +673,4,thio_urea_M(1),"[#6]:[#6]-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#7](-[#1])-[#6](=[#16])-[#7](-[#1])-c:1:c(:c(:c(:c(:c:1-[F,Cl,Br,I])-[#1])-[#6](-[#1])-[#1])-[#1])-[#1]",PAINS,6,1,ChEMBL,PAINS filters +674,4,thiazole_amine_K(1),n:1:c3:c(:c:c2:c:1nc(s2)-[#7])sc(n3)-[#7],PAINS,6,1,ChEMBL,PAINS filters +675,4,het_thio_5_imine_A(1),[#7]=[#6]-1-[#16]-[#6](=[#7])-[#7]=[#6]-1,PAINS,6,1,ChEMBL,PAINS filters +676,4,thio_amide_E(1),c:1:c(:n:c:c:c:1)-[#6](=[#16])-[#7](-[#1])-c:2:c(:c:c:c:c:2)-[#8]-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +677,4,het_thio_676_B(1),c:1-2:c(:c(:c(:c(:c:1-[#6](-c:3:c(-[#16]-[#6]-2(-[#1])-[#1]):c(:c(-[#1]):c(:c:3-[#1])-[#1])-[#1])-[#8]-[#6]:[#6])-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +678,4,sulfonamide_G(1),[#6](-[#1])(-[#1])(-[#1])-c:1:c(:c(:c(:c(:n:1)-[#7](-[#1])-[#16](-c:2:c(:c(:c(:c(:c:2-[#1])-[#1])-[#8]-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])-[#1])-[#1])-[#1])(=[#8])=[#8])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +679,4,thio_thiomorph_Z(1),[#6](=[#8])(-[#7]-1-[#6]-[#6]-[#16]-[#6]-[#6]-1)-c:2:c(:c(:c(:c(:c:2-[#16]-[#6](-[#1])-[#1])-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +680,4,naphth_ene_one_A(1),c:1:c:c:3:c:2:c(:c:1)-[#6](-[#6]=[#6](-c:2:c:c:c:3)-[#8]-[#6](-[#1])-[#1])=[#8],PAINS,6,1,ChEMBL,PAINS filters +681,4,naphth_ene_one_B(1),c:1-3:c:2:c(:c(:c:c:1)-[#7]):c:c:c:c:2-[#6](-[#6]=[#6]-3-[#6](-[F])(-[F])-[F])=[#8],PAINS,6,1,ChEMBL,PAINS filters +682,4,amino_acridine_A(1),c:1:c:c:c:c:2:c:1:c:c:3:c(:n:2):n:c:4:c(:c:3-[#7]):c:c:c:c:4,PAINS,6,1,ChEMBL,PAINS filters +683,4,keto_phenone_B(1),c:1:c-3:c(:c:c:c:1)-[#6]-2=[#7]-[!#1]=[#6]-[#6]-[#6]-2-[#6]-3=[#8],PAINS,6,1,ChEMBL,PAINS filters +684,4,hzone_acid_A(1),c:1-3:c(:c(:c(:c(:c:1-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#1])-[#6](=[#7]-[#7](-[#1])-c:2:c(:c(:c(:c(:c:2-[#1])-[#1])-[#6](=[#8])-[#8]-[#1])-[#1])-[#1])-c:4:c-3:c(:c(:c(:c:4-[#1])-[#8]-[#6](-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +685,4,sulfonamide_H(1),c:1(:c(:c(:c(:c(:c:1-[#1])-[#1])-[#7](-[#1])-[#1])-[#1])-[#1])-[#16](=[#8])(=[#8])-[#7](-[#1])-c:2:n:n:c(:c(:c:2-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +686,4,het_565_indole(1),c2(c(-[#1])n(-[#6](-[#1])-[#1])c:3:c(:c(:c:1n(c(c(c:1:c2:3)-[#1])-[#1])-[#6](-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +687,4,pyrrole_J(1),c1(c-2c(c(n1-[#6](-[#8])=[#8])-[#6](-[#1])-[#1])-[#16]-[#6](-[#1])(-[#1])-[#16]-2)-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +688,4,pyrazole_amino_B(1),s1ccnc1-c2c(n(nc2-[#1])-[#1])-[#7](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +689,4,pyrrole_K(1),c1(c(c(c(n1-[#1])-c:2:c(:c(:c(:c(:c:2-[#1])-[#1])-[#1])-[#1])-[#1])-[#6](-[#1])-[#1])-[#1])-[#6](=[#8])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters +690,4,anthranil_acid_I(1),c:1:2(:c(:c(:c(:o:1)-[#6])-[#1])-[#1])-[#6](=[#8])-[#7](-[#1])-[#6]:[#6](-[#1]):[#6](-[#1]):[#6](-[#1]):[#6](-[#1]):[#6]:2-[#6](=[#8])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters +691,4,thio_amide_F(1),[!#1]:[#6]-[#6](=[#16])-[#7](-[#1])-[#7](-[#1])-[#6]:[!#1],PAINS,6,1,ChEMBL,PAINS filters +692,4,ene_one_C(1),[#6]-1(=[#8])-[#6](-[#6](-[#6]#[#7])=[#6](-[#1])-[#7])-[#6](-[#7])-[#6]=[#6]-1,PAINS,6,1,ChEMBL,PAINS filters +693,4,het_65_H(1),c2(c-1n(-[#6](-[#6]=[#6]-[#7]-1)=[#8])nc2-c3cccn3)-[#6]#[#7],PAINS,6,1,ChEMBL,PAINS filters +694,4,cyano_imine_D(1),[#8]=[#6]-1-[#6](=[#7]-[#7]-[#6]-[#6]-1)-[#6]#[#7],PAINS,6,1,ChEMBL,PAINS filters +695,4,cyano_misc_A(1),c:2(:c:1:c:c:c:c:c:1:n:n:c:2)-[#6](-[#6]:[#6])-[#6]#[#7],PAINS,6,1,ChEMBL,PAINS filters +696,4,ene_misc_C(1),c:1:c:c-2:c(:c:c:1)-[#6]=[#6]-[#6](-[#7]-2-[#6](=[#8])-[#7](-[#1])-c:3:c:c(:c(:c:c:3)-[#8]-[#6](-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])(-[#6](-[#1])-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +697,4,het_66_E(1),c:2:c:c:1:n:c(:c(:n:c:1:c:c:2)-c:3:c:c:c:c:c:3)-c:4:c:c:c:c:c:4-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters +698,4,keto_keto_beta_F(1),[#6](-[#1])(-[#1])-[#6](-[#8]-[#1])=[#6](-[#6](=[#8])-[#6](-[#1])-[#1])-[#6](-[#1])-[#6]#[#6],PAINS,6,1,ChEMBL,PAINS filters +699,4,misc_naphthimidazole(1),c:1:c:4:c(:c:c2:c:1nc(n2-[#1])-[#6]-[#8]-[#6](=[#8])-c:3:c:c(:c:c(:c:3)-[#7](-[#1])-[#1])-[#7](-[#1])-[#1]):c:c:c:c:4,PAINS,6,1,ChEMBL,PAINS filters +700,4,naphth_ene_one_C(1),c:2(:c:1:c:c:c:c-3:c:1:c(:c:c:2)-[#6]=[#6]-[#6]-3=[#7])-[#7],PAINS,6,1,ChEMBL,PAINS filters +701,4,keto_phenone_C(1),c:2(:c:1:c:c:c:c:c:1:c-3:c(:c:2)-[#6](-c:4:c:c:c:c:c-3:4)=[#8])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters +702,4,coumarin_C(1),[#6]-2(-[#6]=[#7]-c:1:c:c(:c:c:c:1-[#8]-2)-[Cl])=[#8],PAINS,6,1,ChEMBL,PAINS filters +703,4,thio_est_cyano_A(1),[#6]-1=[#6]-[#7](-[#6](-c:2:c-1:c:c:c:c:2)(-[#6]#[#7])-[#6](=[#16])-[#16])-[#6]=[#8],PAINS,6,1,ChEMBL,PAINS filters +704,4,het_65_imidazole(1),c2(nc:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1])n2-[#6])-[#7](-[#1])-[#6](-[#7](-[#1])-c:3:c(:c:c:c:c:3-[#1])-[#1])=[#8],PAINS,6,1,ChEMBL,PAINS filters +705,4,anthranil_acid_J(1),[#7](-[#1])(-[#6]:[#6])-c:1:c(-[#6](=[#8])-[#8]-[#1]):c:c:c(:n:1)-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +706,4,colchicine_het(1),c:1-3:c(:c:c:c:c:1)-[#16]-[#6](=[#7]-[#7]=[#6]-2-[#6]=[#6]-[#6]=[#6]-[#6]=[#6]-2)-[#7]-3-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +707,4,ene_misc_D(1),c:1-2:c(:c(:c(:c(:c:1-[#1])-[#8]-[#6](-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#1])-[#6](=[#6](-[#6])-[#16]-[#6]-2(-[#1])-[#1])-[#6],PAINS,6,1,ChEMBL,PAINS filters +708,4,indole_3yl_alk_B(1),c:12:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1])c(c(-[#6]:[#6])n2-!@[#6]:[#6])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +709,4,anil_OH_no_alk_A(1),[#7](-[#1])(-[#1])-c:1:c:c:c(:c:c:1-[#8]-[#1])-[#16](=[#8])(=[#8])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters +710,4,thiazole_amine_L(1),s:1:c:c:c(:c:1-[#1])-c:2:c:s:c(:n:2)-[#7](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +711,4,pyrazole_amino_A(1),c1c(-[#7](-[#1])-[#1])nnc1-c2c(-[#6](-[#1])-[#1])oc(c2-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +712,4,het_thio_N_5D(1),n1nscc1-c2nc(no2)-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +713,4,anil_alk_indane(1),c:1(:c:c-3:c(:c:c:1)-[#7]-[#6]-4-c:2:c:c:c:c:c:2-[#6]-[#6]-3-4)-[#6;X4],PAINS,6,1,ChEMBL,PAINS filters +714,4,anil_di_alk_N(1),c:1-2:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1])-[#6](=[#6](-[#1])-[#6]-3-[#6](-[#6]#[#7])-[#6](-[#1])(-[#1])-[#6](-[#1])-[#7]-2-3)-[#1],PAINS,6,1,ChEMBL,PAINS filters +715,4,het_666_C(1),c:2-3:c(:c:c:1:c:c:c:c:c:1:c:2)-[#7](-[#6](-[#1])-[#1])-[#6](=[#8])-[#6](=[#7]-3)-[#6]:[#6]-[#7](-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +716,4,ene_one_D(1),[#6](-[#8]-[#1]):[#6]-[#6](=[#8])-[#6](-[#1])=[#6](-[#6])-[#6],PAINS,6,1,ChEMBL,PAINS filters +717,4,anil_di_alk_indol(1),c:1:2:c(:c(:c(:c(:c:1-[#1])-[#1])-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#1]):c(:c(-[#1]):n:2-[#1])-[#16](=[#8])=[#8],PAINS,6,1,ChEMBL,PAINS filters +718,4,anil_no_alk_indol_A(1),c:1:2:c(:c(:c(:c(:c:1-[#1])-[#1])-[#7](-[#1])-[#1])-[#1]):c(:c(-[#1]):n:2-[#6](-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +719,4,dhp_amino_CN_G(1),"[#16;X2]-1-[#6]=[#6](-[#6]#[#7])-[#6](-[#6])(-[#6]=[#8])-[#6](=[#6]-1-[#7](-[#1])-[#1])-[$([#6]=[#8]),$([#6]#[#7])]",PAINS,6,1,ChEMBL,PAINS filters +720,4,anil_di_alk_dhp(1),[#7]-2-[#6]=[#6](-[#6]=[#8])-[#6](-c:1:c:c:c(:c:c:1)-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#6]~3=[#6]-2~[#7]~[#6](~[#16])~[#7]~[#6]~3~[#7],PAINS,6,1,ChEMBL,PAINS filters +721,4,anthranil_amide_A(1),c:1:c(:c:c:c:c:1)-[#6](=[#8])-[#7](-[#1])-c:2:c(:c:c:c:c:2)-[#6](=[#8])-[#7](-[#1])-[#7](-[#1])-c:3:n:c:c:s:3,PAINS,6,1,ChEMBL,PAINS filters +722,4,hzone_anthran_Z(1),c:1:c:2:c(:c:c:c:1):c(:c:3:c(:c:2):c:c:c:c:3)-[#6]=[#7]-[#7](-[#1])-c:4:c:c:c:c:c:4,PAINS,6,1,ChEMBL,PAINS filters +723,4,ene_one_amide_A(1),c:1:c(:c:c:c:c:1)-[#6](-[#1])-[#7]-[#6](=[#8])-[#6](-[#7](-[#1])-[#6](-[#1])-[#1])=[#6](-[#1])-[#6](=[#8])-c:2:c:c:c(:c:c:2)-[#8]-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +724,4,het_76_A(1),s:1:c(:c(-[#1]):c(:c:1-[#6]-3=[#7]-c:2:c:c:c:c:c:2-[#6](=[#7]-[#7]-3-[#1])-c:4:c:c:n:c:c:4)-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +725,4,thio_urea_N(1),o:1:c(:c(-[#1]):c(:c:1-[#6](-[#1])(-[#1])-[#7](-[#1])-[#6](=[#16])-[#7](-[#6]-[#1])-[#6](-[#1])(-[#1])-c:2:c:c:c:c:c:2)-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +726,4,anil_di_alk_coum(1),c:1:c(:c:c:c:c:1)-[#7](-[#6]-[#1])-[#6](-[#1])-[#6](-[#1])-[#6](-[#1])-[#7](-[#1])-[#6](=[#8])-[#6]-2=[#6](-[#8]-[#6](-[#6](=[#6]-2-[#6](-[#1])-[#1])-[#1])=[#8])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +727,4,ene_one_amide_B(1),c2-3:c:c:c:1:c:c:c:c:c:1:c2-[#6](-[#1])-[#6;X4]-[#7]-[#6]-3=[#6](-[#1])-[#6](=[#8])-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +728,4,het_thio_656c(1),c:1:c(:c:c:c:c:1)-[#6]-4=[#7]-[#7]:2:[#6](:[#7+]:c:3:c:2:c:c:c:c:3)-[#16]-[#6;X4]-4,PAINS,6,1,ChEMBL,PAINS filters +729,4,het_5_ene(1),[#6]-2(=[#8])-[#6](=[#6](-[#6](-[#1])-[#1])-[#7](-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])-[#1])-[#7]=[#6](-c:1:c:c:c:c:c:1)-[#8]-2,PAINS,6,1,ChEMBL,PAINS filters +730,4,thio_imide_A(1),c:1:c(:c:c:c:c:1)-[#7]-2-[#6](=[#8])-[#6](=[#6](-[#1])-[#6]-2=[#8])-[#16]-c:3:c:c:c:c:c:3,PAINS,6,1,ChEMBL,PAINS filters +731,4,dhp_amidine_A(1),[#7]-1(-[#1])-[#7]=[#6](-[#7]-[#1])-[#16]-[#6](=[#6]-1-[#6]:[#6])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +732,4,thio_urea_O(1),c:1(:c(:c-3:c(:c(:c:1-[#7](-[#1])-[#6](=[#16])-[#7](-[#1])-[#6](-[#1])-c:2:c(:c(:c(:o:2)-[#6]-[#1])-[#1])-[#1])-[#1])-[#8]-[#6](-[#8]-3)(-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +733,4,anil_di_alk_O(1),c:1(:c(:c(:c(:c(:c:1-[#7](-[#1])-[#6](=[#16])-[#7](-[#1])-c:2:c:c:c:c:c:2)-[#1])-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +734,4,thio_urea_P(1),[#8]=[#6]-!@n:1:c:c:c-2:c:1-[#7](-[#1])-[#6](=[#16])-[#7]-2-[#1],PAINS,6,1,ChEMBL,PAINS filters +735,4,het_pyraz_misc(1),[#6](-[F])(-[F])-[#6](=[#8])-[#7](-[#1])-c:1:c(-[#1]):n(-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#8]-[#6](-[#1])(-[#1])-[#6]:[#6]):n:c:1-[#1],PAINS,6,1,ChEMBL,PAINS filters +736,4,diazox_C(1),[#7]-2=[#7]-[#6]:1:[#7]:[!#6&!#1]:[#7]:[#6]:1-[#7]=[#7]-[#6]:[#6]-2,PAINS,6,1,ChEMBL,PAINS filters +737,4,diazox_D(1),[#6]-2(-[#1])(-[#8]-[#1])-[#6]:1:[#7]:[!#6&!#1]:[#7]:[#6]:1-[#6](-[#1])(-[#8]-[#1])-[#6]=[#6]-2,PAINS,6,1,ChEMBL,PAINS filters +738,4,misc_cyclopropane(1),[#6]-1(-[#6](-[#1])(-[#1])-[#6]-1(-[#1])-[#1])(-[#6](=[#8])-[#7](-[#1])-c:2:c:c:c(:c:c:2)-[#8]-[#6](-[#1])(-[#1])-[#8])-[#16](=[#8])(=[#8])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +739,4,imine_ene_one_B(1),[#6]-1:[#6]-[#6](=[#8])-[#6]=[#6]-1-[#7]=[#6](-[#1])-[#7](-[#6;X4])-[#6;X4],PAINS,6,1,ChEMBL,PAINS filters +740,4,coumarin_D(1),c:1:c:c(:c:c-2:c:1-[#6](=[#6](-[#1])-[#6](=[#8])-[#8]-2)-c:3:c:c:c:c:c:3)-[#8]-[#6](-[#1])(-[#1])-[#6]:[#8]:[#6],PAINS,6,1,ChEMBL,PAINS filters +741,4,misc_furan_A(1),c:1:c(:o:c(:c:1-[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#7]-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#8]-[#6](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#8]-c:2:c:c-3:c(:c:c:2)-[#8]-[#6](-[#8]-3)(-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +742,4,rhod_sat_E(1),[#7]-4(-c:1:c:c:c:c:c:1)-[#6](=[#8])-[#16]-[#6](-[#1])(-[#7](-[#1])-c:2:c:c:c:c:3:c:c:c:c:c:2:3)-[#6]-4=[#8],PAINS,6,1,ChEMBL,PAINS filters +743,4,rhod_sat_imine_A(1),[#7]-3(-[#6](=[#8])-c:1:c:c:c:c:c:1)-[#6](=[#7]-c:2:c:c:c:c:c:2)-[#16]-[#6](-[#1])(-[#1])-[#6]-3=[#8],PAINS,6,1,ChEMBL,PAINS filters +744,4,rhod_sat_F(1),[#7]-2(-c:1:c:c:c:c:c:1)-[#6](=[#8])-[#16]-[#6](-[#1])(-[#1])-[#6]-2=[#16],PAINS,6,1,ChEMBL,PAINS filters +745,4,het_thio_5_imine_B(1),[#7]-1(-[#6](-[#1])-[#1])-[#6](=[#16])-[#7](-[#6]:[#6])-[#6](=[#7]-[#6]:[#6])-[#6]-1=[#7]-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +746,4,het_thio_5_imine_C(1),[#16]-1-[#6](=[#7]-[#7]-[#1])-[#16]-[#6](=[#7]-[#6]:[#6])-[#6]-1=[#7]-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +747,4,ene_five_het_N(1),"[#6]-2(=[#8])-[#6](=[#6](-[#1])-c:1:c(:c:c:c(:c:1)-[F,Cl,Br,I])-[#8]-[#6](-[#1])-[#1])-[#7]=[#6](-[#16]-[#6](-[#1])-[#1])-[#16]-2",PAINS,6,1,ChEMBL,PAINS filters +748,4,thio_carbam_A(1),[#6](-[#1])(-[#1])-[#16]-[#6](=[#16])-[#7](-[#1])-[#6](-[#1])(-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +749,4,misc_anilide_A(1),c:1(:c(:c(:c(:c(:c:1-[#1])-[#1])-[#6](-[#1])-[#1])-[#7](-[#1])-[#6](=[#8])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#6]:[#6])-[#1])-[#7](-[#1])-[#6](=[#8])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +750,4,misc_anilide_B(1),c:1(:c(:c:c(:c:c:1-[#6])-[Br])-[#6])-[#7](-[#1])-[#6](=[#8])-[#7](-[#1])-[#6]-[#6]-[#6],PAINS,6,1,ChEMBL,PAINS filters +751,4,mannich_B(1),c:1-2:c(:c:c:c(:c:1-[#8]-[#6](-[#1])(-[#1])-[#7](-[#6]:[#6]-[#8]-[#6](-[#1])-[#1])-[#6]-2(-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +752,4,mannich_catechol_A(1),c:1-2:c(:c(:c(:c(:c:1-[#8]-[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-[#6]-2(-[#1])-[#1])-[#1])-[#8])-[#8])-[#1],PAINS,6,1,ChEMBL,PAINS filters +753,4,anil_alk_D(1),[#7](-[#1])(-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#6](-[#1])(-[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#1])-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +754,4,het_65_I(1),n:1:2:c:c:c(:c:c:1:c:c(:c:2-[#6](=[#8])-[#6]:[#6])-[#6]:[#6])-[#6](~[#8])~[#8],PAINS,6,1,ChEMBL,PAINS filters +755,4,misc_urea_A(1),c:1(:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#6](=[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#1])-[#6](-[#6;X4])(-[#6;X4])-[#7](-[#1])-[#6](=[#8])-[#7](-[#6](-[#1])(-[#1])-[#6](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])-[#6](-[#1])(-[#1])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +756,4,imidazole_C(1),[#6]-3(-[#1])(-n:1:c(:n:c(:c:1-[#1])-[#1])-[#1])-c:2:c(:c(:c(:c(:c:2-[#1])-[Br])-[#1])-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-c:4:c-3:c(:c(:c(:c:4-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +757,4,styrene_imidazole_A(1),[#6](=[#6](-[#1])-[#6](-[#1])(-[#1])-n:1:c(:n:c(:c:1-[#1])-[#1])-[#1])(-[#6]:[#6])-[#6]:[#6],PAINS,6,1,ChEMBL,PAINS filters +758,4,thiazole_amine_M(1),c:1(:n:c(:c(-[#1]):s:1)-c:2:c:c:n:c:c:2)-[#7](-[#1])-[#6]:[#6]-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +759,4,misc_pyrrole_thiaz(1),c:1(:n:c(:c(-[#1]):s:1)-c:2:c:c:c:c:c:2)-[#6](-[#1])(-[#6](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#7]-[#6](-[#1])(-[#1])-c:3:c:c:c:n:3-[#1],PAINS,6,1,ChEMBL,PAINS filters +760,4,pyrrole_L(1),n:1(-[#1]):c(:c(-[#6](-[#1])-[#1]):c(:c:1-[#6](-[#1])(-[#1])-[#6](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])-[#1])-[#6](=[#8])-[#8]-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +761,4,het_thio_65_D(1),"c:2(:n:c:1:c(:c(:c:c(:c:1-[#1])-[F,Cl,Br,I])-[#1]):n:2-[#1])-[#16]-[#6](-[#1])(-[#1])-[#6](=[#8])-[#7](-[#1])-[#6]:[#6]",PAINS,6,1,ChEMBL,PAINS filters +762,4,ene_misc_E(1),c:1(:c(:c-2:c(:c(:c:1-[#8]-[#6](-[#1])-[#1])-[#1])-[#6]=[#6]-[#6](-[#1])-[#16]-2)-[#1])-[#8]-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +763,4,thio_cyano_A(1),[#7]-1(-[#1])-[#6](=[#16])-[#6](-[#1])(-[#6]#[#7])-[#6](-[#1])(-[#6]:[#6])-[#6](=[#6]-1-[#6]:[#6])-[#1],PAINS,6,1,ChEMBL,PAINS filters +764,4,cyano_amino_het_B(1),n:1:c(:c(:c(:c(:c:1-[#16;X2]-c:2:c:c:c:c:c:2-[#7](-[#1])-[#1])-[#6]#[#7])-c:3:c:c:c:c:c:3)-[#6]#[#7])-[#7](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +765,4,cyano_pyridone_G(1),[#7]-2(-c:1:c:c:c(:c:c:1)-[#8]-[#6](-[#1])-[#1])-[#6](=[#8])-[#6](=[#6]-[#6](=[#7]-2)-n:3:c:n:c:c:3)-[#6]#[#7],PAINS,6,1,ChEMBL,PAINS filters +766,4,het_65_J(1),o:1:c(:c:c:2:c:1:c(:c(:c(:c:2-[#1])-[#8]-[#6](-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#1])-[#6](~[#8])~[#8],PAINS,6,1,ChEMBL,PAINS filters +767,4,ene_one_yne_A(1),[#6]#[#6]-[#6](=[#8])-[#6]#[#6],PAINS,6,1,ChEMBL,PAINS filters +768,4,anil_OH_no_alk_B(1),c:2(:c:1:c(:c(:c(:c(:c:1:c(:c(:c:2-[#8]-[#1])-[#6]=[#8])-[#1])-[#1])-[#1])-[#1])-[#1])-[#7](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +769,4,hzone_acyl_misc_A(1),"c:1(:c(:c(:c(:o:1)-[$([#1]),$([#6](-[#1])-[#1])])-[#1])-[#1])-[#6](=[#8])-[#7](-[#1])-[#7]=[#6](-[$([#1]),$([#6](-[#1])-[#1])])-c:2:c:c:c:c(:c:2)-[*]-[*]-[*]-c:3:c:c:c:o:3",PAINS,6,1,ChEMBL,PAINS filters +770,4,thiophene_F(1),[#16](=[#8])(=[#8])-[#7](-[#1])-c:1:c(:c(:c(:s:1)-[#6]-[#1])-[#6]-[#1])-[#6](=[#8])-[#7]-[#1],PAINS,6,1,ChEMBL,PAINS filters +771,4,anil_OC_alk_E(1),[#6](-[#1])(-[#1])-[#8]-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1])-[#7](-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#8]-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +772,4,anil_OC_alk_F(1),[#6](-[#1])(-[#1])-[#8]-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1])-[#7](-[#1])-[#6](-[#1])(-[#6]=[#8])-[#16],PAINS,6,1,ChEMBL,PAINS filters +773,4,het_65_K(1),n1nnnc2cccc12,PAINS,6,1,ChEMBL,PAINS filters +774,4,het_65_L(1),c:1-2:c(-[#1]):s:c(:c:1-[#6](=[#8])-[#7]-[#7]=[#6]-2-[#7](-[#1])-[#1])-[#6]=[#8],PAINS,6,1,ChEMBL,PAINS filters +775,4,coumarin_E(1),c:1-3:c(:c:2:c(:c:c:1-[Br]):o:c:c:2)-[#6](=[#6]-[#6](=[#8])-[#8]-3)-[#1],PAINS,6,1,ChEMBL,PAINS filters +776,4,coumarin_F(1),c:1-3:c(:c:c:c:c:1)-[#6](=[#6](-[#6](=[#8])-[#7](-[#1])-c:2:n:o:c:c:2-[Br])-[#6](=[#8])-[#8]-3)-[#1],PAINS,6,1,ChEMBL,PAINS filters +777,4,coumarin_G(1),"c:1-2:c(:c:c(:c:c:1-[F,Cl,Br,I])-[F,Cl,Br,I])-[#6](=[#6](-[#6](=[#8])-[#7](-[#1])-[#1])-[#6](=[#7]-[#1])-[#8]-2)-[#1]",PAINS,6,1,ChEMBL,PAINS filters +778,4,coumarin_H(1),c:1-3:c(:c:c:c:c:1)-[#6](=[#6](-[#6](=[#8])-[#7](-[#1])-c:2:n:c(:c:s:2)-[#6]:[#16]:[#6]-[#1])-[#6](=[#8])-[#8]-3)-[#1],PAINS,6,1,ChEMBL,PAINS filters +779,4,het_thio_67_A(1),[#6](-[#1])(-[#1])-[#16;X2]-c:2:n:n:c:1-[#6]:[#6]-[#7]=[#6]-[#8]-c:1:n:2,PAINS,6,1,ChEMBL,PAINS filters +780,4,sulfonamide_I(1),[#16](=[#8])(=[#8])(-c:1:c:n(-[#6](-[#1])-[#1]):c:n:1)-[#7](-[#1])-c:2:c:n(:n:c:2)-[#6](-[#1])(-[#1])-[#6]:[#6]-[#8]-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +781,4,het_65_mannich(1),c:1-2:c(:c(:c(:c(:c:1-[#8]-[#6](-[#1])(-[#1])-[#8]-2)-[#6](-[#1])(-[#1])-[#7]-3-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#6]:[#6]-3)-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +782,4,anil_alk_A(1),[#6](-[#1])(-[#1])-[#8]-[#6]:[#6]-[#6](-[#1])(-[#1])-[#7](-[#1])-c:2:c(:c(:c:1:n(:c(:n:c:1:c:2-[#1])-[#1])-[#6]-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +783,4,het_5_inium(1),[#7]-4(-c:1:c:c:c:c:c:1)-[#6](=[#7+](-c:2:c:c:c:c:c:2)-[#6](=[#7]-c:3:c:c:c:c:c:3)-[#7]-4)-[#1],PAINS,6,1,ChEMBL,PAINS filters +784,4,anil_di_alk_P(1),[#6](-[#1])(-[#1])-[#7](-[#6](-[#1])-[#1])-c:2:c:c:c:1:s:c(:n:c:1:c:2)-[#16]-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +785,4,thio_urea_Q(1),c:1:2:c(:c(:c(:c(:c:1:c(:c(-[#1]):c(:c:2-[#1])-[#1])-[#6](-[#6](-[#1])-[#1])=[#7]-[#7](-[#1])-[#6](=[#16])-[#7](-[#1])-[#6]:[#6]:[#6])-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +786,4,thio_pyridine_A(1),[#6]:1(:[#7]:[#6](:[#7]:[!#1]:[#7]:1)-c:2:c(:c(:c(:o:2)-[#1])-[#1])-[#1])-[#16]-[#6;X4],PAINS,6,1,ChEMBL,PAINS filters +787,4,melamine_B(1),n:1:c(:n:c(:n:c:1-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#7](-[#6]-[#1])-[#6]=[#8],PAINS,6,1,ChEMBL,PAINS filters +788,4,misc_phthal_thio_N(1),c:1(:n:s:c(:n:1)-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#6](-[#1])(-[#1])-[#7]-[#6](=[#8])-c:2:c:c:c:c:c:2-[#6](=[#8])-[#8]-[#1])-c:3:c:c:c:c:c:3,PAINS,6,1,ChEMBL,PAINS filters +789,4,hzone_acyl_misc_B(1),n:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1])-[#6](=[#8])-[#7](-[#1])-[#7]=[#6](-[#1])-c:2:c:c:c:c:c:2-[#8]-[#6](-[#1])(-[#1])-[#6](=[#8])-[#8]-[#1],PAINS,6,1,ChEMBL,PAINS filters +790,4,tert_butyl_B(1),[#6](-[#1])(-[#1])(-[#1])-[#6](-[#6](-[#1])(-[#1])-[#1])(-[#6](-[#1])(-[#1])-[#1])-c:1:c(:c(:c(:c(:c:1-[#8]-[#1])-[#6](-[#6](-[#1])(-[#1])-[#1])(-[#6](-[#1])(-[#1])-[#1])-[#6](-[#1])(-[#1])-[#1])-[#1])-[#6](-[#1])(-[#1])-c:2:c:c:c(:c(:c:2-[#1])-[#1])-[#8]-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +791,4,diazox_E(1),[#7](-[#1])(-[#1])-c:1:c(-[#7](-[#1])-[#1]):c(:c(-[#1]):c:2:n:o:n:c:1:2)-[#1],PAINS,6,1,ChEMBL,PAINS filters +792,4,anil_NH_no_alk_B(1),"[#7](-[#1])(-[#1])-c:1:c(:c(:c(:c(:c:1-[#7](-[#1])-[#16](=[#8])=[#8])-[#1])-[#7](-[#1])-[#6](-[#1])-[#1])-[F,Cl,Br,I])-[#1]",PAINS,6,1,ChEMBL,PAINS filters +793,4,anil_no_alk_A(1),[#7](-[#1])(-[#1])-c:1:c(:c(:c(:c(:c:1-[#7]=[#6]-2-[#6](=[#6]~[#6]~[#6]=[#6]-2)-[#1])-[#1])-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +794,4,anil_no_alk_B(1),[#7](-[#1])(-[#1])-c:1:c(:c(:c(:c(:c:1-n:2:c:c:c:c:2)-[#1])-[#6](-[#1])-[#1])-[#6](-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +795,4,thio_ene_amine_A(1),[#16]=[#6]-[#6](-[#6](-[#1])-[#1])=[#6](-[#6](-[#1])-[#1])-[#7](-[#6](-[#1])-[#1])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +796,4,het_55_B(1),[#6]-1:[#6]-[#8]-[#6]-2-[#6](-[#1])(-[#1])-[#6](=[#8])-[#8]-[#6]-1-2,PAINS,6,1,ChEMBL,PAINS filters +797,4,cyanamide_A(1),[#8]-[#6](=[#8])-[#6](-[#1])(-[#1])-[#16;X2]-[#6](=[#7]-[#6]#[#7])-[#7](-[#1])-c:1:c:c:c:c:c:1,PAINS,6,1,ChEMBL,PAINS filters +798,4,ene_one_one_A(1),[#8]=[#6]-[#6]-1=[#6](-[#16]-[#6](=[#6](-[#1])-[#6])-[#16]-1)-[#6]=[#8],PAINS,6,1,ChEMBL,PAINS filters +799,4,ene_six_het_D(1),[#8]=[#6]-1-[#7]-[#7]-[#6](=[#7]-[#6]-1=[#6]-[#1])-[!#1]:[!#1],PAINS,6,1,ChEMBL,PAINS filters +800,4,ene_cyano_E(1),[#8]=[#6]-[#6](-[#1])=[#6](-[#6]#[#7])-[#6],PAINS,6,1,ChEMBL,PAINS filters +801,4,ene_cyano_F(1),[#8](-[#1])-[#6](=[#8])-c:1:c(:c(:c(:c(:c:1-[#8]-[#1])-[#1])-c:2:c(-[#1]):c(:c(:o:2)-[#6](-[#1])=[#6](-[#6]#[#7])-c:3:n:c:c:n:3)-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +802,4,hzone_furan_C(1),c:1:c(:c:c:c:c:1)-[#7](-c:2:c:c:c:c:c:2)-[#7]=[#6](-[#1])-[#6]:3:[#6](:[#6](:[#6](:[!#1]:3)-c:4:c:c:c:c(:c:4)-[#6](=[#8])-[#8]-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +803,4,anil_no_alk_C(1),[#7](-[#1])(-[#1])-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-c:2:c(-[#1]):c(:c(-[#6](-[#1])-[#1]):o:2)-[#6]=[#8])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +804,4,hzone_acid_D(1),[#8](-[#1])-[#6](=[#8])-c:1:c:c:c(:c:c:1)-[#7]-[#7]=[#6](-[#1])-[#6]:2:[#6](:[#6](:[#6](:[!#1]:2)-c:3:c:c:c:c:c:3)-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +805,4,hzone_furan_E(1),[#8](-[#1])-[#6](=[#8])-c:1:c:c:c:c(:c:1)-[#6]:[!#1]:[#6]-[#6]=[#7]-[#7](-[#1])-[#6](=[#8])-[#6](-[#1])(-[#1])-[#8],PAINS,6,1,ChEMBL,PAINS filters +806,4,het_6_pyridone_NH2(1),[#8](-[#1])-[#6]:1:[#6](:[#6]:[!#1]:[#6](:[#7]:1)-[#7](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#6](=[#8])-[#8],PAINS,6,1,ChEMBL,PAINS filters +807,4,imine_one_fives_D(1),[#6]-1(=[!#6&!#1])-[#6](-[#7]=[#6]-[#16]-1)=[#8],PAINS,6,1,ChEMBL,PAINS filters +808,4,pyrrole_M(1),n2(-c:1:c:c:c:c:c:1)c(c(-[#1])c(c2-[#6]=[#7]-[#8]-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +809,4,pyrrole_N(1),n2(-[#6](-[#1])-c:1:c(:c(:c:c(:c:1-[#1])-[#1])-[#1])-[#1])c(c(-[#1])c(c2-[#6]-[#1])-[#1])-[#6]-[#1],PAINS,6,1,ChEMBL,PAINS filters +810,4,pyrrole_O(1),n1(-[#6](-[#1])-[#1])c(c(-[#6](=[#8])-[#6])c(c1-[#6]:[#6])-[#6])-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +811,4,ene_cyano_G(1),n1(-[#6])c(c(-[#1])c(c1-[#6](-[#1])=[#6](-[#6]#[#7])-c:2:n:c:c:s:2)-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +812,4,sulfonamide_J(1),n3(-c:1:c:c:c:c:c:1-[#7](-[#1])-[#16](=[#8])(=[#8])-c:2:c:c:c:s:2)c(c(-[#1])c(c3-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +813,4,misc_pyrrole_benz(1),n2(-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1])-[#6](=[#8])-[#7](-[#1])-[#6](-[#1])(-[#6](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#8]-[#6]:[#6])c(c(-[#1])c(c2-[#1])-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +814,4,thio_urea_R(1),c:1(:c:c:c:c:c:1)-[#7](-[#1])-[#6](=[#16])-[#7]-[#7](-[#1])-[#6](-[#1])=[#6](-[#1])-[#6]=[#8],PAINS,6,1,ChEMBL,PAINS filters +815,4,ene_one_one_B(1),[#6]-1(-[#6](=[#8])-[#6](-[#1])(-[#1])-[#6]-[#6](-[#1])(-[#1])-[#6]-1=[#8])=[#6](-[#7]-[#1])-[#6]=[#8],PAINS,6,1,ChEMBL,PAINS filters +816,4,dhp_amino_CN_H(1),[#7](-[#1])(-[#1])-[#6]-1=[#6](-[#6]#[#7])-[#6](-[#1])(-[#6]:[#6])-[#16]-[#6;X4]-[#16]-1,PAINS,6,1,ChEMBL,PAINS filters +817,4,het_66_anisole(1),[#6](-[#1])(-[#1])-[#8]-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#1])-[#1])-[#7](-[#1])-c:2:c:c:n:c:3:c(:c:c:c(:c:2:3)-[#8]-[#6](-[#1])-[#1])-[#8]-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +818,4,thiazole_amine_N(1),[#6](-[#1])(-[#1])-[#8]-c:1:c(:c(:c(:c(:c:1-[#1])-[#1])-[#8]-[#6](-[#1])-[#1])-[#1])-[#7](-[#1])-c:2:n:c(:c:s:2)-c:3:c:c:c(:c:c:3)-[#8]-[#6](-[#1])-[#1],PAINS,6,1,ChEMBL,PAINS filters +819,4,het_pyridiniums_C(1),[#6]~1~3~[#7](-[#6]:[#6])~[#6]~[#6]~[#6]~[#6]~1~[#6]~2~[#7]~[#6]~[#6]~[#6]~[#7+]~2~[#7]~3,PAINS,6,1,ChEMBL,PAINS filters +820,4,het_5_E(1),[#7]-3(-c:2:c:1:c:c:c:c:c:1:c:c:c:2)-[#7]=[#6](-[#6](-[#1])-[#1])-[#6](-[#1])(-[#1])-[#6]-3=[#8],PAINS,6,1,ChEMBL,PAINS filters +821,5,"2,2-dimethyl-4,5-dicarboxy-dithiole",C1(C)(C)SC(C(=O)O)=C(C(=O)O)S1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +822,5,"2,3,4_trihydroxyphenyl",c([OH])c([OH])c([OH]),SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +823,5,"2,3,5_trihydroxyphenyl",c([OH])c([OH])cc([OH]),SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +824,5,acid_anhydrides,C(=O)OC(=O),SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +825,5,acid_halides,"[S,C](=[O,S])[F,Br,Cl,I]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +826,5,Acridine,c1c2cc4ccccc4nc2ccc1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +827,5,Active_Phosphate,"P(=S)([OH1,O$(O[#6])])([OH1,O$(O[#6])])[S,O]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +828,5,acyl_cyanide,C(=O)-C#N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +829,5,Adjacent_Ring_Double_Bonds,[*;R]=[*;R]=[*;R],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +830,5,Aldehyde,[#6][C!H0]=O,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +831,5,Aliphatic_Triflate,COS(=O)(=O)C(F)(F)F,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +832,5,alkyl_halides,"[Br,Cl,I][CX4;CH,CH2]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +833,5,AlkylEnamine,"[C;H1$(C([#6;!$(C=O)])),H0$(C([#6;!$(C=O)])[#6;!$(C=O)])]=[CH1]!@N([#6;!$(C(=O))])[#6;!$(C(=O))]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +834,5,Allene,*=C=*,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +835,5,Alpha_Halo_Carbonyl,"[C;!$(C[N])](=O)!@[C;h1,h2;H1,H2][F,Cl,Br,I]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +836,5,amidotetrazole,c1nnnn1C=O,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +837,5,Amino_Naphtalimide,c1(N)ccc(C(=O)NC3(=O))c(c3ccc2)c21,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +838,5,Aminonitrile,NC#N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +839,5,Anhydride,[#6]C(=O)OC(=O)[#6],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +840,5,Any_Carbazide,O=*N=[N+]=[N-],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +841,5,aromatic_azides,cN=N=N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +842,5,Azanitrone,N=[N+]([O-])C,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +843,5,azoalkanals,[N;R0]=[N;R0]CC=O,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +844,5,Azobenzene,c1ccccc1[N!r]=[N!r]c2ccccc2,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +845,5,Azocyanamide,[N;R0]=[N;R0]C#N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +846,5,b-Carbonyl_Quaternary_Nitrogen,"C(=O)CC[N+,n+]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +847,5,benzylic_quaternary_nitrogen,"cC[N+,NX4]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +848,5,beta-carbonyl_quaternary_nitrogen,"C(=O)C[N+,n+,NX4,nX4]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +849,5,Beta-Fluoro-ethyl-ON,"[C;H2$(CF),H1$(C(F)F)]!@[CH2][N,O]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +850,5,biotin_analogue,C12C(NC(N1)=O)CSC2,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +851,5,carbazides,C(=O)N=N=N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +852,5,carbodiimides,N=C=N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +853,5,CCl3-CHO_releasing,"C(Cl)(Cl)(Cl)C([O,S])[NX3]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +854,5,Chloramidine,[Cl]C([C&R0])=N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +855,5,Conjugated_Dithioether,SC(=[!r])S,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +856,5,Crown_Ether_12CRO4,O1CCOCCOCCOCC1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +857,5,Crown_Ether_15CRO5,O1CCOCCOCCOCCOCC1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +858,5,Crown_Ether_16CRO6,O1CCOCCOCCOCCOCCOCC1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +859,5,crown_ethers,[O;R1][C;R1][C;R1][O;R1][C;R1][C;R1][O;R1],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +860,5,cyanamide,N[CH2]C#N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +861,5,Cyanophosphonate,P(OCC)(OCC)(=O)C#N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +862,5,Cyanohydrin,N#CC[OH1],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +863,5,di_and_triphosphates,P(=O)([OH])OP(=O)[OH],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +864,5,Diacetylene,C#CC#C,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +865,5,Diazoalkane,C=[N+]=[N-],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +866,5,Diazonium_Salt,[N+]#N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +867,5,Diene,C!@=[CH1]-C!@=[CH1]-[CX3](=O),SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +868,5,Dinitrobenzene_1,c1c([N+](=O)[O-])c([N+](=O)[O-])ccc1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +869,5,Dinitrobenzene_2,c1c([N+](=O)[O-])ccc([N+](=O)[O-])c1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +870,5,Dinitrobenzene_3,c1c([N+](=O)[O-])cc([N+](=O)[O-])cc1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +871,5,disulfides,[SX2][SX2],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +872,5,Dithiocarbamate,NC(=S)S,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +873,5,Dithiole-2-thione,S1SC=CC1=S,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +874,5,Dithiole-3-thione,S1C=CSC1=C,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +875,5,Dithiomethylene_acetal,S[C;!$(C=*)]S,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +876,5,Enyne,C=!@CC#C,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +877,5,"epoxides,_thioepoxides,_aziridines","C1[O,S,N]C1",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +878,5,ester_of_HOBT,C(=O)Onnn,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +879,5,Flavin,"c1cccc(NC(=NC(=[N,S,O])NC(=O)3)C3=N2)c12",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +880,5,Fluorescein,c1cc(O)cc(OC(=CC(=O)C=C3)C3=C2)c12,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +881,5,Fluorinated_Carbon_1,C(C(CF)F)F,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +882,5,Fluorinated_Carbon_2,C(C(F)F)(F)F,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +883,5,four_member_lactones,C1(=O)OCC1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +884,5,geminal_amines,[NH1;!r][CX4][NH1;!r],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +885,5,geminal_dinitriles,N#CCC#N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +886,5,"halo-pyridine,_-diazoles_and_-triazoles","[Cl,Br,I]c1[c,n][c,n][c,n][c,n]n1",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +887,5,hydrazothiourea,N=NC(S)N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +888,5,Imidazolium,c1[n+]([#6])ccn1([#6]),SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +889,5,Imine2,"[#6,#8,#16]-[CH1]=[NH1]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +890,5,imines_(not_ring),"[#6][C;R0](=[N;R0,O0])[#6]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +891,5,isocyanates_and_isothiocyanates,"N=C=[S,O]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +892,5,isonitrile,[N+]#[C-],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +893,5,ketene,C=C=O,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +894,5,Lawesson_Reagent_Derivatives,P(=S)(S)S,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +895,5,"methylidene-1,3-dithiole",S1C=CSC1=S,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +896,5,Michael_Phenyl_Ketone,c1ccccc1C(=O)C=!@CC(=O)!@*,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +897,5,N-halo,"[NX3,NX4][F,Cl,Br,I]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +898,5,Nitrobenz-azadiazole_1,"c1ccc(n[o,s]n2)c2c1[N+](=O)[O-]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +899,5,Nitrobenz-azadiazole_2,"c1c([N+](=O)[O-])cc(n[o,s]n2)c2c1",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +900,5,nitrosamine,N-[N;X2](=O),SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +901,5,nitroso,[N&D2](=O),SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +902,5,noname,"N1=C[S,NH1]C(=[C,N,P][C,N,O,P])C1(=O)",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +903,5,N-Oxide_aliphatic,[N+!$(N=O)][O-X1],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +904,5,N-S_(not_sulfonamides),[#6][S!$(S(~[OD1])~[OD1])][N;H0],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +905,5,Orthoester,C(O)(O)[OH],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +906,5,o-tertbutylphenol,c1c([OH1])c(C(C)(C)C)ccc1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +907,5,Oxobenzothiepine,C1(=O)C=CCSC=C1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +908,5,P_or_S_Halides,"[P,S][Cl,Br,F,I]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +909,5,p-Aminoaryl_diazo,Nc1aaa(N!@=N)aa1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +910,5,PCP,PCP,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +911,5,paranitrophenyl_esters,C(=O)Oc1ccc([N+](=O)[O-])cc1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +912,5,pentahalophenyl,"c1c([F,Cl])c([F,Cl])c([F,Cl])c([F,Cl])c1([F,Cl])",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +913,5,pentafluorophenyl_esters,C(=O)Oc1c(F)c(F)c(F)c(F)c1(F),SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +914,5,peroxide,[#8]~[#8],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +915,5,Phenanthrene,c12cccc3c1c4c(cc3)cccc4cc2,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +916,5,Phenylester,C(=O)!@Oc1ccccc1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +917,5,phosphonate_esters,[#6]P(=O)(~O)O[#6],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +918,5,phosphoramides,NP(=O)(N)N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +919,5,phosphorane,C=P,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +920,5,Phosphorus_Halide,"[S,P][F,Cl,Br,I]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +921,5,Polyene,C=!@CC=!@C,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +922,5,polyenes,C=CC=CC=CC=C,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +923,5,polyene_chain_between_aromatics,cC=CC=CC=Cc,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +924,5,polyines,CC#CC#CC,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +925,5,Polynuclear_Aromatic_1,c1cccc(cc(cccc2)c2c3)c13,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +926,5,Polynuclear_Aromatic_2,c1cccc(c(cccc2)c2cc3)c13,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +927,5,Polysulfide,*[SX2][SX2][SX2]*,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +928,5,Sulphur_Halide,"[#16][F,Cl,Br,I]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +929,5,pyrene_fragments,c1c2cccc3c2c4c(cc3)cccc4c1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +930,5,Pyrylium,c1ccc[o+]c1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +931,5,reactive_carbonyls,"[C;!r](=[O,S])[S;!r]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +932,5,reactive_carbonyls,"[C;!r](=[O,S])[CD2;!r][F,Br,Cl]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +933,5,Ring_Triple_Bond,"[C,c;R]#[C,c;R]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +934,5,S=N_(not_ring),[S;R0]=[N;R0],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +935,5,Sulfonate_Ester,O=[SX4](=O)OC,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +936,5,sulfonyl_cyanide,S(=O)(=O)C#N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +937,5,Sulphate_Ester,"COS(=O)O[C,c]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +938,5,sulphonates,"COS(=O)(=O)[C,c]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +939,5,Sulphur_Nitrogen_single_bond,[SX2H0]!@[N],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +940,5,Tetraazinane,C1NNC=NN1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +941,5,Thiocyanate,SC#N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +942,5,thioesters,"C[O,S;R0][C;R0](=S)",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +943,5,thioles_(not_aromatic),[!a][SX2;H1],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +944,5,Thiophosphothionate,"P(=S)(-[S;H1,H0$(S(P)C)])(-[O;H1,H0$(O(P)C)])(-N(C)C)",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +945,5,thiourea,[N;!r][C;!r](=S)[N;!r],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +946,5,Three_Membered_Heterocycle,"*1[O,S]*1",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +947,5,Tri_Pentavalent_S,"[#16v3,#16v5]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +948,5,Triacyloxime,C(=O)N(C(=O))OC(=O),SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +949,5,Triazole,c1cnnn1!@C!@[NH1][#6],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +950,5,triflate,OS(=O)(=O)(C(F)(F)(F)),SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +951,5,Triphenyl_Boranyl,B(c1ccccc1)(c2ccccc2)c3ccccc3,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +952,5,triphenylphosphines,P(c1aaaaa1)(c1aaaaa1)(c1aaaaa1),SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +953,5,Triphenyl_Silyl,[Si](c1ccccc1)(c2ccccc2)(c3ccccc3),SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +954,5,Vinyl_Halide,"[Cl,Br,I]C=[!O!R]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +955,5,Vinyl_Sulphone,"[#6][CH1]!@=[CH1][S;H1,H0$(S(C)C)](=O)(=O)",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +956,5,sulphates,[#6]S(=O)(=O)O,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +957,5,tropone,C1C(=O)C=CC=CC=1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +958,5,Oxime,"[#6]C(=!@N[$(OC),$([OH])])[#6]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +959,5,hydrazone,[#6]C(=!@NNa)[#6],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +960,5,Nitrosone_not_nitro,[$(N(~!@[#6])!@O);!$([N+]([O-])=O)],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +961,5,Thiocarbonyl_group,C=S,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +962,5,enamine_like,C=[NH],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +963,5,analine,"c1ccccc1[NH2,NH3+]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +964,5,acid_anhydrides_2,"[#6]C(=O)!@OC(=!@[N,O])[#6]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +965,5,trifluroacetate_amide,FC(F)(F)C(=O)N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +966,5,triple_bond,[#6]C#[CH],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +967,5,Allene,C=C=C,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +968,5,thiatetrazolidine,"[$(Sc1nnn[nH,n-]1),$(Sc1nn[nH,n-]n1)]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +969,5,glycol,"[#6][O;R0][$(C([#6])[#6]),$([CH][#6]),$([CH2])][O;R0][#6]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +970,5,oxy-amide,[#6]C(=O)!@C!@C(=O)N,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +971,5,formate_formide,"O=[CH][O,N][#6]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +972,5,pyranone,O=C1C=COC=C1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +973,5,Coumarin,c1cc2C=CC(=O)Oc2cc1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +974,5,aminothiazole,s1ccnc1[N!H0],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +975,5,Thiazolidinone,O=C1CSCN1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +976,5,Thiomorpholinedione,N1C(=O)CSCC1=O,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +977,5,oxepine,O1C=CC=CC=C1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +978,5,phenylethene,c1ccccc1!@[CH]=!@[C!H0],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +979,5,Ethene,C=[CH2],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +980,5,cyclobutene,C1CC=C1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +981,5,poly_sub_atomatic,*!@c1c(!@*)c(!@*)c(!@*)c(!@*)c1,SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +982,5,Isotopes,"[2#1,3#1,11C,11c,14C,14c,125I,32P,33P,35S]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +983,5,Undesirable_Elements_Salts,"[Ac,Ag,Am,Ar,As,At,Au,Ba,Be,Bi,Bk,Cd,Ce,Cf,Cm,Cr,Cs,Dy,Er,Eu,Fr,Ga,Gd,Ge,He,Hf,Ho,In,Ir,Kr,La,Lu,Mo,Nb,Nd,Ne,Ni,Np,Os,Pa,Pb,Pd,Pm,Po,Pr,Pt,Pu,Ra,Rb,Re,Rh,Rn,Ru,Sb,Sc,Se,Sm,Sr,Ta,Tb,Tc,Te,Th,Ti,Tl,Tm,U,V,W,Xe,Y,Yb,Zr]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +984,5,Metal_Carbon_bond,"[#6;$([#6]~[#3,#11,#12,#13,#19,#20,#26,#27,#28,#29,#30])]",SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +985,5,Aromatic_N-Oxide_more_than_one,[n+][O-X1].[n+][O-X1],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +986,5,Nitro_more_than_one,[N+](=O)[O-].[N+](=O)[O-],SureChEMBL,5,1,ChEMBL,SureChEMBL Non-MedChem Friendly SMARTS +987,6,anhydride,C(=O)OC(=O),MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +988,6,pentafluorophenyl ester,C(=O)Oc1c(F)c(F)c(F)c(F)c1(F),MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +989,6,p-nitrophenyl ester,C(=O)Oc1ccc([N+]([O-])=O)cc1,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +990,6,any carbazide,O=*N=[N+]=[N-],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +991,6,HOBT ester,C(=O)Onnn,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +992,6,aromatic azide,cN=[N+]=[N-],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +993,6,imine2,"[#6,#8,#16]-[CH1]=[NH1]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +994,6,sulfonyl cyanide,S(=O)(=O)C#N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +995,6,azocyanamide,[N;R0]=[N;R0]C#N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +996,6,cyanohydrin,N#CC[OH],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +997,6,acyl cyanide,N#CC(=O),MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +998,6,acid halide,"[S,C](=[O,S])[F,Br,Cl,I]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +999,6,chloramidine,[Cl]C([C&R0])=N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1000,6,P/S halide,"[P,S][F,Cl,Br,I]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1001,6,quaternary,"[C+,Cl+,I+,P+,S+]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1002,6,unacceptable atoms,[!#6;!#7;!#8;!#16;!#1;!#3;!#9;!#11;!#12;!#15;!#17;!#19;!#20;!#30;!#35],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1003,6,triacyloxime,C(=O)N(C(=O))OC(=O),MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1004,6,b-carbonyl quaternary nitrogen,"C(=O)CC[N+,n+]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1005,6,benzylic quaternary nitrogen,cC[N+],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1006,6,phosphorane,C=P,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1007,6,Lawesson reagent derivatives,P(=S)(S)S,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1008,6,cyanophosphonate,P(OCC)(OCC)(=O)C#N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1009,6,sulfonate,"COS(=O)(=O)[C,c]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1010,6,Heteroaryl sulfonate,"a-S(=O)(=O)-O[$([a&!#6]),$(c[a&!#6]),$(cc[a&!#6]),$(ccc[a&!#6]),$(cccc[a&!#6]),$(ccccc[a&!#6])]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1011,6,sulfate ester,"COS(=O)O[C,c]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1012,6,triflate,OS(=O)(=O)C(F)(F)F,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1013,6,polyacidic,"[C,S,P](=O)[OH].[C,S,P](=O)[OH].[C,S,P](=O)[OH].[C,S,P](=O)[OH]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1014,6,Sulfonic acid,[OH]-S(=O)(=O)-*,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1015,6,thiol,[SH],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1016,6,benzhydrol,[OH1]-C(-c1ccccc1)c2ccccc2,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1017,6,dihydroxybenzene,[OH1]c1ccc([OH1])cc1,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1018,6,"2,3,4trihydroxyphenyl",c([OH])c([OH])c([OH]),MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1019,6,"2,4,5trihydroxyphenyl",c([OH])c([OH])cc([OH]),MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1020,6,allene,*=C=*,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1021,6,Azide,N=N=N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1022,6,azoalkanal,[N;R0]=[N;R0]CC=O,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1023,6,hydrazothiourea,N=NC(=S)N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1024,6,Azo,N=N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1025,6,aldehyde,[#6]-[CH1]=O,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1026,6,hemiacetal,[#6]-O[CH1](-[#6])[OH1],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1027,6,acetal,[#6]-O[CH1](-[#6])O-[#6],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1028,6,Ketone,[#6]-C(=O)-[#6],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1029,6,Ester,[#6]-C(=O)O-[#6],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1030,6,imine 1,"[#6,#8,#16]-C(=[NH1])[#6,#8,#16]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1031,6,Imine 3,C=[NH],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1032,6,thioketone,CC(=S)C,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1033,6,thioester,"C[O,S;R0][C;R0](=S)",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1034,6,thionoester,COC(=S)C,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1035,6,thioamide,CC(=S)N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1036,6,thiourea,NC(=S)N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1037,6,nitroso,[N&D2](=O),MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1038,6,long chain hydrocarbon,[CD2;R0][CD2;R0][CD2;R0][CD2;R0][CD2;R0][CD2;R0],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1039,6,Long aliphatic chain,"[N,C,S,O]-&!@[N,C,S,O]-&!@[N,C,S,O]-&!@[N,C,S,O]-&!@[N,C,S,O]-&!@[N,C,S,O]-&!@[N,C,S,O]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1040,6,Unbranched chain,"[$([A&D2]),$([A&D1])]!@[A&D2]!@[A&D2]!@[A&D2]!@[A&D2]!@[$([A&D2]),$([A&D1])]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1041,6,polyene,C=CC=CC=CC=C,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1042,6,Dye 25,acC=&!@Cca,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1043,6,isonitrile,[N+]#[C-],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1044,6,thiocyanate,SC#N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1045,6,cyanamide,N[CH2]C#N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1046,6,Dye 16 (1),c([N+](=O)[O-]),MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1047,6,nitro aromatic 2+,a-[N+](=O)[O-].a-[N+](=O)[O-],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1048,6,Dye 29,"O=[N+](-[O-])-caac-[$(N(C)C),$([NH]C),$([NH2])]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1049,6,Dye 1 (1),"c1cccc(C(=O)[C,c]([#7])=,:[C,c]([#7])C2(=O))c12",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1050,6,Dye 7,"N=C1[#6]:,=[#6]C(=[C,N])[#6]:,=[#6]1",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1051,6,Dye 11,"*=,:[#6]C([#6]=,:*)[#6]=,:*",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1052,6,Dye 9,ac-*=&!@*-&!@C(=O)-&!@ca,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1053,6,Dye 32,"c1cccc2C(=O)C(C:,=*)C(=O)c12",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1054,6,Dye 6,c12cccc(C(=O)C(ca)C(=O)3)c2c3ccc1,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1055,6,Dye 22,NS(=O)(=O)c1cccc([#7])c1,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1056,6,Dye 2,OCccCO,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1057,6,Dye 26,c1ccccc1-n2nnnc2[CH2]*,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1058,6,alkyl halide,"[Br,Cl,I][CX4,CH,CH2,CH3]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1059,6,Perhalo_ketone,"O=CC(-[F,Cl,Br,I])([F,Cl,Br,I])-[F,Cl,Br,I]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1060,6,Beta halo carbonyl,"O=CCC[F,Cl,Br,I]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1061,6,4-halopyridine,"[F,Cl,Br][c]1:[c,n]:[c,n]:[n]:[c,n]:[c,n]1",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1062,6,2-halopyridine,"[F,Cl,Br][c]1:[c,n]:[c,n]:[c,n]:[c,n]:[n]1",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1063,6,Hetero_hetero,"*[N,S,O]-&!@[N,S,O][#6]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1064,6,peroxide,OO,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1065,6,disulfide,SS,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1066,6,hydrazine,[#6]-[NH]-[NH]-[#6],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1067,6,acyl hydrazine,[N;R0][N;R0]C(=O),MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1068,6,vinyl michael acceptor1,"[#6]-[CH1]=C-C(=O)[#6,#7,#8]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1069,6,vinyl michael acceptor2,"[CH2]=C-C(=O)[#6,#7,#8]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1070,6,michael acceptor 5,N#CC(=C)C#N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1071,6,Michael acceptor 6,"[#6,#7]-&!@[#6](=&!@[CH])-&!@C(=O)-&!@[C,N,O,S]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1072,6,alkynyl michael acceptor1,"[#6]-C#CC(=O)[#6,#7,#8]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1073,6,alkynyl michael acceptor2,"[CH1]#CC(=O)-[#6,#7,#8]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1074,6,nitroalkane,C[N+](=O)[O-],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1075,6,crown ether,[O;R1][C;R1][C;R1][O;R1][C;R1][C;R1][O;R1],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1076,6,nitrate,[#6]-O-[N+](=O)[O-],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1077,6,Oxalyl,O=C-&!@C=O,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1078,6,Dipeptide,*-C(=O)-&!@[NH]-C-&!@C(=O)-&!@[NH]-*,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1079,6,quaternary nitroxy,C[N+](-[O-])(C)C,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1080,6,Triphenylphosphine,a-P(-a)-a,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1081,6,Phosphoric acid,[OH]-P(=O)(-O)-*,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1082,6,Phosphoric ester,COP(=O)(-*)O,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1083,6,di/triphosphate,P(=O)([OH])OP(=O)[OH],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1084,6,tri phosphoric esters,[#6]OP(=O)(*)O[#6].[#6]OP(=O)(*)O[#6].[#6]OP(=O)(*)O[#6],MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1085,6,phosphoramide,NP(=O)(N)N,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1086,6,Phenalene,c1(c)c2c(c)cccc2ccc1,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1087,6,(poly(azo(anthracene)),"c12:[c,n]:[c,n]:[c,n]:[c,n]:c1[c,n]c3:[c,n]:[c,n]:[c,n]:[c,n]:c3[c,n]2",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1088,6,(poly(azo(phenanthrene)),"c12:[c,n]:[c,n]:[c,n]:[c,n]:c1:[c,n]:[c,n]:c3:[c,n]:[c,n]:[c,n]:[c,n]:c23",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1089,6,Dye 31,a1aaac2ac3acac4aaac(c34)c12,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1090,6,Dye 4,c12ccccc1C(=O)c3ccccc3C2=O,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1091,6,Dye 8,c12cccc(C(=O)N(-&!@C)C(=O)3)c2c3ccc1,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1092,6,"epoxide, aziridine, thioepoxide","C1[O,S,N]C1",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1093,6,propiolactone,C1(=O)OCC1,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1094,6,b-lactam,N1CCC1=O,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1095,6,cycloheximide,O=C1CCCC(N1)=O,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1096,6,aromatic Sulfonic ester,"[#6,#7]-S(=O)(=O)Oc",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1097,6,quinone,"[$([o,n]=c1ccc(=[o,n])cc1),$([O,N]=C1C=CC(=[O,N])C=C1),$([O,N]=C1[#6]:,=[#6]C(=[O,N])[#6]:,=[#6]1)]",MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1098,6,saponin,O1CCCCC1OC2CCC3CCCCC3C2,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1099,6,monensin,O1CCCCC1C2CCCO2,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1100,6,squalestatin,C12OCCC(O1)CC2,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1101,6,cyanidin,[OH]c1cc([OH])cc2=[O+]C(=C([OH])Cc21)c3cc([OH])c([OH])cc3,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1102,6,cytochalasin,O=C1NCC2CCCCC21,MLSMR,3,1,ChEMBL,NIH MLSMR Excluded Functionality filters (MLSMR) +1103,7,Filter1_2_halo_ether,"[Cl,Br,I][CX4][CX4][$([O,S,N]*),Cl,Br,I]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1104,7,Filter2_acyl_phosphyl_sulfonyl_halide,"[C,S,P](=O)[F,Cl,Br,I]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1105,7,Filter3_allyl_halide,"[F,Cl,Br,I][CX4]C=C",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1106,7,Filter4_alpha_halo_carbonyl,"[Br,Cl,I][C!H0]C=[O,S]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1107,7,Filter5_azo,"[!#7,#1]~[NX2R0]=[NX2R0]~[!#7,#1]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1108,7,Filter6_benzyl_halide,"[Br,Cl,I][CX4]c",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1109,7,Filter7_diazo,[!#7]~[NX2]~[NX1],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1110,7,Filter8_thio_isocyanat_diimin,"N=C=[N,O,P,S]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1111,7,Filter9_metal,"[!#1!#6!#7!#8!#9!#15!#16!#17]~[*,#1]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1112,7,Filter10_Terminal_vinyl,"[CH2]=[CH][N,O,P,S;R0]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1113,7,Filter11_nitrosamin,[NR0]~[NX2]~[OX1],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1114,7,Filter12_nitroso,"[*,#1]~[NX2]~[OX1]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1115,7,Filter13_PS_double_bond,"S=P~[*,#1]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1116,7,Filter14_thio_oxopyrylium_salt,"c1ccc[s,o;X2]c1",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1117,7,Filter15_thiosulfate,[SX4](~S)(~O)(~O)~*,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1118,7,Filter16_trialkyl_phosphin,[PX3]([#6])([#6])[#6],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1119,7,Filter17_trialkyl_phosphin2,[PX4](~[!O!S])([#6])([#6])[#6],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1120,7,Filter18_oxime_ester,"[!#7,#1]C=NO[C,S,P](=O)*",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1121,7,Filter19_hydroxyimide_ester,O=C[NX3](C=O)OC(=O)*,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1122,7,Filter20_hydrazine,[Nv3X3][Nv3X3!H0],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1123,7,Filter21_cyanhydrin,[NX1]#C[CX4][OH],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1124,7,Filter22_sulfonium_salt,*[SX3](*)*,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1125,7,Filter23_ortho_quinone,C1(C=CC=CC1=O)=O,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1126,7,Filter24_react_imide,"*C([F,Cl,Br,I,$(OS(=O)(=O)*)])=[NX2]*",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1127,7,Filter25_sulfonyl_halide,"*S(=O)(=O)[F,Cl,Br,I]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1128,7,Filter26_alkyl_halide,"AA[CH2][F,Cl,Br,I,$(OS(=O)(=O)*)]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1129,7,Filter27_anhydride,"*[C,S](=O)O[C,S](=O)*",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1130,7,Filter28_halo_pyrimidine,"c1nc(ncc1)[Br,I]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1131,7,Filter29_thioester,"CC(=[OX1,SX1,NH])[SX2][*,#1]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1132,7,Filter30_beta_halo_carbonyl,"[#6,#1]C(=O)CC[Br,I]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1133,7,Filter31_so_bond,"[*,#1][SX2R0]O[*,#1]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1134,7,Filter32_oo_bond,"[*,#1][OR0]O[*,#1]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1135,7,Filter33_c10_alkyl,[CH3][CH2][CH2][CH2][CH2][CH2][CH2][CH2][CH2][CH2],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1136,7,Filter34_isotope,"[2#1,3#1,13C,14C,15N,125I,23F,22Na,32P,33P,35S,45Ca,57Co,103Ru,141Ce]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1137,7,Filter35_pp_bond,P-P,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1138,7,Filter36_ss_double_bond,S=S,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1139,7,Filter37_silicate,[Si]~O,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1140,7,Filter38_aldehyde,O=[CH]*,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1141,7,Filter39_imine,C[CR0]=[NR0][*!O],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1142,7,Filter40_epoxide_aziridine,"C1C[N,S,O]1",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1143,7,Filter41_12_dicarbonyl,*C(=O)C(=O)*,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1144,7,Filter42_12_dicarbonyl_tautomer,[*!$(C[OH])]=C([OH])C(=O)*,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1145,7,Filter43_michael_acceptor_sp1,C#CC=O,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1146,7,Filter44_michael_acceptor2,"[#6,#1,OH0][C!$(C1(=O)C=CC(=O)C=C1)](=O)C=[C!$(C[Nv3X3,OH])]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1147,7,Filter45_allyl_halide2,"[Br,Cl,I][CX4]C=[C,N,P]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1148,7,Filter46_nhalide,"N[F,Cl,Br,I]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1149,7,Filter47_so2f,O=S(=O)(*)F,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1150,7,Filter48_foso,O=S(*)OF,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1151,7,Filter49_halogen,"[*,#1]~[F,Cl,Br,I]~[*,#1]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1152,7,Filter50_grignard,"C[Mg][F,Cl,Br,I]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1153,7,Filter51_pn3,N[PX3](N)N,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1154,7,Filter52_NC_haloamine,"NC[F,Cl,Br,I]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1155,7,Filter53_para_quinones,O=C1C=CC(=O)C=C1,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1156,7,Filter56_SS_bond,S-S,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1157,7,Filter57_polyphenol1,Oc1cc(O)cc(O)c1,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1158,7,Filter58_polyphenol2,Oc1c(O)cc(O)cc1,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1159,7,Filter59_phoshorous_ylide,C=P,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1160,7,Filter60_Acyclic_N-S,N!@[SX2],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1161,7,Filter61_phosphor_halide_and_P_S_bond,"[#15]~[F,Cl,Br,I,#16]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1162,7,Filter62_oxo_thio_halide,"[O,S]~[Cl,Br,I]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1163,7,Filter63_polyaromatic,a1aaaa2ccc3ccccc3c12,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1164,7,Filter64_halo_ketone_sulfone,"[#6][C,S](=[O,S])C[F,Cl,Br,I]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1165,7,Filter65_alkyl_sulfonate,"[#6][P,S](~[OX1])(~[OX1])O[C!H0]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1166,7,Filter66_c4_perfluoralkyl,C(F)(F)C(F)(F)C(F)(F)C(F)(F),Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1167,7,Filter67_S_or_O_C_triplebond_N,"[O,S]C#N",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1168,7,Filter68_anthracene_acridine,a1aaac2cc3ccccc3cc12,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1169,7,Filter69_thio_carbonate,"[O,S]C(=[O,S])[O,S]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1170,7,Filter70_AlkylCN2,*(C#N)C#N,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1171,7,Filter71_thio_anhydride,"*C(=[O,S])[O,S]C(=[O,S])*",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1172,7,Filter72_hydrated_di_ketone,C(=O)C([OH])[OH],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1173,7,Filter73_thio_ketone,CC(=S)C,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1174,7,Filter74_thiol,*[SX2H],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1175,7,Filter75_alkyl_Br_I,"[C!H0][Br,I]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1176,7,Filter76_S_ester,CC(=S)O,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1177,7,Filter77_alkyl_NO2,"[*!#7]~[#6]-,=CN(~O)(~O)",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1178,7,Filter78_bicyclic_Imide,*~@C1C(=O)NC(=O)C(~@*)1,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1179,7,Filter79_maleimide,[CH]1C(=O)NC(=O)[CH]=1,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1180,7,Filter80_Thioepoxide_aziridone,"[N,S]1[C,N,S][C,N,S]1",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1181,7,Filter81_Thiocarbamate,"S!@C(=!@[O,S])!@[#7]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1182,7,Filter82_pyridinium,"[c,n]1[c,n][c,n][c,n][c,n]n(C)1",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1183,7,Filter83_per_halo_chain,"[F,Cl,Br,I]C-,=;!@C([F,Cl,Br,I])-,=;!@C([F,Cl,Br,I])",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1184,7,Filter84_nitrogen_mustard,"[N,P,Se,S][C!H0]C[Br,Cl,I]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1185,7,Filter85_keto_acrylonitrile,*C(=O)C(=!@[C!H0])C#N,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1186,7,Filter86_cyanamide,N#C[#7!$(N(C#N)=C(N)NC)],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1187,7,Filter87_crowns,"[N,O,S]-@[#6!$(*(~@*)(~@*)~@*)]@[#6!$(*(~@*)(~@*)~@*)]-@[N,O,S]-@[#6!$(*(~@*)(~@*)~@*)]@[#6!$(*(~@*)(~@*)~@*)]-@[O,N]-@[#6!$(*(~@*)(~@*)~@*)]@[#6!$(*(~@*)(~@*)~@*)]-@[N,O,S]-@C",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1188,7,Filter88_ene_sulfone,[C!H0]=CS(=O)(=O)*,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1189,7,Filter89_hydroxylamine,"[*!$(C=O)]!@N!@O[*,#1]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1190,7,Filter90_N_double_bond_S,N=!@S,Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1191,7,Filter92_trityl,*(c1ccccc1)(c1ccccc1)(c1ccccc1),Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1192,7,Filter93_acetyl_urea,C(=O)!@N!@C(=O)[#7],Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1193,7,Filter94_2_halo_pyridine,"c1nc(ccc1)[Br,I,Cl,F]",Inpharmatica,1,1,ChEMBL,Unwanted fragments derived by Inpharmatica Ltd. +1194,8,aromatic NO2,O~N(=O)-c(:*):*,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1195,8,deuterium,[2H],LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1196,8,C13,[13#6],LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1197,8,2-chloropyridine,n1c(cccc1)Cl,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1198,8,aniline,[NH2D1]-c(:*):*,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1199,8,"Si,B,Se atoms","[Si,B,Se]",LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1200,8,hetero imides,[!#6]-[CH2]-N1C(=O)CCC(=O)1,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1201,8,poly ethers,O[CH2][CH2]O-!@[CH2][CH2]O,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1202,8,acyclic imines,"C-!@[NX2]=[C!R,#1]-C",LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1203,8,alkyl esters of S or P,"[S,P](=O)OC",LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1204,8,ugly P compounds,"P(=[O,S])[C,N]([C,N])[C,N]",LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1205,8,"acyclic N-,=N and not N bound to carbonyl or sulfone","[N;!$(N-[C,S]=*)]-,=;!@[N;!$(N-[C,S]=*)]",LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1206,8,acyclic N-C-N,N-!@[CX4]-!@N,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1207,8,acyclic N-S,N-!@[SX2]-*,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1208,8,mustards,"[N,S,O][CH2][CH2]-[F,Cl,Br,I]",LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1209,8,aldehyde,O=[C!H0],LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1210,8,"1,2-dicarbonyl not in ring",O=[CX3]-!@[CX3]=O,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1211,8,"carbamate, T-boc Protected",NC(OC([CH3])([CH3])[CH3])=O,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1212,8,"carbamate, CBZ Protected",NC(O[CH2]c1ccccc1)=O,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1213,8,carbamate include di-substitued N,OC(=O)-!@[NX3],LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1214,8,acyl halide,"O=C-[F,Cl,Br,I]",LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1215,8,alkyl halide,"[CH2]-[Cl,Br,I]",LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1216,8,alpha halo carbonyl,"O=C-C-[F,Cl,Br,I]",LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1217,8,sufonyl halide,"S(=O)(=O)-[F,Cl,Br,I]",LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1218,8,N:C-SCH2 groups,[ND1]=C-!@[SX2]-[CH2D2],LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1219,8,26,N-C(=S)-N,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1220,8,terminal vinyl,[CH2D1]=[CD2]-!@*,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1221,8,28,S=P~*,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1222,8,thio cyanates,S-C#N,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1223,8,thiols,*-[S!H0],LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1224,8,thionyl,[Sv4](=O)(-!@[!#1])-!@[!#1],LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1225,8,n-haloamines,"N-[F,Cl,Br,I]",LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1226,8,N-C-Hal or cyano methyl,"N-C-[F,Cl,Br,I,$(C#N)]",LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1227,8,alpha beta-unsaturated ketones; center of Michael reactivity,"[$(C#N),$(N(~O)~O),$(C=O),$(S(=O)=O),$(C(F)(F)F),Cl][C!H0]=[C!H0]",LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1228,8,aliphatic ketone not ring and not di-carbonyl,[C;!$(C=*)][C!R](=O)[CH2D2],LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1229,8,"aliphatic ester, not lactones",C[C!R](=O)[O!R][CH2D2],LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1230,8,"long aliphatic chain, 6+",[CH2][CH2][CH2]-!@[CH2][CH2][CH2],LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1231,8,quinones,"O=[#6]1[#6]:,=[#6][#6](=O)[#6]:,=[#6]1",LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1232,8,acyclic C=C-O,C=C-!@O-*,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1233,8,acyclic C=N-H,[NH1X2]=[C!R;!$(C(-N)(=[NH1])-N)],LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1234,8,acyclic NO not nitro,O-!@[N;!$(N(=O)=O);!$([N+](=O)[O-])],LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1235,8,42,S-S,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1236,8,43,O~O,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1237,8,thioester,C-C(=O)[SD2],LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1238,8,aziridine-like N in 3-membered ring,N~1~*~*1,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1239,8,epoxides,O~1C~*1,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1240,8,aryl iodide,I-c:*,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1241,8,aryl bromide,Br-c:*,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1242,8,multiple aromatic rings,a1aaa2a(a1)aaa(a2):a,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1243,8,multiple aromatic rings,"[!#1]-,:1-:a2a(-:[!#1]:3:a1aaaa3)aaaa2",LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1244,8,S/PO3 groups,"[P,S](~O)(~O)~O",LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1245,8,adamantyl,C12CC3CC(C1)CC(C2)C3,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1246,8,too many cyano Groups (>1),C#N.C#N,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1247,8,too many COOH groups (>1),[CX3](=O)[OH1].[CX3](=O)[OH1],LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1248,8,amino acid,[NH2][CX4]C(=O)O,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1249,8,chlorates,Cl~O,LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1250,8,high halogen content (>3),"[F,Cl,Br,I].[F,Cl,Br,I].[F,Cl,Br,I].[F,Cl,Br,I]",LINT,2,1,ChEMBL,Pfizer lint filters (lint) +1251,9,O=C1C=CC(=O)C=C1,O=C1C=CC(=O)C=C1,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1252,9,c1oc(=S)sc1,"c1oc(=[O,S])sc1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1253,9,O=C1OCCS1,"O=[#6]1[o,O][#6]@[#6][s,S]1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1254,9,SC#N,SC#N,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1255,9,[OH]c1ccc(O)cc1,[OH]a1aaa(O)aa1,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1256,9,O=C1CCC(=O)C=C1,O=C1CCC(=O)C=C1,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1257,9,O=C1C=CCC=C1Br,"O=C1C=CCC=C1[F,Cl,Br,I]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1258,9,C=CS,C=[C;R0]S,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1259,9,C=CCl,"C=C[Cl,Br,I]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1260,9,c1cccc2nonc12,c1cccc2nonc12,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1261,9,Oc1ccc2nc(F)cnc2c1,"[N,OH]c1ccc2nc([c,F])c[c,n]c2c1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1262,9,[OH]c1ccc(N)cc1_0,"[OH]a1aaa([n,N;R0])aa1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1263,9,Nc1cccs1,[N;R0]a1caas1,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1264,9,Sc1ccccc1N,"[s,S;R0;!$(S(=O)(=O)N)]a1a([n,N;R0])aaaa1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1265,9,C(=S)S,[#6]C(=S)S,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1266,9,SC1=NCCS1,"SC1=NCC[N,S]1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1267,9,n1ncnc2C(=O)NC(=O)Nc,n1ncnc2c(=O)nc(=O)nc12,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1268,9,c1nsnc1,"c1n[o,s]nc1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1269,9,[SH],[#6;!$(C=C);!$(CO);!$(CN)][SH],Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1270,9,CBr,"[C;!$(C=C)][Br,I]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1271,9,C1=CN=NC(=O)C1I,"c1cnnc(=O)c1[Cl,Br,I]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1272,9,NC=S_0,"[n,N][c,C;R1]=S",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1273,9,C1CSCN1,C1CSCN1,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1274,9,Nc1nccs1,Nc1nccs1,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1275,9,NC=S_1,"[c,C][C;R0](=S)N",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1276,9,S=O,[S;!$(S(=O)=O)]=O,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1277,9,C(=O)S,[#6]C(=O)S,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1278,9,Nc1ccc2ncccc2c1,[N;R0]c1ccc2ncccc2c1,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1279,9,CC(=S)N,N=CS,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1280,9,c1ccc2C(=O)CCCc2c1,"c1ccccc1[C;R1](=O)[c,C]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1281,9,[OH]c1ccccc1O,[OH]a1aaaaa1O,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1282,9,NC(=S)S,NC(=S)S,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1283,9,[OH]c1cc(N)ccc1_0,"Oa1aa([n,N;R1])aaa1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1284,9,C=CC(=O)OC,"C=CC(=O)O[c,C]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1285,9,O=C1CCCCO1,"[o,O;R1][c,C]=O",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1286,9,SCC=O,"S[c,C][c,C]=O",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1287,9,CN=NC,[N;R0]=[N;R0;!$([N+])],Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1288,9,C#CBr,"C#C[F,Cl,Br,I]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1289,9,C=CC(=O)C,"C=CC(=O)[c,C]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1290,9,SCS,"[s,S][#6][s,S]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1291,9,Sc1ccc(N)cc1,"[s,S;R0;!$(S(=O)(=O)N)]a1aaa([n,N;R0])aa1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1292,9,Nc1cc2ccccc2cc1,Nc1cc2aaaaa2cc1,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1293,9,SCCC=O,"S[c,C][c,C][c,C]=O",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1294,9,SCO,"[s,S][#6]O",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1295,9,NC(=S)N,"[n,N][c,C;R0](=S)[n,N]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1296,9,OC(=N)S,"OC(=[n,N])[s,S]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1297,9,c1sccc1,csc,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1298,9,NC(=O)S,NC(=O)S,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1299,9,O=CN=C,"[O,S]=CN=[c,C]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1300,9,C=C[CH]=O,C=C[CH]=O,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1301,9,S(=O)(=O),[S;!$(S(=O)(=O)N)](=O)=O,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1302,9,C=CC(=O)N,C=CC(=O)N,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1303,9,Oc1cc2ccccc2cc1,Oc1cc2aaaaa2cc1,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1304,9,[OH]c1ccc(N)cc1_1,"Oa1aaa([n,N;R1])aa1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1305,9,[OH]c1cc(N)ccc1_1,"[OH]a1aa([n,N;R0])aaa1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1306,9,[NH]c1ccc(N)cc1,"[nH,NH,NH2;R0]a1aaa([n,N;R0])aa1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1307,9,S(=O)(=O)N,S(=O)(=O)N,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1308,9,Oc1ccccc1S,[OH]a1a([S;!$(S(=O)(=O)N)])aaaa1,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1309,9,O=C1NC(=O)CC1,"O=[#6]1[n,N][#6](=O)[#6]@[#6]1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1310,9,Nc1cccc2ccccc12,Nc1cccc2aaaaa12,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1311,9,Oc1ccc(S)cc1,[OH]a1aaa([S;!$(S(=O)(=O)N)])aa1,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1312,9,C=NC=O,"[c,C]=NC=O",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1313,9,C[N+](=O)[O-],[C;!$(C=C)][N+](=O)[O-],Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1314,9,Oc1cc([NH])ccc1,"[O;!$([OH])]a1aa([nH,NH,NH2;R0])aaa1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1315,9,c1ccccc1N,"[N;!$([N+]);!$(NC=[O,N])]c1[a;R1][a;R1]a[a;R1][a;R1]1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1316,9,c1ccccc1I,"c[Br,I]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1317,9,Oc1ccc(C=O)cc1,[O;R0]aaaa[C;R0]=O,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1318,9,c1ccccc1O,Oc1[a;R1][a;R1]a[a;R1][a;R1]1,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1319,9,N[CH]=O,N[CH]=O,Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1320,9,[CH]=O,"[c,C][CH]=O",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1321,9,Sc1cc(N)ccc1,"[s,S;R0;!$(S(=O)(=O)N)]a1aa([n,N;R0])aaa1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1322,9,c1ccccc1[N+](=O)[O-],c[N+](=O)[O-],Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1323,9,[OH]c1ccccc1N,"[OH]a1a([n,N;R0])aaaa1",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1324,9,C=NN,[C;R0]=[N;R0][N;R0],Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1325,9,CSC,"[c,C;!$(C=O);!$(C=N);!$(C=S)][S;!$(S=O)][c,C;!$(C=O);!$(C=N);!$(C=S)]",Alarm-NMR,9,1,Litterature,Reactive False Positives in Biochemical Screens (Huth et al. https://doi.org/10.1021/ja0455547) +1326,10,Naphthafurans,c1cccc2c1c3c(c5CNCOc25)cco3,AlphaScreen-Hitters,9,1,Litterature,Structural filters for compounds that may be alphascreen frequent hitters +1327,10,Phenoxazines,"[OX1,N]=[#6]1-,:[#6]=,:[#6]2-,:[#16X2,#8X2]-,:[#6]3=,:[#6]-,:[#6](=,:[#6]-,:[#6]=,:[#6]3-,:[#7]=,:[#6]2-,:[#6]=,:[#6]1)",AlphaScreen-Hitters,9,1,Litterature,Structural filters for compounds that may be alphascreen frequent hitters +1328,10,Anthrones,"[#6]2=,:[#6]3-,:[#6]4=,:[#6](-,:[#6]=,:[#6]-,:[#6]=,:[#6]4)-,:[#6](=O)-,:[#6]4=,:[#6]3-,:[#6](=,:[#6]-,:[#6]=,:[#6]4)[#7]-,:[#6]2=O",AlphaScreen-Hitters,9,1,Litterature,Structural filters for compounds that may be alphascreen frequent hitters +1329,10,Imidazotriazoles,"[c,n]1cnn2c([NH])cnc12",AlphaScreen-Hitters,9,1,Litterature,Structural filters for compounds that may be alphascreen frequent hitters +1330,10,Indenones,"[#6R1]1-,:[#6R1](=[OX1])c2ccccc2-,:[#6]([NX3])=,:1",AlphaScreen-Hitters,9,1,Litterature,Structural filters for compounds that may be alphascreen frequent hitters +1331,10,Indolines,[CX4]1c2ccccc2[NX3]([CX4][CX4][CX4][NX3])[CX4]1,AlphaScreen-Hitters,9,1,Litterature,Structural filters for compounds that may be alphascreen frequent hitters +1332,11,Cyanothiopyrans,[NH2]C1=C(C#[NX1])[C!H0](-cc)C(C#[NX1])=C([NH2])S1,GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1333,11,Cyanodithiine,"[#16X2]1-,:[#6X3]([CX2]#[NX1])=,:[#6X3]([CX2]#[NX1])-,:[#16X2]-,:[#6X3]([CX2]#[NX1])=,:[#6X3]1([CX2]#[NX1])",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1334,11,Azafluorenones,"[OX1,SX1]=[#6X3]1c2c([nX2][cX3,nX2,nX3][cX3,nX2,nX3][cX3,nX2,nX3]2)[c,n]2c1[cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])]2",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1335,11,Cyanothioazinones,"[SX1]=[#6X3]1-,:[#7X3H1]-,:[#7X2,#6X3!$([#6X3]=[A])]=,:[#7X2,#6X3!$([#6X3]=[A])]-,:[#7X2,#6X3!$([#6X3]=[A])]=,:[#6X3]1([CX2]#[NX1])",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1336,11,Cyanopyridinones,"[OX1]=[#6X3]1-,:[#6X3]=,:[#6X3]-,:[#6X3]([CX2]#[NX1])=,:[#6X3]2-,:[#7X3]([CX4][CX4]([OX2H1])[CX4][NX3H1]c5ccccc5)-,:[#6]3ccccc3-,:[#7X3]12",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1337,11,Thienopyridinones,[SX2]1C(=C(C4=C1[NX3!H0]C(C(=[C!H0]4)C(=[OX1])[OX2H1])=[OX1])[NX3H2])C(=[OX1])[NX3!H0],GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1338,11,Pyranopyridinones,"[OX2]1[CX3]([NX3H2])=[CX3]([CX2]#[NX1])[CX4][#6X3]2[#6X3](=[OX1])-,:[#7X3H1]-,:[#6X3]=,:[#6X3]-,:[#6X3]12",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1339,11,Benzoxathiolones,"[$([#8]1-,:[#6](-,:[#16]c4cc(ccc14)[#7,#8])=[OX1,SX1]),$([#8]1-,:[#6](-,:[#16]c4ccc(cc14)[#7,#8])=[OX1,SX1])]",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1340,11,Indoloquinones,"[#6X3]1-,:[#6X3]=,:[#6X3]-,:[#6X3]=,:[#6X3]2-,:[#6X3]1-,:[#6X3](=[OX1])-,:[#6X3]3-,:[nX3]4-,:[#6X3](-,:[#6X3]=,:[#6X3]-,:[#6X3]=,:[#6X3]4)=,:[#6X3]-,:[#6X3]3-,:[#6X3]2=[OX1]",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1341,11,Catechols,[OX1]=[CX3]1[CX4][CX4][CX4][CX3]2=[CX3]1[CX4](c5ccc([OX2H1])c([OX2H1])c5)[NX3]c3ccc4[nX2]cccc4c23,GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1342,11,Pyrazolones,"[#7X2]1=,:[#6X3]-,:[#6X3](-,:[#6X3](-,:[#7X3]1)=[SX1,OX1])=,:[#6X3H1](-,:[#7X3H1])",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1343,11,Sulfonylamide_A,"[$([cX3!$([#6X3]=[A])]3[cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3]3[SX4](=[OX1])(=[OX1])[NX3H1][cX3]1[cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])]2s[cX3!$([#6X3]=[A])]n[cX3!$([#6X3]=[A])]2[cX3!$([#6X3]=[A])]1),$([NX3]([cX3]1[cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])]1)[SX4](=[OX1])(=[OX1])[cX3]2c3n[o,s]n[cX3!$([#6X3]=[A])]3[cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])]2)]",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1344,11,Sulfonylamide_B,"[NX3]1([CH3,$(c5[cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])]c5)])[CX4][CX4][NX3]([SX4](=[OX1])(=[OX1])[$(c2[cX3R1;!$([#6X3]=[OX1])][cX3R1;!$([#6X3]=[OX1])][cX3R1;!$([#6X3]=[OX1])][cX3R1;!$([#6X3]=[OX1])][cX3R1;!$([#6X3]=[OX1])]2),$(c7[cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])]c8nsnc78)])[CX4][CX4]1",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1345,11,Thiopyrylium,c1[#16+]cccc1,GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1346,11,Pyrimidinones_A,"[OX1,SX1]=[#6X3]1[#7X3](-,:[#7X2]=,:[#6X3][NX3H1][#6])-,:[cX3!$([#6X3]=[A])]=,:[#7X2]-,:[cX3!$([#6X3]=[A])]=,:[cX3!$([#6X3]=[A])]1",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1347,11,Pyrimidinones_B,"[OX1]=[#6X3]1-,:[#6X3]2scc-,:[#6X3]2-,:[#7X3]3-,:[#6X3](=,:[#7X2]-,:[#7X2]=,:[#6X3]3[CX4])-,:[#7X3]1[CX4H3]",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1348,11,Pyrimidinones_C,"[OX1,SX1]=[#6X3]1[#7X3]-,:[#6X3!$([#6X3]=[A])](-[NX3])=,:[#7X2]-,:[#6X3]2([nX2][#6X3!$([#6X3]=[A])][#6X3!$([#6X3]=[A])][#6X3!$([#6X3]=[A])]c12)",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1349,11,Pyrimidinodiones,"[#6X3]1(=[OX1,SX1])-,:[#7X3H1]-,:[#6X3](=[OX1,SX1])-,:[#7X3,#7X2]~[#6X3]([#7X2,#7X3;R1])-,:[#6X3]1[sX2r5R1,nX2r5R1,$([nx2r6R1]([cX3])[cX3])]",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1350,11,Thienopyrimidinone_A,"[OX1,SX1]=[#6X3]1-,:[#7X3H1]-,:[#6X4]-,:[#7X3H1]-,:[#6]2-,:[#16X2,#8X2]-,:[#6]3[CX4][NX3,CX4][CX4][CX4]-,:[#6]3-,:[#6]12",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1351,11,Thienopyrimidinone_B,"[OX1,SX1]=[#6X3]1-,:[#6X3]([#6X3]=[OX1])=,:[#6X3]-,:[#7X2]=,:[#6X3]2-,:[#16X2,#8X2,#7]-,:[#6]3[cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])]3-,:[#7X3,#6]12",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1352,11,Piperazinediones,"[#7X3]1-,:[#6X3](=[OX1,SX1])-,:[#6X3](=[OX1,SX1])-,:[NX3]-,:[#6X3]2[cX3!$([#6X3]=[A])][cX3]([NX3H1][CX3]=[OX1])[cX3!$([#6X3]=[A])][cX3!$([#6X3]=[A])][cX3]12",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1353,11,4-Heteryl-thiazoles,"s1[c,nX2][c,nX2](-c(c)[nX2,nX3,sX2])[nX2]c1",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1354,11,Oxadiazoles,o1nc([CX4])nc1[CX4H2][SX4](=[OX1])(=[OX1])[CX4H2][CX3](=[OX1])[NX3!H0],GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1355,11,Cycloheptenones,"[#6]1-,:[#6]=,:[#6]-,:[#6X3](=[OX1])-,:[#6]([OX2H1])=,:[#6]-,:[#6]=,:1",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1356,11,Thiophenes,[sX2]1[cX3]([NX3H1][CX3](=[OX1])-c)[cX3]([CX3](=[OX1])[OX2][CX4H3])[cX3][cX3]1,GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1357,11,Thiazoles,[nX2]1[cX3](-[cX3])[sX2][cX3][cX3]1[CX3](=[OX1])[NX3H2],GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1358,11,Cyanothioethers,"[NX1]#[CX2][CX4H2][SX2]c1n[c,n][c,n][c,n]n1",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1359,11,Aminopyrimidines_A,c1[nX2]c[nX2][nX3]1[CX4][CX4][NX3]([CX4])-c2cc[nX2]c(-c3cc[nX2]cc3)[nX2]2,GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1360,11,Fused azacycles_A,"[nX2R1][c,n;R2]1[c,n;R2]([c,n;R1])[c,n][c,n][c,n;R2]([c,n;R1])[nR2]1[nX2R1]",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1361,11,Fused azacycles_B,"[NX1]#[CX2]c1[c!$([#6]=[OX1])]n[n,c!$([#6]=[OX1])]2[c,n][c!$([#6]=[OX1])][c!$([#6]=[OX1])]nc12",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1362,11,Aminopyrimidines_B,[NX3H2]c1ncnc2ncccc21,GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1363,11,Ethylenediamines,[NX3H1]1[CX4][CX4][CX4][CX4]([NX3H1][CX4][CX4]A-c)[CX4]1,GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1364,11,Arylethanolamines,"[$([NX3]([CX4,H])([CX4,H])[CX4]),$([OX2]([H,CX4])[CX4])][CX4!H0][CX4H2][NX3H1]c[nX2r6R1][nX2,nX3][nX2,cX3;R1][cX3,nX2][cX3,nX2][sX2,cX3][cX3]",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1365,11,Azaspironones,"[X4;R2]12(-,:;@[#6X3]-,:;@[#6X3]-,:;@[#7X3]-,:;@[#6X3]-,:;@1)-,:;@[#16X2]-,:;@[#6X3]=,:;@[#7X2]-,:;@[#7X3]-,:;@2",GST-Hitters,9,1,Litterature,Structural filters for compounds may prevent GST/GSH interaction during HTS +1366,12,NCCN,"[$(c1[nv3X2][c,n][c,n,s][c,n]1),$(c2[nv3X2][c,n][c,n][c,n][c,n]2)]-[$(c1[nv3X2][c,n][c,n,s][c,n]1),$(c2[nv3X2][c,n][c,n][c,n][c,n]2)]",HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate +1367,12,Picolylamines_A,"[$([NX3][CH2]c1ncnc([NX3])c1),$([NX3][CH2]c1nccc([NX3])n1)]",HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate +1368,12,Picolylamines_B,"[$([NX3]([H,CX4!H0!R])([H,CX4!H0!R])[C!H0!R]c1[nv3X2]n([H,CH3])cc1),$([NX3]([H,CX4!H0!R])([H,CX4!H0!R])[C!H0!R]c1[nv3X2]ccn1[H,CH3])]",HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate +1369,12,Picolylamines_C,"c1cccnc1[CH2!R][NX3!R]([H,CH3])[CH2!R]",HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate +1370,12,Bis-picolylamines,"[nv3X2]c([c,s,n])[CX4][NX3]([H,C])[CX4]c([c,s,n])[nv3X2,nv3X3H1]",HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate +1371,12,Alkylimidazoles_A,"[cR1]1[nv3X2R1][cHR1][cHR1][nR1]1[CH2!R][CH2!R][$([NX3!H0]([CH2!R])[$([SX4](=[OX1])(=[OX1])c),$([CX3](=[OX1])[CH2][O,N]),$([CH2!R])]),$([CH2!R][nr5,$([NX3!H0]([CH2!R])[$([SX4](=[OX1])(=[OX1])c),$([CX3](=[OX1])[CH2][O,N]),$([CH2!R])])]),$([CH2!R][CH2!R][NX3!H0][$([SX4](=[OX1])(=[OX1])c),$([CX3](=[OX1])[CH2][O,N]),$([CH2!R])])]",HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate +1372,12,Alkylimidazoles_B,[nv3X2]1cncc1[CX4][CX4][NH2],HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate +1373,12,Heterylimidazoles,[nv3X3]1c(-c[nv3X2])c[nv3X2]c1,HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate +1374,12,Diarylamines,c([nv3X2])(c)[NX3H1!R]c([nv3X2])(c),HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate +1375,12,Diarylmethanes,"[$(c1[nX2][c,n][c,n][c,n]1),$([cr6][nX2r6])][CX4H2!R][$(c2[nX2][c,n][c,n][c,n]2),$([cr6][nX2r6])]",HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate +1376,12,Aminals,c1ccc[nv3X2]c1[#6](~[#7])~[#7],HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate +1377,12,Heterylsulfides,"[SX2]-[#6R1]2=,:[#7R1]-,:[#6R1]=,:[#6R1]-,:[#7R2]3-,:[#6R1](=O)-,:[#7R1]-,:[#7R1]=,:[#6R2]23",HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate +1378,12,Heterylamides_A,"[$([cr5][n,s;r5][n,o;r5]),$([cr5]([nr5])[s,o,n;r5])][Nv3X3H1!R][CX3!R](=[OX1])[$([cr5][nv3X2r5]),$(c1ncccc1),$(c1c([OX2][CH3])cccc1)]",HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate +1379,12,Heterylamides_B,"[$(c1nnc[o,n]1),$(c1nccs1)][Nv3X3H!R][C!R](=[OX1])[CX4!H0]([H,CX4])[SX2,n]cc",HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate +1380,12,Pyrimidinetriones,C1=C([OH1])[NX3][CX3](=[OX1])[NX3][CX3]1(=[OX1]),HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate +1381,12,8-Quinolinols,"[H,C][OX2]c1c([CX4][NX3])ccc2cccnc21",HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate +1382,12,Benzoxozinones,c1cccc2[NX3][CX4][CX3](=[OX1])[OX2]c12,HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate +1383,12,Perchloroquinone,"[OX1]=[CX3]1C([F,Cl,Br,I])=C([F,Cl,Br,I])[CX3](=[OX1])C([F,Cl,Br,I])=C1[F,Cl,Br,I]",HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate +1384,12,Alkylimidazole_C,nc[nv3X3Hr5]c[CX4]c[nv3X2],HIS-Hitters,9,1,Litterature,Structural filters for compounds prevents the binding of the protein His-tag moiety to nickel chelate +1385,13,Benzyl Imidazole scaffold,"[c,n]:1:c:[c,n]:[c,n]2:[c,n](:c:1)[c,n,o,s][c,n]([c,n,o,s]2)*-,=*c:3:c:c:c:c:c:3",LuciferaseInhibitor,9,1,Litterature,Structural filters for compounds that may inhibit luciferase. +1386,13,6-Phenyl Napthaline type scaffold,"[c,n]:1:c:[c,n]:[c,n]2:[c,n](:c:1)[c,n,o,s][c,n]([c,n,o,s][c,n,o,s]2)*~*c:3:c:c:c:c:c:3",LuciferaseInhibitor,9,1,Litterature,Structural filters for compounds that may inhibit luciferase. +1387,13,2-(2-(1H-pyrrol-2-yl)ethyl)-1H-benzoimidazole scaffold,"[c,n]:1:c:c2:c(:[c,n]:c:1)[c,n,o,s][c,n]([c,n,o,s]2)*~*c3ccc*3",LuciferaseInhibitor,9,1,Litterature,Structural filters for compounds that may inhibit luciferase. +1388,14,,[NH][NH2],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1389,14,,"[CH3,$([CH2]([NX3])[#6]),$([CH]([NX3])([#6])[#6])][NH,$(N([CX4])([NX3])[#6])][N+](=O)[O-]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1390,14,,"[NH2,$([NH](N=N)[#6]),$(N(N=N)([#6])[#6])]N=N[CX4]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1391,14,,"[$([C-][N+]#N),$(C=N=N)]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1392,14,,[cH]1[cH][cH]c2c(ccc3ccccc23)[cH]1,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1393,14,,"[CH3,$([CH2]([NX3])[#6]),$([CH]([NX3])([#6])[#6])][NH,$(N([CX4])([NX3])[#6])][NX2]=O",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1394,14,,C=C[CH2]c1ccccc1,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1395,14,,"[$([CX4]C(=O)OCc1ccn2CCC(OC([CX4])=O)c12),$([CX4]C(=O)OCC1=CCN2CCC(OC([CX4])=O)C12),$([CX4]C(=O)OC\C1=C\CN([CH3])CCC(OC([CX4])=O)C1=O)]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1396,14,,"[#6][O,S][CH2,$([CH]([O,S])([F,Cl,Br,I])[CX4]),$(C([O,S])([F,Cl,Br,I])([CX4])[CX4])][F,Cl,Br,I]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1397,14,,[$([c][NH2]);r6;!$([c]([a]C)([a]C)[NH2]);!$([c]([c]C(=O)[OH])[NH2]);!$([c]([c]S(=O)(=O)[OH])[NH2]);!$([c]([a][c]S(=O)(=O)[OH])[NH2]);!$([c]([a][a][c]S(=O)(=O)[OH])[NH2])],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1398,14,,[$([c][NH][#6]);r6;!$([c]([a]C)([a]C)[NH][#6]);!$([c]([c]C(=O)[OH])[NH][#6]);!$([c]([c]S(=O)(=O)[OH])[NH][#6]);!$([c]([a][c]S(=O)(=O)[OH])[NH][#6]);!$([c]([a][a][c]S(=O)(=O)[OH])[NH][#6])],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1399,14,,[$([c]N([CH3])[CH3]);r6;!$([c]([a]C)([a]C)N([CH3])[CH3]);!$([c]([c]C(=O)[OH])N([CH3])[CH3]);!$([c]([c]S(=O)(=O)[OH])N([CH3])[CH3]);!$([c]([a][c]S(=O)(=O)[OH])N([CH3])[CH3]);!$([c]([a][a][c]S(=O)(=O)[OH])N([CH3])[CH3])],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1400,14,,[$([c][N+](=O)[O-]);r6;!$([c]([a]C)([a]C)[N+](=O)[O-]);!$([c]([c]C(=O)[OH])[N+](=O)[O-]);!$([c]([c]S(=O)(=O)[OH])[N+](=O)[O-]);!$([c]([a][c]S(=O)(=O)[OH])[N+](=O)[O-]);!$([c]([a][a][c]S(=O)(=O)[OH])[N+](=O)[O-])],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1401,14,,[$([c][NX2]=O);r6;!$([c]([a]C)([a]C)[NX2]=O);!$([c]([c]C(=O)[OH])[NX2]=O);!$([c]([c]S(=O)(=O)[OH])[NX2]=O);!$([c]([a][c]S(=O)(=O)[OH])[NX2]=O);!$([c]([a][a][c]S(=O)(=O)[OH])[NX2]=O)],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1402,14,,[$(c[NH][OH]);r6],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1403,14,,"[$([c]N=[NH,$(N(=N)[#6])]);r6;!$([c]([a]C)([a]C)N=[NH,$(N(=N)[#6])]);!$([c]([c]C(=O)[OH])N=[NH,$(N(=N)[#6])]);!$([c]([c]S(=O)(=O)[OH])N=[NH,$(N(=N)[#6])]);!$([c]([a][c]S(=O)(=O)[OH])N=[NH,$(N(=N)[#6])]);!$([c]([a][a][c]S(=O)(=O)[OH])N=[NH,$(N(=N)[#6])])]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1404,14,,"[$([c][NH]C(=O)[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]);r6;!$([c]([a]C)([a]C)[NH]C(=O)[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]);!$([c]([c]C(=O)[OH])[NH]C(=O)[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]);!$([c]([c]S(=O)(=O)[OH])[NH]C(=O)[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]);!$([c]([a][c]S(=O)(=O)[OH])[NH]C(=O)[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]);!$([c]([a][a][c]S(=O)(=O)[OH])[NH]C(=O)[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])])]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1405,14,,[$([c][NH]OC(=O)[#6]);r6;!$([c]([a]C)([a]C)[NH]OC(=O)[#6]);!$([c]([c]C(=O)[OH])[NH]OC(=O)[#6]);!$([c]([c]S(=O)(=O)[OH])[NH]OC(=O)[#6]);!$([c]([a][c]S(=O)(=O)[OH])[NH]OC(=O)[#6]);!$([c]([a][a][c]S(=O)(=O)[OH])[NH]OC(=O)[#6])],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1406,14,,[$(c[NH2]);r5],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1407,14,,[$(c[NH][#6]);r5],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1408,14,,[$(cN([CH3])[CH3]);r5],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1409,14,,[$(c[N+](=O)[O-]);r5],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1410,14,,[$(c[NX2]=O);r5],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1411,14,,[$(c[NH][OH]);r5],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1412,14,,"[$(cN=[NH,$(N(=N)[#6])]);r5]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1413,14,,"[$(c[NH]C(=O)[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]);r5]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1414,14,,[$(c[NH]OC(=O)[#6]);r5],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1415,14,,N(c)(c)[NX2]=O,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1416,14,,[NX3](C)(C)C,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1417,14,,"[$([CH2]),$([CH]C)]=[CH,$(C[CX4])][CH]=O",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1418,14,,"[$([$([CH2]),$([CH]C)]=[CH,$(C[CX4])]C(=O)[#6]);!$([CH]1=CC(=O)C=CC1(=O));!$([CH]1=CC(=O)C(=O)C=C1)]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1419,14,,"[$([CH2]),$([CH]C)]=[CH,$(C[CX4])]C(=O)O[#6]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1420,14,,"[$([CH2]),$([CH]C)]=[CH,$(C[CX4])]C(=O)[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1421,14,,"[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]C(=O)N=NC(=O)[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1422,14,,"[$(C1(=O)[#6]=,:[#6]C(=O)[CH]=C1),$(C1(=O)C(=O)[#6]=,:[#6][CH]=C1)]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1423,14,,"[$(C1=CC(=O)[#6]=,:[#6]C1(=[CH][CX4])),$(C1(=[CH][CX4])C(=O)[#6]=,:[#6]C=C1)]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1424,14,,"[$(C1(=O)[#6]=,:[#6][$(C=[NH]),$(C=N[CX4])][CH]=C1),$(C1(=O)[$(C=[NH]),$(C=N[CX4])][#6]=,:[#6][CH]=C1),$(C1(=O)[$(C=[NH]),$(C=N[CX4])]C=[CH][#6]=,:[#6]1)]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1425,14,,"[$([CH]1=C[$(C=[NH]),$(C=N[CX4])][#6]=,:[#6][$(C=[NH]),$(C=N[CX4])]1),$([CH]1=C[$(C=[NH]),$(C=N[CX4])][$(C=[NH]),$(C=N[CX4])][#6]=,:[#6]1)]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1426,14,,"[$(c1([OH,$(O[CH3])])c[cH]c([OH,$(O[CH3])])cc1),$(c1([OH,$(O[CH3])])c([OH,$(O[CH3])])cc[cH]c1)]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1427,14,,"[$(c1([OH])ccc([CH3,$([CH2][CX4])])cc1),$(c1([OH])c([CH3,$([CH2][CX4])])cccc1)]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1428,14,,[cH]1ccc(OCO2)c2c1,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1429,14,,"[cH,$(c(c)(c)[CX4])]1[cH][cH][cH,$(c(c)(c)[CX4])][cH][cH,$(c(c)(c)[CX4])]1",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1430,14,,[cH]1c[cH]c2cc3ccccc3cc2[cH]1,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1431,14,,"[cH]1cc([OH,$(O[CH3])])cc2ccnc12",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1432,14,,[CH3]c1c[nH]c2ccccc12,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1433,14,,"[cH]1[cH,$(c(c)(o)C)]o[cH,$(c(c)(o)C)][cH,$(c(c)(c)C)]1",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1434,14,,"[cH]1[cH,$(c(c)(o)C)]s[cH,$(c(c)(o)C)][cH,$(c(c)(c)C)]1",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1435,14,,"[CH,$(C(=O)[#6])](=O)[F,Cl,Br,I]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1436,14,,"[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]C(=O)[F,Cl,Br,I]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1437,14,,"[NH,$(N(=C=O)[#6])]=C=O",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1438,14,,"[NH,$(N(=C=[SX1])[#6])]=C=[SX1]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1439,14,,C1C(=O)[NH]C(=O)S1,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1440,14,,"[NH2,$([NH]([CH]=O)[#6]),$(N([CH]=O)([#6])[#6])][CH](=O)",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1441,14,,"[#6]S(=O)(=O)[NH]C(=O)[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1442,14,,c[NH]C(=O)[NH]c,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1443,14,,c1ccccc1[CX4][NH2],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1444,14,,"[CX4][CH]([F,Cl,Br,I])[F,Cl,Br,I]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1445,14,,"[cH,$(c(c)(c)C)]1[cH,$(c(c)(c)C)]s[cH][cH]1",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1446,14,,[cH]1[cH]c(=O)oc2ccccc12,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1447,14,,"[NX3,SX2][CH2,$([CH]([NX3,SX2])([CX4])[CX4])][CH2,$([CH]([CX4])([Cl,Br,I])[CX4])][Cl,Br,I]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1448,14,,"[Cl,Br,I][CH2,$([CH]([Cl,Br,I])([CX4])[CX4])][CH2,$([CH]([Cl,Br,I])([CX4])[CX4])][Cl,Br,I]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1449,14,,"[CH3,$([CH2](O)[#6]),$([CH](O)([#6])[#6])]O[NX2]=O",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1450,14,,"[CH3,$([CH2]([NX3])[CX4]),$([CH]([NX3])([CX4])[CX4])][NX3]([CH3])C(=[O,SX2])[O,SX2][CX4]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1451,14,,"[CH3,$([CH2]([F,Cl,Br,I])[#6]),$([CH]([F,Br,Cl,I])([#6])[#6]);!$([CH2,CH]C=O);!$([CH2,CH][CX4][NX3,SX2]);!$([CH2,CH][CX4][F,Cl,Br,I])][F,Cl,Br,I]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1452,14,,"[#6]S(=O)(=O)O[CH3,$([CH2](O)[#6]),$([CH](O)([#6])[#6])]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1453,14,,"[#6]OS(=O)(=O)O[CH3,$([CH2](O)[#6]),$([CH](O)([#6])[#6])]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1454,14,,"[#6][O,SX2]P(=[O,SX1])([O,SX2][#6])[O,SX2][CH3,$([CH2](O)[#6]),$([CH](O)([#6])[#6])]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1455,14,,"[#6][O,SX2]P(=[O,SX1])([#6])[O,SX2][CH3,$([CH2](O)[#6]),$([CH](O)([#6])[#6])]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1456,14,,"[#6][PX4](=O)O[CH3,$([CH2](O)[#6]),$([CH](O)([#6])[#6])]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1457,14,,C1CC(=O)O1,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1458,14,,"[$(C1OS(=O)(=O)CC1),$(C1OS(=O)(=O)CCC1)]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1459,14,,[CX4][NX3]([#6])[NX2]=O,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1460,14,,C1OC1,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1461,14,,C1[NX3]C1,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1462,14,,C1[SX2]C1,DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1463,14,,"[CH2,$([CH](=[CH])[#6,F,Cl,Br,I])]=[CH][F,Cl,Br,I,$(O(C=C)[a])]",DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1464,14,,[a]C(=O)N(O[#6])OC(=O)[#6],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1465,14,,[#6][NH]C(=S)[NH][#6],DNABinder,9,1,Litterature,Structural filters for compounds that may bind to DNA. +1466,15,"A1, A2, A4-A12, B2, B3, B4, B6",[OH][CX3](=[OX1])c1ncccc1,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1467,15,A3,"[OH][CX3](=[OX1])[#6]1-,:[$([#7X3+]-[OX1-]),$([#7v5X3]=[OX1])]=,:[#6]-,:[#6]=,:[#6]-,:[#6]=,:1",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1468,15,B1,c1cccc2c1ccc([OH])n2,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1469,15,B5,"[#6]1=,:[#6]-,:[#6]=,:[#6]([OH])-,:[#6]2=,:[#6]1-,:[#6]=,:[#6]-,:[#6]=,:[$([#7X3+]-[OX1-]),$([#7v5X3]=[OX1])]2",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1470,15,"B7, B8, B9, B12",c1ccc([OH])c2c1cccn2,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1471,15,B10,c1ccc([SH])c2c1cccn2,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1472,15,B11,c1ccc([CX3](=[OX1])[OH])c2c1cccn2,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1473,15,C2,[NH2]c1nc([NH2])cc([OH])n1,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1474,15,"C3, C7, C8",[SH]c1nc([OH])ccn1,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1475,15,C4,[OH]c1nc([SH])ccn1,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1476,15,C5,[SH]c1nc([CH3])cc([CH3])n1,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1477,15,C5*,[SH]c1nc([CX4])cc([CX4])n1,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1478,15,"C6, C12",[OH]c1nc([OH])cc([CH3])n1,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1479,15,"C6*, C12*",[OH]c1nc([OH])cc([CX4])n1,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1480,15,C9,[NH2]c1ncnc2c1nc[nH]2,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1481,15,C9*,[NH2]c1ncnc2c1nc[nX3]2,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1482,15,"C10, C11","[CH3]c1nc([OH])cc([OH,CH3])n1",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1483,15,"C10*, C11*","[CX4]c1nc([OH])cc([OH,CX4])n1",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1484,15,"D1, D3, D4, D6-D11","O=[#6]1-,:[#6]([OH])=,:[#6]-,:[#8]-,:[#6]=,:[#6]-,:1",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1485,15,"D2, D5","S=[#6]1-,:[#6]([OH])=,:[#6]-,:[#8]-,:[#6]=,:[#6]-,:1",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1486,15,D12,"O=[#6]1-,:[#8]-,:[#6]=,:[#6]-,:[#6]=,:[#6]([OH])-,:1",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1487,15,"E1, E10","O=[#6]1-,:[#7]([OH])-,:[#6]=,:[#6]-,:[#6]=,:[#6]-,:1",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1488,15,E2,"S=[#6]1-,:[#7]([OH])-,:[#6]=,:[#6]-,:[#6]=,:[#6]-,:1",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1489,15,"E3*, E4*, E5*","O=[#6]1-,:[#6]([OH])=,:[#6]([CX4])-,:[#7]([CX4])-,:[#6]=,:[#6]-,:1",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1490,15,"E6, E8","O=[#6]1-,:[#7]([H,CH3])-,:[#6]=,:[#6]-,:[#6]=,:[#6]-,:1([OH])",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1491,15,"E6*, E8*","O=[#6]1-,:[#7X3]-,:[#6]=,:[#6]-,:[#6]=,:[#6]-,:1([OH])",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1492,15,"E7*, E11*, E12*","S=[#6]1-,:[#6]([OH])=,:[#6]([CX4])-,:[#7]([CX4])-,:[#6]=,:[#6]-,:1",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1493,15,E9,"S=[#6]1-,:[#7]([CH3])-,:[#6]=,:[#6]-,:[#6]=,:[#6]-,:1([OH])",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1494,15,E9*,"S=[#6]1-,:[#7]([CX4])-,:[#6]=,:[#6]-,:[#6]=,:[#6]-,:1([OH])",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1495,15,"F1, F3-F12",[OH]c1ccccc1[CX3](=[OX1])[OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1496,15,F2,[OH]c1ccccc1[CX3](=[OX1])[NH2],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1497,15,G1,[CX4][CX3](=[OX1])[NX3H1][OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1498,15,G1*,[CX4][CX3](=[OX1])[NX3][OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1499,15,G2,[nX3H]1cccc1C(=[OX1])[OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1500,15,G2*,[nX3]1cccc1C(=[OX1])[OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1501,15,G3,c1ccnc(c1)C[NX3H]Cc2ccccn2,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1502,15,G3*,c1ccnc(c1)C[NX3]Cc2ccccn2,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1503,15,G4,C1C[NX3H1]CC[NX3H1]CC[NX3H1]1,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1504,15,G4*,C1C[NX3]CC[NX3]CC[NX3]1,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1505,15,G5,"c1ccc2c(c1)-,:[#6](=O)-,:[#6]=,:[#6](-,:[#6]2=O)[OH]",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1506,15,G6,c1cnc(cc1[CX4][OH])c2cc(ccn2)[CX4][OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1507,15,G7,c1cc2c(nc1)c3c(cccn3)cc2,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1508,15,G8,c1ccc(c(c1)[OH])[OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1509,15,"G9,G10","c1ccc(c(c1)[OH,SH])[OX2][CX4]",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1510,15,"G11, G12","[OH][#6]1=,:[#6]-,:[#6]=,:[#6]-,:[#6]=,:[#6]-,:[#6]1=[OX1]",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1511,15,H1,c1ccc2c(c1)ccc(c2[OH])[OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1512,15,H2,c1ccc2cc(c(cc2c1)[OH])[OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1513,15,H3,c1cc(c(c(c1)[NH2])[OH])C(=[OX1])[OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1514,15,H4,c1cc(c(c(c1)[OH])[OH])C(=[OX1])[OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1515,15,H5,c1ccc(c(c1)c2nc3ccccc3o2)[OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1516,15,H6,c1ccc(c(c1)c2nc3ccccc3s2)[OH],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1517,15,H7,[CH3]c1ccc(cc1)[Sv6X4](=[OX1])(=[OX1])[NX3H2],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1518,15,H7*,[CX4]c1ccc(cc1)[Sv6X4](=[OX1])(=[OX1])[NX3H2],Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1519,15,H8 - H12,"C[CX3](=[OX1])[CX4!H0]([H,CX4,Cl])[CX3](=[OX1])C",Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1520,15,H8*- H12*,C[CX3](=[OX1])[CX4][CX3](=[OX1])C,Chelator,9,1,Litterature,Structural filters for compounds that may inhibit metalloproteins (chelator). +1521,16,Diethylstilbestrol,[CH3][C][C]([C]([C][CH3])[c]1[c][c][c]([O])[c][c]1)[c]2[c][c][c]([O])[c][c]2,Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. +1522,16,Triazolam,[c]1([CH3])[n][n][c]2[C][N]=[C]([c]3[c][c][c][c][c]3Cl)[c]4[c][c](Cl)[c][c][c]4[n]12,Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. +1523,16,Apomorphine,[CH3][N]1[C][C][c]2[c][c][c][c]-3[c]2[C]1[C][c]4[c][c][c]([O])[c]([O])[c]-34,Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. +1524,16,Idebenone,[CH3][O][C]1[C]([O][CH3])[C](=O)[C]([C][C][C][C]([CH3])[C][C][C][C]([CH3])[C][O])[C]([CH3])[C]1=O,Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. +1525,16,Tocopherol,[CH3][C]([CH3])[C][C][C][C]([CH3])[C][C][C][C]([CH3])[C][C][C][C]1([CH3])[C][C][c]2[c](-[CH3])[c]([O])[c](-[CH3])[c](-[CH3])[c]2[O]1,Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. +1526,16,Benserazide,[N]([#1])([#1])[C]([C][O])[C](=O)[N][N][C][c]1[c][c][c]([O])[c]([O])[c]1[O],Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. +1527,16,Clofazimine,[CH3][C]([CH3])[N][C]1[C]=[c]2[c]([C]=[C]1[N][c]3[c][c][c](Cl)[c][c]3)[n][c]4[c][c][c][c][c]4[n]2[c]5[c][c][c]([CH3])[c][c]5,Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. +1528,16,Fenoterol,[CH3][C]([C][c]1[c][c][c]([O])[c][c]1)[N][C][C]([O])[c]2[c][c]([O])[c][c]([O])[c]2,Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. +1529,16,Calciferol,[CH3][C]([CH3])[C][C][C][C]([CH3])[C]1[C][C][C]2[C]1([CH3])[C][C][C]\[C]2=[C]/[C]=[C]3\[C][C]([O])[C][C][C]3[CH3],Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. +1530,16,SF85190,[#6][N]([C][C][C]C#C[C]([CH3])([CH3])[CH3])[C][c]1[c][c][c][c]2[c][c][c][c][c]12,Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. +1531,16,Troglitazone,[CH3]-[c]1[c]([CH3])[c]([CH3])[c]2[O][C]([CH3])([C][O][c]3[c][c][c]([C][C]4[S][C](=O)[N][C]4=O)[c][c]3)[C][C][c]2[c]1-[CH3],Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. +1532,16,Dextrotiroxina,[c]1[c]([c]([c][c][c]1[O][c]1[c]([c][c]([c][c]1I)[C][C]([N]([#1])([#1]))C(O)=O)I)[O])I,Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. +1533,16,Methyldopamine,[CH3][C]([#7H2])([C][c]1[c][c][c]([O])[c]([O])[c]1)[C]([O])=[O],Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. +1534,16,Dopamine,[#7][CH2][CH2][cX3]1[c][c]c([O])c([O])[c]1,Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. +1535,16,Dextrotiroxina-sodica,[#7H2][C]([C][c]1[c][c](I)[c]([O][c]2[c][c](I)[c]([O])[c](I)[c]2)[c](I)[c]1)[C](O)=[O],Frequent-Hitter,9,1,Litterature,Structural filters for compounds that are frequent hitters. +1536,17,Acyl halides,"[CH,$([C](=[O!R,SX1!R])[#6])](=[O!R,SX1!R])[F,Cl,Br,I]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1537,17,Acetates,"[CH,$([C!R](=[O,SX1])[#6!R])](=[O,SX1])[O!R,SX2!R,NX3!R][$([a;r6]),$([a;r5]),$(C=C),$(C#C)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1538,17,Acyclic anhydrides,"[CH,$([C!R]([O,SX2])(=[O,SX1])[#6!R])](=[O,SX1])[O!R,SX2!R][CH,$([C!R]([O,SX2])(=[O,SX1])[#6!R])]=[O,SX1]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1539,17,Dialkyl carbamoylhalides,"[NH2!R,$([NH!R](C=O)[#6!R]),$(N(C=O)([#6!R])[#6!R])]C(=O)[F,Cl,Br,I]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1540,17,Sulphonyl halides,"[#6][Sv6X4!R](=O)(=O)[F,Cl,Br,I,$(C#N)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1541,17,Phosphonic acid halides,"[#6]O[P!R](=O)(O[#6])[F,Cl,Br,I,$(C#N)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1542,17,Cyclopropenones,"[#6]1([#1,#6])=,:[#6]([#1,#6])-,:[#6]1=O",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1543,17,β-Lactones,C1C(=O)OC1,Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1544,17,Thio-lactones,C1C(=O)SC1,Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1545,17,β-Lactams,C1C(=O)NC1,Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1546,17,Azlactones,"C1=[O,SX2,NX2,CX3]CC(=[O,SX2])[O,SX2,NX3]1",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1547,17,Cyclic anhydrides,"[#6R,#8R,#16X2R][#6R](=[O,SX1])[#8R,#16X2R][#6R]([#6,#8R,#16X2])=[#8,#16X1]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1548,17,Isocyanates,[NX2]=[CX2]=[OX1],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1549,17,Isothiocyanates,[NX2]=[CX2]=[SX1],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1550,17,Carbodiimides,[#6]N=C=N[#6],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1551,17,Dithiocarbonimidic acid esters,[#6]N=C(S[#6])S[#6],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1552,17,Ketenes,"[CH2,$([CH][#6]),$(C([#6])[#6])]=C=O",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1553,17,Polarised alkene-aldehydes,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])][CH]=O",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1554,17,Polarised alkene-ketones,"[$([$([CH2]),$([CH][#6])]=[CH,$(C[#6])]C(=O)[#6]);!$([#6X3]1=,:[#6X3H][CX3](=[OX1])[#6X3]=,:[#6X3][#6X3]1(=[OX1]));!$([CX3]1(=[OX1])[CX3](=[OX1])[#6X3]=,:[#6X3H][#6X3]=,:[#6X3]1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1555,17,Polarised alkene-esters,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])]C(=O)O[#6]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1556,17,Polarised alkene-amides,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])]C(=O)[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1557,17,Polarised alkene-nitros,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1558,17,Polarised alkene-cyanos,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])]C#N",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1559,17,Polarised alkene-alkyl sulphonates,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])]S(=O)(=O)O[#6]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1560,17,Polarised alkene-alkyl sulfones,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])]S(=O)(=O)[#6]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1561,17,Polarised alkene-alkyl sulfinyls,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])][SX3](=O)[#6]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1562,17,Polarised alkene-oximes,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])]C=[NX2][OH]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1563,17,Polarised alkene-pyridines,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])][$(c1ncccc1),$(c1ccncc1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1564,17,Polarised alkene-pyrazines,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])]c1nccnc1",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1565,17,Polarised alkene-pyrimidines,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])][$(c1ncncc1),$(c1ncccn1),$(c1cncnc1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1566,17,Polarised akene-triazines,"[$([CH2]),$([CH][#6])]=[CH,$(C[#6])][$(c1ncncn1),$(c1nncnc1),$(c1nnccn1),$(c1cnncn1),$(c1nnncc1),$(c1cnnnc1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1567,17,Azocarbonamides,"[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]C(=O)N=NC(=O)[NH2,$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1568,17,Allyl alcohols,"[CH2,$([CH](=C)[#6])]=[CH,$(C(=C)([CH2][OH])[#6])][CH2][OH]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1569,17,Sulphone-sulfates,[#6][Sv6X4](=[OX1])(=[OX1])[CX4][CX4][OX2][Sv6X4](=[OX1])(=[OX1])[OH1],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1570,17,Polarised alkyne-aldehydes,"[CH,$(C(#C)[#6])]#C[CH]=O",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1571,17,Polarise alkyne-ketones,"[CH,$(C(#C)[#6])]#CC(=O)[#6]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1572,17,Polarised alkyne-esters,"[CH,$(C(#C)[#6])]#CC(=O)O[#6]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1573,17,Polarised alkyne-amides,"[CH,$(C(#C)[#6])]#CC(=O)[$([NH2]),$([NH](C=O)[#6]),$(N(C=O)([#6])[#6])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1574,17,Polarised alkyne-nitros,"[CH,$(C(#C)[#6])]#C[$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1575,17,Polarised alkyne-cyano,"[CH,$(C(#C)[#6])]#CC#N",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1576,17,Polarised alkyne-alkyl sulphonates,"[CH,$(C(#C)[#6])]#CS(=O)(=O)O[#6]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1577,17,Polarised alkyne-alkyl sulfones,"[CH,$(C(#C)[#6])]#CS(=O)(=O)[#6]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1578,17,Polarised alkyne-alkyl sulfinyls,"[CH,$(C(#C)[#6])]#C[SX3](=O)[#6]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1579,17,Polarised alkyne-pyridines,"[CH,$(C(#C)[#6])]#C[$(c1ncccc1),$(c1ccncc1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1580,17,Polarised alkyne-pyrazines,"[CH,$(C(#C)[#6])]#Cc1nccnc1",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1581,17,Polarised alkyne-pyrimidines,"[CH,$(C(#C)[#6])]#C[$(c1ncccn1),$(c1cncnc1),$(c1ncncc1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1582,17,Polarised alkyne-triazines,"[CH,$(C(#C)[#6])]#C[$(c1ncncn1),$(c1nncnc1),$(c1nnccn1),$(c1cnncn1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1583,17,Propargyl alcohols,"[CH,$(C(#C)[#6])]#C[CH2][OH]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1584,17,Benzoquinones,"[$(C1(=O)[#6]=,:[#6]C(=O)[CH]=C1),$(C1(=O)C(=O)[#6]=,:[#6][CH]=C1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1585,17,Quinone-imines,"[$(C1(=O)[#6]=,:[#6][$(C=[NH]),$(C=N[CX4])][CH]=C1),$(C1(=O)[$(C=[NH]),$(C=N[CX4])][#6]=,:[#6][CH]=C1),$(C1(=O)[$(C=[NH]),$(C=N[CX4])]C=[CH][#6]=,:[#6]1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1586,17,Quinone-diimines,"[$([CH]1=C[$(C=[NH]),$(C=N[CX4])][#6]=,:[#6][$(C=[NH]),$(C=N[CX4])]1),$([CH]1=C[$(C=[NH]),$(C=N[CX4])][$(C=[NH]),$(C=N[CX4])][#6]=,:[#6]1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1587,17,Hydroquinones,"[$(c1([OH,$(O[CH3])])c[cH]c([OH,$(O[CH3])])cc1),$(c1([OH,$(O[CH3])])c([OH,$(O[CH3])])cc[cH]c1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1588,17,Aminophenols,"[$(c1([OH])c[cH]c([NH2])cc1),$(c1([OH])c([NH2])cc[cH]c1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1589,17,Benzenediamines,"[$(c1([NH2])c[cH]c([NH2])cc1),$(c1([NH2])c([NH2])cc[cH]c1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1590,17,Quinone-methides,"[$(C1=CC(=O)[#6]=,:[#6]C1(=[CH][CX4])),$(C1(=[CH][CX4])C(=O)[#6]=,:[#6]C=C1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1591,17,Pyranones,"[$([cH]1cc(=[O,NH])cc[o,n]1),$([cH]1cc(=[O,NH])[o,n]cc1),$(c1cc(=[O,NH])[o,n][cH]c1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1592,17,Poly aromatic hydrocarbons,"[c;R1,R2,R3]1[c;R1,R2,R3][c;R1,R2,R3][c;R2,R3]2[c;R2,R3]([c;R1,R2,R3]1)[c;R1,R2,R3][c;R1,R2,R3][c;R1,R2,R3][c;R1,R2,R3]2",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1593,17,Acid imides,"O=C1[NH,$(N(C=O)(C=O)[#6])]C(=O)[CH,$(C(C=O)(=C)[#6])]=[CH]1",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1594,17,Mono-aldehydes,"[CH2,$([CH](=O)[CX4]),$([CH](=O)c1a(*)caaa1),$([CH](=O)c1a(*)aaa1)]=O",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1595,17,Aliphatic amines,[#6][CH2][NX3H2],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1596,17,"Di-substituted α,β-unsaturated alkenes (polarized by an aldehyde moiety)","[$(C(=C)([#6])[#6]);!$(C(=C)([#6])C=[CH2,CH])]=C[CH]=O",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1597,17,Di-substituted allyl alcohols,"C([#6])([#6])=[CH,$(C(=C)([CH2][OH])[#6])][CH2][OH]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1598,17,"1,2-Dicarbonyls","[CH,$(C(=O)(C=O)[CX4]),$(C(=O)(C=O)c1a(*)aaaa1),$(C(=O)(C=O)c1a(*)aaa1)](=O)[CH,$(C(=O)(C=O)[#6]);!$(C(=O)(C=O)C=[CH2,CH]);!$(C(=O)(C=O)C#C)]=O",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1599,17,"1,3-Dicarbonyls","[CH,$(C(=O)([CX4]C=O)[CX4]),$(C(=O)([CX4]C=O)c1a(*)aaaa1),$(C(=O)([CX4]C=O)c1a(*)aaa1)](=O)[CX4][CH,$(C(=O)([CX4]C=O)[#6]);!$(C(=O)([CX4]C=O)C=[CH2,CH]);!$(C(=O)([CX4]C=O)C#C)]=O",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1600,17,Ethylenediamines,"[$([NH2,$([NH]([CH2])[CX4])][CH2][CH2][NH2]),$([NH]1[CH2][CH2][NH][CH2][CH2]1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1601,17,Ethanolamines,"[$([NH2,$([NH]([CH2])[CX4])][CH2][CH2][OH]),$([NH]1[CH2][CH2]O[CH2][CH2]1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1602,17,Piperizines,[NH]1CC[NH1]CC1,Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1603,17,Morpholines,O1CC[NH1]CC1,Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1604,17,Alkyl halides,"[CH3,$([CH2]([F,Cl,Br,I])[#6]),$([CH]([F,Br,Cl,I])([#6])[#6]);!$([CH2,CH]C=O);!$([CH2,CH][CX4][NX3,SX2]);!$([CH2,CH][CX4][F,Cl,Br,I])][F,Cl,Br,I]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1605,17,Alkyl diazos,"[CH3,$([CH2](N=N)[#6]),$([CH](N=N)([#6])[#6])][NX2]=[NH,$(N(=N)[#6])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1606,17,Alkyl sulfates,"[#6]OS(=O)(=O)O[CH3,$([CH2](O)[#6]),$([CH](O)([#6])[#6])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1607,17,Alkyl sulphonates,"[#6]S(=O)(=O)O[CH3,$([CH2](O)[#6]),$([CH](O)([#6])[#6])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1608,17,Alkyl (thio)phosphates,"[#6][O,SX2]P(=[O,SX1])([O,SX2][#6])[O,SX2][CH3,$([CH2](O)[#6]),$([CH](O)([#6])[#6])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1609,17,Alkyl (thio)phosphonates,"[#6][O,SX2]P(=[O,SX1])([#6])[O,SX2][CH3,$([CH2](O)[#6]),$([CH](O)([#6])[#6])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1610,17,Allyl acetates,"[#6]C(=[O,SX1])[O,SX2][CH2,$([CH]([O,SX2])[#6])][c,CX3,CX2]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1611,17,α-Halocarbonyls,"[$([CH]=[O,SX1]),$(C([#6])=[O,SX1])][CH2,$([CH](C=[O,SX1])[#6])][F,Cl,Br,I]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1612,17,β-Haloethers,"[CX4]O[CH2,$([CH](O)([CX4])[CX4]),$(C(O)([CX4])([CX4])[CX4])][CH2,$([CH]([F,Cl,Br,I])[#6])][F,Cl,Br,I]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1613,17,α-Haloalkenes,"[CH2,$([CH](=C)[#6]),$(C(=C)([#6])[#6])]=[CH,$(C(=C)[#6])][$([CH2](C=C)[F,Cl,Br,I,$(C#N),$(OS(=O)(=O)O[#6]),$(OS(=O)(=O)[#6])]),$([CH](C=C)([#6])[F,Cl,Br,I,$(C#N),$(OS(=O)(=O)O[#6]),$(OS(=O)(=O)[#6])])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1614,17,α-Haloalkynes,"[CH,$(C(#C)[#6])]#C[$([CH2](C#C)[F,Cl,Br,I,$(C#N),$(OS(=O)(=O)O[#6]),$(OS(=O)(=O)[#6])]),$([CH](C#C)([#6])[F,Cl,Br,I,$(C#N),$(OS(=O)(=O)O[#6]),$(OS(=O)(=O)[#6])])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1615,17,α-Halobenzyls,"[c][$([CH2]([c])[F,Cl,Br,I,$(C#N),$(OS(=O)(=O)O[#6]),$(OS(=O)(=O)[#6])]),$([CH]([a])([#6])[F,Cl,Br,I,$(C#N),$(OS(=O)(=O)O[#6]),$(OS(=O)(=O)[#6])])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1616,17,α-Haloethers,"[CX4]O[CH2,$([CH](O)([F,Cl,Br,I])[#6])][F,Cl,Br,I]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1617,17,Epoxides,C1OC1,Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1618,17,Aziridines,C1[NX3]C1,Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1619,17,Sulfuranes,C1[SX2]C1,Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1620,17,Lactones,C1CC(=O)O1,Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1621,17,Vinyl benzenes,c1([CX3!R]=[CX3!R])ccccc1,Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1622,17,Nitrosoureas,"[NX3]C(=O)[$([NH](C=O)[NX2]=O),$(N(C=O)([#6])[NX2]=O)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1623,17,Nitrosoguanidines,"[NX3]C(=[NH])[$([NH](C=[NH])[NX2]=O),$(N(C=[NH])([#6])[NX2]=O)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1624,17,N-Acytoxy-N-acetylphenyls,"[a][NX3](O[$([CH](O)=O),$(C(=O)(O)[#6])])[$([CH](N)=O),$(C(=O)(N)[#6])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1625,17,N-Acytoxy-N-alkoxyamides,"[#6]O[NX3](O[$([CH](O)=O),$(C(=O)(O)[#6])])[$([CH](N)=O),$(C(=O)(N)[#6])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1626,17,Thiols,"[#6&!$([CX3]=[OX1,SX1,NX2])][SH]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1627,17,Disulfides,[#6][SX2][SX2][#6],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1628,17,Thiosulphonates,[#6][SX2][SX4](=O)(=O)[#6],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1629,17,Sulfoxides of disulfides,[#6][SX2][SX3](=O)[#6],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1630,17,Sulfenyl halides,"[#6][SX2][F,Cl,Br,I]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1631,17,Thiocyanates,[#6][SX2]C#N,Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1632,17,Aromatic sulphonic acids,[a][SX4](=O)(=O)[OH],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1633,17,Isothiazol-3-ones,"[cH,$(c(c)([sX2])[#6])]1[cH,$(c(c)(c=O)[#6])]c(=O)[nH,$(n(c=O)([sX2])[#6])][sX2]1",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1634,17,Isothiazolin-3-ones,"[CH2,$([CH](C)([SX2])[#6])]1[CH2,$([CH](C)(C=O)[#6])]C(=O)[NH,$(N(C=O)([SX2])[#6])][SX2]1",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1635,17,N-Chloro-sulphonamides,[#6][SX4](=O)(=O)[NH]Cl,Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1636,17,N-Haloimides,"[CH,$(C(=O)(N)[#6])](=O)[NX3]([F,Cl,Br,I])[CH,$(C(=O)(N)[#6])]=O",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1637,17,Polarized alkenes with a halogen leaving group,"C=[CH][F,Cl,Br,I]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1638,17,Polarized alkenes with an alkyl sulphonate leaving group,C=[CH]OS(=O)(=O)[#6],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1639,17,Polarized alkenes with an alkyl sulfate leaving group,C=[CH]OS(=O)(=O)O[#6],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1640,17,Polarized alkenes with an alkyl (thio)phosphonate leaving group,"C=[CH]OP(=[O,SX])(O[#6])[#6]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1641,17,Polarized alkenes with an alkyl (thio)phosphate leaving group,"C=[CH]OP(=[O,SX])(O[#6])O[#6]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1642,17,Mustards,"[NX3,SX2][CH2,$([CH]([NX3,SX2])([CX4])[CX4])][CH2,$([CH]([CX4])([Cl,Br,I])[CX4])][Cl,Br,I]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1643,17,"1,2-Dihaloalkanes","[Cl,Br,I][CH2,$([CH]([Cl,Br,I])([CX4])[CX4])][CH2,$([CH]([Cl,Br,I])([CX4])[CX4])][Cl,Br,I]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1644,17,Activated benzenes (1),"[$(c1([F,Cl,Br,$(OC(F)(F)F),$(C#N)])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1),$(c1([F,Cl,Br,$(OC(F)(F)F),$(C#N)])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cccc1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]))]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1645,17,Activated benzenes (2),"[$(c1(F)c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([$([CH]=O),$(C(=O)[CH3]),$(C(F)(F)F)])cc1),$(c1(Cl)c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([CH]=O)cc1),$(c1(F)c([$(C#N),$([CH]=O)])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1646,17,Activated benzenes (3),"[$(c1([$(OC(F)(F)F),Br,$(C#N)])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([CH]=O)cc1),$(c1([F,Cl,Br,$(OC(F)(F)F),$(C#N)])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1647,17,Activated tetrafluorobenzenes,"[$(c1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),$([CH]=O),$(C#N)])c(F)c(F)c(F)c(F)c1([!F])),$(c1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),$([CH]=O),$(C#N)])c(F)c(F)c(F)c([!F])c1F),$(c1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),$([CH]=O),$(C#N)])c(F)c(F)c([!F])c(F)c1F)]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1648,17,Activated pentafluorobenzenes,"c1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),$([CH]=O),$(C#N),$(C(=O)[CH3])])c(F)c(F)c(F)c(F)c1(F)",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1649,17,Activated pyridines,"[$(c1([F,Cl,Br,$(C#N),$(OC(F)(F)F)])ncc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),$(C#N),$([CH]=O),$(C(=O)[CH3])])cc1),$(c1([F,Cl,Br,$(C#N),$(OC(F)(F)F)])ncccc1[$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),$(C#N),$([CH]=O),$(C(=O)[CH3])]),$(c1([F,Cl,Br,$(C#N),$(OC(F)(F)F)])ccncc1[$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),$(C#N),$([CH]=O),$(C(=O)[CH3])])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1650,17,Formaldehyde releasers (1),"[$(O1COCC(Br)([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])C1),$([OX2H1]CC(Br)([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])C[OX2H1])]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1651,17,Formaldehyde releasers (2),[#7X3]1(C[OH1])C(=[OX1])[#7X3](C[OH1])C([CH3])([CH3])C1(=[OX1]),Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1652,17,Formaldehyde releasers (3),"C1(=[OX1])[NX3H1]C(=[OX1])[NX3H1][CX4]1(C[OH1])[NX3H1][CX3](=[OX1])[NX3!H0][#1,#6]",Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1653,17,Formaldehyde releasers (4),[OH1][CX4][NX3H1][CX4][CX3](=[OX1])[OX2H1],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1654,17,Formaldehyde releasers (5),c1ccccc1[CX4][OX2][CX4][OH1],Electrophilic,1,1,Litterature,Structural filters for compounds that could take part in electrophilic reaction and unselectively bind to proteins +1655,18,Aromatic nitro (general),"[a!R0][$([NX3+](=[OX1])([O-])),$([NX3](=O)=O)]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1656,18,Aromatic amine (general),[a!R0][NX3H2],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1657,18,Three-membered heterocycles (general),"[NX3H1,SX2,OX2]1[CX4][CX4]1",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1658,18,Nitroso (general),[NX2]=[OX1],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1659,18,Unsubstituted heteroatom-bonded heteroatom (general),"[$([NX3H2]-[#7]),$([NX3H2]-[#8]),$([OX2H1]-[#7]),$([OX2H1]-[#8])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1660,18,Azo-type (general),[NX2]=[NX2],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1661,18,Aliphatic halide (general),"[CX4][Cl,Br,I]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1662,18,Polycyclic aromatic system (general),"[$([aR3]),$([$([aR2]([aR])([aR])([aR]))].[$([aR2]([aR])([aR])([aR]))].[$([aR2]([aR])([aR])([aR]))].[$([aR2]([aR])([aR])([aR]))])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1663,18,Aromatic nitro (specific),"[a!R0][$([NX3+](=[OX1])[O-]),$([NX3](=[OX1])=[OX1]);!$([NX3]aa-[$(C(F)(F)F),$(S(=O)(=O)[OH]),$(S(=O)(=O)[NX3]([#1,#6])[#1,#6]),$(S(=O)(=O)[a!r0]),$([CX4]([CH3])([CH3])[CH3])]);!$([NX3]aaa-[$(C(F)(F)F),$(S(=O)(=O)[OH]),$(S(=O)(=O)[NX3]([#1,#6])[#1,#6]),$(S(=O)(=O)[a!r0])]);!$([NX3]aaaa-[$(C(F)(F)F),$(S(=O)(=O)[OH]),$(S(=O)(=O)[NX3]([#1,#6])[#1,#6]),$(S(=O)(=O)[a!r0])])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1664,18,Aromatic amine (specific),"[a!R0][$([NH2]);!$([NH2]aa[$(C(F)(F)F),$(S(=O)(=O)[NX3]([#6,#1])[#6,#1]),$(S(=O)(=O)[OH]),$(S(=O)(=O)[a!r0]),$(C(=[OX1])[OH1]),$(C(=[OX1])[OX2][#6])]);!$([NH2]aaa[$(C(F)(F)F),$(S(=O)(=O)[NX3]([#6,#1])[#6,#1]),$(S(=O)(=O)[OH]),$(S(=O)(=O)[a!r0]),$(C(=[OX1])[OH]),$(C(=[OX1])[OX2][#6])]);!$([NH2]aaaa[$(C(F)(F)F),$(S(=O)(=O)[NX3]([#6,#1])[#6,#1]),$(S(=O)(=O)[OH]),$(S(=O)(=O)[a!r0]),$(C(=[OX1])[OH]),$(C(=[OX1])[OX2][#6])])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1665,18,Aromatic nitroso (specific),[a!R0][NX2]=[OX1],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1666,18,Alkyl nitrite (specific),[OX1]=[NX2][OX2][CX4],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1667,18,Nitrosamine (specific),"[OX1]=[NX2][NX3]([#6,#1])[#6,#1]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1668,18,Epoxide (specific),[CX4]1[OX2][CX4]1,Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1669,18,Aziridine (specific),[CX4]1[NX3H1][CX4]1,Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1670,18,Azide (specific),"[$([NX2]=[NX2+]=[NX1-]),$(N=[NX2+]=N),$([NX2-]-[NX2+]#[NX1])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1671,18,Diazo (specific),"[$([#6]=[NX2+]=N),$([#6]=[NX2]=[NX1]),$([#6]=[NX2+]=[NX1-]),$([#6]-[NX2+]#[NX1]),$([#6-]-[NX2+]#[NX1])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1672,18,Triazene (specific),[NX3!R][NX2!R]=[NX2!R],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1673,18,Aromatic azo (specific),[$([NX2]([a!r0])=[NX2][a!r0]);!$([NX2](aaS(=O)(=O)[OH])=[NX2]aaS(=O)(=O)[OH]);!$([NX2](aaS(=O)(=O)[OH])=[NX2]aaaS(=O)(=O)[OH]);!$([NX2](aaaS(=O)(=O)[OH])=[NX2]aaS(=O)(=O)[OH]);!$([NX2](aaS(=O)(=O)[OH])=[NX2]aaaaS(=O)(=O)[OH])!$([NX2](aaaaS(=O)(=O)[OH])=[NX2]aaS(=O)(=O)[OH]);!$([NX2](aaaS(=O)(=O)[OH])=[NX2]aaaS(=O)(=O)[OH]);!$([NX2](aaaS(=O)(=O)[OH])=[NX2]aaaaS(=O)(=O)[OH]);!$([NX2](aaaaS(=O)(=O)[OH])=[NX2]aaaS(=O)(=O)[OH]);!$([NX2](aaaaS(=O)(=O)[OH])=[NX2]aaaaS(=O)(=O)[OH])],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1674,18,Unsubstituted heteroatom-bonded heteroatom (specific),"[$([NX3H2][#7]),$([NX3H2][#8]),$([OX2H1][#7]),$([OX2H1][#8]);!$([NH2][#7][$([OX2]-[OX2][#6]),$([NX3]([!#1])[NX3]([!#1]))]);!$([NH2][#8][$([OX2]-[OX2][#6]),$([NX3]([!#1])[NX3]([!#1]))]);!$([OH1][#7][$([OX2]-[OX2][#6]),$([NX3]([!#1])[NX3]([!#1]))]);!$([OH1][#8][$([OX2]-[OX2][#6]),$([NX3]([!#1])[NX3]([!#1]))]);!$([OH1][NX3H1][a!r0])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1675,18,Aromatic hydroxylamine (specific),[a!r0][NX3H1][OH1],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1676,18,Aliphatic halide (specific),"[Cl,Br,I][$([CX4]);!$([CX3](=[OX1,SX1,NX2]));!$([CH2][CH2][SX2,NX3])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1677,18,Carboxylic acid halide (specific),"[Cl,Br,I][CX3](=[OX1])[#1,*&!$([OH1])&!$([SH1])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1678,18,Nitrogen and sulphur mustard (specific),"[Cl,Br,I][CH2][CH2][SX2,NX3]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1679,18,Polycyclic aromatic system (specific),"[$([$([aR3]),$([$([aR2]([aR])([aR])([aR]))].[$([aR2]([aR])([aR])([aR]))].[$([aR2]([aR])([aR])([aR]))].[$([aR2]([aR])([aR])([aR]))])]);!$([cR1H1]1[cR1H1][cR1][cR1][cR2]2[cR2]1[cR2]3[cR2]([cR1][cR1]2)[cR1][cR1][cR1H1][cR1H1]3);!$([cR1]1[cR1][cR1][cR1H1][cR2]2[cR2]1[cR2]3c([cR1H1][cR1H1]2)[cR1H1][cR1][cR1][cR1]3)] ",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1680,18,Bay-region in polycyclic aromatic hydrocarbons (specific),[cR1H1]1[cR1H1][cR1][cR1][cR2]2[cR2]1[cR2]3[cR2]([cR1][cR1]2)[cR1][cR1][cR1H1][cR1H1]3,Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1681,18,K-region in polycyclic aromatic hydrocarbons (specific),[cR1]1[cR1][cR1][cR1H1][cR2]2[cR2]1[cR2]3c([cR1H1][cR1H1]2)[cR1H1][cR1][cR1][cR1]3,Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1682,18,Sulfonate-bonded carbon atom (additional),[CX4][Sv6X4](=[OX1])(=[OX1])[OX2],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1683,18,"α, β-Unsaturated aldehyde (additional)",[CX3]=[CX3][CX3;H1]=[OX1],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1684,18,Aliphatic N-nitro (additional),"[NX3][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1][O-]))]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1685,18,Diazonium (additional),"[$([a!r0][NX2+]#[NX1]),$([a!r0][NX2]#[NX1])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1686,18,β-Propiolactone (additional),[OX2]1[CX4][CX4][CX3]1(=[OX1]),Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1687,18,"α,β-Unsaturated alkoxy (additional)",[CX4][OX2][CX3H1]=[CX3H1],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1688,18,1-Aryl-2-monoalkyl hydrazine (additional),[a!r0][NX3H1]-[NX3H1][CX4],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1689,18,Aromatic methylamine (additional),[a!r0][NX3;H1][CH3],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1690,18,Aromatic hydroxylamine ester (additional),[a!r0][NH][OX2][CX3](=[OX1]),Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1691,18,Polycyclic planar system (additional),[*R1]1[*R2]2=[*R1][*R1]=[*R1][*R1]=[*R2]2[*R1][*R2]3=[*R1][*R1]=[*R1][*R1]=[*R2]13,Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1692,18,Acyl halides,"[Br,Cl,F,I][CX3](=[OX1])[#1,*&!$([OH1])&!$([SH1])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1693,18,Alkyl or benzyl ester of sulphonic or phosphonic acid,"[$([Sv6X4;!$([Sv6X4][OH]);!$([Sv6X4][SH]);!$([Sv6X4][O-]);!$([Sv6X4][S-])](=[OX1])(=[OX1])[$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2][CH0](C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2][CH2]c1ccccc1)]),$([Pv5X4;!$([Pv5X4][OH]);!$([Pv5X4][SH]);!$([Pv5X4][O-]);!$([Pv5X4][S-])](=[OX1])([$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2][CH0](C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2][CH2]c1ccccc1)])[$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2][CH0](C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2][CH2]c1ccccc1)])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1694,18,N-Methylol derivatives,[OX2;H1][CH2][NX3],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1695,18,Monohaloalkene,"[CX3]([CX4,#1])([F,Cl,Br,I])=[CX3]([CX4,#1])[!F!Cl!Br!I]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1696,18,S or N mustard,"[F,Cl,Br,I][CH2][CH2][NX3,SX2][CH2][CH2][F,Cl,Br,I]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1697,18,Propiolactones or propiosultones,"[$([OX2]1[CX4][CX4][CX3]1(=[OX1])),$([CX4]1[CX4][CX4][Sv6;X4](=[OX1])(=[OX1])[OX2]1)]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1698,18,Epoxides and aziridines,"[CX4]1[OX2,NX3][CX4]1",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1699,18,Aliphatic halogens,"[CX4;!H0][Br,Cl,I]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1700,18,Alkyl nitrite,[OX1]=[NX2][OX2][CX4],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1701,18,"α, β-Unsaturated carbonyl","[CX3]([!$([OH]);!$([O-])])(=[OX1])[CX3H1]=[CX3]([$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([#1,#7,#8,F,Cl,Br,I,#15,#16,#5]),$([CH]=[CH][#6]);!$([a!r0])])[$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([#1,#7,#8,F,Cl,Br,I,#15,#16,#5]),$([CH]=[CH][#6]);!$([a!R0])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1702,18,Simple aldehyde,"[CX3]([H])(=[OX1])[#1,#6&!$([CX3]=[CX3])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1703,18,Quinones,"[$([#6X3]1=,:[#6X3]-,:[#6X3](=[OX1])-,:[#6X3]=,:[#6X3]-,:[#6X3]1(=[OX1])),$([#6X3]1(=[OX1])-,:[#6X3](=[OX1])-,:[#6X3]=,:[#6X3]-,:[#6X3]=,:[#6X3]1)]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1704,18,Hydrazine,[NX3;!$([NX3](=[OX1])=[OX1]);!$([NX3+](=[OX1])[O-])][NX3;!$([NX3](=[OX1])=[OX1]);!$([NX3+](=[OX1])[O-])],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1705,18,Aliphatic azo and azoxy,"[$([C,#1][NX2]=[NX2][C,#1]),$([CX3]=[NX2+]=N),$([CX3]=[NX2+]=[NX1-]),$([CX3-][NX2+]#[NX1]),$([CX3][NX2]#[NX1]),$(C[NX2]=N(=O)[*]),$(C[NX2]=[N+]([O-])[*])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1706,18,Isocyanate and isothiocyanate groups,"[NX2]=[CX2]=[OX1,Sv2X1]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1707,18,Alkyl carbamate and thiocarbamate,"[NX3]([C,#1])([C,#1])[CX3](=[OX1,Sv2X1])[OX2,Sv2X2]C",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1708,18,Polycyclic aromatic hydrocarbons,"[$([cX3R3]),$([cX3;R1,R2,R3]1[cX3;R1,R2,R3][cX3;R1,R2,R3][cX3;R1,R2,R3][cX3;R2,R3]2[cX3;R2,R3]1[cX3;R1,R2,R3][cX3;R2,R3]3[cX3;R2,R3]([cX3;R1,R2,R3]2)[cX3;R1,R2,R3][cX3;R1,R2,R3][cX3;R1,R2,R3][cX3;R1,R2,R3]3)].[!$([n,o,s])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1709,18,Heterocyclic polycyclic aromatic hydrocarbons,"[$([aR3].[n,o,s]),$([$([aR2]([aR])([aR])([aR]))].[$([aR2]([aR])([aR])([aR]))].[$([aR2]([aR])([aR])([aR]))].[$([aR2]([aR])([aR])([aR]))].[n,o,s])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1710,18,Alkyl and aryl N-nitroso groups,[#6][NX3][NX2]=[OX1],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1711,18,Azide and triazene groups,"[$([NX2!R]=[NX2!R][NX3!R]),$([NX2]=[NX2+]=[NX1-]),$([NX2]=[NX2+]=N)]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1712,18,Aliphatic N-nitro group,"[NX3]([#1,C])([#1,C])[$([NX3+](=[OX1])[O-]),$([NX3](=O)=O)]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1713,18,"α, β-Unsaturated aliphatic alkoxy group",C[CX3;H1]=[CX3;H1][OX2][#6],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1714,18,Aromatic nitroso group,[a!r0][NX2]=[OX1],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1715,18,Aromatic ring N-oxide,[O-][N+]1=CC=CC=C1,Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1716,18,Nitro-aromatic,"[a!R0][$([NX3+](=[OX1])[O-]),$([NX3](=[OX1])=[OX1]);!$([NX3]a(a-[!#1])a-[!#1]);!$([NX3]aa-C(=[OX1])[OH]);!$([NX3]aa-[Sv6X4](=[OX1])(=[OX1])[OH]);!$([NX3]aaa-[Sv6X4](=[OX1])(=[OX1])[OH]);!$([NX3]aaaa-[Sv6X4](=[OX1])(=[OX1])[OH])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1717,18,"Primary aromatic amine, hydroxyl amine and its derived esters or amine generating group","[a!R0][$([NH2]),$([NX3][OX2H1]),$([NX3][OX2][CX3H1](=[OX1])),$([NX2]=[CH2]),$([NX2]=C=[OX1]);!$([NX3,NX2]a(a-[!#1])a-[!#1]);!$([NX3,NX2]aa-C(=[OX1])[OH]);!$([NX3,NX2]aa-[Sv6X4](=[OX1])(=[OX1])[OH]);!$([NX3,NX2]aaa-[Sv6X4](=[OX1])(=[OX1])[OH]);!$([NX3,NX2]aaaa-[Sv6X4](=[OX1])(=[OX1])[OH])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1718,18,Aromatic mono- and dialkylamine,"[a!R0][$([NX3;H1][CH3]),$([NX3;H1][CH2][CH3]),$([NX3]([CH3])[CH3]),$([NX3]([CH3])[CH2][CH3]),$([NX3]([CH2][CH3])[CH2][CH3]);!$([NX3]a(a-[!#1])a-[!#1]);!$([NX3]aa-C(=[OX1])[OH]);!$([NX3]aa-[Sv6X4](=[OX1])(=[OX1])[OH]);!$([NX3]aaa-[Sv6X4](=[OX1])(=[OX1])[OH]);!$([NX3]aaaa-[Sv6X4](=[OX1])(=[OX1])[OH])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1719,18,Aromatic N-acyl amine,"[a!R0][$([NX3;H1]),$([NX3][CH3]);!$([NX3]a(a-[!#1])a-[!#1]);!$([NX3]aa-C(=[OX1])[OH]);!$([NX3]aa-[Sv6X4](=[OX1])(=[OX1])[OH]);!$([NX3]aaa-[Sv6X4](=[OX1])(=[OX1])[OH]);!$([NX3]aaaa-[Sv6X4](=[OX1])(=[OX1])[OH])][CX3](=[OX1])([$([#1]),$([CH3])])",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1720,18,Aromatic diazo, [$([NX2]([a!r0])=[NX2][a!R0]);!$([NX2](aaS(=O)(=O)[OH])=[NX2]aaS(=O)(=O)[OH]);!$([NX2](aaS(=O)(=O)[OH])=[NX2]aaaS(=O)(=O)[OH]);!$([NX2](aaaS(=O)(=O)[OH])=[NX2]aaS(=O)(=O)[OH]);!$([NX2](aaS(=O)(=O)[OH])=[NX2]aaaaS(=O)(=O)[OH])!$([NX2](aaaaS(=O)(=O)[OH])=[NX2]aaS(=O)(=O)[OH]);!$([NX2](aaaS(=O)(=O)[OH])=[NX2]aaaS(=O)(=O)[OH]);!$([NX2](aaaS(=O)(=O)[OH])=[NX2]aaaaS(=O)(=O)[OH]);!$([NX2](aaaaS(=O)(=O)[OH])=[NX2]aaaS(=O)(=O)[OH]);!$([NX2](aaaaS(=O)(=O)[OH])=[NX2]aaaaS(=O)(=O)[OH])],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1721,18,Coumarins and furocoumarins,"[$(c1cccc2c1oc(=O)cc2),$(C1=CC(=O)OC2=CC=CC=C12),$(C1=CC(=O)Oc2ccccc12)]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1722,18,Primary and secondary aromatic amines,"[$([a!R0][NX3;H2]),$([a!r0][NX3;H1][CH3]),$([a!R0][NX3;H1][CH2][CH3])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1723,18,Tertiary aromatic amines,"a[NX3]([$([CH3]),$([CH2][CH3])])[$([CH3]),$([CH2][CH3])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1724,18,Secondary aromatic acetamides and formamides,"[$([a!R0][NX3;H1][CX3;H1](=[OX1])),$([a!r0][NX3;H1][CX3](=[OX1])[CH3])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1725,18,Nitroarenes,"[a!R0][$([NX3+](=[OX1])[O-]),$([NX3](=O)(=O))]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1726,18,Nitrosoarenes,[a!R0][NX2]=[OX1],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1727,18,Arylhydroxylamines,"[a!R0][NX3;H1][OX2][#1,#6]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1728,18,N-Nitroso-N-dialkylamines,[NX3]([CX4])([CX4])[NX2]=[OX1],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1729,18,N-Nitroso-N-alkylamides,"[CX4,a!r0][CX3](=[OX1])[NX3]([CX4])[NX2]=[OX1]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1730,18,N-Nitroso-N-alkylureas,"[OX1]=[NX2][NX3]([CX4])[CX3](=[OX1])[NX3H1][CX4,a!R0]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1731,18,N-Nitroso-N-alkylcarbamates (aka urethanes),"[OX1]=[NX2][NX3]([CX4])[CX3](=[OX1])[OX2][CX4,a!R0]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1732,18,N-Nitroso-N-alkylnitriles,[OX1]=[NX2][NX3]([CX4])[CX2]#[NX1],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1733,18,N-Nitroso-N-hydroxylamines,[OX1]=[NX2][NX3]([OH1])[#6],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1734,18,Hydrazines,"[NX3]([$([#1]),$([CX4]),$([a!r0])])([$([CX4!H0]),$([CX4][OH]),$([CX3]=[OX1])])[NX3]([$([#1]),$([CX4]),$([a!r0])])[$([#1]),$([CX4]),$([a!r0])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1735,18,Azoxy alkane,"[$([$([CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([CX4]([*!C])([*!C])([*!C]))[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([CX4]([*!C])([*!C])([*!C]))),$([CX4]([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))[*!C])][NX3+](=O)=[NX2][$([CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([CX4]([*!C])([*!C])([*!C]))[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([CX4]([*!C])([*!C])([*!C]))),$([CX4]([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))[*!C])]),$([$([CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([CX4]([*!C])([*!C])([*!C]))[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([CX4]([*!C])([*!C])([*!C]))),$([CX4]([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))[*!C])][NX3](=O)=[NX2][$([CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([CX4]([*!C])([*!C])([*!C]))[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([CX4]([*!C])([*!C])([*!C]))),$([CX4]([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))[*!C])]),$([$([CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([CX4]([*!C])([*!C])([*!C]))[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([CX4]([*!C])([*!C])([*!C]))),$([CX4]([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))[*!C])][NX3+]([O-])=[NX2][$([CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([CX4]([*!C])([*!C])([*!C]))[CX4]([*!C])([*!C])([*!C])),$([CX4]([*!C])([*!C])([*!C])[CX4]([*!C])([*!C])[CX4]([*!C])([CX4]([*!C])([*!C])([*!C]))),$([CX4]([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))([CX4]([*!C])([*!C])([*!C]))[*!C])])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1736,18,Aliphatic halides,"[$([CX4]([$([OH]),$(C=O),$([NX3])])([!F!Cl!Br!I!C])([*!$(C)])[CH2][F,Cl,Br,I]),$([CX4]([!F!Cl!Br!I!C])([!F!Cl!Br!I!C])([*!$(C)])[CX4]([$([OH]),$(C=O),$([NX3])])([*!$(C)])[CH2][F,Cl,Br,I]),$([CX4]([!F!Cl!Br!I!C])([!F!Cl!Br!I!C])([*!$(C)])[CX4]([!F!Cl!Br!I!C])([*!$(C)])[CX4]([$([OH]),$(C=O),$([NX3])])([*!$(C)])[CH2][F,Cl,Br,I]),$([CX4]([CX4]([!F!Cl!Br!I!C])([!F!Cl!Br!I!C])[*!$(C)])([CX4]([!F!Cl!Br!I!C])([!F!Cl!Br!I!C])[*!$(C)])([$([OH]),$(C=O),$([NX3])])[CH2][F,Cl,Br,I]),$([CX4]([!F!Cl!Br!I!C])([!F!Cl!Br!I!C])([*!$(C)])[CX4]([!F!Cl!Br!I!C])([*!$(C)])[CX4]([!F!Cl!Br!I!C])([*!$(C)])[CX4]([*!$(C)])([$([OH]),$(C=O),$([NX3])])[CH2][F,Cl,Br,I]),$([CX4]([!F!Cl!Br!I!C])([!F!Cl!Br!I!C])([*!$(C)])[CX4]([*!$(C)])([CX4]([!F!Cl!Br!I!C])([!F!Cl!Br!I!C])([*!$(C)]))[CX4]([*!$(C)])([$([OH]),$(C=O),$([NX3])])[CH2][F,Cl,Br,I]),$([CX4]([CX4]([!F!Cl!Br!I!C])([!F!Cl!Br!I!C])[*!$(C)])([CX4]([!F!Cl!Br!I!C])([!F!Cl!Br!I!C])[*!$(C)])([CX4]([!F!Cl!Br!I!C])([!F!Cl!Br!I!C])[*!$(C)])[CH2][F,Cl,Br,I]),$([CX4]([!F!Cl!Br!I!C])([!F!Cl!Br!I!C])([*!$(C)])[CX4]([!F!Cl!Br!I!C])([*!$(C)])[CX4]([CX4]([!F!Cl!Br!I!C])([!F!Cl!Br!I!C])([*!$(C)]))([$([OH]),$(C=O),$([NX3])])[CH2][F,Cl,Br,I])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1737,18,Benzylic halides,"[a!r0][CH2][Cl,Br,I]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1738,18,Oxiranes and aziridines,"[CX4]1[OX2,NX3][CX4]1",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1739,18,Propiolactones,[OX2]1[CX4][CX4][CX3]1(=[OX1]),Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1740,18,Alkyl esters of sulfonic and sulphuric acids,"[$([CX4,a!r0][Sv6X4](=[OX1])(=[OX1])[OX2][$([CH3]),$([CH2][CH3])]),$([CX4,a!r0][OX2][Sv6X4](=[OX1])(=[OX1])[OX2][$([CH3]),$([CH2][CH3])])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1741,18,Alkyl esters of phosphonic and phosphoric acids,"[$([CX4,a!r0][Pv5X4](=[OX1])([OX2][$([CH3]),$([CH2][CH3])])[OX2][$([CH3]),$([CH2][CH3])]),$([CX4,#1][OX2][Pv5X4](=[OX1])([OX2][CX4,#1])[OX2][$([CH3]),$([CH2][CH3])])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1742,18,Mixed alkyl esters of thiophosphoric acid,"[CX4][OX2][Pv5X4](=[SX1])([OX2][CX4,#1])[OX2][$([CH3]),$([CH2][CH3])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1743,18,Haloethylamines,"[NX3]([#1,#6])([#1,#6])[CH2][CH2][Cl,Br,I,F]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1744,18,Haloalkylethers,"[$([#6][OX2][CH2][CH2][Cl,Br,I]),$([#6][OX2][CH2][Cl,Br,I])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1745,18,α-Halocarbonyl or a-halohydroxy,"[$([CX3](=[OX1])[CH2][Cl,Br,I]),$([CX4!H0]([OH1])[CH2][Cl,Br,I])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1746,18,Haloamines,"[#6][NX3]([#6])[Cl,Br,I,F]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1747,18,"α, β-Unsaturated carbonyls","[CX3]=[CX3][CX3](=[OX1])[$([#1][CX3]=[OX1]),$([#6]([CX3]=[OX1])),$([OX2]([CX3]=[OX1])[#6]),$([NX3]([CX3]=[OX1])([#1,#6])[#1,#6])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1748,18,Allylic halides and alkoxides,"[CX3]=[CX3][CH2][$([Cl,Br,I]),$([OX2])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1749,18,Halogenated methanes,"[CX4]([H,F,Cl,Br,I])([H,F,Cl,Br,I])([H,F,Cl,Br,I])[F,Cl,Br,I]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1750,18,Vinyl halides,"[CX3]=[CX3H1][Cl,Br,I]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1751,18,Polycyclic aromatic hydrocarbons,"[c;R1,R2,R3]1[c;R1,R2,R3][c;R1,R2,R3][c;R2,R3]2[c;R2,R3]([c;R1,R2,R3]1)[c;R1,R2,R3][c;R1,R2,R3][c;R1,R2,R3][c;R1,R2,R3]2",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1752,18,Isocyanate,[NX2]=[CX2]=[OX1],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1753,18,Isothiocyanate,[NX2]=[CX2]=[SX1],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1754,18,Azoarenes,[$([NX2]([a!r0])=[NX2][a!r0]);!$([NX2](aaS(=O)(=O)[OH])=[NX2]aaS(=O)(=O)[OH]);!$([NX2](aaS(=O)(=O)[OH])=[NX2]aaaS(=O)(=O)[OH]);!$([NX2](aaaS(=O)(=O)[OH])=[NX2]aaS(=O)(=O)[OH]);!$([NX2](aaS(=O)(=O)[OH])=[NX2]aaaaS(=O)(=O)[OH])!$([NX2](aaaaS(=O)(=O)[OH])=[NX2]aaS(=O)(=O)[OH]);!$([NX2](aaaS(=O)(=O)[OH])=[NX2]aaaS(=O)(=O)[OH]);!$([NX2](aaaS(=O)(=O)[OH])=[NX2]aaaaS(=O)(=O)[OH]);!$([NX2](aaaaS(=O)(=O)[OH])=[NX2]aaaS(=O)(=O)[OH]);!$([NX2](aaaaS(=O)(=O)[OH])=[NX2]aaaaS(=O)(=O)[OH])],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1755,18,Alkyl esters of phosphonic or sulphonic acids,"[$([CX4,a][Sv6X4](=[OX1])(=[OX1])[OX2][CX4]),$([CX4,a][Pv5X4](=[OX1])([OX2][#1,CX4])[OX2][CX4])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1756,18,Aromatic nitro groups,"[a!r0][$([NX3+](=[OX1])[O-]),$([NX3](=[OX1])=[OX1]);!$([NX3]a(a-[!#1])a-[!#1]);!$([NX3]aa-C(=[OX1])[OH])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1757,18,Aromatic azo groups,[$([NX2]([a!r0])=[NX2][a!r0]);!$([NX2](aaS(=O)(=O)[OH])=[NX2]aaS(=O)(=O)[OH]);!$([NX2](aaS(=O)(=O)[OH])=[NX2]aaaS(=O)(=O)[OH]);!$([NX2](aaaS(=O)(=O)[OH])=[NX2]aaS(=O)(=O)[OH]);!$([NX2](aaS(=O)(=O)[OH])=[NX2]aaaaS(=O)(=O)[OH])!$([NX2](aaaaS(=O)(=O)[OH])=[NX2]aaS(=O)(=O)[OH]);!$([NX2](aaaS(=O)(=O)[OH])=[NX2]aaaS(=O)(=O)[OH]);!$([NX2](aaaS(=O)(=O)[OH])=[NX2]aaaaS(=O)(=O)[OH]);!$([NX2](aaaaS(=O)(=O)[OH])=[NX2]aaaS(=O)(=O)[OH]);!$([NX2](aaaaS(=O)(=O)[OH])=[NX2]aaaaS(=O)(=O)[OH])],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1758,18,Aromatic rings N-oxides,[O-][N+]1=CC=CC=C1,Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1759,18,Aromatic mono- and dialkylamino groups,"[a!r0][$([NX3H1][CH3]),$([NX3H1][CH2][CH3]),$([NX3]([CH3])[CH3]),$([NX3]([CH3])[CH2][CH3]),$([NX3]([CH2][CH3])[CH2][CH3]);!$([NX3]a(a-[!#1])a-[!#1]);!$([NX3]aa-C(=[OX1])[OH])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1760,18,Alkyl hydrazines,"[NX3]([CX4])([#1,CX4])[NX3]([#1,CX4])[#1,CX4]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1761,18,Alkyl aldehydes,"[$([CX3]([H])(=[OX1])[#1,CX4])&!$([CX3]([H])(=[OX1])[CX3]=[CX3])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1762,18,N-Methylol derivatives,[OH1][CH2][NX3],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1763,18,Monohaloalkenes,"[CX3]([CX4,#1])(Cl)=[CX3]([!F!Cl!Br!I])[CX4,#1]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1764,18,"β-Haloethyl N, S - mustards","[F,Cl,Br,I][CH2][CH2][NX3,SX2][CH2][CH2][F,Cl,Br,I]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1765,18,N-Chloroamines,[#6][NX3]([#6])Cl,Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1766,18,Propiolactones and propiosultones,"[$([OX2]1[CX4][CX4][CX3]1(=[OX1])),$([CX4]1[CX4][CX4][Sv6;X4](=[OX1])(=[OX1])[OX2]1)]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1767,18,Aromatic and aliphatic aziridinyl derivatives,[CX4]1[NX3][CX4]1,Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1768,18,Aromatic and aliphatic substituted primary alkyl halides,"[F,Cl,Br,I][CH2][CX4,a]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1769,18,Derivatives of urethane (carbamates),[NX3][CX3](=[OX1])[OX2],Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1770,18,Aromatic amines,"[a!r0][$([NH2]),$([NX3H1][#6]),$([NX3]([#6])[#6]),$([NX3]([#6,#1])[OX2H1]),$([NX3]([#6,#1])[OX2][CX3]=[OX1]);!$([NX3]a(a-[!#1])a-[!#1]);!$([NX3]aa-C(=[OX1])[OH])]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1771,18,Aliphatic and aromatic epoxides,"[$([CX4]1[OX2][CX4]1),$([#6]1=[#6][#8]1)]",Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1772,19,phosphorodithionate,[$([SX2H0]P(=S)([OH0])[OH0])]P(=S)([OH0])[OH0],LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration +1773,19,"O,O-diethylphosphorodithionate",CCOP(=S)(OCC)SC([*:1]),LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration +1774,19,phosphoryl,[PX4H0](=O)([OH0])([OH0])[OH0],LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration +1775,19,"O,O-dimethylphosphoryl",COP(=O)(O([*:1]))OC,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration +1776,19,phosphorothionate,[$([OH0]P(=S)([OH0])[OH0])]P(=S)([OH0])[OH0],LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration +1777,19,diethylphosphorothionate,CCOP(=S)(O([*:1]))OCC,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration +1778,19,O-phenyl phenylphosphonothioate,S=P(O([*:1]))(Oc1ccc([*:1])cc1)c1ccccc1,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration +1779,19,O-phenyl phosphonothioate,S=P(O([*:1]))(O([*:1]))Oc1ccc([*:1])cc1,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration +1780,19,carbamate,[$(N([!H])C(=O)[OH0])]C(=O)[OH0],LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration +1781,19,"2,2-dimethyl-2,3-dihydro-1-benzofuran-7-yl N-(aminosulfanyl)-N-methylcarbamate",CN(SN([*:1])([*:1]))C(=O)Oc1cccc2CC(C)(C)Oc12,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration +1782,19,methyl(propoxysulfanyl) carbamate,CN(SOCCC([*:1]))C(=O)O([*:1]),LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration +1783,19,phenyl carbamate,O=C(N([*:1]))Oc1ccccc([*:1])1,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration +1784,19,O-(methylaminocarbonyl)oxime,[CX4]NC(=O)ON=C,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration +1785,19,dimethylcarbamate,CN(C)C(=O)O([*:1]),LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration +1786,19,barbiturates,*C1(*)[#6](=O)-[#7]-[#6](=O)-[#7]-[#6]1=O,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration +1787,19,4-Hydroxycoumarin,[OH1]C1=CC(=O)Oc2[cH][cH][cH][cH]c12,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration +1788,19,Phenothiazine,*-[#7]-1-c2ccccc2-[#16]-c2ccccc-12,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration +1789,19,1-carboximidoylpiperazine,[NR1X3]1[CX4R1][CX4R1][NX3R1]([CX3]=[NX2])[CX4R1][CX4R1]1,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration +1790,19,phenylpiperazine,[NR1X3]1[CX4R1][CX4R1][NX3R1](c2ccccc2)[CX4R1][CX4R1]1,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration +1791,19,"2,4-dichloro-benzene-1,3-dicarbonitrile",N#Cc1c([*:1])c([*:1])c(Cl)c(C#N)c1Cl,LD50-Oral,1,1,Litterature,Structural filters for compounds that may cause acute toxicity during oral administration +1792,20,Thiocarbonyl,"[$([NX3][CX3](=[Sv2X1])[NX3]),$([CX3;!$(C[OH]);!$(C[SH]);!$(C[O-]);!$(C[S-]);!$(CO[#6])](=[Sv2X1])[NX3])]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1793,20,Halogenated benzene,"c1ccccc1[$([Br,Cl,F,I]);!$([Br,Cl,F,I]aa[Br,Cl,F,I]);!$([Br,Cl,F,I]aaa[Br,Cl,F,I]);!$([Br,Cl,F,I]aa([OH])a([OH])a[OH]);!$([Br,Cl,F,I]aaa([OH])a([OH])a[OH]);!$([Br,Cl,F,I]aa([OH])a([OH])aa[OH])]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1794,20,Halogenated PAH,"[Br,Cl,F,I][$([cR1]1[cR1][cR1][cR1][cR1][cR1]1-[cR1]2[cR1][cR1][cR1][cR1][cR1]2),$([cR1]1[cR1][cR1][cR1][cR2]2[cR2]1[cR1][cR1][cR1][cR1]2)]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1795,20,Halogenated dibenzodioxins,"[OR1]1[CR2]2=[CR1][CR1]=[CR1][CR1]=[CR2]2[OR1][CR2]3=[CR1][CR1]([F,Cl,Br,I])=[CR1][CR1]=[CR2]13",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1796,20,Acyl halides,"[Br,Cl,F,I][CX3](=[OX1])[#1,*&!$([OH1])&!$([SH1])]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1797,20,Alkyl (C<5) or benzylester of sulphonic or phosphonic acid,"[$([Sv6X4;!$([Sv6X4][OH]);!$([Sv6X4][SH]);!$([Sv6X4][O-]);!$([Sv6X4][S-])](=[OX1])(=[OX1])[$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2][CH0](C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2][CH2]c1ccccc1)]),$([Pv5X4;!$([Pv5X4][OH]);!$([Pv5X4][SH]);!$([Pv5X4][O-]);!$([Pv5X4][S-])](=[OX1])([$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2][CH0](C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2][CH2]c1ccccc1)])[$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2][CH0](C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2]C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])(C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I])C([#1,F,Cl,Br,I])([#1,F,Cl,Br,I])[#1,F,Cl,Br,I]),$([OX2][CH2]c1ccccc1)])]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1798,20,N-methylol derivatives,[OX2;H1][CH2][NX3],Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1799,20,Monohaloalkene,"[CX3]([CX4,#1])([F,Cl,Br,I])=[CX3]([CX4,#1])[!F!Cl!Br!I]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1800,20,S or N mustard,"[F,Cl,Br,I][CH2][CH2][NX3,SX2][CH2][CH2][F,Cl,Br,I]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1801,20,β-lactones and γ- sultones,"[$([OX2]1[CX4][CX4][CX3]1(=[OX1])),$([CX4]1[CX4][CX4][Sv6;X4](=[OX1])(=[OX1])[OX2]1)]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1802,20,Epoxides and aziridines,"[CX4]1[OX2,NX3][CX4]1",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1803,20,Aliphatic halogens,"[CX4;!H0][Br,Cl,I]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1804,20,Alkyl nitrite,[OX1]=[NX2][OX2][CX4],Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1805,20,"α,β unsaturated carbonyls",[CX3](=[OX1])[CX3H1]=[CX3],Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1806,20,Simple aldehyde,"[CX3]([H])(=[OX1])[#1,#6&!$([CX3]=[CX3])]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1807,20,Quinones,"[$([#6X3]1=,:[#6X3]-,:[#6X3](=[OX1])-,:[#6X3]=,:[#6X3]-,:[#6X3]1(=[OX1])),$([#6X3]1(=[OX1])-,:[#6X3](=[OX1])-,:[#6X3]=,:[#6X3]-,:[#6X3]=,:[#6X3]1)]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1808,20,Hydrazine,[NX3;!$([NX3](=[OX1])=[OX1]);!$([NX3+](=[OX1])[O-])][NX3;!$([NX3](=[OX1])=[OX1]);!$([NX3+](=[OX1])[O-])],Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1809,20,Aliphatic azo and azoxy,"[$([C,#1][NX2]=[NX2][C,#1]),$([CX3]=[NX2+]=N),$([CX3]=[NX2+]=[NX1-]),$([CX3-][NX2+]#[NX1]),$([CX3][NX2]#[NX1]),$(C[NX2]=N(=O)[*]),$(C[NX2]=[N+]([O-])[*])]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1810,20,Isocyanate and isothiocyanate groups,"[NX2]=[CX2]=[OX1,Sv2X1]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1811,20,Alkyl carbamate and thiocarbamate,"[NX3]([C,#1])([C,#1])[CX3](=[OX1,Sv2X1])[OX2,Sv2X2]C",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1812,20,Polycyclic Aromatic Hydrocarbons,"[$([cX3R3]),$([cX3;R1,R2,R3]1[cX3;R1,R2,R3][cX3;R1,R2,R3][cX3;R1,R2,R3][cX3;R2,R3]2[cX3;R2,R3]1[cX3;R1,R2,R3][cX3;R2,R3]3[cX3;R2,R3]([cX3;R1,R2,R3]2)[cX3;R1,R2,R3][cX3;R1,R2,R3][cX3;R1,R2,R3][cX3;R1,R2,R3]3)].[!$([n,o,s])]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1813,20,Heterocyclic Polycyclic Aromatic Hydrocarbons,"[$([aR3].[n,o,s]),$([$([aR2]([aR])([aR])([aR]))].[$([aR2]([aR])([aR])([aR]))].[$([aR2]([aR])([aR])([aR]))].[$([aR2]([aR])([aR])([aR]))].[n,o,s])]",Non-Genotoxic-Carcinogenicity,1,1,Litterature,"Structural filters for compounds that may cause carcinogenicity or/and mutagenicity through non-genotoxic mechanisms (Benigni rules, https://publications.jrc.ec.europa.eu/repository/handle/JRC43157)" +1814,21,Haloanhydrides,"[F,Cl,Br,I][CX3](=[OX1])[#1,*&!$([OH1])&!$([SH1])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1815,21,Acylimidazoles,[#6][CX3](=[OX1])n1cncc1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1816,21,Acylbenzotriazoles,[#6][CX3](=[OX1])n1nnc2ccccc12,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1817,21,Anhydrides and mixed anhydrides,[CX3](=[OX1])[OX2][CX3](=[OX1]),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1818,21,Phosphorus halogen derivatives (1),"[Pv5X4](=[OX1])([F,Cl,Br,I])([#6])[#6]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1819,21,Phosphorus halogen derivatives (2),"[Pv5X4](=[OX1])([F,Cl,Br,I])([#8])[#6]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1820,21,Phosphorus halogen derivatives (3),"[Pv5X4](=[OX1])([F,Cl,Br,I])([#8])[#8]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1821,21,Phosphorus halogen derivatives (4),"[Pv5X4](=[OX1])([F,Cl,Br,I])([#7])[#6]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1822,21,Phosphorus halogen derivatives (5),"[Pv5X4]([F,Cl,Br,I])([#6])([#6])=[SX1]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1823,21,Phosphorus halogen derivatives (6),"[Pv5X4]([#8])([#6])([F,Cl,Br,I])(=[SX1])",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1824,21,Phosphorus halogen derivatives (7),"[Pv5X4](=[SX1])([F,Cl,Br,I])([#16])[#6]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1825,21,Phosphorus V derivatives,[Pv5X4]([!#1])([!#1])([!#1])=[NX2],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1826,21,Isocyanates,[NX2]=[CX2]=[OX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1827,21,Isothiocyanates,[NX2]=[CX2]=[SX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1828,21,Carbodiimides,[#6][NX2]=[CX2]=[NX2][#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1829,21,Thiocyanates,[SX2][CX2]#[NX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1830,21,Sulfonylhalides,"[#6][Sv6X4](=[OX1])(=[OX1])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1831,21,Sulfonylanhydrides,[#6][Sv6X4](=[OX1])(=[OX1])[OX2][Sv6X4](=[OX1])(=[OX1])[#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1832,21,Alkylsulfonates,[#6][Sv6X4](=[OX1])(=[OX1])[OX2][CX4],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1833,21,Alkylsulfates,"[#6,#1][OX2,OH1][Sv6X4](=[OX1])(=[OX1])[OX2][CX4]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1834,21,All types of 3-valent phosphorus and similar (1),[Pv3X3]([#8])([#8])[#8],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1835,21,All types of 3-valent phosphorus and similar (2),"[Pv3X3]([#8])([#8])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1836,21,All types of 3-valent phosphorus and similar (3),"[Pv3X3]([#8])([#6])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1837,21,All types of 3-valent phosphorus and similar (4),"[Pv3X3]([#6])([#6])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1838,21,All types of 3-valent phosphorus and similar (5),[Pv3X3]([#6])([#6])([#6]),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1839,21,All types of 3-valent phosphorus and similar (6),"[Pv3X3]([#8])([#7])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1840,21,All types of 3-valent phosphorus and similar (7),"[Pv3X3]([#7])([#7])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1841,21,All types of 3-valent phosphorus and similar (8),"[#16][Pv3X3]([#6])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1842,21,All types of 3-valent phosphorus and similar (9),[Pv3X3]([#7])([#7])[#7],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1843,21,All types of 3-valent phosphorus and similar (10),[PX4+]([#6])([#6])([#6])([#6]),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1844,21,Hydroxamic acid haloanhydrides,"[CX3]([#6])([F,Cl,Br])=[NX2][#8]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1845,21,Halothioanhydrides,"[#6][CX3](=[SX1])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1846,21,Halocarbonates,"[#8][CX3](=[OX1])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1847,21,Halocarbamates,"[#7][CX3](=[OX1])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1848,21,Isocyanides,"[#6][$([NX2+]#[CX1-]),$([NX2]#[CX1])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1849,21,Azides,"[$([NX2]=[NX2+]=[NX1-]),$(N=[NX2+]=N),$([NX2-]-[NX2+]#[NX1])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1850,21,Thione esters,"[#6,#1][CX3](=[SX1])[OX2][#6]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1851,21,Acylsulfides,"[#6,#1][CX3](=[OX1])[SX2][#6]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1852,21,Thiones,[#6][CX3](=[SX1])[#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1853,21,Thioamides,[#6][CX3](=[SX1])[#7],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1854,21,Peroxides,[OX2][OX2],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1855,21,Acyclic disulfides and polysulfides,[SX2!R][SX2!R],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1856,21,Nitroso,[#6][NX2]=[OX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1857,21,Nitrates,"[#6][OX2][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1858,21,N-Nitro,"[#7][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1859,21,N-Nitroso,[#7][NX2]=[OX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1860,21,Azo,[#6][NX2]=[NX2][#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1861,21,Azoxy,"[#6][$([NX2]=[NX3+]([O-])[#6]),$([NX2]=[NX3](=[OX1])[#6])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1862,21,Nitroso dimers,"[$([#6][NX3+]([OX1-])=[NX3+]([OX1-])[#6]),$([#6][NX3](=[OX1])=[NX3](=[OX1])[#6])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1863,21,Haloamines,"[#6][NX3][F,Cl,Br]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1864,21,Sulfenyl halides,"[#6][Sv2X2][F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1865,21,Sulfinyl halides,"[#6][Sv4X3](=[OX1])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1866,21,Diazonium salts,"[$([NX2+]#[NX1]),$([NX2]#N)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1867,21,Cyclic and linear haloamidines,"[CX3](=[#7])([#7])[Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1868,21,Aldehydes,"[#6,#1][CX3]([H])=[OX1]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1869,21,Aldimines and ketimines,[#6][CX3]=[NX2][#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1870,21,Hydrazines,[#6][NX3;!$([NX3](=[OX1])=[OX1]);!$([NX3+](=[OX1])[O-])][NX3;!$([NX3](=[OX1])=[OX1]);!$([NX3+](=[OX1])[O-])],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1871,21,Hydrazones and similar,[CX3]=[NX2][NX3][#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1872,21,Hydroxylamines,[OH1][NX3][#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1873,21,N-Oxides,"[$([OX1-,OH1][#7X4+]([*])([*])([*])),$([OX1]=[#7X4v5]([*])([*])([*])),$([OX1]=[Nv5X3&!$([Nv5X3](=[OX1])=[OX1])](=[*])([*])),$([OX1-,OH1][#7X3+R](~[R])(~[R])),$([OX1]=[#7v5X3R](~[R])(~[R]))]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1874,21,Aminals,N[CX4]N,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1875,21,Ammonium salts,[NX4+]([#6])([#6])([#6])([#6]),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1876,21,Sulfonium salts,[SX3+]([#6])([#6])([#6]),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1877,21,α-Haloketones and similar,"[#6][CX3](=[OX1])[CX4][Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1878,21,β-Haloamines,"[NX3][CX4][CX4][Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1879,21,β-Halosulfides,"[Sv2X2][CX4][CX4][Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1880,21,Acrylates and similar,[CX3](=[OX1])([#8])[CX3]=[CX3],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1881,21,Acrylamides,[CX3](=[OX1])([#7])[CX3]=[CX3],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1882,21,Vinylketones and similar,[CX3](=[OX1])([#6])[CX3]=[CX3],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1883,21,Vinylsulfones and similar,[Sv6X4](=[OX1])(=[OX1])[CX3]=[CX3],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1884,21,Nitrovinyl,"[CX3]=[CX3][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1885,21,Acrylonitriles,[NX1]#CC=C,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1886,21,Vinylphosphonates and similar,[Pv5X4](=[OX1])([#8])([#8])[CX3]=[CX3],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1887,21,Vinylpyridines and similar,"[$(n1c([CX3]=[CX3])cccc1),$(n1cc([CX3]=[CX3])ccc1),$(n1ccc([CX3]=[CX3])cc1)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1888,21,Cyclic maleimide-like Michael acceptors,C1(=[OX1])C=CC(=[OX1])[NX3]1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1889,21,Ketenes,[CX3]=[CX2]=[OX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1890,21,Allenes,C=C=C,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1891,21,Oxiranes,[CX4]1[OX2][CX4]1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1892,21,Thiiranes,[CX4]1[SX2][CX4]1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1893,21,Aziridines,[CX4]1[NX3][CX4]1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1894,21,Oxetanes,[CX4]1[OX2][CX4][CX4]1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1895,21,Thietanes,[CX4]1[SX2][CX4][CX4]1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1896,21,Selen in chain,[Sev2X2],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1897,21,O-Silyl derivatives,[Si]([#8])([#6])([#6])([#6]),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1898,21,N-Silyl derivatives,[Si]([#7])([#6])([#6])([#6]),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1899,21,Nitro-haloarenes,"[$([F,Cl,Br,I]c1c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cccc1),$([F,Cl,Br,I]c1cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])ccc1),$([F,Cl,Br,I]c1ccc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1900,21,Dinitroarenes,"[$(c1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cccc1),$(c1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])ccc1),$(c1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])ccc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1901,21,Benzylhalogenides and similar,"c1ccccc1([CX4][Cl,Br,I])",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1902,21,Halomethyl ethers,"[F,Cl,Br,I][CX4][#8]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1903,21,Halomethyl thioethers,"[F,Cl,Br,I][CX4][#16]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1904,21,Halomethyl amines,"[F,Cl,Br,I][CX4][#7]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1905,21,Iodoso and similar hypervalent compounds,[OX1]=[I!X1][#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1906,21,Linear thioureas,N[CX3](=[SX1])N,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1907,21,Linear dithiocarbamates,N[CX3](=[SX1])S,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1908,21,Trithiocarbonates,[CX3](=[SX1])(S)S,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1909,21,Thioester,[CX3](=[SX1])([#6])S,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1910,21,Bunte salts,[Sv6X4](=[OX1])([#8])([#8])[SX2][#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1911,21,Positively charged N-heterocycles,[#7v4X3R],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1912,21,Haloquinones and similar,"[$([#6]1([F,Cl,Br,I])=,:[#6]-,:[#6](=[OX1])-,:[#6]=,:[#6]-,:[#6]1(=[OX1])),$([#6]1(=[OX1])-,:[#6](=[OX1])-,:[#6]([F,Cl,Br,I])=,:[#6]-,:[#6]=,:[#6]1),$([#6]1(=[OX1])-,:[#6](=[OX1])-,:[#6]=,:[#6]([F,Cl,Br,I])-,:[#6]=,:[#6]1)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1913,21,Organometallic compounds,"[$([Te]~[#6]),$([As]~[#6]),$([Ge]~[#6]),$([Hg]~[#6]),$([Co]~[#6]),$([Fe]~[#6]),$([Mn]~[#6]),$([Cr]~[#6]),$([Ti]~[#6]),$([Sn]~[#6])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1914,21,Three-membered heterocycles,"[#6]1~[#6][#7,#8,#16]1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1915,21,Thioles,[Sv2X2H1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1916,21,Disulphides,SS,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1917,21,Peroxides,OO,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1918,21,Aldehydes,[CX3!H0]=[OX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1919,21,Chlor(brom)anhydrides,"[CX3](=[OX1])[Cl,Br]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1920,21,Sulphonic acids/esters,S(=O)(=O)O,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1921,21,Trihalogensubstituted ketones,"[CX3](=[OX1])[CX4]([F,Cl,Br,I])([F,Cl,Br,I])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1922,21,Monohalogen substituted ketones,"[CX3](=[OX1])C[Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1923,21,Alkylhalides,"[CX4][Br,Cl,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1924,21,Sulphonhalogenanhydrides,"S(=[OX1])(=[OX1])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1925,21,Sulphonic acid,[Sv6X4](=[OX1])(=[OX1])[OH1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1926,21,Phosphorus,P,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1927,21,Iodine,I,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1928,21,Selen,[Se],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1929,21,Bor,B,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1930,21,Silicium,[Si],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1931,21,"Isocyanates, isothiocyanates","[NX2]=[CX2]=[OX1,SX1]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1932,21,Thione,[CX3]=[SX1!R],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1933,21,β-halogen substituted carbonyls,"[CX3](=[OX1])CC[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1934,21,β-hydroxy substituted carbonyls,[CX3](=[OX1])[C!H0]C[OH1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1935,21,gem-Dihalo propane and cyclopropane,"CC([Cl,Br,I])([Cl,Br,I])C",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1936,21,Activated halides (o-nitro substituted haloaromatics),"[$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]cc[F,Cl,Br]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1937,21,Activated halides (p-nitro substituted haloaromatics),"[$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]cccc[F,Cl,Br]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1938,21,Activated halides (α-halogen substituted N-heterocycles),"nc[F,Cl,Br]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1939,21,Activated halides (γ-halogen substituted N-heterocycles),"nccc[F,Cl,Br]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1940,21,Thiourea,[#7][CX3](=[SX1])[#7],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1941,21,Barbiturates,"N1C(=[OX1,SX1])NC(=[OX1,SX1])C(=C)C1(=[OX1,SX1])",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1942,21,Alkyl chains,[CX4H2!R][CH2][CH2][CX4H2!R][CH2],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1943,21,"Non-cyclic 1,2-dicarbonyls compounds",C[C!R](=[OX1])[C!R](=[OX1])C,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1944,21,Crown ethers,[!#1!#6]C~C[!#1!#6]C~C[!#1!#6]C~C[!#1!#6]C~C[!#1!#6]C~C[!#1!#6]C~C,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1945,21,Coumarins (1),"c1cccc2c1oc(=O)c([$(C=[OX1]),$(C=[SX1]),$(S=[OX1]),$(C#[NX1]),F,Cl,Br,I,$([CX4]([F,Cl,Br,I])([F,Cl,Br,I])([F,Cl,Br,I]));!$([CX3](=[OX1])[OH1])])[c!H0]2",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1946,21,Coumarins (2),"[cH1]1[cH1]c2c3[cH1][cH1]c(cc3oc(=O)c2[cH1]c1[OX2][$([CH2]),$([CH3])])[OX2][C!H0]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1947,21,Coumarins (3),c1cccc2c1oc(=[OX1])[c!H0]c2,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1948,21,Coumarins (4),c1cccc2c1nc(=[OX1])[c!H0]c2,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1949,21,Coumarins (5),c1cccc2c1nc(=[NX2])[c!H0]c2,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1950,21,Coumarins (6),"c1([F,Cl,Br,I])cc([F,Cl,Br,I])cc2c1oc(=[NX2H1])c([CX3](=[OX1])[NH2])[c!H0]2",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1951,21,Coumarins (7),c1cccc2c1oc(=[NX2])cc2,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1952,21,Maleimides,C1(=[OX1])NC(=[OX1])[CX3H1]=[CX3]1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1953,21,"Michael acceptors (α,β-unsaturated carbonyls)",[CX3!H0!R]=[CX3!R][CX3]=[OX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1954,21,Michael acceptors (acrylonitriles),[CX3!H0!R]=[CX3!R][CX2]#[NX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1955,21,"Michael acceptors (α,β-unsaturated ketones)",C[CX3H1]=[CX3H1!R][CX3](=[OX1])C,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1956,21,Michael acceptors (methyl acrylonitrile derivatives),C[CX3H1]=[CX3!R][CX2]#[NX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1957,21,o-Quinones (3),"CC(=[OX1])C(=[OX1])[#6,#7]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1958,21,o-Quinones (5),CC(=[OX1])C(=S)C,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1959,21,p-Quinones (2),"[#6]1=,:[#6]-,:[#6]=,:[#6]2-,:[#6](=,:[#6]1)-,:[#6](=[OX1])-,:[#6]4-,:[#6]3=,:[#6]2-,:[#8]-,:[#7]=,:[#6]3-,:[#6]=,:[#6]-,:[#6]4",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1960,21,p-Quinones (3),"[#6]1-,:[#6]=,:[#6]-,:[#6]=,:[#6]2-,:[#6]1-,:[#6](=[OX1])-,:[#6]4=,:[#6]3-,:[#6]2=,:[#6](-,:[#6](=[OX1])-,:[#7]-,:[#6]3=,:[#6]-,:[#6]=,:[#6]4)O",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1961,21,Hydroquinone,c1c([OH1])c([OH1])ccc1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1962,21,N-N Single bound not in a ring,[N!R][N!R],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1963,21,Ketal,CC([OX2]C)([OX2]C)C,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1964,21,Acetal,[CX4H1](C)([OX2]C)([OX2]),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1965,21,Acyl and sulfinyl cyanide,"[$(C(=[OX1])[CX2]#[NX1]),$(S(=[OX1])[CX2]#[NX1])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1966,21,Amidotetrazole,"[#7]1([CX3]=[OX1])-,:[#6]=,:[#7]-,:[#7]=,:[#7]1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1967,21,Hydrazine and other nucleophilic NH2-groups,"[NX3H2][#7,#8]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1968,21,Hydroxylamines,[NX3]([OH1])[CX4],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1969,21,Nitroso,[NX2]=[OX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1970,21,Activated halo- and sulfonyl-aromatics,"c1([F,Cl,Br,I,$(C(C)=NO),$([CX2]#[NX1]),$([CX3]=[OX1]),$([CX4](F)(F)F),$([SX4](=[OX1])=[OX1]);!$([CX3](=[OX1])[OH1])])na([F,Cl,Br,I,$([SX4](=[OX1])(=[OX1])C)])a([!#7])a([!#7])a1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1971,21,Rhodanines,N1C(=[SX1])[SX2]C(=C)[CX3]1=[OX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1972,21,Acyclic gem-dihalosubstituted carbon atom,"[C!R]([Cl,Br,I])[Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1973,21,Imines,"[N!R]=[C,N]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1974,21,N-Oxides,"[$([#7+R][OX1-!R]),$([#7v5R]=[OX1!R]);!$([#7](~[O])~[O]);!$([#7]=[#7])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1975,21,Michael acceptors (carbonyl containing acrylonitrile derivatives),C[CX3H1]=[CX3!R](C(=[OX1])[!#1]~[!#1])[CX2]#[NX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1976,21,Over halogenated rings,"a1c([F,Cl,Br,I])c([F,Cl,Br,I])ac([F,Cl,Br,I])a1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1977,21,o-Quinones (1),"[CX3]1(=[!#1!#6])[CX3](=[!#1!#6])[#6X3]=,:[#6X3]-,:[#6X3]=,:[#6X3]1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1978,21,o-Quinones (2),CC(=[!#1!#6;!R])C(=[!#1!#6;!R])C,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1979,21,o-Quinones (4),CC(=[!#1!#6;!R])S(=[OX1])(=[OX1]),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1980,21,p-Quinones (1),"[#6X3]1=,:[#6X3][CX3](=[!#1!#6])[#6X3]=,:[#6X3][#6X3]1(=[!#1!#6])",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1981,21,Polycyclic 4 fused rings and more,"[$([$([*R2]([*R])([*R])([*R]))].[$([*R2]([*R])([*R])([*R]))].[$([*R2]([*R])([*R])([*R]))].[$([*R2]([*R])([*R])([*R]))].[$([*R2]([*R])([*R])([*R]))].[$([*R2]([*R])([*R])([*R]))]),$([$([*R3]([*R3])([*R2,R3])([*R2,R3]))].[$([*R3]([*R3])([*R2,R3])([*R2,R3]))]),$([$([*R2,R3]([*R3])([*R])([*R]))].[$([*R2,R3]([*R3])([*R])([*R]))].[$([*R3]([*R2,R3])([*R2,R3])([*R2,R3]))].[$([*R2,R3]([*R3])([*R2,R3])([*R]))].[$([*R2,R3]([*R2,R3])([*R2,R3])([*R]))].[$([*R2,R3]([*R2,R3])([*R])([*R]))]),$([$([*R2,R3]([*R3])([*R])([*R]))].[$([*R3]([*R2,R3])([*R2,R3])([*R2,R3]))].[$([*R2,R3]([*R3])([*R])([*R]))].[$([*R2,R3]([*R3])([*R2,R3])([*R]))].[$([*R2,R3]([*R2,R3])([*R2,R3])([*R]))].[$([*R2,R3]([*R2,R3])([*R])([*R]))])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1982,21,Other undesirable policyclic (adamantane derivatives),C1C4CC9CC1CC(C4)C9,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1983,21,"Other undesirable policyclic (1,3,5-triazaadamantane derivatives)",C1N4CN8CC1CN(C4)C8,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1984,21,"Other undesirable policyclic (2,3-dihydro-1H-phenalene derivatives)",c1ccc2c3c1cccc3CCC2,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1985,21,Other undesirable policyclic (acenaphthene derivatives),c1ccc2c3c1cccc3CC2,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1986,21,Acid anhydrides and analogues,[!#1](=O)O[!#1]=O,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1987,21,Acyl halides and analogues,"[C,S](=[O,S])[F,Br,Cl,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1988,21,Acrylonitriles,N#CC=[C!H0],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1989,21,Cyano carbonyl compounds,N#CC(=O),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1990,21,Aldehydes,[#6][CH]=O,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1991,21,Alkyl halides,"[CX4,C!H0][Br,Cl,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1992,21,Methylendiamines (1),"[!$([C,S]=O)]N([!$([C,S]=O)])[CX4]N([!$([C,S]=O)])[!$([C,S]=O)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1993,21,Methylendiamines (2),"[!$([C,S]=O)][NH][CX4]N([!$([C,S]=O)])[!$([C,S]=O)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1994,21,Methylendiamines (3),"[!$([C,S]=O)][NH][CX4][NH][!$([C,S]=O)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1995,21,N-Acetoxy amines and their thio analogues,"[#7][#8][C,S]=O",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1996,21,α-Halogen substituted N-heterocycles,"[F,Br,Cl,I]-cn",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1997,21,Activated haloaromatics,"[F,Cl,Br,I][$(aa[Nv4,S!v2]),$(aaa[Nv4,S!v2]),$(aaaa[Nv4,S!v2])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1998,21,Compounds containing three bonded nitrogen atoms,[NX1]~[NX2]~[NX2],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +1999,21,Benzyl ammoniums,cC[NX4+],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2000,21,α-Carbonyl ammoniums,C(=O)[#6][NX4+],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2001,21,Cations,"[#6+,#17+,#53+,#15+,#16+]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2002,21,Disulfides,[#16][#16],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2003,21,Enamines,[#6][CX3](!@N)=[CX3][#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2004,21,Three-membered heterocycles,"C1[O,S,N]C1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2005,21,Halogen-bonded heteroatoms,"[!#1&!#6][F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2006,21,Cumulated double bonds,"[C,N]=C=[C,O,N,S]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2007,21,Acetoxy group attached to the aromatic nitrogen,C(=O)Onnn,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2008,21,Singel acyclic N-N bonds,[#7]!@-N,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2009,21,Isocyanides,[NX2+]#[CX1-],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2010,21,Activated double bonds (1),[C!H0]=C(C#N)C(=O),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2011,21,Activated double bonds (2),[!c][C!H0]=CC=O,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2012,21,Activated double bonds (3),"[C!H0]=C[S,N]=O",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2013,21,Singel acyclic N-S bonds,[NR0]-[SR0!v6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2014,21,Acetoxy group attached to the substituted aromatic ring,"C(=O)O[$(aa[Nv4,S!v2]),$(aaa[Nv4,S!v2]),$(aaaa[Nv4,S!v2])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2015,21,"Oxetanes, thietanes","C1[O,S]CC1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2016,21,Trihalomethyl ketones,"CC(=O)C([F,Cl,Br,I])([F,Cl,Br,I])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2017,21,Peroxides,OO,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2018,21,Phosphonates,[#6]P(=O)O[#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2019,21,Phosphorus containing compounds,"NP(=[N,O,S])",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2020,21,p-Quinones,O=C1C=CC(=O)C=C1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2021,21,o-Quinones,O=C1C(=O)C=CC=C1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2022,21,"C, N, O, P and S atoms in unusual valence states","[#6!v4+0,#7!v3+0,#8!v2+0,#15!v3!v5+0,#16!v2!v4!v6+0]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2023,21,Thiocyanates,SC#N,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2024,21,Sulfurous acid esters,[!#1]OS(=O)O,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2025,21,Sulfonic acid esters,[#6]S(=O)(=O)O[#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2026,21,Heteroatom-bonded thiocarbonyls,"C(=S)[O,S,N]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2027,21,Thiocarboxylic acids and their derivatives,[CR0](=O)S,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2028,21,Thiols,[#6][Sv2H],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2029,21,Thiocarbonyls,C(=S)[!#1!H0],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2030,21,"N-Acetoxy-N,N-dicarbonyl compounds",C(=O)N(C(=O))OC=O,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2031,21,Trifluoromethyl sulfinyls,FC(F)(F)S(=O),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2032,21,Non-threevalent nitrogen double-bonded to oxygen,[#6!c][N!v3]=O,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2033,21,Anthracenes,c12ccccc1cc3ccccc3c2,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2034,21,Double acyclic N=N and N=S bonds,"[NR0,SR0]=[NR0]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2035,21,β-Aminonaphtalenes,c1(cc(N)cc2)c2cccc1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2036,21,Dialkyl(aryl) phosphorus containing compounds,[#6]P[#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2037,21,"Iodosos, chlorosos","[Cl,I]=O",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2038,21,Acid grops,"[C,S,P](=O)[OH].[C,S,P](=O)[OH].[C,S,P](=O)[OH].[C,S,P](=O)[OH]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2039,21,Crown ethers,[OR1][CR1][CR1][OR1][CR1][CR1][OR1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2040,21,Phosphocyanates,PC#N,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2041,21,α-Hydroxy nitriles,N#CC[OH],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2042,21,α-Diketones,[CX3R0](=O)[CX3R0](=O),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2043,21,Singel acyclic N-O bonds,[NR0v3]-[OR0],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2044,21,Imines,"[$([#6][CHR0]=[NR0]),$([#6][CR0]([#6])=[NR0])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2045,21,Activated double bonds (4),C=C(C#N)(C#N),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2046,21,N-Oxides,"[$([#7+][O-]),$([#7v5]=O);!$([#7](~[OD1])~[OD1])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2047,21,Nitrites,[!#1]ON=O,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2048,21,Nitroso compounds,[NX2]=O,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2049,21,"Any atoms except organogens, halogens, P, S, K, Na, Mg, Ca",[!#1;!#6;!#7;!#8;!#9;!#11;!#12;!#15;!#16;!#17;!#19;!#20;!#35;!#53],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2050,21,Double P=S and P=C bonds,"P=[S,#6]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2051,21,Pentafluorobenzenes,c1c(F)c(F)c(F)c(F)c1(F),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2052,21,Phenanthrenes,c12ccccc1ccc3ccccc23,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2053,21,p-Aminoanilines,c1([NH2])ccc(!@[Nv3])cc1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2054,21,Phosphorus derivatives,[P!v5],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2055,21,Conjugated olefins,[CR0]=[CR0][CR0]=[CR0][CR0]=[CR0][CR0]=[CR0],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2056,21,Carboxylic acid esters,[CX4]C(=O)O[#6][!#1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2057,21,Ketones,[CX4]C(=O)C,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2058,21,"N,N-Dialkyl aniline derivatives (1)","[CX4][NX3]([CX4])c1cc([$([CX4]),$(O[CX4][CX4])])c([#7])[cH]c1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2059,21,"N,N-Dialkyl aniline derivatives (2)",[CX4][NX3]([CX4])c1c[cH]c([#7])[cH]c1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2060,21,"N,N-Dialkyl aniline derivatives (3)",[CX4][NX3]([CX4])c1ccc(C=C)cc1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2061,21,p-Alkoxy-N-alkyl anilines,[CX4][NH]c1ccc(O[CX4])cc1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2062,21,"p-Alkoxy-N,N-dialkyl anilines",[CX4]N([CX4])c1ccc(O[CX4])cc1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2063,21,"N,N-Dialkyl aniline derivatives (4)","[CX4]N([CX4])c1ccc([CX4][$([OH]),$(C=[C!H0]),$(N[CX4])])cc1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2064,21,"N,N-Dialkyl aniline derivatives (5)","[CX4]N([C!H0])c1[cH][cH]c([$([C!H0!H1]),$([C!H0][C!H0])])[cH][cH]1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2065,21,"N,N-Dialkyl aniline derivatives (6)","[CX4]N([C!H0])c1[cH]c([CX4])c([$([C!H0!H1]),$([C!H0][C!H0])])[cH][cH]1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2066,21,Phosphoric anhydrides,P(=O)OP(=O),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2067,21,Sulfonylanhydrides,S(=O)OS=O,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2068,21,Five-membered heterocycles (1),"C1(=C)C(=O)[#7,#8,#15,#16]N=C1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2069,21,Thioxo-thiazolidinones,C1(=S)NC(=O)C(=[#6])S1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2070,21,Six-membered heterocycles,"[#7,#8,#15,#16]~C1~[#7,#8,#15,#16]~C[#7,#8,#15,#16][CX3](=[#7,#8,#15,#16])[CX3]1(=[C!H0])",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2071,21,Glutarimides,C1CC(=O)NC(=O)C1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2072,21,Aliphatic chain,[CD1][CD2][CD2][CD2][CD2][CX4],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2073,21,o-Substituted phenols (1),[OH]c1c(C=NN)cccc1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2074,21,p-Substituted phenols,[OH]c1ccc(C=NN)cc1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2075,21,"1,2-Diimines, 1,2-diketones and their thio- and phospho-analogues","[#6][#6](=[#7,#8,#15,#16])[#6](=[#7,#8,#15,#16])[#6,Sv6]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2076,21,Indolones,O=C1[#7]c2ccccc2C1=N[#7],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2077,21,NH-Indoles,"[nH]1c([$([CH2]),$([C!H0]N),$([CD3]([CH2])[NH][CH2]),$([CD3]([CH2])[CD2][NH][CH2]),$([#6]=,:[#7,#8,#15,#16])])c([CX4!H0])c2[cH]cccc12",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2078,21,N-Alkyl substituted indoles,"n1([CH2])c([$([CH2]),$([C!H0]N),$([CD3]([CH2])[NH][CH2]),$([CD3]([CH2])[CD2][NH][CH2]),$([#6]=,:[#7,#8,#15,#16])])c([CX4!H0])c2[cH]cccc12",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2079,21,o-Substituted phenols (2),[OH]c1c([CX4][#7])cccc1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2080,21,N-Allophanoylamides and their thio analogues,"NC(=[O,S])NC(=[O,S])NC=[O,S]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2081,21,Tetrahydrofuranyltetrahydropyrans,C1COC(C1)C1CCCCO1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2082,21,Octahydroisoindolones,[C!H0]1NC(=O)C2CCCCC12,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2083,21,N-Phenylpyrrole derivatives,N1(c2[!#1]cccc2)C([CX4])=C[C!H0]=C1[CX4],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2084,21,"Quinones, quinone-(di)imines and their thio- and phospho-analogues","[#7,#8,#15,#16]=[#6]1-,:[#6]=,:[#6]-,:[#6](=[#7,#8,#15,#16])-,:[#6]=,:[#6]1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2085,21,Five-membered heterocycles (2),"[#7]=C1S[CH]=C([$([CH2]),$(c:c)])N1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2086,21,Five-membered heterocycles (3),"[#7]=C1SC([$([CH2]),$(C=O)])=C([$([CH2]),$(c:c)])N1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2087,21,Tert-butyl carbon atom,c[CX4](c)c,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2088,21,Acethylenes,"[CH2,CH3]C#C[CH2,CH3]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2089,21,α-Halocarbonyls,"[CX3](=[OX1])[CX4]([#1,Cl,Br,I])([#1,Cl,Br,I])[Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2090,21,Aldehydes,"[#6,#1][CX3]([H])=[OX1]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2091,21,α-Halonitriles,"[F,Cl,Br,I][CX4][CX2]#[NX1]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2092,21,Anthracenes,"[c,n]1[c,n][c,n]c2[c,n]c3[c,n][c,n][c,n][c,n]c3[c,n]c2c1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2093,21,Azides,"[#6]-[$([NX2]=[NX2+]=[NX1-]),$([NX2]=[NX2+]=N)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2094,21,Azide tautomers,[#6]-[NX2-][NX2+]#[NX1;0],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2095,21,Benzthiozolium like compounds,"[#7,#8,#16]1-,:[#6]=,:[#6]-,:[#7+]2=,:[#6,#7]-,:[#6,#7]=,:[#6,#7]-,:[#6,#7]=,:[#6]21",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2096,21,Catechols,c1([OH1])c([OH1])cccc1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2097,21,Cyanates,"[NX2]=[CX2]=[OX1,SX1]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2098,21,Di-carbonyls,"[#1,#6][CX3](=[OX1])[CX3](=[OX1])[#1,#6]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2099,21,Epoxides,C1OC1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2100,21,Haloalkyl,"[C!H0]([#1,#6,#7,#8,#16])[CX4]([#1,Cl,Br,I])([#1,Cl,Br,I])[Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2101,21,"Haloalkyl group attached to S, N or O atoms","[CX4]([#1,Cl,Br,I])([#1,Cl,Br,I])([Cl,Br,I])[#7,#8,#16]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2102,21,Haloethylenes,"[CX3!H0]=[CX3]([#1,Cl,Br,I])[Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2103,21,Halopyridines,"c1([F,Cl,Br,I])n[c,n][c,n][c,n][c,n]1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2104,21,Heptanes,"[CH3][CH2][CH2][CH2][CH2][CH2][CH2,CH3]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2105,21,Hydrazines,"[NX3!H0]([#1,#6])[NX3!H0]([#1,#6])",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2106,21,Imines,"[NX3]([#1,#6])([#1,#6])[NX2]=[CX3!H0]([#1,#6])",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2107,21,N-Oxides (five-membered rings),"[$([OX1-][#7+]1=,:[#6,#7]-,:[#6,#7]=,:[#6,#7]-,:[#6,#7,#8,#16]1),$([OX1]=[#7v5]1=,:[#6,#7]-,:[#6,#7]=,:[#6,#7]-,:[#6,#7,#8,#16]1)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2108,21,Phosphorus,[#15&0],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2109,21,Phosphorus cations,[#15+],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2110,21,Pentafluorobenzenes,c1c(F)c(F)c(F)c(F)c1(F),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2111,21,Peroxides,[OX2][OX2],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2112,21,Peroxide like compounds,"O[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2113,21,Phosphates,[Pv5X4](=[OX1])([OX2])([OX2])[#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2114,21,Double P=O bonds,[#15]=O,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2115,21,Pyridinium like compounds,"[#6][#7+]1=,:[#6]-,:[#6,#7]=,:[#6]-,:[#6,#7]=,:[#6]1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2116,21,Quinolizinium like compounds,"[#6,#7]1=,:[#6,#7]-,:[#6,#7]=,:[#7+]2-,:[#6,#7]=,:[#6,#7]-,:[#6,#7]=,:[#6,#7]-,:[#6]2=,:[#6,#7]1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2117,21,Quinones,"[#6]1(=[OX1])-,:[#6]=,:[#6]-,:[#6](=[OX1])-,:[#6]=,:[#6]1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2118,21,Sulfates,"[Sv6X4](=[OX1])(=[OX1])([#8])[#6,#8]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2119,21,Thio aldehydes,"[#6,#1][CX3]([H])=[SX1]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2120,21,Thio halogens,"[#16][F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2121,21,Thioalcohols,"[#6&!$(C(=[OX1,SX1,NX2]))][SX2H1]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2122,21,Thioamides,"[NX3H2][CX3](=[SX1])[#1,#6,#8]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2123,21,Thioureas,"[NX3]([#1,#6,#7])([#1,#6])[CX3](=[SX1])[NX3]([#1,#6,#7])([#1,#6])",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2124,21,Thiozolium like compounds,"[#6][#7+]1=,:[#6]-,:[#7,#8,#16]-,:[#6]=,:[#6]1",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2125,21,Acyl Halides,"[Br,Cl,F,I][CX3](=[OX1])[#1,*&!$([OH1])&!$([SH1])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2126,21,Sulphonyl Halides,"[#6][Sv6X4](=[OX1])(=[OX1])[F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2127,21,Alkyl Halides,"[CX4][F,Cl,Br,I]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2128,21,Isocyanates,[NX2]=[CX2]=[OX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2129,21,Isothiocyanates,[NX2]=[CX2]=[SX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2130,21,Activated Halides,"[$(c([F,Cl,Br,I])c[$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$(c([F,Cl,Br,I])aac[$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$(c([F,Cl,Br,I])n),$(c([F,Cl,Br,I])aan)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2131,21,Anhydrides,[CX3](=[OX1])[OX2][CX3](=[OX1]),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2132,21,Aldehydes (including aminoformyl moieties),"[$([#1,#6][CX3]([H])=[OX1]),$([#7]([#1,#6])([#1,#6])[CX3H1]=[OX1])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2133,21,Hydrazines,"[#1,#6][NX3]([#1,#6])[NX3]([#1,#6])[#1,#6]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2134,21,Azides,"[$(*-[NX2-]-[NX2+]#[NX1]),$(*-[NX2]=[NX2+]=[NX1-]),$(*-[NX2]=[NX2+]=N)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2135,21,Diazonium salts,"[$([CX3]=[NX2+]=N),$([CX3]=[NX2]=[NX1]),$([CX3]=[NX2+]=[NX1-]),$([#6-][NX2+]#[NX1]),$([CX3][NX2]#[NX1])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2136,21,Quaternary salts (including N-oxides),"[$([NX4,$([NX4+])]([#1,#6])([#1,#6])([#1,#6])[#1,#6]),$([OX1-,OH1][#7X4+]([*])([*])([*])),$([OX1]=[#7X4v5]([*])([*])([*])),$([OX1]=[Nv5X3&!$([Nv5X3](=[OX1])=[OX1])](=[*])([*])),$([OX1-,OH1][#7X3+R](~[R])(~[R])),$([OX1]=[#7v5X3R](~[R])(~[R]))] ",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2137,21,Nitrosos,[NX2]=[OX1],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2138,21,Aziridines,[NX3]1[CX4][CX4]1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2139,21,Epoxides,[OX2]1[CX4][CX4]1,Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2140,21,Disulphides,[SX2][SX2],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2141,21,Picrates,"c1([OH1,O-])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2142,21,Perchlorates (periodates),"[$([Clv7X4](=[OX1])(=[OX1])(=[OX1])[OX2,O-]),$([Iv7X4](=[OX1])(=[OX1])(=[OX1])[OX2,O-])]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2143,21,Simple anilines and phenols,"[$(c1([NX3]([#1,#6])[#1,#6])ccccc1),$(c1([OH1])ccccc1)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2144,21,"1,2-Dicarbonyls",[CX3R](=[OX1])[CX3R](=[OX1]),Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2145,21,Vinyl ketones (Michael acceptors),[CX3]([!R])([!R])=[CX3][CX3](=[OX1])[!$([OH1])!$([OX2][CH2])!$([NH2])!$([CX2]#[NX1])!a],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2146,21,N-Acyl substituted azoheterocycles,nC(=O)[#6],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2147,21,N-Oxides (six-membered rings),"[$([OX1-][#7+]1=,:[#6,#7]-,:[#6,#7]=,:[#6,#7]-,:[#6,#7]=,:[#6,#7]1),$([OX1]=[#7v5]1=,:[#6,#7]-,:[#6,#7]=,:[#6,#7]-,:[#6,#7]=,:[#6,#7]1)]",Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2148,21,Metals,[!#1;!#6;!#7;!#8;!#9;!#11;!#12;!#15;!#16;!#17;!#19;!#20;!#35;!#53],Reactive-Unstable-Toxic,1,1,Litterature,General very reactive/unstable or Toxic compounds +2149,22,Acid halides,"[F,Cl,Br][CX3](=[OX1])[#1,*&!$([OH1])&!$([SH1])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2150,22,Acid azides,"[CX3](=[OX1])[$([NX2]=[NX2+]=[NX1-]),$(N=[NX2+]=N),$([NX2-]-[NX2+]#[NX1])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2151,22,Sulphonyl halides,"[#6][Sv6X4](=[OX1])(=[OX1])[Cl,Br]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2152,22,Sulphonyl azides,"[Sv6X4](=[OX1])(=[OX1])[$([NX2]=[NX2+]=[NX1-]),$([NX2]=[NX2+]=N)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2153,22,Acid anhydrides,[CX3](=[OX1])[OX2][CX3](=[OX1]),Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2154,22,Diacyl peroxides,[CX3](=[OX1])[OX2][OX2][CX3](=[OX1]),Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2155,22,Phenyl esters,[cR1]1([OX2][CX3](=[OX1])[#6])[cR1][cR1][cR1][cR1][cR1]1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2156,22,Isocyanates,[NX2]=[CX2]=[OX1],Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2157,22,β-Lactams,[NX3]1[CX4][CX4][CX3]1(=[OX1]),Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2158,22,Thioesters,[CX3](=[SX1])[SX2],Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2159,22,Haloalkanes,"[CX4][Cl,Br,I]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2160,22,Dialkylsulfates/ sulfonates,"[$([#6][OX2][Sv6X4](=[OX1])(=[OX1])[OX2][#6]),$([#6][Sv6X4](=[OX1])(=[OX1])[OX2][#6])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2161,22,N-Trihalomethyl imides,"[CX3](=[OX1])[NX3]([CX4]([Cl,Br,I])([Cl,Br,I])[Cl,Br,I])[CX3](=[OX1])",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2162,22,Halogen containing di- or tri-nitro aromatics,"[$([F,Cl,Br]c1c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])ccc1),$([F,Cl,Br]c1c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1),$([F,Cl,Br]c1c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])ccc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c1),$([F,Cl,Br]c1c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cccc1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])),$([F,Cl,Br]c1cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1),$([F,Cl,Br]c1cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c1),$([F,Cl,Br]c1c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1),$([F,Cl,Br]c1c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c1),$([F,Cl,Br]c1c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])ccc1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])),$([F,Cl,Br]c1cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c1),$([F,Cl,Br]c1cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])),$([F,Cl,Br]c1c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]))]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2163,22,Quinones,"[$([#6X3]1=,:[#6X3]-,:[#6X3](=[OX1])-,:[#6X3]=,:[#6X3]-,:[#6X3]1(=[OX1])),$([#6X3]1(=[OX1])-,:[#6X3](=[OX1])-,:[#6X3]=,:[#6X3]-,:[#6X3]=,:[#6X3]1)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2164,22,Hydroquinones and O-alkyl precursors,"[#1,CX4][OX2][cR1]1[cR1][cR1][cR1]([OX2][#1,CX4])[cR1][cR1]1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2165,22,Catechols and O-alkyl precursors,"[#1,CX4][OX2][cR1]1[cR1]([OX2][#1,CX4])[cR1][cR1][cR1][cR1]1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2166,22,"α, β-Unsaturated aldehydes, amides, esters and ketones","[$([CX3]([#6,$([NX3]([CX3]=[OX1])([#6])[#6]),$([OX2]([CX3]=[OX1])[#6]);!$([OH][CX3]=[OX1]);!$([O-][CX3]=[OX1])])(=[OX1])[CX3]([#6,#1])=[CX3]([!a])([!a])),$([CX3H1](=[OX1])[CX3]([#6,#1])=[CX3])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2167,22,"Precursors of α, β-unsaturated aldehydes, amides, esters and ketones (1)","[$([CX4]([OX2])([OX2])([#6,#7,#8])[CX3]([#6,#1])=[CX3]([!a])([!a])),$([CX4H1]([OX2])([OX2])[CX3]([#6,#1])=[CX3])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2168,22,"Precursors of α, β-unsaturated aldehydes, amides, esters and ketones (2)","[$([CX3]([#6,#7,#8;!$([OH])])(=[OX1])[CX4H1]([#1,#6])[CX4]([!a])([!a])([$([OX2][Sv6X4](=[OX1])(=[OX1])[OH]),$([OX2][Sv6X4](=[OX1])(=[OX1])[OX2][CH3]),$([OX2][Sv6X4](=[OX1])(=[OX1])[CH3]),$([OX2][Sv6X4](=[OX1])(=[OX1])[CF3]),$([OX2][Sv6X4](=[OX1])(=[OX1])c1ccc([CH3])cc1),I,Br,Cl])),$([CX3H1](=[OX1])[CX4H1]([#1,#6])[CX4]([$([OX2][Sv6X4](=[OX1])(=[OX1])[OH]),$([OX2][Sv6X4](=[OX1])(=[OX1])[OX2][CH3]),$([OX2][Sv6X4](=[OX1])(=[OX1])[CH3]),$([OX2][Sv6X4](=[OX1])(=[OX1])[CF3]),$([OX2][Sv6X4](=[OX1])(=[OX1])c1ccc([CH3])cc1),I,Br,Cl]))]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2169,22,"1,3-Diketones","[CX4,a!r0][CX3](=[OX1])[CH2][CX3](=[OX1])[CX4,a!r0]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2170,22,Aldehydes,"[CX3]([H])(=[OX1])[#1,CX4,a!r0]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2171,22,Ketones,"[CX4,a!r0][CX3](=[OX1])[CX4,a!r0]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2172,22,Formaldehyde donors,"[$([NX3][CH2][NX3]),$([NX3][CH2][OX2]),$([CX4]([F,Cl,Br,I])([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])[CH2][OH1])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2173,22,Precursors of aldehydes and ketones,"[CX4]([OX2])([OX2])([CX4,a!r0])[CX4,a!r0]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2174,22,Enol precursor of aldehydes and ketones,"[CX3]=[CX3]([#6,#1])[OX2]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2175,22,Aromatic primary and secondary amines,"[a!r0][$([NX3H2]),$([NX3H1][CX4,a!r0])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2176,22,N-Haloimides,"[CX3](=[OX1])[NX3]([Cl,Br])[CX3](=[OX1])",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2177,22,N-Chloro-sulfonamides,[Sv6X4](=[OX1])(=[OX1])[NX3H1]Cl,Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2178,22,Disullides,"[CX4,a!r0][SX2][SX2][CX4,a!r0]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2179,22,Phenyl carbonates,"c1ccccc1[OX2][CX3](=[OX1])[OX2][CX4,a!r0]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2180,22,Epoxides,[CX4]1[CX4][OX2]1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2181,22,1.2-Dicarbonyls,"[CX4,a!r0][CX3](=[OX1])[CX3](=[OX1])[#1,CX4,a!r0]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2182,22,Thiazolones,"[$([SX2]1[CX3]([CX4,a!r0])=[CX3]([CX4,a!r0])[CX3](=[OX1])[NX3]1([CX4,a!r0])),$([sX2]1[cX3]([CX4,a!r0])[cX3]([CX4,a!r0])[cX3](=[OX1])[nX3]1([CX4,a!r0]))]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2183,22,"1, 2-Diamines","[CX4,a!r0][NX3H1][CX4][CX4][NX3H1][CX4,a!r0]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2184,22,Amine precursor - aromatic azo compound,"[$([a!r0][NX2]=[NX2]c1c([$([NH2]),$([NX3H1][CX4]),$([NX3]([CX4])[CX4]),$([NX3H1][CX3](=[OX1])[CH3]),$([NX3H1][CX3](=[OX1])[CX4]),$([OH]),$([O-]),$([OX2][CX4]),$([CH3]),$([CH2][CH3]),$([CH]=[CH2])])cccc1),$([a!r0][NX2]=[NX2]c1ccc([$([NH2]),$([NX3H1][CX4]),$([NX3]([CX4])[CX4]),$([NX3H1][CX3](=[OX1])[CH3]),$([NX3H1][CX3](=[OX1])[CX4]),$([OH]),$([O-]),$([OX2][CX4]),$([CH3]),$([CH2][CH3]),$([CH]=[CH2])])cc1),$([a!r0][NX2]=[NX2]c1c([$([NH2]),$([NX3H1][CX4]),$([NX3]([CX4])[CX4]),$([NX3H1][CX3](=[OX1])[CH3]),$([NX3H1][CX3](=[OX1])[CX4]),$([OH]),$([O-]),$([OX2][CX4]),$([CH3]),$([CH2][CH3]),$([CH]=[CH2])])cc([$([NH2]),$([NX3H1][CX4]),$([NX3]([CX4])[CX4]),$([NX3H1][CX3](=[OX1])[CH3]),$([NX3H1][CX3](=[OX1])[CX4]),$([OH]),$([O-]),$([OX2][CX4]),$([CH3]),$([CH2][CH3]),$([CH]=[CH2])])cc1),$([a!r0][NX2]=[NX2]c1c([$([NH2]),$([NX3H1][CX4]),$([NX3]([CX4])[CX4]),$([NX3H1][CX3](=[OX1])[CH3]),$([NX3H1][CX3](=[OX1])[CX4]),$([OH]),$([O-]),$([OX2][CX4]),$([CH3]),$([CH2][CH3]),$([CH]=[CH2])])cc([$([NH2]),$([NX3H1][CX4]),$([NX3]([CX4])[CX4]),$([NX3H1][CX3](=[OX1])[CH3]),$([NX3H1][CX3](=[OX1])[CX4]),$([OH]),$([O-]),$([OX2][CX4]),$([CH3]),$([CH2][CH3]),$([CH]=[CH2])])cc1[$([NH2]),$([NX3H1][CX4]),$([NX3]([CX4])[CX4]),$([NX3H1][CX3](=[OX1])[CH3]),$([NX3H1][CX3](=[OX1])[CX4]),$([OH]),$([O-]),$([OX2][CX4]),$([CH3]),$([CH2][CH3]),$([CH]=[CH2])])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2185,22,Quaternary ammonium cation,"[NX4+]([CX4,a!r0])([CX4,a!r0])([CX4,a!r0])[CX4,a!r0]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2186,22,Activated N-heterocycle halides,"[$(n1c([F,Cl])ncnc1),$(n1c([F,Cl])ccnc1),$(n1c([F,Cl])nccc1)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2187,22,"Activated halo-pyridines, quinolines, and isoquinolines","[$([cR1]1[cR1][cR1][cR1][cR2]2[nR1][cR1]([F,Cl])[cR1]([$([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CX3](=[OX1])[OX2][#1,#6]),$([Sv6X4](=[OX1])(=[OX1])[OH]),$([CX3](=[OX1])[#1,F,Cl,Br,I]),$([CX2]#[NX1]),$([CX4]([F,Cl])([F,Cl])[F,Cl]),$([CH2][OH]),$([CH2][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CH2][F,Cl])])[cR1][cR2]12),$([cR1]1[cR1][cR1][cR1][cR2]2[nR1][cR1][cR1]([$([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CX3](=[OX1])[OX2][#1,#6]),$([Sv6X4](=[OX1])(=[OX1])[OH]),$([CX3](=[OX1])[#1,F,Cl,Br,I]),$([CX2]#[NX1]),$([CX4]([F,Cl])([F,Cl])[F,Cl]),$([CH2][OH]),$([CH2][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CH2][F,Cl])])[cR1]([F,Cl])[cR2]12),$([cR1]1[cR1][cR1][cR1][cR2]2[cR1]([F,Cl])[nR1][cR1][cR1]([$([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CX3](=[OX1])[OX2][#1,#6]),$([Sv6X4](=[OX1])(=[OX1])[OH]),$([CX3](=[OX1])[#1,F,Cl,Br,I]),$([CX2]#[NX1]),$([CX4]([F,Cl])([F,Cl])[F,Cl]),$([CH2][OH]),$([CH2][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CH2][F,Cl])])[cR2]12),$([cR1]1[cR1][cR1][cR1][cR2]2[cR1][nR1][cR1]([F,Cl])[cR1]([$([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CX3](=[OX1])[OX2][#1,#6]),$([Sv6X4](=[OX1])(=[OX1])[OH]),$([CX3](=[OX1])[#1,F,Cl,Br,I]),$([CX2]#[NX1]),$([CX4]([F,Cl])([F,Cl])[F,Cl]),$([CH2][OH]),$([CH2][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CH2][F,Cl])])[cR2]12),$([nR1]1[cR1]([F,Cl])[cR1]([$([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CX3](=[OX1])[OX2][#1,#6]),$([Sv6X4](=[OX1])(=[OX1])[OH]),$([CX3](=[OX1])[#1,F,Cl,Br,I]),$([CX2]#[NX1]),$([CX4]([F,Cl])([F,Cl])[F,Cl]),$([CH2][OH]),$([CH2][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CH2][F,Cl])])[cR1][cR1][cR1]1),$([nR1]1[cR1][cR1]([$([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CX3](=[OX1])[OX2][#1,#6]),$([Sv6X4](=[OX1])(=[OX1])[OH]),$([CX3](=[OX1])[#1,F,Cl,Br,I]),$([CX2]#[NX1]),$([CX4]([F,Cl])([F,Cl])[F,Cl]),$([CH2][OH]),$([CH2][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CH2][F,Cl])])[cR1]([F,Cl])[cR1][cR1]1),$([nR1]1[cR1]([F,Cl])[cR1][cR1][cR1]([$([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CX3](=[OX1])[OX2][#1,#6]),$([Sv6X4](=[OX1])(=[OX1])[OH]),$([CX3](=[OX1])[#1,F,Cl,Br,I]),$([CX2]#[NX1]),$([CX4]([F,Cl])([F,Cl])[F,Cl]),$([CH2][OH]),$([CH2][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CH2][F,Cl])])[cR1]1),$([nR1]1[cR1][cR1][cR1]([F,Cl])[cR1]([$([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CX3](=[OX1])[OX2][#1,#6]),$([Sv6X4](=[OX1])(=[OX1])[OH]),$([CX3](=[OX1])[#1,F,Cl,Br,I]),$([CX2]#[NX1]),$([CX4]([F,Cl])([F,Cl])[F,Cl]),$([CH2][OH]),$([CH2][$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])]),$([CH2][F,Cl])])[cR1]1)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2188,22,"Hydrazines, hydrazonium salts and precursors","[$([NX3H2][NX3]([#1,#6;!$([CX3](=[OX1])[#1,#6])])[#1,#6;!$([CX3](=[OX1])[#1,#6])]),$([NX4H2+]([#1,#6;!$([CX3](=[OX1])[#1,#6])])[NX3]([#1,#6;!$([CX3](=[OX1])[#1,#6])])[#1,#6;!$([CX3](=[OX1])[#1,#6])]),$([NX4H3+][NX4H2+][#1,#6;!$([CX3](=[OX1])[#1,#6])]),$([NX3!R]([#1,#6!R;!$([CX3](=[OX1])[#1,#6])])([#1,#6!R;!$([CX3](=[OX1])[#1,#6])])[NX2!R]=[CX3!R]([*!R])([*!R])),$([NX3!R]([#1,#6!R;!$([CX3](=[OX1])[#1,#6])])([#1,#6!R;!$([CX3](=[OX1])[#1,#6])])[NX3+!R]=[CX3!R]([*!R])([*!R]))]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2189,22,Acid halides,"[F,Cl,Br][CX3](=[OX1])[#1,*&!$([OH1])&!$([SH1])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2190,22,Aldehydes,"[CX3H1](=[OX1])[#1,#6]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2191,22,Halonitrobenzenes,"[$([F,Cl][cR1]1[cR1]([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])[cR1][cR1]([F,Cl,$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),$([CX2]#[NX1]),$([CX3](=[OX1])([$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])),$([CX3](=[OX1])[OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])])[cR1][cR1]1),$([F,Cl][cR1]1[cR1]([F,Cl,$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),$([CX2]#[NX1]),$([CX3](=[OX1])([$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])),$([CX3](=[OX1])[OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])])[cR1][cR1]([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])[cR1][cR1]1)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2192,22,Aromatic sulphuric acids and salts,"[a!r0][Sv4X3](=[OX1])[$([OH]),$([O-])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2193,22,Acid anhydrides,"[$([CX3](=[OX1])[OX2][CX3](=[OX1])),$([CX3](=[OX1])[OX2][OX2][CX3](=[OX1]))]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2194,22,Iso(thio)cyanates,"[NX2]=[CX2]=[OX1,SX1]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2195,22,(Benzo)isothiazolinones,"[$([#7X3]1([#1,#6])-,:[#16X2]-,:[#6X3]([#1,a!r0,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])=,:[#6X3]([#1,a!r0,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])-,:[#6X3]1(=[OX1])),$([#6R1]1-,:[#6R1]=,:[#6R1]-,:[#6R1]=,:[#6R2]2-,:[#16X2]-,:[#7X3]([#1,#6])-,:[#6X3](=[OX1])-,:[#6X3]12)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2196,22,β-Lactams,[NX3]1([#6])[CX4]([#6])[CX4]([#6])[CX3]1(=[OX1]),Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2197,22,Epoxides,"[OX2]1[CX4]([#1,c,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])[CX4]1([#1,c,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])([CX4])",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2198,22,Acid imides,"[NX3]1([#1,#6])[CX3](=[OX1])[CX3]([!R])=[CX3]([!R])[CX3]1(=[OX1])",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2199,22,α-Carbonyl halogen compounds (α-halocarbonyls),"[$([CX4!H0]([Cl,Br])[CX3](=[OX1])[$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1),c]),$([CX4!H0]([Cl,Br])[CX3](=[OX1])[OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1),c]),$([CX4!H0]([Cl,Br])[CX3](=[OX1])[NX3]([#6])([#6])),$([CX4!H0]([Cl,Br])[CX3](=[OX1])[OX1-])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2200,22,α-Haloalkanes,"[Cl,Br][CH2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1),c]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2201,22,Activated N-heterocycles,"[$(n1c([F,Cl,$([CX2]#[NX1])])nccc1),$(n1cnccc1([F,Cl,$([CX2]#[NX1])])),$(n1cncnc1([F,Cl,$([CX2]#[NX1])]))]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2202,22,Ortho-quinones and para-quinones,"[$([CX3]1(=[OX1])[CX3H1]=[CX3]([#1,#6,OH1,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])[CX3](=[OX1])[CX3]([#1,#6,OH1,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])=[CX3]1([#1,#6,OH1,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])),$([CX3]1(=[OX1])[CX3](=[OX1])[CX3]([#1,#6,OH1,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])=[CX3H1][CX3]([#1,#6,OH1,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])=[CX3]1([#1,#6,OH1,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])]))]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2203,22,"Catechols, resorcinols, hydroquinones","[$(c1([OH])c([OH])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([#1])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c1([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])),$([$(c1([OH1])c([#1])c([OH1])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c1([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])),$(c1([OH1])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([OH1])c([#1])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c1([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])]))]),$(c1([OH1])c([#1])c([#1,#6,OH1,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([OH1])c([#1,#6,OH1,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c1([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])]))]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2204,22,"Catechol, resorcinol and hydroquinone precursors"," [$(c1([OH])c([OX2][$([CH3]),$([CH2][CH3])])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([#1])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c1([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])),$(c1([OH])c([OX2][$([CH3]),$([CH2][CH3])])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([#1])c1([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])),$(c1([OH1])c([#1])c([OX2][$([CH3]),$([CH2][CH3])])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c1([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])),$(c1([OH1])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([OX2][$([CH3]),$([CH2][CH3])])c([#1])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c1([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])),$(c1([OH1])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([OX2][$([CH3]),$([CH2][CH3])])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c1([#1])),$(c1([OH1])c([#1])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([OX2][$([CH3]),$([CH2][CH3])])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c1([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])),$(c1([OH1])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c([#1])c([OX2][$([CH3]),$([CH2][CH3])])c([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])])c1([#1,#6,OH,$([OX2][$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)]);!$([CX2]#[NX1])]))]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2205,22,Diamines,"[$([NX3]([#1])([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])[CH2][CH2][NX3]([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])),$([NX3]([#1])([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])[CH2][CH2][CH2][NX3]([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])),$([NX3]([#1])([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])[CH2][CH2][CH2][CH2][NX3]([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])),$([NX3]([#1])([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])[CH2][CH2][CH2][CH2][CH2][NX3]([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])),$([NX3]([#1])([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])[CH2][CH2][CH2][CH2][CH2][CH2][NX3]([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)])),$([#1,$([CH3]),$([CH2][CH3]),$([CH2][CH2][CH3]),$([CH]([CH3])[CH3]),$([CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH3]),$([CH2][CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH3]),$([CH]([CH3])[CH2][CH2][CH3]),$([CH2][CH]([CH3])[CH2][CH3]),$([CH2][CH2][CH]([CH3])[CH3]),$([CH]([CH2][CH3])[CH2][CH3]),$([CH]([CH3])[CH]([CH3])[CH3]),$([CH0]([CH3])([CH3])[CH2][CH3]),$([CH2][CH0]([CH3])([CH3])[CH3]),$([CH2][CH2][CH2][CH2][CH2]),$([CX4]1[CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4]1),$([CX4]1[CX4][CX4][CX4][CX4][CX4]1),$([CH2]c1ccccc1)][$([NX3]1[CH2][CH2][NX3H1][CH2][CH2]1),$([NX3]1[CH2][NX3H1][CH2][CH2]1),$([NX3]1[CH2][NX3H1][CH2][CH2][CH2]1)])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2206,22,Haloalkanes,"[$([Cl,Br,I][CH2][CX3]=[CX3]),$([Cl,Br,I][CH2][CX2]#[CX2]),$([Cl,Br,I][CH2][a!r0]),$([Cl,Br,I][CH2][CX3](=[OX1])[#6]),$([Cl,Br,I][CH2][CX3](=[OX1])[OX2]),$([Cl,Br,I][CH2][CX3](=[OX1])[NX3]),$([Cl,Br,I][CH2][CH2][NX3]),$([Cl,Br,I][CH2][CH2][OX2])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2207,22,Dialkyl sulfonates,[CX4][Sv6X4](=[OX1])(=[OX1])[OX2][CX4],Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2208,22,Dialkyl sulfates,[CX4][OX2][Sv6X4](=[OX1])(=[OX1])[OX2][CX4],Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2209,22,Epoxides,[CX4]1([CX4])[OX2][CX4]1([CX4]),Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2210,22,Activated aryl halides including appropriate heterocyclic rings,"[$([F,Cl,Br,I]c1c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1),$([F,Cl,Br,I]c1c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),$([CX2]#[NX1]),$(C(F)(F)F),$([Sv6X4](=[OX1])(=[OX1])[CH3])])cncc1),$([F,Cl,Br,I]c1ncc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),$([CX2]#[NX1]),$(C(F)(F)F),$([Sv6X4](=[OX1])(=[OX1])[CH3])])cc1),$([F,Cl,Br,I]c1ncccc1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),$([CX2]#[NX1]),$(C(F)(F)F),$([Sv6X4](=[OX1])(=[OX1])[CH3])])),$([F,Cl,Br,I]c1ncncc1),$([F,Cl,Br,I]c1ncncn1)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2211,22,Acid halides,"[Br,Cl,F,I][CX3](=[OX1])[#1,*&!$([OH1])&!$([SH1])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2212,22,Acid anhydrides,[CX3](=[OX1])[OX2][CX3](=[OX1]),Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2213,22,Ring strained amides,[NX3H1]1[CX4][CX4][CX3]1(=[OX1]),Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2214,22,Formaldehyde generators,"[$([NX3][CX4][NX3]),$([CX3](=[OX1])[NX3][CH2][OH1]),$([CX4]([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-]),F,Cl,Br,I,$([CX2]#[NX1]),$([CX4]([F,Cl])([F,Cl])[F,Cl]),$([CX3](=[OX1])[#1,F,Cl,Br,I])])[CH2][OH1])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2215,22,Thioesters,[CX3](=[SX1])[SX2],Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2216,22,Aldehydes and precursors,"[$([#1,#6;!$(C=C);!$(C#C)][CX3]([H])(=[OX1])),$([CX4;H1]([OX2])[OX2])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2217,22,Quinones,"[$([#6X3]1=,:[#6X3]-,:[#6X3](=[OX1])[#6X3]=,:[#6X3]-,:[#6X3]1(=[OX1])),$([#6X3]1(=[OX1])-,:[#6X3](=[OX1])-,:[#6X3]=,:[#6X3]-,:[#6X3]=,:[#6X3]1)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2218,22,"α, β-Unsaturated carbonyls","[CX3]=[CX3][CX3](=[OX1])[$([OX2]([CX3]=[OX1])[!#1]),$([#1][CX3]=[OX1]),$([NX3H2]([CX3]=[OX1])),$([NX3]([CX3]=[OX1])),$([CX4][CX3]=[OX1])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2219,22,Hydroquinones,[OH1]c1ccc([OH1])cc1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2220,22,Catechols,[OH1]c1c([OH1])cccc1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2221,22,Resorcinols,[OH1]c1cc([OH1])ccc1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2222,22,O-Alkyl hydroquinones precursors,[OH1]c1ccc([OX2][CX4])cc1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2223,22,O-Alkyl resorcinols precursors,[OH1]c1cc([OX2][CX4])ccc1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2224,22,O-Alkyl catechols precursors,[OH1]c1c([OX2][CX4])cccc1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2225,22,"1,3-Diketones","[CX3](=[OX1])[CX4]([#1,CX4])([#1,CX4])[CX3](=[OX1])",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2226,22,Thiols,[#16X2H1],Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2227,22,Disulfides,*[#16X2][#16X2]*,Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2228,22,Di- or polyhydroxy aromatic compounds and their precursors,"[$(c1([OH1])c([OH1])cccc1),$(c1([OH1])cc([OH1])ccc1),$(c1([OH1])ccc([OH1])cc1),$(c1([OH1])c([OH1])c([OH1])ccc1),$(c1([OH1])c([OH1])cc([OH1])cc1),$(c1([OH1])cc([OH1])cc([OH1])c1),$(c1([OH1])c([OH1])c([OH1])c([OH1])cc1),$(c1([OH1])c([OH1])c([OH1])cc([OH1])c1),$(c1([OH1])c([OH1])cc([OH1])c([OH1])c1),$(c1([OH1])c([OH1])c([OH1])c([OH1])c([OH1])c1),$(c1([OH1])c([OH1])c([OH1])c([OH1])c([OH1])c1([OH1]))]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2229,22,Diacyl peroxides,[A][CX3](=[OX1])[OX2][OX2][CX3](=[OX1])[A],Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2230,22,Diaryl peroxides,[a!r0][CX3](=[OX1])[OX2][OX2][CX3](=[OX1])[a!r0],Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2231,22,Arylacyl peroxides,[a!r0][CX3](=[OX1])[OX2][OX2][CX3](=[OX1])[A],Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2232,22,Haloamides,"[#6][CX3](=[OX1])[NX3]([F,Cl,Br,I])[#6]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2233,22,Hydroperoxides and precursors,[#6][OX2][OX2][OH1],Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2234,22,"1,2-Dihydroxy aromatic compounds",[OH1]aa[OH1],Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2235,22,"1,4-Dihydroxy aromatic compounds",[OH1]aaaa[OH1],Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2236,22,2 or 4-Hydroxysubstituted alkylphenyl ether,"[$(c1c([OX2][CX4])c([OH1])ccc1),$(c1c([OX2][CX4])ccc([OH1])c1)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2237,22,Aromatic amines,"[a!r0][$([NX3H2]),$([NX3H1][#6])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2238,22,Aromatic amines precursors,"[$([a!r0][NH1][CX3](=[OX1])),$(c1c([NX2]=[NX2][a!r0])ccc([$([NX3]([CX4])([CX4])),$([NX3H1][CX4]),$([NH2]),$([OH1])])c1)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2239,22,Alkyl or aryl sylfonyl halides,"[CX4,a!r0][Sv6X4](=[OX1])(=[OX1])[F,Cl,Br,I]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2240,22,Sulfonamides,"c1c([Sv6X4](=[OX1])(=[OX1])[NX3H1][$([#1]),$([CX4]),$([a!r0])])ccc([NX3H2])c1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2241,22,Isocyanates,[NX2]=[CX2]=[OX1],Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2242,22,Isothiocyanates,[NX2]=[CX2]=[SX1],Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2243,22,Dithiocarbamates,[SX2][CX3](=[SX1])[NX3],Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2244,22,Hydrazines,"[#6&!$([CX3]=[OX1,SX1,NX2])][NX3H1][NX3H2,$([NX3H1][#6&!$([CX3]=[OX1,SX1,NX2])])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2245,22,Trinitroaromaric compounds,"[$(c1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])ccc1),$(c1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc1),$(c1([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])cc([$([NX3](=[OX1])=[OX1]),$([NX3+](=[OX1])[O-])])c1)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2246,22,Activated halo- or nitropyridines,"[$(c1([F,Cl,Br,I,$(N(=O)=O)])ncc([F,Cl,Br,I,$(N(=O)=O),$(C#N),$(C=O),$(C(F)(F)F),$(S=O)])cc1),$(c1([F,Cl,Br,I,$(N(=O)=O)])ncccc1([F,Cl,Br,I,$(N(=O)=O),$(C#N),$(C=O),$(C(F)(F)F),$(S=O)]))]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2247,22,2-Halo- or 2-nitropyrimidines,"c1([F,Cl,Br,I,$(N(=O)=O)])ncccn1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2248,22,4-Halo- or 4-nitropyrimidines,"c1([F,Cl,Br,I,$(N(=O)=O)])ncncc1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2249,22,Activated 2-halo- or 2-nitropyrazines,"c1([F,Cl,Br,I,$(N(=O)=O)])ncc([F,Cl,Br,I,$(N(=O)=O),$(C#N),$(C=O),$(C(F)(F)F),$(S=O)])nc1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2250,22,Halo- or nitro s-triazines,"c1nc([F,Cl,Br,I,$(N(=O)=O)])ncn1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2251,22,Formaldehyde and thioformaldehyde,"[CH2]=[OX1,SX1]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2252,22,Aliphatic aldehydes and thioaldehydes,"[CX4][CX3H1]=[OX1,SX1]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2253,22,Aromatic aldehydes,[a][CX3H1]=[OX1],Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2254,22,"α, β-Unsaturated carbonyl and thiocarbonyl compounds","C(C)(C)=CC=[OX1,SX1]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2255,22,"α, β-Unsaturated ketones and thioketones","[C;!r5]([C;!r5])=[C;!r5][C;!r5](C)=[OX1,SX1;!r5]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2256,22,α-Diketones and α-dithiones,"[#6]C(=[OX1,SX1])C(=[OX1,SX1])[#6]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2257,22,"[#6]C(=[OX1,SX1])[CX4]C(=[OX1,SX1])[#6]","[#6]C(=[OX1,SX1])[CX4]C(=[OX1,SX1])[#6]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2258,22,"C-Nitroso compounds, iso(thio)cyanates, (thio)cyanate esters","[#6][$([NX2]=O),$(N=C=O),$(OC#N),$(SC#N),$(N=C=S)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2259,22,Primary alkyl amines,[CH2][NH2],Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2260,22,Tertiary alkyl amines,[CH2][NX3]([CH3])[CH3],Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2261,22,"α, β-Unsaturated alkoxy","[$(CC(C)=[CH][CH2][OH]),$(CC=C(C)[CH2][OH])]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2262,22,Three-membered heterocycles derivatives,"[CH,CH2,CH3;!$([CH2]CC=[O,S])]([F,Cl,Br,I,$(OS(=O)(=O)[#6,#1]),$(OS(=O)(=O)O[#6,#1])])[#6]1[O,N,SX2][#6]1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2263,22,Lactones and their thio analogues,"C1C(=[O,S])[O,S][CH2,CH]1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2264,22,Esters of aromatic and unsaturated alcohols and their thio analogues,"[$(C=C),$(C#C),a][CH2,CH][O,S][$([CH]=O),$([CH]=S),$(C(C)=O),$(C(C)=S)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2265,22,Aryloxy (arylthio) containing unsaturated compounds,"[$(C=C),$(C#C),a][CH2,CH][O,S][a]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2266,22,Aliphatic N-(thio)nitroso compounds,"[CH2,CH3][NX3][NX2]=[O,S]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2267,22,Anthracene and anthracene-containing compounds,c1ccc2cc3ccccc3cc2c1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2268,22,Phenanthrene and phenanthrene-containing compounds,c1ccc2c(c1)ccc3ccccc23,Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2269,22,Activated alkene (Michael acceptor) (1),"[CH2,CH]=[CH][$(N(=[OX1])=[OX1]),$(C=O),$(C#N),$(S=O),$(C(=O)N),$(a)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2270,22,Activated alkene (Michael acceptor) (2),"[CH2]=C[$(N(=[OX1])=[OX1]),$(C=O),$(C#N),$(S=O),$(C(=O)N),$(a)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2271,22,Activated alkene (Michael acceptor),"aC=C[$(N(=[OX1])=[OX1]),$(C=O),$(C#N),$(S=O),$(C(=O)N),$(a)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2272,22,Activated alkine,"C#C[$(N(=[OX1])=[OX1]),$(C=O),$(C#N),$(S=O),$(C(=O)N),$(a)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2273,22,Activated conjugated dienes,"[CH2,CH]=[CH]C=C[$(N(=[OX1])=[OX1]),$(C=O),$(C#N),$(S=O),$(C(=O)N),$(a)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2274,22,Alkenes containing a gem-dihalo-substituted terminal double bond,"C=C([F,Cl,Br,I])[F,Cl,Br,I]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2275,22,Ortho-disubstituted benzenes,"c1c([O,NH2,NH])c([O,NH2,NH])ccc1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2276,22,Para-disubstituted benzenes,"c1c(=[O,NH2,NH])ccc(=[O,NH2,NH])c1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2277,22,"Isothiazolinone, isothiazolinthione and their derivatives","[#6]1=,:[#6]C(=[OX1,SX1])N[SX2]1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2278,22,Acyl and thioacyl halides,"[!$(C=C);!$(C#C)]C(=[O,SX1])[F,Cl,Br,I]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2279,22,Imidoyl halides,"[!$(C=C);!$(C#C)]C(=N)[F,Cl,Br,I]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2280,22,Esters of aromatic alcohols and their thio and aza analogues,"[!$(C=C);!$(C#C)]C(=[O,SX1,N])[O,S,N][a]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2281,22,Acid anhydrides and their thio and aza analogues,"[!$(C=C);!$(C#C)]C(=[O,SX1,N])[O,S,N]C(=[O,SX1,N])",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2282,22,Esters of unsaturated alcohols and their thio and aza analogues,"[!$(C=C);!$(C#C)]C(=[O,S,N])[O,S][$(C=C),$(C=N),$(C#C),$(C#N)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2283,22,"β-Lactones, β-lactams and their thio analogues","[#6]1C(=[O,S])[O,N,S][#6]1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2284,22,Benzo-fused five-membered heterocycles,"[C,N,O,S,a]c1[n,o,s]c2ccccc2[n,o,s]1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2285,22,(Thio)carbonyl and imine derivatives of five-membered heterocycles,"[#6]1[#6](=[N,O,S])[#7,#8,#16][#6][#7,#8,#16]1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2286,22,Phthalic anhydrides and their thio and aza analogues,"[C,O]=[#6]1[#7,#8,#16][#6](=[O,N,SX1])c2ccccc12",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2287,22,Acylating agents,"[!$(C=C);!$(C#C)]C(=[O,SX1,N])[O,S,N][CX4,O,S][$(C=O),a,$(C=C),$(C#C),$(C=N),$(C#N)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2288,22,Heteryl-substituted benzenes,"C1=[C,N][$(S(=O)(=O)),$(C=[N,O]),$(S=O)][C,N]=C1c2ccccc2",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2289,22,Cyclopentanone and cyclopentathione derivatives,"[CH2,CH]=C1C(=[OX1,SX1])**C1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2290,22,"Ortho-substituted phenols, primary and secondary amines","c1c([OH,NH2,NH])c([OH,NH2,NH,$(N=N),$(N(C)C)])ccc1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2291,22,"Para-substituted phenols, primary and secondary amines","c1c([OH,NH2,NH])ccc([OH,NH2,NH,$(N=N),$(N(C)C)])c1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2292,22,"Meta-substituted phenols, primary and secondary amines","c1c([OH,NH2,NH])cc([OH,NH2,NH,$(N(C)C)])cc1",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2293,22,Ortho-hydroxysubstituted methyl phenyl ether,c1([OH])c(O[CH3])cccc1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2294,22,Para-hydroxysubstituted methyl phenyl ether,c1([OH])ccc(O[CH3])cc1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2295,22,Para-hydroxysubstituted iso-allyl benzene,c1c([OH])ccc(C=C[CH3])c1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2296,22,Haloethyl-substituted aromatic compounds,"C([F,Cl,Br,I])[CH2,CH][a]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2297,22,Para-hydroxysubstituted allylbenzene,c1([OH])ccc([CH2][CH]=[CH2])cc1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2298,22,Para-methoxysubstituted allylbenzene,c1(O[CH3])ccc([CH2][CH]=[CH2])cc1,Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2299,22,α-Naphthols,[OH]c1cccc2ccccc12,Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2300,22,vic-Difluoroalkyl group,"F[CH2,CH]C(F)[$(N(=[OX1])=[OX1]),$(C=O),$(C#N),$(S=O),$(C(=O)N),$(a)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2301,22,vic-Dichloroalkyl group,"Cl[CH2,CH]C(Cl)[$(N(=[OX1])=[OX1]),$(C=O),$(C#N),$(S=O),$(C(=O)N),$(a)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2302,22,vic-Dibromoalkyl group,"Br[CH2,CH]C(Br)[$(N(=[OX1])=[OX1]),$(C=O),$(C#N),$(S=O),$(C(=O)N),$(a)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2303,22,vic-Diiodoalkyl group,"I[CH2,CH]C(I)[$(N(=[OX1])=[OX1]),$(C=O),$(C#N),$(S=O),$(C(=O)N),$(a)]",Skin,1,1,Litterature,Skin Sensitization filters (irritables) +2304,23,1_2_aminothiazole,"s1ccnc1[$([NX3H2&!R]),$([NX3H1&!R][c,C]),$([NX3&!R]([c,C])[c,C])]",Toxicophore,1,1,Litterature,General Toxicophores +2305,23,1_2_dicarbonyl_oxalyl,"[$([CD3&!R][#6,#8,#7,F,Cl,I,Br]),$([CD3&!R][#1]),$([CD2&!R])](=[OD1&!R])[$([CD3&!R][#6,#8,#7,F,Cl,Br,I]),$([CD3&!R][#1]),$([CD2&!R])]=[OD1&!R]",Toxicophore,1,1,Litterature,General Toxicophores +2306,23,1_2_thiazol_3_one,S1[NX3H1]C(=[OX1])C=C1,Toxicophore,1,1,Litterature,General Toxicophores +2307,23,1_aminobenzotriazole,Nn1nnc2ccccc12,Toxicophore,1,1,Litterature,General Toxicophores +2308,23,2_phenylbenzimidazole,c2ccc3nc(c4ccccc4)[nX3H1]c3c2,Toxicophore,1,1,Litterature,General Toxicophores +2309,23,3_amino_9_ethylcarbazoles,CCN1C2=C(C=C(C=C2)N)C3=CC=CC=C31,Toxicophore,1,1,Litterature,General Toxicophores +2310,23,3_methylindole,C1=C([CX4H3])c2ccccc2[NX3H1]1,Toxicophore,1,1,Litterature,General Toxicophores +2311,23,4_subst_n_alkyltetrahydropyridines,[a]C1=CCN([A])CC1,Toxicophore,1,1,Litterature,General Toxicophores +2312,23,4_vinyl_pyridine,c1cnccc1[CX3&!R]=[CX3&!R],Toxicophore,1,1,Litterature,General Toxicophores +2313,23,6_membered_aromatic_sulfur,"[SD2]1[#7,#6]=CC(=[OX1&!R])C=[#7,#6]1",Toxicophore,1,1,Litterature,General Toxicophores +2314,23,9_aminoacridine,c1cccc2c([NX3&!RH2])c3ccccc3nc12,Toxicophore,1,1,Litterature,General Toxicophores +2315,23,acetal_1_in_ring,C1([SX2&!R][#6&!R])=NCCS1,Toxicophore,1,1,Litterature,General Toxicophores +2316,23,acetal_both_in_ring,C1(=[NX2&!R][CX2&!R]#[NX1&!R])SCCS1,Toxicophore,1,1,Litterature,General Toxicophores +2317,23,acetylene_alkyne,"[#1,#6]C#CC",Toxicophore,1,1,Litterature,General Toxicophores +2318,23,acrylamide,"[$([NX3H2&!R]),$([NX3H1&!R][c,C]),$([NX3&!R]([c,C])[c,C])][CX3&!R](=[OX1])[CX3&!R]=[$([CX3H2&!R]),$([CX3H1&!R][c,C]),$([CX3H0&!R]([c,C])[c,C])]",Toxicophore,1,1,Litterature,General Toxicophores +2319,23,acyclic_acetal,"[#6][OX2&!R][$([CX4&!RH2]),$([CX4&!RH1][#6]),$([CX4&!R]([#6])[#6])][OX2&!R][#6]",Toxicophore,1,1,Litterature,General Toxicophores +2320,23,acyclic_acid_halide_acyl_halide,"*[CD3&!R]([F,Cl,I,Br])=[OX1]",Toxicophore,1,1,Litterature,General Toxicophores +2321,23,acyclic_alkyne,[#6][CX2&!R]#[CX2&!R][#6],Toxicophore,1,1,Litterature,General Toxicophores +2322,23,acyclic_ketone,[#6&!R][CD3&!R](=[OD1&!R])[#6&!R],Toxicophore,1,1,Litterature,General Toxicophores +2323,23,acyl_amide,"[C,c][C;!R](=O)[N;!R][C;!R](=O)[C,c]",Toxicophore,1,1,Litterature,General Toxicophores +2324,23,acyl_cyanides,[NX1]#[CX2&!R][CX3&!R](=[OX1])[#6],Toxicophore,1,1,Litterature,General Toxicophores +2325,23,acyl_hydrazone_cyclic,[#6]=[NX2][NX3][CX3]=[OX1],Toxicophore,1,1,Litterature,General Toxicophores +2326,23,acyl_isoamide_aromatic,n1coc(=[OX1])cc1,Toxicophore,1,1,Litterature,General Toxicophores +2327,23,adamantane,C1C2CC3CC1CC(C2)C3,Toxicophore,1,1,Litterature,General Toxicophores +2328,23,aldehyde,[*][CX3&!RH1]=[OD1],Toxicophore,1,1,Litterature,General Toxicophores +2329,23,alkyl_halide_noF,"[CX4&!R][Br,I,Cl]",Toxicophore,1,1,Litterature,General Toxicophores +2330,23,alkynes,"[#6][#6]#[#6][#6,#1]",Toxicophore,1,1,Litterature,General Toxicophores +2331,23,alpha_haloamines,"[F,Cl,I,Br][#7]",Toxicophore,1,1,Litterature,General Toxicophores +2332,23,alphahalo_ketone_carbonyl,"[#6][CD3&!c](=[OD1])[CX4&!c][Cl,Br,I,F]",Toxicophore,1,1,Litterature,General Toxicophores +2333,23,anhydride,[OX1]=[CD3]([*])[OD2][CD3](=[OX1])[*],Toxicophore,1,1,Litterature,General Toxicophores +2334,23,anthracene,a1aa2aa3aaaaa3aa2aa1,Toxicophore,1,1,Litterature,General Toxicophores +2335,23,arylhydroxamic_acid,c[CX3](=O)[NX3H1][OX2H1],Toxicophore,1,1,Litterature,General Toxicophores +2336,23,azide,"[$(N#[N+]-[N-]),$([N-]=[N+]=N)]",Toxicophore,1,1,Litterature,General Toxicophores +2337,23,aziridine,"N1[$([CX4H2]),$([CX4H1][#6&!R]),$([CX4]([#6&!R])[#6&!R])][$([CX4H2]),$([CX4H1][#6&!R]),$([CX4]([#6&!R])[#6&!R])]1",Toxicophore,1,1,Litterature,General Toxicophores +2338,23,azo,[#6][NX2]=[NX2][#6],Toxicophore,1,1,Litterature,General Toxicophores +2339,23,azocyanamide,[N;R0]=[N;R0]C#N,Toxicophore,1,1,Litterature,General Toxicophores +2340,23,benzodioxolane,[CX4H2]1Oc2ccccc2O1,Toxicophore,1,1,Litterature,General Toxicophores +2341,23,beta_heterosubstituted_carbonyl,"[OD1&!R]=[$([CD3&!R]);!$([CD3&!R][#8])]CC([F,Br,I,Cl])",Toxicophore,1,1,Litterature,General Toxicophores +2342,23,betalactams,[OX1&!R]=C1CCN1C,Toxicophore,1,1,Litterature,General Toxicophores +2343,23,carbamate_thiocarbamate,"[NX3&!R][CX3&!R](=[OX1,SX1])[OX2&!R,#16&!R][#6]",Toxicophore,1,1,Litterature,General Toxicophores +2344,23,carbamic_acid,"[$([NX4+]),$([ND1&!R]),$([NX3&!H2]),$([NX3&!RH1][#6]),$([NX3&!R]([#6])[#6])][CD3&!R](=[OD1&!R])[OX2&!RH1,OX1-]",Toxicophore,1,1,Litterature,General Toxicophores +2345,23,carbazide,O=*N=[N+]=[N-],Toxicophore,1,1,Litterature,General Toxicophores +2346,23,carbodiimide,[#6][NX2]=C=[NX2][#6],Toxicophore,1,1,Litterature,General Toxicophores +2347,23,catechol,[OH]c1c([OH])cccc1,Toxicophore,1,1,Litterature,General Toxicophores +2348,23,chloramidine,[Cl]C([C&R0])=N,Toxicophore,1,1,Litterature,General Toxicophores +2349,23,coumarines,[OX1&!R]=c1ccc2ccccc2o1,Toxicophore,1,1,Litterature,General Toxicophores +2350,23,crown_2_2,"C[#8,#7,#16]CC[#8,#7,#16]CC[#8,#7,#16]C",Toxicophore,1,1,Litterature,General Toxicophores +2351,23,crown_2_3,"C[#8,#7,#16]CCC[#8,#7,#16]CC[#8,#7,#16]C",Toxicophore,1,1,Litterature,General Toxicophores +2352,23,crown_3_3,"C[#8,#7,#16]CCC[#8,#7,#16]CCC[#8,#7,#16]C",Toxicophore,1,1,Litterature,General Toxicophores +2353,23,cyanohydrins,[ND1&!R]#[CD2&!R][CX4&!R][OD2H1],Toxicophore,1,1,Litterature,General Toxicophores +2354,23,cyanophosphonate,P(OC)(OC)(=O)C#N,Toxicophore,1,1,Litterature,General Toxicophores +2355,23,cyclopropylamine,C1CC1[NX3&!R],Toxicophore,1,1,Litterature,General Toxicophores +2356,23,diazonium,"[c,C][N+&!R]#[N&!R]",Toxicophore,1,1,Litterature,General Toxicophores +2357,23,ellipticine,Cc1c2[nH]c3ccccc3c2c(C)c2cnccc12,Toxicophore,1,1,Litterature,General Toxicophores +2358,23,enamine,[CX3]=[CX3&!R][NX3&!R],Toxicophore,1,1,Litterature,General Toxicophores +2359,23,epoxide,[OX2r3]1[#6r3][#6r3]1,Toxicophore,1,1,Litterature,General Toxicophores +2360,23,fmoc,c12c(cccc1)c1c([CX4H1]2CO[CX3H0](=[OX1]))cccc1,Toxicophore,1,1,Litterature,General Toxicophores +2361,23,formic_acid_esters,[CX3H1&!R](=[OX1])[OX2&!R][#6],Toxicophore,1,1,Litterature,General Toxicophores +2362,23,furan,c1ccco1,Toxicophore,1,1,Litterature,General Toxicophores +2363,23,furocoumarines,[OX1&!R]=c1ccc2cc3ccoc3cc2o1,Toxicophore,1,1,Litterature,General Toxicophores +2364,23,halo_alkene,"[Br,F,I,Cl][$([CX3&!R][#6]),$([CX3&!RH1])]=[$([CX3&!R]([#6])[#6]),$([CX3&!RH1][#6]),$([CX3&!RH2])]",Toxicophore,1,1,Litterature,General Toxicophores +2365,23,halo_amine,"[CX4&!R][$([NX3&!RH1]),$([NX3&!R][#6])][Br,F,I,Cl]",Toxicophore,1,1,Litterature,General Toxicophores +2366,23,halopyrimidine,"c1cnc([F,Cl,Br,I])nc1",Toxicophore,1,1,Litterature,General Toxicophores +2367,23,hemiaminal,"[OX2&!RH1][$([CX4&!RH2]),$([CX4&!RH1][#6]),$([CX4&!R]([#6])[#6])][$([NX3&!RH2]),$([NX3&!RH1][#6]),$([NX3&!R]([#6])[#6])]",Toxicophore,1,1,Litterature,General Toxicophores +2368,23,hemiketal,"[OX2&!RH1][$([CX4&!RH2]),$([CX4&!RH1][#6]),$([CX4&!R]([#6])[#6])][$([OX2&!RH1]),$([OX2&!R][#6])]",Toxicophore,1,1,Litterature,General Toxicophores +2369,23,heteroatom_heteroatom_N_N,"[$([#6][NH1;!R]-[NH1;!R][#6]),$([#6][NH1;!R]-[N;!R]([#6])[#6]),$([#6][N;!R]([#6])-[N;!R]([#6])[#6])]",Toxicophore,1,1,Litterature,General Toxicophores +2370,23,heteroatom_heteroatom_N_S,"[$([#6][NH1;!R]-[SD2;!R][#6]),$([#6][N;!R]([#6])-[SD2;!R][#6])]",Toxicophore,1,1,Litterature,General Toxicophores +2371,23,heteroatom_heteroatom_O_N,"[$([#6][#8;!R][NH1;!R][#6]),$([#6][#8;!R][N;!R]([#6])[#6])]",Toxicophore,1,1,Litterature,General Toxicophores +2372,23,heteroatom_heteroatom_S_O,[#6][SD2;!R]-[#8;!R][#6],Toxicophore,1,1,Litterature,General Toxicophores +2373,23,heteroatom_heteroatom_S_S,[#6][SD2;!R][SD2;!R][#6],Toxicophore,1,1,Litterature,General Toxicophores +2374,23,high_risk_aniline,[NX3H2&!R]c1ccccc1,Toxicophore,1,1,Litterature,General Toxicophores +2375,23,hydantoin,[OX1]=C1[NX3H1]C(=[OX1])CN1,Toxicophore,1,1,Litterature,General Toxicophores +2376,23,hydralazine,n1ncc2ccccc2c1([NX3&!RH1][NX3&!RH2]),Toxicophore,1,1,Litterature,General Toxicophores +2377,23,hydrazide,[NX3&!R][NX3&!R][#6X3](=[OX1])[#6],Toxicophore,1,1,Litterature,General Toxicophores +2378,23,hydrazine,[#6][NX3&!RH1][NX3&!RH2],Toxicophore,1,1,Litterature,General Toxicophores +2379,23,hydrazone,[CX3&!R]=[NX2&!R][NX3&!R],Toxicophore,1,1,Litterature,General Toxicophores +2380,23,hydroxamic_acid,"[CX3&!R;$([H0][#6])](=[OD1])[#7X3;$([H1])][OX2&!RH1,OX1-]",Toxicophore,1,1,Litterature,General Toxicophores +2381,23,hydroxylamine,"[c,C;!$([#6]=[#8])][$([NX3&!RH1]),$([NX3&!R][#6])][OX2&!RH1]",Toxicophore,1,1,Litterature,General Toxicophores +2382,23,imidazole,[#6]n1cncc1,Toxicophore,1,1,Litterature,General Toxicophores +2383,23,imide,"[C,c][C;!R](=O)[N;!R][C;!R](=O)[C,c]",Toxicophore,1,1,Litterature,General Toxicophores +2384,23,imidoyl_halide,"[$([CX3&!RH1]),$([CX3&!RH0][#6])](=[NX2&!R])[F,Br,I,Cl]",Toxicophore,1,1,Litterature,General Toxicophores +2385,23,imine,[CX3]=[NX2!R],Toxicophore,1,1,Litterature,General Toxicophores +2386,23,isocyanate,[OD1&!R]=[CD2&!R]=[ND2&!R][#6],Toxicophore,1,1,Litterature,General Toxicophores +2387,23,isocyanide_isonitrile,[#6][#7+]#[#6-],Toxicophore,1,1,Litterature,General Toxicophores +2388,23,isothiocyanate,[SD1&!R]=[CD2&!R]=[ND2&!R][#6],Toxicophore,1,1,Litterature,General Toxicophores +2389,23,lawesson_reagent_derivative,[#6]P1(=S)SP(S1)(=S)[#6],Toxicophore,1,1,Litterature,General Toxicophores +2390,23,maleimide,C1=CC(=[OX1])NC1=[OX1],Toxicophore,1,1,Litterature,General Toxicophores +2391,23,masked_aniline,"[$([n]),$([#7H1]),$([#7H0;!$([NX3]=[O])])]c1ccccc1",Toxicophore,1,1,Litterature,General Toxicophores +2392,23,meta_aminophenol,c1([NX3&!R])cc([OX2&!RH1])ccc1,Toxicophore,1,1,Litterature,General Toxicophores +2393,23,michael_acceptors_double,"[#6]=[#6][$([#6]=[OX1&!R]),$([#6][#7&!R]),$([#6][#16!R])]",Toxicophore,1,1,Litterature,General Toxicophores +2394,23,michael_acceptors_triple,"[#6]#[#6][$([#6]=[OX1&!R]),$([#6][#7&!R]),$([#6][#16!R])]",Toxicophore,1,1,Litterature,General Toxicophores +2395,23,mustard_gas,[Cl]CCSCC[Cl],Toxicophore,1,1,Litterature,General Toxicophores +2396,23,n_acylated_azoles,[#6][CX3&!R]([r5])=[OX1],Toxicophore,1,1,Litterature,General Toxicophores +2397,23,n_oxide,C[N+]1(CCN(CC1)C2=C3C=CC=CC3=NC4=C(N2)C=C(C=C4)Cl)[O-],Toxicophore,1,1,Litterature,General Toxicophores +2398,23,nitramine,"[$([NX3][NX3&!R](=O)=O),$([NX3][NX3+&!R](=O)[O-]),$([NX3][NX3+&!R]([O-])[O-])][!#8]",Toxicophore,1,1,Litterature,General Toxicophores +2399,23,nitrile,[ND1&!R]#[CD2!R][#6],Toxicophore,1,1,Litterature,General Toxicophores +2400,23,nitro,"[$([NX3&!R](=O)=O),$([NX3+&!R](=O)[O-]),$([NX3+&!R]([O-])[O-])]",Toxicophore,1,1,Litterature,General Toxicophores +2401,23,nitrobenzene,"c1ccccc1[$([NX3&!R](=O)=O),$([NX3+&!R](=O)[O-]),$([NX3+&!R]([O-])[O-])]",Toxicophore,1,1,Litterature,General Toxicophores +2402,23,nitroso,"[OD1&!R]=[$([ND2&!R][#6]),$([ND2&!R][NX3])]",Toxicophore,1,1,Litterature,General Toxicophores +2403,23,o_thiocarbamate,[#6][OX2&!R][CX3&!R](=[SX1])[NX3&!R][#6],Toxicophore,1,1,Litterature,General Toxicophores +2404,23,ortho_aminophenol,c1([NX3&!R])c([OX2&!RH1])cccc1,Toxicophore,1,1,Litterature,General Toxicophores +2405,23,ortho_hydroxyanilines,"c1cccc([OX2&!RH1])c1[$([NX3&!RH2]),$([NX3&!RH1][#6]),$([NX3&!R]([#6])[#6])]",Toxicophore,1,1,Litterature,General Toxicophores +2406,23,orthonitrophenyl_ester,"[#6][CX3&!R](=[OX1])[OX2&!R]c1ccc([$([NX3&!R](=O)=O),$([NX3+&!R](=O)[O-]),$([NX3+&!R]([O-])[O-])])cc1",Toxicophore,1,1,Litterature,General Toxicophores +2407,23,orthoquinone,[OD1&!R]=C1C(=[OD1&!R])C=CC=C1,Toxicophore,1,1,Litterature,General Toxicophores +2408,23,oxime,[CX3]=[NX2][OX2H1],Toxicophore,1,1,Litterature,General Toxicophores +2409,23,oxonium,[O+],Toxicophore,1,1,Litterature,General Toxicophores +2410,23,para_aminophenol,c1([NX3&!R])ccc([OX2&!RH1])cc1,Toxicophore,1,1,Litterature,General Toxicophores +2411,23,para_hydroquinone,[OH]c1ccc([OH])cc1,Toxicophore,1,1,Litterature,General Toxicophores +2412,23,para_hydroxyanilines,"c1cc([OX2&!RH1])ccc1[$([NX3&!RH2]),$([NX3&!RH1][#6]),$([NX3&!R]([#6])[#6])]",Toxicophore,1,1,Litterature,General Toxicophores +2413,23,para_para_dihydroxybiphenyl,[OH]c1ccc(c2ccc([OH])cc2)cc1,Toxicophore,1,1,Litterature,General Toxicophores +2414,23,para_para_dihydroxystilbene,[OH]c1ccc([#6&!R]=[#6&!R]c2ccc([OH])cc2)cc1,Toxicophore,1,1,Litterature,General Toxicophores +2415,23,paranitrophenyl_ester,"C(=O)(C)Oc1ccc([$([NX3&!R](=O)=O),$([NX3+&!R](=O)[O-]),$([NX3+&!R]([O-])[O-])])cc1",Toxicophore,1,1,Litterature,General Toxicophores +2416,23,pentafluorophen_ester,C(=O)(C)Oc1c(F)c(F)c(F)c(F)c1(F),Toxicophore,1,1,Litterature,General Toxicophores +2417,23,perhaloketone,"[#6][CD3&!R](=[OD1&!R])[CD4&!R]([F,Br,I,Cl])([F,Br,I,Cl])[F,Br,I,Cl]",Toxicophore,1,1,Litterature,General Toxicophores +2418,23,peroxide,[#6][#8][#8][#6],Toxicophore,1,1,Litterature,General Toxicophores +2419,23,phenanthrene_het,c1cccc2c1c3c(cc2)cccc3,Toxicophore,1,1,Litterature,General Toxicophores +2420,23,phenol,[OX2H]c1ccccc1,Toxicophore,1,1,Litterature,General Toxicophores +2421,23,phosphorane,C=P,Toxicophore,1,1,Litterature,General Toxicophores +2422,23,phosphoric_acid_or_ester,"[#6,#1][OX2&!R][PX4&!R](=[OX1])([OX2&!R][#6,#1])[OX2&!R][#6,#1]",Toxicophore,1,1,Litterature,General Toxicophores +2423,23,polyenes,"[#6]=[CX3&!R][CX3&!R]=[$([CX3&!R][#6&!R]),$([CX3&!RH2])]",Toxicophore,1,1,Litterature,General Toxicophores +2424,23,propiolactone,[OX1&!R]=C1OCC1,Toxicophore,1,1,Litterature,General Toxicophores +2425,23,propiosultone,[OX1&!R]=[SX4]1(=[OX1&!R])OCCC1,Toxicophore,1,1,Litterature,General Toxicophores +2426,23,pyrrole,c1ccnc1,Toxicophore,1,1,Litterature,General Toxicophores +2427,23,quinone,"O=[#6]1[#6]:,=[#6][#6](=O)[#6]:,=[#6]1",Toxicophore,1,1,Litterature,General Toxicophores +2428,23,s_thiocarbamate,[#6][SX2&!R][CX3&!R](=[OX1])[NX3&!R][#6],Toxicophore,1,1,Litterature,General Toxicophores +2429,23,sulfonate_ester,"[#6][OD2&!R]S(=[OX1])(=[OX1])[#6,#1]",Toxicophore,1,1,Litterature,General Toxicophores +2430,23,sulfone,"[$([#16X4&!R](=[OX1])(=[OX1])([#6])[#6]),$([#16X4+2&!R]([OX1-])([OX1-])([#6])[#6])]",Toxicophore,1,1,Litterature,General Toxicophores +2431,23,sulfonic_acid,"[#6][SX4&!R](=[OX1])(=[OX1])[$([OX2H]),$([OX1-])]",Toxicophore,1,1,Litterature,General Toxicophores +2432,23,sulfonic_acid_ester,"[#6][SX4&!R](=[OX1])(=[OX1])[$([OX2&!R][#6,#1]),$([OX1-])]",Toxicophore,1,1,Litterature,General Toxicophores +2433,23,sulfonium,[SX3+],Toxicophore,1,1,Litterature,General Toxicophores +2434,23,sulfonyl_cyanide,"[#6][SD4&!R,SD4+2&!R](=[OD1&!R])(=[OD1&!R])[CD2&!R]#[NX1]",Toxicophore,1,1,Litterature,General Toxicophores +2435,23,sulfonyl_halide,"[#6][#16]([F,Cl,I,Br])(=[#8])=[#8]",Toxicophore,1,1,Litterature,General Toxicophores +2436,23,sulfonyl_urea,[NX3H1][CX3](=[OX1])[NX3H1][SX4](=[OX1])=[OX1],Toxicophore,1,1,Litterature,General Toxicophores +2437,23,sulfoxide,"[$([#16X3](=[OX1])([#6])[#6]),$([#16X3+]([OX1-])([#6])[#6])]",Toxicophore,1,1,Litterature,General Toxicophores +2438,23,sulphanylamino,[#6][NX3H1][SX2H1],Toxicophore,1,1,Litterature,General Toxicophores +2439,23,terminal_vinyl,[CX3H1&!R]=[CX3H2&!R],Toxicophore,1,1,Litterature,General Toxicophores +2440,23,thiazole,s1ccnc1,Toxicophore,1,1,Litterature,General Toxicophores +2441,23,thiazolidinedione,S1C(=[OX1])[NX3H1]C(=[OX1])C1,Toxicophore,1,1,Litterature,General Toxicophores +2442,23,thioacetal,[#6][CX4&!R]([#16&!R][#6])[#16&!R][#6],Toxicophore,1,1,Litterature,General Toxicophores +2443,23,thioamide,[#6][CX3&!R](=[SX1&!R])[NX3]([#6])[#6],Toxicophore,1,1,Litterature,General Toxicophores +2444,23,thiocarbonyl_aromatic,"[C,c]=[SX1&!RH0]",Toxicophore,1,1,Litterature,General Toxicophores +2445,23,thioester,"[OX1&!R]=[c,C][SX2]",Toxicophore,1,1,Litterature,General Toxicophores +2446,23,thioic_acid,"[$([CX3]([OX2H1])=S),$([CX3]([SX2H1])=O),$([CX3]([SX2H1])=S)]",Toxicophore,1,1,Litterature,General Toxicophores +2447,23,thioketone,[SD1&!R]=[#6],Toxicophore,1,1,Litterature,General Toxicophores +2448,23,thiol,[#6][SX2H1&!R],Toxicophore,1,1,Litterature,General Toxicophores +2449,23,thiophene,s1cccc1,Toxicophore,1,1,Litterature,General Toxicophores +2450,23,thiourea,"[$([NX3&!RH2]),$([NX3&!RH1][#6]),$([NX3&!R]([#6])[#6])][CX3&!R](=[SX1&!R])[$([NX3&!RH2]),$([NX3&!RH1][#6]),$([NX3&!R]([#6])[#6])]",Toxicophore,1,1,Litterature,General Toxicophores +2451,23,toxoflavins,CN1C2=NC(=O)N(C(=O)C2=NC=N1)C,Toxicophore,1,1,Litterature,General Toxicophores +2452,23,triacyloxime,C(=O)N(C(=O))OC(=O),Toxicophore,1,1,Litterature,General Toxicophores +2453,23,triazenes,[NX3&!R][NX2&!R]=[NX2&!R],Toxicophore,1,1,Litterature,General Toxicophores +2454,23,triazine,"[$([ND1&!R]),$([NX3&!RH2]),$([NX3&!RH1][#6])][ND2&!R]=[$([ND1&!R]),$([NX2&!R][#6]),$([NX2&!RH1])]",Toxicophore,1,1,Litterature,General Toxicophores +2455,23,triazole,[#6]n1cncn1,Toxicophore,1,1,Litterature,General Toxicophores +2456,23,triflate,OS(=O)(=O)C(F)(F)F,Toxicophore,1,1,Litterature,General Toxicophores +2457,23,triphenyl,c1ccccc1[CX4&!R](c1ccccc1)c1ccccc1,Toxicophore,1,1,Litterature,General Toxicophores diff --git a/medchem/structural/_common.py b/medchem/structural/_common.py index 65d2463..3889a15 100644 --- a/medchem/structural/_common.py +++ b/medchem/structural/_common.py @@ -93,7 +93,11 @@ def list_default_available_alerts(): return rule_list - def _evaluate(self, mol: Union[str, dm.Mol]): + def _evaluate( + self, + mol: Union[str, dm.Mol], + keep_details: bool = False, + ): """ Evaluate structure alerts on a molecule @@ -117,7 +121,8 @@ def _evaluate(self, mol: Union[str, dm.Mol]): ) # Match the molecule against the alerts - n_matches = self.alerts_df["smarts_mol"].apply(lambda x: len(_mol.GetSubstructMatches(x))) + matches = self.alerts_df["smarts_mol"].apply(lambda x: _mol.GetSubstructMatches(x)) + n_matches = matches.apply(len) has_alert = n_matches > 0 # Prepare the result @@ -137,6 +142,12 @@ def _evaluate(self, mol: Union[str, dm.Mol]): result["status"] = "ok" result["reasons"] = None + if keep_details: + details = self.alerts_df[has_alert].copy() + details = details.drop(columns=["smarts_mol"]) + details["matches"] = matches[has_alert].tolist() + result["details"] = details.to_dict(orient="records") + return result def __call__( @@ -146,6 +157,7 @@ def __call__( progress: bool = False, progress_leave: bool = False, scheduler: str = "auto", + keep_details: bool = False, ): """Run alert evaluation on this list of molecule and return the full dataframe @@ -155,6 +167,7 @@ def __call__( progress: whether to show progress or not. progress_leave: whether to leave the progress bar or not. scheduler: which scheduler to use. If "auto", will use "processes" if `len(mols) > 500` else "threads". + keep_details: whether to keep the details of the evaluation or not. """ if scheduler == "auto": @@ -164,13 +177,13 @@ def __call__( scheduler = "threads" results = dm.parallelized( - self._evaluate, + functools.partial(self._evaluate, keep_details=keep_details), mols, progress=progress, n_jobs=n_jobs, scheduler=scheduler, tqdm_kwargs=dict( - desc="Filter by alerts", + desc="Common alerts filtering", leave=progress_leave, ), ) diff --git a/medchem/structural/_nibr.py b/medchem/structural/_nibr.py index c832806..2767546 100644 --- a/medchem/structural/_nibr.py +++ b/medchem/structural/_nibr.py @@ -116,7 +116,7 @@ def _evaluate( result["pass_filter"] = True if keep_details: - result["details"] = result_entries.to_dict() + result["details"] = result_entries.to_dict(orient="records") return result @@ -137,6 +137,7 @@ def __call__( progress: whether to show progress or not. progress_leave: whether to leave the progress bar or not. scheduler: which scheduler to use. If "auto", will use "processes" if `len(mols) > 500` else "threads". + keep_details: whether to keep the details of the evaluation or not. """ if scheduler == "auto": diff --git a/medchem/structural/demerits/__init__.py b/medchem/structural/lilly_demerits/__init__.py similarity index 100% rename from medchem/structural/demerits/__init__.py rename to medchem/structural/lilly_demerits/__init__.py diff --git a/medchem/structural/demerits/_demerits.py b/medchem/structural/lilly_demerits/_demerits.py similarity index 100% rename from medchem/structural/demerits/_demerits.py rename to medchem/structural/lilly_demerits/_demerits.py diff --git a/medchem/structural/demerits/_lilly.py b/medchem/structural/lilly_demerits/_lilly.py similarity index 100% rename from medchem/structural/demerits/_lilly.py rename to medchem/structural/lilly_demerits/_lilly.py diff --git a/tests/test_structural.py b/tests/test_structural.py index b734af8..53971f6 100644 --- a/tests/test_structural.py +++ b/tests/test_structural.py @@ -3,7 +3,7 @@ import medchem as mc import datamol as dm -from medchem.structural.demerits import LillyDemeritsFilters +from medchem.structural.lilly_demerits import LillyDemeritsFilters def test_common_alerts(): @@ -14,7 +14,7 @@ def test_common_alerts(): data["mol"] = data["smiles"].apply(dm.to_mol) - results = alerts(mols=data["mol"].tolist(), n_jobs=-1, scheduler="auto") + results = alerts(mols=data["mol"].tolist(), n_jobs=-1, scheduler="auto", keep_details=True) assert results["pass_filter"].sum() == 44 assert results["reasons"].unique().tolist() == [ @@ -26,7 +26,7 @@ def test_common_alerts(): "gte_10_carbon_sb_chain;gte_8_CF2_or_CH2", ] - assert set(results.columns.tolist()) == {"mol", "pass_filter", "status", "reasons"} + assert set(results.columns.tolist()) == {"mol", "pass_filter", "status", "reasons", "details"} def test_common_alerts_invalid(): @@ -84,7 +84,7 @@ def test_nibr_invalid(): } -def test_demerits(): +def test_lilly_demerits(): dfilters = LillyDemeritsFilters() data = dm.data.solubility() @@ -104,7 +104,7 @@ def test_demerits(): } -def test_demerits_config(): +def test_lilly_demerits_config(): test_config = { "output": "test", "min_atoms": 7, From 6863c6730484b87acbb57679b1b90ed5348a22ae Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Sun, 9 Jul 2023 16:56:45 -0400 Subject: [PATCH 22/31] add two cli commands --- docs/tutorials/Structural_Filters.ipynb | 2 +- medchem/cli.py | 72 ++++++++++++++++++++++--- medchem/structural/_nibr.py | 11 ++-- tests/test_cli.py | 67 +++++++++++++++++++++-- tests/test_structural.py | 14 ++++- 5 files changed, 146 insertions(+), 20 deletions(-) diff --git a/docs/tutorials/Structural_Filters.ipynb b/docs/tutorials/Structural_Filters.ipynb index ca4074f..a3547d4 100644 --- a/docs/tutorials/Structural_Filters.ipynb +++ b/docs/tutorials/Structural_Filters.ipynb @@ -1983,7 +1983,7 @@ " n_jobs=-1,\n", " progress=True,\n", " progress_leave=True,\n", - " scheduler=\"auto\",\n", + " scheduler=\"threads\",\n", " keep_details=True,\n", ")\n", "\n", diff --git a/medchem/cli.py b/medchem/cli.py index 1272500..812bf86 100644 --- a/medchem/cli.py +++ b/medchem/cli.py @@ -1,16 +1,76 @@ import typer +from loguru import logger + +import medchem as mc +import datamol as dm +import pandas as pd + app = typer.Typer(help="The Medchem CLI", add_completion=False) -@app.command(help="A dummy CLI #1") -def dummy1(): - print("dummy1") +@app.command(help="Filtering for common structural alerts") +def common_alerts( + input: str = typer.Argument(..., help="Input file path (CSV, Excel, Parquet, JSON, SDF)"), + output: str = typer.Argument(..., help="Output file path (CSV, Excel, Parquet, JSON, SDF)"), + smiles_column: str = typer.Option("smiles", help="The name of the column containing the SMILES"), + n_jobs: int = typer.Option(-1, help="Number of jobs to use"), + scheduler: str = typer.Option("auto", help="The scheduler to use"), + keep_details: bool = typer.Option(False, help="Whether to keep the details or not"), + progress: bool = typer.Option(True, help="Whether to show progress or not"), + progress_leave: bool = typer.Option(False, help="Whether to leave the progress bar or not"), +): + logger.info(f"Loading data from {input}") + data = dm.io.open_df(input) + + logger.info(f"Filtering {data.shape[0]} molecules") + filters_obj = mc.structural.CommonAlertsFilters() + + results = filters_obj( + mols=data[smiles_column].tolist(), + n_jobs=n_jobs, + scheduler=scheduler, + keep_details=keep_details, + progress=progress, + progress_leave=progress_leave, + ) + + results = pd.concat([data[[smiles_column]], results.drop(columns="mol")], axis=1) + + logger.info(f"Saving results to {output}") + dm.io.save_df(results, output) + + +@app.command(help="Filtering with NIBR structural alerts") +def nibr_filters( + input: str = typer.Argument(..., help="Input file path (CSV, Excel, Parquet, JSON, SDF)"), + output: str = typer.Argument(..., help="Output file path (CSV, Excel, Parquet, JSON, SDF)"), + smiles_column: str = typer.Option("smiles", help="The name of the column containing the SMILES"), + n_jobs: int = typer.Option(-1, help="Number of jobs to use"), + scheduler: str = typer.Option("threads", help="The scheduler to use"), + keep_details: bool = typer.Option(False, help="Whether to keep the details or not"), + progress: bool = typer.Option(True, help="Whether to show progress or not"), + progress_leave: bool = typer.Option(False, help="Whether to leave the progress bar or not"), +): + logger.info(f"Loading data from {input}") + data = dm.io.open_df(input) + + logger.info(f"Filtering {data.shape[0]} molecules") + filters_obj = mc.structural.NIBRFilters() + + results = filters_obj( + mols=data[smiles_column].tolist(), + n_jobs=n_jobs, + scheduler=scheduler, + keep_details=keep_details, + progress=progress, + progress_leave=progress_leave, + ) + results = pd.concat([data[[smiles_column]], results.drop(columns="mol")], axis=1) -@app.command(help="A dummy CLI #2") -def dummy2(): - print("dummy2") + logger.info(f"Saving results to {output}") + dm.io.save_df(results, output) if __name__ == "__main__": diff --git a/medchem/structural/_nibr.py b/medchem/structural/_nibr.py index 2767546..189b19d 100644 --- a/medchem/structural/_nibr.py +++ b/medchem/structural/_nibr.py @@ -126,7 +126,7 @@ def __call__( n_jobs: Optional[int] = -1, progress: bool = False, progress_leave: bool = False, - scheduler: str = "auto", + scheduler: str = "threads", keep_details: bool = False, ): """Run alert evaluation on this list of molecule and return the full dataframe @@ -136,16 +136,11 @@ def __call__( n_jobs: number of jobs to run in parallel. progress: whether to show progress or not. progress_leave: whether to leave the progress bar or not. - scheduler: which scheduler to use. If "auto", will use "processes" if `len(mols) > 500` else "threads". + scheduler: which scheduler to use. The `processes` scheduler works but is very + inefficient due to RDKit Catalog serialization which tends to be very slow. keep_details: whether to keep the details of the evaluation or not. """ - if scheduler == "auto": - if len(mols) > 500: - scheduler = "processes" # pragma: no cover - else: - scheduler = "threads" - results = dm.parallelized( functools.partial(self._evaluate, keep_details=keep_details), mols, diff --git a/tests/test_cli.py b/tests/test_cli.py index 123494f..bf352aa 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -1,5 +1,7 @@ from typer.testing import CliRunner +import datamol as dm + from medchem.cli import app runner = CliRunner() @@ -10,9 +12,68 @@ def test_cli(): assert result.exit_code == 0 -def test_dummy(): - result = runner.invoke(app, ["dummy1"]) +def test_common_alerts(tmp_path): + input_path = str(tmp_path / "input.csv") + output_path = str(tmp_path / "output.csv") + + # Load a dataset + data = dm.data.solubility() + data = data.sample(50, random_state=20) + + data.to_csv(input_path, index=False) + + result = runner.invoke( + app, + [ + "common-alerts", + str(input_path), + str(output_path), + "--smiles-column", + "smiles", + "--keep-details", + ], + ) assert result.exit_code == 0 - result = runner.invoke(app, ["dummy2"]) + # Check the output + results = dm.io.open_df(output_path) + assert set(results.columns) == {"smiles", "pass_filter", "status", "reasons", "details"} + assert results.shape[0] == 50 + + +def test_nibr_filters(tmp_path): + input_path = str(tmp_path / "input.csv") + output_path = str(tmp_path / "output.csv") + + # Load a dataset + data = dm.data.solubility() + data = data.sample(50, random_state=20) + + data.to_csv(input_path, index=False) + + result = runner.invoke( + app, + [ + "nibr-filters", + str(input_path), + str(output_path), + "--smiles-column", + "smiles", + "--keep-details", + ], + ) assert result.exit_code == 0 + + # Check the output + results = dm.io.open_df(output_path) + assert set(results.columns) == { + "smiles", + "pass_filter", + "reasons", + "severity", + "status", + "n_covalent_motif", + "special_mol", + "details", + } + assert results.shape[0] == 50 diff --git a/tests/test_structural.py b/tests/test_structural.py index 53971f6..936ae93 100644 --- a/tests/test_structural.py +++ b/tests/test_structural.py @@ -14,7 +14,12 @@ def test_common_alerts(): data["mol"] = data["smiles"].apply(dm.to_mol) - results = alerts(mols=data["mol"].tolist(), n_jobs=-1, scheduler="auto", keep_details=True) + results = alerts( + mols=data["mol"].tolist(), + n_jobs=-1, + scheduler="processes", + keep_details=True, + ) assert results["pass_filter"].sum() == 44 assert results["reasons"].unique().tolist() == [ @@ -50,7 +55,12 @@ def test_nibr(): data = dm.data.solubility() data = data.iloc[:50] - results = nibr_filters(mols=data["mol"].tolist(), n_jobs=-1, scheduler="auto", keep_details=True) + results = nibr_filters( + mols=data["mol"].tolist(), + n_jobs=-1, + scheduler="processes", + keep_details=True, + ) assert results["pass_filter"].sum() == 49 assert set(results.columns.tolist()) == { From dd0c1f4362c36c8bc3617c88d10852832b3263fd Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Sun, 9 Jul 2023 17:07:14 -0400 Subject: [PATCH 23/31] cli doc --- README.md | 7 ------ docs/cli.md | 15 ++++++++++++ docs/index.md | 66 ++------------------------------------------------- mkdocs.yml | 1 + 4 files changed, 18 insertions(+), 71 deletions(-) create mode 100644 docs/cli.md diff --git a/README.md b/README.md index 2267c2d..07b2b8f 100644 --- a/README.md +++ b/README.md @@ -12,13 +12,6 @@ Medchem is a Python library that proposes multiple molecular medchem filters to a wide range of use cases relevant in a drug discovery context. -- ✅ xxxx -- 🐍 xxxx -- ⚗️ xxxx -- 🧠 xxxx -- ⮔ xxxx -- 🔌 xxxx - ## Installation ```bash diff --git a/docs/cli.md b/docs/cli.md new file mode 100644 index 0000000..ed26b85 --- /dev/null +++ b/docs/cli.md @@ -0,0 +1,15 @@ +# Medchem CLI + +Medchem proposes CLI commands in order to filter directly from file paths. CSV, JSON, Excel, Parquet and SDF are supported. + +Available commands can be found with: + +```bash +medchem --help +``` + +To know more about one specific command: + +```bash +medchem common-alerts --help +``` diff --git a/docs/index.md b/docs/index.md index 05025c0..adabe51 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,73 +1,11 @@ # Medchem -Package for applying common medchem filters to a dataset of molecules. +_Medchem - Molecular filtering for drug discovery._ -## Summary - -This package contains various implementation of medchem rules collected from various sources that may be applied as filters on generated or screened molecules. It centralizes all common filters used at Valence Discovery. - -Although the list is as exhaustive as possible, filtering rules mainly depends on the drug discovery programs. - -It should be noted that **systematically applying all filters is to be avoided**. For example, "PAINS C" filters are usually not very relevant, another example is the filtering are very strict and could flag important substructure for a project (example some ZBGs). +Medchem is a Python library that proposes multiple molecular medchem filters to a wide range of use cases relevant in a drug discovery context. ## Installation ```bash micromamba install -c conda-forge medchem ``` - -## Available Filters - -The following filters are available: - -### **Eli Lilly Medchem Rules** - -These are python binding of the implementation of Eli Lilly Medchem Rules published under "Rules for Identifying Potentially Reactive or Promiscuous Compounds" by Robert F. Bruns and Ian W. Watson, J. Med. Chem. 2012, 55, 9763--9772 as ACS Author choice, i.e. open access at [doi 10.1021/jm301008n](https://doi.org/10.1021/jm301008n). - -These rules are used in `medchem.filter.lilly_demerit_filter` function and are the main offering of this package. - -### NIBR filters - -Rules used by Novartis to build their new screening deck. The rules are published under "Evolution of Novartis' small molecule screening deck design" by Schuffenhauer, A. et al. J. Med. Chem. (2020), . - -These rules are used in lead filtering as `medchem.filter.lead.screening_filter` - -### Bredt filters - -These are filters based on the Bredt's rules for unstable chemistry.There are used in lead filtering as `medchem.filter.lead.bredt_filter`. - -### Alerts filters - -These are alerts rules from the ChEMBL database curation scheme and public litterature on promiscuous compounds on commons assays. The rule set are: - -| name | # alerts | source | -| :---------------------------- | -------: | :---------- | -| Glaxo | 55 | ChEMBL | -| Dundee | 105 | ChEMBL | -| BMS | 180 | ChEMBL | -| PAINS | 481 | ChEMBL | -| SureChEMBL | 166 | ChEMBL | -| MLSMR | 116 | ChEMBL | -| Inpharmatica | 91 | ChEMBL | -| LINT | 57 | ChEMBL | -| Alarm-NMR | 75 | Litterature | -| AlphaScreen-Hitters | 6 | Litterature | -| GST-Hitters | 34 | Litterature | -| HIS-Hitters | 19 | Litterature | -| LuciferaseInhibitor | 3 | Litterature | -| DNABinder | 78 | Litterature | -| Chelator | 55 | Litterature | -| Frequent-Hitter | 15 | Litterature | -| Electrophilic | 119 | Litterature | -| Genotoxic-Carcinogenicity | 117 | Litterature | -| LD50-Oral | 20 | Litterature | -| Non-Genotoxic-Carcinogenicity | 22 | Litterature | -| Reactive-Unstable-Toxic | 335 | Litterature | -| Skin | 155 | Litterature | -| Toxicophore | 154 | Litterature | - -There are used in lead filtering through `medchem.filter.lead.alert_filter` - -### Generic filters - -These are generic filters based on specific molecular property such as number of atoms, size of macrocycles, etc. They are available at `medchem.filter.generic` diff --git a/mkdocs.yml b/mkdocs.yml index 67f5971..b8a42c7 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -14,6 +14,7 @@ strict: true nav: - Overview: index.md + - CLI: cli.md - Tutorials: - Medchem Rules: tutorials/Medchem_Rules.ipynb - Structural Filters: tutorials/Structural_Filters.ipynb From b01018306a6eba59568f25e70c8de62a9ff995bf Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Sun, 9 Jul 2023 18:19:21 -0400 Subject: [PATCH 24/31] functional api --- docs/api/medchem.functional.md | 12 + medchem/__init__.py | 2 + medchem/api.py | 517 ------------------------------- medchem/complexity/_filter.py | 8 +- medchem/functional/__init__.py | 10 + medchem/functional/_api.py | 541 +++++++++++++++++++++++++++++++++ medchem/functional/_generic.py | 378 +++++++++++++++++++++++ mkdocs.yml | 1 + tests/test_functional_api.py | 212 +++++++++++++ 9 files changed, 1163 insertions(+), 518 deletions(-) create mode 100644 docs/api/medchem.functional.md delete mode 100644 medchem/api.py create mode 100644 medchem/functional/__init__.py create mode 100644 medchem/functional/_api.py create mode 100644 medchem/functional/_generic.py create mode 100644 tests/test_functional_api.py diff --git a/docs/api/medchem.functional.md b/docs/api/medchem.functional.md new file mode 100644 index 0000000..313548f --- /dev/null +++ b/docs/api/medchem.functional.md @@ -0,0 +1,12 @@ +# `medchem.functional` + +::: medchem.functional.alert_filter +::: medchem.functional.nibr_filter +::: medchem.functional.catalog_filter +::: medchem.functional.chemical_group_filter +::: medchem.functional.rules_filter +::: medchem.functional.complexity_filter +::: medchem.functional.bredt_filter +::: medchem.functional.molecular_graph_filter +::: medchem.functional.lilly_demerit_filter +::: medchem.functional.protecting_groups_filter diff --git a/medchem/__init__.py b/medchem/__init__.py index 2421627..a8ea7dd 100644 --- a/medchem/__init__.py +++ b/medchem/__init__.py @@ -25,6 +25,7 @@ "complexity": "medchem.complexity", "rules": "medchem.rules", "structural": "medchem.structural", + "functional": "medchem.functional", } @@ -64,3 +65,4 @@ def __dir__(): from . import complexity from . import rules from . import structural + from . import functional diff --git a/medchem/api.py b/medchem/api.py deleted file mode 100644 index 1549e12..0000000 --- a/medchem/api.py +++ /dev/null @@ -1,517 +0,0 @@ -"""High level API TODO previously in `medchem.filters.lead` -""" - -# from typing import Iterable -# from typing import List -# from typing import Optional -# from typing import Dict -# from typing import Union -# from typing import Any -# from typing import Sequence - -# import os -# import numpy as np -# import datamol as dm - -# from functools import partial -# from loguru import logger -# from rdkit.Chem.rdfiltercatalog import FilterCatalog - -# from medchem import demerits -# from medchem.alerts import AlertFilters -# from medchem.alerts import NovartisFilters -# from medchem.catalog import NamedCatalogs -# from medchem.catalog import merge_catalogs -# from medchem.complexity.complexity_filter import ComplexityFilter -# from medchem.groups import ChemicalGroup -# from medchem.rules import RuleFilters - - -# def alert_filter( -# mols: Iterable[Union[str, dm.Mol]], -# alerts: List[str], -# alerts_db: Optional[os.PathLike] = None, -# n_jobs: Optional[int] = 1, -# rule_dict: Dict = None, -# return_idx: bool = False, -# ): -# """Filter a dataset of molecules, based on common structural alerts and specific rules. - -# Arguments: -# mols: List of molecules to filter -# alerts: List of alert collections to screen for. See AlertFilters.list_default_available_alerts() -# alerts_db: Path to the alert file name. -# The internal default file (alerts.csv) will be used if not provided -# n_jobs: Number of cpu to use -# rule_dict: Dictionary with additional rules to apply during the filtering. -# For example, such dictionary for drug-like compounds would look like this: -# >>> rule_dict -# {"MW": [0, 500], "LogP": [-0.5, 5], "HBD": [0, 5], "HBA": [0, 10], "TPSA": [0, 150]} -# return_idx: Whether to return the filtered index - -# Returns: -# filtered_mask: boolean array (or index array) where true means -# the molecule IS OK (not found in the alert catalog). -# """ - -# custom_filters = AlertFilters(alerts_set=alerts, alerts_db=alerts_db) -# df = custom_filters(mols, n_jobs=n_jobs, progress=False) -# df = df[df.status != "Exclude"] -# if rule_dict is not None and len(rule_dict) > 0: -# df = df[ -# (df.MW.between(*rule_dict.get("MW", [-np.inf, np.inf]))) -# & (df.LogP.between(*rule_dict.get("LogP", [-np.inf, np.inf]))) -# & (df.HBD.between(*rule_dict.get("HBD", [-np.inf, np.inf]))) -# & (df.HBA.between(*rule_dict.get("HBA", [-np.inf, np.inf]))) -# & (df.TPSA.between(*rule_dict.get("TPSA", [-np.inf, np.inf]))) -# ] - -# filtered_idx = df.index.values.astype(int) -# filtered_mask = np.zeros(len(mols), dtype=bool) -# filtered_mask[filtered_idx] = True -# if return_idx: -# return filtered_idx -# return filtered_mask - - -# def screening_filter( -# mols: Iterable[Union[str, dm.Mol]], -# n_jobs: Optional[int] = None, -# max_severity: int = 10, -# return_idx: bool = False, -# ): -# """ -# Filter a set of molecules based on novartis screening deck curation process -# Schuffenhauer, A. et al. Evolution of Novartis' small molecule screening deck design, J. Med. Chem. (2020) -# DOI. https://dx.doi.org/10.1021/acs.jmedchem.0c01332 - -# !!! note -# The severity argument corresponds to the accumulated severity for a compounds accross all pattern in the -# catalog. -# Args: -# mols: list of input molecules -# n_jobs: number of parallel job to run. Sequential by default -# max_severity: maximum severity allowed. Default is <10 -# return_idx: Whether to return the filtered index - -# Returns: -# filtered_mask: boolean array (or index array) where true means the molecule -# IS NOT REJECTED (i.e not found in the alert catalog). - -# """ - -# filt_obj = NovartisFilters() -# df = filt_obj(mols, n_jobs=n_jobs) -# df = df[(df.status != "Exclude") & (df.severity < max_severity)] -# filtered_idx = df.index.values -# filtered_mask = np.zeros(len(mols), dtype=bool) -# filtered_mask[filtered_idx] = True -# if return_idx: -# return filtered_idx -# return filtered_mask - - -# def catalog_filter( -# mols: Sequence[Union[str, dm.Mol]], -# catalogs: List[Union[str, FilterCatalog]], -# return_idx: bool = False, -# n_jobs: Optional[int] = None, -# progress: bool = False, -# scheduler: str = "processes", -# batch_size: int = 100, -# ): -# """Filter a list of compounds according to catalog of structures alerts and patterns - -# Args: -# mols: list of input molecules -# catalogs: list of catalogs (name or FilterCatalog) -# return_idx: whether to return index or a boolean mask -# n_jobs: number of parallel job to run. Sequential by default -# progress: whether to show progress bar -# scheduler: joblib scheduler to use -# batch_size: batch size for parallel processing. Note that `batch_size` should be -# increased if the number of used CPUs gets very large. - -# Returns: -# filtered_mask: boolean array (or index array) where true means the molecule is not found in the catalog. -# """ - -# # Build and merge the catalogs -# named_catalogs = [] -# for catalog in catalogs: -# if catalog == "bredt": -# logger.warning( -# "It is not recommended to use the 'bredt' catalog here. Please use the `bredt_filter` function instead or be sure to use kekulized molecules as inputs." -# ) -# if catalog == "nibr": -# raise ValueError( -# "You shouldn't use the nibr catalog here. Please use the `screening_filter` function instead." -# ) -# elif catalog == "bredt-kekulized": -# catalog = "bredt" -# if isinstance(catalog, str): -# catalog_fn = getattr(NamedCatalogs, catalog, None) -# if catalog_fn is None: -# logger.warning(f"Catalog {catalog} not found. Ignoring.") -# else: -# named_catalogs.append(catalog_fn()) -# else: -# named_catalogs.append(catalog) -# if len(named_catalogs) < 1: -# raise ValueError("Please provide at least one catalog !") - -# catalog = merge_catalogs(*named_catalogs) - -# # Serialize the catalog -# catalog_state = catalog.Serialize() - -# def _fn(mols_chunk): -# # Init the catalog from the serialized state -# catalog = FilterCatalog(catalog_state) - -# # To mols -# mols_chunk = [dm.to_mol(m) for m in mols_chunk] - -# # Match the mols -# return [catalog.HasMatch(m) for m in mols_chunk] - -# # Batch the inputs -# n_batches = len(mols) // batch_size -# n_batches = max(n_batches, 1) -# mols_batches = np.array_split(mols, n_batches) - -# # Run the matching -# toxic = dm.parallelized( -# _fn, -# mols_batches, -# n_jobs=n_jobs, -# scheduler=scheduler, -# progress=progress, -# tqdm_kwargs=dict(desc="Match", leave=True), -# ) - -# # Flatten the results -# toxic = [item for sublist in toxic for item in sublist] - -# filtered_idx = [i for i, bad in enumerate(toxic) if not bad] -# if return_idx: -# return np.asarray(filtered_idx) -# return np.bitwise_not(toxic) - - -# def chemical_group_filter( -# mols: Iterable[Union[str, dm.Mol]], -# chemical_group: ChemicalGroup, -# return_idx: bool = False, -# n_jobs: Optional[int] = None, -# progress: bool = False, -# scheduler: str = "threads", -# ): -# """Filter a list of compounds according to a chemical group instance. - -# !!! note -# This function will return the list of molecules that DO NOT match the chemical group - -# Args: -# mols: list of input molecules -# chemical_group: a chemical group instance with the required functional groups to use. -# return_idx: whether to return index or a boolean mask -# n_jobs: number of parallel job to run. Sequential by default -# progress: whether to show progress bar -# scheduler: joblib scheduler to use - -# Returns: -# filtered_mask: boolean array (or index array) where true means the molecule DOES NOT MATCH the groups. -# """ - -# if isinstance(chemical_group, ChemicalGroup): -# chemical_group = chemical_group.get_catalog() -# return catalog_filter( -# mols, -# [chemical_group], -# return_idx=return_idx, -# n_jobs=n_jobs, -# progress=progress, -# scheduler=scheduler, -# ) - - -# def rules_filter( -# mols: Iterable[Union[str, dm.Mol]], -# rules: Union[List[Any], RuleFilters], -# return_idx: bool = False, -# n_jobs: Optional[int] = None, -# progress: bool = False, -# scheduler: str = "processes", -# ): -# """Filter a list of compounds according to a predefined set of rules - -# Args: -# mols: list of input molecules -# rules: list of rules to apply to the input molecules. -# return_idx: whether to return index or a boolean mask -# n_jobs: number of parallel job to run. Sequential by default -# progress: whether to show progress bar -# scheduler: joblib scheduler to use - -# Returns: -# filtered_mask: boolean array (or index array) where true means the molecule MATCH the rules. -# """ - -# if not isinstance(rules, RuleFilters): -# rules = RuleFilters(rules, precompute_props=True) -# df = rules(mols, n_jobs=n_jobs, progress=progress, scheduler=scheduler) -# filtered_df = df.all(axis=1, bool_only=True) -# if return_idx: -# return filtered_df.index.values[filtered_df.values] -# return filtered_df.values - - -# def complexity_filter( -# mols: Iterable[Union[str, dm.Mol]], -# complexity_metric: str = "bertz", -# threshold_stats_file: str = "zinc_15_available", -# limit: str = "99", -# return_idx: bool = False, -# n_jobs: Optional[int] = None, -# progress: bool = False, -# scheduler: str = "processes", -# ): -# """Filter a list of compounds according to a chemical group instance - -# Args: -# mols: list of input molecules -# complexity_metric: complexity metric to use -# Use `ComplexityFilter.list_default_available_filters` to list default filters. -# The following complexity metrics are supported by default -# * "bertz": bertz complexity index -# * "sas": synthetic accessibility score (`zinc_15_available` only) -# * "qed": qed score (`zinc_15_available` only) -# * "clogp": clogp for how greasy a molecule is compared to other in the same mw range (`zinc_15_available` only) -# * "whitlock": whitlock complexity index -# * "barone": barone complexity index -# * "smcm": synthetic and molecular complexity -# * "twc": total walk count complexity (`zinc_15_available` only) -# threshold_stats_file: complexity threshold statistic origin to use -# limit: complexity outlier percentile to use -# return_idx: whether to return index or a boolean mask -# n_jobs: number of parallel job to run. Sequential by default -# progress: whether to show progress bar -# scheduler: joblib scheduler to use - -# Also see: -# medchem.complexity.ComplexityFilter -# Returns: -# filtered_mask: boolean array (or index array) where true means the molecule MATCH the rules. -# """ - -# cf = ComplexityFilter( -# limit=limit, -# complexity_metric=complexity_metric, -# threshold_stats_file=threshold_stats_file, -# ) - -# mols = dm.parallelized( -# dm.to_mol, -# mols, -# n_jobs=n_jobs, -# progress=progress, -# tqdm_kwargs=dict(desc="To mol", leave=False), -# ) - -# not_complex = dm.parallelized( -# cf, -# mols, -# n_jobs=n_jobs, -# scheduler=scheduler, -# progress=progress, -# tqdm_kwargs=dict(desc="Complexity Eval", leave=False), -# ) -# not_complex = np.asarray(not_complex) -# filtered_idx = [i for i, good in enumerate(not_complex) if good] -# if return_idx: -# return np.asarray(filtered_idx) -# return not_complex - - -# def bredt_filter( -# mols: Sequence[Union[str, dm.Mol]], -# return_idx: bool = False, -# n_jobs: Optional[int] = None, -# progress: bool = False, -# scheduler: str = "threads", -# batch_size: int = 100, -# ): -# """Filter a list of compounds according to Bredt's rules -# https://en.wikipedia.org/wiki/Bredt%27s_rule - -# Args: -# mols: list of input molecules -# return_idx: whether to return index or a boolean mask -# n_jobs: number of parallel job to run. Sequential by default -# progress: whether to show progress bar -# scheduler: joblib scheduler to use -# batch_size: batch size for parallel processing. Note that `batch_size` should be -# increased if the number of used CPUs gets very large. - -# Returns: -# filtered_mask: boolean array (or index array) where true means the molecule is not toxic. -# """ - -# mols = dm.parallelized( -# partial(dm.to_mol, kekulize=True), -# mols, -# n_jobs=n_jobs, -# progress=progress, -# tqdm_kwargs=dict(desc="To mol", leave=False), -# ) - -# return catalog_filter( -# mols=mols, -# catalogs=["bredt-kekulized"], # already kekulized mols -# return_idx=return_idx, -# n_jobs=n_jobs, -# progress=progress, -# scheduler=scheduler, -# batch_size=batch_size, -# ) - - -# def molecular_graph_filter( -# mols: Iterable[Union[str, dm.Mol]], -# max_severity: int = 5, -# return_idx: bool = False, -# n_jobs: Optional[int] = None, -# progress: bool = False, -# scheduler: str = "threads", -# ): -# """Filter a list of compounds according to unstable molecular graph filter list. - -# This list was obtained from observation around The disallowed graphs are: - -# * K3,3 or K2,4 structure -# * Cone of P4 or K4 with 3-ear -# * Node in more than one ring of length 3 or 4 - -# Args: -# mols: list of input molecules -# max_severity: maximum acceptable severity (1-10). Default is <5 -# return_idx: whether to return index or a boolean mask -# n_jobs: number of parallel job to run. Sequential by default -# progress: whether to show progress bar -# scheduler: joblib scheduler to use - -# Returns: -# filtered_mask: boolean array (or index array) where true means the molecule is not toxic. -# """ -# if max_severity is None: -# max_severity = 5 -# catalog = NamedCatalogs.unstable_graph(max_severity=max_severity) -# if isinstance(mols[0], str): -# mols = dm.parallelized( -# dm.to_mol, -# mols, -# n_jobs=n_jobs, -# progress=progress, -# tqdm_kwargs=dict(desc="To mol", leave=False), -# ) -# toxic = dm.parallelized( -# catalog.HasMatch, -# mols, -# n_jobs=n_jobs, -# scheduler=scheduler, -# progress=progress, -# tqdm_kwargs=dict(desc="Match", leave=False), -# ) -# filtered_idx = [i for i, bad in enumerate(toxic) if not bad] -# if return_idx: -# return filtered_idx -# return np.bitwise_not(toxic) - - -# def lilly_demerit_filter( -# smiles: Iterable[str], -# max_demerits: Optional[int] = 160, -# return_idx: bool = False, -# n_jobs: Optional[int] = None, -# progress: bool = False, -# **kwargs, -# ): -# """Run Lilly demerit filtering on current list of molecules - -# Args: -# smiles: list of input molecules as smiles preferably -# max_demerits: Cutoff to reject molecules Defaults to 160. -# return_idx: whether to return a mask or a list of valid indexes -# progress: whether to show progress bar -# kwargs: parameters specific to the `demerits.score` function - -# Returns: -# filtered_mask: boolean array (or index array) where true means the molecule is ok. -# """ - -# if not isinstance(smiles[0], str): -# # canonicalize the smiles and ensure the input is smiles and not Chem.Mol -# def canonical_smi(smi): -# mol = dm.to_mol(smi) -# if mol is not None: -# return dm.to_smiles(mol) -# return mol - -# smiles = dm.parallelized( -# canonical_smi, -# smiles, -# n_jobs=n_jobs, -# progress=progress, -# tqdm_kwargs=dict(desc="Canonical Smiles", leave=False), -# ) - -# df = demerits.batch_score(smiles, n_jobs=n_jobs, progress=progress, **kwargs) -# df = df[(~df.rejected) & ((df.demerit_score.isna()) | (df.demerit_score < max_demerits))] - -# filtered_idx = df["ID"].values.astype(int) -# filtered_mask = np.zeros(len(smiles), dtype=bool) -# filtered_mask[filtered_idx] = True -# if return_idx: -# return filtered_idx -# return filtered_mask - - -# def protecting_groups_filter( -# mols: Iterable[Union[str, dm.Mol]], -# return_idx: bool = False, -# protecting_groups: str = [ -# "fmoc", -# "tert-butoxymethyl", -# "tert-butyl carbamate", -# "tert-butyloxycarbonyl", -# ], -# n_jobs: Optional[int] = None, -# progress: bool = False, -# scheduler: str = "threads", -# ): -# """Filter a list of compounds according to match to known protecting groups. -# Note that is a syntaxic sugar for calling chemical_group_filter with the protecting groups subset - -# Args: -# mols: list of input molecules -# protecting_groups: type of protection group to consider if not provided, will use all (not advised) -# return_idx: whether to return index or a boolean mask -# n_jobs: number of parallel job to run. Sequential by default -# progress: whether to show progress bar -# scheduler: joblib scheduler to use - -# Returns: -# filtered_mask: boolean array (or index array) where true means the molecule DOES NOT MATCH the groups. -# """ - -# chemical_group = ChemicalGroup("protecting_groups") -# chemical_group = chemical_group.filter(protecting_groups) -# return chemical_group_filter( -# mols, -# chemical_group, -# return_idx=return_idx, -# n_jobs=n_jobs, -# progress=progress, -# scheduler=scheduler, -# ) diff --git a/medchem/complexity/_filter.py b/medchem/complexity/_filter.py index 03803d5..617d6b8 100644 --- a/medchem/complexity/_filter.py +++ b/medchem/complexity/_filter.py @@ -1,4 +1,5 @@ from typing import Optional +from typing import Union import functools @@ -114,7 +115,7 @@ def load_threshold_stats_file(cls, path: Optional[str] = None): data = pd.read_csv(path) return data - def __call__(self, mol: dm.Mol): + def __call__(self, mol: Union[dm.Mol, str]): """ Check whether the input structure is too complex given this instance of the complexity filter Return False is the molecule is too complex, else True @@ -122,8 +123,13 @@ def __call__(self, mol: dm.Mol): Args: mol: input molecule """ + + if isinstance(mol, str): + mol = dm.to_mol(mol) + mw = dm.descriptors.mw(mol) ind = np.digitize(mw, self.filter_selection_df["mw_bins"], right=True) + fn = ComplexityFilter.COMPLEXITY_FNS[self.complexity_metric] threshold = self.filter_selection_df[self.complexity_metric].values[ind] diff --git a/medchem/functional/__init__.py b/medchem/functional/__init__.py new file mode 100644 index 0000000..f20f11d --- /dev/null +++ b/medchem/functional/__init__.py @@ -0,0 +1,10 @@ +from ._api import alert_filter +from ._api import nibr_filter +from ._api import catalog_filter +from ._api import chemical_group_filter +from ._api import rules_filter +from ._api import complexity_filter +from ._api import bredt_filter +from ._api import molecular_graph_filter +from ._api import lilly_demerit_filter +from ._api import protecting_groups_filter diff --git a/medchem/functional/_api.py b/medchem/functional/_api.py new file mode 100644 index 0000000..1879588 --- /dev/null +++ b/medchem/functional/_api.py @@ -0,0 +1,541 @@ +from typing import Iterable +from typing import List +from typing import Optional +from typing import Union +from typing import Any +from typing import Sequence + +import os +import numpy as np +import datamol as dm + +from functools import partial +from loguru import logger + +from rdkit.Chem import rdfiltercatalog # type: ignore + +from medchem.structural import CommonAlertsFilters +from medchem.structural import NIBRFilters +from medchem.catalogs import NamedCatalogs +from medchem.catalogs import merge_catalogs +from medchem.complexity import ComplexityFilter +from medchem.groups import ChemicalGroup +from medchem.rules import RuleFilters + + +def alert_filter( + mols: Sequence[Union[str, dm.Mol]], + alerts: List[str], + alerts_db: Optional[Union[os.PathLike, str]] = None, + n_jobs: Optional[int] = 1, + progress: bool = False, + return_idx: bool = False, +) -> np.ndarray: + """Filter a dataset of molecules, based on common structural alerts and specific rules. + + Arguments: + mols: List of molecules to filter + alerts: List of alert collections to screen for. See `CommonAlertsFilters.list_default_available_alerts()` + alerts_db: Path to the alert file name. + The internal default file (alerts.csv) will be used if not provided + n_jobs: Number of cpu to use + progress: Whether to show progress bar + return_idx: Whether to return the filtered index + + Returns: + filtered_mask: boolean array (or index array) where true means + the molecule IS OK (not found in the alert catalog). + """ + + custom_filters = CommonAlertsFilters(alerts_set=alerts, alerts_db_path=alerts_db) + results = custom_filters(mols, n_jobs=n_jobs, progress=progress) + + if return_idx: + return results.query("pass_filter == True").index.values.astype(int) + + return results["pass_filter"].to_numpy() + + +def nibr_filter( + mols: Sequence[Union[str, dm.Mol]], + n_jobs: Optional[int] = None, + max_severity: int = 10, + progress: bool = False, + return_idx: bool = False, +) -> np.ndarray: + """ + Filter a set of molecules based on novartis screening deck curation process + Schuffenhauer, A. et al. Evolution of Novartis' small molecule screening deck design, J. Med. Chem. (2020) + DOI. https://dx.doi.org/10.1021/acs.jmedchem.0c01332 + + !!! note + The severity argument corresponds to the accumulated severity for a compounds accross all pattern in the + catalog. + + Args: + mols: list of input molecules + n_jobs: number of parallel job to run. Sequential by default + max_severity: maximum severity allowed. Default is <10 + progress: whether to show progress bar + return_idx: Whether to return the filtered index + + Returns: + filtered_mask: boolean array (or index array) where true means the molecule + IS NOT REJECTED (i.e not found in the alert catalog). + + """ + + filt_obj = NIBRFilters() + results = filt_obj(mols, n_jobs=n_jobs, progress=progress) + + mask = results["severity"] < max_severity + + if return_idx: + return results[mask].index.values.astype(int) + + return mask.to_numpy() + + +def catalog_filter( + mols: Sequence[Union[str, dm.Mol]], + catalogs: List[Union[str, rdfiltercatalog.FilterCatalog]], + return_idx: bool = False, + n_jobs: Optional[int] = -1, + progress: bool = False, + progress_leave: bool = False, + scheduler: str = "processes", + batch_size: int = 100, +) -> np.ndarray: + """Filter a list of compounds according to catalog of structures alerts and patterns + + Args: + mols: list of input molecules + catalogs: list of catalogs (name or FilterCatalog) + return_idx: whether to return index or a boolean mask + n_jobs: number of parallel job to run. Sequential by default + progress: whether to show progress bar + progress_leave: whether to leave the progress bar after completion + scheduler: joblib scheduler to use + batch_size: batch size for parallel processing. Note that `batch_size` should be + increased if the number of used CPUs gets very large. + + Returns: + filtered_mask: boolean array (or index array) where true means the molecule is not found in the catalog. + """ + + # Build and merge the catalogs + named_catalogs = [] + for catalog in catalogs: + if catalog == "bredt": + logger.warning( + "It is not recommended to use the 'bredt' catalog here. Please use the `bredt_filter` function instead or be sure to use kekulized molecules as inputs." + ) + if catalog == "nibr": + raise ValueError( + "You shouldn't use the nibr catalog here. Please use the `screening_filter` function instead." + ) + elif catalog == "bredt-kekulized": + catalog = "bredt" + if isinstance(catalog, str): + catalog_fn = getattr(NamedCatalogs, catalog, None) + if catalog_fn is None: + logger.warning(f"Catalog {catalog} not found. Ignoring.") + else: + named_catalogs.append(catalog_fn()) + else: + named_catalogs.append(catalog) + + if len(named_catalogs) < 1: + raise ValueError("Please provide at least one catalog !") + + catalog = merge_catalogs(*named_catalogs) + + # Serialize the catalog + catalog_state = catalog.Serialize() + + def _fn(mols_chunk): + # Init the catalog from the serialized state + catalog = rdfiltercatalog.FilterCatalog(catalog_state) + + # To mols + mols_chunk = [dm.to_mol(m) for m in mols_chunk] + + # Match the mols + return [catalog.HasMatch(m) for m in mols_chunk] + + # Run the matching + toxic = dm.parallelized_with_batches( + _fn, + mols, + batch_size=batch_size, + n_jobs=n_jobs, + scheduler=scheduler, + progress=progress, + tqdm_kwargs=dict( + desc=f"Filtering with catalogs", + leave=progress_leave, + ), + flatten_results=True, + ) + + toxic = np.asarray(toxic) + filtered_idx = [i for i, bad in enumerate(toxic) if not bad] + + if return_idx: + return np.asarray(filtered_idx) + + return np.bitwise_not(toxic) + + +def chemical_group_filter( + mols: Sequence[Union[str, dm.Mol]], + chemical_group: ChemicalGroup, + return_idx: bool = False, + n_jobs: Optional[int] = None, + progress: bool = False, + progress_leave: bool = False, + scheduler: str = "threads", +) -> np.ndarray: + """Filter a list of compounds according to a chemical group instance. + + !!! note + This function will return the list of molecules that DO NOT match the chemical group + + Args: + mols: list of input molecules + chemical_group: a chemical group instance with the required functional groups to use. + return_idx: whether to return index or a boolean mask + n_jobs: number of parallel job to run. Sequential by default + progress: whether to show progress bar + progress_leave: whether to leave the progress bar after completion + scheduler: joblib scheduler to use + + Returns: + filtered_mask: boolean array (or index array) where true means the molecule DOES NOT MATCH the groups. + """ + + if isinstance(chemical_group, ChemicalGroup): + chemical_group = chemical_group.get_catalog() + + return catalog_filter( + mols, + [chemical_group], + return_idx=return_idx, + n_jobs=n_jobs, + progress=progress, + progress_leave=progress_leave, + scheduler=scheduler, + ) + + +def rules_filter( + mols: Sequence[Union[str, dm.Mol]], + rules: Union[List[Any], RuleFilters], + return_idx: bool = False, + n_jobs: Optional[int] = None, + progress: bool = False, + progress_leave: bool = False, + scheduler: str = "processes", +) -> np.ndarray: + """Filter a list of compounds according to a predefined set of rules + + Args: + mols: list of input molecules + rules: list of rules to apply to the input molecules. + return_idx: whether to return index or a boolean mask + n_jobs: number of parallel job to run. Sequential by default + progress: whether to show progress bar + scheduler: joblib scheduler to use + + Returns: + filtered_mask: boolean array (or index array) where true means the molecule MATCH the rules. + """ + + if not isinstance(rules, RuleFilters): + rules = RuleFilters(rules) + + results = rules( + mols, + n_jobs=n_jobs, + progress=progress, + progress_leave=progress_leave, + scheduler=scheduler, + ) + + mask = results["pass_all"].to_numpy() + + if return_idx: + return results[mask].index.to_numpy() + + return mask + + +def complexity_filter( + mols: Sequence[Union[str, dm.Mol]], + complexity_metric: str = "bertz", + threshold_stats_file: str = "zinc_15_available", + limit: str = "99", + return_idx: bool = False, + n_jobs: Optional[int] = None, + progress: bool = False, + progress_leave: bool = False, + scheduler: str = "processes", +) -> np.ndarray: + """Filter a list of compounds according to a chemical group instance + + Args: + mols: list of input molecules + complexity_metric: complexity metric to use + Use `ComplexityFilter.list_default_available_filters` to list default filters. + The following complexity metrics are supported by default + * "bertz": bertz complexity index + * "sas": synthetic accessibility score (`zinc_15_available` only) + * "qed": qed score (`zinc_15_available` only) + * "clogp": clogp for how greasy a molecule is compared to other in the same mw range (`zinc_15_available` only) + * "whitlock": whitlock complexity index + * "barone": barone complexity index + * "smcm": synthetic and molecular complexity + * "twc": total walk count complexity (`zinc_15_available` only) + threshold_stats_file: complexity threshold statistic origin to use + limit: complexity outlier percentile to use + return_idx: whether to return index or a boolean mask + n_jobs: number of parallel job to run. Sequential by default + progress: whether to show progress bar + progress_leave: whether to leave the progress bar after completion + scheduler: joblib scheduler to use + + Returns: + filtered_mask: boolean array (or index array) where true means the molecule MATCH the rules. + """ + + cf = ComplexityFilter( + limit=limit, + complexity_metric=complexity_metric, + threshold_stats_file=threshold_stats_file, + ) + + not_complex = dm.parallelized( + cf, + mols, + n_jobs=n_jobs, + scheduler=scheduler, + progress=progress, + tqdm_kwargs=dict( + desc="Complexity Evaluation", + leave=progress_leave, + ), + ) + not_complex = np.asarray(not_complex) + filtered_idx = [i for i, good in enumerate(not_complex) if good] + + if return_idx: + return np.asarray(filtered_idx) + + return not_complex + + +def bredt_filter( + mols: Sequence[Union[str, dm.Mol]], + return_idx: bool = False, + n_jobs: Optional[int] = None, + progress: bool = False, + progress_leave: bool = False, + scheduler: str = "threads", + batch_size: int = 100, +) -> np.ndarray: + """Filter a list of compounds according to Bredt's rules + https://en.wikipedia.org/wiki/Bredt%27s_rule + + Args: + mols: list of input molecules + return_idx: whether to return index or a boolean mask + n_jobs: number of parallel job to run. Sequential by default + progress: whether to show progress bar + progress_leave: whether to leave the progress bar after completion + scheduler: joblib scheduler to use + batch_size: batch size for parallel processing. Note that `batch_size` should be + increased if the number of used CPUs gets very large. + + Returns: + filtered_mask: boolean array (or index array) where true means the molecule is not toxic. + """ + + mols = dm.parallelized( + partial(dm.to_mol, kekulize=True), + mols, + n_jobs=n_jobs, + progress=progress, + tqdm_kwargs=dict(desc="To mol", leave=False), + ) + + return catalog_filter( + mols=mols, + catalogs=["bredt-kekulized"], # already kekulized mols + return_idx=return_idx, + n_jobs=n_jobs, + progress=progress, + progress_leave=progress_leave, + scheduler=scheduler, + batch_size=batch_size, + ) + + +def molecular_graph_filter( + mols: Sequence[Union[str, dm.Mol]], + max_severity: Optional[int] = 5, + return_idx: bool = False, + n_jobs: Optional[int] = None, + progress: bool = False, + progress_leave: bool = False, + scheduler: str = "threads", +) -> np.ndarray: + """Filter a list of compounds according to unstable molecular graph filter list. + + This list was obtained from observation around The disallowed graphs are: + + * K3,3 or K2,4 structure + * Cone of P4 or K4 with 3-ear + * Node in more than one ring of length 3 or 4 + + Args: + mols: list of input molecules + max_severity: maximum acceptable severity (1-10). Default is <5 + return_idx: whether to return index or a boolean mask + n_jobs: number of parallel job to run. Sequential by default + progress: whether to show progress bar + progress_leave: whether to leave the progress bar after completion + scheduler: joblib scheduler to use + + Returns: + filtered_mask: boolean array (or index array) where true means the molecule is not toxic. + """ + + if max_severity is None: + max_severity = 5 + + catalog = NamedCatalogs.unstable_graph(max_severity=max_severity) + + if isinstance(mols[0], str): + mols = dm.parallelized( + dm.to_mol, + mols, + n_jobs=n_jobs, + progress=progress, + tqdm_kwargs=dict(desc="To mol", leave=progress_leave), + ) + + toxic = dm.parallelized( + catalog.HasMatch, + mols, + n_jobs=n_jobs, + scheduler=scheduler, + progress=progress, + tqdm_kwargs=dict(desc="Match", leave=progress_leave), + ) + toxic = np.asarray(toxic) + filtered_idx = np.where(~toxic)[0] + + if return_idx: + return filtered_idx + + return np.bitwise_not(toxic) + + +def lilly_demerit_filter( + mols: Sequence[Union[str, dm.Mol]], + max_demerits: Optional[int] = 160, + return_idx: bool = False, + n_jobs: Optional[int] = None, + progress: bool = False, + progress_leave: bool = False, + scheduler: str = "threads", + batch_size: int = 5_000, + **kwargs: Any, +) -> np.ndarray: + """Run Lilly demerit filtering on current list of molecules + + Args: + mols: list of input molecules as smiles preferably + max_demerits: Cutoff to reject molecules Defaults to 160. + return_idx: whether to return a mask or a list of valid indexes + progress: whether to show progress bar + progress_leave: whether to leave the progress bar after completion + scheduler: joblib scheduler to usescheduler + batch_size: batch size for parallel processing. + kwargs: parameters specific to the `demerits.score` function + + Returns: + filtered_mask: boolean array (or index array) where true means the molecule is ok. + """ + + from medchem.structural.lilly_demerits import LillyDemeritsFilters + + dfilter = LillyDemeritsFilters() + + results = dfilter( + mols, + n_jobs=n_jobs, + progress=progress, + progress_leave=progress_leave, + scheduler=scheduler, + batch_size=batch_size, + **kwargs, + ) + + results = results[ + (results["pass_filter"] == True) + & ((results["demerit_score"].isna()) | (results["demerit_score"] < max_demerits)) + ] + + filtered_idx = results.index.values.astype(int) + filtered_mask = np.zeros(len(mols), dtype=bool) + filtered_mask[filtered_idx] = True + + if return_idx: + return filtered_idx + + return filtered_mask + + +def protecting_groups_filter( + mols: Sequence[Union[str, dm.Mol]], + return_idx: bool = False, + protecting_groups: List[str] = [ + "fmoc", + "tert-butoxymethyl", + "tert-butyl carbamate", + "tert-butyloxycarbonyl", + ], + n_jobs: Optional[int] = None, + progress: bool = False, + progress_leave: bool = False, + scheduler: str = "threads", +) -> np.ndarray: + """Filter a list of compounds according to match to known protecting groups. + Note that is a syntaxic sugar for calling chemical_group_filter with the protecting groups subset + + Args: + mols: list of input molecules + protecting_groups: type of protection group to consider if not provided, will use all (not advised) + return_idx: whether to return index or a boolean mask + n_jobs: number of parallel job to run. Sequential by default + progress: whether to show progress bar + progress_leave: whether to leave the progress bar after completion + scheduler: joblib scheduler to use + + Returns: + filtered_mask: boolean array (or index array) where true means the molecule DOES NOT MATCH the groups. + """ + + chemical_group = ChemicalGroup("protecting_groups") + chemical_group = chemical_group.filter(protecting_groups) + + return chemical_group_filter( + mols, + chemical_group, + return_idx=return_idx, + n_jobs=n_jobs, + progress=progress, + progress_leave=progress_leave, + scheduler=scheduler, + ) diff --git a/medchem/functional/_generic.py b/medchem/functional/_generic.py new file mode 100644 index 0000000..902ac23 --- /dev/null +++ b/medchem/functional/_generic.py @@ -0,0 +1,378 @@ +# from typing import Iterable +# from typing import Optional +# from typing import Callable +# from typing import Union + +# import itertools + +# import numpy as np +# import datamol as dm + +# from rdkit.Chem import rdMolDescriptors # type: ignore + +# from ..utils.graph import score_symmetry + + +# def _generic_filter( +# mols: Iterable[Union[str, dm.Mol]], +# rejection_fn: Callable, +# return_idx: bool = False, +# n_jobs: Optional[int] = None, +# progress: bool = False, +# scheduler: Optional[str] = None, +# ): +# """Apply any generic filter to a molecule + +# Args: +# mols: list of input molecules +# rejection_fn: function to reject a molecule. Return True is the molecule is rejected +# return_idx: whether to return index or a boolean mask +# n_jobs: number of parallel job to run. Sequential by default +# progress: whether to show progress bar +# scheduler: joblib scheduler to use + +# Returns: +# filtered_mask: boolean array (or index array) where true means the molecule is ok. +# """ +# if isinstance(mols[0], str): +# mols = dm.parallelized( +# dm.to_mol, +# mols, +# n_jobs=n_jobs, +# progress=progress, +# tqdm_kwargs=dict(desc="Macrocyle match", leave=False), +# ) + +# toxic = dm.parallelized( +# rejection_fn, +# mols, +# n_jobs=n_jobs, +# scheduler=scheduler, +# progress=progress, +# tqdm_kwargs=dict(desc="Match", leave=False), +# ) + +# filtered_idx = [i for i, bad in enumerate(toxic) if not bad] +# if return_idx: +# return filtered_idx + +# return np.bitwise_not(toxic) + + +# def macrocycle_filter( +# mols: Iterable[Union[str, dm.Mol]], +# max_cycle_size: int = 10, +# return_idx: bool = False, +# n_jobs: Optional[int] = None, +# progress: bool = False, +# scheduler: Optional[str] = None, +# ): +# """Find molecules that do not infringe the strict maximum cycle size. + +# Args: +# mols: list of input molecules +# max_cycle_size: strict maximum macrocycle size +# return_idx: whether to return index or a boolean mask +# n_jobs: number of parallel job to run. Sequential by default +# progress: whether to show progress bar +# scheduler: joblib scheduler to use + +# Returns: +# filtered_mask: boolean array (or index array) where true means the molecule is ok. + +# """ + +# def reject_fn(mol): +# if mol is None: +# return True +# rinfo = mol.GetRingInfo().AtomRings() +# return any(len(r) >= max_cycle_size for r in rinfo) + +# return _generic_filter( +# mols, +# reject_fn, +# return_idx=return_idx, +# n_jobs=n_jobs, +# progress=progress, +# scheduler=scheduler, +# ) + + +# def atom_list_filter( +# mols: Iterable[Union[str, dm.Mol]], +# unwanted_atom_list: Optional[Iterable] = None, +# wanted_atom_list: Optional[Iterable] = None, +# return_idx: bool = False, +# n_jobs: Optional[int] = None, +# progress: bool = False, +# scheduler: Optional[str] = None, +# ): +# """Find molecule without any atom from a set of unwanted atom symbols +# and with all atoms in the set of desirable atom list + +# Args: +# mols: list of input molecules +# unwanted_atom_list: list of undesirable atom symbol +# wanted_atom_list: list of desirable atom symbol +# return_idx: whether to return index or a boolean mask +# n_jobs: number of parallel job to run. Sequential by default +# progress: whether to show progress bar +# scheduler: joblib scheduler to use + +# Returns: +# filtered_mask: boolean array (or index array) where true means the molecule is ok. +# """ +# unwanted_atom_list = unwanted_atom_list or [] +# wanted_atom_list = wanted_atom_list or [] + +# def reject_fn(mol): +# if mol is None: +# return True +# for atom in mol.GetAtoms(): +# cur_symb = atom.GetSymbol() +# if cur_symb in unwanted_atom_list or ( +# len(wanted_atom_list) > 0 and cur_symb not in wanted_atom_list +# ): +# return True +# return False + +# return _generic_filter( +# mols, +# reject_fn, +# return_idx=return_idx, +# n_jobs=n_jobs, +# progress=progress, +# scheduler=scheduler, +# ) + + +# def ring_infraction_filter( +# mols: Iterable[Union[str, dm.Mol]], +# hetcycle_min_size: int = 4, +# return_idx: bool = False, +# n_jobs: Optional[int] = None, +# progress: bool = False, +# scheduler: Optional[str] = None, +# ): +# """ +# Find molecules that have a ring infraction filter. +# Returning True means the molecule is fine + +# Args: +# mols: list of input molecules +# hetcycle_min_size: Minimum ring size before more than 1 hetero atom or any non single bond is allowed. +# This is a *strict threshold (>)* +# return_idx: whether to return index or a boolean mask +# n_jobs: number of parallel job to run. Sequential by default +# progress: whether to show progress bar +# scheduler: joblib scheduler to use + +# Returns: +# filtered_mask: boolean array (or index array) where true means the molecule is ok. +# """ + +# ring_allene = dm.from_smarts("[R]=[R]=[R]") +# double_bond_small_ring = dm.from_smarts("[r3,r4]=[r3,r4]") + +# def reject_fn(mol): +# if mol is None: +# return True +# rejected = mol.HasSubstructMatch(ring_allene) or mol.HasSubstructMatch(double_bond_small_ring) +# if rejected: +# return True +# rinfo = mol.GetRingInfo() +# bond_rings = rinfo.BondRings() +# for r in bond_rings: +# r_bonds = [mol.GetBondWithIdx(b) for b in r] +# r_bond_types = [b.GetBondType() for b in r_bonds] +# r_atom_content = set( +# itertools.chain( +# *[(b.GetBeginAtom().GetSymbol(), b.GetEndAtom().GetSymbol()) for b in r_bonds] +# ) +# ) +# n_ring_heteroatoms = sum([at not in ["C", "H"] for at in r_atom_content]) +# if len(r) <= hetcycle_min_size and ( +# n_ring_heteroatoms > 1 or any(btype != dm.SINGLE_BOND for btype in r_bond_types) +# ): +# # too many heteroatoms in low ring size OR +# # alkene, allen or aromatic in small rings +# return True +# return False + +# return _generic_filter( +# mols, +# reject_fn, +# return_idx=return_idx, +# n_jobs=n_jobs, +# progress=progress, +# scheduler=scheduler, +# ) + + +# def num_atom_filter( +# mols: Iterable[Union[str, dm.Mol]], +# min_atoms: Optional[int] = None, +# max_atoms: Optional[int] = None, +# return_idx: bool = False, +# n_jobs: Optional[int] = None, +# progress: bool = False, +# scheduler: Optional[str] = None, +# ): +# """ +# Find a molecule that match the atom number constraints +# Returning True means the molecule is fine + +# Args: +# mols: list of input molecules +# min_atoms: strict minimum number of atoms (atoms > min_atoms) +# max_atoms: strict maximum number of atoms (atoms < max_atoms) +# return_idx: whether to return index or a boolean mask +# n_jobs: number of parallel job to run. Sequential by default +# progress: whether to show progress bar +# scheduler: joblib scheduler to use + +# Returns: +# filtered_mask: boolean array (or index array) where true means the molecule is ok. +# """ + +# def reject_fn(mol): +# if mol is None: +# return True +# num_atoms = mol.GetNumAtoms() +# return (min_atoms is not None and num_atoms <= min_atoms) or ( +# max_atoms is not None and num_atoms >= max_atoms +# ) + +# return _generic_filter( +# mols, +# reject_fn, +# return_idx=return_idx, +# n_jobs=n_jobs, +# progress=progress, +# scheduler=scheduler, +# ) + + +# def num_stereo_center_filter( +# mols: Iterable[Union[str, dm.Mol]], +# max_stereo_centers: Optional[int] = 4, +# max_undefined_stereo_centers: Optional[int] = 2, +# return_idx: bool = False, +# n_jobs: Optional[int] = None, +# progress: bool = False, +# scheduler: Optional[str] = None, +# ): +# """ +# Find a molecule that match the number of stereo center constraints. +# Returning True means the molecule is fine + +# Args: +# mols: list of input molecules +# max_stereo_center: strict maximum number of stereo centers (<). Default is 4 +# max_undefined_stereo_centers: strict maximum number of undefined stereo centers (<). Default is 2 +# return_idx: whether to return index or a boolean mask +# n_jobs: number of parallel job to run. Sequential by default +# progress: whether to show progress bar +# scheduler: joblib scheduler to use + +# Returns: +# filtered_mask: boolean array (or index array) where true means the molecule is ok. +# """ + +# def reject_fn(mol): +# if mol is None: +# return True +# return (dm.descriptors.n_stereo_centers(mol) >= max_stereo_centers) or ( +# rdMolDescriptors.CalcNumUnspecifiedAtomStereoCenters(mol) >= max_undefined_stereo_centers +# ) + +# return _generic_filter( +# mols, +# reject_fn, +# return_idx=return_idx, +# n_jobs=n_jobs, +# progress=progress, +# scheduler=scheduler, +# ) + + +# def halogenicity_filter( +# mols: Iterable[Union[str, dm.Mol]], +# thresh_F: int = 6, +# thresh_Br: int = 3, +# thresh_Cl: int = 3, +# return_idx: bool = False, +# n_jobs: Optional[int] = None, +# progress: bool = False, +# scheduler: Optional[str] = None, +# ): +# """Find molecule that do not exceed halogen threshold. These thresholds are: + +# Args: +# mols: list of input molecules +# thresh_F: maximum number of fluorine +# thresh_Br: maximum number of bromine +# thresh_Cl: maximum number of chlorine +# return_idx: whether to return index or a boolean mask +# n_jobs: number of parallel job to run. Sequential by default +# progress: whether to show progress bar +# scheduler: joblib scheduler to use + +# Returns: +# filtered_mask: boolean array (or index array) where true means the molecule is ok. +# """ +# fluorine_smarts = dm.from_smarts("[F]") +# bromine_smarts = dm.from_smarts("[Br]") +# chlorine_smarts = dm.from_smarts("[Cl]") + +# def reject_fn(mol): +# if mol is None: +# return True +# fluorine_saturation = len(mol.GetSubstructMatches(fluorine_smarts, uniquify=True)) > thresh_F +# bromine_saturation = len(mol.GetSubstructMatches(bromine_smarts, uniquify=True)) > thresh_Br +# chlorine_saturation = len(mol.GetSubstructMatches(chlorine_smarts, uniquify=True)) > thresh_Cl +# return fluorine_saturation or bromine_saturation or chlorine_saturation + +# return _generic_filter( +# mols, +# reject_fn, +# return_idx=return_idx, +# n_jobs=n_jobs, +# progress=progress, +# scheduler=scheduler, +# ) + + +# def symmetry_filter( +# mols: Iterable[Union[str, dm.Mol]], +# symmetry_threshold: float = 0.8, +# return_idx: bool = False, +# n_jobs: Optional[int] = None, +# progress: bool = False, +# scheduler: Optional[str] = None, +# ): +# """Find molecules that are not symmetrical, given a symmetry threshold + +# Args: +# mols: list of input molecules +# symmetry_threshold: threshold to consider a molecule highly symmetrical +# return_idx: whether to return index or a boolean mask +# n_jobs: number of parallel job to run. Sequential by default +# progress: whether to show progress bar +# scheduler: joblib scheduler to use + +# Returns: +# filtered_mask: boolean array (or index array) where true means the molecule is ok. +# """ + +# def reject_fn(mol): +# return score_symmetry(mol) > symmetry_threshold + +# return _generic_filter( +# mols, +# reject_fn, +# return_idx=return_idx, +# n_jobs=n_jobs, +# progress=progress, +# scheduler=scheduler, +# ) diff --git a/mkdocs.yml b/mkdocs.yml index b8a42c7..e1d2c38 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -30,6 +30,7 @@ nav: - medchem.complexity: api/medchem.complexity.md - medchem.groups: api/medchem.groups.md - medchem.constraints: api/medchem.constraints.md + - medchem.functional: api/medchem.functional.md - medchem.utils: api/medchem.utils.md theme: diff --git a/tests/test_functional_api.py b/tests/test_functional_api.py new file mode 100644 index 0000000..6261bf3 --- /dev/null +++ b/tests/test_functional_api.py @@ -0,0 +1,212 @@ +import datamol as dm +import medchem as mc + + +def test_alert_filter(): + data = dm.data.freesolv() + data = data.iloc[:10] + + results = mc.functional.alert_filter( + mols=data["smiles"].tolist(), + alerts=["BMS"], + n_jobs=-1, + progress=True, + return_idx=False, + ) + + assert results.tolist() == [True, False, True, True, True, True, True, True, True, True] + + results = mc.functional.alert_filter( + mols=data["smiles"].tolist(), + alerts=["BMS"], + n_jobs=-1, + progress=True, + return_idx=True, + ) + + assert results.tolist() == [0, 2, 3, 4, 5, 6, 7, 8, 9] + + +def test_nibr_filter(): + data = dm.data.freesolv() + data = data.iloc[:10] + + results = mc.functional.nibr_filter( + mols=data["smiles"].tolist(), + n_jobs=-1, + progress=True, + return_idx=False, + ) + + assert results.tolist() == [True, False, True, True, True, True, True, True, True, True] + + results = mc.functional.nibr_filter( + mols=data["smiles"].tolist(), + n_jobs=-1, + progress=True, + return_idx=True, + ) + + assert results.tolist() == [0, 2, 3, 4, 5, 6, 7, 8, 9] + + +def test_catalog_filter(): + data = dm.data.freesolv() + data = data.iloc[:10] + + results = mc.functional.catalog_filter( + mols=data["smiles"].tolist(), + catalogs=["tox", "pains"], + n_jobs=-1, + progress=True, + progress_leave=True, + return_idx=False, + batch_size=100, + scheduler="threads", + ) + + assert results.tolist() == [True, True, False, True, False, True, True, True, True, True] + + results = mc.functional.catalog_filter( + mols=data["smiles"].tolist(), + catalogs=["tox", "pains"], + n_jobs=-1, + progress=True, + progress_leave=True, + return_idx=True, + batch_size=100, + scheduler="threads", + ) + + assert results.tolist() == [0, 1, 3, 5, 6, 7, 8, 9] + + +def test_chemical_group_filter(): + data = dm.data.freesolv() + data = data.iloc[:10] + + cg = mc.groups.ChemicalGroup("common_organic_solvents") + + results = mc.functional.chemical_group_filter( + mols=data["smiles"].tolist(), + chemical_group=cg, + n_jobs=-1, + progress=True, + progress_leave=True, + return_idx=False, + scheduler="threads", + ) + + assert results.tolist() == [False, True, False, True, False, False, True, False, False, False] + + results = mc.functional.chemical_group_filter( + mols=data["smiles"].tolist(), + chemical_group=cg, + n_jobs=-1, + progress=True, + progress_leave=True, + return_idx=True, + scheduler="threads", + ) + + assert results.tolist() == [1, 3, 6] + + +def test_rules_filter(): + rfilter = mc.rules.RuleFilters(rule_list=["rule_of_five", "rule_of_oprea", "rule_of_cns"]) + + data = dm.data.cdk2() + data = data.iloc[:10] + + results = mc.functional.rules_filter( + mols=data["smiles"].tolist(), + rules=rfilter, + return_idx=False, + ) + + assert results.tolist() == [False, False, False, True, True, False, False, False, False, True] + + results = mc.functional.rules_filter( + mols=data["smiles"].tolist(), + rules=rfilter, + return_idx=True, + ) + assert results.tolist() == [3, 4, 9] + + +def test_complexity_filter(): + data = dm.data.cdk2() + data = data.iloc[:10] + + results = mc.functional.complexity_filter( + mols=data["smiles"].tolist(), + return_idx=False, + ) + + assert results.tolist() == [True, True, True, True, True, True, True, True, True, True] + + results = mc.functional.complexity_filter( + mols=data["smiles"].tolist(), + return_idx=True, + ) + + assert results.tolist() == [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + + +def test_bredt_filter(): + bredt_test_set = [ + "C1C2=C1C2", + "C1CC=C=CC1", + "C1C2CCCC=C12", + "C1C2=C1CCCC2", # is ok + "C1CC2=CCC1C2", + "C1CC2=CC1CC2", + "C1CC2CCC1C=C2", # is ok + "C1CC2=CCC1CC2", + ] + + results = mc.functional.bredt_filter(mols=bredt_test_set, return_idx=False) + + assert results.tolist() == [False, False, False, True, False, False, True, False] + + results = mc.functional.bredt_filter(mols=bredt_test_set, return_idx=True) + + assert results.tolist() == [3, 6] + + +def test_molecular_graph_filter(): + data = dm.data.freesolv() + data = data.iloc[:10] + + results = mc.functional.molecular_graph_filter(mols=data["smiles"].tolist(), return_idx=False) + + assert results.tolist() == [True, True, True, True, True, True, True, True, True, True] + + results = mc.functional.molecular_graph_filter(mols=data["smiles"].tolist(), return_idx=True) + + assert results.tolist() == [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + + +def test_lilly_demerit_filter(): + data = dm.data.cdk2() + data = data.iloc[:10] + + results = mc.functional.lilly_demerit_filter(mols=data["smiles"].tolist(), return_idx=True) + + assert results.tolist() == [0, 1, 2, 3, 4, 5, 6, 7] + + results = mc.functional.lilly_demerit_filter(mols=data["smiles"].tolist(), return_idx=False) + assert results.tolist() == [True, True, True, True, True, True, True, True, False, False] + + +def test_protecting_groups_filter(): + data = dm.data.freesolv() + data = data.iloc[:10] + + results = mc.functional.protecting_groups_filter(mols=data["smiles"].tolist(), return_idx=False) + + assert results.tolist() == [True, True, True, True, True, True, True, True, True, True] + + results = mc.functional.protecting_groups_filter(mols=data["smiles"].tolist(), return_idx=True) + + assert results.tolist() == [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] From 539f87c3f1cd05445364956b548b56309a8a579d Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Sun, 9 Jul 2023 18:19:35 -0400 Subject: [PATCH 25/31] WIP --- medchem/functional/_api.py | 1 - 1 file changed, 1 deletion(-) diff --git a/medchem/functional/_api.py b/medchem/functional/_api.py index 1879588..4378d92 100644 --- a/medchem/functional/_api.py +++ b/medchem/functional/_api.py @@ -1,4 +1,3 @@ -from typing import Iterable from typing import List from typing import Optional from typing import Union From 099caa4da791b838eac24853981740f180c313d2 Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Sun, 9 Jul 2023 18:41:19 -0400 Subject: [PATCH 26/31] functional generic done --- docs/api/medchem.functional.md | 7 + medchem/functional/__init__.py | 8 + medchem/functional/_generic.py | 759 ++++++++++++++++--------------- tests/test_api.py | 2 - tests/test_functional_generic.py | 122 +++++ tests_OLD/test_lead_filter.py | 180 -------- 6 files changed, 518 insertions(+), 560 deletions(-) delete mode 100644 tests/test_api.py create mode 100644 tests/test_functional_generic.py delete mode 100644 tests_OLD/test_lead_filter.py diff --git a/docs/api/medchem.functional.md b/docs/api/medchem.functional.md index 313548f..bfad377 100644 --- a/docs/api/medchem.functional.md +++ b/docs/api/medchem.functional.md @@ -10,3 +10,10 @@ ::: medchem.functional.molecular_graph_filter ::: medchem.functional.lilly_demerit_filter ::: medchem.functional.protecting_groups_filter +::: medchem.functional.macrocycle_filter +::: medchem.functional.atom_list_filter +::: medchem.functional.ring_infraction_filter +::: medchem.functional.num_atom_filter +::: medchem.functional.num_stereo_center_filter +::: medchem.functional.halogenicity_filter +::: medchem.functional.symmetry_filter diff --git a/medchem/functional/__init__.py b/medchem/functional/__init__.py index f20f11d..0ccece3 100644 --- a/medchem/functional/__init__.py +++ b/medchem/functional/__init__.py @@ -8,3 +8,11 @@ from ._api import molecular_graph_filter from ._api import lilly_demerit_filter from ._api import protecting_groups_filter + +from ._generic import macrocycle_filter +from ._generic import atom_list_filter +from ._generic import ring_infraction_filter +from ._generic import num_atom_filter +from ._generic import num_stereo_center_filter +from ._generic import halogenicity_filter +from ._generic import symmetry_filter diff --git a/medchem/functional/_generic.py b/medchem/functional/_generic.py index 902ac23..be9c769 100644 --- a/medchem/functional/_generic.py +++ b/medchem/functional/_generic.py @@ -1,378 +1,381 @@ -# from typing import Iterable -# from typing import Optional -# from typing import Callable -# from typing import Union - -# import itertools - -# import numpy as np -# import datamol as dm - -# from rdkit.Chem import rdMolDescriptors # type: ignore - -# from ..utils.graph import score_symmetry - - -# def _generic_filter( -# mols: Iterable[Union[str, dm.Mol]], -# rejection_fn: Callable, -# return_idx: bool = False, -# n_jobs: Optional[int] = None, -# progress: bool = False, -# scheduler: Optional[str] = None, -# ): -# """Apply any generic filter to a molecule - -# Args: -# mols: list of input molecules -# rejection_fn: function to reject a molecule. Return True is the molecule is rejected -# return_idx: whether to return index or a boolean mask -# n_jobs: number of parallel job to run. Sequential by default -# progress: whether to show progress bar -# scheduler: joblib scheduler to use - -# Returns: -# filtered_mask: boolean array (or index array) where true means the molecule is ok. -# """ -# if isinstance(mols[0], str): -# mols = dm.parallelized( -# dm.to_mol, -# mols, -# n_jobs=n_jobs, -# progress=progress, -# tqdm_kwargs=dict(desc="Macrocyle match", leave=False), -# ) - -# toxic = dm.parallelized( -# rejection_fn, -# mols, -# n_jobs=n_jobs, -# scheduler=scheduler, -# progress=progress, -# tqdm_kwargs=dict(desc="Match", leave=False), -# ) - -# filtered_idx = [i for i, bad in enumerate(toxic) if not bad] -# if return_idx: -# return filtered_idx - -# return np.bitwise_not(toxic) - - -# def macrocycle_filter( -# mols: Iterable[Union[str, dm.Mol]], -# max_cycle_size: int = 10, -# return_idx: bool = False, -# n_jobs: Optional[int] = None, -# progress: bool = False, -# scheduler: Optional[str] = None, -# ): -# """Find molecules that do not infringe the strict maximum cycle size. - -# Args: -# mols: list of input molecules -# max_cycle_size: strict maximum macrocycle size -# return_idx: whether to return index or a boolean mask -# n_jobs: number of parallel job to run. Sequential by default -# progress: whether to show progress bar -# scheduler: joblib scheduler to use - -# Returns: -# filtered_mask: boolean array (or index array) where true means the molecule is ok. - -# """ - -# def reject_fn(mol): -# if mol is None: -# return True -# rinfo = mol.GetRingInfo().AtomRings() -# return any(len(r) >= max_cycle_size for r in rinfo) - -# return _generic_filter( -# mols, -# reject_fn, -# return_idx=return_idx, -# n_jobs=n_jobs, -# progress=progress, -# scheduler=scheduler, -# ) - - -# def atom_list_filter( -# mols: Iterable[Union[str, dm.Mol]], -# unwanted_atom_list: Optional[Iterable] = None, -# wanted_atom_list: Optional[Iterable] = None, -# return_idx: bool = False, -# n_jobs: Optional[int] = None, -# progress: bool = False, -# scheduler: Optional[str] = None, -# ): -# """Find molecule without any atom from a set of unwanted atom symbols -# and with all atoms in the set of desirable atom list - -# Args: -# mols: list of input molecules -# unwanted_atom_list: list of undesirable atom symbol -# wanted_atom_list: list of desirable atom symbol -# return_idx: whether to return index or a boolean mask -# n_jobs: number of parallel job to run. Sequential by default -# progress: whether to show progress bar -# scheduler: joblib scheduler to use - -# Returns: -# filtered_mask: boolean array (or index array) where true means the molecule is ok. -# """ -# unwanted_atom_list = unwanted_atom_list or [] -# wanted_atom_list = wanted_atom_list or [] - -# def reject_fn(mol): -# if mol is None: -# return True -# for atom in mol.GetAtoms(): -# cur_symb = atom.GetSymbol() -# if cur_symb in unwanted_atom_list or ( -# len(wanted_atom_list) > 0 and cur_symb not in wanted_atom_list -# ): -# return True -# return False - -# return _generic_filter( -# mols, -# reject_fn, -# return_idx=return_idx, -# n_jobs=n_jobs, -# progress=progress, -# scheduler=scheduler, -# ) - - -# def ring_infraction_filter( -# mols: Iterable[Union[str, dm.Mol]], -# hetcycle_min_size: int = 4, -# return_idx: bool = False, -# n_jobs: Optional[int] = None, -# progress: bool = False, -# scheduler: Optional[str] = None, -# ): -# """ -# Find molecules that have a ring infraction filter. -# Returning True means the molecule is fine - -# Args: -# mols: list of input molecules -# hetcycle_min_size: Minimum ring size before more than 1 hetero atom or any non single bond is allowed. -# This is a *strict threshold (>)* -# return_idx: whether to return index or a boolean mask -# n_jobs: number of parallel job to run. Sequential by default -# progress: whether to show progress bar -# scheduler: joblib scheduler to use - -# Returns: -# filtered_mask: boolean array (or index array) where true means the molecule is ok. -# """ - -# ring_allene = dm.from_smarts("[R]=[R]=[R]") -# double_bond_small_ring = dm.from_smarts("[r3,r4]=[r3,r4]") - -# def reject_fn(mol): -# if mol is None: -# return True -# rejected = mol.HasSubstructMatch(ring_allene) or mol.HasSubstructMatch(double_bond_small_ring) -# if rejected: -# return True -# rinfo = mol.GetRingInfo() -# bond_rings = rinfo.BondRings() -# for r in bond_rings: -# r_bonds = [mol.GetBondWithIdx(b) for b in r] -# r_bond_types = [b.GetBondType() for b in r_bonds] -# r_atom_content = set( -# itertools.chain( -# *[(b.GetBeginAtom().GetSymbol(), b.GetEndAtom().GetSymbol()) for b in r_bonds] -# ) -# ) -# n_ring_heteroatoms = sum([at not in ["C", "H"] for at in r_atom_content]) -# if len(r) <= hetcycle_min_size and ( -# n_ring_heteroatoms > 1 or any(btype != dm.SINGLE_BOND for btype in r_bond_types) -# ): -# # too many heteroatoms in low ring size OR -# # alkene, allen or aromatic in small rings -# return True -# return False - -# return _generic_filter( -# mols, -# reject_fn, -# return_idx=return_idx, -# n_jobs=n_jobs, -# progress=progress, -# scheduler=scheduler, -# ) - - -# def num_atom_filter( -# mols: Iterable[Union[str, dm.Mol]], -# min_atoms: Optional[int] = None, -# max_atoms: Optional[int] = None, -# return_idx: bool = False, -# n_jobs: Optional[int] = None, -# progress: bool = False, -# scheduler: Optional[str] = None, -# ): -# """ -# Find a molecule that match the atom number constraints -# Returning True means the molecule is fine - -# Args: -# mols: list of input molecules -# min_atoms: strict minimum number of atoms (atoms > min_atoms) -# max_atoms: strict maximum number of atoms (atoms < max_atoms) -# return_idx: whether to return index or a boolean mask -# n_jobs: number of parallel job to run. Sequential by default -# progress: whether to show progress bar -# scheduler: joblib scheduler to use - -# Returns: -# filtered_mask: boolean array (or index array) where true means the molecule is ok. -# """ - -# def reject_fn(mol): -# if mol is None: -# return True -# num_atoms = mol.GetNumAtoms() -# return (min_atoms is not None and num_atoms <= min_atoms) or ( -# max_atoms is not None and num_atoms >= max_atoms -# ) - -# return _generic_filter( -# mols, -# reject_fn, -# return_idx=return_idx, -# n_jobs=n_jobs, -# progress=progress, -# scheduler=scheduler, -# ) - - -# def num_stereo_center_filter( -# mols: Iterable[Union[str, dm.Mol]], -# max_stereo_centers: Optional[int] = 4, -# max_undefined_stereo_centers: Optional[int] = 2, -# return_idx: bool = False, -# n_jobs: Optional[int] = None, -# progress: bool = False, -# scheduler: Optional[str] = None, -# ): -# """ -# Find a molecule that match the number of stereo center constraints. -# Returning True means the molecule is fine - -# Args: -# mols: list of input molecules -# max_stereo_center: strict maximum number of stereo centers (<). Default is 4 -# max_undefined_stereo_centers: strict maximum number of undefined stereo centers (<). Default is 2 -# return_idx: whether to return index or a boolean mask -# n_jobs: number of parallel job to run. Sequential by default -# progress: whether to show progress bar -# scheduler: joblib scheduler to use - -# Returns: -# filtered_mask: boolean array (or index array) where true means the molecule is ok. -# """ - -# def reject_fn(mol): -# if mol is None: -# return True -# return (dm.descriptors.n_stereo_centers(mol) >= max_stereo_centers) or ( -# rdMolDescriptors.CalcNumUnspecifiedAtomStereoCenters(mol) >= max_undefined_stereo_centers -# ) - -# return _generic_filter( -# mols, -# reject_fn, -# return_idx=return_idx, -# n_jobs=n_jobs, -# progress=progress, -# scheduler=scheduler, -# ) - - -# def halogenicity_filter( -# mols: Iterable[Union[str, dm.Mol]], -# thresh_F: int = 6, -# thresh_Br: int = 3, -# thresh_Cl: int = 3, -# return_idx: bool = False, -# n_jobs: Optional[int] = None, -# progress: bool = False, -# scheduler: Optional[str] = None, -# ): -# """Find molecule that do not exceed halogen threshold. These thresholds are: - -# Args: -# mols: list of input molecules -# thresh_F: maximum number of fluorine -# thresh_Br: maximum number of bromine -# thresh_Cl: maximum number of chlorine -# return_idx: whether to return index or a boolean mask -# n_jobs: number of parallel job to run. Sequential by default -# progress: whether to show progress bar -# scheduler: joblib scheduler to use - -# Returns: -# filtered_mask: boolean array (or index array) where true means the molecule is ok. -# """ -# fluorine_smarts = dm.from_smarts("[F]") -# bromine_smarts = dm.from_smarts("[Br]") -# chlorine_smarts = dm.from_smarts("[Cl]") - -# def reject_fn(mol): -# if mol is None: -# return True -# fluorine_saturation = len(mol.GetSubstructMatches(fluorine_smarts, uniquify=True)) > thresh_F -# bromine_saturation = len(mol.GetSubstructMatches(bromine_smarts, uniquify=True)) > thresh_Br -# chlorine_saturation = len(mol.GetSubstructMatches(chlorine_smarts, uniquify=True)) > thresh_Cl -# return fluorine_saturation or bromine_saturation or chlorine_saturation - -# return _generic_filter( -# mols, -# reject_fn, -# return_idx=return_idx, -# n_jobs=n_jobs, -# progress=progress, -# scheduler=scheduler, -# ) - - -# def symmetry_filter( -# mols: Iterable[Union[str, dm.Mol]], -# symmetry_threshold: float = 0.8, -# return_idx: bool = False, -# n_jobs: Optional[int] = None, -# progress: bool = False, -# scheduler: Optional[str] = None, -# ): -# """Find molecules that are not symmetrical, given a symmetry threshold - -# Args: -# mols: list of input molecules -# symmetry_threshold: threshold to consider a molecule highly symmetrical -# return_idx: whether to return index or a boolean mask -# n_jobs: number of parallel job to run. Sequential by default -# progress: whether to show progress bar -# scheduler: joblib scheduler to use - -# Returns: -# filtered_mask: boolean array (or index array) where true means the molecule is ok. -# """ - -# def reject_fn(mol): -# return score_symmetry(mol) > symmetry_threshold - -# return _generic_filter( -# mols, -# reject_fn, -# return_idx=return_idx, -# n_jobs=n_jobs, -# progress=progress, -# scheduler=scheduler, -# ) +from typing import Sequence +from typing import Optional +from typing import Callable +from typing import Union + +import itertools + +import numpy as np +import datamol as dm + +from rdkit.Chem import rdMolDescriptors # type: ignore + +from ..utils.graph import score_symmetry + + +def _generic_filter( + mols: Sequence[Union[str, dm.Mol]], + rejection_fn: Callable, + return_idx: bool = False, + n_jobs: Optional[int] = None, + progress: bool = False, + progress_leave: bool = False, + scheduler: str = "processes", +) -> np.ndarray: + """Apply any generic filter to a molecule + + Args: + mols: list of input molecules + rejection_fn: function to reject a molecule. Return True is the molecule is rejected + return_idx: whether to return index or a boolean mask + n_jobs: number of parallel job to run. Sequential by default + progress: whether to show progress bar + scheduler: joblib scheduler to use + + Returns: + filtered_mask: boolean array (or index array) where true means the molecule is ok. + """ + if isinstance(mols[0], str): + mols = dm.parallelized( + dm.to_mol, + mols, + n_jobs=n_jobs, + progress=progress, + tqdm_kwargs=dict(desc="TO mol", leave=progress_leave), + ) + + toxic = dm.parallelized( + rejection_fn, + mols, + n_jobs=n_jobs, + scheduler=scheduler, + progress=progress, + tqdm_kwargs=dict(desc="Match", leave=progress_leave), + ) + + toxic = np.array(toxic) + filtered_idx = np.where(~toxic)[0] + + if return_idx: + return filtered_idx + + return np.bitwise_not(toxic) + + +def macrocycle_filter( + mols: Sequence[Union[str, dm.Mol]], + max_cycle_size: int = 10, + return_idx: bool = False, + n_jobs: Optional[int] = None, + progress: bool = False, + scheduler: str = "processes", +) -> np.ndarray: + """Find molecules that do not infringe the strict maximum cycle size. + + Args: + mols: list of input molecules + max_cycle_size: strict maximum macrocycle size + return_idx: whether to return index or a boolean mask + n_jobs: number of parallel job to run. Sequential by default + progress: whether to show progress bar + scheduler: joblib scheduler to use + + Returns: + filtered_mask: boolean array (or index array) where true means the molecule is ok. + + """ + + def reject_fn(mol): + if mol is None: + return True + rinfo = mol.GetRingInfo().AtomRings() + return any(len(r) >= max_cycle_size for r in rinfo) + + return _generic_filter( + mols, + reject_fn, + return_idx=return_idx, + n_jobs=n_jobs, + progress=progress, + scheduler=scheduler, + ) + + +def atom_list_filter( + mols: Sequence[Union[str, dm.Mol]], + unwanted_atom_list: Optional[Sequence] = None, + wanted_atom_list: Optional[Sequence] = None, + return_idx: bool = False, + n_jobs: Optional[int] = None, + progress: bool = False, + scheduler: str = "processes", +) -> np.ndarray: + """Find molecule without any atom from a set of unwanted atom symbols + and with all atoms in the set of desirable atom list + + Args: + mols: list of input molecules + unwanted_atom_list: list of undesirable atom symbol + wanted_atom_list: list of desirable atom symbol + return_idx: whether to return index or a boolean mask + n_jobs: number of parallel job to run. Sequential by default + progress: whether to show progress bar + scheduler: joblib scheduler to use + + Returns: + filtered_mask: boolean array (or index array) where true means the molecule is ok. + """ + unwanted_atom_list = unwanted_atom_list or [] + wanted_atom_list = wanted_atom_list or [] + + def reject_fn(mol): + if mol is None: + return True + for atom in mol.GetAtoms(): + cur_symb = atom.GetSymbol() + if cur_symb in unwanted_atom_list or ( + len(wanted_atom_list) > 0 and cur_symb not in wanted_atom_list + ): + return True + return False + + return _generic_filter( + mols, + reject_fn, + return_idx=return_idx, + n_jobs=n_jobs, + progress=progress, + scheduler=scheduler, + ) + + +def ring_infraction_filter( + mols: Sequence[Union[str, dm.Mol]], + hetcycle_min_size: int = 4, + return_idx: bool = False, + n_jobs: Optional[int] = None, + progress: bool = False, + scheduler: str = "processes", +) -> np.ndarray: + """ + Find molecules that have a ring infraction filter. + Returning True means the molecule is fine + + Args: + mols: list of input molecules + hetcycle_min_size: Minimum ring size before more than 1 hetero atom or any non single bond is allowed. + This is a *strict threshold (>)* + return_idx: whether to return index or a boolean mask + n_jobs: number of parallel job to run. Sequential by default + progress: whether to show progress bar + scheduler: joblib scheduler to use + + Returns: + filtered_mask: boolean array (or index array) where true means the molecule is ok. + """ + + ring_allene = dm.from_smarts("[R]=[R]=[R]") + double_bond_small_ring = dm.from_smarts("[r3,r4]=[r3,r4]") + + def reject_fn(mol): + if mol is None: + return True + rejected = mol.HasSubstructMatch(ring_allene) or mol.HasSubstructMatch(double_bond_small_ring) + if rejected: + return True + rinfo = mol.GetRingInfo() + bond_rings = rinfo.BondRings() + for r in bond_rings: + r_bonds = [mol.GetBondWithIdx(b) for b in r] + r_bond_types = [b.GetBondType() for b in r_bonds] + r_atom_content = set( + itertools.chain( + *[(b.GetBeginAtom().GetSymbol(), b.GetEndAtom().GetSymbol()) for b in r_bonds] + ) + ) + n_ring_heteroatoms = sum([at not in ["C", "H"] for at in r_atom_content]) + if len(r) <= hetcycle_min_size and ( + n_ring_heteroatoms > 1 or any(btype != dm.SINGLE_BOND for btype in r_bond_types) + ): + # too many heteroatoms in low ring size OR + # alkene, allen or aromatic in small rings + return True + return False + + return _generic_filter( + mols, + reject_fn, + return_idx=return_idx, + n_jobs=n_jobs, + progress=progress, + scheduler=scheduler, + ) + + +def num_atom_filter( + mols: Sequence[Union[str, dm.Mol]], + min_atoms: Optional[int] = None, + max_atoms: Optional[int] = None, + return_idx: bool = False, + n_jobs: Optional[int] = None, + progress: bool = False, + scheduler: str = "processes", +) -> np.ndarray: + """ + Find a molecule that match the atom number constraints + Returning True means the molecule is fine + + Args: + mols: list of input molecules + min_atoms: strict minimum number of atoms (atoms > min_atoms) + max_atoms: strict maximum number of atoms (atoms < max_atoms) + return_idx: whether to return index or a boolean mask + n_jobs: number of parallel job to run. Sequential by default + progress: whether to show progress bar + scheduler: joblib scheduler to use + + Returns: + filtered_mask: boolean array (or index array) where true means the molecule is ok. + """ + + def reject_fn(mol): + if mol is None: + return True + num_atoms = mol.GetNumAtoms() + return (min_atoms is not None and num_atoms <= min_atoms) or ( + max_atoms is not None and num_atoms >= max_atoms + ) + + return _generic_filter( + mols, + reject_fn, + return_idx=return_idx, + n_jobs=n_jobs, + progress=progress, + scheduler=scheduler, + ) + + +def num_stereo_center_filter( + mols: Sequence[Union[str, dm.Mol]], + max_stereo_centers: int = 4, + max_undefined_stereo_centers: int = 2, + return_idx: bool = False, + n_jobs: Optional[int] = None, + progress: bool = False, + scheduler: str = "processes", +) -> np.ndarray: + """ + Find a molecule that match the number of stereo center constraints. + Returning True means the molecule is fine + + Args: + mols: list of input molecules + max_stereo_centers: strict maximum number of stereo centers (<). Default is 4 + max_undefined_stereo_centers: strict maximum number of undefined stereo centers (<). Default is 2 + return_idx: whether to return index or a boolean mask + n_jobs: number of parallel job to run. Sequential by default + progress: whether to show progress bar + scheduler: joblib scheduler to use + + Returns: + filtered_mask: boolean array (or index array) where true means the molecule is ok. + """ + + def reject_fn(mol): + if mol is None: + return True + return (dm.descriptors.n_stereo_centers(mol) >= max_stereo_centers) or ( + rdMolDescriptors.CalcNumUnspecifiedAtomStereoCenters(mol) >= max_undefined_stereo_centers + ) + + return _generic_filter( + mols, + reject_fn, + return_idx=return_idx, + n_jobs=n_jobs, + progress=progress, + scheduler=scheduler, + ) + + +def halogenicity_filter( + mols: Sequence[Union[str, dm.Mol]], + thresh_F: int = 6, + thresh_Br: int = 3, + thresh_Cl: int = 3, + return_idx: bool = False, + n_jobs: Optional[int] = None, + progress: bool = False, + scheduler: str = "processes", +) -> np.ndarray: + """Find molecule that do not exceed halogen threshold. These thresholds are: + + Args: + mols: list of input molecules + thresh_F: maximum number of fluorine + thresh_Br: maximum number of bromine + thresh_Cl: maximum number of chlorine + return_idx: whether to return index or a boolean mask + n_jobs: number of parallel job to run. Sequential by default + progress: whether to show progress bar + scheduler: joblib scheduler to use + + Returns: + filtered_mask: boolean array (or index array) where true means the molecule is ok. + """ + fluorine_smarts = dm.from_smarts("[F]") + bromine_smarts = dm.from_smarts("[Br]") + chlorine_smarts = dm.from_smarts("[Cl]") + + def reject_fn(mol): + if mol is None: + return True + fluorine_saturation = len(mol.GetSubstructMatches(fluorine_smarts, uniquify=True)) > thresh_F + bromine_saturation = len(mol.GetSubstructMatches(bromine_smarts, uniquify=True)) > thresh_Br + chlorine_saturation = len(mol.GetSubstructMatches(chlorine_smarts, uniquify=True)) > thresh_Cl + return fluorine_saturation or bromine_saturation or chlorine_saturation + + return _generic_filter( + mols, + reject_fn, + return_idx=return_idx, + n_jobs=n_jobs, + progress=progress, + scheduler=scheduler, + ) + + +def symmetry_filter( + mols: Sequence[Union[str, dm.Mol]], + symmetry_threshold: float = 0.8, + return_idx: bool = False, + n_jobs: Optional[int] = None, + progress: bool = False, + scheduler: str = "processes", +) -> np.ndarray: + """Find molecules that are not symmetrical, given a symmetry threshold + + Args: + mols: list of input molecules + symmetry_threshold: threshold to consider a molecule highly symmetrical + return_idx: whether to return index or a boolean mask + n_jobs: number of parallel job to run. Sequential by default + progress: whether to show progress bar + scheduler: joblib scheduler to use + + Returns: + filtered_mask: boolean array (or index array) where true means the molecule is ok. + """ + + def reject_fn(mol): + return score_symmetry(mol) > symmetry_threshold + + return _generic_filter( + mols, + reject_fn, + return_idx=return_idx, + n_jobs=n_jobs, + progress=progress, + scheduler=scheduler, + ) diff --git a/tests/test_api.py b/tests/test_api.py deleted file mode 100644 index 650e0f5..0000000 --- a/tests/test_api.py +++ /dev/null @@ -1,2 +0,0 @@ -def test_api(): - import medchem.api diff --git a/tests/test_functional_generic.py b/tests/test_functional_generic.py new file mode 100644 index 0000000..74cfb67 --- /dev/null +++ b/tests/test_functional_generic.py @@ -0,0 +1,122 @@ +import datamol as dm +import medchem as mc + + +def test_num_atom_filter(): + data = dm.data.freesolv() + data = data.iloc[:10] + input_list = data["smiles"].apply(dm.to_mol).tolist() + + passing_idx = [i for i, m in enumerate(input_list) if m.GetNumAtoms() < 20] + idx = mc.functional.num_atom_filter(input_list, max_atoms=20, return_idx=True) + + assert idx.tolist() == passing_idx + + +def test_ring_infraction_filter(): + smiles_with_issues = [ + # none + "Nc1noc2cc(-c3noc(C(F)(F)F)n3)ccc12", + # hologenicity, atom_list_filter, ring_infraction + "Nc1noc2cc(-c3noc(n3)C(Cl)(Cl)Cl)c(Cl)c(B3C=C3)c12", + # num_atom_filter + "C[C@H](Nc1ncc(-c2noc(C(F)(F)F)n2)cc1Cl)c1ccncc1", + # macrocycle, num_atom_filter + "NC1=NOC2=CC(C3=NOC(=N3)C(F)(F)F)=C3CCCCCCCC3=C12", + # ring infraction, macrocycle at 10, num_atom_filter at 20 + "Nc1noc2c(cc(cc12)C1NCO1)C1CCCCCCCCC1", + ] + + out = mc.functional.ring_infraction_filter(smiles_with_issues, return_idx=True) + out = list(out) + assert [0, 2, 3] == out + + +def test_macrocycle_filter(): + smiles_with_issues = [ + # none + "Nc1noc2cc(-c3noc(C(F)(F)F)n3)ccc12", + # hologenicity, atom_list_filter, ring_infraction + "Nc1noc2cc(-c3noc(n3)C(Cl)(Cl)Cl)c(Cl)c(B3C=C3)c12", + # num_atom_filter + "C[C@H](Nc1ncc(-c2noc(C(F)(F)F)n2)cc1Cl)c1ccncc1", + # macrocycle, num_atom_filter + "NC1=NOC2=CC(C3=NOC(=N3)C(F)(F)F)=C3CCCCCCCC3=C12", + # ring infraction, macrocycle at 10, num_atom_filter at 20 + "Nc1noc2c(cc(cc12)C1NCO1)C1CCCCCCCCC1", + ] + + out = mc.functional.macrocycle_filter(smiles_with_issues, max_cycle_size=7, return_idx=False) + out = list(out) + assert out == [True, True, True, False, False] + + +def test_atom_list_filter(): + smiles_with_issues = [ + # none + "Nc1noc2cc(-c3noc(C(F)(F)F)n3)ccc12", + # hologenicity, atom_list_filter, ring_infraction + "Nc1noc2cc(-c3noc(n3)C(Cl)(Cl)Cl)c(Cl)c(B3C=C3)c12", + # num_atom_filter + "C[C@H](Nc1ncc(-c2noc(C(F)(F)F)n2)cc1Cl)c1ccncc1", + # macrocycle, num_atom_filter + "NC1=NOC2=CC(C3=NOC(=N3)C(F)(F)F)=C3CCCCCCCC3=C12", + # ring infraction, macrocycle at 10, num_atom_filter at 20 + "Nc1noc2c(cc(cc12)C1NCO1)C1CCCCCCCCC1", + ] + + out = mc.functional.atom_list_filter(smiles_with_issues, unwanted_atom_list=["B"], return_idx=True) + out = list(out) + assert [0, 2, 3, 4] == out + + +def test_halogenicity_filter(): + smiles_with_issues = [ + # none + "Nc1noc2cc(-c3noc(C(F)(F)F)n3)ccc12", + # hologenicity, atom_list_filter, ring_infraction + "Nc1noc2cc(-c3noc(n3)C(Cl)(Cl)Cl)c(Cl)c(B3C=C3)c12", + # num_atom_filter + "C[C@H](Nc1ncc(-c2noc(C(F)(F)F)n2)cc1Cl)c1ccncc1", + # macrocycle, num_atom_filter + "NC1=NOC2=CC(C3=NOC(=N3)C(F)(F)F)=C3CCCCCCCC3=C12", + # ring infraction, macrocycle at 10, num_atom_filter at 20 + "Nc1noc2c(cc(cc12)C1NCO1)C1CCCCCCCCC1", + ] + + out = mc.functional.halogenicity_filter(smiles_with_issues, return_idx=True) + out = list(out) + assert [0, 2, 3, 4] == out + + +def test_n_stereo_center(): + smiles = [ + "CC(C)(O)C(O)[C@H](O)C(O)CO", # fail, too many undefined stereocenter + "C1[C@H]([C@@H]([C@H]([C@H](O1)O)O)O)O", # fail, too many stereocenter + "C[C@@H]1CC[C@H]([C@@H](C1)O)C(C)C", # pass + ] + + out = mc.functional.num_stereo_center_filter(smiles, return_idx=False) + out = list(out) + assert [False, False, True] == out + + +def test_symmetry_filter(): + symmetric_mols = [ + "O=C(O)c1cc(-n2ccnc2)cc(-n2ccnc2)c1", + "CC(C)(C)[C@@H]1COC(C2(C3=N[C@H](C(C)(C)C)CO3)Cc3ccccc3C2)=N1", + "c1ccc2oc(-c3ccc(-c4nc5ccccc5o4)s3)nc2c1", + "Cc1cc(O)c(C(c2ccc(Cl)cc2)c2c(O)cc(C)[nH]c2=O)c(=O)[nH]1", + ] + + random_mols = [ + "CCn1cc(S(=O)(=O)n2cc(Cl)cn2)cn1", + "Cc1cc(C)c(S(=O)(=O)Nc2cc(C)ccc2C)c(C)c1", + "c1ccc(CCC2CCN(CCC3COCCO3)CC2)cc1", + "CCCC1CCC([C@H]2CC[C@H](C(=O)O)CC2)CC1", + ] + symmetric = mc.functional.symmetry_filter(symmetric_mols, symmetry_threshold=0.8) + assert symmetric.tolist() == [False] * len(symmetric) + + not_symmetric = mc.functional.symmetry_filter(random_mols, symmetry_threshold=0.8) + assert not_symmetric.tolist() == [True] * len(not_symmetric) diff --git a/tests_OLD/test_lead_filter.py b/tests_OLD/test_lead_filter.py deleted file mode 100644 index 4a8c86e..0000000 --- a/tests_OLD/test_lead_filter.py +++ /dev/null @@ -1,180 +0,0 @@ -import unittest as ut -import datamol as dm -import pandas as pd -import numpy as np -from medchem import catalog -from medchem.filter import lead -from medchem.alerts import AlertFilters, NovartisFilters -from medchem.groups import ChemicalGroup - -from rdkit.Chem.Descriptors import MolWt - - -class Test_LeadFilter(ut.TestCase): - data = dm.data.freesolv() - screening_smiles_set = [ - # smiles, covalent, special, severity - ("Nc1nc(Sc2cccc(Cl)c2)c(C#N)c(c3ccc4OCCOc4c3)c1C#N", 1, 0, 10), - ("CCOC(=O)NC1(NCc2ccccc2)Oc3ccccc3O1", 0, 0, 10), - ("Oc1nnc(SCC(=O)N2CCOCC2)n1c3ccccc3", 0, 0, 1), - ("Fc1ccc(C(=O)NNC(=O)c2ccc(cc2)n3cnnn3)c(F)c1", 0, 0, 0), - ( - "COc1cc(Cl)ccc1N=C(S)N(CCN2CCOCC2)C3CCN(CC3)C(=O)C", - float("nan"), - float("nan"), - 0, - ), - ("CCCCCCCCCCCCCNC(=O)[C@H](CO)\\N=C\\c1ccccc1", 0, 0, 2), - ] - bredt_test_set = [ - "C1C2=C1C2", - "C1CC=C=CC1", - "C1C2CCCC=C12", - "C1C2=C1CCCC2", # is ok - "C1CC2=CCC1C2", - "C1CC2=CC1CC2", - "C1CC2CCC1C=C2", # is ok - "C1CC2=CCC1CC2", - ] + list(data.smiles.values[:10]) - - def test_alert_filter(self): - ok_mols = lead.alert_filter( - self.data.smiles.values, alerts=["Glaxo", "BMS"], n_jobs=2, return_idx=False - ) - ok_index_2 = lead.alert_filter( - self.data.smiles.values, alerts=["Glaxo", "bms"], n_jobs=2, return_idx=True - ) - self.assertEqual(sum(ok_mols), len(ok_index_2)) - self.assertTrue(sum(ok_mols) == 503) - - # test filter object - rule_dict = dict(MW=[100, 200]) - ok_index_3 = lead.alert_filter( - self.data.smiles.values, - alerts=["Glaxo", "bms"], - n_jobs=2, - rule_dict=rule_dict, - return_idx=True, - ) - self.assertTrue( - all( - (x >= 100 and x <= 200) - for x in self.data.iloc[ok_index_3].smiles.apply(dm.to_mol).apply(MolWt) - ) - ) - al_filter = AlertFilters(alerts_set=["BMS"]) - df = al_filter(self.data.smiles.values[:10]) - expected_cols = set(["_smiles", "status", "reasons", "MW", "LogP", "HBD", "HBA", "TPSA"]) - self.assertTrue(len(expected_cols.intersection(set(df.columns))) == len(expected_cols)) - - def test_catalog_filter(self): - idx = lead.catalog_filter( - self.data.smiles.values, - catalogs=["pains"], - return_idx=False, - ) - self.assertTrue(sum(idx) == 632) - idx = lead.catalog_filter( - self.data.smiles.values, - catalogs=["brenk"], - return_idx=True, - ) - # brenk should filter alkyl halide - self.assertTrue(640 not in idx) - # ensure not error is raised on this - for catalog_name in catalog.list_named_catalogs(): - if catalog_name == "nibr": - with self.assertRaises(ValueError): - lead.catalog_filter(self.data.smiles.values, catalogs=[catalog_name]) - else: - lead.catalog_filter(self.data.smiles.values, catalogs=[catalog_name]) - - def test_screening_filter(self): - df = pd.DataFrame.from_records( - self.screening_smiles_set, - columns=["smiles", "covalent", "special_mol", "severity"], - ) - idx = lead.screening_filter(df.smiles, n_jobs=2, max_severity=5, return_idx=True) - expected_idx = list(df[df.severity < 5].index) - self.assertEqual(len(set(idx).difference(set(expected_idx))), 0) - - nov_filters = NovartisFilters() - out = nov_filters(df.smiles) - expected_cols = set( - [ - "_smiles", - "status", - "reasons", - "severity", - "covalent", - "special_mol", - ] - ) - self.assertTrue(len(expected_cols.intersection(set(out.columns))) == len(expected_cols)) - np.testing.assert_array_equal(df.severity, out.severity) - np.testing.assert_array_equal(df.covalent, out.covalent) - np.testing.assert_array_equal(df.special_mol, out.special_mol) - - def test_bredt_filter(self): - """Test whether the input molecules pass all bredt filters""" - - output = lead.bredt_filter(self.bredt_test_set, n_jobs=2) - expected_results = [ - False, - False, - False, - True, - False, - False, - True, - False, - True, - True, - True, - True, - True, - True, - True, - True, - True, - True, - ] - np.testing.assert_array_equal(output, expected_results) - - def test_chemical_groups(self): - """Test whether the input molecules contains any privileged scaffold""" - - c_group = ChemicalGroup(groups=["privileged_scaffolds"]) - mols = self.data.smiles.values - output = lead.chemical_group_filter(mols, c_group) - self.assertEqual(len(output), len(mols)) - self.assertEqual(sum(output), 622) - - def test_rules_filter(self): - """Test rule filtering""" - out = lead.rules_filter( - self.data.smiles.values, - rules=["rule_of_five", "rule_of_gsk_4_400"], - n_jobs=2, - ) - self.assertEqual(sum(out), 598) - - def test_protecting_group_filters(self): - """Test rule filtering""" - smiles = [ - # this matches - "C1=CC=C(C=C1)C[C@@H](C(=O)O)NC(=O)OCC2C3=CC=CC=C3C4=CC=CC=C24", - "COc1ccc2nc(NC(=O)OC(C)(C)C)cc([C@H](O)[C@H]3C[C@@H]4CCN3C[C@@H]4C=C)c2c1", - ] - smiles += list(self.data.smiles.values[:10]) - - out = list( - lead.protecting_groups_filter( - smiles, - ) - ) - self.assertListEqual([False] * 2 + [True] * 10, out) - - -if __name__ == "__main__": - ut.main() From 75a984cbb92f3fd11f631c5e684161bf07b23fa1 Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Sun, 9 Jul 2023 19:29:30 -0400 Subject: [PATCH 27/31] query system done --- docs/api/medchem.query.md | 6 + docs/tutorials/Medchem_Query_Language.ipynb | 1093 ++++++++++++++--- medchem/__init__.py | 2 + medchem/query/__init__.py | 5 + .../query/eval.py => medchem/query/_eval.py | 117 +- .../parser.py => medchem/query/_parser.py | 19 +- medchem_OLD/filter/__init__.py | 0 medchem_OLD/filter/generic.py | 378 ------ medchem_OLD/query/__init__.py | 3 - tests/test_query.py | 257 ++++ tests_OLD/test_generic_filter.py | 81 -- tests_OLD/test_query.py | 236 ---- 12 files changed, 1294 insertions(+), 903 deletions(-) create mode 100644 docs/api/medchem.query.md create mode 100644 medchem/query/__init__.py rename medchem_OLD/query/eval.py => medchem/query/_eval.py (83%) rename medchem_OLD/query/parser.py => medchem/query/_parser.py (89%) delete mode 100644 medchem_OLD/filter/__init__.py delete mode 100644 medchem_OLD/filter/generic.py delete mode 100644 medchem_OLD/query/__init__.py create mode 100644 tests/test_query.py delete mode 100644 tests_OLD/test_generic_filter.py delete mode 100644 tests_OLD/test_query.py diff --git a/docs/api/medchem.query.md b/docs/api/medchem.query.md new file mode 100644 index 0000000..668db96 --- /dev/null +++ b/docs/api/medchem.query.md @@ -0,0 +1,6 @@ +# `medchem.query` + +::: medchem.query.QueryFilter +::: medchem.query.QueryOperator +::: medchem.query.EvaluableQuery +::: medchem.query.QueryParser diff --git a/docs/tutorials/Medchem_Query_Language.ipynb b/docs/tutorials/Medchem_Query_Language.ipynb index 8932f1f..b33fb8f 100644 --- a/docs/tutorials/Medchem_Query_Language.ipynb +++ b/docs/tutorials/Medchem_Query_Language.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "cc35111a-d3a8-4313-962c-290bbf563f35", "metadata": {}, "outputs": [], @@ -18,7 +18,7 @@ "import datamol as dm\n", "import pandas as pd\n", "\n", - "import medchem\n" + "import medchem as mc" ] }, { @@ -29,182 +29,947 @@ "source": [ "## Query system\n", "\n", - "Medchem provides a query system that can be used for filtering molecules based on a constructed query made of statement compliant with the provided grammar.\n", - "\n", - "Detailed information about the query system can be seen in the documentation" + "Medchem provides a query system that can be used for filtering molecules based on a constructed query made of statement compliant with the provided grammar." + ] + }, + { + "cell_type": "markdown", + "id": "37ce1054-5459-4407-95d3-ed762f109843", + "metadata": {}, + "source": [ + "### Example #1" ] }, { "cell_type": "code", - "execution_count": null, - "id": "e554bc27-1fb9-4555-a687-d771aeeab00f", + "execution_count": 18, + "id": "9849a486-9bc7-40b1-8177-a2325089aa0c", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "# from medchem.query import QueryFilter\n", - "\n", - "# # note that whitespace and newlines are ignored in the query\n", - "# query = \"\"\"\n", - "# (\n", - "# HASPROP(\"tpsa\" < 80) AND HASPROP(\"clogp\" < 3) AND ! HASALERT(\"pains\")\n", - "# ) \n", - "# OR \n", - "# (\n", - "# HASPROP(\"n_heavy_atoms\" >= 10) \n", - "# AND \n", - "# (\n", - "# HASGROUP(\"Alcohols\") \n", - "# OR \n", - "# HASSUBSTRUCTURE(\"[CX3](=[OX1])O\", True, 1)\n", - "# )\n", - "# )\n", - "# \"\"\"\n", - "\n", - "# data = dm.freesolv()\n", - "# query_filter = QueryFilter(query)\n", - "# out = query_filter(data.smiles, n_jobs=-1, progress=True)\n", - "\n", - "# any(out)\n", - "\n", - "# ---\n", - "\n", - "\n", - "\n", - "# from typing import List\n", - "# import datamol as dm\n", - "# from medchem.query.eval import QueryFilter\n", + "# note that whitespace and newlines are ignored in the query\n", + "query = \"\"\"\n", + "(\n", + " HASPROP(\"tpsa\" < 80) AND HASPROP(\"clogp\" < 3) AND ! HASALERT(\"pains\")\n", + ") \n", + " OR \n", + "(\n", + " HASPROP(\"n_heavy_atoms\" >= 10) \n", + " AND \n", + " (\n", + " HASGROUP(\"Alcohols\") \n", + " OR \n", + " HASSUBSTRUCTURE(\"[CX3](=[OX1])O\", True, 1)\n", + " )\n", + ")\n", + "\"\"\"\n", "\n", + "data = dm.freesolv()\n", + "data = data.iloc[:12]\n", "\n", - "# query = \"\"\"HASPROP(\"tpsa\" < 120) AND HASSUBSTRUCTURE(\"[OH]\", True)\"\"\"\n", - "# chemical_filter = QueryFilter(query, parser=\"lalr\")\n", + "data[\"mol\"] = data[\"smiles\"].apply(dm.to_mol)\n", "\n", - "# mols = dm.data.cdk2().mol[:10]\n", - "# dm.to_image(mols, n_cols=3)\n", - "\n", - "# chemical_filter(mols, n_jobs=1)\n", - "\n", - "# chemical_filter\n", - "\n", - "# queries = [\n", - "# \"\"\"HASPROP(\"tpsa\" > 120) OR ! HASSUBSTRUCTURE(\"CO\")\"\"\", # A OR ! B\n", - "# \"\"\"(HASPROP(\"tpsa\" > 120)) OR ! (HASSUBSTRUCTURE(\"CO\"))\"\"\", # (A) OR ! (B)\n", - "# \"\"\"(HASPROP(\"tpsa\" > 120) OR ! HASSUBSTRUCTURE(\"CO\"))\"\"\", # (A OR ! B)\n", - "# \"\"\"HASPROP(\"tpsa\" > 120) OR NOT HASSUBSTRUCTURE(\"CO\")\"\"\", # A OR NOT B\n", - "# \"\"\"HASPROP(\"tpsa\" > 120) OR ~HASSUBSTRUCTURE(\"CO\")\"\"\", # A OR ~B\n", - "# \"\"\"HASPROP(\"tpsa\" > 120) OR ! HASSUBSTRUCTURE(\"CO\")\"\"\", # change in space\n", - "# ]\n", - "\n", - "# from lark import Lark, Transformer, v_args\n", - "# from medchem.utils.loader import get_grammar\n", - "# from medchem.query.parser import QueryParser\n", - "\n", - "# grammar = Lark(get_grammar(as_string=True), parser=\"lalr\", transformer=QueryParser())\n", - "\n", - "# queries = [\n", - "# # complex query\n", - "# \"\"\"(HASPROP(\"tpsa\" < 100) AND HASPROP(\"clogp\" < 3) AND ! HASALERT(\"pains\")) OR (HASPROP(\"n_heavy_atoms\" >= 10) AND (HASGROUP(\"Alcohols\") OR HASSUBSTRUCTURE(\"[CX3](=[OX1])O\", True, 1)))\"\"\",\n", - "# # is a rewriting of the above\n", - "# \"\"\"(HASPROP(\"tpsa\" < 100) AND HASPROP(\"clogp\" < 3) AND ! HASALERT(\"pains\")) OR (HASPROP(\"n_heavy_atoms\" >= 10) AND (HASGROUP(\"Alcohols\") OR HASSUBSTRUCTURE(\"[CX3](=[OX1])O\", True, min, 1)))\"\"\",\n", - "# # is a rewriting of the above with spacing and a differentm yet equivalent bool expression\n", - "# \"\"\"\n", - "# (\n", - "# HASPROP(\"tpsa\" < 100) \n", - "# AND \n", - "# HASPROP(\"clogp\" < 3) \n", - "# AND \n", - "# ! HASALERT(\"pains\")\n", - "# ) \n", - "# OR \n", - "# (\n", - "# HASPROP(\"n_heavy_atoms\" >= 10) \n", - "# AND \n", - "# HASGROUP(\"Alcohols\")\n", - "# ) \n", - "# OR \n", - "# (\n", - "# HASPROP(\"n_heavy_atoms\" >= 10) \n", - "# AND \n", - "# HASSUBSTRUCTURE(\"[CX3](=[OX1])O\", True)\n", - "# )\n", - "# \"\"\",\n", - "# # always true\n", - "# \"\"\"(HASPROP(\"tpsa\" < 100) AND HASPROP(\"clogp\" < 3)) OR TRUE\"\"\",\n", - "# # always false\n", - "# \"\"\"(HASPROP(\"tpsa\" < 100) AND HASPROP(\"clogp\" < 3)) AND False\"\"\",\n", - "# ]\n", - "# out = [grammar.parse(queries[i]) for i in range(len(queries))]\n", - "\n", - "# out\n", - "\n", - "# [out[i] == out[0] for i in range(len(out))]\n", - "\n", - "# bad_queries = [\n", - "# \"(((HASPROP(tpsa > 120 ) | HASSUBSTRUCTURE(c1ccccc1)) AND NOT HASALERT(pains)) OR HASSUBSTRUCTURE([OH]))\",\n", - "# \"\"\"HASPROP(\"tpsa\" > 120 ) OR OR HASSUPERSTRUCTURE(\"Cc1cc2ccccc2cc1C\")\"\"\",\n", - "# \"\"\"HASPROP(\"tpsa\" > 120 ) OR HASSUPERSTRUCTURE(\"Cc1cc2ccccc2cc1C\") OR NOT TRUE\"\"\",\n", - "# \"\"\"HASPROP(\"tpsa\" > 120 ) OR HASSUPERSTRUCTURE(\"Cc1cc2ccccc2cc1C\") OR true\"\"\",\n", - "# \"\"\"HASPROP(\"tpsa\" > 120 ) OR HASSUPERSTRUCTURE(\"Cc1cc2ccccc2cc1C\") TRUE\"\"\", # wrong syntax, UnexpectedCharacters\n", - "# \"\"\"HASPROP(\"tpsa\" > 120 ) OR (HASSUPERSTRUCTURE(\"Cc1cc2ccccc2cc1C\")\"\"\",\n", - "# \"\"\"HASPROP(\"tpsa\" > 120 ) OR () OR HASSUPERSTRUCTURE(\"Cc1cc2ccccc2cc1C\")\"\"\",\n", - "# \"\"\"HASPROP(\"tpsa\" > 120) OR HASSUBSTRUCTURE(\"[OH]\", True, >, 3)\"\"\",\n", - "# \"\"\"HASPROP(\"tpsa\" + 120) OR HASSUBSTRUCTURE(\"[OH]\")\"\"\",\n", - "# \"\"\"HASPROP(\"tpsa\", >, 120) OR HASSUBSTRUCTURE(\"[OH]\")\"\"\",\n", - "# \"\"\"HASPROP(\"tpsa\" > 120) OR HASSUBSTRUCTURE(\"[OH]\" True max 3)\"\"\",\n", - "# \"\"\"HASPROP(\"tpsa\" > 120) OR HASSUBSTRUCTURE(\"[OH]\", True, 3)\"\"\",\n", - "# \"\"\"(\n", - "# HASPROP(\"tpsa\" < 100) AND \n", - "# HASPROP(\"clogp\" < 3) AND \n", - "# ! HASALERT(\"pains\")\n", - "# ) \n", - "# OR \n", - "# (\n", - "# HASPROP(\"n_heavy_atoms\" >= 10) AND \n", - "# HASGROUP(\"Alcohols\")\n", - "# ) \n", - "# OR \n", - "# (\n", - "# HASPROP(\"n_heavy_atoms\" >= 10) AND \n", - "# HASSUBSTRUCTURE(\"[CX3](=[OX1])O\", True)\n", - "# )\"\"\",\n", - "# \"\"\"(HASPROP(\"tpsa\" < 100) AND HASPROP(\"clogp\" < 3) AND ! HASALERT(\"pains\")) OR (HASPROP(\"n_heavy_atoms\" >= 10) AND (HASGROUP(\"Alcohols\") OR HASSUBSTRUCTURE(\"[CX3](=[OX1])O\", True, min, 1)))\"\"\",\n", - "# ]\n", - "\n", - "# from medchem.query import QueryOperator\n", - "# df = dm.cdk2()\n", - "# df[\"tpsa\"] = df[\"mol\"].apply(dm.descriptors.tpsa)\n", - "# df[\"clogp\"] = df[\"mol\"].apply(dm.descriptors.clogp)\n", - "# df[\"n_heavy_atoms\"] = df[\"mol\"].apply(dm.descriptors.n_heavy_atoms)\n", - "# df[\"has_carboxyl\"] = df[\"mol\"].apply(\n", - "# lambda x: QueryOperator.hassubstructure(x, \"[CX3](=[OX1])O\", True)\n", - "# )\n", - "# df[\"has_pains\"] = df[\"mol\"].apply(lambda x: QueryOperator.hasalert(x, \"pains\"))\n", - "# df[\"has_alcohol\"] = df[\"mol\"].apply(\n", - "# lambda x: QueryOperator.hasgroup(x, \"Alcohols\")\n", - "# )\n", - "\n", - "# tmp = df.query(\n", - "# \"((tpsa < 100) & (clogp < 3) & ~has_pains) | (n_heavy_atoms >= 10 & (has_carboxyl | has_alcohol))\"\n", - "# )\n", - "# df[\"results\"] = False\n", - "# df.loc[tmp.index, \"results\"] = True\n", - "\n", - "# expected_complex_result.index\n", - "\n", - "# mol = dm.to_mol(\"Oc1cscc1-c1ccc(OC)cc1\") # contains tiophene hydroxy should match pains\n", - "# substruct1 = dm.to_mol(\"CO\")\n", - "# mol.GetSubstructMatches(substruct1, uniquify=True)\n", - "\n", - "# from medchem.rules.rule_filter import RuleFilters\n", + "dm.to_image(data[\"mol\"].tolist(), n_cols=4, mol_size=(300, 150))" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "f7a4b6a0-09bb-4e67-a0b4-1586f75b0d0b", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Loading Mols: 0%| | 0/12 [00:00\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = dm.data.cdk2()\n", + "data = data.iloc[:8]\n", "\n", - "# from medchem.groups import _get_functional_group_map\n", + "dm.to_image(data[\"mol\"].tolist(), n_cols=4, mol_size=(300, 150))" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "a117253f-2730-4362-83b6-9553c499b898", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((`fn(getprop, prop='tpsa')` < 120.0) and `fn(hassubstructure, query='[OH]', is_smarts=True, operator=None, limit=None)`)" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "query = \"\"\"HASPROP(\"tpsa\" < 120) AND HASSUBSTRUCTURE(\"[OH]\", True)\"\"\"\n", + "chemical_filter = mc.query.QueryFilter(query, parser=\"lalr\")\n", "\n", - "# d = _get_functional_group_map()\n", + "chemical_filter" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "d4847702-f2f1-4ff1-b830-124ab5db3acb", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Loading Mols: 0%| | 0/8 [00:00 str: return self.query @@ -337,7 +390,7 @@ def __repr__(self) -> str: def __call__( self, mols: List[Union[str, dm.Mol]], - scheduler="processes", + scheduler: str = "processes", n_jobs: int = -1, progress: bool = True, ): @@ -345,9 +398,9 @@ def __call__( Args: mols: list of input molecules to filter - n_jobs: whether to run job in parallel and number of jobs to consider. Defaults to -1. - scheduler: scheduler to use. Defaults to 'processes'. - progress: whether to show job progress. Defaults to True. + n_jobs: whether to run job in parallel and number of jobs to consider. + scheduler: scheduler to use. + progress: whether to show job progress. """ tqdm_kwargs = {} if progress: diff --git a/medchem_OLD/query/parser.py b/medchem/query/_parser.py similarity index 89% rename from medchem_OLD/query/parser.py rename to medchem/query/_parser.py index 877b7d3..7821493 100644 --- a/medchem_OLD/query/parser.py +++ b/medchem/query/_parser.py @@ -9,16 +9,17 @@ class QueryParser(Transformer): Note that you **SHOULD NOT HAVE TO INTERACT WITH THIS CLASS DIRECTLY**. Example: - >>> import medchem - >>> import lark - >>> QUERY_GRAMMAR = medchem.utils.loader.get_grammar(as_string=True) - >>> QUERY_PARSER = Lark(QUERY_GRAMMAR, parser="lalr", transformer=QueryParser()) - >>> # see how the string needs to be "quoted". This builds on the json quote requirements to avoid dealing with unwanted outcomes - >>> example = \"""(HASPROP("tpsa" > 120 ) | HASSUBSTRUCTURE("c1ccccc1")) AND NOT HASALERT("pains") OR HASSUBSTRUCTURE("[OH]", max)\""" - >>> t = QUERY_PARSER.parse(example) - >>> print(t) + ```python + import medchem + import lark + QUERY_GRAMMAR = medchem.utils.loader.get_grammar(as_string=True) + QUERY_PARSER = Lark(QUERY_GRAMMAR, parser="lalr", transformer=QueryParser()) + # see how the string needs to be "quoted". This builds on the json quote requirements to avoid dealing with unwanted outcomes + example = \"""(HASPROP("tpsa" > 120 ) | HASSUBSTRUCTURE("c1ccccc1")) AND NOT HASALERT("pains") OR HASSUBSTRUCTURE("[OH]", max)\""" + t = QUERY_PARSER.parse(example) + print(t) ((((`fn(getprop, prop='tpsa')` > 120.0) or `fn(hassubstructure, query='c1ccccc1', operator='None', limit=None, is_smarts=None)`) and not `fn(hasalert, alert='pains')`) or `fn(hassubstructure, query='[OH]', operator='max', limit=None, is_smarts=None)`) - + ``` """ @v_args(inline=True) diff --git a/medchem_OLD/filter/__init__.py b/medchem_OLD/filter/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/medchem_OLD/filter/generic.py b/medchem_OLD/filter/generic.py deleted file mode 100644 index 5e5ff62..0000000 --- a/medchem_OLD/filter/generic.py +++ /dev/null @@ -1,378 +0,0 @@ -from typing import Iterable -from typing import Optional -from typing import Callable -from typing import Union - -import itertools - -import numpy as np -import datamol as dm - -from rdkit.Chem import rdMolDescriptors # type: ignore - -from ..utils.graph import score_symmetry - - -def _generic_filter( - mols: Iterable[Union[str, dm.Mol]], - rejection_fn: Callable, - return_idx: bool = False, - n_jobs: Optional[int] = None, - progress: bool = False, - scheduler: Optional[str] = None, -): - """Apply any generic filter to a molecule - - Args: - mols: list of input molecules - rejection_fn: function to reject a molecule. Return True is the molecule is rejected - return_idx: whether to return index or a boolean mask - n_jobs: number of parallel job to run. Sequential by default - progress: whether to show progress bar - scheduler: joblib scheduler to use - - Returns: - filtered_mask: boolean array (or index array) where true means the molecule is ok. - """ - if isinstance(mols[0], str): - mols = dm.parallelized( - dm.to_mol, - mols, - n_jobs=n_jobs, - progress=progress, - tqdm_kwargs=dict(desc="Macrocyle match", leave=False), - ) - - toxic = dm.parallelized( - rejection_fn, - mols, - n_jobs=n_jobs, - scheduler=scheduler, - progress=progress, - tqdm_kwargs=dict(desc="Match", leave=False), - ) - - filtered_idx = [i for i, bad in enumerate(toxic) if not bad] - if return_idx: - return filtered_idx - - return np.bitwise_not(toxic) - - -def macrocycle_filter( - mols: Iterable[Union[str, dm.Mol]], - max_cycle_size: int = 10, - return_idx: bool = False, - n_jobs: Optional[int] = None, - progress: bool = False, - scheduler: Optional[str] = None, -): - """Find molecules that do not infringe the strict maximum cycle size. - - Args: - mols: list of input molecules - max_cycle_size: strict maximum macrocycle size - return_idx: whether to return index or a boolean mask - n_jobs: number of parallel job to run. Sequential by default - progress: whether to show progress bar - scheduler: joblib scheduler to use - - Returns: - filtered_mask: boolean array (or index array) where true means the molecule is ok. - - """ - - def reject_fn(mol): - if mol is None: - return True - rinfo = mol.GetRingInfo().AtomRings() - return any(len(r) >= max_cycle_size for r in rinfo) - - return _generic_filter( - mols, - reject_fn, - return_idx=return_idx, - n_jobs=n_jobs, - progress=progress, - scheduler=scheduler, - ) - - -def atom_list_filter( - mols: Iterable[Union[str, dm.Mol]], - unwanted_atom_list: Optional[Iterable] = None, - wanted_atom_list: Optional[Iterable] = None, - return_idx: bool = False, - n_jobs: Optional[int] = None, - progress: bool = False, - scheduler: Optional[str] = None, -): - """Find molecule without any atom from a set of unwanted atom symbols - and with all atoms in the set of desirable atom list - - Args: - mols: list of input molecules - unwanted_atom_list: list of undesirable atom symbol - wanted_atom_list: list of desirable atom symbol - return_idx: whether to return index or a boolean mask - n_jobs: number of parallel job to run. Sequential by default - progress: whether to show progress bar - scheduler: joblib scheduler to use - - Returns: - filtered_mask: boolean array (or index array) where true means the molecule is ok. - """ - unwanted_atom_list = unwanted_atom_list or [] - wanted_atom_list = wanted_atom_list or [] - - def reject_fn(mol): - if mol is None: - return True - for atom in mol.GetAtoms(): - cur_symb = atom.GetSymbol() - if cur_symb in unwanted_atom_list or ( - len(wanted_atom_list) > 0 and cur_symb not in wanted_atom_list - ): - return True - return False - - return _generic_filter( - mols, - reject_fn, - return_idx=return_idx, - n_jobs=n_jobs, - progress=progress, - scheduler=scheduler, - ) - - -def ring_infraction_filter( - mols: Iterable[Union[str, dm.Mol]], - hetcycle_min_size: int = 4, - return_idx: bool = False, - n_jobs: Optional[int] = None, - progress: bool = False, - scheduler: Optional[str] = None, -): - """ - Find molecules that have a ring infraction filter. - Returning True means the molecule is fine - - Args: - mols: list of input molecules - hetcycle_min_size: Minimum ring size before more than 1 hetero atom or any non single bond is allowed. - This is a *strict threshold (>)* - return_idx: whether to return index or a boolean mask - n_jobs: number of parallel job to run. Sequential by default - progress: whether to show progress bar - scheduler: joblib scheduler to use - - Returns: - filtered_mask: boolean array (or index array) where true means the molecule is ok. - """ - - ring_allene = dm.from_smarts("[R]=[R]=[R]") - double_bond_small_ring = dm.from_smarts("[r3,r4]=[r3,r4]") - - def reject_fn(mol): - if mol is None: - return True - rejected = mol.HasSubstructMatch(ring_allene) or mol.HasSubstructMatch(double_bond_small_ring) - if rejected: - return True - rinfo = mol.GetRingInfo() - bond_rings = rinfo.BondRings() - for r in bond_rings: - r_bonds = [mol.GetBondWithIdx(b) for b in r] - r_bond_types = [b.GetBondType() for b in r_bonds] - r_atom_content = set( - itertools.chain( - *[(b.GetBeginAtom().GetSymbol(), b.GetEndAtom().GetSymbol()) for b in r_bonds] - ) - ) - n_ring_heteroatoms = sum([at not in ["C", "H"] for at in r_atom_content]) - if len(r) <= hetcycle_min_size and ( - n_ring_heteroatoms > 1 or any(btype != dm.SINGLE_BOND for btype in r_bond_types) - ): - # too many heteroatoms in low ring size OR - # alkene, allen or aromatic in small rings - return True - return False - - return _generic_filter( - mols, - reject_fn, - return_idx=return_idx, - n_jobs=n_jobs, - progress=progress, - scheduler=scheduler, - ) - - -def num_atom_filter( - mols: Iterable[Union[str, dm.Mol]], - min_atoms: Optional[int] = None, - max_atoms: Optional[int] = None, - return_idx: bool = False, - n_jobs: Optional[int] = None, - progress: bool = False, - scheduler: Optional[str] = None, -): - """ - Find a molecule that match the atom number constraints - Returning True means the molecule is fine - - Args: - mols: list of input molecules - min_atoms: strict minimum number of atoms (atoms > min_atoms) - max_atoms: strict maximum number of atoms (atoms < max_atoms) - return_idx: whether to return index or a boolean mask - n_jobs: number of parallel job to run. Sequential by default - progress: whether to show progress bar - scheduler: joblib scheduler to use - - Returns: - filtered_mask: boolean array (or index array) where true means the molecule is ok. - """ - - def reject_fn(mol): - if mol is None: - return True - num_atoms = mol.GetNumAtoms() - return (min_atoms is not None and num_atoms <= min_atoms) or ( - max_atoms is not None and num_atoms >= max_atoms - ) - - return _generic_filter( - mols, - reject_fn, - return_idx=return_idx, - n_jobs=n_jobs, - progress=progress, - scheduler=scheduler, - ) - - -def num_stereo_center_filter( - mols: Iterable[Union[str, dm.Mol]], - max_stereo_centers: Optional[int] = 4, - max_undefined_stereo_centers: Optional[int] = 2, - return_idx: bool = False, - n_jobs: Optional[int] = None, - progress: bool = False, - scheduler: Optional[str] = None, -): - """ - Find a molecule that match the number of stereo center constraints. - Returning True means the molecule is fine - - Args: - mols: list of input molecules - max_stereo_center: strict maximum number of stereo centers (<). Default is 4 - max_undefined_stereo_centers: strict maximum number of undefined stereo centers (<). Default is 2 - return_idx: whether to return index or a boolean mask - n_jobs: number of parallel job to run. Sequential by default - progress: whether to show progress bar - scheduler: joblib scheduler to use - - Returns: - filtered_mask: boolean array (or index array) where true means the molecule is ok. - """ - - def reject_fn(mol): - if mol is None: - return True - return (dm.descriptors.n_stereo_centers(mol) >= max_stereo_centers) or ( - rdMolDescriptors.CalcNumUnspecifiedAtomStereoCenters(mol) >= max_undefined_stereo_centers - ) - - return _generic_filter( - mols, - reject_fn, - return_idx=return_idx, - n_jobs=n_jobs, - progress=progress, - scheduler=scheduler, - ) - - -def halogenicity_filter( - mols: Iterable[Union[str, dm.Mol]], - thresh_F: int = 6, - thresh_Br: int = 3, - thresh_Cl: int = 3, - return_idx: bool = False, - n_jobs: Optional[int] = None, - progress: bool = False, - scheduler: Optional[str] = None, -): - """Find molecule that do not exceed halogen threshold. These thresholds are: - - Args: - mols: list of input molecules - thresh_F: maximum number of fluorine - thresh_Br: maximum number of bromine - thresh_Cl: maximum number of chlorine - return_idx: whether to return index or a boolean mask - n_jobs: number of parallel job to run. Sequential by default - progress: whether to show progress bar - scheduler: joblib scheduler to use - - Returns: - filtered_mask: boolean array (or index array) where true means the molecule is ok. - """ - fluorine_smarts = dm.from_smarts("[F]") - bromine_smarts = dm.from_smarts("[Br]") - chlorine_smarts = dm.from_smarts("[Cl]") - - def reject_fn(mol): - if mol is None: - return True - fluorine_saturation = len(mol.GetSubstructMatches(fluorine_smarts, uniquify=True)) > thresh_F - bromine_saturation = len(mol.GetSubstructMatches(bromine_smarts, uniquify=True)) > thresh_Br - chlorine_saturation = len(mol.GetSubstructMatches(chlorine_smarts, uniquify=True)) > thresh_Cl - return fluorine_saturation or bromine_saturation or chlorine_saturation - - return _generic_filter( - mols, - reject_fn, - return_idx=return_idx, - n_jobs=n_jobs, - progress=progress, - scheduler=scheduler, - ) - - -def symmetry_filter( - mols: Iterable[Union[str, dm.Mol]], - symmetry_threshold: float = 0.8, - return_idx: bool = False, - n_jobs: Optional[int] = None, - progress: bool = False, - scheduler: Optional[str] = None, -): - """Find molecules that are not symmetrical, given a symmetry threshold - - Args: - mols: list of input molecules - symmetry_threshold: threshold to consider a molecule highly symmetrical - return_idx: whether to return index or a boolean mask - n_jobs: number of parallel job to run. Sequential by default - progress: whether to show progress bar - scheduler: joblib scheduler to use - - Returns: - filtered_mask: boolean array (or index array) where true means the molecule is ok. - """ - - def reject_fn(mol): - return score_symmetry(mol) > symmetry_threshold - - return _generic_filter( - mols, - reject_fn, - return_idx=return_idx, - n_jobs=n_jobs, - progress=progress, - scheduler=scheduler, - ) diff --git a/medchem_OLD/query/__init__.py b/medchem_OLD/query/__init__.py deleted file mode 100644 index 8e29338..0000000 --- a/medchem_OLD/query/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from .eval import QueryFilter -from .eval import QueryOperator -from .parser import QueryParser diff --git a/tests/test_query.py b/tests/test_query.py new file mode 100644 index 0000000..4bde429 --- /dev/null +++ b/tests/test_query.py @@ -0,0 +1,257 @@ +import pytest + +import operator + +import datamol as dm +import numpy as np + +from lark import Lark, exceptions + +from medchem.query import QueryParser +from medchem.query import QueryOperator +from medchem.query import QueryFilter +from medchem.query import EvaluableQuery + +from medchem.utils.loader import get_grammar + + +def get_test_grammar(): + return Lark(get_grammar(as_string=True), parser="lalr", transformer=QueryParser()) + + +def test_language(): + grammar = get_test_grammar() + + bad_queries = [ + "HASPROP(tpsa > 120 )", # missing quotes, UnexpectedCharacters + """HASPROP("tpsa" > 120 ) OR OR HASSUPERSTRUCTURE("Cc1cc2ccccc2cc1C")""", # wrong syntax with 2 OR, UnexpectedCharacters + """HASPROP("tpsa" > 120 ) OR TRUE("wrong")""", # wrong syntax, UnexpectedCharacters + """HASPROP("tpsa" > 120 ) OR HASSUPERSTRUCTURE("Cc1cc2ccccc2cc1C") OR""", # wrong syntax, wrong terminal node (OR), KeyError + """HASPROP("tpsa" > 120 ) OR (HASSUPERSTRUCTURE("Cc1cc2ccccc2cc1C")""", # wrong syntax, parenthesis mismatch, KeyError + """HASPROP("tpsa" > 120 ) OR HASSUPERSTRUCTURE("Cc1cc2ccccc2cc1C") TRUE""", # wrong syntax, wrong terminal node (TRUE) , KeyError + """HASPROP("tpsa" > 120 ) OR () OR HASSUPERSTRUCTURE("Cc1cc2ccccc2cc1C")""", # wrong syntax, empty statement, UnexpectedCharacters + """HASPROP("tpsa" > 120) OR HASSUBSTRUCTURE("[OH]", True, >, 3)""", # unexpected token '>' at wrong place, UnexpectedCharacters + """HASPROP("tpsa" + 120) OR HASSUBSTRUCTURE("[OH]")""" # unexpected token '+', UnexpectedCharacters + """HASPROP("tpsa") OR HASSUBSTRUCTURE("[OH]")""", # incomplete HASPROP statement UnexpectedCharacters + """HASPROP("tpsa" > 120) OR HASSUBSTRUCTURE("[OH]" True max 3)""", # mixing comma in substructure statement token, UnexpectedCharacters + """HASPROP("tpsa" > 120) OR HASSUBSTRUCTURE("[OH]", min, True, 3)""", # wrong order of arguments, UnexpectedCharacters + """HASPROP("tpsa" > 120) OR BIND("herg")""", # BIND is not a valid statement + """HASALERT("tpsa" > 120)""", # this is not a valid statement + ] + valid_queries = [ + """HASPROP("tpsa" > 120 ) OR HASSUPERSTRUCTURE("ls -lah /")""", # This is valid query, but "ls -lah" will never be evaluated + """HASPROP("tpsa" > 120 ) OR HASSUPERSTRUCTURE("Cc1cc2ccccc2cc1C")""", + """HASPROP("tpsa" > 120 ) OR HASSUPERSTRUCTURE("Cc1cc2ccccc2cc1C") OR NOT TRUE""", # this is valid, but should be simplified, + """HASPROP("tpsa" > 120 ) OR HASSUPERSTRUCTURE("Cc1cc2ccccc2cc1C") OR TRUE""", + """HASPROP("tpsa", >, 120 ) OR HASSUPERSTRUCTURE("Cc1cc2ccccc2cc1C")""", + """HASPROP("tpsa" > 120) OR HASSUBSTRUCTURE("[OH]")""", # min match, not smarts, limit=1 + """HASPROP("tpsa" > 120) OR HASSUBSTRUCTURE("[OH]", True)""", # min match, not smarts, limit=1 + """HASPROP("tpsa" > 120) OR HASSUBSTRUCTURE("[OH]", True, min)""", # min match, not smarts, limit=1 + """HASPROP("tpsa" > 120) OR HASSUBSTRUCTURE("[OH]", True, "min")""", # doesn't matter if min is quoted + """HASPROP("tpsa" > 120) OR HASSUBSTRUCTURE("[OH]", True, min, 1)""", # min match, not smarts, limit=1 + """HASPROP("tpsa" > 120) OR HASSUBSTRUCTURE("[OH]", True, 1)""", # this is correct but bad practice + ] + for query in bad_queries: + with pytest.raises((exceptions.UnexpectedToken, KeyError, exceptions.UnexpectedCharacters)): + print(query) + grammar.parse(query) + + valid_results = [grammar.parse(query) is not None for query in valid_queries] + assert valid_results == [True] * len(valid_queries) + + +def test_query_equivalence(): + grammar = get_test_grammar() + + # the following should all be equal in the resulting query + equivalent_queries = [ + """HASPROP("tpsa" = 120) OR ! HASSUBSTRUCTURE("CO")""", # A OR ! B + """HASPROP("tpsa", =, 120) OR ! HASSUBSTRUCTURE("CO")""", # A OR ! B, comma does not matter + """HASPROP("tpsa" =, 120) OR ! HASSUBSTRUCTURE("CO")""", # A OR ! B, comma does not matter + 'HASPROP("tpsa" = 120) OR ! HASSUBSTRUCTURE("CO")', # A OR ! B + """(HASPROP("tpsa" = 120)) OR ! (HASSUBSTRUCTURE("CO"))""", # (A) OR ! (B) + """(HASPROP("tpsa" = 120) OR ! HASSUBSTRUCTURE("CO"))""", # (A OR ! B) + """HASPROP("tpsa" = 120) OR NOT HASSUBSTRUCTURE("CO")""", # A OR NOT B + """HASPROP("tpsa" = 120) OR ~HASSUBSTRUCTURE("CO")""", # A OR ~B + """HASPROP("tpsa" == 120) OR ! HASSUBSTRUCTURE("CO")""", # A OR ! B + """HASPROP("tpsa" = 120) OR ! HASSUBSTRUCTURE("CO")""", # change in space + ] + different_query = """( ! HASPROP("tpsa" > 120) OR HASSUBSTRUCTURE("CO"))""" + same_results = [grammar.parse(equivalent_queries[i]) for i in range(len(equivalent_queries))] + + expected_equivalent_results = [same_results[i] == same_results[0] for i in range(len(same_results))] + expected_different_results = grammar.parse(different_query) + + assert expected_equivalent_results == [True] * len(same_results) + assert expected_different_results != same_results[0] + + +def test_prop(): + mol = dm.to_mol("CC(=O)OC1=CC=CC=C1C(=O)O") + tpsa = dm.descriptors.tpsa(mol) + clogp = dm.descriptors.clogp(mol) + + assert QueryOperator.getprop(mol, "tpsa") == tpsa + assert QueryOperator.getprop(mol, "clogp") == clogp + + with pytest.raises(Exception): + QueryOperator.getprop(mol, "fake") + + with pytest.raises(Exception): + QueryOperator.hasprop(mol, "tpsa", ">", 120) # type: ignore + + assert QueryOperator.hasprop(mol, "tpsa", operator.le, 120) == True + + +def test_alert(): + mol = dm.to_mol("Oc1cscc1-c1ccc(O)cc1") # contains tiophene hydroxy should match pains + + assert QueryOperator.hasalert(mol, "pains") == True + assert QueryOperator.hasalert(mol, "brenk") == False + + with pytest.raises(Exception): + QueryOperator.hasalert(mol, "fake") + + +def test_substructure(): + mol = "Oc1cscc1-c1ccc(OC)cc1" # contains tiophene hydroxy should match pains + substruct1 = "s1ccc(c1)-[#8;H1]" + substruct2 = "CO" # should match twice for SMILES and once for SMARTS + + assert QueryOperator.hassubstructure(mol, substruct1, is_smarts=True) == True + assert QueryOperator.hassubstructure(mol, substruct2, is_smarts=True) == True + assert QueryOperator.hassubstructure(mol, substruct2, is_smarts=False) == True + assert QueryOperator.hassubstructure(mol, substruct2, True, "min", limit=1) == True + assert QueryOperator.hassubstructure(mol, substruct2, True, "min", limit=2) == False + assert QueryOperator.hassubstructure(mol, substruct2, True, None, limit=2) == False + assert QueryOperator.hassubstructure(mol, substruct2, True, "max", limit=2) == True + assert QueryOperator.hassubstructure(mol, substruct2, False, "min", limit=1) == True + assert QueryOperator.hassubstructure(mol, substruct2, False, "min", limit=2) == True + assert QueryOperator.hassubstructure(mol, substruct2, False, None, limit=2) == True + assert QueryOperator.hassubstructure(mol, substruct2, False, "max", limit=2) == False + + +def test_rule(): + mol = "Oc1cscc1-c1ccc(OC)cc1" + assert QueryOperator.matchrule(mol, "rule_of_five") == True + assert QueryOperator.matchrule(mol, "rule_of_three") == False + + with pytest.raises(Exception): + QueryOperator.matchrule(mol, "fake") + + +def test_group(): + mol = "Oc1cscc1-c1ccc(OC)cc1" + assert QueryOperator.hasgroup(mol, "Ethers") == True + assert QueryOperator.hasgroup(mol, "Ketones") == False + + # should normally match an alcohol, but how the group as defined, the specificity is high + # so another more specific group should match and not alcohol for the tiophene hydroxy + assert QueryOperator.hasgroup(mol, "Alcohols") == False + assert QueryOperator.hasgroup(mol, "Hydroxy compounds: alcohols or phenols") == True + + with pytest.raises(Exception): + QueryOperator.hasgroup(mol, "fake") + + +def test_similarity(): + mol1 = "Oc1cscc1-c1ccc(OC)cc1" + mol2 = dm.to_mol("Oc1cscc1-c1ccc(O)cc1") + dist = dm.cdist([mol1], [mol2])[0][0] + + assert QueryOperator.like(mol1, mol2, operator.le, 0.8) == True + assert QueryOperator.similarity(mol1, mol2) == 1 - dist + + +def test_superstructure(): + query = "Oc1cscc1-c1ccc(OC)cc1" + mol = "Oc1ccsc1" + + assert QueryOperator.hassuperstructure(mol, query) == True + assert QueryOperator.hassuperstructure(query, mol) == False + + +def test_query_eval(): + mol = "Oc1cscc1-c1ccc(OC)cc1" + grammar = Lark(get_grammar(as_string=True), parser="lalr", transformer=QueryParser()) + queries = [ + """HASPROP("tpsa" <= 120) AND ! HASALERT("pains") AND HASGROUP("Alcohols")""", # False, does not match alchol + """HASPROP("tpsa" <= 120) AND NOT HASALERT("pains") AND HASGROUP("Ethers")""", # False has pains alerts + """(HASPROP("tpsa" <= 120) AND NOT HASALERT("brenk")) AND HASGROUP("Ethers")""", # True + """HASPROP("tpsa" <= 120) AND MATCHRULE("rule_of_three")""", # False + """HASPROP("tpsa" <= 120) AND HASSUBSTRUCTURE("[OH]", True)""", # True + """HASPROP("tpsa" <= 120) AND HASSUBSTRUCTURE("[OH]", True, 3)""", # False + ] + parsed_queries = [grammar.parse(q) for q in queries] + expected_results = [False, False, True, False, True, False] + + observed_results = [] + observed_results_str = [] + for q in parsed_queries: + evaluator = EvaluableQuery(q) + observed_results.append(evaluator(mol)) + observed_results_str.append(evaluator(mol, exec=False)) + + assert expected_results == observed_results + + +def test_query_filter(): + queries = [ + # complex query + """(HASPROP("tpsa" < 100) AND HASPROP("clogp" < 3) AND ! HASALERT("pains")) OR (HASPROP("n_heavy_atoms" >= 10) AND (HASGROUP("Alcohols") OR HASSUBSTRUCTURE("[CX3](=[OX1])O", True, 1)))""", + # is a rewriting of the above + """(HASPROP("tpsa" < 100) AND HASPROP("clogp" < 3) AND ! HASALERT("pains")) OR (HASPROP("n_heavy_atoms" >= 10) AND (HASGROUP("Alcohols") OR HASSUBSTRUCTURE("[CX3](=[OX1])O", True, min, 1)))""", + # is a rewriting of the above with spacing and a differentm yet equivalent bool expression + """ + ( + HASPROP("tpsa" < 100) + AND + HASPROP("clogp" < 3) + AND + ! HASALERT("pains") + ) + OR + ( + HASPROP("n_heavy_atoms" >= 10) + AND + HASGROUP("Alcohols") + ) + OR + ( + HASPROP("n_heavy_atoms" >= 10) + AND + HASSUBSTRUCTURE("[CX3](=[OX1])O", True) + ) + """, + # always true + """(HASPROP("tpsa" < 100) AND HASPROP("clogp" < 3)) OR TRUE""", + # always false + """(HASPROP("tpsa" < 100) AND HASPROP("clogp" < 3)) AND False""", + ] + + query_filters = [QueryFilter(q) for q in queries] + df = dm.cdk2() + df["tpsa"] = df["mol"].apply(dm.descriptors.tpsa) + df["clogp"] = df["mol"].apply(dm.descriptors.clogp) + df["n_heavy_atoms"] = df["mol"].apply(dm.descriptors.n_heavy_atoms) + df["has_carboxyl"] = df["mol"].apply(lambda x: QueryOperator.hassubstructure(x, "[CX3](=[OX1])O", True)) + df["has_pains"] = df["mol"].apply(lambda x: QueryOperator.hasalert(x, "pains")) + df["has_alcohol"] = df["mol"].apply(lambda x: QueryOperator.hasgroup(x, "Alcohols")) + + tmp = df.query( + "((tpsa < 100) & (clogp < 3) & ~has_pains) | (n_heavy_atoms >= 10 & (has_carboxyl | has_alcohol))" + ) + df["expected_results"] = False + df.loc[tmp.index, "expected_results"] = True + + computed_1 = query_filters[0](df["mol"].tolist(), progress=False) + computed_2 = query_filters[1](df["mol"].tolist(), progress=False) + computed_3 = query_filters[2](df["smiles"].tolist(), progress=False) + all_true = query_filters[3](df["mol"].tolist(), progress=False) + all_false = query_filters[4](df["mol"].tolist(), progress=False) + + np.testing.assert_array_equal(np.asarray(computed_1), np.asarray(computed_2)) + np.testing.assert_array_equal(np.asarray(computed_1), np.asarray(computed_3)) + np.testing.assert_array_equal(df.expected_results, np.asarray(computed_1)) + np.testing.assert_array_equal(np.asarray(all_true), [True] * len(df)) + np.testing.assert_array_equal(np.asarray(all_false), [False] * len(df)) diff --git a/tests_OLD/test_generic_filter.py b/tests_OLD/test_generic_filter.py deleted file mode 100644 index 5d0ce5b..0000000 --- a/tests_OLD/test_generic_filter.py +++ /dev/null @@ -1,81 +0,0 @@ -import unittest as ut -import numpy as np -import datamol as dm - -from medchem.filter import generic - - -class Test_GenericFilter(ut.TestCase): - data = dm.data.freesolv() - smiles_with_issues = [ - # none - "Nc1noc2cc(-c3noc(C(F)(F)F)n3)ccc12", - # hologenicity, atom_list_filter, ring_infraction - "Nc1noc2cc(-c3noc(n3)C(Cl)(Cl)Cl)c(Cl)c(B3C=C3)c12", - # num_atom_filter - "C[C@H](Nc1ncc(-c2noc(C(F)(F)F)n2)cc1Cl)c1ccncc1", - # macrocycle, num_atom_filter - "NC1=NOC2=CC(C3=NOC(=N3)C(F)(F)F)=C3CCCCCCCC3=C12", - # ring infraction, macrocycle at 10, num_atom_filter at 20 - "Nc1noc2c(cc(cc12)C1NCO1)C1CCCCCCCCC1", - ] - - def test_num_atom_filter(self): - mols = [dm.to_mol(x) for x in self.data.smiles.values] - passing_idx = [i for i, m in enumerate(mols) if m.GetNumAtoms() < 20] - idx = generic.num_atom_filter(self.data.smiles.values, max_atoms=20, return_idx=True) - np.testing.assert_array_equal(idx, passing_idx) - - def test_ring_infraction_filter(self): - out = generic.ring_infraction_filter(self.smiles_with_issues, return_idx=True) - self.assertListEqual([0, 2, 3], out) - - def test_macrocycle_filter(self): - out = generic.macrocycle_filter(self.smiles_with_issues, max_cycle_size=7, return_idx=False) - out = list(out) - self.assertListEqual(out, [True, True, True, False, False]) - - def test_atom_list_filter(self): - out = generic.atom_list_filter(self.smiles_with_issues, unwanted_atom_list=["B"], return_idx=True) - out = list(out) - self.assertListEqual([0, 2, 3, 4], out) - - def test_halogenicity_filter(self): - out = generic.halogenicity_filter(self.smiles_with_issues, return_idx=True) - out = list(out) - self.assertListEqual([0, 2, 3, 4], out) - - def test_n_stereo_center(self): - smiles = [ - "CC(C)(O)C(O)[C@H](O)C(O)CO", # fail, too many undefined stereocenter - "C1[C@H]([C@@H]([C@H]([C@H](O1)O)O)O)O", # fail, too many stereocenter - "C[C@@H]1CC[C@H]([C@@H](C1)O)C(C)C", # pass - ] - - out = generic.num_stereo_center_filter(smiles, return_idx=False) - out = list(out) - self.assertListEqual([False, False, True], out) - - def test_symmetry_filter(self): - symmetric_mols = [ - "O=C(O)c1cc(-n2ccnc2)cc(-n2ccnc2)c1", - "CC(C)(C)[C@@H]1COC(C2(C3=N[C@H](C(C)(C)C)CO3)Cc3ccccc3C2)=N1", - "c1ccc2oc(-c3ccc(-c4nc5ccccc5o4)s3)nc2c1", - "Cc1cc(O)c(C(c2ccc(Cl)cc2)c2c(O)cc(C)[nH]c2=O)c(=O)[nH]1", - ] - - random_mols = [ - "CCn1cc(S(=O)(=O)n2cc(Cl)cn2)cn1", - "Cc1cc(C)c(S(=O)(=O)Nc2cc(C)ccc2C)c(C)c1", - "c1ccc(CCC2CCN(CCC3COCCO3)CC2)cc1", - "CCCC1CCC([C@H]2CC[C@H](C(=O)O)CC2)CC1", - ] - symmetric = generic.symmetry_filter(symmetric_mols, symmetry_threshold=0.8) - np.testing.assert_array_equal(symmetric, [False] * len(symmetric)) - - not_symmetric = generic.symmetry_filter(random_mols, symmetry_threshold=0.8) - np.testing.assert_array_equal(not_symmetric, [True] * len(not_symmetric)) - - -if __name__ == "__main__": - ut.main() diff --git a/tests_OLD/test_query.py b/tests_OLD/test_query.py deleted file mode 100644 index 9c4b845..0000000 --- a/tests_OLD/test_query.py +++ /dev/null @@ -1,236 +0,0 @@ -import unittest as ut -import datamol as dm -import operator -import numpy as np -from lark import Lark, exceptions -from medchem.query.parser import QueryParser -from medchem.query.eval import QueryOperator -from medchem.query.eval import QueryFilter -from medchem.query.eval import _EvaluableQuery -from medchem.utils.loader import get_grammar - - -class Test_QueryParser(ut.TestCase): - grammar = Lark(get_grammar(as_string=True), parser="lalr", transformer=QueryParser()) - - def test_language(self): - bad_queries = [ - "HASPROP(tpsa > 120 )", # missing quotes, UnexpectedCharacters - """HASPROP("tpsa" > 120 ) OR OR HASSUPERSTRUCTURE("Cc1cc2ccccc2cc1C")""", # wrong syntax with 2 OR, UnexpectedCharacters - """HASPROP("tpsa" > 120 ) OR TRUE("wrong")""", # wrong syntax, UnexpectedCharacters - """HASPROP("tpsa" > 120 ) OR HASSUPERSTRUCTURE("Cc1cc2ccccc2cc1C") OR""", # wrong syntax, wrong terminal node (OR), KeyError - """HASPROP("tpsa" > 120 ) OR (HASSUPERSTRUCTURE("Cc1cc2ccccc2cc1C")""", # wrong syntax, parenthesis mismatch, KeyError - """HASPROP("tpsa" > 120 ) OR HASSUPERSTRUCTURE("Cc1cc2ccccc2cc1C") TRUE""", # wrong syntax, wrong terminal node (TRUE) , KeyError - """HASPROP("tpsa" > 120 ) OR () OR HASSUPERSTRUCTURE("Cc1cc2ccccc2cc1C")""", # wrong syntax, empty statement, UnexpectedCharacters - """HASPROP("tpsa" > 120) OR HASSUBSTRUCTURE("[OH]", True, >, 3)""", # unexpected token '>' at wrong place, UnexpectedCharacters - """HASPROP("tpsa" + 120) OR HASSUBSTRUCTURE("[OH]")""" # unexpected token '+', UnexpectedCharacters - """HASPROP("tpsa") OR HASSUBSTRUCTURE("[OH]")""", # incomplete HASPROP statement UnexpectedCharacters - """HASPROP("tpsa" > 120) OR HASSUBSTRUCTURE("[OH]" True max 3)""", # mixing comma in substructure statement token, UnexpectedCharacters - """HASPROP("tpsa" > 120) OR HASSUBSTRUCTURE("[OH]", min, True, 3)""", # wrong order of arguments, UnexpectedCharacters - """HASPROP("tpsa" > 120) OR BIND("herg")""", # BIND is not a valid statement - """HASALERT("tpsa" > 120)""", # this is not a valid statement - ] - valid_queries = [ - """HASPROP("tpsa" > 120 ) OR HASSUPERSTRUCTURE("ls -lah /")""", # This is valid query, but "ls -lah" will never be evaluated - """HASPROP("tpsa" > 120 ) OR HASSUPERSTRUCTURE("Cc1cc2ccccc2cc1C")""", - """HASPROP("tpsa" > 120 ) OR HASSUPERSTRUCTURE("Cc1cc2ccccc2cc1C") OR NOT TRUE""", # this is valid, but should be simplified, - """HASPROP("tpsa" > 120 ) OR HASSUPERSTRUCTURE("Cc1cc2ccccc2cc1C") OR TRUE""", - """HASPROP("tpsa", >, 120 ) OR HASSUPERSTRUCTURE("Cc1cc2ccccc2cc1C")""", - """HASPROP("tpsa" > 120) OR HASSUBSTRUCTURE("[OH]")""", # min match, not smarts, limit=1 - """HASPROP("tpsa" > 120) OR HASSUBSTRUCTURE("[OH]", True)""", # min match, not smarts, limit=1 - """HASPROP("tpsa" > 120) OR HASSUBSTRUCTURE("[OH]", True, min)""", # min match, not smarts, limit=1 - """HASPROP("tpsa" > 120) OR HASSUBSTRUCTURE("[OH]", True, "min")""", # doesn't matter if min is quoted - """HASPROP("tpsa" > 120) OR HASSUBSTRUCTURE("[OH]", True, min, 1)""", # min match, not smarts, limit=1 - """HASPROP("tpsa" > 120) OR HASSUBSTRUCTURE("[OH]", True, 1)""", # this is correct but bad practice - ] - for query in bad_queries: - with self.assertRaises((exceptions.UnexpectedToken, KeyError, exceptions.UnexpectedCharacters)): - print(query) - self.grammar.parse(query) - - valid_results = [self.grammar.parse(query) is not None for query in valid_queries] - self.assertListEqual(valid_results, [True] * len(valid_queries)) - - def test_query_equivalence(self): - # the following should all be equal in the resulting query - equivalent_queries = [ - """HASPROP("tpsa" = 120) OR ! HASSUBSTRUCTURE("CO")""", # A OR ! B - """HASPROP("tpsa", =, 120) OR ! HASSUBSTRUCTURE("CO")""", # A OR ! B, comma does not matter - """HASPROP("tpsa" =, 120) OR ! HASSUBSTRUCTURE("CO")""", # A OR ! B, comma does not matter - 'HASPROP("tpsa" = 120) OR ! HASSUBSTRUCTURE("CO")', # A OR ! B - """(HASPROP("tpsa" = 120)) OR ! (HASSUBSTRUCTURE("CO"))""", # (A) OR ! (B) - """(HASPROP("tpsa" = 120) OR ! HASSUBSTRUCTURE("CO"))""", # (A OR ! B) - """HASPROP("tpsa" = 120) OR NOT HASSUBSTRUCTURE("CO")""", # A OR NOT B - """HASPROP("tpsa" = 120) OR ~HASSUBSTRUCTURE("CO")""", # A OR ~B - """HASPROP("tpsa" == 120) OR ! HASSUBSTRUCTURE("CO")""", # A OR ! B - """HASPROP("tpsa" = 120) OR ! HASSUBSTRUCTURE("CO")""", # change in space - ] - different_query = """( ! HASPROP("tpsa" > 120) OR HASSUBSTRUCTURE("CO"))""" - same_results = [self.grammar.parse(equivalent_queries[i]) for i in range(len(equivalent_queries))] - - expected_equivalent_results = [same_results[i] == same_results[0] for i in range(len(same_results))] - expected_different_results = self.grammar.parse(different_query) - self.assertListEqual(expected_equivalent_results, [True] * len(same_results)) - self.assertNotEqual(expected_different_results, same_results[0]) - - -class Test_QueryOperator(ut.TestCase): - def test_prop(self): - mol = dm.to_mol("CC(=O)OC1=CC=CC=C1C(=O)O") - tpsa = dm.descriptors.tpsa(mol) - clogp = dm.descriptors.clogp(mol) - - self.assertEqual(QueryOperator.getprop(mol, "tpsa"), tpsa) - self.assertEqual(QueryOperator.getprop(mol, "clogp"), clogp) - - with self.assertRaises(Exception): - QueryOperator.getprop(mol, "fake") - - with self.assertRaises(Exception): - QueryOperator.hasprop(mol, "tpsa", ">", 120) - - self.assertTrue(QueryOperator.hasprop(mol, "tpsa", operator.le, 120)) - - def test_alert(self): - mol = dm.to_mol("Oc1cscc1-c1ccc(O)cc1") # contains tiophene hydroxy should match pains - self.assertTrue(QueryOperator.hasalert(mol, "pains")) - self.assertFalse(QueryOperator.hasalert(mol, "brenk")) - with self.assertRaises(Exception): - QueryOperator.hasalert(mol, "fake") - - def test_substructure(self): - mol = "Oc1cscc1-c1ccc(OC)cc1" # contains tiophene hydroxy should match pains - substruct1 = "s1ccc(c1)-[#8;H1]" - substruct2 = "CO" # should match twice for SMILES and once for SMARTS - self.assertTrue(QueryOperator.hassubstructure(mol, substruct1, is_smarts=True)) - self.assertTrue(QueryOperator.hassubstructure(mol, substruct2, is_smarts=True)) - self.assertTrue(QueryOperator.hassubstructure(mol, substruct2, is_smarts=False)) - self.assertTrue(QueryOperator.hassubstructure(mol, substruct2, True, "min", limit=1)) - self.assertFalse(QueryOperator.hassubstructure(mol, substruct2, True, "min", limit=2)) - self.assertFalse(QueryOperator.hassubstructure(mol, substruct2, True, None, limit=2)) - self.assertTrue(QueryOperator.hassubstructure(mol, substruct2, True, "max", limit=2)) - - self.assertTrue(QueryOperator.hassubstructure(mol, substruct2, False, "min", limit=1)) - self.assertTrue(QueryOperator.hassubstructure(mol, substruct2, False, "min", limit=2)) - self.assertTrue(QueryOperator.hassubstructure(mol, substruct2, False, None, limit=2)) - self.assertFalse(QueryOperator.hassubstructure(mol, substruct2, False, "max", limit=2)) - - def test_rule(self): - mol = "Oc1cscc1-c1ccc(OC)cc1" - self.assertTrue(QueryOperator.matchrule(mol, "rule_of_five")) - self.assertFalse(QueryOperator.matchrule(mol, "rule_of_three")) - with self.assertRaises(Exception): - QueryOperator.matchrule(mol, "fake") - - def test_group(self): - mol = "Oc1cscc1-c1ccc(OC)cc1" - self.assertTrue(QueryOperator.hasgroup(mol, "Ethers")) - self.assertFalse(QueryOperator.hasgroup(mol, "Ketones")) - # should normally match an alcohol, but how the group as defined, the specificity is high - # so another more specific group should match and not alcohol for the tiophene hydroxy - self.assertFalse(QueryOperator.hasgroup(mol, "Alcohols")) - self.assertTrue(QueryOperator.hasgroup(mol, "Hydroxy compounds: alcohols or phenols")) - with self.assertRaises(Exception): - QueryOperator.hasgroup(mol, "fake") - - def test_similarity(self): - mol1 = "Oc1cscc1-c1ccc(OC)cc1" - mol2 = dm.to_mol("Oc1cscc1-c1ccc(O)cc1") - dist = float(dm.cdist([mol1], [mol2])) - self.assertTrue(QueryOperator.like(mol1, mol2, operator.le, 0.8)) - self.assertEqual(QueryOperator.similarity(mol1, mol2), 1 - dist) - - def test_superstructure(self): - query = "Oc1cscc1-c1ccc(OC)cc1" - mol = "Oc1ccsc1" - self.assertTrue(QueryOperator.hassuperstructure(mol, query)) - self.assertFalse(QueryOperator.hassuperstructure(query, mol)) - - -class Test_QueryFilter(ut.TestCase): - def test_query_eval(self): - mol = "Oc1cscc1-c1ccc(OC)cc1" - grammar = Lark(get_grammar(as_string=True), parser="lalr", transformer=QueryParser()) - queries = [ - """HASPROP("tpsa" <= 120) AND ! HASALERT("pains") AND HASGROUP("Alcohols")""", # False, does not match alchol - """HASPROP("tpsa" <= 120) AND NOT HASALERT("pains") AND HASGROUP("Ethers")""", # False has pains alerts - """(HASPROP("tpsa" <= 120) AND NOT HASALERT("brenk")) AND HASGROUP("Ethers")""", # True - """HASPROP("tpsa" <= 120) AND MATCHRULE("rule_of_three")""", # False - """HASPROP("tpsa" <= 120) AND HASSUBSTRUCTURE("[OH]", True)""", # True - """HASPROP("tpsa" <= 120) AND HASSUBSTRUCTURE("[OH]", True, 3)""", # False - ] - parsed_queries = [grammar.parse(q) for q in queries] - expected_results = [False, False, True, False, True, False] - observed_results = [] - observed_results_str = [] - for q in parsed_queries: - evaluator = _EvaluableQuery(q) - observed_results.append(evaluator(mol)) - observed_results_str.append(evaluator(mol, exec=False)) - self.assertListEqual(expected_results, observed_results) - - def test_query_filter(self): - queries = [ - # complex query - """(HASPROP("tpsa" < 100) AND HASPROP("clogp" < 3) AND ! HASALERT("pains")) OR (HASPROP("n_heavy_atoms" >= 10) AND (HASGROUP("Alcohols") OR HASSUBSTRUCTURE("[CX3](=[OX1])O", True, 1)))""", - # is a rewriting of the above - """(HASPROP("tpsa" < 100) AND HASPROP("clogp" < 3) AND ! HASALERT("pains")) OR (HASPROP("n_heavy_atoms" >= 10) AND (HASGROUP("Alcohols") OR HASSUBSTRUCTURE("[CX3](=[OX1])O", True, min, 1)))""", - # is a rewriting of the above with spacing and a differentm yet equivalent bool expression - """ - ( - HASPROP("tpsa" < 100) - AND - HASPROP("clogp" < 3) - AND - ! HASALERT("pains") - ) - OR - ( - HASPROP("n_heavy_atoms" >= 10) - AND - HASGROUP("Alcohols") - ) - OR - ( - HASPROP("n_heavy_atoms" >= 10) - AND - HASSUBSTRUCTURE("[CX3](=[OX1])O", True) - ) - """, - # always true - """(HASPROP("tpsa" < 100) AND HASPROP("clogp" < 3)) OR TRUE""", - # always false - """(HASPROP("tpsa" < 100) AND HASPROP("clogp" < 3)) AND False""", - ] - - query_filters = [QueryFilter(q) for q in queries] - df = dm.cdk2() - df["tpsa"] = df["mol"].apply(dm.descriptors.tpsa) - df["clogp"] = df["mol"].apply(dm.descriptors.clogp) - df["n_heavy_atoms"] = df["mol"].apply(dm.descriptors.n_heavy_atoms) - df["has_carboxyl"] = df["mol"].apply( - lambda x: QueryOperator.hassubstructure(x, "[CX3](=[OX1])O", True) - ) - df["has_pains"] = df["mol"].apply(lambda x: QueryOperator.hasalert(x, "pains")) - df["has_alcohol"] = df["mol"].apply(lambda x: QueryOperator.hasgroup(x, "Alcohols")) - - tmp = df.query( - "((tpsa < 100) & (clogp < 3) & ~has_pains) | (n_heavy_atoms >= 10 & (has_carboxyl | has_alcohol))" - ) - df["expected_results"] = False - df.loc[tmp.index, "expected_results"] = True - - computed_1 = query_filters[0](df.mol, progress=False) - computed_2 = query_filters[1](df.mol, progress=False) - computed_3 = query_filters[2](df.smiles, progress=False) - all_true = query_filters[3](df.mol, progress=False) - all_false = query_filters[4](df.mol, progress=False) - np.testing.assert_array_equal(computed_1, computed_2) - np.testing.assert_array_equal(computed_1, computed_3) - np.testing.assert_array_equal(df.expected_results, computed_1) - np.testing.assert_array_equal(all_true, [True] * len(df)) - np.testing.assert_array_equal(all_false, [False] * len(df)) - - -if __name__ == "__main__": - ut.main() From ce8776f9f2f8f887d46129ed506653d6ff75d01c Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Sun, 9 Jul 2023 19:31:34 -0400 Subject: [PATCH 28/31] docstring --- medchem/query/_eval.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/medchem/query/_eval.py b/medchem/query/_eval.py index b8a748e..1212150 100644 --- a/medchem/query/_eval.py +++ b/medchem/query/_eval.py @@ -339,7 +339,7 @@ def __init__(self, parsed_query: Union[str, ParseTree], verbose: bool = False): self.query_nodes = [_NodeEvaluator(x) for x in self.FN_PATTERN.split(parsed_query)] self.verbose = verbose - def __call__(self, mol: Union[dm.Mol, str], exec: bool = True): + def __call__(self, mol: Union[dm.Mol, str], exec: bool = True) -> str: """Evaluate a query on an input molecule Args: @@ -348,7 +348,6 @@ def __call__(self, mol: Union[dm.Mol, str], exec: bool = True): Returns: query string or boolean value corresponding to the query result - """ query_eval = " ".join([f"{node(mol)}" for node in self.query_nodes]) if self.verbose: From 6ca204b1bb007d4eab3303a936a1f1a12fe0eeae Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Mon, 10 Jul 2023 14:33:01 -0400 Subject: [PATCH 29/31] propagate prop name + rename GSK to Glaxo --- medchem/catalogs/_catalogs.py | 4 +- medchem/data/common_alerts_collection.csv | 110 +++++++++++----------- medchem/query/_eval.py | 2 +- tests/test_catalogs.py | 2 +- 4 files changed, 59 insertions(+), 59 deletions(-) diff --git a/medchem/catalogs/_catalogs.py b/medchem/catalogs/_catalogs.py index 20d70df..b8a84af 100644 --- a/medchem/catalogs/_catalogs.py +++ b/medchem/catalogs/_catalogs.py @@ -216,8 +216,8 @@ def bms(): @staticmethod @functools.lru_cache(maxsize=32) - def gsk(): - return NamedCatalogs.alerts(subset=["GSK"]) + def glaxo(): + return NamedCatalogs.alerts(subset=["Glaxo"]) @staticmethod @functools.lru_cache(maxsize=32) diff --git a/medchem/data/common_alerts_collection.csv b/medchem/data/common_alerts_collection.csv index 3df03ac..0cd144a 100644 --- a/medchem/data/common_alerts_collection.csv +++ b/medchem/data/common_alerts_collection.csv @@ -1,59 +1,59 @@ rule_id,rule_set,description,smarts,rule_set_name,priority,mincount,source,catalog_description -0,1,R1 Reactive alkyl halides,"[Br,Cl,I][CX4;CH,CH2]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -1,1,R2 Acid halides,"[S,C](=[O,S])[F,Br,Cl,I]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -2,1,R3 Carbazides,O=CN=[N+]=[N-],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -3,1,R4 Sulphate esters,"COS(=O)O[C,c]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -4,1,R5 Sulphonates,"COS(=O)(=O)[C,c]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -5,1,R6 Acid anhydrides,C(=O)OC(=O),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -6,1,R7 Peroxides,OO,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -7,1,R8 Pentafluorophenyl esters,C(=O)Oc1c(F)c(F)c(F)c(F)c1(F),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -8,1,R9 Paranitrophenyl esters,C(=O)Oc1ccc(N(=O)~[OX1])cc1,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -9,1,R10 esters of HOBT,C(=O)Onnn,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -10,1,R11 Isocyanates & Isothiocyanates,"N=C=[S,O]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -11,1,R12 Triflates,OS(=O)(=O)C(F)(F)F,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -12,1,R13 lawesson's reagent and derivatives,P(=S)(S)S,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -13,1,R14 phosphoramides,NP(=O)(N)N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -14,1,R15 Aromatic azides,cN=[N+]=[N-],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -15,1,R16 beta carbonyl quaternary Nitrogen,"C(=O)C[N+,n+]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -16,1,R17 acylhydrazide,[N;R0][N;R0]C(=O),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -17,1,"R18 Quaternary C, Cl, I, P or S","[C+,Cl+,I+,P+,S+]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -18,1,R19 Phosphoranes,C=P,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -19,1,R20 Chloramidines,[Cl]C([C&R0])=N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -20,1,R21 Nitroso,[N&D2](=O),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -21,1,R22 P/S Halides,"[P,S][Cl,Br,F,I]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -22,1,R23 Carbodiimide,N=C=N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -23,1,R24 Isonitrile,[N+]#[C-],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -24,1,R25 Triacyloximes,C(=O)N(C(=O))OC(=O),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -25,1,R26 Cyanohydrins,N#CC[OH],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -26,1,R27 Acyl cyanides,N#CC(=O),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -27,1,R28 Sulfonyl cyanides,S(=O)(=O)C#N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -28,1,R29 Cyanophosphonates,P(OCC)(OCC)(=O)C#N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -29,1,R30 Azocyanamides,[N;R0]=[N;R0]C#N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -30,1,R31 Azoalkanals,[N;R0]=[N;R0]CC=O,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -31,1,I1 Aliphatic methylene chains 7 or more long,[CD2;R0][CD2;R0][CD2;R0][CD2;R0][CD2;R0][CD2;R0][CD2;R0],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -32,1,I2 Compounds with 4 or more acidic groups,"[C,S,P](=O)[OH].[C,S,P](=O)[OH].[C,S,P](=O)[OH].[C,S,P](=O)[OH]",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -33,1,I3 Crown ethers,[O;R1][C;R1][C;R1][O;R1][C;R1][C;R1][O;R1],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -34,1,I4 Disulphides,SS,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -35,1,I5 Thiols,[SH],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -36,1,"I6 Epoxides, Thioepoxides, Aziridines","C1[O,S,N]C1",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -37,1,"I7 2,4,5 trihydroxyphenyl",c([OH])c([OH])c([OH]),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -38,1,"I8 2,3,4 trihydroxyphenyl",c([OH])c([OH])cc([OH]),GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -39,1,I9 Hydrazothiourea,N=NC(=S)N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -40,1,I10 Thiocyanate,SC#N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -41,1,I11 Benzylic quaternary Nitrogen,cC[N+],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -42,1,I12 Thioesters,"C[O,S;R0][C;R0](=S)",GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -43,1,I13 Cyanamides,N[CH2]C#N,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -44,1,I14 Four membered lactones,C1(=O)OCC1,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -45,1,I15 Di and Triphosphates,P(=O)([OH])OP(=O)[OH],GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -46,1,I16 Betalactams,N1CCC1=O,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -47,1,N1 Quinones,O=C1[#6]~[#6]C(=O)[#6]~[#6]1,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -48,1,N2 Polyenes,C=CC=CC=CC=C,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -49,1,N3 Saponin derivatives,O1CCCCC1OC2CCC3CCCCC3C2,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -50,1,N4 Cytochalasin derivatives,O=C1NCC2CCCCC21,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -51,1,N5 Cycloheximide derivatives,O=C1CCCC(N1)=O,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -52,1,N6 Monensin derivatives,O1CCCCC1C2CCCO2,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -53,1,N7 Cyanidin derivatives,[OH]c1cc([OH])cc2=[O+]C(=C([OH])Cc21)c3cc([OH])c([OH])cc3,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters -54,1,N8 Squalestatin derivatives,C12OCCC(O1)CC2,GSK,8,1,ChEMBL,Glaxo Wellcome Hard filters +0,1,R1 Reactive alkyl halides,"[Br,Cl,I][CX4;CH,CH2]",Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +1,1,R2 Acid halides,"[S,C](=[O,S])[F,Br,Cl,I]",Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +2,1,R3 Carbazides,O=CN=[N+]=[N-],Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +3,1,R4 Sulphate esters,"COS(=O)O[C,c]",Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +4,1,R5 Sulphonates,"COS(=O)(=O)[C,c]",Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +5,1,R6 Acid anhydrides,C(=O)OC(=O),Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +6,1,R7 Peroxides,OO,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +7,1,R8 Pentafluorophenyl esters,C(=O)Oc1c(F)c(F)c(F)c(F)c1(F),Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +8,1,R9 Paranitrophenyl esters,C(=O)Oc1ccc(N(=O)~[OX1])cc1,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +9,1,R10 esters of HOBT,C(=O)Onnn,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +10,1,R11 Isocyanates & Isothiocyanates,"N=C=[S,O]",Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +11,1,R12 Triflates,OS(=O)(=O)C(F)(F)F,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +12,1,R13 lawesson's reagent and derivatives,P(=S)(S)S,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +13,1,R14 phosphoramides,NP(=O)(N)N,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +14,1,R15 Aromatic azides,cN=[N+]=[N-],Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +15,1,R16 beta carbonyl quaternary Nitrogen,"C(=O)C[N+,n+]",Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +16,1,R17 acylhydrazide,[N;R0][N;R0]C(=O),Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +17,1,"R18 Quaternary C, Cl, I, P or S","[C+,Cl+,I+,P+,S+]",Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +18,1,R19 Phosphoranes,C=P,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +19,1,R20 Chloramidines,[Cl]C([C&R0])=N,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +20,1,R21 Nitroso,[N&D2](=O),Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +21,1,R22 P/S Halides,"[P,S][Cl,Br,F,I]",Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +22,1,R23 Carbodiimide,N=C=N,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +23,1,R24 Isonitrile,[N+]#[C-],Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +24,1,R25 Triacyloximes,C(=O)N(C(=O))OC(=O),Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +25,1,R26 Cyanohydrins,N#CC[OH],Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +26,1,R27 Acyl cyanides,N#CC(=O),Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +27,1,R28 Sulfonyl cyanides,S(=O)(=O)C#N,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +28,1,R29 Cyanophosphonates,P(OCC)(OCC)(=O)C#N,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +29,1,R30 Azocyanamides,[N;R0]=[N;R0]C#N,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +30,1,R31 Azoalkanals,[N;R0]=[N;R0]CC=O,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +31,1,I1 Aliphatic methylene chains 7 or more long,[CD2;R0][CD2;R0][CD2;R0][CD2;R0][CD2;R0][CD2;R0][CD2;R0],Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +32,1,I2 Compounds with 4 or more acidic groups,"[C,S,P](=O)[OH].[C,S,P](=O)[OH].[C,S,P](=O)[OH].[C,S,P](=O)[OH]",Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +33,1,I3 Crown ethers,[O;R1][C;R1][C;R1][O;R1][C;R1][C;R1][O;R1],Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +34,1,I4 Disulphides,SS,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +35,1,I5 Thiols,[SH],Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +36,1,"I6 Epoxides, Thioepoxides, Aziridines","C1[O,S,N]C1",Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +37,1,"I7 2,4,5 trihydroxyphenyl",c([OH])c([OH])c([OH]),Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +38,1,"I8 2,3,4 trihydroxyphenyl",c([OH])c([OH])cc([OH]),Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +39,1,I9 Hydrazothiourea,N=NC(=S)N,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +40,1,I10 Thiocyanate,SC#N,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +41,1,I11 Benzylic quaternary Nitrogen,cC[N+],Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +42,1,I12 Thioesters,"C[O,S;R0][C;R0](=S)",Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +43,1,I13 Cyanamides,N[CH2]C#N,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +44,1,I14 Four membered lactones,C1(=O)OCC1,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +45,1,I15 Di and Triphosphates,P(=O)([OH])OP(=O)[OH],Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +46,1,I16 Betalactams,N1CCC1=O,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +47,1,N1 Quinones,O=C1[#6]~[#6]C(=O)[#6]~[#6]1,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +48,1,N2 Polyenes,C=CC=CC=CC=C,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +49,1,N3 Saponin derivatives,O1CCCCC1OC2CCC3CCCCC3C2,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +50,1,N4 Cytochalasin derivatives,O=C1NCC2CCCCC21,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +51,1,N5 Cycloheximide derivatives,O=C1CCCC(N1)=O,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +52,1,N6 Monensin derivatives,O1CCCCC1C2CCCO2,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +53,1,N7 Cyanidin derivatives,[OH]c1cc([OH])cc2=[O+]C(=C([OH])Cc21)c3cc([OH])c([OH])cc3,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters +54,1,N8 Squalestatin derivatives,C12OCCC(O1)CC2,Glaxo,8,1,ChEMBL,Glaxo Wellcome Hard filters 55,2,> 2 ester groups,"C(=O)O[C,H1].C(=O)O[C,H1].C(=O)O[C,H1]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters 56,2,2-halo pyridine,"n1c([F,Cl,Br,I])cccc1",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters 57,2,acid halide,"C(=O)[Cl,Br,I,F]",Dundee,4,1,ChEMBL,University of Dundee NTD Screening Library Filters diff --git a/medchem/query/_eval.py b/medchem/query/_eval.py index 1212150..4651bcb 100644 --- a/medchem/query/_eval.py +++ b/medchem/query/_eval.py @@ -208,7 +208,7 @@ def hasprop(mol: Union[dm.Mol, str], prop: str, comparator: Callable, limit: flo _prop = prop if _prop is None: - raise ValueError("Prop is None") + raise ValueError(f"Prop is None: '{prop}'") computed = _prop(mol) return comparator(computed, limit) diff --git a/tests/test_catalogs.py b/tests/test_catalogs.py index 3eeaf47..2d54f52 100644 --- a/tests/test_catalogs.py +++ b/tests/test_catalogs.py @@ -47,7 +47,7 @@ def test_NamedCatalogs(): "dnabinder", "dundee", "electrophilic", - "gsk", + "glaxo", "gst_hitters", "his_hitters", "hitters", From f00681022e7137af35fb9508db4a7b1e70962e3d Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Mon, 10 Jul 2023 14:43:34 -0400 Subject: [PATCH 30/31] minor tweaks --- medchem/query/_eval.py | 2 +- medchem/utils/smarts.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/medchem/query/_eval.py b/medchem/query/_eval.py index 4651bcb..1adf9a7 100644 --- a/medchem/query/_eval.py +++ b/medchem/query/_eval.py @@ -332,7 +332,7 @@ def __init__(self, parsed_query: Union[str, ParseTree], verbose: bool = False): Args: parsed_query: query that has been parsed and transformed - verbose: whrther to print debug information + verbose: whether to print debug information """ parsed_query = str(parsed_query) diff --git a/medchem/utils/smarts.py b/medchem/utils/smarts.py index 6a4aeea..7f3efd1 100644 --- a/medchem/utils/smarts.py +++ b/medchem/utils/smarts.py @@ -1,5 +1,4 @@ from typing import Optional -from typing import List import datamol as dm From f18ba22c3f5a0ebb65826c7388c46f7bf8875235 Mon Sep 17 00:00:00 2001 From: Hadrien Mary Date: Mon, 10 Jul 2023 15:13:25 -0400 Subject: [PATCH 31/31] Acknowledgement and notice section --- docs/index.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/docs/index.md b/docs/index.md index adabe51..308ff4c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -9,3 +9,43 @@ Medchem is a Python library that proposes multiple molecular medchem filters to ```bash micromamba install -c conda-forge medchem ``` + +## Getting Started + +The best way to get started is by going through the tutorials. + +## Usage Notice + +While medchem filters, alerts and rules are powerfull ways to triage a list of drug-like compounds, it's **important** to always keep in mind to **never apply those filters blindly**. It's impossible for such filters to take into account the full diversity of the drug-like chemical space and by applying them blindly you might discard interesting compounds or let pass toxic or unwanted compounds. + +> _Don't blindly apply Medchem filters; you may miss gems or allow toxins._ + +## Acknowledgement + +Medchem proposes a large list of mechem filters, alerts and rules. All of those has been built over the years by the scientific community and we would like to thanks everyone who has contributed to those collections and filtering methods. + +### Eli Lilly Medchem Rules + +Originally proposed in ["Rules for Identifying Potentially Reactive or Promiscuous Compounds" in 2012](https://doi.org/10.1021/jm301008n) by Robert F. Bruns and Ian A. Watson. Medchem is re-using the implementation from . + +The Medchem implementation can be used from `medchem.structural.lilly_demerits`. + +### NIBR Filters + +Rules used by Novartis to build their new screening deck. First proposed in ["Evolution of Novartis' small molecule screening deck design" by Schuffenhauer, A. et al. J. Med. Chem. (2020)](https://dx.doi.org/10.1021/acs.jmedchem.0c01332). + +The Medchem implementation ca be found at `medchem.structural.NIBRFilters()`. + +### Structural Alerts Filters + +These are alerts rules from the ChEMBL database curation scheme and public litterature on promiscuous compounds on commons assays. We thanks [Patrick Walters](https://twitter.com/wpwalters) for putting together this list of alerts. + +The original implementation by Patrick Walters can be found at with [its companion blog post](https://practicalcheminformatics.blogspot.com/2018/08/filtering-chemical-libraries.html). + +The Medchem implementation can be found at `medchem.structural.CommonAlertsFilters()`. + +### RDKit Catalogs + +RDKit contains also contains a large list of filtering catalogs on which Medchem relies for the filtering logic. + +Those catalogs can be found at `medchem.catalogs.NamedCatalogs`.