生物信息学流程: DNA-Seq Analysis

Introduction 介绍

GDC DNA-Seq分析管道识别全外显子组测序(WXS)和全基因组测序(WGS)数据中的体细胞变异。 通过比较正常和肿瘤样品比对中的等位基因频率,注释每个突变,并将来自多个病例的突变聚合到一个项目文件中来鉴定体细胞变体.

首先将内容比对到参考基因组上,接着进行co-cleaning以提高比对质量. 然后通过4种不同的方法分别识别体细胞突变并注释,最后所有pipline识别的突变将聚合进一个MAF文件中.

DNA-Seq 分析主要通过以下6个步骤:

  • Genome Alignment
  • Alignment Co-Cleaning
  • Somatic Variant Calling
  • Variant Annotation
  • Mutation Aggregation
  • Aggregated Mutation Masking

Data Processing Steps 数据处理步骤

Pre-Alignment 比对前处理

在比对之前,提交给GDC的BAM文件被读取、拆分并转换为FASTQ格式。 未通过Illumina chastity测试的reads将被删除。 请注意,此过滤步骤与使用基本质量分数修剪reads不同.

Alignment Workflow 比对流程

DNA-Seq 分析从 比对流程 开始. 取用 BWA 两种算法中的一种将reads组与参考基因组进行比对 [1]. 如果平均读取长度大于或等于70bp,则使用BWA-MEM,否则使用BWA-aln. 每个读取组分别与参考基因组对齐,并使用 Picard Tools SortSam and MergeSamFiles合并每个组分所有的reads. 然后标记可能作为PCR重复的reads以避免下游寻找突变的过程出错.

QUALITY CONTROL 质控

在比对前后收集质控指标并进行检查,以识别低质量数据。使用 FASTQC 对未比对的reads统计GC含量、平均读长及质量分数等基本指标. GDC对比对的reads收集质量指标,包括samtools idxstat 和 flagstatQuality. WGS及WXS的比对信息将通过Picard CollectMultipleMetrics 收集. WGS覆盖度通过picard CollectWgsMetrics 收集,而WXS覆盖度通过 picard CollectHsMetrics收集.

可以使用以下参数通过API访问每个文件端点的质量控制度量 expand=analysis.metadata.read_groups,analysis.metadata.read_groups.read_group_qcs 点击 这里 查看示例.

REFERENCE GENOME 参考基因组

使用人参考基因组GRCh38.d1.vd1 \进行所有比对。 诱饵病毒序列包括在参考基因组中以防止读数错误影响已知存在于人样品中的病毒的读数。 包括十种类型的人类病毒基因组:人巨细胞病毒(CMV),爱泼斯坦 - 巴尔病毒(EBV),乙型肝炎(HBV),丙型肝炎(HCV),人类免疫缺陷病毒(HIV),人类疱疹病毒8(HHV-8) ),人T淋巴细胞病毒1(HTLV-1),Merkel细胞多瘤病毒(MCV),Simian空泡病毒40(SV40)和人乳头瘤病毒(HPV)。 GDC使用的参考序列可以这里下载.

I/O Entity Format
Input Submitted Unaligned Reads or Submitted Aligned Reads FASTQ or BAM
Output Aligned Reads BAM

DNA-Seq 比对的命令行参数

请注意,由于管道开发和改进正在进行,从GDC门户下载的文件中的版本号可能会有所不同.

STEP 1: 使用BIOBAMBAM将BAMS转换为FASTQS - BIOBAMBAM2 2.0.54

bamtofastq \
collate=1 \
exclude=QCFAIL,SECONDARY,SUPPLEMENTARY \
filename= <input.bam> \
gz=1 \
inputformat=bam
level=5 \
outputdir= <output_path> \
outputperreadgroup=1 \
outputperreadgroupsuffixF=_1.fq.gz \
outputperreadgroupsuffixF2=_2.fq.gz \
outputperreadgroupsuffixO=_o1.fq.gz \
outputperreadgroupsuffixO2=_o2.fq.gz \
outputperreadgroupsuffixS=_s.fq.gz \
tryoq=1 \

STEP 2: BWA 比对 - BWA 0.7.15 - SAMTOOLS 1.3.1

如果平均读取长度大于或等于70bp:

bwa mem \
-t 8 \
-T 0 \
-R <read_group> \
<reference> \
<fastq_1.fq.gz> \
<fastq_2.fq.gz> |
samtools view \
-Shb
-o <output.bam> -

