Commit Graph

6631 Commits

Author SHA1 Message Date
Jonas Termansen 007e386b13 [infra] Add progress information to test.dart and fix logs.
This change takes advantage of the new --clean-exit and --silent-failures
options to test.py, which means the test.py native progress bar can be used.
test.py exiting 0 if results were written out, no matter the results, lets
us properly handle if the program failed.

The output is now sectioned to make it more readable, and if no tests
failed, then the program says so.

This change also fixes logs which were broken because the logs for the steps
weren't merged, and the main test.py run wasn't even being passed the
--write-logs option.

This change also fixes directly starting dart scripts as an executable
rather than using the platform resolved executable.

TBR=whesse@google.com

Bug: https://github.com/dart-lang/sdk/issues/35359
Change-Id: I7bed009475df3ffea01c9e805513d0e04e77427c
Reviewed-on: https://dart-review.googlesource.com/c/86568
Reviewed-by: Jonas Termansen <sortie@google.com>
2018-12-07 16:07:18 +00:00
Jonas Termansen 1a814793ce [infra] Add --silent-failures and --clean-exit to test.py.
This change renames the --no-status option to --clean-exit, as that better
describes what it does, which is useful. We'll want to add a proper option
--no-status-files in the future that ignores status file entries except skip
and slow, which will be useful for the reproduction commands provided by
test.dart in the transition period until the status files are deleted.

Bug: https://github.com/dart-lang/sdk/issues/35358
Change-Id: Idc22a6c1b109508dadafb8a225cb91ad06287c0b
Reviewed-on: https://dart-review.googlesource.com/c/86565
Reviewed-by: William Hesse <whesse@google.com>
2018-12-07 15:51:28 +00:00
Paul Berry 09f2736d9a Remove support analyzer-use-fasta-parser from the test matrix.
The bot was removed in d258ee768908e12d7c0abeba9c00776a21b982a1.

Change-Id: Ice51ef23fa7b26e0a8117701062eca453f0d9166
Reviewed-on: https://dart-review.googlesource.com/c/86501
Auto-Submit: Paul Berry <paulberry@google.com>
Commit-Queue: Jonas Termansen <sortie@google.com>
Reviewed-by: Jonas Termansen <sortie@google.com>
2018-12-07 08:52:51 +00:00
Martin Kustermann 8ea5ac12c0 [Gardening] Remove redundant --compiler=dartkb from test_matrix.json
Change-Id: I1bfc4fee0250cd087404f3593df812b7b7d96f79
Reviewed-on: https://dart-review.googlesource.com/c/86382
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: William Hesse <whesse@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
Commit-Queue: William Hesse <whesse@google.com>
Auto-Submit: Martin Kustermann <kustermann@google.com>
2018-12-06 15:37:33 +00:00
Martin Kustermann c945715f8c [Infra] Make -n dartkb-... actually test.dart to use bytecode mode
Change-Id: I1b64d8fa0e3cc046a505494652d9aa95656a0a3a
Reviewed-on: https://dart-review.googlesource.com/c/86381
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2018-12-06 15:01:32 +00:00
Daco Harkes 378bc9179e tool to generate compile_commands.json for analysis servers
Change-Id: I51124edf583fd4b4f66176a28ff0ebe11b6340fa
Reviewed-on: https://dart-review.googlesource.com/c/86380
Auto-Submit: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Samir Jindel <sjindel@google.com>
2018-12-06 14:36:51 +00:00
William Hesse e4cbeab852 Remove redundant compiler option from dartkb builders
Change-Id: Ie7a518a4c7ba9b42d4392a3d8fc7abb638e26d1c
Reviewed-on: https://dart-review.googlesource.com/c/86354
Reviewed-by: William Hesse <whesse@google.com>
2018-12-06 12:38:18 +00:00
Martin Kustermann 1207af99b8 [infra] Avoid printing options in reproduction commands which are implied by the named configuration
Currently reproduction commands often look like this:
    tools/test.py -m release -n dartk-linux-release-x64 language_2/...
