FastQC/MultiQC assessment of raw and flexbar-trimmed sequences of E5 A.pulchra sRNAseq data from 20230515.

Inputs:

  • sRNAseq gzipped FastQs (e.g. *.fastq.gz)

Outputs:

  • FastQC HTML reports for raw and trimmed reads.

  • MultiQC HTML summaries of FastQC for raw and trimmed reads.

  • Trimmed reads with final length of 25bp: *flexbar_trim.25bp.fastq.gz

Libraries were prepared and sequenced by Azenta:


1 Create a Bash variables file

This allows usage of Bash variables across R Markdown chunks.

{
echo "#### Assign Variables ####"
echo ""

echo "# Data directories"
echo 'export deep_dive_dir=/home/shared/8TB_HDD_01/sam/gitrepos/deep-dive'
echo 'export output_dir_top=${deep_dive_dir}/D-Apul/output/08-Apul-sRNAseq-trimming'
echo 'export raw_fastqc_dir=${deep_dive_dir}/D-Apul/output/08-Apul-sRNAseq-trimming/raw-fastqc'
echo 'export raw_reads_dir=${deep_dive_dir}/D-Apul/data/08-Apul-sRNAseq-trimming/raw-reads'
echo 'export raw_reads_url="https://owl.fish.washington.edu/nightingales/A_pulchra/30-852430235/"'
echo 'export trimmed_fastqc_dir=${deep_dive_dir}/D-Apul/output/08-Apul-sRNAseq-trimming/trimmed-fastqc'
echo 'export trimmed_reads_dir=${deep_dive_dir}/D-Apul/output/08-Apul-sRNAseq-trimming/trimmed-reads'
echo ""

echo "# Paths to programs"
echo 'export fastqc=/home/shared/FastQC-0.12.1/fastqc'
echo 'export flexbar=/home/shared/flexbar-3.5.0-linux/flexbar'
echo 'export multiqc=/home/sam/programs/mambaforge/bin/multiqc'
echo ""



echo "# Set FastQ filename patterns"
echo "export fastq_pattern='*.fastq.gz'"
echo "export R1_fastq_pattern='*_R1_*.fastq.gz'"
echo "export R2_fastq_pattern='*_R2_*.fastq.gz'"
echo ""

echo "# Set number of CPUs to use"
echo 'export threads=40'
echo ""

echo "# Set maximum read length"
echo 'export max_read_length=25'
echo ""

echo "# Input/output files"
echo 'export fastq_checksums=input_fastq_checksums.md5'
echo 'export trimmed_checksums=trimmed_fastq_checksums.md5'
echo 'export NEB_adapters_fasta=NEB-adapters.fasta'
echo ""

echo "## NEB nebnext-small-rna-library-prep-set-for-illumina adapters"
echo 'export first_adapter="AGATCGGAAGAGCACACGTCTGAACTCCAGTCAC"'
echo 'export second_adapter="GATCGTCGGACTGTAGAACTCTGAACGTGTAGATCTCGGTGGTCGCCGTATCATT"'
echo ""

echo "## Inititalize arrays"
echo 'export fastq_array_R1=()'
echo 'export fastq_array_R2=()'
echo 'export raw_fastqs_array=()'
echo 'export R1_names_array=()'
echo 'export R2_names_array=()'
echo 'export trimmed_fastqs_array=()'
echo ""

echo "# Programs associative array"
echo "declare -A programs_array"
echo "programs_array=("
echo '[fastqc]="${fastqc}" \'
echo '[multiqc]="${multiqc}" \'
echo '[flexbar]="${flexbar}"'
echo ")"
} > .bashvars

cat .bashvars
#### Assign Variables ####

# Data directories
export deep_dive_dir=/home/shared/8TB_HDD_01/sam/gitrepos/deep-dive
export output_dir_top=${deep_dive_dir}/D-Apul/output/08-Apul-sRNAseq-trimming
export raw_fastqc_dir=${deep_dive_dir}/D-Apul/output/08-Apul-sRNAseq-trimming/raw-fastqc
export raw_reads_dir=${deep_dive_dir}/D-Apul/data/08-Apul-sRNAseq-trimming/raw-reads
export raw_reads_url="https://owl.fish.washington.edu/nightingales/A_pulchra/30-852430235/"
export trimmed_fastqc_dir=${deep_dive_dir}/D-Apul/output/08-Apul-sRNAseq-trimming/trimmed-fastqc
export trimmed_reads_dir=${deep_dive_dir}/D-Apul/output/08-Apul-sRNAseq-trimming/trimmed-reads

# Paths to programs
export fastqc=/home/shared/FastQC-0.12.1/fastqc
export flexbar=/home/shared/flexbar-3.5.0-linux/flexbar
export multiqc=/home/sam/programs/mambaforge/bin/multiqc

# Set FastQ filename patterns
export fastq_pattern='*.fastq.gz'
export R1_fastq_pattern='*_R1_*.fastq.gz'
export R2_fastq_pattern='*_R2_*.fastq.gz'

# Set number of CPUs to use
export threads=40

# Set maximum read length
export max_read_length=25

# Input/output files
export fastq_checksums=input_fastq_checksums.md5
export trimmed_checksums=trimmed_fastq_checksums.md5
export NEB_adapters_fasta=NEB-adapters.fasta

## NEB nebnext-small-rna-library-prep-set-for-illumina adapters
export first_adapter="AGATCGGAAGAGCACACGTCTGAACTCCAGTCAC"
export second_adapter="GATCGTCGGACTGTAGAACTCTGAACGTGTAGATCTCGGTGGTCGCCGTATCATT"

## Inititalize arrays
export fastq_array_R1=()
export fastq_array_R2=()
export raw_fastqs_array=()
export R1_names_array=()
export R2_names_array=()
export trimmed_fastqs_array=()

# Programs associative array
declare -A programs_array
programs_array=(
[fastqc]="${fastqc}" \
[multiqc]="${multiqc}" \
[flexbar]="${flexbar}"
)

2 Download raw sRNAseq reads

Reads are downloaded from https://owl.fish.washington.edu/nightingales/A_pulchra/30-852430235/

The --cut-dirs 3 command cuts the preceding directory structure (i.e. nightingales/A_pulchra/30-852430235/) so that we just end up with the reads.

# Load bash variables into memory
source .bashvars

wget \
--directory-prefix ${raw_reads_dir} \
--recursive \
--no-check-certificate \
--continue \
--cut-dirs 3 \
--no-host-directories \
--no-parent \
--quiet \
--accept "sRNA*,checksums.md5" ${raw_reads_url}

ls -lh "${raw_reads_dir}"
total 9.0G
-rw-r--r-- 1 sam sam  1.4K May 17 10:39 checksums.md5
-rw-r--r-- 1 sam sam  848M May 17 10:20 sRNA-ACR-140-S1-TP2_R1_001.fastq.gz
-rw-r--r-- 1 sam sam  892M May 17 10:21 sRNA-ACR-140-S1-TP2_R2_001.fastq.gz
-rw-r--r-- 1 sam sam 1019M May 17 10:22 sRNA-ACR-145-S1-TP2_R1_001.fastq.gz
-rw-r--r-- 1 sam sam  986M May 17 10:22 sRNA-ACR-145-S1-TP2_R2_001.fastq.gz
-rw-r--r-- 1 sam sam  911M May 17 10:23 sRNA-ACR-150-S1-TP2_R1_001.fastq.gz
-rw-r--r-- 1 sam sam  1.1G May 17 10:23 sRNA-ACR-150-S1-TP2_R2_001.fastq.gz
-rw-r--r-- 1 sam sam  902M May 17 10:24 sRNA-ACR-173-S1-TP2_R1_001.fastq.gz
-rw-r--r-- 1 sam sam  917M May 17 10:25 sRNA-ACR-173-S1-TP2_R2_001.fastq.gz
-rw-r--r-- 1 sam sam  803M May 17 10:25 sRNA-ACR-178-S1-TP2_R1_001.fastq.gz
-rw-r--r-- 1 sam sam  836M May 17 10:26 sRNA-ACR-178-S1-TP2_R2_001.fastq.gz