如果平均读取长度小于70bp:

bwa aln -t 8 <reference> <fastq_1.fq.gz> > <sai_1.sai> &&
bwa aln -t 8 <reference> <fastq_2.fq.gz> > <sai_2.sai> &&
bwa sampe -r <read_group> <reference> <sai_1.sai> <sai_2.sai> <fastq_1.fq.gz> <fastq_2.fq.gz> | samtools view -Shb -o <output.bam> -

如果质量分数编码为Illumina 1.3或1.5,请使用带有“-l”标志的BWA aln.

STEP 3: BAM SORT 排序 - PICARD 2.6.0

java -jar picard.jar SortSam \
CREATE_INDEX=true \
INPUT=<input.bam> \
OUTPUT=<output.bam> \
SORT_ORDER=coordinate \
VALIDATION_STRINGENCY=STRICT

STEP 4: BAM MERGE 合并 - PICARD 2.6.0

java -jar picard.jar MergeSamFiles \
ASSUME_SORTED=false \
CREATE_INDEX=true \                 
[INPUT= <input.bam>]  \
MERGE_SEQUENCE_DICTIONARIES=false \
OUTPUT= <output_path> \
SORT_ORDER=coordinate \
USE_THREADING=true \
VALIDATION_STRINGENCY=STRICT

STEP 5: MARK DUPLICATES 标记重复 - PICARD 2.6.0

java -jar picard.jar MarkDuplicates \
CREATE_INDEX=true \
INPUT=<input.bam> \
VALIDATION_STRINGENCY=STRICT

Co-cleaning Workflow

Co-cleaning workflow 进一步提高了比对质量. Co-cleaning 需要以单独的管道进行,因为他需要使用与同一患者相关的多个BAM文件(即肿瘤BAM和正常组织BAM). 这两个步骤都可以通过 GATK 实现.

INDEL 局部重比对

使用 IndelRealigner 进行插入和缺失的局部重新排列. 该步骤可以找到包含跨BAM文件的错误比对区域,这通常由相对于参考基因组的插入 - 缺失(indel)突变引起. indel突变的错位(通常可被错误地评分为替换)降低了下游调用步骤的准确性。.

碱基质量分数重新校准

使用 BaseRecalibrator 执行基本质量得分重新校准(BQSR)步骤. 此步骤基于可检测的和系统的错误调整基本质量分数,还提高了下游变体调用算法的准确性. 请注意,原始质量分数保存在co-cleaned的BAM文件的OQ字段中。 如果需要将BAM文件转换为FASTQ格式,则应使用这些分数.

I/O Entity Format
Input Aligned Reads BAM
Output Harmonized Aligned Reads BAM

DNA-Seq Co-Cleaning 命令行参数

STEP 1: REALIGNTARGETCREATOR 重比对创建

java -jar GenomeAnalysisTK.jar \
-T RealignerTargetCreator \
-R <reference>
-known <known_indels.vcf>
[ -I <input.bam> ]
-o <realign_target.intervals>

STEP 2: INDELREALIGNER 插入重比对

java -jar GenomeAnalysisTK.jar \
-T IndelRealigner \
-R <reference> \
-known <known_indels.vcf> \
-targetIntervals <realign_target.intervals> \
--noOriginalAlignmentTags \
[ -I <input.bam> ] \
-nWayOut <output.map>

STEP 3: BASERECALIBRATOR 碱基重校准; DBSNP V.144

java -jar GenomeAnalysisTK.jar \
-T BaseRecalibrator \
-R <reference> \
-I <input.bam> \
-knownSites <dbsnp.vcf>
-o <bqsr.grp>

STEP 4: PRINTREADS 输出reads

java -jar GenomeAnalysisTK.jar \
-T PrintReads \
-R <reference> \
-I <input.bam> \
--BQSR <bqsr.grp> \
-o <output.bam>

Somatic Variant Calling Workflow 体细胞突变寻找流程

比对和 co-cleaned 后的 BAM 文件通过 Somatic Mutation Calling Workflow 处理 tumor-normal pairs. 使用4个单独管道进行突变查找:

每个管道都会将突变信息记录在VCF格式文件中. 每个可用字段的详细信息,请参阅GDC VCF Format 文档. 此时,在DNA-Seq管道中,所有下游分析都分为四个独立的路径,这些路径对应于它们各自的突变调用管道.

