Skip to content
Snippets Groups Projects
Commit f6119a70 authored by elabaron's avatar elabaron
Browse files

Solve merge conflict

parents ec3eb579 3efbbb5e
No related branches found
No related tags found
No related merge requests found
Showing with 2173 additions and 0 deletions
...@@ -18,3 +18,8 @@ hs_err_pid* ...@@ -18,3 +18,8 @@ hs_err_pid*
# Docker Specific # Docker Specific
*apt.list *apt.list
*conda.list *conda.list
nextflow
.nextflow.log*
.nextflow/
work/
results
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.4.0] - 2019-11-18
### Added
- Add new tools (star,...)
- conda support at the psmn
## Changed
- configuration simplification
- docker and singularity image download instead of local build
- hidden directories in `src` for project clarity (only `nf_modules` is visible)
## Removed
- conda support at in2p3 with `-profile in2p3_conda`
## [0.3.0] - 2019-05-23
### Added
- Add new tools (umi_tools, fastp,...)
- singularity support at in2p3 with `-profile in2p3`
- conda support at in2p3 with `-profile in2p3_conda`
## [0.2.9] - 2019-03-26
### Added
- Add new tools (fastq, macs2, umitools, ...)
- singularity support
### Changed
- every tool name is now in lowercase in each module section
## [0.2.7] - 2018-10-23
### Added
- Add new tools (BWA, GATK, sambamba, ...)
### Changed
- `sge` profile is now called `psmn` profile to prepare tests in the CCIN2P3
- every `psmn` config file has an update configuration for mono or 16 cpus queues
- update process naming to follow new nextflow format
## [0.2.6] - 2018-08-23
### Added
- Added `src/training_dataset.nf` to build a small training dataset from NGS data
### Changed
- the structure of `src/nf_modules`: the `tests` folder was removed
## [0.2.5] - 2018-08-22
### Added
- This fine changelog
### Changed
- the structure of `src/nf_modules`: the `tests` folder was removed
## [0.2.4] - 2018-08-02
### Changed
- add `paired_id` variable in the output of every single-end data processes to match the paired output
## [0.2.3] - 2018-07-25
### Added
- List of tools available as nextflow, docker or sge module to the `README.md`
## [0.2.2] - 2018-07-23
### Added
- SRA module from cigogne/nextflow-master 52b510e48daa1fb7
## [0.2.1] - 2018-07-23
### Added
- List of tools available as nextflow, docker or sge module
## [0.2.0] - 2018-06-18
### Added
- `doc/TP_computational_biologists.md`
- Kallisto/0.44.0
### Changed
- add `paired_id` variable in the output of every paired data processes
- BEDtools: fixes for fasta handling
- UrQt: fix git version in Docker
## [0.1.2] - 2018-06-18
### Added
- `doc/tp_experimental_biologist.md` and Makefile to build the pdf
- tests files for BEDtools
### Changed
- Kallisto: various fixes
- UrQt: improve output and various fixes
### Removed
- `src/nf_test.config` modules have their own `.config`
## [0.1.2] - 2018-06-18
### Added
- `doc/tp_experimental_biologist.md` and Makefile to build the pdf
- tests files for BEDtools
### Changed
- Kallisto: various fixes
- UrQt: improve output and various fixes
### Removed
- `src/nf_test.config` modules have their own `.config`
## [0.1.0] - 2018-05-06
This is the first working version of the repository as a nextflow module repository
# Contributing
When contributing to this repository, please first discuss the change you wish to make via issue,
email, or any other method with the owners of this repository before making a change.
Please note we have a code of conduct, please follow it in all your interactions with the project.
## Pull Request Process
1. Ensure any install or build dependencies are removed before the end of the layer when doing a
build.
2. Update the README.md with details of changes to the interface, this includes new environment
variables, exposed ports, useful file locations and container parameters.
3. Increase the version numbers in any examples files and the README.md to the new version that this
Pull Request would represent. The versioning scheme we use is [SemVer](http://semver.org/).
4. You may merge the Pull Request in once you have the sign-off of two other developers, or if you
do not have permission to do that, you may request the second reviewer to merge it for you.
## Code of Conduct
### Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of experience,
nationality, personal appearance, race, religion, or sexual identity and
orientation.
### Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
### Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
### Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
### Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at [INSERT EMAIL ADDRESS]. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
### Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at [http://contributor-covenant.org/version/1/4][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/
This diff is collapsed.
...@@ -177,3 +177,46 @@ Also turn set the metadata flag to true, in the project file: ...@@ -177,3 +177,46 @@ Also turn set the metadata flag to true, in the project file:
Metadata will be stored in the output ribo file. Metadata will be stored in the output ribo file.
# nextflow pipeline
This repository is a template and a library repository to help you build nextflow pipeline.
You can fork this repository to build your own pipeline.
To get the last commits from this repository into your fork use the following commands:
```sh
git remote add upstream gitlab_lbmc:pipelines/nextflow.git
git pull upstream master
```
**If you created your `.config` file before version `0.4.0` you need to run the script `src/.update_config.sh` to use the latest docker, singularity and conda configuration (don't forget to check your config files afterward for typos).**
## Getting Started
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system.
[you can follow them here.](doc/getting_started.md)
## Available tools
[The list of available tools.](doc/available_tools.md)
## Projects using nextflow
[A list of projects using nextflow at the LBMC.](doc/nf_projects.md)
## Contributing
Please read [CONTRIBUTING.md](CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to us.
## Versioning
We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://gitlab.biologie.ens-lyon.fr/pipelines/nextflow/tags).
## Authors
* **Laurent Modolo** - *Initial work*
See also the list of [contributors](https://gitlab.biologie.ens-lyon.fr/pipelines/nextflow/graphs/master) who participated in this project.
## License
This project is licensed under the CeCiLL License- see the [LICENSE](LICENSE) file for details
*
*
*.pdf
all: TP_experimental_biologists.pdf TP_computational_biologists.pdf ../public/TP_experimental_biologists.html ../public/TP_computational_biologists.html
../public/TP_experimental_biologists.html: TP_experimental_biologists.md
pandoc -s TP_experimental_biologists.md -o ../public/TP_experimental_biologists.html
../public/TP_computational_biologists.html: TP_computational_biologists.md
pandoc -s TP_computational_biologists.md -o ../public/TP_computational_biologists.html
TP_experimental_biologists.pdf: TP_experimental_biologists.md
R -e 'require(rmarkdown); rmarkdown::render("TP_experimental_biologists.md")'
TP_computational_biologists.pdf: TP_computational_biologists.md
R -e 'require(rmarkdown); rmarkdown::render("TP_computational_biologists.md")'
---
title: "TP for computational biologists"
author: Laurent Modolo [laurent.modolo@ens-lyon.fr](mailto:laurent.modolo@ens-lyon.fr)
date: 20 Jun 2018
output:
pdf_document:
toc: true
toc_depth: 3
number_sections: true
highlight: tango
latex_engine: xelatex
---
The goal of this practical is to learn how to *wrap* tools in [Docker](https://www.docker.com/what-docker) or [Environment Module](http://www.ens-lyon.fr/PSMN/doku.php?id=documentation:tools:modules) to make them available to nextflow on a personal computer or at the [PSMN](http://www.ens-lyon.fr/PSMN/doku.php).
Here we assume that you followed the [TP for experimental biologists](./TP_experimental_biologists.md), and that you know the basics of [Docker containers](https://www.docker.com/what-container) and [Environment Module](http://www.ens-lyon.fr/PSMN/doku.php?id=documentation:tools:modules). We are also going to assume that you know how to build and use a nextflow pipeline from the template [pipelines/nextflow](https://gitlab.biologie.ens-lyon.fr/pipelines/nextflow).
For the practical you can either work with the WebIDE of Gitlab, or locally as described in the [git: basis formation](https://gitlab.biologie.ens-lyon.fr/formations/git_basis).
# Docker
To run a tool within a [Docker container](https://www.docker.com/what-container) you need to write a `Dockerfile`.
[`Dockerfile`](./src/docker_modules/kallisto/0.44.0/Dockerfile) are found in the [pipelines/nextflow](https://gitlab.biologie.ens-lyon.fr/pipelines/nextflow) project under `src/docker_modules/`. Each [`Dockerfile`](./src/docker_modules/kallisto/0.44.0/Dockerfile) is paired with a [`docker_init.sh`](./src/docker_modules/kallisto/0.44.0/docker_init.sh) file like following the example for `Kallisto` version `0.43.1`:
```sh
$ ls -l src/docker_modules/kallisto/0.43.1/
total 16K
drwxr-xr-x 2 laurent users 4.0K Jun 5 19:06 ./
drwxr-xr-x 3 laurent users 4.0K Jun 6 09:49 ../
-rw-r--r-- 1 laurent users 587 Jun 5 19:06 Dockerfile
-rwxr-xr-x 1 laurent users 79 Jun 5 19:06 docker_init.sh*
```
## [`docker_init.sh`](./src/docker_modules/kallisto/0.44.0/docker_init.sh)
The [`docker_init.sh`](./src/docker_modules/kallisto/0.44.0/docker_init.sh) is a simple sh script with executable rights (`chmod +x`). By executing this script, the user creates a [Docker container](https://www.docker.com/what-container) with the tool installed a specific version. You can check the [`docker_init.sh`](./src/docker_modules/kallisto/0.44.0/docker_init.sh) file of any implemented tools as a template.
Remember that the name of the [container](https://www.docker.com/what-container) must be in lower case and in the format `<tool_name>:<version>`.
For tools without a version number you can use a commit hash instead.
## [`Dockerfile`](./src/docker_modules/kallisto/0.44.0/Dockerfile)
The recipe to wrap your tool in a [Docker container](https://www.docker.com/what-container) is written in a [`Dockerfile`](./src/docker_modules/kallisto/0.44.0/Dockerfile) file.
For `Kallisto` version `0.44.0` the header of the `Dockerfile` is :
```Docker
FROM ubuntu:18.04
MAINTAINER Laurent Modolo
ENV KALLISTO_VERSION=0.44.0
```
The `FROM` instruction means that the [container](https://www.docker.com/what-container) is initialized from a bare installation of Ubuntu 18.04. You can check the versions of Ubuntu available [here](https://hub.docker.com/_/ubuntu/) or others operating systems like [debian](https://hub.docker.com/_/debian/) or [worst](https://hub.docker.com/r/microsoft/windowsservercore/).
Then we declare the *maintainer* of the container. Before declaring an environment variable for the container named `KALLISTO_VERSION`, which contains the version of the tool wrapped. This this bash variable will be declared for the user root within the [container](https://www.docker.com/what-container).
You should always declare a variable `TOOLSNAME_VERSION` that contains the version number of commit number of the tools you wrap. In simple cases you just have to modify this line to create a new `Dockerfile` for another version of the tool.
The following lines of the [`Dockerfile`](./src/docker_modules/kallisto/0.44.0/Dockerfile) are a succession of `bash` commands executed as the **root** user within the container.
Each `RUN` block is run sequentially by `Docker`. If there is an error or modifications in a `RUN` block, only this block and the following `RUN` will be executed.
You can learn more about the building of Docker containers [here](https://docs.docker.com/engine/reference/builder/#usage).
When you build your [`Dockerfile`](./src/docker_modules/kallisto/0.44.0/Dockerfile), instead of launching many times the [`docker_init.sh`](./src/docker_modules/kallisto/0.44.0/docker_init.sh) script to tests your [container](https://www.docker.com/what-container), you can connect to a base container in interactive mode to launch tests your commands.
```sh
docker run -it ubuntu:18.04 bash
KALLISTO_VERSION=0.44.0
```
# SGE / [PSMN](http://www.ens-lyon.fr/PSMN/doku.php)
To run easily tools on the [PSMN](http://www.ens-lyon.fr/PSMN/doku.php), you need to build your own [Environment Module](http://www.ens-lyon.fr/PSMN/doku.php?id=documentation:tools:modules).
You can read the Contributing guide for the [PMSN/modules](https://gitlab.biologie.ens-lyon.fr/PSMN/modules) project [here](https://gitlab.biologie.ens-lyon.fr/PSMN/modules/blob/master/CONTRIBUTING.md)
# Nextflow
The last step to wrap your tool is to make it available in nextflow. For this you need to create at least 4 files, like the following for Kallisto version `0.44.0`:
```sh
ls -lR src/nf_modules/kallisto
src/nf_modules/kallisto/:
total 12
-rw-r--r-- 1 laurent users 551 Jun 18 17:14 index.nf
-rw-r--r-- 1 laurent users 901 Jun 18 17:14 mapping_paired.nf
-rw-r--r-- 1 laurent users 1037 Jun 18 17:14 mapping_single.nf
-rwxr-xr-x 1 laurent users 627 Jun 18 17:14 tests.sh*
```
The [`.config` files](./src/nf_modules/kallisto/) file contains instructions for two profiles : `psmn` and `docker`.
The [`.nf` files](./src/nf_modules/kallisto/) file contains nextflow processes to use `Kallisto`.
The [`tests/tests.sh`](./src/nf_modules/kallisto/tests/tests.sh) script (with executable rights), contains a series of nextflow calls on the other `.nf` files of the folder. Those tests correspond to execution of the `*.nf` files present in the [`kallisto folder`](./src/nf_modules/kallisto/) on the [LBMC/tiny_dataset](https://gitlab.biologie.ens-lyon.fr/LBMC/tiny_dataset) dataset with the `docker` profile. You can read the *Running the tests* section of the [README.md](https://gitlab.biologie.ens-lyon.fr/pipelines/nextflow/blob/master/README.md).
## [`kallisto.config`](./src/nf_modules/kallisto/)
The `.config` file defines the configuration to apply to your process conditionally to the value of the `-profile` option. You must define configuration for at least the `psmn` and `docker` profile.
```Groovy
profiles {
docker {
docker.temp = 'auto'
docker.enabled = true
process {
}
}
psmn {
process{
}
}
```
### `docker` profile
The `docker` profile starts by enabling docker for the whole pipeline. After that you only have to define the container name for each process:
For example, for `Kallisto` with the version `0.44.0`, we have:
```Groovy
process {
withName: index_fasta {
container = "kallisto:0.44.0"
}
withName: mapping_fastq {
container = "kallisto:0.44.0"
}
}
```
### `psmn` profile
The `psmn` profile defines for each process all the informations necessary to launch your process on a given queue with SGE at the [PSMN](http://www.ens-lyon.fr/PSMN/doku.php).
For example, for `Kallisto`, we have:
```Groovy
process{
withName: index_fasta {
beforeScript = "source /usr/share/lmod/lmod/init/bash; module use ~/privatemodules"
module = "Kallisto/0.44.0"
executor = "sge"
cpus = 16
memory = "30GB"
time = "24h"
queue = 'E5-2670deb128A,E5-2670deb128B,E5-2670deb128C,E5-2670deb128D,E5-2670deb128E,E5-2670deb128F'
penv = 'openmp16'
}
withName: mapping_fastq {
beforeScript = "source /usr/share/lmod/lmod/init/bash; module use ~/privatemodules"
module = "Kallisto/0.44.0"
executor = "sge"
cpus = 16
memory = "30GB"
time = "24h"
queue = 'E5-2670deb128A,E5-2670deb128B,E5-2670deb128C,E5-2670deb128D,E5-2670deb128E,E5-2670deb128F'
penv = 'openmp16'
}
}
```
The `beforeScript` variable is executed before the main script for the corresponding process.
## [`kallisto.nf`](./src/nf_modules/kallisto/kallisto.nf)
The [`kallisto.nf`](./src/nf_modules/kallisto/kallisto.nf) file contains examples of nextflow process that execute Kallisto.
- Each example must be usable as it is to be incorporated in a nextflow pipeline.
- You need to define, default value for the parameters passed to the process.
- Input and output must be clearly defined.
- Your process should be usable as a starting process or a process retrieving the output of another process.
For more informations on processes and channels you can check the [nextflow documentation](https://www.nextflow.io/docs/latest/index.html).
## Making your wrapper available to the LBMC
To make your module available to the LBMC you must have a `tests.sh` script and one or many `docker_init.sh` scripts working without errors.
All the processes in your `.nf` must be covered by the tests.
After pushing your modifications on your forked repository, you can make a Merge Request to the [PSMN/modules](https://gitlab.biologie.ens-lyon.fr/pipelines/nextflow) **dev** branch. Where it will be tested and integrated to the **master** branch.
You can read more on this process [here](https://guides.github.com/introduction/flow/)
This diff is collapsed.
## Available tools
- **nf module**: a working example of nextflow process is available in `src/nf_modules/<tools>/<tool>.nf` and `src/nf_modules/<tools>/<tool>.config`
- **docker module**: you can create a docker with the `src/docker_modules/<tool>/<version>/docker_init.sh`
- **psmn module**: you can use the tool in the PSMN
- **IN2P3 module**: you can use the tool in the CCIN2P3
| tool | nf module | docker module | psmn module | in2p3 module |
|------|:---------:|:-------------:|:-----------:|:-------------:|
BEDtools | ok | ok | ok | ok
BFCtools |**no** | ok | ok | ok
bioawk |**no** | ok | ok | ok
Bowtie | ok | ok | **no** | ok
Bowtie2 | ok | ok | ok | ok
BWA | ok | ok | ok | ok
canu | ok | ok | ok | ok
cutadapt | ok | ok | ok | ok
deepTools | ok | ok | ok | ok
fastp | ok | ok | ok | ok
FastQC | ok | ok | ok | ok
file_handle | **no** | ok | ok | ok
GATK | **no** | ok | ok | ok
HISAT2 | ok | ok | ok | ok
HTSeq | ok | ok | ok | ok
Kallisto | ok | ok | ok | ok
MACS2 | ok | ok | ok | ok
MultiQC | ok | ok | ok | ok
MUSIC | ok | ok | ok | ok
picard | **no** | ok | ok | ok
pigz | **no** | ok | ok | ok
RSEM | ok | ok | ok | ok
Salmon | **no** | ok | ok | ok
sambamba | ok | ok | ok | ok
samblaster | ok | ok | ok | ok
SAMtools | ok | ok | ok | ok
SRAtoolkit | ok | ok | ok | ok
STAR | ok | ok | ok | ok
subread | **no** | ok | ok | ok
TopHat | **no** | ok | ok | ok
Trimmomatic | **no** | ok | ok | ok
UMItools | **no** | ok | ok | ok
UrQt | ok | ok | ok | ok
## Getting Started
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system.
### Prerequisites
To run nextflow on you computer you need to have java (>= 1.8) installed.
```sh
java --version
```
To be able to easily test tools already implemented for nextflow on your computer (`src/nf_modules/` to see their list). You need to have docker installed.
```sh
docker run hello-world
```
### Installing
To install nextflow on you computer simply run the following command:
```sh
src/install_nextflow.sh
```
Then to initialize a given tools run the following command:
```sh
src/docker_modules/<tool_name>/<tool_version>/docker_init.sh
```
For example to initialize `file_handle` version `0.1.1`, run:
```sh
src/docker_modules/file_handle/0.1.1/docker_init.sh
```
To initialize all the tools:
```sh
find src/docker_modules/ -name "docker_init.sh" | awk '{system($0)}'
```
## Running the tests
To run tests we first need to get a training set
```sh
cd data
git clone -c http.sslVerify=false https://gitlab.biologie.ens-lyon.fr/LBMC/tiny_dataset.git
cp tiny_dataset/fastq/tiny_R1.fastq tiny_dataset/fastq/tiny2_R1.fastq
cp tiny_dataset/fastq/tiny_R2.fastq tiny_dataset/fastq/tiny2_R2.fastq
cp tiny_dataset/fastq/tiny_S.fastq tiny_dataset/fastq/tiny2_S.fastq
cd ..
```
Then to run the tests for a given tools run the following command:
```sh
src/nf_modules/<tool_name>/<tool_version>/tests.sh
```
For example to run the tests on `Bowtie2` run:
```sh
src/nf_modules/bowtie2/tests.sh
```
doc/img/fork.png

8.31 KiB

doc/img/merge_request.png

7.71 KiB

doc/img/webide.png

15.1 KiB

[Formation BioComp] nextflow for experimental biologists
Dear all,
You registered for the nextflow formation which will take place this afternoon starting at 13h30 in the room M7.1H04.
Please check that you have an account on our gitlab server at the following url :
https://gitlab.biologie.ens-lyon.fr
To connect, simply click on the CAS button.
Your account is now linked to the gitlab server, but blocked
You can send an email to laurent.modolo@ens-lyon.fr to activate your account.
You will also need an account on the PSMN (http://www.ens-lyon.fr/PSMN/doku.php?id=contact:forms:inscription)
If you want to work on your laptop, or plan to work remotely on your desktop via ssh (http://www.ens-lyon.fr/LBMC/intranet/services-communs/pole-bioinformatique/bioinfo_club/1_ssh_and_other_tools_to_work_remotly) you need to have the following software installed :
- ssh
- git
- java (>=1.8)
- docker
Best,
## Projects using nextflow
### RNASeq
- [https://_https://gitlab.biologie.ens-lyon.fr/gylab/salmoninyeast](https://_https://gitlab.biologie.ens-lyon.fr/gylab/salmoninyeast)
- [https://github.com/LBMC/readthroughpombe](https://github.com/LBMC/readthroughpombe)
- [https://_https://gitlab.biologie.ens-lyon.fr/vvanoost/nextflow](https://_https://gitlab.biologie.ens-lyon.fr/vvanoost/nextflow)
- [https://gitlab.biologie.ens-lyon.fr/elabaron/HIV_project](https://gitlab.biologie.ens-lyon.fr/elabaron/HIV_project)
### single-cell RNA_-Seq
- [https://gitlab.com/LBMC_UMR5239/sbdm/mars-seq](https://gitlab.com/LBMC_UMR5239/sbdm/mars-seq)
### DNASeq
- [https://github.com/LBMC/ChrSexebelari](https://github.com/LBMC/ChrSexebelari)
### Chip-Seq
- [https://gitlab.biologie.ens-lyon.fr/Auboeuf/ChIP-seq](https://gitlab.biologie.ens-lyon.fr/Auboeuf/ChIP-seq)
This diff is collapsed.
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment