Approach
The genotype of cholinergic nicotinc receptor alpha 4 (chrna4) located on chromosome 20 (chr20: 63,343,310..63,375,471) will be determined.
This process involves 4 broader steps.
A. Process the sequencing files and generate a gatk validated (gatk ValidatesamFile) BAM file
B. Call haplotypes using GATK HaplotypeCaller in GVCF mode (to generate GenotypeVCFs)
C. Combine the GenotypeVCFs files (using gatk CombineGVCFs) and genotype the samples together (using gatk GenotypeGVCFs) or
D. Run gatk GenomicsDBImport on individual GenotypeVCFs together
Machine
Google Cloud Platform (GCP), 4 vCPUs, 15 GB RAM
Google Cloud Platform (GCP), 8 vCPUs, 30 GB RAM
Google Cloud Platform (GCP), 24 vCPUs, 32 GB RAM
AWS: c5.18xlarge (72 vCPUs, 144 GB RAM)
AWS: m5.24xlarge (96 vCPUs, 384 GiB RAM)
Analysis datasets
Download genome sequencing data for individual NA12891 from the 1000 genome project site
Download genome sequencing data for individual NA12892 from the 1000 genome project site
Download genome sequencing data for individual NA12878 from the 1000 genome project site
Directory content
~/gatk-data-ref$ ls -l
-rw-rw-r-- 1 ubuntu ubuntu 66771360285 Apr 30 15:38 SRR622458_1.fastq.gz
-rw-rw-r-- 1 ubuntu ubuntu 68300205647 Apr 30 15:45 SRR622458_2.fastq.gz
-rw-rw-r-- 1 ubuntu ubuntu 68029335546 Apr 30 15:50 SRR622459_1.fastq.gz
-rw-rw-r-- 1 ubuntu ubuntu 69219443789 Apr 30 15:54 SRR622459_2.fastq.gz
-rw-rw-r-- 1 ubuntu ubuntu 4598249219 Apr 30 15:45 SRR622461_1.fastq.gz
-rw-rw-r-- 1 ubuntu ubuntu 4792383631 Apr 30 15:47 SRR622461_2.fastq.gz
Check analysis datasets
For NA12891
~/gatk-data-ref$ zcat SRR622458_1.fastq.gz | head -n 2
@SRR622458.1 1/1
TGGGATTGGGGTAGGGCTAGGGCTCGGGTTGGGGATAGGGTGAGGGTTTGGGATAGGGGTAGGGTTAGGGTGTTGGCTAGGGTTAGGGCGAGGGCCAGGGC
~/gatk-data-ref$ zcat SRR622458_2.fastq.gz | head -n 2
@SRR622458.1 1/2
ATAACCCTAACCCTAACCCTAACGCTAACCCTAACCCTAACCCTAACCCTAACAATAACCCTAACCCTAACACTAACCTTACCCCTAACCCTAACCCTCAC
For NA12892
~/gatk-data-ref$ zcat SRR622459_1.fastq.gz | head -n 2
@SRR622459.1 1/1
GTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGAGATCGGAAG
~/gatk-data-ref$ zcat SRR622459_2.fastq.gz | head -n 2
@SRR622459.1 1/2
CCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACAGATCGGAAG
For NA12878
~/gatk-data-ref$ zcat SRR622461_1.fastq.gz | head -n 2
@SRR622461.1 1/1
GCTAGGGGTAGGGTTAGGGCTCGGATTAGGGGTGGGATTAGGGTTAGAGGAAGTGATAGCCTTCAGGGTAGGGATCGGGCAAGGAATAGGATTGTGGGTGG
~/gatk-data-ref$ zcat SRR622461_2.fastq.gz | head -n 2
@SRR622461.1 1/2
ATAACCTAAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACTCTATCACTGAACATAAGCCTTACCATACGTTCAAACATACA
Download the reference (fasta, fasta index, dictionary) and BWA index (.alt, .amb, .ann, .bwt, .pac and .sa) files
~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta .
~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.dict .
~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta.fai .
~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta.64.alt .
~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta.64.amb .
~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta.64.ann .
~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta.64.bwt .
~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta.64.pac .
~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta.64.sa .
Additional directory contents
~/gatk-data-ref$ ls -l
-rw-rw-r– 1 ubuntu ubuntu 581712 Jan 6 2016 Homo_sapiens_assembly38.dict
-rw-rw-r– 1 ubuntu ubuntu 3249912778 Jan 5 2016 Homo_sapiens_assembly38.fasta
-rw-rw-r– 1 ubuntu ubuntu 487553 Nov 6 23:47 Homo_sapiens_assembly38.fasta.64.alt
-rw-rw-r– 1 ubuntu ubuntu 20199 Nov 6 23:47 Homo_sapiens_assembly38.fasta.64.amb
-rw-rw-r– 1 ubuntu ubuntu 455474 Nov 6 23:47 Homo_sapiens_assembly38.fasta.64.ann
-rw-rw-r– 1 ubuntu ubuntu 3217347004 Nov 6 23:47 Homo_sapiens_assembly38.fasta.64.bwt
-rw-rw-r– 1 ubuntu ubuntu 804336731 Nov 6 23:48 Homo_sapiens_assembly38.fasta.64.pac
-rw-rw-r– 1 ubuntu ubuntu 1608673512 Nov 6 23:48 Homo_sapiens_assembly38.fasta.64.sa
-rw-rw-r– 1 ubuntu ubuntu 160928 Dec 1 2016 Homo_sapiens_assembly38.fasta.fai
A. Produce validated BAM files for the 3 individuals
A1. Generate a validated BAM file for NA12891
Align the sequences to the reference sequence using BWA
Alignment (bwa mem) will lead to a SAM (sequence alignment file) file, that will be converted to a BAM file (samtools view). It will be sorted (i.e., samtools sort) by co-ordinate and indexed (samtools index). Samtools flagstat will produce alignment statistics.
Additional directory contents
~/gatk-data-ref$ ls -l
-rw-rw-r– 1 b0d2647 b0d2647 189005777011 May 1 17:46 SRR622458.bam
-rw-rw-r– 1 b0d2647 b0d2647 9777672 May 1 19:12 SRR622458.bam.bai
Validate the Bam File
gatk ValidateSamFile -R Homo_sapiens_assembly38.fasta -I SRR622458.bam -M SUMMARY -O summary-SRR622458
……………
[Fri May 03 21:01:34 UTC 2019] picard.sam.ValidateSamFile done. Elapsed time: 443.41 minutes.
…………….
Tool returned: 3
~/gatk-data-ref$ cat summary-SRR622458
## HISTOGRAM java.lang.String
Error Type Count
ERROR:INVALID_TAG_NM 207087
Fix the INVALID_TAG_NM error
Mark duplicates
~/gatk-data-ref$ gatk MarkDuplicates -I SRR622458.fxNmMdUqTag.bam -O SRR622458.fxNmMdUqTag.mdup.bam -M SRR622458.fxNmMdUqTag.dupMetrics.txt
………………………
[Sun May 05 04:59:44 UTC 2019] picard.sam.markduplicates.MarkDuplicates done. Elapsed time: 684.96 minutes.
…………….
Tool returned: 0
~/gatk-data-ref$ head SRR622458.fxNmMdUqTag.dupMetrics.txt
……………….
LIBRARY UNPAIRED_READS_EXAMINED READ_PAIRS_EXAMINED SECONDARY_OR_SUPPLEMENTARY_RDS UNMAPPED_READS UNPAIRED_READ_DUPLICATES READ_PAIR_DUPLICATES READ_PAIR_OPTICAL_DUPLICATES PERCENT_DUPLICATION ESTIMATED_LIBRARY_SIZE
P 26804671 1158633338 24401280 79626419 12149656 57133230 0 0.05393 11358780886
Additional directory contents
~/gatk-data-ref$ ls -l
-rw-rw-r– 1 b0d2647 b0d2647 256414514748 May 4 05:07 SRR622458.fxNmMdUqTag.bam
-rw-rw-r– 1 b0d2647 b0d2647 9791560 May 4 17:18 SRR622458.fxNmMdUqTag.bam.bai
-rw-rw-r– 1 b0d2647 b0d2647 4604 May 5 04:59 SRR622458.fxNmMdUqTag.dupMetrics.txt
-rw-rw-r– 1 b0d2647 b0d2647 259148164965 May 5 04:59 SRR622458.fxNmMdUqTag.mdup.bam
Base quality calibration (using gatk BaseReclaibrator and gatk Apply BQSR)
-It takes a long time to calibrate the bases in the entire BAM file.
- We will, hence, recalibrate the bases only in chromosome 20 and call variants in (genes or regions in) chromosome 20.
A2. Generate a validated BAM file for NA12892
Align the fastq sequences to the reference genome using BWA
Alignment (bwa mem) will lead to a SAM (sequence alignment file) file, that will be converted to a BAM file (samtools view).
Generate alignment statistics
~/gatk-data-ref$ sambamba flagstat -p SRR622459_1.bam
sambamba 0.6.9 by Artem Tarasov and Pjotr Prins (C) 2012-2019
2467570854 + 0 in total (QC-passed reads + QC-failed reads)
10585005 + 0 secondary
11607447 + 0 supplementary
0 + 0 duplicates
2364732708 + 0 mapped (95.83%:N/A)
2445378402 + 0 paired in sequencing
1222689201 + 0 read1
1222689201 + 0 read2
2254822518 + 0 properly paired (92.21%:N/A)
2313333564 + 0 with itself and mate mapped
29206692 + 0 singletons (1.19%:N/A)
27935066 + 0 with mate mapped to a different chr
16234878 + 0 with mate mapped to a different chr (mapQ>=5)
Additional directory contents
~/gatk-data-ref$ ls -l
-rw-rw-r– 1 ubuntu ubuntu 200710884147 May 2 11:47 SRR622459_1.bam
-rw-rw-r– 1 ubuntu ubuntu 192007490886 May 2 13:42 SRR622459_1.sorted.bam
-rw-rw-r– 1 ubuntu ubuntu 9775584 May 2 14:05 SRR622459_1.sorted.bam.bai
Sort and index the BAM file
~/gatk-data-ref$ samtools index -@ 96 SRR622459_1.sorted.bam
Additional directory contents
~/gatk-data-ref$ ls -l
-rw-rw-r– 1 ubuntu ubuntu 192007490886 May 2 13:42 SRR622459_1.sorted.bam
-rw-rw-r– 1 ubuntu ubuntu 9775584 May 2 14:05 SRR622459_1.sorted.bam.bai
Validate the BAM file (for GATK analysis)
~/gatk-data-ref$ gatk ValidateSamFile -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.bam -M SUMMARY -O summary-SRR622459_1.sorted
~/gatk-data-ref$ cat summary-SRR622459_1.sorted
## HISTOGRAM java.lang.String
Error Type Count
ERROR:INVALID_TAG_NM 245,444
Fix the error reported above
~/gatk-data-ref$ gatk SetNmMdAndUqTags -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.bam -O SRR622459_1.sorted.NmMdTqTgs.bam
validate the BAM file again and create an index
~/gatk-data-ref$ gatk ValidateSamFile -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.NmMdTqTgs.bam -M SUMMARY -O summary-SRR622459_1.sorted.NmMdTqTgs
[Sat May 04 19:07:58 UTC 2019] picard.sam.ValidateSamFile done. Elapsed time: 331.75 minutes.
…………..
Tool returned: 0
~/gatk-data-ref$ cat summary-SRR622459_1.sorted.NmMdTqTgs
No errors found
~/gatk-data-ref$ samtools index SRR622459_1.sorted.NmMdTqTgs.bam
Mark duplicates and index the BAM file created
~/gatk-data-ref$ nohup gatk MarkDuplicates -I SRR622459_1.sorted.NmMdTqTgs.bam -O SRR622459_1.sorted.NmMdTqTgs.mdup.bam -M SRR622459_1.sorted.NmMdTqTgs.dupMetrics.txt >& 59_1.fxNm.log &
~/gatk-data-ref$ tail 59_1.fxNm.log
…………….
[Sun May 05 05:03:29 UTC 2019] picard.sam.markduplicates.MarkDuplicates done. Elapsed time: 680.30 minutes.
Runtime.totalMemory()=3481796608
Tool returned: 0
…………..
~/gatk-data-ref$ head SRR622459_1.sorted.NmMdTqTgs.dupMetrics.txt
……………
LIBRARY UNPAIRED_READS_EXAMINED READ_PAIRS_EXAMINED SECONDARY_OR_SUPPLEMENTARY_RDS UNMAPPED_READS UNPAIRED_READ_DUPLICATES READ_PAIR_DUPLICATES READ_PAIR_OPTICAL_DUPLICATES PERCENT_DUPLICATION ESTIMATED_LIBRARY_SIZE
Q 29206692 1156666782 22192452 102838146 14050105 58665347 0 0.056085 11013720153
~/gatk-data-ref$ samtools index SRR622459_1.sorted.NmMdTqTgs.mdup.bam
Additional directory contents
~/gatk-data-ref$ ls -l
-rw-rw-r-- 1 b0d2647 b0d2647 691071 May 5 05:03 59_1.fxNm.log
-rw-rw-r-- 1 b0d2647 b0d2647 260704633123 May 4 10:23 SRR622459_1.sorted.NmMdTqTgs.bam
-rw-rw-r-- 1 b0d2647 b0d2647 9786952 May 4 18:05 SRR622459_1.sorted.NmMdTqTgs.bam.bai
-rw-rw-r-- 1 b0d2647 b0d2647 5565 May 5 05:03 SRR622459_1.sorted.NmMdTqTgs.dupMetrics.txt
-rw-rw-r-- 1 b0d2647 b0d2647 263473284570 May 5 05:03 SRR622459_1.sorted.NmMdTqTgs.mdup.bam
-rw-rw-r-- 1 b0d2647 b0d2647 9817616 May 5 09:59 SRR622459_1.sorted.NmMdTqTgs.mdup.bam.bai
-rw-rw-r-- 1 b0d2647 b0d2647 16 May 4 19:07 summary-SRR622459_1.sorted.NmMdTqTgs
Base quality calibration (using gatk BaseReclaibrator and gatk Apply BQSR)
-It takes a long time to calibrate the bases in the entire BAM file.
- We will, hence, recalibrate the bases only in chromosome 20 and call variants in (genes or regions in) chromosome 20.
A3. Generate a validated BAM file for NA12878
Align the fastq sequences to the reference genome using BWA
Alignment (bwa mem) will lead to a SAM (sequence alignment file) file, that will be duplicate marked using samblaster. The sam file will be converted to a BAM file (samtools view). The BAM file will be sorted, indexed and subjected to generate alignment statistics
Additional directory contents
~/gatk-data-ref$ ls -l
-rw-rw-r– 1 ubuntu ubuntu 12932312543 Apr 30 17:29 SRR622461.bam
-rw-rw-r– 1 ubuntu ubuntu 5679424 Apr 30 17:31 SRR622461.bam.bai
Validate the BAM file
~/gatk-data-ref$ gatk ValidateSamFile -R Homo_sapiens_assembly38.fasta -I SRR622461.bam -M SUMMARY -O summary-SRR622461
…………
Tool returned: 3
~/gatk-data-ref$ cat summary-SRR622461
## HISTOGRAM java.lang.String
Error Type Count
ERROR:INVALID_TAG_NM 16164
Fix the error noted above
~/gatk-data-ref$ gatk SetNmMdAndUqTags -R Homo_sapiens_assembly38.fasta -I SRR622461.bam -O SRR622461.fxNmMdUqTag.bam
validate the BAM file again and create an index
~/gatk-data-ref$ gatk ValidateSamFile -R Homo_sapiens_assembly38.fasta -I SRR622461.fxNmMdUqTag.bam -M SUMMARY -O summary-SRR622461.fxNmMdUqTag
…………..
Tool returned: 0
~/gatk-data-ref$ cat summary-SRR622461.fxNmMdUqTag
No errors found
~/gatk-data-ref$ samtools index SRR622461.fxNmMdUqTag.bam
Mark duplicates and index the BAM file created
~/gatk-data-ref$ nohup gatk MarkDuplicates -I SRR622461.fxNmMdUqTag.bam -O SRR622461.fxNmMdUqTag.mdup.bam -M SRR622461.fxNmMdUqTag.dupMetrics.txt
~/gatk-data-ref$ head SRR622459_1.sorted.NmMdTqTgs.dupMetrics.txt
……………
## METRICS CLASS picard.sam.DuplicationMetrics
LIBRARY UNPAIRED_READS_EXAMINED READ_PAIRS_EXAMINED SECONDARY_OR_SUPPLEMENTARY_RDS UNMAPPED_READS UNPAIRED_READ_DUPLICATES READ_PAIR_DUPLICATES READ_PAIR_OPTICAL_DUPLICATES PERCENT_DUPLICATION ESTIMATED_LIBRARY_SIZE
R 2249392 86803652 1515762 9062212 635818 7009234 0 0.083331 508154568
~/gatk-data-ref$ samtools index SRR622461.fxNmMdUqTag.mdup.bam
Additional directory contents
~/gatk-data-ref$ ls -l
-rw-rw-r-- 1 b0d2647 b0d2647 17553093573 May 6 04:00 SRR622461.fxNmMdUqTag.bam
-rw-rw-r-- 1 b0d2647 b0d2647 8846296 May 6 17:08 SRR622461.fxNmMdUqTag.bam.bai
-rw-rw-r-- 1 b0d2647 b0d2647 3531 May 6 14:42 SRR622461.fxNmMdUqTag.dupMetrics.txt
-rw-rw-r-- 1 b0d2647 b0d2647 17728293924 May 6 14:42 SRR622461.fxNmMdUqTag.mdup.bam
-rw-rw-r-- 1 b0d2647 b0d2647 8959264 May 6 17:08 SRR622461.fxNmMdUqTag.mdup.bam.bai
-rw-rw-r-- 1 b0d2647 b0d2647 16 May 6 04:38 summary-SRR622461.fxNmMdUqTag
B. Haplotype chrna4 gene of the 3 individuals in GVCF mode
B1. Haplotype chrna4 of NA12891
~/gatk-data-ref$ gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I SRR622458.fxNmMdUqTag.mdup.bam -L chr20:63343310-63375471 -ERC GVCF -O SRR622458.fxNmMdUqTag.mdup.chrna4.g.vcf
B2. Haplotype chrna4 of NA12892
~/gatk-data-ref$ gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.NmMdTqTgs.mdup.bam -L chr20:63343310-63375471 -ERC GVCF -O SRR622459_1.fxNmMdUqTag.mdup.chrna4.g.vcf
B3. Haplotype chrna4 of NA12878
~/gatk-data-ref$ gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I NA12878/SRR622461.fxNmMdUqTag.mdup.bam -L chr20:63343310-63375471 -ERC GVCF -O SRR622461.fxNmMdUqTag.mdup.chrna4.g.vcf
Additional directory contents
~/gatk-data-ref$ ls -l
-rw-rw-r-- 1 b0d2647 b0d2647 855121 May 8 01:01 SRR622458.fxNmMdUqTag.mdup.chrna4.g.vcf
-rw-rw-r-- 1 b0d2647 b0d2647 367624 May 8 01:01 SRR622458.fxNmMdUqTag.mdup.chrna4.g.vcf.idx
-rw-rw-r-- 1 b0d2647 b0d2647 896478 May 8 01:03 SRR622459_1.fxNmMdUqTag.mdup.chrna4.g.vcf
-rw-rw-r-- 1 b0d2647 b0d2647 367628 May 8 01:03 SRR622459_1.fxNmMdUqTag.mdup.chrna4.g.vcf.idx
-rw-rw-r-- 1 b0d2647 b0d2647 383500 May 8 01:05 SRR622461.fxNmMdUqTag.mdup.chrna4.g.vcf
-rw-rw-r-- 1 b0d2647 b0d2647 367624 May 8 01:05 SRR622461.fxNmMdUqTag.mdup.chrna4.g.vcf.idx
C. Combine the GenotypeVCF files and genotype the samples together (using gatk GenotypeGVCFs)
Combine GenotypeVCF files
~/gatk-data-ref$ nohup gatk CombineGVCFs -R Homo_sapiens_assembly38.fasta -V SRR622458.fxNmMdUqTag.mdup.chrna4.g.vcf -V SRR622459_1.fxNmMdUqTag.mdup.chrna4.g.vcf -V SRR622461.fxNmMdUqTag.mdup.chrna4.g.vcf -O SRR6224-58-59-61-fxTgs-mdup.chrna4.g.combine.vcf &> combine-58-59-61.fxTgs.mdup.chrna4.g.log &
Additional directory contents
~/gatk-data-ref$ ls -l
-rw-rw-r– 1 b0d2647 b0d2647 1923713 May 8 01:21 SRR6224-58-59-61-fxTgs-mdup.chrna4.g.combine.vcf
-rw-rw-r– 1 b0d2647 b0d2647 367632 May 8 01:21 SRR6224-58-59-61-fxTgs-mdup.chrna4.g.combine.vcf.idx
-rw-rw-r– 1 b0d2647 b0d2647 3654 May 8 01:21 combine-58-59-61.fxTgs.mdup.chrna4.g.log
Genotype the samples together
~/gatk-data-ref$ nohup gatk GenotypeGVCFs -R Homo_sapiens_assembly38.fasta -V SRR6224-58-59-61-fxTgs-mdup.chrna4.g.combine.vcf -O SRR6224-58-59-61-fxTgs-mdup.chrna4.g.combine.jointcalls.vcf &> genotypeGVCFs-58-59-61-chrna4.g.jointcalls.log &
Additional directory contents
~/gatk-data-ref$ ls -l
-rw-rw-r– 1 b0d2647 b0d2647 212392 May 8 01:28 SRR6224-58-59-61-fxTgs-mdup.chrna4.g.combine.jointcalls.vcf
-rw-rw-r– 1 b0d2647 b0d2647 118109 May 8 01:28 SRR6224-58-59-61-fxTgs-mdup.chrna4.g.combine.jointcalls.vcf.idx
-rw-rw-r– 1 b0d2647 b0d2647 3065 May 8 01:28 genotypeGVCFs-58-59-61-chrna4.g.jointcalls.log
Generate variant statistics
D. Run GenomicsDBImport on individual GenotypeVCFs together
~/gatk-data-ref$ gatk GenomicsDBImport -V SRR622458.fxNmMdUqTag.mdup.chrna4.g.vcf -V SRR622459_1.fxNmMdUqTag.mdup.chrna4.g.vcf -V SRR622461.fxNmMdUqTag.mdup.chrna4.g.vcf –genomicsdb-workspace-path genomicsDbImport_output -L chr20:63343310-63375471
Additional directory contents
~/gatk-data-ref$ ls -l genomicsDbImport_output/
-rwx—— 1 b0d2647 b0d2647 0 May 8 01:45 __tiledb_workspace.tdb
-rwx—— 1 b0d2647 b0d2647 282 May 8 01:45 callset.json
drwx—— 4 b0d2647 b0d2647 4096 May 8 01:45 ‘chr20$63343310$63375471’
-rwx—— 1 b0d2647 b0d2647 180561 May 8 01:45 vcfheader.vcf
-rwx—— 1 b0d2647 b0d2647 291310 May 8 01:45 vidmap.json
LS0tDQp0aXRsZTogIkdlbm90eXBlIGNob2xpbmVyZ2ljIG5pY290aW5pYyByZWNlcHRvciBhbHBoYSA0IChDSFJOQTQpIGZyb20gbXVsdGlwbGUgaW5kaXZpZHVhbHMiDQphdXRob3I6ICJCaGFnaXJhdGhpIERhc2giDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoNCiMjIEFwcHJvYWNoDQoNClRoZSBnZW5vdHlwZSBvZiBjaG9saW5lcmdpYyBuaWNvdGluYyByZWNlcHRvciBhbHBoYSA0IChjaHJuYTQpIGxvY2F0ZWQgb24gY2hyb21vc29tZSAyMCAoY2hyMjA6IDYzLDM0MywzMTAuLjYzLDM3NSw0NzEpIHdpbGwgYmUgZGV0ZXJtaW5lZC4NCg0KVGhpcyBwcm9jZXNzIGludm9sdmVzIDQgYnJvYWRlciBzdGVwcy4NCg0KQS4gUHJvY2VzcyB0aGUgc2VxdWVuY2luZyBmaWxlcyBhbmQgZ2VuZXJhdGUgYSBnYXRrIHZhbGlkYXRlZCAoZ2F0ayBWYWxpZGF0ZXNhbUZpbGUpIEJBTSBmaWxlDQoNCkIuIENhbGwgaGFwbG90eXBlcyB1c2luZyBHQVRLIEhhcGxvdHlwZUNhbGxlciBpbiBHVkNGIG1vZGUgKHRvIGdlbmVyYXRlIEdlbm90eXBlVkNGcykNCg0KQy4gQ29tYmluZSB0aGUgR2Vub3R5cGVWQ0ZzIGZpbGVzICAodXNpbmcgZ2F0ayBDb21iaW5lR1ZDRnMpIGFuZCBnZW5vdHlwZSB0aGUgc2FtcGxlcyB0b2dldGhlciAodXNpbmcgZ2F0ayBHZW5vdHlwZUdWQ0ZzKSBvcg0KDQpELiBSdW4gZ2F0ayBHZW5vbWljc0RCSW1wb3J0IG9uIGluZGl2aWR1YWwgR2Vub3R5cGVWQ0ZzIHRvZ2V0aGVyDQoNCg0KDQoNCiMjIE1hY2hpbmUNCg0KR29vZ2xlIENsb3VkIFBsYXRmb3JtIChHQ1ApLCA0IHZDUFVzLCAxNSBHQiBSQU0NCg0KR29vZ2xlIENsb3VkIFBsYXRmb3JtIChHQ1ApLCA4IHZDUFVzLCAzMCBHQiBSQU0NCg0KR29vZ2xlIENsb3VkIFBsYXRmb3JtIChHQ1ApLCAyNCB2Q1BVcywgMzIgR0IgUkFNDQoNCkFXUzogYzUuMTh4bGFyZ2UgKDcyIHZDUFVzLCAxNDQgR0IgUkFNKQ0KDQpBV1M6IG01LjI0eGxhcmdlICg5NiB2Q1BVcywgMzg0IEdpQiBSQU0pDQoNCg0KDQojIyBSZWZlcmVuY2UNCg0KLVRoZSBnZW5vbWUgb3IgYSBjaHJvbW9zb21hbCByZWdpb24gb3IgYSBnZW5lIG9mIGludGVyZXN0IG9mIHRocmVlIGluZGl2aWR1YWxzIChOQTEyODkxLCBOQTEyODkyIGFuZCBOQTEyODc4KSB3aWxsIGJlIGFuYWx5emVkLg0KDQotVGhlIGdlbm9tZSBzZXF1ZW5jaW5nIGRhdGEgd2lsbCBiZSBvYnRhaW5lZCBmcm9tIHRoZSAxMDAwIGdlbm9tZSBwcm9qZWN0IChodHRwOi8vd3d3LmludGVybmF0aW9uYWxnZW5vbWUub3JnLzEwMDAtZ2Vub21lcy1icm93c2Vycy8pDQoNCg0KDQojIyBBbmFseXNpcyBkYXRhc2V0cw0KDQoNCiMjIyBEb3dubG9hZCBnZW5vbWUgc2VxdWVuY2luZyBkYXRhIGZvciBpbmRpdmlkdWFsIE5BMTI4OTEgZnJvbSB0aGUgMTAwMCBnZW5vbWUgcHJvamVjdCBzaXRlDQoNCg0KDQojIyMjICAgIH4vZ2F0ay1kYXRhLXJlZiQgd2dldCAtYnFjIGZ0cDovL2Z0cC5zcmEuZWJpLmFjLnVrL3ZvbDEvZmFzdHEvU1JSNjIyL1NSUjYyMjQ1OC9TUlI2MjI0NThfMS5mYXN0cS5neg0KDQojIyMjICAgIH4vZ2F0ay1kYXRhLXJlZiQgd2dldCAtYnFjIGZ0cDovL2Z0cC5zcmEuZWJpLmFjLnVrL3ZvbDEvZmFzdHEvU1JSNjIyL1NSUjYyMjQ1OC9TUlI2MjI0NThfMi5mYXN0cS5neg0KDQoNCg0KDQojIyMgRG93bmxvYWQgZ2Vub21lIHNlcXVlbmNpbmcgZGF0YSBmb3IgaW5kaXZpZHVhbCBOQTEyODkyIGZyb20gdGhlIDEwMDAgZ2Vub21lIHByb2plY3Qgc2l0ZQ0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCB3Z2V0IC1icWMgZnRwOi8vZnRwLnNyYS5lYmkuYWMudWsvdm9sMS9mYXN0cS9TUlI2MjIvU1JSNjIyNDU5L1NSUjYyMjQ1OV8xLmZhc3RxLmd6DQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCB3Z2V0IC1icWMgZnRwOi8vZnRwLnNyYS5lYmkuYWMudWsvdm9sMS9mYXN0cS9TUlI2MjIvU1JSNjIyNDU5L1NSUjYyMjQ1OV8yLmZhc3RxLmd6DQoNCg0KDQoNCiMjIyBEb3dubG9hZCBnZW5vbWUgc2VxdWVuY2luZyBkYXRhIGZvciBpbmRpdmlkdWFsIE5BMTI4NzggZnJvbSB0aGUgMTAwMCBnZW5vbWUgcHJvamVjdCBzaXRlDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIHdnZXQgLWJxYyBmdHA6Ly9mdHAuc3JhLmViaS5hYy51ay92b2wxL2Zhc3RxL1NSUjYyMi9TUlI2MjI0NjEvU1JSNjIyNDYxXzEuZmFzdHEuZ3oNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgd2dldCAtYnFjIGZ0cDovL2Z0cC5zcmEuZWJpLmFjLnVrL3ZvbDEvZmFzdHEvU1JSNjIyL1NSUjYyMjQ2MS9TUlI2MjI0NjFfMi5mYXN0cS5neg0KDQoNCg0KDQoNCg0KIyMgRGlyZWN0b3J5IGNvbnRlbnQNCg0KIyMjIyAgICAgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQpgYGANCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgNjY3NzEzNjAyODUgQXByIDMwIDE1OjM4IFNSUjYyMjQ1OF8xLmZhc3RxLmd6DQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSA2ODMwMDIwNTY0NyBBcHIgMzAgMTU6NDUgU1JSNjIyNDU4XzIuZmFzdHEuZ3oNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgNjgwMjkzMzU1NDYgQXByIDMwIDE1OjUwIFNSUjYyMjQ1OV8xLmZhc3RxLmd6DQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSA2OTIxOTQ0Mzc4OSBBcHIgMzAgMTU6NTQgU1JSNjIyNDU5XzIuZmFzdHEuZ3oNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgIDQ1OTgyNDkyMTkgQXByIDMwIDE1OjQ1IFNSUjYyMjQ2MV8xLmZhc3RxLmd6DQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgNDc5MjM4MzYzMSBBcHIgMzAgMTU6NDcgU1JSNjIyNDYxXzIuZmFzdHEuZ3oNCg0KYGBgDQoNCg0KDQojIyBDaGVjayBhbmFseXNpcyBkYXRhc2V0cw0KDQoNCiMjIyBGb3IgTkExMjg5MQ0KDQoNCiMjIyMgICAgfi9nYXRrLWRhdGEtcmVmJCB6Y2F0IFNSUjYyMjQ1OF8xLmZhc3RxLmd6IHwgaGVhZCAtbiAyDQogICAgDQpAU1JSNjIyNDU4LjEgMS8xDQoNClRHR0dBVFRHR0dHVEFHR0dDVEFHR0dDVENHR0dUVEdHR0dBVEFHR0dUR0FHR0dUVFRHR0dBVEFHR0dHVEFHR0dUVEFHR0dUR1RUR0dDVEFHR0dUVEFHR0dDR0FHR0dDQ0FHR0dDDQoNCg0KIyMjIyAgICB+L2dhdGstZGF0YS1yZWYkIHpjYXQgU1JSNjIyNDU4XzIuZmFzdHEuZ3ogfCBoZWFkIC1uIDINCg0KQFNSUjYyMjQ1OC4xIDEvMg0KDQpBVEFBQ0NDVEFBQ0NDVEFBQ0NDVEFBQ0dDVEFBQ0NDVEFBQ0NDVEFBQ0NDVEFBQ0NDVEFBQ0FBVEFBQ0NDVEFBQ0NDVEFBQ0FDVEFBQ0NUVEFDQ0NDVEFBQ0NDVEFBQ0NDVENBQw0KDQoNCg0KDQoNCg0KIyMjIEZvciBOQTEyODkyDQoNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgemNhdCBTUlI2MjI0NTlfMS5mYXN0cS5neiB8IGhlYWQgLW4gMg0KDQpAU1JSNjIyNDU5LjEgMS8xDQoNCkdUVEFHR0dUVEFHR0dUVEFHR0dUVEFHR0dUVEFHR0dUVEFHR0dUVEFHR0dUVEFHR0dUVEFHR0dUVEFHR0dUVEFHR0dUVEFHR0dUVEFHR0dUVEFHR0dUVEFHR0dBR0FUQ0dHQUFHDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIHpjYXQgU1JSNjIyNDU5XzIuZmFzdHEuZ3ogfCBoZWFkIC1uIDINCg0KQFNSUjYyMjQ1OS4xIDEvMg0KDQpDQ0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQUdBVENHR0FBRw0KDQoNCg0KDQojIyMgRm9yIE5BMTI4NzgNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgemNhdCBTUlI2MjI0NjFfMS5mYXN0cS5neiB8IGhlYWQgLW4gMg0KDQpAU1JSNjIyNDYxLjEgMS8xDQoNCkdDVEFHR0dHVEFHR0dUVEFHR0dDVENHR0FUVEFHR0dHVEdHR0FUVEFHR0dUVEFHQUdHQUFHVEdBVEFHQ0NUVENBR0dHVEFHR0dBVENHR0dDQUFHR0FBVEFHR0FUVEdUR0dHVEdHDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCB6Y2F0IFNSUjYyMjQ2MV8yLmZhc3RxLmd6IHwgaGVhZCAtbiAyDQoNCkBTUlI2MjI0NjEuMSAxLzINCg0KQVRBQUNDVEFBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNUQ1RBVENBQ1RHQUFDQVRBQUdDQ1RUQUNDQVRBQ0dUVENBQUFDQVRBQ0ENCg0KDQoNCg0KDQoNCg0KIyMgRG93bmxvYWQgdGhlIHJlZmVyZW5jZSAoZmFzdGEsIGZhc3RhIGluZGV4LCBkaWN0aW9uYXJ5KSBhbmQgQldBIGluZGV4ICguYWx0LCAuYW1iLCAuYW5uLCAuYnd0LCAucGFjIGFuZCAuc2EpIGZpbGVzDQoNCg0KYGBgDQogICAgICAgIH4vZ2F0ay1kYXRhLXJlZiQgYXdzIHMzIGNwIHMzOi8vYnJvYWQtcmVmZXJlbmNlcy9oZzM4L3YwL0hvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC4NCg0KICAgICAgICB+L2dhdGstZGF0YS1yZWYkIGF3cyBzMyBjcCBzMzovL2Jyb2FkLXJlZmVyZW5jZXMvaGczOC92MC9Ib21vX3NhcGllbnNfYXNzZW1ibHkzOC5kaWN0IC4NCg0KICAgICAgICB+L2dhdGstZGF0YS1yZWYkIGF3cyBzMyBjcCBzMzovL2Jyb2FkLXJlZmVyZW5jZXMvaGczOC92MC9Ib21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YS5mYWkgLg0KDQoNCiB+L2dhdGstZGF0YS1yZWYkIGF3cyBzMyBjcCBzMzovL2Jyb2FkLXJlZmVyZW5jZXMvaGczOC92MC9Ib21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YS42NC5hbHQgLg0KDQogDQogfi9nYXRrLWRhdGEtcmVmJCBhd3MgczMgY3AgczM6Ly9icm9hZC1yZWZlcmVuY2VzL2hnMzgvdjAvSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEuNjQuYW1iIC4NCg0KIA0KIH4vZ2F0ay1kYXRhLXJlZiQgYXdzIHMzIGNwIHMzOi8vYnJvYWQtcmVmZXJlbmNlcy9oZzM4L3YwL0hvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLjY0LmFubiAuDQoNCiANCiB+L2dhdGstZGF0YS1yZWYkIGF3cyBzMyBjcCBzMzovL2Jyb2FkLXJlZmVyZW5jZXMvaGczOC92MC9Ib21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YS42NC5id3QgLg0KDQogDQogfi9nYXRrLWRhdGEtcmVmJCBhd3MgczMgY3AgczM6Ly9icm9hZC1yZWZlcmVuY2VzL2hnMzgvdjAvSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEuNjQucGFjIC4NCg0KIA0KIH4vZ2F0ay1kYXRhLXJlZiQgYXdzIHMzIGNwIHMzOi8vYnJvYWQtcmVmZXJlbmNlcy9oZzM4L3YwL0hvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLjY0LnNhIC4NCg0KYGBgDQoNCg0KDQojIyBBZGRpdGlvbmFsIGRpcmVjdG9yeSBjb250ZW50cw0KDQojIyMjICAgICB+L2dhdGstZGF0YS1yZWYkIGxzIC1sDQoNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICA1ODE3MTIgSmFuICA2ICAyMDE2IEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmRpY3QNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgIDMyNDk5MTI3NzggSmFuICA1ICAyMDE2IEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAgNDg3NTUzIE5vdiAgNiAyMzo0NyBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YS42NC5hbHQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgMjAxOTkgTm92ICA2IDIzOjQ3IEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLjY0LmFtYg0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAgIDQ1NTQ3NCBOb3YgIDYgMjM6NDcgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEuNjQuYW5uDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAzMjE3MzQ3MDA0IE5vdiAgNiAyMzo0NyBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YS42NC5id3QNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICA4MDQzMzY3MzEgTm92ICA2IDIzOjQ4IEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLjY0LnBhYw0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgMTYwODY3MzUxMiBOb3YgIDYgMjM6NDggSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEuNjQuc2ENCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAxNjA5MjggRGVjICAxICAyMDE2IEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLmZhaQ0KDQoNCg0KDQojIyBBLiBQcm9kdWNlIHZhbGlkYXRlZCBCQU0gZmlsZXMgZm9yIHRoZSAzIGluZGl2aWR1YWxzDQoNCg0KYGBgDQpBMS4gR2VuZXJhdGUgYSB2YWxpZGF0ZWQgQkFNIGZpbGUgZm9yIE5BMTI4OTENCg0KYGBgDQoNCg0KDQojIyBBbGlnbiB0aGUgc2VxdWVuY2VzIHRvIHRoZSByZWZlcmVuY2Ugc2VxdWVuY2UgdXNpbmcgQldBIA0KDQpBbGlnbm1lbnQgKGJ3YSBtZW0pIHdpbGwgbGVhZCB0byBhIFNBTSAoc2VxdWVuY2UgYWxpZ25tZW50IGZpbGUpIGZpbGUsIHRoYXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBCQU0gZmlsZSAoc2FtdG9vbHMgdmlldykuIEl0IHdpbGwgYmUgc29ydGVkIChpLmUuLCBzYW10b29scyBzb3J0KSBieSBjby1vcmRpbmF0ZSBhbmQgaW5kZXhlZCAoc2FtdG9vbHMgaW5kZXgpLiBTYW10b29scyBmbGFnc3RhdCB3aWxsIHByb2R1Y2UgYWxpZ25tZW50IHN0YXRpc3RpY3MuDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBid2EgbWVtIC1NIC10IDk2IC1SICdAUkdcdElEOlNSUjYyMjQ1OFx0TEI6UFx0UEw6aWxsdW1pbmFcdFBVOkZDQzFIN1dBQ1hYXHRTTTpOQTEyODkxJyBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSBTUlI2MjI0NThfMS5mYXN0cS5neiBTUlI2MjI0NThfMi5mYXN0cS5neiB8IHNhbXRvb2xzIHZpZXcgLVNiaCB8IHNhbXRvb2xzIHNvcnQgLW8gU1JSNjIyNDU4LmJhbSAtICYmIHNhbXRvb2xzIGluZGV4IFNSUjYyMjQ1OC5iYW0gJiYgc2FtdG9vbHMgZmxhZ3N0YXQgU1JSNjIyNDU4LmJhbQ0KDQouLi4uLi4uLi4uLi4uLi4uDQoNClttYWluXSBWZXJzaW9uOiAwLjcuMTctcjExODgNCg0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KW21haW5dIFJlYWwgdGltZTogMjcwOTguMDU5IHNlYzsgQ1BVOiAxMzM3MDgzLjY2NyBzZWMNCg0KW2JhbV9zb3J0X2NvcmVdIG1lcmdpbmcgZnJvbSA5NDcgZmlsZXMgYW5kIDEgaW4tbWVtb3J5IGJsb2Nrcy4uLg0KDQoNCmBgYA0KMjQ0ODA5OTA0NiArIDAgaW4gdG90YWwgKFFDLXBhc3NlZCByZWFkcyArIFFDLWZhaWxlZCByZWFkcykNCjExNTIwOTgzICsgMCBzZWNvbmRhcnkNCjEyODgwMjk3ICsgMCBzdXBwbGVtZW50YXJ5DQowICsgMCBkdXBsaWNhdGVzDQoyMzY4NDcyNjI3ICsgMCBtYXBwZWQgKDk2Ljc1JSA6IE4vQSkNCjI0MjM2OTc3NjYgKyAwIHBhaXJlZCBpbiBzZXF1ZW5jaW5nDQoxMjExODQ4ODgzICsgMCByZWFkMQ0KMTIxMTg0ODg4MyArIDAgcmVhZDINCjIyNTg4ODUzMzggKyAwIHByb3Blcmx5IHBhaXJlZCAoOTMuMjAlIDogTi9BKQ0KMjMxNzI2NjY3NiArIDAgd2l0aCBpdHNlbGYgYW5kIG1hdGUgbWFwcGVkDQoyNjgwNDY3MSArIDAgc2luZ2xldG9ucyAoMS4xMSUgOiBOL0EpDQozMTAyMjQ1NCArIDAgd2l0aCBtYXRlIG1hcHBlZCB0byBhIGRpZmZlcmVudCBjaHINCjE3NDU2NDM1ICsgMCB3aXRoIG1hdGUgbWFwcGVkIHRvIGEgZGlmZmVyZW50IGNociAobWFwUT49NSkNCg0KYGBgDQoNCg0KDQojIyBBZGRpdGlvbmFsIGRpcmVjdG9yeSBjb250ZW50cw0KDQojIyMjICAgICB+L2dhdGstZGF0YS1yZWYkIGxzIC1sDQoNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAxODkwMDU3NzcwMTEgTWF5ICAxIDE3OjQ2IFNSUjYyMjQ1OC5iYW0NCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgIDk3Nzc2NzIgTWF5ICAxIDE5OjEyIFNSUjYyMjQ1OC5iYW0uYmFpDQoNCg0KDQojIyBWYWxpZGF0ZSB0aGUgQmFtIEZpbGUgDQoNCiMjIyMgICAgICBnYXRrIFZhbGlkYXRlU2FtRmlsZSAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBTUlI2MjI0NTguYmFtIC1NIFNVTU1BUlkgLU8gc3VtbWFyeS1TUlI2MjI0NTgNCg0KDQouLi4uLi4uLi4uLi4uLi4NCg0KW0ZyaSBNYXkgMDMgMjE6MDE6MzQgVVRDIDIwMTldIHBpY2FyZC5zYW0uVmFsaWRhdGVTYW1GaWxlIGRvbmUuIEVsYXBzZWQgdGltZTogNDQzLjQxIG1pbnV0ZXMuDQoNCi4uLi4uLi4uLi4uLi4uLi4NCg0KVG9vbCByZXR1cm5lZDogMw0KDQojIyMjICAgICB+L2dhdGstZGF0YS1yZWYkIGNhdCBzdW1tYXJ5LVNSUjYyMjQ1OA0KDQpgYGANCiMjIEhJU1RPR1JBTSAgICBqYXZhLmxhbmcuU3RyaW5nDQoNCkVycm9yIFR5cGUgICAgICAgICAgICAgIENvdW50DQoNCkVSUk9SOklOVkFMSURfVEFHX05NICAgIDIwNzA4Nw0KDQpgYGANCg0KDQoNCiMjIEZpeCB0aGUgSU5WQUxJRF9UQUdfTk0gZXJyb3INCg0KDQoNCiMjIyMgICAgIH4vZ2F0ay1kYXRhLXJlZiQgZ2F0ayBTZXRObU1kQW5kVXFUYWdzIC1SIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC1JIFNSUjYyMjQ1OC5iYW0gLU8gU1JSNjIyNDU4LmZ4Tm1NZFVxVGFnLmJhbQ0KDQpVc2luZyBHQVRLIGphciAvaG9tZS9iMGQyNjQ3L21pbmljb25kYTMvc2hhcmUvZ2F0azQtNC4xLjIuMC0wL2dhdGstcGFja2FnZS00LjEuMi4wLWxvY2FsLmphcg0KDQoNCg0KIyMgVmFsaWRhdGUgdGhlICdTZXRObU1kQW5kVXFUYWdzJyBvciBwcmVzdW1lZCBmaXhlZCBCQU0gZmlsZSBhZ2Fpbg0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIFZhbGlkYXRlU2FtRmlsZSAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBTUlI2MjI0NTguZnhObU1kVXFUYWcuYmFtIC1NIFNVTU1BUlkgLU8gc3VtbWFyeS1TUlI2MjI0NTguZnhObU1kVXFUYWcNCg0KDQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg0KDQpbU2F0IE1heSAwNCAxMTowOTo1OSBVVEMgMjAxOV0gcGljYXJkLnNhbS5WYWxpZGF0ZVNhbUZpbGUgZG9uZS4gRWxhcHNlZCB0aW1lOiAzNDUuMTYgbWludXRlcy4NCg0KLi4uLi4uLi4uLi4uLg0KDQoNClRvb2wgcmV0dXJuZWQ6IDANCg0KDQoNCiMjIyMgICAgIH4vZ2F0ay1kYXRhLXJlZiQgY2F0IHN1bW1hcnktU1JSNjIyNDU4LmZ4Tm1NZFVxVGFnIA0KDQpObyBlcnJvcnMgZm91bmQNCg0KDQoNCg0KIyMgTWFyayBkdXBsaWNhdGVzDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIE1hcmtEdXBsaWNhdGVzIC1JIFNSUjYyMjQ1OC5meE5tTWRVcVRhZy5iYW0gLU8gU1JSNjIyNDU4LmZ4Tm1NZFVxVGFnLm1kdXAuYmFtIC1NIFNSUjYyMjQ1OC5meE5tTWRVcVRhZy5kdXBNZXRyaWNzLnR4dA0KDQoNCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg0KDQoNCltTdW4gTWF5IDA1IDA0OjU5OjQ0IFVUQyAyMDE5XSBwaWNhcmQuc2FtLm1hcmtkdXBsaWNhdGVzLk1hcmtEdXBsaWNhdGVzIGRvbmUuIEVsYXBzZWQgdGltZTogNjg0Ljk2IG1pbnV0ZXMuDQoNCi4uLi4uLi4uLi4uLi4uLi4NCg0KVG9vbCByZXR1cm5lZDogMA0KDQoNCiMjIyMgICAgIH4vZ2F0ay1kYXRhLXJlZiQgaGVhZCBTUlI2MjI0NTguZnhObU1kVXFUYWcuZHVwTWV0cmljcy50eHQgDQoNCi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KDQpgYGANCkxJQlJBUlkgVU5QQUlSRURfUkVBRFNfRVhBTUlORUQgUkVBRF9QQUlSU19FWEFNSU5FRCAgICAgU0VDT05EQVJZX09SX1NVUFBMRU1FTlRBUllfUkRTICBVTk1BUFBFRF9SRUFEUyAgVU5QQUlSRURfUkVBRF9EVVBMSUNBVEVTICAgICAgICBSRUFEX1BBSVJfRFVQTElDQVRFUyAgICBSRUFEX1BBSVJfT1BUSUNBTF9EVVBMSUNBVEVTICAgIFBFUkNFTlRfRFVQTElDQVRJT04gIEVTVElNQVRFRF9MSUJSQVJZX1NJWkUNCg0KUCAgICAgICAyNjgwNDY3MSAgICAgICAgMTE1ODYzMzMzOCAgICAgIDI0NDAxMjgwICAgICAgICA3OTYyNjQxOSAgICAgICAgMTIxNDk2NTYgICAgICAgIDU3MTMzMjMwICAgICAgICAwICAgICAgIDAuMDUzOTMgMTEzNTg3ODA4ODYNCg0KYGBgDQoNCg0KIyMgQWRkaXRpb25hbCBkaXJlY3RvcnkgY29udGVudHMNCg0KIyMjIyAgICAgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3IDI1NjQxNDUxNDc0OCBNYXkgIDQgMDU6MDcgU1JSNjIyNDU4LmZ4Tm1NZFVxVGFnLmJhbQ0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgOTc5MTU2MCBNYXkgIDQgMTc6MTggU1JSNjIyNDU4LmZ4Tm1NZFVxVGFnLmJhbS5iYWkNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAgIDQ2MDQgTWF5ICA1IDA0OjU5IFNSUjYyMjQ1OC5meE5tTWRVcVRhZy5kdXBNZXRyaWNzLnR4dA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3IDI1OTE0ODE2NDk2NSBNYXkgIDUgMDQ6NTkgU1JSNjIyNDU4LmZ4Tm1NZFVxVGFnLm1kdXAuYmFtDQoNCg0KIyMgQmFzZSBxdWFsaXR5IGNhbGlicmF0aW9uICh1c2luZyBnYXRrIEJhc2VSZWNsYWlicmF0b3IgYW5kIGdhdGsgQXBwbHkgQlFTUikNCg0KLUl0IHRha2VzIGEgbG9uZyB0aW1lIHRvIGNhbGlicmF0ZSB0aGUgYmFzZXMgaW4gdGhlIGVudGlyZSBCQU0gZmlsZS4NCg0KLSBXZSB3aWxsLCBoZW5jZSwgcmVjYWxpYnJhdGUgdGhlIGJhc2VzIG9ubHkgaW4gY2hyb21vc29tZSAyMCBhbmQgY2FsbCB2YXJpYW50cyBpbiAoZ2VuZXMgb3IgcmVnaW9ucyBpbikgY2hyb21vc29tZSAyMC4gDQoNCg0KDQoNCg0KYGBgDQpBMi4gR2VuZXJhdGUgYSB2YWxpZGF0ZWQgQkFNIGZpbGUgZm9yIE5BMTI4OTINCg0KYGBgDQoNCg0KIyMgQWxpZ24gdGhlIGZhc3RxIHNlcXVlbmNlcyB0byB0aGUgcmVmZXJlbmNlIGdlbm9tZSB1c2luZyBCV0EgDQoNCkFsaWdubWVudCAoYndhIG1lbSkgd2lsbCBsZWFkIHRvIGEgU0FNIChzZXF1ZW5jZSBhbGlnbm1lbnQgZmlsZSkgZmlsZSwgdGhhdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIEJBTSBmaWxlIChzYW10b29scyB2aWV3KS4NCg0KDQoNCiMjIyMgIH4vZ2F0ay1kYXRhLXJlZiQgYndhIG1lbSAtTSAtdCA5NiAtUiAnQFJHXHRJRDpTUlI2MjI0NTlcdExCOlFcdFBMOmlsbHVtaW5hXHRQVTpGQ0MxSDdXQUNYWFx0U006TkExMjg5MicgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgU1JSNjIyNDU5XzEuZmFzdHEuZ3ogU1JSNjIyNDU5XzIuZmFzdHEuZ3ogfCBzYW10b29scyB2aWV3IC1TYmggLW8gU1JSNjIyNDU5XzEuYmFtDQoNCg0KW21haW5dIFZlcnNpb246IDAuNy4xNy1yMTE4OA0KDQouLi4uLi4uLi4uLi4uLi4uLi4uLg0KDQpbbWFpbl0gUmVhbCB0aW1lOiAyMjY4MC40OTcgc2VjOyBDUFU6IDEzOTM2MjIuNDQyIHNlYw0KDQoNCg0KIyMgR2VuZXJhdGUgYWxpZ25tZW50IHN0YXRpc3RpY3MNCg0KIyMjIyAgfi9nYXRrLWRhdGEtcmVmJCBzYW1iYW1iYSBmbGFnc3RhdCAtcCBTUlI2MjI0NTlfMS5iYW0gDQoNCg0Kc2FtYmFtYmEgMC42LjkgYnkgQXJ0ZW0gVGFyYXNvdiBhbmQgUGpvdHIgUHJpbnMgKEMpIDIwMTItMjAxOQ0KDQoNCmBgYA0KMjQ2NzU3MDg1NCArIDAgaW4gdG90YWwgKFFDLXBhc3NlZCByZWFkcyArIFFDLWZhaWxlZCByZWFkcykNCg0KMTA1ODUwMDUgKyAwIHNlY29uZGFyeQ0KDQoxMTYwNzQ0NyArIDAgc3VwcGxlbWVudGFyeQ0KDQowICsgMCBkdXBsaWNhdGVzDQoNCjIzNjQ3MzI3MDggKyAwIG1hcHBlZCAoOTUuODMlOk4vQSkNCg0KMjQ0NTM3ODQwMiArIDAgcGFpcmVkIGluIHNlcXVlbmNpbmcNCg0KMTIyMjY4OTIwMSArIDAgcmVhZDENCg0KMTIyMjY4OTIwMSArIDAgcmVhZDINCg0KMjI1NDgyMjUxOCArIDAgcHJvcGVybHkgcGFpcmVkICg5Mi4yMSU6Ti9BKQ0KDQoyMzEzMzMzNTY0ICsgMCB3aXRoIGl0c2VsZiBhbmQgbWF0ZSBtYXBwZWQNCg0KMjkyMDY2OTIgKyAwIHNpbmdsZXRvbnMgKDEuMTklOk4vQSkNCg0KMjc5MzUwNjYgKyAwIHdpdGggbWF0ZSBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgY2hyDQoNCjE2MjM0ODc4ICsgMCB3aXRoIG1hdGUgbWFwcGVkIHRvIGEgZGlmZmVyZW50IGNociAobWFwUT49NSkNCg0KYGBgDQoNCiMjIEFkZGl0aW9uYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDIwMDcxMDg4NDE0NyBNYXkgIDIgMTE6NDcgU1JSNjIyNDU5XzEuYmFtDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDE5MjAwNzQ5MDg4NiBNYXkgIDIgMTM6NDIgU1JSNjIyNDU5XzEuc29ydGVkLmJhbQ0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAgIDk3NzU1ODQgTWF5ICAyIDE0OjA1IFNSUjYyMjQ1OV8xLnNvcnRlZC5iYW0uYmFpDQoNCg0KDQoNCiMjIFNvcnQgYW5kIGluZGV4IHRoZSBCQU0gZmlsZQ0KDQoNCg0KIyMjIyAgfi9nYXRrLWRhdGEtcmVmJCBzYW10b29scyBzb3J0IC1AIDk2IC1tIDNHIFNSUjYyMjQ1OV8xLmJhbSAtbyBTUlI2MjI0NTlfMS5zb3J0ZWQuYmFtIA0KDQpbYmFtX3NvcnRfY29yZV0gbWVyZ2luZyBmcm9tIDE5MiBmaWxlcyBhbmQgOTYgaW4tbWVtb3J5IGJsb2Nrcy4uLg0KDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIHNhbXRvb2xzIGluZGV4IC1AIDk2IFNSUjYyMjQ1OV8xLnNvcnRlZC5iYW0NCg0KDQoNCiMjIEFkZGl0aW9uYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDE5MjAwNzQ5MDg4NiBNYXkgIDIgMTM6NDIgU1JSNjIyNDU5XzEuc29ydGVkLmJhbQ0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAgIDk3NzU1ODQgTWF5ICAyIDE0OjA1IFNSUjYyMjQ1OV8xLnNvcnRlZC5iYW0uYmFpDQoNCg0KDQoNCiMjIFZhbGlkYXRlIHRoZSBCQU0gZmlsZSAoZm9yIEdBVEsgYW5hbHlzaXMpDQoNCg0KIyMjIyAgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIFZhbGlkYXRlU2FtRmlsZSAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBTUlI2MjI0NTlfMS5zb3J0ZWQuYmFtIC1NIFNVTU1BUlkgLU8gc3VtbWFyeS1TUlI2MjI0NTlfMS5zb3J0ZWQNCg0KDQojIyMgIH4vZ2F0ay1kYXRhLXJlZiQgY2F0IHN1bW1hcnktU1JSNjIyNDU5XzEuc29ydGVkDQoNCmBgYA0KIyMgSElTVE9HUkFNCWphdmEubGFuZy5TdHJpbmcNCg0KRXJyb3IgVHlwZQkgICAgICAgICAgICAgICAgICAgICAgICBDb3VudA0KDQpFUlJPUjpJTlZBTElEX1RBR19OTQkgICAgICAgIDI0NSw0NDQNCg0KYGBgDQoNCg0KDQojIyBGaXggdGhlIGVycm9yIHJlcG9ydGVkIGFib3ZlDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIFNldE5tTWRBbmRVcVRhZ3MgLVIgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgLUkgU1JSNjIyNDU5XzEuc29ydGVkLmJhbSAtTyBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLmJhbQ0KDQoNCg0KIyMgdmFsaWRhdGUgdGhlIEJBTSBmaWxlIGFnYWluIGFuZCBjcmVhdGUgYW4gaW5kZXgNCg0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIFZhbGlkYXRlU2FtRmlsZSAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLmJhbSAtTSBTVU1NQVJZIC1PIHN1bW1hcnktU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncw0KDQoNCltTYXQgTWF5IDA0IDE5OjA3OjU4IFVUQyAyMDE5XSBwaWNhcmQuc2FtLlZhbGlkYXRlU2FtRmlsZSBkb25lLiBFbGFwc2VkIHRpbWU6IDMzMS43NSBtaW51dGVzLg0KDQouLi4uLi4uLi4uLi4uLg0KDQpUb29sIHJldHVybmVkOiAwDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGNhdCBzdW1tYXJ5LVNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MgDQoNCk5vIGVycm9ycyBmb3VuZA0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBzYW10b29scyBpbmRleCBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLmJhbQ0KDQoNCg0KDQojIyBNYXJrIGR1cGxpY2F0ZXMgYW5kIGluZGV4IHRoZSBCQU0gZmlsZSBjcmVhdGVkDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIG5vaHVwIGdhdGsgTWFya0R1cGxpY2F0ZXMgLUkgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5iYW0gLU8gU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLmJhbSAtTSBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLmR1cE1ldHJpY3MudHh0ID4mIDU5XzEuZnhObS5sb2cgJg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgdGFpbCA1OV8xLmZ4Tm0ubG9nIA0KDQouLi4uLi4uLi4uLi4uLi4uDQoNCltTdW4gTWF5IDA1IDA1OjAzOjI5IFVUQyAyMDE5XSBwaWNhcmQuc2FtLm1hcmtkdXBsaWNhdGVzLk1hcmtEdXBsaWNhdGVzIGRvbmUuIEVsYXBzZWQgdGltZTogNjgwLjMwIG1pbnV0ZXMuDQoNClJ1bnRpbWUudG90YWxNZW1vcnkoKT0zNDgxNzk2NjA4DQoNClRvb2wgcmV0dXJuZWQ6IDANCg0KLi4uLi4uLi4uLi4uLi4NCg0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBoZWFkIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MuZHVwTWV0cmljcy50eHQgDQoNCi4uLi4uLi4uLi4uLi4uLg0KDQpgYGANCg0KTElCUkFSWSBVTlBBSVJFRF9SRUFEU19FWEFNSU5FRCBSRUFEX1BBSVJTX0VYQU1JTkVEICAgICBTRUNPTkRBUllfT1JfU1VQUExFTUVOVEFSWV9SRFMgIFVOTUFQUEVEX1JFQURTICBVTlBBSVJFRF9SRUFEX0RVUExJQ0FURVMgICAgICAgIFJFQURfUEFJUl9EVVBMSUNBVEVTICAgIFJFQURfUEFJUl9PUFRJQ0FMX0RVUExJQ0FURVMgICAgUEVSQ0VOVF9EVVBMSUNBVElPTiAgRVNUSU1BVEVEX0xJQlJBUllfU0laRQ0KDQpRICAgICAgIDI5MjA2NjkyICAgICAgICAxMTU2NjY2NzgyICAgICAgMjIxOTI0NTIgICAgICAgIDEwMjgzODE0NiAgICAgICAxNDA1MDEwNSAgICAgICAgNTg2NjUzNDcgICAgICAgIDAgICAgICAgMC4wNTYwODUgICAgICAgIDExMDEzNzIwMTUzDQoNCmBgYA0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBzYW10b29scyBpbmRleCBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuYmFtDQoNCg0KDQoNCiMjIEFkZGl0aW9uYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGxzIC1sDQoNCmBgYA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgIDY5MTA3MSBNYXkgIDUgMDU6MDMgNTlfMS5meE5tLmxvZw0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3IDI2MDcwNDYzMzEyMyBNYXkgIDQgMTA6MjMgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5iYW0NCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgIDk3ODY5NTIgTWF5ICA0IDE4OjA1IFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MuYmFtLmJhaQ0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgICAgNTU2NSBNYXkgIDUgMDU6MDMgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5kdXBNZXRyaWNzLnR4dA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3IDI2MzQ3MzI4NDU3MCBNYXkgIDUgMDU6MDMgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLmJhbQ0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgOTgxNzYxNiBNYXkgIDUgMDk6NTkgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLmJhbS5iYWkNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAgICAgMTYgTWF5ICA0IDE5OjA3IHN1bW1hcnktU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncw0KDQpgYGANCg0KDQoNCiMjIEJhc2UgcXVhbGl0eSBjYWxpYnJhdGlvbiAodXNpbmcgZ2F0ayBCYXNlUmVjbGFpYnJhdG9yIGFuZCBnYXRrIEFwcGx5IEJRU1IpDQoNCi1JdCB0YWtlcyBhIGxvbmcgdGltZSB0byBjYWxpYnJhdGUgdGhlIGJhc2VzIGluIHRoZSBlbnRpcmUgQkFNIGZpbGUuDQoNCi0gV2Ugd2lsbCwgaGVuY2UsIHJlY2FsaWJyYXRlIHRoZSBiYXNlcyBvbmx5IGluIGNocm9tb3NvbWUgMjAgYW5kIGNhbGwgdmFyaWFudHMgaW4gKGdlbmVzIG9yIHJlZ2lvbnMgaW4pIGNocm9tb3NvbWUgMjAuIA0KDQoNCg0KDQoNCg0KYGBgDQpBMy4gR2VuZXJhdGUgYSB2YWxpZGF0ZWQgQkFNIGZpbGUgZm9yIE5BMTI4NzgNCg0KYGBgDQoNCg0KIyMgQWxpZ24gdGhlIGZhc3RxIHNlcXVlbmNlcyB0byB0aGUgcmVmZXJlbmNlIGdlbm9tZSB1c2luZyBCV0EgDQoNCkFsaWdubWVudCAoYndhIG1lbSkgd2lsbCBsZWFkIHRvIGEgU0FNIChzZXF1ZW5jZSBhbGlnbm1lbnQgZmlsZSkgZmlsZSwgdGhhdCB3aWxsIGJlIGR1cGxpY2F0ZSBtYXJrZWQgdXNpbmcgc2FtYmxhc3Rlci4gVGhlIHNhbSBmaWxlIHdpbGwgYmUgY29udmVydGVkIHRvIGEgQkFNIGZpbGUgKHNhbXRvb2xzIHZpZXcpLiBUaGUgQkFNIGZpbGUgd2lsbCBiZSBzb3J0ZWQsIGluZGV4ZWQgYW5kIHN1YmplY3RlZCB0byBnZW5lcmF0ZSBhbGlnbm1lbnQgc3RhdGlzdGljcw0KDQoNCiMjIyMjIH4vZ2F0ay1kYXRhLXJlZiQgYndhIG1lbSAtTSAtdCA3MiAtUiAnQFJHXHRJRDpTUlI2MjI0NjFcdExCOlJcdFBMOmlsbHVtaW5hXHRQVTpGQ0MxSDdXQUNYWFx0U006TkExMjg3OCcgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgU1JSNjIyNDYxXzEuZmFzdHEuZ3ogU1JSNjIyNDYxXzIuZmFzdHEuZ3ogfCBzYW1ibGFzdGVyIC1NIHwgc2FtdG9vbHMgdmlldyAtU2JoIHwgc2FtdG9vbHMgc29ydCAtbyBTUlI2MjI0NjEuYmFtIC0gJiYgc2FtdG9vbHMgaW5kZXggU1JSNjIyNDYxLmJhbSAmJiBzYW10b29scyBmbGFnc3RhdCBTUlI2MjI0NjEuYmFtDQoNCi4uLi4uLi4uLi4uLi4uLi4uLi4uDQoNCnNhbWJsYXN0ZXI6IFZlcnNpb24gMC4xLjI0DQoNCnNhbWJsYXN0ZXI6IElucHV0dGluZyBmcm9tIHN0ZGluDQoNCnNhbWJsYXN0ZXI6IE91dHB1dHRpbmcgdG8gc3Rkb3V0DQoNCltNOjpid2FfaWR4X2xvYWRfZnJvbV9kaXNrXSByZWFkIDMxNzEgQUxUIGNvbnRpZ3MNCg0KW006OnByb2Nlc3NdIHJlYWQgNzEyODcxNCBzZXF1ZW5jZXMgKDcyMDAwMDExNCBicCkuLi4NCg0KDQouLi4uLi4uLi4uDQoNCnNhbWJsYXN0ZXI6IE1hcmtlZCA3MDY2Njk4IG9mIDkyNDU5NDU0ICg3LjY0JSkgcmVhZCBpZHMgYXMgZHVwbGljYXRlcyB1c2luZyAxLDQ2NCw0NzJrIG1lbW9yeSBpbiAyTTE1UygxMzUuMTY1UykgQ1BVIHNlY29uZHMgYW5kIDM0TTE1UygyMDU1Uykgd2FsbCB0aW1lLg0KDQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQoNClttYWluXSBWZXJzaW9uOiAwLjcuMTctcjExODgNCg0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQoNClttYWluXSBSZWFsIHRpbWU6IDIwNTQuNTA2IHNlYzsgQ1BVOiA4NjI1OC42NjQgc2VjDQoNCltiYW1fc29ydF9jb3JlXSBtZXJnaW5nIGZyb20gNzEgZmlsZXMgYW5kIDEgaW4tbWVtb3J5IGJsb2Nrcy4uLg0KDQoNCg0KYGBgDQoxODY0MzQ2NzAgKyAwIGluIHRvdGFsIChRQy1wYXNzZWQgcmVhZHMgKyBRQy1mYWlsZWQgcmVhZHMpDQoNCjc0NTQyMiArIDAgc2Vjb25kYXJ5DQoNCjc3MDM0MCArIDAgc3VwcGxlbWVudGFyeQ0KDQoxNDMwNTM4MCArIDAgZHVwbGljYXRlcw0KDQoxNzczNzI0NTggKyAwIG1hcHBlZCAoOTUuMTQlIDogTi9BKQ0KDQoxODQ5MTg5MDggKyAwIHBhaXJlZCBpbiBzZXF1ZW5jaW5nDQoNCjkyNDU5NDU0ICsgMCByZWFkMQ0KDQo5MjQ1OTQ1NCArIDAgcmVhZDINCg0KMTY4NjQwNTM2ICsgMCBwcm9wZXJseSBwYWlyZWQgKDkxLjIwJSA6IE4vQSkNCg0KMTczNjA3MzA0ICsgMCB3aXRoIGl0c2VsZiBhbmQgbWF0ZSBtYXBwZWQNCg0KMjI0OTM5MiArIDAgc2luZ2xldG9ucyAoMS4yMiUgOiBOL0EpDQoNCjE2ODg3OTYgKyAwIHdpdGggbWF0ZSBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgY2hyDQoNCjgxOTI0NiArIDAgd2l0aCBtYXRlIG1hcHBlZCB0byBhIGRpZmZlcmVudCBjaHIgKG1hcFE+PTUpDQoNCmBgYA0KDQoNCiMjIEFkZGl0aW9uYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGxzIC1sDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDEyOTMyMzEyNTQzIEFwciAzMCAxNzoyOSBTUlI2MjI0NjEuYmFtDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICA1Njc5NDI0IEFwciAzMCAxNzozMSBTUlI2MjI0NjEuYmFtLmJhaQ0KDQoNCg0KIyMgVmFsaWRhdGUgdGhlIEJBTSBmaWxlDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIFZhbGlkYXRlU2FtRmlsZSAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBTUlI2MjI0NjEuYmFtIC1NIFNVTU1BUlkgLU8gc3VtbWFyeS1TUlI2MjI0NjENCg0KDQouLi4uLi4uLi4uLi4NCg0KVG9vbCByZXR1cm5lZDogMw0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBjYXQgc3VtbWFyeS1TUlI2MjI0NjEgDQoNCmBgYA0KIyMgSElTVE9HUkFNCWphdmEubGFuZy5TdHJpbmcNCg0KRXJyb3IgVHlwZQkgICAgICAgIENvdW50DQoNCkVSUk9SOklOVkFMSURfVEFHX05NCTE2MTY0DQoNCmBgYA0KDQoNCg0KIyMgRml4IHRoZSBlcnJvciBub3RlZCBhYm92ZQ0KDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGdhdGsgU2V0Tm1NZEFuZFVxVGFncyAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBTUlI2MjI0NjEuYmFtIC1PIFNSUjYyMjQ2MS5meE5tTWRVcVRhZy5iYW0NCg0KDQoNCiMjIHZhbGlkYXRlIHRoZSBCQU0gZmlsZSBhZ2FpbiBhbmQgY3JlYXRlIGFuIGluZGV4DQoNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgZ2F0ayBWYWxpZGF0ZVNhbUZpbGUgLVIgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgLUkgU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLmJhbSAtTSBTVU1NQVJZIC1PIHN1bW1hcnktU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnDQoNCg0KLi4uLi4uLi4uLi4uLi4NCg0KVG9vbCByZXR1cm5lZDogMA0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBjYXQgc3VtbWFyeS1TUlI2MjI0NjEuZnhObU1kVXFUYWcNCg0KTm8gZXJyb3JzIGZvdW5kDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIHNhbXRvb2xzIGluZGV4IFNSUjYyMjQ2MS5meE5tTWRVcVRhZy5iYW0NCg0KDQoNCg0KIyMgTWFyayBkdXBsaWNhdGVzIGFuZCBpbmRleCB0aGUgQkFNIGZpbGUgY3JlYXRlZA0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBub2h1cCBnYXRrIE1hcmtEdXBsaWNhdGVzIC1JIFNSUjYyMjQ2MS5meE5tTWRVcVRhZy5iYW0gLU8gU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLm1kdXAuYmFtIC1NIFNSUjYyMjQ2MS5meE5tTWRVcVRhZy5kdXBNZXRyaWNzLnR4dA0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBoZWFkIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MuZHVwTWV0cmljcy50eHQgDQoNCi4uLi4uLi4uLi4uLi4uLg0KDQpgYGANCg0KIyMgTUVUUklDUyBDTEFTUyAgICAgICAgcGljYXJkLnNhbS5EdXBsaWNhdGlvbk1ldHJpY3MNCkxJQlJBUlkgVU5QQUlSRURfUkVBRFNfRVhBTUlORUQgUkVBRF9QQUlSU19FWEFNSU5FRCAgICAgU0VDT05EQVJZX09SX1NVUFBMRU1FTlRBUllfUkRTICBVTk1BUFBFRF9SRUFEUyAgVU5QQUlSRURfUkVBRF9EVVBMSUNBVEVTICAgICAgICBSRUFEX1BBSVJfRFVQTElDQVRFUyAgUkVBRF9QQUlSX09QVElDQUxfRFVQTElDQVRFUyAgICBQRVJDRU5UX0RVUExJQ0FUSU9OICAgICBFU1RJTUFURURfTElCUkFSWV9TSVpFDQoNClIgICAgICAgMjI0OTM5MiA4NjgwMzY1MiAgICAgICAgMTUxNTc2MiA5MDYyMjEyIDYzNTgxOCAgNzAwOTIzNCAwICAgICAgIDAuMDgzMzMxICAgICAgICA1MDgxNTQ1NjgNCg0KYGBgDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIHNhbXRvb2xzIGluZGV4IFNSUjYyMjQ2MS5meE5tTWRVcVRhZy5tZHVwLmJhbQ0KDQoNCg0KDQojIyBBZGRpdGlvbmFsIGRpcmVjdG9yeSBjb250ZW50cw0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQoNCmBgYA0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAxNzU1MzA5MzU3MyBNYXkgIDYgMDQ6MDAgU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLmJhbQ0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgODg0NjI5NiBNYXkgIDYgMTc6MDggU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLmJhbS5iYWkNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAgMzUzMSBNYXkgIDYgMTQ6NDIgU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLmR1cE1ldHJpY3MudHh0DQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgMTc3MjgyOTM5MjQgTWF5ICA2IDE0OjQyIFNSUjYyMjQ2MS5meE5tTWRVcVRhZy5tZHVwLmJhbQ0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgODk1OTI2NCBNYXkgIDYgMTc6MDggU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLm1kdXAuYmFtLmJhaQ0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgICAgIDE2IE1heSAgNiAwNDozOCBzdW1tYXJ5LVNSUjYyMjQ2MS5meE5tTWRVcVRhZw0KDQoNCmBgYA0KDQoNCg0KIyMgQi4gSGFwbG90eXBlIGNocm5hNCBnZW5lIG9mIHRoZSAzIGluZGl2aWR1YWxzIGluIEdWQ0YgbW9kZQ0KDQpgYGANCkIxLiBIYXBsb3R5cGUgY2hybmE0IG9mIE5BMTI4OTENCg0KYGBgDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGdhdGsgSGFwbG90eXBlQ2FsbGVyIC1SIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC1JIFNSUjYyMjQ1OC5meE5tTWRVcVRhZy5tZHVwLmJhbSAtTCBjaHIyMDo2MzM0MzMxMC02MzM3NTQ3MSAtRVJDIEdWQ0YgLU8gU1JSNjIyNDU4LmZ4Tm1NZFVxVGFnLm1kdXAuY2hybmE0LmcudmNmIA0KDQoNCg0KYGBgDQpCMi4gSGFwbG90eXBlIGNocm5hNCBvZiBOQTEyODkyDQoNCmBgYA0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIEhhcGxvdHlwZUNhbGxlciAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuYmFtIC1MIGNocjIwOjYzMzQzMzEwLTYzMzc1NDcxIC1FUkMgR1ZDRiAtTyBTUlI2MjI0NTlfMS5meE5tTWRVcVRhZy5tZHVwLmNocm5hNC5nLnZjZiANCg0KDQpgYGANCkIzLiBIYXBsb3R5cGUgY2hybmE0IG9mIE5BMTI4NzgNCg0KYGBgDQoNCg0KIyMjIyAgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIEhhcGxvdHlwZUNhbGxlciAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBOQTEyODc4L1NSUjYyMjQ2MS5meE5tTWRVcVRhZy5tZHVwLmJhbSAtTCBjaHIyMDo2MzM0MzMxMC02MzM3NTQ3MSAtRVJDIEdWQ0YgLU8gU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLm1kdXAuY2hybmE0LmcudmNmDQoNCg0KDQoNCg0KIyMjIEFkZGl0aW9uYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGxzIC1sDQoNCmBgYA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICA4NTUxMjEgTWF5ICA4IDAxOjAxIFNSUjYyMjQ1OC5meE5tTWRVcVRhZy5tZHVwLmNocm5hNC5nLnZjZg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgMzY3NjI0IE1heSAgOCAwMTowMSBTUlI2MjI0NTguZnhObU1kVXFUYWcubWR1cC5jaHJuYTQuZy52Y2YuaWR4DQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgIDg5NjQ3OCBNYXkgIDggMDE6MDMgU1JSNjIyNDU5XzEuZnhObU1kVXFUYWcubWR1cC5jaHJuYTQuZy52Y2YNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgIDM2NzYyOCBNYXkgIDggMDE6MDMgU1JSNjIyNDU5XzEuZnhObU1kVXFUYWcubWR1cC5jaHJuYTQuZy52Y2YuaWR4DQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgIDM4MzUwMCBNYXkgIDggMDE6MDUgU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLm1kdXAuY2hybmE0LmcudmNmDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAzNjc2MjQgTWF5ICA4IDAxOjA1IFNSUjYyMjQ2MS5meE5tTWRVcVRhZy5tZHVwLmNocm5hNC5nLnZjZi5pZHgNCg0KYGBgDQoNCg0KIyMgQy4gQ29tYmluZSB0aGUgR2Vub3R5cGVWQ0YgZmlsZXMgYW5kIGdlbm90eXBlIHRoZSBzYW1wbGVzIHRvZ2V0aGVyICh1c2luZyBnYXRrIEdlbm90eXBlR1ZDRnMpDQoNCg0KIyMjIENvbWJpbmUgIEdlbm90eXBlVkNGIGZpbGVzDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBub2h1cCBnYXRrIENvbWJpbmVHVkNGcyAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtViBTUlI2MjI0NTguZnhObU1kVXFUYWcubWR1cC5jaHJuYTQuZy52Y2YgLVYgU1JSNjIyNDU5XzEuZnhObU1kVXFUYWcubWR1cC5jaHJuYTQuZy52Y2YgLVYgU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLm1kdXAuY2hybmE0LmcudmNmIC1PIFNSUjYyMjQtNTgtNTktNjEtZnhUZ3MtbWR1cC5jaHJuYTQuZy5jb21iaW5lLnZjZiAmPiBjb21iaW5lLTU4LTU5LTYxLmZ4VGdzLm1kdXAuY2hybmE0LmcubG9nICYNCg0KDQojIyMgQWRkaXRpb25hbCBkaXJlY3RvcnkgY29udGVudHMNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgbHMgLWwNCg0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3IDE5MjM3MTMgTWF5ICA4IDAxOjIxIFNSUjYyMjQtNTgtNTktNjEtZnhUZ3MtbWR1cC5jaHJuYTQuZy5jb21iaW5lLnZjZg0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAzNjc2MzIgTWF5ICA4IDAxOjIxIFNSUjYyMjQtNTgtNTktNjEtZnhUZ3MtbWR1cC5jaHJuYTQuZy5jb21iaW5lLnZjZi5pZHgNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAzNjU0IE1heSAgOCAwMToyMSBjb21iaW5lLTU4LTU5LTYxLmZ4VGdzLm1kdXAuY2hybmE0LmcubG9nDQoNCg0KDQoNCiMjIyBHZW5vdHlwZSB0aGUgc2FtcGxlcyB0b2dldGhlcg0KDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIG5vaHVwIGdhdGsgR2Vub3R5cGVHVkNGcyAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtViBTUlI2MjI0LTU4LTU5LTYxLWZ4VGdzLW1kdXAuY2hybmE0LmcuY29tYmluZS52Y2YgLU8gU1JSNjIyNC01OC01OS02MS1meFRncy1tZHVwLmNocm5hNC5nLmNvbWJpbmUuam9pbnRjYWxscy52Y2YgJj4gZ2Vub3R5cGVHVkNGcy01OC01OS02MS1jaHJuYTQuZy5qb2ludGNhbGxzLmxvZyAmDQoNCg0KDQojIyMgQWRkaXRpb25hbCBkaXJlY3RvcnkgY29udGVudHMNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgbHMgLWwNCg0KDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgIDIxMjM5MiBNYXkgIDggMDE6MjggU1JSNjIyNC01OC01OS02MS1meFRncy1tZHVwLmNocm5hNC5nLmNvbWJpbmUuam9pbnRjYWxscy52Y2YNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgMTE4MTA5IE1heSAgOCAwMToyOCBTUlI2MjI0LTU4LTU5LTYxLWZ4VGdzLW1kdXAuY2hybmE0LmcuY29tYmluZS5qb2ludGNhbGxzLnZjZi5pZHgNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAzMDY1IE1heSAgOCAwMToyOCBnZW5vdHlwZUdWQ0ZzLTU4LTU5LTYxLWNocm5hNC5nLmpvaW50Y2FsbHMubG9nDQoNCg0KIyMjIEdlbmVyYXRlIHZhcmlhbnQgc3RhdGlzdGljcw0KDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGJjZnRvb2xzIHN0YXRzIFNSUjYyMjQtNTgtNTktNjEtZnhUZ3MtbWR1cC5jaHJuYTQuZy5jb21iaW5lLmpvaW50Y2FsbHMudmNmIHwgbGVzcw0KDQpgYGANCiMgVGhpcyBmaWxlIHdhcyBwcm9kdWNlZCBieSBiY2Z0b29scyBzdGF0cyAoMS45K2h0c2xpYi0xLjkpIGFuZCBjYW4gYmUgcGxvdHRlZCB1c2luZyBwbG90LXZjZnN0YXRzLg0KIyBUaGUgY29tbWFuZCBsaW5lIHdhczogYmNmdG9vbHMgc3RhdHMgIFNSUjYyMjQtNTgtNTktNjEtZnhUZ3MtbWR1cC5jaHJuYTQuZy5jb21iaW5lLmpvaW50Y2FsbHMudmNmDQojDQojIERlZmluaXRpb24gb2Ygc2V0czoNCiMgSUQgICAgWzJdaWQgICBbM110YWItc2VwYXJhdGVkIGZpbGUgbmFtZXMNCklEICAgICAgMCAgICAgICBTUlI2MjI0LTU4LTU5LTYxLWZ4VGdzLW1kdXAuY2hybmE0LmcuY29tYmluZS5qb2ludGNhbGxzLnZjZg0KIyBTTiwgU3VtbWFyeSBudW1iZXJzOg0KIyAgIG51bWJlciBvZiByZWNvcmRzICAgLi4gbnVtYmVyIG9mIGRhdGEgcm93cyBpbiB0aGUgVkNGDQojICAgbnVtYmVyIG9mIG5vLUFMVHMgICAuLiByZWZlcmVuY2Utb25seSBzaXRlcywgQUxUIGlzIGVpdGhlciAiLiIgb3IgaWRlbnRpY2FsIHRvIFJFRg0KIyAgIG51bWJlciBvZiBTTlBzICAgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBhIFNOUA0KIyAgIG51bWJlciBvZiBNTlBzICAgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBhIE1OUCwgc3VjaCBhcyBDQz5UVA0KIyAgIG51bWJlciBvZiBpbmRlbHMgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBhbiBpbmRlbA0KIyAgIG51bWJlciBvZiBvdGhlcnMgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBvdGhlciB0eXBlLCBmb3IgZXhhbXBsZSBhIHN5bWJvbGljIGFsbGVsZSBvcg0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgYSBjb21wbGV4IHN1YnN0aXR1dGlvbiwgc3VjaCBhcyBBQ1Q+VENHQQ0KIyAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgc2l0ZXMgICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggbXVsdGlwbGUgYWx0ZXJuYXRlIGFsbGVsZXMNCiMgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIFNOUCBzaXRlcyAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIG11bHRpcGxlIGFsdGVybmF0ZSBhbGxlbGVzLCBhbGwgU05Qcw0KIyANCiMgICBOb3RlIHRoYXQgcm93cyBjb250YWluaW5nIG11bHRpcGxlIHR5cGVzIHdpbGwgYmUgY291bnRlZCBtdWx0aXBsZSB0aW1lcywgaW4gZWFjaA0KIyAgIGNvdW50ZXIuIEZvciBleGFtcGxlLCBhIHJvdyB3aXRoIGEgU05QIGFuZCBhbiBpbmRlbCBpbmNyZW1lbnRzIGJvdGggdGhlIFNOUCBhbmQNCiMgICB0aGUgaW5kZWwgY291bnRlci4NCiMgDQojIFNOICAgIFsyXWlkICAgWzNda2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs0XXZhbHVlDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIHNhbXBsZXM6ICAgICAgICAgICAgICAgICAgICAgIDMNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgcmVjb3JkczogICAgICAgICAgICAgICAgICAgICAgMTE4DQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG5vLUFMVHM6ICAgICAgICAgICAgICAgICAgICAgIDANClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgU05QczogICAgICAgICAgICAgICAgICAgICAgICAgOTkNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgTU5QczogICAgICAgICAgICAgICAgICAgICAgICAgMA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBpbmRlbHM6ICAgICAgICAgICAgICAgICAgICAgICAxOQ0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBvdGhlcnM6ICAgICAgICAgICAgICAgICAgICAgICAwDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBzaXRlczogICAgICAgICAgIDMNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIFNOUCBzaXRlczogICAgICAgMg0KDQpgYGANCg0KDQoNCiMjIEQuIFJ1biBHZW5vbWljc0RCSW1wb3J0IG9uIGluZGl2aWR1YWwgR2Vub3R5cGVWQ0ZzIHRvZ2V0aGVyDQoNCg0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIEdlbm9taWNzREJJbXBvcnQgLVYgU1JSNjIyNDU4LmZ4Tm1NZFVxVGFnLm1kdXAuY2hybmE0LmcudmNmIC1WIFNSUjYyMjQ1OV8xLmZ4Tm1NZFVxVGFnLm1kdXAuY2hybmE0LmcudmNmIC1WIFNSUjYyMjQ2MS5meE5tTWRVcVRhZy5tZHVwLmNocm5hNC5nLnZjZiAtLWdlbm9taWNzZGItd29ya3NwYWNlLXBhdGggZ2Vub21pY3NEYkltcG9ydF9vdXRwdXQgLUwgY2hyMjA6NjMzNDMzMTAtNjMzNzU0NzENCg0KDQoNCg0KIyMjIEFkZGl0aW9uYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGxzIC1sIGdlbm9taWNzRGJJbXBvcnRfb3V0cHV0Lw0KDQotcnd4LS0tLS0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgMCBNYXkgIDggMDE6NDUgIF9fdGlsZWRiX3dvcmtzcGFjZS50ZGINCg0KLXJ3eC0tLS0tLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAyODIgTWF5ICA4IDAxOjQ1ICBjYWxsc2V0Lmpzb24NCg0KZHJ3eC0tLS0tLSA0IGIwZDI2NDcgYjBkMjY0NyAgIDQwOTYgTWF5ICA4IDAxOjQ1ICdjaHIyMCQ2MzM0MzMxMCQ2MzM3NTQ3MScNCg0KLXJ3eC0tLS0tLSAxIGIwZDI2NDcgYjBkMjY0NyAxODA1NjEgTWF5ICA4IDAxOjQ1ICB2Y2ZoZWFkZXIudmNmDQoNCi1yd3gtLS0tLS0gMSBiMGQyNjQ3IGIwZDI2NDcgMjkxMzEwIE1heSAgOCAwMTo0NSAgdmlkbWFwLmpzb24NCg0KDQoNCg==