Pierre-Eric Pelloux-Prayer
9b0ffa9ecd
egl/dri2: implement createImageFromDmaBufs3
...
And refuse to import image with protected_content enabled.
We don't want a compositor to import an encrypted buffer in a image
without the ProtectedContent attribute enabled, because that will
lead to incorrect display.
Similarly, if the compositor thinks the image is encrypted, we fail
the import if the buffer is not.
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5096 >
2020-11-02 10:15:47 +01:00
Pierre-Eric Pelloux-Prayer
2aff88a945
egl: handle EGL_PROTECTED_CONTENT_EXT for eglImage
...
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5096 >
2020-11-02 10:15:47 +01:00
Pierre-Eric Pelloux-Prayer
bd182777c8
egl: implement EGL_EXT_protected_surface support
...
Reviewed-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5096 >
2020-11-02 10:15:47 +01:00
Mauro Rossi
bb42deee36
egl/android: HAVE_DRM_GRALLOC path fixes (v2)
...
Fixes the following building errors:
external/mesa/src/egl/drivers/dri2/platform_android.c:1001:9: error: use of undeclared identifier 'dri2_img'
dri2_img);
^
external/mesa/src/egl/drivers/dri2/platform_android.c:1059:17: error: incompatible pointer types assigning to '__DRIimage *' (aka 'struct __DRIimageRec *') from '_EGLImage *' (aka 'struct _egl_image *') [-Werror,-Wincompatible-pointer-types]
dri_image = droid_create_image_from_name(disp, buf);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2 errors generated.
(v2) Changelog:
- Pass NULL instead of dri_image as argument of createImageFromName()
- Delete the unused dri_image variable
Fixes: 5c8b67ed
("egl/android: Simplify droid_create_image_from_name() path")
Signed-off-by: Mauro Rossi <issor.oruam@gmail.com>
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6626 >
2020-09-07 23:33:15 +02:00
Andrey Vostrikov
42420730d1
egl/x11: Free memory allocated for reply structures on error
...
This patch fixes memory leaks when reply is allocated and is not freed
on error execution path.
Found by enabling address sanitizer on simple EGL app.
```c
int main()
{
EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
EGLint major;
EGLint minor;
if (!eglInitialize(display, &major, &minor))
{
return 1;
}
eglTerminate(display);
return 0;
}
```
Compiled with: `gcc testme.c -o testme -fsanitize=address -lasan -lEGL`
Execution environment:
- Windows 10, VMWare Player 15.5.2 build-15785246 without 3D accelaration
- Guest OS: OpenSUSE Leap 15.2
- Mesa 19.3.4
Program output:
```sh
ASAN_OPTIONS=fast_unwind_on_malloc=0 ./testme
libEGL warning: DRI2: failed to authenticate
==52510==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 32 byte(s) in 1 object(s) allocated from:
#0 0x7fa62315f500 in malloc (/usr/lib64/libasan.so.4+0xdc500)
#1 0x7fa61e12d86b (/usr/lib64/libxcb.so.1+0xf86b)
#2 0x7fa61e12b5c7 (/usr/lib64/libxcb.so.1+0xd5c7)
#3 0x7fa61e12cc3e (/usr/lib64/libxcb.so.1+0xec3e)
#4 0x7fa61e12cd4f in xcb_wait_for_reply (/usr/lib64/libxcb.so.1+0xed4f)
#5 0x7fa61ebe02a5 (/usr/lib64/libEGL_mesa.so.0+0x202a5)
#6 0x7fa61ebdb5ca (/usr/lib64/libEGL_mesa.so.0+0x1b5ca)
#7 0x7fa61ebd750c (/usr/lib64/libEGL_mesa.so.0+0x1750c)
#8 0x7fa61ebd7554 (/usr/lib64/libEGL_mesa.so.0+0x17554)
#9 0x7fa61ebd1107 (/usr/lib64/libEGL_mesa.so.0+0x11107)
#10 0x400856 in main (/home/user/testme+0x400856)
#11 0x7fa622ad8349 in __libc_start_main (/lib64/libc.so.6+0x24349)
#12 0x4006e9 in _start (/home/user/testme+0x4006e9)
SUMMARY: AddressSanitizer: 32 byte(s) leaked in 1 allocation(s).
```
Signed-off-by: Andrey Vostrikov <av.linux.dev@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Eric Engestrom <eric@engestrom.ch>
Cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6611 >
2020-09-06 13:36:46 +00:00
Eric Engestrom
8e259dad4c
egl/x11: simplify dri2_initialize_x11()
...
eglInitialize() already handles the "retry using the software path"
logic, there's no need to repeat it here.
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6353 >
2020-09-01 18:31:51 +00:00
Eric Engestrom
bd385c424b
egl/wayland: simplify dri2_initialize_wayland()
...
eglInitialize() already handles the "retry using the software path"
logic, there's no need to repeat it here.
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6353 >
2020-09-01 18:31:51 +00:00
Eric Engestrom
f7e0cdcf1a
egl/surfaceless: simplify dri2_initialize_surfaceless()
...
eglInitialize() already handles the "retry using the software path"
logic, there's no need to repeat it here.
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6353 >
2020-09-01 18:31:51 +00:00
Eric Engestrom
83b5c1abc6
egl/android: simplify dri2_initialize_android()
...
eglInitialize() already handles the "retry using the software path"
logic, there's no need to repeat it here.
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6353 >
2020-09-01 18:31:51 +00:00
Eric Engestrom
f4c1c21306
egl: simplify eglSwapInterval() fallback logic
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6153 >
2020-08-28 08:55:06 +00:00
Eric Engestrom
1d3fb7a7a7
egl: inline eglSwapInterval() fallback
...
It's literally just a `return EGL_TRUE`, there's no need to have
a function for that.
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6153 >
2020-08-28 08:55:06 +00:00
Eric Engestrom
98222db0da
egl: document which driver hooks are only required by extensions
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Frank Binns <frank.binns@imgtec.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6130 >
2020-08-27 23:06:55 +02:00
Eric Engestrom
cf663d0d11
egl: move extension driver functions after core functions
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Frank Binns <frank.binns@imgtec.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6130 >
2020-08-27 23:06:47 +02:00
Eric Engestrom
ab2e59750f
docs/egl: add some more documentation
...
Inspired by `src/egl/main/README.txt`, which was severely outdated, but
still contained valid information.
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Frank Binns <frank.binns@imgtec.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6130 >
2020-08-27 23:06:28 +02:00
Eric Engestrom
9e5e3be412
egl: drop invalid shebang
...
This file exports a variable that is then used in a python script,
but it can never be executed by itself, so having a shebang here
makes no sense.
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marcin Ślusarz <marcin.slusarz@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6166 >
2020-08-22 11:47:42 +00:00
Eric Engestrom
0dc0a79a58
egl: drop another indentation level in _eglFindDisplay() by inverting an if
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6361 >
2020-08-19 22:10:06 +00:00
Eric Engestrom
8b2fc1d1b5
egl: drop an indentation level in _eglFindDisplay() by replacing break/if with a goto
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6361 >
2020-08-19 22:10:06 +00:00
Eric Engestrom
326eb56718
egl/x11_dri3: implement EGL_KHR_swap_buffers_with_damage
...
Passes all of `dEQP-EGL.functional.swap_buffers_with_damage.*`:
Passed: 36/54 (66.7%)
Failed: 0/54 (0.0%)
Not supported: 18/54 (33.3%)
Warnings: 0/54 (0.0%)
Waived: 0/54 (0.0%)
The "not supported" ones are the `preserve_buffer_*` tests, which is not
supported on X11/DRI3.
Cc: 20.2 <mesa-stable>
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/3030
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Michel Dänzer <mdaenzer@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6132 >
2020-08-19 12:47:58 +00:00
Eric Engestrom
eae181e3eb
egl/x11_dri3: enable & require xfixes 2.0
...
Cc: 20.2 <mesa-stable>
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Acked-by: Michel Dänzer <mdaenzer@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6132 >
2020-08-19 12:47:57 +00:00
Kristian H. Kristensen
f88b9eb9c5
egl/android: Add support for CrOS buffer info perform op
...
This uses a new gralloc perform op that returns the buffer info we
need. No need to guess at formats, hard code offsets and recalculate
strides. This also gives us the format modifier as well as aux planes
for compressed RGBA buffers.
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6055 >
2020-08-18 17:20:16 +00:00
Kristian H. Kristensen
acb235c0c8
egl/android: Use droid_create_image_from_prime_fds() in get_back_bo()
...
This function wants to create a __DRIimage for an ANativeWindowBuffer,
which is mostly the same logic as when we create an EGLImage for an
ANativeWindowBuffer. Reuse droid_create_image_from_prime_fds().
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6055 >
2020-08-18 17:20:16 +00:00
Kristian H. Kristensen
cad9d42bb4
egl/android: Move droid_create_image_from_prime_fds() function up
...
We'll use it for get_back_bo() next.
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6055 >
2020-08-18 17:20:16 +00:00
Kristian H. Kristensen
5c8b67ed0c
egl/android: Simplify droid_create_image_from_name() path
...
This can now return an __DRIimage which we'll wrap in the shared code
in dri2_create_image_android_native_buffer().
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6055 >
2020-08-18 17:20:16 +00:00
Kristian H. Kristensen
d47b6f330c
egl/android: Drop unused ctx argument
...
EGL_ANDROID_image_native_buffer requires the ctx argument to always be
NULL, so not point in passing it around.
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6055 >
2020-08-18 17:20:16 +00:00
Kristian H. Kristensen
9cc788f0ff
egl/android: Look up prime fds in droid_create_image_from_prime_fds()
...
We always need to look them up before calling this function, so move
the lookup into the function to consolidate the code.
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6055 >
2020-08-18 17:20:16 +00:00
Kristian H. Kristensen
972f36d8fa
egl/android: Call createImageFromDmaBufs directly
...
Instead of building up EGL attribute lists and then having to parse
them again, call the DRI driver directly and then use the
dri2_create_image_from_dri() helper to wrap the __DRIimage in an
EGLImage.
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6055 >
2020-08-18 17:20:16 +00:00
Eric Engestrom
6668d7a5f3
egl: drop unused egldriver.h header
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6241 >
2020-08-16 13:49:18 +00:00
Eric Engestrom
1f01fa11d7
egl: drop now empty egldriver.c
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6241 >
2020-08-16 13:49:18 +00:00
Eric Engestrom
890d0334c1
egl: inline _eglInitializeDisplay() into eglInitialize()
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6241 >
2020-08-16 13:49:18 +00:00
Eric Engestrom
0e7ae395e7
egl: inline _eglGetDriverProc() into eglGetProcAddress()
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6241 >
2020-08-16 13:49:18 +00:00
Eric Engestrom
735b35e34a
egl: drop unused ${drv}_driver()
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6241 >
2020-08-16 13:49:18 +00:00
Eric Engestrom
c74628fd1e
egl: replace `&_eglDriver`/`NULL` tested against `NULL` with simple `true`/`false`
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6241 >
2020-08-16 13:49:18 +00:00
Eric Engestrom
37be01bff7
egl: drop unused _EGLDriver from MesaGLInteropEGL{QueryDeviceInfo,ExportObject}()
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6241 >
2020-08-16 13:49:18 +00:00
Eric Engestrom
5eb5847d48
egl: replace replace _EGLDriver with _EGLDisplay->Driver in eglapi.c
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6241 >
2020-08-16 13:49:18 +00:00
Eric Engestrom
372c6c42af
egl: replace _EGLDriver with _EGLDisplay->Driver in _eglGetSyncAttrib()
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6241 >
2020-08-16 13:49:18 +00:00
Eric Engestrom
b9fb63ab03
egl: drop unused _EGLDriver from _eglSurfaceAttrib()
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6241 >
2020-08-16 13:49:18 +00:00
Eric Engestrom
b981babb93
egl: drop unused _EGLDriver & _EGLDisplay from _eglQueryContext()
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6241 >
2020-08-16 13:49:18 +00:00
Eric Engestrom
3ef8aacb60
egl: drop unused _EGLDisplay from _eglSetDamageRegionKHRClampRects()
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6241 >
2020-08-16 13:49:18 +00:00
Eric Engestrom
0345a61462
egl: drop unused _EGLDriver from _eglGetConfigs()/_eglChooseConfig()/_eglGetConfigAttrib()
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6241 >
2020-08-16 13:49:18 +00:00
Eric Engestrom
67c745644f
egl: drop unused _EGLDriver from SetBlobCacheFuncsANDROID()
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6241 >
2020-08-16 13:49:18 +00:00
Eric Engestrom
1bbb0c7689
egl: drop unused _EGLDriver from QueryDmaBuf{Formats,Modifiers}EXT()
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6241 >
2020-08-16 13:49:18 +00:00
Eric Engestrom
a71dcd2dc2
egl: drop unused _EGLDriver from ExportDMABUFImage{,Query}MESA()
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6241 >
2020-08-16 13:49:18 +00:00
Eric Engestrom
429e936948
egl: drop unused _EGLDriver from QueryBufferAge()
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6241 >
2020-08-16 13:49:18 +00:00
Eric Engestrom
155541bc02
egl: drop unused _EGLDriver from PostSubBufferNV()
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6241 >
2020-08-16 13:49:18 +00:00
Eric Engestrom
f010568ea2
egl: drop unused _EGLDriver from CreateWaylandBufferFromImageWL()
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6241 >
2020-08-16 13:49:18 +00:00
Eric Engestrom
845a37ce35
egl: drop unused _EGLDriver from {Bind,Unbind,Query}WaylandDisplayWL()
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6241 >
2020-08-16 13:49:18 +00:00
Eric Engestrom
9d5162eddf
egl: drop unused _EGLDriver from {Create,Export}DRMImageMESA()
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6241 >
2020-08-16 13:49:18 +00:00
Eric Engestrom
692b9c6ed0
egl: drop unused _EGLDriver from DupNativeFenceFDANDROID()
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6241 >
2020-08-16 13:49:18 +00:00
Eric Engestrom
f49805c441
egl: drop unused _EGLDriver from {Create,Destroy,ClientWait,Wait,Signal}SyncKHR()
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6241 >
2020-08-16 13:49:18 +00:00
Eric Engestrom
740ec08f21
egl: drop unused _EGLDriver from {Create,Destroy}ImageKHR()
...
Signed-off-by: Eric Engestrom <eric@engestrom.ch>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6241 >
2020-08-16 13:49:18 +00:00