2.1 Verify raw read checksums

# Load bash variables into memory
source .bashvars

cd "${raw_reads_dir}"

# Checksums file contains other files, so this just looks for the sRNAseq files.
grep "sRNA" checksums.md5 | md5sum --check
sRNA-ACR-140-S1-TP2_R1_001.fastq.gz: OK
sRNA-ACR-140-S1-TP2_R2_001.fastq.gz: OK
sRNA-ACR-145-S1-TP2_R1_001.fastq.gz: OK
sRNA-ACR-145-S1-TP2_R2_001.fastq.gz: OK
sRNA-ACR-150-S1-TP2_R1_001.fastq.gz: OK
sRNA-ACR-150-S1-TP2_R2_001.fastq.gz: OK
sRNA-ACR-173-S1-TP2_R1_001.fastq.gz: OK
sRNA-ACR-173-S1-TP2_R2_001.fastq.gz: OK
sRNA-ACR-178-S1-TP2_R1_001.fastq.gz: OK
sRNA-ACR-178-S1-TP2_R2_001.fastq.gz: OK

3 Create adapters FastA for use with flexbar trimming

# Load bash variables into memory
source .bashvars

echo "Creating adapters FastA."
echo ""
adapter_count=0

# Check for adapters file first
# Then create adapters file if doesn't exist
if [ -f "${output_dir_top}/${NEB_adapters_fasta}" ]; then
  echo "${output_dir_top}/${NEB_adapters_fasta} already exists. Nothing to do."
else
  for adapter in "${first_adapter}" "${second_adapter}"
  do
    adapter_count=$((adapter_count + 1))
    printf ">%s\n%s\n" "adapter_${adapter_count}" "${adapter}"
  done >> "${output_dir_top}/${NEB_adapters_fasta}"
fi

echo ""
echo "Adapters FastA:"
echo ""
cat "${output_dir_top}/${NEB_adapters_fasta}"
echo ""
Creating adapters FastA.

/home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/D-Apul/output/08-Apul-sRNAseq-trimming/NEB-adapters.fasta already exists. Nothing to do.

Adapters FastA:

>adapter_1
AGATCGGAAGAGCACACGTCTGAACTCCAGTCAC
>adapter_2
GATCGTCGGACTGTAGAACTCTGAACGTGTAGATCTCGGTGGTCGCCGTATCATT

4 FastQC/MultiQC on raw reads

# Load bash variables into memory
source .bashvars

############ RUN FASTQC ############


# Create array of trimmed FastQs
raw_fastqs_array=(${raw_reads_dir}/${fastq_pattern})

# Pass array contents to new variable as space-delimited list
raw_fastqc_list=$(echo "${raw_fastqs_array[*]}")

echo "Beginning FastQC on raw reads..."
echo ""

# Run FastQC
### NOTE: Do NOT quote raw_fastqc_list
${programs_array[fastqc]} \
--threads ${threads} \
--outdir ${raw_fastqc_dir} \
--quiet \
${raw_fastqc_list}

echo "FastQC on raw reads complete!"
echo ""

############ END FASTQC ############

############ RUN MULTIQC ############
echo "Beginning MultiQC on raw FastQC..."
echo ""

${programs_array[multiqc]} ${raw_fastqc_dir} -o ${raw_fastqc_dir}

echo ""
echo "MultiQC on raw FastQs complete."
echo ""

############ END MULTIQC ############

