This notebook performs a simple NCBI BLASTn (Altschul et al. 1990) against two miRNA databases to attempt to identify miRNA in A.pulchra sRNAseq:

Relies on the following software:

  • fastx_toolkit

    • fastx_collapser: Collapses duplicate sequences in FastA/Q into single sequence.

1 Create a Bash variables file

This allows usage of Bash variables across R Markdown chunks.

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

echo "# Trimmed FastQ naming pattern"
echo "export trimmed_fastqs_pattern='*fastp-adapters-polyG-31bp-merged.fq.gz'"

echo "# Data directories"
echo 'export deep_dive_dir=/home/shared/8TB_HDD_01/sam/gitrepos/deep-dive'
echo 'export deep_dive_data_dir="${deep_dive_dir}/data"'
echo 'export output_dir_top=${deep_dive_dir}/D-Apul/output/10.1-Apul-sRNAseq-BLASTn-31bp-fastp-merged-cnidarian_miRBase'
echo 'export trimmed_fastqs_dir="${deep_dive_dir}/D-Apul/output/08.2-Apul-sRNAseq-trimming-31bp-fastp-merged/trimmed-reads"'
echo 'export blast_dbs_dir="${deep_dive_dir}/data/blast_dbs"'
echo ""

echo "# Input/Output files"
echo 'export collapsed_reads_fasta="collapsed-reads-all.fasta"'
echo 'export concatenated_trimmed_reads_fastq="concatenated-trimmed-reads-all.fastq.gz"'
echo 'export mirbase_mature_fasta_name="cnidarian-mirbase-mature-v22.1.fasta"'
echo 'export mirbase_mature_fasta_no_U="cnidarian-mirbase-mature-v22.1-no_U.fa"'
echo 'export mirgene_mature_fasta_name="mirgene-mature-all-v2.1.fa"'
echo 'export mirgene_mature_fasta_no_U="mirgene-mature-all-v2.1-no_U.fa"'
echo ""

echo "# External data URLs"
echo 'export mirgenedb_fasta_url="https://www.mirgenedb.org/fasta/ALL?mat=1"'
echo ""

echo "# Paths to programs"
echo 'export ncbi_blast_dir="/home/shared/ncbi-blast-2.15.0+/bin/"'
echo 'export ncbi_blastn="${ncbi_blast_dir}/blastn"'
echo 'export ncbi_makeblast_db="${ncbi_blast_dir}/makeblastdb"'
echo 'export fastx_collapser="/home/shared/fastx_toolkit_0.0.13_binaries_Linux_2.6_amd64/bin/fastx_collapser"'

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

echo "# Initialize arrays"
echo 'export trimmed_fastqs_array=()'


} > .bashvars

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

# Trimmed FastQ naming pattern
export trimmed_fastqs_pattern='*fastp-adapters-polyG-31bp-merged.fq.gz'
# Data directories
export deep_dive_dir=/home/shared/8TB_HDD_01/sam/gitrepos/deep-dive
export deep_dive_data_dir="${deep_dive_dir}/data"
export output_dir_top=${deep_dive_dir}/D-Apul/output/10.1-Apul-sRNAseq-BLASTn-31bp-fastp-merged-cnidarian_miRBase
export trimmed_fastqs_dir="${deep_dive_dir}/D-Apul/output/08.2-Apul-sRNAseq-trimming-31bp-fastp-merged/trimmed-reads"
export blast_dbs_dir="${deep_dive_dir}/data/blast_dbs"

# Input/Output files
export collapsed_reads_fasta="collapsed-reads-all.fasta"
export concatenated_trimmed_reads_fastq="concatenated-trimmed-reads-all.fastq.gz"
export mirbase_mature_fasta_name="cnidarian-mirbase-mature-v22.1.fasta"
export mirbase_mature_fasta_no_U="cnidarian-mirbase-mature-v22.1-no_U.fa"
export mirgene_mature_fasta_name="mirgene-mature-all-v2.1.fa"
export mirgene_mature_fasta_no_U="mirgene-mature-all-v2.1-no_U.fa"

# External data URLs
export mirgenedb_fasta_url="https://www.mirgenedb.org/fasta/ALL?mat=1"

# Paths to programs
export ncbi_blast_dir="/home/shared/ncbi-blast-2.15.0+/bin/"
export ncbi_blastn="${ncbi_blast_dir}/blastn"
export ncbi_makeblast_db="${ncbi_blast_dir}/makeblastdb"
export fastx_collapser="/home/shared/fastx_toolkit_0.0.13_binaries_Linux_2.6_amd64/bin/fastx_collapser"
# Set number of CPUs to use
export threads=40

# Initialize arrays
export trimmed_fastqs_array=()

2 Download MirGeneDB Fasta

# Load bash variables into memory
source .bashvars

# Download MirGeneDB, if it doesn't exist
if [ ! -f "${deep_dive_data_dir}/${mirgene_mature_fasta_name}" ]; then

  wget \
  --no-check-certificate \
  --continue \
  --no-host-directories \
  --no-directories \
  --no-parent \
  --quiet \
  --execute robots=off \
  --output-document ${deep_dive_data_dir}/${mirgene_mature_fasta_name} \
   ${mirgenedb_fasta_url}
 
 fi
 
 ls -lh ${deep_dive_data_dir}
total 20M
drwxr-xr-x 2 sam sam 4.0K Apr  2 07:01 blast_dbs
-rw-rw-r-- 1 sam sam 3.8M Apr  2 06:51 cnidarian-mirbase-mature-v22.1.fasta
-rw-r--r-- 1 sam sam 3.8M Apr  2 07:00 cnidarian-mirbase-mature-v22.1-no_U.fa
-rw-r--r-- 1 sam sam  44K Apr  2 06:49 cnidarian_miRNAs.fasta
-rw-r--r-- 1 sam sam 3.7M Feb 16 12:36 mirbase-mature-v22.1.fa
-rw-r--r-- 1 sam sam 3.7M Dec  4 11:05 mirbase-mature-v22.1-no_spaces.fa
-rw-r--r-- 1 sam sam 3.7M Nov 17 07:59 mirbase-mature-v22.1-no_U.fa
-rw-r--r-- 1 sam sam 726K Nov  7 14:36 mirgene-mature-all-v2.1.fa
-rw-r--r-- 1 sam sam 726K Nov 17 07:59 mirgene-mature-all-v2.1-no_U.fa

2.1 Inspect miRNA FastAs

# Load bash variables into memory
source .bashvars

head "${deep_dive_data_dir}"/[cm][ni]*.fa*
==> /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/data/cnidarian-mirbase-mature-v22.1.fasta <==
>cel-let-7-5p MIMAT0000001 Caenorhabditis elegans let-7-5p
UGAGGUAGUAGGUUGUAUAGUU
>cel-let-7-3p MIMAT0015091 Caenorhabditis elegans let-7-3p
CUAUGCAAUUUUCUACCUUACC
>cel-lin-4-5p MIMAT0000002 Caenorhabditis elegans lin-4-5p
UCCCUGAGACCUCAAGUGUGA
>cel-lin-4-3p MIMAT0015092 Caenorhabditis elegans lin-4-3p
ACACCUGGGCUCUCCGGGUACC
>cel-miR-1-5p MIMAT0020301 Caenorhabditis elegans miR-1-5p
CAUACUUCCUUACAUGCCCAUA

==> /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/data/cnidarian-mirbase-mature-v22.1-no_U.fa <==
>cel-let-7-5p MIMAT0000001 Caenorhabditis elegans let-7-5p
TGAGGTAGTAGGTTGTATAGTT
>cel-let-7-3p MIMAT0015091 Caenorhabditis elegans let-7-3p
CTATGCAATTTTCTACCTTACC
>cel-lin-4-5p MIMAT0000002 Caenorhabditis elegans lin-4-5p
TCCCTGAGACCTCAAGTGTGA
>cel-lin-4-3p MIMAT0015092 Caenorhabditis elegans lin-4-3p
ACACCTGGGCTCTCCGGGTACC
>cel-miR-1-5p MIMAT0020301 Caenorhabditis elegans miR-1-5p
CATACTTCCTTACATGCCCATA

==> /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/data/cnidarian_miRNAs.fasta <==
>spi-mir-temp-1_Stylophora_pistillata_Liew_et_al._2014_Matches_miR-100_family.
ACCCGUAGAUCCGAACUUGUGG
>spi-mir-temp-2_Stylophora_pistillata_Liew_et_al._2014_NA
UAUCGAAUCCGUCAAAAAGAGA
>spi-mir-temp-3_Stylophora_pistillata_Liew_et_al._2014_NA
UCAGGGAUUGUGGUGAGUUAGUU
>spi-mir-temp-4_Stylophora_pistillata_Liew_et_al._2014_Exact_match_of_nve-miR-2023.
AAAGAAGUACAAGUGGUAGGG
>spi-mir-temp-5_Stylophora_pistillata_Liew_et_al._2014_NA
GAGGUCCGGAUGGUUGA