This has duplicate information in it, namely "--mode=release".

This CL
  a) validates that the implied options are not passed in addition to -n
  b) the reproduction commands will no longer print the redundant information.

Change-Id: I1a70ad021d5dcfb7a514cd9bbefbb8d0f77edb0a
Reviewed-on: https://dart-review.googlesource.com/c/85944
Reviewed-by: William Hesse <whesse@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2018-12-06 11:35:30 +00:00
Samir Jindel 84420e1ae5 [vm] Roll version of pkg/linter forward in 3xH engine patch.
Change-Id: I7f517b467de203bb22ae29a50fe8758f40869f7c
Reviewed-on: https://dart-review.googlesource.com/c/86210
Reviewed-by: Samir Jindel <sjindel@google.com>
2018-12-05 17:43:03 +00:00
Jonas Termansen afb8906699 [infra] Fix compare_results non-human output being null.
TBR=whesse@google.com

Change-Id: I8a028bac9fac4200c8fe49249f8ba43d4dd8964e
Reviewed-on: https://dart-review.googlesource.com/c/86207
Reviewed-by: Jonas Termansen <sortie@google.com>
2018-12-05 16:19:01 +00:00
Jonas Termansen 1ca3f3d2cb [infra] Fix compare_results test name in human readable mode.
TBR=whesse@google.com

Change-Id: Iab9b756a946283abd800f9a0303440880092e729
Reviewed-on: https://dart-review.googlesource.com/c/86202
Reviewed-by: Jonas Termansen <sortie@google.com>
Commit-Queue: Jonas Termansen <sortie@google.com>
2018-12-05 14:14:10 +00:00
Jonas Termansen e1e3b78e3a [infra] Fix update_flakiness missing current_counter null check.
Change-Id: I6ee8b1266f242ec2251dd869b3c775f9509d5fb2
Reviewed-on: https://dart-review.googlesource.com/c/86180
Reviewed-by: William Hesse <whesse@google.com>
2018-12-05 12:14:47 +00:00
Jonas Termansen 90c7cf254e [infra] Implement update_flakiness forgiveness and statistics.
This change makes update_flakiness count how many times each outcome has
happened. If the same outcome happens more than a 100 times in a row, the
test is forgiven. If that was a mistake, and it happens again, the flakiness
frequency is less than 3.65% with 95% certainty, and the probability of
deflaking not catching it is astronomical.

The number of occurences of each kind of outcome mode is tracked. This lets
us track how probable each flakiness mode is. It also lets us answer
important questions such as how many flakes only happen a single time (not
fault of test) versus multiple times (something to do with the test).

Bug: https://github.com/dart-lang/sdk/issues/35318
Change-Id: Ieccd4afb96ada8053f59fbdc005fd853f0d1f996
Reviewed-on: https://dart-review.googlesource.com/c/85952
Reviewed-by: William Hesse <whesse@google.com>
2018-12-05 11:42:23 +00:00
Jonas Termansen 4cd567b3a2 [infra] Add auditing to approve_results.
This change ads two new fields to approved_results.json:

* approver: The username of the person who approved the new results.
* approved_at: The ISO 8601 UTC time of when the approval occured.

This data provides a history for approvals as a replacement for the git
commit history for status files. Each build makes a copy of the
approved_results.json file at the time, effectively acting as a commit.

Bug: https://github.com/dart-lang/sdk/issues/35315
Change-Id: I64430a53820a0cffeb277012d5318b50999a9df5
Reviewed-on: https://dart-review.googlesource.com/c/85940
Reviewed-by: William Hesse <whesse@google.com>
2018-12-05 10:58:29 +00:00
Paul Berry 670f9ab49b Merge commit '65401da92251a7318e3264b816ce0c4e14701751' into analyzer 2018-12-04 15:38:21 -08:00
Aart Bik 65401da922 [dart/fuzzer] fix bot setup
Rationale:
Nightly showed many failures due to missing dependence.

