stat599/biol599: genomic data science lecture 8: genome...

41
- - : STAT599/BIOL599: Genomic Data Science Lecture 8: Genome-Wide Association Study (GWAS) Dr. Yen-Yi Ho ([email protected]) 1/41

Upload: others

Post on 20-Mar-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

STAT599/BIOL599: Genomic Data ScienceLecture 8: Genome-Wide Association Study (GWAS)

Dr. Yen-Yi Ho ([email protected])

1/41

Page 2: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

Objectives of Lecture 8

I Data Preparation

I Perform Genome-Wide Association Analysis

I Statistical PowerI Multiple Comparisons

I Family-Wise Error RateI Bonferroni CorrectionI False Discovery RateI q ValueI Benjamini Hochberg Adjustment

2/41

Page 3: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

GWAS Study

Exploratory investigation of genotype-trait association that involvescharacterization of a large segment of DNA (usually more than500-1000 Kb region).

3/41

Page 4: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

GWAS Data Example

Genotypes of 54,977 SNP markers from 83 sheep.

> gwas.url<-"http://people.stat.sc.edu/hoyen/BIOL599/Data/SNPxSample.txt"

> gwasdata<-read.table(file=gwas.url, header=T, sep="\t", na.strings="9")

> gwasdata[1:5,1:5]

sample1 sample10 sample11 sample12

250506CS3900065000002_1238.1 1 2 1 1

250506CS3900140500001_312.1 2 1 2 1

250506CS3900176800001_906.1 2 1 2 1

250506CS3900211600001_1041.1 2 2 2 1

250506CS3900218700001_1294.1 2 2 1 1

sample13

250506CS3900065000002_1238.1 1

250506CS3900140500001_312.1 2

250506CS3900176800001_906.1 2

250506CS3900211600001_1041.1 0

250506CS3900218700001_1294.1 1

4/41

Page 5: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

Recode genotype

> gwasdata<-t(gwasdata)

> gdata<-matrix(NA, nrow=nrow(gwasdata), ncol=ncol(gwasdata))

> for(i in 1:ncol(gwasdata)){

+ gdata[,i]<-ifelse(gwasdata[,i]==0, "AA", gdata[,i])

+ gdata[,i]<-ifelse(gwasdata[,i]==1, "AB", gdata[,i])

+ gdata[,i]<-ifelse(gwasdata[,i]==2, "BB", gdata[,i])

+ }

> colnames(gdata)<-colnames(gwasdata)

> dim(gdata)

[1] 83 54977

> gdata[1:3,1:3]

250506CS3900065000002_1238.1 250506CS3900140500001_312.1

[1,] "AB" "BB"

[2,] "BB" "AB"

[3,] "AB" "BB"

250506CS3900176800001_906.1

[1,] "BB"

[2,] "AB"

[3,] "BB"5/41

Page 6: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

Genotyping Errors

A genotyping error occurs when the genotype reported is not theunderlying genotype. Often time in a gwas analysis, test forHardy-Weinberg equilibrium (HWE) is conducted and markers thatare not in HWE are removed. There are a number of problemswith this approach.

I Deviation from HWE could be due to association betweengenotypes and trait of interest

I Departure from HWE could be due to population structure

I Multiple hypothesis testing

Despite of all the difficulties, in practice SNPs are frequentlydropped from the analysis due to a failure of HWE.

6/41

Page 7: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

Data Preparation

I Individuals with missing genotypes > 80% of markers

I Genetic markers with missing genotypes > 80%

I HWE test p values < 0.05

I Minor allele frequency < 0.05

7/41

Page 8: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

Individuals with missing genotypes

> missp<-function(genotype){

+ ans<-length(which(is.na(genotype)))/length(genotype)

+ return(ans)

+ }

> missp(gdata[1,])

[1] 0.1002601

The first individual has about 10% missing genotypes.

Exercise1: Read in the gwas data, remove all individuals with more than

80% missing genotypes.

8/41

Page 9: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

Individuals with missing genotypes

> missp<-function(genotype){

+ ans<-length(which(is.na(genotype)))/length(genotype)

+ return(ans)

+ }

