Changeset - 5154f5a23e85
[Not reviewed]
default
2 9 2
drewp@bigasterisk.com - 3 years ago 2022-05-10 01:45:04
drewp@bigasterisk.com
reworking initial setup; get bin/asco running
13 files changed with 187 insertions and 120 deletions:
0 comments (0 inline, 0 general)
.flake8
Show inline comments
 
new file 100644
 
[flake8]
 
max-line-length=160
 
ignore=W503
.style.yapf
Show inline comments
 
new file 100644
 
# overwritten by /home/drewp/bin/setup_home_venv
 
[style]
 
based_on_style = google
 
column_limit = 160
bin/ascoltami2
Show inline comments
 
@@ -20,49 +20,48 @@ gatherProcessStats()
 

	
 
class App(object):
 

	
 
    def __init__(self, graph, show):
 
        self.graph = graph
 
        self.player = Player(onEOS=self.onEOS)
 
        self.show = show
 
        self.playlist = Playlist.fromShow(graph, show)
 

	
 
    def onEOS(self, song):
 
        self.player.pause()
 
        self.player.seek(0)
 

	
 
        thisSongUri = songUri(graph, URIRef(song))
 

	
 
        try:
 
            nextSong = self.playlist.nextSong(thisSongUri)
 
        except NoSuchSong:  # we're at the end of the playlist
 
            return
 

	
 
        self.player.setSong(songLocation(graph, nextSong), play=False)
 

	
 

	
 
if __name__ == "__main__":
 
    GObject.threads_init()
 
    Gst.init(None)
 

	
 
    parser = optparse.OptionParser()
 
    parser.add_option(
 
        '--show',
 
        help='show URI, like http://light9.bigasterisk.com/show/dance2008',
 
        default=showconfig.showUri())
 
    parser.add_option("-v",
 
                      "--verbose",
 
                      action="store_true",
 
                      help="logging.DEBUG")
 
    parser.add_option("--twistedlog",
 
                      action="store_true",
 
                      help="twisted logging")
 
    (options, args) = parser.parse_args()
 

	
 
    log.setLevel(logging.DEBUG if options.verbose else logging.INFO)
 

	
 
    if not options.show:
 
        raise ValueError("missing --show http://...")
 

	
 
    graph = showconfig.getGraph()
 
    app = App(graph, URIRef(options.show))
 
    if options.twistedlog:
bin/collector
Show inline comments
 
#!/bin/sh
 
pnpx vite -c light9/web/homepage/vite.config.ts &
 
pnpx vite -c light9/collector/web/vite.config.ts &
 
pdm run uvicorn light9.collector.service:app --host 0.0.0.0 --port 8202
 
wait
 

	
light9/ascoltami/player.py
Show inline comments
 
#!/usr/bin/python
 
"""
 
alternate to the mpd music player, for ascoltami
 
"""
 

	
 
import time, logging, traceback
 
from gi.repository import Gst
 
from twisted.internet import task
 
from greplin import scales
 

	
 
log = logging.getLogger()
 

	
 
stats = scales.collection(
 
    '/player',
 
    scales.RecentFpsStat('currentTimeFps'),
 
    # scales.RecentFpsStat('currentTimeFps'),
 
)
 

	
 

	
 
class Player(object):
 

	
 
    def __init__(self, autoStopOffset=4, onEOS=None):
 
        """autoStopOffset is the number of seconds before the end of
 
        song before automatically stopping (which is really pausing).
 
        onEOS is an optional function to be called when we reach the
 
        end of a stream (for example, can be used to advance the song).
 
        It is called with one argument which is the URI of the song that
 
        just finished."""
 
        self.autoStopOffset = autoStopOffset
 
        self.playbin = self.pipeline = Gst.ElementFactory.make('playbin', None)
 

	
 
        self.playStartTime = 0
 
        self.lastWatchTime = 0
 
        self.autoStopTime = 0
 
        self.lastSetSongUri = None
 
        self.onEOS = onEOS
 

	
 
        task.LoopingCall(self.watchTime).start(.050)
 

	
 
        #bus = self.pipeline.get_bus()
 
@@ -121,49 +121,49 @@ class Player(object):
 
            self.pipeline.set_state(Gst.State.PLAYING)
 
            self.playStartTime = time.time()
 

	
 
    def getSong(self):
 
        """Returns the URI of the current song."""
 
        # even the 'uri' that I just set isn't readable yet
 
        return self.playbin.get_property("uri") or self.lastSetSongUri
 

	
 
    def preload(self, songPath):
 
        """
 
        to avoid disk seek stutters, which happened sometimes (in 2007) with the
 
        non-gst version of this program, we read the whole file to get
 
        more OS caching.
 

	
 
        i don't care that it's blocking.
 
        """
 
        log.info("preloading %s", songPath)
 
        assert songPath.startswith("file://"), songPath
 
        try:
 
            open(songPath[len("file://"):], 'rb').read()
 
        except IOError as e:
 
            log.error("couldn't preload %s, %r", songPath, e)
 
            raise
 

	
 
    @stats.currentTimeFps.rate()
 
    # @stats.currentTimeFps.rate()
 
    def currentTime(self):
 
        success, cur = self.playbin.query_position(Gst.Format.TIME)
 
        if not success:
 
            return 0
 
        return cur / Gst.SECOND
 

	
 
    def duration(self):
 
        success, dur = self.playbin.query_duration(Gst.Format.TIME)
 
        if not success:
 
            return 0
 
        return dur / Gst.SECOND
 

	
 
    def states(self):
 
        """json-friendly object describing the interesting states of
 
        the player nodes"""
 
        success, state, pending = self.playbin.get_state(timeout=0)
 
        return {
 
            "current": {
 
                "name": state.value_nick
 
            },
 
            "pending": {
 
                "name": state.value_nick
 
            }
 
        }
light9/ascoltami/webapp.py
Show inline comments
 
import json, socket, subprocess, os, logging, time
 

	
 
from cyclone import template
 
from rdflib import URIRef
 
import cyclone.web, cyclone.websocket
 
from greplin.scales.cyclonehandler import StatsHandler
 
# from greplin.scales.cyclonehandler import StatsHandler
 

	
 
from cycloneerr import PrettyErrorHandler
 
from light9.namespaces import L9
 
from light9.showconfig import getSongsFromShow, songOnDisk
 
from twisted.internet import reactor
 
_songUris = {}  # locationUri : song
 
log = logging.getLogger()
 
loader = template.Loader(os.path.dirname(__file__))
 

	
 

	
 
def songLocation(graph, songUri):
 
    loc = URIRef("file://%s" % songOnDisk(songUri))
 
    _songUris[loc] = songUri
 
    return loc
 

	
 

	
 
def songUri(graph, locationUri):
 
    return _songUris[locationUri]
 

	
 

	
 
class root(PrettyErrorHandler, cyclone.web.RequestHandler):
 

	
 
    def get(self):
 
        self.set_header("Content-Type", "application/xhtml+xml")
 
