IMX8M android13移植编译gnutls_handshake() failed: The TLS connection was non-properly terminated.

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

IMX8M android13移植编译gnutls_handshake() failed: The TLS connection was non-properly terminated.

Jump to solution
4,007 Views
ethan_dang1
Contributor III

我在使用IMX8M-nano移植编译android13,但是在拉取源码库的时候总是报错

aosp_platform_bootable_recovery:
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_bootable_recovery/':Failed to connect to github.com port 443: 连接超时
aosp_platform_bootable_recovery: sleeping 4.0 seconds before retrying
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_bootable_recovery/':Failed to connect to github.com port 443: 连接超时

aosp_platform_bootable_recovery:
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_bootable_recovery/':Failed to connect to github.com port 443: 连接超时
error: Cannot fetch aosp_platform_bootable_recovery from https://github.com/nxp-imx-android/aosp_platform_bootable_recovery
Fetching:  2% (28/1138) Last synced: aosp_platform_system_memory_libion
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_system_extras/':gnutls_handshake() failed: Error in the pull function.

aosp_platform_system_extras:
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_system_extras/':gnutls_handshake() failed: Error in the pull function.
aosp_platform_system_extras: sleeping 4.0 seconds before retrying
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_system_extras/':gnutls_handshake() failed: The TLS connection was non-properly terminated.

aosp_platform_system_extras:
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_system_extras/':gnutls_handshake() failed: The TLS connection was non-properly terminated.
error: Cannot fetch aosp_platform_system_extras from https://github.com/nxp-imx-android/aosp_platform_system_extras
Fetching:  2% (32/1138) Last synced: aosp_platform_system_extras
致命错误:无法访问 'https://github.com/nxp-imx-android/android-imx_device_fsl/':Failed to connect to github.com port 443: 连接超时

android-imx_device_fsl:
致命错误:无法访问 'https://github.com/nxp-imx-android/android-imx_device_fsl/':Failed to connect to github.com port 443: 连接超时
android-imx_device_fsl: sleeping 4.0 seconds before retrying
致命错误:无法访问 'https://github.com/nxp-imx-android/android-imx_device_fsl/':Failed to connect to github.com port 443: 连接超时

android-imx_device_fsl:
致命错误:无法访问 'https://github.com/nxp-imx-android/android-imx_device_fsl/':Failed to connect to github.com port 443: 连接超时
error: Cannot fetch android-imx_device_fsl from https://github.com/nxp-imx-android/android-imx_device_fsl
Fetching:  3% (36/1138) Last synced: android-imx_device_fsl
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_system_sepolicy/':Failed to connect to github.com port 443: 连接超时

aosp_platform_system_sepolicy:
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_system_sepolicy/':Failed to connect to github.com port 443: 连接超时
aosp_platform_system_sepolicy: sleeping 4.0 seconds before retrying
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_system_sepolicy/':Failed to connect to github.com port 443: 连接超时

aosp_platform_system_sepolicy:
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_system_sepolicy/':Failed to connect to github.com port 443: 连接超时
error: Cannot fetch aosp_platform_system_sepolicy from https://github.com/nxp-imx-android/aosp_platform_system_sepolicy

致命错误:无法访问 'https://github.com/nxp-imx-android/android-imx_platform_hardware_imx/':gnutls_handshake() failed: The TLS connection was non-properly terminated.

android-imx_platform_hardware_imx:
致命错误:无法访问 'https://github.com/nxp-imx-android/android-imx_platform_hardware_imx/':gnutls_handshake() failed: The TLS connection was non-properly terminated.
android-imx_platform_hardware_imx: sleeping 4.0 seconds before retrying
致命错误:无法访问 'https://github.com/nxp-imx-android/android-imx_platform_hardware_imx/':Failed to connect to github.com port 443: 连接超时

android-imx_platform_hardware_imx:
致命错误:无法访问 'https://github.com/nxp-imx-android/android-imx_platform_hardware_imx/':Failed to connect to github.com port 443: 连接超时
error: Cannot fetch android-imx_platform_hardware_imx from https://github.com/nxp-imx-android/android-imx_platform_hardware_imx
Fetching:  3% (44/1138) Last synced: aosp_platform_external_tinyalsa
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_system_teeui/':gnutls_handshake() failed: The TLS connection was non-properly terminated.

aosp_platform_system_teeui:
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_system_teeui/':gnutls_handshake() failed: The TLS connection was non-properly terminated.
aosp_platform_system_teeui: sleeping 4.0 seconds before retrying
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_system_teeui/':Failed to connect to github.com port 443: 连接超时

