echo $PATH
/home/shared/8TB_HDD_02/mattgeorgephd/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/usr/lib/rstudio-server/bin/postback:/usr/lib/rstudio-server/bin/postback:/usr/lib/rstudio-server/bin/postback:/usr/lib/rstudio-server/bin/postback:/usr/local/go/bin

Get sockeye salmon assembly: https://www.ncbi.nlm.nih.gov/assembly/GCF_006149115.2


cd sequences/

wget -r \
--no-directories --no-parent \
-P . \
-A GCF_006149115.2_Oner_1.1_genomic.gff https://gannet.fish.washington.edu/panopea/berdahl-sockeye-salmon/genome/ \
--no-check-certificate

wget -r \
--no-directories --no-parent \
-P . \
-A GCF_006149115.2_Oner_1.1_genomic.fna https://gannet.fish.washington.edu/panopea/berdahl-sockeye-salmon/genome/ \
--no-check-certificate
head sequences/GCF_006149115.2_Oner_1.1_genomic.fna

Calculate chromosome lengths

awk '$0 ~ ">" {print c; c=0;printf substr($0,2,14) "\t"; } $0 !~ ">" {c+=length($0);} END { print c; }' \
sequences/GCF_006149115.2_Oner_1.1_genomic.fna \
| sed 's/Cr//g' \
| awk '{print $1"\t"$3}' \
| tail -n +2 \
> sequences/GCF_006149115.2_Oner_1.1_genomic-sequence-lengths.txt

head sequences/GCF_006149115.2_Oner_1.1_genomic-sequence-lengths.txt

Generate mRNA feature track from genomic_sequence

head sequences/GCF_006149115.2_Oner_1.1_genomic.gff

grep -e "Gnomon mRNA" -e "RefSeq    mRNA" -e "cmsearch  mRNA" -e "tRNAscan-SE   mRNA" \
sequences/GCF_006149115.2_Oner_1.1_genomic.gff \
| /home/shared/bedtools2/bin/sortBed \
-faidx sequences/GCF_006149115.2_Oner_1.1_genomic-sequence-lengths.txt \
> sequences/GCF_006149115.2_Oner_1.1_mRNA.gff

head sequences/GCF_006149115.2_Oner_1.1_mRNA.gff

Download tag-seq data

mkdir raw-data/
cd raw-data/

wget -r \
--no-directories --no-parent \
-P . \
-A .fastq.gz https://gannet.fish.washington.edu/panopea/berdahl-sockeye-salmon/20220714-tagseq/ \
--no-check-certificate

unzip .fastq.gz files

cd raw-data/
gunzip *.fastq.gz

Run fastqc on untrimmed files

mkdir fastqc/
mkdir fastqc/untrimmed/

/home/shared/FastQC/fastqc \
/home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/raw-data/*.fastq \
--outdir /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/fastqc/untrimmed/ \
--quiet

Run multiqc

eval "$(/opt/anaconda/anaconda3/bin/conda shell.bash hook)"
conda activate

cd fastqc/untrimmed/

multiqc .

trim adapter sequences

mkdir trim-fastq/
cd /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/raw-data/

for F in *.fastq
do
#strip .fastq and directory structure from each file, then
# add suffice .trim to create output name for each file
results_file="$(basename -a $F)"

# -u 15 : hard trim first 15 bp
# -m 20 : minimum length cutoff

# run cutadapt on each file
/home/shared/8TB_HDD_02/mattgeorgephd/.local/bin/cutadapt $F -a A{8} -a G{8} -a AGATCGG -u 15 -m 20 -o \
/home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/$results_file
done

concatenate fastq files by lane

mkdir merged-fastq
cd trim-fastq/

printf '%s\n' *.fastq | sed 's/^\([^_]*_[^_]*\).*/\1/' | uniq |
while read prefix; do
    cat "$prefix"*R1*.fastq >"${prefix}_R1.fastq"
    # cat "$prefix"*R2*.fastq >"${prefix}_R2.fastq" # include if more than one run
done

# I moved files to merged-fastq
   13633444 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/06C_S90_L002_R1_001.fastq
   12176996 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/07C_S91_L001_R1_001.fastq
   12257640 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/07C_S91_L002_R1_001.fastq
   13565896 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/08C_S92_L001_R1_001.fastq
   13802904 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/08C_S92_L002_R1_001.fastq
   12848700 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/09C_S93_L001_R1_001.fastq
   12867400 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/09C_S93_L002_R1_001.fastq
   16338984 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/10C_S94_L001_R1_001.fastq
   16255028 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/10C_S94_L002_R1_001.fastq
   13960488 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/11C_S95_L001_R1_001.fastq
   14004052 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/11C_S95_L002_R1_001.fastq
   13511560 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/12C_S96_L001_R1_001.fastq
   13632664 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/12C_S96_L002_R1_001.fastq
   16882648 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/13C_S97_L001_R1_001.fastq
   17132804 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/13C_S97_L002_R1_001.fastq
   12819864 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/14C_S98_L001_R1_001.fastq
   12936660 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/14C_S98_L002_R1_001.fastq
   11411964 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/15C_S99_L001_R1_001.fastq
   11686036 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/15C_S99_L002_R1_001.fastq
   13981132 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/16C_S100_L001_R1_001.fastq
   14065312 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/16C_S100_L002_R1_001.fastq
    7421516 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/17C_S101_L001_R1_001.fastq
    7426192 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/17C_S101_L002_R1_001.fastq
   12192192 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/18C_S102_L001_R1_001.fastq
   12214596 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/18C_S102_L002_R1_001.fastq
   15393748 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/19C_S103_L001_R1_001.fastq
   15301248 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/19C_S103_L002_R1_001.fastq
   15108256 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/20C_S104_L001_R1_001.fastq
   15209208 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/20C_S104_L002_R1_001.fastq
   17598696 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/21C_S105_L001_R1_001.fastq
   17535320 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/21C_S105_L002_R1_001.fastq
   13962128 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/22C_S106_L001_R1_001.fastq
   14009740 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/22C_S106_L002_R1_001.fastq
   12933164 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/23C_S107_L001_R1_001.fastq
   12891852 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/23C_S107_L002_R1_001.fastq
   16135348 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/24C_S108_L001_R1_001.fastq
   16095096 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/24C_S108_L002_R1_001.fastq
   12703556 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/25C_S109_L001_R1_001.fastq
   12788544 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/25C_S109_L002_R1_001.fastq
   13546676 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/26C_S110_L001_R1_001.fastq
   13454732 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/26C_S110_L002_R1_001.fastq
   12437512 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/27C_S111_L001_R1_001.fastq
   12485552 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/27C_S111_L002_R1_001.fastq
   15652616 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/28C_S112_L001_R1_001.fastq
   15813848 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/28C_S112_L002_R1_001.fastq
   12814088 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/29C_S113_L001_R1_001.fastq
   12823820 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/29C_S113_L002_R1_001.fastq
   13891748 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/30C_S114_L001_R1_001.fastq
   13811900 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/30C_S114_L002_R1_001.fastq
  804787096 total
   20772844 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/01C_S85_R1.fastq
   25282884 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/02C_S86_R1.fastq
   23364480 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/03C_S87_R1.fastq
   27827996 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/04C_S88_R1.fastq
   20571996 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/05C_S89_R1.fastq
   27175272 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/06C_S90_R1.fastq
   24434636 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/07C_S91_R1.fastq
   27368800 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/08C_S92_R1.fastq
   25716100 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/09C_S93_R1.fastq
   32594012 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/10C_S94_R1.fastq
   27964540 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/11C_S95_R1.fastq
   27144224 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/12C_S96_R1.fastq
   34015452 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/13C_S97_R1.fastq
   25756524 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/14C_S98_R1.fastq
   23098000 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/15C_S99_R1.fastq
   28046444 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/16C_S100_R1.fastq
   14847708 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/17C_S101_R1.fastq
   24406788 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/18C_S102_R1.fastq
   30694996 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/19C_S103_R1.fastq
   30317464 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/20C_S104_R1.fastq
   35134016 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/21C_S105_R1.fastq
   27971868 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/22C_S106_R1.fastq
   25825016 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/23C_S107_R1.fastq
   32230444 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/24C_S108_R1.fastq
   25492100 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/25C_S109_R1.fastq
   27001408 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/26C_S110_R1.fastq
   24923064 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/27C_S111_R1.fastq
   31466464 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/28C_S112_R1.fastq
   25637908 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/29C_S113_R1.fastq
   27703648 /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/30C_S114_R1.fastq
  804787096 total
