Commit Graph

1813 Commits

Author SHA1 Message Date
Ken Stevens 01568ab0b5 Fix test race condition. 2019-02-19 21:14:11 -05:00
Ken Stevens 3af0bc7206 changes needed to support different number of consumers in matching vs delivery 2019-02-17 15:23:01 -05:00
James Agnew c6fcb4fcbf Allow canonical subscription to hold multiple extensions with the same
URL
2019-02-16 15:28:39 -05:00
jamesagnew 1311ded7de Fix compile issue 2019-02-15 14:55:25 -05:00
James Agnew c0970ed46d Fix typo in test 2019-02-15 14:30:38 -05:00
James Agnew a35f30b18e
Merge pull request #1208 from jamesagnew/reuse-subscription-channels
Reuse subscription channels
2019-02-15 13:42:54 -05:00
James Agnew 485335e975 Allow terminology service to work without having Lucene enabled for
simple ValueSet expansions
2019-02-14 20:47:28 -05:00
Ken Stevens ffc5966aa3 Merge branch 'master' into reuse-subscription-channels
# Conflicts:
#	src/changes/changes.xml
2019-02-14 19:42:00 -05:00
James Agnew 10c348d44f Tweak to elements parametr support 2019-02-14 19:30:10 -05:00
Ken Stevens 508e15956e added a couple of subscription tests and un@Ignored another 2019-02-14 15:30:25 -05:00
Ken Stevens 7b3fedc642 sonar 2019-02-13 20:41:11 -05:00
Ken Stevens f34926bb18
fixed a bug matching long ids in searchparams (#1203)
* fixed a bug matching long ids in searchparams
2019-02-09 13:45:51 -05:00
James Agnew a5e10740c0
Merge pull request #1194 from jamesagnew/ja_more_subscription_logger
More subscription logger work
2019-02-09 11:45:25 -05:00
Ken Stevens f40614a1aa fixed bug in in-memory matching for reference id when searchparam has two components 2019-02-08 16:37:08 -05:00
Ken Stevens 52c62884fb Merge branch 'master' into reuse-subscription-channels 2019-02-08 10:39:00 -05:00
James Agnew ce840ecb6e Fix broken test 2019-02-07 17:48:08 -05:00
James Agnew 810f1ad969 Improvements to elements parameter as well as adding attributes to
RequestDetails
2019-02-07 16:45:59 -05:00
Ken Stevens b3e80f8da7 Merge branch 'master' into reuse-subscription-channels 2019-02-07 10:10:10 -05:00
Ken Stevens 4592184c34 fixed typo in logs 2019-02-07 10:06:41 -05:00
James Agnew 0f8c8d18e2 Bump version to 3.8.0-SNAPSHOT 2019-02-06 20:02:28 -05:00
jamesagnew 207015c3af Version bump to 3.7.0 2019-02-05 21:36:38 -05:00
James Agnew e3dd296db7 Fix flaky test hopefully? 2019-02-05 15:36:21 -05:00
James Agnew 87a6c24bde More subscription logger work 2019-02-04 13:49:10 -05:00
James Agnew e401ec86e4
Enhanced elements (#1192)
Squashed merge: Add elements exclude mode

* Start working on elements enhancement

* Work on elements projection

* Work on elements filter

* Feature is now working

* Just some cleanup

* Address compile issues
2019-02-03 16:41:33 -05:00
James Agnew 447c394cac
Ja subscription debug logger (#1190)
Squashed commit adding subscription debug logger

* Work on subscription debug logger

* Add subscription logging interceptor

* Remove unneeded variables

* A bit of cleanup

* Tweak the output logs a bit

* Address review comments
2019-02-03 16:33:54 -05:00
Ken Stevens 9280cde491
Subscription only registers active (#1189)
* Fixed a bug in standalone subscription subscriber:  It was adding REQUESTED subscriptions to the active subscription registry.  (Only ACTIVE subscriptions should be added.)
2019-02-01 10:14:46 -05:00
jamesagnew 5f29e4fbf3 Fix #1174 - Prevent serialization exception 2019-01-30 05:49:45 -05:00
jamesagnew 5d540d9208 Query optimization in JPA 2019-01-27 20:03:48 -05:00
Ken Stevens 10c59fceeb
Subscription strategy tag (#1178)
tests pass
2019-01-25 13:01:04 -05:00
James Agnew f55be0b6d0 Test fix 2019-01-25 10:56:17 -05:00
James Agnew 38d03ea99a
Invalid ids in subscription queue (#1175)
* Start work on this

* Work on interceptors

* Attempt fix

* Avoid environment dependency

* Test fixes

* One more test fix

* One more build tweak

* Lots of cleanup

* A bit more cleanup

* Still more cleanup

* Some test fixes

* Add legacy methods temporarily

* Don't auto-scan interceptor beans

* One more test fix

* rsolve merge conflicts

* Address review comments
2019-01-23 21:17:47 -05:00
Ken Stevens 67eaeb8af1 Merge remote-tracking branch 'origin/windows-fixes' into windows-fixes 2019-01-23 17:14:51 -05:00
James Agnew e819b83a94 Make busywait more clear 2019-01-23 16:21:13 -05:00
Ken Stevens cfd67d88c7 Merge remote-tracking branch 'origin/windows-fixes' into windows-fixes 2019-01-23 16:17:48 -05:00
Ken Stevens 5c7907dfea magic number 2019-01-23 16:17:41 -05:00
James Agnew 7d1d5a102c Attempt to fix a weird lucene indexing issue 2019-01-23 16:14:53 -05:00
Ken Stevens 2c7eb39b29 final batch of windows fixes (to deal with jumpy windows clock)
also added semaphore to PointcutLatch
2019-01-22 18:53:54 -05:00
Ken Stevens 6b22977d7c fixing more tests for Windows 2019-01-21 22:28:48 -05:00
Ken Stevens 00320da9dc Merge branch 'master' into windows-fixes 2019-01-21 20:34:01 -05:00
James Agnew 9cf64f78d0 Deprecate a bad setter on RetfulServer, fix a paging issue, and add a
disabled unit test to the subscription matcher
2019-01-21 14:46:17 -05:00
Ken Stevens 29f483d7b4 Merge branch 'master' into windows-fixes 2019-01-21 11:06:42 -05:00
Ken Stevens b4350bbdae Working through failed tests. Consolidating sleep calls 2019-01-21 11:05:53 -05:00
James Agnew 17f03ac843 Allow null return type for interceptors 2019-01-20 19:44:18 -05:00
James Agnew c3c7d156e9 Interceptor cleanup 2019-01-20 10:16:18 -05:00
jamesagnew b878925884 Try to avoid intermittent test failure 2019-01-19 18:44:09 -05:00
jamesagnew cd1e0e881c Add headers 2019-01-19 18:31:17 -05:00
jamesagnew b0cbd52ae9 Interceptor cleanup 2019-01-19 18:01:00 -05:00
James Agnew 29c3cee287
Merge pull request #1172 from jamesagnew/ja-subscription-interceptors
Ja subscription interceptors
2019-01-19 07:13:14 -06:00
James Agnew 3e84173180 Merge branch 'master' into ja-subscription-interceptors 2019-01-18 17:52:23 -05:00
Ken Stevens 3d07fc1c22
fixed null subscription id (#1170)
* fixed null subscription id
2019-01-18 10:39:35 -05:00
James Agnew 5ce9d444e9 Work on interceptors 2019-01-18 09:04:45 -05:00
jamesagnew 5fd084d7cf Fix a couple of merge conflicts 2019-01-18 05:47:37 -05:00
Volker Schmidt 432ad8e5bc Subscription without Payload did not contain header. 2019-01-18 05:41:47 -05:00
Ken Stevens 66dc7f82d5 organize imports 2019-01-15 20:55:00 -05:00
Ken Stevens 19afcb7e09 all tests pass 2019-01-15 18:22:08 -05:00
jamesagnew a584e15251 Add headers 2019-01-14 14:58:27 -05:00
Ken Stevens 4f5640e541
Resilient searchparamregistry (#1165)
SearchParamRegistry and SubscriptionRegistry now both poll retrying connection to the server. This will help in particular in the scenario where the subscriptions are managed in a standalone server that depends on a FHIR Server being available to pull search parameters and subscriptions from.
2019-01-14 11:39:28 -05:00
James Agnew 4b48eebe8b Merge branch 'master' of github.com:jamesagnew/hapi-fhir 2019-01-13 12:27:40 -06:00
James Agnew 63b8a70e8a Allow storing ConceptMap with StructureDefinition as a source or target 2019-01-13 12:24:51 -06:00
James Agnew 068117138e
Merge branch 'master' into subscription-bugfix 2019-01-11 09:05:37 -06:00
Ken Stevens 860a8fb7a6 Emergency fix.
Normally I'd write a test for this, but this startup behaviour is changing in my next PR.
2019-01-11 09:49:40 -05:00
James Agnew aee7b2b882 Make sure that sub-request transaction searches and reads preserve HTTP
headers
2019-01-10 07:26:04 -07:00
James Agnew d091665ab6 Test fix 2019-01-09 14:40:43 -05:00
James Agnew f241457bc1 Merge branch 'master' into test-openjdk-11 2019-01-09 13:42:50 -05:00
Ken Stevens 66dd6dc96c updated documentation 2019-01-09 13:39:32 -05:00
Ken Stevens cdf1cd9144 undoing inadvertent comment changes 2019-01-09 13:39:32 -05:00
Ken Stevens 3142ebb892 Fixed typo in class name
Added channel extensions to CanonicalSubscription
2019-01-09 13:39:32 -05:00
Ken Stevens d809569a2d Added new DaoConfig parameter to control whether subscription matching happens on this server. 2019-01-09 13:39:32 -05:00
James Agnew 8beccab9ab Merge branch 'master' into test-openjdk-11 2019-01-09 10:48:57 -05:00
James Agnew 62ae71c1c6 Allow authorizing delete operations via a transaction in
AuthorizationInterceptor
2019-01-07 15:43:36 -05:00
jamesagnew a8a97ae6b2 Two test fixes 2019-01-07 09:18:11 -05:00
James Agnew c104923855 Add an additional test for transaction processing 2019-01-07 09:17:19 -05:00
jamesagnew 8f8385627f Merge branch 'master' of github.com:jamesagnew/hapi-fhir 2019-01-05 11:33:08 -05:00
jamesagnew 98d93df12a License header updates 2019-01-04 16:22:15 -05:00
James Agnew 5b8fee869e Add config options for default Prefer header and _total param on server 2019-01-04 16:12:45 -05:00
James Agnew ba76492865 Another test fix 2019-01-04 14:04:26 -05:00
James Agnew 137d39e80f Another test fix 2019-01-04 13:53:24 -05:00
James Agnew 051074d0bc Work on tests 2019-01-04 13:05:39 -05:00
James Agnew a1275874f8 Correct subscription delivery metadata 2019-01-04 10:56:21 -05:00
James Agnew 7ba07d9f02 Avoid search failure on Oracle when performing very large includes 2019-01-04 09:11:11 -05:00
James Agnew 31b8a392b7 Better CLI error handling for unit tests 2019-01-03 12:57:18 -05:00
James Agnew 14a132a937 Squashed commit of the following:
commit 9659655830
Author: James Agnew <jamesagnew@gmail.com>
Date:   Thu Dec 27 17:54:25 2018 -0500

    Finish sync

commit 70da25b76f
Author: jamesagnew <jamesagnew@gmail.com>
Date:   Thu Dec 27 10:32:51 2018 -0500

    Work on RI4 sync
2018-12-27 17:58:47 -05:00
jamesagnew 28218c9bba Version bump for build JDK 2018-12-23 15:14:43 -05:00
Ken Stevens fedc59a8d6 Subscription module startup changes (#1154)
* Reorganizing packages and dependencies to support standalone subscription running within a CDR container where all hapi modules are on the classpath.

* EXPERIMENTAL: Moved Subscription registry out of interceptor and introduced ISubscriptionLoader that will be either a Database or FhirClient loader.

5 tests fail.  Looks like we're getting too many matches--likely because there is now just one list of subscriptions instead of one list per interceptor.

* Created ActiveSubscription and moved cache bits into it

* Compiles.  Next step is get app context to load.

* Application context loads.  Now fix NullPointer.

* All subscription tests pass

* FIXME cleanup

* jpa-subscription tests

* fixed config so other module tests work

* MAJOR MILESTONE: All hapi-fhir tests pass.

updated READMEs in example projects

* Moved ExecutorQueue stuff out into its own class

* Organize Imports

* FIXME cleanup

* Null check -> Optional

* Add test and supporting code to validate SubscriptionConstants.EXT_SUBSCRIPTION_RESTHOOK_DELIVER_LATEST_VERSION behaviour

* Added SubscriptionCheckingSubscriber test that works without a database

* Moved a few beans to @ComponentScan

* Replaced use of beanFactory with concrete factory classes

* Switched test to use subscribablechannel

* Added SubscriptionLoaderFhirClientTest

* Undid changes that caused SearchParamProviderFhirClientTest to revert to the Database version.  It's now calling the FhirClient version again.  (oops)

* Confirm that our SubscriptionProviderFhirClient works with a live fhir client

* Organize imports

* Organize imports

* Register interceptors with DaoConfig instead of RestServer.
Also, Rename @VisibleForTesting methods with ForUnitTest

* Ready to go

* organize imports

* add processing queue

* Fixed interface implementation names

* Fix triggering service so it uses new subscriptionmatcherinterceptor

* fixed example

* Renamed "Database" classes to "Dao"

* Tightened up StoppableSubscriber API

* final code review

* processing -> matching naming change

* fix required by CDR

* oops

* Updated changes.xml

* Renamed subscriptioncheckingsubscriber to subscriptionmatchingsubscriber

* Renamed subscriptioncheckingsubscriber to subscriptionmatchingsubscriber

* CDR integration now works

* Changing subscribable channel abstraction layer in preparation for supporting more types of subscribable channels

* Add interface over both types of messages put on queues

* cosmetic change

* added subscription support for r4

* fixed again

* oops

* self code-review
2018-12-23 13:52:26 -05:00
James Agnew 9d3904ef3e Fix #1142 - Upgrade Spring Boot to latest version 2018-12-23 13:10:03 -05:00
James Agnew a0cb7edd08 Version bump a few dependencies 2018-12-22 20:13:03 -05:00
James Agnew 1311ef4157 Revert to JDK9 to build on travis temporarily 2018-12-21 09:26:19 -05:00
James Agnew f5f9dff391 Merge branch 'master' of github.com:jamesagnew/hapi-fhir 2018-12-18 14:09:20 -05:00
James Agnew bca958564f Just a javadoc change 2018-12-18 14:09:11 -05:00
jamesagnew 86b3e45a32 License header updates 2018-12-18 14:08:01 -05:00
Ken Stevens 84a34eb3c9
Subscription module support (#1147)
* Reorganizing packages and dependencies to support standalone subscription running within a CDR container where all hapi modules are on the classpath.

Moved Subscription registry out of interceptor and introduced SubscriptionLoader

* Created ActiveSubscription and moved cache bits into it

* Moved ExecutorQueue stuff out into its own class

* Add test and supporting code to validate SubscriptionConstants.EXT_SUBSCRIPTION_RESTHOOK_DELIVER_LATEST_VERSION behaviour

* Added SubscriptionCheckingSubscriber

* Moved a few beans to @ComponentScan

* Replaced use of beanFactory with concrete factory classes

* Switched test to use subscribablechannel

* Added SubscriptionLoaderFhirClientTest

* Confirm that our SubscriptionProviderFhirClient works with a live fhir client

* Register interceptors with DaoConfig instead of RestServer.
Also, Rename @VisibleForTesting methods with ForUnitTest

* Fix triggering service so it uses new subscriptionmatcherinterceptor

* Renamed "Database" classes to "Dao"

* processing -> matching naming change
2018-12-18 13:09:06 -05:00
James Agnew dc1f48ffed Test fix 2018-12-14 14:13:02 -05:00
James Agnew f978bc3039 Always apply new search params to any resource reindexing 2018-12-14 13:43:25 -05:00
James Agnew 11b8304cb4 Fix case sensitivity issue 2018-12-13 08:31:35 -05:00
James Agnew b442982310 Add media interceptor 2018-12-08 18:49:58 -05:00
James Agnew 5a80e70d93 Correctly reindex string indexes 2018-12-06 14:44:42 -05:00
James Agnew a5b1f684f7 Try to prevent intermittent test failure 2018-12-05 19:28:37 -05:00
James Agnew cbaa39fd63
Try to reuse index rows in JPA server (#1133)
* Try to reuse index rows in JPA server

* Address review comments

* One more test fix

* One more test
2018-12-05 19:25:59 -05:00
James Agnew d150340d53 One more test fix 2018-12-04 19:55:14 -05:00
James Agnew 29af6160d6 Fix typo 2018-12-04 18:54:26 -05:00
James Agnew 1d3bcd9e8f Fix indexing bug 2018-12-04 18:50:49 -05:00
James Agnew d9ce0ebf7c Unit test fix 2018-12-04 18:24:19 -05:00
James Agnew 8c7f249a21 Migrator enhancements and adjust reindexer to account for missing
versions
2018-12-04 17:33:29 -05:00
James Agnew c484c69664 Better error message for unqualified search parameter types 2018-12-03 13:14:10 -05:00
jamesagnew 82f40f0423 License header updates 2018-12-03 05:22:10 -05:00
Ken Stevens 6baee4dc3f
Standalone subscription (#1125) 2018-11-30 17:19:16 -05:00
James Agnew b2179b1696 Syntax fixes for the JPA migrator 2018-11-30 12:39:37 -05:00
James Agnew 364b6cc5fd One more test fix 2018-11-22 18:40:39 -05:00
James Agnew 055478e1f1 Test fixes 2018-11-22 18:22:33 -05:00
James Agnew ce3b7c82ce Avoid issues when using subscription delivery in a serializing/queuing
environment
2018-11-22 17:53:42 -05:00
James Agnew d0b194f9d7 Fix two test failures 2018-11-22 08:41:12 -05:00
James Agnew 2e030eebaa Make sure that reindexing happens correctly 2018-11-21 12:06:10 -05:00
James Agnew e8482f5c87 Merge branch 'master' of github.com:jamesagnew/hapi-fhir 2018-11-20 13:59:51 -05:00
James Agnew 7cbad7f4e3 A bit of cleanup around subscription wiring following in-memory matcher
landing
2018-11-20 13:59:31 -05:00
jamesagnew 4c84b8fc89 Add a bit more test logging 2018-11-20 05:33:32 -05:00
Ken Stevens 03ebcafdf5
In-memory matcher (#1116)
* Initial refactoring to move database matcher out into its own class

* MAJOR REFACTOR: Pulled indexing code out of BaseHapiFhirDao into a new class ResourceIndexedSearchParams

* Moved calculateHashes

* Replaced @Bean definitions in BaseConfig.java with @ComponentScan

Annotated bean classes with either @Service (if it's stateless) or @Component (if it's stateful).  It doesn't really matter which annotation is used, but it's helpful to see at a glance whether a bean is stateful or stateless.

* Move services out of BaseHapiFhirDao

Moved services required by ResourceIndexedSearchParams out of BaseHapiFhirDao and into new classes called LogicalReferenceHelper, IdHelperService, MatchUrlService, and DaoProvider.

Converted SearchBuilder into Prototype Bean

Mark Spring components that depend on daos and entitymanagers with @Lazy so they aren't picked up by hapi-fhir-spring-boot-autoconfigure.

* Added SubscriptionMatcherInMemory

Moved static data out of BaseHapiFhirDao into ResourceMetaParams

Moved translateMatchUrl methods out of BaseHapiFhirDao into MatchUrlService bean

Simplified SubscriptionMatcherInMemory to not depend on entity or dao

Turned all subscribers into prototype beans

* Moved searchParam method out to mySearchParamProvider

Also removed dao and contest parameters from of myMatchUrlService methods

Moved code out of SearchBuilder into SearchParameterMap.clean() so it can be used by inMemoryMatcher

Introduced a new composite subscription matcher that tries to match in memory and if it finds a parameter in the criteria it doesn't support, it falls back to the database matcher.

* Added support for references

Also fixed a small bug in SearchParameterMap that was missing the ";" after "_has" when creating a normalized query from search params.

* Finished implementing all tests from FhirResourceDaoR4SearchNoFtTest

* Make in-memory matcher configurable, disabled by default

* Validate Subscription criteria when they're submitted

Send HTTP 422 UnprocessableEntityException if the criteria fail validation.

* fixed Sonar "Blocker" issues.

*  Don't reload the resource before sending it out

Since we can always force a reload using restHookDetails.isDeliverLatestVersion

* Added tests to cover Custom Search param.

* Split ResourceIndexedSearchParam into separate state and service classes

* Cleaned up SearchBuilder.

Removed uses of myCallingDao as an injection mechanism.
Left // FIXME KHS cookie crumbs to clean up

* Reduced dependencies on BaseHapiFhirDao

Removed methods from IDao interface that were used for injection

* Updated change log
2018-11-19 16:19:52 -05:00
James Agnew 45a5db6fd8 One more fix 2018-11-19 13:31:01 -05:00
James Agnew 719339fc14 One more test fix 2018-11-19 10:27:16 -05:00
James Agnew 67dbc802be Better detection of binary content in ResponseHighlighterInterceptor 2018-11-18 14:32:54 +01:00
James Agnew fad53c6669 Fix a test 2018-11-16 13:15:14 +01:00
James Agnew 6a6451f694 Reduce number of queries on some DB operations 2018-11-16 12:41:50 +01:00
James Agnew 1de0ef405c Clean up test compile and reenable GraphQL on hapi.fhir.org 2018-11-16 11:15:44 +01:00
James Agnew 84acafe3af Streamline expunge operation 2018-11-15 11:37:16 +01:00
James Agnew 75210d614b Bump to 3.7.0-SNAPSHOT 2018-11-12 22:37:52 -05:00
James Agnew 63af04a7b4 Prepare for 3.6.0 release 2018-11-12 05:40:55 -05:00
jamesagnew 030b33a0f2 Merge branch 'master' of github.com:jamesagnew/hapi-fhir 2018-11-09 15:59:34 -05:00
jamesagnew 4a0c45a494 License updates 2018-11-09 15:59:23 -05:00
James Agnew c81a59bb9a Only use FHIRPath to validate searchparameterr paths in R4 2018-11-09 15:57:34 -05:00
James Agnew 7f6f06dddf Merge branch 'master' of github.com:jamesagnew/hapi-fhir 2018-11-09 15:47:22 -05:00
James Agnew 5834e6aa62 Test fixes 2018-11-09 15:32:55 -05:00
jamesagnew 3942f1bb29 License header updates 2018-11-09 14:41:57 -05:00
James Agnew f61df5c3fe Use FHIRPath expression parser for custom SP validation 2018-11-09 14:41:20 -05:00
jamesagnew a3e79b5759 License updates only 2018-11-08 15:28:09 -05:00
James Agnew 3ae5f9a3b7 Build tweak 2018-11-08 14:04:21 -05:00
James Agnew cca49425ae Some work on collection processing 2018-11-08 08:56:51 -05:00
James Agnew 76cd3f6b47 Allow client assigned IDs to be purely numeric in JPA server if
configured to do so
2018-11-07 18:25:50 -05:00
James Agnew 62145e1b74 Merge branch 'master' of github.com:jamesagnew/hapi-fhir 2018-11-07 11:02:02 +01:00
James Agnew 4b790eddb6 Add additional authorization test 2018-11-07 11:01:29 +01:00
jamesagnew 896568c0f7 License updates 2018-11-04 16:06:53 -05:00
James Agnew bc72093555 Add reindexing support based on table instead of column 2018-11-04 20:00:27 +01:00
James Agnew b1283791ca Allow JPA server to restore resources and link to them in a single
transaction
2018-11-02 16:45:21 -04:00
jamesagnew 1b877ac03e Add licene headers 2018-11-01 09:15:51 -04:00
James Agnew 4315900ac0 Merge branch 'philips-3.6.0' 2018-11-01 09:15:27 -04:00
James Agnew 3bfdc61866 Fix a couple of test failures 2018-11-01 09:15:03 -04:00
jamesagnew 3f6960d82b Add multithreaded migrator tool 2018-11-01 05:42:51 -04:00
James Agnew c8834cd29a Merge branch 'philips-3.6.0' of github.com:jamesagnew/hapi-fhir into philips-3.6.0 2018-10-31 17:19:28 -04:00
James Agnew 041a4c4018 Fix SearchCoordinator tests 2018-10-31 12:36:27 -04:00
jamesagnew 31ef4c68e1 Merge branch 'philips-3.6.0' of github.com:jamesagnew/hapi-fhir into philips-3.6.0 2018-10-31 05:51:13 -04:00
jamesagnew 8955a9e54d Add threading to migrator 2018-10-31 05:50:50 -04:00
James Agnew 7acba90d15 Update search logic 2018-10-30 22:43:16 -04:00