summary refs log tree commit diff
path: root/synapse/rest/client (follow)
Commit message (Expand)AuthorAgeFilesLines
* Remove the ability to query relations when the original event was redacted. (...Andrew Morgan2019-07-181-32/+43
* Clean up exception handling for access_tokens (#5656)Richard van der Hoff2019-07-112-4/+15
* Don't bundle aggregations when retrieving the original event (#5654)Andrew Morgan2019-07-101-2/+12
* Include the original event in /relations (#5626)Andrew Morgan2019-07-091-3/+5
* Remove access-token support from RegistrationHandler.register (#5641)Richard van der Hoff2019-07-082-16/+9
* Factor out some redundant code in the login impl (#5639)Richard van der Hoff2019-07-081-39/+10
* Move logging utilities out of the side drawer of util/ and into logging/ (#5606)Amber Brown2019-07-041-1/+1
* Complete the SAML2 implementation (#5422)Richard van der Hoff2019-07-021-8/+46
|\
| * Merge branch 'develop' into rav/saml2_clientRichard van der Hoff2019-07-011-1/+1
| |\
| * | rename BaseSSORedirectServlet for consistencyRichard van der Hoff2019-06-271-3/+3
| * | Move all the saml stuff out to a centralised handlerRichard van der Hoff2019-06-261-11/+2
| * | Merge branch 'develop' into rav/saml2_clientRichard van der Hoff2019-06-2636-862/+709
| |\ \
| * | | Code cleanups and simplifications.Richard van der Hoff2019-06-111-42/+41
| * | | Merge remote-tracking branch 'origin/develop' into rav/saml2_clientRichard van der Hoff2019-06-1038-311/+529
| |\ \ \
| * | | | SAML2 Improvements and redirect stuffAlexander Trost2019-06-021-0/+46
* | | | | Fix JWT login with new users (#5586)PauRE2019-07-021-6/+3
| |_|_|/ |/| | |
* | | | Fix JWT login (#5555)PauRE2019-06-271-1/+1
| |_|/ |/| |
* | | Split public rooms directory auth config in twoBrendan Abolivier2019-06-241-1/+1
* | | Run Black. (#5482)Amber Brown2019-06-2036-854/+688
* | | Merge branch 'master' of github.com:matrix-org/synapse into developErik Johnston2019-06-111-4/+5
|\ \ \
| * | | Change password reset links to /_matrix.Erik Johnston2019-06-111-4/+5
* | | | Don't warn user about password reset disabling through config code (#5387)Andrew Morgan2019-06-111-4/+15
| |_|/ |/| |
* | | Merge pull request #5363 from matrix-org/babolivier/account_validity_send_mai...Brendan Abolivier2019-06-101-1/+1
|\ \ \ | |/ / |/| |
| * | Don't check whether the user's account is expired on /send_mail requestsBrendan Abolivier2019-06-051-1/+1
* | | Add ability to perform password reset via email without trusting the identity...Andrew Morgan2019-06-061-5/+238
* | | Neilj/add r0.5 to versions (#5360)Neil Johnson2019-06-051-0/+1
* | | Hawkowl/fix missing auth (#5328)Amber Brown2019-06-041-0/+1
* | | Unify v1 and v2 REST client APIs (#5226)Amber Brown2019-06-0337-305/+287
| |/ |/|
* | Fix ignored filter field in `/messages` endpointEisha Chen-yen-su2019-05-301-0/+2
* | Merge pull request #5256 from aaronraimist/logout-correct-errorErik Johnston2019-05-301-18/+9
|\ \
| * | LintAaron Raimist2019-05-291-2/+0
| * | Get rid of try exceptAaron Raimist2019-05-271-16/+9
| * | Show correct error when logging out and access token is missingAaron Raimist2019-05-241-4/+4
* | | Serve CAS login over r0 (#5286)Amber Brown2019-05-301-2/+2
|/ /
* | Merge pull request #5220 from matrix-org/erikj/dont_bundle_live_eventsErik Johnston2019-05-241-0/+3
|\ \
| * | Don't bundle events in /sync or /eventsErik Johnston2019-05-211-0/+3
* | | Add config option for setting homeserver's default room version (#5223)Andrew Morgan2019-05-231-2/+3
|/ /
* | Merge pull request #5209 from matrix-org/erikj/reactions_baseErik Johnston2019-05-201-0/+338
|\ \
| * | Move parsing of tokens out of storage layerErik Johnston2019-05-161-0/+19
| * | Check that event is visible in new APIsErik Johnston2019-05-161-2/+15
| * | Add aggregations APIErik Johnston2019-05-161-1/+140
| * | Actually implement idempotencyErik Johnston2019-05-151-1/+8
| * | Add simple pagination APIErik Johnston2019-05-151-0/+50
| * | Add simple send_relation API and track in DBErik Johnston2019-05-151-0/+110
* | | Merge pull request #5174 from matrix-org/dbkr/add_dummy_flow_to_recaptcha_onlyDavid Baker2019-05-161-5/+17
|\ \ \ | |_|/ |/| |
| * | Re-order flows so that email auth is done lastDavid Baker2019-05-101-4/+12
| * | CommentDavid Baker2019-05-101-0/+4
| * | Add a DUMMY stage to captcha-only registration flowDavid Baker2019-05-101-1/+1
* | | Merge pull request #5187 from matrix-org/dbkr/only_check_threepid_not_in_use_...David Baker2019-05-161-18/+22
|\ \ \
| * | | Only check 3pids not in use when registeringDavid Baker2019-05-141-18/+22
| |/ /
* | | Make all the rate limiting options more consistent (#5181)Amber Brown2019-05-151-10/+13
* | | Drop support for v2_alpha API prefix (#5190)Richard van der Hoff2019-05-156-24/+19
| |/ |/|
* | NewsfileErik Johnston2019-05-141-6/+6
* | Allow client event serialization to be asyncErik Johnston2019-05-144-43/+48
|/
* Revert 085ae346ace418e0fc043ac5f568f85ebf80038eDavid Baker2019-05-101-1/+1
* Add a DUMMY stage to captcha-only registration flowDavid Baker2019-05-101-1/+1
* add options to require an access_token to GET /profile and /publicRooms on CS...Matthew Hodgson2019-05-082-12/+34
* Move admin api impl to its own packageRichard van der Hoff2019-05-011-896/+0
* Move admin API to a new prefixRichard van der Hoff2019-05-011-20/+50
* Move admin API away from ClientV1RestServletRichard van der Hoff2019-05-011-33/+33
* Merge branch 'develop' of github.com:matrix-org/synapse into babolivier/accou...Erik Johnston2019-04-177-87/+68
|\
| * Merge pull request #5047 from matrix-org/babolivier/account_expirationBrendan Abolivier2019-04-171-0/+62
| |\
| * \ Merge pull request #5071 from matrix-org/babolivier/3pid-checkBrendan Abolivier2019-04-171-0/+18
| |\ \
| | * | Make sure we're not registering the same 3pid twiceBrendan Abolivier2019-04-171-0/+18
| * | | Remove usage of request.postpathErik Johnston2019-04-161-8/+8
| * | | Only handle GET requests for /push_rulesErik Johnston2019-04-151-0/+7
| * | | Add admin API for group deletionErik Johnston2019-04-031-0/+26
| * | | Fix grammar and document get_current_users_in_room (#4998)Andrew Morgan2019-04-031-1/+1
| * | | Remove presence lists (#4989)Neil Johnson2019-04-031-67/+0
| * | | Merge pull request #4982 from matrix-org/erikj/msc1915Erik Johnston2019-04-031-2/+3
| |\ \ \
| | * | | Add unbind API to /r0 as it is now stabalisedErik Johnston2019-04-011-1/+1
| | * | | Allowing specifying IS to use in unbind API.Erik Johnston2019-04-011-1/+2
| * | | | Collect room-version variations into one place (#4969)Richard van der Hoff2019-04-012-7/+5
| |/ / /
| * / / remove log line for password (#4965)Neil Johnson2019-03-281-2/+0
| |/ /
* | / Add management endpoints for account validityBrendan Abolivier2019-04-172-1/+69
| |/ |/|
* | Send out emails with links to extend an account's validity periodBrendan Abolivier2019-04-171-0/+62
|/
* Support 3PID login in password providers (#4931)Andrew Morgan2019-03-261-4/+45
* Merge pull request #4904 from matrix-org/erikj/fix_shutdownErik Johnston2019-03-211-20/+35
|\
| * Use flagsErik Johnston2019-03-201-2/+4
| * Gracefully handle failing to kick userErik Johnston2019-03-201-19/+27
| * Log new room IDErik Johnston2019-03-201-1/+6
* | Add option to disable searching in the user dirErik Johnston2019-03-191-0/+6
|/
* Add ratelimiting on login (#4821)Brendan Abolivier2019-03-152-2/+12
* Send message after room has been shutdownErik Johnston2019-03-061-11/+11
* Make registration ratelimiter separate from the main events oneBrendan Abolivier2019-03-061-1/+1
* Revert "Split ratelimiters in two (one for events, one for registration)"Brendan Abolivier2019-03-061-1/+1
* Split ratelimiters in two (one for events, one for registration)Brendan Abolivier2019-03-051-1/+1
* Merge pull request #4772 from jbweston/jbweston/server-version-apiErik Johnston2019-03-051-0/+23
|\
| * Add 'server_version' endpoint to admin APIJoseph Weston2019-03-011-0/+23
* | Add rate-limiting on registration (#4735)Brendan Abolivier2019-03-051-4/+29
|/
* switch from google.com to recaptcha.net for reCAPTCHA (#4731)Matthew Hodgson2019-02-251-1/+1
* Fix registration on workers (#4682)Erik Johnston2019-02-203-137/+14
* Move register_device into handlerErik Johnston2019-02-182-84/+24
* Update docsErik Johnston2019-02-181-1/+1
* Split out registration to workerErik Johnston2019-02-181-27/+46
* Merge pull request #4580 from matrix-org/uhoreg/e2e_backup_add_updatingErik Johnston2019-02-111-0/+34
|\
| * make sure version is in body and wrap in linearizer queueHubert Chathi2019-02-081-1/+2
| * add new endpoint to update backup versionsHubert Chathi2019-02-061-0/+33
* | Allow "unavailable" presence status for /sync (#4592)Valentin Anger2019-02-082-1/+2
|/
* Merge branch 'neilj/room_capabilities' of github.com:matrix-org/synapse into ...Neil Johnson2019-01-301-4/+4
|\
| * Merge branch 'develop' into neilj/room_capabilitiesNeil Johnson2019-01-301-4/+4
| |\
| | * Merge branch 'develop' of github.com:matrix-org/synapse into anoa/dm_room_upg...Andrew Morgan2019-01-251-13/+10
| | |\
| | * | Fix typosAndrew Morgan2019-01-221-4/+4
* | | | isortNeil Johnson2019-01-301-2/+1
|/ / /
* | | formatting and use constants where availableNeil Johnson2019-01-301-19/+17
* | | Populate default room version from ConstantsNeil Johnson2019-01-301-1/+2
* | | reflect that rooms v3 is a stable room versionNeil Johnson2019-01-301-0/+1
* | | rework format of change password capabilityNeil Johnson2019-01-291-1/+3
* | | support change_password in capabilities end-pointNeil Johnson2019-01-291-2/+12
* | | enforce auth for capabilities endpointNeil Johnson2019-01-291-10/+17
* | | backout v3Neil Johnson2019-01-251-1/+0
* | | Support room version capabilities in CS API (MSC1804)Neil Johnson2019-01-251-0/+49
| |/ |/|
* | move guard out of is_threepid_reserved and into register.pyNeil Johnson2019-01-221-4/+5
* | Fix None guard in config.server.is_threepid_reservedNeil Johnson2019-01-221-1/+3
* | Config option to disable requesting MSISDN on registrationNeil Johnson2019-01-211-11/+5
|/
* Add GET account data routes (#4303)Travis Ralston2019-01-071-1/+33
* Remove v1 only REST APIs now we don't ship matrix console (#4334)Amber Brown2018-12-293-434/+0
* Return well_known in /login response (#4319)Richard van der Hoff2018-12-241-7/+11
* create support user (#4141)Neil Johnson2018-12-141-1/+10
* Initialise user displayname from SAML2 data (#4272)Richard van der Hoff2018-12-071-0/+5
* Factor SSO success handling out of CAS login (#4264)Richard van der Hoff2018-12-071-29/+76
* Rip out half-implemented m.login.saml2 support (#4265)Richard van der Hoff2018-12-061-67/+2
* Fix non-ASCII pushrules (#4248)Amber Brown2018-12-041-12/+23
* fix type errorAmber Brown2018-12-031-1/+1
* Neilj/fix autojoin (#4223)Neil Johnson2018-11-281-0/+1
* Support m.login.sso (#4220)Richard van der Hoff2018-11-271-4/+9
* Fix fallback auth on Python 3 (#4197)Amber Brown2018-11-191-22/+16
* Remove duplicate slashes in generated consent URLsTravis Ralston2018-11-151-2/+2
* Add config variables for enabling terms auth and the policy name (#4142)Travis Ralston2018-11-061-1/+1
* handle empty backups according to latest spec proposal (#4123)Hubert Chathi2018-11-051-3/+18
* Include a version query string arg for the consent routeTravis Ralston2018-10-311-2/+4
* Merge branch 'develop' into travis/login-termsTravis Ralston2018-10-312-1/+91
|\
| * Address review commentsRichard van der Hoff2018-10-261-5/+16
| * Basic initial support for room upgradesRichard van der Hoff2018-10-251-0/+78
| * Refactor state group lookup to reduce DB hits (#4011)Erik Johnston2018-10-251-1/+2
* | Merge branch 'develop' into travis/login-termsTravis Ralston2018-10-242-33/+6
|\|
| * Fix a number of flake8 errorsRichard van der Hoff2018-10-241-1/+1
| * Clean up room alias creationErik Johnston2018-10-191-32/+5
* | pep8Travis Ralston2018-10-152-13/+2
* | Merge branch 'develop' into travis/login-termsTravis Ralston2018-10-151-0/+372
|\|
| * missed oneDavid Baker2018-10-121-0/+1
| * Don't mangle exceptionsDavid Baker2018-10-121-4/+2
| * Split /room_keys/version into 2 servletsDavid Baker2018-10-121-9/+21
| * PR feedback pt. 1David Baker2018-10-121-1/+1
| * isortDavid Baker2018-10-091-1/+1
| * Merge remote-tracking branch 'origin/develop' into dbkr/e2e_backupsDavid Baker2018-10-0913-77/+144
| |\
| * | WIP e2e key backupsDavid Baker2018-09-131-4/+10
| * | try to make flake8 and isort happyHubert Chathi2018-09-061-1/+4
| * | Merge branch 'develop' into e2e_backupsHubert Chathi2018-08-248-68/+74
| |\ \
| * | | missing importMatthew Hodgson2018-08-121-1/+1
| * | | use parse_stringMatthew Hodgson2018-08-121-3/+3
| * | | support DELETE /version with no argsMatthew Hodgson2018-08-121-2/+3
| * | | implement remaining tests and make them workMatthew Hodgson2018-08-121-0/+6
| * | | improve docstringMatthew Hodgson2018-08-121-1/+5
| * | | add a tonne of docstring; make upload_room_keys properly assert versionMatthew Hodgson2018-08-121-1/+10
| * | | more docstring for the e2e_room_keys restMatthew Hodgson2018-08-121-0/+51
| * | | blindly incorporate PR review - needs testing & fixingMatthew Hodgson2018-08-121-0/+2
| * | | make /room_keys/version workMatthew Hodgson2018-08-121-1/+8
| * | | implement /room_keys/version too (untested)Matthew Hodgson2018-08-121-0/+47
| * | | document the APIMatthew Hodgson2018-08-121-0/+133
| * | | make it work and fix pep8Matthew Hodgson2018-08-121-13/+20
| * | | interim WIP checkin; doesn't build yetMatthew Hodgson2018-08-121-4/+33
| * | | total WIP skeleton for /room_keys APIMatthew Hodgson2018-08-121-0/+56
* | | | Rely on the lack of ?u to represent public accessTravis Ralston2018-10-121-2/+2
* | | | Use a flag rather than a new route for the public policyTravis Ralston2018-10-031-2/+2
* | | | Auto-consent to the privacy policy if the user registered with termsTravis Ralston2018-10-031-0/+6
* | | | Make the terms flow requriedTravis Ralston2018-10-031-4/+4
* | | | Flesh out the fallback auth for termsTravis Ralston2018-10-031-7/+67
* | | | Incorporate Dave's work for GDPR login flowsTravis Ralston2018-10-032-0/+35
| |_|/ |/| |
* | | Merge pull request #3835 from krombel/fix_3821Amber Brown2018-09-121-1/+5
|\ \ \
| * | | fix VOIP crashes under Python 3 (#3821)Krombel2018-09-101-1/+5
* | | | Port rest/ to Python 3 (#3823)Amber Brown2018-09-129-55/+60
|/ / /
* | | Merge pull request #3790 from matrix-org/rav/respect_event_format_in_filterRichard van der Hoff2018-09-051-13/+38
|\ \ \
| * | | Implement 'event_format' filter param in /syncRichard van der Hoff2018-09-041-13/+38
* | | | improve human readable error messageNeil Johnson2018-09-041-1/+2
* | | | improve human readable error messagesNeil Johnson2018-09-042-7/+20
|/ / /
* | | move threepid checker to config, add missing yieldsNeil Johnson2018-08-312-5/+7
* | | ensure post registration auth checks do not fail erroneouslyNeil Johnson2018-08-312-0/+8
* | | fix bug where preserved threepid user comes to sign up and server is mau blockedNeil Johnson2018-08-312-1/+10
| |/ |/|
* | Allow guests to access /rooms/:roomId/event/:eventIdWill Hunt2018-08-201-1/+1
* | Port over enough to get some sytests running on Python 3 (#3668)Amber Brown2018-08-201-1/+1
* | Integrate presence from hotfixes (#3694)Amber Brown2018-08-181-1/+2
* | Remove v1/register's broken shared secret functionality (#3703)Amber Brown2018-08-181-54/+0
* | lazyload aware /messages (#3589)Matthew Hodgson2018-08-161-1/+12
* | initial cut at a room summary API (#3574)Matthew Hodgson2018-08-161-0/+1
* | speed up /members and add at= and membership params (#3568)Matthew Hodgson2018-08-151-3/+29
* | Merge pull request #3667 from matrix-org/erikj/fixup_unbindErik Johnston2018-08-152-6/+27
|\ \
| * | Don't fail requests to unbind 3pids for non supporting ID serversErik Johnston2018-08-082-6/+27
| |/
* / Rename async to async_helpers because `async` is a keyword on Python 3.7 (#3678)Amber Brown2018-08-101-1/+1
|/
* Merge branch 'master' into developRichard van der Hoff2018-08-022-2/+2
|\
| * Check room visibility for /event/ requestsRichard van der Hoff2018-08-022-2/+2
* | Merge pull request #3620 from fuzzmz/return-404-room-not-foundRichard van der Hoff2018-08-011-2/+2
|\ \
| * | return NotFoundError if room not foundSerban Constantin2018-07-311-2/+2
* | | Python 3: Convert some unicode/bytes uses (#3569)Amber Brown2018-08-022-13/+21
|/ /
* | make /context lazyload & filter aware (#3567)Matthew Hodgson2018-07-271-0/+9
* | Merge branch 'develop' of github.com:matrix-org/synapse into erikj/client_api...Erik Johnston2018-07-235-4/+172
|\ \
| * | Admin API for creating new users (#3415)Amber Brown2018-07-201-0/+122
| * | Move v1-only APIs into their own module & isolate deprecated ones (#3460)Amber Brown2018-07-194-4/+50
| |/
* | Move RoomContextHandler out of HandlersErik Johnston2018-07-181-2/+2
* | Split MessageHandler into read only and writersErik Johnston2018-07-182-15/+13
|/
* Refactor REST API tests to use explicit reactors (#3351)Amber Brown2018-07-171-1/+1
* check isort by travisKrombel2018-07-163-4/+4
* Fix develop because I broke it :( (#3535)Amber Brown2018-07-141-2/+2
* Merge pull request #3534 from krombel/use_parse_and_asserts_from_servletAmber Brown2018-07-1411-133/+82
|\
| * fix sytestsAmber Brown2018-07-141-1/+1
| * add changelogKrombel2018-07-131-1/+1
| * rename assert_params_in_request to assert_params_in_dictKrombel2018-07-139-30/+30
| * Use parse_{int,str} and assert from http.servletKrombel2018-07-1310-126/+75
* | Make auth & transactions more testable (#3499)Amber Brown2018-07-147-35/+31
|/
* Merge branch 'develop' into rav/enforce_report_apiRichard van der Hoff2018-07-1233-187/+207
|\
| * run isortAmber Brown2018-07-0932-156/+164
| * Attempt to be more performant on PyPy (#3462)Amber Brown2018-06-283-3/+4
| * update doc for deactivate APIMatthew Hodgson2018-06-261-1/+1
| * add GDPR erase param to deactivate APIMatthew Hodgson2018-06-261-1/+12
| * Revert "Revert "Merge pull request #3431 from matrix-org/rav/erasure_visibili...Erik Johnston2018-06-252-3/+14
| * Revert "Merge pull request #3431 from matrix-org/rav/erasure_visibility"Richard van der Hoff2018-06-222-14/+3
| * Merge pull request #3431 from matrix-org/rav/erasure_visibilityErik Johnston2018-06-222-3/+14
| |\
| | * mark accounts as erased when requestedRichard van der Hoff2018-06-122-3/+14
| * | Remove run_on_reactor (#3395)Amber Brown2018-06-143-17/+0
| |/
| * Merge pull request #3276 from matrix-org/dbkr/unbindDavid Baker2018-06-111-3/+10
| |\
| | * Merge remote-tracking branch 'origin/develop' into dbkr/unbindDavid Baker2018-05-241-3/+5
| | |\
| | * | pep8David Baker2018-05-241-1/+1
| | * | Unbind 3pids when they're deleted tooDavid Baker2018-05-241-3/+10
| * | | fix logRichard van der Hoff2018-06-071-1/+1
| * | | Fix event-purge-by-ts admin APIRichard van der Hoff2018-06-071-6/+4
| * | | Consistently use six's iteritems and wrap lazy keys/values in list() if they'...Amber Brown2018-05-311-1/+1
| | |/ | |/|
* / | Enforce the specified API for report_eventRichard van der Hoff2018-05-311-2/+23
|/ /
* | Merge pull request #3243 from NotAFile/py3-six-3Erik Johnston2018-05-241-3/+5
|\ \ | |/ |/|
| * Replace some more comparisons with sixAdrian Tschira2018-05-191-3/+5
* | Stub out ServerNoticesSender on the workersRichard van der Hoff2018-05-221-0/+4
* | Fix logcontext leak in HttpTransactionCacheRichard van der Hoff2018-05-211-25/+21
* | Stop the transaction cache caching failuresRichard van der Hoff2018-05-211-9/+13
|/
* Merge pull request #3221 from matrix-org/erikj/purge_tokenErik Johnston2018-05-181-7/+10
|\
| * Make purge_history operate on tokensErik Johnston2018-05-151-7/+10
* | Move RoomCreationHandler out of synapse.handlers.HandlersRichard van der Hoff2018-05-172-5/+4
|/
* Set Server header in SynapseRequestRichard van der Hoff2018-05-102-3/+0
* notifications: Convert next_token to string according to the specKonstantinos Sideris2018-05-051-1/+1
* Burminate v1authAdrian Tschira2018-04-302-2/+6
* add guard for None on purge_history apiKrombel2018-04-301-1/+14
* Merge pull request #3156 from NotAFile/py3-hmac-bytesRichard van der Hoff2018-04-302-11/+15
|\
| * Construct HMAC as bytes on py3Adrian Tschira2018-04-292-11/+15
* | Use six.moves.urlparseAdrian Tschira2018-04-152-5/+6
|/
* Merge pull request #3079 from matrix-org/erikj/limit_concurrent_sendsErik Johnston2018-04-101-6/+1
|\
| * Use create_and_send_nonmember_event everywhereErik Johnston2018-04-091-6/+1
* | Merge pull request #2996 from krombel/allow_auto_join_roomsRichard van der Hoff2018-04-101-32/+0
|\ \
| * \ Merge branch 'develop' of into allow_auto_join_roomsKrombel2018-03-282-2/+2
| |\ \
| * | | move handling of auto_join_rooms to RegisterHandlerKrombel2018-03-141-32/+0
* | | | Merge pull request #3061 from NotAFile/add-some-byte-stringsRichard van der Hoff2018-04-091-2/+2
|\ \ \ \
| * | | | Add b prefixes to some strings that are bytes in py3Adrian Tschira2018-04-041-2/+2
| | |/ / | |/| |
* | | | Merge pull request #2938 from dklug/developRichard van der Hoff2018-04-091-1/+4
|\ \ \ \ | |_|_|/ |/| | |