Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | Fix bugs in invite/join dances. | Erik Johnston | 2014-11-25 | 2 | -70/+69 |
| | | | | | We now do more implement more of the auth on the events so that we don't reject valid events. | ||||
* | Add missing None check | Erik Johnston | 2014-11-24 | 1 | -1/+1 |
| | |||||
* | Fix pep8 codestyle warnings | Mark Haines | 2014-11-20 | 2 | -2/+2 |
| | |||||
* | Use module loggers rather than the root logger. Exceptions caused by bad ↵ | Mark Haines | 2014-11-20 | 2 | -2/+7 |
| | | | | clients shouldn't cause ERROR level logging. Fix sql logging to use 'repr' rather than 'str' | ||||
* | Only users can set state events which have their own user_id | Erik Johnston | 2014-11-19 | 1 | -0/+20 |
| | |||||
* | replace user_id with sender | Mark Haines | 2014-11-19 | 1 | -1/+3 |
| | |||||
* | SYN-144: Remove bad keys from pdu json objects, convert age_ts to age | Mark Haines | 2014-11-18 | 1 | -1/+12 |
| | | | | for all pdus sent. | ||||
* | Null check when determining default power levels | Mark Haines | 2014-11-18 | 1 | -1/+2 |
| | |||||
* | Fix auth to correctly handle initial creation of rooms | Erik Johnston | 2014-11-18 | 1 | -3/+21 |
| | |||||
* | Merge PDUs and Events into one object | Mark Haines | 2014-11-14 | 2 | -0/+8 |
| | |||||
* | Fix bugs with invites/joins across federatiom. | Erik Johnston | 2014-11-12 | 1 | -3/+16 |
| | | | | | Both in terms of auth and not trying to fetch missing PDUs for invites, joins etc. | ||||
* | Fix typo in validator | Erik Johnston | 2014-11-11 | 1 | -2/+8 |
| | |||||
* | Add EventValidator module | Erik Johnston | 2014-11-11 | 1 | -0/+81 |
| | |||||
* | Add an EventValidator. Fix bugs in auth ++ storage | Erik Johnston | 2014-11-10 | 2 | -66/+11 |
| | |||||
* | PEP8 | Erik Johnston | 2014-11-10 | 2 | -2/+2 |
| | |||||
* | Fix backfill to work. Add auth to backfill request | Erik Johnston | 2014-11-10 | 1 | -0/+6 |
| | |||||
* | Notify users about invites. | Erik Johnston | 2014-11-10 | 1 | -7/+9 |
| | |||||
* | Fix invite auth | Erik Johnston | 2014-11-10 | 1 | -3/+5 |
| | |||||
* | Finish redaction algorithm. | Erik Johnston | 2014-11-10 | 2 | -15/+28 |
| | |||||
* | Add hash of current state to events | Erik Johnston | 2014-11-07 | 1 | -0/+1 |
| | |||||
* | Fix joining over federation | Erik Johnston | 2014-11-07 | 2 | -3/+52 |
| | |||||
* | Start implementing auth chains | Erik Johnston | 2014-11-07 | 2 | -3/+2 |
| | |||||
* | Neaten things up a bit | Erik Johnston | 2014-11-07 | 1 | -5/+2 |
| | |||||
* | Amalgamate all power levels. | Erik Johnston | 2014-11-06 | 5 | -190/+86 |
| | | | | | Remove concept of reqired power levels, something similiar can be done using the new power level event. | ||||
* | Don't send prev_state to clients anymore | Erik Johnston | 2014-11-06 | 1 | -1/+1 |
| | |||||
* | Implement new replace_state and changed prev_state | Erik Johnston | 2014-11-06 | 1 | -0/+1 |
| | | | | | `prev_state` is now a list of previous state ids, similiar to prev_events. `replace_state` now points to what we think was replaced. | ||||
* | Fix auth checks to all use the given old_event_state | Erik Johnston | 2014-11-05 | 1 | -24/+31 |
| | |||||
* | Move FederationError to synapse.api.errors | Erik Johnston | 2014-11-04 | 1 | -0/+34 |
| | |||||
* | Fix bugs in generating event signatures and hashing | Erik Johnston | 2014-11-03 | 1 | -0/+1 |
| | |||||
* | Rename PDU fields to match that of events. | Erik Johnston | 2014-11-03 | 1 | -1/+1 |
| | |||||
* | Add 'origin' key to events | Erik Johnston | 2014-11-03 | 1 | -0/+4 |
| | |||||
* | Fix bug in redaction auth. | Erik Johnston | 2014-10-31 | 1 | -2/+2 |
| | | | | | This caused a 500 when sending a redaction due to a typo in a method invocation. | ||||
* | Convert event ids to be of the form :example.com | Erik Johnston | 2014-10-30 | 1 | -1/+5 |
| | |||||
* | Merge branch 'develop' of github.com:matrix-org/synapse into ↵ | Erik Johnston | 2014-10-30 | 3 | -3/+4 |
|\ | | | | | | | federation_authorization | ||||
| * | Fix pep8 warnings | Mark Haines | 2014-10-30 | 3 | -3/+4 |
| | | |||||
* | | Begin implementing all the PDU storage stuff in Events land | Erik Johnston | 2014-10-28 | 1 | -1/+3 |
| | | |||||
* | | Merge branch 'event_signing' of github.com:matrix-org/synapse into ↵ | Erik Johnston | 2014-10-27 | 2 | -9/+16 |
|\ \ | | | | | | | | | | | | | | | | | | | federation_authorization Conflicts: synapse/storage/__init__.py | ||||
| * | | Merge branch 'develop' into event_signing | Mark Haines | 2014-10-17 | 1 | -2/+2 |
| |\| | | | | | | | | | | | | | Conflicts: synapse/federation/replication.py | ||||
| * | | Include hashes of previous pdus when referencing them | Mark Haines | 2014-10-16 | 1 | -1/+1 |
| | | | |||||
| * | | persist hashes and origin signatures for PDUs | Mark Haines | 2014-10-15 | 1 | -8/+15 |
| | | | |||||
* | | | Merge branch 'develop' of github.com:matrix-org/synapse into ↵ | Erik Johnston | 2014-10-27 | 1 | -2/+2 |
|\ \ \ | | |/ | |/| | | | | | | | | | | | | | | | | federation_authorization Conflicts: synapse/federation/transport.py synapse/handlers/message.py | ||||
| * | | SPEC-7: Rename 'ts' to 'origin_server_ts' | Mark Haines | 2014-10-17 | 1 | -2/+2 |
| |/ | |||||
* | | Fix bug where people could join private rooms | Erik Johnston | 2014-10-17 | 1 | -39/+47 |
| | | |||||
* | | Use state groups to get current state. Make join dance actually work. | Erik Johnston | 2014-10-17 | 1 | -0/+5 |
| | | |||||
* | | Finish implementing the new join dance. | Erik Johnston | 2014-10-17 | 2 | -3/+20 |
| | | |||||
* | | Start implementing the invite/join dance. Continue moving auth to use ↵ | Erik Johnston | 2014-10-16 | 1 | -10/+6 |
| | | | | | | | | event.state_events | ||||
* | | Begin making auth use event.old_state_events | Erik Johnston | 2014-10-15 | 1 | -43/+70 |
|/ | |||||
* | Respond with more helpful error messages for unsigned requests | Mark Haines | 2014-10-13 | 1 | -0/+1 |
| | |||||
* | Merge branch 'develop' into server2server_signing | Mark Haines | 2014-09-30 | 5 | -14/+150 |
|\ | | | | | | | | | | | Conflicts: synapse/storage/__init__.py tests/rest/test_presence.py | ||||
| * | Update docstring | Erik Johnston | 2014-09-29 | 1 | -1/+1 |
| | | |||||
| * | SYN-48: Implement WHOIS rest servlet | Erik Johnston | 2014-09-29 | 1 | -9/+19 |
| | | |||||
| * | Add auth check to test if a user is an admin or not. | Erik Johnston | 2014-09-29 | 1 | -0/+3 |
| | | |||||
| * | SYN-48: Track User-Agents as well as IPs for client devices. | Erik Johnston | 2014-09-29 | 1 | -1/+10 |
| | | |||||
| * | Track the IP users connect with. Add an admin column to users table. | Erik Johnston | 2014-09-26 | 1 | -1/+9 |
| | | |||||
| * | Merge branch 'deletions' of github.com:matrix-org/synapse into develop | Erik Johnston | 2014-09-25 | 5 | -6/+112 |
| |\ | |||||
| | * | Don't strip out null's in serialized events, as that is not need anymore and ↵ | Erik Johnston | 2014-09-25 | 1 | -1/+2 |
| | | | | | | | | | | | | it's not in the spec (yet) | ||||
| | * | Don't strip of False values from events when serializing | Erik Johnston | 2014-09-25 | 1 | -1/+1 |
| | | | |||||
| | * | Rename deletions to redactions | Erik Johnston | 2014-09-24 | 5 | -18/+18 |
| | | | |||||
| | * | Fill out the prune_event method. | Erik Johnston | 2014-09-24 | 1 | -6/+31 |
| | | | |||||
| | * | Rename 'pruned' to 'pruned_because' | Erik Johnston | 2014-09-23 | 1 | -1/+1 |
| | | | |||||
| | * | SYN-12: Implement auth for deletion by adding a 'delete_level' on the ops ↵ | Erik Johnston | 2014-09-23 | 1 | -3/+31 |
| | | | | | | | | | | | | | | | | | | levels event SYN-12 # comment Auth has been added. | ||||
| | * | Add prune_event method | Erik Johnston | 2014-09-23 | 1 | -0/+39 |
| | | | |||||
| | * | Add m.room.deletion. If an event is deleted it will be returned to clients ↵ | Erik Johnston | 2014-09-23 | 3 | -3/+16 |
| | | | | | | | | | | | | 'pruned', i.e. all client specified keys will be removed. | ||||
| * | | SYN-70: And fix another bug where I can't type | Erik Johnston | 2014-09-24 | 1 | -1/+1 |
| | | | |||||
| * | | SYN-70: Fix typo | Erik Johnston | 2014-09-24 | 1 | -1/+1 |
| |/ | |||||
* / | Add a _matrix/key/v1 resource with the verification keys of the local server | Mark Haines | 2014-09-23 | 1 | -1/+2 |
|/ | |||||
* | Merge branch 'develop' into test-sqlite-memory | Paul "LeoNerd" Evans | 2014-09-17 | 2 | -4/+11 |
|\ | |||||
| * | Fix bug where we didn't always get 'prev_content' key | Erik Johnston | 2014-09-15 | 1 | -4/+1 |
| | | |||||
| * | Fix bug where we incorrectly calculated 'age_ts' from 'age' key rather than ↵ | Erik Johnston | 2014-09-15 | 1 | -0/+1 |
| | | | | | | | | the reverse. Don't transmit age_ts to clients for now. | ||||
| * | Merge branch 'develop' of github.com:matrix-org/synapse into ↵ | Kegan Dougal | 2014-09-15 | 2 | -0/+21 |
| |\ | | | | | | | | | | registration-api-changes in preparation for re-merge to develop. | ||||
| * | | Added LoginType constants. Created general structure for processing ↵ | Kegan Dougal | 2014-09-15 | 1 | -0/+9 |
| | | | | | | | | | | | | registrations. | ||||
* | | | Print expected-vs-actual data types on typecheck failure from check_json() | Paul "LeoNerd" Evans | 2014-09-17 | 1 | -1/+2 |
| |/ |/| | |||||
* | | Correctly handle the 'age' key in events and pdus | Erik Johnston | 2014-09-15 | 2 | -0/+21 |
|/ | |||||
* | Added captcha support on both the HS and web client. | Kegan Dougal | 2014-09-05 | 1 | -0/+15 |
|\ | | | | | | | Merge branch 'captcha' of github.com:matrix-org/synapse into develop | ||||
| * | Captchas now work on registration. Missing x-forwarded-for config arg ↵ | Kegan Dougal | 2014-09-05 | 1 | -1/+15 |
| | | | | | | | | support. Missing reloading a new captcha on the web client / displaying a sensible error message. | ||||
| * | Added a captcha config to the HS, to enable registration captcha checking ↵ | Kegan Dougal | 2014-09-05 | 1 | -0/+1 |
| | | | | | | | | and for the recaptcha private key. | ||||
* | | Fix generation of event ids so that they are consistent between local and ↵ | Erik Johnston | 2014-09-06 | 1 | -1/+4 |
| | | | | | | | | remote ids | ||||
* | | When getting a state event also include the previous content | Erik Johnston | 2014-09-06 | 1 | -1/+6 |
| | | |||||
* | | Validate power levels event changes. Change error messages to be more ↵ | Erik Johnston | 2014-09-05 | 1 | -10/+37 |
| | | | | | | | | helpful. Fix bug where we checked the wrong power levels | ||||
* | | Generate m.room.aliases event when the HS creates a room alias | Erik Johnston | 2014-09-05 | 2 | -1/+13 |
|/ | |||||
* | AUth the contents of power level events | Erik Johnston | 2014-09-05 | 1 | -1/+72 |
| | |||||
* | Change the default power levels to be 0, 50 and 100 | Erik Johnston | 2014-09-05 | 1 | -2/+2 |
| | |||||
* | fix the copyright holder from matrix.org to OpenMarket Ltd, as matrix.org ↵ | Matthew Hodgson | 2014-09-03 | 9 | -9/+9 |
| | | | | hasn't been incorporated in time for launch. | ||||
* | Updated feedback api docs and fixed feedback content template bug | Kegan Dougal | 2014-09-03 | 1 | -2/+1 |
| | |||||
* | Add copyright notices and fix pyflakes errors | Mark Haines | 2014-09-03 | 1 | -1/+15 |
| | |||||
* | Set status message for ratelimit error responses | Mark Haines | 2014-09-03 | 1 | -0/+2 |
| | |||||
* | Merge branch 'ratelimiting' into develop | Mark Haines | 2014-09-03 | 2 | -7/+93 |
|\ | |||||
| * | Raise LimitExceedError when the ratelimiting is throttling requests | Mark Haines | 2014-09-03 | 1 | -7/+27 |
| | | |||||
| * | Add ratelimiting function to basehandler | Mark Haines | 2014-09-02 | 1 | -0/+1 |
| | | |||||
| * | Test ratelimiter | Mark Haines | 2014-09-02 | 1 | -19/+48 |
| | | |||||
| * | Ratelimiter object | Mark Haines | 2014-09-02 | 1 | -0/+36 |
| | | |||||
* | | Fix bug where we didn't correctly store the ops power levels event. | Erik Johnston | 2014-09-02 | 1 | -0/+5 |
|/ | |||||
* | Implement auth for kicking. | Erik Johnston | 2014-09-02 | 1 | -3/+10 |
| | |||||
* | Add all the necessary checks to make banning work. | Erik Johnston | 2014-09-01 | 2 | -2/+40 |
| | |||||
* | Add beginnings of ban support. | Erik Johnston | 2014-09-01 | 4 | -2/+30 |
| | |||||
* | Implement power level lists, default power levels and ↵ | Erik Johnston | 2014-09-01 | 3 | -17/+97 |
| | | | | send_evnet_level/add_state_level events. | ||||
* | Merge branch 'develop' of github.com:matrix-org/synapse into room_config | Erik Johnston | 2014-09-01 | 1 | -4/+4 |
|\ | |||||
| * | change the world: make the default matrix API URL prefix /_matrix rather ↵ | Matthew Hodgson | 2014-08-31 | 1 | -4/+4 |
| | | | | | | | | | | | | than /matrix to make it easier for existing websites to mount a HS in their namespace without collisions. perl -pi -e 's#/matrix#/_matrix#g' ./cmdclient/console.py ./docs/client-server/howto.rst ./docs/client-server/specification.rst ./docs/client-server/swagger_matrix/directory ./docs/client-server/swagger_matrix/events ./docs/client-server/swagger_matrix/login ./docs/client-server/swagger_matrix/presence ./docs/client-server/swagger_matrix/profile ./docs/client-server/swagger_matrix/registration ./docs/client-server/swagger_matrix/rooms ./docs/server-server/specification.rst ./graph/graph.py ./jsfiddles/create_room_send_msg/demo.js ./jsfiddles/event_stream/demo.js ./jsfiddles/example_app/demo.js ./jsfiddles/register_login/demo.js ./jsfiddles/room_memberships/demo.js ./synapse/api/urls.py ./tests/federation/test_federation.py ./tests/handlers/test_presence.py ./tests/handlers/test_typing.py ./tests/rest/test_events.py ./tests/rest/test_presence.py ./tests/rest/test_profile.py ./tests/rest/test_rooms.py ./webclient/components/fileUpload/file-upload-service.js ./webclient/components/matrix/matrix-service.js | ||||
* | | Create the correct events with the right configuration when creating a new room. | Erik Johnston | 2014-08-28 | 4 | -2/+50 |
|/ | |||||
* | Merge branch 'develop' into storage_transactions | Mark Haines | 2014-08-27 | 3 | -493/+0 |
|\ | | | | | | | | | | | Conflicts: synapse/handlers/room.py synapse/storage/stream.py | ||||
| * | Merge branch 'develop' of github.com:matrix-org/synapse into stream_refactor | Erik Johnston | 2014-08-27 | 1 | -0/+2 |
| |\ | | | | | | | | | | | | | | | | | | | Conflicts: synapse/handlers/events.py synapse/rest/events.py synapse/rest/room.py | ||||
| * \ | Merge branch 'develop' of github.com:matrix-org/synapse into stream_refactor | Erik Johnston | 2014-08-26 | 2 | -9/+11 |
| |\ \ | |||||
| * | | | WIP: Completely change how event streaming and pagination work. This ↵ | Erik Johnston | 2014-08-26 | 3 | -497/+0 |
| | | | | | | | | | | | | | | | | reflects the change in the underlying storage model. | ||||
| * | | | Merge branch 'develop' of github.com:matrix-org/synapse into stream_refactor | Erik Johnston | 2014-08-26 | 2 | -5/+1 |
| |\ \ \ | |||||
| * \ \ \ | Merge branch 'develop' of github.com:matrix-org/synapse into stream_refactor | Erik Johnston | 2014-08-26 | 6 | -21/+32 |
| |\ \ \ \ | |||||
| * | | | | | Use new StreamToken in pagination config | Erik Johnston | 2014-08-21 | 1 | -5/+9 |
| | | | | | | |||||
* | | | | | | add _get_room_member, fix datastore methods | Mark Haines | 2014-08-27 | 1 | -1/+3 |
| | | | | | | |||||
* | | | | | | Merge branch 'develop' into storage_transactions | Mark Haines | 2014-08-27 | 3 | -9/+13 |
|\ \ \ \ \ \ | | |_|_|_|/ | |/| | | | | |||||
| * | | | | | Modified /join/$identifier to support $identifier being a room ID in ↵ | Kegan Dougal | 2014-08-27 | 1 | -0/+2 |
| | |_|_|/ | |/| | | | | | | | | | | | | | addition to a room alias. | ||||
| * | | | | Feedback: Removed FeedbackRestServlet. Modified keys on FeedbackEvent. ↵ | Kegan Dougal | 2014-08-26 | 2 | -9/+11 |
| | |_|/ | |/| | | | | | | | | | | Expanded the feedback constants to fully explain what type of feedback they are. | ||||
* | | | | Merge branch 'develop' into storage_transactions | Mark Haines | 2014-08-26 | 7 | -30/+37 |
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: synapse/api/auth.py synapse/handlers/room.py synapse/storage/__init__.py | ||||
| * | | | Fix pyflakes errors | Mark Haines | 2014-08-26 | 2 | -5/+1 |
| | |/ | |/| | |||||
| * | | Merge branch 'develop' of github.com:matrix-org/synapse into ↵ | Kegan Dougal | 2014-08-26 | 1 | -1/+1 |
| |\ \ | | | | | | | | | | | | | client_server_url_rename | ||||
| | * | | Add 'state_key' to valid_keys | Erik Johnston | 2014-08-26 | 1 | -0/+1 |
| | | | | |||||
| | * | | Send down state_key to clients | Erik Johnston | 2014-08-26 | 1 | -1/+0 |
| | | | | |||||
| * | | | Merge branch 'develop' of github.com:matrix-org/synapse into ↵ | Kegan Dougal | 2014-08-26 | 2 | -1/+7 |
| |\| | | | | | | | | | | | | | | client_server_url_rename | ||||
| | * | | Add ts field to all events. | Erik Johnston | 2014-08-21 | 1 | -1/+6 |
| | | | | |||||
| | * | | Stop internal keys from getting into SynapseEvents | Erik Johnston | 2014-08-21 | 1 | -0/+1 |
| | |/ | |||||
| * | | Removed member list servlet: now using generic state paths. | Kegan Dougal | 2014-08-26 | 4 | -11/+16 |
| | | | |||||
| * | | Impl: /rooms/roomid/state/eventtype/state_key - Renamed RoomTopicRestServlet ↵ | Kegan Dougal | 2014-08-22 | 1 | -8/+8 |
| |/ | | | | | | | to RoomStateEventRestServlet. Support generic state event sending. | ||||
* / | Take a snapshot of the state of the room before performing updates | Mark Haines | 2014-08-22 | 1 | -5/+11 |
|/ | |||||
* | Default from param to 'END' | Erik Johnston | 2014-08-19 | 1 | -0/+1 |
| | |||||
* | Merge branch 'master' of github.com:matrix-org/synapse into sql_refactor | Erik Johnston | 2014-08-19 | 1 | -1/+2 |
|\ | | | | | | | | | | | | | Conflicts: tests/rest/test_presence.py tests/rest/test_rooms.py tests/utils.py | ||||
| * | Added /matrix/content path, HS resource_for_content_repo attribute and ↵ | Kegan Dougal | 2014-08-18 | 1 | -1/+2 |
| | | | | | | | | FileUploadResource. Added stub methods. | ||||
* | | Change the way pagination works to support out of order events. | Erik Johnston | 2014-08-19 | 2 | -47/+64 |
| | | |||||
* | | Not all event streams returns SynapseEvents | Erik Johnston | 2014-08-18 | 1 | -1/+5 |
| | | |||||
* | | Ensure we have a 'membership' key in RoomMemberEvents | Erik Johnston | 2014-08-18 | 1 | -0/+2 |
| | | |||||
* | | PEP8 cleanups | Erik Johnston | 2014-08-15 | 1 | -0/+1 |
| | | |||||
* | | Support generic events. | Erik Johnston | 2014-08-15 | 2 | -5/+8 |
| | | |||||
* | | Correctly return new token when returning events. Serialize events correctly. | Erik Johnston | 2014-08-15 | 2 | -2/+3 |
| | | |||||
* | | Start chagning the events stream to work with the new DB schema | Erik Johnston | 2014-08-15 | 1 | -72/+5 |
| | | |||||
* | | Merge branch 'master' of github.com:matrix-org/synapse into sql_refactor | Erik Johnston | 2014-08-15 | 4 | -3/+32 |
|\| | | | | | | | | | Conflicts: synapse/storage/stream.py | ||||
| * | Remember to reflect membership LEAVE events to the leaving member so they ↵ | Paul "LeoNerd" Evans | 2014-08-15 | 1 | -0/+4 |
| | | | | | | | | know it happened | ||||
| * | Added M_UNKNOWN_TOKEN error code and send it when there is an unrecognised ↵ | Kegan Dougal | 2014-08-14 | 2 | -2/+4 |
| | | | | | | | | access_token | ||||
| * | Default error code BAD_PAGINATION for EventStreamErrors | Kegan Dougal | 2014-08-14 | 1 | -1/+4 |
| | | |||||
| * | Added web client prefix | Kegan Dougal | 2014-08-14 | 1 | -1/+2 |
| | | |||||
| * | Added a urls module for keeping client and federation prefixes. | Kegan Dougal | 2014-08-14 | 1 | -0/+19 |
| | | |||||
* | | Reimplement the get public rooms api to work with new DB schema | Erik Johnston | 2014-08-15 | 2 | -1/+25 |
|/ | |||||
* | fix whitespace | Matthew Hodgson | 2014-08-14 | 1 | -0/+1 |
| | |||||
* | Handle a potential race in the notifier when calling get_events_for which ↵ | Erik Johnston | 2014-08-13 | 1 | -3/+7 |
| | | | | resulted in an uncaught KeyError | ||||
* | Use strings instead of opaque magic-number constants for presence states; ↵ | Paul "LeoNerd" Evans | 2014-08-13 | 1 | -4/+4 |
| | | | | rename AWAY to UNAVAILABLE | ||||
* | add in whitespace after copyright statements to improve legibility | Matthew Hodgson | 2014-08-13 | 10 | -0/+10 |
| | |||||
* | Reference Matrix Home Server | matrix.org | 2014-08-12 | 10 | -0/+1164 |