aosp_platform_system_teeui:
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_system_teeui/':Failed to connect to github.com port 443: 连接超时
error: Cannot fetch aosp_platform_system_teeui from https://github.com/nxp-imx-android/aosp_platform_system_teeui

致命错误:无法访问 'https://github.com/nxp-imx-android/android-imx_platform_hardware_nxp_libbt/':Failed to connect to github.com port 443: 连接超时

android-imx_platform_hardware_nxp_libbt:
致命错误:无法访问 'https://github.com/nxp-imx-android/android-imx_platform_hardware_nxp_libbt/':Failed to connect to github.com port 443: 连接超时
android-imx_platform_hardware_nxp_libbt: sleeping 4.0 seconds before retrying
致命错误:无法访问 'https://github.com/nxp-imx-android/android-imx_platform_hardware_nxp_libbt/':Failed to connect to github.com port 443: 连接超时

android-imx_platform_hardware_nxp_libbt:
致命错误:无法访问 'https://github.com/nxp-imx-android/android-imx_platform_hardware_nxp_libbt/':Failed to connect to github.com port 443: 连接超时
error: Cannot fetch android-imx_platform_hardware_nxp_libbt from https://github.com/nxp-imx-android/android-imx_platform_hardware_nxp_libbt
Fetching: 48% (548/1138) Last synced: platform/external/tinyalsa_new
致命错误:无法访问 'https://github.com/nxp-imx-android/android-imx_platform_hardware_nxp_wlan/':Failed to connect to github.com port 443: 连接超时

android-imx_platform_hardware_nxp_wlan:
致命错误:无法访问 'https://github.com/nxp-imx-android/android-imx_platform_hardware_nxp_wlan/':Failed to connect to github.com port 443: 连接超时
android-imx_platform_hardware_nxp_wlan: sleeping 4.0 seconds before retrying
致命错误:无法访问 'https://github.com/nxp-imx-android/android-imx_platform_hardware_nxp_wlan/':gnutls_handshake() failed: The TLS connection was non-properly terminated.

android-imx_platform_hardware_nxp_wlan:
致命错误:无法访问 'https://github.com/nxp-imx-android/android-imx_platform_hardware_nxp_wlan/':gnutls_handshake() failed: The TLS connection was non-properly terminated.
error: Cannot fetch android-imx_platform_hardware_nxp_wlan from https://github.com/nxp-imx-android/android-imx_platform_hardware_nxp_wlan
Fetching: 83% (953/1138) Last synced: platform/external/rust/crates/managed
致命错误:无法访问 'https://github.com/nxp-imx/imx-lib/':gnutls_handshake() failed: The TLS connection was non-properly terminated.

imx-lib:
致命错误:无法访问 'https://github.com/nxp-imx/imx-lib/':gnutls_handshake() failed: The TLS connection was non-properly terminated.
imx-lib: sleeping 4.0 seconds before retrying
致命错误:无法访问 'https://github.com/nxp-imx/imx-lib/':Failed to connect to github.com port 443: 连接超时

imx-lib:
致命错误:无法访问 'https://github.com/nxp-imx/imx-lib/':Failed to connect to github.com port 443: 连接超时
error: Cannot fetch imx-lib from https://github.com/nxp-imx/imx-lib
Fetching: 100% (1138/1138), done in 25m21.952s
Fetching:  0% (0/13) warming up
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_bootable_recovery/':gnutls_handshake() failed: The TLS connection was non-properly terminated.

aosp_platform_bootable_recovery:
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_bootable_recovery/':gnutls_handshake() failed: The TLS connection was non-properly terminated.
aosp_platform_bootable_recovery: sleeping 4.0 seconds before retrying
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_bootable_recovery/':gnutls_handshake() failed: The TLS connection was non-properly terminated.

aosp_platform_bootable_recovery:
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_bootable_recovery/':gnutls_handshake() failed: The TLS connection was non-properly terminated.
error: Cannot fetch aosp_platform_bootable_recovery from https://github.com/nxp-imx-android/aosp_platform_bootable_recovery

致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_system_sepolicy/':gnutls_handshake() failed: The TLS connection was non-properly terminated.

aosp_platform_system_sepolicy:
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_system_sepolicy/':gnutls_handshake() failed: The TLS connection was non-properly terminated.
aosp_platform_system_sepolicy: sleeping 4.0 seconds before retrying
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_system_sepolicy/':gnutls_handshake() failed: The TLS connection was non-properly terminated.