> missp(gdata[1,])

[1] 0.1002601

The first individual has about 10% missing genotypes.

Exercise1: Read in the gwas data, remove all individuals with more than

80% missing genotypes.

9/41

Page 10: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

Markers with missing genotypes

> missp<-function(genotype){

+ ans<-length(which(is.na(genotype)))/length(genotype)

+ return(ans)

+ }

> missp(gdata[,10])

[1] 1

The 10th marker has about 100% missing genotypes.

Exercise2: Remove all markers with more than 80% missing genotypes.

10/41

Page 11: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

Markers with missing genotypes

> missp<-function(genotype){

+ ans<-length(which(is.na(genotype)))/length(genotype)

+ return(ans)

+ }

> missp(gdata[,10])

[1] 1

The 10th marker has about 100% missing genotypes.

Exercise2: Remove all markers with more than 80% missing genotypes.

11/41

Page 12: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

HWE

> library("HardyWeinberg")

> hwe<-rep(NA, length=ncol(gdata2))

> for(i in 1:ncol(gdata2)){

+ g<-factor(gdata2[,i], levels=c("AA", "AB", "BB"))

+ tab<-table(g)

+ hwe[i]<-HWChisq(tab, verbose=F)[[2]][1]

+ #print(i)

+ }

> rmg2<-which(hwe<0.05)

> length(rmg2)

[1] 3799

> gdata3<-gdata2[,-rmg2]

12/41

Page 13: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

Minor Allele Frequency (MAF)

> getMAF<-function(genotype){

+ tmp<-unlist(strsplit(as.character(genotype), split=""))

+ tabf<-table(tmp)/sum(table(tmp))

+ imin<-which.min(tabf)

+ freq<-tabf[imin]

+ names(freq)<-NULL

+ ans<-list(names(tabf[imin]), freq)

+ return(ans)

+ }

> getMAF(gdata3[,1])

[[1]]

[1] "A"

[[2]]

[1] 0.253012

Exercise3: Record minor allele and remove markers with MAF < 5% .

13/41

Page 14: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

Minor Allele Frequency (MAF)

> getMAF<-function(genotype){

+ tmp<-unlist(strsplit(as.character(genotype), split=""))

+ tabf<-table(tmp)/sum(table(tmp))

+ imin<-which.min(tabf)

+ freq<-tabf[imin]

+ names(freq)<-NULL

+ ans<-list(names(tabf[imin]), freq)

+ return(ans)

+ }

> getMAF(gdata3[,1])

[[1]]

[1] "A"

[[2]]

[1] 0.253012

Exercise3: Record minor allele and remove markers with MAF < 5% .

14/41

Page 15: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

GWAS analysis: One-SNP-at-a-time

> singlesnpM<-function(genotype, y){

+ ina<-which(is.na(genotype))

+ if (length(ina)>0){

+ g<-factor(genotype[-ina])

+ weight<-y[-ina]

+ }else{

+ g<-factor(genotype)

+ weight<-y

+ }

+ tab<-table(g)

+ if(length(tab) < 2){

+ ans<-NA

+ }else{

+ fit<-lm(weight ~ g )

+ fit0<-lm( weight ~ 1)

+ modelc<-anova(fit0, fit)

+ ans<-modelc[[6]][2]

+ }

+ return(ans)

+ }

> weight<-rnorm(nrow(gdata4), mean=50, sd=10)

> singlesnpM(gdata4[,1], y=weight)

[1] 0.0730777

Exercise 4: Perform GWAS analysis for all SNP markers.

15/41

Page 16: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

GWAS analysis: One-SNP-at-a-time

> singlesnpM<-function(genotype, y){

+ ina<-which(is.na(genotype))

+ if (length(ina)>0){

+ g<-factor(genotype[-ina])

+ weight<-y[-ina]

+ }else{

+ g<-factor(genotype)

+ weight<-y

+ }

+ tab<-table(g)

+ if(length(tab) < 2){

+ ans<-NA

+ }else{

+ fit<-lm(weight ~ g )

+ fit0<-lm( weight ~ 1)

+ modelc<-anova(fit0, fit)

+ ans<-modelc[[6]][2]

+ }

+ return(ans)

+ }