echo "Removing FastQC zip files."
echo ""
rm ${raw_fastqc_dir}/*.zip
echo "FastQC zip files removed."
echo ""

# View directory contents
ls -lh ${raw_fastqc_dir}
Beginning FastQC on raw reads...

application/gzip
application/gzip
application/gzip
application/gzip
application/gzip
application/gzip
application/gzip
application/gzip
application/gzip
application/gzip
FastQC on raw reads complete!

Beginning MultiQC on raw FastQC...


  /// MultiQC 🔍 | v1.14

|           multiqc | MultiQC Version v1.17 now available!
|           multiqc | Search path : /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/D-Apul/output/08-Apul-sRNAseq-trimming/raw-fastqc
|         searching | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 23/23  
|            fastqc | Found 10 reports
|           multiqc | Compressing plot data
|           multiqc | Report      : ../output/08-Apul-sRNAseq-trimming/raw-fastqc/multiqc_report.html
|           multiqc | Data        : ../output/08-Apul-sRNAseq-trimming/raw-fastqc/multiqc_data
|           multiqc | MultiQC complete

MultiQC on raw FastQs complete.

Removing FastQC zip files.

FastQC zip files removed.

total 8.2M
-rw-r--r-- 1 sam sam 132K Oct 31 15:14 fastqc_adapter_content_plot.png
-rw-r--r-- 1 sam sam  98K Oct 31 15:14 fastqc_per_base_sequence_quality_plot.png
drwxr-xr-x 2 sam sam 4.0K Nov  1 11:08 multiqc_data
-rw-r--r-- 1 sam sam 1.3M Nov  1 11:08 multiqc_report.html
-rw-r--r-- 1 sam sam  855 Oct 31 15:14 README.md
-rw-r--r-- 1 sam sam 671K Nov  1 11:08 sRNA-ACR-140-S1-TP2_R1_001_fastqc.html
-rw-r--r-- 1 sam sam 686K Nov  1 11:08 sRNA-ACR-140-S1-TP2_R2_001_fastqc.html
-rw-r--r-- 1 sam sam 672K Nov  1 11:08 sRNA-ACR-145-S1-TP2_R1_001_fastqc.html
-rw-r--r-- 1 sam sam 689K Nov  1 11:08 sRNA-ACR-145-S1-TP2_R2_001_fastqc.html
-rw-r--r-- 1 sam sam 668K Nov  1 11:08 sRNA-ACR-150-S1-TP2_R1_001_fastqc.html
-rw-r--r-- 1 sam sam 686K Nov  1 11:08 sRNA-ACR-150-S1-TP2_R2_001_fastqc.html
-rw-r--r-- 1 sam sam 676K Nov  1 11:08 sRNA-ACR-173-S1-TP2_R1_001_fastqc.html
-rw-r--r-- 1 sam sam 685K Nov  1 11:08 sRNA-ACR-173-S1-TP2_R2_001_fastqc.html
-rw-r--r-- 1 sam sam 674K Nov  1 11:08 sRNA-ACR-178-S1-TP2_R1_001_fastqc.html
-rw-r--r-- 1 sam sam 687K Nov  1 11:08 sRNA-ACR-178-S1-TP2_R2_001_fastqc.html

5 Trimming with flexbar

# Load bash variables into memory
source .bashvars

# Change to directory with raw reads
cd "${raw_reads_dir}"

# Create arrays of FastQ R1 files and sample names
# Do NOT quote R1_fastq_pattern variable
for fastq in ${R1_fastq_pattern}
do
  fastq_array_R1+=("${fastq}")

  # Use parameter substitution to remove all text up to and including last "." from
  # right side of string.
  R1_names_array+=("${fastq%%.*}")
done

# Create array of FastQ R2 files
# Do NOT quote R2_fastq_pattern variable
for fastq in ${R2_fastq_pattern}
do
  fastq_array_R2+=("${fastq}")

  # Use parameter substitution to remove all text up to and including last "." from
  # right side of string.
  R2_names_array+=("${fastq%%.*}")
done


############ RUN FLEXBAR ############
# Uses parameter substitution (e.g. ${R1_sample_name%%_*})to rm the _R[12]
# Uses NEB adapter file
# --adapter-pair-overlap ON: Recommended by NEB sRNA kit
# --qtrim-threshold 25: Minimum quality
# --qtrim-format i1.8: Sets sequencer as illumina
# --post-trim-length: Trim reads from 3' end to max length
# --target: Sets file naming patterns
# --zip-output GZ: Sets type of compression. GZ = gzip

# Run flexbar on files
echo "Beginning flexbar trimming."
echo ""

time \
for index in "${!fastq_array_R1[@]}"
do
  R1_sample_name="${R1_names_array[index]}"
  R2_sample_name="${R2_names_array[index]}"

  # Begin flexbar trimming
  ${programs_array[flexbar]} \
  --reads ${fastq_array_R1[index]} \
  --reads2 ${fastq_array_R2[index]}  \
  --adapters ${output_dir_top}/${NEB_adapters_fasta} \
  --adapter-pair-overlap ON \
  --qtrim-format i1.8 \
  --qtrim-threshold 25 \
  --post-trim-length ${max_read_length} \
  --threads ${threads} \
  --target "${trimmed_reads_dir}/${R1_sample_name%%_*}.flexbar_trim.${max_read_length}bp" \
  --zip-output GZ
        
    # Move to trimmed directory
    # This is done so checksums file doesn't include excess path
    cd ${trimmed_reads_dir}

    # Generate md5 checksums for newly trimmed files
    {
      md5sum "${R1_sample_name%%_*}.flexbar_trim.${max_read_length}bp_1.fastq.gz"
      md5sum "${R2_sample_name%%_*}.flexbar_trim.${max_read_length}bp_2.fastq.gz"
    } >> "${trimmed_checksums}"
    
    # Change back to to raw reads directory
    cd "${raw_reads_dir}"

done

echo ""
echo "flexbar trimming complete."
echo ""

echo "Trimmed FastQs MD5 checksums:"
echo ""

cat "${trimmed_reads_dir}/${trimmed_checksums}"

############ END FLEXBAR ############
Beginning flexbar trimming.


real    19m59.196s
user    295m56.087s
sys 24m36.310s

flexbar trimming complete.

Trimmed FastQs MD5 checksums:

b23f6fdc4f240e383c7a600de877f0be  sRNA-ACR-140-S1-TP2.flexbar_trim.25bp_1.fastq.gz
eddd8d23d0ec50b10b99d44fcd2a633e  sRNA-ACR-140-S1-TP2.flexbar_trim.25bp_2.fastq.gz
313a035a62a7d21b32aeec003a667bc9  sRNA-ACR-145-S1-TP2.flexbar_trim.25bp_1.fastq.gz
47cc778f7fcd7d0e5341e35e4d9d352e  sRNA-ACR-145-S1-TP2.flexbar_trim.25bp_2.fastq.gz
f233655d21bdd984c4e367ff8dfdafae  sRNA-ACR-150-S1-TP2.flexbar_trim.25bp_1.fastq.gz
3c2d082af19281931145751952eadeba  sRNA-ACR-150-S1-TP2.flexbar_trim.25bp_2.fastq.gz
a09c6afdc13752e0b0365ea6fab41e8b  sRNA-ACR-173-S1-TP2.flexbar_trim.25bp_1.fastq.gz
ae6250aef2e37c73861a98c113a8cc89  sRNA-ACR-173-S1-TP2.flexbar_trim.25bp_2.fastq.gz
26c80f93437ef8214f718d0de4f073f6  sRNA-ACR-178-S1-TP2.flexbar_trim.25bp_1.fastq.gz
faf3dc22cc62cecaff092c5d07f4a13a  sRNA-ACR-178-S1-TP2.flexbar_trim.25bp_2.fastq.gz
b23f6fdc4f240e383c7a600de877f0be  sRNA-ACR-140-S1-TP2.flexbar_trim.25bp_1.fastq.gz
eddd8d23d0ec50b10b99d44fcd2a633e  sRNA-ACR-140-S1-TP2.flexbar_trim.25bp_2.fastq.gz
313a035a62a7d21b32aeec003a667bc9  sRNA-ACR-145-S1-TP2.flexbar_trim.25bp_1.fastq.gz
47cc778f7fcd7d0e5341e35e4d9d352e  sRNA-ACR-145-S1-TP2.flexbar_trim.25bp_2.fastq.gz
f233655d21bdd984c4e367ff8dfdafae  sRNA-ACR-150-S1-TP2.flexbar_trim.25bp_1.fastq.gz
3c2d082af19281931145751952eadeba  sRNA-ACR-150-S1-TP2.flexbar_trim.25bp_2.fastq.gz
a09c6afdc13752e0b0365ea6fab41e8b  sRNA-ACR-173-S1-TP2.flexbar_trim.25bp_1.fastq.gz
ae6250aef2e37c73861a98c113a8cc89  sRNA-ACR-173-S1-TP2.flexbar_trim.25bp_2.fastq.gz
26c80f93437ef8214f718d0de4f073f6  sRNA-ACR-178-S1-TP2.flexbar_trim.25bp_1.fastq.gz
faf3dc22cc62cecaff092c5d07f4a13a  sRNA-ACR-178-S1-TP2.flexbar_trim.25bp_2.fastq.gz

6 FastQC/MultiQC on trimmed reads

# Load bash variables into memory
source .bashvars

############ RUN FASTQC ############

### NOTE: Do NOT quote raw_fastqc_list
# Create array of trimmed FastQs
trimmed_fastqs_array=(${trimmed_reads_dir}/${fastq_pattern})

# Pass array contents to new variable as space-delimited list
trimmed_fastqc_list=$(echo "${trimmed_fastqs_array[*]}")

echo "Beginning FastQC on raw reads..."
echo ""

# Run FastQC
${programs_array[fastqc]} \
--threads ${threads} \
--outdir ${trimmed_fastqc_dir} \
--quiet \
${trimmed_fastqc_list}

echo "FastQC on trimmed reads complete!"
echo ""

############ END FASTQC ############

############ RUN MULTIQC ############
echo "Beginning MultiQC on raw FastQC..."
echo ""

${programs_array[multiqc]} ${trimmed_fastqc_dir} -o ${trimmed_fastqc_dir}

echo ""
echo "MultiQC on trimmed FastQs complete."
echo ""

############ END MULTIQC ############

echo "Removing FastQC zip files."
echo ""
rm ${trimmed_fastqc_dir}/*.zip
echo "FastQC zip files removed."
echo ""

# View directory contents
ls -lh ${trimmed_fastqc_dir}
Beginning FastQC on raw reads...

application/gzip
application/gzip
application/gzip
application/gzip
application/gzip
application/gzip
application/gzip
application/gzip
application/gzip
application/gzip
FastQC on trimmed reads complete!

Beginning MultiQC on raw FastQC...


  /// MultiQC 🔍 | v1.14

|           multiqc | MultiQC Version v1.17 now available!
|           multiqc | Search path : /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/D-Apul/output/08-Apul-sRNAseq-trimming/trimmed-fastqc
|         searching | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 23/23  
|            fastqc | Found 10 reports
|           multiqc | Compressing plot data
|           multiqc | Report      : ../output/08-Apul-sRNAseq-trimming/trimmed-fastqc/multiqc_report.html
|           multiqc | Data        : ../output/08-Apul-sRNAseq-trimming/trimmed-fastqc/multiqc_data
|           multiqc | MultiQC complete

MultiQC on trimmed FastQs complete.

Removing FastQC zip files.

FastQC zip files removed.

total 6.5M
-rw-r--r-- 1 sam sam  55K Oct 31 15:14 fastqc_adapter_content_plot.png
-rw-r--r-- 1 sam sam  54K Oct 31 15:14 fastqc_per_base_sequence_quality_plot.png
drwxr-xr-x 2 sam sam 4.0K Nov  1 11:29 multiqc_data
-rw-r--r-- 1 sam sam 1.2M Nov  1 11:29 multiqc_report.html
-rw-r--r-- 1 sam sam 1.1K Oct 31 15:14 README.md
-rw-r--r-- 1 sam sam 523K Nov  1 11:29 sRNA-ACR-140-S1-TP2.flexbar_trim.25bp_1_fastqc.html
-rw-r--r-- 1 sam sam 520K Nov  1 11:29 sRNA-ACR-140-S1-TP2.flexbar_trim.25bp_2_fastqc.html
-rw-r--r-- 1 sam sam 526K Nov  1 11:29 sRNA-ACR-145-S1-TP2.flexbar_trim.25bp_1_fastqc.html
-rw-r--r-- 1 sam sam 522K Nov  1 11:29 sRNA-ACR-145-S1-TP2.flexbar_trim.25bp_2_fastqc.html
-rw-r--r-- 1 sam sam 525K Nov  1 11:29 sRNA-ACR-150-S1-TP2.flexbar_trim.25bp_1_fastqc.html
-rw-r--r-- 1 sam sam 526K Nov  1 11:29 sRNA-ACR-150-S1-TP2.flexbar_trim.25bp_2_fastqc.html
-rw-r--r-- 1 sam sam 525K Nov  1 11:29 sRNA-ACR-173-S1-TP2.flexbar_trim.25bp_1_fastqc.html
-rw-r--r-- 1 sam sam 521K Nov  1 11:29 sRNA-ACR-173-S1-TP2.flexbar_trim.25bp_2_fastqc.html
-rw-r--r-- 1 sam sam 526K Nov  1 11:29 sRNA-ACR-178-S1-TP2.flexbar_trim.25bp_1_fastqc.html
-rw-r--r-- 1 sam sam 530K Nov  1 11:29 sRNA-ACR-178-S1-TP2.flexbar_trim.25bp_2_fastqc.html

7 Summary

A quick comparison of raw and trimmed reads to show trimming worked:

  • quality is improved
  • length is 25bp
  • adapters removed
RAW TRIMMED
Raw MultiQC per base sequence quality plot Trimmed MultiQC per base sequence quality plot
Raw MultiQC adapter content plot Trimmed MultiQC adapter content plot
LS0tCnRpdGxlOiAiMDgtQXB1bC1zUk5Bc2VxLXRyaW1taW5nIgphdXRob3I6ICJTYW0gV2hpdGUiCmRhdGU6ICIyMDIzLTEwLTMwIgpvdXRwdXQ6IAogIGh0bWxfZG9jdW1lbnQ6CiAgICB0aGVtZTogY29zbW8KICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUKICAgIGNvZGVfZm9sZGluZzogc2hvdwogICAgY29kZV9kb3dubG9hZDogdHJ1ZQotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQpsaWJyYXJ5KGtuaXRyKQprbml0cjo6b3B0c19jaHVuayRzZXQoCiAgZWNobyA9IFRSVUUsICAgICAgICAgIyBEaXNwbGF5IGNvZGUgY2h1bmtzCiAgZXZhbCA9IEZBTFNFLCAgICAgICAgIyBFdmFsdWF0ZSBjb2RlIGNodW5rcwogIHdhcm5pbmcgPSBGQUxTRSwgICAgICMgSGlkZSB3YXJuaW5ncwogIG1lc3NhZ2UgPSBGQUxTRSwgICAgICMgSGlkZSBtZXNzYWdlcwogIGNvbW1lbnQgPSAiIiAgICAgICAgICMgUHJldmVudHMgYXBwZW5kaW5nICcjIycgdG8gYmVnaW5uaW5nIG9mIGxpbmVzIGluIGNvZGUgb3V0cHV0CikKYGBgCgoKRmFzdFFDL011bHRpUUMgYXNzZXNzbWVudCBvZiByYXcgYW5kIFtmbGV4YmFyXShodHRwczovL2dpdGh1Yi5jb20vc2VxYW4vZmxleGJhciktdHJpbW1lZCBzZXF1ZW5jZXMgb2YgRTUgX0EucHVsY2hyYV8gc1JOQXNlcSBkYXRhIGZyb20gWzIwMjMwNTE1XShodHRwczovL3JvYmVydHNsYWIuZ2l0aHViLmlvL3NhbXMtbm90ZWJvb2svcG9zdHMvMjAyMy8yMDIzLTA1LTE3LURhdGEtTWFuYWdlbWVudC0tLUU1LUNvcmFsLVJOQS1zZXEtYW5kLXNSTkEtc2VxLVJlb3JnYW5pemluZy1hbmQtUmVuYW1pbmcvKS4KCklucHV0czoKCi0gc1JOQXNlcSBnemlwcGVkIEZhc3RRcyAoZS5nLiBgKi5mYXN0cS5nemApCgpPdXRwdXRzOgoKLSBbYEZhc3RRQ2BdKGh0dHBzOi8vd3d3LmJpb2luZm9ybWF0aWNzLmJhYnJhaGFtLmFjLnVrL3Byb2plY3RzL2Zhc3RxYy8pIEhUTUwgcmVwb3J0cyBmb3IgcmF3IGFuZCB0cmltbWVkIHJlYWRzLgoKLSBbYE11bHRpUUNgXShodHRwczovL211bHRpcWMuaW5mby8pIEhUTUwgc3VtbWFyaWVzIG9mIFtgRmFzdFFDYF0oaHR0cHM6Ly93d3cuYmlvaW5mb3JtYXRpY3MuYmFicmFoYW0uYWMudWsvcHJvamVjdHMvZmFzdHFjLykgZm9yIHJhdyBhbmQgdHJpbW1lZCByZWFkcy4KCi0gVHJpbW1lZCByZWFkcyB3aXRoIGZpbmFsIGxlbmd0aCBvZiAyNWJwOiBgKmZsZXhiYXJfdHJpbS4yNWJwLmZhc3RxLmd6YAoKTGlicmFyaWVzIHdlcmUgcHJlcGFyZWQgYW5kIHNlcXVlbmNlZCBieSBBemVudGE6CgotIExpYnJhcnkgcHJlcDogW05FQiBuZWJuZXh0LXNtYWxsLXJuYS1saWJyYXJ5LXByZXAtc2V0LWZvci1pbGx1bWluYSBraXRdKGh0dHBzOi8vd3d3Lm5lYi5jb20vZW4tdXMvLS9tZWRpYS9uZWJ1cy9maWxlcy9tYW51YWxzL21hbnVhbGU3MzAwX2U3MzMwX2U3NTYwX2U3NTgwLnBkZj9yZXY9ZDA5NjRhMmU2Mzc4NDNiMWFmY2I5ZjdkNjY2ZDA3YjImaGFzaD03QUMwQjBFQjAxMjcwOEVGQUIwRTREQkVFQUYxNDQ2QSkgKFBERikKCi0gU2VxdWVuY2luZzogSWxsdW1pbmEgSGlTZXEgNDAwMCwgMTUwYnAgUEUKCgotLS0KCiMgQ3JlYXRlIGEgQmFzaCB2YXJpYWJsZXMgZmlsZQoKVGhpcyBhbGxvd3MgdXNhZ2Ugb2YgQmFzaCB2YXJpYWJsZXMgYWNyb3NzIFIgTWFya2Rvd24gY2h1bmtzLgpgYGB7ciBzYXZlLWJhc2gtdmFyaWFibGVzLXRvLXJ2YXJzLWZpbGUsIGVuZ2luZT0nYmFzaCcsIGV2YWw9VFJVRX0KewplY2hvICIjIyMjIEFzc2lnbiBWYXJpYWJsZXMgIyMjIyIKZWNobyAiIgoKZWNobyAiIyBEYXRhIGRpcmVjdG9yaWVzIgplY2hvICdleHBvcnQgZGVlcF9kaXZlX2Rpcj0vaG9tZS9zaGFyZWQvOFRCX0hERF8wMS9zYW0vZ2l0cmVwb3MvZGVlcC1kaXZlJwplY2hvICdleHBvcnQgb3V0cHV0X2Rpcl90b3A9JHtkZWVwX2RpdmVfZGlyfS9ELUFwdWwvb3V0cHV0LzA4LUFwdWwtc1JOQXNlcS10cmltbWluZycKZWNobyAnZXhwb3J0IHJhd19mYXN0cWNfZGlyPSR7ZGVlcF9kaXZlX2Rpcn0vRC1BcHVsL291dHB1dC8wOC1BcHVsLXNSTkFzZXEtdHJpbW1pbmcvcmF3LWZhc3RxYycKZWNobyAnZXhwb3J0IHJhd19yZWFkc19kaXI9JHtkZWVwX2RpdmVfZGlyfS9ELUFwdWwvZGF0YS8wOC1BcHVsLXNSTkFzZXEtdHJpbW1pbmcvcmF3LXJlYWRzJwplY2hvICdleHBvcnQgcmF3X3JlYWRzX3VybD0iaHR0cHM6Ly9vd2wuZmlzaC53YXNoaW5ndG9uLmVkdS9uaWdodGluZ2FsZXMvQV9wdWxjaHJhLzMwLTg1MjQzMDIzNS8iJwplY2hvICdleHBvcnQgdHJpbW1lZF9mYXN0cWNfZGlyPSR7ZGVlcF9kaXZlX2Rpcn0vRC1BcHVsL291dHB1dC8wOC1BcHVsLXNSTkFzZXEtdHJpbW1pbmcvdHJpbW1lZC1mYXN0cWMnCmVjaG8gJ2V4cG9ydCB0cmltbWVkX3JlYWRzX2Rpcj0ke2RlZXBfZGl2ZV9kaXJ9L0QtQXB1bC9vdXRwdXQvMDgtQXB1bC1zUk5Bc2VxLXRyaW1taW5nL3RyaW1tZWQtcmVhZHMnCmVjaG8gIiIKCmVjaG8gIiMgUGF0aHMgdG8gcHJvZ3JhbXMiCmVjaG8gJ2V4cG9ydCBmYXN0cWM9L2hvbWUvc2hhcmVkL0Zhc3RRQy0wLjEyLjEvZmFzdHFjJwplY2hvICdleHBvcnQgZmxleGJhcj0vaG9tZS9zaGFyZWQvZmxleGJhci0zLjUuMC1saW51eC9mbGV4YmFyJwplY2hvICdleHBvcnQgbXVsdGlxYz0vaG9tZS9zYW0vcHJvZ3JhbXMvbWFtYmFmb3JnZS9iaW4vbXVsdGlxYycKZWNobyAiIgoKCgplY2hvICIjIFNldCBGYXN0USBmaWxlbmFtZSBwYXR0ZXJucyIKZWNobyAiZXhwb3J0IGZhc3RxX3BhdHRlcm49JyouZmFzdHEuZ3onIgplY2hvICJleHBvcnQgUjFfZmFzdHFfcGF0dGVybj0nKl9SMV8qLmZhc3RxLmd6JyIKZWNobyAiZXhwb3J0IFIyX2Zhc3RxX3BhdHRlcm49JypfUjJfKi5mYXN0cS5neiciCmVjaG8gIiIKCmVjaG8gIiMgU2V0IG51bWJlciBvZiBDUFVzIHRvIHVzZSIKZWNobyAnZXhwb3J0IHRocmVhZHM9NDAnCmVjaG8gIiIKCmVjaG8gIiMgU2V0IG1heGltdW0gcmVhZCBsZW5ndGgiCmVjaG8gJ2V4cG9ydCBtYXhfcmVhZF9sZW5ndGg9MjUnCmVjaG8gIiIKCmVjaG8gIiMgSW5wdXQvb3V0cHV0IGZpbGVzIgplY2hvICdleHBvcnQgZmFzdHFfY2hlY2tzdW1zPWlucHV0X2Zhc3RxX2NoZWNrc3Vtcy5tZDUnCmVjaG8gJ2V4cG9ydCB0cmltbWVkX2NoZWNrc3Vtcz10cmltbWVkX2Zhc3RxX2NoZWNrc3Vtcy5tZDUnCmVjaG8gJ2V4cG9ydCBORUJfYWRhcHRlcnNfZmFzdGE9TkVCLWFkYXB0ZXJzLmZhc3RhJwplY2hvICIiCgplY2hvICIjIyBORUIgbmVibmV4dC1zbWFsbC1ybmEtbGlicmFyeS1wcmVwLXNldC1mb3ItaWxsdW1pbmEgYWRhcHRlcnMiCmVjaG8gJ2V4cG9ydCBmaXJzdF9hZGFwdGVyPSJBR0FUQ0dHQUFHQUdDQUNBQ0dUQ1RHQUFDVENDQUdUQ0FDIicKZWNobyAnZXhwb3J0IHNlY29uZF9hZGFwdGVyPSJHQVRDR1RDR0dBQ1RHVEFHQUFDVENUR0FBQ0dUR1RBR0FUQ1RDR0dUR0dUQ0dDQ0dUQVRDQVRUIicKZWNobyAiIgoKZWNobyAiIyMgSW5pdGl0YWxpemUgYXJyYXlzIgplY2hvICdleHBvcnQgZmFzdHFfYXJyYXlfUjE9KCknCmVjaG8gJ2V4cG9ydCBmYXN0cV9hcnJheV9SMj0oKScKZWNobyAnZXhwb3J0IHJhd19mYXN0cXNfYXJyYXk9KCknCmVjaG8gJ2V4cG9ydCBSMV9uYW1lc19hcnJheT0oKScKZWNobyAnZXhwb3J0IFIyX25hbWVzX2FycmF5PSgpJwplY2hvICdleHBvcnQgdHJpbW1lZF9mYXN0cXNfYXJyYXk9KCknCmVjaG8gIiIKCmVjaG8gIiMgUHJvZ3JhbXMgYXNzb2NpYXRpdmUgYXJyYXkiCmVjaG8gImRlY2xhcmUgLUEgcHJvZ3JhbXNfYXJyYXkiCmVjaG8gInByb2dyYW1zX2FycmF5PSgiCmVjaG8gJ1tmYXN0cWNdPSIke2Zhc3RxY30iIFwnCmVjaG8gJ1ttdWx0aXFjXT0iJHttdWx0aXFjfSIgXCcKZWNobyAnW2ZsZXhiYXJdPSIke2ZsZXhiYXJ9IicKZWNobyAiKSIKfSA+IC5iYXNodmFycwoKY2F0IC5iYXNodmFycwpgYGAKCgojIERvd25sb2FkIHJhdyBzUk5Bc2VxIHJlYWRzCgpSZWFkcyBhcmUgZG93bmxvYWRlZCBmcm9tIApodHRwczovL293bC5maXNoLndhc2hpbmd0b24uZWR1L25pZ2h0aW5nYWxlcy9BX3B1bGNocmEvMzAtODUyNDMwMjM1LwoKVGhlIGAtLWN1dC1kaXJzIDNgIGNvbW1hbmQgY3V0cyB0aGUgcHJlY2VkaW5nIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgKGkuZS4gYG5pZ2h0aW5nYWxlcy9BX3B1bGNocmEvMzAtODUyNDMwMjM1L2ApCnNvIHRoYXQgd2UganVzdCBlbmQgdXAgd2l0aCB0aGUgcmVhZHMuCgpgYGB7YmFzaCBkb3dubG9hZC1yYXctcmVhZHMsIGVuZ2luZT0nYmFzaCcsIGV2YWw9VFJVRX0KIyBMb2FkIGJhc2ggdmFyaWFibGVzIGludG8gbWVtb3J5CnNvdXJjZSAuYmFzaHZhcnMKCndnZXQgXAotLWRpcmVjdG9yeS1wcmVmaXggJHtyYXdfcmVhZHNfZGlyfSBcCi0tcmVjdXJzaXZlIFwKLS1uby1jaGVjay1jZXJ0aWZpY2F0ZSBcCi0tY29udGludWUgXAotLWN1dC1kaXJzIDMgXAotLW5vLWhvc3QtZGlyZWN0b3JpZXMgXAotLW5vLXBhcmVudCBcCi0tcXVpZXQgXAotLWFjY2VwdCAic1JOQSosY2hlY2tzdW1zLm1kNSIgJHtyYXdfcmVhZHNfdXJsfQoKbHMgLWxoICIke3Jhd19yZWFkc19kaXJ9IgpgYGAKCiMjIFZlcmlmeSByYXcgcmVhZCBjaGVja3N1bXMKYGBge2Jhc2ggdmVyaWZ5LXJhdy1yZWFkLWNoZWNrc3VtcywgZW5naW5lPSdiYXNoJywgZXZhbD1UUlVFfQojIExvYWQgYmFzaCB2YXJpYWJsZXMgaW50byBtZW1vcnkKc291cmNlIC5iYXNodmFycwoKY2QgIiR7cmF3X3JlYWRzX2Rpcn0iCgojIENoZWNrc3VtcyBmaWxlIGNvbnRhaW5zIG90aGVyIGZpbGVzLCBzbyB0aGlzIGp1c3QgbG9va3MgZm9yIHRoZSBzUk5Bc2VxIGZpbGVzLgpncmVwICJzUk5BIiBjaGVja3N1bXMubWQ1IHwgbWQ1c3VtIC0tY2hlY2sKYGBgCgojIENyZWF0ZSBhZGFwdGVycyBGYXN0QSBmb3IgdXNlIHdpdGggW2ZsZXhiYXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9zZXFhbi9mbGV4YmFyKSB0cmltbWluZwpgYGB7YmFzaCBjcmVhdGUtRmFzdEEtb2YtYWRhcHRlcnMsIGVuZ2luZT0nYmFzaCcsIGV2YWw9VFJVRX0KIyBMb2FkIGJhc2ggdmFyaWFibGVzIGludG8gbWVtb3J5CnNvdXJjZSAuYmFzaHZhcnMKCmVjaG8gIkNyZWF0aW5nIGFkYXB0ZXJzIEZhc3RBLiIKZWNobyAiIgphZGFwdGVyX2NvdW50PTAKCiMgQ2hlY2sgZm9yIGFkYXB0ZXJzIGZpbGUgZmlyc3QKIyBUaGVuIGNyZWF0ZSBhZGFwdGVycyBmaWxlIGlmIGRvZXNuJ3QgZXhpc3QKaWYgWyAtZiAiJHtvdXRwdXRfZGlyX3RvcH0vJHtORUJfYWRhcHRlcnNfZmFzdGF9IiBdOyB0aGVuCiAgZWNobyAiJHtvdXRwdXRfZGlyX3RvcH0vJHtORUJfYWRhcHRlcnNfZmFzdGF9IGFscmVhZHkgZXhpc3RzLiBOb3RoaW5nIHRvIGRvLiIKZWxzZQogIGZvciBhZGFwdGVyIGluICIke2ZpcnN0X2FkYXB0ZXJ9IiAiJHtzZWNvbmRfYWRhcHRlcn0iCiAgZG8KICAgIGFkYXB0ZXJfY291bnQ9JCgoYWRhcHRlcl9jb3VudCArIDEpKQogICAgcHJpbnRmICI+JXNcbiVzXG4iICJhZGFwdGVyXyR7YWRhcHRlcl9jb3VudH0iICIke2FkYXB0ZXJ9IgogIGRvbmUgPj4gIiR7b3V0cHV0X2Rpcl90b3B9LyR7TkVCX2FkYXB0ZXJzX2Zhc3RhfSIKZmkKCmVjaG8gIiIKZWNobyAiQWRhcHRlcnMgRmFzdEE6IgplY2hvICIiCmNhdCAiJHtvdXRwdXRfZGlyX3RvcH0vJHtORUJfYWRhcHRlcnNfZmFzdGF9IgplY2hvICIiCmBgYAoKIyBGYXN0UUMvTXVsdGlRQyBvbiByYXcgcmVhZHMKYGBge2Jhc2ggcmF3LWZhc3RxYy1tdWx0aXFjLCBlbmdpbmU9J2Jhc2gnLCBldmFsPVRSVUV9CiMgTG9hZCBiYXNoIHZhcmlhYmxlcyBpbnRvIG1lbW9yeQpzb3VyY2UgLmJhc2h2YXJzCgojIyMjIyMjIyMjIyMgUlVOIEZBU1RRQyAjIyMjIyMjIyMjIyMKCgojIENyZWF0ZSBhcnJheSBvZiB0cmltbWVkIEZhc3RRcwpyYXdfZmFzdHFzX2FycmF5PSgke3Jhd19yZWFkc19kaXJ9LyR7ZmFzdHFfcGF0dGVybn0pCgojIFBhc3MgYXJyYXkgY29udGVudHMgdG8gbmV3IHZhcmlhYmxlIGFzIHNwYWNlLWRlbGltaXRlZCBsaXN0CnJhd19mYXN0cWNfbGlzdD0kKGVjaG8gIiR7cmF3X2Zhc3Rxc19hcnJheVsqXX0iKQoKZWNobyAiQmVnaW5uaW5nIEZhc3RRQyBvbiByYXcgcmVhZHMuLi4iCmVjaG8gIiIKCiMgUnVuIEZhc3RRQwojIyMgTk9URTogRG8gTk9UIHF1b3RlIHJhd19mYXN0cWNfbGlzdAoke3Byb2dyYW1zX2FycmF5W2Zhc3RxY119IFwKLS10aHJlYWRzICR7dGhyZWFkc30gXAotLW91dGRpciAke3Jhd19mYXN0cWNfZGlyfSBcCi0tcXVpZXQgXAoke3Jhd19mYXN0cWNfbGlzdH0KCmVjaG8gIkZhc3RRQyBvbiByYXcgcmVhZHMgY29tcGxldGUhIgplY2hvICIiCgojIyMjIyMjIyMjIyMgRU5EIEZBU1RRQyAjIyMjIyMjIyMjIyMKCiMjIyMjIyMjIyMjIyBSVU4gTVVMVElRQyAjIyMjIyMjIyMjIyMKZWNobyAiQmVnaW5uaW5nIE11bHRpUUMgb24gcmF3IEZhc3RRQy4uLiIKZWNobyAiIgoKJHtwcm9ncmFtc19hcnJheVttdWx0aXFjXX0gJHtyYXdfZmFzdHFjX2Rpcn0gLW8gJHtyYXdfZmFzdHFjX2Rpcn0KCmVjaG8gIiIKZWNobyAiTXVsdGlRQyBvbiByYXcgRmFzdFFzIGNvbXBsZXRlLiIKZWNobyAiIgoKIyMjIyMjIyMjIyMjIEVORCBNVUxUSVFDICMjIyMjIyMjIyMjIwoKZWNobyAiUmVtb3ZpbmcgRmFzdFFDIHppcCBmaWxlcy4iCmVjaG8gIiIKcm0gJHtyYXdfZmFzdHFjX2Rpcn0vKi56aXAKZWNobyAiRmFzdFFDIHppcCBmaWxlcyByZW1vdmVkLiIKZWNobyAiIgoKIyBWaWV3IGRpcmVjdG9yeSBjb250ZW50cwpscyAtbGggJHtyYXdfZmFzdHFjX2Rpcn0KCmBgYAoKIyBUcmltbWluZyB3aXRoIFtmbGV4YmFyXShodHRwczovL2dpdGh1Yi5jb20vc2VxYW4vZmxleGJhcikKYGBge2Jhc2ggZmxleGJhci10cmltbWluZywgZW5naW5lPSdiYXNoJywgZXZhbD1UUlVFfQojIExvYWQgYmFzaCB2YXJpYWJsZXMgaW50byBtZW1vcnkKc291cmNlIC5iYXNodmFycwoKIyBDaGFuZ2UgdG8gZGlyZWN0b3J5IHdpdGggcmF3IHJlYWRzCmNkICIke3Jhd19yZWFkc19kaXJ9IgoKIyBDcmVhdGUgYXJyYXlzIG9mIEZhc3RRIFIxIGZpbGVzIGFuZCBzYW1wbGUgbmFtZXMKIyBEbyBOT1QgcXVvdGUgUjFfZmFzdHFfcGF0dGVybiB2YXJpYWJsZQpmb3IgZmFzdHEgaW4gJHtSMV9mYXN0cV9wYXR0ZXJufQpkbwogIGZhc3RxX2FycmF5X1IxKz0oIiR7ZmFzdHF9IikKCiAgIyBVc2UgcGFyYW1ldGVyIHN1YnN0aXR1dGlvbiB0byByZW1vdmUgYWxsIHRleHQgdXAgdG8gYW5kIGluY2x1ZGluZyBsYXN0ICIuIiBmcm9tCiAgIyByaWdodCBzaWRlIG9mIHN0cmluZy4KICBSMV9uYW1lc19hcnJheSs9KCIke2Zhc3RxJSUuKn0iKQpkb25lCgojIENyZWF0ZSBhcnJheSBvZiBGYXN0USBSMiBmaWxlcwojIERvIE5PVCBxdW90ZSBSMl9mYXN0cV9wYXR0ZXJuIHZhcmlhYmxlCmZvciBmYXN0cSBpbiAke1IyX2Zhc3RxX3BhdHRlcm59CmRvCiAgZmFzdHFfYXJyYXlfUjIrPSgiJHtmYXN0cX0iKQoKICAjIFVzZSBwYXJhbWV0ZXIgc3Vic3RpdHV0aW9uIHRvIHJlbW92ZSBhbGwgdGV4dCB1cCB0byBhbmQgaW5jbHVkaW5nIGxhc3QgIi4iIGZyb20KICAjIHJpZ2h0IHNpZGUgb2Ygc3RyaW5nLgogIFIyX25hbWVzX2FycmF5Kz0oIiR7ZmFzdHElJS4qfSIpCmRvbmUKCgojIyMjIyMjIyMjIyMgUlVOIEZMRVhCQVIgIyMjIyMjIyMjIyMjCiMgVXNlcyBwYXJhbWV0ZXIgc3Vic3RpdHV0aW9uIChlLmcuICR7UjFfc2FtcGxlX25hbWUlJV8qfSl0byBybSB0aGUgX1JbMTJdCiMgVXNlcyBORUIgYWRhcHRlciBmaWxlCiMgLS1hZGFwdGVyLXBhaXItb3ZlcmxhcCBPTjogUmVjb21tZW5kZWQgYnkgTkVCIHNSTkEga2l0CiMgLS1xdHJpbS10aHJlc2hvbGQgMjU6IE1pbmltdW0gcXVhbGl0eQojIC0tcXRyaW0tZm9ybWF0IGkxLjg6IFNldHMgc2VxdWVuY2VyIGFzIGlsbHVtaW5hCiMgLS1wb3N0LXRyaW0tbGVuZ3RoOiBUcmltIHJlYWRzIGZyb20gMycgZW5kIHRvIG1heCBsZW5ndGgKIyAtLXRhcmdldDogU2V0cyBmaWxlIG5hbWluZyBwYXR0ZXJucwojIC0temlwLW91dHB1dCBHWjogU2V0cyB0eXBlIG9mIGNvbXByZXNzaW9uLiBHWiA9IGd6aXAKCiMgUnVuIGZsZXhiYXIgb24gZmlsZXMKZWNobyAiQmVnaW5uaW5nIGZsZXhiYXIgdHJpbW1pbmcuIgplY2hvICIiCgp0aW1lIFwKZm9yIGluZGV4IGluICIkeyFmYXN0cV9hcnJheV9SMVtAXX0iCmRvCiAgUjFfc2FtcGxlX25hbWU9IiR7UjFfbmFtZXNfYXJyYXlbaW5kZXhdfSIKICBSMl9zYW1wbGVfbmFtZT0iJHtSMl9uYW1lc19hcnJheVtpbmRleF19IgoKICAjIEJlZ2luIGZsZXhiYXIgdHJpbW1pbmcKICAke3Byb2dyYW1zX2FycmF5W2ZsZXhiYXJdfSBcCiAgLS1yZWFkcyAke2Zhc3RxX2FycmF5X1IxW2luZGV4XX0gXAogIC0tcmVhZHMyICR7ZmFzdHFfYXJyYXlfUjJbaW5kZXhdfSAgXAogIC0tYWRhcHRlcnMgJHtvdXRwdXRfZGlyX3RvcH0vJHtORUJfYWRhcHRlcnNfZmFzdGF9IFwKICAtLWFkYXB0ZXItcGFpci1vdmVybGFwIE9OIFwKICAtLXF0cmltLWZvcm1hdCBpMS44IFwKICAtLXF0cmltLXRocmVzaG9sZCAyNSBcCiAgLS1wb3N0LXRyaW0tbGVuZ3RoICR7bWF4X3JlYWRfbGVuZ3RofSBcCiAgLS10aHJlYWRzICR7dGhyZWFkc30gXAogIC0tdGFyZ2V0ICIke3RyaW1tZWRfcmVhZHNfZGlyfS8ke1IxX3NhbXBsZV9uYW1lJSVfKn0uZmxleGJhcl90cmltLiR7bWF4X3JlYWRfbGVuZ3RofWJwIiBcCiAgLS16aXAtb3V0cHV0IEdaCiAgICAgICAgCiAgICAjIE1vdmUgdG8gdHJpbW1lZCBkaXJlY3RvcnkKICAgICMgVGhpcyBpcyBkb25lIHNvIGNoZWNrc3VtcyBmaWxlIGRvZXNuJ3QgaW5jbHVkZSBleGNlc3MgcGF0aAogICAgY2QgJHt0cmltbWVkX3JlYWRzX2Rpcn0KCiAgICAjIEdlbmVyYXRlIG1kNSBjaGVja3N1bXMgZm9yIG5ld2x5IHRyaW1tZWQgZmlsZXMKICAgIHsKICAgICAgbWQ1c3VtICIke1IxX3NhbXBsZV9uYW1lJSVfKn0uZmxleGJhcl90cmltLiR7bWF4X3JlYWRfbGVuZ3RofWJwXzEuZmFzdHEuZ3oiCiAgICAgIG1kNXN1bSAiJHtSMl9zYW1wbGVfbmFtZSUlXyp9LmZsZXhiYXJfdHJpbS4ke21heF9yZWFkX2xlbmd0aH1icF8yLmZhc3RxLmd6IgogICAgfSA+PiAiJHt0cmltbWVkX2NoZWNrc3Vtc30iCiAgICAKICAgICMgQ2hhbmdlIGJhY2sgdG8gdG8gcmF3IHJlYWRzIGRpcmVjdG9yeQogICAgY2QgIiR7cmF3X3JlYWRzX2Rpcn0iCgpkb25lCgplY2hvICIiCmVjaG8gImZsZXhiYXIgdHJpbW1pbmcgY29tcGxldGUuIgplY2hvICIiCgplY2hvICJUcmltbWVkIEZhc3RRcyBNRDUgY2hlY2tzdW1zOiIKZWNobyAiIgoKY2F0ICIke3RyaW1tZWRfcmVhZHNfZGlyfS8ke3RyaW1tZWRfY2hlY2tzdW1zfSIKCiMjIyMjIyMjIyMjIyBFTkQgRkxFWEJBUiAjIyMjIyMjIyMjIyMKCmBgYAoKIyBGYXN0UUMvTXVsdGlRQyBvbiB0cmltbWVkIHJlYWRzCmBgYHtiYXNoIEZhc3RRQy1NdWx0aVFDLXRyaW1tZWQtcmVhZHMsIGVuZ2luZT0nYmFzaCcsIGV2YWw9VFJVRX0KIyBMb2FkIGJhc2ggdmFyaWFibGVzIGludG8gbWVtb3J5CnNvdXJjZSAuYmFzaHZhcnMKCiMjIyMjIyMjIyMjIyBSVU4gRkFTVFFDICMjIyMjIyMjIyMjIwoKIyMjIE5PVEU6IERvIE5PVCBxdW90ZSByYXdfZmFzdHFjX2xpc3QKIyBDcmVhdGUgYXJyYXkgb2YgdHJpbW1lZCBGYXN0UXMKdHJpbW1lZF9mYXN0cXNfYXJyYXk9KCR7dHJpbW1lZF9yZWFkc19kaXJ9LyR7ZmFzdHFfcGF0dGVybn0pCgojIFBhc3MgYXJyYXkgY29udGVudHMgdG8gbmV3IHZhcmlhYmxlIGFzIHNwYWNlLWRlbGltaXRlZCBsaXN0CnRyaW1tZWRfZmFzdHFjX2xpc3Q9JChlY2hvICIke3RyaW1tZWRfZmFzdHFzX2FycmF5WypdfSIpCgplY2hvICJCZWdpbm5pbmcgRmFzdFFDIG9uIHJhdyByZWFkcy4uLiIKZWNobyAiIgoKIyBSdW4gRmFzdFFDCiR7cHJvZ3JhbXNfYXJyYXlbZmFzdHFjXX0gXAotLXRocmVhZHMgJHt0aHJlYWRzfSBcCi0tb3V0ZGlyICR7dHJpbW1lZF9mYXN0cWNfZGlyfSBcCi0tcXVpZXQgXAoke3RyaW1tZWRfZmFzdHFjX2xpc3R9CgplY2hvICJGYXN0UUMgb24gdHJpbW1lZCByZWFkcyBjb21wbGV0ZSEiCmVjaG8gIiIKCiMjIyMjIyMjIyMjIyBFTkQgRkFTVFFDICMjIyMjIyMjIyMjIwoKIyMjIyMjIyMjIyMjIFJVTiBNVUxUSVFDICMjIyMjIyMjIyMjIwplY2hvICJCZWdpbm5pbmcgTXVsdGlRQyBvbiByYXcgRmFzdFFDLi4uIgplY2hvICIiCgoke3Byb2dyYW1zX2FycmF5W211bHRpcWNdfSAke3RyaW1tZWRfZmFzdHFjX2Rpcn0gLW8gJHt0cmltbWVkX2Zhc3RxY19kaXJ9CgplY2hvICIiCmVjaG8gIk11bHRpUUMgb24gdHJpbW1lZCBGYXN0UXMgY29tcGxldGUuIgplY2hvICIiCgojIyMjIyMjIyMjIyMgRU5EIE1VTFRJUUMgIyMjIyMjIyMjIyMjCgplY2hvICJSZW1vdmluZyBGYXN0UUMgemlwIGZpbGVzLiIKZWNobyAiIgpybSAke3RyaW1tZWRfZmFzdHFjX2Rpcn0vKi56aXAKZWNobyAiRmFzdFFDIHppcCBmaWxlcyByZW1vdmVkLiIKZWNobyAiIgoKIyBWaWV3IGRpcmVjdG9yeSBjb250ZW50cwpscyAtbGggJHt0cmltbWVkX2Zhc3RxY19kaXJ9CgpgYGAKCiMgU3VtbWFyeQoKQSBxdWljayBjb21wYXJpc29uIG9mIHJhdyBhbmQgdHJpbW1lZCByZWFkcyB0byBzaG93IHRyaW1taW5nIHdvcmtlZDoKCi0gcXVhbGl0eSBpcyBpbXByb3ZlZAotIGxlbmd0aCBpcyAyNWJwCi0gYWRhcHRlcnMgcmVtb3ZlZAoKfCBSQVcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRSSU1NRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CnwgIVtSYXcgTXVsdGlRQyBwZXIgYmFzZSBzZXF1ZW5jZSBxdWFsaXR5IHBsb3RdKGh0dHBzOi8vZ2l0aHViLmNvbS91cm9sLWU1L2RlZXAtZGl2ZS9ibG9iL21haW4vRC1BcHVsL291dHB1dC8wOC1BcHVsLXNSTkFzZXEtdHJpbW1pbmcvcmF3LWZhc3RxYy9mYXN0cWNfcGVyX2Jhc2Vfc2VxdWVuY2VfcXVhbGl0eV9wbG90LnBuZz9yYXc9dHJ1ZSkgfCAhW1RyaW1tZWQgTXVsdGlRQyBwZXIgYmFzZSBzZXF1ZW5jZSBxdWFsaXR5IHBsb3RdKGh0dHBzOi8vZ2l0aHViLmNvbS91cm9sLWU1L2RlZXAtZGl2ZS9ibG9iL21haW4vRC1BcHVsL291dHB1dC8wOC1BcHVsLXNSTkFzZXEtdHJpbW1pbmcvdHJpbW1lZC1mYXN0cWMvZmFzdHFjX3Blcl9iYXNlX3NlcXVlbmNlX3F1YWxpdHlfcGxvdC5wbmc/cmF3PXRydWUpIHwKfCAhW1JhdyBNdWx0aVFDIGFkYXB0ZXIgY29udGVudCBwbG90XShodHRwczovL2dpdGh1Yi5jb20vdXJvbC1lNS9kZWVwLWRpdmUvYmxvYi9tYWluL0QtQXB1bC9vdXRwdXQvMDgtQXB1bC1zUk5Bc2VxLXRyaW1taW5nL3Jhdy1mYXN0cWMvZmFzdHFjX2FkYXB0ZXJfY29udGVudF9wbG90LnBuZz9yYXc9dHJ1ZSkgICAgICAgICAgICAgICAgICAgICB8ICFbVHJpbW1lZCBNdWx0aVFDIGFkYXB0ZXIgY29udGVudCBwbG90XShodHRwczovL2dpdGh1Yi5jb20vdXJvbC1lNS9kZWVwLWRpdmUvYmxvYi9tYWluL0QtQXB1bC9vdXRwdXQvMDgtQXB1bC1zUk5Bc2VxLXRyaW1taW5nL3RyaW1tZWQtZmFzdHFjL2Zhc3RxY19hZGFwdGVyX2NvbnRlbnRfcGxvdC5wbmc/cmF3PXRydWUpICAgICAgICAgICAgICAgICAgICAgfA==