aosp_platform_system_sepolicy:
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_system_sepolicy/':gnutls_handshake() failed: The TLS connection was non-properly terminated.
error: Cannot fetch aosp_platform_system_sepolicy from https://github.com/nxp-imx-android/aosp_platform_system_sepolicy

致命错误:无法访问 'https://github.com/nxp-imx/linux-imx/':gnutls_handshake() failed: The TLS connection was non-properly terminated.

linux-imx:
致命错误:无法访问 'https://github.com/nxp-imx/linux-imx/':gnutls_handshake() failed: The TLS connection was non-properly terminated.
linux-imx: sleeping 4.0 seconds before retrying
致命错误:无法访问 'https://github.com/nxp-imx/linux-imx/':Failed to connect to github.com port 443: 连接超时

linux-imx:
致命错误:无法访问 'https://github.com/nxp-imx/linux-imx/':Failed to connect to github.com port 443: 连接超时
error: Cannot fetch linux-imx from https://github.com/nxp-imx/linux-imx
Fetching: 38% (5/13) Last synced: imx-lib
致命错误:无法访问 'https://github.com/nxp-imx-android/android-imx_platform_hardware_nxp_libbt/':gnutls_handshake() failed: The TLS connection was non-properly terminated.

android-imx_platform_hardware_nxp_libbt:
致命错误:无法访问 'https://github.com/nxp-imx-android/android-imx_platform_hardware_nxp_libbt/':gnutls_handshake() failed: The TLS connection was non-properly terminated.
android-imx_platform_hardware_nxp_libbt: sleeping 4.0 seconds before retrying
错误:RPC 失败。curl 35 gnutls_handshake() failed: The TLS connection was non-properly terminated.
致命错误:在引用列表之后应该有一个 flush 包

android-imx_platform_hardware_nxp_libbt:
错误:RPC 失败。curl 35 gnutls_handshake() failed: The TLS connection was non-properly terminated.
致命错误:在引用列表之后应该有一个 flush 包
error: Cannot fetch android-imx_platform_hardware_nxp_libbt from https://github.com/nxp-imx-android/android-imx_platform_hardware_nxp_libbt
Fetching: 69% (9/13) Last synced: aosp_platform_system_extras
致命错误:无法访问 'https://github.com/nxp-imx-android/android-imx_device_fsl/':Failed to connect to github.com port 443: 连接超时

android-imx_device_fsl:
致命错误:无法访问 'https://github.com/nxp-imx-android/android-imx_device_fsl/':Failed to connect to github.com port 443: 连接超时
android-imx_device_fsl: sleeping 4.0 seconds before retrying
致命错误:无法访问 'https://github.com/nxp-imx-android/android-imx_device_fsl/':gnutls_handshake() failed: The TLS connection was non-properly terminated.

android-imx_device_fsl:
致命错误:无法访问 'https://github.com/nxp-imx-android/android-imx_device_fsl/':gnutls_handshake() failed: The TLS connection was non-properly terminated.
error: Cannot fetch android-imx_device_fsl from https://github.com/nxp-imx-android/android-imx_device_fsl
Fetching: 100% (13/13), done in 10m49.309s
Fetching: 20% (1/5) Last synced: linux-imx
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_bootable_recovery/':gnutls_handshake() failed: The TLS connection was non-properly terminated.

aosp_platform_bootable_recovery:
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_bootable_recovery/':gnutls_handshake() failed: The TLS connection was non-properly terminated.
aosp_platform_bootable_recovery: sleeping 4.0 seconds before retrying
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_bootable_recovery/':gnutls_handshake() failed: The TLS connection was non-properly terminated.

aosp_platform_bootable_recovery:
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_bootable_recovery/':gnutls_handshake() failed: The TLS connection was non-properly terminated.
error: Cannot fetch aosp_platform_bootable_recovery from https://github.com/nxp-imx-android/aosp_platform_bootable_recovery
Fetching: 100% (5/5), done in 5m17.811s
Fetching: 100% (1/1), done in 2m9.835s
Checking out: 100% (1137/1137), done in 6m34.491s

error: Unable to fully sync the tree.
error: Downloading network changes failed.
Try re-running with "-j1 --fail-fast" to exit at the first error.
dx@dx:~/android_build/android_build$ repo sync -j1 --fail-fast
致命错误:无法访问 'https://github.com/nxp-imx/imx-manifest/':gnutls_handshake() failed: The TLS connection was non-properly terminated.
manifests: sleeping 4.0 seconds before retrying
Fetching:  0% (3/1137) Last synced: aosp_platform_hardware_interfaces
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_frameworks_base/':gnutls_handshake() failed: The TLS connection was non-properly terminated.