Bug:
https://github.com/dart-lang/sdk/issues/35319


Change-Id: I775df9870a8fbac65e29a4c0b3aab2867b2a0c8a
Reviewed-on: https://dart-review.googlesource.com/c/86104
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2018-12-04 22:51:10 +00:00
Paul Berry 0a4873bb35 Merge commit '191a09f540ac0516c4088fb8454c693743be8b3f' into analyzer 2018-12-04 09:41:55 -08:00
Jonas Termansen 191a09f540 [infra] Add support for logs to tools/test.dart.
Bug: https://github.com/dart-lang/sdk/issues/35307
Change-Id: I770199da3bed89d41017d806d289195b22377b4f
Reviewed-on: https://dart-review.googlesource.com/c/85741
Reviewed-by: William Hesse <whesse@google.com>
2018-12-04 16:07:56 +00:00
William Hesse b35aebde1c Add --logs parameter to compare_results.dart, and output logs
The logs of tests that start failing will be output at the end of stdout.

Change-Id: I93a85c983be278e93aaf7d7447438667c54b5185
Reviewed-on: https://dart-review.googlesource.com/c/85500
Reviewed-by: Jonas Termansen <sortie@google.com>
2018-12-04 16:07:42 +00:00
Jonas Termansen 52183f2afa [infra] Implement 3-way comparison with approved_results in compare_results.
Bug: https://github.com/dart-lang/sdk/issues/35298
Change-Id: Ie5bd1101cae8eddd65ad5aa53c8f2d97c6548b2b
Reviewed-on: https://dart-review.googlesource.com/c/85702
Reviewed-by: William Hesse <whesse@google.com>
2018-12-04 13:46:59 +00:00
Alexander Markov 170d5578c7 [vm/kernel] Move functionality of Fuchsia's compiler.dart into pkg/vm
This includes:
* Selecting front-end target.
* Support for multi-root virtual file system.
* Not linking platform into resulting kernel file.
* Specifying input as URI (instead of file path) on command line.
* Automatically converting input script URI to package URI.
* Writing ninja dependencies file.
* Writing package-split kernel binaries.

After this change Fuchsia's compiler.dart will become a small wrapper
over pkg/vm, sharing most logic and even most command line options
with pkg/vm gen_kernel tool.

Also, this CL attempts to share some pieces of code between frontend
server and gen_kernel.

