summary refs log tree commit diff
path: root/synapse (follow)
Commit message (Expand)AuthorAgeFilesLines
* SpellingErik Johnston2017-01-201-1/+1
* Update all call sites after renameErik Johnston2017-01-201-1/+1
* CommentsErik Johnston2017-01-201-0/+11
* Calculate the forward extremeties onceErik Johnston2017-01-202-126/+92
* Derive current_state_events from state groupsErik Johnston2017-01-203-71/+121
* Make worker listener config backwards compatErik Johnston2017-01-201-0/+10
* Merge pull request #1828 from matrix-org/erikj/iterable_cache_sizeErik Johnston2017-01-181-0/+2
|\
| * Update LruCache size estimate on clearErik Johnston2017-01-181-0/+2
* | Merge pull request #1811 from aperezdc/unhardcode-riot-urlsDavid Baker2017-01-182-6/+21
|\ \
| * | Allow configuring the Riot URL used in notification emailsAdrian Perez de Castro2017-01-132-6/+21
* | | Lowercase all email addresses before querying dbDavid Baker2017-01-182-1/+12
| |/ |/|
* | Merge pull request #1823 from matrix-org/erikj/load_events_logsErik Johnston2017-01-181-2/+2
|\ \
| * | Lower loading events log to DEBUGErik Johnston2017-01-171-2/+2
* | | Merge pull request #1824 from matrix-org/erikj/retry_host_logErik Johnston2017-01-181-1/+1
|\ \ \
| * | | Lower the not retrying host log line to debugErik Johnston2017-01-171-1/+1
| |/ /
* | | Merge pull request #1822 from matrix-org/erikj/statE_loggingErik Johnston2017-01-183-6/+6
|\ \ \
| * | | Change resolve_state_groups call site logging to DEBUGErik Johnston2017-01-173-6/+6
| |/ /
* | | Merge pull request #1821 from matrix-org/erikj/cache_metrics_string_internErik Johnston2017-01-181-3/+8
|\ \ \
| * | | Measure metrics of string_cacheErik Johnston2017-01-171-3/+8
| |/ /
* | | Merge pull request #1818 from matrix-org/erikj/state_auth_splitout_splitErik Johnston2017-01-186-74/+224
|\ \ \
| * | | PEP8Erik Johnston2017-01-171-1/+1
| * | | Only construct sets when necessaryMark Haines2017-01-171-14/+19
| * | | Use better namesErik Johnston2017-01-171-9/+7
| * | | Use better variable nameErik Johnston2017-01-171-3/+3
| * | | Correctly handle case of rejected events in state resErik Johnston2017-01-171-10/+16
| * | | Check event is in state_mapErik Johnston2017-01-171-2/+7
| * | | Fix couple of federation state bugsErik Johnston2017-01-172-3/+5
| * | | Optimise state resolutionErik Johnston2017-01-175-70/+204
* | | | Merge pull request #1820 from matrix-org/erikj/push_toolsErik Johnston2017-01-171-1/+1
|\ \ \ \ | |_|/ / |/| | |
| * | | Get state at event rather than for room in pushErik Johnston2017-01-171-1/+1
* | | | Fix typo in return typeErik Johnston2017-01-171-3/+2
|/ / /
* | | Merge pull request #1812 from matrix-org/erikj/state_auth_splitout_splitErik Johnston2017-01-171-138/+140
|\| |
| * | Put staticmethods at module levelErik Johnston2017-01-161-123/+121
| * | Split out static state methods from StateHandlerErik Johnston2017-01-131-70/+74
* | | Rename and comment tree_to_leaves_iteratorErik Johnston2017-01-172-5/+8
* | | Remove needless call to evict()Erik Johnston2017-01-171-1/+0
* | | Increase state_group_cache_sizeErik Johnston2017-01-171-1/+1
* | | Speed up cache size calculationErik Johnston2017-01-175-46/+128
* | | Use OrderedDict in ExpiringCacheErik Johnston2017-01-161-10/+4
* | | Up cache max entries for stateErik Johnston2017-01-163-3/+3
* | | Add support for 'iterable' to ExpiringCacheErik Johnston2017-01-162-10/+22
* | | Increase cache size limitErik Johnston2017-01-162-2/+2
* | | Optionally measure size of cache by sum of length of valuesErik Johnston2017-01-134-21/+41
* | | Merge pull request #1810 from matrix-org/erikj/state_auth_splitout_splitErik Johnston2017-01-132-571/+649
|\| |
| * | Remove unused functionErik Johnston2017-01-131-3/+0
| * | Split event auth code into seperate moduleErik Johnston2017-01-132-645/+650
| * | Split out static auth methods from Auth objectErik Johnston2017-01-101-419/+495
* | | Merge pull request #1793 from matrix-org/erikj/change_device_inbox_indexErik Johnston2017-01-133-3/+55
|\ \ \ | |_|/ |/| |
| * | Add commentErik Johnston2017-01-131-0/+1
| * | Explicitly close the cursorErik Johnston2017-01-101-0/+1
| * | Don't disable autocommitErik Johnston2017-01-101-8/+4
| * | Change device_inbox stream index to include userErik Johnston2017-01-103-3/+57
* | | Merge pull request #1795 from matrix-org/erikj/port_defaultsErik Johnston2017-01-139-84/+29
|\ \ \
| * | | Pop bind_addressErik Johnston2017-01-101-1/+1
| * | | Restore default bind addressErik Johnston2017-01-109-84/+29
| | |/ | |/|
* | | Fix spurious Unhandled Error log linesErik Johnston2017-01-121-1/+5
* | | Remove full_twisted_stacktraces optionErik Johnston2017-01-122-79/+0
* | | Add missing None checkErik Johnston2017-01-111-5/+6
|/ /
* | Remove spurious for..else..Erik Johnston2017-01-101-11/+0
* | Merge pull request #1792 from matrix-org/erikj/limit_cache_prefill_deviceErik Johnston2017-01-102-3/+6
|\ \
| * | Limit number of entries to prefill from cacheErik Johnston2017-01-102-3/+6
| |/
* | Merge pull request #1790 from matrix-org/erikj/linearizerErik Johnston2017-01-101-2/+5
|\ \
| * | Add paranoia exception catch in LinearizerErik Johnston2017-01-101-2/+5
| |/
* | Log which files we saved attachments to in the media_repositoryMark Haines2017-01-103-0/+11
* | Merge pull request #1789 from matrix-org/erikj/decouple_presenceErik Johnston2017-01-101-1/+3
|\ \
| * | CommentErik Johnston2017-01-101-0/+2
| * | Don't block messages sending on bumping presenceErik Johnston2017-01-101-1/+1
| |/
* | Merge pull request #1787 from matrix-org/erikj/linearize_memberErik Johnston2017-01-102-15/+32
|\ \
| * | Linearize updates to membership via PUT /state/Erik Johnston2017-01-092-15/+32
| |/
* / Name linearizer's for better logsErik Johnston2017-01-094-5/+5
|/
* Merge branch 'master' of github.com:matrix-org/synapse into developErik Johnston2017-01-091-1/+1
|\
| * Bump version and changelog v0.18.7Erik Johnston2017-01-091-1/+1
* | gah, fix mangled merge of 0.18.7 into developMatthew Hodgson2017-01-071-1/+1
* | Merge branch 'release-v0.18.7' into developMatthew2017-01-072-21/+21
|\|
| * bump changelog & version v0.18.7-rc2Matthew2017-01-071-1/+1
| * do the discard check in the right place to avoid grabbing dependent eventsMatthew2017-01-071-20/+20
* | Merge branch 'release-v0.18.7' into developMatthew Hodgson2017-01-073-3/+25
|\|
| * Discard PDUs from invalid origins due to #1753 in 0.18.[56] v0.18.7-rc1Matthew2017-01-071-1/+23
| * oops, this should have been rc1Matthew Hodgson2017-01-071-1/+1
| * move logging to right placeMatthew Hodgson2017-01-071-1/+1
| * bump versionMatthew2017-01-061-1/+1
| * fix typo breaking the fix to #1753Matthew2017-01-061-1/+1
* | Merge branch 'release-v0.18.6' into developMark Haines2017-01-062-5/+7
|\|
| * Bump version and changelog v0.18.6Mark Haines2017-01-061-1/+1
| * handlers/room_member: fix guest access check when joining roomsPatrik Oldsberg2017-01-061-4/+6
* | Merge branch 'release-v0.18.6' into developMatthew Hodgson2017-01-056-4/+10
|\|
| * Fix flake8 and update changelog v0.18.6-rc3Mark Haines2017-01-052-5/+5
| * Merge pull request #1767 from matrix-org/matthew/resolve_state_group_loggingMatthew Hodgson2017-01-055-3/+9
| |\
| | * Fix caseMatthew Hodgson2017-01-051-1/+1
| | * add logging for all the places we call resolve_state_groups. my kingdom for a...Matthew Hodgson2017-01-053-0/+6
| | * fix annoying typosMatthew Hodgson2017-01-052-3/+3
| * | Bump version and changelog to v0.18.6-rc3Mark Haines2017-01-051-1/+1
| |/
* | Merge branch 'release-v0.18.6' into developMatthew Hodgson2017-01-055-8/+47
|\|
| * More logging for the linearizer and for get_eventsMark Haines2017-01-052-2/+13
| * fix commentMatthew Hodgson2017-01-051-1/+17
| * limit total timeout for get_missing_events to 10sMatthew Hodgson2017-01-053-3/+11
| * Only send events that originate on this server.Mark Haines2017-01-053-0/+25
| * Get the destinations from the state from before the eventMark Haines2017-01-041-8/+9
| * Send ALL membership events to the server that was affected.Mark Haines2017-01-041-3/+5
* | fix commentMatthew Hodgson2017-01-051-1/+17
* | limit total timeout for get_missing_events to 10sMatthew Hodgson2016-12-313-3/+11
* | Merge branch 'release-v0.18.6' into developMatthew Hodgson2016-12-314-70/+15
|\|
| * Bump version and changelog v0.18.6-rc2Mark Haines2016-12-301-1/+1
| * s/aquire/acquire/gMark Haines2016-12-302-3/+3
| * Add more useful logging when we block fetching eventsMark Haines2016-12-302-0/+14
| * Remove fallback from get_missing_events.Mark Haines2016-12-301-69/+0
* | Merge remote-tracking branch 'origin/release-v0.18.6' into developMark Haines2016-12-301-3/+13
|\|
| * Use the new twisted logging framework.Mark Haines2016-12-301-3/+13
* | Merge branch 'release-v0.18.6' into developMark Haines2016-12-293-8/+71
|\|
| * Bump changelog and version v0.18.6-rc1Mark Haines2016-12-291-1/+1
| * Manually abort the underlying TLS connection.Mark Haines2016-12-291-2/+10
| * Respect long_retries param and default to offErik Johnston2016-12-291-2/+2
| * Spelling and commentsErik Johnston2016-12-291-4/+6
| * Clean upErik Johnston2016-12-292-7/+4
| * Wrap connections in an N minute timeout to ensure they get reaped correctlyErik Johnston2016-12-292-5/+61
* | Fix another comment typoDavid Baker2016-12-211-1/+1
* | Add /account/3pid/delete endpointDavid Baker2016-12-203-1/+57
* | Fix check for bind_addressJohannes Löthberg2016-12-208-16/+16
* | Merge pull request #1711 from matrix-org/matthew/utf8-password-changeMatthew Hodgson2016-12-201-2/+2
|\ \
| * | fix ability to change password to a non-ascii oneMatthew Hodgson2016-12-181-2/+2
* | | Merge pull request #1709 from kyrias/bind_addressesMatthew Hodgson2016-12-199-175/+303
|\ \ \
| * | | Add IPv6 comment to default configJohannes Löthberg2016-12-181-0/+4
| * | | Make default homeserver config use bind_addressesJohannes Löthberg2016-12-181-4/+5
| * | | Add support for specifying multiple bind addressesJohannes Löthberg2016-12-188-171/+294
| |/ /
* | | Merge pull request #1696 from kyrias/ipv6Matthew Hodgson2016-12-193-24/+23
|\ \ \ | |/ / |/| |
| * | Bump twisted dependencyJohannes Löthberg2016-12-181-1/+1
| * | Remove spurious newlineJohannes Löthberg2016-12-121-1/+0
| * | Fixup for #1689 and #1690Johannes Löthberg2016-12-122-8/+13
| * | IPv6 support for endpoint.pyGlyph2016-12-111-4/+4
| * | IPv6 support for client.pyGlyph2016-12-111-16/+11
* | | Cache network room list queries.Erik Johnston2016-12-161-3/+4
| |/ |/|
* | Bump version and changelogErik Johnston2016-12-161-1/+1
* | Add some logging for syncing to_device eventsRichard van der Hoff2016-12-152-5/+10
* | Merge pull request #1698 from matrix-org/erikj/room_listErik Johnston2016-12-151-2/+4
|\ \
| * \ Merge branch 'develop' of github.com:matrix-org/synapse into erikj/room_listErik Johnston2016-12-131-1/+1
| |\ \
| * | | Fix caching on public room listErik Johnston2016-12-131-2/+4
* | | | Merge pull request #1700 from matrix-org/erikj/backfill_filterErik Johnston2016-12-151-2/+5
|\ \ \ \
| * | | | CommentErik Johnston2016-12-141-0/+2
| * | | | Fix /backfill returning events it shouldn'tErik Johnston2016-12-141-2/+3
* | | | | Fix crash in url preview when html tag has no textMarcin Bachry2016-12-141-1/+4
|/ / / /
* | / / Fixup membership queryErik Johnston2016-12-141-2/+2
| |/ / |/| |
* | | Bump changelog and versionErik Johnston2016-12-131-1/+1
|/ /
* | Merge pull request #1697 from matrix-org/erikj/fix_bg_memberErik Johnston2016-12-121-1/+1
|\ \
| * | Fix background update that prematurely stoppedErik Johnston2016-12-121-1/+1
* | | Merge pull request #1676 from matrix-org/erikj/room_listErik Johnston2016-12-1215-42/+399
|\ \ \ | |/ / |/| |
| * | Rename network_id to instance_id on client sideErik Johnston2016-12-121-1/+1
| * | Add cache to get_public_room_ids_at_stream_idErik Johnston2016-12-122-1/+4
| * | Notify replication. Use correct network_idErik Johnston2016-12-121-1/+3
| * | DocstringErik Johnston2016-12-121-0/+12
| * | CommentsErik Johnston2016-12-073-2/+12
| * | Don't include appservice idErik Johnston2016-12-061-1/+0
| * | Add new API appservice specific public room listErik Johnston2016-12-0614-40/+371
* | | Remove unspecced GET endpoints for e2e keysRichard van der Hoff2016-12-121-39/+4
* | | Merge pull request #1620 from matrix-org/erikj/concurrent_room_accessErik Johnston2016-12-122-27/+91
|\ \ \
| * | | CommentsErik Johnston2016-11-112-0/+15
| * | | Limit the number of events that can be created on a given room concurretnlyErik Johnston2016-11-101-27/+31
| * | | Add Limiter: limit concurrent access to resourceErik Johnston2016-11-101-0/+45
* | | | Merge pull request #1686 from matrix-org/rav/fix_federation_key_failsRichard van der Hoff2016-12-121-0/+10
|\ \ \ \ | |_|_|/ |/| | |
| * | | Remove unused importRichard van der Hoff2016-12-121-1/+0
| * | | E2E key query: handle federation failsRichard van der Hoff2016-12-091-0/+11
* | | | Correctly handle timeout errorsErik Johnston2016-12-092-7/+20
* | | | Fix rare notifier bug where listeners dont timeoutErik Johnston2016-12-092-11/+10
* | | | Merge pull request #1680 from matrix-org/erikj/joined_roomsErik Johnston2016-12-096-9/+165
|\ \ \ \
| * | | | Add /room/<room_id>/joined_members APIErik Johnston2016-12-083-9/+38
| * | | | Add profile data to the room_membership table for joinsErik Johnston2016-12-084-0/+110
| * | | | Add joined_rooms servletErik Johnston2016-12-081-0/+17
| |/ / /
* | | | Fix ignored read-receiptsRichard van der Hoff2016-12-081-1/+5
* | | | Fix result of insert_receiptRichard van der Hoff2016-12-081-1/+1
|/ / /
* | / Prevent user tokens being used as guest tokens (#1675)Richard van der Hoff2016-12-062-16/+37
| |/ |/|
* | Merge pull request #653 from matrix-org/erikj/preset_guest_joinErik Johnston2016-12-051-0/+10
|\ \
| * | Enable guest access for private rooms by defaultErik Johnston2016-03-171-0/+10
* | | Merge pull request #1649 from matrix-org/dbkr/log_ui_auth_argsErik Johnston2016-12-051-1/+9
|\ \ \
| * | | Clarify that creds doesn not contain passwords.David Baker2016-11-241-1/+3
| * | | Log the args that we have on UI auth completionDavid Baker2016-11-241-1/+7
* | | | Bugfix: Console logging handler missing default filterpik2016-12-031-0/+1
* | | | preview_url_resource: Ellipsis must be in unicode stringJohannes Löthberg2016-12-011-1/+1
* | | | Fix doc-stringRichard van der Hoff2016-12-011-2/+1
* | | | Rip out more refresh_token codeRichard van der Hoff2016-11-306-105/+5
* | | | Merge branch 'develop' into rav/no_more_refresh_tokensRichard van der Hoff2016-11-3010-61/+80
|\ \ \ \
| * \ \ \ Merge pull request #1660 from matrix-org/rav/better_content_type_validationRichard van der Hoff2016-11-301-18/+30
| |\ \ \ \
| | * | | | More intelligent Content-Type parsingRichard van der Hoff2016-11-301-18/+30
| * | | | | Merge pull request #1656 from matrix-org/rav/remove_time_caveatRichard van der Hoff2016-11-305-29/+21
| |\ \ \ \ \
| | * | | | | CommentsRichard van der Hoff2016-11-301-3/+9
| | * | | | | Stop putting a time caveat on access tokensRichard van der Hoff2016-11-295-26/+12
| | |/ / / /
| * | | | | Merge pull request #1653 from matrix-org/rav/guest_e2eRichard van der Hoff2016-11-295-14/+29
| |\ \ \ \ \ | | |/ / / / | |/| | | |
| | * | | | Allow guest access to endpoints for E2ERichard van der Hoff2016-11-253-9/+9
| | * | | | Give guest users a device_idRichard van der Hoff2016-11-252-5/+20
* | | | | | Stop generating refresh tokensRichard van der Hoff2016-11-283-37/+16
|/ / / / /
* | | | | Merge pull request #1655 from matrix-org/rav/remove_redundant_macaroon_checksRichard van der Hoff2016-11-251-26/+8
|\ \ \ \ \
| * | | | | Remove redundant list of known caveat prefixesRichard van der Hoff2016-11-241-26/+8
| |/ / / /
* | | | | Use correct varErik Johnston2016-11-241-1/+1
* | | | | Correctly handle 500's and 429 on federationErik Johnston2016-11-242-1/+8
* | | | | Bump version and changelog v0.18.5-rc2Erik Johnston2016-11-241-1/+1
* | | | | Don't send old events as federationErik Johnston2016-11-241-1/+1
* | | | | Bump changelog and version v0.18.5-rc1Erik Johnston2016-11-241-1/+1
| |/ / / |/| | |
* | | | CommentErik Johnston2016-11-231-1/+3
* | | | More efficient notif count queriesErik Johnston2016-11-232-8/+48
* | | | Merge pull request #1635 from matrix-org/erikj/split_out_fed_txnErik Johnston2016-11-2334-213/+1108
|\ \ \ \
| * | | | Shuffle receipt handler around so that worker apps don't need to load itErik Johnston2016-11-236-8/+10
| * | | | Ensure only main or federation_sender process can send federation trafficErik Johnston2016-11-233-5/+21
| * | | | Merge branch 'develop' of github.com:matrix-org/synapse into erikj/split_out_...Erik Johnston2016-11-238-24/+199
| |\ \ \ \
| * | | | | CommentErik Johnston2016-11-231-0/+3
| * | | | | Explicit federation ackErik Johnston2016-11-233-8/+25
| * | | | | Fix tests and flake8Erik Johnston2016-11-221-1/+0
| * | | | | Invalidate retry cache in both directionsErik Johnston2016-11-226-27/+132
| * | | | | CommentsErik Johnston2016-11-211-0/+2
| * | | | | Add some metricsErik Johnston2016-11-211-48/+68
| * | | | | CommentsErik Johnston2016-11-213-0/+41
| * | | | | Remove explicit calls to send_pduErik Johnston2016-11-213-61/+9
| * | | | | Fix testsErik Johnston2016-11-212-2/+5
| * | | | | Store federation stream positions in the databaseErik Johnston2016-11-216-24/+94
| * | | | | Handle sending events and device messages over federationErik Johnston2016-11-1714-55/+185
| * | | | | Hook up the send queue and create a federation sender workerErik Johnston2016-11-168-22/+419
| * | | | | Add initial cut of federation send queueErik Johnston2016-11-161-0/+174
| * | | | | Use new federation_sender DIErik Johnston2016-11-167-63/+26
| * | | | | Add transaction queue and transport layer to DIErik Johnston2016-11-165-10/+16
| * | | | | Move logic into transaction_queueErik Johnston2016-11-163-19/+18
| * | | | | Rename transaction queue functions to send_*Erik Johnston2016-11-162-12/+12
* | | | | | Merge pull request #1641 from matrix-org/erikj/as_pushersErik Johnston2016-11-232-2/+18
|\ \ \ \ \ \ | |_|/ / / / |/| | | | |
| * | | | | Ignore AS users when fetching push rulesErik Johnston2016-11-232-2/+18
* | | | | | Return early on /sync code paths if a '*' filter is usedKegan Dougal2016-11-222-9/+51
| |_|/ / / |/| | | |
* | | | | Merge pull request #1638 from matrix-org/kegan/sync-event-fieldsKegsay2016-11-223-14/+127
|\ \ \ \ \ | |/ / / / |/| | | |
| * | | | Review commentsKegan Dougal2016-11-221-11/+9
| * | | | Also check for dict since sometimes they aren't frozenKegan Dougal2016-11-221-1/+1
| * | | | Glue only_event_fields into the sync rest servletKegan Dougal2016-11-223-11/+15
| * | | | More testsKegan Dougal2016-11-221-3/+4
| * | | | Start adding some testsKegan Dougal2016-11-211-1/+3
| * | | | Move event_fields filtering to serialize_eventKegan Dougal2016-11-212-59/+98
| * | | | Add filter_event_fields and filter_field to FilterCollectionKegan Dougal2016-11-211-0/+69
| |/ / /
* | | | Merge branch 'master' of github.com:matrix-org/synapse into developErik Johnston2016-11-222-1/+12
|\ \ \ \
| * | | | Fix flake8Mark Haines2016-11-181-1/+0
| * | | | Work around client replacing reg paramsDavid Baker2016-11-181-0/+12
| * | | | Bump changelog and version v0.18.4-rc1Erik Johnston2016-11-141-1/+1
* | | | | Fail with a coherent error message if `/sync?filter=` is invalidKegan Dougal2016-11-212-0/+9
| |/ / / |/| | |
* | | | Merge pull request #1628 from matrix-org/erikj/ldap_split_outErik Johnston2016-11-154-378/+17
|\ \ \ \
| * | | | Use external ldap auth pacakgeErik Johnston2016-11-154-378/+17
* | | | | Merge pull request #1617 from matrix-org/erikj/intern_state_dictErik Johnston2016-11-151-1/+4
|\ \ \ \ \ | |/ / / / |/| | | |
| * | | | Correctly intern keys in state cacheErik Johnston2016-11-081-1/+4
* | | | | New Flake8 fixesErik Johnston2016-11-152-0/+3
| |/ / / |/| | |
* | | | Merge pull request #1624 from matrix-org/kegan/idempotent-requestsKegsay2016-11-146-184/+133
|\ \ \ \
| * | | | Clean transactions based on time. Add HttpTransactionCache tests.Kegan Dougal2016-11-144-8/+30
| * | | | Move .observe() up to the cache to make things neaterKegan Dougal2016-11-143-33/+11
| * | | | Review commentsKegan Dougal2016-11-115-158/+119
| * | | | More flake8Kegan Dougal2016-11-111-1/+3
| * | | | Flake8 and fix whoopsieKegan Dougal2016-11-111-4/+8
| * | | | Use ObservableDeferreds instead of Deferreds as they behave as intendedKegan Dougal2016-11-112-30/+31
| * | | | Use observable deferreds because they are saneKegan Dougal2016-11-111-3/+4
| * | | | Flake8Kegan Dougal2016-11-102-4/+4
| * | | | Store Promise<Response> instead of Response for HTTP API transactionsKegan Dougal2016-11-104-88/+68
| | |_|/ | |/| |
* | | | Merge pull request #1625 from DanielDent/patch-1Erik Johnston2016-11-121-2/+3
|\ \ \ \ | |/ / / |/| | |