@@ -184,29 +184,29 @@ class goButton(PrettyErrorHandler, cyclo
 
        """
 
        player = self.settings.app.player
 

	
 
        if player.isAutostopped():
 
            player.resume()
 
        elif player.isPlaying():
 
            pass
 
        else:
 
            player.resume()
 

	
 
        self.set_header("Content-Type", "text/plain")
 
        self.write("ok")
 

	
 

	
 
def makeWebApp(app):
 
    return cyclone.web.Application(handlers=[
 
        (r"/", root),
 
        (r"/time", timeResource),
 
        (r"/time/stream", timeStreamResource),
 
        (r"/song", songResource),
 
        (r"/songs", songs),
 
        (r"/seekPlayOrPause", seekPlayOrPause),
 
        (r"/output", output),
 
        (r"/go", goButton),
 
        (r'/stats/(.*)', StatsHandler, {
 
            'serverName': 'ascoltami'
 
        }),
 
        # (r'/stats/(.*)', StatsHandler, {
 
        #     'serverName': 'ascoltami'
 
        # }),
 
    ],
 
                                   app=app)
light9/web/stats_test.html
Show inline comments
 
deleted file
makefile
Show inline comments
 
### setup ###
 

	
 
packages:
 
	sudo aptitude install coffeescript normalize-audio audacity python3-pygame libffi-dev tix libzmq3-dev python3-dev libssl-dev python3-opencv python3-cairo npm git virtualenv python3-virtualenv nginx-full python3-tk zlib1g-dev libjpeg8-dev curl
 

	
 
# also pip3 install -U invoke (don't use ubuntu's version)
 
	sudo aptitude install -y \
 
		audacity \
 
		coffeescript \
 
		curl \
 
		git \
 
		libffi-dev \
 
		libjpeg8-dev \
 
		libssl-dev \
 
		libzmq3-dev \
 
		nginx-core \
 
		nginx-full \
 
		normalize-audio \
 
		npm \
 
		python3-cairo \
 
		python3-dev \
 
		python3-opencv \
 
		python3-pygame \
 
		python3-tk \
 
		tix \
 
		zlib1g-dev
 

	
 
gst_packages:
 
	sudo aptitude install python3-gi gir1.2-gst-plugins-base-1.0 libgirepository-1.0-1 gir1.2-gstreamer-1.0 gstreamer1.0-tools gstreamer1.0-plugins-good gstreamer1.0-pulseaudio python3-gst-1.0 gir1.2-goocanvas-2.0
 
	sudo aptitude install -y \
 
		gir1.2-goocanvas-2.0 \
 
		gir1.2-gst-plugins-base-1.0 \
 
		gir1.2-gstreamer-1.0 \
 
		gstreamer1.0-plugins-good \
 
		gstreamer1.0-pulseaudio \
 
		gstreamer1.0-tools \
 
		libgirepository-1.0-1 \
 
		libgirepository1.0-dev \
 
		python3-gi \
 
		python3-gst-1.0
 

	
 
node_modules/bower/bin/bower:
 
	pnpm install
 
pnpm:
 
	# holding pnpm back because we don't have the latest nodejs: https://pnpm.io/installation#compatibility
 
	sudo npm install -g pnpm@6.32.12
 

	
 
bin/node:
 
	ln -sf `which nodejs` bin/node
 

	
 
bower: node_modules/bower/bin/bower bin/node
 
	cd light9/web/lib; nodejs ../../../node_modules/bower/bin/bower install
 

	
 
npm_install:
 
	pnpm install
 
js: pnpm
 
	pnpm install --reporter append-only
 

	
 
node_modules/n3/n3-browser.js:
 
	(cd node_modules/n3; pnpx browserify --standalone N3 --require n3 -o n3-browser.js)
 

	
 
light9/web/lib/debug/debug-build.js:
 
	pnpx browserify light9/web/lib/debug/src/browser.js -o light9/web/lib/debug/debug-build.js --standalone debug
 
py:
 
	pdm sync
 

	
 
light9/web/lib/debug/debug-build-es6.js:
 
	pnpx browserify light9/web/lib/debug/src/browser.js -o light9/web/lib/debug/debug-build-es6.js --standalone debug
 
	echo "\nexport default window.debug;" >> light9/web/lib/debug/debug-build-es6.js
 
refresh: packages gst_packages js py
 

	
 
lit_fix:
 
	perl -pi -e "s,'lit-html,'/node_modules/lit-html,; s,lit-html',lit-html/lit-html.js'," node_modules/lit-element/lit-element.js
 

	
 

	
 
round_fix:
 
	perl -pi -e 's/module.exports = rounding/export { rounding }/' node_modules/significant-rounding/index.js
 

	
 

	
 
light9/web/lib/underscore/underscore-min-es6.js:
 
	cp light9/web/lib/underscore/underscore-min.js light9/web/lib/underscore/underscore-min-es6.js
 
	perl -pi -e 's/call\(this\);/call(window); export default window._;/' light9/web/lib/underscore/underscore-min-es6.js
 

	
 
npm: npm_install node_modules/n3/n3-browser.js light9/web/lib/debug/debug-build.js light9/web/lib/debug/debug-build-es6.js lit_fix round_fix light9/web/lib/underscore/underscore-min-es6.js
 

	
 

	
 
bin/ascoltami2: gst_packages link_to_sys_packages
 

	
 
effect_node_setup: create_virtualenv packages binexec install_python_deps
 

	
 
tkdnd_build:
 
	# get tkdnd r95 with subversion
 
	# then apply tkdnd-patch-on-r95 to that
 
	cd tkdnd/trunk
 
	./configure
 
	make
 

	
 
### build ###
 

	
 
coffee:
 
	zsh -c 'cd light9/web; ../../node_modules/coffeescript/bin/coffee --map -cw {.,live,timeline,paint,effects}/*.coffee'
 

	
 
### show ###
 

	
 
qlc_artnet_dmx_proxy:
 
	qlcplus --open cur/qlc.qxw
 

	
 
no_screen_blanking:
package.json
Show inline comments
 
@@ -6,34 +6,33 @@
 
  "description": "Mini instructions:",
 
  "main": "index.js",
 
  "directories": {
 
    "test": "test"
 
  },
 
  "dependencies": {
 
    "@types/debug": "^4.1.7",
 
    "@webcomponents/shadycss": "^1.3.1",
 
    "@webcomponents/webcomponentsjs": "^1.2.0",
 
    "bower": "^1.8.4",
 
    "browserify": "^16.2.3",
 
    "chai": "^3.5.0",
 
    "cjs-to-es6": "^1.1.1",
 
    "coffeelint": "^2.1.0",
 
    "coffeescript": "^2.3.0",
 
    "d3": "^5.1.0",
 
    "debug": "^4.3.4",
 
    "esmify": "^2.1.1",
 
    "lit": "^2.2.2",
 
    "mocha": "^2.5.3",
 
    "n3": "^1.0.0-alpha",
 
    "parse-prometheus-text-format": "^1.1.1",
 
    "pixi.js": "^4.7.3",
 
    "significant-rounding": "^2.0.0",
 
    "tinycolor2": "^1.4.1",
 
    "vite": "^2.9.1"
 
  },
 
  "devDependencies": {
 
    "mocha": "^2.5.3"
 
  },
 
  "scripts": {
 
    "test": "mocha"
 
  }
 
}
pdm.lock
Show inline comments
 
@@ -525,82 +525,97 @@ summary = "Run a subprocess in a pseudo 
 
name = "pure-eval"
 
version = "0.2.2"
 
summary = "Safely evaluate AST nodes without side effects"
 

	
 
[[package]]
 
name = "py"
 
version = "1.11.0"
 
requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
 
summary = "library with cross-python path, ini-parsing, io, code, log facilities"
 

	
 
[[package]]
 
name = "pyasn1"
 
version = "0.4.8"
 
summary = "ASN.1 types and codecs"
 

	
 
[[package]]
 
name = "pyasn1-modules"
 
version = "0.2.8"
 
summary = "A collection of ASN.1-based protocols modules."
 
dependencies = [
 
    "pyasn1<0.5.0,>=0.4.6",
 
]
 

	
 
[[package]]
 
name = "pycairo"
 
version = "1.21.0"
 
requires_python = ">=3.7"
 
summary = "Python interface for cairo"
 

	
 
[[package]]
 
name = "pycodestyle"
 
version = "2.8.0"
 
requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
 
summary = "Python style guide checker"
 

	
 
[[package]]
 
name = "pycparser"
 
version = "2.21"
 
requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
 
summary = "C parser in Python"
 

	
 
[[package]]
 
name = "pyflakes"
 
version = "2.4.0"
 
requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
 
summary = "passive checker of Python programs"
 

	
 
[[package]]
 
name = "pyftdi"
 
version = "0.54.0"
 
requires_python = ">=3.7"
 
summary = "FTDI device driver (pure Python)"
 
dependencies = [
 
    "pyserial>=3.0",
 
    "pyusb!=1.2.0,>=1.0.0",
 
]
 

	
 
[[package]]
 
name = "pygments"
 
version = "2.11.2"
 
requires_python = ">=3.5"
 
summary = "Pygments is a syntax highlighting package written in Python."
 

	
 
[[package]]
 
name = "pygobject"
 
version = "3.42.1"
 
requires_python = ">=3.6, <4"
 
summary = "Python bindings for GObject Introspection"
 
dependencies = [
 
    "pycairo>=1.16.0",
 
]
 

	
 
[[package]]
 
name = "pyhamcrest"
 
version = "2.0.3"
 
requires_python = ">=3.5"
 
summary = "Hamcrest framework for matcher objects"
 

	
 
[[package]]
 
name = "pyjade"
 
version = "4.0.0"
 
summary = "Jade syntax template adapter for Django, Jinja2, Mako and Tornado templates"
 
dependencies = [
 
    "six",
 
]
 

	
 
[[package]]
 
name = "pyopenssl"
 
version = "19.0.0"
 
summary = "Python wrapper module around the OpenSSL library"
 
dependencies = [
 
    "cryptography>=2.3",
 
    "six>=1.5.2",
 
]
 

	
 
[[package]]
 
name = "pyparsing"
 
@@ -984,49 +999,49 @@ requires_python = ">=3.5,"
 
summary = "A library for working with color names and color values formats defined by HTML and CSS."
 

	
 
[[package]]
 
name = "werkzeug"
 
version = "2.1.1"
 
requires_python = ">=3.7"
 
summary = "The comprehensive WSGI web application library."
 

	
 
[[package]]
 
name = "yapf"
 
version = "0.32.0"
 
summary = "A formatter for Python code."
 

	
 
[[package]]
 
name = "zope.interface"
 
version = "5.4.0"
 
requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
 
summary = "Interfaces for Python"
 
dependencies = [
 
    "setuptools",
 
]
 

	
 
[metadata]
 
lock_version = "3.1"
 
content_hash = "sha256:6f3675b6f2fd3a785447ebcdba3d06525aaf1b087518801257dd2a63d3ec9e64"
 
content_hash = "sha256:cf4d983fdeb6aa86b91406cc99a3987f77340f9e0b544d0fbce0c213e25ca8c4"
 

	
 
[metadata.files]
 
"anyio 3.5.0" = [
 
    {file = "anyio-3.5.0-py3-none-any.whl", hash = "sha256:b5fa16c5ff93fa1046f2eeb5bbff2dad4d3514d6cda61d02816dba34fa8c3c2e"},
 
    {file = "anyio-3.5.0.tar.gz", hash = "sha256:a0aeffe2fb1fdf374a8e4b471444f0f3ac4fb9f5a5b542b48824475e0042a5a6"},
 
]
 
"appnope 0.1.3" = [
 
    {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"},
 
    {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"},
 
]
 
"asgiref 3.5.0" = [
 
    {file = "asgiref-3.5.0-py3-none-any.whl", hash = "sha256:88d59c13d634dcffe0510be048210188edd79aeccb6a6c9028cdad6f31d730a9"},
 
    {file = "asgiref-3.5.0.tar.gz", hash = "sha256:2f8abc20f7248433085eda803936d98992f1343ddb022065779f37c5da0181d0"},
 
]
 
"asttokens 2.0.5" = [
 
    {file = "asttokens-2.0.5-py2.py3-none-any.whl", hash = "sha256:0844691e88552595a6f4a4281a9f7f79b8dd45ca4ccea82e5e05b4bbdb76705c"},
 
    {file = "asttokens-2.0.5.tar.gz", hash = "sha256:9a54c114f02c7a9480d56550932546a3f1fe71d8a02f1bc7ccd0ee3ee35cf4d5"},
 
]
 
"atomicwrites 1.4.0" = [
 
    {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"},
 
    {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
 
]
 
"attrs 21.4.0" = [
 
    {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"},
 
@@ -1521,68 +1536,82 @@ content_hash = "sha256:6f3675b6f2fd3a785
 
    {file = "psutil-5.9.0-cp39-cp39-win32.whl", hash = "sha256:4e2fb92e3aeae3ec3b7b66c528981fd327fb93fd906a77215200404444ec1845"},
 
    {file = "psutil-5.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:7d190ee2eaef7831163f254dc58f6d2e2a22e27382b936aab51c835fc080c3d3"},
 
    {file = "psutil-5.9.0.tar.gz", hash = "sha256:869842dbd66bb80c3217158e629d6fceaecc3a3166d3d1faee515b05dd26ca25"},
 
]
 
"ptyprocess 0.7.0" = [
 
    {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"},
 
    {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"},
 
]
 
"pure-eval 0.2.2" = [
 
    {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"},
 
    {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"},
 
]
 
"py 1.11.0" = [
 
    {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
 
    {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
 
]
 
"pyasn1 0.4.8" = [
 
    {file = "pyasn1-0.4.8-py2.py3-none-any.whl", hash = "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d"},
 
    {file = "pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"},
 
]
 
"pyasn1-modules 0.2.8" = [
 
    {file = "pyasn1_modules-0.2.8-py2.py3-none-any.whl", hash = "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74"},
 
    {file = "pyasn1-modules-0.2.8.tar.gz", hash = "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e"},
 
]
 
"pycairo 1.21.0" = [
 
    {file = "pycairo-1.21.0-cp310-cp310-win32.whl", hash = "sha256:44a2ecf34968de07b3b9dfdcdbccbd25aa3cab267200f234f84e81481a73bbf6"},
 
    {file = "pycairo-1.21.0-cp310-cp310-win_amd64.whl", hash = "sha256:f63c153a9ea3d21aff85e2caeee4b0c5d566b2368b4ed64826020d12953d76a4"},
 
    {file = "pycairo-1.21.0-cp37-cp37m-win32.whl", hash = "sha256:70936b19f967fa3cb3cd200c2608911227fa5d09dae21c166f64bc15e714ee41"},
 
    {file = "pycairo-1.21.0-cp37-cp37m-win_amd64.whl", hash = "sha256:31e1c4850db03201d33929cbe1905ce1b33202683ebda7bb0d4dba489115066b"},
 
    {file = "pycairo-1.21.0-cp38-cp38-win32.whl", hash = "sha256:dace6b356c476de27f8e1522428ac21a799c225703f746e2957d441f885dcb6c"},
 
    {file = "pycairo-1.21.0-cp38-cp38-win_amd64.whl", hash = "sha256:4357f20a6b1de8f1e8072a74ff68ab4c9a0ae698cd9f5c0f2b2cdd9b28b635f6"},
 
    {file = "pycairo-1.21.0-cp39-cp39-win32.whl", hash = "sha256:6d37375aab9f2bb6136f076c19815d72108383baae89fbc0d6cb8e5092217d02"},
 
    {file = "pycairo-1.21.0-cp39-cp39-win_amd64.whl", hash = "sha256:26b72b813c6f9d495f71057eab89c13e70a21c92360e9265abc049e0a931fa39"},
 
    {file = "pycairo-1.21.0.tar.gz", hash = "sha256:251907f18a552df938aa3386657ff4b5a4937dde70e11aa042bc297957f4b74b"},
 
]
 
"pycodestyle 2.8.0" = [
 
    {file = "pycodestyle-2.8.0-py2.py3-none-any.whl", hash = "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20"},
 
    {file = "pycodestyle-2.8.0.tar.gz", hash = "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f"},
 
]
 
"pycparser 2.21" = [
 
    {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
 
    {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
 
]
 
"pyflakes 2.4.0" = [
 
    {file = "pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"},
 
    {file = "pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"},
 
]
 
"pyftdi 0.54.0" = [
 
    {file = "pyftdi-0.54.0-py3-none-any.whl", hash = "sha256:112f16ee5b2a2becb8f8df9dd40b3bba007589f34e7613024122d94bd56eb7d7"},
 
    {file = "pyftdi-0.54.0.tar.gz", hash = "sha256:8df9af22077d17533d2f95b508b1d87959877627ea5dc2369056e90a3b5a232d"},
 
]
 
"pygments 2.11.2" = [
 
    {file = "Pygments-2.11.2-py3-none-any.whl", hash = "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65"},
 
    {file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"},
 
]
 
"pygobject 3.42.1" = [
 
    {file = "PyGObject-3.42.1.tar.gz", hash = "sha256:80d6a3ad1630e9d1edf31b9e9fad9a894c57e18545a3c95ef0044ac4042b8620"},
 
]
 
"pyhamcrest 2.0.3" = [
 
    {file = "PyHamcrest-2.0.3-py3-none-any.whl", hash = "sha256:c29dc977154c49e17c30d1ed49a0a6e31cb0dc7bcf733ac4aa9cb58519c2b00c"},
 
    {file = "PyHamcrest-2.0.3.tar.gz", hash = "sha256:dfb19cf6d71743e086fbb761ed7faea5aacbc8ec10c17a08b93ecde39192a3db"},
 
]
 
"pyjade 4.0.0" = [
 
    {file = "pyjade-4.0.0.tar.gz", hash = "sha256:8d95b741de09c4942259fc3d1ad7b4f48166e69cef6f11c172e4b2c458b1ccd7"},
 
]
 
"pyopenssl 19.0.0" = [
 
    {file = "pyOpenSSL-19.0.0-py2.py3-none-any.whl", hash = "sha256:c727930ad54b10fc157015014b666f2d8b41f70c0d03e83ab67624fd3dd5d1e6"},
 
    {file = "pyOpenSSL-19.0.0.tar.gz", hash = "sha256:aeca66338f6de19d1aa46ed634c3b9ae519a64b458f8468aec688e7e3c20f200"},
 
]
 
"pyparsing 3.0.7" = [
 
    {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"},
 
    {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"},
 
]
 
"pyreadline3 3.4.1" = [
 
    {file = "pyreadline3-3.4.1-py3-none-any.whl", hash = "sha256:b0efb6516fd4fb07b45949053826a62fa4cb353db5be2bbb4a7aa1fdd1e345fb"},
 
    {file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"},
 
]
 
"pyserial 3.5" = [
 
    {file = "pyserial-3.5-py2.py3-none-any.whl", hash = "sha256:c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0"},
 
    {file = "pyserial-3.5.tar.gz", hash = "sha256:3c77e014170dfffbd816e6ffc205e9842efb10be9f58ec16d3e8675b4925cddb"},
 
]
 
"pytest 7.1.1" = [
pnpm-lock.yaml
Show inline comments
 
lockfileVersion: 5.3
 

	
 
specifiers:
 
  '@types/debug': ^4.1.7
 
  '@webcomponents/shadycss': ^1.3.1
 
  '@webcomponents/webcomponentsjs': ^1.2.0
 
  bower: ^1.8.4
 
  browserify: ^16.2.3
 
  chai: ^3.5.0
 
  cjs-to-es6: ^1.1.1
 
  coffeelint: ^2.1.0
 
  coffeescript: ^2.3.0
 
  d3: ^5.1.0
 
  debug: ^4.3.4
 
  esmify: ^2.1.1
 
  lit: ^2.2.2
 
  mocha: ^2.5.3
 
  n3: ^1.0.0-alpha
 
  parse-prometheus-text-format: ^1.1.1
 
  pixi.js: ^4.7.3
 
  significant-rounding: ^2.0.0
 
  tinycolor2: ^1.4.1
 
  vite: ^2.9.1
 

	
 
dependencies:
 
  '@types/debug': 4.1.7
 
  '@webcomponents/shadycss': 1.11.0
 
  '@webcomponents/webcomponentsjs': 1.3.3
 
  bower: 1.8.14
 
  browserify: 16.5.2
 
  chai: 3.5.0
 
  cjs-to-es6: 1.1.1
 
  coffeelint: 2.1.0
 
  coffeescript: 2.6.1
 
  d3: 5.16.0
 
  debug: 4.3.4
 
  esmify: 2.1.1
 
  lit: 2.2.2
 
  mocha: 2.5.3
 
  n3: 1.16.0
 
  parse-prometheus-text-format: 1.1.1
 
  pixi.js: 4.8.9
 
  significant-rounding: 2.0.0
 
  tinycolor2: 1.4.2
 
  vite: 2.9.1
 

	
 
packages:
 

	
 
  /5to6-codemod/1.8.0:
 
    resolution: {integrity: sha512-RUHjjwl9+p1d46USvmoKsmMaHODFUAESE1de/q0qQM+hwzgk/HssTwb1Nc5dbUpKEkJ7duLg6ggMIwScd+TRig==}
 
    dependencies:
 
      jscodeshift: 0.6.4
 
      lodash: 4.17.21
 
      recast: 0.12.9
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /@ampproject/remapping/2.1.2:
 
    resolution: {integrity: sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==}
 
    engines: {node: '>=6.0.0'}
 
    dependencies:
 
      '@jridgewell/trace-mapping': 0.3.4
 
    dev: false
 

	
 
  /@babel/code-frame/7.16.7:
 
    resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==}
 
    engines: {node: '>=6.9.0'}
 
@@ -323,48 +321,50 @@ packages:
 
  /@babel/helpers/7.17.9:
 
    resolution: {integrity: sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==}
 
    engines: {node: '>=6.9.0'}
 
    dependencies:
 
      '@babel/template': 7.16.7
 
      '@babel/traverse': 7.17.9
 
      '@babel/types': 7.17.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /@babel/highlight/7.17.9:
 
    resolution: {integrity: sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==}
 
    engines: {node: '>=6.9.0'}
 
    dependencies:
 
      '@babel/helper-validator-identifier': 7.16.7
 
      chalk: 2.4.2
 
      js-tokens: 4.0.0
 
    dev: false
 

	
 
  /@babel/parser/7.17.9:
 
    resolution: {integrity: sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==}
 
    engines: {node: '>=6.0.0'}
 
    hasBin: true
 
    dependencies:
 
      '@babel/types': 7.17.0
 
    dev: false
 

	
 
  /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.16.7_@babel+core@7.17.9:
 
    resolution: {integrity: sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==}
 
    engines: {node: '>=6.9.0'}
 
    peerDependencies:
 
      '@babel/core': ^7.0.0
 
    dependencies:
 
      '@babel/core': 7.17.9
 
      '@babel/helper-plugin-utils': 7.16.7
 
    dev: false
 

	
 
  /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.16.7_@babel+core@7.17.9:
 
    resolution: {integrity: sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==}
 
    engines: {node: '>=6.9.0'}
 
    peerDependencies:
 
      '@babel/core': ^7.13.0
 
    dependencies:
 
      '@babel/core': 7.17.9
 
      '@babel/helper-plugin-utils': 7.16.7
 
      '@babel/helper-skip-transparent-expression-wrappers': 7.16.0
 
      '@babel/plugin-proposal-optional-chaining': 7.16.7_@babel+core@7.17.9
 
    dev: false
 

	
 
@@ -1514,247 +1514,273 @@ packages:
 
      esutils: 2.0.3
 
      fs-readdir-recursive: 0.1.2
 
      globals: 6.4.1
 
      home-or-tmp: 1.0.0
 
      is-integer: 1.0.7
 
      js-tokens: 1.0.1
 
      json5: 0.4.0
 
      lodash: 3.10.1
 
      minimatch: 2.0.10
 
      output-file-sync: 1.1.2
 
      path-exists: 1.0.0
 
      path-is-absolute: 1.0.1
 
      private: 0.1.8
 
      regenerator: 0.8.40
 
      regexpu: 1.3.0
 
      repeating: 1.1.3
 
      resolve: 1.22.0
 
      shebang-regex: 1.0.0
 
      slash: 1.0.0
 
      source-map: 0.5.7
 
      source-map-support: 0.2.10
 
      to-fast-properties: 1.0.3
 
      trim-right: 1.0.1
 
      try-resolve: 1.0.1
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-core/6.26.3:
 
    resolution: {integrity: sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==}
 
    dependencies:
 
      babel-code-frame: 6.26.0
 
      babel-generator: 6.26.1
 
      babel-helpers: 6.24.1
 
      babel-messages: 6.23.0
 
      babel-register: 6.26.0
 
      babel-runtime: 6.26.0
 
      babel-template: 6.26.0
 
      babel-traverse: 6.26.0
 
      babel-types: 6.26.0
 
      babylon: 6.18.0
 
      convert-source-map: 1.8.0
 
      debug: 2.6.9
 
      json5: 0.5.1
 
      lodash: 4.17.21
 
      minimatch: 3.1.2
 
      path-is-absolute: 1.0.1
 
      private: 0.1.8
 
      slash: 1.0.0
 
      source-map: 0.5.7
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-core/7.0.0-bridge.0_@babel+core@7.17.9:
 
    resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==}
 
    peerDependencies:
 
      '@babel/core': ^7.0.0-0
 
    dependencies:
 
      '@babel/core': 7.17.9
 
    dev: false
 

	
 
  /babel-generator/6.26.1:
 
    resolution: {integrity: sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==}
 
    dependencies:
 
      babel-messages: 6.23.0
 
      babel-runtime: 6.26.0
 
      babel-types: 6.26.0
 
      detect-indent: 4.0.0
 
      jsesc: 1.3.0
 
      lodash: 4.17.21
 
      source-map: 0.5.7
 
      trim-right: 1.0.1
 
    dev: false
 

	
 
  /babel-helper-bindify-decorators/6.24.1:
 
    resolution: {integrity: sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=}
 
    dependencies:
 
      babel-runtime: 6.26.0
 
      babel-traverse: 6.26.0
 
      babel-types: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-helper-builder-binary-assignment-operator-visitor/6.24.1:
 
    resolution: {integrity: sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=}
 
    dependencies:
 
      babel-helper-explode-assignable-expression: 6.24.1
 
      babel-runtime: 6.26.0
 
      babel-types: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-helper-call-delegate/6.24.1:
 
    resolution: {integrity: sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=}
 
    dependencies:
 
      babel-helper-hoist-variables: 6.24.1
 
      babel-runtime: 6.26.0
 
      babel-traverse: 6.26.0
 
      babel-types: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-helper-define-map/6.26.0:
 
    resolution: {integrity: sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=}
 
    dependencies:
 
      babel-helper-function-name: 6.24.1
 
      babel-runtime: 6.26.0
 
      babel-types: 6.26.0
 
      lodash: 4.17.21
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-helper-explode-assignable-expression/6.24.1:
 
    resolution: {integrity: sha1-8luCz33BBDPFX3BZLVdGQArCLKo=}
 
    dependencies:
 
      babel-runtime: 6.26.0
 
      babel-traverse: 6.26.0
 
      babel-types: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-helper-explode-class/6.24.1:
 
    resolution: {integrity: sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=}
 
    dependencies:
 
      babel-helper-bindify-decorators: 6.24.1
 
      babel-runtime: 6.26.0
 
      babel-traverse: 6.26.0
 
      babel-types: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-helper-function-name/6.24.1:
 
    resolution: {integrity: sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=}
 
    dependencies:
 
      babel-helper-get-function-arity: 6.24.1
 
      babel-runtime: 6.26.0
 
      babel-template: 6.26.0
 
      babel-traverse: 6.26.0
 
      babel-types: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-helper-get-function-arity/6.24.1:
 
    resolution: {integrity: sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=}
 
    dependencies:
 
      babel-runtime: 6.26.0
 
      babel-types: 6.26.0
 
    dev: false
 

	
 
  /babel-helper-hoist-variables/6.24.1:
 
    resolution: {integrity: sha1-HssnaJydJVE+rbyZFKc/VAi+enY=}
 
    dependencies:
 
      babel-runtime: 6.26.0
 
      babel-types: 6.26.0
 
    dev: false
 

	
 
  /babel-helper-optimise-call-expression/6.24.1:
 
    resolution: {integrity: sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=}
 
    dependencies:
 
      babel-runtime: 6.26.0
 
      babel-types: 6.26.0
 
    dev: false
 

	
 
  /babel-helper-regex/6.26.0:
 
    resolution: {integrity: sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=}
 
    dependencies:
 
      babel-runtime: 6.26.0
 
      babel-types: 6.26.0
 
      lodash: 4.17.21
 
    dev: false
 

	
 
  /babel-helper-remap-async-to-generator/6.24.1:
 
    resolution: {integrity: sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=}
 
    dependencies:
 
      babel-helper-function-name: 6.24.1
 
      babel-runtime: 6.26.0
 
      babel-template: 6.26.0
 
      babel-traverse: 6.26.0
 
      babel-types: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-helper-replace-supers/6.24.1:
 
    resolution: {integrity: sha1-v22/5Dk40XNpohPKiov3S2qQqxo=}
 
    dependencies:
 
      babel-helper-optimise-call-expression: 6.24.1
 
      babel-messages: 6.23.0
 
      babel-runtime: 6.26.0
 
      babel-template: 6.26.0
 
      babel-traverse: 6.26.0
 
      babel-types: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-helpers/6.24.1:
 
    resolution: {integrity: sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=}
 
    dependencies:
 
      babel-runtime: 6.26.0
 
      babel-template: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-messages/6.23.0:
 
    resolution: {integrity: sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=}
 
    dependencies:
 
      babel-runtime: 6.26.0
 
    dev: false
 

	
 
  /babel-plugin-check-es2015-constants/6.22.0:
 
    resolution: {integrity: sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=}
 
    dependencies:
 
      babel-runtime: 6.26.0
 
    dev: false
 

	
 
  /babel-plugin-constant-folding/1.0.1:
 
    resolution: {integrity: sha1-g2HTZMmORJw2kr26Ue/whEKQqo4=}
 
    dev: false
 

	
 
  /babel-plugin-dead-code-elimination/1.0.2:
 
    resolution: {integrity: sha1-X3xFEnTc18zNv7s+C4XdKBIfD2U=}
 
    dev: false
 

	
 
  /babel-plugin-dynamic-import-node/2.3.3:
 
    resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==}
 
    dependencies:
 
      object.assign: 4.1.2
 
    dev: false
 

	
 
  /babel-plugin-eval/1.0.1:
 
    resolution: {integrity: sha1-ovrtJc5r5preS/7CY/cBaRlZUNo=}
 
    dev: false
 

	
 
  /babel-plugin-import-to-require/1.0.0:
 
    resolution: {integrity: sha512-dc843CwrFivjO8AVgxcHvxl0cb7J7Ed8ZGFP8+PjH3X1CnyzYtAU1WL1349m9Wc/+oqk4ETx2+cIEO2jlp3XyQ==}
 
    dependencies:
 
      babel-template: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-plugin-inline-environment-variables/1.0.1:
 
    resolution: {integrity: sha1-H1jOkSB61qgmqL9kX6/mj/X+P/4=}
 
    dev: false
 

	
 
  /babel-plugin-jscript/1.0.4:
 
    resolution: {integrity: sha1-jzQsOCduh6R9X6CovT1etsytj8w=}
 
    dev: false
 

	
 
  /babel-plugin-member-expression-literals/1.0.1:
 
    resolution: {integrity: sha1-zF7bD6qNyScXDnTW0cAkQAIWJNM=}
 
    dev: false
 

	
 
  /babel-plugin-polyfill-corejs2/0.3.1_@babel+core@7.17.9:
 
    resolution: {integrity: sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==}
 
    peerDependencies:
 
      '@babel/core': ^7.0.0-0
 
    dependencies:
 
      '@babel/compat-data': 7.17.7
 
      '@babel/core': 7.17.9
 
      '@babel/helper-define-polyfill-provider': 0.3.1_@babel+core@7.17.9
 
      semver: 6.3.0
 
    transitivePeerDependencies:
 
@@ -1843,210 +1869,240 @@ packages:
 
    dev: false
 

	
 
  /babel-plugin-syntax-export-extensions/6.13.0:
 
    resolution: {integrity: sha1-cKFITw+QiaToStRLrDU8lbmxJyE=}
 
    dev: false
 

	
 
  /babel-plugin-syntax-flow/6.18.0:
 
    resolution: {integrity: sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=}
 
    dev: false
 

	
 
  /babel-plugin-syntax-object-rest-spread/6.13.0:
 
    resolution: {integrity: sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=}
 
    dev: false
 

	
 
  /babel-plugin-syntax-trailing-function-commas/6.22.0:
 
    resolution: {integrity: sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=}
 
    dev: false
 

	
 
  /babel-plugin-transform-async-generator-functions/6.24.1:
 
    resolution: {integrity: sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=}
 
    dependencies:
 
      babel-helper-remap-async-to-generator: 6.24.1
 
      babel-plugin-syntax-async-generators: 6.13.0
 
      babel-runtime: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-plugin-transform-async-to-generator/6.24.1:
 
    resolution: {integrity: sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=}
 
    dependencies:
 
      babel-helper-remap-async-to-generator: 6.24.1
 
      babel-plugin-syntax-async-functions: 6.13.0
 
      babel-runtime: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-plugin-transform-class-constructor-call/6.24.1:
 
    resolution: {integrity: sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=}
 
    dependencies:
 
      babel-plugin-syntax-class-constructor-call: 6.18.0
 
      babel-runtime: 6.26.0
 
      babel-template: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-plugin-transform-class-properties/6.24.1:
 
    resolution: {integrity: sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=}
 
    dependencies:
 
      babel-helper-function-name: 6.24.1
 
      babel-plugin-syntax-class-properties: 6.13.0
 
      babel-runtime: 6.26.0
 
      babel-template: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-plugin-transform-decorators/6.24.1:
 
    resolution: {integrity: sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=}
 
    dependencies:
 
      babel-helper-explode-class: 6.24.1
 
      babel-plugin-syntax-decorators: 6.13.0
 
      babel-runtime: 6.26.0
 
      babel-template: 6.26.0
 
      babel-types: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-plugin-transform-es2015-arrow-functions/6.22.0:
 
    resolution: {integrity: sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=}
 
    dependencies:
 
      babel-runtime: 6.26.0
 
    dev: false
 

	
 
  /babel-plugin-transform-es2015-block-scoped-functions/6.22.0:
 
    resolution: {integrity: sha1-u8UbSflk1wy42OC5ToICRs46YUE=}
 
    dependencies:
 
      babel-runtime: 6.26.0
 
    dev: false
 

	
 
  /babel-plugin-transform-es2015-block-scoping/6.26.0:
 
    resolution: {integrity: sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=}
 
    dependencies:
 
      babel-runtime: 6.26.0
 
      babel-template: 6.26.0
 
      babel-traverse: 6.26.0
 
      babel-types: 6.26.0
 
      lodash: 4.17.21
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-plugin-transform-es2015-classes/6.24.1:
 
    resolution: {integrity: sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=}
 
    dependencies:
 
      babel-helper-define-map: 6.26.0
 
      babel-helper-function-name: 6.24.1
 
      babel-helper-optimise-call-expression: 6.24.1
 
      babel-helper-replace-supers: 6.24.1
 
      babel-messages: 6.23.0
 
      babel-runtime: 6.26.0
 
      babel-template: 6.26.0
 
      babel-traverse: 6.26.0
 
      babel-types: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-plugin-transform-es2015-computed-properties/6.24.1:
 
    resolution: {integrity: sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=}
 
    dependencies:
 
      babel-runtime: 6.26.0
 
      babel-template: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-plugin-transform-es2015-destructuring/6.23.0:
 
    resolution: {integrity: sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=}
 
    dependencies:
 
      babel-runtime: 6.26.0
 
    dev: false
 

	
 
  /babel-plugin-transform-es2015-duplicate-keys/6.24.1:
 
    resolution: {integrity: sha1-c+s9MQypaePvnskcU3QabxV2Qj4=}
 
    dependencies:
 
      babel-runtime: 6.26.0
 
      babel-types: 6.26.0
 
    dev: false
 

	
 
  /babel-plugin-transform-es2015-for-of/6.23.0:
 
    resolution: {integrity: sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=}
 
    dependencies:
 
      babel-runtime: 6.26.0
 
    dev: false
 

	
 
  /babel-plugin-transform-es2015-function-name/6.24.1:
 
    resolution: {integrity: sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=}
 
    dependencies:
 
      babel-helper-function-name: 6.24.1
 
      babel-runtime: 6.26.0
 
      babel-types: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-plugin-transform-es2015-literals/6.22.0:
 
    resolution: {integrity: sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=}
 
    dependencies:
 
      babel-runtime: 6.26.0
 
    dev: false
 

	
 
  /babel-plugin-transform-es2015-modules-amd/6.24.1:
 
    resolution: {integrity: sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=}
 
    dependencies:
 
      babel-plugin-transform-es2015-modules-commonjs: 6.26.2
 
      babel-runtime: 6.26.0
 
      babel-template: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-plugin-transform-es2015-modules-commonjs/6.26.2:
 
    resolution: {integrity: sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==}
 
    dependencies:
 
      babel-plugin-transform-strict-mode: 6.24.1
 
      babel-runtime: 6.26.0
 
      babel-template: 6.26.0
 
      babel-types: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-plugin-transform-es2015-modules-systemjs/6.24.1:
 
    resolution: {integrity: sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=}
 
    dependencies:
 
      babel-helper-hoist-variables: 6.24.1
 
      babel-runtime: 6.26.0
 
      babel-template: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-plugin-transform-es2015-modules-umd/6.24.1:
 
    resolution: {integrity: sha1-rJl+YoXNGO1hdq22B9YCNErThGg=}
 
    dependencies:
 
      babel-plugin-transform-es2015-modules-amd: 6.24.1
 
      babel-runtime: 6.26.0
 
      babel-template: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-plugin-transform-es2015-object-super/6.24.1:
 
    resolution: {integrity: sha1-JM72muIcuDp/hgPa0CH1cusnj40=}
 
    dependencies:
 
      babel-helper-replace-supers: 6.24.1
 
      babel-runtime: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-plugin-transform-es2015-parameters/6.24.1:
 
    resolution: {integrity: sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=}
 
    dependencies:
 
      babel-helper-call-delegate: 6.24.1
 
      babel-helper-get-function-arity: 6.24.1
 
      babel-runtime: 6.26.0
 
      babel-template: 6.26.0
 
      babel-traverse: 6.26.0
 
      babel-types: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-plugin-transform-es2015-shorthand-properties/6.24.1:
 
    resolution: {integrity: sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=}
 
    dependencies:
 
      babel-runtime: 6.26.0
 
      babel-types: 6.26.0
 
    dev: false
 

	
 
  /babel-plugin-transform-es2015-spread/6.22.0:
 
    resolution: {integrity: sha1-1taKmfia7cRTbIGlQujdnxdG+NE=}
 
    dependencies:
 
      babel-runtime: 6.26.0
 
    dev: false
 

	
 
  /babel-plugin-transform-es2015-sticky-regex/6.24.1:
 
    resolution: {integrity: sha1-AMHNsaynERLN8M9hJsLta0V8zbw=}
 
    dependencies:
 
      babel-helper-regex: 6.26.0
 
      babel-runtime: 6.26.0
 
      babel-types: 6.26.0
 
    dev: false
 

	
 
  /babel-plugin-transform-es2015-template-literals/6.22.0:
 
@@ -2054,48 +2110,50 @@ packages:
 
    dependencies:
 
      babel-runtime: 6.26.0
 
    dev: false
 

	
 
  /babel-plugin-transform-es2015-typeof-symbol/6.23.0:
 
    resolution: {integrity: sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=}
 
    dependencies:
 
      babel-runtime: 6.26.0
 
    dev: false
 

	
 
  /babel-plugin-transform-es2015-unicode-regex/6.24.1:
 
    resolution: {integrity: sha1-04sS9C6nMj9yk4fxinxa4frrNek=}
 
    dependencies:
 
      babel-helper-regex: 6.26.0
 
      babel-runtime: 6.26.0
 
      regexpu-core: 2.0.0
 
    dev: false
 

	
 
  /babel-plugin-transform-exponentiation-operator/6.24.1:
 
    resolution: {integrity: sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=}
 
    dependencies:
 
      babel-helper-builder-binary-assignment-operator-visitor: 6.24.1
 
      babel-plugin-syntax-exponentiation-operator: 6.13.0
 
      babel-runtime: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-plugin-transform-export-extensions/6.22.0:
 
    resolution: {integrity: sha1-U3OLR+deghhYnuqUbLvTkQm75lM=}
 
    dependencies:
 
      babel-plugin-syntax-export-extensions: 6.13.0
 
      babel-runtime: 6.26.0
 
    dev: false
 

	
 
  /babel-plugin-transform-flow-strip-types/6.22.0:
 
    resolution: {integrity: sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=}
 
    dependencies:
 
      babel-plugin-syntax-flow: 6.18.0
 
      babel-runtime: 6.26.0
 
    dev: false
 

	
 
  /babel-plugin-transform-object-rest-spread/6.26.0:
 
    resolution: {integrity: sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=}
 
    dependencies:
 
      babel-plugin-syntax-object-rest-spread: 6.13.0
 
      babel-runtime: 6.26.0
 
    dev: false
 

	
 
  /babel-plugin-transform-regenerator/6.26.0:
 
@@ -2128,118 +2186,132 @@ packages:
 
      babel-plugin-check-es2015-constants: 6.22.0
 
      babel-plugin-transform-es2015-arrow-functions: 6.22.0
 
      babel-plugin-transform-es2015-block-scoped-functions: 6.22.0
 
      babel-plugin-transform-es2015-block-scoping: 6.26.0
 
      babel-plugin-transform-es2015-classes: 6.24.1
 
      babel-plugin-transform-es2015-computed-properties: 6.24.1
 
      babel-plugin-transform-es2015-destructuring: 6.23.0
 
      babel-plugin-transform-es2015-duplicate-keys: 6.24.1
 
      babel-plugin-transform-es2015-for-of: 6.23.0
 
      babel-plugin-transform-es2015-function-name: 6.24.1
 
      babel-plugin-transform-es2015-literals: 6.22.0
 
      babel-plugin-transform-es2015-modules-amd: 6.24.1
 
      babel-plugin-transform-es2015-modules-commonjs: 6.26.2
 
      babel-plugin-transform-es2015-modules-systemjs: 6.24.1
 
      babel-plugin-transform-es2015-modules-umd: 6.24.1
 
      babel-plugin-transform-es2015-object-super: 6.24.1
 
      babel-plugin-transform-es2015-parameters: 6.24.1
 
      babel-plugin-transform-es2015-shorthand-properties: 6.24.1
 
      babel-plugin-transform-es2015-spread: 6.22.0
 
      babel-plugin-transform-es2015-sticky-regex: 6.24.1
 
      babel-plugin-transform-es2015-template-literals: 6.22.0
 
      babel-plugin-transform-es2015-typeof-symbol: 6.23.0
 
      babel-plugin-transform-es2015-unicode-regex: 6.24.1
 
      babel-plugin-transform-regenerator: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-preset-stage-1/6.24.1:
 
    resolution: {integrity: sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=}
 
    dependencies:
 
      babel-plugin-transform-class-constructor-call: 6.24.1
 
      babel-plugin-transform-export-extensions: 6.22.0
 
      babel-preset-stage-2: 6.24.1
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-preset-stage-2/6.24.1:
 
    resolution: {integrity: sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=}
 
    dependencies:
 
      babel-plugin-syntax-dynamic-import: 6.18.0
 
      babel-plugin-transform-class-properties: 6.24.1
 
      babel-plugin-transform-decorators: 6.24.1
 
      babel-preset-stage-3: 6.24.1
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-preset-stage-3/6.24.1:
 
    resolution: {integrity: sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=}
 
    dependencies:
 
      babel-plugin-syntax-trailing-function-commas: 6.22.0
 
      babel-plugin-transform-async-generator-functions: 6.24.1
 
      babel-plugin-transform-async-to-generator: 6.24.1
 
      babel-plugin-transform-exponentiation-operator: 6.24.1
 
      babel-plugin-transform-object-rest-spread: 6.26.0
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-register/6.26.0:
 
    resolution: {integrity: sha1-btAhFz4vy0htestFxgCahW9kcHE=}
 
    dependencies:
 
      babel-core: 6.26.3
 
      babel-runtime: 6.26.0
 
      core-js: 2.6.12
 
      home-or-tmp: 2.0.0
 
      lodash: 4.17.21
 
      mkdirp: 0.5.6
 
      source-map-support: 0.4.18
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-runtime/6.26.0:
 
    resolution: {integrity: sha1-llxwWGaOgrVde/4E/yM3vItWR/4=}
 
    dependencies:
 
      core-js: 2.6.12
 
      regenerator-runtime: 0.11.1
 
    dev: false
 

	
 
  /babel-template/6.26.0:
 
    resolution: {integrity: sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=}
 
    dependencies:
 
      babel-runtime: 6.26.0
 
      babel-traverse: 6.26.0
 
      babel-types: 6.26.0
 
      babylon: 6.18.0
 
      lodash: 4.17.21
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-traverse/6.26.0:
 
    resolution: {integrity: sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=}
 
    dependencies:
 
      babel-code-frame: 6.26.0
 
      babel-messages: 6.23.0
 
      babel-runtime: 6.26.0
 
      babel-types: 6.26.0
 
      babylon: 6.18.0
 
      debug: 2.6.9
 
      globals: 9.18.0
 
      invariant: 2.2.4
 
      lodash: 4.17.21
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /babel-types/6.26.0:
 
    resolution: {integrity: sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=}
 
    dependencies:
 
      babel-runtime: 6.26.0
 
      esutils: 2.0.3
 
      lodash: 4.17.21
 
      to-fast-properties: 1.0.3
 
    dev: false
 

	
 
  /babylon/5.8.38:
 
    resolution: {integrity: sha1-7JsSCxG/bM1Bc6GL8hfmC3mFn/0=}
 
    dev: false
 

	
 
  /babylon/6.18.0:
 
    resolution: {integrity: sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==}
 
    hasBin: true
 
    dev: false
 

	
 
  /balanced-match/1.0.2:
 
    resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
 
    dev: false
 

	
 
@@ -2291,48 +2363,50 @@ packages:
 

	
 
  /braces/1.8.5:
 
    resolution: {integrity: sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=}
 
    engines: {node: '>=0.10.0'}
 
    dependencies:
 
      expand-range: 1.8.2
 
      preserve: 0.2.0
 
      repeat-element: 1.1.4
 
    dev: false
 

	
 
  /braces/2.3.2:
 
    resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==}
 
    engines: {node: '>=0.10.0'}
 
    dependencies:
 
      arr-flatten: 1.1.0
 
      array-unique: 0.3.2
 
      extend-shallow: 2.0.1
 
      fill-range: 4.0.0
 
      isobject: 3.0.1
 
      repeat-element: 1.1.4
 
      snapdragon: 0.8.2
 
      snapdragon-node: 2.1.1
 
      split-string: 3.1.0
 
      to-regex: 3.0.2
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /breakable/1.0.0:
 
    resolution: {integrity: sha1-eEp5eRWjjq0nutRWtVcstLuqeME=}
 
    dev: false
 

	
 
  /brorand/1.1.0:
 
    resolution: {integrity: sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=}
 
    dev: false
 

	
 
  /browser-pack/6.1.0:
 
    resolution: {integrity: sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==}
 
    hasBin: true
 
    dependencies:
 
      combine-source-map: 0.8.0
 
      defined: 1.0.0
 
      JSONStream: 1.3.5
 
      safe-buffer: 5.2.1
 
      through2: 2.0.5
 
      umd: 3.0.3
 
    dev: false
 

	
 
  /browser-resolve/2.0.0:
 
    resolution: {integrity: sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==}
 
@@ -3039,56 +3113,67 @@ packages:
 
      d3-format: 1.4.5
 
      d3-geo: 1.12.1
 
      d3-hierarchy: 1.1.9
 
      d3-interpolate: 1.4.0
 
      d3-path: 1.0.9
 
      d3-polygon: 1.0.6
 
      d3-quadtree: 1.0.7
 
      d3-random: 1.1.2
 
      d3-scale: 2.2.2
 
      d3-scale-chromatic: 1.5.0
 
      d3-selection: 1.4.2
 
      d3-shape: 1.3.7
 
      d3-time: 1.1.0
 
      d3-time-format: 2.3.0
 
      d3-timer: 1.0.10
 
      d3-transition: 1.3.2
 
      d3-voronoi: 1.1.4
 
      d3-zoom: 1.8.3
 
    dev: false
 

	
 
  /dash-ast/1.0.0:
 
    resolution: {integrity: sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==}
 
    dev: false
 

	
 
  /debug/2.2.0:
 
  /debug/2.2.0_supports-color@1.2.0:
 
    resolution: {integrity: sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=}
 
    peerDependencies:
 
      supports-color: '*'
 
    peerDependenciesMeta:
 
      supports-color:
 
        optional: true
 
    dependencies:
 
      ms: 0.7.1
 
      supports-color: 1.2.0
 
    dev: false
 

	
 
  /debug/2.6.9:
 
    resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
 
    peerDependencies:
 
      supports-color: '*'
 
    peerDependenciesMeta:
 
      supports-color:
 
        optional: true
 
    dependencies:
 
      ms: 2.0.0
 
    dev: false
 

	
 
  /debug/4.3.4:
 
    resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
 
    engines: {node: '>=6.0'}
 
    peerDependencies:
 
      supports-color: '*'
 
    peerDependenciesMeta:
 
      supports-color:
 
        optional: true
 
    dependencies:
 
      ms: 2.1.2
 
    dev: false
 

	
 
  /decamelize/1.2.0:
 
    resolution: {integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=}
 
    engines: {node: '>=0.10.0'}
 
    dev: false
 

	
 
  /decode-uri-component/0.2.0:
 
    resolution: {integrity: sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=}
 
    engines: {node: '>=0.10'}
 
@@ -3530,91 +3615,95 @@ packages:
 
    resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==}
 
    dependencies:
 
      md5.js: 1.3.5
 
      safe-buffer: 5.2.1
 
    dev: false
 

	
 
  /expand-brackets/0.1.5:
 
    resolution: {integrity: sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=}
 
    engines: {node: '>=0.10.0'}
 
    dependencies:
 
      is-posix-bracket: 0.1.1
 
    dev: false
 

	
 
  /expand-brackets/2.1.4:
 
    resolution: {integrity: sha1-t3c14xXOMPa27/D4OwQVGiJEliI=}
 
    engines: {node: '>=0.10.0'}
 
    dependencies:
 
      debug: 2.6.9
 
      define-property: 0.2.5
 
      extend-shallow: 2.0.1
 
      posix-character-classes: 0.1.1
 
      regex-not: 1.0.2
 
      snapdragon: 0.8.2
 
      to-regex: 3.0.2
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /expand-range/1.8.2:
 
    resolution: {integrity: sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=}
 
    engines: {node: '>=0.10.0'}
 
    dependencies:
 
      fill-range: 2.2.4
 
    dev: false
 

	
 
  /extend-shallow/2.0.1:
 
    resolution: {integrity: sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=}
 
    engines: {node: '>=0.10.0'}
 
    dependencies:
 
      is-extendable: 0.1.1
 
    dev: false
 

	
 
  /extend-shallow/3.0.2:
 
    resolution: {integrity: sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=}
 
    engines: {node: '>=0.10.0'}
 
    dependencies:
 
      assign-symbols: 1.0.0
 
      is-extendable: 1.0.1
 
    dev: false
 

	
 
  /extglob/0.3.2:
 
    resolution: {integrity: sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=}
 
    engines: {node: '>=0.10.0'}
 
    dependencies:
 
      is-extglob: 1.0.0
 
    dev: false
 

	
 
  /extglob/2.0.4:
 
    resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==}
 
    engines: {node: '>=0.10.0'}
 
    dependencies:
 
      array-unique: 0.3.2
 
      define-property: 1.0.0
 
      expand-brackets: 2.1.4
 
      extend-shallow: 2.0.1
 
      fragment-cache: 0.2.1
 
      regex-not: 1.0.2
 
      snapdragon: 0.8.2
 
      to-regex: 3.0.2
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /fast-safe-stringify/2.1.1:
 
    resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==}
 
    dev: false
 

	
 
  /filename-regex/2.0.1:
 
    resolution: {integrity: sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=}
 
    engines: {node: '>=0.10.0'}
 
    dev: false
 

	
 
  /fill-range/2.2.4:
 
    resolution: {integrity: sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==}
 
    engines: {node: '>=0.10.0'}
 
    dependencies:
 
      is-number: 2.1.0
 
      isobject: 2.1.0
 
      randomatic: 3.1.1
 
      repeat-element: 1.1.4
 
      repeat-string: 1.6.1
 
    dev: false
 

	
 
  /fill-range/4.0.0:
 
    resolution: {integrity: sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=}
 
@@ -4163,48 +4252,50 @@ packages:
 
    resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
 
    dev: false
 

	
 
  /jscodeshift/0.3.32:
 
    resolution: {integrity: sha1-3s5etgLxY0DY2VTH+WrJB8UC6rs=}
 
    engines: {node: '>=4'}
 
    hasBin: true
 
    dependencies:
 
      async: 1.5.2
 
      babel-core: 5.8.38
 
      babel-plugin-transform-flow-strip-types: 6.22.0
 
      babel-preset-es2015: 6.24.1
 
      babel-preset-stage-1: 6.24.1
 
      babel-register: 6.26.0
 
      babylon: 6.18.0
 
      colors: 1.4.1
 
      flow-parser: 0.175.1
 
      lodash: 4.17.21
 
      micromatch: 2.3.11
 
      node-dir: 0.1.8
 
      nomnom: 1.8.1
 
      recast: 0.12.9
 
      temp: 0.8.4
 
      write-file-atomic: 1.3.4
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /jscodeshift/0.6.4:
 
    resolution: {integrity: sha512-+NF/tlNbc2WEhXUuc4WEJLsJumF84tnaMUZW2hyJw3jThKKRvsPX4sPJVgO1lPE28z0gNL+gwniLG9d8mYvQCQ==}
 
    hasBin: true
 
    dependencies:
 
      '@babel/core': 7.17.9
 
      '@babel/parser': 7.17.9
 
      '@babel/plugin-proposal-class-properties': 7.16.7_@babel+core@7.17.9
 
      '@babel/plugin-proposal-object-rest-spread': 7.17.3_@babel+core@7.17.9
 
      '@babel/preset-env': 7.16.11_@babel+core@7.17.9
 
      '@babel/preset-flow': 7.16.7_@babel+core@7.17.9
 
      '@babel/preset-typescript': 7.16.7_@babel+core@7.17.9
 
      '@babel/register': 7.17.7_@babel+core@7.17.9
 
      babel-core: 7.0.0-bridge.0_@babel+core@7.17.9
 
      colors: 1.4.1
 
      flow-parser: 0.175.1
 
      graceful-fs: 4.2.10
 
      micromatch: 3.1.10
 
      neo-async: 2.6.2
 
      node-dir: 0.1.17
 
      recast: 0.16.2
 
      temp: 0.8.4
 
      write-file-atomic: 2.4.3
 
@@ -4433,48 +4524,50 @@ packages:
 
      kind-of: 3.2.2
 
      normalize-path: 2.1.1
 
      object.omit: 2.0.1
 
      parse-glob: 3.0.4
 
      regex-cache: 0.4.4
 
    dev: false
 

	
 
  /micromatch/3.1.10:
 
    resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==}
 
    engines: {node: '>=0.10.0'}
 
    dependencies:
 
      arr-diff: 4.0.0
 
      array-unique: 0.3.2
 
      braces: 2.3.2
 
      define-property: 2.0.2
 
      extend-shallow: 3.0.2
 
      extglob: 2.0.4
 
      fragment-cache: 0.2.1
 
      kind-of: 6.0.3
 
      nanomatch: 1.2.13
 
      object.pick: 1.3.0
 
      regex-not: 1.0.2
 
      snapdragon: 0.8.2
 
      to-regex: 3.0.2
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /miller-rabin/4.0.1:
 
    resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==}
 
    hasBin: true
 
    dependencies:
 
      bn.js: 4.12.0
 
      brorand: 1.1.0
 
    dev: false
 

	
 
  /mini-signals/1.2.0:
 
    resolution: {integrity: sha1-RbCAE8X65RokqhqTXNMXye1yHXQ=}
 
    dev: false
 

	
 
  /minimalistic-assert/1.0.1:
 
    resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==}
 
    dev: false
 

	
 
  /minimalistic-crypto-utils/1.0.1:
 
    resolution: {integrity: sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=}
 
    dev: false
 

	
 
  /minimatch/0.3.0:
 
    resolution: {integrity: sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=}
 
@@ -4526,49 +4619,49 @@ packages:
 
    deprecated: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)
 
    dev: false
 

	
 
  /mkdirp/0.5.1:
 
    resolution: {integrity: sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=}
 
    deprecated: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)
 
    hasBin: true
 
    dependencies:
 
      minimist: 0.0.8
 
    dev: false
 

	
 
  /mkdirp/0.5.6:
 
    resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
 
    hasBin: true
 
    dependencies:
 
      minimist: 1.2.6
 
    dev: false
 

	
 
  /mocha/2.5.3:
 
    resolution: {integrity: sha1-FhvlvetJZ3HrmzV0UFC2IrWu/Fg=}
 
    engines: {node: '>= 0.8.x'}
 
    hasBin: true
 
    dependencies:
 
      commander: 2.3.0
 
      debug: 2.2.0
 
      debug: 2.2.0_supports-color@1.2.0
 
      diff: 1.4.0
 
      escape-string-regexp: 1.0.2
 
      glob: 3.2.11
 
      growl: 1.9.2
 
      jade: 0.26.3
 
      mkdirp: 0.5.1
 
      supports-color: 1.2.0
 
      to-iso-string: 0.0.2
 
    dev: false
 

	
 
  /module-deps/6.2.3:
 
    resolution: {integrity: sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==}
 
    engines: {node: '>= 0.8.0'}
 
    hasBin: true
 
    dependencies:
 
      browser-resolve: 2.0.0
 
      cached-path-relative: 1.1.0
 
      concat-stream: 1.6.2
 
      defined: 1.0.0
 
      detective: 5.2.0
 
      duplexer2: 0.1.4
 
      inherits: 2.0.4
 
      JSONStream: 1.3.5
 
      parents: 1.0.1
 
@@ -4600,48 +4693,50 @@ packages:
 
      readable-stream: 3.6.0
 
    dev: false
 

	
 
  /nanoid/3.3.2:
 
    resolution: {integrity: sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==}
 
    engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
 
    hasBin: true
 
    dev: false
 

	
 
  /nanomatch/1.2.13:
 
    resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==}
 
    engines: {node: '>=0.10.0'}
 
    dependencies:
 
      arr-diff: 4.0.0
 
      array-unique: 0.3.2
 
      define-property: 2.0.2
 
      extend-shallow: 3.0.2
 
      fragment-cache: 0.2.1
 
      is-windows: 1.0.2
 
      kind-of: 6.0.3
 
      object.pick: 1.3.0
 
      regex-not: 1.0.2
 
      snapdragon: 0.8.2
 
      to-regex: 3.0.2
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /neo-async/2.6.2:
 
    resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
 
    dev: false
 

	
 
  /node-dir/0.1.17:
 
    resolution: {integrity: sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=}
 
    engines: {node: '>= 0.10.5'}
 
    dependencies:
 
      minimatch: 3.1.2
 
    dev: false
 

	
 
  /node-dir/0.1.8:
 
    resolution: {integrity: sha1-VfuN62mQcHB/tn+RpGDwRIKUx30=}
 
    engines: {node: '>= 0.10.5'}
 
    dev: false
 

	
 
  /node-releases/2.0.2:
 
    resolution: {integrity: sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==}
 
    dev: false
 

	
 
  /node-version/1.2.0:
 
    resolution: {integrity: sha512-ma6oU4Sk0qOoKEAymVoTvk8EdXEobdS7m/mAGhDJ8Rouugho48crHBORAmy5BoOcv8wraPM6xumapQp5hl4iIQ==}
 
@@ -5417,48 +5512,50 @@ packages:
 
      define-property: 1.0.0
 
      isobject: 3.0.1
 
      snapdragon-util: 3.0.1
 
    dev: false
 

	
 
  /snapdragon-util/3.0.1:
 
    resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==}
 
    engines: {node: '>=0.10.0'}
 
    dependencies:
 
      kind-of: 3.2.2
 
    dev: false
 

	
 
  /snapdragon/0.8.2:
 
    resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==}
 
    engines: {node: '>=0.10.0'}
 
    dependencies:
 
      base: 0.11.2
 
      debug: 2.6.9
 
      define-property: 0.2.5
 
      extend-shallow: 2.0.1
 
      map-cache: 0.2.2
 
      source-map: 0.5.7
 
      source-map-resolve: 0.5.3
 
      use: 3.1.1
 
    transitivePeerDependencies:
 
      - supports-color
 
    dev: false
 

	
 
  /source-map-js/1.0.2:
 
    resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
 
    engines: {node: '>=0.10.0'}
 
    dev: false
 

	
 
  /source-map-resolve/0.5.3:
 
    resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==}
 
    dependencies:
 
      atob: 2.1.2
 
      decode-uri-component: 0.2.0
 
      resolve-url: 0.2.1
 
      source-map-url: 0.4.1
 
      urix: 0.1.0
 
    dev: false
 

	
 
  /source-map-support/0.2.10:
 
    resolution: {integrity: sha1-6lo5AKHByyUJagrozFwrSxDe09w=}
 
    dependencies:
 
      source-map: 0.1.32
 
    dev: false
 

	
 
  /source-map-support/0.4.18:
 
@@ -5631,52 +5728,48 @@ packages:
 
    resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==}
 
    engines: {node: '>=6.0.0'}
 
    dependencies:
 
      rimraf: 2.6.3
 
    dev: false
 

	
 
  /through/2.3.8:
 
    resolution: {integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=}
 
    dev: false
 

	
 
  /through2/2.0.5:
 
    resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
 
    dependencies:
 
      readable-stream: 2.3.7
 
      xtend: 4.0.2
 
    dev: false
 

	
 
  /timers-browserify/1.4.2:
 
    resolution: {integrity: sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=}
 
    engines: {node: '>=0.6.0'}
 
    dependencies:
 
      process: 0.11.10
 
    dev: false
 

	
 
  /tinycolor2/1.4.2:
 
    resolution: {integrity: sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==}
 
    dev: false
 

	
 
  /to-fast-properties/1.0.3:
 
    resolution: {integrity: sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=}
 
    engines: {node: '>=0.10.0'}
 
    dev: false
 

	
 
  /to-fast-properties/2.0.0:
 
    resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=}
 
    engines: {node: '>=4'}
 
    dev: false
 

	
 
  /to-iso-string/0.0.2:
 
    resolution: {integrity: sha1-TcGeZk38y+Jb2NtQiwDG2hWCVdE=}
 
    deprecated: to-iso-string has been deprecated, use @segment/to-iso-string instead.
 
    dev: false
 

	
 
  /to-object-path/0.3.0:
 
    resolution: {integrity: sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=}
 
    engines: {node: '>=0.10.0'}
 
    dependencies:
 
      kind-of: 3.2.2
 
    dev: false
 

	
 
  /to-regex-range/2.1.1:
 
    resolution: {integrity: sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=}
pyproject.toml
Show inline comments
 
@@ -21,48 +21,49 @@ dependencies = [
 
    "pyserial",
 
    "python-dateutil",
 
    "pyusb",
 
    "rdflib",
 
    "requests",
 
    "rx",
 
    "scipy",
 
    "service_identity",
 
    "statprof",
 
    "toposort",
 
    "treq",
 
    "twisted",
 
    "txzmq",
 
    "udmx-pyusb",
 
    "webcolors>=1.11.1",
 
    "watchdog>=2.1.7",
 
    "standardservice @ https://projects.bigasterisk.com/standardservice/standardservice-0.6.0.tar.gz",
 
    "cycloneerr @ https://projects.bigasterisk.com/cycloneerr/cycloneerr-0.4.0.tar.gz",
 
    "rdfdb @ https://projects.bigasterisk.com/rdfdb/rdfdb-0.21.0.tar.gz",
 
    "web.py>=0.62",
 
    "uvicorn>=0.17.6",
 
    "starlette[standard]>=0.19.0",
 
    "prometheus-client>=0.14.1",
 
    "starlette-exporter>=0.12.0",
 
    "PyGObject>=3.42.1",
 
]
 
requires-python = ">=3.9"
 

	
 
[project.urls]
 
Homepage = ""
 

	
 
[tool.pdm]
 

	
 
[tool.pdm.dev-dependencies]
 
dev = [
 
    "coverage",
 
    "flake8",
 
    "freezegun",
 
    "hunter",
 
    "ipdb",
 
    "mock",
 
    "mypy",
 
    "nose-watcher",
 
    "nose",
 
    "pytest-watcher",
 
    "pytest",
 
    "yapf",
 
]
 

	
tasks.py
Show inline comments
 
deleted file
0 comments (0 inline, 0 general)