Commit Graph

233 Commits

Author SHA1 Message Date
Yu Wang
093c816d05 qcacmn: print SSID with QDF_SSID_FMT and QDF_SSID_REF
To protect user privacy, print SSID with QDF_SSID_FMT
and QDF_SSID_REF, then SSID will be hide in logs if
anonymization is enabled.

Change-Id: Ifad0ccd76bd1184a9b1d20f3d7fa4455df924843
CRs-Fixed: 3291826
2022-10-18 11:57:53 -07:00
Liangwei Dong
7f3b6c9512 qcacmn: Add new enum action OUI type support
Add ACTION_OUI_11BE_OUI_ALLOW enum to support new WMI action
oui type WMI_VENDOR_OUI_ACTION_ALLOW_11BE.
Add scan entry to candidate validation struct.

Change-Id: I502a246584cd5ee6b4759d8fbb67629628314560
CRs-Fixed: 3301859
2022-10-17 12:58:09 -07:00
Aditya Kodukula
d7a692cf9e qcacmn: Add connection state check before clearing mlo vdev
Currently the driver is trying to notify the userspace
upon disconnect on partner link. If initial connection on
partner link fails and a NB disconnect was triggered at the
same time, moving the state machine to disconnecting, the driver
is clearing the mlo vdev flags.

To address this issue, check for the connection state
and clean up the mlo vdev flags after disconnect is complete.

CRs-Fixed: 3309091
Change-Id: I2e52ae225d33f3ff7be06e0a3abe8709f42012ee
2022-10-13 13:31:11 -07:00
Jeff Johnson
6d26ba1f0a qcacmn: umac: mlme: Fix misspellings
Fix misspellings in umac/mlme/...

Change-Id: I3d9a890676ab15e250e283727b23bea6d10320e1
CRs-Fixed: 3304698
2022-10-11 02:30:46 -07:00
Liangwei Dong
4b20a11518 qcacmn: Fix scan entry assoc state update issue
On disconnecting, the bssid may not be filled in cm_req->discon_req.
Zero bssid will fail to update the scan entry to non association
state which may block the scan entry age out.
Move disconnect bssid fill before update the scan entry for
disconnecting.

Change-Id: Id8a36d8a37c212af727c7b61a24b51f2782c4a2c
CRs-Fixed: 3291599
2022-09-30 20:35:05 -07:00
Bing Sun
cb2c6707f6 qcacmn: Add API to update peer channel width and puncture parameter
Add API to send peer param WMI_PEER_CHWIDTH_PUNCTURE_20MHZ_BITMAP

Change-Id: Id05629b12059ff2258e196b3e9aa78f5fb52bda4
CRs-Fixed: 3269745
2022-09-23 20:20:55 -07:00
Abhishek Singh
3ec922f543 qcacmn: Avoid using igtk key index for Mcast WEP key
Use def_tx_keyid for Mcast wep key.
Also reset all the key index in wlan_crypto_free_key once igtk,
bigtk and Ucast/Mcast are freed, so that their values are not
carried to next connection.

Change-Id: I9a1e8715c54f47905889511f983b3127b9b5cfcd
CRs-Fixed: 3297270
2022-09-22 10:41:39 -07:00
Aditya Kodukula
7e71dbe627 qcacmn: Disable 11be functionality when not supported by fw
Disable 11be functionality when not supported by fw

Change-Id: Ifb90893e15c9bc74aac3aab75220a0d5c866dd59
CRs-Fixed: 3291962
2022-09-22 06:09:51 -07:00
Jianmin Zhu
fb43cc12b8 qcacmn: Fix scan with random address failed since wdev is connected
Reproduce steps:
1.	Connect from OSIF success, wdev->connected = true;
2.	Disconnect from target if and reassoc from OSIF happens back to
	back.
3.	Disconnect event is not sent to kernel, wdev->connected keeps
	true, isn't cleared.
4.	Connect from OSIF failed too, wdev->connected keeps true,  isn't
	cleared.
5.	Scan with random address failed since wdev->connected is true.

To fix it, if connect req was a reassoc req and received in not connected
state for race between disconnect from target if and reassoc connect from
OSIF, set reassoc_in_non_connected to send disconnect instead of
connect rsp to kernel to cleanup kernel flags like: wdev->connected.

