4be52ac6 | 29-Oct-2024 |
Priyanga Ramasamy <priyanga24@in.ibm.com> |
delete-vpd:Do not throw exception if FRU is absent
While deleting FRU VPD for the FRU which is not present, do not throw exception and crash the application.
Test: Tested that the application conti
delete-vpd:Do not throw exception if FRU is absent
While deleting FRU VPD for the FRU which is not present, do not throw exception and crash the application.
Test: Tested that the application continues to work fine in case of attempting VPD deletion for the FRU which is not present.
Change-Id: I6a9a03bfd3378c8c018d8f26b5647b393ed879d4 Signed-off-by: Priyanga Ramasamy <priyanga24@in.ibm.com>
show more ...
|
74f89e16 | 22-Oct-2024 |
Sunny Srivastava <sunnsr25@in.ibm.com> |
Update FRU status on recollection
Some FRUs qualifies for recollection at standby. Based on their recollection status, clear VPD and reset their functional and present property if required.
Change-
Update FRU status on recollection
Some FRUs qualifies for recollection at standby. Based on their recollection status, clear VPD and reset their functional and present property if required.
Change-Id: Iaf8f5b783c71c18cb36639846ab791baad989723 Signed-off-by: Sunny Srivastava <sunnsr25@in.ibm.com>
show more ...
|
a12c6c8e | 14-Oct-2024 |
Sunny Srivastava <55740008+SunnySrivastava1984@users.noreply.github.com> |
Clear vpd before recollection
Some FRUs qualifies for recollection at standby. To avoid any misleading representation because of the stale data, VPD is being cleared and present is set to false befo
Clear vpd before recollection
Some FRUs qualifies for recollection at standby. To avoid any misleading representation because of the stale data, VPD is being cleared and present is set to false before recollection is triggered for those FRUs. The commit also checks for any sub tree under the parent path and if found resets data for them as well.
This will also help in detecting any error that can happen during recollection of those FRUs as their present property will remain set to false.
Change-Id: I9b706df39648ded63c44363fc817104028e60014 Signed-off-by: Sunny Srivastava <sunnsr25@in.ibm.com>
show more ...
|
78b2cd67 | 17-Sep-2024 |
Sunny Srivastava <sunnsr25@in.ibm.com> |
Update BIOS table type
The typedef used for BIOS table needs to be modified to match the changes done in the structure of new BIOS table. Also, monostate has been added to the variant to detect any
Update BIOS table type
The typedef used for BIOS table needs to be modified to match the changes done in the structure of new BIOS table. Also, monostate has been added to the variant to detect any type change in future.
Change-Id: I6f250b84fdb82cd4a1c731265b25cfa908fc3beb Signed-off-by: Sunny Srivastava <sunnsr25@in.ibm.com>
show more ...
|
08dc31cd | 16-Aug-2024 |
Patrick Williams <patrick@stwcx.xyz> |
clang-format: re-format for clang-18
clang-format-18 isn't compatible with the clang-format-17 output, so we need to reformat the code with the latest version. The way clang-18 handles lambda forma
clang-format: re-format for clang-18
clang-format-18 isn't compatible with the clang-format-17 output, so we need to reformat the code with the latest version. The way clang-18 handles lambda formatting also changed, so we have made changes to the organization default style format to better handle lambda formatting.
See I5e08687e696dd240402a2780158664b7113def0e for updated style. See Iea0776aaa7edd483fa395e23de25ebf5a6288f71 for clang-18 enablement.
Change-Id: I917f3a65c985f3df3bb4d7a1bef0a13da54ab7bd Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
show more ...
|
893bf5de | 14-Jun-2024 |
Sunny Srivastava <sunnsr25@in.ibm.com> |
Update cxp port functional status on CM
If the PCIe Card going through CM hosts object path for cxp_top and cxp_bot as its subtree, then functional status for those ports also needs to be toggled al
Update cxp port functional status on CM
If the PCIe Card going through CM hosts object path for cxp_top and cxp_bot as its subtree, then functional status for those ports also needs to be toggled along with that of card being concurrently maintained.
Change-Id: Ia693f368a3eb1b3bd6f9ee1e62eabecaa3198803 Signed-off-by: Sunny Srivastava <sunnsr25@in.ibm.com>
show more ...
|
af921756 | 17-Jun-2024 |
Manojkiran Eda <manojkiran.eda@gmail.com> |
Fix spelling mistakes using codespell
This commit corrects various spelling mistakes throughout the repository. The corrections were made automatically using `codespell`[1] tool.
[1]: https://githu
Fix spelling mistakes using codespell
This commit corrects various spelling mistakes throughout the repository. The corrections were made automatically using `codespell`[1] tool.
[1]: https://github.com/codespell-project/codespell
Change-Id: Iae81201889d1bb4ca324243b863948cb60420ae7 Signed-off-by: Manojkiran Eda <manojkiran.eda@gmail.com>
show more ...
|
4788e1ba | 19-Mar-2024 |
Sunny Srivastava <sunnsr25@in.ibm.com> |
Retry for file visibility in user space
In some corner cases, there is a delay between the parser code coming up against udev generated due to binding the driver, and the file appearing in user spac
Retry for file visibility in user space
In some corner cases, there is a delay between the parser code coming up against udev generated due to binding the driver, and the file appearing in user space. As a result the check for file existence fails for those situations and post fail action gets executed. This removes the GPIO line to the file. Whereas, parser code will be in process of reading that file at the same time. Hence closing the GPIO line causes file read error on parser side.
The timer is to buy some time for file to appear in user space before cutting off the GPIO line to it.
Test: This was a script driven testing where system was brought down and again restarted after random time interval. Code has been tested against that script and it is working fine.
Change-Id: I8383372b27e48bf1cbc569562e396a0bceb908e5 Signed-off-by: Sunny Srivastava <sunnsr25@in.ibm.com>
show more ...
|
b74826bd | 29-Nov-2023 |
Patrick Williams <patrick@stwcx.xyz> |
meson: disable oe-sdk by default
The meson option oe-sdk is used in rare scenarios. Having it non-defaulted turns it into an `auto` feature, which is not desired. Explicitly disable it by default.
meson: disable oe-sdk by default
The meson option oe-sdk is used in rare scenarios. Having it non-defaulted turns it into an `auto` feature, which is not desired. Explicitly disable it by default.
Change-Id: Ib278aa93822e471c63b9f3c5a2e42eaffa441a6a Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
show more ...
|
753ee87a | 29-Nov-2023 |
Patrick Williams <patrick@stwcx.xyz> |
meson: rename options file
Using meson.options is now preferred.
Change-Id: I6be1bb33b22e0c47aa6cc3a5ed5863ef00b9ee64 Signed-off-by: Patrick Williams <patrick@stwcx.xyz> |
c6e7ea92 | 03-Nov-2023 |
Sunny Srivastava <55740008+SunnySrivastava1984@users.noreply.github.com> |
Clear inventory data on removal
In case any FRU is removed from the system, the data w.r.t the FRU, as it is persisted continues to stay on DBus. This sometimes can be mis-leading as data is display
Clear inventory data on removal
In case any FRU is removed from the system, the data w.r.t the FRU, as it is persisted continues to stay on DBus. This sometimes can be mis-leading as data is displayed for FRU which is actually not present in the system.
The commit, in case the FRU is removed via delete FRU procedure, clears all the VPD related data for the FRU and update its present and functional status.
Test: Delete any FRU using "deleteFRUVPD" exposed via VPD-Manager, check the DBus, data related to VPD should be cleared.
Change-Id: Ic61e9a9934333ef9558ac4294a1935575042cb11 Signed-off-by: Anupama B R <anupama.b.r1@ibm.com>
show more ...
|
83770867 | 31-Oct-2023 |
Sunny Srivastava <sunnsr25@in.ibm.com> |
Update VPD on BackUP Fru
In case the systemVPD is marked to be backed up on another FRU. Backup data also needs to be updated if system VPD, which is listed to be backed up is being updated using w
Update VPD on BackUP Fru
In case the systemVPD is marked to be backed up on another FRU. Backup data also needs to be updated if system VPD, which is listed to be backed up is being updated using writeKeyword API of VPD-Manager.
Test: * Check if the system vpd EEPROM entry in JSON has "systemVpdBackupPath" flag. * Implies the system is marked to back up susyem VPD on a FRU. * Update any record/keyword marked to be backed up using writeKeyword API exposed by VPD-Manager. * Check if the same data is updated on the FRU marked for back up.
Signed-off-by: Sunny Srivastava <sunnsr25@in.ibm.com> Change-Id: I0c5454bcf74cb3768b38647716526f62ad7d60b3
show more ...
|
b7b352a6 | 20-Oct-2023 |
Patrick Williams <patrick@stwcx.xyz> |
clang-format: copy latest and re-format
clang-format-17 has some backwards incompatible changes that require additional settings for best compatibility and re-running the formatter. Copy the latest
clang-format: copy latest and re-format
clang-format-17 has some backwards incompatible changes that require additional settings for best compatibility and re-running the formatter. Copy the latest .clang-format from the docs repository and reformat the repository.
Change-Id: Ifd063d23c038d986d916148051e0a261b5ba1fca Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
show more ...
|
522493d4 | 11-Sep-2023 |
Patrick Williams <patrick@stwcx.xyz> |
vpd-manager: remove error.cpp
This content appears to have been manually generated from a very old version of phosphor-dbus-interfaces YAML a long time ago and the content is now clashing with the c
vpd-manager: remove error.cpp
This content appears to have been manually generated from a very old version of phosphor-dbus-interfaces YAML a long time ago and the content is now clashing with the corresponding `error.hpp` file. Remove this file from the repository and rely on the generated version instead (in the PDI library).
Change-Id: Icaebb5ac67fd829e4a06bca15eb02d0255caedc5 Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
show more ...
|
dc3c3c30 | 07-Sep-2023 |
Patrick Williams <patrick@stwcx.xyz> |
subprojects: nlohmann,cli11: add wraps and configure
Signed-off-by: Patrick Williams <patrick@stwcx.xyz> Change-Id: Iccc5be03b2428969ff8a51f24820e81faafcdcbf |
4170bdad | 19-Jul-2023 |
Priyanga Ramasamy <priyanga24@in.ibm.com> |
Unable to set minimum ship level
The software-manager-tool internally calls WriteKeyword d-bus api to set firmware version in hardware (in VSYS FV). The software-manager-tool is unable to set curren
Unable to set minimum ship level
The software-manager-tool internally calls WriteKeyword d-bus api to set firmware version in hardware (in VSYS FV). The software-manager-tool is unable to set current firmware level as minimum ship level due to a bug in vpd-manager "WriteKeyword" d-bus api.
In WriteKeyword, when we try to read from filestream and write into vector, the maximum possible vpd size(65504) is given as the total bytes to be read (n). But the actual hardware data is lesser than 65504 in size.
If the filestream read operation runs out of characters to extract before n characters have been successfully read, it reads the available characters and stores it in vector and internally it sets both bad bit and fail bit.
And with recent changes since we catch all filestream exceptions, this bug has been caught and code flow is broken.
Fix: Query the size of the VPD and perform filestream read based on the given VPD size. If the given VPD size exceeds the maximum possible size (65504), then read till 65504 only.
The same issue has been addressed in vpd-tool read keyword from hardware.
Test: vpd-tool -r -H -O /sys/bus/i2c/drivers/at24/8-0050/eeprom -R VSYS -K FV { "/sys/bus/i2c/drivers/at24/8-0050/eeprom": { "FV": "fw1020.00-00 " } }
vpd-tool -r -O /system/chassis/motherboard -R VSYS -K FV { "/system/chassis/motherboard": { "FV": "fw1020.00-00 " } }
software-manager-tool --setminlevel <6> Current version: fw1050.00-4.16-dirty. Setting Minimum Ship Level to: fw1050.00-4
vpd-tool -r -O /system/chassis/motherboard -R VSYS -K FV { "/system/chassis/motherboard": { "FV": "fw1050.00-4 " } }
vpd-tool -r -H -O /sys/bus/i2c/drivers/at24/8-0050/eeprom -R VSYS -K FV { "/sys/bus/i2c/drivers/at24/8-0050/eeprom": { "FV": "fw1050.00-4 " } }
Signed-off-by: Priyanga Ramasamy <priyanga24@in.ibm.com> Change-Id: I6e24d744542f0a67a872605c7793d73ee27c541c
show more ...
|
45d54976 | 03-Jul-2023 |
jinuthomas <jinu.joy.thomas@in.ibm.com> |
Catching File Exceptions in openpower-vpd-parser
In this commit, I have added code to handle file exceptions more effectively. By implementing proper exception handling, we can improve the robustnes
Catching File Exceptions in openpower-vpd-parser
In this commit, I have added code to handle file exceptions more effectively. By implementing proper exception handling, we can improve the robustness and reliability of the file operations within our codebase.
Here are the key changes made in this commit:
- Introduced a try-catch block around the file operation sections. - Within the try block, added code to perform the necessary file operations. - Implemented catch blocks to handle specific file exceptions. - In each catch block, included appropriate error handling logic, such as logging the error message or displaying a user-friendly error message. - Ensured that the catch blocks gracefully handle the exceptions and prevent the program from crashing or behaving unexpectedly.
By adding this exception handling code, we can anticipate and handle potential file-related errors gracefully, providing a smoother experience for users and preventing any unexpected crashes or data loss. This would also aid in debugging issues.
Change-Id: I621a7f0ba68d2c298e4fea0a9d3e21d1939cd090 Signed-off-by: jinuthomas <jinu.joy.thomas@in.ibm.com>
show more ...
|
c78d887c | 10-May-2023 |
Patrick Williams <patrick@stwcx.xyz> |
clang-format: copy latest and re-format
clang-format-16 has some backwards incompatible changes that require additional settings for best compatibility and re-running the formatter. Copy the latest
clang-format: copy latest and re-format
clang-format-16 has some backwards incompatible changes that require additional settings for best compatibility and re-running the formatter. Copy the latest .clang-format from the docs repository and reformat the repository.
Change-Id: Ia442cdc88aaeaab2f1384cc46a56f5cd5e40f2f5 Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
show more ...
|
5629fbc0 | 01-Mar-2023 |
Priyanga Ramasamy <priyanga24@in.ibm.com> |
vpd-tool #kw support
This commit is to enable vpd-tool read and write support for pound keywords starting with # and for numeric keywords.
This commit enables a way to read and write keyword values
vpd-tool #kw support
This commit is to enable vpd-tool read and write support for pound keywords starting with # and for numeric keywords.
This commit enables a way to read and write keyword values using --file option, where --file takes a file with absolute path.
when --file option used with --readKeyword flag - vpd-tool saves the output in the given file. and when the file option used with --writeKeyword flag - the vpd-tool takes the value from file and performs write operation.
Test: ----------------------------------------------- Case 1: Read from hardware and save in text file ----------------------------------------------- vpd-tool -r -H -O /sys/bus/i2c/drivers/at24/8-0050/eeprom -R PSPD -K "#D" --file /tmp/output.txt Value read is saved in the file /tmp/output.txt
----------------------------------------------- Case 2: Write to hardware by taking input from a text file ----------------------------------------------- :~# cat /tmp/write.txt 00102030405060607020304050601020304050606040302010
:~# vpd-tool -w -O /sys/bus/i2c/drivers/at24/8-0050/eeprom -R PSPD -K "#D" --file /tmp/write.txt -H Data updated successfully
:~# vpd-tool -r -H -O /sys/bus/i2c/drivers/at24/8-0050/eeprom -R PSPD -K "#D" { "/sys/bus/i2c/drivers/at24/8-0050/eeprom": { "#D": "0x0010203040506060702030405060102030405060604030201000000000 ...0000" } }
----------------------------------------------- Case 3: Read from cache and pipe to text file ----------------------------------------------- :~# vpd-tool -r -O /system/chassis/motherboard -R PSPD -K "#D" --file /tmp/read-motherboard-#D.txt Value read is saved in the file /tmp/read-motherboard-#D.txt
----------------------------------------------- Case 4: Write to cache by taking input from text file ----------------------------------------------- :~# cat /tmp/write.txt 00102030405060607020304050601020304050606040302010
:~# vpd-tool -w -O /system/chassis/motherboard -R PSPD -K "#D" --file /tmp/write.txt Data updated successfully
:~# vpd-tool -r -O /system/chassis/motherboard -R PSPD -K "#D" { "/system/chassis/motherboard": { "#D": "0x0010203040506060702030405060102030405060604030201000000000000000000....." } }
----------------------------------------------- Case 5: Write to cache by taking hex input from console ----------------------------------------------- :~# vpd-tool -w -O /system/chassis/motherboard -R PSPD -K "#D" -V 0x65 Data updated successfully
:~# vpd-tool -r -O /system/chassis/motherboard -R PSPD -K "#D" { "/system/chassis/motherboard": { "#D": "0x65100c0c000000000000000 ... } }
Case 5.1: Write to cache by providing ascii values as input from console
vpd-tool -w -O /system/chassis/motherboard -R PSPD -K "#D" -V abcd Data updated successfully
vpd-tool -r -O /system/chassis/motherboard -R PSPD -K "#D" { "/system/chassis/motherboard": { "#D": "0x6162636440506060702030405060102030405060604030201000000 .." } }
----------------------------------------------- Case 6: Read from cache and display on console ----------------------------------------------- :~# vpd-tool -r -O /system/chassis/motherboard -R PSPD -K "#D" { "/system/chassis/motherboard": { "#D": "0x00100c0c00000000000000000000000000000000000000 ..... } }
----------------------------------------------- Case 7: Read from hardware and display on console ----------------------------------------------- vpd-tool -r -O /sys/bus/i2c/drivers/at24/8-0050/eeprom -R PSPD -K "#D" -H { "/sys/bus/i2c/drivers/at24/8-0050/eeprom": { "#D": "0x651020304050606070203040506010203040506060403020100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ......... 000000000000000000000000000000000000000" } }
----------------------------------------------- Case 8: Write to hardware via console ----------------------------------------------- vpd-tool -w -H -O /sys/bus/i2c/drivers/at24/8-0050/eeprom -R PSPD -K "#D" -V 0x00100c0c000000000000000000000000000000000000 Data updated successfully
vpd-tool -r -O /sys/bus/i2c/drivers/at24/8-0050/eeprom -R PSPD -K "#D" -H { "/sys/bus/i2c/drivers/at24/8-0050/eeprom": { "#D": "0x00100c0c00000000000000000000000000000000000030201000000000000000000000000 ... } }
----------------------------------------------- Case 9: Write 10240 bytes on dbus ----------------------------------------------- time vpd-tool -w -O /system/chassis/motherboard -R PSPD -K "#D" --file /tmp/output.txt
Data updated successfully
real 0m49.564s user 0m0.047s sys 0m0.009s
time vpd-tool -r -O /system/chassis/motherboard -R PSPD -K "#D" { "/system/chassis/motherboard": { "#D": "0x01100c0c0000.....0000123456782746002" } }
real 0m0.072s user 0m0.057s sys 0m0.001s ------------------------------------------------
Signed-off-by: Priyanga Ramasamy <priyanga24@in.ibm.com> Change-Id: I3977a7778b28ebcada7788f619b18bbca6ed0c8c
show more ...
|
18bb985c | 16-Nov-2022 |
girik <giridharikrishnan@gmail.com> |
Correction of VPD using ECC
ECC algorithm corrects VPD data in 32:1 bit ratio in the event of corruption. Main Test Cases: 1) Check correction of KW in records. 2) Check correction while writing and
Correction of VPD using ECC
ECC algorithm corrects VPD data in 32:1 bit ratio in the event of corruption. Main Test Cases: 1) Check correction of KW in records. 2) Check correction while writing and reading VPD. 3) Check for Module VPD correction.
Signed-off-by: Giridhari Krishna <giridharikrishnan@gmail.com> Change-Id: I48a3db18df9d3a2aecde814610ab1b357e6f310d
show more ...
|
5700b3c8 | 07-Mar-2023 |
jinuthomas <jinu.joy.thomas@in.ibm.com> |
ISDIMM - compile fix
Add the isdimm cpp file to vpd-manager meson Fix namespace for isdimm
Change-Id: I2620dc51f5674b9261aa95720def235b24b97ed2 Signed-off-by: jinuthomas <jinu.joy.thomas@in.ibm
ISDIMM - compile fix
Add the isdimm cpp file to vpd-manager meson Fix namespace for isdimm
Change-Id: I2620dc51f5674b9261aa95720def235b24b97ed2 Signed-off-by: jinuthomas <jinu.joy.thomas@in.ibm.com>
show more ...
|
834c0786 | 14-Feb-2023 |
Priyanga Ramasamy <priyanga24@in.ibm.com> |
Defect fix in restoring system VPD via vpd-manager
In vpd-manager restore api, the keyword defaults should be taken from the system vpd map. Instead it assumes blank value as default for all keyword
Defect fix in restoring system VPD via vpd-manager
In vpd-manager restore api, the keyword defaults should be taken from the system vpd map. Instead it assumes blank value as default for all keywords. This fails to restore UTIL D0 keyword as its default value is 0x00.
This commit fixes the issue.
Test: ~#vpd-tool -w -H -O /sys/bus/i2c/drivers/at24/8-0050/eeprom -R UTIL -K D0 -V 0x00
~# vpd-tool --fixSystemVPD =============================================================================================================================================================================================== S.No Record Keyword Data On BMC Data On System Backplane Data Mismatch =============================================================================================================================================================================================== 1 UTIL D0 0x01 0x00 YES
~#busctl set-property xyz.openbmc_project.Inventory.Manager /xyz/openbmc_project/inventory/system/chassis/motherboard xyz.openbmc_project.Inventory.Item Present b false
~#systemctl restart system-vpd.service
~#vpd-tool --fixSystemVPD
=============================================================================================================================================================================================== S.No Record Keyword Data On BMC Data On System Backplane Data Mismatch =============================================================================================================================================================================================== 1 UTIL D0 0x01 0x01 NO
Signed-off-by: Priyanga Ramasamy <priyanga24@in.ibm.com> Change-Id: If6817829211e9b8a47652deab5d1ec7643855fb6
show more ...
|
952d6c58 | 07-Nov-2022 |
Priyanga Ramasamy <priyanga24@in.ibm.com> |
Enhance system VPD map
This commit enhances system VPD map to incorporate useful information about each critical keywords like the default keyword value, if the keyword is restorable or not, if the
Enhance system VPD map
This commit enhances system VPD map to incorporate useful information about each critical keywords like the default keyword value, if the keyword is restorable or not, if the keyword is resettable at manufacturing or not, if a PEL required or not when failed to restore the keywords.
Tested the following, 1. system VPD restore on cache via parser 2. system VPD restore on hardware via vpd-manager 3. system VPD restore via vpd-tool 4. system VPD reset via vpd-tool
Signed-off-by: Priyanga Ramasamy <priyanga24@in.ibm.com> Change-Id: I29ae6016f6d84342a8ad91ba72617a45121cf8a6
show more ...
|
ab2304d2 | 10-Jan-2023 |
Sunny Srivastava <sunnsr25@in.ibm.com> |
Enable CM for NVMe Drives
Since NVMe backplane is not CMable whereas NVMe drives are CMable, code has been modified to loop through the list of FRUs under an EEPROM path instead of just checking the
Enable CM for NVMe Drives
Since NVMe backplane is not CMable whereas NVMe drives are CMable, code has been modified to loop through the list of FRUs under an EEPROM path instead of just checking the base FRU for CMable flag.
Test: Trigger collectFRUVPD using busctl command for NVMe drive and check if the parser has been re-trigerred and returns successfully.
Signed-off-by: Sunny Srivastava <sunnsr25@in.ibm.com> Change-Id: I408bd3f9a68da0dd511da4dd0560cff2a36f80c6
show more ...
|
bc599477 | 19-Dec-2022 |
Santosh Puranik <santosh.puranik@in.ibm.com> |
manager: Fixes to CM related APIs
This commit fixes the following issues with manager APIs:
-- Handle inventory paths with and without a inventory prefix. -- Properly handle GpioExceptions wherever
manager: Fixes to CM related APIs
This commit fixes the following issues with manager APIs:
-- Handle inventory paths with and without a inventory prefix. -- Properly handle GpioExceptions wherever postFailAction is called. -- Clean CCIN when deleteFRUVPD is called. This helps any EM config files that latch onto the CCIN to detect that the FRU is gone.
Signed-off-by: Santosh Puranik <santosh.puranik@in.ibm.com> Change-Id: I6bde9c906e8d51edc9f7d0fabcac12af3dc44e0b
show more ...
|