add file
This commit is contained in:
commit
6d87e2bac5
9
Android.bp
Normal file
9
Android.bp
Normal file
@ -0,0 +1,9 @@
|
||||
//
|
||||
// Copyright (C) 2025 The Android Open Source Project
|
||||
// Copyright (C) 2025 SebaUbuntu's TWRP device tree generator
|
||||
//
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
soong_namespace {
|
||||
}
|
12
Android.mk
Normal file
12
Android.mk
Normal file
@ -0,0 +1,12 @@
|
||||
#
|
||||
# Copyright (C) 2025 The Android Open Source Project
|
||||
# Copyright (C) 2025 SebaUbuntu's TWRP device tree generator
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
|
||||
ifeq ($(TARGET_DEVICE),ossi)
|
||||
include $(call all-subdir-makefiles,$(LOCAL_PATH))
|
||||
endif
|
14
AndroidProducts.mk
Normal file
14
AndroidProducts.mk
Normal file
@ -0,0 +1,14 @@
|
||||
#
|
||||
# Copyright (C) 2025 The Android Open Source Project
|
||||
# Copyright (C) 2025 SebaUbuntu's TWRP device tree generator
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
PRODUCT_MAKEFILES := \
|
||||
$(LOCAL_DIR)/omni_ossi.mk
|
||||
|
||||
COMMON_LUNCH_CHOICES := \
|
||||
omni_ossi-user \
|
||||
omni_ossi-userdebug \
|
||||
omni_ossi-eng
|
113
BoardConfig.mk
Normal file
113
BoardConfig.mk
Normal file
@ -0,0 +1,113 @@
|
||||
#
|
||||
# Copyright (C) 2025 The Android Open Source Project
|
||||
# Copyright (C) 2025 SebaUbuntu's TWRP device tree generator
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
DEVICE_PATH := device/oplus/ossi
|
||||
|
||||
# For building with minimal manifest
|
||||
ALLOW_MISSING_DEPENDENCIES := true
|
||||
|
||||
# A/B
|
||||
AB_OTA_UPDATER := true
|
||||
AB_OTA_PARTITIONS += \
|
||||
vendor \
|
||||
system \
|
||||
odm \
|
||||
vbmeta_system \
|
||||
product \
|
||||
vbmeta_vendor
|
||||
BOARD_USES_RECOVERY_AS_BOOT := true
|
||||
|
||||
# Architecture
|
||||
TARGET_ARCH := arm64
|
||||
TARGET_ARCH_VARIANT := armv8-a
|
||||
TARGET_CPU_ABI := arm64-v8a
|
||||
TARGET_CPU_ABI2 :=
|
||||
TARGET_CPU_VARIANT := generic
|
||||
TARGET_CPU_VARIANT_RUNTIME := cortex-a55
|
||||
|
||||
TARGET_2ND_ARCH := arm
|
||||
TARGET_2ND_ARCH_VARIANT := armv7-a-neon
|
||||
TARGET_2ND_CPU_ABI := armeabi-v7a
|
||||
TARGET_2ND_CPU_ABI2 := armeabi
|
||||
TARGET_2ND_CPU_VARIANT := generic
|
||||
TARGET_2ND_CPU_VARIANT_RUNTIME := cortex-a55
|
||||
|
||||
# APEX
|
||||
DEXPREOPT_GENERATE_APEX_IMAGE := true
|
||||
|
||||
# Bootloader
|
||||
TARGET_BOOTLOADER_BOARD_NAME := mgvi_64_64only_armv82
|
||||
TARGET_NO_BOOTLOADER := true
|
||||
|
||||
# Display
|
||||
TARGET_SCREEN_DENSITY := 480
|
||||
|
||||
# Kernel
|
||||
BOARD_BOOTIMG_HEADER_VERSION := 4
|
||||
BOARD_KERNEL_BASE := 0x7fff8000
|
||||
BOARD_KERNEL_CMDLINE := bootopt=64S3,32N2,64N2 buildvariant=user
|
||||
BOARD_KERNEL_PAGESIZE := 4096
|
||||
BOARD_RAMDISK_OFFSET := 0x26f08000
|
||||
BOARD_KERNEL_TAGS_OFFSET := 0x07c88000
|
||||
BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
|
||||
BOARD_MKBOOTIMG_ARGS += --ramdisk_offset $(BOARD_RAMDISK_OFFSET)
|
||||
BOARD_MKBOOTIMG_ARGS += --tags_offset $(BOARD_KERNEL_TAGS_OFFSET)
|
||||
BOARD_KERNEL_IMAGE_NAME := Image
|
||||
BOARD_INCLUDE_DTB_IN_BOOTIMG := true
|
||||
TARGET_KERNEL_CONFIG := ossi_defconfig
|
||||
TARGET_KERNEL_SOURCE := kernel/oplus/ossi
|
||||
|
||||
# Kernel - prebuilt
|
||||
TARGET_FORCE_PREBUILT_KERNEL := true
|
||||
ifeq ($(TARGET_FORCE_PREBUILT_KERNEL),true)
|
||||
TARGET_PREBUILT_KERNEL := $(DEVICE_PATH)/prebuilt/kernel
|
||||
TARGET_PREBUILT_DTB := $(DEVICE_PATH)/prebuilt/dtb.img
|
||||
BOARD_MKBOOTIMG_ARGS += --dtb $(TARGET_PREBUILT_DTB)
|
||||
BOARD_INCLUDE_DTB_IN_BOOTIMG :=
|
||||
endif
|
||||
|
||||
# Partitions
|
||||
BOARD_FLASH_BLOCK_SIZE := 262144 # (BOARD_KERNEL_PAGESIZE * 64)
|
||||
BOARD_BOOTIMAGE_PARTITION_SIZE := 100663296
|
||||
BOARD_RECOVERYIMAGE_PARTITION_SIZE := 100663296
|
||||
BOARD_HAS_LARGE_FILESYSTEM := true
|
||||
BOARD_SYSTEMIMAGE_PARTITION_TYPE := ext4
|
||||
BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE := ext4
|
||||
BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE := ext4
|
||||
TARGET_COPY_OUT_VENDOR := vendor
|
||||
BOARD_SUPER_PARTITION_SIZE := 9126805504 # TODO: Fix hardcoded value
|
||||
BOARD_SUPER_PARTITION_GROUPS := oplus_dynamic_partitions
|
||||
BOARD_OPLUS_DYNAMIC_PARTITIONS_PARTITION_LIST := system system vendor vendor product product odm odm my_product my_product my_engineering my_engineering my_company my_company my_carrier my_carrier my_region my_region my_heytap my_heytap my_stock my_stock my_preload my_preload my_bigball my_bigball my_manifest my_manifest
|
||||
BOARD_OPLUS_DYNAMIC_PARTITIONS_SIZE := 9122611200 # TODO: Fix hardcoded value
|
||||
|
||||
# Platform
|
||||
TARGET_BOARD_PLATFORM := common
|
||||
|
||||
# Recovery
|
||||
TARGET_RECOVERY_PIXEL_FORMAT := BGRA_8888
|
||||
TARGET_USERIMAGES_USE_EXT4 := true
|
||||
TARGET_USERIMAGES_USE_F2FS := true
|
||||
|
||||
# Security patch level
|
||||
VENDOR_SECURITY_PATCH := 2021-08-01
|
||||
|
||||
# Verified Boot
|
||||
BOARD_AVB_ENABLE := true
|
||||
BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS += --flags 3
|
||||
|
||||
# Hack: prevent anti rollback
|
||||
PLATFORM_SECURITY_PATCH := 2099-12-31
|
||||
VENDOR_SECURITY_PATCH := 2099-12-31
|
||||
PLATFORM_VERSION := 16.1.0
|
||||
|
||||
# TWRP Configuration
|
||||
TW_THEME := portrait_hdpi
|
||||
TW_EXTRA_LANGUAGES := true
|
||||
TW_SCREEN_BLANK_ON_BOOT := true
|
||||
TW_INPUT_BLACKLIST := "hbtp_vm"
|
||||
TW_USE_TOOLBOX := true
|
||||
TW_INCLUDE_REPACKTOOLS := true
|
10
README.md
Normal file
10
README.md
Normal file
@ -0,0 +1,10 @@
|
||||
# Android device tree for oplus ossi (ossi)
|
||||
|
||||
```
|
||||
#
|
||||
# Copyright (C) 2025 The Android Open Source Project
|
||||
# Copyright (C) 2025 SebaUbuntu's TWRP device tree generator
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
```
|
35
device.mk
Normal file
35
device.mk
Normal file
@ -0,0 +1,35 @@
|
||||
#
|
||||
# Copyright (C) 2025 The Android Open Source Project
|
||||
# Copyright (C) 2025 SebaUbuntu's TWRP device tree generator
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
LOCAL_PATH := device/oplus/ossi
|
||||
# A/B
|
||||
AB_OTA_POSTINSTALL_CONFIG += \
|
||||
RUN_POSTINSTALL_system=true \
|
||||
POSTINSTALL_PATH_system=system/bin/otapreopt_script \
|
||||
FILESYSTEM_TYPE_system=ext4 \
|
||||
POSTINSTALL_OPTIONAL_system=true
|
||||
|
||||
# Boot control HAL
|
||||
PRODUCT_PACKAGES += \
|
||||
android.hardware.boot@1.0-impl \
|
||||
android.hardware.boot@1.0-service
|
||||
|
||||
PRODUCT_PACKAGES += \
|
||||
bootctrl.common
|
||||
|
||||
PRODUCT_STATIC_BOOT_CONTROL_HAL := \
|
||||
bootctrl.common \
|
||||
libgptutils \
|
||||
libz \
|
||||
libcutils
|
||||
|
||||
PRODUCT_PACKAGES += \
|
||||
otapreopt_script \
|
||||
cppreopts.sh \
|
||||
update_engine \
|
||||
update_verifier \
|
||||
update_engine_sideload
|
61
extract-files.sh
Normal file
61
extract-files.sh
Normal file
@ -0,0 +1,61 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (C) 2016 The CyanogenMod Project
|
||||
# Copyright (C) 2017-2020 The LineageOS Project
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
set -e
|
||||
|
||||
DEVICE=ossi
|
||||
VENDOR=oplus
|
||||
|
||||
# Load extract_utils and do some sanity checks
|
||||
MY_DIR="${BASH_SOURCE%/*}"
|
||||
if [[ ! -d "${MY_DIR}" ]]; then MY_DIR="${PWD}"; fi
|
||||
|
||||
ANDROID_ROOT="${MY_DIR}/../../.."
|
||||
|
||||
HELPER="${ANDROID_ROOT}/tools/extract-utils/extract_utils.sh"
|
||||
if [ ! -f "${HELPER}" ]; then
|
||||
echo "Unable to find helper script at ${HELPER}"
|
||||
exit 1
|
||||
fi
|
||||
source "${HELPER}"
|
||||
|
||||
# Default to sanitizing the vendor folder before extraction
|
||||
CLEAN_VENDOR=true
|
||||
|
||||
KANG=
|
||||
SECTION=
|
||||
|
||||
while [ "${#}" -gt 0 ]; do
|
||||
case "${1}" in
|
||||
-n | --no-cleanup )
|
||||
CLEAN_VENDOR=false
|
||||
;;
|
||||
-k | --kang )
|
||||
KANG="--kang"
|
||||
;;
|
||||
-s | --section )
|
||||
SECTION="${2}"; shift
|
||||
CLEAN_VENDOR=false
|
||||
;;
|
||||
* )
|
||||
SRC="${1}"
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if [ -z "${SRC}" ]; then
|
||||
SRC="adb"
|
||||
fi
|
||||
|
||||
# Initialize the helper
|
||||
setup_vendor "${DEVICE}" "${VENDOR}" "${ANDROID_ROOT}" false "${CLEAN_VENDOR}"
|
||||
|
||||
extract "${MY_DIR}/proprietary-files.txt" "${SRC}" "${KANG}" --section "${SECTION}"
|
||||
|
||||
"${MY_DIR}/setup-makefiles.sh"
|
29
omni_ossi.mk
Normal file
29
omni_ossi.mk
Normal file
@ -0,0 +1,29 @@
|
||||
#
|
||||
# Copyright (C) 2025 The Android Open Source Project
|
||||
# Copyright (C) 2025 SebaUbuntu's TWRP device tree generator
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
# Inherit from those products. Most specific first.
|
||||
$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk)
|
||||
$(call inherit-product, $(SRC_TARGET_DIR)/product/full_base_telephony.mk)
|
||||
|
||||
# Inherit some common Omni stuff.
|
||||
$(call inherit-product, vendor/omni/config/common.mk)
|
||||
|
||||
# Inherit from ossi device
|
||||
$(call inherit-product, device/oplus/ossi/device.mk)
|
||||
|
||||
PRODUCT_DEVICE := ossi
|
||||
PRODUCT_NAME := omni_ossi
|
||||
PRODUCT_BRAND := oplus
|
||||
PRODUCT_MODEL := ossi
|
||||
PRODUCT_MANUFACTURER := oplus
|
||||
|
||||
PRODUCT_GMS_CLIENTID_BASE := android-oplus
|
||||
|
||||
PRODUCT_BUILD_PROP_OVERRIDES += \
|
||||
PRIVATE_BUILD_DESC="hal_mgvi_64_64only_armv82-user 15 AP3A.240617.008 1753972703812 release-keys"
|
||||
|
||||
BUILD_FINGERPRINT := oplus/ossi/ossi:15/AP3A.240617.008/1753972703812:user/release-keys
|
BIN
prebuilt/dtb.img
Normal file
BIN
prebuilt/dtb.img
Normal file
Binary file not shown.
84
recovery.fstab
Normal file
84
recovery.fstab
Normal file
@ -0,0 +1,84 @@
|
||||
/system ext4 system flags=display=system;logical;slotselect
|
||||
/system erofs system flags=display=system;logical;slotselect
|
||||
/vendor ext4 vendor flags=display=vendor;logical;slotselect
|
||||
/vendor erofs vendor flags=display=vendor;logical;slotselect
|
||||
/product ext4 product flags=display=product;logical;slotselect
|
||||
/product erofs product flags=display=product;logical;slotselect
|
||||
/odm ext4 odm flags=display=odm;logical;slotselect
|
||||
/odm erofs odm flags=display=odm;logical;slotselect
|
||||
/my_product ext4 my_product flags=display=my_product;logical;slotselect
|
||||
/my_product erofs my_product flags=display=my_product;logical;slotselect
|
||||
/my_engineering ext4 my_engineering flags=display=my_engineering;logical;slotselect
|
||||
/my_engineering erofs my_engineering flags=display=my_engineering;logical;slotselect
|
||||
/my_company ext4 my_company flags=display=my_company;logical;slotselect
|
||||
/my_company erofs my_company flags=display=my_company;logical;slotselect
|
||||
/my_carrier ext4 my_carrier flags=display=my_carrier;logical;slotselect
|
||||
/my_carrier erofs my_carrier flags=display=my_carrier;logical;slotselect
|
||||
/my_region ext4 my_region flags=display=my_region;logical;slotselect
|
||||
/my_region erofs my_region flags=display=my_region;logical;slotselect
|
||||
/my_heytap ext4 my_heytap flags=display=my_heytap;logical;slotselect
|
||||
/my_heytap erofs my_heytap flags=display=my_heytap;logical;slotselect
|
||||
/my_stock ext4 my_stock flags=display=my_stock;logical;slotselect
|
||||
/my_stock erofs my_stock flags=display=my_stock;logical;slotselect
|
||||
/my_preload ext4 my_preload flags=display=my_preload;logical;slotselect
|
||||
/my_preload erofs my_preload flags=display=my_preload;logical;slotselect
|
||||
/my_bigball ext4 my_bigball flags=display=my_bigball;logical;slotselect
|
||||
/my_bigball erofs my_bigball flags=display=my_bigball;logical;slotselect
|
||||
/my_manifest ext4 my_manifest flags=display=my_manifest;logical;slotselect
|
||||
/my_manifest erofs my_manifest flags=display=my_manifest;logical;slotselect
|
||||
/cdt_engineering emmc /dev/block/by-name/cdt_engineering flags=display=cdt_engineering
|
||||
/vbmeta_vendor emmc /dev/block/by-name/vbmeta_vendor flags=display=vbmeta_vendor;slotselect
|
||||
/vbmeta_system emmc /dev/block/by-name/vbmeta_system flags=display=vbmeta_system;slotselect
|
||||
/cache ext4 /dev/block/by-name/oplusreserve2 flags=display=cache
|
||||
/data f2fs /dev/block/by-name/userdata flags=display=data
|
||||
/metadata f2fs /dev/block/by-name/metadata flags=display=metadata
|
||||
/mnt/vendor/protect_f ext4 /dev/block/by-name/protect1 flags=display=protect_f
|
||||
/mnt/vendor/protect_s ext4 /dev/block/by-name/protect2 flags=display=protect_s
|
||||
/mnt/vendor/nvdata ext4 /dev/block/by-name/nvdata flags=display=nvdata
|
||||
/mnt/vendor/nvcfg ext4 /dev/block/by-name/nvcfg flags=display=nvcfg
|
||||
auto auto /devices/platform/externdevice* flags=display=auto
|
||||
auto vfat /devices/platform/11200000.usb3_xhci* flags=display=auto
|
||||
/persistent emmc /dev/block/by-name/frp flags=display=persistent
|
||||
/nvram emmc /dev/block/by-name/nvram flags=display=nvram
|
||||
/proinfo emmc /dev/block/by-name/proinfo flags=display=proinfo
|
||||
/bootloader emmc /dev/block/by-name/lk flags=display=bootloader
|
||||
/bootloader2 emmc /dev/block/by-name/lk2 flags=display=bootloader2
|
||||
/para emmc /dev/block/by-name/para flags=display=para
|
||||
/misc emmc /dev/block/by-name/misc flags=display=misc
|
||||
/boot emmc /dev/block/by-name/boot flags=display=boot
|
||||
/recovery emmc /dev/block/by-name/recovery flags=display=recovery
|
||||
/logo emmc /dev/block/by-name/logo flags=display=logo
|
||||
/expdb emmc /dev/block/by-name/expdb flags=display=expdb
|
||||
/seccfg emmc /dev/block/by-name/seccfg flags=display=seccfg
|
||||
/tee1 emmc /dev/block/by-name/tee1 flags=display=tee1
|
||||
/tee2 emmc /dev/block/by-name/tee2 flags=display=tee2
|
||||
/scp1 emmc /dev/block/by-name/scp1 flags=display=scp1
|
||||
/scp2 emmc /dev/block/by-name/scp2 flags=display=scp2
|
||||
/sspm_1 emmc /dev/block/by-name/sspm_1 flags=display=sspm_1
|
||||
/sspm_2 emmc /dev/block/by-name/sspm_2 flags=display=sspm_2
|
||||
/dpm_1 emmc /dev/block/by-name/dpm_1 flags=display=dpm_1
|
||||
/dpm_2 emmc /dev/block/by-name/dpm_2 flags=display=dpm_2
|
||||
/mcupm_1 emmc /dev/block/by-name/mcupm_1 flags=display=mcupm_1
|
||||
/mcupm_2 emmc /dev/block/by-name/mcupm_2 flags=display=mcupm_2
|
||||
/md1img emmc /dev/block/by-name/md1img flags=display=md1img
|
||||
/md1dsp emmc /dev/block/by-name/md1dsp flags=display=md1dsp
|
||||
/md1arm7 emmc /dev/block/by-name/md1arm7 flags=display=md1arm7
|
||||
/md3img emmc /dev/block/by-name/md3img flags=display=md3img
|
||||
/cam_vpu1 emmc /dev/block/by-name/cam_vpu1 flags=display=cam_vpu1
|
||||
/cam_vpu2 emmc /dev/block/by-name/cam_vpu2 flags=display=cam_vpu2
|
||||
/cam_vpu3 emmc /dev/block/by-name/cam_vpu3 flags=display=cam_vpu3
|
||||
/gz1 emmc /dev/block/by-name/gz1 flags=display=gz1
|
||||
/gz2 emmc /dev/block/by-name/gz2 flags=display=gz2
|
||||
/spmfw emmc /dev/block/by-name/spmfw flags=display=spmfw
|
||||
/audio_dsp emmc /dev/block/by-name/audio_dsp flags=display=audio_dsp
|
||||
/pi_img emmc /dev/block/by-name/pi_img flags=display=pi_img
|
||||
/boot_para emmc /dev/block/by-name/boot_para flags=display=boot_para
|
||||
/odmdtbo emmc /dev/block/by-name/odmdtbo flags=display=odmdtbo
|
||||
/dtbo emmc /dev/block/by-name/dtbo flags=display=dtbo
|
||||
/otp emmc /dev/block/by-name/otp flags=display=otp
|
||||
/custom ext4 /dev/block/by-name/odm flags=display=custom
|
||||
/external_sd vfat /dev/block/mmcblk0p1 flags=display=external_sd
|
||||
/usb_otg vfat /dev/block/sdd1 flags=display=usb_otg
|
||||
/vbmeta emmc /dev/block/by-name/vbmeta flags=display=vbmeta
|
||||
/reserve2 emmc /dev/block/by-name/reserve2 flags=display=reserve2
|
||||
/opporeserve ext4 /dev/block/by-name/oplusreserve2 flags=display=opporeserve
|
36
setup-makefiles.sh
Normal file
36
setup-makefiles.sh
Normal file
@ -0,0 +1,36 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (C) 2016 The CyanogenMod Project
|
||||
# Copyright (C) 2017-2020 The LineageOS Project
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
set -e
|
||||
|
||||
DEVICE=ossi
|
||||
VENDOR=oplus
|
||||
|
||||
# Load extract_utils and do some sanity checks
|
||||
MY_DIR="${BASH_SOURCE%/*}"
|
||||
if [[ ! -d "${MY_DIR}" ]]; then MY_DIR="${PWD}"; fi
|
||||
|
||||
ANDROID_ROOT="${MY_DIR}/../../.."
|
||||
|
||||
HELPER="${ANDROID_ROOT}/tools/extract-utils/extract_utils.sh"
|
||||
if [ ! -f "${HELPER}" ]; then
|
||||
echo "Unable to find helper script at ${HELPER}"
|
||||
exit 1
|
||||
fi
|
||||
source "${HELPER}"
|
||||
|
||||
# Initialize the helper
|
||||
setup_vendor "${DEVICE}" "${VENDOR}" "${ANDROID_ROOT}"
|
||||
|
||||
# Warning headers and guards
|
||||
write_headers
|
||||
|
||||
write_makefiles "${MY_DIR}/proprietary-files.txt" true
|
||||
|
||||
# Finish
|
||||
write_footers
|
10
vendorsetup.sh
Normal file
10
vendorsetup.sh
Normal file
@ -0,0 +1,10 @@
|
||||
#
|
||||
# Copyright (C) 2025 The Android Open Source Project
|
||||
# Copyright (C) 2025 SebaUbuntu's TWRP device tree generator
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
add_lunch_combo omni_ossi-user
|
||||
add_lunch_combo omni_ossi-userdebug
|
||||
add_lunch_combo omni_ossi-eng
|
Loading…
Reference in New Issue
Block a user