Commit graph

1028 commits

Author SHA1 Message Date
Pawan Wagh
a4a73461c2 Downgrade fatal log on host to error
Fuzzer is breaking due to fatal log for host. Downgrade it to error.

Test: m android.hardware.neuralnetworks-service.example_fuzzer &&
out/host/linux-x86/fuzz/x86_64/android.hardware.neuralnetworks-service.example_fuzzer/android.hardware.neuralnetworks-service.example_fuzzer
Bug: 312902296

Change-Id: I7013ed14f6644d0459929380202de45f92575cf9
2024-02-12 18:47:08 +00:00
sergiuferentz
7d7a24d5f6 Bump android.hardware.graphics.common V4->V5
Test: Build
Bug: 291142745
Change-Id: Ib0002feb982ffcc37fa7b69493c644b7a835cf4f
2023-10-03 16:14:03 +00:00
Treehugger Robot
260e398b45 Merge "Make apex_available of nn hidl interfaces explicit in Android.bp" am: fd48e195bb am: 1156f7c564 am: b0e2887437
Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/2580936

Change-Id: I887099ea1d0c2d0e6226c757a2e80d807a79b1e4
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2023-05-06 18:24:14 +00:00
Spandan Das
2d7c55d23f Make apex_available of nn hidl interfaces explicit in Android.bp
These are available to com.android.neuralnetworks via the baseline
apexAvailable map in build/soong/apex/apex.go. This CL makes this
explicit in Android.bp

Test: m nothing #passes
Bug: 281077552
Change-Id: I9f08db0dba6b155c6f25393a5d4baf6de27110da
2023-05-05 23:52:38 +00:00
Xusong Wang
21dcba5fa9 Merge "Fix VTS generated test with reusable execution." am: c2f025e250 am: c6d9dfa6df am: 3917606102
Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/2490967

Change-Id: I963f463ea56fb8880a7cf073ecfc036e98cdf956
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2023-03-24 02:24:35 +00:00
Xusong Wang
6b84616fd8 Fix VTS generated test with reusable execution.
Fixes: 273819843
Bug: 273885128
Test: NNAPI VTS
Change-Id: Ib684cea0686659a96afa6d181900edf7508da12b
2023-03-16 16:54:08 +00:00
Xin Li
c96ae7d7f5 Merge TQ1A.230205.002
Bug: 263898609
Merged-In: I6bfb02a5cd76258284cc4d797a4508b21e672c4b
Change-Id: I9b4a1a6d0b6ba2e731737b5b731254a92dc4605e
2023-02-06 21:05:29 -08:00
Michael Butler
07df4f22df Add additional bounds checks to NNAPI FMQ deserialize utility functions
This CL adds the following additional bounds checks:
* Adds additional checks of the index of the std::vector before
  accessing the element at the index
* Changes the array index operator [] to the checked std::vector::at
  method

Bug: 256589724
Test: mma
Merged-In: I6bfb02a5cd76258284cc4d797a4508b21e672c4b
Change-Id: I6bfb02a5cd76258284cc4d797a4508b21e672c4b
(cherry picked from commit 9b17e6485b)
Merged-In: I6bfb02a5cd76258284cc4d797a4508b21e672c4b
2022-12-14 02:25:23 +00:00
Marc Kassis
9c428fe3ed graphics.common V3 -> V4
Bug: 251177105
Test: m
Change-Id: I816b8e14a0741402090cdc4732c2a904e830ff4e
Merged-In: I1cb84ec85f98789d0737207a1661b39a25538c96
Merged-In: I2e1561f4ccb59a2a833af9a7afd07840ab2ebfa4
2022-12-07 10:53:12 +00:00
Michael Butler
5154e5f53f Merge "Add additional bounds checks to NNAPI FMQ deserialize utility functions" 2022-12-07 00:48:09 +00:00
Michael Butler
611648f7a0 Add additional bounds checks to NNAPI FMQ deserialize utility functions
This CL adds the following additional bounds checks:
* Adds additional checks of the index of the std::vector before
  accessing the element at the index
