diff --git a/tutorials/notebooks/ATACseq/ATACseq_Tutorial1_Preprocessing.ipynb b/tutorials/notebooks/ATACseq/ATACseq_Tutorial1_Preprocessing.ipynb new file mode 100644 index 0000000..1d5b2e6 --- /dev/null +++ b/tutorials/notebooks/ATACseq/ATACseq_Tutorial1_Preprocessing.ipynb @@ -0,0 +1,4910 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "f7ded04b-10a3-4eee-b7a2-9e1f8528c239", + "metadata": { + "tags": [] + }, + "source": [ + "# ATAC-seq Module1: Preprocessing and Quality Control\n", + "\n", + "\"Drawing\"\n", + "\n", + "## Overview & Purpose\n", + "This short tutorial demonstrates the intial processing steps for ATAC-seq analysis. In this module we focus on generating quality reports of the fastq files, adapter trimming, mapping, and removal of PCR duplicates.\n", + "\n", + "In this tutorial we will process a randomly chosen published dataset. This is available from GEO: [GSE67382](https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE67382)\n", + "Bao X, Rubin AJ, Qu K, Zhang J et al. A novel ATAC-seq approach reveals lineage-specific reinforcement of the open chromatin landscape via cooperation between BAF and p63. Genome Biol 2015 Dec 18;16:284. PMID: 26683334\n", + "\n", + "This dataset is paired-end 50 bp sequencing. We will analyze two samples representing NHEK cells with BAF depletion compared to a control. Note that to allow faster processing we have limited the reads to that of chromosome 4. \n", + " \n", + "### Required Files\n", + "In this stage of the module you will use the fastq files that have been prepared. In step1 we will copy these files over to your instance. You can also use this module on your own data or any published ATAC-seq dataset. \n", + "\n", + "
\n", + "STEP1: Setup Environment\n", + "
\n", + "\n", + "Initial items to configure your google cloud environment. In this step we will use conda to install the following packages:\n", + "\n", + "Quality Reporting:\n", + "[fastqc](https://anaconda.org/bioconda/fastqc), [multiqc](https://anaconda.org/bioconda/multiqc)\n", + "\n", + "Read Trimming: \n", + "[cutadapt](https://anaconda.org/bioconda/cutadapt), [trim-galore](https://anaconda.org/bioconda/trim-galore)\n", + "\n", + "Mapping:\n", + "[bowtie2](https://anaconda.org/bioconda/bowtie2)\n", + "\n", + "Deduplication:\n", + "[samtools](https://anaconda.org/bioconda/samtools), [picard](https://anaconda.org/bioconda/picard)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "f2074873-7df9-46e7-9922-f1b1bb26f7c4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Installed kernelspec ATACtraining in /home/jupyter/.local/share/jupyter/kernels/atactraining\n", + "Warning: 'bioconda' already in 'channels' list, moving to the top\n", + "Collecting package metadata (current_repodata.json): done\n", + "Solving environment: done\n", + "\n", + "# All requested packages already installed.\n", + "\n", + "Retrieving notices: ...working... done\n", + "Requirement already satisfied: jupyterquiz in /opt/conda/lib/python3.7/site-packages (2.0.1)\n" + ] + } + ], + "source": [ + "!python -m ipykernel install --user --name ATACtraining\n", + "numthreads=!lscpu | grep '^CPU(s)'| awk '{print $2-1}'\n", + "numthreadsint = int(numthreads[0])\n", + "!conda config --prepend channels bioconda\n", + "#!python -m pip install --user --upgrade cutadapt \n", + "!conda install -y -c bioconda fastqc bowtie2 picard multiqc samtools trim-galore cutadapt\n", + "!pip install jupyterquiz\n", + "from jupyterquiz import display_quiz\n", + "from IPython.display import IFrame\n", + "from IPython.display import display\n", + "import pandas as pd" + ] + }, + { + "cell_type": "markdown", + "id": "54f8e28a-543c-4eb9-8c6a-6107ce0613a8", + "metadata": {}, + "source": [ + "## Setup FileSystem\n", + "Now lets create some folders to stay organized and copy over our prepared fastq files. We're going to create a directory called \"Tutorial1\" which we'll use for this module. We'll then create subfolders for our InputFiles and for the files that we'll be creating during this module. We'll also copy over the fasta file for chromosome 4 as well as some bowtie2 index files (don't worry we'll teach you how to create these index files)." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "8a730ba8-82e0-4ab2-a0ef-118a6910cc92", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/home/jupyter\n", + "Copying gs://unmc_atac_data_examples/Tutorial1/images/adapterQuiz.json...\n", + "Copying gs://unmc_atac_data_examples/Tutorial1/images/ATACseqWorkflowLesson1.jpg...\n", + "Copying gs://unmc_atac_data_examples/Tutorial1/images/Fig1Published.jpg... \n", + "Copying gs://unmc_atac_data_examples/Tutorial1/images/PeaksExample.jpg... \n", + "Copying gs://unmc_atac_data_examples/Tutorial1/images/adapterinsert.jpg... \n", + "Copying gs://unmc_atac_data_examples/Tutorial1/images/alignmentQuiz.json... \n", + "Copying gs://unmc_atac_data_examples/Tutorial1/images/duplicateQuiz.json... \n", + "Copying gs://unmc_atac_data_examples/Tutorial1/images/mappingquality.json... \n", + "Copying gs://unmc_atac_data_examples/Tutorial1/images/fastqformat.jpg... \n", + "Copying gs://unmc_atac_data_examples/Tutorial1/InputFiles/CTL_R1.fastq.gz... \n", + "Copying gs://unmc_atac_data_examples/Tutorial1/InputFiles/CTL_R2.fastq.gz...\n", + "Copying gs://unmc_atac_data_examples/Tutorial1/InputFiles/Mutant_R1.fastq.gz... \n", + "Copying gs://unmc_atac_data_examples/Tutorial1/InputFiles/Mutant_R2.fastq.gz... \n", + "- [4/4 files][124.4 MiB/124.4 MiB] 100% Done \n", + "Operation completed over 4 objects/124.4 MiB. \n", + "Copying gs://unmc_atac_data_examples/Tutorial1/InputFiles/hg38chr4.1.bt2...\n", + "Copying gs://unmc_atac_data_examples/Tutorial1/InputFiles/hg38chr4.2.bt2...\n", + "Copying gs://unmc_atac_data_examples/Tutorial1/InputFiles/hg38chr4.4.bt2... \n", + "Copying gs://unmc_atac_data_examples/Tutorial1/InputFiles/hg38chr4.fa...\n", + "Copying gs://unmc_atac_data_examples/Tutorial1/InputFiles/hg38chr4.3.bt2... \n", + "Copying gs://unmc_atac_data_examples/Tutorial1/InputFiles/hg38chr4.rev.2.bt2... \n", + "Copying gs://unmc_atac_data_examples/Tutorial1/InputFiles/hg38chr4.rev.1.bt2... \n", + "/ [7/7 files][449.4 MiB/449.4 MiB] 100% Done \n", + "Operation completed over 7 objects/449.4 MiB. \n" + ] + } + ], + "source": [ + "#These commands create our directory structure.\n", + "!cd $HOMEDIR\n", + "!mkdir -p Tutorial1\n", + "!mkdir -p Tutorial1/InputFiles\n", + "!mkdir -p Tutorial1/QC\n", + "!mkdir -p Tutorial1/Trimmed\n", + "!mkdir -p Tutorial1/Mapped\n", + "!mkdir -p Tutorial1/RefGenome\n", + "!mkdir -p Tutorial1/LessonImages\n", + "!cd ./Tutorial1\n", + "!echo $PWD\n", + "\n", + "#These commands help identify the google cloud storage bucket where the example files are held.\n", + "project_id = \"nosi-unmc-seq\"\n", + "original_bucket = \"gs://unmc_atac_data_examples/Tutorial1\"\n", + "!gsutil -m cp $original_bucket/images/* Tutorial1/LessonImages\n", + "#This command copies our example files to the Tutorial1/Inputfiles folder that we created above.\n", + "! gsutil -m cp $original_bucket/InputFiles/*fastq.gz Tutorial1/InputFiles\n", + "! gsutil -m cp $original_bucket/InputFiles/hg38* Tutorial1/RefGenome\n" + ] + }, + { + "cell_type": "markdown", + "id": "51fc4b08-4f02-4f49-9a8b-48b02a122455", + "metadata": {}, + "source": [ + "\n", + "### OK\n", + "Let's make sure that the files copied correctly. You should see 4 files after running the following command:" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "bce79afb-044f-45da-b7e4-e9a5f93dd1c2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CTL_R1.fastq.gz Mutant_R1.fastq.gz Untitled.ipynb\n", + "CTL_R2.fastq.gz Mutant_R2.fastq.gz\n" + ] + } + ], + "source": [ + "!ls Tutorial1/InputFiles\n" + ] + }, + { + "cell_type": "markdown", + "id": "cf7aea89-8610-4430-a802-6f7d387deb8b", + "metadata": {}, + "source": [ + "
\n", + "STEP2: QC\n", + "
\n", + "\n", + "Sequences are typically provided as files in fastq format. This format includes 4 lines per sequence.\n", + "\n", + "\"Drawing\"" + ] + }, + { + "cell_type": "markdown", + "id": "a39c3c75-9011-4a9e-a60e-bb8c503405bb", + "metadata": {}, + "source": [ + "Let's take a look at the sequence quality of the raw reads usinq fastqc:" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "f78e9802-ddd1-4abb-9bbf-3cc10e5d5d90", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SampleFilenameFile typeEncodingTotal SequencesSequences flagged as poor qualitySequence length%GCtotal_deduplicated_percentageavg_sequence_lengthbasic_statisticsper_base_sequence_qualityper_sequence_quality_scoresper_base_sequence_contentper_sequence_gc_contentper_base_n_contentsequence_length_distributionsequence_duplication_levelsoverrepresented_sequencesadapter_content
0CTL_R1CTL_R1.fastq.gzConventional base callsSanger / Illumina 1.9721311.00.050.043.034.11649750.0passpasspassfailpasspasspassfailwarnpass
1CTL_R2CTL_R2.fastq.gzConventional base callsSanger / Illumina 1.9721311.00.050.042.033.45985650.0passpasspassfailwarnpasspassfailfailpass
2Mutant_R1Mutant_R1.fastq.gzConventional base callsSanger / Illumina 1.9848511.00.050.042.041.51608550.0passpasspassfailpasspasspassfailwarnpass
3Mutant_R2Mutant_R2.fastq.gzConventional base callsSanger / Illumina 1.9848511.00.050.042.037.73187850.0passpasspassfailwarnpasspassfailfailpass
\n", + "
" + ], + "text/plain": [ + " Sample Filename File type \\\n", + "0 CTL_R1 CTL_R1.fastq.gz Conventional base calls \n", + "1 CTL_R2 CTL_R2.fastq.gz Conventional base calls \n", + "2 Mutant_R1 Mutant_R1.fastq.gz Conventional base calls \n", + "3 Mutant_R2 Mutant_R2.fastq.gz Conventional base calls \n", + "\n", + " Encoding Total Sequences Sequences flagged as poor quality \\\n", + "0 Sanger / Illumina 1.9 721311.0 0.0 \n", + "1 Sanger / Illumina 1.9 721311.0 0.0 \n", + "2 Sanger / Illumina 1.9 848511.0 0.0 \n", + "3 Sanger / Illumina 1.9 848511.0 0.0 \n", + "\n", + " Sequence length %GC total_deduplicated_percentage avg_sequence_length \\\n", + "0 50.0 43.0 34.116497 50.0 \n", + "1 50.0 42.0 33.459856 50.0 \n", + "2 50.0 42.0 41.516085 50.0 \n", + "3 50.0 42.0 37.731878 50.0 \n", + "\n", + " basic_statistics per_base_sequence_quality per_sequence_quality_scores \\\n", + "0 pass pass pass \n", + "1 pass pass pass \n", + "2 pass pass pass \n", + "3 pass pass pass \n", + "\n", + " per_base_sequence_content per_sequence_gc_content per_base_n_content \\\n", + "0 fail pass pass \n", + "1 fail warn pass \n", + "2 fail pass pass \n", + "3 fail warn pass \n", + "\n", + " sequence_length_distribution sequence_duplication_levels \\\n", + "0 pass fail \n", + "1 pass fail \n", + "2 pass fail \n", + "3 pass fail \n", + "\n", + " overrepresented_sequences adapter_content \n", + "0 warn pass \n", + "1 fail pass \n", + "2 warn pass \n", + "3 fail pass " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#This command runs fastqc on each fastq.gz file inside our InputFiles directory and stores the ouput reports in our QC directory.\n", + "!fastqc -t $numthreadsint -q -o Tutorial1/QC Tutorial1/InputFiles/*fastq.gz\n", + "\n", + "#We then use multiqc to summarize the report.\n", + "!multiqc -o Tutorial1/QC -f Tutorial1/QC 2> Tutorial1/QC/multiqc_log.txt\n", + "\n", + "#We'll load this into a pandas table to work in this context, but fastqc also produces an html report that you can browse.\n", + "dframe = pd.read_csv(\"Tutorial1/QC/multiqc_data/multiqc_fastqc.txt\", sep='\\t')\n", + "display(dframe)" + ] + }, + { + "cell_type": "markdown", + "id": "744e8b64-947b-43f4-9bb0-51bf42972bc3", + "metadata": {}, + "source": [ + "Alternatively, we can view the fastqc html files:" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "f2df8f13-211b-4584-8600-c5ab1edf8138", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#We can display the resulting fastqc results.\n", + "IFrame(src='Tutorial1/QC/CTL_R1_fastqc.html', width=2000, height=1500)" + ] + }, + { + "cell_type": "markdown", + "id": "579a6da5-11b8-45c9-a9d2-3f63efb0fed4", + "metadata": {}, + "source": [ + "Look at the the \"Per base seqeuence content\" in the above FastQC report. We'll trim the reads to remove some of this effect. For now, think about possible explanations for this result.\n", + "\n", + "Also look at the \"Sequence Duplication Levels\". Sometimes duplicates appear due to the PCR amplification step of library preparation. We'll remove duplicates in a later step. \n", + "\n", + "Lastly, look at the report at the \"Overrepresented sequences\". What are some possible explanations for this result?" + ] + }, + { + "cell_type": "markdown", + "id": "b228a0d9-0e88-490f-a53d-58ce20d40b64", + "metadata": {}, + "source": [ + "
\n", + "Trimming\n", + "
\n", + "Next let's trim our sequences.\n", + "\n", + "Why is it particularly important to trim the reads in ATAC-seq? To understand let's review how ATAC-seq works. Tn5 inserts adapter sequences into accessible regions. \n", + "\n", + "\"Drawing\"\n", + "\n", + "Image source: [Grandi et al., Nature Protocols 2022](https://www.nature.com/articles/s41596-022-00692-9)\n", + "\n", + "\n", + "What would happen if the distance between inserted sites is short? For example our sequencing lenghth in the example dataset is 50 bp, so what would the sequence look like if our fragment (insert size) is only 30 bp long? " + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "6ca0ae04-b409-4c5d-b318-0887edc0f3c8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display_quiz(\"Tutorial1/LessonImages/adapterQuiz.json\")" + ] + }, + { + "cell_type": "markdown", + "id": "7e910ae5-83af-476d-85a6-942242dece8a", + "metadata": {}, + "source": [ + "Let's use trim galore to prepare the sequences before mapping." + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "7d0a8fb1-c8bc-4a77-b7d0-d545cb2d7aab", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "done\n" + ] + } + ], + "source": [ + "#This will trim off N's as well as nextera adapters present in ATAC-seq library preparation, placing the output in our Trimmed folder.\n", + "!trim_galore -j $numthreadsint -o Tutorial1/Trimmed --paired --nextera --trim-n --fastqc --suppress_warn Tutorial1/InputFiles/CTL_R1.fastq.gz Tutorial1/InputFiles/CTL_R2.fastq.gz > Tutorial1/Trimmed/trimgalore_errors.txt 2> Tutorial1/Trimmed/trimgalore_log2.txt\n", + "print(\"done\")" + ] + }, + { + "cell_type": "markdown", + "id": "adcdef0f-1461-4282-9659-b86c71ea3f77", + "metadata": {}, + "source": [ + "Let's do this for the other sample as well." + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "b6275508-1f8c-42c9-b36e-3c627965478a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "done\n" + ] + } + ], + "source": [ + "#Trim the other sample\n", + "!trim_galore -j $numthreadsint -o Tutorial1/Trimmed --paired --nextera --trim-n --fastqc --suppress_warn Tutorial1/InputFiles/Mutant_R1.fastq.gz Tutorial1/InputFiles/Mutant_R2.fastq.gz > Tutorial1/Trimmed/trimgalore_errors.txt 2> Tutorial1/Trimmed/trimgalore_log2.txt\n", + "print(\"done\")" + ] + }, + { + "cell_type": "markdown", + "id": "4e589ef3-ad38-4b18-86fa-e8afbc2b1001", + "metadata": {}, + "source": [ + "Now let's summarize the trimming results." + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "cedc5d1f-21f7-4bf7-8c8d-0f4209288b8e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SampleCutadapt_mqc-generalstats-cutadapt-percent_trimmedFastQC_mqc-generalstats-fastqc-percent_duplicatesFastQC_mqc-generalstats-fastqc-percent_gcFastQC_mqc-generalstats-fastqc-avg_sequence_lengthFastQC_mqc-generalstats-fastqc-percent_failsFastQC_mqc-generalstats-fastqc-total_sequences
0CTL_R11.495896NaNNaNNaNNaNNaN
1CTL_R1_val_1NaN65.54105243.049.26382020.0717388.0
2CTL_R22.049704NaNNaNNaNNaNNaN
3CTL_R2_val_2NaN66.32189142.049.20013730.0717388.0
4Mutant_R11.641975NaNNaNNaNNaNNaN
5Mutant_R1_val_1NaN58.27693442.049.22832320.0841811.0
6Mutant_R22.211361NaNNaNNaNNaNNaN
7Mutant_R2_val_2NaN62.04465941.049.19325430.0841811.0
\n", + "
" + ], + "text/plain": [ + " Sample Cutadapt_mqc-generalstats-cutadapt-percent_trimmed \\\n", + "0 CTL_R1 1.495896 \n", + "1 CTL_R1_val_1 NaN \n", + "2 CTL_R2 2.049704 \n", + "3 CTL_R2_val_2 NaN \n", + "4 Mutant_R1 1.641975 \n", + "5 Mutant_R1_val_1 NaN \n", + "6 Mutant_R2 2.211361 \n", + "7 Mutant_R2_val_2 NaN \n", + "\n", + " FastQC_mqc-generalstats-fastqc-percent_duplicates \\\n", + "0 NaN \n", + "1 65.541052 \n", + "2 NaN \n", + "3 66.321891 \n", + "4 NaN \n", + "5 58.276934 \n", + "6 NaN \n", + "7 62.044659 \n", + "\n", + " FastQC_mqc-generalstats-fastqc-percent_gc \\\n", + "0 NaN \n", + "1 43.0 \n", + "2 NaN \n", + "3 42.0 \n", + "4 NaN \n", + "5 42.0 \n", + "6 NaN \n", + "7 41.0 \n", + "\n", + " FastQC_mqc-generalstats-fastqc-avg_sequence_length \\\n", + "0 NaN \n", + "1 49.263820 \n", + "2 NaN \n", + "3 49.200137 \n", + "4 NaN \n", + "5 49.228323 \n", + "6 NaN \n", + "7 49.193254 \n", + "\n", + " FastQC_mqc-generalstats-fastqc-percent_fails \\\n", + "0 NaN \n", + "1 20.0 \n", + "2 NaN \n", + "3 30.0 \n", + "4 NaN \n", + "5 20.0 \n", + "6 NaN \n", + "7 30.0 \n", + "\n", + " FastQC_mqc-generalstats-fastqc-total_sequences \n", + "0 NaN \n", + "1 717388.0 \n", + "2 NaN \n", + "3 717388.0 \n", + "4 NaN \n", + "5 841811.0 \n", + "6 NaN \n", + "7 841811.0 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "!multiqc -o Tutorial1/QC -f Tutorial1/Trimmed 2> Tutorial1/QC/multiqc_log.txt\n", + "\n", + "dframe = pd.read_csv(\"Tutorial1/QC/multiqc_data/multiqc_general_stats.txt\", sep='\\t')\n", + "display(dframe)\n" + ] + }, + { + "cell_type": "markdown", + "id": "b9cc8fc5-fa07-4345-8f87-caeb5fccd239", + "metadata": {}, + "source": [ + "
\n", + "Step3: Mapping\n", + "
\n", + "Our fastq files include sequences and quality scores for each base, but we want to figure out which genomic location these sequences came from. To do this we will map each sequence to a reference genome using bowtie2. \n", + " \n", + "\n", + "Mapping reads requires a reference genome. Due to time and memory considerations, in this tutorial we prepared that file for you and will only map to chr4. However, in a full analysis, we would map to the entire genome. To do so you would need a fasta file corresponding to the reference genome (e.g. [hg38.fa](https://hgdownload.soe.ucsc.edu/goldenPath/hg38/bigZips/)) from which you'd create an index of the genome using bowtie2-build. This can be done with the command: \n", + "\n", + "bowtie2-build reference_genome_file.fa outputprefix.\n", + "\n", + "As mentioned, we've gone ahead and created the index for you, and, earlier, you copied them into the RefGenome directory. These index files end in the bt2 extension. \n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "1c5d8404-a5f5-49e7-9625-7deacdbcefa1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tutorial1/RefGenome/hg38chr4.1.bt2 Tutorial1/RefGenome/hg38chr4.4.bt2\n", + "Tutorial1/RefGenome/hg38chr4.2.bt2 Tutorial1/RefGenome/hg38chr4.rev.1.bt2\n", + "Tutorial1/RefGenome/hg38chr4.3.bt2 Tutorial1/RefGenome/hg38chr4.rev.2.bt2\n" + ] + } + ], + "source": [ + "!ls Tutorial1/RefGenome/*bt2" + ] + }, + { + "cell_type": "markdown", + "id": "afa82cbc-a69d-430f-ac83-e94ca498cdf3", + "metadata": {}, + "source": [ + "These index files were created from our fasta file:" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "c4d3279a-de20-4c18-9c0f-39c884b3d0c3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tutorial1/RefGenome/hg38chr4.fa\n" + ] + } + ], + "source": [ + "!ls Tutorial1/RefGenome/*fa" + ] + }, + { + "cell_type": "markdown", + "id": "1d77a351-d805-441b-b524-4f6d1d3358d9", + "metadata": {}, + "source": [ + "Notice that the single fasta file created mutiple index files. When we align we'll specify the prefix of the index files." + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "1c56662b-6cf5-4319-8b8c-f404d928ea67", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "717388 reads; of these:\n", + " 717388 (100.00%) were paired; of these:\n", + " 245685 (34.25%) aligned concordantly 0 times\n", + " 395268 (55.10%) aligned concordantly exactly 1 time\n", + " 76435 (10.65%) aligned concordantly >1 times\n", + " ----\n", + " 245685 pairs aligned concordantly 0 times; of these:\n", + " 32486 (13.22%) aligned discordantly 1 time\n", + " ----\n", + " 213199 pairs aligned 0 times concordantly or discordantly; of these:\n", + " 426398 mates make up the pairs; of these:\n", + " 391996 (91.93%) aligned 0 times\n", + " 19915 (4.67%) aligned exactly 1 time\n", + " 14487 (3.40%) aligned >1 times\n", + "72.68% overall alignment rate\n" + ] + } + ], + "source": [ + "#Notes: The -x option specifies the prefix of the index. -1 specifies our left-end trimmed reads file. -2 specifies our right-end trimmed reads file. -S specifies our output file in sam format.\n", + "!bowtie2 -p $numthreadsint -x Tutorial1/RefGenome/hg38chr4 -1 Tutorial1/Trimmed/CTL_R1_val_1.fq.gz -2 Tutorial1/Trimmed/CTL_R2_val_2.fq.gz -S Tutorial1/Mapped/CTL.sam\n" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "612a3af0-d5b7-4c65-8b6d-be91d30252aa", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "841811 reads; of these:\n", + " 841811 (100.00%) were paired; of these:\n", + " 198542 (23.59%) aligned concordantly 0 times\n", + " 524810 (62.34%) aligned concordantly exactly 1 time\n", + " 118459 (14.07%) aligned concordantly >1 times\n", + " ----\n", + " 198542 pairs aligned concordantly 0 times; of these:\n", + " 37182 (18.73%) aligned discordantly 1 time\n", + " ----\n", + " 161360 pairs aligned 0 times concordantly or discordantly; of these:\n", + " 322720 mates make up the pairs; of these:\n", + " 284663 (88.21%) aligned 0 times\n", + " 17772 (5.51%) aligned exactly 1 time\n", + " 20285 (6.29%) aligned >1 times\n", + "83.09% overall alignment rate\n" + ] + } + ], + "source": [ + "##Let's do the same thing for our other sample.\n", + "!bowtie2 -p $numthreadsint -x Tutorial1/RefGenome/hg38chr4 -1 Tutorial1/Trimmed/Mutant_R1_val_1.fq.gz -2 Tutorial1/Trimmed/Mutant_R2_val_2.fq.gz -S Tutorial1/Mapped/Mutant.sam" + ] + }, + { + "cell_type": "markdown", + "id": "fc919a58-4757-482d-b5c3-9a52716feecb", + "metadata": {}, + "source": [ + "### Answer the following question only if you are using the example dataset we provided. This question is simply a check to ensure everything was processed correctly." + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "990dbd77-7dbd-461c-bf40-b29621089b76", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display_quiz(\"Tutorial1/LessonImages/alignmentQuiz.json\")" + ] + }, + { + "cell_type": "markdown", + "id": "d96b5ade-acd6-4ee7-9352-f654cd78ad85", + "metadata": {}, + "source": [ + "Bowtie2 output a file in [sam format](https://samtools.github.io/hts-specs/SAMv1.pdf) which contains the original sequence, quality scores, and the genomic coordinates matching each read. \n", + "\n", + "In the next commands we'll convert the file to the more compressed [bam format](https://genome.ucsc.edu/goldenPath/help/bam.html) and sort the reads by chromosomal coordinates." + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "6dcaff27-b46c-4d50-bdf6-301f914e6671", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "done\n" + ] + } + ], + "source": [ + "#This will convert to bam by using samtools view with the -b option. The h and S option tells samtools that the file has a header and is in sam format. We will pipe this to samtools sort. Pay attention to the \"-\" at the end of the sort command which tells samtools to use stdin.\n", + "!samtools view -q 10 -bhS Tutorial1/Mapped/CTL.sam | samtools sort -o Tutorial1/Mapped/CTL.bam - \n", + "print(\"done\")" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "e82b8ef3-3b40-4283-8955-326120668070", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "done\n" + ] + } + ], + "source": [ + "#Let's do the same thing for our Mutant sample.\n", + "!samtools view -q 10 -bhS Tutorial1/Mapped/Mutant.sam | samtools sort -o Tutorial1/Mapped/Mutant.bam - \n", + "print(\"done\")" + ] + }, + { + "cell_type": "markdown", + "id": "52f5444e-b437-40b8-b222-6304baf38343", + "metadata": {}, + "source": [ + "You may have noticed the parameters -bhS and -q 10 in the above commands. Briefly, -bhS describes aspects of the file to samtools, such that you want to output a bam file (the b option), that it has a header (the h option), and that it is currently in sam format (the S option). We also specified -q 10 which removes reads with a mapping score <= 10. " + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "c7eeca9f-d6d0-43f5-b4f4-7a2cfe44ce5e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display_quiz(\"Tutorial1/LessonImages/mappingquality.json\")" + ] + }, + { + "cell_type": "markdown", + "id": "947d41c9-3436-47f8-854d-bcf1625919b3", + "metadata": {}, + "source": [ + "
\n", + "Step4: Removal of Duplicates\n", + "
\n", + "It's important to remove duplicates from our reads because part of the ATAC-seq method includes a PCR step for library amplification. This can create biases in the data resulting from PCR duplicates. To understand how PCR duplicates can affect the analysis, let's jump ahead a bit. Accessibile sites are represented by ATAC-seq \"peaks\" of signal.\n", + "\n", + "\"Drawing\"\n" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "38362bd5-120e-4cfe-943c-e1d7c55a0e82", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display_quiz(\"Tutorial1/LessonImages/duplicateQuiz.json\")" + ] + }, + { + "cell_type": "markdown", + "id": "e6002033-c000-4b2b-9e23-de065180f2f6", + "metadata": {}, + "source": [ + "Okay, let's remove these duplicates using Picard." + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "783c64d4-e9dc-4a15-bf85-7b1a341748b8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "done\n" + ] + } + ], + "source": [ + "#this will take the sorted bam file and remove duplicates, saving a new bam file and a summary in a text file.\n", + "!picard MarkDuplicates --REMOVE_DUPLICATES TRUE -I Tutorial1/Mapped/CTL.bam -O Tutorial1/Mapped/CTL_dedup.bam --METRICS_FILE Tutorial1/Mapped/CTL_dedup_metrics.txt --QUIET 2> Tutorial1/Mapped/PicardLog.txt\n", + "print(\"done\")" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "0631658b-bd97-4d1c-9e56-2152c6910440", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "done\n" + ] + } + ], + "source": [ + "#We also should do this for the other sample.\n", + "!picard MarkDuplicates --REMOVE_DUPLICATES TRUE -I Tutorial1/Mapped/Mutant.bam -O Tutorial1/Mapped/Mutant_dedup.bam --METRICS_FILE Tutorial1/Mapped/Mutant_dedup_metrics.txt --QUIET 2> Tutorial1/Mapped/PicardLog2.txt\n", + "print(\"done\")" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "2308d570-94ca-4116-9492-493a6a87db79", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
SamplePicard_mqc-generalstats-picard-PERCENT_DUPLICATION
0CTL0.569867
1Mutant0.591115
\n", + "
" + ], + "text/plain": [ + " Sample Picard_mqc-generalstats-picard-PERCENT_DUPLICATION\n", + "0 CTL 0.569867 \n", + "1 Mutant 0.591115 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#We can use multiqc to summarize the metrics\n", + "!multiqc -o Tutorial1/QC -f Tutorial1/Mapped 2> Tutorial1/Mapped/multiqc_log.txt\n", + "dframe = pd.read_csv(\"Tutorial1/QC/multiqc_data/multiqc_general_stats.txt\", sep='\\t')\n", + "display(dframe)" + ] + }, + { + "cell_type": "markdown", + "id": "12439dc4-b9ad-49fa-9ccb-4383a272bcaf", + "metadata": {}, + "source": [ + "
\n", + "Great job! \n", + "
\n", + "We have completed the preprocessing steps and are ready to move on to some downstream analysis. Take a break here or move on to the next tutorial. \n" + ] + } + ], + "metadata": { + "environment": { + "kernel": "python3", + "name": "common-cpu.m94", + "type": "gcloud", + "uri": "gcr.io/deeplearning-platform-release/base-cpu:m94" + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/notebooks/ATACseq/ATACseq_Tutorial2_PeakDetection.ipynb b/tutorials/notebooks/ATACseq/ATACseq_Tutorial2_PeakDetection.ipynb new file mode 100644 index 0000000..d7b685c --- /dev/null +++ b/tutorials/notebooks/ATACseq/ATACseq_Tutorial2_PeakDetection.ipynb @@ -0,0 +1,4476 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "f7ded04b-10a3-4eee-b7a2-9e1f8528c239", + "metadata": {}, + "source": [ + "# ATAC-seq Module2: Visualization and Peak Identification\n", + "\n", + "\"Drawing\"\n", + "\n", + "## Overview & Purpose\n", + "In the previous section of this module we performed preprocessing quality control, mapping, and deduplication. In this section we will focus on visualization of the signal, create average plots of signal around transcription start sites (TSSs), and identification of peak signal. \n", + "\n", + "### Required Files\n", + "In this stage of the module you will use the deduplicated bam files that we prepared in the previous section. Don't worry if you are just jumping in now, we have examples of these files saved and will include a step that copies them for your use. You can also use this module on your own data or any published ATAC-seq dataset, but you should complete the mappping and deduplication steps first.\n", + "\n", + "
\n", + "STEP1: Setup Environment\n", + "
\n", + "\n", + "Initial items to configure your google cloud environment. In this step we will use conda to install the following packages:\n", + "\n", + "Visualization:\n", + "[samtools](https://anaconda.org/bioconda/samtools), [deeptools](https://anaconda.org/bioconda/deeptools), [IGV](https://anaconda.org/bioconda/igv)\n", + "\n", + "Peak Identification:\n", + "[macs2](https://anaconda.org/bioconda/macs2)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "f2074873-7df9-46e7-9922-f1b1bb26f7c4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Installed kernelspec ATACtraining in /home/jupyter/.local/share/jupyter/kernels/atactraining\n", + "Warning: 'bioconda' already in 'channels' list, moving to the top\n", + "Collecting package metadata (current_repodata.json): done\n", + "Solving environment: done\n", + "\n", + "# All requested packages already installed.\n", + "\n", + "Retrieving notices: ...working... done\n", + "Requirement already satisfied: numpy in ./.local/lib/python3.7/site-packages (1.21.6)\n", + "Requirement already satisfied: numpydoc in ./.local/lib/python3.7/site-packages (1.4.0)\n", + "Requirement already satisfied: Jinja2>=2.10 in /opt/conda/lib/python3.7/site-packages (from numpydoc) (3.1.2)\n", + "Requirement already satisfied: sphinx>=3.0 in ./.local/lib/python3.7/site-packages (from numpydoc) (5.1.1)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /opt/conda/lib/python3.7/site-packages (from Jinja2>=2.10->numpydoc) (2.1.1)\n", + "Requirement already satisfied: sphinxcontrib-serializinghtml>=1.1.5 in ./.local/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (1.1.5)\n", + "Requirement already satisfied: requests>=2.5.0 in /opt/conda/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (2.28.1)\n", + "Requirement already satisfied: sphinxcontrib-qthelp in ./.local/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (1.0.3)\n", + "Requirement already satisfied: sphinxcontrib-devhelp in ./.local/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (1.0.2)\n", + "Requirement already satisfied: alabaster<0.8,>=0.7 in ./.local/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (0.7.12)\n", + "Requirement already satisfied: imagesize in ./.local/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (1.4.1)\n", + "Requirement already satisfied: packaging in /opt/conda/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (21.3)\n", + "Requirement already satisfied: sphinxcontrib-applehelp in ./.local/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (1.0.2)\n", + "Requirement already satisfied: babel>=1.3 in /opt/conda/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (2.10.3)\n", + "Requirement already satisfied: sphinxcontrib-jsmath in ./.local/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (1.0.1)\n", + "Requirement already satisfied: sphinxcontrib-htmlhelp>=2.0.0 in ./.local/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (2.0.0)\n", + "Requirement already satisfied: snowballstemmer>=1.1 in ./.local/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (2.2.0)\n", + "Requirement already satisfied: Pygments>=2.0 in /opt/conda/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (2.12.0)\n", + "Requirement already satisfied: importlib-metadata>=4.4 in /opt/conda/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (4.11.4)\n", + "Requirement already satisfied: docutils<0.20,>=0.14 in ./.local/lib/python3.7/site-packages (from sphinx>=3.0->numpydoc) (0.19)\n", + "Requirement already satisfied: pytz>=2015.7 in /opt/conda/lib/python3.7/site-packages (from babel>=1.3->sphinx>=3.0->numpydoc) (2022.1)\n", + "Requirement already satisfied: typing-extensions>=3.6.4 in /opt/conda/lib/python3.7/site-packages (from importlib-metadata>=4.4->sphinx>=3.0->numpydoc) (4.2.0)\n", + "Requirement already satisfied: zipp>=0.5 in /opt/conda/lib/python3.7/site-packages (from importlib-metadata>=4.4->sphinx>=3.0->numpydoc) (3.8.0)\n", + "Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.7/site-packages (from requests>=2.5.0->sphinx>=3.0->numpydoc) (3.3)\n", + "Requirement already satisfied: charset-normalizer<3,>=2 in /opt/conda/lib/python3.7/site-packages (from requests>=2.5.0->sphinx>=3.0->numpydoc) (2.1.0)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.7/site-packages (from requests>=2.5.0->sphinx>=3.0->numpydoc) (2022.6.15)\n", + "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /opt/conda/lib/python3.7/site-packages (from requests>=2.5.0->sphinx>=3.0->numpydoc) (1.26.9)\n", + "Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /opt/conda/lib/python3.7/site-packages (from packaging->sphinx>=3.0->numpydoc) (3.0.9)\n", + "Requirement already satisfied: jupyterquiz in /opt/conda/lib/python3.7/site-packages (2.0.1)\n", + "Requirement already satisfied: igv-notebook in /opt/conda/lib/python3.7/site-packages (0.3.1)\n" + ] + } + ], + "source": [ + "!python -m ipykernel install --user --name ATACtraining\n", + "numthreads=!lscpu | grep '^CPU(s)'| awk '{print $2-1}'\n", + "numthreadsint = int(numthreads[0])\n", + "!conda config --prepend channels bioconda\n", + "#!python -m pip install --user --upgrade pdf2image\n", + "#from pdf2image import convert_from_path, convert_from_bytes\n", + "!conda install -y -c bioconda samtools deeptools igv macs2\n", + "#!python -m pip install --user --upgrade macs3\n", + "#!conda install -y -c maximinio macs3 \n", + "!python -m pip install --user --upgrade numpy numpydoc\n", + "!pip install jupyterquiz\n", + "!pip install --user igv-notebook\n", + "import igv_notebook\n", + "from jupyterquiz import display_quiz\n", + "from IPython.display import IFrame\n", + "from IPython.display import display\n", + "from IPython.display import Image\n", + "import pandas as pd" + ] + }, + { + "cell_type": "markdown", + "id": "54f8e28a-543c-4eb9-8c6a-6107ce0613a8", + "metadata": {}, + "source": [ + "## Setup FileSystem\n", + "Now lets create some folders to stay organized and copy over our prepared fastq files. We're going to create a directory called \"Tutorial1\" which we'll use for this module. We'll then create subfolders for our InputFiles and for the files that we'll be creating during this module. We'll also copy over the fasta file for chromosome 4 as well as some bowtie2 index files (don't worry we'll teach you how to create these index files)." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "8a730ba8-82e0-4ab2-a0ef-118a6910cc92", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/home/jupyter\n", + "Copying gs://unmc_atac_data_examples/Tutorial2/images/Peak.jpg...\n", + "Copying gs://unmc_atac_data_examples/Tutorial2/images/ATACseqWorkflowLesson2.jpg...\n", + "Copying gs://unmc_atac_data_examples/Tutorial2/images/BPMnorm.json... \n", + "Copying gs://unmc_atac_data_examples/Tutorial2/images/InsertSizeQuiz.json... \n", + "Copying gs://unmc_atac_data_examples/Tutorial2/images/adapterinsert9bp.jpg... \n", + "Copying gs://unmc_atac_data_examples/Tutorial2/images/igv.jpg... \n", + "Copying gs://unmc_atac_data_examples/Tutorial2/images/samformat.jpg... \n", + "Copying gs://unmc_atac_data_examples/Tutorial2/images/sizeProfile.jpg... \n", + "Copying gs://unmc_atac_data_examples/Tutorial2/Annotations/hg38_genes_chr4.bed...\n", + "Copying gs://unmc_atac_data_examples/Tutorial2/InputFiles/Mutant_dedup.bam... \n", + "Copying gs://unmc_atac_data_examples/Tutorial2/InputFiles/CTL_dedup.bam... \n", + "- [2/2 files][ 42.3 MiB/ 42.3 MiB] 100% Done \n", + "Operation completed over 2 objects/42.3 MiB. \n" + ] + } + ], + "source": [ + "#These commands create our directory structure.\n", + "!cd $HOMEDIR\n", + "!mkdir -p Tutorial2\n", + "!mkdir -p Tutorial2/InputFiles\n", + "!mkdir -p Tutorial2/GenomeAnnotations\n", + "!mkdir -p Tutorial2/BigWigFiles\n", + "!mkdir -p Tutorial2/Peaks\n", + "!mkdir -p Tutorial2/LessonImages\n", + "!mkdir -p Tutorial2/Plots\n", + "!cd ./Tutorial2\n", + "!echo $PWD\n", + "\n", + "#These commands help identify the google cloud storage bucket where the example files are held.\n", + "project_id = \"nosi-unmc-seq\"\n", + "original_bucket = \"gs://unmc_atac_data_examples/Tutorial2\"\n", + "!gsutil -m cp $original_bucket/images/* Tutorial2/LessonImages\n", + "!gsutil -m cp $original_bucket/Annotations/* Tutorial2/GenomeAnnotations\n", + "#This command copies our example files to the Tutorial1/Inputfiles folder that we created above.\n", + "! gsutil -m cp $original_bucket/InputFiles/*bam Tutorial2/InputFiles\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "51fc4b08-4f02-4f49-9a8b-48b02a122455", + "metadata": {}, + "source": [ + "\n", + "### OK\n", + "Let's make sure that the files copied correctly. You should see 2 .bam files after running the following command:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "bce79afb-044f-45da-b7e4-e9a5f93dd1c2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CTL_Nucleosomal.bam CTL_shift.bam\t Mutant_dedup.bam.bai\n", + "CTL_THSS.bam\t Mutant_Nucleosomal.bam Mutant_shift.bam\n", + "CTL_dedup.bam\t Mutant_THSS.bam\n", + "CTL_dedup.bam.bai Mutant_dedup.bam\n" + ] + } + ], + "source": [ + "!ls Tutorial2/InputFiles\n" + ] + }, + { + "cell_type": "markdown", + "id": "cf7aea89-8610-4430-a802-6f7d387deb8b", + "metadata": {}, + "source": [ + "
\n", + "STEP2: Visualization\n", + "
\n", + "Files in sam/bam format contain a lot of information including the original sequence of the reads, quality scores, and their corresponding chromosomal coordinates.\n", + "\n", + "\"Drawing\"\n", + "\n", + "### Please view this [site](https://www.samformat.info/sam-format-flag) for a more complete description of sam format and to see what the various sam flag values mean.\n", + "\n", + "Let's view the first few lines of one of our bam files:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "a51f1ba8-3bf0-4715-bb97-4a029352a3cd", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SRR1944627.37127681\t99\tchr4\t39845\t31\t50M\t=\t39881\t86\tATCTTTGTGGCATTCTCTGTATTTCCTGAATTTGAATGTTGGCCTGCCTT\tCCCFFFFFHHHHHJJJJJJJJJJJJJJJJJJIJIIIJJIJJJJJJJJJJJ\tMD:Z:50\tPG:Z:MarkDuplicates\tXG:i:0\tNM:i:0\tXM:i:0\tXN:i:0\tXO:i:0\tAS:i:0\tXS:i:0\tYS:i:0\tYT:Z:CP\n", + "SRR1944627.37127681\t147\tchr4\t39881\t31\t50M\t=\t39845\t-86\tTGTTGGCCTGCCTTGCTAGGTTGGGAAAGTTCTCCTGGATAATATCCTGA\tHEJJJIJJJJJJJJHJJJJJJIJJJJJJIJJIJJJJJHHHHHFFFFFCCC\tMD:Z:50\tPG:Z:MarkDuplicates\tXG:i:0\tNM:i:0\tXM:i:0\tXN:i:0\tXO:i:0\tAS:i:0\tXS:i:0\tYS:i:0\tYT:Z:CP\n", + "SRR1944627.50776065\t99\tchr4\t98978\t11\t49M\t=\t99304\t376\tGAGTCTCACTCTGTCACCCAGGCTGGAGTGCAGTGGCACGATCTCGGCT\t@C@FFFFFHHGHGHIIJJJJIGIBHEIICFCHGEHJGIJIHCHIIJGII\tMD:Z:49\tPG:Z:MarkDuplicates\tXG:i:0\tNM:i:0\tXM:i:0\tXN:i:0\tXO:i:0\tAS:i:0\tXS:i:0\tYS:i:-12\tYT:Z:CP\n", + "samtools view: writing to standard output failed: Broken pipe\n", + "samtools view: error closing standard output: -1\n" + ] + } + ], + "source": [ + "!samtools view Tutorial2/InputFiles/CTL_dedup.bam | head -3" + ] + }, + { + "cell_type": "markdown", + "id": "a39c3c75-9011-4a9e-a60e-bb8c503405bb", + "metadata": {}, + "source": [ + "While we can see the coordinates of each read, we will need a better way of visualizing the results. In this step we will create a binary file that summarizes the pileup of reads at basepair along our genome, in [bigwig](http://genome.ucsc.edu/goldenPath/help/bigWig.html) format. \n", + "\n", + "To create the bigwig files let's use the command bamCoverage, part of the [deeptools](https://deeptools.readthedocs.io/en/develop/) package." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "f78e9802-ddd1-4abb-9bbf-3cc10e5d5d90", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "done\n" + ] + } + ], + "source": [ + "# First we need to create an index of our bam file.\n", + "!samtools index Tutorial2/InputFiles/CTL_dedup.bam\n", + "\n", + "# Then we can create a bigwig file of the control sample.\n", + "!bamCoverage -b Tutorial2/InputFiles/CTL_dedup.bam -o Tutorial2/BigWigFiles/Control.bw -bs 1 -p $numthreadsint --normalizeUsing BPM 2> Tutorial2/BigWigFiles/bamCovLog_ctl.txt\n", + "\n", + "# Now let's rerun the commands for our mutant sample.\n", + "!samtools index Tutorial2/InputFiles/Mutant_dedup.bam\n", + "!bamCoverage -b Tutorial2/InputFiles/Mutant_dedup.bam -o Tutorial2/BigWigFiles/Mutant.bw -bs 1 -p $numthreadsint --normalizeUsing BPM 2> Tutorial2/BigWigFiles/bamCovLog_mut.txt\n", + "\n", + "print(\"done\")" + ] + }, + { + "cell_type": "markdown", + "id": "744e8b64-947b-43f4-9bb0-51bf42972bc3", + "metadata": {}, + "source": [ + "In the above example we specify the bam file name after -b and the output file name after -o. \n", + "\n", + "We specified -bs 1, which tells bamCoverage the summarize the reads at every basepair; the default is to summarize at 50 bp resolution, but for ATAC-seq we find it useful to summarize the data at finer-scale. \n", + "\n", + "We also specified the number of threads to use with -p, which is held in a variable in our notebook.\n", + "\n", + "Lastly, we specified --normalizeUsing BPM. BPM stands for Bins Per Million mapped reads. What do you think this normalization does?" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "f2df8f13-211b-4584-8600-c5ab1edf8138", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display_quiz(\"Tutorial2/LessonImages/BPMnorm.json\")" + ] + }, + { + "cell_type": "markdown", + "id": "b228a0d9-0e88-490f-a53d-58ce20d40b64", + "metadata": {}, + "source": [ + "
\n", + "Genome Browser\n", + "
\n", + "\n", + "Now that we have our bigwig files, we can visualize the signal in a genome browser. We'll use [igv](https://igv.org/) in this example. \n" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "4611752a-36fe-4b76-8fc1-5764a69e74d8", + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "!function (global, factory) {window.igv = factory()}(this,(function(){\"use strict\";\n", + "/*!\n", + " * jQuery JavaScript Library v3.3.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector\n", + " * https://jquery.com/\n", + " *\n", + " * Includes Sizzle.js\n", + " * https://sizzlejs.com/\n", + " *\n", + " * Copyright JS Foundation and other contributors\n", + " * Released under the MIT license\n", + " * https://jquery.org/license\n", + " *\n", + " * Date: 2018-01-20T17:24Z\n", + " */var t=[],e=window.document,n=Object.getPrototypeOf,r=t.slice,i=t.concat,o=t.push,s=t.indexOf,a={},c=a.toString,l=a.hasOwnProperty,h=l.toString,u=h.call(Object),f={},d=function(t){return\"function\"==typeof t&&\"number\"!=typeof t.nodeType},p=function(t){return null!=t&&t===t.window},g={type:!0,src:!0,noModule:!0};function m(t,n,r){var i,o=(n=n||e).createElement(\"script\");if(o.text=t,r)for(i in g)r[i]&&(o[i]=r[i]);n.head.appendChild(o).parentNode.removeChild(o)}function v(t){return null==t?t+\"\":\"object\"==typeof t||\"function\"==typeof t?a[c.call(t)]||\"object\":typeof t}var b=\"3.3.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector\",w=function(t,e){return new w.fn.init(t,e)},y=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;function x(t){var e=!!t&&\"length\"in t&&t.length,n=v(t);return!d(t)&&!p(t)&&(\"array\"===n||0===e||\"number\"==typeof e&&e>0&&e-1 in t)}w.fn=w.prototype={jquery:b,constructor:w,length:0,toArray:function(){return r.call(this)},get:function(t){return null==t?r.call(this):t<0?this[t+this.length]:this[t]},pushStack:function(t){var e=w.merge(this.constructor(),t);return e.prevObject=this,e},each:function(t){return w.each(this,t)},map:function(t){return this.pushStack(w.map(this,(function(e,n){return t.call(e,n,e)})))},slice:function(){return this.pushStack(r.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(t){var e=this.length,n=+t+(t<0?e:0);return this.pushStack(n>=0&&n+~]|[\\\\x20\\\\t\\\\r\\\\n\\\\f])[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\"),q=new RegExp(\"=[\\\\x20\\\\t\\\\r\\\\n\\\\f]*([^\\\\]'\\\"]*?)[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\\\\]\",\"g\"),W=new RegExp(z),$=new RegExp(\"^\"+D+\"$\"),G={ID:new RegExp(\"^#(\"+D+\")\"),CLASS:new RegExp(\"^\\\\.(\"+D+\")\"),TAG:new RegExp(\"^(\"+D+\"|[*])\"),ATTR:new RegExp(\"^\"+B),PSEUDO:new RegExp(\"^\"+z),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\([\\\\x20\\\\t\\\\r\\\\n\\\\f]*(even|odd|(([+-]|)(\\\\d*)n|)[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(?:([+-]|)[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(\\\\d+)|))[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+O+\")$\",\"i\"),needsContext:new RegExp(\"^[\\\\x20\\\\t\\\\r\\\\n\\\\f]*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\([\\\\x20\\\\t\\\\r\\\\n\\\\f]*((?:-\\\\d)?\\\\d*)[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\\\\)|)(?=[^-]|$)\",\"i\")},Z=/^(?:input|select|textarea|button)$/i,X=/^h\\d$/i,Y=/^[^{]+\\{\\s*\\[native \\w/,K=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,Q=/[+~]/,J=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}[\\\\x20\\\\t\\\\r\\\\n\\\\f]?|([\\\\x20\\\\t\\\\r\\\\n\\\\f])|.)\",\"ig\"),tt=function(t,e,n){var r=\"0x\"+e-65536;return r!=r||n?e:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},et=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,nt=function(t,e){return e?\"\\0\"===t?\"�\":t.slice(0,-1)+\"\\\\\"+t.charCodeAt(t.length-1).toString(16)+\" \":\"\\\\\"+t},rt=function(){f()},it=vt((function(t){return!0===t.disabled&&(\"form\"in t||\"label\"in t)}),{dir:\"parentNode\",next:\"legend\"});try{I.apply(L=N.call(x.childNodes),x.childNodes),L[x.childNodes.length].nodeType}catch(t){I={apply:L.length?function(t,e){R.apply(t,N.call(e))}:function(t,e){for(var n=t.length,r=0;t[n++]=e[r++];);t.length=n-1}}}function ot(t,e,r,i){var o,a,l,h,u,p,v,b=e&&e.ownerDocument,_=e?e.nodeType:9;if(r=r||[],\"string\"!=typeof t||!t||1!==_&&9!==_&&11!==_)return r;if(!i&&((e?e.ownerDocument||e:x)!==d&&f(e),e=e||d,g)){if(11!==_&&(u=K.exec(t)))if(o=u[1]){if(9===_){if(!(l=e.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(b&&(l=b.getElementById(o))&&w(e,l)&&l.id===o)return r.push(l),r}else{if(u[2])return I.apply(r,e.getElementsByTagName(t)),r;if((o=u[3])&&n.getElementsByClassName&&e.getElementsByClassName)return I.apply(r,e.getElementsByClassName(o)),r}if(n.qsa&&!E[t+\" \"]&&(!m||!m.test(t))){if(1!==_)b=e,v=t;else if(\"object\"!==e.nodeName.toLowerCase()){for((h=e.getAttribute(\"id\"))?h=h.replace(et,nt):e.setAttribute(\"id\",h=y),a=(p=s(t)).length;a--;)p[a]=\"#\"+h+\" \"+mt(p[a]);v=p.join(\",\"),b=Q.test(t)&&pt(e.parentNode)||e}if(v)try{return I.apply(r,b.querySelectorAll(v)),r}catch(t){}finally{h===y&&e.removeAttribute(\"id\")}}}return c(t.replace(V,\"$1\"),e,r,i)}function st(){var t=[];return function e(n,i){return t.push(n+\" \")>r.cacheLength&&delete e[t.shift()],e[n+\" \"]=i}}function at(t){return t[y]=!0,t}function ct(t){var e=d.createElement(\"fieldset\");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function lt(t,e){var n=e&&t,r=n&&1===t.nodeType&&1===e.nodeType&&t.sourceIndex-e.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===e)return-1;return t?1:-1}function ht(t){return function(e){return\"input\"===e.nodeName.toLowerCase()&&e.type===t}}function ut(t){return function(e){var n=e.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&e.type===t}}function ft(t){return function(e){return\"form\"in e?e.parentNode&&!1===e.disabled?\"label\"in e?\"label\"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&it(e)===t:e.disabled===t:\"label\"in e&&e.disabled===t}}function dt(t){return at((function(e){return e=+e,at((function(n,r){for(var i,o=t([],n.length,e),s=o.length;s--;)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))}))}))}function pt(t){return t&&void 0!==t.getElementsByTagName&&t}for(e in n=ot.support={},o=ot.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&\"HTML\"!==e.nodeName},f=ot.setDocument=function(t){var e,i,s=t?t.ownerDocument||t:x;return s!==d&&9===s.nodeType&&s.documentElement?(p=(d=s).documentElement,g=!o(d),x!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener(\"unload\",rt,!1):i.attachEvent&&i.attachEvent(\"onunload\",rt)),n.attributes=ct((function(t){return t.className=\"i\",!t.getAttribute(\"className\")})),n.getElementsByTagName=ct((function(t){return t.appendChild(d.createComment(\"\")),!t.getElementsByTagName(\"*\").length})),n.getElementsByClassName=Y.test(d.getElementsByClassName),n.getById=ct((function(t){return p.appendChild(t).id=y,!d.getElementsByName||!d.getElementsByName(y).length})),n.getById?(r.filter.ID=function(t){var e=t.replace(J,tt);return function(t){return t.getAttribute(\"id\")===e}},r.find.ID=function(t,e){if(void 0!==e.getElementById&&g){var n=e.getElementById(t);return n?[n]:[]}}):(r.filter.ID=function(t){var e=t.replace(J,tt);return function(t){var n=void 0!==t.getAttributeNode&&t.getAttributeNode(\"id\");return n&&n.value===e}},r.find.ID=function(t,e){if(void 0!==e.getElementById&&g){var n,r,i,o=e.getElementById(t);if(o){if((n=o.getAttributeNode(\"id\"))&&n.value===t)return[o];for(i=e.getElementsByName(t),r=0;o=i[r++];)if((n=o.getAttributeNode(\"id\"))&&n.value===t)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(t,e){return void 0!==e.getElementsByTagName?e.getElementsByTagName(t):n.qsa?e.querySelectorAll(t):void 0}:function(t,e){var n,r=[],i=0,o=e.getElementsByTagName(t);if(\"*\"===t){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(t,e){if(void 0!==e.getElementsByClassName&&g)return e.getElementsByClassName(t)},v=[],m=[],(n.qsa=Y.test(d.querySelectorAll))&&(ct((function(t){p.appendChild(t).innerHTML=\"\",t.querySelectorAll(\"[msallowcapture^='']\").length&&m.push(\"[*^$]=[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(?:''|\\\"\\\")\"),t.querySelectorAll(\"[selected]\").length||m.push(\"\\\\[[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(?:value|\"+O+\")\"),t.querySelectorAll(\"[id~=\"+y+\"-]\").length||m.push(\"~=\"),t.querySelectorAll(\":checked\").length||m.push(\":checked\"),t.querySelectorAll(\"a#\"+y+\"+*\").length||m.push(\".#.+[+~]\")})),ct((function(t){t.innerHTML=\"\";var e=d.createElement(\"input\");e.setAttribute(\"type\",\"hidden\"),t.appendChild(e).setAttribute(\"name\",\"D\"),t.querySelectorAll(\"[name=d]\").length&&m.push(\"name[\\\\x20\\\\t\\\\r\\\\n\\\\f]*[*^$|!~]?=\"),2!==t.querySelectorAll(\":enabled\").length&&m.push(\":enabled\",\":disabled\"),p.appendChild(t).disabled=!0,2!==t.querySelectorAll(\":disabled\").length&&m.push(\":enabled\",\":disabled\"),t.querySelectorAll(\"*,:x\"),m.push(\",.*:\")}))),(n.matchesSelector=Y.test(b=p.matches||p.webkitMatchesSelector||p.mozMatchesSelector||p.oMatchesSelector||p.msMatchesSelector))&&ct((function(t){n.disconnectedMatch=b.call(t,\"*\"),b.call(t,\"[s!='']:x\"),v.push(\"!=\",z)})),m=m.length&&new RegExp(m.join(\"|\")),v=v.length&&new RegExp(v.join(\"|\")),e=Y.test(p.compareDocumentPosition),w=e||Y.test(p.contains)?function(t,e){var n=9===t.nodeType?t.documentElement:t,r=e&&e.parentNode;return t===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):t.compareDocumentPosition&&16&t.compareDocumentPosition(r)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},A=e?function(t,e){if(t===e)return u=!0,0;var r=!t.compareDocumentPosition-!e.compareDocumentPosition;return r||(1&(r=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1)||!n.sortDetached&&e.compareDocumentPosition(t)===r?t===d||t.ownerDocument===x&&w(x,t)?-1:e===d||e.ownerDocument===x&&w(x,e)?1:h?P(h,t)-P(h,e):0:4&r?-1:1)}:function(t,e){if(t===e)return u=!0,0;var n,r=0,i=t.parentNode,o=e.parentNode,s=[t],a=[e];if(!i||!o)return t===d?-1:e===d?1:i?-1:o?1:h?P(h,t)-P(h,e):0;if(i===o)return lt(t,e);for(n=t;n=n.parentNode;)s.unshift(n);for(n=e;n=n.parentNode;)a.unshift(n);for(;s[r]===a[r];)r++;return r?lt(s[r],a[r]):s[r]===x?-1:a[r]===x?1:0},d):d},ot.matches=function(t,e){return ot(t,null,null,e)},ot.matchesSelector=function(t,e){if((t.ownerDocument||t)!==d&&f(t),e=e.replace(q,\"='$1']\"),n.matchesSelector&&g&&!E[e+\" \"]&&(!v||!v.test(e))&&(!m||!m.test(e)))try{var r=b.call(t,e);if(r||n.disconnectedMatch||t.document&&11!==t.document.nodeType)return r}catch(t){}return ot(e,d,null,[t]).length>0},ot.contains=function(t,e){return(t.ownerDocument||t)!==d&&f(t),w(t,e)},ot.attr=function(t,e){(t.ownerDocument||t)!==d&&f(t);var i=r.attrHandle[e.toLowerCase()],o=i&&T.call(r.attrHandle,e.toLowerCase())?i(t,e,!g):void 0;return void 0!==o?o:n.attributes||!g?t.getAttribute(e):(o=t.getAttributeNode(e))&&o.specified?o.value:null},ot.escape=function(t){return(t+\"\").replace(et,nt)},ot.error=function(t){throw new Error(\"Syntax error, unrecognized expression: \"+t)},ot.uniqueSort=function(t){var e,r=[],i=0,o=0;if(u=!n.detectDuplicates,h=!n.sortStable&&t.slice(0),t.sort(A),u){for(;e=t[o++];)e===t[o]&&(i=r.push(o));for(;i--;)t.splice(r[i],1)}return h=null,t},i=ot.getText=function(t){var e,n=\"\",r=0,o=t.nodeType;if(o){if(1===o||9===o||11===o){if(\"string\"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)n+=i(t)}else if(3===o||4===o)return t.nodeValue}else for(;e=t[r++];)n+=i(e);return n},r=ot.selectors={cacheLength:50,createPseudo:at,match:G,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(J,tt),t[3]=(t[3]||t[4]||t[5]||\"\").replace(J,tt),\"~=\"===t[2]&&(t[3]=\" \"+t[3]+\" \"),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),\"nth\"===t[1].slice(0,3)?(t[3]||ot.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*(\"even\"===t[3]||\"odd\"===t[3])),t[5]=+(t[7]+t[8]||\"odd\"===t[3])):t[3]&&ot.error(t[0]),t},PSEUDO:function(t){var e,n=!t[6]&&t[2];return G.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||\"\":n&&W.test(n)&&(e=s(n,!0))&&(e=n.indexOf(\")\",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(J,tt).toLowerCase();return\"*\"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=S[t+\" \"];return e||(e=new RegExp(\"(^|[\\\\x20\\\\t\\\\r\\\\n\\\\f])\"+t+\"(\"+F+\"|$)\"))&&S(t,(function(t){return e.test(\"string\"==typeof t.className&&t.className||void 0!==t.getAttribute&&t.getAttribute(\"class\")||\"\")}))},ATTR:function(t,e,n){return function(r){var i=ot.attr(r,t);return null==i?\"!=\"===e:!e||(i+=\"\",\"=\"===e?i===n:\"!=\"===e?i!==n:\"^=\"===e?n&&0===i.indexOf(n):\"*=\"===e?n&&i.indexOf(n)>-1:\"$=\"===e?n&&i.slice(-n.length)===n:\"~=\"===e?(\" \"+i.replace(H,\" \")+\" \").indexOf(n)>-1:\"|=\"===e&&(i===n||i.slice(0,n.length+1)===n+\"-\"))}},CHILD:function(t,e,n,r,i){var o=\"nth\"!==t.slice(0,3),s=\"last\"!==t.slice(-4),a=\"of-type\"===e;return 1===r&&0===i?function(t){return!!t.parentNode}:function(e,n,c){var l,h,u,f,d,p,g=o!==s?\"nextSibling\":\"previousSibling\",m=e.parentNode,v=a&&e.nodeName.toLowerCase(),b=!c&&!a,w=!1;if(m){if(o){for(;g;){for(f=e;f=f[g];)if(a?f.nodeName.toLowerCase()===v:1===f.nodeType)return!1;p=g=\"only\"===t&&!p&&\"nextSibling\"}return!0}if(p=[s?m.firstChild:m.lastChild],s&&b){for(w=(d=(l=(h=(u=(f=m)[y]||(f[y]={}))[f.uniqueID]||(u[f.uniqueID]={}))[t]||[])[0]===_&&l[1])&&l[2],f=d&&m.childNodes[d];f=++d&&f&&f[g]||(w=d=0)||p.pop();)if(1===f.nodeType&&++w&&f===e){h[t]=[_,d,w];break}}else if(b&&(w=d=(l=(h=(u=(f=e)[y]||(f[y]={}))[f.uniqueID]||(u[f.uniqueID]={}))[t]||[])[0]===_&&l[1]),!1===w)for(;(f=++d&&f&&f[g]||(w=d=0)||p.pop())&&((a?f.nodeName.toLowerCase()!==v:1!==f.nodeType)||!++w||(b&&((h=(u=f[y]||(f[y]={}))[f.uniqueID]||(u[f.uniqueID]={}))[t]=[_,w]),f!==e)););return(w-=i)===r||w%r==0&&w/r>=0}}},PSEUDO:function(t,e){var n,i=r.pseudos[t]||r.setFilters[t.toLowerCase()]||ot.error(\"unsupported pseudo: \"+t);return i[y]?i(e):i.length>1?(n=[t,t,\"\",e],r.setFilters.hasOwnProperty(t.toLowerCase())?at((function(t,n){for(var r,o=i(t,e),s=o.length;s--;)t[r=P(t,o[s])]=!(n[r]=o[s])})):function(t){return i(t,0,n)}):i}},pseudos:{not:at((function(t){var e=[],n=[],r=a(t.replace(V,\"$1\"));return r[y]?at((function(t,e,n,i){for(var o,s=r(t,null,i,[]),a=t.length;a--;)(o=s[a])&&(t[a]=!(e[a]=o))})):function(t,i,o){return e[0]=t,r(e,null,o,n),e[0]=null,!n.pop()}})),has:at((function(t){return function(e){return ot(t,e).length>0}})),contains:at((function(t){return t=t.replace(J,tt),function(e){return(e.textContent||e.innerText||i(e)).indexOf(t)>-1}})),lang:at((function(t){return $.test(t||\"\")||ot.error(\"unsupported lang: \"+t),t=t.replace(J,tt).toLowerCase(),function(e){var n;do{if(n=g?e.lang:e.getAttribute(\"xml:lang\")||e.getAttribute(\"lang\"))return(n=n.toLowerCase())===t||0===n.indexOf(t+\"-\")}while((e=e.parentNode)&&1===e.nodeType);return!1}})),target:function(e){var n=t.location&&t.location.hash;return n&&n.slice(1)===e.id},root:function(t){return t===p},focus:function(t){return t===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:ft(!1),disabled:ft(!0),checked:function(t){var e=t.nodeName.toLowerCase();return\"input\"===e&&!!t.checked||\"option\"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,!0===t.selected},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!r.pseudos.empty(t)},header:function(t){return X.test(t.nodeName)},input:function(t){return Z.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return\"input\"===e&&\"button\"===t.type||\"button\"===e},text:function(t){var e;return\"input\"===t.nodeName.toLowerCase()&&\"text\"===t.type&&(null==(e=t.getAttribute(\"type\"))||\"text\"===e.toLowerCase())},first:dt((function(){return[0]})),last:dt((function(t,e){return[e-1]})),eq:dt((function(t,e,n){return[n<0?n+e:n]})),even:dt((function(t,e){for(var n=0;n=0;)t.push(r);return t})),gt:dt((function(t,e,n){for(var r=n<0?n+e:n;++r1?function(e,n,r){for(var i=t.length;i--;)if(!t[i](e,n,r))return!1;return!0}:t[0]}function wt(t,e,n,r,i){for(var o,s=[],a=0,c=t.length,l=null!=e;a-1&&(o[l]=!(s[l]=u))}}else v=wt(v===s?v.splice(p,v.length):v),i?i(null,s,v,c):I.apply(s,v)}))}function xt(t){for(var e,n,i,o=t.length,s=r.relative[t[0].type],a=s||r.relative[\" \"],c=s?1:0,h=vt((function(t){return t===e}),a,!0),u=vt((function(t){return P(e,t)>-1}),a,!0),f=[function(t,n,r){var i=!s&&(r||n!==l)||((e=n).nodeType?h(t,n,r):u(t,n,r));return e=null,i}];c1&&bt(f),c>1&&mt(t.slice(0,c-1).concat({value:\" \"===t[c-2].type?\"*\":\"\"})).replace(V,\"$1\"),n,c0,i=t.length>0,o=function(o,s,a,c,h){var u,p,m,v=0,b=\"0\",w=o&&[],y=[],x=l,k=o||i&&r.find.TAG(\"*\",h),S=_+=null==x?1:Math.random()||.1,C=k.length;for(h&&(l=s===d||s||h);b!==C&&null!=(u=k[b]);b++){if(i&&u){for(p=0,s||u.ownerDocument===d||(f(u),a=!g);m=t[p++];)if(m(u,s||d,a)){c.push(u);break}h&&(_=S)}n&&((u=!m&&u)&&v--,o&&w.push(u))}if(v+=b,n&&b!==v){for(p=0;m=e[p++];)m(w,y,s,a);if(o){if(v>0)for(;b--;)w[b]||y[b]||(y[b]=M.call(c));y=wt(y)}I.apply(c,y),h&&!o&&y.length>0&&v+e.length>1&&ot.uniqueSort(c)}return h&&(_=S,l=x),w};return n?at(o):o}(o,i)),a.selector=t}return a},c=ot.select=function(t,e,n,i){var o,c,l,h,u,f=\"function\"==typeof t&&t,d=!i&&s(t=f.selector||t);if(n=n||[],1===d.length){if((c=d[0]=d[0].slice(0)).length>2&&\"ID\"===(l=c[0]).type&&9===e.nodeType&&g&&r.relative[c[1].type]){if(!(e=(r.find.ID(l.matches[0].replace(J,tt),e)||[])[0]))return n;f&&(e=e.parentNode),t=t.slice(c.shift().value.length)}for(o=G.needsContext.test(t)?0:c.length;o--&&(l=c[o],!r.relative[h=l.type]);)if((u=r.find[h])&&(i=u(l.matches[0].replace(J,tt),Q.test(c[0].type)&&pt(e.parentNode)||e))){if(c.splice(o,1),!(t=i.length&&mt(c)))return I.apply(n,i),n;break}}return(f||a(t,d))(i,e,!g,n,!e||Q.test(t)&&pt(e.parentNode)||e),n},n.sortStable=y.split(\"\").sort(A).join(\"\")===y,n.detectDuplicates=!!u,f(),ot}(window);w.find=_,w.expr=_.selectors,w.expr[\":\"]=w.expr.pseudos,w.uniqueSort=w.unique=_.uniqueSort,w.text=_.getText,w.isXMLDoc=_.isXML,w.contains=_.contains,w.escapeSelector=_.escape;var k=function(t,e,n){for(var r=[],i=void 0!==n;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(i&&w(t).is(n))break;r.push(t)}return r},S=function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n},C=w.expr.match.needsContext;function E(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()}var A=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function T(t,e,n){return d(e)?w.grep(t,(function(t,r){return!!e.call(t,r,t)!==n})):e.nodeType?w.grep(t,(function(t){return t===e!==n})):\"string\"!=typeof e?w.grep(t,(function(t){return s.call(e,t)>-1!==n})):w.filter(e,t,n)}w.filter=function(t,e,n){var r=e[0];return n&&(t=\":not(\"+t+\")\"),1===e.length&&1===r.nodeType?w.find.matchesSelector(r,t)?[r]:[]:w.find.matches(t,w.grep(e,(function(t){return 1===t.nodeType})))},w.fn.extend({find:function(t){var e,n,r=this.length,i=this;if(\"string\"!=typeof t)return this.pushStack(w(t).filter((function(){for(e=0;e1?w.uniqueSort(n):n},filter:function(t){return this.pushStack(T(this,t||[],!1))},not:function(t){return this.pushStack(T(this,t||[],!0))},is:function(t){return!!T(this,\"string\"==typeof t&&C.test(t)?w(t):t||[],!1).length}});var L,M=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,R=w.fn.init=function(t,n,r){var i,o;if(!t)return this;if(r=r||L,\"string\"==typeof t){if(!(i=\"<\"===t[0]&&\">\"===t[t.length-1]&&t.length>=3?[null,t,null]:M.exec(t))||!i[1]&&n)return!n||n.jquery?(n||r).find(t):this.constructor(n).find(t);if(i[1]){if(n=n instanceof w?n[0]:n,w.merge(this,w.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:e,!0)),A.test(i[1])&&w.isPlainObject(n))for(i in n)d(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}return(o=e.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return t.nodeType?(this[0]=t,this.length=1,this):d(t)?void 0!==r.ready?r.ready(t):t(w):w.makeArray(t,this)};R.prototype=w.fn,L=w(e);var I=/^(?:parents|prev(?:Until|All))/,N={children:!0,contents:!0,next:!0,prev:!0};function P(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}w.fn.extend({has:function(t){var e=w(t,this),n=e.length;return this.filter((function(){for(var t=0;t-1:1===n.nodeType&&w.find.matchesSelector(n,t))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(t){return t?\"string\"==typeof t?s.call(w(t),this[0]):s.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),w.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return k(t,\"parentNode\")},parentsUntil:function(t,e,n){return k(t,\"parentNode\",n)},next:function(t){return P(t,\"nextSibling\")},prev:function(t){return P(t,\"previousSibling\")},nextAll:function(t){return k(t,\"nextSibling\")},prevAll:function(t){return k(t,\"previousSibling\")},nextUntil:function(t,e,n){return k(t,\"nextSibling\",n)},prevUntil:function(t,e,n){return k(t,\"previousSibling\",n)},siblings:function(t){return S((t.parentNode||{}).firstChild,t)},children:function(t){return S(t.firstChild)},contents:function(t){return E(t,\"iframe\")?t.contentDocument:(E(t,\"template\")&&(t=t.content||t),w.merge([],t.childNodes))}},(function(t,e){w.fn[t]=function(n,r){var i=w.map(this,e,n);return\"Until\"!==t.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(i=w.filter(r,i)),this.length>1&&(N[t]||w.uniqueSort(i),I.test(t)&&i.reverse()),this.pushStack(i)}}));var O=/[^\\x20\\t\\r\\n\\f]+/g;function F(t){return t}function D(t){throw t}function B(t,e,n,r){var i;try{t&&d(i=t.promise)?i.call(t).done(e).fail(n):t&&d(i=t.then)?i.call(t,e,n):e.apply(void 0,[t].slice(r))}catch(t){n.apply(void 0,[t])}}w.Callbacks=function(t){t=\"string\"==typeof t?function(t){var e={};return w.each(t.match(O)||[],(function(t,n){e[n]=!0})),e}(t):w.extend({},t);var e,n,r,i,o=[],s=[],a=-1,c=function(){for(i=i||t.once,r=e=!0;s.length;a=-1)for(n=s.shift();++a-1;)o.splice(n,1),n<=a&&a--})),this},has:function(t){return t?w.inArray(t,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=s=[],o=n=\"\",this},disabled:function(){return!o},lock:function(){return i=s=[],n||e||(o=n=\"\"),this},locked:function(){return!!i},fireWith:function(t,n){return i||(n=[t,(n=n||[]).slice?n.slice():n],s.push(n),e||c()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},w.extend({Deferred:function(t){var e=[[\"notify\",\"progress\",w.Callbacks(\"memory\"),w.Callbacks(\"memory\"),2],[\"resolve\",\"done\",w.Callbacks(\"once memory\"),w.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",w.Callbacks(\"once memory\"),w.Callbacks(\"once memory\"),1,\"rejected\"]],n=\"pending\",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},catch:function(t){return r.then(null,t)},pipe:function(){var t=arguments;return w.Deferred((function(n){w.each(e,(function(e,r){var o=d(t[r[4]])&&t[r[4]];i[r[1]]((function(){var t=o&&o.apply(this,arguments);t&&d(t.promise)?t.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[r[0]+\"With\"](this,o?[t]:arguments)}))})),t=null})).promise()},then:function(t,n,r){var i=0;function o(t,e,n,r){return function(){var s=this,a=arguments,c=function(){var c,l;if(!(t=i&&(n!==D&&(s=void 0,a=[r]),e.rejectWith(s,a))}};t?l():(w.Deferred.getStackHook&&(l.stackTrace=w.Deferred.getStackHook()),window.setTimeout(l))}}return w.Deferred((function(i){e[0][3].add(o(0,i,d(r)?r:F,i.notifyWith)),e[1][3].add(o(0,i,d(t)?t:F)),e[2][3].add(o(0,i,d(n)?n:D))})).promise()},promise:function(t){return null!=t?w.extend(t,r):r}},i={};return w.each(e,(function(t,o){var s=o[2],a=o[5];r[o[1]]=s.add,a&&s.add((function(){n=a}),e[3-t][2].disable,e[3-t][3].disable,e[0][2].lock,e[0][3].lock),s.add(o[3].fire),i[o[0]]=function(){return i[o[0]+\"With\"](this===i?void 0:this,arguments),this},i[o[0]+\"With\"]=s.fireWith})),r.promise(i),t&&t.call(i,i),i},when:function(t){var e=arguments.length,n=e,i=Array(n),o=r.call(arguments),s=w.Deferred(),a=function(t){return function(n){i[t]=this,o[t]=arguments.length>1?r.call(arguments):n,--e||s.resolveWith(i,o)}};if(e<=1&&(B(t,s.done(a(n)).resolve,s.reject,!e),\"pending\"===s.state()||d(o[n]&&o[n].then)))return s.then();for(;n--;)B(o[n],a(n),s.reject);return s.promise()}});var z=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,e){window.console&&window.console.warn&&t&&z.test(t.name)&&window.console.warn(\"jQuery.Deferred exception: \"+t.message,t.stack,e)},w.readyException=function(t){window.setTimeout((function(){throw t}))};var H=w.Deferred();function V(){e.removeEventListener(\"DOMContentLoaded\",V),window.removeEventListener(\"load\",V),w.ready()}w.fn.ready=function(t){return H.then(t).catch((function(t){w.readyException(t)})),this},w.extend({isReady:!1,readyWait:1,ready:function(t){(!0===t?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==t&&--w.readyWait>0||H.resolveWith(e,[w]))}}),w.ready.then=H.then,\"complete\"===e.readyState||\"loading\"!==e.readyState&&!e.documentElement.doScroll?window.setTimeout(w.ready):(e.addEventListener(\"DOMContentLoaded\",V),window.addEventListener(\"load\",V));var j=function(t,e,n,r,i,o,s){var a=0,c=t.length,l=null==n;if(\"object\"===v(n))for(a in i=!0,n)j(t,e,a,n[a],!0,o,s);else if(void 0!==r&&(i=!0,d(r)||(s=!0),l&&(s?(e.call(t,r),e=null):(l=e,e=function(t,e,n){return l.call(w(t),n)})),e))for(;a1,null,!0)},removeData:function(t){return this.each((function(){Y.remove(this,t)}))}}),w.extend({queue:function(t,e,n){var r;if(t)return e=(e||\"fx\")+\"queue\",r=X.get(t,e),n&&(!r||Array.isArray(n)?r=X.access(t,e,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(t,e){e=e||\"fx\";var n=w.queue(t,e),r=n.length,i=n.shift(),o=w._queueHooks(t,e);\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===e&&n.unshift(\"inprogress\"),delete o.stop,i.call(t,(function(){w.dequeue(t,e)}),o)),!r&&o&&o.empty.fire()},_queueHooks:function(t,e){var n=e+\"queueHooks\";return X.get(t,n)||X.access(t,n,{empty:w.Callbacks(\"once memory\").add((function(){X.remove(t,[e+\"queue\",n])}))})}}),w.fn.extend({queue:function(t,e){var n=2;return\"string\"!=typeof t&&(e=t,t=\"fx\",n--),arguments.length\\x20\\t\\r\\n\\f]+)/i,ht=/^$|^module$|\\/(?:java|ecma)script/i,ut={option:[1,\"\"],thead:[1,\"\",\"
\"],col:[2,\"\",\"
\"],tr:[2,\"\",\"
\"],td:[3,\"\",\"
\"],_default:[0,\"\",\"\"]};function ft(t,e){var n;return n=void 0!==t.getElementsByTagName?t.getElementsByTagName(e||\"*\"):void 0!==t.querySelectorAll?t.querySelectorAll(e||\"*\"):[],void 0===e||e&&E(t,e)?w.merge([t],n):n}function dt(t,e){for(var n=0,r=t.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),s=ft(u.appendChild(o),\"script\"),l&&dt(s),n)for(h=0;o=s[h++];)ht.test(o.type||\"\")&&n.push(o);return u}!function(){var t=e.createDocumentFragment().appendChild(e.createElement(\"div\")),n=e.createElement(\"input\");n.setAttribute(\"type\",\"radio\"),n.setAttribute(\"checked\",\"checked\"),n.setAttribute(\"name\",\"t\"),t.appendChild(n),f.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML=\"\",f.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var mt=e.documentElement,vt=/^key/,bt=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,wt=/^([^.]*)(?:\\.(.+)|)/;function yt(){return!0}function xt(){return!1}function _t(){try{return e.activeElement}catch(t){}}function kt(t,e,n,r,i,o){var s,a;if(\"object\"==typeof e){for(a in\"string\"!=typeof n&&(r=r||n,n=void 0),e)kt(t,a,n,r,e[a],o);return t}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&(\"string\"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=xt;else if(!i)return t;return 1===o&&(s=i,i=function(t){return w().off(t),s.apply(this,arguments)},i.guid=s.guid||(s.guid=w.guid++)),t.each((function(){w.event.add(this,e,i,r,n)}))}w.event={global:{},add:function(t,e,n,r,i){var o,s,a,c,l,h,u,f,d,p,g,m=X.get(t);if(m)for(n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(mt,i),n.guid||(n.guid=w.guid++),(c=m.events)||(c=m.events={}),(s=m.handle)||(s=m.handle=function(e){return void 0!==w&&w.event.triggered!==e.type?w.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||\"\").match(O)||[\"\"]).length;l--;)d=g=(a=wt.exec(e[l])||[])[1],p=(a[2]||\"\").split(\".\").sort(),d&&(u=w.event.special[d]||{},d=(i?u.delegateType:u.bindType)||d,u=w.event.special[d]||{},h=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:p.join(\".\")},o),(f=c[d])||((f=c[d]=[]).delegateCount=0,u.setup&&!1!==u.setup.call(t,r,p,s)||t.addEventListener&&t.addEventListener(d,s)),u.add&&(u.add.call(t,h),h.handler.guid||(h.handler.guid=n.guid)),i?f.splice(f.delegateCount++,0,h):f.push(h),w.event.global[d]=!0)},remove:function(t,e,n,r,i){var o,s,a,c,l,h,u,f,d,p,g,m=X.hasData(t)&&X.get(t);if(m&&(c=m.events)){for(l=(e=(e||\"\").match(O)||[\"\"]).length;l--;)if(d=g=(a=wt.exec(e[l])||[])[1],p=(a[2]||\"\").split(\".\").sort(),d){for(u=w.event.special[d]||{},f=c[d=(r?u.delegateType:u.bindType)||d]||[],a=a[2]&&new RegExp(\"(^|\\\\.)\"+p.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),s=o=f.length;o--;)h=f[o],!i&&g!==h.origType||n&&n.guid!==h.guid||a&&!a.test(h.namespace)||r&&r!==h.selector&&(\"**\"!==r||!h.selector)||(f.splice(o,1),h.selector&&f.delegateCount--,u.remove&&u.remove.call(t,h));s&&!f.length&&(u.teardown&&!1!==u.teardown.call(t,p,m.handle)||w.removeEvent(t,d,m.handle),delete c[d])}else for(d in c)w.event.remove(t,d+e[l],n,r,!0);w.isEmptyObject(c)&&X.remove(t,\"handle events\")}},dispatch:function(t){var e,n,r,i,o,s,a=w.event.fix(t),c=new Array(arguments.length),l=(X.get(this,\"events\")||{})[a.type]||[],h=w.event.special[a.type]||{};for(c[0]=a,e=1;e=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(\"click\"!==t.type||!0!==l.disabled)){for(o=[],s={},n=0;n-1:w.find(i,this,null,[l]).length),s[i]&&o.push(r);o.length&&a.push({elem:l,handlers:o})}return l=this,c\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,Ct=/\\s*$/g;function Tt(t,e){return E(t,\"table\")&&E(11!==e.nodeType?e:e.firstChild,\"tr\")&&w(t).children(\"tbody\")[0]||t}function Lt(t){return t.type=(null!==t.getAttribute(\"type\"))+\"/\"+t.type,t}function Mt(t){return\"true/\"===(t.type||\"\").slice(0,5)?t.type=t.type.slice(5):t.removeAttribute(\"type\"),t}function Rt(t,e){var n,r,i,o,s,a,c,l;if(1===e.nodeType){if(X.hasData(t)&&(o=X.access(t),s=X.set(e,o),l=o.events))for(i in delete s.handle,s.events={},l)for(n=0,r=l[i].length;n1&&\"string\"==typeof v&&!f.checkClone&&Et.test(v))return t.each((function(i){var o=t.eq(i);b&&(e[0]=v.call(this,i,o.html())),Nt(o,e,n,r)}));if(p&&(s=(o=gt(e,t[0].ownerDocument,!1,t,r)).firstChild,1===o.childNodes.length&&(o=s),s||r)){for(c=(a=w.map(ft(o,\"script\"),Lt)).length;u\")},clone:function(t,e,n){var r,i,o,s,a=t.cloneNode(!0),c=w.contains(t.ownerDocument,t);if(!(f.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||w.isXMLDoc(t)))for(s=ft(a),r=0,i=(o=ft(t)).length;r0&&dt(s,!c&&ft(t,\"script\")),a},cleanData:function(t){for(var e,n,r,i=w.event.special,o=0;void 0!==(n=t[o]);o++)if(G(n)){if(e=n[X.expando]){if(e.events)for(r in e.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,e.handle);n[X.expando]=void 0}n[Y.expando]&&(n[Y.expando]=void 0)}}}),w.fn.extend({detach:function(t){return Pt(this,t,!0)},remove:function(t){return Pt(this,t)},text:function(t){return j(this,(function(t){return void 0===t?w.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)}))}),null,t,arguments.length)},append:function(){return Nt(this,arguments,(function(t){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Tt(this,t).appendChild(t)}))},prepend:function(){return Nt(this,arguments,(function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=Tt(this,t);e.insertBefore(t,e.firstChild)}}))},before:function(){return Nt(this,arguments,(function(t){this.parentNode&&this.parentNode.insertBefore(t,this)}))},after:function(){return Nt(this,arguments,(function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)}))},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(w.cleanData(ft(t,!1)),t.textContent=\"\");return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map((function(){return w.clone(this,t,e)}))},html:function(t){return j(this,(function(t){var e=this[0]||{},n=0,r=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if(\"string\"==typeof t&&!Ct.test(t)&&!ut[(lt.exec(t)||[\"\",\"\"])[1].toLowerCase()]){t=w.htmlPrefilter(t);try{for(;n=0&&(c+=Math.max(0,Math.ceil(t[\"offset\"+e[0].toUpperCase()+e.slice(1)]-o-c-a-.5))),c}function Kt(t,e,n){var r=Ft(t),i=Bt(t,e,r),o=\"border-box\"===w.css(t,\"boxSizing\",!1,r),s=o;if(Ot.test(i)){if(!n)return i;i=\"auto\"}return s=s&&(f.boxSizingReliable()||i===t.style[e]),(\"auto\"===i||!parseFloat(i)&&\"inline\"===w.css(t,\"display\",!1,r))&&(i=t[\"offset\"+e[0].toUpperCase()+e.slice(1)],s=!0),(i=parseFloat(i)||0)+Yt(t,e,n||(o?\"border\":\"content\"),s,r,i)+\"px\"}w.extend({cssHooks:{opacity:{get:function(t,e){if(e){var n=Bt(t,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(t,e,n,r){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var i,o,s,a=$(e),c=Ut.test(e),l=t.style;if(c||(e=Zt(a)),s=w.cssHooks[e]||w.cssHooks[a],void 0===n)return s&&\"get\"in s&&void 0!==(i=s.get(t,!1,r))?i:l[e];\"string\"===(o=typeof n)&&(i=et.exec(n))&&i[1]&&(n=function(t,e,n,r){var i,o,s=20,a=r?function(){return r.cur()}:function(){return w.css(t,e,\"\")},c=a(),l=n&&n[3]||(w.cssNumber[e]?\"\":\"px\"),h=(w.cssNumber[e]||\"px\"!==l&&+c)&&et.exec(w.css(t,e));if(h&&h[3]!==l){for(c/=2,l=l||h[3],h=+c||1;s--;)w.style(t,e,h+l),(1-o)*(1-(o=a()/c||.5))<=0&&(s=0),h/=o;h*=2,w.style(t,e,h+l),n=n||[]}return n&&(h=+h||+c||0,i=n[1]?h+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=h,r.end=i)),i}(t,e,i),o=\"number\"),null!=n&&n==n&&(\"number\"===o&&(n+=i&&i[3]||(w.cssNumber[a]?\"\":\"px\")),f.clearCloneStyle||\"\"!==n||0!==e.indexOf(\"background\")||(l[e]=\"inherit\"),s&&\"set\"in s&&void 0===(n=s.set(t,n,r))||(c?l.setProperty(e,n):l[e]=n))}},css:function(t,e,n,r){var i,o,s,a=$(e);return Ut.test(e)||(e=Zt(a)),(s=w.cssHooks[e]||w.cssHooks[a])&&\"get\"in s&&(i=s.get(t,!0,n)),void 0===i&&(i=Bt(t,e,r)),\"normal\"===i&&e in Wt&&(i=Wt[e]),\"\"===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each([\"height\",\"width\"],(function(t,e){w.cssHooks[e]={get:function(t,n,r){if(n)return!jt.test(w.css(t,\"display\"))||t.getClientRects().length&&t.getBoundingClientRect().width?Kt(t,e,r):it(t,qt,(function(){return Kt(t,e,r)}))},set:function(t,n,r){var i,o=Ft(t),s=\"border-box\"===w.css(t,\"boxSizing\",!1,o),a=r&&Yt(t,e,r,s,o);return s&&f.scrollboxSize()===o.position&&(a-=Math.ceil(t[\"offset\"+e[0].toUpperCase()+e.slice(1)]-parseFloat(o[e])-Yt(t,e,\"border\",!1,o)-.5)),a&&(i=et.exec(n))&&\"px\"!==(i[3]||\"px\")&&(t.style[e]=n,n=w.css(t,e)),Xt(0,n,a)}}})),w.cssHooks.marginLeft=zt(f.reliableMarginLeft,(function(t,e){if(e)return(parseFloat(Bt(t,\"marginLeft\"))||t.getBoundingClientRect().left-it(t,{marginLeft:0},(function(){return t.getBoundingClientRect().left})))+\"px\"})),w.each({margin:\"\",padding:\"\",border:\"Width\"},(function(t,e){w.cssHooks[t+e]={expand:function(n){for(var r=0,i={},o=\"string\"==typeof n?n.split(\" \"):[n];r<4;r++)i[t+nt[r]+e]=o[r]||o[r-2]||o[0];return i}},\"margin\"!==t&&(w.cssHooks[t+e].set=Xt)})),w.fn.extend({css:function(t,e){return j(this,(function(t,e,n){var r,i,o={},s=0;if(Array.isArray(e)){for(r=Ft(t),i=e.length;s1)}}),w.fn.delay=function(t,e){return t=w.fx&&w.fx.speeds[t]||t,e=e||\"fx\",this.queue(e,(function(e,n){var r=window.setTimeout(e,t);n.stop=function(){window.clearTimeout(r)}}))},Ht=e.createElement(\"input\"),Vt=e.createElement(\"select\").appendChild(e.createElement(\"option\")),Ht.type=\"checkbox\",f.checkOn=\"\"!==Ht.value,f.optSelected=Vt.selected,(Ht=e.createElement(\"input\")).value=\"t\",Ht.type=\"radio\",f.radioValue=\"t\"===Ht.value;var Qt,Jt=w.expr.attrHandle;w.fn.extend({attr:function(t,e){return j(this,w.attr,t,e,arguments.length>1)},removeAttr:function(t){return this.each((function(){w.removeAttr(this,t)}))}}),w.extend({attr:function(t,e,n){var r,i,o=t.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===t.getAttribute?w.prop(t,e,n):(1===o&&w.isXMLDoc(t)||(i=w.attrHooks[e.toLowerCase()]||(w.expr.match.bool.test(e)?Qt:void 0)),void 0!==n?null===n?void w.removeAttr(t,e):i&&\"set\"in i&&void 0!==(r=i.set(t,n,e))?r:(t.setAttribute(e,n+\"\"),n):i&&\"get\"in i&&null!==(r=i.get(t,e))?r:null==(r=w.find.attr(t,e))?void 0:r)},attrHooks:{type:{set:function(t,e){if(!f.radioValue&&\"radio\"===e&&E(t,\"input\")){var n=t.value;return t.setAttribute(\"type\",e),n&&(t.value=n),e}}}},removeAttr:function(t,e){var n,r=0,i=e&&e.match(O);if(i&&1===t.nodeType)for(;n=i[r++];)t.removeAttribute(n)}}),Qt={set:function(t,e,n){return!1===e?w.removeAttr(t,n):t.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\\w+/g),(function(t,e){var n=Jt[e]||w.find.attr;Jt[e]=function(t,e,r){var i,o,s=e.toLowerCase();return r||(o=Jt[s],Jt[s]=i,i=null!=n(t,e,r)?s:null,Jt[s]=o),i}}));var te=/^(?:input|select|textarea|button)$/i,ee=/^(?:a|area)$/i;function ne(t){return(t.match(O)||[]).join(\" \")}function re(t){return t.getAttribute&&t.getAttribute(\"class\")||\"\"}function ie(t){return Array.isArray(t)?t:\"string\"==typeof t&&t.match(O)||[]}w.fn.extend({prop:function(t,e){return j(this,w.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each((function(){delete this[w.propFix[t]||t]}))}}),w.extend({prop:function(t,e,n){var r,i,o=t.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(t)||(e=w.propFix[e]||e,i=w.propHooks[e]),void 0!==n?i&&\"set\"in i&&void 0!==(r=i.set(t,n,e))?r:t[e]=n:i&&\"get\"in i&&null!==(r=i.get(t,e))?r:t[e]},propHooks:{tabIndex:{get:function(t){var e=w.find.attr(t,\"tabindex\");return e?parseInt(e,10):te.test(t.nodeName)||ee.test(t.nodeName)&&t.href?0:-1}}},propFix:{for:\"htmlFor\",class:\"className\"}}),f.optSelected||(w.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex)}}),w.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],(function(){w.propFix[this.toLowerCase()]=this})),w.fn.extend({addClass:function(t){var e,n,r,i,o,s,a,c=0;if(d(t))return this.each((function(e){w(this).addClass(t.call(this,e,re(this)))}));if((e=ie(t)).length)for(;n=this[c++];)if(i=re(n),r=1===n.nodeType&&\" \"+ne(i)+\" \"){for(s=0;o=e[s++];)r.indexOf(\" \"+o+\" \")<0&&(r+=o+\" \");i!==(a=ne(r))&&n.setAttribute(\"class\",a)}return this},removeClass:function(t){var e,n,r,i,o,s,a,c=0;if(d(t))return this.each((function(e){w(this).removeClass(t.call(this,e,re(this)))}));if(!arguments.length)return this.attr(\"class\",\"\");if((e=ie(t)).length)for(;n=this[c++];)if(i=re(n),r=1===n.nodeType&&\" \"+ne(i)+\" \"){for(s=0;o=e[s++];)for(;r.indexOf(\" \"+o+\" \")>-1;)r=r.replace(\" \"+o+\" \",\" \");i!==(a=ne(r))&&n.setAttribute(\"class\",a)}return this},toggleClass:function(t,e){var n=typeof t,r=\"string\"===n||Array.isArray(t);return\"boolean\"==typeof e&&r?e?this.addClass(t):this.removeClass(t):d(t)?this.each((function(n){w(this).toggleClass(t.call(this,n,re(this),e),e)})):this.each((function(){var e,i,o,s;if(r)for(i=0,o=w(this),s=ie(t);e=s[i++];)o.hasClass(e)?o.removeClass(e):o.addClass(e);else void 0!==t&&\"boolean\"!==n||((e=re(this))&&X.set(this,\"__className__\",e),this.setAttribute&&this.setAttribute(\"class\",e||!1===t?\"\":X.get(this,\"__className__\")||\"\"))}))},hasClass:function(t){var e,n,r=0;for(e=\" \"+t+\" \";n=this[r++];)if(1===n.nodeType&&(\" \"+ne(re(n))+\" \").indexOf(e)>-1)return!0;return!1}});var oe=/\\r/g;w.fn.extend({val:function(t){var e,n,r,i=this[0];return arguments.length?(r=d(t),this.each((function(n){var i;1===this.nodeType&&(null==(i=r?t.call(this,n,w(this).val()):t)?i=\"\":\"number\"==typeof i?i+=\"\":Array.isArray(i)&&(i=w.map(i,(function(t){return null==t?\"\":t+\"\"}))),(e=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&\"set\"in e&&void 0!==e.set(this,i,\"value\")||(this.value=i))}))):i?(e=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&\"get\"in e&&void 0!==(n=e.get(i,\"value\"))?n:\"string\"==typeof(n=i.value)?n.replace(oe,\"\"):null==n?\"\":n:void 0}}),w.extend({valHooks:{option:{get:function(t){var e=w.find.attr(t,\"value\");return null!=e?e:ne(w.text(t))}},select:{get:function(t){var e,n,r,i=t.options,o=t.selectedIndex,s=\"select-one\"===t.type,a=s?null:[],c=s?o+1:i.length;for(r=o<0?c:s?o:0;r-1)&&(n=!0);return n||(t.selectedIndex=-1),o}}}}),w.each([\"radio\",\"checkbox\"],(function(){w.valHooks[this]={set:function(t,e){if(Array.isArray(e))return t.checked=w.inArray(w(t).val(),e)>-1}},f.checkOn||(w.valHooks[this].get=function(t){return null===t.getAttribute(\"value\")?\"on\":t.value})})),f.focusin=\"onfocusin\"in window;var se=/^(?:focusinfocus|focusoutblur)$/,ae=function(t){t.stopPropagation()};w.extend(w.event,{trigger:function(t,n,r,i){var o,s,a,c,h,u,f,g,m=[r||e],v=l.call(t,\"type\")?t.type:t,b=l.call(t,\"namespace\")?t.namespace.split(\".\"):[];if(s=g=a=r=r||e,3!==r.nodeType&&8!==r.nodeType&&!se.test(v+w.event.triggered)&&(v.indexOf(\".\")>-1&&(b=v.split(\".\"),v=b.shift(),b.sort()),h=v.indexOf(\":\")<0&&\"on\"+v,(t=t[w.expando]?t:new w.Event(v,\"object\"==typeof t&&t)).isTrigger=i?2:3,t.namespace=b.join(\".\"),t.rnamespace=t.namespace?new RegExp(\"(^|\\\\.)\"+b.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:w.makeArray(n,[t]),f=w.event.special[v]||{},i||!f.trigger||!1!==f.trigger.apply(r,n))){if(!i&&!f.noBubble&&!p(r)){for(c=f.delegateType||v,se.test(c+v)||(s=s.parentNode);s;s=s.parentNode)m.push(s),a=s;a===(r.ownerDocument||e)&&m.push(a.defaultView||a.parentWindow||window)}for(o=0;(s=m[o++])&&!t.isPropagationStopped();)g=s,t.type=o>1?c:f.bindType||v,(u=(X.get(s,\"events\")||{})[t.type]&&X.get(s,\"handle\"))&&u.apply(s,n),(u=h&&s[h])&&u.apply&&G(s)&&(t.result=u.apply(s,n),!1===t.result&&t.preventDefault());return t.type=v,i||t.isDefaultPrevented()||f._default&&!1!==f._default.apply(m.pop(),n)||!G(r)||h&&d(r[v])&&!p(r)&&((a=r[h])&&(r[h]=null),w.event.triggered=v,t.isPropagationStopped()&&g.addEventListener(v,ae),r[v](),t.isPropagationStopped()&&g.removeEventListener(v,ae),w.event.triggered=void 0,a&&(r[h]=a)),t.result}},simulate:function(t,e,n){var r=w.extend(new w.Event,n,{type:t,isSimulated:!0});w.event.trigger(r,null,e)}}),w.fn.extend({trigger:function(t,e){return this.each((function(){w.event.trigger(t,e,this)}))},triggerHandler:function(t,e){var n=this[0];if(n)return w.event.trigger(t,e,n,!0)}}),f.focusin||w.each({focus:\"focusin\",blur:\"focusout\"},(function(t,e){var n=function(t){w.event.simulate(e,t.target,w.event.fix(t))};w.event.special[e]={setup:function(){var r=this.ownerDocument||this,i=X.access(r,e);i||r.addEventListener(t,n,!0),X.access(r,e,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=X.access(r,e)-1;i?X.access(r,e,i):(r.removeEventListener(t,n,!0),X.remove(r,e))}}}));var ce,le=/\\[\\]$/,he=/\\r?\\n/g,ue=/^(?:submit|button|image|reset|file)$/i,fe=/^(?:input|select|textarea|keygen)/i;function de(t,e,n,r){var i;if(Array.isArray(e))w.each(e,(function(e,i){n||le.test(t)?r(t,i):de(t+\"[\"+(\"object\"==typeof i&&null!=i?e:\"\")+\"]\",i,n,r)}));else if(n||\"object\"!==v(e))r(t,e);else for(i in e)de(t+\"[\"+i+\"]\",e[i],n,r)}w.param=function(t,e){var n,r=[],i=function(t,e){var n=d(e)?e():e;r[r.length]=encodeURIComponent(t)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(Array.isArray(t)||t.jquery&&!w.isPlainObject(t))w.each(t,(function(){i(this.name,this.value)}));else for(n in t)de(n,t[n],e,i);return r.join(\"&\")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var t=w.prop(this,\"elements\");return t?w.makeArray(t):this})).filter((function(){var t=this.type;return this.name&&!w(this).is(\":disabled\")&&fe.test(this.nodeName)&&!ue.test(t)&&(this.checked||!ct.test(t))})).map((function(t,e){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,(function(t){return{name:e.name,value:t.replace(he,\"\\r\\n\")}})):{name:e.name,value:n.replace(he,\"\\r\\n\")}})).get()}}),w.fn.extend({wrapAll:function(t){var e;return this[0]&&(d(t)&&(t=t.call(this[0])),e=w(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map((function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t})).append(this)),this},wrapInner:function(t){return d(t)?this.each((function(e){w(this).wrapInner(t.call(this,e))})):this.each((function(){var e=w(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)}))},wrap:function(t){var e=d(t);return this.each((function(n){w(this).wrapAll(e?t.call(this,n):t)}))},unwrap:function(t){return this.parent(t).not(\"body\").each((function(){w(this).replaceWith(this.childNodes)})),this}}),w.expr.pseudos.hidden=function(t){return!w.expr.pseudos.visible(t)},w.expr.pseudos.visible=function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)},f.createHTMLDocument=((ce=e.implementation.createHTMLDocument(\"\").body).innerHTML=\"
\",2===ce.childNodes.length),w.parseHTML=function(t,n,r){return\"string\"!=typeof t?[]:(\"boolean\"==typeof n&&(r=n,n=!1),n||(f.createHTMLDocument?((i=(n=e.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href=e.location.href,n.head.appendChild(i)):n=e),s=!r&&[],(o=A.exec(t))?[n.createElement(o[1])]:(o=gt([t],n,s),s&&s.length&&w(s).remove(),w.merge([],o.childNodes)));var i,o,s},w.offset={setOffset:function(t,e,n){var r,i,o,s,a,c,l=w.css(t,\"position\"),h=w(t),u={};\"static\"===l&&(t.style.position=\"relative\"),a=h.offset(),o=w.css(t,\"top\"),c=w.css(t,\"left\"),(\"absolute\"===l||\"fixed\"===l)&&(o+c).indexOf(\"auto\")>-1?(s=(r=h.position()).top,i=r.left):(s=parseFloat(o)||0,i=parseFloat(c)||0),d(e)&&(e=e.call(t,n,w.extend({},a))),null!=e.top&&(u.top=e.top-a.top+s),null!=e.left&&(u.left=e.left-a.left+i),\"using\"in e?e.using.call(t,u):h.css(u)}},w.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each((function(e){w.offset.setOffset(this,t,e)}));var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var t,e,n,r=this[0],i={top:0,left:0};if(\"fixed\"===w.css(r,\"position\"))e=r.getBoundingClientRect();else{for(e=this.offset(),n=r.ownerDocument,t=r.offsetParent||n.documentElement;t&&(t===n.body||t===n.documentElement)&&\"static\"===w.css(t,\"position\");)t=t.parentNode;t&&t!==r&&1===t.nodeType&&((i=w(t).offset()).top+=w.css(t,\"borderTopWidth\",!0),i.left+=w.css(t,\"borderLeftWidth\",!0))}return{top:e.top-i.top-w.css(r,\"marginTop\",!0),left:e.left-i.left-w.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map((function(){for(var t=this.offsetParent;t&&\"static\"===w.css(t,\"position\");)t=t.offsetParent;return t||mt}))}}),w.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},(function(t,e){var n=\"pageYOffset\"===e;w.fn[t]=function(r){return j(this,(function(t,r,i){var o;if(p(t)?o=t:9===t.nodeType&&(o=t.defaultView),void 0===i)return o?o[e]:t[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):t[r]=i}),t,r,arguments.length)}})),w.each([\"top\",\"left\"],(function(t,e){w.cssHooks[e]=zt(f.pixelPosition,(function(t,n){if(n)return n=Bt(t,e),Ot.test(n)?w(t).position()[e]+\"px\":n}))})),w.each({Height:\"height\",Width:\"width\"},(function(t,e){w.each({padding:\"inner\"+t,content:e,\"\":\"outer\"+t},(function(n,r){w.fn[r]=function(i,o){var s=arguments.length&&(n||\"boolean\"!=typeof i),a=n||(!0===i||!0===o?\"margin\":\"border\");return j(this,(function(e,n,i){var o;return p(e)?0===r.indexOf(\"outer\")?e[\"inner\"+t]:e.document.documentElement[\"client\"+t]:9===e.nodeType?(o=e.documentElement,Math.max(e.body[\"scroll\"+t],o[\"scroll\"+t],e.body[\"offset\"+t],o[\"offset\"+t],o[\"client\"+t])):void 0===i?w.css(e,n,a):w.style(e,n,i,a)}),e,s?i:void 0,s)}}))})),w.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),(function(t,e){w.fn[e]=function(t,n){return arguments.length>0?this.on(e,null,t,n):this.trigger(e)}})),w.fn.extend({hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)}}),w.fn.extend({bind:function(t,e,n){return this.on(t,null,e,n)},unbind:function(t,e){return this.off(t,null,e)},delegate:function(t,e,n,r){return this.on(e,t,n,r)},undelegate:function(t,e,n){return 1===arguments.length?this.off(t,\"**\"):this.off(e,t||\"**\",n)}}),w.proxy=function(t,e){var n,i,o;if(\"string\"==typeof e&&(n=t[e],e=t,t=n),d(t))return i=r.call(arguments,2),o=function(){return t.apply(e||this,i.concat(r.call(arguments)))},o.guid=t.guid=t.guid||w.guid++,o},w.holdReady=function(t){t?w.readyWait++:w.ready(!0)},w.isArray=Array.isArray,w.parseJSON=JSON.parse,w.nodeName=E,w.isFunction=d,w.isWindow=p,w.camelCase=$,w.type=v,w.now=Date.now,w.isNumeric=function(t){var e=w.type(t);return(\"number\"===e||\"string\"===e)&&!isNaN(t-parseFloat(t))};const pe=w;function ge(t){return function(t,e){const n=document.createElement(t);e&&(e.class&&n.classList.add(e.class),e.id&&(n.id=e.id),e.style&&function(t,e){for(let n of Object.keys(e))t.style[n]=e[n]}(n,e.style));return n}(\"div\",t)}function me(t){const e=getComputedStyle(t);\"none\"!==e.display&&(t._initialDisplay=e.display),t.style.display=\"none\"}function ve(t){if(t.type.startsWith(\"touch\")){const e=t.touches[0];return{x:e.pageX,y:e.pageY}}return{x:t.pageX,y:t.pageY}}function be(){return(\"0000\"+(Math.random()*Math.pow(36,4)<<0).toString(36)).slice(-4)}function we(t,e){const{clientX:n,clientY:r}=t;return((t,{clientX:e,clientY:n})=>{const{left:r,top:i,width:o,height:s}=t.getBoundingClientRect(),a=e-r,c=n-i;return{x:a,y:c,xNormalized:a/o,yNormalized:c/s,width:o,height:s}})(e,{clientX:n,clientY:r})}function ye(t,e){return function(t,e){e=e||\"currentColor\";let n=xe[t];n||(console.error(`No icon named: ${t}`),n=xe.question);const r=document.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\");r.setAttributeNS(null,\"viewBox\",\"0 0 \"+n[0]+\" \"+n[1]);const i=document.createElementNS(\"http://www.w3.org/2000/svg\",\"path\");return i.setAttributeNS(null,\"fill\",e),i.setAttributeNS(null,\"d\",n[4]),r.appendChild(i),r}(t,e)}const xe={check:[512,512,[],\"f00c\",\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"],cog:[512,512,[],\"f013\",\"M444.788 291.1l42.616 24.599c4.867 2.809 7.126 8.618 5.459 13.985-11.07 35.642-29.97 67.842-54.689 94.586a12.016 12.016 0 0 1-14.832 2.254l-42.584-24.595a191.577 191.577 0 0 1-60.759 35.13v49.182a12.01 12.01 0 0 1-9.377 11.718c-34.956 7.85-72.499 8.256-109.219.007-5.49-1.233-9.403-6.096-9.403-11.723v-49.184a191.555 191.555 0 0 1-60.759-35.13l-42.584 24.595a12.016 12.016 0 0 1-14.832-2.254c-24.718-26.744-43.619-58.944-54.689-94.586-1.667-5.366.592-11.175 5.459-13.985L67.212 291.1a193.48 193.48 0 0 1 0-70.199l-42.616-24.599c-4.867-2.809-7.126-8.618-5.459-13.985 11.07-35.642 29.97-67.842 54.689-94.586a12.016 12.016 0 0 1 14.832-2.254l42.584 24.595a191.577 191.577 0 0 1 60.759-35.13V25.759a12.01 12.01 0 0 1 9.377-11.718c34.956-7.85 72.499-8.256 109.219-.007 5.49 1.233 9.403 6.096 9.403 11.723v49.184a191.555 191.555 0 0 1 60.759 35.13l42.584-24.595a12.016 12.016 0 0 1 14.832 2.254c24.718 26.744 43.619 58.944 54.689 94.586 1.667 5.366-.592 11.175-5.459 13.985L444.788 220.9a193.485 193.485 0 0 1 0 70.2zM336 256c0-44.112-35.888-80-80-80s-80 35.888-80 80 35.888 80 80 80 80-35.888 80-80z\"],exclamation:[192,512,[],\"f12a\",\"M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z\"],\"exclamation-circle\":[512,512,[],\"f06a\",\"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"],\"exclamation-triangle\":[576,512,[],\"f071\",\"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"],minus:[448,512,[],\"f068\",\"M424 318.2c13.3 0 24-10.7 24-24v-76.4c0-13.3-10.7-24-24-24H24c-13.3 0-24 10.7-24 24v76.4c0 13.3 10.7 24 24 24h400z\"],\"minus-circle\":[512,512,[],\"f056\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z\"],\"minus-square\":[448,512,[],\"f146\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM92 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H92z\"],plus:[448,512,[],\"f067\",\"M448 294.2v-76.4c0-13.3-10.7-24-24-24H286.2V56c0-13.3-10.7-24-24-24h-76.4c-13.3 0-24 10.7-24 24v137.8H24c-13.3 0-24 10.7-24 24v76.4c0 13.3 10.7 24 24 24h137.8V456c0 13.3 10.7 24 24 24h76.4c13.3 0 24-10.7 24-24V318.2H424c13.3 0 24-10.7 24-24z\"],\"plus-circle\":[512,512,[],\"f055\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"],\"plus-square\":[448,512,[],\"f0fe\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"],question:[384,512,[],\"f128\",\"M202.021 0C122.202 0 70.503 32.703 29.914 91.026c-7.363 10.58-5.093 25.086 5.178 32.874l43.138 32.709c10.373 7.865 25.132 6.026 33.253-4.148 25.049-31.381 43.63-49.449 82.757-49.449 30.764 0 68.816 19.799 68.816 49.631 0 22.552-18.617 34.134-48.993 51.164-35.423 19.86-82.299 44.576-82.299 106.405V320c0 13.255 10.745 24 24 24h72.471c13.255 0 24-10.745 24-24v-5.773c0-42.86 125.268-44.645 125.268-160.627C377.504 66.256 286.902 0 202.021 0zM192 373.459c-38.196 0-69.271 31.075-69.271 69.271 0 38.195 31.075 69.27 69.271 69.27s69.271-31.075 69.271-69.271-31.075-69.27-69.271-69.27z\"],save:[448,512,[],\"f0c7\",\"M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z\"],search:[512,512,[],\"f002\",\"M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z\"],share:[512,512,[],\"f064\",\"M503.691 189.836L327.687 37.851C312.281 24.546 288 35.347 288 56.015v80.053C127.371 137.907 0 170.1 0 322.326c0 61.441 39.581 122.309 83.333 154.132 13.653 9.931 33.111-2.533 28.077-18.631C66.066 312.814 132.917 274.316 288 272.085V360c0 20.7 24.3 31.453 39.687 18.164l176.004-152c11.071-9.562 11.086-26.753 0-36.328z\"],spinner:[512,512,[],\"f110\",\"M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z\"],square:[448,512,[],\"f0c8\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"],\"square-full\":[512,512,[],\"f45c\",\"M512 512H0V0h512v512z\"],times:[384,512,[],\"f00d\",\"M323.1 441l53.9-53.9c9.4-9.4 9.4-24.5 0-33.9L279.8 256l97.2-97.2c9.4-9.4 9.4-24.5 0-33.9L323.1 71c-9.4-9.4-24.5-9.4-33.9 0L192 168.2 94.8 71c-9.4-9.4-24.5-9.4-33.9 0L7 124.9c-9.4 9.4-9.4 24.5 0 33.9l97.2 97.2L7 353.2c-9.4 9.4-9.4 24.5 0 33.9L60.9 441c9.4 9.4 24.5 9.4 33.9 0l97.2-97.2 97.2 97.2c9.3 9.3 24.5 9.3 33.9 0z\"],\"times-circle\":[512,512,[],\"f057\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z\"],wrench:[512,512,[],\"f0ad\",\"M481.156 200c9.3 0 15.12 10.155 10.325 18.124C466.295 259.992 420.419 288 368 288c-79.222 0-143.501-63.974-143.997-143.079C223.505 65.469 288.548-.001 368.002 0c52.362.001 98.196 27.949 123.4 69.743C496.24 77.766 490.523 88 481.154 88H376l-40 56 40 56h105.156zm-171.649 93.003L109.255 493.255c-24.994 24.993-65.515 24.994-90.51 0-24.993-24.994-24.993-65.516 0-90.51L218.991 202.5c16.16 41.197 49.303 74.335 90.516 90.503zM104 432c0-13.255-10.745-24-24-24s-24 10.745-24 24 10.745 24 24 24 24-10.745 24-24z\"]};function _e(t,e){var n=document.createElement(\"div\");t.appendChild(n),n.appendChild(ye(\"times\")),n.addEventListener(\"click\",(function(t){t.preventDefault(),t.stopPropagation(),e()}))}function ke(t){return\"string\"==typeof t||t instanceof String}function Se(t){var e=String(t).split(/[.,]/);return e[0].split(\"\").reverse().reduce((function(t,e,n){return n%3==0?t+\",\"+e:t+e})).split(\"\").reverse().join(\"\")+(e[1]?\".\"+e[1]:\"\")}const Ce=function(t){return t.split(/\\n|\\r\\n|\\r/g)};function Ee(t,e){var n,r,i=[],o=t.length,s=0,a=!1;if(o>0)for(i[s]=t.charAt(0),n=1;n0?t.charAt(0).toUpperCase()+t.slice(1):t}function Te(t){return t.includes(\"googleapis\")&&!t.includes(\"urlshortener\")||Le(t)||Me(t)}function Le(t){return t.startsWith(\"gs://\")||t.startsWith(\"https://www.googleapis.com/storage\")||t.startsWith(\"https://storage.cloud.google.com\")||t.startsWith(\"https://storage.googleapis.com\")}function Me(t){return t.indexOf(\"drive.google.com\")>=0||t.indexOf(\"www.googleapis.com/drive\")>0}function Re(t){let{bucket:e,object:n}=function(t){let e,n;if(t.startsWith(\"gs://\")){const r=t.indexOf(\"/\",5);if(r>=0){e=t.substring(5,r);const i=t.indexOf(\"?\");n=i<0?t.substring(r+1):t.substring(r+1,i)}}else if(t.startsWith(\"https://storage.googleapis.com\")||t.startsWith(\"https://storage.cloud.google.com\")){const r=t.indexOf(\"/v1/b/\",8);if(r>0){const i=t.indexOf(\"/o/\",r);if(i>0){const o=t.indexOf(\"?\",i);e=t.substring(r+6,i),n=o>0?t.substring(i+3,o):t.substring(i+3)}}else{const r=t.indexOf(\"/\",8),i=t.indexOf(\"/\",r+1),o=t.indexOf(\"?\",i);i>0&&(e=t.substring(r+1,i),n=o<0?t.substring(i+1):t.substring(i+1,o))}}else if(t.startsWith(\"https://www.googleapis.com/storage/v1/b\")){const r=t.indexOf(\"/v1/b/\",8),i=t.indexOf(\"/o/\",r);if(i>0){const o=t.indexOf(\"?\",i);e=t.substring(r+6,i),n=o>0?t.substring(i+3,o):t.substring(i+3)}}if(e&&n)return{bucket:e,object:n};throw Error(`Unrecognized Google Storage URI: ${t}`)}(t);n=function(t){let e=\"\";return t.split(\"\").forEach((function(t){Pe.has(t)?e+=Pe.get(t):e+=t})),e}(n);const r=t.indexOf(\"?\");return`https://storage.googleapis.com/storage/v1/b/${e}/o/${n}${r>0?t.substring(r)+\"&alt=media\":\"?alt=media\"}`}function Ie(t){var e=Ne(t);return e?\"https://www.googleapis.com/drive/v3/files/\"+e+\"?alt=media&supportsTeamDrives=true\":t}function Ne(t){if(t.includes(\"/open?id=\")){const e=t.indexOf(\"/open?id=\")+9,n=t.indexOf(\"&\");if(e>0&&n>e)return t.substring(e,n);if(e>0)return t.substring(e)}else{if(t.includes(\"/file/d/\")){const e=t.indexOf(\"/file/d/\")+8,n=t.lastIndexOf(\"/\");return t.substring(e,n)}if(t.startsWith(\"https://www.googleapis.com/drive\")){let e=t.indexOf(\"/files/\");const n=t.indexOf(\"?\");if(e>0)return e+=7,n>0?t.substring(e,n):t.substring(e)}}throw Error(\"Unknown Google Drive url format: \"+t)}const Pe=new Map;Pe.set(\"!\",\"%21\"),Pe.set(\"#\",\"%23\"),Pe.set(\"$\",\"%24\"),Pe.set(\"%\",\"%25\"),Pe.set(\"&\",\"%26\"),Pe.set(\"'\",\"%27\"),Pe.set(\"(\",\"%28\"),Pe.set(\")\",\"%29\"),Pe.set(\"*\",\"%2A\"),Pe.set(\"+\",\"%2B\"),Pe.set(\",\",\"%2C\"),Pe.set(\"/\",\"%2F\"),Pe.set(\":\",\"%3A\"),Pe.set(\";\",\"%3B\"),Pe.set(\"=\",\"%3D\"),Pe.set(\"?\",\"%3F\"),Pe.set(\"@\",\"%40\"),Pe.set(\"[\",\"%5B\"),Pe.set(\"]\",\"%5D\"),Pe.set(\" \",\"%20\");async function Oe(t){if(Fe())return void console.warn(\"oAuth has already been initialized\");gapi.apiKey=t.apiKey;const e=Object.assign({},t);return e.scope||(e.scope=\"profile\"),t.client_id||(t.client_id=t.clientId),await async function(t){return new Promise((function(e,n){gapi.load(t,{callback:e,onerror:n})}))}(\"auth2\"),new Promise((function(t,n){gapi.auth2.init(e).then(t,n)}))}function Fe(){return\"undefined\"!=typeof gapi&&gapi.auth2&&gapi.auth2.getAuthInstance()}let De=!1;async function Be(t){if(\"undefined\"==typeof gapi)throw Error(\"Google authentication requires the 'gapi' library\");if(!gapi.auth2)throw Error(\"Google 'auth2' has not been initialized\");if(De)return new Promise((function(e,n){let r;r=setInterval((()=>{try{!1===De&&(e(Be(t)),clearInterval(r))}catch(t){clearInterval(r),n(t)}}),100)}));De=!0;try{let e,n=gapi.auth2.getAuthInstance().currentUser.get();if(n.isSignedIn()){n.hasGrantedScopes(t)||await n.grant({scope:t});const{access_token:r,expires_at:i}=n.getAuthResponse();if(Date.now()0&&(n=n.substr(0,e)),n}throw Error(\"Expected File or string, got \"+typeof t)}function Ue(t){return!!t&&(\"function\"!=typeof t&&(t instanceof File||t.hasOwnProperty(\"name\")&&\"function\"==typeof t.slice&&\"function\"==typeof t.arrayBuffer))}const qe=Ue;function We(t,e){const n=document.createElement(\"a\");n.setAttribute(\"href\",e),n.setAttribute(\"download\",t),n.style.display=\"none\",document.body.appendChild(n),n.click(),document.body.removeChild(n)}\n", + "/*! pako 2.0.4 https://github.com/nodeca/pako @license (MIT AND Zlib) */function $e(t){let e=t.length;for(;--e>=0;)t[e]=0}const Ge=256,Ze=286,Xe=30,Ye=15,Ke=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),Qe=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),Je=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),tn=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),en=new Array(576);$e(en);const nn=new Array(60);$e(nn);const rn=new Array(512);$e(rn);const on=new Array(256);$e(on);const sn=new Array(29);$e(sn);const an=new Array(Xe);function cn(t,e,n,r,i){this.static_tree=t,this.extra_bits=e,this.extra_base=n,this.elems=r,this.max_length=i,this.has_stree=t&&t.length}let ln,hn,un;function fn(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}$e(an);const dn=t=>t<256?rn[t]:rn[256+(t>>>7)],pn=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},gn=(t,e,n)=>{t.bi_valid>16-n?(t.bi_buf|=e<>16-t.bi_valid,t.bi_valid+=n-16):(t.bi_buf|=e<{gn(t,n[2*e],n[2*e+1])},vn=(t,e)=>{let n=0;do{n|=1&t,t>>>=1,n<<=1}while(--e>0);return n>>>1},bn=(t,e,n)=>{const r=new Array(16);let i,o,s=0;for(i=1;i<=Ye;i++)r[i]=s=s+n[i-1]<<1;for(o=0;o<=e;o++){let e=t[2*o+1];0!==e&&(t[2*o]=vn(r[e]++,e))}},wn=t=>{let e;for(e=0;e{t.bi_valid>8?pn(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},xn=(t,e,n,r)=>{const i=2*e,o=2*n;return t[i]{const r=t.heap[n];let i=n<<1;for(;i<=t.heap_len&&(i{let r,i,o,s,a=0;if(0!==t.last_lit)do{r=t.pending_buf[t.d_buf+2*a]<<8|t.pending_buf[t.d_buf+2*a+1],i=t.pending_buf[t.l_buf+a],a++,0===r?mn(t,i,e):(o=on[i],mn(t,o+Ge+1,e),s=Ke[o],0!==s&&(i-=sn[o],gn(t,i,s)),r--,o=dn(r),mn(t,o,n),s=Qe[o],0!==s&&(r-=an[o],gn(t,r,s)))}while(a{const n=e.dyn_tree,r=e.stat_desc.static_tree,i=e.stat_desc.has_stree,o=e.stat_desc.elems;let s,a,c,l=-1;for(t.heap_len=0,t.heap_max=573,s=0;s>1;s>=1;s--)_n(t,n,s);c=o;do{s=t.heap[1],t.heap[1]=t.heap[t.heap_len--],_n(t,n,1),a=t.heap[1],t.heap[--t.heap_max]=s,t.heap[--t.heap_max]=a,n[2*c]=n[2*s]+n[2*a],t.depth[c]=(t.depth[s]>=t.depth[a]?t.depth[s]:t.depth[a])+1,n[2*s+1]=n[2*a+1]=c,t.heap[1]=c++,_n(t,n,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const n=e.dyn_tree,r=e.max_code,i=e.stat_desc.static_tree,o=e.stat_desc.has_stree,s=e.stat_desc.extra_bits,a=e.stat_desc.extra_base,c=e.stat_desc.max_length;let l,h,u,f,d,p,g=0;for(f=0;f<=Ye;f++)t.bl_count[f]=0;for(n[2*t.heap[t.heap_max]+1]=0,l=t.heap_max+1;l<573;l++)h=t.heap[l],f=n[2*n[2*h+1]+1]+1,f>c&&(f=c,g++),n[2*h+1]=f,h>r||(t.bl_count[f]++,d=0,h>=a&&(d=s[h-a]),p=n[2*h],t.opt_len+=p*(f+d),o&&(t.static_len+=p*(i[2*h+1]+d)));if(0!==g){do{for(f=c-1;0===t.bl_count[f];)f--;t.bl_count[f]--,t.bl_count[f+1]+=2,t.bl_count[c]--,g-=2}while(g>0);for(f=c;0!==f;f--)for(h=t.bl_count[f];0!==h;)u=t.heap[--l],u>r||(n[2*u+1]!==f&&(t.opt_len+=(f-n[2*u+1])*n[2*u],n[2*u+1]=f),h--)}})(t,e),bn(n,l,t.bl_count)},Cn=(t,e,n)=>{let r,i,o=-1,s=e[1],a=0,c=7,l=4;for(0===s&&(c=138,l=3),e[2*(n+1)+1]=65535,r=0;r<=n;r++)i=s,s=e[2*(r+1)+1],++a{let r,i,o=-1,s=e[1],a=0,c=7,l=4;for(0===s&&(c=138,l=3),r=0;r<=n;r++)if(i=s,s=e[2*(r+1)+1],!(++a{gn(t,0+(r?1:0),3),((t,e,n,r)=>{yn(t),r&&(pn(t,n),pn(t,~n)),t.pending_buf.set(t.window.subarray(e,e+n),t.pending),t.pending+=n})(t,e,n,!0)};var Ln=(t,e,n,r)=>{let i,o,s=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,n=4093624447;for(e=0;e<=31;e++,n>>>=1)if(1&n&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e{let e;for(Cn(t,t.dyn_ltree,t.l_desc.max_code),Cn(t,t.dyn_dtree,t.d_desc.max_code),Sn(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*tn[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),i=t.opt_len+3+7>>>3,o=t.static_len+3+7>>>3,o<=i&&(i=o)):i=o=n+5,n+4<=i&&-1!==e?Tn(t,e,n,r):4===t.strategy||o===i?(gn(t,2+(r?1:0),3),kn(t,en,nn)):(gn(t,4+(r?1:0),3),((t,e,n,r)=>{let i;for(gn(t,e-257,5),gn(t,n-1,5),gn(t,r-4,4),i=0;i{An||((()=>{let t,e,n,r,i;const o=new Array(16);for(n=0,r=0;r<28;r++)for(sn[r]=n,t=0;t<1<>=7;r(t.pending_buf[t.d_buf+2*t.last_lit]=e>>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&n,t.last_lit++,0===e?t.dyn_ltree[2*n]++:(t.matches++,e--,t.dyn_ltree[2*(on[n]+Ge+1)]++,t.dyn_dtree[2*dn(e)]++),t.last_lit===t.lit_bufsize-1),_tr_align:t=>{gn(t,2,3),mn(t,256,en),(t=>{16===t.bi_valid?(pn(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)})(t)}};var Rn=(t,e,n,r)=>{let i=65535&t|0,o=t>>>16&65535|0,s=0;for(;0!==n;){s=n>2e3?2e3:n,n-=s;do{i=i+e[r++]|0,o=o+i|0}while(--s);i%=65521,o%=65521}return i|o<<16|0};const In=new Uint32Array((()=>{let t,e=[];for(var n=0;n<256;n++){t=n;for(var r=0;r<8;r++)t=1&t?3988292384^t>>>1:t>>>1;e[n]=t}return e})());var Nn=(t,e,n,r)=>{const i=In,o=r+n;t^=-1;for(let n=r;n>>8^i[255&(t^e[n])];return-1^t},Pn={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"},On={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:Fn,_tr_stored_block:Dn,_tr_flush_block:Bn,_tr_tally:zn,_tr_align:Hn}=Mn,{Z_NO_FLUSH:Vn,Z_PARTIAL_FLUSH:jn,Z_FULL_FLUSH:Un,Z_FINISH:qn,Z_BLOCK:Wn,Z_OK:$n,Z_STREAM_END:Gn,Z_STREAM_ERROR:Zn,Z_DATA_ERROR:Xn,Z_BUF_ERROR:Yn,Z_DEFAULT_COMPRESSION:Kn,Z_FILTERED:Qn,Z_HUFFMAN_ONLY:Jn,Z_RLE:tr,Z_FIXED:er,Z_DEFAULT_STRATEGY:nr,Z_UNKNOWN:rr,Z_DEFLATED:ir}=On,or=258,sr=262,ar=103,cr=113,lr=666,hr=(t,e)=>(t.msg=Pn[e],e),ur=t=>(t<<1)-(t>4?9:0),fr=t=>{let e=t.length;for(;--e>=0;)t[e]=0};let dr=(t,e,n)=>(e<{const e=t.state;let n=e.pending;n>t.avail_out&&(n=t.avail_out),0!==n&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+n),t.next_out),t.next_out+=n,e.pending_out+=n,t.total_out+=n,t.avail_out-=n,e.pending-=n,0===e.pending&&(e.pending_out=0))},gr=(t,e)=>{Bn(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,pr(t.strm)},mr=(t,e)=>{t.pending_buf[t.pending++]=e},vr=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},br=(t,e,n,r)=>{let i=t.avail_in;return i>r&&(i=r),0===i?0:(t.avail_in-=i,e.set(t.input.subarray(t.next_in,t.next_in+i),n),1===t.state.wrap?t.adler=Rn(t.adler,e,i,n):2===t.state.wrap&&(t.adler=Nn(t.adler,e,i,n)),t.next_in+=i,t.total_in+=i,i)},wr=(t,e)=>{let n,r,i=t.max_chain_length,o=t.strstart,s=t.prev_length,a=t.nice_match;const c=t.strstart>t.w_size-sr?t.strstart-(t.w_size-sr):0,l=t.window,h=t.w_mask,u=t.prev,f=t.strstart+or;let d=l[o+s-1],p=l[o+s];t.prev_length>=t.good_match&&(i>>=2),a>t.lookahead&&(a=t.lookahead);do{if(n=e,l[n+s]===p&&l[n+s-1]===d&&l[n]===l[o]&&l[++n]===l[o+1]){o+=2,n++;do{}while(l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&os){if(t.match_start=e,s=r,r>=a)break;d=l[o+s-1],p=l[o+s]}}}while((e=u[e&h])>c&&0!=--i);return s<=t.lookahead?s:t.lookahead},yr=t=>{const e=t.w_size;let n,r,i,o,s;do{if(o=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-sr)){t.window.set(t.window.subarray(e,e+e),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,r=t.hash_size,n=r;do{i=t.head[--n],t.head[n]=i>=e?i-e:0}while(--r);r=e,n=r;do{i=t.prev[--n],t.prev[n]=i>=e?i-e:0}while(--r);o+=e}if(0===t.strm.avail_in)break;if(r=br(t.strm,t.window,t.strstart+t.lookahead,o),t.lookahead+=r,t.lookahead+t.insert>=3)for(s=t.strstart-t.insert,t.ins_h=t.window[s],t.ins_h=dr(t,t.ins_h,t.window[s+1]);t.insert&&(t.ins_h=dr(t,t.ins_h,t.window[s+3-1]),t.prev[s&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=s,s++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead{let n,r;for(;;){if(t.lookahead=3&&(t.ins_h=dr(t,t.ins_h,t.window[t.strstart+3-1]),n=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==n&&t.strstart-n<=t.w_size-sr&&(t.match_length=wr(t,n)),t.match_length>=3)if(r=zn(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=dr(t,t.ins_h,t.window[t.strstart+3-1]),n=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!=--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=dr(t,t.ins_h,t.window[t.strstart+1]);else r=zn(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(r&&(gr(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===qn?(gr(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(gr(t,!1),0===t.strm.avail_out)?1:2},_r=(t,e)=>{let n,r,i;for(;;){if(t.lookahead=3&&(t.ins_h=dr(t,t.ins_h,t.window[t.strstart+3-1]),n=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==n&&t.prev_length4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-3,r=zn(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=i&&(t.ins_h=dr(t,t.ins_h,t.window[t.strstart+3-1]),n=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!=--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,r&&(gr(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(r=zn(t,0,t.window[t.strstart-1]),r&&gr(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(r=zn(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===qn?(gr(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(gr(t,!1),0===t.strm.avail_out)?1:2};function kr(t,e,n,r,i){this.good_length=t,this.max_lazy=e,this.nice_length=n,this.max_chain=r,this.func=i}const Sr=[new kr(0,0,0,0,((t,e)=>{let n=65535;for(n>t.pending_buf_size-5&&(n=t.pending_buf_size-5);;){if(t.lookahead<=1){if(yr(t),0===t.lookahead&&e===Vn)return 1;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;const r=t.block_start+n;if((0===t.strstart||t.strstart>=r)&&(t.lookahead=t.strstart-r,t.strstart=r,gr(t,!1),0===t.strm.avail_out))return 1;if(t.strstart-t.block_start>=t.w_size-sr&&(gr(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===qn?(gr(t,!0),0===t.strm.avail_out?3:4):(t.strstart>t.block_start&&(gr(t,!1),t.strm.avail_out),1)})),new kr(4,4,8,4,xr),new kr(4,5,16,8,xr),new kr(4,6,32,32,xr),new kr(4,4,16,16,_r),new kr(8,16,32,32,_r),new kr(8,16,128,128,_r),new kr(8,32,128,256,_r),new kr(32,128,258,1024,_r),new kr(32,258,258,4096,_r)];function Cr(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=ir,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),fr(this.dyn_ltree),fr(this.dyn_dtree),fr(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),fr(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),fr(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const Er=t=>{if(!t||!t.state)return hr(t,Zn);t.total_in=t.total_out=0,t.data_type=rr;const e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap?42:cr,t.adler=2===e.wrap?0:1,e.last_flush=Vn,Fn(e),$n},Ar=t=>{const e=Er(t);var n;return e===$n&&((n=t.state).window_size=2*n.w_size,fr(n.head),n.max_lazy_match=Sr[n.level].max_lazy,n.good_match=Sr[n.level].good_length,n.nice_match=Sr[n.level].nice_length,n.max_chain_length=Sr[n.level].max_chain,n.strstart=0,n.block_start=0,n.lookahead=0,n.insert=0,n.match_length=n.prev_length=2,n.match_available=0,n.ins_h=0),e},Tr=(t,e,n,r,i,o)=>{if(!t)return Zn;let s=1;if(e===Kn&&(e=6),r<0?(s=0,r=-r):r>15&&(s=2,r-=16),i<1||i>9||n!==ir||r<8||r>15||e<0||e>9||o<0||o>er)return hr(t,Zn);8===r&&(r=9);const a=new Cr;return t.state=a,a.strm=t,a.wrap=s,a.gzhead=null,a.w_bits=r,a.w_size=1<{let n=e.length;if(!t||!t.state)return Zn;const r=t.state,i=r.wrap;if(2===i||1===i&&42!==r.status||r.lookahead)return Zn;if(1===i&&(t.adler=Rn(t.adler,e,n,0)),r.wrap=0,n>=r.w_size){0===i&&(fr(r.head),r.strstart=0,r.block_start=0,r.insert=0);let t=new Uint8Array(r.w_size);t.set(e.subarray(n-r.w_size,n),0),e=t,n=r.w_size}const o=t.avail_in,s=t.next_in,a=t.input;for(t.avail_in=n,t.next_in=0,t.input=e,yr(r);r.lookahead>=3;){let t=r.strstart,e=r.lookahead-2;do{r.ins_h=dr(r,r.ins_h,r.window[t+3-1]),r.prev[t&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=t,t++}while(--e);r.strstart=t,r.lookahead=2,yr(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=2,r.match_available=0,t.next_in=s,t.input=a,t.avail_in=o,r.wrap=i,$n},Mr={deflateInit:(t,e)=>Tr(t,e,ir,15,8,nr),deflateInit2:Tr,deflateReset:Ar,deflateResetKeep:Er,deflateSetHeader:(t,e)=>t&&t.state?2!==t.state.wrap?Zn:(t.state.gzhead=e,$n):Zn,deflate:(t,e)=>{let n,r;if(!t||!t.state||e>Wn||e<0)return t?hr(t,Zn):Zn;const i=t.state;if(!t.output||!t.input&&0!==t.avail_in||i.status===lr&&e!==qn)return hr(t,0===t.avail_out?Yn:Zn);i.strm=t;const o=i.last_flush;if(i.last_flush=e,42===i.status)if(2===i.wrap)t.adler=0,mr(i,31),mr(i,139),mr(i,8),i.gzhead?(mr(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),mr(i,255&i.gzhead.time),mr(i,i.gzhead.time>>8&255),mr(i,i.gzhead.time>>16&255),mr(i,i.gzhead.time>>24&255),mr(i,9===i.level?2:i.strategy>=Jn||i.level<2?4:0),mr(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(mr(i,255&i.gzhead.extra.length),mr(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(t.adler=Nn(t.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69):(mr(i,0),mr(i,0),mr(i,0),mr(i,0),mr(i,0),mr(i,9===i.level?2:i.strategy>=Jn||i.level<2?4:0),mr(i,3),i.status=cr);else{let e=ir+(i.w_bits-8<<4)<<8,n=-1;n=i.strategy>=Jn||i.level<2?0:i.level<6?1:6===i.level?2:3,e|=n<<6,0!==i.strstart&&(e|=32),e+=31-e%31,i.status=cr,vr(i,e),0!==i.strstart&&(vr(i,t.adler>>>16),vr(i,65535&t.adler)),t.adler=1}if(69===i.status)if(i.gzhead.extra){for(n=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>n&&(t.adler=Nn(t.adler,i.pending_buf,i.pending-n,n)),pr(t),n=i.pending,i.pending!==i.pending_buf_size));)mr(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>n&&(t.adler=Nn(t.adler,i.pending_buf,i.pending-n,n)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=73)}else i.status=73;if(73===i.status)if(i.gzhead.name){n=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>n&&(t.adler=Nn(t.adler,i.pending_buf,i.pending-n,n)),pr(t),n=i.pending,i.pending===i.pending_buf_size)){r=1;break}r=i.gzindexn&&(t.adler=Nn(t.adler,i.pending_buf,i.pending-n,n)),0===r&&(i.gzindex=0,i.status=91)}else i.status=91;if(91===i.status)if(i.gzhead.comment){n=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>n&&(t.adler=Nn(t.adler,i.pending_buf,i.pending-n,n)),pr(t),n=i.pending,i.pending===i.pending_buf_size)){r=1;break}r=i.gzindexn&&(t.adler=Nn(t.adler,i.pending_buf,i.pending-n,n)),0===r&&(i.status=ar)}else i.status=ar;if(i.status===ar&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&pr(t),i.pending+2<=i.pending_buf_size&&(mr(i,255&t.adler),mr(i,t.adler>>8&255),t.adler=0,i.status=cr)):i.status=cr),0!==i.pending){if(pr(t),0===t.avail_out)return i.last_flush=-1,$n}else if(0===t.avail_in&&ur(e)<=ur(o)&&e!==qn)return hr(t,Yn);if(i.status===lr&&0!==t.avail_in)return hr(t,Yn);if(0!==t.avail_in||0!==i.lookahead||e!==Vn&&i.status!==lr){let n=i.strategy===Jn?((t,e)=>{let n;for(;;){if(0===t.lookahead&&(yr(t),0===t.lookahead)){if(e===Vn)return 1;break}if(t.match_length=0,n=zn(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,n&&(gr(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===qn?(gr(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(gr(t,!1),0===t.strm.avail_out)?1:2})(i,e):i.strategy===tr?((t,e)=>{let n,r,i,o;const s=t.window;for(;;){if(t.lookahead<=or){if(yr(t),t.lookahead<=or&&e===Vn)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(i=t.strstart-1,r=s[i],r===s[++i]&&r===s[++i]&&r===s[++i])){o=t.strstart+or;do{}while(r===s[++i]&&r===s[++i]&&r===s[++i]&&r===s[++i]&&r===s[++i]&&r===s[++i]&&r===s[++i]&&r===s[++i]&&it.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(n=zn(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(n=zn(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),n&&(gr(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===qn?(gr(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(gr(t,!1),0===t.strm.avail_out)?1:2})(i,e):Sr[i.level].func(i,e);if(3!==n&&4!==n||(i.status=lr),1===n||3===n)return 0===t.avail_out&&(i.last_flush=-1),$n;if(2===n&&(e===jn?Hn(i):e!==Wn&&(Dn(i,0,0,!1),e===Un&&(fr(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),pr(t),0===t.avail_out))return i.last_flush=-1,$n}return e!==qn?$n:i.wrap<=0?Gn:(2===i.wrap?(mr(i,255&t.adler),mr(i,t.adler>>8&255),mr(i,t.adler>>16&255),mr(i,t.adler>>24&255),mr(i,255&t.total_in),mr(i,t.total_in>>8&255),mr(i,t.total_in>>16&255),mr(i,t.total_in>>24&255)):(vr(i,t.adler>>>16),vr(i,65535&t.adler)),pr(t),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?$n:Gn)},deflateEnd:t=>{if(!t||!t.state)return Zn;const e=t.state.status;return 42!==e&&69!==e&&73!==e&&91!==e&&e!==ar&&e!==cr&&e!==lr?hr(t,Zn):(t.state=null,e===cr?hr(t,Xn):$n)},deflateSetDictionary:Lr,deflateInfo:\"pako deflate (from Nodeca project)\"};const Rr=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var Ir=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const n=e.shift();if(n){if(\"object\"!=typeof n)throw new TypeError(n+\"must be non-object\");for(const e in n)Rr(n,e)&&(t[e]=n[e])}}return t},Nr=t=>{let e=0;for(let n=0,r=t.length;n=252?6:Xv>=248?5:Xv>=240?4:Xv>=224?3:Xv>=192?2:1;Or[254]=Or[254]=1;var Fr=t=>{if(\"function\"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,n,r,i,o,s=t.length,a=0;for(i=0;i>>6,e[o++]=128|63&n):n<65536?(e[o++]=224|n>>>12,e[o++]=128|n>>>6&63,e[o++]=128|63&n):(e[o++]=240|n>>>18,e[o++]=128|n>>>12&63,e[o++]=128|n>>>6&63,e[o++]=128|63&n);return e},Dr=(t,e)=>{const n=e||t.length;if(\"function\"==typeof TextDecoder&&TextDecoder.prototype.decode)return(new TextDecoder).decode(t.subarray(0,e));let r,i;const o=new Array(2*n);for(i=0,r=0;r4)o[i++]=65533,r+=s-1;else{for(e&=2===s?31:3===s?15:7;s>1&&r1?o[i++]=65533:e<65536?o[i++]=e:(e-=65536,o[i++]=55296|e>>10&1023,o[i++]=56320|1023&e)}}return((t,e)=>{if(e<65534&&t.subarray&&Pr)return String.fromCharCode.apply(null,t.length===e?t:t.subarray(0,e));let n=\"\";for(let r=0;r{(e=e||t.length)>t.length&&(e=t.length);let n=e-1;for(;n>=0&&128==(192&t[n]);)n--;return n<0||0===n?e:n+Or[t[n]]>e?n:e};var zr=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0};const Hr=Object.prototype.toString,{Z_NO_FLUSH:Vr,Z_SYNC_FLUSH:jr,Z_FULL_FLUSH:Ur,Z_FINISH:qr,Z_OK:Wr,Z_STREAM_END:$r,Z_DEFAULT_COMPRESSION:Gr,Z_DEFAULT_STRATEGY:Zr,Z_DEFLATED:Xr}=On;function Yr(t){this.options=Ir({level:Gr,method:Xr,chunkSize:16384,windowBits:15,memLevel:8,strategy:Zr},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new zr,this.strm.avail_out=0;let n=Mr.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(n!==Wr)throw new Error(Pn[n]);if(e.header&&Mr.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t=\"string\"==typeof e.dictionary?Fr(e.dictionary):\"[object ArrayBuffer]\"===Hr.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,n=Mr.deflateSetDictionary(this.strm,t),n!==Wr)throw new Error(Pn[n]);this._dict_set=!0}}function Kr(t,e){const n=new Yr(e);if(n.push(t,!0),n.err)throw n.msg||Pn[n.err];return n.result}Yr.prototype.push=function(t,e){const n=this.strm,r=this.options.chunkSize;let i,o;if(this.ended)return!1;for(o=e===~~e?e:!0===e?qr:Vr,\"string\"==typeof t?n.input=Fr(t):\"[object ArrayBuffer]\"===Hr.call(t)?n.input=new Uint8Array(t):n.input=t,n.next_in=0,n.avail_in=n.input.length;;)if(0===n.avail_out&&(n.output=new Uint8Array(r),n.next_out=0,n.avail_out=r),(o===jr||o===Ur)&&n.avail_out<=6)this.onData(n.output.subarray(0,n.next_out)),n.avail_out=0;else{if(i=Mr.deflate(n,o),i===$r)return n.next_out>0&&this.onData(n.output.subarray(0,n.next_out)),i=Mr.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===Wr;if(0!==n.avail_out){if(o>0&&n.next_out>0)this.onData(n.output.subarray(0,n.next_out)),n.avail_out=0;else if(0===n.avail_in)break}else this.onData(n.output)}return!0},Yr.prototype.onData=function(t){this.chunks.push(t)},Yr.prototype.onEnd=function(t){t===Wr&&(this.result=Nr(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var Qr=function(t,e){return(e=e||{}).raw=!0,Kr(t,e)},Jr=function(t,e){return(e=e||{}).gzip=!0,Kr(t,e)},ti={Deflate:Yr,deflate:Kr,deflateRaw:Qr,gzip:Jr,constants:On};var ei=function(t,e){let n,r,i,o,s,a,c,l,h,u,f,d,p,g,m,v,b,w,y,x,_,k,S,C;const E=t.state;n=t.next_in,S=t.input,r=n+(t.avail_in-5),i=t.next_out,C=t.output,o=i-(e-t.avail_out),s=i+(t.avail_out-257),a=E.dmax,c=E.wsize,l=E.whave,h=E.wnext,u=E.window,f=E.hold,d=E.bits,p=E.lencode,g=E.distcode,m=(1<>>24,f>>>=w,d-=w,w=b>>>16&255,0===w)C[i++]=65535&b;else{if(!(16&w)){if(0==(64&w)){b=p[(65535&b)+(f&(1<>>=w,d-=w),d<15&&(f+=S[n++]<>>24,f>>>=w,d-=w,w=b>>>16&255,!(16&w)){if(0==(64&w)){b=g[(65535&b)+(f&(1<a){t.msg=\"invalid distance too far back\",E.mode=30;break t}if(f>>>=w,d-=w,w=i-o,x>w){if(w=x-w,w>l&&E.sane){t.msg=\"invalid distance too far back\",E.mode=30;break t}if(_=0,k=u,0===h){if(_+=c-w,w2;)C[i++]=k[_++],C[i++]=k[_++],C[i++]=k[_++],y-=3;y&&(C[i++]=k[_++],y>1&&(C[i++]=k[_++]))}else{_=i-x;do{C[i++]=C[_++],C[i++]=C[_++],C[i++]=C[_++],y-=3}while(y>2);y&&(C[i++]=C[_++],y>1&&(C[i++]=C[_++]))}break}}break}}while(n>3,n-=y,d-=y<<3,f&=(1<{const c=a.bits;let l,h,u,f,d,p,g=0,m=0,v=0,b=0,w=0,y=0,x=0,_=0,k=0,S=0,C=null,E=0;const A=new Uint16Array(16),T=new Uint16Array(16);let L,M,R,I=null,N=0;for(g=0;g<=ni;g++)A[g]=0;for(m=0;m=1&&0===A[b];b--);if(w>b&&(w=b),0===b)return i[o++]=20971520,i[o++]=20971520,a.bits=1,0;for(v=1;v0&&(0===t||1!==b))return-1;for(T[1]=0,g=1;g852||2===t&&k>592)return 1;for(;;){L=g-x,s[m]p?(M=I[N+s[m]],R=C[E+s[m]]):(M=96,R=0),l=1<>x)+h]=L<<24|M<<16|R|0}while(0!==h);for(l=1<>=1;if(0!==l?(S&=l-1,S+=l):S=0,m++,0==--A[g]){if(g===b)break;g=e[n+s[m]]}if(g>w&&(S&f)!==u){for(0===x&&(x=w),d+=v,y=g-x,_=1<852||2===t&&k>592)return 1;u=S&f,i[u]=w<<24|y<<16|d-o|0}}return 0!==S&&(i[d+S]=g-x<<24|64<<16|0),a.bits=w,0};const{Z_FINISH:ci,Z_BLOCK:li,Z_TREES:hi,Z_OK:ui,Z_STREAM_END:fi,Z_NEED_DICT:di,Z_STREAM_ERROR:pi,Z_DATA_ERROR:gi,Z_MEM_ERROR:mi,Z_BUF_ERROR:vi,Z_DEFLATED:bi}=On,wi=12,yi=30,xi=t=>(t>>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24);function _i(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const ki=t=>{if(!t||!t.state)return pi;const e=t.state;return t.total_in=t.total_out=e.total=0,t.msg=\"\",e.wrap&&(t.adler=1&e.wrap),e.mode=1,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new Int32Array(852),e.distcode=e.distdyn=new Int32Array(592),e.sane=1,e.back=-1,ui},Si=t=>{if(!t||!t.state)return pi;const e=t.state;return e.wsize=0,e.whave=0,e.wnext=0,ki(t)},Ci=(t,e)=>{let n;if(!t||!t.state)return pi;const r=t.state;return e<0?(n=0,e=-e):(n=1+(e>>4),e<48&&(e&=15)),e&&(e<8||e>15)?pi:(null!==r.window&&r.wbits!==e&&(r.window=null),r.wrap=n,r.wbits=e,Si(t))},Ei=(t,e)=>{if(!t)return pi;const n=new _i;t.state=n,n.window=null;const r=Ci(t,e);return r!==ui&&(t.state=null),r};let Ai,Ti,Li=!0;const Mi=t=>{if(Li){Ai=new Int32Array(512),Ti=new Int32Array(32);let e=0;for(;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(ai(1,t.lens,0,288,Ai,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;ai(2,t.lens,0,32,Ti,0,t.work,{bits:5}),Li=!1}t.lencode=Ai,t.lenbits=9,t.distcode=Ti,t.distbits=5},Ri=(t,e,n,r)=>{let i;const o=t.state;return null===o.window&&(o.wsize=1<=o.wsize?(o.window.set(e.subarray(n-o.wsize,n),0),o.wnext=0,o.whave=o.wsize):(i=o.wsize-o.wnext,i>r&&(i=r),o.window.set(e.subarray(n-r,n-r+i),o.wnext),(r-=i)?(o.window.set(e.subarray(n-r,n),0),o.wnext=r,o.whave=o.wsize):(o.wnext+=i,o.wnext===o.wsize&&(o.wnext=0),o.whave{let n,r,i,o,s,a,c,l,h,u,f,d,p,g,m,v,b,w,y,x,_,k,S=0;const C=new Uint8Array(4);let E,A;const T=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(!t||!t.state||!t.output||!t.input&&0!==t.avail_in)return pi;n=t.state,n.mode===wi&&(n.mode=13),s=t.next_out,i=t.output,c=t.avail_out,o=t.next_in,r=t.input,a=t.avail_in,l=n.hold,h=n.bits,u=a,f=c,k=ui;t:for(;;)switch(n.mode){case 1:if(0===n.wrap){n.mode=13;break}for(;h<16;){if(0===a)break t;a--,l+=r[o++]<>>8&255,n.check=Nn(n.check,C,2,0),l=0,h=0,n.mode=2;break}if(n.flags=0,n.head&&(n.head.done=!1),!(1&n.wrap)||(((255&l)<<8)+(l>>8))%31){t.msg=\"incorrect header check\",n.mode=yi;break}if((15&l)!==bi){t.msg=\"unknown compression method\",n.mode=yi;break}if(l>>>=4,h-=4,_=8+(15&l),0===n.wbits)n.wbits=_;else if(_>n.wbits){t.msg=\"invalid window size\",n.mode=yi;break}n.dmax=1<>8&1),512&n.flags&&(C[0]=255&l,C[1]=l>>>8&255,n.check=Nn(n.check,C,2,0)),l=0,h=0,n.mode=3;case 3:for(;h<32;){if(0===a)break t;a--,l+=r[o++]<>>8&255,C[2]=l>>>16&255,C[3]=l>>>24&255,n.check=Nn(n.check,C,4,0)),l=0,h=0,n.mode=4;case 4:for(;h<16;){if(0===a)break t;a--,l+=r[o++]<>8),512&n.flags&&(C[0]=255&l,C[1]=l>>>8&255,n.check=Nn(n.check,C,2,0)),l=0,h=0,n.mode=5;case 5:if(1024&n.flags){for(;h<16;){if(0===a)break t;a--,l+=r[o++]<>>8&255,n.check=Nn(n.check,C,2,0)),l=0,h=0}else n.head&&(n.head.extra=null);n.mode=6;case 6:if(1024&n.flags&&(d=n.length,d>a&&(d=a),d&&(n.head&&(_=n.head.extra_len-n.length,n.head.extra||(n.head.extra=new Uint8Array(n.head.extra_len)),n.head.extra.set(r.subarray(o,o+d),_)),512&n.flags&&(n.check=Nn(n.check,r,d,o)),a-=d,o+=d,n.length-=d),n.length))break t;n.length=0,n.mode=7;case 7:if(2048&n.flags){if(0===a)break t;d=0;do{_=r[o+d++],n.head&&_&&n.length<65536&&(n.head.name+=String.fromCharCode(_))}while(_&&d>9&1,n.head.done=!0),t.adler=n.check=0,n.mode=wi;break;case 10:for(;h<32;){if(0===a)break t;a--,l+=r[o++]<>>=7&h,h-=7&h,n.mode=27;break}for(;h<3;){if(0===a)break t;a--,l+=r[o++]<>>=1,h-=1,3&l){case 0:n.mode=14;break;case 1:if(Mi(n),n.mode=20,e===hi){l>>>=2,h-=2;break t}break;case 2:n.mode=17;break;case 3:t.msg=\"invalid block type\",n.mode=yi}l>>>=2,h-=2;break;case 14:for(l>>>=7&h,h-=7&h;h<32;){if(0===a)break t;a--,l+=r[o++]<>>16^65535)){t.msg=\"invalid stored block lengths\",n.mode=yi;break}if(n.length=65535&l,l=0,h=0,n.mode=15,e===hi)break t;case 15:n.mode=16;case 16:if(d=n.length,d){if(d>a&&(d=a),d>c&&(d=c),0===d)break t;i.set(r.subarray(o,o+d),s),a-=d,o+=d,c-=d,s+=d,n.length-=d;break}n.mode=wi;break;case 17:for(;h<14;){if(0===a)break t;a--,l+=r[o++]<>>=5,h-=5,n.ndist=1+(31&l),l>>>=5,h-=5,n.ncode=4+(15&l),l>>>=4,h-=4,n.nlen>286||n.ndist>30){t.msg=\"too many length or distance symbols\",n.mode=yi;break}n.have=0,n.mode=18;case 18:for(;n.have>>=3,h-=3}for(;n.have<19;)n.lens[T[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,E={bits:n.lenbits},k=ai(0,n.lens,0,19,n.lencode,0,n.work,E),n.lenbits=E.bits,k){t.msg=\"invalid code lengths set\",n.mode=yi;break}n.have=0,n.mode=19;case 19:for(;n.have>>24,v=S>>>16&255,b=65535&S,!(m<=h);){if(0===a)break t;a--,l+=r[o++]<>>=m,h-=m,n.lens[n.have++]=b;else{if(16===b){for(A=m+2;h>>=m,h-=m,0===n.have){t.msg=\"invalid bit length repeat\",n.mode=yi;break}_=n.lens[n.have-1],d=3+(3&l),l>>>=2,h-=2}else if(17===b){for(A=m+3;h>>=m,h-=m,_=0,d=3+(7&l),l>>>=3,h-=3}else{for(A=m+7;h>>=m,h-=m,_=0,d=11+(127&l),l>>>=7,h-=7}if(n.have+d>n.nlen+n.ndist){t.msg=\"invalid bit length repeat\",n.mode=yi;break}for(;d--;)n.lens[n.have++]=_}}if(n.mode===yi)break;if(0===n.lens[256]){t.msg=\"invalid code -- missing end-of-block\",n.mode=yi;break}if(n.lenbits=9,E={bits:n.lenbits},k=ai(1,n.lens,0,n.nlen,n.lencode,0,n.work,E),n.lenbits=E.bits,k){t.msg=\"invalid literal/lengths set\",n.mode=yi;break}if(n.distbits=6,n.distcode=n.distdyn,E={bits:n.distbits},k=ai(2,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,E),n.distbits=E.bits,k){t.msg=\"invalid distances set\",n.mode=yi;break}if(n.mode=20,e===hi)break t;case 20:n.mode=21;case 21:if(a>=6&&c>=258){t.next_out=s,t.avail_out=c,t.next_in=o,t.avail_in=a,n.hold=l,n.bits=h,ei(t,f),s=t.next_out,i=t.output,c=t.avail_out,o=t.next_in,r=t.input,a=t.avail_in,l=n.hold,h=n.bits,n.mode===wi&&(n.back=-1);break}for(n.back=0;S=n.lencode[l&(1<>>24,v=S>>>16&255,b=65535&S,!(m<=h);){if(0===a)break t;a--,l+=r[o++]<>w)],m=S>>>24,v=S>>>16&255,b=65535&S,!(w+m<=h);){if(0===a)break t;a--,l+=r[o++]<>>=w,h-=w,n.back+=w}if(l>>>=m,h-=m,n.back+=m,n.length=b,0===v){n.mode=26;break}if(32&v){n.back=-1,n.mode=wi;break}if(64&v){t.msg=\"invalid literal/length code\",n.mode=yi;break}n.extra=15&v,n.mode=22;case 22:if(n.extra){for(A=n.extra;h>>=n.extra,h-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=23;case 23:for(;S=n.distcode[l&(1<>>24,v=S>>>16&255,b=65535&S,!(m<=h);){if(0===a)break t;a--,l+=r[o++]<>w)],m=S>>>24,v=S>>>16&255,b=65535&S,!(w+m<=h);){if(0===a)break t;a--,l+=r[o++]<>>=w,h-=w,n.back+=w}if(l>>>=m,h-=m,n.back+=m,64&v){t.msg=\"invalid distance code\",n.mode=yi;break}n.offset=b,n.extra=15&v,n.mode=24;case 24:if(n.extra){for(A=n.extra;h>>=n.extra,h-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){t.msg=\"invalid distance too far back\",n.mode=yi;break}n.mode=25;case 25:if(0===c)break t;if(d=f-c,n.offset>d){if(d=n.offset-d,d>n.whave&&n.sane){t.msg=\"invalid distance too far back\",n.mode=yi;break}d>n.wnext?(d-=n.wnext,p=n.wsize-d):p=n.wnext-d,d>n.length&&(d=n.length),g=n.window}else g=i,p=s-n.offset,d=n.length;d>c&&(d=c),c-=d,n.length-=d;do{i[s++]=g[p++]}while(--d);0===n.length&&(n.mode=21);break;case 26:if(0===c)break t;i[s++]=n.length,c--,n.mode=21;break;case 27:if(n.wrap){for(;h<32;){if(0===a)break t;a--,l|=r[o++]<Ei(t,15),inflateInit2:Ei,inflate:Ii,inflateEnd:t=>{if(!t||!t.state)return pi;let e=t.state;return e.window&&(e.window=null),t.state=null,ui},inflateGetHeader:(t,e)=>{if(!t||!t.state)return pi;const n=t.state;return 0==(2&n.wrap)?pi:(n.head=e,e.done=!1,ui)},inflateSetDictionary:(t,e)=>{const n=e.length;let r,i,o;return t&&t.state?(r=t.state,0!==r.wrap&&11!==r.mode?pi:11===r.mode&&(i=1,i=Rn(i,e,n,0),i!==r.check)?gi:(o=Ri(t,e,n,n),o?(r.mode=31,mi):(r.havedict=1,ui))):pi},inflateInfo:\"pako inflate (from Nodeca project)\"};var Pi=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1};const Oi=Object.prototype.toString,{Z_NO_FLUSH:Fi,Z_FINISH:Di,Z_OK:Bi,Z_STREAM_END:zi,Z_NEED_DICT:Hi,Z_STREAM_ERROR:Vi,Z_DATA_ERROR:ji,Z_MEM_ERROR:Ui}=On;function qi(t){this.options=Ir({chunkSize:65536,windowBits:15,to:\"\"},t||{});const e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),!(e.windowBits>=0&&e.windowBits<16)||t&&t.windowBits||(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&0==(15&e.windowBits)&&(e.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new zr,this.strm.avail_out=0;let n=Ni.inflateInit2(this.strm,e.windowBits);if(n!==Bi)throw new Error(Pn[n]);if(this.header=new Pi,Ni.inflateGetHeader(this.strm,this.header),e.dictionary&&(\"string\"==typeof e.dictionary?e.dictionary=Fr(e.dictionary):\"[object ArrayBuffer]\"===Oi.call(e.dictionary)&&(e.dictionary=new Uint8Array(e.dictionary)),e.raw&&(n=Ni.inflateSetDictionary(this.strm,e.dictionary),n!==Bi)))throw new Error(Pn[n])}function Wi(t,e){const n=new qi(e);if(n.push(t),n.err)throw n.msg||Pn[n.err];return n.result}qi.prototype.push=function(t,e){const n=this.strm,r=this.options.chunkSize,i=this.options.dictionary;let o,s,a;if(this.ended)return!1;for(s=e===~~e?e:!0===e?Di:Fi,\"[object ArrayBuffer]\"===Oi.call(t)?n.input=new Uint8Array(t):n.input=t,n.next_in=0,n.avail_in=n.input.length;;){for(0===n.avail_out&&(n.output=new Uint8Array(r),n.next_out=0,n.avail_out=r),o=Ni.inflate(n,s),o===Hi&&i&&(o=Ni.inflateSetDictionary(n,i),o===Bi?o=Ni.inflate(n,s):o===ji&&(o=Hi));n.avail_in>0&&o===zi&&n.state.wrap>0&&0!==t[n.next_in];)Ni.inflateReset(n),o=Ni.inflate(n,s);switch(o){case Vi:case ji:case Hi:case Ui:return this.onEnd(o),this.ended=!0,!1}if(a=n.avail_out,n.next_out&&(0===n.avail_out||o===zi))if(\"string\"===this.options.to){let t=Br(n.output,n.next_out),e=n.next_out-t,i=Dr(n.output,t);n.next_out=e,n.avail_out=r-e,e&&n.output.set(n.output.subarray(t,t+e),0),this.onData(i)}else this.onData(n.output.length===n.next_out?n.output:n.output.subarray(0,n.next_out));if(o!==Bi||0!==a){if(o===zi)return o=Ni.inflateEnd(this.strm),this.onEnd(o),this.ended=!0,!0;if(0===n.avail_in)break}}return!0},qi.prototype.onData=function(t){this.chunks.push(t)},qi.prototype.onEnd=function(t){t===Bi&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=Nr(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var $i=function(t,e){return(e=e||{}).raw=!0,Wi(t,e)},Gi={Inflate:qi,inflate:Wi,inflateRaw:$i,ungzip:Wi,constants:On};const{Deflate:Zi,deflate:Xi,deflateRaw:Yi,gzip:Ki}=ti,{Inflate:Qi,inflate:Ji,inflateRaw:to,ungzip:eo}=Gi;var no={Deflate:Zi,deflate:Xi,deflateRaw:Yi,gzip:Ki,Inflate:Qi,inflate:Ji,inflateRaw:to,ungzip:eo,constants:On};no.deflateRaw,no.deflate,no.inflateRaw;const ro=no.inflate;no.gzip;function io(t,e){const n=[];let r=0,i=0;for(e=e||t.byteLength-18;r100?co(new Uint8Array(t.buffer,t.byteOffset+e,i),n,r):function(t,e,n,r,i){for(let o=0;o=0){i=atob(i);const t=new Uint8Array(i.length);for(let e=0;e0?no.ungzip(t):t,n}return decodeURIComponent(i)}const ho=function(t,e){if(0!==t.length){var n=Math.floor(t.length*((100-e)/100));return 0===n?(t.sort((function(t,e){return e-t})),t[n]):function(t,e){var n,r=new po;for(n=0;nr.content[0])&&(r.content.length===e&&r.pop(),r.push(i))}return r.content[0]}(t,n)}},uo=function(t,e,n){return Math.min(Math.max(t,e),n)},fo=function(t){return Math.log(t)/Math.LN2};function po(){this.content=[]}function go(t,e){return Math.random()*(e-t)+t}po.prototype={push:function(t){this.content.push(t),this.bubbleUp(this.content.length-1)},pop:function(){var t=this.content[0],e=this.content.pop();return this.content.length>0&&(this.content[0]=e,this.sinkDown(0)),t},remove:function(t){for(var e=this.content.length,n=0;n0;){var r=Math.floor((t+1)/2)-1,i=this.content[r];if(n>=i)break;this.content[r]=e,this.content[t]=i,t=r}},sinkDown:function(t){for(var e=this.content.length,n=this.content[t],r=n;;){var i=2*(t+1),o=i-1,s=null;if(o{let t=[];for(let e=1;e>=.5;e-=.1)for(let n=0;n<1;n+=1/28){const r=\"rgb(\"+mo.hsvToRgb(n,1,e).join(\",\")+\")\";t.push(r)}return t.pop(),t.push(mo.rgbColor(16,16,16)),t},rgbToHex:function(t){return(t=t.match(/^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i))&&4===t.length?\"#\"+(\"0\"+parseInt(t[1],10).toString(16)).slice(-2)+(\"0\"+parseInt(t[2],10).toString(16)).slice(-2)+(\"0\"+parseInt(t[3],10).toString(16)).slice(-2):\"\"},hexToRgb:function(t){var e=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(t);if(null!==e)return\"rgb(\"+parseInt(e[1],16)+\",\"+parseInt(e[2],16)+\",\"+parseInt(e[3],16)+\")\"},hsvToRgb:function(t,e,n){var r,i,o,s=Math.floor(6*t),a=6*t-s,c=n*(1-e),l=n*(1-a*e),h=n*(1-(1-a)*e);switch(s%6){case 0:r=n,i=h,o=c;break;case 1:r=l,i=n,o=c;break;case 2:r=c,i=n,o=h;break;case 3:r=c,i=l,o=n;break;case 4:r=h,i=c,o=n;break;case 5:r=n,i=c,o=l}return[Math.floor(255*r),Math.floor(255*i),Math.floor(255*o)]},hslToRgb:function(t,e,n){var r,i,o;if(0===e)r=i=o=n;else{var s=n<.5?n*(1+e):n+e-n*e,a=2*n-s;r=mo.hue2rgb(a,s,t+1/3),i=mo.hue2rgb(a,s,t),o=mo.hue2rgb(a,s,t-1/3)}return[255*r,255*i,255*o]},hue2rgb:(t,e,n)=>(n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t),rgbaColor:function(t,e,n,r){return\"rgba(\"+(t=uo(t,0,255))+\",\"+(e=uo(e,0,255))+\",\"+(n=uo(n,0,255))+\",\"+(r=uo(r,0,1))+\")\"},rgbColor:function(t,e,n){return\"rgb(\"+(t=uo(t,0,255))+\",\"+(e=uo(e,0,255))+\",\"+(n=uo(n,0,255))+\")\"},greyScale:function(t){var e=uo(t,0,255);return\"rgb(\"+e+\",\"+e+\",\"+e+\")\"},randomGrey:function(t,e){t=uo(t,0,255),e=uo(e,0,255);var n=Math.round(go(t,e)).toString(10);return\"rgb(\"+n+\",\"+n+\",\"+n+\")\"},randomRGB:function(t,e){return t=uo(t,0,255),e=uo(e,0,255),\"rgb(\"+Math.round(go(t,e)).toString(10)+\",\"+Math.round(go(t,e)).toString(10)+\",\"+Math.round(go(t,e)).toString(10)+\")\"},randomRGBConstantAlpha:function(t,e,n){return t=uo(t,0,255),e=uo(e,0,255),\"rgba(\"+Math.round(go(t,e)).toString(10)+\",\"+Math.round(go(t,e)).toString(10)+\",\"+Math.round(go(t,e)).toString(10)+\",\"+n+\")\"},addAlpha:function(t,e){if(\"0\"===t||\".\"===t)t=\"rgb(0,0,0)\";else{const e=this.colorNameToHex(t);e&&(t=e)}var n=/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t);if(t.startsWith(\"rgba\")){const n=t.lastIndexOf(\",\");return t.substring(0,n+1)+e.toString()+\")\"}return n&&(t=mo.hexToRgb(t)),t.startsWith(\"rgb\")?t.replace(\"rgb\",\"rgba\").replace(\")\",\", \"+e+\")\"):(console.log(t+\" is not an rgb style string\"),t)},rgbComponents:function(t){if(\"0\"===t||\".\"===t)return[0,0,0];if(/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t))t=mo.hexToRgb(t);else if(!t.startsWith(\"rgb\")){const e=this.colorNameToHex(t);t=this.hexToRgb(e)}if(t.startsWith(\"rgb(\"))return t.substring(4,t.length-1).split(\",\").map((t=>Number.parseInt(t.trim())));if(t.startsWith(\"rgba(\"))return t.substring(5,t.length-1).split(\",\").map(((t,e)=>(t=t.trim(),3===e?Number.parseFloat(t):Number.parseInt(t))));throw Error(\"Unrecognized color string: color\")},getCompositeColor:function(t,e,n){return\"rgb(\"+Math.floor(n*e[0]+(1-n)*t[0])+\",\"+Math.floor(n*e[1]+(1-n)*t[1])+\",\"+Math.floor(n*e[2]+(1-n)*t[2])+\")\"},createColorString:function(t){return(t=function(t){return void 0===t||((t.startsWith(\"'\")||t.startsWith('\"'))&&(t=t.substring(1)),(t.endsWith(\"'\")||t.endsWith('\"'))&&(t=t.substring(0,t.length-1))),t}(t)).includes(\",\")?t.startsWith(\"rgb\")?t:\"rgb(\"+t+\")\":t},darkenLighten:function(t,e){let n,r=this.colorNameToHex(t);n=r?mo.hexToRgb(r):t.startsWith(\"rgb(\")?t:mo.hexToRgb(t);const i=n.replace(\")\",\"\").substring(4).split(\",\"),o=Math.max(0,Math.min(255,Number.parseInt(i[0].trim())+e)),s=Math.max(0,Math.min(255,Number.parseInt(i[1].trim())+e)),a=Math.max(0,Math.min(255,Number.parseInt(i[2].trim())+e));return\"rgb(\"+o.toString()+\",\"+s.toString()+\",\"+a.toString()+\")\"},colorNameToHex:function(t){return{aliceblue:\"#f0f8ff\",antiquewhite:\"#faebd7\",aqua:\"#00ffff\",aquamarine:\"#7fffd4\",azure:\"#f0ffff\",beige:\"#f5f5dc\",bisque:\"#ffe4c4\",black:\"#000000\",blanchedalmond:\"#ffebcd\",blue:\"#0000ff\",blueviolet:\"#8a2be2\",brown:\"#a52a2a\",burlywood:\"#deb887\",cadetblue:\"#5f9ea0\",chartreuse:\"#7fff00\",chocolate:\"#d2691e\",coral:\"#ff7f50\",cornflowerblue:\"#6495ed\",cornsilk:\"#fff8dc\",crimson:\"#dc143c\",cyan:\"#00ffff\",darkblue:\"#00008b\",darkcyan:\"#008b8b\",darkgoldenrod:\"#b8860b\",darkgray:\"#a9a9a9\",darkgreen:\"#006400\",darkkhaki:\"#bdb76b\",darkmagenta:\"#8b008b\",darkolivegreen:\"#556b2f\",darkorange:\"#ff8c00\",darkorchid:\"#9932cc\",darkred:\"#8b0000\",darksalmon:\"#e9967a\",darkseagreen:\"#8fbc8f\",darkslateblue:\"#483d8b\",darkslategray:\"#2f4f4f\",darkturquoise:\"#00ced1\",darkviolet:\"#9400d3\",deeppink:\"#ff1493\",deepskyblue:\"#00bfff\",dimgray:\"#696969\",dodgerblue:\"#1e90ff\",firebrick:\"#b22222\",floralwhite:\"#fffaf0\",forestgreen:\"#228b22\",fuchsia:\"#ff00ff\",gainsboro:\"#dcdcdc\",ghostwhite:\"#f8f8ff\",gold:\"#ffd700\",goldenrod:\"#daa520\",gray:\"#808080\",green:\"#008000\",greenyellow:\"#adff2f\",honeydew:\"#f0fff0\",hotpink:\"#ff69b4\",\"indianred \":\"#cd5c5c\",\"indigo \":\"#4b0082\",ivory:\"#fffff0\",khaki:\"#f0e68c\",lavender:\"#e6e6fa\",lavenderblush:\"#fff0f5\",lawngreen:\"#7cfc00\",lemonchiffon:\"#fffacd\",lightblue:\"#add8e6\",lightcoral:\"#f08080\",lightcyan:\"#e0ffff\",lightgoldenrodyellow:\"#fafad2\",lightgrey:\"#d3d3d3\",lightgreen:\"#90ee90\",lightpink:\"#ffb6c1\",lightsalmon:\"#ffa07a\",lightseagreen:\"#20b2aa\",lightskyblue:\"#87cefa\",lightslategray:\"#778899\",lightsteelblue:\"#b0c4de\",lightyellow:\"#ffffe0\",lime:\"#00ff00\",limegreen:\"#32cd32\",linen:\"#faf0e6\",magenta:\"#ff00ff\",maroon:\"#800000\",mediumaquamarine:\"#66cdaa\",mediumblue:\"#0000cd\",mediumorchid:\"#ba55d3\",mediumpurple:\"#9370d8\",mediumseagreen:\"#3cb371\",mediumslateblue:\"#7b68ee\",mediumspringgreen:\"#00fa9a\",mediumturquoise:\"#48d1cc\",mediumvioletred:\"#c71585\",midnightblue:\"#191970\",mintcream:\"#f5fffa\",mistyrose:\"#ffe4e1\",moccasin:\"#ffe4b5\",navajowhite:\"#ffdead\",navy:\"#000080\",oldlace:\"#fdf5e6\",olive:\"#808000\",olivedrab:\"#6b8e23\",orange:\"#ffa500\",orangered:\"#ff4500\",orchid:\"#da70d6\",palegoldenrod:\"#eee8aa\",palegreen:\"#98fb98\",paleturquoise:\"#afeeee\",palevioletred:\"#d87093\",papayawhip:\"#ffefd5\",peachpuff:\"#ffdab9\",peru:\"#cd853f\",pink:\"#ffc0cb\",plum:\"#dda0dd\",powderblue:\"#b0e0e6\",purple:\"#800080\",red:\"#ff0000\",rosybrown:\"#bc8f8f\",royalblue:\"#4169e1\",saddlebrown:\"#8b4513\",salmon:\"#fa8072\",sandybrown:\"#f4a460\",seagreen:\"#2e8b57\",seashell:\"#fff5ee\",sienna:\"#a0522d\",silver:\"#c0c0c0\",skyblue:\"#87ceeb\",slateblue:\"#6a5acd\",slategray:\"#708090\",snow:\"#fffafa\",springgreen:\"#00ff7f\",steelblue:\"#4682b4\",tan:\"#d2b48c\",teal:\"#008080\",thistle:\"#d8bfd8\",tomato:\"#ff6347\",turquoise:\"#40e0d0\",violet:\"#ee82ee\",wheat:\"#f5deb3\",white:\"#ffffff\",whitesmoke:\"#f5f5f5\",yellow:\"#ffff00\",yellowgreen:\"#9acd32\",darkgrey:\"#a9a9a9\",darkslategrey:\"#2f4f4f\",dimgrey:\"#696969\",grey:\"#808080\",lightgray:\"#d3d3d3\",lightslategrey:\"#778899\",slategrey:\"#708090\"}[t]}};let vo,bo;function wo(t,e,n){n&&(bo=Object.assign({},n)),e.addEventListener(\"mousedown\",yo.bind(t))}function yo(t){t.stopPropagation(),t.preventDefault(),function(t){if(!t.getClientRects().length)return{top:0,left:0};const e=t.getBoundingClientRect(),n=t.ownerDocument.defaultView;e.top,n.pageYOffset,e.left,n.pageXOffset}(this);const e=xo.bind(this),n=_o.bind(this),r=getComputedStyle(this),i=parseInt(r.top.replace(\"px\",\"\")),o=parseInt(r.left.replace(\"px\",\"\"));vo={dragFunction:e,dragEndFunction:n,screenX:t.screenX,screenY:t.screenY,top:i,left:o},document.addEventListener(\"mousemove\",e),document.addEventListener(\"mouseup\",n),document.addEventListener(\"mouseleave\",n),document.addEventListener(\"mouseexit\",n)}function xo(t){if(!vo)return void console.log(\"No drag data!\");t.stopPropagation(),t.preventDefault();const e=t.screenX-vo.screenX,n=t.screenY-vo.screenY,r=vo.left+e,i=bo?Math.max(bo.minY,vo.top+n):vo.top+n;this.style.left=`${r}px`,this.style.top=`${i}px`}function _o(t){if(!vo)return void console.log(\"No drag data!\");t.stopPropagation(),t.preventDefault();const e=vo.dragFunction,n=vo.dragEndFunction;document.removeEventListener(\"mousemove\",e),document.removeEventListener(\"mouseup\",n),document.removeEventListener(\"mouseleave\",n),document.removeEventListener(\"mouseexit\",n),vo=void 0}const ko={licorice:\"#000000\",lead:\"#1e1e1e\",tungsten:\"#3a3a3a\",iron:\"#545453\",steel:\"#6e6e6e\",tin:\"#878687\",nickel:\"#888787\",aluminum:\"#a09fa0\",magnesium:\"#b8b8b8\",silver:\"#d0d0d0\",mercury:\"#e8e8e8\",snow:\"#ffffff\",cayenne:\"#891100\",mocha:\"#894800\",aspargus:\"#888501\",fern:\"#458401\",clover:\"#028401\",moss:\"#018448\",teal:\"#008688\",ocean:\"#004a88\",midnight:\"#001888\",eggplant:\"#491a88\",plum:\"#891e88\",maroon:\"#891648\",maraschino:\"#ff2101\",tangerine:\"#ff8802\",lemon:\"#fffa03\",lime:\"#83f902\",spring:\"#05f802\",seam_foam:\"#03f987\",turquoise:\"#00fdff\",aqua:\"#008cff\",blueberry:\"#002eff\",grape:\"#8931ff\",magenta:\"#ff39ff\",strawberry:\"#ff2987\",salmon:\"#ff726e\",cantaloupe:\"#ffce6e\",banana:\"#fffb6d\",honeydew:\"#cefa6e\",flora:\"#68f96e\",spindrift:\"#68fbd0\",ice:\"#68fdff\",sky:\"#6acfff\",orchid:\"#6e76ff\",lavender:\"#d278ff\",bubblegum:\"#ff7aff\",carnation:\"#ff7fd3\"},So=\"googleapis\",Co={oauthTokens:{},setToken:function(t,e){e=e||So,this.oauthTokens[e]=t,e===So&&(this.google.access_token=t)},getToken:function(t){let e;t=t||So;for(let n of Object.keys(this.oauthTokens)){if(Eo(n).test(t)){e=this.oauthTokens[n];break}}return e},removeToken:function(t){t=t||So;for(let e of Object.keys(this.oauthTokens)){Eo(e).test(t)&&(this.oauthTokens[e]=void 0)}t===So&&(this.google.access_token=void 0)},google:{setToken:function(t){Co.setToken(t)}}};function Eo(t){return new RegExp(\"^\"+t.split(/\\*+/).map(Ao).join(\".*\")+\"$\")}function Ao(t){return t.replace(/[|\\\\{}()[\\]^$+*?.]/g,\"\\\\$&\")}const To=new class{constructor(t){this.requestsPerSecond=t.requestsPerSecond||10,this.lastStartTime=0,this.queued=[]}add(t,e){var n=this;return new Promise((function(e,r){n.queued.push({resolve:e,reject:r,asyncFunction:t}),n.dequeue()}))}addAll(t,e){var n=t.map(function(t){return this.add(t,e)}.bind(this));return Promise.all(n)}dequeue(){if(this.queued.length>0){var t=new Date,e=1e3/this.requestsPerSecond+1,n=t-this.lastStartTime;n>=e?this._execute():setTimeout(function(){this.dequeue()}.bind(this),e-n)}}async _execute(){this.lastStartTime=new Date;var t=this.queued.shift();const e=t.asyncFunction;try{const n=await e();t.resolve(n)}catch(e){t.reject(e)}}}({requestsPerSecond:8}),Lo={apiKey:void 0,setApiKey:function(t){this.apiKey=t},load:Mo,loadArrayBuffer:async function(t,e){return(e=e||{}).responseType||(e.responseType=\"arraybuffer\"),Ue(t)?Io(t,e):Mo(t,e)},loadJson:async function(t,e){\"POST\"===((e=e||{}).method||(e.sendData?\"POST\":\"GET\"))&&(e.contentType=\"application/json\");const n=await this.loadString(t,e);return n?JSON.parse(n):n},loadString:async function(t,e){return e=e||{},t instanceof File?async function(t,e){const n=e.range?t.slice(e.range.start,e.range.start+e.range.size):t;return Oo(await n.arrayBuffer())}(t,e):async function(t,e){(e=e||{}).responseType=\"arraybuffer\";return Oo(await Lo.load(t,e))}(t,e)}};async function Mo(t,e){e=e||{};const n=typeof t;if(Ue(t=await(\"function\"==typeof t?t():t)))return Io(t,e);if(\"function\"==typeof t.startsWith){if(t.startsWith(\"data:\")){const n=lo(t).buffer;if(e.range){const t=e.range.size?e.range.start+e.range.size:n.byteLength;return n.slice(e.range.start,t)}return n}return t.startsWith(\"https://drive.google.com\")&&(t=Ie(t)),Me(t)||t.startsWith(\"https://www.dropbox.com\")?To.add((async function(){return Ro(t,e)})):Ro(t,e)}throw Error(`url must be either a 'File', 'string', 'function', or 'Promise'. Actual type: ${n}`)}async function Ro(t,e){t=function(t){return t.includes(\"//www.dropbox.com\")?t.replace(\"//www.dropbox.com\",\"//dl.dropboxusercontent.com\"):t.includes(\"//drive.google.com\")?Ie(t):t.includes(\"//www.broadinstitute.org/igvdata\")?t.replace(\"//www.broadinstitute.org/igvdata\",\"//data.broadinstitute.org/igvdata\"):t.includes(\"//igvdata.broadinstitute.org\")?t.replace(\"//igvdata.broadinstitute.org\",\"https://dn7ywbm9isq8j.cloudfront.net\"):t.startsWith(\"ftp://ftp.ncbi.nlm.nih.gov/geo\")?t.replace(\"ftp://\",\"https://\"):t}(t);let n=(e=e||{}).oauthToken||function(t){const e=Te(t)?void 0:He(t).host;let n=Co.getToken(e);if(n)return n;if(void 0===e){const t=Po();if(t&&t.expires_at>Date.now())return t.access_token}}(t);return n&&(n=await(\"function\"==typeof n?n():n)),new Promise((function(r,i){Te(t)&&!No(t)&&(Le(t)&&(t=Re(t)),t=function(t){let e=Lo.apiKey;e||\"undefined\"==typeof gapi||(e=gapi.apiKey);if(void 0!==e&&!t.includes(\"key=\")){const n=t.includes(\"?\")?\"&\":\"?\";t=t+n+\"key=\"+e}return t}(t),Me(t)&&function(t){if(t.includes(\"supportsTeamDrive\"))return t;{const e=t.includes(\"?\")?\"&\":\"?\";t=t+e+\"supportsTeamDrive=true\"}}(t),n||(n=Po()));const o=e.headers||{};n&&function(t,e){e&&(t[\"Cache-Control\"]=\"no-cache\",t.Authorization=\"Bearer \"+e)}(o,n);const s=e.range,a=navigator.userAgent.indexOf(\"Chrome\")>-1;0===navigator.vendor.indexOf(\"Apple\")&&/\\sSafari\\//.test(navigator.userAgent),s&&a&&!function(t){return t.indexOf(\"X-Amz-Signature\")>-1}(t)&&!No(t)&&(t+=t.includes(\"?\")?\"&\":\"?\",t+=\"someRandomSeed=\"+Math.random().toString(36));const c=new XMLHttpRequest,l=e.sendData||e.body,h=e.method||(l?\"POST\":\"GET\"),u=e.responseType,f=e.contentType,d=e.mimeType;if(c.open(h,t),e.timeout&&(c.timeout=e.timeout),s){var p=s.size?s.start+s.size-1:\"\";c.setRequestHeader(\"Range\",\"bytes=\"+s.start+\"-\"+p)}if(f&&c.setRequestHeader(\"Content-Type\",f),d&&c.overrideMimeType(d),u&&(c.responseType=u),o)for(let t of Object.keys(o)){const e=o[t];c.setRequestHeader(t,e)}!0===e.withCredentials&&(c.withCredentials=!0),c.onload=async function(n){0===c.status||c.status>=200&&c.status<=300?s&&206!==c.status&&0!==s.start?(c.response.length>1e5&&alert(`Warning: Range header ignored for URL: ${t}. This can have performance impacts.`),r(c.response.slice(s.start,s.start+s.size))):r(c.response):\"undefined\"==typeof gapi||404!==c.status&&401!==c.status&&403!==c.status||!Te(t)||e.retries?403===c.status?g(\"Access forbidden: \"+t):416===c.status?g(\"Unsatisfiable range\"):g(c.status):m()},c.onerror=function(n){Te(t)&&!e.retries&&m(),g(\"Error accessing resource: \"+t+\" Status: \"+c.status)},c.ontimeout=function(t){g(\"Timed out\")},c.onabort=function(t){console.log(\"Aborted\"),i(t)};try{c.send(l)}catch(t){i(t)}function g(t){if(!i)throw t;i(t)}async function m(){try{const n=await async function(t){if(Fe()){const e=function(t){return Me(t)?\"https://www.googleapis.com/auth/drive.file\":Le(t)?\"https://www.googleapis.com/auth/devstorage.read_only\":\"https://www.googleapis.com/auth/userinfo.profile\"}(t),n=await Be(e);return n?n.access_token:void 0}throw Error(\"Authorization is required, but Google oAuth has not been initalized. Contact your site administrator for assistance.\")}(t);e.retries=1,e.oauthToken=n;const i=await Mo(t,e);r(i)}catch(t){if(t.error){const e=t.error.startsWith(\"popup_blocked\")?\"Google login popup blocked by browser.\":t.error;alert(e)}else g(t)}}}))}async function Io(t,e){let n=e&&e.range?t.slice(e.range.start,e.range.start+e.range.size):t;const r=await n.arrayBuffer();return\"arraybuffer\"===e.responseType?r:Oo(r)}function No(t){return t.indexOf(\"X-Goog-Signature\")>-1}function Po(){if(Fe()){const t=function(){let t=gapi.auth2.getAuthInstance().currentUser.get();if(t&&t.isSignedIn()){const{access_token:e,expires_at:n}=t.getAuthResponse();return{access_token:e,expires_at:n}}}();return t?t.access_token:void 0}}function Oo(t){let e;return e=function(t){const e=ArrayBuffer.isView(t)?t:new Uint8Array(t);return 31===e[0]&&139===e[1]}(t)?function(t){const e=ArrayBuffer.isView(t)?t:new Uint8Array(t);return 0!=(4&e[3])&&66===e[12]&&67===e[13]?io(e.buffer):no.ungzip(e)}(t):new Uint8Array(t),\"TextDecoder\"in function(){if(\"undefined\"!=typeof self)return self;return\"undefined\"!=typeof global?global:window}()?(new TextDecoder).decode(e):function(t){var e=\"\",n=0;for(;n0)for(var s=0;s1&&r.sort((function(t,e){return t.low-e.low})),r}logIntervals(){!function t(e,n){for(var r=\"\",i=0;i=t.low&&Bo.call(this,t,e.left,n),e.right!==Fo&&e.right.min<=t.high&&Bo.call(this,t,e.right,n),n}function zo(t){var e=t.right;t.right=e.left,e.left!==Fo&&(e.left.parent=t),e.parent=t.parent,t.parent===Fo?this.root=e:t.parent.left===t?t.parent.left=e:t.parent.right=e,e.left=t,t.parent=e,Vo.call(this,t)}function Ho(t){var e=t.left;t.left=e.right,e.right!==Fo&&(e.right.parent=t),e.parent=t.parent,t.parent===Fo?this.root=e:t.parent.right===t?t.parent.right=e:t.parent.left=e,e.right=t,t.parent=e,Vo.call(this,t)}function Vo(t){for(;t!==Fo;){var e=t.left.max>t.right.max?t.left.max:t.right.max,n=t.interval.high;t.max=e>n?e:n;var r=t.left.mint.low?1:this.hight.high?1:0}overlaps(t){return this.low<=t.high&&t.low<=this.high}}function Uo(t){this.parent=Fo,this.left=Fo,this.right=Fo,this.interval=t,this.color=2}class qo{constructor(t,e,n){t=t||[],this.treeMap=this.buildTreeMap(t,e),this.range=n,this.count=t.length}containsRange(t){return void 0===this.range||this.range.contains(t.chr,t.start,t.end)}queryFeatures(t,e,n){const r=this.treeMap[t];if(!r)return[];const i=r.findOverlapping(e,n);if(0===i.length)return[];{const r=[],o=this.allFeatures[t];if(o){for(let t of i){const i=t.value;for(let t=i.start;tn)break;i.end>=e&&r.push(i)}}r.sort((function(t,e){return t.start-e.start}))}return r}}getAllFeatures(){return this.allFeatures}buildTreeMap(t,e){const n={},r=[];if(this.allFeatures={},t){for(let n of t){let t=n.chr;e&&(t=e.getChromosomeName(t));let i=this.allFeatures[t];i||(r.push(t),i=[],this.allFeatures[t]=i),i.push(n)}for(let t of r){const e=this.allFeatures[t];e.sort((function(t,e){return t.start===e.start?0:t.start>e.start?1:-1})),n[t]=Wo(e)}}return n}}function Wo(t){const e=new Do,n=t.length,r=Math.max(10,Math.round(n/10));for(let i=0;ie.start?1:-1}));for(let i=0;in)break;o.end>e&&t.push(o)}})),t.sort((function(t,e){return t.start-e.start})),t)}return[]};function Zo(t,e){const n=ge({class:\"igv-menu-popup-check-container\"}),r=ge();n.appendChild(r);const i=ye(\"check\",!0===e?\"#444\":\"transparent\");r.appendChild(i);const o=ge();return o.innerText=t,n.appendChild(o),n}const Xo={trackMenuItemList:function(t){const e=new Set([\"alignment\",\"annotation\",\"variant\",\"eqtl\",\"snp\"]),n=t.track.config&&void 0!==t.track.config.visibilityWindow;let r=[];return\"sequence\"!==t.track.config.type&&(r.push(function(t){const e=e=>{const n=function(){let e=t.browser.inputDialog.input.value;e=\"\"===e||void 0===e?\"untitled\":e.trim(),t.track.name=e},r={label:\"Track Name\",value:Ko(t.track)||\"unnamed\",callback:n};t.browser.inputDialog.present(r,e)},n=pe(\"
\");return n.text(\"Set track name\"),{object:n,click:e}}(t)),r.push(function(t){const e=e=>{const n=()=>{const e=Number(t.browser.inputDialog.input.value,10);void 0!==e&&(void 0!==t.track.minHeight&&t.track.minHeight>e&&(t.track.minHeight=e),void 0!==t.track.maxHeight&&t.track.maxHeight\");return n.text(\"Set track height\"),{object:n,click:e}}(t))),this.showColorPicker(t.track)&&(r.push(\"
\"),r.push(Yo({trackView:t,label:\"Set track color\",option:\"color\"})),r.push(function(t){let{trackView:e,label:n}=t;const r=pe(\"
\");return r.text(n),{object:r,click:()=>{e.track.color=void 0,e.repaintViews()}}}({trackView:t,label:\"Unset track color\"})),r.push(Yo({trackView:t,label:\"Set alt color\",option:\"altColor\"}))),t.track.menuItemList&&(r=r.concat(t.track.menuItemList())),(n||e.has(t.track.type))&&(r.push(\"
\"),r.push(function(t){const e=e=>{const n=()=>{let e=t.browser.inputDialog.input.value;e=\"\"===e||void 0===e?-1:e.trim(),t.track.visibilityWindow=Number.parseInt(e),t.track.config.visibilityWindow=Number.parseInt(e),t.updateViews()},r={label:\"Visibility Window\",value:t.track.visibilityWindow,callback:n};t.browser.inputDialog.present(r,e)},n=pe(\"
\");return n.text(\"Set visibility window\"),{object:n,click:e}}(t))),!1!==t.track.removable&&(r.push(\"
\"),r.push(function(t){const e=pe(\"
\");return e.text(\"Remove track\"),{object:e,click:()=>t.browser.removeTrack(t.track)}}(t))),r},numericDataMenuItems:function(t){const e=[];e.push(\"
\");const n=pe(\"
\");n.text(\"Set data range\");return e.push({object:n,click:()=>{t.browser.dataRangeDialog.configure(t),t.browser.dataRangeDialog.present(pe(t.browser.columnContainer))}}),void 0!==t.track.logScale&&e.push({object:pe(Zo(\"Log scale\",t.track.logScale)),click:()=>{t.track.logScale=!t.track.logScale,t.repaintViews()}}),e.push({object:pe(Zo(\"Autoscale\",t.track.autoscale)),click:()=>{t.track.autoscale=!t.track.autoscale,t.updateViews()}}),e},trackMenuItemListHelper:function(t,e){var n=[];return t.length>0&&(n=t.map((function(t,n){var r;if(t.name?(r=pe(\"
\")).text(t.name):t.object?r=t.object:\"string\"==typeof t.label?(r=pe(\"
\")).html(t.label):\"string\"==typeof t&&(r=t.startsWith(\"<\")?pe(t):pe(\"
\"+t+\"
\")),0===n&&r.addClass(\"igv-track-menu-border-top\"),t.click){function i(n){t.click(n),e.hide(),n.preventDefault(),n.stopPropagation()}r.on(\"click\",i),r.on(\"touchend\",(function(t){i(t)})),r.on(\"mouseup\",(function(t){t.preventDefault(),t.stopPropagation()}))}return{object:r,init:t.init||void 0}}))),n},showColorPicker:t=>void 0===t.type||\"bedtype\"===t.type||\"alignment\"===t.type||\"annotation\"===t.type||\"variant\"===t.type||\"wig\"===t.type||\"interact\"===t.type,createMenuItem(t,e){const n=pe(\"
\");return n.text(t),{object:n,click:e}}};function Yo(t){let{trackView:e,label:n,option:r}=t;const i=pe(\"
\");return i.text(n),{object:i,click:()=>e.presentColorPicker(r)}}function Ko(t){return t.trackView.viewports[0].$trackLabel.text()}function Qo(t){return function(t,e){const n=document.createElement(t);e&&(e.class&&n.classList.add(e.class),e.id&&(n.id=e.id),e.style&&function(t,e){for(let n of Object.keys(e))t.style[n]=e[n]}(n,e.style));return n}(\"div\",t)}function Jo(t){const e=getComputedStyle(t);\"none\"!==e.display&&(t._initialDisplay=e.display),t.style.display=\"none\"}function ts(t){if(\"none\"===getComputedStyle(t).display){const e=t._initialDisplay||\"block\";t.style.display=e}}function es(t,e){e=e||\"currentColor\";let n=ns[t];n||(console.error(`No icon named: ${t}`),n=ns.question);const r=document.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\");r.setAttributeNS(null,\"viewBox\",\"0 0 \"+n[0]+\" \"+n[1]);const i=document.createElementNS(\"http://www.w3.org/2000/svg\",\"path\");return i.setAttributeNS(null,\"fill\",e),i.setAttributeNS(null,\"d\",n[4]),r.appendChild(i),r}const ns={check:[512,512,[],\"f00c\",\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"],cog:[512,512,[],\"f013\",\"M444.788 291.1l42.616 24.599c4.867 2.809 7.126 8.618 5.459 13.985-11.07 35.642-29.97 67.842-54.689 94.586a12.016 12.016 0 0 1-14.832 2.254l-42.584-24.595a191.577 191.577 0 0 1-60.759 35.13v49.182a12.01 12.01 0 0 1-9.377 11.718c-34.956 7.85-72.499 8.256-109.219.007-5.49-1.233-9.403-6.096-9.403-11.723v-49.184a191.555 191.555 0 0 1-60.759-35.13l-42.584 24.595a12.016 12.016 0 0 1-14.832-2.254c-24.718-26.744-43.619-58.944-54.689-94.586-1.667-5.366.592-11.175 5.459-13.985L67.212 291.1a193.48 193.48 0 0 1 0-70.199l-42.616-24.599c-4.867-2.809-7.126-8.618-5.459-13.985 11.07-35.642 29.97-67.842 54.689-94.586a12.016 12.016 0 0 1 14.832-2.254l42.584 24.595a191.577 191.577 0 0 1 60.759-35.13V25.759a12.01 12.01 0 0 1 9.377-11.718c34.956-7.85 72.499-8.256 109.219-.007 5.49 1.233 9.403 6.096 9.403 11.723v49.184a191.555 191.555 0 0 1 60.759 35.13l42.584-24.595a12.016 12.016 0 0 1 14.832 2.254c24.718 26.744 43.619 58.944 54.689 94.586 1.667 5.366-.592 11.175-5.459 13.985L444.788 220.9a193.485 193.485 0 0 1 0 70.2zM336 256c0-44.112-35.888-80-80-80s-80 35.888-80 80 35.888 80 80 80 80-35.888 80-80z\"],exclamation:[192,512,[],\"f12a\",\"M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z\"],\"exclamation-circle\":[512,512,[],\"f06a\",\"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"],\"exclamation-triangle\":[576,512,[],\"f071\",\"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"],minus:[448,512,[],\"f068\",\"M424 318.2c13.3 0 24-10.7 24-24v-76.4c0-13.3-10.7-24-24-24H24c-13.3 0-24 10.7-24 24v76.4c0 13.3 10.7 24 24 24h400z\"],\"minus-circle\":[512,512,[],\"f056\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z\"],\"minus-square\":[448,512,[],\"f146\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM92 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H92z\"],plus:[448,512,[],\"f067\",\"M448 294.2v-76.4c0-13.3-10.7-24-24-24H286.2V56c0-13.3-10.7-24-24-24h-76.4c-13.3 0-24 10.7-24 24v137.8H24c-13.3 0-24 10.7-24 24v76.4c0 13.3 10.7 24 24 24h137.8V456c0 13.3 10.7 24 24 24h76.4c13.3 0 24-10.7 24-24V318.2H424c13.3 0 24-10.7 24-24z\"],\"plus-circle\":[512,512,[],\"f055\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"],\"plus-square\":[448,512,[],\"f0fe\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"],question:[384,512,[],\"f128\",\"M202.021 0C122.202 0 70.503 32.703 29.914 91.026c-7.363 10.58-5.093 25.086 5.178 32.874l43.138 32.709c10.373 7.865 25.132 6.026 33.253-4.148 25.049-31.381 43.63-49.449 82.757-49.449 30.764 0 68.816 19.799 68.816 49.631 0 22.552-18.617 34.134-48.993 51.164-35.423 19.86-82.299 44.576-82.299 106.405V320c0 13.255 10.745 24 24 24h72.471c13.255 0 24-10.745 24-24v-5.773c0-42.86 125.268-44.645 125.268-160.627C377.504 66.256 286.902 0 202.021 0zM192 373.459c-38.196 0-69.271 31.075-69.271 69.271 0 38.195 31.075 69.27 69.271 69.27s69.271-31.075 69.271-69.271-31.075-69.27-69.271-69.27z\"],save:[448,512,[],\"f0c7\",\"M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z\"],search:[512,512,[],\"f002\",\"M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z\"],share:[512,512,[],\"f064\",\"M503.691 189.836L327.687 37.851C312.281 24.546 288 35.347 288 56.015v80.053C127.371 137.907 0 170.1 0 322.326c0 61.441 39.581 122.309 83.333 154.132 13.653 9.931 33.111-2.533 28.077-18.631C66.066 312.814 132.917 274.316 288 272.085V360c0 20.7 24.3 31.453 39.687 18.164l176.004-152c11.071-9.562 11.086-26.753 0-36.328z\"],spinner:[512,512,[],\"f110\",\"M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z\"],square:[448,512,[],\"f0c8\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"],\"square-full\":[512,512,[],\"f45c\",\"M512 512H0V0h512v512z\"],times:[384,512,[],\"f00d\",\"M323.1 441l53.9-53.9c9.4-9.4 9.4-24.5 0-33.9L279.8 256l97.2-97.2c9.4-9.4 9.4-24.5 0-33.9L323.1 71c-9.4-9.4-24.5-9.4-33.9 0L192 168.2 94.8 71c-9.4-9.4-24.5-9.4-33.9 0L7 124.9c-9.4 9.4-9.4 24.5 0 33.9l97.2 97.2L7 353.2c-9.4 9.4-9.4 24.5 0 33.9L60.9 441c9.4 9.4 24.5 9.4 33.9 0l97.2-97.2 97.2 97.2c9.3 9.3 24.5 9.3 33.9 0z\"],\"times-circle\":[512,512,[],\"f057\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z\"],wrench:[512,512,[],\"f0ad\",\"M481.156 200c9.3 0 15.12 10.155 10.325 18.124C466.295 259.992 420.419 288 368 288c-79.222 0-143.501-63.974-143.997-143.079C223.505 65.469 288.548-.001 368.002 0c52.362.001 98.196 27.949 123.4 69.743C496.24 77.766 490.523 88 481.154 88H376l-40 56 40 56h105.156zm-171.649 93.003L109.255 493.255c-24.994 24.993-65.515 24.994-90.51 0-24.993-24.994-24.993-65.516 0-90.51L218.991 202.5c16.16 41.197 49.303 74.335 90.516 90.503zM104 432c0-13.255-10.745-24-24-24s-24 10.745-24 24 10.745 24 24 24 24-10.745 24-24z\"]};function rs(t,e){var n=document.createElement(\"div\");t.appendChild(n),n.appendChild(function(t,e){return es(t,e)}(\"times\")),n.addEventListener(\"click\",(function(t){t.preventDefault(),t.stopPropagation(),e()}))}let is;function os(t,e){e.addEventListener(\"mousedown\",ss.bind(t))}function ss(t){t.stopPropagation(),t.preventDefault(),function(t){if(!t.getClientRects().length)return{top:0,left:0};const e=t.getBoundingClientRect(),n=t.ownerDocument.defaultView;e.top,n.pageYOffset,e.left,n.pageXOffset}(this);const e=as.bind(this),n=cs.bind(this),r=getComputedStyle(this),i=parseInt(r.top.replace(\"px\",\"\")),o=parseInt(r.left.replace(\"px\",\"\"));is={dragFunction:e,dragEndFunction:n,screenX:t.screenX,screenY:t.screenY,top:i,left:o},document.addEventListener(\"mousemove\",e),document.addEventListener(\"mouseup\",n),document.addEventListener(\"mouseleave\",n),document.addEventListener(\"mouseexit\",n)}function as(t){if(!is)return void console.log(\"No drag data!\");t.stopPropagation(),t.preventDefault();const e=t.screenX-is.screenX,n=t.screenY-is.screenY;this.style.left=`${is.left+e}px`,this.style.top=`${is.top+n}px`}function cs(t){if(!is)return void console.log(\"No drag data!\");t.stopPropagation(),t.preventDefault();const e=is.dragFunction,n=is.dragEndFunction;document.removeEventListener(\"mousemove\",e),document.removeEventListener(\"mouseup\",n),document.removeEventListener(\"mouseleave\",n),document.removeEventListener(\"mouseexit\",n),is=void 0}const ls={401:\"Access unauthorized\",403:\"Access forbidden\",404:\"Not found\"};class hs{constructor(t,e){this.alertProps=Object.assign({shouldFocus:!0,preventScroll:!1},e),this.container=Qo({class:\"igv-ui-alert-dialog-container\"}),t.appendChild(this.container),this.container.setAttribute(\"tabIndex\",\"-1\");const n=Qo();this.container.appendChild(n),this.errorHeadline=Qo(),n.appendChild(this.errorHeadline),this.errorHeadline.textContent=\"\";let r=Qo({class:\"igv-ui-alert-dialog-body\"});this.container.appendChild(r),this.body=Qo({class:\"igv-ui-alert-dialog-body-copy\"}),r.appendChild(this.body);let i=Qo();this.container.appendChild(i),this.ok=Qo(),i.appendChild(this.ok),this.ok.textContent=\"OK\";const o=()=>{\"function\"==typeof this.callback&&(this.callback(\"OK\"),this.callback=void 0),this.body.innerHTML=\"\",Jo(this.container)};this.ok.addEventListener(\"click\",(t=>{t.stopPropagation(),o()})),this.container.addEventListener(\"keypress\",(t=>{t.stopPropagation(),\"Enter\"===t.key&&o()})),os(this.container,n),Jo(this.container)}present(t,e){this.errorHeadline.textContent=t.message?\"ERROR\":\"\";let n=t.message||t;ls.hasOwnProperty(n)&&(n=ls[n]),this.body.innerHTML=n,this.callback=e,ts(this.container),this.alertProps.shouldFocus&&this.container.focus({preventScroll:this.alertProps.preventScroll})}}let us;const fs={init(t,e={}){us=new hs(t,e)},presentAlert(t,e){us||this.init(document.body),us.present(t,e)}};class ds{constructor(t){this.parent=t,this.container=Qo({class:\"igv-ui-generic-dialog-container\"}),t.appendChild(this.container);const e=Qo({class:\"igv-ui-generic-dialog-header\"});this.container.appendChild(e),this.label=Qo({class:\"igv-ui-generic-dialog-one-liner\"}),this.container.appendChild(this.label),this.label.text=\"Unlabeled\",this.input_container=Qo({class:\"igv-ui-generic-dialog-input\"}),this.container.appendChild(this.input_container),this.input=document.createElement(\"input\"),this.input_container.appendChild(this.input);const n=Qo({class:\"igv-ui-generic-dialog-ok-cancel\"});this.container.appendChild(n),this.ok=Qo(),n.appendChild(this.ok),this.ok.textContent=\"OK\",this.cancel=Qo(),n.appendChild(this.cancel),this.cancel.textContent=\"Cancel\",Jo(this.container),this.input.addEventListener(\"keyup\",(t=>{13===t.keyCode&&(\"function\"==typeof this.callback&&(this.callback(this.input.value),this.callback=void 0),this.input.value=void 0,Jo(this.container))})),this.ok.addEventListener(\"click\",(()=>{\"function\"==typeof this.callback&&(this.callback(this.input.value),this.callback=void 0),this.input.value=void 0,Jo(this.container)}));const r=()=>{this.input.value=\"\",Jo(this.container)};this.cancel.addEventListener(\"click\",r),rs(e,r),os(this.container,e)}present(t,e){this.label.textContent=t.label,this.input.value=t.value,this.callback=t.callback||t.click,ts(this.container);const{x:n,y:r}=function(t){if(t.type.startsWith(\"touch\")){const e=t.touches[0];return{x:e.pageX,y:e.pageY}}return{x:t.pageX,y:t.pageY}}(e);this.clampLocation(n,r)}clampLocation(t,e){const{width:n,height:r}=this.container.getBoundingClientRect(),{x:i,y:o,width:s,height:a}=this.parent.getBoundingClientRect(),c=Math.min(Math.max(e,o),o+a-r),l=Math.min(Math.max(t,i),i+s-n);this.container.style.left=`${l}px`,this.container.style.top=`${c}px`}}const ps={licorice:\"#000000\",lead:\"#1e1e1e\",tungsten:\"#3a3a3a\",iron:\"#545453\",steel:\"#6e6e6e\",tin:\"#878687\",nickel:\"#888787\",aluminum:\"#a09fa0\",magnesium:\"#b8b8b8\",silver:\"#d0d0d0\",mercury:\"#e8e8e8\",snow:\"#ffffff\",cayenne:\"#891100\",mocha:\"#894800\",aspargus:\"#888501\",fern:\"#458401\",clover:\"#028401\",moss:\"#018448\",teal:\"#008688\",ocean:\"#004a88\",midnight:\"#001888\",eggplant:\"#491a88\",plum:\"#891e88\",maroon:\"#891648\",maraschino:\"#ff2101\",tangerine:\"#ff8802\",lemon:\"#fffa03\",lime:\"#83f902\",spring:\"#05f802\",seam_foam:\"#03f987\",turquoise:\"#00fdff\",aqua:\"#008cff\",blueberry:\"#002eff\",grape:\"#8931ff\",magenta:\"#ff39ff\",strawberry:\"#ff2987\",salmon:\"#ff726e\",cantaloupe:\"#ffce6e\",banana:\"#fffb6d\",honeydew:\"#cefa6e\",flora:\"#68f96e\",spindrift:\"#68fbd0\",ice:\"#68fdff\",sky:\"#6acfff\",orchid:\"#6e76ff\",lavender:\"#d278ff\",bubblegum:\"#ff7aff\",carnation:\"#ff7fd3\"};class gs{constructor({parent:t,top:e,left:n,width:r,height:i,border:o,closeHandler:s}){let a=Qo({class:\"igv-ui-generic-container\"});t.appendChild(a),Jo(a),this.container=a,void 0!==e&&(this.container.style.top=`${e}px`),void 0!==n&&(this.container.style.left=`${n}px`),void 0!==r&&(this.container.style.width=`${r}px`),void 0!==i&&(this.container.style.height=`${i}px`),o&&(this.container.style.border=o);const c=Qo();this.container.appendChild(c),rs(c,(t=>{Jo(this.container),\"function\"==typeof s&&s(t)})),os(this.container,c)}show(){ts(this.container)}hide(){Jo(this.container)}dispose(){this.container.parent&&this.container.parent.removeChild(this.container)}}class ms extends gs{constructor({parent:t,top:e,left:n,width:r,height:i,defaultColors:o,colorHandler:s}){super({parent:t,top:e,left:n,width:r,height:i,border:\"1px solid gray\"}),vs(this.container,s,o)}}const vs=(t,e,n)=>{const r=Object.values(ps);for(let n of r){const r=Qo({class:\"igv-ui-color-swatch\"});t.appendChild(r),bs(r,n,e)}if(n)for(let r of n){const n=Qo({class:\"igv-ui-color-swatch\"});t.appendChild(n),bs(n,r,e)}},bs=(t,e,n)=>{t.style.backgroundColor=e,t.addEventListener(\"mouseenter\",(n=>t.style.borderColor=e)),t.addEventListener(\"mouseleave\",(e=>t.style.borderColor=\"white\")),t.addEventListener(\"click\",(t=>{t.stopPropagation(),n(e)})),t.addEventListener(\"touchend\",(t=>{t.stopPropagation(),n(e)}))};class ws{constructor(t,e){this.parent=t,this.popover=Qo({class:\"igv-ui-popover\"}),t.appendChild(this.popover);const n=Qo();this.popover.appendChild(n);const r=Qo();n.appendChild(r),e&&(r.textContent=e),rs(n,(()=>this.hide())),os(this.popover,n),this.popoverContent=Qo(),this.popover.appendChild(this.popoverContent),this.popover.style.display=\"none\"}presentContentWithEvent(t,e){this.popover.style.display=\"block\",this.popoverContent.innerHTML=e,ys(t,this.popover,this.popoverContent)}presentMenu(t,e){if(0===e.length)return;this.popover.style.display=\"block\";const n=function(t,e){const n=t.map((function(t,n){let r;if(\"string\"==typeof t)r=Qo(),r.innerHTML=t;else if(\"Node\"==typeof t)r=t;else{if(\"function\"==typeof t.init&&t.init(),\"checkbox\"===t.type)r=function(t,e){const n=Qo({class:\"igv-ui-trackgear-popover-check-container\"}),r=es(\"check\",!0===e?\"#444\":\"transparent\");r.style.borderColor=\"gray\",r.style.borderWidth=\"1px\",r.style.borderStyle=\"solid\",n.appendChild(r);let i=Qo();return i.textContent=t,n.appendChild(i),n}(\"Show all bases\",t.value);else if(\"color\"===t.type){const i=new ms({parent:e.parentElement,width:364,colorHandler:e=>t.click(e)});r=Qo(),\"string\"==typeof t.label&&(r.innerHTML=t.label);const o=t=>{i.show(),Jo(e),t.preventDefault(),t.stopPropagation()};r.addEventListener(\"click\",o),r.addEventListener(\"touchend\",o),r.addEventListener(\"mouseup\",(function(t){t.preventDefault(),t.stopPropagation()}))}else r=Qo(),\"string\"==typeof t.label&&(r.innerHTML=t.label);if(t.click&&\"color\"!==t.type){function s(n){t.click(),Jo(e),n.preventDefault(),n.stopPropagation()}r.addEventListener(\"click\",s),r.addEventListener(\"touchend\",s),r.addEventListener(\"mouseup\",(function(t){t.preventDefault(),t.stopPropagation()}))}}return{object:r,init:t.init}}));return n}(e,this.popover);for(let t of n)this.popoverContent.appendChild(t.object);ys(t,this.popover,this.popoverContent)}hide(){this.popover.style.display=\"none\",this.dispose()}dispose(){this.popover&&this.popover.parentNode.removeChild(this.popover);const t=Object.keys(this);for(let e of t)this[e]=void 0}}function ys(t,e,n){const{x:r,y:i,width:o}=function(t,e){const{clientX:n,clientY:r}=t;return((t,{clientX:e,clientY:n})=>{const{left:r,top:i,width:o,height:s}=t.getBoundingClientRect(),a=e-r,c=n-i;return{x:a,y:c,xNormalized:a/o,yNormalized:c/s,width:o,height:s}})(e,{clientX:n,clientY:r})}(t,e.parentNode);e.style.top=`${i}px`;const{width:s}=e.getBoundingClientRect(),a=r+s,c=a-o;e.style.left=`${a>o?r-c:r}px`,n.style.maxWidth=`${Math.min(s,o)}px`}if(\"undefined\"!=typeof document){function Yv(t){for(let e of document.styleSheets)if(e=e.href?e.href.replace(/^.*[\\\\\\/]/,\"\"):\"\",e===t)return!0;return!1}Yv(\"igv-ui.css\")||function(){var t=document.createElement(\"style\");t.setAttribute(\"type\",\"text/css\"),t.innerHTML='.igv-ui-popover {\\n cursor: default;\\n position: absolute;\\n z-index: 2048;\\n border-color: #7F7F7F;\\n border-radius: 4px;\\n border-style: solid;\\n border-width: 1px;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: small;\\n background-color: white; }\\n .igv-ui-popover > div:first-child {\\n display: flex;\\n flex-direction: row;\\n flex-wrap: nowrap;\\n justify-content: space-between;\\n align-items: center;\\n width: 100%;\\n height: 24px;\\n cursor: move;\\n border-top-left-radius: 4px;\\n border-top-right-radius: 4px;\\n border-bottom-color: #7F7F7F;\\n border-bottom-style: solid;\\n border-bottom-width: thin;\\n background-color: #eee; }\\n .igv-ui-popover > div:first-child > div:first-child {\\n margin-left: 4px; }\\n .igv-ui-popover > div:first-child > div:last-child {\\n margin-right: 4px;\\n height: 12px;\\n width: 12px;\\n color: #7F7F7F; }\\n .igv-ui-popover > div:first-child > div:last-child:hover {\\n cursor: pointer;\\n color: #444; }\\n .igv-ui-popover > div:last-child {\\n overflow-y: auto;\\n overflow-x: hidden;\\n max-height: 400px;\\n max-width: 800px;\\n background-color: white; }\\n .igv-ui-popover > div:last-child > div {\\n -webkit-user-select: text;\\n -moz-user-select: text;\\n -ms-user-select: text;\\n user-select: text;\\n margin-left: 4px;\\n margin-right: 4px;\\n min-width: 220px;\\n overflow-x: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap; }\\n .igv-ui-popover > div:last-child > div > span {\\n font-weight: bolder; }\\n .igv-ui-popover > div:last-child hr {\\n width: 100%; }\\n\\n.igv-ui-alert-dialog-container {\\n box-sizing: content-box;\\n position: absolute;\\n z-index: 2048;\\n top: 50%;\\n left: 50%;\\n width: 400px;\\n height: 200px;\\n border-color: #7F7F7F;\\n border-radius: 4px;\\n border-style: solid;\\n border-width: thin;\\n outline: none;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: 15px;\\n font-weight: 400;\\n background-color: white;\\n display: flex;\\n flex-flow: column;\\n flex-wrap: nowrap;\\n justify-content: space-between;\\n align-items: center; }\\n .igv-ui-alert-dialog-container > div:first-child {\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: center;\\n width: 100%;\\n height: 24px;\\n cursor: move;\\n border-top-left-radius: 4px;\\n border-top-right-radius: 4px;\\n border-bottom-color: #7F7F7F;\\n border-bottom-style: solid;\\n border-bottom-width: thin;\\n background-color: #eee; }\\n .igv-ui-alert-dialog-container > div:first-child div:first-child {\\n padding-left: 8px; }\\n .igv-ui-alert-dialog-container .igv-ui-alert-dialog-body {\\n -webkit-user-select: text;\\n -moz-user-select: text;\\n -ms-user-select: text;\\n user-select: text;\\n color: #373737;\\n width: 100%;\\n height: calc(100% - 24px - 64px);\\n overflow-y: scroll; }\\n .igv-ui-alert-dialog-container .igv-ui-alert-dialog-body .igv-ui-alert-dialog-body-copy {\\n margin: 16px;\\n width: auto;\\n height: auto;\\n overflow-wrap: break-word;\\n word-break: break-word;\\n background-color: white;\\n border: unset; }\\n .igv-ui-alert-dialog-container > div:last-child {\\n width: 100%;\\n margin-bottom: 10px;\\n background-color: white;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: center;\\n align-items: center; }\\n .igv-ui-alert-dialog-container > div:last-child div {\\n margin: unset;\\n width: 40px;\\n height: 30px;\\n line-height: 30px;\\n text-align: center;\\n color: white;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: small;\\n font-weight: 400;\\n border-color: #2B81AF;\\n border-style: solid;\\n border-width: thin;\\n border-radius: 4px;\\n background-color: #2B81AF; }\\n .igv-ui-alert-dialog-container > div:last-child div:hover {\\n cursor: pointer;\\n border-color: #25597f;\\n background-color: #25597f; }\\n\\n.igv-ui-color-swatch {\\n position: relative;\\n box-sizing: content-box;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: wrap;\\n justify-content: center;\\n align-items: center;\\n width: 32px;\\n height: 32px;\\n border-style: solid;\\n border-width: 2px;\\n border-color: white;\\n border-radius: 4px; }\\n\\n.igv-ui-color-swatch:hover {\\n border-color: dimgray; }\\n\\n.igv-ui-colorpicker-menu-close-button {\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-end;\\n align-items: center;\\n width: 100%;\\n height: 32px;\\n margin-top: 4px;\\n margin-bottom: 4px;\\n padding-right: 8px; }\\n .igv-ui-colorpicker-menu-close-button i.fa {\\n display: block;\\n margin-left: 4px;\\n margin-right: 4px;\\n color: #5f5f5f; }\\n .igv-ui-colorpicker-menu-close-button i.fa:hover,\\n .igv-ui-colorpicker-menu-close-button i.fa:focus,\\n .igv-ui-colorpicker-menu-close-button i.fa:active {\\n cursor: pointer;\\n color: #0f0f0f; }\\n\\n.igv-ui-generic-dialog-container {\\n box-sizing: content-box;\\n position: fixed;\\n top: 0;\\n left: 0;\\n width: 300px;\\n height: 200px;\\n border-color: #7F7F7F;\\n border-radius: 4px;\\n border-style: solid;\\n border-width: thin;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: medium;\\n font-weight: 400;\\n z-index: 2048;\\n background-color: white;\\n display: flex;\\n flex-flow: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: center; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-header {\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-end;\\n align-items: center;\\n width: 100%;\\n height: 24px;\\n cursor: move;\\n border-top-left-radius: 4px;\\n border-top-right-radius: 4px;\\n border-bottom-color: #7F7F7F;\\n border-bottom-style: solid;\\n border-bottom-width: thin;\\n background-color: #eee; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-header div {\\n margin-right: 4px;\\n margin-bottom: 2px;\\n height: 12px;\\n width: 12px;\\n color: #7F7F7F; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-header div:hover {\\n cursor: pointer;\\n color: #444; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-one-liner {\\n color: #373737;\\n width: 95%;\\n height: 24px;\\n line-height: 24px;\\n text-align: left;\\n margin-top: 8px;\\n padding-left: 8px;\\n overflow-wrap: break-word;\\n background-color: white; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-label-input {\\n margin-top: 8px;\\n width: 95%;\\n height: 24px;\\n color: #373737;\\n line-height: 24px;\\n padding-left: 8px;\\n background-color: white;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: center; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-label-input div {\\n width: 30%;\\n height: 100%;\\n font-size: 16px;\\n text-align: right;\\n padding-right: 8px;\\n background-color: white; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-label-input input {\\n display: block;\\n height: 100%;\\n width: 100%;\\n padding-left: 4px;\\n font-family: \"Open Sans\", sans-serif;\\n font-weight: 400;\\n color: #373737;\\n text-align: left;\\n outline: none;\\n border-style: solid;\\n border-width: thin;\\n border-color: #7F7F7F;\\n background-color: white; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-label-input input {\\n width: 50%;\\n font-size: 16px; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-input {\\n margin-top: 8px;\\n width: calc(100% - 16px);\\n height: 24px;\\n color: #373737;\\n line-height: 24px;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: space-around;\\n align-items: center; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-input input {\\n display: block;\\n height: 100%;\\n width: 100%;\\n padding-left: 4px;\\n font-family: \"Open Sans\", sans-serif;\\n font-weight: 400;\\n color: #373737;\\n text-align: left;\\n outline: none;\\n border-style: solid;\\n border-width: thin;\\n border-color: #7F7F7F;\\n background-color: white; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-input input {\\n font-size: 16px; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel {\\n width: 100%;\\n height: 28px;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: space-around;\\n align-items: center; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel div {\\n margin-top: 32px;\\n color: white;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: 14px;\\n font-weight: 400;\\n width: 75px;\\n height: 28px;\\n line-height: 28px;\\n text-align: center;\\n border-color: transparent;\\n border-style: solid;\\n border-width: thin;\\n border-radius: 2px; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel div:first-child {\\n margin-left: 32px;\\n margin-right: 0;\\n background-color: #5ea4e0; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel div:last-child {\\n margin-left: 0;\\n margin-right: 32px;\\n background-color: #c4c4c4; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel div:first-child:hover {\\n cursor: pointer;\\n background-color: #3b5c7f; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel div:last-child:hover {\\n cursor: pointer;\\n background-color: #7f7f7f; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok {\\n width: 100%;\\n height: 36px;\\n margin-top: 32px;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: space-around;\\n align-items: center; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok div {\\n width: 98px;\\n height: 36px;\\n line-height: 36px;\\n text-align: center;\\n color: white;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: medium;\\n font-weight: 400;\\n border-color: white;\\n border-style: solid;\\n border-width: thin;\\n border-radius: 4px;\\n background-color: #2B81AF; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok div:hover {\\n cursor: pointer;\\n background-color: #25597f; }\\n\\n.igv-ui-generic-container {\\n box-sizing: content-box;\\n position: absolute;\\n z-index: 2048;\\n background-color: white;\\n cursor: pointer;\\n display: flex;\\n flex-direction: row;\\n flex-wrap: wrap;\\n justify-content: flex-start;\\n align-items: center; }\\n .igv-ui-generic-container > div:first-child {\\n cursor: move;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-end;\\n align-items: center;\\n height: 24px;\\n width: 100%;\\n background-color: #dddddd; }\\n .igv-ui-generic-container > div:first-child > div {\\n display: block;\\n color: #5f5f5f;\\n cursor: pointer;\\n width: 14px;\\n height: 14px;\\n margin-right: 8px;\\n margin-bottom: 4px; }\\n\\n.igv-ui-dialog {\\n z-index: 2048;\\n position: fixed;\\n width: fit-content;\\n height: fit-content;\\n display: flex;\\n flex-flow: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n background-color: white;\\n border-color: #7F7F7F;\\n border-radius: 4px;\\n border-style: solid;\\n border-width: thin;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: medium;\\n font-weight: 400; }\\n .igv-ui-dialog .igv-ui-dialog-header {\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-end;\\n align-items: center;\\n width: 100%;\\n height: 24px;\\n cursor: move;\\n border-top-left-radius: 4px;\\n border-top-right-radius: 4px;\\n border-bottom-color: #7F7F7F;\\n border-bottom-style: solid;\\n border-bottom-width: thin;\\n background-color: #eee; }\\n .igv-ui-dialog .igv-ui-dialog-header div {\\n margin-right: 4px;\\n margin-bottom: 2px;\\n height: 12px;\\n width: 12px;\\n color: #7F7F7F; }\\n .igv-ui-dialog .igv-ui-dialog-header div:hover {\\n cursor: pointer;\\n color: #444; }\\n .igv-ui-dialog .igv-ui-dialog-one-liner {\\n width: 95%;\\n height: 24px;\\n line-height: 24px;\\n text-align: left;\\n margin: 8px;\\n overflow-wrap: break-word;\\n background-color: white;\\n font-weight: bold; }\\n .igv-ui-dialog .igv-ui-dialog-ok-cancel {\\n width: 100%;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: space-around;\\n align-items: center; }\\n .igv-ui-dialog .igv-ui-dialog-ok-cancel div {\\n margin: 16px;\\n margin-top: 32px;\\n color: white;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: 14px;\\n font-weight: 400;\\n width: 75px;\\n height: 28px;\\n line-height: 28px;\\n text-align: center;\\n border-color: transparent;\\n border-style: solid;\\n border-width: thin;\\n border-radius: 2px; }\\n .igv-ui-dialog .igv-ui-dialog-ok-cancel div:first-child {\\n background-color: #5ea4e0; }\\n .igv-ui-dialog .igv-ui-dialog-ok-cancel div:last-child {\\n background-color: #c4c4c4; }\\n .igv-ui-dialog .igv-ui-dialog-ok-cancel div:first-child:hover {\\n cursor: pointer;\\n background-color: #3b5c7f; }\\n .igv-ui-dialog .igv-ui-dialog-ok-cancel div:last-child:hover {\\n cursor: pointer;\\n background-color: #7f7f7f; }\\n .igv-ui-dialog .igv-ui-dialog-ok {\\n width: 100%;\\n height: 36px;\\n margin-top: 32px;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: space-around;\\n align-items: center; }\\n .igv-ui-dialog .igv-ui-dialog-ok div {\\n width: 98px;\\n height: 36px;\\n line-height: 36px;\\n text-align: center;\\n color: white;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: medium;\\n font-weight: 400;\\n border-color: white;\\n border-style: solid;\\n border-width: thin;\\n border-radius: 4px;\\n background-color: #2B81AF; }\\n .igv-ui-dialog .igv-ui-dialog-ok div:hover {\\n cursor: pointer;\\n background-color: #25597f; }\\n\\n.igv-ui-panel, .igv-ui-panel-column, .igv-ui-panel-row {\\n z-index: 2048;\\n background-color: white;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: medium;\\n font-weight: 400;\\n display: flex;\\n justify-content: flex-start;\\n align-items: flex-start; }\\n\\n.igv-ui-panel-column {\\n display: flex;\\n flex-direction: column; }\\n\\n.igv-ui-panel-row {\\n display: flex;\\n flex-direction: row; }\\n\\n.igv-ui-textbox {\\n background-color: white;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: medium;\\n font-weight: 400;\\n display: flex;\\n justify-content: flex-start;\\n align-items: flex-start; }\\n\\n/*# sourceMappingURL=igv-ui.css.map */\\n',document.head.insertBefore(t,document.head.childNodes[document.head.childNodes.length-1])}()}class xs{constructor(t,e){this.$container=pe(\"
\",{class:\"igv-generic-dialog-container\"}),t.append(this.$container),this.$container.offset({left:0,top:0});const n=pe(\"
\",{class:\"igv-generic-dialog-header\"});this.$container.append(n),_e(n[0],(()=>{this.$minimum_input.val(void 0),this.$maximum_input.val(void 0),this.$container.offset({left:0,top:0}),this.$container.hide()})),this.$minimum=pe(\"
\",{class:\"igv-generic-dialog-label-input\"}),this.$container.append(this.$minimum);const r=pe(\"
\");r.text(\"Minimum\"),this.$minimum.append(r),this.$minimum_input=pe(\"\"),this.$minimum.append(this.$minimum_input),this.$maximum=pe(\"
\",{class:\"igv-generic-dialog-label-input\"}),this.$container.append(this.$maximum);const i=pe(\"
\");i.text(\"Maximum\"),this.$maximum.append(i),this.$maximum_input=pe(\"\"),this.$maximum.append(this.$maximum_input);const o=pe(\"
\",{class:\"igv-generic-dialog-ok-cancel\"});this.$container.append(o),this.$ok=pe(\"
\"),o.append(this.$ok),this.$ok.text(\"OK\"),this.$cancel=pe(\"
\"),o.append(this.$cancel),this.$cancel.text(\"Cancel\"),this.$cancel.on(\"click\",(()=>{this.$minimum_input.val(void 0),this.$maximum_input.val(void 0),this.$container.offset({left:0,top:0}),this.$container.hide()})),wo(this.$container.get(0),n.get(0)),this.$container.hide()}configure(t){const e=t.dataRange();let n,r;e?(n=e.min,r=e.max):(n=0,r=100),this.$minimum_input.val(n),this.$maximum_input.val(r),this.$minimum_input.unbind(),this.$minimum_input.on(\"keyup\",(e=>{13===e.keyCode&&this.processResults(t)})),this.$maximum_input.unbind(),this.$maximum_input.on(\"keyup\",(e=>{13===e.keyCode&&this.processResults(t)})),this.$ok.unbind(),this.$ok.on(\"click\",(e=>{this.processResults(t)}))}processResults(t){const e=Number(this.$minimum_input.val()),n=Number(this.$maximum_input.val());isNaN(e)||isNaN(n)?fs.presentAlert(new Error(\"Must input numeric values\"),void 0):t.setDataRange(e,n),this.$minimum_input.val(void 0),this.$maximum_input.val(void 0),this.$container.offset({left:0,top:0}),this.$container.hide()}present(t){const e=t.offset().top,n=pe(\"body\").scrollTop();this.$container.offset({left:t.width()-this.$container.width(),top:e+n}),this.$container.show()}}const _s={configureHighDPICanvas:function(t,e,n){const r=window.devicePixelRatio;t.canvas.style.width=`${e}px`,t.canvas.width=Math.floor(r*e),t.canvas.style.height=`${n}px`,t.canvas.height=Math.floor(r*n),t.scale(r,r)},setProperties:function(t,e){for(var n in e)if(e.hasOwnProperty(n)){var r=e[n];t[n]=r}},strokeLine:function(t,e,n,r,i,o){e=Math.floor(e)+.5,n=Math.floor(n)+.5,r=Math.floor(r)+.5,i=Math.floor(i)+.5,o&&(t.save(),_s.setProperties(t,o)),t.beginPath(),t.moveTo(e,n),t.lineTo(r,i),t.stroke(),o&&t.restore()},fillRect:function(t,e,n,r,i,o){e=Math.round(e),n=Math.round(n),o&&(t.save(),_s.setProperties(t,o)),t.fillRect(e,n,r,i),o&&t.restore()},fillPolygon:function(t,e,n,r){r&&(t.save(),_s.setProperties(t,r)),ks(t,e,n),t.fill(),r&&t.restore()},strokePolygon:function(t,e,n,r){r&&(t.save(),_s.setProperties(t,r)),ks(t,e,n),t.stroke(),r&&t.restore()},fillText:function(t,e,n,r,i,o){if((i||o)&&t.save(),i&&_s.setProperties(t,i),o){for(var s in t.translate(n,r),o){var a=o[s];\"translate\"===s&&t.translate(a.x,a.y),\"rotate\"===s&&t.rotate(a.angle*Math.PI/180)}t.fillText(e,0,0)}else t.fillText(e,n,r);(i||o)&&t.restore()},strokeText:function(t,e,n,r,i,o){if((i||o)&&t.save(),i&&_s.setProperties(t,i),o){for(var s in t.translate(n,r),o){var a=o[s];\"translate\"===s&&t.translate(a.x,a.y),\"rotate\"===s&&t.rotate(a.angle*Math.PI/180)}t.strokeText(e,0,0)}else t.strokeText(e,n,r);(i||o)&&t.restore()},strokeCircle:function(t,e,n,r,i){i&&(t.save(),_s.setProperties(t,i)),t.beginPath(),t.arc(e,n,r,0,2*Math.PI),t.stroke(),i&&t.restore()},fillCircle:function(t,e,n,r,i){i&&(t.save(),_s.setProperties(t,i)),t.beginPath(),t.arc(e,n,r,0,2*Math.PI),t.fill(),i&&t.restore()},drawArrowhead:function(t,e,n,r,i){t.save(),r||(r=5),i&&(t.lineWidth=i),t.beginPath(),t.moveTo(e,n-r/2),t.lineTo(e,n+r/2),t.lineTo(e+r,n),t.lineTo(e,n-r/2),t.closePath(),t.fill(),t.restore()},dashedLine:function(t,e,n,r,i,o){let s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{};void 0===o&&(o=2),t.setLineDash([o,o]),_s.strokeLine(t,e,n,r,i,s),t.setLineDash([])},roundRect:function(t,e,n,r,i,o,s,a){void 0===a&&(a=!0),void 0===o&&(o=5),t.beginPath(),t.moveTo(e+o,n),t.lineTo(e+r-o,n),t.quadraticCurveTo(e+r,n,e+r,n+o),t.lineTo(e+r,n+i-o),t.quadraticCurveTo(e+r,n+i,e+r-o,n+i),t.lineTo(e+o,n+i),t.quadraticCurveTo(e,n+i,e,n+i-o),t.lineTo(e,n+o),t.quadraticCurveTo(e,n,e+o,n),t.closePath(),a&&t.stroke(),s&&t.fill()},polygon:function(t,e,n,r,i){void 0===i&&(i=!0),t.beginPath();var o=e.length;t.moveTo(e[0],n[0]);for(var s=1;s0&&Es[0]<4?1:+(Es[0]+Es[1])),!As&&ia&&(!(Es=ia.match(/Edge\\/(\\d+)/))||Es[1]>=74)&&(Es=ia.match(/Chrome\\/(\\d+)/))&&(As=+Es[1]);var la=As,ha=!!Object.getOwnPropertySymbols&&!Ms((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&la&&la<41})),ua=ha&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator,fa=Ls.Object,da=ua?function(t){return\"symbol\"==typeof t}:function(t){var e=na(\"Symbol\");return Js(e)&&ra(e.prototype,fa(t))},pa=Ls.String,ga=function(t){try{return pa(t)}catch(t){return\"Object\"}},ma=Ls.TypeError,va=function(t){if(Js(t))return t;throw ma(ga(t)+\" is not a function\")},ba=Ls.TypeError,wa=Object.defineProperty,ya=function(t,e){try{wa(Ls,t,{value:e,configurable:!0,writable:!0})}catch(n){Ls[t]=e}return e},xa=\"__core-js_shared__\",_a=Ls[xa]||ya(xa,{}),ka=Cs((function(t){(t.exports=function(t,e){return _a[t]||(_a[t]=void 0!==e?e:{})})(\"versions\",[]).push({version:\"3.22.4\",mode:\"global\",copyright:\"© 2014-2022 Denis Pushkarev (zloirock.ru)\",license:\"https://github.com/zloirock/core-js/blob/v3.22.4/LICENSE\",source:\"https://github.com/zloirock/core-js\"})})),Sa=Ls.Object,Ca=function(t){return Sa(Ks(t))},Ea=Us({}.hasOwnProperty),Aa=Object.hasOwn||function(t,e){return Ea(Ca(t),e)},Ta=0,La=Math.random(),Ma=Us(1..toString),Ra=function(t){return\"Symbol(\"+(void 0===t?\"\":t)+\")_\"+Ma(++Ta+La,36)},Ia=ka(\"wks\"),Na=Ls.Symbol,Pa=Na&&Na.for,Oa=ua?Na:Na&&Na.withoutSetter||Ra,Fa=function(t){if(!Aa(Ia,t)||!ha&&\"string\"!=typeof Ia[t]){var e=\"Symbol.\"+t;ha&&Aa(Na,t)?Ia[t]=Na[t]:Ia[t]=ua&&Pa?Pa(e):Oa(e)}return Ia[t]},Da=Ls.TypeError,Ba=Fa(\"toPrimitive\"),za=function(t,e){if(!ta(t)||da(t))return t;var n,r,i=null==(n=t[Ba])?void 0:va(n);if(i){if(void 0===e&&(e=\"default\"),r=Ps(i,t,e),!ta(r)||da(r))return r;throw Da(\"Can't convert object to primitive value\")}return void 0===e&&(e=\"number\"),function(t,e){var n,r;if(\"string\"===e&&Js(n=t.toString)&&!ta(r=Ps(n,t)))return r;if(Js(n=t.valueOf)&&!ta(r=Ps(n,t)))return r;if(\"string\"!==e&&Js(n=t.toString)&&!ta(r=Ps(n,t)))return r;throw ba(\"Can't convert object to primitive value\")}(t,e)},Ha=function(t){var e=za(t,\"string\");return da(e)?e:e+\"\"},Va=Ls.document,ja=ta(Va)&&ta(Va.createElement),Ua=function(t){return ja?Va.createElement(t):{}},qa=!Rs&&!Ms((function(){return 7!=Object.defineProperty(Ua(\"div\"),\"a\",{get:function(){return 7}}).a})),Wa=Object.getOwnPropertyDescriptor,$a={f:Rs?Wa:function(t,e){if(t=Qs(t),e=Ha(e),qa)try{return Wa(t,e)}catch(t){}if(Aa(t,e))return Bs(!Ps(Ds.f,t,e),t[e])}},Ga=Rs&&Ms((function(){return 42!=Object.defineProperty((function(){}),\"prototype\",{value:42,writable:!1}).prototype})),Za=Ls.String,Xa=Ls.TypeError,Ya=function(t){if(ta(t))return t;throw Xa(Za(t)+\" is not an object\")},Ka=Ls.TypeError,Qa=Object.defineProperty,Ja=Object.getOwnPropertyDescriptor,tc=\"enumerable\",ec=\"configurable\",nc=\"writable\",rc={f:Rs?Ga?function(t,e,n){if(Ya(t),e=Ha(e),Ya(n),\"function\"==typeof t&&\"prototype\"===e&&\"value\"in n&&nc in n&&!n.writable){var r=Ja(t,e);r&&r.writable&&(t[e]=n.value,n={configurable:ec in n?n.configurable:r.configurable,enumerable:tc in n?n.enumerable:r.enumerable,writable:!1})}return Qa(t,e,n)}:Qa:function(t,e,n){if(Ya(t),e=Ha(e),Ya(n),qa)try{return Qa(t,e,n)}catch(t){}if(\"get\"in n||\"set\"in n)throw Ka(\"Accessors not supported\");return\"value\"in n&&(t[e]=n.value),t}},ic=Rs?function(t,e,n){return rc.f(t,e,Bs(1,n))}:function(t,e,n){return t[e]=n,t},oc=Function.prototype,sc=Rs&&Object.getOwnPropertyDescriptor,ac=Aa(oc,\"name\"),cc={EXISTS:ac,PROPER:ac&&\"something\"===function(){}.name,CONFIGURABLE:ac&&(!Rs||Rs&&sc(oc,\"name\").configurable)},lc=Us(Function.toString);Js(_a.inspectSource)||(_a.inspectSource=function(t){return lc(t)});var hc,uc,fc,dc=_a.inspectSource,pc=Ls.WeakMap,gc=Js(pc)&&/native code/.test(dc(pc)),mc=ka(\"keys\"),vc=function(t){return mc[t]||(mc[t]=Ra(t))},bc={},wc=\"Object already initialized\",yc=Ls.TypeError,xc=Ls.WeakMap;if(gc||_a.state){var _c=_a.state||(_a.state=new xc),kc=Us(_c.get),Sc=Us(_c.has),Cc=Us(_c.set);hc=function(t,e){if(Sc(_c,t))throw new yc(wc);return e.facade=t,Cc(_c,t,e),e},uc=function(t){return kc(_c,t)||{}},fc=function(t){return Sc(_c,t)}}else{var Ec=vc(\"state\");bc[Ec]=!0,hc=function(t,e){if(Aa(t,Ec))throw new yc(wc);return e.facade=t,ic(t,Ec,e),e},uc=function(t){return Aa(t,Ec)?t[Ec]:{}},fc=function(t){return Aa(t,Ec)}}var Ac,Tc={set:hc,get:uc,has:fc,enforce:function(t){return fc(t)?uc(t):hc(t,{})},getterFor:function(t){return function(e){var n;if(!ta(e)||(n=uc(e)).type!==t)throw yc(\"Incompatible receiver, \"+t+\" required\");return n}}},Lc=Cs((function(t){var e=rc.f,n=cc.CONFIGURABLE,r=Tc.enforce,i=Tc.get,o=!Ms((function(){return 8!==e((function(){}),\"length\",{value:8}).length})),s=String(String).split(\"String\"),a=t.exports=function(t,i,a){\"Symbol(\"===String(i).slice(0,7)&&(i=\"[\"+String(i).replace(/^Symbol\\(([^)]*)\\)/,\"$1\")+\"]\"),a&&a.getter&&(i=\"get \"+i),a&&a.setter&&(i=\"set \"+i),(!Aa(t,\"name\")||n&&t.name!==i)&&e(t,\"name\",{value:i,configurable:!0}),o&&a&&Aa(a,\"arity\")&&t.length!==a.arity&&e(t,\"length\",{value:a.arity});var c=r(t);return Aa(c,\"source\")||(c.source=s.join(\"string\"==typeof i?i:\"\")),t};Function.prototype.toString=a((function(){return Js(this)&&i(this).source||dc(this)}),\"toString\")})),Mc=function(t,e,n,r){var i=!!r&&!!r.unsafe,o=!!r&&!!r.enumerable,s=!!r&&!!r.noTargetGet,a=r&&void 0!==r.name?r.name:e;return Js(n)&&Lc(n,a,r),t===Ls?(o?t[e]=n:ya(e,n),t):(i?!s&&t[e]&&(o=!0):delete t[e],o?t[e]=n:ic(t,e,n),t)},Rc=Math.ceil,Ic=Math.floor,Nc=function(t){var e=+t;return e!=e||0===e?0:(e>0?Ic:Rc)(e)},Pc=Math.max,Oc=Math.min,Fc=Math.min,Dc=function(t){return(e=t.length)>0?Fc(Nc(e),9007199254740991):0;var e},Bc=function(t){return function(e,n,r){var i,o=Qs(e),s=Dc(o),a=function(t,e){var n=Nc(t);return n<0?Pc(n+e,0):Oc(n,e)}(r,s);if(t&&n!=n){for(;s>a;)if((i=o[a++])!=i)return!0}else for(;s>a;a++)if((t||a in o)&&o[a]===n)return t||a||0;return!t&&-1}},zc={includes:Bc(!0),indexOf:Bc(!1)},Hc=zc.indexOf,Vc=Us([].push),jc=function(t,e){var n,r=Qs(t),i=0,o=[];for(n in r)!Aa(bc,n)&&Aa(r,n)&&Vc(o,n);for(;e.length>i;)Aa(r,n=e[i++])&&(~Hc(o,n)||Vc(o,n));return o},Uc=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"],qc=Uc.concat(\"length\",\"prototype\"),Wc={f:Object.getOwnPropertyNames||function(t){return jc(t,qc)}},$c={f:Object.getOwnPropertySymbols},Gc=Us([].concat),Zc=na(\"Reflect\",\"ownKeys\")||function(t){var e=Wc.f(Ya(t)),n=$c.f;return n?Gc(e,n(t)):e},Xc=function(t,e,n){for(var r=Zc(e),i=rc.f,o=$a.f,s=0;ss;)rc.f(t,n=i[s++],r[n]);return t},al={f:sl},cl=na(\"document\",\"documentElement\"),ll=vc(\"IE_PROTO\"),hl=function(){},ul=function(t){return\"\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display_quiz(\"Tutorial2/LessonImages/InsertSizeQuiz.json\")\n" + ] + }, + { + "cell_type": "markdown", + "id": "a8a9b451-c231-4dc4-9a3b-e8da8b92fcec", + "metadata": {}, + "source": [ + "With paired-end ATAC-seq data we can separate by fragment size to obtain Transposase HyperSensitive Sites (THSS) and Nucleosomal Fragments. Alternatively, some choose to keep the data together as a more general measure of \"accessible\" sites.\n", + "\n", + "We'll show you how to separate the small and large fragments into different bam files." + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "69afce06-71ba-40e4-b977-62d69156b4df", + "metadata": {}, + "outputs": [], + "source": [ + "#Filter by insert size:\n", + "!samtools view -h Tutorial2/InputFiles/CTL_dedup.bam | awk 'substr($0,1,1)==\"@\" || ($9>= 150 && $9<=250) || ($9<=-150 && $9>=-250)' | samtools view -b > Tutorial2/InputFiles/CTL_Nucleosomal.bam\n", + "!samtools view -h Tutorial2/InputFiles/CTL_dedup.bam | awk 'substr($0,1,1)==\"@\" || ($9>= 10 && $9<=125) || ($9<=-10 && $9>=-125)' | samtools view -b > Tutorial2/InputFiles/CTL_THSS.bam\n", + "#Do the same for the mutant:\n", + "!samtools view -h Tutorial2/InputFiles/Mutant_dedup.bam | awk 'substr($0,1,1)==\"@\" || ($9>= 150 && $9<=250) || ($9<=-150 && $9>=-250)' | samtools view -b > Tutorial2/InputFiles/Mutant_Nucleosomal.bam\n", + "!samtools view -h Tutorial2/InputFiles/Mutant_dedup.bam | awk 'substr($0,1,1)==\"@\" || ($9>= 10 && $9<=125) || ($9<=-10 && $9>=-125)' | samtools view -b > Tutorial2/InputFiles/Mutant_THSS.bam" + ] + }, + { + "cell_type": "markdown", + "id": "f598298f-efeb-4df0-a41c-d6ec96fbaf32", + "metadata": {}, + "source": [ + "For the rest of this tutorial, we'll use the bam files that contain all the reads as many use this as a general measurement of \"accessibility\". However, you can use these split bam files to create bigwigs, view them in a genome browser, and create average profiles around features as demonstrated earlier. You can also use them in our downstream analysis in lieu of the combined file that we will show in our examples. " + ] + }, + { + "cell_type": "markdown", + "id": "e6002033-c000-4b2b-9e23-de065180f2f6", + "metadata": {}, + "source": [ + "
\n", + "STEP3: Peak Detection\n", + "
\n", + "\"Drawing\"\n", + "\n", + "Accessible sites are loci with a pileup of reads in \"Peaks\". \n", + "\n", + "### Opitional Note:\n", + "Tn5 insertion of adapters leaves a 9 bp gap. In the end, this probably won't impact the results much. However, to be safe we can shift the reads to account for this insertion offset.\n", + "\n", + "\"Drawing\"\n", + "\n", + "Image adjusted from: [Grandi et al., Nature Protocols 2022](https://www.nature.com/articles/s41596-022-00692-9)\n", + "\n", + "The alignmentSieve command from [deeptools](https://anaconda.org/bioconda/deeptools) allows us to shift the reads accordingly.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "d5fde7ad-bc2d-4183-889f-391a66467ff0", + "metadata": {}, + "outputs": [], + "source": [ + "!alignmentSieve -p $numthreadsint --ATACshift -b Tutorial2/InputFiles/CTL_dedup.bam -o Tutorial2/InputFiles/CTL_shift.bam\n", + "!alignmentSieve -p $numthreadsint --ATACshift -b Tutorial2/InputFiles/Mutant_dedup.bam -o Tutorial2/InputFiles/Mutant_shift.bam" + ] + }, + { + "cell_type": "markdown", + "id": "421549cb-3cf6-4a86-9b2f-34fdf109ff2d", + "metadata": {}, + "source": [ + "Let's identify Peaks genome-wide using [macs2](https://pypi.org/project/MACS2/)." + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "2bc4e422-7813-4b9f-b984-04948f40b26d", + "metadata": {}, + "outputs": [], + "source": [ + "#If your data is single-end (not paired-end), use -f BAM instead.\n", + "!macs2 callpeak -f BAMPE -g hs --keep-dup all --cutoff-analysis -n CTL -t Tutorial2/InputFiles/CTL_shift.bam --outdir Tutorial2/Peaks/ 2> Tutorial2/Peaks/macs2_CTL.log\n", + "!macs2 callpeak -f BAMPE -g hs --keep-dup all --cutoff-analysis -n Mutant -t Tutorial2/InputFiles/Mutant_shift.bam --outdir Tutorial2/Peaks/ 2> Tutorial2/Peaks/macs2_Mutant.log" + ] + }, + { + "cell_type": "markdown", + "id": "2b1c921c-fe40-4fd9-8370-1711a317b632", + "metadata": {}, + "source": [ + "macs2 provides a .narrowPeak file specififying the coordinates of the peaks, an .xls file with additional information, and a .bed file with the summits of the peaks.\n", + "\n", + "Let's view the first 10 lines of the .narrowPeak file." + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "43fcb3c4-3341-4255-8db9-ea822dfb62aa", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "chr4\t4098436\t4098780\tCTL_peak_1\t23\t.\t2.90799\t5.28767\t2.33528\t172\n", + "chr4\t26975641\t26975876\tCTL_peak_2\t23\t.\t2.90799\t5.28767\t2.33528\t117\n", + "chr4\t49751053\t49751289\tCTL_peak_3\t23\t.\t2.90799\t5.28767\t2.33528\t118\n", + "chr4\t49771937\t49772236\tCTL_peak_4\t157\t.\t11.172\t19.3961\t15.7605\t148\n", + "chr4\t49803060\t49803221\tCTL_peak_5\t20\t.\t2.88586\t4.99951\t2.07827\t80\n", + "chr4\t49842974\t49843212\tCTL_peak_6\t23\t.\t2.90799\t5.28767\t2.33528\t119\n", + "chr4\t49927479\t49927778\tCTL_peak_7\t36\t.\t3.81875\t6.69129\t3.6285\t200\n", + "chr4\t50048359\t50048660\tCTL_peak_8\t44\t.\t4.63347\t7.61679\t4.49353\t209\n", + "chr4\t50589614\t50589840\tCTL_peak_9\t23\t.\t2.90799\t5.28767\t2.33528\t113\n", + "chr4\t50622209\t50622416\tCTL_peak_10\t18\t.\t2.86406\t4.76454\t1.86719\t103\n" + ] + } + ], + "source": [ + "!head Tutorial2/Peaks/CTL_peaks.narrowPeak" + ] + }, + { + "cell_type": "markdown", + "id": "d05e89eb-5ea0-44c8-8575-876a91a6a3fd", + "metadata": {}, + "source": [ + "We can also visually inspect the peaks compared to the signal in igv:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "1d443da3-afeb-4fa3-ae64-1e2c64b6dbc1", + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "!function (global, factory) {window.igv = factory()}(this,(function(){\"use strict\";\n", + "/*!\n", + " * jQuery JavaScript Library v3.3.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector\n", + " * https://jquery.com/\n", + " *\n", + " * Includes Sizzle.js\n", + " * https://sizzlejs.com/\n", + " *\n", + " * Copyright JS Foundation and other contributors\n", + " * Released under the MIT license\n", + " * https://jquery.org/license\n", + " *\n", + " * Date: 2018-01-20T17:24Z\n", + " */var t=[],e=window.document,n=Object.getPrototypeOf,r=t.slice,i=t.concat,o=t.push,s=t.indexOf,a={},c=a.toString,l=a.hasOwnProperty,h=l.toString,u=h.call(Object),f={},d=function(t){return\"function\"==typeof t&&\"number\"!=typeof t.nodeType},p=function(t){return null!=t&&t===t.window},g={type:!0,src:!0,noModule:!0};function m(t,n,r){var i,o=(n=n||e).createElement(\"script\");if(o.text=t,r)for(i in g)r[i]&&(o[i]=r[i]);n.head.appendChild(o).parentNode.removeChild(o)}function v(t){return null==t?t+\"\":\"object\"==typeof t||\"function\"==typeof t?a[c.call(t)]||\"object\":typeof t}var b=\"3.3.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector\",w=function(t,e){return new w.fn.init(t,e)},y=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;function x(t){var e=!!t&&\"length\"in t&&t.length,n=v(t);return!d(t)&&!p(t)&&(\"array\"===n||0===e||\"number\"==typeof e&&e>0&&e-1 in t)}w.fn=w.prototype={jquery:b,constructor:w,length:0,toArray:function(){return r.call(this)},get:function(t){return null==t?r.call(this):t<0?this[t+this.length]:this[t]},pushStack:function(t){var e=w.merge(this.constructor(),t);return e.prevObject=this,e},each:function(t){return w.each(this,t)},map:function(t){return this.pushStack(w.map(this,(function(e,n){return t.call(e,n,e)})))},slice:function(){return this.pushStack(r.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(t){var e=this.length,n=+t+(t<0?e:0);return this.pushStack(n>=0&&n+~]|[\\\\x20\\\\t\\\\r\\\\n\\\\f])[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\"),q=new RegExp(\"=[\\\\x20\\\\t\\\\r\\\\n\\\\f]*([^\\\\]'\\\"]*?)[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\\\\]\",\"g\"),W=new RegExp(z),$=new RegExp(\"^\"+D+\"$\"),G={ID:new RegExp(\"^#(\"+D+\")\"),CLASS:new RegExp(\"^\\\\.(\"+D+\")\"),TAG:new RegExp(\"^(\"+D+\"|[*])\"),ATTR:new RegExp(\"^\"+B),PSEUDO:new RegExp(\"^\"+z),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\([\\\\x20\\\\t\\\\r\\\\n\\\\f]*(even|odd|(([+-]|)(\\\\d*)n|)[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(?:([+-]|)[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(\\\\d+)|))[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+O+\")$\",\"i\"),needsContext:new RegExp(\"^[\\\\x20\\\\t\\\\r\\\\n\\\\f]*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\([\\\\x20\\\\t\\\\r\\\\n\\\\f]*((?:-\\\\d)?\\\\d*)[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\\\\)|)(?=[^-]|$)\",\"i\")},Z=/^(?:input|select|textarea|button)$/i,X=/^h\\d$/i,Y=/^[^{]+\\{\\s*\\[native \\w/,K=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,Q=/[+~]/,J=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}[\\\\x20\\\\t\\\\r\\\\n\\\\f]?|([\\\\x20\\\\t\\\\r\\\\n\\\\f])|.)\",\"ig\"),tt=function(t,e,n){var r=\"0x\"+e-65536;return r!=r||n?e:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},et=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,nt=function(t,e){return e?\"\\0\"===t?\"�\":t.slice(0,-1)+\"\\\\\"+t.charCodeAt(t.length-1).toString(16)+\" \":\"\\\\\"+t},rt=function(){f()},it=vt((function(t){return!0===t.disabled&&(\"form\"in t||\"label\"in t)}),{dir:\"parentNode\",next:\"legend\"});try{I.apply(L=N.call(x.childNodes),x.childNodes),L[x.childNodes.length].nodeType}catch(t){I={apply:L.length?function(t,e){R.apply(t,N.call(e))}:function(t,e){for(var n=t.length,r=0;t[n++]=e[r++];);t.length=n-1}}}function ot(t,e,r,i){var o,a,l,h,u,p,v,b=e&&e.ownerDocument,_=e?e.nodeType:9;if(r=r||[],\"string\"!=typeof t||!t||1!==_&&9!==_&&11!==_)return r;if(!i&&((e?e.ownerDocument||e:x)!==d&&f(e),e=e||d,g)){if(11!==_&&(u=K.exec(t)))if(o=u[1]){if(9===_){if(!(l=e.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(b&&(l=b.getElementById(o))&&w(e,l)&&l.id===o)return r.push(l),r}else{if(u[2])return I.apply(r,e.getElementsByTagName(t)),r;if((o=u[3])&&n.getElementsByClassName&&e.getElementsByClassName)return I.apply(r,e.getElementsByClassName(o)),r}if(n.qsa&&!E[t+\" \"]&&(!m||!m.test(t))){if(1!==_)b=e,v=t;else if(\"object\"!==e.nodeName.toLowerCase()){for((h=e.getAttribute(\"id\"))?h=h.replace(et,nt):e.setAttribute(\"id\",h=y),a=(p=s(t)).length;a--;)p[a]=\"#\"+h+\" \"+mt(p[a]);v=p.join(\",\"),b=Q.test(t)&&pt(e.parentNode)||e}if(v)try{return I.apply(r,b.querySelectorAll(v)),r}catch(t){}finally{h===y&&e.removeAttribute(\"id\")}}}return c(t.replace(V,\"$1\"),e,r,i)}function st(){var t=[];return function e(n,i){return t.push(n+\" \")>r.cacheLength&&delete e[t.shift()],e[n+\" \"]=i}}function at(t){return t[y]=!0,t}function ct(t){var e=d.createElement(\"fieldset\");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function lt(t,e){var n=e&&t,r=n&&1===t.nodeType&&1===e.nodeType&&t.sourceIndex-e.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===e)return-1;return t?1:-1}function ht(t){return function(e){return\"input\"===e.nodeName.toLowerCase()&&e.type===t}}function ut(t){return function(e){var n=e.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&e.type===t}}function ft(t){return function(e){return\"form\"in e?e.parentNode&&!1===e.disabled?\"label\"in e?\"label\"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&it(e)===t:e.disabled===t:\"label\"in e&&e.disabled===t}}function dt(t){return at((function(e){return e=+e,at((function(n,r){for(var i,o=t([],n.length,e),s=o.length;s--;)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))}))}))}function pt(t){return t&&void 0!==t.getElementsByTagName&&t}for(e in n=ot.support={},o=ot.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&\"HTML\"!==e.nodeName},f=ot.setDocument=function(t){var e,i,s=t?t.ownerDocument||t:x;return s!==d&&9===s.nodeType&&s.documentElement?(p=(d=s).documentElement,g=!o(d),x!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener(\"unload\",rt,!1):i.attachEvent&&i.attachEvent(\"onunload\",rt)),n.attributes=ct((function(t){return t.className=\"i\",!t.getAttribute(\"className\")})),n.getElementsByTagName=ct((function(t){return t.appendChild(d.createComment(\"\")),!t.getElementsByTagName(\"*\").length})),n.getElementsByClassName=Y.test(d.getElementsByClassName),n.getById=ct((function(t){return p.appendChild(t).id=y,!d.getElementsByName||!d.getElementsByName(y).length})),n.getById?(r.filter.ID=function(t){var e=t.replace(J,tt);return function(t){return t.getAttribute(\"id\")===e}},r.find.ID=function(t,e){if(void 0!==e.getElementById&&g){var n=e.getElementById(t);return n?[n]:[]}}):(r.filter.ID=function(t){var e=t.replace(J,tt);return function(t){var n=void 0!==t.getAttributeNode&&t.getAttributeNode(\"id\");return n&&n.value===e}},r.find.ID=function(t,e){if(void 0!==e.getElementById&&g){var n,r,i,o=e.getElementById(t);if(o){if((n=o.getAttributeNode(\"id\"))&&n.value===t)return[o];for(i=e.getElementsByName(t),r=0;o=i[r++];)if((n=o.getAttributeNode(\"id\"))&&n.value===t)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(t,e){return void 0!==e.getElementsByTagName?e.getElementsByTagName(t):n.qsa?e.querySelectorAll(t):void 0}:function(t,e){var n,r=[],i=0,o=e.getElementsByTagName(t);if(\"*\"===t){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(t,e){if(void 0!==e.getElementsByClassName&&g)return e.getElementsByClassName(t)},v=[],m=[],(n.qsa=Y.test(d.querySelectorAll))&&(ct((function(t){p.appendChild(t).innerHTML=\"\",t.querySelectorAll(\"[msallowcapture^='']\").length&&m.push(\"[*^$]=[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(?:''|\\\"\\\")\"),t.querySelectorAll(\"[selected]\").length||m.push(\"\\\\[[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(?:value|\"+O+\")\"),t.querySelectorAll(\"[id~=\"+y+\"-]\").length||m.push(\"~=\"),t.querySelectorAll(\":checked\").length||m.push(\":checked\"),t.querySelectorAll(\"a#\"+y+\"+*\").length||m.push(\".#.+[+~]\")})),ct((function(t){t.innerHTML=\"\";var e=d.createElement(\"input\");e.setAttribute(\"type\",\"hidden\"),t.appendChild(e).setAttribute(\"name\",\"D\"),t.querySelectorAll(\"[name=d]\").length&&m.push(\"name[\\\\x20\\\\t\\\\r\\\\n\\\\f]*[*^$|!~]?=\"),2!==t.querySelectorAll(\":enabled\").length&&m.push(\":enabled\",\":disabled\"),p.appendChild(t).disabled=!0,2!==t.querySelectorAll(\":disabled\").length&&m.push(\":enabled\",\":disabled\"),t.querySelectorAll(\"*,:x\"),m.push(\",.*:\")}))),(n.matchesSelector=Y.test(b=p.matches||p.webkitMatchesSelector||p.mozMatchesSelector||p.oMatchesSelector||p.msMatchesSelector))&&ct((function(t){n.disconnectedMatch=b.call(t,\"*\"),b.call(t,\"[s!='']:x\"),v.push(\"!=\",z)})),m=m.length&&new RegExp(m.join(\"|\")),v=v.length&&new RegExp(v.join(\"|\")),e=Y.test(p.compareDocumentPosition),w=e||Y.test(p.contains)?function(t,e){var n=9===t.nodeType?t.documentElement:t,r=e&&e.parentNode;return t===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):t.compareDocumentPosition&&16&t.compareDocumentPosition(r)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},A=e?function(t,e){if(t===e)return u=!0,0;var r=!t.compareDocumentPosition-!e.compareDocumentPosition;return r||(1&(r=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1)||!n.sortDetached&&e.compareDocumentPosition(t)===r?t===d||t.ownerDocument===x&&w(x,t)?-1:e===d||e.ownerDocument===x&&w(x,e)?1:h?P(h,t)-P(h,e):0:4&r?-1:1)}:function(t,e){if(t===e)return u=!0,0;var n,r=0,i=t.parentNode,o=e.parentNode,s=[t],a=[e];if(!i||!o)return t===d?-1:e===d?1:i?-1:o?1:h?P(h,t)-P(h,e):0;if(i===o)return lt(t,e);for(n=t;n=n.parentNode;)s.unshift(n);for(n=e;n=n.parentNode;)a.unshift(n);for(;s[r]===a[r];)r++;return r?lt(s[r],a[r]):s[r]===x?-1:a[r]===x?1:0},d):d},ot.matches=function(t,e){return ot(t,null,null,e)},ot.matchesSelector=function(t,e){if((t.ownerDocument||t)!==d&&f(t),e=e.replace(q,\"='$1']\"),n.matchesSelector&&g&&!E[e+\" \"]&&(!v||!v.test(e))&&(!m||!m.test(e)))try{var r=b.call(t,e);if(r||n.disconnectedMatch||t.document&&11!==t.document.nodeType)return r}catch(t){}return ot(e,d,null,[t]).length>0},ot.contains=function(t,e){return(t.ownerDocument||t)!==d&&f(t),w(t,e)},ot.attr=function(t,e){(t.ownerDocument||t)!==d&&f(t);var i=r.attrHandle[e.toLowerCase()],o=i&&T.call(r.attrHandle,e.toLowerCase())?i(t,e,!g):void 0;return void 0!==o?o:n.attributes||!g?t.getAttribute(e):(o=t.getAttributeNode(e))&&o.specified?o.value:null},ot.escape=function(t){return(t+\"\").replace(et,nt)},ot.error=function(t){throw new Error(\"Syntax error, unrecognized expression: \"+t)},ot.uniqueSort=function(t){var e,r=[],i=0,o=0;if(u=!n.detectDuplicates,h=!n.sortStable&&t.slice(0),t.sort(A),u){for(;e=t[o++];)e===t[o]&&(i=r.push(o));for(;i--;)t.splice(r[i],1)}return h=null,t},i=ot.getText=function(t){var e,n=\"\",r=0,o=t.nodeType;if(o){if(1===o||9===o||11===o){if(\"string\"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)n+=i(t)}else if(3===o||4===o)return t.nodeValue}else for(;e=t[r++];)n+=i(e);return n},r=ot.selectors={cacheLength:50,createPseudo:at,match:G,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(J,tt),t[3]=(t[3]||t[4]||t[5]||\"\").replace(J,tt),\"~=\"===t[2]&&(t[3]=\" \"+t[3]+\" \"),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),\"nth\"===t[1].slice(0,3)?(t[3]||ot.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*(\"even\"===t[3]||\"odd\"===t[3])),t[5]=+(t[7]+t[8]||\"odd\"===t[3])):t[3]&&ot.error(t[0]),t},PSEUDO:function(t){var e,n=!t[6]&&t[2];return G.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||\"\":n&&W.test(n)&&(e=s(n,!0))&&(e=n.indexOf(\")\",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(J,tt).toLowerCase();return\"*\"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=S[t+\" \"];return e||(e=new RegExp(\"(^|[\\\\x20\\\\t\\\\r\\\\n\\\\f])\"+t+\"(\"+F+\"|$)\"))&&S(t,(function(t){return e.test(\"string\"==typeof t.className&&t.className||void 0!==t.getAttribute&&t.getAttribute(\"class\")||\"\")}))},ATTR:function(t,e,n){return function(r){var i=ot.attr(r,t);return null==i?\"!=\"===e:!e||(i+=\"\",\"=\"===e?i===n:\"!=\"===e?i!==n:\"^=\"===e?n&&0===i.indexOf(n):\"*=\"===e?n&&i.indexOf(n)>-1:\"$=\"===e?n&&i.slice(-n.length)===n:\"~=\"===e?(\" \"+i.replace(H,\" \")+\" \").indexOf(n)>-1:\"|=\"===e&&(i===n||i.slice(0,n.length+1)===n+\"-\"))}},CHILD:function(t,e,n,r,i){var o=\"nth\"!==t.slice(0,3),s=\"last\"!==t.slice(-4),a=\"of-type\"===e;return 1===r&&0===i?function(t){return!!t.parentNode}:function(e,n,c){var l,h,u,f,d,p,g=o!==s?\"nextSibling\":\"previousSibling\",m=e.parentNode,v=a&&e.nodeName.toLowerCase(),b=!c&&!a,w=!1;if(m){if(o){for(;g;){for(f=e;f=f[g];)if(a?f.nodeName.toLowerCase()===v:1===f.nodeType)return!1;p=g=\"only\"===t&&!p&&\"nextSibling\"}return!0}if(p=[s?m.firstChild:m.lastChild],s&&b){for(w=(d=(l=(h=(u=(f=m)[y]||(f[y]={}))[f.uniqueID]||(u[f.uniqueID]={}))[t]||[])[0]===_&&l[1])&&l[2],f=d&&m.childNodes[d];f=++d&&f&&f[g]||(w=d=0)||p.pop();)if(1===f.nodeType&&++w&&f===e){h[t]=[_,d,w];break}}else if(b&&(w=d=(l=(h=(u=(f=e)[y]||(f[y]={}))[f.uniqueID]||(u[f.uniqueID]={}))[t]||[])[0]===_&&l[1]),!1===w)for(;(f=++d&&f&&f[g]||(w=d=0)||p.pop())&&((a?f.nodeName.toLowerCase()!==v:1!==f.nodeType)||!++w||(b&&((h=(u=f[y]||(f[y]={}))[f.uniqueID]||(u[f.uniqueID]={}))[t]=[_,w]),f!==e)););return(w-=i)===r||w%r==0&&w/r>=0}}},PSEUDO:function(t,e){var n,i=r.pseudos[t]||r.setFilters[t.toLowerCase()]||ot.error(\"unsupported pseudo: \"+t);return i[y]?i(e):i.length>1?(n=[t,t,\"\",e],r.setFilters.hasOwnProperty(t.toLowerCase())?at((function(t,n){for(var r,o=i(t,e),s=o.length;s--;)t[r=P(t,o[s])]=!(n[r]=o[s])})):function(t){return i(t,0,n)}):i}},pseudos:{not:at((function(t){var e=[],n=[],r=a(t.replace(V,\"$1\"));return r[y]?at((function(t,e,n,i){for(var o,s=r(t,null,i,[]),a=t.length;a--;)(o=s[a])&&(t[a]=!(e[a]=o))})):function(t,i,o){return e[0]=t,r(e,null,o,n),e[0]=null,!n.pop()}})),has:at((function(t){return function(e){return ot(t,e).length>0}})),contains:at((function(t){return t=t.replace(J,tt),function(e){return(e.textContent||e.innerText||i(e)).indexOf(t)>-1}})),lang:at((function(t){return $.test(t||\"\")||ot.error(\"unsupported lang: \"+t),t=t.replace(J,tt).toLowerCase(),function(e){var n;do{if(n=g?e.lang:e.getAttribute(\"xml:lang\")||e.getAttribute(\"lang\"))return(n=n.toLowerCase())===t||0===n.indexOf(t+\"-\")}while((e=e.parentNode)&&1===e.nodeType);return!1}})),target:function(e){var n=t.location&&t.location.hash;return n&&n.slice(1)===e.id},root:function(t){return t===p},focus:function(t){return t===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:ft(!1),disabled:ft(!0),checked:function(t){var e=t.nodeName.toLowerCase();return\"input\"===e&&!!t.checked||\"option\"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,!0===t.selected},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!r.pseudos.empty(t)},header:function(t){return X.test(t.nodeName)},input:function(t){return Z.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return\"input\"===e&&\"button\"===t.type||\"button\"===e},text:function(t){var e;return\"input\"===t.nodeName.toLowerCase()&&\"text\"===t.type&&(null==(e=t.getAttribute(\"type\"))||\"text\"===e.toLowerCase())},first:dt((function(){return[0]})),last:dt((function(t,e){return[e-1]})),eq:dt((function(t,e,n){return[n<0?n+e:n]})),even:dt((function(t,e){for(var n=0;n=0;)t.push(r);return t})),gt:dt((function(t,e,n){for(var r=n<0?n+e:n;++r1?function(e,n,r){for(var i=t.length;i--;)if(!t[i](e,n,r))return!1;return!0}:t[0]}function wt(t,e,n,r,i){for(var o,s=[],a=0,c=t.length,l=null!=e;a-1&&(o[l]=!(s[l]=u))}}else v=wt(v===s?v.splice(p,v.length):v),i?i(null,s,v,c):I.apply(s,v)}))}function xt(t){for(var e,n,i,o=t.length,s=r.relative[t[0].type],a=s||r.relative[\" \"],c=s?1:0,h=vt((function(t){return t===e}),a,!0),u=vt((function(t){return P(e,t)>-1}),a,!0),f=[function(t,n,r){var i=!s&&(r||n!==l)||((e=n).nodeType?h(t,n,r):u(t,n,r));return e=null,i}];c1&&bt(f),c>1&&mt(t.slice(0,c-1).concat({value:\" \"===t[c-2].type?\"*\":\"\"})).replace(V,\"$1\"),n,c0,i=t.length>0,o=function(o,s,a,c,h){var u,p,m,v=0,b=\"0\",w=o&&[],y=[],x=l,k=o||i&&r.find.TAG(\"*\",h),S=_+=null==x?1:Math.random()||.1,C=k.length;for(h&&(l=s===d||s||h);b!==C&&null!=(u=k[b]);b++){if(i&&u){for(p=0,s||u.ownerDocument===d||(f(u),a=!g);m=t[p++];)if(m(u,s||d,a)){c.push(u);break}h&&(_=S)}n&&((u=!m&&u)&&v--,o&&w.push(u))}if(v+=b,n&&b!==v){for(p=0;m=e[p++];)m(w,y,s,a);if(o){if(v>0)for(;b--;)w[b]||y[b]||(y[b]=M.call(c));y=wt(y)}I.apply(c,y),h&&!o&&y.length>0&&v+e.length>1&&ot.uniqueSort(c)}return h&&(_=S,l=x),w};return n?at(o):o}(o,i)),a.selector=t}return a},c=ot.select=function(t,e,n,i){var o,c,l,h,u,f=\"function\"==typeof t&&t,d=!i&&s(t=f.selector||t);if(n=n||[],1===d.length){if((c=d[0]=d[0].slice(0)).length>2&&\"ID\"===(l=c[0]).type&&9===e.nodeType&&g&&r.relative[c[1].type]){if(!(e=(r.find.ID(l.matches[0].replace(J,tt),e)||[])[0]))return n;f&&(e=e.parentNode),t=t.slice(c.shift().value.length)}for(o=G.needsContext.test(t)?0:c.length;o--&&(l=c[o],!r.relative[h=l.type]);)if((u=r.find[h])&&(i=u(l.matches[0].replace(J,tt),Q.test(c[0].type)&&pt(e.parentNode)||e))){if(c.splice(o,1),!(t=i.length&&mt(c)))return I.apply(n,i),n;break}}return(f||a(t,d))(i,e,!g,n,!e||Q.test(t)&&pt(e.parentNode)||e),n},n.sortStable=y.split(\"\").sort(A).join(\"\")===y,n.detectDuplicates=!!u,f(),ot}(window);w.find=_,w.expr=_.selectors,w.expr[\":\"]=w.expr.pseudos,w.uniqueSort=w.unique=_.uniqueSort,w.text=_.getText,w.isXMLDoc=_.isXML,w.contains=_.contains,w.escapeSelector=_.escape;var k=function(t,e,n){for(var r=[],i=void 0!==n;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(i&&w(t).is(n))break;r.push(t)}return r},S=function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n},C=w.expr.match.needsContext;function E(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()}var A=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function T(t,e,n){return d(e)?w.grep(t,(function(t,r){return!!e.call(t,r,t)!==n})):e.nodeType?w.grep(t,(function(t){return t===e!==n})):\"string\"!=typeof e?w.grep(t,(function(t){return s.call(e,t)>-1!==n})):w.filter(e,t,n)}w.filter=function(t,e,n){var r=e[0];return n&&(t=\":not(\"+t+\")\"),1===e.length&&1===r.nodeType?w.find.matchesSelector(r,t)?[r]:[]:w.find.matches(t,w.grep(e,(function(t){return 1===t.nodeType})))},w.fn.extend({find:function(t){var e,n,r=this.length,i=this;if(\"string\"!=typeof t)return this.pushStack(w(t).filter((function(){for(e=0;e1?w.uniqueSort(n):n},filter:function(t){return this.pushStack(T(this,t||[],!1))},not:function(t){return this.pushStack(T(this,t||[],!0))},is:function(t){return!!T(this,\"string\"==typeof t&&C.test(t)?w(t):t||[],!1).length}});var L,M=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,R=w.fn.init=function(t,n,r){var i,o;if(!t)return this;if(r=r||L,\"string\"==typeof t){if(!(i=\"<\"===t[0]&&\">\"===t[t.length-1]&&t.length>=3?[null,t,null]:M.exec(t))||!i[1]&&n)return!n||n.jquery?(n||r).find(t):this.constructor(n).find(t);if(i[1]){if(n=n instanceof w?n[0]:n,w.merge(this,w.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:e,!0)),A.test(i[1])&&w.isPlainObject(n))for(i in n)d(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}return(o=e.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return t.nodeType?(this[0]=t,this.length=1,this):d(t)?void 0!==r.ready?r.ready(t):t(w):w.makeArray(t,this)};R.prototype=w.fn,L=w(e);var I=/^(?:parents|prev(?:Until|All))/,N={children:!0,contents:!0,next:!0,prev:!0};function P(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}w.fn.extend({has:function(t){var e=w(t,this),n=e.length;return this.filter((function(){for(var t=0;t-1:1===n.nodeType&&w.find.matchesSelector(n,t))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(t){return t?\"string\"==typeof t?s.call(w(t),this[0]):s.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),w.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return k(t,\"parentNode\")},parentsUntil:function(t,e,n){return k(t,\"parentNode\",n)},next:function(t){return P(t,\"nextSibling\")},prev:function(t){return P(t,\"previousSibling\")},nextAll:function(t){return k(t,\"nextSibling\")},prevAll:function(t){return k(t,\"previousSibling\")},nextUntil:function(t,e,n){return k(t,\"nextSibling\",n)},prevUntil:function(t,e,n){return k(t,\"previousSibling\",n)},siblings:function(t){return S((t.parentNode||{}).firstChild,t)},children:function(t){return S(t.firstChild)},contents:function(t){return E(t,\"iframe\")?t.contentDocument:(E(t,\"template\")&&(t=t.content||t),w.merge([],t.childNodes))}},(function(t,e){w.fn[t]=function(n,r){var i=w.map(this,e,n);return\"Until\"!==t.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(i=w.filter(r,i)),this.length>1&&(N[t]||w.uniqueSort(i),I.test(t)&&i.reverse()),this.pushStack(i)}}));var O=/[^\\x20\\t\\r\\n\\f]+/g;function F(t){return t}function D(t){throw t}function B(t,e,n,r){var i;try{t&&d(i=t.promise)?i.call(t).done(e).fail(n):t&&d(i=t.then)?i.call(t,e,n):e.apply(void 0,[t].slice(r))}catch(t){n.apply(void 0,[t])}}w.Callbacks=function(t){t=\"string\"==typeof t?function(t){var e={};return w.each(t.match(O)||[],(function(t,n){e[n]=!0})),e}(t):w.extend({},t);var e,n,r,i,o=[],s=[],a=-1,c=function(){for(i=i||t.once,r=e=!0;s.length;a=-1)for(n=s.shift();++a-1;)o.splice(n,1),n<=a&&a--})),this},has:function(t){return t?w.inArray(t,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=s=[],o=n=\"\",this},disabled:function(){return!o},lock:function(){return i=s=[],n||e||(o=n=\"\"),this},locked:function(){return!!i},fireWith:function(t,n){return i||(n=[t,(n=n||[]).slice?n.slice():n],s.push(n),e||c()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},w.extend({Deferred:function(t){var e=[[\"notify\",\"progress\",w.Callbacks(\"memory\"),w.Callbacks(\"memory\"),2],[\"resolve\",\"done\",w.Callbacks(\"once memory\"),w.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",w.Callbacks(\"once memory\"),w.Callbacks(\"once memory\"),1,\"rejected\"]],n=\"pending\",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},catch:function(t){return r.then(null,t)},pipe:function(){var t=arguments;return w.Deferred((function(n){w.each(e,(function(e,r){var o=d(t[r[4]])&&t[r[4]];i[r[1]]((function(){var t=o&&o.apply(this,arguments);t&&d(t.promise)?t.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[r[0]+\"With\"](this,o?[t]:arguments)}))})),t=null})).promise()},then:function(t,n,r){var i=0;function o(t,e,n,r){return function(){var s=this,a=arguments,c=function(){var c,l;if(!(t=i&&(n!==D&&(s=void 0,a=[r]),e.rejectWith(s,a))}};t?l():(w.Deferred.getStackHook&&(l.stackTrace=w.Deferred.getStackHook()),window.setTimeout(l))}}return w.Deferred((function(i){e[0][3].add(o(0,i,d(r)?r:F,i.notifyWith)),e[1][3].add(o(0,i,d(t)?t:F)),e[2][3].add(o(0,i,d(n)?n:D))})).promise()},promise:function(t){return null!=t?w.extend(t,r):r}},i={};return w.each(e,(function(t,o){var s=o[2],a=o[5];r[o[1]]=s.add,a&&s.add((function(){n=a}),e[3-t][2].disable,e[3-t][3].disable,e[0][2].lock,e[0][3].lock),s.add(o[3].fire),i[o[0]]=function(){return i[o[0]+\"With\"](this===i?void 0:this,arguments),this},i[o[0]+\"With\"]=s.fireWith})),r.promise(i),t&&t.call(i,i),i},when:function(t){var e=arguments.length,n=e,i=Array(n),o=r.call(arguments),s=w.Deferred(),a=function(t){return function(n){i[t]=this,o[t]=arguments.length>1?r.call(arguments):n,--e||s.resolveWith(i,o)}};if(e<=1&&(B(t,s.done(a(n)).resolve,s.reject,!e),\"pending\"===s.state()||d(o[n]&&o[n].then)))return s.then();for(;n--;)B(o[n],a(n),s.reject);return s.promise()}});var z=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,e){window.console&&window.console.warn&&t&&z.test(t.name)&&window.console.warn(\"jQuery.Deferred exception: \"+t.message,t.stack,e)},w.readyException=function(t){window.setTimeout((function(){throw t}))};var H=w.Deferred();function V(){e.removeEventListener(\"DOMContentLoaded\",V),window.removeEventListener(\"load\",V),w.ready()}w.fn.ready=function(t){return H.then(t).catch((function(t){w.readyException(t)})),this},w.extend({isReady:!1,readyWait:1,ready:function(t){(!0===t?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==t&&--w.readyWait>0||H.resolveWith(e,[w]))}}),w.ready.then=H.then,\"complete\"===e.readyState||\"loading\"!==e.readyState&&!e.documentElement.doScroll?window.setTimeout(w.ready):(e.addEventListener(\"DOMContentLoaded\",V),window.addEventListener(\"load\",V));var j=function(t,e,n,r,i,o,s){var a=0,c=t.length,l=null==n;if(\"object\"===v(n))for(a in i=!0,n)j(t,e,a,n[a],!0,o,s);else if(void 0!==r&&(i=!0,d(r)||(s=!0),l&&(s?(e.call(t,r),e=null):(l=e,e=function(t,e,n){return l.call(w(t),n)})),e))for(;a1,null,!0)},removeData:function(t){return this.each((function(){Y.remove(this,t)}))}}),w.extend({queue:function(t,e,n){var r;if(t)return e=(e||\"fx\")+\"queue\",r=X.get(t,e),n&&(!r||Array.isArray(n)?r=X.access(t,e,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(t,e){e=e||\"fx\";var n=w.queue(t,e),r=n.length,i=n.shift(),o=w._queueHooks(t,e);\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===e&&n.unshift(\"inprogress\"),delete o.stop,i.call(t,(function(){w.dequeue(t,e)}),o)),!r&&o&&o.empty.fire()},_queueHooks:function(t,e){var n=e+\"queueHooks\";return X.get(t,n)||X.access(t,n,{empty:w.Callbacks(\"once memory\").add((function(){X.remove(t,[e+\"queue\",n])}))})}}),w.fn.extend({queue:function(t,e){var n=2;return\"string\"!=typeof t&&(e=t,t=\"fx\",n--),arguments.length\\x20\\t\\r\\n\\f]+)/i,ht=/^$|^module$|\\/(?:java|ecma)script/i,ut={option:[1,\"\"],thead:[1,\"\",\"
\"],col:[2,\"\",\"
\"],tr:[2,\"\",\"
\"],td:[3,\"\",\"
\"],_default:[0,\"\",\"\"]};function ft(t,e){var n;return n=void 0!==t.getElementsByTagName?t.getElementsByTagName(e||\"*\"):void 0!==t.querySelectorAll?t.querySelectorAll(e||\"*\"):[],void 0===e||e&&E(t,e)?w.merge([t],n):n}function dt(t,e){for(var n=0,r=t.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),s=ft(u.appendChild(o),\"script\"),l&&dt(s),n)for(h=0;o=s[h++];)ht.test(o.type||\"\")&&n.push(o);return u}!function(){var t=e.createDocumentFragment().appendChild(e.createElement(\"div\")),n=e.createElement(\"input\");n.setAttribute(\"type\",\"radio\"),n.setAttribute(\"checked\",\"checked\"),n.setAttribute(\"name\",\"t\"),t.appendChild(n),f.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML=\"\",f.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var mt=e.documentElement,vt=/^key/,bt=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,wt=/^([^.]*)(?:\\.(.+)|)/;function yt(){return!0}function xt(){return!1}function _t(){try{return e.activeElement}catch(t){}}function kt(t,e,n,r,i,o){var s,a;if(\"object\"==typeof e){for(a in\"string\"!=typeof n&&(r=r||n,n=void 0),e)kt(t,a,n,r,e[a],o);return t}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&(\"string\"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=xt;else if(!i)return t;return 1===o&&(s=i,i=function(t){return w().off(t),s.apply(this,arguments)},i.guid=s.guid||(s.guid=w.guid++)),t.each((function(){w.event.add(this,e,i,r,n)}))}w.event={global:{},add:function(t,e,n,r,i){var o,s,a,c,l,h,u,f,d,p,g,m=X.get(t);if(m)for(n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(mt,i),n.guid||(n.guid=w.guid++),(c=m.events)||(c=m.events={}),(s=m.handle)||(s=m.handle=function(e){return void 0!==w&&w.event.triggered!==e.type?w.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||\"\").match(O)||[\"\"]).length;l--;)d=g=(a=wt.exec(e[l])||[])[1],p=(a[2]||\"\").split(\".\").sort(),d&&(u=w.event.special[d]||{},d=(i?u.delegateType:u.bindType)||d,u=w.event.special[d]||{},h=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:p.join(\".\")},o),(f=c[d])||((f=c[d]=[]).delegateCount=0,u.setup&&!1!==u.setup.call(t,r,p,s)||t.addEventListener&&t.addEventListener(d,s)),u.add&&(u.add.call(t,h),h.handler.guid||(h.handler.guid=n.guid)),i?f.splice(f.delegateCount++,0,h):f.push(h),w.event.global[d]=!0)},remove:function(t,e,n,r,i){var o,s,a,c,l,h,u,f,d,p,g,m=X.hasData(t)&&X.get(t);if(m&&(c=m.events)){for(l=(e=(e||\"\").match(O)||[\"\"]).length;l--;)if(d=g=(a=wt.exec(e[l])||[])[1],p=(a[2]||\"\").split(\".\").sort(),d){for(u=w.event.special[d]||{},f=c[d=(r?u.delegateType:u.bindType)||d]||[],a=a[2]&&new RegExp(\"(^|\\\\.)\"+p.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),s=o=f.length;o--;)h=f[o],!i&&g!==h.origType||n&&n.guid!==h.guid||a&&!a.test(h.namespace)||r&&r!==h.selector&&(\"**\"!==r||!h.selector)||(f.splice(o,1),h.selector&&f.delegateCount--,u.remove&&u.remove.call(t,h));s&&!f.length&&(u.teardown&&!1!==u.teardown.call(t,p,m.handle)||w.removeEvent(t,d,m.handle),delete c[d])}else for(d in c)w.event.remove(t,d+e[l],n,r,!0);w.isEmptyObject(c)&&X.remove(t,\"handle events\")}},dispatch:function(t){var e,n,r,i,o,s,a=w.event.fix(t),c=new Array(arguments.length),l=(X.get(this,\"events\")||{})[a.type]||[],h=w.event.special[a.type]||{};for(c[0]=a,e=1;e=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(\"click\"!==t.type||!0!==l.disabled)){for(o=[],s={},n=0;n-1:w.find(i,this,null,[l]).length),s[i]&&o.push(r);o.length&&a.push({elem:l,handlers:o})}return l=this,c\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,Ct=/\\s*$/g;function Tt(t,e){return E(t,\"table\")&&E(11!==e.nodeType?e:e.firstChild,\"tr\")&&w(t).children(\"tbody\")[0]||t}function Lt(t){return t.type=(null!==t.getAttribute(\"type\"))+\"/\"+t.type,t}function Mt(t){return\"true/\"===(t.type||\"\").slice(0,5)?t.type=t.type.slice(5):t.removeAttribute(\"type\"),t}function Rt(t,e){var n,r,i,o,s,a,c,l;if(1===e.nodeType){if(X.hasData(t)&&(o=X.access(t),s=X.set(e,o),l=o.events))for(i in delete s.handle,s.events={},l)for(n=0,r=l[i].length;n1&&\"string\"==typeof v&&!f.checkClone&&Et.test(v))return t.each((function(i){var o=t.eq(i);b&&(e[0]=v.call(this,i,o.html())),Nt(o,e,n,r)}));if(p&&(s=(o=gt(e,t[0].ownerDocument,!1,t,r)).firstChild,1===o.childNodes.length&&(o=s),s||r)){for(c=(a=w.map(ft(o,\"script\"),Lt)).length;u\")},clone:function(t,e,n){var r,i,o,s,a=t.cloneNode(!0),c=w.contains(t.ownerDocument,t);if(!(f.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||w.isXMLDoc(t)))for(s=ft(a),r=0,i=(o=ft(t)).length;r0&&dt(s,!c&&ft(t,\"script\")),a},cleanData:function(t){for(var e,n,r,i=w.event.special,o=0;void 0!==(n=t[o]);o++)if(G(n)){if(e=n[X.expando]){if(e.events)for(r in e.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,e.handle);n[X.expando]=void 0}n[Y.expando]&&(n[Y.expando]=void 0)}}}),w.fn.extend({detach:function(t){return Pt(this,t,!0)},remove:function(t){return Pt(this,t)},text:function(t){return j(this,(function(t){return void 0===t?w.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)}))}),null,t,arguments.length)},append:function(){return Nt(this,arguments,(function(t){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Tt(this,t).appendChild(t)}))},prepend:function(){return Nt(this,arguments,(function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=Tt(this,t);e.insertBefore(t,e.firstChild)}}))},before:function(){return Nt(this,arguments,(function(t){this.parentNode&&this.parentNode.insertBefore(t,this)}))},after:function(){return Nt(this,arguments,(function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)}))},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(w.cleanData(ft(t,!1)),t.textContent=\"\");return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map((function(){return w.clone(this,t,e)}))},html:function(t){return j(this,(function(t){var e=this[0]||{},n=0,r=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if(\"string\"==typeof t&&!Ct.test(t)&&!ut[(lt.exec(t)||[\"\",\"\"])[1].toLowerCase()]){t=w.htmlPrefilter(t);try{for(;n=0&&(c+=Math.max(0,Math.ceil(t[\"offset\"+e[0].toUpperCase()+e.slice(1)]-o-c-a-.5))),c}function Kt(t,e,n){var r=Ft(t),i=Bt(t,e,r),o=\"border-box\"===w.css(t,\"boxSizing\",!1,r),s=o;if(Ot.test(i)){if(!n)return i;i=\"auto\"}return s=s&&(f.boxSizingReliable()||i===t.style[e]),(\"auto\"===i||!parseFloat(i)&&\"inline\"===w.css(t,\"display\",!1,r))&&(i=t[\"offset\"+e[0].toUpperCase()+e.slice(1)],s=!0),(i=parseFloat(i)||0)+Yt(t,e,n||(o?\"border\":\"content\"),s,r,i)+\"px\"}w.extend({cssHooks:{opacity:{get:function(t,e){if(e){var n=Bt(t,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(t,e,n,r){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var i,o,s,a=$(e),c=Ut.test(e),l=t.style;if(c||(e=Zt(a)),s=w.cssHooks[e]||w.cssHooks[a],void 0===n)return s&&\"get\"in s&&void 0!==(i=s.get(t,!1,r))?i:l[e];\"string\"===(o=typeof n)&&(i=et.exec(n))&&i[1]&&(n=function(t,e,n,r){var i,o,s=20,a=r?function(){return r.cur()}:function(){return w.css(t,e,\"\")},c=a(),l=n&&n[3]||(w.cssNumber[e]?\"\":\"px\"),h=(w.cssNumber[e]||\"px\"!==l&&+c)&&et.exec(w.css(t,e));if(h&&h[3]!==l){for(c/=2,l=l||h[3],h=+c||1;s--;)w.style(t,e,h+l),(1-o)*(1-(o=a()/c||.5))<=0&&(s=0),h/=o;h*=2,w.style(t,e,h+l),n=n||[]}return n&&(h=+h||+c||0,i=n[1]?h+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=h,r.end=i)),i}(t,e,i),o=\"number\"),null!=n&&n==n&&(\"number\"===o&&(n+=i&&i[3]||(w.cssNumber[a]?\"\":\"px\")),f.clearCloneStyle||\"\"!==n||0!==e.indexOf(\"background\")||(l[e]=\"inherit\"),s&&\"set\"in s&&void 0===(n=s.set(t,n,r))||(c?l.setProperty(e,n):l[e]=n))}},css:function(t,e,n,r){var i,o,s,a=$(e);return Ut.test(e)||(e=Zt(a)),(s=w.cssHooks[e]||w.cssHooks[a])&&\"get\"in s&&(i=s.get(t,!0,n)),void 0===i&&(i=Bt(t,e,r)),\"normal\"===i&&e in Wt&&(i=Wt[e]),\"\"===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each([\"height\",\"width\"],(function(t,e){w.cssHooks[e]={get:function(t,n,r){if(n)return!jt.test(w.css(t,\"display\"))||t.getClientRects().length&&t.getBoundingClientRect().width?Kt(t,e,r):it(t,qt,(function(){return Kt(t,e,r)}))},set:function(t,n,r){var i,o=Ft(t),s=\"border-box\"===w.css(t,\"boxSizing\",!1,o),a=r&&Yt(t,e,r,s,o);return s&&f.scrollboxSize()===o.position&&(a-=Math.ceil(t[\"offset\"+e[0].toUpperCase()+e.slice(1)]-parseFloat(o[e])-Yt(t,e,\"border\",!1,o)-.5)),a&&(i=et.exec(n))&&\"px\"!==(i[3]||\"px\")&&(t.style[e]=n,n=w.css(t,e)),Xt(0,n,a)}}})),w.cssHooks.marginLeft=zt(f.reliableMarginLeft,(function(t,e){if(e)return(parseFloat(Bt(t,\"marginLeft\"))||t.getBoundingClientRect().left-it(t,{marginLeft:0},(function(){return t.getBoundingClientRect().left})))+\"px\"})),w.each({margin:\"\",padding:\"\",border:\"Width\"},(function(t,e){w.cssHooks[t+e]={expand:function(n){for(var r=0,i={},o=\"string\"==typeof n?n.split(\" \"):[n];r<4;r++)i[t+nt[r]+e]=o[r]||o[r-2]||o[0];return i}},\"margin\"!==t&&(w.cssHooks[t+e].set=Xt)})),w.fn.extend({css:function(t,e){return j(this,(function(t,e,n){var r,i,o={},s=0;if(Array.isArray(e)){for(r=Ft(t),i=e.length;s1)}}),w.fn.delay=function(t,e){return t=w.fx&&w.fx.speeds[t]||t,e=e||\"fx\",this.queue(e,(function(e,n){var r=window.setTimeout(e,t);n.stop=function(){window.clearTimeout(r)}}))},Ht=e.createElement(\"input\"),Vt=e.createElement(\"select\").appendChild(e.createElement(\"option\")),Ht.type=\"checkbox\",f.checkOn=\"\"!==Ht.value,f.optSelected=Vt.selected,(Ht=e.createElement(\"input\")).value=\"t\",Ht.type=\"radio\",f.radioValue=\"t\"===Ht.value;var Qt,Jt=w.expr.attrHandle;w.fn.extend({attr:function(t,e){return j(this,w.attr,t,e,arguments.length>1)},removeAttr:function(t){return this.each((function(){w.removeAttr(this,t)}))}}),w.extend({attr:function(t,e,n){var r,i,o=t.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===t.getAttribute?w.prop(t,e,n):(1===o&&w.isXMLDoc(t)||(i=w.attrHooks[e.toLowerCase()]||(w.expr.match.bool.test(e)?Qt:void 0)),void 0!==n?null===n?void w.removeAttr(t,e):i&&\"set\"in i&&void 0!==(r=i.set(t,n,e))?r:(t.setAttribute(e,n+\"\"),n):i&&\"get\"in i&&null!==(r=i.get(t,e))?r:null==(r=w.find.attr(t,e))?void 0:r)},attrHooks:{type:{set:function(t,e){if(!f.radioValue&&\"radio\"===e&&E(t,\"input\")){var n=t.value;return t.setAttribute(\"type\",e),n&&(t.value=n),e}}}},removeAttr:function(t,e){var n,r=0,i=e&&e.match(O);if(i&&1===t.nodeType)for(;n=i[r++];)t.removeAttribute(n)}}),Qt={set:function(t,e,n){return!1===e?w.removeAttr(t,n):t.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\\w+/g),(function(t,e){var n=Jt[e]||w.find.attr;Jt[e]=function(t,e,r){var i,o,s=e.toLowerCase();return r||(o=Jt[s],Jt[s]=i,i=null!=n(t,e,r)?s:null,Jt[s]=o),i}}));var te=/^(?:input|select|textarea|button)$/i,ee=/^(?:a|area)$/i;function ne(t){return(t.match(O)||[]).join(\" \")}function re(t){return t.getAttribute&&t.getAttribute(\"class\")||\"\"}function ie(t){return Array.isArray(t)?t:\"string\"==typeof t&&t.match(O)||[]}w.fn.extend({prop:function(t,e){return j(this,w.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each((function(){delete this[w.propFix[t]||t]}))}}),w.extend({prop:function(t,e,n){var r,i,o=t.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(t)||(e=w.propFix[e]||e,i=w.propHooks[e]),void 0!==n?i&&\"set\"in i&&void 0!==(r=i.set(t,n,e))?r:t[e]=n:i&&\"get\"in i&&null!==(r=i.get(t,e))?r:t[e]},propHooks:{tabIndex:{get:function(t){var e=w.find.attr(t,\"tabindex\");return e?parseInt(e,10):te.test(t.nodeName)||ee.test(t.nodeName)&&t.href?0:-1}}},propFix:{for:\"htmlFor\",class:\"className\"}}),f.optSelected||(w.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex)}}),w.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],(function(){w.propFix[this.toLowerCase()]=this})),w.fn.extend({addClass:function(t){var e,n,r,i,o,s,a,c=0;if(d(t))return this.each((function(e){w(this).addClass(t.call(this,e,re(this)))}));if((e=ie(t)).length)for(;n=this[c++];)if(i=re(n),r=1===n.nodeType&&\" \"+ne(i)+\" \"){for(s=0;o=e[s++];)r.indexOf(\" \"+o+\" \")<0&&(r+=o+\" \");i!==(a=ne(r))&&n.setAttribute(\"class\",a)}return this},removeClass:function(t){var e,n,r,i,o,s,a,c=0;if(d(t))return this.each((function(e){w(this).removeClass(t.call(this,e,re(this)))}));if(!arguments.length)return this.attr(\"class\",\"\");if((e=ie(t)).length)for(;n=this[c++];)if(i=re(n),r=1===n.nodeType&&\" \"+ne(i)+\" \"){for(s=0;o=e[s++];)for(;r.indexOf(\" \"+o+\" \")>-1;)r=r.replace(\" \"+o+\" \",\" \");i!==(a=ne(r))&&n.setAttribute(\"class\",a)}return this},toggleClass:function(t,e){var n=typeof t,r=\"string\"===n||Array.isArray(t);return\"boolean\"==typeof e&&r?e?this.addClass(t):this.removeClass(t):d(t)?this.each((function(n){w(this).toggleClass(t.call(this,n,re(this),e),e)})):this.each((function(){var e,i,o,s;if(r)for(i=0,o=w(this),s=ie(t);e=s[i++];)o.hasClass(e)?o.removeClass(e):o.addClass(e);else void 0!==t&&\"boolean\"!==n||((e=re(this))&&X.set(this,\"__className__\",e),this.setAttribute&&this.setAttribute(\"class\",e||!1===t?\"\":X.get(this,\"__className__\")||\"\"))}))},hasClass:function(t){var e,n,r=0;for(e=\" \"+t+\" \";n=this[r++];)if(1===n.nodeType&&(\" \"+ne(re(n))+\" \").indexOf(e)>-1)return!0;return!1}});var oe=/\\r/g;w.fn.extend({val:function(t){var e,n,r,i=this[0];return arguments.length?(r=d(t),this.each((function(n){var i;1===this.nodeType&&(null==(i=r?t.call(this,n,w(this).val()):t)?i=\"\":\"number\"==typeof i?i+=\"\":Array.isArray(i)&&(i=w.map(i,(function(t){return null==t?\"\":t+\"\"}))),(e=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&\"set\"in e&&void 0!==e.set(this,i,\"value\")||(this.value=i))}))):i?(e=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&\"get\"in e&&void 0!==(n=e.get(i,\"value\"))?n:\"string\"==typeof(n=i.value)?n.replace(oe,\"\"):null==n?\"\":n:void 0}}),w.extend({valHooks:{option:{get:function(t){var e=w.find.attr(t,\"value\");return null!=e?e:ne(w.text(t))}},select:{get:function(t){var e,n,r,i=t.options,o=t.selectedIndex,s=\"select-one\"===t.type,a=s?null:[],c=s?o+1:i.length;for(r=o<0?c:s?o:0;r-1)&&(n=!0);return n||(t.selectedIndex=-1),o}}}}),w.each([\"radio\",\"checkbox\"],(function(){w.valHooks[this]={set:function(t,e){if(Array.isArray(e))return t.checked=w.inArray(w(t).val(),e)>-1}},f.checkOn||(w.valHooks[this].get=function(t){return null===t.getAttribute(\"value\")?\"on\":t.value})})),f.focusin=\"onfocusin\"in window;var se=/^(?:focusinfocus|focusoutblur)$/,ae=function(t){t.stopPropagation()};w.extend(w.event,{trigger:function(t,n,r,i){var o,s,a,c,h,u,f,g,m=[r||e],v=l.call(t,\"type\")?t.type:t,b=l.call(t,\"namespace\")?t.namespace.split(\".\"):[];if(s=g=a=r=r||e,3!==r.nodeType&&8!==r.nodeType&&!se.test(v+w.event.triggered)&&(v.indexOf(\".\")>-1&&(b=v.split(\".\"),v=b.shift(),b.sort()),h=v.indexOf(\":\")<0&&\"on\"+v,(t=t[w.expando]?t:new w.Event(v,\"object\"==typeof t&&t)).isTrigger=i?2:3,t.namespace=b.join(\".\"),t.rnamespace=t.namespace?new RegExp(\"(^|\\\\.)\"+b.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:w.makeArray(n,[t]),f=w.event.special[v]||{},i||!f.trigger||!1!==f.trigger.apply(r,n))){if(!i&&!f.noBubble&&!p(r)){for(c=f.delegateType||v,se.test(c+v)||(s=s.parentNode);s;s=s.parentNode)m.push(s),a=s;a===(r.ownerDocument||e)&&m.push(a.defaultView||a.parentWindow||window)}for(o=0;(s=m[o++])&&!t.isPropagationStopped();)g=s,t.type=o>1?c:f.bindType||v,(u=(X.get(s,\"events\")||{})[t.type]&&X.get(s,\"handle\"))&&u.apply(s,n),(u=h&&s[h])&&u.apply&&G(s)&&(t.result=u.apply(s,n),!1===t.result&&t.preventDefault());return t.type=v,i||t.isDefaultPrevented()||f._default&&!1!==f._default.apply(m.pop(),n)||!G(r)||h&&d(r[v])&&!p(r)&&((a=r[h])&&(r[h]=null),w.event.triggered=v,t.isPropagationStopped()&&g.addEventListener(v,ae),r[v](),t.isPropagationStopped()&&g.removeEventListener(v,ae),w.event.triggered=void 0,a&&(r[h]=a)),t.result}},simulate:function(t,e,n){var r=w.extend(new w.Event,n,{type:t,isSimulated:!0});w.event.trigger(r,null,e)}}),w.fn.extend({trigger:function(t,e){return this.each((function(){w.event.trigger(t,e,this)}))},triggerHandler:function(t,e){var n=this[0];if(n)return w.event.trigger(t,e,n,!0)}}),f.focusin||w.each({focus:\"focusin\",blur:\"focusout\"},(function(t,e){var n=function(t){w.event.simulate(e,t.target,w.event.fix(t))};w.event.special[e]={setup:function(){var r=this.ownerDocument||this,i=X.access(r,e);i||r.addEventListener(t,n,!0),X.access(r,e,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=X.access(r,e)-1;i?X.access(r,e,i):(r.removeEventListener(t,n,!0),X.remove(r,e))}}}));var ce,le=/\\[\\]$/,he=/\\r?\\n/g,ue=/^(?:submit|button|image|reset|file)$/i,fe=/^(?:input|select|textarea|keygen)/i;function de(t,e,n,r){var i;if(Array.isArray(e))w.each(e,(function(e,i){n||le.test(t)?r(t,i):de(t+\"[\"+(\"object\"==typeof i&&null!=i?e:\"\")+\"]\",i,n,r)}));else if(n||\"object\"!==v(e))r(t,e);else for(i in e)de(t+\"[\"+i+\"]\",e[i],n,r)}w.param=function(t,e){var n,r=[],i=function(t,e){var n=d(e)?e():e;r[r.length]=encodeURIComponent(t)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(Array.isArray(t)||t.jquery&&!w.isPlainObject(t))w.each(t,(function(){i(this.name,this.value)}));else for(n in t)de(n,t[n],e,i);return r.join(\"&\")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var t=w.prop(this,\"elements\");return t?w.makeArray(t):this})).filter((function(){var t=this.type;return this.name&&!w(this).is(\":disabled\")&&fe.test(this.nodeName)&&!ue.test(t)&&(this.checked||!ct.test(t))})).map((function(t,e){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,(function(t){return{name:e.name,value:t.replace(he,\"\\r\\n\")}})):{name:e.name,value:n.replace(he,\"\\r\\n\")}})).get()}}),w.fn.extend({wrapAll:function(t){var e;return this[0]&&(d(t)&&(t=t.call(this[0])),e=w(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map((function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t})).append(this)),this},wrapInner:function(t){return d(t)?this.each((function(e){w(this).wrapInner(t.call(this,e))})):this.each((function(){var e=w(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)}))},wrap:function(t){var e=d(t);return this.each((function(n){w(this).wrapAll(e?t.call(this,n):t)}))},unwrap:function(t){return this.parent(t).not(\"body\").each((function(){w(this).replaceWith(this.childNodes)})),this}}),w.expr.pseudos.hidden=function(t){return!w.expr.pseudos.visible(t)},w.expr.pseudos.visible=function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)},f.createHTMLDocument=((ce=e.implementation.createHTMLDocument(\"\").body).innerHTML=\"
\",2===ce.childNodes.length),w.parseHTML=function(t,n,r){return\"string\"!=typeof t?[]:(\"boolean\"==typeof n&&(r=n,n=!1),n||(f.createHTMLDocument?((i=(n=e.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href=e.location.href,n.head.appendChild(i)):n=e),s=!r&&[],(o=A.exec(t))?[n.createElement(o[1])]:(o=gt([t],n,s),s&&s.length&&w(s).remove(),w.merge([],o.childNodes)));var i,o,s},w.offset={setOffset:function(t,e,n){var r,i,o,s,a,c,l=w.css(t,\"position\"),h=w(t),u={};\"static\"===l&&(t.style.position=\"relative\"),a=h.offset(),o=w.css(t,\"top\"),c=w.css(t,\"left\"),(\"absolute\"===l||\"fixed\"===l)&&(o+c).indexOf(\"auto\")>-1?(s=(r=h.position()).top,i=r.left):(s=parseFloat(o)||0,i=parseFloat(c)||0),d(e)&&(e=e.call(t,n,w.extend({},a))),null!=e.top&&(u.top=e.top-a.top+s),null!=e.left&&(u.left=e.left-a.left+i),\"using\"in e?e.using.call(t,u):h.css(u)}},w.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each((function(e){w.offset.setOffset(this,t,e)}));var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var t,e,n,r=this[0],i={top:0,left:0};if(\"fixed\"===w.css(r,\"position\"))e=r.getBoundingClientRect();else{for(e=this.offset(),n=r.ownerDocument,t=r.offsetParent||n.documentElement;t&&(t===n.body||t===n.documentElement)&&\"static\"===w.css(t,\"position\");)t=t.parentNode;t&&t!==r&&1===t.nodeType&&((i=w(t).offset()).top+=w.css(t,\"borderTopWidth\",!0),i.left+=w.css(t,\"borderLeftWidth\",!0))}return{top:e.top-i.top-w.css(r,\"marginTop\",!0),left:e.left-i.left-w.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map((function(){for(var t=this.offsetParent;t&&\"static\"===w.css(t,\"position\");)t=t.offsetParent;return t||mt}))}}),w.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},(function(t,e){var n=\"pageYOffset\"===e;w.fn[t]=function(r){return j(this,(function(t,r,i){var o;if(p(t)?o=t:9===t.nodeType&&(o=t.defaultView),void 0===i)return o?o[e]:t[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):t[r]=i}),t,r,arguments.length)}})),w.each([\"top\",\"left\"],(function(t,e){w.cssHooks[e]=zt(f.pixelPosition,(function(t,n){if(n)return n=Bt(t,e),Ot.test(n)?w(t).position()[e]+\"px\":n}))})),w.each({Height:\"height\",Width:\"width\"},(function(t,e){w.each({padding:\"inner\"+t,content:e,\"\":\"outer\"+t},(function(n,r){w.fn[r]=function(i,o){var s=arguments.length&&(n||\"boolean\"!=typeof i),a=n||(!0===i||!0===o?\"margin\":\"border\");return j(this,(function(e,n,i){var o;return p(e)?0===r.indexOf(\"outer\")?e[\"inner\"+t]:e.document.documentElement[\"client\"+t]:9===e.nodeType?(o=e.documentElement,Math.max(e.body[\"scroll\"+t],o[\"scroll\"+t],e.body[\"offset\"+t],o[\"offset\"+t],o[\"client\"+t])):void 0===i?w.css(e,n,a):w.style(e,n,i,a)}),e,s?i:void 0,s)}}))})),w.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),(function(t,e){w.fn[e]=function(t,n){return arguments.length>0?this.on(e,null,t,n):this.trigger(e)}})),w.fn.extend({hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)}}),w.fn.extend({bind:function(t,e,n){return this.on(t,null,e,n)},unbind:function(t,e){return this.off(t,null,e)},delegate:function(t,e,n,r){return this.on(e,t,n,r)},undelegate:function(t,e,n){return 1===arguments.length?this.off(t,\"**\"):this.off(e,t||\"**\",n)}}),w.proxy=function(t,e){var n,i,o;if(\"string\"==typeof e&&(n=t[e],e=t,t=n),d(t))return i=r.call(arguments,2),o=function(){return t.apply(e||this,i.concat(r.call(arguments)))},o.guid=t.guid=t.guid||w.guid++,o},w.holdReady=function(t){t?w.readyWait++:w.ready(!0)},w.isArray=Array.isArray,w.parseJSON=JSON.parse,w.nodeName=E,w.isFunction=d,w.isWindow=p,w.camelCase=$,w.type=v,w.now=Date.now,w.isNumeric=function(t){var e=w.type(t);return(\"number\"===e||\"string\"===e)&&!isNaN(t-parseFloat(t))};const pe=w;function ge(t){return function(t,e){const n=document.createElement(t);e&&(e.class&&n.classList.add(e.class),e.id&&(n.id=e.id),e.style&&function(t,e){for(let n of Object.keys(e))t.style[n]=e[n]}(n,e.style));return n}(\"div\",t)}function me(t){const e=getComputedStyle(t);\"none\"!==e.display&&(t._initialDisplay=e.display),t.style.display=\"none\"}function ve(t){if(t.type.startsWith(\"touch\")){const e=t.touches[0];return{x:e.pageX,y:e.pageY}}return{x:t.pageX,y:t.pageY}}function be(){return(\"0000\"+(Math.random()*Math.pow(36,4)<<0).toString(36)).slice(-4)}function we(t,e){const{clientX:n,clientY:r}=t;return((t,{clientX:e,clientY:n})=>{const{left:r,top:i,width:o,height:s}=t.getBoundingClientRect(),a=e-r,c=n-i;return{x:a,y:c,xNormalized:a/o,yNormalized:c/s,width:o,height:s}})(e,{clientX:n,clientY:r})}function ye(t,e){return function(t,e){e=e||\"currentColor\";let n=xe[t];n||(console.error(`No icon named: ${t}`),n=xe.question);const r=document.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\");r.setAttributeNS(null,\"viewBox\",\"0 0 \"+n[0]+\" \"+n[1]);const i=document.createElementNS(\"http://www.w3.org/2000/svg\",\"path\");return i.setAttributeNS(null,\"fill\",e),i.setAttributeNS(null,\"d\",n[4]),r.appendChild(i),r}(t,e)}const xe={check:[512,512,[],\"f00c\",\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"],cog:[512,512,[],\"f013\",\"M444.788 291.1l42.616 24.599c4.867 2.809 7.126 8.618 5.459 13.985-11.07 35.642-29.97 67.842-54.689 94.586a12.016 12.016 0 0 1-14.832 2.254l-42.584-24.595a191.577 191.577 0 0 1-60.759 35.13v49.182a12.01 12.01 0 0 1-9.377 11.718c-34.956 7.85-72.499 8.256-109.219.007-5.49-1.233-9.403-6.096-9.403-11.723v-49.184a191.555 191.555 0 0 1-60.759-35.13l-42.584 24.595a12.016 12.016 0 0 1-14.832-2.254c-24.718-26.744-43.619-58.944-54.689-94.586-1.667-5.366.592-11.175 5.459-13.985L67.212 291.1a193.48 193.48 0 0 1 0-70.199l-42.616-24.599c-4.867-2.809-7.126-8.618-5.459-13.985 11.07-35.642 29.97-67.842 54.689-94.586a12.016 12.016 0 0 1 14.832-2.254l42.584 24.595a191.577 191.577 0 0 1 60.759-35.13V25.759a12.01 12.01 0 0 1 9.377-11.718c34.956-7.85 72.499-8.256 109.219-.007 5.49 1.233 9.403 6.096 9.403 11.723v49.184a191.555 191.555 0 0 1 60.759 35.13l42.584-24.595a12.016 12.016 0 0 1 14.832 2.254c24.718 26.744 43.619 58.944 54.689 94.586 1.667 5.366-.592 11.175-5.459 13.985L444.788 220.9a193.485 193.485 0 0 1 0 70.2zM336 256c0-44.112-35.888-80-80-80s-80 35.888-80 80 35.888 80 80 80 80-35.888 80-80z\"],exclamation:[192,512,[],\"f12a\",\"M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z\"],\"exclamation-circle\":[512,512,[],\"f06a\",\"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"],\"exclamation-triangle\":[576,512,[],\"f071\",\"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"],minus:[448,512,[],\"f068\",\"M424 318.2c13.3 0 24-10.7 24-24v-76.4c0-13.3-10.7-24-24-24H24c-13.3 0-24 10.7-24 24v76.4c0 13.3 10.7 24 24 24h400z\"],\"minus-circle\":[512,512,[],\"f056\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z\"],\"minus-square\":[448,512,[],\"f146\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM92 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H92z\"],plus:[448,512,[],\"f067\",\"M448 294.2v-76.4c0-13.3-10.7-24-24-24H286.2V56c0-13.3-10.7-24-24-24h-76.4c-13.3 0-24 10.7-24 24v137.8H24c-13.3 0-24 10.7-24 24v76.4c0 13.3 10.7 24 24 24h137.8V456c0 13.3 10.7 24 24 24h76.4c13.3 0 24-10.7 24-24V318.2H424c13.3 0 24-10.7 24-24z\"],\"plus-circle\":[512,512,[],\"f055\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"],\"plus-square\":[448,512,[],\"f0fe\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"],question:[384,512,[],\"f128\",\"M202.021 0C122.202 0 70.503 32.703 29.914 91.026c-7.363 10.58-5.093 25.086 5.178 32.874l43.138 32.709c10.373 7.865 25.132 6.026 33.253-4.148 25.049-31.381 43.63-49.449 82.757-49.449 30.764 0 68.816 19.799 68.816 49.631 0 22.552-18.617 34.134-48.993 51.164-35.423 19.86-82.299 44.576-82.299 106.405V320c0 13.255 10.745 24 24 24h72.471c13.255 0 24-10.745 24-24v-5.773c0-42.86 125.268-44.645 125.268-160.627C377.504 66.256 286.902 0 202.021 0zM192 373.459c-38.196 0-69.271 31.075-69.271 69.271 0 38.195 31.075 69.27 69.271 69.27s69.271-31.075 69.271-69.271-31.075-69.27-69.271-69.27z\"],save:[448,512,[],\"f0c7\",\"M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z\"],search:[512,512,[],\"f002\",\"M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z\"],share:[512,512,[],\"f064\",\"M503.691 189.836L327.687 37.851C312.281 24.546 288 35.347 288 56.015v80.053C127.371 137.907 0 170.1 0 322.326c0 61.441 39.581 122.309 83.333 154.132 13.653 9.931 33.111-2.533 28.077-18.631C66.066 312.814 132.917 274.316 288 272.085V360c0 20.7 24.3 31.453 39.687 18.164l176.004-152c11.071-9.562 11.086-26.753 0-36.328z\"],spinner:[512,512,[],\"f110\",\"M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z\"],square:[448,512,[],\"f0c8\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"],\"square-full\":[512,512,[],\"f45c\",\"M512 512H0V0h512v512z\"],times:[384,512,[],\"f00d\",\"M323.1 441l53.9-53.9c9.4-9.4 9.4-24.5 0-33.9L279.8 256l97.2-97.2c9.4-9.4 9.4-24.5 0-33.9L323.1 71c-9.4-9.4-24.5-9.4-33.9 0L192 168.2 94.8 71c-9.4-9.4-24.5-9.4-33.9 0L7 124.9c-9.4 9.4-9.4 24.5 0 33.9l97.2 97.2L7 353.2c-9.4 9.4-9.4 24.5 0 33.9L60.9 441c9.4 9.4 24.5 9.4 33.9 0l97.2-97.2 97.2 97.2c9.3 9.3 24.5 9.3 33.9 0z\"],\"times-circle\":[512,512,[],\"f057\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z\"],wrench:[512,512,[],\"f0ad\",\"M481.156 200c9.3 0 15.12 10.155 10.325 18.124C466.295 259.992 420.419 288 368 288c-79.222 0-143.501-63.974-143.997-143.079C223.505 65.469 288.548-.001 368.002 0c52.362.001 98.196 27.949 123.4 69.743C496.24 77.766 490.523 88 481.154 88H376l-40 56 40 56h105.156zm-171.649 93.003L109.255 493.255c-24.994 24.993-65.515 24.994-90.51 0-24.993-24.994-24.993-65.516 0-90.51L218.991 202.5c16.16 41.197 49.303 74.335 90.516 90.503zM104 432c0-13.255-10.745-24-24-24s-24 10.745-24 24 10.745 24 24 24 24-10.745 24-24z\"]};function _e(t,e){var n=document.createElement(\"div\");t.appendChild(n),n.appendChild(ye(\"times\")),n.addEventListener(\"click\",(function(t){t.preventDefault(),t.stopPropagation(),e()}))}function ke(t){return\"string\"==typeof t||t instanceof String}function Se(t){var e=String(t).split(/[.,]/);return e[0].split(\"\").reverse().reduce((function(t,e,n){return n%3==0?t+\",\"+e:t+e})).split(\"\").reverse().join(\"\")+(e[1]?\".\"+e[1]:\"\")}const Ce=function(t){return t.split(/\\n|\\r\\n|\\r/g)};function Ee(t,e){var n,r,i=[],o=t.length,s=0,a=!1;if(o>0)for(i[s]=t.charAt(0),n=1;n0?t.charAt(0).toUpperCase()+t.slice(1):t}function Te(t){return t.includes(\"googleapis\")&&!t.includes(\"urlshortener\")||Le(t)||Me(t)}function Le(t){return t.startsWith(\"gs://\")||t.startsWith(\"https://www.googleapis.com/storage\")||t.startsWith(\"https://storage.cloud.google.com\")||t.startsWith(\"https://storage.googleapis.com\")}function Me(t){return t.indexOf(\"drive.google.com\")>=0||t.indexOf(\"www.googleapis.com/drive\")>0}function Re(t){let{bucket:e,object:n}=function(t){let e,n;if(t.startsWith(\"gs://\")){const r=t.indexOf(\"/\",5);if(r>=0){e=t.substring(5,r);const i=t.indexOf(\"?\");n=i<0?t.substring(r+1):t.substring(r+1,i)}}else if(t.startsWith(\"https://storage.googleapis.com\")||t.startsWith(\"https://storage.cloud.google.com\")){const r=t.indexOf(\"/v1/b/\",8);if(r>0){const i=t.indexOf(\"/o/\",r);if(i>0){const o=t.indexOf(\"?\",i);e=t.substring(r+6,i),n=o>0?t.substring(i+3,o):t.substring(i+3)}}else{const r=t.indexOf(\"/\",8),i=t.indexOf(\"/\",r+1),o=t.indexOf(\"?\",i);i>0&&(e=t.substring(r+1,i),n=o<0?t.substring(i+1):t.substring(i+1,o))}}else if(t.startsWith(\"https://www.googleapis.com/storage/v1/b\")){const r=t.indexOf(\"/v1/b/\",8),i=t.indexOf(\"/o/\",r);if(i>0){const o=t.indexOf(\"?\",i);e=t.substring(r+6,i),n=o>0?t.substring(i+3,o):t.substring(i+3)}}if(e&&n)return{bucket:e,object:n};throw Error(`Unrecognized Google Storage URI: ${t}`)}(t);n=function(t){let e=\"\";return t.split(\"\").forEach((function(t){Pe.has(t)?e+=Pe.get(t):e+=t})),e}(n);const r=t.indexOf(\"?\");return`https://storage.googleapis.com/storage/v1/b/${e}/o/${n}${r>0?t.substring(r)+\"&alt=media\":\"?alt=media\"}`}function Ie(t){var e=Ne(t);return e?\"https://www.googleapis.com/drive/v3/files/\"+e+\"?alt=media&supportsTeamDrives=true\":t}function Ne(t){if(t.includes(\"/open?id=\")){const e=t.indexOf(\"/open?id=\")+9,n=t.indexOf(\"&\");if(e>0&&n>e)return t.substring(e,n);if(e>0)return t.substring(e)}else{if(t.includes(\"/file/d/\")){const e=t.indexOf(\"/file/d/\")+8,n=t.lastIndexOf(\"/\");return t.substring(e,n)}if(t.startsWith(\"https://www.googleapis.com/drive\")){let e=t.indexOf(\"/files/\");const n=t.indexOf(\"?\");if(e>0)return e+=7,n>0?t.substring(e,n):t.substring(e)}}throw Error(\"Unknown Google Drive url format: \"+t)}const Pe=new Map;Pe.set(\"!\",\"%21\"),Pe.set(\"#\",\"%23\"),Pe.set(\"$\",\"%24\"),Pe.set(\"%\",\"%25\"),Pe.set(\"&\",\"%26\"),Pe.set(\"'\",\"%27\"),Pe.set(\"(\",\"%28\"),Pe.set(\")\",\"%29\"),Pe.set(\"*\",\"%2A\"),Pe.set(\"+\",\"%2B\"),Pe.set(\",\",\"%2C\"),Pe.set(\"/\",\"%2F\"),Pe.set(\":\",\"%3A\"),Pe.set(\";\",\"%3B\"),Pe.set(\"=\",\"%3D\"),Pe.set(\"?\",\"%3F\"),Pe.set(\"@\",\"%40\"),Pe.set(\"[\",\"%5B\"),Pe.set(\"]\",\"%5D\"),Pe.set(\" \",\"%20\");async function Oe(t){if(Fe())return void console.warn(\"oAuth has already been initialized\");gapi.apiKey=t.apiKey;const e=Object.assign({},t);return e.scope||(e.scope=\"profile\"),t.client_id||(t.client_id=t.clientId),await async function(t){return new Promise((function(e,n){gapi.load(t,{callback:e,onerror:n})}))}(\"auth2\"),new Promise((function(t,n){gapi.auth2.init(e).then(t,n)}))}function Fe(){return\"undefined\"!=typeof gapi&&gapi.auth2&&gapi.auth2.getAuthInstance()}let De=!1;async function Be(t){if(\"undefined\"==typeof gapi)throw Error(\"Google authentication requires the 'gapi' library\");if(!gapi.auth2)throw Error(\"Google 'auth2' has not been initialized\");if(De)return new Promise((function(e,n){let r;r=setInterval((()=>{try{!1===De&&(e(Be(t)),clearInterval(r))}catch(t){clearInterval(r),n(t)}}),100)}));De=!0;try{let e,n=gapi.auth2.getAuthInstance().currentUser.get();if(n.isSignedIn()){n.hasGrantedScopes(t)||await n.grant({scope:t});const{access_token:r,expires_at:i}=n.getAuthResponse();if(Date.now()0&&(n=n.substr(0,e)),n}throw Error(\"Expected File or string, got \"+typeof t)}function Ue(t){return!!t&&(\"function\"!=typeof t&&(t instanceof File||t.hasOwnProperty(\"name\")&&\"function\"==typeof t.slice&&\"function\"==typeof t.arrayBuffer))}const qe=Ue;function We(t,e){const n=document.createElement(\"a\");n.setAttribute(\"href\",e),n.setAttribute(\"download\",t),n.style.display=\"none\",document.body.appendChild(n),n.click(),document.body.removeChild(n)}\n", + "/*! pako 2.0.4 https://github.com/nodeca/pako @license (MIT AND Zlib) */function $e(t){let e=t.length;for(;--e>=0;)t[e]=0}const Ge=256,Ze=286,Xe=30,Ye=15,Ke=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),Qe=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),Je=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),tn=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),en=new Array(576);$e(en);const nn=new Array(60);$e(nn);const rn=new Array(512);$e(rn);const on=new Array(256);$e(on);const sn=new Array(29);$e(sn);const an=new Array(Xe);function cn(t,e,n,r,i){this.static_tree=t,this.extra_bits=e,this.extra_base=n,this.elems=r,this.max_length=i,this.has_stree=t&&t.length}let ln,hn,un;function fn(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}$e(an);const dn=t=>t<256?rn[t]:rn[256+(t>>>7)],pn=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},gn=(t,e,n)=>{t.bi_valid>16-n?(t.bi_buf|=e<>16-t.bi_valid,t.bi_valid+=n-16):(t.bi_buf|=e<{gn(t,n[2*e],n[2*e+1])},vn=(t,e)=>{let n=0;do{n|=1&t,t>>>=1,n<<=1}while(--e>0);return n>>>1},bn=(t,e,n)=>{const r=new Array(16);let i,o,s=0;for(i=1;i<=Ye;i++)r[i]=s=s+n[i-1]<<1;for(o=0;o<=e;o++){let e=t[2*o+1];0!==e&&(t[2*o]=vn(r[e]++,e))}},wn=t=>{let e;for(e=0;e{t.bi_valid>8?pn(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},xn=(t,e,n,r)=>{const i=2*e,o=2*n;return t[i]{const r=t.heap[n];let i=n<<1;for(;i<=t.heap_len&&(i{let r,i,o,s,a=0;if(0!==t.last_lit)do{r=t.pending_buf[t.d_buf+2*a]<<8|t.pending_buf[t.d_buf+2*a+1],i=t.pending_buf[t.l_buf+a],a++,0===r?mn(t,i,e):(o=on[i],mn(t,o+Ge+1,e),s=Ke[o],0!==s&&(i-=sn[o],gn(t,i,s)),r--,o=dn(r),mn(t,o,n),s=Qe[o],0!==s&&(r-=an[o],gn(t,r,s)))}while(a{const n=e.dyn_tree,r=e.stat_desc.static_tree,i=e.stat_desc.has_stree,o=e.stat_desc.elems;let s,a,c,l=-1;for(t.heap_len=0,t.heap_max=573,s=0;s>1;s>=1;s--)_n(t,n,s);c=o;do{s=t.heap[1],t.heap[1]=t.heap[t.heap_len--],_n(t,n,1),a=t.heap[1],t.heap[--t.heap_max]=s,t.heap[--t.heap_max]=a,n[2*c]=n[2*s]+n[2*a],t.depth[c]=(t.depth[s]>=t.depth[a]?t.depth[s]:t.depth[a])+1,n[2*s+1]=n[2*a+1]=c,t.heap[1]=c++,_n(t,n,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],((t,e)=>{const n=e.dyn_tree,r=e.max_code,i=e.stat_desc.static_tree,o=e.stat_desc.has_stree,s=e.stat_desc.extra_bits,a=e.stat_desc.extra_base,c=e.stat_desc.max_length;let l,h,u,f,d,p,g=0;for(f=0;f<=Ye;f++)t.bl_count[f]=0;for(n[2*t.heap[t.heap_max]+1]=0,l=t.heap_max+1;l<573;l++)h=t.heap[l],f=n[2*n[2*h+1]+1]+1,f>c&&(f=c,g++),n[2*h+1]=f,h>r||(t.bl_count[f]++,d=0,h>=a&&(d=s[h-a]),p=n[2*h],t.opt_len+=p*(f+d),o&&(t.static_len+=p*(i[2*h+1]+d)));if(0!==g){do{for(f=c-1;0===t.bl_count[f];)f--;t.bl_count[f]--,t.bl_count[f+1]+=2,t.bl_count[c]--,g-=2}while(g>0);for(f=c;0!==f;f--)for(h=t.bl_count[f];0!==h;)u=t.heap[--l],u>r||(n[2*u+1]!==f&&(t.opt_len+=(f-n[2*u+1])*n[2*u],n[2*u+1]=f),h--)}})(t,e),bn(n,l,t.bl_count)},Cn=(t,e,n)=>{let r,i,o=-1,s=e[1],a=0,c=7,l=4;for(0===s&&(c=138,l=3),e[2*(n+1)+1]=65535,r=0;r<=n;r++)i=s,s=e[2*(r+1)+1],++a{let r,i,o=-1,s=e[1],a=0,c=7,l=4;for(0===s&&(c=138,l=3),r=0;r<=n;r++)if(i=s,s=e[2*(r+1)+1],!(++a{gn(t,0+(r?1:0),3),((t,e,n,r)=>{yn(t),r&&(pn(t,n),pn(t,~n)),t.pending_buf.set(t.window.subarray(e,e+n),t.pending),t.pending+=n})(t,e,n,!0)};var Ln=(t,e,n,r)=>{let i,o,s=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=(t=>{let e,n=4093624447;for(e=0;e<=31;e++,n>>>=1)if(1&n&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e{let e;for(Cn(t,t.dyn_ltree,t.l_desc.max_code),Cn(t,t.dyn_dtree,t.d_desc.max_code),Sn(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*tn[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e})(t),i=t.opt_len+3+7>>>3,o=t.static_len+3+7>>>3,o<=i&&(i=o)):i=o=n+5,n+4<=i&&-1!==e?Tn(t,e,n,r):4===t.strategy||o===i?(gn(t,2+(r?1:0),3),kn(t,en,nn)):(gn(t,4+(r?1:0),3),((t,e,n,r)=>{let i;for(gn(t,e-257,5),gn(t,n-1,5),gn(t,r-4,4),i=0;i{An||((()=>{let t,e,n,r,i;const o=new Array(16);for(n=0,r=0;r<28;r++)for(sn[r]=n,t=0;t<1<>=7;r(t.pending_buf[t.d_buf+2*t.last_lit]=e>>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&n,t.last_lit++,0===e?t.dyn_ltree[2*n]++:(t.matches++,e--,t.dyn_ltree[2*(on[n]+Ge+1)]++,t.dyn_dtree[2*dn(e)]++),t.last_lit===t.lit_bufsize-1),_tr_align:t=>{gn(t,2,3),mn(t,256,en),(t=>{16===t.bi_valid?(pn(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)})(t)}};var Rn=(t,e,n,r)=>{let i=65535&t|0,o=t>>>16&65535|0,s=0;for(;0!==n;){s=n>2e3?2e3:n,n-=s;do{i=i+e[r++]|0,o=o+i|0}while(--s);i%=65521,o%=65521}return i|o<<16|0};const In=new Uint32Array((()=>{let t,e=[];for(var n=0;n<256;n++){t=n;for(var r=0;r<8;r++)t=1&t?3988292384^t>>>1:t>>>1;e[n]=t}return e})());var Nn=(t,e,n,r)=>{const i=In,o=r+n;t^=-1;for(let n=r;n>>8^i[255&(t^e[n])];return-1^t},Pn={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"},On={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:Fn,_tr_stored_block:Dn,_tr_flush_block:Bn,_tr_tally:zn,_tr_align:Hn}=Mn,{Z_NO_FLUSH:Vn,Z_PARTIAL_FLUSH:jn,Z_FULL_FLUSH:Un,Z_FINISH:qn,Z_BLOCK:Wn,Z_OK:$n,Z_STREAM_END:Gn,Z_STREAM_ERROR:Zn,Z_DATA_ERROR:Xn,Z_BUF_ERROR:Yn,Z_DEFAULT_COMPRESSION:Kn,Z_FILTERED:Qn,Z_HUFFMAN_ONLY:Jn,Z_RLE:tr,Z_FIXED:er,Z_DEFAULT_STRATEGY:nr,Z_UNKNOWN:rr,Z_DEFLATED:ir}=On,or=258,sr=262,ar=103,cr=113,lr=666,hr=(t,e)=>(t.msg=Pn[e],e),ur=t=>(t<<1)-(t>4?9:0),fr=t=>{let e=t.length;for(;--e>=0;)t[e]=0};let dr=(t,e,n)=>(e<{const e=t.state;let n=e.pending;n>t.avail_out&&(n=t.avail_out),0!==n&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+n),t.next_out),t.next_out+=n,e.pending_out+=n,t.total_out+=n,t.avail_out-=n,e.pending-=n,0===e.pending&&(e.pending_out=0))},gr=(t,e)=>{Bn(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,pr(t.strm)},mr=(t,e)=>{t.pending_buf[t.pending++]=e},vr=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},br=(t,e,n,r)=>{let i=t.avail_in;return i>r&&(i=r),0===i?0:(t.avail_in-=i,e.set(t.input.subarray(t.next_in,t.next_in+i),n),1===t.state.wrap?t.adler=Rn(t.adler,e,i,n):2===t.state.wrap&&(t.adler=Nn(t.adler,e,i,n)),t.next_in+=i,t.total_in+=i,i)},wr=(t,e)=>{let n,r,i=t.max_chain_length,o=t.strstart,s=t.prev_length,a=t.nice_match;const c=t.strstart>t.w_size-sr?t.strstart-(t.w_size-sr):0,l=t.window,h=t.w_mask,u=t.prev,f=t.strstart+or;let d=l[o+s-1],p=l[o+s];t.prev_length>=t.good_match&&(i>>=2),a>t.lookahead&&(a=t.lookahead);do{if(n=e,l[n+s]===p&&l[n+s-1]===d&&l[n]===l[o]&&l[++n]===l[o+1]){o+=2,n++;do{}while(l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&l[++o]===l[++n]&&os){if(t.match_start=e,s=r,r>=a)break;d=l[o+s-1],p=l[o+s]}}}while((e=u[e&h])>c&&0!=--i);return s<=t.lookahead?s:t.lookahead},yr=t=>{const e=t.w_size;let n,r,i,o,s;do{if(o=t.window_size-t.lookahead-t.strstart,t.strstart>=e+(e-sr)){t.window.set(t.window.subarray(e,e+e),0),t.match_start-=e,t.strstart-=e,t.block_start-=e,r=t.hash_size,n=r;do{i=t.head[--n],t.head[n]=i>=e?i-e:0}while(--r);r=e,n=r;do{i=t.prev[--n],t.prev[n]=i>=e?i-e:0}while(--r);o+=e}if(0===t.strm.avail_in)break;if(r=br(t.strm,t.window,t.strstart+t.lookahead,o),t.lookahead+=r,t.lookahead+t.insert>=3)for(s=t.strstart-t.insert,t.ins_h=t.window[s],t.ins_h=dr(t,t.ins_h,t.window[s+1]);t.insert&&(t.ins_h=dr(t,t.ins_h,t.window[s+3-1]),t.prev[s&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=s,s++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead{let n,r;for(;;){if(t.lookahead=3&&(t.ins_h=dr(t,t.ins_h,t.window[t.strstart+3-1]),n=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==n&&t.strstart-n<=t.w_size-sr&&(t.match_length=wr(t,n)),t.match_length>=3)if(r=zn(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do{t.strstart++,t.ins_h=dr(t,t.ins_h,t.window[t.strstart+3-1]),n=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!=--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=dr(t,t.ins_h,t.window[t.strstart+1]);else r=zn(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(r&&(gr(t,!1),0===t.strm.avail_out))return 1}return t.insert=t.strstart<2?t.strstart:2,e===qn?(gr(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(gr(t,!1),0===t.strm.avail_out)?1:2},_r=(t,e)=>{let n,r,i;for(;;){if(t.lookahead=3&&(t.ins_h=dr(t,t.ins_h,t.window[t.strstart+3-1]),n=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==n&&t.prev_length4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-3,r=zn(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=i&&(t.ins_h=dr(t,t.ins_h,t.window[t.strstart+3-1]),n=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!=--t.prev_length);if(t.match_available=0,t.match_length=2,t.strstart++,r&&(gr(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if(r=zn(t,0,t.window[t.strstart-1]),r&&gr(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(r=zn(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===qn?(gr(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(gr(t,!1),0===t.strm.avail_out)?1:2};function kr(t,e,n,r,i){this.good_length=t,this.max_lazy=e,this.nice_length=n,this.max_chain=r,this.func=i}const Sr=[new kr(0,0,0,0,((t,e)=>{let n=65535;for(n>t.pending_buf_size-5&&(n=t.pending_buf_size-5);;){if(t.lookahead<=1){if(yr(t),0===t.lookahead&&e===Vn)return 1;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;const r=t.block_start+n;if((0===t.strstart||t.strstart>=r)&&(t.lookahead=t.strstart-r,t.strstart=r,gr(t,!1),0===t.strm.avail_out))return 1;if(t.strstart-t.block_start>=t.w_size-sr&&(gr(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===qn?(gr(t,!0),0===t.strm.avail_out?3:4):(t.strstart>t.block_start&&(gr(t,!1),t.strm.avail_out),1)})),new kr(4,4,8,4,xr),new kr(4,5,16,8,xr),new kr(4,6,32,32,xr),new kr(4,4,16,16,_r),new kr(8,16,32,32,_r),new kr(8,16,128,128,_r),new kr(8,32,128,256,_r),new kr(32,128,258,1024,_r),new kr(32,258,258,4096,_r)];function Cr(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=ir,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),fr(this.dyn_ltree),fr(this.dyn_dtree),fr(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),fr(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),fr(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const Er=t=>{if(!t||!t.state)return hr(t,Zn);t.total_in=t.total_out=0,t.data_type=rr;const e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap?42:cr,t.adler=2===e.wrap?0:1,e.last_flush=Vn,Fn(e),$n},Ar=t=>{const e=Er(t);var n;return e===$n&&((n=t.state).window_size=2*n.w_size,fr(n.head),n.max_lazy_match=Sr[n.level].max_lazy,n.good_match=Sr[n.level].good_length,n.nice_match=Sr[n.level].nice_length,n.max_chain_length=Sr[n.level].max_chain,n.strstart=0,n.block_start=0,n.lookahead=0,n.insert=0,n.match_length=n.prev_length=2,n.match_available=0,n.ins_h=0),e},Tr=(t,e,n,r,i,o)=>{if(!t)return Zn;let s=1;if(e===Kn&&(e=6),r<0?(s=0,r=-r):r>15&&(s=2,r-=16),i<1||i>9||n!==ir||r<8||r>15||e<0||e>9||o<0||o>er)return hr(t,Zn);8===r&&(r=9);const a=new Cr;return t.state=a,a.strm=t,a.wrap=s,a.gzhead=null,a.w_bits=r,a.w_size=1<{let n=e.length;if(!t||!t.state)return Zn;const r=t.state,i=r.wrap;if(2===i||1===i&&42!==r.status||r.lookahead)return Zn;if(1===i&&(t.adler=Rn(t.adler,e,n,0)),r.wrap=0,n>=r.w_size){0===i&&(fr(r.head),r.strstart=0,r.block_start=0,r.insert=0);let t=new Uint8Array(r.w_size);t.set(e.subarray(n-r.w_size,n),0),e=t,n=r.w_size}const o=t.avail_in,s=t.next_in,a=t.input;for(t.avail_in=n,t.next_in=0,t.input=e,yr(r);r.lookahead>=3;){let t=r.strstart,e=r.lookahead-2;do{r.ins_h=dr(r,r.ins_h,r.window[t+3-1]),r.prev[t&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=t,t++}while(--e);r.strstart=t,r.lookahead=2,yr(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=2,r.match_available=0,t.next_in=s,t.input=a,t.avail_in=o,r.wrap=i,$n},Mr={deflateInit:(t,e)=>Tr(t,e,ir,15,8,nr),deflateInit2:Tr,deflateReset:Ar,deflateResetKeep:Er,deflateSetHeader:(t,e)=>t&&t.state?2!==t.state.wrap?Zn:(t.state.gzhead=e,$n):Zn,deflate:(t,e)=>{let n,r;if(!t||!t.state||e>Wn||e<0)return t?hr(t,Zn):Zn;const i=t.state;if(!t.output||!t.input&&0!==t.avail_in||i.status===lr&&e!==qn)return hr(t,0===t.avail_out?Yn:Zn);i.strm=t;const o=i.last_flush;if(i.last_flush=e,42===i.status)if(2===i.wrap)t.adler=0,mr(i,31),mr(i,139),mr(i,8),i.gzhead?(mr(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),mr(i,255&i.gzhead.time),mr(i,i.gzhead.time>>8&255),mr(i,i.gzhead.time>>16&255),mr(i,i.gzhead.time>>24&255),mr(i,9===i.level?2:i.strategy>=Jn||i.level<2?4:0),mr(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(mr(i,255&i.gzhead.extra.length),mr(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(t.adler=Nn(t.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69):(mr(i,0),mr(i,0),mr(i,0),mr(i,0),mr(i,0),mr(i,9===i.level?2:i.strategy>=Jn||i.level<2?4:0),mr(i,3),i.status=cr);else{let e=ir+(i.w_bits-8<<4)<<8,n=-1;n=i.strategy>=Jn||i.level<2?0:i.level<6?1:6===i.level?2:3,e|=n<<6,0!==i.strstart&&(e|=32),e+=31-e%31,i.status=cr,vr(i,e),0!==i.strstart&&(vr(i,t.adler>>>16),vr(i,65535&t.adler)),t.adler=1}if(69===i.status)if(i.gzhead.extra){for(n=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>n&&(t.adler=Nn(t.adler,i.pending_buf,i.pending-n,n)),pr(t),n=i.pending,i.pending!==i.pending_buf_size));)mr(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>n&&(t.adler=Nn(t.adler,i.pending_buf,i.pending-n,n)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=73)}else i.status=73;if(73===i.status)if(i.gzhead.name){n=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>n&&(t.adler=Nn(t.adler,i.pending_buf,i.pending-n,n)),pr(t),n=i.pending,i.pending===i.pending_buf_size)){r=1;break}r=i.gzindexn&&(t.adler=Nn(t.adler,i.pending_buf,i.pending-n,n)),0===r&&(i.gzindex=0,i.status=91)}else i.status=91;if(91===i.status)if(i.gzhead.comment){n=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>n&&(t.adler=Nn(t.adler,i.pending_buf,i.pending-n,n)),pr(t),n=i.pending,i.pending===i.pending_buf_size)){r=1;break}r=i.gzindexn&&(t.adler=Nn(t.adler,i.pending_buf,i.pending-n,n)),0===r&&(i.status=ar)}else i.status=ar;if(i.status===ar&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&pr(t),i.pending+2<=i.pending_buf_size&&(mr(i,255&t.adler),mr(i,t.adler>>8&255),t.adler=0,i.status=cr)):i.status=cr),0!==i.pending){if(pr(t),0===t.avail_out)return i.last_flush=-1,$n}else if(0===t.avail_in&&ur(e)<=ur(o)&&e!==qn)return hr(t,Yn);if(i.status===lr&&0!==t.avail_in)return hr(t,Yn);if(0!==t.avail_in||0!==i.lookahead||e!==Vn&&i.status!==lr){let n=i.strategy===Jn?((t,e)=>{let n;for(;;){if(0===t.lookahead&&(yr(t),0===t.lookahead)){if(e===Vn)return 1;break}if(t.match_length=0,n=zn(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,n&&(gr(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===qn?(gr(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(gr(t,!1),0===t.strm.avail_out)?1:2})(i,e):i.strategy===tr?((t,e)=>{let n,r,i,o;const s=t.window;for(;;){if(t.lookahead<=or){if(yr(t),t.lookahead<=or&&e===Vn)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(i=t.strstart-1,r=s[i],r===s[++i]&&r===s[++i]&&r===s[++i])){o=t.strstart+or;do{}while(r===s[++i]&&r===s[++i]&&r===s[++i]&&r===s[++i]&&r===s[++i]&&r===s[++i]&&r===s[++i]&&r===s[++i]&&it.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(n=zn(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(n=zn(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),n&&(gr(t,!1),0===t.strm.avail_out))return 1}return t.insert=0,e===qn?(gr(t,!0),0===t.strm.avail_out?3:4):t.last_lit&&(gr(t,!1),0===t.strm.avail_out)?1:2})(i,e):Sr[i.level].func(i,e);if(3!==n&&4!==n||(i.status=lr),1===n||3===n)return 0===t.avail_out&&(i.last_flush=-1),$n;if(2===n&&(e===jn?Hn(i):e!==Wn&&(Dn(i,0,0,!1),e===Un&&(fr(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),pr(t),0===t.avail_out))return i.last_flush=-1,$n}return e!==qn?$n:i.wrap<=0?Gn:(2===i.wrap?(mr(i,255&t.adler),mr(i,t.adler>>8&255),mr(i,t.adler>>16&255),mr(i,t.adler>>24&255),mr(i,255&t.total_in),mr(i,t.total_in>>8&255),mr(i,t.total_in>>16&255),mr(i,t.total_in>>24&255)):(vr(i,t.adler>>>16),vr(i,65535&t.adler)),pr(t),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?$n:Gn)},deflateEnd:t=>{if(!t||!t.state)return Zn;const e=t.state.status;return 42!==e&&69!==e&&73!==e&&91!==e&&e!==ar&&e!==cr&&e!==lr?hr(t,Zn):(t.state=null,e===cr?hr(t,Xn):$n)},deflateSetDictionary:Lr,deflateInfo:\"pako deflate (from Nodeca project)\"};const Rr=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var Ir=function(t){const e=Array.prototype.slice.call(arguments,1);for(;e.length;){const n=e.shift();if(n){if(\"object\"!=typeof n)throw new TypeError(n+\"must be non-object\");for(const e in n)Rr(n,e)&&(t[e]=n[e])}}return t},Nr=t=>{let e=0;for(let n=0,r=t.length;n=252?6:Xv>=248?5:Xv>=240?4:Xv>=224?3:Xv>=192?2:1;Or[254]=Or[254]=1;var Fr=t=>{if(\"function\"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(t);let e,n,r,i,o,s=t.length,a=0;for(i=0;i>>6,e[o++]=128|63&n):n<65536?(e[o++]=224|n>>>12,e[o++]=128|n>>>6&63,e[o++]=128|63&n):(e[o++]=240|n>>>18,e[o++]=128|n>>>12&63,e[o++]=128|n>>>6&63,e[o++]=128|63&n);return e},Dr=(t,e)=>{const n=e||t.length;if(\"function\"==typeof TextDecoder&&TextDecoder.prototype.decode)return(new TextDecoder).decode(t.subarray(0,e));let r,i;const o=new Array(2*n);for(i=0,r=0;r4)o[i++]=65533,r+=s-1;else{for(e&=2===s?31:3===s?15:7;s>1&&r1?o[i++]=65533:e<65536?o[i++]=e:(e-=65536,o[i++]=55296|e>>10&1023,o[i++]=56320|1023&e)}}return((t,e)=>{if(e<65534&&t.subarray&&Pr)return String.fromCharCode.apply(null,t.length===e?t:t.subarray(0,e));let n=\"\";for(let r=0;r{(e=e||t.length)>t.length&&(e=t.length);let n=e-1;for(;n>=0&&128==(192&t[n]);)n--;return n<0||0===n?e:n+Or[t[n]]>e?n:e};var zr=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0};const Hr=Object.prototype.toString,{Z_NO_FLUSH:Vr,Z_SYNC_FLUSH:jr,Z_FULL_FLUSH:Ur,Z_FINISH:qr,Z_OK:Wr,Z_STREAM_END:$r,Z_DEFAULT_COMPRESSION:Gr,Z_DEFAULT_STRATEGY:Zr,Z_DEFLATED:Xr}=On;function Yr(t){this.options=Ir({level:Gr,method:Xr,chunkSize:16384,windowBits:15,memLevel:8,strategy:Zr},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new zr,this.strm.avail_out=0;let n=Mr.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(n!==Wr)throw new Error(Pn[n]);if(e.header&&Mr.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t=\"string\"==typeof e.dictionary?Fr(e.dictionary):\"[object ArrayBuffer]\"===Hr.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,n=Mr.deflateSetDictionary(this.strm,t),n!==Wr)throw new Error(Pn[n]);this._dict_set=!0}}function Kr(t,e){const n=new Yr(e);if(n.push(t,!0),n.err)throw n.msg||Pn[n.err];return n.result}Yr.prototype.push=function(t,e){const n=this.strm,r=this.options.chunkSize;let i,o;if(this.ended)return!1;for(o=e===~~e?e:!0===e?qr:Vr,\"string\"==typeof t?n.input=Fr(t):\"[object ArrayBuffer]\"===Hr.call(t)?n.input=new Uint8Array(t):n.input=t,n.next_in=0,n.avail_in=n.input.length;;)if(0===n.avail_out&&(n.output=new Uint8Array(r),n.next_out=0,n.avail_out=r),(o===jr||o===Ur)&&n.avail_out<=6)this.onData(n.output.subarray(0,n.next_out)),n.avail_out=0;else{if(i=Mr.deflate(n,o),i===$r)return n.next_out>0&&this.onData(n.output.subarray(0,n.next_out)),i=Mr.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===Wr;if(0!==n.avail_out){if(o>0&&n.next_out>0)this.onData(n.output.subarray(0,n.next_out)),n.avail_out=0;else if(0===n.avail_in)break}else this.onData(n.output)}return!0},Yr.prototype.onData=function(t){this.chunks.push(t)},Yr.prototype.onEnd=function(t){t===Wr&&(this.result=Nr(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var Qr=function(t,e){return(e=e||{}).raw=!0,Kr(t,e)},Jr=function(t,e){return(e=e||{}).gzip=!0,Kr(t,e)},ti={Deflate:Yr,deflate:Kr,deflateRaw:Qr,gzip:Jr,constants:On};var ei=function(t,e){let n,r,i,o,s,a,c,l,h,u,f,d,p,g,m,v,b,w,y,x,_,k,S,C;const E=t.state;n=t.next_in,S=t.input,r=n+(t.avail_in-5),i=t.next_out,C=t.output,o=i-(e-t.avail_out),s=i+(t.avail_out-257),a=E.dmax,c=E.wsize,l=E.whave,h=E.wnext,u=E.window,f=E.hold,d=E.bits,p=E.lencode,g=E.distcode,m=(1<>>24,f>>>=w,d-=w,w=b>>>16&255,0===w)C[i++]=65535&b;else{if(!(16&w)){if(0==(64&w)){b=p[(65535&b)+(f&(1<>>=w,d-=w),d<15&&(f+=S[n++]<>>24,f>>>=w,d-=w,w=b>>>16&255,!(16&w)){if(0==(64&w)){b=g[(65535&b)+(f&(1<a){t.msg=\"invalid distance too far back\",E.mode=30;break t}if(f>>>=w,d-=w,w=i-o,x>w){if(w=x-w,w>l&&E.sane){t.msg=\"invalid distance too far back\",E.mode=30;break t}if(_=0,k=u,0===h){if(_+=c-w,w2;)C[i++]=k[_++],C[i++]=k[_++],C[i++]=k[_++],y-=3;y&&(C[i++]=k[_++],y>1&&(C[i++]=k[_++]))}else{_=i-x;do{C[i++]=C[_++],C[i++]=C[_++],C[i++]=C[_++],y-=3}while(y>2);y&&(C[i++]=C[_++],y>1&&(C[i++]=C[_++]))}break}}break}}while(n>3,n-=y,d-=y<<3,f&=(1<{const c=a.bits;let l,h,u,f,d,p,g=0,m=0,v=0,b=0,w=0,y=0,x=0,_=0,k=0,S=0,C=null,E=0;const A=new Uint16Array(16),T=new Uint16Array(16);let L,M,R,I=null,N=0;for(g=0;g<=ni;g++)A[g]=0;for(m=0;m=1&&0===A[b];b--);if(w>b&&(w=b),0===b)return i[o++]=20971520,i[o++]=20971520,a.bits=1,0;for(v=1;v0&&(0===t||1!==b))return-1;for(T[1]=0,g=1;g852||2===t&&k>592)return 1;for(;;){L=g-x,s[m]p?(M=I[N+s[m]],R=C[E+s[m]]):(M=96,R=0),l=1<>x)+h]=L<<24|M<<16|R|0}while(0!==h);for(l=1<>=1;if(0!==l?(S&=l-1,S+=l):S=0,m++,0==--A[g]){if(g===b)break;g=e[n+s[m]]}if(g>w&&(S&f)!==u){for(0===x&&(x=w),d+=v,y=g-x,_=1<852||2===t&&k>592)return 1;u=S&f,i[u]=w<<24|y<<16|d-o|0}}return 0!==S&&(i[d+S]=g-x<<24|64<<16|0),a.bits=w,0};const{Z_FINISH:ci,Z_BLOCK:li,Z_TREES:hi,Z_OK:ui,Z_STREAM_END:fi,Z_NEED_DICT:di,Z_STREAM_ERROR:pi,Z_DATA_ERROR:gi,Z_MEM_ERROR:mi,Z_BUF_ERROR:vi,Z_DEFLATED:bi}=On,wi=12,yi=30,xi=t=>(t>>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24);function _i(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const ki=t=>{if(!t||!t.state)return pi;const e=t.state;return t.total_in=t.total_out=e.total=0,t.msg=\"\",e.wrap&&(t.adler=1&e.wrap),e.mode=1,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new Int32Array(852),e.distcode=e.distdyn=new Int32Array(592),e.sane=1,e.back=-1,ui},Si=t=>{if(!t||!t.state)return pi;const e=t.state;return e.wsize=0,e.whave=0,e.wnext=0,ki(t)},Ci=(t,e)=>{let n;if(!t||!t.state)return pi;const r=t.state;return e<0?(n=0,e=-e):(n=1+(e>>4),e<48&&(e&=15)),e&&(e<8||e>15)?pi:(null!==r.window&&r.wbits!==e&&(r.window=null),r.wrap=n,r.wbits=e,Si(t))},Ei=(t,e)=>{if(!t)return pi;const n=new _i;t.state=n,n.window=null;const r=Ci(t,e);return r!==ui&&(t.state=null),r};let Ai,Ti,Li=!0;const Mi=t=>{if(Li){Ai=new Int32Array(512),Ti=new Int32Array(32);let e=0;for(;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(ai(1,t.lens,0,288,Ai,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;ai(2,t.lens,0,32,Ti,0,t.work,{bits:5}),Li=!1}t.lencode=Ai,t.lenbits=9,t.distcode=Ti,t.distbits=5},Ri=(t,e,n,r)=>{let i;const o=t.state;return null===o.window&&(o.wsize=1<=o.wsize?(o.window.set(e.subarray(n-o.wsize,n),0),o.wnext=0,o.whave=o.wsize):(i=o.wsize-o.wnext,i>r&&(i=r),o.window.set(e.subarray(n-r,n-r+i),o.wnext),(r-=i)?(o.window.set(e.subarray(n-r,n),0),o.wnext=r,o.whave=o.wsize):(o.wnext+=i,o.wnext===o.wsize&&(o.wnext=0),o.whave{let n,r,i,o,s,a,c,l,h,u,f,d,p,g,m,v,b,w,y,x,_,k,S=0;const C=new Uint8Array(4);let E,A;const T=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(!t||!t.state||!t.output||!t.input&&0!==t.avail_in)return pi;n=t.state,n.mode===wi&&(n.mode=13),s=t.next_out,i=t.output,c=t.avail_out,o=t.next_in,r=t.input,a=t.avail_in,l=n.hold,h=n.bits,u=a,f=c,k=ui;t:for(;;)switch(n.mode){case 1:if(0===n.wrap){n.mode=13;break}for(;h<16;){if(0===a)break t;a--,l+=r[o++]<>>8&255,n.check=Nn(n.check,C,2,0),l=0,h=0,n.mode=2;break}if(n.flags=0,n.head&&(n.head.done=!1),!(1&n.wrap)||(((255&l)<<8)+(l>>8))%31){t.msg=\"incorrect header check\",n.mode=yi;break}if((15&l)!==bi){t.msg=\"unknown compression method\",n.mode=yi;break}if(l>>>=4,h-=4,_=8+(15&l),0===n.wbits)n.wbits=_;else if(_>n.wbits){t.msg=\"invalid window size\",n.mode=yi;break}n.dmax=1<>8&1),512&n.flags&&(C[0]=255&l,C[1]=l>>>8&255,n.check=Nn(n.check,C,2,0)),l=0,h=0,n.mode=3;case 3:for(;h<32;){if(0===a)break t;a--,l+=r[o++]<>>8&255,C[2]=l>>>16&255,C[3]=l>>>24&255,n.check=Nn(n.check,C,4,0)),l=0,h=0,n.mode=4;case 4:for(;h<16;){if(0===a)break t;a--,l+=r[o++]<>8),512&n.flags&&(C[0]=255&l,C[1]=l>>>8&255,n.check=Nn(n.check,C,2,0)),l=0,h=0,n.mode=5;case 5:if(1024&n.flags){for(;h<16;){if(0===a)break t;a--,l+=r[o++]<>>8&255,n.check=Nn(n.check,C,2,0)),l=0,h=0}else n.head&&(n.head.extra=null);n.mode=6;case 6:if(1024&n.flags&&(d=n.length,d>a&&(d=a),d&&(n.head&&(_=n.head.extra_len-n.length,n.head.extra||(n.head.extra=new Uint8Array(n.head.extra_len)),n.head.extra.set(r.subarray(o,o+d),_)),512&n.flags&&(n.check=Nn(n.check,r,d,o)),a-=d,o+=d,n.length-=d),n.length))break t;n.length=0,n.mode=7;case 7:if(2048&n.flags){if(0===a)break t;d=0;do{_=r[o+d++],n.head&&_&&n.length<65536&&(n.head.name+=String.fromCharCode(_))}while(_&&d>9&1,n.head.done=!0),t.adler=n.check=0,n.mode=wi;break;case 10:for(;h<32;){if(0===a)break t;a--,l+=r[o++]<>>=7&h,h-=7&h,n.mode=27;break}for(;h<3;){if(0===a)break t;a--,l+=r[o++]<>>=1,h-=1,3&l){case 0:n.mode=14;break;case 1:if(Mi(n),n.mode=20,e===hi){l>>>=2,h-=2;break t}break;case 2:n.mode=17;break;case 3:t.msg=\"invalid block type\",n.mode=yi}l>>>=2,h-=2;break;case 14:for(l>>>=7&h,h-=7&h;h<32;){if(0===a)break t;a--,l+=r[o++]<>>16^65535)){t.msg=\"invalid stored block lengths\",n.mode=yi;break}if(n.length=65535&l,l=0,h=0,n.mode=15,e===hi)break t;case 15:n.mode=16;case 16:if(d=n.length,d){if(d>a&&(d=a),d>c&&(d=c),0===d)break t;i.set(r.subarray(o,o+d),s),a-=d,o+=d,c-=d,s+=d,n.length-=d;break}n.mode=wi;break;case 17:for(;h<14;){if(0===a)break t;a--,l+=r[o++]<>>=5,h-=5,n.ndist=1+(31&l),l>>>=5,h-=5,n.ncode=4+(15&l),l>>>=4,h-=4,n.nlen>286||n.ndist>30){t.msg=\"too many length or distance symbols\",n.mode=yi;break}n.have=0,n.mode=18;case 18:for(;n.have>>=3,h-=3}for(;n.have<19;)n.lens[T[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,E={bits:n.lenbits},k=ai(0,n.lens,0,19,n.lencode,0,n.work,E),n.lenbits=E.bits,k){t.msg=\"invalid code lengths set\",n.mode=yi;break}n.have=0,n.mode=19;case 19:for(;n.have>>24,v=S>>>16&255,b=65535&S,!(m<=h);){if(0===a)break t;a--,l+=r[o++]<>>=m,h-=m,n.lens[n.have++]=b;else{if(16===b){for(A=m+2;h>>=m,h-=m,0===n.have){t.msg=\"invalid bit length repeat\",n.mode=yi;break}_=n.lens[n.have-1],d=3+(3&l),l>>>=2,h-=2}else if(17===b){for(A=m+3;h>>=m,h-=m,_=0,d=3+(7&l),l>>>=3,h-=3}else{for(A=m+7;h>>=m,h-=m,_=0,d=11+(127&l),l>>>=7,h-=7}if(n.have+d>n.nlen+n.ndist){t.msg=\"invalid bit length repeat\",n.mode=yi;break}for(;d--;)n.lens[n.have++]=_}}if(n.mode===yi)break;if(0===n.lens[256]){t.msg=\"invalid code -- missing end-of-block\",n.mode=yi;break}if(n.lenbits=9,E={bits:n.lenbits},k=ai(1,n.lens,0,n.nlen,n.lencode,0,n.work,E),n.lenbits=E.bits,k){t.msg=\"invalid literal/lengths set\",n.mode=yi;break}if(n.distbits=6,n.distcode=n.distdyn,E={bits:n.distbits},k=ai(2,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,E),n.distbits=E.bits,k){t.msg=\"invalid distances set\",n.mode=yi;break}if(n.mode=20,e===hi)break t;case 20:n.mode=21;case 21:if(a>=6&&c>=258){t.next_out=s,t.avail_out=c,t.next_in=o,t.avail_in=a,n.hold=l,n.bits=h,ei(t,f),s=t.next_out,i=t.output,c=t.avail_out,o=t.next_in,r=t.input,a=t.avail_in,l=n.hold,h=n.bits,n.mode===wi&&(n.back=-1);break}for(n.back=0;S=n.lencode[l&(1<>>24,v=S>>>16&255,b=65535&S,!(m<=h);){if(0===a)break t;a--,l+=r[o++]<>w)],m=S>>>24,v=S>>>16&255,b=65535&S,!(w+m<=h);){if(0===a)break t;a--,l+=r[o++]<>>=w,h-=w,n.back+=w}if(l>>>=m,h-=m,n.back+=m,n.length=b,0===v){n.mode=26;break}if(32&v){n.back=-1,n.mode=wi;break}if(64&v){t.msg=\"invalid literal/length code\",n.mode=yi;break}n.extra=15&v,n.mode=22;case 22:if(n.extra){for(A=n.extra;h>>=n.extra,h-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=23;case 23:for(;S=n.distcode[l&(1<>>24,v=S>>>16&255,b=65535&S,!(m<=h);){if(0===a)break t;a--,l+=r[o++]<>w)],m=S>>>24,v=S>>>16&255,b=65535&S,!(w+m<=h);){if(0===a)break t;a--,l+=r[o++]<>>=w,h-=w,n.back+=w}if(l>>>=m,h-=m,n.back+=m,64&v){t.msg=\"invalid distance code\",n.mode=yi;break}n.offset=b,n.extra=15&v,n.mode=24;case 24:if(n.extra){for(A=n.extra;h>>=n.extra,h-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){t.msg=\"invalid distance too far back\",n.mode=yi;break}n.mode=25;case 25:if(0===c)break t;if(d=f-c,n.offset>d){if(d=n.offset-d,d>n.whave&&n.sane){t.msg=\"invalid distance too far back\",n.mode=yi;break}d>n.wnext?(d-=n.wnext,p=n.wsize-d):p=n.wnext-d,d>n.length&&(d=n.length),g=n.window}else g=i,p=s-n.offset,d=n.length;d>c&&(d=c),c-=d,n.length-=d;do{i[s++]=g[p++]}while(--d);0===n.length&&(n.mode=21);break;case 26:if(0===c)break t;i[s++]=n.length,c--,n.mode=21;break;case 27:if(n.wrap){for(;h<32;){if(0===a)break t;a--,l|=r[o++]<Ei(t,15),inflateInit2:Ei,inflate:Ii,inflateEnd:t=>{if(!t||!t.state)return pi;let e=t.state;return e.window&&(e.window=null),t.state=null,ui},inflateGetHeader:(t,e)=>{if(!t||!t.state)return pi;const n=t.state;return 0==(2&n.wrap)?pi:(n.head=e,e.done=!1,ui)},inflateSetDictionary:(t,e)=>{const n=e.length;let r,i,o;return t&&t.state?(r=t.state,0!==r.wrap&&11!==r.mode?pi:11===r.mode&&(i=1,i=Rn(i,e,n,0),i!==r.check)?gi:(o=Ri(t,e,n,n),o?(r.mode=31,mi):(r.havedict=1,ui))):pi},inflateInfo:\"pako inflate (from Nodeca project)\"};var Pi=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1};const Oi=Object.prototype.toString,{Z_NO_FLUSH:Fi,Z_FINISH:Di,Z_OK:Bi,Z_STREAM_END:zi,Z_NEED_DICT:Hi,Z_STREAM_ERROR:Vi,Z_DATA_ERROR:ji,Z_MEM_ERROR:Ui}=On;function qi(t){this.options=Ir({chunkSize:65536,windowBits:15,to:\"\"},t||{});const e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),!(e.windowBits>=0&&e.windowBits<16)||t&&t.windowBits||(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&0==(15&e.windowBits)&&(e.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new zr,this.strm.avail_out=0;let n=Ni.inflateInit2(this.strm,e.windowBits);if(n!==Bi)throw new Error(Pn[n]);if(this.header=new Pi,Ni.inflateGetHeader(this.strm,this.header),e.dictionary&&(\"string\"==typeof e.dictionary?e.dictionary=Fr(e.dictionary):\"[object ArrayBuffer]\"===Oi.call(e.dictionary)&&(e.dictionary=new Uint8Array(e.dictionary)),e.raw&&(n=Ni.inflateSetDictionary(this.strm,e.dictionary),n!==Bi)))throw new Error(Pn[n])}function Wi(t,e){const n=new qi(e);if(n.push(t),n.err)throw n.msg||Pn[n.err];return n.result}qi.prototype.push=function(t,e){const n=this.strm,r=this.options.chunkSize,i=this.options.dictionary;let o,s,a;if(this.ended)return!1;for(s=e===~~e?e:!0===e?Di:Fi,\"[object ArrayBuffer]\"===Oi.call(t)?n.input=new Uint8Array(t):n.input=t,n.next_in=0,n.avail_in=n.input.length;;){for(0===n.avail_out&&(n.output=new Uint8Array(r),n.next_out=0,n.avail_out=r),o=Ni.inflate(n,s),o===Hi&&i&&(o=Ni.inflateSetDictionary(n,i),o===Bi?o=Ni.inflate(n,s):o===ji&&(o=Hi));n.avail_in>0&&o===zi&&n.state.wrap>0&&0!==t[n.next_in];)Ni.inflateReset(n),o=Ni.inflate(n,s);switch(o){case Vi:case ji:case Hi:case Ui:return this.onEnd(o),this.ended=!0,!1}if(a=n.avail_out,n.next_out&&(0===n.avail_out||o===zi))if(\"string\"===this.options.to){let t=Br(n.output,n.next_out),e=n.next_out-t,i=Dr(n.output,t);n.next_out=e,n.avail_out=r-e,e&&n.output.set(n.output.subarray(t,t+e),0),this.onData(i)}else this.onData(n.output.length===n.next_out?n.output:n.output.subarray(0,n.next_out));if(o!==Bi||0!==a){if(o===zi)return o=Ni.inflateEnd(this.strm),this.onEnd(o),this.ended=!0,!0;if(0===n.avail_in)break}}return!0},qi.prototype.onData=function(t){this.chunks.push(t)},qi.prototype.onEnd=function(t){t===Bi&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=Nr(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var $i=function(t,e){return(e=e||{}).raw=!0,Wi(t,e)},Gi={Inflate:qi,inflate:Wi,inflateRaw:$i,ungzip:Wi,constants:On};const{Deflate:Zi,deflate:Xi,deflateRaw:Yi,gzip:Ki}=ti,{Inflate:Qi,inflate:Ji,inflateRaw:to,ungzip:eo}=Gi;var no={Deflate:Zi,deflate:Xi,deflateRaw:Yi,gzip:Ki,Inflate:Qi,inflate:Ji,inflateRaw:to,ungzip:eo,constants:On};no.deflateRaw,no.deflate,no.inflateRaw;const ro=no.inflate;no.gzip;function io(t,e){const n=[];let r=0,i=0;for(e=e||t.byteLength-18;r100?co(new Uint8Array(t.buffer,t.byteOffset+e,i),n,r):function(t,e,n,r,i){for(let o=0;o=0){i=atob(i);const t=new Uint8Array(i.length);for(let e=0;e0?no.ungzip(t):t,n}return decodeURIComponent(i)}const ho=function(t,e){if(0!==t.length){var n=Math.floor(t.length*((100-e)/100));return 0===n?(t.sort((function(t,e){return e-t})),t[n]):function(t,e){var n,r=new po;for(n=0;nr.content[0])&&(r.content.length===e&&r.pop(),r.push(i))}return r.content[0]}(t,n)}},uo=function(t,e,n){return Math.min(Math.max(t,e),n)},fo=function(t){return Math.log(t)/Math.LN2};function po(){this.content=[]}function go(t,e){return Math.random()*(e-t)+t}po.prototype={push:function(t){this.content.push(t),this.bubbleUp(this.content.length-1)},pop:function(){var t=this.content[0],e=this.content.pop();return this.content.length>0&&(this.content[0]=e,this.sinkDown(0)),t},remove:function(t){for(var e=this.content.length,n=0;n0;){var r=Math.floor((t+1)/2)-1,i=this.content[r];if(n>=i)break;this.content[r]=e,this.content[t]=i,t=r}},sinkDown:function(t){for(var e=this.content.length,n=this.content[t],r=n;;){var i=2*(t+1),o=i-1,s=null;if(o{let t=[];for(let e=1;e>=.5;e-=.1)for(let n=0;n<1;n+=1/28){const r=\"rgb(\"+mo.hsvToRgb(n,1,e).join(\",\")+\")\";t.push(r)}return t.pop(),t.push(mo.rgbColor(16,16,16)),t},rgbToHex:function(t){return(t=t.match(/^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i))&&4===t.length?\"#\"+(\"0\"+parseInt(t[1],10).toString(16)).slice(-2)+(\"0\"+parseInt(t[2],10).toString(16)).slice(-2)+(\"0\"+parseInt(t[3],10).toString(16)).slice(-2):\"\"},hexToRgb:function(t){var e=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(t);if(null!==e)return\"rgb(\"+parseInt(e[1],16)+\",\"+parseInt(e[2],16)+\",\"+parseInt(e[3],16)+\")\"},hsvToRgb:function(t,e,n){var r,i,o,s=Math.floor(6*t),a=6*t-s,c=n*(1-e),l=n*(1-a*e),h=n*(1-(1-a)*e);switch(s%6){case 0:r=n,i=h,o=c;break;case 1:r=l,i=n,o=c;break;case 2:r=c,i=n,o=h;break;case 3:r=c,i=l,o=n;break;case 4:r=h,i=c,o=n;break;case 5:r=n,i=c,o=l}return[Math.floor(255*r),Math.floor(255*i),Math.floor(255*o)]},hslToRgb:function(t,e,n){var r,i,o;if(0===e)r=i=o=n;else{var s=n<.5?n*(1+e):n+e-n*e,a=2*n-s;r=mo.hue2rgb(a,s,t+1/3),i=mo.hue2rgb(a,s,t),o=mo.hue2rgb(a,s,t-1/3)}return[255*r,255*i,255*o]},hue2rgb:(t,e,n)=>(n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t),rgbaColor:function(t,e,n,r){return\"rgba(\"+(t=uo(t,0,255))+\",\"+(e=uo(e,0,255))+\",\"+(n=uo(n,0,255))+\",\"+(r=uo(r,0,1))+\")\"},rgbColor:function(t,e,n){return\"rgb(\"+(t=uo(t,0,255))+\",\"+(e=uo(e,0,255))+\",\"+(n=uo(n,0,255))+\")\"},greyScale:function(t){var e=uo(t,0,255);return\"rgb(\"+e+\",\"+e+\",\"+e+\")\"},randomGrey:function(t,e){t=uo(t,0,255),e=uo(e,0,255);var n=Math.round(go(t,e)).toString(10);return\"rgb(\"+n+\",\"+n+\",\"+n+\")\"},randomRGB:function(t,e){return t=uo(t,0,255),e=uo(e,0,255),\"rgb(\"+Math.round(go(t,e)).toString(10)+\",\"+Math.round(go(t,e)).toString(10)+\",\"+Math.round(go(t,e)).toString(10)+\")\"},randomRGBConstantAlpha:function(t,e,n){return t=uo(t,0,255),e=uo(e,0,255),\"rgba(\"+Math.round(go(t,e)).toString(10)+\",\"+Math.round(go(t,e)).toString(10)+\",\"+Math.round(go(t,e)).toString(10)+\",\"+n+\")\"},addAlpha:function(t,e){if(\"0\"===t||\".\"===t)t=\"rgb(0,0,0)\";else{const e=this.colorNameToHex(t);e&&(t=e)}var n=/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t);if(t.startsWith(\"rgba\")){const n=t.lastIndexOf(\",\");return t.substring(0,n+1)+e.toString()+\")\"}return n&&(t=mo.hexToRgb(t)),t.startsWith(\"rgb\")?t.replace(\"rgb\",\"rgba\").replace(\")\",\", \"+e+\")\"):(console.log(t+\" is not an rgb style string\"),t)},rgbComponents:function(t){if(\"0\"===t||\".\"===t)return[0,0,0];if(/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t))t=mo.hexToRgb(t);else if(!t.startsWith(\"rgb\")){const e=this.colorNameToHex(t);t=this.hexToRgb(e)}if(t.startsWith(\"rgb(\"))return t.substring(4,t.length-1).split(\",\").map((t=>Number.parseInt(t.trim())));if(t.startsWith(\"rgba(\"))return t.substring(5,t.length-1).split(\",\").map(((t,e)=>(t=t.trim(),3===e?Number.parseFloat(t):Number.parseInt(t))));throw Error(\"Unrecognized color string: color\")},getCompositeColor:function(t,e,n){return\"rgb(\"+Math.floor(n*e[0]+(1-n)*t[0])+\",\"+Math.floor(n*e[1]+(1-n)*t[1])+\",\"+Math.floor(n*e[2]+(1-n)*t[2])+\")\"},createColorString:function(t){return(t=function(t){return void 0===t||((t.startsWith(\"'\")||t.startsWith('\"'))&&(t=t.substring(1)),(t.endsWith(\"'\")||t.endsWith('\"'))&&(t=t.substring(0,t.length-1))),t}(t)).includes(\",\")?t.startsWith(\"rgb\")?t:\"rgb(\"+t+\")\":t},darkenLighten:function(t,e){let n,r=this.colorNameToHex(t);n=r?mo.hexToRgb(r):t.startsWith(\"rgb(\")?t:mo.hexToRgb(t);const i=n.replace(\")\",\"\").substring(4).split(\",\"),o=Math.max(0,Math.min(255,Number.parseInt(i[0].trim())+e)),s=Math.max(0,Math.min(255,Number.parseInt(i[1].trim())+e)),a=Math.max(0,Math.min(255,Number.parseInt(i[2].trim())+e));return\"rgb(\"+o.toString()+\",\"+s.toString()+\",\"+a.toString()+\")\"},colorNameToHex:function(t){return{aliceblue:\"#f0f8ff\",antiquewhite:\"#faebd7\",aqua:\"#00ffff\",aquamarine:\"#7fffd4\",azure:\"#f0ffff\",beige:\"#f5f5dc\",bisque:\"#ffe4c4\",black:\"#000000\",blanchedalmond:\"#ffebcd\",blue:\"#0000ff\",blueviolet:\"#8a2be2\",brown:\"#a52a2a\",burlywood:\"#deb887\",cadetblue:\"#5f9ea0\",chartreuse:\"#7fff00\",chocolate:\"#d2691e\",coral:\"#ff7f50\",cornflowerblue:\"#6495ed\",cornsilk:\"#fff8dc\",crimson:\"#dc143c\",cyan:\"#00ffff\",darkblue:\"#00008b\",darkcyan:\"#008b8b\",darkgoldenrod:\"#b8860b\",darkgray:\"#a9a9a9\",darkgreen:\"#006400\",darkkhaki:\"#bdb76b\",darkmagenta:\"#8b008b\",darkolivegreen:\"#556b2f\",darkorange:\"#ff8c00\",darkorchid:\"#9932cc\",darkred:\"#8b0000\",darksalmon:\"#e9967a\",darkseagreen:\"#8fbc8f\",darkslateblue:\"#483d8b\",darkslategray:\"#2f4f4f\",darkturquoise:\"#00ced1\",darkviolet:\"#9400d3\",deeppink:\"#ff1493\",deepskyblue:\"#00bfff\",dimgray:\"#696969\",dodgerblue:\"#1e90ff\",firebrick:\"#b22222\",floralwhite:\"#fffaf0\",forestgreen:\"#228b22\",fuchsia:\"#ff00ff\",gainsboro:\"#dcdcdc\",ghostwhite:\"#f8f8ff\",gold:\"#ffd700\",goldenrod:\"#daa520\",gray:\"#808080\",green:\"#008000\",greenyellow:\"#adff2f\",honeydew:\"#f0fff0\",hotpink:\"#ff69b4\",\"indianred \":\"#cd5c5c\",\"indigo \":\"#4b0082\",ivory:\"#fffff0\",khaki:\"#f0e68c\",lavender:\"#e6e6fa\",lavenderblush:\"#fff0f5\",lawngreen:\"#7cfc00\",lemonchiffon:\"#fffacd\",lightblue:\"#add8e6\",lightcoral:\"#f08080\",lightcyan:\"#e0ffff\",lightgoldenrodyellow:\"#fafad2\",lightgrey:\"#d3d3d3\",lightgreen:\"#90ee90\",lightpink:\"#ffb6c1\",lightsalmon:\"#ffa07a\",lightseagreen:\"#20b2aa\",lightskyblue:\"#87cefa\",lightslategray:\"#778899\",lightsteelblue:\"#b0c4de\",lightyellow:\"#ffffe0\",lime:\"#00ff00\",limegreen:\"#32cd32\",linen:\"#faf0e6\",magenta:\"#ff00ff\",maroon:\"#800000\",mediumaquamarine:\"#66cdaa\",mediumblue:\"#0000cd\",mediumorchid:\"#ba55d3\",mediumpurple:\"#9370d8\",mediumseagreen:\"#3cb371\",mediumslateblue:\"#7b68ee\",mediumspringgreen:\"#00fa9a\",mediumturquoise:\"#48d1cc\",mediumvioletred:\"#c71585\",midnightblue:\"#191970\",mintcream:\"#f5fffa\",mistyrose:\"#ffe4e1\",moccasin:\"#ffe4b5\",navajowhite:\"#ffdead\",navy:\"#000080\",oldlace:\"#fdf5e6\",olive:\"#808000\",olivedrab:\"#6b8e23\",orange:\"#ffa500\",orangered:\"#ff4500\",orchid:\"#da70d6\",palegoldenrod:\"#eee8aa\",palegreen:\"#98fb98\",paleturquoise:\"#afeeee\",palevioletred:\"#d87093\",papayawhip:\"#ffefd5\",peachpuff:\"#ffdab9\",peru:\"#cd853f\",pink:\"#ffc0cb\",plum:\"#dda0dd\",powderblue:\"#b0e0e6\",purple:\"#800080\",red:\"#ff0000\",rosybrown:\"#bc8f8f\",royalblue:\"#4169e1\",saddlebrown:\"#8b4513\",salmon:\"#fa8072\",sandybrown:\"#f4a460\",seagreen:\"#2e8b57\",seashell:\"#fff5ee\",sienna:\"#a0522d\",silver:\"#c0c0c0\",skyblue:\"#87ceeb\",slateblue:\"#6a5acd\",slategray:\"#708090\",snow:\"#fffafa\",springgreen:\"#00ff7f\",steelblue:\"#4682b4\",tan:\"#d2b48c\",teal:\"#008080\",thistle:\"#d8bfd8\",tomato:\"#ff6347\",turquoise:\"#40e0d0\",violet:\"#ee82ee\",wheat:\"#f5deb3\",white:\"#ffffff\",whitesmoke:\"#f5f5f5\",yellow:\"#ffff00\",yellowgreen:\"#9acd32\",darkgrey:\"#a9a9a9\",darkslategrey:\"#2f4f4f\",dimgrey:\"#696969\",grey:\"#808080\",lightgray:\"#d3d3d3\",lightslategrey:\"#778899\",slategrey:\"#708090\"}[t]}};let vo,bo;function wo(t,e,n){n&&(bo=Object.assign({},n)),e.addEventListener(\"mousedown\",yo.bind(t))}function yo(t){t.stopPropagation(),t.preventDefault(),function(t){if(!t.getClientRects().length)return{top:0,left:0};const e=t.getBoundingClientRect(),n=t.ownerDocument.defaultView;e.top,n.pageYOffset,e.left,n.pageXOffset}(this);const e=xo.bind(this),n=_o.bind(this),r=getComputedStyle(this),i=parseInt(r.top.replace(\"px\",\"\")),o=parseInt(r.left.replace(\"px\",\"\"));vo={dragFunction:e,dragEndFunction:n,screenX:t.screenX,screenY:t.screenY,top:i,left:o},document.addEventListener(\"mousemove\",e),document.addEventListener(\"mouseup\",n),document.addEventListener(\"mouseleave\",n),document.addEventListener(\"mouseexit\",n)}function xo(t){if(!vo)return void console.log(\"No drag data!\");t.stopPropagation(),t.preventDefault();const e=t.screenX-vo.screenX,n=t.screenY-vo.screenY,r=vo.left+e,i=bo?Math.max(bo.minY,vo.top+n):vo.top+n;this.style.left=`${r}px`,this.style.top=`${i}px`}function _o(t){if(!vo)return void console.log(\"No drag data!\");t.stopPropagation(),t.preventDefault();const e=vo.dragFunction,n=vo.dragEndFunction;document.removeEventListener(\"mousemove\",e),document.removeEventListener(\"mouseup\",n),document.removeEventListener(\"mouseleave\",n),document.removeEventListener(\"mouseexit\",n),vo=void 0}const ko={licorice:\"#000000\",lead:\"#1e1e1e\",tungsten:\"#3a3a3a\",iron:\"#545453\",steel:\"#6e6e6e\",tin:\"#878687\",nickel:\"#888787\",aluminum:\"#a09fa0\",magnesium:\"#b8b8b8\",silver:\"#d0d0d0\",mercury:\"#e8e8e8\",snow:\"#ffffff\",cayenne:\"#891100\",mocha:\"#894800\",aspargus:\"#888501\",fern:\"#458401\",clover:\"#028401\",moss:\"#018448\",teal:\"#008688\",ocean:\"#004a88\",midnight:\"#001888\",eggplant:\"#491a88\",plum:\"#891e88\",maroon:\"#891648\",maraschino:\"#ff2101\",tangerine:\"#ff8802\",lemon:\"#fffa03\",lime:\"#83f902\",spring:\"#05f802\",seam_foam:\"#03f987\",turquoise:\"#00fdff\",aqua:\"#008cff\",blueberry:\"#002eff\",grape:\"#8931ff\",magenta:\"#ff39ff\",strawberry:\"#ff2987\",salmon:\"#ff726e\",cantaloupe:\"#ffce6e\",banana:\"#fffb6d\",honeydew:\"#cefa6e\",flora:\"#68f96e\",spindrift:\"#68fbd0\",ice:\"#68fdff\",sky:\"#6acfff\",orchid:\"#6e76ff\",lavender:\"#d278ff\",bubblegum:\"#ff7aff\",carnation:\"#ff7fd3\"},So=\"googleapis\",Co={oauthTokens:{},setToken:function(t,e){e=e||So,this.oauthTokens[e]=t,e===So&&(this.google.access_token=t)},getToken:function(t){let e;t=t||So;for(let n of Object.keys(this.oauthTokens)){if(Eo(n).test(t)){e=this.oauthTokens[n];break}}return e},removeToken:function(t){t=t||So;for(let e of Object.keys(this.oauthTokens)){Eo(e).test(t)&&(this.oauthTokens[e]=void 0)}t===So&&(this.google.access_token=void 0)},google:{setToken:function(t){Co.setToken(t)}}};function Eo(t){return new RegExp(\"^\"+t.split(/\\*+/).map(Ao).join(\".*\")+\"$\")}function Ao(t){return t.replace(/[|\\\\{}()[\\]^$+*?.]/g,\"\\\\$&\")}const To=new class{constructor(t){this.requestsPerSecond=t.requestsPerSecond||10,this.lastStartTime=0,this.queued=[]}add(t,e){var n=this;return new Promise((function(e,r){n.queued.push({resolve:e,reject:r,asyncFunction:t}),n.dequeue()}))}addAll(t,e){var n=t.map(function(t){return this.add(t,e)}.bind(this));return Promise.all(n)}dequeue(){if(this.queued.length>0){var t=new Date,e=1e3/this.requestsPerSecond+1,n=t-this.lastStartTime;n>=e?this._execute():setTimeout(function(){this.dequeue()}.bind(this),e-n)}}async _execute(){this.lastStartTime=new Date;var t=this.queued.shift();const e=t.asyncFunction;try{const n=await e();t.resolve(n)}catch(e){t.reject(e)}}}({requestsPerSecond:8}),Lo={apiKey:void 0,setApiKey:function(t){this.apiKey=t},load:Mo,loadArrayBuffer:async function(t,e){return(e=e||{}).responseType||(e.responseType=\"arraybuffer\"),Ue(t)?Io(t,e):Mo(t,e)},loadJson:async function(t,e){\"POST\"===((e=e||{}).method||(e.sendData?\"POST\":\"GET\"))&&(e.contentType=\"application/json\");const n=await this.loadString(t,e);return n?JSON.parse(n):n},loadString:async function(t,e){return e=e||{},t instanceof File?async function(t,e){const n=e.range?t.slice(e.range.start,e.range.start+e.range.size):t;return Oo(await n.arrayBuffer())}(t,e):async function(t,e){(e=e||{}).responseType=\"arraybuffer\";return Oo(await Lo.load(t,e))}(t,e)}};async function Mo(t,e){e=e||{};const n=typeof t;if(Ue(t=await(\"function\"==typeof t?t():t)))return Io(t,e);if(\"function\"==typeof t.startsWith){if(t.startsWith(\"data:\")){const n=lo(t).buffer;if(e.range){const t=e.range.size?e.range.start+e.range.size:n.byteLength;return n.slice(e.range.start,t)}return n}return t.startsWith(\"https://drive.google.com\")&&(t=Ie(t)),Me(t)||t.startsWith(\"https://www.dropbox.com\")?To.add((async function(){return Ro(t,e)})):Ro(t,e)}throw Error(`url must be either a 'File', 'string', 'function', or 'Promise'. Actual type: ${n}`)}async function Ro(t,e){t=function(t){return t.includes(\"//www.dropbox.com\")?t.replace(\"//www.dropbox.com\",\"//dl.dropboxusercontent.com\"):t.includes(\"//drive.google.com\")?Ie(t):t.includes(\"//www.broadinstitute.org/igvdata\")?t.replace(\"//www.broadinstitute.org/igvdata\",\"//data.broadinstitute.org/igvdata\"):t.includes(\"//igvdata.broadinstitute.org\")?t.replace(\"//igvdata.broadinstitute.org\",\"https://dn7ywbm9isq8j.cloudfront.net\"):t.startsWith(\"ftp://ftp.ncbi.nlm.nih.gov/geo\")?t.replace(\"ftp://\",\"https://\"):t}(t);let n=(e=e||{}).oauthToken||function(t){const e=Te(t)?void 0:He(t).host;let n=Co.getToken(e);if(n)return n;if(void 0===e){const t=Po();if(t&&t.expires_at>Date.now())return t.access_token}}(t);return n&&(n=await(\"function\"==typeof n?n():n)),new Promise((function(r,i){Te(t)&&!No(t)&&(Le(t)&&(t=Re(t)),t=function(t){let e=Lo.apiKey;e||\"undefined\"==typeof gapi||(e=gapi.apiKey);if(void 0!==e&&!t.includes(\"key=\")){const n=t.includes(\"?\")?\"&\":\"?\";t=t+n+\"key=\"+e}return t}(t),Me(t)&&function(t){if(t.includes(\"supportsTeamDrive\"))return t;{const e=t.includes(\"?\")?\"&\":\"?\";t=t+e+\"supportsTeamDrive=true\"}}(t),n||(n=Po()));const o=e.headers||{};n&&function(t,e){e&&(t[\"Cache-Control\"]=\"no-cache\",t.Authorization=\"Bearer \"+e)}(o,n);const s=e.range,a=navigator.userAgent.indexOf(\"Chrome\")>-1;0===navigator.vendor.indexOf(\"Apple\")&&/\\sSafari\\//.test(navigator.userAgent),s&&a&&!function(t){return t.indexOf(\"X-Amz-Signature\")>-1}(t)&&!No(t)&&(t+=t.includes(\"?\")?\"&\":\"?\",t+=\"someRandomSeed=\"+Math.random().toString(36));const c=new XMLHttpRequest,l=e.sendData||e.body,h=e.method||(l?\"POST\":\"GET\"),u=e.responseType,f=e.contentType,d=e.mimeType;if(c.open(h,t),e.timeout&&(c.timeout=e.timeout),s){var p=s.size?s.start+s.size-1:\"\";c.setRequestHeader(\"Range\",\"bytes=\"+s.start+\"-\"+p)}if(f&&c.setRequestHeader(\"Content-Type\",f),d&&c.overrideMimeType(d),u&&(c.responseType=u),o)for(let t of Object.keys(o)){const e=o[t];c.setRequestHeader(t,e)}!0===e.withCredentials&&(c.withCredentials=!0),c.onload=async function(n){0===c.status||c.status>=200&&c.status<=300?s&&206!==c.status&&0!==s.start?(c.response.length>1e5&&alert(`Warning: Range header ignored for URL: ${t}. This can have performance impacts.`),r(c.response.slice(s.start,s.start+s.size))):r(c.response):\"undefined\"==typeof gapi||404!==c.status&&401!==c.status&&403!==c.status||!Te(t)||e.retries?403===c.status?g(\"Access forbidden: \"+t):416===c.status?g(\"Unsatisfiable range\"):g(c.status):m()},c.onerror=function(n){Te(t)&&!e.retries&&m(),g(\"Error accessing resource: \"+t+\" Status: \"+c.status)},c.ontimeout=function(t){g(\"Timed out\")},c.onabort=function(t){console.log(\"Aborted\"),i(t)};try{c.send(l)}catch(t){i(t)}function g(t){if(!i)throw t;i(t)}async function m(){try{const n=await async function(t){if(Fe()){const e=function(t){return Me(t)?\"https://www.googleapis.com/auth/drive.file\":Le(t)?\"https://www.googleapis.com/auth/devstorage.read_only\":\"https://www.googleapis.com/auth/userinfo.profile\"}(t),n=await Be(e);return n?n.access_token:void 0}throw Error(\"Authorization is required, but Google oAuth has not been initalized. Contact your site administrator for assistance.\")}(t);e.retries=1,e.oauthToken=n;const i=await Mo(t,e);r(i)}catch(t){if(t.error){const e=t.error.startsWith(\"popup_blocked\")?\"Google login popup blocked by browser.\":t.error;alert(e)}else g(t)}}}))}async function Io(t,e){let n=e&&e.range?t.slice(e.range.start,e.range.start+e.range.size):t;const r=await n.arrayBuffer();return\"arraybuffer\"===e.responseType?r:Oo(r)}function No(t){return t.indexOf(\"X-Goog-Signature\")>-1}function Po(){if(Fe()){const t=function(){let t=gapi.auth2.getAuthInstance().currentUser.get();if(t&&t.isSignedIn()){const{access_token:e,expires_at:n}=t.getAuthResponse();return{access_token:e,expires_at:n}}}();return t?t.access_token:void 0}}function Oo(t){let e;return e=function(t){const e=ArrayBuffer.isView(t)?t:new Uint8Array(t);return 31===e[0]&&139===e[1]}(t)?function(t){const e=ArrayBuffer.isView(t)?t:new Uint8Array(t);return 0!=(4&e[3])&&66===e[12]&&67===e[13]?io(e.buffer):no.ungzip(e)}(t):new Uint8Array(t),\"TextDecoder\"in function(){if(\"undefined\"!=typeof self)return self;return\"undefined\"!=typeof global?global:window}()?(new TextDecoder).decode(e):function(t){var e=\"\",n=0;for(;n0)for(var s=0;s1&&r.sort((function(t,e){return t.low-e.low})),r}logIntervals(){!function t(e,n){for(var r=\"\",i=0;i=t.low&&Bo.call(this,t,e.left,n),e.right!==Fo&&e.right.min<=t.high&&Bo.call(this,t,e.right,n),n}function zo(t){var e=t.right;t.right=e.left,e.left!==Fo&&(e.left.parent=t),e.parent=t.parent,t.parent===Fo?this.root=e:t.parent.left===t?t.parent.left=e:t.parent.right=e,e.left=t,t.parent=e,Vo.call(this,t)}function Ho(t){var e=t.left;t.left=e.right,e.right!==Fo&&(e.right.parent=t),e.parent=t.parent,t.parent===Fo?this.root=e:t.parent.right===t?t.parent.right=e:t.parent.left=e,e.right=t,t.parent=e,Vo.call(this,t)}function Vo(t){for(;t!==Fo;){var e=t.left.max>t.right.max?t.left.max:t.right.max,n=t.interval.high;t.max=e>n?e:n;var r=t.left.mint.low?1:this.hight.high?1:0}overlaps(t){return this.low<=t.high&&t.low<=this.high}}function Uo(t){this.parent=Fo,this.left=Fo,this.right=Fo,this.interval=t,this.color=2}class qo{constructor(t,e,n){t=t||[],this.treeMap=this.buildTreeMap(t,e),this.range=n,this.count=t.length}containsRange(t){return void 0===this.range||this.range.contains(t.chr,t.start,t.end)}queryFeatures(t,e,n){const r=this.treeMap[t];if(!r)return[];const i=r.findOverlapping(e,n);if(0===i.length)return[];{const r=[],o=this.allFeatures[t];if(o){for(let t of i){const i=t.value;for(let t=i.start;tn)break;i.end>=e&&r.push(i)}}r.sort((function(t,e){return t.start-e.start}))}return r}}getAllFeatures(){return this.allFeatures}buildTreeMap(t,e){const n={},r=[];if(this.allFeatures={},t){for(let n of t){let t=n.chr;e&&(t=e.getChromosomeName(t));let i=this.allFeatures[t];i||(r.push(t),i=[],this.allFeatures[t]=i),i.push(n)}for(let t of r){const e=this.allFeatures[t];e.sort((function(t,e){return t.start===e.start?0:t.start>e.start?1:-1})),n[t]=Wo(e)}}return n}}function Wo(t){const e=new Do,n=t.length,r=Math.max(10,Math.round(n/10));for(let i=0;ie.start?1:-1}));for(let i=0;in)break;o.end>e&&t.push(o)}})),t.sort((function(t,e){return t.start-e.start})),t)}return[]};function Zo(t,e){const n=ge({class:\"igv-menu-popup-check-container\"}),r=ge();n.appendChild(r);const i=ye(\"check\",!0===e?\"#444\":\"transparent\");r.appendChild(i);const o=ge();return o.innerText=t,n.appendChild(o),n}const Xo={trackMenuItemList:function(t){const e=new Set([\"alignment\",\"annotation\",\"variant\",\"eqtl\",\"snp\"]),n=t.track.config&&void 0!==t.track.config.visibilityWindow;let r=[];return\"sequence\"!==t.track.config.type&&(r.push(function(t){const e=e=>{const n=function(){let e=t.browser.inputDialog.input.value;e=\"\"===e||void 0===e?\"untitled\":e.trim(),t.track.name=e},r={label:\"Track Name\",value:Ko(t.track)||\"unnamed\",callback:n};t.browser.inputDialog.present(r,e)},n=pe(\"
\");return n.text(\"Set track name\"),{object:n,click:e}}(t)),r.push(function(t){const e=e=>{const n=()=>{const e=Number(t.browser.inputDialog.input.value,10);void 0!==e&&(void 0!==t.track.minHeight&&t.track.minHeight>e&&(t.track.minHeight=e),void 0!==t.track.maxHeight&&t.track.maxHeight\");return n.text(\"Set track height\"),{object:n,click:e}}(t))),this.showColorPicker(t.track)&&(r.push(\"
\"),r.push(Yo({trackView:t,label:\"Set track color\",option:\"color\"})),r.push(function(t){let{trackView:e,label:n}=t;const r=pe(\"
\");return r.text(n),{object:r,click:()=>{e.track.color=void 0,e.repaintViews()}}}({trackView:t,label:\"Unset track color\"})),r.push(Yo({trackView:t,label:\"Set alt color\",option:\"altColor\"}))),t.track.menuItemList&&(r=r.concat(t.track.menuItemList())),(n||e.has(t.track.type))&&(r.push(\"
\"),r.push(function(t){const e=e=>{const n=()=>{let e=t.browser.inputDialog.input.value;e=\"\"===e||void 0===e?-1:e.trim(),t.track.visibilityWindow=Number.parseInt(e),t.track.config.visibilityWindow=Number.parseInt(e),t.updateViews()},r={label:\"Visibility Window\",value:t.track.visibilityWindow,callback:n};t.browser.inputDialog.present(r,e)},n=pe(\"
\");return n.text(\"Set visibility window\"),{object:n,click:e}}(t))),!1!==t.track.removable&&(r.push(\"
\"),r.push(function(t){const e=pe(\"
\");return e.text(\"Remove track\"),{object:e,click:()=>t.browser.removeTrack(t.track)}}(t))),r},numericDataMenuItems:function(t){const e=[];e.push(\"
\");const n=pe(\"
\");n.text(\"Set data range\");return e.push({object:n,click:()=>{t.browser.dataRangeDialog.configure(t),t.browser.dataRangeDialog.present(pe(t.browser.columnContainer))}}),void 0!==t.track.logScale&&e.push({object:pe(Zo(\"Log scale\",t.track.logScale)),click:()=>{t.track.logScale=!t.track.logScale,t.repaintViews()}}),e.push({object:pe(Zo(\"Autoscale\",t.track.autoscale)),click:()=>{t.track.autoscale=!t.track.autoscale,t.updateViews()}}),e},trackMenuItemListHelper:function(t,e){var n=[];return t.length>0&&(n=t.map((function(t,n){var r;if(t.name?(r=pe(\"
\")).text(t.name):t.object?r=t.object:\"string\"==typeof t.label?(r=pe(\"
\")).html(t.label):\"string\"==typeof t&&(r=t.startsWith(\"<\")?pe(t):pe(\"
\"+t+\"
\")),0===n&&r.addClass(\"igv-track-menu-border-top\"),t.click){function i(n){t.click(n),e.hide(),n.preventDefault(),n.stopPropagation()}r.on(\"click\",i),r.on(\"touchend\",(function(t){i(t)})),r.on(\"mouseup\",(function(t){t.preventDefault(),t.stopPropagation()}))}return{object:r,init:t.init||void 0}}))),n},showColorPicker:t=>void 0===t.type||\"bedtype\"===t.type||\"alignment\"===t.type||\"annotation\"===t.type||\"variant\"===t.type||\"wig\"===t.type||\"interact\"===t.type,createMenuItem(t,e){const n=pe(\"
\");return n.text(t),{object:n,click:e}}};function Yo(t){let{trackView:e,label:n,option:r}=t;const i=pe(\"
\");return i.text(n),{object:i,click:()=>e.presentColorPicker(r)}}function Ko(t){return t.trackView.viewports[0].$trackLabel.text()}function Qo(t){return function(t,e){const n=document.createElement(t);e&&(e.class&&n.classList.add(e.class),e.id&&(n.id=e.id),e.style&&function(t,e){for(let n of Object.keys(e))t.style[n]=e[n]}(n,e.style));return n}(\"div\",t)}function Jo(t){const e=getComputedStyle(t);\"none\"!==e.display&&(t._initialDisplay=e.display),t.style.display=\"none\"}function ts(t){if(\"none\"===getComputedStyle(t).display){const e=t._initialDisplay||\"block\";t.style.display=e}}function es(t,e){e=e||\"currentColor\";let n=ns[t];n||(console.error(`No icon named: ${t}`),n=ns.question);const r=document.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\");r.setAttributeNS(null,\"viewBox\",\"0 0 \"+n[0]+\" \"+n[1]);const i=document.createElementNS(\"http://www.w3.org/2000/svg\",\"path\");return i.setAttributeNS(null,\"fill\",e),i.setAttributeNS(null,\"d\",n[4]),r.appendChild(i),r}const ns={check:[512,512,[],\"f00c\",\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"],cog:[512,512,[],\"f013\",\"M444.788 291.1l42.616 24.599c4.867 2.809 7.126 8.618 5.459 13.985-11.07 35.642-29.97 67.842-54.689 94.586a12.016 12.016 0 0 1-14.832 2.254l-42.584-24.595a191.577 191.577 0 0 1-60.759 35.13v49.182a12.01 12.01 0 0 1-9.377 11.718c-34.956 7.85-72.499 8.256-109.219.007-5.49-1.233-9.403-6.096-9.403-11.723v-49.184a191.555 191.555 0 0 1-60.759-35.13l-42.584 24.595a12.016 12.016 0 0 1-14.832-2.254c-24.718-26.744-43.619-58.944-54.689-94.586-1.667-5.366.592-11.175 5.459-13.985L67.212 291.1a193.48 193.48 0 0 1 0-70.199l-42.616-24.599c-4.867-2.809-7.126-8.618-5.459-13.985 11.07-35.642 29.97-67.842 54.689-94.586a12.016 12.016 0 0 1 14.832-2.254l42.584 24.595a191.577 191.577 0 0 1 60.759-35.13V25.759a12.01 12.01 0 0 1 9.377-11.718c34.956-7.85 72.499-8.256 109.219-.007 5.49 1.233 9.403 6.096 9.403 11.723v49.184a191.555 191.555 0 0 1 60.759 35.13l42.584-24.595a12.016 12.016 0 0 1 14.832 2.254c24.718 26.744 43.619 58.944 54.689 94.586 1.667 5.366-.592 11.175-5.459 13.985L444.788 220.9a193.485 193.485 0 0 1 0 70.2zM336 256c0-44.112-35.888-80-80-80s-80 35.888-80 80 35.888 80 80 80 80-35.888 80-80z\"],exclamation:[192,512,[],\"f12a\",\"M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z\"],\"exclamation-circle\":[512,512,[],\"f06a\",\"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"],\"exclamation-triangle\":[576,512,[],\"f071\",\"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"],minus:[448,512,[],\"f068\",\"M424 318.2c13.3 0 24-10.7 24-24v-76.4c0-13.3-10.7-24-24-24H24c-13.3 0-24 10.7-24 24v76.4c0 13.3 10.7 24 24 24h400z\"],\"minus-circle\":[512,512,[],\"f056\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z\"],\"minus-square\":[448,512,[],\"f146\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM92 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H92z\"],plus:[448,512,[],\"f067\",\"M448 294.2v-76.4c0-13.3-10.7-24-24-24H286.2V56c0-13.3-10.7-24-24-24h-76.4c-13.3 0-24 10.7-24 24v137.8H24c-13.3 0-24 10.7-24 24v76.4c0 13.3 10.7 24 24 24h137.8V456c0 13.3 10.7 24 24 24h76.4c13.3 0 24-10.7 24-24V318.2H424c13.3 0 24-10.7 24-24z\"],\"plus-circle\":[512,512,[],\"f055\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"],\"plus-square\":[448,512,[],\"f0fe\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"],question:[384,512,[],\"f128\",\"M202.021 0C122.202 0 70.503 32.703 29.914 91.026c-7.363 10.58-5.093 25.086 5.178 32.874l43.138 32.709c10.373 7.865 25.132 6.026 33.253-4.148 25.049-31.381 43.63-49.449 82.757-49.449 30.764 0 68.816 19.799 68.816 49.631 0 22.552-18.617 34.134-48.993 51.164-35.423 19.86-82.299 44.576-82.299 106.405V320c0 13.255 10.745 24 24 24h72.471c13.255 0 24-10.745 24-24v-5.773c0-42.86 125.268-44.645 125.268-160.627C377.504 66.256 286.902 0 202.021 0zM192 373.459c-38.196 0-69.271 31.075-69.271 69.271 0 38.195 31.075 69.27 69.271 69.27s69.271-31.075 69.271-69.271-31.075-69.27-69.271-69.27z\"],save:[448,512,[],\"f0c7\",\"M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z\"],search:[512,512,[],\"f002\",\"M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z\"],share:[512,512,[],\"f064\",\"M503.691 189.836L327.687 37.851C312.281 24.546 288 35.347 288 56.015v80.053C127.371 137.907 0 170.1 0 322.326c0 61.441 39.581 122.309 83.333 154.132 13.653 9.931 33.111-2.533 28.077-18.631C66.066 312.814 132.917 274.316 288 272.085V360c0 20.7 24.3 31.453 39.687 18.164l176.004-152c11.071-9.562 11.086-26.753 0-36.328z\"],spinner:[512,512,[],\"f110\",\"M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z\"],square:[448,512,[],\"f0c8\",\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"],\"square-full\":[512,512,[],\"f45c\",\"M512 512H0V0h512v512z\"],times:[384,512,[],\"f00d\",\"M323.1 441l53.9-53.9c9.4-9.4 9.4-24.5 0-33.9L279.8 256l97.2-97.2c9.4-9.4 9.4-24.5 0-33.9L323.1 71c-9.4-9.4-24.5-9.4-33.9 0L192 168.2 94.8 71c-9.4-9.4-24.5-9.4-33.9 0L7 124.9c-9.4 9.4-9.4 24.5 0 33.9l97.2 97.2L7 353.2c-9.4 9.4-9.4 24.5 0 33.9L60.9 441c9.4 9.4 24.5 9.4 33.9 0l97.2-97.2 97.2 97.2c9.3 9.3 24.5 9.3 33.9 0z\"],\"times-circle\":[512,512,[],\"f057\",\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z\"],wrench:[512,512,[],\"f0ad\",\"M481.156 200c9.3 0 15.12 10.155 10.325 18.124C466.295 259.992 420.419 288 368 288c-79.222 0-143.501-63.974-143.997-143.079C223.505 65.469 288.548-.001 368.002 0c52.362.001 98.196 27.949 123.4 69.743C496.24 77.766 490.523 88 481.154 88H376l-40 56 40 56h105.156zm-171.649 93.003L109.255 493.255c-24.994 24.993-65.515 24.994-90.51 0-24.993-24.994-24.993-65.516 0-90.51L218.991 202.5c16.16 41.197 49.303 74.335 90.516 90.503zM104 432c0-13.255-10.745-24-24-24s-24 10.745-24 24 10.745 24 24 24 24-10.745 24-24z\"]};function rs(t,e){var n=document.createElement(\"div\");t.appendChild(n),n.appendChild(function(t,e){return es(t,e)}(\"times\")),n.addEventListener(\"click\",(function(t){t.preventDefault(),t.stopPropagation(),e()}))}let is;function os(t,e){e.addEventListener(\"mousedown\",ss.bind(t))}function ss(t){t.stopPropagation(),t.preventDefault(),function(t){if(!t.getClientRects().length)return{top:0,left:0};const e=t.getBoundingClientRect(),n=t.ownerDocument.defaultView;e.top,n.pageYOffset,e.left,n.pageXOffset}(this);const e=as.bind(this),n=cs.bind(this),r=getComputedStyle(this),i=parseInt(r.top.replace(\"px\",\"\")),o=parseInt(r.left.replace(\"px\",\"\"));is={dragFunction:e,dragEndFunction:n,screenX:t.screenX,screenY:t.screenY,top:i,left:o},document.addEventListener(\"mousemove\",e),document.addEventListener(\"mouseup\",n),document.addEventListener(\"mouseleave\",n),document.addEventListener(\"mouseexit\",n)}function as(t){if(!is)return void console.log(\"No drag data!\");t.stopPropagation(),t.preventDefault();const e=t.screenX-is.screenX,n=t.screenY-is.screenY;this.style.left=`${is.left+e}px`,this.style.top=`${is.top+n}px`}function cs(t){if(!is)return void console.log(\"No drag data!\");t.stopPropagation(),t.preventDefault();const e=is.dragFunction,n=is.dragEndFunction;document.removeEventListener(\"mousemove\",e),document.removeEventListener(\"mouseup\",n),document.removeEventListener(\"mouseleave\",n),document.removeEventListener(\"mouseexit\",n),is=void 0}const ls={401:\"Access unauthorized\",403:\"Access forbidden\",404:\"Not found\"};class hs{constructor(t,e){this.alertProps=Object.assign({shouldFocus:!0,preventScroll:!1},e),this.container=Qo({class:\"igv-ui-alert-dialog-container\"}),t.appendChild(this.container),this.container.setAttribute(\"tabIndex\",\"-1\");const n=Qo();this.container.appendChild(n),this.errorHeadline=Qo(),n.appendChild(this.errorHeadline),this.errorHeadline.textContent=\"\";let r=Qo({class:\"igv-ui-alert-dialog-body\"});this.container.appendChild(r),this.body=Qo({class:\"igv-ui-alert-dialog-body-copy\"}),r.appendChild(this.body);let i=Qo();this.container.appendChild(i),this.ok=Qo(),i.appendChild(this.ok),this.ok.textContent=\"OK\";const o=()=>{\"function\"==typeof this.callback&&(this.callback(\"OK\"),this.callback=void 0),this.body.innerHTML=\"\",Jo(this.container)};this.ok.addEventListener(\"click\",(t=>{t.stopPropagation(),o()})),this.container.addEventListener(\"keypress\",(t=>{t.stopPropagation(),\"Enter\"===t.key&&o()})),os(this.container,n),Jo(this.container)}present(t,e){this.errorHeadline.textContent=t.message?\"ERROR\":\"\";let n=t.message||t;ls.hasOwnProperty(n)&&(n=ls[n]),this.body.innerHTML=n,this.callback=e,ts(this.container),this.alertProps.shouldFocus&&this.container.focus({preventScroll:this.alertProps.preventScroll})}}let us;const fs={init(t,e={}){us=new hs(t,e)},presentAlert(t,e){us||this.init(document.body),us.present(t,e)}};class ds{constructor(t){this.parent=t,this.container=Qo({class:\"igv-ui-generic-dialog-container\"}),t.appendChild(this.container);const e=Qo({class:\"igv-ui-generic-dialog-header\"});this.container.appendChild(e),this.label=Qo({class:\"igv-ui-generic-dialog-one-liner\"}),this.container.appendChild(this.label),this.label.text=\"Unlabeled\",this.input_container=Qo({class:\"igv-ui-generic-dialog-input\"}),this.container.appendChild(this.input_container),this.input=document.createElement(\"input\"),this.input_container.appendChild(this.input);const n=Qo({class:\"igv-ui-generic-dialog-ok-cancel\"});this.container.appendChild(n),this.ok=Qo(),n.appendChild(this.ok),this.ok.textContent=\"OK\",this.cancel=Qo(),n.appendChild(this.cancel),this.cancel.textContent=\"Cancel\",Jo(this.container),this.input.addEventListener(\"keyup\",(t=>{13===t.keyCode&&(\"function\"==typeof this.callback&&(this.callback(this.input.value),this.callback=void 0),this.input.value=void 0,Jo(this.container))})),this.ok.addEventListener(\"click\",(()=>{\"function\"==typeof this.callback&&(this.callback(this.input.value),this.callback=void 0),this.input.value=void 0,Jo(this.container)}));const r=()=>{this.input.value=\"\",Jo(this.container)};this.cancel.addEventListener(\"click\",r),rs(e,r),os(this.container,e)}present(t,e){this.label.textContent=t.label,this.input.value=t.value,this.callback=t.callback||t.click,ts(this.container);const{x:n,y:r}=function(t){if(t.type.startsWith(\"touch\")){const e=t.touches[0];return{x:e.pageX,y:e.pageY}}return{x:t.pageX,y:t.pageY}}(e);this.clampLocation(n,r)}clampLocation(t,e){const{width:n,height:r}=this.container.getBoundingClientRect(),{x:i,y:o,width:s,height:a}=this.parent.getBoundingClientRect(),c=Math.min(Math.max(e,o),o+a-r),l=Math.min(Math.max(t,i),i+s-n);this.container.style.left=`${l}px`,this.container.style.top=`${c}px`}}const ps={licorice:\"#000000\",lead:\"#1e1e1e\",tungsten:\"#3a3a3a\",iron:\"#545453\",steel:\"#6e6e6e\",tin:\"#878687\",nickel:\"#888787\",aluminum:\"#a09fa0\",magnesium:\"#b8b8b8\",silver:\"#d0d0d0\",mercury:\"#e8e8e8\",snow:\"#ffffff\",cayenne:\"#891100\",mocha:\"#894800\",aspargus:\"#888501\",fern:\"#458401\",clover:\"#028401\",moss:\"#018448\",teal:\"#008688\",ocean:\"#004a88\",midnight:\"#001888\",eggplant:\"#491a88\",plum:\"#891e88\",maroon:\"#891648\",maraschino:\"#ff2101\",tangerine:\"#ff8802\",lemon:\"#fffa03\",lime:\"#83f902\",spring:\"#05f802\",seam_foam:\"#03f987\",turquoise:\"#00fdff\",aqua:\"#008cff\",blueberry:\"#002eff\",grape:\"#8931ff\",magenta:\"#ff39ff\",strawberry:\"#ff2987\",salmon:\"#ff726e\",cantaloupe:\"#ffce6e\",banana:\"#fffb6d\",honeydew:\"#cefa6e\",flora:\"#68f96e\",spindrift:\"#68fbd0\",ice:\"#68fdff\",sky:\"#6acfff\",orchid:\"#6e76ff\",lavender:\"#d278ff\",bubblegum:\"#ff7aff\",carnation:\"#ff7fd3\"};class gs{constructor({parent:t,top:e,left:n,width:r,height:i,border:o,closeHandler:s}){let a=Qo({class:\"igv-ui-generic-container\"});t.appendChild(a),Jo(a),this.container=a,void 0!==e&&(this.container.style.top=`${e}px`),void 0!==n&&(this.container.style.left=`${n}px`),void 0!==r&&(this.container.style.width=`${r}px`),void 0!==i&&(this.container.style.height=`${i}px`),o&&(this.container.style.border=o);const c=Qo();this.container.appendChild(c),rs(c,(t=>{Jo(this.container),\"function\"==typeof s&&s(t)})),os(this.container,c)}show(){ts(this.container)}hide(){Jo(this.container)}dispose(){this.container.parent&&this.container.parent.removeChild(this.container)}}class ms extends gs{constructor({parent:t,top:e,left:n,width:r,height:i,defaultColors:o,colorHandler:s}){super({parent:t,top:e,left:n,width:r,height:i,border:\"1px solid gray\"}),vs(this.container,s,o)}}const vs=(t,e,n)=>{const r=Object.values(ps);for(let n of r){const r=Qo({class:\"igv-ui-color-swatch\"});t.appendChild(r),bs(r,n,e)}if(n)for(let r of n){const n=Qo({class:\"igv-ui-color-swatch\"});t.appendChild(n),bs(n,r,e)}},bs=(t,e,n)=>{t.style.backgroundColor=e,t.addEventListener(\"mouseenter\",(n=>t.style.borderColor=e)),t.addEventListener(\"mouseleave\",(e=>t.style.borderColor=\"white\")),t.addEventListener(\"click\",(t=>{t.stopPropagation(),n(e)})),t.addEventListener(\"touchend\",(t=>{t.stopPropagation(),n(e)}))};class ws{constructor(t,e){this.parent=t,this.popover=Qo({class:\"igv-ui-popover\"}),t.appendChild(this.popover);const n=Qo();this.popover.appendChild(n);const r=Qo();n.appendChild(r),e&&(r.textContent=e),rs(n,(()=>this.hide())),os(this.popover,n),this.popoverContent=Qo(),this.popover.appendChild(this.popoverContent),this.popover.style.display=\"none\"}presentContentWithEvent(t,e){this.popover.style.display=\"block\",this.popoverContent.innerHTML=e,ys(t,this.popover,this.popoverContent)}presentMenu(t,e){if(0===e.length)return;this.popover.style.display=\"block\";const n=function(t,e){const n=t.map((function(t,n){let r;if(\"string\"==typeof t)r=Qo(),r.innerHTML=t;else if(\"Node\"==typeof t)r=t;else{if(\"function\"==typeof t.init&&t.init(),\"checkbox\"===t.type)r=function(t,e){const n=Qo({class:\"igv-ui-trackgear-popover-check-container\"}),r=es(\"check\",!0===e?\"#444\":\"transparent\");r.style.borderColor=\"gray\",r.style.borderWidth=\"1px\",r.style.borderStyle=\"solid\",n.appendChild(r);let i=Qo();return i.textContent=t,n.appendChild(i),n}(\"Show all bases\",t.value);else if(\"color\"===t.type){const i=new ms({parent:e.parentElement,width:364,colorHandler:e=>t.click(e)});r=Qo(),\"string\"==typeof t.label&&(r.innerHTML=t.label);const o=t=>{i.show(),Jo(e),t.preventDefault(),t.stopPropagation()};r.addEventListener(\"click\",o),r.addEventListener(\"touchend\",o),r.addEventListener(\"mouseup\",(function(t){t.preventDefault(),t.stopPropagation()}))}else r=Qo(),\"string\"==typeof t.label&&(r.innerHTML=t.label);if(t.click&&\"color\"!==t.type){function s(n){t.click(),Jo(e),n.preventDefault(),n.stopPropagation()}r.addEventListener(\"click\",s),r.addEventListener(\"touchend\",s),r.addEventListener(\"mouseup\",(function(t){t.preventDefault(),t.stopPropagation()}))}}return{object:r,init:t.init}}));return n}(e,this.popover);for(let t of n)this.popoverContent.appendChild(t.object);ys(t,this.popover,this.popoverContent)}hide(){this.popover.style.display=\"none\",this.dispose()}dispose(){this.popover&&this.popover.parentNode.removeChild(this.popover);const t=Object.keys(this);for(let e of t)this[e]=void 0}}function ys(t,e,n){const{x:r,y:i,width:o}=function(t,e){const{clientX:n,clientY:r}=t;return((t,{clientX:e,clientY:n})=>{const{left:r,top:i,width:o,height:s}=t.getBoundingClientRect(),a=e-r,c=n-i;return{x:a,y:c,xNormalized:a/o,yNormalized:c/s,width:o,height:s}})(e,{clientX:n,clientY:r})}(t,e.parentNode);e.style.top=`${i}px`;const{width:s}=e.getBoundingClientRect(),a=r+s,c=a-o;e.style.left=`${a>o?r-c:r}px`,n.style.maxWidth=`${Math.min(s,o)}px`}if(\"undefined\"!=typeof document){function Yv(t){for(let e of document.styleSheets)if(e=e.href?e.href.replace(/^.*[\\\\\\/]/,\"\"):\"\",e===t)return!0;return!1}Yv(\"igv-ui.css\")||function(){var t=document.createElement(\"style\");t.setAttribute(\"type\",\"text/css\"),t.innerHTML='.igv-ui-popover {\\n cursor: default;\\n position: absolute;\\n z-index: 2048;\\n border-color: #7F7F7F;\\n border-radius: 4px;\\n border-style: solid;\\n border-width: 1px;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: small;\\n background-color: white; }\\n .igv-ui-popover > div:first-child {\\n display: flex;\\n flex-direction: row;\\n flex-wrap: nowrap;\\n justify-content: space-between;\\n align-items: center;\\n width: 100%;\\n height: 24px;\\n cursor: move;\\n border-top-left-radius: 4px;\\n border-top-right-radius: 4px;\\n border-bottom-color: #7F7F7F;\\n border-bottom-style: solid;\\n border-bottom-width: thin;\\n background-color: #eee; }\\n .igv-ui-popover > div:first-child > div:first-child {\\n margin-left: 4px; }\\n .igv-ui-popover > div:first-child > div:last-child {\\n margin-right: 4px;\\n height: 12px;\\n width: 12px;\\n color: #7F7F7F; }\\n .igv-ui-popover > div:first-child > div:last-child:hover {\\n cursor: pointer;\\n color: #444; }\\n .igv-ui-popover > div:last-child {\\n overflow-y: auto;\\n overflow-x: hidden;\\n max-height: 400px;\\n max-width: 800px;\\n background-color: white; }\\n .igv-ui-popover > div:last-child > div {\\n -webkit-user-select: text;\\n -moz-user-select: text;\\n -ms-user-select: text;\\n user-select: text;\\n margin-left: 4px;\\n margin-right: 4px;\\n min-width: 220px;\\n overflow-x: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap; }\\n .igv-ui-popover > div:last-child > div > span {\\n font-weight: bolder; }\\n .igv-ui-popover > div:last-child hr {\\n width: 100%; }\\n\\n.igv-ui-alert-dialog-container {\\n box-sizing: content-box;\\n position: absolute;\\n z-index: 2048;\\n top: 50%;\\n left: 50%;\\n width: 400px;\\n height: 200px;\\n border-color: #7F7F7F;\\n border-radius: 4px;\\n border-style: solid;\\n border-width: thin;\\n outline: none;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: 15px;\\n font-weight: 400;\\n background-color: white;\\n display: flex;\\n flex-flow: column;\\n flex-wrap: nowrap;\\n justify-content: space-between;\\n align-items: center; }\\n .igv-ui-alert-dialog-container > div:first-child {\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: center;\\n width: 100%;\\n height: 24px;\\n cursor: move;\\n border-top-left-radius: 4px;\\n border-top-right-radius: 4px;\\n border-bottom-color: #7F7F7F;\\n border-bottom-style: solid;\\n border-bottom-width: thin;\\n background-color: #eee; }\\n .igv-ui-alert-dialog-container > div:first-child div:first-child {\\n padding-left: 8px; }\\n .igv-ui-alert-dialog-container .igv-ui-alert-dialog-body {\\n -webkit-user-select: text;\\n -moz-user-select: text;\\n -ms-user-select: text;\\n user-select: text;\\n color: #373737;\\n width: 100%;\\n height: calc(100% - 24px - 64px);\\n overflow-y: scroll; }\\n .igv-ui-alert-dialog-container .igv-ui-alert-dialog-body .igv-ui-alert-dialog-body-copy {\\n margin: 16px;\\n width: auto;\\n height: auto;\\n overflow-wrap: break-word;\\n word-break: break-word;\\n background-color: white;\\n border: unset; }\\n .igv-ui-alert-dialog-container > div:last-child {\\n width: 100%;\\n margin-bottom: 10px;\\n background-color: white;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: center;\\n align-items: center; }\\n .igv-ui-alert-dialog-container > div:last-child div {\\n margin: unset;\\n width: 40px;\\n height: 30px;\\n line-height: 30px;\\n text-align: center;\\n color: white;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: small;\\n font-weight: 400;\\n border-color: #2B81AF;\\n border-style: solid;\\n border-width: thin;\\n border-radius: 4px;\\n background-color: #2B81AF; }\\n .igv-ui-alert-dialog-container > div:last-child div:hover {\\n cursor: pointer;\\n border-color: #25597f;\\n background-color: #25597f; }\\n\\n.igv-ui-color-swatch {\\n position: relative;\\n box-sizing: content-box;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: wrap;\\n justify-content: center;\\n align-items: center;\\n width: 32px;\\n height: 32px;\\n border-style: solid;\\n border-width: 2px;\\n border-color: white;\\n border-radius: 4px; }\\n\\n.igv-ui-color-swatch:hover {\\n border-color: dimgray; }\\n\\n.igv-ui-colorpicker-menu-close-button {\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-end;\\n align-items: center;\\n width: 100%;\\n height: 32px;\\n margin-top: 4px;\\n margin-bottom: 4px;\\n padding-right: 8px; }\\n .igv-ui-colorpicker-menu-close-button i.fa {\\n display: block;\\n margin-left: 4px;\\n margin-right: 4px;\\n color: #5f5f5f; }\\n .igv-ui-colorpicker-menu-close-button i.fa:hover,\\n .igv-ui-colorpicker-menu-close-button i.fa:focus,\\n .igv-ui-colorpicker-menu-close-button i.fa:active {\\n cursor: pointer;\\n color: #0f0f0f; }\\n\\n.igv-ui-generic-dialog-container {\\n box-sizing: content-box;\\n position: fixed;\\n top: 0;\\n left: 0;\\n width: 300px;\\n height: 200px;\\n border-color: #7F7F7F;\\n border-radius: 4px;\\n border-style: solid;\\n border-width: thin;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: medium;\\n font-weight: 400;\\n z-index: 2048;\\n background-color: white;\\n display: flex;\\n flex-flow: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: center; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-header {\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-end;\\n align-items: center;\\n width: 100%;\\n height: 24px;\\n cursor: move;\\n border-top-left-radius: 4px;\\n border-top-right-radius: 4px;\\n border-bottom-color: #7F7F7F;\\n border-bottom-style: solid;\\n border-bottom-width: thin;\\n background-color: #eee; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-header div {\\n margin-right: 4px;\\n margin-bottom: 2px;\\n height: 12px;\\n width: 12px;\\n color: #7F7F7F; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-header div:hover {\\n cursor: pointer;\\n color: #444; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-one-liner {\\n color: #373737;\\n width: 95%;\\n height: 24px;\\n line-height: 24px;\\n text-align: left;\\n margin-top: 8px;\\n padding-left: 8px;\\n overflow-wrap: break-word;\\n background-color: white; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-label-input {\\n margin-top: 8px;\\n width: 95%;\\n height: 24px;\\n color: #373737;\\n line-height: 24px;\\n padding-left: 8px;\\n background-color: white;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n align-items: center; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-label-input div {\\n width: 30%;\\n height: 100%;\\n font-size: 16px;\\n text-align: right;\\n padding-right: 8px;\\n background-color: white; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-label-input input {\\n display: block;\\n height: 100%;\\n width: 100%;\\n padding-left: 4px;\\n font-family: \"Open Sans\", sans-serif;\\n font-weight: 400;\\n color: #373737;\\n text-align: left;\\n outline: none;\\n border-style: solid;\\n border-width: thin;\\n border-color: #7F7F7F;\\n background-color: white; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-label-input input {\\n width: 50%;\\n font-size: 16px; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-input {\\n margin-top: 8px;\\n width: calc(100% - 16px);\\n height: 24px;\\n color: #373737;\\n line-height: 24px;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: space-around;\\n align-items: center; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-input input {\\n display: block;\\n height: 100%;\\n width: 100%;\\n padding-left: 4px;\\n font-family: \"Open Sans\", sans-serif;\\n font-weight: 400;\\n color: #373737;\\n text-align: left;\\n outline: none;\\n border-style: solid;\\n border-width: thin;\\n border-color: #7F7F7F;\\n background-color: white; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-input input {\\n font-size: 16px; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel {\\n width: 100%;\\n height: 28px;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: space-around;\\n align-items: center; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel div {\\n margin-top: 32px;\\n color: white;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: 14px;\\n font-weight: 400;\\n width: 75px;\\n height: 28px;\\n line-height: 28px;\\n text-align: center;\\n border-color: transparent;\\n border-style: solid;\\n border-width: thin;\\n border-radius: 2px; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel div:first-child {\\n margin-left: 32px;\\n margin-right: 0;\\n background-color: #5ea4e0; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel div:last-child {\\n margin-left: 0;\\n margin-right: 32px;\\n background-color: #c4c4c4; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel div:first-child:hover {\\n cursor: pointer;\\n background-color: #3b5c7f; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel div:last-child:hover {\\n cursor: pointer;\\n background-color: #7f7f7f; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok {\\n width: 100%;\\n height: 36px;\\n margin-top: 32px;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: space-around;\\n align-items: center; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok div {\\n width: 98px;\\n height: 36px;\\n line-height: 36px;\\n text-align: center;\\n color: white;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: medium;\\n font-weight: 400;\\n border-color: white;\\n border-style: solid;\\n border-width: thin;\\n border-radius: 4px;\\n background-color: #2B81AF; }\\n .igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok div:hover {\\n cursor: pointer;\\n background-color: #25597f; }\\n\\n.igv-ui-generic-container {\\n box-sizing: content-box;\\n position: absolute;\\n z-index: 2048;\\n background-color: white;\\n cursor: pointer;\\n display: flex;\\n flex-direction: row;\\n flex-wrap: wrap;\\n justify-content: flex-start;\\n align-items: center; }\\n .igv-ui-generic-container > div:first-child {\\n cursor: move;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-end;\\n align-items: center;\\n height: 24px;\\n width: 100%;\\n background-color: #dddddd; }\\n .igv-ui-generic-container > div:first-child > div {\\n display: block;\\n color: #5f5f5f;\\n cursor: pointer;\\n width: 14px;\\n height: 14px;\\n margin-right: 8px;\\n margin-bottom: 4px; }\\n\\n.igv-ui-dialog {\\n z-index: 2048;\\n position: fixed;\\n width: fit-content;\\n height: fit-content;\\n display: flex;\\n flex-flow: column;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n background-color: white;\\n border-color: #7F7F7F;\\n border-radius: 4px;\\n border-style: solid;\\n border-width: thin;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: medium;\\n font-weight: 400; }\\n .igv-ui-dialog .igv-ui-dialog-header {\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: flex-end;\\n align-items: center;\\n width: 100%;\\n height: 24px;\\n cursor: move;\\n border-top-left-radius: 4px;\\n border-top-right-radius: 4px;\\n border-bottom-color: #7F7F7F;\\n border-bottom-style: solid;\\n border-bottom-width: thin;\\n background-color: #eee; }\\n .igv-ui-dialog .igv-ui-dialog-header div {\\n margin-right: 4px;\\n margin-bottom: 2px;\\n height: 12px;\\n width: 12px;\\n color: #7F7F7F; }\\n .igv-ui-dialog .igv-ui-dialog-header div:hover {\\n cursor: pointer;\\n color: #444; }\\n .igv-ui-dialog .igv-ui-dialog-one-liner {\\n width: 95%;\\n height: 24px;\\n line-height: 24px;\\n text-align: left;\\n margin: 8px;\\n overflow-wrap: break-word;\\n background-color: white;\\n font-weight: bold; }\\n .igv-ui-dialog .igv-ui-dialog-ok-cancel {\\n width: 100%;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: space-around;\\n align-items: center; }\\n .igv-ui-dialog .igv-ui-dialog-ok-cancel div {\\n margin: 16px;\\n margin-top: 32px;\\n color: white;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: 14px;\\n font-weight: 400;\\n width: 75px;\\n height: 28px;\\n line-height: 28px;\\n text-align: center;\\n border-color: transparent;\\n border-style: solid;\\n border-width: thin;\\n border-radius: 2px; }\\n .igv-ui-dialog .igv-ui-dialog-ok-cancel div:first-child {\\n background-color: #5ea4e0; }\\n .igv-ui-dialog .igv-ui-dialog-ok-cancel div:last-child {\\n background-color: #c4c4c4; }\\n .igv-ui-dialog .igv-ui-dialog-ok-cancel div:first-child:hover {\\n cursor: pointer;\\n background-color: #3b5c7f; }\\n .igv-ui-dialog .igv-ui-dialog-ok-cancel div:last-child:hover {\\n cursor: pointer;\\n background-color: #7f7f7f; }\\n .igv-ui-dialog .igv-ui-dialog-ok {\\n width: 100%;\\n height: 36px;\\n margin-top: 32px;\\n display: flex;\\n flex-flow: row;\\n flex-wrap: nowrap;\\n justify-content: space-around;\\n align-items: center; }\\n .igv-ui-dialog .igv-ui-dialog-ok div {\\n width: 98px;\\n height: 36px;\\n line-height: 36px;\\n text-align: center;\\n color: white;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: medium;\\n font-weight: 400;\\n border-color: white;\\n border-style: solid;\\n border-width: thin;\\n border-radius: 4px;\\n background-color: #2B81AF; }\\n .igv-ui-dialog .igv-ui-dialog-ok div:hover {\\n cursor: pointer;\\n background-color: #25597f; }\\n\\n.igv-ui-panel, .igv-ui-panel-column, .igv-ui-panel-row {\\n z-index: 2048;\\n background-color: white;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: medium;\\n font-weight: 400;\\n display: flex;\\n justify-content: flex-start;\\n align-items: flex-start; }\\n\\n.igv-ui-panel-column {\\n display: flex;\\n flex-direction: column; }\\n\\n.igv-ui-panel-row {\\n display: flex;\\n flex-direction: row; }\\n\\n.igv-ui-textbox {\\n background-color: white;\\n font-family: \"Open Sans\", sans-serif;\\n font-size: medium;\\n font-weight: 400;\\n display: flex;\\n justify-content: flex-start;\\n align-items: flex-start; }\\n\\n/*# sourceMappingURL=igv-ui.css.map */\\n',document.head.insertBefore(t,document.head.childNodes[document.head.childNodes.length-1])}()}class xs{constructor(t,e){this.$container=pe(\"
\",{class:\"igv-generic-dialog-container\"}),t.append(this.$container),this.$container.offset({left:0,top:0});const n=pe(\"
\",{class:\"igv-generic-dialog-header\"});this.$container.append(n),_e(n[0],(()=>{this.$minimum_input.val(void 0),this.$maximum_input.val(void 0),this.$container.offset({left:0,top:0}),this.$container.hide()})),this.$minimum=pe(\"
\",{class:\"igv-generic-dialog-label-input\"}),this.$container.append(this.$minimum);const r=pe(\"
\");r.text(\"Minimum\"),this.$minimum.append(r),this.$minimum_input=pe(\"\"),this.$minimum.append(this.$minimum_input),this.$maximum=pe(\"
\",{class:\"igv-generic-dialog-label-input\"}),this.$container.append(this.$maximum);const i=pe(\"
\");i.text(\"Maximum\"),this.$maximum.append(i),this.$maximum_input=pe(\"\"),this.$maximum.append(this.$maximum_input);const o=pe(\"
\",{class:\"igv-generic-dialog-ok-cancel\"});this.$container.append(o),this.$ok=pe(\"
\"),o.append(this.$ok),this.$ok.text(\"OK\"),this.$cancel=pe(\"
\"),o.append(this.$cancel),this.$cancel.text(\"Cancel\"),this.$cancel.on(\"click\",(()=>{this.$minimum_input.val(void 0),this.$maximum_input.val(void 0),this.$container.offset({left:0,top:0}),this.$container.hide()})),wo(this.$container.get(0),n.get(0)),this.$container.hide()}configure(t){const e=t.dataRange();let n,r;e?(n=e.min,r=e.max):(n=0,r=100),this.$minimum_input.val(n),this.$maximum_input.val(r),this.$minimum_input.unbind(),this.$minimum_input.on(\"keyup\",(e=>{13===e.keyCode&&this.processResults(t)})),this.$maximum_input.unbind(),this.$maximum_input.on(\"keyup\",(e=>{13===e.keyCode&&this.processResults(t)})),this.$ok.unbind(),this.$ok.on(\"click\",(e=>{this.processResults(t)}))}processResults(t){const e=Number(this.$minimum_input.val()),n=Number(this.$maximum_input.val());isNaN(e)||isNaN(n)?fs.presentAlert(new Error(\"Must input numeric values\"),void 0):t.setDataRange(e,n),this.$minimum_input.val(void 0),this.$maximum_input.val(void 0),this.$container.offset({left:0,top:0}),this.$container.hide()}present(t){const e=t.offset().top,n=pe(\"body\").scrollTop();this.$container.offset({left:t.width()-this.$container.width(),top:e+n}),this.$container.show()}}const _s={configureHighDPICanvas:function(t,e,n){const r=window.devicePixelRatio;t.canvas.style.width=`${e}px`,t.canvas.width=Math.floor(r*e),t.canvas.style.height=`${n}px`,t.canvas.height=Math.floor(r*n),t.scale(r,r)},setProperties:function(t,e){for(var n in e)if(e.hasOwnProperty(n)){var r=e[n];t[n]=r}},strokeLine:function(t,e,n,r,i,o){e=Math.floor(e)+.5,n=Math.floor(n)+.5,r=Math.floor(r)+.5,i=Math.floor(i)+.5,o&&(t.save(),_s.setProperties(t,o)),t.beginPath(),t.moveTo(e,n),t.lineTo(r,i),t.stroke(),o&&t.restore()},fillRect:function(t,e,n,r,i,o){e=Math.round(e),n=Math.round(n),o&&(t.save(),_s.setProperties(t,o)),t.fillRect(e,n,r,i),o&&t.restore()},fillPolygon:function(t,e,n,r){r&&(t.save(),_s.setProperties(t,r)),ks(t,e,n),t.fill(),r&&t.restore()},strokePolygon:function(t,e,n,r){r&&(t.save(),_s.setProperties(t,r)),ks(t,e,n),t.stroke(),r&&t.restore()},fillText:function(t,e,n,r,i,o){if((i||o)&&t.save(),i&&_s.setProperties(t,i),o){for(var s in t.translate(n,r),o){var a=o[s];\"translate\"===s&&t.translate(a.x,a.y),\"rotate\"===s&&t.rotate(a.angle*Math.PI/180)}t.fillText(e,0,0)}else t.fillText(e,n,r);(i||o)&&t.restore()},strokeText:function(t,e,n,r,i,o){if((i||o)&&t.save(),i&&_s.setProperties(t,i),o){for(var s in t.translate(n,r),o){var a=o[s];\"translate\"===s&&t.translate(a.x,a.y),\"rotate\"===s&&t.rotate(a.angle*Math.PI/180)}t.strokeText(e,0,0)}else t.strokeText(e,n,r);(i||o)&&t.restore()},strokeCircle:function(t,e,n,r,i){i&&(t.save(),_s.setProperties(t,i)),t.beginPath(),t.arc(e,n,r,0,2*Math.PI),t.stroke(),i&&t.restore()},fillCircle:function(t,e,n,r,i){i&&(t.save(),_s.setProperties(t,i)),t.beginPath(),t.arc(e,n,r,0,2*Math.PI),t.fill(),i&&t.restore()},drawArrowhead:function(t,e,n,r,i){t.save(),r||(r=5),i&&(t.lineWidth=i),t.beginPath(),t.moveTo(e,n-r/2),t.lineTo(e,n+r/2),t.lineTo(e+r,n),t.lineTo(e,n-r/2),t.closePath(),t.fill(),t.restore()},dashedLine:function(t,e,n,r,i,o){let s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{};void 0===o&&(o=2),t.setLineDash([o,o]),_s.strokeLine(t,e,n,r,i,s),t.setLineDash([])},roundRect:function(t,e,n,r,i,o,s,a){void 0===a&&(a=!0),void 0===o&&(o=5),t.beginPath(),t.moveTo(e+o,n),t.lineTo(e+r-o,n),t.quadraticCurveTo(e+r,n,e+r,n+o),t.lineTo(e+r,n+i-o),t.quadraticCurveTo(e+r,n+i,e+r-o,n+i),t.lineTo(e+o,n+i),t.quadraticCurveTo(e,n+i,e,n+i-o),t.lineTo(e,n+o),t.quadraticCurveTo(e,n,e+o,n),t.closePath(),a&&t.stroke(),s&&t.fill()},polygon:function(t,e,n,r,i){void 0===i&&(i=!0),t.beginPath();var o=e.length;t.moveTo(e[0],n[0]);for(var s=1;s0&&Es[0]<4?1:+(Es[0]+Es[1])),!As&&ia&&(!(Es=ia.match(/Edge\\/(\\d+)/))||Es[1]>=74)&&(Es=ia.match(/Chrome\\/(\\d+)/))&&(As=+Es[1]);var la=As,ha=!!Object.getOwnPropertySymbols&&!Ms((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&la&&la<41})),ua=ha&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator,fa=Ls.Object,da=ua?function(t){return\"symbol\"==typeof t}:function(t){var e=na(\"Symbol\");return Js(e)&&ra(e.prototype,fa(t))},pa=Ls.String,ga=function(t){try{return pa(t)}catch(t){return\"Object\"}},ma=Ls.TypeError,va=function(t){if(Js(t))return t;throw ma(ga(t)+\" is not a function\")},ba=Ls.TypeError,wa=Object.defineProperty,ya=function(t,e){try{wa(Ls,t,{value:e,configurable:!0,writable:!0})}catch(n){Ls[t]=e}return e},xa=\"__core-js_shared__\",_a=Ls[xa]||ya(xa,{}),ka=Cs((function(t){(t.exports=function(t,e){return _a[t]||(_a[t]=void 0!==e?e:{})})(\"versions\",[]).push({version:\"3.22.4\",mode:\"global\",copyright:\"© 2014-2022 Denis Pushkarev (zloirock.ru)\",license:\"https://github.com/zloirock/core-js/blob/v3.22.4/LICENSE\",source:\"https://github.com/zloirock/core-js\"})})),Sa=Ls.Object,Ca=function(t){return Sa(Ks(t))},Ea=Us({}.hasOwnProperty),Aa=Object.hasOwn||function(t,e){return Ea(Ca(t),e)},Ta=0,La=Math.random(),Ma=Us(1..toString),Ra=function(t){return\"Symbol(\"+(void 0===t?\"\":t)+\")_\"+Ma(++Ta+La,36)},Ia=ka(\"wks\"),Na=Ls.Symbol,Pa=Na&&Na.for,Oa=ua?Na:Na&&Na.withoutSetter||Ra,Fa=function(t){if(!Aa(Ia,t)||!ha&&\"string\"!=typeof Ia[t]){var e=\"Symbol.\"+t;ha&&Aa(Na,t)?Ia[t]=Na[t]:Ia[t]=ua&&Pa?Pa(e):Oa(e)}return Ia[t]},Da=Ls.TypeError,Ba=Fa(\"toPrimitive\"),za=function(t,e){if(!ta(t)||da(t))return t;var n,r,i=null==(n=t[Ba])?void 0:va(n);if(i){if(void 0===e&&(e=\"default\"),r=Ps(i,t,e),!ta(r)||da(r))return r;throw Da(\"Can't convert object to primitive value\")}return void 0===e&&(e=\"number\"),function(t,e){var n,r;if(\"string\"===e&&Js(n=t.toString)&&!ta(r=Ps(n,t)))return r;if(Js(n=t.valueOf)&&!ta(r=Ps(n,t)))return r;if(\"string\"!==e&&Js(n=t.toString)&&!ta(r=Ps(n,t)))return r;throw ba(\"Can't convert object to primitive value\")}(t,e)},Ha=function(t){var e=za(t,\"string\");return da(e)?e:e+\"\"},Va=Ls.document,ja=ta(Va)&&ta(Va.createElement),Ua=function(t){return ja?Va.createElement(t):{}},qa=!Rs&&!Ms((function(){return 7!=Object.defineProperty(Ua(\"div\"),\"a\",{get:function(){return 7}}).a})),Wa=Object.getOwnPropertyDescriptor,$a={f:Rs?Wa:function(t,e){if(t=Qs(t),e=Ha(e),qa)try{return Wa(t,e)}catch(t){}if(Aa(t,e))return Bs(!Ps(Ds.f,t,e),t[e])}},Ga=Rs&&Ms((function(){return 42!=Object.defineProperty((function(){}),\"prototype\",{value:42,writable:!1}).prototype})),Za=Ls.String,Xa=Ls.TypeError,Ya=function(t){if(ta(t))return t;throw Xa(Za(t)+\" is not an object\")},Ka=Ls.TypeError,Qa=Object.defineProperty,Ja=Object.getOwnPropertyDescriptor,tc=\"enumerable\",ec=\"configurable\",nc=\"writable\",rc={f:Rs?Ga?function(t,e,n){if(Ya(t),e=Ha(e),Ya(n),\"function\"==typeof t&&\"prototype\"===e&&\"value\"in n&&nc in n&&!n.writable){var r=Ja(t,e);r&&r.writable&&(t[e]=n.value,n={configurable:ec in n?n.configurable:r.configurable,enumerable:tc in n?n.enumerable:r.enumerable,writable:!1})}return Qa(t,e,n)}:Qa:function(t,e,n){if(Ya(t),e=Ha(e),Ya(n),qa)try{return Qa(t,e,n)}catch(t){}if(\"get\"in n||\"set\"in n)throw Ka(\"Accessors not supported\");return\"value\"in n&&(t[e]=n.value),t}},ic=Rs?function(t,e,n){return rc.f(t,e,Bs(1,n))}:function(t,e,n){return t[e]=n,t},oc=Function.prototype,sc=Rs&&Object.getOwnPropertyDescriptor,ac=Aa(oc,\"name\"),cc={EXISTS:ac,PROPER:ac&&\"something\"===function(){}.name,CONFIGURABLE:ac&&(!Rs||Rs&&sc(oc,\"name\").configurable)},lc=Us(Function.toString);Js(_a.inspectSource)||(_a.inspectSource=function(t){return lc(t)});var hc,uc,fc,dc=_a.inspectSource,pc=Ls.WeakMap,gc=Js(pc)&&/native code/.test(dc(pc)),mc=ka(\"keys\"),vc=function(t){return mc[t]||(mc[t]=Ra(t))},bc={},wc=\"Object already initialized\",yc=Ls.TypeError,xc=Ls.WeakMap;if(gc||_a.state){var _c=_a.state||(_a.state=new xc),kc=Us(_c.get),Sc=Us(_c.has),Cc=Us(_c.set);hc=function(t,e){if(Sc(_c,t))throw new yc(wc);return e.facade=t,Cc(_c,t,e),e},uc=function(t){return kc(_c,t)||{}},fc=function(t){return Sc(_c,t)}}else{var Ec=vc(\"state\");bc[Ec]=!0,hc=function(t,e){if(Aa(t,Ec))throw new yc(wc);return e.facade=t,ic(t,Ec,e),e},uc=function(t){return Aa(t,Ec)?t[Ec]:{}},fc=function(t){return Aa(t,Ec)}}var Ac,Tc={set:hc,get:uc,has:fc,enforce:function(t){return fc(t)?uc(t):hc(t,{})},getterFor:function(t){return function(e){var n;if(!ta(e)||(n=uc(e)).type!==t)throw yc(\"Incompatible receiver, \"+t+\" required\");return n}}},Lc=Cs((function(t){var e=rc.f,n=cc.CONFIGURABLE,r=Tc.enforce,i=Tc.get,o=!Ms((function(){return 8!==e((function(){}),\"length\",{value:8}).length})),s=String(String).split(\"String\"),a=t.exports=function(t,i,a){\"Symbol(\"===String(i).slice(0,7)&&(i=\"[\"+String(i).replace(/^Symbol\\(([^)]*)\\)/,\"$1\")+\"]\"),a&&a.getter&&(i=\"get \"+i),a&&a.setter&&(i=\"set \"+i),(!Aa(t,\"name\")||n&&t.name!==i)&&e(t,\"name\",{value:i,configurable:!0}),o&&a&&Aa(a,\"arity\")&&t.length!==a.arity&&e(t,\"length\",{value:a.arity});var c=r(t);return Aa(c,\"source\")||(c.source=s.join(\"string\"==typeof i?i:\"\")),t};Function.prototype.toString=a((function(){return Js(this)&&i(this).source||dc(this)}),\"toString\")})),Mc=function(t,e,n,r){var i=!!r&&!!r.unsafe,o=!!r&&!!r.enumerable,s=!!r&&!!r.noTargetGet,a=r&&void 0!==r.name?r.name:e;return Js(n)&&Lc(n,a,r),t===Ls?(o?t[e]=n:ya(e,n),t):(i?!s&&t[e]&&(o=!0):delete t[e],o?t[e]=n:ic(t,e,n),t)},Rc=Math.ceil,Ic=Math.floor,Nc=function(t){var e=+t;return e!=e||0===e?0:(e>0?Ic:Rc)(e)},Pc=Math.max,Oc=Math.min,Fc=Math.min,Dc=function(t){return(e=t.length)>0?Fc(Nc(e),9007199254740991):0;var e},Bc=function(t){return function(e,n,r){var i,o=Qs(e),s=Dc(o),a=function(t,e){var n=Nc(t);return n<0?Pc(n+e,0):Oc(n,e)}(r,s);if(t&&n!=n){for(;s>a;)if((i=o[a++])!=i)return!0}else for(;s>a;a++)if((t||a in o)&&o[a]===n)return t||a||0;return!t&&-1}},zc={includes:Bc(!0),indexOf:Bc(!1)},Hc=zc.indexOf,Vc=Us([].push),jc=function(t,e){var n,r=Qs(t),i=0,o=[];for(n in r)!Aa(bc,n)&&Aa(r,n)&&Vc(o,n);for(;e.length>i;)Aa(r,n=e[i++])&&(~Hc(o,n)||Vc(o,n));return o},Uc=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"],qc=Uc.concat(\"length\",\"prototype\"),Wc={f:Object.getOwnPropertyNames||function(t){return jc(t,qc)}},$c={f:Object.getOwnPropertySymbols},Gc=Us([].concat),Zc=na(\"Reflect\",\"ownKeys\")||function(t){var e=Wc.f(Ya(t)),n=$c.f;return n?Gc(e,n(t)):e},Xc=function(t,e,n){for(var r=Zc(e),i=rc.f,o=$a.f,s=0;ss;)rc.f(t,n=i[s++],r[n]);return t},al={f:sl},cl=na(\"document\",\"documentElement\"),ll=vc(\"IE_PROTO\"),hl=function(){},ul=function(t){return\"\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display_quiz(\"Tutorial3/LessonImages/DiffPeaks.json\")" + ] + }, + { + "cell_type": "markdown", + "id": "21691ec7-e2d0-474f-939e-ddc84b046452", + "metadata": {}, + "source": [ + "### Consider the below peak which was identified in both the control and mutant sample. A simple intersect would result in this peak being reported as unchanged between the two samples. To represent the differences we will use [manorm](https://anaconda.org/bioconda/manormfast).\n", + "\n", + "\"Drawing\"\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "17cea9d5-2b65-4513-bba3-7e2970c90aa9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "done\n" + ] + } + ], + "source": [ + "#We specify several non-default parameters to better reflect ATAC-seq data\n", + "!manorm --p1 Tutorial3/InputFiles/CTL_peaks.narrowPeak --p2 Tutorial3/InputFiles/Mutant_peaks.narrowPeak --r1 Tutorial3/InputFiles/CTL_dedup.bam --r2 Tutorial3/InputFiles/Mutant_dedup.bam --rf bam --n1 CTL --n2 Mutant --pe -w 1000 -o Tutorial3/DiffPeaks --wa 2> Tutorial3/DiffPeaks/log_manorm.txt\n", + "print(\"done\")" + ] + }, + { + "cell_type": "markdown", + "id": "1e61bd4a-26e2-4ce6-a719-6b8c51ed9dca", + "metadata": {}, + "source": [ + "The above command will write out several files including the differential peaks for each sample as well as the unchanged peaks." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "a51f1ba8-3bf0-4715-bb97-4a029352a3cd", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CTL_vs_Mutant_M_above_1.0_biased_peaks.bed CTL_vs_Mutant_unbiased_peaks.bed\n", + "CTL_vs_Mutant_M_below_-1.0_biased_peaks.bed\n" + ] + } + ], + "source": [ + "!ls Tutorial3/DiffPeaks/output_filters" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "4d7d7656-9e43-4cce-a173-fee9b0a82dfa", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "chr4\t52059325\t52059732\tCTL_unique\t2.20155\n", + "chr4\t52298589\t52298799\tCTL_unique\t1.09775\n", + "chr4\t52550105\t52550494\tCTL_unique\t1.29536\n", + "chr4\t52698223\t52698464\tCTL_unique\t1.84416\n", + "chr4\t52834103\t52834470\tCTL_unique\t1.26119\n", + "chr4\t52884232\t52884622\tCTL_unique\t1.09835\n", + "chr4\t52968329\t52968671\tCTL_unique\t1.41519\n", + "chr4\t52993914\t52994157\tCTL_unique\t1.22576\n", + "chr4\t53595301\t53595477\tCTL_unique\t1.20393\n", + "chr4\t53702525\t53703113\tCTL_unique\t1.07373\n" + ] + } + ], + "source": [ + "#Let's also check the format of these files\n", + "!head Tutorial3/DiffPeaks/output_filters/CTL_vs_Mutant_M_above_1.0_biased_peaks.bed" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "42d1dbc3-7708-4907-8089-a76fee983a3e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 124 Tutorial3/DiffPeaks/output_filters/CTL_vs_Mutant_M_above_1.0_biased_peaks.bed\n", + " 74 Tutorial3/DiffPeaks/output_filters/CTL_vs_Mutant_M_below_-1.0_biased_peaks.bed\n", + " 590 Tutorial3/DiffPeaks/output_filters/CTL_vs_Mutant_unbiased_peaks.bed\n", + " 788 total\n" + ] + } + ], + "source": [ + "#We can also count how many are in each.\n", + "!wc -l Tutorial3/DiffPeaks/output_filters/*bed" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "ff40bca1-bef8-48c8-8c9b-033ac6fec8c7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==== Stats ====\n", + "Total read pairs of sample 1: 167,920\n", + "Total read pairs of sample 2: 219,380\n", + "Total peaks of sample 1: 650 (unique: 277 common: 373)\n", + "Total peaks of sample 2: 560 (unique: 190 common: 370)\n", + "Number of merged common peaks: 369\n", + "M-A model: M = -0.04460 * A +0.18904\n", + "590 peaks are filtered as unbiased peaks\n", + "124 peaks are filtered as sample1-biased peaks\n", + "74 peaks are filtered as sample2-biased peaks\n" + ] + } + ], + "source": [ + "#Our log file tells us this information as well\n", + "!tail Tutorial3/DiffPeaks/log_manorm.txt" + ] + }, + { + "cell_type": "markdown", + "id": "f2832435-d335-476e-9bef-1c71797f10c7", + "metadata": {}, + "source": [ + "
\n", + "Annotating Peaks\n", + "
\n", + "\n", + "Let's take the differential peaks and annotate them with nearby genes and perform gene ontology using [homer](https://anaconda.org/bioconda/homer).\n", + "\n", + "First we need to reformat the differential peaks file to the format required by homer.\n", + "\n", + "In an earlier command, we examined the format of manorm's ouput using head and saw that it outputs a five column format. We will change this to a 6 column bed format including a unique name for each peak." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "7029964f-05bb-40e1-a007-69387a33485e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "chr4\t52059325\t52059732\tCTL_unique_1\t2.20155\t+\n", + "chr4\t52298589\t52298799\tCTL_unique_2\t1.09775\t+\n", + "chr4\t52550105\t52550494\tCTL_unique_3\t1.29536\t+\n", + "chr4\t52698223\t52698464\tCTL_unique_4\t1.84416\t+\n", + "chr4\t52834103\t52834470\tCTL_unique_5\t1.26119\t+\n", + "chr4\t52884232\t52884622\tCTL_unique_6\t1.09835\t+\n", + "chr4\t52968329\t52968671\tCTL_unique_7\t1.41519\t+\n", + "chr4\t52993914\t52994157\tCTL_unique_8\t1.22576\t+\n", + "chr4\t53595301\t53595477\tCTL_unique_9\t1.20393\t+\n", + "chr4\t53702525\t53703113\tCTL_unique_10\t1.07373\t+\n" + ] + } + ], + "source": [ + "#This command will reformat the peaks file including the line number in naming the peaks (NR) as well as a place-holder strand in the 6th column (note that peaks don't necessarily have a strand, but the format requires this column). The -F \\t tells awk that the file is tab delimited.\n", + "!awk '{print $1\"\\t\"$2\"\\t\"$3\"\\t\"$4\"_\"NR\"\\t\"$5\"\\t+\"}' Tutorial3/DiffPeaks/output_filters/CTL_vs_Mutant_M_above_1.0_biased_peaks.bed > Tutorial3/GenomeAnnotation/CTL_specific_peaks.bed\n", + "#Let's head this to compare\n", + "!head Tutorial3/GenomeAnnotation/CTL_specific_peaks.bed" + ] + }, + { + "cell_type": "markdown", + "id": "0996284a-06bd-43f2-ae7b-ed6807e5623c", + "metadata": {}, + "source": [ + "Now let's configure homer to recognize our genome build. We aligned our reads to hg38, so we'll have homer use that." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "32334764-854f-4739-a178-4273997248a2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "done\n" + ] + } + ], + "source": [ + "!perl /opt/conda/share/homer/configureHomer.pl -install hg38 2> Tutorial3/DiffPeaks/homer_log1.txt\n", + "print(\"done\")" + ] + }, + { + "cell_type": "markdown", + "id": "b3f00783-28c0-4032-a841-42a5da716536", + "metadata": {}, + "source": [ + "Let's use that reformatted peak file to get nearby genes and perform gene onotology analysis." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "a79558d5-24a2-4b4c-9795-48af65cf6545", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\tPeak file = Tutorial3/GenomeAnnotation/CTL_specific_peaks.bed\n", + "\tGenome = hg38\n", + "\tOrganism = human\n", + "\tWill perform Gene Ontology analysis - output to directory = Tutorial3/GenomeAnnotation/CTL_GO\n", + "\tPeak/BED file conversion summary:\n", + "\t\tBED/Header formatted lines: 124\n", + "\t\tpeakfile formatted lines: 0\n", + "\t\tDuplicated Peak IDs: 0\n", + "\n", + "\tPeak File Statistics:\n", + "\t\tTotal Peaks: 124\n", + "\t\tRedundant Peak IDs: 0\n", + "\t\tPeaks lacking information: 0 (need at least 5 columns per peak)\n", + "\t\tPeaks with misformatted coordinates: 0 (should be integer)\n", + "\t\tPeaks with misformatted strand: 0 (should be either +/- or 0/1)\n", + "\n", + "\tPeak file looks good!\n", + "\n", + "\tReading Positions...\n", + "\t-----------------------\n", + "\tFinding Closest TSS...\n", + "\tAnnotating:.\n", + "\t\tAnnotation\tNumber of peaks\tTotal size (bp)\tLog2 Ratio (obs/exp)\tLogP enrichment (+values depleted)\n", + "\t\t3UTR\t0.0\t1226327\t-0.852\t0.802\n", + "\t\tmiRNA\t0.0\t3258\t-0.003\t0.002\n", + "\t\tncRNA\t0.0\t315963\t-0.271\t0.206\n", + "\t\tTTS\t1.0\t1306500\t0.231\t-0.554\n", + "\t\tpseudo\t0.0\t40049\t-0.037\t0.026\n", + "\t\tExon\t0.0\t1490268\t-0.985\t0.975\n", + "\t\tIntron\t33.0\t73166083\t-0.532\t5.597\n", + "\t\tIntergenic\t84.0\t111121736\t0.213\t-3.865\n", + "\t\tPromoter\t5.0\t1403974\t2.450\t-6.038\n", + "\t\t5UTR\t1.0\t114432\t3.745\t-2.632\n", + "\tNOTE: If this part takes more than 2 minutes, there is a good chance\n", + "\t\tyour machine ran out of memory: consider hitting ctrl+C and rerunning\n", + "\t\tthe command with \"-noann\"\n", + "\tAnnotating:.\n", + "\t\tAnnotation\tNumber of peaks\tTotal size (bp)\tLog2 Ratio (obs/exp)\tLogP enrichment (+values depleted)\n", + "\t\t3UTR\t0.0\t1226327\t-0.852\t0.802\n", + "\t\tRetroposon\t0.0\t200838\t-0.178\t0.131\n", + "\t\tRC?\t0.0\t2850\t-0.003\t0.002\n", + "\t\tRNA\t0.0\t6910\t-0.006\t0.005\n", + "\t\tmiRNA\t0.0\t3258\t-0.003\t0.002\n", + "\t\tncRNA\t0.0\t315963\t-0.271\t0.206\n", + "\t\tTTS\t1.0\t1306500\t0.232\t-0.554\n", + "\t\tLINE\t18.0\t45014382\t-0.705\t4.777\n", + "\t\tsrpRNA\t0.0\t13945\t-0.013\t0.009\n", + "\t\tSINE\t6.0\t18936280\t-1.041\t3.470\n", + "\t\tRC\t0.0\t20949\t-0.020\t0.014\n", + "\t\ttRNA\t0.0\t2852\t-0.003\t0.002\n", + "\t\tDNA?\t0.0\t27318\t-0.025\t0.018\n", + "\t\tpseudo\t0.0\t40049\t-0.037\t0.026\n", + "\t\tDNA\t1.0\t6724040\t-2.132\t2.750\n", + "\t\tExon\t0.0\t1490268\t-0.985\t0.975\n", + "\t\tIntron\t25.0\t38474934\t-0.005\t0.605\n", + "\t\tIntergenic\t39.0\t48657251\t0.298\t-2.484\n", + "\t\tPromoter\t5.0\t1403974\t2.450\t-6.038\n", + "\t\t5UTR\t1.0\t114432\t3.745\t-2.632\n", + "\t\tLTR?\t0.0\t92183\t-0.084\t0.060\n", + "\t\tscRNA\t0.0\t6881\t-0.006\t0.004\n", + "\t\tCpG-Island\t0.0\t373419\t-0.315\t0.244\n", + "\t\tLow_complexity\t0.0\t365373\t-0.309\t0.238\n", + "\t\tLTR\t27.0\t20757981\t0.997\t-7.957\n", + "\t\tSimple_repeat\t1.0\t2265635\t-0.563\t0.572\n", + "\t\tsnRNA\t0.0\t18664\t-0.017\t0.012\n", + "\t\tUnknown\t0.0\t49238\t-0.046\t0.032\n", + "\t\tSINE?\t0.0\t130\t-0.000\t0.000\n", + "\t\tSatellite\t0.0\t2306654\t-1.335\t1.513\n", + "\t\trRNA\t0.0\t7760\t-0.007\t0.005\n", + "\tPerforming Gene Ontology Analysis...\n", + "rm: cannot remove '0.710786658429669.bg.tmp': No such file or directory\n", + "\tCounting Tags in Peaks from each directory...\n", + "\tOrganism: human\n", + "\tLoading Gene Informaiton...\n", + "\tOutputing Annotation File...\n", + "\tDone annotating peaks file\n", + "\n" + ] + } + ], + "source": [ + "!annotatePeaks.pl Tutorial3/GenomeAnnotation/CTL_specific_peaks.bed hg38 -go Tutorial3/GenomeAnnotation/CTL_GO -annStats Tutorial3/GenomeAnnotation/CTL_annStats.txt > Tutorial3/GenomeAnnotation/CTL_specific_Annotated.txt" + ] + }, + { + "cell_type": "markdown", + "id": "ccb425f8-7be0-4854-9344-48479b57ab70", + "metadata": {}, + "source": [ + "Let's look at the output files. First, let's look at the first 2 lines of at our annotation stats." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "efa56f92-b6be-42dc-a3df-65a03b201e93", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
annotationpeakcountsizefoldenrichmentlog10significance
15UTR1.01144323.745-2.632
14Promoter5.014039742.450-6.038
11LTR27.0207579810.997-7.957
6Intergenic39.0486572510.298-2.484
24TTS1.013065000.232-0.554
23TTS1.013065000.231-0.554
7Intergenic84.01111217360.213-3.865
20SINE?0.0130-0.0000.000
33tRNA0.02852-0.0030.002
26miRNA0.03258-0.0030.002
16RC?0.02850-0.0030.002
8Intron25.038474934-0.0050.605
30scRNA0.06881-0.0060.004
17RNA0.06910-0.0060.005
29rRNA0.07760-0.0070.005
32srpRNA0.013945-0.0130.009
31snRNA0.018664-0.0170.012
15RC0.020949-0.0200.014
4DNA?0.027318-0.0250.018
28pseudo0.040049-0.0370.026
25Unknown0.049238-0.0460.032
12LTR?0.092183-0.0840.060
18Retroposon0.0200838-0.1780.131
27ncRNA0.0315963-0.2710.206
13Low_complexity0.0365373-0.3090.238
2CpG-Island0.0373419-0.3150.244
9Intron33.073166083-0.5325.597
22Simple_repeat1.02265635-0.5630.572
10LINE18.045014382-0.7054.777
03UTR0.01226327-0.8520.802
5Exon0.01490268-0.9850.975
19SINE6.018936280-1.0413.470
21Satellite0.02306654-1.3351.513
3DNA1.06724040-2.1322.750
\n", + "
" + ], + "text/plain": [ + " annotation peakcount size foldenrichment log10significance\n", + "1 5UTR 1.0 114432 3.745 -2.632\n", + "14 Promoter 5.0 1403974 2.450 -6.038\n", + "11 LTR 27.0 20757981 0.997 -7.957\n", + "6 Intergenic 39.0 48657251 0.298 -2.484\n", + "24 TTS 1.0 1306500 0.232 -0.554\n", + "23 TTS 1.0 1306500 0.231 -0.554\n", + "7 Intergenic 84.0 111121736 0.213 -3.865\n", + "20 SINE? 0.0 130 -0.000 0.000\n", + "33 tRNA 0.0 2852 -0.003 0.002\n", + "26 miRNA 0.0 3258 -0.003 0.002\n", + "16 RC? 0.0 2850 -0.003 0.002\n", + "8 Intron 25.0 38474934 -0.005 0.605\n", + "30 scRNA 0.0 6881 -0.006 0.004\n", + "17 RNA 0.0 6910 -0.006 0.005\n", + "29 rRNA 0.0 7760 -0.007 0.005\n", + "32 srpRNA 0.0 13945 -0.013 0.009\n", + "31 snRNA 0.0 18664 -0.017 0.012\n", + "15 RC 0.0 20949 -0.020 0.014\n", + "4 DNA? 0.0 27318 -0.025 0.018\n", + "28 pseudo 0.0 40049 -0.037 0.026\n", + "25 Unknown 0.0 49238 -0.046 0.032\n", + "12 LTR? 0.0 92183 -0.084 0.060\n", + "18 Retroposon 0.0 200838 -0.178 0.131\n", + "27 ncRNA 0.0 315963 -0.271 0.206\n", + "13 Low_complexity 0.0 365373 -0.309 0.238\n", + "2 CpG-Island 0.0 373419 -0.315 0.244\n", + "9 Intron 33.0 73166083 -0.532 5.597\n", + "22 Simple_repeat 1.0 2265635 -0.563 0.572\n", + "10 LINE 18.0 45014382 -0.705 4.777\n", + "0 3UTR 0.0 1226327 -0.852 0.802\n", + "5 Exon 0.0 1490268 -0.985 0.975\n", + "19 SINE 6.0 18936280 -1.041 3.470\n", + "21 Satellite 0.0 2306654 -1.335 1.513\n", + "3 DNA 1.0 6724040 -2.132 2.750" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#Clean up duplicate entries\n", + "!sort -u Tutorial3/GenomeAnnotation/CTL_annStats.txt | grep -v Annotation > Tutorial3/GenomeAnnotation/CTL_annStats_clean.txt\n", + "\n", + "#Load results into a pandas table\n", + "annstats = pd.read_csv(\"Tutorial3/GenomeAnnotation/CTL_annStats_clean.txt\", sep='\\t', header=None, names=['annotation','peakcount','size','foldenrichment','log10significance'])\n", + "\n", + "#View entries sorted by enrichment\n", + "annstats_sorted = annstats.sort_values(by=[\"foldenrichment\"], ascending=False)\n", + "display(annstats_sorted)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "74893643-1429-4894-afeb-e4af6d745a1d", + "metadata": {}, + "source": [ + "From this we can see highest enrichment in 5' UTRs and promoters.\n", + "\n", + "Let's plot the results as a barplot.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "4fe8630e-b47a-4bb4-b9c1-80c6e93f1644", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXMAAAFOCAYAAAB0Xv3hAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAA7wElEQVR4nO2deZgdVdH/P5UQCUvCGlkMIYALKIQAYZNN2dQXRRCQTQREAeWVTdxQAfVVUUAFN0TZFIQfYVUQ2QwJq5CQEJaAQAgaVAgoEHYD9fujzs309PSd23eZzEzn+3meeebe7upTp/uerj5dp04dc3eEEEIMbob0dwWEEEK0j4y5EEJUABlzIYSoADLmQghRAWTMhRCiAsiYCyFEBeiYMTezoWY23cyu7lSZQgghytHJnvlRwKwOlieEEKIkS3SiEDMbDewCfAc4tpH8yiuv7GPHju2EaiGEWGyYNm3aM+4+qmhfR4w58GPgS8CIegJmdihwKMCYMWOYOnVqh1QLIcTigZk9UW9f224WM/sw8LS7T+tNzt3PcvcJ7j5h1KjCB4sQQogW6YTPfCtgVzObA1wMbG9mF3SgXCGEECVp25i7+1fdfbS7jwX2Af7s7p9ou2ZCCCFK0ymfuRBigPHf//6XuXPn8uqrr/Z3VUSTDB8+nNGjRzNs2LDSx3TUmLv7zcDNnSxTCNEac+fOZcSIEYwdOxYz6+/qiJK4O88++yxz585lrbXWKn2cZoAKUVFeffVVVlppJRnyQYaZsdJKKzX9RiVjLkSFkSEfnLTyu8mYCyFEBejXAdCxX7mmx7Y5J+/SDzURovoU3W/tUOZePeOMM/jFL37BxhtvzIUXXthj/3nnncfUqVP56U9/2mPfsssuy4svvtiRup555pksvfTSfPKTnyzcf/PNN3Pqqady9dWLLrXUeeedx84778zqq6/ekfIUzSKE6DN+/vOfc+211zY1kNdpFixYwOGHH95v+utx3nnnsf7663fMmMvNIoToEw4//HBmz57NrrvuymmnncZuu+3GuHHj2GKLLZg5c2YP+ccff5wtt9ySTTfdlG984xvd9p1yyilsuummjBs3jhNPPBGAOXPmsN566/GZz3yG97znPey888688sorALzvfe/j+OOPZ7vttuP000/npJNO4tRTTwXg0UcfZccdd2TDDTdk44035rHHHgPgxRdfZM8992Tddddl//33p7bY/dixYzn++OPZcsstmTBhAvfccw8f+MAHWGeddTjzzDNbquOll17K1KlT2X///Rk/fvzCereDjLkQok8488wzWX311Zk0aRJz5sxho402YubMmXz3u98tdHccddRRfPazn+Xuu+9m1VVXXbj9+uuv55FHHuGuu+5ixowZTJs2jSlTpgDwyCOPcMQRR/DAAw+w/PLLc9llly087rnnnmPy5Ml84Qtf6KZn//3354gjjuDee+/l9ttvZ7XVVgNg+vTp/PjHP+bBBx9k9uzZ3HbbbQuPWWONNbjjjjvYZpttOOigg7j00ku58847OeGEE1qq45577smECRO48MILmTFjBksttVTb11vGXAjR59x6660ccMABAGy//fY8++yzPP/8891kbrvtNvbdd1+AhbIQhvL6669no402YuONN+ahhx7ikUceAWCttdZi/PjxAGyyySbMmTNn4XF77713j3rMnz+fJ598kt133x2IyTlLL700AJttthmjR49myJAhjB8/vltZu+66KwAbbLABm2++OSNGjGDUqFEMHz6c5557ruU6dhL5zIUQfU7NZZGlKPyuaJu789WvfpXDDjus2/Y5c+aw5JJLLvw+dOjQbu6KZZZZplQ9auTLWrBgQY99Q4YM6SY3ZMgQFixY0HIdO4l65kKIPmfbbbddGM1y8803s/LKKzNy5MhuMltttRUXX3wxQLfIlw984AOcc845CyNbnnzySZ5++umW6jFy5EhGjx7NlVdeCcBrr73Gyy+/3FJZWVqp44gRI5g/f37bumuoZy7EYkJ/hv2edNJJHHzwwYwbN46ll16a888/v4fM6aefzn777cfpp5/OHnvssXD7zjvvzKxZs9hyyy2BCFm84IILGDp0aEt1+e1vf8thhx3GCSecwLBhw5g4cWJrJ5WhlToedNBBHH744Sy11FLccccdbfvNrbfXjr5iwoQJPnXqVMWZC9GHzJo1i/XWW6+/qyFapOj3M7Np7j6hSF5uFiGEqAAy5kIIUQFkzIWoMP3hRhXt08rvJmMuREUZPnw4zz77rAz6IKOWz3z48OFNHadoFiEqyujRo5k7dy7z5s3r76qIJqmtNNQMMuZCVJRhw4b1a4IrsWiRm0UIISqAjLkQQlQAGXMhhKgAMuZCCFEBZMyFEKICyJgLIUQFkDEXQogK0LYx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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "annstats_sorted.plot.bar(x=\"annotation\", y=\"foldenrichment\")" + ] + }, + { + "cell_type": "markdown", + "id": "ddd988cb-5409-4734-bcf7-5a740a9e9a96", + "metadata": {}, + "source": [ + "Homer also outputs the nearest annotation for each peak. Let's look at the first few lines of our annotation file." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "bff56b0d-72a8-4532-b1f7-fa4f064f2c91", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "PeakID (cmd=annotatePeaks.pl Tutorial3/GenomeAnnotation/CTL_specific_peaks.bed hg38 -go Tutorial3/GenomeAnnotation/CTL_GO -annStats Tutorial3/GenomeAnnotation/CTL_annStats.txt)\tChr\tStart\tEnd\tStrand\tPeak Score\tFocus Ratio/Region Size\tAnnotation\tDetailed Annotation\tDistance to TSS\tNearest PromoterID\tEntrez ID\tNearest Unigene\tNearest Refseq\tNearest Ensembl\tGene Name\tGene Alias\tGene Description\tGene Type\n", + "CTL_unique_56\tchr4\t64144792\t64145494\t+\t3.01611\tNA\tIntergenic\tHERVK11-int|LTR|ERVK\t264307\tNM_001010874\t253017\tHs.227752\tNM_001010874\tENSG00000205678\tTECRL\tCPVT3|GPSN2L|SRD5A2L2|TERL\ttrans-2,3-enoyl-CoA reductase like\tprotein-coding\n", + "merged_common_90\tchr4\t54545647\t54546360\t+\t2.38644\tNA\tIntergenic\tIntergenic\t61128\tNR_134657\t339978\t\tNR_134657\tENSG00000250456\tLINC02260\t-\tlong intergenic non-protein coding RNA 2260\tncRNA\n", + "CTL_unique_51\tchr4\t62835674\t62836120\t+\t2.34453\tNA\tIntergenic\tIntergenic\t-674132\tNR_110595\t101927186\tHs.723269\tNR_110595\t\tADGRL3-AS1\tLPHN3-AS1\tadhesion G protein-coupled receptor L3 antisense RNA 1\tncRNA\n" + ] + } + ], + "source": [ + "!head -4 Tutorial3/GenomeAnnotation/CTL_specific_Annotated.txt" + ] + }, + { + "cell_type": "markdown", + "id": "7193cee9-f1cc-40b5-84be-a1aae44bd217", + "metadata": {}, + "source": [ + "Lastly, let's take a look at the gene ontology results" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "59b16ae4-3d55-4363-8d27-4d812a98b115", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "biocyc.txt\t\tinteractions.txt\t prints.txt\n", + "biological_process.txt\tinterpro.txt\t\t prosite.txt\n", + "cellular_component.txt\tkegg.txt\t\t reactome.txt\n", + "chromosome.txt\t\tlipidmaps.txt\t\t smart.txt\n", + "cosmic.txt\t\tmolecular_function.txt\t smpdb.txt\n", + "gene3d.txt\t\tmsigdb.txt\t\t wikipathways.txt\n", + "geneOntology.html\tpathwayInteractionDB.txt\n", + "gwas.txt\t\tpfam.txt\n" + ] + } + ], + "source": [ + "#list the files in our GO directory\n", + "!ls Tutorial3/GenomeAnnotation/CTL_GO/" + ] + }, + { + "cell_type": "markdown", + "id": "b2ea0509-a6a4-4df0-8d69-dec674e7e3f1", + "metadata": {}, + "source": [ + "Let's view the top terms in the biological_process category." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "98cdaf7b-a83b-40de-bff4-9587642d60fb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TermIDTermEnrichmentlogPGenes in TermTarget Genes in TermFraction of Targets in TermTotal Target GenesTotal GenesEntrez Gene IDsGene Symbols
0GO:0052695cellular glucuronidation8.476896e-07-13.9807511830.15201868079799,10941,7364UGT2A3,UGT2A1,UGT2B7
1GO:0006063uronic acid metabolic process1.833506e-06-13.2092802330.15201868079799,7364,10941UGT2A3,UGT2B7,UGT2A1
2GO:0019585glucuronate metabolic process1.833506e-06-13.2092802330.15201868079799,10941,7364UGT2A3,UGT2A1,UGT2B7
3GO:0010817regulation of hormone levels1.370570e-05-11.19769952860.3020186806783,5978,9575,7364,27284,2044SULT1E1,REST,CLOCK,UGT2B7,SULT1B1,EPHA5
4GO:0006068ethanol catabolic process7.141780e-05-9.5469631220.10201868027284,6783SULT1B1,SULT1E1
5GO:0034310primary alcohol catabolic process1.134005e-04-9.0845851520.1020186806783,27284SULT1E1,SULT1B1
6GO:0051923sulfation1.295173e-04-8.9516961620.10201868027284,6783SULT1B1,SULT1E1
7GO:0006067ethanol metabolic process2.259286e-04-8.3952912120.10201868027284,6783SULT1B1,SULT1E1
8GO:00504273'-phosphoadenosine 5'-phosphosulfate metaboli...2.963633e-04-8.1239252420.10201868027284,6783SULT1B1,SULT1E1
9GO:0034035purine ribonucleoside bisphosphate metabolic p...3.219272e-04-8.0411852520.1020186806783,27284SULT1E1,SULT1B1
\n", + "
" + ], + "text/plain": [ + " TermID Term \\\n", + "0 GO:0052695 cellular glucuronidation \n", + "1 GO:0006063 uronic acid metabolic process \n", + "2 GO:0019585 glucuronate metabolic process \n", + "3 GO:0010817 regulation of hormone levels \n", + "4 GO:0006068 ethanol catabolic process \n", + "5 GO:0034310 primary alcohol catabolic process \n", + "6 GO:0051923 sulfation \n", + "7 GO:0006067 ethanol metabolic process \n", + "8 GO:0050427 3'-phosphoadenosine 5'-phosphosulfate metaboli... \n", + "9 GO:0034035 purine ribonucleoside bisphosphate metabolic p... \n", + "\n", + " Enrichment logP Genes in Term Target Genes in Term \\\n", + "0 8.476896e-07 -13.980751 18 3 \n", + "1 1.833506e-06 -13.209280 23 3 \n", + "2 1.833506e-06 -13.209280 23 3 \n", + "3 1.370570e-05 -11.197699 528 6 \n", + "4 7.141780e-05 -9.546963 12 2 \n", + "5 1.134005e-04 -9.084585 15 2 \n", + "6 1.295173e-04 -8.951696 16 2 \n", + "7 2.259286e-04 -8.395291 21 2 \n", + "8 2.963633e-04 -8.123925 24 2 \n", + "9 3.219272e-04 -8.041185 25 2 \n", + "\n", + " Fraction of Targets in Term Total Target Genes Total Genes \\\n", + "0 0.15 20 18680 \n", + "1 0.15 20 18680 \n", + "2 0.15 20 18680 \n", + "3 0.30 20 18680 \n", + "4 0.10 20 18680 \n", + "5 0.10 20 18680 \n", + "6 0.10 20 18680 \n", + "7 0.10 20 18680 \n", + "8 0.10 20 18680 \n", + "9 0.10 20 18680 \n", + "\n", + " Entrez Gene IDs Gene Symbols \n", + "0 79799,10941,7364 UGT2A3,UGT2A1,UGT2B7 \n", + "1 79799,7364,10941 UGT2A3,UGT2B7,UGT2A1 \n", + "2 79799,10941,7364 UGT2A3,UGT2A1,UGT2B7 \n", + "3 6783,5978,9575,7364,27284,2044 SULT1E1,REST,CLOCK,UGT2B7,SULT1B1,EPHA5 \n", + "4 27284,6783 SULT1B1,SULT1E1 \n", + "5 6783,27284 SULT1E1,SULT1B1 \n", + "6 27284,6783 SULT1B1,SULT1E1 \n", + "7 27284,6783 SULT1B1,SULT1E1 \n", + "8 27284,6783 SULT1B1,SULT1E1 \n", + "9 6783,27284 SULT1E1,SULT1B1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "bp_GO = pd.read_csv(\"Tutorial3/GenomeAnnotation/CTL_GO/biological_process.txt\", sep='\\t')\n", + "\n", + "#keep most significant\n", + "bp_GO_top10 = bp_GO.nsmallest(10, \"logP\")\n", + "display(bp_GO_top10)" + ] + }, + { + "cell_type": "markdown", + "id": "d86df868-6af0-4bf9-880f-62142230bdc4", + "metadata": {}, + "source": [ + "We can also plot the enrichment scores\n", + "\n", + "Note that our results may look a little odd because we have severely downsampled the data to run quickly and focus on a single region of chr4. " + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "0aec57a7-412d-41fd-8aea-d8b164faa49b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY0AAAIiCAYAAAA0BZR3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAABap0lEQVR4nO3deZwcVbn/8c83IRAEwhoQCZCoEWU3CRgWUVEQlE0UBVE2rwiiuPxcQOWiuOGugIK4REAB8SoSBWWTsIqSQCCslwiouSCbCGEn8Pz+OKeTTmcyUxm6TxWZ7/v16ld3VXf1eaZmpp+usyoiMDMzq2JY3QGYmdkLh5OGmZlV5qRhZmaVOWmYmVllThpmZlaZk4aZmVW2TN0B9Noaa6wRY8eOrTsMM7MXlBkzZjwQEaM79y/1SWPs2LFMnz697jDMzF5QJP29r/2unjIzs8qcNMzMrDInDTMzq2ypb9PoyzPPPMOcOXN48skn6w5lSBg5ciRjxoxhxIgRdYdiZs/TkEwac+bMYaWVVmLs2LFIqjucpVpE8OCDDzJnzhzGjRtXdzhm9jwNyeqpJ598ktVXX90JowBJrL766r6qM1tKDMmkAThhFORzbbb0GLJJo27Dhw9n8803n3879thjl+j46dOnc/jhh/f7mhVXXPH5hLjEpk2bxlVXXVW0TDMra0i2aXQae8S5XX2/u45964CvWX755Zk5c+ag3n/evHlMmjSJSZMmDer4Xpk2bRorrrgiW2+9dd2hmC21uvF5VeUzanF8pdEwY8eO5eijj2bChAlssskm3HrrrQB8/vOf5+CDD2bHHXdkv/32Y9q0aeyyyy4APProoxx44IFssskmbLrppvz617+e/36f/exn2WyzzZg8eTL33nsvAAcccACHHnoob3jDG3jpS1/KpZdeykEHHcSrXvUqDjjggPnHXnDBBWy11VZMmDCBvfbai0cffXSxMd51112cdNJJfOc732HzzTfn8ssvL3TGzKwkJ42aPPHEEwtVT/3yl7+c/9waa6zBtddey6GHHso3v/nN+ftnzJjBOeecw+mnn77Qe33xi19k5ZVXZtasWdxwww1sv/32ADz22GNMnjyZ66+/nu22244f/ehH84956KGH+NOf/sR3vvMddt11Vz72sY9x0003MWvWLGbOnMkDDzzAl770JS666CKuvfZaJk2axLe//e3Fxjh27FgOOeQQPvaxjzFz5kxe+9rX9urUmVmNXD1Vk/6qp/bcc08AJk6cyG9+85v5+3fbbTeWX375RV5/0UUXceaZZ87fXnXVVQFYdtll51+NTJw4kQsvvHD+a3bddVcksckmm7DWWmuxySabALDRRhtx1113MWfOHG6++Wa22WYbAJ5++mm22mqrAWM0s6Wbk0YDLbfcckBqLJ83b978/SussEKfr4+IPnsojRgxYv7+zvdqlTFs2LD5j1vb8+bNY/jw4eywww6cccYZSxSjmS3dXD21FNhxxx054YQT5m8/9NBDz/s9J0+ezJVXXsns2bMBePzxx/nf//3ffo9ZaaWVmDt37vMu28yay0mjJp1tGkccccSg3+tzn/scDz30EBtvvDGbbbYZl1xyyfOOb/To0fzsZz9jn332YdNNN2Xy5MnzG+UXZ9ddd+Xss892Q7jZUkwRUXcMPTVp0qToXE/jlltu4VWvelVNEQ1NPudm3VGqy62kGRGxSL9+X2mYmVllThpmZlaZk4aZmVVWKWlI2knSbZJmS1qkxVbJcfn5GyRNGOhYSatJulDS7fl+1bx/S0kz8+16SW9rO2aipFn5vY7T85gJb2lvy2kSn2uzpceASUPScOD7wM7AhsA+kjbseNnOwPh8Oxg4scKxRwAXR8R44OK8DXAjMCkiNgd2An4oqTWe5MT8/q2ydlrCnxdIiwI9+OCD/jAroLWexsiRI+sOxcy6oMrgvi2B2RFxB4CkM4HdgZvbXrM7cGqkT+GrJa0iaW1gbD/H7g68Ph9/CjAN+HREPN72viOByMeuDYyKiD/n7VOBPYA/LNFPDIwZM4Y5c+Zw//33L+mhNgitlfvM7IWvStJYB/hn2/Yc4DUVXrPOAMeuFRH3AETEPZLWbL1I0muAnwLrA++NiHmS1snHd5axCEkHk65IWG+99RZ5fsSIEV5FzsxsEKq0afTVbtBZr7O411Q5dtEXRPwlIjYCtgCOlDRySd4rIk6OiEkRMWn06NEDFWdmZhVVSRpzgHXbtscAd1d8TX/H3purnFpVT/d1FhwRtwCPARvn92qv4+grDjMz66Eq1VPXAOMljQP+D9gbeHfHa6YCH8ptFq8BHs5VTvf3c+xUYH/g2Hx/DkB+7T9zldT6wAbAXRHxgKS5kiYDfwH2A44f7A9uZrak6l4AqQkGTBr5w/tDwPnAcOCnEXGTpEPy8ycB5wFvAWYDjwMH9ndsfutjgbMkvQ/4B7BX3r8tcISkZ4DngA9GxAP5uUOBnwHLkxrAl7gR3MzMBq/S1OgRcR4pMbTvO6ntcQCHVT02738QeGMf+08DTlvMe00nVVWZmVkNPCLczMwqc9IwM7PKnDTMzKwyJw0zM6vMScPMzCpz0jAzs8qcNMzMrDInDTMzq8xJw8zMKnPSMDOzypw0zMysMicNMzOrzEnDzMwqc9IwM7PKnDTMzKwyJw0zM6vMScPMzCpz0jAzs8qcNMzMrDInDTMzq8xJw8zMKnPSMDOzypw0zMysskpJQ9JOkm6TNFvSEX08L0nH5edvkDRhoGMlrSbpQkm35/tV8/4dJM2QNCvfb992zLT8XjPzbc3n9+ObmdmSGDBpSBoOfB/YGdgQ2EfShh0v2xkYn28HAydWOPYI4OKIGA9cnLcBHgB2jYhNgP2B0zrK2jciNs+3+5bkhzUzs+enypXGlsDsiLgjIp4GzgR273jN7sCpkVwNrCJp7QGO3R04JT8+BdgDICKui4i78/6bgJGSlhvcj2dmZt1UJWmsA/yzbXtO3lflNf0du1ZE3AOQ7/uqano7cF1EPNW2b0qumjpKkvoKWNLBkqZLmn7//ff3/9OZmVllVZJGXx/MUfE1VY7tu1BpI+BrwAfadu+bq61em2/v7evYiDg5IiZFxKTRo0dXKc7MzCqokjTmAOu2bY8B7q74mv6OvTdXYZHv57dPSBoDnA3sFxF/a+2PiP/L93OB00nVX2ZmVkiVpHENMF7SOEnLAnsDUzteMxXYL/eimgw8nKuc+jt2Kqmhm3x/DoCkVYBzgSMj4spWAZKWkbRGfjwC2AW4cUl/YDMzG7xlBnpBRMyT9CHgfGA48NOIuEnSIfn5k4DzgLcAs4HHgQP7Oza/9bHAWZLeB/wD2Cvv/xDwcuAoSUflfTsCjwHn54QxHLgI+NHz+eHNzGzJDJg0ACLiPFJiaN93UtvjAA6remze/yDwxj72fwn40mJCmVglXjMz6w2PCDczs8qcNMzMrDInDTMzq8xJw8zMKnPSMDOzypw0zMysMicNMzOrzEnDzMwqc9IwM7PKnDTMzKyyStOImJnVaewR5z7v97jr2Ld2IRLzlYaZmVXmpGFmZpU5aZiZWWVOGmZmVpmThpmZVeakYWZmlTlpmJlZZU4aZmZWmZOGmZlV5qRhZmaVOWmYmVllThpmZlZZpaQhaSdJt0maLemIPp6XpOPy8zdImjDQsZJWk3ShpNvz/ap5/w6SZkiale+3bztmYt4/O5en5/fjm5nZkhgwaUgaDnwf2BnYENhH0oYdL9sZGJ9vBwMnVjj2CODiiBgPXJy3AR4Ado2ITYD9gdPayjkxv3+rrJ2W5Ic1M7Pnp8qVxpbA7Ii4IyKeBs4Edu94ze7AqZFcDawiae0Bjt0dOCU/PgXYAyAirouIu/P+m4CRkpbL7zcqIv4cEQGc2jrGzMzKqJI01gH+2bY9J++r8pr+jl0rIu4ByPdr9lH224HrIuKpfNycAeIwM7MeqrIIU1/tBlHxNVWO7btQaSPga8COSxBH69iDSdVYrLfeelWKMzOzCqpcacwB1m3bHgPcXfE1/R17b65yIt/f13qRpDHA2cB+EfG3tjLGDBAHABFxckRMiohJo0ePHvAHNDOzaqokjWuA8ZLGSVoW2BuY2vGaqcB+uRfVZODhXOXU37FTSQ3d5PtzACStApwLHBkRV7YKyO83V9Lk3Gtqv9YxZmZWxoBJIyLmAR8CzgduAc6KiJskHSLpkPyy84A7gNnAj4AP9ndsPuZYYAdJtwM75G3y618OHCVpZr612jsOBX6cy/kb8IdB/+RmZrbEqrRpEBHnkRJD+76T2h4HcFjVY/P+B4E39rH/S8CXFvNe04GNq8RsZmbd5xHhZmZWmZOGmZlV5qRhZmaVOWmYmVllThpmZlaZk4aZmVXmpGFmZpU5aZiZWWVOGmZmVpmThpmZVeakYWZmlTlpmJlZZU4aZmZWmZOGmZlV5qRhZmaVOWmYmVllThpmZlaZk4aZmVXmpGFmZpU5aZiZWWVOGmZmVpmThpmZVeakYWZmlVVKGpJ2knSbpNmSjujjeUk6Lj9/g6QJAx0raTVJF0q6Pd+vmvevLukSSY9KOqGjnGn5vWbm25qD/9HNzGxJDZg0JA0Hvg/sDGwI7CNpw46X7QyMz7eDgRMrHHsEcHFEjAcuztsATwJHAZ9YTEj7RsTm+XZfpZ/SzMy6osqVxpbA7Ii4IyKeBs4Edu94ze7AqZFcDawiae0Bjt0dOCU/PgXYAyAiHouIK0jJw8zMGqRK0lgH+Gfb9py8r8pr+jt2rYi4ByDfV61qmpKrpo6SpIrHmJlZF1RJGn19MEfF11Q5dknsGxGbAK/Nt/f29SJJB0uaLmn6/fff/zyKMzOzdlWSxhxg3bbtMcDdFV/T37H35ios8v2A7RMR8X/5fi5wOqn6q6/XnRwRkyJi0ujRowd6WzMzq6hK0rgGGC9pnKRlgb2BqR2vmQrsl3tRTQYezlVO/R07Fdg/P94fOKe/ICQtI2mN/HgEsAtwY4X4zcysS5YZ6AURMU/Sh4DzgeHATyPiJkmH5OdPAs4D3gLMBh4HDuzv2PzWxwJnSXof8A9gr1aZku4CRgHLStoD2BH4O3B+ThjDgYuAHz2vn97MzJbIgEkDICLOIyWG9n0ntT0O4LCqx+b9DwJvXMwxYxcTysQq8ZqZWW94RLiZmVXmpGFmZpU5aZiZWWVOGmZmVpmThpmZVeakYWZmlTlpmJlZZU4aZmZWWaXBfWY2dI094tzn/R53HfvWLkRiTeArDTMzq8xJw8zMKnPSMDOzypw0zMysMicNMzOrzEnDzMwqc9IwM7PKnDTMzKwyJw0zM6vMI8LNGsojsa2JfKVhZmaVOWmYmVllThpmZlaZk4aZmVVWKWlI2knSbZJmSzqij+cl6bj8/A2SJgx0rKTVJF0o6fZ8v2rev7qkSyQ9KumEjnImSpqV3+s4SRr8j25mZktqwKQhaTjwfWBnYENgH0kbdrxsZ2B8vh0MnFjh2COAiyNiPHBx3gZ4EjgK+EQf4ZyY379V1k6VfkozM+uKKlcaWwKzI+KOiHgaOBPYveM1uwOnRnI1sIqktQc4dnfglPz4FGAPgIh4LCKuICWP+fL7jYqIP0dEAKe2jjEzszKqJI11gH+2bc/J+6q8pr9j14qIewDy/ZoV4pgzQBxmZtZDVZJGX+0GUfE1VY6tqvJ7STpY0nRJ0++///5BFmdmZp2qJI05wLpt22OAuyu+pr9j781VTq2qp/sqxDFmgDgAiIiTI2JSREwaPXr0AG9rZmZVVUka1wDjJY2TtCywNzC14zVTgf1yL6rJwMO5yqm/Y6cC++fH+wPn9BdEfr+5kibnXlP7DXSMmZl114BzT0XEPEkfAs4HhgM/jYibJB2Snz8JOA94CzAbeBw4sL9j81sfC5wl6X3AP4C9WmVKugsYBSwraQ9gx4i4GTgU+BmwPPCHfDMzs0IqTVgYEeeREkP7vpPaHgdwWNVj8/4HgTcu5pixi9k/Hdi4SsxmZtZ9HhFuZmaVOWmYmVllThpmZlaZk4aZmVXmpGFmZpU5aZiZWWVOGmZmVpmThpmZVeakYWZmlTlpmJlZZU4aZmZWmZOGmZlV5qRhZmaVVZrl1myoGXvEuc/7Pe469q1diMSsWXylYWZmlTlpmJlZZU4aZmZWmZOGmZlV5qRhZmaVOWmYmVllThpmZlaZk4aZmVXmpGFmZpVVShqSdpJ0m6TZko7o43lJOi4/f4OkCQMdK2k1SRdKuj3fr9r23JH59bdJenPb/ml538x8W3PwP7qZmS2pAZOGpOHA94GdgQ2BfSRt2PGynYHx+XYwcGKFY48ALo6I8cDFeZv8/N7ARsBOwA/y+7TsGxGb59t9S/4jm5nZYFW50tgSmB0Rd0TE08CZwO4dr9kdODWSq4FVJK09wLG7A6fkx6cAe7TtPzMinoqIO4HZ+X3MzKxmVZLGOsA/27bn5H1VXtPfsWtFxD0A+b5V1TRQeVNy1dRRklQhfjMz65IqSaOvD+ao+Joqxy5JeftGxCbAa/PtvX2+gXSwpOmSpt9///0DFGdmZlVVSRpzgHXbtscAd1d8TX/H3pursMj3rfaJxR4TEf+X7+cCp7OYaquIODkiJkXEpNGjR1f4Ec3MrIoqSeMaYLykcZKWJTVST+14zVRgv9yLajLwcK5y6u/YqcD++fH+wDlt+/eWtJykcaTG9b9KWkbSGgCSRgC7ADcO4mc2M7NBGnARpoiYJ+lDwPnAcOCnEXGTpEPy8ycB5wFvITVaPw4c2N+x+a2PBc6S9D7gH8Be+ZibJJ0F3AzMAw6LiGclrQCcnxPGcOAi4EfdOAlmZlZNpZX7IuI8UmJo33dS2+MADqt6bN7/IPDGxRzzZeDLHfseAyZWidfMzHrDI8LNzKwyJw0zM6vMScPMzCpz0jAzs8qcNMzMrDInDTMzq8xJw8zMKnPSMDOzypw0zMysMicNMzOrzEnDzMwqc9IwM7PKnDTMzKwyJw0zM6vMScPMzCpz0jAzs8qcNMzMrDInDTMzq6zScq9mJY094tzndfxdx761S5GYWSdfaZiZWWVOGmZmVpmThpmZVeakYWZmlTlpmJlZZZWShqSdJN0mabakI/p4XpKOy8/fIGnCQMdKWk3ShZJuz/ertj13ZH79bZLe3LZ/oqRZ+bnjJGnwP7qZmS2pAZOGpOHA94GdgQ2BfSRt2PGynYHx+XYwcGKFY48ALo6I8cDFeZv8/N7ARsBOwA/y+5Df9+C2snZa8h/ZzMwGq8o4jS2B2RFxB4CkM4HdgZvbXrM7cGpEBHC1pFUkrQ2M7efY3YHX5+NPAaYBn877z4yIp4A7Jc0GtpR0FzAqIv6c3+tUYA/gD4P5wZumCWMTnm8M3YrDzJqrStJYB/hn2/Yc4DUVXrPOAMeuFRH3AETEPZLWbHuvq/t4r2fy4879i5B0MOmKBOBRSbct7oerYA3ggedxfLf0G4e+Vn8MTYmjCTE0JY4mxNCUOJoQQ1PiqBjD+n3trJI0+mo3iIqvqXJs1fIqv1dEnAycPEA5lUiaHhGTuvFeL/Q4mhBDU+JoQgxNiaMJMTQljibE0Os4qjSEzwHWbdseA9xd8TX9HXtvrsIi399X4b3GDBCHmZn1UJWkcQ0wXtI4ScuSGqmndrxmKrBf7kU1GXg4Vz31d+xUYP/8eH/gnLb9e0taTtI4UoP3X/P7zZU0Ofea2q/tGDMzK2DA6qmImCfpQ8D5wHDgpxFxk6RD8vMnAecBbwFmA48DB/Z3bH7rY4GzJL0P+AewVz7mJklnkRrL5wGHRcSz+ZhDgZ8By5MawEs0gnelmqsLmhBHE2KAZsTRhBigGXE0IQZoRhxNiAF6GIdShyczM7OBeUS4mZlV5qRhZmaVOWm8AEhaVdKmNccwTNKoOmMws/o5afRB0taS3i1pv9athhimSRolaTXgemCKpG8XjuH0HMMKpI4Jt0n6ZMkYchxfz3GMkHSxpAckvadwDB/JMUjSTyRdK2nHkjHkOGo/F03RhHPRhBhyHHtJWik//pyk37TPAdhNThodJJ0GfBPYFtgi3+oYrLNyRDwC7AlMiYiJwJsKx7BhjmEPUg+59YD3Fo4BYMccxy6k8TqvAEonr4NyDDsCo0k9BI8tHAM041yQu8S/W9JnJP1361Y4jCaciybEAHBURMyVtC3wZtLUTCf2oiCvEb6oSaQPy7q7lS2TBz2+E/hsTTGMkDSClDROiIhnJNVxXkbk+7cAZ0TEv2uY4LhV4FtISfz6mmZZbsK5gDRG6mFgBvBUHQHQjHPRhBgAWsMS3gqcGBHnSPp8Lwpy0ljUjcCLgXtqjuMY0viWKyLiGkkvBW4vHMMPgbtI1WOXSVofeKRwDAC/k3Qr8ATwQUmjgScLxzBD0gXAOODIXBXwXOEYoBnnAmBMRNQ9y3QTzkUTYgD4P0k/JNVGfE3ScvSoJsnjNDpIugTYHPgrbd+gImK3umJqEknLRMS8GspdFXgkIp6V9CLSjMf/Klj+MNLfxR0R8Z/c1jQmIm4oFUNbLLWeixzDycDxETGrZLl9xNGEc9GEGF5EWipiVkTcnmspNomIC7pdlq80FvX5ugOA1MAGfIn0DeaPwGbARyPi5wVj+AgwBZgL/Bh4NWndk67/IS6m/D372Ne++ZsScWRbATMj4rHc0DkB+F7B8oHU4An8MX9AfS7H8SWg6IcUqc3vAEl3kr5cCYiIKNbLrwnnogkxZGsD50bEU5JeD2wKnNqLgnyl0QdJa5EawCHNe3Vff6/vUQwzI2JzSW8jtSl8DLgkIjYrGMP1EbGZ0uqJhwFHkerze9Iro4/yp/TzdETEQSXiyLHcQErcmwKnAT8B9oyI15WKoRVHRGyaGzy/Suq08ZmI6FyuoNdx9DltdkT8vWAMtZ+LJsSQ45hJao8dS6rWngpsEBFv6XZZvtLoIOmdwDdIi0IJOF7SJyPifwqH0oQGtlobfyPiwFJlVTAvIkLS7sD3IuInkvYf8KjuK9bg2Z+I+LukzYDX5l2XR8T1hcNowrloQgwAz+W5/vYEvhsRx0u6rhcFucvtoj4LbBER+0fEfqSVC4+qIY5WA9sk4OKaG3/fApxfV+OvpLXy2Ig/5O0NlSa6LGmupCNJXY7PVVqCeMQAx/RCq8HzncB5vWzw7E+uuvwFsGa+/VzShwuH0YRz0YQYAJ6RtA9p9u/f5329+fuMCN/abqSGpPbtYZ37CsayKjA8P14BeHHh8oeR6mhXydurA5vWcB7+QPqnvD5vL1P6d0LqUfdx4LV5ez1gvxrOxYtIY3fG5+21SWMFSsdxA7BC2/YKwA1D7Vw0IYZc7obAccA+eXsccEQvyvKVxqL+KOl8SQdIOgA4lzSwrajcG+IwFgzQeQnlBxkG6Y/x8Ly9AjCycAwAa0TEWeSrnEi9t57t/5DuitQb5tfAcnnXA8DZJWPIcTxOWrBs27xrHuW7YkOqumz/HTxL36tr9kwTzkUTYshx3Ax8Grg2b98ZET0ZfOqk0SEiPkmai35TUsPnyRHx6RpCmQI8DWydt+eQemWU9ANSr6F98vZc4PuFYwB4TNLq5OV9lRf6KhmApPcD/0MauwJpffrflowhx3E06cPhyLxrBFCsR12bKcBfJH0+1+FfTeocUEwTzkUTYshx7ArMJPW0RNLmkjoXy+sKN4T3ISJ+TfpWWaeXRcS7cj0lEfFEDSOQXxMRE1oNahHxkNIKjKX9P1JvkJdJupI0jcc7CsdwGKl96y8AkfrCr1k4BoC3kbo+t75R3p3bmoqKiG9Lmkb6hi3gwIjoScNrP5pwLpoQA6ShAluSOvAQETOVVj7tOieNTNIVEbGtpLnkb7Stp0jdO0vP8Pq0pOVZ8O36ZZSfruGZ3ODbimE0NTSER8QMSa8DNiD9Pm6LiGcKh/FURDzdytuSlmHhv5NSno6IUJ7ORWkyyWIkjYqIR/LgxrvyrfXcahHx74Lh1HouGhQDpN59D3d8r+zJ36eTRhYR2+b7Or4l9OVo0qXmupJ+AWwDHFA4huNI9fZrSvoy6dv95wrHgKTrgV8Cv4yIv5UuP7tU0meA5SXtAHwQ+F0NcZyVe+uskqvMDgJ+VLD800mT882gjy9XwEsLxlL3uWhKDAA3Sno3MFzSeFI75FW9KMiD+zpIOi0i3jvQvkKxrA5MJv1DXh0RD9QQwyuBN+YYLo6IW2qIYX3gXfn2HCmBnBUR/ygYwzDgfaRZbkUaQPXjqOEfKCet+XFExIWlY2iKJpyLhsTwItJwgdZ0/ecDX4qIrnfTd9LoIOnaaBvxnKshboiIDQvH8TbgTxHxcN5eBXh9RPy2YAyTgZsiYm7eXok0A/BfSsXQR0zjSeNm9o2I4QXLXQF4MiKezdvDgeVy75licj31Pa0Pg1yFuVZE3FU4josj4o0D7etxDLWfiybEUJp7T2WSjsztGZtKeiTf5gL3kqaBLu3oVsIAiIj/kKqsSjoReLRt+zF6NEf/QCSNlfQp4EzglcCnCodwMbB82/bywEWFYwD4FQu3Kz2b9xUhaWRuz1hDaUXJ1fJtLKlbeEm1nosGxYCkC/MXy9b2qpLO70VZbtPIIuKrwFclfTUijhzwgN7rK6GX/n2pvfolIp7LV15lg5D+QurK+Ctgr4i4o3QMwMiImJ9AI+LRXCVQ2jIR8XRbHE8X7tH2AeCjpAQxgwVjMx6hfHfsus9FU2KANJbpP21xPNSr3n2+0ugQEUfmLL2lpO1atxpCmS7p25JeJumlkr5D+ict6Q5JhystZTlCaeqIOj6w94+ICRHx1ZoSBqSxIu3VlhNJMxCXdr+k+dP0K82FVaytKyK+FxHjgE9ExEsjYly+bRYRJ5SKI6v1XDQoBoDnJK3XFsf69Kj3lNs0Okj6L+AjwBjSYJnJwJ8jYvvCcaxAqrt/E+nb3AWkhq3HCsawJqkHVetnv4g0PXvRWX+VZh3+CvCSiNhZ0obAVhFRbDCZpC1IVWN3511rA++KiKKJPHe9/gVpcCHAP4H31tGrTNLGpBkD5s8SEBE9mY57MeXXfi6aEEOOYyfSoORL867tgIMjoutVVE4aHSTNIk2LfnWkqclfCXwhIt5VUzyjSDNYPjrgi5dSShMVTgE+G2mq9mWA6yJik8JxjGDBWJFbaxgr0h7LiqT/37k1lX808HpS0jgP2Jm0ymTpQZe1n4sGxbAG6Usu9LC3paunFvVkW0+I5SLiVtIHRVGSNlEaiT0LuEnSjPzNrmQMYySdLek+SfdK+rWkMSVjyGqfeyonjENJI2+PBj6Q9xUlaWVJ3yaN/L1E0rckrVw6DtKYnTcC/4o0hf1mLJiXq4gmnIsmxNBma1Iifz0LkkfXOWksak7uhfBb4EJJ57CgSqKkHwIfj4j1I2J90lQaJxeOYQpp+o6XkC6/f5f3lVb73FOkXmMTSfNx/SA/rqMn2U9Jc4C9M98eoZ7fyRMR8RwwL18N30fZgX3QjHPRhBiQdCypWv3mfPuIpK/2pCxXTy2e0tQVK5OWc3x6oNd3uezro2OVvr729TiGmRGx+UD7CsQxATge2Bi4kTz3VBRcn7sJv49cZlN+Jz8APgPsTfpC8yhpOdxiC2c14Vw0IYZc5g3A5jmRt8YRXRc9WH7XXW6z3Pe806x8vyJQck4dSD2XjiItLQrwHuDOwjE8oLQe9hl5ex/gwcIxEBHXqv65p56V9LJWA6ekl1K4iix7QtK2EXFFjmMbCvbikrRNRFwJfCwingJOkvRHYFTJJJ7Vei4aFEPLKiz4nOpZFZmvNDJJd5KqP0RaYOeh/HgV4B+5m2HJeFYFvsCCefovIzXIP1QwhvWAE0jTowdpLpuPRKF1oJWWrlysiPhNiThyLNsDPyN1ORawPmlm10tKxZDj2Aw4lQUfCg+RuiQX+cCWNCMiJqpj5oQ61H0umhJDjmNv4GvAJaS/z+2AIyPizG6X5SuNrJUUJJ0ETI2I8/L2zqRur8XkS8tfRUTRcvuI4SsRsduAL+6dXft5LoAiSSOfi82A8Szce6rorMM5jvfkHmSjACLikZIxkGY+ngKsI+m4zicj4vA+jum6JpyLJsSQ4xhG6iQymdTzU8CnIy0c1nVOGovaIiIOaW1ExB8kfbFkABHxrKTHJa3cPpVIDTGMlrRs6facthiK1Y/3J5+L3SLiO6RlTuuMY2J+XPzDKduF9CVqe8oPNp2vCeeiCTHksp+T9KHcw7AnCy+1c9JY1AOSPkdafStIbQnF6/GBJ4FZki4kzfkElPsml90FXKm0Alh7DN8uGENTXCXpBNIMu+3n4trCcVyXfx+/6oijyFVX7vt/pqRbIuL6EmX2o9Zz0aAYIPX0/ASL/n12vS3WbRodcoP40aQ6QVjQllC0IVzS/n3tj4hTCsbQ5wSJEfGFUjE0haS+2i6ihpkC+urOGRFxUKHyj6ef6SlKfqmp+1w0JYYcR1+dZCIiut4N2kmjwZQmPnsl6Z/0trqqiXJ9bdQ52tWaYXFfZlpKfqmxejhpZJK+GxEflfQ7+vgmVbpBWNJbSAP8/kZq2BoHfCAi/lAwhkmkgUqt1QwfBg6K8vMtvYg0FmC9iHi/0poaG0TE7wvGsDrpCnRb0t/HFcAxEVG06jJ39f0eqdEzgD+T5gMr3R27dk04F02IIccxkrSaZOvv83LgpPAiTL0jaWIsWIt6ERFxaV/7exjPrcAuETE7b78MODciXlkwhhuAwyLi8ry9LfCDXgwYGiCOX5IaXfeLiI2VFrr5c+FBXBeSqip/nnftS1oUq3TPuqtJU5C3xs7sDXw4Il5TOI5L6PvLVbHquiaciybEkOM4izQyvfX3uQ+wakTs1fWynDSaSdJlEbFd27aAS9v3FYjhyojYZqB9BeKYHhGTJF0XEa/O+0qPjp8RERP7iqtUDLnMv3R+IEm6OiJ6NtfQYuJoPxcjgbcD8yKi2OJYTTgXTYghl1lsxgL3nuqQR3R+njR4axlS1VBPGpQGcJOk84CzSN/o9gKuaQ14K9Q746+Sfkj6FhWkNbqnKa8rUbDn0NP56qI199TLgKJjJEiT0e1N+n1AmrDv3MIxtOI4gjRNe+t3cm5rRoNSHTb6qKK8UlLRq3GacS6aEAOkXlyTI+JqAEmvAa7sRUG+0uiQq4U+RqoOmT9NRA111/1Nelakd8Ziegy1x1CkKkLSDsDnSNNwXwBsAxwQEdNKlJ9jmAuswIK/ieEs6NoYETGqUBz91ZUX+3KjhafdGQZMAr4XEcVmhG7CuWhCDDmOW0gDT/+Rd60H3EIa9BfdrFJ20ujQ1+Wm1S83RE8mXfn1bK0Aq0YLT7vzDGlMzzGR52CyspRW6lus6OLUP66eWtQlkr5BmqJifhVIDYO4bGEjSfP6LANsKImIuKzmmIayT5Nmf35EaWLNCcDjNcc0ZHUzKQzEVxodmjKIyxaQ9DVSXfFN5IWYSL+TOufFGtIk3RARm+YedV8BvgV8xlfpSz8nDWs8SbcBm0bhCQJt8Vo92ZQW+pkVEae3926zpZdX7uugvHyjpOn5VsvyjZK+orSCYGt7VUlfKhzDYX3E8MGSMWR3AMWXVm0nabKkldq2V8o9VErH8bb2v0dJq0jao3QcwP/lnnXvBM6TtByFP0+acC6aEEMud1we4NfaXl7S2J6U5SuNhUn6NWl1uNZ0CO8FNouIftd26EEci3xrU+E1DNT3qmTFv03m38lmwMUs3M5Ucp6j64AJkf9hlKajnl7y95HLbcrv5EXATqSrjNslrQ1sEhEXFIyh9nPRhBhymdOBrVtTDSlNQXRlRGzR7bLcEL6ol0XE29u2vyBpZg1xDJe0XKtKJo9TWK5wDMMkqe2DcjiwbOEYIE333PMpnwcw/zzA/Omo6/j/6evbfPE4IuJx2tYziYh7gHsKh9GEc9GEGACWiba56SLi6Zw4ul9QL970Ba4pyzf+HLg4j9cI4CAWXP2Ucj5wltLCVAEcAvyxcAxExCn5H+AVeVcdy73eIelw4MS8/UFStVlp0yV9mzR1RQAfpsZ1LWrWhHPRhBgA7lda82UqgKTdgZ50S3f1VAc1ZPnGHMvOwBtJfeEviIjzC5c/DPhAewzAjyOi6NrYkl5PSph35TjWJf1OinW5lbQmcBxp8aEgVZV9NCLuKxVDjmMF4CjSQkit38mXIuKxfg9cCjXhXDQhhhzHy4BfAC/JcfyTNFfb7K6X5aSxQK5+OTYiPqkal2+0hUmaAbw7Im7L268AzuicC8psqJO0IulzvWfLGLh6qk00YPlGSVdExLZ52or2jN6aA6vn01VIOisi3ilpVkcMkIIoOsstMKKVMHL5/yupSG8qSZ+KiK9rMYsPlWqMV8Om7q9TE85FE2LIcbwnIn4u6eMd+1txdH2VTSeNRdW9nOa2+X6lgV7bQx/J97vUGEO76ZJ+ApyWt/elXL3xLa0YCpW3OK2f/Zu1RtEMTTgXTYgB0nxosGDNm55z9VQH1b+c5mr9PV9w1szGyGMADiMtMCPSuhY/8GA/s/KcNBpGC08E16nUzJ19Vo1RsIqsKRZX/dBSsBqiz6pCFvxOSlcZ1qYJ56IJMeQ4juvv+V5Un7p6qkNbF9eFlLrSiIhxJcoZIIY6q8YWIWkX4IssusZJieRVd/VDS1OqCpugCeeiCTFADd17faXRQVL7wL6RwNuAu0uOPm6LZTegtVLftCi4JnZbDJsBr82bl9XU9Xg2sCdp9HFtf7ANGCvSimMtoDXS96+lu/02SRPORRNiaItlJdIXqkd7VYbnnuoQEb9uu/2CNLfOxqXjkHQsqUH65nz7iNLkcCVj+Aip7/ea+fYLSR8uGUP2T+DGmhPG64HbSYO4fgD8r6RiS++2xfFO4K+klRzfCfxF0jtKx9EETTgXTYghx7FxnurmRuBmSTMkbdSTsnyl0T9JGwDnRsTLC5d7A7B5RDyXt4cD15Wsu84xbNUaqJQHMv25dP25pC1I1VOXsvDcU13vTthPDI0YKyLpemCH1rdZSaOBi6LgeulN0YRz0YQYcrlXAZ+NiEvy9uuBr0TE1t0uy20aHfpoBP4XacGZOqwCtHpLFZ9pl9R20D76+1n6bqDvtS8Dj5KqC+uY+wpqHCvSYVhH9ceDDN0agyaciybEALBCK2EARMS0/CWv65w0OjSoEfirpDEjl5A+qLcDjiwcwxTS5fbZOYbdgZ8UjgFgtYjYsYZy29U5VqTdHyWdD5yRt98FnFdDHE3QhHPRhBggzY12FAv+Pt8D9Ld++aC5eqqDpLcBf4qIh/P2KsDrI+K3NcSyNgs3sP2rhhgmkMZHAFweEdfVEMOxpN9JsWm3+4ihMWNFJO3ZHkdEnF06hqZowrloSAyrAl9g4b/Pz0fEQ10vy0ljYWrI/Pi53NYfYwBX1PTHOIHUe+o50vz8xddKz1WGK5DaM56hpvEiuffUq0jn4rZom4q6cBwvBl6T47imji8TTdGEc9GEGNpiWRl4rpdzTw3VutD+NGJ+fEk/IE1FPovUI+IDkr5fOIb/Js0uuyqwBjBF0ucKxzAM2CkihkXE8hExKiJWqiFhvBX4G/A94ARgdp6FuChJ/0XqrfM24B3A1ZKKjCFqmiaciybEkOPYIg84vB6YJen61jx6XS/LVxoLk/RT4D8sPD/+qhFxQOE4bgI2bnUzzR+esyKiJ93oFhPDLcCrI+LJvL08cG1EvKpUDLncP0fEViXL7COGW4FdIk81rTQV9bkR8crCcdxGWqHtwby9OnBVRGxQMo4maMK5aEIMudwbgMMi4vK8vS2p+rTrPR19pbGoDwNPA78kTVr4JKkuu7TbgPXattcFSg+su4vUY6llOdK37dIukPR2taburMd9sfDaBHcAdQzimgO0Vz3MJY1jGYqacC6aEAPA3FbCAIi0iFxPqqjce6pDHpNwRF3lt811tDJwi6S/5u3XAFcViqE1DfhTwE2SLszbOwBXlIihw8dJbRrPSnqCstPEt9aGv0nSecBZpHOxF3BNr8tvi6M19fX/kXq0nZPj2J1UPTJkNOFcNCGGHEdrjfq/SvohqRdXkHpxTetFmU4aHXIX177mntq+UAhNmOuoNQ34DKC98X1a+VBq7wa9a9vje4HX5cf3k9p6Smmdg7+x8NXeOQVjaIomnIsmxADwrY7to9se96TtwW0aHToaj0YCbwfmRcSnagrJaMY8XGbmpFGJpEsj4nUDv7KrZU4Gjid18VwWGA48VrLXkKTxpEGGG9LWtlFievaOOI4ljVf5Rd61DzAjIopVI0oaCbwP2IiFz0Xp3jqjgU/1EUepK+HGaMK5aEIMbbG8tY84jul2OW4I7yBptbbbGpLeDLy4hlBOIH043g4sD/xX3lfSFOBEYB7wBuBUFow4LektpPl9fhoRPwV2yvtKOo30d/Bm0hxYY+hRQ+MAfgHcCowjDea6i4JtKw3ThHPRhBiQdBKpHePDpDa/vUhLCXRfRPjWdiMNvb8j398OXABsW0Mc0/P9DW37riocw4x8P6tt3+U1nIsbSFOJtLZXaz8vhWK4rv33AYwgjVIvfS5mtMeRH19aOo4m3JpwLpoQQ3v5bfcrAhf0oiw3hHeIBiyClD2eRyDPlPR14B4WrAdcypN5fMjtkj5E6imyZuEYoBnzcLXWzviPpI1JE1mOLRxDexz35OqIu0lXPUNRE85FE2IAeCLfPy7pJaSJE3vyWeakkbV1rexTRPymVCzZe0nVhx8CPkYap9FvjD3wUeBFwOGkqcnfAOxXOAYi4gxJ00jtGgI+HeWnajg5z+/zOWAq6ZvcUYVjAPhSniri/5HavEaRfk9DURPORRNiAPh9nifvG8C1pJ5TP+5FQW4Iz5SWeV2ciPINnh+JiO8NtK/HMewVEb8aaF+hWNZhwXKvAETEZQXLHxcRdw60r0Ac20TElQPtGwqacC6aEEMuc7nIk2fmyTVHAk9GDybUdNJoKEnXRsSEjn3XRcGJExcTwyL7CsTxNVIj302kSeEgJfLdCsbQ17mYEeUXYWrE76QJmnAumhBD6ThcPdWhbaRnu4dJDV4zC5S/D/BuYJykqW1PjSLVU/ZcnojvLcA6ko7riGFeiRg67AFs0ItvTQOR9EpSN8aVO6owR7HwFCu9jmMrYGtgdMff6ChSd+whownnogkx5DheDKwDLC/p1SxYJG0UqWq565w0FjUp336Xt99K6kJ3iKRfRcTXe1z+VaRG7zVYeLTnXMrNPXU3aVT4biy80NBcUvtKaXeQeisVTxrABsAupFUU20eHzwXeXzCOZUntKMuwYDQywCOk2VWHkiaciybEAKkL+AGkxvf25Y8fAT7TiwJdPdVBaRWut0fEo3l7ReB/SFMfz4iIDQvGsj4wPiIuyjPMLhM9nCe/j/JHkP4p1ou2pU4Llt+aA2sdYDPgYhZeI/zwgrFsFRF/LlVeP3GsHxF/rzuOJmidC0krRF7HfijGkON4e0T8ukRZvtJY1HqkWW5bngHWj4gnJBX7pivp/cDBpDEJLyN9kzgJeGOpGEiD6L5J+lY1TtLmwDEF2xLa58Ca2t8LC7hO0mHUPCKc1KXyG33EMeRGhAMvkfQH0jf+9SRtBnwgIj44xGIAuFJpOeKXRMTOkjYEtoqIri/P7KSxqNNJC6m0Jh7bFThDaZH2mwvGcRiwJfAXgIi4XVLpMRKfzzFMyzHMlDS2VOERcUqpsio4jTTy983AMaQ1wm+pIY5fkKbt34W0SNf+pMkTh6Lvkn4fUwEi4npJ2/V7xNIZA6TZG6YAn83b/0v6O+l60vA0Ih0i4oukuur/kBrAD4mIYyLisYjYt2AoT0XbcqKSlqFHs1b2Y17ktdKNl0fEUaT5v04htXVtUkMcq+dvj89ExKX5SmdyDXE0QkR0rl3x7FCMAVgjIs4i9y6MiHm9isNXGn2IiBks3ABch0slfYbUK2IH4IMsaJwv5UZJ7waG58kLD6fQmh4N5BHhzfNPSVsDkWdPOJzyV39NiAHgMaVVA1srfU4mfentvl7MTeJbV+aSGUa64vkVqSH+/eSOCwVjeBHwZVLvsen58ciC5Z+W7z/SgN/Hf5HWz9iOBav2HVJDHLuQFujaGLiE9OVmt7rPT02/kzVI1XX35t/Hz0lXYkMqhhzHBOBKUqK4klQ9tWkvynLvKWssSTcDO5Pqi1/Pgj7oAETEv2sIy6yRchX2BqT/k9si4pkBDhlcOU4aC0gaDpwfEW9qQCy7kOZ7ak2dUWyJ07YYJpH6eo9l4ek7ur5Y/WLKPxw4FHgpabLE9qQRUXBdD0lfAb4eEf/J26sC/y8iPlcqhlzuKaQrr/Y4vhXle3HVTtI40lTgY1n477PkTAG1x5DjGE5qZ+uM49uLO2bQZTlpLCyPwn5v1NwALGk2aYLCWVHTL0nSbcAngVksmL6DKDxOQNKJEXFoyTL7iOG66JjCpabpIvqKY5F9Q4Gk60m9gzr/Pi8dSjHkOM4Dnuwjji90uyw3hC/qSWCWpAuB+YN1ouBAsuyfwI11JYzs/oioe3wEEXFo7v/+2rzrsogoNTq+ZXjHpHDLA8sVjgFgmKRVI+KhHMdqDN3/4ycj4riBX7bUxwAwplQNwFD9Y+vPuflWt08B50m6lIVHQXf9crMfR0v6MYuOxC46TXyupjoYaJX7C0knR8TxBcP4OXCx0mzIARwE1DGO5FvAVZL+J8fxTlIHhaHoe5KOJi2U1v73ee0QiwHgD5J2jIgLel2Qq6caStIFwKMUuNzsJ4afA69k0dllS08TfwNpdOtjeXsF4M+lvlm1xbET8CZS28oFEXF+yfLb4tgQ2D7HcXFElBx02hiSvkpad+ZvLPz3WXKN8NpjyHG8jfTFZhipW3bP2kCdNDrk8QhfBTZk4WkaijW65jimR8SkkmX2EcOsiKhjANsicQBbRMSTeXskcE0TYrP6SLqV1K306QFfvBTHkOO4gzQbdM/bQD0ifFFTgBNJU4C/ATiVNIVEaRdJ2rGGcttdnb/V1m0K8BdJn5f0eeBqejA9gr3gXE+afXioxwBwO4XaQH2l0UF5YZ32b9mSLo+I1w50bJfjmEtaE/wpeny52U8Mt5AmS7wzx9GKoWi1UI5lArBtjuGyiLiudAzWLEpLAG9KGnza3p5Qsstt7THkOH5G6pr+B3rcBuqG8EU9KWkYcLukD5HGB5SeKJCIWGngV/XcTnUH0JIbFks3LlqzHV13ADQjBkhf7O4kzUi9bC8L8pVGB0lbkOaOWYU0uG5l0qCuq+uMy+qR21P6+icpetWVrzzb41DeLn4FakObk4ZZP/JCWItVeqCjWd2cNDJJv6OfqcdL11Fa80haC9gib/41Iu6rKY66BzraEOakkUl6XX/Pl5oWII/w7S+OopP0qeYlZ3MMewJfI7UtiXo6BbwT+AZpQSqRPrQ/GRH/UyqGHMdHSDMetwY6vg0oPdDR2uT/i1qWRK6Dk0bDSLqTBXXV6wEP5cerAP+IiHEFY5m/5GxEvCyPYTkpIkouOduah2vXiKhjnYJWDNcDO7SuLiSNBi6KiM0Kx9GIgY51ako7U45lV/KSyBExTuWXRG7F8QrSUIG1ImJjSZuSpsz/UrfLcu+pDm0f2gspNbivlRQknQRMjYjz8vbOpNHIJTVhyVmAe+tMGNmwjuqoB6lnnJNYeEW2Z+mYMn4I2KXuANp8nhqXRG7zI9Lkoj/Mcdwg6XTASaOA9lHYI4G9gH6rjHpki4g4pLUREX+Q9MXCMTwVEU9L6TOppiVnAaZL+iXwW+qbA+uPks4Hzsjb7wLOK1h+S2ug49l5ew+G2EDH9s4HDWhnmhcRD7f+R2r0ooj4a0cc83pRkJNGh4h4sGPXdyVdAfx34VAekPQ50nwyAbyH9O22pEtV/5KzAKOAx4H2EfLBgnr9nouIT0p6O7AN6Zv9yRFx9gCH9SKOb+dJLFtxHDhUBzr20c50vKTS7UxNWRL5AUkvY8Fyr+8A7ulFQW7T6JBHHrcMI115HFpD3fVqpIFD2+VdlwFfKNkQngc5vo/0YS3SAlU/KlW+9S0vuLMWCy+284/6IqpHE9qZJL0I+CwLvtCcD3yxNYV+wTheCpwMbE1qB70T2LcXXcKdNDpIuqRtcx5wF/DNodIzop2kj0TE9wbaVyCOMcDxpG/XAVxBWr1uTsEYau/BleP4MOnLxL0saM+oZWqXunVOqJm/5FxfciJLSXtFxK8G2lcgjnERcWfuGDEsIua29nW9LCeNZpH03Yj46OLGjRSeV2eRlelUwypxSgtinc6CiSPfQ/oWtUPBGGrvwdUWx2v6qEYdciR9gzTvU3s70w0R8emCMfT1P1LHio59xTEjIiZ2uyy3aWSSPt7f872Y+GsxWh+M3yxU3iIk7QO8GxintPxty0qUb1cBGB0RU9q2fybpo4VjaEIPLkgrOta6FHFT1NnOlHszvgVYR1L7yn2j6FED9GLieCWwEbByvhpuj2Nk30c9P04aCzRhgkAiYkZ+OB14IiKeg/n12KWWF72K1Ii2BmmluJa5QB2jjx+Q9B4WfKPch/LJq9YeXG1fau4Apkk6l/pWdGyMiPg18Osair6b9D+6GzCjbf9c4GMF49iA1AV5FWDXjjje34sCXT3VUJKuBt4UEY/m7RVJq8VtXW9k5UlaDzgB2IpUZXcVqU2j2LxPSsu8doootIqh0pKiixUFV3Rsiia0M0kaERHPlCqvnzi2iog/FynLSSPpuMRcREQcXioWAEkzI2Lzgfb1OIbJpAboV5GmWx4OPOYZVesnaSXSB+SjdcdSlya0M6k5K32OJPV03Kgjjq5/qXH11AIzBn5JUY9JmhB5gXpJE4EnCsdwArA38CtS1+P9gJeXKlzSpyLi65KOp+9OAcUSecl/ygHi2JjU7rVa3n4A2C8ibioZR0M0oZ1pCqk323dIK30eSD0j9E8DbgXeDBwD7Eta4qHrnDSyiDilfVvSCq35fWryUeBXku7O22uTeocUFRGzJQ2PiGeBKZJKDlxq/dFPL1jm4hT7pxzAycDHI+ISAEmvJ00hMeSqLWnGTAHLR8TFkpSrSz8v6XLKL8708ojYS9LuEXFKnkLk/F4U5KTRQdJWpGkZVgTWU5qG+gMR8cGScUTENblnxAakby631lB3+rikZYGZkr5OahxfoVThEdEaff54X33hS8WRFfunHMAKrYQBEBHTct/8oaj2mQJoyEqfpCWhAf6Tr0b/BYztRUFu0+gg6S/AO0iTBb4677sxIjauIZaNWbSu9NSC5a9PGkS2LKlHyMrADyJidqkYchy194WX9NeI2FLSZaTpVP5FmuuodN312aRlb9vHrEyKiD1KxmGJFl3pcxTwjSi80qek/yL1ItuUVGW2IvDfEXFSt8vylUYfIuKfHRN/Pbu41/ZK7i3zelLSOA/YmTQSuljSaOud9CRQvHdOU/rCZydLWhU4CphK/qcsHAPAQaTfRevb9GWkevQhp852JkmnRcR7ga0j4hrgUWr8PUTEj/PDS4GefpFx0ljUPyVtDUSumjmceuqu3wFsBlwXEQcqzeb54wGO6SpJ25Cmfl6fhec5KvXtuil94Yv+Uw4Qx0Okv0mrt51pYr4SP0jSqXQ0fpecIw5A0nLA20lVUu3/q8d0uywnjUUdAnwPWAeYA1xAWleitCci4jlJ8ySNAu6j/IfVT0gfzjOo4WorIq4Hrpd0et194Uv+Uw4Qx4XAXhHxn7y9KnBmRLy5ZBwNUWc700nAH0n/kzNYOGkE5f9XzyHNFDCDtk4BveCk0SEiHiB9Y6nbdEmrkHrGzCBd/v61cAwPR8QfCpfZl7GS6u4LX+yfcgBrtBIGpCsP1bMwVhMUa/ztFBHHAcdJOjEiDi1R5gDGRMROJQpy0ugg6RTSaOP/5O1VgW+V7o/f1lvrJEl/BEZFROkpPC7Jk8L9hoW7NF5bOI4m9IUv9k85gOckrRd5KvRcRTJUe7PU1s6ktHQBwGfbHs9XunoKuErSJhExq9cFufdUh75mca1jZtcm0MLTxLdERGxfOI4ZETFRbVNhS7o8Il5bMIaTgeNL/FMOEMdOpLEal+Zd2wEHR0Qd3X+HLC28LHTnF5godRWsBeulLwOMJ81N9hQ9nDLfVxqLGiZp1dzg2PpGMSTPU0S8oe4Ystr6wnf8Ux4oqef/lP2JiD8qLRQ2OcfwsVylOuTU2c4UEeN6XUZFxddLH5IfhgP4FulS739IHxbvBL5cb0j1kLQyC68eeClwTESUnpr7o8CLSL2GvghsD+xfqOzi/5R90cIrSkLqWQZpAOp6NVQZNkHt7UyStutrf0RcVqL8WHi99AnAtqTPrSt79Tfh6qk+SNqQ9MEk4OKIuLmGGCYDN0XE3Ly9ErBhRPylYAy/Bm4EWlOsvBfYLCL2XPxRS6e2fvn97uth+X1VFbYUrzJsgroG3XbE8Lu2zZHAlsCMGqpw/xvYiwXjd/YAfhURX+p6WU4azSTpOmBC5F9Qrp6ZXngUdK0z7Woxqxe2RI2rGCqtbzIrIjYsFYMtrCntTO0krQt8PSL2KVzuLcCrI+LJvL08cG1EvKrbZbl6qrkUbRk9j9ko/ft6QtK2EXEFzB/sV3Km3dpWL2yRdCTwGWB5SY+woNHzaVKDdB0x1Tq9TN2a1s7UYQ5Qx9XPXaS/hyfz9nLA33pRkK80GkrSb4BpwIl51weBN5ScYyhP1ngqac4pgIeA/Wvo+ls7SV+NiCMbEEef08tExDvqjKuk3M14saLs4lzt0/YPAzYH7oqI95SKIcfxW2AL4MIczw6kaYfug+4uI+Ck0VB5wNZxpLaVAC4GPhoR9xUqfzhwbKR1mEcBRMQjJcruI5b27o3zlRzcl6sH3w2Mi4gv5mqItSOi6IDL/C27Nb3MZq3pZSJi1wEOXerU3c6Uy2vvkDGPlDCuLFX+YuJYRHQs/fB8uHqqoXJy2LvG8p9VWviptmTRZlLb45GkBr9FBlT12PeB50hJ/IukEfrfJ327K6kJ08s0xUbtG/mLzsSSAbR/GOeBhuuWLL+/OHpVI+Ck0TBq0Gp1wHWSppJW7pu/IFWUXeSGiHiwY9d3JV1B2VlmXxMRE3IHhdb0HcsWLL+lCdPL1KpJ7UySppEm1FwGmAncL+nSiPj40hqHk0bzNGm1utWAB0nfrltKL3LTOUZhGOnKY6WSMQDP5G+yrd5so0lXHkU1ZHqZWkXEV4GvNqSdaeWIeERpPYspEXG0pDp+H8XicNJomMir1XWzDvJ5xNKUdRq+1fZ4HqmnyDsLx3AccDawpqQvk6au/1zhGBYSEXfVWX4DfFbSe6i3nWkZSWuT/h4/W7Dc2uJw0mgoSa8APsGiUyQUGzQkaQp9V5GVnryx9ulMIuIXkmYAbyRVh+wREXWss2ILNKGd6RjSdOxXRlqi+aXA7QXLLx6He081lKTrSXP2L7SWRUTMWOxB3Y/h7W2bI4G3AXcXbldBUl/1sg+TRt7OLBmLNUdrwGX7hKKSro+IzeqObWnmK43mmhcRJw78st6JiF+3b0s6A7iohlAm5Vtryoa3AtcAh0j6VUR8vYaYaiHpm6Q665vqjqUBam9nkjQGOB7YJsdxBWlphTlLaxzDuv2G1jW/k/RBSWtLWq11qzmm8cB6NZS7OmlKlf8XEf+PlEBGkyZSPKCGeOp0K2kdib9IOiRPKjlUdbYzXQF8pXAMU0hrebyEtNrn7/K+0orF4eqphsoD2jpF4QFtc1m4TeNfwJGdVyAF4riFNFHi03l7OWBmRLxKQ3etkw1Ii1HtA1wJ/Cgi+pvUcKkk6ZUsaGe6uHQ7U93zs9URh6unGioaMF9/RJTu1ro4pwNXSzonb+8KnCFpBaD4DMR1y1Uyr8y3B4DrgY9L+kBE1DYgtA4RcSvp6qsuD+QeXGfk7X1I3dSX2jh8pdFQkkYAh7JgLYtpwA8j4pnFHtT9GN4G/Cny+hl5UNnrI+K3pWJoi2Uiaa0AkeZaasI4luIkfZuUNP8E/KS9e6mk2yJig9qCG4IkrQecAGxFuiq/itSWUGz+q9JxOGk0lKQfAyNYeC2LZyPivwrG0Nclby3VQZK2BcZHxJTc4LliRPRVhbfUkiTS2JBvRcTjfTy/cpRfIMuGGFdPNdcWHV0H/5S74ZbUV0eJ4n8zeWbXScAGpMa9EcDPST1FhoyICEl7RMQXF/O8E0Zh+QvM+1l0PFXRsUwl43DSaK5nJb0sIv4GkAfrPDvAMd02PVeHfJ90yfth0riR0t4GvBq4FiAi7lZayXAoulrSFhFxTd2BGJCWnL2c1BW99P9nLXE4aTTXJ4BL8gIzAtYn9ZYp6cPAUcAvcwwXAIcVjgHg6fwtu9Uff4UaYmiKNwAfkPR30iSSTVh4aCh7UUR8uu4gKBiHk0YD5d4xm5HGRWxA+mC4NSKeKhlHRDwGHFGyzMU4S9IPgVUkvR84iDTL61C0c90B2EJ+L+ktEXHeUInDDeENJemSuudcknQJfc89VXL+KwFjSN1LdyQl0PMj4sJSMTRRXqSrfbnXf9QYzpDTNoZJwAqkadlbPRsjIkYtrXE4aTRUHuG6MqlqqH0ti2sLxtC+oM1I4O2k6U0+VSqGHMeMiCi6uE5TSdqNNOvvS0gLMK0P3BIRG/V7oFmXOGk0VP6W3ylKfsvvS17Y5XWFy/w+8DM3/s6fyHJ74KKIeLWkNwD7RMTBNYc2ZEnakzSGKIDL6xjHVDIOJw1brI65roaRltI8rvQAMkk3A68Ahnzjr6TpETEpJ49XR1r69a8RsWXdsQ1Fkn4AvJwFI7HfBfwtIop2GCkZhxvCG0pSn0uZRsQxBcOYwYL60nnAncD7Cpbf4sbfBf4jaUXgMuAXku4j/W6sHq8DNo787VvSKcCspTkOJ43meqzt8UhgFxYsBVtEE+a/Aig9JUPD7Q48CXwM2JfU7lXyi4Qt7DbSzM+tv9F1gTqWey0Wh6unXiDyzK5TI+LNBcras7/nI6LoGuG2KEmjWHjk779rDGfIknQpaaXA1hxgWwB/Bh4HiIjdlrY4fKXxwvEioNS06Lv281wATho1kfQB0pXFE6QFh0T6nRSbMt8W0mc1cg2KxeErjYaSNIsFYySGkxYdOiYiTqgvKqubpNuBrSLigbpjsfmzEzyROyS8gjSe6A8lZ6MuHYeTRkNJWr9tcx5wb0QUbfD02tzNI+mPwJ59zXJr5UmaAbwWWBW4GpgOPB4R+y6tcbh6qqEa0vjrtbmb50jgKkl/AeZPKxMRh9cX0pCmiHhc0vuA4yPi65JmLs1xOGlYf1prcz8K86co/x/SwlAzACeN8n5IWoBpFqlNw+olSVuRerK1uqMPX5rjcNKw/qxHmsum5Rlg/Yh4QlLRyRNtvnkR0Ve1odXjo6Srv7Mj4qa8hEEda7UXi8NtGrZYko4irWXRvjb3VNLcRyeXrre1+XOS/Z1UZdhePeUutzXK67tE66p8aeakYf3y2tzNIqmvJW4jItzltgaSNgFOBVYj/Y/cD+wXETcVKv+7EfFRSb+j7xmpuz5OxEnDzGyQJF0FfDYiLsnbrwe+EhFbFyp/YkTMkNTnJKIRcWnXy3TSMGs+SdtHxJ8WN1rfo/TrIen6iNhsoH2FYlmWND4jgNsi4ukBDhkUN4SbvTC8jtRrqq/R+h6lX587ctvfaXn7PaSJPYuS9FbgJOBvpGqycZI+EBF/6HpZvtIwe2GQNAx4R0ScVXcslkhaFfgCC9r9LgM+HxEPFY7jVmCXiJidt18GnBsRr+x6WU4aZi8cki6LiO3qjsOapfPvIi+TfGkv/lZcPWX2wnKhpE+w6DLA7nJbgzzP0yeAsSw863CRFTbb2rhuknQecBapunIv0uwN3S/TVxpmLxzuctsseQXFk0gzJDzb2h8RMwqVP6WfpyMiDup6mU4aZmaDI2lGREysO46SnDTMXkAkjQQ+SGp4DeBy4KSIeLLWwIYYSavlh4cD9wFnM0RG6DtpmL2ASDoLmAv8PO/aB1g1IvaqL6qhJ1cTBqnHVKelurrQScPsBaRJg8lsaBpWdwBmtkSukzS5tSHpNcCVNcYzpEkaKenjkn4j6deSPpqrEEvHsZakn0j6Q97eMK+t0f2yfKVh9sIh6RZgA+Afedd6wC2ktTUiIjatK7ahqCnVhTlZTCHNg7WZpGWA6yJik26X5XEaZi8sO9UdgC1kg46qwUtyN9zS1oiIsyQdCRAR8yQ9O9BBg+GkYfYC0pBlgG2B6yRNjoirodbqwsckrU6eHj1XYT7ci4JcPWVmNkhNqS6UNAE4HtgYuBEYTZqn7Iaul+WkYWY2OJLW7+/5kleGuR1jA1I34Nsi4pmelOOkYWb2/Ek6OCJOLlxmn+urtPRinRUnDTOzLpB0bURMKFxma+6pNYGtSWuuALwBmBYR/SaVwXBDuJlZd/Q1OrynIuJAAEm/BzaMiHvy9trA93tRpgf3mZl1R1+rKpYytpUwsnuBV/SiIF9pmJktIUn75YdPRMSvACJiTo0hTZN0PnAGqdvt3sAlvSjIScPMbMmNy/dza40ii4gP5Ubx1+ZdJ0fE2b0oyw3hZmZWmds0zMyWkKQ1OrbfI+k4SQfn9blLxXFFvp8r6ZG221xJj/SkTF9pmJktmfbutZI+R6oWOh3YBZgTER+rM75ecpuGmdmSa7+a2BN4bUQ8Jul04NriwUgvIyWrpyS9HtgUODUi/tPtslw9ZWa25JaX9GpJE4HhEfEYQJ66oyezyw7g18Czkl4O/ITUUH96LwrylYaZ2ZK7B/h2fvxvSWtHxD15ptl5NcTzXJ4O/W3AdyPieEnX9aIgJw0zsyUUEW9YzFP/AbYrGErLM5L2AfZnwSDDEb0oyNVTZmZdEhHPRsTjNRR9ILAV8OWIuFPSOBasJthV7j1lZrYUkLQsC6YO8dToZmbWt9xj6hTgLlLPrnWB/SPisq6X5aRhZjZ4krYFxkfEFEmjgRUj4s7CMcwA3h0Rt+XtVwBnRMTEbpflNg0zs0GSdDTwaeDIvGsEPWpLGMCIVsIAiIj/pUcN4e49ZWY2eG8DXk0e0BcRd0taqYY4pkv6CXBa3t4XmNGLgpw0zMwG7+mICEkBIGmFmuI4FDgMOJzUpnEZ8INeFOQ2DTOzQZL0CWA8sAPwVeAg4PSIOL6GWJYH1muvpupJOU4aZmaDJ2kHYEfSN/zzI+LCGmLYDfgGsGxEjJO0OXBMROzW9bKcNMzMXthy76ntgWkR8eq874aI2LTbZbn3lJnZIEnaU9Ltkh7u9ToWA5gXEQ+XKMgN4WZmg/d1YNeIuKXmOG6U9G5guKTxpAbxq3pRkK80zMwG794GJAyADwMbAU8BZwCPAB/tRUFu0zAzGyRJ3wNeDPyW9IENQET8pq6Yes3VU2ZmgzcKeJzUe6olgCJJQ9Lvcnl9cu8pMzObT9Lr+ns+Ii7teplOGmZmS0bSpyLi65KOp49v+hFxeOF4VgCeiIjn8vZwYLlerO3h6ikzsyXXavyeXmsUC1wMvAl4NG8vD1wAbN3tgnylYWbWBZKGkaZFLz5OQ9LMiNh8oH3d4C63ZmaDJOl0SaNy9dDNwG2SPllDKI9JmtAW10TgiV4U5CsNM7NBan2bl7QvMJG0tsaMXkzfMUAcWwBnAnfnXWsD74qIrk+P7jYNM7PBGyFpBLAHcEJEPNOaJr2kiLhG0iuBDUgTJ97aqzXCnTTMzAbvh6R1ua8HLpO0Pmk0dlGS9uvY9WpJRMSpXS/L1VNmZt0jaZmImFe4zPb1O0YCbwSujYh3dL0sJw0zs8GRtDJwNLBd3nUpaR2LIjPOLk6O67RejAh37ykzs8H7KTAXeGe+PQJMqTWi5HHSioJd5zYNM7PBe1lEvL1t+wuSZpYOomMOqmHAhsBZvSjLScPMbPCekLRtRFwBIGkbejQ+YgDfbHs8D/h7RMzpRUFu0zAzGyRJmwGnAiuTurr+GzggIq6vNbAectIwM3ueJI0CqGMKkVz+nsDXgDVJyUspnBjV9bKcNMzMBkfScsDbgbG0VfdHxDGF45hNoWVn3aZhZjZ45wAPAzNoW7mvBsWWnfWVhpnZIEm6MSI2bkAcxZad9ZWGmdngXSVpk4iYVXMcxZad9ZWGmdkgSboZeDlwJ+kbfqsBuugstyU5aZiZDVKeoHAREfH3wnGMAY4HtiFdYVwBfKQXYzU8jYiZ2SDl5LAusH1+/Dj1fK5OAaYCLwHWAX5Hj6Yz8ZWGmdkgSToamARsEBGvkPQS4FcRsU3hOLzcq5nZC8DbgN2AxwAi4m5gpRrieEDSeyQNz7f3AA/2oiAnDTOzwXs6UnVNAOS1wutwEGmW3X/l2zvyvq5zl1szs8E7S9IPgVUkvZ/0Qf2j0kFExD9IVzw95zYNM7PnQdIOpPERAs6PiAtriOGlwPeAyaSrnj8DH4uIO7pelpOGmdkLm6Srge8DZ+RdewMfjojXdL0sJw0zsyUjaS4LFj1aRC9ml+2PpL90JghJV0fE5G6X5TYNM7MlFBErAUg6htTwfBqpempfCvaekrRafniJpCOAM0nJ7F3AuT0p01caZmaDs5hv+Ivs62H5d5KShPp4OiLipd0u01caZmaD96ykfVnwDX8f4NlShUfEuFJltfhKw8xskCSNJfVaas35dCXw0Yi4q1D520fEn/LKfYvw1OhmZg2Sk8PuNYbwOuBPwK59POep0c3MmkTSSOB9wEbAyNb+iOjJaOzFxDAMeEdEnFWiPE8jYmY2eKeRVsx7M3ApMAaYWzKAiHgO+FCp8nylYWY2SJKui4hXS7ohIjaVNII0Knz7wnEcBTwB/JI8eSJARPy722W5TcPMbPCeyff/kbQxaczG2BriaFWHHda2LwB3uTUza5CTJa0KHEVaBGnF/Liokl1vXT1lZmaVuSHczGyQJK0s6TuSpufbNyWtXHdcveSkYWY2eD8FHiEtgPROUs+pnqzN3RSunjIzG6SSa3MPEEdrssSXRsQxktYDXhwRf+12Wb7SMDMbvCckbdvakLQNqetraT8AtiLNfQXpiuf7vSjIvafMzAbvEODU3I4h4N/AATXE8ZqImCDpOoCIeEjSsr0oyEnDzGyQIuJ6YDNJo/L2IzWF8oyk4eSFoSSNBp7rRUFOGmZmgyRpOeDtpAF9y6SmBYiIYwqHchxwNrCmpC8D7wA+14uC3BBuZjZIkv4IPAzMoG0djYj4Vg2xvBJ4I6ma7OKIuKUn5ThpmJkNjqQbI2LjuuMAyNVTa9FWgxQR/+h2Oa6eMjMbvKskbRIRs+oMQtKHgaOBe0lXPCK1b2za9bJ8pWFmtmQkzSJ9KC8DjAfuAJ4if1hHRNc/rAeIZzapB9WDvS7LVxpmZktul7oD6PBPUttKzzlpmJktoYj4e+uxpAnAtuQ1wiPi2hpCugOYJulc0hUPABHx7W4X5BHhZmaDJOm/gVOA1YE1gCmSetLVdQD/AC4ElgVWart1nds0zMwGSdItwKsj4sm8vTxwbUS8qt7IesfVU2Zmg3cXMBJ4Mm8vB/ytVOGSvhsRH5X0O/Jo8HYRsVu3y3TSMDMbvKeAmyRdSPrQ3gG4QtJxABFxeI/LPy3ff7PH5czn6ikzs0GStH9/z0fEKQViGA6cEhHv6XVZ4CsNM7NBa08Kea3wdSPihsIxPCtptKRlI+LpXpfnpGFmNkiSpgG7kT5LZwL3S7o0Ij5eOJS7gCslTQUea+10l1szs2ZZOU+HvicwJSImAm+qIY67gd+TPtN72uXWVxpmZoO3jKS1SeuDf7auICLiC6XKctIwMxu8Y4DzSSPBr5H0UuD20kFIuoS+u9xu3/Wy3HvKzOyFTdLEts2RpIWh5kXEp7pelpOGmdngSBoDHA9sQ/qmfwXwkYiYU2tgQG6Qf12339cN4WZmgzcFmAq8BFgH+F3eV5Sk1dpua0h6M/DinpTlKw0zs8GRNDMiNh9oX4E47iRd6QiYB9wJHBMRV3S7LDeEm5kN3gOS3gOckbf3AXq+EFKniBhXqixfaZiZDZKk9YATgK1I3/SvIrVp/L3fA7sfx0jggyxY1+MK4MTW7LtdLctJw8zshU3SWcBc4Od51z7AqhGxV9fLctIwMxscSaOB9wNjaavuj4iDCsdxfURsNtC+bnCbhpnZ4J0DXA5cBDxbYxzXSZocEVcDSHoNcGUvCvKVhpnZINXRU2oxcdwCbEBa9hVgPeAW4DkgImLTbpXlKw0zs8H7vaS3RMR5NcexU6mCfKVhZraEJM1lwbiIFYCngWfy0xERo+qKrdecNMzMrDJXT5mZPQ+S9mTB+IjLI+K39UbUW77SMDMbJEk/AF7OghHh7wL+FhGH1RdVbzlpmJkNkqSbgI0jf5BKGgbMioiN6o2sdzzLrZnZ4N1G6t7asi5wQ02xFOErDTOzQZJ0KbAF8Ne8awvgz8DjABGxW02h9Ywbws3MBu+/6w6gNF9pmJl1gaRdIuL3dcfRa04aZmZdIOnaiJhQdxy95oZwM7PuUN0BlOCkYWbWHR+oO4ASXD1lZraEJG2XHz7dmo58qHDvKTOzJXdgvv8PMKSShq80zMysMl9pmJkNgqQtSdOgXyNpQ9KaFrc2YG2NnvKVhpnZEpJ0NLAz6Yv3hcBrgGnAm4DzI+LL9UXXW04aZmZLSNIsYHNgOeBfwJiIeETS8sBfurm8atO4y62Z2ZKbFxHPRsTjpKnQHwGIiCdI63IvtZw0zMyW3NOSXpQfT2ztlLQyS3nScPWUmdkSkrRcRDzVx/41gLUjYlYNYRXhpGFmZpW5esrMzCpz0jAzs8o8uM+sSyStDlycN18MPAvcn7e3jIinawnMrIvcpmHWA5I+DzwaEd+s8NplImJe76Mye/5cPWXWQ5ImSrpU0gxJ50taO++fJukreY3pj+Tt70i6TNItkraQ9BtJt0v6Us0/htl8ThpmvSPgeOAdETER+CnQPr3EKhHxuoj4Vt5+OiK2A04CzgEOAzYGDshVX2a1c5uGWe8sR/rQv1ASwHDgnrbnf9nx+qn5fhZwU0TcAyDpDmBd4MGeRmtWgZOGWe+I9OG/1WKef6xjuzVY7Lm2x61t/69aI7h6yqx3ngJGS9oKQNIISRvVHJPZ8+KkYdY7zwHvAL4m6XpgJrB1rRGZPU/ucmtmZpX5SsPMzCpz0jAzs8qcNMzMrDInDTMzq8xJw8zMKnPSMDOzypw0zMysMicNMzOr7P8DAX9Ptx3NDCwAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "bp_GO_top10.plot.bar(x=\"Term\", y=\"Enrichment\")" + ] + }, + { + "cell_type": "markdown", + "id": "a6dcf583-f555-48b6-b330-b9bdfdd295da", + "metadata": {}, + "source": [ + "Homer also saves an html file where you can navigate through the various categories." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "deac4a6f-882c-42eb-acb5-f74712bbec2a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#View the html results\n", + "IFrame(src='Tutorial3/GenomeAnnotation/CTL_GO/geneOntology.html', width=900, height=600)" + ] + }, + { + "cell_type": "markdown", + "id": "c1e519a4-f4b8-4641-b03d-2e8d51ad9e6f", + "metadata": {}, + "source": [ + "In the above html you can click throught the different ontology categories to view enriched terms and scores for genes near our differential peaks. Note that there are links to motifs, but these lead to \"pages not found\" because we have yet to do this analysis. We will run motif analysis in the next section using TOBIAS." + ] + }, + { + "cell_type": "markdown", + "id": "ff448764-630e-4898-8321-19bb6f6d357e", + "metadata": {}, + "source": [ + "
\n", + "Motif Footprinting\n", + "
\n", + "\n", + "### ATAC-seq can be used to identify accessibility at transcription factor (TF) binding sites. We'll use [tobias](https://anaconda.org/bioconda/tobias).\n", + "\n", + "\"Drawing\"\n", + "\n", + "From: [Bentsen et al., Nat. Comm. 2020](https://www.nature.com/articles/s41467-020-18035-1)\n", + "\n", + "Tn5 insertion during ATAC-seq has a sequence bias. In our first step, let's correct for that bias." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "bd4b3b34-2e1a-40f3-9f41-ad0bd6ae20f5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "# TOBIAS 0.13.3 ATACorrect (run started 2022-09-08 17:20:57.460575)\n", + "# Working directory: /home/jupyter\n", + "# Command line call: TOBIAS ATACorrect --bam Tutorial3/InputFiles/CTL_dedup.bam --genome Tutorial3/InputFiles/chr4.fa --peaks Tutorial3/MotifFootprinting/MasterPeakList.bed --outdir Tutorial3/MotifFootprinting --prefix CTL --cores 3 --verbosity 1\n", + "\n", + "# ----- Input parameters -----\n", + "# bam:\tTutorial3/InputFiles/CTL_dedup.bam\n", + "# genome:\tTutorial3/InputFiles/chr4.fa\n", + "# peaks:\tTutorial3/MotifFootprinting/MasterPeakList.bed\n", + "# regions_in:\tNone\n", + "# regions_out:\tNone\n", + "# blacklist:\tNone\n", + "# extend:\t100\n", + "# split_strands:\tFalse\n", + "# norm_off:\tFalse\n", + "# track_off:\t[]\n", + "# k_flank:\t12\n", + "# read_shift:\t[4, -5]\n", + "# bg_shift:\t100\n", + "# window:\t100\n", + "# score_mat:\tDWM\n", + "# prefix:\tCTL\n", + "# outdir:\t/home/jupyter/Tutorial3/MotifFootprinting\n", + "# cores:\t3\n", + "# split:\t100\n", + "# verbosity:\t1\n", + "\n", + "\n", + "# ----- Output files -----\n", + "# /home/jupyter/Tutorial3/MotifFootprinting/CTL_uncorrected.bw\n", + "# /home/jupyter/Tutorial3/MotifFootprinting/CTL_bias.bw\n", + "# /home/jupyter/Tutorial3/MotifFootprinting/CTL_expected.bw\n", + "# /home/jupyter/Tutorial3/MotifFootprinting/CTL_corrected.bw\n", + "# /home/jupyter/Tutorial3/MotifFootprinting/CTL_atacorrect.pdf\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "# TOBIAS 0.13.3 ATACorrect (run started 2022-09-08 17:22:15.527430)\n", + "# Working directory: /home/jupyter\n", + "# Command line call: TOBIAS ATACorrect --bam Tutorial3/InputFiles/Mutant_dedup.bam --genome Tutorial3/InputFiles/chr4.fa --peaks Tutorial3/MotifFootprinting/MasterPeakList.bed --outdir Tutorial3/MotifFootprinting --prefix Mutant --cores 3 --verbosity 1\n", + "\n", + "# ----- Input parameters -----\n", + "# bam:\tTutorial3/InputFiles/Mutant_dedup.bam\n", + "# genome:\tTutorial3/InputFiles/chr4.fa\n", + "# peaks:\tTutorial3/MotifFootprinting/MasterPeakList.bed\n", + "# regions_in:\tNone\n", + "# regions_out:\tNone\n", + "# blacklist:\tNone\n", + "# extend:\t100\n", + "# split_strands:\tFalse\n", + "# norm_off:\tFalse\n", + "# track_off:\t[]\n", + "# k_flank:\t12\n", + "# read_shift:\t[4, -5]\n", + "# bg_shift:\t100\n", + "# window:\t100\n", + "# score_mat:\tDWM\n", + "# prefix:\tMutant\n", + "# outdir:\t/home/jupyter/Tutorial3/MotifFootprinting\n", + "# cores:\t3\n", + "# split:\t100\n", + "# verbosity:\t1\n", + "\n", + "\n", + "# ----- Output files -----\n", + "# /home/jupyter/Tutorial3/MotifFootprinting/Mutant_uncorrected.bw\n", + "# /home/jupyter/Tutorial3/MotifFootprinting/Mutant_bias.bw\n", + "# /home/jupyter/Tutorial3/MotifFootprinting/Mutant_expected.bw\n", + "# /home/jupyter/Tutorial3/MotifFootprinting/Mutant_corrected.bw\n", + "# /home/jupyter/Tutorial3/MotifFootprinting/Mutant_atacorrect.pdf\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "done\n" + ] + } + ], + "source": [ + "#Tn5 has an insertion sequence bias, which Tobias can correct for. Let's use the master list of peaks provided by manorm, but we need to first remove the header and extra columns.\n", + "!cat Tutorial3/DiffPeaks/CTL_vs_Mutant_all_MAvalues.xls | cut -f 1-3 | grep -v start > Tutorial3/MotifFootprinting/MasterPeakList.bed\n", + "\n", + "#Now let's do the signal correction\n", + "!TOBIAS ATACorrect --bam Tutorial3/InputFiles/CTL_dedup.bam --genome Tutorial3/InputFiles/chr4.fa --peaks Tutorial3/MotifFootprinting/MasterPeakList.bed --outdir Tutorial3/MotifFootprinting --prefix CTL --cores $numthreadsint --verbosity 1\n", + "#Let's also do this for the mutant\n", + "!TOBIAS ATACorrect --bam Tutorial3/InputFiles/Mutant_dedup.bam --genome Tutorial3/InputFiles/chr4.fa --peaks Tutorial3/MotifFootprinting/MasterPeakList.bed --outdir Tutorial3/MotifFootprinting --prefix Mutant --cores $numthreadsint --verbosity 1\n", + "\n", + "print(\"done\")" + ] + }, + { + "cell_type": "markdown", + "id": "21da1001-529f-4e62-8e44-2f475bfd35d4", + "metadata": {}, + "source": [ + "Now let's use the bias-corrected bigwig files to calculate footprint scores around peaks" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "6ca0ae04-b409-4c5d-b318-0887edc0f3c8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "# TOBIAS 0.13.3 ScoreBigwig (run started 2022-09-08 17:23:22.614510)\n", + "# Working directory: /home/jupyter\n", + "# Command line call: TOBIAS ScoreBigwig -s Tutorial3/MotifFootprinting/CTL_corrected.bw -r Tutorial3/MotifFootprinting/MasterPeakList.bed -o Tutorial3/MotifFootprinting/CTL_footprintscores.bw --cores 3 --verbosity 1\n", + "\n", + "# ----- Input parameters -----\n", + "# signal:\tTutorial3/MotifFootprinting/CTL_corrected.bw\n", + "# output:\tTutorial3/MotifFootprinting/CTL_footprintscores.bw\n", + "# regions:\tTutorial3/MotifFootprinting/MasterPeakList.bed\n", + "# score:\tfootprint\n", + "# absolute:\tFalse\n", + "# extend:\t100\n", + "# smooth:\t1\n", + "# min_limit:\tNone\n", + "# max_limit:\tNone\n", + "# fp_min:\t20\n", + "# fp_max:\t50\n", + "# flank_min:\t10\n", + "# flank_max:\t30\n", + "# window:\t100\n", + "# cores:\t3\n", + "# split:\t100\n", + "# verbosity:\t1\n", + "\n", + "\n", + "# ----- Output files -----\n", + "# Tutorial3/MotifFootprinting/CTL_footprintscores.bw\n", + "\n", + "\n", + "\n", + "# TOBIAS 0.13.3 ScoreBigwig (run started 2022-09-08 17:23:51.559028)\n", + "# Working directory: /home/jupyter\n", + "# Command line call: TOBIAS ScoreBigwig -s Tutorial3/MotifFootprinting/Mutant_corrected.bw -r Tutorial3/MotifFootprinting/MasterPeakList.bed -o Tutorial3/MotifFootprinting/Mutant_footprintscores.bw --cores 3 --verbosity 1\n", + "\n", + "# ----- Input parameters -----\n", + "# signal:\tTutorial3/MotifFootprinting/Mutant_corrected.bw\n", + "# output:\tTutorial3/MotifFootprinting/Mutant_footprintscores.bw\n", + "# regions:\tTutorial3/MotifFootprinting/MasterPeakList.bed\n", + "# score:\tfootprint\n", + "# absolute:\tFalse\n", + "# extend:\t100\n", + "# smooth:\t1\n", + "# min_limit:\tNone\n", + "# max_limit:\tNone\n", + "# fp_min:\t20\n", + "# fp_max:\t50\n", + "# flank_min:\t10\n", + "# flank_max:\t30\n", + "# window:\t100\n", + "# cores:\t3\n", + "# split:\t100\n", + "# verbosity:\t1\n", + "\n", + "\n", + "# ----- Output files -----\n", + "# Tutorial3/MotifFootprinting/Mutant_footprintscores.bw\n", + "\n", + "\n", + "\n" + ] + } + ], + "source": [ + "!TOBIAS ScoreBigwig -s Tutorial3/MotifFootprinting/CTL_corrected.bw -r Tutorial3/MotifFootprinting/MasterPeakList.bed -o Tutorial3/MotifFootprinting/CTL_footprintscores.bw --cores $numthreadsint --verbosity 1\n", + "\n", + "#Let's do the same for our mutant sample\n", + "!TOBIAS ScoreBigwig -s Tutorial3/MotifFootprinting/Mutant_corrected.bw -r Tutorial3/MotifFootprinting/MasterPeakList.bed -o Tutorial3/MotifFootprinting/Mutant_footprintscores.bw --cores $numthreadsint --verbosity 1\n" + ] + }, + { + "cell_type": "markdown", + "id": "affb7253-ed1b-4b21-8377-47f20f868eab", + "metadata": {}, + "source": [ + "Now that we have our corrected signal and footprint scores, let's do TF binding site prediciton as well as differential footprinting.\n", + "\n", + "Caution: this step searches throug the signal at every signal location corresponding to motifs in your jaspar file. Here we use all the motifs in the jaspar database. This can take several minutes..." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "688f95c8-2649-4f7b-aa91-43ac8f4cd163", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--2022-09-08 17:24:20-- https://jaspar.genereg.net/download/data/2022/CORE/JASPAR2022_CORE_vertebrates_non-redundant_pfms_jaspar.txt\n", + "Resolving jaspar.genereg.net (jaspar.genereg.net)... 193.60.222.202\n", + "Connecting to jaspar.genereg.net (jaspar.genereg.net)|193.60.222.202|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 327864 (320K) [text/plain]\n", + "Saving to: ‘Tutorial3/MotifFootprinting/JASPAR2022_CORE_vertebrates_non-redundant_pfms_jaspar.txt.2’\n", + "\n", + "JASPAR2022_CORE_ver 100%[===================>] 320.18K 819KB/s in 0.4s \n", + "\n", + "2022-09-08 17:24:21 (819 KB/s) - ‘Tutorial3/MotifFootprinting/JASPAR2022_CORE_vertebrates_non-redundant_pfms_jaspar.txt.2’ saved [327864/327864]\n", + "\n", + "# TOBIAS 0.13.3 BINDetect (run started 2022-09-08 17:24:29.162477)\n", + "# Working directory: /home/jupyter\n", + "# Command line call: TOBIAS BINDetect --motifs Tutorial3/MotifFootprinting/JASPAR2022_CORE_vertebrates_non-redundant_pfms_jaspar.txt --signals Tutorial3/MotifFootprinting/CTL_footprintscores.bw Tutorial3/MotifFootprinting/Mutant_footprintscores.bw --genome Tutorial3/InputFiles/chr4.fa --peaks Tutorial3/MotifFootprinting/MasterPeakList.bed --outdir Tutorial3/MotifFootprinting/DiffMotifs --cond_names CTL Mutant --cores 3 --verbosity 1\n", + "\n", + "# ----- Input parameters -----\n", + "# signals:\t['Tutorial3/MotifFootprinting/CTL_footprintscores.bw', 'Tutorial3/MotifFootprinting/Mutant_footprintscores.bw']\n", + "# peaks:\tTutorial3/MotifFootprinting/MasterPeakList.bed\n", + "# motifs:\t['Tutorial3/MotifFootprinting/JASPAR2022_CORE_vertebrates_non-redundant_pfms_jaspar.txt']\n", + "# genome:\tTutorial3/InputFiles/chr4.fa\n", + "# cond_names:\t['CTL', 'Mutant']\n", + "# peak_header:\tNone\n", + "# naming:\tname_id\n", + "# motif_pvalue:\t0.0001\n", + "# bound_pvalue:\t0.001\n", + "# pseudo:\tNone\n", + "# time_series:\tFalse\n", + "# skip_excel:\tFalse\n", + "# output_peaks:\tNone\n", + "# norm_off:\tFalse\n", + "# prefix:\tbindetect\n", + "# outdir:\t/home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs\n", + "# cores:\t3\n", + "# split:\t100\n", + "# debug:\tFalse\n", + "# verbosity:\t1\n", + "\n", + "\n", + "# ----- Output files -----\n", + "# /home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs/*/beds/*_CTL_bound.bed\n", + "# /home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs/*/beds/*_CTL_unbound.bed\n", + "# /home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs/*/beds/*_Mutant_bound.bed\n", + "# /home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs/*/beds/*_Mutant_unbound.bed\n", + "# /home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs/*/beds/*_all.bed\n", + "# /home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs/*/plots/*_log2fcs.pdf\n", + "# /home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs/*/*_overview.txt\n", + "# /home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs/*/*_overview.xlsx\n", + "# /home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs/bindetect_distances.txt\n", + "# /home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs/bindetect_results.txt\n", + "# /home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs/bindetect_results.xlsx\n", + "# /home/jupyter/Tutorial3/MotifFootprinting/DiffMotifs/bindetect_figures.pdf\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "done\n" + ] + } + ], + "source": [ + "#First, we'll download the current jaspar motifs\n", + "!wget https://jaspar.genereg.net/download/data/2022/CORE/JASPAR2022_CORE_vertebrates_non-redundant_pfms_jaspar.txt -P Tutorial3/MotifFootprinting/\n", + "\n", + "#Next we can calculate statistics for each motif represented in our jaspar motif file. If we list both our CTL and Mutant sample, it will calculate the differential footprint score for us as well.\n", + "!TOBIAS BINDetect --motifs Tutorial3/MotifFootprinting/JASPAR2022_CORE_vertebrates_non-redundant_pfms_jaspar.txt --signals Tutorial3/MotifFootprinting/CTL_footprintscores.bw Tutorial3/MotifFootprinting/Mutant_footprintscores.bw --genome Tutorial3/InputFiles/chr4.fa --peaks Tutorial3/MotifFootprinting/MasterPeakList.bed --outdir Tutorial3/MotifFootprinting/DiffMotifs --cond_names CTL Mutant --cores $numthreadsint --verbosity 1\n", + "\n", + "print(\"done\")" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "880bab0f-ee58-4f1b-8e62-e1e6e1811809", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#View the html results\n", + "IFrame(src='Tutorial3/MotifFootprinting/DiffMotifs/bindetect_CTL_Mutant.html', width=900, height=600)" + ] + }, + { + "cell_type": "markdown", + "id": "e5180387-42ea-4d87-b1f2-2d320640af2b", + "metadata": {}, + "source": [ + "In the above html file you can hover over each point to see the motif name and the sequence. This type of plot is a volcano plot showing the differntial signal on the x-axis and the significance values on the y-axis.\n", + "\n", + "For example, the original paper focused on TP63, which is one of our differential dots in the html file. \n", + "\n", + "\"Drawing\"\n", + "\n", + "Let's visualize the averge footprint at TP63 motifs." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "f9683a4e-48ba-426b-91cb-5befa06b1d32", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "# TOBIAS 0.13.3 PlotAggregate (run started 2022-09-08 17:32:40.206683)\n", + "# Working directory: /home/jupyter\n", + "# Command line call: TOBIAS PlotAggregate --TFBS Tutorial3/MotifFootprinting/DiffMotifs/TP63_MA0525.2/beds/TP63_MA0525.2_all.bed --signals Tutorial3/MotifFootprinting/CTL_corrected.bw Tutorial3/MotifFootprinting/Mutant_corrected.bw --output Tutorial3/MotifFootprinting/TP63_footprint_compare.png --share_y both --verbosity 1 --plot_boundaries --flank 60 --smooth 2 --signal-on-x\n", + "\n", + "# ----- Input parameters -----\n", + "# TFBS:\t['Tutorial3/MotifFootprinting/DiffMotifs/TP63_MA0525.2/beds/TP63_MA0525.2_all.bed']\n", + "# signals:\t['Tutorial3/MotifFootprinting/CTL_corrected.bw', 'Tutorial3/MotifFootprinting/Mutant_corrected.bw']\n", + "# regions:\t[]\n", + "# whitelist:\t[]\n", + "# blacklist:\t[]\n", + "# output:\tTutorial3/MotifFootprinting/TP63_footprint_compare.png\n", + "# output_txt:\tNone\n", + "# title:\tAggregated signals\n", + "# flank:\t60\n", + "# TFBS_labels:\tNone\n", + "# signal_labels:\tNone\n", + "# region_labels:\tNone\n", + "# share_y:\tboth\n", + "# normalize:\tFalse\n", + "# negate:\tFalse\n", + "# smooth:\t2\n", + "# log_transform:\tFalse\n", + "# plot_boundaries:\tTrue\n", + "# signal_on_x:\tTrue\n", + "# remove_outliers:\t1\n", + "# verbosity:\t1\n", + "\n", + "\n", + "# ----- Output files -----\n", + "# Tutorial3/MotifFootprinting/TP63_footprint_compare.png\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + } + ], + "source": [ + "#IFrame(src='Tutorial2/MotifFootprinting/MYBL1_MA0776.1/plots/MYBL1_MA0776.1_log2fcs.pdf', width=900, height=600) \n", + "\n", + "#note change to Tutorial3\n", + "#!TOBIAS PlotAggregate --TFBS Tutorial3/MotifFootprinting/DiffMotifs/TP63_MA0525.2/beds/TP63_MA0525.2_all.bed --signals Tutorial3/MotifFootprinting/CTL_corrected.bw Tutorial3/MotifFootprinting/Mutant_corrected.bw --output Tutorial3/MotifFootprinting/TP63_footprint_compare.png --share_y both --verbosity 1 --plot_boundaries --flank 60 --smooth 2\n", + "!TOBIAS PlotAggregate --TFBS Tutorial3/MotifFootprinting/DiffMotifs/TP63_MA0525.2/beds/TP63_MA0525.2_all.bed --signals Tutorial3/MotifFootprinting/CTL_corrected.bw Tutorial3/MotifFootprinting/Mutant_corrected.bw --output Tutorial3/MotifFootprinting/TP63_footprint_compare.png --share_y both --verbosity 1 --plot_boundaries --flank 60 --smooth 2 --signal-on-x" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "ad9b80da-1111-4079-a308-d7cb6ddc2a2d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "IFrame(src='Tutorial3/MotifFootprinting/TP63_footprint_compare.png', width=600, height=400) " + ] + }, + { + "cell_type": "markdown", + "id": "a0b72adc-4b71-4234-9549-6381a56bfb39", + "metadata": {}, + "source": [ + "We can also get all the motifs that have differential footprints:" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "5a06ef84-9a27-4d55-be1d-fed572711daa", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
output_prefixnamemotif_idclustertotal_tfbsCTL_mean_scoreCTL_boundMutant_mean_scoreMutant_boundCTL_Mutant_changeCTL_Mutant_pvalue
0Arnt_MA0004.1ArntMA0004.1C_MYC3885.9698916108.4983617-0.380446.770010e-46
1AhrArnt_MA0006.1Ahr::ArntMA0006.1C_Ahr::Arnt48122.7626124115.51752220.169111.449010e-19
2Ddit3Cebpa_MA0019.1Ddit3::CebpaMA0019.1C_Ddit3::Cebpa6280.029842480.33066230.014843.154620e-01
3Mecom_MA0029.1MecomMA0029.1C_Mecom7461.733752058.21405210.042126.585970e-03
4FOXF2_MA0030.1FOXF2MA0030.1C_FOXD17054.918161657.50246120.027618.515360e-02
....................................
836ZNF281_MA1630.2ZNF281MA1630.2C_ZNF28144287.4793917793.39031192-0.098215.581870e-38
837BACH1_MA1633.2BACH1MA1633.2C_JUNB292107.3483918093.782441320.444311.568740e-86
838Prdm4_MA1647.2Prdm4MA1647.2C_Prdm49065.875052860.36949240.215061.012680e-39
839THAP1_MA0597.2THAP1MA0597.2C_THAP123690.5692810182.79266920.163606.101670e-48
840NR5A1_MA1540.2NR5A1MA1540.2C_NR5A18860.873092063.31646240.003842.234170e-01
\n", + "

841 rows × 11 columns

\n", + "
" + ], + "text/plain": [ + " output_prefix name motif_id cluster total_tfbs \\\n", + "0 Arnt_MA0004.1 Arnt MA0004.1 C_MYC 38 \n", + "1 AhrArnt_MA0006.1 Ahr::Arnt MA0006.1 C_Ahr::Arnt 48 \n", + "2 Ddit3Cebpa_MA0019.1 Ddit3::Cebpa MA0019.1 C_Ddit3::Cebpa 62 \n", + "3 Mecom_MA0029.1 Mecom MA0029.1 C_Mecom 74 \n", + "4 FOXF2_MA0030.1 FOXF2 MA0030.1 C_FOXD1 70 \n", + ".. ... ... ... ... ... \n", + "836 ZNF281_MA1630.2 ZNF281 MA1630.2 C_ZNF281 442 \n", + "837 BACH1_MA1633.2 BACH1 MA1633.2 C_JUNB 292 \n", + "838 Prdm4_MA1647.2 Prdm4 MA1647.2 C_Prdm4 90 \n", + "839 THAP1_MA0597.2 THAP1 MA0597.2 C_THAP1 236 \n", + "840 NR5A1_MA1540.2 NR5A1 MA1540.2 C_NR5A1 88 \n", + "\n", + " CTL_mean_score CTL_bound Mutant_mean_score Mutant_bound \\\n", + "0 85.96989 16 108.49836 17 \n", + "1 122.76261 24 115.51752 22 \n", + "2 80.02984 24 80.33066 23 \n", + "3 61.73375 20 58.21405 21 \n", + "4 54.91816 16 57.50246 12 \n", + ".. ... ... ... ... \n", + "836 87.47939 177 93.39031 192 \n", + "837 107.34839 180 93.78244 132 \n", + "838 65.87505 28 60.36949 24 \n", + "839 90.56928 101 82.79266 92 \n", + "840 60.87309 20 63.31646 24 \n", + "\n", + " CTL_Mutant_change CTL_Mutant_pvalue \n", + "0 -0.38044 6.770010e-46 \n", + "1 0.16911 1.449010e-19 \n", + "2 0.01484 3.154620e-01 \n", + "3 0.04212 6.585970e-03 \n", + "4 0.02761 8.515360e-02 \n", + ".. ... ... \n", + "836 -0.09821 5.581870e-38 \n", + "837 0.44431 1.568740e-86 \n", + "838 0.21506 1.012680e-39 \n", + "839 0.16360 6.101670e-48 \n", + "840 0.00384 2.234170e-01 \n", + "\n", + "[841 rows x 11 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#!load the results as a pandas table Tutorial2/MotifFootprinting/bindetect_results.txt\n", + "dframe = pd.read_csv(\"Tutorial3/MotifFootprinting/DiffMotifs/bindetect_results.txt\", sep='\\t')\n", + "display(dframe)\n", + "DiffMotifs = dframe[dframe['CTL_Mutant_pvalue'] < .05]\n", + "#Write out to a tab separated file\n", + "DiffMotifs.to_csv('Tutorial3/MotifFootprinting/DiffMotifs_p05.txt')" + ] + }, + { + "cell_type": "markdown", + "id": "12439dc4-b9ad-49fa-9ccb-4383a272bcaf", + "metadata": {}, + "source": [ + "
\n", + "Great job! \n", + "
\n", + "Thank you for completing these tutorials. Feel free to download these notebooks, customize, and use them to process your own data. \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b3de930a-e91c-4d95-8d78-f98689f503ed", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "environment": { + "kernel": "python3", + "name": "common-cpu.m94", + "type": "gcloud", + "uri": "gcr.io/deeplearning-platform-release/base-cpu:m94" + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/notebooks/DL-gwas-gcp-example/1-d10-run-first.ipynb b/tutorials/notebooks/DL-gwas-gcp-example/1-d10-run-first.ipynb new file mode 100644 index 0000000..9e1fd1e --- /dev/null +++ b/tutorials/notebooks/DL-gwas-gcp-example/1-d10-run-first.ipynb @@ -0,0 +1,1205 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "ddee0923-844f-42c8-9273-7e32d7178628", + "metadata": { + "tags": [ + "skip" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Defaulting to user installation because normal site-packages is not writeable\n", + "Requirement already satisfied: pip in /usr/local/lib/python3.8/dist-packages (22.0.4)\n", + "Collecting pip\n", + " Downloading pip-22.3.1-py3-none-any.whl (2.1 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.1/2.1 MB\u001b[0m \u001b[31m29.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n", + "\u001b[?25hInstalling collected packages: pip\n", + "Successfully installed pip-22.3.1\n", + "\u001b[33mWARNING: You are using pip version 22.0.4; however, version 22.3.1 is available.\n", + "You should consider upgrading via the '/usr/bin/python3 -m pip install --upgrade pip' command.\u001b[0m\u001b[33m\n", + "\u001b[0mDefaulting to user installation because normal site-packages is not writeable\n", + "Collecting pendulum==2.1.2\n", + " Downloading pendulum-2.1.2-cp38-cp38-manylinux1_x86_64.whl (155 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m155.7/155.7 kB\u001b[0m \u001b[31m6.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting pytzdata>=2020.1\n", + " Downloading pytzdata-2020.1-py2.py3-none-any.whl (489 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m490.0/490.0 kB\u001b[0m \u001b[31m25.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: python-dateutil<3.0,>=2.6 in /usr/local/lib/python3.8/dist-packages (from pendulum==2.1.2) (2.8.2)\n", + "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.8/dist-packages (from python-dateutil<3.0,>=2.6->pendulum==2.1.2) (1.16.0)\n", + "Installing collected packages: pytzdata, pendulum\n", + "Successfully installed pendulum-2.1.2 pytzdata-2020.1\n", + "Defaulting to user installation because normal site-packages is not writeable\n", + "Requirement already satisfied: pandas==1.4.4 in /usr/local/lib/python3.8/dist-packages (1.4.4)\n", + "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.8/dist-packages (from pandas==1.4.4) (2022.5)\n", + "Requirement already satisfied: python-dateutil>=2.8.1 in /usr/local/lib/python3.8/dist-packages (from pandas==1.4.4) (2.8.2)\n", + "Requirement already satisfied: numpy>=1.18.5 in /usr/local/lib/python3.8/dist-packages (from pandas==1.4.4) (1.19.5)\n", + "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.8/dist-packages (from python-dateutil>=2.8.1->pandas==1.4.4) (1.16.0)\n", + "Defaulting to user installation because normal site-packages is not writeable\n", + "Requirement already satisfied: matplotlib==3.3.4 in /usr/local/lib/python3.8/dist-packages (3.3.4)\n", + "Requirement already satisfied: numpy>=1.15 in /usr/local/lib/python3.8/dist-packages (from matplotlib==3.3.4) (1.19.5)\n", + "Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.8/dist-packages (from matplotlib==3.3.4) (9.2.0)\n", + "Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.8/dist-packages (from matplotlib==3.3.4) (2.8.2)\n", + "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.3 in /usr/local/lib/python3.8/dist-packages (from matplotlib==3.3.4) (3.0.9)\n", + "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.8/dist-packages (from matplotlib==3.3.4) (0.11.0)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.8/dist-packages (from matplotlib==3.3.4) (1.4.4)\n", + "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.8/dist-packages (from python-dateutil>=2.1->matplotlib==3.3.4) (1.16.0)\n", + "Defaulting to user installation because normal site-packages is not writeable\n", + "Collecting tensorflow==2.11.0\n", + " Downloading tensorflow-2.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (588.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m588.3/588.3 MB\u001b[0m \u001b[31m4.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: wrapt>=1.11.0 in /usr/local/lib/python3.8/dist-packages (from tensorflow==2.11.0) (1.14.1)\n", + "Collecting tensorboard<2.12,>=2.11\n", + " Downloading tensorboard-2.11.0-py3-none-any.whl (6.0 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6.0/6.0 MB\u001b[0m \u001b[31m100.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: packaging in /usr/local/lib/python3.8/dist-packages (from tensorflow==2.11.0) (21.3)\n", + "Collecting tensorflow-estimator<2.12,>=2.11.0\n", + " Downloading tensorflow_estimator-2.11.0-py2.py3-none-any.whl (439 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m439.2/439.2 kB\u001b[0m \u001b[31m57.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting tensorflow-io-gcs-filesystem>=0.23.1\n", + " Downloading tensorflow_io_gcs_filesystem-0.29.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (2.4 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.4/2.4 MB\u001b[0m \u001b[31m92.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting opt-einsum>=2.3.2\n", + " Downloading opt_einsum-3.3.0-py3-none-any.whl (65 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m65.5/65.5 kB\u001b[0m \u001b[31m10.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting protobuf<3.20,>=3.9.2\n", + " Downloading protobuf-3.19.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.1/1.1 MB\u001b[0m \u001b[31m92.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting google-pasta>=0.1.1\n", + " Downloading google_pasta-0.2.0-py3-none-any.whl (57 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m57.5/57.5 kB\u001b[0m \u001b[31m11.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting libclang>=13.0.0\n", + " Downloading libclang-14.0.6-py2.py3-none-manylinux2010_x86_64.whl (14.1 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m14.1/14.1 MB\u001b[0m \u001b[31m109.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hCollecting absl-py>=1.0.0\n", + " Downloading absl_py-1.3.0-py3-none-any.whl (124 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m124.6/124.6 kB\u001b[0m \u001b[31m26.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting gast<=0.4.0,>=0.2.1\n", + " Downloading gast-0.4.0-py3-none-any.whl (9.8 kB)\n", + "Requirement already satisfied: setuptools in /usr/local/lib/python3.8/dist-packages (from tensorflow==2.11.0) (62.0.0)\n", + "Collecting astunparse>=1.6.0\n", + " Downloading astunparse-1.6.3-py2.py3-none-any.whl (12 kB)\n", + "Requirement already satisfied: termcolor>=1.1.0 in /usr/local/lib/python3.8/dist-packages (from tensorflow==2.11.0) (2.0.1)\n", + "Collecting flatbuffers>=2.0\n", + " Downloading flatbuffers-23.1.4-py2.py3-none-any.whl (26 kB)\n", + "Requirement already satisfied: six>=1.12.0 in /usr/local/lib/python3.8/dist-packages (from tensorflow==2.11.0) (1.16.0)\n", + "Collecting keras<2.12,>=2.11.0\n", + " Downloading keras-2.11.0-py2.py3-none-any.whl (1.7 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.7/1.7 MB\u001b[0m \u001b[31m76.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting numpy>=1.20\n", + " Downloading numpy-1.24.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (17.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m17.3/17.3 MB\u001b[0m \u001b[31m108.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hCollecting h5py>=2.9.0\n", + " Downloading h5py-3.7.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (4.5 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.5/4.5 MB\u001b[0m \u001b[31m91.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: typing-extensions>=3.6.6 in /usr/local/lib/python3.8/dist-packages (from tensorflow==2.11.0) (3.10.0.2)\n", + "Requirement already satisfied: grpcio<2.0,>=1.24.3 in /usr/local/lib/python3.8/dist-packages (from tensorflow==2.11.0) (1.50.0)\n", + "Requirement already satisfied: wheel<1.0,>=0.23.0 in /usr/lib/python3/dist-packages (from astunparse>=1.6.0->tensorflow==2.11.0) (0.30.0)\n", + "Requirement already satisfied: requests<3,>=2.21.0 in /usr/local/lib/python3.8/dist-packages (from tensorboard<2.12,>=2.11->tensorflow==2.11.0) (2.28.1)\n", + "Requirement already satisfied: google-auth<3,>=1.6.3 in /usr/local/lib/python3.8/dist-packages (from tensorboard<2.12,>=2.11->tensorflow==2.11.0) (1.34.0)\n", + "Collecting markdown>=2.6.8\n", + " Downloading Markdown-3.4.1-py3-none-any.whl (93 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m93.3/93.3 kB\u001b[0m \u001b[31m23.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting werkzeug>=1.0.1\n", + " Downloading Werkzeug-2.2.2-py3-none-any.whl (232 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m232.7/232.7 kB\u001b[0m \u001b[31m37.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting tensorboard-data-server<0.7.0,>=0.6.0\n", + " Downloading tensorboard_data_server-0.6.1-py3-none-manylinux2010_x86_64.whl (4.9 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.9/4.9 MB\u001b[0m \u001b[31m114.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hCollecting google-auth-oauthlib<0.5,>=0.4.1\n", + " Downloading google_auth_oauthlib-0.4.6-py2.py3-none-any.whl (18 kB)\n", + "Collecting tensorboard-plugin-wit>=1.6.0\n", + " Downloading tensorboard_plugin_wit-1.8.1-py3-none-any.whl (781 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m781.3/781.3 kB\u001b[0m \u001b[31m83.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /usr/local/lib/python3.8/dist-packages (from packaging->tensorflow==2.11.0) (3.0.9)\n", + "Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.8/dist-packages (from google-auth<3,>=1.6.3->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (0.2.8)\n", + "Requirement already satisfied: cachetools<5.0,>=2.0.0 in /usr/local/lib/python3.8/dist-packages (from google-auth<3,>=1.6.3->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (4.2.2)\n", + "Requirement already satisfied: rsa<5,>=3.1.4 in /usr/local/lib/python3.8/dist-packages (from google-auth<3,>=1.6.3->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (4.9)\n", + "Requirement already satisfied: requests-oauthlib>=0.7.0 in /usr/local/lib/python3.8/dist-packages (from google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (1.3.1)\n", + "Requirement already satisfied: importlib-metadata>=4.4 in /usr/local/lib/python3.8/dist-packages (from markdown>=2.6.8->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (5.0.0)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.8/dist-packages (from requests<3,>=2.21.0->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (3.2)\n", + "Requirement already satisfied: charset-normalizer<3,>=2 in /usr/local/lib/python3.8/dist-packages (from requests<3,>=2.21.0->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (2.1.1)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.8/dist-packages (from requests<3,>=2.21.0->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (2021.5.30)\n", + "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.8/dist-packages (from requests<3,>=2.21.0->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (1.26.12)\n", + "Requirement already satisfied: MarkupSafe>=2.1.1 in /usr/local/lib/python3.8/dist-packages (from werkzeug>=1.0.1->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (2.1.1)\n", + "Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.8/dist-packages (from importlib-metadata>=4.4->markdown>=2.6.8->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (3.10.0)\n", + "Requirement already satisfied: pyasn1<0.5.0,>=0.4.6 in /usr/local/lib/python3.8/dist-packages (from pyasn1-modules>=0.2.1->google-auth<3,>=1.6.3->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (0.4.8)\n", + "Requirement already satisfied: oauthlib>=3.0.0 in /usr/local/lib/python3.8/dist-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.12,>=2.11->tensorflow==2.11.0) (3.2.2)\n", + "Installing collected packages: tensorboard-plugin-wit, libclang, flatbuffers, werkzeug, tensorflow-io-gcs-filesystem, tensorflow-estimator, tensorboard-data-server, protobuf, numpy, keras, google-pasta, gast, astunparse, absl-py, opt-einsum, markdown, h5py, google-auth-oauthlib, tensorboard, tensorflow\n", + "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", + "yellowbrick 1.3 requires numpy<1.20,>=1.16.0, but you have numpy 1.24.1 which is incompatible.\n", + "scipy 1.6.3 requires numpy<1.23.0,>=1.16.5, but you have numpy 1.24.1 which is incompatible.\n", + "ml-metadata 0.30.0 requires absl-py<0.13,>=0.9, but you have absl-py 1.3.0 which is incompatible.\n", + "kserve 0.8.0 requires numpy~=1.19.2, but you have numpy 1.24.1 which is incompatible.\n", + "kfp 1.7.post0+41.gb3589b6c6 requires absl-py<=0.11,>=0.9, but you have absl-py 1.3.0 which is incompatible.\u001b[0m\u001b[31m\n", + "\u001b[0mSuccessfully installed absl-py-1.3.0 astunparse-1.6.3 flatbuffers-23.1.4 gast-0.4.0 google-auth-oauthlib-0.4.6 google-pasta-0.2.0 h5py-3.7.0 keras-2.11.0 libclang-14.0.6 markdown-3.4.1 numpy-1.24.1 opt-einsum-3.3.0 protobuf-3.19.6 tensorboard-2.11.0 tensorboard-data-server-0.6.1 tensorboard-plugin-wit-1.8.1 tensorflow-2.11.0 tensorflow-estimator-2.11.0 tensorflow-io-gcs-filesystem-0.29.0 werkzeug-2.2.2\n" + ] + } + ], + "source": [ + "\n", + "# mark in Kale as skip\n", + "! pip3 install --upgrade pip\n", + "! pip3 install pendulum==2.1.2\n", + "! pip3 install pandas==1.4.4\n", + "! pip3 install matplotlib==3.3.4\n", + "! pip3 install --upgrade tensorflow==2.11.0\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "7352040d-d4ca-41af-81ca-8df30e7de6cb", + "metadata": { + "tags": [ + "skip" + ] + }, + "outputs": [], + "source": [ + "# mark in Kale as skip\n", + "import os\n", + "\n", + "if not os.getenv(\"IS_TESTING\"):\n", + " # Automatically restart kernel after installs\n", + " import IPython\n", + "\n", + " app = IPython.Application.instance()\n", + " app.kernel.do_shutdown(True)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "619de0db-3878-4254-93a4-4404553d0ecf", + "metadata": { + "tags": [ + "imports" + ] + }, + "outputs": [], + "source": [ + "\n", + "# mark in katib as imports\n", + "import pendulum\n", + "import numpy as np\n", + "import pandas as pd\n", + "import warnings\n", + "import tensorflow as tf\n", + "from tensorflow.keras.models import Model\n", + "from tensorflow.keras.layers import Dense, Flatten, Conv1D, Dropout, BatchNormalization, Lambda\n", + "from tensorflow.keras.regularizers import l1,l2, L1L2\n", + "import matplotlib.pyplot as plt\n", + "from scipy import stats\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "42103b5f-1c53-4047-99ba-690e5bb7d398", + "metadata": { + "tags": [ + "skip" + ] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'2023-01-051310'" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Set time in the pipeline parameters and in Katib (as string and the only value) to the output of this\n", + "pendulum.now(tz='America/New_York').__str__()[:16].replace('T','').replace(':','').replace('_','-')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "fd604bf6-0d00-4178-9deb-28465c915c29", + "metadata": { + "tags": [ + "pipeline-parameters" + ] + }, + "outputs": [], + "source": [ + "# mark in Kayle as pipeline parameters\n", + "data_file_to_run = \"IMP_height.txt\"\n", + "\n", + "experiment_description = \"Soy Height GWAS\"\n", + "\n", + "learning_rate = 0.001 # 0.0001957\n", + "conv_1_dropout_rate = 0.50 # Dropout rate for first convolutional layer\n", + "conv_1_kernel_l1 = 0.2 # L1 and l2 regularization for the first conv1d layer's weights\n", + "conv_1_kernel_l2 = 0.6\n", + "conv_1_bias_l2 = 0.6 # L1 and l2 regularization for the first conv1d layer's bias\n", + "conv_1_activity_l2 = 0.00001 # L1 and l2 activity regularization for the first conv1d layer\n", + "\n", + "conv_x_kernel_l1 = 0.3\n", + "conv_x_kernel_l2 = 0.3\n", + "conv_x_bias_l2 = 0.6\n", + "conv_x_activity_l2 = 0.0001\n", + "\n", + "dense_x_kernel_l1 = 0.3\n", + "dense_x_kernel_l2 = 0.6\n", + "dense_x_bias_l2 = 0.0001\n", + "dense_x_activity_l2 = 0.0001\n", + "\n", + "dense_out_kernel_l1 = 0.1\n", + "dense_out_kernel_l2 = 0.6\n", + "dense_out_bias_l2 = 0.6\n", + "dense_out_activity_l2 = 0.00001\n", + "\n", + "conv_initializer = 'TruncatedNormal' # # 'TruncatedNormal' 'glorot_uniform' \"GlorotNormal\", \"HeNormal\" 'random_normal' \n", + "dese_initializer = \"GlorotNormal\" # 'TruncatedNormal' # \"GlorotUniform\"\n", + "\n", + "dropout_rate = 0.151\n", + "num_dense_layers = 3\n", + "num_dense_units = 20\n", + "\n", + "conv_activation = \"elu\" # \"linear\"\n", + "activation = \"elu\"\n", + "loss = 'huber_loss' # 'mean_squared_error' 'mean_absolute_error'\n", + "\n", + "final_activation_scale_factor = 3.5\n", + "\n", + "batch_size = 30\n", + "epochs = 2\n", + "\n", + "time = '2023-01-051310'\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "e06747ae-77b6-4524-b803-fc0d87512fbb", + "metadata": { + "tags": [ + "block:preprocessing" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Preprocessing successful\n" + ] + } + ], + "source": [ + "# mark in Kayle as pipeline step: \"preprocessing\": Depends on none\n", + "\n", + "ht = pd.read_csv(data_file_to_run, sep = '\\t')\n", + "ht_pd = ht_relevant_cols = ht.drop(columns = ['strain', 'height', 'folds'])\n", + "phenotypes_norm = ht_pd.pop(\"norm_phe\")\n", + "for col in ht_pd.columns:\n", + " ht_pd[col] = ht_pd[col].astype('category')\n", + "ohe_height_genotypes = pd.get_dummies(ht_pd)\n", + "\n", + "def train_test_splitting(row, split_ratio):\n", + " string_of_row = \"\".join([str(l) for l in list(row.values)])\n", + " return (abs(hash(string_of_row)) % 10) / 10 < split_ratio\n", + "belongs_in_train_set_index =\\\n", + " np.array([train_test_splitting(ohe_height_genotypes.loc[i],0.7)\n", + " for i in np.arange(ht_pd.shape[0])])\n", + "\n", + "train_ohe_height_genotypes = ohe_height_genotypes[belongs_in_train_set_index]\n", + "val_ohe_height_genotypes = ohe_height_genotypes[~belongs_in_train_set_index]\n", + "\n", + "train_phenotypes_norm = phenotypes_norm[belongs_in_train_set_index]\n", + "val_phenotypes_norm = phenotypes_norm[~belongs_in_train_set_index]\n", + "\n", + "# Make sure the number of rows in test and train add up to the original rows\n", + "assert train_ohe_height_genotypes.shape[0] + val_ohe_height_genotypes.shape[0] == ht_pd.shape[0]\n", + "\n", + "# Data as a numpy array...\n", + "train_ohe_height_genotypes_np = train_ohe_height_genotypes.values\n", + "val_ohe_height_genotypes_np = val_ohe_height_genotypes.values\n", + "\n", + "train_phenotypes_norm_np = train_phenotypes_norm.values\n", + "val_phenotypes_norm_np = val_phenotypes_norm.values\n", + "\n", + "# Reshape to fit the conv1D network. \n", + "train_np_ohe_reshaped_for_conv_1_d =\\\n", + " train_ohe_height_genotypes_np.reshape((train_ohe_height_genotypes_np.shape[0],\n", + " train_ohe_height_genotypes_np.shape[1], 1))\n", + "val_np_ohe_reshaped_for_conv_1_d =\\\n", + " val_ohe_height_genotypes_np.reshape((val_ohe_height_genotypes_np.shape[0],\n", + " val_ohe_height_genotypes_np.shape[1],1))\n", + "\n", + "np.save('train_data_ready', train_np_ohe_reshaped_for_conv_1_d)\n", + "np.save('val_data_ready', val_np_ohe_reshaped_for_conv_1_d)\n", + "np.save('train_labels_ready', train_phenotypes_norm_np)\n", + "np.save('val_labels_ready',val_phenotypes_norm_np)\n", + "\n", + "# Since the data was reshaped for the convolutional 1D neural network, we are also saving the \n", + "# non-reshaped data to be used for calculating saliency.\n", + "\n", + "np.save(\"val_snps_for_saliency\", val_ohe_height_genotypes_np)\n", + "\n", + "print(\"Preprocessing successful\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "dd01e8b2-78ba-4315-9e12-9153b1c57ce5", + "metadata": { + "tags": [ + "block:train", + "prev:preprocessing" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/2\n", + " 37/120 [========>.....................] - ETA: 1:07 - loss: 569.6301 - mean_absolute_error: 2.0097" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn [41], line 132\u001b[0m\n\u001b[1;32m 125\u001b[0m \u001b[38;5;66;03m# qa_data_model = Model(inputs = inputs, outputs = outputs)\u001b[39;00m\n\u001b[1;32m 126\u001b[0m our_data_model\u001b[38;5;241m.\u001b[39mcompile(loss\u001b[38;5;241m=\u001b[39mloss,\n\u001b[1;32m 127\u001b[0m optimizer\u001b[38;5;241m=\u001b[39mtf\u001b[38;5;241m.\u001b[39mkeras\u001b[38;5;241m.\u001b[39moptimizers\u001b[38;5;241m.\u001b[39mAdam(learning_rate\u001b[38;5;241m=\u001b[39mlearning_rate),\n\u001b[1;32m 128\u001b[0m metrics\u001b[38;5;241m=\u001b[39m[tf\u001b[38;5;241m.\u001b[39mkeras\u001b[38;5;241m.\u001b[39mmetrics\u001b[38;5;241m.\u001b[39mMeanAbsoluteError()],\n\u001b[1;32m 129\u001b[0m jit_compile\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m 131\u001b[0m history \u001b[38;5;241m=\u001b[39m\\\n\u001b[0;32m--> 132\u001b[0m \u001b[43mour_data_model\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mtrain_snps\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 133\u001b[0m \u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mtrain_phenotypes\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 134\u001b[0m \u001b[43m \u001b[49m\u001b[43mbatch_size\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbatch_size\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 135\u001b[0m \u001b[43m \u001b[49m\u001b[43mepochs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mepochs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 136\u001b[0m \u001b[43m \u001b[49m\u001b[43mvalidation_data\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mval_snps\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mval_phenotypes\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 137\u001b[0m \u001b[43m \u001b[49m\u001b[43mshuffle\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 138\u001b[0m \u001b[43m \u001b[49m\u001b[43muse_multiprocessing\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 139\u001b[0m \u001b[38;5;66;03m# Requirement 6: save and log your artifact. \u001b[39;00m\n\u001b[1;32m 140\u001b[0m \u001b[38;5;66;03m# I'm adding a random number to the file name as an\u001b[39;00m\n\u001b[1;32m 141\u001b[0m \u001b[38;5;66;03m# extra layer of safety nets against race conditions\u001b[39;00m\n\u001b[1;32m 142\u001b[0m \u001b[38;5;66;03m# / file name conflicts\u001b[39;00m\n\u001b[1;32m 143\u001b[0m \n\u001b[1;32m 144\u001b[0m \u001b[38;5;66;03m# tn = str(int(np.random.random() * 10 ** 12))\u001b[39;00m\n\u001b[1;32m 145\u001b[0m model_folder \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124ma-\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mtime\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m-model\u001b[39m\u001b[38;5;124m\"\u001b[39m\n", + "File \u001b[0;32m~/.local/lib/python3.8/site-packages/keras/utils/traceback_utils.py:65\u001b[0m, in \u001b[0;36mfilter_traceback..error_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 63\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 64\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m---> 65\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 66\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 67\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m _process_traceback_frames(e\u001b[38;5;241m.\u001b[39m__traceback__)\n", + "File \u001b[0;32m~/.local/lib/python3.8/site-packages/keras/engine/training.py:1650\u001b[0m, in \u001b[0;36mModel.fit\u001b[0;34m(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing)\u001b[0m\n\u001b[1;32m 1642\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m tf\u001b[38;5;241m.\u001b[39mprofiler\u001b[38;5;241m.\u001b[39mexperimental\u001b[38;5;241m.\u001b[39mTrace(\n\u001b[1;32m 1643\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtrain\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 1644\u001b[0m epoch_num\u001b[38;5;241m=\u001b[39mepoch,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1647\u001b[0m _r\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m,\n\u001b[1;32m 1648\u001b[0m ):\n\u001b[1;32m 1649\u001b[0m callbacks\u001b[38;5;241m.\u001b[39mon_train_batch_begin(step)\n\u001b[0;32m-> 1650\u001b[0m tmp_logs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtrain_function\u001b[49m\u001b[43m(\u001b[49m\u001b[43miterator\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1651\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m data_handler\u001b[38;5;241m.\u001b[39mshould_sync:\n\u001b[1;32m 1652\u001b[0m context\u001b[38;5;241m.\u001b[39masync_wait()\n", + "File \u001b[0;32m~/.local/lib/python3.8/site-packages/tensorflow/python/util/traceback_utils.py:150\u001b[0m, in \u001b[0;36mfilter_traceback..error_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 148\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 149\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 150\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 151\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 152\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m _process_traceback_frames(e\u001b[38;5;241m.\u001b[39m__traceback__)\n", + "File \u001b[0;32m~/.local/lib/python3.8/site-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py:880\u001b[0m, in \u001b[0;36mFunction.__call__\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 877\u001b[0m compiler \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mxla\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_jit_compile \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnonXla\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 879\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m OptionalXlaContext(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_jit_compile):\n\u001b[0;32m--> 880\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 882\u001b[0m new_tracing_count \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mexperimental_get_tracing_count()\n\u001b[1;32m 883\u001b[0m without_tracing \u001b[38;5;241m=\u001b[39m (tracing_count \u001b[38;5;241m==\u001b[39m new_tracing_count)\n", + "File \u001b[0;32m~/.local/lib/python3.8/site-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py:919\u001b[0m, in \u001b[0;36mFunction._call\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 916\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_lock\u001b[38;5;241m.\u001b[39mrelease()\n\u001b[1;32m 917\u001b[0m \u001b[38;5;66;03m# In this case we have not created variables on the first call. So we can\u001b[39;00m\n\u001b[1;32m 918\u001b[0m \u001b[38;5;66;03m# run the first trace but we should fail if variables are created.\u001b[39;00m\n\u001b[0;32m--> 919\u001b[0m results \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_variable_creation_fn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 920\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_created_variables \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m ALLOW_DYNAMIC_VARIABLE_CREATION:\n\u001b[1;32m 921\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCreating variables on a non-first call to a function\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 922\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m decorated with tf.function.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "File \u001b[0;32m~/.local/lib/python3.8/site-packages/tensorflow/python/eager/polymorphic_function/tracing_compiler.py:134\u001b[0m, in \u001b[0;36mTracingCompiler.__call__\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 131\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_lock:\n\u001b[1;32m 132\u001b[0m (concrete_function,\n\u001b[1;32m 133\u001b[0m filtered_flat_args) \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_maybe_define_function(args, kwargs)\n\u001b[0;32m--> 134\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mconcrete_function\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_flat\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 135\u001b[0m \u001b[43m \u001b[49m\u001b[43mfiltered_flat_args\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcaptured_inputs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconcrete_function\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcaptured_inputs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/.local/lib/python3.8/site-packages/tensorflow/python/eager/polymorphic_function/monomorphic_function.py:1745\u001b[0m, in \u001b[0;36mConcreteFunction._call_flat\u001b[0;34m(self, args, captured_inputs, cancellation_manager)\u001b[0m\n\u001b[1;32m 1741\u001b[0m possible_gradient_type \u001b[38;5;241m=\u001b[39m gradients_util\u001b[38;5;241m.\u001b[39mPossibleTapeGradientTypes(args)\n\u001b[1;32m 1742\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (possible_gradient_type \u001b[38;5;241m==\u001b[39m gradients_util\u001b[38;5;241m.\u001b[39mPOSSIBLE_GRADIENT_TYPES_NONE\n\u001b[1;32m 1743\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m executing_eagerly):\n\u001b[1;32m 1744\u001b[0m \u001b[38;5;66;03m# No tape is watching; skip to running the function.\u001b[39;00m\n\u001b[0;32m-> 1745\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_build_call_outputs(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_inference_function\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcall\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1746\u001b[0m \u001b[43m \u001b[49m\u001b[43mctx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcancellation_manager\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcancellation_manager\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 1747\u001b[0m forward_backward \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_select_forward_and_backward_functions(\n\u001b[1;32m 1748\u001b[0m args,\n\u001b[1;32m 1749\u001b[0m possible_gradient_type,\n\u001b[1;32m 1750\u001b[0m executing_eagerly)\n\u001b[1;32m 1751\u001b[0m forward_function, args_with_tangents \u001b[38;5;241m=\u001b[39m forward_backward\u001b[38;5;241m.\u001b[39mforward()\n", + "File \u001b[0;32m~/.local/lib/python3.8/site-packages/tensorflow/python/eager/polymorphic_function/monomorphic_function.py:378\u001b[0m, in \u001b[0;36m_EagerDefinedFunction.call\u001b[0;34m(self, ctx, args, cancellation_manager)\u001b[0m\n\u001b[1;32m 376\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m _InterpolateFunctionError(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 377\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cancellation_manager \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 378\u001b[0m outputs \u001b[38;5;241m=\u001b[39m \u001b[43mexecute\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexecute\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 379\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mstr\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msignature\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 380\u001b[0m \u001b[43m \u001b[49m\u001b[43mnum_outputs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_num_outputs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 381\u001b[0m \u001b[43m \u001b[49m\u001b[43minputs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 382\u001b[0m \u001b[43m \u001b[49m\u001b[43mattrs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mattrs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 383\u001b[0m \u001b[43m \u001b[49m\u001b[43mctx\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mctx\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 384\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 385\u001b[0m outputs \u001b[38;5;241m=\u001b[39m execute\u001b[38;5;241m.\u001b[39mexecute_with_cancellation(\n\u001b[1;32m 386\u001b[0m \u001b[38;5;28mstr\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msignature\u001b[38;5;241m.\u001b[39mname),\n\u001b[1;32m 387\u001b[0m num_outputs\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_num_outputs,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 390\u001b[0m ctx\u001b[38;5;241m=\u001b[39mctx,\n\u001b[1;32m 391\u001b[0m cancellation_manager\u001b[38;5;241m=\u001b[39mcancellation_manager)\n", + "File \u001b[0;32m~/.local/lib/python3.8/site-packages/tensorflow/python/eager/execute.py:52\u001b[0m, in \u001b[0;36mquick_execute\u001b[0;34m(op_name, num_outputs, inputs, attrs, ctx, name)\u001b[0m\n\u001b[1;32m 50\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 51\u001b[0m ctx\u001b[38;5;241m.\u001b[39mensure_initialized()\n\u001b[0;32m---> 52\u001b[0m tensors \u001b[38;5;241m=\u001b[39m \u001b[43mpywrap_tfe\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mTFE_Py_Execute\u001b[49m\u001b[43m(\u001b[49m\u001b[43mctx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_handle\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdevice_name\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mop_name\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 53\u001b[0m \u001b[43m \u001b[49m\u001b[43minputs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mattrs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnum_outputs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 54\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m core\u001b[38;5;241m.\u001b[39m_NotOkStatusException \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 55\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "# mark in Kayle as pipeline step \"train\": depends on \"data-preprocessing\"\n", + "nb_classes = 3\n", + "\n", + "data_files = ['./train_data_ready.npy',\n", + " \"./val_data_ready.npy\",\n", + " \"./train_labels_ready.npy\",\n", + " \"./val_labels_ready.npy\"]\n", + "# artifact_bucket_root_name = artifacts_bucket.split('/')[-1]\n", + "# print(artifact_bucket_root_name)\n", + "# storage_client = storage.Client()\n", + "# bucket = storage_client.get_bucket(artifact_bucket_root_name)\n", + "\n", + "ht_np_train = np.load('train_data_ready.npy', allow_pickle=True)\n", + "ht_np_val = np.load('val_data_ready.npy', allow_pickle=True)\n", + "train_labels_np = np.load('train_labels_ready.npy', allow_pickle=True)\n", + "val_labels_np = np.load('val_labels_ready.npy', allow_pickle=True)\n", + "\n", + "train_snps = ht_np_train\n", + "train_phenotypes = train_labels_np\n", + "val_snps = ht_np_val\n", + "val_phenotypes = val_labels_np\n", + "\n", + "# print(\"min\")\n", + "# print(val_phenotypes.min())\n", + "# print(\"max\")\n", + "# print(val_phenotypes.max())\n", + "\n", + "inputs =\\\n", + " tf.keras.layers.Input(\n", + " shape=(train_snps.shape[1], \n", + " train_snps.shape[2])) # train_snps.shape[1] ,nb_classes))\n", + "\n", + "x = Conv1D(10,\n", + " nb_classes,\n", + " padding='same',\n", + " activation = conv_activation,\n", + " kernel_initializer = conv_initializer,\n", + " kernel_regularizer=tf.keras.regularizers.L1L2(l1=conv_1_kernel_l1, l2=conv_1_kernel_l2),\n", + " bias_regularizer=tf.keras.regularizers.L2(conv_1_bias_l2),\n", + " activity_regularizer=tf.keras.regularizers.L2(conv_1_activity_l2)\n", + " )(inputs)\n", + "\n", + " # kernel_initializer = conv_initializer ,\n", + " # kernel_regularizer=\"l2\", bias_regularizer = \"l2\")\n", + "x = Dropout(conv_1_dropout_rate)(x)\n", + "\n", + "x = Conv1D(10,\n", + " 20,\n", + " padding='same',\n", + " activation = conv_activation,\n", + " kernel_initializer = conv_initializer,\n", + " kernel_regularizer=tf.keras.regularizers.L1L2(l1=conv_x_kernel_l1, l2=conv_x_kernel_l2),\n", + " bias_regularizer=tf.keras.regularizers.L2(conv_x_bias_l2),\n", + " activity_regularizer=tf.keras.regularizers.L2(conv_x_activity_l2)\n", + " # kernel_initializer = 'TruncatedNormal',\n", + " # kernel_regularizer=\"l2\",\n", + " # bias_regularizer=\"l2\"\n", + " )(x) # Leaving l1 l2 on head layer only to see if this prevents everything from zeroing out.\n", + "\n", + "x = Dropout(dropout_rate)(x)\n", + "\n", + "\n", + "shortcut = Conv1D(10,\n", + " 4,\n", + " padding='same',\n", + " activation = conv_activation,\n", + " kernel_initializer = conv_initializer,\n", + " kernel_regularizer=tf.keras.regularizers.L1L2(l1=conv_x_kernel_l1, l2=conv_x_kernel_l2),\n", + " bias_regularizer=tf.keras.regularizers.L2(conv_x_bias_l2),\n", + " activity_regularizer=tf.keras.regularizers.L2(conv_x_activity_l2))(inputs)\n", + "shortcut = Dropout(dropout_rate)(shortcut)\n", + "x = tf.keras.layers.Add()([shortcut,x])\n", + "\n", + "x = Conv1D(10,\n", + " 4,\n", + " padding='same',\n", + " activation = conv_activation,\n", + " kernel_initializer = conv_initializer,\n", + " kernel_regularizer=tf.keras.regularizers.L1L2(l1=conv_x_kernel_l1, l2=conv_x_kernel_l2),\n", + " bias_regularizer=tf.keras.regularizers.L2(conv_x_bias_l2),\n", + " activity_regularizer=tf.keras.regularizers.L2(conv_x_activity_l2)\n", + " # kernel_initializer = 'TruncatedNormal', \n", + " # kernel_regularizer = \"l2\",\n", + " # bias_regularizer = \"l2\"\n", + " )(x)\n", + "\n", + "# x = Dropout(dropout_rate)(x)\n", + "\n", + "x = Flatten()(x)\n", + "# x = Dropout(dropout_rate)(x)\n", + "x = BatchNormalization()(x)\n", + "\n", + "if num_dense_layers > 0:\n", + " y = x\n", + " for i in np.arange(num_dense_layers):\n", + " y = Dense(num_dense_units, \n", + " activation,\n", + " kernel_initializer=dese_initializer,\n", + " kernel_regularizer=tf.keras.regularizers.L1L2(l1=dense_x_kernel_l1, l2=dense_x_kernel_l2),\n", + " bias_regularizer=tf.keras.regularizers.L2(dense_x_bias_l2),\n", + " activity_regularizer=tf.keras.regularizers.L2(dense_x_activity_l2)\n", + " )(y)\n", + " # y = Dropout(dropout_rate)(y)\n", + " y = BatchNormalization()(y)\n", + " \n", + " x = tf.keras.layers.Concatenate(axis=1)([x,y])\n", + " x = BatchNormalization()(x)\n", + "\n", + "outputs_unscaled = Dense(1,\n", + " activation=\"softsign\",\n", + " kernel_initializer=dese_initializer,\n", + " kernel_regularizer=tf.keras.regularizers.L1L2(l1=dense_out_kernel_l1, l2=dense_out_kernel_l2),\n", + " bias_regularizer=tf.keras.regularizers.L2(dense_out_bias_l2),\n", + " activity_regularizer=tf.keras.regularizers.L2(dense_out_activity_l2),\n", + " # bias_regularizer = \"l2\",\n", + " # kernel_initializer = 'TruncatedNormal',\n", + " name = 'out')(x) # Should have no activation\n", + "# Softsign coerces the output to the range {-1,1}. The labels are norm scaled, \n", + "# where the range {-2,2} or {-3,3} encompasses most values. We multiply by a scalar \n", + "# and the range will terminate at +/- said scalar. No telling which one is optimal,\n", + "# so we'll le the the tuner figure out what: \n", + "outputs = Lambda(lambda x: x * final_activation_scale_factor)(outputs_unscaled) \n", + "\n", + "our_data_model = Model(inputs = inputs, outputs = outputs)\n", + "# qa_data_model = Model(inputs = inputs, outputs = outputs)\n", + "our_data_model.compile(loss=loss,\n", + " optimizer=tf.keras.optimizers.Adam(learning_rate=learning_rate),\n", + " metrics=[tf.keras.metrics.MeanAbsoluteError()],\n", + " jit_compile=True)\n", + "\n", + "history =\\\n", + " our_data_model.fit(x = train_snps,\n", + " y = train_phenotypes,\n", + " batch_size=batch_size,\n", + " epochs=epochs,\n", + " validation_data=(val_snps, val_phenotypes),\n", + " shuffle= True,\n", + " use_multiprocessing=True)\n", + "# Requirement 6: save and log your artifact. \n", + "# I'm adding a random number to the file name as an\n", + "# extra layer of safety nets against race conditions\n", + "# / file name conflicts\n", + "\n", + "# tn = str(int(np.random.random() * 10 ** 12))\n", + "model_folder = f\"a-{time}-model\"\n", + "our_data_model.save(model_folder)\n", + "\n", + "history_df = pd.DataFrame(history.history)\n", + "\n", + "history_df[[\"mean_absolute_error\", \"val_mean_absolute_error\"]].plot()\n", + "plt.savefig(f'{model_folder}-history.png')\n", + "\n", + "print(model_folder)\n", + "\n", + "val_mean_absolute_error = float(history_df['val_mean_absolute_error'].values.min())\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "74954dbc-9133-40d5-9f23-400a39807724", + "metadata": { + "tags": [ + "block:saliency_observed", + "prev:preprocessing" + ] + }, + "outputs": [], + "source": [ + "# mark in Kayle as pipeline step: \"saliency - known\": depends on \"data-preprocessing\"\n", + "\n", + "# Calculate observed p values: (Depends on data preprocessing)\n", + "\n", + "val_snps_s = np.load(\"val_snps_for_saliency.npy\", allow_pickle=True)\n", + "val_phenotypes_k = np.load('val_labels_ready.npy', allow_pickle=True)\n", + "\n", + "p_values = []\n", + "for i in np.arange(int(val_snps_s.shape[1] / 3)):\n", + " column_index_lower_bound = 3 * i\n", + " column_index_upper_bound = 3 * i + 3\n", + " data = val_snps_s[:,column_index_lower_bound:column_index_upper_bound]\n", + " data_reshaped = np.argmax(data, axis=1)\n", + " slope, intercept, r_value, p_value, std_err = stats.linregress(data_reshaped, val_phenotypes_k)\n", + " p_values.append(p_value)\n", + "p_values_observed_np = np.array(p_values)\n", + "np.save('p_values_observed_np', \n", + " p_values_observed_np, \n", + " allow_pickle=True)\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "464ffbb4-eb9e-438e-ac1e-292a2e45a99f", + "metadata": { + "tags": [ + "block:manhattan_observed", + "prev:saliency_observed" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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fj5Wrlyp9V+XLl2Qm5uLtWvXamkWLFgARVHQqVMnLc3ixYvh9/u1NPPmzUPjxo0vSlUPpRSDBg3CtGnTsGDBAouqq127doiMjDT0a2ZmJg4cOGDo182bNxsYwHnz5iEpKQnNmjXT0oh58DT/X8a2oijwer1uf5YRvXv3xubNm7Fhwwbt0759ewwYMED77varizPG+bbcLe+YPHkyjY6OpuPHj6fbtm2jjz76KE1JSTFYo/9/RkFBAV2/fj1dv349BUA//vhjun79erp//35KqeqCnJKSQn/77Te6adMmev3119u6ILdt25auXLmSLlmyhDZs2NDggpybm0vT0tLoPffcQ7ds2UInT55M4+LiLloX5CeeeIImJyfTv//+mx49elT7FBcXa2kef/xxWqtWLbpgwQK6Zs0a2qVLF9qlSxftPnftvPLKK+mGDRvo7NmzaeXKlW1dO1988UWakZFBv/jii4vWtXPIkCF00aJFdO/evXTTpk10yJAhlBBC586dSyl1+/NsQfTuodTtVxdnDpdJCQOjRo2itWrVolFRUbRjx450xYoV57tK5QYLFy6kACyf++67j1KquiG//vrrNC0tjUZHR9PevXvTzMxMQx4nT56kd955J01ISKBJSUn0gQceoAUFBYY0GzdupJdddhmNjo6m1atXp8OHD/+3mvivw64/AdBx48ZpaUpKSuiTTz5JU1NTaVxcHL3xxhvp0aNHDfns27eP9uvXj8bGxtJKlSrR559/nvr9fkOahQsX0jZt2tCoqChar149QxkXEx588EFau3ZtGhUVRStXrkx79+6tMSiUuv15tmBmUtx+dXGmIJRSen5kOC5cuHDhwoULF85wbVJcuHDhwoULF+USLpPiwoULFy5cuCiXcJkUFy5cuHDhwkW5hMukuHDhwoULFy7KJVwmxYULFy5cuHBRLuEyKS5cuHDhwoWLcgmXSXHhwoULFy5clEu4TIoLFxcQxo8fbzhVdujQoWjTps1ZLePvv/8GIcRy5ooLFy5c/NtwmRQXLs4hDh48iAcffBDVqlVDVFQUateujWeeeQYnT548K/m/8MILlnNN/g1s3LgR1113HapUqYKYmBjUqVMHt99+u3YGy759+0AIQZUqVVBQUGB4tk2bNhg6dKj2u2fPniCEgBCCmJgYNGvWDKNHj/43m+PChYtyCpdJceHiHGHP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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "# mark in Kayle as pipeline step: Pipeline step: manhattan_known: Depends on: saliency_known \n", + "model_folder = f\"a-{time}-model\"\n", + "p_values_observed_np = np.load('p_values_observed_np.npy',\n", + " allow_pickle=True)\n", + "\n", + "neg_log = -1 * np.log10(p_values_observed_np)\n", + "slug = np.arange(p_values_observed_np.shape[0])\n", + "\n", + "pt = plt.scatter(x = slug, y = neg_log, c=neg_log)\n", + "plt.title(f\"Manhattan Plot for {experiment_description} - observed\")\n", + "plt.xlabel(\"Ordinal SNP\")\n", + "plt.ylabel(\"- log10 observed P values\")\n", + "cbar = plt.colorbar(pt)\n", + "cbar.set_label(\"- log10 observed P values\")\n", + "plt.savefig(f\"{model_folder}-manhattan-observed\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "f18fae63-9e34-4d5b-b5d7-76e08e94142c", + "metadata": { + "tags": [ + "block:saliency_predicted", + "prev:train" + ] + }, + "outputs": [ + { + "ename": "FileNotFoundError", + "evalue": "[Errno 2] No such file or directory: 'val_snps_for_saliency.npy'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn [13], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m val_snps_s \u001b[38;5;241m=\u001b[39m \u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mload\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mval_snps_for_saliency.npy\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mallow_pickle\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 2\u001b[0m model_folder \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124ma-\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mtime\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m-model\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget_saved_model\u001b[39m(final_activation_scale_factor: \u001b[38;5;28mfloat\u001b[39m, model_folder: \u001b[38;5;28mstr\u001b[39m):\n", + "File \u001b[0;32m~/.local/lib/python3.8/site-packages/numpy/lib/npyio.py:405\u001b[0m, in \u001b[0;36mload\u001b[0;34m(file, mmap_mode, allow_pickle, fix_imports, encoding, max_header_size)\u001b[0m\n\u001b[1;32m 403\u001b[0m own_fid \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[1;32m 404\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 405\u001b[0m fid \u001b[38;5;241m=\u001b[39m stack\u001b[38;5;241m.\u001b[39menter_context(\u001b[38;5;28;43mopen\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mos_fspath\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfile\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mrb\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 406\u001b[0m own_fid \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 408\u001b[0m \u001b[38;5;66;03m# Code to distinguish from NumPy binary files and pickles.\u001b[39;00m\n", + "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'val_snps_for_saliency.npy'" + ] + } + ], + "source": [ + "\n", + "\n", + "val_snps_s = np.load(\"val_snps_for_saliency.npy\", allow_pickle=True)\n", + "model_folder = f\"a-{time}-model\"\n", + "\n", + "def get_saved_model(final_activation_scale_factor: float, model_folder: str):\n", + " final_model = tf.keras.models.load_model(model_folder)\n", + " for layer in final_model.layers:\n", + " layer.trainable=False\n", + " return final_model\n", + " # print(layer.weights)\n", + "\n", + "final_model = get_saved_model(final_activation_scale_factor=final_activation_scale_factor, model_folder = model_folder)\n", + "val_phenotypes_p = final_model.predict(val_snps_s).flatten()\n", + "\n", + "p_values_p = []\n", + "for i in np.arange(int(val_snps_s.shape[1] / 3)):\n", + " column_index_lower_bound = 3 * i\n", + " column_index_upper_bound = 3 * i + 3\n", + " data = val_snps_s[:,column_index_lower_bound:column_index_upper_bound]\n", + " data_reshaped = np.argmax(data, axis=1)\n", + " slope, intercept, r_value, p_value, std_err = stats.linregress(data_reshaped, val_phenotypes_p)\n", + " p_values_p.append(p_value)\n", + "p_values_predicted_np = np.array(p_values_p)\n", + "np.save('p_values_predicted_np', \n", + " p_values_predicted_np, \n", + " allow_pickle=True)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "043678ab-c0ae-45d7-8fdc-259d3138adba", + "metadata": { + "tags": [ + "block:manttan_predcted", + "prev:saliency_predicted" + ] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAikAAAHHCAYAAAB6NchxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydd1wUVxeG39mFpYOAIKAIKCh2sfdeYuyJGrummmp6TPLFGo2apkksicbYoomx9957QxAbCoIiSFV63Z37/bEFFrZXynnym+DeaWd3Z2fee+4553KMMQaCIAiCIIhKhsDaBhAEQRAEQaiCRApBEARBEJUSEikEQRAEQVRKSKQQBEEQBFEpIZFCEARBEESlhEQKQRAEQRCVEhIpBEEQBEFUSkikEARBEARRKSGRQhAEQRBEpYREigWZM2cOOI5Denq6tU2pVPTq1Qu9evWyyLkePHiAAQMGwM3NDRzHYdeuXRY5b3Vn6tSpCAwMNHhfZ2dn0xpEVDrWrVsHjuMQHx+vaLPkb18XVNlIWJdqL1LkFx3HcTh37lyF9Ywx+Pv7g+M4DBkyxAoWGseKFSuwbt26Cu137tzBnDlzrPpjCwwMVHz2HMfB29sb3bt3x86dO01y/Pz8fMyZMwenTp3SeZ8pU6YgKioKCxYswMaNG9GuXTuT2KKOtLQ0fPjhhwgNDYWDgwO8vb3RoUMHzJgxA7m5uWY9d3nkv4Vr166pXN+rVy80b97cojbpgyHfNwCkpqbiyy+/RIsWLeDs7Ax7e3sEBwfj1VdfVbon/Pfff+A4TuX12apVK3Ach5MnT1ZYV79+fXTp0qVCe4cOHcBxHFauXKnWtqioKIwaNQoBAQGwt7dH3bp10b9/f/z22296vceahKHXAVE1qfYiRY69vT02b95cof306dN48uQJ7OzsrGCV8WgSKXPnzrV6j6B169bYuHEjNm7ciM8++wxJSUl46aWX8Pvvvxt97Pz8fMydO1fnm1VBQQEuXryI119/He+//z4mTpyIevXqGW2HOp49e4Z27dphw4YNGDx4MH799Vd88sknCA4OxsqVK6uVR2316tWIjo426zn0/b4B4MqVK2jWrBmWLl2Ktm3bYvHixVi2bBleeeUVXLlyBd27d8eZM2cAAN26dQOACp2Z7Oxs3Lp1CzY2Njh//rzSuoSEBCQkJCj2lfPgwQNcvXoVgYGB2LRpk0rbLly4gHbt2iEyMhJvvvkmli1bhjfeeAMCgQC//PKLzu+xKnPkyBEcOXJEr30MuQ6IqouNtQ2wFC+++CK2bt2KX3/9FTY2pW978+bNaNu2bbV6YFQm6tati4kTJypeT548GcHBwViyZAnefvtti9qSlpYGAKhVq5bJjpmXlwcnJyeV69asWYPHjx/j/PnzFXra2dnZEIlEJrPD2tja2lrbhAo8f/4cI0aMgI2NDSIiIhAaGqq0fv78+fj333/h4OAAAPDz80NQUFAFkXLx4kUwxjB69OgK6+Svy4uUv//+G97e3vjpp58watQoxMfHVxgOW7BgAdzc3HD16tUK12Rqaqqhb9vkiMVi8Dxvluu1Ov0GCPNQYzwp48aNQ0ZGBo4ePapoKy4uxrZt2zB+/HiV+/z444/o0qULPD094eDggLZt22Lbtm0VtuM4Du+//z527dqF5s2bw87ODs2aNcOhQ4dUHjczMxNTp05FrVq14ObmhldffRX5+flK26xduxZ9+vSBt7c37Ozs0LRp0wpu48DAQNy+fRunT59WDKn06tUL69atw+jRowEAvXv3VqyT9zx2796NwYMHw8/PD3Z2dmjYsCG+/fZbSCQSpePL3f937txB79694ejoiLp16+L777/X/GFrwMfHB02aNEFcXJzG7VJTU/H666+jTp06sLe3R6tWrbB+/XrF+vj4eHh5eQEA5s6dq3iPc+bMUXm8OXPmICAgAADw+eefg+M4pYfGjRs3MGjQILi6usLZ2Rl9+/bFpUuXlI4hHy45ffo03n33XXh7e2v0xMTGxkIoFKJTp04V1rm6usLe3l6pbevWrWjbti0cHBxQu3ZtTJw4EYmJiYr1a9euBcdxuHHjRoXjfffddxAKhUrbm4q///5bYZeHhwfGjh2LhIQEpW1UxaRkZGRg0qRJcHV1Ra1atTBlyhRERkaC4ziV3r/ExESMGDECzs7O8PLywmeffaa4JvX9vgHg999/x9OnT7F06dIKAgWQ/m7HjRuH9u3bK9q6deuGGzduoKCgQNF2/vx5NGvWDIMGDcKlS5fA87zSOo7j0LVrV6Vjb968GaNGjcKQIUPg5uam0osbGxuLZs2aqRTN3t7eat+XIcjjfh4+fIiBAwfCyckJfn5+mDdvHhhjiu3i4+PBcRx+/PFHLF26FA0bNoSdnR3u3LkDALh37x5GjRoFDw8P2Nvbo127dtizZ0+F892+fRt9+vSBg4MD6tWrh/nz5yt9bnJUxaQUFhZizpw5aNSoEezt7eHr64uXXnoJsbGxOl0HpraRsDKsmrN27VoGgF29epV16dKFTZo0SbFu165dTCAQsMTERBYQEMAGDx6stG+9evXYu+++y5YtW8Z+/vln1qFDBwaA7du3T2k7AKxVq1bM19eXffvtt2zp0qWsQYMGzNHRkaWnpyu2mz17NgPAwsLC2EsvvcRWrFjB3njjDQaAffHFF0rHbN++PZs6dSpbsmQJ++2339iAAQMYALZs2TLFNjt37mT16tVjoaGhbOPGjWzjxo3syJEjLDY2lk2fPp0BYF9//bViXXJyMmOMsREjRrAxY8awH374ga1cuZKNHj2aAWCfffaZkg09e/Zkfn5+zN/fn3344YdsxYoVrE+fPgwAO3DggNbPXtVnWlxczOrUqcN8fHyUztOzZ0/F6/z8fNakSRNma2vLPv74Y/brr7+y7t27MwBs6dKljDHGcnNz2cqVKxkANnLkSMV7jIyMVGlLZGQkW7JkCQPAxo0bxzZu3Mh27tzJGGPs1q1bzMnJSfH9LVq0iAUFBTE7Ozt26dIlxTHk11LTpk1Zz5492W+//cYWLVqk9v1/9913DABbt26d1s9Kfuz27duzJUuWsC+//JI5ODiwwMBA9vz5c8YYY9nZ2czBwYF9+umnFfZv2rQp69Onj07nOHbsGEtLS6uwdOnShTVr1kxpn/nz5zOO49grr7zCVqxYwebOnctq166tZBdjjE2ZMoUFBAQoXkskEta5c2cmFArZ+++/z5YtW8b69+/PWrVqxQCwtWvXKu1rb2/PmjVrxl577TW2cuVK9vLLLzMAbMWKFYwx/b9vxhjr3Lkzc3BwYMXFxRo/l7L88ccfDAA7efKkoq1Pnz7srbfeYjExMQyA0jlbt27NmjRponSMS5cuMQDs7NmzjDHGXnvtNda0adMK5xowYABzcXFhUVFROttnKPLPOCQkhE2aNIktW7aMDRkyhAFgM2fOVGwXFxenuMYbNGjAFi1axJYsWcIePXrEbt26xdzc3FjTpk3Z4sWL2bJly1iPHj0Yx3Fsx44dimM8ffqUeXl5MXd3dzZnzhz2ww8/sJCQENayZUsGgMXFxSm2Lf/bF4vFrG/fvgwAGzt2LFu2bBlbuHAh69OnD9u1a5fW68AcNhLWpUaJlGXLljEXFxeWn5/PGGNs9OjRrHfv3owx1Q9U+XZyiouLWfPmzSs8DAAwkUjEYmJiFG2RkZEMAPvtt98UbXKR8tprryntP3LkSObp6anx3IwxNnDgQNagQQOltmbNmin9yOVs3bq1ws1W07GnTZvGHB0dWWFhoaKtZ8+eDADbsGGDoq2oqIj5+Piwl19+ucIxyhMQEMAGDBigeAhGRkaysWPHMgDsgw8+UDpP2fewdOlSBoD9/fffirbi4mLWuXNn5uzszLKzsxljjKWlpTEAbPbs2VptYaz0BvzDDz8otY8YMYKJRCIWGxuraEtKSmIuLi6sR48eijb5tdStWzcmFou1ni85OZl5eXkxACw0NJS9/fbbbPPmzSwzM1Npu+LiYubt7c2aN2/OCgoKFO379u1jANisWbMUbePGjWN+fn5MIpEo2sLDwys8+FUht1/TUlakxMfHM6FQyBYsWKB0nKioKGZjY6PUXl6kbN++XUlUMiYVLnKRW16kAGDz5s1TOk9YWBhr27at4rW+37e7uztr3bp1hfbs7GwlcZabm6tYd/v2bQaAffvtt4wxxkpKSpiTkxNbv349Y4yxOnXqsOXLlyuOIxQK2Ztvvql0/Pfff5/5+/sznucZY4wdOXKEAWA3btxQ2u7IkSNMKBQyoVDIOnfuzL744gt2+PBhvUSVrsg/47K/O57n2eDBg5lIJGJpaWmMsdLfiKurK0tNTVU6Rt++fVmLFi2U7hE8z7MuXbqwkJAQRdtHH33EALDLly8r2lJTU5mbm5tWkfLXX38xAOznn3+u8B7kn6em68AcNhLWpcYM9wDAmDFjUFBQgH379iEnJwf79u1TO9QDQDFWDUjHt7OystC9e3eEh4dX2LZfv35o2LCh4nXLli3h6uqKhw8fVti2fCxG9+7dkZGRgezsbJXnzsrKQnp6Onr27ImHDx8iKytLtzesw/vKyclBeno6unfvjvz8fNy7d09pW2dnZ6WYEpFIhA4dOqh8X6o4cuQIvLy84OXlhVatWmHr1q2YNGkSFi9erHafAwcOwMfHB+PGjVO02draYvr06cjNzcXp06d1fatakUgkOHLkCEaMGIEGDRoo2n19fTF+/HicO3dO6XsBgDfffBNCoVDrsevUqYPIyEi8/fbbeP78OX7//XeMHz8e3t7e+PbbbxVu9mvXriE1NRXvvvuu0hDQ4MGDERoaiv379yvaJk+ejKSkJKUsk02bNsHBwQEvv/yyTu95+fLlOHr0aIWlZcuWStvt2LEDPM9jzJgxSE9PVyw+Pj4ICQlRmeki59ChQ7C1tcWbb76paBMIBHjvvffU7qPqd6HrdaaK7OxslanNkyZNUlyTXl5emDFjhmJdkyZN4OnpqYg1iYyMRF5eniKmqEuXLorg2YsXL0IikSjFo4jFYmzZsgWvvPIKOI4DAMWwbfkA2v79++PixYsYNmwYIiMj8f3332PgwIGoW7euyuEJU/D+++8r/i0fpi4uLsaxY8eUtnv55ZcVwyqANAj8xIkTGDNmjOKekZ6ejoyMDAwcOBAPHjxQDDUeOHAAnTp1QocOHRT7e3l5YcKECVrt2759O2rXro0PPvigwjr556kOS9lIWJYaEzgLSC/Cfv36YfPmzcjPz4dEIsGoUaPUbr9v3z7Mnz8fERERKCoqUrSr+rHUr1+/Qpu7uzueP3+udVt3d3cAUiHk6uoKQDrWPXv2bFy8eLFCvEpWVhbc3Nw0vFPN3L59G9988w1OnDhR4QFcXgDVq1evwvt1d3fHzZs3dTpXx44dMX/+fHAcB0dHRzRp0kRr4OqjR48QEhICgUBZQzdp0kSx3lSkpaUhPz8fjRs3rrCuSZMm4HkeCQkJaNasmaI9KChI5+P7+vpi5cqVWLFiBR48eIDDhw9j8eLFmDVrFnx9ffHGG28o3o8qG0JDQ5WCNfv37w9fX19s2rQJffv2Bc/z+OeffzB8+HC4uLjoZFOHDh1Upl67u7srBZA/ePAAjDGEhISoPI6mYNlHjx7B19cXjo6OSu3BwcEqt7e3t1d6KMrtUfX70RUXFxeVad7z5s1TPKz79++vtI7jOHTp0gVnzpwBz/M4f/48vL29FXZ36dIFy5YtAwCFWCkrUo4cOYK0tDR06NABMTExivbevXvjn3/+weLFi5Wu6/bt22PHjh0oLi5GZGQkdu7ciSVLlmDUqFGIiIhA06ZNVb633NxcpfcmFAorfH7lEQgESkIcABo1agQAFbIAy1/jMTExYIxh5syZmDlzpsrjp6amom7dunj06BE6duxYYb2q67s8sbGxaNy4sVJyg65YykbCstQokQIA48ePx5tvvonk5GQMGjRI7QPz7NmzGDZsGHr06IEVK1bA19cXtra2WLt2rcogOHU9a1YmKE3XbWNjY9G3b1+Ehobi559/hr+/P0QiEQ4cOIAlS5YYFdyVmZmJnj17wtXVFfPmzUPDhg1hb2+P8PBwzJgxo8Kx9Xlfqqhduzb69etnsL2VkbKeKF3hOA6NGjVCo0aNMHjwYISEhGDTpk1444039DqOUCjE+PHjsXr1aqxYsQLnz59HUlKSkrfLVPA8D47jcPDgQZXXgSkLsOnimdKX0NBQREZGoqSkRElQlfcYladbt27Yu3cvoqKiKmRmdenSBZ9//jkSExNx7tw5+Pn5KT345d6SMWPGqDz26dOn0bt37wrtIpEI7du3R/v27dGoUSO8+uqr2Lp1K2bPnq3yOD/++CPmzp2reB0QEGDScgPlr3H5feGzzz7DwIEDVe6jToBaiqpgI6E/NU6kjBw5EtOmTcOlS5ewZcsWtdtt374d9vb2OHz4sFINlbVr15rdxr1796KoqAh79uxR8rqocq+rc4Gqaz916hQyMjKwY8cO9OjRQ9GuLdvGkgQEBODmzZvgeV6p1ykfipJn6Whz/+qCl5cXHB0dVdb4uHfvHgQCAfz9/Y0+T1kaNGgAd3d3PH36FEDp+4mOjkafPn2Uto2OjlaslzN58mT89NNP2Lt3Lw4ePAgvLy+1N2VjaNiwIRhjCAoKUvS4dSUgIAAnT55Efn6+kjelrHdBX/T9vocMGYJLly5h586dakWDKsrWSzl//jw++ugjxbq2bdvCzs4Op06dwuXLl/Hiiy8q1uXl5WH37t145ZVXVHpop0+fjk2bNqkUKWWRe7nk14cqJk+erOTB0UU48zyPhw8fKn2X9+/fBwCt1YLlQszW1lZrpyMgIAAPHjyo0K5LHZ2GDRvi8uXLFYRlWdRdB5aykbAsNSomBZD2/lauXIk5c+Zg6NCharcTCoXgOE4pLTc+Pt4iZdTlvcqy3oqsrCyVAsnJyQmZmZkq2wFUWKfq2MXFxVixYoWxZpuMF198EcnJyUoiUiwW47fffoOzszN69uwJAIqHn6r3rytCoRADBgzA7t27lXqiKSkp2Lx5M7p166YYgtOXy5cvIy8vr0L7lStXkJGRoXAtt2vXDt7e3vj999+VhhUPHjyIu3fvYvDgwUr7t2zZEi1btsSff/6J7du3Y+zYsQa5x7Xx0ksvQSgUYu7cuRU8Z4wxZGRkqN134MCBKCkpwerVqxVtPM9j+fLlBtuj7/f9zjvvoE6dOvj4448VD+OyqPMGtmvXDvb29ti0aRMSExOVPCl2dnZo06YNli9fjry8PCWhsHPnTuTl5eG9997DqFGjKixDhgzB9u3bFd/xyZMnVdpw4MABAJqHHho0aIB+/foplvIp0OqQD1XJ3/+yZctga2uLvn37atzP29sbvXr1wh9//KFSPMlrEAHS3++lS5dw5coVpfXqitqV5eWXX0Z6erqSnWXtBdRfB5aykbAsNc6TAkhLo2tj8ODB+Pnnn/HCCy9g/PjxSE1NxfLlyxEcHKxzPIahDBgwACKRCEOHDsW0adOQm5uL1atXw9vbu8KPr23btli5ciXmz5+P4OBgeHt7o0+fPmjdujWEQiEWL16MrKws2NnZoU+fPujSpQvc3d0xZcoUTJ8+HRzHYePGjToP31iCt956C3/88QemTp2K69evIzAwENu2bcP58+exdOlSReyFg4MDmjZtii1btqBRo0bw8PBA8+bN9S7tPn/+fBw9ehTdunXDu+++CxsbG/zxxx8oKioyqibMxo0bsWnTJowcORJt27aFSCTC3bt38ddff8He3h5ff/01AGnPb/HixXj11VfRs2dPjBs3DikpKfjll18QGBiIjz/+uMKxJ0+ejM8++wwAzDLUA0h7tfPnz8dXX32F+Ph4jBgxAi4uLoiLi8POnTvx1ltvKWwoz4gRI9ChQwd8+umniImJQWhoKPbs2YNnz54BMMwLpu/37eHhgZ07d2Lo0KFo1aoVxo4di/bt28PW1hYJCQnYunUrgIoxYvKhl7Nnz8LOzg5t27ZVWt+lSxf89NNPAJTjUTZt2gRPT0+VJfIBYNiwYVi9ejX279+Pl156CR988AHy8/MxcuRIhIaGori4GBcuXMCWLVsQGBiIV199Ve/PSBP29vY4dOgQpkyZgo4dO+LgwYPYv38/vv76a63xLIA04Lpbt25o0aIF3nzzTTRo0AApKSm4ePEinjx5gsjISADAF198gY0bN+KFF17Ahx9+CCcnJ6xatUrhIdXE5MmTsWHDBnzyySeKisB5eXk4duwY3n33XQwfPlzjdWAJGwkLY/F8IgtTNgVZE6pSkNesWcNCQkKYnZ0dCw0NZWvXrlWkEZcFAHvvvfdUHnPKlCmK1/J95el+5W0sm/a2Z88e1rJlS2Zvb88CAwPZ4sWLFel5ZbdLTk5mgwcPZi4uLgyAUjrf6tWrWYMGDZhQKFRKRz5//jzr1KkTc3BwYH5+forUx7LbMCZNDyxfN4Oxiumm6lD1maqifBoiY4ylpKSwV199ldWuXZuJRCLWokULlSm2Fy5cYG3btmUikUhreqq6FGTGpGm8AwcOZM7OzszR0ZH17t2bXbhwQWkbXa8lOTdv3mSff/45a9OmDfPw8GA2NjbM19eXjR49moWHh1fYfsuWLSwsLIzZ2dkxDw8PNmHCBPbkyROVx3769CkTCoWsUaNGOtmii/3qvu/t27ezbt26MScnJ+bk5MRCQ0PZe++9x6KjoxXbqLom0tLS2Pjx45mLiwtzc3NjU6dOZefPn2cA2L///qu0r5OTU4Xzqvqt6fN9y3n69Cn7/PPPWdOmTZmDgwOzs7NjDRo0YJMnT2ZnzpxRuc9XX33FALAuXbpUWLdjxw4GgLm4uChS0VNSUpiNjY1SHaby5OfnM0dHRzZy5EjGGGMHDx5kr732GgsNDWXOzs5MJBKx4OBg9sEHH7CUlBSt70sf5J9xbGwsGzBgAHN0dGR16tRhs2fPVkpn1/QbYYyx2NhYNnnyZObj48NsbW1Z3bp12ZAhQ9i2bduUtrt58ybr2bMns7e3Z3Xr1mXffvstW7NmjdYUZMakn9P//vc/FhQUxGxtbZmPjw8bNWqUUokATdeBqW0krAvHWCXqQhMEoRPp6enw9fXFrFmz1GYyVEZ27dqFkSNH4ty5czoPURDGM3XqVGzbts3ik1oShLHUuJgUgqgOrFu3DhKJBJMmTbK2KWopW1oekNak+e233+Dq6oo2bdpYySqCIKoSNTImhSCqKidOnMCdO3ewYMECjBgxQmtWhjX54IMPUFBQgM6dO6OoqAg7duzAhQsX8N133xmUxk0QRM2DRApBVCHmzZuHCxcuoGvXrvjtt9+sbY5G+vTpg59++gn79u1DYWEhgoOD8dtvvylVPSUIgtAExaQQBEEQBFEpoZgUgiAIgiAqJSRSCIIgCIKolFT7mBSe55GUlAQXFxeTlFEnCIIgqi+MMeTk5MDPz6/CJKempLCwEMXFxUYfRyQSKc2eXt2o9iIlKSnJ5HOvEARBENWbhIQE1KtXzyzHLiwsRFCAM5JTJdo31oKPjw/i4uKqrVCp9iJFXkI9ISHB4DlYCIIgiJpBdnY2/P39Fc8Oc1BcXIzkVAkeXQ+Eq4vh3prsHB4BbeNRXFxMIqWqIh/icXV1JZFCEARB6IQlwgOcXTg4uxh+Hh7VP4SBAmcJgiAIgqiUVHtPCkEQBEFURiSMh8SISmUSxpvOmEoKeVIIgiAIwgrwYEYv+nDmzBkMHToUfn5+4DgOu3btUqwrKSnBjBkz0KJFCzg5OcHPzw+TJ09GUlKSid+1fpBIIQiCIAgrwJvgP33Iy8tDq1atsHz58grr8vPzER4ejpkzZyI8PBw7duxAdHQ0hg0bZqq3axA03EMQBEEQNYBBgwZh0KBBKte5ubnh6NGjSm3Lli1Dhw4d8PjxY9SvX98SJlaARApBEARBWAEJY5AYMX2efN/s7Gyldjs7O9jZ2RllGwBkZWWB4zjUqlXL6GMZCg33EARBEIQVMFVMir+/P9zc3BTLwoULjbatsLAQM2bMwLhx46xavoM8KQRBEARRhSlfrNRYL0pJSQnGjBkDxhhWrlxprHlGQSKFIAiCIKwADwaJnhk65fcHTFusVC5QHj16hBMnTli9CCqJFBPDJE/B8jYAhfsAlg/YBIFznADYDwXH0cdNEARBSDEkjbj8/qZELlAePHiAkydPwtPT06THNwR6apoQVhIF9mwKwAoAyCaOKrkFljUDKDgIuC8Hx9la1UaCIAiiZpKbm4uYmBjF67i4OERERMDDwwO+vr4YNWoUwsPDsW/fPkgkEiQnJwMAPDw8IBKJrGIziRQTwVgJ2PO3pd4Tpdx12b+LTwN5fwLO71jDPIIgCKKSYarsHl25du0aevfurXj9ySefAACmTJmCOXPmYM+ePQCA1q1bK+138uRJ9OrVy2A7jYFEiqkoOgHwaRo2YGD5GwCnN2nYhyAIggAP6FmOreL++tCrVy8wDcJG0zprQSnIJoIVR0Cr5uMzAMlTS5hDEARBEFUe6tKbCk5HvUdeFIIgCAKAxMjsHmP2rSqQJ8VEcKKuAMSatgCE9QGBj6VMIgiCICoxEmb8Ut0hkWIqRJ0Bm0YAhGo2YOCc3gTHcZa0iiAIgqik8CZYqjskUkwEx3Hg3P8AhL7yFtlfmWhxfBVwGGMN0wiCIAiiSmJVkXLmzBkMHToUfn5+4DgOu3btUqwrKSnBjBkz0KJFCzg5OcHPzw+TJ09GUlKS9QzWAiesC672fnCu3wGiroBtK8B+BDiPrRC4fkVeFIIgCEIBDw4SIxYe1f+ZYlWRkpeXh1atWmH58uUV1uXn5yM8PBwzZ85EeHg4duzYgejoaAwbNswKluoO47NRIHmMbEkysiXPkQ8GCRVwIwiCIMrBM+OX6o5VU00GDRqEQYMGqVzn5uaGo0ePKrUtW7YMHTp0wOPHj1G/fn1LmKgXJUWXkP1sMsAKIR8tlIgfoCj/bzi6zoGD8xvWNZAgCIIgqhBVKh82KysLHMehVq1aarcpKipCUVGR4nV2drYFLAN4/jmyn01REihSpOXx87PnwMa2CWztulrEHoIgCKJyIx+2MWb/6k6VCZwtLCzEjBkzMG7cOI2zMi5cuBBubm6Kxd/f3yL2FeX/p6IkflmEKMhdbRFbCIIgiMqPMfEoxgqcqkKVECnymRkZY1i5cqXGbb/66itkZWUploSEBMvYWHQO0FhYRyLbhiAIgiAIXaj0wz1ygfLo0SOcOHFCoxcFAOzs7GBnZ2ch68qiSwRTDYhyIgiCIHSCZxx4Zrg3xJh9qwqV2pMiFygPHjzAsWPH4OnpaW2T1GIj6gjNH6cQtnYdLGUOQRAEUcmh4R7tWNWTkpubi5iYGMXruLg4REREwMPDA76+vhg1ahTCw8Oxb98+SCQSJCcnAwA8PDwgEomsZbZK7B3HoiBnKYBiqPaYSGDvRNk9BEEQhBQJBJAY4SuQmNCWyopVPSnXrl1DWFgYwsLCAACffPIJwsLCMGvWLCQmJmLPnj148uQJWrduDV9fX8Vy4cIFa5qtEoHQCy4ef0Cq+8qWxpf+28H5I4js+1rDNIIgCIKokljVk9KrVy8wpj5OQ9O6yojIvh9qeR9HYd5aFBceAWMlsBG1hYPTq7C162Jt8wiCIIhKBDMyJoXVgJiUSh84W9UQ2jSAk9u3cHL71tqmEARBEJUYqpOinUodOEsQBEEQRM2FPCkEQRAEYQUkTAAJMyJwtmpFRBgEiRSCIAiCsAI8OPBGDGjwNaD2Fg33EARBEARRKSFPCkEQBEFYAQqc1Q6JFIIgCIKwAsbHpNBwD0EQBEEQhFUgTwpBEARBWAFp4KwREwzScA9BEARBEOaAN3LunpqQ3UMihSAIgiCsAMWkaIdiUgiCIAiCqJSQJ4UgCIIgrAAPARVz0wKJFIIgCIKwAhLGQWLETMbG7FtVoOEegiAIgiAqJeRJIQiCIAgrIDEyu0dCwz0EQRAEQZgDngnAG5Hdw1N2D0EQBEEQhHUgTwpBEARBWAEa7tEOiRSCIAiCsAI8jMvQ4U1nSqWFhnsIgiAIgqiUkCeFIAiCIKyA8cXcqr+fgUQKQRAEQVgB4+fuIZFCEARBEIQZ4MGBhzExKVRxliAIgiAIwiqQJ4UgCIIgrAAN92iHRApBEARBWAHj66RUf5FS/d8hQRAEQRBVEvKkEARBEIQV4BkH3phibkbsW1UgkUIQBEEQVoA3crinJtRJqf7vkCAIgiCIKgl5UgiCIAjCCvBMAN6IDB1j9q0qkEghCIIgCCsgAQeJEQXZjNm3qlD9ZRhBEARBEDhz5gyGDh0KPz8/cByHXbt2Ka1njGHWrFnw9fWFg4MD+vXrhwcPHljHWBkkUgiCIAjCCsiHe4xZ9CEvLw+tWrXC8uXLVa7//vvv8euvv+L333/H5cuX4eTkhIEDB6KwsNAUb9cgaLiHIAiCIKyABMYN2Uj03H7QoEEYNGiQynWMMSxduhTffPMNhg8fDgDYsGED6tSpg127dmHs2LEG22kM5EkhCIIgCCtgKk9Kdna20lJUVKS3LXFxcUhOTka/fv0UbW5ubujYsSMuXrxosvesLyRSCIIgCKIK4+/vDzc3N8WycOFCvY+RnJwMAKhTp45Se506dRTrrAEN9xAEQRCEFTDVBIMJCQlwdXVVtNvZ2RltW2WBPCkEQRAEYQUYOPBGLEwWz+Lq6qq0GCJSfHx8AAApKSlK7SkpKYp11oBECkEQBEHUcIKCguDj44Pjx48r2rKzs3H58mV07tzZanbRcA9BEARBWAFTDffoSm5uLmJiYhSv4+LiEBERAQ8PD9SvXx8fffQR5s+fj5CQEAQFBWHmzJnw8/PDiBEjDLbRWEikEARBEIQVsPQsyNeuXUPv3r0Vrz/55BMAwJQpU7Bu3Tp88cUXyMvLw1tvvYXMzEx069YNhw4dgr29vcE2GguJFIIgCIKoAfTq1QuMMbXrOY7DvHnzMG/ePAtapRmrxqRUxRK9BEEQBGEKJBAYvVR3rPoOq2KJXoIgCIIwBfLhHmOW6o5Vh3uqYolegiAIgiAsQ6X1FRlaoreoqKhCiWCCIAiCqGzwEBi9VHcq7Ts0tETvwoULlcoD+/v7m9VOgiAIgjAECeOMXqo7lVakGMpXX32FrKwsxZKQkGBtkwiCIAiiAhSTop1KK1IMLdFrZ2dXoUQwQRAEQRBVj0orUipriV6CIAiCMAWMCcAbsTAjqtVWFaya3VMVS/QSBEEQhCmQgIMEhg/ZGLNvVcGqIqUqluglCIIgCMIyWFWkVMUSvQRBEARhCnim//w75fev7tDcPQRBEARhBeSxJcbsX92p/u+QIAiCIIgqCXlSCIIgCMIK8ODAGxH8asy+VQUSKQRBEARhBYytGksVZwmCIAiCIKwEeVIIgiAIwgpQ4Kx2SKQQBEEQhBXgYdz8OxSTQhAEQRCEWWBGBs6yGiBSqr+viCAIgiCIKonRIkUikSAiIgLPnz83hT0EQRAEUSPgGWf0UpkxhT7QW6R89NFHWLNmjcKAnj17ok2bNvD398epU6cMNoQgCIIgahLGzIBsbNCtOTCHPtD7HW7btg2tWrUCAOzduxdxcXG4d+8ePv74Y/zvf/8zyAiCIAiCIKo25tAHeouU9PR0+Pj4AAAOHDiA0aNHo1GjRnjttdcQFRVlkBEEQRAEUdOobsM95tAHeouUOnXq4M6dO5BIJDh06BD69+8PAMjPz4dQKDTICIIgCIKoacjL4huzVCbMoQ/0TkF+9dVXMWbMGPj6+oLjOPTr1w8AcPnyZYSGhhpkBEEQBEEQVRtz6AO9RcqcOXPQvHlzJCQkYPTo0bCzswMACIVCfPnllwYZQRAEQRA1DWOHbCrbcI859IFBxdxGjRoFACgsLFS0TZkyxSADCIIgCKImUt1ECmB6faB3TIpEIsG3336LunXrwtnZGQ8fPgQAzJw5U5F6RBAEQRBEzcIc+kBvkbJgwQKsW7cO33//PUQikaK9efPm+PPPPw0ygiAIgiBqGtUtu8cc+kBvkbJhwwasWrUKEyZMUIrWbdWqFe7du2eQEQRBEARR06huIsUc+kDvmJTExEQEBwdXaOd5HiUlJQYZQRAEQRA1DQbjZjJmpjPFJJhDH+jtSWnatCnOnj1boX3btm0ICwszyAiCIAiCIKo25tAHentSZs2ahSlTpiAxMRE8z2PHjh2Ijo7Ghg0bsG/fPoOMIAiCIIiaRnXL7jGHPtDbkzJ8+HDs3bsXx44dg5OTE2bNmoW7d+9i7969iupyBEEQBEFoprrFpJhDHxhUJ6V79+44evSoQSckCIIgCKJ6Ymp9YJBIIQiCIAjCOKrbcI850FukCAQCcJz6D0YikRhlEEEQBEHUBKqbSDGHPtBbpOzcuVPpdUlJCW7cuIH169dj7ty5ehtAEARBEETVxxz6QG+RMnz48Apto0aNQrNmzbBlyxa8/vrrBhlCEARBEDUJxjgwI7whxuxrDsyhD/TO7lFHp06dcPz4cVMdjiAIgiCqNTw4o5eqgDH6wCQipaCgAL/++ivq1q1risMRBEEQBFENMFYf6D3c4+7urhQYwxhDTk4OHB0d8ffffxtkBEEQBEHUNKpb4Kw59IHeImXJkiVKRggEAnh5eaFjx45wd3c3yAiCIAiCqGlUt5gUc+gDvUXK1KlTDToRQRAEQRClVDdPijn0gU4i5ebNmzofsGXLlgYbQxAEQRBE1cHc+kAnkdK6dWtwHAfGNE8MzXEcFXMjCIIgCB2oDsM95tYHOomUuLg4vQ9MEARBEIR6mJHDPZVBpJhbH+gkUgICAsxqBEEQBEEQVQ9z6wODJxi8c+cOHj9+jOLiYqX2YcOGGW0UQRAEQVR3GAAtoyRa99cHiUSCOXPm4O+//0ZycjL8/PwwdepUfPPNNxrn3NEXU+oDvUXKw4cPMXLkSERFRSmNQ8nfIMWkEARBEIR2eHDgjKgaq2/F2cWLF2PlypVYv349mjVrhmvXruHVV1+Fm5sbpk+fbrAdcsyhD/SuOPvhhx8iKCgIqampcHR0xO3bt3HmzBm0a9cOp06d0tsAgiAIgiDMz4ULFzB8+HAMHjwYgYGBGDVqFAYMGIArV66Y5Pjm0Ad6i5SLFy9i3rx5qF27NgQCAQQCAbp164aFCxeaRIkRBEEQhD7ki4vwtCAT+eIia5uiF/LsHmMWAMjOzlZaiopUfw5dunTB8ePHcf/+fQBAZGQkzp07h0GDBpnk/ZhDH+g93CORSODi4gIAqF27NpKSktC4cWMEBAQgOjraICMIgiAIQl/uZiZiTtRORGenQBqhwaGBc23MajECrT0qf8IHzzhwJijm5u/vr9Q+e/ZszJkzp8L2X375JbKzsxEaGgqhUAiJRIIFCxZgwoQJBttQFnPoA71FSvPmzREZGYmgoCB07NgR33//PUQiEVatWoUGDRoYZIQ6LBXkQxAEQVQtwjPi8Malv8ADkAsUAHiYm45XL/6Jpe0moGedUCtaaDkSEhLg6uqqeG1nZ6dyu//++w+bNm3C5s2b0axZM0REROCjjz6Cn58fpkyZYrQd5tAHeouUb775Bnl5eQCAefPmYciQIejevTs8PT2xZcsWg4xQh7mDfAiCIIiqycfXN8sECoByAaQMwIzw/3Bp0CwLW6UfjBmZ3SPb19XVVUmkqOPzzz/Hl19+ibFjxwIAWrRogUePHmHhwoUmESnm0Ad6i5SBAwcq/h0cHIx79+7h2bNnFWY/NAVlg3wAIDAwEP/884/JgnwIgiCIqseV9FhklRSgvDgpSyFfggOJkXixbivLGaYnlq44m5+fD4FAORRVKBSC53k1e+iHOfSB3oGzf//9t0IpyfHw8DDL8IshQT5FRUUVgogIgiCI6sPVjIfQJFCkMFxOj7WEOQZjqsBZXRk6dCgWLFiA/fv3Iz4+Hjt37sTPP/+MkSNHmuT9mEMf6C1SPv74Y9SpUwfjx4/HgQMHzFoXRe6WCg0Nha2tLcLCwvDRRx9pDPJZuHAh3NzcFEv5gCKCIAiiauMgVB1zUXE7kZktqVr89ttvGDVqFN599100adIEn332GaZNm4Zvv/3WJMc3hz7QW6Q8ffoU//77LziOw5gxY+Dr64v33nsPFy5cMNqY8pQN8gkPD8f69evx448/Yv369Wr3+eqrr5CVlaVYEhISTG4XQRAEYT1G+rfVYSsOowPam90WY+Blc/cYs+iDi4sLli5dikePHqGgoACxsbGYP38+RCLTiDlz6AO9Y1JsbGwwZMgQDBkyBPn5+di5cyc2b96M3r17o169eoiNNZ17zZAgHzs7O7WRzQRBEETVx93OCe09A3E1Iw6qh30YGjp7o6FLHUubphemCpytLJhDHxg8dw8AODo6YuDAgXj+/DkePXqEu3fvGnO4Cpg7yIcgCIIwDc+K8rAl7joOPrmFPHExgl29MK5Be/SsE2KWmMXl7Sdj7LmVeJibVmGdt70r1nV+0+TnJHTHVPrAIJEiV0ibNm3C8ePH4e/vj3HjxmHbtm0GGaEOeZBP/fr10axZM9y4cQM///wzXnvtNZOehyAIgjCc+1kpmHJuPbKLC8HLpr1LKczGmZQYjKjfCgvaDIfAxEJFJLTF9h4f4FjybfwVewbphbmoJXLAhKAuGFovDEJO72gGiyP1pBiT3WNCY0yEqfWB3iJl7Nix2LdvHxwdHTFmzBjMnDkTnTt3Nujk2vjtt98wc+ZMvPvuu0hNTYWfnx+mTZuGWbMqd+47QRBETUHM85h2cTNySkoFCgBIZE/QXY8j0ayWLyY27Gjyc3Mch/6+zdHft7nJj20JLJ2CbG7MoQ/0FilCoRD//fcfBg4cCKFQaNTJtSEP8lm6dKlZz0PoB88YzqfGYnt8BJLys+Bl74wR9Vuht28j2Agqf++FIAjTcTI5GskF6ks9cADWxVzC+AYdTO5NISoX5tAHeouUTZs2meTERNWkWCLGB5e24mTyA3DgwGTlqI8mRSPMsx7WdJ0AZ1sKXCaImsK19Eew4QQQM9WxggxAYn4m0gpzUMdBe1XUmgSTLcbsX5kwhz6gbi+hF9/fOoaTyTFAGYEinzfjRkYivri2y6r2EQRhWTitRdX0264mYeliblUREimEzuSWFGFz7DWU6neu3F+GY0nReJqfZXnjCIKwCu1rB6j1ogDSu0M9R3d42Ttbziii2kAihdCZq+mPZDcjdeqdA8Bh16NIC1pFEIQ16enTCHUda0GoJt6EAXg1pDPNXK8KZoKlmkMihdCZJ3mZ0GW+jHtZqRawhiCIyoCNQIDfO49HLZGj0pCOXLSMCmiDcUHtrGVe5cbYoZ4aMNyjc+Asz/P44YcfsGfPHhQXF6Nv376YPXs2HBwczGkfUYkIcPbQaTsKjiOImkWwqxf29XsP2+PDceDJbeSJixDi6o2xDdqhi1cD8qKoobpUnDWnPtBZpCxYsABz5sxBv3794ODggF9++QWpqan466+/jDaCqBq0q10fQo5T1D9QDYd+fo0tZhNBEJWDWiIHvN6oK15v1NXaphAWxpz6QOfhng0bNmDFihU4fPgwdu3ahb1792LTpk1Uor4G4WgjwujAMI3bBDi5o33t+hayiCAIoupSXbJ7zKkPdBYpjx8/xosvvqh43a9fP3Ach6SkJKONIKoOX7bsj5bufhXaOUh7Uiu7vEKuXYIgCF2Qx5UYs1QCzKkPdB7uEYvFsLe3V2qztbVFSUmJ0UYQVQdHGxE295yC7Y8isfnhNTzJy4SrrT1GBLTExIbtKc2QIAiihmFOfaCzSGGMYerUqbCzK60mWlhYiLfffhtOTk6Kth07dhhtFFG5EQltMK5BW4xr0NbaphAEQVRZqkvgrDn1gc4iZcqUKRXaJk6cqPcJCYIgCIJAtamLb059oLNIWbt2rUlOSBAEQRBE9cGc+kDvCQYJgiAIgjAeYzN0Kkt2jzkhkUIQBEEQ1qKSDNlUVkikEARBWIDraYnYeC8c19OeQCQQop9/CCY2DoO/cy1rm0YQlRYSKQRBEGZm2c0L+DHijFLF5vg7V7Du7jWs6TMa3fwCrWugCcgpLsKuh7dxOikOYp5Hay9fjA1pBR9HF2ubVmmh4R7tkEghCIIwI6cSH+LHiDMAoDSlhIQx8EyCN09ux/mX34GHvaO1TDSaqIxkTDq6BVnFhQCkIxhnnsZh2c2LWNJtCIYGNbGugZWVapLdY050Eil79uzR+YDDhg0z2BiCIIjqxpo7V9TOecUAFEpKsDUmCtOad7S8cSYgq7gQE49uQU5JkdIzk2cMPBg+PLcXQa7uaO7pYzUbKy8ctM8sr21/62JufaCTSBkxYoTSa47jwMr84MqWQZdIJHobQRAEUV25nJKgcVJOBuByyuMqK1J2xN5CdnGh2k49Bw5r7l7Dkm5DLGoXYRnMrQ90mruH53nFcuTIEbRu3RoHDx5EZmYmMjMzceDAAbRp0waHDh3S2wCCIIjqjPX7uublZGKsxvUSxuP4kxgLWVPFYCZYrIy59YHeMSkfffQRfv/9d3Tr1k3RNnDgQDg6OuKtt97C3bt3DTKEIAhCFwrFJbj3PB2MMYR6eMHBxtbaJmmko099nH8ar9abwgHo5FN1Zw4vlki0PitLTDAbbrWkmsWkmEMf6C1SYmNjUatWrQrtbm5uiI+P19sAgiAIXSiWSLD0xnmsvxuO3JJiAICTrQgTQ1vj0zbdYCesnHkAbzTtgDNJcSrXcQAcbGwxumFLyxplQlrX9sPV1CcKESbXYnIvv4Dj0IriUWoE5tAHOg33lKV9+/b45JNPkJKSomhLSUnB559/jg4dOhhkBEEQhCYkPI+3T+zCipuXFQIFAPJKirE66ipeP7oD4kraW+/hF4TPw3oCAIRlxucFHAeR0Aare78Md3sHa5lnNBMatZY6BHiAiQGIAYg5sBKASQAJzzC1STsrW1lJYZzxSyXCHPpA767HX3/9hZEjR6J+/frw9/cHACQkJCAkJAS7du0yyAiCIAhNHH0cg+MJqmMfeDCcTYrHgfhoDGtQOVNd32vRGV19A7DhXjiupyVCJBCgv38jTGjUGnWd3axtnlH4u9TC6KCW+Dc6EsoROBzAM9R1dEOfug2sZV6lprrMgizHHPpAb5ESHByMmzdv4ujRo7h37x4AoEmTJujXr59SFC9BEISp2BwdqTaNF5B6JTbfi6y0IgWQDou07uZnbTNMTnpBHrY/uAXVIcIcknKzseleJF5t1tbSphEWxhz6wKBBXI7jMGDAAPTo0QN2dnYkTgiCMCvx2c81pvHyjOFRznMLWkTI+e9+FCS85i792tvXSaSoopoFzgKm1wd6x6TwPI9vv/0WdevWhbOzM+LipAFhM2fOxJo1a4wyhiAIQhUe9g5aU3nd7apuXEdV5u6zVI151gzAo5xMFEnEFrOpylDNYlLMoQ/0Finz58/HunXr8P3330MkEinamzdvjj///NMgIwiCIDTxcnBzjes5AKNCNG9DmAc7oQ04LRKSA2DD6f24IaoY5tAHel81GzZswKpVqzBhwgQIhUJFe6tWrRRjUARBmJbMwgL8GXkNHxzbh4+PH8DO+3dQKK45PdOXgpuhvkstpewYOUKOQ11nV4wKaWEFy4i+9YMhYeozq4Qchz7+DSEUkEgpD8eMXyoT5tAHesekJCYmIjg4uEI7z/MoKSkxyAiCINRz/FEs3juyF0USMThw4Dhg54M7WHTpDDYOGYVGHrWtbaLZcbIV4b8Xx+Gdk7sRnpoEAThZ8ghDc886WNlnBFxFdtY2s0bSv34wglzd8TgnU2XcEM8Y3m5J5SlUUs1iUsyhD/QWKU2bNsXZs2cREBCg1L5t2zaEhYUZZARBEKqJfpaGaYd3Q8LzsvsZU9yY0gvyMH7vfzg17g04l3GtVld8nFywc8hERKUn41JyAhhj6Ojjj1ZevtY2rUZjIxDg7xfGYOKh/xCX/RxCjpNeokyadfVDj0Ho4ONvbTMrJ8bGlVSymBRz6AO9RcqsWbMwZcoUJCYmgud57NixA9HR0diwYQP27dtnkBEEQahmzc3rYIyp7DBJGEN6QT52PbiDic1aW9o0q9Gitg9a1KYKppWJei5uOPby6zj2OAbHHsegUCxGU09vjGnUArUdnKxtHmEhzKEP9BYpw4cPx969ezFv3jw4OTlh1qxZaNOmDfbu3Yv+/fsbZARBEKo5EhcjdaEzAOWH/WWzvB+Nj61RIoWonNgIBHghsBFeCGxkbVOqDtVsuMcc+sCgOindu3fH0aNHDTohQRC6UySRlBMocvcuU9zgCsqUiScIogpRzUQKYHp9oHe4dYMGDZCRkVGhPTMzEw0aUOljgjAljT08AV4uTMqVHJcvlWxc2pzcSk3B5F3b0Gb1CrRetRyvbN+Cc48fgVW2+uAEUQMxhz7Q25MSHx8PiURSob2oqAiJiYkGGUEQhGqaeHgj4mmyLMBOxQYcQ1xmJnjGIKjGlZ8ZY5h35iTW3byh1H4l6Qkm7d6GwcGN8MvAwZTmSlQtqpknxRz6QGeRsmfPHsW/Dx8+DDe30kmxJBIJjh8/jsDAQIOMIAhCDQzgeGm2BAfphGIcV/Yvh7TcPGQWFsDDwdHa1pqNLXeiKgiUsuyPuY/m3nXwdltKdSWqENUku8ec+kBnkTJixAgA0rr8U6ZMUVpna2uLwMBA/PTTTwYZQRCEakTygkgylSJ3lij+Mul9ykYgVLl/dYBnDEsvX9C63e/Xr+L11m1hK6y+nwVBVEbMqQ90Fik8L43cCwoKwtWrV1G7dvUvIFWe9Px8xDzLgJ1QiObedehmSJgddzsHqTdFXYeJkwqVzIICuNpVz2Jmj7IykZKXpxBq6sgqKkTM82doUtvLYrYRhDEYWzW2slScNac+0DsmRT5hUE0iLS8P806fxMGYB+BlAXoeDg54u10HvB7WhmaBJszGvvv3ND6Y5ay6cRXze1fPEgAl8gwnHeA1lGcnzAfPGA7HPMDGm5GITk+Hg60NBoc0wuRWYajr6mpt8yov1SwmxRz6QG+RMn36dAQHB2P69OlK7cuWLUNMTAyWLl1qKtsqBc8LCjDqv3+QlJOjECgA8KygAN+dPY2U3Fz8r0dPK1qomuTcHGy6eROHHjxAgbgELbzrYGKr1uji70+iqgrxOCtLp+2ScnLNbIn1qO/mBqGAU1lyvSwCjkNDdw8LWUXI4RnDZ4cPYVf0XQg4DjxjeF4I/HUjHJuibmLDyJfRxtfP2mYSFsAc+kDvUPjt27eja9euFdq7dOmCbdu26W1AZWd1+DUk5eSovUGuuXEdsc+eWdgqzYQnJaHf+nVYefUKYp8/Q1JODo49jMWkHduw4MxpStesQpTwvPbeEgcElglUq27Y29jCzdZOc6+TAUJwsLextaRpBIBNNyOxK/ouACh15CSMoVAsxht7dqFQTPO61QTMoQ/0FikZGRlKkbtyXF1dkZ6ebpARlRXGGP6JuqmxByfkOGy9c8uCVmmmoKQEr+/ehUKxWHrDkN3YJbz0Pfx1Ixy7o2m26qqCIupJw8MZDOhSr75lDLISYlZGrJX9LMoIFxvyEFocxhjW3LiudkSSZwyZhYU48OCBRe2qKnAwchZka7+BcphDH+gtUoKDg3Ho0KEK7QcPHjRLMbfExERMnDgRnp6ecHBwQIsWLXDt2jWTn0cVRRIxsoqKNG7DACTl5FjEHl3YE30PWUWF4HkG8GUCs2RVSzkAa65ft7KVhK74OrsqP5zLP6BldPavviIlt7gYOUXFyjdkFV4VbydnC1pFAEBmYSEeZ2VpdPbZCAS4nkQ1tFQiT0E2ZtETcz5TzaEP9I5J+eSTT/D+++8jLS0Nffr0AQAcP34cP/30k8njUZ4/f46uXbuid+/eOHjwILy8vPDgwQO4u7ub9DzqEAltYCe0QZFErHYbDkAte3uL2KMLVxMTIWDSOhplbxwcZPd1HridmopCcQm5xi2AfHJAQwut+bvWQmJONljZzJZyQoUD4Ghbfb/LQnHp74/TkOET4uFpGYMIBUKBbte1gKMie5UBcz9TzaEP9BYpr732GoqKirBgwQJ8++23AIDAwECsXLkSkydPNsgIdSxevBj+/v5Yu3atoi0oKMik59CEgOMwIjQU2+7cVjvkI2EMwxs3sZhN2iiRSBQCpfztQy5UpA+2yuYorF5EJadg9dWrOBoTixKJBEEe7pgcFoaxLVvolbruamenlIJc9jLkVImWaoi7vT08HBzxrCBf2lBesMku7O4BgVaxrybjIrJDaO3aiE5PV3sZinkeXfz9LWpXlcHC2T3mfqaaQx8YJG/feecdPHnyBCkpKcjOzsbDhw9NLlAAaRW7du3aYfTo0fD29kZYWBhWr16tcZ+ioiJkZ2crLcYwrV172NvYQKiiJyzgOPQODEIbX1+jzmFKhBynUqDI4SD90il41nwcjYnBy5s249D9ByiWSMAAxD17jrnHT2Dart3SlFodCfP1BQeB1K3LK83YA/CAAAK08vE1ecZWSm4ubqekIjXX+llDQoEAE1u2Uu6Nl725M8BOaIsRoZWns1BT4DgOb7Vtr/ZZKeQ41HVxRf+GwRa1q8rATLAAFZ55RWrCFAx5puqLqfWBUT44Ly8vODubbxz44cOHWLlyJUJCQnD48GG88847mD59OtavX692n4ULF8LNzU2x+Bup4ANruePfUa+gvlstAFJhIn9IDGscimUvDqlUKb0uIjutPhIGIC0/3xLm1DiyCwvx0b4D4BlT8r7J7ydn4uKxPlx9effyjG7WHCKhQPadlh+LlqZ7vhbWxmT2Rz59iolbtqLrylUYvuFvdFm5ClP/24bbKakmO4c6ErOysTE8An9euYYzcfFKmSLT2rZHyzo+MqFSKtWEnAACToAfBwyEq13lGXatSQxvHIp32kmnI5B35uTfkLuDA9aOGAkbmlPJrPj7+ys99xYuXKhyO0OeqYZiKn3AMR261G3atMHx48fh7u6OsLAwjQ/l8PBwo42SIxKJ0K5dO1y4UFoSe/r06bh69SouXryocp+ioiIlFZmdnQ1/f39kZWXB1YiiQowxXEl8grvpabAT2qBnYBD8XFwMPp65+OXCBSy7fFnpBq+Ka++8A3cHBwtZVXNYH34D3544qdEL6+figjNvvaGzuD3+8CHe2bcHrIzwEXLSuiGTWrXGnF69TSKUrz55gslbtkHCmNL1I+A42AqF2Dx2NFqZwWtYWCLG/w4fw5470jRWTlZro66rC5YMfRFt6kprbBSUlGDNjevYGBmBtPx8cAB6BgbinXYd0b5uXZPbRehHZPJTbIq6ibtpaXC0tcWgkBC81KRZlauEnJ2dDTc3N6OfGbqcI3DBAgiMiGnkCwsR/7//ISEhQclWOzs72Kn43A15pmrD3PpAp5iU4cOHK96wvEa/JfD19UXTpk2V2po0aYLt27er3Ufdl2MsHMehYz1/dKxXucdWX2zcGL9euqR2vYDj0KFePRIoZuJ2SioEnObCY0k5OcgtLoaLjtdp3wYNsH/CJKyLuIEjMTEo4SVo7l0HU1q3Rr8GDU0iUBhj+PrQ0QoCBZCmkZZIJPjm8DHsnTrJ6HOV56O9+3EiNq509EZ2/qc5uZi8ZTt2Th6PkNqecLC1xfsdOuHd9h2RW1wMO6EQdjZ6h9URZqKVjy9a+VSeoe8qgYliUlxdXXUSVIY8U7Vhbn2g0y989uzZKv9tbrp27Yro6Giltvv37yMgIMBiNlQ1Qjw98WKjRjj04EGFh438UTa9UyfLG1ZDsBUKpKJBiyfLVk/3d4inJxb07YcFffsZY55abiQ9Rdzz52rX84zhbloa7qSkomkdb5Od9+bTZByLeaj2nCUSCVZeuoKfhwxStAs4rsr1zvVBwvM49iAWWyKi8DgzCx6ODhjerAlGNm8KR1H1zeIizI85nqnm1geVuhvy8ccfo0uXLvjuu+8wZswYXLlyBatWrcKqVausbVql5oeBAyHkOOyNjoaA4yDgOIh5Hs4iERYPHIiOFGlvNvo0bIB/b0apXS/gOLSvVxf2lSxl+NHzTJ22e5yZaVKRsufOPdgIBBDzqufckTCGA/fuY/GgATViQs8isRjv7diL0w/jFSXmHz/PxI3Ep1h3NRx/jx+NOi6Vvx5MTlER9ty6h7upqRAJbdA7OAhdgwIMTsWvtlg4u6cqPlN1Einu7u46u5SfmbBEfPv27bFz50589dVXmDdvHoKCgrB06VJMmDDBZOeojtjb2mLp4MH4qEsXHI6JQW5xMYI9PDAwOLjSPRyrG72CgtDQwwPxz5+rHPLhGcPbHTpYwTLNuNjr5plwNXFNoMzCQq2ZZmKeR0FJCWyFQuQXl+BUzEM8LyiEn6sLujUIqFbi5ZezF3E27hEASAsyQvYc4oCEzCx8tHs//pn4ivUM1IHjD2Lx8e4DKCwRQyjzGG68HoHGXrXx5ysj4VMFRJalsPQsyOZ4pppbH+gkUsoWYcnIyMD8+fMxcOBAdO7cGQBw8eJFHD58GDNnztTbAG0MGTIEQ4YMMflxawKB7u6Y1r69tc2oUQgFAqx9+SVM3rYN8c8zIZT1huU/4jl9+6BHUKBex2SMIT0vHxKeh5ezk+LGb0q6BdSHs0iE3OJitdu4OzigfT3TBqjW02Ec3UUkgqOtLf66fB2/nLmIgpISRc0fT0cHzHmhLwaGhpjULmtQUFKCzTcipeJE9vBRlINhgIRjuPYkyeRDbqbk1tMUvLd9r0Kgl/WQxaRn4NV/t2Pv65Mo28eKmPqZam59oFN2T1lefvll9O7dG++//75S+7Jly3Ds2DHs2rXLIEPMhSUitQmiPCUSCY48iMHRmBgUisVoVLs2xrZsAT89r8HdUXex6sJVPEjPAADUdnLEpHat8XrndhCZ2IPw59VrWHTqjNr1c/v1xYSwViY9Z0JmFvqs+ktjnY2p7dqgjqMTFh1Tb9sfrwxH72DTT8thSW4kJmHMhi0VBApQ6tXnOODrfj0xtb3p0s5NyeTN23DxUYLGbVa8PBT9G1XeuimWzO4Jmvud0dk9cbO/rjTPN3PoA73l7OHDh/HCCy9UaH/hhRdw7NgxvQ0giOqIrVCIwaGNsXTIYPw+Yjg+6dZVb4Hyy+kL+HzPITxIy1CMXafn5mPJqQsYu+5fFIvVT9dgCK+3a4tPunWFjUBal0X+VyQU4suePUwuUADAv5Yb3uvSUeU6AcfBx8UFk8JaY+np8xqPs+jYmSpfoJCViU9QVS1auhFQJNa9GKAliXiShIvxmgWKAMDR6BjLGFQVMFExt8qCOfSB3iLF09MTu3fvrtC+e/dueHrS3BkEYQqiU9Ox/NxltTehW09T8drmHSZ9MHMch3c7d8TFd6dhTr++eLtjB3w7oB8uvjsNb3RoZ7LzlKeOgxM4CSrMScRLGIY2aoSIxCQUlmh+MMdlPMe91Ko9C3v9Wm6l1YRVIB/iKiwpsZxROpKSk4tJf2/TOi0vD6CgxLTiuipj1AzIRsazmANz6AO9s3vmzp2LN954A6dOnULHjtIe0OXLl3Ho0CGTl9cliJrKlhtREHAAr+EmdOVxIrZF3MLosBYmPbe7g4NZvCaqiEnLwJxDJ6Q3WzGU5uThOGDVhWsYHdZcp2M9evYcTep4mctUs5OtZcZ1QPrxFFdCT8o/12+iSCIp/f7UiRUGeDk7WsoswsKYQx/o7UmZOnUqzp8/D1dXV+zYsQM7duyAq6srzp07h6lTpxpkBEEQyjxIS4earFwlvjt62vzGmJHN4TelzzMmm1eKSRcOsp4igKuPnuh0rNTcPPMZagGcRCKt2wg4Ds522rezNHtuS6sF6zL8EFCrllltqVJUs+Eec+gDg+qkdOzYEZs2bTLohARBaKfCg4iV+Vumt5pXXIKMvHx4OlXN3unl+ASFGCvb+S4bg5GcnaPTsarqZyCnjoszWvv54ObTFLXTWvCMVcpMpmd5BRVnp0a517LxqqpQ58ViGDtkU8lECmB6fWBQHlhsbCy++eYbjB8/Hqmp0onHDh48iNu3b5vMMIKoybwQ2kh6A+KlCyf/d5k2+esHaVU3FiO7oBCAxtEBSCQ6uJQAtPTzMY1RVmR6jy5q44wEHIcXmzRCA08PC1ulHXmqsdwrpvLhKRsNal2XSudXZ0ytD/QWKadPn0aLFi1w+fJlbN++HbmyqdwjIyMtWjKfIKozIV5lgsxkN30O0h+sYh5g2YNAJKzUhaM1Ym9rqzHWkoM0LqdXcJDaaqUCjkPPhoHwr+VmFhstSbcGAfhx+CA42Eq/U1uBQDGz8AuhIVg0ZKA1zVOLWB4nwwOcBBBIAIgBrgRACSAQAxwP2AkF8HGtfBOzWo1qNtxjDn2gt0j58ssvMX/+fBw9ehSiMmOoffr0wSUNE9sRBKE7uyJvKYkTQE1aKg8EetaypGkmpZ6b9rRsG4EACwb3R1031wpCRcBxqOvmigWD+5vLRIsztFkoLnw4DQte7I8pHcLwQffOODRtCpaOHAx728opSAUcp/Dsyb8huZgu+5ARMiripkQ1Eynm0Ad6X/FRUVHYvHlzhXZvb2+kp1ddtzNBmJrcwiJEJUnjC5r6esPdUfeZp4/djQWgRaDI/p68F4uX25g2w8dS9AlpgAtxjzVu061hALycnbDz9fH4J/wm/rtxC2l5efBycsLo1s0xvm1Lk5frtzZOIhFGt9Ytq8naFIvFkEiY1LPHKYemlIWDNP34bEw8ugcHWtRGwjKYQx/oLVJq1aqFp0+fIigoSKn9xo0bqFvXtCWzCaIqUiwW46ej57DlWhQKZQXXbAQCDG/VBF+90BPOOsyTI2ZMMZyjbThk5dkrVVakuNrbVQyyLEeXoPqybe0xrUsHTOtS+eY+qsmk5+Up9ei1zeJy+O4DEikyLD13j7kxhz7Q2/c2duxYzJgxA8nJyeA4DjzP4/z58/jss88wefJkg4wgiOqChOfx3j97seFyhEKgANLAwp0RdzB1/XYU6VDMqmFtaXCkths+A5Cel6+XjTzPcD7mEb47cApz9x7H1utRyC+2ToGwXRF3ICibuVTu3wIGRDx+ahXbCN14mpWr1/aVsc4LYRrMoQ/09qR89913eO+99+Dv7w+JRIKmTZtCIpFg/Pjx+OabbwwygiCqC6cfxOFsTLzKdTxjuJWUgt2RdzGmnWbPR48GgbgQm6BVpXAAbDjd+xop2bmYtnEnolPSFZO8ia/yWHzwDJa8MhjdQwJ1PpYpeJCWUVoOXl5utcx4OwNwv4pXkq3uiGzKzCGlbqynDGH+lN1TXTGHPtBLpDDGkJycjF9//RWzZs1CVFQUcnNzERYWhpCQype7TxCWZtv1WxBynGIW2PLBbZwA2HLtplaREpWUKn1Ic9q9KW0DdHOjlkgkeH39dsRnPAegPENtfkkx3t20G9veHo/GPpar2uooEgHIV5u6yqFizRjGGO4lpyHxeTZqOdgjLMDPLDNDE7rRuI4XnGxskFciLhWZqi5a2Xc7oAk9KxQYG/xaiYZ7zKUP9BYpwcHBuH37NkJCQuDv72/wiQmiOvIkM1sqUJg05RIoN5utBHiUkan1OCUSifR+r0PP9LN+3XSy7eS9h4hNe6ZyHWMA4xj+On8di1+uOEGYuXixWSOsOndVbfEyABjUrJHi3xGPkzBvzwncS05TtHm7OOGTAd0wLKypWW0lVCMSCuHh4Ii8wuzSlB455Yq7eTs6Vvmie6akOsWkmEsf6NX9EAgECAkJQUZGhklOThBynjzLwq9HL+DzLQcwb/dxXIt7UiVntfVydpTep1UIFDn5BcXYH3lP43H8aklTczkmEyqqYICbnR1CvGvrZNvRuzGKmhuqkPAMh28/0OlYpmJc+1ZwshOprIEi5Dh4OjtiZOtmAICbT5IxZc1WRKekKW2XmpOHL7cfxtarURaxmVAmPTcPiZnZpde9pPT6V3gKeABiIDO3UKeYrBpFNUk/Npc+0NtHumjRInz++ee4deuWSQ0hai6/n7yMgT/9hdWnr+Bg1H1svXYLk//citf+2o7cQu2TrlUmRrRuWlrmXcVNRD6s8fWOw4pqq6oY2brUK8CpuinJXk/t3FZn2wqKS0qHodRQJBaD1zSroYmp4+qMn18eBDcHaQqxjUCgiJXxq+WKDVNHw0WWDbVo/ymUSHi1om3xwdMosFIAcE0mp7BYcW3K66JwvLSAm2Lhpe1insfp+3FWtJYwJ+bQB3oHzk6ePBn5+flo1aoVRCIRHByUaz88e6banUwQqthx/TZ+PXYBAMrEcUj/Xo17ghlbD2H5pOHWMk9vBjZthG8ER1Ai5tUP03BAiYTHnoi7mNg5TOUmoT5eGNAkGEfuxkgbyma9yHAU2WJMW91Tjxt6eeBU9EO1QoUDEOBZCwKBtigY03DrSTJ+OnQOlx8mSMMYOMDL3RFtA+vixRaN0TMkSBFrkvAsExEJmrN88otLcOJuLAa3CrWA9YQcbxcnrTN2lyUtp2pPBGlSqlFMCmAefaC3SFm6dKneJyEIVfA8w8qT6qsQ8oxJ4yhSM9DQ21PtdpUJkY1QUdRKGzGpmt2iP48ejC92HMSBW/crrHOxE+HPyS/BU49p70e3a4HV565q3GZCx9Y6H88Ywh8l4rU/t1eY8yXteR6OZcdgcsc2SsGw8enPdTpunI7bEabDyU6EXo2DcOKebh4SLxcnM1tUdahOMSmAefSB3iJlypQpJjeCqJnEZzxH4vNsjdsIOA6n7j2sMiIFgPThymufFM/B1lbjehuhAD+PHozP+3fH8tOX8SA1HS72dugXGoyhLUPhVH6mZC3Uc3fDFwN7YvGh0xBwnFKwKsdx6BhYD2PatdTrmIbAGMPMHUch5vkKAbM8YxBLeMzeeRQ7PpgIThar8jRTh5mQGfBcz5oxhGmYObQvTtz7U+t2jiJb9GwUpHU7ompiDn1g0EQQEokEO3fuxN27dwEATZs2xfDhw2FjUznnlSAqJ4VlA+jKBthxpYtAwKGoihV/8nZxxqNnmdIXGjwquqYO+9ZyxfzhppmbZmqXNqjn7opVZ64gKjEFAFDb2RETOrbGa13bKte8MBM3E5IRl6be48EzhujkdNxNSkXTunUASIdylCrTlnWTy68XAHWrwSSDVZE6Ls7oFFgPl+KfaNzuy0E9YVdJ5x+yCtVsuAcwvT7Qe6/bt29j2LBhSE5ORuPGjQEAixcvhpeXF/bu3YvmzavGfBOEdWGM4Wa8LMaAh2JyMulK2V8OEINHIx/dslcqC3XdXfEoPVMaKahq6Ef2/p5q8SKZi35NgtGvSTCyCgpRLJbAw8nBonVGdEnBBoDHz7IUIqWoRFx6XUigNJEdIK0nA0HFmiqEZdhy+SauPHiiPE13GTgAs4b2wWgt9YFqGtVtuMcc+kBvkfLGG2+gWbNmuHbtGtzd3QEAz58/x9SpU/HWW2/hwoULehtB6E5adi4epj6DnY0NmvnXga3Q/D1fc7Dy+GUsP3pRevcqk66rVFaBSad9b1O/as0J1T7IHxcfPC6tcVL2RiJ7gxwPPMsvsIJ1pcgzaiyNq4P2uYsA2bw+MrxcnEo9bVDhoGIAJNBrEkfCcAqKS3AuOh5Z+YXwdnPGb0ek930BDzAeYGWFCgMchEIMa011bKo75tAHeouUiIgIJQMAwN3dHQsWLED79u31NoDQjZSsXHy36wRO3n6oGMf3cHbAW307YkLX1oqx+6rA44xMrDh6UfqCV66GXhZ5MbP9EXcxqVsbi9l3NfYJNpy5jiuxT8DA0KGhPyZ1D0PH4Po67T88LBS/HjlfWuOk7FdT5iHr4+ZsatOrBJ0b1oeznQi5RcVqt3FzsEe7oHqK150a1tc60SIA3HqSgv4tqKKpuWCMYePZG1h25ALyi6Tp3gwAyvSVOJSpkyKjkJfg4oNH6Nss2FKmVg2q2XCPOfSB3j7eRo0aISUlpUJ7amoqgoPpAjQH6Tl5GP/bPzh5O1Zaw0J2YT/LKcCiXafwy6Hz1jZRL3ZcvaVIcy3rPVFVqJIDsOf6XYvZtuFMOF79fSvO3ItDXlEx8otKcPZeHF7/Yzv+OnVNp2O4OjrAWSQqnY6GlVlkbbZCIV5o2diM76TyYmdrg/f6dta4zQf9OivFx/i5u8LX1UXrsfeE3zHavspCdFIa9l6/i2NRDypNvaC1p6/j+72nFQJFH3IqyXuoVBhTyK0SFnQzhz7Q25OycOFCTJ8+HXPmzEGnTp0AAJcuXcK8efOwePFiZGeXjrO7uroaZBShzJqTV5GWnQueL/UuAFA8ydccv4qX2jdH/dq1rGShfjxKz1TK6tCUsctgudiN6w+f4Pu9pwFIq6/Kkf/75/1n0a5BXbSsr3mCtB/2nEZ+QTEU8/6peHMfDuxqteGWysDkrmEoFIux/PhFSCQ8hAIBJDwPG6EA0/t3wbhOrSrsU9fdVWuWz7M86w6hmYLY5Ax8s+UwbiWU3uztbISY2KMNPnihi9XmKcotLMLyw4YP5/vV0i4yiaqNOfSB3iJlyJAhAIAxY8Yohhjk5cuHDh2qeM1xHCSSqpWVURmR8Dy2X46SZrTKnuZlR3bkwwkrj1zCwvGWm3MlPTsPRyIfICu/EPU83dCvZTAcRJpTauW42NtBwAkgYWVqZKiBg/JEeOYiK78Q76/drVExCQUcNp+P1ChSsvILsevaben3IkHFIEJZXEXPxjU7DZPjOEzr1QGvdGiBQ1H3kZaTB28XZwxs0Qi1HFWLt7oebrjxKElJQJandhWvwfEkIwuTl29BXrmhsCKxBH+duIrM3ALMGWOaTC99OX4rVmWmnaqOkxKydYZ4X6o71S1w1hz6QG+RcvLkSX13IYxAOuQglv72VdwAOFkwx8X7jyxij4Tn8fPes/j7zA0wMAg5AcQ8jwXbRfhmVB8MadtE6zFebN0Y26/KyiZrKXzGAIsEBy/ceVJa3luDLRKeISI+UeNxbiWkoETCS4N+5UKFk2WflBGZ1+MSEeTtYcJ3UDWp5eiAsR2lXpMSiQTZ+UUoLBbDXlTx1jSibVPsvq5+OEfAcRjVvmpnF64+fgV5RcUqhRgDsP3KLUzq0QYNfSxfN+hZbn6F+joKeKjOZmOl6588s042W6WmmsWkmEMf6C1SevbsaXIjCPU4iGwVPRW1sbEckJGbj2KxGKIyueh3nqTgYHg0svMLUdfTDcPbN0OdWsYFa/689yw2nA5XvBbLvCF5RcX4atMhONmJ0Lt5Q43H6NjQH20C/RARnwTZhMFq3xvHgNpmnjU1IycfhyKitQomAFpd7XLRqJSFIhMs8owlCFClAp3NTUZOPlYfu4ydl2+joLgEAo5D3xbBeKt/RzSu66XYrnm9OnC1s0N2YZHKtG4nO1uM79LaorabkhKJBPvC72r0FAkFHPaG38VHL+o287UpqVPLRe1s1RykWT0qhYpsmLoBifKKVDORYg59QFV1KjlyL4Iuj7QSMQ+RDVBYLMaXfx/AiVuxiocqYwwrDl3EBy92wet9OxhkS3pOHjadvaF2PQfg1wPn0atZA40PYY7jsHzqcHy2aT8u3HuseJCrrCfCAQ3NfHOLTkqTPhjKeDtUwXFAr6YNNB6ruX8dCFhpTTql/WWHBw+01hLXUlNIy87FxKX/IjU7V/Fw5hnDiVsxOH3nIX6f9hLaNZRm+Wy9GIXcvKIys9jJDiK70efmFiMlMxduaoaLKjv5RSUo1qFwYVq2dea+6d20AZzsRBWGouRwAMCrzLiHyEaIjsH+ZraQqI5YJwKrmsIYw/HIB3jvj52Y+PM/mLvlKGKTjZ+2WqtAYYCtUABHO2lMyNz/juLU7YcApMMzEln5cZ4x/LL/PHZfuW2QHSeiYjTOkMsAxCRnIC5VfTVROa4O9lj1xsvoGOyv/P7K9yx4YFCYeSeME8on1CtfTK6cXQKOwyudKwZ0Km0m21chvJg0HZOTxRTJM3ziUmkiTgD4YfdpJYEiR8JLy+N/+fdBSGQxSVvOR0q/Bx7gxMqLQALYCDhsvxRljbdhEhztbGGnQ8Vfb1frxN04iGwxY5ispyz7DgQlAFcCpd9MmYLRCt7q28FqAb+VGaXMPwOX6g5dNSbi5qOn6P7VCnyydh/O3Y1H1ONk7Lh4Cy8t2oD3ft8JscTw4E93J1mBKg0XpKOtCBzH4UlGFg6E31PrlgWA349c0ig21JGdX6TTDLk5BbqnGk4f1BUCcNIfW9mPiAeEHBDk5Y6eWrwXxtKivo9iWE1JqJRL85s7qr/WDKonGVlSoSK/icgDnuUPVwYIOCA2hUTK89wCHI18oHZ4g2cMqVm5uHBPGm+VWCamQSm1W9Ym4RkeVeEJBm2FQgxr17RUNKtAwjMMa2e9omgj2zdDh4C6EEoAASsVIwIx1N6fxnVpiWl9O1rQyipE+fuMIUs1h0SKCYhOTMOUpf9KAy9VcO5ePD5ft9/g40vETPnhiTL/lr0ukNUgOHU7VqvrJfFZNmJT9Pfw1KvtpnG8HJAOifh56J5q2CrAF99PfBEiGyEEHGDDcbDhOHAAAmt7YPW0l2EjNO9l6mgnwriurcBxyh4QORyA3k0aYET7ZlqP5SCyVRIkFXqVDIAYOvWYqzuP059rvZ6EAg4PktMBAE72mkveCzgOrlU8rfvNvh3gYm+nVqiM7dLKqgHX605cw/UY5eBxhVApAWwlHBrV8UQDL3cMb9MEuz+bjP+N7EsxWITBGBSTkpWVheTkZACAj48P3NzcTGpUZUXC8ygR87CzFSr96Ob9e1SaIqzhd3giKgbPcvLgYUCKpEQiKa1eWj4wTfZALZE9VQuLxRBwHCQaPCny7fSlT/OGcHWwQ7YaT4lQwKFr40B4ueoXnDuwVSN0CqmP3dfuIDoxFSJbG/Rq2gDdQgMt5iJ+f1AXJGRk4ujNGNgIOEh4BiEn/dsmyA8LJ+iW3h3k7Q6RQIASnq84jAUosrSKDfj8qxv2WmaBBqTeFPls0YPbhGLrxZsaPS+Dwqp2gTxfd1f8/cFYzPrvKMLjSsWAo8gWU3u1xbR+naxmm4Tn8efRK6pXygQ5L2F4+CQDHDg8SnyOrOxCfDfpBbhW0Tghc1PdUpAB0+sDvUTKn3/+iZ9//hnR0dFK7Y0bN8ann36K119/3ShjKit3E1KwYMtx3HokLa4kFHDo2jQQc8b3h4Tncetxik6RretOXMcnw3vofX5p8GyJxsA0uWYK9vXU2ju1EQgMKvwmsrHB7DH98NkGqVeorA4SCjg42Ynw+XD9o7slPI8Ld+Jx4voDPEzOgIPIFi42IoT41Iafh2UKAtoKhfhp8hBcjX2Cv45dwb3HabARCtAlNBDfjOkDkY4zt2bmFUIs5pU9J2X/ylhx4CIGhjVGgLc7aiohvrXhU8sFyVoKtPVqLh3um9yrDfZcvYPCEnGF4UyhgENjPy/0aFr1688EeLlj/Xtj8DD1GWKTM2Bna4N2DeopYs6sRVzKM+Sq8haXu7alGXvSxgv34vH+ql1YN/0VnYaKaxzVKLvHXPpA527qDz/8gA8//BDDhw/H8ePHcevWLdy6dQvHjx/HiBEj8OGHH+LHH380yIjKzMnIGIz7frNCoADSceEzt+Iw4Js/sWyf7hUYk59rvhmro7yrVFVgmpNI6grvFhoEL1cnCNS4V4UCDgNbN4Kbk2E9mwGtGmHlmyPRpK53GfuAHk2CsPmjcQjU86ErlvCYsXY/vlp/EDfjniI7vwgpmbnYdDIco77bgCj5TMkWICu/EDPXH8Kl24+RmVOA9Mw87Ll0G10+W469l3Urt15UUsZDUm7cuKxwYTzwx+HLJrS+6iEQcHh7gHrPgIDjMKRNE/i6S4Wqv2ctrHl3FLxlcx4JBQLFdd62QT38/tZL1So4s4G3B/q3DEGPJkFWFygApPV/NCG/1svMai6RMETGPcXFaMvUcSKsgzn1gc6elGXLlmHt2rUYM2aMUnuTJk3Qq1cvtGrVCp9//jk+++wzgwypjBQWl+CTP/eqTUsVS3jsvnJHp/oaAFDfq5Zhhsjn69FwDhfZeL2NUIBFEwfh7VU7wfG8kldFKOBQx80Fnw7T35tTlq6hgegaGoiEjExk5xfCp5YrPF0Mq2Wy+dQNHI+IAQCl3rGEZygsFmP6H7txeN4bOnsyDCUnvxD9/7cKJeKKN2KxhMfMvw/Dw8UBXbX01D1dHcFxspoR5eJa5H/lzQeu3cWCiQNr9Hj9S52a41luPpYdlIp9TlZoRsIz9GnRELPG9FPavnl9Hxz65jWcuxuP2wkpsLURonuTQISWEc2EeQjwcpde22qy3+T1UOSr5bWBBDbAofBodG0SaClTqw7VxJNiTn2g850/NTUVLVq0ULu+RYsWSE9P19uAysyfR65UnMW2LGV/sKy0TR3je4YZZEedWi7IzCssvR7LxqPI7goN65RWoGwf7I9NH47F6qNXcDwqBjxjcLSzxcgOzfFm/w7wcDZNcTR/z1qAEYUveZ5h06lwtb8znjE8zy3A8cgYDGpnXBpyfmEx9ly6g92XbuNZTj583F3wctcWeKFdY9gIhRj//WbNPUUGfLf1JPbP1ixSbIVC1HK0x/OcQkWbunopjAfyi4rhZG9n8PuqDrzRrwOGtmuK3VdvI/FZNtwc7fBim1C1wkMoEKBnswbo2cy8WV+EMo52tugaGohzd+NLG8t6T2SUv955MfA8N9/8BlZBynvEDdm/MmBOfaCzSGnfvj0WLVqENWvWwMZGeTeJRILFixcbPBVzZWXflbvarwL5E5aH9NNUJWoYEOBVy2BxMLJTcyzefrJUMJV9qstuDiM7K5cDD63rjZ+mDkFRiRh5RcVwdbA3e5aMvmTk5CElM1fjNjZCASLjnholUjKy8/D6kq14LKvfwgCkZ+XhZtxTbD8fhcl92yIhPUvrcRLTstSWbC9LLUcHPM8p1DonEQDEJGWgVQM/3d5INST5WQ7+OXUDB67cRW5hMerVroXRPVpSdVIZJRIJElIzwXEc/L1qWf03vGjSi3hh3p/ILSiWek6Y5v6ZIj1chYeSqD6YUx/oNdwzcOBA+Pj4oEePHqhTpw4AICUlBWfOnIFIJMKRI0cMMqKykltQqNxQvhikEKUFuxjAxGXayooJHujRxPBe3/COzfDf+Ug8Sq2YsingOLQM9EXvFqqnwbaztYGdmYdKDIExhr9P3NBhQxgdcPfN+kN4kp6prO1kLrBb8cn4ccdpnY9153EK2gTXVbueMYb45DK1OrSYnpalWaRVZ6ITUvHm0m3ILzNXTWxSOhb+ewKHrt7D8g9e0nnSyupGiUSCvw5fxT8nbyArT3of8nR1xMQ+bTCpX1uLxd48y87Hvst38Cj1OZzt7TCgbSN8P3kwPli2s9SLXH4SzXIwAPmFNLmgSqrRcI+59IHOT6+WLVvi/v37+Pvvv3Hp0iU8fCitaOrj44P58+dj/PjxOk+9XFWwt7VFbkGJoscAlJs7SyxtUMzPIgGYbOZbJm+XSP/uOHcTn72sf+YLIHWz/vXBGMzbchQno2IVNwehgMOL7ULx9ag+Vu9h6cuKvRew/ui10tBtNTc5Mc+jU+P6Bp8nPuUZLt17rHY9zxiSM3J09rtej3miUaQUiyWlNw4dvhKXGpqayfMMn67ai7yiYqXCgvJ/RT58it/3XcTHLxkXP1UVkfA8Plu1F2dvxpU+gxiQkZmPX3acQ/STVHz36otmj2XaejoSP/x3CjxjEHAcGBg2HLuuWF/eqasODjoE3dZQqksKsjn1gV5dbBcXF7zzzjt45513DDpZVaNtiD8OX4lWCnqsACsVJIrnHK+0GhyAgkKxYopqQ3B3dsCS14fh6bNsRD1KhoDjENbAD55WKpFtDM9y8rH2yLXSKd7VPMyFAg51Pd3QtWmgwee6EZukdRsm/58OQ3slWuZWEdmUmWtJ0zFlNxcXLQXKqisX7z5CYob6WXF5xrD9XBTeGdJF6/BadeP4jQc4czOutPNTbv2hK/fRtL4PJvVrazYbTkbEYOG/JxSvFUHt5a5phVDRcK0LBVyNTrXXSDXxpADm0wcm636XlJTg8WP1PdaqyKt92wFQ38nmIPN0arhQyvY2Up4b79r39XDFgLBG6Nc6pEoKFAA4Fv4AvGz2ZPAoHUYrG4TMpPVcfp023CjXts6SUJebBQf4a8nQqjD9gbpjyi4M+0qQWmoNbsU/1fq95hUWIyEt0zIGVSLWHLqiLFDKXUMcgCXbzmDPBcPm4NIGYwy/77tYcWZymRApfz/U1puX8AyjuqkPqiSqP8boA5OJlDt37iAoyLyFlBYtWgSO4/DRRx+Z9TxyQut7Kwq8akNbkCQH4NytOJPYVZb7CWk4eSMG4fefKCZiq+w8z82HgBMoYnk42WRliiwBWVtxgQRnbxr3mbUJrqd1G6XCa+q+bLlw0uIJOxUZW+pJKye6lBZe6kUJrKEBolKBov2XpWkem+rKw6QMpWEelTcXBszdcASZeQUmP3/K81w8SExXTjVmKv+p3KDm6xzRqRnaNFQ/RFrjUXV/0HWpIhijD6pMIMPVq1fxxx9/oGXLlhY/t8bbpOxi0eV6KTJhKfSoh08x/tu/Me7bv/HZyr1488etGDzjT+y7qFvRMWvi4+GqEFSKYTImnclWvnCymgt/H7tulPiq710L3ZsHqX3YCTgOvVtJg5o5dTdbeTwSL50UTxN3HqdAJBSoFihlXnMA3hzUscZW4ezcNEBrZWTvWs4IqFPzhgkkPJNei5qGCznp6hW7z5v8/AXF+gW5clCeSFNObVcnfDKyB2aN71+jawFpgmZB1o7Og71t2rTRuL6gwPSKXk5ubi4mTJiA1atXY/78+WY7jzHo8hNsXN/LJOe6HZ+MN3/cCkm5oYW0rDzMXnsYRcVivNzT8mJOV/qFhWDRvydQWCTWGgqSlpWHxPRs1PeuZfD55k0aiLd+2YYHSemKYlQCjgPPGNqG1MPg9k1x8sZDqXubl8YYAVAaq5OLJgGnWdfbCoXS2CO5cOXKHIZnivfav00jTOprvpiCyk6zAB+0buiHqLinasXKFAtmsVQmOEjrN+ryXL9yL8Hk5/dxd4GdrY1y9WQtcJAlDvDSWb59PVzQp1UI+rRsWGOFeE3CnPpAZ5Fy584djB07Vq3L5unTp7h//77Bhmjivffew+DBg9GvXz+Li5RG9Wrj/hMNRWhYmYcQp/qBK48NbdfI3yQ2Ld16BhIJLw1mK+uTld3Vlmw7gxc7NYFDJY13cLIX4ZOXe+C7zSe0bwxAdYlL3anl7ICNX4zDoWvR2HPpNtKz8+Dn4YqXurZA71bBmP7bzlIxIluUPlZAsT7YT/PwTNdmgfjz4GXFPowBjGcQSsocC4CXoyPEEh62NXg25B/fHIJpv2xH7NMMhWgUyiZ3HN29JTqF1kfMkzTU864F+xqaiqwRhgodFVPgYGeLYZ2bYse5qIoCUlWvgkERVyaQvX6akYNNx8Lxz4kbWPDGIAxoX7UnfjQb1SRw1pz6QGeR0rx5c3Ts2FFt5G5ERARWr15tkBGa+PfffxEeHo6rV6/qtH1RURGKikpn6c3OVp9BoAvzpgzE2AWbpE8bVV0b+cONK32plKYsW9+vTYhRdkh4HsevPcDfR67h9uNU2dNPdm7FuaSKqaCoBCcjYvBixyZGndOcjO7RColpWdhw9LrG7TxdHeFX283o89nZ2mB452YY3rmZUvu9x6m4dPsxOAGksSSyUAmlr1r+pfJARrbmHkHLBr5oHuiDu49TpG57MVOZvr7lRAQu3IrHf/Om1Fih4unqhH++moATETE4dC0aWXmFqO9dC7Xs7XDkSjR2HI8EADja2+KlHi3x9vAuNSLQ2MHWFnlFJWDywFkNQz5NAuqYxYZ3h3XFlXsJSEjPVEoR5yAV3RBwpfe6cgK8LDzP8L/VBxFSrzaCfI0oT11NqS4pyObUBzr7Urt27VphdsOyuLi4oEcP09Y0SEhIwIcffohNmzbB3l63ehILFy6Em5ubYvH3N857cS4yDhCruRKkv1XFv8vWU5Ejj7do39hwO8QSHjNW7MXXf+zH3XjVAkXJJgCpJsgkMjfTR3aHv5eb2skQOQAT+rYxaw2YHWeiIJsupkL6uBKy71ab45rjOPz89jAE+XgAPINA3fcEICE1E9/r6k0yMYwxJD/LQVJ6VsWMJAtiayPEwHaNseTtYfjr0zFwtrHF34evK12/+YUl2Hw0HO/+vF2vIYiqyoB2jcFxWgSKjHeGdjaLDW5O9lj/xVhM6NMGzmXT5BmDQAJAzMDJ7kPaSgwxxrDlRKRZ7CQqB+bUBzrf/X/55RcsXbpU7fqGDRvi5MmTBhmhjuvXryM1NRVt2rSBjY0NbGxscPr0afz666+wsbGBRFKxZsVXX32FrKwsxZKQYPiYrYTnseX4DQiYLPtEzKSDxTwDShgEYgYmjzNQFShZJpisWEt9DU1sPHQNpyNiAcjqFah58Mlf8zyDk0Plr78hEHBY+t4I1HK2VxIq8jHsfm0bYaIZa0EAwKPkZ7LvSvqhKoSKRPmvXHw2DdTec63t5oRNX09Ak7pepcdUw4GLd6UeMAvBGMOOUzfx0pd/YehnqzH8izUY/OkqrN1/BWIjrlFTcDc+Bf8ev6FyHc8YomKTsOtslIWtsjwT+7WBjTwWR8NwwNDOTc3qnXB1ssfHL/fA8R/fxtHv38JrL7SXBsgCinsiJy435KwCBuB8VJzZ7KzSaMrc0XUxEFNmy5pTH1TqKkl9+/ZFVJTyTenVV19FaGgoZsyYAaGwopvczs4OdnammbAtPTMPGdnSibHkHpHypfGFHAcJSuMWmOyvHPkDKsjHsJuJWMLjn2PhivuAPP5FgwdYul9JxQcOzzOcu/kQO0/dxKOnz+HqbI8XOoViSLdmcHawziR3QT4e2DZ7Cnadv4WDV+4hp6AIQT4eGNWjJXpaIOjOxdFeETAr/5DlQoUr62DggBYhvqin40zWtkIhMrK0T6pWVCJGYbHYYvFDS/49jX+Ohiu1PcvOx8od5xAVk4QfPhhmtWDVnWejFDEpqmAAtp2MxCt9wixrmIVp4OeJX94fgc9+34uCIlmmTZkfPQdgysB2mD6yu0XssRUK4enqhPeGd8WWozcUNpWtAaWNqlIewdJYa7jHmtmy+qK3SLl586bKdo7jYG9vj/r165tMJLi4uKB5c+WJ85ycnODp6Vmh3RwIdRhm4MDBu5YTUmUT5VXwbnBAHXcXdGxiWGn35GfZeJat/LDT9tgWcBxSnuUotYklPP63cj9OXH9Q+iBIBe7EJWPT4ev448sxJon9MIRazg6YOrA9pg60/ASVA9o3wsnwB9IXPKTBz2X0XWm8D3AvNgVRsUlo0VC3CQF1FViWmtIgKjapgkCRwxhwNvIhjlyOxqDO1ollepT8TGtacmJaloWssS6dmwbgyPdv4eCVezgfFY+UzBzUcnJAt5ZBGNWjBUQ2lu9floglpaJJT9oZMdxNmBZzZsuaQx/ofaW3bt1aY867ra0tXnnlFfzxxx86x5FUVjxdHdHAzxNxTzPUejQlPI/3R3bFkq1nkJVXWFo+GtKHlFAgwLevvWCwR0BdvIYmOA4VhnvW7b+ieBiXfRAwBqQ9z8Xnv+3B33Mm1rh6Br3DghFQxx2P5ZMCqgkC5CAVel/8thd7f3wDNjoEu7YP9cf+i3c1buPu4mCxwNkdp25q9FQIOA7bTkRYTaS4OdkrsnzUURWGMU2Fk70Io3q0xKge0t7u7dinOHo5Gr/9exZNg+qgT/tGsLPglAG2NkLYi2xQaEC9p3H9qrf3y2CskN1jzmxZc+gDvbtwO3fuREhICFatWoWIiAhERERg1apVaNy4MTZv3ow1a9bgxIkT+Oabb/Q9tE6cOnVK49iXKeE4DlMHtVcrUIQCDg38PDGoYxP8/c0EDO3SVPHA4Tige4sGWPflWLRppL3qqTp8PFzh61luYiYtF7aEZ+jbtpHidYlYgn+PhmsQWgz3H6fhZoz2eW7MQWFRCXacvIlX527GkI9X4bV5/2D36SiTFr9Th62NED++N0z6QkOQq5z0rDyciXio07E/GNVdq9dr6qAOOh3LFDxMzNDoqeAZQ9zTZxazpzwDOoRqFChCAYdBnSpvxpq5SErLwrBPVuPVef9g8+FwbDl6A7NXHcLAD1biopEVmfWB4ziEhdRTOZytibeHdzZbFlKVx0QxKdnZ2UpL2QzXssizZRcuXGiWt2MOfaC3DF+wYAF++eUXDBw4UNHWokUL1KtXDzNnzsSVK1fg5OSETz/9FD/++KO+h690pD/LlfauhSgdF5b9tRUK8fP7wyAQcPDxcMGsKQPwxbg+eJ6TDxdHO5PEeQgEHCYObIsfNqsIOlIRnCLgOPRuE4wGfqUxMI+ePkNWbqHG8wgFHK7fe4JWIZYtX52ZW4B3Fm5F7JPSQmtpz3NxK/Yptp+IxIoZo+HsaN54mQZ+nmgV7CcVaVp6JjZCAe7EJaNPO+0p5Z6uTvh8fG98r+q7AzCgQ2NMGGC5gm5OjnaKz1gdjlac8LBX64YIrlcbcUkVxZRAwMHBzhbj+mkuGlXdyMzJxytfrVeZ1ZRfWIJPluzC2tnjESoL6M7MKcDeM7dw8WY8JBIeLUP8MLJPS/h5aR/KffT0GTYfuo7jl++jsFiMQD8PjO7XGoO7N4ONUACeZ4h5lCbduPy9h5en+ZQ2ero6Ysb4Pujb1rjyC9UZU8WklM9inT17NubMmaPUJs+WPXr0qNlGOcyhD/T2pERFRSEgIKBCe0BAgCLItXXr1nj69Km+h650PEp+juX/nYOAB7gSSGMW5HPLiIGifDGu3FbOHrIX2cDX09Wkgaije7fGyB7SCbpUlXcXCgWK9l5hwZj72gtK63X9DVgyy0TOgjVHEJ+UITs/lP7ef5yGxRuOW8SON4Z20qlmHGMMNjbafzaHL9zFhP9twE/rToIrBkQCAUQ2Qjja2SI0wBvLPnoJ37012ASW606/do00vkeBgMPAjqGWM6gcNjZCrPhkFFrKYn7kw6WANK7r98/HVPQqVnPmrT6sMe1awjOs2X0JABB5PxEjP12D5f+dw/W7CYi4n4i/D17Dy5//hQPnNU+Xce3OY0z8ZiP2nIpCTl4RSkokePA4Dd+tOYrPl+yCWCxBeHQCMjLzlGK2wKQxXMISQFAECIoYhCUMwiKGei4uCLNwp6emkpCQoJTV+tVXX1XYxpBsWX0xhz7Q25MSGhqKRYsWYdWqVRCJpL2ukpISLFq0CKGh0htcYmIi6tSp+u693aduQiAbw1fMT1EGjgO2HruBl3qbN0JaIODw9eR+eKFTKHacuomHSRlwdrRDr7Bg2AgFSH6WDUd7Efq2baTkQZET6OsBVyc7ZOeVcwHKVTyT3uxaN7LsDeVpejbOhMeqFVE8z3D0cjQ+HNsTtWuZd8bnzs0DMevVAfj2ryMat5PwDF1aaJ4oa82uS1i144KiUykAICnkwXEcmof64ZfPX7JKAbdBnZtg3f4rSH2eU9FTwUk9FaP7tra4XWXxcHXE6hmv4G58Ci7ejodYwqNpYB10bh4IoUAAxhguRcVj+7FIRD9Khb3IFn07NMJLfVvC28PFqrabmryCImmdJi2cuRGLjMxcfPTjThQWlSh1NuSF2L5ddRhBvh5o0sCnwv6FxSX48te9KC6RKA8ly/5euBmPzYeuw9PdGYByATegNNBcXm1Wvu7Ow2R8sGgrfvniZTg72NWIQnx6Y6KYFFdXV7i6ahbwhmTL6os59IHeImX58uUYNmwY6tWrp0hfioqKgkQiwb59+wAADx8+xLvvvqvvoSsdsU80j+EzBsQnWWYMn+M4tG3sj7YGRMnb2ggxpm8Y1uy9JO1Jy3o/5Suh/rLxNOa/Pxj1fS0zqVvkg0Stv0+eZ7gV+xS92gab3Z5h3Zsjr7AYP28+pXK9UMChSWAdtGjoq/YY8UnPsGrHBQAVh1UYYwi/m4Bdp6Iwul9rE1mtOw52tlj5xWh8/MsuxCVlQCgUKAKCPd0c8dP0EfCpJA/6JoF10KRcTRrGGL5fdxw7TigHAK/fdwVbjoTj1xkvo0WwbplXuiLheTx8koGiYjHq+7rD1clyyQCHL6kvjlUWxoBdp26hoKhYraeM44B/D4dj7jsvVlh37PJ95OQVqYw1YQDAA+v2XMG8d1+ssF5ttVkmtSvmcQaGvL8KHAd0C2uIqcM7oJmG309Ng2OyonhG7K8rlsiWNYc+0FukdOnSBXFxcdi0aZOiFv/o0aMxfvx4uLhIb3CTJk3S97CVEgd7W63ZBpaMrjeG14d2RPTjVJy98VBaMZJVvLHEJqRh2rx/sfG7Sagt6zWZE06nsDvdJlozFWP7hSEjMw/rD1xVPAjl10CAjwd+mD5cY/T6rpOaM2gYgG3HIqwiUgCgrpcb/p03GVfvPsaVO48g4RlaBvuhR6sGOmUsWZN9Z29jxwlpimPZz5fnGQqLxPj0p13Y88ubJpnnhzGGncdvYt3uS0h9Ji0vYGsjwIAuTTB9fE+4uTgYfQ5tnL8Rq9N29iIbXL/7WONQnoRnuHAzXuW641fuqw2Glf87L78Y9bzc4OZsXxrfpi7QvIwh8t84Y8CFiIe4EBmHHz4Zji6tNHsjiaqJOfSBQU9YFxcXvP3224bsWqXo1TYYJ64+ULteKODQt30jtesrEzY2QvzwwTD8sf0CNuy+onIbCc+QlVeILYdv4L2x5i8U1bpxXa0iUCgUmLx3rAmO4/D+6O4Y2CkUu05HIe7pM7g42qF/h8boFdZQ64M8/qn2Wh8J8nRnKyEQcOjYLAAdm1UcO67MbD5wXW3gL88YsnILcezSfQzp0aziBnqyatsFrN11SamtRMzj4Lk7iLqfhDXzxsPFzF6V3PziUvGgQai/2LUp4hIztB5PXUG1W/dLs/oUpyl3DXMAft54Eh+M6YH5ZYZElcxSBJXJS/orGy3hGTiOYfaKA9j327Qq08EzK1ZIQS7LqVOnjDuACkytDwyqIhUbG4sPPvgA/fr1Q79+/fDhhx8iNlY31V+V6NMuBPW8a6kMVuU4QCAQYPwLlsvOKItYLMGxi/fwyaLtmPLlRsz4aRfOhccqTQZWHqFAgOS0bJXvRw7PM+w/c9scJlegjocLercLUVtDRsBxGNS5CTxcHS1iDyDtQTPGEOLvhc8n9sGKz0dh8XtD0a99I508DY72Iq21bWhGX/3JKyjGw0T19YoAaachIvqJ0ed6+CS9gkCRw/MMT1IzsWn/NaPPo406ni7SucHUXU4yMfDBKz3QMthPYy0moYBTKfaTUrOUY9UYA+QxeGUWALh68xHcHOzw9av9pRl3ZecDkU/XoUaglD18Tl4RTl1T3/mrScize4xZKhum1gd6i5TDhw+jadOmuHLlClq2bImWLVvi0qVLaNasGY4ePWqwIZURka0NVnw5Cv4+0hgNoVCgqA7qaC/Czx+PQMN6tS1uV05eIabN+Rczf92Py1GPcP9RKs6HP8TnP+zCZ9/vQLGGbIDn2flae/pZeZrTlU3J16/2Q6P6sjlu5IGmsn80a+iDzyb1togdFyPi8MH8/9Bt4hJ0m7AE0+b8i1MavGjq6NM+RLVniEkH6YUAelogvqa6oduQH2eSYoRzVhzQuJ7nGXYejzR7NtzQHs0VMWQqe9wcMHVIezg5iDCyj+bgfQnP8MqAigXVcguK5IdSmjCwPPLKCzN/24euLYNwcOk0fPv2IOVhIiZLLtDyHdgIBXj4RLvnh6h6mEMf6O1v+/LLL/Hxxx9j0aJFFdpnzJiB/v37G2RIZcXH0xX/LpiCy7ficf5mHErEPJoE1sHAzqEWm2+lPAtXHcG9uBQApdH7cuFx6eYjrPjnLD6arPrh7lvbVWPMBAB4WyAeRY69nS1aBvggNjYNJeABTuq6D6nriblvvmCRuh3rd13G71vOQSDgFJ/nrQdJ+OrnREwa1gHvjtN96KtX22AE+nogIeV56WcsYRCI5Td/hmOn7kAgZnhnfHeLxP5UBxztRQip74XYhLTyIxEKJDyPtk2MK7+ekZmHB4/SNE+QBSArtxBFxWKzZqy0a+qPHm0a4uyN2NL3LPsr4ID6Pu6YNERaDNDPyw2z3hyIeasOg+NK7wfy3/qUoR1UxoEkpmSCYwyM45R75QwVZgTnOEAiYdh9/CbeGNUFDra2pRvrMWzBGKNMHzlWHu4xNebQB3p7Uu7evYvXX3+9Qvtrr72GO3c05+JXVQQCDp1bBuGziX3w1dR+GNGrhdUEytO0LJy88kDtsA5jDDuP3URuvuqKg0N7NtcoUAQcp7VXBgBFxSW4HBmPXcduYvGqo5g6YyOmfrERv204hSfJmTq9F8YYZv+yHzuPRIKV8LApAWyKAZsS4PHjZ3h/7n94nq19kj5juBubjN+3nAMApc9U/u+Ne67g+u3HOh/PxkaIZV+OQrDMOyTkAWE5x5aEZzh05g5e/3oTMjLzjHwHNYeJL7arKFBk3gyBgIOHmyP6dDCucNjFiDid6uXYCAUQ2Zo3poLjOHz3/hCMHdAGdrZCxdCLkOPQu20I/vjfK0r1mAZ1bYq/5oxH/06hcHWyh5ODCO2bBWDJpyPx7uhuKs+xZttFyGcBVwztlBMocq3GMYAXM4Tflf4enmXlV/TyyI6l6UOU8Aw92zbU/wOphlS34R5z6AO9f2VeXl6IiIhASIjyzSAiIgLe3t4GGUHoTvidBK3bFJeIcTvmKTq2DKywrnmwLwZ1a4JD5+5WEOFCAQd/H3e83K+V2mPzPMP6HZewae815BcUV1gf8zgN/x0Ix+zpL6JfF82FwW5GJ+LUFdmQSjljJBKG9Mw8/HcgHNPGqr7BmoLtRyM0epaEAg5bD99A22a6TxDp5e6M9XMn4Mz1GHz1wx4AFTvlDEDas1z88e85fP32wArHICoysEso7j9OxaZ91yDkASaRDUNwDHYOQvzw4XCjhUNhcYk0OFfTRgxo08Tf7DN0A9LyAR9N6IU3RnbGzQdJkPA8Ggd4q60J0ySoDua+PUinY4vFEsQ+TpcO8cjDrWQCpWy4SWmcifRv3GNp2YUG9WpLP395LIqs0CVjAGzVx5l1aR2EBlYYJq+UVDNPijn0gd6elDfffBNvvfUWFi9ejLNnz+Ls2bNYtGgRpk2bhjfffNMgIwjd0RZPIkedp4XjOHzz1kC8/lJnpcnahAIO/To1xh8zX4GThjL0P689jtX/XVApUOTnlfAMc349gHgt484HTt2W3uhlNzdF4J3sLy9h2HsiSuMxjOV2zNOKn6n8Ri1m4It5XLz6EEfO3oVYovt08xzH4dxV7cFih87cQaGBM8vWNDiOQ7eWDWDHBOB45R5+SYEYv204haJi4z7Lhv5eynEg5ZENA00d3tGo8+gKzzNciYzH7qORSHzyHEG+niYrWifhmeL3xsk/NlZGoJT7DOS/y6ysAmTnFqJZsA+cHe1k8Syl2wqY9Lcjj8NSLAAaB3pj7rsVa7UQ1QNz6AO9ux0zZ86Ei4sLfvrpJ0XpXT8/P8yZMwfTp083yIjqQF5+EY6eu4f4JxlwsLdFr06N0LiB6avutmykPR1XKBQgVMO5hQIB3nipMyYOaYe7D1NQIpYg2N8LHm6as2jin2Rgx+FInezkAGw7dAOfvdFP7Tbpz/PAi5li+wow4HmWeYd7KvS8GcBJWGkNCI6DWCzB3F8PYP/JW/jhq5E699av3dI+TCSW8HiWlQ8/bzd9Ta9xFJeI8fVPeyCRMBWF8oDb959i3Y7LRnneWofWRX0fdzxJeV4hDkQ+HtK6cV20aWpc7Isu3I1Jxsyf9+JpahYEAg6MAUvXnkDvTo3w9XsvwNHIGaHtRDZKXhJVQbrqfpcHTt/G2MFt8fGkXvj2j8NSoVNmE04+hYgAYJy8jWHS4HY1aiZrbZhq7p7Kgjn0gd6eFI7j8PHHH+PJkyeKeQKePHmCDz/80CSR9VWRY+fvYegbK/HjqqPYeTgCm3ZfxWtfbMQn87chT01siKEE1vVEm6b11KYRCwQc+ncJhbsOabv2IluEhdZDh+YBWgUKAOw/dVtj+nJZJDzD5ch4jdvYyiqeqssmkG5j3gJjPdo2LE0ZLiNQOK5spoj077Wox1j173mdj62rh4Ru2rpx6vIDZOcWqs2q4RnDjsMRKBEbPgcJx3GY9/5g2ItsYSNQHvcRAKjt5oi575nfE5Dw9Dk+mLMFKenZAKQeFfn7Pn3lAb76fpdJsosE8rQdAJDI1IkGgSJvC5cJ8ME9muPTKX1UHls+lYhAIl04BmTnmvZ+WOUpLwwNWSoR5tAHBtVJkePi4qKoIldTuX7rMeYs3YfiYjEYpD1jiWxY4OrNR/jmpz0mP+fs915EHU9XpS9d/rBv6F8bn0wxT9pu2rMcvX4Tmmq2AFIvhqYtOABiMY+SEuMnvlLH8L4tYWdnIxUqEgZOSxrrtgM3UFSsPsW7LPXqaJ9ewNHe1iLVS6sKicmZWL7+FKZ+sh5TP1mP39aexJOnzwEA0Q9TIBRqvmXl5BUhNSPHKBtCG9TB2gUT0b9LE6mQ5hnsBUL0aN0Qq+aMRx0LTHK4adcVFBeLVf6GeJ7hWtRjRN41viaMInuOMamQkI1oanucpKSXfsajB4QhwKeWTufz9apZE0TWZEylD3TyW4eFhemsgsLDw40yqKqxbutFcGqqpkrHkx/hbsxTNAk23XwV3h4uWLdwInafiMK+U7fwPDsf3h4uGNG3JQb3bGa29D53NyfZdaBdqggFHNo00+wSFwi0F8ZnjKGgsBi2tuZ5kNd2d8bSr17Gp4t3IK+4CDI3itrtS8QSxCWkI7RhxYnayjPqhTDcXqZ5ts+hfVroa3K15cSFaMz9eZ80JEj2cH74OB3b9odj1seDIRQKFB0ATYhsjfe+Bfh54I2XOiMjJRvhUQkQF4tx7mIMwiMeY/zw9pg8qpPZAmcZYzhy9m5prFT5HjMHCIQcjpy9i9ZGDjvZi2yRl1ekiCnheIAJZIE3auBQcToQTzcnPH6aqfV8YU3rGWVvdaSyDdnoi7n1gU4iZcSIEXofuCaQk1eI8Nuas22EQgFOXrxvUpECAC5O9pg4tD0mDm1v0P5FRSU4cOIW9hy9ibT0HLi7OeHFvs0xtH9LODupDpwd1LMptuy/rtPxJTzDqBcqFo+SzrNSgtT0HJy/GisdCNdwgTvY28JRQyCvKWjZqC42fT8VI9/6Q3sXEkBOrm7F7vp0boR/919DdFyqyvXeHs546xXzZS5ZCsYYbkUn4fTF+ygsFCOgngcG9moKVz08RI+TnmHuz/ukwxpl2uViZd6S/Xh5SMXrSdkQ6fViitozaRk5ePurzcjOKVBqzy8oxp//nsezrDx88qb6eCtjKBFLSr11cs9G2Q+FST/zR0YWRGOMoaS4RCkuRdouO4mG32WTcjFvAXU9EXFP84Shrk52Zk/brnKUCSo2eH8rY259oNMVM3v2bLMaUVUpLNQec8ABKNBhO0uSk1eIj2b9h/sPUxVzoWTlFGLlhtPYdSgCy78bh9oeFW/0jQK9MaBbKI6ev6f2tyEviPbp632VAoefZ+Zh884r2Hv0pnROEnkvVIP3XijgMKR3c0WVX3OiOIe2HgFjaFhft/RJWxshfps1BotXHcGJi/eVbuBdwoLwzbsvwMFed6+XWMLjcngc4hPS4WBvi67tg1HHyu7znNxCfL1oFyJuP1EMxfA8j5Ubz+CLdwfghV66zaOz42AEAM0+usvh8dJ/lBe2ZS7GwoJiiMU8bI30pmzccRnZOQVqs+l2HIzAy4PCEFDP06jzqEJkawNHe1vk55eUihMVOexRd5OQnJYNHwOvgYznecjJKVJUk5U7STkGQKj5d1A+MH9In+bYdexmqXFld2fS3OWJww3rUBGVG3PrA5K1RlDL1RGODiK16biAtApmQD0PC1qlnV/+PIGY+DQAykKcMSAlLRvfLt2PX+a9onLfb959AW4uDth5NBJicanrXSgUwMXRDh1bB2L0oDA0LeM5Sn+Wi2lf/I20jByw8t56uWdZhUfFw90Jk1+yTKqnq7O9zK2uSOupuBFjsLERwEOPnrqzox2+/WgoPpiUg4i7T8AY0KKxn97ZPDduJWDez/uQ/ixXlunBsHT1cbzQuzk+fbu/VSZrY4zh60W7cfNuIgAoDcWUlEiw4JeDqO3ujHatArQe68qNOI3p9RKeIS0jB0IGKCKUeF6ailwmHZkBuHwjDt06GD71gETC48CJ2xrtEQo4HDx1G29P7GHwedTB8wxFhWL1AkXWxvMMOw7ewLuTexp0HgnPKwsUJSOYtCNR9ncp+7eAAclp2UqbNw3xxfB+LbDnyE1pAK5AdlDGwHFAUP3aeGmgFk9YDaS6ZfeYAxIpRmBrK8Swfi3w3/5wtUGitjZCDOzR1MKWqed5Zh6Onbmr1l4JzxAelYD4hAwE+lfsJdrYCPHWK13ROMALtx8kw9nJDva2Noh/lI7iEjHqebjC081JaZ+lq44hLT1Heo+DLCVRfvNjkN4QlXpe0gyDH2aMgEct5WOZC6EsQJIBpTdnQHGjld+o6xmYKuzt6YIB3ZoYtO/9hyn4dO5WSGSisOx3d+jkbRQVlWDu58MMOrYx3I5+iggNw50CAYf1Wy/qJFJ0udfa2AiBIpl3gfEqgzw5AF99txP/+3AQXujdXIejVqSgsERrZhbPGNIycg06vjYuXo8FL8+00eLZO3z6jsEipba7MxzsbaWe3jJhKIoCbWV/l/Lfg4Qp0qHLE+TrAYFEtoIH5N8qBwaIda8xVKMwNkOnBogU8/vRqzlTR3VGfT/3CkF08tdfTBtg9ind9SE6NkWngnC3opMqtPE8w59/n8OIySuwaMkh7N0XgX/+u4y1m8/j5LlonL8Siw3/XcSYN1dh3xGp6zf9WS7OXHxQWoOhHNI0RQauhIEr5qVLCQPHM7i7WUagANLUOTcXe1lhuXLuJQDgeWkPUWL5u8L6/y5CIuFVBmczxnDifDRiZZ4xS3Lm8gON2TY8zxBx+4lOMTxhzfw1hgMJOA6d2wTBxkYo7aRrSJMFgO+XH0FWdoGatZopH4eiCsYD9nbm6eMdO3tPOtmfDgFSugw5q0MoFKBFk7qlDWUuL3mBNo6H9Jov47GS8AytywXApmXkYPnaUyrPwwA8TnyGf3ZdMdhWouZCIsVIXJzssXL+eIx+sY3SZHjNG/nh529GYZCOY/K6kJtXhH93XMHEt9dg4KglGDZhGT6fvRW3ZO52XRDoGN+hKnPhtz9PYMOWiygqkgX1le/CQj5iwvD98sMIv/kY8QkZKB+HJw3Sk73gGThZ6qNAtnA8IBADt+9VFErmpLBILL05S2QVMyVMZp/URgEDklKyLGxTCc5djtGYzi0UCnD07F0LWiWlsLBElzhjnerF1HZ30lj3g2cMg3s3x8zp0hol5YuHlUcskeDQqds6WKcMYwwz5u/QOv8MuIoZLqbiwcOUUsGgSRMzwLu2cSmeoweVG4JR8aGWrWUkFHAIrOeJsObKWUUHjt/S+IXwPMPOgxFmnzm6qqEYrjRiqe4Y9Ss7f/482rVrBzs782ZfVHZcne0xfWpvvD2hO55l5sHezha1dCimpg8Zz3Lx/ox/kFRm8r7CIjGuhMfjSng82rYOwPyvRsDRUXNhsKYhvhDZClGspfZI+ZtQUnImtu8rlz6m5Qm1ecdlDHuhdcVxU3nsh7ynxqQuYXlCsnScnGH293uw+fc34KdjDQZjEYslUgt4prBLYbJQahhvYU9Kbl6RSg9KebIN9BoYQ1B9T0h4zXdJZyc7uOtQKPDYqbvgGMAYLxWJMs8b46SfPcdxuHP/KSaO6oTklCysXH9a4/EEAgHiE/TPfrl1LwnxjzNKu2+qss8YA8dxEOgk0aTCJzunEEKhQG3mnJzDJ2/j0eNnpWMumtKcOWDM0HY62aCKu/efYu7ivdJhTg6lw6/qTscB7rWcsOirERVSThOSnmk9X1Z2AfILijVOu1HjqMbDPabSB0Z5UgYNGoTERN178dUdka0NfLzcTC5QAGDh0oNITslUbmTSnj54huvh8fh89latx3F2ssOwAa3U5rULBBx6dAqBb7nYi6On7oDjyugSHcqlXI2Ih4uzSLkrBlkPQPEgYlLXtgohwyQMS/84pvU9mQp7O1uFZ0eeoKCoOSuRLk5Olq0O6+bioHVYgTFmMSFXlv49mkJka6P2US0QcBg+oJU0lkQD6c9y8OTpc3A8g6BEdn3IP38mnUWaEzPcvPMEd6KT8Of6MzrZZ8hM5Wcu3QcApblolJALRsZUZsCVRSzh8d/Oqxjz6h8YNu43DB7zC6Z9vAFnzt9Xu/3v66TiS/7eVXpUyrQN7WdYnR2JhMeshbtRUFAMroSVznpcZq4dDkBgPU/U8XJBcKAX3pnUExuWTkU939IihVIBVgChQKC1VoZAwFklwLsyU91mQS6LqfSBUVcMue4sw5Ok57h6I760Qf5QL/fx37qdiK/n7cC8/43QmLb79uQeeJz0DFduxCtShuV/GzWogy/frzgrb0ZmnnSqdvn5dSjewxgQG5euFJQnRyD3psvd9uWOx3HSDJYr1+NQUiIxOqVUF3p2CsGhI7ek5y9ri+wvY0DjQNPPx6QJW1shXuzbArsPRWiMJXqht+mGFXXF2ckOX77/AuYt2QcBxykNSQkEHIL8a2PSKO3ZWes2n5eJbelrVZ89x4C4+HSsXHtaeRRGzWUokfDo2bmRXu8HANLSckozXhR6RPlzlzsd+vdUHwgtkfD4et52XL4Wp9R+734yZn63C29O6YGJYzoprYu68wQZz/NKz8OknwmTq2WFGRzAM9gaUUzu6o14pKZlK35/QjEDkzAwAafw4gjBYdWiCWq9s8dP38XmrZcR8zBV6vFSM/MxIB0m6tYxRKtgJaoPptIHJGurABViTjS4CM9fisGf68/g7dd6qT2encgG3//vJVwKj8P+Y1F4mpoFT3cnDOrTHD07qb6ReHm4SLUJY9I0Ym0+OAa4/7+9646Pomj/39lL76El9N67dJEmKCL2rti7YsHeXhUrqLwqoiivBVSqqCAiVUB67yWE3gkQQnpyZXd+f+zM7my7OwJI4LffD0fudmen7cw8zzxtUuKwc/cxvc6WWA806O5LZVSAFWv2oFuXho7pzhYqpyboVbQz8iXAieNnFnK9LLj31s5YvHIXck4V2jIqj97dLeSu/lyhT7cmqJgahx8nr8DaTep5LokJMbi+b2vcc3OnkIfgeX0BzJq3Vetvp9FAoaq0jp8o0NJRidr6zxICtGhcDa2aVbfkEwq1uUcbH68O/Hi3Tg1RMYgr+tS/1lsYFBHf/rgIl3VuiDq11PLWbdiPr75foNYf0DxrzOpHtbmqeqZdmzqn3T6Oxct3WsY4oVDPrmKgUJC5OwttW9ayPD9m/FKMHrtUn79Ur7Pd+yCE4J6b/51wAhcULoJgbucaZ8SkjBo1Cmlp/+7OsryDUooNmw5gyp/rsWNnFmKiI9D9ssa4rn8bVKpYNiM3gxGrnWrEhN/+WIsBt3VGYoKzV5HHI6Frh/ro2qF+WHW4slczfPfzYr1o0YXYgbLc1P8SHD+eb1jw9XPgw9wFUorMnVn/CpNy6PApVia0HaZYdQA4eCgHgYB8WjvCgKxgzvwtGDdhOQoLvUhJicNjD/XEpZ0asHJzsC3jCCSPhDatalrGScXUBIz6eAC+/GEB/lm+Q5NYpFVOwgN3XIr+vc9vaP22LWqhbYtaKCr2otQbQHJSbFgB+HLzijHulxXw+0KfzUQAlJb4NRsNQikQAGgEjAs1IYAMDLihY5kONLu+XxuMnrBMd8O1MNbqpRceCx5t9qeJy4MXRCk+HTEbfXo2Q3ZOIX4av0zNOEIg+gSqy6/QPUT4W72yUSV7OlixendY6XbssjIpu/eewOixS1kzqF4v/j4YU+KRCAKygoS4aLz9wrVo3CD0URL/33Axx0k5W/zBGTEpd9111xlX4GICpRRff7cAv/y22nDOyIGJy/HrlDX45IPb0LwMu7vTDSXt88tYvW4fLu/e5LTLckJa5SR0v7QhFi1R9emqNMWGUaHqf5UqJOLuWzphxZo9+HPOJmuacOkHIf+KqgcA9h84qevmefHiXwpAUo0yw0VefjHufvBbgxtuXn4JXn/7N6RVTkSNGhWwdv1+vTxC0LtnUzz/9JWG4wAqV0zEOy9dh1N5xTh89BRioiNRr3blc3J+zL792Vi6fCe8Xj/q1K6Mbl0bhfUOFJkiP68YUCgqVgwu2TlyNBfPvDgO2TmqeoNIp2kDqEB1XVcIqARVskfVa6DAx5/Nwm/j6p22euHQoVOIifSg1B9QDbltNrp9ezUPGtDP6wsgN6/Y/iZT4RAAmzYfxKbNepwZRZSQKgBk1aAcAMynXFFQTJ+xEQ/f2x2JiacX4uBUbhGyswvDmoN24ROmzdgAj4dANhmREwAkoH6pUCkOV17eHPVqV0LPSxu7tij/D3G2+AN35JxFzP8nA7/8thqAMfomP6/m1bd/xS8/P4HYGGcROKUUx47nw+cNIC0tCSAEnw6fZQ14FgLeMNw+TxdvvXQtrln9hRqbgS+onHpTQe5AgS8/ugMej4TO7eupIb75Myw5QNmjXM7v0DhK0at747PeFjPyC0qw/0C29tupqwklKC7xhfTS4HjoidGOcUKOnSjAsRNG9RGlFPMXZiDrWB4+/+Qui0QiNTkuLG+ZsqCkxIcPPvoTS5fvUg9/JASyrCApKRZvvnot2rera/vc4SOn8P2YRVi0OFNTR7VuVRMP3dcdLVvYHyj3zod/4NSpInUnTlQbCxKC4WraKB0ZO4+pMWsUaJISosDCXObll2DJ8l3o2S38sbNz1zG8+NpEeP2yKtGQoKskWT09hODuEHY2OaeKHNWb5nqKIACoDMAD6PMDthIhAgJZoZj192bceuPphZs/levAQNmgYmoCxvy8BMtX7kIgoKBFs+rYtjNLZVC4FEVsEwEooSjO9+KJ+3qcVr2CIftkAfbuzUZklAfNmlRD1MXC9ARR3Yf9/EWOi+RNn1ucOJGPhYszUVBYiqrpKejRrTFibXTtk35bpRl8mqEoFAUFpZi3IAPX9GttW878fzLw87hl2LdfJZaxMZFo0aIG8gtK1cUtMriLoIi6tcM7X+Z0EBnhwe03dcCP45cxXTlAFcrsUzQrQyTFRyOtkiqK9ngkvDqoH94aOk29r1AmoqRqfHMJ1vDbAmrVqIBa1c/++ShmLFuxG4oSmg+klGLJsp246orQ0UwzMo8guwxRSRWFYsu2w1i0JBN+n4zlK3fB75PRoEEVXNOvNSqfg/N6KKV4+70pmlRHEbb1BQWleO2tX/HV5/egUUOjyP7Q4Rw8+ezPKC7yGuxlNm85hOdeGo8P370FHTvUMzyzPfMoMndmmSqAkAbZ9etUQcb2LE2dEAqbtx46LSZlzNgl8HM39IAqh6ceohPjgAIQgl9+W4WXBvVzzEc9j8nGXiaE3Q3AbL5kEpRBEbFk+c7TZlIqpMZrgZSDVSYlMQaD35sKnz+gqRj3H8iGn/cHU1XwSNKA/grP1nFbJ08WYvhXc7Fk6U5tXU1IiMbtt3bCXbefu5Oo/y1czOqeswU3mFsQyLKC4V/Oxe13f4ORoxZg/IQV+GjYDNx8x5eY8/cWQ1qfL4Adu44FtWiWJIJNW+zDiP/y6yq89+E0w26+pNSPVWv3Ago7CsNPQWQluLEVpahdsyIaNzw3+t8b+reFRzh8jACGwEIeQnB9/7aGSKQ9uzbG+69fj8oVEwDCBNgsOJq6C7ZpC6WI8EgY/Or156QdZhQWlYYlqCKEOIvyBezefQyvvvlrmetDCPDRJzMw9JO/sHjJDixbsQtjxy/HHfd8g5mzN4XO4DSxLeMIVq/dZxs0jlIKqlCMnWC1s/jy63koMjEogMrkKJRi6H9nGKSKgGoIbqC9zN1Vi/ZrG/GX4mhWrp4uFChFUZE3jIQqCou8WLZyly7Yg0oApADVPoSqTPmceVv1U4ptkJIchySuJjG0JYyKEBJ+GwGcOhW+VIQjJTkOnTvU1w4UtHP/B6UoLfLD6wsYxoQsU801mrD3RYQMCNSQAqVFPpzKLcKZIC+/BE8NGotly3Ya1tXCQi++H70Iw7+cc0b5u7gw4DIpQTBy1Hz88ec6dZGmFAG22JaU+DHk47+wdPnOs1LO8eP5GPXtPwBseA9NQKFOfgKii1fNidnWqNMldcpkNBgOKqTG4+lHewOw7vIkiaB2zYq400Yc3r1LI0z+4XGMGHIHenVrooc1FxkVhQKyon4CCt577QbUr1P5rNa/tNSPw0dO4dQp4wJavVqqwxNGUEqRViW4JCMj4wgGPvMz8nLLGGCNqmJ/n9cPUAqFMaaKrECRFXw8bAY2bnI+M6csWLAwI2iIe1mhWLp8J3wCcT5xIh8rV+9xjIZLKXDqVBFWrt5juC7ufsWdoM6oQGdWKABGGLnaRTVqDcKoAwAhaN2ypvN9EwoKSpyzoyzqcED9+EsDOHr0lGNesqygpMhnnKfM3z7krKQiwUfwNlKK5ORY4SfF1q2HMWrUAgwfPgd/TFvnyKg9en93REdF6MwiNf5t3awm/P6A/aaLzVkqhkIQ3xdj5qbP2BiqtUHxy6+rcPxEvqPr/bTpG7B7z/EzKuO8Q4hLU+bPRQ6XSXFA9skCTJ22znEMEAJ8P3qRNolzcgrhkYKrYxSF2i6cM2dvCi4DpsbFjUsvtMWBpQFVNUKRYRoLKgrFiRP5OHYsz7LbDYYbr70E7//nRjSopzMQsTGRuOnaSzDik7sc7TUkiaB1i5q4vFtjY3sokxJ5FUheCo+XwuMHhn44DVOmrg0aEj5c5OYW4/Phs3HjTcNxzz2jcPMtI/DMMz9j7dp9AIAO7eqiQmros4Li46JxaWfnE3YppRj6yXR1p30GCwgxESvz+x8fynskBCilOHjgJHbsyEJhYSkjZsHrqyjUcFbM4aO5IcuRJIJDh43RSNu1reM8r6AzrmJQNwBo0bSaIV0wOyaPh6BPr/AP9kxJiUNEhM1yqFDVGFRWz5OCQiHJFE899TMyHI5t8PkDkGWFufSydgSoJnlwgmacbfZWsgOb7+mVEnHiRD4KCkrx3PPj8fQzP2Pyr6vw5/T1GD58Dm65dQT++cd6ZEK9OpUxYtgANBI9biiQmBiDQU/0QXSUJ+g70tYkCv1cH24bxNam2XM3O7Y1HEyfsTHkcRCzZp9ZGecbF3Mwt7MF1ybFAYuXGkWMZlCqBpc6dPgUataogB/GLFbPegnCbCQmxKB3T+vCefDQKTbZFctZDDTCZNfPlL58MVerqNaTQCUk6WnJQdtGKcWf09Zj0qQVyMrKAwBUrJiAm2/ugFtu7Rh0R7137wlM+2MtNm06CEmScPNVbdCjRxM0aVIV0WFG+Dx0UCBalDLVD4X5xOHCQi9GjJiLzMyjeOXl/mWWDuXmFmPgwB9x7Hi+YdHblnEEL78yEW+8fh0uv7wZXnm+H15969egvMWzT/YJ6qmQkXEEB3n7xDDjp1N1XkdqpFHipnf1mj1aEL7Txd9/b8FPPy7BYeZyHRHhQZ36lUPyVAkJ0YgXGNBwjIcVhVrCoNeuWREd2tXF2vX7oDApCUVQcxQQQnDF5S3w07hlRjd4a0IAwN23dz4tr7DYmCj06tEUc+cJ5/0oTHrCs2YfCqC40Itnn/kZX311HxqaVKsx0ZFITopFXn6J+qysMiiK6GLs1E6hWRSMWRXnhSjVATB/9lbMm7MViYmxKGAHI4pHN3hL/XjvvT+QWiEerVsZXYkb1U/D/4bfi917T+DwkVOIj49Gq+Y1EBnpwbJlQaTEnDgyhsrMQFMAUAiOhsHEOiEQkEMe9aAoCo6dyC9zGS4uDLiSFAcUFpSG5WrKd6EL/slQCaBGYIQFlInlrr6yJWJirIQ8NjYSiixrp4yKO2fxtFdtMbDZZfN7EREeXN7TORImpRTDh8/G8OGzNQYFUA3Uvv12AT54/w/H3cuff67Hww99h7/+2oB9+7KxZ89x/DltHV55eSI2bDjgWKYZaVWS9QVOpvpCDNhSqjlztmDlyvDiOthh9JjFOoMiiEkVWQGlwLD/zkRJiQ+d2tfD5x/difr1rCqmypUSMfj163Fl7+CRXbdsO6R913aa2sotIAhDoL1TB3pGoIrTly3dgUkTV+D331bjCI/xEgK//LISQz78U2NQAJUg7N51LOiuVZIIrr26jYGBrVe3CqqmB2eIPR4JXW1i3Lzx8jWox1V5wutXCRwFCSiQfOqHyBTduzbCli0H1Y1ACJusKy5vhvsGXBa0XnZITYhh6kY1fzODosXPYfWVAwoef2w0nnxijKY+lGUFy5fvQmUeXI959FBAk8SE4gbNkjPDfA8ohnqB1YszKIb6gjM9FN9/t9CxvPp1K6N710Zo16a2xti1bFEjJANMGINiTsUlLUqg7Nt8j0dCbGzwTY8kSUg5R55u/xroWfhc5HAlKQ6oXj01pAqEEIL0tGSczClUxbssMiTlXgGMwyAKhccT5DgyHlHSnD8MggUV1OmGiice6YWEIEHcNm48gD+nrbe9RymwcOF29OiZiR49jDFWMjIO4/PPZgFQF2deF0VRif3bb/2KseOeRKUwTmXt0KGuuilk4nzKCw9yntAf09ajcxA1ixNKSnyYPXszs+swLqiU/V9a4sP8+Rno3781Wresie+/egDHTxQgc+dRBPwyqlZNQeOG6WFJcg4eMEqJVIaC2EtSFKBVqxrYvPWwJrWLiPCAUhlUVoKK+okMvP3W75AkNSrvV1/+jR49muClV/rbep4BjBH93wL7LGUKCYAiEd3zg0GSCKpXS8WdpjDukkTw0P3d8f7QP23zJAS46fpLkJJiJSQpyXH4evi9GPPjYoyftELrI0lW1Skib0cCFJmbDiG9ciIiPJJqG0YAal6hGQNxwzWXnLaEKSsrF79NXs3CrVCD9YjGoBgu6MjcfhQPPfgdvhhxDwa/9Tv27j2hnjbOIuJqtiUUgJ+tDR6RM6OIj49BUbFXYwJlWUF0pAepqfE4dpxJC2TFENjNqT52jMqWLYdQUuJzHBtm9L+qNcZOWA5FcQi0Z2Jo7RgVeppqWjmgYNmyHdi65TCIRNCmVS2sWr1Ht0lhmxpetkJk1KyeqtrrnSMbvHMN17snNFwmxQGXXdoQCQnRKCy0NzyTJIJLOzdAKrdjYDsmQF2bIOwiKAAqK45nYCxamOEcl0OmBhGxJg5WdTsqcyNTEALUrFURFZLjgqoB/py23hBozq5df05bZ2FSfvuVBagLyLZSAb9Xxo9jFuOFF692aImO5KRYXNmnBebM2qS3JcgioygUe/eeCJmvHU6eLGQGqNZ7Gq8nAQcPGU/MrVI5EVUqn36E4LS0JD1vUzliHSQJqFYtFZ9/fBdyThVi+44sSBJBi2bVceONw50LYOoxDlH6sXhxJgoKSvHxsDtsF+05ov7evJsnBJApoiM8qFItBQcPqcxWVFQE+vZpgYcfsA8a1rtXMxQWejFy1Dz4AzI8HgmKohqaX3/tJXjs4V6OTYmM9GD//mxGyNXjFiSmqjAT2pMnCzF39hZ1MwDoKgcbVKwQ2rbIjFmzNmnlEahMmwbxRdqBAHm5xXjm6Z9QWKDGxFFk9TRnytzrOTMuAYBM1XgohPKQQRg4qBeqVkvBkuU74fPJqF+3Mq64vDni46Oxc9cxTJ6yGhvX7UN2lv2xDOGQ6GPH8lAnTEP0ihUT8PYb12Pw+1NBFaoxCh4P0TYptmWyccWH189jFiMmNgpduzVCtSDG6Tt3ZuE/r01GdnYBPBFqZL+ArIBEe9RzxQKK6gIubjQo8M2Iv3FgXzaef6HfhcmoiNL3sj5/kcNlUhwQFRWBFwddhXc++AOAMfaJJBEkxEfj8UfVBTg1NR6pyfHIzbF3ueNTJ8YhcmxhgYOrJC+Sl82DVwGqSFpc0Clw+GAO3h08BVdc2QIvv3qtLaOyb192UAmRolAtTouItWv32TMoAmbN2Ih77+uGymEQ9+eeuRIL5m5BgCohJSkAQop+nRAXF6XV2S533pfrV+3FO4d/Q3JyHHpf0QItWtYo06LXpHE1lVkVNYVUNbrUDqyTCJKT4/HhOzdDkggqVUzEZV30PpMIIDuRHZtD+LRbCsW6dfuwedNBtGptPW/l8JFTzENG0aKeArpECRLg9wYwfNhdKCn1w+v1Iz0tOeTu+/pr26J3r6aYv3A7jh3LQ1JiDHr1aIoqIbygAFWtyt+PKEGxtE1WkHuyCIiUHCmyJBE0a1Yd6WU4EdpJXUaoUKMQY9TszUUAjYiY28VP/ubM7NFDpzDll1U4sF9llmvVroj0ionofGlDNGyQhtdfugaPPfqDPZPi1GmmumxYvz9sJgUAunZpiO+/eRBTp63DshVqMLfmzaqjX9+WeP3VX4zFKtQwz/j1n39cAkqBUSPnoVfvZnjxlf4W27Xs7AK88Nw4lBT7AMDABBG/AkRKIH7FYvvCmz7jzw2oX78Kbrixfdhtc3HhwGVSgqBH9yb4KC4aP/y4GNszjwJQF8LLujbCYw/3RLWqKVraYgeJi4htW+29AYJBFZsCEGKTqLtp444T0HfVc+dsQfMWNXDtdZdY8otPCC3utT8ULjTHrigUf/6xFg8+3DNk2ujoSEYwYb/AUn3RkzwEl5+Gp4aI5OQ4SA4B9iAQij27j2HP7mOQJAnTp61Hx8718fa7N4VtDMxxySV1kJaWhGMn8rW4GhKzu+E1kAB0aFXL0cA5PT0Fh7mLKzG9dxqcHnk8Ev7+e6stk5KYEAMqq9I3s/aCAirjEqEydqlheDqJSEiIwXX925zWMwCQlpYMsvmQqvLkF6lpd8luSFSVSFIbLxxCCCSJ4LFHnCU3wWCWcnJbDh3BGZRgsNiXUGiqQI4JY5cZntm75wT+89pkXHdDOzzznHoq+el44NnBHzj952vVrIhnBl6BZwZeoV0TPbzUiun9ZO4hUdL3z4IM+P0yBr93syHNH1PXoqTYZx+jR6GgXp1lt7V/AfD1l39fmEyKScJapucvcriGsyHQoX1dfD3iXkz4+XF8+/X9+P2Xp/HOmzcYGBRAWEDYAkv8iv5hcS6cQtU7qYE0UBgNBhUrgyKCEOC3yatsCXPPnk2DrrWSRHB5bytD0Lp17bAmxD8LrO6OTrAsuqx9JCCrhpOy+oFfRkmht0yLdEmJL6iXlqlorYw1q/bg8//OOu3yJIngrTdvQExkJCRQSAFF22VqO0wKzJ+7BR++P9U2jyef7G0M5iW4e4QikzyysR26XNoAioO0gtetUmrCaTNmZ4LE+GgDQ6raZ+nj26zaIX4K4lMs6qpqVVPwyUd3lOlsLADoc0ULY568TqKBTtBhZH/T8r6Y4aydVMAO06auxcrluwAAjRtXdS4jjDHeqVO9kGnCgcHWxGTEb0xIdXWGQkFlBUsWbsee3cbYJvPnbQ1qtB2O3UUgoGDPrmNh1L58gQAhXYyDfs53A/4FuExKmEhPS0aD+mlIToq1vV+3XmV1wDHDP0BYZBU1cqXT7rR161oIFpyKD2TI0INdBQGlwMGDOSgp8Vnu9e3bChUqJNiqgiSJID4+Gtdea5XA3HRzeKG3LbusIEhNUftDW4QoteqdAYACv0xYjv9+9FdYDIeI2NgoREXZuKIyYug0yRWF4u85W5B9wt4GIBiaNq2Gb765H6lJcfpCYlPQkoWZ2MEkdCK6dGmIZs2Y2ojvUhnRDNV6SQLSHTxuDh/MsfXGEJFzslCzq/g3sHB+hq4SoVSLD2Mh4hSacbkkU0ilCohXBvGpf2+8pq3BxZYHYAwXzZvXQGJSrMCtMmZJk3zgzCmCgzdMKHzPAj3eckuQOcikM07lJibGoFats3NUxvLlOzVG0lH9yG30qP7hcW9msSBvG9fvxxsvTULWkbywyg3Vbz/9tCS8Bri4oOAyKSEQCMhYOG8b3nhxIp544DsMfm0yVizdaeH8b7yxvWpsJ+hlObg4ffXSnQgErNbyjRpVNRBqfbExygKNXHfoBdjOhTo+PhqffT5AM2LzeCTNo6BixQT899O7bE+wbdWqJurUCb7ISRJBvfpVQtaLo9/VrXXPYyCovQUAzJm1Cdu2HA47f0BtX+8+LQyh/KEwL4EQ4ntKKVavKpvrc1xsJE7xk2adZNQAJvy81Pb5Tz8dgMt7NVUf58GyAMRERwSttixTXH11a9t7Rw7nqkaJQaAoFNnZp8+YlRX5+SWqoTmz2zGMamEuENO8ImDMSkCBpKiSLwD4Z95W3H/7V7jysg9w5WUf4K4bv8BfDt5sImQutWPlihsM9RpMc9NUTyBofCGeznbWhhiHB/ZnI/tEPpb8sx2V7IyCRfWYWEfhu4eeubqIY8nC7Wq1nSS6ghMBgWkKUOCfv7firz/W4cWnx2LNyt3O/SogFINCoDLhFxyEkAhl/lzkcG1SgqCosBSvPjce27ce0aS+uzKzsHRhJlq3q40P/3undhpnanKMvruwAQGQe6oYyxbvQPdexjgmzZqxSJpUSCyKmDUrMfXsHkoBBCE2kkTQqHFV25gsAFC9egWMHvMo1qzZg/Xr94MqFC1a1kSXLg0cF9o1K3fjyL6Ttvc4FIXiuhvaOd4PBGQsX7wDGVsPQ5IkNGpWFRUrJiAnp1A93C/EhPN4JMz8awOat7Q/WdcJA+6+FIsXZaK42Mu8LsKb2ITAEAb+dPDRB9OM79MOFFi3dq/traioCPznzRvw8CM9sXTpTpSW+FCzZkUsmZ+Bef9kwMkj6o47O6NmLfsDGRMSY8JyCw3mwn62UbFiAo4fz4ekCGoohWqGvZRROO2ejeqFUorMbYfx5APfYucOo8j/xPF8fP7RX1ixdAfe++h2x3rs23sC+fm6BImXRygF5ZPfR4EoCQYDWl4fmeKue7pg3DjVtsS4iaGQiMRoSmjm2AwloGDATSNAKVV5kQii5kHUk6opkwhSHkySH9gJaKrGvNxi7Mw8iiZB1GGyrGDd6r3Yv/cEYmIj0blrI1SyMYLP2HLI2AeWCqt/nFp56mQRhg+bqSZVVM9EWtaDArmkS6E4figX7/3nN1x1TRu071TvgvD2cV2QQ8NlUoJg2JDpyMxQjV3N9HPj2v14743f8N4n6sI3/selIbl9SSLYtuWQhUm5pF1dpKcn47gWcMz4HAFAJALqlfXFW/T44TsXtqArikqsQtWlY8f66NixfohaAyezC/D2a5NV7x5CVCNe80JNCPpe1RJdutjHMsnMOIK3X/kFJ08UqDEkKIWiUFSvXRENG6Rjx7YjQAjjRFlWyhTFsmrVFAz/4m58NHQ6dmQI6pUQBINSoH6DtNMuL/dUEdav3a/+CDYoCFBSHFw9lp6egptv7oCSEh9eHTQO2zYfUt+/RwI8MLyDli1q4OFHejrm1aNnE3z7zXzH+5JE0KRpNVvCdK7Q/7q2+PGHRWrkWQAwByoDAKhnVolGpyIIgPycYuQHOStpxZKd+HPKGlzrYFypiFIBzR4FgCRp9QIAeBU1zgnn5VncDgLgtts7oUOnepg0YQWWL98FRVaQFB8NX5EfXm8AkByGW1CCT0FlauB3iV+N5IIIguTkOHToXB/z5mzR6+3AhJd6nRnu1St248O3p6CwoFRbUr6QZqHftW3w1PNXaUHeKKU4caxAZZQ0CQ7RmWYbdZ0ZlqYyJkMXkxkTXNm3BebO3gILKNXGCwVQXOTFkoWZWDQ/A5f1bII33r0REWEeEeKi/KJcq3uGDBmCDh06IDExEVWqVMENN9yAzMzMf6XsY1m5WLJgO9t52k16ihVLd2L7tsPwev1hqSEopbYqGEkieGvwTYiOjjCqJdi9WrUrYsiQW40Raf2qqE/yBuDxyvD4ZXh8MiSvjE7t6+Ky0ziiPhRmTFuPgF9W11IWDdQIgiYN0/Hiy9fY7l6OZ+Xhpad/Rg6z76Cyou3oD+8/if07jkEKY4cvScQ2MFg4qFO3Mr4e9QA6dawHiTCpTZDon5JEULtOJTRvcXpSG0D1zAjL6p6qnkuhUFrqxwtP/oRtmw+BG5FKfhmkNABS6gcp8YOUBrBt3X7k5zkT6vSqKbj6mjZBj4O5+ZYOmDJpJX74eh6m/boa+WGc+HwmuP7GdqhWPVVjXK2qA+h9KTAoxCzqJgjZ5xN+sletAWqMoWguedRUPIzoyoJLLJiaya+oH0UNgsc3Ds2b18C779+CWXNexuOP9kLhqRL4fAF9vNl1vsjsm6PSOjAcBAAJUOSfLELNGhVC2t8QQlCzZgXbe2N/WITXn5+AQhaGXhNWBWTMnLoOwz7Qg/UZDhUEjOcRhcGg8GTmV6ed/SOgatUUDHr+Krz82rWoW6+y9fXaeBUp7F0tXbgdP323KERNygHoWfhc5CjXTMrChQsxcOBArFixAnPnzoXf78eVV16JoqIzOwI8HGxYux/QLBXtpp26Ko4dvRgBP7MzCaEjpBRo276O7b3GTarim/89iI7t6yFCVpmPGEJwec+mGD7iXqxfs89YOqWQfIplwBIKrFmyE//7cu5pttgZ61bv1XealIWy98n6J6Dg2OFcxwByUyavQmmRzxorgv31eQNqt9nskkUoCkXvK1qcUVsSE2P005YDin2ZlCI2NgpvvHVDmUTGhgMeQywideqEtuH549fV2LkjSyDW6hcJqluuxL5TheKlgT8hL9eZsXjmub7of21bEKYq4Oq9+PhoXHZpAwz5z2/45vM5+HXccnz135m4o/+n+MXkHns2ERcXjbsGdEFSQrQhSB2HbhsidCQnhsQ0mkK8qmBG0LGxUejPGTjBG0uVlIRn7PrzDypRPHE8H+N+WITvv15gqK8q5rRZIygFAupckvzqh/hkEG/A6JZNqSomVRTDWrMr8yjSq6Y4zj+Ph+DSyxqiok006GWLMvHjtwt1aY5YBit3/qxNeOeVXyDLCjK2HtbUYNq6I1N1LvGqhuwpawo1T6gHMgYo4iIj8PP4J3DtdZeAEILPRtyDSqKtHKVBvVsoVefN6Rjynw8QSs/4c7GjXKt7Zs0yuoCOGTMGVapUwdq1a9G9e/dzWrai8AM3gsvrt206hLj4aFSukoQTx/ODpKdISY1Huw66G6AsK/CW+hETGwVFUfDDyPlYtTATkkcCoYDsDWDBjE04dTwfFaokm7KjGlNiWfQkgt/GrsBNt3ZC5RBnq4QD7cwbRRetavp6AJAAJchkmfPXRgBBFnq+QCpQVRg24m9JImjcpBo6OaiTwsGCOVuwcO4WNeQ8GGH3y0bVCaWIjvTgm+8fQlWTm3m4aNSkKhITYlBQWApDh4lg3fXqf64Lmd/k8StUpooTEb44m/IkAPbtPo7nHhuNET88bDgMkCMiwoNBL/TDgHu6YvGi7Sgu8qF6jVQc2H0C437Qd54Bpt4IBBR89+XfiIuLwjU3nd04FGtW7MIH//kNRSzGEGF2Fo5ghJmY1IxljV9ixgOP9MTWLYewY/NhUEXtb6KEX8bqFXsQF/sPxo1ezOi38Aw7FJRqgf4EpoDFrjEz8NqM4u02X2PYvzcbr795PV4cNA6BgGywh5E8BMkp8Rj4TF9LfSml+G7kPK1+5nI07QtUycTDd3yF2+7txh4mhvtQKOCTVXuYIOdwqemJo20OV7c1aJhmYEITEmLw04QnMPOvjfhl4gqcPF4AxY6rFVBc7MOuzKNoYRMzyMWFg3ItSTEjLy8PAFChgr3YEgC8Xi/y8/MNn7KgWZhifp9fBiEEN9zSgct81RuGv+qU/3DYHerR9ftPYtg7U3Fdtw9xY8+huKX3R3ju4R+wlB2pzkWWfLHZtG4/tm48AG2J4oRK2JVpO05AExl/H8T+AACKCr2YO30DfvlpKebP3IRSG5dlAKhbv7JhJ2soC2o9GjR0tt0oLvQG310ZIukK14XdYudLG2LIsDtCe1DYgFKKz4dMx5A3f4ccUAz1V8X3CiS+c/XJ8Bf7UKEModU5oqIjcMudnVjhYkWMv6+6uhXq2BxmKCIQkJHHDq/TGZQgW0gAhw/k4K8pa4PmW7lKEm66pSPuvu8ydOrcAL+OXx40/U/fLrT1TCsrZkxdh9cHjdcYFA12zK5JNaBLFZzT2aFS5eARcGNjo/DiK/3VckJI9exQVFCCsd8vUgOQiYdZCuCqDcjQokbbndulgRpjwhCY5h+lCPhlNGtRA1+OegDdezbR5kh0TCSuve4SfP3tg6iSZm374YM5OLj/pIVBAaAfhijrn8P7czBl0grWP5y5ooaDBgmXUrK6ieCSnrp1KxnXSkN71WveYutaFB0diRtuao/xvzyFJwb2CYs3lcNQI59XKGfhc5GjXEtSRCiKgkGDBqFr165o0cJZ5D9kyBC88847Z1xe7br8hFZ7jp/fI6BYvjATy+ZvUyczMd7nO6hX3rweDRtXxc6MI3jpsR/h8wU0l8DCQi8yt1vjZXAoCkXWoVN61FlBzGeniufXVrMgUNZqU/w6djl+GrUAPm8AkodAkVUVx6ODrsTVN7UzpF0yb5sjTeTSFF+JD6WlPsTEWAPTRUZFQDYzQJQtfrxNAqNCZQACIa5SOQHvfnirQw1C4/cJKzFjyjp7jQAXW0OUThAsWZCB3le1KnOZd97TFcey8jDzzw0inwpA3Rk8/MTluO2uLiHzOX4sT2B4WTdxAuowLimlmDF1HW67+9Kw6rpm5W54Q4jFc08VYdumg2h1SZ2w8gyGA/uyMXzodKuEKdhcE0GIVf0jHqPskMVd9wc/GfnAvmw89/Boy5hQd/38lwMoRYHZHsgQCM7YNsLrGiRWj0jHnRXOQASbQ/XqV8Ezg65Ct66NUVLiRetL6qBqDecN3eFDOdZNFWBUd/HmQWXc9u46rs9VVn/zVledw4oqVeH9AKB5yxq4896uGPX5HHXui15IIhSKUycLHesNAM1a1gjJQ0ZGespk+P5v4kxVNq66pxxh4MCB2LJlC5YsCR6w57XXXsPzzz+v/c7Pz0fNmjVPu7zSUr+RiNqBEPhL/Bj84kRIElEjy3qIqj4g6mmyl/VojNsGdEGTZtVBKcWHb/wGr9evi2RDLYBczSIRUCpQWWERMYuJ+d8Sh1D9UyeuxHdf6DYrCjNAKynxYfiQ6YiKiUAfFmtj/eq9yD9VDEpMNgB8IWeGgxnrD+D6bh+iVp1KuOzypqiSnoL2lzZA5bRk1K5bCdu3HTG2kO3AoMAS5lzfJQJEIugfxK2ZUoq8U0WgFEipEG+xIZEDCn75aamNuoUazhsxQEJQu45wIEkEz7/SH/2vb4vZ0zfi8KEcRER6cOllDXFpt8ZICTPsvLdEZR50gsWplqDy4O+CsPFBCE6eRqwTizTDDpRizfJdyMkuRIPG6ahRu+yBwf6cvNpq6sXbYPYcM9VBJZbCe6NUjWBnSAfDPAEBunZvjP7XtQ1ary+G/qUFQCQWBsruohF+7q7OpTyEauqpc0VKCICiglKUlvow6r+zMefP9Qjws28IcGmvpnj29WuQnGIdb8eP5ulMGO9yhzmhrSsUqmcRkYCA7Lh2cRUQ90vqf2M7DGJSqvFJsZAIkxTz5/kAZ5cSEo1BM7OOnMLiedtQVFCKajUroHuf5mjSrBp2Zh6FbGNcLEkEV17dCgk2h2KWK5ikq2V6/iLHBcGkPPXUU5g+fToWLVqEGjWCq2Gio6MRHW3VxZcFqg6ZOrrcIqB6vEBR1DgfgOoSF1C0sXPFlS202AQb1+7DETHgUDhcMF80WDkQjOOCLZkUMJ7kylBS7MV3I/4OWuQPI+ahV9+W8HgkzGaBsIwMhmKNhcAWmAN7TmD8HvXEYiIR9O7XCrcO6IL33/hNqJxIZKC7HwpiZ75wVaqUhGtvsjIplFLM/mMdJv+0FIfYoWzp1VJw092X4tpbO2heVLt3ZuFUTpFVR2WzW+TVIQpFnsNhkaeLxk2qoVHjqpg3YxMm/7gEX8zPwBcA0qun4qYBXQx1tUOV9GR9Zwqiv3RqDLevXmYkwUMgKQoGDvgGMbGRuLRnU1x5XVs1oqoNqjt4fQDQmTmFYtIPi7XLrdrVwQuDb0B6kJNtnbBy6U7j4GX5q+1QAI8pFglDZGwkAiUmiY8oVTLPUYb7H+6Ju+6/LKgR9OGDOdi0bj8AgJiYEY2QBzHObd+5PtYKkksJ6vyjmshEwOnY0Ig2OE5JAAx+fiI2rtlrsEehFFi+cDsO7DmBET89gtg447qoeTPxMqhpTojqKqFfCZFAA/w8neB143fFKMi9+7bE1k0HdWmS5qDAiyLo068lAFXdOWLIX5g1bR0kQkAk9RTmkZ/MxL1P9EL2iQKcPFmoeQvyZjRsUhWPPa2fN+TiwkW5tkmhlOKpp57ClClTMH/+fNStW/dfKzs6WuXfCIXRC4QTWFlh4k6uf2UfpifkQXq++HC6lufenceMRn8c1PRbu66fnKvudJghX7Cj0hkIYHFnppTi1Sd/0r2RHHAyuwDbNh0EoLoPm+vECYphMbMBVSjmz9yEWb+vQdsOdQ0VJoIqjMiqNwHxBUB8AebhoH7v0L6O6pFjasfIT2bgs/em4fABPcBc1tFcjPx4Bv47eCq4S6ZfbCuvpmITep/Xi/1dOj8DiqLA7w/gdEPxm/H9iLn45K3fsX+PfmZJ1pFTGPnxDHz85u+qkbYD4hNiULdhFWMIf81N1UGaJlN4i33Ytf0otqw/gG8/n40Hb/wCe3Zm2ZbRsk0tVKuRCmL2DhHtDkzPbNlwAIPu/w45ZYhOq59zBZ0JYm2Q+PjW3hUF/DJiJIJX37gW8QlGQqvZjgjeKNocpUCvPs0x4IFuIQn9IfHkb4VVjlKjusXGxiQiQsK9D3fHMy/20y9SLnihmm0HoQB8Ad0zJxzw+R8sPaWIj4vC+lV7bM+/UWSKQ/uzMeuP9ZZ7TVgQSbWOiiDdVLTf+rrGmVX19+na7IiSt95XtUTVaim29mUeD0GFivHoxw5H/XLoX5j1x1pAplD8CmSvDMgUJQVejPpkFh59ohfuf6QHqtVIRUJiDOo3TMOzL/fDp1/di9hQZ6KVB2jj9Qw+FznKNZMycOBAjB07FuPHj0diYiKysrKQlZWFkhLnWBBnC4f2n9QGAIE6kYnMPvwQNMFWwCK2Y79zThRg64YDAFTDLzuCp+0ozPdk1QCP8MMFmdtsOFEGKYCUCsbw9hmbD2H75kOhHwY0/Xppsc8Y30E2MWwhoCgUa5ftRt3alZAUH23bTkLZQXzUevDarClrMf67hYb0m9ftx7RJq9R2mvscwN9/bcTKxTsAALXqVFJDwfPNMbeFCbHwH9xzAjdc+gGu6fgebu31EX74Yq5uwMpQWuLDknnbMPP3tVi/crcts5Gx+SAm/7jUWle26C/4axOeuusbTB2/QotTofedgjVLdyL/eCGIad/q5H6paTlEHpgChfkleH3gz/DZHHJJCMEL/7kOHo9kdGPlxMgGiqwgL7cIv48LbnBrh5Zta+tMg81p3hKlKpNa4leNmQMKfEU+fPDSZFX0GzAZk4rxg/iHUnS5rCFefuv6sOpkIGgak0OYDZA69ySfDMkbAPH6AVkGZAXjpz6Dex7sjvRqKYiNiXSQRkB1MQYgBTgz7gfx+QG/HHwuUQSXvBCCgDfg6H7Ms5hpY0hdq25ltGpbO+j6Zf5oTAyHxsw41Z8iOjoCnbo21C7FxkVh2Nf3oUGjdACqaobHC6pVpzKGjbwPScmxyDpyCjOnrlWNjO2yp8Anb05B7ZoV8eMvAzFl9ov4eswjuOaGdoiKviCUBGd2uGCQ+XkxoVy/ya+//hoA0LNnT8P10aNH4/777z+nZR89fIqpVxzDRArMRZCMKDDqvzPxxc+PoUPXhqptiZ3FuahW4u7PijAIhd2hqocnQdU9BEB/k5rk19M4gCutWgoAwOfz62ovplcwlGlenCyLlZp6ytjlukhZMonNBWbQDj//7x9ceV1bVE5LBgBM/3U1PB7J8SwSSSL485dV6Ny9MRKTYpGcFIuck4WAQvTdqaOejGqqLC+L0FmQV4LJPy7Fglmb8fmPj6BCpQT8/vMy/Pz1AoNHVKW0JAx6+3q0v1RfkP+YsNJahqD3JwD2bM/CqMwZGPfNAnzw9b1o1Lw6Soq9ePuZcdi0Zh+oh+hScUJUY2VqMyzNonmxSGaMuOjvbejTv7Xlfss2tfHZqPsx5psFWMvOwVGlXXAc34pMMXPqWjz87JVCFSjWLd+NP39Zib07jiE2LgrdrmyB/re015jma25qh/mzNmsZW2rL3oHdK8o/VQyiQFVscVsm7r7OBichBHUbpOHtobeF7Q3WrFVNJKfE6bZIvC8VgPhlZosBrb5ElpFUMR6prE3bNh5ESV6pGjYfMM5N0/gWNUAEAA0oalts3p8297iRqVnlTCkUWQl6ijCoc4yY9h3rYdOqPWpJZjWsE7ixLK+vTPX6m+3WADRomKZFrOWoXCUJX3z/ILZvPYwNa/cBFGjRphZatK6pMbBL5mfYe68ITJLsU/DuCxMx+LM70aVnkyCVdnGholwzKWcqZj8TxMZFsgWCMyrCTQpmFBYeJ7t3lyrmr5yWhD79WuHvmZt0exFB7UH9svFcGUlXqugLHvvDjHqd6G1cfDSuvtHIpGzdeFA36APsmS9K4fFIqM92OT5uA8B2S9oCK9qQ8HaYVBAUrCyitoPy55mBsfZcCBAAc6dvwF0P9QAA7NmRFfSwNEWh2MuObT+8/yRyjuXriyhnEOx2ngKDYpdn9vECfDX0LzRsWhU/fjnPkib7WD7eHDgWQ/93P1p3UFWTq5busJYhECjxclFhKd544ieM+es5fPH+NGxhNhJqn6r9SDmDYlf3ECoNIhGsX7nblkkBgMbNqmPIF3fj1MlC5OYW44cv5mLVkh22aTkK80shB2R4IjyglOLDl3/B4rlbDWn27Z6PKT8vw+DhA7By4XbM+G0NSEBWGa7TMM8AYLCFojKzXwFUdSEbE1HREbj5to6nJQqPiPDg7oe746ths/T8FeM5T+aqFpwswspFmejUvTH+/muj+oxXVtvEAvpxhjKYblZtC3uppnN3KNstUwqr3JuNZW+pP/j7Z9IMMxRFwZgv/xZUNxTMiCYoCK+bok1tldHySNZ2ygpyjtszSIQQNG1RA00dwj0c3p9tku7oEhvD3FEUDH9/Gjp1bxTUvqtc4kxVNq665/8v6jeqCs1Ozqyf5RPFwY4EisLEweonUOpX1SYAnnntGnTu1khNq+nfKSCrkVs1lzTzjsRkdc/jFGhJoN+OiorAsP/dj2RTCPli7sUhehaZ6w5A9skoKlQPW0tKUvMgAhHQC9R3c5CFCJAGfSmx35WFUrkIIITg2OFc7XecTZAyM7j4fv+e48ygmevcWeXLsDgosoJlCzLw00jn+DOUUnzF7JAoparnjFiO2eBYzF+hKCgowZRxy7FozhajBxgDj0th6dQwmkIVGtZJuKkVE1C3fhVUqGQ9DduMuPhoeBhB/v6zORYGhdetML8ELz30PSaPXoyi/BKQgAwScFB1hPNaqHrYJrx+wOsH8cvgkYT9xT789z+/4YbO7+Ld58Zhy9p9YW14WrSqgUj+Yth4N9hemUAkohkTnzxRwKR0bF7KPCosguahZsRssyh0lbI4n/h9BYbYKh5C0L13UxTkloRkUEtt4o7M/HWNGlyOwriAcIhrmdmWhlJDkap0SVHVVwGZ/VVV007xl0LB7zPZzlFq35eU4tTxfMz4LXhsoPII7YTzM/icDs7nUTNlhcukOCAuPhodu6rMBNdxE0VRP6JEAcaJK05mTaIgKxh09ygU5BUjKjoCDw3sjR69m+pMhqw4ntGhi1Sto5Eb9VJZEQzbKHpe0UyThIjgJzZrTI8dWD02rNoLAKjbME1tEyPyejqjoaKTYWHQaJ1hnkYMAEkCw9WtT/OghpCSRNDjSjWWDvdg0BZRzuzZBZwKk9DTEIT+wN4TOHLgJEq4PY8JofaqS/7eauWfOFPI629uP78fwtYmKjJ84WlcXGhmMJ2pBf2+AH4fu8y5fMr6TVBp8B25Na1DYXxuCaHh+ZEA2hwVkvt9MpbNy8CLD3yHkUOmB2VUAv4AXnvsR8ilfhDmShzKOJQqFNs2HEBRYSlq1alknAsBTthZg0K8F0cQgmatVEmDxyNBIgQRTHrUtmM9PPhkb90mRJRqBmTApzJw8MsoKSy1ZP3T1/P158S6AoY+1vK0MCqCATSvLqAxV3yNrO5wKncoVOMxXuzKFsDXgrEjrdJNF0acz6Nmyopyre453xj48tXYumG/YxwJblMHYfcFGIkQ/35g73F8NngK/KUBrF6yAzymhRoiGpbn1PwESQUgTFKjztog3SFAgybVbOtbsVKCapzJs5Httk8quCFe+0sbYO7UtSxvFs5afN6j2gNQE4EIBZ2Bo1YbFRNkWUEv5pIIAFfdcAkm/7QUBXnFFl28JBHExkWj/80dAAAt2tZGXHw0iou8WrlUk/Qwl27tCARYY27YVj50Sw/uy0aVqsl6vnbSMQNh0Rpg731lJpjmocBVVU42GOzZE0dyQ9adY3fGEQNTYZffySw1ovOCmZtY3AsHNZr5L0+nPSNcs7ODMfcXRBVoaO7yz4krUbdROq6+pYPh+qnsQkwevQh/Tlqp7dwJIaAsjEDIs5soxcIZm+DhMVHEuvFQBITo9jMO4MbdXNLFi23ZthY+GHE3jh3Nw+w/1yPrSC6SkmPRq29LtGhTCye5KoV5qEMOqJIWrX5svPtkvP/8eLw+7A5NJZJ7qtj4LrTFzDnAGDUwMtAPjnICAfqGiE/jhPxTRTqDguDMPQGQm12IZfO2olOPJpp0r9zjX1b3nM+jZsoKV5ISBOnVUzHi58fQ3nReTKUqSXj+7RvQoHFV/WIQUSRkCsWnYNncbVi9WNfxix4b5ufMahPVlkM4yNABkVERjjYHbTrWM3rqBEHbTuoZQy0uqcXMT9gzsl4fTbRtkCyZ4DAJDTTWIYQ4WLndr2iOeg11yVBiUiw++d/9qMRCfXsiJHWRB5CcGo+PvrkPFSurh6lFx0Ti1vu7WupEqBrPhvhUsbR+4GDwSW9263ZCTGwU8k4xI0yD4IWqdk6Koh1ex906uYQn+2iuqb4w5iNKVKgpnZ0qj39XKHy+8A9c8/tloW42/aIAMguVv3v7keCZOe2CAbXvRQ8Re12YLfPvKKkzMzUE+HX0YoM05URWLp66/UtMHbdcZVCEvMxSGY1Y+mX9E1A9fL545w9M+naRNb0s1MFWcqdLLd777E5ccU1rxMZFQZIIqteqiCde6IcPvrwHUdGRqFmnEh5++gr8Z8iteObVazQPqQqVExAR6dGlJwFhXBjchYEls7fi7t4fa6pcw0nSXFXFxqbjLNDWILFfTIy2+F2h6NKjbCeyZ4vRlp1AKZu/aj3efWY8Blz+MWZOXl2mMv910LPwOQOEc9TM+YYrSQmB6rUq4oMv78Hxo7k4fDAHsXFRaNi0GjweCYW5xdideVQ9XM+8+Bh2+MTwxwK7iWjafVKoiw31y8bdsinuykvv3Yh4myiLJUVezJ+2zrRwOxvaSayM/buOG24RQFV5QGUgiE0zDWkptZVOmAmOfvCa3hYiEVx5XRs89eo1ludr16uCMVOfxYpFO7BxzV5QULRoUxuX9mqCSJNK444HuyE3pwh/jF+hETsqeI+Iu0bKPRcc+qZt5/pYu3SntbFaBioT2Kh5NeTlCDtV7n2ixdcROs70Dr2FXpCoCBCJQBEOddTSKArg8eixLTgBjPToZ8YQ4SlWHgFQ30HKBgDHDp/C31PXYf+uYzhy4CROZBdqdpzaDprofySJoH4TlVHfk3k0pNTFCZxRoQFWBoU6xvm4EcZsOJIN0a2ZAurEkQiOHMzBzq2H4S31Iz4hBqO/mIPck0XqWVlOjA4hRps0w32n79Rqe6RQUC65o+ydcXd+AqyYn4Hn3rwefa9ti+8+noE924/i+6HTMWvCCtz/XF906tkEuTmF2LxqL/x+GY1aVEeNupUhSRL63dQOf05cqb5j3miHLs85XoDn7x6FUVOf1S+KKmpDJGOYximfqzLAvXW49EWT+godIqv3o6Ii7SsDdcytWrgd3tIA6jVJR5vO9TVJT2RUhHbshkFqJrxjVmlDnrknCzF88FQUF3lxc4ijEC4WmM+oCyeoabhHzZxvuExKmKhSNQVVTKfiXnFdW/w0cj583gA7NdlmYgO6qITPNp4uCDEURccqg0I1t0waYIudx7SIywoO7joOXAH4vH7s3nYEsqygTqN0/DlhBQrzmV5allUiJxIVviAzIhjwy4iKilAXDPF8DhZQjkrMW8fsEmkCoVTzkJI40ZUk1XPC1EVUcCNt2qom3vj4Ns3t2A6eCA86dWuE2nUrQZII0mpUsHU5lSQJT758Nbas2o09GVlG+SFfnHk/B2TQCI+aRmb2R4RAAdDv1g544OneuLP3J/rJ0GYVDiHo2K0RYuOiERkZgfiEGHXnylyHLcROUOeJ/UF9AdBIDzsOQSC4bFzQQEA1mhPrz98H1a+bcePd1vOCKKUYP3I+xn5l1OlTAGB2TMRwUYWiUFx3Z2cAwKkThWqZ4XpXmFU+smJ4LYoiAx6qjnHZRv3llI9i7Es+3bhq89nbRurN8FjfnQUK06OYmRAO22fsq0ooBfyKpY6UAtPHrcDhvdlYv3Sn4Zl9O7Iw+IkfkVQhHkX5pQbD59ad6uGFD2/BEy9fjVULM3H8UE5Yu+v9O49j2/r9hjpY2saMzEUGQRR0UZ8MeIiuAjbnxMZg1eqpiLEJqlZa4sPwt6bgnxkbNUmtolCkVU/Bq8PuRJPWNdGxWyMsYF5TGphzgcp8BmdYxwyfg743tUOCQ6Tl8oCzdXaP+eiXt99+G4MHDw76bLhHzZxvuEzKGSApJQ6vfHgz3ntqrDpYJF2yoA07swm8tsuixtgHQQaqyN8AVFUTBZi42bQ+zJy8ClAUTP1pqcaUREZ5QCIiGIFTt0P8KHpD2bLqbZGYHKt5xzRuWUOP7aK5ezIvGS2uCw2qMCaUgsoyuvZpibxTxYiLj0a3K5pDIsD3n89RPSNYM+ISonHnwz1w872XBnUn9PsC+OXbfzBt7HLks9gWldKTcfMD3XDd3V0sz+aeLMSebewQR4XYLs7aNX/A0O+AyrMs+XMDelzRHI+9eBW+/miGTUMJEhKj8fQb1wIAIiI9uO7OTpj03SKTtM1mUWd10LICY1Q8EmKTYuHzBVChUgIiIjw4uj9bY1DMCzginOL6AFfecIntgXMzJq2yMChaHQKy6k4rEHE+Hq668RJ0vbypWnVRFWVmem1VRQpAJPVBBTAzCRKgHjsRkJnNEgkuiRSkl+ZkxvkTBHaMipnhCyaFpNp/1muEONaRfzczKCLyc4qMc5VSbFy+G49d8zmGjHkInXs0wrRxK0IyKByTvluEtp3rY/3yXdb3o3nBOfcZYengIRqhFFVp3EPxgWesoekppfjwufFYu2SnJjjjz544modXH/gOI34diMuuaI4v3p2GkmJmE2injg3CqAT8MhbO2oz+t3V0THPe4TQ/Tud5AAcPHkRSUpJ2OZQU5XSOmjnfcJmUM8CBXccw7KVJ+u6WS0gcpSPqH21nwuM8iINUCFENQBWrck8IvtTaiGf5JD95NE8lOIJtgq9UASKoYbUmwmJnRkqKflBfXHw0KlZJRPbRfOaxQHUROCH6aabBdtBsh//Gx7dZxPWX92+N/LxiHN5/EgmJMahaswIO7DyGjct3o3LVFNSoV9mSnRyQ8d7TY7Fm8Q7DwpidlYdRQ6Zj/65jeOadGw1lbWNRf4migIIY+t28k7EjIABQXOTFm4+OhsSZRC5xYW1s2romXv3odlQWzim546Hu2LRqD7ZtOqQzlZxiMqJD2PN2fQZ/AIHCEkxb9y48ER7s2HIIz9w+0rr74rF2+JgSGAWPR8L1AzrjoUF9rX0pK5jwzQKtTPPYJQplKkailVOvYRpuvPtS9L6mtdbHhAiLrZnx5kadBlERAEXW54QmDVG0a5p6AcS2bsb+Cs6EhGRQxHoHux+USbGpBBW+BCP8wQiVKK00SGkpSgpLMeiWr+CJidDHVRg0LzenEK98fBsevOYzXXXCYweZJCiOoFAZeo/HuKYwNG1ZHT2uaml5bPvGg1i9yD7+jqJQ+P0yfvluEV748Ba8MvRWDH5mrKqmPQ0GBQAkj4QTR/NCteL8gsJR8hb28wCSkpIMTIpjckrx9NNPY8qUKfjnn3/+1aNmygrXcLaMWLMoE09c9zlKilgcDFlhUoogDAqB6gnDLhE+yblumscZ4DES+DXO/LDf3KhPJMKEEGgRXbm7sDm2iyLUBbDuENlvs8qkTacGxnwpNZwhFMzwlVUOHok42hMkJcehaauaOLr/JJ689nMMvH44Xn/gOzxy1TA8e8sIZGzYb0i/cMYmrF6UCSeX0lmTV2PLmn2Ga9lZeSBmN0uESbwYqKxA9snwe/16jI5S/bN91R6UFhldPWNiozD02wfwyPN9kVwhQWBKoPUXFYm7ouiGpGxcBEoDuKbZ63jvyZ+wYfluZt8gEEtBTUcCinpGDI8bElDw06wX8OgL/WxVYXu2H8XJ4/lBiSQ3MoZfRlqlBHw16Un0ubaN9j7XLNmBQ+xQSb2zQowJNr61cas9IyTgf+zsQSz50XBos7WOZtjEA9Guy4pa12BzPJhLtc0ZSKdVzyBRZQNeFjs+zE5Iq56KajUrYvjYx1Wpo1BHi4SOx0qxY6Qp9LgofM1h69j2tfuxY4v1GI4F0zcEjQSsyAr++WsjZFlB555NcMsDl5WJkCsyRWoYsX7+P+F8HjVTVrhMShlQkFeM958ZC4Vb7zstHmb3YS0dey6gRpglfhmEB6SCQDiJupPVgkPxBTTYQqmYFliu8zSXLYrnod+CooZ3n/XLSrxw+1d4sPdQbF+7V1u4iFAGIYLaJCCsImYpjSwjEsCXb0/Be0/+hJHvTsWurcbFa+mcLRj82Bgc2mM01N255TBeHjAK29bt065Nn7jCehieAI9HwoxJxnD0tRpUUatjrtvpilqF5wh0nTLvl6/e/cPySFR0JG6+tyve//pe9YJCoYfrhMnDxbluy/7eivEj/2blsota4EAjA8mDpRFKNXWYHbwlvuDSAV4PWQYJBJBzNBdzfl2tRjkFcGR/NgY/9qNebzNzQhmXbGY0qMBocZiNzanpugKtjZb6mQlrCJgZxaAJmccLO5xAl3zZ1YOrJCxtO43KWepAQteT8l2QdiFo8jsf7QkASEmNQ90GVfQ8zAyaLFvHpXCfl0qoagxMhAMpPR4Jf01YYSm7IK/YcYPBEfDL8LEx9tCgvqhe2xhrxfEdiGkkYivJKU/Q1o8z+JwOvv76a+Tl5aFnz56oWrWq9pk0adI5auGZw1X3lAF/T1mnTSCLQZ240IsHcQUCRubC7CoqEiwOfk2hxmROYmnZhlHQ7skA8aj15QReS25cmA5mHsXwBRmaURwRwvPrdYOwSBA1zwAjvNxWhVLAL4MoCrw+GbMmrYSsKPBIEv78eRl633gJnvvwVgDAl4OngNrsBKlCIUPB1+9Nw4gpzwAADu05YX/+kdZUBQdNzE7L9nUNngIUUCUSoI4SHgt4m4IwiZvZuTd2qNe0mkBwKdSQkUQfJ+JLtmNUKIW3yMvKNo0jOygq1xks+FyNupUF40e7PBTDuAr4Avjstcn46fPZGPrTo5g+QX2nqt0RAB6eQrRH4R1uIqSGfhcJjlnlRJi0STMKBrSBQikQCKhMW4QnpArAAN5kwupCAIkQyLKCGrUrolrNCti27gAKTxWptQ7mAQQI71Y1FLebp2ZWwpBPsDJC8VKUsjnB+tEjOZbWpnN91GmYhp8+n40JI+epqkKPR48+y8sUVW/gU54axmew3pZlBds3HrRcT6tegS9kjs8mJMVqBreEEDRoWg1H9mUbE4l1sem32x/ujpSK5VySEg6jHOr500l+JmWdJ7hMShmwfeMB465cBJswnIarC4w62Yl4YKFI8EJJRyAQVqdVzk5EbX6eUrZ4sowsRoIUsVEenDyWz36q+WiHC5oZKb5z19Zjrm4SyhcWOu6ZwP/Om7oOldJT0OySOsjNLnRsO1Uodm09jP07s1C7YTriE2O0U5rtQAixWvSbF1XR7scc+8SJCXR632qhGhH1lvq1SLfmtIRAE/tTmbukIuT7M4j8efC7MELcQ6GoUa+S4+2Uigmo0ygNe7dnwTImTAyKiFPZhXjtvm9BOZNFAeIhenA+gxsQrz/Lm1AjIRcRTJojGnsLdTQcwhksDxO49IvKCqrWqYRAQEaVqilIiIvCusU7cHj7UdUYXlTj8nFEiJU+cGkOhX7ml1gvPp9gYtDENtpdJwS6ZXKQdspqrBeiKOqcjfAIA159pvkldfDuyHswfdxyTPjyb3ZL7VfeJl1KYa4fr4oSlDkQEWlzZtCVN7XDpP/9Y99+xrA3b1sTfp+snWZ836ArsGjmJkNyA9MkIDomEnc82gN3MGmRiwsbrrqnDMjLKbIXNZoWI22yc6MvwXbA8owdTGJz1abCIaaDuItyAGH2LE679IgICaVFXjVuhFg+X1y5+FcT37OP4iCNCLUDpMAfY5ZYd0gO4Of39Lq2bfCj6SlFz/5tDNf2swMHtdgiVAhIZ2YQwiFyCtWCeamB4PTzTfJyjAxX7slCjHrvD9zS5k2DuoJAfSfULEkR6yLaFgHCrl3c9gbHgd0ngt7vcnkz+zFhHqeCUbcSkJGdlYfiwlJOdTUiTRSqny0ic7E0EBsTwfKB1Y5JCcJw8Xy1eii6CkZkosSw+6axa/tKFQXwB0ACMo7tOY7s/dnYunwXVs7bBr/Xr9fVVBeRWXdSO2j2ZFxdIqtlISBbDaX5PHF6ndp96mgbopapry2qu3NAKxMBRVUr+wPweCSMH/G3UXXmDxhtZmyZU6ozYlrIheATvK0pEGZeThH8pX7ccM+lxvrzurL5tHLuVgy49F2sWpABAKhWqxKSUo1nkQHWNfalIbdg4qLXcOdjvcKXkJ5PiOO0rJ+LHC6TUgacOp5vXPX44uEXFhBKVTGyGA8k2G7ZlumBzc4x2OAMMSkJURdJRdBlCot+lSqJxmvCIYk8XggA07k9cJ4wYUyg0hIfcnOcpSgiklPjAQDX3NEJ8YkxkGyiv0oeCWk1UtHTFHX3x09n6/UJmOJuiCoThTNicH5fnEiawYiRGJI750Q+Bt04HNN+WqoetGbznC2h40yBdt1EfKFfCoWSIvtjHTi69Gmm118sXyOMilAXvW6EqIbB+vsX8rAQYQV1G6bj2+mDVK8g3j67tLxxlOoeZQBjSmQQrw+k1AtS6rWOMc4McOZOURABVUII85gXxoEiqFQNTAMVxzqrjz9gmDdEUUD8AZVhEuqjMsHcXkPWmWJ/QJfksXyjovTTnG3B1xjeLgcCTEzfxTPHQCm2rt2HVQsykJudryfmbeWMgtP6IvSPmq/N+xPrS9WT3wFg7/ajePuh73Fnh8F4/KphmPrdP6hZuyKSU+OY15s1j6L8Erzz+BjNHu3TCU/YznnOLD49+Hr0vq4tYsM4gLTcQDkLn4scLpNSBmQfPaXvJLhInEL97vXpRM684NjtVjmcdtN8IRAXJZHImhf1YFAU1TbG5wNKvSBe9in1gigKYmOjhcXQpu7iIsmJDK+W12dsg61UQN8Bi/eTK8RpYe1tQYD0mhXQsGV1AECFKkn46KdHUTk9BQALi8+8Beo0TMPHPz5qCSC1L/OoXj8Co6Ev7xutjlR3Fxbrr6UN3s97th3Wvn/34XScOJqnS6fCGRMiAef1FcGNqMMCRbVaurrH5/VjzuRVeOm2L/Fgzw/w6l0jcWBHFppdUlvtQ77r5/kHaSsNKEjkajWDVIQK+egE/9ZHe6JmvSroe3N74RnojBAHDz8vBkiU2djlRDQUtLFGEfD6UVroVb2xfH4hxpDdGKUm5k9QzXKGKSADpV7jJxAAFNkoLfX71bnm81nLEtsTkOEr8avSQb6OWMaDYB8Szi6aly9+2Lw+kZUnMGHm56gj06Dd54wWoK9Fdrt7WUZ0TCR2bTmE527+AqsXbgeVZbWfZAWHdh5F4ckCx7WCKmqU3vFMLVW9diV8+9fzaNq2liF55arJ+M8Xd+Pq2zo594eLCxauTUoZoCiUGcJKQmwBqu+6fH6ABFTiIrFdtdOugxN//p0FXdMMKgMBFl3Woy5skiDNILDX69tBLEdriPCcP4CWHetgzzary6CWlteLl8/z5QSNi5YlSa2bQtXvTi6MTGf/v8FT1O8RDsORAg+/3N8QoK1uo3R8P/tFrF2yAxnrD4BIBG0610fLDnUtYt6c4/nIzsrTCR4A7XBB3gZOjMz9ZQ52GoJBAYC/xi1Hh55NkX+qCIv+2sAYFFYG1+dz2yReFrttYVAURY97otWV6sSM94mDui02IRoV2W62IK8Yr945Ensyjmi0NOvASWxcthMxcdEgRNKyogrCYoS8JSYpjThGhN+x8dHo0luV2DRsUUM31uXSOg5uHAuwMc4rQ4xziPeXXZnm+lAITCLrv7A1AcJ70/Iz9Ytm0MsYAzsGwsb+S0tDCDyRHjRqVdNk78YZAr++jnCIQfbMCDgwcqwNqVxi6gQHo34NJkmSFsFaM8hXtPWhbpOq+Py1yfAWm6ReVAH1K5D5GsHLM61RVAbWLsxAYX4JEpJiUa12JXw6/gnknChA1qEcJCTFoma9yheGascGZyvi7MUMl0kpA5IrxKO0gBluBmM+KGA83IZCC2zF04huxXz3wwmYJpGhgMJ2LlQwhuM7zFCgnKkKPpEz1+83LsYisYzgxpA2i60lPas3j6grLjwaMYZOsAGdIfN4DEZ5iSlxeOLN69C1r/VsCY9HQsceTdCxR5Og7Zryw0IockB4H0TvX49wBokdIeFEDVCZ0jCwc5Pq0XBkfzZkUWLD+yEQACIjBcZDKI9/F1VKhOhHKFCo9afCuLEzYmTv5eYHu7HsFLx4ywgcYLY5nBDy11fKiYjHw+yqeX7BieuxgzmoXr8KDu8+rtY3IkIdw7zukkq8bn6ot1aP3OwCxMRFoqTQa2SEFEU4k0hgwCjU3bd5TFLoxLossLxvmzSakShP4zTfhDlsuWVifm0MkuWAjFad6qJuk6qYMWmlZnOlaC7iprnHpRmSZD0eIwTh+vadKcEZOw47LyWtDBjbasfQA9i77Qh2bz4IrQPNTL5J8qJdEyEr+GvsUtz+ZB+sWZiB797/Awd2HAOlFJJEcEn3xnjojetRRzzw9UJBGO8r5PMXOVwmpQxo2KIGju07wXbjWshR+8RmK38ClVERdd129i1U2GEAumrFvGAQYnwmIsLe6j8M7Nh4QF+ALIOfE0KbxdJMPMQ6K7LOlIjMlfi8yKiY+uvjnx8948Vn7q+rBfUOEYgJq4jHROQ4U2dpk6wyFyEQGa2miY6J0vMz+HISzRPDAEVRibrZ5kVRAE+EwNBKpmeMEWZ1tYuCpm1qAwD++/x4HNiZZZLImNrMmWFC9F2xmN7BFueyK1ti0ojZjGn2GW8y4jX5yzlITIjGr1/Px4kjp9g4NWXECa/WXybia7chkE1h+yk1qKs8UZGQ7eamKCUQpQGGsW1SedkRBDEfs0SMEOM9wFlVRylm/LgEX858CXUaVMafY5cj/1QR8opLobmrSx779yAyqkEMyjlOHMkNj+HmjIhkGm9A2JKoxTM3QpMI2Qa6ExgUUaUl9hkoxg2fDW+xDxO+mGN4XFEo1vyzHesW78C7Pz6Kdt2Db1hcXHhwbVLKgKZtmE40HC5YkzSINgmmZ8SAbfwDI7GxeFrwj8+v2oNwTxPRJibcOvJqaNFt7QgYq7coWdDuBcnfwFSZ7jm5XQt2K3/+uDisugdDoTmYmcg0cOlVIKAHRfP57dtEiMp0BYHkkTSpT+1GaahSPZWVyT8CwdMkDtR43dEeSLF/N+I9/pdd8/tl7M88ivm/rwmuEjG3V1NhUGMZNvh15BxHHp3n7y3y4ev//IoTh3NYeTb9aJG6iePM5hoHt/ng4z8Q0MaQXOq1bzbPh9uFWGxRxLSK8a+Yh2k6WDcS7LqiGP/aoCCvGA92ew8j3/gVBzMOI+9Ynq5m5c/ytpnrEbaNkvBMsHuixIR7r5lVc2GguJBFYDbYWAkvRBbHrXP9/DYMighFVvD+oz+oEsELCYa+LuPnIofLpISAoihYs2AbPnz8Bwy69r947+HvEM12ymEPEr7Ai4aAfJeiGaEqxjQcIgExPE91t1exLpSqC3VxCe5/7grc+eTlxrwcQHjsDXMSkXjyOphF7ub0Yr8QYiWAIeoiIvdkeJ4/wZBaJUloh/afEdzo2e+3z0ST9jgvDoQQRERIuOaergDU05cHPHOFWh6PlGUnPVEUnQA6EYFggfp4PoI3Fk/TsHl1TB9rOuVUZGbENvF2iu+apxfHgekj+8MgXGKd+ZhwGgOcYPEyxLhCtnlDZSz5uzPVj4pqBG44zpnEgKwzy4Y+UXTjUC1PWH9zhlck6DZqNwDBCTxjsmRfQLxoHLehGBG7PuKqJW4szCQ5kdEO9ixaXWwkfWWghx4JVgbFXK4sMCh2xNeOMRfXTPa7tNiHhdPWn34lzydcJiUkXHVPEPi8frz/6PdYPW8bJI8ERVYgeQiWzdoknAjMFyU7Ci+AQheRaou/6TcgLAzsAYPNCgUk4bvZI8g0YMd8MA0paSk2eUNPT9VyKKVITo1DXnahvUpAlvVD+XibxQXHadJ4JKHhNu0NgdqN0sNOa4YsK/jly7koyC7Q+19hYn3DbpfqTEA4BniykAd7hhAgJi4Sb37zAKrW0kN4X3lrR2xbvQezxy9jYnNqJWKyEtyuwsBgAYASVj3TalRAhbRkrJyz1fhu+MnCPG8zg0KFsSUSbifCEexwSXNaDs4UEEkfHmb7KrOq1C5fO+bKDH8AkExSQnNMFTNzFmDMAlez8n7wCHYyWj2gS1BECZ1BmhKMyRKYMcN18btJ0iA+y9sv1oXXwdYGRD364uiBU86STD4GLDYp7L8wxl9kVAROHM4NznAAOkNkbguHeb7YSZJYup2bD6LvHZ1D1q3cgAnNz+j5ixyuJCUIfvhwGtbMV4MJce8ARRYWNg4e4IxD27Exl0cxAJqYBjDsBLTr4i7NHBNBEGUb8nFYAHOP51nT8F2iFugpgKgIguYd6tl3hEi4+HdR9GvemZuftUOo3TEAEODWx3s73wfgK/WjtNhnuU4pxX+f/Rk/fzIdXn7oH9+hm+sayvhYtPvh7pxeryaxIAR47K0b8PPSN9G2a0PL4x2ZV4stIeLvUTybSXxfooRN3KWHsYMa+N5NoJTiVHY+ewbGdybWRXwffNzxdE47WwvzFCYMz4UYA1xCZHfdTtLjlE4kvGajZBGyrDMoAAy2Y4a/DupX3sdmJlhrbxCY+9jw2yatuS1iHk7qQYaje05Ai/xrV65oqyPOee45FMb4e/qDW3Bsf4hAjea8gjE/IoNibj9rR2mImEAuLjy4khQHFOYVY8bPS2B71gGlKgcrGqkpwuJlDhYWkAWvFZu8AKPIWXzOvEOkVCWQ3I1VzMMJ5t2VuX6Uwlfsw7Lp661SBhFmhsnMuNi6wUJdDClsROrQpTP8nqDCSqtdCVkHslG3aXVLtnMmLseYIX/gFAvhH58Ui+se7oW7X7wakiRhw5IdWDBljVB3gcBr7tThLbaOcWP8fkAiaNmpCa6/7zLHxw31t9v58uuiO6aT/Ymd5MD0PSLSg2c+vBUdejZDYV4xAj4hbg/PUmHt9/uNUiGRkeUGubzvzJKHM3H71N451b3A7O6LdeJwku6Ynxclfvw5u3SiJMhSDxilLgqgeVZ5TOl45/IsAsyjTJL0HbNddZ0kCCJETzROlCWTYbGWVmBog9ghxcdFoajIZ5IGm+CkgrYz3mfXoqIj8MbX9yP7cE747XNaP8xpeJ3soCjYtGxH8DzKGVwX5NBwmRQHbFm5G36fzQ5O9LwxLwJOuz4uWRHjgJgJDr/G/zrteMUFw07ELe42AIHQ8B2WYlxYzBNe9BQx19Ncjrj7DrrAKlZXX5FwEKL2j4l5OrY/GwMv/xAvj7wfPW/sAADwlfrweM/3cZSH0md1K8orxoRPZ2Dl7E0YMfdVzBy3VFPRaenMMWXEuDPmdnGYd6pmKNRyQqsZ6TUrGNJrBrgKo1xmxi9Yf9q53LL0rTo3wKV9W+LyG9shMVkNIU7MBNi80+bgzAgnfvy9BBtv5jEcSu1jBm8nj/ljzlcSVEG2kgnqXKa44xaZf6exzNvgdI+DS1m4q7Q4rsRYQoTomwx+n8LK/MmmNE514B87BkX8K+YfDJSi6GSBHoNJi22kID4pGkX5Xn3d4uBzmM8pcx0UBfFJsfh6zisoyCnA2/d8E7wOoWBmkHifi/fFMSFJOHHwJA7vOY7q9aqcWdn/FsKUSgV9/iKHy6Q4YNuaPdaL4oSRZWsgLaedmjiQxIXJSfTPv5sXYDEvu8FtVhfwax52+rF4ErMd8RUXOs4ocQmQOU24DIp5EbXUmdozdtrjFB89MRqN29ZBSpUk3Nr4Bch+Z9XSni0H8cP7U3FkzwljlFfFZmHVCGQY9Q+CFbM34ZmP7wSgHjG/YvZGbF+7F5Ik4ZKeTdH6ssaQIiQo3A3aJ6in+MIvLrbhMCoSQUJqAhq1roVm7evitid7IzLSOp3jE2NQr3l17Nl62EhUxT5waq8YW8fMIJhVGk75mSG2jRCrx0hkpHEccgZWkqzzwcmOIZh0RcxbI7omGyPzM7KsbjDM84XX28wImiQLWvwfkeCLz/P5aHaFN7eHj2M7ezBxvQjFqIibEzEGE0PRST+ik+LgzS+2PsvrEIAqBeUhD1ie9zx3FQgoBvX7xLqGhRpv4rsUN3xin/LfdusJ65vpPy7GY+/cbN92FxccXCbFAVn7swFzACXRmJAQXVQuBiDjoNS6UzeoHBTTLovqom8zzJNUzM8s8nWSrIi7U/Galk7I08yM2UWCDYeYinUXjfDEtosLt5MOnwD/e/s3bFyW6cygCJj63XzUblxDrz9Pz4mFKFERF31z+WEyYqeO56O02Iv9mUfx7n3fICcrV5VgUIrJI2ajZqOq6HVjO8ybvNrqPaQoVgmbHYNqhkIRFSHhg58fZ9ko2LgkE8cP5SC5YgLa9miKyCg131sf742Pnv5JH79mN19ResLrZJaSiNedJEviexH7kjP0nCmhVG2zwa6JPcffkfisOGZEpslpHIj2JmaCxq+J3iu8XXwei2Xx8ckZNp4Ht83gbdJOFxfyE/MX576ZKTcT3GDSlGC/7Z6xyysMN2K/2bZDlOLwZVFWLHFxivKL8eUrE+H3mfrLqU7md8PHvRg3hasDg9jYiPnNHrf0wmFSuNr1TJ6/yOEyKQ7wePiiY5pUZjEyX2jFxVNhbo8S0VkcccE07wg0hsZGcmJeSM358QXSoKeHUXzu96sXCMtT3CFTgKr/qWAHoYl1oAo7JFHcwdm1x2ZB5DY9hC3s/Jh3IjJDZgbB4pEArJi10ZK3LSiFXBLAnk37td2xdrS8IMUijDGgiqLWzeMB9fvVdB6Pes2O6XPAyaO5ePXmz9QzYih0KQ6Ag5lHkZudj+SK8cg7esq6SLOdvPm1hWKOkiuoBy6unLMJX708AccPndTuJabG4+G3b0Hfu7uix/WXYPfWQ/h1xGw9X0DoEwU0KlLXrPD3rVAh0q2xLwzv1bxzN48JkRHi71czwDS2ifJTgiWJqUuEm6IEUiS0wSQQ3HOK1YdSZgNAYZy3fF6IeQaLN8TaQ2XTScwRHvv0wWBmdgB7Jsw8HsT05nXFSTJDqXWc2UCRZaO6FBCYP+fnNi3JxNaVu41lcUmYWQLkD0BbXzmTaNhUBa+j5fRwln8JN5S/EHA648Tp+YscrnePA6rVrWxgSKiisIXZtOvmEHbmVBTjmtOYB5Usg8oKKNTDtCwwLzw2oObF1EAD1dDnlKj1obKsZskWPEoVEG7Rx8rQaqiwRUZRtEPHqFAOZYsJZc+YjYwpP0GZ9wuTIhBDHsY8HXcG7HqoKUkZ00VlhbWVmhY+1kaqMpIE6mJHubcOI578Pg3BKIBSREZFYMbPS1Ba6AVl9STCh1KKgpNFiDcdeij2E2WB3Qx9EQJ9bu2EtfO34u27vjIwKABQcKoInw36ETN+WgxCCO5/5RpDvlTvLHXclZayNisgCtXaIXr5UKHvLOJ4/tc8RkVCIp4pI546DD5O1ZO2KZ9DfLyZmDoqy9rYc2T8xbrzcarloc4Hux7m9bA9a0qoAyAwcw73w4ahzoo+Dm3i3mh94w8Y5w5/VsyT/RbnJQ0Ewja2pGKdwmkXpdi2ajcCfll9R/x9K4q2QaF83fD5rfnyjYui6O+Ob6wUqtWHz03YjQFFAQ3nqBAXFwxcJsUB2oFYfEEs9cISbdUEdRIC4LtztjBSkfCKiz5LT8CyFZghbRHWMrfuqrTJqgWxgragU0pBhdNeCaAt/Dw7lbkhbMLzhVKX/lAmfOELBPX5dWIFsL6humsuL5fX3+9X+0GWQf3M00HYIFGhP2kwBoV3j1nKY0lEWV8aFy2N+eHFUVhdqEX4fKoHlXhYnLjQc0IpqwHXIyMlzPtlBajCiCx/jywNf+bInuMWhsdA8NmpuRoDYVc3di0pNR5X3N4JX7wwDggyJr98aRy8JT54IjyIT47V+lJf+AWCwOtqUgfohFtgUDiDwxMZJHkmwiFJkEzxRdSRZtc0qteNESuLhx2lRgm5WF+zykookz/Ly9DGCr8lEkfzPc7kaKeAw/bd0IBsTO+Ql22bba5rdWIMPRRFc5ZTVS6ynh+lhs0ElfWNAQBt0xA2xLUiHLUCIfB7A0wyy/rJp68L2qnQYp3NUBRdQgJhrTAzcuLmwSKJVVBwqij8dp5XmObK6X7KEmHvAoPLpDhg6Z/r9V2j12e7iHBQRWAIFFXNI040UHHimSQH4IuwMAFZjBUqs+fMOyQOmTMhMAxYKixWgCqSpywOh35aqHXhF+uj1ZcRXW1h8PpUYuVlh8NRRVMZoNSrx17hTIkhb9gSh1C6Zmp63jmdTVoqEBQD8yL0VZA8xTKpoqiMms+vR/D0+eEv8amLIqXq7tG8y+PEwbTQc8JvKZ8v4ub3ztJ5IiR8Ou15HD+Yg2MHs4OuU4qsYMqoeQCAHte3ZxcV/RkerMxUhl6soofvF2OGiFIK8Vmbvnzwjets+pkaCRCoPjZVqqgRHPGEW63PzPVlfUzN7vU8HSDMCWu/m+eMXi+BqRDvmX7zawTQ87ZjRlhdDUTa9J6pLIN6fepc04i8Xh7l/cOflRVDfTRJkN+vzsOSUtDiEjW/04gcFhHJzldyPFTRHokpcRbG1zAn7ca8OQ2HdlyBab46STeJKiKbMurv06rzecOZMCjhrF0XAVwmxQGFecUwBGYCbBcdyoKhGXbs/NwdkSDKXELCv/NMYB1sfBH2+QwiW6oXrDIRWpRU6ESXq2ZM9eSESROTimdmiOBMkcj8iHWjlBEtYaEQu0UW+oPXW1tYAFBFv8YftCMshgYoEEhAsIT2u2rDu+BGjEJ7gmYpSoYCtun9pT7I4hEF5nw14iHsEDkh0UQLVO93URQuiPsJAaKjPRg29TlUr1cFO9bvDd0tlGLWz+r5R1ff283IcHIQQfehmOso2PNQWEXxmhqU9ZXfD1pcAlpYpH5KSlC7YTr63NJRaKo6JwTWQ7+uMetCnoI0ytjH0CWH/oBK2B126ZoU0XSkgzYW+RgUVST8niBp1MezHeGmutpT6GNt3lNBKmQqR2srf//mYGy8b3ikaT43hd9ay3j4ezuIbXAApRSx8VF4eeQDavdSAOagdg6ITYhGYU6RnpaYNmzsu8iQGuoj9AdljKpm/0RhXa/sW4DpP/wTRjoXFwJcJsUB1etVgW1gNnGOiqHp7RKZFiCNyIkxKsSFNxAwLi6UAl4faEmp8ZwewBgJUjHZzBiqQo27GfHMFCqkEdsU0PO2qJ0sTQ1xT2TyzLsr8VpAFqrD2hMIMFsNgaPji3MoiAyi066DUpUgiO/IyfMiyOJIKYy7Q16WaE/Ad7yGXRB0Ro8TFp6Hzw/q9TGi5QMtKYHk9aJ5m1oIeNXd9aHdx42vmzMVpneWd7IAAFCUXwTtnJRQ9i+8/kS8LxB5cfxy1VdJqU5gtT5Q8NYtn2HOz4sFNZLOjNCALnEzSFJEyAqTUHHGnOo5UKaGFNtsttUQIapPeH/5/cb3GxDmiyzrzJnI5IqSOKGehmfYOCaEaAydgSHhthksHyorRrsdno4z6WbGV2S2eZlmiGNRbJ95bTLNjzqNq+Kya9ri0qtaCUwDgttnAbhj0FVGaZY5uVYky5Nt2oitGpQzgzytSR3nBEJQmFcSOl15AFcfnsnnIofLpDigx43tVTsKDraTseyw7GAgRCYCKAs7NsOipy+e2n0xP64C8gf0Ccx3uICw27NXERjbEeS+GXY7slDPiG0QFyxOmMU04l+uj+ah5wWbDj0LB0aFUmE3LDABpjaKNjOGxZQfwmZuGt/dhloMTO2w7WdxkRWJvJMkiRscMsYi4JexYeE2vNhvKP76fgHiEqP1vP0BUJ9flWQwBoczxR6PB3JAxqdPjLZnyMwh8AHj2NY8zGzGNK+nz2/paw2SpEnYNEkfZQyKoM60MNliOT6/LlmkAKjCBHOcWAt2CVzyYqiEjbcWL9s8xll/WjIx951de0VGjDFB/P1pZXLw9nDbDdnKoGiMtqVBpnIVxryZJb9cDWZ+Z7Jg+ybkSIUx5/f5sWTqGtYWwCgFNXeZKunrdVMna19x2EXQZmm4kbpmrK7w/oXzRoPPKX9AV22xdxqClyo/oMqZfy5yuEyKAwpzTKfvGggs7BdjxsgYCLGoCgKMfw3ufYz5MacBdKLKvEBocYm6lxR36eIOjj2rud6KeYYDjfjYGJaGweRQ827Qwuw5QCBkumQIJv2/vmArgQCUklIoxSVQiksEEbliz5zw+4wwcc8ey2GNnJHxqQSfBAK2C7OhTaLBphkiAdWILLTF+XQgB9TnR7zwMypWSVbz8PmNxIlXi42Xhm1rYe74pcjad1yvr8nQ0EL0tEygj0OxvYA+foN5wojpITAmgKYqon4/f8n2z5m919hfbaNgR/gYg2ZbKxs1oEh8tflmjmkjzmvOPDDDeur3G+sgphXVehxsU2GwsXBihLm0SetnzjSYytHOCYNO+NltAhgZK84ci20XGMis/SdwZ4NBOoPFiCHl3oimuQWFomv/1pg3YamxrXz82KyBvEzNKLvUy9qgWNNTk/cjr3+Ae/Cx/JhE8sJhUuiZfy5yuHFSHLBt5S71izihAgEgMgLqrszmIUUBIAknzELd6RGT1NM0+bTLimIINEYBe/UDIXpsBkJ0swRO9DQbAuE3pSDm0PR2MNRN2H1Kkr6gSpLBI4nXAwCozwfC0hpK4AwTZ/aYMa9Qe70PTPUjwjNq1RhhE/qGCHE6KCN4XJ3uxCRqUjGuJxfrINgoUEBtP2AvlpZlbMKwogAALp9JREFUPa6KeF1oBxF2+ZRdp/y5MsDjkbBj3V7jO7ADBZJT4zF80BhV9eAQbZbKinF8mPKggl2Q4Y3ZSZ8sdRDmEIfJOJhy1YWsgETo8W2cXHwphXqysSwbQ/+LECUqxDTGWEwOIjA7JDISmhcKTytR6zvi7WH14wwKEaLiUsDkgaRo6wKX0BKiOf+r9YDRPV/7CgABNdaRNu/M9aG6C7e2Rtj1ibjGEGIvKVUU5B3LgxzQ+5YGZMBDNQaCAqB8nWPMVUpqAtYu2ApLzCcKg7EzpVSVIrF6kMhIfWPDvQHZieG877lNDySiqbe5UTVvp25mRo2xa1xc0HAlKQ4g5kUNUCcJtytxErPZEENzXAKDhEN7jE3QQEAXu4ZhJCbajHBRrcHmBTCI1FnjnPOzEChhp8ViLBgZLugMkUB8IeziLODB7vx+Y0wDu52B1vfQ7QACRgaFeyCZY2dQw/PU+G5MH0ObAoKEisOGodAImmjYyf8K78VC5Ox23qcJOaBg54b9iE+IDpl2wcRlUPym3alaUf19m9urJaGgPp+ubuTXxX4Nl9ES+tniheXXTwynXp/ubm6uE39GllU3cX45jLK1Z8X5IDKtgYA1IrDfD4s8ho8tgdEFYDTwNYfAh8oIcuNekSEmwl9bmNWmdm0z189kQExN7z3UO5NFV2peX7NdnMkmYuYPCyAzdbST95KmzmWMIQCNQeHu+9q7knVJj2irIzIoWh0FV3UCwO/1XxhuyK5NSki4TIoD2vZsBqLtFASCA6j6fzFYmAhhchmIpSmNQbRsJph2xMu8yJi+80VTnPwGN1hzWU7gTAmgq1yE3aXBw0Jc7MTFh/92aIO6kxICPYmLvLCb0nbZvJ8pm5SiYaPZdkf8a2q/9jw1pTfDru5crG9efM0MqA2xt1UVUWqRvoR8xoSISA9KCm0MBGUFmnt6IKAvZGZPC1YP7ZpNe7SxLHqDhclAW9ojvn/xvdgRzCBqMNWzzWicavt+hLKpoqBKjYq6eo0TQLHNZrUSL8fr0+YOV0VaxhZn1IV7BnsPWTWANsxFltaQn5beJl5SELWagUHm9eflmBkmcd7ZrSVmF3ozQ+cAvy+AmPhoQ59ZELBR/QoMh6FMKqho2T3eH1o8Ih7ygI136g+wdUSQhpdnmNb+Mn0ucrhMigOuvOcyRMdGWbxbtInHd36KjTGZ3eQ2LyKix43dgBMXG66yEe4ZbCw4UTLDhuAYdit20Gw2HAwDxToBmrrJQnjENvI683RcR6+Jck3ERewbmemYWd5Gd0aBSTITDLMBoRiAi78bkxukY99xIs8MHbX3LaoF7BZ9lo9xx6eEZ4diVyfDbYqmHetD9svGdgcC0Awc7eQLIoHiz/B6iyHsRYLLnyNEiJlidIk31417ZlG/X2+HnQGoXRsFA3JbQ00zY8oN0kVPGUpBvV7QkhKgtBTwepG167DpvdowZ3zsiISaS20Y8bX0o5in6CkkRFlVjTpN/WxiKPh36jPbt1Bt12w7Juzy4x9/ALZMhtPcVhRIkmAfw99DGEwpIcDhXVn6syZGxcjgm+YjL0NR9H7ifS/Un7B+1+xPKIXFkJRtIIvsDkh0ccHBZVIckFwxETc/eYUl6igP260ZG/p8WhougQCgG5fxCQhYFyW+0Jl33uKiYt498Wuix4ndYml2M+SExU4MzQiS4vOZGB9hEWdlG3Y8sqyqArwsOq9YTYW5EAsLkBYAziwJMe/cqJ4HQABFCLEtSokA62LqxOhpf9mHL/yARV1jEKGK35k6TotIy+qhvVsHJoXKMhS/H9TnUz8WI0sj8THYatgQEn7tQMYhoZ56wEAK3UaJ/+b9S0RGxE7iI/aV2ftHy0z9S/1+jfHUepap8Sw7cbE9VI/IbGEyzUTL/G6EdkF8XwojUKWloCUlqnG5rEZE5h+LaFxkTqjNNXNaH4/sbEPsBYJqYbiZBIVyg1fOIJvaoUkGeNstbdWJtKW/2HWDTUtABqVClGC7upuYMo+HoGqdykbXc/E9BQEhBFl7BeNsQJdCiQkpZc5WwvEHGtMBiIH8zHXWxmhAhsqM6/GnuMqHUrVNxRcCkyIyamX6nO8GnHu4TIoDigtKMPnT6cagXxoHH4DBFJbvtNjhaDQg63p8HgdAzFxYfA3XAHXxtwu0JjIbHMzqThVBmyeyoudlFk8HAioDwXf1gYD60exthDqZFmzLzpYzPYLuXgs0R6lqX6Aoan9wC34A3DNCW6ADRl22TnDZwhMIQCkt1SUZsi6REMPP2xIYvhCIM5oRNW0BZ+2gImGm1NpenqWiS4aI0E+2aTU7Ida37L3wXbZiUgMYdvhCnoa6yDL2bzusfueMM+Xvnj9DLMyPIQ8bYqvxIJxwCWNJZAooiyHE3Z41LzZhXGtHB4iRXEWiZF6gWVA5lU4J41Y8coGrWVmdLe3jfaxZTQtlAEa3czsJSjgwMzzC2qDNXd7XzPvEZBbrqKbk451wo1ZtPlJtvJhVSorXq/UxVRQolKdVDOVpzILQH8Y6UPyy9wuVSTHXjfev3fzSiqCALLxLDp/fqAqmWnHQ4vZoGxdBRWbuY/E7n7umaa3vQSjm/LjIsa7lBmfEoNi8x4sQLpPigH8mLYe3xKtNAI14aOJrO2JIoQTYYXGguiSB6guMqNMXpRr6WkR1SYYNEVEXMvVgQKM9i2IUgwKgisyu2xBQSo12H4EA80ISDIb5gkjsF1fF57PmydNwIsEYFVuPBPMzGiMlLM6mPlO4NAbQd6NcqmTLoPB3ZUesoRNmTgxlRStfC8QlPqMoUHzq+zXHDeHSHgPhVExtEesVYOHPFQql1AuFGVUa+obvznk+AjGVPBIio4QTsA35q/8RQnQbJ0oNqiY7FRdVFCilpaqqhApZidWnApHm9RUYPQDCIZuqlwY1Z2aRXgnvn6n4DGpAv18P7sfUf1QcLzxvW+IrQOhLWyJn1y9qQ4T7itYmKj6jsMwMKh4mwTLkoNdLfJ4HtjNHY+VpVeNVtY8VWVbfU0mpHs9JYQbZbEwB0M8Q4+/INAa1Ma0oSEiKRnxSHKo3SDOOOT5uAs7eaJRSxMazuD12aQyMiFAX7q5E9XdtYNSFvjL0m7ZgCv1HjeNs54a9tnV1cWHBdUF2wP7thxER4VFP9FSsEREdwRkUhQKSQPJ5eHGPwBfyiciPKKd88ikAMR6zTmVZd/3VLrKJytc0RWFEQbjPbVDAdvzmdghuwURS0+qLpAIoBIpwjTD3ZoURFc1FkbVXi6sQpLsopcyRlf3mu3Cium/rRMLIWOgETthtae0wttlxYePuiwBIpLpzN7p9GiUNVKLqwi8R9T0FAiC8jzVmCQLhVkAiIw1l87ob7IEIACJpZfF+1cT8ER79usOOqVmnBoiIjsTs0QuE8oReYeOJEIER83h0t3TBTVQXowsxbqgumaBUYS60RJeYUVUdJ5m9ngSDckKo2l8i8aJQ86LsoEAhBofh3bHxapAssP7WJCZc3aYI/Sp0AauEseMCMqhHEoYMmx8ADOPfCWyjQNgZXdq4Yu0gwkZBS0/V4U2p6ppMJaK1T/H5AMLqQ9g4A2dwFdUdl+qqOsrVqzB6w4ivnveFwiR4RJK08Um1OauoDA5jGPNKSjHsoa9Rs2kN9jiT/whjkAZkkAiP1k8iQxfhIfBEetRYPk5QuNpLmNuyojopUAWU8n5l6yD16CEdeLsMr8LE0PAukCTIXqtqu9xBUQAE6a+wnr+44UpSHBATF23c/Tlw8MFAWJRLzYTRvHhxsIlGAC1+hE4IqGrP4A+w3S3VCCIVpQd8R6gIEhaeNxWYLIMYn9qIuY27Gepnrqfiaaa8npZ2ONiV2O3YDb/5ZUVvB78uqMEM/cUIi6H95oioAhRK9QMbtYv26iy13tyrhe9SqbozJgTmM0W0OrH2GlxRhXoZgslRnQDYxuEIEkOFv1/ZH8Ddr92gt9+m3WJ+mnid143VVXtHNt4j2i6dGyTyvmAMinkyGFUu5vob+4sKY5Wy/tElMCbGR1RfUKhu6FpdxJTBCZr6fgJ6oDZhV69PGbt+FOcFJ6D8nVLr2BXB7huYbzEysKIAckBbJ7T5qwhSKtYHit+vq0KFsS5+1zuJ6lJUbnTLvOMUf0BVvZps1Ob8+A/Gf/AbwJl1cbxSlWFXSr2aNxUUJjEu9SLveB7a9W7uPA7F/hOlJ9pfoS1inUWmVWsrjIbdlj53jo5briAwmWX+XORwmRQHXHZDB2FHIHD9QTlXdfJRbWFgBMvp1E8OPvnYuSR8YVIoM6TjBJmlFV1GKT+F2LC75dnok9wyWUWdP689n/zmwc8WTOoVFifzDoYTZEoti6guxlVAA35QPzck1DoVVOGnI1v713xMPNUVz1p6vU/sJi+xZUh4va3qGf26XjYVJCaCKFzMh9dBljXjWCOzyL4z24uguyAKYz+aEQhg/9ZDSKtVSRVKKJwxUrQ+0ux5BKYRlGrqMcN7NMfAgFA/sX8CTFLoMJ6pjQTB3gYGjEkK6Pf4vBGe15gZwQ5M3YnzJFRlOvROM3Yi9HSQAzrh11IwIsmlFiEILPV5wceeHu7exCiZstBGOlfzimNFqK82/k1zi7K+sHUl1r6bGHCx3wEQqo8lSqnuDm2J/QMU55eokg2hvoY6sXWJen3M9k5X47Tv29paN0MBgrrNHOnZkEywNxPGhjb/wiHQSvD36eLCwAXBpHz11VeoU6cOYmJi0KlTJ6xateqclxmbEG1YtPTdjfA7VCbcTiTgVz+c8MGyjmkE0LBL4K66Ypbc8FCthHXCKkLuFAYPnZATlt/Wdm7m1VbdSVHRs4VSKLIMY8hqxjSJixo1SmxoIGArmdfa4VRVgeCKdiIGJoECmnGjrDJ7dkGPVMmKVbxvPAjPWKbeRzozZCAGorcKN5jl78dGMhL0nciKbhAptpV5QcQlxeJg5hHIXr8+ZnhZ3DvLKX9F0dM4BITS36kwJk1MssgMK7KsE13T0QQ6oyIQX96H3LgWpmBvPI1mFK2HUNf7SA+uaKcmNKQzNg4KY340JkDI2+69UL9Pz51SnZCa1Q22zDB/TnEkzNo1MwFmhu4A1EiyJjWLVimNEdFVUNpcBHQ7IJ8XhqMabKD4zcxmeMQ+70QBQIT1yczIi0bUBPp6Ggiol80SKUXRY8bw7ITNSSh4i31hpTtvEN93WT8XOco9kzJp0iQ8//zzePvtt7Fu3Tq0bt0affv2xfHjx89pudNGztYXWsCw7hkkFKbnjLtGQRyuKKA+r7pzFA33zBDXWadoguxwNcMgpdRolyESCLMKwq7O5klvWEjtCTwAfdFh6aj5OY1omtRclBqDtIl1C7oAmRc+aO+JcmbIfKy83wfHySwwN84LMWuLQq15m3fRlkfZGLJT6YhMpk29DAwHO6dEJNB97+uBJVNXwtAnVPuPEUQ5eP1MIKL+30xMqWK6ziV/LL1DrB5q934dFlgxWJehbLFcntYcT0ckYoYqOPSv5vnG2sA90gRpkMaAiZFoeX4ao2qTt+G3ek2bnlo7nMfkab00/gzva0EdZawP1dVk4eRnyjsUJI+EHWt2Q/HLqj2LWD4VbVGMa6rBBsxcNqBLJjUmHGF3z6EdR8JLeL7gRpwNiXLPpHz66ad45JFH8MADD6BZs2b45ptvEBcXhx9++OGclrtu3mYoAbbTYgGyRJE54ef3KMIuNxyuVpZ1LwVh8SYSUZkMTiSC2e4JhFW/RMHdag3SFOhfLQf/Cc9RWUaF9BT9RliGwmLwL+julzxfGjwfzQZBDN6l3VRgWYmEulOR8BsWQ0CRefwExdJP9vVQoGiESTDutKa0XmEEiJ89E8yewXpZZ6gMzxGVubVdsNm1yOgIXHFPd5zYn+1QhthX4Ym9m3ZpZJWesbppBMZM+DRmSxxvgkQL0OaIsZ1mwicQLm0uWW1etEMvxXLE33ZMpJNrsSj1MdRBZVQU0WvMiVlS7Mep3XpgmJW2mwVAV9Mw1ZZ5/DpubsT3oeiZabdPn5hFRhsNwEOCUngiPKqAJMClwNygWGRQiMM4oPwfLH0K6AECT8NYVCnnhqXaOnUGn4sd5ZpJ8fl8WLt2Lfr06aNdkyQJffr0wfLly22f8Xq9yM/PN3zKAgNt5bt+QX9u0f9aDPjYjSCggQAUvx+EKnjw3dvx2T+DMeXE9+E8alysHQiLzUWtTIX9pX6/tiN94N1bcfmdl4YoWMvMWskwd1wGiIs8J1Bifk7cGmV3bN6TWD0741b7/NgO2vReg8KwQzS6b58WFF3KpRFz9r+hL/iHAG9OHARPhAdNOzc01gecQRQqb0OkzUzDJb1b4MPpr6L5pY0heUweYhTWvhMkN5QqDl0lEE7NS0i1RVBsVJlChpoBuU3FQ79HiyQiPAJrSUu5oa2NnVSocWUnnQu16xWYJUemgl23GlWz9IoTQ3Yac4Hdv+rBntrPsLwbCUH7vq218ccZPaqomwAquiAbXo+J4bV7F2UBAeq2rH1mebg47yjXTEp2djZkWUZaWprhelpaGrKysmyfGTJkCJKTk7VPzZo1y1T2Jb1bGRdrQN+lsIWUe0bo+nNB2nIah651u6kjbn/pOjTv0ggJKfG44t7uYdbSuBsx7E6CLYia9ENPI3kkdOzXFq/++BT+zBuDh4fciYad6gdph80iaYinQo1RK8Nti2EnLVw319+yozTudHUpjXWX7Fj2acFIfKiiaCyFYRdtF7bfkhVlRp3q2OLeQ+A2HppUiaJJx/oYNu8tdL6mHQCgy3UdrHWyK0YOqAamgpcMV43RQABvTX4O8Ulx+HDGa7jqwV6IiIoInSe/IarB7NrG/uqeMALzqbmEG7hNg2u8bZnBxpVZhRbWXHRgwoKUYUxv034HzzZnxptz1kJ9bIerHRMT2m3amFeI8QjgkaED0KFva51BCVHEna/diD53d1PP7xHzsothFKxsJ8b4NNGuTytEidKg8gjeP2X9nGEfXQgo10xKWfDaa68hLy9P+xw8eLBM+Vz7ZF/ntU3cqXGCzxYkySPho7n/YQlDL46eCAm3vXS94dpLPzyJRu3qhc/oAJyGCc8IA5hYQkkZQCSCfg/3RmpaCgAgOjYKt71wLUYu+xB1W9ZyeNZ+52lbfthtEBcoQAtnbiHwfNfIF95QjICNia6YNmQ1HQeCsTwhoqxahKk/eLmAQ8ArxXhuDAAoCr5c/j5GrfsY4/eNxBdL30erbk21RxJS4pFcOcmYh0YIbexgFJa/rJ+WXa1+FcQlxAIAYuNjMGjkI5h06Bv0HtDNWOdg/eDIFJv6iM8XzdXYRJTFdEERmokwuFefFhzGiSUZZ0yCjD92LblKUljV1jZCTOJkiBEipjGrmUKuFVQniLZlGutes0lVxMTF4J0pL+HBD+5AxaqpKrNCYGRCACSmxuOxYffgvsG3IjY+Bve/e7tzNYigwrNl2Ezrio3qiv9u0qmBYzExCTF4/tvHnOtRXiD2fVk/FznKNZNSqVIleDweHDt2zHD92LFjSE9Pt30mOjoaSUlJhk9ZUKNhVbw29ll4IiRIEXo3eSIkEELw5Of3o+uNHTRpS0SkB73u6Ipp+T/ikstb4qvVQ5CanoJgzEF0XBTe/u0lNGpX33CdEIKvVg3BG+OfRWp6apg1psKENl+z0ZsDWt273dwZT37+gG2u/9vwCRp3bODYDoPe2pYxOZ1JxLkT84IE3DP4Vjz52f2CdEtY6MyMgBMIr6PVE+mKe7ujcYf6qFKrEpp2boh3pryI8fu/wu0vX4f0+mlBXqM9YYqK9uCLZe/hg+mv4q7Xb7LWOUw0al8Pjdo3QN2WtVCpegXbND9kDrfWyU4d54Dnv33cci0xNQFPfHY/EiskQO+zYPmFuGezsKbXrYLkiomQPA5MsIN0xsMC3cUlxaJuq9pBysUZLOJim0O120xYjenbXt4co7d9hg//eg3NL23MroYj+VA3P1KEhOi4KMc0DS+pg6k5o/H27y8bDZ9t6yqWbdPHVAGRgE/mvQ0AiIiMwO0vXY9x+77ChANf47dj3+HP/J/w3eb/4q3Jz2PorDcw8fAo3PLcNZrE5aZnr8YTn92H2IQYtTRWXEqVJLw56Xnc/soNel2cmHUDk031/mD93a5PSwyb/zYeG3YP4pJiDY+37tkM/1v/MarUrBSkL1xcKCC0nDuSd+rUCR07dsSIESMAqIZQtWrVwlNPPYVXX3015PP5+flITk5GXl5emRiWg5mHMW3kbKyduwmUUrTt1QLXDbwKdZqHViNRSrF91S5sX7Ubh3YeRm5WHrIPn0TFahXQ9vIWuHxAN8QnxYXMJ+APYMqImZj740IUnCpEjYZVcfUjfdDissYY89YkZKzYgaL8YuSdKFBPxQ2C5t2aoEmHBsg9noeUSknofXd3NLykXsg6FOYV4/NHR2Hbyh3weCQ0al8fve7oii7XtkdpsRfv3f4p1s7ZGD5PYmMTGRUbBV+JyWWQEAwc/gBueKofAPX9j3jqO0z/Zm6YBal454+X0eKypnjtqvexY/Vu7XrF6hXwwrePo8NVbUPmUVLixdvXf4T1f28Omq79VW3w2thnkFQhUbs284d5+Pq5MSgpKNWbJknodVdX/DNxKRSbKJ11mtfEyHUfITIytMh6/7YDeLjFCyHTiYiKicRrY5/FZTd1ckyTte84Xr3qfRzecfS08g6FKx7ogZe/fwoHMw9jyIDh2Llub9D0MfHRuPP1GxEZHYWS/BLUaFQVl93UCVExUVg4eTm+fn40Th4+FTQPySNBsbEvCRfEwyOhWu8lV0lCv4d6Y+X0tcg+lIOImAi06NIEt792AxqbNiGFuUXwlfpRnF+Md27+BPu2HrJmCECSCDpf1x6vj3sWvlI/htz9BVbPWq+VHx0bhQc+vAs3P9tfe2b3xn1489qhOHHoZJnaWLFaKoYtGIwaDauV6XkRJUWlWDVjPfKy81GlZiW079saEZERoJRi5KDRmDpiZsg86jSvidrNa2LbskwUF5SgesOquPbxK9Hnnu6IiFRVkn5fANuW74C32ItaTasjvU6VM6r3mdKM0ymjd+IARBAbBjRMBKgP8wrGndO6nm+UeyZl0qRJuO+++zBq1Ch07NgRn3/+OX755Rds377dYqtih39jwJUnHNmdhZysXFSrnwZviQ/TRs7GySM5qNGoGnre3hW1mlQ/p+Uv/WMVxrw5CScOZSMqOhKd+rdDfEo8fCVe1G5WE91u7oTNizKQfTgHKWnJSKtdGbnH85BcKQnNLm2EQzuO4p+JS1GYW4Sq9dLQ5+7uSKqYaCnn6N5jmPX9fGxftQuR0RHoekNHXHFvD2xcuAVD7hqBgtxCRER40LFfW7wweiASBGaQUgpfqQ8RURHweDyWvMNB1r7j+N/LP2HLkkz4SnyoWC0VPW+/FLe+eD1i4qIdn9u0OAMHMw6hZpPqaNW9GQCV8Zr94wJMHDIVJQUlSK+XhqdGPIhGl9R3zMcJ00bNxth3JqOkoBQVqqbiztduxGU3dcLuDfuQtecYNi/ZDkopWvdsjivu6RH2cQ871u7GvHFLUFJQjNa9WqDHbV2waPJyTBw6FYW5xaiQnow6LWohMioCtZpUx4qZ67Buzibt+cioCNRqXgPdbuqEO1690dLvmWt2Y+faPYiMjkC7K1sjLzsfK6evRURUBBpeUg9terUIWldZlrF1aSZOZeWiUo2KKCkowdfPjcGpE3lITE3AwC8eQvsrW2HtnI34e+winDqWh7TaldH3gV6IS4zBmjkb4YnwICE5HjnHcnH8YDY2LdyG/Ox8xCXG4qoHL8f1T/VDdFwURv9nIv4aNQfeUj+SKyTgmVGPokv/9qf9rjjysvNxbN8JxCTGoFbj4PNTURTk5xQiNj4a0bHO42zP5v3YMH8LKAWK8gqwZUkmDmYeRVFeMYgE1G9TF/e/cztSqiRj/bzNUGQFTTs3RJOODR3zPNs4vOsoZo9egGP7TyCpQiK639YFBMDRvceRXDkJDdvW1VTQ/yb+VSYl4a4zZ1IKx1/U9K3cMykA8OWXX+KTTz5BVlYW2rRpgy+++AKdOjnv/kT8f2NSXLhw4cJF2eEyKeULF8QBg0899RSeeuqp810NFy5cuHDh4qyBKgooKbsK8v9DnJQLgklx4cKFCxcuLjqYPZfK9PzFjXLt3ePChQsXLly4+P8LV5LiwoULFy5cnA8oVI0VVFb8P5CkuEyKCxcuXLhwcT5AKYAzsCtxmRQXLly4cOHCxbkAVSjoGUhSLgDn3DOGa5PiwoULFy5cuCiXcCUpLly4cOHCxfkAVXBm6h7XBdmFCxcuXLhwcQ7gqntCw1X3uHDhwoULFy7KJS56SQrnNPPz889zTVy4cOHCRXkHpxX/hpQiQL1npLIJwH8Wa1M+cdEzKQUFBQCAmjVDn1rswoULFy5cACrtSE5OPid5R0VFIT09HUuyZpxxXunp6YiKKvv5P+UdF8QBg2cCRVFw5MgRJCYmhn3iqx3y8/NRs2ZNHDx48KI9yOnfhtunZx9un54buP169lFe+5RSioKCAlSrVg2SdO4sIkpLS+Hz+c44n6ioKMTExJyFGpVPXPSSFEmSUKNGjbOWX1JSUrmaUBcD3D49+3D79NzA7dezj/LYp+dKgiIiJibmomYuzhZcw1kXLly4cOHCRbmEy6S4cOHChQsXLsolXCYlTERHR+Ptt99GdHT0+a7KRQO3T88+3D49N3D79ezD7VMX4eCiN5x14cKFCxcuXFyYcCUpLly4cOHChYtyCZdJceHChQsXLlyUS7hMigsXLly4cOGiXMJlUly4cOHChQsX5RIukxIGvvrqK9SpUwcxMTHo1KkTVq1adb6rVG6waNEiXHvttahWrRoIIZg6darhPqUUb731FqpWrYrY2Fj06dMHO3fuNKTJycnBgAEDkJSUhJSUFDz00EMoLCw0pNm0aRO6deuGmJgY1KxZEx9//PG5btp5w5AhQ9ChQwckJiaiSpUquOGGG5CZmWlIU1paioEDB6JixYpISEjAzTffjGPHjhnSHDhwAP3790dcXByqVKmCl156CYFAwJDmn3/+wSWXXILo6Gg0aNAAY8aMOdfNOy/4+uuv0apVKy1wWJcuXTBz5kztvtufZ46hQ4eCEIJBgwZp19x+dXHGoC6CYuLEiTQqKor+8MMPdOvWrfSRRx6hKSkp9NixY+e7auUCM2bMoG+88Qb9/fffKQA6ZcoUw/2hQ4fS5ORkOnXqVLpx40Z63XXX0bp169KSkhItzVVXXUVbt25NV6xYQRcvXkwbNGhA77zzTu1+Xl4eTUtLowMGDKBbtmyhEyZMoLGxsXTUqFH/VjP/VfTt25eOHj2abtmyhW7YsIFeffXVtFatWrSwsFBL8/jjj9OaNWvSefPm0TVr1tDOnTvTSy+9VLsfCARoixYtaJ8+fej69evpjBkzaKVKlehrr72mpdmzZw+Ni4ujzz//PN22bRsdMWIE9Xg8dNasWf9qe/8NTJs2jf711190x44dNDMzk77++us0MjKSbtmyhVLq9ueZYtWqVbROnTq0VatW9Nlnn9Wuu/3q4kzhMikh0LFjRzpw4EDttyzLtFq1anTIkCHnsVblE2YmRVEUmp6eTj/55BPtWm5uLo2OjqYTJkyglFK6bds2CoCuXr1aSzNz5kxKCKGHDx+mlFI6cuRImpqaSr1er5bmlVdeoY0bNz7HLSofOH78OAVAFy5cSClV+zAyMpJOnjxZS5ORkUEB0OXLl1NKVeZRkiSalZWlpfn6669pUlKS1o8vv/wybd68uaGs22+/nfbt2/dcN6lcIDU1lX733Xduf54hCgoKaMOGDencuXNpjx49NCbF7VcXZwOuuicIfD4f1q5diz59+mjXJElCnz59sHz58vNYswsDe/fuRVZWlqH/kpOT0alTJ63/li9fjpSUFLRv315L06dPH0iShJUrV2ppunfvbjjps2/fvsjMzMSpU6f+pdacP+Tl5QEAKlSoAABYu3Yt/H6/oV+bNGmCWrVqGfq1ZcuWSEtL09L07dsX+fn52Lp1q5ZGzIOnudjHtizLmDhxIoqKitClSxe3P88QAwcORP/+/S1td/vVxdnARX/A4JkgOzsbsiwbJhAApKWlYfv27eepVhcOsrKyAMC2//i9rKwsVKlSxXA/IiICFSpUMKSpW7euJQ9+LzU19ZzUvzxAURQMGjQIXbt2RYsWLQCobY6KikJKSoohrblf7fqd3wuWJj8/HyUlJYiNjT0XTTpv2Lx5M7p06YLS0lIkJCRgypQpaNasGTZs2OD2ZxkxceJErFu3DqtXr7bcc8epi7MBl0lx4aIcY+DAgdiyZQuWLFlyvqtywaNx48bYsGED8vLy8Ouvv+K+++7DwoULz3e1LlgcPHgQzz77LObOneue5uvinMFV9wRBpUqV4PF4LNbox44dQ3p6+nmq1YUD3kfB+i89PR3Hjx833A8EAsjJyTGksctDLONixFNPPYXp06djwYIFqFGjhnY9PT0dPp8Pubm5hvTmfg3VZ05pkpKSLsrdaVRUFBo0aIB27dphyJAhaN26NYYPH+72Zxmxdu1aHD9+HJdccgkiIiIQERGBhQsX4osvvkBERATS0tLcfnVxxnCZlCCIiopCu3btMG/ePO2aoiiYN28eunTpch5rdmGgbt26SE9PN/Rffn4+Vq5cqfVfly5dkJubi7Vr12pp5s+fD0VR0KlTJy3NokWL4Pf7tTRz585F48aNL0pVD6UUTz31FKZMmYL58+dbVF3t2rVDZGSkoV8zMzNx4MABQ79u3rzZwADOnTsXSUlJaNasmZZGzIOn+f8ythVFgdfrdfuzjOjduzc2b96MDRs2aJ/27dtjwIAB2ne3X12cMc635W55x8SJE2l0dDQdM2YM3bZtG3300UdpSkqKwRr9/zMKCgro+vXr6fr16ykA+umnn9L169fT/fv3U0pVF+SUlBT6xx9/0E2bNtHrr7/e1gW5bdu2dOXKlXTJkiW0YcOGBhfk3NxcmpaWRu+55x66ZcsWOnHiRBoXF3fRuiA/8cQTNDk5mf7zzz/06NGj2qe4uFhL8/jjj9NatWrR+fPn0zVr1tAuXbrQLl26aPe5a+eVV15JN2zYQGfNmkUrV65s69r50ksv0YyMDPrVV19dtK6dr776Kl24cCHdu3cv3bRpE3311VcpIYTOmTOHUur259mC6N1DqduvLs4cLpMSBkaMGEFr1apFo6KiaMeOHemKFSvOd5XKDRYsWEABWD733XcfpVR1Q37zzTdpWloajY6Opr1796aZmZmGPE6ePEnvvPNOmpCQQJOSkugDDzxACwoKDGk2btxIL7vsMhodHU2rV69Ohw4d+m818V+HXX8CoKNHj9bSlJSU0CeffJKmpqbSuLg4euONN9KjR48a8tm3bx/t168fjY2NpZUqVaIvvPAC9fv9hjQLFiygbdq0oVFRUbRevXqGMi4mPPjgg7R27do0KiqKVq5cmfbu3VtjUCh1+/NswcykuP3q4kxBKKX0/MhwXLhw4cKFCxcunOHapLhw4cKFCxcuyiVcJsWFCxcuXLhwUS7hMikuXLhw4cKFi3IJl0lx4cKFCxcuXJRLuEyKCxcuXLhw4aJcwmVSXLhw4cKFCxflEi6T4sKFCxcuXLgol3CZFBcuLiCMGTPGcKrs4MGD0aZNm7Naxj///ANCiOXMFRcuXLj4t+EyKS5cnEMcPHgQDz74IKpVq4aoqCjUrl0bzz77LE6ePHlW8n/xxRct55r8G9i4cSOuu+46VKlSBTExMahTpw5uv/127QyWffv2gRCCKlWqoKCgwPBsmzZtMHjwYO13z549QQgBIQQxMTFo1qwZRo4c+W82x4ULF+UULpPiwsU5wp49e9C+fXvs3LkTEyZMwK5du/DNN99oB1Tm5OQ4Puvz+cIqIyEhARUrVjxbVQ4LJ06cQO/evVGhQgXMnj0bGRkZGD16NKpVq4aioiJD2oKCAgwbNixkno888giOHj2Kbdu24bbbbsPAgQMxYcKEc9UEFy5cXCBwmRQXLs4RBg4ciKioKMyZMwc9evRArVq10K9fP/z99984fPgw3njjDS1tnTp18N577+Hee+9FUlISHn30UQCqeqdWrVqIi4vDjTfeaJHAmNU9999/P2644QYMGzYMVatWRcWKFTFw4EDDCdI///wz2rdvj8TERKSnp+Ouu+4ynEIbCkuXLkVeXh6+++47tG3bFnXr1kWvXr3w2WefWU5sfvrpp/Hpp5+GzD8uLg7p6emoV68eBg8ejIYNG2LatGlh18mFCxcXJ1wmxYWLc4CcnBzMnj0bTz75JGJjYw330tPTMWDAAEyaNAni0VnDhg1D69atsX79erz55ptYuXIlHnroITz11FPYsGEDevXqhffffz9k2QsWLMDu3buxYMEC/PjjjxgzZgzGjBmj3ff7/XjvvfewceNGTJ06Ffv27cP9998fdtvS09MRCAQwZcoUhDr6684770SDBg3w7rvvhp0/AMTGxoYtTXLhwsXFC5dJceHiHGDnzp2glKJp06a295s2bYpTp07hxIkT2rXLL78cL7zwAurXr4/69etj+PDhuOqqq/Dyyy+jUaNGeOaZZ9C3b9+QZaempuLLL79EkyZNcM0116B///4Gu5UHH3wQ/fr1Q7169dC5c2d88cUXmDlzJgoLC8NqW+fOnfH666/jrrvuQqVKldCvXz988sknOHbsmCUtIQRDhw7F//73P+zevTtk3rIsY+zYsdi0aRMuv/zysOrjwoWLixcuk+LCxTnE6Rwy3r59e8PvjIwMdOrUyXCtS5cuIfNp3rw5PB6P9rtq1aoGdcvatWtx7bXXolatWkhMTESPHj0AAAcOHAi7rh988AGysrLwzTffoHnz5vjmm2/QpEkTbN682ZK2b9++uOyyy/Dmm2865jdy5EgkJCQgNjYWjzzyCJ577jk88cQTYdfHhQsXFydcJsWFi3OABg0agBCCjIwM2/sZGRlITU1F5cqVtWvx8fFnpezIyEjDb0IIFEUBABQVFaFv375ISkrCuHHjsHr1akyZMgVA+Ma6HBUrVsStt96KYcOGISMjA9WqVXM0kh06dCgmTZqE9evX294fMGAANmzYgL1796KoqAiffvopJMldnly4+P8OdxVw4eIcoGLFirjiiiswcuRIlJSUGO5lZWVh3LhxuP3220EIccyjadOmWLlypeHaihUrzqhe27dvx8mTJzF06FB069YNTZo0OS2jWSdERUWhfv36Fu8ejo4dO+Kmm27Cq6++ans/OTkZDRo0QPXq1V3mxIULFxrc1cCFi3OEL7/8El6vF3379sWiRYtw8OBBzJo1C1dccQWqV6+ODz74IOjzzzzzDGbNmoVhw4Zh586d+PLLLzFr1qwzqlOtWrUQFRWFESNGYM+ePZg2bRree++908pj+vTpuPvuuzF9+nTs2LEDmZmZGDZsGGbMmIHrr7/e8bkPPvgA8+fPR2Zm5hm1wYULF/9/4DIpLlycIzRs2BBr1qxBvXr1cNttt6F+/fp49NFH0atXLyxfvhwVKlQI+nznzp3x7bffYvjw4WjdujXmzJmD//znP2dUp8qVK2PMmDGYPHkymjVrhqFDh4YVx0REs2bNEBcXhxdeeAFt2rRB586d8csvv+C7777DPffc4/hco0aN8OCDD6K0tPSM2uDChYv/PyD0dCz7XLhw4cKFCxcu/iW4khQXLly4cOHCRbmEy6S4cOHChQsXLsolXCbFhQsXLly4cFEu4TIpLly4cOHChYtyCZdJceHChQsXLlyUS7hMigsXLly4cOGiXMJlUly4cOHChQsX5RIuk+LChQsXLly4KJdwmRQXLly4cOHCRbmEy6S4cOHChQsXLsolXCbFhQsXLly4cFEu4TIpLly4cOHChYtyif8DlxYQ9D0TUF0AAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "# mark in Kayle as pipeline step: Pipeline step: manhattan_known: Depends on: saliency_known \n", + "model_folder = f\"a-{time}-model\"\n", + "p_values_predicted_np = np.load('p_values_predicted_np.npy',\n", + " allow_pickle=True)\n", + "\n", + "neg_log = -1 * np.log10(p_values_predicted_np)\n", + "slug = np.arange(p_values_predicted_np.shape[0])\n", + "\n", + "pt = plt.scatter(x = slug, y = neg_log, c=neg_log)\n", + "plt.title(f\"Manhattan Plot for {experiment_description} - predicted\")\n", + "plt.xlabel(\"Ordinal SNP\")\n", + "plt.ylabel(\"- log10 predicted P values\")\n", + "cbar = plt.colorbar(pt)\n", + "cbar.set_label(\"- log10 predicted P values\")\n", + "plt.savefig(f\"{model_folder}-manhattan-predicted\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "bae392ab-a377-49a1-afaf-b5330892d89a", + "metadata": { + "tags": [ + "block:qq_plot", + "prev:saliency_observed", + "prev:saliency_predicted" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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+eUX7NixAw0aNAAAmJiY4Ny5c+jWrRveeusthISEwNfXF4cPH1a5whUWFgZPT0+0a9cOnTt3RqtWrbB27Votf4J56SujqD3PUrVq1bBjxw74+flhx44dGDVqFPbv348ff/wR+/btw9GjRzUuRh84zxIRERWXIedZei9yKCpYaT7PUk5GNn5v/z2/316jr4yidix99OiRckDW33//jffffx9vvfUWhg0bhvPnz2tUBBERUXljjNtwZZ2+MoraYcnJyQmXLl2CXC5HREQE2rdvDwDIzMyEiYmJxoUQERGVJ8Z43UlZp6+MovbUAUOHDkWfPn3g4uICiUSinNnzxIkT8PT01LgQIiIiIm3oK6OoHZZmzpyJBg0a4M6dO3j//feVA7hMTEzyfa8MERER5aXtrTTehstLXxlFo0kpe/fuDQB48eKFct3gwYM1LoKIiKi8YVjSD31kFLXHLMnlcsyePRtVq1aFtbU1rl+/DgCYNm2a8nE9IiIiIkPTV0ZROyzNnTsXP/zwA77++muYmf3/I48NGjTA+vXrNS6EiIioPOHTcLqnr4yidljavHkz1q5di+DgYJWR5Y0bNy7wrcVERESkimFJ9/SVUdQes3Tv3j3Url07z3qFQoGcnByNCyEiIipPBKDli3TpTfrKKGpfWapXrx4OHz6cZ/0vv/wCHx8fjQshIiIi0oa+MoraV5amT5+OwYMH4969e1AoFPjtt9+QkJCAzZs3Y9euXRoXQkREVJ7waTjd01dGUfvKUvfu3fHnn3/in3/+gZWVFaZPn474+Hj8+eefypkyiYiIqHAcs6R7+sooGs2z9PbbbyMyMlLjgxIRERHpgz4yikZhiYiIiLTD23Clh9phSSqVQiIp+Bckl8u1KoiIiKg8YFjSPX1lFLXD0u+//67yOScnB2fOnMGmTZvw5ZdfalQEERERkbb0lVHUDkvdu3fPs653796oX78+tm3bhpCQEI2LISIiKi+EkEBocXVIm75llb4yitpPwxWkefPmiIqK0tXuiIiIyjQFJFovVDzaZhSdhKXnz59j+fLlqFq1qi52R0RERKQTusgoat+Gq1ixosrgKSEEnj59CktLS2zZskXjQoiIiMoTDvDWPX1lFLXD0pIlS1QKkUqlcHR0hL+/PypWrKhxIUREROUJxyzpnr4yitphaciQIRofjIiIiF7hlSXd01dG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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "# mark in Kayle as pipeline step: qq plot\n", + "\n", + "model_folder = f\"a-{time}-model\"\n", + "\n", + "p_values_observed_np = np.load('p_values_observed_np.npy',\n", + " allow_pickle=True)\n", + "\n", + "neg_log_o = -1 * np.log10(p_values_observed_np)\n", + "\n", + "\n", + "p_values_predicted_np = np.load('p_values_predicted_np.npy',\n", + " allow_pickle=True)\n", + "\n", + "neg_log_p = -1 * np.log10(p_values_predicted_np)\n", + "\n", + "pt = plt.scatter(x = neg_log_o, y = neg_log_p, c= neg_log_p - neg_log_o)\n", + "plt.title(f\"QQ Plot for {experiment_description}\")\n", + "plt.xlabel(\"- log10 observed P values\")\n", + "plt.ylabel(\"- log10 predicted P values\")\n", + "cbar = plt.colorbar(pt)\n", + "cbar.set_label(\"- log10 predicted P values - log10 observed\")\n", + "plt.savefig(f\"{model_folder}-manhattan-predicted\")\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "be03ced0-99f2-43fd-b29e-407d0f85212c", + "metadata": { + "tags": [] + }, + "source": [ + "\n", + "## There is a second notebook to run after you run this pipeline. Please find the model folder for the best model that Katib found.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "4b240cfb-b264-49dc-ae2c-73b10ef8a69d", + "metadata": { + "tags": [ + "pipeline-metrics" + ] + }, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'val_mean_absolute_error' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn [39], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[43mval_mean_absolute_error\u001b[49m)\n", + "\u001b[0;31mNameError\u001b[0m: name 'val_mean_absolute_error' is not defined" + ] + } + ], + "source": [ + "\n", + "print(val_mean_absolute_error)\n" + ] + } + ], + "metadata": { + "environment": { + "kernel": "python3", + "name": "tf2-gpu.2-10.m100", + "type": "gcloud", + "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-10:m100" + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "kubeflow_notebook": { + "autosnapshot": true, + "deploy_config": {}, + "docker_image": "", + "experiment": { + "id": "new", + "name": "gwas-7-d" + }, + "experiment_name": "gwas-10-d", + "katib_metadata": { + "algorithm": { + "algorithmName": "bayesianoptimization", + "algorithmSettings": [ + { + "name": "random_state", + "value": "10" + }, + { + "name": "acq_optimizer", + "value": "auto" + }, + { + "name": "acq_func", + "value": "gp_hedge" + }, + { + "name": "base_estimator", + "value": "GP" + } + ] + }, + "maxFailedTrialCount": 10, + "maxTrialCount": 40, + "objective": { + "additionalMetricNames": [], + "goal": 0.05, + "objectiveMetricName": "val-mean-absolute-error", + "type": "minimize" + }, + "parallelTrialCount": 2, + "parameters": [ + { + "feasibleSpace": { + "list": [ + "IMP_height.txt" + ] + }, + "name": "data_file_to_run", + "parameterType": "categorical" + }, + { + "feasibleSpace": { + "list": [ + "GWAS on soy height" + ] + }, + "name": "experiment_description", + "parameterType": "categorical" + }, + { + "feasibleSpace": { + "max": "0.3", + "min": "0.00001", + "step": "0.00001" + }, + "name": "learning_rate", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": ".98", + "min": "0.0001", + "step": "0.0001" + }, + "name": "conv_1_dropout_rate", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "conv_1_kernel_l1", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "conv_1_kernel_l2", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "conv_1_bias_l2", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "conv_1_activity_l2", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "conv_x_kernel_l1", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "conv_x_kernel_l2", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "conv_x_bias_l2", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "conv_x_activity_l2", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "dense_x_kernel_l1", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "dense_x_kernel_l2", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "dense_x_bias_l2", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "dense_x_activity_l2", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "dense_out_kernel_l1", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "dense_out_kernel_l2", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "dense_out_bias_l2", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": ".0000001", + "step": "0.0000001" + }, + "name": "dense_out_activity_l2", + "parameterType": "double" + }, + { + "feasibleSpace": { + "list": [ + "TruncatedNormal", + "glorot_uniform", + "GlorotNormal", + "HeNormal", + "random_normal" + ] + }, + "name": "conv_initializer", + "parameterType": "categorical" + }, + { + "feasibleSpace": { + "list": [ + "TruncatedNormal", + "glorot_uniform", + "GlorotNormal", + "HeNormal", + "random_normal" + ] + }, + "name": "dese_initializer", + "parameterType": "categorical" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.01", + "step": "0.1" + }, + "name": "dropout_rate", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "5", + "min": "1", + "step": "1" + }, + "name": "num_dense_layers", + "parameterType": "int" + }, + { + "feasibleSpace": { + "max": "20", + "min": "1", + "step": "1" + }, + "name": "num_dense_units", + "parameterType": "int" + }, + { + "feasibleSpace": { + "list": [ + "elu", + "relu", + "gelu", + "linear" + ] + }, + "name": "conv_activation", + "parameterType": "categorical" + }, + { + "feasibleSpace": { + "list": [ + "elu", + "relu", + "gelu", + "linear" + ] + }, + "name": "activation", + "parameterType": "categorical" + }, + { + "feasibleSpace": { + "list": [ + "huber_loss", + "mean_absolute_error", + "mse" + ] + }, + "name": "loss", + "parameterType": "categorical" + }, + { + "feasibleSpace": { + "max": "5", + "min": "1.2", + "step": "0.01" + }, + "name": "final_activation_scale_factor", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "40", + "min": "1", + "step": "1" + }, + "name": "batch_size", + "parameterType": "int" + }, + { + "feasibleSpace": { + "max": "10", + "min": "1", + "step": "1" + }, + "name": "epochs", + "parameterType": "int" + }, + { + "feasibleSpace": { + "list": [ + "2023-01-051310" + ] + }, + "name": "time", + "parameterType": "categorical" + } + ] + }, + "katib_run": true, + "pipeline_description": "gwas-10-d", + "pipeline_name": "gwas-10-d", + "snapshot_volumes": true, + "volumes": [ + { + "annotations": [], + "mount_point": "/home/jovyan", + "name": "gwas-11-a-workspace-gxcvc", + "size": 5, + "size_type": "Gi", + "snapshot": false, + "type": "clone" + } + ] + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.0" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/notebooks/DL-gwas-gcp-example/2-mse-run-second-in-jupyter.ipynb b/tutorials/notebooks/DL-gwas-gcp-example/2-mse-run-second-in-jupyter.ipynb new file mode 100644 index 0000000..8d260ac --- /dev/null +++ b/tutorials/notebooks/DL-gwas-gcp-example/2-mse-run-second-in-jupyter.ipynb @@ -0,0 +1,1057 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "619de0db-3878-4254-93a4-4404553d0ecf", + "metadata": { + "tags": [ + "imports" + ] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-01-05 21:21:20.751703: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX2 AVX512F AVX512_VNNI FMA\n", + "To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n", + "2023-01-05 21:21:20.895255: I tensorflow/core/util/port.cc:104] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.\n", + "2023-01-05 21:21:20.899185: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory\n", + "2023-01-05 21:21:20.899205: I tensorflow/compiler/xla/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.\n", + "2023-01-05 21:21:21.754779: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer.so.7'; dlerror: libnvinfer.so.7: cannot open shared object file: No such file or directory\n", + "2023-01-05 21:21:21.754858: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer_plugin.so.7'; dlerror: libnvinfer_plugin.so.7: cannot open shared object file: No such file or directory\n", + "2023-01-05 21:21:21.754864: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.\n", + "/usr/local/lib/python3.8/dist-packages/scipy/__init__.py:138: UserWarning: A NumPy version >=1.16.5 and <1.23.0 is required for this version of SciPy (detected version 1.24.1)\n", + " warnings.warn(f\"A NumPy version >={np_minversion} and <{np_maxversion} is required for this version of \"\n" + ] + } + ], + "source": [ + "\n", + "# Don't use Kale on this one.\n", + "import pendulum\n", + "import numpy as np\n", + "import pandas as pd\n", + "import warnings\n", + "import tensorflow as tf\n", + "from tensorflow.keras.models import Model\n", + "from tensorflow.keras.layers import Dense, Flatten, Conv1D, Dropout, BatchNormalization, Lambda\n", + "from tensorflow.keras.regularizers import l1,l2, L1L2\n", + "import matplotlib.pyplot as plt\n", + "from scipy import stats\n" + ] + }, + { + "cell_type": "markdown", + "id": "365d8767-2dd3-4317-b556-2273f1510e19", + "metadata": { + "tags": [] + }, + "source": [ + "## Get the best params from Katib from running the first notebook with Kale \n", + "![assets/x002-final-results-page.png](assets/x002-final-results-page.png)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "fd604bf6-0d00-4178-9deb-28465c915c29", + "metadata": { + "tags": [ + "pipeline-parameters" + ] + }, + "outputs": [], + "source": [ + "# Get the best params from Katib from running the first notebook with Kale \n", + "data_file_to_run = \"IMP_height.txt\"\n", + "\n", + "experiment_description = \"Soy Height GWAS\"\n", + "\n", + "learning_rate = 0.000036 # 0.0001957\n", + "conv_1_dropout_rate = 0.60 # Dropout rate for first convolutional layer\n", + "conv_1_kernel_l1 = 0.0000007 # L1 and l2 regularization for the first conv1d layer's weights\n", + "conv_1_kernel_l2 = 0.00045\n", + "conv_1_bias_l2 = 0.000064 # L1 and l2 regularization for the first conv1d layer's bias\n", + "conv_1_activity_l2 = 0.004 # L1 and l2 activity regularization for the first conv1d layer\n", + "\n", + "conv_x_kernel_l1 = 0.7\n", + "conv_x_kernel_l2 = 0.14\n", + "conv_x_bias_l2 = 0.007\n", + "conv_x_activity_l2 = 0.000005\n", + "\n", + "dense_x_kernel_l1 = 0.018\n", + "dense_x_kernel_l2 = 0.0000015\n", + "dense_x_bias_l2 = 0.0017\n", + "dense_x_activity_l2 = 0.0005\n", + "\n", + "dense_out_kernel_l1 = 0.0000007\n", + "dense_out_kernel_l2 = .0000024\n", + "dense_out_bias_l2 = 0.023\n", + "dense_out_activity_l2 = 0.024\n", + "\n", + "conv_initializer = 'glorot_uniform' # 'TruncatedNormal' 'TruncatedNormal' 'glorot_uniform' \"GlorotNormal\", \"HeNormal\" 'random_normal' \n", + "dese_initializer = 'HeNormal' # \"GlorotNormal\" # 'TruncatedNormal' # \"GlorotUniform\"\n", + "\n", + "dropout_rate = 0.055\n", + "num_dense_layers = 3\n", + "num_dense_units = 13\n", + "\n", + "conv_activation = \"gelu\" # \"linear\"\n", + "activation = \"linear\"\n", + "loss = 'mean_squared_error' # 'mean_absolute_error' # # 'huber_loss' \n", + "\n", + "final_activation_scale_factor = 2.12\n", + "\n", + "batch_size = 25\n", + "epochs = 15\n", + "\n", + "time = pendulum.now(tz='America/New_York').__str__()[:16].replace('T','').replace(':','').replace('_','-')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "e06747ae-77b6-4524-b803-fc0d87512fbb", + "metadata": { + "tags": [ + "block:preprocessing" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Preprocessing successful\n" + ] + } + ], + "source": [ + "# Don't run in kale this time\n", + "\n", + "ht = pd.read_csv(data_file_to_run, sep = '\\t')\n", + "ht_pd = ht_relevant_cols = ht.drop(columns = ['strain', 'height', 'folds'])\n", + "phenotypes_norm = ht_pd.pop(\"norm_phe\")\n", + "for col in ht_pd.columns:\n", + " ht_pd[col] = ht_pd[col].astype('category')\n", + "ohe_height_genotypes = pd.get_dummies(ht_pd)\n", + "\n", + "def train_test_splitting(row, split_ratio):\n", + " string_of_row = \"\".join([str(l) for l in list(row.values)])\n", + " return (abs(hash(string_of_row)) % 10) / 10 < split_ratio\n", + "belongs_in_train_set_index =\\\n", + " np.array([train_test_splitting(ohe_height_genotypes.loc[i],0.7)\n", + " for i in np.arange(ht_pd.shape[0])])\n", + "\n", + "train_ohe_height_genotypes = ohe_height_genotypes[belongs_in_train_set_index]\n", + "val_ohe_height_genotypes = ohe_height_genotypes[~belongs_in_train_set_index]\n", + "\n", + "train_phenotypes_norm = phenotypes_norm[belongs_in_train_set_index]\n", + "val_phenotypes_norm = phenotypes_norm[~belongs_in_train_set_index]\n", + "\n", + "# Make sure the number of rows in test and train add up to the original rows\n", + "assert train_ohe_height_genotypes.shape[0] + val_ohe_height_genotypes.shape[0] == ht_pd.shape[0]\n", + "\n", + "# Data as a numpy array...\n", + "train_ohe_height_genotypes_np = train_ohe_height_genotypes.values\n", + "val_ohe_height_genotypes_np = val_ohe_height_genotypes.values\n", + "\n", + "train_phenotypes_norm_np = train_phenotypes_norm.values\n", + "val_phenotypes_norm_np = val_phenotypes_norm.values\n", + "\n", + "# Reshape to fit the conv1D network. \n", + "train_np_ohe_reshaped_for_conv_1_d =\\\n", + " train_ohe_height_genotypes_np.reshape((train_ohe_height_genotypes_np.shape[0],\n", + " train_ohe_height_genotypes_np.shape[1], 1))\n", + "val_np_ohe_reshaped_for_conv_1_d =\\\n", + " val_ohe_height_genotypes_np.reshape((val_ohe_height_genotypes_np.shape[0],\n", + " val_ohe_height_genotypes_np.shape[1],1))\n", + "\n", + "np.save('train_data_ready', train_np_ohe_reshaped_for_conv_1_d)\n", + "np.save('val_data_ready', val_np_ohe_reshaped_for_conv_1_d)\n", + "np.save('train_labels_ready', train_phenotypes_norm_np)\n", + "np.save('val_labels_ready',val_phenotypes_norm_np)\n", + "\n", + "# Since the data was reshaped for the convolutional 1D neural network, we are also saving the \n", + "# non-reshaped data to be used for calculating saliency.\n", + "\n", + "np.save(\"val_snps_for_saliency\", val_ohe_height_genotypes_np)\n", + "\n", + "print(\"Preprocessing successful\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "dd01e8b2-78ba-4315-9e12-9153b1c57ce5", + "metadata": { + "tags": [ + "block:train", + "prev:preprocessing" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/15\n", + "145/145 [==============================] - 55s 343ms/step - loss: 184.9438 - mean_absolute_error: 1.1132 - val_loss: 145.5629 - val_mean_absolute_error: 0.7159\n", + "Epoch 2/15\n", + "145/145 [==============================] - 53s 366ms/step - loss: 134.6771 - mean_absolute_error: 1.0567 - val_loss: 127.3722 - val_mean_absolute_error: 0.7289\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:absl:Found untraced functions such as _jit_compiled_convolution_op, _jit_compiled_convolution_op, _jit_compiled_convolution_op, _jit_compiled_convolution_op, _update_step_xla while saving (showing 5 of 5). These functions will not be directly callable after loading.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO:tensorflow:Assets written to: a-2023-01-051641-model/assets\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:tensorflow:Assets written to: a-2023-01-051641-model/assets\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a-2023-01-051641-model\n" + ] + }, + { + "data": { + "image/png": "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6zyuwWCATqezWIiIiKhtavLAUlBQAB8fH4t1Pj4+0Ol0uH79xmx+oaGhSEhIQGJiIt577z3k5ORg5MiRKC21PYVxXFwc3N3dxSUgIKBJz4OIiIhajiSmuBs3bhwmTZqE/v37IyIiAocOHUJJSQn27dtnc5+YmBhotVpxycvLa8YaExERUXNq8mHNvr6+KCwstFhXWFgIjUYDJyfrk894eHigZ8+eyMrKsnlclUoFlUp1R+tKRERE0tTkLSxhYWFISkqyWHfkyBGEhYXZ3KesrAyXLl2Cn59fU1ePiIiIWgG7A0tZWRnS09ORnp4O4Maw5fT0dLGTbExMDGbNmiWWnz9/PrKzs/H888/j/Pnz2LhxI/bt24elS5eKZZYtW4avvvoKly9fxjfffIOHH34YCoUC06ZNu83TIyIiorbA7ltCp06dwpgxY8T30dHRAICoqCgkJCQgPz/fYoRP165dcfDgQSxduhRvvfUW7rrrLmzZssViSPMvv/yCadOmobi4GF5eXhgxYgROnjwJLy+v2zk3IiIiaiNkgiAILV2JO0Gn08Hd3R1arRYaje2HQhEREZF0NPT7WxKjhIiIiIjqwsBCREREksfAQkRERJLHwEJERESSx8BCREREksfAQkRERJLHwEJERESSx8BCREREksfAQkRERJLHwEJERESSx8BCREREksfAQkRERJLHwEJERESSx8BCREREksfAQkRERJLHwEJERESSx8BCREREksfAQkRERJLHwEJERESSx8BCREREksfAQkRERJLHwEJERESSx8BCREREksfAQkRERJLHwEJERESSx8BCREREksfAQkRERJLHwEJERESSx8BCREREksfAQkRERJLHwEJERESSZ3dg+frrrxEZGQl/f3/IZDJ88skn9e6TnJyMQYMGQaVSoXv37khISKhVZsOGDQgMDIRarUZoaChSU1PtrRoRERG1UXYHFr1ej5CQEGzYsKFB5XNycvDggw9izJgxSE9Px5IlS/Dkk0/i8OHDYpm9e/ciOjoasbGxOH36NEJCQhAREYErV67YWz0iIiJqg2SCIAiN3lkmw8cff4yJEyfaLPP3v/8dBw8exNmzZ8V1U6dORUlJCRITEwEAoaGhGDp0KN59910AgNlsRkBAABYtWoTly5c3qC46nQ7u7u7QarXQaDSNPSUiIiJqRg39/m7yPiwpKSkIDw+3WBcREYGUlBQAgNFoRFpamkUZuVyO8PBwsYw1BoMBOp3OYiEiIqK2qckDS0FBAXx8fCzW+fj4QKfT4fr16ygqKoLJZLJapqCgwOZx4+Li4O7uLi4BAQFNUn8iIiJqea12lFBMTAy0Wq245OXltXSViIiIqIk4NPUH+Pr6orCw0GJdYWEhNBoNnJycoFAooFAorJbx9fW1eVyVSgWVStUkdSYiIiJpafIWlrCwMCQlJVmsO3LkCMLCwgAASqUSgwcPtihjNpuRlJQkliEiIqL2ze7AUlZWhvT0dKSnpwO4MWw5PT0dubm5AG7cqpk1a5ZYfv78+cjOzsbzzz+P8+fPY+PGjdi3bx+WLl0qlomOjsbmzZuxY8cOZGRkYMGCBdDr9ZgzZ85tnh4RERG1BXbfEjp16hTGjBkjvo+OjgYAREVFISEhAfn5+WJ4AYCuXbvi4MGDWLp0Kd566y3cdddd2LJlCyIiIsQyU6ZMwdWrV7Fq1SoUFBRgwIABSExMrNURl4iIiNqn25qHRUo4DwsREVHrI5l5WIiIiIhuFwMLERERSR4DCxEREUkeAwsRERFJHgMLERERSR4DCxEREUkeAwsRERFJHgMLERERSR4DCxEREUkeAwsRERFJHgMLERERSR4DCxEREUkeAwsRERFJHgMLERERSR4DCxEREUkeAwsRERFJHgMLERERSR4DCxEREUkeAwsRERFJHgMLERERSR4DCxEREUkeAwsRERFJHgMLERERSR4DCxEREUkeAwsRERFJHgMLERERSR4DCxEREUkeAwsRERFJHgMLERERSR4DCxEREUkeAwsRERFJXqMCy4YNGxAYGAi1Wo3Q0FCkpqbaLFtZWYm1a9eiW7duUKvVCAkJQWJiokWZ1atXQyaTWSy9e/duTNWIiIioDbI7sOzduxfR0dGIjY3F6dOnERISgoiICFy5csVq+RUrVuD999/HO++8g3PnzmH+/Pl4+OGHcebMGYty/fr1Q35+vrgcP368cWdEREREbY7dgSU+Ph5z587FnDlz0LdvX2zatAnOzs7Ytm2b1fI7d+7ECy+8gPHjxyMoKAgLFizA+PHj8cYbb1iUc3BwgK+vr7h4eno27oyIiIiozbErsBiNRqSlpSE8PPzmAeRyhIeHIyUlxeo+BoMBarXaYp2Tk1OtFpSLFy/C398fQUFBmDFjBnJzc+2pGhEREbVhdgWWoqIimEwm+Pj4WKz38fFBQUGB1X0iIiIQHx+Pixcvwmw248iRIzhw4ADy8/PFMqGhoUhISEBiYiLee+895OTkYOTIkSgtLbVZF4PBAJ1OZ7EQERFR29Tko4Teeust9OjRA71794ZSqcTChQsxZ84cyOU3P3rcuHGYNGkS+vfvj4iICBw6dAglJSXYt2+fzePGxcXB3d1dXAICApr6VIiIiKiF2BVYPD09oVAoUFhYaLG+sLAQvr6+Vvfx8vLCJ598Ar1ej59//hnnz5+Hq6srgoKCbH6Oh4cHevbsiaysLJtlYmJioNVqxSUvL8+eUyEiIqJWxK7AolQqMXjwYCQlJYnrzGYzkpKSEBYWVue+arUanTt3RlVVFT766CNMmDDBZtmysjJcunQJfn5+NsuoVCpoNBqLhYiIiNomu28JRUdHY/PmzdixYwcyMjKwYMEC6PV6zJkzBwAwa9YsxMTEiOW//fZbHDhwANnZ2Th27BjGjh0Ls9mM559/XiyzbNkyfPXVV7h8+TK++eYbPPzww1AoFJg2bdodOEUiIiJq7Rzs3WHKlCm4evUqVq1ahYKCAgwYMACJiYliR9zc3FyL/ikVFRVYsWIFsrOz4erqivHjx2Pnzp3w8PAQy/zyyy+YNm0aiouL4eXlhREjRuDkyZPw8vK6/TMkIiKiVk8mCILQ0pW4E3Q6Hdzd3aHVanl7iIhsMplMqKysbOlqELUbjo6OUCgUNrc39Pvb7hYWIqLWSBAEFBQUoKSkpKWrQtTueHh4wNfXFzKZrNHHYGAhonahOqx4e3vD2dn5tv7jJKKGEQQB5eXl4uN76hpMUx8GFiJq80wmkxhWOnXq1NLVIWpXnJycAABXrlyBt7d3nbeH6tLkE8cREbW06j4rzs7OLVwTovap+mfvdvqPMbAQUbvB20BELeNO/OwxsBAREZHkMbAQEVGzGz16NJYsWdJkx09OToZMJuOosDaEgYWIiAjA7NmzMXHixJauBtnAwEJERCQh1jqmGo3GRh2rsftJEQMLEZGEjR49GosWLcKSJUvQoUMH+Pj4YPPmzeIz3Nzc3NC9e3f873//E/c5e/Ysxo0bB1dXV/j4+GDmzJkoKioStycmJmLEiBHw8PBAp06d8NBDD+HSpUvi9suXL0Mmk+HAgQMYM2YMnJ2dERISgpSUlAbVubi4GNOmTUPnzp3h7OyM4OBg7N69u1a5qqoqLFy4EO7u7vD09MTKlStRc/L1jRs3okePHlCr1fDx8cFjjz0mbjMYDFi8eDG8vb2hVqsxYsQIfPfddzbrtHr1agwYMMBi3fr16xEYGChu37FjBz799FPIZDLIZDIkJycDAPLy8jB58mR4eHigY8eOmDBhAi5fvtygawEAW7ZsQZ8+faBWq9G7d29s3LhR3FZ9rffu3YtRo0ZBrVZj165dYmvPSy+9BH9/f/Tq1QsA8OOPP+K+++6Dk5MTOnXqhHnz5qGsrEw8nq392gIGFiJqlwRBQLmxqtmXxjwNZceOHfD09ERqaioWLVqEBQsWYNKkSRg+fDhOnz6NBx54ADNnzkR5eTlKSkpw3333YeDAgTh16hQSExNRWFiIyZMni8fT6/WIjo7GqVOnkJSUBLlcjocffhhms9nic1988UUsW7YM6enp6NmzJ6ZNm4aqqqp661tRUYHBgwfj4MGDOHv2LObNm4eZM2ciNTW11nk5ODggNTUVb731FuLj47FlyxYAwKlTp7B48WKsXbsWmZmZSExMxJ///Gdx3+effx4fffQRduzYgdOnT6N79+6IiIjAtWvX7L6+wI2H8E6ePBljx45Ffn4+8vPzMXz4cFRWViIiIgJubm44duwYTpw4AVdXV4wdO7ZBrRe7du3CqlWr8NJLLyEjIwMvv/wyVq5ciR07dliUW758OZ555hlkZGQgIiICAJCUlITMzEwcOXIEn332GfR6PSIiItChQwd899132L9/P44ePYqFCxdaHOvW/doKThxHRO3S9UoT+q463Oyfe25tBJyV9v3XGxISghUrVgAAYmJi8Morr8DT0xNz584FAKxatQrvvfcefvjhBxw9ehQDBw7Eyy+/LO6/bds2BAQE4MKFC+jZsyceffRRi+Nv27YNXl5eOHfuHO655x5x/bJly/Dggw8CANasWYN+/fohKysLvXv3rrO+nTt3xrJly8T3ixYtwuHDh7Fv3z4MGzZMXB8QEIA333wTMpkMvXr1wo8//og333wTc+fORW5uLlxcXPDQQw/Bzc0NXbp0wcCBAwHcCFzvvfceEhISMG7cOADA5s2bceTIEWzduhXPPfecXdcXAFxdXeHk5ASDwQBfX19x/b/+9S+YzWZs2bJFHJq7fft2eHh4IDk5GQ888ECdx42NjcUbb7yBRx55BADQtWtXnDt3Du+//z6ioqLEckuWLBHLVHNxccGWLVugVCrFc6yoqMCHH34IFxcXAMC7776LyMhIvPrqq+JDiG/dr61gCwsRkcT1799ffK1QKNCpUycEBweL66q/qK5cuYLvv/8eX375JVxdXcWlOmBU3/a5ePEipk2bhqCgIGg0GvG2SG5urs3PrZ5SvXqK9bqYTCasW7cOwcHB6NixI1xdXXH48OFax//Tn/5kMT9HWFgYLl68CJPJhL/85S/o0qULgoKCMHPmTOzatQvl5eXieVRWVuLee+8V93V0dMSwYcOQkZFRb/3s8f333yMrKwtubm7i9ezYsSMqKiosbqNZo9frcenSJTzxxBMWfx//+Mc/au07ZMiQWvsHBwdbhI6MjAyEhISIYQUA7r33XpjNZmRmZtrcr61gCwsRtUtOjgqcWxvRIp9rL0dHR4v3MpnMYl31l77ZbEZZWZn4G/etqkNHZGQkunTpgs2bN8Pf3x9msxn33HNPrVsctj6jPv/85z/x1ltvYf369QgODoaLiwuWLFliVwdQNzc3nD59GsnJyfj888+xatUqrF69us5+KnWRy+W1bsc1ZNbVsrIyDB48GLt27aq1zcvLq959gRstI6GhoRbbbp2evmYIqWtdQzR2P6ljYCGidkkmk9l9a6Y1GDRoED766CMEBgbCwaH2+RUXFyMzMxObN2/GyJEjAQDHjx+/o3U4ceIEJkyYgP/7v/8DcCPkXLhwAX379rUo9+2331q8P3nyJHr06CF+mTs4OCA8PBzh4eGIjY2Fh4cHvvjiC0RERECpVOLEiRPo0qULgBvh47vvvrM5t4uXlxcKCgogCIIYvtLT0y3KKJVKmEwmi3WDBg3C3r174e3tDY1GY9d18PHxgb+/P7KzszFjxgy79rWmT58+SEhIgF6vF0PJiRMnIJfL21TnWlt4S4iIqA15+umnce3aNUybNg3fffcdLl26hMOHD2POnDkwmUzo0KEDOnXqhA8++ABZWVn44osvEB0dfUfr0KNHDxw5cgTffPMNMjIy8NRTT6GwsLBWudzcXERHRyMzMxO7d+/GO++8g2eeeQYA8Nlnn+Htt99Geno6fv75Z3z44Ycwm83o1asXXFxcsGDBAjz33HNITEzEuXPnMHfuXJSXl+OJJ56wWqfRo0fj6tWreO2113Dp0iVs2LDBYmQVAAQGBuKHH35AZmYmioqKUFlZiRkzZsDT0xMTJkzAsWPHkJOTg+TkZCxevBi//PJLvddizZo1iIuLw9tvv40LFy7gxx9/xPbt2xEfH2/3dZ0xYwbUajWioqJw9uxZfPnll1i0aBFmzpwp3hZsyxhYiIjaEH9/f5w4cQImkwkPPPAAgoODsWTJEnh4eEAul0Mul2PPnj1IS0vDPffcg6VLl+Kf//znHa3DihUrMGjQIERERGD06NHw9fW1OiHbrFmzcP36dQwbNgxPP/00nnnmGcybNw8A4OHhgQMHDuC+++5Dnz59sGnTJuzevRv9+vUDALzyyit49NFHMXPmTAwaNAhZWVk4fPgwOnToYLVOffr0wcaNG7FhwwaEhIQgNTXVomMwAMydOxe9evXCkCFD4OXlhRMnTsDZ2Rlff/017r77bjzyyCPo06cPnnjiCVRUVDSoxeXJJ5/Eli1bsH37dgQHB2PUqFFISEhA165d7byqNx4gePjwYVy7dg1Dhw7FY489hvvvvx/vvvuu3cdqjWRCY8bYSZBOp4O7uzu0Wq3dzXZE1LZVVFQgJycHXbt2hVqtbunqELU7df0MNvT7my0sREREJHkMLEREZJfqWXStLTXnf2kPbF0HV1dXHDt2rKWr16a0vS7yRETUpLZs2YLr169b3daxY8dmrk3LunWkUU2dO3duvoq0AwwsRERkF34R39S9e/eWrkK7wVtCREREJHkMLERERCR5DCxEREQkeQwsREREJHkMLERERCR5DCxERG1YYGAg1q9f39LVaHEymQyffPJJkx1/9erVGDBgQJMdnxhYiIiIWgTDpH0YWIiIiNopk8kEs9lca73RaGzU8Rq7X0MwsBARSdQHH3wAf3//Wl8oEyZMwOOPP45Lly5hwoQJ8PHxgaurK4YOHYqjR482+vNkMhnef/99PPTQQ3B2dkafPn2QkpKCrKwsjB49Gi4uLhg+fDguXbpksd+nn36KQYMGQa1WIygoCGvWrEFVVZW4PT4+HsHBwXBxcUFAQAD+9re/oaysTNyekJAADw8PHD58GH369IGrqyvGjh2L/Pz8BtX7u+++w1/+8hd4enrC3d0do0aNwunTp2uVy8/Px7hx4+Dk5ISgoCD85z//EbcZjUYsXLgQfn5+UKvV6NKlC+Li4sTtubm5mDBhAlxdXaHRaDB58mQUFhbarNPo0aOxZMkSi3UTJ07E7Nmzxe0///wzli5dCplMBplMJpY7fvw4Ro4cCScnJwQEBGDx4sXQ6/UNuhYGgwHLli1D586d4eLigtDQUCQnJ4vbq6/1f//7X/Tt2xcqlQq5ubkIDAzEunXrMGvWLGg0GvGp2R999BH69esHlUqFwMBAvPHGGxafZ2u/psDAQkTtkyAARn3zL4LQ4CpOmjQJxcXF+PLLL8V1165dQ2JiImbMmIGysjKMHz8eSUlJOHPmDMaOHYvIyEjk5uY2+rJUf/mkp6ejd+/emD59Op566inExMTg1KlTEAQBCxcuFMsfO3YMs2bNwjPPPINz587h/fffR0JCAl566SWxjFwux9tvv42ffvoJO3bswBdffIHnn3/e4nPLy8vx+uuvY+fOnfj666+Rm5uLZcuWNajOpaWliIqKwvHjx3Hy5En06NED48ePR2lpqUW5lStX4tFHH8X333+PGTNmYOrUqcjIyAAAvP322/jvf/+Lffv2ITMzE7t27UJgYCAAwGw2Y8KECbh27Rq++uorHDlyBNnZ2ZgyZUpjLjEA4MCBA7jrrruwdu1a5Ofni+Hs0qVLGDt2LB599FH88MMP2Lt3L44fP25xzeuycOFCpKSkYM+ePfjhhx8wadIkjB07FhcvXhTLlJeX49VXX8WWLVvw008/wdvbGwDw+uuvIyQkBGfOnMHKlSuRlpaGyZMnY+rUqfjxxx+xevVqrFy5EgkJCRafeet+TUZohHfffVfo0qWLoFKphGHDhgnffvutzbJGo1FYs2aNEBQUJKhUKqF///7C//73v9s6pjVarVYAIGi1WrvPh4jatuvXrwvnzp0Trl+/fnOloUwQYjXNvxjK7Kr7hAkThMcff1x8//777wv+/v6CyWSyWr5fv37CO++8I77v0qWL8OabbzboswAIK1asEN+npKQIAIStW7eK63bv3i2o1Wrx/f333y+8/PLLFsfZuXOn4OfnZ/Nz9u/fL3Tq1El8v337dgGAkJWVJa7bsGGD4OPj06B638pkMglubm7C//t//8/i3ObPn29RLjQ0VFiwYIEgCIKwaNEi4b777hPMZnOt433++eeCQqEQcnNzxXU//fSTAEBITU0VBEEQYmNjhZCQEHH7qFGjhGeeecbiOBMmTBCioqLE99b+bp544glh3rx5FuuOHTsmyOVyy3+/Vvz888+CQqEQfv31V4v1999/vxATEyMIws1rnZ6eblGmS5cuwsSJEy3WTZ8+XfjLX/5ise65554T+vbtW+d+1lj9GfxDQ7+/7W5h2bt3L6KjoxEbG4vTp08jJCQEERERuHLlitXyK1aswPvvv4933nkH586dw/z58/Hwww/jzJkzjT4mEVF7MWPGDHz00UcwGAwAgF27dmHq1KmQy+UoKyvDsmXL0KdPH3h4eMDV1RUZGRm31cLSv39/8bWPjw8AIDg42GJdRUUFdDodAOD777/H2rVrLZ5SPHfuXOTn56O8vBwAcPToUdx///3o3Lkz3NzcMHPmTBQXF4vbAcDZ2RndunUT3/v5+TX4O6CwsBBz585Fjx494O7uDo1Gg7KyslrXISwsrNb76haW2bNnIz09Hb169cLixYvx+eefi+UyMjIQEBCAgIAAcV3fvn3h4eEh7n+nfP/990hISLC4nhERETCbzcjJyalz3x9//BEmkwk9e/a02P+rr76yuI2nVCot/p6rDRkyxOJ9RkYG7r33Xot19957Ly5evAiTyWRzv6Zi98MP4+PjMXfuXMyZMwcAsGnTJhw8eBDbtm3D8uXLa5XfuXMnXnzxRYwfPx4AsGDBAhw9ehRvvPEG/vWvfzXqmEREt83RGXjht5b5XDtERkZCEAQcPHgQQ4cOxbFjx/Dmm28CAJYtW4YjR47g9ddfR/fu3eHk5ITHHnvstjo+Ojo6iq+r+1VYW1fdr6asrAxr1qzBI488UutYarUaly9fxkMPPYQFCxbgpZdeQseOHXH8+HE88cQTMBqNcHZ2rvUZ1Z8jNPD2WVRUFIqLi/HWW2+hS5cuUKlUCAsLs+s6DBo0CDk5Ofjf//6Ho0ePYvLkyQgPD7fo52IPuVxeq/6VlZX17ldWVoannnoKixcvrrXt7rvvrndfhUKBtLQ0KBQKi22urq7iaycnJ4s+M9VcXFzqrZ81jd3PXnYFFqPRiLS0NMTExIjr5HI5wsPDkZKSYnUfg8EAtVptsc7JyQnHjx9v9DGrj1v9GwcAMe0TETWITAYom+c/2tuhVqvxyCOPYNeuXcjKykKvXr0waNAgAMCJEycwe/ZsPPzwwwBufGFdvny5Wes3aNAgZGZm2nxqcVpaGsxmM9544w3I5Tca9fft23dH63DixAls3LhR/MU4Ly8PRUVFtcqdPHkSs2bNsng/cOBA8b1Go8GUKVMwZcoUPPbYYxg7diyuXbuGPn36IC8vD3l5eWIry7lz51BSUoK+fftarZOXl5dFp2GTyYSzZ89izJgx4jqlUmnRUgHcuJ7nzp1r1FOgBw4cCJPJhCtXrmDkyJF273+rPn364MSJExbrTpw4gZ49e9YKRM3BrltCRUVFMJlMYjNhNR8fHxQUFFjdJyIiAvHx8bh48SLMZjOOHDmCAwcOiH+RjTkmAMTFxcHd3V1cajbVERG1JTNmzBBbnWfMmCGu79GjBw4cOID09HR8//33mD59utUhqk1p1apV+PDDD7FmzRr89NNPyMjIwJ49e7BixQoAQPfu3VFZWYl33nkH2dnZ2LlzJzZt2nRH69CjRw/s3LkTGRkZ+PbbbzFjxgw4OTnVKrd//35s27YNFy5cQGxsLFJTU8XOrPHx8di9ezfOnz+PCxcuYP/+/fD19YWHhwfCw8MRHByMGTNm4PTp00hNTcWsWbMwatQom7dD7rvvPhw8eBAHDx7E+fPnsWDBApSUlFiUCQwMxNdff41ff/1VDFh///vf8c0332DhwoVIT0/HxYsX8emnnzao023Pnj0xY8YMzJo1CwcOHEBOTg5SU1MRFxeHgwcP2nlVgWeffRZJSUlYt24dLly4gB07duDdd99tcGfoO63JRwm99dZb6NGjB3r37g2lUomFCxdizpw5YtJurJiYGGi1WnHJy8u7QzUmIpKW++67Dx07dkRmZiamT58uro+Pj0eHDh0wfPhwREZGIiIiQmx9aS4RERH47LPP8Pnnn2Po0KH405/+hDfffBNdunQBAISEhCA+Ph6vvvoq7rnnHuzatctiuPCdsHXrVvz+++8YNGgQZs6cicWLF4sjX2pas2YN9uzZg/79++PDDz/E7t27xRYSNzc3vPbaaxgyZAiGDh2Ky5cv49ChQ5DL5ZDJZPj000/RoUMH/PnPf0Z4eDiCgoKwd+9em3V6/PHHERUVJQaboKAgi9YVAFi7di0uX76Mbt26wcvLC8CNPkRfffUVLly4gJEjR2LgwIFYtWoV/P39G3Qttm/fjlmzZuHZZ59Fr169MHHiRHz33Xf13k6yZtCgQdi3bx/27NmDe+65B6tWrcLatWvFodnNTSY09CYhIN5v/M9//oOJEyeK66OiolBSUoJPP/3U5r4VFRUoLi6Gv78/li9fjs8++ww//fTTbR2zJp1OB3d3d2i1Wmg0moaeEhG1AxUVFcjJyUHXrl1r3aImoqZX189gQ7+/7WrmUCqVGDx4MJKSksR1ZrMZSUlJtXpf30qtVqNz586oqqrCRx99hAkTJtz2MYmIiKh9sPu+THR0NDZv3owdO3YgIyMDCxYsgF6vF0f4zJo1y6ID7bfffosDBw4gOzsbx44dw9ixY2E2my0mDarvmEREdHt27dplMdS15tKvX7+Wrl6dbNXb1dUVx44da+nqNZtjx47VeS3aOruHNU+ZMgVXr17FqlWrUFBQgAEDBiAxMVHsNJubm2vRP6WiogIrVqxAdnY2XF1dMX78eOzcuRMeHh4NPiYREd2ev/71rwgNDbW67dYhxVKTnp5uc1vnzp2bryItbMiQIXVei7bOrj4sUsY+LERkC/uwELWsZu/DQkRERNQSGFiIqN1oIw3KRK3OnfjZY2Ahojavuo9GzWfXEFHzqf7Zu53+UnZ3uiUiam0UCgU8PDzEh+k5OztbfZYKEd1ZgiCgvLwcV65cgYeHx21N6c/AQkTtgq+vLwDwKfBELcDDw0P8GWwsBhYiahdkMhn8/Pzg7e3doKfmEtGd4ejoeEcelsjAQkTtikKhaJEnzRLR7WGnWyIiIpI8BhYiIiKSPAYWIiIikjwGFiIiIpI8BhYiIiKSPAYWIiIikjwGFiIiIpI8BhYiIiKSPAYWIiIikjwGFiIiIpI8BhYiIiKSPAYWIiIikjwGFiIiIpI8BhYiIiKSPAYWIiIikjwGFiIiIpI8BhYiIiKSPAYWIiIikjwGFiIiIpI8BhYiIiKSPAYWIiIikjwGFiIiIpI8BhYiIiKSPAYWIiIikrxGBZYNGzYgMDAQarUaoaGhSE1NrbP8+vXr0atXLzg5OSEgIABLly5FRUWFuH316tWQyWQWS+/evRtTNSIiImqDHOzdYe/evYiOjsamTZsQGhqK9evXIyIiApmZmfD29q5V/t///jeWL1+Obdu2Yfjw4bhw4QJmz54NmUyG+Ph4sVy/fv1w9OjRmxVzsLtqRERE1EbZ3cISHx+PuXPnYs6cOejbty82bdoEZ2dnbNu2zWr5b775Bvfeey+mT5+OwMBAPPDAA5g2bVqtVhkHBwf4+vqKi6enZ+POiIiIiNocuwKL0WhEWloawsPDbx5ALkd4eDhSUlKs7jN8+HCkpaWJASU7OxuHDh3C+PHjLcpdvHgR/v7+CAoKwowZM5Cbm1tnXQwGA3Q6ncVCREREbZNd912KiopgMpng4+Njsd7Hxwfnz5+3us/06dNRVFSEESNGQBAEVFVVYf78+XjhhRfEMqGhoUhISECvXr2Qn5+PNWvWYOTIkTh79izc3NysHjcuLg5r1qyxp/pERETUSjX5KKHk5GS8/PLL2LhxI06fPo0DBw7g4MGDWLdunVhm3LhxmDRpEvr374+IiAgcOnQIJSUl2Ldvn83jxsTEQKvVikteXl5TnwoRERG1ELtaWDw9PaFQKFBYWGixvrCwEL6+vlb3WblyJWbOnIknn3wSABAcHAy9Xo958+bhxRdfhFxeOzN5eHigZ8+eyMrKslkXlUoFlUplT/WJiIiolbKrhUWpVGLw4MFISkoS15nNZiQlJSEsLMzqPuXl5bVCiUKhAAAIgmB1n7KyMly6dAl+fn72VI+IiIjaKLvHDkdHRyMqKgpDhgzBsGHDsH79euj1esyZMwcAMGvWLHTu3BlxcXEAgMjISMTHx2PgwIEIDQ1FVlYWVq5cicjISDG4LFu2DJGRkejSpQt+++03xMbGQqFQYNq0aXfwVImIiKi1sjuwTJkyBVevXsWqVatQUFCAAQMGIDExUeyIm5uba9GismLFCshkMqxYsQK//vorvLy8EBkZiZdeekks88svv2DatGkoLi6Gl5cXRowYgZMnT8LLy+sOnCIRERG1djLB1n2ZVkan08Hd3R1arRYajaalq0NEREQN0NDvbz5LiIiIiCSPgYWIiIgkj4GFiIiIJI+BhYiIiCSPgYWIiIgkj4GFiIiIJI+BhYiIiCSPgYWIiIgkj4GFiIiIJI+BhYiIiCSPgYWIiIgkj4GFiIiIJI+BhYiIiCSPgYWIiIgkj4GFiIiIJI+BhYiIiCSPgYWIiIgkj4GFiIiIJI+BhYiIiCSPgYWIiIgkj4GFiIiIJI+BhYiIiCSPgYWIiIgkj4GFiIiIJI+BhYiIiCSPgYWIiIgkj4GFiIiIJI+BhYiIiCSPgYWIiIgkj4GFiIiIJI+BhYiIiCSvUYFlw4YNCAwMhFqtRmhoKFJTU+ssv379evTq1QtOTk4ICAjA0qVLUVFRcVvHJCIiovbD7sCyd+9eREdHIzY2FqdPn0ZISAgiIiJw5coVq+X//e9/Y/ny5YiNjUVGRga2bt2KvXv34oUXXmj0MYmIiKh9kQmCINizQ2hoKIYOHYp3330XAGA2mxEQEIBFixZh+fLltcovXLgQGRkZSEpKEtc9++yz+Pbbb3H8+PFGHdManU4Hd3d3aLVaaDQae06JiIiIWkhDv7/tamExGo1IS0tDeHj4zQPI5QgPD0dKSorVfYYPH460tDTxFk92djYOHTqE8ePHN/qYAGAwGKDT6SwWIiIiapsc7ClcVFQEk8kEHx8fi/U+Pj44f/681X2mT5+OoqIijBgxAoIgoKqqCvPnzxdvCTXmmAAQFxeHNWvW2FN9IiIiaqWafJRQcnIyXn75ZWzcuBGnT5/GgQMHcPDgQaxbt+62jhsTEwOtVisueXl5d6jGREREJDV2tbB4enpCoVCgsLDQYn1hYSF8fX2t7rNy5UrMnDkTTz75JAAgODgYer0e8+bNw4svvtioYwKASqWCSqWyp/pERETUStnVwqJUKjF48GCLDrRmsxlJSUkICwuzuk95eTnkcsuPUSgUAABBEBp1TCIiImpf7GphAYDo6GhERUVhyJAhGDZsGNavXw+9Xo85c+YAAGbNmoXOnTsjLi4OABAZGYn4+HgMHDgQoaGhyMrKwsqVKxEZGSkGl/qOSURERO2b3YFlypQpuHr1KlatWoWCggIMGDAAiYmJYqfZ3NxcixaVFStWQCaTYcWKFfj111/h5eWFyMhIvPTSSw0+JhEREbVvds/DIlWch4WIiKj1aZJ5WIiIiIhaAgMLERERSR4DCxEREUkeAwsRERFJHgMLERERSR4DCxEREUkeAwsRERFJHgMLERERSR4DCxEREUkeAwsRERFJHgMLERERSR4DCxEREUkeAwsRERFJHgMLERERSR4DCxEREUkeAwsRERFJHgMLERERSR4DCxEREUkeAwsRERFJHgMLERERSR4DCxEREUkeAwsRERFJHgMLERERSR4DCxEREUkeAwsRERFJHgMLERERSR4DCxEREUkeAwsRERFJHgMLERERSR4DCxEREUkeAwsRERFJXqMCy4YNGxAYGAi1Wo3Q0FCkpqbaLDt69GjIZLJay4MPPiiWmT17dq3tY8eObUzViIiIqA1ysHeHvXv3Ijo6Gps2bUJoaCjWr1+PiIgIZGZmwtvbu1b5AwcOwGg0iu+Li4sREhKCSZMmWZQbO3Ystm/fLr5XqVT2Vo2IiIjaKLtbWOLj4zF37lzMmTMHffv2xaZNm+Ds7Ixt27ZZLd+xY0f4+vqKy5EjR+Ds7FwrsKhUKotyHTp0aNwZERERUZtjV2AxGo1IS0tDeHj4zQPI5QgPD0dKSkqDjrF161ZMnToVLi4uFuuTk5Ph7e2NXr16YcGCBSguLranakRERNSG2XVLqKioCCaTCT4+PhbrfXx8cP78+Xr3T01NxdmzZ7F161aL9WPHjsUjjzyCrl274tKlS3jhhRcwbtw4pKSkQKFQWD2WwWCAwWAQ3+t0OntOhYiIiFoRu/uw3I6tW7ciODgYw4YNs1g/depU8XVwcDD69++Pbt26ITk5Gffff7/VY8XFxWHNmjVNWl8iIiKSBrtuCXl6ekKhUKCwsNBifWFhIXx9fevcV6/XY8+ePXjiiSfq/ZygoCB4enoiKyvLZpmYmBhotVpxycvLa9hJEBERUatjV2BRKpUYPHgwkpKSxHVmsxlJSUkICwurc9/9+/fDYDDg//7v/+r9nF9++QXFxcXw8/OzWUalUkGj0VgsRERE1DbZPUooOjoamzdvxo4dO5CRkYEFCxZAr9djzpw5AIBZs2YhJiam1n5bt27FxIkT0alTJ4v1ZWVleO6553Dy5ElcvnwZSUlJmDBhArp3746IiIhGnhYRERG1JXb3YZkyZQquXr2KVatWoaCgAAMGDEBiYqLYETc3NxdyuWUOyszMxPHjx/H555/XOp5CocAPP/yAHTt2oKSkBP7+/njggQewbt06zsVCREREAACZIAhCS1fiTtDpdHB3d4dWq+XtISIiolaiod/ffJYQERERSR4DCxEREUkeAwsRERFJHgMLERERSR4DCxEREUkeAwsRERFJHgMLERERSR4DCxEREUkeAwsRERFJHgMLERERSZ7dzxIiIiIiiTKbAXMlYDICpkqgynDztckImAw1XtsqY7S9/f6VgNKlRU6NgYWIiKghaoaBqlu+1E23fOlX3RoMjLVDQb3HqGe7tbBhrmzaazAymoGFiIjaMbPZ+pd6Xb/t2729ZplGbDdXtfRVsp9MASiUgIPyxp8KJaBw/ONPVY3XjoCDqv7tDqoWOxUGFiKitq5WGLDypW71t3k7WgMsyti4/VDX9tYaBhxqfqnfujha2e74RxCoEQxqhYlbt98SHGqFCVvHcATkipa+SncMAwsR0e2wCAP1/bZf8wu8vlsHDWwNaEiYaI1hQO7QwC9oG9uthgVrYUJpo4y1sHDL9jYUBloDBhYiki4xDNj5236t7Xb+tm91u40wIZha+irZzyIM2Pvbfn23Fur4bd/mdiu3HxgG6BYMLETtldlk5Tf12/xtv1aLQn2dEesJG602DDT2t/06ttf3236d22t8htwRkHNGC2p9GFiImkLNMHBHf9u30b+gwZ0Ra2xrlWHAsY4vaCutAQ25dVBfa0C9nRFrHINhgKjJMLBQ61MdBuxuDWjE0EObx6gnbAjmlr5K9qsZBuq7t19re30dBRvSGlDPMRgGiNo1BhayZDbVP9FQfa0Btz30sJ5bB605DNh9b78hv+3XFyYaeAyZrKWvEhGRTQwszUUQrPQZsHOSoEZPRGTH9tYYBmp13ruT9/7rCxMNPAbDABHRbWFgqc8XLwHXf7ezNcDGdggtfTb2s3u0gD2/7dfXWtDAFgWGASKiNo+BpT6ndwBlhU1z7Dq/oG/3t/16tjf09gPDABERSQADS31CnwIqKxoQJhrYGlB960DuwDBARETUQAws9Rn5bEvXgIiIqN3jGEEiIiKSPAYWIiIikjwGFiIiIpI8BhYiIiKSPAYWIiIikjwGFiIiIpI8BhYiIiKSvEYFlg0bNiAwMBBqtRqhoaFITU21WXb06NGQyWS1lgcffFAsIwgCVq1aBT8/Pzg5OSE8PBwXL15sTNWIiIioDbI7sOzduxfR0dGIjY3F6dOnERISgoiICFy5csVq+QMHDiA/P19czp49C4VCgUmTJollXnvtNbz99tvYtGkTvv32W7i4uCAiIgIVFRWNPzMiIiJqM2SCINj1RL7Q0FAMHToU7777LgDAbDYjICAAixYtwvLly+vdf/369Vi1ahXy8/Ph4uICQRDg7++PZ599FsuWLQMAaLVa+Pj4ICEhAVOnTm1QvXQ6Hdzd3aHVaqHRaOw5JSIiImohDf3+tquFxWg0Ii0tDeHh4TcPIJcjPDwcKSkpDTrG1q1bMXXqVLi4uAAAcnJyUFBQYHFMd3d3hIaG1nlMg8EAnU5nsRAREVHbZFdgKSoqgslkgo+Pj8V6Hx8fFBQU1Lt/amoqzp49iyeffFJcV72fvceMi4uDu7u7uAQEBNhzKkRERNSKNOsooa1btyI4OBjDhg277WPFxMRAq9WKS15e3h2oIREREUmRXU9r9vT0hEKhQGFhocX6wsJC+Pr61rmvXq/Hnj17sHbtWov11fsVFhbCz8/P4pgDBgyweTyVSgWVSiW+r+6Kw1tDRERErUf193a9XWoFOw0bNkxYuHCh+N5kMgmdO3cW4uLi6txv+/btgkqlEoqKiizWm81mwdfXV3j99dfFdVqtVlCpVMLu3bsbXK+8vDwBABcuXLhw4cKlFS55eXl1fs/b1cICANHR0YiKisKQIUMwbNgwrF+/Hnq9HnPmzAEAzJo1C507d0ZcXJzFflu3bsXEiRPRqVMni/UymQxLlizBP/7xD/To0QNdu3bFypUr4e/vj4kTJza4Xv7+/sjLy4ObmxtkMpm9p2WTTqdDQEAA8vLyOPqoCfE6Nx9e6+bB69w8eJ2bR1NeZ0EQUFpaCn9//zrL2R1YpkyZgqtXr2LVqlUoKCjAgAEDkJiYKHaazc3NhVxu2TUmMzMTx48fx+eff271mM8//zz0ej3mzZuHkpISjBgxAomJiVCr1Q2ul1wux1133WXv6TSYRqPhD0Mz4HVuPrzWzYPXuXnwOjePprrO7u7u9Zaxex6W9obzuzQPXufmw2vdPHidmwevc/OQwnXms4SIiIhI8hhY6qFSqRAbG2sxIonuPF7n5sNr3Tx4nZsHr3PzkMJ15i0hIiIikjy2sBAREZHkMbAQERGR5DGwEBERkeQxsBAREZHkMbAA2LBhAwIDA6FWqxEaGorU1NQ6y+/fvx+9e/eGWq1GcHAwDh061Ew1bd3suc6bN2/GyJEj0aFDB3To0AHh4eH1/r3QDfb+e662Z88eyGQyu2aYbu/svdYlJSV4+umn4efnB5VKhZ49e/L/jwaw9zqvX78evXr1gpOTEwICArB06VJUVFQ0U21bp6+//hqRkZHw9/eHTCbDJ598Uu8+ycnJGDRoEFQqFbp3746EhISmrWSDH9bTRu3Zs0dQKpXCtm3bhJ9++kmYO3eu4OHhIRQWFlotf+LECUGhUAivvfaacO7cOWHFihWCo6Oj8OOPPzZzzVsXe6/z9OnThQ0bNghnzpwRMjIyhNmzZwvu7u7CL7/80sw1b13svc7VcnJyhM6dOwsjR44UJkyY0DyVbeXsvdYGg0EYMmSIMH78eOH48eNCTk6OkJycLKSnpzdzzVsXe6/zrl27BJVKJezatUvIyckRDh8+LPj5+QlLly5t5pq3LocOHRJefPFF4cCBAwIA4eOPP66zfHZ2tuDs7CxER0cL586dE9555x1BoVAIiYmJTVbHdh9Yhg0bJjz99NPie5PJJPj7+9t8mOPkyZOFBx980GJdaGio8NRTTzVpPVs7e6/zraqqqgQ3Nzdhx44dTVXFNqEx17mqqkoYPny4sGXLFiEqKoqBpYHsvdbvvfeeEBQUJBiNxuaqYptg73V++umnhfvuu89iXXR0tHDvvfc2aT3bkoYElueff17o16+fxbopU6YIERERTVavdn1LyGg0Ii0tDeHh4eI6uVyO8PBwpKSkWN0nJSXFojwARERE2CxPjbvOtyovL0dlZSU6duzYVNVs9Rp7ndeuXQtvb2888cQTzVHNNqEx1/q///0vwsLC8PTTT8PHxwf33HMPXn75ZZhMpuaqdqvTmOs8fPhwpKWlibeNsrOzcejQIYwfP75Z6txetMR3od0PP2xLioqKYDKZxAc3VvPx8cH58+et7lNQUGC1fEFBQZPVs7VrzHW+1d///nf4+/vX+gGhmxpznY8fP46tW7ciPT29GWrYdjTmWmdnZ+OLL77AjBkzcOjQIWRlZeFvf/sbKisrERsb2xzVbnUac52nT5+OoqIijBgxAoIgoKqqCvPnz8cLL7zQHFVuN2x9F+p0Oly/fh1OTk53/DPbdQsLtQ6vvPIK9uzZg48//tiuJ3hT3UpLSzFz5kxs3rwZnp6eLV2dNs9sNsPb2xsffPABBg8ejClTpuDFF1/Epk2bWrpqbUpycjJefvllbNy4EadPn8aBAwdw8OBBrFu3rqWrRrepXbeweHp6QqFQoLCw0GJ9YWEhfH19re7j6+trV3lq3HWu9vrrr+OVV17B0aNH0b9//6asZqtn73W+dOkSLl++jMjISHGd2WwGADg4OCAzMxPdunVr2kq3Uo35N+3n5wdHR0coFApxXZ8+fVBQUACj0QilUtmkdW6NGnOdV65ciZkzZ+LJJ58EAAQHB0Ov12PevHl48cUXIZfz9/Q7wdZ3oUajaZLWFaCdt7AolUoMHjwYSUlJ4jqz2YykpCSEhYVZ3ScsLMyiPAAcOXLEZnlq3HUGgNdeew3r1q1DYmIihgwZ0hxVbdXsvc69e/fGjz/+iPT0dHH561//ijFjxiA9PR0BAQHNWf1WpTH/pu+9915kZWWJoRAALly4AD8/P4YVGxpzncvLy2uFkuqQKPDReXdMi3wXNll33lZiz549gkqlEhISEoRz584J8+bNEzw8PISCggJBEARh5syZwvLly8XyJ06cEBwcHITXX39dyMjIEGJjYzmsuQHsvc6vvPKKoFQqhf/85z9Cfn6+uJSWlrbUKbQK9l7nW3GUUMPZe61zc3MFNzc3YeHChUJmZqbw2WefCd7e3sI//vGPljqFVsHe6xwbGyu4ubkJu3fvFrKzs4XPP/9c6NatmzB58uSWOoVWobS0VDhz5oxw5swZAYAQHx8vnDlzRvj5558FQRCE5cuXCzNnzhTLVw9rfu6554SMjAxhw4YNHNbcHN555x3h7rvvFpRKpTBs2DDh5MmT4rZRo0YJUVFRFuX37dsn9OzZU1AqlUK/fv2EgwcPNnONWyd7rnOXLl0EALWW2NjY5q94K2Pvv+eaGFjsY++1/uabb4TQ0FBBpVIJQUFBwksvvSRUVVU1c61bH3uuc2VlpbB69WqhW7duglqtFgICAoS//e1vwu+//978FW9FvvzyS6v/51Zf26ioKGHUqFG19hkwYICgVCqFoKAgYfv27U1aR5kgsI2MiIiIpK1d92EhIiKi1oGBhYiIiCSPgYWIiIgkj4GFiIiIJI+BhYiIiCSPgYWIiIgkj4GFiIiIJI+BhYiIiCSPgYWIiIgkj4GFiIiIJI+BhYiIiCSPgYWIiIgk7/8DHD+Lh33isocAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Don't run in Kale this time\n", + "nb_classes = 3\n", + "\n", + "data_files = ['./train_data_ready.npy',\n", + " \"./val_data_ready.npy\",\n", + " \"./train_labels_ready.npy\",\n", + " \"./val_labels_ready.npy\"]\n", + "# artifact_bucket_root_name = artifacts_bucket.split('/')[-1]\n", + "# print(artifact_bucket_root_name)\n", + "# storage_client = storage.Client()\n", + "# bucket = storage_client.get_bucket(artifact_bucket_root_name)\n", + "\n", + "ht_np_train = np.load('train_data_ready.npy', allow_pickle=True)\n", + "ht_np_val = np.load('val_data_ready.npy', allow_pickle=True)\n", + "train_labels_np = np.load('train_labels_ready.npy', allow_pickle=True)\n", + "val_labels_np = np.load('val_labels_ready.npy', allow_pickle=True)\n", + "\n", + "train_snps = ht_np_train\n", + "train_phenotypes = train_labels_np\n", + "val_snps = ht_np_val\n", + "val_phenotypes = val_labels_np\n", + "\n", + "# print(\"min\")\n", + "# print(val_phenotypes.min())\n", + "# print(\"max\")\n", + "# print(val_phenotypes.max())\n", + "\n", + "inputs =\\\n", + " tf.keras.layers.Input(\n", + " shape=(train_snps.shape[1], \n", + " train_snps.shape[2])) # train_snps.shape[1] ,nb_classes))\n", + "\n", + "x = Conv1D(10,\n", + " nb_classes,\n", + " padding='same',\n", + " activation = conv_activation,\n", + " kernel_initializer = conv_initializer,\n", + " kernel_regularizer=tf.keras.regularizers.L1L2(l1=conv_1_kernel_l1, l2=conv_1_kernel_l2),\n", + " bias_regularizer=tf.keras.regularizers.L2(conv_1_bias_l2),\n", + " activity_regularizer=tf.keras.regularizers.L2(conv_1_activity_l2)\n", + " )(inputs)\n", + "\n", + " # kernel_initializer = conv_initializer ,\n", + " # kernel_regularizer=\"l2\", bias_regularizer = \"l2\")\n", + "x = Dropout(conv_1_dropout_rate)(x)\n", + "\n", + "x = Conv1D(10,\n", + " 20,\n", + " padding='same',\n", + " activation = conv_activation,\n", + " kernel_initializer = conv_initializer,\n", + " kernel_regularizer=tf.keras.regularizers.L1L2(l1=conv_x_kernel_l1, l2=conv_x_kernel_l2),\n", + " bias_regularizer=tf.keras.regularizers.L2(conv_x_bias_l2),\n", + " activity_regularizer=tf.keras.regularizers.L2(conv_x_activity_l2)\n", + " # kernel_initializer = 'TruncatedNormal',\n", + " # kernel_regularizer=\"l2\",\n", + " # bias_regularizer=\"l2\"\n", + " )(x) # Leaving l1 l2 on head layer only to see if this prevents everything from zeroing out.\n", + "\n", + "x = Dropout(dropout_rate)(x)\n", + "\n", + "\n", + "shortcut = Conv1D(10,\n", + " 4,\n", + " padding='same',\n", + " activation = conv_activation,\n", + " kernel_initializer = conv_initializer,\n", + " kernel_regularizer=tf.keras.regularizers.L1L2(l1=conv_x_kernel_l1, l2=conv_x_kernel_l2),\n", + " bias_regularizer=tf.keras.regularizers.L2(conv_x_bias_l2),\n", + " activity_regularizer=tf.keras.regularizers.L2(conv_x_activity_l2))(inputs)\n", + "shortcut = Dropout(dropout_rate)(shortcut)\n", + "x = tf.keras.layers.Add()([shortcut,x])\n", + "\n", + "x = Conv1D(10,\n", + " 4,\n", + " padding='same',\n", + " activation = conv_activation,\n", + " kernel_initializer = conv_initializer,\n", + " kernel_regularizer=tf.keras.regularizers.L1L2(l1=conv_x_kernel_l1, l2=conv_x_kernel_l2),\n", + " bias_regularizer=tf.keras.regularizers.L2(conv_x_bias_l2),\n", + " activity_regularizer=tf.keras.regularizers.L2(conv_x_activity_l2)\n", + " # kernel_initializer = 'TruncatedNormal', \n", + " # kernel_regularizer = \"l2\",\n", + " # bias_regularizer = \"l2\"\n", + " )(x)\n", + "\n", + "# x = Dropout(dropout_rate)(x)\n", + "\n", + "x = Flatten()(x)\n", + "# x = Dropout(dropout_rate)(x)\n", + "x = BatchNormalization()(x)\n", + "\n", + "if num_dense_layers > 0:\n", + " y = x\n", + " for i in np.arange(num_dense_layers):\n", + " y = Dense(num_dense_units, \n", + " activation,\n", + " kernel_initializer=dese_initializer,\n", + " kernel_regularizer=tf.keras.regularizers.L1L2(l1=dense_x_kernel_l1, l2=dense_x_kernel_l2),\n", + " bias_regularizer=tf.keras.regularizers.L2(dense_x_bias_l2),\n", + " activity_regularizer=tf.keras.regularizers.L2(dense_x_activity_l2)\n", + " )(y)\n", + " # y = Dropout(dropout_rate)(y)\n", + " y = BatchNormalization()(y)\n", + " \n", + " x = tf.keras.layers.Concatenate(axis=1)([x,y])\n", + " x = BatchNormalization()(x)\n", + "\n", + "outputs_unscaled = Dense(1,\n", + " activation=\"softsign\",\n", + " kernel_initializer=dese_initializer,\n", + " kernel_regularizer=tf.keras.regularizers.L1L2(l1=dense_out_kernel_l1, l2=dense_out_kernel_l2),\n", + " bias_regularizer=tf.keras.regularizers.L2(dense_out_bias_l2),\n", + " activity_regularizer=tf.keras.regularizers.L2(dense_out_activity_l2),\n", + " # bias_regularizer = \"l2\",\n", + " # kernel_initializer = 'TruncatedNormal',\n", + " name = 'out')(x) # Should have no activation\n", + "# Softsign coerces the output to the range {-1,1}. The labels are norm scaled, \n", + "# where the range {-2,2} or {-3,3} encompasses most values. We multiply by a scalar \n", + "# and the range will terminate at +/- said scalar. No telling which one is optimal,\n", + "# so we'll le the the tuner figure out what: \n", + "outputs = Lambda(lambda x: x * final_activation_scale_factor)(outputs_unscaled) \n", + "\n", + "our_data_model = Model(inputs = inputs, outputs = outputs)\n", + "# qa_data_model = Model(inputs = inputs, outputs = outputs)\n", + "our_data_model.compile(loss=loss,\n", + " optimizer=tf.keras.optimizers.Adam(learning_rate=learning_rate),\n", + " metrics=[tf.keras.metrics.MeanAbsoluteError()],\n", + " jit_compile=True)\n", + "\n", + "# We added the early stopping callback and instructed it to restore the best weights. \n", + "callbacks = [tf.keras.callbacks.EarlyStopping(restore_best_weights=True)]\n", + "\n", + "history =\\\n", + " our_data_model.fit(x = train_snps,\n", + " y = train_phenotypes,\n", + " callbacks = callbacks,\n", + " batch_size=batch_size,\n", + " epochs=epochs,\n", + " validation_data=(val_snps, val_phenotypes),\n", + " shuffle= True,\n", + " use_multiprocessing=True)\n", + "# Requirement 6: save and log your artifact. \n", + "# I'm adding a random number to the file name as an\n", + "# extra layer of safety nets against race conditions\n", + "# / file name conflicts\n", + "\n", + "# tn = str(int(np.random.random() * 10 ** 12))\n", + "model_folder = f\"a-{time}-model\"\n", + "our_data_model.save(model_folder)\n", + "\n", + "history_df = pd.DataFrame(history.history)\n", + "\n", + "history_df[[\"mean_absolute_error\", \"val_mean_absolute_error\"]].plot()\n", + "plt.savefig(f'{model_folder}-history.png')\n", + "\n", + "print(model_folder)\n", + "\n", + "val_mean_absolute_error = float(history_df['val_mean_absolute_error'].values.min())\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "74954dbc-9133-40d5-9f23-400a39807724", + "metadata": { + "tags": [ + "block:saliency_observed", + "prev:preprocessing" + ] + }, + "outputs": [], + "source": [ + "\n", + "\n", + "# Calculate observed p values: \n", + "\n", + "val_snps_s = np.load(\"val_snps_for_saliency.npy\", allow_pickle=True)\n", + "val_phenotypes_k = np.load('val_labels_ready.npy', allow_pickle=True)\n", + "\n", + "p_values = []\n", + "for i in np.arange(int(val_snps_s.shape[1] / 3)):\n", + " column_index_lower_bound = 3 * i\n", + " column_index_upper_bound = 3 * i + 3\n", + " data = val_snps_s[:,column_index_lower_bound:column_index_upper_bound]\n", + " data_reshaped = np.argmax(data, axis=1)\n", + " slope, intercept, r_value, p_value, std_err = stats.linregress(data_reshaped, val_phenotypes_k)\n", + " p_values.append(p_value)\n", + "p_values_observed_np = np.array(p_values)\n", + "np.save('p_values_observed_np', \n", + " p_values_observed_np, \n", + " allow_pickle=True)\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "464ffbb4-eb9e-438e-ac1e-292a2e45a99f", + "metadata": { + "tags": [ + "block:manhattan_observed", + "prev:saliency_observed" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "\n", + "model_folder = f\"a-{time}-model\"\n", + "p_values_observed_np = np.load('p_values_observed_np.npy',\n", + " allow_pickle=True)\n", + "\n", + "neg_log = -1 * np.log10(p_values_observed_np)\n", + "slug = np.arange(p_values_observed_np.shape[0])\n", + "\n", + "pt = plt.scatter(x = slug, y = neg_log, c=neg_log)\n", + "plt.title(f\"Manhattan Plot for {experiment_description} - observed\")\n", + "plt.xlabel(\"Ordinal SNP\")\n", + "plt.ylabel(\"- log10 observed P values\")\n", + "cbar = plt.colorbar(pt)\n", + "cbar.set_label(\"- log10 observed P values\")\n", + "plt.savefig(f\"{model_folder}-manhattan-observed\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "f18fae63-9e34-4d5b-b5d7-76e08e94142c", + "metadata": { + "tags": [ + "block:saliency_predicted", + "prev:train" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "48/48 [==============================] - 2s 33ms/step\n" + ] + } + ], + "source": [ + "\n", + "\n", + "val_snps_s = np.load(\"val_snps_for_saliency.npy\", allow_pickle=True)\n", + "model_folder = f\"a-{time}-model\"\n", + "\n", + "def get_saved_model(final_activation_scale_factor: float, model_folder: str):\n", + " final_model = tf.keras.models.load_model(model_folder)\n", + " for layer in final_model.layers:\n", + " layer.trainable=False\n", + " return final_model\n", + " # print(layer.weights)\n", + "\n", + "final_model = get_saved_model(final_activation_scale_factor=final_activation_scale_factor, model_folder = model_folder)\n", + "val_phenotypes_p = final_model.predict(val_snps_s).flatten()\n", + "\n", + "p_values_p = []\n", + "for i in np.arange(int(val_snps_s.shape[1] / 3)):\n", + " column_index_lower_bound = 3 * i\n", + " column_index_upper_bound = 3 * i + 3\n", + " data = val_snps_s[:,column_index_lower_bound:column_index_upper_bound]\n", + " data_reshaped = np.argmax(data, axis=1)\n", + " slope, intercept, r_value, p_value, std_err = stats.linregress(data_reshaped, val_phenotypes_p)\n", + " p_values_p.append(p_value)\n", + "p_values_predicted_np = np.array(p_values_p)\n", + "np.save('p_values_predicted_np', \n", + " p_values_predicted_np, \n", + " allow_pickle=True)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "043678ab-c0ae-45d7-8fdc-259d3138adba", + "metadata": { + "tags": [ + "block:manttan_predcted", + "prev:saliency_predicted" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "# mark in Kayle as pipeline step: Pipeline step: manhattan_known: Depends on: saliency_known \n", + "model_folder = f\"a-{time}-model\"\n", + "p_values_predicted_np = np.load('p_values_predicted_np.npy',\n", + " allow_pickle=True)\n", + "\n", + "neg_log = -1 * np.log10(p_values_predicted_np)\n", + "slug = np.arange(p_values_predicted_np.shape[0])\n", + "\n", + "pt = plt.scatter(x = slug, y = neg_log, c=neg_log)\n", + "plt.title(f\"Manhattan Plot for {experiment_description} - predicted\")\n", + "plt.xlabel(\"Ordinal SNP\")\n", + "plt.ylabel(\"- log10 predicted P values\")\n", + "cbar = plt.colorbar(pt)\n", + "cbar.set_label(\"- log10 predicted P values\")\n", + "plt.savefig(f\"{model_folder}-manhattan-predicted\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "bae392ab-a377-49a1-afaf-b5330892d89a", + "metadata": { + "tags": [ + "block:qq_plot", + "prev:saliency_observed", + "prev:saliency_predicted" + ] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "# mark in Kayle as pipeline step: qq plot\n", + "\n", + "model_folder = f\"a-{time}-model\"\n", + "\n", + "p_values_observed_np = np.load('p_values_observed_np.npy',\n", + " allow_pickle=True)\n", + "\n", + "neg_log_o = -1 * np.log10(p_values_observed_np)\n", + "\n", + "\n", + "p_values_predicted_np = np.load('p_values_predicted_np.npy',\n", + " allow_pickle=True)\n", + "\n", + "neg_log_p = -1 * np.log10(p_values_predicted_np)\n", + "\n", + "pt = plt.scatter(x = neg_log_o, y = neg_log_p, c= neg_log_p - neg_log_o)\n", + "plt.title(f\"QQ Plot for {experiment_description}\")\n", + "plt.xlabel(\"- log10 observed P values\")\n", + "plt.ylabel(\"- log10 predicted P values\")\n", + "cbar = plt.colorbar(pt)\n", + "cbar.set_label(\"- log10 predicted P values - log10 observed\")\n", + "plt.savefig(f\"{model_folder}-manhattan-predicted\")\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "be03ced0-99f2-43fd-b29e-407d0f85212c", + "metadata": { + "tags": [] + }, + "source": [ + "\n", + "## There is a second notebook to run after you run this pipeline. Please find the model folder for the best model that Katib found.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "4b240cfb-b264-49dc-ae2c-73b10ef8a69d", + "metadata": { + "tags": [ + "pipeline-metrics" + ] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.7159170508384705\n" + ] + } + ], + "source": [ + "\n", + "print(val_mean_absolute_error)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8159eb55-1b22-4662-885b-587d90e954b5", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "environment": { + "kernel": "python3", + "name": "tf2-gpu.2-10.m100", + "type": "gcloud", + "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-10:m100" + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "kubeflow_notebook": { + "autosnapshot": true, + "deploy_config": {}, + "docker_image": "gcr.io/arrikto/jupyter-kale-py38@sha256:2e1ce3427b780c0c78e7cfec527ee10c391092fdc4a8344cd76f8b83c61c5234", + "experiment": { + "id": "new", + "name": "gwas-7-d" + }, + "experiment_name": "gwas-10-d", + "katib_metadata": { + "algorithm": { + "algorithmName": "bayesianoptimization", + "algorithmSettings": [ + { + "name": "random_state", + "value": "10" + }, + { + "name": "acq_optimizer", + "value": "auto" + }, + { + "name": "acq_func", + "value": "gp_hedge" + }, + { + "name": "base_estimator", + "value": "GP" + } + ] + }, + "maxFailedTrialCount": 10, + "maxTrialCount": 40, + "objective": { + "additionalMetricNames": [], + "goal": 0.05, + "objectiveMetricName": "val-mean-absolute-error", + "type": "minimize" + }, + "parallelTrialCount": 2, + "parameters": [ + { + "feasibleSpace": { + "list": [ + "IMP_height.txt" + ] + }, + "name": "data_file_to_run", + "parameterType": "categorical" + }, + { + "feasibleSpace": { + "list": [ + "GWAS on soy height" + ] + }, + "name": "experiment_description", + "parameterType": "categorical" + }, + { + "feasibleSpace": { + "max": "0.3", + "min": "0.00001", + "step": "0.00001" + }, + "name": "learning_rate", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": ".98", + "min": "0.0001", + "step": "0.0001" + }, + "name": "conv_1_dropout_rate", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "conv_1_kernel_l1", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "conv_1_kernel_l2", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "conv_1_bias_l2", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "conv_1_activity_l2", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "conv_x_kernel_l1", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "conv_x_kernel_l2", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "conv_x_bias_l2", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "conv_x_activity_l2", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "dense_x_kernel_l1", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "dense_x_kernel_l2", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "dense_x_bias_l2", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "dense_x_activity_l2", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "dense_out_kernel_l1", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "dense_out_kernel_l2", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.0000001", + "step": "0.0000001" + }, + "name": "dense_out_bias_l2", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": ".0000001", + "step": "0.0000001" + }, + "name": "dense_out_activity_l2", + "parameterType": "double" + }, + { + "feasibleSpace": { + "list": [ + "TruncatedNormal", + "glorot_uniform", + "GlorotNormal", + "HeNormal", + "random_normal" + ] + }, + "name": "conv_initializer", + "parameterType": "categorical" + }, + { + "feasibleSpace": { + "list": [ + "TruncatedNormal", + "glorot_uniform", + "GlorotNormal", + "HeNormal", + "random_normal" + ] + }, + "name": "dese_initializer", + "parameterType": "categorical" + }, + { + "feasibleSpace": { + "max": "0.95", + "min": "0.01", + "step": "0.1" + }, + "name": "dropout_rate", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "5", + "min": "1", + "step": "1" + }, + "name": "num_dense_layers", + "parameterType": "int" + }, + { + "feasibleSpace": { + "max": "20", + "min": "1", + "step": "1" + }, + "name": "num_dense_units", + "parameterType": "int" + }, + { + "feasibleSpace": { + "list": [ + "elu", + "relu", + "gelu", + "linear" + ] + }, + "name": "conv_activation", + "parameterType": "categorical" + }, + { + "feasibleSpace": { + "list": [ + "elu", + "relu", + "gelu", + "linear" + ] + }, + "name": "activation", + "parameterType": "categorical" + }, + { + "feasibleSpace": { + "list": [ + "huber_loss", + "mean_absolute_error", + "mse" + ] + }, + "name": "loss", + "parameterType": "categorical" + }, + { + "feasibleSpace": { + "max": "5", + "min": "1.2", + "step": "0.01" + }, + "name": "final_activation_scale_factor", + "parameterType": "double" + }, + { + "feasibleSpace": { + "max": "40", + "min": "1", + "step": "1" + }, + "name": "batch_size", + "parameterType": "int" + }, + { + "feasibleSpace": { + "max": "10", + "min": "1", + "step": "1" + }, + "name": "epochs", + "parameterType": "int" + }, + { + "feasibleSpace": { + "list": [ + "2023-01-051310" + ] + }, + "name": "time", + "parameterType": "categorical" + } + ] + }, + "katib_run": true, + "pipeline_description": "gwas-10-d", + "pipeline_name": "gwas-10-d", + "snapshot_volumes": true, + "volumes": [ + { + "annotations": [], + "mount_point": "/home/jovyan", + "name": "gwas-11-a-workspace-gxcvc", + "size": 5, + "size_type": "Gi", + "snapshot": false, + "type": "clone" + } + ] + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.0" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/notebooks/DL-gwas-gcp-example/README.md b/tutorials/notebooks/DL-gwas-gcp-example/README.md new file mode 100644 index 0000000..ed3a8ce --- /dev/null +++ b/tutorials/notebooks/DL-gwas-gcp-example/README.md @@ -0,0 +1,210 @@ +# Run a deep learning GWAS on soy height on Kubeflow Pipelines with Katib's Bayesian hyperparameter tuning. (Using minikf and the Kale Jupyter plugin) + +- David Thrower, NIEHS Office of Scientific Computing, Kelly Goverment Solutions + +## Acknowledgements: + +1. God for writing the laws of science we can all spend a lifetime trying to decipher and never fully understand. +2. Jennifer, my better half and my stepkids staying around thought the storm we have all weathered because of my career in science. +2. Yang Liu at University of Missouri and his colleagues, who developed the study which we are "partially" reproducing as an abbreviated version of the study in order to make a minimum viable demonstration. Below is the original paper and the original author's source code. Those who are subject matter experts, I encourage you to extend and complete this, and to adapt this to your own work. That is what this is here for. + - https://www.frontiersin.org/articles/10.3389/fgene.2019.01091/full + - https://github.com/kateyliu/DL_gwas +3. NIEHS Office of Scientific Computing + - Frank Day + - Kennith Grantham + - Greg Stamper + - Chris Stone + - Elizabeth Black + - Adam Burkholder + - Jason Baucom +4. The NIH CIT GCP support community + - Danny Chester + - Thad Carlson + - Kyle O'Connell + - Hil Liao + - Teja Peddi +5. GCP support community. + - Jeremiah Jenkins + - Cheryl Corman + - Alex, GCP Mexico City support team + - Diego, GCP Mexico City support team +6. The KF open source community: + - Too many to mention + - https://www.kubeflow.org/docs/about/community +7. Arrikto for the easy - to - deploy Kubeflow deployment and the low licensing fee for using this. + - Bogdan Kowalczyk + - Patrick Gryzan + - Constantinos Venetsanopoulos + - Amber Graner + - Chase Christensen + - Jimmy Guerrero + +## Summary: + +1. This task will deploy a deep learning (1D Convolutional Neural Network - MLP) GWAS experiment using the Kubeflow pipelines machine learning framework. For a tutorial on exactly how Convolutional 1D neural networks work, this is one of many recommended reads [0]. This specific algorithm is not the focus of this tutorial, as our focus is how to use Kubeflow to run any machine learning experiment in your research. My intent is to introduce you to the basic operation of the features that Kubeflow provides that are most relevant in a basic research analysis workflow and empower you to make meaningful use of them, these are tools that when used correctly, are user friendly and are in my humble opinion, underutilized by the life sciences community. This framework is used by CERN in some of their research [1], and CERN is also part of the KF open source community. This experiment will leave you with a template and the skills to build your own workflow relevant to your research. +2. This experiment should cost you $6 - $12 to run (given pricing at the time of this writing, 2022-12-22), assuming that: + 1. You run the experiment on the same data (or similar sized data) without modification + 2. You archive your experiment data and you delete the minikf deployment after the experiment has finished running. You can always spin up another deployment of minikf just as quickly for future experiments. +3. Kubeflow is an open - source resource which runs machine learning experiments on Kubernetes, a distributed container orchestration cluster [1] that can run things reproducibly on any current server or cloud. This has features that we will explore such as: + 1. Kubeflow pipelines: Kubeflow pipelines can make complex ML workflows into a GUI - based, parameterized, sharable and reproducible operation. Parameterizing and packaging common bioinformatic and quantitative tasks into a pipeline may create a more ergonomic work environment for the scientific community and could accelerate the cycle of iterative experimentation. + 2. Katib: Katib is a hyperparameter tuner which recursively deploys pipelines with different parameters and solves the optimal parameter set to build an optimal model. Neural Architecture Search features are also available with updated versions of Katib. NAS is basically the pinnacle of automation in model building. This is a bit beyond the scope of the discussion but, if you are interested in NAS, you may read about it here [5]. + 1. Here, we will use Gaussian Bayesian hyperparameter tuning which can usually solve a reasonably optimized model for a ML workflow with far fewer trials than a gridsearch or random search. Gridsearch and random search are also available if you do an experiment can benefit from it. + 2. Trials are automatically executed in parallel in separate container execution environments on the Kubernetes cluster. Each one runs the entire pipeline on a different selection of arguments for the pipieline's parameters. + 3. It is also likely that the next generation of Neural Architecture Search algorithms in development will inevitably be integrated into the platform in coming years, and it is likely to eliminate the need for model building labor altogether for many classification and regression problems. There are already NAS algorithms / autoMLs in development that are outperforming XGBoost and best-realistic-case manually developed models on small data sets without the need to script different models and tune their hyperparameters. Nonetheless, data preparation, sampling, subject matter expertise on the data, and human intuition won't be automated any time soon, so don't worry, you should always have a job. + 3. Kubeflow also provides numerous other features that are out of scope for this tutorial, but may be useful for some users. Many KF features, plugins, and 3rd party tools provide services to track model provenance, serving predictions as a component of production systems, model performance monitoring in production (e.g. monitoring for training - serving skew, model drift, etc.). These tools may be useful for those in the community who are trying to deploy production ML systems in a regulated environment, for example, those who are developing AI based medical or diagnostic systems, those developing models that review grant or job candidate applications and prioritize applications for review, and those developing models that participate in other administrative or financial decision making ... There are many great resources that you can read up on at your leisure if this is of interest to you. GCP's Vertex AI Platform also provides a stable implementation of these features, but not all of the convenient features for AI research which we will explore here. Here we will focus on these and leave you with templates that you can substitute the data we are analyzing here with your own, or even swap out deep learning training script with an XGBoost training task. See below some images of the actual task that this tutorial will **easily** deploy from a Jupyter notebook (in the special Jupyter environment we will provision). + + ![assets/dl-gwas-headline-1.png](assets/dl-gwas-headline-1.png) + ![assets/dl-gwas-headline-2.png](assets/dl-gwas-headline-2.png) + +## Step 1: Make sure that the required APIs are enabled. + +On GCP, many services are turned off by default for security reasons, because GCP supports many customers that work in regulated industries such as healthcare, defense, and financial services. Since we are working in a project that is designated for running academic experiments and is segregated from production resources, we can safely enable some of these services as are necessary for this experiment. + +1. Log into GCP with your NIH credentials `https://cloud.google.com`. After that click *console* in the upper right corner of the page. +2. Accept any terms of service if prompted. +3. On the main GCP console menu on the left, find [APIs and services] > library. +![assets/000-enable-apis.png](assets/000-enable-apis.png) +4. On the search field that appears on the top of the screen, paste `serviceusage.googleapis.com`. +5. Click *enable*. +![assets/service-usage-api.png](assets/service-usage-api.png) +6. Repeat this, this time find and enable, `servicemanagement.googleapis.com` +![assets/service-management-api.png](assets/service-management-api.png) +8. Repeat this, this time find and enable, the compute engine API. +![assets/enable-compute-engine.png](assets/enable-compute-engine.png) +9. When you follow the downstream steps, you may be prompted to enable additional APIs. If so, repeat this as necessary. + +## Step 2: Deploy minikf kubeflow: + +Minikf is a small deployment of Kubeflow on a minikube Kubernetes instance. These minikube instances are single machine Kubernetes clusters that are meant for development use. For tasks this size that don't need to true highly available distributed HPC cluster to run, this is ideal, as these are easy to deploy when needed and delete when not. At current pricing at the time of this writing, the optimal scale of machine we need to run this job costs about $0.50 an hour. + +1. On the main GCP console menu on the left, find the GCP marketplace. +![ASSETS/001-marketplace.png](assets/001-marketplace.png) +2. When the marketplace page opens, enter in its search bar "minikf". +3. Click on *Arrikto minikf*. +4. Set the configuration for your minikf deployment: + 1. Give it any suitable name you want. + 2. Also change the machine type to any machine in the N2 family or its successor, having **16 CPU and 64 GB ram, n2-standard-16 at the time of this writing**. + 3. Don't get sticker shock on the monthly price. This is what you would pay if you left this running continuously, which I don't recommend doing. Here, we will use this for a few hours, make a copy of important data, then delete the instance. The price is pro-rated to the hours used. + 4. Provisioning a GPU is not necessary, but a GPUs it will make the experiment complete much more quickly once it is deployed on the cluster. Unless you are already familiar with the platform, I would recommend experimenting first without the GPU. They are a little expensive and it may take a little time to get the task deployed on the cluster until you are used to the setup. You probably don't want to pay for a GPU that's sitting idle while we fumble around the system. + 5. Leave all the other fields as default and click the *deploy* button at the bottom of the page. +![assets/002-name-minikf.png](assets/002-name-minikf.png) +![assets/n2-standard-16.png](assets/n2-standard-16.png) +5. When the page that pops up tells you that the deployment was successful, click the button [ssh]. + 1. A terminal should pop up. Pay attention to the browser for "pop up blocked" if this does not appear and enable popups from GCP if necessary. + ![assets/ssh-link.png](assets/ssh-link.png) + 2. When this terminal pops up, type: `gcloud services enable servicemanagement.googleapis.com`. If this throws errors, go back to "[APIs and services] > [library] and enable `serviceusage.googleapis.com`. Then close the ssh terminal, open a new one, and re-try `gcloud services enable servicemanagement.googleapis.com`. (This isn't an error. Yes we have to enable it here too). It doesn't make sense why, we just do... + ![assets/enable-service-management.png](assets/enable-service-management.png) + 3. Type: `minikf` and press enter. + ![assets/run-minikf-startup.png](assets/run-minikf-startup.png) + 3. Wait for it to tell you that minikf is ready. If this freezes up with the caption at "exposing services 33% progress" for more than 10 minutes, submit a help ticket on the **NIH** service desk and reference minikf and kubeflow. +6. When the terminal tells you minikf is ready, you may close the terminal and from the web page on GCP where you deployed this, click the link to the dashboard that the marketplace page on GCP gives you. Log in with the user and password that the page gives you. + +## Step 3: create your Jupyter notebook: + +1. Click on *Notebooks* and click on "new" or "+" button. +![assets/004-notebook.png](assets/004-notebook.png) +![assets/x001-new-notebook.png](assets/x001-new-notebook.png) +2. Configure the notebook to: + 1. any suitable name + 2. For docker image, pick any image having a name that includes both **"tensorflow"** and **"kale"**. Tensorflow is required for the script to run, and Kale will automatically compile and submit your pipeline for you. + 3. Provisions this notebook with 4.5 CPU and 9 GB of RAM. + 4. No GPU. + 5. Leave the "Workspace Volume as its default." + 6. For "Data volume", click "+" and leave what comes up as its default. + 7. Make sure "Allow access to Kubeflow Pipelines, Allow access to Rok" is selected. + 8. Make sure "enable shared memory is selected". This allows all the workers running the jobs in parallel to use a flexible shared pool of memory. + 8. Click *Launch*. +![assets/00-create-new-notebook1.png](assets/00-create-new-notebook1.png) +![assets/01-r3-create-new-notebook2.png](assets/01-r3-create-new-notebook2.png) +![assets/02-create-new-notebook3.png](assets/02-create-new-notebook3.png) + 9. When the green checkmark shows that the notebook is ready, click [connect]. +![assets/03-open-notebook.png](assets/03-open-notebook.png) + +## Step 4: Run the notebook in the notebooks environment. + +If you chose a jupyter tensorflow container above, this should have the Kale notebooks extension. Click on the extension and make sure it's enabled. Also note the control for "Hyperparameter tuning with Katib". Leave this off for now, but we will revisit this one soon: + +![assets/05-enable-kale.png](assets/05-enable-kale.png) + +1. Upload the notebook "a1gwaskaleversion.ipynb" from this folder and the sequence file "IMP_height.txt" to the notebooks environment. You can do this one of 2 ways: + 1. Open a Jupyter terminal and run `git clone [the url for this repo]`. then `cd ...` into this directory. Note that the url you will use will be [ADD URL], since I was copying the notebook from a development copy of the repo. + ![assets/x004-launch-terminal.png](assets/x004-launch-terminal.png) + ![assets/x003-git-clone.png](assets/x003-git-clone.png) + 2. Download these 2 files, then upload them from the Jupyter files UI this way: + ![assets/04-upload-notebook-and-data.png](assets/04-upload-notebook-and-data.png) +2. The kale notebook will add a selector to the right of each cell. When you click it, a menu opens above the cell. You must make a selection from this for each cell before you ask Kale to submit your job. This will tell Kale what purpose the cell serves in the pipeline [3] and how it should contextualize the cell's content. On the first 2 cells, select "skip". +![assets/click-set-cell-kind.png](assets/click-set-cell-kind.png) +![assets/x006-skip.png](assets/x006-skip.png) +3. Run the first cell. It will install the updated version of Tensorflow, which will enable XLA, which should make the job run much more quickly, and other libraries. Since the options to use XLA are selected, the job will error out if this is not updated. + - If you are curious what XLA is, and want to read on, XLA or accelerated linear algebra is a processor (hardware) technology that allows the processor to do multiple tandem mathematical operations in one step without caching intermediate results, instead of the traditional way we do math where we complete the first operation, save the result of it, and then perform the second operation on the saved output of the first one. Basically the chip has a large and complex block of transistors arranged where it can be given the operands, the 2 desired operations and their order, and will perform, for example a "multiplication-addition" in one step. This is of course much faster than the old fashioned approach, but the downside is that it needs to be compiled with machine - specific C library options. The newer versions of Tensorflow have an option that lets you tell Tensorflow you want it to "JIT" compile its operations for XLA. JIT compiling also does other hardware - level optimizations, such as "function inlining", which basically means that the compiler does some specific refactoring of the code in the background to make it run faster. If you are curious to read more about this, you can here [4] ... +4. Run the second cell. **Wait for a popup to appear asking you if you want to restart the kernel and click [ok] before you run the cells after this.** It will restart the Jupyter kernel, so the upgrades become effective. If you run the next cell before clicking OK, the notebook will freeze up, and you will need to restart the kernel yourself. +![assets/x007-wait.png](assets/x007-wait.png) +![assets/x008-restart-ok.png](assets/x008-restart-ok.png) +5. For the remaining cells: + - Set the 3rd cell as imports and run it. + - Set the 4th cell as "pipeline parameters" and run it. + ![assets/updated-pipeline-params.png](assets/updated-pipeline-params.png) + - Set the 5th cell as "a pipeline step". In the example, I named it "preprocessing", but you can name it anything you want that. For depends on, leave blank. + ![assets/x009-preprocessing.png](assets/x009-preprocessing.png) + - For the 6th cell, set it as a pipeline step. In the example, I named it "train". In this one, set the depends on field to the name you assigned to the last cell. The purpose of the depends on field is to set the order of workflow steps. By default, Kubeflow always runs in separate execution environments on the cluster, and in addition to this, unless you tell it to do otherwise, Kubeflow will also try to run all workflow steps in parallel. If one step depends on the output of another step as its input, this will fail out. In this case, this is the same, because the first step of the workflow is a data preprocessing step. It takes in one tab delimited CSV sequence file, train-test splits it, reformats it to be amenable to a 1-d convolutional layer, and then saves the train data, train labels, test data, and test labels in separate files. The second step trains and and tunes a neural network on the data which the first step prepared. Since the second step needs files that the first step will create, we can't run these in parallel. The data preprocessing must be completed first. + ![assets/08-pipeline-step.png](assets/08-pipeline-step.png) + - For the last step, set this as "pipeline metrics". This will return the metric "val_mean_absolute_error" which the Katib tuner will try to minimize. + ![assets/09-pipeline-metrics.png](assets/09-pipeline-metrics.png) + +## Step 5: Configure Katib, compile your job, and submit it. (last step, and Kubeflow has it from here.): + +1. In the Kale panel to the left: Enable the hyperparameter tuning with Kale. A menu will open. +2. Click *Set up Katib Job*. + 1. Checkbox each box for the pipeline parameters and set the following: + - All l1 and l2 regularizations: 0.0000001 to 0.9 + - learning_rate: min 0.0001 max 0.3 step: .001 # Avoids overshooting an optimal solution when adjusting the kernel weights (weights are the "m" in the y = mx + b model) A neural network is just a chain of m3(m2(mx + b) + b2) + b3, with an activation function nested between each layer that adds non-linearity so it can't collapse to a single layer. + - dropout_rate: min 0.01 max 0.95 step 0.1 # Prevents overfitting; allows a more complex and robust model to be used without overfitting. + - num_dense_layers: min 1 max 5 step 1 + - conv_activation and activation: elu, relu, gelu, linear (which activation function will be used; As a note, most textbook examples teach you to use relu. Elu is often said in an out of context way to be "more computationally expensive". In reality, models trained with elu usually reach convergence within a few epochs, sometimes in as few as 1 /20 as many epochs, making the higher per - epoch computational expense a moot problem in many cases, unless the celling of available ram and GPU power is barely able to compute the gradient for your task with relu. Elu usually wins out, but we will let the tuner figure what works best here in this specific case.) + - batch_size: min 5 max 35 step 1 # If you run into "out of memory" errors, then reduce the maximum. + - epochs: min 1 max 15 step 1 + ![assets/10-setup-katib.png](assets/10-setup-katib.png) + 2. Select the Bayesian > Gaussian tuner. Leave the other tuner options as defaults and set it to run 3 trials in parallel and set it to run 35 trials in total (The tuner will probably converge on an optima well before that, but just in case your run does a little better than mine ... . Leave the other tuner's settings as the defaults, unless you are familiar and have recommendations on how we may improve its performance. If you do, open an issue and pull request on Github so we can make this better as we go. + 3. Click *Close*. + 4. Select advanced options for the storage. + - Advanced settings + - **Make sure "Docker image" is blank.** + - Storage class default + - Read write many + - Use notebook volume + - Take ROK snapshot during each step + - 5GB + - Second volume: None + - Everything else defaults + + ![assets/11-r2-setup-job.png](assets/11-r2-setup-job.png) + + 5. Click [Compile and Run Katib Job] + 6. Confirm it submitted successfully. + 7. Click on the browser tab where main Kubeflow dashboard is open. + - Click on the *Runs* tab. + ![assets/xx-0002-pick-a-run.png](assets/xx-0002-pick-a-run.png) + - Once you have opened a run, click on a pipeline step. + ![assets/xx0003-pick-pipeline-step.png](assets/xx0003-pick-pipeline-step.png) + - On a step, click its *logs*. + ![assets/xx0006-step-logs.png](assets/xx0006-step-logs.png) + - There are a few other useful tabs here like the the inputs and outputs of a step which list the hyperparameters and metrics which a step returned. + ![assets/xx0007-step-io.png](assets/xx0007-step-io.png) + - Click on experiments automl (Katib), then click on *your experiment*. + ![assets/xx0001-navigate-to-experiment.png](assets/xx0001-navigate-to-experiment.png) + - Once the first 3 runs have completed, return here. Notice the parallel coordinates visualization that shows the patterns in the parameters chosen for the trials and which subset of the hyperparameter space is contributing to the best model performance. Once several trials have completed, this will be very informative. The one in this example is a bit cluttered, I admit, as it has so many hyperaprameters. For most tasks, however, this visualization will make it clear what is tending to work and what isn't. + ![assets/13-parallel-coords.png](assets/13-parallel-coords.png) + - Feel free to find something else to do for about 2 - 3 hours. Kubeflow and Katib will continue running the experiment even if you are not logged in. In 2 - 3 hours, you can return to the [experiments AutoML] page, and it will provide the best hyperparameters it found among the trials and the validation mean absolute error for the best trial. You can run the train task with these parameters and get the model to use for further work. Alternatively, you can set the option [make a rok image of of each trial]. Visit these pages and see your results. Take screenshots. (In Windows (r), search for the snipping tool. In Mac, press "[command] + [shift] + 4"). Write down the best parameters it found. You will need these in the second notebook. + ![assets/14-successful-katib-run.png](assets/14-successful-katib-run.png) + ![assets/x002-final-results-page.png](assets/x002-final-results-page.png) + - Once you are sure you have a copy of everything you want, go back to the page in the deployment manager and delete the deployment, so you don't keep being billed for it. We recommend selecting the option to delete everything "disks, VPC settings, ...". The SSD disks that this uses are a little expensive. + ![assets/stop-instance.png](assets/stop-instance.png) + +## References + +- [0] https://colab.research.google.com/github/kmkarakaya/ML_tutorials/blob/master/Conv1d_Predict_house_prices.ipynb +- [1] https://www.epj-conferences.org/articles/epjconf/abs/2021/05/epjconf_chep2021_02067/epjconf_chep2021_02067.html +- [2] https://www.kubeflow.org/docs/started/introduction/ +- [3] https://docs.arrikto.com/features/pipelines/jupyterlab/cell-types.html#imports-cells +- [4] https://www.greenend.org.uk/rjk/tech/inline.html +- [5] https://en.wikipedia.org/wiki/Neural_architecture_search diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/00-create-new-notebook1.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/00-create-new-notebook1.png new file mode 100644 index 0000000..894f63e Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/00-create-new-notebook1.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/000-enable-apis.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/000-enable-apis.png new file mode 100644 index 0000000..4c05358 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/000-enable-apis.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/001-marketplace.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/001-marketplace.png new file mode 100644 index 0000000..fbb045a Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/001-marketplace.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/002-name-minikf.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/002-name-minikf.png new file mode 100644 index 0000000..8068370 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/002-name-minikf.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/003-pick-machine.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/003-pick-machine.png new file mode 100644 index 0000000..8395ba6 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/003-pick-machine.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/004-notebook.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/004-notebook.png new file mode 100644 index 0000000..2995a72 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/004-notebook.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/01-create-new-notebook2.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/01-create-new-notebook2.png new file mode 100644 index 0000000..5b8ae51 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/01-create-new-notebook2.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/01-r2-create-new-notebook2.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/01-r2-create-new-notebook2.png new file mode 100644 index 0000000..db6f110 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/01-r2-create-new-notebook2.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/01-r3-create-new-notebook2.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/01-r3-create-new-notebook2.png new file mode 100644 index 0000000..e812cc8 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/01-r3-create-new-notebook2.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/02-create-new-notebook3.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/02-create-new-notebook3.png new file mode 100644 index 0000000..06f5dd5 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/02-create-new-notebook3.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/03-open-notebook.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/03-open-notebook.png new file mode 100644 index 0000000..2ab5d98 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/03-open-notebook.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/04-upload-notebook-and-data.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/04-upload-notebook-and-data.png new file mode 100644 index 0000000..880532e Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/04-upload-notebook-and-data.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/05-enable-kale.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/05-enable-kale.png new file mode 100644 index 0000000..29b141f Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/05-enable-kale.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/06-pipeline-parameters.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/06-pipeline-parameters.png new file mode 100644 index 0000000..5ee06bd Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/06-pipeline-parameters.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/07-pipeline-parameters-katib.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/07-pipeline-parameters-katib.png new file mode 100644 index 0000000..a2b8dba Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/07-pipeline-parameters-katib.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/08-pipeline-step.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/08-pipeline-step.png new file mode 100644 index 0000000..441d296 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/08-pipeline-step.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/09-pipeline-metrics.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/09-pipeline-metrics.png new file mode 100644 index 0000000..22882b8 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/09-pipeline-metrics.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/10-setup-katib.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/10-setup-katib.png new file mode 100644 index 0000000..7439df1 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/10-setup-katib.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/11-r2-setup-job.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/11-r2-setup-job.png new file mode 100644 index 0000000..779bd62 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/11-r2-setup-job.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/11-setup-job.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/11-setup-job.png new file mode 100644 index 0000000..0741436 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/11-setup-job.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/12-compare.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/12-compare.png new file mode 100644 index 0000000..6cf1500 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/12-compare.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/13-parallel-coords.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/13-parallel-coords.png new file mode 100644 index 0000000..7c36105 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/13-parallel-coords.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/14-successful-katib-run.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/14-successful-katib-run.png new file mode 100644 index 0000000..be7b4ed Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/14-successful-katib-run.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/click-set-cell-kind.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/click-set-cell-kind.png new file mode 100644 index 0000000..5e5add7 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/click-set-cell-kind.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/dl-gwas-headline-1.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/dl-gwas-headline-1.png new file mode 100644 index 0000000..3c6592e Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/dl-gwas-headline-1.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/dl-gwas-headline-2.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/dl-gwas-headline-2.png new file mode 100644 index 0000000..c3a300f Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/dl-gwas-headline-2.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/enable-compute-engine.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/enable-compute-engine.png new file mode 100644 index 0000000..193ab59 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/enable-compute-engine.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/enable-service-management.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/enable-service-management.png new file mode 100644 index 0000000..4985b25 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/enable-service-management.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/n2-standard-16.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/n2-standard-16.png new file mode 100644 index 0000000..2776a65 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/n2-standard-16.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/old-11-r2-setup-job.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/old-11-r2-setup-job.png new file mode 100644 index 0000000..120d88b Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/old-11-r2-setup-job.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/old-x002-final-results-page.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/old-x002-final-results-page.png new file mode 100644 index 0000000..a21da27 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/old-x002-final-results-page.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/run-minikf-startup.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/run-minikf-startup.png new file mode 100644 index 0000000..018c4d2 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/run-minikf-startup.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/service-management-api.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/service-management-api.png new file mode 100644 index 0000000..e4d0ef5 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/service-management-api.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/service-usage-api.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/service-usage-api.png new file mode 100644 index 0000000..d07c49c Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/service-usage-api.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/ssh-link.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/ssh-link.png new file mode 100644 index 0000000..f51a3a3 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/ssh-link.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/stop-instance.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/stop-instance.png new file mode 100644 index 0000000..e039784 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/stop-instance.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/updated-pipeline-params.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/updated-pipeline-params.png new file mode 100644 index 0000000..f4453bd Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/updated-pipeline-params.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/x001-new-notebook.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/x001-new-notebook.png new file mode 100644 index 0000000..951d6d5 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/x001-new-notebook.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/x002-final-results-page.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/x002-final-results-page.png new file mode 100644 index 0000000..b1fe14d Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/x002-final-results-page.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/x003-git-clone.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/x003-git-clone.png new file mode 100644 index 0000000..6f5ea89 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/x003-git-clone.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/x004-launch-terminal.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/x004-launch-terminal.png new file mode 100644 index 0000000..17d4e95 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/x004-launch-terminal.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/x006-skip.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/x006-skip.png new file mode 100644 index 0000000..015afdb Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/x006-skip.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/x007-wait.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/x007-wait.png new file mode 100644 index 0000000..0c62041 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/x007-wait.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/x008-restart-ok.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/x008-restart-ok.png new file mode 100644 index 0000000..2faeff7 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/x008-restart-ok.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/x009-preprocessing.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/x009-preprocessing.png new file mode 100644 index 0000000..49a8839 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/x009-preprocessing.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/xx-0002-pick-a-run.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/xx-0002-pick-a-run.png new file mode 100644 index 0000000..888224b Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/xx-0002-pick-a-run.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/xx0001-navigate-to-experiment.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/xx0001-navigate-to-experiment.png new file mode 100644 index 0000000..540af7e Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/xx0001-navigate-to-experiment.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/xx0003-pick-pipeline-step.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/xx0003-pick-pipeline-step.png new file mode 100644 index 0000000..5560c63 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/xx0003-pick-pipeline-step.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/xx0006-step-logs.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/xx0006-step-logs.png new file mode 100644 index 0000000..e5fb1d2 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/xx0006-step-logs.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/assets/xx0007-step-io.png b/tutorials/notebooks/DL-gwas-gcp-example/assets/xx0007-step-io.png new file mode 100644 index 0000000..42f02b7 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/assets/xx0007-step-io.png differ diff --git a/tutorials/notebooks/DL-gwas-gcp-example/nb_assets/x002-final-results-page.png b/tutorials/notebooks/DL-gwas-gcp-example/nb_assets/x002-final-results-page.png new file mode 100644 index 0000000..a21da27 Binary files /dev/null and b/tutorials/notebooks/DL-gwas-gcp-example/nb_assets/x002-final-results-page.png differ diff --git a/tutorials/notebooks/GWASCoatColor/GWAS_coat_color.ipynb b/tutorials/notebooks/GWASCoatColor/GWAS_coat_color.ipynb new file mode 100644 index 0000000..3aac3ce --- /dev/null +++ b/tutorials/notebooks/GWASCoatColor/GWAS_coat_color.ipynb @@ -0,0 +1,394 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "7a244bb3", + "metadata": {}, + "source": [ + "# GWAS in the cloud\n", + "We adapted the NIH CFDE tutorial from [here](https://training.nih-cfde.org/en/latest/Bioinformatic-Analyses/GWAS-in-the-cloud/background/) and fit it to a notebook. We have greatly simplified the instructions, so if you need or want more details, look at the full tutorial to find out more.\n", + "Most of this notebook is bash, but expects that you are using a Python kernel, until step 3, plotting, you will need to switch your kernel to R." + ] + }, + { + "cell_type": "markdown", + "id": "8fbf6304", + "metadata": {}, + "source": [ + "## 1. Setup\n", + "### Download the data\n", + "use %%bash to denote a bash block. You can also use '!' to denote a single bash command within a Python notebook" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8ec900bd", + "metadata": {}, + "outputs": [], + "source": [ + "%%bash\n", + "mkdir GWAS\n", + "curl -LO https://de.cyverse.org/dl/d/E0A502CC-F806-4857-9C3A-BAEAA0CCC694/pruned_coatColor_maf_geno.vcf.gz\n", + "curl -LO https://de.cyverse.org/dl/d/3B5C1853-C092-488C-8C2F-CE6E8526E96B/coatColor.pheno" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4d43ae73", + "metadata": {}, + "outputs": [], + "source": [ + "%%bash\n", + "mv *.gz GWAS\n", + "mv *.pheno GWAS\n", + "ls GWAS" + ] + }, + { + "cell_type": "markdown", + "id": "28aadbf8", + "metadata": {}, + "source": [ + "### Install dependencies\n", + "Here we install mamba, which is faster than conda, but it can be tricky to add to path in a Sagemaker notebook so we just call the whole path. You could also skip this install and just use conda since that is preinstalled in the kernel." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b3ba3eef", + "metadata": {}, + "outputs": [], + "source": [ + "! curl -L -O https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-$(uname)-$(uname -m).sh\n", + "! bash Mambaforge-$(uname)-$(uname -m).sh -b -p $HOME/mambaforge" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f22059df-5a9c-4982-9b2f-bd15ce746bb2", + "metadata": {}, + "outputs": [], + "source": [ + "#add to your path\n", + "import os\n", + "os.environ[\"PATH\"] += os.pathsep + os.environ[\"HOME\"]+\"/mambaforge/bin\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b219074a", + "metadata": {}, + "outputs": [], + "source": [ + "! mamba install -y -c bioconda plink vcftools" + ] + }, + { + "cell_type": "markdown", + "id": "3de2fc4c", + "metadata": {}, + "source": [ + "## 2. Analyze" + ] + }, + { + "cell_type": "markdown", + "id": "013d960d", + "metadata": {}, + "source": [ + "### Make map and ped files from the vcf file to feed into plink" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e91c7a01", + "metadata": {}, + "outputs": [], + "source": [ + "cd GWAS" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6570875d", + "metadata": {}, + "outputs": [], + "source": [ + "! vcftools --gzvcf pruned_coatColor_maf_geno.vcf.gz --plink --out coatColor" + ] + }, + { + "cell_type": "markdown", + "id": "b9a38761", + "metadata": {}, + "source": [ + "### Create a list of minor alleles\n", + "\n", + "For more info on these terms, look at step 2 [here](https://training.nih-cfde.org/en/latest/Bioinformatic-Analyses/GWAS-in-the-cloud/analyze/)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6c868a67", + "metadata": {}, + "outputs": [], + "source": [ + "#unzip vcf\n", + "! vcftools --gzvcf pruned_coatColor_maf_geno.vcf.gz --recode --out pruned_coatColor_maf_geno" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8e11f991", + "metadata": {}, + "outputs": [], + "source": [ + "#create list of minor alleles\n", + "! cat pruned_coatColor_maf_geno.recode.vcf | awk 'BEGIN{FS=\"\\t\";OFS=\"\\t\";}/#/{next;}{{if($3==\".\")$3=$1\":\"$2;}print $3,$5;}' > minor_alleles" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8cff47e3", + "metadata": {}, + "outputs": [], + "source": [ + "! head minor_alleles" + ] + }, + { + "cell_type": "markdown", + "id": "56d901c7", + "metadata": {}, + "source": [ + "### Run quality controls" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dafa14a6", + "metadata": {}, + "outputs": [], + "source": [ + "#calculate missingness per locus\n", + "! plink --file coatColor --make-pheno coatColor.pheno \"yellow\" --missing --out miss_stat --noweb --dog --reference-allele minor_alleles --allow-no-sex --adjust" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5cf5f51b", + "metadata": {}, + "outputs": [], + "source": [ + "#take a look at lmiss, which is the per locus rates of missingness\n", + "! head miss_stat.lmiss" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "915bb263", + "metadata": {}, + "outputs": [], + "source": [ + "#peek at imiss which is the individual rates of missingness\n", + "! head miss_stat.imiss" + ] + }, + { + "cell_type": "markdown", + "id": "4c11ca71", + "metadata": {}, + "source": [ + "### Convert to plink binary format" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3b8f2d7f", + "metadata": {}, + "outputs": [], + "source": [ + "! plink --file coatColor --allow-no-sex --dog --make-bed --noweb --out coatColor.binary" + ] + }, + { + "cell_type": "markdown", + "id": "e36f6cd7", + "metadata": {}, + "source": [ + "### Run a simple association step (the GWAS part!)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f926ef9b", + "metadata": {}, + "outputs": [], + "source": [ + "! plink --bfile coatColor.binary --make-pheno coatColor.pheno \"yellow\" --assoc --reference-allele minor_alleles --allow-no-sex --adjust --dog --noweb --out coatColor" + ] + }, + { + "cell_type": "markdown", + "id": "b397d484", + "metadata": {}, + "source": [ + "### Identify statistical cutoffs\n", + "This code finds the equivalent of 0.05 and 0.01 p value in the negative-log-transformed p values file. We will use these cutoffs to draw horizontal lines in the Manhattan plot for visualization of haplotypes that cross the 0.05 and 0.01 statistical threshold (i.e. have a statistically significant association with yellow coat color)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b94e1e2a", + "metadata": {}, + "outputs": [], + "source": [ + "%%bash\n", + "unad_cutoff_sug=$(tail -n+2 coatColor.assoc.adjusted | awk '$10>=0.05' | head -n1 | awk '{print $3}')\n", + "unad_cutoff_conf=$(tail -n+2 coatColor.assoc.adjusted | awk '$10>=0.01' | head -n1 | awk '{print $3}')" + ] + }, + { + "cell_type": "markdown", + "id": "1f52e97c", + "metadata": {}, + "source": [ + "## 3. Plotting\n", + "In this tutorial, plotting is done in R, so at this point you can change your kernel to R in the top right. Wait for it to say 'idle' in the bottom left, then continue. You could also plot using Python native packages and maintain the Python notebook kernel." + ] + }, + { + "cell_type": "markdown", + "id": "effb5acd", + "metadata": {}, + "source": [ + "### Install qqman" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "60feed89", + "metadata": {}, + "outputs": [], + "source": [ + "install.packages('qqman', contriburl=contrib.url('http://cran.r-project.org/'))" + ] + }, + { + "cell_type": "markdown", + "id": "d3f1fcd2", + "metadata": {}, + "source": [ + "### Run the plotting function" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a7e8cd2b", + "metadata": {}, + "outputs": [], + "source": [ + "#make sure you are still CD in GWAS, when you change kernel it may reset to home\n", + "setwd('GWAS')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7946a3a7", + "metadata": {}, + "outputs": [], + "source": [ + "require(qqman)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0d28ef2c", + "metadata": {}, + "outputs": [], + "source": [ + "data=read.table(\"coatColor.assoc\", header=TRUE)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8e5207be", + "metadata": {}, + "outputs": [], + "source": [ + "data=data[!is.na(data$P),]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6330b1e0", + "metadata": {}, + "outputs": [], + "source": [ + "manhattan(data, p = \"P\", col = c(\"blue4\", \"orange3\"),\n", + " suggestiveline = 12,\n", + " genomewideline = 15,\n", + " chrlabs = c(1:38, \"X\"), annotateTop=TRUE, cex = 1.2)" + ] + }, + { + "cell_type": "markdown", + "id": "26787d84", + "metadata": {}, + "source": [ + "In our graph, haplotypes in four parts of the genome (chromosome 2, 5, 28 and X) are found to be associated with an increased occurrence of the yellow coat color phenotype.\n", + "\n", + "The top associated mutation is a nonsense SNP in the gene MC1R known to control pigment production. The MC1R allele encoding yellow coat color contains a single base change (from C to T) at the 916th nucleotide." + ] + } + ], + "metadata": { + "environment": { + "kernel": "python3", + "name": "tf2-gpu.2-11.m110", + "type": "gcloud", + "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-11:m110" + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/notebooks/GenAI/GCP_GenAI_Huggingface.ipynb b/tutorials/notebooks/GenAI/GCP_GenAI_Huggingface.ipynb new file mode 100644 index 0000000..09b3d8d --- /dev/null +++ b/tutorials/notebooks/GenAI/GCP_GenAI_Huggingface.ipynb @@ -0,0 +1,2590 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "92021b22-3fbf-4489-9e88-aea4d73f3529", + "metadata": {}, + "source": [ + "# Finetuning and Deploying Hugging Face Models on Vertex AI" + ] + }, + { + "cell_type": "markdown", + "id": "dfbc2ea5-1aca-4322-a15c-7bcbb3925ef6", + "metadata": {}, + "source": [ + "For this tutorial it is recommended to use 1 GPU to speed up processes, this notebooks was run using the machinetype n1-highcpu-8 (8 vCPUs, 7.199 GB RAM) on Tensorflow. Visit the following tutorial to set up notebooks that utilize: GPUs [Spinning up a Vertex AI Notebook](../../../docs/vertexai.md).\n", + "\n", + "This tutorial will focus on utilizing Hugging Face which is a repository for user to share and download machine learning models, datasets, and demos. For this tutorial we will load in a model and dataset from Hugging Face and train and test our model before deploying it on Vertex AI. The model we will be deploying is Flan T5 and the datasets is [ccdv/pubmed-summarization](https://HuggingFace.co/datasets/ccdv/pubmed-summarization). Steps will show how to hypertune a model locally and how to launch our custom training job on Vertex AI Training, these steps are based on Keras NLP Tutorials for [abstractive summarization](https://keras.io/examples/nlp/t5_hf_summarization/).\n", + "\n", + "You may be wondering why are we training a pretrained model? The reason for this is because we are fine tuning our pretrained model for optimal performance on a particular application, in our case summarizing scientific documents. This is not a necessary step anymore as new methods have been made to enhance model performance like zero-shot learning which we will go over in our next tutorial." + ] + }, + { + "cell_type": "markdown", + "id": "6ab3668c-58c0-489a-aa4f-6f7e045b450f", + "metadata": {}, + "source": [ + "## Install Tools" + ] + }, + { + "cell_type": "markdown", + "id": "161dea96-601e-4194-a285-51b0c4403e9d", + "metadata": {}, + "source": [ + "Hugging Face **transformers** are an open-source framework that allows you to utilize APIs and tools to download pretrained models, set hyperparameters, tokenize datasets, and further tune them to suite your needs. Here we are updating Vertex AI as well as installing the transformers package and **datasets** so that we can have access to Hugging Face datasets and as a bonus we are adding the S3 feature to help download datasets that may already be in a S3 bucket." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "a6e5884b-ac90-42d4-aafd-d34d5495d24d", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Collecting transformers\n", + " Obtaining dependency information for transformers from https://files.pythonhosted.org/packages/c1/bd/f64d67df4d3b05a460f281defe830ffab6d7940b7ca98ec085e94e024781/transformers-4.34.1-py3-none-any.whl.metadata\n", + " Downloading transformers-4.34.1-py3-none-any.whl.metadata (121 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m121.5/121.5 kB\u001b[0m \u001b[31m8.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hCollecting datasets\n", + " Obtaining dependency information for datasets from https://files.pythonhosted.org/packages/7c/55/b3432f43d6d7fee999bb23a547820d74c48ec540f5f7842e41aa5d8d5f3a/datasets-2.14.6-py3-none-any.whl.metadata\n", + " Downloading datasets-2.14.6-py3-none-any.whl.metadata (19 kB)\n", + "Collecting rouge_score\n", + " Downloading rouge_score-0.1.2.tar.gz (17 kB)\n", + " Preparing metadata (setup.py) ... \u001b[?25ldone\n", + "\u001b[?25hCollecting evaluate\n", + " Obtaining dependency information for evaluate from https://files.pythonhosted.org/packages/70/63/7644a1eb7b0297e585a6adec98ed9e575309bb973c33b394dae66bc35c69/evaluate-0.4.1-py3-none-any.whl.metadata\n", + " Downloading evaluate-0.4.1-py3-none-any.whl.metadata (9.4 kB)\n", + "Collecting keras_nlp\n", + " Obtaining dependency information for keras_nlp from https://files.pythonhosted.org/packages/37/d4/dfd85606db811af2138e97fc480eb7ed709042dd96dd453868bede0929fe/keras_nlp-0.6.2-py3-none-any.whl.metadata\n", + " Downloading keras_nlp-0.6.2-py3-none-any.whl.metadata (7.2 kB)\n", + "Requirement already satisfied: filelock in /opt/conda/lib/python3.10/site-packages (from transformers) (3.12.4)\n", + "Collecting huggingface-hub<1.0,>=0.16.4 (from transformers)\n", + " Obtaining dependency information for huggingface-hub<1.0,>=0.16.4 from https://files.pythonhosted.org/packages/ef/b5/b6107bd65fa4c96fdf00e4733e2fe5729bb9e5e09997f63074bb43d3ab28/huggingface_hub-0.18.0-py3-none-any.whl.metadata\n", + " Downloading huggingface_hub-0.18.0-py3-none-any.whl.metadata (13 kB)\n", + "Requirement already satisfied: numpy>=1.17 in /opt/conda/lib/python3.10/site-packages (from transformers) (1.23.5)\n", + "Requirement already satisfied: packaging>=20.0 in /opt/conda/lib/python3.10/site-packages (from transformers) (23.1)\n", + "Requirement already satisfied: pyyaml>=5.1 in /opt/conda/lib/python3.10/site-packages (from transformers) (6.0.1)\n", + "Requirement already satisfied: regex!=2019.12.17 in /opt/conda/lib/python3.10/site-packages (from transformers) (2023.8.8)\n", + "Requirement already satisfied: requests in /opt/conda/lib/python3.10/site-packages (from transformers) (2.31.0)\n", + "Collecting tokenizers<0.15,>=0.14 (from transformers)\n", + " Obtaining dependency information for tokenizers<0.15,>=0.14 from https://files.pythonhosted.org/packages/a7/7b/c1f643eb086b6c5c33eef0c3752e37624bd23e4cbc9f1332748f1c6252d1/tokenizers-0.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n", + " Downloading tokenizers-0.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.7 kB)\n", + "Collecting safetensors>=0.3.1 (from transformers)\n", + " Obtaining dependency information for safetensors>=0.3.1 from https://files.pythonhosted.org/packages/20/4e/878b080dbda92666233ec6f316a53969edcb58eab1aa399a64d0521cf953/safetensors-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n", + " Downloading safetensors-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.8 kB)\n", + "Requirement already satisfied: tqdm>=4.27 in /opt/conda/lib/python3.10/site-packages (from transformers) (4.66.1)\n", + "Requirement already satisfied: pyarrow>=8.0.0 in /opt/conda/lib/python3.10/site-packages (from datasets) (9.0.0)\n", + "Requirement already satisfied: dill<0.3.8,>=0.3.0 in /opt/conda/lib/python3.10/site-packages (from datasets) (0.3.1.1)\n", + "Requirement already satisfied: pandas in /opt/conda/lib/python3.10/site-packages (from datasets) (2.0.3)\n", + "Collecting xxhash (from datasets)\n", + " Obtaining dependency information for xxhash from https://files.pythonhosted.org/packages/80/8a/1dd41557883b6196f8f092011a5c1f72d4d44cf36d7b67d4a5efe3127949/xxhash-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n", + " Downloading xxhash-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (12 kB)\n", + "Collecting multiprocess (from datasets)\n", + " Obtaining dependency information for multiprocess from https://files.pythonhosted.org/packages/35/a8/36d8d7b3e46b377800d8dec47891cdf05842d1a2366909ae4a0c89fbc5e6/multiprocess-0.70.15-py310-none-any.whl.metadata\n", + " Downloading multiprocess-0.70.15-py310-none-any.whl.metadata (7.2 kB)\n", + "Requirement already satisfied: fsspec[http]<=2023.10.0,>=2023.1.0 in /opt/conda/lib/python3.10/site-packages (from datasets) (2023.9.2)\n", + "Requirement already satisfied: aiohttp in /opt/conda/lib/python3.10/site-packages (from datasets) (3.8.5)\n", + "Requirement already satisfied: absl-py in /opt/conda/lib/python3.10/site-packages (from rouge_score) (1.4.0)\n", + "Collecting nltk (from rouge_score)\n", + " Downloading nltk-3.8.1-py3-none-any.whl (1.5 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.5/1.5 MB\u001b[0m \u001b[31m80.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: six>=1.14.0 in /opt/conda/lib/python3.10/site-packages (from rouge_score) (1.16.0)\n", + "Collecting responses<0.19 (from evaluate)\n", + " Downloading responses-0.18.0-py3-none-any.whl (38 kB)\n", + "Requirement already satisfied: keras-core in /opt/conda/lib/python3.10/site-packages (from keras_nlp) (0.1.7)\n", + "Requirement already satisfied: rich in /opt/conda/lib/python3.10/site-packages (from keras_nlp) (13.5.3)\n", + "Requirement already satisfied: dm-tree in /opt/conda/lib/python3.10/site-packages (from keras_nlp) (0.1.8)\n", + "Collecting tensorflow-text (from keras_nlp)\n", + " Obtaining dependency information for tensorflow-text from https://files.pythonhosted.org/packages/0b/5f/8b301d2d0cea8334c22aaeb8880ce115ec34d7eba20f7b08c64202011a85/tensorflow_text-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n", + " Downloading tensorflow_text-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.9 kB)\n", + "Requirement already satisfied: attrs>=17.3.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets) (23.1.0)\n", + "Requirement already satisfied: charset-normalizer<4.0,>=2.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets) (3.2.0)\n", + "Requirement already satisfied: multidict<7.0,>=4.5 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets) (6.0.4)\n", + "Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets) (4.0.3)\n", + "Requirement already satisfied: yarl<2.0,>=1.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets) (1.9.2)\n", + "Requirement already satisfied: frozenlist>=1.1.1 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets) (1.4.0)\n", + "Requirement already satisfied: aiosignal>=1.1.2 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets) (1.3.1)\n", + "Requirement already satisfied: typing-extensions>=3.7.4.3 in /opt/conda/lib/python3.10/site-packages (from huggingface-hub<1.0,>=0.16.4->transformers) (4.5.0)\n", + "Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.10/site-packages (from requests->transformers) (3.4)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/conda/lib/python3.10/site-packages (from requests->transformers) (1.26.16)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.10/site-packages (from requests->transformers) (2023.7.22)\n", + "Collecting huggingface-hub<1.0,>=0.16.4 (from transformers)\n", + " Obtaining dependency information for huggingface-hub<1.0,>=0.16.4 from https://files.pythonhosted.org/packages/aa/f3/3fc97336a0e90516901befd4f500f08d691034d387406fdbde85bea827cc/huggingface_hub-0.17.3-py3-none-any.whl.metadata\n", + " Downloading huggingface_hub-0.17.3-py3-none-any.whl.metadata (13 kB)\n", + "Requirement already satisfied: namex in /opt/conda/lib/python3.10/site-packages (from keras-core->keras_nlp) (0.0.7)\n", + "Requirement already satisfied: h5py in /opt/conda/lib/python3.10/site-packages (from keras-core->keras_nlp) (3.9.0)\n", + "Collecting dill<0.3.8,>=0.3.0 (from datasets)\n", + " Obtaining dependency information for dill<0.3.8,>=0.3.0 from https://files.pythonhosted.org/packages/f5/3a/74a29b11cf2cdfcd6ba89c0cecd70b37cd1ba7b77978ce611eb7a146a832/dill-0.3.7-py3-none-any.whl.metadata\n", + " Downloading dill-0.3.7-py3-none-any.whl.metadata (9.9 kB)\n", + "Requirement already satisfied: click in /opt/conda/lib/python3.10/site-packages (from nltk->rouge_score) (8.1.7)\n", + "Requirement already satisfied: joblib in /opt/conda/lib/python3.10/site-packages (from nltk->rouge_score) (1.3.2)\n", + "Requirement already satisfied: python-dateutil>=2.8.2 in /opt/conda/lib/python3.10/site-packages (from pandas->datasets) (2.8.2)\n", + "Requirement already satisfied: pytz>=2020.1 in /opt/conda/lib/python3.10/site-packages (from pandas->datasets) (2023.3.post1)\n", + "Requirement already satisfied: tzdata>=2022.1 in /opt/conda/lib/python3.10/site-packages (from pandas->datasets) (2023.3)\n", + "Requirement already satisfied: markdown-it-py>=2.2.0 in /opt/conda/lib/python3.10/site-packages (from rich->keras_nlp) (3.0.0)\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /opt/conda/lib/python3.10/site-packages (from rich->keras_nlp) (2.16.1)\n", + "Requirement already satisfied: tensorflow-hub>=0.13.0 in /opt/conda/lib/python3.10/site-packages (from tensorflow-text->keras_nlp) (0.14.0)\n", + "Collecting tensorflow<2.15,>=2.14.0 (from tensorflow-text->keras_nlp)\n", + " Obtaining dependency information for tensorflow<2.15,>=2.14.0 from https://files.pythonhosted.org/packages/e2/7a/c7762c698fb1ac41a7e3afee51dc72aa3ec74ae8d2f57ce19a9cded3a4af/tensorflow-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n", + " Downloading tensorflow-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.1 kB)\n", + "Requirement already satisfied: mdurl~=0.1 in /opt/conda/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich->keras_nlp) (0.1.2)\n", + "Requirement already satisfied: astunparse>=1.6.0 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (1.6.3)\n", + "Requirement already satisfied: flatbuffers>=23.5.26 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (23.5.26)\n", + "Requirement already satisfied: gast!=0.5.0,!=0.5.1,!=0.5.2,>=0.2.1 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (0.4.0)\n", + "Requirement already satisfied: google-pasta>=0.1.1 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (0.2.0)\n", + "Requirement already satisfied: libclang>=13.0.0 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (16.0.6)\n", + "Collecting ml-dtypes==0.2.0 (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp)\n", + " Obtaining dependency information for ml-dtypes==0.2.0 from https://files.pythonhosted.org/packages/d1/1d/d5cf76e5e40f69dbd273036e3172ae4a614577cb141673427b80cac948df/ml_dtypes-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n", + " Downloading ml_dtypes-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (20 kB)\n", + "Requirement already satisfied: opt-einsum>=2.3.2 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (3.3.0)\n", + "Requirement already satisfied: protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev,>=3.20.3 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (3.20.3)\n", + "Requirement already satisfied: setuptools in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (68.2.2)\n", + "Requirement already satisfied: termcolor>=1.1.0 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (2.3.0)\n", + "Requirement already satisfied: wrapt<1.15,>=1.11.0 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (1.14.1)\n", + "Requirement already satisfied: tensorflow-io-gcs-filesystem>=0.23.1 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (0.31.0)\n", + "Requirement already satisfied: grpcio<2.0,>=1.24.3 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (1.48.0)\n", + "Collecting tensorboard<2.15,>=2.14 (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp)\n", + " Obtaining dependency information for tensorboard<2.15,>=2.14 from https://files.pythonhosted.org/packages/73/a2/66ed644f6ed1562e0285fcd959af17670ea313c8f331c46f79ee77187eb9/tensorboard-2.14.1-py3-none-any.whl.metadata\n", + " Downloading tensorboard-2.14.1-py3-none-any.whl.metadata (1.7 kB)\n", + "Collecting tensorflow-estimator<2.15,>=2.14.0 (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp)\n", + " Obtaining dependency information for tensorflow-estimator<2.15,>=2.14.0 from https://files.pythonhosted.org/packages/d1/da/4f264c196325bb6e37a6285caec5b12a03def489b57cc1fdac02bb6272cd/tensorflow_estimator-2.14.0-py2.py3-none-any.whl.metadata\n", + " Downloading tensorflow_estimator-2.14.0-py2.py3-none-any.whl.metadata (1.3 kB)\n", + "Collecting keras<2.15,>=2.14.0 (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp)\n", + " Obtaining dependency information for keras<2.15,>=2.14.0 from https://files.pythonhosted.org/packages/fe/58/34d4d8f1aa11120c2d36d7ad27d0526164b1a8ae45990a2fede31d0e59bf/keras-2.14.0-py3-none-any.whl.metadata\n", + " Downloading keras-2.14.0-py3-none-any.whl.metadata (2.4 kB)\n", + "Requirement already satisfied: wheel<1.0,>=0.23.0 in /opt/conda/lib/python3.10/site-packages (from astunparse>=1.6.0->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (0.41.2)\n", + "Collecting grpcio<2.0,>=1.24.3 (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp)\n", + " Obtaining dependency information for grpcio<2.0,>=1.24.3 from https://files.pythonhosted.org/packages/29/cc/e6883efbbcaa6570a0d2207ba53c796137f11293e47d11e2696f37b66811/grpcio-1.59.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n", + " Downloading grpcio-1.59.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)\n", + "Requirement already satisfied: google-auth<3,>=1.6.3 in /opt/conda/lib/python3.10/site-packages (from tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (2.23.0)\n", + "Requirement already satisfied: google-auth-oauthlib<1.1,>=0.5 in /opt/conda/lib/python3.10/site-packages (from tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (1.0.0)\n", + "Requirement already satisfied: markdown>=2.6.8 in /opt/conda/lib/python3.10/site-packages (from tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (3.4.4)\n", + "Requirement already satisfied: tensorboard-data-server<0.8.0,>=0.7.0 in /opt/conda/lib/python3.10/site-packages (from tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (0.7.1)\n", + "Requirement already satisfied: werkzeug>=1.0.1 in /opt/conda/lib/python3.10/site-packages (from tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (2.1.2)\n", + "Requirement already satisfied: cachetools<6.0,>=2.0.0 in /opt/conda/lib/python3.10/site-packages (from google-auth<3,>=1.6.3->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (4.2.4)\n", + "Requirement already satisfied: pyasn1-modules>=0.2.1 in /opt/conda/lib/python3.10/site-packages (from google-auth<3,>=1.6.3->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (0.3.0)\n", + "Requirement already satisfied: rsa<5,>=3.1.4 in /opt/conda/lib/python3.10/site-packages (from google-auth<3,>=1.6.3->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (4.9)\n", + "Requirement already satisfied: requests-oauthlib>=0.7.0 in /opt/conda/lib/python3.10/site-packages (from google-auth-oauthlib<1.1,>=0.5->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (1.3.1)\n", + "Requirement already satisfied: pyasn1<0.6.0,>=0.4.6 in /opt/conda/lib/python3.10/site-packages (from pyasn1-modules>=0.2.1->google-auth<3,>=1.6.3->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (0.5.0)\n", + "Requirement already satisfied: oauthlib>=3.0.0 in /opt/conda/lib/python3.10/site-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<1.1,>=0.5->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp) (3.2.2)\n", + "Downloading transformers-4.34.1-py3-none-any.whl (7.7 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.7/7.7 MB\u001b[0m \u001b[31m98.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hDownloading datasets-2.14.6-py3-none-any.whl (493 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m493.7/493.7 kB\u001b[0m \u001b[31m57.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading evaluate-0.4.1-py3-none-any.whl (84 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m84.1/84.1 kB\u001b[0m \u001b[31m17.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading keras_nlp-0.6.2-py3-none-any.whl (590 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m590.1/590.1 kB\u001b[0m \u001b[31m58.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading safetensors-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.3/1.3 MB\u001b[0m \u001b[31m84.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading tokenizers-0.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.8 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.8/3.8 MB\u001b[0m \u001b[31m108.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hDownloading huggingface_hub-0.17.3-py3-none-any.whl (295 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m295.0/295.0 kB\u001b[0m \u001b[31m46.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading multiprocess-0.70.15-py310-none-any.whl (134 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m134.8/134.8 kB\u001b[0m \u001b[31m25.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading dill-0.3.7-py3-none-any.whl (115 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m115.3/115.3 kB\u001b[0m \u001b[31m23.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading tensorflow_text-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.5 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6.5/6.5 MB\u001b[0m \u001b[31m108.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hDownloading xxhash-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (194 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m194.1/194.1 kB\u001b[0m \u001b[31m33.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading tensorflow-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (489.8 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m489.8/489.8 MB\u001b[0m \u001b[31m1.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hDownloading ml_dtypes-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.0/1.0 MB\u001b[0m \u001b[31m69.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading keras-2.14.0-py3-none-any.whl (1.7 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.7/1.7 MB\u001b[0m \u001b[31m89.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading tensorboard-2.14.1-py3-none-any.whl (5.5 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m5.5/5.5 MB\u001b[0m \u001b[31m113.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hDownloading grpcio-1.59.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m5.3/5.3 MB\u001b[0m \u001b[31m115.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hDownloading tensorflow_estimator-2.14.0-py2.py3-none-any.whl (440 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m440.7/440.7 kB\u001b[0m \u001b[31m53.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hBuilding wheels for collected packages: rouge_score\n", + " Building wheel for rouge_score (setup.py) ... \u001b[?25ldone\n", + "\u001b[?25h Created wheel for rouge_score: filename=rouge_score-0.1.2-py3-none-any.whl size=24932 sha256=57aa40a32d8d9171d43b9bc47cc3472fac0fb1192aa80eba9defb8e4ffd2352a\n", + " Stored in directory: /home/jupyter/.cache/pip/wheels/5f/dd/89/461065a73be61a532ff8599a28e9beef17985c9e9c31e541b4\n", + "Successfully built rouge_score\n", + "Installing collected packages: xxhash, tensorflow-estimator, safetensors, nltk, ml-dtypes, keras, grpcio, dill, rouge_score, responses, multiprocess, huggingface-hub, tokenizers, transformers, tensorboard, datasets, tensorflow, evaluate, tensorflow-text, keras_nlp\n", + " Attempting uninstall: tensorflow-estimator\n", + " Found existing installation: tensorflow-estimator 2.12.0\n", + " Uninstalling tensorflow-estimator-2.12.0:\n", + " Successfully uninstalled tensorflow-estimator-2.12.0\n", + " Attempting uninstall: ml-dtypes\n", + " Found existing installation: ml-dtypes 0.3.1\n", + " Uninstalling ml-dtypes-0.3.1:\n", + " Successfully uninstalled ml-dtypes-0.3.1\n", + " Attempting uninstall: keras\n", + " Found existing installation: keras 2.12.0\n", + " Uninstalling keras-2.12.0:\n", + " Successfully uninstalled keras-2.12.0\n", + " Attempting uninstall: grpcio\n", + " Found existing installation: grpcio 1.48.0\n", + " Uninstalling grpcio-1.48.0:\n", + " Successfully uninstalled grpcio-1.48.0\n", + " Attempting uninstall: dill\n", + " Found existing installation: dill 0.3.1.1\n", + " Uninstalling dill-0.3.1.1:\n", + " Successfully uninstalled dill-0.3.1.1\n", + " Attempting uninstall: tensorboard\n", + " Found existing installation: tensorboard 2.12.3\n", + " Uninstalling tensorboard-2.12.3:\n", + " Successfully uninstalled tensorboard-2.12.3\n", + " Attempting uninstall: tensorflow\n", + " Found existing installation: tensorflow 2.12.0\n", + " Uninstalling tensorflow-2.12.0:\n", + " Successfully uninstalled tensorflow-2.12.0\n", + "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", + "apache-beam 2.46.0 requires dill<0.3.2,>=0.3.1.1, but you have dill 0.3.7 which is incompatible.\u001b[0m\u001b[31m\n", + "\u001b[0mSuccessfully installed datasets-2.14.6 dill-0.3.7 evaluate-0.4.1 grpcio-1.58.0 huggingface-hub-0.17.3 keras-2.14.0 keras_nlp-0.6.2 ml-dtypes-0.2.0 multiprocess-0.70.15 nltk-3.8.1 responses-0.18.0 rouge_score-0.1.2 safetensors-0.4.0 tensorboard-2.14.1 tensorflow-2.14.0 tensorflow-estimator-2.14.0 tensorflow-text-2.14.0 tokenizers-0.14.1 transformers-4.34.1 xxhash-3.4.1\n" + ] + } + ], + "source": [ + "!pip install \"transformers\" \"datasets\" \"rouge_score\" \"evaluate\" \"keras_nlp\"" + ] + }, + { + "cell_type": "markdown", + "id": "e9b287a7-3035-48c1-8520-a7d3de4f925b", + "metadata": {}, + "source": [ + "## Download your dataset from Hugging Face" + ] + }, + { + "cell_type": "markdown", + "id": "dd58ed15-7e8f-4f24-b68f-4a5b5fcd5cf2", + "metadata": {}, + "source": [ + "We will be downloading Hugging Face dataset 'ccdv/pubmed-summarization' which contains the full article and their abstracts which will help train our model to summarize scientific articles. Once the dataset is loaded we'll split the data into train, test, and validation datasets. Since these are large datasets we will only be using 5% of dataset to help our process run faster." + ] + }, + { + "cell_type": "code", + "execution_count": 211, + "id": "8f59e17e-c006-45ee-be0b-766774f9d420", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "from datasets import load_dataset\n", + "\n", + "# load dataset\n", + "train, test, validation = load_dataset(\"ccdv/pubmed-summarization\", split=[\"train[:5%]\", \"test[:5%]\", \"validation[:5%]\" ])" + ] + }, + { + "cell_type": "markdown", + "id": "51d2756c-d280-4aec-a6fb-416dd91c3ba5", + "metadata": {}, + "source": [ + "Lets list the feaures of one of our datasets to determine what we will need to tokenize in a later step. this dataset features are 'article' and 'abstract'" + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "id": "760c9128-793a-4bed-a127-b92ef496e33b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Dataset({\n", + " features: ['article', 'abstract'],\n", + " num_rows: 5996\n", + "})\n" + ] + } + ], + "source": [ + "print(train)" + ] + }, + { + "cell_type": "markdown", + "id": "3446d1b6-af0c-4127-93c0-c47fde142546", + "metadata": {}, + "source": [ + "## Finetuning our Model Locally" + ] + }, + { + "cell_type": "markdown", + "id": "ed6ddff1-2636-4e3b-88ee-e3c86c584245", + "metadata": {}, + "source": [ + "Now that we have our datasets we can upload our model which will be the small version of Flan T5." + ] + }, + { + "cell_type": "markdown", + "id": "b112574b-0e33-4c31-b12a-f1839024ea44", + "metadata": {}, + "source": [ + "\n", + "**Flan T5** is a text-to-text generation model and an advancement to the original T5 model and can be run on both CPUs and GPUs. **Text-to-text** is a method of creating text by using a neural network to generate new text from a given input. These T5 models can be fine-tuned for various zero shot NLP tasks that we have seen and heard of before: text classification, summarization, translation, and question-answering. Text-to-text is not to be confused by text2text generation which is a earlier version of T5 that is designed specifically for sequence-to-sequence tasks, such as machine translation and text generation and is limited to these task where as T5 models are more flexible due to the wider range of NPL tasks they can execute.\n", + "\n", + "Because it is a seq2seq class model we will be using the transformer **TFAutoModelForSeq2Seq** (specifically for tensorflow models) to help find a load our pretrained model architecture. Then we will assign an **AutoTokenizer** to preprocess the text of our inputs (the test, train, validation datasets) into an array of numbers." + ] + }, + { + "cell_type": "code", + "execution_count": 185, + "id": "bfd433b3-9790-4a10-ac08-6c90c194d8b0", + "metadata": {}, + "outputs": [], + "source": [ + "#model name\n", + "CHECKPOINT = \"google/flan-t5-small\"" + ] + }, + { + "cell_type": "code", + "execution_count": 184, + "id": "1988cbcb-4bec-4aa2-a356-a211584ceacb", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-11-03 15:13:42.327557: E tensorflow/compiler/xla/stream_executor/cuda/cuda_dnn.cc:9342] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", + "2023-11-03 15:13:42.327603: E tensorflow/compiler/xla/stream_executor/cuda/cuda_fft.cc:609] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", + "2023-11-03 15:13:42.327636: E tensorflow/compiler/xla/stream_executor/cuda/cuda_blas.cc:1518] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n", + "2023-11-03 15:13:42.336037: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", + "To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n", + "2023-11-03 15:13:44.543851: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:894] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2023-11-03 15:13:44.554372: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:894] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2023-11-03 15:13:44.557202: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:894] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2023-11-03 15:13:44.560698: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:894] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2023-11-03 15:13:44.563540: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:894] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2023-11-03 15:13:44.566113: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:894] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2023-11-03 15:13:45.308267: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:894] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2023-11-03 15:13:45.310177: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:894] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2023-11-03 15:13:45.311838: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:894] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", + "2023-11-03 15:13:45.313437: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1886] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 13589 MB memory: -> device: 0, name: Tesla T4, pci bus id: 0000:00:04.0, compute capability: 7.5\n", + "/opt/conda/lib/python3.10/site-packages/keras/src/initializers/initializers.py:120: UserWarning: The initializer RandomNormal is unseeded and being called multiple times, which will return identical values each time (even if the initializer is unseeded). Please update your code to provide a seed to the initializer, or avoid using the same initializer instance more than once.\n", + " warnings.warn(\n", + "All PyTorch model weights were used when initializing TFT5ForConditionalGeneration.\n", + "\n", + "All the weights of TFT5ForConditionalGeneration were initialized from the PyTorch model.\n", + "If your task is similar to the task the model of the checkpoint was trained on, you can already use TFT5ForConditionalGeneration for predictions without further training.\n" + ] + } + ], + "source": [ + "from transformers import TFAutoModelForSeq2SeqLM, AutoTokenizer\n", + "\n", + "model = TFAutoModelForSeq2SeqLM.from_pretrained(CHECKPOINT)\n", + "tokenizer = AutoTokenizer.from_pretrained(CHECKPOINT)" + ] + }, + { + "cell_type": "markdown", + "id": "f6ca0419-0075-4f62-becf-b859312cea22", + "metadata": {}, + "source": [ + "Now that we have loaded the architecture of our model and configured it to tokenize our inputs we can now implement a tokenization functions to start processing our datasets.\n", + "Since we are using a T5 model we will have to prefix the inputs with \"summarize:\" to know which task to perform. We create a preprocess function to append the prefix to each row within the \"article\" column of our dataset labeling them as inputs. The inputs are then tokenized, limited by a set max length, and truncated.\n", + "\n", + "A similar process is done for the \"abstract\" column within our dataset except we do not add the prefix and we labels them as **labels**.\n", + "\n", + "**What is Truncating?**\n", + "\n", + "Our group of inputs or batch will usually be different lengths which makes it hard to be converted to fixed-size tensors. To fix this problem **truncation** removes tokens ensure longer sequences will have the same length as the longest sequence in the batch which we have set to be **1024** for our inputs and **128** for our labels.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 212, + "id": "f101c309-f214-4b3f-b77b-d55491e48a59", + "metadata": {}, + "outputs": [], + "source": [ + "prefix = \"summarize: \"\n", + "\n", + "def preprocess_function(examples):\n", + " inputs = [prefix + doc for doc in examples[\"article\"]]\n", + " model_inputs = tokenizer(inputs, max_length=1024, truncation=True)\n", + "\n", + " labels = tokenizer(text_target=\n", + " examples[\"abstract\"], max_length=128, truncation=True\n", + " )\n", + "\n", + " model_inputs[\"labels\"] = labels[\"input_ids\"]\n", + "\n", + " return model_inputs" + ] + }, + { + "cell_type": "markdown", + "id": "491efc2a-1679-4044-9f53-4aff27329856", + "metadata": {}, + "source": [ + "Now that we have our tokenized function the next step is to implement the **map** function to iterate the function **preprocess_function** over our loaded datasets." + ] + }, + { + "cell_type": "code", + "execution_count": 210, + "id": "5e58eb58-a655-4e2b-8665-b4b770bc87a7", + "metadata": {}, + "outputs": [], + "source": [ + "tokenized_train = train.map(preprocess_function, batched=True)\n", + "\n", + "#tokenized_test = test.map(preprocess_function, batched=True)\n", + "\n", + "#tokenized_validation = validation.map(preprocess_function, batched=True)" + ] + }, + { + "cell_type": "markdown", + "id": "41bc1576-44dd-4604-b5db-6c57b711096a", + "metadata": {}, + "source": [ + "Lets look at the structure of one of our new tokenized datasets you should see 3 new features (**'input_ids', 'attention_mask', 'labels'**) making 5 features total:\n", + "\n", + "- **input_ids:** As our inputs are being tokenized an ID is assigned for each token, meaning as each text is broken up into sequences (which can be words or subwords) and converted to tokens within our dataset they are assign an ID.\n", + "- **attention_masks:** Tokens that should be ignored by the model usually represented by a 0. Masking can be done when some sequences are not the same length so they can not belong in the same tensor and need to be padded.\n", + "- **labels:** The new name of the abstract column that has been tokenized." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "80a25bc8-00db-4b8d-9b68-d52c5d6ca7fe", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Dataset({\n", + " features: ['article', 'abstract', 'input_ids', 'attention_mask', 'labels'],\n", + " num_rows: 5996\n", + "})\n" + ] + } + ], + "source": [ + "print(tokenized_train)" + ] + }, + { + "cell_type": "markdown", + "id": "285d972c-6aa3-4072-a405-86e7dd82904e", + "metadata": {}, + "source": [ + "DataCollators are objects that dynamically pads the inputs and the labels in our batches, reverse to truncating **padding** adds a special padding token to ensure shorter sequences will have the same length as the longest sequence in the batch which a gain we set in out preprocess_function." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "875ef33d-5ef3-4b07-b1de-6d471743a8ad", + "metadata": {}, + "outputs": [], + "source": [ + "from transformers import DataCollatorForSeq2Seq\n", + "data_collator = DataCollatorForSeq2Seq(tokenizer=tokenizer, model=CHECKPOINT, return_tensors=\"tf\")" + ] + }, + { + "cell_type": "markdown", + "id": "1b48b037-d666-417b-b28e-88b715a1083c", + "metadata": {}, + "source": [ + "Then the last step will be to set our data format to be suitable for Tensorflow using the function **'prepare_tf_dataset()'** by automatically inspecting your model and keep only the features that are necessary. As you can see there are only 2 of our features left represented in the dataset: **input_ids and attention_mask**." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "6fcac5a8-912f-461f-bfab-990e472c01ca", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "You're using a T5TokenizerFast tokenizer. Please note that with a fast tokenizer, using the `__call__` method is faster than using a method to encode the text followed by a call to the `pad` method to get a padded encoding.\n" + ] + } + ], + "source": [ + "tf_train_set = model.prepare_tf_dataset(\n", + " tokenized_train,\n", + " shuffle=True,\n", + " batch_size=10,\n", + " collate_fn=data_collator,\n", + " \n", + ")\n", + "\n", + "tf_test_set = model.prepare_tf_dataset(\n", + " tokenized_test,\n", + " shuffle=False,\n", + " batch_size=10,\n", + " collate_fn=data_collator,\n", + " \n", + ")\n", + "\n", + "tf_validation_set = model.prepare_tf_dataset(\n", + " tokenized_validation,\n", + " shuffle=False,\n", + " batch_size=10,\n", + " collate_fn=data_collator,\n", + " \n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "11aaf028-c713-4064-84cc-f699df3151ec", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "<_PrefetchDataset element_spec=({'input_ids': TensorSpec(shape=(10, None), dtype=tf.int64, name=None), 'attention_mask': TensorSpec(shape=(10, None), dtype=tf.int64, name=None)}, TensorSpec(shape=(10, None), dtype=tf.int64, name=None))>\n" + ] + } + ], + "source": [ + "print (tf_train_set)" + ] + }, + { + "cell_type": "markdown", + "id": "f7ad7839-4967-40fb-aa26-39cea71fa085", + "metadata": {}, + "source": [ + "**Learning rate** controls how much the model will change in response to the estimated error each time the model weights are updated. Too small of a learning rate could result very slow training process that could eventually get stuck, whereas a value too large may result in an unstable training process. Setting the **weight decay** helps to avoid overfitting, weights small, and avoid exploding gradient. " + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "50ed6068-763a-46a6-8aed-4862f84413a9", + "metadata": {}, + "outputs": [], + "source": [ + "from transformers import AdamWeightDecay\n", + "optimizer = AdamWeightDecay(learning_rate=2e-5, weight_decay_rate=0.01)\n", + "model.compile(optimizer=optimizer)" + ] + }, + { + "cell_type": "markdown", + "id": "cd6a770a-e149-4970-a915-1362f544ef40", + "metadata": {}, + "source": [ + "Using the function metric_fn will help us calculate the **ROUGE** score between the ground-truth and predictions while training. ROUGE stands for **Recall-Oriented Understudy for Gisting Evaluation** this metric compares a reference sentence with what our model produces see if there is overlap if there is it calculates the precision and recall using the overlap.\n", + "\n", + "As an example say our model produced a sentence like so:\n", + "\n", + "**'the cat was found under the bed'**\n", + "\n", + "but the reference sentence normally written by a human is:\n", + "\n", + "**'the cat was under the bed'**" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "f9c6b45b-7349-4965-938b-3a334ced3882", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Using TensorFlow backend\n" + ] + } + ], + "source": [ + "import keras_nlp\n", + "\n", + "rouge_l = keras_nlp.metrics.RougeL()\n", + "\n", + "\n", + "def metric_fn(eval_predictions):\n", + " predictions, labels = eval_predictions\n", + " decoded_predictions = tokenizer.batch_decode(predictions, skip_special_tokens=True)\n", + " for label in labels:\n", + " label[label < 0] = tokenizer.pad_token_id # Replace masked label tokens\n", + " decoded_labels = tokenizer.batch_decode(labels, skip_special_tokens=True)\n", + " result = rouge_l(decoded_labels, decoded_predictions)\n", + " # We will print only the F1 score, you can use other aggregation metrics as well\n", + " result = {\"RougeL\": result[\"f1_score\"]}\n", + "\n", + " return result" + ] + }, + { + "cell_type": "markdown", + "id": "b57e9aa9-9d7c-41d0-8ab1-5d79277c969d", + "metadata": {}, + "source": [ + "We will use the validation dataset for calculating our ROUGE score. While our ROUGE score is being calculated and our training is running its best to set up a **callback system**. A callback is an object that can perform actions at various stages of training and helps to write logs after every batch of training to monitor your metrics, periodically save your model to disk, and if need be do early stopping. Here we are using Keras call back system." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "06e014b1-e9d2-4d9f-a149-c6c0381f7407", + "metadata": {}, + "outputs": [], + "source": [ + "from transformers.keras_callbacks import KerasMetricCallback\n", + "metric_callback = KerasMetricCallback(\n", + " metric_fn, eval_dataset=tf_validation_set, predict_with_generate=True, use_xla_generation=True)" + ] + }, + { + "cell_type": "markdown", + "id": "cd1b16ea-0e8a-4c78-875e-e3edea6cf043", + "metadata": {}, + "source": [ + "Before we start to train our model the last step will be to set how many batches of training we should do, the number of iterations is called **epochs**, we will set ours to 3. Now we can start to train our model using the function **'fit'** and save our artifacts to a directory. The artifact that holds our model will be a file named **tf_model.h5**. " + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "b8fd0c64-4d85-4b5e-86fe-538c7dc65da7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/3\n", + "599/599 [==============================] - ETA: 0s - loss: 2.5073" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.10/site-packages/tensorflow/python/autograph/impl/api.py:371: UserWarning: Using the model-agnostic default `max_length` (=20) to control the generation length. recommend setting `max_new_tokens` to control the maximum length of the generation.\n", + " return py_builtins.overload_of(f)(*args)\n", + "2023-11-02 13:09:59.053088: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x55faf0d80f50 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices:\n", + "2023-11-02 13:09:59.053132: I tensorflow/compiler/xla/service/service.cc:176] StreamExecutor device (0): Tesla T4, Compute Capability 7.5\n", + "2023-11-02 13:10:00.019242: W tensorflow/compiler/tf2xla/kernels/assert_op.cc:38] Ignoring Assert operator shared/assert_less/Assert/Assert\n", + "2023-11-02 13:10:00.163195: I tensorflow/compiler/mlir/tensorflow/utils/dump_mlir_util.cc:269] disabling MLIR crash reproducer, set env var `MLIR_CRASH_REPRODUCER_DIRECTORY` to enable.\n", + "2023-11-02 13:10:00.714302: W tensorflow/compiler/tf2xla/kernels/assert_op.cc:38] Ignoring Assert operator shared/assert_less_1/Assert/Assert\n", + "2023-11-02 13:10:01.396732: W tensorflow/compiler/tf2xla/kernels/assert_op.cc:38] Ignoring Assert operator shared/assert_less/Assert/Assert\n", + "2023-11-02 13:10:02.853947: I tensorflow/compiler/xla/stream_executor/cuda/cuda_dnn.cc:442] Loaded cuDNN version 8900\n", + "warning: Linking two modules of different target triples: 'LLVMDialectModule' is 'nvptx64-nvidia-gpulibs' whereas '' is 'nvptx64-nvidia-cuda'\n", + "\n", + "warning: Linking two modules of different target triples: 'LLVMDialectModule' is 'nvptx64-nvidia-gpulibs' whereas '' is 'nvptx64-nvidia-cuda'\n", + "\n", + "warning: Linking two modules of different target triples: 'LLVMDialectModule' is 'nvptx64-nvidia-gpulibs' whereas '' is 'nvptx64-nvidia-cuda'\n", + "\n", + "2023-11-02 13:10:12.362168: I ./tensorflow/compiler/jit/device_compiler.h:186] Compiled cluster using XLA! This line is logged at most once for the lifetime of the process.\n", + "2023-11-02 13:10:25.996665: W tensorflow/compiler/tf2xla/kernels/assert_op.cc:38] Ignoring Assert operator shared/assert_less/Assert/Assert\n", + "2023-11-02 13:10:26.174121: W tensorflow/compiler/tf2xla/kernels/assert_op.cc:38] Ignoring Assert operator shared/assert_less_1/Assert/Assert\n", + "2023-11-02 13:10:26.666553: W tensorflow/compiler/tf2xla/kernels/assert_op.cc:38] Ignoring Assert operator shared/assert_less/Assert/Assert\n", + "warning: Linking two modules of different target triples: 'LLVMDialectModule' is 'nvptx64-nvidia-gpulibs' whereas '' is 'nvptx64-nvidia-cuda'\n", + "\n", + "warning: Linking two modules of different target triples: 'LLVMDialectModule' is 'nvptx64-nvidia-gpulibs' whereas '' is 'nvptx64-nvidia-cuda'\n", + "\n", + "warning: Linking two modules of different target triples: 'LLVMDialectModule' is 'nvptx64-nvidia-gpulibs' whereas '' is 'nvptx64-nvidia-cuda'\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "599/599 [==============================] - 731s 1s/step - loss: 2.5073 - val_loss: 2.0886 - RougeL: 0.1196\n", + "Epoch 2/3\n", + "599/599 [==============================] - 662s 1s/step - loss: 2.3710 - val_loss: 2.0231 - RougeL: 0.1191\n", + "Epoch 3/3\n", + "599/599 [==============================] - 662s 1s/step - loss: 2.3102 - val_loss: 1.9996 - RougeL: 0.1172\n" + ] + } + ], + "source": [ + "model.fit(x=tf_train_set, validation_data=tf_test_set, epochs=3, callbacks=metric_callback)\n", + "\n", + "model.save_pretrained('saved_model')" + ] + }, + { + "cell_type": "markdown", + "id": "d1c35de0-4cdf-4c2b-9c0d-c2272b71b362", + "metadata": {}, + "source": [ + "## Testing the Model" + ] + }, + { + "cell_type": "markdown", + "id": "31f7f62a-ca17-4dcc-b25d-825572ee1630", + "metadata": {}, + "source": [ + "Here we will use a sample text that we want our model to summarize." + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "id": "980d0053-0c3b-4d0d-91b9-9dd6e6dd3e64", + "metadata": {}, + "outputs": [], + "source": [ + "text = \"Severe acute respiratory syndrome coronavirus 2 (SARS-CoV-2) is a \\\n", + "highly transmissible and pathogenic coronavirus that emerged in late 2019 and has \\\n", + "caused a pandemic of acute respiratory disease, named ‘coronavirus disease 2019’ (COVID-19), \\\n", + "which threatens human health and public safety. In this Review, we describe the basic virology of \\\n", + "SARS-CoV-2, including genomic characteristics and receptor use, highlighting its key difference \\\n", + "from previously known coronaviruses. We summarize current knowledge of clinical, epidemiological and \\\n", + "pathological features of COVID-19, as well as recent progress in animal models and antiviral treatment \\\n", + "approaches for SARS-CoV-2 infection. We also discuss the potential wildlife hosts and zoonotic origin \\\n", + "of this emerging virus in detail.\"" + ] + }, + { + "cell_type": "markdown", + "id": "3156ef96-20ab-46ff-ae76-57d6ea54f0ff", + "metadata": {}, + "source": [ + "To predict the following tokenizes the text to gather the inputs, then uses **generate()** generate sequences of token ids for our model. We then decode our output to translate our tokenized output into text." + ] + }, + { + "cell_type": "markdown", + "id": "cb34d7c2-a815-4c9d-bd8b-495aca8b2d02", + "metadata": {}, + "source": [ + "Below you will see that we have provided a paragraph about SARS-CoV-2 as our output, we also have some parameters that we specify to further tune our model to get a concise summary of what our text is about.\n", + "\n", + "- **Max_Length:** Max number of words to generate.\n", + "- **Num_Return_Sequences:** Number of different outputs to generate. For our example we want one sentence or sequence.\n", + "- **Temperature:** Controls randomness, higher values increase diversity meaning a more unique response make the model to think harder. Must be a number from 0 to 1.\n", + "- **Top_p (nucleus):** The cumulative probability cutoff for token selection. Lower values mean sampling from a smaller, more top-weighted nucleus. Must be a number from 0 to 1.\n", + "- **Top_k**: Sample from the k most likely next tokens at each step. Lower k focuses on higher probability tokens. This means the model choses the most probable words. Lower values eliminate fewer coherent words." + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "id": "fc2206c7-1bbf-41eb-8c63-abb17752d00d", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "All model checkpoint layers were used when initializing TFT5ForConditionalGeneration.\n", + "\n", + "All the layers of TFT5ForConditionalGeneration were initialized from the model checkpoint at saved_model.\n", + "If your task is similar to the task the model of the checkpoint was trained on, you can already use TFT5ForConditionalGeneration for predictions without further training.\n" + ] + }, + { + "data": { + "text/plain": [ + "'We describe the basic virology of Severe acute respiratory syndrome coronavirus 2 (SARS-CoV-2) and its role in preventing the pandemic of acute respiratory disease, named ‘coronavirus disease 2019’ (COVID-19), which threatens human health and public safety.'" + ] + }, + "execution_count": 101, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from transformers import AutoTokenizer\n", + "\n", + "tokenizer = AutoTokenizer.from_pretrained(CHECKPOINT)\n", + "inputs = tokenizer.encode(text, return_tensors=\"tf\")\n", + "\n", + "from transformers import TFAutoModelForSeq2SeqLM\n", + "\n", + "model = TFAutoModelForSeq2SeqLM.from_pretrained(\"saved_model\")\n", + "\n", + "outputs = model.generate(inputs, \n", + " max_length=1000,\n", + " num_return_sequences = 1,\n", + " do_sample=True, \n", + " temperature = 0.6,\n", + " top_k = 50, \n", + " top_p = 0.95,)\n", + "\n", + "tokenizer.decode(outputs[0], skip_special_tokens=True)" + ] + }, + { + "cell_type": "markdown", + "id": "af0f0064-d9b4-430c-90ae-d2e390d1b78c", + "metadata": {}, + "source": [ + "### Optional: Summarizing PDF Files" + ] + }, + { + "cell_type": "markdown", + "id": "1abe4b0b-8ee2-48f1-afed-0cd2796717a2", + "metadata": {}, + "source": [ + "The process of summarizing scientific PDF files is relatively the same except that we first need to extract the text from the PDF. To do so lets download a PDF file from PubMed." + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "id": "d69aa008-80c0-4a19-aa0f-8f5798673c47", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--2023-11-02 20:07:00-- https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7784226/pdf/12248_2020_Article_532.pdf\n", + "Resolving www.ncbi.nlm.nih.gov (www.ncbi.nlm.nih.gov)... 130.14.29.110, 2607:f220:41e:4290::110\n", + "Connecting to www.ncbi.nlm.nih.gov (www.ncbi.nlm.nih.gov)|130.14.29.110|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 5757370 (5.5M) [application/pdf]\n", + "Saving to: ‘12248_2020_Article_532.pdf’\n", + "\n", + "12248_2020_Article_ 100%[===================>] 5.49M 7.25MB/s in 0.8s \n", + "\n", + "2023-11-02 20:07:01 (7.25 MB/s) - ‘12248_2020_Article_532.pdf’ saved [5757370/5757370]\n", + "\n" + ] + } + ], + "source": [ + "! wget --user-agent=\"Chrome\" https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7784226/pdf/12248_2020_Article_532.pdf" + ] + }, + { + "cell_type": "markdown", + "id": "6555b048-a76c-4f10-b13c-4ac93f436fe8", + "metadata": {}, + "source": [ + "We'll be downloading some tools that help us extract only the text from our pdf file." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "1347b3cd-5ce0-44c9-864d-a688bcacb1d0", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...\n", + "To disable this warning, you can either:\n", + "\t- Avoid using `tokenizers` before the fork if possible\n", + "\t- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: fitz in /opt/conda/lib/python3.10/site-packages (0.0.1.dev2)\n", + "Collecting PyMuPDF\n", + " Obtaining dependency information for PyMuPDF from https://files.pythonhosted.org/packages/41/4a/530017aaf0a554aa6d9abd547932a02c0188962d12122fe611bf7a6d0c26/PyMuPDF-1.23.5-cp310-none-manylinux2014_x86_64.whl.metadata\n", + " Downloading PyMuPDF-1.23.5-cp310-none-manylinux2014_x86_64.whl.metadata (3.4 kB)\n", + "Requirement already satisfied: configobj in /opt/conda/lib/python3.10/site-packages (from fitz) (5.0.8)\n", + "Requirement already satisfied: configparser in /opt/conda/lib/python3.10/site-packages (from fitz) (6.0.0)\n", + "Requirement already satisfied: httplib2 in /opt/conda/lib/python3.10/site-packages (from fitz) (0.21.0)\n", + "Requirement already satisfied: nibabel in /opt/conda/lib/python3.10/site-packages (from fitz) (5.1.0)\n", + "Requirement already satisfied: nipype in /opt/conda/lib/python3.10/site-packages (from fitz) (1.8.6)\n", + "Requirement already satisfied: numpy in /opt/conda/lib/python3.10/site-packages (from fitz) (1.23.5)\n", + "Requirement already satisfied: pandas in /opt/conda/lib/python3.10/site-packages (from fitz) (2.0.3)\n", + "Requirement already satisfied: pyxnat in /opt/conda/lib/python3.10/site-packages (from fitz) (1.6)\n", + "Requirement already satisfied: scipy in /opt/conda/lib/python3.10/site-packages (from fitz) (1.11.2)\n", + "Collecting PyMuPDFb==1.23.5 (from PyMuPDF)\n", + " Obtaining dependency information for PyMuPDFb==1.23.5 from https://files.pythonhosted.org/packages/cf/14/de59687368ad2c047b038b5b9b04e40bd5d486d5b36c6aef42c18c35ea2c/PyMuPDFb-1.23.5-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata\n", + " Downloading PyMuPDFb-1.23.5-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.3 kB)\n", + "Requirement already satisfied: six in /opt/conda/lib/python3.10/site-packages (from configobj->fitz) (1.16.0)\n", + "Requirement already satisfied: pyparsing!=3.0.0,!=3.0.1,!=3.0.2,!=3.0.3,<4,>=2.4.2 in /opt/conda/lib/python3.10/site-packages (from httplib2->fitz) (3.1.1)\n", + "Requirement already satisfied: packaging>=17 in /opt/conda/lib/python3.10/site-packages (from nibabel->fitz) (23.1)\n", + "Requirement already satisfied: click>=6.6.0 in /opt/conda/lib/python3.10/site-packages (from nipype->fitz) (8.1.7)\n", + "Requirement already satisfied: networkx>=2.0 in /opt/conda/lib/python3.10/site-packages (from nipype->fitz) (3.1)\n", + "Requirement already satisfied: prov>=1.5.2 in /opt/conda/lib/python3.10/site-packages (from nipype->fitz) (2.0.0)\n", + "Requirement already satisfied: pydot>=1.2.3 in /opt/conda/lib/python3.10/site-packages (from nipype->fitz) (1.4.2)\n", + "Requirement already satisfied: python-dateutil>=2.2 in /opt/conda/lib/python3.10/site-packages (from nipype->fitz) (2.8.2)\n", + "Requirement already satisfied: rdflib>=5.0.0 in /opt/conda/lib/python3.10/site-packages (from nipype->fitz) (7.0.0)\n", + "Requirement already satisfied: simplejson>=3.8.0 in /opt/conda/lib/python3.10/site-packages (from nipype->fitz) (3.19.2)\n", + "Requirement already satisfied: traits!=5.0,<6.4,>=4.6 in /opt/conda/lib/python3.10/site-packages (from nipype->fitz) (6.3.2)\n", + "Requirement already satisfied: filelock>=3.0.0 in /opt/conda/lib/python3.10/site-packages (from nipype->fitz) (3.12.4)\n", + "Requirement already satisfied: etelemetry>=0.2.0 in /opt/conda/lib/python3.10/site-packages (from nipype->fitz) (0.3.1)\n", + "Requirement already satisfied: looseversion in /opt/conda/lib/python3.10/site-packages (from nipype->fitz) (1.3.0)\n", + "Requirement already satisfied: pytz>=2020.1 in /opt/conda/lib/python3.10/site-packages (from pandas->fitz) (2023.3.post1)\n", + "Requirement already satisfied: tzdata>=2022.1 in /opt/conda/lib/python3.10/site-packages (from pandas->fitz) (2023.3)\n", + "Requirement already satisfied: future>=0.16 in /opt/conda/lib/python3.10/site-packages (from pyxnat->fitz) (0.18.3)\n", + "Requirement already satisfied: lxml>=4.3 in /opt/conda/lib/python3.10/site-packages (from pyxnat->fitz) (4.9.3)\n", + "Requirement already satisfied: pathlib>=1.0 in /opt/conda/lib/python3.10/site-packages (from pyxnat->fitz) (1.0.1)\n", + "Requirement already satisfied: requests>=2.20 in /opt/conda/lib/python3.10/site-packages (from pyxnat->fitz) (2.31.0)\n", + "Requirement already satisfied: ci-info>=0.2 in /opt/conda/lib/python3.10/site-packages (from etelemetry>=0.2.0->nipype->fitz) (0.3.0)\n", + "Requirement already satisfied: isodate<0.7.0,>=0.6.0 in /opt/conda/lib/python3.10/site-packages (from rdflib>=5.0.0->nipype->fitz) (0.6.1)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /opt/conda/lib/python3.10/site-packages (from requests>=2.20->pyxnat->fitz) (3.2.0)\n", + "Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.10/site-packages (from requests>=2.20->pyxnat->fitz) (3.4)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/conda/lib/python3.10/site-packages (from requests>=2.20->pyxnat->fitz) (1.26.16)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.10/site-packages (from requests>=2.20->pyxnat->fitz) (2023.7.22)\n", + "Downloading PyMuPDF-1.23.5-cp310-none-manylinux2014_x86_64.whl (4.3 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.3/4.3 MB\u001b[0m \u001b[31m46.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hDownloading PyMuPDFb-1.23.5-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (30.6 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m30.6/30.6 MB\u001b[0m \u001b[31m42.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hInstalling collected packages: PyMuPDFb, PyMuPDF\n", + "Successfully installed PyMuPDF-1.23.5 PyMuPDFb-1.23.5\n" + ] + } + ], + "source": [ + "!pip install \"fitz\" \"PyMuPDF\"" + ] + }, + { + "cell_type": "markdown", + "id": "3331b05f-d00e-4ff2-be24-edea732e4af2", + "metadata": {}, + "source": [ + "Now we can make a function **extract_text_from_pdf** to extract the text from the pdf and save it as a variable." + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "id": "d77b6ffe-90e1-4a01-aa52-9cf93a9c5c85", + "metadata": {}, + "outputs": [], + "source": [ + "import fitz\n", + "def extract_text_from_pdf(pdf_path):\n", + " doc = fitz.open(pdf_path)\n", + " text = ''\n", + " for page in doc:\n", + " text += page.get_text()\n", + " return text\n", + "\n", + "text_pdf=extract_text_from_pdf('12248_2020_Article_532.pdf')" + ] + }, + { + "cell_type": "markdown", + "id": "10e761c6-da93-4ca0-827e-a3715c20eb10", + "metadata": {}, + "source": [ + "Finally we'll follow the same steps we did before to encode our inputs, pass it to our model, and then decode our output. Notice how we increased the max_length of what is expected of our input." + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "id": "9a1f5dbd-6a9f-4533-a12e-8a6c4073df74", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "All model checkpoint layers were used when initializing TFT5ForConditionalGeneration.\n", + "\n", + "All the layers of TFT5ForConditionalGeneration were initialized from the model checkpoint at saved_model.\n", + "If your task is similar to the task the model of the checkpoint was trained on, you can already use TFT5ForConditionalGeneration for predictions without further training.\n" + ] + }, + { + "ename": "TypeError", + "evalue": "Cannot convert 'Summary:' to EagerTensor of dtype int32", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[97], line 12\u001b[0m\n\u001b[1;32m 8\u001b[0m model \u001b[38;5;241m=\u001b[39m TFAutoModelForSeq2SeqLM\u001b[38;5;241m.\u001b[39mfrom_pretrained(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msaved_model\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 10\u001b[0m outputs \u001b[38;5;241m=\u001b[39m model\u001b[38;5;241m.\u001b[39mgenerate(inputs, max_new_tokens\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m100\u001b[39m, do_sample\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m)\n\u001b[0;32m---> 12\u001b[0m tokenizer\u001b[38;5;241m.\u001b[39mdecode(\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mSummary:\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[43moutputs\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m, skip_special_tokens\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n", + "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/tensorflow/python/util/traceback_utils.py:153\u001b[0m, in \u001b[0;36mfilter_traceback..error_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 151\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 152\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m _process_traceback_frames(e\u001b[38;5;241m.\u001b[39m__traceback__)\n\u001b[0;32m--> 153\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m e\u001b[38;5;241m.\u001b[39mwith_traceback(filtered_tb) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 154\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[1;32m 155\u001b[0m \u001b[38;5;28;01mdel\u001b[39;00m filtered_tb\n", + "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/tensorflow/python/framework/constant_op.py:102\u001b[0m, in \u001b[0;36mconvert_to_eager_tensor\u001b[0;34m(value, ctx, dtype)\u001b[0m\n\u001b[1;32m 100\u001b[0m dtype \u001b[38;5;241m=\u001b[39m dtypes\u001b[38;5;241m.\u001b[39mas_dtype(dtype)\u001b[38;5;241m.\u001b[39mas_datatype_enum\n\u001b[1;32m 101\u001b[0m ctx\u001b[38;5;241m.\u001b[39mensure_initialized()\n\u001b[0;32m--> 102\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mops\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mEagerTensor\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mctx\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdevice_name\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[0;31mTypeError\u001b[0m: Cannot convert 'Summary:' to EagerTensor of dtype int32" + ] + } + ], + "source": [ + "from transformers import AutoTokenizer\n", + "\n", + "tokenizer = AutoTokenizer.from_pretrained(CHECKPOINT)\n", + "inputs = tokenizer.encode(text_pdf, max_length=1000, truncation=True, return_tensors=\"tf\")\n", + "\n", + "from transformers import TFAutoModelForSeq2SeqLM\n", + "\n", + "model = TFAutoModelForSeq2SeqLM.from_pretrained(\"saved_model\")\n", + "\n", + "outputs = model.generate(inputs, max_new_tokens=100, do_sample=False)\n", + "\n", + "tokenizer.decode(outputs[0], skip_special_tokens=True)" + ] + }, + { + "cell_type": "markdown", + "id": "257fb45f-7752-481d-a1f6-f3eeb7655fac", + "metadata": {}, + "source": [ + "## Finetuning our Model via Vertex AI Training API" + ] + }, + { + "cell_type": "markdown", + "id": "6ac841f6-c65e-4ebf-8c42-3030e2f92cb0", + "metadata": { + "tags": [] + }, + "source": [ + "### Setting up our Datasets for Training " + ] + }, + { + "cell_type": "markdown", + "id": "fff825cf-86fb-4777-885b-9e981be831b7", + "metadata": {}, + "source": [ + "Although we have our datasets saved locally inorder to utilize the Vertex AI Training API we will need to store our datasets in a bucket." + ] + }, + { + "cell_type": "code", + "execution_count": 233, + "id": "d3f49896-b2c1-47e6-a7cc-aca7753bb6c4", + "metadata": {}, + "outputs": [], + "source": [ + "from datasets import load_dataset\n", + "\n", + "# load dataset\n", + "train, test, validation = load_dataset(\"ccdv/pubmed-summarization\", split=[\"train[:5%]\", \"test[:5%]\", \"validation[:5%]\" ])" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "1b91fe7c-5970-45c1-9401-1db3206a8ce9", + "metadata": {}, + "outputs": [], + "source": [ + "#load in the storage package and name our bucket\n", + "from google.cloud import storage\n", + "BUCKET='flan-t5-model-resources'\n", + "client = storage.Client()" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "id": "0066ad72-e451-41c0-b30a-c3a7dfa5f17c", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [ + { + "ename": "Conflict", + "evalue": "409 POST https://storage.googleapis.com/storage/v1/b?project=cit-oconnellka-9999&prettyPrint=false: Your previous request to create the named bucket succeeded and you already own it.", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mConflict\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[105], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m#Create bucket\u001b[39;00m\n\u001b[1;32m 2\u001b[0m bucket \u001b[38;5;241m=\u001b[39m client\u001b[38;5;241m.\u001b[39mbucket(BUCKET)\n\u001b[0;32m----> 3\u001b[0m \u001b[43mbucket\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/google/cloud/storage/bucket.py:972\u001b[0m, in \u001b[0;36mBucket.create\u001b[0;34m(self, client, project, location, predefined_acl, predefined_default_object_acl, timeout, retry)\u001b[0m\n\u001b[1;32m 925\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Creates current bucket.\u001b[39;00m\n\u001b[1;32m 926\u001b[0m \n\u001b[1;32m 927\u001b[0m \u001b[38;5;124;03mIf the bucket already exists, will raise\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 968\u001b[0m \u001b[38;5;124;03m (Optional) How to retry the RPC. See: :ref:`configuring_retries`\u001b[39;00m\n\u001b[1;32m 969\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 971\u001b[0m client \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_require_client(client)\n\u001b[0;32m--> 972\u001b[0m \u001b[43mclient\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate_bucket\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 973\u001b[0m \u001b[43m \u001b[49m\u001b[43mbucket_or_name\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 974\u001b[0m \u001b[43m \u001b[49m\u001b[43mproject\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mproject\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 975\u001b[0m \u001b[43m \u001b[49m\u001b[43muser_project\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43muser_project\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 976\u001b[0m \u001b[43m \u001b[49m\u001b[43mlocation\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlocation\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 977\u001b[0m \u001b[43m \u001b[49m\u001b[43mpredefined_acl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpredefined_acl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 978\u001b[0m \u001b[43m \u001b[49m\u001b[43mpredefined_default_object_acl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpredefined_default_object_acl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 979\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 980\u001b[0m \u001b[43m \u001b[49m\u001b[43mretry\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mretry\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 981\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/google/cloud/storage/client.py:954\u001b[0m, in \u001b[0;36mClient.create_bucket\u001b[0;34m(self, bucket_or_name, requester_pays, project, user_project, location, data_locations, predefined_acl, predefined_default_object_acl, timeout, retry)\u001b[0m\n\u001b[1;32m 951\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m data_locations \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 952\u001b[0m properties[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcustomPlacementConfig\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m {\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdataLocations\u001b[39m\u001b[38;5;124m\"\u001b[39m: data_locations}\n\u001b[0;32m--> 954\u001b[0m api_response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_post_resource\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 955\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m/b\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 956\u001b[0m \u001b[43m \u001b[49m\u001b[43mproperties\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 957\u001b[0m \u001b[43m \u001b[49m\u001b[43mquery_params\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mquery_params\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 958\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 959\u001b[0m \u001b[43m \u001b[49m\u001b[43mretry\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mretry\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 960\u001b[0m \u001b[43m \u001b[49m\u001b[43m_target_object\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbucket\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 961\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 963\u001b[0m bucket\u001b[38;5;241m.\u001b[39m_set_properties(api_response)\n\u001b[1;32m 964\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m bucket\n", + "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/google/cloud/storage/client.py:618\u001b[0m, in \u001b[0;36mClient._post_resource\u001b[0;34m(self, path, data, query_params, headers, timeout, retry, _target_object)\u001b[0m\n\u001b[1;32m 557\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_post_resource\u001b[39m(\n\u001b[1;32m 558\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 559\u001b[0m path,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 565\u001b[0m _target_object\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 566\u001b[0m ):\n\u001b[1;32m 567\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Helper for bucket / blob methods making API 'POST' calls.\u001b[39;00m\n\u001b[1;32m 568\u001b[0m \n\u001b[1;32m 569\u001b[0m \u001b[38;5;124;03m Args:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 615\u001b[0m \u001b[38;5;124;03m If the bucket is not found.\u001b[39;00m\n\u001b[1;32m 616\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 618\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_connection\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mapi_request\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 619\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mPOST\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 620\u001b[0m \u001b[43m \u001b[49m\u001b[43mpath\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 621\u001b[0m \u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 622\u001b[0m \u001b[43m \u001b[49m\u001b[43mquery_params\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mquery_params\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 623\u001b[0m \u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 624\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 625\u001b[0m \u001b[43m \u001b[49m\u001b[43mretry\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mretry\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 626\u001b[0m \u001b[43m \u001b[49m\u001b[43m_target_object\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_target_object\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 627\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/google/cloud/storage/_http.py:72\u001b[0m, in \u001b[0;36mConnection.api_request\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 70\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m retry:\n\u001b[1;32m 71\u001b[0m call \u001b[38;5;241m=\u001b[39m retry(call)\n\u001b[0;32m---> 72\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mcall\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/google/api_core/retry.py:349\u001b[0m, in \u001b[0;36mRetry.__call__..retry_wrapped_func\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 345\u001b[0m target \u001b[38;5;241m=\u001b[39m functools\u001b[38;5;241m.\u001b[39mpartial(func, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 346\u001b[0m sleep_generator \u001b[38;5;241m=\u001b[39m exponential_sleep_generator(\n\u001b[1;32m 347\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_initial, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_maximum, multiplier\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_multiplier\n\u001b[1;32m 348\u001b[0m )\n\u001b[0;32m--> 349\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mretry_target\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 350\u001b[0m \u001b[43m \u001b[49m\u001b[43mtarget\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 351\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_predicate\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 352\u001b[0m \u001b[43m \u001b[49m\u001b[43msleep_generator\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 353\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_timeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 354\u001b[0m \u001b[43m \u001b[49m\u001b[43mon_error\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mon_error\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 355\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/google/api_core/retry.py:191\u001b[0m, in \u001b[0;36mretry_target\u001b[0;34m(target, predicate, sleep_generator, timeout, on_error, **kwargs)\u001b[0m\n\u001b[1;32m 189\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m sleep \u001b[38;5;129;01min\u001b[39;00m sleep_generator:\n\u001b[1;32m 190\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 191\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mtarget\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 193\u001b[0m \u001b[38;5;66;03m# pylint: disable=broad-except\u001b[39;00m\n\u001b[1;32m 194\u001b[0m \u001b[38;5;66;03m# This function explicitly must deal with broad exceptions.\u001b[39;00m\n\u001b[1;32m 195\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m exc:\n", + "File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/google/cloud/_http/__init__.py:494\u001b[0m, in \u001b[0;36mJSONConnection.api_request\u001b[0;34m(self, method, path, query_params, data, content_type, headers, api_base_url, api_version, expect_json, _target_object, timeout, extra_api_info)\u001b[0m\n\u001b[1;32m 482\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_make_request(\n\u001b[1;32m 483\u001b[0m method\u001b[38;5;241m=\u001b[39mmethod,\n\u001b[1;32m 484\u001b[0m url\u001b[38;5;241m=\u001b[39murl,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 490\u001b[0m extra_api_info\u001b[38;5;241m=\u001b[39mextra_api_info,\n\u001b[1;32m 491\u001b[0m )\n\u001b[1;32m 493\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;241m200\u001b[39m \u001b[38;5;241m<\u001b[39m\u001b[38;5;241m=\u001b[39m response\u001b[38;5;241m.\u001b[39mstatus_code \u001b[38;5;241m<\u001b[39m \u001b[38;5;241m300\u001b[39m:\n\u001b[0;32m--> 494\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m exceptions\u001b[38;5;241m.\u001b[39mfrom_http_response(response)\n\u001b[1;32m 496\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m expect_json \u001b[38;5;129;01mand\u001b[39;00m response\u001b[38;5;241m.\u001b[39mcontent:\n\u001b[1;32m 497\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m response\u001b[38;5;241m.\u001b[39mjson()\n", + "\u001b[0;31mConflict\u001b[0m: 409 POST https://storage.googleapis.com/storage/v1/b?project=cit-oconnellka-9999&prettyPrint=false: Your previous request to create the named bucket succeeded and you already own it." + ] + } + ], + "source": [ + "#Create bucket\n", + "bucket = client.bucket(BUCKET)\n", + "bucket.create()" + ] + }, + { + "cell_type": "markdown", + "id": "4fc7335e-cfa7-4b0e-8880-85edfa573772", + "metadata": {}, + "source": [ + "Convert our datasets to csv and upload to our bucket in one step!" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "1bfbbd92-4b2c-4e5c-95f8-d4e645a6ab24", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "094bf0b9c0bf44b0859f2b9c5f375e8c", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Creating CSV from Arrow format: 0%| | 0/6 [00:00\n", + " import evaluate\n", + " File \"/opt/conda/lib/python3.10/site-packages/evaluate/__init__.py\", line 29, in \n", + " from .evaluation_suite import EvaluationSuite\n", + " File \"/opt/conda/lib/python3.10/site-packages/evaluate/evaluation_suite/__init__.py\", line 10, in \n", + " from ..evaluator import evaluator\n", + " File \"/opt/conda/lib/python3.10/site-packages/evaluate/evaluator/__init__.py\", line 17, in \n", + " from transformers.pipelines import SUPPORTED_TASKS as SUPPORTED_PIPELINE_TASKS\n", + " File \"/opt/conda/lib/python3.10/site-packages/transformers/pipelines/__init__.py\", line 72, in \n", + " from .table_question_answering import TableQuestionAnsweringArgumentHandler, TableQuestionAnsweringPipeline\n", + " File \"/opt/conda/lib/python3.10/site-packages/transformers/pipelines/table_question_answering.py\", line 26, in \n", + " import tensorflow_probability as tfp\n", + " File \"/opt/conda/lib/python3.10/site-packages/tensorflow_probability/__init__.py\", line 20, in \n", + " from tensorflow_probability import substrates\n", + " File \"/opt/conda/lib/python3.10/site-packages/tensorflow_probability/substrates/__init__.py\", line 17, in \n", + " from tensorflow_probability.python.internal import all_util\n", + " File \"/opt/conda/lib/python3.10/site-packages/tensorflow_probability/python/__init__.py\", line 138, in \n", + " dir(globals()[pkg_name]) # Forces loading the package from its lazy loader.\n", + " File \"/opt/conda/lib/python3.10/site-packages/tensorflow_probability/python/internal/lazy_loader.py\", line 57, in __dir__\n", + " module = self._load()\n", + " File \"/opt/conda/lib/python3.10/site-packages/tensorflow_probability/python/internal/lazy_loader.py\", line 40, in _load\n", + " module = importlib.import_module(self.__name__)\n", + " File \"/opt/conda/lib/python3.10/importlib/__init__.py\", line 126, in import_module\n", + " return _bootstrap._gcd_import(name[level:], package, level)\n", + " File \"/opt/conda/lib/python3.10/site-packages/tensorflow_probability/python/experimental/__init__.py\", line 31, in \n", + " from tensorflow_probability.python.experimental import bayesopt\n", + " File \"/opt/conda/lib/python3.10/site-packages/tensorflow_probability/python/experimental/bayesopt/__init__.py\", line 17, in \n", + " from tensorflow_probability.python.experimental.bayesopt import acquisition\n", + " File \"/opt/conda/lib/python3.10/site-packages/tensorflow_probability/python/experimental/bayesopt/acquisition/__init__.py\", line 17, in \n", + " from tensorflow_probability.python.experimental.bayesopt.acquisition.acquisition_function import AcquisitionFunction\n", + " File \"/opt/conda/lib/python3.10/site-packages/tensorflow_probability/python/experimental/bayesopt/acquisition/acquisition_function.py\", line 22, in \n", + " from tensorflow_probability.python.internal import prefer_static as ps\n", + " File \"/opt/conda/lib/python3.10/site-packages/tensorflow_probability/python/internal/prefer_static.py\", line 361, in \n", + " ones_like = _copy_docstring(tf.ones_like, _ones_like)\n", + " File \"/opt/conda/lib/python3.10/site-packages/tensorflow_probability/python/internal/prefer_static.py\", line 84, in _copy_docstring\n", + " raise ValueError(\n", + "ValueError: Arg specs do not match: original=FullArgSpec(args=['input', 'dtype', 'name', 'layout'], varargs=None, varkw=None, defaults=(None, None, None), kwonlyargs=[], kwonlydefaults=None, annotations={}), new=FullArgSpec(args=['input', 'dtype', 'name'], varargs=None, varkw=None, defaults=(None, None), kwonlyargs=[], kwonlydefaults=None, annotations={}), fn=\n" + ] + } + ], + "source": [ + "#to view options and defaults you can run the command below\n", + "!python autopkg-summarizer/trainer/task.py --help" + ] + }, + { + "cell_type": "code", + "execution_count": 258, + "id": "b21c8c79-1709-4052-8522-ae332cfec934", + "metadata": {}, + "outputs": [], + "source": [ + "#Parameters for task.py script\n", + "CHECKPOINT = \"google/flan-t5-small\"\n", + "train_file=training_input_path\n", + "test_file=test_input_path\n", + "validation_file=validation_input_path\n", + "text_column=\"article\"\n", + "summary_column=\"abstract\"\n", + "source_prefix=\"summarize: \" \n", + "output_dir= f'gs://{BUCKET}'" + ] + }, + { + "cell_type": "markdown", + "id": "e830bb4a-854e-412d-93ec-3059faf603d6", + "metadata": {}, + "source": [ + "For custom AI we need to set the machine type, the accelerator for GPUs, and prebuilt docker image that will run our training. See here for more available containers: https://cloud.google.com/vertex-ai/docs/training/pre-built-containers." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "09392ddd-aa9d-4358-95a6-3e64fa1692ad", + "metadata": {}, + "outputs": [], + "source": [ + "#Parameters for custom AI job\n", + "display_name='flan-t5-training-tf'\n", + "BASE_GPU_IMAGE_tf='us-docker.pkg.dev/vertex-ai/training/tf-gpu.2-12.py310:latest'\n", + "machine_type='n1-standard-4'\n", + "accelerator_type='NVIDIA_TESLA_V100'" + ] + }, + { + "cell_type": "markdown", + "id": "7a6a7856-624d-4229-8a5d-cfd263a84033", + "metadata": {}, + "source": [ + "### Submit Custom AI Training Job" + ] + }, + { + "cell_type": "markdown", + "id": "16c88abb-2a4f-4475-ad58-1d69ca31c449", + "metadata": {}, + "source": [ + "Finally we can submit our training via a custom job! It will first deploy the container that we specified and then submit our model for training. This custom job can take 15 - 20 min using our sample datasets." + ] + }, + { + "cell_type": "code", + "execution_count": 262, + "id": "252d8e16-5b3d-409b-bc86-9da0ce996f72", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...\n", + "To disable this warning, you can either:\n", + "\t- Avoid using `tokenizers` before the fork if possible\n", + "\t- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Using endpoint [https://us-central1-aiplatform.googleapis.com/]\n", + "/usr/lib/google-cloud-sdk/platform/bundledpythonunix/lib/python3.9/subprocess.py:935: RuntimeWarning: line buffering (buffering=1) isn't supported in binary mode, the default buffer size will be used\n", + " self.stdin = io.open(p2cwrite, 'wb', bufsize)\n", + "/usr/lib/google-cloud-sdk/platform/bundledpythonunix/lib/python3.9/subprocess.py:941: RuntimeWarning: line buffering (buffering=1) isn't supported in binary mode, the default buffer size will be used\n", + " self.stdout = io.open(c2pread, 'rb', bufsize)\n", + "Sending build context to Docker daemon 18.99kB\n", + "Step 1/10 : FROM us-docker.pkg.dev/vertex-ai/training/tf-gpu.2-12.py310:latest\n", + " ---> bd2bbbab7d71\n", + "Step 2/10 : RUN mkdir -m 777 -p /usr/app /home\n", + " ---> Running in 358dbf3724e8\n", + "Removing intermediate container 358dbf3724e8\n", + " ---> edf7be7209d7\n", + "Step 3/10 : WORKDIR /usr/app\n", + " ---> Running in a23be90e59c5\n", + "Removing intermediate container a23be90e59c5\n", + " ---> c35f2baa964c\n", + "Step 4/10 : ENV HOME=/home\n", + " ---> Running in 0137537b093b\n", + "Removing intermediate container 0137537b093b\n", + " ---> 64af9b387e54\n", + "Step 5/10 : ENV PYTHONDONTWRITEBYTECODE=1\n", + " ---> Running in cc5806ee80a2\n", + "Removing intermediate container cc5806ee80a2\n", + " ---> dfe914f7ecbc\n", + "Step 6/10 : RUN rm -rf /var/sitecustomize\n", + " ---> Running in 3e7c5fa57fe2\n", + "Removing intermediate container 3e7c5fa57fe2\n", + " ---> fa997bc68c88\n", + "Step 7/10 : COPY [\"./requirements.txt\", \"./requirements.txt\"]\n", + " ---> 7c46da48c940\n", + "Step 8/10 : RUN pip3 install --no-cache-dir -r ./requirements.txt\n", + " ---> Running in 6502f72390d6\n", + "Collecting evaluate (from -r ./requirements.txt (line 1))\n", + " Obtaining dependency information for evaluate from https://files.pythonhosted.org/packages/70/63/7644a1eb7b0297e585a6adec98ed9e575309bb973c33b394dae66bc35c69/evaluate-0.4.1-py3-none-any.whl.metadata\n", + " Downloading evaluate-0.4.1-py3-none-any.whl.metadata (9.4 kB)\n", + "Collecting nltk (from -r ./requirements.txt (line 2))\n", + " Downloading nltk-3.8.1-py3-none-any.whl (1.5 MB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 61.9 MB/s eta 0:00:00\n", + "Collecting transformers (from -r ./requirements.txt (line 3))\n", + " Obtaining dependency information for transformers from https://files.pythonhosted.org/packages/9a/06/e4ec2a321e57c03b7e9345d709d554a52c33760e5015fdff0919d9459af0/transformers-4.35.0-py3-none-any.whl.metadata\n", + " Downloading transformers-4.35.0-py3-none-any.whl.metadata (123 kB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 123.1/123.1 kB 203.6 MB/s eta 0:00:00\n", + "Collecting keras_nlp (from -r ./requirements.txt (line 4))\n", + " Obtaining dependency information for keras_nlp from https://files.pythonhosted.org/packages/37/d4/dfd85606db811af2138e97fc480eb7ed709042dd96dd453868bede0929fe/keras_nlp-0.6.2-py3-none-any.whl.metadata\n", + " Downloading keras_nlp-0.6.2-py3-none-any.whl.metadata (7.2 kB)\n", + "Collecting datasets (from -r ./requirements.txt (line 5))\n", + " Obtaining dependency information for datasets from https://files.pythonhosted.org/packages/7c/55/b3432f43d6d7fee999bb23a547820d74c48ec540f5f7842e41aa5d8d5f3a/datasets-2.14.6-py3-none-any.whl.metadata\n", + " Downloading datasets-2.14.6-py3-none-any.whl.metadata (19 kB)\n", + "Collecting rouge_score (from -r ./requirements.txt (line 6))\n", + " Downloading rouge_score-0.1.2.tar.gz (17 kB)\n", + " Preparing metadata (setup.py): started\n", + " Preparing metadata (setup.py): finished with status 'done'\n", + "Requirement already satisfied: numpy>=1.17 in /opt/conda/lib/python3.10/site-packages (from evaluate->-r ./requirements.txt (line 1)) (1.23.5)\n", + "Collecting dill (from evaluate->-r ./requirements.txt (line 1))\n", + " Obtaining dependency information for dill from https://files.pythonhosted.org/packages/f5/3a/74a29b11cf2cdfcd6ba89c0cecd70b37cd1ba7b77978ce611eb7a146a832/dill-0.3.7-py3-none-any.whl.metadata\n", + " Downloading dill-0.3.7-py3-none-any.whl.metadata (9.9 kB)\n", + "Requirement already satisfied: pandas in /opt/conda/lib/python3.10/site-packages (from evaluate->-r ./requirements.txt (line 1)) (2.0.3)\n", + "Requirement already satisfied: requests>=2.19.0 in /opt/conda/lib/python3.10/site-packages (from evaluate->-r ./requirements.txt (line 1)) (2.31.0)\n", + "Requirement already satisfied: tqdm>=4.62.1 in /opt/conda/lib/python3.10/site-packages (from evaluate->-r ./requirements.txt (line 1)) (4.65.0)\n", + "Collecting xxhash (from evaluate->-r ./requirements.txt (line 1))\n", + " Obtaining dependency information for xxhash from https://files.pythonhosted.org/packages/80/8a/1dd41557883b6196f8f092011a5c1f72d4d44cf36d7b67d4a5efe3127949/xxhash-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n", + " Downloading xxhash-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (12 kB)\n", + "Collecting multiprocess (from evaluate->-r ./requirements.txt (line 1))\n", + " Obtaining dependency information for multiprocess from https://files.pythonhosted.org/packages/35/a8/36d8d7b3e46b377800d8dec47891cdf05842d1a2366909ae4a0c89fbc5e6/multiprocess-0.70.15-py310-none-any.whl.metadata\n", + " Downloading multiprocess-0.70.15-py310-none-any.whl.metadata (7.2 kB)\n", + "Requirement already satisfied: fsspec[http]>=2021.05.0 in /opt/conda/lib/python3.10/site-packages (from evaluate->-r ./requirements.txt (line 1)) (2023.6.0)\n", + "Collecting huggingface-hub>=0.7.0 (from evaluate->-r ./requirements.txt (line 1))\n", + " Obtaining dependency information for huggingface-hub>=0.7.0 from https://files.pythonhosted.org/packages/ef/b5/b6107bd65fa4c96fdf00e4733e2fe5729bb9e5e09997f63074bb43d3ab28/huggingface_hub-0.18.0-py3-none-any.whl.metadata\n", + " Downloading huggingface_hub-0.18.0-py3-none-any.whl.metadata (13 kB)\n", + "Requirement already satisfied: packaging in /opt/conda/lib/python3.10/site-packages (from evaluate->-r ./requirements.txt (line 1)) (23.1)\n", + "Collecting responses<0.19 (from evaluate->-r ./requirements.txt (line 1))\n", + " Downloading responses-0.18.0-py3-none-any.whl (38 kB)\n", + "Requirement already satisfied: click in /opt/conda/lib/python3.10/site-packages (from nltk->-r ./requirements.txt (line 2)) (8.1.6)\n", + "Requirement already satisfied: joblib in /opt/conda/lib/python3.10/site-packages (from nltk->-r ./requirements.txt (line 2)) (1.3.1)\n", + "Collecting regex>=2021.8.3 (from nltk->-r ./requirements.txt (line 2))\n", + " Obtaining dependency information for regex>=2021.8.3 from https://files.pythonhosted.org/packages/8f/3e/4b8b40eb3c80aeaf360f0361d956d129bb3d23b2a3ecbe3a04a8f3bdd6d3/regex-2023.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n", + " Downloading regex-2023.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (40 kB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.9/40.9 kB 178.9 MB/s eta 0:00:00\n", + "Requirement already satisfied: filelock in /opt/conda/lib/python3.10/site-packages (from transformers->-r ./requirements.txt (line 3)) (3.12.2)\n", + "Requirement already satisfied: pyyaml>=5.1 in /opt/conda/lib/python3.10/site-packages (from transformers->-r ./requirements.txt (line 3)) (6.0.1)\n", + "Collecting tokenizers<0.15,>=0.14 (from transformers->-r ./requirements.txt (line 3))\n", + " Obtaining dependency information for tokenizers<0.15,>=0.14 from https://files.pythonhosted.org/packages/a7/7b/c1f643eb086b6c5c33eef0c3752e37624bd23e4cbc9f1332748f1c6252d1/tokenizers-0.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n", + " Downloading tokenizers-0.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.7 kB)\n", + "Collecting safetensors>=0.3.1 (from transformers->-r ./requirements.txt (line 3))\n", + " Obtaining dependency information for safetensors>=0.3.1 from https://files.pythonhosted.org/packages/20/4e/878b080dbda92666233ec6f316a53969edcb58eab1aa399a64d0521cf953/safetensors-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n", + " Downloading safetensors-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.8 kB)\n", + "Collecting keras-core (from keras_nlp->-r ./requirements.txt (line 4))\n", + " Obtaining dependency information for keras-core from https://files.pythonhosted.org/packages/95/f7/b8dcff937ea64f822f0d3fe8c6010793406b82d14467cd0e9eecea458a40/keras_core-0.1.7-py3-none-any.whl.metadata\n", + " Downloading keras_core-0.1.7-py3-none-any.whl.metadata (4.3 kB)\n", + "Requirement already satisfied: absl-py in /opt/conda/lib/python3.10/site-packages (from keras_nlp->-r ./requirements.txt (line 4)) (1.4.0)\n", + "Requirement already satisfied: rich in /opt/conda/lib/python3.10/site-packages (from keras_nlp->-r ./requirements.txt (line 4)) (13.5.1)\n", + "Requirement already satisfied: dm-tree in /opt/conda/lib/python3.10/site-packages (from keras_nlp->-r ./requirements.txt (line 4)) (0.1.8)\n", + "Collecting tensorflow-text (from keras_nlp->-r ./requirements.txt (line 4))\n", + " Obtaining dependency information for tensorflow-text from https://files.pythonhosted.org/packages/0b/5f/8b301d2d0cea8334c22aaeb8880ce115ec34d7eba20f7b08c64202011a85/tensorflow_text-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n", + " Downloading tensorflow_text-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.9 kB)\n", + "Requirement already satisfied: pyarrow>=8.0.0 in /opt/conda/lib/python3.10/site-packages (from datasets->-r ./requirements.txt (line 5)) (12.0.1)\n", + "Requirement already satisfied: aiohttp in /opt/conda/lib/python3.10/site-packages (from datasets->-r ./requirements.txt (line 5)) (3.8.5)\n", + "Requirement already satisfied: six>=1.14.0 in /opt/conda/lib/python3.10/site-packages (from rouge_score->-r ./requirements.txt (line 6)) (1.16.0)\n", + "Requirement already satisfied: attrs>=17.3.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets->-r ./requirements.txt (line 5)) (23.1.0)\n", + "Requirement already satisfied: charset-normalizer<4.0,>=2.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets->-r ./requirements.txt (line 5)) (3.2.0)\n", + "Requirement already satisfied: multidict<7.0,>=4.5 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets->-r ./requirements.txt (line 5)) (6.0.4)\n", + "Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets->-r ./requirements.txt (line 5)) (4.0.2)\n", + "Requirement already satisfied: yarl<2.0,>=1.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets->-r ./requirements.txt (line 5)) (1.9.2)\n", + "Requirement already satisfied: frozenlist>=1.1.1 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets->-r ./requirements.txt (line 5)) (1.4.0)\n", + "Requirement already satisfied: aiosignal>=1.1.2 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets->-r ./requirements.txt (line 5)) (1.3.1)\n", + "Requirement already satisfied: typing-extensions>=3.7.4.3 in /opt/conda/lib/python3.10/site-packages (from huggingface-hub>=0.7.0->evaluate->-r ./requirements.txt (line 1)) (4.7.1)\n", + "Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.10/site-packages (from requests>=2.19.0->evaluate->-r ./requirements.txt (line 1)) (3.4)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/conda/lib/python3.10/site-packages (from requests>=2.19.0->evaluate->-r ./requirements.txt (line 1)) (1.26.16)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.10/site-packages (from requests>=2.19.0->evaluate->-r ./requirements.txt (line 1)) (2023.7.22)\n", + "Collecting huggingface-hub>=0.7.0 (from evaluate->-r ./requirements.txt (line 1))\n", + " Obtaining dependency information for huggingface-hub>=0.7.0 from https://files.pythonhosted.org/packages/aa/f3/3fc97336a0e90516901befd4f500f08d691034d387406fdbde85bea827cc/huggingface_hub-0.17.3-py3-none-any.whl.metadata\n", + " Downloading huggingface_hub-0.17.3-py3-none-any.whl.metadata (13 kB)\n", + "Collecting namex (from keras-core->keras_nlp->-r ./requirements.txt (line 4))\n", + " Downloading namex-0.0.7-py3-none-any.whl (5.8 kB)\n", + "Requirement already satisfied: h5py in /opt/conda/lib/python3.10/site-packages (from keras-core->keras_nlp->-r ./requirements.txt (line 4)) (3.9.0)\n", + "Requirement already satisfied: python-dateutil>=2.8.2 in /opt/conda/lib/python3.10/site-packages (from pandas->evaluate->-r ./requirements.txt (line 1)) (2.8.2)\n", + "Requirement already satisfied: pytz>=2020.1 in /opt/conda/lib/python3.10/site-packages (from pandas->evaluate->-r ./requirements.txt (line 1)) (2023.3)\n", + "Requirement already satisfied: tzdata>=2022.1 in /opt/conda/lib/python3.10/site-packages (from pandas->evaluate->-r ./requirements.txt (line 1)) (2023.3)\n", + "Requirement already satisfied: markdown-it-py>=2.2.0 in /opt/conda/lib/python3.10/site-packages (from rich->keras_nlp->-r ./requirements.txt (line 4)) (3.0.0)\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /opt/conda/lib/python3.10/site-packages (from rich->keras_nlp->-r ./requirements.txt (line 4)) (2.15.1)\n", + "Collecting tensorflow-hub>=0.13.0 (from tensorflow-text->keras_nlp->-r ./requirements.txt (line 4))\n", + " Obtaining dependency information for tensorflow-hub>=0.13.0 from https://files.pythonhosted.org/packages/6e/1a/fbae76f4057b9bcdf9468025d7a8ca952dec14bfafb9fc0b1e4244ce212f/tensorflow_hub-0.15.0-py2.py3-none-any.whl.metadata\n", + " Downloading tensorflow_hub-0.15.0-py2.py3-none-any.whl.metadata (1.3 kB)\n", + "Collecting tensorflow<2.15,>=2.14.0 (from tensorflow-text->keras_nlp->-r ./requirements.txt (line 4))\n", + " Obtaining dependency information for tensorflow<2.15,>=2.14.0 from https://files.pythonhosted.org/packages/e2/7a/c7762c698fb1ac41a7e3afee51dc72aa3ec74ae8d2f57ce19a9cded3a4af/tensorflow-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata\n", + " Downloading tensorflow-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.1 kB)\n", + "Requirement already satisfied: mdurl~=0.1 in /opt/conda/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich->keras_nlp->-r ./requirements.txt (line 4)) (0.1.2)\n", + "Requirement already satisfied: astunparse>=1.6.0 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (1.6.3)\n", + "Requirement already satisfied: flatbuffers>=23.5.26 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (23.5.26)\n", + "Requirement already satisfied: gast!=0.5.0,!=0.5.1,!=0.5.2,>=0.2.1 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (0.4.0)\n", + "Requirement already satisfied: google-pasta>=0.1.1 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (0.2.0)\n", + "Requirement already satisfied: libclang>=13.0.0 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (16.0.6)\n", + "Requirement already satisfied: ml-dtypes==0.2.0 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (0.2.0)\n", + "Requirement already satisfied: opt-einsum>=2.3.2 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (3.3.0)\n", + "Collecting protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev,>=3.20.3 (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4))\n", + " Obtaining dependency information for protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev,>=3.20.3 from https://files.pythonhosted.org/packages/ae/32/45b1cf0c5d4a3ba881f5164c26af877c0dabfe6de0019d426aa0e5cf6806/protobuf-4.25.0-cp37-abi3-manylinux2014_x86_64.whl.metadata\n", + " Downloading protobuf-4.25.0-cp37-abi3-manylinux2014_x86_64.whl.metadata (541 bytes)\n", + "Requirement already satisfied: setuptools in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (68.0.0)\n", + "Requirement already satisfied: termcolor>=1.1.0 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (2.3.0)\n", + "Requirement already satisfied: wrapt<1.15,>=1.11.0 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (1.14.1)\n", + "Requirement already satisfied: tensorflow-io-gcs-filesystem>=0.23.1 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (0.32.0)\n", + "Requirement already satisfied: grpcio<2.0,>=1.24.3 in /opt/conda/lib/python3.10/site-packages (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (1.56.2)\n", + "Collecting tensorboard<2.15,>=2.14 (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4))\n", + " Obtaining dependency information for tensorboard<2.15,>=2.14 from https://files.pythonhosted.org/packages/73/a2/66ed644f6ed1562e0285fcd959af17670ea313c8f331c46f79ee77187eb9/tensorboard-2.14.1-py3-none-any.whl.metadata\n", + " Downloading tensorboard-2.14.1-py3-none-any.whl.metadata (1.7 kB)\n", + "Collecting tensorflow-estimator<2.15,>=2.14.0 (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4))\n", + " Obtaining dependency information for tensorflow-estimator<2.15,>=2.14.0 from https://files.pythonhosted.org/packages/d1/da/4f264c196325bb6e37a6285caec5b12a03def489b57cc1fdac02bb6272cd/tensorflow_estimator-2.14.0-py2.py3-none-any.whl.metadata\n", + " Downloading tensorflow_estimator-2.14.0-py2.py3-none-any.whl.metadata (1.3 kB)\n", + "Collecting keras<2.15,>=2.14.0 (from tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4))\n", + " Obtaining dependency information for keras<2.15,>=2.14.0 from https://files.pythonhosted.org/packages/fe/58/34d4d8f1aa11120c2d36d7ad27d0526164b1a8ae45990a2fede31d0e59bf/keras-2.14.0-py3-none-any.whl.metadata\n", + " Downloading keras-2.14.0-py3-none-any.whl.metadata (2.4 kB)\n", + "Requirement already satisfied: wheel<1.0,>=0.23.0 in /opt/conda/lib/python3.10/site-packages (from astunparse>=1.6.0->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (0.41.0)\n", + "Requirement already satisfied: google-auth<3,>=1.6.3 in /opt/conda/lib/python3.10/site-packages (from tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (2.22.0)\n", + "Requirement already satisfied: google-auth-oauthlib<1.1,>=0.5 in /opt/conda/lib/python3.10/site-packages (from tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (1.0.0)\n", + "Requirement already satisfied: markdown>=2.6.8 in /opt/conda/lib/python3.10/site-packages (from tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (3.4.4)\n", + "Requirement already satisfied: tensorboard-data-server<0.8.0,>=0.7.0 in /opt/conda/lib/python3.10/site-packages (from tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (0.7.1)\n", + "Requirement already satisfied: werkzeug>=1.0.1 in /opt/conda/lib/python3.10/site-packages (from tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (2.3.6)\n", + "Requirement already satisfied: cachetools<6.0,>=2.0.0 in /opt/conda/lib/python3.10/site-packages (from google-auth<3,>=1.6.3->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (5.3.1)\n", + "Requirement already satisfied: pyasn1-modules>=0.2.1 in /opt/conda/lib/python3.10/site-packages (from google-auth<3,>=1.6.3->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (0.3.0)\n", + "Requirement already satisfied: rsa<5,>=3.1.4 in /opt/conda/lib/python3.10/site-packages (from google-auth<3,>=1.6.3->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (4.9)\n", + "Requirement already satisfied: requests-oauthlib>=0.7.0 in /opt/conda/lib/python3.10/site-packages (from google-auth-oauthlib<1.1,>=0.5->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (1.3.1)\n", + "Requirement already satisfied: MarkupSafe>=2.1.1 in /opt/conda/lib/python3.10/site-packages (from werkzeug>=1.0.1->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (2.1.3)\n", + "Requirement already satisfied: pyasn1<0.6.0,>=0.4.6 in /opt/conda/lib/python3.10/site-packages (from pyasn1-modules>=0.2.1->google-auth<3,>=1.6.3->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (0.5.0)\n", + "Requirement already satisfied: oauthlib>=3.0.0 in /opt/conda/lib/python3.10/site-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<1.1,>=0.5->tensorboard<2.15,>=2.14->tensorflow<2.15,>=2.14.0->tensorflow-text->keras_nlp->-r ./requirements.txt (line 4)) (3.2.2)\n", + "Downloading evaluate-0.4.1-py3-none-any.whl (84 kB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 84.1/84.1 kB 198.5 MB/s eta 0:00:00\n", + "Downloading transformers-4.35.0-py3-none-any.whl (7.9 MB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.9/7.9 MB 124.2 MB/s eta 0:00:00\n", + "Downloading keras_nlp-0.6.2-py3-none-any.whl (590 kB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 590.1/590.1 kB 225.3 MB/s eta 0:00:00\n", + "Downloading datasets-2.14.6-py3-none-any.whl (493 kB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 493.7/493.7 kB 214.8 MB/s eta 0:00:00\n", + "Downloading dill-0.3.7-py3-none-any.whl (115 kB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 115.3/115.3 kB 230.1 MB/s eta 0:00:00\n", + "Downloading regex-2023.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (773 kB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 773.9/773.9 kB 233.9 MB/s eta 0:00:00\n", + "Downloading safetensors-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3/1.3 MB 228.3 MB/s eta 0:00:00\n", + "Downloading tokenizers-0.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.8 MB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.8/3.8 MB 223.3 MB/s eta 0:00:00\n", + "Downloading huggingface_hub-0.17.3-py3-none-any.whl (295 kB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 295.0/295.0 kB 240.5 MB/s eta 0:00:00\n", + "Downloading keras_core-0.1.7-py3-none-any.whl (950 kB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 950.8/950.8 kB 236.1 MB/s eta 0:00:00\n", + "Downloading multiprocess-0.70.15-py310-none-any.whl (134 kB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 134.8/134.8 kB 216.1 MB/s eta 0:00:00\n", + "Downloading tensorflow_text-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.5 MB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.5/6.5 MB 158.6 MB/s eta 0:00:00\n", + "Downloading xxhash-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (194 kB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 194.1/194.1 kB 223.4 MB/s eta 0:00:00\n", + "Downloading tensorflow-2.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (489.8 MB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 489.8/489.8 MB 212.8 MB/s eta 0:00:00\n", + "Downloading tensorflow_hub-0.15.0-py2.py3-none-any.whl (85 kB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 85.4/85.4 kB 185.0 MB/s eta 0:00:00\n", + "Downloading keras-2.14.0-py3-none-any.whl (1.7 MB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 219.8 MB/s eta 0:00:00\n", + "Downloading protobuf-4.25.0-cp37-abi3-manylinux2014_x86_64.whl (294 kB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 294.4/294.4 kB 217.2 MB/s eta 0:00:00\n", + "Downloading tensorboard-2.14.1-py3-none-any.whl (5.5 MB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.5/5.5 MB 212.0 MB/s eta 0:00:00\n", + "Downloading tensorflow_estimator-2.14.0-py2.py3-none-any.whl (440 kB)\n", + " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 440.7/440.7 kB 223.9 MB/s eta 0:00:00\n", + "Building wheels for collected packages: rouge_score\n", + " Building wheel for rouge_score (setup.py): started\n", + " Building wheel for rouge_score (setup.py): finished with status 'done'\n", + " Created wheel for rouge_score: filename=rouge_score-0.1.2-py3-none-any.whl size=24933 sha256=7fb2b5092b892710a8c128f5633d6f5f22dc260df119b78067900b8c74e972a4\n", + " Stored in directory: /tmp/pip-ephem-wheel-cache-sagd5q__/wheels/5f/dd/89/461065a73be61a532ff8599a28e9beef17985c9e9c31e541b4\n", + "Successfully built rouge_score\n", + "Installing collected packages: namex, xxhash, tensorflow-estimator, safetensors, regex, protobuf, keras, dill, tensorflow-hub, responses, nltk, multiprocess, huggingface-hub, tokenizers, rouge_score, keras-core, transformers, tensorboard, datasets, tensorflow, evaluate, tensorflow-text, keras_nlp\n", + " Attempting uninstall: tensorflow-estimator\n", + " Found existing installation: tensorflow-estimator 2.12.0\n", + " Uninstalling tensorflow-estimator-2.12.0:\n", + " Successfully uninstalled tensorflow-estimator-2.12.0\n", + " Attempting uninstall: protobuf\n", + " Found existing installation: protobuf 3.20.1\n", + " Uninstalling protobuf-3.20.1:\n", + " Successfully uninstalled protobuf-3.20.1\n", + " Attempting uninstall: keras\n", + " Found existing installation: keras 2.12.0\n", + " Uninstalling keras-2.12.0:\n", + " Successfully uninstalled keras-2.12.0\n", + " Attempting uninstall: tensorboard\n", + " Found existing installation: tensorboard 2.12.3\n", + " Uninstalling tensorboard-2.12.3:\n", + " Successfully uninstalled tensorboard-2.12.3\n", + " Attempting uninstall: tensorflow\n", + " Found existing installation: tensorflow 2.12.0\n", + " Uninstalling tensorflow-2.12.0:\n", + " Successfully uninstalled tensorflow-2.12.0\n", + "Successfully installed datasets-2.14.6 dill-0.3.7 evaluate-0.4.1 huggingface-hub-0.17.3 keras-2.14.0 keras-core-0.1.7 keras_nlp-0.6.2 multiprocess-0.70.15 namex-0.0.7 nltk-3.8.1 protobuf-4.25.0 regex-2023.10.3 responses-0.18.0 rouge_score-0.1.2 safetensors-0.4.0 tensorboard-2.14.1 tensorflow-2.14.0 tensorflow-estimator-2.14.0 tensorflow-hub-0.15.0 tensorflow-text-2.14.0 tokenizers-0.14.1 transformers-4.35.0 xxhash-3.4.1\n", + "\u001b[91mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", + "google-cloud-datastore 1.15.5 requires protobuf<4.0.0dev, but you have protobuf 4.25.0 which is incompatible.\n", + "\u001b[0m\u001b[91mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\n", + "\u001b[0mRemoving intermediate container 6502f72390d6\n", + " ---> 97a4b7990a59\n", + "Step 9/10 : COPY [\"trainer\", \"trainer\"]\n", + " ---> dce93f89c146\n", + "Step 10/10 : ENTRYPOINT [\"python3\", \"-m\", \"trainer.task\"]\n", + " ---> Running in beccb40ff5ce\n", + "Removing intermediate container beccb40ff5ce\n", + " ---> 6be133543c75\n", + "Successfully built 6be133543c75\n", + "Successfully tagged gcr.io/cit-oconnellka-9999/cloudai-autogenerated/flan-t5-training-tf3:20231103.17.39.12.779660\n", + "\n", + "A custom container image is built locally.\n", + "\n", + "/usr/lib/google-cloud-sdk/platform/bundledpythonunix/lib/python3.9/subprocess.py:935: RuntimeWarning: line buffering (buffering=1) isn't supported in binary mode, the default buffer size will be used\n", + " self.stdin = io.open(p2cwrite, 'wb', bufsize)\n", + "/usr/lib/google-cloud-sdk/platform/bundledpythonunix/lib/python3.9/subprocess.py:941: RuntimeWarning: line buffering (buffering=1) isn't supported in binary mode, the default buffer size will be used\n", + " self.stdout = io.open(c2pread, 'rb', bufsize)\n", + "The push refers to repository [gcr.io/cit-oconnellka-9999/cloudai-autogenerated/flan-t5-training-tf3]\n", + "de565aa0e952: Preparing\n", + "8027f564cadd: Preparing\n", + "5bd43a783137: Preparing\n", + "c2cec13eda62: Preparing\n", + "73c814d198fd: Preparing\n", + "e42695c7b436: Preparing\n", + "e42695c7b436: Preparing\n", + "7e34967c8575: Preparing\n", + "19c1ff49a1a3: Preparing\n", + "724eb7d1e386: Preparing\n", + "e7df186da59e: Preparing\n", + "e7df186da59e: Preparing\n", + "d9e5455afa58: Preparing\n", + "a4f1c7b5b5c5: Preparing\n", + "1eeca563762d: Preparing\n", + "b3f8d9df367e: Preparing\n", + "29e2658ae6ea: Preparing\n", + "228616cf4f10: Preparing\n", + "ae32b7336b96: Preparing\n", + "ae32b7336b96: Preparing\n", + "ea7b0ccc272e: Preparing\n", + "01d4173a3960: Preparing\n", + "c235d251a607: Preparing\n", + "f2833e4d69b4: Preparing\n", + "49fc5a524f1f: Preparing\n", + "e175e85d3600: Preparing\n", + "55bfb3527de7: Preparing\n", + "ee67859f37c6: Preparing\n", + "ed7e041f0699: Preparing\n", + "0235cf47cbae: Preparing\n", + "724eb7d1e386: Waiting\n", + "2971cdbb4b45: Preparing\n", + "8374b2bc65e7: Preparing\n", + "3b93a6feba89: Preparing\n", + "b15400eb0fa7: Preparing\n", + "29ecaf0c2ae0: Preparing\n", + "a4f1c7b5b5c5: Waiting\n", + "41e673079fce: Preparing\n", + "e7df186da59e: Waiting\n", + "1eeca563762d: Waiting\n", + "cda9215846ee: Preparing\n", + "d9e5455afa58: Waiting\n", + "c5eafb4bee8f: Preparing\n", + "b3f8d9df367e: Waiting\n", + "29e2658ae6ea: Waiting\n", + "81182eb0608d: Preparing\n", + "f2baf76d88ee: Preparing\n", + "228616cf4f10: Waiting\n", + "01d4173a3960: Waiting\n", + "cdd7c7392317: Preparing\n", + "ae32b7336b96: Waiting\n", + "c235d251a607: Waiting\n", + "ea7b0ccc272e: Waiting\n", + "e175e85d3600: Waiting\n", + "f2833e4d69b4: Waiting\n", + "b15400eb0fa7: Waiting\n", + "29ecaf0c2ae0: Waiting\n", + "2971cdbb4b45: Waiting\n", + "49fc5a524f1f: Waiting\n", + "41e673079fce: Waiting\n", + "55bfb3527de7: Waiting\n", + "ee67859f37c6: Waiting\n", + "cda9215846ee: Waiting\n", + "3b93a6feba89: Waiting\n", + "8374b2bc65e7: Waiting\n", + "ed7e041f0699: Waiting\n", + "c5eafb4bee8f: Waiting\n", + "0235cf47cbae: Waiting\n", + "81182eb0608d: Waiting\n", + "cdd7c7392317: Waiting\n", + "f2baf76d88ee: Waiting\n", + "e42695c7b436: Waiting\n", + "7e34967c8575: Waiting\n", + "19c1ff49a1a3: Waiting\n", + "73c814d198fd: Pushed\n", + "5bd43a783137: Pushed\n", + "c2cec13eda62: Pushed\n", + "de565aa0e952: Pushed\n", + "e42695c7b436: Layer already exists\n", + "7e34967c8575: Layer already exists\n", + "19c1ff49a1a3: Layer already exists\n", + "e7df186da59e: Layer already exists\n", + "724eb7d1e386: Layer already exists\n", + "d9e5455afa58: Layer already exists\n", + "a4f1c7b5b5c5: Layer already exists\n", + "1eeca563762d: Layer already exists\n", + "b3f8d9df367e: Layer already exists\n", + "228616cf4f10: Layer already exists\n", + "29e2658ae6ea: Layer already exists\n", + "ae32b7336b96: Layer already exists\n", + "ea7b0ccc272e: Layer already exists\n", + "01d4173a3960: Layer already exists\n", + "c235d251a607: Layer already exists\n", + "f2833e4d69b4: Layer already exists\n", + "49fc5a524f1f: Layer already exists\n", + "e175e85d3600: Layer already exists\n", + "55bfb3527de7: Layer already exists\n", + "ee67859f37c6: Layer already exists\n", + "ed7e041f0699: Layer already exists\n", + "0235cf47cbae: Layer already exists\n", + "2971cdbb4b45: Layer already exists\n", + "8374b2bc65e7: Layer already exists\n", + "3b93a6feba89: Layer already exists\n", + "b15400eb0fa7: Layer already exists\n", + "41e673079fce: Layer already exists\n", + "29ecaf0c2ae0: Layer already exists\n", + "c5eafb4bee8f: Layer already exists\n", + "cda9215846ee: Layer already exists\n", + "81182eb0608d: Layer already exists\n", + "f2baf76d88ee: Layer already exists\n", + "cdd7c7392317: Layer already exists\n", + "8027f564cadd: Pushed\n", + "20231103.17.39.12.779660: digest: sha256:1240e61185c933e273e7bc6b5112358d85942e1f8bcb2cf076b3a144e5b748eb size: 8901\n", + "\n", + "Custom container image [gcr.io/cit-oconnellka-9999/cloudai-autogenerated/flan-t5-training-tf3:20231103.17.39.12.779660] is created for your custom job.\n", + "\n", + "CustomJob [projects/144763482491/locations/us-central1/customJobs/6207308081613766656] is submitted successfully.\n", + "\n", + "Your job is still active. You may view the status of your job with the command\n", + "\n", + " $ gcloud ai custom-jobs describe projects/144763482491/locations/us-central1/customJobs/6207308081613766656\n", + "\n", + "or continue streaming the logs with the command\n", + "\n", + " $ gcloud ai custom-jobs stream-logs projects/144763482491/locations/us-central1/customJobs/6207308081613766656\n" + ] + } + ], + "source": [ + "!gcloud ai custom-jobs create \\\n", + "--region=us-central1 \\\n", + "--display-name=$display_name \\\n", + "--args=--model_name_or_path=$CHECKPOINT \\\n", + "--args=--train_file=$train_file \\\n", + "--args=--test_file=$test_file \\\n", + "--args=--validation_file=$validation_file \\\n", + "--args=--text_column=$text_column \\\n", + "--args=--summary_column=$summary_column \\\n", + "--args=--output_dir=gs://$BUCKET \\\n", + "--args=--source_prefix=$source_prefix \\\n", + "--worker-pool-spec=machine-type=$machine_type,replica-count=1,accelerator-type=$accelerator_type,executor-image-uri=$BASE_GPU_IMAGE_tf,local-package-path=autopkg-summarizer,python-module=trainer.task" + ] + }, + { + "cell_type": "markdown", + "id": "403fe77f-990c-4518-ad3a-0aac3d2c8b92", + "metadata": {}, + "source": [ + "Once you start training the output from the command line should show you the command to use to view the progress of your training via the command `gcloud ai custom-jobs stream-logs <`. You can also monitor and view logs on the console by going to `Vertex AI > Training > Custom Jobs`\n", + "select your custom job and click on \"View Logs\"" + ] + }, + { + "cell_type": "markdown", + "id": "dc7b81af-d424-427d-a37a-ac5da197567e", + "metadata": {}, + "source": [ + "## Deploy the Model" + ] + }, + { + "cell_type": "markdown", + "id": "d772dc95-95e9-40f2-a5c5-dc782d6f7e14", + "metadata": {}, + "source": [ + "### Upload the Model to Vertex AI's Model Registry" + ] + }, + { + "cell_type": "markdown", + "id": "4dff127a-4d14-4fa1-a22a-75662eccce02", + "metadata": {}, + "source": [ + "Once our model is done training you should see a model_save.pd file in your bucket. We will need this inorder to upload our model to the Model Registry. Here we are specifiying a prebuilt docker image that will run our predictions, the name of our model and the directory in our bucket that holds our **model_save.pd** file." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "26042230-dc95-4b6c-bd32-bf3596e5de52", + "metadata": {}, + "outputs": [], + "source": [ + "TF_PREDICTION_IMAGE_URI_RUNTIME = 'us-docker.pkg.dev/vertex-ai-restricted/prediction/tf_opt-gpu.2-12:latest'" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "f5a3ef3b-8080-4e2d-bb8f-7e2f22c59e05", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Creating Model\n", + "Create Model backing LRO: projects/144763482491/locations/us-central1/models/3296764669607280640/operations/1237604172191236096\n", + "Model created. Resource name: projects/144763482491/locations/us-central1/models/3296764669607280640@1\n", + "To use this Model in another session:\n", + "model = aiplatform.Model('projects/144763482491/locations/us-central1/models/3296764669607280640@1')\n" + ] + } + ], + "source": [ + "from google.cloud import aiplatform as vertexai\n", + "from google.cloud import aiplatform\n", + "\n", + "#give your model a name\n", + "MODEL_DISPLAY_NAME = \"summarizer-tf-runtime\"\n", + "MODEL_DESCRIPTION = \"summarizes scientific texts and pdfs\" #optional\n", + "\n", + "#add your project ID and location\n", + "project=''\n", + "location=''\n", + "\n", + "vertexai.init(project=project, location=location, staging_bucket=BUCKET)\n", + "\n", + "\n", + "model = aiplatform.Model.upload(\n", + " display_name=MODEL_DISPLAY_NAME,\n", + " description=MODEL_DESCRIPTION,\n", + " serving_container_image_uri=TF_PREDICTION_IMAGE_URI_RUNTIME,\n", + " serving_container_args=[\"--allow_precompilation\", \"--allow_compression\", \"--use_tfrt\"],\n", + " artifact_uri=f'gs://{BUCKET}/saved_model_artifacts_tf', #directory where our artifacts are in our bucket\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "0d9772a7-f00d-4633-aa87-3861fa5dec79", + "metadata": {}, + "source": [ + "### Create a Endpoint and Deploy it to our Model" + ] + }, + { + "cell_type": "markdown", + "id": "26122187-da1c-4d26-b1a0-ec1bd403cb19", + "metadata": {}, + "source": [ + "A **endpoint** is how the user of the model can communicate with the model. A single model endpoint responds by returning a single inference from at least one model. It can take 20 min or more to establish a endpoint." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "74a2c3dd-0e34-4049-804b-940c9a440570", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Creating Endpoint\n", + "Create Endpoint backing LRO: projects/144763482491/locations/us-central1/endpoints/5468832298092724224/operations/884634551396073472\n", + "Endpoint created. Resource name: projects/144763482491/locations/us-central1/endpoints/5468832298092724224\n", + "To use this Endpoint in another session:\n", + "endpoint = aiplatform.Endpoint('projects/144763482491/locations/us-central1/endpoints/5468832298092724224')\n", + "Deploying model to Endpoint : projects/144763482491/locations/us-central1/endpoints/5468832298092724224\n", + "Deploy Endpoint model backing LRO: projects/144763482491/locations/us-central1/endpoints/5468832298092724224/operations/5601029261159825408\n", + "Endpoint model deployed. Resource name: projects/144763482491/locations/us-central1/endpoints/5468832298092724224\n" + ] + } + ], + "source": [ + "ENDPOINT_DISPLAY_NAME = \"summarizer-endpoint\" \n", + "endpoint = aiplatform.Endpoint.create(display_name=ENDPOINT_DISPLAY_NAME)\n", + "\n", + "model_endpoint = model.deploy(\n", + " endpoint=endpoint,\n", + " deployed_model_display_name=MODEL_DISPLAY_NAME,\n", + " machine_type=\"n1-standard-8\",\n", + " accelerator_type=\"NVIDIA_TESLA_V100\",\n", + " accelerator_count=1,\n", + " traffic_percentage=100,\n", + " deploy_request_timeout=1200,\n", + " sync=True,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "4dee7811-559f-4bdc-b56e-b932b0831c0f", + "metadata": {}, + "source": [ + "Here we are creating a endpoint and deploying our model to said endpoint. We are deploying our endpoint using 1 GPU which can take 20min to run, feel free to try out other machine types that utilize more GPUs." + ] + }, + { + "cell_type": "markdown", + "id": "1544dbe2-8f06-43e8-9b2c-e9d57332e00e", + "metadata": {}, + "source": [ + "## Delete All Resources" + ] + }, + { + "cell_type": "markdown", + "id": "8b7a6d9a-3d0c-425e-a8f3-cb3160f1ee3b", + "metadata": {}, + "source": [ + "**Warning:** Once you are done don't forget to delete your endpoint, model, buckets, and shutdown or delete your Vertex AI notebook to avoid additional charges!" + ] + }, + { + "cell_type": "markdown", + "id": "24d0fea3-fd4a-4735-b6d5-b910239b5ffa", + "metadata": {}, + "source": [ + "First we will delete our custom job. The command below will list custom jobs allowing you to gather the job id from the field called **'name:projects//locations/us-central1/customJobs/'**" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "9721f52d-040f-4dc7-808e-8d1ffb5efb4a", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Using endpoint [https://us-central1-aiplatform.googleapis.com/]\n", + "---\n", + "createTime: '2023-11-03T17:43:15.502041Z'\n", + "displayName: flan-t5-training-tf3\n", + "endTime: '2023-11-03T18:03:29Z'\n", + "jobSpec:\n", + " workerPoolSpecs:\n", + " - containerSpec:\n", + " args:\n", + " - --model_name_or_path=google/flan-t5-small\n", + " - --train_file=gs://flan-t5-model-resources/train.csv\n", + " - --test_file=gs://flan-t5-model-resources/test.csv\n", + " - --validation_file=gs://flan-t5-model-resources/validation.csv\n", + " - --text_column=article\n", + " - --summary_column=abstract\n", + " - --output_dir=gs://flan-t5-model-resources/\n", + " - '--source_prefix=summarize:'\n", + " imageUri: gcr.io/cit-oconnellka-9999/cloudai-autogenerated/flan-t5-training-tf3:20231103.17.39.12.779660\n", + " diskSpec:\n", + " bootDiskSizeGb: 100\n", + " bootDiskType: pd-ssd\n", + " machineSpec:\n", + " acceleratorCount: 1\n", + " acceleratorType: NVIDIA_TESLA_V100\n", + " machineType: n1-standard-4\n", + " replicaCount: '1'\n", + "name: projects/144763482491/locations/us-central1/customJobs/6207308081613766656\n", + "startTime: '2023-11-03T17:48:23Z'\n", + "state: JOB_STATE_SUCCEEDED\n", + "updateTime: '2023-11-03T18:03:44.992454Z'\n", + "---\n", + "createTime: '2023-11-02T04:29:33.732327Z'\n", + "displayName: flan-t5-training-tf3\n", + "endTime: '2023-11-02T04:34:24Z'\n", + "error:\n", + " code: 3\n", + " message: 'The replica workerpool0-0 exited with a non-zero status of 1. To find\n", + " out more about why your job exited please check the logs: https://console.cloud.google.com/logs/viewer?project=144763482491&resource=ml_job%2Fjob_id%2F2998009561996066816&advancedFilter=resource.type%3D%22ml_job%22%0Aresource.labels.job_id%3D%222998009561996066816%22'\n", + "jobSpec:\n", + " workerPoolSpecs:\n", + " - containerSpec:\n", + " args:\n", + " - --model_name_or_path=google/flan-t5-small\n", + " - --train_file=gs://flan-t5-model-resources/train.csv\n", + " - --test_file=gs://flan-t5-model-resources/test.csv\n", + " - --validation_file=gs://flan-t5-model-resources/validation.csv\n", + " - --text_column=article\n", + " - --summary_column=abstract\n", + " - --output_dir=gs://flan-t5-model-resources\n", + " - '--source_prefix=summarize:'\n", + " imageUri: gcr.io/cit-oconnellka-9999/cloudai-autogenerated/flan-t5-training-tf3:20231102.04.26.29.256583\n", + " diskSpec:\n", + " bootDiskSizeGb: 100\n", + " bootDiskType: pd-ssd\n", + " machineSpec:\n", + " acceleratorCount: 1\n", + " acceleratorType: NVIDIA_TESLA_V100\n", + " machineType: n1-standard-4\n", + " replicaCount: '1'\n", + "name: projects/144763482491/locations/us-central1/customJobs/2998009561996066816\n", + "startTime: '2023-11-02T04:33:54Z'\n", + "state: JOB_STATE_FAILED\n", + "updateTime: '2023-11-02T04:34:28.106045Z'\n", + "---\n", + "createTime: '2023-10-30T11:24:17.577560Z'\n", + "displayName: flan-t5-training-tf\n", + "endTime: '2023-10-30T11:44:47Z'\n", + "jobSpec:\n", + " workerPoolSpecs:\n", + " - containerSpec:\n", + " args:\n", + " - --job_dir=gs://flan-t5-model-resources\n", + " imageUri: gcr.io/cit-oconnellka-9999/cloudai-autogenerated/flan-t5-training-tf:20231030.11.21.47.379363\n", + " diskSpec:\n", + " bootDiskSizeGb: 100\n", + " bootDiskType: pd-ssd\n", + " machineSpec:\n", + " acceleratorCount: 1\n", + " acceleratorType: NVIDIA_TESLA_V100\n", + " machineType: n1-standard-4\n", + " replicaCount: '1'\n", + "name: projects/144763482491/locations/us-central1/customJobs/612998417047617536\n", + "startTime: '2023-10-30T11:29:12Z'\n", + "state: JOB_STATE_SUCCEEDED\n", + "updateTime: '2023-10-30T11:45:16.382233Z'\n", + "---\n", + "createTime: '2023-10-30T10:53:26.358002Z'\n", + "displayName: flan-t5-training-tf\n", + "endTime: '2023-10-30T11:12:59Z'\n", + "error:\n", + " code: 3\n", + " message: 'The replica workerpool0-0 exited with a non-zero status of 1. To find\n", + " out more about why your job exited please check the logs: https://console.cloud.google.com/logs/viewer?project=144763482491&resource=ml_job%2Fjob_id%2F6864276174814576640&advancedFilter=resource.type%3D%22ml_job%22%0Aresource.labels.job_id%3D%226864276174814576640%22'\n", + "jobSpec:\n", + " workerPoolSpecs:\n", + " - containerSpec:\n", + " args:\n", + " - --job_dir=gs://flan-t5-model-resources\n", + " imageUri: gcr.io/cit-oconnellka-9999/cloudai-autogenerated/flan-t5-training-tf:20231030.10.50.08.545796\n", + " diskSpec:\n", + " bootDiskSizeGb: 100\n", + " bootDiskType: pd-ssd\n", + " machineSpec:\n", + " acceleratorCount: 1\n", + " acceleratorType: NVIDIA_TESLA_V100\n", + " machineType: n1-standard-4\n", + " replicaCount: '1'\n", + "name: projects/144763482491/locations/us-central1/customJobs/6864276174814576640\n", + "startTime: '2023-10-30T10:57:55Z'\n", + "state: JOB_STATE_FAILED\n", + "updateTime: '2023-10-30T11:13:29.896168Z'\n", + "---\n", + "createTime: '2023-10-26T21:28:18.991136Z'\n", + "displayName: flan-t5-training\n", + "endTime: '2023-10-26T21:53:59Z'\n", + "jobSpec:\n", + " workerPoolSpecs:\n", + " - containerSpec:\n", + " args:\n", + " - --per_device_train_batch_size=2\n", + " - --per_device_eval_batch_size=4\n", + " - --model_name_or_path=google/flan-t5-small\n", + " - --train_file=gs://flan-t5-model-resources/datasets/train.csv\n", + " - --test_file=gs://flan-t5-model-resources/datasets/test.csv\n", + " - --text_column=article\n", + " - --summary_column=abstract\n", + " - --do_train=True\n", + " - --do_eval=False\n", + " - --do_predict=True\n", + " - --predict_with_generate=True\n", + " - --output_dir=gs://flan-t5-model-resources/model_output\n", + " - --num_train_epochs=3\n", + " - --learning_rate=5e-5\n", + " - --seed=7\n", + " - --fp16=True\n", + " imageUri: gcr.io/cit-oconnellka-9999/cloudai-autogenerated/flan-t5-training:20231026.21.27.25.218708\n", + " diskSpec:\n", + " bootDiskSizeGb: 100\n", + " bootDiskType: pd-ssd\n", + " machineSpec:\n", + " acceleratorCount: 1\n", + " acceleratorType: NVIDIA_TESLA_V100\n", + " machineType: n1-standard-4\n", + " replicaCount: '1'\n", + "name: projects/144763482491/locations/us-central1/customJobs/8666538460460351488\n", + "startTime: '2023-10-26T21:33:52Z'\n", + "state: JOB_STATE_SUCCEEDED\n", + "updateTime: '2023-10-26T21:54:18.730721Z'\n" + ] + } + ], + "source": [ + "!gcloud ai custom-jobs list --project=$project --region=$location" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "f6e10933-3d84-41fd-8785-fa801b97bfb0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Long running operation: projects/144763482491/locations/us-central1/operations/3654348322228928512\n", + "delete_custom_job_response: \n" + ] + } + ], + "source": [ + "from google.cloud import aiplatform\n", + "custom_job_id=''\n", + "\n", + "def delete_custom_job_sample(custom_job_id: str,\n", + " project: str = project,\n", + " location: str = location,\n", + " api_endpoint: str = f'{location}-aiplatform.googleapis.com',\n", + " timeout: int = 300,\n", + "):\n", + " # The AI Platform services require regional API endpoints.\n", + " client_options = {\"api_endpoint\": api_endpoint}\n", + " # Initialize client that will be used to create and send requests.\n", + " # This client only needs to be created once, and can be reused for multiple requests.\n", + " client = aiplatform.gapic.JobServiceClient(client_options=client_options)\n", + " name = client.custom_job_path(\n", + " project=project, location=location, custom_job=custom_job_id\n", + " )\n", + " response = client.delete_custom_job(name=name)\n", + " print(\"Long running operation:\", response.operation.name)\n", + " delete_custom_job_response = response.result(timeout=timeout)\n", + " print(\"delete_custom_job_response:\", delete_custom_job_response)\n", + " \n", + "delete_custom_job_sample(custom_job_id)" + ] + }, + { + "cell_type": "markdown", + "id": "7a02ba4b-1c8f-4fcc-93b9-3e2a6121b59b", + "metadata": {}, + "source": [ + "Now we will undeploy our model, delete endpoints, and delete finally our model!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dfc2276e-8ab2-4c80-9721-26153ea80d63", + "metadata": {}, + "outputs": [], + "source": [ + "model_endpoint.undeploy_all()\n", + "model_endpoint.delete()\n", + "model.delete()" + ] + }, + { + "cell_type": "markdown", + "id": "8fc98dd1-b4e5-4ab2-a6ce-e46b5a23ab5d", + "metadata": {}, + "source": [ + "Delete custom container stored in Custom Registry or Artifacr Registry. List the images to gather the tag id." + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "588af684-4c7e-43d5-a1f5-5510157aa40f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Listed 0 items.\n", + "DIGEST TAGS TIMESTAMP\n", + "1240e61185c9 20231103.17.39.12.779660 2023-11-03T17:42:05\n", + "ca99b71c4661 20231103.16.13.42.102563 2023-11-03T16:21:43\n" + ] + } + ], + "source": [ + "#list the containers\n", + "!gcloud container images list-tags gcr.io/$project/cloudai-autogenerated/$display_name" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "635cc519-230d-48a0-b9b7-c350c2d62ac4", + "metadata": {}, + "outputs": [], + "source": [ + "#Save the tag ID\n", + "tag_id=''" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "946fa12b-ad77-4d19-a556-c926309a14c4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1;33mWARNING:\u001b[0m Successfully resolved tag to sha256, but it is recommended to use sha256 directly.\n", + "Digests:\n", + "- gcr.io/cit-oconnellka-9999/cloudai-autogenerated/flan-t5-training-tf3@sha256:ca99b71c466168f467152e04791710a9e269e767985b22a6cd1702e4fac2f691\n", + " Associated tags:\n", + " - 20231103.16.13.42.102563\n", + "Tags:\n", + "- gcr.io/cit-oconnellka-9999/cloudai-autogenerated/flan-t5-training-tf3:20231103.16.13.42.102563\n", + "Deleted [gcr.io/cit-oconnellka-9999/cloudai-autogenerated/flan-t5-training-tf3:20231103.16.13.42.102563].\n", + "Deleted [gcr.io/cit-oconnellka-9999/cloudai-autogenerated/flan-t5-training-tf3@sha256:ca99b71c466168f467152e04791710a9e269e767985b22a6cd1702e4fac2f691].\n" + ] + } + ], + "source": [ + "#delete \n", + "!gcloud container images delete gcr.io/$project/cloudai-autogenerated/$display_name:$tag_id --force-delete-tags --quiet" + ] + }, + { + "cell_type": "markdown", + "id": "fd4a6cfd-9567-4da3-8d1b-6a4207442680", + "metadata": {}, + "source": [ + "And finally delete our bucket" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "85824daa-66a5-4303-8b17-2565863a2844", + "metadata": {}, + "outputs": [], + "source": [ + "!gcloud storage rm --recursive gs://$BUCKET/" + ] + } + ], + "metadata": { + "environment": { + "kernel": "python3", + "name": "tf2-gpu.2-12.m112", + "type": "gcloud", + "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-12:m112" + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/notebooks/GenAI/GCP_Pubmed_chatbot.ipynb b/tutorials/notebooks/GenAI/GCP_Pubmed_chatbot.ipynb new file mode 100644 index 0000000..9798d2c --- /dev/null +++ b/tutorials/notebooks/GenAI/GCP_Pubmed_chatbot.ipynb @@ -0,0 +1,1151 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "2edc6187-82ae-44e2-852f-2ad2712c93aa", + "metadata": {}, + "source": [ + "# Creating a PubMed Chatbot on GCP" + ] + }, + { + "cell_type": "markdown", + "id": "3ecea2ad-7c65-4367-87e1-b021167c3a1d", + "metadata": {}, + "source": [ + "For this tutorial we are creating a PubMed chatbot that will answer questions by gathering information from documents we have provided via an index. The model we will be using today is a pretrained 'text-bison@001' model from GCP.\n", + "\n", + "This tutorial will go over the following topics:\n", + "- Introduce langchain\n", + "- Explain the differences between zero-shot, one-shot, and few-shot prompting\n", + "- Practice using different document retrievers" + ] + }, + { + "cell_type": "markdown", + "id": "4d01e74b-b5b4-4be9-b16e-ec55419318ef", + "metadata": {}, + "source": [ + "### Optional: Deploy the Model" + ] + }, + { + "cell_type": "markdown", + "id": "9dbd13e7-afc9-416b-94dc-418a93e14587", + "metadata": {}, + "source": [ + "In this tutorial we will be using Google PaLM2 LLM **test-bison@001** which doesn't need to be deployed but if you would like to use another model you choose one from the **Model Garden** using the console which will allow you to add a model to your model registry, create an endpoint (or use an existing one), and deploy the model all in one step." + ] + }, + { + "cell_type": "markdown", + "id": "4f3e3ab1-5f7e-4028-a66f-9619926a2afd", + "metadata": {}, + "source": [ + "## PubMed API vs RAG with Vertex AI Vector Search" + ] + }, + { + "cell_type": "markdown", + "id": "5a820eea-1538-4f40-86c4-eb14fe09e127", + "metadata": {}, + "source": [ + "Our chatbot will rely on documents to answer our questions to do so we are supplying it a **vector index**. A vector index or index is a data structure that enables fast and accurate search and retrieval of vector embeddings from a large dataset of objects. We will be working with two options for our index: PubMed API vs RAG Vertex AI Vector Search method." + ] + }, + { + "cell_type": "markdown", + "id": "7314b115-9433-460d-b275-78aa50f0a858", + "metadata": {}, + "source": [ + "**What is the difference?**\n", + "\n", + "The **PubMed API** is provided free by langchain to connect your model to more than **35 million citations** for biomedical literature from MEDLINE, life science journals, and online books. The langchain package for PubMed is already a retriever meaning that just simply using this tool will our chatbot beable to retrieve documents to refer to. \n", + "\n", + "**Vertex AI Vector Search** (formally known as Matching Engine) is a vector store from GCP that allows the user more **security and control** on which documents you wish to supply to your model. Vector Search, formerly known as Vertex AI Matching Engine, is a vector store or database that stores the **embeddings** of your documents and the metadata. Because this is not a retriever we have to make it so for our model to send back an output that also tells us which documents it is referencing, this is where RAG comes in. **RAG** stands for **Retrieval-augmented generation** it is a method or technique that **indexes documents** by first loading them in, splitting them into chucks (making it easier for our model to search for relevant splits), embedding the splits, then storing them in a vector store. The next steps in RAG are based on the question you ask your chatbot. If we were to ask it \"What is a cell?\" the vector store will be searched by a retriever to find relevant splits that have to do with our question, thus **retrieving relevant documents**. And finally our chatbot will **generate an answer** that makes sense of what a cell is, as part of the answer it will also point out which source documents it used to create the answer.\n", + "\n", + "We will be exploring both methods!" + ] + }, + { + "cell_type": "markdown", + "id": "bcf1690d-e93d-4cd3-89c6-8d06b5a071a8", + "metadata": {}, + "source": [ + "## Setting up Vertex AI Vector Search" + ] + }, + { + "cell_type": "markdown", + "id": "c6330ddf-7972-4451-9fcb-98cf83f5d118", + "metadata": {}, + "source": [ + "If you choose to use the RAG method with Vertex AI RAG Vector Search to supply documents to your model follow the instructions below:\n", + "\n", + "Set your project id, location, and bucket variables." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fb694dc4-9e76-4091-9ddf-cd4eca816851", + "metadata": {}, + "outputs": [], + "source": [ + "project_id=''\n", + "location=' (e.g.us-east4)'\n", + "bucket = ''" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a7a349bb-2853-4028-972d-af7f3e857867", + "metadata": {}, + "outputs": [], + "source": [ + "project_id='cit-oconnellka-9999'\n", + "location='us-central1'\n", + "bucket = 'pubmed-chatbot-resources'" + ] + }, + { + "cell_type": "markdown", + "id": "02053f4d-fad7-44ab-a7c3-cfa1c218240f", + "metadata": {}, + "source": [ + "### Gathering our Docs For our Vector Store" + ] + }, + { + "cell_type": "markdown", + "id": "1d1c9de7-4a06-4f85-b9ff-c8c9e51f8c70", + "metadata": {}, + "source": [ + "AWS marketplace has PubMed database named **PubMed Central® (PMC)** that contains free full-text archive of biomedical and life sciences journal article at the U.S. National Institutes of Health's National Library of Medicine (NIH/NLM). We will be subsetting this database to add documents to our Vertex AI Vector Search Index. Ensure that you have the correct permissions to allow your environment to connect to buckets and Vertex AI.\n", + "\n", + "The first step will be to create a bucket that we will later use as our data source for our index." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "99d49432-cf03-4f19-aa82-ef7f8bad5bde", + "metadata": {}, + "outputs": [], + "source": [ + "#make bucket\n", + "!gsutil mb -l {location} gs://{bucket}" + ] + }, + { + "cell_type": "markdown", + "id": "b6ad30ba-cee8-47f9-bc1e-ece8961ac66a", + "metadata": {}, + "source": [ + "We will then download the metadata file from the PMC index directory, this will list all of the articles within the PMC bucket and their paths. We will use this to subset the database into our own bucket. Here we are using curl to connect to the public AWS s3 bucket where the metadata and documents are originally stored." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7b395e34-062d-4f77-afee-3601d471954a", + "metadata": {}, + "outputs": [], + "source": [ + "#download the metadata file\n", + "!curl -O http://pmc-oa-opendata.s3.amazonaws.com/oa_comm/txt/metadata/csv/oa_comm.filelist.csv" + ] + }, + { + "cell_type": "markdown", + "id": "93a8595a-767f-4cad-9273-62d8e2cf60d1", + "metadata": {}, + "source": [ + "We only want the metadata of the first 100 files." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c26b0f29-2b07-43a6-800d-4aa5e957fe52", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "#import the file as a dataframe\n", + "import pandas as pd\n", + "\n", + "df = pd.read_csv('oa_comm.filelist.csv')\n", + "#first 100 files\n", + "first_100=df[0:100]" + ] + }, + { + "cell_type": "markdown", + "id": "abd1ae93-450e-4c79-83cc-ea46a1b507c1", + "metadata": {}, + "source": [ + "Lets look at our metadata! We can see that the bucket path to the files are under the **Key** column this is what we will use to loop through the PMC bucket and copy the first 100 files to our bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ff77b2aa-ed1b-4d27-8163-fdaa7a304582", + "metadata": {}, + "outputs": [], + "source": [ + "first_100" + ] + }, + { + "cell_type": "markdown", + "id": "84e5f36a-239c-4c15-80ab-f896d45849d3", + "metadata": {}, + "source": [ + "The following commands will gather the location of each document with in AWS s3 bucket, output the text from the docs as bytes and save the bytes to our bucket in the form of a text file in a directory named \"docs\". This will all be done using curl." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7d63a7e2-dbf1-49ec-bc84-b8c2c8bde62d", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from io import BytesIO\n", + "#gather path to files in bucket\n", + "for i in first_100['Key']:\n", + " doc_name=i.split(r'/')[-1]\n", + " os.system(f'curl http://pmc-oa-opendata.s3.amazonaws.com/{i} | curl -T - -v -H \"Authorization: Bearer `gcloud auth print-access-token`\" \"https://storage.googleapis.com/{bucket}/docs/{doc_name} \"')" + ] + }, + { + "cell_type": "markdown", + "id": "c1b396c8-baa9-44d6-948c-2326dc514839", + "metadata": {}, + "source": [ + "### Creating an Index" + ] + }, + { + "cell_type": "markdown", + "id": "bb6fa941-bf59-4cae-9aa8-2f2741f3a1b1", + "metadata": {}, + "source": [ + "To create our vector store index, we will first start by creating a dummy embeddings file. An index holds a set of records so our dummy data will be the first record and then later we will add our PubMed docs to the same index. Inorder for Vector Search to find our dummy embeddings file it too must be in our bucket and we will add it to the subdirectory 'init_index'." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6cf5092c-23f3-4f28-9308-f34b8d90c62b", + "metadata": {}, + "outputs": [], + "source": [ + "import uuid\n", + "import numpy as np\n", + "import json\n", + "init_embedding = {\"id\": str(uuid.uuid4()), \"embedding\": list(np.zeros(768))}\n", + "\n", + "# dump embedding to a local file\n", + "with open(\"embeddings_0.json\", \"w\") as f:\n", + " json.dump(init_embedding, f)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8e8a4c42-dc17-48a3-a0bb-0cbea527ee7f", + "metadata": {}, + "outputs": [], + "source": [ + "#move inital embeddings file to bucket\n", + "!gsutil cp embeddings_0.json gs://{bucket}/init_index/" + ] + }, + { + "cell_type": "markdown", + "id": "f4d1a3cd-4f89-4271-b025-71af2bf25095", + "metadata": {}, + "source": [ + "Now we can make our index, this can take up to 30min to 1hr. \n", + "\n", + "Please note that the dimensions depend on what text embedding model you are using for this tutorial we are using **Vertex AI's embedding model** which uses 768 dimensions. If you chose to change your model choose a embedding model that is compatible with it or you can use Tensorflow's Universal Sentence Encoder. For more information see [here](https://python.langchain.com/docs/integrations/vectorstores/matchingengine#using-tensorflow-universal-sentence-encoder-as-an-embedder)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "39aa7bba-3d15-4a3f-86c2-59d2c92a95ef", + "metadata": {}, + "outputs": [], + "source": [ + "from google.cloud import aiplatform\n", + "# create Index\n", + "index = aiplatform.MatchingEngineIndex.create_tree_ah_index(\n", + " display_name = f\"pubmed_vector_index\",\n", + " contents_delta_uri = f\"gs://{bucket}/init_index\",\n", + " dimensions = 768,\n", + " approximate_neighbors_count = 150,\n", + " distance_measure_type=\"DOT_PRODUCT_DISTANCE\",\n", + " location=location\n", + " \n", + ")\n", + "\n", + "#save index id\n", + "index_id=index.name" + ] + }, + { + "cell_type": "markdown", + "id": "ce65b0cc-cff3-47d6-af8c-7c39b2418ecb", + "metadata": {}, + "source": [ + "### Creating a Endpoint and Deploying our Index" + ] + }, + { + "cell_type": "markdown", + "id": "9b3aa4a2-1145-475a-bd04-33bf69551751", + "metadata": {}, + "source": [ + "We will create a public endpoint for our vector store, you can also create a private one by setting up a VPC and specifying the VPC id for the params 'network'. Documentation for creating a VPC can be found [here](https://python.langchain.com/docs/integrations/vectorstores/matchingengine#imports-constants-and-configs)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "55596202-13b9-4e35-8099-0602a2b13e72", + "metadata": {}, + "outputs": [], + "source": [ + "#Create the endpoint\n", + "index_endpoint = aiplatform.MatchingEngineIndexEndpoint.create(\n", + " display_name = \"pubmed_vector_endpoint\",\n", + " public_endpoint_enabled = True,\n", + " location = location\n", + ")\n", + "\n", + "#save endpoint id\n", + "endpoint_id = endpoint.name" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "51412f2f-f32b-44a9-93bc-3e2f6185cada", + "metadata": {}, + "outputs": [], + "source": [ + "#deploy our index to our endpoint\n", + "deployed_index_id=\"deployed_pubmed_vector_index\"\n", + "index_endpoint = index_endpoint.deploy_index(\n", + " index=index, deployed_index_id=deployed_index_id\n", + ")\n", + "index_endpoint.deployed_indexes" + ] + }, + { + "cell_type": "markdown", + "id": "613cef7d-d0aa-42a8-a46e-7fd1f5c48c3b", + "metadata": {}, + "source": [ + "### Adding Metadata to Our Data" + ] + }, + { + "cell_type": "markdown", + "id": "2fa34e7b-99c7-4a2e-b73b-146636a98285", + "metadata": {}, + "source": [ + "After we have our documents stored in our bucket we can start to load our files back. This step is necessary though redundant because we will need to embed our docs for our vector store and we can attach metadata for each document. The first step of adding our metadata to the docs will be to remove the 'Key' column because this is no longer the location of our documents. Next, we'll convert the rest of the columns into a dictionary form." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b9016f15-db02-4073-b4c7-288d919bbb55", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "#Remove the Key column to be replaced later\n", + "first_100.pop('Key')\n", + "#convert the metadata to dict\n", + "first_100_dict = first_100.to_dict('records')" + ] + }, + { + "cell_type": "markdown", + "id": "eb80dce6-dc5b-4a73-8591-572be35c092a", + "metadata": {}, + "source": [ + "Lets look at our metadata now!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "69ce004e-ab8d-4b9c-91d8-9320e1679fcd", + "metadata": {}, + "outputs": [], + "source": [ + "first_100_dict" + ] + }, + { + "cell_type": "markdown", + "id": "2a607a48-31b8-4081-a347-bb1528f8e725", + "metadata": {}, + "source": [ + "Now we can load in our documents, add in the location of our docs in our bucket and the document name to our metadata, and finally attach that metadata to our documents. At the end we should have 100 documents before splitting the data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "47170e83-3e9e-48e6-ab0f-cabdd39507e1", + "metadata": {}, + "outputs": [], + "source": [ + "#add metadata\n", + "from langchain.document_loaders import GCSDirectoryLoader\n", + "print(f\"Processing documents from {bucket}\")\n", + "loader = GCSDirectoryLoader(\n", + " project_name=project_id, bucket=bucket, prefix='docs'\n", + ")\n", + "documents = loader.load()\n", + "\n", + "# loop through docs to add metadata to each one\n", + "for i in range(len(documents)):\n", + " doc_md = documents[i].metadata\n", + " document_name = doc_md[\"source\"].split(\"/\")[-1]\n", + " source = f\"{bucket}/docs/{document_name}\"\n", + " # Add document name and source to the metadata\n", + " documents[i].metadata = {\"source\": source, \"document_name\": document_name}\n", + " documents[i].metadata.update(first_100_dict[i])# attached other metadata to doc\n", + "print(f\"# of documents loaded (pre-chunking) = {len(documents)}\")" + ] + }, + { + "cell_type": "markdown", + "id": "d2cb96ea-dd0c-47b7-9556-05e25c3efb1d", + "metadata": {}, + "source": [ + "Lets take a look at our metadata!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8673a445-7c2e-4650-91fa-4b0b38196e2c", + "metadata": {}, + "outputs": [], + "source": [ + "documents[0].metadata" + ] + }, + { + "cell_type": "markdown", + "id": "613b65c0-fa38-456f-acb3-d406803ef204", + "metadata": {}, + "source": [ + "### Splitting our Data" + ] + }, + { + "cell_type": "markdown", + "id": "6812ecaf-979f-4537-b420-071022a7b917", + "metadata": {}, + "source": [ + "Splitting our data into chucks will help our vector store parse through our data faster and efficiently. We'll then add the chuck number to our metadata." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6e6503cf-02e5-4352-a6b1-13ef4e01c019", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.text_splitter import RecursiveCharacterTextSplitter\n", + "# split the documents into chunks\n", + "text_splitter = RecursiveCharacterTextSplitter(\n", + " chunk_size=1000,\n", + " chunk_overlap=50,\n", + " separators=[\"\\n\\n\", \"\\n\", \".\", \"!\", \"?\", \",\", \" \", \"\"],\n", + ")\n", + "doc_splits = text_splitter.split_documents(documents)\n", + "\n", + "# Add chunk number to metadata\n", + "for idx, split in enumerate(doc_splits):\n", + " split.metadata[\"chunk\"] = idx\n", + "\n", + "print(f\"# of documents = {len(doc_splits)}\")" + ] + }, + { + "cell_type": "markdown", + "id": "e1fb202a-6122-4083-81e4-ddcb33499e64", + "metadata": {}, + "source": [ + "After splitting our data we now have 7620 documents. And looking at our metadata we can see that the chunk number is the last entry." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f1036b8e-6c7f-43be-83b7-5b9e61628003", + "metadata": {}, + "outputs": [], + "source": [ + "doc_splits[0].metadata" + ] + }, + { + "cell_type": "markdown", + "id": "055d5b85-950e-4a44-b3fa-a2dcec7df036", + "metadata": {}, + "source": [ + "### Embedding our Data" + ] + }, + { + "cell_type": "markdown", + "id": "9a68b14e-0cf5-4973-90c1-0eee0c8bc8c9", + "metadata": {}, + "source": [ + "Now we can embed our text into **numerical vectors** that will help our model find similar objects like documents that hold similar texts or find similar photos based on the numbers assigned to the object. Depending on the model you choose you have to find an embedder that is compatible to our model. Since we are using a PaLM2 model (text-bison) we can use the embedding model from Vertex AI that defaults to using **'textembedding-gecko'**." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "50a4a98c-a332-469f-9a24-ce5abff23b15", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.vectorstores import MatchingEngine\n", + "from langchain.embeddings import VertexAIEmbeddings\n", + "embeddings = VertexAIEmbeddings()\n", + "\n", + "# initialize vector store\n", + "vector_store = MatchingEngine.from_components(\n", + " project_id=project_id,\n", + " region=location,\n", + " gcs_bucket_name=bucket,\n", + " embedding=embeddings,\n", + " index_id=index_id,\n", + " endpoint_id=endpoint_id,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "4e3bfb5b-a3a6-4156-bca3-394774a94565", + "metadata": {}, + "source": [ + "For our split documents to be read by our embedding model we need to make tuple called **Document** that contains **page content** and **metadata**. The code below loops through the split docs and assigns them to the label page_content and the same is done for all parts of our metadata under the label metadata." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9cda4699-5c46-49bb-97e3-059199254bba", + "metadata": {}, + "outputs": [], + "source": [ + "# Store docs as embeddings in Matching Engine index\n", + "# It may take a while since API is rate limited\n", + "texts = [doc.page_content for doc in doc_splits]\n", + "metadatas = [\n", + " [\n", + " {\"namespace\": \"source\", \"allow_list\": [doc.metadata[\"source\"]]},\n", + " {\"namespace\": \"document_name\", \"allow_list\": [doc.metadata[\"document_name\"]]},\n", + " {\"namespace\": \"ETag\", \"allow_list\": [doc.metadata[\"ETag\"]]},\n", + " {\"namespace\": \"Article Citation\", \"allow_list\": [doc.metadata[\"Article Citation\"]]},\n", + " {\"namespace\": \"AccessionID\", \"allow_list\": [doc.metadata[\"AccessionID\"]]},\n", + " {\"namespace\": \"Last Updated UTC (YYYY-MM-DD HH:MM:SS)\", \"allow_list\": [doc.metadata[\"Last Updated UTC (YYYY-MM-DD HH:MM:SS)\"]]},\n", + " {\"namespace\": \"PMID\", \"allow_list\": [str(doc.metadata[\"PMID\"])]},\n", + " {\"namespace\": \"License\", \"allow_list\": [doc.metadata[\"License\"]]},\n", + " {\"namespace\": \"Retracted\", \"allow_list\": [doc.metadata[\"Retracted\"]]},\n", + " {\"namespace\": \"chunk\", \"allow_list\": [str(doc.metadata[\"chunk\"])]}\n", + " \n", + " ]\n", + " for doc in doc_splits\n", + "]" + ] + }, + { + "cell_type": "markdown", + "id": "216f6ef6-b488-45d3-ac4c-2aca0d6eab56", + "metadata": {}, + "source": [ + "lets look at our Document tuple!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6c1af269-fdbb-4db5-9c1b-41e21d304b9d", + "metadata": {}, + "outputs": [], + "source": [ + "doc_splits[0]" + ] + }, + { + "cell_type": "markdown", + "id": "2aeb0bba-8ccd-4828-a7a2-6f34b03a03b9", + "metadata": {}, + "source": [ + "Now we can add our split documents and their metadata to our vector store. This is the longest step of the tutorial and can take up 1hr to complete. As you wait you can read up on Creating a Inference Script section of this tutorial." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b3c2f21b-06ab-470e-8807-638548d50f77", + "metadata": {}, + "outputs": [], + "source": [ + "doc_ids = vector_store.add_texts(texts=texts, metadatas=metadatas)" + ] + }, + { + "cell_type": "markdown", + "id": "03b90f92-f223-42e0-9e5b-accd3fdfbeea", + "metadata": {}, + "source": [ + "Test whether search from vector store is working" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b6cd9aab-7f08-4a69-b7e4-9cd1d8f9110f", + "metadata": {}, + "outputs": [], + "source": [ + "results=vector_store.similarity_search_with_score(\"brain\")" + ] + }, + { + "cell_type": "markdown", + "id": "07b3bc6b-8c43-476f-a662-abda830dc2da", + "metadata": { + "tags": [] + }, + "source": [ + "### Creating a Inference Script " + ] + }, + { + "cell_type": "markdown", + "id": "3ba2291e-109e-4120-ad10-5dbfd341a07b", + "metadata": {}, + "source": [ + "Inorder for us to fluidly send input and receive outputs from our chatbot we need to create a **inference script** that will format inputs in a way that the chatbot can understand and format outputs in a way we can understand. We will also be supplying instructions to the chatbot through the script.\n", + "\n", + "Our script will utilize **langchain** tools and packages to enable our model to:\n", + "- **Connect to sources of context** (e.g. providing our model with tasks and examples)\n", + "- **Rely on reason** (e.g. instruct our model how to answer based on provided context)\n", + "\n", + "**Warning**: The following tools must be installed via your terminal `pip install \"langchain\" \"xmltodict\"` and the over all inference script must be run on the terminal via the command `python YOUR_SCRIPT.py`." + ] + }, + { + "cell_type": "markdown", + "id": "ad374085-c4b1-4083-85a5-90cba35846d6", + "metadata": {}, + "source": [ + "The first part of our script will be to list all the tools that are required. \n", + "- **PubMedRetriever:** Utilizes the langchain retriever tool to specifically retrieve PubMed documents from the PubMed API.\n", + "- **MatchingEngine:** Connects to Vertex AI Vector Search to be used as a langchain retriever tool to specifically retrieve embedded documents stored in your bucket. \n", + "- **ConversationalRetrievalChain:** Allows the user to construct a conversation with the model and retrieves the outputs while sending inputs to the model.\n", + "- **PromptTemplate:** Allows the user to prompt the model to provide instructions, best method for zero and few shot prompting\n", + "- **VertexAIEmbeddings:** Text embedding model used before to convert text to numerical vectors.\n", + "- **VertexAI**: Package used to import Google PaLM2 LLMs models (e.g. text-bison@001, code-bison). \n" + ] + }, + { + "cell_type": "markdown", + "id": "6f0ad48d-c6c8-421a-a48b-88e979d15b57", + "metadata": { + "tags": [] + }, + "source": [ + "```python\n", + "from langchain.retrievers import PubMedRetriever\n", + "from langchain.vectorstores import MatchingEngine\n", + "#from langchain.llms import VertexAIModelGarden #uncomment if utilizing models from Model Garden\n", + "from langchain.chains import ConversationalRetrievalChain\n", + "from langchain.prompts import PromptTemplate\n", + "from langchain.embeddings import VertexAIEmbeddings\n", + "from langchain.llms import VertexAI\n", + "import sys\n", + "import json\n", + "import os\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "900f4c31-71cd-4f39-8bfc-de098bdbaafc", + "metadata": {}, + "source": [ + "Second will build a class that will hold the functions we need to send inputs and retrieve outputs from our model. For the beginning of our class we will establish some colors to our text conversation with our chatbot which we will utilize later." + ] + }, + { + "cell_type": "markdown", + "id": "decbb901-f811-4b8e-a956-4c8c7f914ae2", + "metadata": { + "tags": [] + }, + "source": [ + "```python\n", + "class bcolors:\n", + " HEADER = '\\033[95m'\n", + " OKBLUE = '\\033[94m'\n", + " OKCYAN = '\\033[96m'\n", + " OKGREEN = '\\033[92m'\n", + " WARNING = '\\033[93m'\n", + " FAIL = '\\033[91m'\n", + " ENDC = '\\033[0m'\n", + " BOLD = '\\033[1m'\n", + " UNDERLINE = '\\033[4m'\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "ba36d057-5189-4075-a243-18996c6fc932", + "metadata": {}, + "source": [ + "If you are using Vector Search instead of the PubMed API we need to create a function that will gather the necessary information to connect to our model, which will be the:\n", + "- Project ID\n", + "- Location of bucket and vector store (they should be in the same location)\n", + "- Bucket name\n", + "- Vector Store Index ID\n", + "- Vector Store Endpoint ID" + ] + }, + { + "cell_type": "markdown", + "id": "3f7a244a-7e71-40d3-ae78-8e166dd3c7ee", + "metadata": {}, + "source": [ + "```python\n", + "def build_chain():\n", + " PROJECT_ID = os.environ[\"PROJECT_ID\"]\n", + " LOCATION_ID = os.environ[\"LOCATION_ID\"]\n", + " #ENDPOINT_ID = os.environ[\"ENDPOINT_ID\"] #uncomment if utilizing model from Model Garden\n", + " BUCKET = os.environ[\"BUCKET\"]\n", + " VC_INDEX_ID = os.environ[\"VC_INDEX_ID\"]\n", + " VC_ENDPOINT_ID = os.environ[\"VC_ENDPOINT_ID\"]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "dab1012f-ed20-47b9-9162-924e03e836d5", + "metadata": {}, + "source": [ + "Now we can define our Google PaLM2 model being `text-bison@001` and other parameters:\n", + "\n", + "- Max Output Tokens: Limit of tokens outputted by the model.\n", + "- Temperature: Controls randomness, higher values increase diversity meaning a more unique response make the model to think harder. Must be a number from 0 to 1, 0 being less unique.\n", + "- Top_p (nucleus): The cumulative probability cutoff for token selection. Lower values mean sampling from a smaller, more top-weighted nucleus. Must be a number from 0 to 1.\n", + "- Top_k: Sample from the k most likely next tokens at each step. Lower k focuses on higher probability tokens. This means the model choses the most probable words. Lower values eliminate fewer coherent words.\n" + ] + }, + { + "cell_type": "markdown", + "id": "8cadb1af-2c46-4ab1-92f9-6e0861f83324", + "metadata": { + "tags": [] + }, + "source": [ + "```python\n", + "llm = VertexAI(\n", + " model_name=\"text-bison@001\",\n", + " max_output_tokens=1024,\n", + " temperature=0.2,\n", + " top_p=0.8,\n", + " top_k=40,\n", + " verbose=True,\n", + " \n", + " \n", + "#if using a model from the Model Garden uncomment\n", + "#llm = VertexAIModelGarden(project=PROJECT_ID, endpoint_id=ENDPOINT_ID, location=LOCATION_ID)\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "c44b4f91-0c64-459b-a6e9-8a955c0797c7", + "metadata": {}, + "source": [ + "We specify what our retriever both the PubMed and Vector Search retriever are listed, please only add one per script.\n", + "\n", + "If using Vector Search we need to initialize our vector store as we did before when we added our split documents and metadata to it. Then we set the vector store as a **retriever** with the search type being **'similarity'** meaning it will find texts that are similar to each other depending on the question you ask the model. We also set **'k'** to 3 meaning that our retriever will retrieve 3 documents that are similar." + ] + }, + { + "cell_type": "markdown", + "id": "21c61724-23d3-4b49-8c72-cbd208bdb5df", + "metadata": { + "tags": [] + }, + "source": [ + "```python\n", + "retriever= PubMedRetriever()\n", + "\n", + "#only if using Vector Search as a retriever\n", + "\n", + "embeddings = VertexAIEmbeddings() #Make sure embedding model is compatible with model\n", + "\n", + " vector_store = MatchingEngine.from_components(\n", + " project_id=PROJECT_ID,\n", + " region=LOCATION_ID,\n", + " gcs_bucket_name=BUCKET,\n", + " embedding=embeddings,\n", + " index_id=VC_INDEX_ID,\n", + " endpoint_id=VC_ENDPOINT_ID\n", + " )\n", + "retriever = vector_store.as_retriever(\n", + " search_type=\"similarity\",\n", + " search_kwargs={\"k\":3}\n", + " )\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "ec8e464a-0931-444a-aa58-09ee0c4c9884", + "metadata": {}, + "source": [ + "Here we are constructing our **prompt_template**, this is where we can try zero-shot or few-shot prompting. Only add one method per script." + ] + }, + { + "cell_type": "markdown", + "id": "4431051e-0e84-408e-9821-f50a9b88c9c1", + "metadata": {}, + "source": [ + "#### Zero-shot prompting\n", + "\n", + "Zero-shot prompting does not require any additional training more so it gives a pre-trained language model a task or query to generate text (our output). The model relies on its general language understanding and the patterns it has learned during its training to produce relevant output. In our script we have connect our model to a **retriever** to make sure it gathers information from that retriever (this can be the PubMed API or Vector Search). \n", + "\n", + "See below that the task is more like instructions notifying our model they will be asked questions which it will answer based on the info of the scientific documents provided from the index provided (this can be the PubMed API or Vector Search index). All of this information is established as a **prompt template** for our model to receive." + ] + }, + { + "cell_type": "markdown", + "id": "c0316dc5-6274-4a5e-92e4-3d266ed6a4df", + "metadata": { + "tags": [] + }, + "source": [ + "```python\n", + "prompt_template = \"\"\"\n", + " Ignore everything before.\n", + " \n", + " Instruction:\n", + " Instructions:\n", + " I will provide you with research papers on a specific topic in English, and you will create a cumulative summary. \n", + " The summary should be concise and should accurately and objectively communicate the takeaway of the papers related to the topic. \n", + " You should not include any personal opinions or interpretations in your summary, but rather focus on objectively presenting the information from the papers. \n", + " Your summary should be written in your own words and ensure that your summary is clear, concise, and accurately reflects the content of the original papers. First, provide a concise summary then citations at the end.\n", + " \n", + " {question} Answer \"don't know\" if not present in the document. \n", + " {context}\n", + " Solution:\"\"\"\n", + " PROMPT = PromptTemplate(\n", + " template=prompt_template, input_variables=[\"context\", \"question\"],\n", + " )\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "edbe7032-8507-4d07-baab-1b3bf0e92074", + "metadata": {}, + "source": [ + "#### One-shot and Few-shot Prompting" + ] + }, + { + "cell_type": "markdown", + "id": "5614ea04-e1f8-4941-ae16-4359f718f98f", + "metadata": {}, + "source": [ + "One and few shot prompting are similar to one-shot prompting, in addition to giving our model a task just like before we have also supplied an example of how the our model structure our output.\n", + "\n", + "See below that we have implemented one-shot prompting to our script. " + ] + }, + { + "cell_type": "markdown", + "id": "5ffb9669-5b77-4d9b-9f4e-a0d3a18b0fae", + "metadata": {}, + "source": [ + "```python\n", + "prompt_template = \"\"\"\n", + " Instructions:\n", + " I will provide you with research papers on a specific topic in English, and you will create a cumulative summary. \n", + " The summary should be concise and should accurately and objectively communicate the takeaway of the papers related to the topic. \n", + " You should not include any personal opinions or interpretations in your summary, but rather focus on objectively presenting the information from the papers. \n", + " Your summary should be written in your own words and ensure that your summary is clear, concise, and accurately reflects the content of the original papers. First, provide a concise summary then citations at the end. \n", + " Examples:\n", + " Question: What is a cell?\n", + " Answer: '''\n", + " Cell, in biology, the basic membrane-bound unit that contains the fundamental molecules of life and of which all living things are composed. \n", + " Sources: \n", + " Chow, Christopher , Laskey, Ronald A. , Cooper, John A. , Alberts, Bruce M. , Staehelin, L. Andrew , \n", + " Stein, Wilfred D. , Bernfield, Merton R. , Lodish, Harvey F. , Cuffe, Michael and Slack, Jonathan M.W.. \n", + " \"cell\". Encyclopedia Britannica, 26 Sep. 2023, https://www.britannica.com/science/cell-biology. Accessed 9 November 2023.\n", + " '''\n", + " \n", + " {question} Answer \"don't know\" if not present in the document. \n", + " {context}\n", + " \n", + "\n", + " \n", + " Solution:\"\"\"\n", + " PROMPT = PromptTemplate(\n", + " template=prompt_template, input_variables=[\"context\", \"question\"],\n", + " )\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "82c66d53-97b2-46dc-a466-70a3d3bee4a7", + "metadata": {}, + "source": [ + "The following set of commands control the chat history essentially telling the model to expect another question after it finishes answering the previous one. Follow up questions can contain references to past chat history so the **ConversationalRetrievalChain** combines the chat history and the followup question into a standalone question, then looks up relevant documents from the retriever, and finally passes those documents and the question to a question-answering chain to return a response.\n", + "\n", + "All of these pieces such as our conversational chain, prompt, and chat history are passed through a function called **run_chain** so that our model can return is response. We have also set the length of our chat history to one meaning that our model can only refer to the pervious conversation as a reference." + ] + }, + { + "cell_type": "markdown", + "id": "fda4d33b-60f2-4462-a8e6-bbce7f8a7b07", + "metadata": {}, + "source": [ + "```python\n", + "condense_qa_template = \"\"\"\n", + " Chat History:\n", + " {chat_history}\n", + " Here is a new question for you: {question}\n", + " Standalone question:\"\"\"\n", + " standalone_question_prompt = PromptTemplate.from_template(condense_qa_template)\n", + " \n", + " qa = ConversationalRetrievalChain.from_llm(\n", + " llm=llm, \n", + " retriever=retriever, \n", + " condense_question_prompt=standalone_question_prompt, \n", + " return_source_documents=True, \n", + " combine_docs_chain_kwargs={\"prompt\":PROMPT},\n", + " )\n", + " return qa\n", + "\n", + "def run_chain(chain, prompt: str, history=[]):\n", + " print(prompt)\n", + " return chain({\"question\": prompt, \"chat_history\": history})\n", + "\n", + "MAX_HISTORY_LENGTH = 1 #increase to refer to more pervious chats\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "b8f1ef8d-66fe-4f84-933b-af2d730bd114", + "metadata": {}, + "source": [ + "The final part of our script utilizes our class and incorporates colors to add a bit of flare to our conversation with our model. The model when first initialized should greet the user asking **\"Hello! How can I help you?\"** then instructs the user to ask a question or exit the session **\"Ask a question, start a New search: or CTRL-D to exit.\"**. With every question submitted to the model it is labeled as a **new search** we then run the run_chain function to get the models response or answer and add the response to the **chat history**. " + ] + }, + { + "cell_type": "markdown", + "id": "1aa6ef65-ced4-445e-875c-7fee3483b81d", + "metadata": {}, + "source": [ + "```python\n", + "if __name__ == \"__main__\":\n", + " chat_history = []\n", + " qa = build_chain()\n", + " print(bcolors.OKBLUE + \"Hello! How can I help you?\" + bcolors.ENDC)\n", + " print(bcolors.OKCYAN + \"Ask a question, start a New search: or CTRL-D to exit.\" + bcolors.ENDC)\n", + " print(\">\", end=\" \", flush=True)\n", + " for query in sys.stdin:\n", + " if (query.strip().lower().startswith(\"new search:\")):\n", + " query = query.strip().lower().replace(\"new search:\",\"\")\n", + " chat_history = []\n", + " elif (len(chat_history) == MAX_HISTORY_LENGTH):\n", + " chat_history.pop(0)\n", + " result = run_chain(qa, query, chat_history)\n", + " chat_history.append((query, result[\"answer\"]))\n", + " print(bcolors.OKGREEN + result['answer'] + bcolors.ENDC) \n", + " if 'source_documents' in result: \n", + " print(bcolors.OKGREEN + 'Sources:')\n", + " for idx, ref in enumerate(result[\"source_documents\"]):\n", + " print(ref.page_content) #Use this for Vector store\n", + " #print(\"PubMed UID: \"+ref.metadata[\"uid\"])#Use this for PubMed retriever\n", + " print(bcolors.ENDC)\n", + " print(bcolors.OKCYAN + \"Ask a question, start a New search: or CTRL-D to exit.\" + bcolors.ENDC)\n", + " print(\">\", end=\" \", flush=True)\n", + " print(bcolors.OKBLUE + \"Bye\" + bcolors.ENDC)\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "1abcbd48-bb84-4310-b8eb-ad87850a8649", + "metadata": {}, + "source": [ + "Running our script in the terminal will require us to export the following global variables before using the command `python NAME_OF_SCRIPT.py`. You can also check out our **example inference scripts** for the [Pubmed API](/example_scripts/example_langchain_chat_llama_2_zeroshot.py) and [Vertex AI Vector Search](/example_scripts/example_vectorsearch_chat_llama_2_zeroshot.py)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ba97df23-6893-438d-8a67-cb7dbf83e407", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "#retreive our index and endpoint id\n", + "print(index_id)\n", + "print(endpoint_id)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7eab00a3-54ff-4873-8d25-eaf8bd18a2e6", + "metadata": {}, + "outputs": [], + "source": [ + "#enter the global variables in your terminal\n", + "export PROJECT_ID='' \\\n", + "export LOCATION_ID='' \\\n", + "#export ENDPOINT_ID='' \\ #Uncomment if using model from Model Garden\n", + "export BUCKET='' \\\n", + "export VC_INDEX_ID='' \\\n", + "export VC_ENDPOINT_ID='VECTOR_SEARCH_ENDPOINT_ID>'" + ] + }, + { + "cell_type": "markdown", + "id": "bbe127e6-c0b1-4e07-ad56-38c30a9bf858", + "metadata": { + "tags": [] + }, + "source": [ + "You should see similar results on the terminal. In this example we ask the chatbot to explain brain cancer!" + ] + }, + { + "cell_type": "markdown", + "id": "80c8fb4b-e74f-4e8d-892b-0f913eff747d", + "metadata": {}, + "source": [ + "![PubMed Chatbot Results](../../../images/GCP_chatbot_results.png)" + ] + }, + { + "cell_type": "markdown", + "id": "a178c1c6-368a-48c5-8beb-278443b685a2", + "metadata": {}, + "source": [ + "### Clean Up" + ] + }, + { + "cell_type": "markdown", + "id": "7ec06a34-dc47-453f-b519-424804fa2748", + "metadata": {}, + "source": [ + "**Warning:** Dont forget to delete the resources we just made to avoid accruing additional costs!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c307bb17-757a-4579-a0d8-698eb1bb3f2e", + "metadata": {}, + "outputs": [], + "source": [ + "#Undeploy index\n", + "!gcloud ai index-endpoints undeploy-index {endpoint_id} \\\n", + " --deployed-index-id={deployed_index_id} \\\n", + " --project={project_id} \\\n", + " --region={location}\n", + "\n", + "\n", + "#Delete index and endpoint\n", + "!gcloud ai indexes delete {index_id} \\\n", + " --project={project_id} \\\n", + " --region={location} --quiet\n", + "\n", + "!gcloud ai index-endpoints delete {endpoint_id} \\\n", + " --project={project_id} \\\n", + " --region={location} --quiet" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "280cea0a-a8fc-494e-8ce4-afb65847a222", + "metadata": {}, + "outputs": [], + "source": [ + "#Delete bucket\n", + "!gcloud storage rm --recursive gs://{bucket}/" + ] + }, + { + "cell_type": "markdown", + "id": "6928d95d-d7ec-43f6-9135-79fcfc9520d9", + "metadata": {}, + "source": [ + "If you have imported a model and deployed it don't forget to delete the model from the Model Registry and delete the endpoint." + ] + } + ], + "metadata": { + "environment": { + "kernel": "python3", + "name": "common-cpu.m113", + "type": "gcloud", + "uri": "gcr.io/deeplearning-platform-release/base-cpu:m113" + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/notebooks/GenAI/Gemini_Intro.ipynb b/tutorials/notebooks/GenAI/Gemini_Intro.ipynb new file mode 100644 index 0000000..94b8d7a --- /dev/null +++ b/tutorials/notebooks/GenAI/Gemini_Intro.ipynb @@ -0,0 +1,853 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "c51ed24c-53dd-4239-8be0-0e0422596ba3", + "metadata": {}, + "source": [ + "# Intro to GCP's Gemini " + ] + }, + { + "cell_type": "markdown", + "id": "22cc412f-5338-45ba-8b29-9039c19208d9", + "metadata": {}, + "source": [ + "**Gemini** is a Google multimodal model that has the capability to **summarize, chat, and generate text from images or videos**. Gemini comes in two model versions **Gemini Pro** and **Gemini Pro Vision**, for this tutorial we will be looking into utilizing both models via python packages and GCPs model playground, **Vertex AI Studio**." + ] + }, + { + "cell_type": "markdown", + "id": "28289191-0813-47d1-be6d-8feb0ae708bd", + "metadata": {}, + "source": [ + "## Gemini in Python" + ] + }, + { + "cell_type": "markdown", + "id": "b8ec6d40-b5b3-434f-adc4-2838b7f49d1d", + "metadata": { + "tags": [] + }, + "source": [ + "The first step inorder to stat using Gemini is to update the google-cloud-aiplatform python package if you havent already." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "ed9781dd-9764-4e9c-88ba-fcd7bb95842a", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: google-cloud-aiplatform in /opt/conda/lib/python3.10/site-packages (1.37.0)\n", + "Collecting google-cloud-aiplatform\n", + " Downloading google_cloud_aiplatform-1.39.0-py2.py3-none-any.whl.metadata (28 kB)\n", + "Requirement already satisfied: google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0 in /opt/conda/lib/python3.10/site-packages (from google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (1.34.0)\n", + "Requirement already satisfied: proto-plus<2.0.0dev,>=1.22.0 in /opt/conda/lib/python3.10/site-packages (from google-cloud-aiplatform) (1.23.0)\n", + "Requirement already satisfied: protobuf!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev,>=3.19.5 in /opt/conda/lib/python3.10/site-packages (from google-cloud-aiplatform) (3.20.3)\n", + "Requirement already satisfied: packaging>=14.3 in /opt/conda/lib/python3.10/site-packages (from google-cloud-aiplatform) (23.2)\n", + "Requirement already satisfied: google-cloud-storage<3.0.0dev,>=1.32.0 in /opt/conda/lib/python3.10/site-packages (from google-cloud-aiplatform) (2.13.0)\n", + "Requirement already satisfied: google-cloud-bigquery<4.0.0dev,>=1.15.0 in /opt/conda/lib/python3.10/site-packages (from google-cloud-aiplatform) (3.13.0)\n", + "Requirement already satisfied: google-cloud-resource-manager<3.0.0dev,>=1.3.3 in /opt/conda/lib/python3.10/site-packages (from google-cloud-aiplatform) (1.11.0)\n", + "Requirement already satisfied: shapely<3.0.0dev in /opt/conda/lib/python3.10/site-packages (from google-cloud-aiplatform) (2.0.2)\n", + "Requirement already satisfied: googleapis-common-protos<2.0dev,>=1.56.2 in /opt/conda/lib/python3.10/site-packages (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (1.62.0)\n", + "Requirement already satisfied: google-auth<3.0dev,>=1.25.0 in /opt/conda/lib/python3.10/site-packages (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (2.25.2)\n", + "Requirement already satisfied: requests<3.0.0dev,>=2.18.0 in /opt/conda/lib/python3.10/site-packages (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (2.31.0)\n", + "Requirement already satisfied: grpcio<2.0dev,>=1.33.2 in /opt/conda/lib/python3.10/site-packages (from google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (1.60.0)\n", + "Requirement already satisfied: grpcio-status<2.0dev,>=1.33.2 in /opt/conda/lib/python3.10/site-packages (from google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (1.48.2)\n", + "Requirement already satisfied: google-cloud-core<3.0.0dev,>=1.6.0 in /opt/conda/lib/python3.10/site-packages (from google-cloud-bigquery<4.0.0dev,>=1.15.0->google-cloud-aiplatform) (2.4.1)\n", + "Requirement already satisfied: google-resumable-media<3.0dev,>=0.6.0 in /opt/conda/lib/python3.10/site-packages (from google-cloud-bigquery<4.0.0dev,>=1.15.0->google-cloud-aiplatform) (2.6.0)\n", + "Requirement already satisfied: python-dateutil<3.0dev,>=2.7.2 in /opt/conda/lib/python3.10/site-packages (from google-cloud-bigquery<4.0.0dev,>=1.15.0->google-cloud-aiplatform) (2.8.2)\n", + "Requirement already satisfied: grpc-google-iam-v1<1.0.0dev,>=0.12.4 in /opt/conda/lib/python3.10/site-packages (from google-cloud-resource-manager<3.0.0dev,>=1.3.3->google-cloud-aiplatform) (0.13.0)\n", + "Requirement already satisfied: google-crc32c<2.0dev,>=1.0 in /opt/conda/lib/python3.10/site-packages (from google-cloud-storage<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (1.5.0)\n", + "Requirement already satisfied: numpy>=1.14 in /opt/conda/lib/python3.10/site-packages (from shapely<3.0.0dev->google-cloud-aiplatform) (1.25.2)\n", + "Requirement already satisfied: cachetools<6.0,>=2.0.0 in /opt/conda/lib/python3.10/site-packages (from google-auth<3.0dev,>=1.25.0->google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (5.3.2)\n", + "Requirement already satisfied: pyasn1-modules>=0.2.1 in /opt/conda/lib/python3.10/site-packages (from google-auth<3.0dev,>=1.25.0->google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (0.3.0)\n", + "Requirement already satisfied: rsa<5,>=3.1.4 in /opt/conda/lib/python3.10/site-packages (from google-auth<3.0dev,>=1.25.0->google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (4.9)\n", + "Requirement already satisfied: six>=1.5 in /opt/conda/lib/python3.10/site-packages (from python-dateutil<3.0dev,>=2.7.2->google-cloud-bigquery<4.0.0dev,>=1.15.0->google-cloud-aiplatform) (1.16.0)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /opt/conda/lib/python3.10/site-packages (from requests<3.0.0dev,>=2.18.0->google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.10/site-packages (from requests<3.0.0dev,>=2.18.0->google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (3.6)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/conda/lib/python3.10/site-packages (from requests<3.0.0dev,>=2.18.0->google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (1.26.18)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.10/site-packages (from requests<3.0.0dev,>=2.18.0->google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (2023.11.17)\n", + "Requirement already satisfied: pyasn1<0.6.0,>=0.4.6 in /opt/conda/lib/python3.10/site-packages (from pyasn1-modules>=0.2.1->google-auth<3.0dev,>=1.25.0->google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0dev,>=1.32.0->google-cloud-aiplatform) (0.5.1)\n", + "Downloading google_cloud_aiplatform-1.39.0-py2.py3-none-any.whl (3.4 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.4/3.4 MB\u001b[0m \u001b[31m13.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n", + "\u001b[?25hInstalling collected packages: google-cloud-aiplatform\n", + " Attempting uninstall: google-cloud-aiplatform\n", + " Found existing installation: google-cloud-aiplatform 1.37.0\n", + " Uninstalling google-cloud-aiplatform-1.37.0:\n", + " Successfully uninstalled google-cloud-aiplatform-1.37.0\n", + "Successfully installed google-cloud-aiplatform-1.39.0\n" + ] + } + ], + "source": [ + "!pip install --upgrade google-cloud-aiplatform" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "54499594-1d7b-41cc-858b-ffe6f6c2770b", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Collecting langchain\n", + " Downloading langchain-0.1.0-py3-none-any.whl.metadata (13 kB)\n", + "Requirement already satisfied: PyYAML>=5.3 in /opt/conda/lib/python3.10/site-packages (from langchain) (6.0.1)\n", + "Requirement already satisfied: SQLAlchemy<3,>=1.4 in /opt/conda/lib/python3.10/site-packages (from langchain) (2.0.23)\n", + "Requirement already satisfied: aiohttp<4.0.0,>=3.8.3 in /opt/conda/lib/python3.10/site-packages (from langchain) (3.9.1)\n", + "Requirement already satisfied: async-timeout<5.0.0,>=4.0.0 in /opt/conda/lib/python3.10/site-packages (from langchain) (4.0.3)\n", + "Collecting dataclasses-json<0.7,>=0.5.7 (from langchain)\n", + " Downloading dataclasses_json-0.6.3-py3-none-any.whl.metadata (25 kB)\n", + "Requirement already satisfied: jsonpatch<2.0,>=1.33 in /opt/conda/lib/python3.10/site-packages (from langchain) (1.33)\n", + "Collecting langchain-community<0.1,>=0.0.9 (from langchain)\n", + " Downloading langchain_community-0.0.11-py3-none-any.whl.metadata (7.3 kB)\n", + "Collecting langchain-core<0.2,>=0.1.7 (from langchain)\n", + " Downloading langchain_core-0.1.9-py3-none-any.whl.metadata (4.0 kB)\n", + "Requirement already satisfied: langsmith<0.1.0,>=0.0.77 in /opt/conda/lib/python3.10/site-packages (from langchain) (0.0.77)\n", + "Requirement already satisfied: numpy<2,>=1 in /opt/conda/lib/python3.10/site-packages (from langchain) (1.25.2)\n", + "Requirement already satisfied: pydantic<3,>=1 in /opt/conda/lib/python3.10/site-packages (from langchain) (1.10.13)\n", + "Requirement already satisfied: requests<3,>=2 in /opt/conda/lib/python3.10/site-packages (from langchain) (2.31.0)\n", + "Requirement already satisfied: tenacity<9.0.0,>=8.1.0 in /opt/conda/lib/python3.10/site-packages (from langchain) (8.2.3)\n", + "Requirement already satisfied: attrs>=17.3.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (23.1.0)\n", + "Requirement already satisfied: multidict<7.0,>=4.5 in /opt/conda/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (6.0.4)\n", + "Requirement already satisfied: yarl<2.0,>=1.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (1.9.4)\n", + "Requirement already satisfied: frozenlist>=1.1.1 in /opt/conda/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (1.4.0)\n", + "Requirement already satisfied: aiosignal>=1.1.2 in /opt/conda/lib/python3.10/site-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (1.3.1)\n", + "Collecting marshmallow<4.0.0,>=3.18.0 (from dataclasses-json<0.7,>=0.5.7->langchain)\n", + " Downloading marshmallow-3.20.2-py3-none-any.whl.metadata (7.5 kB)\n", + "Collecting typing-inspect<1,>=0.4.0 (from dataclasses-json<0.7,>=0.5.7->langchain)\n", + " Downloading typing_inspect-0.9.0-py3-none-any.whl.metadata (1.5 kB)\n", + "Requirement already satisfied: jsonpointer>=1.9 in /opt/conda/lib/python3.10/site-packages (from jsonpatch<2.0,>=1.33->langchain) (2.4)\n", + "Requirement already satisfied: anyio<5,>=3 in /opt/conda/lib/python3.10/site-packages (from langchain-core<0.2,>=0.1.7->langchain) (3.7.1)\n", + "Requirement already satisfied: packaging<24.0,>=23.2 in /opt/conda/lib/python3.10/site-packages (from langchain-core<0.2,>=0.1.7->langchain) (23.2)\n", + "Requirement already satisfied: typing-extensions>=4.2.0 in /opt/conda/lib/python3.10/site-packages (from pydantic<3,>=1->langchain) (4.8.0)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /opt/conda/lib/python3.10/site-packages (from requests<3,>=2->langchain) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.10/site-packages (from requests<3,>=2->langchain) (3.6)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/conda/lib/python3.10/site-packages (from requests<3,>=2->langchain) (1.26.18)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.10/site-packages (from requests<3,>=2->langchain) (2023.11.17)\n", + "Requirement already satisfied: greenlet!=0.4.17 in /opt/conda/lib/python3.10/site-packages (from SQLAlchemy<3,>=1.4->langchain) (3.0.2)\n", + "Requirement already satisfied: sniffio>=1.1 in /opt/conda/lib/python3.10/site-packages (from anyio<5,>=3->langchain-core<0.2,>=0.1.7->langchain) (1.3.0)\n", + "Requirement already satisfied: exceptiongroup in /opt/conda/lib/python3.10/site-packages (from anyio<5,>=3->langchain-core<0.2,>=0.1.7->langchain) (1.2.0)\n", + "Collecting mypy-extensions>=0.3.0 (from typing-inspect<1,>=0.4.0->dataclasses-json<0.7,>=0.5.7->langchain)\n", + " Downloading mypy_extensions-1.0.0-py3-none-any.whl (4.7 kB)\n", + "Downloading langchain-0.1.0-py3-none-any.whl (797 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m798.0/798.0 kB\u001b[0m \u001b[31m5.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hDownloading dataclasses_json-0.6.3-py3-none-any.whl (28 kB)\n", + "Downloading langchain_community-0.0.11-py3-none-any.whl (1.5 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.5/1.5 MB\u001b[0m \u001b[31m26.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n", + "\u001b[?25hDownloading langchain_core-0.1.9-py3-none-any.whl (216 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m216.5/216.5 kB\u001b[0m \u001b[31m29.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading marshmallow-3.20.2-py3-none-any.whl (49 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m49.4/49.4 kB\u001b[0m \u001b[31m6.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading typing_inspect-0.9.0-py3-none-any.whl (8.8 kB)\n", + "Installing collected packages: mypy-extensions, marshmallow, typing-inspect, langchain-core, dataclasses-json, langchain-community, langchain\n", + " Attempting uninstall: langchain-core\n", + " Found existing installation: langchain-core 0.1.6\n", + " Uninstalling langchain-core-0.1.6:\n", + " Successfully uninstalled langchain-core-0.1.6\n", + "Successfully installed dataclasses-json-0.6.3 langchain-0.1.0 langchain-community-0.0.11 langchain-core-0.1.9 marshmallow-3.20.2 mypy-extensions-1.0.0 typing-inspect-0.9.0\n" + ] + } + ], + "source": [ + "!pip install langchain" + ] + }, + { + "cell_type": "markdown", + "id": "f7bbbed7-becf-48d0-98c3-6dd9942fd377", + "metadata": {}, + "source": [ + "Next we initialize the Gemini model by setting out project id and location. We are also pulling in the packages:\n", + "- **GenerativeModel:** Allows us to specify and launch the Gemini model we need (e.g. Gemini Pro, Gemini Pro Vision).\n", + "- **ChatSession:** Set Gemini Pro in chatbot mode.\n", + "- **Part:** Loads in files from buckets.\n", + "- **Image:** Loads in image files locally.\n", + "- **GenerationConfig:** Allows us to configure the models temperature, top p, top k, and max tokens." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "47dc9232-383f-405b-b1a8-fab64a80492d", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from google.cloud import aiplatform\n", + "import vertexai.preview\n", + "from vertexai.preview.generative_models import GenerativeModel, ChatSession, Part, Image, GenerationConfig\n", + "\n", + "# TODO(developer): Update and un-comment below lines\n", + "project_id = \n", + "location = \n", + "vertexai.init(project=project_id, location=location)" + ] + }, + { + "cell_type": "markdown", + "id": "022f24ba-4034-4424-91d8-1229682755ab", + "metadata": {}, + "source": [ + "### Gemini as a Chatbot" + ] + }, + { + "cell_type": "markdown", + "id": "b7dec028-6d30-4078-ac54-62b849ae9ced", + "metadata": {}, + "source": [ + "For dealing with text, code generation, natural language tasks we can use the **gemini-pro** model and to set our model in **chatbot mode** we need to use the `start_chat()` function. You will see below we also created a function named **get_chat_response** which will send the prompt or message we have for our model using the `send_message()` function and returns only the text of the chats response." + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "id": "70bc5b25-c796-4015-82dc-6bc861bb525f", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "model = GenerativeModel(\"gemini-pro\")\n", + "chat = model.start_chat()\n", + "\n", + "def get_chat_response(chat: ChatSession, prompt: str):\n", + " response = chat.send_message(prompt)\n", + " return response.text" + ] + }, + { + "cell_type": "markdown", + "id": "ae40e87a-76ac-469b-a504-fb903319cbaf", + "metadata": {}, + "source": [ + "Now that we have our functions lets ask our Gemini chatbot some questions!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9d3277de-ab85-417f-b1d8-b21985a7a21b", + "metadata": {}, + "outputs": [], + "source": [ + "prompt = \"Hello.\"\n", + "print(get_chat_response(chat, prompt))" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "342a0e3d-fbcb-4562-bb5f-b439a92e80e2", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "**Generative AI use cases that are Life Science or Health Care related:**\n", + "\n", + "* **Drug discovery and development:** Generative AI can be used to generate new molecules with desired properties, design new drugs, and predict how drugs will interact with biological systems. This can help to accelerate the drug discovery and development process and make it more efficient.\n", + "* **Personalized medicine:** Generative AI can be used to generate personalized treatment plans for patients based on their individual genetic and health data. This can help to improve the effectiveness of treatment and reduce side effects.\n", + "* **Disease diagnosis and prognosis:** Generative AI can be used to develop new diagnostic tools and methods, and to predict the course of a disease. This can help to improve patient outcomes and reduce healthcare costs.\n", + "* **Medical imaging:** Generative AI can be used to generate synthetic medical images, which can be used to train medical students and residents, develop new imaging technologies, and improve the accuracy of diagnosis.\n", + "* **Electronic health records (EHRs):** Generative AI can be used to generate synthetic EHRs, which can be used to train machine learning algorithms, develop new clinical decision support tools, and improve the efficiency of healthcare operations.\n", + "* **Healthcare chatbots:** Generative AI can be used to develop healthcare chatbots that can provide patients with information and support, answer questions, and schedule appointments. This can help to improve patient access to care and reduce the burden on healthcare providers.\n", + "* **Drug repurposing:** Generative AI can be used to identify new uses for existing drugs, which can help to expand treatment options for patients and reduce the cost of drug development.\n", + "* **Clinical trial design:** Generative AI can be used to design more efficient and effective clinical trials, which can help to accelerate the development of new treatments and improve patient outcomes.\n", + "* **Healthcare fraud detection:** Generative AI can be used to detect fraudulent healthcare claims, which can help to reduce costs and improve the efficiency of healthcare operations.\n", + "\n", + "These are just a few examples of the many potential use cases for generative AI in the life science and healthcare industries. As generative AI technology continues to develop, we can expect to see even more innovative and groundbreaking applications in the years to come.\n" + ] + } + ], + "source": [ + "prompt = \"List gen ai use cases that are Life Science or Health Care related. \"\n", + "print(get_chat_response(chat, prompt))" + ] + }, + { + "cell_type": "markdown", + "id": "fcfda59a-c440-4489-8f00-a4316b827292", + "metadata": {}, + "source": [ + "We can even ask it to **generate code or debug code**!" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "id": "f0b917b2-22b5-4011-a9c4-d8a667cf6b1d", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sure, here's a Python script that will replace all null values (empty cells) with zeros within a CSV file:\n", + "\n", + "\n", + "```python\n", + "import csv\n", + "\n", + "# Open the CSV file for reading and writing.\n", + "with open('input.csv', 'r+', newline='') as csvfile:\n", + " # Create a CSV reader and writer.\n", + " reader = csv.reader(csvfile)\n", + " writer = csv.writer(csvfile)\n", + "\n", + " # Read the header row.\n", + " header = next(reader)\n", + "\n", + " # Replace null values with zeros in the remaining rows.\n", + " for row in reader:\n", + " for i, cell in enumerate(row):\n", + " if cell == '':\n", + " row[i] = '0'\n", + "\n", + " # Write the updated row to the CSV file.\n", + " writer.writerow(row)\n", + "```\n", + "\n", + "\n", + "To use this script, save it as a file (e.g. `replace_nulls.py`) and run it from the command line:\n", + "\n", + "\n", + "```\n", + "python replace_nulls.py\n", + "```\n", + "\n", + "\n", + "This will replace all null values in the 'input.csv' file with zeros and create a new CSV file called 'output.csv'.\n", + "\n", + "\n", + "**Note:** Make sure to replace `input.csv` with the actual name of your input CSV file. You can also change the output file name by modifying the `output.csv` part of the script.\n" + ] + } + ], + "source": [ + "prompt = \"create a python code that will replace all null values to zero within a csv file\"\n", + "print(get_chat_response(chat, prompt))" + ] + }, + { + "cell_type": "markdown", + "id": "3a9d57d2-dbe1-434a-9345-fe5ae3315a21", + "metadata": {}, + "source": [ + "### Gemini as a Summarizer" + ] + }, + { + "cell_type": "markdown", + "id": "4856bd61-3e24-40ea-8da4-1a6edc5f3e1d", + "metadata": {}, + "source": [ + "We can generate text like asking Gemini Pro to summarize articles we provide locally (using langchain). As of now Gemini does not support loading in documents that are not videos and images directly. " + ] + }, + { + "cell_type": "markdown", + "id": "b5d7df19-a625-40dc-b4e5-faff5e7ba241", + "metadata": {}, + "source": [ + "First we will load in a file using langchains text loader. You can also use langchain to load in files from your bucket following the instructions [here](https://python.langchain.com/docs/integrations/document_loaders/google_cloud_storage_file)." + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "id": "3becd6c2-daf0-4287-80e5-06cf419287bd", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from langchain_community.document_loaders import TextLoader\n", + "\n", + "loader = TextLoader(\"./PMC10000003.txt\")\n", + "ex_file=loader.load()" + ] + }, + { + "cell_type": "markdown", + "id": "4e3d6c19-7d68-49e1-85e9-91bcd6bd1775", + "metadata": {}, + "source": [ + "We can configure our model to give us the best optimal output by setting the parameters below:\n", + "- **Max_Output_Token**: Max number of words to generate.\n", + "- **Temperature:** Controls randomness, higher values increase diversity meaning a more unique response make the model to think harder. Must be a number from 0 to 1.\n", + "- **Top_p (nucleus):** The cumulative probability cutoff for token selection. Lower values mean sampling from a smaller, more top-weighted nucleus. Must be a number from 0 to 1.\n", + "- **Top_k:** Sample from the k most likely next tokens at each step. Lower k focuses on higher probability tokens. This means the model choses the most probable words. Lower values eliminate fewer coherent words.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "id": "c4228e44-9639-40da-8f69-343be93b65b0", + "metadata": {}, + "outputs": [], + "source": [ + "generation_config = GenerationConfig(\n", + " temperature=0.9,\n", + " top_p=1.0,\n", + " top_k=32,\n", + " candidate_count=1,\n", + " max_output_tokens=8192,\n", + ")\n", + "\n", + "def summarizer(file: str) -> str:\n", + " \n", + " # Query the model\n", + " response = model.generate_content(\n", + " [\n", + " # Add an example query\n", + " \"summarize this file.\",\n", + " file\n", + " ],\n", + " generation_config=generation_config,\n", + " )\n", + " #print(response)\n", + " return response.text" + ] + }, + { + "cell_type": "markdown", + "id": "0bb722d6-ef79-4a0b-9327-04811e7f8ffc", + "metadata": {}, + "source": [ + "Here we are inputting only the page content from our document loader." + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "id": "97e7ea82-c58e-42ee-b01e-6aa51e324b05", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The article \"Mechanical Treatment of Inflammation of the Knee Joint\" published in the Chicago Medical Examiner on January 1867, discusses the use of mechanical treatments for inflammation of the knee joint. The author emphasizes the importance of overcoming the reflex contraction of muscles surrounding the joint to prevent or correct deformities. Tenotomy of the flexor tendons may be necessary to achieve this. Additionally, the relief of pressure on the inflamed joint surfaces is crucial for recovery. This can be achieved through various methods such as adhesive strap dressings, application of an air cushion, or evacuation of pus from the joint. The author also introduces a new apparatus for making extension, which allows for optimal counter-extension and can be used in both acute and chronic cases. The advantages of this apparatus include its large counter-extending surface, security, and patient comfort. By utilizing this principle, various instruments can be crafted to address knee deformities.\n" + ] + } + ], + "source": [ + "print(summarizer(ex_file[0].page_content))" + ] + }, + { + "cell_type": "markdown", + "id": "77c10bd8-1570-4dfa-9b2a-999e3f149faf", + "metadata": {}, + "source": [ + "### Gemini as a Image to Text Generator" + ] + }, + { + "cell_type": "markdown", + "id": "476052b3-ff64-4e5a-819c-7a18daf7f413", + "metadata": {}, + "source": [ + "Gemini Pro Vision can generate text from images and videos. These text can be descriptions or questions about the image or video. You can download an image or retrieve an image from your bucket or locally." + ] + }, + { + "cell_type": "markdown", + "id": "214ee84f-f058-411a-944d-4e149cd0e9bc", + "metadata": {}, + "source": [ + "Images can only be in the following formats: \n", + "- PNG - image/png\n", + "- JPEG - image/jpeg\n", + "\n", + "Our function below takes in a prompt and the image, we have also included a if statement to recognize if the function should use `Image` to load in a image locally or `Part` to load it from a bucket." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "501efefe-d52f-43b3-b4eb-3d3fe81f4a3e", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "def img2text(image_path: str, img_prompt: str) -> str:\n", + " multimodal_model = GenerativeModel(\"gemini-pro-vision\")\n", + " if \"gs://\" in image_path:\n", + " image1=Part.from_uri(image_path, mime_type=\"image/jpeg\")\n", + " else: \n", + " image1=Image.load_from_file(image_path)\n", + " #image1=Image.load_from_file(image_path)\n", + " responses = multimodal_model.generate_content(\n", + " [image1, img_prompt],\n", + " generation_config={\n", + " \"max_output_tokens\": 2048,\n", + " \"temperature\": 0.4,\n", + " \"top_p\": 1,\n", + " \"top_k\": 32\n", + " },\n", + " stream=True,\n", + " )\n", + " for response in responses:\n", + " print(response.text, end=\"\")" + ] + }, + { + "cell_type": "markdown", + "id": "4cafaaa8-f3c7-472a-8f0b-6595d2112636", + "metadata": {}, + "source": [ + "Lets look at an image locally, by loading a image first, this a image of a Covid virus from the [CDC Public Health Image Library](https://phil.cdc.gov/details.aspx?pid=23312)." + ] + }, + { + "cell_type": "code", + "execution_count": 146, + "id": "b939f105-89c2-4c38-80f8-2cddf8dcb0ca", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--2024-01-11 05:24:55-- https://phil.cdc.gov//PHIL_Images/23312/23312_lores.jpg\n", + "Resolving phil.cdc.gov (phil.cdc.gov)... 198.246.102.26\n", + "Connecting to phil.cdc.gov (phil.cdc.gov)|198.246.102.26|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 31823 (31K) [image/jpeg]\n", + "Saving to: ‘example_image_covid.jpg’\n", + "\n", + "example_image_covid 100%[===================>] 31.08K --.-KB/s in 0.07s \n", + "\n", + "2024-01-11 05:24:55 (455 KB/s) - ‘example_image_covid.jpg’ saved [31823/31823]\n", + "\n" + ] + } + ], + "source": [ + "! wget -O example_image_covid.jpg \"https://phil.cdc.gov//PHIL_Images/23312/23312_lores.jpg\" " + ] + }, + { + "cell_type": "markdown", + "id": "696d9fc7-0ca9-44a7-b431-a9698b1a636c", + "metadata": {}, + "source": [ + "Now run our function!" + ] + }, + { + "cell_type": "code", + "execution_count": 180, + "id": "34e81656-4943-439d-9fbe-df439e0e30df", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " The image is a 3D rendering of a coronavirus. The virus is round and has a spiky outer coat. The spikes are made of proteins that help the virus attach to and infect cells. The virus is colored gray and red.None\n" + ] + } + ], + "source": [ + "print(img2text(\"example_image_covid.jpg\", \"describe this image.\"))" + ] + }, + { + "cell_type": "markdown", + "id": "dc152659-7bc4-46bc-9ead-4736b4ad2706", + "metadata": {}, + "source": [ + "Next we'll look at an image from a bucket." + ] + }, + { + "cell_type": "code", + "execution_count": 181, + "id": "81197d53-dd3d-4358-9835-ef513ec11d33", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " The image shows a table with a pink peony bouquet, two cups of coffee, a bowl of blueberries, and a silver spoon with the words \"Let's Jam\" on it. There are also five scones with blueberries on them. The table is covered with a white tablecloth with purple stains.None\n" + ] + } + ], + "source": [ + "print(img2text(\"gs://generativeai-downloads/images/scones.jpg\", \"describe this image.\"))" + ] + }, + { + "cell_type": "markdown", + "id": "80e3c48f-66e9-40e1-8623-04f73b672507", + "metadata": {}, + "source": [ + "We can even ask for more details related to the items in our image!" + ] + }, + { + "cell_type": "code", + "execution_count": 182, + "id": "d8395784-ea68-4a95-a0bb-b3d618f68054", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Preheat oven to 375 degrees F (190 degrees C). Grease a baking sheet.\n", + "\n", + "In a large bowl, combine the flour, sugar, baking powder, and salt. Cut in butter until mixture resembles coarse crumbs. Stir in blueberries.\n", + "\n", + "Turn out onto a lightly floured surface; knead for 10 to 12 times. Pat into a 1/2-in.-thick circle. Cut with a 3-in. floured biscuit cutter. Place 2 in. apart on the prepared baking sheet.\n", + "\n", + "Bake for 12-15 minutes or until golden brown. Cool for 2 minutes before removing to a wire rack to cool completely.None\n" + ] + } + ], + "source": [ + "img_prompt=\"How do you make whats in this image?\"\n", + "image=\"gs://generativeai-downloads/images/scones.jpg\"\n", + "print(img2text(image, img_prompt))" + ] + }, + { + "cell_type": "markdown", + "id": "960f7ba6-8236-437a-ba99-ea1d887efd64", + "metadata": {}, + "source": [ + "### Gemini as a Video to Text Generator" + ] + }, + { + "cell_type": "markdown", + "id": "fbdbbd35-f36f-4467-8a1d-48ccd942d7cc", + "metadata": {}, + "source": [ + "Just like images we will be using the same model Gemini Pro Vision. We can load videos locally and from a bucket just like images. Video files can only be in the following formats:\n", + "- MOV - video/mov\n", + "- MPEG - video/mpeg\n", + "- MP4 - video/mp4\n", + "- MPG - video/mpg\n", + "- AVI - video/avi\n", + "- WMV - video/wmv\n", + "- MPEGPS - video/mpegps\n", + "- FLS - video/flv" + ] + }, + { + "cell_type": "markdown", + "id": "a7f94141-b5ba-49bf-a3d7-d0b68ccdd39a", + "metadata": {}, + "source": [ + "Our function below takes a video from a public bucket and asks for a prompt and the location of the video file." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c18561c6-8f8f-46e4-b3ee-0d5fc96f2d31", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "def video2text(video_path: str, video_prompt: str) -> str:\n", + " # Query the model\n", + " response = multimodal_model.generate_content(\n", + " [\n", + " # Add an example image\n", + " Part.from_uri(\n", + " video_path, mime_type=\"video/mp4\"\n", + " ),\n", + " # Add an example query\n", + " video_prompt,\n", + " ],\n", + " stream=True\n", + " )\n", + " for chunk in response :\n", + " return print(chunk.text)\n" + ] + }, + { + "cell_type": "markdown", + "id": "492f9100-b5a4-446c-a03d-dd89a1b4bbde", + "metadata": {}, + "source": [ + "Run the function!" + ] + }, + { + "cell_type": "code", + "execution_count": 191, + "id": "55990074-0365-45f5-9fa6-bedbe93c9932", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " This video is about a messy world. It shows a bunch of different things that are messy, like a messy room, a messy desk, and a messy\n", + "None\n" + ] + } + ], + "source": [ + "video_prompt=\"What is this video about in detail?\"\n", + "video=\"gs://cloud-samples-data/video/Machine Learning Solving Problems Big, Small, and Prickly.mp4\"\n", + "print(video2text(video, video_prompt))" + ] + }, + { + "cell_type": "markdown", + "id": "c32253b4-d892-4c0c-896e-320c8df479c7", + "metadata": {}, + "source": [ + "## Gemini on Vertex AI Studio" + ] + }, + { + "cell_type": "markdown", + "id": "614883f2-e53a-4ba5-855c-209d755a6e6f", + "metadata": {}, + "source": [ + "You can also use Gemini Pro and Pro Vision in Vertex AI's playground called **Vertex AI Studio**. To locate Vertex AI Studio search Vertex AI and on the left hand side locate Vertex AI Studio as the image below shows. To utilize Gemini Pro Vision locate and click **Multimodal** you will have the option to use your own prompt or explore some of the other set prompts such as Extract text from images, image question answering , etc." + ] + }, + { + "cell_type": "markdown", + "id": "8a634e11-3bd5-4048-b6e4-46d5aac6ce34", + "metadata": {}, + "source": [ + "![Gemini1](../../../images/Gemini_1.png)" + ] + }, + { + "cell_type": "markdown", + "id": "c3716d9d-49af-40c9-acce-757c53be9a12", + "metadata": {}, + "source": [ + "For this tutorial we will select Open on the **Prompt Design** option. We will upload the COVID image we downloaded before by clicking **INSERT MEDIA** and selecting our file. Then we will ask it a question, here we asked \"Describe treatments for the item in this image\"." + ] + }, + { + "cell_type": "markdown", + "id": "ec72f9cd-0d06-47e4-b67c-45039372d967", + "metadata": { + "tags": [] + }, + "source": [ + "![Gemini3](../../../images/Gemini_3.png)" + ] + }, + { + "cell_type": "markdown", + "id": "4a88f06b-770a-43be-b875-b4054c3ccbf3", + "metadata": {}, + "source": [ + "To utilize Gemini Pro locate and click **Language** on the left side menu. You have the option to use a prompt or chat and if you would like to focus on text or code." + ] + }, + { + "cell_type": "markdown", + "id": "1952cd5c-c93d-428f-8036-ac658eebfba4", + "metadata": { + "tags": [] + }, + "source": [ + "![Gemini2](../../../images/Gemini_2.png)" + ] + }, + { + "cell_type": "markdown", + "id": "7810c0db-d145-4acd-a2cc-b6ce8231fa14", + "metadata": {}, + "source": [ + "Here we picked the **TEXT CHAT** option and asked the bot to describe covid and how it works." + ] + }, + { + "cell_type": "markdown", + "id": "36b4635d-d8f3-42df-959d-dff92259813c", + "metadata": { + "tags": [] + }, + "source": [ + "![Gemini4](../../../images/Gemini_4.png)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "acc53b99-e6ed-45f1-a0e1-9b146e18e46c", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "environment": { + "kernel": "python3", + "name": "common-cpu.m114", + "type": "gcloud", + "uri": "gcr.io/deeplearning-platform-release/base-cpu:m114" + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/notebooks/GenAI/VertexAIStudioGCP.ipynb b/tutorials/notebooks/GenAI/VertexAIStudioGCP.ipynb new file mode 100644 index 0000000..3366fff --- /dev/null +++ b/tutorials/notebooks/GenAI/VertexAIStudioGCP.ipynb @@ -0,0 +1,153 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "Hny4I-ODTIS6" + }, + "source": [ + "# Vertex AI Studio on GCP - Article Summary\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-nLS57E2TO5y" + }, + "source": [ + "## Overview\n", + "\n", + "In research you often need to read several papers to understand new method or finidings and this can be quite taxing if you only need to get the gist of a article or need to quickly skim the article. In this tutorial we will use generative AI to summarize long documents but with the goal of still perserving the most important information using Generative AI Studio's Article Summary model." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "skXAu__iqks_" + }, + "source": [ + "### Costs\n", + "\n", + "This tutorial uses billable components of Google Cloud:\n", + "- Vertex AI Generative AI Studio\n", + "\n", + "Learn about [Vertex AI pricing](https://cloud.google.com/vertex-ai/pricing), [Generative AI pricing](https://cloud.google.com/vertex-ai/pricing#generative_ai_models), and use the [Pricing Calculator](https://cloud.google.com/products/calculator/) to generate a cost estimate based on your projected usage." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "mvKl-BtQTRiQ" + }, + "source": [ + "## Getting Started" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "x_xMwRLuyDrj" + }, + "source": [ + "Here you will use LLM via the API to summarize the extracted texts. Please note that LLMs currently have input text limit and stuffing a large input text might not be accepted. You can read more about quotas and limits [here](https://cloud.google.com/vertex-ai/docs/quotas)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Go to the Generative AI Studio console [here](https://console.cloud.google.com/vertex-ai/generative/language?_ga=2.182664366.923116401.1692009977-1042353744.1691708677).\n", + "\n", + "Scroll down to **Summarization** and click on the model **Article Summary**. You will see a prompt session were you will need to enter in the contents of your article as the console does not allow you to upload files. For this tutorial this article is about how gut microbiota affects Alzeheimer's disease because of the gut-brain-microbiota axis network [here](https://www.aging-us.com/article/102930/pdf).\n", + "\n", + " \n", + "\n", + "To the left you can control the parameters that we have been using before this is a great way to test what each parameter does and how they effect each other. Once you are done click **submit**, you should have a similar output as below. For explainations on the parameters **temperature, token limit max, top p, and top k** see the following article [here](https://cloud.google.com/vertex-ai/docs/generative-ai/text/test-text-prompts#generative-ai-test-text-prompt-drest).\n", + "\n", + " \n", + " \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Lets try increasing the temperature parameter and see if we recieve a different output." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As you can see our output becomes shorter and straight to the point this is because the temperature parameter controls the degree of randomness in token selection. Lower temperatures are good for prompts that require a more deterministic and less creative responses, while higher temperatures can lead to more diverse or creative results. A temperature of 0 is deterministic, meaning that the highest probability response is always selected." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "N5aVrDWkJs3Y" + }, + "source": [ + "### Troubleshooting\n", + "\n", + "If you model responds with an error its generally because the extracted text is too long for the generative model to process. In order for the model to work best try to not include any abstract or reference sections of your article, if errors still come up try limiting the article even more by removing other sections such as the intro or extracting the first 30,000 words of the article." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Vtp21WX3T7d_" + }, + "source": [ + "### Recap\n", + "\n", + "Although full text is too large for the model, you have managed to create a concise, paragraph of the most important information from a portion of the PDF using the model. This method is the most simiplest and is ideal for shorter documents but can still be used when you limit the character number you want the model to read. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "colab": { + "name": "summarization_large_documents.ipynb", + "toc_visible": true + }, + "environment": { + "kernel": "python3", + "name": "tf2-gpu.2-11.m108", + "type": "gcloud", + "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-11:m108" + }, + "kernelspec": { + "display_name": "Python (Local)", + "language": "python", + "name": "local-base" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/tutorials/notebooks/GenAI/example_scripts/example_langchain_chat_llama_2_zeroshot.py b/tutorials/notebooks/GenAI/example_scripts/example_langchain_chat_llama_2_zeroshot.py new file mode 100644 index 0000000..1756c90 --- /dev/null +++ b/tutorials/notebooks/GenAI/example_scripts/example_langchain_chat_llama_2_zeroshot.py @@ -0,0 +1,101 @@ +from langchain.retrievers import PubMedRetriever +from langchain.chains import ConversationalRetrievalChain +from langchain.prompts import PromptTemplate +#from langchain.llms import VertexAIModelGarden +from langchain.llms import VertexAI +import sys +import json +import os + + +class bcolors: + HEADER = '\033[95m' + OKBLUE = '\033[94m' + OKCYAN = '\033[96m' + OKGREEN = '\033[92m' + WARNING = '\033[93m' + FAIL = '\033[91m' + ENDC = '\033[0m' + BOLD = '\033[1m' + UNDERLINE = '\033[4m' + +MAX_HISTORY_LENGTH = 1 + +def build_chain(): + #if using model from uncomment Model Garden + #PROJECT_ID = os.environ["PROJECT_ID"] + #LOCATION_ID = os.environ["LOCATION_ID"] + #ENDPOINT_ID = os.environ["ENDPOINT_ID"] + + #llm = VertexAIModelGarden(project=PROJECT_ID, endpoint_id=ENDPOINT_ID, location=LOCATION_ID) + + llm = VertexAI( + model_name="text-bison@001", + max_output_tokens=1024, + temperature=0.2, + top_p=0.8, + top_k=40, + verbose=True, +) + + retriever= PubMedRetriever() + + prompt_template = """ + Ignore everything before. + Instructions: + I will provide you with research papers on a specific topic in English, and you will create a cumulative summary. + The summary should be concise and should accurately and objectively communicate the takeaway of the papers related to the topic. + You should not include any personal opinions or interpretations in your summary, but rather focus on objectively presenting the information from the papers. + Your summary should be written in your own words and ensure that your summary is clear, concise, and accurately reflects the content of the original papers. First, provide a concise summary then citations at the end. + {question} Answer "don't know" if not present in the document. + {context} + Solution:""" + + + PROMPT = PromptTemplate( + template=prompt_template, input_variables=["context", "question"], + ) + + condense_qa_template = """ + Chat History: + {chat_history} + Here is a new question for you: {question} + Standalone question:""" + standalone_question_prompt = PromptTemplate.from_template(condense_qa_template) + + qa = ConversationalRetrievalChain.from_llm( + llm=llm, + retriever=retriever, + condense_question_prompt=standalone_question_prompt, + return_source_documents=True, + combine_docs_chain_kwargs={"prompt":PROMPT}, + ) + return qa + +def run_chain(chain, prompt: str, history=[]): + print(prompt) + return chain({"question": prompt, "chat_history": history}) + +if __name__ == "__main__": + chat_history = [] + qa = build_chain() + print(bcolors.OKBLUE + "Hello! How can I help you?" + bcolors.ENDC) + print(bcolors.OKCYAN + "Ask a question, start a New search: or CTRL-D to exit." + bcolors.ENDC) + print(">", end=" ", flush=True) + for query in sys.stdin: + if (query.strip().lower().startswith("new search:")): + query = query.strip().lower().replace("new search:","") + chat_history = [] + elif (len(chat_history) == MAX_HISTORY_LENGTH): + chat_history.pop(0) + result = run_chain(qa, query, chat_history) + chat_history.append((query, result["answer"])) + print(bcolors.OKGREEN + result['answer'] + bcolors.ENDC) + if 'source_documents' in result: + print(bcolors.OKGREEN + 'Sources:') + for idx, ref in enumerate(result["source_documents"]): + print("PubMed UID: "+ref.metadata["uid"]) + print(bcolors.ENDC) + print(bcolors.OKCYAN + "Ask a question, start a New search: or CTRL-D to exit." + bcolors.ENDC) + print(">", end=" ", flush=True) + print(bcolors.OKBLUE + "Bye" + bcolors.ENDC) diff --git a/tutorials/notebooks/GenAI/example_scripts/example_vectorsearch_chat_llama_2_zeroshot.py b/tutorials/notebooks/GenAI/example_scripts/example_vectorsearch_chat_llama_2_zeroshot.py new file mode 100644 index 0000000..bcc8acb --- /dev/null +++ b/tutorials/notebooks/GenAI/example_scripts/example_vectorsearch_chat_llama_2_zeroshot.py @@ -0,0 +1,120 @@ +from langchain.chains import ConversationalRetrievalChain +from langchain.prompts import PromptTemplate +#from langchain.llms import VertexAIModelGarden +from langchain.embeddings import VertexAIEmbeddings +from langchain.vectorstores import MatchingEngine +from langchain.llms import VertexAI +import sys +import json +import os + + +class bcolors: + HEADER = '\033[95m' + OKBLUE = '\033[94m' + OKCYAN = '\033[96m' + OKGREEN = '\033[92m' + WARNING = '\033[93m' + FAIL = '\033[91m' + ENDC = '\033[0m' + BOLD = '\033[1m' + UNDERLINE = '\033[4m' + +MAX_HISTORY_LENGTH = 1 + +def build_chain(): + #if using model from uncomment Model Garden + + PROJECT_ID = os.environ["PROJECT_ID"] + LOCATION_ID = os.environ["LOCATION_ID"] + #ENDPOINT_ID = os.environ["ENDPOINT_ID"] + BUCKET = os.environ["BUCKET"] + VC_INDEX_ID = os.environ["VC_INDEX_ID"] + VC_ENDPOINT_ID = os.environ["VC_ENDPOINT_ID"] + + + #llm = VertexAIModelGarden(project=PROJECT_ID, endpoint_id=ENDPOINT_ID, location=LOCATION_ID) + llm = VertexAI( + model_name="text-bison@001", + max_output_tokens=1024, + temperature=0.2, + top_p=0.8, + top_k=40, + verbose=True, +) + embeddings = VertexAIEmbeddings() + + vector_store = MatchingEngine.from_components( + project_id=PROJECT_ID, + region=LOCATION_ID, + gcs_bucket_name=BUCKET, + embedding=embeddings, + index_id=VC_INDEX_ID, + endpoint_id=VC_ENDPOINT_ID + ) + + retriever = vector_store.as_retriever( + search_type="similarity", + search_kwargs={"k":3} + ) + + prompt_template = """ + Ignore everything before. + Instructions: + I will provide you with research papers on a specific topic in English, and you will create a cumulative summary. + The summary should be concise and should accurately and objectively communicate the takeaway of the papers related to the topic. + You should not include any personal opinions or interpretations in your summary, but rather focus on objectively presenting the information from the papers. + Your summary should be written in your own words and ensure that your summary is clear, concise, and accurately reflects the content of the original papers. First, provide a concise summary then citations at the end. + {question} Answer "don't know" if not present in the document. + {context} + Solution:""" + + + PROMPT = PromptTemplate( + template=prompt_template, input_variables=["context", "question"], + ) + + condense_qa_template = """ + Chat History: + {chat_history} + Here is a new question for you: {question} + Standalone question:""" + standalone_question_prompt = PromptTemplate.from_template(condense_qa_template) + + #RetrievalQA.from_chain_type(llm=llm, chain_type="stuff" + qa = ConversationalRetrievalChain.from_llm( + llm=llm, + retriever=retriever, + condense_question_prompt=standalone_question_prompt, + return_source_documents=True, + combine_docs_chain_kwargs={"prompt":PROMPT}, + ) + return qa + +def run_chain(chain, prompt: str, history=[]): + print(prompt) + return chain({"question": prompt, "chat_history": history}) + +if __name__ == "__main__": + chat_history = [] + qa = build_chain() + print(bcolors.OKBLUE + "Hello! How can I help you?" + bcolors.ENDC) + print(bcolors.OKCYAN + "Ask a question, start a New search: or CTRL-D to exit." + bcolors.ENDC) + print(">", end=" ", flush=True) + for query in sys.stdin: + if (query.strip().lower().startswith("new search:")): + query = query.strip().lower().replace("new search:","") + chat_history = [] + elif (len(chat_history) == MAX_HISTORY_LENGTH): + chat_history.pop(0) + result = run_chain(qa, query, chat_history) + chat_history.append((query, result["answer"])) + print(bcolors.OKGREEN + result['answer'] + bcolors.ENDC) + if 'source_documents' in result: + print(bcolors.OKGREEN + 'Sources:') + for idx, ref in enumerate(result["source_documents"]): + print(ref.page_content) + print(bcolors.ENDC) + print(bcolors.OKCYAN + "Ask a question, start a New search: or CTRL-D to exit." + bcolors.ENDC) + print(">", end=" ", flush=True) + print(bcolors.OKBLUE + "Bye" + bcolors.ENDC) diff --git a/tutorials/notebooks/GenAI/langchain_on_vertex.ipynb b/tutorials/notebooks/GenAI/langchain_on_vertex.ipynb new file mode 100644 index 0000000..ebfec60 --- /dev/null +++ b/tutorials/notebooks/GenAI/langchain_on_vertex.ipynb @@ -0,0 +1,583 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "b50f6f80-73aa-4a31-9eb5-ac30d5958fe7", + "metadata": {}, + "source": [ + "## Background\n", + "This tutorial is designed to give you the basics of using langchain to work with Large Language Models (LLMs) for document summarization and basic chat bot functionality. You could take what we have here to build a front end application using something like streamlit, or other further iterations." + ] + }, + { + "cell_type": "markdown", + "id": "5ebc47a9-958b-4250-a3bf-688e627f2c6a", + "metadata": {}, + "source": [ + "**Increase Max Tokens**" + ] + }, + { + "cell_type": "markdown", + "id": "d2f0d198-f1cf-40ec-b813-4b1e8d50ab80", + "metadata": {}, + "source": [ + "### Install packages" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8662e8f8-66ce-4ca6-a121-d087c499390f", + "metadata": {}, + "outputs": [], + "source": [ + "!pip install google-cloud-aiplatform==1.34.0 langchain==0.0.310 pypdf faiss-cpu --user" + ] + }, + { + "cell_type": "markdown", + "id": "cd534fb6-29c8-4c15-b9cc-88f667ec8127", + "metadata": {}, + "source": [ + "### Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "27e6851a-f15d-4881-8173-9b788a009201", + "metadata": {}, + "outputs": [], + "source": [ + "import langchain\n", + "from langchain.llms import VertexAI\n", + "from langchain.vectorstores import FAISS\n", + "from langchain.prompts import PromptTemplate\n", + "from langchain.schema import StrOutputParser\n", + "from langchain.document_loaders import PyPDFLoader\n", + "from langchain.embeddings import VertexAIEmbeddings\n", + "from langchain.document_loaders import WebBaseLoader\n", + "from langchain.chains.summarize import load_summarize_chain\n", + "from langchain.schema.prompt_template import format_document\n", + "from langchain.text_splitter import RecursiveCharacterTextSplitter" + ] + }, + { + "cell_type": "markdown", + "id": "73b34ed1-4ad0-4ab6-8e9f-148c6ef3f575", + "metadata": {}, + "source": [ + "## Summarize a scientific article using an LLM" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "46d1b6cc-862e-4a67-a755-fbc4f7595c6f", + "metadata": {}, + "outputs": [], + "source": [ + "loader = WebBaseLoader(\"https://pubmed.ncbi.nlm.nih.gov/37883540/\")\n", + "docs = loader.load()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e34bd138-d852-40ba-87bd-ee559483aa20", + "metadata": {}, + "outputs": [], + "source": [ + "llm = VertexAI()\n", + "print('the LLM and default params are : ', llm)\n", + "\n", + "chain = load_summarize_chain(llm, chain_type=\"stuff\")\n", + "\n", + "print('\\n''the LLM chain used is ''\\n', chain)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dee2c20d-7678-4f6d-81c7-0b2a2b62d055", + "metadata": {}, + "outputs": [], + "source": [ + "print('the summary of the document in a single paragraph is: ')\n", + "\n", + "chain.run(docs)\n" + ] + }, + { + "cell_type": "markdown", + "id": "1b1fc982-3d07-4501-8a54-6957100ebaff", + "metadata": {}, + "source": [ + "**Now try using [a different LLM](https://python.langchain.com/docs/integrations/llms/) and see if you can get the code to run!**" + ] + }, + { + "cell_type": "markdown", + "id": "3883dab5-cabd-4eea-bddc-c4c14b2bf5dc", + "metadata": {}, + "source": [ + "## Ask a general question to an LLM, without the context of a specific source" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0ad234c3-47c4-4aaf-a5b1-a3323555a8a5", + "metadata": {}, + "outputs": [], + "source": [ + "template = \"\"\"Question: {question}\n", + "\n", + "Answer: Let's think step by step.\"\"\"\n", + "\n", + "prompt = PromptTemplate.from_template(template)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "126cdbda-6446-4bbb-8018-f24fce5a7216", + "metadata": {}, + "outputs": [], + "source": [ + "chain = prompt | llm" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7323a512-5826-4498-baa6-65dca1dc6a6f", + "metadata": {}, + "outputs": [], + "source": [ + "question = \"What evidence do we have for chimpanzees going through menopause?\"\n", + "\n", + "print(chain.invoke({\"question\": question}))" + ] + }, + { + "cell_type": "markdown", + "id": "813a49df-81f4-4afa-acd6-799e4cfba921", + "metadata": {}, + "source": [ + "## Build a simple Chat Bot to query specific content" + ] + }, + { + "cell_type": "markdown", + "id": "31c47bde-210d-46d7-ab3a-43ee000d293e", + "metadata": {}, + "source": [ + "### Load your PDF file" + ] + }, + { + "cell_type": "markdown", + "id": "8a518c3b-f20c-42df-956c-2f75081c1a6f", + "metadata": {}, + "source": [ + "Read more about document loaders from langchain [here](https://python.langchain.com/docs/modules/data_connection/document_loaders/pdf). Note that we are both loading, and splitting our document. You can read more about the default document chunking/splitting procedures [here](https://python.langchain.com/docs/modules/data_connection/document_transformers/#get-started-with-text-splitters)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2c5bcbbb-8e24-424d-931d-c9b6c09fb888", + "metadata": {}, + "outputs": [], + "source": [ + "loader = PyPDFLoader(\"articles/science.add5473.pdf\")\n", + "pages = loader.load_and_split()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4a4a30a3-8a71-47ff-b264-83517e2b163a", + "metadata": {}, + "outputs": [], + "source": [ + "# you could also load from the web url\n", + "# loader = WebBaseLoader(\"https://pubmed.ncbi.nlm.nih.gov/37883540/\")\n", + "# docs = loader.load()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "745f2d86-7e59-40f0-bfea-facd6fec226f", + "metadata": {}, + "outputs": [], + "source": [ + "pages[0]" + ] + }, + { + "cell_type": "markdown", + "id": "878675c2-183c-445f-8829-b403ae3d2858", + "metadata": {}, + "source": [ + "### Create a vector store\n", + "One of the usual methods for organizing and searching through unstructured data is to convert it into embedded vectors, which are compact (numerical) representations. These vectors are stored, and when you want to find something similar, you turn your query into an embedded vector as well. A \"vector store\" then manages the stored data and helps you find the most similar vectors to your query. Read more about vector stores in langchain [here](https://python.langchain.com/docs/modules/data_connection/vectorstores/). Here we are going to use a very meta technique using the Facebook AI Similarity Search (FAISS) library. You can explore the various vector store options [here](https://python.langchain.com/docs/integrations/vectorstores/). Here we are using embeddings to downselect the total information we want to feed to the LLM downstream. As token limits go up, we will eventually be able to feed a whole document to the LLM, but for now, you will usually need to use this method to downsample. If your document is small enough, just push it directly to the LLM. Also, use embeddings for when you want to query over many documents (1000's). " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8144b302-d8a5-4c12-9e8a-8bff530c7006", + "metadata": {}, + "outputs": [], + "source": [ + "# index the document using FAISS\n", + "faiss_index = FAISS.from_documents(pages, VertexAIEmbeddings())" + ] + }, + { + "cell_type": "markdown", + "id": "9d88830a-0681-4f0b-9ea1-b0a112d27091", + "metadata": {}, + "source": [ + "Define the user query, which will also be converted to embeddings" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f394026e-f70e-4528-9f72-b35b87f1af44", + "metadata": {}, + "outputs": [], + "source": [ + "query = 'What evidence is there that chimpanzees go through menopause'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5d8aab69-2042-4b75-8f5d-f06449daf063", + "metadata": {}, + "outputs": [], + "source": [ + "docs = faiss_index.similarity_search(query, k=5)\n", + "docs[0]" + ] + }, + { + "cell_type": "markdown", + "id": "aecee51f-2305-4906-bba4-a362ee1c742d", + "metadata": {}, + "source": [ + "Now we have summaries of our query based on the article. Now we need to pass the summaries to our LLM and generate a single summary. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a6bc812d-bb3d-4d2a-97fc-344b7c120c4e", + "metadata": {}, + "outputs": [], + "source": [ + "doc_prompt = PromptTemplate.from_template(\"{page_content}\")\n", + "\n", + "chain = (\n", + " {\n", + " \"content\": lambda docs: \"\\n\\n\".join(\n", + " format_document(doc, doc_prompt) for doc in docs\n", + " )\n", + " }\n", + " | PromptTemplate.from_template(\"Summarize the following content in around 200 words:\\n\\n{content}\")\n", + " | VertexAI()\n", + " | StrOutputParser()\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "79b92df8-33db-45e6-aa67-85e2d8f18f54", + "metadata": {}, + "outputs": [], + "source": [ + "print(chain.invoke(docs))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "412cff1c-f70d-4cc6-95ea-047f882de6ec", + "metadata": {}, + "outputs": [], + "source": [ + "doc_prompt = PromptTemplate.from_template(\"{page_content}\")\n", + "\n", + "chain = (\n", + " {\n", + " \"content\": lambda docs: \"\\n\\n\".join(\n", + " format_document(doc, doc_prompt) for doc in docs\n", + " )\n", + " }\n", + " | PromptTemplate.from_template(\"Summarize the following content:\\n\\n{content}\")\n", + " | VertexAI()\n", + " | StrOutputParser()\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "e7596948-c752-42f5-a4f7-6d96bf93e20b", + "metadata": {}, + "source": [ + "Here are a few example prompts, try runnning them in the template and chain below" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e187e188-07f1-4d67-a958-8b7080d725e6", + "metadata": {}, + "outputs": [], + "source": [ + "prompt_str = \"Instructions: You need to summarize text from several documents. \\\n", + " Be professional, factual, and succinct in the response. \\\n", + " Your answer is ONLY based on information in the documents above. \\\n", + " If you can not answer the question, answer \\\n", + " I am sorry, I am unable to answer the question based on the information provided \\\n", + " ONLY use information that is based on the documents. \\\n", + " \\\n", + " Document number: \\\n", + " Documents: {content}\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "193f50a7-f5bb-4384-8326-1074750bcb70", + "metadata": {}, + "outputs": [], + "source": [ + "prompt_str = \"Instructions: You are about to receive text from several documents. \\\n", + " Based on the documents, give me five ideas for follow up studies that could be conducted. \\\n", + " Be professional, factual, and succinct in your response. \\\n", + " Your answer is ONLY based on information in the documents above. \\\n", + " If you can not answer the question, answer \\\n", + " I am sorry, I am unable to answer the question based on the information provided \\\n", + " ONLY use information that is based on the documents. \\\n", + " \\\n", + " Documents: {content}\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7d1b8228-5af6-400e-b2aa-4448d3334241", + "metadata": {}, + "outputs": [], + "source": [ + "prompt_str = \"Instructions: You are about to receive text from several documents. \\\n", + " Based on the documents, describe to me what materials would be needed to recreate the study in question. \\\n", + " Be professional, factual, and succinct in your response. \\\n", + " Your answer is ONLY based on information in the documents above. \\\n", + " If you can not answer the question, answer \\\n", + " I am sorry, I am unable to answer the question based on the information provided \\\n", + " ONLY use information that is based on the documents. \\\n", + " \\\n", + " Documents: {content}\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8f2d6717-d9e2-4365-9607-5b17afd65731", + "metadata": {}, + "outputs": [], + "source": [ + "doc_prompt = PromptTemplate.from_template(\"{page_content}\")\n", + "\n", + "chain = (\n", + " {\n", + " \"content\": lambda docs: \"\\n\\n\".join(\n", + " format_document(doc, doc_prompt) for doc in docs\n", + " )\n", + " }\n", + " | PromptTemplate.from_template(prompt_str) \n", + " | VertexAI()\n", + " | StrOutputParser()\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fde1f59f-4ca6-4ac1-a9d2-6cf9265f7e40", + "metadata": {}, + "outputs": [], + "source": [ + "print(chain.invoke(docs))" + ] + }, + { + "cell_type": "markdown", + "id": "6e8637cd-36d2-4946-b5f2-051e57a284ea", + "metadata": {}, + "source": [ + "### Deploy a local Model\n", + "If you want to avoid sending data over the internet, you can deploy a model to an endpoint following [these instructions](https://cloud.google.com/vertex-ai/docs/general/deployment)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8f114a47-90db-403f-8b32-0f40dc220877", + "metadata": {}, + "outputs": [], + "source": [ + "#model garden\n", + "#https://cloud.google.com/vertex-ai/docs/general/deployment#what_happens_when_you_deploy_a_model\n", + "from langchain.llms import VertexAIModelGarden" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2961cf2b-71d9-4ecf-a50b-8a748ba8291c", + "metadata": {}, + "outputs": [], + "source": [ + "llm = VertexAIModelGarden(\n", + " project=\"YOUR PROJECT ID\",\n", + " endpoint_id=\"YOUR ENDPOINT ID\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "05e6c4c7-e824-417a-a41a-ddd37cb4e393", + "metadata": {}, + "outputs": [], + "source": [ + "print(llm(\"What are the greatest questions left to answer in biomedical research?\"))" + ] + }, + { + "cell_type": "markdown", + "id": "58dd7731-fc36-42e9-b387-5354f7b133b9", + "metadata": {}, + "source": [ + "You can repeat any of the methods shown above, but using the locally deployed LLM." + ] + }, + { + "cell_type": "markdown", + "id": "1c9acefe-3fa7-4408-a0de-94c370d0560b", + "metadata": {}, + "source": [ + "## Generate Code" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0db1c313-b0e0-4ff2-8496-aaa9ba8e8891", + "metadata": {}, + "outputs": [], + "source": [ + "llm = VertexAI(model_name=\"code-bison\", max_output_tokens=1000, temperature=0.3)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7c527588-a71c-4719-8856-068b2bc3e7ef", + "metadata": {}, + "outputs": [], + "source": [ + "question = \"Write a python function that checks if a string is a valid email address\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e591a4d2-dabf-4d2c-a2a6-cd97b882a758", + "metadata": {}, + "outputs": [], + "source": [ + "print(llm(question))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3541e5ad-faa4-423c-ba09-ce49a7e10f7e", + "metadata": {}, + "outputs": [], + "source": [ + "question = \"Write a Nextflow module from nf-core to run bwa\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e33ba6a9-ff54-4f58-895e-cc7b8ae9b983", + "metadata": {}, + "outputs": [], + "source": [ + "print(llm(question))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "682802fa-1de6-479a-a219-e6b784e74a5c", + "metadata": {}, + "outputs": [], + "source": [ + "question = \"Write a Snakemake module from nf-core to run bwa\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "07198a26-2595-44c7-897a-7b7b9dfcd8d3", + "metadata": {}, + "outputs": [], + "source": [ + "print(llm(question))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8bc7c91c-0403-4568-9e6b-1d1767e905d3", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python (Local)", + "language": "python", + "name": "local-base" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/notebooks/GoogleBatch/.gitkeep b/tutorials/notebooks/GoogleBatch/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/tutorials/notebooks/GoogleBatch/.gitkeep @@ -0,0 +1 @@ + diff --git a/tutorials/notebooks/GoogleBatch/nextflow/Part1_GBatch_Nextflow.ipynb b/tutorials/notebooks/GoogleBatch/nextflow/Part1_GBatch_Nextflow.ipynb new file mode 100644 index 0000000..a2c1d39 --- /dev/null +++ b/tutorials/notebooks/GoogleBatch/nextflow/Part1_GBatch_Nextflow.ipynb @@ -0,0 +1,686 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "d5cdaee0-cc9d-430a-8d95-6af15b2534a8", + "metadata": {}, + "source": [ + "# Use Nextflow to run workflows using the Google Batch Part I\n", + "\n", + "\n", + "__What is Google Batch?__
\n", + "Batch allows you to schedule, queue, and execute batch processing workloads on a VM instances. Batch provisions resources and manages capacity on your behalf, allowing your batch workloads to run at scale. \n", + "\n", + "__How does Batch differ from Cloud Life Sciences?__
\n", + "You don't need to configure and manage third-party job schedulers, provision and deprovision resources, or request resources one zone at a time. To run a job, you specify parameters for the resources required for your workload, then Batch obtains resources and queues the job for execution. Batch provides native integration with other Google Cloud services to aid in the scheduling, execution, storage, and analysis of batch jobs.\n", + "\n", + "
Warning: Google Life Sciences API is depreciated and will no longer be available on GCP by July 8, 2025.
\n", + "\n", + "Here we are going to walk through submitting simple jobs directly to Google Batch, then dive into interacting with Google Batch using Nextflow. We will run some basic Hello World jobs, then move to a more complex [nf-core Methylseq workflow](https://nf-co.re/methylseq). " + ] + }, + { + "cell_type": "markdown", + "id": "0f8f4b85-9459-497d-97ec-5909e8aeacae", + "metadata": { + "id": "0f8f4b85-9459-497d-97ec-5909e8aeacae", + "tags": [] + }, + "source": [ + "## 1. Setup your environment" + ] + }, + { + "cell_type": "markdown", + "id": "f2e4a5ca-8a2b-4156-b83e-c89f0c1ffc9c", + "metadata": { + "id": "f2e4a5ca-8a2b-4156-b83e-c89f0c1ffc9c" + }, + "source": [ + "### Create a bucket" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "73c79eb1-6010-4d8a-8725-b92144bab944", + "metadata": {}, + "outputs": [], + "source": [ + "#make sure you change this name, it needs to be globally unique\n", + "%env BUCKET=gbatch-nextflow" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "44d17e57-86e8-4fce-83fe-3c33c7db9dc8", + "metadata": {}, + "outputs": [], + "source": [ + "#will only create the bucket if it doesn't yet exist\n", + "! gsutil ls gs://$BUCKET >& /dev/null || gsutil mb gs://$BUCKET" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "553761fd-4ce3-4dda-8319-a10cb9cd5314", + "metadata": {}, + "outputs": [], + "source": [ + "#set versioning on the bucket so it can overwrite old files\n", + "! gsutil versioning set on gs://$BUCKET" + ] + }, + { + "cell_type": "markdown", + "id": "f5d588a5-83b2-42ef-a65f-64b2c80bca3f", + "metadata": {}, + "source": [ + "### Install dependencies" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2acefde5-3f8a-42cb-aa12-46396eaae644", + "metadata": {}, + "outputs": [], + "source": [ + "#First install java\n", + "!sudo apt update\n", + "!sudo apt-get install default-jdk -y\n", + "!java -version" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3d8538e0-49a3-4e61-abf3-a08e1b397fcf", + "metadata": {}, + "outputs": [], + "source": [ + "#Specify nexflow version and platfrom\n", + "! export NXF_VER=21.10.0\n", + "! export NXF_MODE=google\n", + "#Install nexflow, make it exceutable, and update it\n", + "! curl https://get.nextflow.io | bash\n", + "! chmod +x nextflow\n", + "! ./nextflow self-update" + ] + }, + { + "cell_type": "markdown", + "id": "07d1891a-8338-4592-a3a0-eaab55cd8df0", + "metadata": {}, + "source": [ + "### Ensure you have APIs enabled and IAM permissions\n", + "Make sure that Batch, Compute Engine, and Cloud Storage APIs are all enabled.\n", + "\n", + "You also want to make sure your Compute Engine Default Service Account has the following Roles:\n", + "\n", + "- Service Account User\n", + "- Batch Agent Reporter \n", + "- Storage Admin\n", + "- Storage Object Admin\n", + "- Batch Job Editor
\n", + "\n", + "Your Service Account should already have these roles assigned, but if not, reach out to Support to have your account updated." + ] + }, + { + "cell_type": "markdown", + "id": "a73b5bf4-3e68-44c2-9874-02c637e730bf", + "metadata": {}, + "source": [ + "## 2. Submit Hello World to Batch Directly" + ] + }, + { + "cell_type": "markdown", + "id": "33f6045f-3336-46ae-917c-6528b4c0c0db", + "metadata": { + "tags": [] + }, + "source": [ + "#### 2.1 Submitting a job through the command line" + ] + }, + { + "cell_type": "markdown", + "id": "10c12fe3-0635-4e38-8153-51b60ff287ef", + "metadata": {}, + "source": [ + "To submit a batch job through the command line you first need to create a __json__ file this is your config file. You can use the below hello world script as a template for your batch job. We will name the file hello-world.json.\n", + "\n", + "```\n", + "{\n", + " \"taskGroups\": [\n", + " {\n", + " \"taskSpec\": {\n", + " \"runnables\": [\n", + " {\n", + " \"container\": {\n", + " \"imageUri\": \"gcr.io/google-containers/busybox\",\n", + " \"entrypoint\": \"/bin/sh\",\n", + " \"commands\": [\n", + " \"-c\",\n", + " \"echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks >> /mnt/disks/gbatch-nextflow/hello-world.txt\"\n", + " ]\n", + " }\n", + " }\n", + " ]\n", + " \"volumes\": [\n", + " {\n", + " \"gcs\": {\n", + " \"remotePath\": \"gbatch-nextflow\"\n", + " },\n", + " \"mountPath\": \"/mnt/disks/gbatch-nextflow\"\n", + " }\n", + " ],\n", + " \n", + " \"computeResource\": {\n", + " \"cpuMilli\": 2000,\n", + " \"memoryMib\": 16\n", + " },\n", + " \"maxRetryCount\": 2,\n", + " \"maxRunDuration\": \"3600s\"\n", + " },\n", + " \"taskCount\": 4,\n", + " \"parallelism\": 2\n", + " }\n", + " ],\n", + " \"allocationPolicy\": {\n", + " \"instances\": [\n", + " {\n", + " \"policy\": { \"machineType\": \"e2-standard-4\" }\n", + " }\n", + " ]\n", + " },\n", + " \"labels\": {\n", + " \"department\": \"finance\",\n", + " \"env\": \"testing\"\n", + " },\n", + " \"logsPolicy\": {\n", + " \"destination\": \"CLOUD_LOGGING\"\n", + " }\n", + "}\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "be843007-486a-433d-bdaf-91aa2168c03d", + "metadata": {}, + "source": [ + "Let break down the script:\n", + "- Our image and commands are specified in the block labeled \"container\", imageURI being the theimage busybox and our commands being to echo Hello World.\n", + " - You will notice that in the command line we have mounted our bucket this is so our output file hello-world.txt is stored into our bucket __(do not forget to change the mount path to your bucket name)__\n", + " - As you noticed there are some variables that we have added these are universal variables that Google has created that dont need to be defined beforehand, they show which task the job is working on presently and how many tasks in total this job has.\n", + "- Under the 'volume' block this is where we are specifying our Google bucket and the path we are using to mount or join our bucket to our container. __(do not forget to change the mountPath and remotePath to your bucket name)__ \n", + "- 'compute Resources' is where we define how long the script should run, how many tasks it should have and how many of thoes taks should be run in parallel at a time.\n", + "- Under 'instances' in our script is where we can specify our machine type.\n" + ] + }, + { + "cell_type": "markdown", + "id": "67b76fb0-1b4f-4b43-a27f-6046c3052858", + "metadata": {}, + "source": [ + "Now we can submit our job specifing title of the job (hello-world) the location (us-central1) and the location of our json file" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1bec6a71-f279-41c1-8965-882612a4095c", + "metadata": {}, + "outputs": [], + "source": [ + "!gcloud batch jobs submit hello-world \\\n", + " --location us-central1 \\\n", + " --config ~/hello-world.json" + ] + }, + { + "cell_type": "markdown", + "id": "1b8f7dfd-5a6a-4d04-8325-88e4210cb2c3", + "metadata": { + "id": "3cb5bd4b-032a-47f0-bee4-299a547c3b48", + "outputId": "b0e740fa-dabc-4d45-c95b-15f72d32bffa", + "tags": [] + }, + "source": [ + "#### 2.2 Submitting a job through the console" + ] + }, + { + "cell_type": "markdown", + "id": "9cfdaa37-a0d5-44b3-ad4d-dffcd45801f4", + "metadata": {}, + "source": [ + "Running a batch job through the console allows for a user-friendly view to input data and scripts and view the status of the jobs you created.\n", + "\n", + "Start by searching __'Batch'__ in the console search bar you should see a similar setting like this \n", + "\n", + "\n", + "Near the upper left corner click " + ] + }, + { + "cell_type": "markdown", + "id": "82c93eae-5424-4d77-9757-9d6cb342986c", + "metadata": {}, + "source": [ + "The follow should appear on the screen\n", + " \n", + " \n", + " \n", + " This is where you can:\n", + " - Label your job\n", + " - Select a region and zone to excecute your job\n", + " - Select your machine type (e.g. e2-medium)\n", + " - Specify tasks by adding a script and/or specifiying a container to run the task in\n", + " - Allocating resources for each task\n", + " - Add storage volume" + ] + }, + { + "cell_type": "markdown", + "id": "c812865a-6ca1-4900-b93f-1239249d952d", + "metadata": {}, + "source": [ + "Once you have entered the settings for your batch job you can even view the full script that you would submit through the command line by clicking __'EQUIVALENT COMMAND LINE'__ next to __'CREATE'__. Delete the script that is already there and paste the script we had above.\n", + "\n", + " " + ] + }, + { + "cell_type": "markdown", + "id": "5a8d633d-88d8-4db5-b834-1ce06e8cd91d", + "metadata": {}, + "source": [ + "Once you run your job by clicking __'CREATE'__.
\n", + "By clicking the job name you can view more information of the jobs setting, resources applied, and logs by clicking " + ] + }, + { + "cell_type": "markdown", + "id": "f4892a16-f4d9-4db9-a171-6e9245df2a72", + "metadata": { + "id": "f4892a16-f4d9-4db9-a171-6e9245df2a72", + "tags": [] + }, + "source": [ + "### Check job status\n", + "\n", + "You can view the status of your job by looking at the __'Job List'__ in the Google Console. Here you will see your job name, status, region, memory per task, machine type, date started and run time.\n", + "\n", + " \n", + " \n", + " \n", + "To check the job status via the command line enter the following changing the job name and location." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "411b0153-aed6-4694-b54d-af6e80db5726", + "metadata": {}, + "outputs": [], + "source": [ + "!gcloud batch jobs describe hello-world \\\n", + " --location=LOCATION" + ] + }, + { + "cell_type": "markdown", + "id": "9f056585-6c10-41b6-b7b6-0c75bebed811", + "metadata": { + "id": "9f056585-6c10-41b6-b7b6-0c75bebed811" + }, + "source": [ + "### View your output" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a86e2e14-8efe-4a36-8a5a-9d43407653c1", + "metadata": {}, + "outputs": [], + "source": [ + "! gsutil ls gs://$BUCKET/" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "02faf944-0143-49c7-bf4c-6b8e377fcd81", + "metadata": { + "id": "02faf944-0143-49c7-bf4c-6b8e377fcd81", + "outputId": "251ad4db-dcea-4d72-ff9a-01b3080acc8e" + }, + "outputs": [], + "source": [ + "! gsutil cp gs://$BUCKET/hello_world.txt .\n", + "! cat hello_world.txt" + ] + }, + { + "cell_type": "markdown", + "id": "33a142e0-bd9a-405d-91f9-827503ff5fb1", + "metadata": { + "id": "33a142e0-bd9a-405d-91f9-827503ff5fb1" + }, + "source": [ + "## 3. Run Nextflow Locally" + ] + }, + { + "cell_type": "markdown", + "id": "2457d31d-d8b7-42f1-a0be-0d88c95d4fc3", + "metadata": {}, + "source": [ + "### Nextflow 101" + ] + }, + { + "cell_type": "markdown", + "id": "b709c718-96d0-4925-99dd-525a7e7b6c76", + "metadata": { + "id": "b709c718-96d0-4925-99dd-525a7e7b6c76" + }, + "source": [ + "Nextflow interacts with many different files to have a proper working workflow:\n", + "\n", + "- __Main file__: The main file is a .nf file that holds the processes and channels describing the input, output, a shell script of your commands, workflow which acts like a recipe book for nextflow, and/or conditions. For snakemake users this is equivalent to 'rules'.\n", + " - __Process__: Contains channels and scripts that can be executed in a Linux server like bash commands.\n", + " - __Channel__: Produces ways through which processes communicate to each other for example input and output are channels of value that point the process to where data is or should be located.\n", + "- __Config file__: The .config file contains parameters, and multiple profiles. Each profile can contain a different executor type (e.g. LS API, conda, docker, etc.), memory or machine type, output directory, working directory and more!\n", + "- __Docker file__: Contains dependencies and enviroments that is needed for the nextflow workflow to run.\n", + "- __Schema file__: Schmema files are optional and are structured json files that contain information about the usage and commands that your workflow will excecute.You might have seen this when you run a command along with the flag '--help'.\n", + " " + ] + }, + { + "cell_type": "markdown", + "id": "9bea3004-ff40-4918-ac16-83aad9427ad7", + "metadata": { + "id": "9bea3004-ff40-4918-ac16-83aad9427ad7" + }, + "source": [ + "### Run a nextflow 'Hello World' process locally" + ] + }, + { + "cell_type": "markdown", + "id": "4715ef92-e3a6-44cf-9b1e-50f247dd0daf", + "metadata": { + "id": "4715ef92-e3a6-44cf-9b1e-50f247dd0daf" + }, + "source": [ + "We are going to first run Hello World locally using the config file called hello.nf. \n", + "\n", + "It should look like this:\n", + "\n", + "```\n", + "#!/usr/bin/env nextflow\n", + "nextflow.enable.dsl=2 \n", + "\n", + "params.str = 'Hello World'\n", + "\n", + "process sayHello {\n", + " input:\n", + " val str\n", + "\n", + " output:\n", + " stdout\n", + "\n", + " \"\"\"\n", + " echo $str > hello.txt\n", + " cat hello.txt\n", + " \"\"\"\n", + "}\n", + "workflow {\n", + " sayHello(params.str) | view\n", + "}\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6efad386-185b-4faf-be39-6c5a3f84ffe4", + "metadata": { + "id": "6efad386-185b-4faf-be39-6c5a3f84ffe4", + "outputId": "9554903e-f8d5-43fa-ffe9-f00ce836bf2d" + }, + "outputs": [], + "source": [ + "! ./nextflow run hello.nf --str 'Hello!'" + ] + }, + { + "cell_type": "markdown", + "id": "7619875d-7f10-4699-b4d2-120d5d7d4cd7", + "metadata": { + "id": "7619875d-7f10-4699-b4d2-120d5d7d4cd7", + "tags": [] + }, + "source": [ + "## 4. Submit Nextflow Job to the Google Batch\n", + "Create and modify your own config file to include a 'gbatch' profile block to tell Nextflow to submit the job to Google Batch instead of running locally" + ] + }, + { + "cell_type": "markdown", + "id": "ec7abe9b-dca1-4ef6-87d6-39fcdd2e3c9b", + "metadata": { + "id": "ec7abe9b-dca1-4ef6-87d6-39fcdd2e3c9b" + }, + "source": [ + "The config file allows nextflow to utilize excecuters like Google Batch. In this tutorial the config files is named __'nextflow.config'__. Make sure you open this file and update the `` that are account specific.\n", + "- Make sure that your region is a region included in the Google Batch!\n", + "- Specify your working directory bucket and output directory bucket\n", + "- Specify the machine type you would like to use, ensuring that there is enough memory and cpus for the workflow\n", + " - Otherwise Google Batch will automatically use 1 CPU\n", + "\n", + "```\n", + "profiles{\n", + " gbatch{\n", + " process.executor = 'google-batch'\n", + " workDir = 'gs:///methyl-seq'\n", + " google.location = 'us-central1'\n", + " google.region = 'us-central1'\n", + " google.project = ''\n", + " params.outdir = 'gs://methyl-seq/outdir'\n", + " process.machineType = 'c2-standard-30'\n", + " }\n", + "}\n", + "```\n", + "\n", + "__Note:__ Make sure your working directory and output directory are different! Google Batch creates temporary file in the working directory within your bucket that do take up space so once your pipeline has completed succesfully feel free to delete the temporary files." + ] + }, + { + "cell_type": "markdown", + "id": "340f7300-449a-4a12-bbc5-073547d58cac", + "metadata": { + "id": "340f7300-449a-4a12-bbc5-073547d58cac", + "tags": [] + }, + "source": [ + "### Optional: Listing nf-core tools with docker and viewing their commands\n", + "Using the command below you can see all the tools that nfcore holds and their versions/lastes releases" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ca1ff164-cee2-446e-ab2e-a3ed984e0dc0", + "metadata": { + "id": "ca1ff164-cee2-446e-ab2e-a3ed984e0dc0", + "outputId": "0530644a-dd9a-4077-dbc8-d1e335788a01", + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "! docker run nfcore/tools list" + ] + }, + { + "cell_type": "markdown", + "id": "9e46373c-61d0-4c91-b001-e55568d9fa2d", + "metadata": { + "id": "9e46373c-61d0-4c91-b001-e55568d9fa2d" + }, + "source": [ + "You can view commands for methylseq (or any other specified nf-core tool) by using the [--help] flag" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "05ea2893-60b3-4934-ae86-b07d4bc59728", + "metadata": { + "id": "05ea2893-60b3-4934-ae86-b07d4bc59728", + "outputId": "1e6de26f-0433-4bbd-8a43-119097bb1f41", + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "! ./nextflow run nf-core/methylseq -r 1.6.1 --help" + ] + }, + { + "cell_type": "markdown", + "id": "b4dbef59-d619-4444-8870-18c1f0ba3b5c", + "metadata": { + "id": "b4dbef59-d619-4444-8870-18c1f0ba3b5c", + "tags": [] + }, + "source": [ + "### Run Methylseq with the test profile" + ] + }, + { + "cell_type": "markdown", + "id": "7238bd3e-1853-42c3-9d2d-c72e46975ff2", + "metadata": { + "id": "7238bd3e-1853-42c3-9d2d-c72e46975ff2" + }, + "source": [ + "The 'test' profile uses a small dataset allowing you to ensure the workflow works with your config file without long runtimes. Ensure you include:\n", + "- Version of the nf-core tool [-r]\n", + "- Location of the config file [-c]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4b21f170-37fa-4fbc-ab83-3f6b4d386ef9", + "metadata": { + "id": "4b21f170-37fa-4fbc-ab83-3f6b4d386ef9", + "outputId": "0507c847-7f83-40af-ebf0-a1fdef27499b", + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "! ./nextflow run nf-core/methylseq -r 1.6.1 -profile test,gbatch -c nextflow-methyseq.config" + ] + }, + { + "cell_type": "markdown", + "id": "e386ccb3-aa6d-4a77-8d7d-c20ed0419f84", + "metadata": { + "id": "e386ccb3-aa6d-4a77-8d7d-c20ed0419f84" + }, + "source": [ + "You will notice in the above that to the left of the process within the __[ ]__ is actually a __tag__ you can search in Google Batch and the text before the __/__ corresponds to the __temporary directories__ within your working directory. Feel free to delete the temporary directories once your workflow has succesfully completed.\n", + "\n", + "Congrats! You are done with Part I. If you want to keep going and learn how to use the Methylseq workflow with real data, then move to Part II. If not, then feel free to clean up your resources. " + ] + }, + { + "cell_type": "markdown", + "id": "26d5ad01-cc27-4407-8434-b88d324b9e2c", + "metadata": {}, + "source": [ + "## 5. Troubleshooting" + ] + }, + { + "cell_type": "markdown", + "id": "c79edcad-7178-4219-b097-e9b21b98bcc7", + "metadata": {}, + "source": [ + "Some of the nf-core tools require extra parameters:\n", + "- If you receive a error of __'quota exceeded'__ error you can increase your boot disk size to the gbatch profile within your config file using the __google.batch.bootDiskSize__ parameter (e.g., google.batch.bootDiskSize = 100.GB)\n", + "- Some errors show that a tool could not be used, was not installed, or gives a error that doesn't really explain the reason for why the process stopped you can try to increase the process time on your profile by using the __process.time parameter__ (e.g., process.time = '2h')\n", + "- If you receive a error like below using the new release of Nextflow should fix this v23.04.0 or later\n", + "```\n", + "Caused by:\n", + " Task java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@49b3a025[Not completed, task = java.util.concurrent.Executors$RunnableAdapter@2e0ceb8c[Wrapped task = TrustedListenableFutureTask@25c1396d[status=PENDING, info=[task=[running=[NOT STARTED YET], com.google.api.gax.rpc.AttemptCallable@2db57b9a]]]]] rejected from java.util.concurrent.ScheduledThreadPoolExecutor@aa6214[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0]\n", + "\n", + "```\n", + "- adding the __-log parameter__ on the command line will help produce a log file that will help to troubleshoot other errors like so: \n", + "`./nextflow -log DIRECTORY_NAME/nextflow.log run `" + ] + }, + { + "cell_type": "markdown", + "id": "f7bf5cba-995d-4404-94d1-9bc9c4a04482", + "metadata": {}, + "source": [ + "## 6. Clean up\n", + "If you want to clean up all resources associated with this tutorial then \n", + "+ delete your bucket with `gsutil rm -r $BUCKET`\n", + "+ delete this VM in either Vertex AI or Compute Engine" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c9345ecf-4545-4772-8815-1e7a595ac2ee", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "colab": { + "name": "Workshop_2_updated.ipynb", + "provenance": [] + }, + "environment": { + "kernel": "python3", + "name": "common-cpu.m93", + "type": "gcloud", + "uri": "gcr.io/deeplearning-platform-release/base-cpu:m93" + }, + "kernelspec": { + "display_name": "Python (Local)", + "language": "python", + "name": "local-base" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/notebooks/GoogleBatch/nextflow/Part2_GBatch_Nextflow.ipynb b/tutorials/notebooks/GoogleBatch/nextflow/Part2_GBatch_Nextflow.ipynb new file mode 100644 index 0000000..50768e1 --- /dev/null +++ b/tutorials/notebooks/GoogleBatch/nextflow/Part2_GBatch_Nextflow.ipynb @@ -0,0 +1,375 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "5384eeed-e730-46e9-9e4d-7df526fb44ee", + "metadata": {}, + "source": [ + "# Use Nextflow to run workflows using the Cloud Google Batch Part II\n", + "Here we are going to build on Part I to download some real data using the SRA toolkit and then submit an nf-core Methyseq job to Google Batch." + ] + }, + { + "cell_type": "markdown", + "id": "e30edde9-dcbf-4f74-9d2a-bd4d8c15c9a9", + "metadata": {}, + "source": [ + "## 1. Optional: Setup the environment\n", + "If you did not do part 1, then set up your environment. Otherwise, skip to the next section." + ] + }, + { + "cell_type": "markdown", + "id": "c71c4052-607e-4827-8126-759a6871558c", + "metadata": {}, + "source": [ + "### Create a bucket" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cf9e21b4-07d3-4e79-9c94-067b70e78ff6", + "metadata": {}, + "outputs": [], + "source": [ + "#make sure you change this name, it needs to be globally unique\n", + "%env BUCKET=gbatch-api-nextflow" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e47789f2-e38d-46ec-8750-0a235b0c4337", + "metadata": {}, + "outputs": [], + "source": [ + "#will only create the bucket if it doesn't yet exist\n", + "! gsutil ls gs://$BUCKET >& /dev/null || gsutil mb gs://$BUCKET" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5a4ccc7d-b258-410a-85fb-f261fa0dcade", + "metadata": {}, + "outputs": [], + "source": [ + "#set versioning on the bucket so it can overwrite old files\n", + "! gsutil versioning set on gs://$BUCKET" + ] + }, + { + "cell_type": "markdown", + "id": "00dc1fb0-784f-46c7-8905-817fa3fbccb1", + "metadata": {}, + "source": [ + "### Install mambaforge\n", + "You can also use the default installed conda, but mamba is so much faster! " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0b97b0e6-d44c-40e4-a32a-33708e4ed596", + "metadata": {}, + "outputs": [], + "source": [ + "! curl -L -O https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-$(uname)-$(uname -m).sh\n", + "! bash Mambaforge-$(uname)-$(uname -m).sh -b -p $HOME/mambaforge" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "08e99d91-e356-456e-8cde-7f2819114ee2", + "metadata": {}, + "outputs": [], + "source": [ + "#add to your path\n", + "import os\n", + "os.environ[\"PATH\"] += os.pathsep + os.environ[\"HOME\"]+\"/mambaforge/bin\"" + ] + }, + { + "cell_type": "markdown", + "id": "80eb36f1-62c1-46f0-b297-6d8bc1d2e034", + "metadata": {}, + "source": [ + "### Install other dependencies " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2619673e-9645-4460-aa07-323d01bcd9ba", + "metadata": {}, + "outputs": [], + "source": [ + "#First install java\n", + "!sudo apt update\n", + "!sudo apt-get install default-jdk -y\n", + "!java -version" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c24cb2d9-6260-45fc-a4c0-f55688c43e11", + "metadata": {}, + "outputs": [], + "source": [ + "#Specify nexflow version and platfrom\n", + "! export NXF_VER=21.10.0\n", + "! export NXF_MODE=google\n", + "#Install nexflow, make it exceutable, and update it\n", + "! curl https://get.nextflow.io | bash\n", + "! chmod +x nextflow\n", + "! ./nextflow self-update" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "581f3b6a-b0b8-4309-a54b-ffff14450f41", + "metadata": {}, + "outputs": [], + "source": [ + "#Install SRAtools to download data\n", + "! mamba install -c bioconda -c conda-forge sra-tools==2.11.0 -y" + ] + }, + { + "cell_type": "markdown", + "id": "1bc477a9-7b3f-431e-93b7-50e96809bfc5", + "metadata": {}, + "source": [ + "## 2. Download data with SRA tools\n", + "If you want more work with SRA tools, check out our [SRA-focused notebook](https://github.com/STRIDES/NIHCloudLabGCP/blob/main/tutorials/notebooks/SRADownload/SRA-Download.ipynb)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "facdbaea-d6ca-4270-9ddc-7c5d042b7373", + "metadata": {}, + "outputs": [], + "source": [ + "#set up directory structure\n", + "!mkdir -p data data/fasterqdump" + ] + }, + { + "cell_type": "markdown", + "id": "e0c5eb64-8628-4849-b077-6a3b23aaf934", + "metadata": {}, + "source": [ + "First bring in the compressed .sra file" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b8ca1c0f-3844-42f8-a9e2-546178a6d961", + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "! prefetch -O data/raw_fastq -f yes SRR067701 --location GCP -v " + ] + }, + { + "cell_type": "markdown", + "id": "6ea6f3fa-1ce5-4c1a-b077-a5cb539e33b2", + "metadata": {}, + "source": [ + "Now convert the compressed .sra file to fastq. It will take about two minutes, so be patient. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6d7c1f2f-6d52-4f2f-b308-62d42c95ec1b", + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "! fasterq-dump -f -e 8 -m 24G SRR067701.sra" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "282c31da-0ce9-4e21-ab3e-07e550bc5ceb", + "metadata": {}, + "outputs": [], + "source": [ + "#compress the fastq files\n", + "! gzip data/raw_fastq/SRR067701.fastq" + ] + }, + { + "cell_type": "markdown", + "id": "805294b9-81cc-455c-9181-20fb048fb57c", + "metadata": {}, + "source": [ + "## 3. Run methylseq with Google Batch" + ] + }, + { + "cell_type": "markdown", + "id": "b7c45f87-e0b6-43c5-aa55-3ee3e33978a3", + "metadata": {}, + "source": [ + "Ensure you include the following in your command:\n", + "- nf-core tool version [-r]\n", + "- Add fastq.gz file input [--input]\n", + "- Reference Genome [--genome] (no need to have it on hand nf-core uses iGenomes and will pull in the correct reference file)\n", + "- Confile file location [-c]\n", + "- Wanted profile [-profile]\n", + "- Other flags such as:\n", + " - If the fastq file is single-ended or not\n", + " - The max cpus and memory wanted\n", + "\n", + "You can recycle the nextflow.config from Part I. Since our fastq file is pretty big, it may take some time to finish." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a24cab67-be41-4b2d-a545-7e14af554022", + "metadata": {}, + "outputs": [], + "source": [ + "!./nextflow run nf-core/methylseq -r 1.6.1 \\\n", + " --input 'data/raw_fastq/SRR067701.fastq.gz' \\\n", + " --genome GRCh38 \\\n", + " --single_end \\\n", + " -c nextflow-methyseq.config \\\n", + " -profile gbatch \\\n", + " --max_cpus 32 \\\n", + " --max_memory '110.GB'" + ] + }, + { + "cell_type": "markdown", + "id": "ab826f3b-391e-44fb-8197-e81fa8a9a614", + "metadata": {}, + "source": [ + "#### Check to see if files are in your output directory bucket\n", + "If you skipped part one, go run the first cell where you assign your bucket name to a variable. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b7484fdc-eabb-47d6-99ea-609a1574651b", + "metadata": {}, + "outputs": [], + "source": [ + "!gsutil ls gs://$BUCKET/methyl-seq/outdir" + ] + }, + { + "cell_type": "markdown", + "id": "438e8f65-e7fe-48e3-a615-e966b138c1e3", + "metadata": {}, + "source": [ + "__Optional__: View your MultiQC HTML file" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "15b74ca3-c7c7-499d-af53-ffaccc9e2157", + "metadata": {}, + "outputs": [], + "source": [ + "!gsutil cp -r gs://$BUCKET/methyl-seq/outdir/MultiQC/multiqc_report.html ." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "31c89604-b9a4-4f77-aa0c-67273a161130", + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.display import IFrame\n", + "\n", + "IFrame(src='multiqc_report.html', width=900, height=600)" + ] + }, + { + "cell_type": "markdown", + "id": "fb9abdb6-6815-4d6f-89d5-6a291e2928df", + "metadata": {}, + "source": [ + "## 4. Troubleshooting" + ] + }, + { + "cell_type": "markdown", + "id": "d44785d0-1e98-49b2-b894-79a731cab057", + "metadata": {}, + "source": [ + "Some of the nf-core tools require extra parameters:\n", + "- If you receive a error of __'quota exceeded'__ error you can increase your boot disk size to the gbatch profile within your config file using the __google.batch.bootDiskSize__ parameter (e.g., google.batch.bootDiskSize = 100.GB)\n", + "- Some errors show that a tool could not be used, was not installed, or gives a error that doesn't really explain the reason for why the process stopped you can try to increase the process time on your profile by using the __process.time parameter__ (e.g., process.time = '2h')\n", + "- If you receive a error like below using the new release of Nextflow should fix this v23.04.0 or later\n", + "```\n", + "Caused by:\n", + " Task java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@49b3a025[Not completed, task = java.util.concurrent.Executors$RunnableAdapter@2e0ceb8c[Wrapped task = TrustedListenableFutureTask@25c1396d[status=PENDING, info=[task=[running=[NOT STARTED YET], com.google.api.gax.rpc.AttemptCallable@2db57b9a]]]]] rejected from java.util.concurrent.ScheduledThreadPoolExecutor@aa6214[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0]\n", + "\n", + "```\n", + "- adding the __-log parameter__ on the command line will help produce a log file that will help to troubleshoot other errors like so: \n", + "`./nextflow -log DIRECTORY_NAME/nextflow.log run `" + ] + }, + { + "cell_type": "markdown", + "id": "5a9d0590-c4dd-48de-822f-3de5b47af4e1", + "metadata": {}, + "source": [ + "## 5. Clean Up" + ] + }, + { + "cell_type": "markdown", + "id": "4fc86196-86dc-4b8c-a86c-b4354e58d05f", + "metadata": {}, + "source": [ + "If you want to clean up all resources associated with this tutorial then \n", + "+ delete your bucket with `gsutil rm -r $BUCKET`\n", + "+ delete this VM in either Vertex AI or Compute Engine" + ] + } + ], + "metadata": { + "environment": { + "kernel": "python3", + "name": "common-cpu.m93", + "type": "gcloud", + "uri": "gcr.io/deeplearning-platform-release/base-cpu:m93" + }, + "kernelspec": { + "display_name": "Python (Local)", + "language": "python", + "name": "local-base" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/notebooks/LifeSciencesAPI/nextflow/Part1_LS_API_Nextflow.ipynb b/tutorials/notebooks/LifeSciencesAPI/nextflow/Part1_LS_API_Nextflow.ipynb new file mode 100644 index 0000000..cc6a0c2 --- /dev/null +++ b/tutorials/notebooks/LifeSciencesAPI/nextflow/Part1_LS_API_Nextflow.ipynb @@ -0,0 +1,509 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "d5cdaee0-cc9d-430a-8d95-6af15b2534a8", + "metadata": {}, + "source": [ + "# Use Nextflow to run workflows using the Cloud Life Sciences API Part I\n", + "Here we are going to walk through submitting simple jobs directly to the Life Sciences API, then dive into interacting with the API using Nextflow. We will run some basic Hello World jobs, then move to a more complex [nf-core Methylseq workflow](https://nf-co.re/methylseq). " + ] + }, + { + "cell_type": "markdown", + "id": "d5aa78f4-b8f7-4fbd-846c-09142ac36891", + "metadata": {}, + "source": [ + "
Warning: Google Life Sciences API is depreciated and will no longer be avaible by July 8, 2025 on the platform. Please switch to the Google Batch Nextflow tutorials.
" + ] + }, + { + "cell_type": "markdown", + "id": "0f8f4b85-9459-497d-97ec-5909e8aeacae", + "metadata": { + "id": "0f8f4b85-9459-497d-97ec-5909e8aeacae", + "tags": [] + }, + "source": [ + "## 1. Setup your environment" + ] + }, + { + "cell_type": "markdown", + "id": "f2e4a5ca-8a2b-4156-b83e-c89f0c1ffc9c", + "metadata": { + "id": "f2e4a5ca-8a2b-4156-b83e-c89f0c1ffc9c" + }, + "source": [ + "### Create a bucket" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "73c79eb1-6010-4d8a-8725-b92144bab944", + "metadata": {}, + "outputs": [], + "source": [ + "#make sure you change this name, it needs to be globally unique\n", + "%env BUCKET=gls-api-nextflow" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "44d17e57-86e8-4fce-83fe-3c33c7db9dc8", + "metadata": {}, + "outputs": [], + "source": [ + "#will only create the bucket if it doesn't yet exist\n", + "! gsutil ls gs://$BUCKET >& /dev/null || gsutil mb gs://$BUCKET" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "553761fd-4ce3-4dda-8319-a10cb9cd5314", + "metadata": {}, + "outputs": [], + "source": [ + "#set versioning on the bucket so it can overwrite old files\n", + "! gsutil versioning set on gs://$BUCKET" + ] + }, + { + "cell_type": "markdown", + "id": "f5d588a5-83b2-42ef-a65f-64b2c80bca3f", + "metadata": {}, + "source": [ + "### Install dependencies" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2acefde5-3f8a-42cb-aa12-46396eaae644", + "metadata": {}, + "outputs": [], + "source": [ + "#First install java\n", + "!sudo apt update\n", + "!sudo apt-get install default-jdk -y\n", + "!java -version" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3d8538e0-49a3-4e61-abf3-a08e1b397fcf", + "metadata": {}, + "outputs": [], + "source": [ + "#Specify nexflow version and platfrom\n", + "! export NXF_VER=21.10.0\n", + "! export NXF_MODE=google\n", + "#Install nexflow, make it exceutable, and update it\n", + "! curl https://get.nextflow.io | bash\n", + "! chmod +x nextflow\n", + "! ./nextflow self-update" + ] + }, + { + "cell_type": "markdown", + "id": "07d1891a-8338-4592-a3a0-eaab55cd8df0", + "metadata": {}, + "source": [ + "### Ensure you have APIs enabled and IAM permissions\n", + "Make sure that Cloud Life Sciences, Compute Engine, and Cloud Storage APIs are all enabled.\n", + "\n", + "You also want to make sure your Compute Engine Default Service Account has the following Roles:\n", + "\n", + " - lifesciences.workflowsRunner\n", + " - iam.serviceAccountUser\n", + " - serviceusage.serviceUsageConsumer\n", + " - storage.objectAdmin\n", + "Your Service Account should already have these roles assigned, but if not, reach out to Support to have your account updated." + ] + }, + { + "cell_type": "markdown", + "id": "a73b5bf4-3e68-44c2-9874-02c637e730bf", + "metadata": {}, + "source": [ + "## 2. Submit Hello World to the API" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3cb5bd4b-032a-47f0-bee4-299a547c3b48", + "metadata": { + "id": "3cb5bd4b-032a-47f0-bee4-299a547c3b48", + "outputId": "b0e740fa-dabc-4d45-c95b-15f72d32bffa" + }, + "outputs": [], + "source": [ + "! gcloud beta lifesciences pipelines run \\\n", + " --location us-central1 \\\n", + " --regions us-east1 \\\n", + " --logging gs://$BUCKET/hello_world.log \\\n", + " --command-line 'echo \"hello world!\"'" + ] + }, + { + "cell_type": "markdown", + "id": "f4892a16-f4d9-4db9-a171-6e9245df2a72", + "metadata": { + "id": "f4892a16-f4d9-4db9-a171-6e9245df2a72", + "tags": [] + }, + "source": [ + "### Check job status\n", + "To check the job status enter operation ID from the gcloud output\n", + "\n", + "Running [projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID]\n", + "The output is kind of hard to parse, but it starts at the bottom, the top is the most recent action. If you have an error, it should be towards the top. Even for this simple job, it may take a few minutes to finish all operations, so keep checking until it says `done: true` at the top. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "aa92ba73-13c8-4e90-9c41-61a6fb84bf71", + "metadata": {}, + "outputs": [], + "source": [ + "#set your operation ID here\n", + "%env ID=10485099716669037373" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9cba7c4e-4b8c-4e4c-80e4-8de1f11b5790", + "metadata": { + "id": "9cba7c4e-4b8c-4e4c-80e4-8de1f11b5790", + "outputId": "47886ae8-869f-46d3-a6fa-a2b56242be9b", + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "!gcloud beta lifesciences operations describe $ID" + ] + }, + { + "cell_type": "markdown", + "id": "9f056585-6c10-41b6-b7b6-0c75bebed811", + "metadata": { + "id": "9f056585-6c10-41b6-b7b6-0c75bebed811" + }, + "source": [ + "### View your output" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a86e2e14-8efe-4a36-8a5a-9d43407653c1", + "metadata": {}, + "outputs": [], + "source": [ + "! gsutil ls gs://$BUCKET/" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "02faf944-0143-49c7-bf4c-6b8e377fcd81", + "metadata": { + "id": "02faf944-0143-49c7-bf4c-6b8e377fcd81", + "outputId": "251ad4db-dcea-4d72-ff9a-01b3080acc8e" + }, + "outputs": [], + "source": [ + "! gsutil cp gs://$BUCKET/hello_world.log .\n", + "! cat hello_world.log" + ] + }, + { + "cell_type": "markdown", + "id": "33a142e0-bd9a-405d-91f9-827503ff5fb1", + "metadata": { + "id": "33a142e0-bd9a-405d-91f9-827503ff5fb1" + }, + "source": [ + "## 3. Run Nextflow Locally" + ] + }, + { + "cell_type": "markdown", + "id": "2457d31d-d8b7-42f1-a0be-0d88c95d4fc3", + "metadata": {}, + "source": [ + "### Nextflow 101" + ] + }, + { + "cell_type": "markdown", + "id": "b709c718-96d0-4925-99dd-525a7e7b6c76", + "metadata": { + "id": "b709c718-96d0-4925-99dd-525a7e7b6c76" + }, + "source": [ + "Nextflow interacts with many different files to have a proper working workflow:\n", + "\n", + "- __Main file__: The main file is a .nf file that holds the processes and channels describing the input, output, a shell script of your commands, workflow which acts like a recipe book for nextflow, and/or conditions. For snakemake users this is equivalent to 'rules'.\n", + " - __Process__: Contains channels and scripts that can be executed in a Linux server like bash commands.\n", + " - __Channel__: Produces ways through which processes communicate to each other for example input and output are channels of value that point the process to where data is or should be located.\n", + "- __Config file__: The .config file contains parameters, and multiple profiles. Each profile can contain a different executor type (e.g. LS API, conda, docker, etc.), memory or machine type, output directory, working directory and more!\n", + "- __Docker file__: Contains dependencies and enviroments that is needed for the nextflow workflow to run.\n", + "- __Schema file__: Schmema files are optional and are structured json files that contain information about the usage and commands that your workflow will excecute.You might have seen this when you run a command along with the flag '--help'.\n", + " " + ] + }, + { + "cell_type": "markdown", + "id": "9bea3004-ff40-4918-ac16-83aad9427ad7", + "metadata": { + "id": "9bea3004-ff40-4918-ac16-83aad9427ad7" + }, + "source": [ + "### Run a nextflow 'Hello World' process locally" + ] + }, + { + "cell_type": "markdown", + "id": "4715ef92-e3a6-44cf-9b1e-50f247dd0daf", + "metadata": { + "id": "4715ef92-e3a6-44cf-9b1e-50f247dd0daf" + }, + "source": [ + "We are going to first run Hello World locally using the config file called hello.nf. \n", + "\n", + "It should look like this:\n", + "\n", + "```\n", + "#!/usr/bin/env nextflow\n", + "nextflow.enable.dsl=2 \n", + "\n", + "params.str = 'Hello World'\n", + "\n", + "process sayHello {\n", + " input:\n", + " val str\n", + "\n", + " output:\n", + " stdout\n", + "\n", + " \"\"\"\n", + " echo $str > hello.txt\n", + " cat hello.txt\n", + " \"\"\"\n", + "}\n", + "workflow {\n", + " sayHello(params.str) | view\n", + "}\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6efad386-185b-4faf-be39-6c5a3f84ffe4", + "metadata": { + "id": "6efad386-185b-4faf-be39-6c5a3f84ffe4", + "outputId": "9554903e-f8d5-43fa-ffe9-f00ce836bf2d" + }, + "outputs": [], + "source": [ + "! ./nextflow run hello.nf --str 'Hello!'" + ] + }, + { + "cell_type": "markdown", + "id": "7619875d-7f10-4699-b4d2-120d5d7d4cd7", + "metadata": { + "id": "7619875d-7f10-4699-b4d2-120d5d7d4cd7", + "tags": [] + }, + "source": [ + "## 4. Submit Nextflow Job to the Life Sciences API\n", + "Create and modify your own config file to include a 'gls' profile block to tell Nextflow to submit the job to the API instead of running locally" + ] + }, + { + "cell_type": "markdown", + "id": "ec7abe9b-dca1-4ef6-87d6-39fcdd2e3c9b", + "metadata": { + "id": "ec7abe9b-dca1-4ef6-87d6-39fcdd2e3c9b" + }, + "source": [ + "The config file allows nextflow to utilize excecuters like Life Science API. In this tutorial the config files is named __'nextflow.config'__. Make sure you open this file and update the `` that are account specific.\n", + "- Make sure that your region is a region included in the LS API!\n", + "- Specify your working directory bucket and output directory bucket\n", + "- Specify the machine type you would like to use, ensuring that there is enough memory and cpus for the workflow\n", + " - Otherwise LS API will automatically use 1 CPU\n", + "\n", + "```\n", + "profiles{\n", + " gls{\n", + " process.executor = 'google-lifesciences'\n", + " workDir = 'gs:///methyl-seq'\n", + " google.location = 'us-central1'\n", + " google.region = 'us-central1'\n", + " google.project = ''\n", + " params.outdir = 'gs://methyl-seq/outdir'\n", + " process.machineType = 'c2-standard-30'\n", + " }\n", + "}\n", + "```\n", + "\n", + "__Note:__ Make sure your working directory and output directory are different! Life Sciences creates temporary file in the working directory within your bucket that do take up space so once your pipeline has completed succesfully feel free to delete the temporary files." + ] + }, + { + "cell_type": "markdown", + "id": "340f7300-449a-4a12-bbc5-073547d58cac", + "metadata": { + "id": "340f7300-449a-4a12-bbc5-073547d58cac", + "tags": [] + }, + "source": [ + "### Optional: Listing nf-core tools with docker and viewing their commands\n", + "Using the command below you can see all the tools that nfcore holds and their versions/lastes releases" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ca1ff164-cee2-446e-ab2e-a3ed984e0dc0", + "metadata": { + "id": "ca1ff164-cee2-446e-ab2e-a3ed984e0dc0", + "outputId": "0530644a-dd9a-4077-dbc8-d1e335788a01", + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "! docker run nfcore/tools list" + ] + }, + { + "cell_type": "markdown", + "id": "9e46373c-61d0-4c91-b001-e55568d9fa2d", + "metadata": { + "id": "9e46373c-61d0-4c91-b001-e55568d9fa2d" + }, + "source": [ + "You can view commands for methylseq (or any other specified nf-core tool) by using the [--help] flag" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "05ea2893-60b3-4934-ae86-b07d4bc59728", + "metadata": { + "id": "05ea2893-60b3-4934-ae86-b07d4bc59728", + "outputId": "1e6de26f-0433-4bbd-8a43-119097bb1f41", + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "! ./nextflow run nf-core/methylseq -r 1.6.1 --help" + ] + }, + { + "cell_type": "markdown", + "id": "b4dbef59-d619-4444-8870-18c1f0ba3b5c", + "metadata": { + "id": "b4dbef59-d619-4444-8870-18c1f0ba3b5c", + "tags": [] + }, + "source": [ + "### Run Methylseq with the test profile" + ] + }, + { + "cell_type": "markdown", + "id": "7238bd3e-1853-42c3-9d2d-c72e46975ff2", + "metadata": { + "id": "7238bd3e-1853-42c3-9d2d-c72e46975ff2" + }, + "source": [ + "The 'test' profile uses a small dataset allowing you to ensure the workflow works with your config file without long runtimes. Ensure you include:\n", + "- Version of the nf-core tool [-r]\n", + "- Location of the config file [-c]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4b21f170-37fa-4fbc-ab83-3f6b4d386ef9", + "metadata": { + "id": "4b21f170-37fa-4fbc-ab83-3f6b4d386ef9", + "outputId": "0507c847-7f83-40af-ebf0-a1fdef27499b", + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "! ./nextflow run nf-core/methylseq -r 1.6.1 -profile test,gls -c nextflow-methyseq.config" + ] + }, + { + "cell_type": "markdown", + "id": "e386ccb3-aa6d-4a77-8d7d-c20ed0419f84", + "metadata": { + "id": "e386ccb3-aa6d-4a77-8d7d-c20ed0419f84" + }, + "source": [ + "You will notice in the above that to the left of the process within the __[ ]__ is actually a __tag__ you can search in Life Sciences and the text before the __/__ corresponds to the __temporary directories__ within your working directory. Feel free to delete the temporary directories once your workflow has succesfully completed.\n", + "\n", + "Congrats! You are done with Part I. If you want to keep going and learn how to use the Methylseq workflow with real data, then move to Part II. If not, then feel free to clean up your resources. " + ] + }, + { + "cell_type": "markdown", + "id": "f7bf5cba-995d-4404-94d1-9bc9c4a04482", + "metadata": {}, + "source": [ + "## 5. Clean up\n", + "If you want to clean up all resources associated with this tutorial then \n", + "+ delete your bucket with `gsutil rm -r $BUCKET`\n", + "+ delete this VM in either Vertex AI or Compute Engine" + ] + } + ], + "metadata": { + "colab": { + "name": "Workshop_2_updated.ipynb", + "provenance": [] + }, + "environment": { + "kernel": "python3", + "name": "common-cpu.m93", + "type": "gcloud", + "uri": "gcr.io/deeplearning-platform-release/base-cpu:m93" + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/notebooks/LifeSciencesAPI/nextflow/Part2_LS_API_Nextflow.ipynb b/tutorials/notebooks/LifeSciencesAPI/nextflow/Part2_LS_API_Nextflow.ipynb new file mode 100644 index 0000000..3a24206 --- /dev/null +++ b/tutorials/notebooks/LifeSciencesAPI/nextflow/Part2_LS_API_Nextflow.ipynb @@ -0,0 +1,357 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "5384eeed-e730-46e9-9e4d-7df526fb44ee", + "metadata": {}, + "source": [ + "# Use Nextflow to run workflows using the Cloud Life Sciences API Part II\n", + "Here we are going to build on Part I to download some real data using the SRA toolkit and then submit an nf-core Methyseq job to the Cloud Life Sciences API." + ] + }, + { + "cell_type": "markdown", + "id": "9eab068b-fed8-4f80-b80f-32d538cb41c7", + "metadata": {}, + "source": [ + "
Warning: Google Life Sciences API is depreciated and will no longer be available by July 8, 2025 on the platform. Please switch to the Google Batch Nextflow tutorials.
" + ] + }, + { + "cell_type": "markdown", + "id": "e30edde9-dcbf-4f74-9d2a-bd4d8c15c9a9", + "metadata": {}, + "source": [ + "## 1. Optional: Setup the environment\n", + "If you did not do part 1, then set up your environment. Otherwise, skip to the next section." + ] + }, + { + "cell_type": "markdown", + "id": "c71c4052-607e-4827-8126-759a6871558c", + "metadata": {}, + "source": [ + "### Create a bucket" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cf9e21b4-07d3-4e79-9c94-067b70e78ff6", + "metadata": {}, + "outputs": [], + "source": [ + "#make sure you change this name, it needs to be globally unique\n", + "%env BUCKET=gls-api-nextflow" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e47789f2-e38d-46ec-8750-0a235b0c4337", + "metadata": {}, + "outputs": [], + "source": [ + "#will only create the bucket if it doesn't yet exist\n", + "! gsutil ls gs://$BUCKET >& /dev/null || gsutil mb gs://$BUCKET" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5a4ccc7d-b258-410a-85fb-f261fa0dcade", + "metadata": {}, + "outputs": [], + "source": [ + "#set versioning on the bucket so it can overwrite old files\n", + "! gsutil versioning set on gs://$BUCKET" + ] + }, + { + "cell_type": "markdown", + "id": "00dc1fb0-784f-46c7-8905-817fa3fbccb1", + "metadata": {}, + "source": [ + "### Install mambaforge\n", + "You can also use the default installed conda, but mamba is so much faster! " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0b97b0e6-d44c-40e4-a32a-33708e4ed596", + "metadata": {}, + "outputs": [], + "source": [ + "! curl -L -O https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-$(uname)-$(uname -m).sh\n", + "! bash Mambaforge-$(uname)-$(uname -m).sh -b -p $HOME/mambaforge" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "08e99d91-e356-456e-8cde-7f2819114ee2", + "metadata": {}, + "outputs": [], + "source": [ + "#add to your path\n", + "import os\n", + "os.environ[\"PATH\"] += os.pathsep + os.environ[\"HOME\"]+\"/mambaforge/bin\"" + ] + }, + { + "cell_type": "markdown", + "id": "80eb36f1-62c1-46f0-b297-6d8bc1d2e034", + "metadata": {}, + "source": [ + "### Install other dependencies " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2619673e-9645-4460-aa07-323d01bcd9ba", + "metadata": {}, + "outputs": [], + "source": [ + "#First install java\n", + "!sudo apt update\n", + "!sudo apt-get install default-jdk -y\n", + "!java -version" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c24cb2d9-6260-45fc-a4c0-f55688c43e11", + "metadata": {}, + "outputs": [], + "source": [ + "#Specify nexflow version and platfrom\n", + "! export NXF_VER=21.10.0\n", + "! export NXF_MODE=google\n", + "#Install nexflow, make it exceutable, and update it\n", + "! curl https://get.nextflow.io | bash\n", + "! chmod +x nextflow\n", + "! ./nextflow self-update" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "581f3b6a-b0b8-4309-a54b-ffff14450f41", + "metadata": {}, + "outputs": [], + "source": [ + "#Install SRAtools to download data\n", + "! mamba install -c bioconda -c conda-forge sra-tools==2.11.0 -y" + ] + }, + { + "cell_type": "markdown", + "id": "1bc477a9-7b3f-431e-93b7-50e96809bfc5", + "metadata": {}, + "source": [ + "## 2. Download data with SRA tools\n", + "If you want more work with SRA tools, check out our [SRA-focused notebook](https://github.com/STRIDES/NIHCloudLabGCP/blob/main/tutorials/notebooks/SRADownload/SRA-Download.ipynb)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "facdbaea-d6ca-4270-9ddc-7c5d042b7373", + "metadata": {}, + "outputs": [], + "source": [ + "#set up directory structure\n", + "!mkdir -p data data/fasterqdump" + ] + }, + { + "cell_type": "markdown", + "id": "e0c5eb64-8628-4849-b077-6a3b23aaf934", + "metadata": {}, + "source": [ + "First bring in the compressed .sra file" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b8ca1c0f-3844-42f8-a9e2-546178a6d961", + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "! prefetch -O data/raw_fastq -f yes SRR067701 --location GCP -v " + ] + }, + { + "cell_type": "markdown", + "id": "6ea6f3fa-1ce5-4c1a-b077-a5cb539e33b2", + "metadata": {}, + "source": [ + "Now convert the compressed .sra file to fastq. It will take about two minutes, so be patient. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6d7c1f2f-6d52-4f2f-b308-62d42c95ec1b", + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "! fasterq-dump -f -e 8 -m 24G SRR067701.sra" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "282c31da-0ce9-4e21-ab3e-07e550bc5ceb", + "metadata": {}, + "outputs": [], + "source": [ + "#compress the fastq files\n", + "! gzip data/raw_fastq/SRR067701.fastq" + ] + }, + { + "cell_type": "markdown", + "id": "805294b9-81cc-455c-9181-20fb048fb57c", + "metadata": {}, + "source": [ + "## 3. Run methylseq with Life Sciences API" + ] + }, + { + "cell_type": "markdown", + "id": "b7c45f87-e0b6-43c5-aa55-3ee3e33978a3", + "metadata": {}, + "source": [ + "Ensure you include the following in your command:\n", + "- nf-core tool version [-r]\n", + "- Add fastq.gz file input [--input]\n", + "- Reference Genome [--genome] (no need to have it on hand nf-core uses iGenomes and will pull in the correct reference file)\n", + "- Confile file location [-c]\n", + "- Wanted profile [-profile]\n", + "- Other flags such as:\n", + " - If the fastq file is single-ended or not\n", + " - The max cpus and memory wanted\n", + "\n", + "You can recycle the nextflow.config from Part I. Since our fastq file is pretty big, it may take some time to finish." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a24cab67-be41-4b2d-a545-7e14af554022", + "metadata": {}, + "outputs": [], + "source": [ + "!./nextflow run nf-core/methylseq -r 1.6.1 \\\n", + " --input 'data/raw_fastq/SRR067701.fastq.gz' \\\n", + " --genome GRCh38 \\\n", + " --single_end \\\n", + " -c nextflow-methyseq.config \\\n", + " -profile gls \\\n", + " --max_cpus 32 \\\n", + " --max_memory '110.GB'" + ] + }, + { + "cell_type": "markdown", + "id": "ab826f3b-391e-44fb-8197-e81fa8a9a614", + "metadata": {}, + "source": [ + "#### Check to see if files are in your output directory bucket\n", + "If you skipped part one, go run the first cell where you assign your bucket name to a variable. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b7484fdc-eabb-47d6-99ea-609a1574651b", + "metadata": {}, + "outputs": [], + "source": [ + "!gsutil ls gs://$BUCKET/methyl-seq/outdir" + ] + }, + { + "cell_type": "markdown", + "id": "438e8f65-e7fe-48e3-a615-e966b138c1e3", + "metadata": {}, + "source": [ + "__Optional__: View your MultiQC HTML file" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "15b74ca3-c7c7-499d-af53-ffaccc9e2157", + "metadata": {}, + "outputs": [], + "source": [ + "!gsutil cp -r gs://$BUCKET/methyl-seq/outdir/MultiQC/multiqc_report.html ." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "31c89604-b9a4-4f77-aa0c-67273a161130", + "metadata": {}, + "outputs": [], + "source": [ + "from IPython.display import IFrame\n", + "\n", + "IFrame(src='multiqc_report.html', width=900, height=600)" + ] + }, + { + "cell_type": "markdown", + "id": "5a9d0590-c4dd-48de-822f-3de5b47af4e1", + "metadata": {}, + "source": [ + "## 4. Clean Up" + ] + }, + { + "cell_type": "markdown", + "id": "4fc86196-86dc-4b8c-a86c-b4354e58d05f", + "metadata": {}, + "source": [ + "If you want to clean up all resources associated with this tutorial then \n", + "+ delete your bucket with `gsutil rm -r $BUCKET`\n", + "+ delete this VM in either Vertex AI or Compute Engine" + ] + } + ], + "metadata": { + "environment": { + "kernel": "python3", + "name": "common-cpu.m93", + "type": "gcloud", + "uri": "gcr.io/deeplearning-platform-release/base-cpu:m93" + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/notebooks/LifeSciencesAPI/snakemake/LS_API_Snakemake.ipynb b/tutorials/notebooks/LifeSciencesAPI/snakemake/LS_API_Snakemake.ipynb new file mode 100644 index 0000000..70d0ebf --- /dev/null +++ b/tutorials/notebooks/LifeSciencesAPI/snakemake/LS_API_Snakemake.ipynb @@ -0,0 +1,547 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "99cfa998-06b6-4b42-ae3a-b4e011750d31", + "metadata": {}, + "source": [ + "# RNA-Seq Analysis using Snakemake and Google Cloud Life Sciences API" + ] + }, + { + "cell_type": "markdown", + "id": "4126cb07-34ee-4780-838f-872015a882b3", + "metadata": {}, + "source": [ + "## Overview" + ] + }, + { + "cell_type": "markdown", + "id": "f15ea992-faa6-4705-8384-eb5d81f5daff", + "metadata": {}, + "source": [ + "This short tutorial demonstrates how to run an RNA-Seq workflow using a prokaryotic data set. Steps in the workflow include read trimming, read QC, read mapping, and counting mapped reads per gene to quantitate gene expression. This tutorial uses a popular workflow manager called [Snakemake](https://snakemake.readthedocs.io/en/stable/) run via the [Google Cloud Life Sciences API](https://cloud.google.com/life-sciences/docs/reference/rest).\n", + "\n", + "
Warning: Google Life Sciences API is depreciated and has been replaced by Google Batch. Currently Snakemake only supports Google Life Sciences API which will no longer be available by July 8, 2025, visit Snakemake Cloud Execution for updates and instruction for utilizing Google Batch.
" + ] + }, + { + "cell_type": "markdown", + "id": "0b6d0785-2d13-476c-b16a-196f74ea277d", + "metadata": {}, + "source": [ + "### Step 1: Create a new GS Bucket to store input and output files\n", + "Note that your bucket has to be globally unique, so make sure you don't just copy the example here or it won't work" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4d3dc88f-fa0c-4e7e-972b-055321d3cdbb", + "metadata": {}, + "outputs": [], + "source": [ + "#change this bucket name\n", + "%env BUCKET=" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "17ce680c-4b8c-419c-a6c4-b6caec32d9ba", + "metadata": {}, + "outputs": [], + "source": [ + "#will only create the bucket if it doesn't yet exist\n", + "! gsutil ls gs://$BUCKET >& /dev/null || gsutil mb gs://$BUCKET" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "91292c6d-d5a4-407d-9816-51ca52876fba", + "metadata": {}, + "outputs": [], + "source": [ + "#set versioning on the bucket so it can overwrite old files\n", + "! gsutil versioning set on gs://$BUCKET" + ] + }, + { + "cell_type": "markdown", + "id": "dd7ab630-955d-43d1-bc43-c7b3e701ed04", + "metadata": { + "tags": [] + }, + "source": [ + "### STEP 2: Install mambaforge and snakemake\n", + "First install mambaforge, then use mamba to install snakemake." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "682ddf88-e1d9-443f-a423-e1f85ff604a2", + "metadata": {}, + "outputs": [], + "source": [ + "! curl -L -O https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-$(uname)-$(uname -m).sh\n", + "! bash Mambaforge-$(uname)-$(uname -m).sh -b -p $HOME/mambaforge" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "de5d0630-1d85-4625-bc04-036aae11ce4a", + "metadata": {}, + "outputs": [], + "source": [ + "#add to your path\n", + "import os\n", + "os.environ[\"PATH\"] += os.pathsep + os.environ[\"HOME\"]+\"/mambaforge/bin\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bd5c221b-45ce-47fb-a8e2-29ceee0e296a", + "metadata": {}, + "outputs": [], + "source": [ + "#install snakemake\n", + "! mamba install -y -c conda-forge -c bioconda snakemake" + ] + }, + { + "cell_type": "markdown", + "id": "bb0ce8d5-4b96-4e97-88ed-44e8e85f4fc0", + "metadata": {}, + "source": [ + "### STEP 3: Copy FASTQ Files\n", + "In order for this tutorial to run quickly, we will only analyze 50,000 reads from a sample from both sample groups instead of analyzing all the reads from all six samples. These files have been posted on a Google Storage Bucket that we made publicly accessible." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5f3795fd-3e03-476d-9abf-49705a72cc15", + "metadata": {}, + "outputs": [], + "source": [ + "! gsutil -m cp -r gs://nigms-sandbox/me-inbre-rnaseq-pipelinev2/data/raw_fastqSub/ gs://$BUCKET/data/raw_fastq" + ] + }, + { + "cell_type": "markdown", + "id": "a2bc4563-951a-45d4-8f01-0accd6b80ea8", + "metadata": {}, + "source": [ + "Create a fake path to data/fastqc so that snakemake can write files to that bucket path, otherwise the pipeline crashes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cd2c03dd-2248-4068-8842-ba130f29adc9", + "metadata": {}, + "outputs": [], + "source": [ + "! touch blank.txt\n", + "! gsutil cp blank.txt gs://$BUCKET/data/fastqc/" + ] + }, + { + "cell_type": "markdown", + "id": "ec692c28-f549-43af-bbdf-3c4266fb59ae", + "metadata": {}, + "source": [ + "### STEP 4: Copy reference files that will be used by Salmon\n", + "Salmon is a tool that aligns RNA-Seq reads to a set of transcripts rather than the entire genome." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "290238d6-39e0-4575-87e4-880b316ca1f6", + "metadata": {}, + "outputs": [], + "source": [ + "! gsutil -m cp -r gs://nigms-sandbox/me-inbre-rnaseq-pipelinev2/data/reference/M_chelonae_transcripts.fasta gs://$BUCKET/data/reference/M_chelonae_transcripts.fasta\n", + "! gsutil -m cp -r gs://nigms-sandbox/me-inbre-rnaseq-pipelinev2/data/reference/decoys.txt gs://$BUCKET/data/reference/decoys.txt\n" + ] + }, + { + "cell_type": "markdown", + "id": "ea2d17cb-dff6-45d3-9aef-3ec6203508f6", + "metadata": { + "tags": [] + }, + "source": [ + "### STEP 5: Copy data file for Trimmomatic" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0be371d5-382e-4a22-a300-2c5249eff825", + "metadata": {}, + "outputs": [], + "source": [ + "! gsutil -m cp gs://nigms-sandbox/me-inbre-rnaseq-pipelinev2/config/TruSeq3-PE.fa gs://$BUCKET/TruSeq3-PE.fa" + ] + }, + { + "cell_type": "markdown", + "id": "5ac668db-7851-418e-9b1e-0a2c4abbab6e", + "metadata": {}, + "source": [ + "### STEP 6: Copy data and config files that will be used in our snakemake environment\n", + "\n", + "Next download config files for our snakemake environment." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1dbc460c-50af-4458-8056-c0f6146fff23", + "metadata": {}, + "outputs": [], + "source": [ + "! gsutil -m cp -r gs://nigms-sandbox/me-inbre-rnaseq-pipelinev2/envs/ .\n", + "! gsutil -m cp gs://nigms-sandbox/me-inbre-rnaseq-pipelinev2/config.yaml .\n", + "! gsutil -m cp gs://nigms-sandbox/me-inbre-rnaseq-pipelinev2/snakefile_ls_api ." + ] + }, + { + "cell_type": "markdown", + "id": "ab3739b6-aa4e-439e-bd73-2ea43be1801b", + "metadata": {}, + "source": [ + "Add the bucket path to the end of your config file. Since this file was written for running snakemake locally we have to make a few edits to run on the LS API." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "737c0634-171e-489b-8cfb-e93a025cbd01", + "metadata": {}, + "outputs": [], + "source": [ + "! echo 'bucket:' >> config.yaml" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4fd4c713-8882-4833-a117-706a4b239374", + "metadata": {}, + "outputs": [], + "source": [ + "! echo ' '$BUCKET >>config.yaml" + ] + }, + { + "cell_type": "markdown", + "id": "e45fe428-b9fa-46cb-a69d-2a0e989292e1", + "metadata": {}, + "source": [ + "Add bucket path to the snakefile" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3bba277a-704a-41ab-8853-7cf324dde727", + "metadata": {}, + "outputs": [], + "source": [ + "! sed -i 's/print(SAMPLES)/BUCKET=config[\"bucket\"]/' snakefile_ls_api" + ] + }, + { + "cell_type": "markdown", + "id": "cfc635b4-ed50-4a92-8018-f402fdd563b9", + "metadata": {}, + "source": [ + "### Step 7: Set up your local environment\n", + "You need to generate a [service account key](https://cloud.google.com/iam/docs/creating-managing-service-account-keys) for the compute engine default service account to interact with the Life Sciences API using Snakemake. Download the key and copy it to this VM. Then assign the path of the json file to an environment variable." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0e93d6ca-5afe-4f12-9401-be44ce7ac7d9", + "metadata": {}, + "outputs": [], + "source": [ + "%env GOOGLE_APPLICATION_CREDENTIALS=cloud_creds.json" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e629d7a5-4ef7-408b-88ff-3c52201879a1", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "os.environ[\"GOOGLE_APPLICATION_CREDENTIALS\"]" + ] + }, + { + "cell_type": "markdown", + "id": "a04afc6c-41cc-46c9-b048-08a7677699c8", + "metadata": {}, + "source": [ + "Set your project (make sure to replace $Project with your project name)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "10f587c6-9d51-4433-bf13-bec6dabcb9d8", + "metadata": {}, + "outputs": [], + "source": [ + "!gcloud config set project $PROJECT" + ] + }, + { + "cell_type": "markdown", + "id": "f7d3b561-7213-4b60-9f8f-c511c6fdc067", + "metadata": {}, + "source": [ + "Initialize a local git repo" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6d56605b-04bd-48fa-94c0-ba7fffdf08a2", + "metadata": {}, + "outputs": [], + "source": [ + "! git init" + ] + }, + { + "cell_type": "markdown", + "id": "f56458ef-e475-4a48-b24b-e903f82eb996", + "metadata": {}, + "source": [ + "Configure conda" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f72b8fce-be20-4158-8bd5-00b2ad122414", + "metadata": {}, + "outputs": [], + "source": [ + "conda config --set channel_priority strict" + ] + }, + { + "cell_type": "markdown", + "id": "ec2c0273-c7f1-4aee-bdf3-43d5773cf2fa", + "metadata": {}, + "source": [ + "### STEP 8: Run snakemake using the Life Sciences API\n", + "\n", + "Aside from the .yaml config files which information about software, dependencies, and versions -- snakemake uses a snakefile which contains information about a workflow.\n", + "\n", + "This can be a powerful tool as it allows one to operate and think in terms of workflows instead of individual steps. You should open the snakefile to look at it further. It is composed of 'rules' we have created. Snakefiles work largely based on inputs. For a given input/output, there is an associated 'rule' that runs. Snakefiles may take a while to get the idea of what's going on, but in simplest terms here we take an input of .fastq files, and based on the snakefile rules we created, those fastq files are run through the entire workflow. The rule_all at the top determines which rules are run based on the input files for rule_all (which are outputs from the target rules. Comment out rules you don't want to run. " + ] + }, + { + "cell_type": "markdown", + "id": "d8bf3f71-e394-41c6-9694-b5d4b24cb265", + "metadata": {}, + "source": [ + "Snakemake requires that you have a service account key to authenticate with the Life Sciences API. This actually is not necessary to use the API from within a notebook, but Snakemake does require it since Snakemake is expecting you to run the command from your own terminal using the SDK. To see all the commands you can run with Snakemake via the Life Sciences API, check out the [docs](https://snakemake.readthedocs.io/en/stable/executor_tutorial/google_lifesciences.html)." + ] + }, + { + "cell_type": "markdown", + "id": "67c95e75-1619-4694-9411-95edc9f4cee4", + "metadata": {}, + "source": [ + "Now we can run the Life Sciences APi. You will see that each rule is submitted as a separate job. If the pipeline crashes, the way to troubleshoot is by reading the API logs, or the snakemake rule logs (same info). You can find the Life Sciences API logs by pasting in the gcloud command given in yellow.\n", + "\n", + "For example: \n", + "```\n", + "gcloud beta lifesciences operations describe \n", + "```\n", + "Or you can view the logs by finding the path given for logs, and then use gsutil to copy that file locally, or go to the bucket and double click the file. You can get the job ID for the output file in the green section of the rule print out." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bee32318-33df-43b2-98bc-5eb091ceae59", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "%%time\n", + "! snakemake --forceall --snakefile snakefile_ls_api --google-lifesciences --default-remote-prefix $BUCKET --use-conda --google-lifesciences-region us-central1 -j 24 --rerun-incomplete --default-resources \"machine_type=n2-standard\"" + ] + }, + { + "cell_type": "markdown", + "id": "df9deb0a-1030-4839-aa16-37c3b32a2c87", + "metadata": {}, + "source": [ + "### STEP 9: Report the top 10 most highly expressed genes in the samples." + ] + }, + { + "cell_type": "markdown", + "id": "d50f9bd2-dbd2-467f-a9b6-313e63ad304b", + "metadata": {}, + "source": [ + "Top 10 most highly expressed genes in the wild-type sample. The level of expression is reported in the Transcripts Per Million (`TPM`) and number of reads (`NumReads`) fields: \n", + "`Name Length EffectiveLength TPM NumReads`\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0676cbbc-9392-41d1-ab57-e2b4f3cc9aad", + "metadata": {}, + "outputs": [], + "source": [ + "! gsutil rm gs://$BUCKET/data/quants/SRR13349122_quant\n", + "! gsutil rm gs://$BUCKET/data/quants/SRR13349128_quant" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b032ce69-f62d-4f5f-90a3-68c2979d9a85", + "metadata": {}, + "outputs": [], + "source": [ + "! gsutil ls gs://$BUCKET/data/quants/*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c98fd827-6829-400d-af8c-969ad196c3d2", + "metadata": {}, + "outputs": [], + "source": [ + "! gsutil cp -r gs://$BUCKET/data/quants/SRR13349122_quant/ .\n", + "! gsutil cp -r gs://$BUCKET/data/quants/SRR13349128_quant/ ." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7776f671-30a0-4ba8-a9cc-e3434d40cc48", + "metadata": {}, + "outputs": [], + "source": [ + "! sort -nrk 5,5 SRR13349122_quant/quant.sf | head -10" + ] + }, + { + "cell_type": "markdown", + "id": "678efdde-1782-4481-9240-054c34528163", + "metadata": {}, + "source": [ + "Top 10 most highly expressed genes in the double lysogen sample.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1ceee200-b741-4954-b950-85edec98eb90", + "metadata": {}, + "outputs": [], + "source": [ + "! sort -nrk 5,5 SRR13349128_quant/quant.sf | head -10" + ] + }, + { + "cell_type": "markdown", + "id": "50169f62-e707-4d84-b301-ded51a704130", + "metadata": {}, + "source": [ + "### STEP 10: Report the expression of a putative acyl-ACP desaturase (BB28_RS16545) that was downregulated in the double lysogen relative to wild-type\n", + "A acyl-transferase was reported to be downregulated in the double lysogen as shown in the table of the top 20 upregulated and downregulated genes from the paper describing the study.\n", + "![RNA-Seq workflow](images/table-cushman.png)" + ] + }, + { + "cell_type": "markdown", + "id": "5b3794b0-a477-45fa-aa51-4414d7671441", + "metadata": {}, + "source": [ + "Use `grep` to report the expression in the wild-type sample. The fields in the Salmon `quant.sf` file are as follows. The level of expression is reported in the Transcripts Per Million (`TPM`) and number of reads (`NumReads`) fields: \n", + "`Name Length EffectiveLength TPM NumReads`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a3cb9340-682b-4177-837d-7d803a9775a5", + "metadata": {}, + "outputs": [], + "source": [ + "! grep 'BB28_RS16545' SRR13349122_quant/quant.sf" + ] + }, + { + "cell_type": "markdown", + "id": "79ba6401-261d-43e9-b831-ef76122da623", + "metadata": {}, + "source": [ + "Use `grep` to report the expression in the double lysogen sample. The fields in the Salmon `quant.sf` file are as follows. The level of expression is reported in the Transcripts Per Million (`TPM`) and number of reads (`NumReads`) fields: \n", + "`Name Length EffectiveLength TPM NumReads`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "745ea1c5-79d3-481c-9359-6e0a93b9a286", + "metadata": {}, + "outputs": [], + "source": [ + "! grep 'BB28_RS16545' SRR13349128_quant/quant.sf" + ] + } + ], + "metadata": { + "environment": { + "kernel": "python3", + "name": "tf2-gpu.2-11.m110", + "type": "gcloud", + "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-11:m110" + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/notebooks/README.md b/tutorials/notebooks/README.md new file mode 100644 index 0000000..415ded9 --- /dev/null +++ b/tutorials/notebooks/README.md @@ -0,0 +1,128 @@ +# GCP Tutorial Resources + +_We have pulled together a variety of tutorials here from disparate sources. Some use Compute Engine, others use Vertex AI notebooks and others use only managed services. Tutorials are organized by research method, but we try to designate what GCP services are used as well to help you navigate._ +--------------------------------- +## Overview of Page Contents + ++ [Biomedical Workflows on GCP](#bds) ++ [Artificial Intelligence and Machine Learning](#ml) ++ [Medical Imaging](#mi) ++ [Download SRA Data](#sra) ++ [Variant Calling](#vc) ++ [VCF Query](#vcf) ++ [GWAS](#gwas) ++ [Proteomics](#pro) ++ [RNAseq and Transcriptome Assembly](#rna) ++ [scRNAseq](#sc) ++ [ATACseq and scATACseq](#atac) ++ [Methylseq](#ms) ++ [Metagenomics](#meta) ++ [Multiomics and Biomarker Analysis](#mo) ++ [BLAST+](#bl) ++ [Long Read Sequencing Analysis](#long) ++ [Drug Discovery](#atom) ++ [Using Google Batch](#gbatch) ++ [Using the Life Sciences API (depreciated)](#lsapi) ++ [Public Data Sets](#pub) + +## **Biomedical Workflows on GCP** +There are a lot of ways to run workflows on GCP. Here we list a few possibilities each of which may work for different research aims. As you walk through the various tutorials below, think about how you could possibly run that workflow more efficiently using one of the other methods listed here. + +- The simplest method is probably to spin up a Compute Engine instance, and run your command interactively, or using `screen` or, as a [startup script](https://cloud.google.com/compute/docs/instances/startup-scripts/linux) attached as metadata. +- You could also run your pipeline via a Vertex AI notebook, either by splitting out each command as a different block, or by running a workflow manager (Nextflow etc.). [Schedule notebooks](https://codelabs.developers.google.com/vertex_notebook_executor#0) to let them run longer. +You can find a nice tutorial for using managed notebooks [here](https://codelabs.developers.google.com/vertex_notebook_executor#0). Note that there is now a difference between `managed notebooks` and `user managed notebooks`. The `managed notebooks` have more features and can be scheduled, but give you less control about conda environments/install. +- You can interact with [Google Batch](https://cloud.google.com/batch/docs/get-started), or the [Google Life Sciences API](https://cloud.google.com/life-sciences/docs/reference/rest) using a workflow manager like [Nextflow](https://cloud.google.com/life-sciences/docs/tutorials/Nextflow), [Snakemake](https://snakemake.github.io/snakemake-plugin-catalog/plugins/executor/googlebatch.html), or [Cromwell](https://github.com/GoogleCloudPlatform/rad-lab/tree/main/modules/genomics_cromwell). We currently have example notebooks for both [Nextflow and Snakemake that use the Life Sciences API](/notebooks/LifeSciencesAPI/), as well as [Google Batch with Nextflow](/notebooks/GoogleBatch/Nextflow) as well as a [local version of Snakemake run via Pangolin](/notebooks/pangolin). +- You may find other APIs better suite your needs such as the [Google Cloud Healthcare Data Engine](https://cloud.google.com/healthcare). +- Most of the notebooks below require just a few CPUs. Start small (maybe 4 CPUs), then scale up as needed. Likewise, when you need a GPU, start with a smaller or older generation GPU (e.g. T4) for testing, then switch to a newer GPU (A100/V100) once you know things will work or you need more compute power. + +## **Artificial Intelligence and Machine Learning** +Machine learning is a subfield of artificial intelligence that focuses on the development of algorithms and models that enable computers to learn from and make predictions or decisions based on data, without being explicitly programmed. Machine learning on GCP generally occurs within VertexAI. You can learn more about machine learning on GCP at this [Google Crash Course](https://developers.google.com/machine-learning/crash-course). For hands-on examples, try out [this module](https://github.com/NIGMS/COVIDMachineLearningSFSU) developed by San Francisco State University or [this one from the University of Arkasas](https://github.com/NIGMS/MachineLearningUA) developed for the NIGMS Sandbox Project. + +Now that the age of **Generative AI** (Gen AI) has arrived, Google has released a host of Gen AI offerings within the Vertex AI suite. Some examples of what generative AI models are capable of are extracting wanted information from text, transforming speech into text, generating images from descriptions and vice versa, and much more. Vertex AI's [Vertex AI Studio](https://cloud.google.com/vertex-ai/docs/generative-ai/learn/generative-ai-studio) console allows the user to rapidly create, test, and train generative AI models on the cloud in a safe and secure setting, see our overview in [this tutorial](/notebooks/GenAI/VertexAIStudioGCP.ipynb). The studio also has ready-to-use models all contained within the [Model Garden](https://cloud.google.com/vertex-ai/docs/start/explore-models). These models range from foundation models, fine-tunable models, and task-specific solutions. +- To learn more about Gen AI on GCP take a look at our [GenAI tutorials](/notebooks/GenAI) that go over several GCP products such as [Gemini](/notebooks/GenAI/Gemini_Intro.ipynb) and [Vector Search](/notebooks/GenAI/GCP_Pubmed_chatbot.ipynb) and other tools like [Langchain](/notebooks/GenAI/langchain_on_vertex.ipynb) and [Huggingface](/notebooks/GenAI/GCP_GenAI_Huggingface.ipynb) to deploy, train, prompt, and implement techniques like [Retrieval-Augmented Generation (RAG)](/notebooks/GenAI/GCP_Pubmed_chatbot.ipynb) to GenAI models. +- Google also provides many generative AI tutorials hosted on [GitHub](https://github.com/GoogleCloudPlatform/generative-ai/tree/main). Some example they provide are under [language here](https://github.com/GoogleCloudPlatform/generative-ai/tree/main/language). + +## **Medical Image Segmentation** +Medical image analysis is the application of computational algorithms and techniques to extract meaningful information from medical images for diagnosis, treatment planning, and research purposes. Medical image analysis requires large image files and often elastic storage and accelerated computing. +- Most medical imaging analyses are done in notebooks, so we would recommend downloading the Jupyter Notebook from [here](/notebooks/SpleenLiverSegmentation) and then importing or cloning it into VertexAI. The tutorial walks through image segmentation using the Monai framework. +- You can also request early access to the new [Google Medical Imaging Suite](https://cloud.google.com/medical-imaging) to see if it would fit your use case. + +## **Download Data From the Sequence Read Archive (SRA)** +Next Generation genetic sequence data is housed in the NCBI Sequence Read Archive (SRA). You can access these data using the SRA Toolkit. We walk you through this using [this notebook](/notebooks/SRADownload), including how to use BigQuery to generate your list of Accessions. You can also use BigQuery to create a list of accessions for download using [this setup guide](https://www.ncbi.nlm.nih.gov/sra/docs/sra-bigquery/) and this [query guide](https://www.ncbi.nlm.nih.gov/sra/docs/sra-bigquery-examples/). Additional example notebooks can be found at this [NCBI repo](https://github.com/ncbi/ASHG-Workshop-2021). In particular, we recommend this notebook(https://github.com/ncbi/ASHG-Workshop-2021/blob/main/1_Basic_BigQuery_Examples.ipynb), which goes into more detail on using BigQuery to access the results of the SRA Taxonomic Analysis Tool, which often differ from the user input species name due to contamination, error, or due to samples being metagenomic in nature. Further, [this notebook](https://github.com/ncbi/ASHG-Workshop-2021/blob/main/2_Array_Examples.ipynb) does a deep dive on parsing the BigQuery results and may give you some good ideas on how to search for samples from SRA. The SRA metadata and taxonomy analyses are in separate BigQuery tables, you can learn how to join those two tables using SQL from [this Powerpoint](https://github.com/NCBI-Codeathons/NCGAS-cloud-workshop/blob/main/5_BigQuery.pptx) or from our tutorial [here](/notebooks/ncbi-stat-tutorial/). Finally, NCBI released [this workshop](https://github.com/ncbi/workshop-asm-ngs-2022/wiki) that walks through a wide variety of BigQuery applications with NCBI datasets. + +## **Variant Calling** +Genomic variant calling is the process of identifying and characterizing genetic variations from DNA sequencing data to understand differences in an individual's genetic makeup. +- This [Google tutorial](https://cloud.google.com/life-sciences/docs/tutorials/gatk) shows you how to run the GATK Best Practices pipeline for genomic variant calling using the Life Sciences API. There is a section about increasing your account quotas, you can skip that. You could also run GATK using any of the workflow managers and submitting to the Life Sciences API. +- One tutorial specific to somatic variant calling comes from the Sheffield Bioinformatics Core [here](https://sbc.shef.ac.uk/somatic-variants/index.nb.html). It runs on Galaxy, but can be adapted to run in GCP. At the very least, the [data](https://drive.google.com/drive/folders/1RhrmfW3vMhPwAiBGdFIKfINWMsdvIG6E) may prove useful to you. + +## **Query a VCF file in Big Query** +The output of genomic variant calling workflows is a file in the variant call format (VCF). These are often large, structured data files that can be searched using database query tools such as Big Query. +- Learn how to use Big Query to run queries against large VCF files from Gnomad data using [this notebook](https://github.com/GoogleCloudPlatform/rad-lab/blob/main/modules/data_science/scripts/build/notebooks/Exploring_gnomad_on_BigQuery.ipynb). If any cells give you errors, try running that cell again and it should work, there seems to be some lag time between cells. + +## **Genome Wide Association Studies** +Genome-wide association studies (GWAS) are large-scale investigations that analyze the genomes of many individuals to identify common genetic variants associated with traits, diseases, or other phenotypes. +- This [NIH CFDE written tutorial](https://training.nih-cfde.org/en/latest/Bioinformatic-Analyses/GWAS-in-the-cloud +) walks you through running a simple GWAS using AWS, thus we have rewritten it as a notebook to work on GCP [here](/notebooks/GWASCoatColor). Make sure you select R as your kernel when you spin up your notebook so that you can switch between R and Python (this only applies to 'User Managed Notebooks') but note that our team experienced conda permission issues with the new Managed Notebooks for this tutorial, so we recommend using the 'User Managed Notebooks'. Also, if the imported notebook has cells already printed out, just go to Kernel > Restart Kernel and Clear all Outputs. +- [This tutorial](https://github.com/david-thrower-nih/DL-gwas-gcp-example) from NIH NIEHS (credit to David Thrower) builds on a published deep learning method for GWAS of soybeans and users Kubeflow and AutoML on a Kubernetes instance. + +## **Proteomics** +Proteomics is the study of the entire set of proteins in a cell, tissue, or organism, aiming to understand their structure, function, and interactions to uncover insights into biological processes and diseases. Although most primary proteomic analyses occur in proprietary software platforms, a lot of secondary analysis happens in Jupyter or R notebooks, we give several examples here: +- Use Big Query to run a Kruskal Wallis Test on Proteomics data using [these notebooks](https://github.com/isb-cgc/Community-Notebooks/tree/master/FeaturedNotebooks). Clone the repo into Vertex AI, or just drag the notebooks into a Vertex AI Workbench instance. In the notebook titled 'ACM_BCB_2020_POSTER_KruskalWallisTest_ProteinGeneExpression_vs_ClinicalFeatures.ipyng', the first BigQuery cell may throw an error, but ignore this and keep going, the rest of the notebook should run fine. Also, in that first big cell, make sure you add your Project ID. See this [doc](/docs/protein_setup.md) for environment setup instructions. +- Run AlphaFold in Vertex AI using [this notebook](https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/community-content/alphafold_on_workbench/AlphaFold.ipynb). Make sure you have a GPU for your notebook instance, and follow [these instructures](https://cloud.google.com/blog/products/ai-machine-learning/running-alphafold-on-vertexai) for setting up your environment. Namely, under Environment, select `Custom container`, and then for `Docker container image` paste in the following: `west1-docker.pkg.dev/cloud-devrel-public-resources/alphafold/alphafold-on-gcp:latest`. +- Conduct secondary analysis of Proteomic data using this [NIGMS Sandbox notebook](https://github.com/NIGMS/ProteomicsUAMS), developed by the University of Arkansas for Medical Sciences. + +## **RNAseq and Transcriptome Assembly** +RNA-seq analysis is a high-throughput sequencing method that allows the measurement and characterization of gene expression levels and transcriptome dynamics. Workflows are typically run using workflow managers, and final results can often be visualized in notebooks. +- You can run this [Nextflow tutorial](https://nf-co.re/rnaseq/3.7) for RNAseq a variety of ways on GCP. Following the instructions outlined above, you could use Compute Engine, [Life Sciences API](https://cloud.google.com/life-sciences/docs/tutorials/Nextflow), or a Vertex AI notebook. +- For a notebook version of a complete RNAseq pipeline from Fastq to Salmon quantification go through these tutorials from the [NIGMS Sandbox Project](https://github.com/NIGMS/RNAseqUM) developed by The University of Maine. +- Likewise, [This multi-omics module](https://github.com/NIGMS/MultiomicsUND) from the University of North Dakota includes an RNAseq component. + +Transcriptome assembly is the process of reconstructing the complete set of RNA transcripts in a cell or tissue from fragmented sequencing data, providing valuable insights into gene expression and functional analysis. +- [This module](https://github.com/NIGMS/rnaAssemblyMDI) developed by the MDI Biological Laboratory for the NIGMS Sandbox Project walks you through transcriptome assembly using Nextflow. + +## **Single Cell RNAseq** +Single-cell RNA sequencing (scRNA-seq) is a technique that enables the analysis of gene expression at the individual cell level, providing insights into cellular heterogeneity, identifying rare cell types, and revealing cellular dynamics and functional states within complex biological systems. +- This [NVIDIA blog](https://developer.nvidia.com/blog/accelerating-single-cell-genomic-analysis-using-rapids/) details how to run an accelerated scRNAseq pipeline using RAPIDS. You can find a link to the GitHub repository that has lots of example notebooks [here](https://github.com/clara-parabricks/rapids-single-cell-examples). For each example use case they show some nice benchmarking data with time and cost for each machine type. You will see that most runs cost less than $1.00 with GPU machines. Pay careful attention to the environment setup as there are a lot of dependencies for these notebooks. +- The [Scanpy tutorials](https://scanpy.readthedocs.io/en/stable/tutorials.html) page has a lot of good CPU-based examples you could run in Vertex AI. Clone this [GitHub repo](https://github.com/scverse/scanpy-tutorials) to get the notebooks directly. +- Alternatively, here is a [GitHub repository](https://github.com/mdozmorov/scRNA-seq_notes) with a curated list of scRNAseq resources and tutorials. We did not test these in Cloud Lab, but wanted to make them available in case you needed additional resources. + +## **ATACseq and Single Cell ATACseq** +ATAC-seq is a technique that allows scientists to understand how DNA is packaged in cells by identifying the regions of DNA that are accessible and potentially involved in gene regulation. +-[This module](https://github.com/NIGMS/atacseqUNMC) walks you through how to work through an ATACseq and single-cell ATACseq workflow on Google Cloud. The module was developed by the University of Nebraska Medical Center for the NIGMS Sandbox Project. + +## **Methylseq** +As one of the most abundant and well-studied epigenetic modifications, DNA methylation plays an essential role in normal cell development and has various effects on transcription, genome stability, and DNA packaging within cells. Methylseq is a technique to identify methylated regions of the genome. +- The University of Hawai'i at Manoa developed [this set of notebooks](https://github.com/NIGMS/MethylSeqUH) that walk you through a Methylseq analysis as part of the NIGMS Sandbox Program. + +## **Metagenomics** +Metagenomics is the study of genetic material collected directly from environmental samples, enabling the exploration of microbial communities, their diversity, and their functional potential, without the need for laboratory culturing. +-[This module](https://github.com/NIGMS/MetagenomicsUSD) walks you through conducting a metagenomic analysis using command line and Nextflow. The module was developed by the University of South Dakota as part of the NIGMS Sandbox Project. + +## **Multiomic Analysis and Biomarker Discovery** +Multiomic analysis involves integrating data across modalities (e. g. genomic, transcriptomic, phenotypic) to generate additive insights. +- [This set of notebooks](https://github.com/NIGMS/MultiomicsUND) gives you an example of conducting multiomic analysis in Jupyter notebooks and was developed by the University of North Dakota as part of the NIGMS Sandbox Project. + +Biomarker discovery is the process of identifying specific molecules or characteristics that can serve as indicators of biological processes, diseases, or treatment responses, aiding in diagnosis, prognosis, and personalized medicine. Biomarker discovery is typically conducted through comprehensive analysis of various types of data, such as genomics, proteomics, metabolomics, and clinical data, using advanced techniques including high-throughput screening, bioinformatics, and statistical analysis to identify patterns or signatures that differentiate between healthy and diseased individuals, or responders and non-responders to specific treatments. +- [This module](https://github.com/NIGMS/BiomarkersURI), developed by the University of Rhode Island for the NIGMS Sandbox Project, walks you through conducting some common biomarker discovery analyses in R. + +## **BLAST+** +NCBI BLAST (Basic Local Alignment Search Tool) is a widely used bioinformatics program provided by the National Center for Biotechnology Information (NCBI) that compares nucleotide or protein sequences against a large database to identify similar sequences and infer evolutionary relationships, functional annotations, and structural information. +- This [Common Data Fund](https://training.nih-cfde.org/en/latest/Cloud-Platforms/Introduction-to-GCP/gcp3/) tutorial explains how to use basic BLAST on GCP. +- We also rewrote [this ElastBLAST tutorial](https://blast.ncbi.nlm.nih.gov/doc/elastic-blast/quickstart-gcp.html) as a [notebook](/notebooks/elasticBLAST) that will work in VertexAI. + +## **Long Read Sequence Analysis** +Long read DNA sequence analysis involves analyzing sequencing reads typically longer than 10 thousand base pairs (bp) in length, compared with short read sequencing where reads are about 150 bp in length. Oxford Nanopore has a pretty complete offering of notebook tutorials for handling long read data to do a variety of things including variant calling, RNAseq, Sars-Cov-2 analysis and much more. You can find a list and description of notebooks [here](https://labs.epi2me.io/nbindex/), or clone the [GitHub repo](https://github.com/epi2me-labs). Note that these notebooks expect you are running locally and accessing the epi2me notebook server. To run them in Cloud Lab, skip the first cell that connects to the server and then the rest of the notebook should run correctly, with a few tweaks. + +## **Drug Discovery** +The [Accelerating Therapeutics for Opportunities in Medicine (ATOM) Consortium](https://atomscience.org/) created a series of [Jupyter notebooks](https://github.com/ATOMScience-org/AMPL/tree/master/atomsci/ddm/examples/tutorials) that walk you through the ATOM approach to Drug Discovery. + +These notebooks were created to run in Google Colab, so if you run them in Google Cloud, you will need to make a few modification. First, we recommend you use a [Google Managed Notebook](https://cloud.google.com/vertex-ai/docs/workbench/managed/introduction) rather than a User-Managed notebook simply because the Google Managed notebooks already have Tensorflow and other dependencies installed. Be sure to attach a GPU to your instance (T4 is fine). Also, you will need to comment out `%tensorflow_version 2.x` since that is a Colab-specific command. You will also need to `pip install` a few packages as needed. If you get errors with `deepchem`, try running `pip install --pre deepchem[tensorflow]` and/or `pip install --pre deepchem[torch]`. Also, some notebooks will require a Tensorflow kernel, while others require Pytorch. You may also run into a Pandas error, reach out to the ATOM GitHub developers for the best solution to this issue. + +## **Using Google Batch** +You can interact with Google Batch directly to submit commands, or more commonly you can interact with it through orchestration engines like [Nextflow](https://www.Nextflow.io/docs/latest/google.html) and [Cromwell](https://cromwell.readthedocs.io/en/latest/backends/GCPBatch/), etc. We have tutorials that utilize Google Batch using [Nextflow](/notebooks/GoogleBatch/Nextflow) where we run the nf-core Methylseq pipeline, as well as several from the NIGMS Sandbox including [transcriptome assembly](https://github.com/NIGMS/rnaAssemblyMDI), [multiomics](https://github.com/NIGMS/MultiomicsUND), [methylseq](https://github.com/NIGMS/MethylSeqUH), and [metagenomics](https://github.com/NIGMS/MetagenomicsUSD). + +## **Using the Life Sciences API (depreciated)** +__Life Science API is depreciated on GCP and will no longer be available by July 8, 2025 on the platform,__ we recommend using Google Batch instead. For now you can still interact with the Life Sciences API directly to submit commands, or more commonly you can interact with it through orchestration engines like [Snakemake](https://snakemake.readthedocs.io/en/v7.0.0/executor_tutorial/google_lifesciences.html), as of now this workflow manager only supports Life Sciences API. + +## **Public Data Sets** +Google has a lot of public datasets available that you can use for your testing. These can be viewed [here](https://cloud.google.com/life-sciences/docs/resources/public-datasets) and can be accessed via [BigQuery](https://cloud.google.com/bigquery/public-data) or directly from the cloud bucket. For example, to view Phase 3 1k Genomes at the command line type `gsutil ls gs://genomics-public-data/1000-genomes-phase-3`. diff --git a/tutorials/notebooks/SRADownload/SRA-Download.ipynb b/tutorials/notebooks/SRADownload/SRA-Download.ipynb new file mode 100644 index 0000000..3e6435e --- /dev/null +++ b/tutorials/notebooks/SRADownload/SRA-Download.ipynb @@ -0,0 +1,455 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "1651316c", + "metadata": {}, + "source": [ + "# Download sequence data from the NCBI Sequence Read Archive (SRA)" + ] + }, + { + "cell_type": "markdown", + "id": "15022f97", + "metadata": {}, + "source": [ + "## Overview\n", + "\n", + "DNA sequence data are typically deposited into the NCBI Sequence Read Archive, and can be accessed through the SRA website, or via a collection of command line tools called SRA Toolkit. Individual sequence entries are assigned an Accession ID, which can be used to find and download a particular file. For example, if you go to the [SRA database](https://www.ncbi.nlm.nih.gov/sra) in a browser window, and search for `SRX15695630`, you should see an entry for _C. elegans_. Alternatively, you can search the SRA metadata dataset in BigQuery to generate a list of accession numbers. Here we are going to generate a list of accessions using Big Query, use tools from the SRA Toolkit to download a few fastq files, then copy those fastq files to a cloud bucket." + ] + }, + { + "cell_type": "markdown", + "id": "3b500763", + "metadata": {}, + "source": [ + "### 1) Install Dependencies" + ] + }, + { + "cell_type": "markdown", + "id": "01213dae", + "metadata": {}, + "source": [ + "Install dependencies, including mamba (you could also use conda). At the time of writing, the version of SRA tools available with the Anaconda distribution was v.2.11.0. If you want to install the latest version, download and install from [here](https://github.com/ncbi/sra-tools/wiki/01.-Downloading-SRA-Toolkit). If you do the direct install, you will also need to configure interactively following [this guide](https://github.com/ncbi/sra-tools/wiki/05.-Toolkit-Configuration), you can do that by opening a terminal and running the commands there." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2fd7a16a", + "metadata": {}, + "outputs": [], + "source": [ + "!curl -L -O https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-$(uname)-$(uname -m).sh\n", + "!bash Mambaforge-$(uname)-$(uname -m).sh -b -p $HOME/mambaforge" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ada33d36-b24a-4a9b-837e-ec42075ac440", + "metadata": {}, + "outputs": [], + "source": [ + "#add to your path\n", + "import os\n", + "os.environ[\"PATH\"] += os.pathsep + os.environ[\"HOME\"]+\"/mambaforge/bin\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8f7e349b", + "metadata": {}, + "outputs": [], + "source": [ + "! mamba install -c bioconda -c conda-forge sra-tools==2.11.0 -y" + ] + }, + { + "cell_type": "markdown", + "id": "b8c010c2", + "metadata": {}, + "source": [ + "Test that your install works and that fasterq-dump is available in your path" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6e507538", + "metadata": {}, + "outputs": [], + "source": [ + "!fasterq-dump -h" + ] + }, + { + "cell_type": "markdown", + "id": "7d8d3512-5307-42f7-9405-495fe1ca5be2", + "metadata": {}, + "source": [ + "### 2) Setup Directory Structure" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e3265f75-ebf7-4d90-8f4d-a486df5cb693", + "metadata": {}, + "outputs": [], + "source": [ + "pwd" + ] + }, + { + "cell_type": "markdown", + "id": "f94e4215", + "metadata": {}, + "source": [ + "Set up your directory structure for the raw fastq data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9aa93698-a082-4c11-9d48-0abe775fbcc5", + "metadata": {}, + "outputs": [], + "source": [ + "! mkdir -p data data/fasterqdump/raw_fastq data/prefetch_fasterqdump/raw_fastq" + ] + }, + { + "cell_type": "markdown", + "id": "b068c9da-7814-4b24-9ff8-12473048bdcf", + "metadata": {}, + "source": [ + "### 3) Create Accession List using BigQuery" + ] + }, + { + "cell_type": "markdown", + "id": "bc30c134-c903-4605-82d4-babdaaae30c0", + "metadata": {}, + "source": [ + "Here we use BigQuery to generate a list of accessions. You can also generate a manual list by searching the [SRA Database](https://www.ncbi.nlm.nih.gov/sra) and saving to a file or list." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d2c3ec94-16cd-43b6-a4c9-d56aa593382e", + "metadata": {}, + "outputs": [], + "source": [ + "# Import the biquery api\n", + "from google.cloud import bigquery\n", + "import pandas" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "243fb23b-ec7e-423f-a531-9f39a1954087", + "metadata": {}, + "outputs": [], + "source": [ + "# Designate the client for the API\n", + "client = bigquery.Client(location=\"US\")\n", + "print(\"Client creating using default project: {}\".format(client.project))" + ] + }, + { + "cell_type": "markdown", + "id": "df380099-d6ee-43b5-8719-66b7a7b41916", + "metadata": {}, + "source": [ + "Let's download bacterial samples, one of which happens to come from a swab of a sea horse. You could change the SQL query as you like, feel free to take a look at the generated df, and then play with different parameters. For more inspiration, look at this [SRA tutorial](https://www.ncbi.nlm.nih.gov/sra/docs/sra-bigquery-examples/) or our other [BigQuery notebook](https://github.com/STRIDES/NIHCloudLabGCP/tree/main/tutorials/notebooks/SRA_and_BigQuery)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2eb8d3f3-6a18-40a0-b9fe-7ab4c285b7db", + "metadata": {}, + "outputs": [], + "source": [ + "query = \"\"\"\n", + "#standardSQL\n", + "SELECT *\n", + "FROM `nih-sra-datastore.sra.metadata`\n", + "WHERE organism = 'Mycobacteroides chelonae' \n", + "limit 3\n", + "\"\"\"\n", + "query_job = client.query(\n", + " query,\n", + " # Location must match that of the dataset(s) referenced in the query.\n", + " location=\"US\",\n", + ") # API request - starts the query\n", + "\n", + "df = query_job.to_dataframe()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e049fdce-7ed7-43f4-a4d5-6811dd590dd5", + "metadata": {}, + "outputs": [], + "source": [ + "df" + ] + }, + { + "cell_type": "markdown", + "id": "4dfe9c32-817b-4e9c-901f-d27b98b95db2", + "metadata": {}, + "source": [ + "As you can see, most of what you need to know is shown in this data frame. If you wanted to just show the accession, you could replace the * for acc in the SELECT command. One other thing to think about, is how large are these files, and do you have space on your VM to download them? You can figure this out by looking at the 'jattr' column, and then converting the number of bites to GB, then add that for a few samples to get a ballpark figure. If you need more space, stop the VM, go Compute Engine and either [resize your disk](https://cloud.google.com/compute/docs/disks/resize-persistent-disk) or add a disk. You can see the amount of space on your disk from the command line using `!df -h .`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b7ca8b00-a467-4e70-a63e-faf6c53f6b6f", + "metadata": {}, + "outputs": [], + "source": [ + "df['jattr'][0]" + ] + }, + { + "cell_type": "markdown", + "id": "ab7d464a-ea2d-42d8-bb01-ee601e7a68cb", + "metadata": {}, + "source": [ + "You can also get the same info using `vdb-dump --info ` although that command does not always work as expected. You can also get the path for the sra compressed file in a bucket using `srapath `." + ] + }, + { + "cell_type": "markdown", + "id": "f98a04b7-4bd5-40e5-9860-65c0c0d48283", + "metadata": {}, + "source": [ + "Save our accession list to a text file" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2693f4f3-4ebf-41d7-95d6-8a23456897d4", + "metadata": {}, + "outputs": [], + "source": [ + "with open('list_of_accessionIDS.txt', 'w') as f:\n", + " accs = df['acc'].to_string(header=False, index=False)\n", + " f.write(accs)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d5bda88c-1263-497f-bb9c-b949a8ff5272", + "metadata": {}, + "outputs": [], + "source": [ + "cat list_of_accessionIDS.txt" + ] + }, + { + "cell_type": "markdown", + "id": "a53f13c3-6b62-4408-84d8-ebad27c2eedb", + "metadata": { + "tags": [] + }, + "source": [ + "### 4) Download FASTQ Files with fasterq dump" + ] + }, + { + "cell_type": "markdown", + "id": "c5e261a3-54f4-4c30-8aee-4808afdc6251", + "metadata": {}, + "source": [ + "Fasterq-dump is the replacement for the legacy fastq-dump tool. You can read [this guide](https://github.com/ncbi/sra-tools/wiki/HowTo:-fasterq-dump) to see the full details on this tool. You can also run `fasterq-dump -h` to see most of the options" + ] + }, + { + "cell_type": "markdown", + "id": "ea5f7b67", + "metadata": {}, + "source": [ + "Fasterq dump doesn't run in batch mode, so one way to run a command on multiple samples is by using a for loop. There are many options you can explore, but here we are running -O for outdir, -e for the number of threads, -m for memory (4GB), and --location for the location we want to retrieve the file from. Depending on the type of cloud storage, it may be faster to select `NCBI` for the location. You may consider running a few tests with one or two of your accession numbers before downloading a whole batch. The default number of threads = 6, so adjust -e based on your machine size. For large files, you may also benefit from a machine type with more memory and/or threads. You may need to stop this VM, resize it, then restart and come back. There are also a bunch of ways to split your fastq files (defined [here](https://github.com/ncbi/sra-tools/wiki/HowTo:-fasterq-dump)) but the default of `split 3` will split into forward, reverse, and unpaired reads." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "96307376", + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "! for x in `cat list_of_accessionIDS.txt`; do fasterq-dump -f -O data/raw_fastq -e 8 -m 4G $x ; done" + ] + }, + { + "cell_type": "markdown", + "id": "f2e26c03-eeb9-4340-89e7-1eb82c9e32bb", + "metadata": {}, + "source": [ + "### 5) Download FASTQ files with prefetch + fasterq dump" + ] + }, + { + "cell_type": "markdown", + "id": "00ef5310-539e-4d21-bd5d-05bf41986c47", + "metadata": {}, + "source": [ + "Using the example bacterial data, fasterq dump takes about 3.5 min to download the files. Under the hood, fasterq dump is pulling the compressed sra files from the database and converting them on the fly, which is slow (ish) because it has to do a lot over the network. A better, though less advertised method, is to disaggregate these functions using prefetch to pull the compressed files, then fasterq-dump to convert them locally, rather than over the network. For this to work, you need to either give the path to the prefetch directories in your text file, or make sure you cd into the raw_fastq dir so that it can find those directories with the .sra files. In this case, --location GCP is a lot faster than NCBI, but feel free to run your own tests with different locations." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "81e5fd57-2cb0-42f7-88c5-4f2f7ea4a1ea", + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "! prefetch --option-file list_of_accessionIDS.txt -O data/prefetch_fasterqdump/raw_fastq/ -f yes" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2dafb175-67ea-4b70-a4f5-5e98737cece2", + "metadata": {}, + "outputs": [], + "source": [ + "ls data/prefetch_fasterqdump/raw_fastq/" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fe02bb95-c9b0-494a-a187-c1b955f2788e", + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "! for x in `cat list_of_accessionIDS.txt`; do fasterq-dump -f -O data/prefetch_fasterqdump/raw_fastq/ -e 8 -m 4G data/prefetch_fasterqdump/raw_fastq/$x; done" + ] + }, + { + "cell_type": "markdown", + "id": "d1b5b0c8-ffb0-4e44-9178-f80e701d16cb", + "metadata": {}, + "source": [ + "Comparing the two methods, we can see that fasterq-dump on its own took 3.5 min, whereas prefetch + fasterq-dump takes less than 40 seconds." + ] + }, + { + "cell_type": "markdown", + "id": "22d262cb-d49f-4e33-b461-e4f5b9c778b7", + "metadata": {}, + "source": [ + "### Step 6) Copy Files to a Bucket" + ] + }, + { + "cell_type": "markdown", + "id": "1db9e5a6-db09-4923-a9df-feb2cd6d5e13", + "metadata": {}, + "source": [ + "Create a new bucket, or give the path to an existing bucket" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a6703fae-2752-4717-93be-fd8d3e0b41d6", + "metadata": {}, + "outputs": [], + "source": [ + "! gsutil mb gs://cloud-lab-tutorials_sra/" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6c8d5b92-80dc-4d99-8f6f-88200eb98815", + "metadata": {}, + "outputs": [], + "source": [ + "ls data/prefetch_fasterqdump/raw_fastq/" + ] + }, + { + "cell_type": "markdown", + "id": "9ec2ea15-b0fb-4ce2-8093-972d348c988c", + "metadata": {}, + "source": [ + "Using `-m` allows multithreading, `-r` would allow for recursive copy of a directory, but here we are just giving the path to fastq files." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a17ff514-bbac-4974-afeb-9eb847ba857f", + "metadata": {}, + "outputs": [], + "source": [ + "! gsutil -m cp data/prefetch_fasterqdump/raw_fastq/*.fastq gs://cloud-lab-tutorials_sra/raw_fastq/" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3d97b47b-830d-49ee-8add-c2c9fd4e41d4", + "metadata": {}, + "outputs": [], + "source": [ + "! gsutil ls gs://cloud-lab-tutorials_sra/raw_fastq/" + ] + }, + { + "cell_type": "markdown", + "id": "e8979484-117f-465d-b134-36372a8c8bfc", + "metadata": {}, + "source": [ + "### Step 7) Clean up\n", + "Make sure you shut down this VM, or delete it if you don't plan to use if further." + ] + } + ], + "metadata": { + "environment": { + "kernel": "python3", + "name": "tf2-gpu.2-11.m110", + "type": "gcloud", + "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-11:m110" + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/notebooks/SpleenLiverSegmentation/README.md b/tutorials/notebooks/SpleenLiverSegmentation/README.md new file mode 100644 index 0000000..976552f --- /dev/null +++ b/tutorials/notebooks/SpleenLiverSegmentation/README.md @@ -0,0 +1,49 @@ +# Spleen Segmentation with Liver Example using NVIDIA Models and MONAI +_We have put together a training example that segments the Spleen in 3D CT Images. At the end is an example of combining both the Spleen model and the Liver model._ + +*Nvidia has changed some of the models used in this tutorial and it may crash, if you have issues, try commenting out the liver model, we are working on a patch* + +## Introduction +Two pre-trained models from NVIDIA are used in this training, a Spleen model and Liver. +The Spleen model is additionally retrained on the medical decathlon spleen dataset: [http://medicaldecathlon.com/](http://medicaldecathlon.com/) +Data is not necessary to be downloaded to run the notebook. The notebook downloads the data during it's run. +The notebook uses the Python package [MONAI](https://monai.io/), the Medical Open Network for Artificial Intelligence. + +- Spleen Model - [clara_pt_spleen_ct_segmentation_V2](https://catalog.ngc.nvidia.com/orgs/nvidia/teams/monaitoolkit/models/monai_spleen_ct_segmentation) +- Liver Model - [clara_pt_liver_and_tumor_ct_segmentation_V1]() + +## Outcomes +After following along with this notebook the user will be familiar with: +- Downloading public datasets using MONAI +- Using MONAI transformations for training +- Downloading a pretrained NVIDIA Clara model using MONAI +- Retrain model using MONAI +- Visualizing medical images in python/matplotlib + +## Installing MONAI +Please follow the [instructions](https://monai.io/started.html#installation) on MONAI's website for up to date install. +Installing MONAI in a notebook environment can be completed with the commands: +- !python -c "import monai" || pip install -q 'monai[all]' +- !python -c "import matplotlib" || pip install -q matplotlib + +## Dependencies +_It is recommended to use an NVIDIA GPU for training. If the user does not have access to a NVIDIA GPU then it is recommended to skip the training cells._ + +The following packages and versions were installed during the testing of this notebook: +- MONAI version: 0.8.1 +- Numpy version: 1.21.1 +- Pytorch version: 1.9.0 +- Pytorch Ignite version: 0.4.8 +- Nibabel version: 3.2.1 +- scikit-image version: 0.18.2 +- Pillow version: 8.3.1 +- Tensorboard version: 2.5.0 +- gdown version: 3.13.0 +- TorchVision version: 0.10.0+cu111 +- tqdm version: 4.61.2 +- lmdb version: 1.2.1 +- psutil version: 5.8.0 +- pandas version: 1.3.0 +- einops version: 0.3.0 +- transformers version: 4.18.0 +- mlflow version: 1.25.1 diff --git a/tutorials/notebooks/SpleenLiverSegmentation/SpleenSeg_Pretrained-4_27.ipynb b/tutorials/notebooks/SpleenLiverSegmentation/SpleenSeg_Pretrained-4_27.ipynb new file mode 100644 index 0000000..48b8141 --- /dev/null +++ b/tutorials/notebooks/SpleenLiverSegmentation/SpleenSeg_Pretrained-4_27.ipynb @@ -0,0 +1,2002 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "1452463e", + "metadata": {}, + "source": [ + "## Spleen Model With NVIDIA Pretrain\n", + "- Uses Unet architecture\n", + "- Pretrained model at: https://ngc.nvidia.com/catalog/models/nvidia:med:clara_pt_spleen_ct_segmentation" + ] + }, + { + "cell_type": "markdown", + "id": "f59ba435", + "metadata": {}, + "source": [ + "##### Uncomment below to install all dependencies" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "82db674f", + "metadata": {}, + "outputs": [], + "source": [ + "#!pip install 'monai[all]'\n", + "#!pip install matplotlib " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "bb1228b3", + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "540e5d47", + "metadata": {}, + "outputs": [], + "source": [ + "# MONAI version: 0.6.0+38.gf6ad4ba5\n", + "# Numpy version: 1.21.1\n", + "# Pytorch version: 1.9.0\n", + "# Pytorch Ignite version: 0.4.5\n", + "# Nibabel version: 3.2.1\n", + "# scikit-image version: 0.18.2\n", + "# Pillow version: 8.3.1\n", + "# Tensorboard version: 2.5.0\n", + "# gdown version: 3.13.0\n", + "# TorchVision version: 0.10.0+cu111\n", + "# tqdm version: 4.61.2\n", + "# lmdb version: 1.2.1\n", + "# psutil version: 5.8.0\n", + "# pandas version: 1.3.0\n", + "# einops version: 0.3.0" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "07510582", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MONAI version: 0.8.1\n", + "Numpy version: 1.21.1\n", + "Pytorch version: 1.9.0\n", + "MONAI flags: HAS_EXT = False, USE_COMPILED = False\n", + "MONAI rev id: 71ff399a3ea07aef667b23653620a290364095b1\n", + "\n", + "Optional dependencies:\n", + "Pytorch Ignite version: 0.4.8\n", + "Nibabel version: 3.2.1\n", + "scikit-image version: 0.18.2\n", + "Pillow version: 8.3.1\n", + "Tensorboard version: 2.5.0\n", + "gdown version: 3.13.0\n", + "TorchVision version: 0.10.0+cu111\n", + "tqdm version: 4.61.2\n", + "lmdb version: 1.2.1\n", + "psutil version: 5.8.0\n", + "pandas version: 1.3.0\n", + "einops version: 0.3.0\n", + "transformers version: 4.18.0\n", + "mlflow version: 1.25.1\n", + "\n", + "For details about installing the optional dependencies, please visit:\n", + " https://docs.monai.io/en/latest/installation.html#installing-the-recommended-dependencies\n", + "\n" + ] + } + ], + "source": [ + "import os\n", + "import tempfile\n", + "import glob\n", + "\n", + "import matplotlib.pyplot as plt\n", + "#import plotly.graph_objects as go\n", + "import torch\n", + "import numpy as np\n", + "\n", + "from monai.apps import download_and_extract\n", + "from monai.networks.nets import UNet\n", + "from monai.networks.layers import Norm\n", + "from monai.losses import DiceFocalLoss\n", + "from monai.metrics import DiceMetric\n", + "from monai.inferers import sliding_window_inference\n", + "from monai.data import (\n", + " LMDBDataset,\n", + " DataLoader,\n", + " decollate_batch,\n", + " ImageDataset,\n", + " Dataset\n", + ")\n", + "from monai.apps import load_from_mmar\n", + "from monai.transforms import (\n", + " AsDiscrete,\n", + " EnsureChannelFirstd,\n", + " Compose,\n", + " LoadImaged,\n", + " ScaleIntensityRanged,\n", + " Spacingd,\n", + " Orientationd,\n", + " CropForegroundd,\n", + " RandCropByPosNegLabeld,\n", + " RandAffined,\n", + " RandRotated,\n", + " EnsureType,\n", + " EnsureTyped,\n", + ")\n", + "from monai.utils import first, set_determinism\n", + "from monai.apps.mmars import RemoteMMARKeys\n", + "from monai.config import print_config\n", + "\n", + "print_config()" + ] + }, + { + "cell_type": "markdown", + "id": "6f523cbf", + "metadata": {}, + "source": [ + "#### Running a pretrained model" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "0be7401d", + "metadata": {}, + "outputs": [], + "source": [ + "PRETRAINED = True" + ] + }, + { + "cell_type": "markdown", + "id": "e9f3e5f3", + "metadata": {}, + "source": [ + "#### Create the directory for storing data" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "311c3282", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "monai_data/\n" + ] + } + ], + "source": [ + "directory = \"monai_data/\"\n", + "root_dir = tempfile.mkdtemp() if directory is None else directory\n", + "print(root_dir)" + ] + }, + { + "cell_type": "markdown", + "id": "38463a18", + "metadata": {}, + "source": [ + "#### Download the public dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "da7cfede", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2022-04-27 14:49:41,401 - INFO - Verified 'Task09_Spleen.tar', md5: 410d4a301da4e5b2f6f86ec3ddba524e.\n", + "2022-04-27 14:49:41,402 - INFO - File exists: monai_data/Task09_Spleen.tar, skipped downloading.\n", + "2022-04-27 14:49:41,403 - INFO - Non-empty folder exists in monai_data/Task09_Spleen, skipped extracting.\n" + ] + } + ], + "source": [ + "resource = \"https://msd-for-monai.s3-us-west-2.amazonaws.com/Task09_Spleen.tar\"\n", + "md5 = \"410d4a301da4e5b2f6f86ec3ddba524e\"\n", + "\n", + "compressed_file = os.path.join(root_dir, \"Task09_Spleen.tar\")\n", + "download_and_extract(resource, compressed_file, root_dir, md5)\n", + "data_dir = os.path.join(root_dir, \"Task09_Spleen\")" + ] + }, + { + "cell_type": "markdown", + "id": "fae7c51b", + "metadata": {}, + "source": [ + "#### Create Date Dictionaries and separate files from training and validation" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "2515b177", + "metadata": {}, + "outputs": [], + "source": [ + "train_images = sorted(\n", + " glob.glob(os.path.join(data_dir, \"imagesTr\", \"*.nii.gz\")))\n", + "train_labels = sorted(\n", + " glob.glob(os.path.join(data_dir, \"labelsTr\", \"*.nii.gz\")))\n", + "data_dicts = [\n", + " {\"image\": image_name, \"label\": label_name}\n", + " for image_name, label_name in zip(train_images, train_labels)\n", + "]\n", + "train_files, val_files = data_dicts[:-9], data_dicts[-9:]" + ] + }, + { + "cell_type": "markdown", + "id": "974fc5aa", + "metadata": {}, + "source": [ + "#### Define your transformations for training and validation" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "2357d35d", + "metadata": {}, + "outputs": [], + "source": [ + "train_transforms = Compose( #Transformations for training dataset\n", + " [\n", + " LoadImaged(keys=[\"image\", \"label\"]), #Load dictionary based images and labels\n", + " EnsureChannelFirstd(keys=[\"image\", \"label\"]), #Ensures the first channel of each image is the channel dimension\n", + " Spacingd(keys=[\"image\", \"label\"], pixdim=( #Change spacing of voxels to be same across images\n", + " 1.5, 1.5, 2.0), mode=(\"bilinear\", \"nearest\")),\n", + " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"), #Correct the orientation of images (Right, Anterior, Superior)\n", + " ScaleIntensityRanged( #Scale intensity of all images (For images only and not labels)\n", + " keys=[\"image\"], a_min=-57, a_max=164,\n", + " b_min=0.0, b_max=1.0, clip=True,\n", + " ),\n", + " CropForegroundd(keys=[\"image\", \"label\"], source_key=\"image\"), #Crop foreground of image\n", + " RandCropByPosNegLabeld( #Randomly crop fixed sized region\n", + " keys=[\"image\", \"label\"],\n", + " label_key=\"label\",\n", + " spatial_size=(96, 96, 96),\n", + " pos=1,\n", + " neg=1,\n", + " num_samples=4,\n", + " image_key=\"image\",\n", + " image_threshold=0,\n", + " ),\n", + " RandAffined( #Do a random affine transformation with some probability\n", + " keys=['image', 'label'],\n", + " mode=('bilinear', 'nearest'),\n", + " prob=0.5,\n", + " spatial_size=(96, 96, 96),\n", + " rotate_range=(np.pi/18, np.pi/18, np.pi/5),\n", + " scale_range=(0.05, 0.05, 0.05)\n", + " ),\n", + " EnsureTyped(keys=[\"image\", \"label\"]),\n", + " ]\n", + ")\n", + "val_transforms = Compose( #Transformations for testing dataset\n", + " [\n", + " LoadImaged(keys=[\"image\", \"label\"]),\n", + " EnsureChannelFirstd(keys=[\"image\", \"label\"]),\n", + " Spacingd(keys=[\"image\", \"label\"], pixdim=(\n", + " 1.5, 1.5, 2.0), mode=(\"bilinear\", \"nearest\")),\n", + " Orientationd(keys=[\"image\", \"label\"], axcodes=\"RAS\"),\n", + " ScaleIntensityRanged(\n", + " keys=[\"image\"], a_min=-57, a_max=164,\n", + " b_min=0.0, b_max=1.0, clip=True,\n", + " ),\n", + " RandRotated(\n", + " keys=['image', 'label'],\n", + " mode=('bilinear', 'nearest'),\n", + " range_x=np.pi/18,\n", + " range_y=np.pi/18,\n", + " range_z=np.pi/5,\n", + " prob=1.0,\n", + " padding_mode=('reflection', 'reflection'),\n", + " ),\n", + " CropForegroundd(keys=[\"image\", \"label\"], source_key=\"image\"),\n", + " EnsureTyped(keys=[\"image\", \"label\"]),\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "ada5757a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[{'image': 'monai_data/Task09_Spleen/imagesTr/spleen_56.nii.gz',\n", + " 'label': 'monai_data/Task09_Spleen/labelsTr/spleen_56.nii.gz'},\n", + " {'image': 'monai_data/Task09_Spleen/imagesTr/spleen_59.nii.gz',\n", + " 'label': 'monai_data/Task09_Spleen/labelsTr/spleen_59.nii.gz'},\n", + " {'image': 'monai_data/Task09_Spleen/imagesTr/spleen_6.nii.gz',\n", + " 'label': 'monai_data/Task09_Spleen/labelsTr/spleen_6.nii.gz'},\n", + " {'image': 'monai_data/Task09_Spleen/imagesTr/spleen_60.nii.gz',\n", + " 'label': 'monai_data/Task09_Spleen/labelsTr/spleen_60.nii.gz'},\n", + " {'image': 'monai_data/Task09_Spleen/imagesTr/spleen_61.nii.gz',\n", + " 'label': 'monai_data/Task09_Spleen/labelsTr/spleen_61.nii.gz'},\n", + " {'image': 'monai_data/Task09_Spleen/imagesTr/spleen_62.nii.gz',\n", + " 'label': 'monai_data/Task09_Spleen/labelsTr/spleen_62.nii.gz'},\n", + " {'image': 'monai_data/Task09_Spleen/imagesTr/spleen_63.nii.gz',\n", + " 'label': 'monai_data/Task09_Spleen/labelsTr/spleen_63.nii.gz'},\n", + " {'image': 'monai_data/Task09_Spleen/imagesTr/spleen_8.nii.gz',\n", + " 'label': 'monai_data/Task09_Spleen/labelsTr/spleen_8.nii.gz'},\n", + " {'image': 'monai_data/Task09_Spleen/imagesTr/spleen_9.nii.gz',\n", + " 'label': 'monai_data/Task09_Spleen/labelsTr/spleen_9.nii.gz'}]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "val_files" + ] + }, + { + "cell_type": "markdown", + "id": "ba3c7695", + "metadata": {}, + "source": [ + "#### Visualize Image and Label (example)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "689eea4e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "image shape: torch.Size([239, 239, 113]), label shape: torch.Size([239, 239, 113])\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "check_ds = Dataset(data=val_files, transform=val_transforms)\n", + "check_loader = DataLoader(check_ds, batch_size=1)\n", + "check_data = first(check_loader)\n", + "image, label = (check_data[\"image\"][0][0], check_data[\"label\"][0][0])\n", + "print(f\"image shape: {image.shape}, label shape: {label.shape}\")\n", + "# plot the slice [:, :, 80]\n", + "plt.figure(\"check\", (12, 6))\n", + "plt.subplot(1, 2, 1)\n", + "plt.title(\"image\")\n", + "plt.imshow(image[:, :, 80], cmap=\"gray\")\n", + "plt.subplot(1, 2, 2)\n", + "plt.title(\"label\")\n", + "plt.imshow(label[:, :, 80])\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "f45ba707", + "metadata": {}, + "source": [ + "#### Use a dataloader to load files\n", + " - Ability to use LMDB (Lightning Memory-Mapped Database)\n", + " - Here is where transforms take place and they happen on both images and labels" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "fe3285d0", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 32/32 [00:00<00:00, 57113.93it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accessing lmdb file: /home/jupyter/covid19det-kaggle/kaggle/MonaiTesting/monai_data/monai_cache.lmdb.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 32/32 [00:00<00:00, 47679.48it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'map_addr': 0, 'map_size': 1099511627776, 'last_pgno': 941102, 'last_txnid': 100, 'max_readers': 126, 'num_readers': 0, 'size': 32, 'filename': '/home/jupyter/covid19det-kaggle/kaggle/MonaiTesting/monai_data/monai_cache.lmdb'}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 9/9 [00:00<00:00, 10999.05it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accessing lmdb file: /home/jupyter/covid19det-kaggle/kaggle/MonaiTesting/monai_data/monai_cache.lmdb.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 9/9 [00:00<00:00, 17739.07it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'map_addr': 0, 'map_size': 1099511627776, 'last_pgno': 941102, 'last_txnid': 100, 'max_readers': 126, 'num_readers': 0, 'size': 9, 'filename': '/home/jupyter/covid19det-kaggle/kaggle/MonaiTesting/monai_data/monai_cache.lmdb'}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "train_ds = LMDBDataset(data=train_files, transform=train_transforms, cache_dir=root_dir)\n", + "# initialize cache and print meta information\n", + "print(train_ds.info())\n", + "\n", + "# use batch_size=2 to load images and use RandCropByPosNegLabeld\n", + "# to generate 2 x 4 images for network training\n", + "train_loader = DataLoader(train_ds, batch_size=2, shuffle=True, num_workers=2)\n", + "\n", + "# the validation data loader will be created on the fly to ensure \n", + "# a deterministic validation set for demo purpose.\n", + "val_ds = LMDBDataset(data=val_files, transform=val_transforms, cache_dir=root_dir)\n", + "# initialize cache and print meta information\n", + "print(val_ds.info())" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "455cbcdc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'map_addr': 0, 'map_size': 1099511627776, 'last_pgno': 941102, 'last_txnid': 100, 'max_readers': 126, 'num_readers': 0, 'size': 32, 'filename': '/home/jupyter/covid19det-kaggle/kaggle/MonaiTesting/monai_data/monai_cache.lmdb'}\n" + ] + } + ], + "source": [ + "print(train_ds.info())" + ] + }, + { + "cell_type": "markdown", + "id": "a77e7856", + "metadata": {}, + "source": [ + "#### Now we want to download the pretrained model from NVIDIA" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "8539fb7d", + "metadata": {}, + "outputs": [], + "source": [ + "mmar = {\n", + " RemoteMMARKeys.ID: \"clara_pt_spleen_ct_segmentation_1\",\n", + " RemoteMMARKeys.NAME: \"clara_pt_spleen_ct_segmentation\",\n", + " RemoteMMARKeys.FILE_TYPE: \"zip\",\n", + " RemoteMMARKeys.HASH_TYPE: \"md5\",\n", + " RemoteMMARKeys.HASH_VAL: None,\n", + " RemoteMMARKeys.MODEL_FILE: os.path.join(\"models\", \"model.pt\"),\n", + " RemoteMMARKeys.CONFIG_FILE: os.path.join(\"config\", \"config_train.json\"),\n", + " RemoteMMARKeys.VERSION: 2,\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "de7fb262", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'clara_pt_spleen_ct_segmentation'" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mmar['name']" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "bf96f9f9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "using a pretrained model.\n", + "2022-04-27 14:49:45,704 - INFO - Expected md5 is None, skip md5 check for file monai_data/clara_pt_spleen_ct_segmentation_2.zip.\n", + "2022-04-27 14:49:45,705 - INFO - File exists: monai_data/clara_pt_spleen_ct_segmentation_2.zip, skipped downloading.\n", + "2022-04-27 14:49:45,706 - INFO - Non-empty folder exists in monai_data/clara_pt_spleen_ct_segmentation, skipped extracting.\n", + "2022-04-27 14:49:45,707 - INFO - \n", + "*** \"clara_pt_spleen_ct_segmentation\" available at monai_data/clara_pt_spleen_ct_segmentation.\n", + "2022-04-27 14:49:49,353 - INFO - *** Model: \n", + "2022-04-27 14:49:49,400 - INFO - *** Model params: {'dimensions': 3, 'in_channels': 1, 'out_channels': 2, 'channels': [16, 32, 64, 128, 256], 'strides': [2, 2, 2, 2], 'num_res_units': 2, 'norm': 'batch'}\n", + "2022-04-27 14:49:49,411 - INFO - \n", + "---\n", + "2022-04-27 14:49:49,412 - INFO - For more information, please visit https://ngc.nvidia.com/catalog/models/nvidia:med:clara_pt_spleen_ct_segmentation\n", + "\n" + ] + } + ], + "source": [ + "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\") #torch.device(\"cpu\")\n", + "if PRETRAINED:\n", + " print(\"using a pretrained model.\")\n", + " try: #MONAI=0.8\n", + " unet_model = load_from_mmar(\n", + " item = mmar['name'], \n", + " mmar_dir=root_dir,\n", + " map_location=device,\n", + " version=mmar['version'],\n", + " pretrained=True)\n", + " except: #MONAI<0.8\n", + " unet_model = load_from_mmar(\n", + " mmar, \n", + " mmar_dir=root_dir,\n", + " map_location=device,\n", + " pretrained=True)\n", + " model = unet_model\n", + "else: \n", + " print(\"using a randomly init. model.\")\n", + " model = UNet(\n", + " dimensions=3,\n", + " in_channels=1,\n", + " out_channels=2,\n", + " channels=(16, 32, 64, 128, 256),\n", + " strides=(2, 2, 2, 2),\n", + " num_res_units=2,\n", + " norm=Norm.BATCH,\n", + " )\n", + "\n", + "model = model.to(device)" + ] + }, + { + "cell_type": "markdown", + "id": "39910557", + "metadata": {}, + "source": [ + "### This will be our test file we will view for reference\n", + " - Here we see how our initial model appears to perform" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "4be7eb8f", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1/1 [00:00<00:00, 4639.72it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accessing lmdb file: /home/jupyter/covid19det-kaggle/kaggle/MonaiTesting/monai_data/monai_cache.lmdb.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "test_file = data_dicts[20:21]\n", + "test_ds = LMDBDataset(data=test_file, transform=None, cache_dir=root_dir)" + ] + }, + { + "cell_type": "markdown", + "id": "2544a774", + "metadata": {}, + "source": [ + "#### We use a sliding window technique to search the image" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "16fd4e94", + "metadata": {}, + "outputs": [], + "source": [ + "num_classes=2\n", + "post_pred = Compose([EnsureType(), AsDiscrete(argmax=True, to_onehot=num_classes)])\n", + "post_label = Compose([EnsureType(), AsDiscrete(to_onehot=num_classes)])\n", + "model.eval()\n", + "with torch.no_grad():\n", + " for data in DataLoader(test_ds, batch_size=1, num_workers=2):\n", + " test_inputs, test_labels = (\n", + " data[\"image\"].to(device),\n", + " data[\"label\"].to(device),\n", + " )\n", + " roi_size = (160, 160, 160)\n", + " sw_batch_size = 4\n", + " test_outputs = sliding_window_inference(\n", + " test_inputs, roi_size, sw_batch_size, model, overlap=0.5)\n", + " test_outputspre = [post_pred(i) for i in decollate_batch(test_outputs)] # Decollate our results\n", + " test_labelspre = [post_label(i) for i in decollate_batch(test_labels)]" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "9782ec96", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig = plt.figure(frameon=False, figsize=(7,7))\n", + "plt.title('Actual Spleen')\n", + "plt.imshow(test_labelspre[0].cpu().numpy()[1][:,:,200], cmap='Greys_r') #Actual spleen" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "76cd38e6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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TZchOeaq3xo/fjw777xz02UMSmZyzjnncOWVV7Ju3bqmy5EMV3W+TZs2sXTpUr761a8arGobhquA6k9id+JwwObNm+nu7naMVW3HMVcB8OMf/5gFCxY0XcY2O++883jjG9/YdBnSy3jkOsqNGTOG66+/nlmzZnXkHxp85plnePrpp5suQ3qZzvvXpCEVERx66KHstNNOTZeyzW677TbuvffepsuQeuV9rqPYmDFj2G233VixYkVHhuuMGTNYtmxZ02VolPM+V73M29/+dh599NGODFap3Rmuo9S5557Lt771LcaM6bxdYP369ZxwwgmsXLmy6VKkPjnmOkodcMABTJs2rekyBuWZZ55h4cKFTZch9avzDls0qj377LNs2LCh6TKkARmu6igXXngh++23X9NlSAMyXNVR2uHuFmlrGK7qGFdffTU/+9nPmi5D2ipe0FLb27x5M+vXr+eTn/ykXxpQxzBc1faeeOIJpk6d2nQZ0jZxWEBtbdGiRRx88MFNlyFtM8NVbW3NmjX+gUF1JMNVbeuxxx7jwQcfbLoMaVAcc1Vbykze8573cMMNNzRdijQohqvaztNPP81rX/taVq1a1XQp0qAZrmo7mUl3d7dfGFBHM1zVVp566imWLFnSdBnSdvOCltrKTTfdxJvf/GaPWtXxDFdJKsBwVVs59NBDWbRoERG9/uUMqWMYrmoru+22G0cccQTz5s1jypQpTZcjDZrhqq3y/PPP89xzz/X5GMox0h133JGLL76Yt771rYwfP37I1isNJ8NVW+X9738/EydO7POxdu3aIf/MhQsXcuGFFw75eqXh4J/WHqUOPPBATjzxRL7whS/0Ov1rX/saP//5z198f9111/UboLNnz+ass87iyCOPHNI6169fz+23385RRx01pOuVhkpff1rb+1xHqdtvv51NmzZxxBFH9Dr9O9/5DjfeeONWr+/qq69m7733ZpddduGQQw4ZqjKZPHkyhx56KJ/+9KdZsGAB69atG7J1SyV55KohdeCBB/KLX/yCnXbaaciv+B977LHceOONbNy4cUjXK22Pvo5cDVcNuTFjxrBu3TomTZo0pOvNTL7xjW9w+umnD+l6pe3RV7h6QUtDbvPmzcyePZubbrppSNcbEd7/qo7hmKuKuOmmm7j44otZvnz5i23HHHMMe+yxR4NVScMoMxt/AOlj5D+u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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig = plt.figure(frameon=False, figsize=(7,7))\n", + "plt.title('Pretrained CalculatedSpleen')\n", + "plt.imshow(test_outputspre[0].cpu().numpy()[1][:,:,200], cmap='Greys_r') #Pretrained model spleen" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "65c68242", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig = plt.figure(frameon=False, figsize=(7,7))\n", + "plt.title('Differences Between Actual and Model')\n", + "pretraineddif = test_labelspre[0].cpu().numpy()[1][:,:,200] - test_outputspre[0].cpu().numpy()[1][:,:,200]\n", + "plt.imshow(pretraineddif, cmap='Greys_r') #Differences" + ] + }, + { + "cell_type": "markdown", + "id": "2f60e5b5", + "metadata": {}, + "source": [ + "#### Using just the pretrained model, it appears we are performing pretty well\n", + " - We can now continue to train with our data using the NVIDIA models initial weights" + ] + }, + { + "cell_type": "markdown", + "id": "c3e40010", + "metadata": {}, + "source": [ + "## Training\n", + "#### Without a GPU, training can take a while\n", + "#### Recommend skipping next three cells and load in model" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "a8ad6aee", + "metadata": {}, + "outputs": [], + "source": [ + "loss_function = DiceFocalLoss(to_onehot_y=True, softmax=True)\n", + "optimizer = torch.optim.Adam(model.parameters(), 5e-4)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "d91d340c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "----------\n", + "epoch 1/25\n", + "1/16, train_loss: 0.8680\n", + "2/16, train_loss: 0.3699\n", + "3/16, train_loss: 0.3849\n", + "4/16, train_loss: 0.1306\n", + "5/16, train_loss: 0.2781\n", + "6/16, train_loss: 0.3628\n", + "7/16, train_loss: 0.3609\n", + "8/16, train_loss: 0.1828\n", + "9/16, train_loss: 0.1493\n", + "10/16, train_loss: 0.5063\n", + "11/16, train_loss: 0.2929\n", + "12/16, train_loss: 0.2826\n", + "13/16, train_loss: 0.2017\n", + "14/16, train_loss: 0.2591\n", + "15/16, train_loss: 0.2568\n", + "16/16, train_loss: 0.2385\n", + "epoch 1 average loss: 0.3203\n", + "----------\n", + "epoch 2/25\n", + "1/16, train_loss: 0.3457\n", + "2/16, train_loss: 0.2234\n", + "3/16, train_loss: 0.3443\n", + "4/16, train_loss: 0.0816\n", + "5/16, train_loss: 0.2259\n", + "6/16, train_loss: 0.1580\n", + "7/16, train_loss: 0.2593\n", + "8/16, train_loss: 0.1651\n", + "9/16, train_loss: 0.1124\n", + "10/16, train_loss: 0.4822\n", + "11/16, train_loss: 0.2900\n", + "12/16, train_loss: 0.2571\n", + "13/16, train_loss: 0.1799\n", + "14/16, train_loss: 0.1984\n", + "15/16, train_loss: 0.2286\n", + "16/16, train_loss: 0.2216\n", + "epoch 2 average loss: 0.2359\n", + "saved new best metric model\n", + "current epoch: 2 current mean dice: 0.8615\n", + "best mean dice: 0.8615 at epoch: 2\n", + "----------\n", + "epoch 3/25\n", + "1/16, train_loss: 0.3400\n", + "2/16, train_loss: 0.2297\n", + "3/16, train_loss: 0.3453\n", + "4/16, train_loss: 0.0822\n", + "5/16, train_loss: 0.2285\n", + "6/16, train_loss: 0.1213\n", + "7/16, train_loss: 0.2370\n", + "8/16, train_loss: 0.1607\n", + "9/16, train_loss: 0.1065\n", + "10/16, train_loss: 0.4543\n", + "11/16, train_loss: 0.2848\n", + "12/16, train_loss: 0.2848\n", + "13/16, train_loss: 0.1763\n", + "14/16, train_loss: 0.1748\n", + "15/16, train_loss: 0.4361\n", + "16/16, train_loss: 0.2234\n", + "epoch 3 average loss: 0.2429\n", + "----------\n", + "epoch 4/25\n", + "1/16, train_loss: 0.3328\n", + "2/16, train_loss: 0.2447\n", + "3/16, train_loss: 0.3436\n", + "4/16, train_loss: 0.0723\n", + "5/16, train_loss: 0.2213\n", + "6/16, train_loss: 0.1676\n", + "7/16, train_loss: 0.2672\n", + "8/16, train_loss: 0.2121\n", + "9/16, train_loss: 0.1122\n", + "10/16, train_loss: 0.5265\n", + "11/16, train_loss: 0.2810\n", + "12/16, train_loss: 0.2688\n", + "13/16, train_loss: 0.1795\n", + "14/16, train_loss: 0.1853\n", + "15/16, train_loss: 0.2458\n", + "16/16, train_loss: 0.2314\n", + "epoch 4 average loss: 0.2433\n", + "saved new best metric model\n", + "current epoch: 4 current mean dice: 0.8744\n", + "best mean dice: 0.8744 at epoch: 4\n", + "----------\n", + "epoch 5/25\n", + "1/16, train_loss: 0.3378\n", + "2/16, train_loss: 0.2047\n", + "3/16, train_loss: 0.3350\n", + "4/16, train_loss: 0.0583\n", + "5/16, train_loss: 0.2161\n", + "6/16, train_loss: 0.1008\n", + "7/16, train_loss: 0.2325\n", + "8/16, train_loss: 0.1629\n", + "9/16, train_loss: 0.1037\n", + "10/16, train_loss: 0.4499\n", + "11/16, train_loss: 0.2763\n", + "12/16, train_loss: 0.2321\n", + "13/16, train_loss: 0.1702\n", + "14/16, train_loss: 0.1652\n", + "15/16, train_loss: 0.2206\n", + "16/16, train_loss: 0.2169\n", + "epoch 5 average loss: 0.2177\n", + "----------\n", + "epoch 6/25\n", + "1/16, train_loss: 0.3303\n", + "2/16, train_loss: 0.1888\n", + "3/16, train_loss: 0.3331\n", + "4/16, train_loss: 0.0535\n", + "5/16, train_loss: 0.2149\n", + "6/16, train_loss: 0.0962\n", + "7/16, train_loss: 0.2267\n", + "8/16, train_loss: 0.1555\n", + "9/16, train_loss: 0.0995\n", + "10/16, train_loss: 0.4476\n", + "11/16, train_loss: 0.2751\n", + "12/16, train_loss: 0.2215\n", + "13/16, train_loss: 0.1644\n", + "14/16, train_loss: 0.1603\n", + "15/16, train_loss: 0.2159\n", + "16/16, train_loss: 0.2141\n", + "epoch 6 average loss: 0.2123\n", + "saved new best metric model\n", + "current epoch: 6 current mean dice: 0.8952\n", + "best mean dice: 0.8952 at epoch: 6\n", + "----------\n", + "epoch 7/25\n", + "1/16, train_loss: 0.3286\n", + "2/16, train_loss: 0.1815\n", + "3/16, train_loss: 0.3317\n", + "4/16, train_loss: 0.0487\n", + "5/16, train_loss: 0.2127\n", + "6/16, train_loss: 0.0926\n", + "7/16, train_loss: 0.2236\n", + "8/16, train_loss: 0.1536\n", + "9/16, train_loss: 0.0955\n", + "10/16, train_loss: 0.4468\n", + "11/16, train_loss: 0.2730\n", + "12/16, train_loss: 0.2171\n", + "13/16, train_loss: 0.1616\n", + "14/16, train_loss: 0.1565\n", + "15/16, train_loss: 0.2147\n", + "16/16, train_loss: 0.2123\n", + "epoch 7 average loss: 0.2094\n", + "----------\n", + "epoch 8/25\n", + "1/16, train_loss: 0.3276\n", + "2/16, train_loss: 0.1800\n", + "3/16, train_loss: 0.3311\n", + "4/16, train_loss: 0.0459\n", + "5/16, train_loss: 0.2114\n", + "6/16, train_loss: 0.0853\n", + "7/16, train_loss: 0.2206\n", + "8/16, train_loss: 0.1529\n", + "9/16, train_loss: 0.0939\n", + "10/16, train_loss: 0.4467\n", + "11/16, train_loss: 0.2725\n", + "12/16, train_loss: 0.2171\n", + "13/16, train_loss: 0.1600\n", + "14/16, train_loss: 0.1502\n", + "15/16, train_loss: 0.2140\n", + "16/16, train_loss: 0.2115\n", + "epoch 8 average loss: 0.2075\n", + "saved new best metric model\n", + "current epoch: 8 current mean dice: 0.8957\n", + "best mean dice: 0.8957 at epoch: 8\n", + "----------\n", + "epoch 9/25\n", + "1/16, train_loss: 0.3275\n", + "2/16, train_loss: 0.1822\n", + "3/16, train_loss: 0.3309\n", + "4/16, train_loss: 0.0455\n", + "5/16, train_loss: 0.2110\n", + "6/16, train_loss: 0.0818\n", + "7/16, train_loss: 0.2194\n", + "8/16, train_loss: 0.1520\n", + "9/16, train_loss: 0.0917\n", + "10/16, train_loss: 0.4467\n", + "11/16, train_loss: 0.2723\n", + "12/16, train_loss: 0.2165\n", + "13/16, train_loss: 0.1593\n", + "14/16, train_loss: 0.1236\n", + "15/16, train_loss: 0.2136\n", + "16/16, train_loss: 0.2107\n", + "epoch 9 average loss: 0.2053\n", + "----------\n", + "epoch 10/25\n", + "1/16, train_loss: 0.3271\n", + "2/16, train_loss: 0.1726\n", + "3/16, train_loss: 0.3308\n", + "4/16, train_loss: 0.0439\n", + "5/16, train_loss: 0.2106\n", + "6/16, train_loss: 0.0886\n", + "7/16, train_loss: 0.2209\n", + "8/16, train_loss: 0.1518\n", + "9/16, train_loss: 0.0860\n", + "10/16, train_loss: 0.4452\n", + "11/16, train_loss: 0.2715\n", + "12/16, train_loss: 0.2150\n", + "13/16, train_loss: 0.1589\n", + "14/16, train_loss: 0.1150\n", + "15/16, train_loss: 0.2142\n", + "16/16, train_loss: 0.2095\n", + "epoch 10 average loss: 0.2038\n", + "saved new best metric model\n", + "current epoch: 10 current mean dice: 0.8958\n", + "best mean dice: 0.8958 at epoch: 10\n", + "----------\n", + "epoch 11/25\n", + "1/16, train_loss: 0.3271\n", + "2/16, train_loss: 0.1735\n", + "3/16, train_loss: 0.3314\n", + "4/16, train_loss: 0.0430\n", + "5/16, train_loss: 0.2099\n", + "6/16, train_loss: 0.0801\n", + "7/16, train_loss: 0.2201\n", + "8/16, train_loss: 0.1508\n", + "9/16, train_loss: 0.0721\n", + "10/16, train_loss: 0.4451\n", + "11/16, train_loss: 0.2714\n", + "12/16, train_loss: 0.2155\n", + "13/16, train_loss: 0.1592\n", + "14/16, train_loss: 0.1247\n", + "15/16, train_loss: 0.2139\n", + "16/16, train_loss: 0.2107\n", + "epoch 11 average loss: 0.2030\n", + "----------\n", + "epoch 12/25\n", + "1/16, train_loss: 0.3268\n", + "2/16, train_loss: 0.1712\n", + "3/16, train_loss: 0.3305\n", + "4/16, train_loss: 0.0453\n", + "5/16, train_loss: 0.2103\n", + "6/16, train_loss: 0.0783\n", + "7/16, train_loss: 0.2179\n", + "8/16, train_loss: 0.1529\n", + "9/16, train_loss: 0.0912\n", + "10/16, train_loss: 0.4469\n", + "11/16, train_loss: 0.2724\n", + "12/16, train_loss: 0.2162\n", + "13/16, train_loss: 0.1588\n", + "14/16, train_loss: 0.1072\n", + "15/16, train_loss: 0.2129\n", + "16/16, train_loss: 0.2091\n", + "epoch 12 average loss: 0.2030\n", + "saved new best metric model\n", + "current epoch: 12 current mean dice: 0.9008\n", + "best mean dice: 0.9008 at epoch: 12\n", + "----------\n", + "epoch 13/25\n", + "1/16, train_loss: 0.3266\n", + "2/16, train_loss: 0.1666\n", + "3/16, train_loss: 0.3304\n", + "4/16, train_loss: 0.0419\n", + "5/16, train_loss: 0.2105\n", + "6/16, train_loss: 0.0826\n", + "7/16, train_loss: 0.2195\n", + "8/16, train_loss: 0.1506\n", + "9/16, train_loss: 0.0553\n", + "10/16, train_loss: 0.4447\n", + "11/16, train_loss: 0.2715\n", + "12/16, train_loss: 0.2125\n", + "13/16, train_loss: 0.1575\n", + "14/16, train_loss: 0.1083\n", + "15/16, train_loss: 0.2135\n", + "16/16, train_loss: 0.2085\n", + "epoch 13 average loss: 0.2000\n", + "----------\n", + "epoch 14/25\n", + "1/16, train_loss: 0.3270\n", + "2/16, train_loss: 0.1647\n", + "3/16, train_loss: 0.3316\n", + "4/16, train_loss: 0.0405\n", + "5/16, train_loss: 0.2091\n", + "6/16, train_loss: 0.0686\n", + "7/16, train_loss: 0.2185\n", + "8/16, train_loss: 0.1499\n", + "9/16, train_loss: 0.0482\n", + "10/16, train_loss: 0.4443\n", + "11/16, train_loss: 0.2708\n", + "12/16, train_loss: 0.2106\n", + "13/16, train_loss: 0.1568\n", + "14/16, train_loss: 0.1043\n", + "15/16, train_loss: 0.2121\n", + "16/16, train_loss: 0.2079\n", + "epoch 14 average loss: 0.1978\n", + "saved new best metric model\n", + "current epoch: 14 current mean dice: 0.9015\n", + "best mean dice: 0.9015 at epoch: 14\n", + "----------\n", + "epoch 15/25\n", + "1/16, train_loss: 0.3259\n", + "2/16, train_loss: 0.1630\n", + "3/16, train_loss: 0.3303\n", + "4/16, train_loss: 0.0399\n", + "5/16, train_loss: 0.2085\n", + "6/16, train_loss: 0.0579\n", + "7/16, train_loss: 0.2165\n", + "8/16, train_loss: 0.1509\n", + "9/16, train_loss: 0.0487\n", + "10/16, train_loss: 0.4449\n", + "11/16, train_loss: 0.2704\n", + "12/16, train_loss: 0.2090\n", + "13/16, train_loss: 0.1557\n", + "14/16, train_loss: 0.1021\n", + "15/16, train_loss: 0.2118\n", + "16/16, train_loss: 0.2084\n", + "epoch 15 average loss: 0.1965\n", + "----------\n", + "epoch 16/25\n", + "1/16, train_loss: 0.3258\n", + "2/16, train_loss: 0.1620\n", + "3/16, train_loss: 0.3307\n", + "4/16, train_loss: 0.0394\n", + "5/16, train_loss: 0.2086\n", + "6/16, train_loss: 0.0699\n", + "7/16, train_loss: 0.2170\n", + "8/16, train_loss: 0.1516\n", + "9/16, train_loss: 0.0540\n", + "10/16, train_loss: 0.4444\n", + "11/16, train_loss: 0.2698\n", + "12/16, train_loss: 0.2102\n", + "13/16, train_loss: 0.1548\n", + "14/16, train_loss: 0.1016\n", + "15/16, train_loss: 0.2114\n", + "16/16, train_loss: 0.2078\n", + "epoch 16 average loss: 0.1974\n", + "current epoch: 16 current mean dice: 0.8994\n", + "best mean dice: 0.9015 at epoch: 14\n", + "----------\n", + "epoch 17/25\n", + "1/16, train_loss: 0.3255\n", + "2/16, train_loss: 0.1636\n", + "3/16, train_loss: 0.3300\n", + "4/16, train_loss: 0.0399\n", + "5/16, train_loss: 0.2085\n", + "6/16, train_loss: 0.0483\n", + "7/16, train_loss: 0.2150\n", + "8/16, train_loss: 0.1506\n", + "9/16, train_loss: 0.0446\n", + "10/16, train_loss: 0.4445\n", + "11/16, train_loss: 0.2692\n", + "12/16, train_loss: 0.2077\n", + "13/16, train_loss: 0.1515\n", + "14/16, train_loss: 0.0980\n", + "15/16, train_loss: 0.2110\n", + "16/16, train_loss: 0.2076\n", + "epoch 17 average loss: 0.1947\n", + "----------\n", + "epoch 18/25\n", + "1/16, train_loss: 0.3255\n", + "2/16, train_loss: 0.1614\n", + "3/16, train_loss: 0.3297\n", + "4/16, train_loss: 0.0381\n", + "5/16, train_loss: 0.2081\n", + "6/16, train_loss: 0.0422\n", + "7/16, train_loss: 0.2152\n", + "8/16, train_loss: 0.1485\n", + "9/16, train_loss: 0.0415\n", + "10/16, train_loss: 0.4442\n", + "11/16, train_loss: 0.2690\n", + "12/16, train_loss: 0.2070\n", + "13/16, train_loss: 0.1515\n", + "14/16, train_loss: 0.0980\n", + "15/16, train_loss: 0.2112\n", + "16/16, train_loss: 0.2068\n", + "epoch 18 average loss: 0.1936\n", + "current epoch: 18 current mean dice: 0.8991\n", + "best mean dice: 0.9015 at epoch: 14\n", + "----------\n", + "epoch 19/25\n", + "1/16, train_loss: 0.3254\n", + "2/16, train_loss: 0.1635\n", + "3/16, train_loss: 0.3297\n", + "4/16, train_loss: 0.0372\n", + "5/16, train_loss: 0.2078\n", + "6/16, train_loss: 0.0424\n", + "7/16, train_loss: 0.2145\n", + "8/16, train_loss: 0.1483\n", + "9/16, train_loss: 0.0402\n", + "10/16, train_loss: 0.4436\n", + "11/16, train_loss: 0.2695\n", + "12/16, train_loss: 0.2076\n", + "13/16, train_loss: 0.1514\n", + "14/16, train_loss: 0.1009\n", + "15/16, train_loss: 0.2116\n", + "16/16, train_loss: 0.2071\n", + "epoch 19 average loss: 0.1938\n", + "----------\n", + "epoch 20/25\n", + "1/16, train_loss: 0.3256\n", + "2/16, train_loss: 0.1616\n", + "3/16, train_loss: 0.3302\n", + "4/16, train_loss: 0.0376\n", + "5/16, train_loss: 0.2080\n", + "6/16, train_loss: 0.0756\n", + "7/16, train_loss: 0.2150\n", + "8/16, train_loss: 0.1476\n", + "9/16, train_loss: 0.0400\n", + "10/16, train_loss: 0.4440\n", + "11/16, train_loss: 0.2686\n", + "12/16, train_loss: 0.2071\n", + "13/16, train_loss: 0.1512\n", + "14/16, train_loss: 0.0990\n", + "15/16, train_loss: 0.2103\n", + "16/16, train_loss: 0.2066\n", + "epoch 20 average loss: 0.1955\n", + "current epoch: 20 current mean dice: 0.8984\n", + "best mean dice: 0.9015 at epoch: 14\n", + "----------\n", + "epoch 21/25\n", + "1/16, train_loss: 0.3253\n", + "2/16, train_loss: 0.1599\n", + "3/16, train_loss: 0.3295\n", + "4/16, train_loss: 0.0370\n", + "5/16, train_loss: 0.2074\n", + "6/16, train_loss: 0.0587\n", + "7/16, train_loss: 0.2138\n", + "8/16, train_loss: 0.1483\n", + "9/16, train_loss: 0.0479\n", + "10/16, train_loss: 0.4449\n", + "11/16, train_loss: 0.2684\n", + "12/16, train_loss: 0.2082\n", + "13/16, train_loss: 0.1520\n", + "14/16, train_loss: 0.1122\n", + "15/16, train_loss: 0.2110\n", + "16/16, train_loss: 0.2088\n", + "epoch 21 average loss: 0.1958\n", + "----------\n", + "epoch 22/25\n", + "1/16, train_loss: 0.3258\n", + "2/16, train_loss: 0.1628\n", + "3/16, train_loss: 0.3298\n", + "4/16, train_loss: 0.0395\n", + "5/16, train_loss: 0.2082\n", + "6/16, train_loss: 0.0614\n", + "7/16, train_loss: 0.2181\n", + "8/16, train_loss: 0.1566\n", + "9/16, train_loss: 0.0650\n", + "10/16, train_loss: 0.4442\n", + "11/16, train_loss: 0.2693\n", + "12/16, train_loss: 0.2118\n", + "13/16, train_loss: 0.1532\n", + "14/16, train_loss: 0.0998\n", + "15/16, train_loss: 0.2121\n", + "16/16, train_loss: 0.2076\n", + "epoch 22 average loss: 0.1978\n", + "saved new best metric model\n", + "current epoch: 22 current mean dice: 0.9054\n", + "best mean dice: 0.9054 at epoch: 22\n", + "----------\n", + "epoch 23/25\n", + "1/16, train_loss: 0.3266\n", + "2/16, train_loss: 0.1723\n", + "3/16, train_loss: 0.3315\n", + "4/16, train_loss: 0.0413\n", + "5/16, train_loss: 0.2091\n", + "6/16, train_loss: 0.0807\n", + "7/16, train_loss: 0.2143\n", + "8/16, train_loss: 0.1514\n", + "9/16, train_loss: 0.0432\n", + "10/16, train_loss: 0.4441\n", + "11/16, train_loss: 0.2704\n", + "12/16, train_loss: 0.2081\n", + "13/16, train_loss: 0.1532\n", + "14/16, train_loss: 0.0983\n", + "15/16, train_loss: 0.2106\n", + "16/16, train_loss: 0.2072\n", + "epoch 23 average loss: 0.1976\n", + "----------\n", + "epoch 24/25\n", + "1/16, train_loss: 0.3257\n", + "2/16, train_loss: 0.1711\n", + "3/16, train_loss: 0.3307\n", + "4/16, train_loss: 0.0376\n", + "5/16, train_loss: 0.2077\n", + "6/16, train_loss: 0.0705\n", + "7/16, train_loss: 0.2141\n", + "8/16, train_loss: 0.1482\n", + "9/16, train_loss: 0.0392\n", + "10/16, train_loss: 0.4439\n", + "11/16, train_loss: 0.2688\n", + "12/16, train_loss: 0.2070\n", + "13/16, train_loss: 0.1512\n", + "14/16, train_loss: 0.0969\n", + "15/16, train_loss: 0.2098\n", + "16/16, train_loss: 0.2062\n", + "epoch 24 average loss: 0.1955\n", + "saved new best metric model\n", + "current epoch: 24 current mean dice: 0.9060\n", + "best mean dice: 0.9060 at epoch: 24\n", + "----------\n", + "epoch 25/25\n", + "1/16, train_loss: 0.3251\n", + "2/16, train_loss: 0.1621\n", + "3/16, train_loss: 0.3298\n", + "4/16, train_loss: 0.0367\n", + "5/16, train_loss: 0.2075\n", + "6/16, train_loss: 0.0430\n", + "7/16, train_loss: 0.2132\n", + "8/16, train_loss: 0.1490\n", + "9/16, train_loss: 0.0390\n", + "10/16, train_loss: 0.4432\n", + "11/16, train_loss: 0.2699\n", + "12/16, train_loss: 0.2080\n", + "13/16, train_loss: 0.1520\n", + "14/16, train_loss: 0.0959\n", + "15/16, train_loss: 0.2101\n", + "16/16, train_loss: 0.2057\n", + "epoch 25 average loss: 0.1931\n", + "train completed, best_metric: 0.9060 at epoch: 24\n" + ] + } + ], + "source": [ + "max_epochs = 25\n", + "val_interval = 2\n", + "num_classes = 2\n", + "best_metric = -1\n", + "best_metric_epoch = -1\n", + "epoch_loss_values = []\n", + "metric_values = []\n", + "post_pred = Compose([EnsureType(), AsDiscrete(argmax=True, to_onehot=num_classes)])\n", + "post_label = Compose([EnsureType(), AsDiscrete(to_onehot=num_classes)])\n", + "dice_metric = DiceMetric(include_background=False, reduction=\"mean\", get_not_nans=False)\n", + "\n", + "for epoch in range(max_epochs):\n", + " print(\"-\" * 10)\n", + " print(f\"epoch {epoch + 1}/{max_epochs}\")\n", + " model.train()\n", + " epoch_loss = 0\n", + " step = 0\n", + " set_determinism(seed=42)\n", + " for batch_data in train_loader:\n", + " step += 1\n", + " inputs, labels = (\n", + " batch_data[\"image\"].to(device),\n", + " batch_data[\"label\"].to(device),\n", + " )\n", + " optimizer.zero_grad()\n", + " outputs = model(inputs)\n", + " loss = loss_function(outputs, labels)\n", + " loss.backward()\n", + " optimizer.step()\n", + " epoch_loss += loss.item()\n", + " print(\n", + " f\"{step}/{len(train_ds) // train_loader.batch_size}, \"\n", + " f\"train_loss: {loss.item():.4f}\")\n", + " epoch_loss /= step\n", + " epoch_loss_values.append(epoch_loss)\n", + " print(f\"epoch {epoch + 1} average loss: {epoch_loss:.4f}\")\n", + "\n", + " if (epoch + 1) % val_interval == 0:\n", + " model.eval()\n", + " with torch.no_grad():\n", + " set_determinism(seed=42)\n", + " for val_data in DataLoader(val_ds, batch_size=1, num_workers=2):\n", + " val_inputs, val_labels = (\n", + " val_data[\"image\"].to(device),\n", + " val_data[\"label\"].to(device),\n", + " )\n", + " roi_size = (160, 160, 160)\n", + " sw_batch_size = 4\n", + " val_outputs = sliding_window_inference(\n", + " val_inputs, roi_size, sw_batch_size, model, overlap=0.5)\n", + " val_outputs = [post_pred(i) for i in decollate_batch(val_outputs)]\n", + " val_labels = [post_label(i) for i in decollate_batch(val_labels)]\n", + " dice_metric(y_pred=val_outputs, y=val_labels)\n", + " metric = dice_metric.aggregate().item()\n", + " dice_metric.reset()\n", + " metric_values.append(metric)\n", + " if metric > best_metric:\n", + " best_metric = metric\n", + " best_metric_epoch = epoch + 1\n", + " torch.save(model.state_dict(), os.path.join(\n", + " root_dir, \"Spleen_best_metric_model_pretrained.pth\"))\n", + " print(\"saved new best metric model\")\n", + " print(\n", + " f\"current epoch: {epoch + 1} current mean dice: {metric:.4f}\"\n", + " f\"\\nbest mean dice: {best_metric:.4f} \"\n", + " f\"at epoch: {best_metric_epoch}\"\n", + " )\n", + "print(\n", + " f\"train completed, best_metric: {best_metric:.4f} \"\n", + " f\"at epoch: {best_metric_epoch}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "5cf1fd04", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(\"train\", (12, 6))\n", + "plt.subplot(1, 2, 1)\n", + "plt.title(\"Epoch Average Loss\")\n", + "x = [i + 1 for i in range(len(epoch_loss_values))]\n", + "y = epoch_loss_values\n", + "plt.xlabel(\"epoch\")\n", + "plt.ylim([0.1, 0.7])\n", + "plt.plot(x, y)\n", + "plt.subplot(1, 2, 2)\n", + "plt.title(\"Val Mean Dice\")\n", + "x = [val_interval * (i + 1) for i in range(len(metric_values))]\n", + "y = metric_values\n", + "plt.xlabel(\"epoch\")\n", + "plt.ylim([0, 1.0])\n", + "plt.plot(x, y)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "4ff0035d", + "metadata": {}, + "source": [ + "#### The model shows that it has improved fairly quickly over just 25 epochs" + ] + }, + { + "cell_type": "markdown", + "id": "0499fa93", + "metadata": {}, + "source": [ + "## Inference\n", + "#### Without GPU skip to here to load previously trained best model (without a gpu the training will take a while)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "29441405", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.load_state_dict(torch.load('monai_data/best_metric_model_pretrained.pth'))" + ] + }, + { + "cell_type": "markdown", + "id": "fab5b4b9", + "metadata": {}, + "source": [ + "#### With the model loaded let's see if much has changed for our example image" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "94615f38", + "metadata": {}, + "outputs": [], + "source": [ + "num_classes = 2\n", + "post_pred = Compose([EnsureType(), AsDiscrete(argmax=True, to_onehot=num_classes)])\n", + "post_label = Compose([EnsureType(), AsDiscrete(to_onehot=num_classes)])\n", + "model.eval()\n", + "with torch.no_grad():\n", + " for data in DataLoader(test_ds, batch_size=1, num_workers=2):\n", + " test_inputs, test_labels = (\n", + " data[\"image\"].to(device),\n", + " data[\"label\"].to(device),\n", + " )\n", + " roi_size = (160, 160, 160)\n", + " sw_batch_size = 4\n", + " test_outputs = sliding_window_inference(\n", + " test_inputs, roi_size, sw_batch_size, model, overlap=0.5)\n", + " test_outputsSpl = [post_pred(i) for i in decollate_batch(test_outputs)]\n", + " test_labelsSpl = [post_label(i) for i in decollate_batch(test_labels)]" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "a3f78dd4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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4sWLWbx4McceeyydnZ10dnbWXVaf7r77bj70oQ/VXYbaXIkx17nA8dX0QmARcF6B/aiFvfvd76azs5Pf/u3f5thjj627nH659957ueqqq+ouQ21usOGawK3VmOn/zszLgT0zcx1AZq6LCAeuRpGIYPz48Vx55ZVe9deoNthwPToz11YBeltE/PvOrhgR84H5g9y/Wszs2bO55557GDvWG1E0ug1qzDUz11bPTwE3AkcAT0bE3gDV81O9rHt5Zs5pGqtVm/vgBz/Idddd19bBev755/OFL3yh7jI0Agw4XCPidRExcds0cCLwIHALcFa12FnAzYMtUq3vve99L/PmzePAAw+su5RB+cEPfsCyZcvqLkMjwGC6GHsCN0bEtu18JzN/EBFLgGsj4n3AKuD0wZepVtTZ2cluu+0GwOc+9zmmTJlSc0UDl5ls3LiRLVu21F2KRgi/RKAB+8QnPsF55zVuBOnoaO9fU9Hd3c2UKVMMV/Vbb18iaN/BMdXq9ttvZ86cOW0fqgB33nknF154ocGqIdX+/zNUi4MOOohJkybVXcag3XXXXSxcuJDFixfXXYpGGHuu6peOjg5mzJjR1ncENLvwwgtZtGhR3WVoBBoZ/0M0bKZNm8bKlSupLmRK6oXDAtppZ599NkuXLm37YF2yZAmHH344hx9+OHfffXfd5WiEsueqnbJgwQLe8573sMcee9RdyqB1d3fT1dVVdxka4QxX9amjo4NZs2axYMEC9ttvv7rLGbDM5JlnniEzWb16dd3laBTwPlf1adKkSfziF79gzJgxdZcyKBs3bmTixIls2rSp7lI0wvgHCjVqLV26lEMOOcRg1bAyXNWro446ioULF7b1FwVuu+02LrvsMlauXFl3KRplHHNVj2bNmsW73/3utvzjgRs3buSJJ54A4Mtf/jI33XRTvQVpVHLMVa/R0dFBV1cXhx12WN2l9Ftm8vDDD3PooYfWXYpGCcdctVN22WUXnn32Wd74xjfWXcqAXHzxxRxzzDF1lyE5LKBX6+joYPz48W13d0BmcvHFF3PttdeyYcOGusuRHBbQq3V2dtLd3d12f/o6M9lrr7146qke//CFVIzDAhqxMpPNmzezdevWukuRXmG4qu2tWbOGyZMns379+rpLkV5huOoVxx57LHfddVdbjbd+//vf59xzz+WXv/xl3aVIr+IFLQHw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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig = plt.figure(frameon=False, figsize=(7,7))\n", + "plt.title('Trained Calculated Spleen')\n", + "plt.imshow(test_outputsSpl[0].cpu().numpy()[1][:,:,200], cmap='Greys_r') #Pretrained model spleen" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "a67f89f2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig = plt.figure(frameon=False, figsize=(7,7))\n", + "plt.title('Differences Between Actual and Model')\n", + "traineddif = test_labelsSpl[0].cpu().numpy()[1][:,:,200] - test_outputsSpl[0].cpu().numpy()[1][:,:,200]\n", + "plt.imshow(traineddif, cmap='Greys_r') #Differences" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "382c7285", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig = plt.figure(frameon=False, figsize=(7,7))\n", + "plt.title('Differences Between The Models')\n", + "modelsdif = test_outputspre[0].cpu().numpy()[1][:,:,200] - test_outputsSpl[0].cpu().numpy()[1][:,:,200]\n", + "plt.imshow(traineddif, cmap='Greys_r') #Differences" + ] + }, + { + "cell_type": "markdown", + "id": "6606bce2", + "metadata": {}, + "source": [ + "#### We see not much has changed, which is a good sign for how well the NVIDIA model performs out of the box." + ] + }, + { + "cell_type": "markdown", + "id": "5cfd20c6", + "metadata": {}, + "source": [ + "#### Here is the final image of our Spleen" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "91e83d40", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "maskedspleen = np.ma.masked_where(test_outputsSpl[0].cpu().numpy()[1][:,:,200] == 0, test_outputsSpl[0].cpu().numpy()[1][:,:,200])\n", + "fig = plt.figure(frameon=False, figsize=(10,10))\n", + "plt.imshow(np.rot90(test_ds[0]['image'][0][:,:,200]), cmap='Greys_r')\n", + "plt.imshow(np.rot90(maskedspleen), cmap='viridis', alpha=1.0)" + ] + }, + { + "cell_type": "markdown", + "id": "6030d210", + "metadata": {}, + "source": [ + "#### Feel free to play around in this notebook or download it and use it where a GPU is accessible" + ] + }, + { + "cell_type": "markdown", + "id": "896388a1", + "metadata": {}, + "source": [ + "## Additional Exercise: Use liver segmentation in addition to spleen\n", + " - Just need to load liver segmentation from NVIDIA\n", + " - While we can't train this model, since we don't have training data, we can use it as a rough estimate" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "657e44a0", + "metadata": {}, + "outputs": [], + "source": [ + "mmarliver = {\n", + " RemoteMMARKeys.ID: \"clara_pt_liver_and_tumor_ct_segmentation_1\",\n", + " RemoteMMARKeys.NAME: \"clara_pt_liver_and_tumor_ct_segmentation\",\n", + " RemoteMMARKeys.FILE_TYPE: \"zip\",\n", + " RemoteMMARKeys.HASH_TYPE: \"md5\",\n", + " RemoteMMARKeys.HASH_VAL: None,\n", + " RemoteMMARKeys.MODEL_FILE: os.path.join(\"models\", \"model.pt\"),\n", + " RemoteMMARKeys.CONFIG_FILE: os.path.join(\"config\", \"config_train.json\"),\n", + " RemoteMMARKeys.VERSION: 1,\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "a6fb0da7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2022-04-27 15:06:54,404 - INFO - Expected md5 is None, skip md5 check for file monai_data/clara_pt_liver_and_tumor_ct_segmentation_1.zip.\n", + "2022-04-27 15:06:54,405 - INFO - File exists: monai_data/clara_pt_liver_and_tumor_ct_segmentation_1.zip, skipped downloading.\n", + "2022-04-27 15:06:54,425 - INFO - Non-empty folder exists in monai_data/clara_pt_liver_and_tumor_ct_segmentation, skipped extracting.\n", + "2022-04-27 15:06:54,426 - INFO - \n", + "*** \"clara_pt_liver_and_tumor_ct_segmentation\" available at monai_data/clara_pt_liver_and_tumor_ct_segmentation.\n", + "2022-04-27 15:06:54,889 - INFO - *** Model: \n", + "2022-04-27 15:06:54,938 - INFO - *** Model params: {'dimensions': 3, 'in_channels': 1, 'out_channels': 3, 'channels': [16, 32, 64, 128, 256], 'strides': [2, 2, 2, 2], 'num_res_units': 2, 'norm': 'batch'}\n", + "2022-04-27 15:06:54,950 - INFO - \n", + "---\n", + "2022-04-27 15:06:54,951 - INFO - For more information, please visit https://ngc.nvidia.com/catalog/models/nvidia:med:clara_pt_liver_and_tumor_ct_segmentation\n", + "\n" + ] + } + ], + "source": [ + " try: #MONAI=0.8\n", + " unet_model = load_from_mmar(\n", + " item = mmarliver['name'], \n", + " mmar_dir=root_dir,\n", + " map_location=device,\n", + " version=mmarliver['version'],\n", + " pretrained=True)\n", + " except: #MONAI<0.8\n", + " unet_model = load_from_mmar(\n", + " mmarliver, \n", + " mmar_dir=root_dir,\n", + " map_location=device,\n", + " pretrained=True)\n", + " model = unet_model" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "55034354", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "using a pretrained model.\n", + "2022-04-27 15:06:55,931 - INFO - Expected md5 is None, skip md5 check for file monai_data/clara_pt_liver_and_tumor_ct_segmentation_1.zip.\n", + "2022-04-27 15:06:55,931 - INFO - File exists: monai_data/clara_pt_liver_and_tumor_ct_segmentation_1.zip, skipped downloading.\n", + "2022-04-27 15:06:55,932 - INFO - Non-empty folder exists in monai_data/clara_pt_liver_and_tumor_ct_segmentation, skipped extracting.\n", + "2022-04-27 15:06:55,933 - INFO - \n", + "*** \"clara_pt_liver_and_tumor_ct_segmentation\" available at monai_data/clara_pt_liver_and_tumor_ct_segmentation.\n", + "2022-04-27 15:06:55,962 - INFO - *** Model: \n", + "2022-04-27 15:06:56,010 - INFO - *** Model params: {'dimensions': 3, 'in_channels': 1, 'out_channels': 3, 'channels': [16, 32, 64, 128, 256], 'strides': [2, 2, 2, 2], 'num_res_units': 2, 'norm': 'batch'}\n", + "2022-04-27 15:06:56,023 - INFO - \n", + "---\n", + "2022-04-27 15:06:56,024 - INFO - For more information, please visit https://ngc.nvidia.com/catalog/models/nvidia:med:clara_pt_liver_and_tumor_ct_segmentation\n", + "\n" + ] + } + ], + "source": [ + "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", + "\n", + "print(\"using a pretrained model.\")\n", + "try: #MONAI=0.8\n", + " unet_model = load_from_mmar(\n", + " item = mmarliver['name'], \n", + " mmar_dir=root_dir,\n", + " map_location=device,\n", + " version=mmarliver['version'],\n", + " pretrained=True)\n", + "except: #MONAI<0.8\n", + " unet_model = load_from_mmar(\n", + " mmarliver, \n", + " mmar_dir=root_dir,\n", + " map_location=device,\n", + " pretrained=True)\n", + "model = unet_model.to(device)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "a79c1731", + "metadata": {}, + "outputs": [], + "source": [ + "num_classesP=3\n", + "num_classesL=2\n", + "post_pred = Compose([EnsureType(), AsDiscrete(argmax=True, to_onehot=num_classesP)])\n", + "post_label = Compose([EnsureType(), AsDiscrete(to_onehot=num_classesL)])\n", + "model.eval()\n", + "with torch.no_grad():\n", + " for data in DataLoader(test_ds, batch_size=1, num_workers=2):\n", + " test_inputs, test_labels = (\n", + " data[\"image\"].to(device),\n", + " data[\"label\"].to(device),\n", + " )\n", + " roi_size = (160, 160, 160)\n", + " sw_batch_size = 4\n", + " test_outputs = sliding_window_inference(\n", + " test_inputs, roi_size, sw_batch_size, model, overlap=0.5)\n", + " test_outputsliv = [post_pred(i) for i in decollate_batch(test_outputs)] # Decollate our results\n", + " test_labelsliv = [post_label(i) for i in decollate_batch(test_labels)]" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "c0956706", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "sliceval = 215\n", + "maskedliv = np.ma.masked_where(test_outputsliv[0].cpu().numpy()[1][:,:,sliceval] == 0, test_outputsliv[0].cpu().numpy()[1][:,:,sliceval])\n", + "maskedspleen = np.ma.masked_where(test_outputsSpl[0].cpu().numpy()[1][:,:,sliceval] == 0, test_outputsSpl[0].cpu().numpy()[1][:,:,sliceval])\n", + "fig = plt.figure(frameon=False, figsize=(7,7))\n", + "plt.title('Pretrained Calculated Liver and spleen')\n", + "plt.imshow(np.rot90(test_ds[0]['image'][0][:,:,sliceval]), cmap='Greys_r')\n", + "plt.imshow(np.rot90(maskedliv), cmap='cividis', alpha=0.75)\n", + "plt.imshow(np.rot90(maskedspleen), cmap='viridis', alpha=0.75)" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "5bdfdbe9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "sliceval = 110\n", + "maskedliv = np.ma.masked_where(test_outputsliv[0].cpu().numpy()[1][:,sliceval,:] == 0, test_outputsliv[0].cpu().numpy()[1][:,sliceval,:])\n", + "maskedspleen = np.ma.masked_where(test_outputsSpl[0].cpu().numpy()[1][:,sliceval,:] == 0, test_outputsSpl[0].cpu().numpy()[1][:,sliceval,:])\n", + "fig = plt.figure(frameon=False, figsize=(7,7))\n", + "plt.title('Pretrained Calculated Liver and Spleen')\n", + "plt.imshow(np.rot90(test_ds[0]['image'][0][:,sliceval,:]), cmap='Greys_r')\n", + "plt.imshow(np.rot90(maskedliv), cmap='cividis', alpha=0.75)\n", + "plt.imshow(np.rot90(maskedspleen), cmap='viridis', alpha=0.75)" + ] + }, + { + "cell_type": "markdown", + "id": "af1169b6", + "metadata": {}, + "source": [ + "#### Continue including more models found at the NGC Catalog: \n", + "#### https://catalog.ngc.nvidia.com/models\n", + "##### - Recommend filtering by 'CT' " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0dce4d55", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e17e6228", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7034135a", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "environment": { + "name": "pytorch-gpu.1-9.m75", + "type": "gcloud", + "uri": "gcr.io/deeplearning-platform-release/pytorch-gpu.1-9:m75" + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/notebooks/SpleenLiverSegmentation/monai_data/Spleen_best_metric_model_pretrained.pth b/tutorials/notebooks/SpleenLiverSegmentation/monai_data/Spleen_best_metric_model_pretrained.pth new file mode 100644 index 0000000..61ed04c Binary files /dev/null and b/tutorials/notebooks/SpleenLiverSegmentation/monai_data/Spleen_best_metric_model_pretrained.pth differ diff --git a/tutorials/notebooks/elasticBLAST/run_elastic_blast.ipynb b/tutorials/notebooks/elasticBLAST/run_elastic_blast.ipynb new file mode 100644 index 0000000..7c63a6e --- /dev/null +++ b/tutorials/notebooks/elasticBLAST/run_elastic_blast.ipynb @@ -0,0 +1,229 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "8c3f3bb2", + "metadata": {}, + "source": [ + "# Run ElasticBLAST on GCP" + ] + }, + { + "cell_type": "markdown", + "id": "aee3b229", + "metadata": {}, + "source": [ + "This notebook is based on the [this tutorial](https://blast.ncbi.nlm.nih.gov/doc/elastic-blast/quickstart-gcp.html). If at any point, you get an API has not been enabled error, go to [this page](https://cloud.google.com/endpoints/docs/openapi/enable-api#console), click `Go to APIs and Services`, then search for you API and click `Enable`." + ] + }, + { + "cell_type": "markdown", + "id": "38dfb579", + "metadata": {}, + "source": [ + "### 1) Install elastic blast" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d96bb988", + "metadata": {}, + "outputs": [], + "source": [ + "!pip3 install elastic-blast" + ] + }, + { + "cell_type": "markdown", + "id": "684e79f6", + "metadata": {}, + "source": [ + "Test your install, it should print out a version and full help menu." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2aa11ccc", + "metadata": {}, + "outputs": [], + "source": [ + "!elastic-blast --version\n", + "!elastic-blast --help" + ] + }, + { + "cell_type": "markdown", + "id": "58b59cb0", + "metadata": {}, + "source": [ + "### 2) Optionally, create a bucket for this tutorial if one does not yet exist" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "319ff226", + "metadata": {}, + "outputs": [], + "source": [ + "!gsutil ls gs://elasticblast-${USER} >& /dev/null || gsutil mb gs://elasticblast-${USER}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "38267c47-029c-4026-8dc1-6020f978e496", + "metadata": {}, + "outputs": [], + "source": [ + "!gsutil ls gs://elasticblast-jupyter" + ] + }, + { + "cell_type": "markdown", + "id": "449d7511", + "metadata": {}, + "source": [ + "### 3) Create a config file that defines the job parameters" + ] + }, + { + "cell_type": "markdown", + "id": "d0017943-bbd3-472f-a3f8-30d88777f70a", + "metadata": {}, + "source": [ + "Confirm your user name to include in the config" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e4bd7452-79ea-4c8b-a13e-b46cff6a5564", + "metadata": {}, + "outputs": [], + "source": [ + "! echo ${USER}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b578c1ea", + "metadata": {}, + "outputs": [], + "source": [ + "!touch BDQA.ini" + ] + }, + { + "cell_type": "markdown", + "id": "a1b0a866", + "metadata": {}, + "source": [ + "Open the config file and add the following:\n", + "```\n", + "[cloud-provider]\n", + "gcp-project = YOUR_GCP_PROJECT_ID\n", + "gcp-region = us-east4\n", + "gcp-zone = us-east4-c\n", + "\n", + "[cluster]\n", + "num-nodes = 6\n", + "num-cpus = 30\n", + "labels = owner=jupyter\n", + "\n", + "[blast]\n", + "program = blastp\n", + "db = refseq_protein\n", + "queries = gs://elastic-blast-samples/queries/protein/BDQA01.1.fsa_aa\n", + "results = gs://elasticblast-jupyter/results/BDQA\n", + "options = -task blastp-fast -evalue 0.01 -outfmt \"7 std sskingdoms ssciname\"\n", + "```\n", + "Replace _YOUR_GCP_PROJECT_ID_ with your actual project ID. The default CPUs for the cluster is 16 CPUs, here we set it to 30 to allow enough CPUs per job.\n", + "\n", + "You can add additional configuration values from [this guide](https://blast.ncbi.nlm.nih.gov/doc/elastic-blast/configuration.html)." + ] + }, + { + "cell_type": "markdown", + "id": "9a9f8192", + "metadata": {}, + "source": [ + "### 4) Submit the job" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "398253e8", + "metadata": {}, + "outputs": [], + "source": [ + "!elastic-blast submit --cfg BDQA.ini" + ] + }, + { + "cell_type": "markdown", + "id": "9a8e7716", + "metadata": {}, + "source": [ + "### 5) Check results and troubleshoot" + ] + }, + { + "cell_type": "markdown", + "id": "94a43c5e", + "metadata": {}, + "source": [ + "It should take a about 15-20 min to spin up your cluster and start submitting jobs. You can check the status of your job by opening a terminal within this instance, and paste in `elastic-blast status --cfg BDQA.ini`. You can also go to Kubernetes Engine and monitor the health of your cluster, or interact with the pods via `kubectl`. For example, in the terminal you can type `kubectl get pods`, to see your pods, then use `kubectl describe pods ` to get details of a particular pod, and use `kubectl logs ` to view the status of a particular pod. You can also monitor the cloud bucket with `!gsutil ls gs://elasticblast-jupyter/` to see if results files are being written." + ] + }, + { + "cell_type": "markdown", + "id": "74ce84e2-43db-46b3-b3e5-af401587e28a", + "metadata": {}, + "source": [ + "### 6) Clean up cloud resources" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3961d577-72b5-4a06-8597-7c724cf278c5", + "metadata": {}, + "outputs": [], + "source": [ + "!elastic-blast delete --cfg BDQA.ini" + ] + } + ], + "metadata": { + "environment": { + "kernel": "python3", + "name": "common-cpu.m93", + "type": "gcloud", + "uri": "gcr.io/deeplearning-platform-release/base-cpu:m93" + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/notebooks/ncbi-stat-tutorial/STAT-tutorial.ipynb b/tutorials/notebooks/ncbi-stat-tutorial/STAT-tutorial.ipynb new file mode 100644 index 0000000..4e77b08 --- /dev/null +++ b/tutorials/notebooks/ncbi-stat-tutorial/STAT-tutorial.ipynb @@ -0,0 +1,268 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "1651316c", + "metadata": {}, + "source": [ + "# Query the NCBI STAT Metadata Tables to Search for Pathogens! " + ] + }, + { + "cell_type": "markdown", + "id": "15022f97", + "metadata": {}, + "source": [ + "## Overview\n", + "\n", + "DNA sequence data are typically deposited into the [NCBI Sequence Read Archive](https://www.ncbi.nlm.nih.gov/sra). Each FASTQ file is assigned a taxon id (usually a species) defined by [NCBI taxonomy](https://www.ncbi.nlm.nih.gov/taxonomy). So, if you were to search SRA for a particular species, such as _[Mus musculus](https://www.ncbi.nlm.nih.gov/sra/?term=Mus+musculus)_ we can find the files associated with this taxon as defined by the sequence submitter. There are three possible issues with this approach. First, sometime people make mistakes about the taxon id of their sequence. They may have said the sequence was a mouse when it was actually a dog, and you won't know until you have analyzed that sequence. Second, most FASTQ files have mixed DNA sequence due to some level of contamination. If the mouse DNA came from a tail tip, the FASTQ will likely be full of microbial sequence as well as mouse DNA! Finally, many samples in SRA are metagenomic, and so you really have no idea what DNA is in there until you analyze it.\n", + "\n", + "To address these issues, NCBI came up with a tool called the [SRA Taxonomy Analysis Tool]( https://www.ncbi.nlm.nih.gov/sra/docs/sra-taxonomy-analysis-tool/#:~:text=The%20NCBI%20SRA%20Taxonomy%20Analysis,from%20next%20generation%20sequencing%20runs), or STAT. STAT maps sequencing reads against a precomputed kmer dictionary and assigns reads to the lowest ambiguous taxonomic node (it is based on a known phylogeny). STAT is run for all SRA submissions, and the results are stored in Cloud-based metadata tables that can be queried using BigQuery. This table can then be matched to the SRA metadata tables to get robust information on each Accession. Here we walk through a basic STAT query for MPOX virus and teach you how to create your own queries. " + ] + }, + { + "cell_type": "markdown", + "id": "b068c9da-7814-4b24-9ff8-12473048bdcf", + "metadata": {}, + "source": [ + "### 1) Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d2c3ec94-16cd-43b6-a4c9-d56aa593382e", + "metadata": {}, + "outputs": [], + "source": [ + "# Import the biquery api\n", + "from google.cloud import bigquery\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "243fb23b-ec7e-423f-a531-9f39a1954087", + "metadata": {}, + "outputs": [], + "source": [ + "# Designate the client for the API\n", + "client = bigquery.Client(location=\"US\")\n", + "print(\"Client creating using default project: {}\".format(client.project))" + ] + }, + { + "cell_type": "markdown", + "id": "7ec384ad-732e-4cb9-b0ff-4b6addb6c2a7", + "metadata": {}, + "source": [ + "### 2) Define and run our query\n", + "Note that we are doing a few things here. First, we are going to query the STAT metadata table (nih-sra-datastore.sra_tax_analysis_tool.tax_analysis) and only get accessions that include Monkeypox virus (tax id = 10244). You could also cast a wider net and filter to Orthopox (10242) since many reads will not map unambiguously to Monkeypox and will be assigned to Orthopox. Second, we are going to JOIN this table with the SRA metadata table (nih-sra-datastore.sra.metadata) on the Accession number, this gives us more information about our record. Finally, we are going to only keep samples with at least 50 reads (total_count) assigned to the target tax id. This means that at least 50 reads need to be assigned to Monkeypox or daughter nodes in the phylogeny. Also we are going to look for records submitted anytime in the past 5 years (INTERVAL parameter)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7fb2102a-4f91-4002-a521-db31f7271045", + "metadata": {}, + "outputs": [], + "source": [ + "# Define the query\n", + "query = \"\"\"\n", + "#standardSQL\n", + "WITH\n", + " span AS (\n", + " SELECT\n", + " acc,\n", + " ileft AS rileft,\n", + " iright AS riright\n", + " FROM\n", + " nih-sra-datastore.sra_tax_analysis_tool.tax_analysis\n", + " WHERE\n", + " tax_id = 10244 )\n", + "SELECT\n", + " acc,\n", + " name,\n", + " total_count,\n", + " self_count,\n", + " center_name,\n", + " librarysource,\n", + " organism,\n", + " releasedate,\n", + " geo_loc_name_sam,\n", + " attributes\n", + "FROM\n", + " nih-sra-datastore.sra_tax_analysis_tool.tax_analysis\n", + "JOIN\n", + " nih-sra-datastore.sra.metadata\n", + "USING\n", + " (acc)\n", + "JOIN\n", + " span\n", + "USING\n", + " (acc)\n", + "WHERE\n", + " (ileft>=rileft\n", + " AND iright<=riright)\n", + " AND (total_count>99\n", + " OR organism='wastewater metagenome')\n", + " AND CAST(releasedate AS date) > DATE_SUB(CURRENT_DATE(), INTERVAL 120 month)\n", + "ORDER BY\n", + " releasedate DESC,\n", + " acc,\n", + " total_count DESC\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "id": "214bdba1-173f-4ea8-9189-b06711de90c3", + "metadata": {}, + "source": [ + "Execute the query" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9722d4d4-3150-47cf-81fd-141de19488ea", + "metadata": {}, + "outputs": [], + "source": [ + "query_job = client.query(\n", + " query,\n", + " # Location must match that of the dataset(s) referenced in the query.\n", + " location=\"US\",\n", + ") # API request - starts the query\n", + "\n", + "df = query_job.to_dataframe()" + ] + }, + { + "cell_type": "markdown", + "id": "f0d15f46-1f59-479a-9ba7-6b1f412188eb", + "metadata": {}, + "source": [ + "See how many unique accessions are in the df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fcd6b33a-f4ef-452f-b9e8-3b54b86d98b9", + "metadata": {}, + "outputs": [], + "source": [ + "len(df['acc'].unique())" + ] + }, + { + "cell_type": "markdown", + "id": "410acf31-3fc1-4394-98eb-92e0993ca5d9", + "metadata": {}, + "source": [ + "Now view the data frame. You will see that we first have the STAT metadata and then the SRA metadata such as submitter-assigned organism name, library source, release date etc. In the STAT metadata there are a few things to note. First, each tax id (name) with reads assigned from that accession is listed with the accession. So if the accession SRR12345 had reads assigned to both Monkeypox virus and variola virus, then you would see two records of that accession with both virus' listed under name. Next we have the numbers of reads (in NCBI parlance 'spots') assigned to that taxon id. We see two counts: total_count and self_count. Total count refers to the number of reads assigned to that node in the phylogeny (taxon) and all daughter nodes (decendents in the phylogeny). Self count refers to the number of reads assigned to that particular taxon. For example, if we had filtered more broadly to Orthopox (genus) instead of Monkeypox, we would have seen that Orthopox would have a total count of say 100 reads, which includes all reads assigned to any taxon within Orthopox with a self count of say 50. Then Monkeypox could have a total count of 50 and self count of 50 (assuming it is the terminal taxon in the tree with no daughter taxa). These 50 reads would be included in the total count of Orthopox, but not the self count of Orthopox. You can see all the STAT metadata fields [here](https://www.ncbi.nlm.nih.gov/sra/docs/sra-cloud-based-taxonomy-analysis-table/)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "28f5f9ef-2d19-470d-abaf-ccb4e008b626", + "metadata": {}, + "outputs": [], + "source": [ + "# look at the df\n", + "df" + ] + }, + { + "cell_type": "markdown", + "id": "197596ef-6bad-439f-bf8d-f9e3f2ae481b", + "metadata": {}, + "source": [ + "Now we have a pandas data frame and you can filter and manipulate as desired." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b2a264f3-329c-428b-bb58-28826abf444a", + "metadata": {}, + "outputs": [], + "source": [ + "print(df['organism'].unique())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dd4578f8-354d-44b6-9afb-adb6b6278302", + "metadata": {}, + "outputs": [], + "source": [ + "# for example we can look at just wastewater samples \n", + "df_filt = df[df['organism'] == 'wastewater metagenome']\n", + "df_filt" + ] + }, + { + "cell_type": "markdown", + "id": "cb2f0320-54e4-499c-8925-57b539d20e34", + "metadata": {}, + "source": [ + "You can also write to an outfile." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bb8698e0-21bd-4282-b2cb-04160a33b6f2", + "metadata": {}, + "outputs": [], + "source": [ + "# Specify the columns to be written to the text file\n", + "columns_to_write = [\"acc\",\"name\",\"total_count\",\"self_count\",\"center_name\",\"librarysource\",\"organism\",\"releasedate\",\"geo_loc_name_sam\"]\n", + "\n", + "# Write the specified columns to a text file\n", + "output_file = 'stat_results_mpox.txt'\n", + "df[columns_to_write].to_csv(output_file, sep='\\t', index=False)" + ] + }, + { + "cell_type": "markdown", + "id": "04eabbd9-24dc-4035-8dee-dd6f049a3270", + "metadata": {}, + "source": [ + "If you want to experiment a bit, rerun the query with a different tax id, modify the total_count, and modify the time Interval and see how your results change. Or, we can run a few more example queries from the [NCBI STAT page](https://www.ncbi.nlm.nih.gov/sra/docs/sra-cloud-based-taxonomy-analysis-table/). " + ] + } + ], + "metadata": { + "environment": { + "kernel": "python3", + "name": "tf2-gpu.2-11.m109", + "type": "gcloud", + "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-11:m109" + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/tutorials/notebooks/pangolin/pangolin_pipeline.ipynb b/tutorials/notebooks/pangolin/pangolin_pipeline.ipynb new file mode 100644 index 0000000..b46421c --- /dev/null +++ b/tutorials/notebooks/pangolin/pangolin_pipeline.ipynb @@ -0,0 +1,424 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "31e8c3cd", + "metadata": {}, + "source": [ + "# Pangolin SARS-CoV-2 Pipeline Notebook" + ] + }, + { + "cell_type": "markdown", + "id": "56a29212", + "metadata": {}, + "source": [ + "We are going to run a standard covid bioinformatics pipeline using the Pangolin workflow. https://cov-lineages.org/resources/pangolin/usage.html" + ] + }, + { + "cell_type": "markdown", + "id": "03541941", + "metadata": {}, + "source": [ + "### Required software" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "f994b990", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "env: CPU=4\n" + ] + } + ], + "source": [ + "#change this depending on how many threads are available in your notebook\n", + "%env CPU=4" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f421805e", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "#install biopython to import packages below\n", + "! pip install biopython" + ] + }, + { + "cell_type": "markdown", + "id": "87c08f11-494f-4aa9-9fe9-61790b68567f", + "metadata": {}, + "source": [ + "### Install mambaforge\n", + "You can also use the default installed conda, but mamba is so much faster! " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f9d1e2be-9c4a-4fc0-be33-1f3db8f1dce1", + "metadata": {}, + "outputs": [], + "source": [ + "! curl -L -O https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-$(uname)-$(uname -m).sh\n", + "! bash Mambaforge-$(uname)-$(uname -m).sh -b -p $HOME/mambaforge" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "cd06e08b-6ba3-49e2-a118-fde1533f89f3", + "metadata": {}, + "outputs": [], + "source": [ + "#add to your path\n", + "import os\n", + "os.environ[\"PATH\"] += os.pathsep + os.environ[\"HOME\"]+\"/mambaforge/bin\"" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "fd936fd6", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " __ __ __ __\n", + " / \\ / \\ / \\ / \\\n", + " / \\/ \\/ \\/ \\\n", + "███████████████/ /██/ /██/ /██/ /████████████████████████\n", + " / / \\ / \\ / \\ / \\ \\____\n", + " / / \\_/ \\_/ \\_/ \\ o \\__,\n", + " / _/ \\_____/ `\n", + " |/\n", + " ███╗ ███╗ █████╗ ███╗ ███╗██████╗ █████╗\n", + " ████╗ ████║██╔══██╗████╗ ████║██╔══██╗██╔══██╗\n", + " ██╔████╔██║███████║██╔████╔██║██████╔╝███████║\n", + " ██║╚██╔╝██║██╔══██║██║╚██╔╝██║██╔══██╗██╔══██║\n", + " ██║ ╚═╝ ██║██║ ██║██║ ╚═╝ ██║██████╔╝██║ ██║\n", + " ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝\n", + "\n", + " mamba (1.4.2) supported by @QuantStack\n", + "\n", + " GitHub: https://github.com/mamba-org/mamba\n", + " Twitter: https://twitter.com/QuantStack\n", + "\n", + "█████████████████████████████████████████████████████████████\n", + "\n", + "\n", + "Looking for: ['sra-tools', 'pangolin', 'ete3', 'minimap2']\n", + "\n", + "\u001b[?25l\u001b[2K\u001b[0G[+] 0.0s\n", + "\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.1s\n", + "conda-forge/linux-64 \u001b[90m━━━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\n", + "conda-forge/noarch \u001b[33m━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\n", + "bioconda/linux-64 \u001b[33m━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\n", + "bioconda/noarch \u001b[90m━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\n", + "etetoolkit/linux-64 \u001b[90m━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.2s\n", + "conda-forge/linux-64 \u001b[33m━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.2s\n", + "conda-forge/noarch \u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.2s\n", + "bioconda/linux-64 \u001b[33m━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.2s\n", + "bioconda/noarch \u001b[90m━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.2s\n", + "etetoolkit/linux-64 \u001b[90m━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gconda-forge/linux-64 No change\n", + "bioconda/noarch No change\n", + "[+] 0.3s\n", + "conda-forge/noarch \u001b[90m╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.3s\n", + "bioconda/linux-64 \u001b[33m━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.3s\n", + "etetoolkit/linux-64 \u001b[90m━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.3s\n", + "etetoolkit/noarch \u001b[90m━━━━━━━━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\n", + "pkgs/r/linux-64 \u001b[90m╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gconda-forge/noarch No change\n", + "bioconda/linux-64 No change\n", + "etetoolkit/noarch No change\n", + "etetoolkit/linux-64 No change\n", + "pkgs/r/noarch No change\n", + "pkgs/main/noarch No change\n", + "pkgs/r/linux-64 No change\n", + "[+] 0.4s\n", + "pkgs/main/linux-64 \u001b[90m━━━━╸\u001b[0m\u001b[33m━━━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━\u001b[0m 0.0 B / ??.?MB @ ??.?MB/s 0.1s\u001b[2K\u001b[1A\u001b[2K\u001b[0Gpkgs/main/linux-64 No change\n", + "\u001b[?25h\n", + "Pinned packages:\n", + " - python 3.10.*\n", + "\n", + "\n", + "Transaction\n", + "\n", + " Prefix: /opt/conda\n", + "\n", + " Updating specs:\n", + "\n", + " - sra-tools\n", + " - pangolin\n", + " - ete3\n", + " - minimap2\n", + " - ca-certificates\n", + " - certifi\n", + " - openssl\n", + "\n", + "\n", + " Package Version Build Channel Size\n", + "───────────────────────────────────────────────────────────────\n", + " Install:\n", + "───────────────────────────────────────────────────────────────\n", + "\n", + " \u001b[32m+ k8 \u001b[0m 0.2.5 hdcf5f25_4 bioconda/linux-64 2MB\n", + " \u001b[32m+ minimap2\u001b[0m 2.26 he4a0461_2 bioconda/linux-64 1MB\n", + "\n", + " Summary:\n", + "\n", + " Install: 2 packages\n", + "\n", + " Total download: 3MB\n", + "\n", + "───────────────────────────────────────────────────────────────\n", + "\n", + "\n", + "\u001b[?25l\u001b[2K\u001b[0G[+] 0.0s\n", + "Downloading \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0.0 B 0.0s\n", + "Extracting \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0 0.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.1s\n", + "Downloading (2) \u001b[33m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0.0 B k8 0.0s\n", + "Extracting \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m 0 0.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gk8 1.8MB @ 11.4MB/s 0.2s\n", + "minimap2 1.1MB @ 6.7MB/s 0.2s\n", + "[+] 0.2s\n", + "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 2.9MB 0.1s\n", + "Extracting (2) \u001b[33m━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━━━\u001b[0m 0 k8 0.0s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.3s\n", + "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 2.9MB 0.1s\n", + "Extracting (2) \u001b[33m━━━━━━━━━━━━━╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m 0 k8 0.1s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.4s\n", + "Downloading ━━━━━━━━━━━━━━━━━━━━━━━ 2.9MB 0.1s\n", + "Extracting (1) ━━━━━━━━━━╸\u001b[33m━━━━━━━━━━━━\u001b[0m 1 k8 0.2s\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G\u001b[?25h\n", + "Downloading and Extracting Packages\n", + "\n", + "Preparing transaction: done\n", + "Verifying transaction: done\n", + "Executing transaction: done\n" + ] + } + ], + "source": [ + "! mamba install -y -c conda-forge -c bioconda -c etetoolkit sra-tools pangolin ete3 minimap2 -y" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5a99cf0d", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "#import libraries\n", + "import os\n", + "from Bio import SeqIO\n", + "from Bio import Entrez" + ] + }, + { + "cell_type": "markdown", + "id": "dc694629", + "metadata": {}, + "source": [ + "### Set up your directory structure and remove files from previous runs if they exist" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8f831fca", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "if not os.path.exists('pangolin_analysis'):\n", + " os.mkdir('pangolin_analysis')\n", + "os.chdir('pangolin_analysis')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6423ca5d", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "if os.path.exists('sarscov2_sequences.fasta'):\n", + " os.remove('sarscov2_sequences.fasta')\n", + "!rm sarscov2_*\n", + "!rm lineage_report.csv" + ] + }, + { + "cell_type": "markdown", + "id": "9d7015e6", + "metadata": {}, + "source": [ + "### Fetch viral sequences using a list of accession IDs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "16824bcf", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "#give a list of accession number for sars sequences\n", + "acc_nums=['NC_045512','LR757995','LR757996','OL698718','OL677199','OL672836','MZ914912','MZ916499','MZ908464','MW580573','MW580574','MW580576','MW991906','MW931310','MW932027','MW424864','MW453109','MW453110']\n", + "print('the number of sequences we will analyze = ',len(acc_nums))" + ] + }, + { + "cell_type": "markdown", + "id": "9e382d33", + "metadata": {}, + "source": [ + "Let this block run without going to the next until it finishes, otherwise you may get an error about too many requests. If that happens, reset your kernel and just rerun everything (except installing software)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a28a7122", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "#use the bio.entrez toolkit within biopython to download the accession numbers\n", + "#save those sequences to a single fasta file\n", + "Entrez.email = \"email@example.com\" # ell NCBI who you are\n", + "filename = \"sarscov2_seqs.fasta\"\n", + "if not os.path.isfile(filename):\n", + " # Downloading...\n", + " for acc in acc_nums:\n", + " net_handle = Entrez.efetch(\n", + " db=\"nucleotide\", id=acc, rettype=\"fasta\", retmode=\"text\"\n", + " )\n", + " out_handle = open(filename, \"a\")\n", + " out_handle.write(net_handle.read())\n", + " out_handle.close()\n", + " net_handle.close()\n", + " print(\"Saved\",acc)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "56acb7cc", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "#make sure our fasta file has the same number of seqs as the acc_nums list\n", + "print('the number of seqs in our fasta file: ')\n", + "! grep '>' sarscov2_seqs.fasta | wc -l" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8606c352", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "#let's peek at our new fasta file\n", + "! head sarscov2_seqs.fasta" + ] + }, + { + "cell_type": "markdown", + "id": "2db37b4e", + "metadata": { + "tags": [] + }, + "source": [ + "### Run pangolin to identify lineages and output alignment\n", + "Here we call pangolin, give it our input sequences and the number of threads. We also tell it to output the alignment. The full list of pangolin parameters can be found in the [docs](https://cov-lineages.org/resources/pangolin/usage.html)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f277c6c4-a286-4020-8e1c-3941f3da9035", + "metadata": {}, + "outputs": [], + "source": [ + "! pangolin --help" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f1a17a74", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "! pangolin sarscov2_seqs.fasta --threads $CPU" + ] + }, + { + "cell_type": "markdown", + "id": "b0e56a4b", + "metadata": {}, + "source": [ + "You can view the output file from pangolin called lineage_report.csv (within pangolin_analysis folder) by double clicking on the file, or by right clicking and downloading. What lineages are present in the dataset? Is Omicron in there?" + ] + } + ], + "metadata": { + "environment": { + "kernel": "python3", + "name": "tf2-gpu.2-11.m110", + "type": "gcloud", + "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-11:m110" + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}