==> /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/data/mirbase-mature-v22.1.fa <==
>cel-let-7-5p MIMAT0000001 Caenorhabditis elegans let-7-5p
UGAGGUAGUAGGUUGUAUAGUU
>cel-let-7-3p MIMAT0015091 Caenorhabditis elegans let-7-3p
CUAUGCAAUUUUCUACCUUACC
>cel-lin-4-5p MIMAT0000002 Caenorhabditis elegans lin-4-5p
UCCCUGAGACCUCAAGUGUGA
>cel-lin-4-3p MIMAT0015092 Caenorhabditis elegans lin-4-3p
ACACCUGGGCUCUCCGGGUACC
>cel-miR-1-5p MIMAT0020301 Caenorhabditis elegans miR-1-5p
CAUACUUCCUUACAUGCCCAUA

==> /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/data/mirbase-mature-v22.1-no_spaces.fa <==
>cel-let-7-5p_MIMAT0000001_Caenorhabditis_elegans_let-7-5p
UGAGGUAGUAGGUUGUAUAGUU
>cel-let-7-3p_MIMAT0015091_Caenorhabditis_elegans_let-7-3p
CUAUGCAAUUUUCUACCUUACC
>cel-lin-4-5p_MIMAT0000002_Caenorhabditis_elegans_lin-4-5p
UCCCUGAGACCUCAAGUGUGA
>cel-lin-4-3p_MIMAT0015092_Caenorhabditis_elegans_lin-4-3p
ACACCUGGGCUCUCCGGGUACC
>cel-miR-1-5p_MIMAT0020301_Caenorhabditis_elegans_miR-1-5p
CAUACUUCCUUACAUGCCCAUA

==> /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/data/mirbase-mature-v22.1-no_U.fa <==
>cel-let-7-5p MIMAT0000001 Caenorhabditis elegans let-7-5p
TGAGGTAGTAGGTTGTATAGTT
>cel-let-7-3p MIMAT0015091 Caenorhabditis elegans let-7-3p
CTATGCAATTTTCTACCTTACC
>cel-lin-4-5p MIMAT0000002 Caenorhabditis elegans lin-4-5p
TCCCTGAGACCTCAAGTGTGA
>cel-lin-4-3p MIMAT0015092 Caenorhabditis elegans lin-4-3p
ACACCTGGGCTCTCCGGGTACC
>cel-miR-1-5p MIMAT0020301 Caenorhabditis elegans miR-1-5p
CATACTTCCTTACATGCCCATA

==> /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/data/mirgene-mature-all-v2.1.fa <==
>Aae-Bantam_3p
UGAGAUCAUUUUGAAAGCUGAUU
>Bge-Bantam_3p
UGAGAUCAUUGUGAAAGCUGAUU
>Bpl-Bantam_3p
UGAGAUCAUUGUGAAAACUGAU
>Cgi-Bantam_3p
UGAGAUCAUUGUGAAAACUGAUU
>Cte-Bantam_3p
UGAGAUCAUUGUGAAAACUAAUC

==> /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/data/mirgene-mature-all-v2.1-no_U.fa <==
>Aae-Bantam_3p
TGAGATCATTTTGAAAGCTGATT
>Bge-Bantam_3p
TGAGATCATTGTGAAAGCTGATT
>Bpl-Bantam_3p
TGAGATCATTGTGAAAACTGAT
>Cgi-Bantam_3p
TGAGATCATTGTGAAAACTGATT
>Cte-Bantam_3p
TGAGATCATTGTGAAAACTAATC

3 Convert U to T in miRNA FastAs

This is needed because the sRNAseq sequences do not have uracils (U) - they have thymines (T).

# Load bash variables into memory
source .bashvars

# Convert miRBase FastA
if [ ! -f "${deep_dive_data_dir}/${mirbase_mature_fasta_no_U}" ]; then
  sed '/^[^>]/s/U/T/g' "${deep_dive_data_dir}/${mirbase_mature_fasta_name}" \
  > "${deep_dive_data_dir}/${mirbase_mature_fasta_no_U}"
fi


# Convert MirGene FastA
if [ ! -f "${deep_dive_data_dir}/${mirgene_mature_fasta_no_U}" ]; then
  sed '/^[^>]/s/U/T/g' "${deep_dive_data_dir}/${mirgene_mature_fasta_name}" \
  > "${deep_dive_data_dir}/${mirgene_mature_fasta_no_U}"
fi


head "${deep_dive_data_dir}"/[cm][ni]*U.fa
  
==> /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/data/cnidarian-mirbase-mature-v22.1-no_U.fa <==
>cel-let-7-5p MIMAT0000001 Caenorhabditis elegans let-7-5p
TGAGGTAGTAGGTTGTATAGTT
>cel-let-7-3p MIMAT0015091 Caenorhabditis elegans let-7-3p
CTATGCAATTTTCTACCTTACC
>cel-lin-4-5p MIMAT0000002 Caenorhabditis elegans lin-4-5p
TCCCTGAGACCTCAAGTGTGA
>cel-lin-4-3p MIMAT0015092 Caenorhabditis elegans lin-4-3p
ACACCTGGGCTCTCCGGGTACC
>cel-miR-1-5p MIMAT0020301 Caenorhabditis elegans miR-1-5p
CATACTTCCTTACATGCCCATA

==> /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/data/mirbase-mature-v22.1-no_U.fa <==
>cel-let-7-5p MIMAT0000001 Caenorhabditis elegans let-7-5p
TGAGGTAGTAGGTTGTATAGTT
>cel-let-7-3p MIMAT0015091 Caenorhabditis elegans let-7-3p
CTATGCAATTTTCTACCTTACC
>cel-lin-4-5p MIMAT0000002 Caenorhabditis elegans lin-4-5p
TCCCTGAGACCTCAAGTGTGA
>cel-lin-4-3p MIMAT0015092 Caenorhabditis elegans lin-4-3p
ACACCTGGGCTCTCCGGGTACC
>cel-miR-1-5p MIMAT0020301 Caenorhabditis elegans miR-1-5p
CATACTTCCTTACATGCCCATA

==> /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/data/mirgene-mature-all-v2.1-no_U.fa <==
>Aae-Bantam_3p
TGAGATCATTTTGAAAGCTGATT
>Bge-Bantam_3p
TGAGATCATTGTGAAAGCTGATT
>Bpl-Bantam_3p
TGAGATCATTGTGAAAACTGAT
>Cgi-Bantam_3p
TGAGATCATTGTGAAAACTGATT
>Cte-Bantam_3p
TGAGATCATTGTGAAAACTAATC

4 Create BLAST Databases

# Load bash variables into memory
source .bashvars



# miRBase BLAST DB
## Make sure output directory exists
if [ ! -d "${blast_dbs_dir}" ]; then
  mkdir --parents "${blast_dbs_dir}"
fi

## Check for pre-exising database
if [ ! -f "${blast_dbs_dir}/${mirgene_mature_fasta_no_U%.*}.blastdb.log" ]; then
  ${ncbi_makeblast_db} \
  -in ${deep_dive_data_dir}/${mirgene_mature_fasta_no_U} \
  -title ${mirgene_mature_fasta_no_U%.*} \
  -dbtype nucl \
  -out ${blast_dbs_dir}/${mirgene_mature_fasta_no_U%.*} \
  -logfile ${blast_dbs_dir}/${mirgene_mature_fasta_no_U%.*}.blastdb.log
fi

# miRBase BLAST DB
## Make sure output directory exists
if [ ! -d "${blast_dbs_dir}" ]; then
  mkdir --parents "${blast_dbs_dir}"
fi

## Check for pre-exising database
if [ ! -f "${blast_dbs_dir}/${mirbase_mature_fasta_no_U%.*}.blastdb.log" ]; then
  ${ncbi_makeblast_db} \
  -in ${deep_dive_data_dir}/${mirbase_mature_fasta_no_U} \
  -title ${mirbase_mature_fasta_no_U%.*} \
  -dbtype nucl \
  -out ${blast_dbs_dir}/${mirbase_mature_fasta_no_U%.*} \
  -logfile ${blast_dbs_dir}/${mirbase_mature_fasta_no_U%.*}.blastdb.log
fi

5 Prepare reads for BLASTing

5.1 Concatenate all trimmed reads

# Load bash variables into memory
source .bashvars

# Make output directory, if it doens't exist
if [ ! -d "${output_dir_top}" ]; then
  mkdir --parents "${output_dir_top}"
fi

# Check for existence of concatenated FastA before running
if [ ! -f "${output_dir_top}/${concatenated_trimmed_reads_fastq}" ]; then
  cat ${trimmed_fastqs_dir}/${trimmed_fastqs_pattern} \
  > "${output_dir_top}/${concatenated_trimmed_reads_fastq}"
fi

ls -lh "${output_dir_top}/${concatenated_trimmed_reads_fastq}"
-rw-r--r-- 1 sam sam 1.6G Apr  1 14:03 /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/D-Apul/output/10.1-Apul-sRNAseq-BLASTn-31bp-fastp-merged-cnidarian_miRBase/concatenated-trimmed-reads-all.fastq.gz

