#
677a4552 |
| 30-Jan-2025 |
Pavithra Barithaya <pavithrabarithaya07@gmail.com> |
libpldmresponder : Migrate to placement_new from reinterpret casting
reinterpret_cast is prohibited by the C++ core guidelines because it takes the behavior outside the language definition and gives
libpldmresponder : Migrate to placement_new from reinterpret casting
reinterpret_cast is prohibited by the C++ core guidelines because it takes the behavior outside the language definition and gives problems with type safety. Placement-new on the other-hand allows to control the object storage while still properly instantiating an object,keeping the behavior inside the C++ language specification.
Change-Id: If96afcb2c9dbea8fb6815d74a2181ca9ed04903a Signed-off-by: Pavithra Barithaya <pavithrabarithaya07@gmail.com>
show more ...
|
#
16c2a0a0 |
| 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: I8c84201cb2343a8c8a5507a49de0721a1bee7063 Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
show more ...
|
#
1e5c81e0 |
| 03-May-2024 |
Riya Dixit <riyadixitagra@gmail.com> |
pldm: Remove unnecessary type casting in logs
This commit removes the unnecessary type casting of values of the journal logs based on supported types mentioned in LG2 documentation [1].
Testing: Ve
pldm: Remove unnecessary type casting in logs
This commit removes the unnecessary type casting of values of the journal logs based on supported types mentioned in LG2 documentation [1].
Testing: Verified the debug traces to correct.
''' For Instance: Earlier - error(”TYPE = {TYPE} “, “TYPE”, static_cast<unsigned>(PLDM_STATE_EFFECTER_PDR)); Journal trace - May 27 08:16:51 p10bmc pldmd[931]: TYPE = 11
After Correction - error(”TYPE = {TYPE}“, “TYPE”, PLDM_STATE_EFFECTER_PDR); Journal trace - May 27 08:16:51 p10bmc pldmd[931]: TYPE = Enum(11) '''
[1]: https://github.com/openbmc/phosphor-logging/blob/master/docs/structured-logging.md#lg2
Change-Id: Ia649ecd4ecbb73c421f7844885f58a6835805719 Signed-off-by: Riya Dixit <riyadixitagra@gmail.com>
show more ...
|
#
89644441 |
| 31-Mar-2024 |
Riya Dixit <riyadixitagra@gmail.com> |
libpldmresponder: Improving Logs (lg2)
This commit corrects the severity level of logs and also formats the message string, fixing the ill-defined message string of the logs as mentioned in the anti
libpldmresponder: Improving Logs (lg2)
This commit corrects the severity level of logs and also formats the message string, fixing the ill-defined message string of the logs as mentioned in the anti-pattern document [1]. Additionally, based on the requirement this commit adds more debug information to logs.
[1]: https://github.com/openbmc/docs/blob/master/anti-patterns.md#ill-defined-data-structuring-in-lg2-message-strings
Change-Id: I7dc5c308a8cd76573995e07d01d1a6037bca31ba Signed-off-by: Riya Dixit <riyadixitagra@gmail.com>
show more ...
|
#
3daf7a1c |
| 17-Apr-2024 |
Manojkiran Eda <manojkiran.eda@gmail.com> |
libpldmresponder: fix a potential pldm crash
In the current state, pldm does create the sensor/effecter even in the absence of the underlying dbus resource. There is a bug in the responder code due
libpldmresponder: fix a potential pldm crash
In the current state, pldm does create the sensor/effecter even in the absence of the underlying dbus resource. There is a bug in the responder code due to which we emplace an empty dbus value map into the handler with a sensor ID. And if the remote PLDM endpoint queries for the state of the sensor, pldm would crash since it tries to read content from the empty dbus value map. This commit would fix the crash by adding necessary bound checks.
Testing: 1. Unit tests passed. 2. Functionally verified the fix by giving a dummy dbus object path and making sure that the sensor/effecter is not created & also ensured that pldm does not crash.
Change-Id: I5fb06677f6ae1bd74f9ec741b311f59737caf79d Signed-off-by: Manojkiran Eda <manojkiran.eda@gmail.com>
show more ...
|
#
06f9b29e |
| 31-Mar-2024 |
Sagar Srinivas <sagar.srinivas@ibm.com> |
Use std::map.contains as per latest c++
This commit replaces occurrences of 'find' with 'contains' to access elements in a std::map according to the latest C++ standard (since C++20).
However, cont
Use std::map.contains as per latest c++
This commit replaces occurrences of 'find' with 'contains' to access elements in a std::map according to the latest C++ standard (since C++20).
However, contains() is not suitable in all situations as in the case where we want to use the element contained in the map using contains(), then it would do 2 searches instead of 1 in the case where we use find() which fetches the element from the map also.
Here are some relevant links to C++ documentation and resources:
[1]: https://en.cppreference.com/w/cpp/container/map/find [2]: https://en.cppreference.com/w/cpp/container/map/contains [3]: https://wg21.link/N4861
Signed-off-by: Sagar Srinivas <sagar.srinivas@ibm.com> Change-Id: If589e52026417c1c14a6a946e48826b749034e9a
show more ...
|
#
c81d1129 |
| 21-Feb-2024 |
Manojkiran Eda <manojkiran.eda@gmail.com> |
skip creating effecter when its dbus isn't present
In the current state, we attempt to create an effecter PDR even if the D-Bus object that is being modeled as an effecter is absent at the time of c
skip creating effecter when its dbus isn't present
In the current state, we attempt to create an effecter PDR even if the D-Bus object that is being modeled as an effecter is absent at the time of creation.
However, this behavior may not be beneficial, as assuming that the D-Bus backend will magically appear later does not necessarily mean that we will be able to process it, we only process the JSON files during the first getPDR request. Therefore, it would be more efficient to skip creating the effecter in the absence of the D-Bus object.
This commit also addresses an error trace by including the dbus object path when it is not present on the system, rather than the opaque effecter id number which does not provide contextual information and may make it harder to diagnose issues.
Change-Id: I84239c75684f611b7985df027a93ba4531f783d0 Signed-off-by: Manojkiran Eda <manojkiran.eda@gmail.com>
show more ...
|
#
3c50c82a |
| 30-Jan-2024 |
Kamalkumar Patel <kamalkumar.patel@ibm.com> |
Adding Platform specific PDR support
- Adding platform check to generate pdr based on platform type.
- Currently PDR generation is happening based on default configuration, so this commit adds su
Adding Platform specific PDR support
- Adding platform check to generate pdr based on platform type.
- Currently PDR generation is happening based on default configuration, so this commit adds support to generate PDR's based in the platform type.
Testing: - Added traces and check from which path the files has been taken for pdr generation. - Removed power supply from default path and oem layer and identified that power supply pdr is not generating.
Change-Id: I6bedf06be7392e02c1ad32af7a552a5a4d6d42c0 Signed-off-by: Kamalkumar Patel <kamalkumar.patel@ibm.com>
show more ...
|
#
58cbcaf2 |
| 06-Oct-2023 |
Kamalkumar Patel <kamalkumar.patel@ibm.com> |
PLDM:Catching exception precisely and printing it
Correcting catch block in PLDM repo to print all exception precisely so pldm trace can be more useful to identify defect easily.
Change-Id: If2e86d
PLDM:Catching exception precisely and printing it
Correcting catch block in PLDM repo to print all exception precisely so pldm trace can be more useful to identify defect easily.
Change-Id: If2e86dcb031ddc2e927e7836d7f4359f5b44cdec Signed-off-by: Kamalkumar Patel <kamalkumar.patel@ibm.com>
show more ...
|
#
797f338f |
| 22-Aug-2023 |
Riya Dixit <riyadixitagra@gmail.com> |
PLDM: Implementing Phosphor-Logging/LG2 logging
This commit migrates std::cerr/cout added as part of new changes in PLDM to LG2.
Change-Id: I8e85732684d47b6740521e95712433a7c6760d8a Signed-off-by:
PLDM: Implementing Phosphor-Logging/LG2 logging
This commit migrates std::cerr/cout added as part of new changes in PLDM to LG2.
Change-Id: I8e85732684d47b6740521e95712433a7c6760d8a Signed-off-by: Riya Dixit <riyadixitagra@gmail.com>
show more ...
|
#
47792274 |
| 13-Jun-2023 |
Andrew Jeffery <andrew@aj.id.au> |
pldm: Include config.h via compiler argument
This removes any ambiguity about which config.h is being included. Subprojects such as libpldm and phosphor-logging also generate config.h files, and the
pldm: Include config.h via compiler argument
This removes any ambiguity about which config.h is being included. Subprojects such as libpldm and phosphor-logging also generate config.h files, and these are exposed in the include path.
Signed-off-by: Andrew Jeffery <andrew@aj.id.au> Change-Id: I3e0ccd6339f088380ffa29d41167b07aefc7dd16
show more ...
|
#
6da4f91b |
| 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: I61b093f75011417cc9c7acf9605200f4fa429bac Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
show more ...
|
#
49cfb138 |
| 02-Mar-2023 |
Riya Dixit <riyadixitagra@gmail.com> |
PLDM: Implementing Phosphor-Logging/LG2 logging
This commit adds changes in PLDM for implementing structured LG2 logging, thereby moving away from std::cout/cerr practice of logging which are output
PLDM: Implementing Phosphor-Logging/LG2 logging
This commit adds changes in PLDM for implementing structured LG2 logging, thereby moving away from std::cout/cerr practice of logging which are output streams and not logging mechanism.
PLDM now can make use of lg2 features like accurate CODE LINE Number and CODE_FUNCTION Name and better detailing in json object values which can be used in log tracking.
More detailed logging change: https://gist.github.com/riyadixitagra/c251685c1ba84248181891f7bc282395
Tested: Ran a power off, on, cycle, and reset-reload.
Change-Id: I0485035f15f278c3fd172f0581b053c1c37f3a5b Signed-off-by: Riya Dixit <riyadixitagra@gmail.com>
show more ...
|
#
5f213471 |
| 29-Aug-2022 |
Pavithra Barithaya <pavithra.b@ibm.com> |
PLDM : fix the invalid effecter and sensor PDRs
The LED effecter and sensor PDRs where created even when the FRU or the entity path was not present which puts the entity ID in the PDR as 0. This com
PLDM : fix the invalid effecter and sensor PDRs
The LED effecter and sensor PDRs where created even when the FRU or the entity path was not present which puts the entity ID in the PDR as 0. This commit fixes that issue.
Change-Id: I70f1838cfe613a4f11432105b793e465e8fa8adb Signed-off-by: Pavithra Barithaya <pavithra.b@ibm.com>
show more ...
|
#
c453e164 |
| 21-Dec-2022 |
George Liu <liuxiwei@inspur.com> |
libpldm: Correct reference to libpldm header files
When relying on header files from external libraries, #include<> should be used instead of #include "" to avoid ambiguity.
Tested: Built pldm succ
libpldm: Correct reference to libpldm header files
When relying on header files from external libraries, #include<> should be used instead of #include "" to avoid ambiguity.
Tested: Built pldm successfully after enabling ibm-oem
Signed-off-by: George Liu <liuxiwei@inspur.com> Change-Id: Ia1997de7e0f61564055bbd837f4e24c8f14e55a5
show more ...
|
#
cc5f1586 |
| 29-Sep-2021 |
Manojkiran Eda <manojkiran.eda@gmail.com> |
Make Terminus ID & Terminus Handle configurable
The current pldm code hardcoded the terminus id and the terminus handles, making it configurable so that the oem vendors can set them as per thier nee
Make Terminus ID & Terminus Handle configurable
The current pldm code hardcoded the terminus id and the terminus handles, making it configurable so that the oem vendors can set them as per thier need in the bitbake meta data.
Also,in the current state the FRU record set PDR's and the Sensor/Effecter PDR's are generated with terminus handle 0, but the terminus locator PDR is hardcoded with handle 1. This commit also fixes that behaviour.
Tested :
1. Terminus locator PDR { "nextRecordHandle": 89, "responseCount": 19, "recordHandle": 88, "PDRHeaderVersion": 1, "PDRType": "Terminus Locator PDR", "recordChangeNumber": 0, "dataLength": 9, "PLDMTerminusHandle": 1, "validity": "valid", "TID": 1, "containerID": 0, "terminusLocatorType": "MCTP_EID", "terminusLocatorValueSize": 1, "EID": 8 } 2. FRU record set PDR { "nextRecordHandle": 77, "responseCount": 20, "recordHandle": 76, "PDRHeaderVersion": 1, "PDRType": "FRU Record Set PDR", "recordChangeNumber": 0, "dataLength": 10, "PLDMTerminusHandle": 1, "FRURecordSetIdentifier": 76, "entityType": "[Physical] Slot", "entityInstanceNumber": 12, "containerID": 3 } 3. Sensor PDR { "nextRecordHandle": 208, "responseCount": 28, "recordHandle": 207, "PDRHeaderVersion": 1, "PDRType": "State Sensor PDR", "recordChangeNumber": 0, "dataLength": 18, "PLDMTerminusHandle": 1, "sensorID": 2, "entityType": "[Physical] External Environment", "entityInstanceNumber": 0, "containerID": 1, "sensorInit": "noInit", "sensorAuxiliaryNamesPDR": false, "compositeSensorCount": 1, "stateSetID[0]": "Health State(1)", "possibleStatesSize[0]": 2, "possibleStates[0]": [ "Normal(1)", "Upper Fatal(9)" ] } 4. Effecter PDR { "nextRecordHandle": 142, "responseCount": 29, "recordHandle": 141, "PDRHeaderVersion": 1, "PDRType": "State Effecter PDR", "recordChangeNumber": 0, "dataLength": 19, "PLDMTerminusHandle": 1, "effecterID": 53, "entityType": "[Physical] Fan", "entityInstanceNumber": 1, "containerID": 3, "effecterSemanticID": 0, "effecterInit": "noInit", "effecterDescriptionPDR": false, "compositeEffecterCount": 1, "stateSetID[0]": "Identify State(17)", "possibleStatesSize[0]": 1, "possibleStates[0]": [ "Identify State Unasserted(1)", "Identify State Asserted(2)" ] }
Signed-off-by: Manojkiran Eda <manojkiran.eda@gmail.com> Change-Id: I68d1c5c121b9389cc9b89dde9f1a8d8679b068f1
show more ...
|
#
5079ac4a |
| 19-Aug-2021 |
Brad Bishop <bradleyb@fuzziesquirrel.com> |
treewide: remove 'using namespace' from headers
Using namespace at global scope in a header file violates the cpp core guidelines. Quoting the guidelines:
"Doing so takes away an #includer’s abi
treewide: remove 'using namespace' from headers
Using namespace at global scope in a header file violates the cpp core guidelines. Quoting the guidelines:
"Doing so takes away an #includer’s ability to effectively disambiguate and to use alternatives. It also makes #included headers order-dependent as they might have different meaning when included in different orders."
For further reading: https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rs-using-directive
The guidelines don't call out using using namespace from namespace scope, but it is only marginally less problematic and still unexpected, so this patch removes those as well.
The process used to do the update is roughly:
1 - git grep 'using namespace' **.hpp 2 - For each instance, remove the offending 'using namespace' line 3 - build 4 - add 'using namespace' to cpp files or fully resolve types in hpp files until the project builds again.
Further cleanup is possible - for example cpp files could be scrubbed for unnecessary namespace qualification - this was not done here to make review as simple as possible.
Change-Id: I4931f5e78a1b5b74b4a4774c035a549f4d59b91a Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
show more ...
|
#
bcf91acc |
| 14-Mar-2021 |
Manojkiran Eda <manojkiran.eda@gmail.com> |
Fix a possible null pointer dereference
- This commit would fix a potential null pointer dereference.
Signed-off-by: Manojkiran Eda <manojkiran.eda@gmail.com> Change-Id: Ic323bde2c4bd35c35132e43104
Fix a possible null pointer dereference
- This commit would fix a potential null pointer dereference.
Signed-off-by: Manojkiran Eda <manojkiran.eda@gmail.com> Change-Id: Ic323bde2c4bd35c35132e4310466cd6ae7ec7aeb Signed-off-by: George Liu <liuxiwei@inspur.com>
show more ...
|
#
821ebc47 |
| 26-Jan-2021 |
George Liu <liuxiwei@inspur.com> |
libpldmresponder: Create default D-Bus object when generate PDR
In order to make each sensor correspond to its D-Bus object, on a system where the D-Bus object path does not exist, when the D-Bus ob
libpldmresponder: Create default D-Bus object when generate PDR
In order to make each sensor correspond to its D-Bus object, on a system where the D-Bus object path does not exist, when the D-Bus object specified here can not be found, a default D-Bus object should be created.
Tested: Before: When the number of composite sensors is inconsistent with the number of D-Bus objects, the wrong D-Bus object will be obtained through the SensorID. After: The number of composite sensors is the same as the number of D-Bus objects, and the correct D-Bus object can be obtained through the GetStateSensorReadings command.
Signed-off-by: George Liu <liuxiwei@inspur.com> Change-Id: Ib35fc97471a427e50406c57fed2bd66b51330b79
show more ...
|
#
c4ea6a90 |
| 14-Jul-2020 |
George Liu <liuxiwei@inspur.com> |
Mechanism to associate sensor/effecter to FRU entity
The "entity_path" key is defined in PDR JSONs and will have an FRU D-Bus object path as the value, if this is present, the entity type, instance,
Mechanism to associate sensor/effecter to FRU entity
The "entity_path" key is defined in PDR JSONs and will have an FRU D-Bus object path as the value, if this is present, the entity type, instance, and container id should be associate with the FRU entity.
Tested: test JSON with https://gist.github.com/lxwinspur/7225a9301ccfcbff1f6549203405b4fa after executing the following command, get the entity information from FruHandler entity_type = 120 entity_instance_num = 1 entity_container_id = 0
Signed-off-by: George Liu <liuxiwei@inspur.com> Change-Id: I019f9a0b9d4dbec20a71dfd797f30ac8f57f67b8
show more ...
|
#
adbe1726 |
| 09-May-2020 |
George Liu <liuxiwei@inspur.com> |
Add parsing JSON for State Sensor PDR
According to spec DSP0248_1.2.0: 28.6 and sensor_pdr.json, parse JSON and generate PDR structure.
Tested with JSON file: https://gist.github.com/lxwinspur/6a40
Add parsing JSON for State Sensor PDR
According to spec DSP0248_1.2.0: 28.6 and sensor_pdr.json, parse JSON and generate PDR structure.
Tested with JSON file: https://gist.github.com/lxwinspur/6a40abea7330c25e4d49826e890c4be9
Signed-off-by: George Liu <liuxiwei@inspur.com> Change-Id: I654913b6fa07f34f405f7dd41a5f1ac0ae2706fb
show more ...
|
#
12afe110 |
| 25-May-2020 |
Sampa Misra <sampmisr@in.ibm.com> |
pdr: Implement terminus locator PDR for BMC
This commit creates the TL PDR for the BMC. The TID and MCTP EID for BMC is static, 1 and 8 respectively. BMC PDRs are assigned the value of 1 for PLDMTer
pdr: Implement terminus locator PDR for BMC
This commit creates the TL PDR for the BMC. The TID and MCTP EID for BMC is static, 1 and 8 respectively. BMC PDRs are assigned the value of 1 for PLDMTerminusHandle. Added the parser for terminus locator PDR in pldmtool.
Tested:
/tmp/pldmtool platform GetPdr -d 0
nextRecordHandle: 2 responseCount: 19 recordHandle: 1 PDRHeaderVersion: 1 PDRType: 1 recordChangeNumber: 0 dataLength: 9
PLDMTerminusHandle: 1 validity: valid TID: 1 containerID: 0 terminusLocatorType: MCTP_EID terminusLocatorValueSize: 1 EID: 8
Change-Id: I596301d6c676b450ae1f2cef872966b4c40d8bae Signed-off-by: Tom Joseph <tomjoseph@in.ibm.com> Signed-off-by: Sampa Misra <sampmisr@in.ibm.com>
show more ...
|
#
36e81352 |
| 01-Jul-2020 |
George Liu <liuxiwei@inspur.com> |
libpldmresponder: create PDR when the D-Bus object path exists
On a system where this D-Bus object path does not exist, it should not create a PDR when the D-Bus object specified here is not found.
libpldmresponder: create PDR when the D-Bus object path exists
On a system where this D-Bus object path does not exist, it should not create a PDR when the D-Bus object specified here is not found.
Tested: In the PDR config files, the PDR is successfully created when the objectPath of the D-Bus exists, otherwise, skipped the current config and the PDR is not created.
Signed-off-by: George Liu <liuxiwei@inspur.com> Change-Id: Ib59fa79cc28d5712161bfb971c37c86c363bafb0
show more ...
|
#
6492f524 |
| 15-Jun-2020 |
George Liu <liuxiwei@inspur.com> |
clang-format: update to latest from docs repo
Since `Cpp11` is an alias for `Latest` and we should tend towards using the latest C++ standard, update the C++ standard to Latest.
https://github.com/
clang-format: update to latest from docs repo
Since `Cpp11` is an alias for `Latest` and we should tend towards using the latest C++ standard, update the C++ standard to Latest.
https://github.com/llvm/llvm-project/commit/e5032567903de19962333c4bf7d2edceaf4f9824#diff-b49a097415dff2837d9626d422c58ba8R82 https://github.com/openbmc/docs/blob/master/style/cpp/.clang-format
Also, other OpenBMC repos are doing the same.
Signed-off-by: George Liu <liuxiwei@inspur.com> Change-Id: I449e88bb4e1e262060110e1a8f3e8db3ddfc74cf
show more ...
|
#
a2870726 |
| 10-Feb-2020 |
George Liu <liuxiwei@inspur.com> |
pldm: Optimized parsing of PDR JSON files
Move the generateStateEffecterRepo method of parse JSON to pdr_state_effecter.hpp.
Tested with JSON files: https://gist.github.com/lxwinspur/2c3fd68cdb35e
pldm: Optimized parsing of PDR JSON files
Move the generateStateEffecterRepo method of parse JSON to pdr_state_effecter.hpp.
Tested with JSON files: https://gist.github.com/lxwinspur/2c3fd68cdb35e06480c4a5f7890e3a06#file-effecter_pdr-json.
pldmtool platform GetPDR -d 1 Encode request successfully Request Message: 08 01 80 02 51 01 00 00 00 00 00 00 00 01 80 00 00 00 Success in creating the socket : RC = 3 Success in connecting to socket : RC = 0 Success in sending message type as pldm to mctp : RC = 0 Write to socket successful : RC = 18 Total length:18 Loopback response message: 08 01 80 02 51 01 00 00 00 00 00 00 00 01 80 00 00 00 On first recv(),response == request : RC = 0 Total length: 46 Shutdown Socket successful : RC = 0 Response Message: 08 01 00 02 51 00 02 00 00 00 00 00 00 00 01 1d 00 01 00 00 00 01 0b 00 00 13 00 00 00 01 00 21 00 00 00 00 00 00 00 00 00 01 c4 00 01 06 Parsed Response Msg: nextRecordHandle: 2 responseCount: 29 recordHandle: 1 PDRHeaderVersion: 1 PDRType: 11 recordChangeNumber: 0 dataLength: 19 PLDMTerminusHandle: 0 effecterID: 1 entityType: 33 entityInstanceNumber: 0 containerID: 0 effecterSemanticID: 0 effecterInit: 0 effecterDescriptionPDR: false compositeEffecterCount: 1 stateSetID: 196 possibleStatesSize: 1 possibleStates: 6
Signed-off-by: George Liu <liuxiwei@inspur.com> Change-Id: I8428ed042fb0a90ecc448073f059f66360066306
show more ...
|