summary refs log tree commit diff
path: root/synapse/storage (follow)
Commit message (Expand)AuthorAgeFilesLines
* drop tables listed in #1830 (#4992)Neil Johnson2019-04-0824-752/+42
* Merge pull request #5001 from matrix-org/rav/keyring_cleanupsRichard van der Hoff2019-04-081-2/+2
|\
| * Fix docstring on get_server_keys_jsonRichard van der Hoff2019-04-041-2/+2
* | Clean up the database pagination code (#5007)Amber Brown2019-04-052-67/+63
* | Add functions to delete a groupErik Johnston2019-04-031-0/+37
* | Fix grammar and document get_current_users_in_room (#4998)Andrew Morgan2019-04-031-1/+1
|/
* Remove presence lists (#4989)Neil Johnson2019-04-034-96/+20
* Merge pull request #4982 from matrix-org/erikj/msc1915Erik Johnston2019-04-032-0/+141
|\
| * Fixup docstringsErik Johnston2019-04-022-5/+5
| * Grandfather in existing user threepidsErik Johnston2019-04-012-0/+37
| * Track IS used to bind 3PIDsErik Johnston2019-04-012-0/+104
* | Run black on the rest of the storage module (#4996)Amber Brown2019-04-0341-2455/+2130
* | Make starting pushers faster during start upErik Johnston2019-04-021-0/+30
* | Fix sync bug when accepting invites (#4956)Richard van der Hoff2019-04-022-11/+18
* | Collect room-version variations into one place (#4969)Richard van der Hoff2019-04-011-1/+2
|/
* Merge pull request #4955 from matrix-org/rav/merge_state_into_eventsRichard van der Hoff2019-03-281-3/+0
|\
| * Combine the CurrentStateDeltaStream into the EventStreamRichard van der Hoff2019-03-271-3/+0
* | Run `black` on some storage modules that the stats branch touches (#4959)Amber Brown2019-03-292-380/+335
|/
* Use the state event amount for userdir import batching, not room count (#4944)Amber Brown2019-03-271-8/+20
* Fix bug where read-receipts lost their timestamps (#4927)Richard van der Hoff2019-03-251-1/+3
* Refactor out state delta handling into its own class (#4917)Amber Brown2019-03-252-64/+76
* Fix upsertErik Johnston2019-03-211-0/+1
* comment block_roomErik Johnston2019-03-201-0/+9
* Allow blocking a room multiple timesErik Johnston2019-03-201-2/+4
* Batching in the user directory import (#4900)Amber Brown2019-03-211-0/+13
* Fix user directory background update (#4887)Erik Johnston2019-03-191-1/+1
* Migrate the user directory initial population to a background task (#4864)Amber Brown2019-03-193-96/+312
* Merge pull request #4846 from matrix-org/hawkowl/userdir-searchErik Johnston2019-03-144-75/+92
|\
| * fixupAmber Brown2019-03-131-1/+1
| * fixupAmber Brown2019-03-132-55/+11
| * fixupAmber Brown2019-03-121-1/+1
| * fixupAmber Brown2019-03-121-1/+2
| * fixupAmber Brown2019-03-122-113/+69
| * fixupAmber Brown2019-03-121-1/+1
| * use the old methodAmber Brown2019-03-121-3/+2
| * fixAmber Brown2019-03-121-1/+1
| * pep8Amber Brown2019-03-121-2/+1
| * fixesAmber Brown2019-03-122-9/+56
| * Merge remote-tracking branch 'origin/develop' into hawkowl/userdir-searchAmber Brown2019-03-112-15/+2
| |\
| * | initialAmber Brown2019-03-113-3/+62
* | | Transfer local user's push rules on room upgrade (#4838)Andrew Morgan2019-03-121-0/+57
| |/ |/|
* | Add comment to schemaErik Johnston2019-03-081-0/+2
* | Make `prev_state` field optionalErik Johnston2019-03-081-15/+0
|/
* Merge branch 'develop' of github.com:matrix-org/synapse into erikj/soft_fail_...Erik Johnston2019-03-083-181/+156
|\
| * Rewrite userdir to be faster (#4537)Amber Brown2019-03-072-181/+137
| * Add docstrings from matrix-org-hotfixesErik Johnston2019-03-061-0/+19
* | Implement soft failErik Johnston2019-03-061-0/+1
|/
* Merge pull request #4699 from matrix-org/erikj/stop_fed_not_in_roomErik Johnston2019-03-051-0/+22
|\
| * s/get_forward_events/get_successor_events/Erik Johnston2019-03-041-2/+2
| * Merge branch 'develop' of github.com:matrix-org/synapse into erikj/stop_fed_n...Erik Johnston2019-03-044-43/+120
| |\
| * | Stop backpaginating when events not visibleErik Johnston2019-02-201-0/+22
* | | Merge pull request #4796 from matrix-org/erikj/factor_out_e2e_keysErik Johnston2019-03-053-541/+546
|\ \ \
| * | | Fixup slave storesErik Johnston2019-03-043-541/+546
| | |/ | |/|
* / | Add some debug about processing read receipts.Richard van der Hoff2019-03-041-6/+20
|/ /
* | Move /account/3pid to client_readerErik Johnston2019-02-271-33/+33
* | Limit cache invalidation replication line length (#4748)Erik Johnston2019-02-271-4/+11
* | Add database version to phonehome stats. (#4753)Richard van der Hoff2019-02-273-0/+42
* | Fix state cache invalidation on workersErik Johnston2019-02-221-6/+34
|/
* UPSERT many functionality (#4644)Amber Brown2019-02-201-12/+134
* Merge pull request #4671 from matrix-org/erikj/state_cache_invalidationErik Johnston2019-02-192-25/+58
|\
| * DocsErik Johnston2019-02-191-2/+3
| * Use itertoolsErik Johnston2019-02-191-2/+2
| * DocumentationErik Johnston2019-02-191-4/+4
| * Batch cache invalidation over replicationErik Johnston2019-02-182-25/+57
* | Split /login into client_readerErik Johnston2019-02-181-41/+41
|/
* Split out registration to workerErik Johnston2019-02-181-115/+115
* Add configurable room list publishing rulesErik Johnston2019-02-141-0/+25
* Run `black` on user directory code (#4635)Amber Brown2019-02-131-87/+66
* Merge pull request #4627 from matrix-org/erikj/user_ips_analyzeErik Johnston2019-02-122-3/+31
|\
| * Fix pep8Erik Johnston2019-02-121-1/+1
| * Analyze user_ips before running deduplicationErik Johnston2019-02-122-3/+31
* | Reduce user_ips bloat during dedupe background updateErik Johnston2019-02-121-3/+60
|/
* Merge pull request #4580 from matrix-org/uhoreg/e2e_backup_add_updatingErik Johnston2019-02-111-0/+21
|\
| * add new endpoint to update backup versionsHubert Chathi2019-02-061-0/+21
* | Fix 'no unique or exclusion constraint' error (#4591)Richard van der Hoff2019-02-081-6/+21
* | Filter user directory state query to a subset of state events (#4462)Andrew Morgan2019-02-051-4/+12
|/
* Merge pull request #4530 from matrix-org/anoa/room_upgrade_federatableAndrew Morgan2019-01-311-11/+27
|\
| * Raise an exception instead of returning NoneAndrew Morgan2019-01-311-2/+9
| * New function for getting room's create eventAndrew Morgan2019-01-311-11/+20
* | Fix infinite loop when an event is redacted in a v3 room (#4535)Richard van der Hoff2019-01-311-5/+32
|/
* Fix flake8 (#4519)Amber Brown2019-01-303-86/+86
* Merge branch 'develop' of github.com:matrix-org/synapse into erikj/redactions...Erik Johnston2019-01-291-0/+23
|\
| * Refactor event building into EventBuilderErik Johnston2019-01-291-0/+23
* | Update synapse/storage/events_worker.pyErik Johnston2019-01-291-1/+1
* | Check redaction state when event is pulled out of the databaseErik Johnston2019-01-291-0/+13
* | Fix typoErik Johnston2019-01-291-1/+1
* | Remove unused argErik Johnston2019-01-291-2/+1
* | Update synapse/storage/events_worker.pyRichard van der Hoff2019-01-291-1/+1
* | Implement rechecking of redactionsErik Johnston2019-01-291-1/+25
|/
* Fix typo in upserts code (#4505)Amber Brown2019-01-291-1/+1
* Fix UPSERTs on SQLite 3.24+ (#4477)Amber Brown2019-01-283-12/+20
* Merge branch 'develop' of github.com:matrix-org/synapse into anoa/dm_room_upg...Andrew Morgan2019-01-282-10/+9
|\
| * Merge pull request #4470 from matrix-org/erikj/require_format_versionErik Johnston2019-01-251-6/+2
| |\
| | * Replace missed usages of FrozenEventErik Johnston2019-01-251-6/+2
| * | Merge branch 'develop' of github.com:matrix-org/synapse into erikj/sqlite_nat...Erik Johnston2019-01-252-2/+25
| |\ \
| | * | Don't require sqlite3 when using postgres (#4466)Andrew Morgan2019-01-251-2/+1
| * | | Disable native upserts for sqlite, as they don't workErik Johnston2019-01-251-3/+7
| | |/ | |/|
* | | Merge branch 'develop' of github.com:matrix-org/synapse into anoa/dm_room_upg...Andrew Morgan2019-01-2512-64/+334
|\ \ \ | | |/ | |/|
| * | Merge pull request #4415 from matrix-org/anoa/full_search_upgraded_roomsAndrew Morgan2019-01-251-0/+24
| |\ \ | | |/ | |/|
| | * Merge branch 'anoa/full_search_upgraded_rooms' of github.com:matrix-org/synap...Andrew Morgan2019-01-241-1/+1
| | |\
| | | * Apply suggestions from code reviewRichard van der Hoff2019-01-241-1/+1
| | * | Remove redundant create event None checkAndrew Morgan2019-01-241-3/+0
| | |/
| | * Do not return in a deferred functionAndrew Morgan2019-01-221-3/+3
| | * Ensure new filter is actually createdAndrew Morgan2019-01-221-1/+0
| | * Fix a bug with single-room search searching all roomsAndrew Morgan2019-01-221-1/+28
| | * Search for messages across predecessor roomsAndrew Morgan2019-01-181-0/+1
| * | Revert "Require event format version to parse or create events"Erik Johnston2019-01-251-2/+6
| * | Merge branch 'develop' of github.com:matrix-org/synapse into erikj/require_fo...Erik Johnston2019-01-248-33/+238
| |\ \
| | * \ Merge pull request #4405 from matrix-org/erikj/fixup_rejecting_invitesErik Johnston2019-01-241-4/+4
| | |\ \
| | | * | Use term 'out of band membership' insteadErik Johnston2019-01-241-3/+3
| | * | | Merge pull request #4437 from matrix-org/erikj/event_format_version_v2Erik Johnston2019-01-243-4/+32
| | |\ \ \
| | * | | | Fix UPSERT check (#4459)Amber Brown2019-01-241-5/+28
| | * | | | Use native UPSERTs where possible (#4306)Amber Brown2019-01-247-30/+212
| * | | | | Replace missed usages of FrozenEventErik Johnston2019-01-241-6/+2
| * | | | | Merge branch 'erikj/fixup_rejecting_invites' of github.com:matrix-org/synapse...Erik Johnston2019-01-231-4/+4
| |\ \ \ \ \ | | | |_|/ / | | |/| | |
| | * | | | Clarify the invite flowsErik Johnston2019-01-231-4/+7
| | * | | | Store rejected remote invite events as outliersErik Johnston2019-01-231-4/+1
| | |/ / /
| * | / / Merge branch 'erikj/get_pdu_versions' into erikj/require_format_versionErik Johnston2019-01-231-1/+5
| |\| | | | | |/ / | |/| |
| | * | Fixup removal of duplicate `user_ips` rows (#4432)Erik Johnston2019-01-231-1/+5
| * | | isortErik Johnston2019-01-231-1/+1
| * | | Add support for persisting event format versionsErik Johnston2019-01-233-4/+32
| |/ /
| * | Refactor to rewrite the SQL insteadErik Johnston2019-01-221-13/+16
| * | Don't shadow paramsErik Johnston2019-01-221-4/+3
| * | Fix bug when removing duplicate rows from user_ipsErik Johnston2019-01-221-13/+20
* | | Fix typosAndrew Morgan2019-01-221-1/+1
|/ /
* / Fix race when persisting create event (#4404)Erik Johnston2019-01-181-1/+12
|/
* Remove duplicates in the user_ips table and add an index (#4370)Amber Brown2019-01-122-4/+160
* Fix adding new rows instead of updating them if one of the key values is a NU...Amber Brown2019-01-091-1/+9
* Ensure synchrotrons can access is_support_user in the storage layerNeil Johnson2019-01-021-25/+25
* Log roomid along with Unknown room (#4297)Will Hunt2018-12-241-1/+1
* create support user (#4141)Neil Johnson2018-12-143-4/+83
* Settings Fix deleting e2e room keys on xenial (#4295)Amber Brown2018-12-141-1/+1
* Initialise user displayname from SAML2 data (#4272)Richard van der Hoff2018-12-071-7/+13
* drop undocumented dependency on dateutil (#4266)Richard van der Hoff2018-12-061-7/+6
* Add an option to disable search for homeservers which may not be interested i...Travis Ralston2018-12-041-0/+6
* add more detail to logging regarding "More than one row matched" error (#4234)Ben Parsons2018-12-041-6/+6
* Fix UnicodeDecodeError when postgres is not configured in english (#4253)Richard van der Hoff2018-12-041-7/+8
* Drop sent_transactionsAaron Raimist2018-12-016-74/+3
* Neilj/fix mau initial reserved users (#4211)Neil Johnson2018-11-281-2/+3
* Ignore __pycache__ directories in schema delta dirRichard van der Hoff2018-11-201-1/+1
* Add option to track MAU stats (but not limit people) (#3830)Travis Ralston2018-11-151-34/+40
* Merge remote-tracking branch 'origin/develop' into dbkr/e2e_backup_versions_a...David Baker2018-11-098-65/+274
|\
| * Lets convert bytes to unicode insteadErik Johnston2018-11-081-5/+3
| * Fix noop checks when updating device keysErik Johnston2018-11-081-0/+5
| * Add helpers for getting prev and auth events (#4139)Erik Johnston2018-11-062-6/+6
| * Add unique indexes to a couple of tablesRichard van der Hoff2018-11-023-6/+88
| * Remove redundant database locks for device list updatesRichard van der Hoff2018-11-021-5/+40
| * Merge pull request #4006 from matrix-org/erikj/purge_state_groupsErik Johnston2018-10-304-48/+137
| |\
| | * Move _find_unreferenced_groupsErik Johnston2018-10-292-81/+83
| | * Fix set operations thinkoErik Johnston2018-10-291-3/+4
| | * Don't make temporary listErik Johnston2018-10-291-3/+2
| | * Make SQL a bit cleanerErik Johnston2018-10-291-3/+2
| | * Merge branch 'develop' of github.com:matrix-org/synapse into erikj/purge_stat...Erik Johnston2018-10-2610-379/+635
| | |\
| | * | pep8Erik Johnston2018-10-191-1/+1
| | * | Merge branch 'develop' of github.com:matrix-org/synapse into erikj/purge_stat...Erik Johnston2018-10-196-56/+461
| | |\ \
| | * | | Batch process handling state groupsErik Johnston2018-10-192-101/+92
| | * | | Fix up commentsErik Johnston2018-10-121-3/+3
| | * | | Add state_group index to event_to_state_groupsErik Johnston2018-10-043-1/+27
| | * | | Delete unreferened state groups during purgeErik Johnston2018-10-042-6/+77
* | | | | pep8David Baker2018-11-091-1/+2
* | | | | add docsDavid Baker2018-11-091-1/+4
* | | | | Cast to int here tooDavid Baker2018-10-301-0/+5
* | | | | Cast bacjup version to int when queryingDavid Baker2018-10-301-1/+6
* | | | | Convert version back to a stringDavid Baker2018-10-301-0/+1
* | | | | Try & make it work on postgresDavid Baker2018-10-301-2/+2
* | | | | Make e2e backup versions numeric in the DBDavid Baker2018-10-292-1/+54
|/ / / /
* | | | Deduplicate device updates sent over replicationErik Johnston2018-10-291-1/+5
* | | | preserve room visibilityRichard van der Hoff2018-10-251-1/+1
| |_|/ |/| |
* | | Refactor state group lookup to reduce DB hits (#4011)Erik Johnston2018-10-252-327/+520
* | | Merge pull request #4081 from matrix-org/neilj/fix_mau_initNeil Johnson2018-10-252-23/+83
|\ \ \
| * | | add new lineNeil Johnson2018-10-251-0/+1
| * | | improve commentsNeil Johnson2018-10-251-6/+6
| * | | fix style inconsistenciesNeil Johnson2018-10-242-15/+47
| * | | Merge branch 'develop' of github.com:matrix-org/synapse into neilj/fix_mau_initNeil Johnson2018-10-242-22/+25
| |\ \ \
| * | | | remove white spaceNeil Johnson2018-10-231-2/+1
| * | | | fix race condiftion in calling initialise_reserved_usersNeil Johnson2018-10-232-17/+45
* | | | | Merge branch 'develop' of github.com:matrix-org/synapse into matthew/autocrea...Neil Johnson2018-10-2512-51/+423
|\ \ \ \ \ | | |/ / / | |/| | |
| * | | | Merge pull request #4082 from matrix-org/rav/fix_pep8Richard van der Hoff2018-10-241-1/+1
| |\ \ \ \
| | * | | | Fix a number of flake8 errorsRichard van der Hoff2018-10-241-1/+1
| | |/ / /
| * | | | Merge pull request #4040 from matrix-org/erikj/states_res_v2_rebaseErik Johnston2018-10-241-21/+24
| |\ \ \ \ | | |/ / / | |/| | |
| | * | | Update event_auth table for rejected eventsErik Johnston2018-10-161-15/+21
| | * | | Add v2 state res algorithm.Erik Johnston2018-10-161-6/+3
| * | | | Make scripts/ and scripts-dev/ pass pyflakes (and the rest of the codebase on...Amber Brown2018-10-205-6/+6
| | |_|/ | |/| |
| * | | Fix incorrect truncation in get_missing_eventsRichard van der Hoff2018-10-161-22/+16
| |/ /
| * | Merge pull request #4019 from matrix-org/dbkr/e2e_backupsDavid Baker2018-10-153-0/+361
| |\ \
| | * | Misc PR feedback bitsDavid Baker2018-10-121-2/+2
| | * | Merge remote-tracking branch 'origin/develop' into dbkr/e2e_backupsDavid Baker2018-10-0916-116/+330
| | |\ \
| | * | | Don't reuse backup versionsDavid Baker2018-10-052-3/+9
| | * | | WIP e2e key backupsDavid Baker2018-09-131-0/+0
| | * | | try to make flake8 and isort happyHubert Chathi2018-09-061-2/+4
| | * | | Merge branch 'develop' into e2e_backupsHubert Chathi2018-08-2414-195/+674
| | |\ \ \
| | * | | | allow session_data to be any JSON instead of just a stringHubert Chathi2018-08-211-2/+4
| | * | | | allow auth_data to be any JSON instead of a stringHubert Chathi2018-08-211-2/+5
| | * | | | missing importMatthew Hodgson2018-08-121-0/+1
| | * | | | 404 nicely if you try to interact with a missing current versionMatthew Hodgson2018-08-121-16/+35
| | * | | | flake8Matthew Hodgson2018-08-121-1/+1
| | * | | | implement remaining tests and make them workMatthew Hodgson2018-08-121-1/+2
| | * | | | fix idiocies and so make tests passMatthew Hodgson2018-08-122-3/+4
| | * | | | don't needlessly return user_idMatthew Hodgson2018-08-121-1/+0
| | * | | | fix flakesMatthew Hodgson2018-08-121-2/+4
| | * | | | fix typosMatthew Hodgson2018-08-121-1/+1
| | * | | | add a tonne of docstring; make upload_room_keys properly assert versionMatthew Hodgson2018-08-121-20/+31
| | * | | | add storage docstring; remove unused set_e2e_room_keysMatthew Hodgson2018-08-121-36/+83
| | * | | | rename room_key_version table correctly, and fix opt argsMatthew Hodgson2018-08-121-13/+13
| | * | | | blindly incorporate PR review - needs testing & fixingMatthew Hodgson2018-08-122-46/+31
| | * | | | make /room_keys/version workMatthew Hodgson2018-08-122-7/+19
| | * | | | implement /room_keys/version too (untested)Matthew Hodgson2018-08-122-1/+57
| | * | | | make it work and fix pep8Matthew Hodgson2018-08-123-43/+64
| | * | | | interim WIP checkin; doesn't build yetMatthew Hodgson2018-08-121-0/+20
| | * | | | total WIP skeleton for /room_keys APIMatthew Hodgson2018-08-122-0/+173
| * | | | | Comments on get_all_new_events_streamRichard van der Hoff2018-10-121-1/+15
| | |_|/ / | |/| | |
* | | | | Merge branch 'develop' into matthew/autocreate_autojoinNeil Johnson2018-10-042-34/+91
|\| | | |
| * | | | actually exclude outliersRichard van der Hoff2018-10-031-1/+2
| * | | | remove debuggingRichard van der Hoff2018-10-021-10/+0
| * | | | Fix bug in forward_extremity update logicRichard van der Hoff2018-10-021-33/+78
| | |_|/ | |/| |
| * | | Fix bug when invalidating destination retry timingsErik Johnston2018-10-021-1/+1
| * | | Merge remote-tracking branch 'origin/develop' into erikj/destination_retry_cacheRichard van der Hoff2018-09-282-9/+26
| |\ \ \
| * | | | Add a five minute cache to get_destination_retry_timingsErik Johnston2018-09-211-1/+22
* | | | | fix thinkosMatthew Hodgson2018-09-291-1/+1
| |/ / / |/| | |
* | | | Merge pull request #3961 from matrix-org/neilj/lock_mau_upsertsRichard van der Hoff2018-09-271-1/+4
|\ \ \ \
| * | | | fix #3854Neil Johnson2018-09-261-1/+4
| |/ / /
* / / / docstrings and unittests for storage.state (#3958)Richard van der Hoff2018-09-271-8/+22
|/ / /
* | | Fix client IPs being broken on Python 3 (#3908)Amber Brown2018-09-201-15/+19
* | | Fix up changelog and remove spurious commentErik Johnston2018-09-191-2/+0
* | | pep8Erik Johnston2018-09-191-1/+0
* | | Remove get_destination_retry_timings cacheErik Johnston2018-09-191-5/+0
* | | Return a 404 when deleting unknown room aliasRichard van der Hoff2018-09-171-1/+0
* | | commentErik Johnston2018-09-131-0/+2
* | | pep8Erik Johnston2018-09-131-1/+0
* | | Create indices after insertionErik Johnston2018-09-131-14/+18
* | | Make purge history slightly fasterErik Johnston2018-09-131-2/+9
* | | Merge pull request #3846 from matrix-org/neilj/expose-registered-users hhs-7Neil Johnson2018-09-121-0/+17
|\ \ \
| * | | improve namingNeil Johnson2018-09-121-1/+1
| * | | expose number of real reserved usersNeil Johnson2018-09-121-0/+17
* | | | Merge pull request #3826 from matrix-org/rav/logging_for_keyringAmber Brown2018-09-121-0/+1
|\ \ \ \ | |/ / / |/| | |
| * | | clearer logging when things fail, tooRichard van der Hoff2018-09-061-0/+1
* | | | Speed up lazy loading (#3827)Matthew Hodgson2018-09-122-0/+69
* | | | ensure guests never enter mau listNeil Johnson2018-09-061-4/+3
* | | | guest users should not be part of mau totalNeil Johnson2018-09-051-1/+6
|/ / /
* | | move threepid checker to config, add missing yieldsNeil Johnson2018-08-311-14/+0
* | | ensure post registration auth checks do not fail erroneouslyNeil Johnson2018-08-311-1/+14
* | | Port storage/ to Python 3 (#3725)Amber Brown2018-08-3110-31/+74
| |/ |/|
* | Implement trail usersErik Johnston2018-08-232-1/+32
* | Add missing yieldErik Johnston2018-08-231-1/+2
* | Merge pull request #3659 from matrix-org/erikj/split_profilesErik Johnston2018-08-222-31/+31
|\ \
| * \ Merge branch 'develop' of github.com:matrix-org/synapse into erikj/split_prof...Erik Johnston2018-08-179-134/+217
| |\ \
| * | | Remote profile cache should remain in master workerErik Johnston2018-08-171-4/+2
| * | | Merge branch 'develop' of github.com:matrix-org/synapse into erikj/split_prof...Erik Johnston2018-08-097-34/+272
| |\ \ \
| * | | | Allow ratelimiting on workersErik Johnston2018-08-071-29/+29
| * | | | Allow profile changes to happen on workersErik Johnston2018-08-071-2/+4
| | |_|/ | |/| |