aosp_platform_frameworks_base:
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_frameworks_base/':gnutls_handshake() failed: The TLS connection was non-properly terminated.
aosp_platform_frameworks_base: sleeping 4.0 seconds before retrying
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_frameworks_base/':gnutls_handshake() failed: The TLS connection was non-properly terminated.

aosp_platform_frameworks_base:
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_frameworks_base/':gnutls_handshake() failed: The TLS connection was non-properly terminated.
error: Cannot fetch aosp_platform_frameworks_base from https://github.com/nxp-imx-android/aosp_platform_frameworks_base
Fetching:   0% (4/1137), done in 4m35.465s
Fetching:  6% (73/1134) Last synced: device/mediatek/wembley-sepolicy
错误:RPC 失败。curl 6 Could not resolve host: github.com
致命错误:在引用列表之后应该有一个 flush 包

android-imx_device_fsl:
错误:RPC 失败。curl 6 Could not resolve host: github.com
致命错误:在引用列表之后应该有一个 flush 包
android-imx_device_fsl: sleeping 4.0 seconds before retrying
致命错误:无法访问 'https://github.com/nxp-imx-android/android-imx_device_fsl/':gnutls_handshake() failed: The TLS connection was non-properly terminated.

android-imx_device_fsl:
致命错误:无法访问 'https://github.com/nxp-imx-android/android-imx_device_fsl/':gnutls_handshake() failed: The TLS connection was non-properly terminated.
error: Cannot fetch android-imx_device_fsl from https://github.com/nxp-imx-android/android-imx_device_fsl
Fetching:   6% (74/1134), done in 9m20.306s
Fetching: 59% (629/1061) Last synced: platform/external/wmediumd
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_external_wpa_supplicant_8/':gnutls_handshake() failed: The TLS connection was non-properly terminated.

aosp_platform_external_wpa_supplicant_8:
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_external_wpa_supplicant_8/':gnutls_handshake() failed: The TLS connection was non-properly terminated.
aosp_platform_external_wpa_supplicant_8: sleeping 4.0 seconds before retrying
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_external_wpa_supplicant_8/':gnutls_handshake() failed: The TLS connection was non-properly terminated.

aosp_platform_external_wpa_supplicant_8:
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_external_wpa_supplicant_8/':gnutls_handshake() failed: The TLS connection was non-properly terminated.
error: Cannot fetch aosp_platform_external_wpa_supplicant_8 from https://github.com/nxp-imx-android/aosp_platform_external_wpa_supplicant_8
Fetching:  59% (630/1061), done in 10m49.441s

致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_external_wpa_supplicant_8/':Failed to connect to github.com port 443: 连接超时

aosp_platform_external_wpa_supplicant_8:
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_external_wpa_supplicant_8/':Failed to connect to github.com port 443: 连接超时
aosp_platform_external_wpa_supplicant_8: sleeping 4.0 seconds before retrying
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_external_wpa_supplicant_8/':gnutls_handshake() failed: The TLS connection was non-properly terminated.

aosp_platform_external_wpa_supplicant_8:
致命错误:无法访问 'https://github.com/nxp-imx-android/aosp_platform_external_wpa_supplicant_8/':gnutls_handshake() failed: The TLS connection was non-properly terminated.
error: Cannot fetch aosp_platform_external_wpa_supplicant_8 from https://github.com/nxp-imx-android/aosp_platform_external_wpa_supplicant_8
Fetching:   0% (1/432), done in 4m14.931s

error: Exited sync due to fetch errors.
Local checkouts *not* updated. Resolve network issues & retry.
`repo sync -l` will update some local checkouts.

 

我的配置如下:

user.name=my.name
user.email=my@mail
http.sslverify=false
http.postbuffer=1048576000
color.ui=auto

请问有什么办法解决吗?

0 Kudos
Reply
1 Solution
3,880 Views
ethan_dang1
Contributor III

Hi @Zhiming_Liu 

谢谢回答,这个问题已经解决了,是使用虚拟机内存不够的问题,编译过程最大内存占用达到了接近28G,我把内存增大到28G可以了,现在已经编译烧录完成

View solution in original post

0 Kudos
Reply
9 Replies
4,000 Views
Zhiming_Liu
NXP TechSupport
NXP TechSupport

Hi @ethan_dang1 

网络代理问题,可以参考:

https://zhuanlan.zhihu.com/p/378894743

0 Kudos
Reply
3,992 Views
ethan_dang1
Contributor III

Hi Qmiller

