Archived
1
0
Commit Graph

280 Commits

Author SHA1 Message Date
Asher
c7baf5d04a
Merge pull request #2482 from cdr/asar
Symlink node_modules.asar to node_modules in lib/vscode
2020-12-18 10:54:36 -08:00
Anmol Sethi
ae902b9dd1
proxy_agent: Use proxy-from-env for robustness
Now we support pretty much every variable under the sun along with
$NO_PROXY all correctly and with minimal code on our end.
2020-12-18 11:10:07 -05:00
Asher
121a520447
Symlink node_modules.asar to node_modules in lib/vscode
Closes #2197.
2020-12-17 15:48:19 -06:00
Joe Previte
fcc16e5397
refactor: move vscode.sh to postinstall 2020-12-16 11:47:20 -07:00
Joe Previte
25e6f8414a
feat: remove vscode scripts used with submodule 2020-12-15 15:59:12 -07:00
Joe Previte
faeed81d43
feat: add vscode:clean script 2020-12-15 14:54:07 -07:00
Anmol Sethi
691d44d4a8
Use proxy-agent to support $HTTP_PROXY
Closes #124

This works by monkey patching the http and https modules's default agent
at runtime to the one given by the proxy-agent package.
2020-12-04 02:34:43 -05:00
Anmol Sethi
11f53784c5
v3.7.4 2020-12-01 18:50:31 -05:00
Anmol Sethi
ebe4d7ef29
Revamp icons (#2383)
I took our website's SVG favicon and plopped it on a round
white rectangle in Affinity Designer. The I exported it as an SVG and
wrote a script that uses imagemagick to convert to the various sizes and
formats we need.

Closes #2307
2020-11-30 19:11:26 -05:00
Anmol Sethi
93fb76e4a7
v3.7.3 2020-11-24 13:12:10 -05:00
Anmol Sethi
a0db6723c1
v3.7.2 2020-11-19 17:28:22 -05:00
Anmol Sethi
2bf91ff6a6
v3.7.1 2020-11-16 17:18:12 -05:00
Anmol Sethi
9917da068a
v3.7.0 2020-11-16 11:11:50 -05:00
Anmol Sethi
a37572d92d
ci: Disable no-unused-vars for function args
See previous commit for failure introduced.
2020-11-13 18:44:28 -05:00
Asher
e1702a1d21
Merge branch master into code-asher/ch1385 2020-11-12 11:52:02 -06:00
Anmol Sethi
197a09f0c1
plugin: Test endpoints via supertest
Unfortunately we can't use node-mocks-http to test a express.Router
that has async routes. See https://github.com/howardabrams/node-mocks-http/issues/225

router will just return undefined if the executing handler is async and
so the test will have no way to wait for it to complete. Thus, we have
to use supertest which starts an actual HTTP server in the background
and uses a HTTP client to send requests.
2020-11-06 10:13:01 -05:00
Asher
9e09c1f92b
Upgrade to Express 5
Now async routes are handled!
2020-11-05 15:08:08 -06:00
Asher
9bde62fbd6
v3.6.2 2020-11-02 17:17:25 -06:00
Asher
112eda4605
Convert routes to Express 2020-10-26 17:56:13 -05:00
Asher
62735da694
v3.6.1 2020-10-23 15:21:50 -05:00
Asher
6000e389bc
Add Express as a dep and regenerate lockfile
The Express types were throwing errors but regenerating the lockfile
resolved them.
2020-10-20 16:18:26 -05:00
Anmol Sethi
4b3c089630
Remove dead code 2020-10-07 15:58:30 -04:00
Anmol Sethi
dd996d8f60
v3.6.0 2020-10-07 15:58:30 -04:00
Anmol Sethi
55a7e8b56f
Implement automatic cloud proxying 2020-10-07 15:58:30 -04:00
Anmol Sethi
579bb94a6c
Add coder cloud expose command 2020-10-07 15:58:30 -04:00
Asher
ce8577b1c3
Remove open-in flag (#2013) 2020-08-27 15:04:37 -05:00
Anmol Sethi
3912e9e333
Downgrade node types to v12 2020-08-27 11:04:43 -04:00
Anmol Sethi
ebbb1187da
Update remaining dependencies 2020-08-26 14:27:30 -04:00
Anmol Sethi
c80d093dc4
Update dependencies in package.json
See #1898 and #1905
2020-08-26 13:59:41 -04:00
Anmol Sethi
bf09c294cc
Revert "Upgrade to latest typescript"
This reverts commit 6539dd4dbe.

Breaks linting and wasn't required.
2020-08-26 13:32:50 -04:00
Anmol Sethi
6539dd4dbe
Upgrade to latest typescript
Otherwise the build keeps failing for me as tsc won't compile anymore.

Not sure why things work on CI/for asher but I don't think this will
cause any additional issues.
2020-08-26 07:50:51 -04:00
Asher
e237589f2e
Update VS Code to 1.48.0 (#1982) 2020-08-25 13:06:41 -05:00
Asher
2fa5037859
Log output to disk 2020-07-29 18:48:07 -05:00
Asher
4b6c0a6fc3
Update logger 2020-07-29 18:48:03 -05:00
Anmol Sethi
48f7c27248
v3.4.1 2020-06-04 06:24:24 -04:00
Anmol Sethi
c00f931500
Remove zip library dependency 2020-06-03 18:24:59 -04:00
Anmol Sethi
69ad52907e
v3.4.0 2020-05-27 19:21:15 -04:00
Anmol Sethi
f71d8875d0
Rename binary release to standalone 2020-05-27 16:39:17 -04:00
Anmol Sethi
fa45fd0e31
Rename static releases to binary releases
More clear as discussed in PR.
2020-05-27 15:57:18 -04:00
Anmol Sethi
5f94d5a687
Release v3.3.1
This release fixes bugs introduced with the release of v3.3.0

- We've reverted to VS Code 1.45.1 due to bugs in 1.46 #1667
- Accessing code-server from a web browser on Windows has been fixed #1642
- Search in project has been fixed #1665
- The glibc requirement on static releases has been lowered to v2.19 #1656
2020-05-18 18:11:52 -04:00
Anmol Sethi
52eeccaba1
v3.3.0 2020-05-17 18:35:36 -04:00
Anmol Sethi
aee2599904
Push docker manifest in CI for multi arch image 2020-05-16 16:59:26 -04:00
Anmol Sethi
d4b3d21dce
Require minimum node 12 2020-05-14 22:33:12 -04:00
Anmol Sethi
0bd2602774
3.3.0 2020-05-14 18:43:01 -04:00
Anmol Sethi
a0a77e379e
Add doc/guide.md 2020-05-14 05:24:23 -04:00
Anmol Sethi
f4a78587b0
Make npm-postinstall.sh more robust 2020-05-13 22:44:43 -04:00
Anmol Sethi
b3ae4d67d3
Hide bundled node_modules to prevent them from being ignored 2020-05-13 04:17:34 -04:00
Anmol Sethi
d30f3dbdf7
Update to rc.10 2020-05-13 02:37:25 -04:00
Anmol Sethi
1739b21600
Bundle VS Code node_modules to avoid yarn dependency
Many random bizarre issues otherwise.

Also includes misc improvements to docs and scripts.
2020-05-13 02:35:11 -04:00
Anmol Sethi
c0d6eb4664
Improve password handling
- Error out if auth is enabled but no password is passed in
- Indicate password location on login page
2020-05-12 19:59:55 -04:00
Anmol Sethi
00d164b67f
Add default config file and improve config/data directory detection 2020-05-12 19:59:54 -04:00
Anmol Sethi
c5179c2a06
Add support for a YAML config file 2020-05-12 19:59:53 -04:00
Anmol Sethi
169f8c67fe
Automate draft release 2020-05-11 20:59:56 -04:00
Anmol Sethi
7c7f62d3f3
Fixes for CI from @code-asher's review 2020-05-08 16:45:59 -04:00
Anmol Sethi
e9fe4c0466
Document release process 2020-05-08 01:43:31 -04:00
Anmol Sethi
6282cd7e7b
Simplify packaging and improve scripts
Much better test now as well.
2020-05-08 01:04:24 -04:00
Anmol Sethi
bc453b5f0d
Switch to a single job to build the npm package
The architecture specific jobs pull it in and then build releases.

Much faster!
2020-05-08 00:09:24 -04:00
Anmol Sethi
be032cf735
Add NPM package, debs, rpms and refactor CI/build process
Closes many issues that I'll prune after adding more docs
for users.
2020-05-06 20:25:52 -04:00
Asher
4875f6aa87
Update VS Code to fix infinite refresh
Fixes #1581.
2020-05-05 12:33:09 -05:00
Asher
6a2662eeee
Remove node-pty
This was for the ssh server we removed.
2020-05-05 12:33:08 -05:00
Asher
fd36a99a4c
Update vscode patch notes and bump version 2020-04-29 15:22:11 -05:00
Anmol Sethi
5accf3fe5f
Add basic rate limiting to login endpoint
Closes #1320
2020-04-28 14:21:08 -04:00
Anmol Sethi
181e0ea6c8
Remove ssh2 dep 2020-04-28 14:04:56 -04:00
Asher
27ba64c7e4
Improve request error handling
See #1532 for more context.

- Errored JSON requests will get back the error in JSON instead of using
  the status text. This seems better to me because it seems more correct
  to utilize the response body over hijacking the status text. The
  caller is expecting JSON anyway. Worst of all I never actually set the
  status text like I thought I did so it wasn't working to begin with.
- Allow the update error to propagate for JSON update requests. It was
  caught to show the error inline instead of an error page when using
  the update page but for JSON requests it meant there was no error and
  no error code so it looked like it succeeded.
- Make errors for failed requests to GitHub less incomprehensible.
  Previously they would just be the code which is no context at all.
2020-04-17 15:16:10 -05:00
Asher
28e91ba70c
Fix domain issues when setting the cookie
Fixes #1507.
2020-04-13 16:14:40 -05:00
Asher
8aa5675ba2
Implement the actual proxy 2020-04-02 13:40:19 -05:00
Asher
599670136d
Output commit along with the version 2020-03-30 17:43:09 -05:00
Maksim Ryzhikov
8a6faa39c9 Remove duplication in dependencies 2020-03-24 09:43:14 +03:00
Will O'Beirne
3463d56114
SSH server & endpoint 2020-03-16 15:14:53 -05:00
Asher
0b9a478289
Add connection type to websocket query parameters
This allows external services to distinguish between them.
2020-03-05 15:49:37 -06:00
Asher
b5c425b3a6
Major version -> 3.0.0 2020-02-26 15:09:56 -06:00
Asher
c870398c86
Switch to loose files
For #1306.
2020-02-25 18:23:35 -06:00
Anmol Sethi
5681c87e33
Fix bugs in CI 2020-02-18 19:06:35 -05:00
Anmol Sethi
1a54f6b7ef
Merge remote-tracking branch 'origin/restructure' into anmol-restructure 2020-02-18 12:52:29 -05:00
Anmol Sethi
61d1af0413
Add macOS release step 2020-02-14 21:16:23 -05:00
Anmol Sethi
4aa15401c3
Format and lint 2020-02-14 20:00:19 -05:00
Anmol Sethi
80b1b1b672
Shake CI and docs up 2020-02-14 19:46:17 -05:00
Asher
db54f78e8e
Implement automatic updates 2020-02-14 15:58:39 -06:00
Asher
b8fa7da972
Simplify frontend
Just a login form and a list of applications. No modals or anything like
that.
2020-02-13 20:10:14 -06:00
Asher
8cc11d1688
Improve routing 2020-02-05 13:07:07 -06:00
Asher
b30aefcfb1
Add linting steps and improve testing steps 2020-02-04 15:42:55 -06:00
Asher
b29346ecdf
Implement new structure 2020-02-04 14:31:44 -06:00
Asher
62f050fda7
Add a simple test 2020-01-15 13:22:45 -06:00
Asher
3f2240ab65
Update logger 2020-01-08 16:30:34 -06:00
Asher
6a1dcab7a6
Update nbin
Should finally be able to build with Node v12 now.
2020-01-07 18:27:28 -06:00
Asher
af71203955
Fix relaunching during an update 2019-11-01 10:51:23 -05:00
Asher
4cd2f2cd52
Simplify build and development steps 2019-10-18 19:10:55 -05:00
Asher
88cef85f62
Add dependencies required for running build script
They were getting pulled from VS Code which doesn't work if you are
running a build in a clean repo.
2019-10-18 18:40:10 -05:00
Asher
bdd11f741b
Update to 1.39.2
Also too the opportunity to rewrite the build script since there was a
change in the build steps (mainly how the product JSON is inserted) and
to get the build changes out of the patch. It also no longer relies on
external caching (we'll want to do this within CI instead).
2019-10-18 18:20:02 -05:00
Asher
1c50b5285e
Resolve bundling issues with node-browser 2019-10-10 15:36:56 -05:00
Asher
4290cffe3b
Update packages for in-browser extensions 2019-10-07 11:59:09 -05:00
Asher
548d095611
Add support for running extensions in the browser 2019-10-04 18:14:19 -05:00
Asher
ef069d9b0e
Update nbin
The latest version contains a fix for passing null options when reading
a file. Fixes #544.
2019-09-16 18:04:41 -05:00
Asher
f8635a124f
Add tar endpoint
This will be used to load extensions into the browser using requirefs.
2019-09-12 12:17:16 -05:00
Asher
976a326f47
Update nbin 2019-08-30 17:45:11 -05:00
Asher
45ad7f020a
Update logger 2019-08-13 12:03:08 -05:00
Asher
2807ce495e
Add tar-stream dependency
It's no longer included by the remote dependencies.
2019-08-09 19:23:44 -05:00
Asher
712274d912
Groundwork for language support
- Implement the localization service.
- Use the proper build process which generates the require JSON files.
- Implement getting the locale and language configuration.
2019-08-02 19:29:00 -05:00
Asher
12af311ce7
Use our logger instead of raw console.log 2019-07-31 17:22:16 -05:00
Asher
97167e75ff
Add authentication 2019-07-18 18:09:11 -05:00
Asher
2b2aa9a211
Add https server 2019-07-18 18:09:09 -05:00
Asher
54ffd1d351
Make extension sidebar work 2019-07-18 18:08:36 -05:00
Asher
5677ff2edf
Add build scripts 2019-07-18 18:08:27 -05:00
Asher
770e0db7b8
Add cli arguments 2019-07-18 18:08:25 -05:00
Asher
57a8186e88
Add development steps 2019-07-18 18:08:20 -05:00
Anmol Sethi
bb5836ec61
Rename codercom/code-server to cdr/code-server 2019-05-02 11:25:50 -04:00
Luca Casonato
22b485acd9 Added serviceworker and web-manifest (#154)
* Added serviceworker and manifest.json

* added deps in package.json

* fixed image link

* actually fixed images i think

* added assets to individual module folders

* added caching

* Serviceworker now properly loads

* Changed single to double quotes

* Update lock

* moved the service worker back into prod only

* removed sw from general

* changed background color of splash screen

* added logo to server

* centralized logo into single assets folder
2019-04-16 15:44:57 -05:00
Asher
aabb2ecda7
Update node to 10.15.1 (#472)
* Update Node to 10.15.1

* Remove string replace that was used for oclif

* Update nbin

* Package node-pty and spdlog with nbin

* Label stderr/stdout from shared process

* Remove fork override

* Prevent "already disposed" errors when trying to kill disposed proxies

* Include spdlog dependencies

* Shim /node_modules

* Add node_modules to Docker ignore

It keeps using my already-built .node files which results in a
mismatching GLIBC version error.

* Update nbin
2019-04-15 19:48:12 -05:00
Kyle Carberry
dcf409aecb Improve CI caching (#416)
* Adjust linux distro to ubuntu 14.04

* Cache lib directory for speedy builds

* Fix path linking for default extensions

* Update reset

* Reset to head

* Improve caching

* Still run yarn in CI

* Update yarn before install

* Increase cache timeout

* Install vscode from vstar

* Undo data-dir changes to CLI, add back clean, remove unused CI func

* Remove additional flags added

* Remove unused dependency

* Reset vscode install dir so patching always works
2019-04-03 14:24:00 -05:00
Anmol Sethi
97f5b07003 Fix icons on safari when using cookie authentication (#398)
Cookie's are not sent with url's in -webkit-mask so we
embed the svg's directly in the css.
2019-04-01 15:20:39 -05:00
Asher
dc2253e718 Refactor evaluations (#285)
* Replace evaluations with proxies and messages

* Return proxies synchronously

Otherwise events can be lost.

* Ensure events cannot be missed

* Refactor remaining fills

* Use more up-to-date version of util

For callbackify.

* Wait for dispose to come back before removing

This prevents issues with the "done" event not always being the last
event fired. For example a socket might close and then end, but only
if the caller called end.

* Remove old node-pty tests

* Fix emitting events twice on duplex streams

* Preserve environment when spawning processes

* Throw a better error if the proxy doesn't exist

* Remove rimraf dependency from ide

* Update net.Server.listening

* Use exit event instead of killed

Doesn't look like killed is even a thing.

* Add response timeout to server

* Fix trash

* Require node-pty & spdlog after they get unpackaged

This fixes an error when running in the binary.

* Fix errors in down emitter preventing reconnecting

* Fix disposing proxies when nothing listens to "error" event

* Refactor event tests to use jest.fn()

* Reject proxy call when disconnected

Otherwise it'll wait for the timeout which is a waste of time since we
already know the connection is dead.

* Use nbin for binary packaging

* Remove additional module requires

* Attempt to remove require for local bootstrap-fork

* Externalize fsevents
2019-03-26 13:01:25 -05:00
Asher
e1dc6967ed
Fix trash 2019-03-12 14:04:17 -05:00
Asher
8d37442e0c
Move cross-env dep to the root
Multiple packages use it.
2019-02-28 18:43:47 -06:00
Kyle Carberry
e8174095ca
Add windows support (#41)
* Add windows support

* Improve multi-platform support

* Install with network-concurrency 1

* Use file-glob to upload windows binary

* Don't install packages in parallel if on windows

* Rename vscode-remote to code-server

* Add output at intervals so CI doesn't kill build

* Update all tasks to provide timed output

* Don't perform tasks sync otherwise we can't log
2019-02-28 14:04:19 -06:00
Asher
eaea947318
Fix spdlog and node-pty in binary 2019-02-25 15:18:44 -06:00
Asher
8b8bef015e
Add evaluation helpers (#33)
* Add evaluation helpers

* Make some helpers only available server-side

They don't make any sense on the client side.

* Fork the right thing
2019-02-22 15:56:29 -06:00
Kyle Carberry
85d2225e0c Featureful (#31)
* Fix loading within the CLI

* Remove app

* Remove promise handle

* Add initial travis file

* Add libxkbfile dependency

* Add libxkbfile-dev

* Add build script

* Fix malformed bash statement

* Remove yarn from script

* Improve build script

* Extract upx before usage

* Only run upx if on linux

* Ensure resource directory exists

* Pack runnable binary

* Export binary with platform

* Improve build process

* Install upx before running install script

* Update typescript version before running nexe

* Add os.release() function for multi-platform support

* Update travis.yml to improve deployment

* Add on CI

* Update to v1.31.0

* Add libsecret

* Update build target

* Skip cleanup

* Fix built-in extensions

* Add basics for apps

* Create custom DNS server

* Fix forking within CLI. Fixes TS language features

* Fix filename resolve

* Fix default extensions path

* Add custom dialog

* Store workspace path

* Remove outfiles

* Cleanup

* Always authed outside of CLI

* Use location.host for client

* Remove useless app interface

* Remove debug file for building wordlist

* Use chromes tcp host

* Update patch

* Build browser app before packaging

* Replace all css containing file:// URLs, fix webviews

* Fix save

* Fix mkdir
2019-02-21 11:55:42 -06:00
Asher
4a80bcb42c
Make everything use active evals (#30)
* Add trace log level

* Use active eval to implement spdlog

* Split server/client active eval interfaces

Since all properties are *not* valid on both sides

* +200% fire resistance

* Implement exec using active evaluations

* Fully implement child process streams

* Watch impl, move child_process back to explicitly adding events

Automatically forwarding all events might be the right move, but wanna
think/discuss it a bit more because it didn't come out very cleanly.

* Would you like some args with that callback?

* Implement the rest of child_process using active evals

* Rampant memory leaks

Emit "kill" to active evaluations when client disconnects in order to
kill processes. Most likely won't be the final solution.

* Resolve some minor issues with output panel

* Implement node-pty with active evals

* Provide clearTimeout to vm sandbox

* Implement socket with active evals

* Extract some callback logic

Also remove some eval interfaces, need to re-think those.

* Implement net.Server and remainder of net.Socket using active evals

* Implement dispose for active evaluations

* Use trace for express requests

* Handle sending buffers through evaluation events

* Make event logging a bit more clear

* Fix some errors due to us not actually instantiating until connect/listen

* is this a commit message?

* We can just create the evaluator in the ctor

Not sure what I was thinking.

* memory leak for you, memory leak for everyone

* it's a ternary now

* Don't dispose automatically on close or error

The code may or may not be disposable at that point.

* Handle parsing buffers on the client side as well

* Remove unused protobuf

* Remove TypedValue

* Remove unused forkProvider and test

* Improve dispose pattern for active evals

* Socket calls close after error; no need to bind both

* Improve comment

* Comment is no longer wishy washy due to explicit boolean

* Simplify check for sendHandle and options

* Replace _require with __non_webpack_require__

Webpack will then replace this with `require` which we then provide to
the vm sandbox.

* Provide path.parse

* Prevent original-fs from loading

* Start with a pid of -1

vscode immediately checks the PID to see if the debug process launch
correctly, but of course we don't get the pid synchronously.

* Pass arguments to bootstrap-fork

* Fully implement streams

Was causing errors because internally the stream would set this.writing
to true and it would never become false, so subsequent messages would
never send.

* Fix serializing errors and streams emitting errors multiple times

* Was emitting close to data

* Fix missing path for spawned processes

* Move evaluation onDispose call

Now it's accurate and runs when the active evaluation has actually
disposed.

* Fix promisifying fs.exists

* Fix some active eval callback issues

* Patch existsSync in debug adapter
2019-02-19 10:17:03 -06:00
Asher
81f48b8b06
Add trash module 2019-02-07 11:05:17 -06:00
Asher
70ad911641
vscode-online -> vscode-remote 2019-02-05 15:26:57 -06:00
Asher
7021826e9d
MIT license 2019-02-05 14:56:02 -06:00
Asher
4e6d6f0725
Add ignore-loader dependency and ignore more things 2019-02-05 11:15:51 -06:00
Asher
72bf4547d4
Getting the client to run (#12)
* Clean up workbench and integrate initialization data

* Uncomment Electron fill

* Run server & client together

* Clean up Electron fill & patch

* Bind fs methods

This makes them usable with the promise form:
`promisify(access)(...)`.

* Add space between tag and title to browser logger

* Add typescript dep to server and default __dirname for path

* Serve web files from server

* Adjust some dev options

* Rework workbench a bit to use a class and catch unexpected errors

* No mkdirs for now, fix util fill, use bash with exec

* More fills, make general client abstract

* More fills

* Fix cp.exec

* Fix require calls in fs fill being aliased

* Create data and storage dir

* Implement fs.watch

Using exec for now.

* Implement storage database fill

* Fix os export and homedir

* Add comment to use navigator.sendBeacon

* Fix fs callbacks (some args are optional)

* Make sure data directory exists when passing it back

* Update patch

* Target es5

* More fills

* Add APIs required for bootstrap-fork to function (#15)

* Add bootstrap-fork execution

* Add createConnection

* Bundle bootstrap-fork into cli

* Remove .node directory created from spdlog

* Fix npm start

* Remove unnecessary comment

* Add webpack-hot-middleware if CLI env is not set

* Add restarting to shared process

* Fix starting with yarn
2019-02-05 11:15:50 -06:00
Kyle Carberry
05899b5edf
Create initial server layout (#11)
* Create initial server layout

* Adjust command name to entry

* Add @oclif/config as dependency

* Implement build process for outputting single binary

* Add init message

* Remove unused import, add tsconfig.json to .gitignore

* Accidently pushed wacky change to output host FS files

* Add options to createApp
2019-02-05 11:15:49 -06:00
Kyle Carberry
a328204d80
Implement fs module (#3)
* Implements the fs module

* Add stats object

* Add not implemented to createWriteStream

* Update mkdtemp to use tmp dir

* Unexport Stats

* Add client web socket for commands and restructure
2019-02-05 11:15:47 -06:00
Asher
d44a0a3e59
FuseBox didn't work out 2019-02-05 11:15:46 -06:00
Asher
32294a5b1b
Fix @coder imports 2019-02-05 11:15:43 -06:00
Asher
7cfeef36a8
Experimenting with FuseBox 2019-02-05 11:15:43 -06:00
Asher
3ec40f49bf
Wait this one too 2019-02-05 11:15:43 -06:00
Asher
9cd81f73fa
not finished 2019-02-05 11:15:42 -06:00