change-Id: Ibbe38da14e9339b49589216250453b76c7387b57
CRs-Fixed: 3290496
2022-09-22 02:21:43 -07:00
Deeksha Gupta
42039b3f6b qcacmn: Add partner link bssid debug print
Add partner bssid debug print in cm_update_partner_link_scan_db().

Change-Id: Ied3b089d983bb1338b1944c57a9e62144edc34e2
CRs-Fixed: 3278872
2022-09-21 03:40:57 -07:00
Liangwei Dong
b6165bed1f qcacmn: Don't filter channel for link vdev
If get scan filter for link vdev, that means the MLO STA has
more than 1 link, do not filter the link vdev's scan filter
channel list. Link that is causing MCC with legacy STA can
be disabled in post conenction.

Change-Id: I4aafb7168e60bf158904d3b1c4a4c42d4eaeb126
CRs-Fixed: 3285312
2022-09-13 16:46:40 -07:00
Abhishek Singh
d14b4649c7 qcacmn: Fix the misspellings of public, module and posting
Fix the misspellings of public, module and posting in
wlan_cm_sm.h

Change-Id: I5285f189ce7befe8da5bea04bac53ba093540120
CRs-Fixed: 3287669
2022-09-12 10:15:39 -07:00
Srinivas Dasari
be121546e8 qcacmn: Synchronize disconnect in RSO stop req-resp path
Host driver sends RSO stop request to firmware as part of
disconnect and waits for RSO stop response. It pauses the
disconnection and resumes once RSO stop response is received
from the firmware.
But cm_lock is not taken when disconnection is resumed from RSO
stop response path. This causes synchronization issues with
north bound thread which issued the disconnection.
Acquire cm_lock by using cm_sm_deliver_event() API to provide
synchronization between disconnect initiator thread and
scheduler thread.

Change-Id: I3c287a020e0a12abab2ad6237594e022adc904a7
CRs-Fixed: 3287190
2022-09-10 01:31:00 -07:00
Nagalakshmi
2b7b671b37 qcacmn: Give valid range of value for aliasing INI
There are two different name with different range of value for
aliasing INI's. So, it should pick the valid range of value wrt INI
name.

Change-Id: I1b3f8b276a65f2e1659dd4e3ede8512513e3da71
CRs-Fixed: 3268728
2022-09-07 10:13:41 -07:00
Jianmin Zhu
640ab03114 qcacmn: Don't treat assoc req as reassoc req
Add a flag to indicate assoc req is used for this roaming,
don't treat assoc req as reassoc req.

Change-Id: I58f357b5581ca71e97841f1d7e0f3daad5d60970
CRs-Fixed: 3273877
2022-08-27 12:09:14 -07:00
Abhishek Singh
716388fe19 qcacmn: Add vdev info in cm_id to avoid same id across vdevs
In per vdev cm_id, same ids may get used across vdev's,
leading to confusion.

So add vdev id info in cm_id to avoid same cm_id across
vdev's.

How to read new id
Command_type   vdev_id    req_id
   0c            01        0001  = 0x0c010001
=> connect on vdev 1 req_id 1

   0d            00        0002  = 0x0d000002
=> disconnect on vdev 0 req_id 2

Change-Id: If526ea31a3d792a31c44ad607e1878691120dd7c
CRs-Fixed: 3263910
2022-08-12 00:39:57 -07:00
Deeksha Gupta
dd35ee28a5 qcacmn: Reset cm_id before release active command
Currently, Active command id is reset during memory release,
but a new command will become active before memory release
of serialization command, and if it try to check the active
cm_id (using cm_get_active_req_type) it will be valid, which
is incorrect.

Fix is, reset the cm id for active command before calling
release active command.

Change-Id: I6f4844c61349a00af5967f9c757844473244d737
CRs-Fixed: 3263863
2022-08-11 06:55:09 -07:00
Arun Kumar Khandavalli
1630cd3afe qcacmn: Indicate the connect response through new kernel model
Add changes to indicate the connect response for the ml association.

Change-Id: Id59b00992356c9e66a7442e5351bf9372f055f8f
CRs-Fixed: 3241844
2022-08-02 01:15:00 -07:00
Deeksha Gupta
97b9216557 qcacmn: Send all partner BSSes before sending connect result to kernel
Currently, legacy driver sends only one connected BSS entry to
kernel while sending the connect response. But in case of MLO
connection, kernel will not have the BSS entry for the partner
link which may leads to connect response failure.