5.2 Collapse reads to FastA

Uses fastx_collapser to collapse to unique reads.

Requires undocumented quality setting. Have selected 30 as cuttoff: -Q30.

# Load bash variables into memory
source .bashvars

# Check for existence of collapsed FastA before running
time \
if [ ! -f "${output_dir_top}/${collapsed_reads_fasta}" ]; then
  zcat ${output_dir_top}/${concatenated_trimmed_reads_fastq} \
  | ${fastx_collapser} \
  -Q30 \
  -o "${output_dir_top}/${collapsed_reads_fasta}"
fi

head "${output_dir_top}/${collapsed_reads_fasta}"

wc -l "${output_dir_top}/${collapsed_reads_fasta}"

real    0m0.000s
user    0m0.000s
sys 0m0.000s
>1-1843196
GCACTGGTGGTTCAGTGGTAGAATTCTCGCC
>2-1083086
TGAAAATCTTTCTTCTGAGGCGGAA
>3-967720
GCACTGGTGGTTCAGTGGTAGAATTCTCGCT
>4-832824
TCCAAGACCTGAGTTACCACTGACAAGC
>5-750080
GCACTGTGGTTCAGTGGTAGAATTCTCGCC
22165834 /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/D-Apul/output/10.1-Apul-sRNAseq-BLASTn-31bp-fastp-merged-cnidarian_miRBase/collapsed-reads-all.fasta

6 Run BLASTn Default E-value

  • 1000 for blastn-short

Runs BLASTn using the blastn-short task for sequences < 30bp.

Look for top match (-max_hsps 1 & -max_target_seqs 1) for each query.

  • Suppress subsequent warning Examining 5 or more matches is recommended by redirecting stdout: 2> /dev/null

6.1 miRBase BLASTn Default e-value

# Load bash variables into memory
source .bashvars

time \
${ncbi_blastn} \
-db ${blast_dbs_dir}/${mirbase_mature_fasta_no_U%.*} \
-query ${output_dir_top}/${collapsed_reads_fasta} \
-out ${output_dir_top}/cnidarian-miRBase-BLASTn-eval_1000.outfmt6 \
-task blastn-short \
-max_hsps 1 \
-max_target_seqs 1 \
-outfmt 6 \
-num_threads ${threads} \
2> /dev/null

6.2 MirGene BLASTn Default e-value

# Load bash variables into memory
source .bashvars

time \
${ncbi_blastn} \
-db ${blast_dbs_dir}/${mirgene_mature_fasta_no_U%.*} \
-query ${output_dir_top}/${collapsed_reads_fasta} \
-out ${output_dir_top}/MirGene-BLASTn-eval_1000.outfmt6 \
-task blastn-short \
-max_hsps 1 \
-max_target_seqs 1 \
-outfmt 6 \
-num_threads ${threads} \
2> /dev/null

7 BLASTn E-value = 10

Running this for simple comparison to the default blastn-short value of 1000.

7.1 miRBase BLASTn e-value = 10

# Load bash variables into memory
source .bashvars

time \
${ncbi_blastn} \
-db ${blast_dbs_dir}/${mirbase_mature_fasta_no_U%.*} \
-query ${output_dir_top}/${collapsed_reads_fasta} \
-out ${output_dir_top}/cindarian-miRBase-BLASTn-eval_10.outfmt6 \
-task blastn-short \
-evalue 10 \
-max_hsps 1 \
-max_target_seqs 1 \
-outfmt 6 \
-num_threads ${threads} \
2> /dev/null

7.2 MirGene BLASTn e-value = 10

# Load bash variables into memory
source .bashvars

time \
${ncbi_blastn} \
-db ${blast_dbs_dir}/${mirgene_mature_fasta_no_U%.*} \
-query ${output_dir_top}/${collapsed_reads_fasta} \
-out ${output_dir_top}/MirGene-BLASTn-eval_10.outfmt6 \
-task blastn-short \
-evalue 10 \
-max_hsps 1 \
-max_target_seqs 1 \
-outfmt 6 \
-num_threads ${threads} \
2> /dev/null

8 BLASTn E-value = 1

Running this for simple comparison to the default blastn-short value of 1000.

8.1 miRBase BLASTn e-value = 1

# Load bash variables into memory
source .bashvars

time \
${ncbi_blastn} \
-db ${blast_dbs_dir}/${mirbase_mature_fasta_no_U%.*} \
-query ${output_dir_top}/${collapsed_reads_fasta} \
-out ${output_dir_top}/cindarian-miRBase-BLASTn-eval_1.outfmt6 \
-task blastn-short \
-evalue 1 \
-max_hsps 1 \
-max_target_seqs 1 \
-outfmt 6 \
-num_threads ${threads} \
2> /dev/null

8.2 MirGene BLASTn e-value = 1

# Load bash variables into memory
source .bashvars

time \
${ncbi_blastn} \
-db ${blast_dbs_dir}/${mirgene_mature_fasta_no_U%.*} \
-query ${output_dir_top}/${collapsed_reads_fasta} \
-out ${output_dir_top}/MirGene-BLASTn-eval_1.outfmt6 \
-task blastn-short \
-evalue 1 \
-max_hsps 1 \
-max_target_seqs 1 \
-outfmt 6 \
-num_threads ${threads} \
2> /dev/null

9 Results

9.1 Check BLASTn Default e-value results

# Load bash variables into memory
source .bashvars