In addition, seperate bytecode generation for package-split binaries
is implemented (needed for https://dart-review.googlesource.com/c/sdk/+/85469).

Corresponding Fuchsia CL: https://fuchsia-review.googlesource.com/c/topaz/+/229964

Change-Id: I12d7b2f6401357b3c9df2e31bc736af5a9dc5fd2
Reviewed-on: https://dart-review.googlesource.com/c/85721
Reviewed-by: Alexander Aprelev <aam@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-12-04 01:08:03 +00:00
Paul Berry 43cd8ba822 Merge commit '4eeebc46cff4e47e6265e86f4774da103d060aa1' into analyzer
Conflicts:
	pkg/analyzer/CHANGELOG.md
	pkg/analyzer/pubspec.yaml
2018-12-03 12:20:40 -08:00
Alexander Aprelev 4eeebc46cf [hhh] Patch flutter so it is compatible with latest analyzer
Change-Id: I70b9cdb0609e063fa9b0ce1e4a89dac24f87fad9
Reviewed-on: https://dart-review.googlesource.com/c/85730
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Alexander Aprelev <aam@google.com>
2018-12-03 17:10:46 +00:00
Martin Kustermann 2260758ffe [infra] Make --keep-generated-files work with -n option
Makes the --keep-generated-files flag an option for the test.py command
only, not part of a named configuration passed in with the -n flag
and defined in tools/bots/test_matrix.json.

Change-Id: If67c2848cf6fc15e4cb7167ce23eeb3eb9bd1684
Reviewed-on: https://dart-review.googlesource.com/c/85705
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: William Hesse <whesse@google.com>
2018-12-03 15:35:40 +00:00
Paul Berry 7af0ba8dbf Merge commit '4088bb1302cebbb6922e1292037bc60127f1f852' into analyzer 2018-12-03 07:19:08 -08:00
Paul Berry 9a7f42d05a Merge commit 'dc346e6fdd89663388f8ae4e6767d6ece597c278' into analyzer 2018-12-03 06:35:54 -08:00
William Hesse 7abe999437 Enable uploads from Dart SDK swarming builders
Switch the Dart SDK builders to use the dart_sdk.py script to build
and upload the SDK.

Change-Id: I8d8fc41e8d90d14507d5337bd6dcc573ee09bb6a
Reviewed-on: https://dart-review.googlesource.com/c/85701
Reviewed-by: Jonas Termansen <sortie@google.com>
2018-12-03 11:26:30 +00:00
Jonas Termansen 2ca08ef2e1 [infra] Implement preapproval of failing tests in approve_results.
This change lets committers preapprove new failing tests based on commit
queue / dry run results for CQ builders, such that the CQ builder stays
green when the change is submitted.

The current implementation does not support changing one test from a failing
mode to another failing mode. It will work, but if the corresponding CI
builder cycles before the changelist is submitted, it will become red until
the changelist is submitted. This will be addressed in the future.

Likewise approving a builder after a preapproval will undo the preapproval
unless the changelist has been submitted and the corresponding CI builder
has cycled.

Bug: https://github.com/dart-lang/sdk/issues/35289
Change-Id: Ie43df4439a27a3472c5178cb7c6af69292cf70e4
Reviewed-on: https://dart-review.googlesource.com/c/85601
Reviewed-by: William Hesse <whesse@google.com>
2018-11-30 17:08:04 +00:00
Paul Berry 63770042aa Merge commit '80c23f87a3e3123d7e337c1fc8bc3b5ec49b34a0' into analyzer 2018-11-30 08:12:45 -08:00
Vyacheslav Egorov 040ef6aabb [gardening] Lower core rlimit to 0 if test is expected to crash.
We do not archive core dumps generated by tests that are expected
to crash - so there is no need to generate those dumps.

It seems that generating core dumps is very slow on Mac and causes
timeouts.

Fixes #35275

Remove Timeout expectations from Crashing tests

Change-Id: I36c89fd583a6a94521560544163f02414cbbf41a
Reviewed-on: https://dart-review.googlesource.com/c/85680
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2018-11-30 11:15:06 +00:00
Paul Berry 0a05682d5b Cherry-pick 031e77eea1 to the analyzer branch.
This should fix some trybot flakiness we've seen today.

Original commit message:

    [infra] Update Clang toolchain and GN

    We no longer rely on Fuchsia's buildtools, instead we directly fetch
    Clang and GN packages from CIPD using gclient support.

Change-Id: Ib0412072a80590afe407e9b4c2906d0f3a4a7d85
Reviewed-on: https://dart-review.googlesource.com/c/85642
Commit-Queue: Paul Berry <paulberry@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Auto-Submit: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2018-11-29 22:14:23 +00:00
Paul Berry 706776a14d Merge commit '80c4d3e3c70ba8d0dfcc3fd038f29a388652cf3b' into analyzer 2018-11-29 09:29:09 -08:00
Zach Anderson 031e77eea1 [infra] Update Clang toolchain and GN
We no longer rely on Fuchsia's buildtools, instead we directly fetch
Clang and GN packages from CIPD using gclient support.

Change-Id: I8995d89babf9c3c6b30214a1133e7b0a1cb9a796
Reviewed-on: https://dart-review.googlesource.com/c/85416
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Zach Anderson <zra@google.com>
2018-11-29 15:37:40 +00:00
Martin Kustermann 5d7786948c [infra] Add --keep-files flag to tools/test.py
This allows one to actually run the commands which are printed in a
failure.

Change-Id: I62c8a387c37d3563ea3c0f803c107e2e9d8262bb
Reviewed-on: https://dart-review.googlesource.com/c/85483
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Alexander Thomas <athom@google.com>
2018-11-28 16:44:15 +00:00
Paul Berry 854a7cfe15 Merge commit '43113760f2ea114c183f8965b0d48fbb7469dc7f' into analyzer
Conflicts:
	DEPS
2018-11-28 08:38:52 -08:00
Jonas Termansen 25f0c21c81 [infra] Fix approve_results reporting wrong number of changed tests
Change-Id: I70afb4319dfd83a38897582b4d3e93113953fdba
Reviewed-on: https://dart-review.googlesource.com/c/85447
Reviewed-by: Alexander Thomas <athom@google.com>
2018-11-28 11:28:37 +00:00
William Hesse f780b6ea84 Remove obsolete log types from test.py
Removes the flaky log, result.log result format, test outcome log,
and --append-logs option from test.py. They are replaced by the
new --write-results and --write-logs options.

The debug log is now always appended to, if it is written to a file.

Change-Id: I20dbbc1db86ef23a19ac4ea02067f18ae4906b3d
Reviewed-on: https://dart-review.googlesource.com/c/85440
Reviewed-by: Jonas Termansen <sortie@google.com>
2018-11-28 11:15:04 +00:00
Zach Anderson 44a9d0a0d6 Revert "Reland: [infra] Roll buildtools to c72a1c5aadde06505b7bb4641720880f3db28ff9"
This reverts commit ad69aaef62.

Reason for revert: <INSERT REASONING HERE>

Original change's description:
> Reland: [infra] Roll buildtools to c72a1c5aadde06505b7bb4641720880f3db28ff9
> 
> Tries to work around update.py race by setting up symlinks for 'git cl format'
> instead of copying.
> 
> Change-Id: I4ed9b99254803feea5ea0e8d30db23fc982e9562
> Reviewed-on: https://dart-review.googlesource.com/c/85427
> Reviewed-by: Ryan Macnak <rmacnak@google.com>
> Commit-Queue: Zach Anderson <zra@google.com>

TBR=rmacnak@google.com,zra@google.com

Change-Id: Ida584adda37cd3e2dac16654eb1e81e92f123f88
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/85467
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Zach Anderson <zra@google.com>
2018-11-27 23:35:08 +00:00
Paul Berry 82add824fd Merge commit 'db89c2d1ac3e8b6c6130cbb714c4e242e6fefc27' into analyzer 2018-11-27 15:11:22 -08:00
Zach Anderson ad69aaef62 Reland: [infra] Roll buildtools to c72a1c5aadde06505b7bb4641720880f3db28ff9
Tries to work around update.py race by setting up symlinks for 'git cl format'
instead of copying.

Change-Id: I4ed9b99254803feea5ea0e8d30db23fc982e9562
Reviewed-on: https://dart-review.googlesource.com/c/85427
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Zach Anderson <zra@google.com>
2018-11-27 23:02:59 +00:00
Paul Berry 5949a3f984 Merge commit '5a54f0eb577f0f4a1708ddbd4f69bf70458ff647' into analyzer 2018-11-27 08:34:40 -08:00
Zach Anderson 8c69ec8c07 Revert "Reland: [infra] Roll buildtools to c72a1c5aadde06505b7bb4641720880f3db28ff9"
This reverts commit 03ff950922.

Reason for revert: Race in update script.

Original change's description:
> Reland: [infra] Roll buildtools to c72a1c5aadde06505b7bb4641720880f3db28ff9
> 
> Fixes Android build
> 
> Change-Id: Ifcdf492a636bd2c683be8f37bcad4a2af09fb822
> Reviewed-on: https://dart-review.googlesource.com/c/85404
> Reviewed-by: Ryan Macnak <rmacnak@google.com>
> Commit-Queue: Zach Anderson <zra@google.com>

TBR=rmacnak@google.com,zra@google.com

Change-Id: I030425cba496d17383cdda37b0e67dff55f1f7fd
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/85409
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Zach Anderson <zra@google.com>
2018-11-27 15:56:13 +00:00
Zach Anderson 03ff950922 Reland: [infra] Roll buildtools to c72a1c5aadde06505b7bb4641720880f3db28ff9
Fixes Android build

Change-Id: Ifcdf492a636bd2c683be8f37bcad4a2af09fb822
Reviewed-on: https://dart-review.googlesource.com/c/85404
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Zach Anderson <zra@google.com>
2018-11-27 15:48:27 +00:00
Zach Anderson 08c42ad75d Revert "[infra] Roll buildtools to c72a1c5aadde06505b7bb4641720880f3db28ff9"
This reverts commit c2f1cd49a3.

Reason for revert: Broke android build

Original change's description:
> [infra] Roll buildtools to c72a1c5aadde06505b7bb4641720880f3db28ff9
> 
> Change-Id: I277e48e077aa8025e5d6e99fc46895bb57073c1c
> Reviewed-on: https://dart-review.googlesource.com/c/84448
> Reviewed-by: Ryan Macnak <rmacnak@google.com>
> Commit-Queue: Zach Anderson <zra@google.com>

TBR=rmacnak@google.com,zra@google.com

Change-Id: I460f9bceb3c2e9e53cbed848ed99cb1ac00491cc
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/85422
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Zach Anderson <zra@google.com>
2018-11-26 20:25:55 +00:00
Zach Anderson c2f1cd49a3 [infra] Roll buildtools to c72a1c5aadde06505b7bb4641720880f3db28ff9
Change-Id: I277e48e077aa8025e5d6e99fc46895bb57073c1c
Reviewed-on: https://dart-review.googlesource.com/c/84448
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Zach Anderson <zra@google.com>
2018-11-26 19:25:55 +00:00
Alexander Thomas 9903d86d50 [infra] Apply flutter patches in flutter-analyze builds as well
Change-Id: Ibc4b4f1267ee533040cf81d940395af1985a3b76
Reviewed-on: https://dart-review.googlesource.com/c/85386
Reviewed-by: Paul Berry <paulberry@google.com>
2018-11-26 18:42:39 +00:00
Paul Berry d7ee7b9516 Merge commit '880dfa0bca19b024bea57a20434da6f3f0fe9c87' into analyzer 2018-11-26 08:35:57 -08:00
William Hesse 81cbb51292 Add --no-status flag to test.py, so the exit code does not depend on test status.
Change-Id: I7b65077ef254655e385deb142c127731452cd508
Reviewed-on: https://dart-review.googlesource.com/c/85103
Reviewed-by: Jonas Termansen <sortie@google.com>
Commit-Queue: William Hesse <whesse@google.com>
2018-11-23 16:09:10 +00:00
Vyacheslav Egorov 1891636db0 [gardening] Final attempt to fix apply.sh.
Use git cache fetch correctly

TBR=kustermann@google.com

Change-Id: I9245ebc2bb36e4f80e815b0f4557a34f77cbbe84
Reviewed-on: https://dart-review.googlesource.com/c/85289
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-11-23 15:32:40 +00:00
Vyacheslav Egorov 6300b7e0a0 [gardening] Fix apply.sh syntax (no spaces between variable name and =)
TBR=kustermann@google.com

Change-Id: Ia268f69045d91447f5b84ee9a21926b03ecc2f58
Reviewed-on: https://dart-review.googlesource.com/c/85288
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-11-23 15:19:21 +00:00