Fix is, in case of MLO, driver should send all partner BSS
entries to kernel before sending connect result.

Change-Id: Icf2c75f8029c44270c4b51e2ab3fcf861d221747
CRs-Fixed: 3240332
2022-07-31 23:44:16 -07:00
Abhishek Singh
9738cd5a32 qcacmn: Print eht self and AP caps while calculating candidate scores
Print eht self and AP caps while calculating candidate scores.

Change-Id: I67db8781ee11c06ba5ec22608dcddace3f7c406b
CRs-Fixed: 3253959
2022-07-29 02:37:57 -07:00
Liangwei Dong
65f2d8d06f qcacmn: Fix MLO flag lost on assoc vdev during link vdev disconnecting
When the disconnect is pending in CM for assoc vdev, new disconnect request
will flush and clear the MLO flag by cm_notify_disconnect_complete.
That will cause link vdev run into invalid path during RSO stop event
handling. Fix this by:
1) Avoid calling cm_notify_disconnect_complete from
cm_handle_disconnect_flush
2) Move cm_clear_vdev_mlo_cap() at the end of
cm_disconnect_complete() when all disconnect are actually
completed.

Change-Id: I6f3c08dcae1aa5acf8c073c0055616d8f7988494
CRs-Fixed: 3250990
2022-07-27 16:26:06 -07:00
Jianmin Zhu
b67f4a7465 qcacmn: Fix 6 GHz bss beamformee score 0 issue
Since 6 GHz bss doesn't support vht, can't get beamformer cap from vht cap,
beamformee score is always 0. 5 GHz bss has vht and beamformee score, so
always win 6 GHz bss of same mld if other conditions are same when select
candidate by score.

To fix it, for 6 GHz bss, get beamformer cap from eht cap.

Change-Id: Ic057928876a6ee58a96c3881d004886d0ac0d3fa
CRs-Fixed: 3249097
2022-07-25 22:33:10 -07:00
Jianmin Zhu
a7a1ff47f1 qcacmn: Fix wrong score if channel width isn't 20N MHz
Some operating class like 81, channel spacing is 25, need convert
channel width to 20 to get right score when select candidate.

Fix some code style issues too.

Change-Id: I15795d016cae74b7596a199ae2883aeababaf081
CRs-Fixed: 3250207
2022-07-25 22:33:03 -07:00
Jianmin Zhu
855490e8eb qcacmn: Use cfg to force band of assoc link
For WFA test, use cfg to force band of assoc link

Change-Id: I503bd87aca7341af4b7805c37e3667eb405d3cd8
CRs-Fixed: 3248005
2022-07-24 15:47:22 -07:00
Himanshu Batra
52cd69199f qcacmn: Change return value to true if cm ctx is NULL
In case if cm ctx is NULL, the disconnect state check API is returning
false which makes the caller assume vdev is not disconnected.
Hence, change the return value to true in this case.

Change-Id: Iadd52d94d6f561974101aa245ddbfdb1eb301b06
CRs-Fixed: 3246161
2022-07-21 02:38:44 -07:00
Jianmin Zhu
f2a742540b qcacmn: Select best partner for MLO of 2+ links
Select best candidate by mlo score algorithm.

Check bss mlo type first by mlo info, mlo config, partner frequency and
dbs/sbs cap, calculate candidate score for SLO/MLMR/EMLSR bss types.

For SLO case, same as before except:
Decrease percent of legacy band and nss to include 320M and 8x8.
Decrease max percent of congestion from 100 to 80 to include MLMR joint
congestion.
Increase weight of both band width and nss to 20.

For EMLSR case, same as SLO except adding EMLSR boost score.

For MLMR case, besides adding MLMR boost score,
calculate joint RSSI/band width/congestion score for combination of
scan entry + each partner link by new mlo algorithm, select partner with
highest total joint score as candidate combination, only activate that
partner link.

Change-Id: I640c6825d945caf5fab504a77717195c2eac0c93
CRs-Fixed: 3234912
2022-07-18 11:55:27 -07:00
David Oladunjoye
46468556c8 qcacmn: umac: Replace fallthrough comment with attribute
-Wimplicit-fallthrough is being enabled by default. Some compilers
such as clang require the attribute instead of just a fallthrough comment.