> weight<-rnorm(nrow(gdata4), mean=50, sd=10)

> singlesnpM(gdata4[,1], y=weight)

[1] 0.0730777

Exercise 4: Perform GWAS analysis for all SNP markers.

16/41

Page 17: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

Manhattan plot: get SNP map position

> map.url<-"http://people.stat.sc.edu/hoyen/BIOL599/Data/SNPmap.txt"

> map<-read.table(file=map.url, header=T, sep="\t", stringsAsFactor=F)

> map[1:5,]

name chromosome position

1 250506CS3900065000002_1238.1 15 5327353

2 250506CS3900140500001_312.1 23 27428869

3 250506CS3900176800001_906.1 7 89002990

4 250506CS3900211600001_1041.1 16 44955568

5 250506CS3900218700001_1294.1 2 157820235

Exercise 5: Find genetic position for all the markers in the gwasanalysis.

17/41

Page 18: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

Manhattan plot: prepare data

> data2[1:5,]

CHR BP P SNP

1 15 5327353 0.0730777 250506CS3900065000002_1238.1

2 23 27428869 0.9058141 250506CS3900140500001_312.1

3 7 89002990 0.5963234 250506CS3900176800001_906.1

4 16 44955568 0.2456556 250506CS3900211600001_1041.1

5 2 157820235 0.9174387 250506CS3900218700001_1294.1

CHR is the chromosome; BP is the basepair position of themarker; P is the pvalues; SNP is the name of the SNP.Rename Chromosome X to 27Exercise 6: Get data2.

18/41

Page 19: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

Manhattan plot

> library(qqman)

> library(RColorBrewer)

> manhattan(data2)

> abline(h=5, lty=2)

> abline(h=7.4, lty=2)

19/41

Page 20: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

Manhattan plot

20/41

Page 21: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

QQ plot

21/41

Page 22: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

Top Table

SNP CHR Minor Allele MAF p value

1 s26639.1 12.00 A 0.42 0.002 OAR10 85096817.1 10.00 B 0.16 0.003 s56341.1 25.00 B 0.22 0.004 OAR2 25847803.1 2.00 B 0.46 0.005 s08428.1 1.00 B 0.41 0.006 OAR4 66612313.1 4.00 A 0.5 0.007 OAR4 66622193.1 4.00 A 0.5 0.008 s52754.1 3.00 A 0.30 0.009 OAR6 55801684.1 6.00 A 0.35 0.00

10 OAR2 192100658.1 2.00 A 0.46 0.00

22/41

Page 23: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

Manhattan plot

23/41

Page 24: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

Performance of Statistical Tests

I Control false positive (Type I error, α) at 0.05

I Power (true positive rate): the ability to detect the signalwhen there is something going on

Page 25: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

Approaches to Control Type I Errors

I Family-wise error rate (FWER): the probability of making atleast one Type I errors among all the tests.

I False discovery rate (FDR): is the expected proportion ofType I errors among the rejected hypotheses.

I and many others ...

Which procedure is more stringent?

25/41

Page 26: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

Approaches to Control Type I Errors

I Family-wise error rate (FWER): the probability of making atleast one Type I errors among all the tests.

I False discovery rate (FDR): is the expected proportion ofType I errors among the rejected hypotheses.

I and many others ...

Which procedure is more stringent?

26/41

Page 27: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

FWER: Bonferroni Correction

α∗ =α

m.

Where m is the number hypothesis tests considered.

> 0.05/nrow(toptable2)

[1] 1.113487e-06

High probability of Type 2 errors.

27/41

Page 28: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

FWER: Bonferroni Correction

α∗ =α

m.

Where m is the number hypothesis tests considered.

> 0.05/nrow(toptable2)

[1] 1.113487e-06

High probability of Type 2 errors.

28/41

Page 29: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

Benjamini Hochberg control of FDR

I To control FDR at leve δ:

1. Sort the p values in increasing order to get p(1), p(2), ..., p(m)