PIPELINE DESCRIPTIONS 管道描述

4个分离的突变寻找管道实现了GDC数据的统一化. 目前没有The一个管道被统一认为是最佳的,所以这是由研究人员负责选择的最适合数据的管道。有关管道的一些细节如下所示.

MuTect2 pipeline 使用“正常组”来识别其他种系突变. 该小组由来自数千名TCGA血液正常基因组个体产生,所述个体以高可信度被评估为无癌症。 该方法允许将更高水平的置信度分配给MuTect2管道调用的体细胞变体.

其他三个管道的基本轮廓可以在这里找到:

INDELS 插入和缺失

MuTect2 和 VarScan 检测出来的插入和缺失会被记录在GDC VCF 文件中.

GERMLINE VARIANTS 种系突变

此时,种系突变被故意排除为协调数据. GDC不建议使用以前检测到并存储在Legacy Archive中的种系突变,因为它们不符合GDC高质量数据标准.

I/O Entity Format
Input Aligned Reads BAM
Output Raw Simple Somatic Mutation VCF

Variant Call 命令行参数

MUSE

MuSEv1.0rc_submission_c039ffa; dbSNP v.144

Step 1: MuSE call

MuSE call \
-f <reference> \
-r <region> \                                   
<tumor.bam> \
<normal.bam> \
-O <intermediate_muse_call.txt>

Step 2: MuSE sump

MuSE sump \
-I <intermediate_muse_call.txt> \                           
-E \                                
-D <dbsnp_known_snp_sites.vcf> \
-O <muse_variants.vcf>  

Note: -E is used for WXS data and -G can be used for WGS data.

MUTECT2

GATK nightly-2016-02-25-gf39d340; dbSNP v.144

java -jar GenomeAnalysisTK.jar \
-T MuTect2 \
-R <reference> \
-L <region> \
-I:tumor <tumor.bam> \
-I:normal <normal.bam> \
--normal_panel <pon.vcf> \                        
--cosmic <cosmic.vcf> \
--dbsnp <dbsnp.vcf> \
--contamination_fraction_to_filter 0.02 \                   
-o <mutect_variants.vcf> \
--output_mode EMIT_VARIANTS_ONLY \
--disable_auto_index_creation_and_locking_when_reading_rods

SOMATICSNIPER

Somatic-sniper v1.0.5.0

bam-somaticsniper \
-q 1 \
-L \
-G \
-Q 15 \
-s 0.01 \
-T 0.85 \
-N 2 \
-r 0.001 \
-n NORMAL \
-t TUMOR \
-F vcf \
-f ref.fa \
<tumor.bam> \
<normal.bam> \
<somaticsniper_variants.vcf>

VARSCAN

Step 1: Mpileup; Samtools 1.1

samtools mpileup \
-f <reference> \
-q 1 \
-B \
<normal.bam> \
<tumor.bam> >
<intermediate_mpileup.pileup>

Step 2: Varscan Somatic; Varscan.v2.3.9

java -jar VarScan.jar somatic \
<intermediate_mpileup.pileup> \
<output_path> \
--mpileup      1 \
--min-coverage 8 \
--min-coverage-normal 8 \
--min-coverage-tumor 6 \
--min-var-freq 0.10 \
--min-freq-for-hom 0.75 \
--normal-purity 1.0 \
--tumor-purity 1.00 \
--p-value 0.99 \
--somatic-p-value 0.05 \
--strand-filter 0 \
--output-vcf

Step 3: Varscan ProcessSomatic; Varscan.v2.3.9

java -jar VarScan.jar processSomatic \
<intermediate_varscan_somatic.vcf> \
--min-tumor-freq 0.10 \
--max-normal-freq 0.05 \
--p-value 0.07

Variant Call 注释流程

Somatic Annotation Workflow 中使用 Variant Effect Predictor (VEP) v84 [6] 和VEP GDC插件对原始VCF文件进行注释.

VEP使用VCF文件中的坐标和等位基因来推断每个变体的生物学背景,包括每个突变的位置,其生物学后果(移码/沉默突变)和受影响的基因。 有关详细信息,请参阅 GDC VCF Format 上的文档。 VCF文件中的突变也与来自外部变异数据库的已知突变匹配, 以下数据库用于VCF注释:

  • GENCODE v.22
  • sift v.5.2.2
  • ESP v.20141103
  • polyphen v.2.2.2
  • dbSNP v.146
  • Ensembl genebuild v.2014-07
  • Ensembl regbuild v.13.0
  • HGMD public v.20154
  • ClinVar v.201601

