summaryrefslogtreecommitdiffstats
path: root/package
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@nbd.name>2024-04-04 13:19:49 +0200
committerFelix Fietkau <nbd@nbd.name>2024-04-04 13:38:18 +0200
commit5aab43f93388b1e35d80892e1534584e83802f89 (patch)
treedb420418d3072c25ffde134ba1f10e2336126f35 /package
parent7b9996d107217393bac5b3edf6577b74991e02b4 (diff)
downloadopenwrt-5aab43f93388b1e35d80892e1534584e83802f89.tar.gz
openwrt-5aab43f93388b1e35d80892e1534584e83802f89.tar.bz2
openwrt-5aab43f93388b1e35d80892e1534584e83802f89.zip
hostapd: slightly clean up patches
- move build/ifdef related changes together to the 200 patch range - reduce adding/removing include statements across patches - move patches away from the 99x patch range to simplify maintenance Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'package')
-rw-r--r--package/network/services/hostapd/patches/050-Fix-OpenWrt-13156.patch (renamed from package/network/services/hostapd/patches/991-Fix-OpenWrt-13156.patch)6
-rw-r--r--package/network/services/hostapd/patches/051-nl80211-add-extra-ies-only-if-allowed-by-driver.patch (renamed from package/network/services/hostapd/patches/992-nl80211-add-extra-ies-only-if-allowed-by-driver.patch)2
-rw-r--r--package/network/services/hostapd/patches/200-multicall.patch4
-rw-r--r--package/network/services/hostapd/patches/201-lto-jobserver-support.patch (renamed from package/network/services/hostapd/patches/500-lto-jobserver-support.patch)6
-rw-r--r--package/network/services/hostapd/patches/211-ctrl-make-WNM_AP-functions-dependant-on-CONFIG_AP.patch (renamed from package/network/services/hostapd/patches/990-ctrl-make-WNM_AP-functions-dependant-on-CONFIG_AP.patch)4
-rw-r--r--package/network/services/hostapd/patches/212-Move-definition-of-WLAN_SUPP_RATES_MAX-to-defs.h.patch (renamed from package/network/services/hostapd/patches/461-Move-definition-of-WLAN_SUPP_RATES_MAX-to-defs.h.patch)20
-rw-r--r--package/network/services/hostapd/patches/213-wpa_supplicant-fix-warnings.patch (renamed from package/network/services/hostapd/patches/599-wpa_supplicant-fix-warnings.patch)0
-rw-r--r--package/network/services/hostapd/patches/220-indicate-features.patch (renamed from package/network/services/hostapd/patches/420-indicate-features.patch)0
-rw-r--r--package/network/services/hostapd/patches/250-hostapd_cli_ifdef.patch (renamed from package/network/services/hostapd/patches/430-hostapd_cli_ifdef.patch)0
-rw-r--r--package/network/services/hostapd/patches/251-wpa_cli_ifdef.patch (renamed from package/network/services/hostapd/patches/431-wpa_cli_ifdef.patch)0
-rw-r--r--package/network/services/hostapd/patches/252-disable_ctrl_iface_mib.patch (renamed from package/network/services/hostapd/patches/380-disable_ctrl_iface_mib.patch)0
-rw-r--r--package/network/services/hostapd/patches/253-qos_map_set_without_interworking.patch (renamed from package/network/services/hostapd/patches/750-qos_map_set_without_interworking.patch)6
-rw-r--r--package/network/services/hostapd/patches/381-hostapd_cli_UNKNOWN-COMMAND.patch2
-rw-r--r--package/network/services/hostapd/patches/460-wpa_supplicant-add-new-config-params-to-be-used-with.patch23
-rw-r--r--package/network/services/hostapd/patches/600-ubus_support.patch6
-rw-r--r--package/network/services/hostapd/patches/601-ucode_support.patch8
-rw-r--r--package/network/services/hostapd/patches/740-snoop_iface.patch2
17 files changed, 25 insertions, 64 deletions
diff --git a/package/network/services/hostapd/patches/991-Fix-OpenWrt-13156.patch b/package/network/services/hostapd/patches/050-Fix-OpenWrt-13156.patch
index 4cd8eaa4d9..a044409d2d 100644
--- a/package/network/services/hostapd/patches/991-Fix-OpenWrt-13156.patch
+++ b/package/network/services/hostapd/patches/050-Fix-OpenWrt-13156.patch
@@ -20,7 +20,7 @@ Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
--- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c
-@@ -3681,6 +3681,8 @@ int hostapd_remove_iface(struct hapd_int
+@@ -3646,6 +3646,8 @@ int hostapd_remove_iface(struct hapd_int
void hostapd_new_assoc_sta(struct hostapd_data *hapd, struct sta_info *sta,
int reassoc)
{
@@ -29,7 +29,7 @@ Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
if (hapd->tkip_countermeasures) {
hostapd_drv_sta_deauth(hapd, sta->addr,
WLAN_REASON_MICHAEL_MIC_FAILURE);
-@@ -3688,10 +3690,16 @@ void hostapd_new_assoc_sta(struct hostap
+@@ -3653,10 +3655,16 @@ void hostapd_new_assoc_sta(struct hostap
}
#ifdef CONFIG_IEEE80211BE
@@ -51,7 +51,7 @@ Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
sta->post_csa_sa_query = 0;
--- a/src/ap/sta_info.c
+++ b/src/ap/sta_info.c
-@@ -1414,9 +1414,6 @@ bool ap_sta_set_authorized_flag(struct h
+@@ -1412,9 +1412,6 @@ bool ap_sta_set_authorized_flag(struct h
mld_assoc_link_id = -2;
}
#endif /* CONFIG_IEEE80211BE */
diff --git a/package/network/services/hostapd/patches/992-nl80211-add-extra-ies-only-if-allowed-by-driver.patch b/package/network/services/hostapd/patches/051-nl80211-add-extra-ies-only-if-allowed-by-driver.patch
index ca17791d84..de4d4ad3c2 100644
--- a/package/network/services/hostapd/patches/992-nl80211-add-extra-ies-only-if-allowed-by-driver.patch
+++ b/package/network/services/hostapd/patches/051-nl80211-add-extra-ies-only-if-allowed-by-driver.patch
@@ -26,7 +26,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
-@@ -2344,6 +2344,9 @@ struct wpa_driver_capa {
+@@ -2340,6 +2340,9 @@ struct wpa_driver_capa {
/** Maximum number of iterations in a single scan plan */
u32 max_sched_scan_plan_iterations;
diff --git a/package/network/services/hostapd/patches/200-multicall.patch b/package/network/services/hostapd/patches/200-multicall.patch
index 65c1e5d838..1a193b51bb 100644
--- a/package/network/services/hostapd/patches/200-multicall.patch
+++ b/package/network/services/hostapd/patches/200-multicall.patch
@@ -116,7 +116,7 @@ This allows building both hostapd and wpa_supplicant as a single binary
struct hapd_interfaces *interfaces = ctx;
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
-@@ -6760,8 +6760,8 @@ union wpa_event_data {
+@@ -6763,8 +6763,8 @@ union wpa_event_data {
* Driver wrapper code should call this function whenever an event is received
* from the driver.
*/
@@ -127,7 +127,7 @@ This allows building both hostapd and wpa_supplicant as a single binary
/**
* wpa_supplicant_event_global - Report a driver event for wpa_supplicant
-@@ -6773,7 +6773,7 @@ void wpa_supplicant_event(void *ctx, enu
+@@ -6776,7 +6776,7 @@ void wpa_supplicant_event(void *ctx, enu
* Same as wpa_supplicant_event(), but we search for the interface in
* wpa_global.
*/
diff --git a/package/network/services/hostapd/patches/500-lto-jobserver-support.patch b/package/network/services/hostapd/patches/201-lto-jobserver-support.patch
index f7f071fb0e..ea0dc29081 100644
--- a/package/network/services/hostapd/patches/500-lto-jobserver-support.patch
+++ b/package/network/services/hostapd/patches/201-lto-jobserver-support.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] hostapd: build with LTO enabled (using jobserver for parallel
--- a/hostapd/Makefile
+++ b/hostapd/Makefile
-@@ -1408,7 +1408,7 @@ hostapd_multi.a: $(BCHECK) $(OBJS)
+@@ -1405,7 +1405,7 @@ hostapd_multi.a: $(BCHECK) $(OBJS)
@$(AR) cr $@ hostapd_multi.o $(OBJS)
hostapd: $(OBJS)
@@ -14,7 +14,7 @@ Subject: [PATCH] hostapd: build with LTO enabled (using jobserver for parallel
@$(E) " LD " $@
ifdef CONFIG_WPA_TRACE
-@@ -1419,7 +1419,7 @@ _OBJS_VAR := OBJS_c
+@@ -1416,7 +1416,7 @@ _OBJS_VAR := OBJS_c
include ../src/objs.mk
hostapd_cli: $(OBJS_c)
@@ -25,7 +25,7 @@ Subject: [PATCH] hostapd: build with LTO enabled (using jobserver for parallel
NOBJS = nt_password_hash.o ../src/crypto/ms_funcs.o $(SHA1OBJS)
--- a/wpa_supplicant/Makefile
+++ b/wpa_supplicant/Makefile
-@@ -2106,31 +2106,31 @@ wpa_supplicant_multi.a: .config $(BCHECK
+@@ -2103,31 +2103,31 @@ wpa_supplicant_multi.a: .config $(BCHECK
@$(AR) cr $@ wpa_supplicant_multi.o $(OBJS)
wpa_supplicant: $(BCHECK) $(OBJS) $(EXTRA_progs)
diff --git a/package/network/services/hostapd/patches/990-ctrl-make-WNM_AP-functions-dependant-on-CONFIG_AP.patch b/package/network/services/hostapd/patches/211-ctrl-make-WNM_AP-functions-dependant-on-CONFIG_AP.patch
index b57550ac8b..84fdea8c78 100644
--- a/package/network/services/hostapd/patches/990-ctrl-make-WNM_AP-functions-dependant-on-CONFIG_AP.patch
+++ b/package/network/services/hostapd/patches/211-ctrl-make-WNM_AP-functions-dependant-on-CONFIG_AP.patch
@@ -13,7 +13,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
--- a/wpa_supplicant/ctrl_iface.c
+++ b/wpa_supplicant/ctrl_iface.c
-@@ -13220,7 +13220,7 @@ char * wpa_supplicant_ctrl_iface_process
+@@ -13214,7 +13214,7 @@ char * wpa_supplicant_ctrl_iface_process
if (wpas_ctrl_iface_coloc_intf_report(wpa_s, buf + 18))
reply_len = -1;
#endif /* CONFIG_WNM */
@@ -22,7 +22,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
} else if (os_strncmp(buf, "DISASSOC_IMMINENT ", 18) == 0) {
if (ap_ctrl_iface_disassoc_imminent(wpa_s, buf + 18))
reply_len = -1;
-@@ -13230,7 +13230,7 @@ char * wpa_supplicant_ctrl_iface_process
+@@ -13224,7 +13224,7 @@ char * wpa_supplicant_ctrl_iface_process
} else if (os_strncmp(buf, "BSS_TM_REQ ", 11) == 0) {
if (ap_ctrl_iface_bss_tm_req(wpa_s, buf + 11))
reply_len = -1;
diff --git a/package/network/services/hostapd/patches/461-Move-definition-of-WLAN_SUPP_RATES_MAX-to-defs.h.patch b/package/network/services/hostapd/patches/212-Move-definition-of-WLAN_SUPP_RATES_MAX-to-defs.h.patch
index daff60a8ad..4c568c924c 100644
--- a/package/network/services/hostapd/patches/461-Move-definition-of-WLAN_SUPP_RATES_MAX-to-defs.h.patch
+++ b/package/network/services/hostapd/patches/212-Move-definition-of-WLAN_SUPP_RATES_MAX-to-defs.h.patch
@@ -54,23 +54,3 @@ Signed-off-by: Eneas U de Queiroz <cotequeiroz@gmail.com>
static inline int wpa_key_mgmt_wpa_ieee8021x(int akm)
{
return !!(akm & (WPA_KEY_MGMT_IEEE8021X |
---- a/src/drivers/driver.h
-+++ b/src/drivers/driver.h
-@@ -19,7 +19,6 @@
-
- #define WPA_SUPPLICANT_DRIVER_VERSION 4
-
--#include "ap/sta_info.h"
- #include "common/defs.h"
- #include "common/ieee802_11_defs.h"
- #include "common/wpa_common.h"
---- a/wpa_supplicant/config_ssid.h
-+++ b/wpa_supplicant/config_ssid.h
-@@ -10,7 +10,6 @@
- #define CONFIG_SSID_H
-
- #include "common/defs.h"
--#include "ap/sta_info.h"
- #include "utils/list.h"
- #include "eap_peer/eap_config.h"
- #include "drivers/nl80211_copy.h"
diff --git a/package/network/services/hostapd/patches/599-wpa_supplicant-fix-warnings.patch b/package/network/services/hostapd/patches/213-wpa_supplicant-fix-warnings.patch
index 4acd7cafe2..4acd7cafe2 100644
--- a/package/network/services/hostapd/patches/599-wpa_supplicant-fix-warnings.patch
+++ b/package/network/services/hostapd/patches/213-wpa_supplicant-fix-warnings.patch
diff --git a/package/network/services/hostapd/patches/420-indicate-features.patch b/package/network/services/hostapd/patches/220-indicate-features.patch
index 006a567c33..006a567c33 100644
--- a/package/network/services/hostapd/patches/420-indicate-features.patch
+++ b/package/network/services/hostapd/patches/220-indicate-features.patch
diff --git a/package/network/services/hostapd/patches/430-hostapd_cli_ifdef.patch b/package/network/services/hostapd/patches/250-hostapd_cli_ifdef.patch
index b6421e9d75..b6421e9d75 100644
--- a/package/network/services/hostapd/patches/430-hostapd_cli_ifdef.patch
+++ b/package/network/services/hostapd/patches/250-hostapd_cli_ifdef.patch
diff --git a/package/network/services/hostapd/patches/431-wpa_cli_ifdef.patch b/package/network/services/hostapd/patches/251-wpa_cli_ifdef.patch
index d7f967d779..d7f967d779 100644
--- a/package/network/services/hostapd/patches/431-wpa_cli_ifdef.patch
+++ b/package/network/services/hostapd/patches/251-wpa_cli_ifdef.patch
diff --git a/package/network/services/hostapd/patches/380-disable_ctrl_iface_mib.patch b/package/network/services/hostapd/patches/252-disable_ctrl_iface_mib.patch
index c65b2b181e..c65b2b181e 100644
--- a/package/network/services/hostapd/patches/380-disable_ctrl_iface_mib.patch
+++ b/package/network/services/hostapd/patches/252-disable_ctrl_iface_mib.patch
diff --git a/package/network/services/hostapd/patches/750-qos_map_set_without_interworking.patch b/package/network/services/hostapd/patches/253-qos_map_set_without_interworking.patch
index 23b8dffb57..4072ff5664 100644
--- a/package/network/services/hostapd/patches/750-qos_map_set_without_interworking.patch
+++ b/package/network/services/hostapd/patches/253-qos_map_set_without_interworking.patch
@@ -24,7 +24,7 @@ This feature is useful on its own even without full interworking support
#ifdef CONFIG_HS20
static int hs20_parse_conn_capab(struct hostapd_bss_config *bss, char *buf,
-@@ -4282,10 +4282,10 @@ static int hostapd_config_fill(struct ho
+@@ -4260,10 +4260,10 @@ static int hostapd_config_fill(struct ho
bss->gas_frag_limit = val;
} else if (os_strcmp(buf, "gas_comeback_delay") == 0) {
bss->gas_comeback_delay = atoi(pos);
@@ -38,7 +38,7 @@ This feature is useful on its own even without full interworking support
os_free(bss->dump_msk_file);
--- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c
-@@ -1578,6 +1578,7 @@ int hostapd_setup_bss(struct hostapd_dat
+@@ -1548,6 +1548,7 @@ static int hostapd_setup_bss(struct host
wpa_printf(MSG_ERROR, "GAS server initialization failed");
return -1;
}
@@ -46,7 +46,7 @@ This feature is useful on its own even without full interworking support
if (conf->qos_map_set_len &&
hostapd_drv_set_qos_map(hapd, conf->qos_map_set,
-@@ -1585,7 +1586,6 @@ int hostapd_setup_bss(struct hostapd_dat
+@@ -1555,7 +1556,6 @@ static int hostapd_setup_bss(struct host
wpa_printf(MSG_ERROR, "Failed to initialize QoS Map");
return -1;
}
diff --git a/package/network/services/hostapd/patches/381-hostapd_cli_UNKNOWN-COMMAND.patch b/package/network/services/hostapd/patches/381-hostapd_cli_UNKNOWN-COMMAND.patch
index b7d2e2b659..e68edacb44 100644
--- a/package/network/services/hostapd/patches/381-hostapd_cli_UNKNOWN-COMMAND.patch
+++ b/package/network/services/hostapd/patches/381-hostapd_cli_UNKNOWN-COMMAND.patch
@@ -11,7 +11,7 @@ if CONFIG_CTRL_IFACE_MIB is not defined.
--- a/hostapd/hostapd_cli.c
+++ b/hostapd/hostapd_cli.c
-@@ -757,7 +757,7 @@ static int wpa_ctrl_command_sta(struct w
+@@ -753,7 +753,7 @@ static int wpa_ctrl_command_sta(struct w
}
buf[len] = '\0';
diff --git a/package/network/services/hostapd/patches/460-wpa_supplicant-add-new-config-params-to-be-used-with.patch b/package/network/services/hostapd/patches/460-wpa_supplicant-add-new-config-params-to-be-used-with.patch
index db561b8c20..ac1c9280b7 100644
--- a/package/network/services/hostapd/patches/460-wpa_supplicant-add-new-config-params-to-be-used-with.patch
+++ b/package/network/services/hostapd/patches/460-wpa_supplicant-add-new-config-params-to-be-used-with.patch
@@ -14,15 +14,7 @@ Signed-hostap: Antonio Quartulli <ordex@autistici.org>
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
-@@ -19,6 +19,7 @@
-
- #define WPA_SUPPLICANT_DRIVER_VERSION 4
-
-+#include "ap/sta_info.h"
- #include "common/defs.h"
- #include "common/ieee802_11_defs.h"
- #include "common/wpa_common.h"
-@@ -971,6 +972,9 @@ struct wpa_driver_associate_params {
+@@ -971,6 +971,9 @@ struct wpa_driver_associate_params {
* responsible for selecting with which BSS to associate. */
const u8 *bssid;
@@ -151,18 +143,7 @@ Signed-hostap: Antonio Quartulli <ordex@autistici.org>
{ INT_RANGE(macsec_integ_only, 0, 1) },
--- a/wpa_supplicant/config_ssid.h
+++ b/wpa_supplicant/config_ssid.h
-@@ -10,8 +10,10 @@
- #define CONFIG_SSID_H
-
- #include "common/defs.h"
-+#include "ap/sta_info.h"
- #include "utils/list.h"
- #include "eap_peer/eap_config.h"
-+#include "drivers/nl80211_copy.h"
-
-
- #define DEFAULT_EAP_WORKAROUND ((unsigned int) -1)
-@@ -879,6 +881,9 @@ struct wpa_ssid {
+@@ -879,6 +879,9 @@ struct wpa_ssid {
*/
void *parent_cred;
diff --git a/package/network/services/hostapd/patches/600-ubus_support.patch b/package/network/services/hostapd/patches/600-ubus_support.patch
index a6b03ffd3f..0457f37f74 100644
--- a/package/network/services/hostapd/patches/600-ubus_support.patch
+++ b/package/network/services/hostapd/patches/600-ubus_support.patch
@@ -314,7 +314,7 @@ probe/assoc/auth requests via object subscribe.
ap_free_sta(hapd, sta);
break;
}
-@@ -1451,15 +1453,28 @@ void ap_sta_set_authorized_event(struct
+@@ -1448,15 +1450,28 @@ void ap_sta_set_authorized_event(struct
os_snprintf(buf, sizeof(buf), MACSTR, MAC2STR(sta->addr));
if (authorized) {
@@ -343,7 +343,7 @@ probe/assoc/auth requests via object subscribe.
#ifdef CONFIG_P2P
if (wpa_auth_get_ip_addr(sta->wpa_sm, ip_addr_buf) == 0) {
os_snprintf(ip_addr, sizeof(ip_addr),
-@@ -1470,6 +1485,13 @@ void ap_sta_set_authorized_event(struct
+@@ -1467,6 +1482,13 @@ void ap_sta_set_authorized_event(struct
}
#endif /* CONFIG_P2P */
@@ -357,7 +357,7 @@ probe/assoc/auth requests via object subscribe.
keyid = ap_sta_wpa_get_keyid(hapd, sta);
if (keyid) {
os_snprintf(keyid_buf, sizeof(keyid_buf),
-@@ -1488,17 +1510,19 @@ void ap_sta_set_authorized_event(struct
+@@ -1485,17 +1507,19 @@ void ap_sta_set_authorized_event(struct
dpp_pkhash, SHA256_MAC_LEN);
}
diff --git a/package/network/services/hostapd/patches/601-ucode_support.patch b/package/network/services/hostapd/patches/601-ucode_support.patch
index bc50606038..b826363248 100644
--- a/package/network/services/hostapd/patches/601-ucode_support.patch
+++ b/package/network/services/hostapd/patches/601-ucode_support.patch
@@ -206,7 +206,7 @@ as adding/removing interfaces.
void hostapd_interface_deinit_free(struct hostapd_iface *iface);
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
-@@ -3853,6 +3853,25 @@ struct wpa_driver_ops {
+@@ -3856,6 +3856,25 @@ struct wpa_driver_ops {
const char *ifname);
/**
@@ -232,7 +232,7 @@ as adding/removing interfaces.
* set_sta_vlan - Bind a station into a specific interface (AP only)
* @priv: Private driver interface data
* @ifname: Interface (main or virtual BSS or VLAN)
-@@ -6507,6 +6526,7 @@ union wpa_event_data {
+@@ -6510,6 +6529,7 @@ union wpa_event_data {
/**
* struct ch_switch
@@ -240,7 +240,7 @@ as adding/removing interfaces.
* @freq: Frequency of new channel in MHz
* @ht_enabled: Whether this is an HT channel
* @ch_offset: Secondary channel offset
-@@ -6517,6 +6537,7 @@ union wpa_event_data {
+@@ -6520,6 +6540,7 @@ union wpa_event_data {
* @punct_bitmap: Puncturing bitmap
*/
struct ch_switch {
@@ -596,7 +596,7 @@ as adding/removing interfaces.
CFLAGS += -DEAP_SERVER -DEAP_SERVER_IDENTITY
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
-@@ -5955,6 +5955,7 @@ void supplicant_event(void *ctx, enum wp
+@@ -5949,6 +5949,7 @@ void supplicant_event(void *ctx, enum wp
event_to_string(event), event);
#endif /* CONFIG_NO_STDOUT_DEBUG */
diff --git a/package/network/services/hostapd/patches/740-snoop_iface.patch b/package/network/services/hostapd/patches/740-snoop_iface.patch
index 5611096ad8..f4b3ac33b1 100644
--- a/package/network/services/hostapd/patches/740-snoop_iface.patch
+++ b/package/network/services/hostapd/patches/740-snoop_iface.patch
@@ -112,7 +112,7 @@ untagged DHCP packets
hapd->x_snoop_initialized = false;
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
-@@ -4275,7 +4275,7 @@ struct wpa_driver_ops {
+@@ -4278,7 +4278,7 @@ struct wpa_driver_ops {
* Returns: 0 on success, negative (<0) on failure
*/
int (*br_set_net_param)(void *priv, enum drv_br_net_param param,