summary refs log tree commit diff
path: root/synapse/util (follow)
Commit message (Expand)AuthorAgeFilesLines
* Directly import json from the standard library. (#8259)Patrick Cloke2020-09-082-3/+4
* Stop sub-classing object (#8249)Patrick Cloke2020-09-0417-31/+31
* Fix typing for `@cached` wrapped functions (#8240)Erik Johnston2020-09-031-14/+28
* Convert ReadWriteLock to async/await. (#8202)Patrick Cloke2020-08-281-8/+8
* Be stricter about JSON that is accepted by Synapse (#8106)Patrick Cloke2020-08-191-2/+12
* Remove the unused inlineCallbacks code-paths in the caching code (#8119)Patrick Cloke2020-08-191-46/+8
* Remove : from allowed client_secret chars (#8101)Andrew Morgan2020-08-181-3/+1
* Fix typing for notifier (#8064)Erik Johnston2020-08-121-3/+6
* Remove unnecessary maybeDeferred calls (#8044)Patrick Cloke2020-08-071-1/+1
* Reduce unnecessary whitespace in JSON. (#7372)David Vo2020-08-072-2/+9
* Convert some util functions to async (#8035)Patrick Cloke2020-08-062-28/+27
* Stop the parent process flushing the logs on exit (#8012)Richard van der Hoff2020-08-051-2/+8
* re-implement daemonize (#8011)Richard van der Hoff2020-08-041-0/+131
* Fix deprecation warning: import ABC from collections.abc (#7892)Karthikeyan Singaravelan2020-07-201-1/+1
* Convert device handler to async/await (#7871)Patrick Cloke2020-07-171-2/+26
* Fix some spelling mistakes / typos. (#7811)Patrick Cloke2020-07-096-7/+7
* Fix inconsistent handling of upper and lower cases of email addresses. (#7021)Dirk Klimpel2020-07-031-0/+23
* Fix "argument of type 'ObservableDeferred' is not iterable" error (#7708)Patrick Cloke2020-06-161-1/+1
* Replace all remaining six usage with native Python 3 equivalents (#7704)Dagfinn Ilmari Mannsåker2020-06-165-12/+4
* Replace iteritems/itervalues/iterkeys with native versions. (#7692)Patrick Cloke2020-06-153-10/+4
* Performance improvements and refactor of Ratelimiter (#7595)Andrew Morgan2020-06-051-1/+1
* Speed up processing of federation stream RDATA rows.Erik Johnston2020-05-271-0/+12
* Don't apply cache factor to event cache. (#7578)Erik Johnston2020-05-271-0/+4
* Fix stacktrace mangling in `patch_inline_callbacks` (#7554)Richard van der Hoff2020-05-221-2/+7
* remove miscellaneous PY2 codeRichard van der Hoff2020-05-152-27/+8
* remove to_asciiRichard van der Hoff2020-05-151-19/+1
* Remove `exception_to_unicode`Richard van der Hoff2020-05-151-36/+0
* Strictly enforce canonicaljson requirements in a new room version (#7381)Patrick Cloke2020-05-141-1/+1
* Allow configuration of Synapse's cache without using synctl or environment va...Amber Brown2020-05-117-92/+206
* Speed up fetching device lists changes in sync.Erik Johnston2020-05-051-4/+15
* Extend StreamChangeCache to support multiple entities per stream ID (#7303)Richard van der Hoff2020-04-221-46/+71
* On catchup, process each row with its own stream id (#7286)Richard van der Hoff2020-04-201-0/+3
* Rewrite prune_old_outbound_device_pokes for efficiency (#7159)Richard van der Hoff2020-03-301-1/+20
* Clean up some LoggingContext stuff (#7120)Richard van der Hoff2020-03-242-20/+20
* Clarify list/set/dict/tuple comprehensions and enforce via flake8 (#6957)Patrick Cloke2020-02-211-1/+1
* Reduce amount of logging at INFO level. (#6862)Erik Johnston2020-02-061-1/+1
* Fix stacktraces when using ObservableDeferred and async/await (#6836)Erik Johnston2020-02-031-0/+4
* Validate client_secret parameter (#6767)Andrew Morgan2020-01-241-0/+17
* Log saml assertions rather than the whole responseRichard van der Hoff2020-01-161-0/+13
* move batch_iter to a separate moduleRichard van der Hoff2020-01-162-17/+35
* Handle `config` not being set for synapse plugin modulesRichard van der Hoff2020-01-121-1/+1
* Persist auth/state events at backwards extremities when we fetch them (#6526)Richard van der Hoff2019-12-161-2/+2
* look up cross-signing keys from the DB in bulk (#6486)Hubert Chathi2019-12-121-1/+1
* Remove SnapshotCache in favour of ResponseCacheErik Johnston2019-12-091-94/+0
* Fix inaccurate per-block metrics (#6491)Richard van der Hoff2019-12-091-42/+18
* Port SyncHandler to async/awaitErik Johnston2019-12-051-6/+17
* Replace instance variations of homeserver with correct case/spacingAndrew Morgan2019-11-121-1/+1
* Fix LruCache callback deduplication (#6213)V024602019-11-071-11/+37
* Remove usage of deprecated logger.warn method from codebase (#6271)Andrew Morgan2019-10-314-6/+6
* Clarify docstringErik Johnston2019-10-301-0/+4
* Make ObservableDeferred.observe() always return deferred.Erik Johnston2019-10-301-5/+2
* Handle FileNotFound error in checking git repository version (#6284)Andrew Morgan2019-10-301-4/+6
* Make concurrently_execute work with async/awaitErik Johnston2019-10-291-4/+3
* Update docstringErik Johnston2019-10-291-3/+2
* Quick fix to ensure cache descriptors always return deferredsErik Johnston2019-10-281-2/+2
* Add maybe_awaitable and fix __init__ bugsErik Johnston2019-10-111-0/+29
* Fixup commentsErik Johnston2019-10-101-3/+3
* Fix py3.5Erik Johnston2019-10-101-1/+1
* Fix py3.5Erik Johnston2019-10-101-1/+1
* sortErik Johnston2019-10-101-3/+1
* Appease mypyErik Johnston2019-10-101-13/+18
* Add comentsErik Johnston2019-10-101-5/+25
* Log correct contextErik Johnston2019-10-101-6/+6
* Test for sentinel commitErik Johnston2019-10-101-2/+19
* Move patch_inline_callbacks into synapse/Erik Johnston2019-10-101-0/+179
* add some metrics on the federation sender (#6160)Richard van der Hoff2019-10-031-2/+4
* Fix up some typechecking (#6150)Amber Brown2019-10-025-8/+33
* Fix errors storing large retry intervals.Erik Johnston2019-10-021-1/+1
* Merge branch 'develop' into rav/fix_attribute_mappingRichard van der Hoff2019-09-193-21/+68
|\
| * Add 'failure_ts' column to 'destinations' table (#6016)Richard van der Hoff2019-09-171-1/+15
| * Remove the cap on federation retry interval. (#6026)Richard van der Hoff2019-09-121-2/+2
| * Fix bug in calculating the federation retry backoff period (#6025)Richard van der Hoff2019-09-121-2/+3
| * Use the v2 Identity Service API for lookups (MSC2134 + MSC2140) (#5976)Andrew Morgan2019-09-111-0/+33
| * Clean up some code in the retry logic (#6017)Richard van der Hoff2019-09-111-16/+13
| * Revert "Use the v2 lookup API for 3PID invites (#5897)" (#5937)Andrew Morgan2019-08-301-33/+0
| * Use the v2 lookup API for 3PID invites (#5897)Andrew Morgan2019-08-281-0/+33
| * Retry well-known lookup before expiry.Erik Johnston2019-08-131-3/+5
* | Fix a bug with saml attribute maps.Richard van der Hoff2019-09-191-1/+19
|/
* Add kwargs and docBrendan Abolivier2019-07-291-2/+4
* Add ability to pass arguments to looping callsBrendan Abolivier2019-07-291-2/+2
* Fix some error cases in the caching layer. (#5749)Richard van der Hoff2019-07-251-32/+42
* Add a prometheus metric for active cache lookups. (#5750)Richard van der Hoff2019-07-242-2/+33
* Replace returnValue with return (#5736)Amber Brown2019-07-236-15/+13
* Cache get_version_string.Erik Johnston2019-07-221-2/+21
* Fixes to the federation rate limiter (#5621)Richard van der Hoff2019-07-051-8/+8
* Improve the backwards compatibility re-exports of synapse.logging.context (#5...Amber Brown2019-07-053-5/+61
* Move logging utilities out of the side drawer of util/ and into logging/ (#5606)Amber Brown2019-07-0412-962/+26
* Fix 'utime went backwards' errors on daemonization. (#5609)Richard van der Hoff2019-07-031-4/+13
* Fix a number of "Starting txn from sentinel context" warnings (#5605)Richard van der Hoff2019-07-031-1/+7
* Fix media repo breaking (#5593)Amber Brown2019-07-021-2/+7
* Prevent multiple upgrades on the same room at once (#5051)Andrew Morgan2019-06-251-1/+1
* Avoid raising exceptions in metricsRichard van der Hoff2019-06-241-8/+14
* Merge branch 'develop' into rav/cleanup_metricsRichard van der Hoff2019-06-2427-314/+317
|\
| * Run Black. (#5482)Amber Brown2019-06-2027-314/+317
* | Sanity-checking for metrics updatesRichard van der Hoff2019-06-191-7/+33
|/
* Call RetryLimiter correctly (#5340)Richard van der Hoff2019-06-041-1/+6
* Avoid rapidly backing-off a server if we ignore the retry intervalRichard van der Hoff2019-06-031-23/+37
* Improve logging for logcontext leaks. (#5288)Richard van der Hoff2019-05-291-9/+13
* Make all the rate limiting options more consistent (#5181)Amber Brown2019-05-151-32/+15
* Merge pull request #5183 from matrix-org/erikj/async_serialize_eventErik Johnston2019-05-151-0/+19
|\
| * Update docstring with correct return typeErik Johnston2019-05-151-1/+1
| * Allow client event serialization to be asyncErik Johnston2019-05-141-0/+19
* | comment about user_joined_roomRichard van der Hoff2019-05-141-0/+1
|/
* Merge branch 'master' into developRichard van der Hoff2019-05-031-2/+7
|\
| * Use SystemRandom for token generationRichard van der Hoff2019-05-031-2/+7
* | Remove periods from copyright headers (#5046)Andrew Morgan2019-04-111-1/+1
* | Fix disappearing exceptions in manhole. (#5035)Richard van der Hoff2019-04-101-2/+57
|/
* Add a caching layer to .well-known responses (#4516)Richard van der Hoff2019-01-301-0/+161
* Merge pull request #4486 from xperimental/workaround-4216Richard van der Hoff2019-01-301-1/+4
|\
| * Implement workaround for login error.Robert Jacob2019-01-301-1/+4
* | Make linearizer more quiet (#4507)Amber Brown2019-01-291-5/+5
|/
* Fix incorrect logcontexts after a Deferred was cancelled (#4407)Richard van der Hoff2019-01-171-1/+3
* Fix UnicodeDecodeError when postgres is not configured in english (#4253)Richard van der Hoff2018-12-041-1/+38
* Merge branch 'develop' of github.com:matrix-org/synapse into erikj/alias_disa...Erik Johnston2018-10-253-54/+76
|\
| * Correctly account for cpu usage by background threads (#4074)Richard van der Hoff2018-10-231-51/+69
| * Make scripts/ and scripts-dev/ pass pyflakes (and the rest of the codebase on...Amber Brown2018-10-201-1/+3
| * Fix manhole on py3 (pt 2) (#4067)Amber Brown2018-10-191-0/+2
| * make a bytestringAmber Brown2018-10-191-2/+2
* | Anchor returned regex to start and end of stringErik Johnston2018-10-191-2/+6
* | Add config option to control alias creationErik Johnston2018-10-191-0/+21
|/
* Remove unnecessary extra function call layerErik Johnston2018-10-081-16/+13
* Use errback pattern and catch async failuresErik Johnston2018-10-081-14/+29
* Log looping call exceptionsErik Johnston2018-10-051-1/+18
* Correctly match 'dict.pop' apiErik Johnston2018-10-011-3/+11
* Don't update eviction metrics on explicit removalErik Johnston2018-10-011-5/+0
* Merge remote-tracking branch 'origin/develop' into erikj/destination_retry_cacheRichard van der Hoff2018-09-281-4/+37
|\
| * Include eventid in log lines when processing incoming federation transactions...Richard van der Hoff2018-09-271-4/+37
* | Merge branch 'rav/fix_expiring_cache_len' into erikj/destination_retry_cacheRichard van der Hoff2018-09-261-10/+17
|\|
| * Log which cache is throwing exceptionsRichard van der Hoff2018-09-261-10/+17
| * Fix ExpiringCache.__len__ to be accurateErik Johnston2018-09-261-10/+7
* | Fix ExpiringCache.__len__ to be accurateErik Johnston2018-09-211-12/+9
* | Add a five minute cache to get_destination_retry_timingsErik Johnston2018-09-211-0/+13
* | Make ExpiringCache slightly more performantErik Johnston2018-09-211-1/+5
|/
* Fix some instances of ExpiringCache not expiring cache itemsErik Johnston2018-09-211-1/+0
* Improve the logging when handling a federation transaction (#3904)Richard van der Hoff2018-09-191-1/+1
* Replace custom DeferredTimeoutError with defer.TimeoutErrorErik Johnston2018-09-191-9/+3
* Run canceller first to allow it to generate correct errorErik Johnston2018-09-191-2/+5
* Update to use new timeout function everywhere.Erik Johnston2018-09-191-54/+19
* Fix timeout functionErik Johnston2018-09-151-1/+2
* Add an awful secondary timeout to fix wedged requestsErik Johnston2018-09-141-0/+51
* Add in flight real time metrics for Measure blocksErik Johnston2018-09-141-0/+22
* Change the manhole SSH key to have more bitsErik Johnston2018-09-111-13/+31
* Fix exceptions when a connection is closed before we read the headersRichard van der Hoff2018-08-201-1/+3
* Robustness fix for logcontext filterRichard van der Hoff2018-08-201-1/+7
* Port over enough to get some sytests running on Python 3 (#3668)Amber Brown2018-08-203-8/+29
* Merge branch 'rav/fix_linearizer_cancellation' into developRichard van der Hoff2018-08-101-43/+68
|\
| * Fix linearizer cancellation on twisted < 18.7Richard van der Hoff2018-08-101-43/+68
* | Rename async to async_helpers because `async` is a keyword on Python 3.7 (#3678)Amber Brown2018-08-105-4/+4
|/
* Python 3: Convert some unicode/bytes uses (#3569)Amber Brown2018-08-021-3/+3
* fix invalidationRichard van der Hoff2018-07-271-1/+1
* Rewrite cache list decoratorRichard van der Hoff2018-07-271-67/+64
* Fix some looping_call calls which were broken in #3604Richard van der Hoff2018-07-261-1/+1
* Test and fix support for cancellation in LinearizerRichard van der Hoff2018-07-201-6/+22
* Combine Limiter and LinearizerRichard van der Hoff2018-07-201-89/+10
* Improvements to the LimiterRichard van der Hoff2018-07-201-13/+20
* Add a sleep to the Limiter to fix stack overflows.Richard van der Hoff2018-07-201-3/+20
* Don't spew errors because we can't save metrics (#3563)Amber Brown2018-07-192-6/+24
* Make Distributor run its processes as a background processRichard van der Hoff2018-07-181-26/+18
* Run things as background processesRichard van der Hoff2018-07-182-1/+9
* Use efficient .intersectionErik Johnston2018-07-171-4/+1
* Fix perf regression in PR #3530Erik Johnston2018-07-171-1/+6
* Merge pull request #3530 from matrix-org/erikj/stream_cacheAmber Brown2018-07-171-8/+1
|\
| * Don't return unknown entities in get_entities_changedErik Johnston2018-07-131-8/+1
* | Make FederationRateLimiter queue requests properlyRichard van der Hoff2018-07-131-10/+23
|/
* Reduce set building in get_entities_changedRichard van der Hoff2018-07-121-8/+12
* Attempt to include db threads in cpu usage stats (#3496)Richard van der Hoff2018-07-101-2/+21
* Refactor logcontext resource usage tracking (#3501)Richard van der Hoff2018-07-102-49/+120
* run isortAmber Brown2018-07-0922-73/+71
* Attempt to be more performant on PyPy (#3462)Amber Brown2018-06-281-1/+1
* Revert "Revert "Try to not use as much CPU in the StreamChangeCache"" (#3454)Amber Brown2018-06-281-2/+4
* Revert "Try to not use as much CPU in the StreamChangeCache"Matthew Hodgson2018-06-261-4/+2
* fixesAmber Brown2018-06-261-2/+2
* fixesAmber Brown2018-06-261-2/+2
* try and make loading items from the cache fasterAmber Brown2018-06-261-2/+4
* Remove all global reactor imports & pass it around explicitly (#3424)Amber Brown2018-06-251-0/+3
* Disable partial state group caching for wildcard lookupsRichard van der Hoff2018-06-221-13/+12
* Merge pull request #3419 from matrix-org/rav/events_per_requestRichard van der Hoff2018-06-221-0/+15
|\
| * Indirect evt_count updates via method callRichard van der Hoff2018-06-221-0/+11
| * Log number of events fetched from DBRichard van der Hoff2018-06-211-0/+4
* | Pass around the reactor explicitly (#3385)Amber Brown2018-06-224-33/+43
|/
* Remove run_on_reactor (#3395)Amber Brown2018-06-141-9/+1
* Port to sortedcontainers (with tests!) (#3332)Amber Brown2018-06-061-26/+31
* Add hacky cache factor override systemErik Johnston2018-06-042-2/+12
* Consistently use six's iteritems and wrap lazy keys/values in list() if they'...Amber Brown2018-05-312-3/+5
* Merge pull request #3281 from NotAFile/py3-six-isinstanceAmber Brown2018-05-302-11/+15
|\
| * pep8Adrian Tschira2018-05-291-0/+1
| * fix recursion errorAdrian Tschira2018-05-241-7/+5
| * remaining isintance fixesAdrian Tschira2018-05-242-6/+11
* | fix up testsAmber Brown2018-05-281-3/+3
* | update to more consistently use seconds in any metrics or loggingAmber Brown2018-05-283-19/+19
* | add comment about why unregAmber Brown2018-05-281-0/+2
* | Merge remote-tracking branch 'origin/develop' into 3218-official-promAmber Brown2018-05-282-1/+24
|\|
| * Merge pull request #3247 from NotAFile/py3-miscAmber Brown2018-05-241-1/+6
| |\
| | * fix py3 intern and remove unnecessary py3 encodeAdrian Tschira2018-05-191-1/+6
| * | Merge pull request #3245 from NotAFile/batch-iterAmber Brown2018-05-241-0/+18
| |\ \
| | * | Add batch_iter to utilsAdrian Tschira2018-05-191-0/+18
| | |/
* | | cleanupAmber Brown2018-05-221-5/+10
* | | cleanup pep8 errorsAmber Brown2018-05-221-2/+5
* | | fixesAmber Brown2018-05-222-12/+30
* | | Merge remote-tracking branch 'origin/develop' into 3218-official-promAmber Brown2018-05-221-11/+27
|\| |
| * | CommentErik Johnston2018-05-221-1/+1
| * | Fix logcontext resource usage trackingErik Johnston2018-05-221-11/+27
| |/
* / replacing portionsAmber Brown2018-05-217-98/+71
|/
* Merge remote-tracking branch 'origin/develop' into rav/warn_on_logcontext_failRichard van der Hoff2018-05-0315-136/+342
|\
| * Fix logcontext leaks in rate limiterRichard van der Hoff2018-05-031-3/+14
| * Merge branch 'develop' into rav/more_logcontext_leaksRichard van der Hoff2018-05-021-1/+1
| |\
| | * Fix incorrect reference to StringIORichard van der Hoff2018-05-021-1/+1
| * | Fix a class of logcontext leaksRichard van der Hoff2018-05-021-22/+38
| |/
| * Merge pull request #3144 from matrix-org/rav/run_in_background_exception_hand...Richard van der Hoff2018-04-301-1/+7
| |\
| | * Trap exceptions thrown within run_in_backgroundRichard van der Hoff2018-04-271-1/+7
| * | Merge branch 'develop' into py3-xrange-1Richard van der Hoff2018-04-307-12/+17
| |\ \
| | * \ Merge pull request #3154 from NotAFile/py3-stringioRichard van der Hoff2018-04-301-1/+1
| | |\ \
| | | * | replace stringIO importsAdrian Tschira2018-04-281-1/+1
| | * | | Merge pull request #3155 from NotAFile/py3-bytes-1Richard van der Hoff2018-04-301-2/+5
| | |\ \ \
| | | * | | more bytes stringsAdrian Tschira2018-04-291-2/+5
| | | |/ /
| | * | | Merge pull request #3140 from matrix-org/rav/use_run_in_backgroundRichard van der Hoff2018-04-305-9/+11
| | |\ \ \ | | | |/ / | | |/| |
| | | * | Merge remote-tracking branch 'origin/develop' into rav/use_run_in_backgroundRichard van der Hoff2018-04-271-1/+6
| | | |\ \
| | | * | | Use run_in_background in preference to preserve_fnRichard van der Hoff2018-04-275-9/+11
| | | | |/ | | | |/|
| * | / | Move more xrange to sixAdrian Tschira2018-04-283-5/+10
| |/ / /
| * | | Merge remote-tracking branch 'origin/develop' into rav/deferred_timeoutRichard van der Hoff2018-04-271-1/+6
| |\ \ \ | | | |/ | | |/|
| | * | Improve exception handling for background processesRichard van der Hoff2018-04-271-1/+6
| | |/
| * | Backport deferred.addTimeoutRichard van der Hoff2018-04-271-0/+67
| * | Use deferred.addTimeout instead of time_bound_deferredRichard van der Hoff2018-04-231-56/+0
| |/
| * Merge pull request #3107 from NotAFile/py3-bool-nonzeroRichard van der Hoff2018-04-201-0/+1
| |\
| | * add __bool__ alias to __nonzero__ methodsAdrian Tschira2018-04-151-0/+1
| * | Merge pull request #3110 from NotAFile/py3-six-queueRichard van der Hoff2018-04-201-2/+2
| |\ \
| | * | Replace Queue with six.moves.queueAdrian Tschira2018-04-161-2/+2
| | |/
| * | Merge pull request #3093 from matrix-org/rav/response_cache_wrapRichard van der Hoff2018-04-201-14/+74
| |\ \ | | |/ | |/|
| | * ResponseCache: fix handling of completed resultsRichard van der Hoff2018-04-131-13/+19
| | * Refactor ResponseCache usageRichard van der Hoff2018-04-121-2/+56
| * | Revert "Use sortedcontainers instead of blist"Richard van der Hoff2018-04-131-2/+2
| |/
| * Merge pull request #3092 from matrix-org/rav/response_cache_metricsRichard van der Hoff2018-04-121-1/+13
| |\
| | * Add metrics for ResponseCacheRichard van der Hoff2018-04-101-1/+13
| * | Merge pull request #3059 from matrix-org/rav/doc_response_cacheRichard van der Hoff2018-04-121-0/+32
| |\ \
| | * | Document the behaviour of ResponseCacheRichard van der Hoff2018-04-041-0/+32
| * | | Use sortedcontainers instead of blistVincent Breitmoser2018-04-101-2/+2
| | |/ | |/|
| * | Revert "Merge pull request #3066 from matrix-org/rav/remove_redundant_metrics"Richard van der Hoff2018-04-091-0/+25
| * | Merge pull request #3068 from matrix-org/rav/fix_cache_invalidationRichard van der Hoff2018-04-051-26/+38
| |\ \
| | * | Fix overzealous cache invalidationRichard van der Hoff2018-04-051-26/+38
| * | | Remove redundant metrics which were deprecated in 0.27.0.Richard van der Hoff2018-04-041-25/+0
| |/ /
| * / Use static JSONEncodersRichard van der Hoff2018-03-291-0/+19
| |/
| * 404 correctly on missing paths via NoResourceMatthew Hodgson2018-03-231-2/+2
| * Add commentsErik Johnston2018-03-191-0/+7
| * Fix bug where state cache used lots of memoryErik Johnston2018-03-152-5/+9
* | Make 'unexpected logging context' into warningsRichard van der Hoff2018-03-151-2/+2
|/
* Factor run_in_background out from preserve_fnRichard van der Hoff2018-03-081-24/+29
* Rewrite make_deferred_yieldable avoiding inlineCallbacksRichard van der Hoff2018-03-011-9/+11
* report metrics on number of cache evictionsRichard van der Hoff2018-02-053-4/+34
* Add federation_domain_whitelist option (#2820)Matthew Hodgson2018-01-221-0/+12
* Merge pull request #2813 from matrix-org/matthew/registrations_require_3pidMatthew Hodgson2018-01-221-0/+48
|\