- Jul 10, 2017
-
-
Jeff Vander Stoep authored
Logs indicate that all processes that require read access have already been granted it. Bug: 28760354 Test: build policy Merged-In: I5826c45f54af32e3d4296df904c8523bb5df5e62 Change-Id: I5826c45f54af32e3d4296df904c8523bb5df5e62
-
Jeff Vander Stoep authored
Address the "granted" permissions observed in the logs including: tcontext=uncrypt avc: granted { search } for comm="uncrypt" name="/" dev="mmcblk0p40" ino=2 scontext=u:r:uncrypt:s0 tcontext=u:object_r:cache_file:s0 tclass=dir tcontext=install_recovery avc: granted { search } for comm="applypatch" name="saved.file" scontext=u:r:install_recovery:s0 tcontext=u:object_r:cache_file:s0 tclass=dir avc: granted { read } for comm="applypatch" name="saved.file" dev="mmcblk0p6" ino=14 scontext=u:r:install_recovery:s0 tcontext=u:object_r:cache_file:s0 tclass=file avc: granted { getattr } for comm="applypatch" path="/cache/saved.file" dev="mmcblk0p6" ino=14 scontext=u:r:install_recovery:s0 tcontext=u:object_r:cache_file:s0 tclass=file tcontext=update_engine avc: granted { search } for comm="update_engine" name="cache" dev="sda35" ino=1409025 scontext=u:r:update_engine:s0 tcontext=u:object_r:cache_file:s0 tclass=dir" avc: granted { read } for comm="update_engine" name="update.zip" dev="sda35" ino=1409037 scontext=u:r:update_engine:s0 tcontext=u:object_r:cache_file:s0:c512,c768 tclass=file avc: granted { read } for comm="update_engine" name="cache" dev="dm-0" ino=16 scontext=u:r:update_engine:s0 tcontext=u:object_r:cache_file:s0 tclass=lnk_file Bug: 28760354 Test: build policy. Merged-In: Ia13fe47268df904bd4f815c429a0acac961aed1e Change-Id: Ia13fe47268df904bd4f815c429a0acac961aed1e
-
Jeff Vander Stoep authored
Logs indicate that all processes that require access already have it. Bug: 28760354 Test: build Merged-In: I3dfa16bf4fba7f653c5f8525e8c565e9e24334a8 Change-Id: I3dfa16bf4fba7f653c5f8525e8c565e9e24334a8
-
Jeff Vander Stoep authored
Clean up "granted" logspam. Grant the observered audited permissions including: tcontext=cache_file avc: granted { getattr } for comm="df" path="/cache" dev="mmcblk0p9" ino=2 scontext=u:r:dumpstate:s0 tcontext=u:object_r:cache_file:s0 tclass=dir avc: granted { search } for comm="Binder:8559_2" name="cache" dev="sda13" ino=1654785 scontext=u:r:dumpstate:s0 tcontext=u:object_r:cache_file:s0 tclass=dir avc: granted { read } for comm="Binder:8559_2" name="cache" dev="dm-0" ino=23 scontext=u:r:dumpstate:s0 tcontext=u:object_r:cache_file:s0 tclass=lnk_file tcontext=proc avc: granted { getattr } for comm="Binder:14529_2" path="/proc/sys/fs/pipe-max-size" dev="proc" ino=247742 scontext=u:r:dumpstate:s0 tcontext=u:object_r:proc:s0 tclass=file avc: granted { read } for comm="Binder:22671_2" name="cmdline" dev="proc" ino=4026532100 scontext=u:r:dumpstate:s0 tcontext=u:object_r:proc:s0 tclass=file avc: granted { read open } for comm="dumpstate" path="/proc/sys/fs/pipe-max-size" dev="proc" ino=105621 scontext=u:r:dumpstate:s0 tcontext=u:object_r:proc:s0 tclass=file tcontext=sysfs avc: granted { read open } for comm="Binder:14459_2" path="/sys/devices/virtual/block/md0/stat" dev="sysfs" ino=51101 scontext=u:r:dumpstate:s0 tcontext=u:object_r:sysfs:s0 tclass=file avc: granted { read open } for comm="Binder:21377_2" path="/sys/devices/soc/1da4000.ufshc/host0/target0:0:0/0:0:0:1/block/sdb/sdb1" dev="sysfs" ino=40888 scontext=u:r:dumpstate:s0 tcontext=u:object_r:sysfs:s0 tclass=dir avc: granted { getattr } for comm="dumpstate" dev="sysfs" ino=40456 scontext=u:r:dumpstate:s0 tcontext=u:object_r:sysfs:s0 tclass=file tcontext=proc_meminfo avc: granted { read } for comm="top" name="meminfo" dev="proc" ino=4026532106 scontext=u:r:dumpstate:s0 tcontext=u:object_r:proc_meminfo:s0 tclass=file avc: granted { read open } for comm="top" path="/proc/meminfo" dev="proc" ino=4026532106 scontext=u:r:dumpstate:s0 tcontext=u:object_r:proc_meminfo:s0 tclass=file tcontext=rootfs avc: granted { getattr } for comm="df" path="/" dev="dm-0" ino=2 scontext=u:r:dumpstate:s0 tcontext=u:object_r:rootfs:s0 tclass=dir avc: granted { getattr } for comm="ip" path="/vendor" dev="rootfs" ino=99 scontext=u:r:dumpstate:s0 tcontext=u:object_r:rootfs:s0 tclass=lnk_file tcontext=selinuxfs avc: granted { getattr } for comm="df" path="/sys/fs/selinux" dev="selinuxfs" ino=1 scontext=u:r:dumpstate:s0 tcontext=u:object_r:selinuxfs:s0 tclass=dir tcontext=system_file avc: granted { read open } for comm="dumpstate" path="/system/lib64/hw" dev="dm-0" ino=1947 scontext=u:r:dumpstate:s0 tcontext=u:object_r:system_file:s0 tclass=dir tcontext=system_data_file avc: granted { read } for comm="ip" path="/data/misc/net/rt_tables" dev="sda10" ino=1458261 scontext=u:r:dumpstate:s0 tcontext=u:object_r:system_data_file:s0 tclass=file avc: granted { getattr } for comm="ip" path="/data/misc/net/rt_tables" scontext=u:r:dumpstate:s0 tcontext=u:object_r:system_data_file:s0 tclass=file Bug: 28760354 Test: Build policy Change-Id: Iae69f710d6b6dc6158cf6bb6ff61168c8df11263
-
Jeff Vander Stoep authored
Addresses: avc: granted { read } for name="pipe-max-size" dev="proc" ino=470942 scontext=u:r:dumpstate:s0 tcontext=u:object_r:proc:s0 tclass=file avc: granted { read open } for path="/proc/sys/fs/pipe-max-size" dev="proc" ino=470942 scontext=u:r:dumpstate:s0 tcontext=u:object_r:proc:s0 tclass=file Test: build policy Change-Id: I7d8721c73c4f3c51b3885a97c697510e61d1221b (cherry picked from commit f44002b3)
-
- Jul 06, 2017
-
-
Jeff Vander Stoep authored
Address "granted" audit messages for dumpstate use of df. avc: granted { getattr } for comm="df" path="/mnt" dev="tmpfs" scontext=u:r:dumpstate:s0 tcontext=u:object_r:tmpfs:s0 tclass=dir avc: granted { search } for comm="df" name="/" dev="tmpfs" scontext=u:r:dumpstate:s0 tcontext=u:object_r:tmpfs:s0 tclass=dir Bug: 28760354 Test: Build, check logs. Change-Id: I920948a5f0bce1b4bd2f15779730df8b3b1fea5a
-
- Jul 03, 2017
-
-
Jeff Vander Stoep authored
avc: granted { search } scontext=u:r:recovery:s0 tcontext=u:object_r:cache_file:s0 tclass=dir avc: granted { getattr } scontext=u:r:recovery:s0 tcontext=u:object_r:rootfs:s0 tclass=file avc: granted { read } scontext=u:r:recovery:s0 tcontext=u:object_r:rootfs:s0 tclass=file avc: granted { read open } scontext=u:r:recovery:s0 tcontext=u:object_r:rootfs:s0 tclass=file avc: granted { read } scontext=u:r:recovery:s0 tcontext=u:object_r:sysfs:s0 tclass=file avc: granted { read open } scontext=u:r:recovery:s0 tcontext=u:object_r:sysfs:s0 tclass=file avc: granted { search } scontext=u:r:recovery:s0 tcontext=u:object_r:tmpfs:s0 tclass=dir Fixes: 62619253 Test: policy builds, no more "granted" messages in dmesg for recovery. Merged-In: I3f6d8ceee80307a01a8fd40cb4f8362a9825b1a3 Change-Id: I3f6d8ceee80307a01a8fd40cb4f8362a9825b1a3 (cherry picked from commit ea1d6e7d)
-
Jeff Sharkey authored
When installd clears cached files on external storage, the sdcardfs kernel filesystem needs to be kept in the loop to release any cached dentries that it's holding onto. (Otherwise the underlying disk space isn't actually released.) installd can already delete the underlying files directly (via the media_rw_data_file rules), so this technically isn't expanding its capabilities. avc: granted { search } for name="/" dev="tmpfs" ino=6897 scontext=u:r:installd:s0 tcontext=u:object_r:tmpfs:s0 tclass=dir avc: denied { open } for path="/mnt/runtime/default/emulated/0/Android/data" dev="sdcardfs" ino=589830 scontext=u:r:installd:s0 tcontext=u:object_r:sdcardfs:s0 tclass=dir permissive=1 avc: denied { write } for name="com.google.android.inputmethod.japanese" dev="sdcardfs" ino=590040 scontext=u:r:installd:s0 tcontext=u:object_r:sdcardfs:s0 tclass=dir permissive=0 avc: denied { remove_name } for name="cache_r.m" dev="sdcardfs" ino=589868 scontext=u:r:installd:s0 tcontext=u:object_r:sdcardfs:s0 tclass=dir permissive=0 avc: denied { getattr } for path="/mnt/runtime/default/emulated/0/Android/data/.nomedia" dev="sdcardfs" ino=589831 scontext=u:r:installd:s0 tcontext=u:object_r:sdcardfs:s0 tclass=file permissive=1 Test: cts-tradefed run commandAndExit cts-dev -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.StorageHostTest Bug: 37486230 Change-Id: Icfd00a9ba379b1f50c48fe85849304cf9859bcb2 (cherry picked from commit 72f4c619)
-
Jeff Vander Stoep authored
Logs show that only dumpstate requires access. avc: granted { read open } for comm="screencap" path="/dev/ion" dev="tmpfs" ino=14324 scontext=u:r:dumpstate:s0 tcontext=u:object_r:ion_device:s0 tclass=chr_file avc: granted { ioctl } for comm="screencap" path="/dev/ion" dev="tmpfs" ino=14324 ioctlcmd=4906 scontext=u:r:dumpstate:s0 tcontext=u:object_r:ion_device:s0 tclass=chr_file Grant ion permission to dumpstate which uses it for screencap feature. Bug: 28760354 Test: build. Check logs. Change-Id: I6435b7dbf7656669dac5dcfb205cf0aeda93991b
-
- Jul 01, 2017
-
-
Jeff Vander Stoep authored
Logs indicate no usage of these permissions. Bug: 28760354 Test: check logs. Change-Id: I3d75aea6afd4e326f705274ab2790e5d0bbdb367
-
Jeff Vander Stoep authored
Logs indicate apps, system_server, and runas are the only domains that require this permission. Bug: 28760354 Test: check logs. Change-Id: I93dc53ec2d892bb91c0cd6f5d7e9cbf76b9bcd9f
-
Andres Oportus authored
Bug: 62706738 Bug: 34133340 Test: Check that uid_time_in_state can't be read from the shell without root permissions and that "dumpsys batterystats --checkin| grep ctf" shows frequency data (system_server was able to read uid_time_in_state) Change-Id: Ic6a54da4ebcc9e10b0e3af8f14a45d7408e8686e (cherry picked from commit 4dc88795)
-
Tomasz Wasilczyk authored
Bug: b/36863239 Test: manual Change-Id: I7e929926efbb1570ea9723ef3810a511c71dc11a (cherry picked from commit 38f0928f)
-
- Jun 26, 2017
-
-
Stephen Smalley authored
Linux kernel commit da69a5306ab9 ("selinux: support distinctions among all network address families") triggers a build error if a new address family is added without defining a corresponding SELinux security class. As a result, the smc_socket class was added to the kernel to resolve a build failure as part of merge commit 3051bf36c25d that introduced AF_SMC circa Linux 4.11. Define this security class and its access vector, add it to the socket_class_set macro, and exclude it from webview_zygote like other socket classes. Test: Policy builds Change-Id: Idbb8139bb09c6d1c47f1a76bd10f4ce1e9d939cb Signed-off-by:
Stephen Smalley <sds@tycho.nsa.gov>
-
- Jun 19, 2017
-
-
Yabin Cui authored
run-as uses file descriptor created by adbd when running `adb shell -t run-as xxx`. It produces audit warnings like below: [ 2036.555371] c1 509 type=1400 audit(1497910817.864:238): avc: granted { use } for pid=4945 comm="run-as" path="/dev/pts/0" dev="devpts" ino=3 scontext=u:r:runas:s0 tcontext=u:r:adbd:s0 tclass=fd Bug: http://b/62358246 Test: test manually that the warning disappears. Change-Id: I19023ac876e03ce2afe18982fe753b07e4c876bb
-
- Jun 13, 2017
-
-
Tom Cherry authored
In libprocessgroup, we want to only send signals once to processes, particularly for SIGTERM. We must send the signal both to all processes within a POSIX process group and a cgroup. To ensure that we do not duplicate the signals being sent, we check the processes in the cgroup to see if they're in the POSIX process groups that we're killing. If they are, we skip sending a second signal. This requires getpgid permissions, hence this SELinux change. avc: denied { getpgid } for pid=797 comm="ActivityManager" scontext=u:r:system_server:s0 tcontext=u:r:untrusted_app_25:s0:c512,c768 tclass=process permissive=1 avc: denied { getpgid } for pid=797 comm="ActivityManager" scontext=u:r:system_server:s0 tcontext=u:r:untrusted_app_25:s0:c512,c768 tclass=process permissive=1 avc: denied { getpgid } for pid=797 comm="ActivityManager" scontext=u:r:system_server:s0 tcontext=u:r:system_app:s0 tclass=process permissive=1 avc: denied { getpgid } for pid=797 comm="ActivityManager" scontext=u:r:system_server:s0 tcontext=u:r:system_app:s0 tclass=process permissive=1 avc: denied { getpgid } for pid=1 comm="init" scontext=u:r:init:s0 tcontext=u:r:zygote:s0 tclass=process permissive=1 avc: denied { getpgid } for pid=1 comm="init" scontext=u:r:init:s0 tcontext=u:r:zygote:s0 tclass=process permissive=1 avc: denied { getpgid } for pid=1 comm="init" scontext=u:r:init:s0 tcontext=u:r:system_server:s0 tclass=process permissive=1 avc: denied { getpgid } for pid=1 comm="init" scontext=u:r:init:s0 tcontext=u:r:system_server:s0 tclass=process permissive=1 Bug: 37853905 Bug: 62418791 Test: Boot, kill zygote, reboot Change-Id: Ib6c265dbaac8833c47145ae28fb6594ca8545570
-
Tomonori Nanbu authored
Add sepolicy to hal_wifi to access /proc/modules to check if Wi-Fi driver is loaded. Bug: 62013623 Change-Id: Ib700170095b183a1e0e6a36b64e7c65655174f21
-
- Jun 12, 2017
-
-
Joel Scherpelz authored
This is used to persist RFC 7217 stable secrets across device reboots. First submit caused a merge conflict. This revision replaces netd_prop with a more unique name netd_stable_secret_prop. Test: as follows - Manually tested that stable_secret is generated on first use and persists until reset of user data partition (factory reset). - Tested that "adb shell getprop" was denied access to persist.netd.stable_secret after running "adb unroot". Bug: 17613910 Change-Id: I0a609c724799a15b1926e62534c16810d34f2275
-
- Jun 08, 2017
-
-
Bartosz Fabianowski authored
This broke the build on master. See b/17613910#comment17 for details. This reverts commit ef1fd98b. Change-Id: I11f7d463061a9b6340c11827135586266e26f016
-
Joel Scherpelz authored
This is used to persist RFC 7217 stable secrets across device reboots. Test: as follows - Manually tested that stable_secret is generated on first use and persists until reset of user data partition (factory reset). - Tested that "adb shell getprop" was denied access to persist.netd.stable_secret after running "adb unroot". Bug: 17613910 Change-Id: I4dad00fb189d697aceaffae49ad63987c7e45054
-
- Jun 06, 2017
-
-
Yabin Cui authored
This is to Allow commands like `adb shell run-as ...`. Bug: http://b/62358246 Test: run commands manually. Change-Id: I7bb6c79a6e27ff1224a80c6ddeffb7f27f492bb2
-
- Jun 05, 2017
-
-
Josh Gao authored
It appears that selinux requires the write permission to receive a writable pipe from dumpstate, for unclear reasons. Add the permission for now. Bug: http://b/62297059 Test: dumpstate Change-Id: I0f25682177115aacd5c2203ddc0008228b0380ad
-
- Jun 02, 2017
-
-
Josh Gao authored
Bug: http://b/62297059 Test: mma Change-Id: Ibcd93e5554a9c2dd75fbfb42294fbc9b96ebc8cc
-
- Jun 01, 2017
-
-
Neil Fuller authored
Add policy changes to enable a new service. The service is currently switched off in config, but this change is needed before it could be enabled. Bug: 31008728 Test: make droid Merged-In: I29c4509304978afb2187fe2e7f401144c6c3b4c6 Change-Id: I29c4509304978afb2187fe2e7f401144c6c3b4c6
-
- May 31, 2017
-
-
Narayan Kamath authored
Applications connect to tombstoned via a unix domain socket and request an open FD to which they can write their traces. This socket has a new label (tombstoned_java_trace_socket) and appdomain and system_server are given permissions to connect and write to it. Apps no longer need permissions to open files under /data/anr/ and these permissions will be withdrawn in a future change. Bug: 32064548 Test: Manual Merged-In: I70a3e6e230268d12b454e849fa88418082269c4f Change-Id: Ib4b73fc130f4993c44d96c8d68f61b6d9bb2c7d5
-
- May 26, 2017
-
-
Josh Gao authored
This reverts commit a015186f. Bug: http://b/62101480 Change-Id: I8e889e3d50cf1749168acc526f8a8901717feb46
-
- May 24, 2017
-
-
Josh Gao authored
Fix the following denial: avc: denied { append } for pid=1093 comm="mediaextractor" path="pipe:[68438]" dev="pipefs" ino=68438 scontext=u:r:mediaextractor:s0 tcontext=u:r:dumpstate:s0 tclass=fifo_file permissive=1 ppid=1 pcomm="init" pgid=1 pgcomm="init" Bug: http://b/38444258 Test: none Change-Id: I58162e3a28b744a58396e77d6b0e2becb5633d6a
-
- May 22, 2017
-
-
Jason Monk authored
Test: manual Bug: 37014702 Change-Id: Id43dc7a8506fe60015c2f82242ba45cf85d3e74b
-
- May 15, 2017
-
-
Alex Vakulenko authored
Specify per-service rules for PDX transport. Now being able to grant permissions to individual services provided by processes, not all services of a process. Also tighter control over which permissions are required for client and server for individual components of IPC (endpoints, channels, etc). Bug: 37646189 Change-Id: I78eb8ae8b6e08105666445a66bfcbd2f1d69d0ea Merged-Id: I78eb8ae8b6e08105666445a66bfcbd2f1d69d0ea
-
- May 11, 2017
-
-
Tom Cherry authored
This reverts commit 8c60f74d. Bug: 38242876 Change-Id: Iba5a94d16901dc0c52f1941972c26877baa4805c
-
- May 10, 2017
-
-
Tao Bao authored
This is needed for devices using configfs, where init listens for sys.usb.ffs.ready=1 to config usb_gadget. When recovery starts sideloading, minadbd (forked from recovery) sets the property to trigger that action. avc: denied { set } for property=sys.usb.ffs.ready pid=541 uid=0 gid=0 scontext=u:r:recovery:s0 tcontext=u:object_r:ffs_prop:s0 tclass=property_service Bug: 35803743 Test: Device shows up in sideload mode. Change-Id: Ie7f1224d3a8650160ac29811f73b8286fbced4f4
-
- May 08, 2017
-
-
Nick Kralevich authored
Remove SELinux access from domain_deprecated. Access to SELinux APIs can be granted on a per-domain basis. Remove appdomain access to SELinux APIs. SELinux APIs are not public and are not intended for application use. In particular, some exploits poll on /sys/fs/selinux/enforce to determine if the attack was successful, and we want to ensure that the behavior isn't allowed. This access was only granted in the past for CTS purposes, but all the relevant CTS tests have been moved to the shell domain. Bug: 27756382 Bug: 28760354 Test: Device boots and no obvious problems. No collected denials. Change-Id: Ide68311bd0542671c8ebf9df0326e512a1cf325b
-
Mark Salyzyn authored
In the init scripts for socket, the type can have a suffix of "+cred" to request that the socket be bound to report SO_PASSCRED credentials on socket transactions. Here we add socket setopt to selinux rules. Test: gTest logd-unit-tests --gtest_filter=logd.statistics right after boot (fails without logd.rc change) Bug: 37985222 Change-Id: I37cdf7eea93c3e8fa52964e765eaf3007e431b1f
-
- May 04, 2017
-
-
Mikhail Naganov authored
The following HAL methods use file descriptors to write dump info comprising audioflinger debug dump: IDevice.debugDump IEffectsFactory.debugDump IStream.debugDump Bug: 37993476 Test: check contents of media.audio_flinger section in a bugreport captured on Pixel device Change-Id: I77d347c019ac93c3ba0d54ce50f0fdc243b04685
-
Dimitry Ivanov authored
This is needed by linker to be able to load libraries from memfd which currently generated following denial: avc: denied { getattr } for path=2F6D656D66643A666F6F626172202864656C6574656429 dev="tmpfs" ino=902079 scontext=u:r:shell:s0 tcontext=u:object_r:shell_tmpfs:s0 tclass=file permissive=0 Bug: http://b/37245203 Bug: http://b/37916741 Test: builds Change-Id: I5b57b6cada50a62657c8daaaaaa56f1ee9cdb376 (cherry picked from commit a0d3ff8e)
-
- Apr 26, 2017
-
-
Jerry Zhang authored
These were missing when the sepolicy was migrated. Addresses denials: E SELinux : avc: denied { find } for service=drm.drmManager pid=11769 uid=10018 scontext=u:r:mediaprovider:s0:c512,c768 tcontext=u:object_r:drmserver_service:s0 tclass=service_manager W kworker/u16:2: type=1400 audit(0.0:1667): avc: denied { use } for path="/storage/emulated/0/DCIM/Camera/IMG_20170425_124723.jpg" dev="sdcardfs" ino=1032250 scontext=u:r:kernel:s0 tcontext=u:r:mediaprovider:s0:c512,c768 tclass=fd permissive=0 Bug: 37685394 Bug: 37686255 Test: Sync files Test: Open downloaded file Change-Id: Ibb02d233720b8510c3eec0463b8909fcc5bbb73d
-
- Apr 25, 2017
-
-
Ruchi Kandoi authored
Test: manual Bug: 37640900 Change-Id: I6987d60c1eb1578134b51f4e7417700fd462ba4d Signed-off-by:
Ruchi Kandoi <kandoiruchi@google.com>
-
- Apr 20, 2017
-
-
Jeff Vander Stoep authored
Remove neverallow exemption allowing other processes to run in the bluetooth app's selinux domain. The bluetooth domain is intended to host the zygote spawned bluetooth app. It is not intended to host other bluetooth related processes. Please define new domains for these processes. Test: build Marlin Change-Id: I1fd3dd0fe85f73457d77b63a65b4307821cbd41c
-
Neil Fuller authored
Allow the shell user to run tzdatacheck, which is required to enable a new host side test. This change also adds some additional checks to tzdatacheck.te to ensure that OEMs opening up permissions further don't accidentally create a security hole. Bug: 31008728 Test: Ran CTS Change-Id: I6ebfb467526b6b2ea08f891420eea24c81ed1e36
-
- Apr 19, 2017
-
-
Jeff Hao authored
The PackageManager now passes previous code paths to dex2oat as shared libraries. dex2oat needs extra permissions in order to access and open the oat files of these libraries (if they were compiled). Part of a multi-project change. Bug: 34169257 Test: cts-tradefed run singleCommand cts -d --module CtsAppSecurityHostTestCases -t android.appsecurity.cts.SplitTests Merged-In: I7b9cfd7f3c3509f3e41f0590ab650bd85faab340 (cherry-picked from commit 1103f963) Change-Id: I6d69d463af7a0a93391dd4b7edd5b700012ba58c
-