| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
【PR】: [feat] 添加图级别的sched信息,并新增对应的python/序列化/dump接口. Co-authored-by: xingzhixiong<xingzhixiong@huawei.com> # message auto-generated for no-merge-commit merge: !1790 merge develop_transpose_one_set_axis into develop 【PR】: [feat] 添加图级别的sched信息,并新增对应的python/序列化/dump接口. Created-by: xingzhixiong Commit-by: xingzhixiong Merged-by: cann-robot Description: # Pull Request ## 描述 给ascgraph新增图级schedInfo,同时提供对外的getter/setter接口,为后续将node级schedInfo收编成图级schedInfo做铺垫。 当前新增图级接口之后,在schedule的入口处先将图级的schedInfo下发给node级schedInfo,保持内部逻辑先不动,等后续node级schedInfo全部收编完成后再一把切换。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [x] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. inductor+af流程,前端保持老流程不动,所有inductor+af用例和网络均不受影响,验证兼容性 2. inductor+af流程,前端将设置node级sched.axis接口改为直接设置图级sched.axis接口,所有inductor+af用例和网络仍不受影响,验证新接口无问题 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!1790 | 4 天前 | |
【PR】: [feat] 修改同名头文件ge_error_codes.h/ascend_string.h/tensor.h. Co-authored-by: xingzhixiong<xingzhixiong@huawei.com> # message auto-generated for no-merge-commit merge: !1878 merge develop_fix_headers into develop 【PR】: [feat] 修改同名头文件ge_error_codes.h/ascend_string.h/tensor.h. Created-by: xingzhixiong Commit-by: xingzhixiong Merged-by: cann-robot Description: # Pull Request ## 描述 修改ge_error_codes.h/ascend_string.h/tensor.h三个和metadef仓同名的头文件,加上'_af'的后缀。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [x] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. 代码重构,ci流水线与RDVpass即可 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!1878 | 8 天前 | |
fix: handle ScalarData inputs in CV fusion Co-authored-by: ling-DT<lingxing@huawei.com> # message auto-generated for no-merge-commit merge: !1954 merge fix/scalardata-input-handling-0806 into develop fix: handle ScalarData inputs in CV fusion Created-by: ling-DT Commit-by: ling-DT Merged-by: cann-robot Description: # Pull Request ## 描述 修复 CV Fusion 生成代码将 ScalarData 误当作 GM Tensor 输入的问题。跳过常量输入的 Global Buffer 绑定,并按输入类型分别初始化 GM 地址和标量参数,避免生成 float{nullptr} 以及对标量调用 SetGlobalBuffer。 ## 变更类型 - [x] Bug 修复 - [ ] 新功能 - [ ] 代码风格更新(格式化,局部变量) - [ ] 重构(既不修复错误也不增加功能的代码变动) - [ ] 构建过程或辅助工具的变动 - [ ] 文档内容更新 ## 关联的Issue - Fixes #298 ## 如何测试 1. 基于 20061b3a1c32 编译 aihac_codegen 和 pyautofuse。 2. 更新 CANN AutoFusion 运行库,开启 MM Fusion 执行 tc_af_inductor_netexit_rmsnorm_lm_head_logit_softcap。 3. 编译输出与参考输出均为 torch.Size([4, 256, 4096])、torch.bfloat16,数值校验通过。 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 源分支基于本地 develop 分支,目标分支为 cann/graph-autofusion:develop。 See merge request: cann/graph-autofusion!1954 | 2 天前 | |
【PR】: autofuse支持extendconv2d Co-authored-by: linchujia525<1165980433@qq.com> # message auto-generated for no-merge-commit merge: !1669 merge develop into develop 【PR】: autofuse支持extendconv2d Created-by: weixin_45675704 Commit-by: linchujia525 Merged-by: cann-robot Description: # Pull Request ## 描述 autofuse原有支持Conv2DV2的自动融合,现新增对ExtendConv2D自动融合的支持。 主要变更: - ASCIR 算子:在 v1/v2 注册 ExtendConv2D / ExtendConv2DBias / ExtendConv2DScale / ExtendConv2DBiasScale,补充 round_mode、enable_relu0、fixed_shift_value 等 IR 属性;GE bridge 识别这些类型。 - 属性与构图工具:ParseConv2DAttr / IsConv2DGraphType 覆盖 extend 及可选 bias、offset_w、scale0;GetCubeAttributes 向外导出 is_extend_conv2d、has_scale0、round_mode 等字段。 - Codegen / Kernel:conv2d_v2 对齐 ActConvConfig 模板维(含 BatchOne、SmallKernel),增加 scaleGM 槽位;Cube tiling 与 CV fusion 向量侧支持 extend 场景(含 tmpTilingData.nL0)。顺带拆分 cube tiling 超大函数,满足规范。 - Host 编译:ConvArgsConfig 区分 Conv2DV2 紧凑入参和 ExtendConv2D 的 10 槽逻辑输入(未连接的 bias/scale 填空)。 - TilingKey:更新 conv2d_v2_tilingkey_cv.h,与新模板维一致。 - 测试:补充 UT/ST,覆盖属性解析、codegen tiling、Python cube attributes、compile 入参槽位和 backend e2e 构图。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. 2. ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!1669 | 4 天前 | |
【PR】: autofuse支持extendconv2d Co-authored-by: linchujia525<1165980433@qq.com> # message auto-generated for no-merge-commit merge: !1669 merge develop into develop 【PR】: autofuse支持extendconv2d Created-by: weixin_45675704 Commit-by: linchujia525 Merged-by: cann-robot Description: # Pull Request ## 描述 autofuse原有支持Conv2DV2的自动融合,现新增对ExtendConv2D自动融合的支持。 主要变更: - ASCIR 算子:在 v1/v2 注册 ExtendConv2D / ExtendConv2DBias / ExtendConv2DScale / ExtendConv2DBiasScale,补充 round_mode、enable_relu0、fixed_shift_value 等 IR 属性;GE bridge 识别这些类型。 - 属性与构图工具:ParseConv2DAttr / IsConv2DGraphType 覆盖 extend 及可选 bias、offset_w、scale0;GetCubeAttributes 向外导出 is_extend_conv2d、has_scale0、round_mode 等字段。 - Codegen / Kernel:conv2d_v2 对齐 ActConvConfig 模板维(含 BatchOne、SmallKernel),增加 scaleGM 槽位;Cube tiling 与 CV fusion 向量侧支持 extend 场景(含 tmpTilingData.nL0)。顺带拆分 cube tiling 超大函数,满足规范。 - Host 编译:ConvArgsConfig 区分 Conv2DV2 紧凑入参和 ExtendConv2D 的 10 槽逻辑输入(未连接的 bias/scale 填空)。 - TilingKey:更新 conv2d_v2_tilingkey_cv.h,与新模板维一致。 - 测试:补充 UT/ST,覆盖属性解析、codegen tiling、Python cube attributes、compile 入参槽位和 backend e2e 构图。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. 2. ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!1669 | 4 天前 | |
feat: 新增Autofuse Ascend950真实设备验证机制 Co-authored-by: Jett_Woo<wujinteng1@huawei.com> # message auto-generated for no-merge-commit merge: !1768 merge feat/autofuse-device-validation-pr into develop feat: 新增Autofuse Ascend950真实设备验证机制 Created-by: Jett_Woo Commit-by: Jett_Woo Merged-by: cann-robot Description: ## 描述 新增 Autofuse 可扩展真实设备验证机制,首期支持 Ascend950(Ascend950PR_9579)与 Ascend910_9362,并迁移 isinf_maskedfill_fusion 用例。复用现有 backend_e2e_v2 simulator 作为模拟器验证路径,新增独立 AscendCL real-device runner,支持 per-case SoC/backend 支持矩阵、精度校验、性能统计和结构化报告。设计文档见关联 Issue #281。 主要变更: - 新增 Case Contract v1 和 per-case backend + SoC + compile/functional/precision/performance 支持矩阵。 - 新增 AscendCL runtime、TensorBuffer、动态库 ABI wrapper,支持 AutofuseLaunch 与 AutofuseLaunchV2 双 ABI,V2 优先、legacy ABI 严格限制 3 输入 1 输出。 - 新增应用内 ACL Profiling + CANN analysis 离线导出的设备端性能指标 device_kernel_duration(timing_source=msprof),及 host 墙钟、p50_speedup/kernel_reduction 收益对比。 - unfused 多步骤分解(steps + $previous 串接),并支持可选 **aclnn 模式**("aclnn": "<OpName>" 声明,跳过 ASCIR/Autofuser/JIT 直接调用 CANN 原生算子,示例用例提供 --variant unfused_aclnn)。 - 新增 Ascend950 / Ascend910_9362 profile、仓库内置 JIT 适配器、多 shape 用例([128,128]/[128,130]/[127,129]/[512,512])。 - 目录按场景归组(runner/backend/tools/python/cases/profiles),中英 README 含参数速查、用例开发教程与 aclnn 调用方式说明。 - 保持现有 backend_e2e_v2 simulator、SuperKernel、生产 package 和 pyautofuse 对外接口不变。 ## 变更类型 - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [x] 📦 构建过程或辅助工具的变动 - [x] 📝 文档内容更新 ## 关联的Issue - 设计文档:Autofuse 真实设备验证机制(Device Validation):#281 ## 如何测试 1. Host validation:PYTHONPATH=autofuse/tests/st:$PYTHONPATH python3 -m pytest autofuse/tests/st/device_validation -q,175 passed。 2. C++ validation:cmake --build build --target device_validation_ut device_validation_runner -j 8;device_validation_ut,136 passed。 3. Ascend950 real device:npu-smi 状态 OK;fused/unfused(ASCIR 与 aclnn 双模式)functional/precision 通过,mismatch_count=0。 4. Ascend950 performance:msprof device_kernel_duration fused p50≈7.2us、unfused(aclnn) p50≈4.2us(128x128)/ 100us vs 5.7us(512x512);kernel_reduction 3→1。 5. ruff、pre-commit、clang-format --dry-run --Werror 和 git diff --check 通过。 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 - 真实设备验证使用 Ascend950PR/Ascend910_9362,多 shape 完成真实 ACL launch、D2H 与独立 reference 精度校验。 - 开发阶段可用 .dev_env + 构建 pyautofuse 实现"本仓库最新 autofuse 源码自验证"(README §2)。 See merge request: cann/graph-autofusion!1768 | 12 天前 | |
【PR】: [feat] 添加图级别的sched信息,并新增对应的python/序列化/dump接口. Co-authored-by: xingzhixiong<xingzhixiong@huawei.com> # message auto-generated for no-merge-commit merge: !1790 merge develop_transpose_one_set_axis into develop 【PR】: [feat] 添加图级别的sched信息,并新增对应的python/序列化/dump接口. Created-by: xingzhixiong Commit-by: xingzhixiong Merged-by: cann-robot Description: # Pull Request ## 描述 给ascgraph新增图级schedInfo,同时提供对外的getter/setter接口,为后续将node级schedInfo收编成图级schedInfo做铺垫。 当前新增图级接口之后,在schedule的入口处先将图级的schedInfo下发给node级schedInfo,保持内部逻辑先不动,等后续node级schedInfo全部收编完成后再一把切换。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [x] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. inductor+af流程,前端保持老流程不动,所有inductor+af用例和网络均不受影响,验证兼容性 2. inductor+af流程,前端将设置node级sched.axis接口改为直接设置图级sched.axis接口,所有inductor+af用例和网络仍不受影响,验证新接口无问题 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!1790 | 4 天前 | |
【PR】: [feat] 添加图级别的sched信息,并新增对应的python/序列化/dump接口. Co-authored-by: xingzhixiong<xingzhixiong@huawei.com> # message auto-generated for no-merge-commit merge: !1790 merge develop_transpose_one_set_axis into develop 【PR】: [feat] 添加图级别的sched信息,并新增对应的python/序列化/dump接口. Created-by: xingzhixiong Commit-by: xingzhixiong Merged-by: cann-robot Description: # Pull Request ## 描述 给ascgraph新增图级schedInfo,同时提供对外的getter/setter接口,为后续将node级schedInfo收编成图级schedInfo做铺垫。 当前新增图级接口之后,在schedule的入口处先将图级的schedInfo下发给node级schedInfo,保持内部逻辑先不动,等后续node级schedInfo全部收编完成后再一把切换。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [x] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. inductor+af流程,前端保持老流程不动,所有inductor+af用例和网络均不受影响,验证兼容性 2. inductor+af流程,前端将设置node级sched.axis接口改为直接设置图级sched.axis接口,所有inductor+af用例和网络仍不受影响,验证新接口无问题 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/graph-autofusion!1790 | 4 天前 | |
feat: 新增Autofuse Ascend950真实设备验证机制 Co-authored-by: Jett_Woo<wujinteng1@huawei.com> # message auto-generated for no-merge-commit merge: !1768 merge feat/autofuse-device-validation-pr into develop feat: 新增Autofuse Ascend950真实设备验证机制 Created-by: Jett_Woo Commit-by: Jett_Woo Merged-by: cann-robot Description: ## 描述 新增 Autofuse 可扩展真实设备验证机制,首期支持 Ascend950(Ascend950PR_9579)与 Ascend910_9362,并迁移 isinf_maskedfill_fusion 用例。复用现有 backend_e2e_v2 simulator 作为模拟器验证路径,新增独立 AscendCL real-device runner,支持 per-case SoC/backend 支持矩阵、精度校验、性能统计和结构化报告。设计文档见关联 Issue #281。 主要变更: - 新增 Case Contract v1 和 per-case backend + SoC + compile/functional/precision/performance 支持矩阵。 - 新增 AscendCL runtime、TensorBuffer、动态库 ABI wrapper,支持 AutofuseLaunch 与 AutofuseLaunchV2 双 ABI,V2 优先、legacy ABI 严格限制 3 输入 1 输出。 - 新增应用内 ACL Profiling + CANN analysis 离线导出的设备端性能指标 device_kernel_duration(timing_source=msprof),及 host 墙钟、p50_speedup/kernel_reduction 收益对比。 - unfused 多步骤分解(steps + $previous 串接),并支持可选 **aclnn 模式**("aclnn": "<OpName>" 声明,跳过 ASCIR/Autofuser/JIT 直接调用 CANN 原生算子,示例用例提供 --variant unfused_aclnn)。 - 新增 Ascend950 / Ascend910_9362 profile、仓库内置 JIT 适配器、多 shape 用例([128,128]/[128,130]/[127,129]/[512,512])。 - 目录按场景归组(runner/backend/tools/python/cases/profiles),中英 README 含参数速查、用例开发教程与 aclnn 调用方式说明。 - 保持现有 backend_e2e_v2 simulator、SuperKernel、生产 package 和 pyautofuse 对外接口不变。 ## 变更类型 - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [x] 📦 构建过程或辅助工具的变动 - [x] 📝 文档内容更新 ## 关联的Issue - 设计文档:Autofuse 真实设备验证机制(Device Validation):#281 ## 如何测试 1. Host validation:PYTHONPATH=autofuse/tests/st:$PYTHONPATH python3 -m pytest autofuse/tests/st/device_validation -q,175 passed。 2. C++ validation:cmake --build build --target device_validation_ut device_validation_runner -j 8;device_validation_ut,136 passed。 3. Ascend950 real device:npu-smi 状态 OK;fused/unfused(ASCIR 与 aclnn 双模式)functional/precision 通过,mismatch_count=0。 4. Ascend950 performance:msprof device_kernel_duration fused p50≈7.2us、unfused(aclnn) p50≈4.2us(128x128)/ 100us vs 5.7us(512x512);kernel_reduction 3→1。 5. ruff、pre-commit、clang-format --dry-run --Werror 和 git diff --check 通过。 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 - 真实设备验证使用 Ascend950PR/Ascend910_9362,多 shape 完成真实 ACL launch、D2H 与独立 reference 精度校验。 - 开发阶段可用 .dev_env + 构建 pyautofuse 实现"本仓库最新 autofuse 源码自验证"(README §2)。 See merge request: cann/graph-autofusion!1768 | 12 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 4 天前 | ||
| 8 天前 | ||
| 2 天前 | ||
| 4 天前 | ||
| 4 天前 | ||
| 12 天前 | ||
| 4 天前 | ||
| 4 天前 | ||
| 12 天前 |