* Changes the array index operator [] to the checked std::vector::at
  method

Bug: 256589724
Test: mma
Merged-In: I6bfb02a5cd76258284cc4d797a4508b21e672c4b
Change-Id: I6bfb02a5cd76258284cc4d797a4508b21e672c4b
2022-12-05 20:24:19 +00:00
Treehugger Robot
73a19e5bf1 Merge "Remove neuralnetworks_float16." am: 05d30e7246 am: 3a534ad808 am: 10d5c29574
Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/2322753

Change-Id: I0f1c3084bc4fcf62e12cd54682226390d5e77540
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-11-30 22:39:56 +00:00
Yabin Cui
1c4ad4f9ad Remove neuralnetworks_float16.
Bug: 254708969
Test: build
Change-Id: Ibf7dba54b61938cae5f9a84d0047a1078978c3ff
2022-11-30 10:17:10 -08:00
Steven Moreland
ed27779d14 graphics.common V3 -> V4
Bug: 251177105
Test: builds
Change-Id: I1cb84ec85f98789d0737207a1661b39a25538c96
2022-10-29 00:51:21 +00:00
Sally Qi
cb8583adad Merge "Add cc_defaults as wrapper for graphics composer/common AIDL interfaces." 2022-08-30 20:52:44 +00:00
Sally Qi
784c253a05 Add cc_defaults as wrapper for graphics composer/common AIDL
interfaces.

- Add new Android.bp in graphics folder and wrap composer and common
  AIDL in to separate cc_defaults.
- remove composer3 dependency from allocator's VTS .bp file.

Bug: 243429120
Test: builds
Change-Id: Ia91e4ab87b7ac86248094317185b317d5604e654
2022-08-26 15:18:42 -07:00
Treehugger Robot
73754429ee Merge "Make VtsHalNeuralnetworks* tests more binder-friendly." into android12-tests-dev am: 2a04b4462f am: 2a3972288c
Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/2194136

Change-Id: I1ebf39592d323ef2e4b394c360fe0774da1f6347
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-08-26 17:24:25 +00:00
Treehugger Robot
2a3972288c Merge "Make VtsHalNeuralnetworks* tests more binder-friendly." into android12-tests-dev am: 2a04b4462f
Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/2194136

Change-Id: I651a99927a137c7401750274b505e30e548e7858
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-08-26 17:05:34 +00:00
David Gross
79324920f7 Make VtsHalNeuralnetworks* tests more binder-friendly.
Certain mutation testing -- mutateOperandLifeTimeTest and
mutateOperandInputOutputTest -- can introduce potentially very large
CONSTANT_COPY operands, which can in turn create potentially very
large Models which must be passed across binder.  To avoid overflowing
the binder buffer, we estimate the size of the mutated Model, and skip
the test if that size is too high.  The old logic recognizes that our
tests only have a single active binder transaction at a time, and
assumes that there are no other clients using the same service at the
same time, and so we should have the binder buffer to ourselves; to be
conservative, we reject any Model whose estimated size exceeds half
the binder buffer size.  Unfortunately, sometimes the binder buffer
still overflows, because it unexpectedly contains an allocation from
some other transaction: It appears that binder buffer memory
management is not serialized with respect to transactions from our
tests, and therefore depending on scheduler behavior, there may be a
sizeable allocation still in the buffer when we attempt to pass the
large Model.  To fix this problem we become even more conservative,
and instead of limiting the Model to half the binder buffer size, we
limit it to half IBinder.MAX_IPC_SIZE (the recommended transaction
size limit).  To confirm that this change does not exclude too many
tests, I checked how may times the size filter function
exceedsBinderSizeLimit is called, how many times it rejects a model
under the new logic (modelsExceedHalfMaxIPCSize), and how many times
it rejects a model under the old logic (modelsExceedHalfMaxIPCSize).