Change-Id: Idc7c80891aed551db5b6b87eba7b44b6c75ecad3
CRs-Fixed: 3217348
2022-07-07 00:51:58 -07:00
Jianmin Zhu
e3e178489d qcacmn: Fix rssi score 0 for non eht ap
If WLAN_FEATURE_11BE_MLO defined, cm_calculate_raw_rssi_score return 0,
cm_calculate_eht_score return 0 too if eht cap isn't supported,
so rssi score is always 0 if candidate doesn't support eht cap.

Change-Id: Id0a3e92d9255178511cfdfea8649cf6e184b16c2
CRs-Fixed: 3234156
2022-07-06 07:56:06 -07:00
abhinav kumar
edd1669c23 qcacmn: Handle vendor control command and event
WMI_ROAM_GET_VENDOR_CONTROL_PARAM_CMDID: Add support
for a new roam command to get vendor control parameters
from FW. Host needs to send proper param ID in command
(from enum WMI_ROAM_GET_VENDOR_CONTROL_PARAM_ID)
to get corresponding INI value from FW.

WMI_ROAM_GET_VENDOR_CONTROL_PARAM_EVENTID:
Add support for a new roam event to get param value
from FW. FW sends this event upon receiving
WMI_ROAM_GET_VENDOR_CONTROL_PARAM_CMDID command.

Change-Id: Ic7b3badb14daff183dd36927b4dae6bbc036e6cd
CRs-Fixed: 3225166
2022-06-25 01:08:55 -07:00
Abhishek Singh
5753fed431 qcacmn: Move roam SM under host roam OR roam offloaded macros
Move roaming related SM handling under WLAN_FEATURE_HOST_ROAM and
WLAN_FEATURE_ROAM_OFFLOAD macros.
So that if neither of them is enabled connection manager
SM don't move SM to roaming specific states.

With this if roaming macro WLAN_FEATURE_HOST_ROAM and
WLAN_FEATURE_ROAM_OFFLOAD both are disabled OR
WLAN_FEATURE_ROAM_OFFLOAD is enabled but INI gRoamOffloadEnabled
is disabled, driver will not try to roam, instead, it
will do a internal disconnect followed by connect to new BSSID

Change-Id: Ic61d3badd451f426db8b9925e2b4dd0b2f9ff307
CRs-Fixed: 3216546
2022-06-14 09:31:42 -07:00
Abhishek Singh
65894b10a8 qcacmn: Avoid timeout, in case active cmd fails to find valid req
If a new disconnect/connect req tries flush the pending
disconnect/connect request and while doing so, it
remove the CM pending request, but before it tried to
remove pending command from serialization, the command
becomes active in another thread.

This active command will try to fetch the CM request
which is removed and thus return without any handling.

This lead to active command timeout for the request.

To fix it remove the command from serialization active
queue, if disconnect/connect request was not found in
CM request list after the command become active.

Change-Id: I81d147060fb21d17e4aa82e99c073d1bd0c5db68
CRs-Fixed: 3212746
2022-06-11 06:56:53 -07:00
Jianmin Zhu
3061409081 qcacmn: Add band bitmap filter for mlo ap candidate
Get mlo partner link freq from RNR IE.

Use band bitmap to filter mlo AP by band.
Force link on 2 GHz: mlo_support_link_band=1
Force link on 5 GHz: mlo_support_link_band=2
Force link on 6 GHz: mlo_support_link_band=4

Change-Id: Ib11dee117bef6121bbc455b62a2803138881a72a
CRs-Fixed: 3211974
2022-06-08 11:47:53 -07:00
Abhishek Singh
5076250707 qcacmn: Fix to avoid using mutex lock after holding spin lock
Avoid using mutex lock after holding spin lock, use spin lock
for the required calls only and not for set and clear MLO
VDEV which uses mutex if WLAN_MLO_USE_SPINLOCK is not
defined.