由于许可限制,COSMIC不用于GDC VEP工作流程中的注释.

除注释外, False Positive Filter 用于标记VarScan和SomaticSniper输出中的低质量变体。 SomaticSniper中SSQ <25的变体也被删除.

I/O Entity Format
Input Simple Somatic Mutation VCF
Output Annotated Somatic Mutation VCF

Tumor-Only Variant Calling Workflow 肿瘤突变寻找流程

Tumor only突变寻找 是对没有正常人作参照的样本进行处理。该方法利用了大多数肿瘤样品中存在的正常细胞污染的特点。这些calling是使用GATK4中包含的MuTect2版本进行的。Tumor-only variant call 文件可以在 GDC Portal 中以关键字 "Workflow Type: GATK4 MuTect2" 找到.

Tumor-Only Variant Call 命令行参数

GATK4 v4.0.4.0

## 1\. Generate OXOG metrics:

java -d64 -XX:+UseSerialGC -Xmx3G -jar /gatk/gatk.jar \
CollectSequencingArtifactMetrics \
-I Tumor_Sample_Alignment.bam \
-O <job_identifier> \
--FILE_EXTENSION .txt \
-R GRCh38.d1.vd1.fa  ## Only chr1-22 + XYM

## 2\. Generate pileup summaries on tumor sample:

java -d64 -XX:+UseSerialGC -Xmx3G -jar /gatk/gatk.jar \
GetPileupSummaries
-I Tumor_Sample_Alignment.bam \
-O <job_identifier>.targeted_sequencing.table \
-V af-only-gnomad-common-biallelic.grch38.main.vcf.gz \ # Germline reference from gnomad
-L intervals.bed \ ## Only chr1-22 + XYM
-R GRCh38.d1.vd1.fa

## 3\. Calculate contamination on tumor sample

java -d64 -XX:+UseSerialGC -Xmx3G -jar /gatk/gatk.jar \
CalculateContamination \
-I <job_identifier>.targeted_sequencing.table \ # From step 2
-O <job_identifier>.targeted_sequencing.contamination.table

## 4\. Find tumor sample name from BAM

java -d64 -XX:+UseSerialGC -Xmx3G -jar /gatk/gatk.jar \
GetSampleName \
-I Tumor_Sample_Alignment.bam \
-O <job_identifier>.targeted_sequencing.sample_name

## 5\. Run MuTect2 using only tumor sample on chromosome level (25 commands with different intervals)

java -Djava.io.tmpdir=/tmp/job_tmp_3 -d64 -jar -Xmx3G -XX:+UseSerialGC \
/bin/gatk-4.0.4.0/gatk-package-4.0.4.0-local.jar \
Mutect2 \
-R GRCh38.d1.vd1.fa \
-L chr4:1-190214555 \ # Specify chromosome
-I Tumor_Sample_Alignment.bam \
-O 3.mt2.vcf \
-tumor <tumor_sample_name> \ # From step 4
--af-of-alleles-not-in-resource 2.5e-06 \
--germline-resource af-only-gnomad.hg38.vcf.gz \ # Germline reference from gnomad
-pon gatk4_mutect2_4136_pon.vcf.gz # New panel of normal created by 4136 TCGA curated normal samples, using GATK4

## After this step, all chromosome level VCFs are merged into one.

## 6\. Sort VCF with Picard

java -d64 -XX:+UseSerialGC -Xmx16G -jar /usr/local/bin/picard.jar \
SortVcf \
SEQUENCE_DICTIONARY=GRCh38.d1.vd1.dict \
OUTPUT=<job_identifier>.targeted_sequencing.mutect2.tumor_only.sorted.vcf.gz \
I=merged_multi_gatk4_mutect2_tumor_only_calling.vcf \ # From step 5
CREATE_INDEX=true

## 7\. Filter variant calls from MuTect
java -d64 -XX:+UseSerialGC -Xmx3G -jar /gatk/gatk.jar \
FilterMutectCalls \
-O <job_identifier>.targeted_sequencing.mutect2.tumor_only.contFiltered.vcf.gz \
-V <job_identifier>.targeted_sequencing.mutect2.tumor_only.sorted.vcf.gz \ # From step 6
--contamination-table <job_identifier>.targeted_sequencing.contamination.table \ # From step 3
-L intervals.bed