Test: VtsHalNeuralnetworksV1_0TargetTest --gtest_filter=TestGenerated/ValidationTest.Test/*-*dsp*
Test: # models =  3592, modelsExceedHalfMaxIPCSize = 212, modelsExceedHalfBufferSize = 18
Test: VtsHalNeuralnetworksV1_1TargetTest --gtest_filter=TestGenerated/ValidationTest.Test/*-*dsp*
Test: # models =  7228, modelsExceedHalfMaxIPCSize = 330, modelsExceedHalfBufferSize = 28
Test: VtsHalNeuralnetworksV1_2TargetTest --gtest_filter=TestGenerated/ValidationTest.Test/*-*dsp*
Test: # models = 52072, modelsExceedHalfMaxIPCSize = 506, modelsExceedHalfBufferSize = 28
Test: VtsHalNeuralnetworksV1_3TargetTest --gtest_filter=TestGenerated/ValidationTest.Test/*-*dsp*
Test: # models = 73342, modelsExceedHalfMaxIPCSize = 568, modelsExceedHalfBufferSize = 28
Test: VtsHalNeuralnetworksTargetTest

Bug: 227719657
Bug: 227719752
Bug: 231928847
Bug: 238777741
Bug: 242271308

Change-Id: I3f81d71ca3c0ad4c639096b1dc034a8909bc8971
2022-08-25 23:11:41 +00:00
Michael Butler
68c8b4cb5d Merge "Disable TEST_MAPPING for VtsHalNeuralnetworksV1_*TargetTest" am: bc24c9b37a am: 184e6dcebd
Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/2118707

Change-Id: Ib81ecc387650f8eadd559fd17956ee023c62b92d
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-06-16 01:18:25 +00:00
Michael Butler
bc24c9b37a Merge "Disable TEST_MAPPING for VtsHalNeuralnetworksV1_*TargetTest" 2022-06-15 23:47:08 +00:00
Michael Butler
e8e7a1018c Disable TEST_MAPPING for VtsHalNeuralnetworksV1_*TargetTest
A sibling change removes the NN HIDL sample drivers from cuttlefish. In
response, this change removes the VtsHalNeuralnetworksV1_*TargetTest
tests from the TEST_MAPPING because they do not test anything without
the NN HIDL sample drivers present.

Note that the NN AIDL sample drivers and NN AIDL VTS test
(VtsHalNeuralnetworksTargetTest) are still present.

Bug: 233665601
Test: mma
Test: croot && cd hardware/interfaces/neuralnetworks && atest
Change-Id: I90bccd843ba9296c27d3010cec652be55a13a225
2022-06-08 10:47:22 -07:00
Jordan Abrahams-Whitehead
bb2afde687 Merge "vts: Upsize 8bit uniform_int_distribution" am: 13a42ed14d am: c7e13d9244
Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/2110725

Change-Id: Ibf6a3bc540b5dd06a24330b506a98e2f3bca2ad5
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-05-31 23:08:56 +00:00
Jordan R Abrahams-Whitehead
745c351b8b vts: Upsize 8bit uniform_int_distribution
uniform_int_distribution<a> for types sizeof(a) < 2 are
not valid by the C++ library standard. Newer versions of LLVM
(particularly spurred on by ChromeOS toolchain changes)
require at least std::uniform_int_distribution<uint16_t>.

This is a required change for rolling LLVM to r458507.
This is necessary, but may not be sufficient to resolve
the issue.

Bug: 231351802
Test: mma
Change-Id: I04c3cc91507f3467c432b9a25effdac3f5fb56f3
2022-05-30 22:30:54 +00:00
David Gross
96e9eeb19d Freeze neuralnetworks AIDL version as v2 for FL6
$ m android.hardware.neuralnetworks-update-api
$ m android.hardware.neuralnetworks-freeze-api

Cherrypicked from I35dbd32695acdffc552790dc7396bc8c724e9242

Bug: 206089870

Test: NeuralNetworksTest_static
Test: VtsHalNeuralnetworksTargetTest
Change-Id: I35dbd32695acdffc552790dc7396bc8c724e9242
Merged-In: I35dbd32695acdffc552790dc7396bc8c724e9242
(cherry picked from commit 2a889d50b7)
2022-05-23 13:30:56 -07:00
Ian Hua
5dde02c7f6 Add FL6 spec tests to AIDL VTS.
Also skip FL6 (AIDL_V2) tests for older AIDL drivers.

Cherrypicked from I689fef0945428f6548977628e3c43628dd1e5bf7

Bug: 206089870
Test: VtsHalNeuralnetworksTargetTest
Specifically, for old driver such as AIDL_V1 sample driver, it can pass
HIDL tests and skip AIDL_V2 tests. For new driver such as AIDL_V2
sample driver, it can pass all tests.

Change-Id: I689fef0945428f6548977628e3c43628dd1e5bf7
(cherry picked from commit 23d4e5e298)
2022-05-23 13:06:30 -07:00
David Gross
a8cf3aefd8 Add PACK operation to NNAPI feature level 6.
Cherrypicked from Ic15d047b70c62437b4f0db6f2ca10127591ae07c

Bug: 206089870

Test: m -j NeuralNetworksTest_static
Test: VtsHalNeuralnetworksTargetTest

Change-Id: Ic15d047b70c62437b4f0db6f2ca10127591ae07c
Merged-In: Ic15d047b70c62437b4f0db6f2ca10127591ae07c
(cherry picked from commit 0af4ac2ec4)
2022-05-23 13:06:04 -07:00
Ian Hua
b0cf0db3b0 AIDL interface changes for NNAPI feature level 6.
- Add BATCH_MATMUL operation
- Support TENSOR_INT32 for RESHAPE operation.

Also update "current" version snapshot and use
android.hardware.neuralnetworks-V2-ndk since AIDL v1 has been frozen.

Cherrypicked from Iabe45c57e2306d61055f711eda03b80b9cbe906d

Bug: 206089870
Test: mm
Change-Id: Iabe45c57e2306d61055f711eda03b80b9cbe906d
Merged-In: Iabe45c57e2306d61055f711eda03b80b9cbe906d
(cherry picked from commit aaeda0e84f)
2022-05-23 13:05:06 -07:00
Michael Butler
7c0353f8e4 Handle case where NN AIDL callback is null in IDevice::prepareModel*
Prior to this change, if IDevice::prepareModel* was passed a null
callback, the code would still attempt to call "notify" on the callback
to return the error to the client. This CL ensures the "notify" method
will not be invoked if the callback is null.

Bug: 230914930
Test: mma
Test: presubmit
Change-Id: I4a15d02c4879a0261ec26cc0e7a47d0a4da86b8b
Merged-In: I4a15d02c4879a0261ec26cc0e7a47d0a4da86b8b
(cherry picked from commit d6f6d01499)
2022-04-29 23:39:27 +00:00
Michael Butler
ad643b608c Move NN_TRY macro out of struct initialization
NNAPI NN_TRY macros use Statement Expressions (a GNU extension) to
propagate errors. However, a "return" statement in a Statement
Expression can lead to memory leaks when the Statement Expression is
being used to initialize a member of a struct. Specifically, when one
member of a struct is already initialized, and a Statement Expression
used to initialize a subsequent member early-returns, the previously
initialized members will not have their destructors called.

This CL moves any NN_TRY macro out of struct initialization to avoid any
potential memory leaks.

Bug: 230500484
Test: mma
Test: presubmit
Change-Id: I3493fd4764f8eacc86750e6414e62bc891abaccd
Merged-In: I3493fd4764f8eacc86750e6414e62bc891abaccd
2022-04-29 14:32:10 -07:00
Michael Butler
12adc10cfd Merge "Move NN_TRY macro out of struct initialization" into tm-dev am: 13300287b5
Original change: https://googleplex-android-review.googlesource.com/c/platform/hardware/interfaces/+/17991614

Change-Id: Ibf2ed6b11978b524307f1d4209404a32c73c6ceb
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-04-29 18:32:20 +00:00
Michael Butler
13300287b5 Merge "Move NN_TRY macro out of struct initialization" into tm-dev 2022-04-29 18:06:29 +00:00
Michael Butler
7ecc290745 Move NN_TRY macro out of struct initialization
NNAPI NN_TRY macros use Statement Expressions (a GNU extension) to
propagate errors. However, a "return" statement in a Statement
Expression can lead to memory leaks when the Statement Expression is
being used to initialize a member of a struct. Specifically, when one member of a struct is already initialized, and a Statement Expression used to initialize a subsequent member early-returns, the previously initialized members will not have their destructors called.

This CL moves any NN_TRY macro out of struct initialization to avoid any
potential memory leaks.

Bug: 230500484
Test: mma
Test: presubmit
Change-Id: I3493fd4764f8eacc86750e6414e62bc891abaccd
2022-04-28 22:05:37 +00:00
Michael Butler
39dac4dee4 Do not call releaseMemoryResource on ignored slot in NN VTS
For IBurst, a slot value of -1 indicates the slot should be ignored.
However, GeneratedTestHarness still attempts to call
IBurst::releaseMemoryResource on ignored slots. Instead, we should skip
releasing any ignored slots.

Bug: 230103381
Test: mma
Test: VtsHalNeuralnetworksTargetTest
Test: presubmit
Change-Id: I82e538aa0fd9e8ecc077df1c1ceece46a6166e67
Merged-In: I82e538aa0fd9e8ecc077df1c1ceece46a6166e67
2022-04-28 18:58:46 +00:00
Michael Butler
7840b95dd6 Merge "Do not call releaseMemoryResource on ignored slot in NN VTS" into tm-dev am: cb2e758c92
Original change: https://googleplex-android-review.googlesource.com/c/platform/hardware/interfaces/+/17970068

Change-Id: I58d0f4dffda3ffac6f9fe81f08b0bec27454c04d
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-04-28 01:06:41 +00:00
Michael Butler
d468abed9b Do not call releaseMemoryResource on ignored slot in NN VTS
For IBurst, a slot value of -1 indicates the slot should be ignored.
However, GeneratedTestHarness still attempts to call
IBurst::releaseMemoryResource on ignored slots. Instead, we should skip
releasing any ignored slots.

Bug: 230103381
Test: mma
Test: VtsHalNeuralnetworksTargetTest
Test: presubmit
Change-Id: I82e538aa0fd9e8ecc077df1c1ceece46a6166e67
2022-04-27 00:08:40 +00:00
Michael Butler
aa9f97a0e2 Merge "Handle case where NN AIDL callback is null in IDevice::prepareModel*" am: 5d4f1b70c2 am: 84ec222eb5
Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/2072333

Change-Id: If046a013f58c839e3b01b0774c070d6a8b1fbc3c
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-04-22 18:53:01 +00:00
Michael Butler
d6f6d01499 Handle case where NN AIDL callback is null in IDevice::prepareModel*
Prior to this change, if IDevice::prepareModel* was passed a null
callback, the code would still attempt to call "notify" on the callback
to return the error to the client. This CL ensures the "notify" method
will not be invoked if the callback is null.

Bug: N/A
Test: mma
Test: presubmit
Change-Id: I4a15d02c4879a0261ec26cc0e7a47d0a4da86b8b
2022-04-21 16:40:09 -07:00
Jiyong Park
703e97920e Freeze AIDL APIs for TM
Bug: 225941299
Test: m
Change-Id: Ie41cc0797710f813f92c65c387f247c7806d8394
2022-03-31 12:01:39 +09:00
Michael Butler
4981b60f7f Merge "Make NN canonical->HIDL adapter execute* methods synchronous" am: f955569c8a am: c7d8c19823 am: 277e31957b
Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/2005130

Change-Id: Ic8e1f71731ef3f429ec363a0730c0baafdf751b0
2022-03-04 01:44:00 +00:00
Michael Butler
d65dc06ddc Make NN canonical->HIDL adapter execute* methods synchronous
This change alters the asynchronous execute* methods to be handled
synchronously (from the same thread) for three reasons:
1) To remove the need to use IPreparedModel::getUnderlyingResource
2) To simplify the code
3) To make the code more performant

Bug: N/A
Test: mma
Test: presubmit
Change-Id: I2c37deb03d1b1c34b0173bd741e55fce4de757f7
2022-03-01 16:16:26 -08:00
Treehugger Robot
c5087c06b3 Merge "Cast to the underlying type for union tags" am: 6cd0d474b2 am: 5eb895c047 am: bbd66d27a0
Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/1999055

Change-Id: Ie0a38cc29d50c65b8168435c70786321fc9de199
2022-03-01 01:29:04 +00:00
Jooyung Han
0bdded6d5a Cast to the underlying type for union tags
Union tags are of enum type. Streaming it would make more sense by
casting to underlying types.

For now casting is not required since tags are defined as `enum Tag`.
But we're going to change it to `enum class Tag` which won't work with
operator<< without casting.

Bug: 218912230
Test: m
Change-Id: Ia5e8a5c38fe23c72dffbdca320a32abdfa0eb38e
2022-02-26 21:10:12 +09:00
Michael Butler
08d04aea58 Merge "Remove NN host specific build defines" am: fe9368b729 am: 13a6d16614 am: 6d588b7cd9
Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/1997731

Change-Id: I2bfc9dbc8c7fbc0940eed48968dc5df89314b08c
2022-02-24 02:18:15 +00:00
Chih-hung Hsieh
34593d4e2a Merge "Add timed out test files to tidy_timeout_srcs" am: ff54f73b4f am: fa83970b3a am: 581616e658
Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/1992232

Change-Id: I2eac13fe3b5ab0b4f15d6ceadf376e5e74124a81
2022-02-24 01:32:09 +00:00
Michael Butler
fe9368b729 Merge "Remove NN host specific build defines" 2022-02-24 00:59:51 +00:00
Chih-hung Hsieh
ff54f73b4f Merge "Add timed out test files to tidy_timeout_srcs" 2022-02-24 00:21:18 +00:00
Michael Butler
323bddccc6 Remove NN host specific build defines
These defines are redundant because they are already defined in
neuralnetworks_utils_defaults.

Bug: N/A
Test: mma
Change-Id: I1c5c44e9e61da19bc10dd8ed2e38099f7c4baccd
2022-02-23 11:44:53 -08:00
Chih-Hung Hsieh
ad1bf31b78 Add timed out test files to tidy_timeout_srcs
* Timed out runs do not show any warning messages.
* These test files cannot finish clang-tidy runs with
  the following settings:
    TIDY_TIMEOUT=90
    WITH_TIDY=1
    CLANG_ANALYZER_CHECKS=1
* When TIDY_TIMEOUT is set, in Android continuous builds,
  tidy_timeout_srcs files will not be compiled by clang-tidy.
  When developers build locally without TIDY_TIMEOUT,
  tidy_timeout_srcs files will be compiled.
* Some of these test modules may be split into smaller ones,
  or disable some time consuming checks, and then
  enable clang-tidy to run within limited time.

Bug: 201099167
Test: make droid tidy-hardware-interfaces_subset
Change-Id: I1de28f1572fff368f67eab512fffec9f2e5c2a9b
2022-02-18 17:25:41 -08:00
Michael Butler
51f3a442b1 Merge "Remove isUpdatable query from NNAPI -- hal" am: 82d36078b9 am: 3d9540d5ed am: 7c858f2ae4
Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/1985407

Change-Id: I25779bbd5701bb1a3c0c6c3dcc2e82a5e50ec271
2022-02-18 22:09:47 +00:00