这些无法访问的地址,我在终端中单独使用git clone是可以成功clone下来的,网址也可以用浏览器打开,我这边没有代理,有尝试过重置代理,也是不行的

0 Kudos
Reply
3,986 Views
Zhiming_Liu
NXP TechSupport
NXP TechSupport

我这边重新拉了一下,代码都可以拉下来。应该还是你电脑的网络配置问题。

0 Kudos
Reply
3,981 Views
ethan_dang1
Contributor III

你好,我对“imx-android-13.0.0_1.0.0.xml”做了如下修改,现在拉取成功了

<remote name="imx-android" fetch="https://ghproxy.com/github.com/nxp-imx-android" review="" />
<remote name="imx-linux-sdk" fetch="https://ghproxy.com/github.com/nxp-imx" review="" />
<remote name="imx-proprietary" fetch="https://ghproxy.com/github.com/nxp/" review="" />
<remote name="wireless-regdb" fetch="https://git.kernel.org/pub/scm/linux/kernel/git/sforshee/" review="" />
<remote name="github" fetch="https://ghproxy.com/github.com/" review="" />

但是编译时候还是失败了,我使用的开发板是i.MX 8M Nano Evaluation Kit | NXP Semiconductors ,我把配置及编译的终端日志上传了,能麻烦帮忙判断一下问题吗?谢谢!

0 Kudos
Reply
3,971 Views
ethan_dang1
Contributor III

针对这个错误:cp: 无法获取'vendor/nxp/linux-firmware-imx/firmware/ddr/synopsys/ddr4*' 的文件状态(stat): 没有那个文件或目录

在Android源码目录下/home/dx/android_build/vendor/nxp 只有imx-firmware和vpu_wrapper 2个子目录

我发现在如下路径:/home/dx/imx-android-13.0.0_1.0.0/vendor/nxp/linux-firmware-imx/firmware/ddr/ 存在ddr4*文件,请问是这个目录的路径原因吗?这个路径设置在哪里确认呢?

0 Kudos
Reply
3,967 Views
Zhiming_Liu
NXP TechSupport
NXP TechSupport

你是在官网下载的Android source压缩包吗?

我今天拉的代码是全的

 

~/android_build/vendor/nxp$ ls
fsl-codec        imx-firmware    imx-vpu-hantro-daemon  mcu-sdk-auto
fsl-proprietary  imx-seco        linux-firmware-imx     sentinel
imx_android_mm   imx-vpu-hantro  mcu-sdk                vpu_wrapper

 

看了一下你的log,没有拉全:

'https://github.com/nxp-imx/imx-manifest/'ÿgnutls_handshake() failed: The TLS connection was non-properly terminated.

0 Kudos
Reply
3,948 Views
ethan_dang1
Contributor III

Hi@Qmiller

非常感谢!

这个问题找到了,原因是拉取源码库的脚本imx_android_setup.sh中最后是有将官网代码包里的文件拷贝到从git拉取的拉取的Android下的操作的

 

# Copy all the proprietary packages to the android build folder

cp -r "$REL_PACKAGE_DIR"/vendor/nxp "$android_builddir"/vendor/
cp -r "$REL_PACKAGE_DIR"/EULA.txt "$android_builddir"
cp -r "$REL_PACKAGE_DIR"/SCR* "$android_builddir"

# unset variables

unset android_builddir
unset WORKSPACE
unset REL_PACKAGE_DIR

 

但是因为网络问题,执行不到这边(现在都是失败后,手动把镜像网址改了后再进行repo sync),所以${MY_ANDROID}里面就缺失了这些文件,手动拷贝过去就好了

 

我现在编译出现报错:

 

[100% 1/1] analyzing Android.bp files and generating ninja file at out/soong/build.ninja
FAILED: out/soong/build.ninja

 

我用的VMware Ubuntu18.04.6 内存分配16G

第一次报错后尝试减小-j4为-j2,执行./imx-make.sh -j2 2>&1 | tee build-log.txt

问题依旧

0 Kudos
Reply
3,887 Views
Zhiming_Liu
NXP TechSupport
NXP TechSupport

建议你删掉代码重新拉,确保网络可以访问默认地址,这种编译错误还是代码不全导致的。

Tags (1)
0 Kudos
Reply
3,881 Views
ethan_dang1
Contributor III

Hi @Zhiming_Liu 

谢谢回答,这个问题已经解决了,是使用虚拟机内存不够的问题,编译过程最大内存占用达到了接近28G,我把内存增大到28G可以了,现在已经编译烧录完成

0 Kudos
Reply