## 8\. Filter variants by orientation bias
java -d64 -XX:+UseSerialGC -Xmx3G -jar /gatk/gatk.jar \
FilterByOrientationBias \
-O <job_identifier>.targeted_sequencing.tumor_only.gatk4_mutect2.raw_somatic_mutation.vcf.gz \ # final output
-P <job_identifier>.pre_adapter_detail_metrics.txt \ # From step 1
-V <job_identifier>.targeted_sequencing.mutect2.tumor_only.contFiltered.vcf.gz \ # From step 7
-L intervals.bed \
-R GRCh38.d1.vd1.fa \
-AM G/T \
-AM C/T

Tumor-Only Variant 注释流程

在用MuTect2进行单肿瘤突变calling后,一系列的过滤器将被用以最小化可下载的VCF文件中的种系突变的release。 在所有案例中, GDC根据等位基因频率,映射质量,体细胞/种系概率和拷贝数自定义一组过滤器。在一些案例中,过滤之前会有额外的突变聚类步骤 .

PureCN R-package [7] [8] 用于根据肿瘤纯度,倍性,污染,拷贝数和杂合性缺失通过体细胞/种系状态和克隆性对变体进行分类。 使用该包执行以下内容步骤:

  • Interval Capture : 使用FASTA和BED文件坐标生成间隔文件.
  • GC-Normalization : 计算GC标准化肿瘤/正常覆盖率数据.
  • Normal DB Creation : 用规范化的覆盖文件及 panel-of-normals VCF生成 normal database
  • Somatic Variant Calling : 对先前识别的突变进行分类

请注意,如果没有足够的数据来生成目标捕获工具包特定的正常数据库,则不会执行PureCN。 在极少数情况下,PureCN可能找不到数字解决方案。 如果未执行PureCN或找不到解决方案,则会在VCF标头中指出。使用这些管道注释的VCF文件可在 GDC Portal 键入关键字 "Workflow Type: GATK4 MuTect2 Annotation" 找到.

Somatic Aggregation Workflow 体细胞聚合流程

Somatic Aggregation Workflow从多个VCF文件生成一个MAF文件;有关文件结构的详细信息,请参阅 GDC MAF Format 格式指南. 在此步骤中,为每个项目的每个突变调用管道生成一个MAF文件,并包含此项目中的所有可用案例。

I/O Entity Format
Input Multiple Annotated Somatic Mutation VCF
Output Aggregated Somatic Mutation MAF

Masked Somatic Aggregation Workflow

由于存在种系突变,Somatic Aggregation Workflow生成的MAF文件是受控访问的。通过删除可能包含种系突变信息的列和变体,可以修改开放式MAF文件以进行公开发布。 有关用于删除变体的条件的详细信息,请参阅 GDC MAF Format 格式。

虽然这些标准管道导致开放式MAF文件中的一些真正的阳性体细胞突变过度过滤,但它们会阻止个人可识别的种系突变信息公开。 如果遗漏某些体细胞突变是一个问题,GDC建议研究人员探索受控和开放获取的MAF文件。

I/O Entity Format
Input Aggregated Somatic Mutation Protected MAF
Output Masked Somatic Mutation Somatic MAF

File Access and Availability 文件访问及可用性

来自GDC DNA-Seq分析管道的文件可在BAM,VCF和MAF格式的GDC数据门户中获得。 下面列出了所有可用数据类型及其各自文件格式的说明

Data Type Description File Format
Aligned Reads 已与GRCh38参考基因组比对并co-cleaning的reads。BAM中还包括映射到诱饵序列的未比对序列和reads。 BAM
Raw Simple Somatic Mutation 制表符分隔文件,其中包含与基因组位置相关的基因型信息。这里首先鉴定基因组突变。 VCF
Annotated Somatic Mutation 原始的体细胞突变注释版本。注释包括每个突变的生物学背景。 VCF
Aggregated Somatic Mutation 从多个VCF文件派生的制表符分隔文件。包含项目中所有可用案例的信息。 MAF
Masked Somatic Mutation 已删除敏感或可能错误数据的Aggregated Somatic Mutation MAF文件的修改版本。 MAF

Pipline source :GDC

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容