summary refs log tree commit diff
Commit message (Expand)AuthorAgeFilesLines
* Fix rest.test_events. Convert to use SQLiteMemoryDbPoolErik Johnston2014-11-101-10/+5
* Fix SQLBaseStoreTestCaseErik Johnston2014-11-101-1/+1
* Fix stream test.Erik Johnston2014-11-101-5/+12
* Fix room_member storage testErik Johnston2014-11-101-0/+2
* Fix redaction storage testErik Johnston2014-11-101-0/+4
* Fix regression where we did not return redacted events.Erik Johnston2014-11-101-1/+2
* Fix room handler testErik Johnston2014-11-101-15/+40
* PEP8Erik Johnston2014-11-108-20/+22
* Remove useless commentsErik Johnston2014-11-101-23/+0
* Add auth to the various server-server APIsErik Johnston2014-11-103-9/+23
* Fix backfill to work. Add auth to backfill requestErik Johnston2014-11-106-18/+56
* Notify users about invites.Erik Johnston2014-11-103-10/+14
* Fix invite authErik Johnston2014-11-101-3/+5
* Tidy up some of the unused sql tablesErik Johnston2014-11-104-109/+9
* Finish redaction algorithm.Erik Johnston2014-11-105-25/+33
* Use current state to get room hosts, rather than querying the databaseErik Johnston2014-11-072-7/+32
* Add '/event_auth/' federation apiErik Johnston2014-11-074-7/+55
* Implement invite part of invite join danceErik Johnston2014-11-074-22/+75
* Remove /context/ requestErik Johnston2014-11-072-16/+0
* Add hash of current state to eventsErik Johnston2014-11-072-1/+11
* Return auth chain when handling send_joinErik Johnston2014-11-072-8/+27
* Fix bug in _get_auth_chain_txnErik Johnston2014-11-071-14/+11
* Merge branch 'develop' of github.com:matrix-org/synapse into federation_autho...Erik Johnston2014-11-0787-744/+2155
|\
| * Don't cache isWebRTCSupported because whether webRTC is supported might chang...David Baker2014-11-064-14/+11
| * Swap from using raw m.room.member events for room members to using actual Roo...Kegan Dougal2014-11-069-30/+52
| * Use mRoomName on join notifications as well.Kegan Dougal2014-11-061-1/+1
| * Add modelService test. Thin for now but will be expanded upon.Kegan Dougal2014-11-061-0/+30
| * Factor out room name logic: mRoomName is the canonical source.Kegan Dougal2014-11-062-14/+6
| * Use .not.toEqual instead of .toNotEqual which is in a newer version of Jasmine.Kegan Dougal2014-11-061-1/+1
| * Start adding regression tests. First up, register-controller for SYWEB-109.Kegan Dougal2014-11-062-1/+85
| * Fix broken tests which were previously skipped.Kegan Dougal2014-11-062-13/+20
| * Add mRoomName and orderMembersList filter tests. Mark FIXME on broken tests f...Kegan Dougal2014-11-061-3/+444
| * State *.js in karma.conf rather than *.* so *.js~ files are ignored.Kegan Dougal2014-11-061-7/+7
| * Add duration filter unit tests.Kegan Dougal2014-11-052-13/+52
| * Add a few eventHandlerService tests.Kegan Dougal2014-11-051-0/+105
| * Finish matrixService unit tests. Add missing encodeURIComponent to path args.Kegan Dougal2014-11-052-65/+234
| * Add more tests and a TODO.Kegan Dougal2014-11-051-2/+55
| * Fix url decoding bugs with /redact and /send APIs.Kegan Dougal2014-11-051-2/+2
| * Don't urlencode event types just yet so older HSes don't 500.Kegan Dougal2014-11-052-3/+5
| * Be sure to urlencode/decode event types correctly in both the web client and HS.Kegan Dougal2014-11-053-6/+6
| * Add a bunch more unit tests for matrixService.Kegan Dougal2014-11-051-6/+191
| * URL encoding bugfix and add more tests.Kegan Dougal2014-11-042-7/+41
| * Add matrix-service unit tests. Update angular-mocks.Kegan Dougal2014-11-042-111/+261
| * SYN-112: Get pynacl from github instead of PyPIMark Haines2014-11-041-0/+1
| * Determine webclient path by the python module it is contained inMark Haines2014-11-042-2/+5
| * Update .gitignore to ignore config.js files in syweb/webclient.Kegan Dougal2014-11-041-1/+1
| * Move webclient to a python module so that it can be installedMark Haines2014-11-0475-1/+1
| * Merge pull request #11 from matrix-org/webclient-room-data-restructureKegsay2014-11-0415-480/+542
| |\
| | * SYWEB-116: Implement historical display name support.Kegan Dougal2014-11-044-9/+12
| | * Rejig display names when paginating to lie less.Kegan Dougal2014-11-043-13/+24
| | * Rejig order of checks/state updates/message insertions for m.room.member. Mar...Kegan Dougal2014-11-031-26/+23
| | * Fix off-by-one bug when displaying display names / avatar urls when paginating.Kegan Dougal2014-11-031-0/+7
| | * Backwards compat for old-style avatar_urlsKegan Dougal2014-11-031-1/+2
| | * Reference the room_member key on messages which adjusts for current vs old_ro...Kegan Dougal2014-11-032-8/+18
| | * Variable renaming, general cleanup. Don't feed state events from /initialSync...Kegan Dougal2014-11-032-38/+29
| | * Fix broken redact enable logic.Kegan Dougal2014-11-031-1/+1
| | * Fix hidden event keys being incorrectly shown in the even info dialog.Kegan Dougal2014-11-031-1/+5
| | * Fix bug which prevented pagination from bumping the list down, causing infini...Kegan Dougal2014-11-031-1/+1
| | * Fix bug which prevented room name invites appearing correctly.Kegan Dougal2014-11-033-86/+47
| | * Fix bug which prevented the number of users being visible on the recents view.Kegan Dougal2014-11-033-5/+4
| | * Remove events.rooms[room_id] entirely from event-handler-service.Kegan Dougal2014-11-034-232/+59
| | * Make recents[controller/filter/html] use modelService.Kegan Dougal2014-11-035-25/+66
| | * Make call stuff use modelService.Kegan Dougal2014-11-032-5/+5
| | * Keep matrixService stateless and make matrixFilter use modelService.Kegan Dougal2014-11-035-53/+53
| | * Prevent EventStreamService from knowing too much about the EventHandlerServic...Kegan Dougal2014-11-032-21/+20
| | * Replace lots of .events.rooms[room_id] with .roomKegan Dougal2014-10-314-16/+22
| | * room.html now displays messages from model-service. Add debugging fields. Hoo...Kegan Dougal2014-10-315-17/+31
| | * Hook into more of event-handler-service and mimic its functions for now.Kegan Dougal2014-10-312-68/+130
| | * Parse /initialSync data and populate the new data structures.Kegan Dougal2014-10-312-4/+33
| | * Added model-service.js to store model data.Kegan Dougal2014-10-314-2/+102
| * | Don't need this; should be on -g path.Kegan Dougal2014-11-041-1/+0
| * | exclude testsMark Haines2014-11-041-1/+1
| * | Fix installation instructions in READMEMark Haines2014-11-042-25/+31
| * | Use phantomjs as the default browser and not chrome.Kegan Dougal2014-11-042-7/+25
| * | Update karma.conf.js to A: actually run the tests, and B: generate JUnit XML.Kegan Dougal2014-11-041-3/+13
| * | SYWEB-136: Send m.images according to the spec.Kegan Dougal2014-11-042-4/+6
| * | SYWEB-133: JSON dialog now appears on dblclick to allow users to highlight text.Kegan Dougal2014-11-041-1/+1
* | | Fix joining over federationErik Johnston2014-11-075-56/+55
* | | Implement method to get auth_chain from a given event_idErik Johnston2014-11-071-0/+35
* | | Start implementing auth chainsErik Johnston2014-11-078-6/+115
* | | Neaten things up a bitErik Johnston2014-11-071-5/+2
* | | Don't query the DB for user power levelsErik Johnston2014-11-071-10/+16
* | | Amalgamate all power levels.Erik Johnston2014-11-068-395/+102
* | | Update to use replaces_state rather than prev_stateErik Johnston2014-11-061-2/+4
* | | Don't send prev_state to clients anymoreErik Johnston2014-11-061-1/+1
* | | Implement new replace_state and changed prev_stateErik Johnston2014-11-0613-128/+220
* | | Fix a couple more storage testsErik Johnston2014-11-052-16/+32
* | | Remove stale testsErik Johnston2014-11-051-2/+2
* | | Fix redaction storage testErik Johnston2014-11-051-0/+12
* | | Get correct prev_eventsErik Johnston2014-11-052-15/+26
* | | Fix typing testsErik Johnston2014-11-051-0/+1
* | | Fix room testsErik Johnston2014-11-051-6/+0
* | | Fix profile testsErik Johnston2014-11-051-1/+5
* | | Fix presencelike testErik Johnston2014-11-051-1/+5
* | | Don't execute empty tests. Formatting.Erik Johnston2014-11-051-17/+28
* | | Fix presence testErik Johnston2014-11-051-0/+1
* | | Fix Federation testErik Johnston2014-11-051-1/+1
* | | Fix auth checks to all use the given old_event_stateErik Johnston2014-11-054-34/+54
* | | PEP8Erik Johnston2014-11-041-4/+4
* | | Fix room handler testsErik Johnston2014-11-042-128/+19
* | | Fix federation handler tests. I've removed the invite/join dance ones as they...Erik Johnston2014-11-041-57/+27
* | | Don't bother lockingErik Johnston2014-11-041-6/+5
* | | PEP8Erik Johnston2014-11-041-1/+3
* | | Fix tests.handlers.test_directoryErik Johnston2014-11-041-2/+5
* | | event <-> pdu mappings are now trivial and will soon be scrappedErik Johnston2014-11-041-167/+0
* | | Fix up federation testsErik Johnston2014-11-041-114/+124
* | | Fix bug in replicationErik Johnston2014-11-041-1/+1
* | | On AuthError, raise a FederationErrorErik Johnston2014-11-041-1/+9
* | | Move FederationError to synapse.api.errorsErik Johnston2014-11-042-34/+34
* | | PEP8Erik Johnston2014-11-041-4/+13
* | | Add support for sending failuresErik Johnston2014-11-043-2/+63
* | | Remove unused interfaceErik Johnston2014-11-041-8/+0
* | | Remove unused importsErik Johnston2014-11-045-13/+2
* | | Fix bugs in generating event signatures and hashingErik Johnston2014-11-036-88/+50
* | | Merge branch 'event_signing' of github.com:matrix-org/synapse into federation...Erik Johnston2014-11-032-0/+117
|\ \ \
| * | | Script for checking event hashesMark Haines2014-11-031-0/+43
| * | | handle server names with embeded portsMark Haines2014-11-031-0/+4
| * | | script for checking signatures on signed jsonMark Haines2014-11-031-0/+70
| * | | Merge branch 'develop' into event_signingMark Haines2014-10-2710-20/+9277
| |\ \ \
* | | | | Add option to not bind to HTTPS port. This is useful if running behind an ssl...Erik Johnston2014-11-033-2/+8
* | | | | Rename PDU fields to match that of events.Erik Johnston2014-11-036-316/+80
* | | | | For now, don't store txn -> pdu mappings.Erik Johnston2014-11-032-5/+3
* | | | | FormattingErik Johnston2014-11-031-1/+4
* | | | | Sign events we create.Erik Johnston2014-11-031-0/+9
* | | | | Add 'origin' key to eventsErik Johnston2014-11-031-0/+4
* | | | | Don't assume event has hashes key alreadyErik Johnston2014-11-031-0/+2
* | | | | Remove dead code.Erik Johnston2014-11-031-84/+0
* | | | | Merge branch 'develop' of github.com:matrix-org/synapse into federation_autho...Erik Johnston2014-11-0310-101/+172
|\ \ \ \ \ | | |_|/ / | |/| | |
| * | | | Use python logger, not the twisted loggerErik Johnston2014-11-031-2/+1
| * | | | Merge branch 'release-v0.4.2' of github.com:matrix-org/synapse into developErik Johnston2014-10-313-2/+18
| |\ \ \ \ | | |_|_|/ | |/| | |
| | * | | Bump version numbers and change logErik Johnston2014-10-313-2/+18
| |/ / /
| * | | SYWEB-102: Fix desktop notification msg when a user with no display name join...Kegan Dougal2014-10-311-3/+6
| * | | Factor out notification logic.Kegan Dougal2014-10-313-27/+39
| * | | Add notification-service.js to handle binging/notifications. Shift logic to t...Kegan Dougal2014-10-315-70/+108
| * | | SYWEB-45: Display the user_id of a user when hovering over their avatar next ...Kegan Dougal2014-10-311-1/+1
| * | | SYWEB-63: Fix desktop notification message when notifying for an image.Kegan Dougal2014-10-311-0/+3
* | | | Sign evnetsErik Johnston2014-10-312-0/+26
* | | | Remove unused signature storage methodsErik Johnston2014-10-311-138/+1
* | | | Remove unused sql file.Erik Johnston2014-10-311-31/+0
* | | | Make prev_event signing work again.Erik Johnston2014-10-313-8/+18
* | | | Remove more references to dead PDU tablesErik Johnston2014-10-314-94/+8
* | | | Remove PDU tables.Erik Johnston2014-10-316-1230/+2
* | | | Remove unused functions.Erik Johnston2014-10-311-90/+0
* | | | Actually don't store any PDUsErik Johnston2014-10-313-14/+42
* | | | old_state_events should be a dict not listErik Johnston2014-10-311-2/+4
* | | | Don't store any PDUsErik Johnston2014-10-312-32/+33
* | | | Move the impl of backfill to use events.Erik Johnston2014-10-313-5/+114
* | | | Merge branch 'develop' of github.com:matrix-org/synapse into federation_autho...Erik Johnston2014-10-318-23/+356
|\| | |
| * | | SYWEB-12: You'll be needing this.Kegan Dougal2014-10-301-0/+216
| * | | SYWEB-12: Minor layout tweaks.Kegan Dougal2014-10-301-1/+1
| * | | SYWEB-12: UX tweaks.Kegan Dougal2014-10-301-1/+2
| * | | SYWEB-12: Add ability to add new state events.Kegan Dougal2014-10-302-2/+21
| * | | SYWEB-12: Allow edited state events to be submitted.Kegan Dougal2014-10-302-3/+10
| * | | SYWEB-12: More formatting and tweaking of state event JSON.Kegan Dougal2014-10-305-16/+53
| * | | SYWEB-12: More formatting.Kegan Dougal2014-10-304-7/+32
| * | | SYWEB-12: Format room info dialog better.Kegan Dougal2014-10-302-17/+38
| * | | SYWEB-12: Store unknown state events so they are displayed in the Room Info d...Kegan Dougal2014-10-301-0/+7
* | | | Fix bug in redaction auth.Erik Johnston2014-10-311-2/+2
* | | | Convert event ids to be of the form :example.comErik Johnston2014-10-306-28/+54
* | | | Make federation return the old current state, so that we can use it to do authErik Johnston2014-10-302-10/+32
* | | | Merge branch 'develop' of github.com:matrix-org/synapse into federation_autho...Erik Johnston2014-10-3055-205/+9733
|\| | |
| * | | SYWEB-12: Add a 'Room Info' button which displays all state content.Kegan Dougal2014-10-303-0/+61
| * | | Fix pep8 warningsMark Haines2014-10-3035-135/+179
| * | | SYWEB-112: Use the right user ID when determining invites for display on the ...Kegan Dougal2014-10-301-2/+9
| * | | SYWEB-48: Better regex for binging on usernames.Kegan Dougal2014-10-291-1/+28
| * | | Use floating-point rather than integer division to handle timeouts so that no...Paul "LeoNerd" Evans2014-10-291-1/+1
| * | | SYWEB-127: Open event info modal dialog when the bubble is clicked.Kegan Dougal2014-10-291-12/+11
| * | | Fix an off-by-one bug in presence event stream pagination; this might be resp...Paul "LeoNerd" Evans2014-10-292-1/+17
| * | | Construct a source-specific 'SourcePaginationConfig' to pass into get_paginat...Paul "LeoNerd" Evans2014-10-296-40/+43
| * | | Remove redundant (and incorrect) presence pagination fetching codePaul "LeoNerd" Evans2014-10-291-3/+0
| * | | oops - fix css on desktopMatthew Hodgson2014-10-291-1/+0
| * | | SYWEB-98: Handle incoming m.room.redaction events.Kegan Dougal2014-10-291-0/+39
| * | | SYWEB-98: Add redactEvent matrix API call.Kegan Dougal2014-10-293-2/+30
| * | | SYWEB-98: Add a 'Redact' button to the event info modal dialog.Kegan Dougal2014-10-292-3/+31
| * | | Implement SYWEB-58: Clicking a notification now takes you to that room.Kegan Dougal2014-10-292-1/+7
| * | | Fix SYWEB-128 : Auto-scroll broken if not exactly at bottom of list.Kegan Dougal2014-10-291-1/+3
| * | | fix mobile CSS layoutMatthew Hodgson2014-10-282-4/+9
| * | | Fix SYWEB-110 : Prevent room ID leaking by looking for an m.room.nameKegan Dougal2014-10-271-1/+11
| | |/ | |/|
| * | Remove duplicate join_event from create_roomMark Haines2014-10-271-5/+0
| * | Fix SYWEB-114 : Error message when trying to invite a user already in the room.Kegan Dougal2014-10-271-1/+1
| * | Don't clobber existing cssKegan Dougal2014-10-271-209/+0
| * | SYWEB-121: Have some bootstrap files.Kegan Dougal2014-10-272-0/+9457
| * | Implement SYWEB-121 : Display JSON when clicking messages.Kegan Dougal2014-10-274-12/+24
| * | HandleRoomMember: handle correctly prev_contentgiomfo2014-10-271-1/+1
| * | Fix SYWEB-109 : No error if HS rejects the username in registration.Kegan Dougal2014-10-271-0/+3
| * | Remove test_pyflakes.Kegan Dougal2014-10-271-1/+0
* | | Fix SQL so that accepts we may want to persist events twice.Erik Johnston2014-10-302-25/+47
* | | Add a run_on_reactor functionErik Johnston2014-10-291-0/+7
* | | Start filling out and using new events tablesErik Johnston2014-10-298-93/+159
* | | Don't reference PDU when persisting eventErik Johnston2014-10-282-4/+5
* | | Begin implementing all the PDU storage stuff in Events landErik Johnston2014-10-289-42/+485
* | | Add transaction level logging and timing information. Add a _simple_delete me...Erik Johnston2014-10-289-21/+91
* | | Clean up LoggingTransactionErik Johnston2014-10-281-10/+4
* | | Add timer to LoggingTransactionErik Johnston2014-10-281-3/+10
* | | Remove duplicate importErik Johnston2014-10-271-1/+0
* | | Merge branch 'event_signing' of github.com:matrix-org/synapse into federation...Erik Johnston2014-10-2724-77/+580
|\ \ \ | | |/ | |/|
| * | fix pyflakes warningsMark Haines2014-10-273-6/+6
| * | Merge branch 'develop' into event_signingMark Haines2014-10-2742-5581/+458
| |\|
| | * Test pyflakes jenikns integrationMark Haines2014-10-271-0/+1
| | * Fix pyflakes warningsMark Haines2014-10-274-4/+2
| * | Add script to hash exisitng historyMark Haines2014-10-171-0/+69
| * | Remove signatures from pdu when computing hashes to use for prev pdus, make s...Mark Haines2014-10-172-2/+6
| * | Merge branch 'develop' into event_signingMark Haines2014-10-1721-849/+101
| |\ \
| * | | Rename 'meta' to 'unsigned'Mark Haines2014-10-174-17/+18
| * | | move 'age' into 'meta' subdict so that it is clearer that it is not part of t...Mark Haines2014-10-172-7/+19
| * | | Hash the same content covered by the signature when referencing previous PDUs...Mark Haines2014-10-176-16/+84
| * | | Include hashes of previous pdus when referencing themMark Haines2014-10-1611-31/+95
| * | | Sign outgoing PDUs.Mark Haines2014-10-169-24/+62
| * | | persist hashes and origin signatures for PDUsMark Haines2014-10-157-15/+135
| * | | Merge branch 'develop' into event_signingMark Haines2014-10-155-3/+10
| |\ \ \
| * | | | Storage for pdu signaturesMark Haines2014-10-142-0/+126
* | | | | Merge branch 'develop' of github.com:matrix-org/synapse into federation_autho...Erik Johnston2014-10-2757-6425/+563
|\ \ \ \ \ | | |_|_|/ | |/| | |
| * | | | Add log message if we can't enable ECC. Require pyopenssl>=0.14 since 0.13 do...Mark Haines2014-10-242-1/+5
| * | | | Wrap preparing the database in a transaction. Otherwise it will take many sec...Mark Haines2014-10-241-3/+4
| * | | | switch from the deprecated msg.content.prev to msg.prev_content.membership, a...Matthew Hodgson2014-10-243-9/+9
| * | | | Merge branch 'master' into developMark Haines2014-10-241-1/+1
| |\ \ \ \
| | * | | | Coturn's timestamps are in seconds, not millisecondsDavid Baker2014-10-211-1/+1
| * | | | | Added pylint config file: ignore missing-docstring messages.Kegan Dougal2014-10-241-0/+280
| * | | | | Added a param (--no-rate-limit) to demo/start.sh to disable the HS rate limitmanuroe2014-10-202-1/+11
| * | | | | Merge branch 'master' of github.com:matrix-org/synapse into developErik Johnston2014-10-208-12/+74
| |\| | | |
| | * | | | use a tagged version of syutil rather than masterMark Haines2014-10-201-1/+1
| | * | | | Use https link to download syutil as not everyone has ssh access to github.Mark Haines2014-10-201-2/+3
| | * | | | Add get_json method to 3pid http client. Better logging for errors in 3pid re...Mark Haines2014-10-202-2/+41
| | * | | | Fix auto generating signing_keysMark Haines2014-10-181-1/+1
| | * | | | improve changelog slightlyMatthew Hodgson2014-10-181-5/+7
| | * | | | fix timestamps some moreMatthew Hodgson2014-10-173-5/+5
| | |\ \ \ \ | | |/ / / / | |/| | | |
| * | | | | more timestamp fixesMatthew Hodgson2014-10-173-5/+5
| | * | | | Bump the other version v0.4.1Erik Johnston2014-10-181-1/+1
| | * | | | Bump versionErik Johnston2014-10-181-1/+1
| | * | | | Bunp to change log.Erik Johnston2014-10-181-0/+5
| | * | | | Merge pull request #9 from matrix-org/developErik Johnston2014-10-182-4/+3
| | |\ \ \ \ | | |/ / / / | |/| | | |
| * | | | | fix webclient to know about right timestampsMatthew Hodgson2014-10-172-4/+3
| * | | | | Merge branch 'release-v0.4.0' of github.com:matrix-org/synapse into developErik Johnston2014-10-1725-5551/+73
| |\ \ \ \ \ | | |_|_|_|/ | |/| | | |
| | | * | | I can't type apparentlyErik Johnston2014-10-172-2/+2
| | | * | | Update changelong and upgradeErik Johnston2014-10-172-0/+15
| | | * | | Merge branch 'release-v0.4.0' of github.com:matrix-org/synapseErik Johnston2014-10-1788-6704/+1645
| | | |\ \ \ | | | |/ / / | | |/| | |
| | * | | | Check that we have auth headers and fail nicelyErik Johnston2014-10-171-0/+5
| | * | | | More log lines.Erik Johnston2014-10-171-7/+15
| | * | | | add log line for checking verifying signaturesMark Haines2014-10-171-0/+1
| | * | | | Bump syutil dependencyErik Johnston2014-10-171-2/+2
| | * | | | Bump version and changelogErik Johnston2014-10-174-10/+12
| | * | | | Bump database version number.Erik Johnston2014-10-172-1/+32
| | * | | | Merge branch 'docs-restructuring' of github.com:matrix-org/synapse into developErik Johnston2014-10-1716-5531/+6
| |/| | | |
| | * | | | move swagger JSON from synapse project to matrix-doc projectMatthew Hodgson2014-10-098-1897/+0
| | * | | | move matrix-generic content to new matrix-doc git projectMatthew Hodgson2014-10-099-3721/+6
| | * | | | Add spec-additions.rst with info on recaptcha and common event fields.Kegan Dougal2014-10-091-0/+89
| | * | | | Restructure specification sections.Kegan Dougal2014-10-091-837/+835
| * | | | | keep 'origin_server_ts' as 'ts' in the database to avoid needlessly updating ...Mark Haines2014-10-178-13/+18
| * | | | | SPEC-7: Rename 'ts' to 'origin_server_ts'Mark Haines2014-10-1716-42/+42
| * | | | | SPEC-7: Don't stamp event contents with 'hsob_ts'Mark Haines2014-10-171-13/+3