Change-Id: I9b989aa6a965107bff642e9d1e1009e57e7dddc2
CRs-Fixed: 3204328
2022-05-24 17:21:06 -07:00
Edayilliam Jayadev
40dacfa471 qcacmn: Count MLO vdevs in a pdev
Count the MLO vdevs in a pdev. WLAN_VDEV_FEXT2_MLO feature
flag in vdev object is set for all MLO vdevs. Simple solution is
to increment/decrement the count on every set/clear of
WLAN_VDEV_FEXT2_MLO feature flag. Since this feature flag will be
set/clear at multiple places for a given vdev, this approach
will lead to wrong MLO vdev count. To fix this we need to
increment/decrement the count on first set/first clear of
WLAN_VDEV_FEXT2_MLO flag. Add a lock also to prevent the race
conditions.

CRs-Fixed: 3106235
Change-Id: Ice7edde04553088fbb7c9b769508d441ccd6e4bf
2022-05-11 05:53:18 -07:00
Srinivas Dasari
cc60bec109 qcacmn: Ignore H2E RSNXE support for test config
Userspace sends the vendor command WIFI_TEST_CONFIGURATION by
setting the attribute WIFI_TEST_CONFIG_IGNORE_H2E_RSNXE when
driver needs to ignore the SAE H2E mismatch for 6 GHz connection.
This is needed for certification test support

Change-Id: I5c1838598478ab74d72d57a765452d7fd989b701
CRs-Fixed: 3072578
2022-05-06 16:41:55 -07:00
Deeksha Gupta
e8e16bec58 qcacmn: Allow 6Ghz if any 6Ghz AKM is supported
Currently, Userspace can send multiple AKMs in connect req.
For 6GHz, some AKMs are not supported. Suppose in multiple
AKMs, any AKM doesn't support 6GHz then driver returns failure.
Due to this, DUT doesn't not able to connect to 6Ghz.

Fix is, allow 6Ghz if any 6Ghz AKM is supported.

Also adds necessary prints in scan filter API to help
debug the candidate rejection.

Change-Id: Id9967af5ec7f64e95b33dd8be3bd6c9649e72bb2
CRs-Fixed: 3158489
2022-03-29 14:12:01 -07:00
Deeksha Gupta
b06ca5bc3d qcacmn: Update key management after bss create response
Add support to update key management with higher security
after BSS create response.
Also, Currenlty if there are multiple AKM and ucast cipher.
Host overwrites AKM and ucast cipher value with the new one.
Instead of overwrite, add support to do ORing to keep all values.

Change-Id: I679a86debef649efbce1a08b60512d127f7fbbee
CRs-Fixed: 3113222
2022-03-14 10:11:25 -07:00
Deeksha Gupta
348fee747b qcacmn: Update BSS score calculation based on Security Profile
Update BSS score calculation to consider security profile.

Change-Id: I120774ce2472442ebba15e098b4089f8a17cbfc5
CRs-Fixed: 3113215
2022-03-14 10:11:19 -07:00
chunquan
bc71eff483 qcacmn: Rename files with blacklist/whitelist
Rename files with  blacklist/whitelist to denylist/
whitelist. Rename files with blm to dlm.

Change-Id: I6f533c30c664aaaf713cdd2e2e34f9528df139b5
CRs-Fixed: 3099867
2022-03-14 08:50:32 -07:00
nakul kachhwaha
dff43f12ea qcacmn: Add support for 6ghz relaxed connection policy
Adding new API to bypass scanning and connection
restrictions to bss operating in 6GHz with different
country code.
This API is based on a cfg item which can be configured
separately from safe mode or rf test mode.

Change-Id: I47396ac8793172e94499377cb0b980f7eee0f39e
CRs-Fixed: 3135147
2022-03-08 01:19:59 -08:00
Aditya Sathish
1cebff1228 qcacmn: Use best regulatory power mode in scan manager
Due to the nature of discrete channel lists for each
power mode on the host driver, it is currently not
possible to scan 6GHz channels which are not part
of the operating regulatory power mode.

To enable scanning all 6GHz channels irrespective of the
regulatory power mode (i.e., standard, low, etc.), the
existing sanity checks for the regulatory current channel
list need to refer to the super channel list
instead.

Additionally, these sanity checks need to check the
channel state and flags for the best power mode instead
of the current power mode. This will allow the scan
manager to access all 6GHz channels irrespective
of the current regulatory power mode.

Multi-band operation (for radios operable on 2.4GHz,
5GHz and/or 6GHz) is also ensured in these sanity
checks.