# Reads remaining after trimming and filtering (%)
1472899016/1582147952*100

Run fastqc on trimmed files

mkdir fastqc/
mkdir fastqc/trimmed/

/home/shared/FastQC/fastqc \
/home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/*.fastq \
--outdir /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/fastqc/trimmed/ \
--quiet

Run multiqc on trimmed files

eval "$(/opt/anaconda/anaconda3/bin/conda shell.bash hook)"
conda activate

cd fastqc/trimmed/

multiqc .

create bowtie2 index for cgigas genome (took 8 min on Raven)

/home/shared/bowtie2-2.4.4-linux-x86_64/bowtie2-build \
/home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/sequences/rna.fna \
/home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/sequences/GENOME.fa

Run bowtie on trimmed reads, pre-set option= –sensitive-local


mkdir bowtie_sam/
cd bowtie_sam/

for file in /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/trim-fastq/*.fastq
do
results_file="$(basename -a $file).sam"

# run Bowtie2 on each file
/home/shared/bowtie2-2.4.4-linux-x86_64/bowtie2 \
--local \
-x /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/sequences/GENOME.fa \
--sensitive-local \
--threads 48 \
--no-unal \
-k 5 \
-U $file \
-S $results_file; \
done >> bowtieout.txt 2>&1
# check % alignment from Bowtie

grep "overall alignment rate" /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/bowtie_sam/bowtieout.txt

# average alignment rate = 65.91 +/- 4.87 sd

Convert .sam files to .bam files, create bam indices

mkdir bowtie_bam/
cd bowtie_bam/

for file in /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/bowtie_sam/*.sam
do
results_file="$(basename -a $file)_sorted.bam"
/home/shared/samtools-1.12/samtools view -b $file | /home/shared/samtools-1.12/samtools sort -o /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/bowtie_bam/$results_file
done

create hisat2 index for cgigas genome (took 31 min on Raven)

  Sorting block time: 00:02:35
Returning block of 253935055 for bucket 4
Getting block 5 of 8
  Reserving size (347087862) for bucket 5
  Calculating Z arrays for bucket 5
  Entering block accumulator loop for bucket 5:
  bucket 5: 10%
  bucket 5: 20%
  bucket 5: 30%
  bucket 5: 40%
  bucket 5: 50%
  bucket 5: 60%
  bucket 5: 70%
  bucket 5: 80%
  bucket 5: 90%
  bucket 5: 100%
  Sorting block of length 262480610 for bucket 5
  (Using difference cover)
  Sorting block time: 00:02:41
Returning block of 262480611 for bucket 5
Getting block 6 of 8
  Reserving size (347087862) for bucket 6
  Calculating Z arrays for bucket 6
  Entering block accumulator loop for bucket 6:
  bucket 6: 10%
  bucket 6: 20%
  bucket 6: 30%
  bucket 6: 40%
  bucket 6: 50%
  bucket 6: 60%
  bucket 6: 70%
  bucket 6: 80%
  bucket 6: 90%
  bucket 6: 100%
  Sorting block of length 261295901 for bucket 6
  (Using difference cover)
  Sorting block time: 00:02:33
Returning block of 261295902 for bucket 6
Getting block 7 of 8
  Reserving size (347087862) for bucket 7
  Calculating Z arrays for bucket 7
  Entering block accumulator loop for bucket 7:
  bucket 7: 10%
  bucket 7: 20%
  bucket 7: 30%
  bucket 7: 40%
  bucket 7: 50%
  bucket 7: 60%
  bucket 7: 70%
  bucket 7: 80%
  bucket 7: 90%
  bucket 7: 100%
  Sorting block of length 300704932 for bucket 7
  (Using difference cover)
  Sorting block time: 00:02:58
Returning block of 300704933 for bucket 7
Getting block 8 of 8
  Reserving size (347087862) for bucket 8
  Calculating Z arrays for bucket 8
  Entering block accumulator loop for bucket 8:
  bucket 8: 10%
  bucket 8: 20%
  bucket 8: 30%
  bucket 8: 40%
  bucket 8: 50%
  bucket 8: 60%
  bucket 8: 70%
  bucket 8: 80%
  bucket 8: 90%
  bucket 8: 100%
  Sorting block of length 139674187 for bucket 8
  (Using difference cover)
  Sorting block time: 00:01:20
Returning block of 139674188 for bucket 8
Exited GFM loop
fchr[A]: 0
fchr[C]: 524334746
fchr[G]: 925667240
fchr[T]: 1327076578
fchr[$]: 1851135262
Exiting GFM::buildToDisk()
Returning from initFromVector
Wrote 627029974 bytes to primary GFM file: /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/sequences/hisat2_genome_index.fa.1.ht2
Wrote 462783820 bytes to secondary GFM file: /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/sequences/hisat2_genome_index.fa.2.ht2
Re-opening _in1 and _in2 as input streams
Returning from GFM constructor
Returning from initFromVector
Wrote 1070141415 bytes to primary GFM file: /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/sequences/hisat2_genome_index.fa.5.ht2
Wrote 470234864 bytes to secondary GFM file: /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/sequences/hisat2_genome_index.fa.6.ht2
Re-opening _in5 and _in5 as input streams
Returning from HGFM constructor
Headers:
    len: 1851135262
    gbwtLen: 1851135263
    nodes: 1851135263
    sz: 462783816
    gbwtSz: 462783816
    lineRate: 6
    offRate: 4
    offMask: 0xfffffff0
    ftabChars: 10
    eftabLen: 0
    eftabSz: 0
    ftabLen: 1048577
    ftabSz: 4194308
    offsLen: 115695954
    offsSz: 462783816
    lineSz: 64
    sideSz: 64
    sideGbwtSz: 48
    sideGbwtLen: 192
    numSides: 9641330
    numLines: 9641330
    gbwtTotLen: 617045120
    gbwtTotSz: 617045120
    reverse: 0
    linearFM: Yes
Total time for call to driver() for forward index: 00:31:06

Run hisat2 on trimmed reads


mkdir hisat2_sam/
mkdir hisat2_bam/
cd /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/merged-fastq/

# This script exports alignments as bam files
# sorts the bam file because Stringtie takes a sorted file for input (--dta)
# removes the sam file because it is no longer needed
array=($(ls *.fastq)) # call the sequences - make an array to align
for i in ${array[@]}; do
       sample_name=`echo $i| awk -F [.] '{print $1}'`
    /home/shared/hisat2-2.2.1/hisat2 \
      -p 16 \
      --dta \
      -x /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/sequences/hisat2_genome_index.fa \
      -U ${i} \
      -S /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_sam/${sample_name}.sam 
      
      /home/shared/samtools-1.12/samtools sort -@ 8 -o                /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/${sample_name}.bam /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_sam/${sample_name}.sam
            echo "${i} bam-ified!"
        # rm ${sample_name}.sam
done >> hisat2out.txt 2>&1
mkdir: cannot create directory ‘hisat2_bam/’: File exists
# check % alignment from hisat2

grep "overall alignment rate" sequences/hisat2out.txt

# average alignment rate = 50.14 +/- 5.81 sd (w/o hard trim of first 15 bp)
# average alignment rate = 56.34 +/- 5.27 sd (w/ hard trim of first 15 bp)
90.97% overall alignment rate
89.06% overall alignment rate
90.28% overall alignment rate
89.45% overall alignment rate
81.33% overall alignment rate
91.22% overall alignment rate
90.19% overall alignment rate
89.83% overall alignment rate
85.35% overall alignment rate
89.24% overall alignment rate
90.51% overall alignment rate
87.71% overall alignment rate
87.30% overall alignment rate
88.49% overall alignment rate
89.23% overall alignment rate
89.60% overall alignment rate
85.05% overall alignment rate
90.24% overall alignment rate
88.40% overall alignment rate
89.49% overall alignment rate
89.41% overall alignment rate
83.36% overall alignment rate
89.58% overall alignment rate
89.25% overall alignment rate
88.93% overall alignment rate
87.87% overall alignment rate
89.55% overall alignment rate
89.55% overall alignment rate
89.82% overall alignment rate
89.42% overall alignment rate

Convert .sam files to .bam files, create bam indices

mkdir hisat2_bam/
cd hisat2_bam/

for file in /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_sam/*.sam
do
results_file="$(basename -a $file)_sorted.bam"
/home/shared/samtools-1.12/samtools view -b $file | /home/shared/samtools-1.12/samtools sort -o /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/$results_file
done

Assemble hisat2 alignments w/ stringtie2 using mRNA genome feature track

StringTie assembly for seq file /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/06C_S90_R1.bam Mon Aug 8 17:16:17 PDT 2022
StringTie assembly for seq file /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/07C_S91_R1.bam Mon Aug 8 17:16:29 PDT 2022
StringTie assembly for seq file /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/08C_S92_R1.bam Mon Aug 8 17:16:43 PDT 2022
StringTie assembly for seq file /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/09C_S93_R1.bam Mon Aug 8 17:16:57 PDT 2022
StringTie assembly for seq file /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/10C_S94_R1.bam Mon Aug 8 17:17:13 PDT 2022
StringTie assembly for seq file /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/11C_S95_R1.bam Mon Aug 8 17:17:26 PDT 2022
StringTie assembly for seq file /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/12C_S96_R1.bam Mon Aug 8 17:17:40 PDT 2022
StringTie assembly for seq file /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/13C_S97_R1.bam Mon Aug 8 17:17:57 PDT 2022
StringTie assembly for seq file /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/14C_S98_R1.bam Mon Aug 8 17:18:12 PDT 2022
StringTie assembly for seq file /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/15C_S99_R1.bam Mon Aug 8 17:18:25 PDT 2022
StringTie assembly for seq file /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/16C_S100_R1.bam Mon Aug 8 17:18:40 PDT 2022
StringTie assembly for seq file /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/17C_S101_R1.bam Mon Aug 8 17:18:49 PDT 2022
StringTie assembly for seq file /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/18C_S102_R1.bam Mon Aug 8 17:19:02 PDT 2022
StringTie assembly for seq file /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/19C_S103_R1.bam Mon Aug 8 17:19:17 PDT 2022
StringTie assembly for seq file /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/20C_S104_R1.bam Mon Aug 8 17:19:33 PDT 2022
StringTie assembly for seq file /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/21C_S105_R1.bam Mon Aug 8 17:19:50 PDT 2022
StringTie assembly for seq file /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/22C_S106_R1.bam Mon Aug 8 17:20:04 PDT 2022
StringTie assembly for seq file /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/23C_S107_R1.bam Mon Aug 8 17:20:19 PDT 2022
StringTie assembly for seq file /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/24C_S108_R1.bam Mon Aug 8 17:20:35 PDT 2022
StringTie assembly for seq file /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/25C_S109_R1.bam Mon Aug 8 17:20:49 PDT 2022
StringTie assembly for seq file /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/26C_S110_R1.bam Mon Aug 8 17:21:03 PDT 2022
StringTie assembly for seq file /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/27C_S111_R1.bam Mon Aug 8 17:21:17 PDT 2022
StringTie assembly for seq file /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/28C_S112_R1.bam Mon Aug 8 17:21:33 PDT 2022
StringTie assembly for seq file /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/29C_S113_R1.bam Mon Aug 8 17:21:47 PDT 2022
StringTie assembly for seq file /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam/30C_S114_R1.bam Mon Aug 8 17:22:02 PDT 2022
StringTie assembly COMPLETE, starting assembly analysis Mon Aug 8 17:22:02 PDT 2022

cd /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/hisat2_bam

# make gtf list file (needed for stringtie merge function)
for filename in *.gtf; do 
  echo $PWD/$filename; 
  done > gtf_list.txt

# make listGTF file (needed for count matrix), two columns w/ sample ID
for filename in *.gtf; do 
  echo $filename $PWD/$filename; 
  done > listGTF.txt

# merge GTFs into a single file
/home/shared/stringtie-2.2.1.Linux_x86_64/stringtie \
  --merge \
  -p 48 \
    -G /home/shared/8TB_HDD_02/mattgeorgephd/berdahl-sockeye-salmon/sequences/GCF_006149115.2_Oner_1.1_mRNA.gff \
    -o onerka_merged.gtf gtf_list.txt #Merge GTFs to form $

echo "Stringtie merge complete" $(date)

# Compute accuracy of gff
# gffcompare -r ../../../refs/Panopea-generosa-v1.0.a4.mRNA_SJG.gff3 -G -o merged Pgenerosa_merged.gtf #Compute the accuracy and pre$
# echo "GFFcompare complete, Starting gene count matrix assembly..." $(date)

# Compile gene count matrix from GTFs
/home/shared/stringtie-2.2.1.Linux_x86_64/prepDE.py \
  -g onerka_gene_count_matrix.csv \
  -i listGTF.txt #Compile the gene count matrix

echo "Gene count matrix compiled." $(date)
Stringtie merge complete Mon Aug 8 17:25:55 PDT 2022
Gene count matrix compiled. Mon Aug 8 17:26:09 PDT 2022
LS0tCnRpdGxlOiAiUHJvY2VzcyB0YWdzZXEgZGF0YSAtIEJlcmRhaGwgc2FsbW9uIHNhbXBsZXMiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCgpgYGB7YmFzaCwgZW5naW5lLm9wdHM9Jy1sJ30KZWNobyAkUEFUSApgYGAKIyBHZXQgc29ja2V5ZSBzYWxtb24gYXNzZW1ibHk6IGh0dHBzOi8vd3d3Lm5jYmkubmxtLm5paC5nb3YvYXNzZW1ibHkvR0NGXzAwNjE0OTExNS4yCmBgYHtiYXNofQoKY2Qgc2VxdWVuY2VzLwoKd2dldCAtciBcCi0tbm8tZGlyZWN0b3JpZXMgLS1uby1wYXJlbnQgXAotUCAuIFwKLUEgR0NGXzAwNjE0OTExNS4yX09uZXJfMS4xX2dlbm9taWMuZ2ZmIGh0dHBzOi8vZ2FubmV0LmZpc2gud2FzaGluZ3Rvbi5lZHUvcGFub3BlYS9iZXJkYWhsLXNvY2tleWUtc2FsbW9uL2dlbm9tZS8gXAotLW5vLWNoZWNrLWNlcnRpZmljYXRlCgp3Z2V0IC1yIFwKLS1uby1kaXJlY3RvcmllcyAtLW5vLXBhcmVudCBcCi1QIC4gXAotQSBHQ0ZfMDA2MTQ5MTE1LjJfT25lcl8xLjFfZ2Vub21pYy5mbmEgaHR0cHM6Ly9nYW5uZXQuZmlzaC53YXNoaW5ndG9uLmVkdS9wYW5vcGVhL2JlcmRhaGwtc29ja2V5ZS1zYWxtb24vZ2Vub21lLyBcCi0tbm8tY2hlY2stY2VydGlmaWNhdGUKCmBgYAoKYGBge2Jhc2h9CmhlYWQgc2VxdWVuY2VzL0dDRl8wMDYxNDkxMTUuMl9PbmVyXzEuMV9nZW5vbWljLmZuYQpgYGAKCiMgQ2FsY3VsYXRlIGNocm9tb3NvbWUgbGVuZ3RocwpgYGB7YmFzaH0KYXdrICckMCB+ICI+IiB7cHJpbnQgYzsgYz0wO3ByaW50ZiBzdWJzdHIoJDAsMiwxNCkgIlx0IjsgfSAkMCAhfiAiPiIge2MrPWxlbmd0aCgkMCk7fSBFTkQgeyBwcmludCBjOyB9JyBcCnNlcXVlbmNlcy9HQ0ZfMDA2MTQ5MTE1LjJfT25lcl8xLjFfZ2Vub21pYy5mbmEgXAp8IHNlZCAncy9Dci8vZycgXAp8IGF3ayAne3ByaW50ICQxIlx0IiQzfScgXAp8IHRhaWwgLW4gKzIgXAo+IHNlcXVlbmNlcy9HQ0ZfMDA2MTQ5MTE1LjJfT25lcl8xLjFfZ2Vub21pYy1zZXF1ZW5jZS1sZW5ndGhzLnR4dAoKaGVhZCBzZXF1ZW5jZXMvR0NGXzAwNjE0OTExNS4yX09uZXJfMS4xX2dlbm9taWMtc2VxdWVuY2UtbGVuZ3Rocy50eHQKYGBgCgojIEdlbmVyYXRlIG1STkEgZmVhdHVyZSB0cmFjayBmcm9tIGdlbm9taWNfc2VxdWVuY2UKYGBge2Jhc2h9CmhlYWQgc2VxdWVuY2VzL0dDRl8wMDYxNDkxMTUuMl9PbmVyXzEuMV9nZW5vbWljLmdmZgoKZ3JlcCAtZSAiR25vbW9uCW1STkEiIC1lICJSZWZTZXEJbVJOQSIgLWUgImNtc2VhcmNoCW1STkEiIC1lICJ0Uk5Bc2Nhbi1TRQltUk5BIiBcCnNlcXVlbmNlcy9HQ0ZfMDA2MTQ5MTE1LjJfT25lcl8xLjFfZ2Vub21pYy5nZmYgXAp8IC9ob21lL3NoYXJlZC9iZWR0b29sczIvYmluL3NvcnRCZWQgXAotZmFpZHggc2VxdWVuY2VzL0dDRl8wMDYxNDkxMTUuMl9PbmVyXzEuMV9nZW5vbWljLXNlcXVlbmNlLWxlbmd0aHMudHh0IFwKPiBzZXF1ZW5jZXMvR0NGXzAwNjE0OTExNS4yX09uZXJfMS4xX21STkEuZ2ZmCgpoZWFkIHNlcXVlbmNlcy9HQ0ZfMDA2MTQ5MTE1LjJfT25lcl8xLjFfbVJOQS5nZmYKYGBgCgojIERvd25sb2FkIHRhZy1zZXEgZGF0YQpgYGB7YmFzaH0KbWtkaXIgcmF3LWRhdGEvCmNkIHJhdy1kYXRhLwoKd2dldCAtciBcCi0tbm8tZGlyZWN0b3JpZXMgLS1uby1wYXJlbnQgXAotUCAuIFwKLUEgLmZhc3RxLmd6IGh0dHBzOi8vZ2FubmV0LmZpc2gud2FzaGluZ3Rvbi5lZHUvcGFub3BlYS9iZXJkYWhsLXNvY2tleWUtc2FsbW9uLzIwMjIwNzE0LXRhZ3NlcS8gXAotLW5vLWNoZWNrLWNlcnRpZmljYXRlCmBgYAoKIyB1bnppcCAuZmFzdHEuZ3ogZmlsZXMKYGBge2Jhc2h9CmNkIHJhdy1kYXRhLwpndW56aXAgKi5mYXN0cS5negpgYGAKCiMgUnVuIGZhc3RxYyBvbiB1bnRyaW1tZWQgZmlsZXMKYGBge2Jhc2h9Cm1rZGlyIGZhc3RxYy8KbWtkaXIgZmFzdHFjL3VudHJpbW1lZC8KCi9ob21lL3NoYXJlZC9GYXN0UUMvZmFzdHFjIFwKL2hvbWUvc2hhcmVkLzhUQl9IRERfMDIvbWF0dGdlb3JnZXBoZC9iZXJkYWhsLXNvY2tleWUtc2FsbW9uL3Jhdy1kYXRhLyouZmFzdHEgXAotLW91dGRpciAvaG9tZS9zaGFyZWQvOFRCX0hERF8wMi9tYXR0Z2VvcmdlcGhkL2JlcmRhaGwtc29ja2V5ZS1zYWxtb24vZmFzdHFjL3VudHJpbW1lZC8gXAotLXF1aWV0CgpgYGAKCiMgUnVuIG11bHRpcWMKYGBge2Jhc2h9CmV2YWwgIiQoL29wdC9hbmFjb25kYS9hbmFjb25kYTMvYmluL2NvbmRhIHNoZWxsLmJhc2ggaG9vaykiCmNvbmRhIGFjdGl2YXRlCgpjZCBmYXN0cWMvdW50cmltbWVkLwoKbXVsdGlxYyAuCmBgYAoKIyB0cmltIGFkYXB0ZXIgc2VxdWVuY2VzCmBgYHtiYXNofQpta2RpciB0cmltLWZhc3RxLwpjZCAvaG9tZS9zaGFyZWQvOFRCX0hERF8wMi9tYXR0Z2VvcmdlcGhkL2JlcmRhaGwtc29ja2V5ZS1zYWxtb24vcmF3LWRhdGEvCgpmb3IgRiBpbiAqLmZhc3RxCmRvCiNzdHJpcCAuZmFzdHEgYW5kIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZnJvbSBlYWNoIGZpbGUsIHRoZW4KIyBhZGQgc3VmZmljZSAudHJpbSB0byBjcmVhdGUgb3V0cHV0IG5hbWUgZm9yIGVhY2ggZmlsZQpyZXN1bHRzX2ZpbGU9IiQoYmFzZW5hbWUgLWEgJEYpIgoKIyAtdSAxNSA6IGhhcmQgdHJpbSBmaXJzdCAxNSBicAojIC1tIDIwIDogbWluaW11bSBsZW5ndGggY3V0b2ZmCgojIHJ1biBjdXRhZGFwdCBvbiBlYWNoIGZpbGUKL2hvbWUvc2hhcmVkLzhUQl9IRERfMDIvbWF0dGdlb3JnZXBoZC8ubG9jYWwvYmluL2N1dGFkYXB0ICRGIC1hIEF7OH0gLWEgR3s4fSAtYSBBR0FUQ0dHIC11IDE1IC1tIDIwIC1vIFwKL2hvbWUvc2hhcmVkLzhUQl9IRERfMDIvbWF0dGdlb3JnZXBoZC9iZXJkYWhsLXNvY2tleWUtc2FsbW9uL3RyaW0tZmFzdHEvJHJlc3VsdHNfZmlsZQpkb25lCmBgYAoKIyBjb25jYXRlbmF0ZSBmYXN0cSBmaWxlcyBieSBsYW5lCmBgYHtiYXNofQpta2RpciBtZXJnZWQtZmFzdHEKY2QgdHJpbS1mYXN0cS8KCnByaW50ZiAnJXNcbicgKi5mYXN0cSB8IHNlZCAncy9eXChbXl9dKl9bXl9dKlwpLiovXDEvJyB8IHVuaXEgfAp3aGlsZSByZWFkIHByZWZpeDsgZG8KICAgIGNhdCAiJHByZWZpeCIqUjEqLmZhc3RxID4iJHtwcmVmaXh9X1IxLmZhc3RxIgogICAgIyBjYXQgIiRwcmVmaXgiKlIyKi5mYXN0cSA+IiR7cHJlZml4fV9SMi5mYXN0cSIgIyBpbmNsdWRlIGlmIG1vcmUgdGhhbiBvbmUgcnVuCmRvbmUKCiMgSSBtb3ZlZCBmaWxlcyB0byBtZXJnZWQtZmFzdHEKYGBgCgpgYGB7YmFzaH0KCiMgQmVmb3JlIHRyaW1taW5nCndjIC1sIC9ob21lL3NoYXJlZC84VEJfSEREXzAyL21hdHRnZW9yZ2VwaGQvYmVyZGFobC1zb2NrZXllLXNhbG1vbi90cmltLWZhc3RxLyouZmFzdHEKCiMgQWZ0ZXIgdHJpbW1pbmcKd2MgLWwgL2hvbWUvc2hhcmVkLzhUQl9IRERfMDIvbWF0dGdlb3JnZXBoZC9iZXJkYWhsLXNvY2tleWUtc2FsbW9uL21lcmdlZC1mYXN0cS8qLmZhc3RxCgpgYGAKCmBgYHtyfQojIFJlYWRzIHJlbWFpbmluZyBhZnRlciB0cmltbWluZyBhbmQgZmlsdGVyaW5nICglKQoxNDcyODk5MDE2LzE1ODIxNDc5NTIqMTAwCmBgYAoKIyBSdW4gZmFzdHFjIG9uIHRyaW1tZWQgZmlsZXMKYGBge2Jhc2h9Cm1rZGlyIGZhc3RxYy8KbWtkaXIgZmFzdHFjL3RyaW1tZWQvCgovaG9tZS9zaGFyZWQvRmFzdFFDL2Zhc3RxYyBcCi9ob21lL3NoYXJlZC84VEJfSEREXzAyL21hdHRnZW9yZ2VwaGQvYmVyZGFobC1zb2NrZXllLXNhbG1vbi9tZXJnZWQtZmFzdHEvKi5mYXN0cSBcCi0tb3V0ZGlyIC9ob21lL3NoYXJlZC84VEJfSEREXzAyL21hdHRnZW9yZ2VwaGQvYmVyZGFobC1zb2NrZXllLXNhbG1vbi9mYXN0cWMvdHJpbW1lZC8gXAotLXF1aWV0CmBgYAoKIyBSdW4gbXVsdGlxYyBvbiB0cmltbWVkIGZpbGVzCmBgYHtiYXNofQpldmFsICIkKC9vcHQvYW5hY29uZGEvYW5hY29uZGEzL2Jpbi9jb25kYSBzaGVsbC5iYXNoIGhvb2spIgpjb25kYSBhY3RpdmF0ZQoKY2QgZmFzdHFjL3RyaW1tZWQvCgptdWx0aXFjIC4KYGBgCgojIGNyZWF0ZSBib3d0aWUyIGluZGV4IGZvciBjZ2lnYXMgZ2Vub21lICh0b29rIDggbWluIG9uIFJhdmVuKQpgYGB7YmFzaH0KL2hvbWUvc2hhcmVkL2Jvd3RpZTItMi40LjQtbGludXgteDg2XzY0L2Jvd3RpZTItYnVpbGQgXAovaG9tZS9zaGFyZWQvOFRCX0hERF8wMi9tYXR0Z2VvcmdlcGhkL2JlcmRhaGwtc29ja2V5ZS1zYWxtb24vc2VxdWVuY2VzL3JuYS5mbmEgXAovaG9tZS9zaGFyZWQvOFRCX0hERF8wMi9tYXR0Z2VvcmdlcGhkL2JlcmRhaGwtc29ja2V5ZS1zYWxtb24vc2VxdWVuY2VzL0dFTk9NRS5mYQpgYGAKCiMgUnVuIGJvd3RpZSBvbiB0cmltbWVkIHJlYWRzLCBwcmUtc2V0IG9wdGlvbj0gLS1zZW5zaXRpdmUtbG9jYWwKYGBge2Jhc2h9Cgpta2RpciBib3d0aWVfc2FtLwpjZCBib3d0aWVfc2FtLwoKZm9yIGZpbGUgaW4gL2hvbWUvc2hhcmVkLzhUQl9IRERfMDIvbWF0dGdlb3JnZXBoZC9iZXJkYWhsLXNvY2tleWUtc2FsbW9uL3RyaW0tZmFzdHEvKi5mYXN0cQpkbwpyZXN1bHRzX2ZpbGU9IiQoYmFzZW5hbWUgLWEgJGZpbGUpLnNhbSIKCiMgcnVuIEJvd3RpZTIgb24gZWFjaCBmaWxlCi9ob21lL3NoYXJlZC9ib3d0aWUyLTIuNC40LWxpbnV4LXg4Nl82NC9ib3d0aWUyIFwKLS1sb2NhbCBcCi14IC9ob21lL3NoYXJlZC84VEJfSEREXzAyL21hdHRnZW9yZ2VwaGQvYmVyZGFobC1zb2NrZXllLXNhbG1vbi9zZXF1ZW5jZXMvR0VOT01FLmZhIFwKLS1zZW5zaXRpdmUtbG9jYWwgXAotLXRocmVhZHMgNDggXAotLW5vLXVuYWwgXAotayA1IFwKLVUgJGZpbGUgXAotUyAkcmVzdWx0c19maWxlOyBcCmRvbmUgPj4gYm93dGllb3V0LnR4dCAyPiYxCgoKYGBgCgpgYGB7YmFzaH0KIyBjaGVjayAlIGFsaWdubWVudCBmcm9tIEJvd3RpZQoKZ3JlcCAib3ZlcmFsbCBhbGlnbm1lbnQgcmF0ZSIgL2hvbWUvc2hhcmVkLzhUQl9IRERfMDIvbWF0dGdlb3JnZXBoZC9iZXJkYWhsLXNvY2tleWUtc2FsbW9uL2Jvd3RpZV9zYW0vYm93dGllb3V0LnR4dAoKIyBhdmVyYWdlIGFsaWdubWVudCByYXRlID0gNjUuOTEgKy8tIDQuODcgc2QKCmBgYAoKIyBDb252ZXJ0IC5zYW0gZmlsZXMgdG8gLmJhbSBmaWxlcywgY3JlYXRlIGJhbSBpbmRpY2VzCmBgYHtiYXNofQpta2RpciBib3d0aWVfYmFtLwpjZCBib3d0aWVfYmFtLwoKZm9yIGZpbGUgaW4gL2hvbWUvc2hhcmVkLzhUQl9IRERfMDIvbWF0dGdlb3JnZXBoZC9iZXJkYWhsLXNvY2tleWUtc2FsbW9uL2Jvd3RpZV9zYW0vKi5zYW0KZG8KcmVzdWx0c19maWxlPSIkKGJhc2VuYW1lIC1hICRmaWxlKV9zb3J0ZWQuYmFtIgovaG9tZS9zaGFyZWQvc2FtdG9vbHMtMS4xMi9zYW10b29scyB2aWV3IC1iICRmaWxlIHwgL2hvbWUvc2hhcmVkL3NhbXRvb2xzLTEuMTIvc2FtdG9vbHMgc29ydCAtbyAvaG9tZS9zaGFyZWQvOFRCX0hERF8wMi9tYXR0Z2VvcmdlcGhkL2JlcmRhaGwtc29ja2V5ZS1zYWxtb24vYm93dGllX2JhbS8kcmVzdWx0c19maWxlCmRvbmUKCmBgYAoKIyBjcmVhdGUgaGlzYXQyIGluZGV4IGZvciBjZ2lnYXMgZ2Vub21lICh0b29rIDMxIG1pbiBvbiBSYXZlbikKYGBge2Jhc2h9Ci9ob21lL3NoYXJlZC9oaXNhdDItMi4yLjEvaGlzYXQyLWJ1aWxkIFwKLWYgL2hvbWUvc2hhcmVkLzhUQl9IRERfMDIvbWF0dGdlb3JnZXBoZC9iZXJkYWhsLXNvY2tleWUtc2FsbW9uL3NlcXVlbmNlcy9HQ0ZfMDA2MTQ5MTE1LjJfT25lcl8xLjFfZ2Vub21pYy5mbmEgL2hvbWUvc2hhcmVkLzhUQl9IRERfMDIvbWF0dGdlb3JnZXBoZC9iZXJkYWhsLXNvY2tleWUtc2FsbW9uL3NlcXVlbmNlcy9oaXNhdDJfZ2Vub21lX2luZGV4LmZhICMgY2FsbGVkIHRoZSByZWZlcmVuY2UgZ2Vub21lIChzY2FmZm9sZHMpCgpgYGAKCiMgUnVuIGhpc2F0MiBvbiB0cmltbWVkIHJlYWRzCmBgYHtiYXNofQoKbWtkaXIgaGlzYXQyX3NhbS8KbWtkaXIgaGlzYXQyX2JhbS8KY2QgL2hvbWUvc2hhcmVkLzhUQl9IRERfMDIvbWF0dGdlb3JnZXBoZC9iZXJkYWhsLXNvY2tleWUtc2FsbW9uL21lcmdlZC1mYXN0cS8KCiMgVGhpcyBzY3JpcHQgZXhwb3J0cyBhbGlnbm1lbnRzIGFzIGJhbSBmaWxlcwojIHNvcnRzIHRoZSBiYW0gZmlsZSBiZWNhdXNlIFN0cmluZ3RpZSB0YWtlcyBhIHNvcnRlZCBmaWxlIGZvciBpbnB1dCAoLS1kdGEpCiMgcmVtb3ZlcyB0aGUgc2FtIGZpbGUgYmVjYXVzZSBpdCBpcyBubyBsb25nZXIgbmVlZGVkCmFycmF5PSgkKGxzICouZmFzdHEpKSAjIGNhbGwgdGhlIHNlcXVlbmNlcyAtIG1ha2UgYW4gYXJyYXkgdG8gYWxpZ24KZm9yIGkgaW4gJHthcnJheVtAXX07IGRvCiAgICAgICBzYW1wbGVfbmFtZT1gZWNobyAkaXwgYXdrIC1GIFsuXSAne3ByaW50ICQxfSdgCgkvaG9tZS9zaGFyZWQvaGlzYXQyLTIuMi4xL2hpc2F0MiBcCgkgIC1wIDE2IFwKCSAgLS1kdGEgXAoJICAteCAvaG9tZS9zaGFyZWQvOFRCX0hERF8wMi9tYXR0Z2VvcmdlcGhkL2JlcmRhaGwtc29ja2V5ZS1zYWxtb24vc2VxdWVuY2VzL2hpc2F0Ml9nZW5vbWVfaW5kZXguZmEgXAoJICAtVSAke2l9IFwKCSAgLVMgL2hvbWUvc2hhcmVkLzhUQl9IRERfMDIvbWF0dGdlb3JnZXBoZC9iZXJkYWhsLXNvY2tleWUtc2FsbW9uL2hpc2F0Ml9zYW0vJHtzYW1wbGVfbmFtZX0uc2FtIAoJICAKCSAgL2hvbWUvc2hhcmVkL3NhbXRvb2xzLTEuMTIvc2FtdG9vbHMgc29ydCAtQCA4IC1vICAgICAgICAgICAgICAgIC9ob21lL3NoYXJlZC84VEJfSEREXzAyL21hdHRnZW9yZ2VwaGQvYmVyZGFobC1zb2NrZXllLXNhbG1vbi9oaXNhdDJfYmFtLyR7c2FtcGxlX25hbWV9LmJhbSAvaG9tZS9zaGFyZWQvOFRCX0hERF8wMi9tYXR0Z2VvcmdlcGhkL2JlcmRhaGwtc29ja2V5ZS1zYWxtb24vaGlzYXQyX3NhbS8ke3NhbXBsZV9uYW1lfS5zYW0KICAgIAkJZWNobyAiJHtpfSBiYW0taWZpZWQhIgogICAgICAgICMgcm0gJHtzYW1wbGVfbmFtZX0uc2FtCmRvbmUgPj4gaGlzYXQyb3V0LnR4dCAyPiYxCgpgYGAKCgpgYGB7YmFzaH0KIyBjaGVjayAlIGFsaWdubWVudCBmcm9tIGhpc2F0MgoKZ3JlcCAib3ZlcmFsbCBhbGlnbm1lbnQgcmF0ZSIgc2VxdWVuY2VzL2hpc2F0Mm91dC50eHQKCiMgMDgvMDgvMjAyMiAtIGF2ZXJhZ2UgYWxpZ25tZW50IHJhdGUgPSA4OC42NTYgKy8tIDIuMjEgc2QgKHcvIGhhcmQgdHJpbSBvZiBmaXJzdCAxNSBicCkKCmBgYAoKIyBDb252ZXJ0IC5zYW0gZmlsZXMgdG8gLmJhbSBmaWxlcywgY3JlYXRlIGJhbSBpbmRpY2VzCmBgYHtiYXNofQpta2RpciBoaXNhdDJfYmFtLwpjZCBoaXNhdDJfYmFtLwoKZm9yIGZpbGUgaW4gL2hvbWUvc2hhcmVkLzhUQl9IRERfMDIvbWF0dGdlb3JnZXBoZC9iZXJkYWhsLXNvY2tleWUtc2FsbW9uL2hpc2F0Ml9zYW0vKi5zYW0KZG8KcmVzdWx0c19maWxlPSIkKGJhc2VuYW1lIC1hICRmaWxlKV9zb3J0ZWQuYmFtIgovaG9tZS9zaGFyZWQvc2FtdG9vbHMtMS4xMi9zYW10b29scyB2aWV3IC1iICRmaWxlIHwgL2hvbWUvc2hhcmVkL3NhbXRvb2xzLTEuMTIvc2FtdG9vbHMgc29ydCAtbyAvaG9tZS9zaGFyZWQvOFRCX0hERF8wMi9tYXR0Z2VvcmdlcGhkL2JlcmRhaGwtc29ja2V5ZS1zYWxtb24vaGlzYXQyX2JhbS8kcmVzdWx0c19maWxlCmRvbmUKCmBgYAoKCiMgQXNzZW1ibGUgaGlzYXQyIGFsaWdubWVudHMgdy8gc3RyaW5ndGllMiB1c2luZyBtUk5BIGdlbm9tZSBmZWF0dXJlIHRyYWNrCmBgYHtiYXNofQphcnJheT0oJChscyAvaG9tZS9zaGFyZWQvOFRCX0hERF8wMi9tYXR0Z2VvcmdlcGhkL2JlcmRhaGwtc29ja2V5ZS1zYWxtb24vaGlzYXQyX2JhbS8qLmJhbSkpCgpmb3IgaSBpbiAke2FycmF5W0BdfTsgZG8KICAgICAgICBzYW1wbGVfbmFtZT1gZWNobyAkaXwgYXdrIC1GIFsuXSAne3ByaW50ICQxfSdgCgkgICAgICAvaG9tZS9zaGFyZWQvc3RyaW5ndGllLTIuMi4xLkxpbnV4X3g4Nl82NC9zdHJpbmd0aWUgXAoJICAgICAgLXAgNDggXAoJICAgICAgLWUgXAoJICAgICAgLUIgXAoJICAgICAgLUcgL2hvbWUvc2hhcmVkLzhUQl9IRERfMDIvbWF0dGdlb3JnZXBoZC9iZXJkYWhsLXNvY2tleWUtc2FsbW9uL3NlcXVlbmNlcy9HQ0ZfMDA2MTQ5MTE1LjJfT25lcl8xLjFfbVJOQS5nZmYgXAoJICAgICAgLUEgJHtzYW1wbGVfbmFtZX0uZ2VuZV9hYnVuZC50YWIgXAoJICAgICAgLW8gJHtzYW1wbGVfbmFtZX0uZ3RmICR7aX0gXAoKICAgICAgICBlY2hvICJTdHJpbmdUaWUgYXNzZW1ibHkgZm9yIHNlcSBmaWxlICR7aX0iICQoZGF0ZSkKZG9uZQoKZWNobyAiU3RyaW5nVGllIGFzc2VtYmx5IENPTVBMRVRFLCBzdGFydGluZyBhc3NlbWJseSBhbmFseXNpcyIgJChkYXRlKQoKIyAyMDIyMDYwNyAtIEkgY291bGQgbm90IGZpZ3VyZSBvdXQgaG93IHRvIGRlc2lnbmF0ZSB0aGUgb3V0cHV0LiBBbGwgb3V0cHV0cyBlbmRlZCB1cCBpbiBib3d0aWUgb3V0cHV0IGZvbGRlci4KCmBgYAoKYGBge2Jhc2h9CgpjZCAvaG9tZS9zaGFyZWQvOFRCX0hERF8wMi9tYXR0Z2VvcmdlcGhkL2JlcmRhaGwtc29ja2V5ZS1zYWxtb24vaGlzYXQyX2JhbQoKIyBtYWtlIGd0ZiBsaXN0IGZpbGUgKG5lZWRlZCBmb3Igc3RyaW5ndGllIG1lcmdlIGZ1bmN0aW9uKQpmb3IgZmlsZW5hbWUgaW4gKi5ndGY7IGRvIAogIGVjaG8gJFBXRC8kZmlsZW5hbWU7IAogIGRvbmUgPiBndGZfbGlzdC50eHQKCiMgbWFrZSBsaXN0R1RGIGZpbGUgKG5lZWRlZCBmb3IgY291bnQgbWF0cml4KSwgdHdvIGNvbHVtbnMgdy8gc2FtcGxlIElECmZvciBmaWxlbmFtZSBpbiAqLmd0ZjsgZG8gCiAgZWNobyAkZmlsZW5hbWUgJFBXRC8kZmlsZW5hbWU7IAogIGRvbmUgPiBsaXN0R1RGLnR4dAoKIyBtZXJnZSBHVEZzIGludG8gYSBzaW5nbGUgZmlsZQovaG9tZS9zaGFyZWQvc3RyaW5ndGllLTIuMi4xLkxpbnV4X3g4Nl82NC9zdHJpbmd0aWUgXAogIC0tbWVyZ2UgXAogIC1wIDQ4IFwKCS1HIC9ob21lL3NoYXJlZC84VEJfSEREXzAyL21hdHRnZW9yZ2VwaGQvYmVyZGFobC1zb2NrZXllLXNhbG1vbi9zZXF1ZW5jZXMvR0NGXzAwNjE0OTExNS4yX09uZXJfMS4xX21STkEuZ2ZmIFwKCS1vIG9uZXJrYV9tZXJnZWQuZ3RmIGd0Zl9saXN0LnR4dCAjTWVyZ2UgR1RGcyB0byBmb3JtICQKCmVjaG8gIlN0cmluZ3RpZSBtZXJnZSBjb21wbGV0ZSIgJChkYXRlKQoKIyBDb21wdXRlIGFjY3VyYWN5IG9mIGdmZgojIGdmZmNvbXBhcmUgLXIgLi4vLi4vLi4vcmVmcy9QYW5vcGVhLWdlbmVyb3NhLXYxLjAuYTQubVJOQV9TSkcuZ2ZmMyAtRyAtbyBtZXJnZWQgUGdlbmVyb3NhX21lcmdlZC5ndGYgI0NvbXB1dGUgdGhlIGFjY3VyYWN5IGFuZCBwcmUkCiMgZWNobyAiR0ZGY29tcGFyZSBjb21wbGV0ZSwgU3RhcnRpbmcgZ2VuZSBjb3VudCBtYXRyaXggYXNzZW1ibHkuLi4iICQoZGF0ZSkKCiMgQ29tcGlsZSBnZW5lIGNvdW50IG1hdHJpeCBmcm9tIEdURnMKL2hvbWUvc2hhcmVkL3N0cmluZ3RpZS0yLjIuMS5MaW51eF94ODZfNjQvcHJlcERFLnB5IFwKICAtZyBvbmVya2FfZ2VuZV9jb3VudF9tYXRyaXguY3N2IFwKICAtaSBsaXN0R1RGLnR4dCAjQ29tcGlsZSB0aGUgZ2VuZSBjb3VudCBtYXRyaXgKCmVjaG8gIkdlbmUgY291bnQgbWF0cml4IGNvbXBpbGVkLiIgJChkYXRlKQoKYGBgCgo=