2. Define k= max{j : p(j) ≤ jm × δ}

3. Reject H(1)0 ,H

(2)0 , ...,H

(k)0

p(j) ≤ δ × j

m

29/41

Page 30: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

BH Example

Control FDR at δ = 0.05

Rank (j) p value (j/m)× δ Reject Ho?1 0.001 0.005 12 0.009 0.010 13 0.165 0.015 04 0.205 0.020 05 0.396 0.025 06 0.450 0.030 07 0.641 0.035 08 0.781 0.040 09 0.900 0.045 010 0.993 0.050 0

30/41

Page 31: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

BH Example

Control FDR at δ = 0.05

Rank (j) p value (j/m)× δ Reject Ho?

1 0.001 0.005 12 0.009 0.010 1

3 0.165 0.015 04 0.205 0.020 05 0.396 0.025 06 0.450 0.030 07 0.641 0.035 0

p ≤ δ × j

m

p × m

j< δ

p∗ < δ

31/41

Page 32: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

BH procedure

In R,

> pvalue<-c(0.0008, 0.009, 0.165, 0.205, 0.396, 0.450,

+ 0.641, 0.781, 0.900, 0.993)

> adjp<-p.adjust(pvalue, method="BH")

> adjp

[1] 0.0080000 0.0450000 0.5125000 0.5125000 0.7500000

[6] 0.7500000 0.9157143 0.9762500 0.9930000 0.9930000

32/41

Page 33: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

Controlling FDR: The q value approach

I q value is defined as the minimum FDR that can be attainedwhen calling that “SNP” significant (ie: expected proportionof false positives incurred when calling that SNP significant)

I Thus, in a GWAS study, if SNP X has a q value of 0.013. Itmeans that 1.3% of genes that show p values at least as smallas SNP X are false positives.

33/41

Page 34: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

Estimating FDR

A density histogram of the 3,170 p values from the Hedenfalk et al. (14)data. The dashed line is the density histogram we would expect if allgenes were null (not differentially expressed). The dotted line is at theheight of our estimate of the proportion of null p values.

34/41

Page 35: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

The distribution of p values under null hypothesis

Under the null hypothesis, p values are expected to be uniformlydistributed between 0 and 1.

35/41

Page 36: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

The distribution of p values under alternative hypothesis

Under the alternative hypothesis, p values are are skewed toward 0.

36/41

Page 37: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

Estimating FDR

Combined distribution is a mixture of p values from the null andalternative hypotheses.

37/41

Page 38: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

Estimating FDR

For p values greater than say 0.5, we can assume they mostlyrepresent observations from the null hypothesis.

38/41

Page 39: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

Estimating FDR

The proportion of truly null tests

39/41

Page 40: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

Estimating FDR

FDR =red

green + red

40/41

Page 41: STAT599/BIOL599: Genomic Data Science Lecture 8: Genome ...people.stat.sc.edu/hoyen/Stat599/Lectures/Lecture8.pdf · GWAS Study Exploratory investigation of genotype-trait association

- - :

estimating q value in R

q value is the minimum FDR that can be attained when callingthat feature significant.

> library(qvalue)

> qobj<-qvalue(toptable2[,5])

> str(qobj)

List of 8

$ call : language qvalue(p = toptable2[, 5])

$ pi0 : num 1

$ qvalues : num [1:44902] 0.0722 0.571 0.571 0.6809 0.738 ...

$ pvalues : num [1:44902] 1.61e-06 3.70e-05 3.81e-05 6.07e-05 9.68e-05 ...

$ lfdr : num [1:44902] 0.139 0.737 0.737 0.76 0.795 ...

$ pi0.lambda: num [1:19] 1 1 1 1 1.01 ...

$ lambda : num [1:19] 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 ...

$ pi0.smooth: num [1:19] 1 1 1 1 1.01 ...

- attr(*, "class")= chr "qvalue"

> gqvalue<-qobj$qvalues

> gqvalue[1:10]

[1] 0.07223014 0.57099786 0.57099786 0.68086267 0.73799419

[6] 0.73799419 0.73799419 0.78130669 0.78130669 0.78130669

41/41