head ${output_dir_top}/*eval_1000.outfmt6

echo ""
echo "-----------------------------------------"
echo ""

wc -l ${output_dir_top}/*eval_1000.outfmt6
==> /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/D-Apul/output/10.1-Apul-sRNAseq-BLASTn-31bp-fastp-merged-cnidarian_miRBase/cnidarian-miRBase-BLASTn-eval_1000.outfmt6 <==
1-1843196   ppc-miR-8214-5p 100.000 13  0   0   12  24  18  6   0.11    26.3
2-1083086   ppy-miR-1255a   100.000 12  0   0   3   14  22  11  0.37    24.3
3-967720    ppc-miR-8214-5p 100.000 13  0   0   12  24  18  6   0.11    26.3
4-832824    dme-miR-4971-5p 100.000 12  0   0   17  28  18  7   0.45    24.3
5-750080    ppc-miR-8214-5p 100.000 13  0   0   11  23  18  6   0.13    26.3
6-691325    ppc-miR-8214-5p 100.000 13  0   0   12  24  18  6   0.11    26.3
7-659957    ami-miR-2184-5p 100.000 11  0   0   4   14  12  22  2.0 22.3
8-606529    cpo-miR-509c-3p 100.000 12  0   0   13  24  8   19  0.37    24.3
9-571297    adi-nve-F-miR-100_Acropora_digitifera__Praher_et_al._2021_NA    100.000 20  0   0   1   20  1   20  3.98e-06    40.1
10-528956   egr-miR-10227d-5p   100.000 11  0   0   14  24  20  10  1.7 22.3

==> /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/D-Apul/output/10.1-Apul-sRNAseq-BLASTn-31bp-fastp-merged-cnidarian_miRBase/MirGene-BLASTn-eval_1000.outfmt6 <==
1-1843196   Pma-Mir-96-P3o2_5p  100.000 11  0   0   16  26  9   19  0.78    22.3
2-1083086   Hsa-Mir-3611_3p 100.000 9   0   0   7   15  13  5   8.5 18.3
3-967720    Pma-Mir-96-P3o2_5p  100.000 11  0   0   16  26  9   19  0.78    22.3
4-832824    Mml-Mir-3200_3p 100.000 10  0   0   5   14  21  12  2.6 20.3
5-750080    Pma-Mir-96-P3o2_5p  100.000 11  0   0   15  25  9   19  0.74    22.3
6-691325    Pma-Mir-96-P3o2_5p  100.000 11  0   0   16  26  9   19  0.66    22.3
7-659957    Cpi-Mir-2184_5p 100.000 11  0   0   4   14  12  22  0.74    22.3
8-606529    Cpo-Mir-506-o3_3p   100.000 12  0   0   13  24  8   19  0.14    24.3
9-571297    Csc-Mir-10-P2r2_5p  100.000 19  0   0   2   20  3   21  7.12e-06    38.2
10-528956   Xla-Novel-4-P2_5p   100.000 10  0   0   10  19  10  1   2.5 20.3

-----------------------------------------

  11082917 /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/D-Apul/output/10.1-Apul-sRNAseq-BLASTn-31bp-fastp-merged-cnidarian_miRBase/cnidarian-miRBase-BLASTn-eval_1000.outfmt6
  11082917 /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/D-Apul/output/10.1-Apul-sRNAseq-BLASTn-31bp-fastp-merged-cnidarian_miRBase/MirGene-BLASTn-eval_1000.outfmt6
  22165834 total

9.2 Check BLASTn e-value = 10 results

# Load bash variables into memory
source .bashvars

head ${output_dir_top}/*eval_10.outfmt6

echo ""
echo "-----------------------------------------"
echo ""

wc -l ${output_dir_top}/*eval_10.outfmt6
==> /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/D-Apul/output/10.1-Apul-sRNAseq-BLASTn-31bp-fastp-merged-cnidarian_miRBase/cindarian-miRBase-BLASTn-eval_10.outfmt6 <==
1-1843196   ppc-miR-8214-5p 100.000 13  0   0   12  24  18  6   0.11    26.3
2-1083086   ppy-miR-1255a   100.000 12  0   0   3   14  22  11  0.37    24.3
3-967720    ppc-miR-8214-5p 100.000 13  0   0   12  24  18  6   0.11    26.3
4-832824    dme-miR-4971-5p 100.000 12  0   0   17  28  18  7   0.45    24.3
5-750080    ppc-miR-8214-5p 100.000 13  0   0   11  23  18  6   0.13    26.3
6-691325    ppc-miR-8214-5p 100.000 13  0   0   12  24  18  6   0.11    26.3
7-659957    ami-miR-2184-5p 100.000 11  0   0   4   14  12  22  2.0 22.3
8-606529    cpo-miR-509c-3p 100.000 12  0   0   13  24  8   19  0.37    24.3
9-571297    adi-nve-F-miR-100_Acropora_digitifera__Praher_et_al._2021_NA    100.000 20  0   0   1   20  1   20  3.98e-06    40.1
10-528956   egr-miR-10227d-5p   100.000 11  0   0   14  24  20  10  1.7 22.3

==> /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/D-Apul/output/10.1-Apul-sRNAseq-BLASTn-31bp-fastp-merged-cnidarian_miRBase/MirGene-BLASTn-eval_10.outfmt6 <==
1-1843196   Pma-Mir-96-P3o2_5p  100.000 11  0   0   16  26  9   19  0.78    22.3
2-1083086   Hsa-Mir-3611_3p 100.000 9   0   0   7   15  13  5   8.5 18.3
3-967720    Pma-Mir-96-P3o2_5p  100.000 11  0   0   16  26  9   19  0.78    22.3
4-832824    Mml-Mir-3200_3p 100.000 10  0   0   5   14  21  12  2.6 20.3
5-750080    Pma-Mir-96-P3o2_5p  100.000 11  0   0   15  25  9   19  0.74    22.3
6-691325    Pma-Mir-96-P3o2_5p  100.000 11  0   0   16  26  9   19  0.66    22.3
7-659957    Cpi-Mir-2184_5p 100.000 11  0   0   4   14  12  22  0.74    22.3
8-606529    Cpo-Mir-506-o3_3p   100.000 12  0   0   13  24  8   19  0.14    24.3
9-571297    Csc-Mir-10-P2r2_5p  100.000 19  0   0   2   20  3   21  7.12e-06    38.2
10-528956   Xla-Novel-4-P2_5p   100.000 10  0   0   10  19  10  1   2.5 20.3

-----------------------------------------

  11059697 /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/D-Apul/output/10.1-Apul-sRNAseq-BLASTn-31bp-fastp-merged-cnidarian_miRBase/cindarian-miRBase-BLASTn-eval_10.outfmt6
  10189571 /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/D-Apul/output/10.1-Apul-sRNAseq-BLASTn-31bp-fastp-merged-cnidarian_miRBase/MirGene-BLASTn-eval_10.outfmt6
  21249268 total

9.3 Check BLASTn e-value = 1 results

# Load bash variables into memory
source .bashvars

head ${output_dir_top}/*eval_1.outfmt6

echo ""
echo "-----------------------------------------"
echo ""

wc -l ${output_dir_top}/*eval_1.outfmt6
==> /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/D-Apul/output/10.1-Apul-sRNAseq-BLASTn-31bp-fastp-merged-cnidarian_miRBase/cindarian-miRBase-BLASTn-eval_1.outfmt6 <==
1-1843196   ppc-miR-8214-5p 100.000 13  0   0   12  24  18  6   0.11    26.3
2-1083086   ppy-miR-1255a   100.000 12  0   0   3   14  22  11  0.37    24.3
3-967720    ppc-miR-8214-5p 100.000 13  0   0   12  24  18  6   0.11    26.3
4-832824    dme-miR-4971-5p 100.000 12  0   0   17  28  18  7   0.45    24.3
5-750080    ppc-miR-8214-5p 100.000 13  0   0   11  23  18  6   0.13    26.3
6-691325    ppc-miR-8214-5p 100.000 13  0   0   12  24  18  6   0.11    26.3
8-606529    cpo-miR-509c-3p 100.000 12  0   0   13  24  8   19  0.37    24.3
9-571297    adi-nve-F-miR-100_Acropora_digitifera__Praher_et_al._2021_NA    100.000 20  0   0   1   20  1   20  3.98e-06    40.1
11-456706   dme-miR-4971-5p 100.000 12  0   0   17  28  18  7   0.45    24.3
12-455987   ppc-miR-8214-5p 100.000 13  0   0   12  24  18  6   0.11    26.3

==> /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/D-Apul/output/10.1-Apul-sRNAseq-BLASTn-31bp-fastp-merged-cnidarian_miRBase/MirGene-BLASTn-eval_1.outfmt6 <==
1-1843196   Pma-Mir-96-P3o2_5p  100.000 11  0   0   16  26  9   19  0.78    22.3
3-967720    Pma-Mir-96-P3o2_5p  100.000 11  0   0   16  26  9   19  0.78    22.3
5-750080    Pma-Mir-96-P3o2_5p  100.000 11  0   0   15  25  9   19  0.74    22.3
6-691325    Pma-Mir-96-P3o2_5p  100.000 11  0   0   16  26  9   19  0.66    22.3
7-659957    Cpi-Mir-2184_5p 100.000 11  0   0   4   14  12  22  0.74    22.3
8-606529    Cpo-Mir-506-o3_3p   100.000 12  0   0   13  24  8   19  0.14    24.3
9-571297    Csc-Mir-10-P2r2_5p  100.000 19  0   0   2   20  3   21  7.12e-06    38.2
12-455987   Pma-Mir-96-P3o2_5p  100.000 11  0   0   16  26  9   19  0.78    22.3
13-415294   Pma-Mir-96-P3o2_5p  100.000 11  0   0   15  25  9   19  0.74    22.3
14-383875   Nve-Mir-10_5p   100.000 21  0   0   2   22  2   22  5.47e-07    42.1

-----------------------------------------

  5108736 /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/D-Apul/output/10.1-Apul-sRNAseq-BLASTn-31bp-fastp-merged-cnidarian_miRBase/cindarian-miRBase-BLASTn-eval_1.outfmt6
  4196511 /home/shared/8TB_HDD_01/sam/gitrepos/deep-dive/D-Apul/output/10.1-Apul-sRNAseq-BLASTn-31bp-fastp-merged-cnidarian_miRBase/MirGene-BLASTn-eval_1.outfmt6
  9305247 total

The default e-value results in alignments for ~50% of sequences.

Decreasing the e-value to 10 resulted in fewer query alignments, as we’d expect, but only minimally.

Decreasing the e-value to 1 resulted in ~25% of query alignments.

For further analysis, we should probably discuss a reasonable e-value to use for filtering, as it might be worthwhile to test even lower e-value thresholds.


Citations

Altschul, Stephen F., Warren Gish, Webb Miller, Eugene W. Myers, and David J. Lipman. 1990. “Basic Local Alignment Search Tool.” Journal of Molecular Biology 215 (3): 403–10. https://doi.org/10.1016/s0022-2836(05)80360-2.
LS0tCnRpdGxlOiAiMTAuMS1BcHVsLXNSTkFzZXEtQkxBU1RuLTMxYnAtZmFzdHAtbWVyZ2VkLWNuaWRhcmlhbl9taVJCYXNlIgphdXRob3I6ICJTYW0gV2hpdGUiCmRhdGU6ICIyMDI0LTAzLTI5IgpvdXRwdXQ6IAogIGJvb2tkb3duOjpodG1sX2RvY3VtZW50MjoKICAgIHRoZW1lOiBjb3NtbwogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6IHRydWUKICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQogICAgY29kZV9mb2xkaW5nOiBzaG93CiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgZ2l0aHViX2RvY3VtZW50OgogICAgdG9jOiB0cnVlCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUKICBodG1sX2RvY3VtZW50OgogICAgdGhlbWU6IGNvc21vCiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgICBjb2RlX2ZvbGRpbmc6IHNob3cKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKYmlibGlvZ3JhcGh5OiByZWZlcmVuY2VzLmJpYgpsaW5rLWNpdGF0aW9uczogdHJ1ZQotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQpsaWJyYXJ5KGtuaXRyKQpsaWJyYXJ5KGthYmxlRXh0cmEpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkocmV0aWN1bGF0ZSkKa25pdHI6Om9wdHNfY2h1bmskc2V0KAogIGVjaG8gPSBUUlVFLCAgICAgICAgICMgRGlzcGxheSBjb2RlIGNodW5rcwogIGV2YWwgPSBGQUxTRSwgICAgICAgICMgRXZhbHVhdGUgY29kZSBjaHVua3MKICB3YXJuaW5nID0gRkFMU0UsICAgICAjIEhpZGUgd2FybmluZ3MKICBtZXNzYWdlID0gRkFMU0UsICAgICAjIEhpZGUgbWVzc2FnZXMKICBjb21tZW50ID0gIiIsICAgICAgICAjIFByZXZlbnRzIGFwcGVuZGluZyAnIyMnIHRvIGJlZ2lubmluZyBvZiBsaW5lcyBpbiBjb2RlIG91dHB1dAogIHdpZHRoID0gMTAwMCAgICAgICAgICMgYWRkcyBzY3JvbGwgYmFyCikKYGBgCgoKVGhpcyBub3RlYm9vayBwZXJmb3JtcyBhIHNpbXBsZSBbTkNCSSBCTEFTVG5dKGh0dHBzOi8vd3d3Lm5jYmkubmxtLm5paC5nb3YvYm9va3MvTkJLMjc5NjkwLykgW0BhbHRzY2h1bDE5OTBdIGFnYWluc3QgdHdvIG1pUk5BIGRhdGFiYXNlcyB0byBhdHRlbXB0IHRvIGlkZW50aWZ5IG1pUk5BIGluIF9BLnB1bGNocmFfIHNSTkFzZXE6CgotIFttaVJCYXNlXShodHRwczovL21pcmJhc2Uub3JnL2Rvd25sb2FkLykKCiAgLSBVdGlsaXplcyBhIG1vZGlmaWVkIHZlcnNpb24sIHdoaWNoIGluY2x1ZGVzIGNuaWRhcmlhbiBtaVJOQSBjdWxsZWQgZnJvbSBsaXRlcmF0dXJlIGJ5IEppbGwgQWhzbGV5LgogIAogIC0gLSBbYGNuaWRhcmlhbi1taXJiYXNlLW1hdHVyZS12MjIuMS5mYXN0YWBdKC4uLy4uL2RhdGEvY25pZGFyaWFuLW1pcmJhc2UtbWF0dXJlLXYyMi4xLmZhc3RhKQoKLSBbTWlyR2VuZURCXShodHRwczovL3d3dy5taXJnZW5lZGIub3JnL2Rvd25sb2FkKQoKUmVsaWVzIG9uIHRoZSBmb2xsb3dpbmcgc29mdHdhcmU6CiAgCi0gW2Zhc3R4X3Rvb2xraXRdKGh0dHA6Ly9oYW5ub25sYWIuY3NobC5lZHUvZmFzdHhfdG9vbGtpdC8pCgogIC0gYGZhc3R4X2NvbGxhcHNlcmA6IENvbGxhcHNlcyBkdXBsaWNhdGUgc2VxdWVuY2VzIGluIEZhc3RBL1EgaW50byBzaW5nbGUgc2VxdWVuY2UuCgojIENyZWF0ZSBhIEJhc2ggdmFyaWFibGVzIGZpbGUKClRoaXMgYWxsb3dzIHVzYWdlIG9mIEJhc2ggdmFyaWFibGVzIGFjcm9zcyBSIE1hcmtkb3duIGNodW5rcy4KCmBgYHtyIHNhdmUtYmFzaC12YXJpYWJsZXMtdG8tcnZhcnMtZmlsZSwgZW5naW5lPSdiYXNoJywgZXZhbD1UUlVFfQp7CmVjaG8gIiMjIyMgQXNzaWduIFZhcmlhYmxlcyAjIyMjIgplY2hvICIiCgplY2hvICIjIFRyaW1tZWQgRmFzdFEgbmFtaW5nIHBhdHRlcm4iCmVjaG8gImV4cG9ydCB0cmltbWVkX2Zhc3Rxc19wYXR0ZXJuPScqZmFzdHAtYWRhcHRlcnMtcG9seUctMzFicC1tZXJnZWQuZnEuZ3onIgoKZWNobyAiIyBEYXRhIGRpcmVjdG9yaWVzIgplY2hvICdleHBvcnQgZGVlcF9kaXZlX2Rpcj0vaG9tZS9zaGFyZWQvOFRCX0hERF8wMS9zYW0vZ2l0cmVwb3MvZGVlcC1kaXZlJwplY2hvICdleHBvcnQgZGVlcF9kaXZlX2RhdGFfZGlyPSIke2RlZXBfZGl2ZV9kaXJ9L2RhdGEiJwplY2hvICdleHBvcnQgb3V0cHV0X2Rpcl90b3A9JHtkZWVwX2RpdmVfZGlyfS9ELUFwdWwvb3V0cHV0LzEwLjEtQXB1bC1zUk5Bc2VxLUJMQVNUbi0zMWJwLWZhc3RwLW1lcmdlZC1jbmlkYXJpYW5fbWlSQmFzZScKZWNobyAnZXhwb3J0IHRyaW1tZWRfZmFzdHFzX2Rpcj0iJHtkZWVwX2RpdmVfZGlyfS9ELUFwdWwvb3V0cHV0LzA4LjItQXB1bC1zUk5Bc2VxLXRyaW1taW5nLTMxYnAtZmFzdHAtbWVyZ2VkL3RyaW1tZWQtcmVhZHMiJwplY2hvICdleHBvcnQgYmxhc3RfZGJzX2Rpcj0iJHtkZWVwX2RpdmVfZGlyfS9kYXRhL2JsYXN0X2RicyInCmVjaG8gIiIKCmVjaG8gIiMgSW5wdXQvT3V0cHV0IGZpbGVzIgplY2hvICdleHBvcnQgY29sbGFwc2VkX3JlYWRzX2Zhc3RhPSJjb2xsYXBzZWQtcmVhZHMtYWxsLmZhc3RhIicKZWNobyAnZXhwb3J0IGNvbmNhdGVuYXRlZF90cmltbWVkX3JlYWRzX2Zhc3RxPSJjb25jYXRlbmF0ZWQtdHJpbW1lZC1yZWFkcy1hbGwuZmFzdHEuZ3oiJwplY2hvICdleHBvcnQgbWlyYmFzZV9tYXR1cmVfZmFzdGFfbmFtZT0iY25pZGFyaWFuLW1pcmJhc2UtbWF0dXJlLXYyMi4xLmZhc3RhIicKZWNobyAnZXhwb3J0IG1pcmJhc2VfbWF0dXJlX2Zhc3RhX25vX1U9ImNuaWRhcmlhbi1taXJiYXNlLW1hdHVyZS12MjIuMS1ub19VLmZhIicKZWNobyAnZXhwb3J0IG1pcmdlbmVfbWF0dXJlX2Zhc3RhX25hbWU9Im1pcmdlbmUtbWF0dXJlLWFsbC12Mi4xLmZhIicKZWNobyAnZXhwb3J0IG1pcmdlbmVfbWF0dXJlX2Zhc3RhX25vX1U9Im1pcmdlbmUtbWF0dXJlLWFsbC12Mi4xLW5vX1UuZmEiJwplY2hvICIiCgplY2hvICIjIEV4dGVybmFsIGRhdGEgVVJMcyIKZWNobyAnZXhwb3J0IG1pcmdlbmVkYl9mYXN0YV91cmw9Imh0dHBzOi8vd3d3Lm1pcmdlbmVkYi5vcmcvZmFzdGEvQUxMP21hdD0xIicKZWNobyAiIgoKZWNobyAiIyBQYXRocyB0byBwcm9ncmFtcyIKZWNobyAnZXhwb3J0IG5jYmlfYmxhc3RfZGlyPSIvaG9tZS9zaGFyZWQvbmNiaS1ibGFzdC0yLjE1LjArL2Jpbi8iJwplY2hvICdleHBvcnQgbmNiaV9ibGFzdG49IiR7bmNiaV9ibGFzdF9kaXJ9L2JsYXN0biInCmVjaG8gJ2V4cG9ydCBuY2JpX21ha2VibGFzdF9kYj0iJHtuY2JpX2JsYXN0X2Rpcn0vbWFrZWJsYXN0ZGIiJwplY2hvICdleHBvcnQgZmFzdHhfY29sbGFwc2VyPSIvaG9tZS9zaGFyZWQvZmFzdHhfdG9vbGtpdF8wLjAuMTNfYmluYXJpZXNfTGludXhfMi42X2FtZDY0L2Jpbi9mYXN0eF9jb2xsYXBzZXIiJwoKZWNobyAiIyBTZXQgbnVtYmVyIG9mIENQVXMgdG8gdXNlIgplY2hvICdleHBvcnQgdGhyZWFkcz00MCcKZWNobyAiIgoKZWNobyAiIyBJbml0aWFsaXplIGFycmF5cyIKZWNobyAnZXhwb3J0IHRyaW1tZWRfZmFzdHFzX2FycmF5PSgpJwoKCn0gPiAuYmFzaHZhcnMKCmNhdCAuYmFzaHZhcnMKYGBgCgoKIyBEb3dubG9hZCBNaXJHZW5lREIgRmFzdGEKYGBge3IgZG93bmxvYWQtbWlyZ2VuZS1kYi1GYXN0QSwgZW5naW5lPSdiYXNoJywgZXZhbD1UUlVFfQojIExvYWQgYmFzaCB2YXJpYWJsZXMgaW50byBtZW1vcnkKc291cmNlIC5iYXNodmFycwoKIyBEb3dubG9hZCBNaXJHZW5lREIsIGlmIGl0IGRvZXNuJ3QgZXhpc3QKaWYgWyAhIC1mICIke2RlZXBfZGl2ZV9kYXRhX2Rpcn0vJHttaXJnZW5lX21hdHVyZV9mYXN0YV9uYW1lfSIgXTsgdGhlbgoKICB3Z2V0IFwKICAtLW5vLWNoZWNrLWNlcnRpZmljYXRlIFwKICAtLWNvbnRpbnVlIFwKICAtLW5vLWhvc3QtZGlyZWN0b3JpZXMgXAogIC0tbm8tZGlyZWN0b3JpZXMgXAogIC0tbm8tcGFyZW50IFwKICAtLXF1aWV0IFwKICAtLWV4ZWN1dGUgcm9ib3RzPW9mZiBcCiAgLS1vdXRwdXQtZG9jdW1lbnQgJHtkZWVwX2RpdmVfZGF0YV9kaXJ9LyR7bWlyZ2VuZV9tYXR1cmVfZmFzdGFfbmFtZX0gXAogICAke21pcmdlbmVkYl9mYXN0YV91cmx9CiAKIGZpCiAKIGxzIC1saCAke2RlZXBfZGl2ZV9kYXRhX2Rpcn0KYGBgCgojIyBJbnNwZWN0IG1pUk5BIEZhc3RBcwpgYGB7ciBpbnNwZWN0LW1pUk5BLUZhc3RBcywgZW5naW5lPSdiYXNoJywgZXZhbD1UUlVFfQojIExvYWQgYmFzaCB2YXJpYWJsZXMgaW50byBtZW1vcnkKc291cmNlIC5iYXNodmFycwoKaGVhZCAiJHtkZWVwX2RpdmVfZGF0YV9kaXJ9Ii9bY21dW25pXSouZmEqCmBgYAoKCiMgQ29udmVydCBgVWAgdG8gYFRgIGluIG1pUk5BIEZhc3RBcwoKVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgc1JOQXNlcSBzZXF1ZW5jZXMgZG8gX25vdF8gaGF2ZSB1cmFjaWxzIChgVWApIC0gdGhleSBoYXZlIHRoeW1pbmVzIChgVGApLgoKYGBge3IgY29udmVydC1VLXRvLVQsIGVuZ2luZT0nYmFzaCcsIGV2YWw9VFJVRX0KIyBMb2FkIGJhc2ggdmFyaWFibGVzIGludG8gbWVtb3J5CnNvdXJjZSAuYmFzaHZhcnMKCiMgQ29udmVydCBtaVJCYXNlIEZhc3RBCmlmIFsgISAtZiAiJHtkZWVwX2RpdmVfZGF0YV9kaXJ9LyR7bWlyYmFzZV9tYXR1cmVfZmFzdGFfbm9fVX0iIF07IHRoZW4KICBzZWQgJy9eW14+XS9zL1UvVC9nJyAiJHtkZWVwX2RpdmVfZGF0YV9kaXJ9LyR7bWlyYmFzZV9tYXR1cmVfZmFzdGFfbmFtZX0iIFwKICA+ICIke2RlZXBfZGl2ZV9kYXRhX2Rpcn0vJHttaXJiYXNlX21hdHVyZV9mYXN0YV9ub19VfSIKZmkKCgojIENvbnZlcnQgTWlyR2VuZSBGYXN0QQppZiBbICEgLWYgIiR7ZGVlcF9kaXZlX2RhdGFfZGlyfS8ke21pcmdlbmVfbWF0dXJlX2Zhc3RhX25vX1V9IiBdOyB0aGVuCiAgc2VkICcvXltePl0vcy9VL1QvZycgIiR7ZGVlcF9kaXZlX2RhdGFfZGlyfS8ke21pcmdlbmVfbWF0dXJlX2Zhc3RhX25hbWV9IiBcCiAgPiAiJHtkZWVwX2RpdmVfZGF0YV9kaXJ9LyR7bWlyZ2VuZV9tYXR1cmVfZmFzdGFfbm9fVX0iCmZpCgoKaGVhZCAiJHtkZWVwX2RpdmVfZGF0YV9kaXJ9Ii9bY21dW25pXSpVLmZhCiAgCmBgYAoKIyBDcmVhdGUgQkxBU1QgRGF0YWJhc2VzCmBgYHtyIG1ha2UtYmxhc3QtZGJzLCBlbmdpbmU9J2Jhc2gnLCBldmFsPVRSVUV9CiMgTG9hZCBiYXNoIHZhcmlhYmxlcyBpbnRvIG1lbW9yeQpzb3VyY2UgLmJhc2h2YXJzCgoKCiMgbWlSQmFzZSBCTEFTVCBEQgojIyBNYWtlIHN1cmUgb3V0cHV0IGRpcmVjdG9yeSBleGlzdHMKaWYgWyAhIC1kICIke2JsYXN0X2Ric19kaXJ9IiBdOyB0aGVuCiAgbWtkaXIgLS1wYXJlbnRzICIke2JsYXN0X2Ric19kaXJ9IgpmaQoKIyMgQ2hlY2sgZm9yIHByZS1leGlzaW5nIGRhdGFiYXNlCmlmIFsgISAtZiAiJHtibGFzdF9kYnNfZGlyfS8ke21pcmdlbmVfbWF0dXJlX2Zhc3RhX25vX1UlLip9LmJsYXN0ZGIubG9nIiBdOyB0aGVuCiAgJHtuY2JpX21ha2VibGFzdF9kYn0gXAogIC1pbiAke2RlZXBfZGl2ZV9kYXRhX2Rpcn0vJHttaXJnZW5lX21hdHVyZV9mYXN0YV9ub19VfSBcCiAgLXRpdGxlICR7bWlyZ2VuZV9tYXR1cmVfZmFzdGFfbm9fVSUuKn0gXAogIC1kYnR5cGUgbnVjbCBcCiAgLW91dCAke2JsYXN0X2Ric19kaXJ9LyR7bWlyZ2VuZV9tYXR1cmVfZmFzdGFfbm9fVSUuKn0gXAogIC1sb2dmaWxlICR7Ymxhc3RfZGJzX2Rpcn0vJHttaXJnZW5lX21hdHVyZV9mYXN0YV9ub19VJS4qfS5ibGFzdGRiLmxvZwpmaQoKIyBtaVJCYXNlIEJMQVNUIERCCiMjIE1ha2Ugc3VyZSBvdXRwdXQgZGlyZWN0b3J5IGV4aXN0cwppZiBbICEgLWQgIiR7Ymxhc3RfZGJzX2Rpcn0iIF07IHRoZW4KICBta2RpciAtLXBhcmVudHMgIiR7Ymxhc3RfZGJzX2Rpcn0iCmZpCgojIyBDaGVjayBmb3IgcHJlLWV4aXNpbmcgZGF0YWJhc2UKaWYgWyAhIC1mICIke2JsYXN0X2Ric19kaXJ9LyR7bWlyYmFzZV9tYXR1cmVfZmFzdGFfbm9fVSUuKn0uYmxhc3RkYi5sb2ciIF07IHRoZW4KICAke25jYmlfbWFrZWJsYXN0X2RifSBcCiAgLWluICR7ZGVlcF9kaXZlX2RhdGFfZGlyfS8ke21pcmJhc2VfbWF0dXJlX2Zhc3RhX25vX1V9IFwKICAtdGl0bGUgJHttaXJiYXNlX21hdHVyZV9mYXN0YV9ub19VJS4qfSBcCiAgLWRidHlwZSBudWNsIFwKICAtb3V0ICR7Ymxhc3RfZGJzX2Rpcn0vJHttaXJiYXNlX21hdHVyZV9mYXN0YV9ub19VJS4qfSBcCiAgLWxvZ2ZpbGUgJHtibGFzdF9kYnNfZGlyfS8ke21pcmJhc2VfbWF0dXJlX2Zhc3RhX25vX1UlLip9LmJsYXN0ZGIubG9nCmZpCmBgYAoKCiMgUHJlcGFyZSByZWFkcyBmb3IgQkxBU1RpbmcKCiMjIENvbmNhdGVuYXRlIGFsbCB0cmltbWVkIHJlYWRzCmBgYHtyIGNvbmNhdGVuYXRlLXRyaW1tZWQtcmVhZHMsIGVuZ2luZT0nYmFzaCcsIGV2YWw9VFJVRX0KIyBMb2FkIGJhc2ggdmFyaWFibGVzIGludG8gbWVtb3J5CnNvdXJjZSAuYmFzaHZhcnMKCiMgTWFrZSBvdXRwdXQgZGlyZWN0b3J5LCBpZiBpdCBkb2Vucyd0IGV4aXN0CmlmIFsgISAtZCAiJHtvdXRwdXRfZGlyX3RvcH0iIF07IHRoZW4KICBta2RpciAtLXBhcmVudHMgIiR7b3V0cHV0X2Rpcl90b3B9IgpmaQoKIyBDaGVjayBmb3IgZXhpc3RlbmNlIG9mIGNvbmNhdGVuYXRlZCBGYXN0QSBiZWZvcmUgcnVubmluZwppZiBbICEgLWYgIiR7b3V0cHV0X2Rpcl90b3B9LyR7Y29uY2F0ZW5hdGVkX3RyaW1tZWRfcmVhZHNfZmFzdHF9IiBdOyB0aGVuCiAgY2F0ICR7dHJpbW1lZF9mYXN0cXNfZGlyfS8ke3RyaW1tZWRfZmFzdHFzX3BhdHRlcm59IFwKICA+ICIke291dHB1dF9kaXJfdG9wfS8ke2NvbmNhdGVuYXRlZF90cmltbWVkX3JlYWRzX2Zhc3RxfSIKZmkKCmxzIC1saCAiJHtvdXRwdXRfZGlyX3RvcH0vJHtjb25jYXRlbmF0ZWRfdHJpbW1lZF9yZWFkc19mYXN0cX0iCmBgYAoKIyMgQ29sbGFwc2UgcmVhZHMgdG8gRmFzdEEKClVzZXMgYGZhc3R4X2NvbGxhcHNlcmAgdG8gY29sbGFwc2UgdG8gdW5pcXVlIHJlYWRzLgoKUmVxdWlyZXMgdW5kb2N1bWVudGVkIHF1YWxpdHkgc2V0dGluZy4gSGF2ZSBzZWxlY3RlZCBgMzBgIGFzIGN1dHRvZmY6IGAtUTMwYC4KYGBge3IgY29sbGFwc2UtcmVhZHMtdG8tRmFzdEEsIGVuZ2luZT0nYmFzaCcsIGV2YWw9VFJVRX0KIyBMb2FkIGJhc2ggdmFyaWFibGVzIGludG8gbWVtb3J5CnNvdXJjZSAuYmFzaHZhcnMKCiMgQ2hlY2sgZm9yIGV4aXN0ZW5jZSBvZiBjb2xsYXBzZWQgRmFzdEEgYmVmb3JlIHJ1bm5pbmcKdGltZSBcCmlmIFsgISAtZiAiJHtvdXRwdXRfZGlyX3RvcH0vJHtjb2xsYXBzZWRfcmVhZHNfZmFzdGF9IiBdOyB0aGVuCiAgemNhdCAke291dHB1dF9kaXJfdG9wfS8ke2NvbmNhdGVuYXRlZF90cmltbWVkX3JlYWRzX2Zhc3RxfSBcCiAgfCAke2Zhc3R4X2NvbGxhcHNlcn0gXAogIC1RMzAgXAogIC1vICIke291dHB1dF9kaXJfdG9wfS8ke2NvbGxhcHNlZF9yZWFkc19mYXN0YX0iCmZpCgpoZWFkICIke291dHB1dF9kaXJfdG9wfS8ke2NvbGxhcHNlZF9yZWFkc19mYXN0YX0iCgp3YyAtbCAiJHtvdXRwdXRfZGlyX3RvcH0vJHtjb2xsYXBzZWRfcmVhZHNfZmFzdGF9IgpgYGAKCiMgUnVuIEJMQVNUbiBEZWZhdWx0IEUtdmFsdWUKCi0gMTAwMCBmb3IgYmxhc3RuLXNob3J0CgpSdW5zIEJMQVNUbiB1c2luZyB0aGUgYGJsYXN0bi1zaG9ydGAgdGFzayBmb3Igc2VxdWVuY2VzIDwgMzBicC4KCkxvb2sgZm9yIHRvcCBtYXRjaCAoYC1tYXhfaHNwcyAxYCAmIGAtbWF4X3RhcmdldF9zZXFzIDFgKSBmb3IgZWFjaCBxdWVyeS4KCiAgLSBTdXBwcmVzcyBzdWJzZXF1ZW50IHdhcm5pbmcgYEV4YW1pbmluZyA1IG9yIG1vcmUgbWF0Y2hlcyBpcyByZWNvbW1lbmRlZGAgYnkKICByZWRpcmVjdGluZyBzdGRvdXQ6IGAyPiAvZGV2L251bGxgCgojIyBtaVJCYXNlIEJMQVNUbiBEZWZhdWx0IGUtdmFsdWUKYGBge3IgbWlSQmFzZS1CTEFTVG4tZGVmYXVsdC1ldmFsLCBlbmdpbmU9J2Jhc2gnLCBjYWNoZT1UUlVFfQojIExvYWQgYmFzaCB2YXJpYWJsZXMgaW50byBtZW1vcnkKc291cmNlIC5iYXNodmFycwoKdGltZSBcCiR7bmNiaV9ibGFzdG59IFwKLWRiICR7Ymxhc3RfZGJzX2Rpcn0vJHttaXJiYXNlX21hdHVyZV9mYXN0YV9ub19VJS4qfSBcCi1xdWVyeSAke291dHB1dF9kaXJfdG9wfS8ke2NvbGxhcHNlZF9yZWFkc19mYXN0YX0gXAotb3V0ICR7b3V0cHV0X2Rpcl90b3B9L2NuaWRhcmlhbi1taVJCYXNlLUJMQVNUbi1ldmFsXzEwMDAub3V0Zm10NiBcCi10YXNrIGJsYXN0bi1zaG9ydCBcCi1tYXhfaHNwcyAxIFwKLW1heF90YXJnZXRfc2VxcyAxIFwKLW91dGZtdCA2IFwKLW51bV90aHJlYWRzICR7dGhyZWFkc30gXAoyPiAvZGV2L251bGwKYGBgCgojIyBNaXJHZW5lIEJMQVNUbiBEZWZhdWx0IGUtdmFsdWUKCmBgYHtyIE1pckdlbmUtQkxBU1RuLWRlZmF1bHQtZXZhbCwgZW5naW5lPSdiYXNoJywgY2FjaGU9VFJVRX0KIyBMb2FkIGJhc2ggdmFyaWFibGVzIGludG8gbWVtb3J5CnNvdXJjZSAuYmFzaHZhcnMKCnRpbWUgXAoke25jYmlfYmxhc3RufSBcCi1kYiAke2JsYXN0X2Ric19kaXJ9LyR7bWlyZ2VuZV9tYXR1cmVfZmFzdGFfbm9fVSUuKn0gXAotcXVlcnkgJHtvdXRwdXRfZGlyX3RvcH0vJHtjb2xsYXBzZWRfcmVhZHNfZmFzdGF9IFwKLW91dCAke291dHB1dF9kaXJfdG9wfS9NaXJHZW5lLUJMQVNUbi1ldmFsXzEwMDAub3V0Zm10NiBcCi10YXNrIGJsYXN0bi1zaG9ydCBcCi1tYXhfaHNwcyAxIFwKLW1heF90YXJnZXRfc2VxcyAxIFwKLW91dGZtdCA2IFwKLW51bV90aHJlYWRzICR7dGhyZWFkc30gXAoyPiAvZGV2L251bGwKYGBgCgoKIyBCTEFTVG4gRS12YWx1ZSA9IDEwCgpSdW5uaW5nIHRoaXMgZm9yIHNpbXBsZSBjb21wYXJpc29uIHRvIHRoZSBkZWZhdWx0IGBibGFzdG4tc2hvcnRgIHZhbHVlIG9mIDEwMDAuCgojIyBtaVJCYXNlIEJMQVNUbiBlLXZhbHVlID0gMTAKYGBge3IgbWlSQmFzZS1CTEFTVG4tMTAtZXZhbCwgZW5naW5lPSdiYXNoJywgY2FjaGU9VFJVRX0KIyBMb2FkIGJhc2ggdmFyaWFibGVzIGludG8gbWVtb3J5CnNvdXJjZSAuYmFzaHZhcnMKCnRpbWUgXAoke25jYmlfYmxhc3RufSBcCi1kYiAke2JsYXN0X2Ric19kaXJ9LyR7bWlyYmFzZV9tYXR1cmVfZmFzdGFfbm9fVSUuKn0gXAotcXVlcnkgJHtvdXRwdXRfZGlyX3RvcH0vJHtjb2xsYXBzZWRfcmVhZHNfZmFzdGF9IFwKLW91dCAke291dHB1dF9kaXJfdG9wfS9jaW5kYXJpYW4tbWlSQmFzZS1CTEFTVG4tZXZhbF8xMC5vdXRmbXQ2IFwKLXRhc2sgYmxhc3RuLXNob3J0IFwKLWV2YWx1ZSAxMCBcCi1tYXhfaHNwcyAxIFwKLW1heF90YXJnZXRfc2VxcyAxIFwKLW91dGZtdCA2IFwKLW51bV90aHJlYWRzICR7dGhyZWFkc30gXAoyPiAvZGV2L251bGwKYGBgCgojIyBNaXJHZW5lIEJMQVNUbiBlLXZhbHVlID0gMTAKCmBgYHtyIE1pckdlbmUtQkxBU1RuLTEwLWV2YWwsIGVuZ2luZT0nYmFzaCcsIGNhY2hlPVRSVUV9CiMgTG9hZCBiYXNoIHZhcmlhYmxlcyBpbnRvIG1lbW9yeQpzb3VyY2UgLmJhc2h2YXJzCgp0aW1lIFwKJHtuY2JpX2JsYXN0bn0gXAotZGIgJHtibGFzdF9kYnNfZGlyfS8ke21pcmdlbmVfbWF0dXJlX2Zhc3RhX25vX1UlLip9IFwKLXF1ZXJ5ICR7b3V0cHV0X2Rpcl90b3B9LyR7Y29sbGFwc2VkX3JlYWRzX2Zhc3RhfSBcCi1vdXQgJHtvdXRwdXRfZGlyX3RvcH0vTWlyR2VuZS1CTEFTVG4tZXZhbF8xMC5vdXRmbXQ2IFwKLXRhc2sgYmxhc3RuLXNob3J0IFwKLWV2YWx1ZSAxMCBcCi1tYXhfaHNwcyAxIFwKLW1heF90YXJnZXRfc2VxcyAxIFwKLW91dGZtdCA2IFwKLW51bV90aHJlYWRzICR7dGhyZWFkc30gXAoyPiAvZGV2L251bGwKYGBgCgoKIyBCTEFTVG4gRS12YWx1ZSA9IDEKClJ1bm5pbmcgdGhpcyBmb3Igc2ltcGxlIGNvbXBhcmlzb24gdG8gdGhlIGRlZmF1bHQgYGJsYXN0bi1zaG9ydGAgdmFsdWUgb2YgMTAwMC4KCiMjIG1pUkJhc2UgQkxBU1RuIGUtdmFsdWUgPSAxCmBgYHtyIG1pUkJhc2UtQkxBU1RuLTEtZXZhbCwgZW5naW5lPSdiYXNoJywgY2FjaGU9VFJVRX0KIyBMb2FkIGJhc2ggdmFyaWFibGVzIGludG8gbWVtb3J5CnNvdXJjZSAuYmFzaHZhcnMKCnRpbWUgXAoke25jYmlfYmxhc3RufSBcCi1kYiAke2JsYXN0X2Ric19kaXJ9LyR7bWlyYmFzZV9tYXR1cmVfZmFzdGFfbm9fVSUuKn0gXAotcXVlcnkgJHtvdXRwdXRfZGlyX3RvcH0vJHtjb2xsYXBzZWRfcmVhZHNfZmFzdGF9IFwKLW91dCAke291dHB1dF9kaXJfdG9wfS9jaW5kYXJpYW4tbWlSQmFzZS1CTEFTVG4tZXZhbF8xLm91dGZtdDYgXAotdGFzayBibGFzdG4tc2hvcnQgXAotZXZhbHVlIDEgXAotbWF4X2hzcHMgMSBcCi1tYXhfdGFyZ2V0X3NlcXMgMSBcCi1vdXRmbXQgNiBcCi1udW1fdGhyZWFkcyAke3RocmVhZHN9IFwKMj4gL2Rldi9udWxsCmBgYAoKIyMgTWlyR2VuZSBCTEFTVG4gZS12YWx1ZSA9IDEKCmBgYHtyIE1pckdlbmUtQkxBU1RuLTEtZXZhbCwgZW5naW5lPSdiYXNoJywgY2FjaGU9VFJVRX0KIyBMb2FkIGJhc2ggdmFyaWFibGVzIGludG8gbWVtb3J5CnNvdXJjZSAuYmFzaHZhcnMKCnRpbWUgXAoke25jYmlfYmxhc3RufSBcCi1kYiAke2JsYXN0X2Ric19kaXJ9LyR7bWlyZ2VuZV9tYXR1cmVfZmFzdGFfbm9fVSUuKn0gXAotcXVlcnkgJHtvdXRwdXRfZGlyX3RvcH0vJHtjb2xsYXBzZWRfcmVhZHNfZmFzdGF9IFwKLW91dCAke291dHB1dF9kaXJfdG9wfS9NaXJHZW5lLUJMQVNUbi1ldmFsXzEub3V0Zm10NiBcCi10YXNrIGJsYXN0bi1zaG9ydCBcCi1ldmFsdWUgMSBcCi1tYXhfaHNwcyAxIFwKLW1heF90YXJnZXRfc2VxcyAxIFwKLW91dGZtdCA2IFwKLW51bV90aHJlYWRzICR7dGhyZWFkc30gXAoyPiAvZGV2L251bGwKYGBgCgoKCiMgUmVzdWx0cwoKIyMgQ2hlY2sgQkxBU1RuIERlZmF1bHQgZS12YWx1ZSByZXN1bHRzCmBgYHtyIGJsYXN0bi1kZWZhdWx0LWV2YWx1ZS1yZXN1bHRzLCBlbmdpbmU9J2Jhc2gnLCBldmFsPVRSVUV9CiMgTG9hZCBiYXNoIHZhcmlhYmxlcyBpbnRvIG1lbW9yeQpzb3VyY2UgLmJhc2h2YXJzCgpoZWFkICR7b3V0cHV0X2Rpcl90b3B9LypldmFsXzEwMDAub3V0Zm10NgoKZWNobyAiIgplY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKZWNobyAiIgoKd2MgLWwgJHtvdXRwdXRfZGlyX3RvcH0vKmV2YWxfMTAwMC5vdXRmbXQ2CmBgYAoKIyMgQ2hlY2sgQkxBU1RuIGUtdmFsdWUgPSAxMCByZXN1bHRzCmBgYHtyIGJsYXN0bi0xMC1ldmFsdWUtcmVzdWx0cywgZW5naW5lPSdiYXNoJywgZXZhbD1UUlVFfQojIExvYWQgYmFzaCB2YXJpYWJsZXMgaW50byBtZW1vcnkKc291cmNlIC5iYXNodmFycwoKaGVhZCAke291dHB1dF9kaXJfdG9wfS8qZXZhbF8xMC5vdXRmbXQ2CgplY2hvICIiCmVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgplY2hvICIiCgp3YyAtbCAke291dHB1dF9kaXJfdG9wfS8qZXZhbF8xMC5vdXRmbXQ2CmBgYAoKIyMgQ2hlY2sgQkxBU1RuIGUtdmFsdWUgPSAxIHJlc3VsdHMKYGBge3IgYmxhc3RuLTEtZXZhbHVlLXJlc3VsdHMsIGVuZ2luZT0nYmFzaCcsIGV2YWw9VFJVRX0KIyBMb2FkIGJhc2ggdmFyaWFibGVzIGludG8gbWVtb3J5CnNvdXJjZSAuYmFzaHZhcnMKCmhlYWQgJHtvdXRwdXRfZGlyX3RvcH0vKmV2YWxfMS5vdXRmbXQ2CgplY2hvICIiCmVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgplY2hvICIiCgp3YyAtbCAke291dHB1dF9kaXJfdG9wfS8qZXZhbF8xLm91dGZtdDYKYGBgClRoZSBkZWZhdWx0IGUtdmFsdWUgcmVzdWx0cyBpbiBhbGlnbm1lbnRzIGZvciB+NTAlIG9mIHNlcXVlbmNlcy4KCkRlY3JlYXNpbmcgdGhlIGUtdmFsdWUgdG8gYDEwYCByZXN1bHRlZCBpbiBmZXdlciBxdWVyeSBhbGlnbm1lbnRzLCBhcyB3ZSdkIGV4cGVjdCwgYnV0IG9ubHkgbWluaW1hbGx5LgoKRGVjcmVhc2luZyB0aGUgZS12YWx1ZSB0byBgMWAgcmVzdWx0ZWQgaW4gfjI1JSBvZiBxdWVyeSBhbGlnbm1lbnRzLgoKRm9yIGZ1cnRoZXIgYW5hbHlzaXMsIHdlIHNob3VsZCBwcm9iYWJseSBkaXNjdXNzIGEgcmVhc29uYWJsZSBlLXZhbHVlIHRvIHVzZSBmb3IgZmlsdGVyaW5nLCBhcyBpdCBtaWdodCBiZSB3b3J0aHdoaWxlIHRvIHRlc3QgZXZlbiBsb3dlciBlLXZhbHVlIHRocmVzaG9sZHMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiMgQ2l0YXRpb25zCg==