CRs-Fixed: 3140935
Change-Id: If10c617834dd89f4bbd99669318fd84c63421755
2022-03-07 20:19:12 -08:00
chunquan
19cc13911c qcacmn: Replace blacklist/whitelist with denylist/allowlist
Replace blacklist/whitelist with denylist/allowlist
in qca-wifi-host-cmn.

Change-Id: I1a27d025ccb9d5fcc3c573d47a84f9667a229c9b
CRs-Fixed: 3098934
2022-03-05 07:11:01 -08:00
Himanshu Batra
7908fb906c qcacmn: Clear MLO cap on connect failure of assoc link
Clear MLO cap on connect failure of assoc link

Change-Id: I62edace42543d527ff6b65861d30f8762f3a6316
CRs-Fixed: 3137865
2022-03-01 05:39:43 -08:00
Abhijit Pradhan
3f95481d0e qcacmn: Add powermode APIs under a new macro
Use  CONFIG_REG_ 6G_PWR_MODE for the new API.
Use "_for_pwrmode" as suffix for the new functions.

Change-Id: I9b84944a59062277b76bc48877c47ea5afada0ec
CRs-Fixed: 3133023
2022-02-28 12:57:10 -08:00
Hariharan Basuthkar
e7b559d010 qcacmn: Replace reg curchan with 6g ap power based chan list
The consumers of the current channel list may want to search through 6G
channels that are not part of current channel list and belong to channel
list of different power mode.

Therefore, replace the regulatory current channel list with that of 6G
power based channel list.

Change-Id: Ie2ff8bbfb50a5f95f584b134b18246cb28b1c406
CRs-Fixed: 3110987
2022-02-28 12:57:03 -08:00
Bapiraju Alla
c0267fdbb4 qcacmn: Initialize total_weight while initializing BSS score config
Currently, total_weight is not initialized before calculating
default ML BSS weightage with INI configuration. This may result in
unexpected behavior.

To resolve this, calculate ML bss weight after calculating non-ML
BSS score weight.

Change-Id: I4b9455e0ce69dec5c837f92acad60ac83cdd2502
CRs-Fixed: 3127454
2022-02-25 01:46:00 -08:00
Lincoln Tran
badb6230e2 qcacmn: Back to back connect changes
Currently, the code does not handle an MLO connect when in
non-init state. Add logic to clean up any existing connection
before going ahead with the latest request.

Change-Id: Ia5a10bcc1e0d2c8e82d6ea0d82d1a5bf0604a1e5
CRs-fixed: 3116687
2022-02-23 20:49:08 -08:00
Srinivas Dasari
f8921a74b9 qcacmn: Wait for RSO stop response from firmware
Firmware doesn't expect any vdev commands from host while RSO stop
is happening. It sends a response to the RSO_STOP command once
it's done with cleanup. Host needs to run a timer and wait for a
maximum of 6 seconds for the response. Host can stop the timer and
allow the commands to firmware in the below cases,
1. RSO_STOP response with success status
2. RSO_STOP response with HO_FAIL status followed by
   HO_FAIL event: Host needs to wait till HO_FAIL event is
   received

If firmware doesn't send any response in the 6 seconds wait, issue
a recovery to help to check the firmware state.

Change-Id: I4577f9b0aac71c0c86bd32b59e69d9527bf107b9
CRs-Fixed: 3106032
2022-02-18 23:21:21 -08:00
Srinivas Girigowda
9630b58469 qcacmn: connection_mgr: Add API ucfg_cm_get_connected_band()
Implement an API to get connected band information.

Change-Id: I682a749d293afd06a4fe12acf985cc5d44d11db8
CRs-Fixed: 3104394
2022-02-08 18:25:29 -08:00
Srinivas Dasari
c49f8063e7 qcacmn: Move MLO link vdev to UP state upon legacy to MLO roaming
Host driver creates two vdev as part of initial connection.
If the connected AP supports MLO, both(sta and link) of the vdevs
would be moved to UP state. Otherwise, link vdev would be in INIT
state and not moved to UP state.
Firmware sends roam sync indication to host when it roams to a
new AP. The event carries new AP info and the new AP could be
MLO AP. If the current AP is non-MLO and new(roamed) AP is MLO AP,
move the link vdev state to UP as it's in INIT state.

Change-Id: Ib5dd216074d68b0001755024153263ba9654edbe
CRs-Fixed: 3106059
2022-02-03 16:46:15 -08:00